diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index 30f074df148..bfbe7bd2c02 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -5,7 +5,7 @@ ## Checklist: - - [ ] Branch: Fixes, changes and adjustments should be created against `current`. New documentation for platforms/components and features should go to `next`. - - [ ] The documentation follow the [standards][standards]. +- [ ] Branch: Fixes, changes and adjustments should be created against `current`. New documentation for platforms/components and features should go to `next`. +- [ ] The documentation follow the [standards][standards]. [standards]: https://home-assistant.io/developers/documentation/standards/ diff --git a/.github/move.yml b/.github/move.yml new file mode 100644 index 00000000000..e041083c9ae --- /dev/null +++ b/.github/move.yml @@ -0,0 +1,13 @@ +# Configuration for move-issues - https://github.com/dessant/move-issues + +# Delete the command comment. Ignored when the comment also contains other content +deleteCommand: true +# Close the source issue after moving +closeSourceIssue: true +# Lock the source issue after moving +lockSourceIssue: false +# Set custom aliases for targets +# aliases: +# r: repo +# or: owner/repo + diff --git a/.gitignore b/.gitignore index ec8690ad29c..f02128325f5 100644 --- a/.gitignore +++ b/.gitignore @@ -12,4 +12,11 @@ vendor node_modules source/.jekyll-metadata *.iml -.idea/ \ No newline at end of file +.idea/ +/.vs/home-assistant.github.io/v15/.suo +/.vs/ProjectSettings.json +/.vs/slnx.sqlite +/.vs/config/applicationhost.config +/.vs/slnx.sqlite-journal +/.vs/VSWorkspaceState.json +.vscode diff --git a/.ruby-version b/.ruby-version index 005119baaa0..35cee72dcbf 100644 --- a/.ruby-version +++ b/.ruby-version @@ -1 +1 @@ -2.4.1 +2.4.3 diff --git a/.themes/classic/source/_includes/head.html b/.themes/classic/source/_includes/head.html index 6b5412ca646..48d1018fca5 100644 --- a/.themes/classic/source/_includes/head.html +++ b/.themes/classic/source/_includes/head.html @@ -15,6 +15,7 @@ + {% capture canonical %}{{ site.url }}{% if site.permalink contains '.html' %}{{ page.url }}{% else %}{{ page.url | remove:'index.html' | strip_slash }}{% endif %}{% endcapture %} diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md index 5d2149dce05..de2de6f6b5b 100644 --- a/CODE_OF_CONDUCT.md +++ b/CODE_OF_CONDUCT.md @@ -23,7 +23,7 @@ include: Examples of unacceptable behavior by participants include: * The use of sexualized language or imagery and unwelcome sexual attention or -advances + advances * Trolling, insulting/derogatory comments, and personal or political attacks * Public or private harassment * Publishing others' private information, such as a physical or electronic diff --git a/Gemfile b/Gemfile index d7b8fe661d0..1b5ab49ea5a 100644 --- a/Gemfile +++ b/Gemfile @@ -24,3 +24,4 @@ group :jekyll_plugins do end gem 'sinatra', '~> 1.4.2' +gem 'nokogiri' diff --git a/Gemfile.lock b/Gemfile.lock index 4a9684644f8..051fb09fdb5 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -42,6 +42,9 @@ GEM rb-inotify (~> 0.9, >= 0.9.7) mercenary (0.3.6) method_source (0.8.2) + mini_portile2 (2.3.0) + nokogiri (1.8.2) + mini_portile2 (~> 2.3.0) octopress (3.0.11) jekyll (>= 2.0) mercenary (~> 0.3.2) @@ -68,8 +71,8 @@ GEM method_source (~> 0.8.1) slop (~> 3.4) public_suffix (3.0.0) - rack (1.6.8) - rack-protection (1.5.3) + rack (1.6.9) + rack-protection (1.5.5) rack rake (10.5.0) rb-fsevent (0.10.2) @@ -100,6 +103,7 @@ DEPENDENCIES jekyll-redirect-from jekyll-sitemap jekyll-time-to-read + nokogiri octopress (~> 3.0) octopress-include-tag pry @@ -113,4 +117,4 @@ RUBY VERSION ruby 2.4.1p111 BUNDLED WITH - 1.15.4 + 1.16.1 diff --git a/README.markdown b/README.markdown index e055c8e3369..d3a630cb1ea 100644 --- a/README.markdown +++ b/README.markdown @@ -1,7 +1,7 @@ [![Discord](https://img.shields.io/discord/330944238910963714.svg)](https://discord.gg/CxqDrfU) [![Travis branch](https://img.shields.io/travis/home-assistant/home-assistant.github.io/next.svg)](https://travis-ci.org/home-assistant/home-assistant.github.io) [![Krihelimeter](http://www.krihelinator.xyz/badge/home-assistant/home-assistant.github.io)](http://www.krihelinator.xyz) -[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT) +[![License: CC BY-NC-SA 4.0](https://img.shields.io/badge/License-CC%20BY--NC--SA%204.0-lightgrey.svg)](https://creativecommons.org/licenses/by-nc-sa/4.0/) # Home Assistant website diff --git a/Rakefile b/Rakefile index e44380c49dc..10f2c5d8566 100644 --- a/Rakefile +++ b/Rakefile @@ -16,11 +16,12 @@ deploy_branch = "master" ## -- Misc Configs -- ## -public_dir = "public/" # compiled site directory +public_dir = "public/" # compiled site directory source_dir = "source" # source file directory blog_index_dir = 'source/blog' # directory for your blog's index page (if you put your index in source/blog/index.html, set this to 'source/blog') deploy_dir = "_deploy" # deploy directory (for Github pages deployment) stash_dir = "_stash" # directory to stash posts for speedy generation +components_dir = "_components" # directory for component files posts_dir = "_posts" # directory for blog files themes_dir = ".themes" # directory for blog files new_post_ext = "markdown" # default new post file extension when using the new_post task @@ -60,6 +61,13 @@ task :generate do abort("Generating CSS failed") unless success success = system "jekyll build" abort("Generating site failed") unless success + if ENV["CONTEXT"] != 'production' + File.open("#{public_dir}robots.txt", 'w') do |f| + f.write "User-agent: *\n" + f.write "Disallow: /\n" + end + end + public_dir end desc "Watch the site and regenerate when it changes" @@ -162,18 +170,26 @@ task :new_page, :filename do |t, args| end # usage rake isolate[my-post] -desc "Move all other posts than the one currently being worked on to a temporary stash location (stash) so regenerating the site happens much more quickly." +desc "Move all other components and posts than the one currently being worked on to a temporary stash location (stash) so regenerating the site happens much more quickly." task :isolate, :filename do |t, args| stash_dir = "#{source_dir}/#{stash_dir}" + s_posts_dir = "#{stash_dir}/#{posts_dir}" + s_components_dir = "#{stash_dir}/#{components_dir}" FileUtils.mkdir(stash_dir) unless File.exist?(stash_dir) + FileUtils.mkdir(s_posts_dir) unless File.exist?(s_posts_dir) + FileUtils.mkdir(s_components_dir) unless File.exist?(s_components_dir) Dir.glob("#{source_dir}/#{posts_dir}/*.*") do |post| - FileUtils.mv post, stash_dir unless post.include?(args.filename) + FileUtils.mv post, s_posts_dir unless post.include?(args.filename) + end + Dir.glob("#{source_dir}/#{components_dir}/*.*") do |component| + FileUtils.mv component, s_components_dir unless component.include?(args.filename) end end desc "Move all stashed posts back into the posts directory, ready for site generation." task :integrate do - FileUtils.mv Dir.glob("#{source_dir}/#{stash_dir}/*.*"), "#{source_dir}/#{posts_dir}/" + FileUtils.mv Dir.glob("#{source_dir}/#{stash_dir}/#{posts_dir}/*.*"), "#{source_dir}/#{posts_dir}/" + FileUtils.mv Dir.glob("#{source_dir}/#{stash_dir}/#{components_dir}/*.*"), "#{source_dir}/#{components_dir}/" end desc "Clean out caches: .pygments-cache, .gist-cache, .sass-cache" diff --git a/_config.yml b/_config.yml index 3f8193a9a79..15b98b5be4b 100644 --- a/_config.yml +++ b/_config.yml @@ -3,7 +3,7 @@ # Main Configs # # ----------------------- # -url: https://home-assistant.io +url: https://www.home-assistant.io title: Home Assistant subtitle: Open-source home automation platform running on Python 3 author: Home Assistant @@ -76,6 +76,8 @@ collections: output: true faq: output: true + lovelace: + output: true # ----------------------- # # 3rd Party Settings # @@ -139,12 +141,17 @@ social: # Home Assistant release details current_major_version: 0 -current_minor_version: 58 -current_patch_version: 1 -date_released: 2017-11-21 +current_minor_version: 75 +current_patch_version: 2 +date_released: 2018-08-06 # Either # or the anchor link to latest release notes in the blog post. # Must be prefixed with a # and have double quotes around it. # Major release: -patch_version_notes: "#release-0581---november-21" +patch_version_notes: "#release-0752---august-6" # Minor release (Example #release-0431---april-25): + +# Date we moved to Discourse for comments +# disqus_end_date: 2018-01-26 0:00:00 +# Disqus is adding gross ads, move all comments to discourse. +disqus_end_date: 2010-01-26 0:00:00 diff --git a/credits_generator/README.md b/credits_generator/README.md index 03c187d2d8a..986f0b47859 100644 --- a/credits_generator/README.md +++ b/credits_generator/README.md @@ -1,14 +1,24 @@ credits_generator ================= -This tool can be used to update the [Home Assistant's Credits page](https://home-assistant.io/developers/credits/). +This tool can be used to update the [Credits page for Home Assistant](https://home-assistant.io/developers/credits/). +Setup +----- + +Fetch the dependencies with `npm`. ```bash $ cd credits_generator $ npm install ``` -Set your personal GitHub access token as environmental variable. +Usage +----- +Go to https://github.com/settings/tokens/new and generate a new GitHub personal access token. +Give the token any name and select the `public_repo` and `read:user` scopes. + + +Set the environment variable `GITHUB_TOKEN` to the new token. ```bash $ export GITHUB_TOKEN= diff --git a/credits_generator/package.json b/credits_generator/package.json index 42c6687b158..a7d7b76fe53 100644 --- a/credits_generator/package.json +++ b/credits_generator/package.json @@ -1,13 +1,14 @@ { "name": "credits_generator", "version": "1.0.0", + "private": true, "description": "A tool to generate the Home Assistant credits page", "main": "update_credits.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, "author": "Home Assistant Community", - "license": "Apache 2.0", + "license": "Apache-2.0", "dependencies": { "async": "^2.1.4", "github": "^8.1.0", diff --git a/credits_generator/update_credits.js b/credits_generator/update_credits.js index d850ccaee9f..3cfab7a9e23 100644 --- a/credits_generator/update_credits.js +++ b/credits_generator/update_credits.js @@ -58,7 +58,12 @@ github.repos.getForOrg({ cb(err); return; } - if(userInfo.login == 'RubenKelevra') userInfo.name = 'RubenKelevra'; // ugh, because his name is `@RubenKelevra` + if (userInfo.name) { + userInfo.name = userInfo.name.replace(/^@/, '') + .replace(//g, '>') + .replace(/[\\`*_{}[\]()#+-.!~|]/g, '\\$&'); + } usersMap[login].info.name = userInfo.name || userInfo.login; usersMap[login].info.username = userInfo.login; cb(); diff --git a/plugins/active_link.rb b/plugins/active_link.rb index bd5853f7022..6b6063cffac 100644 --- a/plugins/active_link.rb +++ b/plugins/active_link.rb @@ -10,7 +10,7 @@ module Jekyll def render(context) href = Liquid::Template.parse(@href).render context title = Liquid::Template.parse(@title).render context - cls = @href == context.registers[:page]["url"] ? "class='active'" : '' + cls = href == context.registers[:page]["url"] ? "class='active'" : '' "#{title}" end end diff --git a/plugins/configuration.rb b/plugins/configuration.rb index 52bcf87fb96..30a5196d721 100644 --- a/plugins/configuration.rb +++ b/plugins/configuration.rb @@ -2,7 +2,7 @@ module Jekyll class ConfigurationBlock < Liquid::Block TYPE_LINKS = { 'action' => '/docs/scripts/', - 'device_class' => '/components/%{component}/#device_class', + 'device_class' => '/components/%{component}/#device-class', 'template' => '/docs/configuration/templating/', } diff --git a/plugins/environment_variables.rb b/plugins/environment_variables.rb new file mode 100644 index 00000000000..7d9203f1643 --- /dev/null +++ b/plugins/environment_variables.rb @@ -0,0 +1,17 @@ +module Jekyll + class EnvironmentVariablesGenerator < Generator + def generate(site) + # https://www.netlify.com/docs/continuous-deployment/#build-environment-variables + repo_url = ENV['REPOSITORY_URL'] || 'https://github.com/home-assistant/home-assistant.github.io' + + # Rewrite urls if repo url is the ssh format. + if repo_url.start_with? 'git@github.com:' + repo_url = repo_url.sub 'git@github.com:', 'https://github.com/' + end + + # These values will be available as {{ site.NLY_REPOSITORY_URL }} + site.config['NLY_REPOSITORY_URL'] = repo_url + site.config['NLY_HEAD'] = ENV['HEAD'] || 'current' + end + end +end diff --git a/plugins/filters.rb b/plugins/filters.rb index 5eacd7b8cf4..41ad3357a8b 100644 --- a/plugins/filters.rb +++ b/plugins/filters.rb @@ -24,7 +24,7 @@ module Jekyll # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION def site_url - 'https://home-assistant.io' + 'https://www.home-assistant.io' end # Prepend a url with the full site url diff --git a/plugins/no_follow.rb b/plugins/no_follow.rb new file mode 100644 index 00000000000..27da6c90f25 --- /dev/null +++ b/plugins/no_follow.rb @@ -0,0 +1,33 @@ +# Jekyll Auto Nofollow Plugin +# Automatically adds rel='external nofollow' to outgoing links. + +require 'jekyll' +require 'nokogiri' + +module Jekyll + module NoFollow + def nofollow(content) + dom = Nokogiri::HTML.fragment(content) + + # Find all links + dom.css('a').each do |link| + rel = ['external', 'nofollow'] + + # All external links start with 'http', skip when this one does not + next unless link.get_attribute('href') =~ /\Ahttp/i + + # Play nice with our own links + next if link.get_attribute('href') =~ /\Ahttps?:\/\/\w*.?home-assistant.io/i + + # Play nice with links that already have a rel attribute set + rel.unshift(link.get_attribute('rel')) + + # Add rel attribute to link + link.set_attribute('rel', rel.join(' ').strip) + end + dom.to_s + end + end +end + +Liquid::Template.register_filter(Jekyll::NoFollow) diff --git a/sass/custom/_paulus.scss b/sass/custom/_paulus.scss index 2a9e1fb4ebc..c64bdb7da2e 100644 --- a/sass/custom/_paulus.scss +++ b/sass/custom/_paulus.scss @@ -4,6 +4,10 @@ $primary-color: #049cdb; .site-header { position: relative; + + .site-title { + font-weight: normal; + } } .search-container { @@ -377,18 +381,26 @@ p.note { } .copyright { - text-align: center; + text-align: left; - i { - font-size: 3em; - margin-right: 8px; - position: relative; - top: -5px; + .company { + .title { + font-size: 1.5em; + } + + img { + vertical-align: middle; + } + + i { + font-size: 2em; + padding: 0 5px; + } } - .credit { - text-align: left; - display: inline-block; - font-size: .8em; + + ul { + margin: 0; + list-style: none; } } diff --git a/source/_addons/bluetooth_bcm43xx.markdown b/source/_addons/bluetooth_bcm43xx.markdown index 6051a694bba..a34b2fa08a7 100644 --- a/source/_addons/bluetooth_bcm43xx.markdown +++ b/source/_addons/bluetooth_bcm43xx.markdown @@ -11,4 +11,8 @@ footer: true Start this add-on to activate the BCM43xx Bluetooth chipset. +

+ This is not required on HassOS based Hass.io installs and should not be installed +

+ Supported platforms: Raspberry Pi 3. diff --git a/source/_addons/cec_scan.markdown b/source/_addons/cec_scan.markdown index 4c048eff157..a17d0ff09db 100644 --- a/source/_addons/cec_scan.markdown +++ b/source/_addons/cec_scan.markdown @@ -9,4 +9,4 @@ sharing: true footer: true --- -Help you to discover the HDMI CEC address. Start the add-on and look into log to see all connected device on HDMI. +Help you to discover the HDMI CEC address. Start the add-on and look into the log to see all connected device on HDMI. diff --git a/source/_addons/check_config.markdown b/source/_addons/check_config.markdown index 0b00f1b147e..f10f69848fe 100644 --- a/source/_addons/check_config.markdown +++ b/source/_addons/check_config.markdown @@ -9,7 +9,7 @@ sharing: true footer: true --- -You can use this addon to check whether your configuration files are valid against the new version of Home Assistant before you actually update your Home Assistant installation. This will help you avoid errors due to breaking changes, resulting in an smooth update. +You can use this addon to check whether your configuration files are valid against the new version of Home Assistant before you actually update your Home Assistant installation. This addon will help you avoid errors due to breaking changes, resulting in a smooth update. ```json { diff --git a/source/_addons/configurator.markdown b/source/_addons/configurator.markdown index 97640ebe203..b5956384ba9 100644 --- a/source/_addons/configurator.markdown +++ b/source/_addons/configurator.markdown @@ -2,7 +2,7 @@ layout: page title: "HASS Configurator" description: "Browser-based configuration file editor for Home Assistant." -date: 2017-09-25 14:00 +date: 2018-07-16 14:00 sidebar: true comments: false sharing: true @@ -11,11 +11,9 @@ featured: true og_image: /images/hassio/screenshots/addon-hass-configurator.png --- -As long as a fully featured configuration GUI for Home Assistant is still under development, you can use this add-on to add a browser based file-editor to your Hass.IO installation. By default it will listen on port `3218` of the host Hass.IO is running on. +You can use this add-on to add a browser-based file editor to your Hass.io installation. By default it will listen on port `3218` of the host Hass.io is running on. -More information and a standalone version for regular Home Assistant installations can be found in the [GitHub repository][code]. - -[code]: https://github.com/danielperna84/hass-configurator +More information and a standalone version for regular Home Assistant installations can be found in the [GitHub repository](https://github.com/danielperna84/hass-configurator).

@@ -24,16 +22,17 @@ Screenshot of the HASS Configurator. ### {% linkable_title Feature list %} -- Web-Based editor to modify your files with syntax highlighting. +- Web-based editor to modify your files with syntax highlighting and YAML linting. - Upload and download files. -- Stage and commit changes in Git repositories, create and switch between branches, push to remotes. -- Lists of available triggers, events, entities, conditions and services. Selected element gets inserted into the editor at the last cursor position. -- Restart Home Assistant directly with the click of a button. Reloading groups, automations etc. can be done as well. An API-password is required. -- SSL support. +- Stage, stash and commit changes in Git repositories, create and switch between branches, push to remotes, view diffs. +- Lists with available entities, triggers, events, conditions and services. +- Restart Home Assistant directly with the click of a button. Reloading groups, automations, etc. can be done as well. An API password is required. +- SSL/TLS support. - Optional authentication and IP filtering for added security. - Direct links to Home Assistant documentation and icons. - Execute shell commands within the add-on container. - Editor settings are saved in your browser. +- And much more... ### {% linkable_title Add-on Configuration %} @@ -41,29 +40,52 @@ Screenshot of the HASS Configurator. { "username": "admin", "password": "secret", + "ssl": false, "certfile": "fullchain.pem", "keyfile": "privkey.pem", - "ssl": false, - "allowed_networks": ["192.168.0.0/16"], - "banned_ips": ["8.8.8.8"], + "verify_hostname": false, + "allowed_networks": [ + "192.168.0.0/16", + "172.30.0.0/16" + ], + "banned_ips": [ + "8.8.8.8" + ], "banlimit": 0, - "ignore_pattern": ["__pycache__"], + "ignore_pattern": [ + "__pycache__" + ], "dirsfirst": false, + "enforce_basepath": false, + "notify_service": "persistent_notification.create", + "ignore_ssl": false } ``` -- **username** (*Optional*): Set a username to access your configuration is protected. +- **username** (*Required*): Set a username to access your configuration is protected. - **password** (*Required*): Set a password for access. -- **ssl** (*Optional*): Enable or Disable SSL for the editor. -- **allowed_networks** (*Optional*): Limit access to the configurator by adding allowed IP addresses / networks to the list. -- **banned_ips** (*Optional*): List of statically banned IP addresses. -- **banlimit** (*Optional*): Ban access from IPs after `banlimit` failed login attempts. The default value `0` disables this feature. Restart the add-on to clear the list of banned IP addresses. -- **ignore_pattern** (*Optional*): Files and folders to ignore in the UI. -- **dirsfirst** (*Optional*): List directories before files in the filebrowser. +- **ssl** (*Required*): Enable or Disable SSL/TLS for the editor. +- **certfile** (*Required*): Set the path the your SSL certificate if the ssl-option is set to `true`. +- **keyfile** (*Required*): Set the path the your SSL private key if the ssl-option is set to `true`. +- **allowed_networks** (*Required*): Limit access to the configurator by adding allowed IP addresses/networks to the list. +- **banned_ips** (*Required*): List of statically banned IP addresses. +- **banlimit** (*Required*): Ban access from IPs after `banlimit` failed login attempts. The default value `0` disables this feature. Restart the add-on to clear the list of banned IP addresses. +- **ignore_pattern** (*Required*): Files and folders to ignore in the UI. +- **dirsfirst** (*Required*): List directories before files in the file browser. +- **enforce_basepath** (*Required*): If set to `true`, access is limited to files within the `/config` directory. +- **notify_service** (*Required*): Specify a custom notify-service to be used to push notifications. +- **ignore_ssl** (*Required*): Ignore SSL errors when accessing the Home Assistant API. +- **sesame** (*Optional*): Secret token to dynamically allow access from the IP the request originates from. Open your bookmark https://hassio.yourdomain.com:8123/somesecretnobodycanguess while `allowed_networks` is set to `[]` and your IP will get whitelisted. You can use the _Network status_ menu to revoke IP addresses for which access has been granted. Regular authentication is still required. +- **sesame_totp_secret** (*Optional*): Like the `sesame` option, but instead as Base32 encoded secret string must be provided. This string then can be added to a TOTP App like Google Authenticator. This way you get a 6-digit `sesame` that changes every 30 seconds. +- **loglevel** (*Optional*): You can change the logging level from the default value `info` if you want to. Valid values are: `debug`, `info`, `warning`, `error`, `critical`. -### {% linkable_title Embedding into Home-Assistant %} +

+Be careful when setting up port forwarding to the configurator while embedding into Home Assistant. If you don't restrict access by requiring authentication and/or blocking based on client IP addresses, your configuration will be exposed to the internet! +

-Using the Home Assistant component [panel_iframe](https://home-assistant.io/components/panel_iframe/) it is possible to embed the configurator directly into Home Assistant, allowing you to modify your configuration within the Home Assistant frontend. +### {% linkable_title Embedding into Home Assistant %} + +Using the Home Assistant component [panel_iframe](/components/panel_iframe/) it is possible to embed the configurator directly into Home Assistant, allowing you to modify your configuration from within the Home Assistant frontend. An example configuration would look like this: @@ -75,6 +97,3 @@ panel_iframe: url: http://hassio.local:3218 ``` -

-Be careful when setting up port forwarding to the configurator while embedding into Home Assistant. If you don't restrict access by requiring authentication and / or blocking based on client IP addresses, your configuration will be exposed to the internet! -

diff --git a/source/_addons/dhcp_server.markdown b/source/_addons/dhcp_server.markdown index 884a5432fac..1f0df69183c 100644 --- a/source/_addons/dhcp_server.markdown +++ b/source/_addons/dhcp_server.markdown @@ -47,7 +47,7 @@ Configuration variables:  - **range_end** (*Required*): End address for dhcp leases.  - **broadcast** (*Required*): Network broadcast address.  - **gateway** (*Required*): A List of gateways. - - **interface** (*Required*): Inteface on that will be listen. Normally is `eth0` for ethernet wired connection and `wlan0` for wireless connection. + - **interface** (*Required*): Interface on that will be listen. Normally is `eth0` for ethernet wired connection and `wlan0` for wireless connection. - **hosts** (*Optional*): A list of fixed IPs for devices. - **name** (*Required*): Name/hostname of your device.  - **mac** (*Required*): Mac address of your device. diff --git a/source/_addons/dnsmasq.markdown b/source/_addons/dnsmasq.markdown index 586a035f8f5..d894320ab02 100644 --- a/source/_addons/dnsmasq.markdown +++ b/source/_addons/dnsmasq.markdown @@ -11,10 +11,6 @@ footer: true Setup and manage a [Dnsmasq](http://thekelleys.org.uk/dnsmasq/doc.html) DNS server. This allows you to manipulate DNS requests. For example, you can have your Home Assistant domain resolve with an internal address inside your network. -

-`interface` options are for resinos based installation. On other system you can set it to `""`, for listen on every interface. -

- ```json { "defaults": ["8.8.8.8", "8.8.4.4"], @@ -23,14 +19,12 @@ Setup and manage a [Dnsmasq](http://thekelleys.org.uk/dnsmasq/doc.html) DNS serv ], "hosts": [ {"host": "home.mydomain.io", "ip": "192.168.1.10"} - ], - "interface": "eth1" + ] } ``` Configuration variables: -- **defaults** (*Required*): A list of dns server to forward default requests. +- **defaults** (*Required*): A list of DNS servers to forward default requests to. - **forwards** (*Optional*): A list of domains that will forward to a specific server. -- **hosts** (*Optional*): A list of hosts to resolve it static. -- **interface** (*Optional*): If a interface is set, it listen only on this interface. Need to set for resinos. Normally is `eth0` for ethernet wired connection and `wlan0` for wireless connection. +- **hosts** (*Optional*): A list of hosts to resolve statically. diff --git a/source/_addons/duckdns.markdown b/source/_addons/duckdns.markdown index f54e69f0da0..2f910f75b06 100644 --- a/source/_addons/duckdns.markdown +++ b/source/_addons/duckdns.markdown @@ -10,26 +10,27 @@ footer: true featured: true --- -[Duck DNS](https://duckdns.org/) is a free service which will point a DNS (sub domains of duckdns.org) to an IP of your choice. This add-on includes support for Let's Encrypt and will automatically create and renew your certificates. +[Duck DNS](https://www.duckdns.org/) is a free service which will point a DNS (sub domains of duckdns.org) to an IP of your choice. This add-on includes support for Let's Encrypt and will automatically create and renew your certificates. ```json { "lets_encrypt": { - "accept_terms": true + "accept_terms": true, + "certfile": "fullchain.pem", + "keyfile": "privkey.pem" }, "token": "sdfj-2131023-dslfjsd-12321", - "domains": ["my-domain.duckdns.org"] + "domains": ["my-domain.duckdns.org"], + "seconds": 300 } ``` Configuration variables: +- **lets_encrypt.accept_terms** (*Required*): If you accept the [Let's Encrypt Subscriber Agreement](https://letsencrypt.org/repository/), it will generate and update Let's Encrypt certificates for your DuckDNS domain. - **token** (*Required*): Your Duck DNS API key. - **domains** (*Required*): A list of domains to update DNS. -- **seconds** (*Optional*): Seconds between updates to Duck DNS. -- **lets_encrypt.accept_terms** (*Optional*): If you accept the [Let's Encrypt Subscriber Agreement][le], it will generate & update Let's Enrypt certificates for your DuckDNS domain. - -[le]: https://letsencrypt.org/repository/ +- **seconds** (*Required*): Seconds between updates to Duck DNS. ## {% linkable_title Home Assistant configuration %} @@ -42,8 +43,12 @@ http: ssl_key: /ssl/privkey.pem ``` -If you use a other port as `8123` or a SSL proxy, change the port number. +If you use a port other than `8123` or an SSL proxy, change the port number accordingly. ## {% linkable_title Router configuration %} -You'll need to forward the port you listed in your configuration (8123 in the example above) on your router to your Home Assistant system. You can find guides on how to do this on [Port Forward](https://portforward.com/) - noting that you'll only need to forward the TCP port. +You'll need to forward the port you listed in your configuration (8123 in the example above) on your router to your Home Assistant system. You can find guides on how to do this on [Port Forward](https://portforward.com/). Noting that you'll only need to forward the TCP port. + +Ensure that you allocate the Home Assistant system a fixed IP on your network before you configure port forwarding. You can do this either on the computer itself (see the [install guide](/hassio/installation/) or via a static lease on your router. + +Restart Home Assistant for the configured changes to take effect. When you access the Home Assistant frontend you will now need to use `https`, even when accessing local instances, for example at `https://192.168.0.1:8123`. diff --git a/source/_addons/git_pull.markdown b/source/_addons/git_pull.markdown index 126fab9c1a5..a316149cae4 100644 --- a/source/_addons/git_pull.markdown +++ b/source/_addons/git_pull.markdown @@ -1,6 +1,6 @@ --- layout: page -title: "GIT pull" +title: "Git pull" description: "Load and update configuration files for Home Assistant from a GIT repository." date: 2017-09-25 14:00 sidebar: true @@ -13,8 +13,11 @@ Load and update configuration files for Home Assistant from a GIT repository. ```json { - "repository": "https://example.com/my_configs", + "repository": "https://example.com/my_configs.git", "auto_restart": false, + "git_branch": "master", + "git_command": "pull", + "git_remote": "origin", "repeat": { "active": false, "interval": 300 @@ -32,10 +35,23 @@ Load and update configuration files for Home Assistant from a GIT repository. } ``` -- **repository** (*Required*): GIT url to your repository. -- **auto_restart** (*Optional*): Make a restart of Home-Assistant if the config have change and is valid. -- **repeat/active** (*Optional*): Pull periodic for GIT updates. +- **repository** (*Required*): Git URL to your repository (make sure to use double quotes). You have to add .git to your GitHub repository URL (see example config) +- **git_branch** (*Required*): Branch name of the git repo, leave this as 'master' if you are unsure. +- **git_remote** (*Required*): Name of the tracked repository, leave this as 'origin' if you are unsure. +- **git_command** (*Required*): Must be either 'pull' or 'reset', leave this as 'pull' if you are unsure. + + * **pull**: Incorporates changes from a remote repository into the current branch. Will preserve any local changes to tracked files. + * **reset**: Will execute ```git reset --hard``` and overwrite any local changes to tracked files and update from the remote repository. + +

+ Using the reset option will overwrite changes to tracked files. Tracked files are those visible in the Github repository or those given by the output on this command: ```git ls-tree -r master --name-only``` +

+ +- **auto_restart** (*Optional*): Restart Home Assistant when the configuration has changed (and is valid). +- **repeat/active** (*Optional*): Pull periodic for git updates. - **repeat/interval** (*Optional*): Pull all x seconds and look for changes. +- **deployment_user** (*Optional*): Username to use when authenticating to a repo with a username and password. +- **deployment_password** (*Optional*): Password to use when authenticating to a repo. Ignored if deployment_user is not set. - **deployment_key** (*Optional*): A private SSH key that will be used for communication during git operations. This key is mandatory for ssh-accessed repositories, which are the ones with the following pattern: `@:`. - **deployment_key_protocol** (*Optional*): The key protocol. Default is "rsa". Valid protocols are: @@ -45,7 +61,7 @@ Load and update configuration files for Home Assistant from a GIT repository. * **rsa** The protocol is typically known by the suffix of the private key --e.g., a key file named `id_rsa` will be a private key using "rsa" protocol. - +

You should only use this add-on if you do not have an existing configuration or if your existing configuration is already in a git repository. If the script does not find the necessary git files in your configuration folder, it will delete anything that might be there. Please ensure that there is a `.git` folder before using this. You can verify this by listing the items in the configuration folder including hidden files. The command is `ls -a /config`.

diff --git a/source/_addons/google_assistant.markdown b/source/_addons/google_assistant.markdown index 04458c65944..40923fdb19d 100644 --- a/source/_addons/google_assistant.markdown +++ b/source/_addons/google_assistant.markdown @@ -10,13 +10,21 @@ footer: true featured: true --- -[Google Assistant][GoogleAssistant] is an AI-powered voice assistant that runs on the Raspberry Pi and x86 platforms and interact over [api.ai] with Home-Assistant. You can also use [Google Actions][GoogleActions] to extend its functionality. +

+ These instructions are outdated - the add-on has been updated and these are no longer accurate or complete +

+ +

+ If you want to integrate your Google Home, or mobile phone running Google Assistant, with Home Assistant, then you want the [Google Assistant component](/components/google_assistant/). +

+ +[Google Assistant][GoogleAssistant] is an AI-powered voice assistant that runs on the Raspberry Pi and x86 platforms and interact via the [DialogFlow][comp] integration with Home-Assistant. You can also use [Google Actions][GoogleActions] to extend its functionality. To enable access to the Google Assistant API, do the following: 1. In the [Cloud Platform Console][project], go to the Projects page. Select an existing project or create a new project -2. Open the project. In the top of the page search for Google Assistant API or use [this link][API] and enable it. -3. Create an [OAuth Client ID][oauthclient], pick type "Other", click "Create" and download the JSON file by clicking the Download JSON button on the right side. +1. Open the project. In the top of the page search for Google Assistant API or use [this link][API] and enable it. +1. Create an [OAuth Client ID][oauthclient], pick type "Other", click "Create" and download the JSON file by clicking the Download JSON button on the right side. Now install and activate the [Samba] add-on so you can upload your credential file. Connect to the "share" Samba share and copy your credentials over. Name the file `google_assistant.json`. @@ -48,9 +56,9 @@ Find the microphone and speakers that you want to use and note down their device The next step is to authenticate your Google account with Google Assistant. Start the add-on and click on the "OPEN WEB UI" button to start authentication. -### Add-On configuration +### Add-on configuration -Configuration example that uses the USB microphone and use the built-in headset audio output on the Raspberry Pi. Note that card and device numbers can differ on your device. +Configuration example that uses the USB microphone and the built-in headset audio output on the Raspberry Pi. Note that card and device numbers can differ on your device. ```json { @@ -62,19 +70,17 @@ Configuration example that uses the USB microphone and use the built-in headset Configuration variables: -- **mic**: This is the hardware address of your microphone. Look at the add-on output +- **mic**: This is the hardware address of your microphone. Look at the add-on output - **speaker**: This is the hardware address of your speakers. Look at the add-on output ### {% linkable_title Home Assistant configuration %} -Use the Home Assistant [api.ai component][comp] to integrate the add-on into Home Assistant. - +Use the Home Assistant [DialogFlow component][comp] to integrate the add-on into Home Assistant. [GoogleAssistant]: https://assistant.google.com/ [GoogleActions]: https://actions.google.com/ -[api.ai]: https://api.ai/ [Samba]: /addons/samba/ -[comp]: /components/apiai/ +[comp]: /components/dialogflow/ [project]: https://console.cloud.google.com/project [API]: https://console.developers.google.com/apis/api/embeddedassistant.googleapis.com/overview [oauthclient]: https://console.developers.google.com/apis/credentials/oauthclient diff --git a/source/_addons/homematic.markdown b/source/_addons/homematic.markdown new file mode 100644 index 00000000000..6a92bbff817 --- /dev/null +++ b/source/_addons/homematic.markdown @@ -0,0 +1,70 @@ +--- +layout: page +title: "HomeMatic" +description: "HomeMatic hardware support to turn you Home-Assistant into a CCU." +date: 2017-04-30 13:28 +sidebar: true +comments: false +sharing: true +footer: true +--- + +Set up a [HomeMatic](https://github.com/eq-3/occu) hardware layer. At the moment we don't support hmIP, but that is in progress. For learning and handling devices use our internal HomeMatic panel and services (in progress) or use [Homematic-Manager](https://github.com/hobbyquaker/homematic-manager) > 2.0. + +The logic layer will be Home-Assistant. There is no ReGa or other logic layer installed. You can't import an existing configuration, you'll need re-learn it into Home-Assistant. + +Follow devices will be supported and tested: +- [HM-MOD-RPI-PCB](https://www.elv.ch/homematic-funkmodul-fuer-raspberry-pi-bausatz.html) + +```json +{ + "rf_enable": true, + "rf": [ + { + "type": "CCU2", + "device": "/dev/ttyAMA0" + } + ], + "wired_enable": false, + "wired": [ + { + "serial": "xy", + "key": "abc", + "ip": "192.168.0.0" + } + ] +} +``` + +Configuration variables: + +- **rf_enable** (*Require*): Boolean. Enable or disable BidCoS-RF. +- **wired_enable** (*Require*): Boolean. Enable or disable BidCoS-Wired. + +For RF devices +- **type** (*Require*): Device type for RFD service. Look into the manual of your device. +- **device** (*Require*): Device on the host. + +For RF devices +- **serial** (*Require*): Serial number of the device. +- **key** (*Require*): Encrypted key. +- **ip** (*Require*): IP address of LAN gateway. + +## {% linkable_title Home Assistant configuration %} + +Use the following configuration in Home Assistant to use it: + +```yaml +homematic: + interfaces: + rf: + host: core-homematic + port: 2001 +``` + +## {% linkable_title Raspberry Pi3 %} + +With HM-MOD-PRI-PCB you need to add follow into your `config.txt` on boot partition: +``` +dtoverlay=pi3-miniuart-bt +``` diff --git a/source/_addons/lets_encrypt.markdown b/source/_addons/lets_encrypt.markdown index 8917e007bf4..0ac8d019945 100644 --- a/source/_addons/lets_encrypt.markdown +++ b/source/_addons/lets_encrypt.markdown @@ -2,7 +2,7 @@ layout: page title: "Let's Encrypt" description: "Automatically manage your SSL certificate using Let's Encrypt." -date: 2017-04-30 13:28 +date: 2018-04-18 10:55 sidebar: true comments: false sharing: true @@ -14,15 +14,10 @@ featured: false You should not use this if you are also using the [DuckDNS add-on]. The DuckDNS add-on has integrated Let's Encrypt support.

-Setup and manage a [Let's Encrypt](https://letsencrypt.org/) certificate. This will create a certificate on the first run and will auto-renew if the certificate is within 30 days of expiration. - -

-This add-on uses ports 80/443 to verify the certificate request. You will need to stop all other add-ons that also use these ports. If you don't need a port (like with https you don't need port 80) you can remove this from network config. -

+Setup and manage a [Let's Encrypt](https://letsencrypt.org/) certificate. This addon will create a certificate on the first run and will auto-renew if the certificate is within 30 days of expiration. This add-on uses port 80 to verify the certificate request. You will need to stop all other add-ons that also use this port. ```json { - "challenge": "https", "email": "example@example.com", "domains": ["example.com", "mqtt.example.com", "hass.example.com"] } @@ -30,7 +25,6 @@ This add-on uses ports 80/443 to verify the certificate request. You will need t Configuration variables: -- **challenge** (*Optional*): Default it use 443 ('https') you can change it to 'http' for use port 80. - **email** (*Required*): Your email address for registration on Let's Encrypt. - **domains** (*Required*): A list of domains to create/renew the certificate. @@ -45,6 +39,26 @@ http: ssl_key: /ssl/privkey.pem ``` -If you use a other port as `8123` or a SSL proxy, change the port number. +If you use another port such as `8123` or an SSL proxy, change the port number. + +## {% linkable_title Enabling auto-renewals %} + +Out of the box, the add-on will not automatically renew your certificate. In fact, it only starts, tries to get/renew your certificte, and then stops. It's up to you to manually start it again whenever your certificate comes close to expiry. + +However, you can automate this process using Home Assistant. + +Use this in your `automations.yaml` to attempt certificate renewal each day at midnight: + +```yaml +- id: letsencrypt-renewal + alias: "Let's Encrypt Renewal" + trigger: + - platform: time + at: '00:00:00' + action: + - service: hassio.addon_restart + data: + addon: core_letsencrypt +``` [DuckDNS add-on]: /addons/duckdns/ diff --git a/source/_addons/mariadb.markdown b/source/_addons/mariadb.markdown index b7882dd2c6f..013bdc8ebb4 100644 --- a/source/_addons/mariadb.markdown +++ b/source/_addons/mariadb.markdown @@ -9,7 +9,7 @@ sharing: true footer: true --- -Set up a [mariadb](https://mariadb.org/) SQL server. It supports multiple databases, users and permission settings. If you want to only connect from inside home assistant use `core-mariadb` as the host address. +Set up a [mariadb](https://mariadb.org/) SQL server. It supports multiple databases, users and permission settings. If you want to only connect from inside Home Assistant use `core-mariadb` as the host address. ```json { diff --git a/source/_addons/mosquitto.markdown b/source/_addons/mosquitto.markdown index f944dc7989c..2150b1a3080 100644 --- a/source/_addons/mosquitto.markdown +++ b/source/_addons/mosquitto.markdown @@ -18,33 +18,81 @@ Set up [Mosquitto](https://mosquitto.org/) as MQTT broker. "ssl": false, "anonymous": true, "logins": [ - {"username": "testuser", "password": "mypw"} + {"username": "testuser", "password": "mypw"}, + {"username": "testuser2", "password": "mypw2"} ], "customize": { "active": false, "folder": "mosquitto" - } + }, + "certfile": "fullchain.pem", + "keyfile": "privkey.pem" } ``` -

+

Make sure you use logins and disable anonymous access if you want to secure the system.

Configuration variables: -- **plain** (*Optional*): Listen to broker on port 1883 without SSL/TLS. Defaults to `true`. -- **ssl** (*Optional*): Listen to broker on port 8883 with SSL/TLS. This requires certificates. Defaults to `false`. -- **anonymous** (*Optional*): Allow anonymous connection. If *logins* is set, anonymous user can only read data. Defaults to `true`. -- **logins** (*Optional*): A list of user that will be created with *username* and *password*. +- **plain** (*Optional*): Listen on port 1883 without SSL/TLS. Defaults to `true`. +- **ssl** (*Optional*): Listen on port 8883 with SSL/TLS. This requires certificates. Defaults to `false`. +- **anonymous** (*Optional*): Allow anonymous connections. If *logins* is set, the anonymous user can only read data. Defaults to `true`. +- **logins** (*Optional*): A list of users that will be created with *username* and *password*. - **customize** (*Optional*): If you enable it, it reads additional configuration files (`*.conf`) from `/share/mosquitto`. ### {% linkable_title Home Assistant configuration %} -To use the Mosquitto as [broker](/docs/mqtt/broker/#run-your-own) add the following entry to the `configuration.yaml` file. +To use the Mosquitto as [broker](/docs/mqtt/broker/#run-your-own), add the following entry to the `configuration.yaml` file. ```yaml # Example configuration.yaml entry mqtt: broker: core-mosquitto ``` + +If username and password are set up in add-on, your `configuration.yaml` file should contain that data. + +```yaml +mqtt: + broker: core-mosquitto + username: YOUR_USERNAME + password: YOUR_PASSWORD +``` + +### {% linkable_title Listening simultaneously on SSL/TLS (8883) and insecure (1883) ports %} + +1. Configure SSL/TLS as normal. +2. Set `customize` flag to `true` in your configuration. +3. Create a file in `/share/mosquitto` named `insecure.conf` with the following contents: + +```text +listener 1883 +protocol mqtt +``` + +4. Restart MQTT + +

+It's recommended that you only open your firewall to the SSL/TLS port (8883) and only use the insecure port (1883) for local devices. Also, disable `anonymous:` and set `logins:`. +

+ +### {% linkable_title Access Control Lists (ACLs) %} + +It is possible to restrict access to topics based upon the user logged in to Mosquitto. In this scenario it is recommended to create individual users for each of your clients and create an appropriate ACL. + +See the following links for more information: + +* [Mosquitto topic restrictions](http://www.steves-internet-guide.com/topic-restriction-mosquitto-configuration/) +* [Mosquitto.conf man page](https://mosquitto.org/man/mosquitto-conf-5.html) + +Add the following configuration to enable ACLs: + +1. Set `customize` flag to `true` in your configuration. +2. Create a file in `/share/mosquitto` named `acl.conf` with the following contents: + +```text +acl_file /share/mosquitto/accesscontrollist +``` +3. Create a file in `/share/mosquitto` named `accesscontrollist` and add contents according to your requirements. diff --git a/source/_addons/nginx_proxy.markdown b/source/_addons/nginx_proxy.markdown index 318b9768d9c..2b43ab72740 100644 --- a/source/_addons/nginx_proxy.markdown +++ b/source/_addons/nginx_proxy.markdown @@ -9,21 +9,32 @@ sharing: true footer: true --- -Setup a SSL proxy with NGINX and redirect port 80 to 443. Make sure you have generated a certificate before you start this add-on. - -In the `http` section of the `configuration.yaml` file remove `ssl_certificate` and `ssl_key` and don't enter the port in the `base_url` to avoid a HTTP 502 error. +Sets up an SSL proxy with NGINX and redirect port 80 to 443. Make sure you have generated a certificate before you start this add-on. +In the `http` section of the `configuration.yaml` file remove `ssl_certificate` and `ssl_key` and don't enter the port in the `base_url` to avoid an HTTP 502 error. ```json { - "domain": "home.example.com" + "domain": "home.example.com", + "certfile": "fullchain.pem", + "keyfile": "privkey.pem", + "hsts": "max-age=31536000; includeSubDomains", + "customize": { + "active": false, + "default": "nginx_proxy_default*.conf", + "servers": "nginx_proxy/*.conf" + } } ``` Configuration variables: - **domain** (*Required*): Domain they will proxy run with it. +- **certfile** (*Required*): Certificate file to use in the /ssl dir. +- **keyfile** (*Required*): Private key file to use in the /ssl dir. +- **hsts** (*Optional*): Value for the [`Strict-Transport-Security`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Strict-Transport-Security) HTTP header to send. If empty or `null`, the header is not sent. +- **customize** (*Optional*): If true, additional NGINX configuration files for the default server and additional servers are read from files in the /share dir specified by the `default` and `servers` variables.

-It is possible to deactive port 80 if you need this for things like `emulate_hue`. Remove the host port from Network option of this add-on. +It is possible to deactivate port 80 if you need this for things like `emulate_hue`. Remove the host port from Network option of this add-on.

diff --git a/source/_addons/rpc_shutdown.markdown b/source/_addons/rpc_shutdown.markdown index 10aba2dcf5f..a4d2d6689a9 100644 --- a/source/_addons/rpc_shutdown.markdown +++ b/source/_addons/rpc_shutdown.markdown @@ -9,7 +9,7 @@ sharing: true footer: true --- -Allow to shutdown a Windows computer with a service call from Home Assistant. +Allows you to shut down a Windows computer with a service call from Home Assistant. ```json { @@ -23,10 +23,10 @@ Allow to shutdown a Windows computer with a service call from Home Assistant. } ``` -- **computers** (*Required*): A list of computer object to shutdown from Home-Assistant. -- **computers/alias** (*Required*): Set a alias for this record and that is the name for the input. -- **computers/address** (*Required*): IP address or netbios name of the computer for shutdown. -- **computers/credentials** (*Required*): Credentials for logging into computer. Use a `%` as delimiter of username and password. +- **computers** (*Required*): A list of computer objects to shutdown from Home-Assistant. +- **computers/alias** (*Required*): Set an alias for this record which becomes the name for the input. +- **computers/address** (*Required*): IP address or NetBIOS name of the computer for the shutdown. +- **computers/credentials** (*Required*): Credentials for logging into computer. Use a `%` as the delimiter of username and password. ## {% linkable_title Home Assistant %} diff --git a/source/_addons/samba.markdown b/source/_addons/samba.markdown index f6aff2fd92d..6b378a5dd87 100644 --- a/source/_addons/samba.markdown +++ b/source/_addons/samba.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Samba" -description: "Manage your Home Assistant and custom addons over Samba." +description: "Manage your Home Assistant and custom add-ons over Samba." date: 2017-04-30 13:28 sidebar: true comments: false @@ -10,7 +10,7 @@ footer: true featured: true --- -This allows you to set up a [Samba](https://samba.org/) server to access hass.io folders using Windows network shares. +This addon allows you to set up a [Samba](https://samba.org/) server to access hass.io folders using Windows network shares. ```json { @@ -22,7 +22,7 @@ This allows you to set up a [Samba](https://samba.org/) server to access hass.io "addons": true, "share": true, "backup": true, - "ssl": false, + "ssl": false }, "username": "", "password": "", @@ -32,10 +32,14 @@ This allows you to set up a [Samba](https://samba.org/) server to access hass.io Configuration variables: -- **name** (*Optional*): default `hassio`. Set netbios name of hassio device. -- **workgroup** (*Optional*): default `WORKGROUP`. Set network workgroup. -- **guest** (*Optional*): Allow login without a username or password. Defaults to `true`. -- **map** (*Optional*): Control which folder will be expose. `config` is for Home Assistant configuration folder. `addons` for local custom repositiory. `share` is a folder that can access from add-ons and Home Assistant too. `backup` for access to snapshot files. `ssl` for certificate storage, be careful with this option! Defaults all to `true`, except for `ssl`. -- **username** (*Optional*): The username for logging in if guest login is not used. +- **name** (*Optional*): Set netbios name of Hass.io device. Default is `hassio`. +- **workgroup** (*Optional*): Set network workgroup name. Default is `WORKGROUP`. +- **guest** (*Optional*): Allow login without a username or password. Default is `true`. +- **map** (*Optional*): Control which folders will be exposed. `config` shares the Home Assistant configuration folder. `addons` shares the local custom repository. `share` shares a folder that can be accessed by add-ons and Home Assistant. `backup` shares access to snapshot files. `ssl` shares certificate storage. Be careful with the `ssl` option! Defaults are all set to `true`, except for `ssl`. +- **username** (*Optional*): Username for logging in if guest login is not used. - **password** (*Optional*): Password for `username`. An empty password is not supported. -- **interface** (*Optional*): Interface on that will start the share. Normally is `eth0` for ethernet wired connection and `wlan0` for wireless connection. +- **interface** (*Optional*): Interface that will start the share. Normally this is `eth0` for ethernet wired connection and `wlan0` for wireless connection. If you are running on an Intel NUC this could also be `enp3s0` for ethernet or `wlp5s0` for wireless connection. + +

+Be careful when setting up port forwarding to the remote access. If you don't restrict access by requiring authentication and guest access is enabled, your configuration could be exposed to the internet! +

diff --git a/source/_addons/snips.markdown b/source/_addons/snips.markdown index 954d04d613e..851afd8e7d9 100644 --- a/source/_addons/snips.markdown +++ b/source/_addons/snips.markdown @@ -2,51 +2,39 @@ layout: page title: "Snips.ai" description: "Enhance your Hass.io installation with a local voice assistant." -date: 2017-04-30 13:28 +date: 2018-05-02 13:28 sidebar: true comments: false sharing: true footer: true --- -[Snips.ai] is an AI-powered voice assistant that runs on the Raspberry Pi 3 and x86 platforms. It runs on-device and is Private by Design. +[Snips.ai](https://snips.ai/) is an AI-powered voice assistant that runs on the Raspberry Pi 3 and x86 platforms. It runs on-device and is Private by Design. -To get started, follow [their tutorial] to create an assistant and download the training data. +The Snips add-on depends on the Mosquitto add on to bridge to Home Assistant, so make sure that is installed. -Now install and activate the [Samba] add-on so you can upload your training data. Connect to the "share" Samba share and copy your training data over. Name the file `assistant.zip`. +HomeAssistant comes with certain Intents builtin to handle common tasks. A complete list of Intents can be found in this wiki [Hass Snips Bundle](https://github.com/tschmidty69/hass-snips-bundle-intents/wiki). -Now it's time to start Snips for the first time. When the Snips add-on starts, it will output your audio devices: +The Snips addon by default comes with an assistant that allows you to turn on lights or switches, open covers, or add and list items to a shopping list if that component is enabled. -```text -**** List of PLAYBACK Hardware Devices **** -card 0: ALSA [bcm2835 ALSA], device 0: bcm2835 ALSA [bcm2835 ALSA] - Subdevices: 8/8 - Subdevice #0: subdevice #0 - Subdevice #1: subdevice #1 - Subdevice #2: subdevice #2 - Subdevice #3: subdevice #3 - Subdevice #4: subdevice #4 - Subdevice #5: subdevice #5 - Subdevice #6: subdevice #6 - Subdevice #7: subdevice #7 -card 0: ALSA [bcm2835 ALSA], device 1: bcm2835 ALSA [bcm2835 IEC958/HDMI] - Subdevices: 1/1 - Subdevice #0: subdevice #0 +If using a USB microphone and speakers plugged into the Raspberry Pi output, Snips will work without any change to the configuration. Trying saying things like: + +``` +Turn on kitchen light +Open garage door +What is on my shopping list ``` -You need to use this information to point the add-on at the right speakers and microphone. The information describes different cards and devices. On a Raspberry Pi 3, card 0 - device 0 is the built-in headset port, card 0 - device 1 is the HDMI port. In the example above, the USB microphone showed up as card 1 - device 0. +To get started creating your own configuration, follow [their tutorial](https://snips.gitbook.io/documentation/console) to create an assistant and download the training data. You can also add the HomeAssistant Skill to your assistant to enable the built-in intents, and add or create your own intents to do more complex tasks. -Find the microphone and speakers that you want to use and note down their device and card number. We will need that to configure the add-on options `mic` (microphone to use) and `speaker` (speaker to use). The format for these options is `,`. Change the configuration options and click save. +Now install and activate the [Samba](/addons/samba/) add-on so you can upload your training data. Connect to the "share" Samba share and copy your assistant over. Name the file `assistant.zip` or whatever you have configured in the configuration options. -Now start the add-on. +Now it's time to start Snips for the first time. You can configure the microphone and sound card using the Add-on interface. Now start the add-on. -### Add-On configuration +### {% linkable_title Add-On configuration %} ```json { - "mic": "1,0", - "speaker": "1,0", - "assistant": "assistant.zip", "mqtt_bridge": { "active": true, "host": "172.17.0.1", @@ -54,23 +42,76 @@ Now start the add-on. "user": "", "password": "" }, + "assistant": "assistant.zip", + "language": "en", + "custom_tts": false, + "tts_platform": "amazon_polly" } ``` Configuration variables: -- **mqtt_bridge** (*Optional*): Snips uses MQTT to communicate and defaults to their own broker. Use this config option to bridge their broker to your own. -- **mic**: This is the hardware address of your microphone. Look at the Snips +- **mqtt_bridge**: Snips uses MQTT to communicate and defaults to their own broker. Use this config option to bridge their broker to your the Mosquitto add-on. +- **assistant**: The name of your custom assistant in `/share`. If no assistant is found then a default assistant will be used. +- **language**: Language. This is used to select the default custom assistant, Currently `en`, `de` and `fr` are supported. +- **custom_tts**: Whether to use a TTS provider from Home Assistant for a variety of voices. +- **tts_platform**: Which TTS platform to use. ### {% linkable_title Home Assistant configuration %} -Use the Home Assistant [Snips.ai component][comp] to integrate the add-on into Home Assistant. +A simple configuration just requires this. Consult [Snips.ai component](/components/snips/) for more options. ```yaml snips: ``` -[Snips.ai]: https://snips.ai/ -[their tutorial]: https://github.com/snipsco/snips-platform-documentation/wiki/2.-Running-your-first-end-to-end-assistant -[Samba]: /addons/samba/ -[comp]: /components/snips/ +### {% linkable_title Home Assistant configuration %} + +There is an active [discord](https://discordapp.com/invite/3939Kqx) channel for further support. + +### {% linkable_title Examples %} + +So now you can turn lights on and off, let's check the weather. Log on to the [console](https://console.snips.ai/). If this is your first time, create a new assistant and add the Home Assistant skill, along with the Weather skill by snips. Download your assistant manually and copy it to the `/share` folder on your HassIO installation using the Samba addon. + +Next create a weather sensor, e.g., one for (Dark Sky)[/components/sensor.darksky/] and put the `api_key` in your `secrets.yaml` file. + +```yaml +- platform: darksky + name: "Dark Sky Weather" + api_key: !secret dark_sky_key + update_interval: + minutes: 10 + monitored_conditions: + - summary + - hourly_summary + - temperature + - temperature_max + - temperature_min +``` +Next add this to your `configuration.yaml` file to reference a new `intent_script` component. This is a good practice to [split your configuration files](/docs/configuration/splitting_configuration/) up. + +```yaml +intent_script: !include intent_script.yaml +``` + +Finally, create this `intent_script.yaml` file in your configuration directory. + +{% raw %} +```yaml +searchWeatherForecast: + speech: + type: plain + text: > + The weather is currently + {{ states('sensor.dark_sky_weather_temperature') | round(0) }} + degrees outside and {{ states('sensor.dark_sky_weather_summary') }}. + The high today will be + {{ states('sensor.dark_sky_weather_daily_high_temperature') | round(0)}} + and {{ states('sensor.dark_sky_weather_hourly_summary') }} +``` +{% endraw %} + +Now just restart HassIO and ask it what the weather is like. + +[their tutorial]: https://github.com/snipsco/snips-platform-documentation/wiki/2.-Create-an-assistant-using-an-existing-bundle + diff --git a/source/_addons/ssh.markdown b/source/_addons/ssh.markdown index 2ee90db5850..479b05c98f6 100644 --- a/source/_addons/ssh.markdown +++ b/source/_addons/ssh.markdown @@ -10,19 +10,19 @@ footer: true featured: true --- -Setting up an [SSH](https://openssh.org/) server allows access to your Hass.io folders with any SSH client. It also includes a command-line tool to access the [Hass.io API](https://github.com/home-assistant/hassio/blob/dev/API.md). Try it out: +Setting up an [SSH](https://openssh.com/) server allows access to your Hass.io folders with any SSH client. It also includes a command-line tool to access the [Hass.io API](https://github.com/home-assistant/hassio/blob/dev/API.md). Try it out: ```bash -$ hassio help +hassio help ```

This add-on will not enable you to install packages or do anything as root. This is not allowed with Hass.io.

-To use this add-on, you must have a private/public key to log in. To generate them, follow the [instructions for Windows][win] and [these for other platforms][other]. It is possible to set a password for login since version 2.0 but for high security use private/public keys. You can not run both variant at same time. +To use this add-on, you must have a private/public key to log in. To generate them, follow the [instructions for Windows][win] and [these for other platforms][other]. It is possible to set a password for login since version 2.0 but for high security use private/public keys. You can not run both variants at the same time. -In order to start this add-on for the first time, you either need to include an ssh key (enclosed in quotation marks, on a single line without line breaks) or set a password in the options section. +To start this add-on for the first time, you either need to include a key (enclosed in quotation marks, on a single line without line breaks) or set a password in the options section. ```json { @@ -33,14 +33,14 @@ In order to start this add-on for the first time, you either need to include an } ``` -The username for login over ssh is `root`. The complete login command is `ssh root@hassio.local`. +The username for login over SSH is `root`. The complete login command is `ssh root@hassio.local`. After logging in, you will find yourself in this add-ons container. The Home Assistant configuration directory is mounted on the path `/config`. Configuration variables: -- **authorized_keys** (*Optional*): Your public keys for authorized keyfile. Every element will be a line inside that file. -- **password** (*Optional*): Set a password for login. We do not recommend this variant. +- **authorized_keys** (*Optional*): Your public keys for the authorized key file. Every element will be a line inside that file. +- **password** (*Optional*): Set a password for login. We do **NOT** recommend this variant.
@@ -50,4 +50,6 @@ Configuration variables: [win]: https://www.digitalocean.com/community/tutorials/how-to-create-ssh-keys-with-putty-to-connect-to-a-vps [other]: https://help.github.com/articles/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent/ -

This add-on is not compatible if Hass.io was installed via the generic Linux installer.

+

+This add-on is not compatible if Hass.io was installed via the generic Linux installer. +

diff --git a/source/_addons/tellstick.markdown b/source/_addons/tellstick.markdown new file mode 100644 index 00000000000..49764d93dae --- /dev/null +++ b/source/_addons/tellstick.markdown @@ -0,0 +1,102 @@ +--- +layout: page +title: "TellStick" +description: "Telldus TellStick service enabler and tools." +date: 2017-12-04 21:31 +sidebar: true +comments: false +sharing: true +footer: true +featured: false +--- + +Setting up the [Tellstick](http://telldus.com) service and tools contained in the [telldus-core](http://developer.telldus.com/) package and adding configuration to enable Tellstick and Tellstick Duo to work on your Hass.io. + +To use this add-on, you first install it from the list of Built-in add-ons in Hass.io. +After installation you are presented with a default and example configuration, to alter this you must follow both the JSON format and also be aligned with the [valid parameters for Tellstick configuration file (tellstick.conf)](https://developer.telldus.com/wiki/TellStick_conf). + +After any changes have been made to the configuration, you need to restart the add-on for the changes to take effect. + +Configuration variables: + +- **id** (*Required*): A number and must be unique for each device. +- **name** (*Required*): A name for easy identification of the device. +- **protocol** (*Required*): This is the protocol the device uses. More on the different protocols later down. +- **model** (*Optional*): The model parameter is only used by some protocols where there exists different types of devices using the same protocol. This can be dimmers versus non-dimmers, codeswitch versus self-learning, etc. +- **house** (*Optional*): Depending on protocol the values here can vary a lot to identify or group per house or type. +- **unit** (*Optional*): Unit identifier, in most cases a value between 1 to 16 and often used in combination with the house. +- **fade** (*Optional*): Fade is either `true` or `false` and tells a dimmer if it should fade smooth or instant between values (only for IKEA protocol as it seems). +- **code** (*Optional*): A number series based on ones and zeroes often used for dip-switch based devices. + +You will need to add internal communication details to `configuration.yaml` to enable the integration from Hass.io and the add-on. + + +```yaml +# Example configuration.yaml entry + +tellstick: + host: core-tellstick + port: [50800, 50801] + +``` + +To add [lights](/components/light.tellstick/), [sensors](/components/sensor.tellstick/) and [switches](/components/switch.tellstick/) you follow the guidelines for each type individually that is [described for Home Assistant](/components/tellstick/) + +The add-on will also enable you to interact with the `tdtool` via a Home Assistant services call, see example below for self-learning device. + +## {% linkable_title Examples %} + +Example for adding more devices in the add-on configuration (note the comma separator between devices): + +```json +{ + "devices": [ + { + "id": 1, + "name": "Outdoor light", + "protocol": "everflourish", + "model": "selflearning-switch", + "house": "A", + "unit": "1" + }, + { + "id": 2, + "name": "Hallway dimmer", + "protocol": "risingsun", + "model": "selflearning-dimmer", + "house": "A", + "unit": "2" + } + ] +} +``` + +## Service calls + +If you wish to teach a selflearning device in your TellStick configuration: + +Go to Home Assistant [service call](http://hassio.local:8123/dev-service) in Developer tools and select. +- Service: `hassio.addon_stdin` +- Enter service Data: + `{"addon":"core_tellstick","input":{"function":"learn","device":"1"}}` + +Replace `1` with the corresponding ID of the device in your TellStick configuration. + +You can also use this to list devices or sensors and read the output in the add-on log: +`{"addon":"core_tellstick","input":{"function":"list-sensors"}}` + + +#### Supported service commands + +- `"function":"list"`: List currently configured devices with name and device id and all discovered sensors. + +- `"function":"list-sensors"` +- `"function":"list-devices"`: Alternative devices/sensors listing: Shows devices and/or sensors using key=value format (with tabs as separators, one device/sensor per line, no header lines.) + +- `"function":"on","device":"x"`: Turns on device. ’x’ could either be an integer of the device-id, or the name of the device. + +- `"function":"off","device":"x"`: Turns off device. ’x’ could either be an integer of the device-id, or the name of the device. + +- `"function":"bell","device":"x"`: Sends bell command to devices supporting this. ’x’ could either be an integer of the device-id, or the name of the device. + +- `"function":"learn","device":"x"`: Sends a special learn command to devices supporting this. This is normally devices of ’selflearning’ type. ’x’ could either be an integer of the device-id, or the name of the device. diff --git a/source/_components/abode.markdown b/source/_components/abode.markdown index 3314bcc9038..87b689230bc 100644 --- a/source/_components/abode.markdown +++ b/source/_components/abode.markdown @@ -13,7 +13,7 @@ ha_release: 0.52 ha_iot_class: "Cloud Push" --- -The `abode` component will allow users to integrate their Abode Home Security systems into Home Assistant and use its alarm system and sensors to automate their homes. +The `abode` component will allow users to integrate their Abode Home Security systems into Home Assistant and use its alarm system and sensors to automate their homes. Please visit the [Abode website](https://goabode.com/) for further information about Abode Security. @@ -24,7 +24,7 @@ There is currently support for the following device types within Home Assistant: - [Camera](/components/camera.abode/): Reports on `Camera` devices and will download and show the latest captured still image. - [Cover](/components/cover.abode/): Reports on `Secure Barriers` and can be used to open and close the cover. - [Lock](/components/cover.abode/): Reports on `Door Locks` and can be used to lock and unlock the door. -- [Light](/components/light.abode/): Reports on `Dimmer` lights and can be used to dim, change color, or turn the light on and off. +- [Light](/components/light.abode/): Reports on `Dimmer` lights and can be used to dim or turn the light on and off. - [Switch](/components/switch.abode/): Reports on `Power Switch` devices and can be used to turn the power switch on and off. Also reports on `Automations` set up in the Abode system and allows you to activate or deactivate them. - [Sensor](/components/sensor.abode/): Reports on `Temperature`, `Humidity`, and `Light` sensors. diff --git a/source/_components/ads.markdown b/source/_components/ads.markdown new file mode 100644 index 00000000000..9e8463add0b --- /dev/null +++ b/source/_components/ads.markdown @@ -0,0 +1,58 @@ +--- +layout: page +title: "ADS" +description: Connect Home Assistant to TwinCAT devices via the ADS interface +date: 2017-12-05 12:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: beckhoff.png +ha_category: Hub +ha_release: "0.60" +ha_iot_class: "Local Push" +--- + +The ADS (automation device specification) describes a device-independent and fieldbus independent interface for communication between [Beckhoff](https://www.beckhoff.com/) automation devices running [TwinCAT](http://www.beckhoff.hu/english.asp?twincat/default.htm) and other devices implementing this interface. + +To enable ADS, add the following lines to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +ads: + device: '127.0.0.1.1.1' + port: 48898 +``` + +{% configuration %} + device: + required: true + description: The AMS NetId that identifies the device. + type: string + port: + required: true + description: The port that runs the AMS server on the device, typically this would be 801 or 851. + type: int + ip_address: + required: false + description: The IP address of the ADS device, if not set the first 4 bytes of the device id will be used. + type: string +{% endconfiguration %} + +## {% linkable_title Service %} + +The ADS component will register the service `write_by_name` allowing you to write a value to a variable on your ADS device. + +```json +{ + "adsvar": ".myvariable", + "adstype": "int", + "value": 123 +} +``` + +Service parameters: + +- **adsvar**: Name of the variable on the ADS device. To access global variables on *TwinCAT2* use a prepending dot `.myvariable`, for TwinCAT3 use `GBL.myvariable`. +- **adstype**: Specify the type of the variable. Use one of the following: `int`, `byte`, `uint`, `bool` +- **value**: The value that will be written in the variable. diff --git a/source/_components/alarm_control_panel.abode.markdown b/source/_components/alarm_control_panel.abode.markdown index 99889db76d4..588eb46f407 100644 --- a/source/_components/alarm_control_panel.abode.markdown +++ b/source/_components/alarm_control_panel.abode.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Abode Alarm Control Panel" -description: "Instructions how to setup the Abode Alarm control panel within Home Assistant." +description: "Instructions on how to setup the Abode Alarm control panel within Home Assistant." date: 2017-08-26 0:28 sidebar: true comments: false @@ -13,7 +13,6 @@ ha_release: 0.52 ha_iot_class: "Cloud Push" --- - The `abode` security control panel platform allows you to control your [Abode](https://goabode.com/) alarms. The requirement is that you have setup your [Abode hub](/components/abode/). diff --git a/source/_components/alarm_control_panel.alarmdecoder.markdown b/source/_components/alarm_control_panel.alarmdecoder.markdown index fec4f0cb3fd..98810aaa2a1 100644 --- a/source/_components/alarm_control_panel.alarmdecoder.markdown +++ b/source/_components/alarm_control_panel.alarmdecoder.markdown @@ -1,7 +1,7 @@ --- layout: page title: "AlarmDecoder Alarm Control Panel" -description: "Instructions how to setup the AlarmDecoder Alarm control panel within Home Assistant." +description: "Instructions on how to setup the AlarmDecoder Alarm control panel within Home Assistant." date: 2017-04-02 13:28 sidebar: true comments: false @@ -13,8 +13,64 @@ ha_release: 0.43 ha_iot_class: "Local Push" --- - The `alarmdecoder` alarm control panel platform allows you to control your [AlarmDecoder](https://www.alarmdecoder.com) alarms. The requirement is that you have setup your [AlarmDecoder hub](/components/alarmdecoder/). +### {% linkable_title Services %} + +The Alarm Decoder component gives you access to several services for you to control your alarm with. + +- `alarm_arm_away`: Arms the alarm in away mode; all faults will trigger the alarm. +- `alarm_arm_home`: Arms the alarm in stay mode; faults to the doors or windows will trigger the alarm. +- `alarm_arm_night`: Arms the alarm in instant mode; all faults will trigger the alarm. Additionally, the entry delay is turned off on the doors. +- `alarm_disarm`: Disarms the alarm from any state. Also clears a `check_zone` flag after an alarm was triggered. +- `alarmdecoder_alarm_toggle_chime`: Toggles the alarm's chime state. + +

+`alarm_arm_custom_bypass` and `alarm_trigger`, while available in the services list in Home Assistant, are not currently implemented in the Alarm Decoder platform. +

+ +### {% linkable_title Attributes %} + +There are several attributes available on the alarm panel to give you more information about your alarm. + +- `ac_power`: Set to `true` if your system has AC power supplying it. +- `backlight_on`: Set to `true` if your keypad's backlight is on. +- `battery_low`: Set to `true` if your system's back-up battery is low. +- `check_zone`: Set to `true` if your system was recently triggered. When `check_zone` is `true`, it must be cleared by entering your code + 1 before attempting to rearm your alarm. +- `chime`: Set to `true` if your system's chime is activated. When activated, your system will beep anytime a door or window is faulted while the alarm is disarmed. +- `entry_delay_off`: Set to `true` if your system is in "Instant" mode, meaning the alarm will sound on any faults. +- `programming_mode`: Set to `true` if your system is in programming mode. +- `ready`: Set to `true` if your system is ready to be armed. Any faults, including motions sensors, will make this value `false`. +- `zone_bypassed`: Set to `true` if your system is currently bypassing a zone. + +### {% linkable_title Examples %} + +Using a combination of the available services and attributes, you can create switch templates. + +#### {% linkable_title Chime Status and Control %} + +{% raw %} +```yaml +- platform: template + switches: + alarm_chime: + friendly_name: Chime + value_template: "{{ is_state_attr('alarm_control_panel.alarm_panel', 'chime', true) }}" + turn_on: + service: alarm_control_panel.alarmdecoder_alarm_toggle_chime + data: + code: !secret alarm_code + turn_off: + service: alarm_control_panel.alarmdecoder_alarm_toggle_chime + data: + code: !secret alarm_code + icon_template: >- + {% if is_state_attr('alarm_control_panel.alarm_panel', 'chime', true) %} + mdi:bell-ring + {% else %} + mdi:bell-off + {% endif %} +``` +{% endraw %} diff --git a/source/_components/alarm_control_panel.alarmdotcom.markdown b/source/_components/alarm_control_panel.alarmdotcom.markdown index ebffcc5c0df..82e1a7774e7 100644 --- a/source/_components/alarm_control_panel.alarmdotcom.markdown +++ b/source/_components/alarm_control_panel.alarmdotcom.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Alarm.com Alarm Control Panel" -description: "Instructions how to integrate Alarm.com into Home Assistant." +description: "Instructions on how to integrate Alarm.com into Home Assistant." date: 2016-01-14 22:00 sidebar: true comments: false @@ -30,4 +30,3 @@ Configuration variables: - **password** (*Required*): Password for Alarm.com account. - **name** (*Optional*): The name of the alarm. Default is 'Alarm.com'. - **code** (*Optional*): Specifies a code to enable or disable the alarm in the frontend. - diff --git a/source/_components/alarm_control_panel.arlo.markdown b/source/_components/alarm_control_panel.arlo.markdown index c58bb46d992..e47a6322d62 100644 --- a/source/_components/alarm_control_panel.arlo.markdown +++ b/source/_components/alarm_control_panel.arlo.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Arlo Control Panel" -description: "Instructions how to setup the Netgear Arlo Base Stations as a control panel within Home Assistant." +description: "Instructions on how to setup the Netgear Arlo Base Stations as a control panel within Home Assistant." date: 2017-10-05 17:45 sidebar: true comments: false @@ -13,8 +13,7 @@ ha_release: 0.56 ha_iot_class: "Cloud Polling" --- - -The `arlo` control panel platform allows you to control your [Arlo](https://arlo.netgear.com/) base stations. +The `arlo` alarm control panel allows you to control your [Arlo](https://arlo.netgear.com/) base stations. You can use it to switch modes and trigger alarms from Home Assistant. To get your [Arlo](https://arlo.netgear.com/) base stations working within Home Assistant, please follow the instructions for the general [Arlo component](/components/arlo). @@ -26,6 +25,52 @@ alarm_control_panel: - platform: arlo ``` -Configuration variables: +{% configuration %} +home_mode_name: + description: "Arlo base station does not have a built-in home mode. You can map one of your custom modes to Home Assistant's home mode by setting the name of the custom mode in this configuration variable. The name of the custom mode should match exactly as you set it up in the Arlo app." + required: false + type: string +away_mode_name: + description: "Arlo base station does not have a built-in away mode. You can map one of your custom modes to Home Assistant's away mode by setting the name of the custom mode in this configuration variable. The name of the custom mode should match eactly as you set it up in the Arlo app." + required: false + type: string + default: "`Armed` mode in Arlo" +{% endconfiguration %} -- **home_mode_name**: (*Optional*): Arlo base station does not have a built-in home mode. You can map one of your custom modes to home assistant's home mode by setting the name of the custom mode in this configuration variable. The name of the custom mode should match exactly as you set it up in the Arlo app. +## {% linkable_title Examples %} + +These examples are based on an Arlo base station named `my_arlo_base_station`. Replace this with the name of your base station's `entity_id`. + +Arming the Arlo Base Station when leaving. + +```yaml +- id: arm_arlo_when_leaving + alias: Arm Arlo cameras when leaving + trigger: + platform: state + entity_id: group.family + from: home + to: not_home + action: + service: alarm_control_panel.alarm_arm_away + entity_id: alarm_control_panel.my_arlo_base_station +``` + +Setting Arlo to a custom mode (mapped to `home_mode_name` in `configuration.yaml`) when arriving. + +```yaml +- id: disarm_arlo_when_arriving + alias: Set Arlo cameras to Home mode when arriving + trigger: + platform: state + entity_id: group.family + from: not_home + to: home + action: + service: alarm_control_panel.alarm_arm_home + entity_id: alarm_control_panel.my_arlo_base_station +``` + +You can also completely disarm the Arlo base station by calling the `alarm_control_panel.alarm_disarm` service, and trigger the alarm by calling the `alarm_control_panel.alarm_trigger` service. + +More examples and configuration options can be found on the [Manual Alarm Control page](/components/alarm_control_panel.manual/#examples). diff --git a/source/_components/alarm_control_panel.canary.markdown b/source/_components/alarm_control_panel.canary.markdown new file mode 100644 index 00000000000..59125f8746a --- /dev/null +++ b/source/_components/alarm_control_panel.canary.markdown @@ -0,0 +1,18 @@ +--- +layout: page +title: "Canary Alarm Control Panel" +description: "Instructions on how to integrate your Canary devices into Home Assistant." +date: 2017-12-07 22:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: canary.png +ha_category: Alarm +ha_release: "0.60" +ha_iot_class: "Cloud Polling" +--- + +The `canary` alarm control panel platform allows you to integrate your [Canary](https://canary.is) alarm system in Home Assistant. + +To add `canary` alarm control panel to your installation, follow instructions in [Canary component](/components/canary/). diff --git a/source/_components/alarm_control_panel.concord232.markdown b/source/_components/alarm_control_panel.concord232.markdown index 9581683f3ec..36f897e21e5 100644 --- a/source/_components/alarm_control_panel.concord232.markdown +++ b/source/_components/alarm_control_panel.concord232.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Concord232 Alarm Control Panel" -description: "Instructions how to integrate Interlogix/GE Concord4 with RS-232 Automation Control Module into Home Assistant." +description: "Instructions on how to integrate Interlogix/GE Concord4 with RS-232 Automation Control Module into Home Assistant." date: 2016-10-11 10:00 sidebar: true comments: false @@ -14,7 +14,9 @@ ha_release: 0.31 The `concord232` platform provides integration with GE, Interlogix (and other brands) alarm panels that support the RS-232 Automation Control Panel interface module (or have it built in). Supported panels include Concord 4. -To enable this, add the following lines to your `configuration.yaml`: +To use this platform, you will need to have the external concord232 client and server installed. The server must be running on the device which is connected to the automation module's serial port. The client must be installed on the machine running Home Assistant. These may often be the same machine, but do not have to be. For additional details in setting up and testing the client and server, see + +To enable this platform in Home Assistant, add the following lines to your `configuration.yaml`: ```yaml # Example configuration.yaml entry @@ -26,4 +28,3 @@ Configuration variables: - **host** (*Optional*): The host where the concord232 server process is running. Defaults to localhost. - **port** (*Optional*): The port where the Alarm panel is listening. Defaults to 5007. - diff --git a/source/_components/alarm_control_panel.egardia.markdown b/source/_components/alarm_control_panel.egardia.markdown index b8309efd549..bef700af164 100644 --- a/source/_components/alarm_control_panel.egardia.markdown +++ b/source/_components/alarm_control_panel.egardia.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Egardia / Woonveilig Alarm Control Panel" -description: "Instructions how to integrate Egardia / Woonveilig into Home Assistant." +description: "Instructions on how to integrate Egardia / Woonveilig into Home Assistant." date: 2016-07-02 22:00 sidebar: true comments: false @@ -12,79 +12,5 @@ ha_release: 0.51 ha_category: Alarm --- -The `egardia` platform enables the ability to control an [Egardia](http://egardia.com/)/Woonveilig control panel. These alarm panels are known under different brand names across the world, including Woonveilig in the Netherlands. This was tested on a Gate01 version of the Egardia/Woonveilig platform. - -You will need to know the IP of your alarm panel on your local network. Test if you can login to the panel by browsing to the IP address and log in using your Egardia/Woonveilig account. - -To enable this, add the following lines to your `configuration.yaml`: - -```yaml -# Example configuration.yaml entry -alarm_control_panel: - - platform: egardia - host: YOUR_HOST - username: YOUR_USERNAME - password: YOUR_PASSWORD -``` - -Configuration variables: - -- **host** (*Required*): The local IP address of the Egardia/Woonveilig alarm panel. -- **username** (*Required*): Username for the Egardia/Woonveilig account. -- **password** (*Required*): Password for Egardia/Woonveilig account. -- **port** (*Optional*): The port of the alarm panel. Defaults to 80. -- **name** (*Optional*): Name to use for the alarm panel. Defaults to `Egardia`. -- **report_server_enabled** (*Optional*): Enable reporting by server. Defaults to `False`. -- **report_server_port** (*Optional*): Port of the Egardia server. Defaults to 85. -- **report_server_codes** list (*Optional*): List of codes for the different states. - -Note that this basic configuration will only enable you to read the armed/armed away/disarmed status of your alarm and will **not** update the status if the alarm is triggered. This is because of how Egardia built their system. The alarm triggers normally go through their servers. -You can change this, however, using the following procedure. This is a more advanced configuration. - -1. Log in into your alarm system's control panel. You will need to access http://[IP of your control panel]. You know this already since you need it in the basic configuration from above. Log in to the control panel with your Egardia/Woonveilig username and password. -2. Once logged in, go to *System Settings*, *Report* and change the Server Address for your primary server to the IP or hostname of your Home Assistant machine. Also, update the port number 85 or to anything you like. The provided software that you will set up in the next steps runs on port 85 by default. **Make sure to change the settings of the primary server otherwise the messages will not come through. Note that this will limit (or fully stop) the number of alarm messages you will get through Egardia's / Woonveilig services.** Maybe, that is just what you want. Make sure to save your settings by selecting 'OK'. -3. On your Home Assistant machine run `$ sudo python3 egardiaserver.py`. Refer to the [python-egardia repository](https://github.com/jeroenterheerdt/python-egardia) for detailed documentation on parameters. This will receive status codes from your alarm control panel and display them. You will need the codes to include in your configuration.yaml. Make sure to change the status of your alarm to all states (disarm, arm, home) by all means possible (all users, remotes, web login, app) as well as trigger the alarm in all ways possible to get 100% coverage. **Before triggering the alarm it might be good to disable the siren temporarily (can be done in Panel Settings).** -4. Once you have the codes, update your `configuration.yaml`: -```yaml -# Example configuration.yaml entry -alarm_control_panel: -  - platform: egardia -   host: YOUR_HOST -   username: YOUR_USERNAME -   password: YOUR_PASSWORD - report_server_enabled: True - report_server_port: PORT_OF_EGARDIASERVER (85 as per the instructions above) - report_server_codes: - arm: XXXXXXXXXXXXXXXX, XXXXXXXXXXXXXXXX - disarm: XXXXXXXXXXXXXXXX, XXXXXXXXXXXXXXXX - home: XXXXXXXXXXXXXXXX - triggered: XXXXXXXXXXXXXXXX, XXXXXXXXXXXXXXXX, XXXXXXXXXXXXXXXX - ignore: XXXXXXXXXXXXXXXX -``` - -Note that for triggered, arm and disarm multiple codes can be entered since each sensor triggers with a different code and each user of the system has its own arm and disarm codes. Also note that your system will do regular system checks which will be reported as well. Since Home Assistant provides no way of handling them properly, you can enter those codes as ignore (again, multiple codes can be used here). The egardia component will ignore these codes and continue returning the old status if it receives any of the codes that are listed as ignore. This is useful for example when you have armed your alarm at night: normally a system check will occur at least once during the night and if that code is not specified anywhere Home Assistant will set the status of the alarm to its default, which is unarmed. This is in fact wrong. Listing the code as ignore changes this behavior and Home Assistant will continue to show the status the alarm is in (disarm, arm, home, triggered) even when system checks occur. - -5. Start the `egardiaserver.py` script on boot of your Home Assistant machine, for example by using `systemctl` by `systemd`. To use this method, create a shell script named `egardiaserver.sh` that contains something like the following: - -```bash -$ source /srv/homeassistant/bin/activate -$ python3 /srv/homeassistant/lib/python3.5/site-packages/pythonegardia/egardiaserver.py -host [YOURHOST] -password '[YOURPASSWORD]' -ssl True > /tmp/egardiaserver.log 2>&1 -``` - -Mark it as executable (`$ chmod +x`) and run `sudo nano /lib/systemd/system/egardiaserver.service`. Enter the following into the `egardiaserver.service` file: - -```bash -[Unit] -Description=Egardia Server Service - -[Service] -ExecStart=/bin/bash /srv/homeassistant/homeassistant_venv/lib/python3.5/site-packages/pythonegardia/egardiaserver.sh -StandardOutput=journal+console - -[Install] -WantedBy=multi-user.target -Alias=egardiaserver.service -``` - -Save and then run `sudo systemctl enable egardiaserver.service` and `sudo systemctl start egardiaserver.service`. -6. Test your setup and enjoy. The component will update if the alarm status changes, including triggers. You can use this to build your own automations and send notifications as you wish. +The `egardia` platform allows you to integrate your [Egardia](http://www.egardia.com)/[Woonveilig](http://www.woonveilig.nl) alarm control panel in Home Assistant. +You will need to set up your [Egardia hub](/components/egardia/). diff --git a/source/_components/alarm_control_panel.envisalink.markdown b/source/_components/alarm_control_panel.envisalink.markdown index b5b6b3d593a..fe58c6fb4d7 100644 --- a/source/_components/alarm_control_panel.envisalink.markdown +++ b/source/_components/alarm_control_panel.envisalink.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Envisalink Alarm" -description: "Instructions how to setup the Envisalink Alarm control panel within Home Assistant." +description: "Instructions on how to setup the Envisalink Alarm control panel within Home Assistant." date: 2016-07-01 08:00 sidebar: true comments: false diff --git a/source/_components/alarm_control_panel.homematicip_cloud.markdown b/source/_components/alarm_control_panel.homematicip_cloud.markdown new file mode 100644 index 00000000000..c4e06783b8e --- /dev/null +++ b/source/_components/alarm_control_panel.homematicip_cloud.markdown @@ -0,0 +1,21 @@ +--- +layout: page +title: "HomematicIP Cloud Alarm Control Panel" +description: "Instructions on how to integrate HomematicIP alarm control panel into Home Assistant." +date: 2018-05-18 22:40 +sidebar: true +comments: false +sharing: true +footer: true +logo: homematicip_cloud.png +ha_category: Sensor +ha_release: 0.73 +ha_iot_class: "Cloud Push" +--- + +The `homematicip_cloud` alarm_control_panel platform allows you to control your [HomematicIP](https://www.homematic-ip.com) `Security Zones` through Home Assistant. + +This component will automatically add `Security Zones` configured in your HomematicIP cloud. + +Please refer to the +[component](/components/homematicip_cloud/) configuration on how to setup HomematicIP Cloud. diff --git a/source/_components/alarm_control_panel.ialarm.markdown b/source/_components/alarm_control_panel.ialarm.markdown new file mode 100644 index 00000000000..d72261c908f --- /dev/null +++ b/source/_components/alarm_control_panel.ialarm.markdown @@ -0,0 +1,48 @@ +--- +layout: page +title: "Antifurto365 iAlarm Control Panel" +description: "Instructions on how to integrate iAlarms alarms into Home Assistant." +date: 2017-11-30 20:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: antifurto365-ialarm.png +ha_category: Alarm +ha_release: "0.60" +--- + +The `ialarm` platform provides connectivity with the [Antifurto365](https://www.antifurtocasa365.it/) iAlarm alarm systems. + +This platform supports the following services: `alarm_arm_away`, `alarm_arm_home` and `alarm_disarm`. + +To enable this, add the following lines to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +alarm_control_panel: + - platform: ialarm + host: ALARM_SYSTEM_IP + username: YOUR_USERNAME + password: YOUR_PASSWORD +``` + +{% configuration %} + host: + description: The IP address of the iAlarm device on your home network. + required: true + type: string + username: + description: Username used to sign into the iAlarm web client (should be admin by default). + required: true + type: string + password: + description: Password used to sign into the iAlarm web client. If it has a leading zero you need to put the password within quotes. + required: true + type: string + name: + description: Name of device in Home Assistant. + required: false + type: string +{% endconfiguration %} + diff --git a/source/_components/alarm_control_panel.ifttt.markdown b/source/_components/alarm_control_panel.ifttt.markdown new file mode 100644 index 00000000000..e2f1a13955a --- /dev/null +++ b/source/_components/alarm_control_panel.ifttt.markdown @@ -0,0 +1,93 @@ +--- +layout: page +title: "IFTTT Alarm Control Panel" +description: "Instructions on how to integrate IFTTT-controlled security systems into Home Assistant." +date: 2018-03-10 21:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: ifttt.png +ha_category: Alarm +ha_release: 0.66 +--- + +The `ifttt` platform allows you to integrate security systems that have no open API but can be controlled through [IFTTT](https://ifttt.com/discover). + +This platform depends on the [IFTTT](/components/ifttt/) Home Assistant component. See the component's documentation to set it up. + +

+It is important to note that this platform fully relies on IFTTT to receive updates when the security system's state changes. Therefore, this platform shows an assumed state. +

+ +To enable this, setup the required IFTTT applets as listed below and add the following lines to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +ifttt: + key: YOUR_WEBHOOK_KEY + +alarm_control_panel: + - platform: ifttt + name: YOUR_ALARM_NAME + code: YOUR_ALARM_CODE + event_arm_away: YOUR_ARM_AWAY_EVENT + event_arm_home: YOUR_ARM_HOME_EVENT + event_arm_night: YOUR_ARM_NIGHT_EVENT + event_disarm: YOUR_DISARM_EVENT +``` + +

+It is strongly discouraged to use this platform when you don't use encryption; otherwise, your API password will be send unprotected through the IFTTT Webhooks. It is advised to [setup encryption using Let's Encrypt](https://home-assistant.io/blog/2017/09/27/effortless-encryption-with-lets-encrypt-and-duckdns/). +

+ +{% linkable_title Required IFTTT applets %} + +This platform supports the services `alarm_disarm`, `alarm_arm_away`, `alarm_arm_home` and `alarm_arm_night`. For each of these services, an IFTTT webhook will be triggered. + +For this system to operate correctly, the following IFTTT applets have to be setup. Obviously, if your alarm device does not support some states, no applets have to be provided for those. +* **IF** Webhook event `YOUR_DISARM_EVENT` is called, **THEN** disarm the alarm system. +* **IF** Webhook event `YOUR_ARM_HOME_EVENT` is called, **THEN** set the alarm system to armed home. +* **IF** Webhook event `YOUR_ARM_NIGHT_EVENT` is called, **THEN** set the alarm system to armed away. +* **IF** Webhook event `YOUR_DISARM_EVENT` is called, **THEN** set the alarm system to armed night. +* **IF** the alarm system was disarmed, **THEN** perform a Webhook `POST` web request to url `https://HASS_URL/api/services/alarm_control_panel/ifttt_push_alarm_state?api_password=API_PASSWORD` with content type `application/json` and body `{"entity_id": "alarm_control_panel.DEVICE_NAME", "state": "disarmed"}`. +* **IF** the alarm system state changed to armed home, **THEN** perform a Webhook `POST` web request to url `https://HASS_URL/api/services/alarm_control_panel/ifttt_push_alarm_state?api_password=API_PASSWORD` with content type `application/json` and body `{"entity_id": "alarm_control_panel.DEVICE_NAME", "state": "armed_home"}`. +* **IF** the alarm system state changed to armed away, **THEN** perform a Webhook `POST` web request to url `https://HASS_URL/api/services/alarm_control_panel/ifttt_push_alarm_state?api_password=API_PASSWORD` with content type `application/json` and body `{"entity_id": "alarm_control_panel.DEVICE_NAME", "state": "armed_away"}`. +* **IF** the alarm system state changed to armed night, **THEN** perform a Webhook `POST` web request to url `https://HASS_URL/api/services/alarm_control_panel/ifttt_push_alarm_state?api_password=API_PASSWORD` with content type `application/json` and body `{"entity_id": "alarm_control_panel.DEVICE_NAME", "state": "armed_night"}`. + + +{% configuration %} + name: + description: The name of your Home Assistant alarm control panel. + required: false + type: string + code: + description: The code for the alarm control panel. + required: false + type: string + event_arm_away: + description: IFTTT webhook event to call when the state is set to armed away. + required: false + type: string + default: alarm_arm_away + event_arm_home: + description: IFTTT webhook event to call when the state is set to armed home. + required: false + type: string + default: alarm_arm_home + event_arm_night: + description: IFTTT webhook event to call when the state is set to armed night. + required: false + type: string + default: alarm_arm_night + event_disarm: + description: IFTTT webhook event to call when the state is set to disarmed. + required: false + type: string + default: alarm_disarm + optimistic: + description: Specify if the state will be updated by an ifttt_push_alarm_state call (false) or can be set immediately (true). + required: false + type: boolean + default: false +{% endconfiguration %} diff --git a/source/_components/alarm_control_panel.manual.markdown b/source/_components/alarm_control_panel.manual.markdown index 0bdb28cd801..feeda4b7684 100644 --- a/source/_components/alarm_control_panel.manual.markdown +++ b/source/_components/alarm_control_panel.manual.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Manual Alarm Control Panel" -description: "Instructions how to integrate manual alarms into Home Assistant." +description: "Instructions on how to integrate manual alarms into Home Assistant." date: 2015-10-13 19:10 sidebar: true comments: false @@ -25,13 +25,62 @@ Configuration variables: - **name** (*Optional*): The name of the alarm. Default is "HA Alarm". - **code** (*Optional*): If defined, specifies a code to enable or disable the alarm in the frontend. -- **pending_time** (*Optional*): The time in seconds of the pending time before arming the alarm. Default is 60 seconds. +- **code_template** (*Optional*): If defined, returns a code to enable or disable the alarm in the frontend; an empty string disables checking the code. Inside the template, the variables **from_state** and **to_state** identify the current and desired state. Only one of **code** and **code_template** can be specified. +- **delay_time** (*Optional*): The time in seconds of the pending time before triggering the alarm. Default is 0 seconds. +- **pending_time** (*Optional*): The time in seconds of the pending time before effecting a state change. Default is 60 seconds. - **trigger_time** (*Optional*): The time in seconds of the trigger time in which the alarm is firing. Default is 120 seconds. - **disarm_after_trigger** (*Optional*): If true, the alarm will automatically disarm after it has been triggered instead of returning to the previous state. -- **armed_home/armed_away/armed_night/triggered** (*Optional*): State specific settings - - **pending_time**: State specific pending time override. +- **armed_custom_bypass/armed_home/armed_away/armed_night/disarmed/triggered** (*Optional*): State specific settings + - **delay_time** (*Optional*): State specific setting for **delay_time** (all states except **triggered**) + - **pending_time** (*Optional*): State specific setting for **pending_time** (all states except **disarmed**) + - **trigger_time** (*Optional*): State specific setting for **trigger_time** (all states except **triggered**) -In the config example below, armed_home state will have no pending time and triggered state will have pending time of 20 second whereas armed_away state will have a default pending time of 30 seconds. +## {% linkable_title State machine %} + +The state machine of the manual alarm component is complex but powerful. The +transitions are timed according to three values, **delay_time**, **pending_time** +and **trigger_time**. The values in turn can come from the default configuration +variable or from a state-specific override. + +When the alarm is armed, its state first goes to **pending** for a number +of seconds equal to the destination state's **pending_time**, and then +transitions to one of the "armed" states. Note that **code_template** +never receives "pending" in the **to_state** variable; instead, +**to_state** contains the state which the user has requested. However, +**from_state** *can* contain "pending". + +When the alarm is triggered, its state goes to **pending** for a number of +seconds equal to the previous state's **delay_time** plus the triggered +state's **pending_time**. Then the alarm transitions to the "triggered" +states. The code is never checked when triggering the alarm, so the +**to_state** variable of **code_template** cannot ever contain "triggered" +either; again, **from_state** *can* contain "triggered". + +The alarm remains in the "triggered" state for a number of seconds equal to the +previous state's **trigger_time**. Then, depending on **disarm_after_trigger**, +it goes back to either the previous state or **disarmed**. If the previous +state's **trigger_time** is zero, the transition to "triggered" is entirely +blocked and the alarm remains in the armed state. + +Each of the settings is useful in different scenarios. **pending_time** gives +you some time to leave the building (for "armed" states) or to disarm the alarm +(for the "triggered" state). + +**delay_time** can also be used to allow some time to disarm the alarm, but with +more flexibility. For example, you could specify a delay time for the +"armed away" state, in order to avoid triggering the alarm while the +garage door opens, but not for the "armed home" state. + +**trigger_time** is useful to disable the alarm when disarmed, but it can also +be used for example to sound the siren for a shorter time during the night. + +In the config example below: + +- the disarmed state never triggers the alarm; + +- the armed_home state will leave no time to leave the building or disarm the alarm; + +- while other states state will give 30 seconds to leave the building before triggering the alarm, and 20 seconds to disarm the alarm when coming back. ```yaml # Example configuration.yaml entry @@ -40,11 +89,13 @@ alarm_control_panel: name: Home Alarm code: 1234 pending_time: 30 + delay_time: 20 + trigger_time: 4 + disarmed: + trigger_time: 0 armed_home: pending_time: 0 - triggered: - pending_time: 20 - trigger_time: 4 + delay_time: 0 ``` ## {% linkable_title Examples %} diff --git a/source/_components/alarm_control_panel.manual_mqtt.markdown b/source/_components/alarm_control_panel.manual_mqtt.markdown index bf5ba5bdcc7..5ceaa64e3a0 100644 --- a/source/_components/alarm_control_panel.manual_mqtt.markdown +++ b/source/_components/alarm_control_panel.manual_mqtt.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Manual Alarm Control Panel with MQTT Support" -description: "Instructions how to integrate manual alarms into Home Assistant with MQTT support." +description: "Instructions on how to integrate manual alarms into Home Assistant with MQTT support." date: 2017-07-02 9:10 sidebar: true comments: false @@ -9,7 +9,7 @@ sharing: true footer: true logo: home-assistant.png ha_category: Alarm -ha_release: 0.50 +ha_release: "0.50" --- This platform extends the [manual alarm](/components/alarm_control_panel.manual/) by adding support for MQTT control of the alarm by a remote device. It can be used to create external keypads which simply change the state of the manual alarm in Home Assistant. @@ -32,6 +32,8 @@ When the state of the manual alarm changes, Home Assistant will publish one of t - 'pending' - 'triggered' +To use your panel in your installation, add the following to your `configuration.yaml` file: + ```yaml # Example configuration.yaml entry alarm_control_panel: @@ -42,15 +44,21 @@ alarm_control_panel: Configuration variables: -All configuration variables from the base manual alarm platform are available: +The following configuration variables from the base manual alarm platform are available: - **name** (*Optional*): The name of the alarm. Default is "HA Alarm". - **code** (*Optional*): If defined, specifies a code to enable or disable the alarm in the frontend. This code is not required for MQTT interactions. -- **pending_time** (*Optional*): The time in seconds of the pending time before arming the alarm. Default is 60 seconds. +- **code_template** (*Optional*): If defined, returns a code to enable or disable the alarm in the frontend; an empty string disables checking the code. Inside the template, the variables **from_state** and **to_state** identify the current and desired state. Only one of **code** and **code_template** can be specified. +- **delay_time** (*Optional*): The time in seconds of the pending time before triggering the alarm. Default is 0 seconds. +- **pending_time** (*Optional*): The time in seconds of the pending time before effecting a state change. Default is 60 seconds. - **trigger_time** (*Optional*): The time in seconds of the trigger time in which the alarm is firing. Default is 120 seconds. - **disarm_after_trigger** (*Optional*): If true, the alarm will automatically disarm after it has been triggered instead of returning to the previous state. -- **armed_home|armed_away|armed_night|triggered** (*Optional*): State specific settings - - **pending_time**: State specific pending time override. +- **armed_home/armed_away/armed_night/disarmed/triggered** (*Optional*): State specific settings + - **delay_time** (*Optional*): State specific setting for **delay_time** (all states except **triggered**) + - **pending_time** (*Optional*): State specific setting for **pending_time** (all states except **disarmed**) + - **trigger_time** (*Optional*): State specific setting for **trigger_time** (all states except **triggered**) + +See the documentation for the [manual alarm platform](/components/alarm_control_panel.manual/) for a description. Additionally, the following MQTT configuration variables are also available: @@ -62,7 +70,11 @@ Additionally, the following MQTT configuration variables are also available: - **payload_arm_away** (*Optional*): The payload to set armed-away mode on this Alarm Panel. Default is "ARM_AWAY". - **payload_arm_night** (*Optional*): The payload to set armed-night mode on this Alarm Panel. Default is "ARM_NIGHT". -In the config example below, armed_home state will have no pending time and triggered state will have a pending time of 20 seconds whereas armed_away state will have a default pending time of 30 seconds. +In the configuration example below: + +- The disarmed state never triggers the alarm. +- The armed_home state will leave no time to leave the building or disarm the alarm. +- While other states state will give 30 seconds to leave the building before triggering the alarm, and 20 seconds to disarm the alarm when coming back. ```yaml # Example configuration.yaml entry @@ -71,11 +83,13 @@ alarm_control_panel: state_topic: home/alarm command_topic: home/alarm/set pending_time: 30 + delay_time: 20 + trigger_time: 4 + disarmed: + trigger_time: 0 armed_home: pending_time: 0 - triggered: - pending_time: 20 - trigger_time: 4 + delay_time: 0 ``` ## {% linkable_title Examples %} diff --git a/source/_components/alarm_control_panel.markdown b/source/_components/alarm_control_panel.markdown index ba5f469915b..bdc1adf3987 100644 --- a/source/_components/alarm_control_panel.markdown +++ b/source/_components/alarm_control_panel.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Alarm Control Panels" -description: "Instructions how to integrate Alarm Control Panels into Home Assistant." +description: "Instructions on how to integrate Alarm Control Panels into Home Assistant." date: 2015-10-13 19:10 sidebar: true comments: false diff --git a/source/_components/alarm_control_panel.mqtt.markdown b/source/_components/alarm_control_panel.mqtt.markdown index 7e6feaa7a2e..cb93a1b5958 100644 --- a/source/_components/alarm_control_panel.mqtt.markdown +++ b/source/_components/alarm_control_panel.mqtt.markdown @@ -1,7 +1,7 @@ --- layout: page title: "MQTT Alarm Control Panel" -description: "Instructions how to integrate MQTT capable Alarm Panels into Home Assistant." +description: "Instructions on how to integrate MQTT capable Alarm Panels into Home Assistant." date: 2015-09-14 19:10 sidebar: true comments: false @@ -35,14 +35,56 @@ alarm_control_panel: command_topic: "home/alarm/set" ``` -Configuration variables: - -- **state_topic** (*Required*): The MQTT topic subscribed to receive state updates. -- **command_topic** (*Required*): The MQTT topic to publish commands to change the alarm state. -- **name** (*Optional*): The name of the alarm. Default is 'MQTT Alarm'. -- **qos** (*Optional*): The maximum QoS level of the state topic. Default is 0. This QoS will also be used to publishing messages. -- **payload_disarm** (*Optional*): The payload to disarm your Alarm Panel. Default is "DISARM". -- **payload_arm_home** (*Optional*): The payload to set armed-home mode on your Alarm Panel. Default is "ARM_HOME". -- **payload_arm_away** (*Optional*): The payload to set armed-away mode on your Alarm Panel. Default is "ARM_AWAY". -- **code** (*Optional*): If defined, specifies a code to enable or disable the alarm in the frontend. - +{% configuration %} +name: + description: The name of the alarm. + required: false + type: string + default: MQTT Alarm +state_topic: + description: The MQTT topic subscribed to receive state updates. + required: true + type: string +command_topic: + description: The MQTT topic to publish commands to change the alarm state. + required: true + type: string +qos: + description: The maximum QoS level of the state topic. + required: false + type: integer + default: 0 +payload_disarm: + description: The payload to disarm your Alarm Panel. + required: false + type: string + default: DISARM +payload_arm_home: + description: The payload to set armed-home mode on your Alarm Panel. + required: false + type: string + default: ARM_HOME +payload_arm_away: + description: The payload to set armed-away mode on your Alarm Panel. + required: false + type: string + default: ARM_AWAY +code: + description: If defined, specifies a code to enable or disable the alarm in the frontend. + required: false + type: string +availability_topic: + description: The MQTT topic subscribed to receive availability (online/offline) updates. + required: false + type: string +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 +{% endconfiguration %} diff --git a/source/_components/alarm_control_panel.nx584.markdown b/source/_components/alarm_control_panel.nx584.markdown index 0a14c880db4..a98ad9050a6 100644 --- a/source/_components/alarm_control_panel.nx584.markdown +++ b/source/_components/alarm_control_panel.nx584.markdown @@ -1,7 +1,7 @@ --- layout: page title: "NX584 Alarm Control Panel" -description: "Instructions how to integrate NX584 into Home Assistant." +description: "Instructions on how to integrate NX584 into Home Assistant." date: 2016-02-07 10:00 sidebar: true comments: false diff --git a/source/_components/alarm_control_panel.satel_integra.markdown b/source/_components/alarm_control_panel.satel_integra.markdown index 77752ae7d0b..a5f8915d08c 100644 --- a/source/_components/alarm_control_panel.satel_integra.markdown +++ b/source/_components/alarm_control_panel.satel_integra.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Satel Integra Alarm Control Panel" -description: "Instructions how to setup the Satel Integra control panel within Home Assistant." +description: "Instructions on how to setup the Satel Integra control panel within Home Assistant." date: 2017-09-07 13:28 sidebar: true comments: false diff --git a/source/_components/alarm_control_panel.simplisafe.markdown b/source/_components/alarm_control_panel.simplisafe.markdown index af38f6ad372..ac5c14183a2 100644 --- a/source/_components/alarm_control_panel.simplisafe.markdown +++ b/source/_components/alarm_control_panel.simplisafe.markdown @@ -1,7 +1,7 @@ --- layout: page title: "SimpliSafe Alarm Control Panel" -description: "Instructions how to integrate SimpliSafe into Home Assistant." +description: "Instructions on how to integrate SimpliSafe into Home Assistant." date: 2016-07-02 22:00 sidebar: true comments: false diff --git a/source/_components/alarm_control_panel.spc.markdown b/source/_components/alarm_control_panel.spc.markdown index 78e7066f00e..5cc4025f001 100644 --- a/source/_components/alarm_control_panel.spc.markdown +++ b/source/_components/alarm_control_panel.spc.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Vanderbilt SPC Alarm" -description: "Instructions how to setup the Vanderbilt SPC Alarm control panel within Home Assistant." +description: "Instructions on how to setup the Vanderbilt SPC Alarm control panel within Home Assistant." date: 2017-05-18 22:01 sidebar: true comments: false diff --git a/source/_components/alarm_control_panel.totalconnect.markdown b/source/_components/alarm_control_panel.totalconnect.markdown index 668b7492054..203d53a5c04 100644 --- a/source/_components/alarm_control_panel.totalconnect.markdown +++ b/source/_components/alarm_control_panel.totalconnect.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Honeywell TotalConnect Alarm Control Panel" -description: "Instructions how to integrate TotalConnect alarms into Home Assistant." +description: "Instructions on how to integrate TotalConnect alarms into Home Assistant." date: 2017-04-02 22:00 sidebar: true comments: false @@ -34,3 +34,27 @@ Configuration variables: - **username** (*Required*): Username used to sign into the TotalConnect app/web client. - **password** (*Required*): Password used to sign into the TotalConnect app/web client. +Automation example: + +```yaml +automation: + - alias: "Alarm: Disarmed Daytime" + trigger: + platform: state + entity_id: alarm_control_panel.total_connect + to: 'disarmed' + condition: + condition: sun + before: sunset + action: + service: scene.turn_on + entity_id: scene.OnDisarmedDaytime + - alias: "Alarm: Armed Away" + trigger: + platform: state + entity_id: alarm_control_panel.total_connect + to: 'armed_away' + action: + service: scene.turn_on + entity_id: scene.OnArmedAway +``` diff --git a/source/_components/alarm_control_panel.verisure.markdown b/source/_components/alarm_control_panel.verisure.markdown index 0c06294c3ec..669de867612 100644 --- a/source/_components/alarm_control_panel.verisure.markdown +++ b/source/_components/alarm_control_panel.verisure.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Verisure Alarm" -description: "Instructions how to setup the Verisure Alarm control panel within Home Assistant." +description: "Instructions on how to setup the Verisure Alarm control panel within Home Assistant." date: 2016-02-15 22:00 sidebar: true comments: false diff --git a/source/_components/alarm_control_panel.wink.markdown b/source/_components/alarm_control_panel.wink.markdown index 032bbd3cb36..e6fee5cdb50 100644 --- a/source/_components/alarm_control_panel.wink.markdown +++ b/source/_components/alarm_control_panel.wink.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Wink Alarm" -description: "Instructions how to setup the Wink alarms within Home Assistant." +description: "Instructions on how to setup the Wink alarms within Home Assistant." date: 2017-01-14 12:00 sidebar: true comments: false diff --git a/source/_components/alarmdecoder.markdown b/source/_components/alarmdecoder.markdown index 82beb4b5e62..ae81c2cf1f5 100644 --- a/source/_components/alarmdecoder.markdown +++ b/source/_components/alarmdecoder.markdown @@ -20,7 +20,7 @@ Please visit the [AlarmDecoder website](https://www.alarmdecoder.com/) for furth There is currently support for the following device types within Home Assistant: - [Binary Sensor](/components/binary_sensor.alarmdecoder/): Reports on zone status -- [Sensor](/components/sensor.alarmdecoder/): Emulates an keypad display +- [Sensor](/components/sensor.alarmdecoder/): Emulates a keypad display - [Alarm Control Panel](/components/alarm_control_panel.alarmdecoder/): Reports on alarm status, and can be used to arm/disarm the system This is a fully event-based component. Any event sent by the AlarmDecoder device will be immediately reflected within Home Assistant. @@ -39,6 +39,7 @@ alarmdecoder: 01: name: 'Smoke Detector' type: 'smoke' + rfid: '0123456' 02: name: 'Front Door' type: 'opening' @@ -53,3 +54,6 @@ Configuration variables: - **baudrate** (*Optional*): The baud rate of the AlarmDecoder device, if using serial type. Default: `115200` - **panel_display** (*Optional*): Create a sensor called sensor.alarm_display to match the Alarm Keypad display. Default: `off` - **zones** (*Optional*): AlarmDecoder has no way to tell us which zones are actually in use, so each zone must be configured in Home Assistant. For each zone, at least a name must be given. For more information on the available zone types, take a look at the [Binary Sensor](/components/binary_sensor.alarmdecoder/) docs. *Note: If no zones are specified, Home Assistant will not load any binary_sensor components.* +- **rfid** (*Optional*): The RF serial-number associated with RF zones. Providing this field allows Home Assistant to associate raw sensor data to a given zone, allowing direct monitoring of the state, battery, and supervision status. +- **relayaddr** (*Optional*): Address of the relay expander board to associate with the zone. (ex: 12, 13, 14, or 15). Typically used in cases where a panel will not send bypassed zones such as motion during an armed home state, the Vista 20P is an example of this. Alarmdecoder can emulate a zone expander board and the panel can be programmed to push zone events to this virtual expander. This allows the bypassed zone binary sensors to be utilized. One example is using bypassed motion sensors at night for motion-based automated lights while the system is armed with the motion sensor bypassed. +- **relaychan** (*Optional*): Channel of the relay expander board to associate with the zone. (ex: 1, 2, 3, or 4) diff --git a/source/_components/alert.markdown b/source/_components/alert.markdown index acdf983305f..e1af527f5f2 100644 --- a/source/_components/alert.markdown +++ b/source/_components/alert.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Alert" -description: "Instructions how to setup automatic alerts within Home Assistant." +description: "Instructions on how to setup automatic alerts within Home Assistant." date: 2017-01-15 20:00 sidebar: true comments: false @@ -16,7 +16,9 @@ The `alert` component is designed to notify you when problematic issues arise. F Alerts will add an entity to the front end only when they are firing. This entity allows you to silence an alert until it is resolved. +

When using the `alert` component, it is important that the time zone used for Home Assistant and the underlying operating system match. Failing to do so may result in multiple alerts being sent at the same time (such as when Home Assistant is set to the `America/Detroit` time zone but the operating system uses `UTC`). +

### {% linkable_title Basic Example %} diff --git a/source/_components/alexa.markdown b/source/_components/alexa.markdown index bccf44f2e77..23c8bc9c86d 100644 --- a/source/_components/alexa.markdown +++ b/source/_components/alexa.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Alexa / Amazon Echo" -description: "Instructions how to connect Alexa/Amazon Echo to Home Assistant." +description: "Instructions on how to connect Alexa/Amazon Echo to Home Assistant." date: 2015-12-13 13:02 sidebar: true comments: false @@ -10,13 +10,18 @@ footer: true logo: amazon-echo.png ha_category: Voice featured: true -ha_release: 0.10 +ha_release: '0.10' --- +

+ Use [Home Assistant Cloud](/components/cloud/) to integrate with Alexa without any effort. +

+ There are a few ways that you can use Amazon Echo and Home Assistant together. - [Build custom commands to use](#i-want-to-build-custom-commands-to-use-with-echo) - [Create a new Flash Briefing source](#flash-briefing-skills) +- [Use the Smart Home API to control lights, etc](#smart-home) - Alternative: use the [Emulated Hue component][emulated-hue-component] to trick Alexa to thinking Home Assistant is a Philips Hue hub. Amazon has released [Echosim], a website that simulates the Alexa service in your browser. That way it is easy to test your skills without having access to a physical Amazon Echo. @@ -41,7 +46,7 @@ Additionally, note that at the time of this writing, your Alexa skill endpoint * OR 2. Change your Home Assistant serving port to 443 this is done in the [`http`](/components/http/) section with the `server_port` entry in your `configuration.yaml` file -[blog-lets-encrypt]: https://home-assistant.io/blog/2015/12/13/setup-encryption-using-lets-encrypt/ +[blog-lets-encrypt]: /blog/2015/12/13/setup-encryption-using-lets-encrypt/ To get started with Alexa skills: @@ -162,7 +167,7 @@ intent_script: text: OK ``` -Here we are using [templates] to take the name we gave to Alexa e.g. `downstairs on` and replace the space with an underscore so it becomes `downstairs_on` as Home Assistant expects. +Here we are using [templates] to take the name we gave to Alexa e.g., `downstairs on` and replace the space with an underscore so it becomes `downstairs_on` as Home Assistant expects. Now say `Alexa ask Home Assistant to activate ` and Alexa will activate that scene for you. @@ -325,9 +330,53 @@ Please refer to the [Amazon documentation][flash-briefing-api-docs] for more inf - All other settings are up to you - Hit "Next" - Test - - Having passed all validations to reach this screen, you can now click on "< Back to All Skills" as your flash briefing is now available as in "Development" service. + - Having passed all validations to reach this screen, you can now click on "< Back to All Skills" as your flash briefing is now available as in "Development" service. - To invoke your flash briefing, open the Alexa app on your phone or go to the [Alexa Settings Site][alexa-settings-site], open the "Skills" configuration section, select "Your Skills", scroll to the bottom, tap on the Flash Briefing Skill you just created, enable it, then manage Flash Briefing and adjust ordering as necessary. Finally ask your Echo for your "news","flash briefing", or "briefing". + +## {% linkable_title Smart Home %} + +While the Skills API described above allows for arbitrary intents, all +utterances must begin with "Alexa, tell $invocation_name ..." + +The [Emulated Hue component][emulated-hue-component] provides a simpler +interface such as, "Alexa, turn on the kitchen light". However it has some +limitations since everything looks like a light bulb. + +Amazon provides a Smart Home API for richer home automation control. It takes +considerable effort to configure. The easy solution is to use +[Home Assistant Cloud](/components/cloud/). + +If you don't want to use Home Assistant Cloud and are willing to do the +integration work yourself, Home Assistant can expose an HTTP API which makes +the integration work easier. Example configuration: + +```yaml +alexa: + smart_home: + filter: + include_entities: + - light.kitchen + - light.kitchen_left + include_domains: + - switch + exclude_entities: + - switch.outside + entity_config: + light.kitchen: + name: Custom Name for Alexa + description: The light in the kitchen + switch.stairs: + display_categories: LIGHT +``` + +This exposes an HTTP POST endpoint at `http://your_hass_ip/api/alexa/smart_home` +which accepts and returns messages conforming to the +[Smart Home v3 payload](https://developer.amazon.com/docs/smarthome/smart-home-skill-api-message-reference.html). +You must then create an Amazon developer account with an Alexa skill and Lambda +function to integrate this endpoint. See +[Haaska](https://github.com/mike-grant/haaska) for an example. + [amazon-dev-console]: https://developer.amazon.com [flash-briefing-api]: https://developer.amazon.com/alexa-skills-kit/flash-briefing [flash-briefing-api-docs]: https://developer.amazon.com/public/solutions/alexa/alexa-skills-kit/docs/flash-briefing-skill-api-feed-reference diff --git a/source/_components/amcrest.markdown b/source/_components/amcrest.markdown index c910e10647e..9c0aad4929e 100644 --- a/source/_components/amcrest.markdown +++ b/source/_components/amcrest.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Amcrest IP Camera" -description: "Instructions how to integrate Amcrest IP cameras within Home Assistant." +description: "Instructions on how to integrate Amcrest IP cameras within Home Assistant." date: 2017-06-24 10:00 sidebar: true comments: false @@ -13,23 +13,28 @@ ha_iot_class: "Local Polling" ha_release: 0.49 --- -The `amcrest` platform allows you to integrate your [Amcrest](https://amcrest.com/) IP camera in Home Assistant. +The `amcrest` camera platform allows you to integrate your [Amcrest](https://amcrest.com/) IP camera in Home Assistant. + +## {% linkable_title Configuration %} To enable your camera in your installation, add the following to your `configuration.yaml` file: ```yaml # Example configuration.yaml entry amcrest: - - host: IP_ADDRESS - username: USERNAME - password: PASSWORD + - host: IP_ADDRESS_CAMERA_1 + username: YOUR_USERNAME + password: YOUR_PASSWORD sensors: - motion_detector - sdcard + switches: + - motion_detection + - motion_recording - - host: IP_ADDRESS - username: USERNAME - password: PASSWORD + - host: IP_ADDRESS_CAMERA_2 + username: YOUR_USERNAME + password: YOUR_PASSWORD resolution: low stream_source: snapshot sensors: @@ -45,18 +50,21 @@ Configuration variables: - **port** (*Optional*): The port that the camera is running on. The default is 80. - **resolution** (*Optional*): This parameter allows you to specify the camera resolution. For a high resolution (1080/720p), specify the option `high`. For VGA resolution (640x480p), specify the option `low`. If omitted, it defaults to *high*. - **stream_source** (*Optional*): The data source for the live stream. `mjpeg` will use the camera's native MJPEG stream, whereas `snapshot` will use the camera's snapshot API to create a stream from still images. You can also set the `rtsp` option to generate the streaming via RTSP protocol. If omitted, it defaults to *snapshot*. -- **ffmpeg_arguments**: (*Optional*): Extra options to pass to ffmpeg, e.g. image quality or video filter options. +- **ffmpeg_arguments**: (*Optional*): Extra options to pass to ffmpeg, e.g., image quality or video filter options. - **authentication**: (*Optional*): Defines which authentication method to use only when **stream_source** is **mjpeg**. Currently, *aiohttp* only support *basic*. It defaults to *basic*. - **scan_interval** (*Optional*): Defines the update interval of the sensor in seconds. The default is 10 seconds. - **sensors** array (*Optional*): Conditions to display in the frontend. By default, *none* of the conditions are enabled. The following conditions can be monitored. - **motion_detector**: Return True/False when a motion is detected - **sdcard**: Return the SD card usage by reporting the total and used space - **ptz_preset**: Return the number of PTZ preset positions configured for the given camera +- **switches** array (*Optional*): Switches to display in the frontend. By default, *none* of the switches are shown. The following switches can be monitored. + - **motion_detection**: Enable/disable motion detection setting + - **motion_recording**: Enable/disable recording on motion detection setting **Note:** Amcrest cameras with newer firmware no longer have the ability to stream `high` definition video with MJPEG encoding. You may need to use `low` resolution stream or the `snapshot` stream source instead. If the quality seems too poor, lower the `Frame Rate (FPS)` and max out the `Bit Rate` settings in your camera's configuration manager. If you defined the *stream_source* to **mjpeg**, make sure your camera supports *Basic* HTTP authentication. Newer Amcrest firmware may not work, then **rtsp** is recommended instead. **Note:** If you set the `stream_source` option to `rtsp`, make sure to follow the steps mentioned at -[FFMPEG](https://home-assistant.io/components/ffmpeg/) documentation to install the `ffmpeg`. +[FFMPEG](/components/ffmpeg/) documentation to install the `ffmpeg`. Finish its configuration by visiting the [Amcrest sensor page](/components/sensor.amcrest/) or [Amcrest camera page](/components/camera.amcrest/). diff --git a/source/_components/android_ip_webcam.markdown b/source/_components/android_ip_webcam.markdown index 5a62ccefdeb..c616b33a35e 100644 --- a/source/_components/android_ip_webcam.markdown +++ b/source/_components/android_ip_webcam.markdown @@ -48,6 +48,9 @@ Sensors: - light - motion - pressure +- proximity +- sound +- video_connections Settings (Switches): @@ -76,6 +79,9 @@ android_ip_webcam: - light - motion - pressure + - proximity + - sound + - video_connections switches: - exposure_lock - ffc diff --git a/source/_components/api.markdown b/source/_components/api.markdown new file mode 100644 index 00000000000..ba1097738e9 --- /dev/null +++ b/source/_components/api.markdown @@ -0,0 +1,25 @@ +--- +layout: page +title: "API" +description: "Instructions on how to setup the RESTful API within Home Assistant." +date: 2018-01-21 08:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: home-assistant.png +ha_category: "Other" +--- + +The `api` component exposes a RESTful API and allows one to interact with a Home Assistant instance that is running headless. This component depends on the [`http` component](/components/http/). + +

+It is HIGHLY recommended that you set the `api_password`, especially if you are planning to expose your installation to the internet. +

+ +```yaml +# Example configuration.yaml entry +api: +``` + +For details to use the API, please refer to the [REST API](/developers/rest_api/) or the [Python REST API documentation](/developers/python_api/) in the "Developer" section. diff --git a/source/_components/apple_tv.markdown b/source/_components/apple_tv.markdown index 5709958530d..93d192a00c2 100644 --- a/source/_components/apple_tv.markdown +++ b/source/_components/apple_tv.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Apple TV" -description: "Instructions how to integrate Apple TV devices into Home Assistant." +description: "Instructions on how to integrate Apple TV devices into Home Assistant." date: 2017-06-26 20:47 sidebar: true comments: false @@ -13,7 +13,7 @@ ha_iot_class: "Local Push" ha_release: 0.49 --- -The `apple_tv` platform allows you to control an Apple TV (3rd and 4th generation). See the [remote platform](/components/remote.apple_tv/) if you want to send remote control buttons, e.g. arrow keys. +The `apple_tv` platform allows you to control an Apple TV (3rd and 4th generation). See the [remote platform](/components/remote.apple_tv/) if you want to send remote control buttons, e.g., arrow keys.

Currently, you must have Home Sharing enabled for this to work. Support for pairing Home Assistant with your device will be supported in a later release. @@ -56,7 +56,9 @@ In order to connect to the device, you need a *login id*. The easiest way to obt ### {% linkable_title Scanning for devices %} -To scan for devices, press the icon in the upper left corner and select the leftmost icon according to the image: +Make sure Home Sharing is enabled on the Apple TV. + +To scan for devices and determine the `login_id`, press the icon in the upper left corner and select the leftmost icon according to the image: @@ -78,26 +80,7 @@ Found Apple TVs: Note: You must use 'pair' with devices that have home sharing disabled ``` -Just copy and paste the login id from the device you want to add. For more details about `atvremote`, see: [this page](http://pyatv.readthedocs.io/en/master/atvremote.html). - -### {% linkable_title My Apple TV turns on when I restart Home Assistant %} - -The Apple TV will automatically turn on if a request is sent to it, e.g., if a button is pressed, something is streamed to it via AirPlay or if current state (currently playing) is accessed. This is how Apple has designed it, and it will cause problems if you are using HDMI CEC. Every time Home Assistant is started, a new request is sent to the device to figure out what is currently playing. When using CEC, this will wake up your TV and other devices you have configured. - -So, if your TV is randomly turning on, this is probably the reason. As stated, this is by design, and there is no real fix for it. There's also no known way to turn off the Apple TV via the protocol used for communication. You have the following options: - -- Do not use this platform -- Disable HDMI CEC on your Apple TV -- Use "fake standby" - -The first two points are quite obvious. Fake standby is a concept implemented in this platform that disables all requests to the device and makes it appear as being "off" in the web interface. This will make sure that the device is not woken up, but it will of course not show any information or allow you to control it. It is however easy to turn it on (or off) in the web interface or to use an automation with `turn_on`. To make it more useful, you can write automations that turn it on or off depending on some other device, like the input source on your receiver. - -To put a device into fake standby when starting Home Assistant, add `start_off: true` to your configuration. - -

-Turning the device on/off in the user interface will *not* turn the physical device on/off according to the description above. -

- +Just copy and paste the `login_id` from the device you want to add. For more details about `atvremote`, see: [this page](http://pyatv.readthedocs.io/en/master/atvremote.html). ### {% linkable_title Setting up device authentication %} @@ -109,7 +92,7 @@ then device authentication is required. Press the icon in the upper left corner -Select `apple_tv` as domain, `apple_tv_authenticate` as service and enter `{"entity_id": "XXX"}` into "Service Data", but replace XXX with the entity id of your device (e.g. `media_player.apple_tv`). Press the button and hopefully you are presented with an input dialog asking for a pin code: +Select `apple_tv` as domain, `apple_tv_authenticate` as service and enter `{"entity_id": "XXX"}` into "Service Data", but replace XXX with the entity id of your device (e.g., `media_player.apple_tv`). Press the button and hopefully you are presented with an input dialog asking for a pin code: @@ -129,6 +112,24 @@ apple_tv: Restart Home Assistant, and you should now be able to use `play_url` as before. +### {% linkable_title My Apple TV turns on when I restart Home Assistant %} + +The Apple TV will automatically turn on if a request is sent to it, e.g., if a button is pressed, something is streamed to it via AirPlay or if current state (currently playing) is accessed. This is how Apple has designed it, and it will cause problems if you are using HDMI CEC. Every time Home Assistant is started, a new request is sent to the device to figure out what is currently playing. When using CEC, this will wake up your TV and other devices you have configured. + +So, if your TV is randomly turning on, this is probably the reason. As stated, this is by design, and there is no real fix for it. There's also no known way to turn off the Apple TV via the protocol used for communication. You have the following options: + +- Do not use this platform +- Disable HDMI CEC on your Apple TV +- Use "fake standby" + +The first two points are quite obvious. Fake standby is a concept implemented in this platform that disables all requests to the device and makes it appear as being "off" in the web interface. This will make sure that the device is not woken up, but it will of course not show any information or allow you to control it. It is however easy to turn it on (or off) in the web interface or to use an automation with `turn_on`. To make it more useful, you can write automations that turn it on or off depending on some other device, like the input source on your receiver. + +To put a device into fake standby when starting Home Assistant, add `start_off: true` to your configuration. + +

+Turning the device on/off in the user interface will *not* turn the physical device on/off according to the description above. +

+ ## {% linkable_title Services %} ### {% linkable_title Service `apple_tv_authenticate` %} @@ -142,4 +143,3 @@ To play media on an Apple TV with device authentication enabled (e.g., ATV4 with ### {% linkable_title Service `apple_tv_scan` %} Scans the local network for Apple TVs. All found devices are presented as a persistent notification. - diff --git a/source/_components/arduino.markdown b/source/_components/arduino.markdown index 5105f19c4cc..ca16dd32b75 100644 --- a/source/_components/arduino.markdown +++ b/source/_components/arduino.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Arduino" -description: "Instructions how to setup an Arduino boards within Home Assistant." +description: "Instructions on how to setup an Arduino boards within Home Assistant." date: 2015-06-27 10:28 sidebar: true comments: false @@ -43,7 +43,7 @@ The exact number can be determined with the command shown below. $ ls /dev/ttyACM* ``` -If that's not working, check your `dmesg` or `journalctl -f` output. Keep in mind that Arduino clones are often using a different name for the port (e.g. `/dev/ttyUSB*`). +If that's not working, check your `dmesg` or `journalctl -f` output. Keep in mind that Arduino clones are often using a different name for the port (e.g., `/dev/ttyUSB*`).

A word of caution: The Arduino boards are not storing states. This means that with every initialization the pins are set to off/low. diff --git a/source/_components/arlo.markdown b/source/_components/arlo.markdown index 479a7713293..a95acd4999e 100644 --- a/source/_components/arlo.markdown +++ b/source/_components/arlo.markdown @@ -15,29 +15,41 @@ ha_iot_class: "Cloud Polling" The `arlo` implementation allows you to integrate your [Arlo](https://arlo.netgear.com/) devices in Home Assistant. +## {% linkable_title Configuration %} + To enable device linked in your [Arlo](https://arlo.netgear.com/) account, add the following to your `configuration.yaml` file: ```yaml # Example configuration.yaml entry arlo: - username: you@example.com - password: secret + username: YOUR_USERNAME + password: YOUR_PASSWORD ``` -Configuration variables: - -- **username** (*Required*): The username for accessing your Arlo account. -- **password** (*Required*): The password for accessing your Arlo account. +{% configuration %} +username: + description: The username for accessing your Arlo account. + required: true + type: string +password: + description: The password for accessing your Arlo account. + required: true + type: string +scan_interval: + description: How frequently to query for new data. Defaults to 60 seconds. + required: false + type: int +{% endconfiguration %} It is recommended to create a dedicated user on Arlo website to be used within Home Assistant and then share your Arlo cameras. -Finish its configuration by visiting the [Arlo sensor page](/components/sensor.arlo/) or [Arlo camera page](/components/camera.arlo/) or [Arlo control panel page](/components/alarm_control_panel.arlo/). +Finish its configuration by visiting the [Arlo sensor page](/components/sensor.arlo/) or [Arlo camera page](/components/camera.arlo/) or [Arlo control panel page](/components/alarm_control_panel.arlo/). Arlo also has a service call `arlo.update` that can be manually called to force an update prior to the regular scheduled interval. -The Arlo component also provides a service to enable/disable the motion detection sensor. The example below enables the motion detection every time the Home Assistant service starts. +The Arlo component also provides a camera service to enable/disable the motion detection sensor. The example below enables the motion detection every time the Home Assistant service starts. ```yaml #automation.yaml -- alias: Enable Arlo upton HA start' +- alias: Enable Arlo upon HA start' initial_state: 'on' trigger: platform: homeassistant diff --git a/source/_components/asterisk_mbox.markdown b/source/_components/asterisk_mbox.markdown index d0d7ba72fe2..f040acd99bb 100644 --- a/source/_components/asterisk_mbox.markdown +++ b/source/_components/asterisk_mbox.markdown @@ -1,42 +1,51 @@ --- layout: page title: "Asterisk Voicemail" -description: "Instructions how to integrate your existing Asterisk voicemail within Home Assistant." +description: "Instructions on how to integrate your existing Asterisk voicemail within Home Assistant." date: 2017-06-30 18:30 sidebar: true comments: false sharing: true footer: true +logo: asterisk.png ha_category: Other -ha_version: 0.51 ha_iot_class: "Local Push" +ha_release: 0.51 --- -The Asterisk Voicemail integration for Home Assistant allows you to view, listen to, and delete voicemails from an Asterisk voicemail mailbox. The component includes a panel on the frontend that provides caller-id and speech-to-text transcription (using Google's API) of messages in addition to playback and message deletion. There is also an included sensor that indicates of the number of available messages. There is no requirement that the Asterisk PBX and Home Assistant are running on the same machine. +The `asterisk_mbox` Asterisk Voicemail integration for Home Assistant allows you to view, listen to, and delete voicemails from an Asterisk voicemail mailbox. The component includes a panel on the frontend that provides caller-id and speech-to-text transcription (using Google's API) of messages in addition to playback and message deletion. There is also an included sensor that indicates of the number of available messages. There is no requirement that the Asterisk PBX and Home Assistant are running on the same machine. To enable the component, a configuration is required in both Home Assistant as well as on the Asterisk server. -First follow the [Asterisk PBX configuration guide](/docs/asterisk_mbox) to setup the necessary server on the Asterisk PBX server (this is needed even if Asterisk and Home Assistant are running on the same server) +First follow the [Asterisk PBX configuration guide](/docs/asterisk_mbox/) to setup the necessary server on the Asterisk PBX server (this is needed even if Asterisk and Home Assistant are running on the same server) Once that is complete, add the following entry `configuration.yaml` file: ```yaml # Example configuration.yaml entry asterisk_mbox: - password: ASTERISK_PBX_PASSWORD - host: ASTERISK_PBX_SERVER_IP_ADDRESS - port: ASTERISK_PBX_SERVER_PORT + password: ASTERISK_PBX_PASSWORD + host: ASTERISK_PBX_SERVER_IP_ADDRESS + port: ASTERISK_PBX_SERVER_PORT ``` This will add a new 'Mailbox' side-panel, as well as a sensor to indicate # of messages available. -Configuration variables: - -- **password** (*Required*): The password that was set during Asterisk PBX configuration -- **host** (*Required*): The ip-address of the server that is running the Asterisk PBX -- **port** (*Required*): The port on the Asterisk PBX server that was configured during Asterisk PBX configuration +{% configuration %} +password: + description: The password that was set during Asterisk PBX configuration + required: true + type: string +host: + description: The ip-address of the server that is running the Asterisk PBX + required: true + type: string +port: + description: The port on the Asterisk PBX server that was configured during Asterisk PBX configuration + required: true + type: string +{% endconfiguration %}

Communication between the Asterisk PBX server and the Home Assistant server is password-protected, but the data transmission is not encrypted. It is recommended to only use this component when communication is contained within a local area network.

- diff --git a/source/_components/august.markdown b/source/_components/august.markdown new file mode 100644 index 00000000000..818002e14c7 --- /dev/null +++ b/source/_components/august.markdown @@ -0,0 +1,56 @@ +--- +layout: page +title: "August" +description: "Instructions on how to integrate your August devices into Home Assistant." +date: 2018-02-17 22:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: august.png +ha_category: Hub +ha_release: "0.64" +ha_iot_class: "Cloud Polling" +--- + +The `august` component allows you to integrate your [August](http://august.com) devices in Home Assistant. Currently this component supports August Lock and Doorbell. + +

+August Lock 2nd Gen will need either August Connect or Doorbell to connect to Home Assistant. +

+ +## {% linkable_title Configuration %} + +You will need your August login information (username (either phone# or email), and password) to use this module. + +To set it up, add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +august: + login_method: phone + username: "+16041234567" + password: YOUR_PASSWORD +``` + +{% configuration %} +login_method: + description: Method to login to your August account, either "email" or "phone". A verification code will be sent to your email or phone during setup. + required: true + type: string +username: + description: The username for accessing your August account. This depends on your login_method, if login_method is email, this will be your email of the account. Otherwise, this will be your phone number. + required: true + type: string +password: + description: The password for accessing your August account. + required: true + type: string +timeout: + description: Timeout to wait for connections. + required: false + type: int + default: 10 +{% endconfiguration %} + +Once Home Assistant is started, a configurator will pop up asking you to enter verification code that is sent to your phone number or email. diff --git a/source/_components/auth.markdown b/source/_components/auth.markdown new file mode 100644 index 00000000000..96d0ab055a2 --- /dev/null +++ b/source/_components/auth.markdown @@ -0,0 +1,15 @@ +--- +layout: page +title: "Auth" +description: "This component is responsible for providing the authentication endpoints." +date: 2018-03-19 21:04 +sidebar: true +comments: false +sharing: true +footer: true +logo: home-assistant.png +ha_category: Other +ha_release: 0.73 +--- + +This component creates the endpoints for the authentication system that is built into Home Assistant. There are no configuration options for this component directly as it relies on the auth system in the core. diff --git a/source/_components/automation.markdown b/source/_components/automation.markdown index 181d28ba123..658c0ebc63c 100644 --- a/source/_components/automation.markdown +++ b/source/_components/automation.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Automation" -description: "Instructions how to setup automation within Home Assistant." +description: "Instructions on how to setup automation within Home Assistant." date: 2015-01-20 22:36 sidebar: true comments: false @@ -19,7 +19,7 @@ Starting with 0.28 your automation rules can be controlled with the frontend.

-This allows one to reload the automation without restarting Home Assistant itself. If you don't want to see the automation rule in your frontend use `hide_entity: True` to hide it. You can also use `initial_state: 'off'` so that the automation is not automatically turned on after a Home assistant reboot. +This allows one to reload the automation without restarting Home Assistant itself. If you don't want to see the automation rule in your frontend use `hide_entity: True` to hide it. You can also use `initial_state: 'off'` so that the automation is not automatically turned on after a Home Assistant reboot. ```yaml automation: diff --git a/source/_components/axis.markdown b/source/_components/axis.markdown index a23a97c2dfc..6f9a2cc4826 100644 --- a/source/_components/axis.markdown +++ b/source/_components/axis.markdown @@ -68,10 +68,6 @@ axis: location: köket ``` -

-If you are using Python 3.6, you might need to replace the 34m with 36m in the _gi.*.so filename in the gi folder. -

-

Any specific levels for triggers needs to be configured on the device.

diff --git a/source/_components/bbb_gpio.markdown b/source/_components/bbb_gpio.markdown index ab6a13d94e8..785aec4f2df 100644 --- a/source/_components/bbb_gpio.markdown +++ b/source/_components/bbb_gpio.markdown @@ -1,7 +1,7 @@ --- layout: page title: "BeagleBone Black GPIO" -description: "Instructions how to integrate the GPIO capability of a BeagleBone Black into Home Assistant." +description: "Instructions on how to integrate the GPIO capability of a BeagleBone Black into Home Assistant." date: 2017-01-14 10:00 sidebar: true comments: false diff --git a/source/_components/binary_sensor.abode.markdown b/source/_components/binary_sensor.abode.markdown index 14e8e14533a..def5cabb192 100644 --- a/source/_components/binary_sensor.abode.markdown +++ b/source/_components/binary_sensor.abode.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Abode Binary Sensor" -description: "Instructions how to integrate Abode binary sensors into Home Assistant." +description: "Instructions on how to integrate Abode binary sensors into Home Assistant." date: 2017-08-26 0:28 sidebar: true comments: false diff --git a/source/_components/binary_sensor.ads.markdown b/source/_components/binary_sensor.ads.markdown new file mode 100644 index 00000000000..753858d9737 --- /dev/null +++ b/source/_components/binary_sensor.ads.markdown @@ -0,0 +1,41 @@ +--- +layout: page +title: "ADS Binary Sensor" +description: "Instructions on how to set up ADS binary sensors within Home Assistant." +date: 2017-10-25 10:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: beckhoff.png +ha_category: Binary Sensor +ha_release: "0.60" +ha_iot_class: "Local Push" +--- + +The `ads` binary sensor platform can be used to monitor a boolean value on your ADS device. + +To use your ADS device, you first have to set up your [ADS hub](/components/ads/) and then add the following to your `configuration.yaml` +file: + +```yaml +# Example configuration.yaml entry +binary_sensor: + - platform: ads + adsvar: .boolean1 +``` + +{% configuration %} + adsvar: + required: true + description: The name of the variable which you want to access on the ADS device. + type: string + name: + required: false + description: An identifier for the light in the frontend. + type: string + device_class: + required: false + description: The [type/class](/components/binary_sensor/) of the sensor to set the icon in the frontend. + type: string +{% endconfiguration %} diff --git a/source/_components/binary_sensor.alarmdecoder.markdown b/source/_components/binary_sensor.alarmdecoder.markdown index 1bfbd1be9f1..92cfa7fa4e1 100644 --- a/source/_components/binary_sensor.alarmdecoder.markdown +++ b/source/_components/binary_sensor.alarmdecoder.markdown @@ -1,7 +1,7 @@ --- layout: page title: "AlarmDecoder Binary Sensor" -description: "Instructions how to integrate AlarmDecoder binary sensors into Home Assistant." +description: "Instructions on how to integrate AlarmDecoder binary sensors into Home Assistant." date: 2017-04-02 13:28 sidebar: true comments: false diff --git a/source/_components/binary_sensor.android_ip_webcam.markdown b/source/_components/binary_sensor.android_ip_webcam.markdown index 80775c3b2e6..0c5c2abbe87 100644 --- a/source/_components/binary_sensor.android_ip_webcam.markdown +++ b/source/_components/binary_sensor.android_ip_webcam.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Android IP Webcam Binary Sensor" -description: "Instructions how to integrate binary motion sensors for Android IP webcam within Home Assistant." +description: "Instructions on how to integrate binary motion sensors for Android IP webcam within Home Assistant." date: 2017-03-10 00:00 sidebar: true comments: false diff --git a/source/_components/binary_sensor.arest.markdown b/source/_components/binary_sensor.arest.markdown index a03c972e7b8..d18a2d321a7 100644 --- a/source/_components/binary_sensor.arest.markdown +++ b/source/_components/binary_sensor.arest.markdown @@ -1,7 +1,7 @@ --- layout: page title: "aREST Binary Sensor" -description: "Instructions how to integrate aREST binary sensors within Home Assistant." +description: "Instructions on how to integrate aREST binary sensors within Home Assistant." date: 2015-11-20 18:15 sidebar: true comments: false @@ -14,7 +14,7 @@ ha_release: 0.9 --- -The `arest` binary sensor platform allows you to get all data from your devices (like Arduinos with a ethernet/wifi connection, the ESP8266, and the Raspberry Pi) running the [aREST](http://arest.io/) RESTful framework. +The `arest` binary sensor platform allows you to get all data from your devices (like Arduinos with an ethernet/wifi connection, the ESP8266, and the Raspberry Pi) running the [aREST](http://arest.io/) RESTful framework. To use your aREST binary sensor in your installation, add the following to your `configuration.yaml` file: @@ -28,7 +28,7 @@ binary_sensor: Configuration variables: -- **resource** (*Required*): IP address and schema of the device that is exposing an aREST API, e.g. http://192.168.1.10. +- **resource** (*Required*): IP address and schema of the device that is exposing an aREST API, e.g., http://192.168.1.10. - **pin** (*Required*): Number of the pin to monitor. - **name** (*Optional*): Let you overwrite the name of the device. By default *name* from the device is used. diff --git a/source/_components/binary_sensor.august.markdown b/source/_components/binary_sensor.august.markdown new file mode 100644 index 00000000000..be793af19b8 --- /dev/null +++ b/source/_components/binary_sensor.august.markdown @@ -0,0 +1,22 @@ +--- +layout: page +title: "August Binary Sensor" +description: "Instructions on how to integrate your August devices into Home Assistant." +date: 2018-02-17 22:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: august.png +ha_category: Binary Sensor +ha_release: "0.64" +ha_iot_class: "Cloud Polling" +--- + +To get your [August](http://august.com) doorbell binary sensors working within Home Assistant, please follow the instructions for the general [August component](/components/august/). + +If you have August Doorbell, once you have enabled the [August component](/components/august/), you should see following sensors: + +* Doorbell ding sensor +* Doorbell motion sensor +* Doorbell online sensor diff --git a/source/_components/binary_sensor.axis.markdown b/source/_components/binary_sensor.axis.markdown index 77ece6d1474..499739b0589 100644 --- a/source/_components/binary_sensor.axis.markdown +++ b/source/_components/binary_sensor.axis.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Axis Binary Sensor" -description: "Instructions how to integrate Axis binary sensors into Home Assistant." +description: "Instructions on how to integrate Axis binary sensors into Home Assistant." date: 2017-04-01 19:00 sidebar: true comments: false @@ -19,10 +19,9 @@ See the [Axis main component](/components/axis/) for configuration instructions. The following sensor types are supported: - - * Motion detection - * Passive IR motion detection - * Sound detection - * Day/night mode - * Tampering detection - * Input port +- Motion detection +- Passive IR motion detection +- Sound detection +- Day/night mode +- Tampering detection +- Input port diff --git a/source/_components/binary_sensor.bayesian.markdown b/source/_components/binary_sensor.bayesian.markdown index 0d2858e9829..ad52a8e85fd 100644 --- a/source/_components/binary_sensor.bayesian.markdown +++ b/source/_components/binary_sensor.bayesian.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Bayesian Binary Sensor" -description: "Instructions how to integrate threshold Bayesian sensors into Home Assistant." +description: "Instructions on how to integrate threshold Bayesian sensors into Home Assistant." date: 2017-08-27 20:05 sidebar: true comments: false diff --git a/source/_components/binary_sensor.bbb_gpio.markdown b/source/_components/binary_sensor.bbb_gpio.markdown index fbe724abf1f..be2a9bd9fb3 100644 --- a/source/_components/binary_sensor.bbb_gpio.markdown +++ b/source/_components/binary_sensor.bbb_gpio.markdown @@ -1,7 +1,7 @@ --- layout: page title: "BeagleBone Black GPIO Binary Sensor" -description: "Instructions how to integrate the GPIO sensor capability of a BeagleBone Black into Home Assistant." +description: "Instructions on how to integrate the GPIO sensor capability of a BeagleBone Black into Home Assistant." date: 2017-01-14 10:00 sidebar: true comments: false @@ -33,7 +33,7 @@ Configuration variables: - **pins** array (*Required*): Array of used pins. - **pin_name** (*Required*): Pin numbers and corresponding names. - **name** (*Required*): Friendly name to use for the frontend. - - **bouncetime** (*Optional*): Debounce time for reading input pin defined in miliseconds [ms]. Defaults to `50 ms`. + - **bouncetime** (*Optional*): Debounce time for reading input pin defined in milliseconds [ms]. Defaults to `50 ms`. - **invert_logic** (*Optional*): If `true`, inverts the input logic to ACTIVE LOW. Default is `false` (ACTIVE HIGH). - **pull_mode** (*Optional*): Type of internal pull resistor connected to input. Options are `UP` - pull-up resistor and `DOWN` - pull-down resistor. Defaults to `UP`. diff --git a/source/_components/binary_sensor.bmw_connected_drive.markdown b/source/_components/binary_sensor.bmw_connected_drive.markdown new file mode 100755 index 00000000000..74330ec5635 --- /dev/null +++ b/source/_components/binary_sensor.bmw_connected_drive.markdown @@ -0,0 +1,20 @@ +--- +layout: page +title: "BMW Connected Drive Binary Sensor" +description: "Instructions on how to setup your BMW Connected Drive account with Home Assistant." +date: 2018-02-22 23:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: bmw.png +ha_category: Binary Sensor +ha_release: 0.66 +--- + + +The `bmw_connected_drive` platform allows you to import data on your BMW into Home Assistant. + +The binary sensors will be automatically configured if `bmw_connected_drive` component is configured. + +For more configuration information see the [`bmw_connected_drive` component](/components/bmw_connected_drive/) documentation. diff --git a/source/_components/binary_sensor.command_line.markdown b/source/_components/binary_sensor.command_line.markdown index f966144470b..93769da9729 100644 --- a/source/_components/binary_sensor.command_line.markdown +++ b/source/_components/binary_sensor.command_line.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Command line Binary Sensor" -description: "Instructions how to integrate Command binary sensors within Home Assistant." +description: "Instructions on how to integrate Command binary sensors within Home Assistant." date: 2016-01-13 12:15 sidebar: true comments: false @@ -33,7 +33,8 @@ Configuration variables: - **payload_on** (*Optional*): The payload that represents enabled state. Default is "ON". - **payload_off** (*Optional*): The payload that represents disabled state. Default is "OFF". - **value_template** (*Optional*): Defines a [template](/docs/configuration/templating/#processing-incoming-data) to extract a value from the payload. -- **scan_interval** (*Optional*): Defines number of seconds for polling interval (defaults to 60 seconds). +- **scan_interval** (*Optional*): Defines number of seconds for polling interval (defaults to 60 seconds). +- **command_timeout** (*Optional*): Defines number of seconds for command timeout (defaults to 15 seconds). ## {% linkable_title Examples %} @@ -81,3 +82,27 @@ binary_sensor: ``` Consider to use the [`ping` sensor ](/components/binary_sensor.ping/) as an alternative to the samples above. + +### {% linkable_title Check if a system service is running %} + +The services running is listed in `/etc/systemd/system` and can be checked with the `systemctl` command: + +``` +$ systemctl is-active home-assistant@rock64.service +active +$ sudo service home-assistant@rock64.service stop +$ systemctl is-active home-assistant@rock64.service +inactive +``` + +A binary command line sensor can check this: + +```yaml +binary_sensor: + - platform: command_line + command: '/bin/systemctl is-active home-assistant@rock64.service' + payload_on: 'active' + payload_off: 'inactive' +``` + +Note: Use single quotes! diff --git a/source/_components/binary_sensor.concord232.markdown b/source/_components/binary_sensor.concord232.markdown index 4378b5fb149..39320bb6723 100644 --- a/source/_components/binary_sensor.concord232.markdown +++ b/source/_components/binary_sensor.concord232.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Concord232 Binary Sensor" -description: "Instructions how to integrate Interlogix/GE Concord4 binary sensors into Home Assistant." +description: "Instructions on how to integrate Interlogix/GE Concord4 binary sensors into Home Assistant." date: 2016-10-11 10:00 sidebar: true comments: false diff --git a/source/_components/binary_sensor.deconz.markdown b/source/_components/binary_sensor.deconz.markdown new file mode 100644 index 00000000000..f0499482838 --- /dev/null +++ b/source/_components/binary_sensor.deconz.markdown @@ -0,0 +1,35 @@ +--- +layout: page +title: "deCONZ Binary Sensor" +description: "Instructions on how to integrate Zigbee binary sensors from deCONZ into Home Assistant." +date: 2017-11-12 16:30 +sidebar: true +comments: false +sharing: true +footer: true +logo: deconz.jpeg +ha_category: Binary Sensor +ha_release: "0.61" +ha_iot_class: "Local Push" +--- + +See the [deCONZ main component](/components/deconz/) for configuration instructions. + +The following sensor types are supported: + + * Fire/Smoke detection + * Open/Close detection + * Presence detection + * Water leakage detection + +Entity ids will be binary_sensor.device_name, where device_name is defined in deCONZ. + +#### {% linkable_title Verified to be supported binary sensors %} + +- Open/Close Detection + - Xiaomi Smart Home Security Door & Window Contact Sensor +- Presence Detection + - IKEA Trådfri Motion Sensor + - Philips Hue Motion Sensor + - Xiaomi Motion Sensor + - Xiaomi Smart Home Aqara Human Body Sensor diff --git a/source/_components/binary_sensor.doorbird.markdown b/source/_components/binary_sensor.doorbird.markdown deleted file mode 100644 index b16dc68c5e9..00000000000 --- a/source/_components/binary_sensor.doorbird.markdown +++ /dev/null @@ -1,28 +0,0 @@ ---- -layout: page -title: "DoorBird Binary Sensor" -description: "Instructions how to integrate DoorBird video doorbell state into Home Assistant." -date: 2017-08-06 11:30 -sidebar: true -comments: false -sharing: true -footer: true -logo: doorbird.png -ha_category: Binary Sensor -ha_release: "0.54" -ha_iot_class: "Local Polling" ---- - -The `doorbird` binary sensor platform allows Home Assistant to monitor when your [DoorBird](http://www.doorbird.com/) doorbell rings. - -

- You must have the [DoorBird component](/components/doorbird/) configured to use this binary sensor. -

- -To enable the binary sensor, add the following to your `configuration.yaml` file: - -```yaml -# Example configuration.yaml entry -binary_sensor: - - platform: doorbird -``` diff --git a/source/_components/binary_sensor.ecobee.markdown b/source/_components/binary_sensor.ecobee.markdown index 189c943bf97..25f58c42cbc 100644 --- a/source/_components/binary_sensor.ecobee.markdown +++ b/source/_components/binary_sensor.ecobee.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Ecobee Binary Sensor" -description: "Instructions how to setup the Ecobee sensors within Home Assistant." +description: "Instructions on how to setup the Ecobee sensors within Home Assistant." date: 2015-11-30 18:00 sidebar: true comments: false diff --git a/source/_components/binary_sensor.egardia.markdown b/source/_components/binary_sensor.egardia.markdown new file mode 100644 index 00000000000..d418559f8e9 --- /dev/null +++ b/source/_components/binary_sensor.egardia.markdown @@ -0,0 +1,19 @@ +--- +layout: page +title: "Egardia Binary Sensor" +description: "Instructions on how to integrate Egardia / Woonveilig binary sensors into Home Assistant." +date: 2018-03-02 09:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: egardia.png +ha_release: 0.65 +ha_category: Binary Sensor +ha_iot_class: "Polling" +--- + +The `egardia` platform allows you to get data from your [Egardia](http://www.egardia.com)/[Woonveilig](http://www.woonveilig.nl) binary sensors from within Home Assistant. +Currently only door contacts are supported. IR sensors are not supported and will probably never be since their status cannot be read outside of the alarm control panel. Smoke sensors and others might be added but currently are not supported. + +You will need to set up your [Egardia hub](/components/egardia/). diff --git a/source/_components/binary_sensor.eight_sleep.markdown b/source/_components/binary_sensor.eight_sleep.markdown index fa949ae66e9..cf9f2c52bfd 100644 --- a/source/_components/binary_sensor.eight_sleep.markdown +++ b/source/_components/binary_sensor.eight_sleep.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Eight Sleep Binary Sensor" -description: "Instructions how to integrate binary motion sensors for Eight Sleep within Home Assistant." +description: "Instructions on how to integrate binary motion sensors for Eight Sleep within Home Assistant." date: 2017-04-24 00:00 sidebar: true comments: false diff --git a/source/_components/binary_sensor.enocean.markdown b/source/_components/binary_sensor.enocean.markdown index 32f3fc3340e..fe4ea3dd681 100644 --- a/source/_components/binary_sensor.enocean.markdown +++ b/source/_components/binary_sensor.enocean.markdown @@ -13,7 +13,13 @@ ha_release: 0.21 ha_iot_class: "Local Push" --- -This can typically be one of those batteryless wall switches. Currently only one type has been tested: Eltako FT55 which uses the EnOcean PTM 215 module. All switches using this module are expected to work. Other devices will most likely not work without changing the Home Assistant code. +This can typically be one of those batteryless wall switches. +Tested with: + +- Eltako FT55 which uses the EnOcean PTM 215 module +- [TRIO2SYS Wall switches](http://www.trio2sys.fr/index.php/fr/produits-enocean-sans-fil-sans-pile-interoperable/emetteur-sans-fils-sans-pile-interoperable-enocean) which uses the EnOcean PTM210 DB module + +All switches using theses modules are expected to work. Other devices will most likely not work without changing the Home Assistant code. To use your EnOcean device, you first have to set up your [EnOcean hub](/components/enocean/) and then add the following to your `configuration.yaml` file: diff --git a/source/_components/binary_sensor.envisalink.markdown b/source/_components/binary_sensor.envisalink.markdown index 6e56da0b94b..52735a8dbfd 100644 --- a/source/_components/binary_sensor.envisalink.markdown +++ b/source/_components/binary_sensor.envisalink.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Envisalink Binary Sensor" -description: "Instructions how to integrate Envisalink binary sensors into Home Assistant." +description: "Instructions on how to integrate Envisalink binary sensors into Home Assistant." date: 2016-07-01 08:00 sidebar: true comments: false diff --git a/source/_components/binary_sensor.ffmpeg_motion.markdown b/source/_components/binary_sensor.ffmpeg_motion.markdown index 453c76d7e01..6635bae9e69 100644 --- a/source/_components/binary_sensor.ffmpeg_motion.markdown +++ b/source/_components/binary_sensor.ffmpeg_motion.markdown @@ -42,7 +42,7 @@ Configuration variables: - **reset** (*Optional*): The time to reset the state after no new motion is detected. Defaults to 20 seconds. - **repeat** (*Optional*): How many events need to be detected in *repeat_time* in order to trigger a motion. Defaults to 0 repeats (deactivated). - **repeat_time** (*Optional*): The span of time *repeat* events need to occur in before triggering a motion. Defaults to 0 seconds (deactivated). -- **extra_arguments** (*Optional*): Extra options to pass to `ffmpeg`, e.g. video denoise filtering. +- **extra_arguments** (*Optional*): Extra options to pass to `ffmpeg`, e.g., video denoise filtering. To experiment with values (changes/100 is the scene value in `ffmpeg`): diff --git a/source/_components/binary_sensor.ffmpeg_noise.markdown b/source/_components/binary_sensor.ffmpeg_noise.markdown index 16b18761430..d68ec7d1630 100644 --- a/source/_components/binary_sensor.ffmpeg_noise.markdown +++ b/source/_components/binary_sensor.ffmpeg_noise.markdown @@ -39,7 +39,7 @@ Configuration variables: - **duration** (*Optional*): Default 1 second. How long the noise needs to be over the peak to trigger the state. - **reset** (*Optional*): Default 20 seconds. The time to reset the state after no new noise is over the peak. - **extra_arguments** (*Optional*): Extra options to pass to `ffmpeg`, like audio frequency filtering. -- **output** (*Optional*): Allows you to send the audio output of this sensor to an Icecast server or other FFmpeg-supported output, e.g. to stream with Sonos after a state is triggered. +- **output** (*Optional*): Allows you to send the audio output of this sensor to an Icecast server or other FFmpeg-supported output, e.g., to stream with Sonos after a state is triggered. To experiment with values: diff --git a/source/_components/binary_sensor.flic.markdown b/source/_components/binary_sensor.flic.markdown index 558c30b3a09..3767ed7476a 100644 --- a/source/_components/binary_sensor.flic.markdown +++ b/source/_components/binary_sensor.flic.markdown @@ -1,7 +1,7 @@ --- layout: page title: Flic Smart Button -description: "Instructions how to integrate flic buttons within Home Assistant." +description: "Instructions on how to integrate flic buttons within Home Assistant." date: 2016-12-02 22:03 sidebar: true comments: false diff --git a/source/_components/binary_sensor.gc100.markdown b/source/_components/binary_sensor.gc100.markdown index 3be8c013046..80d828723bd 100644 --- a/source/_components/binary_sensor.gc100.markdown +++ b/source/_components/binary_sensor.gc100.markdown @@ -1,7 +1,7 @@ --- layout: page title: gc100 Binary Sensor -description: "Instructions on how to set up an gc100 binary sensor within Home Assistant." +description: "Instructions on how to set up a gc100 binary sensor within Home Assistant." date: 2017-10-27 17:26 sidebar: true comments: false diff --git a/source/_components/binary_sensor.hikvision.markdown b/source/_components/binary_sensor.hikvision.markdown index ae37f2e9797..97c63757163 100644 --- a/source/_components/binary_sensor.hikvision.markdown +++ b/source/_components/binary_sensor.hikvision.markdown @@ -15,18 +15,22 @@ ha_iot_class: "Local Push" The Hikvision Binary Sensor is a platform that parses the event stream of a [Hikvision IP Camera or NVR](http://www.hikvision.com/) and presents the camera/nvr events to Home Assistant as binary sensors with either an "off" or "on" state. -The platform will automatically add all sensors to Home Assistant that are configured within the camera/nvr interface to "Notify the surveillance center" as a trigger. If you would like to hide a sensor type you can do so by either unchecking "Notify the surveillance center" in the camera configuration or by using the "ignored" customize option detailed below. +The platform will automatically add all sensors to Home Assistant that are configured within the camera/nvr interface to "Notify the surveillance center" as a trigger. If you would like to hide a sensor type you can do so by either unchecking "Notify the surveillance center" in the camera configuration or by using the "ignored" customize option detailed below. + +

+In order for the sensors to work the hikvision user must have the 'Remote: Notify Surveillance Center/Trigger Alarm Output' permission which can be enabled from the user management section of the web interface. Also the 'WEB Authentication' needs to be set to 'digest/basic' in the security/authentication section. +

For example, if you configure a camera with the name "Front Porch" that has motion detection and line crossing events enabled to notify the surveillance center the following binary sensors will be added to Home Assistant: -``` +```text binary_sensor.front_porch_motion binary_sensor.front_port_line_crossing ``` -When used with a NVR device the sensors will be appended with the channel number they represent. For example, if you configure an NVR with the name "Home" that supports 2 cameras with motion detection and line crossing events enabled to notify the surveillance center the following binary sensors will be added to Home Assistant: +When used with a NVR device the sensors will be appended with the channel number they represent. For example, if you configure an NVR with the name "Home" that supports 2 cameras with motion detection and line crossing events enabled to notify the surveillance center the following binary sensors will be added to Home Assistant: -``` +```text binary_sensor.home_motion_1 binary_sensor.home_motion_2 binary_sensor.home_line_crossing_1 @@ -34,35 +38,38 @@ binary_sensor.home_line_crossing_2 ``` This platform should work with all Hikvision cameras and nvrs, and has been confirmed to work with the following models: + - DS-2CD3132-I - DS-2CD2232-I5 - DS-2CD2032-I - DS-2CD2042WD-I - DS-2CD2142FWD-I +- DS-2CD2155FWD-IS -To enable this sensor, the following lines are required in your `configuration.yaml`: +To enable this sensor, the following lines are required in your `configuration.yaml` file: ```yaml binary_sensor: - platform: hikvision - host: IP_ADDRESS - username: user - password: pass + - platform: hikvision + host: IP_ADDRESS + username: user + password: pass ``` Configuration options for a Hikvision Sensor: -- **name** (*Optional*): The name you'd like to give the camera in Home Assistant, defaults to name defined in the camera. - **host** (*Required*): The IP address of the camera you would like to connect to. -- **port** (*Optional*): The port to connect to the camera on, defaults to 80. -- **ssl** (*Optional*): True if you want to connect with https. Be sure to set the port also. - **username** (*Required*): The username to authenticate with. - **password** (*Required*): The password to authenticate with. +- **name** (*Optional*): The name you'd like to give the camera in Home Assistant, defaults to name defined in the camera. +- **port** (*Optional*): The port to connect to the camera on, defaults to 80. +- **ssl** (*Optional*): True if you want to connect with https. Be sure to set the port also. - **customize** (*Optional*): This attribute contains sensor-specific override values. Only sensor name needs defined: - **ignored** (*Optional*): Ignore this sensor completely. It won't be shown in the Web Interface and no events are generated for it. - **delay** (*Optional*): Specify the delay to wait after a sensor event ends before notifying Home Assistant. This is useful to catch multiple quick trips in one window without the state toggling on and off. The default delay is 5 seconds. Supported sensor/event types are: + - Motion - Line Crossing - Field Detection @@ -80,37 +87,36 @@ Supported sensor/event types are: - Face Detection - Scene Change Detection - Example of a configuration in your `configuration.yaml` that utilizes the customize options for a camera: ```yaml binary_sensor: - platform: hikvision - host: 192.168.X.X - port: 80 - ssl: False - username: user - password: pass - customize: - motion: - delay: 30 - line_crossing: - ignored: True + - platform: hikvision + host: 192.168.X.X + port: 80 + ssl: False + username: user + password: pass + customize: + motion: + delay: 30 + line_crossing: + ignored: True ``` Example of a configuration in your `configuration.yaml` that utilizes the customize options for a nvr: ```yaml binary_sensor: - platform: hikvision - host: 192.168.X.X - port: 80 - ssl: False - username: user - password: pass - customize: - motion_1: - delay: 30 - field_detection_2: - ignored: True + - platform: hikvision + host: 192.168.X.X + port: 80 + ssl: False + username: user + password: pass + customize: + motion_1: + delay: 30 + field_detection_2: + ignored: True ``` diff --git a/source/_components/binary_sensor.hive.markdown b/source/_components/binary_sensor.hive.markdown index 62022aa898c..49486d62d76 100644 --- a/source/_components/binary_sensor.hive.markdown +++ b/source/_components/binary_sensor.hive.markdown @@ -1,6 +1,6 @@ --- layout: page -title: "Hive Sensor" +title: "Hive Binary Sensor" description: "Instructions on how to integrate Hive Sensors with Home Assistant." date: 2017-09-24 21:00 sidebar: true @@ -14,11 +14,12 @@ ha_iot_class: "Cloud Polling" --- -The 'hive' binary sensor component integrates your Hive sensors into Home Assistant. +The `hive` binary sensor component integrates your Hive sensors into Home Assistant. -The Hive sensor component supports the following Hive products: -- **Hive Window or Door Sensor** -- **Hive Motion Sensor** +The platform supports the following Hive products: + +- Hive Window or Door Sensor +- Hive Motion Sensor

diff --git a/source/_components/binary_sensor.homematic.markdown b/source/_components/binary_sensor.homematic.markdown index 37140c84337..5155aedeea1 100644 --- a/source/_components/binary_sensor.homematic.markdown +++ b/source/_components/binary_sensor.homematic.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Homematic Binary Sensor" -description: "Instructions how to integrate binary Homematic sensors within Home Assistant." +description: "Instructions on how to integrate binary Homematic sensors within Home Assistant." date: 2016-06-28 08:30 sidebar: true comments: false diff --git a/source/_components/binary_sensor.homematicip_cloud.markdown b/source/_components/binary_sensor.homematicip_cloud.markdown new file mode 100644 index 00000000000..7e9336cf1f9 --- /dev/null +++ b/source/_components/binary_sensor.homematicip_cloud.markdown @@ -0,0 +1,21 @@ +--- +layout: page +title: "HomematicIP Cloud Binary Sensor" +description: "Instructions on how to integrate HomematicIP binary sensors within Home Assistant." +date: 2018-04-02 13:40 +sidebar: true +comments: false +sharing: true +footer: true +logo: homematicip_cloud.png +ha_category: Binary Sensor +ha_release: 0.70 +ha_iot_class: "Cloud Push" +--- + +The `homematicip_cloud` binary_switch platform allows you to control +[HomematicIP](http://www.homematic-ip.com) binary sensors through Home Assistant. + +Devices will be configured automatically. Please refer to the +[component](/components/homematicip_cloud/) configuration on how to setup +HomematicIP Cloud. diff --git a/source/_components/binary_sensor.http.markdown b/source/_components/binary_sensor.http.markdown index aaddf8a7256..c2442aa881f 100644 --- a/source/_components/binary_sensor.http.markdown +++ b/source/_components/binary_sensor.http.markdown @@ -1,7 +1,7 @@ --- layout: page title: "HTTP Binary Sensor" -description: "Instructions how to integrate HTTP binary sensors within Home Assistant." +description: "Instructions on how to integrate HTTP binary sensors within Home Assistant." date: 2016-02-05 12:15 sidebar: true comments: false diff --git a/source/_components/binary_sensor.hydrawise.markdown b/source/_components/binary_sensor.hydrawise.markdown new file mode 100644 index 00000000000..cd066354673 --- /dev/null +++ b/source/_components/binary_sensor.hydrawise.markdown @@ -0,0 +1,41 @@ +--- +layout: page +title: "Hunter Hydrawise Binary Sensor" +description: "Instructions on how to integrate your Hunter Hydrawise Wi-Fi irrigation control system within Home Assistant." +date: 2018-04-11 08:02 +sidebar: true +comments: false +sharing: true +footer: true +logo: hydrawise_logo.png +ha_category: Binary Sensor +ha_release: 0.71 +ha_iot_class: Cloud Polling +--- + +Before setting up the [Hunter Hydrawise](https://hydrawise.com) binary sensors please follow the instructions for setting up the [Hydrawise hub](/components/hydrawise) component. + +Once you have enabled the `hydrawise` component, add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +binary_sensor: + - platform: hydrawise +``` + +{% configuration %} +monitored_conditions: + description: The binary sensors that should be displayed on the frontend. + required: false + type: list + default: All binary sensors are enabled. + keys: + is_watering: + description: The binary sensor is `on` when the zone is actively watering. + rain_sensor: + description: Is `on` when the rain_sensor (if installed on the controller) is active (wet). + status: + description: This will indicate `on` when there is a connection to the Hydrawise cloud. It is not an indication of whether the irrigation controller hardware is online. +{% endconfiguration %} + +Finish the configuration by visiting the [Hydrawise sensor](/components/sensor.hydrawise/) and [Hydrawise switch](/components/switch.hydrawise/) documentation. diff --git a/source/_components/binary_sensor.ihc.markdown b/source/_components/binary_sensor.ihc.markdown new file mode 100644 index 00000000000..da5aac7615e --- /dev/null +++ b/source/_components/binary_sensor.ihc.markdown @@ -0,0 +1,69 @@ +--- +layout: page +title: "IHC Binary Sensor" +description: "Instructions on how to integrate IHC Binary Sensors within Home Assistant." +date: 2017-11-27 13:35 +sidebar: true +comments: false +sharing: true +footer: true +logo: ihc.png +ha_category: Binary Sensor +ha_release: 0.62 +ha_iot_class: "Local Push" +--- + +Before you can use the IHC Binary Sensor platform, you must setup the [IHC Component](/components/ihc/) + +When auto setup is enabled the following products will be found in the IHC project and setup as binary sensors: + +* Dataline magnet contacts +* Dataline Pir sensors +* Dataline Pir sensors with twilight detection +* Dataline Pir alarm sensor +* Dataline smoke detector +* Dataline gas detector +* Dataline light sensor + +To manually configure IHC Binary Sensors insert this section in your configuration: + +```yaml +binary_sensor: + - platform: ihc + binary_sensors: + - id: 12345 + name: mysensor + type: opening + inverting: True + - id: 12346 + ... +``` + +{% configuration %} +binary_sensors: + description: List of binary sensors to setup manually. + required: false + type: map + keys: + id: + description: The IHC resource id. + required: true + type: int + inverting: + description: If True the sensor will be inverted. + required: false + type: bool + default: false + name: + description: The name of the component + required: false + type: string + type: + description: The binary sensor type. See [Home Assistant binary sensor](/components/binary_sensor/) for available types. + required: false + type: string +{% endconfiguration %} + +The resource id should be an id of a boolean IHC resource. +For more information about IHC resource ids see [Manual Setup](/components/ihc/#manual-setup) + diff --git a/source/_components/binary_sensor.insteon_plm.markdown b/source/_components/binary_sensor.insteon_plm.markdown index bd685df7c29..0ee0aaf0375 100644 --- a/source/_components/binary_sensor.insteon_plm.markdown +++ b/source/_components/binary_sensor.insteon_plm.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Insteon PLM Binary Sensor" -description: "Instructions how to setup the Insteon PLM switches locally within Home Assistant." +description: "Instructions on how to setup the Insteon PLM binary sensors locally within Home Assistant." date: 2017-02-19 17:00 sidebar: true comments: false @@ -10,13 +10,12 @@ footer: true logo: insteon.png ha_category: Binary Sensor ha_iot_class: "Local Push" -ha_version: 0.39 +ha_release: 0.39 --- -The `insteon_plm` binary sensor platform lets you control your sensors through +The `insteon_plm` binary sensor platform lets you control your sensors through an INSTEON PowerLinc Modem (PLM) device connected directly to your system on a USB or serial port. To add support, set up the primary [insteon_plm] component. [insteon_plm]: /components/insteon_plm/ - diff --git a/source/_components/binary_sensor.iss.markdown b/source/_components/binary_sensor.iss.markdown index c2061706882..0d4e4276b30 100644 --- a/source/_components/binary_sensor.iss.markdown +++ b/source/_components/binary_sensor.iss.markdown @@ -42,11 +42,13 @@ If you set `show_on_map` `True` then the location attributes are named `latitude The [generic camera platform](/components/camera.mjpeg/) offers the possibility to show the location of the ISS on Google Maps. +{% raw %} ```yaml # Example configuration.yaml entry camera: - platform: generic name: ISS - still_image_url: {% raw %}https://maps.googleapis.com/maps/api/staticmap?center={{ states.binary_sensor.iss.attributes.lat }},{{ states.binary_sensor.iss.attributes.long }}&zoom=5&size=500x500&maptype=roadmap&markers=color:blue%7Clabel:P%7C{{ states.binary_sensor.iss.attributes.lat }},{{ states.binary_sensor.iss.attributes.long }}{% endraw %} - limit_refetch_to_url_change: true + still_image_url: http://staticmap.openstreetmap.de/staticmap.php?center={{ states.binary_sensor.iss.attributes.lat }},{{ states.binary_sensor.iss.attributes.long }}&zoom=4&size=865x512&maptype=mapnik&markers={{ states.binary_sensor.iss.attributes.lat }},{{ states.binary_sensor.iss.attributes.long }},lightblue + limit_refetch_to_url_change: true ``` +{% endraw %} diff --git a/source/_components/binary_sensor.isy994.markdown b/source/_components/binary_sensor.isy994.markdown index 1318ef67d10..2cb7345d0eb 100644 --- a/source/_components/binary_sensor.isy994.markdown +++ b/source/_components/binary_sensor.isy994.markdown @@ -1,7 +1,7 @@ --- layout: page title: "ISY994 Binary Sensor" -description: "Instructions how to integrate ISY994 binary sensors into Home Assistant." +description: "Instructions on how to integrate ISY994 binary sensors into Home Assistant." date: 2016-09-03 23:00 sidebar: true comments: false diff --git a/source/_components/binary_sensor.knx.markdown b/source/_components/binary_sensor.knx.markdown index 73c747601ad..d51c9effbb4 100644 --- a/source/_components/binary_sensor.knx.markdown +++ b/source/_components/binary_sensor.knx.markdown @@ -1,7 +1,7 @@ --- layout: page title: "KNX Binary Sensor" -description: "Instructions how to setup the KNX binary sensors within Home Assistant." +description: "Instructions on how to setup the KNX binary sensors within Home Assistant." date: 2016-07-13 07:00 sidebar: true comments: false @@ -25,14 +25,16 @@ binary_sensor: address: '6/0/2' device_class: 'motion' #significant_bit: 2 + #reset_after: 100 ``` Configuration variables: - **name** (*Optional*): A name for this device used within Home Assistant. - **address**: KNX group address of the binary sensor. -- **device_class** (Optional): HASS device class e.g. "motion". +- **device_class** (Optional): HASS device class e.g., "motion". - **significant_bit** (Optional): Specify which significant bit of the KNX value should be used. Default is 1. +- **reset_after** (Optional): Reset back to OFF state after specified milliseconds. You can also attach actions to binary sensors (e.g., to switch on a light when a switch was pressed). In this example, one light is switched on when the button was pressed once and two others when the button was pressed a second time. diff --git a/source/_components/binary_sensor.konnected.markdown b/source/_components/binary_sensor.konnected.markdown new file mode 100644 index 00000000000..b530f097158 --- /dev/null +++ b/source/_components/binary_sensor.konnected.markdown @@ -0,0 +1,21 @@ +--- +layout: page +title: "Konnected Binary Sensor" +description: "Connect wired open/close sensors to Home Assistant with Konnected and a NodeMCU ESP8266" +date: 2018-04-03 12:30 +sidebar: true +comments: false +sharing: true +footer: true +logo: konnected.png +ha_category: Binary Sensor +ha_release: "0.70" +ha_iot_class: "Local Push" +--- + +The `konnected` binary sensor allows you to monitor wired door sensors, window sensors, motion sensors, smoke detectors, CO detectors, glass-break sensors, water leak sensors or any other simple wired open/close circuit attached to a NodeMCU ESP8266 WiFi module running the [open source Konnected software](https://github.com/konnected-io/konnected-security). + +See the [`konnected`](/components/konnected/) component for configuration and setup instructions. + +This component supports all of the built-in device classes of the generic [Binary Sensor](/components/binary_sensor/) component. + diff --git a/source/_components/binary_sensor.markdown b/source/_components/binary_sensor.markdown index c25e0fb6b60..fe8f4a51078 100644 --- a/source/_components/binary_sensor.markdown +++ b/source/_components/binary_sensor.markdown @@ -11,26 +11,38 @@ footer: true Binary sensors gather information about the state of devices which have a "digital" return value (either 1 or 0). These can be switches, contacts, pins, etc. These sensors only have two states: **0/off/low/closed/false** and **1/on/high/open/true**. Knowing that there are only two states allows Home Assistant to represent these sensors in a better way in the frontend according to their functionality. +### {% linkable_title Device Class %} + The way these sensors are displayed in the frontend can be modified in the [customize section](/getting-started/customizing-devices/). The following device classes are supported for binary sensors: - **None**: Generic on/off. This is the default and doesn't need to be set. - **battery**: `On` means low, `Off` means normal -- **cold**: `On` means cold -- **connectivity**: `On` means connection present, `Off` means no connection -- **gas**: `On` means gas detected -- **heat**: `On` means hot -- **light**: Lightness threshold -- **moisture**: `On` means wet -- **motion**: `On` means motion detected -- **moving**: `On` means moving, `Off` means stopped -- **occupancy**: `On` means occupied, `Off` means not occupied +- **cold**: `On` means cold, `Off` means normal +- **connectivity**: `On` means connected, `Off` means disconnected +- **door**: `On` means open, `Off` means closed +- **garage_door**: `On` means open, `Off` means closed +- **gas**: `On` means gas detected, `Off` means no gas (clear) +- **heat**: `On` means hot, `Off` means normal +- **light**: `On` means light detected, `Off` means no light +- **lock**: `On` means open (unlocked), `Off` means closed (locked) +- **moisture**: `On` means moisture detected (wet), `Off` means no moisture (dry) +- **motion**: `On` means motion detected, `Off` means no motion (clear) +- **moving**: `On` means moving, `Off` means not moving (stopped) +- **occupancy**: `On` means occupied, `Off` means not occupied (clear) - **opening**: `On` means open, `Off` means closed - **plug**: `On` means device is plugged in, `Off` means device is unplugged -- **power**: Power, over-current, etc. -- **presence**: `On` means Home, `Off` means Away +- **power**: `On` means power detected, `Off` means no power +- **presence**: `On` means home, `Off` means away +- **problem**: `On` means problem detected, `Off` means no problem (OK) - **safety**: `On` means unsafe, `Off` means safe -- **smoke**: `On` means smoke detected -- **sound**: `On` means sound detected, `Off` means no sound -- **vibration**: `On` means vibration detected, `Off` means no vibration +- **smoke**: `On` means smoke detected, `Off` means no smoke (clear) +- **sound**: `On` means sound detected, `Off` means no sound (clear) +- **vibration**: `On` means vibration detected, `Off` means no vibration (clear) +- **window**: `On` means open, `Off` means closed -For analog sensors please check the [component overview](https://home-assistant.io/components/#sensor). +For analog sensors please check the [component overview](/components/#sensor). + +

+ +Example of various device classes icons in `On` and `Off` state. +

diff --git a/source/_components/binary_sensor.mercedesme.markdown b/source/_components/binary_sensor.mercedesme.markdown new file mode 100644 index 00000000000..e1df898d498 --- /dev/null +++ b/source/_components/binary_sensor.mercedesme.markdown @@ -0,0 +1,20 @@ +--- +layout: page +title: "Mercedes me Binary Sensor" +description: "Instructions on how to integrate Mercedes me binary sensors into Home Assistant." +date: 2018-01-27 17:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: mercedesme.png +ha_category: Binary Sensor +ha_iot_class: "Cloud polling" +ha_release: 0.63 +--- + +The `Mercedes me` platform allows you to get data from your [Mercedes me connected car](https://www.mercedes-benz.com/en/mercedes-me/) sensors like windows, doors, lock, tire warnings from within Home Assistant. + +They will be automatically discovered if the Mercedes me component is loaded. + +For more configuration information see the [Mercedes me component](/components/mercedesme/) documentation. diff --git a/source/_components/binary_sensor.modbus.markdown b/source/_components/binary_sensor.modbus.markdown index 55450b908ea..62f5765dd3e 100644 --- a/source/_components/binary_sensor.modbus.markdown +++ b/source/_components/binary_sensor.modbus.markdown @@ -15,10 +15,12 @@ ha_iot_class: "Local Push" The `modbus` binary sensor allows you to gather data from [Modbus](http://www.modbus.org/) coils. +## {% linkable_title Configuration %} + To use your Modbus binary sensors in your installation, add the following to your `configuration.yaml` file: ```yaml -# Example configuration.yml entry +# Example configuration.yaml entry binary_sensor: - platform: modbus coils: @@ -39,7 +41,7 @@ Configuration variables: It's possible to change the default 30 seconds scan interval for the sensor updates as shown in the [Platform options](/docs/configuration/platform_options/#scan-interval) documentation. -### {% linkable_title Full example %} +## {% linkable_title Full example %} Example a sensor with a 10 seconds scan interval: diff --git a/source/_components/binary_sensor.mqtt.markdown b/source/_components/binary_sensor.mqtt.markdown index 3b1ff864534..8d4b8b38e27 100644 --- a/source/_components/binary_sensor.mqtt.markdown +++ b/source/_components/binary_sensor.mqtt.markdown @@ -1,7 +1,7 @@ --- layout: page title: "MQTT Binary Sensor" -description: "Instructions how to integrate MQTT binary sensors within Home Assistant." +description: "Instructions on how to integrate MQTT binary sensors within Home Assistant." date: 2015-05-30 23:21 sidebar: true comments: false @@ -13,12 +13,13 @@ ha_release: 0.9 ha_iot_class: "depends" --- - The `mqtt` binary sensor platform uses an MQTT message payload to set the binary sensor to one of two states: `on` or `off`. The binary sensor state will be updated only after a new message is published on `state_topic` matching `payload_on` or `payload_off`. If these messages are published with the `retain` flag set, the binary sensor will receive an instant state update after subscription and Home Assistant will display the correct state on startup. Otherwise, the initial state displayed in Home Assistant will be `unknown`. -The `mqtt` binary sensor platform optionally supports an `availability_topic` to receive online and offline messages (birth and LWT messages) from the MQTT device. During normal operation, if the MQTT cover device goes offline (i.e. publishes `payload_not_available` to `availability_topic`), Home Assistant will display the binary sensor as `unavailable`. If these messages are published with the `retain` flag set, the binary sensor will receive an instant update after subscription and Home Assistant will display the correct availability state of the binary sensor when Home Assistant starts up. If the `retain` flag is not set, Home Assistant will display the binary sensor as `unavailable` when Home Assistant starts up. If no `availability_topic` is defined, Home Assistant will consider the MQTT device to be available. +## {% linkable_title Configuration %} + +The `mqtt` binary sensor platform optionally supports an `availability_topic` to receive online and offline messages (birth and LWT messages) from the MQTT device. During normal operation, if the MQTT cover device goes offline (i.e., publishes `payload_not_available` to `availability_topic`), Home Assistant will display the binary sensor as `unavailable`. If these messages are published with the `retain` flag set, the binary sensor will receive an instant update after subscription and Home Assistant will display the correct availability state of the binary sensor when Home Assistant starts up. If the `retain` flag is not set, Home Assistant will display the binary sensor as `unavailable` when Home Assistant starts up. If no `availability_topic` is defined, Home Assistant will consider the MQTT device to be available. To use an MQTT binary sensor in your installation, add the following to your `configuration.yaml` file: @@ -29,18 +30,70 @@ binary_sensor: state_topic: "home-assistant/window/contact" ``` -Configuration variables: +{% configuration %} +name: + description: The name of the binary sensor. + required: false + type: string + default: MQTT Binary Sensor +state_topic: + description: The MQTT topic subscribed to receive sensor values. + required: true + type: string +payload_on: + description: The payload that represents the on state. + required: false + type: string + default: "ON" +payload_off: + description: The payload that represents the off state. + required: false + type: string + default: "OFF" +availability_topic: + description: "The MQTT topic subscribed to receive birth and LWT messages from the MQTT device. If `availability_topic` is not defined, the binary sensor availability state will always be `available`. If `availability_topic` is defined, the binary sensor availability state will be `unavailable` by default." + required: false + type: string +payload_available: + description: The payload that represents the online state. + required: false + type: string + default: online +payload_not_available: + description: The payload that represents the offline state. + required: false + type: string + default: offline +qos: + description: The maximum QoS level to be used when receiving messages. + required: false + type: integer + default: 0 +unique_id: + description: "An ID that uniquely identifies this sensor. If two sensors have the same unique ID, Home Assistant will raise an exception." + required: false + type: string +device_class: + description: "The [type/class](/components/binary_sensor/) of the sensor to set the icon in the frontend." + required: false + type: string +value_template: + description: "Defines a [template](/docs/configuration/templating/#processing-incoming-data) to extract a value from the payload." + required: false + type: string +force_update: + description: Sends update events even if the value hasn't changed. Useful if you want to have meaningful value graphs in history. + reqired: false + type: boolean + default: False +{% endconfiguration %} -- **name** (*Optional*): The name of the binary sensor. Default is `MQTT Binary Sensor`. -- **state_topic** (*Required*): The MQTT topic subscribed to receive sensor values. -- **payload_on** (*Optional*): The payload that represents the on state. Default is `ON`. -- **payload_off** (*Optional*): The payload that represents the off state. Default is `OFF`. -- **availability_topic** (*Optional*): The MQTT topic subscribed to receive birth and LWT messages from the MQTT device. If `availability_topic` is not defined, the binary sensor availability state will always be `available`. If `availability_topic` is defined, the binary sensor availability state will be `unavailable` by default. -- **payload_available** (*Optional*): The payload that represents the online state. Default is `online`. -- **payload_not_available** (*Optional*): The payload that represents the offline state. Default is `offline`. -- **qos** (*Optional*): The maximum QoS level to be used when receiving messages. Default is `0`. -- **device_class** (*Optional*): The [type/class](/components/binary_sensor/) of the sensor to set the icon in the frontend. -- **value_template** (*Optional*): Defines a [template](/docs/configuration/templating/#processing-incoming-data) to extract a value from the payload. + +## {% linkable_title Examples %} + +In this section, you will find some real-life examples of how to use this sensor. + +### {% linkable_title Full configuration %} To test, you can use the command line tool `mosquitto_pub` shipped with `mosquitto` or the `mosquitto-clients` package to send MQTT messages. To set the state of the binary sensor manually: @@ -50,6 +103,7 @@ $ mosquitto_pub -h 127.0.0.1 -t home-assistant/window/contact -m "OFF" The example below shows a full configuration for a binary sensor: +{% raw %} ```yaml # Example configuration.yaml entry binary_sensor: @@ -63,5 +117,32 @@ binary_sensor: payload_not_available: "offline" qos: 0 device_class: opening - value_template: '{% raw %}{{ value.x }}{% endraw %}' + value_template: '{{ value.x }}' ``` +{% endraw %} + +### {% linkable_title Get the state of a device with ESPEasy %} + +Assuming that you have flashed your ESP8266 unit with [ESPEasy](https://github.com/letscontrolit/ESPEasy). Under "Config" is a name ("Unit Name:") set for your device (here it's "bathroom"). A configuration for a "Controller" for MQTT with the protocol "OpenHAB MQTT" is present and the entries ("Controller Subscribe:" and "Controller Publish:") are adjusted to match your needs. In this example, the topics are prefixed with "home". Also, add a "Switch Input" in the "Devices" tap with the name "switch" and "button" as value. + +As soon as the unit is online, you will get the state of the attached button. + +```bash +home/bathroom/status Connected +... +home/bathroom/switch/button 1 +``` + +The configuration will look like the example below: + +{% raw %} +```yaml +# Example configuration.yaml entry +binary_sensor: + - platform: mqtt + name: Bathroom + state_topic: "home/bathroom/switch/button" + payload_on: "1" + payload_off: "0" +``` +{% endraw %} diff --git a/source/_components/binary_sensor.mychevy.markdown b/source/_components/binary_sensor.mychevy.markdown new file mode 100644 index 00000000000..b04312b2ae5 --- /dev/null +++ b/source/_components/binary_sensor.mychevy.markdown @@ -0,0 +1,16 @@ +--- +layout: page +title: "MyChevy Binary Sensors" +description: "Instructions on how to integrate Chevy Bolt binary sensors car into Home Assistant." +date: 2017-08-28 17:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: chevy.png +ha_category: Binary Sensor +ha_release: 0.62 +ha_iot_class: "Cloud Polling" +--- + +For configuration instructions, see [main component config](/components/mychevy/). diff --git a/source/_components/binary_sensor.mysensors.markdown b/source/_components/binary_sensor.mysensors.markdown index 488bb713f6d..6138b927af7 100644 --- a/source/_components/binary_sensor.mysensors.markdown +++ b/source/_components/binary_sensor.mysensors.markdown @@ -1,7 +1,7 @@ --- layout: page title: "MySensors Binary Sensor" -description: "Instructions how to integrate MySensors binary sensors into Home Assistant." +description: "Instructions on how to integrate MySensors binary sensors into Home Assistant." date: 2016-04-13 14:20 +0100 sidebar: true comments: false diff --git a/source/_components/binary_sensor.mystrom.markdown b/source/_components/binary_sensor.mystrom.markdown index 6d093a2f259..99927748043 100644 --- a/source/_components/binary_sensor.mystrom.markdown +++ b/source/_components/binary_sensor.mystrom.markdown @@ -1,7 +1,7 @@ --- layout: page title: "myStrom Binary Sensor" -description: "Instructions how to integrate myStrom buttons into Home Assistant." +description: "Instructions on how to integrate myStrom buttons into Home Assistant." date: 2017-04-14 08:15 sidebar: true comments: false @@ -28,22 +28,24 @@ The buttons will give you feedback with its built-in LED: - white then green: Pattern was submitted successfully - white then red: There is a problem with the communication -To use your myStrom WiFi Button in your installation, add the following to your `configuration.yaml` file: +### {% linkable_title Setup of myStrom Buttons %} -```yaml -# Example configuration.yaml entry -binary_sensor: - - platform: mystrom +You need to configure every button to make it work with Home Assistant. First connect the Wifi Buttons to your wireless network. Once a button is connected you have three minutes to set the actions for the push patterns if the button is not charging. The fastest way is to use `curl`. Check the [documentation](https://mystrom.ch/wp-content/uploads/REST_API_WBP.txt) of the WiFi Button for further details about the implementation (`http://` is replaced by `get://` or `post://`). `action` is the name of the corresponding push pattern (see above). + +The endpoint that is receiving the data is `http://[IP address Home Assistant]:8123/api/mystrom`. If you have set an [`api_password`](/components/http/) then this needs to be included in the URL. + +With `api_password:` + +``` +$ curl -d "[action]=get://[IP address Home Assistant]:8123/api/mystrom?api_password%3D[api_password]%26[action]%3D[ID of the button]" \ + http://[IP address of the button]/api/v1/device/[MAC address of the button] ``` -### {% linkable_title Setup of the myStrom Buttons %} - -You need to configure every button to make it work with Home Assistant. First connect the Wifi Buttons to your wireless network. Once a button is connected you have three minutes to set the actions for the push patterns. The fastest way is to use `curl`. Check the [documentation](https://mystrom.ch/wp-content/uploads/REST_API_WBP.txt) of the WiFi Button for further details about the implementation (`http://` is replaced by `get://` or `post://`). `action` is the name of the corresponding push pattern (see above). - -The endpoint that is receiving the data is `[IP address Home Assistant]:8123/api/mystrom`. +Without `api_password`: ```bash -$ curl -d "[action]=get://[IP address Home Assistant]:8123/api/mystrom?[action]%3D[ID of the button]" http://[IP address of the button]/api/v1/device/[MAC address of the button] +$ curl -d "[action]=get://[IP address Home Assistant]:8123/api/mystrom?[action]%3D[ID of the button]" \ + http://[IP address of the button]/api/v1/device/[MAC address of the button] { "[MAC address of the button]": { "type": "button", @@ -52,7 +54,7 @@ $ curl -d "[action]=get://[IP address Home Assistant]:8123/api/mystrom?[action]% "meshroot": false, "charge": true, "voltage": 4.292, - "fw_version": "2.26", + "fw_version": "2.56", "single": "get://[IP address Home Assistant]:8123/api/mystrom?single=[id of the button]", "double": "", "long": "", @@ -67,6 +69,26 @@ A complete command to set the URL for a double click could look like the example $ curl -d "double=get://192.168.1.3:8123/api/mystrom?double%3DButton1" http://192.168.1.12/api/v1/device/4D5F5D5CD553 ``` +With an `api_password`: + +```bash +curl -d "double=get://192.168.1.3:8123/api/mystrom?api_password%3Dapi_password%26double%3DButton1" http://192.168.1.12/api/v1/device/4D5F5D5CD553 +``` + +The command-line tool [`mystrom`](https://github.com/fabaff/python-mystrom) is a helper to configure myStrom buttons. + +If you have set [`login_attempts_threshold`](/components/http/) and forget to include the `api_password` for an action and that action is triggered then after the threshold is reached will the button no longer work because it is banned. See [IP filtering and banning](/components/http/#ip-filtering-and-banning) about how to revert the banning. + +## {% linkable_title Configuration %} + +To use your myStrom WiFi Button in your installation, add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +binary_sensor: + - platform: mystrom +``` +

-The firmware version 2.26 doesn't support TLS/SSL. This means that you are only able to use the WiFi Buttons if you are using plain-text communication between Home Assistant and the clients/entities. +The firmware version 2.56 doesn't support TLS/SSL. This means that you are only able to use the WiFi Buttons if you are using plain-text communication between Home Assistant and the clients/entities.

diff --git a/source/_components/binary_sensor.nest.markdown b/source/_components/binary_sensor.nest.markdown index fa0a264474d..6949c6d2b55 100644 --- a/source/_components/binary_sensor.nest.markdown +++ b/source/_components/binary_sensor.nest.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Nest Binary Sensor" -description: "Instructions how to integrate Nest binary sensors within Home Assistant." +description: "Instructions on how to integrate Nest binary sensors within Home Assistant." date: 2016-01-26 08:00 sidebar: true comments: false @@ -10,7 +10,7 @@ footer: true logo: nest.png ha_category: Binary Sensor ha_release: pre 0.7 -ha_iot_class: "Cloud Polling" +ha_iot_class: "Cloud Push" --- @@ -39,6 +39,8 @@ Configuration variables: The following conditions are available by device: +- Nest Home: + - away - Nest Thermostat: - online - fan diff --git a/source/_components/binary_sensor.netatmo.markdown b/source/_components/binary_sensor.netatmo.markdown index 57d01bbd088..da2f8ab1fe1 100644 --- a/source/_components/binary_sensor.netatmo.markdown +++ b/source/_components/binary_sensor.netatmo.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Netatmo Binary Sensor" -description: "Instructions how to integrate Netatmo binary sensor into Home Assistant." +description: "Instructions on how to integrate Netatmo binary sensor into Home Assistant." date: 2016-09-19 15:10 sidebar: true comments: false diff --git a/source/_components/binary_sensor.octoprint.markdown b/source/_components/binary_sensor.octoprint.markdown index c4bf736c3b1..369205ad94a 100644 --- a/source/_components/binary_sensor.octoprint.markdown +++ b/source/_components/binary_sensor.octoprint.markdown @@ -1,7 +1,7 @@ --- layout: page title: "OctoPrint Binary Sensor" -description: "Instructions how to integrate OctoPrint binary sensors within Home Assistant." +description: "Instructions on how to integrate OctoPrint binary sensors within Home Assistant." date: 2016-05-05 08:00 sidebar: true comments: false diff --git a/source/_components/binary_sensor.pilight.markdown b/source/_components/binary_sensor.pilight.markdown index 4ccf5273920..ee7a729196a 100644 --- a/source/_components/binary_sensor.pilight.markdown +++ b/source/_components/binary_sensor.pilight.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Pilight Binary Sensor" -description: "Instructions how to integrate Pilight binary sensors within Home Assistant." +description: "Instructions on how to integrate Pilight binary sensors within Home Assistant." date: 2017-03-24 20:41 sidebar: true comments: false @@ -15,10 +15,12 @@ ha_iot_class: "Local Polling" The `pilight` binary sensor platform implement the [pilight hub](/components/pilight/) binary sensor functionality. Two type of Pilight binary sensor configuration available. A normal sensor which send the on and off state cyclical and a trigger sensor which send only a trigger when an event happened (for example lots of cheap PIR motion detector). + + To enable a Pilight binary sensor in your installation, add the following to your `configuration.yaml` file: ```yaml -# Example configuration.yml entry +# Example configuration.yaml entry binary_sensor: - platform: pilight variable: 'state' diff --git a/source/_components/binary_sensor.ping.markdown b/source/_components/binary_sensor.ping.markdown index 613e64316b1..b0be6271369 100644 --- a/source/_components/binary_sensor.ping.markdown +++ b/source/_components/binary_sensor.ping.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Ping (ICMP) Binary sensor" -description: "Instructions how to integrate Ping (ICMP)-based binary sensors into Home Assistant." +description: "Instructions on how to integrate Ping (ICMP)-based binary sensors into Home Assistant." date: 2017-04-11 08:00 sidebar: true comments: false @@ -37,6 +37,17 @@ The sensor exposes the different round trip times values measured by `ping` as a - `round trip time min` - `round trip time max` +The default polling interval is 5 minutes. As many components [based on the entity class](/docs/configuration/platform_options), it is possible to overwrite this scan interval by specifying a `scan_interval` configuration key (value in seconds). In the example below we setup the `ping` binary sensor to poll the devices every 30 seconds. + +```yaml +# Example configuration.yaml entry to ping host 192.168.0.1 with 2 packets every 30 seconds. +binary_sensor: + - platform: ping + host: 192.168.0.1 + count: 2 + scan_interval: 30 +``` +

When run on Windows systems, the round trip time attributes are rounded to the nearest millisecond and the mdev value is unavailable.

diff --git a/source/_components/binary_sensor.qwikswitch.markdown b/source/_components/binary_sensor.qwikswitch.markdown new file mode 100644 index 00000000000..e3fd446a3ba --- /dev/null +++ b/source/_components/binary_sensor.qwikswitch.markdown @@ -0,0 +1,18 @@ +--- +layout: page +title: "QwikSwitch Binary Sensor" +description: "Instructions on how to integrate Qwikswitch dimmers and relays as sensors into Home Assistant." +date: 2016-05-04 00:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: qwikswitch.png +ha_category: Sensor +ha_iot_class: "Local Push" +ha_release: "0.68" +--- + +The `qwikswitch` binary_sensor platform allows you to use your [QwikSwitch](http://www.qwikswitch.co.za/) sensors within Home Assistant. + +The platform is configured through the [QwikSwitch component](/components/qwikswitch/). diff --git a/source/_components/binary_sensor.rachio.markdown b/source/_components/binary_sensor.rachio.markdown new file mode 100644 index 00000000000..568e9e0c558 --- /dev/null +++ b/source/_components/binary_sensor.rachio.markdown @@ -0,0 +1,31 @@ +--- +layout: page +title: "Rachio Binary Sensor" +description: "Instructions on how to use Rachio binary sensors with Home Assistant." +date: 2018-06-23 16:15 +sidebar: true +comments: false +sharing: true +footer: true +logo: rachio.png +ha_category: Hub +ha_iot_class: "Cloud Push" +ha_release: 0.73 +--- + +The `rachio` binary sensor platform allows you to view the status of your [Rachio irrigation system](http://rachio.com/). + +Once configured, a binary sensor will be added that shows whether or not each controller in the account provided is online and reachable by Rachio's servers. + +

+ You must have the [Rachio component](/components/rachio/) configured to use this switch. +

+ + +To add this platform to your installation, add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +binary_sensor: + - platform: rachio +``` diff --git a/source/_components/binary_sensor.rainmachine.markdown b/source/_components/binary_sensor.rainmachine.markdown new file mode 100644 index 00000000000..175a2d27bba --- /dev/null +++ b/source/_components/binary_sensor.rainmachine.markdown @@ -0,0 +1,23 @@ +--- +layout: page +title: "RainMachine Binary Sensor" +description: "Instructions on how to use RainMachine binary sensors with Home Assistant." +date: 2018-05-06 21:26 +sidebar: true +comments: false +sharing: true +footer: true +logo: rainmachine.png +ha_category: Binary Sensor +ha_iot_class: "Cloud Polling" +ha_release: 0.71 +--- + +The `rainmachine` binary sensor platform allows you to view crucial sensor data +within a [RainMachine smart Wi-Fi sprinkler controller](http://www.rainmachine.com/). + +

+You must have the [RainMachine component](https://www.home-assistant.io/components/rainmachine/) +configured to use this platform. After configuring that component, binary +sensors automatically appear. +

diff --git a/source/_components/binary_sensor.random.markdown b/source/_components/binary_sensor.random.markdown index ea8de4b90cc..b1208681a8a 100644 --- a/source/_components/binary_sensor.random.markdown +++ b/source/_components/binary_sensor.random.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Random Binary Sensor" -description: "Instructions how to integrate random state sensors into Home Assistant." +description: "Instructions on how to integrate random state sensors into Home Assistant." date: 2017-10-27 08:00 sidebar: true comments: false @@ -16,6 +16,8 @@ ha_release: 0.57 The `random` binary sensor platform is creating random states (`True`, 1, `on` or `False`, 0, `off`). This can be useful if you want to test automation rules. It generates a new state every time it is polled. +## {% linkable_title Configuration %} + To enable the random binary sensor, add the following lines to your `configuration.yaml`: ```yaml diff --git a/source/_components/binary_sensor.raspihats.markdown b/source/_components/binary_sensor.raspihats.markdown index 4815aa2de7b..50d031c4574 100644 --- a/source/_components/binary_sensor.raspihats.markdown +++ b/source/_components/binary_sensor.raspihats.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Raspihats Binary Sensor" -description: "Instructions how to integrate Raspihats add-on boards for Raspberry PI into Home Assistant as a binary_sensor." +description: "Instructions on how to integrate Raspihats add-on boards for Raspberry Pi into Home Assistant as a binary_sensor." date: 2017-05-01 04:09 sidebar: true comments: false @@ -87,4 +87,4 @@ It will output a table like this: 70: -- -- -- -- -- -- -- 77 ``` -For more details about the `raspihats` add-on boards for Raspberry PI, visit [raspihats.com](http://www.raspihats.com/). +For more details about the `raspihats` add-on boards for Raspberry Pi, visit [raspihats.com](http://www.raspihats.com/). diff --git a/source/_components/binary_sensor.rest.markdown b/source/_components/binary_sensor.rest.markdown index 0a5c789d36e..d882e5b4064 100644 --- a/source/_components/binary_sensor.rest.markdown +++ b/source/_components/binary_sensor.rest.markdown @@ -1,7 +1,7 @@ --- layout: page title: "RESTful Binary Sensor" -description: "Instructions how to integrate REST binary sensors into Home Assistant." +description: "Instructions on how to integrate REST binary sensors into Home Assistant." date: 2015-12-17 19:10 sidebar: true comments: false @@ -47,25 +47,61 @@ binary_sensor: method: POST ``` -Configuration variables: - -- **resource** (*Required*): The resource or endpoint that contains the value. -- **method** (*Optional*): The method of the request. Default is GET. -- **name** (*Optional*): Name of the REST binary sensor. -- **device_class** (*Optional*): The [type/class](/components/binary_sensor/) of the sensor to set the icon in the frontend. -- **value_template** (*Optional*): Defines a [template](/docs/configuration/templating/#processing-incoming-data) to extract the value. -- **payload** (*Optional*): The payload to send with a POST request. Usually formed as a dictionary. -- **verify_ssl** (*Optional*): Verify the certification of the endpoint. Default to True. -- **authentication** (*Optional*): Type of the HTTP authentication. `basic` or `digest`. -- **username** (*Optional*): The username for accessing the REST endpoint. -- **password** (*Optional*): The password for accessing the REST endpoint. -- **headers** (*Optional*): The headers for the requests. +{% configuration %} +resource: + description: The resource or endpoint that contains the value. + required: true + type: string + default: string +method: + description: The method of the request. + required: false + type: string + default: GET +name: + description: Name of the REST binary sensor. + required: false + type: string + default: REST Binary Sensor +device_class: + description: "The [type/class](/components/binary_sensor/) of the sensor to set the icon in the frontend." + required: false + type: string +value_template: + description: "Defines a [template](/docs/configuration/templating/#processing-incoming-data) to extract the value." + required: false + type: template +payload: + description: The payload to send with a POST request. Usually formed as a dictionary. + required: false + type: string +verify_ssl: + description: Verify the certification of the endpoint. + required: false + type: boolean + default: True +authentication: + description: Type of the HTTP authentication. `basic` or `digest`. + required: false + type: string +username: + description: The username for accessing the REST endpoint. + required: false + type: string +password: + description: The password for accessing the REST endpoint. + required: false + type: string +headers: + description: The headers for the requests. + required: false + type: list, string +{% endconfiguration %}

Make sure that the URL exactly matches your endpoint or resource.

- ## {% linkable_title Examples %} In this section you find some real life examples of how to use this sensor. diff --git a/source/_components/binary_sensor.rfxtrx.markdown b/source/_components/binary_sensor.rfxtrx.markdown index c676c46cec0..0aaefbad7d6 100644 --- a/source/_components/binary_sensor.rfxtrx.markdown +++ b/source/_components/binary_sensor.rfxtrx.markdown @@ -1,7 +1,7 @@ --- layout: page title: "RFXtrx Binary Sensor" -description: "Instructions how to integrate RFXtrx binary sensors into Home Assistant." +description: "Instructions on how to integrate RFXtrx binary sensors into Home Assistant." date: 2017-03-26 12:45 sidebar: true comments: false @@ -38,7 +38,7 @@ binary_sensor: name: device_name ``` -Do not forget to tweak the configuration variables: +Configuration variables: - **automatic_add** (*Optional*): To enable the automatic addition of new binary sensors. - **device_class** (*Optional*): The [type or class of the sensor](/components/binary_sensor/) to set the icon in the frontend. @@ -48,6 +48,11 @@ Do not forget to tweak the configuration variables: This component and the [rfxtrx switch](/components/switch/rfxtrx/) can steal each other's devices when setting the `automatic_add` configuration parameter to `true`. Set `automatic_add` only when you have some devices to add to your installation, otherwise leave it to `False`.

+

+If a device ID consists of only numbers, please make sure to surround it with quotes. +This is a known limitation in YAML, because the device ID will be interpreted as a number otherwise. +

+ Binary sensors have only two states - "on" and "off". Many door or window opening sensors will send a signal each time the door/window is open or closed. However, depending on their hardware or on their purpose, some sensors are only able to signal their "on" state: - Most motion sensors send a signal each time they detect motion. They stay "on" for a few seconds and go back to sleep, ready to signal other motion events. Usually, they do not send a signal when they go back to sleep. @@ -55,7 +60,6 @@ Binary sensors have only two states - "on" and "off". Many door or window openin For those devices, use the *off_delay* parameter. It defines a delay after which a device will go back to an "Off" state. That "Off" state will be fired internally by Home Assistant, just as if the device fired it by itself. If a motion sensor can only send signals once every 5 seconds, sets the *off_delay* parameter to *seconds: 5*. - Example configuration: ```yaml @@ -83,7 +87,7 @@ Let's try to add a new PT-2262 sensor using the "automatic_add" option and have Have your sensor trigger the "On" state for the first time. Some messages will appear: -``` +```text INFO (Thread-6) [homeassistant.components.binary_sensor.rfxtrx] Added binary sensor 0913000022670e013970 (Device_id: 22670e Class: LightingDevice Sub: 0) ``` @@ -91,7 +95,7 @@ Here the sensor has the id *22670e*. Now have your sensor trigger the "Off" state and look for the following message in the Home Assistant log. You should see that your device has been detected as a *new* device when triggering its "Off" state: -``` +```text INFO (Thread-6) [homeassistant.components.binary_sensor.rfxtrx] Added binary sensor 09130000226707013d70 (Device_id: 226707 Class: LightingDevice Sub: 0) ``` @@ -115,7 +119,7 @@ devices: The *automatic_add* option makes the rfxtrx binary sensor component calculate and display the configuration options for you in the Home Assistant logs: -``` +```text INFO (Thread-6) [homeassistant.components.rfxtrx] rfxtrx: found possible device 226707 for 22670e with the following configuration: data_bits=4 command_on=0xe diff --git a/source/_components/binary_sensor.rpi_gpio.markdown b/source/_components/binary_sensor.rpi_gpio.markdown index 99a7eda5eb4..a59333d82cb 100644 --- a/source/_components/binary_sensor.rpi_gpio.markdown +++ b/source/_components/binary_sensor.rpi_gpio.markdown @@ -1,7 +1,7 @@ --- layout: page -title: "Raspberry PI GPIO Binary Sensor" -description: "Instructions how to integrate the GPIO sensor capability of a Raspberry PI into Home Assistant." +title: "Raspberry Pi GPIO Binary Sensor" +description: "Instructions on how to integrate the GPIO sensor capability of a Raspberry Pi into Home Assistant." date: 2015-08-30 19:00 sidebar: true comments: false diff --git a/source/_components/binary_sensor.rpi_pfio.markdown b/source/_components/binary_sensor.rpi_pfio.markdown index 84404f4d783..d02cfaf2dab 100644 --- a/source/_components/binary_sensor.rpi_pfio.markdown +++ b/source/_components/binary_sensor.rpi_pfio.markdown @@ -1,7 +1,7 @@ --- layout: page title: "PiFace Digital I/O Binary Sensor" -description: "Instructions how to integrate the PiFace Digital I/O module into Home Assistant as a binary sensor." +description: "Instructions on how to integrate the PiFace Digital I/O module into Home Assistant as a binary sensor." date: 2016-05-08 15:00 sidebar: true comments: false diff --git a/source/_components/binary_sensor.satel_integra.markdown b/source/_components/binary_sensor.satel_integra.markdown index 84744aaa9e2..5d879e49664 100644 --- a/source/_components/binary_sensor.satel_integra.markdown +++ b/source/_components/binary_sensor.satel_integra.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Satel Integra Binary Sensor" -description: "Instructions how to integrate Satel Integra binary sensors into Home Assistant." +description: "Instructions on how to integrate Satel Integra binary sensors into Home Assistant." date: 2017-09-07 13:28 sidebar: true comments: false diff --git a/source/_components/binary_sensor.spc.markdown b/source/_components/binary_sensor.spc.markdown index 507f568dd92..624bebfff2a 100644 --- a/source/_components/binary_sensor.spc.markdown +++ b/source/_components/binary_sensor.spc.markdown @@ -1,7 +1,7 @@ --- layout: page title: "SPC Binary Sensor" -description: "Instructions how to integrate Vanderbilt SPC binary sensors into Home Assistant." +description: "Instructions on how to integrate Vanderbilt SPC binary sensors into Home Assistant." date: 2017-05-18 22:05 sidebar: true comments: false diff --git a/source/_components/binary_sensor.tahoma.markdown b/source/_components/binary_sensor.tahoma.markdown new file mode 100644 index 00000000000..1ba160f706d --- /dev/null +++ b/source/_components/binary_sensor.tahoma.markdown @@ -0,0 +1,17 @@ +--- +layout: page +title: "Tahoma Binary Sensor" +description: "Instructions on how to integrate Tahoma binary sensors into Home Assistant." +date: 2018-06-14 21:57 +sidebar: true +comments: false +sharing: true +footer: true +logo: tahoma.png +ha_category: Binary Sensor +ha_release: 0.73 +--- + +The `tahoma` binary sensor platform lets you see binary sensors added to your Tahoma Box in Home Assistant. For example smoke detectors. + +Binary sensors will be added automatically. Please refer to the [component](/components/tahoma/) configuration on how to setup Tahoma. diff --git a/source/_components/binary_sensor.tapsaff.markdown b/source/_components/binary_sensor.tapsaff.markdown index b8e8636af66..233596e6bd1 100644 --- a/source/_components/binary_sensor.tapsaff.markdown +++ b/source/_components/binary_sensor.tapsaff.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Taps Aff" -description: "Instructions how to use the Taps Aff binary sensor in Home Assistant." +description: "Instructions on how to use the Taps Aff binary sensor in Home Assistant." date: 2017-05-28 18:00 sidebar: true comments: false diff --git a/source/_components/binary_sensor.tellduslive.markdown b/source/_components/binary_sensor.tellduslive.markdown index 2a73bea7f46..fc0b988bbf2 100644 --- a/source/_components/binary_sensor.tellduslive.markdown +++ b/source/_components/binary_sensor.tellduslive.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Telldus Binary Sensor" -description: "Instructions how to integrate Telldus Live binary sensors into Home Assistant." +description: "Instructions on how to integrate Telldus Live binary sensors into Home Assistant." date: 2017-10-24 10:09 sidebar: true comments: false diff --git a/source/_components/binary_sensor.template.markdown b/source/_components/binary_sensor.template.markdown index 009f4131ddd..7cc7af6285f 100644 --- a/source/_components/binary_sensor.template.markdown +++ b/source/_components/binary_sensor.template.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Template Binary Sensor" -description: "Instructions how to integrate Template Binary Sensors into Home Assistant." +description: "Instructions on how to integrate Template Binary Sensors into Home Assistant." date: 2016-02-25 15:00 sidebar: true comments: false @@ -49,7 +49,7 @@ binary_sensor: required: false type: string entity_id: - description: Add a list of entity IDs so the sensor only reacts to state changes of these entities. This will reduce the number of times the sensor will try to update its state. + description: A list of entity IDs so the sensor only reacts to state changes of these entities. This can be used if the automatic analysis fails to find all relevant entities. required: false type: string, list device_class: @@ -61,6 +61,14 @@ binary_sensor: description: Defines a template to set the state of the sensor. required: true type: template + icon_template: + description: Defines a template for the icon of the sensor. + required: false + type: template + entity_picture_template: + description: Defines a template for the entity picture of the sensor. + required: false + type: template delay_on: description: The amount of time the template state must be ***met*** before this sensor will switch to `on`. required: false @@ -126,13 +134,11 @@ binary_sensor: ``` {% endraw %} -### {% linkable_title Combining Multiple Sensors, and Using `entity_id` %} +### {% linkable_title Combining Multiple Sensors %} This example combines multiple CO sensors into a single overall status. When using templates with binary sensors, you need to return -`true` or `false` explicitly. `entity_id` is used to limit which -sensors are being monitored to update the state, making computing this -sensor far more efficient. +`true` or `false` explicitly. {% raw %} ```yaml @@ -142,10 +148,6 @@ binary_sensor: co: friendly_name: "CO" device_class: gas - entity_id: - - sensor.bedroom_co_status - - sensor.kitchen_co_status - - sensor.wardrobe_co_status value_template: >- {{ is_state('sensor.bedroom_co_status', 'Ok') and is_state('sensor.kitchen_co_status', 'Ok') @@ -158,7 +160,7 @@ binary_sensor: This example creates a washing machine "load running" sensor by monitoring an energy meter connected to the washer. During the washer's operation, the energy meter will fluctuate wildly, hitting zero frequently even before the load is -finished. By utilizing `off_delay`, we can have this sensor only turn off if +finished. By utilizing `delay_off`, we can have this sensor only turn off if there has been no washer activity for 5 minutes. {% raw %} @@ -190,14 +192,6 @@ binary_sensor: - platform: template sensors: people_home: - entity_id: - - device_tracker.sean - - device_tracker.susan - - binary_sensor.office_124 - - binary_sensor.hallway_134 - - binary_sensor.living_room_139 - - binary_sensor.porch_ms6_1_129 - - binary_sensor.family_room_144 value_template: >- {{ is_state('device_tracker.sean', 'home') or is_state('device_tracker.susan', 'home') diff --git a/source/_components/binary_sensor.threshold.markdown b/source/_components/binary_sensor.threshold.markdown index c2e9e875b39..21cc02b9fd6 100644 --- a/source/_components/binary_sensor.threshold.markdown +++ b/source/_components/binary_sensor.threshold.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Threshold Binary Sensor" -description: "Instructions how to integrate threshold binary sensors into Home Assistant." +description: "Instructions on how to integrate threshold binary sensors into Home Assistant." date: 2016-11-26 12:10 sidebar: true comments: false @@ -14,15 +14,17 @@ ha_release: 0.34 --- -The `threshold` binary sensor platform observes the state of another sensor. If the value is below (`lower`) or higher (`upper`) than the given threshold then state of the threshold sensor is changed. +The `threshold` binary sensor platform observes the state of another sensor. If the value is below (`lower`) or higher (`upper`) than the given threshold then state of the threshold sensor is changed. It support also a range if `lower` and `upper` are given. If the sensor is configured with no hysteresis and the sensor value is equal to the threshold, the sensor is turned off since it is not `lower` or `upper` with respect to the threshold. It's an alternative to the template binary sensor's `value_template:` to get the abnormal/too high/too low states. +{% raw %} ```yaml -{% raw %}{{ states.sensor.furnace.state > 2.5 }}{% endraw %} +{{ states.sensor.furnace.state > 2.5 }} ``` +{% endraw %} To enable the threshold sensor, add the following lines to your `configuration.yaml`: @@ -30,15 +32,32 @@ To enable the threshold sensor, add the following lines to your `configuration.y # Example configuration.yaml entry binary_sensor: - platform: threshold - threshold: 15 - type: lower entity_id: sensor.random + lower: 20 ``` -Configuration variables: +{% configuration %} +entity_id: + description: "The entity to monitor. Only [sensors](/components/sensor/) are supported." + required: true + type: entity_id +lower: + description: The lower threshold which the observed value is compared against. + required: false + type: float +upper: + description: The upper threshold which the observed value is compared against. + required: false + type: float +hysteresis: + description: The distance the observed value must be from the threshold before the state is changed. + required: false + type: float + default: 0.0 +name: + description: Name of the sensor to use in the frontend. + required: false + type: string + default: +{% endconfiguration %} -- **entity_id** (*Required*): The entity to monitor. Only [sensors](/components/sensor/) are supported. -- **threshold** (*Required*): The threshold which the observed value is compared against. -- **type** (*Required*): `lower` if the value needs to be below the threshold or `upper` if higher. -- **hysteresis** (*Optional*): The distance the observed value must be from the threshold before the state is changed. Defaults to `0.0` -- **name** (*Optional*): Name of the sensor to use in the frontend. Defaults to `Stats`. diff --git a/source/_components/binary_sensor.trend.markdown b/source/_components/binary_sensor.trend.markdown index 41ac39437eb..dae3d1c9ed7 100644 --- a/source/_components/binary_sensor.trend.markdown +++ b/source/_components/binary_sensor.trend.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Trend Binary Sensor" -description: "Instructions how to integrate Trend binary sensors into Home Assistant." +description: "Instructions on how to integrate Trend binary sensors into Home Assistant." date: 2016-09-05 10:00 sidebar: true comments: false @@ -22,8 +22,8 @@ To enable Trend binary sensors in your installation, add the following to your ` binary_sensor: - platform: trend sensors: - solar_angle: - entity_id: sun.sun + cpu_speed: + entity_id: sensor.cpu_speed ``` Configuration variables: @@ -33,9 +33,9 @@ Configuration variables: - **attribute** (*Optional*): The attribute of the entity that this sensor tracks. If no attribute is specified then the sensor will track the state. - **device_class** (*Optional*): The [type/class](/components/binary_sensor/) of the sensor to set the icon in the frontend. - **friendly_name** (*Optional*): Name to use in the Frontend. - - **invert** (*Optional*): Invert the result (so `true` means descending rather than ascending). Defaults to `False` + - **invert** (*Optional*): Invert the result. A `true` value would mean descending rather than ascending. Defaults to `False` - **max_samples** (*Optional*): Limit the maximum number of stored samples. Defaults to `2`. - - **min_gradient** (*Optional*): The minimum rate at which the observed value must be changing for this sensor to switch on. Defaults to `0.0` + - **min_gradient** (*Optional*): The minimum rate at which the observed value must be changing for this sensor to switch on. The gradient is measured in sensor units per second. Defaults to `0.0` - **sample_duration** (*Optional*): The duration **in seconds** to store samples for. Samples older than this value will be discarded. Defaults to `0` ## {% linkable_title Using Multiple Samples %} @@ -60,8 +60,10 @@ binary_sensor: sensors: sun_rising: entity_id: sun.sun + attribute: elevation ``` + This example creates two sensors to indicate whether the temperature is rising or falling at a rate of at least 3 degrees an hour, and collects samples over a two hour period: ```yaml diff --git a/source/_components/binary_sensor.upcloud.markdown b/source/_components/binary_sensor.upcloud.markdown new file mode 100644 index 00000000000..6cae22e876c --- /dev/null +++ b/source/_components/binary_sensor.upcloud.markdown @@ -0,0 +1,34 @@ +--- +layout: page +title: UpCloud Binary Sensor +description: Instructions on how to set up UpCloud binary sensors within Home Assistant. +date: 2018-01-28 20:00 +sidebar: true +comments: false +sharing: true +footer: true +ha_category: System Monitor +logo: upcloud.png +ha_release: 0.65 +ha_iot_class: Cloud Polling +--- + +The `upcloud` binary sensor platform allows you to monitor your UpCloud servers. + +To use your UpCloud servers, you first have to set up your [UpCloud hub](/components/upcloud/) and then add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +binary_sensor: + - platform: upcloud + servers: + - 002167b7-4cb1-44b7-869f-e0900ddeeae1 + - 00886296-6137-4074-afe3-068e16d89d00 +``` + +{% configuration %} +servers: + description: List of servers you want to monitor. + required: true + type: list +{% endconfiguration %} diff --git a/source/_components/binary_sensor.uptimerobot.markdown b/source/_components/binary_sensor.uptimerobot.markdown new file mode 100644 index 00000000000..7b37252f399 --- /dev/null +++ b/source/_components/binary_sensor.uptimerobot.markdown @@ -0,0 +1,35 @@ +--- +layout: page +title: "Uptime Robot" +description: "Instructions on how to set up Uptime Robot within Home Assistant." +date: 2018-05-29 21:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: uptimerobot.png +ha_category: Binary Sensor +ha_release: "0.72" +ha_iot_class: "Cloud Polling" +--- + +The `uptimerobot` binary_sensor platform allows you get the status for all of your monitors from your account on [Uptime Robot.]( https://uptimerobot.com) + +## Example for `configuration.yaml` : + +```yaml +binary_sensor: + - platform: uptimerobot + api_key: u432898-d2507e493b31217e6c64fd35 +``` + +{% configuration %} +api_key: + description: Your Uptime Robot API key. + required: true + type: string +{% endconfiguration %} + +All the data will be fetch from [Uptime Robot](https://uptimerobot.com). + +To get your API key, go to [My Settings](https://uptimerobot.com/dashboard#mySettings) on the Uptime Robot website, at the bottom you will find your "Main API Key". diff --git a/source/_components/binary_sensor.velbus.markdown b/source/_components/binary_sensor.velbus.markdown index 7c9c9ef62dd..dc476b53f12 100644 --- a/source/_components/binary_sensor.velbus.markdown +++ b/source/_components/binary_sensor.velbus.markdown @@ -15,28 +15,47 @@ ha_release: "0.50" The `velbus` binary_sensor allows you to control [Velbus](http://www.velbus.eu) connected wall switches. +## {% linkable_title Configuration %} + To use your Velbus wall switches in your installation, add the following to your `configuration.yaml` file: ```yaml # Example configuration.yaml entry - binary_sensor: - platform: velbus devices: - - name: Wall Switch 1 - module: 0xda - channel: 4 - - name: Wall Switch 2 - module: 0xbc - channel: 1 - is_pushbutton: true + - name: Wall Switch 1 + module: 0xda + channel: 4 + - name: Wall Switch 2 + module: 0xbc + channel: 1 + is_pushbutton: true ``` -Configuration variables: -- **devices** array (*Required*): The array contains the binary sensors to configure - - **name** (*Required*): Name of the binary sensor. - - **module** (*Required*): The hexadecimal module address - - **channel** (*Required*): The channel number in the module. - - **is_pushbutton** (*Optional*): Boolean to indicate if a wall switch is a push button or not (default: false) +{% configuration %} +devices: + description: The list contains the binary sensors to configure. + required: true + type: map + keys: + name: + description: Name to use in the frontend. + required: true + type: string + module: + description: The hexadecimal module address. + required: true + type: string + channel: + description: The channel number in the module. + required: true + type: string + is_pushbutton: + description: Set to indicate if a wall switch is a push button or not. + required: false + type: boolean + default: false +{% endconfiguration %} For hub configuration, see [the Velbus component](/components/velbus/). diff --git a/source/_components/binary_sensor.vera.markdown b/source/_components/binary_sensor.vera.markdown index f28c1978fae..d5e5d9fb14d 100644 --- a/source/_components/binary_sensor.vera.markdown +++ b/source/_components/binary_sensor.vera.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Vera Binary Sensor" -description: "Instructions how to integrate Vera binary sensors into Home Assistant." +description: "Instructions on how to integrate Vera binary sensors into Home Assistant." date: 2016-03-26 23:00 sidebar: true comments: false diff --git a/source/_components/binary_sensor.verisure.markdown b/source/_components/binary_sensor.verisure.markdown index 026ad16ab46..1f9b9f0f4e3 100644 --- a/source/_components/binary_sensor.verisure.markdown +++ b/source/_components/binary_sensor.verisure.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Verisure Binary Sensor" -description: "Instructions how to integrate Verisure binary sensors into Home Assistant." +description: "Instructions on how to integrate Verisure binary sensors into Home Assistant." date: 2016-02-23 21:31 +0100 sidebar: true comments: false diff --git a/source/_components/binary_sensor.wink.markdown b/source/_components/binary_sensor.wink.markdown index 862a6b258ec..1d23f5bf7c1 100644 --- a/source/_components/binary_sensor.wink.markdown +++ b/source/_components/binary_sensor.wink.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Wink Binary Sensor" -description: "Instructions how to setup the Wink binary sensors within Home Assistant." +description: "Instructions on how to setup the Wink binary sensors within Home Assistant." date: 2015-01-20 22:36 sidebar: true comments: false diff --git a/source/_components/binary_sensor.wirelesstag.markdown b/source/_components/binary_sensor.wirelesstag.markdown new file mode 100644 index 00000000000..efe3eae81f4 --- /dev/null +++ b/source/_components/binary_sensor.wirelesstag.markdown @@ -0,0 +1,48 @@ +--- +layout: page +title: "WirelessTag Binary Sensor" +description: "Instructions on how to integrate Wireless Tags sensors within Home Assistant." +date: 2018-03-26 21:49 +comments: false +sidebar: true +sharing: true +footer: true +logo: wirelesstag.png +ha_category: Binary Sensor +ha_iot_class: "Local Push and Cloud Polling" +ha_release: 0.68 +--- + +To get your [wirelesstag.net](http://wirelesstag.net) binary sensors working within Home Assistant, please follow the instructions for the general [WirelessTag component](/components/wirelesstag). + +To enable tags set up with your [wirelesstag.net](http://wirelesstag.net) account, add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +binary_sensor: + - platform: wirelesstag + monitored_conditions: + - presence + - door + - low_battery +``` + +{% configuration %} + monitored_conditions: + description: The conditions types to monitor; valid values are specified below + required: true + type: list +{% endconfiguration %} + +The following conditions can be monitored: + +* (`presence`): On means in range, Off means out of range. +* (`motion`): On when a movement was detected, Off when clear. +* (`door`): On when a door is open, Off when the door is closed. +* (`cold`): On means temperature become too cold, Off means normal. +* (`heat`): On means hot, Off means normal. +* (`dry`): On means too dry (humidity), Off means normal. +* (`wet`): On means too wet (humidity), Off means normal. +* (`light`): On means light detected, Off means no light. +* (`moisture`): On means moisture detected (wet), Off means no moisture (dry). +* (`low_battery`): On means tag battery is low, Off means normal. diff --git a/source/_components/binary_sensor.workday.markdown b/source/_components/binary_sensor.workday.markdown index 45f1d2386cc..1ba1f8bd8c7 100644 --- a/source/_components/binary_sensor.workday.markdown +++ b/source/_components/binary_sensor.workday.markdown @@ -15,6 +15,10 @@ ha_release: 0.41 The `workday` binary sensor indicates, whether the current day is a workday or not. It allows specifying, which days of the week counts as workdays and also uses the python module [holidays](https://pypi.python.org/pypi/holidays) to incorporate information about region-specific public holidays. +## {% linkable_title Configuration %} + +Check the [country list](https://github.com/dr-prodigy/python-holidays#available-countries) for available province. + To enable the `workday` sensor in your installation, add the following to your `configuration.yaml` file: ```yaml @@ -22,12 +26,14 @@ To enable the `workday` sensor in your installation, add the following to your ` binary_sensor: - platform: workday country: DE + workdays: [mon, wed, fri] ``` Configuration variables: -- **country** (*Required*): Country code according to [holidays](https://pypi.python.org/pypi/holidays/0.8.1) notation. -- **province** (*Optional*): Province code according to [holidays](https://pypi.python.org/pypi/holidays/0.8.1) notation. Defaults to None. +- **name** (*Optional*): A name for this sensor. Defaults to *Workday Sensor* +- **country** (*Required*): Country code according to [holidays](https://pypi.python.org/pypi/holidays/0.9.4) notation. +- **province** (*Optional*): Province code according to [holidays](https://pypi.python.org/pypi/holidays/0.9.4) notation. Defaults to None. - **workdays** (*Optional*): List of workdays. Defaults to `mon`, `tue`, `wed`, `thu`, `fri`. - **excludes** (*Optional*): List of workday excludes. Defaults to `sat`, `sun`, `holiday`. - **days_offset** (*Optional*): Set days offset. Defaults to `0`. @@ -35,6 +41,7 @@ Configuration variables: Days are specified as follows: `mon`, `tue`, `wed`, `thu`, `fri`, `sat`, `sun`. The keyword `holiday` is used for public holidays identified by the holidays module.

+If you use the sensor for Norway (`NO`) you need to wrap `NO`in quotes or write the name in full. Otherwise the value is evaluated as `False`. If you use the sensor for Canada (`CA`) with Ontario (`ON`) as `province:` then you need to wrap `ON` in quotes. Otherwise the value is evaluated as `True` (check the YAML documentation for further details) and the sensor will not work.

diff --git a/source/_components/binary_sensor.xiaomi_aqara.markdown b/source/_components/binary_sensor.xiaomi_aqara.markdown index a6eb4e95d8e..6f33659f78b 100644 --- a/source/_components/binary_sensor.xiaomi_aqara.markdown +++ b/source/_components/binary_sensor.xiaomi_aqara.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Xiaomi Binary Sensor" -description: "Instructions how to setup the Xiaomi binary sensors within Home Assistant." +description: "Instructions on how to setup the Xiaomi binary sensors within Home Assistant." date: 2017-07-21 16:34 sidebar: true comments: false @@ -21,20 +21,20 @@ The requirement is that you have setup the [`xiaomi aqara` component](/component ### {% linkable_title Type of sensors supported %} -| Name | ZigBee entity | Model no. | States | Event | Event key | Event values | -|-----------------------------------|---------------------|----------------------|----------------------------------------------------|-----------------------------------------|--------------------------------------------------------------------------------------------------------------------------| -| Motion Sensor (1st gen) | motion | RTCGQ01LM | on, off | `motion` | | | -| Motion Sensor (2nd gen) | sensor_motion.aq2 | RTCGQ11LM | on, off | `motion` | | | -| Door and Window Sensor (1st gen) | magnet | WSDCGQ01LM | on, off | | | | -| Door and Window Sensor (2nd gen) | sensor_magnet.aq2 | MCCGQ11LM | on, off | | | | -| Smoke Detector | smoke | JTYJ-GD-01LM/BW | on, off | | | | -| Gas Leak Detector | natgas | JTQJ-BF-01LM/BW | on, off | | | | -| Water Leak Sensor | sensor_wleak.aq1 | SJCGQ11LM | on, off | | | | -| Button (1st gen) | switch | WXKG01LM | on (thru long_click_press), off | `click` | `click_type` | `long_click_press`, `long_click_release`, `hold`, `single`, `double` | -| Button (2nd gen) | sensor_switch.aq2 | WXKG11LM | off (always) | `click` | `click_type` | `single`, `double` | -| Aqara Wireless Switch (Single) | 86sw1 | WXKG03LM | off (always) | `click` | `click_type` | `single` | -| Aqara Wireless Switch (Double) | 86sw2 | WXKG02LM | off (always) | `click` | `click_type` | `single`, `both` | -| Cube | cube | MFKZQ01LM | off (always) | `cube_action` | `action_type`, `action_value` (rotate) | `flip90`, `flip180`, `move`, `tap_twice`, `shake_air`, `swing`, `alert`, `free_fall`, `rotate` (degrees at action_value) | +| Name | ZigBee entity | Model no. | States | Event | Event key | Event values | +| ---- | ------------- | --------- | ------ | ----- | --------- | ------------ | +| Motion Sensor (1st gen) | motion | RTCGQ01LM | on, off | `motion` | | | +| Motion Sensor (2nd gen) | sensor_motion.aq2 | RTCGQ11LM | on, off | `motion` | | | +| Door and Window Sensor (1st gen) | magnet | WSDCGQ01LM | on, off | | | | +| Door and Window Sensor (2nd gen) | sensor_magnet.aq2 | MCCGQ11LM | on, off | | | | +| Smoke Detector | smoke | JTYJ-GD-01LM/BW | on, off | | | | +| Gas Leak Detector | natgas | JTQJ-BF-01LM/BW | on, off | | | | +| Water Leak Sensor | sensor_wleak.aq1 | SJCGQ11LM | on, off | | | | +| Button (1st gen) | switch | WXKG01LM | on (through long_click_press), off | `click`| `click_type`| `long_click_press`, `long_click_release`, `hold`, `single`, `double` | +| Button (2nd gen) | sensor_switch.aq2 | WXKG11LM | off (always) | `click` | `click_type` | `single`, `double` | +| Aqara Wireless Switch (Single) | 86sw1 | WXKG03LM | off (always) | `click` | `click_type` | `single` | +| Aqara Wireless Switch (Double) | 86sw2 | WXKG02LM | off (always) | `click` | `click_type` | `single`, `both` | +| Cube | cube | MFKZQ01LM | off (always) | `cube_action` | `action_type`, `action_value` (rotate) | `flip90`, `flip180`, `move`, `tap_twice`, `shake_air`, `swing`, `alert`, `free_fall`, `rotate` (degrees at action_value) | ### {% linkable_title Automation examples %} diff --git a/source/_components/binary_sensor.zha.markdown b/source/_components/binary_sensor.zha.markdown index 755e4396ed6..df5853d6700 100644 --- a/source/_components/binary_sensor.zha.markdown +++ b/source/_components/binary_sensor.zha.markdown @@ -1,7 +1,7 @@ --- layout: page title: "ZigBee Home Automation Binary Sensor" -description: "Instructions how to setup ZigBee Home Automation binary sensors within Home Assistant." +description: "Instructions on how to setup ZigBee Home Automation binary sensors within Home Assistant." date: 2017-02-22 00:00 sidebar: true comments: false diff --git a/source/_components/binary_sensor.zigbee.markdown b/source/_components/binary_sensor.zigbee.markdown index 213721cb65d..233ebb2a91a 100644 --- a/source/_components/binary_sensor.zigbee.markdown +++ b/source/_components/binary_sensor.zigbee.markdown @@ -13,7 +13,7 @@ ha_release: 0.12 ha_iot_class: "Local Polling" --- -A `zigbee` binary sensor in this context is a device connected to one of the digital input pins on a [ZigBee](http://www.zigbee.org/) module. The states reported by such a device are limited to `on` or `off`. By default, a binary sensor is considered `on` when the ZigBee device's digital input pin is held 'high' and considered `off` when it is held `low`. This behaviour can be inverted by setting the `on_state` configuration variable to `low`. +A `zigbee` binary sensor in this context is a device connected to one of the digital input pins on a [ZigBee](http://www.zigbee.org/) module. The states reported by such a device are limited to `on` or `off`. By default, a binary sensor is considered `on` when the ZigBee device's digital input pin is held 'high' and considered `off` when it is held `low`. This behavior can be inverted by setting the `on_state` configuration variable to `low`. To enable a digital input pin as binary sensor in your installation, add the following lines to your `configuration.yaml`: diff --git a/source/_components/binary_sensor.zwave.markdown b/source/_components/binary_sensor.zwave.markdown index 233411d4f2e..85c4cc30bba 100644 --- a/source/_components/binary_sensor.zwave.markdown +++ b/source/_components/binary_sensor.zwave.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Z-Wave Binary Sensor" -description: "Instructions how to setup the Z-Wave binary sensors within Home Assistant." +description: "Instructions on how to setup the Z-Wave binary sensors within Home Assistant." date: 2016-02-22 07:00 sidebar: true comments: false diff --git a/source/_components/bloomsky.markdown b/source/_components/bloomsky.markdown index 25ab683a228..620b390e69b 100644 --- a/source/_components/bloomsky.markdown +++ b/source/_components/bloomsky.markdown @@ -1,7 +1,7 @@ --- layout: page title: "BloomSky" -description: "Instructions how to integrate the BloomSky within Home Assistant." +description: "Instructions on how to integrate the BloomSky within Home Assistant." date: 2016-02-03 20:00 sidebar: true comments: false @@ -13,7 +13,6 @@ ha_release: 0.14 ha_iot_class: "Cloud Polling" --- - The `bloomsky` component allows you to access your [BloomSky](https://www.bloomsky.com/) weather station's [sensors](/components/sensor.bloomsky), [binary sensors](/components/binary_sensor.bloomsky), and [camera](/components/camera.bloomsky) from Home Assistant. Obtain your API key from your [BloomSky dashboard](https://dashboard.bloomsky.com). Click `developers` in the bottom left of the screen. diff --git a/source/_components/bmw_connected_drive.markdown b/source/_components/bmw_connected_drive.markdown new file mode 100644 index 00000000000..94f493ff242 --- /dev/null +++ b/source/_components/bmw_connected_drive.markdown @@ -0,0 +1,89 @@ +--- +layout: page +title: "BMW Connected Drive" +description: "Instructions on how to setup your BMW Connected Drive account with Home Assistant." +date: 2018-01-10 23:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: bmw.png +ha_category: Hub +ha_release: 0.64 +--- + +This component lets you retrieve data on your BMW vehicle from the BMW Connected Drive portal. You need to have a working BMW Connected Drive account, and a Connected Drive enabled vehicle for this to work. + +For compatibility with your BMW vehicle check the [bimmer_connected page](https://github.com/m1n3rva/bimmer_connected) on github. + +To enable this component in your installation, add the following to your +`configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +bmw_connected_drive: + name: + username: USERNAME_BMW_CONNECTED_DRIVE + password: PASSWORD_BMW_CONNECTED_DRIVE + region: one of "north_america", "china" , "rest_of_world" +``` + +{% configuration %} +bmw_connected_drive: + description: configuration + required: true + type: map + keys: + name: + description: Name of your account in Home Assistant. + required: true + type: string + username: + description: Your BMW Connected Drive username. + required: true + type: string + password: + description: Your BMW Connected Drive password. + required: true + type: string + region: + description: "The region of your Connected Drive account. Please use of these values: `north_america`, `china`, `rest_of_world`" + required: true + type: string +{% endconfiguration %} + +## {% linkable_title Services %} + +The `bmw_connected_drive` component offers several services. In case you need to provide the vehicle identification number (VIN) as a parameter, you can see the VIN in the attributes of the device tracker for the vehicle. The VIN is a 17 digit alphanumeric string, e.g., `WBANXXXXXX1234567`. + +Using these services will impact the state of your vehicle. So use these services with care! + +### {% linkable_title Locking and unlocking %} + +The vehicle can be locked and unlocked via the lock component that is created automatically for each vehicle. Before invoking these services, make sure it's safe to lock/unlock the vehicle in the current situation. + +### {% linkable_title Air condition %} + +The air condition of the vehicle can be activated with the service `bmw_connected_drive.activate_air_conditioning`. + +What exactly is started here depends on the type of vehicle. It might range from just ventilation over auxiliary heating to real air conditioning. If your vehicle is equipped with auxiliary heating, only trigger this service if the vehicle is parked in a location where it is safe to use it (e.g., not in an underground parking or closed garage). + +The vehicle is identified via the parameter `vin`. + +### {% linkable_title Sound the horn %} + +The service `bmw_connected_drive.sound_horn` sounds the horn of the vehicle. Use this feature responsibly, as it might annoy your neighbors. The vehicle is identified via the parameter `vin`. + +### {% linkable_title Flash the lights %} + +The service `bmw_connected_drive.light_flash' flashes the lights of the vehicle. The vehicle is identified via the parameter `vin`. + +### {% linkable_title Update the state %} + +The service `bmw_connected_drive.update_state`fetches the last state of the vehicles of all your accounts from the BMW server. This does *not* trigger an update from the vehicle; it gets the data from the BMW servers. So this service does *not* interact with your vehicles. + +This service does not require any attributes. + +## {% linkable_title Disclaimer %} + +This software is not affiliated with or endorsed by BMW Group. diff --git a/source/_components/browser.markdown b/source/_components/browser.markdown index c5fa4b424eb..6325fef367a 100644 --- a/source/_components/browser.markdown +++ b/source/_components/browser.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Browser" -description: "Instructions how to setup the browser component with Home Assistant." +description: "Instructions on how to setup the browser component with Home Assistant." date: 2015-01-24 14:39 sidebar: true comments: false diff --git a/source/_components/calendar.caldav.markdown b/source/_components/calendar.caldav.markdown new file mode 100644 index 00000000000..8ea6b6ad087 --- /dev/null +++ b/source/_components/calendar.caldav.markdown @@ -0,0 +1,169 @@ +--- +layout: page +title: "CalDav" +description: "Instructions on how to integrate a WebDav calendar into Home Assistant." +date: 2017-11-27 23:14 +sidebar: true +comments: false +sharing: true +footer: true +ha_category: Calendar +ha_iot_class: "Cloud Polling" +ha_release: "0.60" +--- + + +The `caldav` platform allows you to connect to your WebDav calendar and generate binary sensors. A different sensor will be created for each individual calendar, or you can specify custom calendars which match a criteria you define (more on that below). These sensors will be `on` if you have an on going event in that calendar or `off` if the event is later in time, or if there is no event at all. The WebDav calendar get updated roughly every 15 minutes. + +### {% linkable_title Prerequisites %} + +You need to have a CalDav server and credentials for it. This component was tested against [Baikal](http://sabre.io/baikal/) but any component complying with the RFC4791 should work. [Nextcloud](https://nextcloud.com/) and [Owncloud](https://owncloud.org/) work fine. + +You might need some additional system packages to compile the Python caldav library. On a Debian based system, install them by: + +```bash +$ sudo apt-get install libxml2-dev libxslt1-dev zlib1g-dev +``` + +### {% linkable_title Basic Setup %} + +To integrate a WebDav calendar in Home Assistant, add the following section to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry for baikal +calendar: + - platform: caldav + username: john.doe@test.com + password: !secret caldav + url: https://baikal.my-server.net/cal.php/calendars/john.doe@test.com/default +``` + +```yaml +# Example configuration.yaml entry for nextcloud, calendars will be found automatically +calendar: + - platform: caldav + username: john.doe + password: !secret caldav + url: https://nextcloud.example.com/remote.php/dav +``` + +This example will generate default binary sensors for each calendar you have in your account. Those calendars will be `on` when there is an ongoing event and `off` if not. Events that last a whole day are ignored in those calendars. You have to setup custom calendars in order to take them into account or for advanced event filtering. + + +### {% linkable_title Custom calendars %} + +You have the possibility to create multiple binary sensors for events that match certain conditions. + +```yaml +# Example configuration.yaml entry +calendar: + - platform: caldav + username: john.doe@test.com + password: !secret caldav + url: https://baikal.my-server.net/cal.php/calendars/john.doe@test.com/default + custom_calendars: + - name: 'HomeOffice' + calendar: 'Agenda' + search: 'HomeOffice' + - name: 'WarmupFlat' + calendar: 'Agenda' + search: 'Warmup' +``` + +This will create two binary sensors for the calendar name Agenda: "HomeOffice" and "WarmupFlat". Those sensors will be `on` if there is an ongoing event matching the regular expression specified in `search`. In custom calendars, events that last a whole day are taken into account. + +Please note that when you configure custom calendars, the default ones are not created anymore. + +{% configuration %} +url: + required: true + description: The full URL to your calendars. + type: string +username: + required: false + description: Username for authentication. + type: string +password: + required: false + description: Password for authentication. + type: string +calendars: + required: false + description: List of the calendars to filter. Empty or absent means no filtering, i.e. all calendars will be added. + type: list +custom_calendars: + required: false + description: Details on any custom binary sensor calendars you want to create. + type: list + keys: + name: + required: true + description: The name of your custom calendar. + type: string + calendar: + required: true + description: The source calendar to search on. + type: string + search: + required: true + description: Regular expression for filtering the events based on the content of their summary, description or location. + type: string +{% endconfiguration %} + + +### {% linkable_title Sensor attributes %} + + - **offset_reached**: If set in the event title and parsed out will be on/off once the offset in the title in minutes is reached. So the title Very important meeting !!-10 would trigger this attribute to be on 10 minutes before the event starts. + - **all_day**: `True/False` if this is an all day event. Will be `False` if there is no event found. + - **message**: The event title with the `search` values extracted. So in the above example for `offset_reached` the message would be set to Very important meeting + - **description**: The event description. + - **location**: The event Location. + - **start_time**: Start time of event. + - **end_time**: End time of event. + +### {% linkable_title Examples %} + +All events of the calendars "private" and "holidays". Note that all day events are not included. +```yaml +# Example configuration.yaml entry for nextcloud +calendar: + - platform: caldav + url: https://nextcloud.example.com/remote.php/dav + username: 'me' + password: !secret caldav + calendars: + - private + - holidays +``` + +Full example with automation to wake up to music if not holiday. Prerequisite: you have a calendar named "work" where you create calendar entries containing "Holiday". + +Custom calendar names are built from the main calendar + name of the custom calendar. + +```yaml +# configuration.yaml +calendar: + - platform: caldav + url: https://nextcloud.example.com/remote.php/dav + username: 'me' + password: !secret caldav + custom_calendars: + - name: holiday + calendar: work + search: 'Holiday' + +# automations.yaml +- id: wakeup + alias: worktime wakeup + trigger: + platform: time + at: 06:40:00 + action: + - service: media_player.media_play + entity_id: media_player.bedroom + condition: + - condition: state + entity_id: calendar.work_holiday + state: 'off' + +``` diff --git a/source/_components/calendar.google.markdown b/source/_components/calendar.google.markdown index 658dae1f2bc..73860367c8c 100644 --- a/source/_components/calendar.google.markdown +++ b/source/_components/calendar.google.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Google Calendar Event" -description: "Instructions how to use Google Calendars in Home Assistant." +description: "Instructions on how to use Google Calendars in Home Assistant." date: 2015-05-08 17:15 sidebar: true comments: false @@ -14,55 +14,66 @@ ha_release: 0.33 --- -This platform allows you to connect to your [Google Calendars](https://calendar.google.com) and generate binary sensors. The sensors created can trigger based on any event on the calendar or only for matching events. When you first setup this component it will generate a new configuration file *google_calendars.yaml* that will contain information about all of the calendars you can see. +The `google` calendar platform allows you to connect to your [Google Calendars](https://calendar.google.com) and generate binary sensors. The sensors created can trigger based on any event on the calendar or only for matching events. When you first setup this component it will generate a new configuration file `google_calendars.yaml` that will contain information about all of the calendars you can see. -### {% linkable_title Prerequisites %} +## {% linkable_title Prerequisites %} Generate a Client ID and Client Secret on [Google Developers Console](https://console.developers.google.com/start/api?id=calendar). 1. Follow the wizard using the following information. 1. When it gets to the point of asking _Which API are you using?_ just click cancel. -1. Click on the tab 'OAuth consent screen'. +1. Under APIs & Services > Credentials, click on the tab 'OAuth consent screen'. 1. Set 'Product name shown to users' to anything you want. We suggest Home-Assistant. 1. Save this page. You don't have to fill out anything else there. 1. Click 'Create credentials' -> OAuth client ID. 1. Set the Application type to 'Other' and give this credential set a name then click Create. -1. Save the client ID and secret as you will need to put these in your configuration.yaml file. +1. Save the client ID and secret as you will need to put these in your `configuration.yaml` file. +1. Click on "Library", search for "Google Calendar API" and enable it. -### {% linkable_title Basic Setup %} +## {% linkable_title Configuration %} To integrate Google Calendar in Home Assistant, add the following section to your `configuration.yaml` file: ```yaml # Example configuration.yaml entry google: - client_id: *Value_created_from_steps_above* - client_secret: *Value_created_from_steps_above* + client_id: YOUR_CLIENT_ID + client_secret: YOUR_CLIENT_SECRET ``` -Configuration variables: - -- **client_id** (*Required*): Use the value you generated in the Prerequisites stage. -- **client_secret** (*Required*): Use the value you generated in the Prerequisites stage. -- **track_new_calendar** (*Optional*): Will automatically generate a binary sensor when a new calendar is detected. The system scans for new calendars on startup. By default this is set to `True`. +{% configuration %} +client_id: + description: Use the value you generated in the Prerequisites stage. + required: true + type: string +client_secret: + description: Use the value you generated in the Prerequisites stage. + required: true + type: string +track_new_calendar: + description: Will automatically generate a binary sensor when a new calendar is detected. The system scans for new calendars only on startup. + required: false + type: boolean + default: true +{% endconfiguration %} The next steps will require you to have Home Assistant running. After you have it running complete the Google authentication that pops up. It will give you a URL and a code to enter. This will grant your Home Assistant service access to all the Google Calendars that the account you authenticate with can read. This is a Read-Only view of these calendars. +## {% linkable_title Calendar Configuration %} -### {% linkable_title Calendar Configuration %} -Editing `google_calendars.yaml` +Editing the `google_calendars.yaml` file. A basic entry for a single calendar looks like: ```yaml -- cal_id: "***************************@group.calendar.google.com" +- cal_id: "*****@group.calendar.google.com" entities: - device_id: test_everything name: Give me everything track: true -- cal_id: "***************************@group.calendar.google.com" +- cal_id: "*****@group.calendar.google.com" entities: - device_id: test_important name: Important Stuff @@ -78,38 +89,28 @@ A basic entry for a single calendar looks like: Variables: - **cal_id**: The Google generated unique id for this calendar. **DO NOT CHANGE** - - **entities**: Yes, you can have multiple sensors for a calendar! - - **device_id**: (*Required*): The name that all your automations/scripts will use to reference this device. - - **name**: (*Required*): What is the name of your sensor that you'll see in the frontend. - - **track**: (*Required*): Should we create a sensor `True` or ignore it `False`? - - **search**: (*Optional*): If set will only trigger for matched events. - - **offset**: (*Optional*): A set of characters that precede a number in the event title for designating a pre-trigger state change on the sensor. (Default: `!!`) - + - **ignore_availability**: (*Optional*): Should we respect `free`/`busy` flags? (Defaults to `true`) +   From this we will end up with the binary sensors `calendar.test_unimportant` and `calendar.test_important` which will toggle themselves on/off based on events on the same calendar that match the search value set for each. You'll also have a sensor `calendar.test_everything` that will not filter events out and always show the next event available. But what if you only wanted it to toggle based on all events? Just leave out the *search* parameter. -**Note**: If you use a `#` sign for `search` then wrap the whole search term in quotes. Otherwise everything following the hash sign would be considered a YAML comment. - +

+If you use a `#` sign for `search` then wrap the whole search term in quotes. Otherwise everything following the hash sign would be considered a YAML comment. +

### {% linkable_title Sensor attributes %} - **offset_reached**: If set in the event title and parsed out will be `on`/`off` once the offset in the title in minutes is reached. So the title `Very important meeting #Important !!-10` would trigger this attribute to be `on` 10 minutes before the event starts. - - **all_day**: `True`/`False` if this is an all day event. Will be `False` if there is no event found. - - **message**: The event title with the `search` and `offset` values extracted. So in the above example for **offset_reached** the **message** would be set to `Very important meeting` - - **description**: The event description. - - **location**: The event Location. - - **start_time**: Start time of event. - - **end_time**: End time of event. diff --git a/source/_components/calendar.markdown b/source/_components/calendar.markdown index f18e94902c3..4b69b5e6fe8 100644 --- a/source/_components/calendar.markdown +++ b/source/_components/calendar.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Calendar" -description: "Instructions how to integrate calendars within Home Assistant." +description: "Instructions on how to integrate calendars within Home Assistant." date: 2016-11-19 08:36 sidebar: true comments: false diff --git a/source/_components/calendar.todoist.markdown b/source/_components/calendar.todoist.markdown index 65401ebc643..c416ddb50d7 100644 --- a/source/_components/calendar.todoist.markdown +++ b/source/_components/calendar.todoist.markdown @@ -63,7 +63,7 @@ calendar: - Calculus II ``` -(See [here](https://home-assistant.io/docs/configuration/secrets/) for more details about what that `!secret` does -- it's not exclusive to Todoist, and can help keep your API keys and passwords a little safer!) +(See [here](/docs/configuration/secrets/) for more details about what that `!secret` does -- it's not exclusive to Todoist, and can help keep your API keys and passwords a little safer!) As you can see, there are 4 custom projects here: @@ -109,9 +109,9 @@ Home Assistant does its best to determine what task in each project is "most" im ### {% linkable_title Services %} -Todoist also comes with access to a service, `todoist.new_task`. This service can be used to create a new Todoist task. You can specify labels and a project, or you can leave them blank, and the task will go to your "Inbox" project. +Todoist also comes with access to a service, `calendar.todoist_new_task`. This service can be used to create a new Todoist task. You can specify labels and a project, or you can leave them blank, and the task will go to your "Inbox" project. -Here's an example JSON payload: +Here are two example JSON payloads resulting in the same task: ```json { @@ -123,6 +123,17 @@ Here's an example JSON payload: } ``` +```json +{ + "content": "Pick up the mail", + "project": "Errands", + "labels":"Homework,School", + "priority":3, + "due_date_string":"tomorrow at 14:00", + "due_date_lang":"en" +} +``` + - **content** (*Required*): The name of the task you want to create. - **project** (*Optional*): The project to put the task in. @@ -131,6 +142,11 @@ Here's an example JSON payload: - **priority** (*Optional*): The priority of the task, from 1-4. Again, 1 means least important, and 4 means most important. -- **due_date** (*Optional*): When the task should be due, in either YYYY-MM-DD format or YYYY-MM-DD HH:MM format. +- **due_date_string** (*Optional*): When the task should be due, in [natural language](https://support.todoist.com/hc/en-us/articles/205325931-Dates-and-Times). Mutually exclusive with `due_date` + +- **due_date_lang** (*Optional*): When `due_date_string` is set, it is posisble to set the language. + Valid languages are: `en`, `da`, `pl`, `zh`, `ko`, `de`, `pt`, `ja`, `it`, `fr`, `sv`, `ru`, `es`, `nl` + +- **due_date** (*Optional*): When the task should be due, in either YYYY-MM-DD format or YYYY-MM-DD HH:MM format. Mutually exclusive with `due_date_string`. Note that there's (currently) no way to mark tasks as done through Home Assistant; task names do not necessarily have to be unique, so you could find yourself in a situation where you close the wrong task. diff --git a/source/_components/camera.abode.markdown b/source/_components/camera.abode.markdown index a95b6d2fcfb..2aa3da2313c 100644 --- a/source/_components/camera.abode.markdown +++ b/source/_components/camera.abode.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Abode Camera" -description: "Instructions how to integrate Abode cameras into Home Assistant." +description: "Instructions on how to integrate Abode cameras into Home Assistant." date: 2017-08-26 13:28 sidebar: true comments: false diff --git a/source/_components/camera.amcrest.markdown b/source/_components/camera.amcrest.markdown index 2c1a042c877..73a6ca444f0 100644 --- a/source/_components/camera.amcrest.markdown +++ b/source/_components/camera.amcrest.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Amcrest IP Camera" -description: "Instructions how to integrate Amcrest IP cameras within Home Assistant." +description: "Instructions on how to integrate Amcrest IP cameras within Home Assistant." date: 2016-11-24 10:00 sidebar: true comments: false diff --git a/source/_components/camera.android_ip_webcam.markdown b/source/_components/camera.android_ip_webcam.markdown index 04c6e41d8e8..8aa3455faa8 100644 --- a/source/_components/camera.android_ip_webcam.markdown +++ b/source/_components/camera.android_ip_webcam.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Android IP Webcam Camera" -description: "Instructions how to integrate Android IP Webcam cameras within Home Assistant." +description: "Instructions on how to integrate Android IP Webcam cameras within Home Assistant." date: 2015-07-11 0:36 sidebar: true comments: false diff --git a/source/_components/camera.arlo.markdown b/source/_components/camera.arlo.markdown index 1d66a90bbf0..a634e8d8d91 100644 --- a/source/_components/camera.arlo.markdown +++ b/source/_components/camera.arlo.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Arlo Camera" -description: "Instructions how to integrate your Netgear Arlo cameras within Home Assistant." +description: "Instructions on how to integrate your Netgear Arlo cameras within Home Assistant." date: 2016-05-30 10:00 sidebar: true comments: false @@ -30,4 +30,4 @@ Configuration variables: - **ffmpeg_arguments**: (*Optional*): Extra options to pass to ffmpeg, e.g., image quality or video filter options. -**Note:** To be able to playback the last capture, it is required to install the `ffmpeg` component. Make sure to follow the steps mentioned at [FFMPEG](https://home-assistant.io/components/ffmpeg/) documentation. +**Note:** To be able to playback the last capture, it is required to install the `ffmpeg` component. Make sure to follow the steps mentioned at [FFMPEG](/components/ffmpeg/) documentation. diff --git a/source/_components/camera.august.markdown b/source/_components/camera.august.markdown new file mode 100644 index 00000000000..660a9504c5e --- /dev/null +++ b/source/_components/camera.august.markdown @@ -0,0 +1,18 @@ +--- +layout: page +title: "August Camera" +description: "Instructions on how to integrate your August devices into Home Assistant." +date: 2018-02-17 22:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: august.png +ha_category: Camera +ha_release: "0.64" +ha_iot_class: "Cloud Polling" +--- + +The `august` camera platform allows you to view the latest camera image (triggered by motion) by your [August](http://august.com) device in Home Assistant. + +To add `august` camera to your installation, follow instructions in [August component](/components/august/). diff --git a/source/_components/camera.axis.markdown b/source/_components/camera.axis.markdown index 23695c7905f..ec725b06ec7 100644 --- a/source/_components/camera.axis.markdown +++ b/source/_components/camera.axis.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Axis Camera" -description: "Instructions how to setup Axis cameras within Home Assistant." +description: "Instructions on how to setup Axis cameras within Home Assistant." date: 2017-05-01 19:09 sidebar: true comments: false diff --git a/source/_components/camera.bloomsky.markdown b/source/_components/camera.bloomsky.markdown index 8661690eb65..bd6f8a58b9e 100644 --- a/source/_components/camera.bloomsky.markdown +++ b/source/_components/camera.bloomsky.markdown @@ -1,7 +1,7 @@ --- layout: page title: "BloomSky Camera" -description: "Instructions how to integrate the BloomSky camera within Home Assistant." +description: "Instructions on how to integrate the BloomSky camera within Home Assistant." date: 2016-02-03 20:00 sidebar: true comments: false diff --git a/source/_components/camera.canary.markdown b/source/_components/camera.canary.markdown new file mode 100644 index 00000000000..8e5f07f461f --- /dev/null +++ b/source/_components/camera.canary.markdown @@ -0,0 +1,32 @@ +--- +layout: page +title: "Canary Camera" +description: "Instructions on how to integrate your Canary devices into Home Assistant." +date: 2017-12-07 22:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: canary.png +ha_category: Camera +ha_release: "0.60" +ha_iot_class: "Cloud Polling" +--- + +The `canary` camera platform allows you to watch the live stream of your [Canary](https://canary.is) camera in Home Assistant. This requires the [`ffmpeg` component](/components/ffmpeg/) to be already configured. + +To add `canary` camera to your installation, follow instructions in [Canary component](/components/canary/). Once you have [Canary component](/components/canary/) setup, your [Canary](https://canary.is) camera(s) should show up automatically. + +You can add the following to your `configuration.yaml` file to configure `canary` camera with optional settings: + +```yaml +camera: + - platform: canary +``` + +{% configuration %} + ffmpeg_arguments: + description: Extra options to pass to `ffmpeg`, e.g., image quality or video filter options. More details in [FFmpeg component](/components/ffmpeg). + required: false + type: string +{% endconfiguration %} diff --git a/source/_components/camera.dispatcher.markdown b/source/_components/camera.dispatcher.markdown index 62395dc993e..26eb74febcd 100644 --- a/source/_components/camera.dispatcher.markdown +++ b/source/_components/camera.dispatcher.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Dispatcher IP Camera" -description: "Instructions how to integrate internal dispatcher cameras within Home Assistant." +description: "Instructions on how to integrate internal dispatcher cameras within Home Assistant." date: 2017-03-08 00:00 sidebar: true comments: false @@ -9,7 +9,7 @@ sharing: true footer: true ha_category: Camera logo: camcorder.png -ha_release: 0.40 +ha_release: "0.40" ha_iot_class: "depends" --- diff --git a/source/_components/camera.doorbird.markdown b/source/_components/camera.doorbird.markdown index 55fcb419f8c..ce23d946725 100644 --- a/source/_components/camera.doorbird.markdown +++ b/source/_components/camera.doorbird.markdown @@ -1,7 +1,7 @@ --- layout: page title: "DoorBird Camera" -description: "Instructions how to integrate DoorBird video doorbell images into Home Assistant." +description: "Instructions on how to integrate DoorBird video doorbell images into Home Assistant." date: 2017-08-06 11:30 sidebar: true comments: false @@ -13,7 +13,7 @@ ha_release: "0.54" ha_iot_class: "Local Polling" --- -The `doorbird` implementation allows you to view the live video and saved images from your [DoorBird](http://www.doorbird.com/) device in Home Assistant. +The `doorbird` implementation allows you to view the live video and previous images from your [DoorBird](http://www.doorbird.com/) device in Home Assistant.

You must have the [DoorBird component](/components/doorbird/) configured to use this camera. @@ -26,7 +26,3 @@ To enable the camera, add the following to your `configuration.yaml` file: camera: - platform: doorbird ``` - -Configuration variables: - -- **last_visitor** (*Optional*): Adds a second camera that shows the last picture taken when someone rang the doorbell. Default is `false`. diff --git a/source/_components/camera.familyhub.markdown b/source/_components/camera.familyhub.markdown new file mode 100644 index 00000000000..20f888a63d9 --- /dev/null +++ b/source/_components/camera.familyhub.markdown @@ -0,0 +1,34 @@ +--- +layout: page +title: "Family Hub Camera" +description: "Instructions on how to integrate Samsung Family Hub refrigerator cameras within Home Assistant." +date: 2018-05-04 09:44 +sidebar: true +comments: false +sharing: true +footer: true +logo: familyhub.png +ha_category: Camera +ha_release: "0.70" +ha_iot_class: "Local Polling" +--- + +The `familyhub` platform allows you to get images of the inside of your [Samsung Family Hub refrigerator](https://www.samsung.com/us/explore/family-hub-refrigerator/connected-hub/) in Home Assistant. + +## {% linkable_title Configuration %} + +To enable your Family Hub camera in your installation, add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +camera: + - platform: familyhub + ip_address: 'IP_ADDRESS' +``` + +{% configuration %} +ip_address: + description: The IP address of your refrigerator. + required: true + type: string +{% endconfiguration %} diff --git a/source/_components/camera.ffmpeg.markdown b/source/_components/camera.ffmpeg.markdown index 86e6355c8d3..481c835a153 100644 --- a/source/_components/camera.ffmpeg.markdown +++ b/source/_components/camera.ffmpeg.markdown @@ -29,7 +29,7 @@ Configuration variables: - **input** (*Required*): An FFmpeg-compatible input file, stream, or feed. - **name** (*Optional*): Override the name of your camera. -- **extra_arguments** (*Optional*): Extra options to pass to `ffmpeg`, e.g. image quality or video filter options. +- **extra_arguments** (*Optional*): Extra options to pass to `ffmpeg`, e.g., image quality or video filter options. ### {% linkable_title Image quality %} diff --git a/source/_components/camera.foscam.markdown b/source/_components/camera.foscam.markdown index ea90a82984b..c9d1aabd505 100644 --- a/source/_components/camera.foscam.markdown +++ b/source/_components/camera.foscam.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Foscam IP Camera" -description: "Instructions how to integrate Foscam IP cameras within Home Assistant." +description: "Instructions on how to integrate Foscam IP cameras within Home Assistant." date: 2015-09-17 08:01 sidebar: true comments: false @@ -15,6 +15,8 @@ ha_iot_class: "Local Polling" The `foscam` platform allows you to watch the live stream of your [Foscam](http://www.foscam.com/) IP camera in Home Assistant. +## {% linkable_title Configuration %} + To enable your Foscam IP camera in your installation, add the following to your `configuration.yaml` file: ```yaml @@ -22,8 +24,8 @@ To enable your Foscam IP camera in your installation, add the following to your camera: - platform: foscam ip: IP_ADDRESS - username: USERNAME - password: PASSWORD + username: YOUR_USERNAME + password: YOUR_PASSWORD ``` Configuration variables: @@ -39,4 +41,5 @@ There seems to be some issues within Foscam with lengthy passwords and passwords

### {% linkable_title Control Foscam PTZ (Pan/Tilt/Zoom) - Home/Away %} + Foscam Webcams which support CGI Commands can be controlled by Home Assistant ([Source](http://www.ipcamcontrol.net/files/Foscam%20IPCamera%20CGI%20User%20Guide-V1.0.4.pdf)). For an example of how this can be done, see the [Foscam IP Camera Pan, Tilt, Zoom Control](/cookbook/foscam_away_mode_PTZ/) Cookbook entry. diff --git a/source/_components/camera.generic.markdown b/source/_components/camera.generic.markdown index 69637387a44..b9bf15bf46a 100644 --- a/source/_components/camera.generic.markdown +++ b/source/_components/camera.generic.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Generic IP Camera" -description: "Instructions how to integrate IP cameras within Home Assistant." +description: "Instructions on how to integrate IP cameras within Home Assistant." date: 2015-07-11 0:36 sidebar: true comments: false @@ -16,7 +16,7 @@ ha_iot_class: "depends" The `generic` camera platform allows you to integrate any IP camera or other URL into Home Assistant. Templates can be used to generate the URLs on the fly. -Home Assistant will serve the images via its server, making it possible to view your IP camera's while outside of your network. The endpoint is `/api/camera_proxy/camera.[name]`. +Home Assistant will serve the images via its server, making it possible to view your IP cameras while outside of your network. The endpoint is `/api/camera_proxy/camera.[name]`. To enable this camera in your installation, add the following to your `configuration.yaml` file: @@ -36,6 +36,7 @@ Configuration variables: - **authentication** (*Optional*): Type for authenticating the requests `basic` (default) or `digest`. - **limit_refetch_to_url_change** (*Optional*): True/false value (default: false). Limits re-fetching of the remote image to when the URL changes. Only relevant if using a template to fetch the remote image. - **content_type** (*Optional*): Set the content type for the IP camera if it is not a jpg file (default: `image/jpeg`). Use `image/svg+xml` to add a dynamic svg file. +- **framerate** (*Optional*): The number of frames-per-second (FPS) of the stream (setting this too high may cause too much traffic on the network or be heavy on the camera).

@@ -57,3 +58,25 @@ camera: still_image_url: https://www.yr.no/place/Norway/Oslo/Oslo/Oslo/meteogram.svg content_type: 'image/svg+xml' ``` + +### {% linkable_title Local image with Hass.io %} + +You can show a static image with this platform. Just place the image here: `/config/www/your_image.png` + +```yaml +camera: + - platform: generic + name: Some Image + still_image_url: https://127.0.0.1:8123/local/your_image.png +``` + +### {% linkable_title Sharing a camera feed from one Home Assistant instance to another %} + +If you are running more than one Home Assistant instance (let's call them the 'host' and 'receiver' instances) you may wish to display the camera feed from the host instance on the receiver instance. You can use the [REST API](/developers/rest_api/#get-apicamera_proxycameraltentity_id) to access the camera feed on the host (IP address 127.0.0.5) and display it on the receiver instance by configuring the receiver with the the following: + +```yaml +camera: + - platform: generic + name: Host instance camera feed + still_image_url: https://127.0.0.5:8123/api/camera_proxy/camera.live_view +``` diff --git a/source/_components/camera.local_file.markdown b/source/_components/camera.local_file.markdown index 6dade4b4c59..b2b953041dd 100644 --- a/source/_components/camera.local_file.markdown +++ b/source/_components/camera.local_file.markdown @@ -13,9 +13,9 @@ ha_iot_class: "Local Polling" ha_release: 0.22 --- -The `local_file` camera platform allows you to integrate any readable image file from disk into Home Assistant as a camera. If the image is updated on the file system the image displayed in Home Assistant will also be updated. +The `local_file` camera platform allows you to integrate an image file from disk into Home Assistant as a camera. If the image is updated on the file system the image displayed in Home Assistant will also be updated. The service `local_file_update_file_path` can be used to update the image using an automation. -This can for example be used with various camera platforms that save a temporary images locally. It can also be used to display a graph that you render periodically and will then be displayed in Home Assistant. +The `local_file` camera can for example be used with various camera platforms that save a temporary images locally. It can also be used to display a graph that you render periodically and will then be displayed in Home Assistant. To enable this camera in your installation, add the following to your `configuration.yaml` file: @@ -31,7 +31,11 @@ Configuration variables: - **file_path** (*Required*): File to serve as the camera. - **name** (*Optional*): Name of the camera -

-The given `file_path` must be an existing file because the camera platform setup make a readable check on it. -

+### {% linkable_title Service `camera.local_file_update_file_path` %} +Use this service to change the file displayed by the camera. + +| Service data attribute | Description | +| -----------------------| ----------- | +| `entity_id` | String of the `entity_id` of the camera to update. | +| `file_path` | The full path to the new image file to be displayed. | diff --git a/source/_components/camera.markdown b/source/_components/camera.markdown index e0dee527ad6..499481eb098 100644 --- a/source/_components/camera.markdown +++ b/source/_components/camera.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Camera" -description: "Instructions how to integrate cameras within Home Assistant." +description: "Instructions on how to integrate cameras within Home Assistant." date: 2015-11-09 08:36 sidebar: true comments: false @@ -16,7 +16,23 @@ The camera component allows you to use IP cameras with Home Assistant. With a li Once loaded, the `camera` platform will expose services that can be called to perform various actions. -Available services: `enable_motion_detection`, `disable_motion_detection`, and `snapshot`. +Available services: `turn_on`, `turn_off`, `enable_motion_detection`, `disable_motion_detection`, and `snapshot`. + +#### {% linkable_title Service `turn_on` %} + +Turn on camera. Not all camera models support this service, please consult individual camera page. + +| Service data attribute | Optional | Description | +| ---------------------- | -------- | ----------- | +| `entity_id` | yes | Name(s) of entities to turn on, e.g., `camera.living_room_camera`. | + +#### {% linkable_title Service `turn_off` %} + +Turn off camera. Not all camera models support this service, please consult individual camera page. + +| Service data attribute | Optional | Description | +| ---------------------- | -------- | ----------- | +| `entity_id` | yes | Name(s) of entities to turn off, e.g., `camera.living_room_camera`. | #### {% linkable_title Service `enable_motion_detection` %} @@ -24,7 +40,7 @@ Enable the motion detection in a camera. | Service data attribute | Optional | Description | | ---------------------- | -------- | ----------- | -| `entity_id` | no | Name(s) of entities to enable motion detection, e.g., `camera.living_room_camera`. | +| `entity_id` | yes | Name(s) of entities to enable motion detection, e.g., `camera.living_room_camera`. | #### {% linkable_title Service `disable_motion_detection` %} @@ -32,7 +48,7 @@ Disable the motion detection in a camera. | Service data attribute | Optional | Description | | ---------------------- | -------- | ----------- | -| `entity_id` | no | Name(s) of entities to disable motion detection, e.g., `camera.living_room_camera`. | +| `entity_id` | yes | Name(s) of entities to disable motion detection, e.g., `camera.living_room_camera`. | #### {% linkable_title Service `snapshot` %} @@ -40,11 +56,23 @@ Take a snapshot from a camera. | Service data attribute | Optional | Description | | ---------------------- | -------- | ----------- | -| `entity_id` | no | Name(s) of entities to create a snopshot from, e.g., `camera.living_room_camera`. | +| `entity_id` | no | Name(s) of entities to create a snapshot from, e.g., `camera.living_room_camera`. | | `filename ` | no | Template of a file name. Variable is `entity_id`, e.g., {% raw %}`/tmp/snapshot_{{ entity_id }}`{% endraw %}. | The path part of `filename` must be an entry in the `whitelist_external_dirs` in your [`homeassistant:`](/docs/configuration/basic/) section of your `configuration.yaml` file. +For example, the following action in an automation would take a snapshot from "yourcamera" and save it to /tmp with a timestamped filename. + +{% raw %} +```yaml +action: + service: camera.snapshot + data: + entity_id: camera.yourcamera + filename: '/tmp/yourcamera_{{ now().strftime("%Y%m%d-%H%M%S") }}.jpg' +``` +{% endraw %} + ### {% linkable_title Test if it works %} A simple way to test if you have set up your `camera` platform correctly, is to use service developer tool icon **Services** from the **Developer Tools**. Choose your service from the dropdown menu **Service**, enter something like the sample below into the **Service Data** field, and hit **CALL SERVICE**. diff --git a/source/_components/camera.mjpeg.markdown b/source/_components/camera.mjpeg.markdown index 6a01c708725..de03528200f 100644 --- a/source/_components/camera.mjpeg.markdown +++ b/source/_components/camera.mjpeg.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Generic MJPEG IP Camera" -description: "Instructions how to integrate IP cameras within Home Assistant." +description: "Instructions on how to integrate IP cameras within Home Assistant." date: 2015-11-09 08:36 sidebar: true comments: false diff --git a/source/_components/camera.mqtt.markdown b/source/_components/camera.mqtt.markdown index 852140ddf9e..f0e903a37a9 100644 --- a/source/_components/camera.mqtt.markdown +++ b/source/_components/camera.mqtt.markdown @@ -1,7 +1,7 @@ --- layout: page title: "MQTT Camera" -description: "Instructions how to use an MQTT image message as a Camera within Home Assistant." +description: "Instructions on how to use an MQTT image message as a Camera within Home Assistant." date: 2017-04-14 00:45 sidebar: true comments: false diff --git a/source/_components/camera.neato.markdown b/source/_components/camera.neato.markdown index 4fccb0b413b..3b959c0bc38 100644 --- a/source/_components/camera.neato.markdown +++ b/source/_components/camera.neato.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Neato Camera" -description: "Instructions how to setup the Neato cleaning maps within Home Assistant." +description: "Instructions on how to setup the Neato cleaning maps within Home Assistant." date: 2017-04-05 13:10 sidebar: true comments: false diff --git a/source/_components/camera.nest.markdown b/source/_components/camera.nest.markdown index e597fcb19d1..20c616e9c19 100644 --- a/source/_components/camera.nest.markdown +++ b/source/_components/camera.nest.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Nest Camera" -description: "Instructions how to integrate Nest cameras into Home Assistant." +description: "Instructions on how to integrate Nest cameras into Home Assistant." date: 2016-12-03 08:10 sidebar: true comments: false @@ -10,11 +10,13 @@ footer: true logo: nest.png ha_category: Camera ha_release: 0.34 -ha_iot_class: "Cloud Polling" +ha_iot_class: "Cloud Poll" --- -The `nest` platform allows you to watch the live stream of your [Nest](https://nest.com/camera/meet-nest-cam/) camera in Home Assistant. +The `nest` platform allows you to watch still frames from a video stream (not live stream) of your [Nest](https://nest.com/camera/meet-nest-cam/) camera in Home Assistant.

You must have the [Nest component](/components/nest/) configured to use this camera. The `nest` camera will automatically be setup when you do.

+ +Nest Camera supports `camera.turn_on` and `camera.turn_off` service since 0.75 release. diff --git a/source/_components/camera.netatmo.markdown b/source/_components/camera.netatmo.markdown index 5ad8ebe38e2..e452d26b413 100644 --- a/source/_components/camera.netatmo.markdown +++ b/source/_components/camera.netatmo.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Netatmo Camera" -description: "Instructions how to integrate Netatmo cameras into Home Assistant." +description: "Instructions on how to integrate Netatmo cameras into Home Assistant." date: 2016-06-02 08:10 sidebar: true comments: false diff --git a/source/_components/camera.onvif.markdown b/source/_components/camera.onvif.markdown index fe8561afa32..ed01e31d379 100644 --- a/source/_components/camera.onvif.markdown +++ b/source/_components/camera.onvif.markdown @@ -13,9 +13,9 @@ ha_release: 0.47 --- -The `ONVIF` platform allows you to use an ONVIF camera in Home Assistant. This requires FFmpeg component to be already configured. +The `onvif` camera platform allows you to use an ONVIF camera in Home Assistant. This requires the [`ffmpeg` component](/components/ffmpeg/) to be already configured. -To enable your ONVIF in your installation, add the following to your `configuration.yaml` file: +To enable your ONVIF camera in your installation, add the following to your `configuration.yaml` file: ```yaml # Example configuration.yaml entry @@ -30,7 +30,21 @@ Configuration variables: - **name** (*Optional*): Override the name of your camera. - **username** (*Optional*): The username for the camera. - **password** (*Optional*): The password for the camera. -- **port** (*Optional*): The port for the camera. This defaults to 5000 +- **port** (*Optional*): The port for the camera. This defaults to 5000. +- **profile** (*Optional*): Video profile that will be used to obtain the stream. This defaults to 0. More details below. +- **extra_arguments** (*Optional*): Extra options to pass to `ffmpeg`, e.g., image quality or video filter options. More details in [FFmpeg component](/components/ffmpeg). +Most of the Onvif cameras support more than one audio/video Profile. Each profile provides different image quality. Usually, the first profile has the highest quality, and it is the profile used by default. However, you may want to use a lower quality image. One of the reasons may be that your hardware isn't able to render the highest quality image in real-time - especially when running on Raspberry Pi. Therefore you can choose which profile do you want to use by setting in config `profile` variable. + +### {% linkable_title Service `camera.onvif_ptz` %} + +If your ONVIF camera supports PTZ, you will be able to pan, tilt or zoom your camera. + +| Service data attribute | Description | +| -----------------------| ----------- | +| `entity_id` | String or list of strings that point at `entity_id`s of cameras. Else targets all. +| `tilt` | Tilt direction. Allowed values: `UP`, `DOWN` +| `pan` | Pan direction. Allowed values: `RIGHT`, `LEFT` +| `zoom` | Zoom. Allowed values: `ZOOM_IN`, `ZOOM_OUT` If you are running into trouble with this sensor, please refer to the [Troubleshooting section](/components/ffmpeg/#troubleshooting). diff --git a/source/_components/camera.proxy.markdown b/source/_components/camera.proxy.markdown new file mode 100644 index 00000000000..e8a38d4b23f --- /dev/null +++ b/source/_components/camera.proxy.markdown @@ -0,0 +1,90 @@ +--- +layout: page +title: "Camera Proxy" +description: "Instructions on how to integrate a camera proxy within Home Assistant." +date: 2018-03-08 19:00 +sidebar: true +comments: false +sharing: true +footer: true +ha_category: Camera +ha_release: 0.65 +--- + + +The `proxy` camera platform allows you to pass another camera's output through post-processing routines and generate a new camera with the post-processed output. + +The current post-processing supports resizing the image/MJPEG as well as limiting the maximum refresh rate. + +The current proxy capabilities are intended to reduce the camera bandwidth for slower internet connections. + +To enable this camera in your installation, you must first have an existing working camera configured in Home Assistant. Next, add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +camera: + - platform: proxy + entity_id: camera. + max_stream_width: 360 + max_image_width: 720 +``` + +{% configuration %} + entity_id: + description: The ID of another Home Assistant camera to post-process. + required: true + type: string + name: + description: This parameter allows you to override the name of your camera. + required: false + type: string + max_image_width: + description: The maximum width of single images taken from the camera (aspect ratio will be maintained). + required: false + type: integer + max_stream_width: + description: The maximum width of the MJPEG stream from the camera (aspect ratio will be maintained). + required: false + type: integer + image_quality: + description: The quality level used for resulting JPEG for snapshots. + required: false + type: integer + default: 75 + stream_quality: + description: The quality level used for resulting MJPEG streams. + required: false + type: integer + default: 75 + image_refresh_rate: + description: The minimum time in seconds between generating successive image snapshots. + required: false + type: float + force_resize: + description: Resize the image even if the resulting image would take up more bandwidth than the original. + required: false + type: boolean + cache_images: + description: Preserve the last image and re-send in the case the camera is not responding. + required: false + type: boolean +{% endconfiguration %} + + +## {% linkable_title Examples %} + +Example of using a Camera proxy along with a Foscam camera: + +```yaml +camera: + - platform: foscam + ip: 192.168.1.10 + username: foscam_camera + password: camera_password + name: mycamera + - platform: proxy + entity_id: camera.mycamera + max_stream_width: 360 + max_image_width: 480 + image_refresh_rate: 5.0 +``` diff --git a/source/_components/camera.push.markdown b/source/_components/camera.push.markdown new file mode 100644 index 00000000000..c70dee014c0 --- /dev/null +++ b/source/_components/camera.push.markdown @@ -0,0 +1,77 @@ +--- +layout: page +title: "Push" +description: "Instructions how to use Push Camera within Home Assistant." +date: 2018-06-26 23:50 +sidebar: true +comments: false +sharing: true +footer: true +logo: camcorder.png +ha_category: Camera +ha_iot_class: "Local Push" +ha_release: 0.74 +--- + +The `push` camera platform allows you to integrate images sent over HTTP POST to Home Assistant as a camera. External applications/daemons/scripts are therefore able to "stream" images through Home Assistant. + +Optionally the Push Camera can **buffer** a given number of images, creating an animation of the detected motion after the event has been recorded. + +Images are cleared on new events, and events are separated by a soft (configurable) **timeout**. + +## Integration with motionEye + +The `push` camera can as an example be used with [motionEye](https://github.com/ccrisan/motioneye/wiki) a web frontend for the motion daemon. motionEye is usually configured to save/record files ***only*** when motion is detected. It provides a hook to run a command whenever an image is saved, which can be used together with cURL to send the motion detected images to the `push` camera, as shown in this example: + +In motionEye, under **File Storage -> Run A Command** type in: +```bash +curl -X POST -F "image=@%f" http://my.hass.server.com:8123/api/camera_push/camera.push_camera +``` + +Please take note that you might need to add `-H "x-ha-access: YOUR_PASSWORD"` if you have API authentication enabled. + +Optionally configure motionEye to save only motion triggered images by going into **Still Images -> Capture Mode** and setting **Motion Triggered**. Tune your preferences under **Motion Detection**. + +In this setup, you can configure the push camera to continuously replay the last motion triggered event using a configuration such as: + +```yaml +camera: + - platform: push + name: MotionEye Outdoor + buffer: 3 + timeout: 5 +``` + +## {% linkable_title Configuration %} + +To enable this camera in your installation, add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +camera: + - platform: push + name: My Push Camera +``` + +{% configuration %} +name: + description: The name you would like to give to the camera. + required: false + default: Push Camera + type: string +buffer: + description: Number of images to buffer per event. Be conservative, large buffers will starve your system memory. + required: false + default: 1 + type: string +timeout: + description: Amount of time after which the event is considered to have finished. + required: false + default: 5 seconds + type: time +field: + description: HTTP POST field containing the image file + required: false + default: image + type: string +{% endconfiguration %} diff --git a/source/_components/camera.ring.markdown b/source/_components/camera.ring.markdown index eb7fc031628..cd4844ae4b0 100644 --- a/source/_components/camera.ring.markdown +++ b/source/_components/camera.ring.markdown @@ -13,7 +13,7 @@ ha_release: 0.57 ha_iot_class: "Cloud Polling" --- -To get your [Ring.com](https://ring.com/) cameras working within Home Assistant, please follow the instructions for the general [Ring component](/components/ring). Please note that downloading and playing Ring video will require a Ring Protect plan. +To get your [Ring.com](https://ring.com/) cameras working within Home Assistant, please follow the instructions for the general [Ring component](/components/ring). Please note that downloading and playing Ring video will require a Ring Protect plan. Once you have enabled the [Ring component](/components/ring), add the following to your `configuration.yaml` file: @@ -28,7 +28,7 @@ Configuration variables: - **ffmpeg_arguments**: (*Optional*): Extra options to pass to ffmpeg, e.g., image quality or video filter options. - **scan_interval**: (*Optional*): How frequently to query for new video. Defaults to 90 seconds. -**Note:** To be able to playback the last capture, it is required to install the `ffmpeg` component. Make sure to follow the steps mentioned at [FFMPEG](https://home-assistant.io/components/ffmpeg/) documentation. +**Note:** To be able to playback the last capture, it is required to install the `ffmpeg` component. Make sure to follow the steps mentioned at [FFMPEG](/components/ffmpeg/) documentation. Currently it supports doorbell and stickup cameras. diff --git a/source/_components/camera.rpi_camera.markdown b/source/_components/camera.rpi_camera.markdown index 6bfeb7696ea..2033dc5d281 100644 --- a/source/_components/camera.rpi_camera.markdown +++ b/source/_components/camera.rpi_camera.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Raspberry Pi Camera" -description: "Instructions how to integrate Raspberry Pi within Home Assistant." +description: "Instructions on how to integrate Raspberry Pi within Home Assistant." date: 2016-04-08 10:00 sidebar: true comments: false @@ -61,16 +61,16 @@ vertical_flip: default: 0 type: int timelapse: - description: Takes a picture every millisecond. + description: Takes a picture every this many milliseconds (thousands of a second) - the default means one picture a second. required: false default: 1000 type: int file_path: description: Save the picture in a custom file path. required: false - default: The camera components folder. + default: A temporary file is used. type: string {% endconfiguration %} -The given **file_path** must be an existing file because the camera platform setup make a writeable check on it. +The given **file_path** must be an existing file because the camera platform setup performs a writeable check on it. Also, keep in mind that the path should be [whitelisted](/docs/configuration/basic/). diff --git a/source/_components/camera.synology.markdown b/source/_components/camera.synology.markdown index 258bc1e832b..93a2e78ff36 100644 --- a/source/_components/camera.synology.markdown +++ b/source/_components/camera.synology.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Synology Camera" -description: "Instructions how to integrate Synology Surveillance Station cameras within Home Assistant." +description: "Instructions on how to integrate Synology Surveillance Station cameras within Home Assistant." date: 2016-10-13 08:01 sidebar: true comments: false @@ -14,7 +14,7 @@ ha_iot_class: "Local Polling" ---   -The `synology` platform allows you to watch the live streams of your [Synology](https://www.synology.com/) Surveillance Station based IP cameras in Home Assistant. +The `synology` camera platform allows you to watch the live streams of your [Synology](https://www.synology.com/) Surveillance Station based IP cameras in Home Assistant. To enable your Surveillance Station cameras in your installation, add the following to your `configuration.yaml` file: @@ -22,9 +22,9 @@ To enable your Surveillance Station cameras in your installation, add the follow # Minimum configuration.yaml entry camera: - platform: synology - url: SYNOLOGY_URL - username: USERNAME - password: PASSWORD + url: IP_ADDRESS_OF_SYNOLOGY_NAS + username: YOUR_USERNAME + password: YOUR_PASSWORD ``` Configuration variables: @@ -43,8 +43,8 @@ A full sample configuration for the `synology` platform is shown below: camera: - platform: synology url: https://192.168.1.120:5001 - username: USERNAME - password: PASSWORD + username: YOUR_USERNAME + password: YOUR_PASSWORD timeout: 15 verify_ssl: False ``` diff --git a/source/_components/camera.uvc.markdown b/source/_components/camera.uvc.markdown index 367f4472caf..6c924446cc2 100644 --- a/source/_components/camera.uvc.markdown +++ b/source/_components/camera.uvc.markdown @@ -1,7 +1,7 @@ --- layout: page title: "UniFi Video Camera" -description: "Instructions how to integrate UVC cameras within Home Assistant." +description: "Instructions on how to integrate UVC cameras within Home Assistant." date: 2016-02-07 10:00 sidebar: true comments: false @@ -13,10 +13,20 @@ ha_release: 0.13 ha_iot_class: "Local Polling" --- +The `uvc` camera platform allows you to integrate [UniFi Video Camera (UVC)](https://www.ubnt.com/products/#unifivideo) into Home Assistant. -The `uvc` component allows you to integrate [UniFi Video Camera (UVC)](https://www.ubnt.com/unifi-video/unifi-video-camera/) into Home Assistant. +The platform connects to the Unifi NVR software and automatically discovers/adds any camera connected to the NVR. -To enable a UVC camera in your installation, add the following to your `configuration.yaml` file: +### {% linkable_title Setup %} + +It is recommended that you create a new user for this platform in the NVR software and only give the user the permissions it need to operate. + +- The API key is found in the specific user's `API Access` tab in the NVR software. +- The camera password is found in `Settings` -> `Camera Settings` -> `Camera Password` in the NVR software. + +### {% linkable_title Configuration %} + +To enable, add the following to your `configuration.yaml` file: ```yaml # Example configuration.yaml entry @@ -26,9 +36,24 @@ camera: key: API_KEY ``` -Configuration variables: +{% configuration %} +nvr: + description: The IP or hostname of the NVR (Network Video Recorder) server. + required: true + type: string +port: + description: The port number to use for accessing the NVR. + required: false + type: int + default: 7080 +key: + description: The API key available from the NVR web interface. + required: true + type: string +password: + description: The camera password. + required: false + type: string + default: ubnt +{% endconfiguration %} -- **nvr** (*Required*): The IP or hostname of the NVR (Network Video Recorder) server. -- **key** (*Required*): The API key available from the NVR web interface. -- **port** (*Optional*): The port number to use for accessing the NVR. -- **password** (*Optional*): The camera password. Defaults to `ubnt` if not given. diff --git a/source/_components/camera.verisure.markdown b/source/_components/camera.verisure.markdown index e96a8725f79..35b4c25e4e7 100644 --- a/source/_components/camera.verisure.markdown +++ b/source/_components/camera.verisure.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Verisure Camera" -description: "Instructions how to setup the Verisure cameras within Home Assistant." +description: "Instructions on how to setup the Verisure cameras within Home Assistant." date: 2016-10-22 09:00 sidebar: true comments: false diff --git a/source/_components/camera.xeoma.markdown b/source/_components/camera.xeoma.markdown new file mode 100644 index 00000000000..e54e24f3b37 --- /dev/null +++ b/source/_components/camera.xeoma.markdown @@ -0,0 +1,87 @@ +--- +layout: page +title: "Xeoma Camera" +description: "Instructions on how to integrate camera video feeds from a Xeoma server in Home Assistant" +date: 2018-01-12 20:05 +sidebar: true +comments: false +sharing: true +footer: true +logo: xeoma.png +ha_category: Camera +ha_iot_class: "Local Polling" +ha_release: 0.62 +--- + +The `Xeoma` camera platform allows you to view the video feeds from a [Xeoma](http://felenasoft.com/xeoma) video surveillance server. + +To enable Xeoma camera feeds, add the following lines to your `configuration.yaml`: + +```yaml +# Example configuration.yaml entry +camera: + - platform: xeoma + host: http://localhost:10090 +``` + +{% configuration %} +host: + description: The URL of the Xeoma server's web interface. + required: true + type: string +username: + description: The username used to access the Xeoma server's web interface. + required: false + type: string +password: + description: The password used to access the Xeoma server's web interface. + required: false + type: string +new_version: + description: Set to false if the Xeoma server version is 17.5 or earlier. + required: false + default: true + type: boolean +cameras: + description: List of customizations for individual Xeoma cameras. + required: false + type: list + keys: + image_name: + description: The name of the JPEG image for this camera as configured in Xeoma (without .jpg extension). + required: true + type: string + name: + description: The name to display in the frontend for this camera. + required: false + default: The `image_name` for this camera. + type: string + hide: + description: Don't show this camera in Home Assistant. + required: false + default: false + type: boolean +{% endconfiguration %} + +## {% linkable_title Full examples %} + +```yaml +# Example configuration.yaml entry +camera: + - platform: xeoma + host: http://localhost:10090 + username: user + password: secretpassword + new_version: false + cameras: + - image_name: front_porch + name: Front Porch + - image_name: back_patio + hide: true +``` + +To use this platform, you must have the Xeoma Web Server module enabled in at least one of your camera chains. + +This platform will parse the Xeoma web interface to find all enabled cameras and add them all to Home Assistant. You can hide individual cameras using the platform configuration. + +The `image_name` configuration value for each camera should match the name supplied to the Xeoma Web Server configuration (under _Path to access images_) with the _.jpg_ extension removed. diff --git a/source/_components/camera.xiaofang.markdown b/source/_components/camera.xiaofang.markdown new file mode 100644 index 00000000000..cfe319bec8c --- /dev/null +++ b/source/_components/camera.xiaofang.markdown @@ -0,0 +1,86 @@ +--- +layout: page +title: "Xiaomi Cameras" +description: "Instructions on how to integrate a video feed (via FFmpeg) as a camera within Home Assistant." +date: 2018-06-20 13:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: xiaomi.png +ha_category: Camera +ha_release: 0.72 +ha_iot_class: "Local Polling" +--- + +The `Xiaomi` camera platform allows you to utilize Xiaomi Cameras within Home Assistant. + +To successfully implement this platform, the Home Assistant host should be capable of multiple simultaneous reads. For every concurrent Home Assistant user, a connection will be made to the camera every 10 seconds. This should normally not be a problem. + +## {% linkable_title Preparing the Device %} + +### {% linkable_title Installing Alternative Firmware %} + +In order to integrate the camera with Home Assistant, it is necessary to install a custom firmware on the device. Instructions for doing so can be found for each models. + +* [Yi 720p](https://github.com/fritz-smh/yi-hack) +* [Yi Home 17CN / 27US / 47US / 1080p Home / Dome / 1080p Dome](https://github.com/shadow-1/yi-hack-v3) +* [Xiaofang 1080p Camera](https://github.com/samtap/fang-hacks) + +Once installed, please ensure that you have enabled FTP. + +

+Currently, version 0.1.4-beta2 of the custom firmware is the highest supported. Firmwares higher than this version use [Pure-FTPd](https://www.pureftpd.org/project/pure-ftpd), which has a bug that prevents FFmpeg from correctly rendering video files. +

+ +

+Hassbian users: don't forget to install ffmpeg support on your platform, otherwise, you'll not see video. +

+ +

+The live stream writing by the camera is not an supported format when the hass reads through FTP for Yi 720p and Xiaofang Cameras, so this component retrives the video which was saved 1 minute earlier. +

+ +

+If you enabled RTSP server, you can connect to your camera via other Home Assistant camera platforms. However, this RTSP server disables the ability to use the supremely-useful Mi Home app. In order to maintain both Home Assistant compatibility _and_ the native app, this platform retrieves videos via FTP. +

+ +## {% linkable_title Configuring the Platform %} + +To enable the platform, add the following lines to your`configuration.yaml` file: + +```yaml +camera: + - platform: xiaomi + name: Camera + host: '192.168.1.100' + model: 'yi' + password: my_password_123 +``` + +Configuration variables: + +- **name** (*Required*): A human-friendly name for the camera. +- **host** (*Required*): The IP address or hostname of the camera. +- **model** (*Required*): The model of Xiaomi Camera, currently supporting yi and xiaofang. +- **password** (*Required*): The password to the FTP server on the camera (from above), can be any string as the current firmware doesn't allow setting ftp passwords. +- **path** (*Optional*): The path to the raw MP4 files. Defaults to `/tmp/sd/record`. +- **username** (*Optional*): The user that can access the FTP server. Defaults to `root`. +- **ffmpeg_arguments** (*Optional*): Extra options to pass to `ffmpeg` (e.g., image quality or video filter options). + +## {% linkable_title Image quality %} + +Any option supported by [`ffmpeg` camera](/components/camera.ffmpeg/) can be utilized via the `ffmpeg_arguments` configuration parameter. + +One particularly useful adjustment deals with video size. Since Yi videos are fairly large (especially on the 1080p cameras), the following configuration will bring them down to a manageable size: + +```yaml +camera: + - platform: xiaomi + name: My Camera + host: '192.168.1.100' + model: 'xiaofang' + password: my_password_123 + path: /home/camera/feed + ffmpeg_arguments: '-vf scale=800:450' +``` diff --git a/source/_components/camera.xiaomi.markdown b/source/_components/camera.xiaomi.markdown new file mode 100644 index 00000000000..96649e18e48 --- /dev/null +++ b/source/_components/camera.xiaomi.markdown @@ -0,0 +1,88 @@ +--- +layout: page +title: "Xiaomi Cameras" +description: "Instructions on how to integrate a video feed (via FFmpeg) as a camera within Home Assistant." +date: 2018-06-20 13:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: xiaomi.png +ha_category: Camera +ha_release: 0.72 +ha_iot_class: "Local Polling" +--- + +The `Xiaomi` camera platform allows you to utilize Xiaomi Cameras within Home Assistant. + +To successfully implement this platform, the Home Assistant host should be capable of multiple simultaneous reads. For every concurrent Home Assistant user, a connection will be made to the camera every 10 seconds. This should normally not be a problem. + +## {% linkable_title Preparing the Device %} + +In order to integrate the camera with Home Assistant, it is necessary to install a custom firmware on the device. Instructions for doing so can be found for each models. + +* [Yi 720p](https://github.com/fritz-smh/yi-hack) +* [Yi Home 17CN / 27US / 47US / 1080p Home / Dome / 1080p Dome](https://github.com/shadow-1/yi-hack-v3) +* [Xiaofang 1080p Camera](https://github.com/samtap/fang-hacks) + +Once installed, please ensure that you have enabled FTP. + +

+Currently, version 0.1.4-beta2 of the custom firmware is the highest supported. Firmwares higher than this version use [Pure-FTPd](https://www.pureftpd.org/project/pure-ftpd), which has a bug that prevents FFmpeg from correctly rendering video files. +

+ +

+Hassbian users: Don't forget to install `ffmpeg` support on your platform, otherwise, you'll not see video. +

+ +

+The live stream writing by the camera is not an supported format when the hass reads through FTP for Yi 720p and Xiaofang Cameras, so this platform retrives the video which was saved 1 minute earlier. +

+ +

+If you enabled RTSP server, you can connect to your camera via other Home Assistant camera platforms. However, this RTSP server disables the ability to use the supremely-useful Mi Home app. In order to maintain both Home Assistant compatibility _and_ the native app, this platform retrieves videos via FTP. +

+ +## {% linkable_title Configuring the Platform %} + +To enable the platform, add the following lines to your`configuration.yaml` file: + +```yaml +camera: + - platform: xiaomi + name: Camera + host: '192.168.1.100' + model: 'yi' + password: my_password_123 +``` + +Configuration variables: + +- **name** (*Required*): A human-friendly name for the camera. +- **host** (*Required*): The IP address or hostname of the camera. +- **model** (*Required*): The model of Xiaomi Camera, currently supporting yi and xiaofang. +- **password** (*Required*): The password to the FTP server on the camera (from above), can be any string as the current firmware doesn't allow setting ftp passwords. +- **path** (*Optional*): The path to the raw MP4 files. Defaults to `/tmp/sd/record`. +- **username** (*Optional*): The user that can access the FTP server. Defaults to `root`. +- **ffmpeg_arguments** (*Optional*): Extra options to pass to `ffmpeg` (e.g., image quality or video filter options). + +

+The default for `path:` will not work with all cameras. It may be needed that you add that key with the exact path for your device. +

+ +## {% linkable_title Image quality %} + +Any option supported by [`ffmpeg` camera](/components/camera.ffmpeg/) can be utilized via the `ffmpeg_arguments` configuration parameter. + +One particularly useful adjustment deals with video size. Since Yi videos are fairly large (especially on the 1080p cameras), the following configuration will bring them down to a manageable size: + +```yaml +camera: + - platform: xiaomi + name: My Camera + host: '192.168.1.100' + model: 'xiaofang' + password: my_password_123 + path: /home/camera/feed + ffmpeg_arguments: '-vf scale=800:450' +``` diff --git a/source/_components/camera.yi.markdown b/source/_components/camera.yi.markdown index 98cc2b1f38b..cb8975a86c2 100644 --- a/source/_components/camera.yi.markdown +++ b/source/_components/camera.yi.markdown @@ -15,7 +15,7 @@ ha_iot_class: "Local Polling" The `yi` camera platform allows you to utilize [Yi Home Cameras](https://www.yitechnology.com/) within Home Assistant. Specifically, this platform supports the line of Yi Home Cameras that are based on the Hi3518e Chipset. This includes: -* Yi Home 17CN +* Yi Home 17CN / 27US / 47US * Yi 1080p Home * Yi Dome * Yi 1080p Dome @@ -26,10 +26,18 @@ To successfully implement this platform, the Home Assistant host should be capab ### {% linkable_title Installing Alternative Firmware %} -In order to integrate the camera with Home Assitant, it is necessary to install a custom firmware on the device. Instructions for doing so can be found via the [yi-hack-v3 GitHub project](https://github.com/shadow-1/yi-hack-v3). +In order to integrate the camera with Home Assistant, it is necessary to install a custom firmware on the device. Instructions for doing so can be found via the [yi-hack-v3 GitHub project](https://github.com/shadow-1/yi-hack-v3). Once installed, please ensure that you have enabled FTP and Telnet on your device. +

+Currently, version 0.1.4-beta2 of the custom firmware is the highest supported. Firmwares higher than this version use [Pure-FTPd](https://www.pureftpd.org/project/pure-ftpd), which has a bug that prevents FFmpeg from correctly rendering video files. +

+ +

+Hassbian users: don't forget to install ffmpeg support on your platform, otherwise, you'll not see video. +

+

Some alternative Yi firmwares enable an experimental RTSP server, which will allow you to connect to your camera via other Home Assistant camera platforms. However, this RTSP server disables the ability to use the supremely-useful Yi Home app. In order to maintain both Home Assistant compatibility _and_ the native app, this platform retrieves videos via FTP.

@@ -63,8 +71,8 @@ Configuration variables: - **host** (*Required*): The IP address or hostname of the camera. - **password** (*Required*): The password to the FTP server on the camera (from above). - **path** (*Optional*): The path to the raw MP4 files. Defaults to `/tmp/sd/record`. -- **username** (*Optional*): The user that can access the FTP server. Ddefaults to `root`. -- **ffmpeg_arguments** (*Optional*): Extra options to pass to `ffmpeg` (e.g. image quality or video filter options). +- **username** (*Optional*): The user that can access the FTP server. Defaults to `root`. +- **ffmpeg_arguments** (*Optional*): Extra options to pass to `ffmpeg` (e.g., image quality or video filter options). ## {% linkable_title Image quality %} diff --git a/source/_components/canary.markdown b/source/_components/canary.markdown new file mode 100644 index 00000000000..186d704e17e --- /dev/null +++ b/source/_components/canary.markdown @@ -0,0 +1,53 @@ +--- +layout: page +title: "Canary" +description: "Instructions on how to integrate your Canary devices into Home Assistant." +date: 2017-12-07 22:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: canary.png +ha_category: Hub +ha_release: "0.60" +ha_iot_class: "Cloud Polling" +--- + +The `canary` component allows you to integrate your [Canary](https://canary.is) devices in Home Assistant. + +## {% linkable_title Configuration %} + +You will need your Canary login information (username, usually your email address, and password) to use this module. + +To set it up, add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +canary: + username: YOUR_USERNAME + password: YOUR_PASSWORD +``` + +{% configuration %} + username: + description: The username for accessing your Canary account. + required: true + type: string + password: + description: The password for accessing your Canary account. + required: true + type: string + timeout: + description: Timeout to wait for connections. + required: false + type: int + default: 10 +{% endconfiguration %} + +Once loaded, your front end will have the following components: + +* A camera image triggered by motion for each camera. +* An alarm control panel for each location. +* A sensor per camera that reports temperature. +* A sensor per camera that reports humidity. +* A sensor per camera that reports air quality. diff --git a/source/_components/cast.markdown b/source/_components/cast.markdown new file mode 100644 index 00000000000..7243ad78a09 --- /dev/null +++ b/source/_components/cast.markdown @@ -0,0 +1,38 @@ +--- +layout: page +title: "Google Cast" +description: "Instructions on how to integrate Google Cast into Home Assistant." +date: 2015-03-23 19:59 +sidebar: true +comments: false +sharing: true +footer: true +logo: google_cast.png +ha_category: Media Player +featured: true +ha_release: pre 0.7 +ha_iot_class: "Local Polling" +redirect_from: /components/media_player.cast/ +--- + + +Google Cast devices like Android TVs and Chromecasts will be automatically discovered if you enable [the discovery component]({{site_root}}/components/discovery/). If you don't have the discovery component enabled, you can enable the Cast component by going to the Integrations page inside the config panel. + +## {% linkable_title Advanced use %} + +The Cast component has some extra configuration options available for advanced users. You will still need to create a config entry to initialize the Cast component. + +For example, Cast devices can only be discovered if they are on the same subnet as Home Assistant. If this is not the case, you want to configure the IP address of the Cast device directly: + + +```yaml +# Example configuration.yaml entry +cast: + media_player: + - host: 192.168.1.10 +``` + +Configuration variables: + +- **host** (*Optional*): Use only if you don't want to scan for devices. +- **ignore_cec** (*Optional*) A list of Chromecasts that should ignore CEC data for determining the active input. [See the upstream documentation for more information.](https://github.com/balloob/pychromecast#ignoring-cec-data) diff --git a/source/_components/climate.daikin.markdown b/source/_components/climate.daikin.markdown new file mode 100644 index 00000000000..2201872a15b --- /dev/null +++ b/source/_components/climate.daikin.markdown @@ -0,0 +1,51 @@ +--- +layout: page +title: "Daikin AC" +description: "Instructions on how to integrate Daikin AC(s) with Home Assistant." +date: 2017-12-03 05:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: daikin.png +ha_category: Climate +ha_release: 0.59 +ha_iot_class: "Local Polling" +--- + + +The `daikin` climate platform integrates Daikin air conditioning systems into Home Assistant, enabling control of setting the following parameters: + +- **mode** (cool, heat, dry, fan only or auto) +- **fan speed** (on supported models) +- **target temperature** +- **swing mode** (on supported models) + +Current temperature is displayed. + +

+Please note, the `daikin` platform integrates **ONLY the european versions of Daikin ACs (models BRP069A41, 42, 43, 45)** into Home Assistant. BRP069A42 does not support setting of fan speed or fan swing mode. +

+ +The platform has been integrated with discovery so all your Daikin AC's climate devices can be automatically discovered. + +To enable the platform, add the following lines to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +climate: + - platform: daikin + host: 10.0.0.1 +``` + +{% configuration %} +host: + description: IP or hostname of the device. + required: true + type: string +name: + description: If the device has a name previously set by the user than that name will be used. + required: false + type: string +{% endconfiguration %} + diff --git a/source/_components/climate.ecobee.markdown b/source/_components/climate.ecobee.markdown index 4c06cbbf90b..b92b001f379 100644 --- a/source/_components/climate.ecobee.markdown +++ b/source/_components/climate.ecobee.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Ecobee Thermostat" -description: "Instructions how to setup the Ecobee thermostats within Home Assistant." +description: "Instructions on how to setup the Ecobee thermostats within Home Assistant." date: 2016-08-26 18:00 sidebar: true comments: false @@ -240,7 +240,7 @@ For 'temp', the current temperature is taken as the target temperature. When None is provided as parameter, the hold_mode is turned off. It is not possible to set a vacation hold; such hold has to be defined on the thermostat directly. However, a vacation hold can be -cancelled. +canceled. | Service data attribute | Optional | Description | | ---------------------- | -------- | ----------- | diff --git a/source/_components/climate.econet.markdown b/source/_components/climate.econet.markdown new file mode 100644 index 00000000000..704c6ebf0ee --- /dev/null +++ b/source/_components/climate.econet.markdown @@ -0,0 +1,64 @@ +--- +layout: page +title: "EcoNet water heater" +description: "Instructions on how to integrate Rheem EcoNet water heaters into Home Assistant." +date: 2017-12-28 14:51 +sidebar: true +comments: false +sharing: true +footer: true +logo: econet.png +ha_category: Climate +ha_release: 0.61.0 +ha_iot_class: "Cloud Polling" +--- + + +The `econet` water heater platform is consuming the information provided by a [EcoNet enabled Rheem water heater](http://www.rheem.com/EcoNet/Home). This component allows you to set the temperature, the operation mode, and enable vaction mode. + +To enable the `econet` water heater platform add the following to your config. + + +```yaml +# Example configuration.yaml entry +climate: + - platform: econet + username: YOUR_ECONET_EMAIL + password: YOUR_ECONET_PASSWORD +``` + +{% configuration %} +username: + description: The username used to connect to your EcoNet account. + required: true + type: string +password: + description: The password used to connect to your EcoNet account. + required: true + type: string +{% endconfiguration %} + + +### {% linkable_title Service `econet_add_vacation` %} + +You can use the service econet/add_vacation to create a new vacation for your EcoNet water heaters. + +| Service data attribute | Optional | Description | +| ---------------------- | -------- | ----------- | +| `entity_id` | yes | The entity id of the water heater to add the vaction to. +| `start_date` | yes | This is a Unix timestamp for when the vaction should start. +| `end_date` | yes | this is a Unix timestamp for when the vaction should end. + +

+The Unix timestamps can be obtained from the input_datetime component. This will allow you to graphically set the start and end date. +

+ +### {% linkable_title Service `econet_delete_vacation` %} + +You can use the service econet/delete_vacation to remove all vactions from an EcoNet water heater. + +| Service data attribute | Optional | Description | +| ---------------------- | -------- | ----------- | +| `entity_id` | yes | The entity id of the water heater to remove the vaction from. + + diff --git a/source/_components/climate.eq3btsmart.markdown b/source/_components/climate.eq3btsmart.markdown index 5cfa52ae40c..ce833566ff4 100644 --- a/source/_components/climate.eq3btsmart.markdown +++ b/source/_components/climate.eq3btsmart.markdown @@ -1,7 +1,7 @@ --- layout: page title: "EQ3 Bluetooth Smart Thermostats" -description: "Instructions how to integrate EQ3 Bluetooth Smart Thermostats into Home Assistant." +description: "Instructions on how to integrate EQ3 Bluetooth Smart Thermostats into Home Assistant." date: 2016-04-18 22:00 sidebar: true comments: false diff --git a/source/_components/climate.flexit.markdown b/source/_components/climate.flexit.markdown index 078b840985d..0281b507565 100644 --- a/source/_components/climate.flexit.markdown +++ b/source/_components/climate.flexit.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Flexit A/C controller" -description: "Instructions how to integrate Flexit A/C unit into Home Assistant." +description: "Instructions on how to integrate Flexit A/C unit into Home Assistant." date: 2017-06-02 16:30 +0200 sidebar: true comments: false diff --git a/source/_components/climate.fritzbox.markdown b/source/_components/climate.fritzbox.markdown new file mode 100644 index 00000000000..65975ca77c5 --- /dev/null +++ b/source/_components/climate.fritzbox.markdown @@ -0,0 +1,28 @@ +--- +layout: page +title: "Fritzbox Thermostat" +description: "Instructions on how to integrate the AVM Fritzbox thermostat." +date: 2017-11-12 17:10 +sidebar: true +comments: false +sharing: true +footer: true +logo: avm.png +ha_category: Climate +ha_release: 0.68 +ha_iot_class: "Local Polling" +--- + +

+To get AVM fritzbox thermostat follow the instructions for the general [Fritzbox](/components/fritzbox/). +

+ +### {% linkable_title Attributes %} + +The are several attributes that can be useful for automations and templates. + +| Attribute | Description | +| --------- | ----------- | +| `device_locked` | The state of the key lock at the device. +| `locked` | The state of the lock for configuring the device via the app or the Fritzbox web interface. +| `low_battery` | The low battery state indication. diff --git a/source/_components/climate.generic_thermostat.markdown b/source/_components/climate.generic_thermostat.markdown index e477044c300..19e1a1f1cd4 100644 --- a/source/_components/climate.generic_thermostat.markdown +++ b/source/_components/climate.generic_thermostat.markdown @@ -14,7 +14,7 @@ ha_iot_class: "Local Polling" --- -The `generic_thermostat` climate platform is a thermostat implemented in Home Assistant. It uses a sensor and a switch connected to a heater under the hood. If the measured temperature is cooler then the target temperature, the heater will be turned on and turned off when required temperature is reached. +The `generic_thermostat` climate platform is a thermostat implemented in Home Assistant. It uses a sensor and a switch connected to a heater or air conditioning under the hood. When in heater mode, if the measured temperature is cooler then the target temperature, the heater will be turned on and turned off when the required temperature is reached. When in air conditioning mode, if the measured temperature is hotter then the target temperature, the air conditioning will be turned on and turned off when required temperature is reached. ```yaml # Example configuration.yaml entry @@ -28,19 +28,25 @@ climate: Configuration variables: - **name** (*Required*): Name of thermostat -- **heater** (*Required*): `entity_id` for heater switch, must be a toggle device. +- **heater** (*Required*): `entity_id` for heater switch, must be a toggle device. Becomes air conditioning switch when `ac_mode` is set to `True` - **target_sensor** (*Required*): `entity_id` for a temperature sensor, target_sensor.state must be temperature. - **min_temp** (*Optional*): Set minimum set point available (default: 7) - **max_temp** (*Optional*): Set maximum set point available (default: 35) -- **target_temp** (*Optional*): Set initial target temperature. Failure to set this variable will result in target temperature being set to null on startup. +- **target_temp** (*Optional*): Set initial target temperature. Failure to set this variable will result in target temperature being set to null on startup. As of version 0.59, it will retain the target temperature set before restart if available. - **ac_mode** (*Optional*): Set the switch specified in the *heater* option to be treated as a cooling device instead of a heating device. - **min_cycle_duration** (*Optional*): Set a minimum amount of time that the switch specified in the *heater* option must be in it's current state prior to being switched either off or on. - **cold_tolerance** (*Optional*): Set a minimum amount of difference between the temperature read by the sensor specified in the *target_sensor* option and the target temperature that must change prior to being switched on. For example, if the target temperature is 25 and the tolerance is 0.5 the heater will start when the sensor equals or goes below 24.5. - **hot_tolerance** (*Optional*): Set a minimum amount of difference between the temperature read by the sensor specified in the *target_sensor* option and the target temperature that must change prior to being switched off. For example, if the target temperature is 25 and the tolerance is 0.5 the heater will stop when the sensor equals or goes above 25.5. -- **keep_alive** (*Optional*): Set a keep-alive interval. If set, the switch specified in the *heater* option will be triggered every time the interval elapses. Use with heaters and A/C units that shut off if they don't receive a signal from their remote for a while. +- **keep_alive** (*Optional*): Set a keep-alive interval. If set, the switch specified in the *heater* option will be triggered every time the interval elapses. Use with heaters and A/C units that shut off if they don't receive a signal from their remote for a while. Use also with switches that might lose state. The keep-alive call is done with the current valid climate component state (either on or off). +- **initial_operation_mode** (*Optional*): Set the initial operation mode. Valid values are `off` or `auto`. Value has to be double quoted. If this parameter is not set, it is preferable to set a *keep_alive* value. This is helpful to align any discrepancies between *generic_thermostat* and *heater* state. +- **away_temp** (*Optional*): Set the temperature used by "away_mode". If this is not specified, away_mode feature will not get activated. A full configuration example looks like the one below. `min_cycle_duration` and `keep_alive` must contain at least one of the following entries: `days:`, `hours:`, `minutes:`, `seconds:` or `milliseconds:`. +Currently the `generic_thermostat` climate platform supports 'heat', 'cool' and 'off' operation modes. You can force your `generic_thermstat` to avoid starting by setting Operation to 'off'. + +Please note that changing Away Mode you will force a target temperature change as well that will get restored once the Away Mode is turned off. + ```yaml # Full example configuration.yaml entry climate: @@ -50,6 +56,7 @@ climate: target_sensor: sensor.study_temperature min_temp: 15 max_temp: 21 + ac_mode: False target_temp: 17 cold_tolerance: 0.3 hot_tolerance: 0 @@ -57,4 +64,6 @@ climate: seconds: 5 keep_alive: minutes: 3 + initial_operation_mode: "off" + away_temp: 16 ``` diff --git a/source/_components/climate.heatmiser.markdown b/source/_components/climate.heatmiser.markdown index b772e9923b4..b1478034e9f 100644 --- a/source/_components/climate.heatmiser.markdown +++ b/source/_components/climate.heatmiser.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Heatmiser Thermostat" -description: "Instructions how to integrate Heatmiser thermostats within Home Assistant." +description: "Instructions on how to integrate Heatmiser thermostats within Home Assistant." date: 2015-12-11 12:35 sidebar: true comments: false diff --git a/source/_components/climate.hive.markdown b/source/_components/climate.hive.markdown index a6c40b14623..12f46885533 100644 --- a/source/_components/climate.hive.markdown +++ b/source/_components/climate.hive.markdown @@ -14,12 +14,15 @@ ha_iot_class: "Cloud Polling" --- -The 'hive' climate component integrates your Hive thermostat and hot water into Home Assistant, enabling control of setting the **mode** and setting the **target temperature**. +The `hive` climate platform integrates your Hive thermostat and hot water into Home Assistant, enabling control of setting the **mode** and setting the **target temperature**. -The Hive climate component supports the following Hive products: -- **Hive Active Heating** -- **Hive Multizone** -- **Hot water control** +A short boost for Hive Heating or Hive Hot water can be set by using the **Aux Heat** function, this will turn on the boost feature for Hive Heating or Hive Hot water for 30 minutes at 0.5 degrees higher than the current temperature. + +The platform supports the following Hive products: + +- Hive Active Heating +- Hive Multizone +- Hot water control

diff --git a/source/_components/climate.homekit_controller.markdown b/source/_components/climate.homekit_controller.markdown new file mode 100644 index 00000000000..8e0414cf551 --- /dev/null +++ b/source/_components/climate.homekit_controller.markdown @@ -0,0 +1,16 @@ +--- +layout: page +title: "HomeKit Climate" +description: "Instructions how to setup HomeKit thermostats within Home Assistant." +date: 2018-06-19 20:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: apple-homekit.png +ha_category: Climate +ha_iot_class: "Local Polling" +ha_release: 0.73 +--- + +To get your HomeKit thermostats and air conditioners working with Home Assistant, follow the instructions for the general [HomeKit controller component](/components/homekit_controller/). diff --git a/source/_components/climate.homematic.markdown b/source/_components/climate.homematic.markdown index ac5458d592b..86e38fdb497 100644 --- a/source/_components/climate.homematic.markdown +++ b/source/_components/climate.homematic.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Homematic Thermostats" -description: "Instructions how to integrate Homematic thermostats within Home Assistant." +description: "Instructions on how to integrate Homematic thermostats within Home Assistant." date: 2016-06-28 08:30 sidebar: true comments: false diff --git a/source/_components/climate.homematicip_cloud.markdown b/source/_components/climate.homematicip_cloud.markdown new file mode 100644 index 00000000000..77acd4a426b --- /dev/null +++ b/source/_components/climate.homematicip_cloud.markdown @@ -0,0 +1,21 @@ +--- +layout: page +title: "HomematicIP Cloud Climate" +description: "Instructions on how to integrate HomematicIP climate within Home Assistant." +date: 2018-05-18 22:40 +sidebar: true +comments: false +sharing: true +footer: true +logo: homematicip_cloud.png +ha_category: Sensor +ha_release: 0.71 +ha_iot_class: "Cloud Push" +--- + +The `homematicip_cloud` climate platform allows you to control +[HomematicIP](https://www.homematic-ip.com) climate through Home Assistant. + +Devices will be configured automatically. Please refer to the +[component](/components/homematicip_cloud/) configuration on how to setup +HomematicIP Cloud. diff --git a/source/_components/climate.honeywell.markdown b/source/_components/climate.honeywell.markdown index 8a50fc5dd66..64270441aac 100644 --- a/source/_components/climate.honeywell.markdown +++ b/source/_components/climate.honeywell.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Honeywell Thermostat" -description: "Instructions how to integrate Honeywell thermostats within Home Assistant." +description: "Instructions on how to integrate Honeywell thermostats within Home Assistant." date: 2016-02-07 22:01 sidebar: true comments: false @@ -16,6 +16,10 @@ ha_iot_class: "Cloud Polling" The `honeywell` climate platform let you control [Honeywell Connected](http://getconnected.honeywell.com/en/) thermostats from Home Assistant. +

+This platform does NOT connect to MyTotalConnectComfort.com. If you have a Honeywell WIFI thermostat that is connected through MyTotalConnectComfort.com, you may might to take a look at the IFTTT component which can bridge the gap between Home Assistant and MyTotalConnectComfort.com WIFI thermostats on a limited basis. +

+ To set it up, add the following information to your `configuration.yaml` file: ```yaml @@ -36,5 +40,5 @@ Configuration variables: - **region** (*Optional*): Region identifier (either 'eu' or 'us'). Defaults to 'eu' if not provided. - **scan_interval**(*Optional*): Scan interval is expressed in seconds. Recommended value of 600 seconds. Default value is 120 seconds. Omitting scan_interval may result in too-frequent polling and cause you to rate-limited by Honeywell. - **away_temperature** (*Optional*) (*only for eu region*): Heating setpoint when away mode is on. If omitted it defaults to 16.0 deg C. -- **cool_away_temperature** (*Optional*) (*only for us region*): Cooling setpoint when away mode is on. If omitted it defaults to 30.0 deg C. -- **heat_away_temperature** (*Optional*) (*only for us region*): Heating setpoint when away mode is on. If omitted it defaults to 16.0 deg C. +- **away_cool_temperature** (*Optional*) (*only for us region*): Cooling setpoint when away mode is on. If omitted it defaults to 30.0 deg C. +- **away_heat_temperature** (*Optional*) (*only for us region*): Heating setpoint when away mode is on. If omitted it defaults to 16.0 deg C. diff --git a/source/_components/climate.markdown b/source/_components/climate.markdown index ce47cc8a3cb..fd41b437cd5 100644 --- a/source/_components/climate.markdown +++ b/source/_components/climate.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Climate" -description: "Instructions how to setup climate control devices within Home Assistant." +description: "Instructions on how to setup climate control devices within Home Assistant." date: 2016-08-26 19:00 sidebar: true comments: false @@ -23,7 +23,7 @@ climate: ## {% linkable_title Services %} ### {% linkable_title Climate control services %} -Available services: `climate.set_aux_heat`, `climate.set_away_mode`, `climate.set_temperature`, `climate.set_humidity`, `climate.set_fan_mode`, `climate.set_operation_mode`, `climate.set_swing_mode`, `climate.set_hold_mode` +Available services: `climate.set_aux_heat`, `climate.set_away_mode`, `climate.set_temperature`, `climate.set_humidity`, `climate.set_fan_mode`, `climate.set_operation_mode`, `climate.set_swing_mode`, `climate.set_hold_mode`, `climate.turn_on`, `climate.turn_off`

Not all climate services may be available for your platform. Be sure to check the available services Home Assistant has enabled by checking service developer tool icon **Services**. @@ -222,6 +222,22 @@ automation: entity_id: climate.kitchen swing_mode: 1 ``` +### {% linkable_title Service `climate.turn_on` %} + +Turn climate device on + +| Service data attribute | Optional | Description | +| ---------------------- | -------- | ----------- | +| `entity_id` | yes | String or list of strings that point at `entity_id`'s of climate devices to control. Targets all when omitted. + +### {% linkable_title Service `climate.turn_off` %} + +Turn climate device off + +| Service data attribute | Optional | Description | +| ---------------------- | -------- | ----------- | +| `entity_id` | yes | String or list of strings that point at `entity_id`'s of climate devices to control. Targets all when omitted. + #### {% linkable_title Customization %} The step for the setpoint can be adjusted (default to 0,5 increments) by adding the following line into configuration diff --git a/source/_components/climate.melissa.markdown b/source/_components/climate.melissa.markdown new file mode 100644 index 00000000000..9d648a83b59 --- /dev/null +++ b/source/_components/climate.melissa.markdown @@ -0,0 +1,20 @@ +--- +layout: page +title: "Melissa Climate" +description: "Instructions on how to integrate Melissa climate system (HVAC) into Home Assistant." +date: 2018-01-08 20:21 +sidebar: true +comments: false +sharing: true +footer: true +logo: mclimate.png +ha_category: Climate +ha_iot_class: "Cloud Polling" +ha_release: 0.63 +--- + +The `Melissa` climate platform allows you to control your [Melissa Climate](http://seemelissa.com/) from within Home Assistant. + +The climate platform will be automatically configured if Melissa component is configured. + +For more configuration information see the [Melissa component](/components/melissa/) documentation. diff --git a/source/_components/climate.modbus.markdown b/source/_components/climate.modbus.markdown new file mode 100644 index 00000000000..62163a316aa --- /dev/null +++ b/source/_components/climate.modbus.markdown @@ -0,0 +1,71 @@ +--- +layout: page +title: "Modbus" +description: "Instructions how to integrate a Modbus thermostat within Home Assistant." +date: 2018-01-29 9:35 +sidebar: true +comments: false +sharing: true +footer: true +logo: modbus.png +ha_category: Climate +ha_release: 0.68 +ha_iot_class: "Local Polling" +--- + + +The `modbus` thermostat allows you to use a sensor value (current temperature) and target value (target temperature) from [Modbus](http://www.modbus.org/) registers. + +## {% linkable_title Configuration %} + +To use your Modbus thermostat in your installation, add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +climate: + - platform: modbus + name: Watlow F4T + slave: 1 + target_temp_register: 2782 + current_temp_register: 27586 +``` + +{% configuration %} +name: + description: Name of the device + required: true + type: string +slave: + description: The number of the slave (Optional for tcp and upd Modbus, use 1). + required: true + type: int +target_temp_register: + description: Register number for target temperature (Setpoint). + required: true + type: int +current_temp_register: + description: Register number for current temperature (Process value). + required: true + type: int +data_type: + description: Response representation (int, uint, float, custom). If float selected, value will converted to IEEE 754 floating point format. + required: false + type: string + default: float +count: + description: Number of registers to read. + required: false + type: int +precision: + description: Number of valid decimals. + required: false + type: int + default: 0 +{% endconfiguration %} + + +### {% linkable_title Services %} + +| Service | Description | +| ------- | ----------- | +| set_temperature | Set Temperature. Requires `value` to be passed in, which is the desired target temperature. `value` should be in the same type as `data_type` | diff --git a/source/_components/climate.mqtt.markdown b/source/_components/climate.mqtt.markdown index 7d624b4d9a9..c9179e230b9 100644 --- a/source/_components/climate.mqtt.markdown +++ b/source/_components/climate.mqtt.markdown @@ -1,13 +1,13 @@ --- layout: page title: "MQTT HVAC" -description: "Instructions how to integrate MQTT HVAC into Home Assistant." +description: "Instructions on how to integrate MQTT HVAC into Home Assistant." date: 2017-07-31 19:59 sidebar: true comments: false sharing: true footer: true -logo: heat-control.png +logo: mqtt.png ha_category: Climate ha_release: 0.55 ha_iot_class: "Local Polling" @@ -28,38 +28,189 @@ climate: temperature_command_topic: /sensors/hvac_study/target_temp ``` -Configuration variables *except* for MQTT topics: +{% configuration %} +name: + description: The name of the HVAC. + required: false + type: string + default: MQTT HVAC +qos: + description: The maximum QoS level to be used when receiving and publishing messages. + required: false + type: integer + default: 0 +retain: + description: Defines if published messages should have the retain flag set. + required: false + type: boolean + default: false +send_if_off: + description: "Set to `false` to suppress sending of all MQTT messages when the current mode is `Off`." + required: false + type: boolean + default: true +initial: + description: Set the initial target temperature. + required: false + type: number + default: 21 +payload_on: + description: The payload that represents enabled state. + required: false + type: string + default: ON +payload_off: + description: The payload that represents disabled state. + required: false + type: string + default: OFF +availability_topic: + description: The MQTT topic subscribed to receive availability (online/offline) updates. + required: false + type: string +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 +value_template: + description: Default template to render the payloads on *all* `*_state_topic`s with. + type: template + required: false +current_temperature_topic: + description: The MQTT topic on which to listen for the current temperature. + required: false + type: string +power_command_topic: + description: The MQTT topic to publish commands to change the power state. This is useful if your device has a separate power toggle in addition to mode. + required: false + type: string +mode_command_topic: + description: The MQTT topic to publish commands to change the HVAC operation mode. + required: false + type: string +mode_state_topic: + description: The MQTT topic to subscribe for changes of the HVAC operation mode. If this is not set, the operation mode works in optimistic mode (see below). + required: false + type: string +mode_state_template: + description: A template to render the value received on the `mode_state_topic` with. + required: false + type: template +temperature_command_topic: + description: The MQTT topic to publish commands to change the target temperature. + required: false + type: string +temperature_state_topic: + description: The MQTT topic to subscribe for changes in the target temperature. If this is not set, the target temperature works in optimistic mode (see below). + required: false + type: string +temperature_state_template: + description: A template to render the value received on the `temperature_state_topic` with. + required: false + type: template +fan_mode_command_topic: + description: The MQTT topic to publish commands to change the fan mode. + required: false + type: string +fan_mode_state_topic: + description: The MQTT topic to subscribe for changes of the HVAC fan mode. If this is not set, the fan mode works in optimistic mode (see below). + required: false + type: string +fan_mode_state_template: + description: A template to render the value received on the `fan_mode_state_topic` with. + required: false + type: template +swing_mode_command_topic: + description: The MQTT topic to publish commands to change the swing mode. + required: false + type: string +swing_mode_state_topic: + description: The MQTT topic to subscribe for changes of the HVAC swing mode. If this is not set, the swing mode works in optimistic mode (see below). + required: false + type: string +swing_mode_state_template: + description: A template to render the value received on the `swing_mode_state_topic` with. + required: false + type: template +away_mode_command_topic: + description: The MQTT topic to publish commands to change the away mode. + required: false + type: string +away_mode_state_topic: + description: The MQTT topic to subscribe for changes of the HVAC away mode. If this is not set, the away mode works in optimistic mode (see below). + required: false + type: string +away_mode_state_template: + description: A template to render the value received on the `away_mode_state_topic` with. + required: false + type: template +hold_command_topic: + description: The MQTT topic to publish commands to change the hold mode. + required: false + type: string +hold_state_topic: + description: The MQTT topic to subscribe for changes of the HVAC hold mode. If this is not set, the hold mode works in optimistic mode (see below). + required: false + type: string +hold_state_template: + description: A template to render the value received on the `hold_state_topic` with. + required: false + type: template +aux_command_topic: + description: The MQTT topic to publish commands to switch auxiliary heat. + required: false + type: string +aux_state_topic: + description: The MQTT topic to subscribe for changes of the auxiliary heat mode. If this is not set, the auxiliary heat mode works in optimistic mode (see below). + required: false + type: string +aux_state_template: + description: A template to render the value received on the `aux_state_topic` with. + required: false + type: template +min_temp: + description: Minimum set point available + type: number + required: false +max_temp: + description: Maximum set point available + type: number + required: false +{% endconfiguration %} -- **name** (*Required*): Name of MQTT HVAC. -- **qos** (*Optional*): The maximum QoS level of the state topic. Default is `0` and will also be used to publishing messages. -- **retain** (*Optional*): If the published message should have the retain flag on or not. -- **send_if_off** (*Optional*): Set to `false` to suppress sending of all MQTT messages when the current mode is `Off`. Defaults to `true`. -- **initial** (*Optional*): Set the initial target temperature. Defaults to 21 degrees. -- **payload_on** (*Optional*): For MQTT topics that control an `on` / `off` value (e.g., `aux_command_topic`), set the value that should be sent for `on`. Defaults to 'ON'. -- **payload_off** (*Optional*): For MQTT topics that control an `on` / `off` value (e.g., `aux_command_topic`), set the value that should be sent for `off`. Defaults to 'OFF'. +#### {% linkable_title Optimistic mode %} -Configuration of the MQTT topics: +If a property works in *optimistic mode* (when the corresponding state topic is not set), Home Assistant will assume that any state changes published to the command topics did work and change the internal state of the entity immediately after publishing to the command topic. If it does not work in optimistic mode, the internal state of the entity is only updated when the requested update is confirmed by the device through the state topic. -- **current_temperature_topic** (*Optional*): The MQTT topic on which to listen for the current temperature -- **power_command_topic** (*Optional*): The MQTT topic to publish commands to change the power state. This is useful if your device has a separate power toggle in addition to mode. -- **mode_command_topic** (*Optional*): The MQTT topic to publish commands to change the HVAC operation mode. -- **mode_state_topic** (*Optional*): The MQTT topic to subscribe for changes of the HVAC operation mode. If this is not set, the operation mode works in optimistic mode (see below). -- **temperature_command_topic** (*Optional*): The MQTT topic to publish commands to change the target temperature. -- **temperature_state_topic** (*Optional*): The MQTT topic to subscribe for changes in the target temperature. If this is not set, the target temperature works in optimistic mode (see below). -- **fan_mode_command_topic** (*Optional*): The MQTT topic to publish commands to change the fan mode. -- **fan_mode_state_topic** (*Optional*): The MQTT topic to subscribe for changes of the HVAC fan mode. If this is not set, the fan mode works in optimistic mode (see below). -- **swing_mode_command_topic** (*Optional*): The MQTT topic to publish commands to change the swing mode. -- **swing_mode_state_topic** (*Optional*): The MQTT topic to subscribe for changes of the HVAC swing mode. If this is not set, the swing mode works in optimistic mode (see below). -- **away_mode_command_topic** (*Optional*): The MQTT topic to publish commands to change the away mode. -- **away_mode_state_topic** (*Optional*): The MQTT topic to subscribe for changes of the HVAC away mode. If this is not set, the away mode works in optimistic mode (see below). -- **hold_command_topic** (*Optional*): The MQTT topic to publish commands to change the hold mode. -- **hold_state_topic** (*Optional*): The MQTT topic to subscribe for changes of the HVAC hold mode. If this is not set, the hold mode works in optimistic mode (see below). -- **aux_command_topic** (*Optional*): The MQTT topic to publish commands to switch auxiliary heat. -- **aux_state_topic** (*Optional*): The MQTT topic to subscribe for changes of the auxiliary heat mode. If this is not set, the auxiliary heat mode works in optimistic mode (see below). +#### {% linkable_title Using Templates %} -#### Optimistic mode +For all `*_state_topic`s, a template can be specified that will be used to render the incoming payloads on these topics. Also, a default template that applies to all state topis can be specified as `value_template`. This can be useful if you received payloads are e.g., in JSON format. Since in JSON, a quoted string (e.g., `"foo"`) is just a string, this can also be used for unquoting. + +Say you receive the operation mode `"auto"` via your `mode_state_topic`, but the mode is actually called just `auto`, here's what you could do: + +{% raw %} +```yaml +climate: + - platform: mqtt + name: Study + modes: + - off + - on + - auto + mode_command_topic: "study/ac/mode/set" + mode_state_topic: "study/ac/mode/state" + mode_state_template: "{{ value_json }}" +``` +{% endraw %} + +This will parse the incoming `"auto"` as JSON, resulting in `auto`. Obviously, in this case you could also just set `value_template: {% raw %}"{{ value_json }}"{% endraw %}`. -If a property works in *optimistic mode* (when the corresponding state topic is not set), home assistant will assume that any state changes published to the command topics did work and change the internal state of the entity immediately after publishing to the command topic. If it does not work in optimistic mode, the internal state of the entity is only updated when the requested update is confirmed by the device through the state topic. ### {% linkable_title Example %} diff --git a/source/_components/climate.mysensors.markdown b/source/_components/climate.mysensors.markdown index a61fae33f90..6f5379449b0 100644 --- a/source/_components/climate.mysensors.markdown +++ b/source/_components/climate.mysensors.markdown @@ -1,7 +1,7 @@ --- layout: page title: "MySensors HVAC" -description: "Instructions how to integrate MySensors climate into Home Assistant." +description: "Instructions on how to integrate MySensors climate into Home Assistant." date: 2016-10-01 15:00 +0200 sidebar: true comments: false diff --git a/source/_components/climate.nest.markdown b/source/_components/climate.nest.markdown index be9adf6d414..80ba8505f33 100644 --- a/source/_components/climate.nest.markdown +++ b/source/_components/climate.nest.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Nest Thermostat" -description: "Instructions how to integrate Nest thermostats within Home Assistant." +description: "Instructions on how to integrate Nest thermostats within Home Assistant." date: 2015-03-23 19:59 sidebar: true comments: false @@ -9,7 +9,7 @@ sharing: true footer: true logo: nest.png ha_category: Climate -ha_iot_class: "Cloud Polling" +ha_iot_class: "Cloud Push" --- diff --git a/source/_components/climate.netatmo.markdown b/source/_components/climate.netatmo.markdown index 72c4f0de00c..a90a1f4353c 100644 --- a/source/_components/climate.netatmo.markdown +++ b/source/_components/climate.netatmo.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Netatmo Thermostat" -description: "Instructions how to integrate Netatmo thermostat into Home Assistant." +description: "Instructions on how to integrate Netatmo thermostat into Home Assistant." date: 2016-10-11 08:10 sidebar: true comments: false diff --git a/source/_components/climate.nuheat.markdown b/source/_components/climate.nuheat.markdown new file mode 100644 index 00000000000..46a8e84c5ad --- /dev/null +++ b/source/_components/climate.nuheat.markdown @@ -0,0 +1,139 @@ +--- +layout: page +title: "NuHeat Thermostat" +description: "Instructions on how to integrate your NuHeat Signature thermostats within Home Assistant." +date: 2017-11-11 18:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: nuheat.png +ha_category: Climate +ha_release: 0.61 +ha_iot_class: "Cloud Polling" +--- + +

+To get your [NuHeat Signature](http://www.nuheat.com/products/thermostats/signature-thermostat) thermostats working within Home Assistant, please follow the instructions for the general [NuHeat component](/components/nuheat) +

+ +## {% linkable_title Concepts %} + +The NuHeat Thermostat supports the following key concepts. + +The `target temperature` is the temperature that the device attempts to achieve. The target temperature is either determined by the schedule programmed into the thermostat (`auto mode`) or may be overridden. When the target temperature is set by Home Assistant, the thermostat will hold this temperature until the schedule is resumed. + + +## {% linkable_title Attributes %} + +The following attributes are provided by the NuHeat thermostat: `name`, `temperature_unit`, `current_temperature`, `target_temperature`, `current_hold_mode`, `current_operation`, `operation_list`, `min_temp` and `max_temp`. + + +### {% linkable_title Attribute `name` %} + +Returns the name of the NuHeat Thermostat. + +| Attribute type | Description | +| ---------------| ----------- | +| String | Name of the thermostat + +### {% linkable_title Attribute `temperature_unit` %} + +Returns the unit of measurement used for temperature by the thermostat. + +| Attribute type | Description | +| ---------------| ----------- | +| String | Name of the temperature unit + +### {% linkable_title Attribute `current_temperature` %} + +Returns the current temperature measured by the thermostat. + +| Attribute type | Description | +| ---------------| ----------- | +| Integer | Currently measured temperature + +### {% linkable_title Attribute `target_temperature` %} + +Returns the target temperature of the thermostat, when the thermostat is +not in auto operation mode. + +| Attribute type | Description | +| ---------------| ----------- | +| Integer | Target temperature + +### {% linkable_title Attribute `current_hold_mode` %} + +Returns the current temperature hold, if any. + +| Attribute type | Description | +| ---------------| ----------- | +| String | 'temperature', 'temporary_temperature', 'auto', etc. + +### {% linkable_title Attribute `current_operation` %} + +Returns the current operation of the thermostat. + +| Attribute type | Description | +| ---------------| ----------- | +| String | 'heat', 'idle' + +### {% linkable_title Attribute `operation_list` %} + +Returns the list of available operation modes. + +| Attribute type | Description | +| ---------------| ----------- | +| List of String | Available operation modes + +### {% linkable_title Attribute `min_temp` %} + +Returns the minimum supported temperature by the thermostat + +| Attribute type | Description | +| ---------------| ----------- | +| Integer | Minimum supported temperature + +### {% linkable_title Attribute `max_temp` %} + +Returns the maximum supported temperature by the thermostat + +| Attribute type | Description | +| ---------------| ----------- | +| Integer | Maximum supported temperature + + +## {% linkable_title Services %} + +The following services are provided by the NuHeat Thermostat: `set_temperature`, `set_hold_mode`, `nuheat_resume_program`. + +The services `fan_min_on_time`, `set_aux_heat`, `set_away_mode`, `set_humidity`, `set_fan_mode`, `set_operation_mode` and `set_swing_mode` offered by the [Climate component](/components/climate/) are not implemented for this thermostat. + +### {% linkable_title Service `set_temperature` %} + +Puts the thermostat into an indefinite hold at the given temperature. + +| Service data attribute | Optional | Description | +| ---------------------- | -------- | ----------- | +| `entity_id` | yes | String or list of strings that point at `entity_id`'s of climate devices to control. Else targets all. +| `temperature` | no | Desired target temperature (when not in auto mode) + +Only the target temperatures relevant for the current operation mode need to +be provided. + +### {% linkable_title Service `set_hold_mode` %} + +Sets the thermostat's hold mode. The NuHeat thermostat supports "auto" (to run the thermostat's programmed schedule), "temperature" (to indefinitely hold the thermostat's current target temperature), or "temporary_temperature" (to hold the thermostat's current target temperature until the thermostat's next scheduled event). + +| Service data attribute | Optional | Description | +| ---------------------- | -------- | ----------- | +| `entity_id` | yes | String or list of strings that point at `entity_id`'s of climate devices to control. Else targets all. +| `hold_mode` | no | New value of hold mode. + +### {% linkable_title Service `nuheat_resume_program` %} + +Resumes the currently active schedule. + +| Service data attribute | Optional | Description | +| ---------------------- | -------- | ----------- | +| `entity_id` | yes | String or list of strings that point at `entity_id`'s of climate devices to control. Else targets all. diff --git a/source/_components/climate.oem.markdown b/source/_components/climate.oem.markdown index c123b0e0f7b..1f07cf6bd58 100644 --- a/source/_components/climate.oem.markdown +++ b/source/_components/climate.oem.markdown @@ -1,7 +1,7 @@ --- layout: page title: "OpenEnergyMonitor WiFi Thermostat" -description: "Instructions how to integrate an OpenEnergyMonitor thermostat with Home Assistant." +description: "Instructions on how to integrate an OpenEnergyMonitor thermostat with Home Assistant." date: 2017-01-27 11:15 sidebar: true comments: false @@ -13,9 +13,9 @@ ha_release: 0.39 ha_iot_class: "Local Polling" --- -This platform supports the ESP82666 based "WiFi MQTT Relay / Thermostat" sold by [OpenEnergyMonitor](https://shop.openenergymonitor.com/wifi-mqtt-relay-thermostat/). The underlying [library](http://oemthermostat.readthedocs.io/) only supports this single relay variant of the [original device](https://harizanov.com/2014/12/wifi-iot-3-channel-relay-board-with-mqtt-and-http-api-using-esp8266/). +This platform supports the ESP8266 based "WiFi MQTT Relay / Thermostat" sold by [OpenEnergyMonitor](https://shop.openenergymonitor.com/wifi-mqtt-relay-thermostat/). The underlying [library](http://oemthermostat.readthedocs.io/) only supports this single relay variant of the [original device](https://harizanov.com/2014/12/wifi-iot-3-channel-relay-board-with-mqtt-and-http-api-using-esp8266/). -This platform controls the setpoint of the thermostat in it's "manual" mode, therefore there is a configuration option the away setpoint. +This platform controls the setpoint of the thermostat in its "manual" mode, therefore there is a configuration option the away setpoint. To set it up, add the following information to your `configuration.yaml` file: diff --git a/source/_components/climate.proliphix.markdown b/source/_components/climate.proliphix.markdown index 74227c0a98b..b089ef586d5 100644 --- a/source/_components/climate.proliphix.markdown +++ b/source/_components/climate.proliphix.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Proliphix Thermostat" -description: "Instructions how to integrate Proliphix thermostats within Home Assistant." +description: "Instructions on how to integrate Proliphix thermostats within Home Assistant." date: 2016-01-15 08:00 sidebar: true comments: false diff --git a/source/_components/climate.radiotherm.markdown b/source/_components/climate.radiotherm.markdown index f3cf3bd919f..f4d08db1072 100644 --- a/source/_components/climate.radiotherm.markdown +++ b/source/_components/climate.radiotherm.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Radio Thermostat (3M Filtrete) Thermostat" -description: "Instructions how to integrate Radio Thermostat (3M Filtrete) thermostats within Home Assistant." +description: "Instructions on how to integrate Radio Thermostat (3M Filtrete) thermostats within Home Assistant." date: 2015-10-18 17:15 sidebar: true comments: false diff --git a/source/_components/climate.sensibo.markdown b/source/_components/climate.sensibo.markdown index 9b9771bc42d..02003d4aa6a 100644 --- a/source/_components/climate.sensibo.markdown +++ b/source/_components/climate.sensibo.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Sensibo A/C controller" -description: "Instructions how to integrate Sensibo A/C controller into Home Assistant." +description: "Instructions on how to integrate Sensibo A/C controller into Home Assistant." date: 2017-04-01 15:00 +0200 sidebar: true comments: false diff --git a/source/_components/climate.spider.markdown b/source/_components/climate.spider.markdown new file mode 100644 index 00000000000..a25d49d7f94 --- /dev/null +++ b/source/_components/climate.spider.markdown @@ -0,0 +1,28 @@ +--- +layout: page +title: "Spider Thermostat" +description: "Instructions on how to integrate Spider thermostats within Home Assistant." +date: 2018-07-17 22:01 +sidebar: true +comments: false +sharing: true +footer: true +logo: spider.png +ha_category: Climate +ha_iot_class: "Cloud Polling" +ha_release: 0.75 +--- + +The `spider` climate platform allows you to control your temperature settings as well as if you want to cool or heat. + +

+Full configuration details can be found on the main [Spider component](/components/spider/) page. +

+ +

+Although this component lets you change the operation mode to heating or cooling, it doesn't necessarily mean your boiler can. Spider is not aware of your current situation. +

+ +

+This component is not affiliated with Itho Daalderop Spider and retrieves data from the endpoints of the mobile application. Use at your own risk. +

\ No newline at end of file diff --git a/source/_components/climate.toon.markdown b/source/_components/climate.toon.markdown index 57d8708aa38..61e4258847d 100644 --- a/source/_components/climate.toon.markdown +++ b/source/_components/climate.toon.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Toon Thermostat" -description: "Instructions how to integrate Toon thermostats within Home Assistant." +description: "Instructions on how to integrate Toon thermostats within Home Assistant." date: 2017-10-22 12:00 sidebar: true comments: false diff --git a/source/_components/climate.touchline.markdown b/source/_components/climate.touchline.markdown new file mode 100644 index 00000000000..0f7f2719462 --- /dev/null +++ b/source/_components/climate.touchline.markdown @@ -0,0 +1,32 @@ +--- +layout: page +title: "Roth Touchline" +description: "Instructions on how to integrate Roth Touchline within Home Assistant." +date: 2018-01-03 12:35 +sidebar: true +comments: false +sharing: true +footer: true +logo: roth.png +ha_category: Climate +ha_release: 0.61 +ha_iot_class: "Local Polling" +--- + +The `touchline` climate platform let you control [ROTH Touchline](http://www.roth-nordic.dk/dk/roth-touchline-tradloes-gulvvarmeregulering-1475.htm) floor heating thermostats from Roth. + + +To set it up, add the following information to your `configuration.yaml` file: + +```yaml +climate: + - platform: touchline + host: YOUR_IPADDRESS +``` + +{% configuration %} +host: + description: The IP address of your controller, e.g., http://192.168.1.1. + required: false + type: string +{% endconfiguration %} diff --git a/source/_components/climate.tuya.markdown b/source/_components/climate.tuya.markdown new file mode 100644 index 00000000000..4d89a4783b1 --- /dev/null +++ b/source/_components/climate.tuya.markdown @@ -0,0 +1,22 @@ +--- +layout: page +title: "Tuya Climate" +description: "Instructions on how to setup the Tuya climate devices within Home Assistant." +date: 2018-07-16 09:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: tuya.png +ha_category: Climate +ha_release: 0.75 +ha_iot_class: "Cloud Polling" +--- + +The `tuya` climate platform allows you to control your [Tuya Smart](https://www.tuya.com) climate devices. + +The platform supports the air conditioner and heater. + +

+Full configuration details can be found on the main [Tuya component](/components/tuya/) page. +

diff --git a/source/_components/climate.venstar.markdown b/source/_components/climate.venstar.markdown new file mode 100644 index 00000000000..253e8700675 --- /dev/null +++ b/source/_components/climate.venstar.markdown @@ -0,0 +1,89 @@ +--- +layout: page +title: "Venstar Thermostat" +description: "Instructions for how to integrate Venstar WiFi thermostats within Home Assistant." +date: 2018-01-14 00:04 +sidebar: true +comments: false +sharing: true +footer: true +logo: venstar.png +ha_category: Climate +ha_release: 0.62 +ha_iot_class: "Local Polling" +--- + + +The `venstar` climate platform allows you to control [Venstar](http://www.venstar.com) thermostats from Home Assistant. +Venstar thermostats feature a local API that allows for automation without the need for a cloud service. + +Currently supported and tested thermostats: + +- Color Touch T7900 + +Currently supported functionality: +- Setting heat/cool temperature when the thermostat is in the appropriate mode. +- Changing the operation mode of the thermostat (heat/cool/off/auto) +- Turning the fan on/off +- Reading and setting the humidity level and limits +- Turning away mode on/off +- Turning hold mode on/off + +The following values are supported for the hold_mode state attribute: +- `off`: *Enables* the scheduling functionality. +- `temperature`: *Disables* the schedule and holds the set temperature indefinitely. + +Note - Please ensure you update your thermostat to the latest firmware. Currently tested on firmware 5.10. + +To set it up, add the following information to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +climate: + - platform: venstar + host: IP_OR_HOSTNAME_OF_THERMOSTAT +``` + +{% configuration %} +host: + description: Address of your thermostat, e.g., 192.168.1.32. + required: true + type: string +username: + description: Username for the thermostat. + required: false + type: string +password: + description: Password for the thermostat. + required: false + type: string +ssl: + description: Whether to use SSL or not when communicating. + required: false + type: boolean + default: False +timeout: + description: Number of seconds for API timeout. + required: false + type: int + default: 5 +humidifier: + description: Report humidity and expose humidifier setpoints. + required: false + type: boolean + default: true +{% endconfiguration %} + +## {% linkable_title Full configuration sample %} + +```yaml +# Example configuration.yaml entry +climate: + - platform: venstar + host: IP_OR_HOSTNAME_OF_THERMOSTAT + ssl: True/False + username: OPTIONAL_AUTH_USER_HERE + password: OPTIONAL_AUTH_PASS_HERE + timeout: 5 + humidifier: False +``` diff --git a/source/_components/climate.vera.markdown b/source/_components/climate.vera.markdown index bc8a9fdc58f..c46b8fdff9b 100644 --- a/source/_components/climate.vera.markdown +++ b/source/_components/climate.vera.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Vera Thermostat" -description: "Instructions how to integrate Vera thermostats into Home Assistant." +description: "Instructions on how to integrate Vera thermostats into Home Assistant." date: 2016-09-19 21:00 sidebar: true comments: false diff --git a/source/_components/climate.wink.markdown b/source/_components/climate.wink.markdown index 3a41d2c81d5..be8623cb08f 100644 --- a/source/_components/climate.wink.markdown +++ b/source/_components/climate.wink.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Wink Climate" -description: "Instructions how to setup the Wink climate devices within Home Assistant." +description: "Instructions on how to setup the Wink climate devices within Home Assistant." date: 2016-11-01 22:36 sidebar: true comments: false diff --git a/source/_components/climate.zhong_hong.markdown b/source/_components/climate.zhong_hong.markdown new file mode 100644 index 00000000000..da1eeb6428a --- /dev/null +++ b/source/_components/climate.zhong_hong.markdown @@ -0,0 +1,45 @@ +--- +layout: page +title: "ZhongHong Thermostats Controller" +description: "Instructions on how to integrate ZhongHong Support thermostats within Home Assistant." +date: 2018-06-20 08:30 +sidebar: true +comments: false +sharing: true +footer: true +logo: zhong_hong.png +ha_category: Climate +ha_release: "0.72" +ha_iot_class: "Local Push" +--- + + +The `zhong_hong` climate platform lets you control [Zhonghong HVAC Gateway Controller](http://zhonghongtech.cn/v1/product.shtml/) thermostats through Home Assistant. + +To set it up, add the following information to your configuration.yaml file: + +```yaml +climate: + - platform: zhong_hong + host: GATEWAY_IP +``` + +{% configuration %} +host: + description: The IP address of your controller. + required: true + type: string +port: + description: The port of your controller. + required: false + default: 9999 + type: int +gateway_address: + description: The gateway address for the gateway (Settings in the controller itself). + required: false + default: 1 + type: int + +{% endconfiguration %} + +When Gateway is found, All HVAC devices will be configured automatically. diff --git a/source/_components/climate.zwave.markdown b/source/_components/climate.zwave.markdown index 3c5f96f7247..e1b20babc6b 100644 --- a/source/_components/climate.zwave.markdown +++ b/source/_components/climate.zwave.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Z-Wave Climate" -description: "Instructions how to setup the Z-Wave thermostat or HVAC within Home Assistant." +description: "Instructions on how to setup the Z-Wave thermostat or HVAC within Home Assistant." date: 2016-04-03 9:52 sidebar: true comments: false @@ -46,12 +46,12 @@ automation: at: "20:00:00" action: - service: climate.set_operation_mode - entity_id: climate.remotec_zxt120_heating_1_id data: + entity_id: climate.remotec_zxt120_heating_1_id operation_mode: Heat - service: climate.set_temperature - entity_id: climate.remotec_zxt120_heating_1_39 data: + entity_id: climate.remotec_zxt120_heating_1_39 temperature: 24 ``` @@ -65,8 +65,8 @@ automation: at: "21:00:00" action: - service: climate.set_operation_mode - entity_id: climate.remotec_zxt120_heating_1_id data: + entity_id: climate.remotec_zxt120_heating_1_id operation_mode: 'Off' ``` diff --git a/source/_components/cloud.markdown b/source/_components/cloud.markdown index 19541d18047..3008a52cac4 100644 --- a/source/_components/cloud.markdown +++ b/source/_components/cloud.markdown @@ -1,6 +1,6 @@ --- layout: page -title: "Cloud" +title: "Home Assistant Cloud" description: "Enable the Home Assistant Cloud integration." date: 2017-11-17 20:00 sidebar: true @@ -8,85 +8,20 @@ comments: false sharing: true footer: true logo: home-assistant.png -ha_release: 0.57 +ha_release: "0.60" +ha_category: Voice +ha_iot_class: "Cloud Push" --- -

-Home Assistant Cloud is currently in private beta. -

- -The Home Assistant Cloud allows you to quickly integrate your local instance with various cloud services. Any processing of services from other cloud services is handled by your local instance. - -To get started, create an account and log in via the configuration panel in your Home Assistant instance. There is no need to configure your router or expose your instance to the internet in any other way. - -### {% linkable_title Amazon Alexa %} - -The Alexa integration allows users to control the entities via the [Home Assistant Smart Home skill for Alexa][alexa skill]. This means that you can say things like "Alexa, turn on the kitchen light" to control your local instance. +The Home Assistant Cloud allows you to quickly integrate your local Home Assistant with various cloud services like Amazon Alexa. [Learn more.](/cloud) ```yaml -# Example configuration.yaml entry configuring Alexa +# Example configuration.yaml entry to enable the cloud component cloud: - alexa: - filter: - include_entities: - - light.kitchen - include_domains: - - switch - exclude_entities: - - light.living_room - exclude_domains: - - script ``` -{% configuration %} -alexa: - description: Configuration options for the Amazon Alexa integration. - required: false - type: map - keys: - filter: - description: Filters for entities to include/exclude from Alexa. - required: false - type: map - keys: - include_entities: - description: Entity IDs to include. - required: false - type: list - include_domains: - description: Domains to include. - required: false - type: list - exclude_entities: - description: Entity IDs to exclude. - required: false - type: list - exclude_domains: - description: Domains to exclude. - required: false - type: list -{% endconfiguration %} +Once activated, go to the configuration panel in Home Assistant and create an account and log in. If you are not seeing the **Configuration** panel, make sure you have the following option enabled in your configuration.yaml` file. -### {% linkable_title Possible values for customize %} - -| Attribute | Description | -| --------- | ----------- | -| `alexa_hidden` | Hide the entity from the Alexa smart home devices. -| `alexa_name` | Defines name of the entity for a Alexa smart home device. Useful if you have an entity with a friendly name in a local language that you want to access using an English sounding name. -| `alexa_description` | The description of the device in the Alexa smart home device list. -| `alexa_display_categories` | Set displayCategories, useful for things like media_player (TV/SPEAKERS) or scene (ACTIVITY_TRIGGER/SCENE_TRIGGER). More info can be found [here](https://developer.amazon.com/docs/device-apis/alexa-discovery.html#display-categories). - -### {% linkable_title Available domains %} -Currently, the following domains are available to be used with Alexa: -- alert -- automation -- cover -- light -- fan (supports on/off and set speed) -- group -- lock (lock and unlock, but unlock is untested as Amazon has disabled unlock for now) -- media_player (play, pause, stop, set volume, adjust volume, next track and previous track) -- scene -- switch - -[alexa skill]: https://alexa.amazon.com/spa/index.html#skills/dp/B0772J1QKB/?ref=skill_dsk_skb_sr_2 +```yaml +config: +``` diff --git a/source/_components/cloudflare.markdown b/source/_components/cloudflare.markdown new file mode 100644 index 00000000000..c088bc1e8f0 --- /dev/null +++ b/source/_components/cloudflare.markdown @@ -0,0 +1,58 @@ +--- +layout: page +title: "Cloudflare" +description: "Automatically update your Cloudflare DNS records." +date: 2018-07-10 20:08 +sidebar: true +comments: false +sharing: true +footer: true +logo: cloudflare.png +ha_category: Utility +featured: false +ha_release: 0.74 +--- + +With the `cloudflare` component can you keep your Cloudflare records up to date. + +The component will run every hour, but can also be started manually by using the service `cloudflare.update_records` under services. + +## {% linkable_title Setup %} + +You will find your global API key in your Cloudflare account settings. + +## {% linkable_title Configuration %} + +To use the component in your installation, add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +cloudflare: + email: user@example.com + api_key: c2547eb745079dac9320b638f5e225cf483cc5cfdda41 + zone: example.com + records: + - bin + - www +``` + +{% configuration cloudflare %} +email: + description: The email address for your Cloudflare account. + required: true + type: string +api_key: + description: The global API key for your Cloudflare account. + required: true + type: string +zone: + description: The DNS zone you want to update. + required: true + type: string +records: + description: A list of records you want to update. + required: true + type: list +{% endconfiguration %} + +This platform uses the API from [ipify.org](https://www.ipify.org/) to set the public IP address. diff --git a/source/_components/coinbase.markdown b/source/_components/coinbase.markdown new file mode 100644 index 00000000000..f5d657ab4fb --- /dev/null +++ b/source/_components/coinbase.markdown @@ -0,0 +1,46 @@ +--- +layout: page +title: "coinbase" +description: "Instructions for how to add Coinbase sensors to Home Assistant." +date: 2017-12-08 17:54 +sidebar: true +comments: false +sharing: true +footer: true +logo: coinbase.png +ha_release: 0.61 +ha_iot_class: "Cloud Polling" +--- + + +The `coinbase` component lets you access account balances and exchange rates from [coinbase](https://coinbase.com). + +You will need to obtain an API key from coinbase's [developer site](https://www.coinbase.com/settings/api) to use this component. You need to give read access to `wallet:accounts` in order for the component to access relevant data. + +To set it up, add the following information to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +coinbase: + api_key: asdfghjklqwertyuiopzxcvbnm + api_secret: nkjnewncfghjklqwertyuiopzxcvbnm + exchange_rate_currencies: + - BTC + - ETH + - LTC +``` + +{% configuration %} +api_key: + description: Your API key to access coinbase. + required: true + type: string +api_secret: + description: Your API secret to access coinbase. + required: true + type: string +exchange_rate_currencies: + description: List of currencies to create exchange rate sensors for. + required: false + type: list +{% endconfiguration %} diff --git a/source/_components/comfoconnect.markdown b/source/_components/comfoconnect.markdown index fcce2b619f0..7394042b84d 100644 --- a/source/_components/comfoconnect.markdown +++ b/source/_components/comfoconnect.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Zehnder ComfoAir Q Ventilation" -description: "Instructions how to integrate Zehnder ComfoAir Q350/450/600 ventilation systems into Home Assistant." +description: "Instructions on how to integrate Zehnder ComfoAir Q350/450/600 ventilation systems into Home Assistant." date: 2017-06-28 18:00 sidebar: true comments: false diff --git a/source/_components/config.markdown b/source/_components/config.markdown index 514840e7f73..29aa9ce2aea 100644 --- a/source/_components/config.markdown +++ b/source/_components/config.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Config" -description: "Instructions how to setup the configuration panel for Home Assistant." +description: "Instructions on how to setup the configuration panel for Home Assistant." date: 2017-02-24 20:00 sidebar: true comments: false diff --git a/source/_components/configurator.markdown b/source/_components/configurator.markdown index 3d9661d50bd..9cabdccbb35 100644 --- a/source/_components/configurator.markdown +++ b/source/_components/configurator.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Configurator" -description: "Instructions how to integrate the configurator in your components." +description: "Instructions on how to integrate the configurator in your components." date: 2015-03-15 00:51 sidebar: true comments: false diff --git a/source/_components/conversation.markdown b/source/_components/conversation.markdown index 55b9fbb19a7..e9bb86aaabc 100644 --- a/source/_components/conversation.markdown +++ b/source/_components/conversation.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Conversation" -description: "Instructions how to have conversations with your Home Assistant." +description: "Instructions on how to have conversations with your Home Assistant." date: 2015-03-15 00:39 sidebar: true comments: false @@ -11,46 +11,85 @@ logo: home-assistant.png ha_category: "Voice" --- +The conversation component allows you to converse with Home Assistant. You can either converse by pressing the microphone in the frontend (supported browsers only (no iOS)) or by calling the `conversation/process` service with the transcribed text. -The `conversation` component can process sentences into commands for Home Assistant. It currently has built in functionality to recognize `turn `, but custom phrases can be added through configuration. - - -To enable the conversation option in your installation, add the following to your `configuration.yaml` file: +

+ + Screenshot of the conversation interface in Home Assistant. +

```yaml # Example base configuration.yaml entry conversation: ``` -To add custom phrases to be recognized: +{% configuration %} +intents: + description: Intents that the conversation component should understand. + required: false + type: map + keys: + '``': + description: Sentences that should trigger this intent. + required: true + type: list +{% endconfiguration %} -```yaml -# Example configuration.yaml entry with custom phrasesconversation -conversation: - boolean_test: - sentence: switch boolean # The phrase it will recognize - action: - service: input_boolean.toggle -``` +## {% linkable_title Adding custom sentences %} -The action keyword uses [script syntax](https://home-assistant.io/docs/scripts/). +By default, it will support turning devices on and off. You can say things like "turn on kitchen lights" or "turn the living room lights off". You can also configure your own sentences to be processed. This works by mapping sentences to intents and then configure the [intent script component](/components/intent_script/) to handle these intents. -To use the `conversation` component with the [`shopping list` component](/components/shopping_list/) add an intent. +Here is a simple example to be able to ask what the temperature in the living room is. ```yaml # Example configuration.yaml entry conversation: intents: - ShoppingListAddItem: - - Add {item} to my shopping list + LivingRoomTemperature: + - What is the temperature in the living room + +intent_script: + LivingRoomTemperature: + speech: + text: It is currently {% raw %}{{ states.sensor.temperature }}{% endraw %} degrees in the living room. ``` -When this component is active and you are using a supported browser voice commands will be activated in the frontend. Browse to [the demo](/demo/) using Chrome or Chromium to see it in action. +## {% linkable_title Adding advanced custom sentences %} -

- -

+Sentences can contain slots (marked with curly braces: `{name}`) and optional words (marked with square brackets: `[the]`). The values of slots will be passed on to the intent and are available inside the templates. -

- Apple iPhones do not support this feature in any browser. -

+The following configuration can handle the following sentences: + + - Change the lights to red + - Change the lights to green + - Change the lights to blue + - Change the lights to the color red + - Change the lights to the color green + - Change the lights to the color blue + +```yaml +# Example configuration.yaml entry +conversation: + intents: + ColorLight: + - Change the lights to [the color] {color} +{% raw %} +intent_script: + ColorLight: + speech: + text: Changed the lights to {{ color }}. + action: + service: light.turn_on + data_template: + rgb_color: + - "{% if color == 'red' %}255{% else %}0{% endif %}" + - "{% if color == 'green' %}255{% else %}0{% endif %}" + - "{% if color == 'blue' %}255{% else %}0{% endif %}" +{% endraw %} +``` + +#### {% linkable_title Service `conversation.process` %} + +| Service data attribute | Optional | Description | +|------------------------|----------|--------------------------------------------------| +| `text` | yes | Transcribed text | diff --git a/source/_components/counter.markdown b/source/_components/counter.markdown index 76a11fbb897..f181d4755a7 100644 --- a/source/_components/counter.markdown +++ b/source/_components/counter.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Counter" -description: "Instructions how to integrate counters into Home Assistant." +description: "Instructions on how to integrate counters into Home Assistant." date: 2017-08-26 06:00 sidebar: true comments: false @@ -19,7 +19,7 @@ To add a counter to your installation, add the following to your `configuration. ```yaml # Example configuration.yaml entry counter: - counter: + my_custom_counter: initial: 30 step: 1 ``` diff --git a/source/_components/cover.abode.markdown b/source/_components/cover.abode.markdown index e67998bf0b7..a80303a7561 100644 --- a/source/_components/cover.abode.markdown +++ b/source/_components/cover.abode.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Abode Cover" -description: "Instructions how to integrate Abode covers into Home Assistant." +description: "Instructions on how to integrate Abode covers into Home Assistant." date: 2017-08-26 13:28 sidebar: true comments: false diff --git a/source/_components/cover.aladdin_connect.markdown b/source/_components/cover.aladdin_connect.markdown new file mode 100644 index 00000000000..ca3576dce58 --- /dev/null +++ b/source/_components/cover.aladdin_connect.markdown @@ -0,0 +1,41 @@ +--- +layout: page +title: "Genie Aladdin Connect Cover" +description: "Instructions how to integrate Genie Aladdin Connect garage door covers into Home Assistant." +date: 2018-07-26 22:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: aladdin_connect.png +ha_category: Cover +ha_release: 0.75 +ha_iot_class: "Cloud Polling" +--- + +The `aladdin_connect` cover platform lets you control Genie Aladdin Connect garage doors through Home Assistant. + +

+Only doors that are owned by your Aladdin Connect account will be available. Doors that your account has been granted shared access to are not yet supported. +

+ +To use your Aladdin Connect cover in your installation, add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yml entry +cover: + - platform: aladdin_connect + username: user@email.com + password: password +``` + +{% configuration %} +username: + description: Your Aladdin Connect account username. + required: true + type: string +password: + description: Your Aladdin Connect account password. + required: true + type: string +{% endconfiguration %} diff --git a/source/_components/cover.brunt.markdown b/source/_components/cover.brunt.markdown new file mode 100644 index 00000000000..536eb1c1802 --- /dev/null +++ b/source/_components/cover.brunt.markdown @@ -0,0 +1,47 @@ +--- +layout: page +title: Brunt Cover +description: "Instructions on how to set up Brunt Blind Engine within Home Assistant." +date: 2018-06-24 14:36 +sidebar: true +comments: false +sharing: true +footer: true +logo: brunt.png +ha_category: Cover +ha_release: 0.75 +ha_iot_class: "Cloud Polling" +--- + +The `brunt` platform allows one to control Blind Engines by [Brunt](https://www.brunt.co). To use this sensor, you need a Brunt App Account. All Brunt Blind devices registered to your account are automatically added to your Home Assistant with the names given them through the Brunt app. + +## {% linkable_title Configuration %} + +To enable this integration, add the following lines to your `configuration.yaml`: + +```yaml +cover: + - platform: brunt + username: BRUNT_USERNAME + password: BRUNT_PASSWORD +``` + +{% configuration %} +name: + description: Cover name + required: false + default: "brunt blind engine" + type: string +username: + description: Account username of your Brunt app + required: true + type: string +password: + description: Account password of your Brunt app + required: true + type: string +{% endconfiguration %} + +

+This component is not affiliated with Brunt and retrieves data from the endpoints of the mobile application. Use at your own risk. +

diff --git a/source/_components/cover.garadget.markdown b/source/_components/cover.garadget.markdown index 1d34384fffa..0a3b5de358e 100644 --- a/source/_components/cover.garadget.markdown +++ b/source/_components/cover.garadget.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Garadget Cover" -description: "Instructions how to integrate Garadget covers within Home Assistant." +description: "Instructions on how to integrate Garadget covers within Home Assistant." date: 2016-10-24 14:25 sidebar: true comments: false @@ -16,6 +16,8 @@ ha_iot_class: "Cloud Polling" The `garadget` cover platform lets you control [Garadget](http://www.garadget.com/) garage door futurizers through Home Assistant. +## {% linkable_title Configuration %} + To enable Garadget Covers in your installation, add the following to your `configuration.yaml` file: ```yaml @@ -24,8 +26,8 @@ cover: - platform: garadget covers: 190028001947343412342341: - username: UseYourLogin@garadget.com - password: abc123 + username: YOUR_USERNAME + password: YOUR_PASSWORD 4c003f001151353432134214: access_token: df4cc785ff818f2b01396c44142342fccdef ``` @@ -44,12 +46,13 @@ Configuration variables: If provided, the **access_token** will be used, otherwise the **username** and **password** will be used to automatically generate an access token at start time. +## {% linkable_title Example %} -**Example with more detail:**

+{% raw %} ```yaml # Related configuration.yaml entry cover: @@ -64,13 +67,13 @@ sensor: sensors: garage_door_status: friendly_name: 'State of the door' - value_template: {% raw %}'{{ states.cover.garage_door.state }}'{% endraw %} + value_template: '{{ states.cover.garage_door.state }}' garage_door_time_in_state: friendly_name: 'Since' - value_template: {% raw %}'{{ states.cover.garage_door.attributes.time_in_state }}'{% endraw %} + value_template: '{{ states.cover.garage_door.attributes.time_in_state }}' garage_door_wifi_signal_strength: friendly_name: 'WiFi strength' - value_template: {% raw %}'{{ states.cover.garage_door.attributes.wifi_signal_strength }}'{% endraw %} + value_template: '{{ states.cover.garage_door.attributes.wifi_signal_strength }}' unit_of_measurement: 'dB' group: @@ -88,6 +91,7 @@ customize: sensor.garage_door_wifi_signal_strength: icon: mdi:wifi ``` +{% endraw %} Some of the Garadget sensors can create a lot of clutter in the logbook. Use this section of code in your `configuration.yaml` to exclude those entries. @@ -98,3 +102,17 @@ logbook: - sensor.garage_door_time_in_state - sensor.garage_door_wifi_signal_strength ``` + +As of firmware release 1.17 the garadget device has native support for MQTT. The options allow the end-user to configure the device in the following ways 'cloud only', 'cloud and MQTT' or 'MQTT only'. + +For configuration of the garadget as a MQTT cover: + +```yaml +cover: + - platform: mqtt + name: "Garage Door" + command_topic: "garadget/device_name/command" + state_topic: "garadget/device_name/status" + payload_open: "open" + payload_close: "close" +``` diff --git a/source/_components/cover.gogogate2.markdown b/source/_components/cover.gogogate2.markdown new file mode 100644 index 00000000000..a24ef1fd029 --- /dev/null +++ b/source/_components/cover.gogogate2.markdown @@ -0,0 +1,49 @@ +--- +layout: page +title: "Gogogate2 Cover" +description: "Instructions on how to integrate Gogogate2-Enabled garage door covers into Home Assistant." +date: 2018-03-26 20:02 +sidebar: true +comments: false +sharing: true +footer: true +logo: gogogate2.png +ha_category: Cover +ha_release: 0.67 +ha_iot_class: Local Polling +--- + +The `gogogate2` cover platform lets you control Gogogate2-Enabled garage doors through Home Assistant. Device names in Home Assistant are generated based on the names defined in your Gogogate2 mobile app. + +## {% linkable_title Configuration %} + +To use your Gogogate2 cover in your installation, add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +cover: + - platform: gogogate2 + username: email@email.com + password: password + ip_address: 192.168.1.200 +``` + +{% configuration %} +username: + description: Your Gogogate2 account username. + required: true + type: string +password: + description: Your Gogogate2 account password. + required: true + type: string +ip_address: + description: The IP Address of your Gogogate2 device. + required: true + type: string +name: + description: Allows you to override the default name. + default: gogogate2 + required: false + type: string +{% endconfiguration %} diff --git a/source/_components/cover.group.markdown b/source/_components/cover.group.markdown new file mode 100644 index 00000000000..c29b4b46a1d --- /dev/null +++ b/source/_components/cover.group.markdown @@ -0,0 +1,43 @@ +--- +layout: page +title: "Cover Group" +description: "Instructions how to setup grouped covers in Home Assistant." +date: 2018-02-11 10:00 +sidebar: true +comments: false +sharing: true +footer: true +ha_category: Cover +ha_release: 0.66 +ha_iot_class: "Local Push" +logo: home-assistant.png +--- + +The `group` platform can create a cover that combines several cover entities into one. + +To enable `Cover Groups` in your installation, add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +cover: + - platform: group + entities: + - cover.hall_window + - cover.living_room_window +``` + +{% configuration %} + name: + description: Name to use in the frontend. + required: false + type: string + default: "Cover Group" + entities: + description: List of all cover entities you want to control. + required: true + type: [string | list] +{% endconfiguration %} + +## {% linkable_title Functionality %} + +It works best if you group covers with the same supported features together (like support for `open`/`close`/`stop`/`position`/`tilt controls`), but is not limited to it. In case you have bundled covers with different features together, the controls will only affect those covers that support the actions. diff --git a/source/_components/cover.homematic.markdown b/source/_components/cover.homematic.markdown index 9ac3fa4aca9..e5f3a8930e2 100644 --- a/source/_components/cover.homematic.markdown +++ b/source/_components/cover.homematic.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Homematic Cover" -description: "Instructions how to integrate Homematic covers within Home Assistant." +description: "Instructions on how to integrate Homematic covers within Home Assistant." date: 2016-08-24 14:25 sidebar: true comments: false diff --git a/source/_components/cover.isy994.markdown b/source/_components/cover.isy994.markdown index 95aed3d3ba4..929afac31d1 100644 --- a/source/_components/cover.isy994.markdown +++ b/source/_components/cover.isy994.markdown @@ -1,7 +1,7 @@ --- layout: page title: "ISY994 Cover" -description: "Instructions how to integrate ISY994 covers into Home Assistant." +description: "Instructions on how to integrate ISY994 covers into Home Assistant." date: 2016-09-03 23:00 sidebar: true comments: false diff --git a/source/_components/cover.knx.markdown b/source/_components/cover.knx.markdown index cd620f15634..d6d3733c1e1 100644 --- a/source/_components/cover.knx.markdown +++ b/source/_components/cover.knx.markdown @@ -37,7 +37,7 @@ Configuration variables: - **name** (*Optional*): A name for this device used within Home Assistant. - **move_long_address**: KNX group address for moving the cover full up or down. -- **move_short_address** (*Optional*): KNX group address for moving the cover short time up or down. +- **move_short_address** (*Optional*): KNX group address for moving the cover short time up or down. If the KNX device has a stop group address you can use that here. - **position_address** (*Optional*): KNX group address for moving the cover to the dedicated position. - **position_state_address** (*Optional*): Separate KNX group address for requesting the current position of the cover. - **angle_address** (*Optional*): KNX group address for moving the cover to the dedicated angle. diff --git a/source/_components/cover.lutron.markdown b/source/_components/cover.lutron.markdown new file mode 100644 index 00000000000..ffd2c100b28 --- /dev/null +++ b/source/_components/cover.lutron.markdown @@ -0,0 +1,16 @@ +--- +layout: page +title: "Lutron Cover" +description: "Instructions on how to setup the Lutron shades within Home Assistant." +date: 2018-01-11 20:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: lutron.png +ha_category: Cover +ha_iot_class: "Local Polling" +ha_release: 0.61 +--- + +To get your Lutron roller shades working with Home Assistant, follow the instructions for the general [Lutron component](/components/lutron/). diff --git a/source/_components/cover.lutron_caseta.markdown b/source/_components/cover.lutron_caseta.markdown index 713c4544728..ee64257f1ab 100644 --- a/source/_components/cover.lutron_caseta.markdown +++ b/source/_components/cover.lutron_caseta.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Lutron Caseta Cover" -description: "Instructions how to setup the Lutron Caseta covers within Home Assistant." +description: "Instructions on how to setup the Lutron Caseta covers within Home Assistant." date: 2017-05-20 09:00 sidebar: true comments: false diff --git a/source/_components/cover.markdown b/source/_components/cover.markdown index 8024b67a3b7..a530768096f 100644 --- a/source/_components/cover.markdown +++ b/source/_components/cover.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Covers" -description: "Instructions how to integrate covers into Home Assistant." +description: "Instructions on how to integrate covers into Home Assistant." date: 2016-06-28 17:30 sidebar: true comments: false diff --git a/source/_components/cover.mqtt.markdown b/source/_components/cover.mqtt.markdown index e466514cadd..81358f87762 100755 --- a/source/_components/cover.mqtt.markdown +++ b/source/_components/cover.mqtt.markdown @@ -1,7 +1,7 @@ --- layout: page title: "MQTT Cover" -description: "Instructions how to integrate MQTT covers into Home Assistant." +description: "Instructions on how to integrate MQTT covers into Home Assistant." date: 2016-09-28 17:30 sidebar: true comments: false @@ -15,6 +15,8 @@ ha_release: 0.18 The `mqtt` cover platform allows you to control an MQTT cover (such as blinds, a rollershutter, or a garage door). +## {% linkable_title Configuration %} + The device state (`open` or `closed`) will be updated only after a new message is published on `state_topic` matching `state_open` or `state_closed`. If these messages are published with the `retain` flag set, the cover will receive an instant state update after subscription and Home Assistant will display the correct state on startup. Otherwise, the initial state displayed in Home Assistant will be `unknown`. There is an attribute that stores the relative position of the device, where 0 means the device is `closed` and all other intermediate positions means the device is `open`. @@ -35,33 +37,125 @@ cover: command_topic: "home-assistant/cover/set" ``` -Configuration variables: - -- **name** (*Optional*): The name of the sensor. Default is `MQTT Cover`. -- **command_topic** (*Optional*): The MQTT topic to publish commands to control the cover. -- **payload_open** (*Optional*): The payload that opens the cover. Default is `OPEN`. -- **payload_close** (*Optional*): The payload that closes the cover. Default is `CLOSE`. -- **payload_stop** (*Optional*): The payload that stops the cover. default is `STOP`. -- **state_topic** (*Optional*): The MQTT topic subscribed to receive cover state messages. -- **state_open** (*Optional*): The payload that represents the open state. Default is `open`. -- **state_closed** (*Optional*): The payload that represents the closed state. Default is `closed`. -- **availability_topic** (*Optional*): The MQTT topic subscribed to to receive birth and LWT messages from the MQTT cover device. If `availability_topic` is not defined, the cover availability state will always be "available". If `availability_topic` is defined, the cover availability state will be "unavailable" by default. -- **payload_available** (*Optional*): The payload that represents the online state. Default is `online`. -- **payload_not_available** (*Optional*): The payload that represents the offline state. Default is `offline`. -- **optimistic** (*Optional*): Flag that defines if switch works in optimistic mode. Default is `true` if no state topic defined, else `false`. -- **qos** (*Optional*): The maximum QoS level to be used when receiving and publishing messages. Default is `0`. -- **retain** (*Optional*): Defines if published messages should have the retain flag set. Default is `false`. -- **value_template** (*Optional*): Defines a [template](/docs/configuration/templating/#processing-incoming-data) to extract a value from the payload. -- **set_position_topic** (*Optional*): The MQTT topic to publish position commands to. -- **set_position_template** (*Optional*): Defines a [template](/topics/templating/) to define the position to be sent to the `set_position_topic` topic. Incoming position value is available for use in the template `{{position}}`. If no template is defined, the numeric position (0-100) will be written directly to the topic. -- **tilt_command_topic** (*Optional*): The MQTT topic to publish commands to control the cover tilt. -- **tilt_status_topic** (*Optional*): The MQTT topic subscribed to receive tilt status update values. -- **tilt_min** (*Optional*): The minimum tilt value. Default is `0` -- **tilt_max** (*Optional*): The maximum tilt value. Default is `100` -- **tilt_closed_value** (*Optional*): The value that will be sent on a `close_cover_tilt` command. Default is `0` -- **tilt_opened_value** (*Optional*): The value that will be sent on an `open_cover_tilt` command. Default is `100` -- **tilt_status_optimistic** (*Optional*): Flag that determines if tilt works in optimistic mode. Default is `true` if `tilt_status_topic` is not defined, else `false` -- **tilt_invert_state** (*Optional*): Flag that determines if open/close are flipped; higher values toward closed and lower values toward open. Default is `False` +{% configuration %} +name: + description: The name of the cover. + required: false + type: string + default: MQTT Cover +command_topic: + description: The MQTT topic to publish commands to control the cover. + required: false + type: string +payload_open: + description: The command payload that opens the cover. + required: false + type: string + default: OPEN +payload_close: + description: The command payload that closes the cover. + required: false + type: string + default: CLOSE +payload_stop: + description: The command payload that stops the cover. + required: false + type: string + default: STOP +state_topic: + description: The MQTT topic subscribed to receive cover state messages. + required: false + type: string +state_open: + description: The payload that represents the open state. + required: false + type: string + default: open +state_closed: + description: The payload that represents the closed state. + required: false + type: string + default: closed +availability_topic: + description: "The MQTT topic subscribed to to receive birth and LWT messages from the MQTT cover device. If `availability_topic` is not defined, the cover availability state will always be `available`. If `availability_topic` is defined, the cover availability state will be `unavailable` by default." + required: false + type: string +payload_available: + description: The payload that represents the online state. + required: false + type: string + default: online +payload_not_available: + description: The payload that represents the offline state. + required: false + type: string + default: offline +optimistic: + description: Flag that defines if switch works in optimistic mode. + required: false + type: string + default: "`true` if no state topic defined, else `false`." +qos: + description: The maximum QoS level to be used when receiving and publishing messages. + required: false + type: integer + default: 0 +retain: + description: Defines if published messages should have the retain flag set. + required: false + type: boolean + default: false +value_template: + description: "Defines a [template](/docs/configuration/templating/#processing-incoming-data) to extract a value from the payload." + required: false + type: string +set_position_topic: + description: The MQTT topic to publish position commands to. + required: false + type: string +set_position_template: + description: " Defines a [template](/topics/templating/) to define the position to be sent to the `set_position_topic` topic. Incoming position value is available for use in the template `{{position}}`. If no template is defined, the numeric position (0-100) will be written directly to the topic." + required: false + type: string +tilt_command_topic: + description: The MQTT topic to publish commands to control the cover tilt. + required: false + type: string +tilt_status_topic: + description: The MQTT topic subscribed to receive tilt status update values. + required: false + type: string +tilt_min: + description: The minimum tilt value. + required: false + type: integer + default: 0 +tilt_max: + description: The maximum tilt value + required: false + type: integer + default: 100 +tilt_closed_value: + description: The value that will be sent on a `close_cover_tilt` command. + required: false + type: integer + default: 0 +tilt_opened_value: + description: The value that will be sent on an `open_cover_tilt` command. + required: false + type: integer + default: 0 +tilt_status_optimistic: + description: Flag that determines if tilt works in optimistic mode. + required: false + type: boolean + default: "`true` if `tilt_status_topic` is not defined, else `false`" +tilt_invert_state: + description: Flag that determines if open/close are flipped; higher values toward closed and lower values toward open. + required: false + type: boolean + default: false +{% endconfiguration %} ## {% linkable_title Examples %} @@ -72,32 +166,7 @@ In this section you will find some real life examples of how to use this platfor The example below shows a full configuration for a cover without tilt. ```yaml -# Example configuration.yml entry -cover: - - platform: mqtt - name: "MQTT Cover" - command_topic: "home-assistant/cover/set" - state_topic: "home-assistant/cover/state" - availability_topic: "home-assistant/cover/availability" - qos: 0 - retain: true - payload_open: "OPEN" - payload_close: "CLOSE" - payload_stop: "STOP" - state_open: "open" - state_closed: "closed" - payload_available: "online" - payload_not_available: "offline" - optimistic: false - value_template: '{% raw %}{{ value.x }}{% endraw %}' -``` - -### {% linkable_title Full configuration %} - -The example below shows a full configuration for a cover. - -```yaml -# Example configuration.yml entry +# Example configuration.yaml entry cover: - platform: mqtt name: "MQTT Cover" @@ -115,6 +184,32 @@ cover: payload_not_available: "offline" optimistic: false value_template: '{% raw %}{{ value.x }}{% endraw %}' +``` + +### {% linkable_title Full configuration %} + +The example below shows a full configuration for a cover. + +{% raw %} +```yaml +# Example configuration.yaml entry +cover: + - platform: mqtt + name: "MQTT Cover" + command_topic: "home-assistant/cover/set" + state_topic: "home-assistant/cover/state" + availability_topic: "home-assistant/cover/availability" + qos: 0 + retain: true + payload_open: "OPEN" + payload_close: "CLOSE" + payload_stop: "STOP" + state_open: "open" + state_closed: "closed" + 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' tilt_min: 0 @@ -122,6 +217,7 @@ cover: tilt_closed_value: 70 tilt_opened_value: 180 ``` +{% endraw %} To test, you can use the command line tool `mosquitto_pub` shipped with `mosquitto` or the `mosquitto-clients` package to send MQTT messages. This allows you to operate your cover manually: diff --git a/source/_components/cover.myq.markdown b/source/_components/cover.myq.markdown index 405065d88ab..1a759752101 100644 --- a/source/_components/cover.myq.markdown +++ b/source/_components/cover.myq.markdown @@ -1,7 +1,7 @@ --- layout: page title: "MyQ Cover" -description: "Instructions how to integrate MyQ-Enabled garage door covers into Home Assistant." +description: "Instructions on how to integrate MyQ-Enabled garage door covers into Home Assistant." date: 2017-02-14 14:21 sidebar: true comments: false @@ -15,19 +15,31 @@ ha_iot_class: Cloud Polling The `myq` cover platform lets you control MyQ-Enabled garage doors through Home Assistant. Device names in Home Assistant are generated based on the names defined in your MyQ Device mobile app. +## {% linkable_title Configuration %} + To use your MyQ cover in your installation, add the following to your `configuration.yaml` file: ```yaml -# Example configuration.yml entry +# Example configuration.yaml entry cover: - platform: myq - username: email@email.com - password: password + username: YOUR_USERNAME + password: YOUR_PASSWORD type: chamberlain ``` -Configuration variables: +{% configuration %} +username: + description: Your MyQ account username. + required: true + type: string +password: + description: Your MyQ account password. + required: true + type: string +type: + description: "Your device type/brand. Supported types are `chamberlain`, `liftmaster`, `craftsman` and `merlin`." + required: true + type: string +{% endconfiguration %} -- **username** (*Required*): Your MyQ account username. -- **password** (*Required*): Your MyQ account password. -- **type** (*Required*): Your device type/brand. Supported types are `chamberlain`, `liftmaster`, `craftsman` and `merlin`. diff --git a/source/_components/cover.mysensors.markdown b/source/_components/cover.mysensors.markdown index c94ec4f57fb..b4ded3e1b4b 100644 --- a/source/_components/cover.mysensors.markdown +++ b/source/_components/cover.mysensors.markdown @@ -1,7 +1,7 @@ --- layout: page title: "MySensors Cover" -description: "Instructions how to integrate MySensors covers into Home Assistant." +description: "Instructions on how to integrate MySensors covers into Home Assistant." date: 2016-10-01 15:00 +0200 sidebar: true comments: false diff --git a/source/_components/cover.opengarage.markdown b/source/_components/cover.opengarage.markdown index 7ee7fccb49b..2ac83c83bc9 100644 --- a/source/_components/cover.opengarage.markdown +++ b/source/_components/cover.opengarage.markdown @@ -1,7 +1,7 @@ --- layout: page title: "OpenGarage Cover" -description: "Instructions how to integrate OpenGarage.io covers within Home Assistant." +description: "Instructions on how to integrate OpenGarage.io covers within Home Assistant." date: 2017-04-07 14:25 sidebar: true comments: false @@ -12,8 +12,7 @@ ha_category: Cover ha_release: 0.44 --- - -The `opengarage` cover platform lets you control the open-source [OpenGarage.io](https://opengarage.io/) device through Home Assistant. +The `opengarage` cover platform lets you control the open-source [OpenGarage.io](https://opengarage.io/) device through Home Assistant. To enable OpenGarage Covers in your installation, add the following to your `configuration.yaml` file: @@ -36,12 +35,10 @@ Configuration variables: - **covers** array (*Required*): List of your doors. - **identifier** (*Required*): Name of the cover as slug. Multiple entries are possible. - - **host** (*Required*): IP address of device. - - **port** (*Optional*): HTTP Port. Default is `80`. - - **device_key** (*Required*): Access key to control device. Default is `opendoor`. - - **name** (*Optional*): Name to use in the Frontend. If not provided, it will use name configured in device. - - + - **host** (*Required*): IP address of device. + - **port** (*Optional*): HTTP Port. Default is `80`. + - **device_key** (*Required*): Access key to control device. Default is `opendoor`. + - **name** (*Optional*): Name to use in the Frontend. If not provided, it will use name configured in device. **Example with more detail:**

@@ -53,7 +50,7 @@ Configuration variables: cover: platform: opengarage covers: - garage: + garage: host: 192.168.1.12 device_key: opendoor name: honda @@ -93,12 +90,12 @@ sensor: {% endif %}'{% endraw %} group: - garage: + garage: name: Garage entities: - cover.honda - sensor.garage_status - - sensor.garage_car_present + - sensor.garage_car_present customize: cover.honda: diff --git a/source/_components/cover.rflink.markdown b/source/_components/cover.rflink.markdown index 5bbe5e2f6ed..bc4d18538db 100644 --- a/source/_components/cover.rflink.markdown +++ b/source/_components/cover.rflink.markdown @@ -1,7 +1,7 @@ --- layout: page title: "RFLink Cover" -description: "Instructions how to integrate RFLink Somfy RTS Cover into Home Assistant." +description: "Instructions on how to integrate RFLink Somfy RTS Cover into Home Assistant." date: 2017-08-08 sidebar: true comments: false @@ -85,7 +85,7 @@ Device configuration variables: - **name** (*Optional*): Name for the device, defaults to Rflink ID. - **aliases** (*Optional*): Alternative Rflink ID's this device is known by. -- **fire_event** (*Optional*): Fire an `button_pressed` event if this device is turned on or off (default: False). +- **fire_event** (*Optional*): Fire a `button_pressed` event if this device is turned on or off (default: False). - **signal_repetitions** (*Optional*): Repeat every Rflink command this number of times (default: 1). - **fire_event_** (*Optional*): Set default `fire_event` for RFLink switch devices (see below). - **signal_repetitions** (*Optional*): Set default `signal_repetitions` for RFLink switch devices (see below). diff --git a/source/_components/cover.rfxtrx.markdown b/source/_components/cover.rfxtrx.markdown index 115332a8e0c..342677cb5ae 100644 --- a/source/_components/cover.rfxtrx.markdown +++ b/source/_components/cover.rfxtrx.markdown @@ -1,7 +1,7 @@ --- layout: page title: "RFXtrx Cover" -description: "Instructions how to integrate RFXtrx covers into Home Assistant." +description: "Instructions on how to integrate RFXtrx covers into Home Assistant." date: 2016-08-24 14:30 sidebar: true comments: false @@ -67,3 +67,8 @@ Configuration variables: - **automatic_add** (*Optional*): To enable the automatic addition of new covers (Siemens/LightwaveRF only). - **signal_repetitions** (*Optional*): Because the rxftrx device sends its actions via radio and from most receivers it's impossible to know if the signal was received or not. Therefore you can configure the roller shutter to try to send each signal repeatedly. - **fire_event** (*Optional*): Fires an event even if the state is the same as before. Can be used for automations. + +

+If a device ID consists of only numbers, please make sure to surround it with quotes. +This is a known limitation in YAML, because the device ID will be interpreted as a number otherwise. +

diff --git a/source/_components/cover.rpi_gpio.markdown b/source/_components/cover.rpi_gpio.markdown index 581c6f36989..62c22bb0427 100644 --- a/source/_components/cover.rpi_gpio.markdown +++ b/source/_components/cover.rpi_gpio.markdown @@ -1,7 +1,7 @@ --- layout: page -title: "Raspberry Pi Cover" -description: "Instructions how to setup the Raspberry Pi covers within Home Assistant." +title: "Raspberry Pi GPIO Cover" +description: "Instructions on how to setup the Raspberry Pi GPIO covers within Home Assistant." date: 2016-08-24 14:28 sidebar: true comments: false diff --git a/source/_components/cover.ryobi_gdo.markdown b/source/_components/cover.ryobi_gdo.markdown new file mode 100644 index 00000000000..eac9454463d --- /dev/null +++ b/source/_components/cover.ryobi_gdo.markdown @@ -0,0 +1,59 @@ +--- +layout: page +title: "Ryobi GDO Cover" +description: "Instructions on how to integrate Ryobi Garage Door Opener (RyobiGDO) within Home Assistant." +date: 2018-04-22 09:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: ryobi.png +ha_category: Cover +ha_release: 0.71 +ha_iot_class: "Cloud Polling" +--- + + +The `ryobi_gdo` cover platform lets you control [Ryobi](https://www.ryobitools.com/gdo/) garage door opener through Home Assistant. + +## {% linkable_title Setup %} + +In order to be able to use your Ryobi garage door opener, you will have to get the DEVICE_ID_OF_YOUR_COVER (one for each garage door). + +The DEVICE_ID_OF_YOUR_COVER can be retrieved using `curl`, simply use your username and password using the following example. Your `DEVICE_ID_OF_YOUR_COVER` will be `varName`: + +```bash +$ curl -H "Content-Type: application/json" -X GET \ + -d '{"username":"RYOBIGDO_USERNAME","password":"RYOBIGDO_PASSWORD"}' \ + https://tti.tiwiconnect.com/api/devices +``` + +## {% linkable_title Configuration %} + +To enable Ryobi covers in your installation, add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +cover: + - platform: ryobi_gdo + username: RYOBIGDO_USERNAME + password: RYOBIGDO_PASSWORD + device_id: + - DEVICE_ID_OF_YOUR_COVER#1 + - DEVICE_ID_OF_YOUR_COVER#2 +``` + +{% configuration %} +username: + description: Your RyobiGDO account username. + required: true + type: string +password: + description: Your RyobiGDO account password. + required: true + type: string +device_id: + description: List of your doors. + required: true + type: list +{% endconfiguration %} diff --git a/source/_components/cover.scsgate.markdown b/source/_components/cover.scsgate.markdown index 52f198b7ed2..96b49a71584 100644 --- a/source/_components/cover.scsgate.markdown +++ b/source/_components/cover.scsgate.markdown @@ -1,7 +1,7 @@ --- layout: page title: "SCSGate Cover" -description: "Instructions how to integrate SCSGate motorized devices into Home Assistant." +description: "Instructions on how to integrate SCSGate motorized devices into Home Assistant." date: 2016-06-28 17:30 sidebar: true comments: false diff --git a/source/_components/cover.tahoma.markdown b/source/_components/cover.tahoma.markdown index 9dfebff30f9..a67537ca112 100644 --- a/source/_components/cover.tahoma.markdown +++ b/source/_components/cover.tahoma.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Tahoma Cover" -description: "Instructions how to integrate Tahoma covers into Home Assistant." +description: "Instructions on how to integrate Tahoma covers into Home Assistant." date: 2017-07-18 12:00 sidebar: true comments: false @@ -12,10 +12,6 @@ ha_category: Cover ha_release: 0.59 --- -To use your tahoma covers in your installation, add the following to your `configuration.yaml` file: +The `tahoma` cover platform lets you control covers added to your Tahoma Box in Home Assistant. -``yaml -# Example configuration.yml entry -cover: - platform: tahoma -``` \ No newline at end of file +Covers will be added automatically. Please refer to the [component](/components/tahoma/) configuration on how to setup Tahoma. diff --git a/source/_components/cover.tellstick.markdown b/source/_components/cover.tellstick.markdown new file mode 100644 index 00000000000..1d2660cda58 --- /dev/null +++ b/source/_components/cover.tellstick.markdown @@ -0,0 +1,25 @@ +--- +layout: page +title: "TellStick Cover" +description: "Instructions on how to integrate TellStick covers into Home Assistant." +date: 2017-11-29 16:23 +sidebar: true +comments: false +sharing: true +footer: true +logo: telldus_tellstick.png +ha_category: Cover +ha_iot_class: "Assumed State" +ha_release: "0.60" +--- + + +This `tellstick` cover platform allows you to control your [TellStick](http://www.telldus.se/products/tellstick) covers. + +To use your TellStick device, you first have to set up your [Tellstick hub](/components/tellstick/) and then add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +cover: + - platform: tellstick +``` diff --git a/source/_components/cover.template.markdown b/source/_components/cover.template.markdown index 6234334c082..06a4c09d9c5 100644 --- a/source/_components/cover.template.markdown +++ b/source/_components/cover.template.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Template Cover" -description: "Instructions how to integrate Template Covers into Home Assistant." +description: "Instructions on how to integrate Template Covers into Home Assistant." date: 2017-06-19 20:32 sidebar: true comments: false @@ -49,7 +49,7 @@ cover: required: false type: string entity_id: - description: Add a list of entity IDs so the switch only reacts to state changes of these entities. This will reduce the number of times the cover will try to update its state. + description: A list of entity IDs so the cover only reacts to state changes of these entities. This can be used if the automatic analysis fails to find all relevant entities. required: false type: [string, list] value_template: @@ -217,9 +217,6 @@ sensor: {% else %} closed {% endif %} - entity_id: - - cover.bedroom - - cover.livingroom script: cover_group: diff --git a/source/_components/cover.tuya.markdown b/source/_components/cover.tuya.markdown new file mode 100644 index 00000000000..82040f93ecc --- /dev/null +++ b/source/_components/cover.tuya.markdown @@ -0,0 +1,23 @@ +--- +layout: page +title: "Tuya Cover" +description: "Instructions on how to setup the Tuya cover within Home Assistant." +date: 2018-07-20 09:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: tuya.png +ha_category: Cover +ha_iot_class: "Cloud Polling" +ha_release: 0.75 +--- + + +The `tuya` cover platform allows you to control your [Tuya Smart](https://www.tuya.com) curtains. + +The platform supports curtains. + +

+Full configuration details can be found on the main [Tuya component](/components/tuya/) page. +

\ No newline at end of file diff --git a/source/_components/cover.vera.markdown b/source/_components/cover.vera.markdown index 32eee4bcae6..a982c83a41d 100644 --- a/source/_components/cover.vera.markdown +++ b/source/_components/cover.vera.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Vera Cover" -description: "Instructions how to integrate Vera covers into Home Assistant." +description: "Instructions on how to integrate Vera covers into Home Assistant." date: 2016-09-19 21:00 sidebar: true comments: false diff --git a/source/_components/cover.wink.markdown b/source/_components/cover.wink.markdown index 758f01b8441..8c826341870 100644 --- a/source/_components/cover.wink.markdown +++ b/source/_components/cover.wink.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Wink Cover" -description: "Instructions how to setup the Wink garage doors within Home Assistant." +description: "Instructions on how to setup the Wink garage doors within Home Assistant." date: 2016-06-28 17:30 sidebar: true comments: false @@ -13,24 +13,20 @@ ha_release: 0.13 ha_iot_class: "Cloud Polling" --- -Wink cover/garage door functionality depends on the product you're using. With GoControl/Linear Home Assistant can open, close, and view state. Chamberlain is currently limited to view only. Meaning Home Assistant will only show the current state of the door and control has been disabled (by Chamberlain). If you have a Chamberlain garage door, and would like to control it via Home Assistant, please contact Chamberlain and request that they re-enabled third-party control. +Wink Cover garage door functionality varies on the product. Home Assistant can open, close, and view state of GoControl/Linear openers. For Chamberlain MyQ-enabled openers, Home Assistant is limited to show current state (open or closed) only using this Wink cover. This restriction was imposed by Chamberlain for third party control. Wink suggests that MyQ customers should contact Chamberlain directly to inquire about expanding permissions. -The following quote is from Wink. - -> As part of our agreement with Chamberlain, third-party access to control Chamberlain garage doors has been restricted. Please contact Chamberlain directly to inquire about permissions. +The [MyQ Cover](/components/cover.myq/) does provide full functionality for opening and closing Chamberlain MyQ-enabled garage doors. If installed along with the Wink Component, a duplicate garage door entity may exist. In that case, the semi-functional Wink garage door entity can be hidden via customize.yaml. The requirement is that you have setup [Wink](/components/wink/). - ### {% linkable_title Supported cover devices %} - Bali window treatments - Lutron shades - Pella motorized blinds and shades - GoControl garage door opener -- Chamberlain (Limited functionality) (No Wink hub required) +- Chamberlain MyQ (Limited functionality) (No Wink hub required)

The above devices are confirmed to work, but others may work as well.

- diff --git a/source/_components/cover.xiaomi_aqara.markdown b/source/_components/cover.xiaomi_aqara.markdown index d2bbdf5fa9d..6f5353b9c83 100644 --- a/source/_components/cover.xiaomi_aqara.markdown +++ b/source/_components/cover.xiaomi_aqara.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Xiaomi Cover" -description: "Instructions how to setup the Xiaomi cover within Home Assistant." +description: "Instructions on how to setup the Xiaomi cover within Home Assistant." date: 2017-07-21 16:34 sidebar: true comments: false diff --git a/source/_components/cover.zwave.markdown b/source/_components/cover.zwave.markdown index b3204b21089..53477e1e005 100644 --- a/source/_components/cover.zwave.markdown +++ b/source/_components/cover.zwave.markdown @@ -1,8 +1,8 @@ --- layout: page title: "Z-Wave Cover" -description: "Instructions how to setup the Z-Wave covers within Home Assistant." -date: 2016-08-24 14:15 +description: "Instructions on how to setup the Z-Wave covers within Home Assistant." +date: 2016-12-18 19:41 sidebar: true comments: false sharing: true @@ -16,3 +16,12 @@ ha_iot_class: "Local Push" Z-Wave garage doors, blinds, and roller shutters are supported as cover in Home Assistant. To get your Z-Wave covers working with Home Assistant, follow the instructions for the general [Z-Wave component](/components/zwave/). + +If you discover that you need to [invert the operation](/docs/z-wave/installation/#invert_openclose_buttons) of open/close for a particular device, you may change this behavior in your Z-Wave section of your `configuration.yaml` file as follows: + +```yaml +zwave: + device_config: + cover.my_cover: + invert_openclose_buttons: true +``` diff --git a/source/_components/daikin.markdown b/source/_components/daikin.markdown new file mode 100644 index 00000000000..84624b5af04 --- /dev/null +++ b/source/_components/daikin.markdown @@ -0,0 +1,58 @@ +--- +layout: page +title: "Daikin AC" +description: "Instructions on how to integrate Hive devices with Home Assistant." +date: 2017-12-10 21:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: daikin.png +ha_category: Hub +ha_release: 0.59 +ha_iot_class: "Local Polling" +--- + + +The `daikin` component integrates Daikin air conditioning systems into Home Assistant. + +To automatically add all your Daikin devices (ACs and associated sensors) into your Home Assistant installation, add the following to your 'configuration.yaml' file: + +

+Please note, the Daikin platform integrates **ONLY the european versions of Daikin ACs (models BRP069A41, 42, 43, 45)** into Home Assistant. +

+ +To automatically add all your Daikin devices (ACs and associated sensors) into your Home Assistant installation, add the following to your `configuration.yaml` file: + +```yaml +# Full manual example configuration.yaml entry +daikin: + hosts: + - 192.168.4.161 + monitored_conditions: + - inside_temperature + - outside_temperature +``` + +{% configuration %} +hosts: + description: List of IP addresses or hostnames. + required: false + default: All discovered hosts + type: array +monitored_conditions: + description: List of items you want to monitor for each device. + required: false + default: All conditions + type: list + keys: + inside_temperature: + description: The current temperature measured inside the house. + outside_temperature: + description: The current temperature measured outside the house. +{% endconfiguration %} + +

+Please note that some AC devices may report outside temperature only when they are turned on. +

+ diff --git a/source/_components/datadog.markdown b/source/_components/datadog.markdown index 511d51608a5..7a3ec052c74 100644 --- a/source/_components/datadog.markdown +++ b/source/_components/datadog.markdown @@ -35,7 +35,7 @@ datadog: Configuration variables: -- **host** (*Optional*): The IP address or hostname of your Datadog host, e.g. 192.168.1.23. Defaults to `localhost`. +- **host** (*Optional*): The IP address or hostname of your Datadog host, e.g., 192.168.1.23. Defaults to `localhost`. - **port** (*Optional*): Port to use. Defaults to 8125. - **prefix** (*Optional*): Prefix to use. Defaults to `hass`. - **rate** (*Optional*): The sample rate of UDP packets sent to Datadog. Defaults to 1. diff --git a/source/_components/deconz.markdown b/source/_components/deconz.markdown new file mode 100644 index 00000000000..ae079650aef --- /dev/null +++ b/source/_components/deconz.markdown @@ -0,0 +1,206 @@ +--- +layout: page +title: "deCONZ" +description: "Instructions on how to setup Conbee/Raspbee devices with deCONZ from Dresden Elektronik within Home Assistant." +date: 2017-11-12 16:30 +sidebar: true +comments: false +sharing: true +footer: true +logo: deconz.jpeg +ha_category: Hub +ha_release: "0.61" +ha_iot_class: "Local Push" +--- + +[deCONZ](https://www.dresden-elektronik.de/funktechnik/products/software/pc/deconz/) by [Dresden Elektronik](https://www.dresden-elektronik.de) is a software that communicates with Conbee/Raspbee Zigbee gateways and exposes Zigbee devices that are connected to the gateway. + +[deCONZ REST API](http://dresden-elektronik.github.io/deconz-rest-doc/). + +### {% linkable_title Recommended way of running deCONZ %} + +Use [community container](https://hub.docker.com/r/marthoc/deconz/) by Marthoc for your deCONZ needs. It works both as a standalone container as well as with HASS.io. + +### {% linkable_title Supported devices %} + +See [deCONZ wiki](https://github.com/dresden-elektronik/deconz-rest-plugin/wiki/Supported-Devices) for a list of supported devices. + +## {% linkable_title Configuration %} + +Home Assistant will automatically discover deCONZ presence on your network, if `discovery:` is present in your `configuration.yaml` file. + +If you don't have the API key, you can generate an API key for deCONZ by using the one-click functionality similar to Philips Hue. Go to **Menu** -> **Settings** -> **Unlock Gateway** in deCONZ and then use the deCONZ configurator in Home Assistant frontend to create an API key. When you're done setting up deCONZ it will be stored as a config entry. + +You can add the following to your configuration.yaml file if you are not using the `discovery:` component: + +```yaml +# Example configuration.yaml entry +deconz: + host: IP_ADDRESS +``` + +{% configuration %} +host: + description: The IP address of your deCONZ web server. + required: false + type: string +api_key: + description: The API key to access your deCONZ web server. + required: false + type: string +port: + description: Configure port deCONZ web server is accessible from. + required: false + default: 80 + type: int +{% endconfiguration %} + +A full configuration could look like this: + +```yaml +# Example configuration.yaml entry +deconz: + host: 127.0.0.1 + api_key: 0123456789 + port: 80 +``` + +## {% linkable_title Debugging component %} + +If you have problems with deCONZ or the component you can add debug prints to the log. + +```yaml +logger: + default: info + logs: + pydeconz: debug +    homeassistant.components.deconz: debug +``` + +## {% linkable_title Device services %} + +Available services: `configure`. + +#### {% linkable_title Service `deconz.configure` %} + +Set attribute of device in Deconz using [Rest API](http://dresden-elektronik.github.io/deconz-rest-doc/rest/). + +| Service data attribute | Optional | Description | +|-----------|----------|-------------| +| `field` | No | String representing a specific device in deCONZ. | +| `entity` | No | String representing a specific HASS entity of a device in deCONZ. | +| `data` | No | Data is a JSON object with what data you want to alter. | + +Field and entity are exclusive, i.e you can only use one in a request. + +{ "field": "/lights/1", "data": {"name": "light2"} } + +{ "entity": "light.light1", "data": {"name": "light2"} } + +{ "field": "/config", "data": {"permitjoin": 60} } + +## {% linkable_title Remote control devices %} + +Remote controls (ZHASwitch category) will be not be exposed as a regular entity, but as events named 'deconz_event' with a payload of 'id' and 'event'. Id will be the device name from deCONZ and Event will be the momentary state of the switch. However, a sensor entity will be created that shows the battery level of the switch as reported by deCONZ, named sensor.device_name_battery_level. + +Typical values for switches, the event codes are 4 numbers where the first and last number are of interest here. + +| Switch code | Description | +|-------------|-------------| +| 1XXX | Button #1 up to #8 | +| XXX1 | Button hold | +| XXX2 | Button short release | +| XXX3 | Button long release | + +Where for example on a Philips Hue Dimmer, 2001 would be holding the dim up button. + +For the IKEA Tradfri remote, 1 is the middle button, 2 is up, 3 is down, 4 is left, and 5 is right. + +## {% linkable_title Examples %} + +### {% linkable_title Step up and step down input number with wireless dimmer %} + +#### YAML + +{% raw %} +```yaml +automation: + - alias: 'Toggle lamp from dimmer' + initial_state: 'on' + trigger: + platform: event + event_type: deconz_event + event_data: + id: remote_control_1 + event: 1002 + action: + service: light.toggle + entity_id: light.lamp + + - alias: 'Increase brightness of lamp from dimmer' + initial_state: 'on' + trigger: + platform: event + event_type: deconz_event + event_data: + id: remote_control_1 + event: 2002 + action: + - service: light.turn_on + data_template: + entity_id: light.lamp + brightness: > + {% set bri = states.light.lamp.attributes.brightness | int %} + {{ [bri+30, 249] | min }} + + - alias: 'Decrease brightness of lamp from dimmer' + initial_state: 'on' + trigger: + platform: event + event_type: deconz_event + event_data: + id: remote_control_1 + event: 3002 + action: + - service: light.turn_on + data_template: + entity_id: light.lamp + brightness: > + {% set bri = states.light.lamp.attributes.brightness | int %} + {{ [bri-30, 0] | max }} +``` +{% endraw %} + +#### Appdaemon + +{% raw %} +```yaml +remote_control_living_room: + module: remote_control + class: RemoteControl + event: deconz_event + id: dimmer_switch_3 +``` + +```python +import appdaemon.plugins.hass.hassapi as hass + +class RemoteControl(hass.Hass): + + def initialize(self): + if 'event' in self.args: + self.listen_event(self.handle_event, self.args['event']) + + def handle_event(self, event_name, data, kwargs): + if data['id'] == self.args['id']: + self.log(data['event']) + if data['event'] == 1002: + self.log('Button on') + elif data['event'] == 2002: + self.log('Button dim up') + elif data['event'] == 3002: + self.log('Button dim down') + elif data['event'] == 4002: + self.log('Button off') +``` +{% endraw %} diff --git a/source/_components/demo.markdown b/source/_components/demo.markdown index b399c9485cd..f1c25737208 100644 --- a/source/_components/demo.markdown +++ b/source/_components/demo.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Demo platforms" -description: "Instructions how to use the Platform demos with Home Assistant." +description: "Instructions on how to use the Platform demos with Home Assistant." date: 2016-02-24 07:00 sidebar: true comments: false @@ -12,7 +12,7 @@ ha_category: Other --- -The `demo` platform allows you to use components which are providing a demo of their implementation. The demo entities are dummies but show you how the actual platform looks like. This way you can run own demonstration instance like the online [Home Assistant demo](https://home-assistant.io/demo/) or `hass --demo-mode` but combined with your own real/functional platforms. +The `demo` platform allows you to use components which are providing a demo of their implementation. The demo entities are dummies but show you how the actual platform looks like. This way you can run own demonstration instance like the online [Home Assistant demo](/demo/) or `hass --demo-mode` but combined with your own real/functional platforms. Available demo platforms: diff --git a/source/_components/device_sun_light_trigger.markdown b/source/_components/device_sun_light_trigger.markdown index e0a75a093c4..d49c4e1565f 100644 --- a/source/_components/device_sun_light_trigger.markdown +++ b/source/_components/device_sun_light_trigger.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Presence based lights" -description: "Instructions how to automate your lights with Home Assistant." +description: "Instructions on how to automate your lights with Home Assistant." date: 2015-01-20 22:36 sidebar: true comments: false diff --git a/source/_components/device_tracker.actiontec.markdown b/source/_components/device_tracker.actiontec.markdown index b2923535855..fbf21196500 100644 --- a/source/_components/device_tracker.actiontec.markdown +++ b/source/_components/device_tracker.actiontec.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Actiontec" -description: "Instructions how to integrate Actiontec routers into Home Assistant." +description: "Instructions on how to integrate Actiontec routers into Home Assistant." date: 2015-08-30 19:00 sidebar: true comments: false diff --git a/source/_components/device_tracker.aruba.markdown b/source/_components/device_tracker.aruba.markdown index 0dd61025558..e84c37954b0 100644 --- a/source/_components/device_tracker.aruba.markdown +++ b/source/_components/device_tracker.aruba.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Aruba" -description: "Instructions how to integrate Aruba routers into Home Assistant." +description: "Instructions on how to integrate Aruba routers into Home Assistant." date: 2015-08-31 08:45 sidebar: true comments: false @@ -36,7 +36,7 @@ device_tracker: Configuration variables: -- **host** (*Required*): The IP address of your router, e.g. `192.168.1.1`. +- **host** (*Required*): The IP address of your router, e.g., `192.168.1.1`. - **username** (*Required*): The username of an user with administrative privileges, usually `admin`. - **password** (*Required*): The password for your given admin account. diff --git a/source/_components/device_tracker.asuswrt.markdown b/source/_components/device_tracker.asuswrt.markdown index a49a0663097..7889253ce98 100644 --- a/source/_components/device_tracker.asuswrt.markdown +++ b/source/_components/device_tracker.asuswrt.markdown @@ -1,7 +1,7 @@ --- layout: page title: "ASUSWRT" -description: "Instructions how to integrate ASUSWRT based routers into Home Assistant." +description: "Instructions on how to integrate ASUSWRT based routers into Home Assistant." date: 2015-08-06 19:00 sidebar: true comments: false @@ -19,6 +19,8 @@ The `asuswrt` platform offers presence detection by looking at connected devices This platform is **NOT** available for [Microsoft Windows installations](http://pexpect.readthedocs.io/en/stable/overview.html#pexpect-on-windows).

+### {% linkable_title Configuration %} + To use an ASUSWRT router in your installation, add the following to your `configuration.yaml` file: ```yaml @@ -29,15 +31,44 @@ device_tracker: username: YOUR_ADMIN_USERNAME ``` -Configuration variables: - -- **host** (*Required*): The IP address of your router, eg. `192.168.1.1`. -- **username** (*Required*: The username of an user with administrative privileges, usually `admin`. -- **password** (*Optional*): The password for your given admin account (use this if no SSH key is given). -- **protocol** (*Optional*): The protocol (`ssh` or `telnet`) to use. Defaults to `ssh`. -- **port** (*Optional*): SSH port to use. Defaults to `22`. -- **mode** (*Optional*): The operating mode of the router (`router` or `ap`). Defaults to `router`. -- **ssh_key** (*Optional*): The path to your SSH private key file associated with your given admin account (instead of password). +{% configuration %} +host: + description: "The IP address of your router, eg. `192.168.1.1`." + required: true + type: string +username: + description: "The username of an user with administrative privileges, usually `admin`." + required: true + type: string +password: + description: "The password for your given admin account (use this if no SSH key is given)." + required: false + type: string +protocol: + description: "The protocol (`ssh` or `telnet`) to use." + required: false + type: string + default: ssh +port: + description: SSH port to use. + required: false + type: int + default: 22 +mode: + description: "The operating mode of the router (`router` or `ap`)." + required: false + type: string + default: router +ssh_key: + description: The path to your SSH private key file associated with your given admin account (instead of password). + required: false + type: string +require_ip: + description: If the router is in access point mode. + required: false + type: boolean + default: true +{% endconfiguration %}

You need to [enable telnet](https://www.asus.com/support/faq/1005449/) on your router if you choose to use `protocol: telnet`. diff --git a/source/_components/device_tracker.automatic.markdown b/source/_components/device_tracker.automatic.markdown index dff0b45fec9..f3e63a648dd 100644 --- a/source/_components/device_tracker.automatic.markdown +++ b/source/_components/device_tracker.automatic.markdown @@ -56,5 +56,8 @@ automation: action: - service: light.turn_off ``` +

+ You can obtain the correct ID for your vehicle from your known_devices.yaml file. Be sure to lower-case any letters contained in your vehicle's ID when using it in an automation trigger. +

See the [device tracker component page](/components/device_tracker/) for instructions how to configure the cars to be tracked. diff --git a/source/_components/device_tracker.bbox.markdown b/source/_components/device_tracker.bbox.markdown index 7a5cc91649c..35bae013f02 100644 --- a/source/_components/device_tracker.bbox.markdown +++ b/source/_components/device_tracker.bbox.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Bbox" -description: "Instructions how to integrate Bouygues Bbox routers into Home Assistant." +description: "Instructions on how to integrate Bouygues Bbox routers into Home Assistant." date: 2016-10-13 23:00 sidebar: true comments: false diff --git a/source/_components/device_tracker.bluetooth_le_tracker.markdown b/source/_components/device_tracker.bluetooth_le_tracker.markdown index e0da81a826a..ce1dab50002 100644 --- a/source/_components/device_tracker.bluetooth_le_tracker.markdown +++ b/source/_components/device_tracker.bluetooth_le_tracker.markdown @@ -30,7 +30,7 @@ $ sudo apt install bluetooth libbluetooth-dev pkg-config libboost-python-dev lib Before you get started with this platform, please note that: - This platform is incompatible with Windows - - This platform requires root privileges + - This platform requires access to the bluetooth stack, see [Rootless Setup section](#rootless-setup) for further information To use the Bluetooth tracker in your installation, add the following to your `configuration.yaml` file: @@ -43,11 +43,16 @@ device_tracker: Configuration variables: - **device_id** (*Optional*): The device ID for the Bluetooth device to be used for tracking. Defaults to `hci0`. +- **track_new_devices** (*Optional*): If new discovered devices are tracked by default. Defaults to `True`. +- **scan_duration** (*Optional*): How long should the scanner be looking for BLE devices. Defaults to `10` seconds. +- **interval_seconds** (*Optional*): Seconds between each scan for new devices. Defaults to `12` seconds. As some BT LE devices change their MAC address regularly, a new device is only discovered when it has been seen 5 times. -Some BTLE devices (e.g. fitness trackers) are only visible to the devices that they are paired with. In this case, the BTLE tracker won't see this device. +Some BTLE devices (e.g., fitness trackers) are only visible to the devices that they are paired with. In this case, the BTLE tracker won't see this device. -For running Home Assistant as non root user we can give python3 the missing capabilities to access the Bluetooth stack. Quite like setting the setuid bit (see [Stack Exchange](http://unix.stackexchange.com/questions/96106/bluetooth-le-scan-as-non-root) for more information). +## {% linkable_title Rootless Setup %} + +Normally accessing the Bluetooth stack is reserved for root, but running programs that are networked as root is a bad security wise. To allow non-root access to the Bluetooth stack we can give Python 3 the missing capabilities to access the Bluetooth stack. Quite like setting the setuid bit (see [Stack Exchange](http://unix.stackexchange.com/questions/96106/bluetooth-le-scan-as-non-root) for more information). ```bash $ sudo apt-get install libcap2-bin diff --git a/source/_components/device_tracker.bluetooth_tracker.markdown b/source/_components/device_tracker.bluetooth_tracker.markdown index 0a2a2d06323..fd79f3c3f04 100644 --- a/source/_components/device_tracker.bluetooth_tracker.markdown +++ b/source/_components/device_tracker.bluetooth_tracker.markdown @@ -15,10 +15,6 @@ ha_release: 0.18 This tracker discovers new devices on boot and tracks Bluetooth devices periodically based on `interval_seconds` value. It is not required to pair the devices with each other! Devices discovered are stored with 'bt_' as the prefix for device MAC addresses in `known_devices.yaml`. -

-[Hass.io](/hassio/) only supports Bluetooth on Raspberry Pi 3 via the Bluetooth BCM43xx (/addons/bluetooth_bcm43xx/) addon. [Hass.io](/hassio/) doesn't support external Bluetooth dongles. -

- To use the Bluetooth tracker in your installation, add the following to your `configuration.yaml` file: ```yaml @@ -27,6 +23,14 @@ device_tracker: - platform: bluetooth_tracker ``` +{% configuration %} +request_rssi: + description: Performs a request for the "Received signal strength indication" (RSSI) of each tracked device + required: false + type: boolean + default: False +{% endconfiguration %} + In some cases it can be that your device is not discovered. In that case let your phone scan for Bluetooth devices while you restart Home Assistant. Just hit `Scan` on your phone all the time until Home Assistant is fully restarted and the device should appear in `known_devices.yaml`. For additional configuration variables check the [Device tracker page](/components/device_tracker/). diff --git a/source/_components/device_tracker.bmw_connected_drive.markdown b/source/_components/device_tracker.bmw_connected_drive.markdown new file mode 100644 index 00000000000..4f390c5fa3a --- /dev/null +++ b/source/_components/device_tracker.bmw_connected_drive.markdown @@ -0,0 +1,20 @@ +--- +layout: page +title: "BMW Connected Drive Device Tracker" +description: "Instructions on how to setup your BMW Connected Drive account with Home Assistant." +date: 2018-01-10 23:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: bmw.png +ha_category: Presence Detection +ha_release: 0.64 +--- + + +The `bmw_connected_drive` platform allows you to import data on your BMW into Home Assistant. + +The device tracker platform will be automatically configured if the `bmw_connected_drive` component is configured. + +For more configuration information see the [`bmw_connected_drive` component](/components/bmw_connected_drive/) documentation. diff --git a/source/_components/device_tracker.bt_home_hub_5.markdown b/source/_components/device_tracker.bt_home_hub_5.markdown index 9fd185eadd8..106ba06083d 100644 --- a/source/_components/device_tracker.bt_home_hub_5.markdown +++ b/source/_components/device_tracker.bt_home_hub_5.markdown @@ -1,7 +1,7 @@ --- layout: page title: "BT Home Hub 5" -description: "Instructions how to integrate BT Home Hub 5 router into Home Assistant." +description: "Instructions on how to integrate BT Home Hub 5 router into Home Assistant." date: 2016-06-13 13:00 sidebar: true comments: false @@ -25,6 +25,6 @@ device_tracker: Configuration variables: -- **host** (*Required*): The IP address of your router, e.g. 192.168.1.254. +- **host** (*Required*): The IP address of your router, e.g., 192.168.1.254. See the [device tracker component page](/components/device_tracker/) for instructions how to configure the people to be tracked. diff --git a/source/_components/device_tracker.cisco_ios.markdown b/source/_components/device_tracker.cisco_ios.markdown index 1402e840649..589241b8eb6 100644 --- a/source/_components/device_tracker.cisco_ios.markdown +++ b/source/_components/device_tracker.cisco_ios.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Cisco IOS" -description: "Instructions how to integrate Cisco IOS routers into Home Assistant." +description: "Instructions on how to integrate Cisco IOS routers into Home Assistant." date: 2016-11-07 19:59 sidebar: true comments: false @@ -59,7 +59,7 @@ device_tracker: Configuration variables: -- **host** (*Required*): The IP address of your router, e.g. 192.168.1.1. +- **host** (*Required*): The IP address of your router, e.g., 192.168.1.1. - **username** (*Required*): The username of an user with administrative privileges. - **password** (*Required*): The password for your given admin account. diff --git a/source/_components/device_tracker.ddwrt.markdown b/source/_components/device_tracker.ddwrt.markdown index 4fa4fe0af4a..826046d029f 100644 --- a/source/_components/device_tracker.ddwrt.markdown +++ b/source/_components/device_tracker.ddwrt.markdown @@ -1,7 +1,7 @@ --- layout: page title: "DD-WRT" -description: "Instructions how to integrate DD-WRT based routers into Home Assistant." +description: "Instructions on how to integrate DD-WRT based routers into Home Assistant." date: 2015-05-11 09:00 sidebar: true comments: false @@ -27,7 +27,7 @@ device_tracker: Configuration variables: -- **host** (*Required*): The IP address of your router, e.g. `192.168.1.1`. +- **host** (*Required*): The IP address of your router, e.g., `192.168.1.1`. - **username** (*Required*: The username of an user with administrative privileges, usually `admin`. - **password** (*Required*): The password for your given admin account. diff --git a/source/_components/device_tracker.freebox.markdown b/source/_components/device_tracker.freebox.markdown new file mode 100644 index 00000000000..fa2a2dd6181 --- /dev/null +++ b/source/_components/device_tracker.freebox.markdown @@ -0,0 +1,67 @@ +--- +layout: page +title: "Freebox" +description: "Instructions on how to integrate Freebox routers into Home Assistant." +date: 2018-05-16 23:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: freebox.svg +ha_category: Presence Detection +ha_release: "0.70" +ha_iot_class: "Local Polling" +--- + + +The `freebox` platform offers presence detection by keeping track of the +devices connected to a [Freebox](http://www.free.fr/) router. + +### {% linkable_title Configuration %} + +If you have enabled the [discovery component](/components/discovery/), +your Freebox should be detected automatically. Otherwise, you can set it +up manually in your `configuration.yaml` file: + +```yaml +device_tracker: + - platform: freebox + host: foobar.fbox.fr + port: 1234 +``` + +{% configuration %} +host: + description: The url of the Freebox. + required: true + type: string +port: + description: The https port the Freebox is listening on. + required: true + type: string +{% endconfiguration %} + +You can find out your Freebox host and port by opening +[this address](http://mafreebox.freebox.fr/api_version) in your browser. The +returned json should contain an api_domain (`host`) and a https_port (`port`). + +### {% linkable_title Initial setup %} + +The first time Home Assistant will connect to your Freebox, you will need to +authorize it by pressing the right button on the facade of the Freebox when +prompted to do so. + +### {% linkable_title Notes %} + +Note that the Freebox waits for some time before marking a device as +inactive, meaning that there will be a small delay (1 or 2 minutes) +between the time you disconnect a device and the time it will appear +as "away" in Home Assistant. You should take this into account when specifying +the `consider_home` parameter. +On the contrary, the Freebox immediately reports devices newly connected, so +they should appear as "home" almost instantly, as soon as Home Assistant +refreshes the devices states. + +See the [device tracker component page](/components/device_tracker/) for +instructions how to configure the devices to be tracked. + diff --git a/source/_components/device_tracker.fritz.markdown b/source/_components/device_tracker.fritz.markdown index 40d7bfa985d..ed813ae1c37 100644 --- a/source/_components/device_tracker.fritz.markdown +++ b/source/_components/device_tracker.fritz.markdown @@ -1,7 +1,7 @@ --- layout: page title: "FRITZ!Box" -description: "Instructions how to integrate AVM FRITZ!Box based routers into Home Assistant." +description: "Instructions on how to integrate AVM FRITZ!Box based routers into Home Assistant." date: 2015-12-13 19:00 sidebar: true comments: false @@ -15,9 +15,13 @@ ha_release: "0.10" The `fritz` platform offers presence detection by looking at connected devices to a [AVM Fritz!Box](http://avm.de/produkte/fritzbox/) based router. +## {% linkable_title Setup %} +

-It might be necessary to install additional packages: $ sudo apt-get install libxslt-dev libxml2-dev python3-lxml -If you are working with the All-in-One installation, you may also need to execute also within your virtual environment the command pip install lxml; be patient this will take a while.

+It might be necessary to install additional packages: $ sudo apt-get install python3-lxml +If you installed Home Assistant in a virtualenv, run the following commands inside it: $ sudo apt-get install libxslt-dev libxml2-dev zlib1g-dev; pip install lxml; be patient this will take a while.

+ +## {% linkable_title Configuration %} To use an Fritz!Box router in your installation, add the following to your `configuration.yaml` file: diff --git a/source/_components/device_tracker.geofency.markdown b/source/_components/device_tracker.geofency.markdown index 320b59d4883..be09d277a1b 100644 --- a/source/_components/device_tracker.geofency.markdown +++ b/source/_components/device_tracker.geofency.markdown @@ -39,8 +39,8 @@ device_tracker: To configure Geofency, you must configure (via the Webhook feature) to send a POST request to your Home Assistant server at `http:///api/geofency`. Use the default POST format, and make sure to include the API password if you have configured a password in Home Assistant (add `?api_password=` to the end of the URL). Make sure to enable the 'Update Geo-Position' functionality for mobile beacons. -Geofency will automatically generate the device tracker name used for geofences, and you will find it in `known_devices.yaml` after the first request. For beacons, the device name will be `beacon_`, e.g., `device_tracker.beacon_car`. +Geofency will automatically generate the device tracker name used for geofences, and you will find it in `known_devices.yaml` after the first request. For beacons, the device name will be `beacon_`, e.g., `device_tracker.beacon_car`. -When you enter a geofence or stationary beacon, your location name in Home Assistant will be set to the name of the geofence or beacon location in Geofency. When you exit a geofence or stationary beacon, your location name in Home Assistant will be set to 'not home'. For mobile beacons, the location name will be 'not_home' whenever the beacon is entered or exited outside of a [zone](https://home-assistant.io/components/zone/), otherwise, it will be set to the name of the zone. +When you enter a geofence or stationary beacon, your location name in Home Assistant will be set to the name of the geofence or beacon location in Geofency. When you exit a geofence or stationary beacon, your location name in Home Assistant will be set to 'not home'. For mobile beacons, the location name will be 'not_home' whenever the beacon is entered or exited outside of a [zone](/components/zone/), otherwise, it will be set to the name of the zone. -To make Geofency work better with the [proximity](https://home-assistant.io/components/proximity/) component, you should enable the 'Send Current Location' feature in the Webhook configuration screen. This ensures that the _current_ GPS coordinates are included in exit events instead of the coordinates of the (center of) the zone that was exited. \ No newline at end of file +To make Geofency work better with the [proximity](/components/proximity/) component, you should enable the 'Send Current Location' feature in the Webhook configuration screen. This ensures that the _current_ GPS coordinates are included in exit events instead of the coordinates of the (center of) the zone that was exited. \ No newline at end of file diff --git a/source/_components/device_tracker.google_maps.markdown b/source/_components/device_tracker.google_maps.markdown new file mode 100644 index 00000000000..206c2cc9bec --- /dev/null +++ b/source/_components/device_tracker.google_maps.markdown @@ -0,0 +1,48 @@ +--- +layout: page +title: "Google Maps Location Sharing" +description: "Instructions how to use Google Maps Location Sharing to track devices in Home Assistant." +date: 2017-02-12 10:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: google_maps.png +ha_release: 0.67 +ha_category: Presence Detection +ha_iot_class: "Cloud Polling" +--- + +The `google_maps` platform allows you to detect presence using the unofficial API of [Google Maps Location Sharing](https://myaccount.google.com/locationsharing). + +## {% linkable_title Configuration %} + +You first need to create an additional Google account and share your location with that account. This platform will use that account to fetch the location of your device(s). You have to setup sharing through the Google Maps app on your mobile phone. You can find more information [here](https://support.google.com/accounts?p=location_sharing). + +This platform will create a file named `.google_maps_location_sharing.cookies` where it caches your login session. + +

+Since this platform is using an unofficial API with the help of [locationsharinglib](https://github.com/costastf/locationsharinglib), Google seems to block access to your data the first time you've logged in with this platform. +This issue can be fixed by logging in with your new account and approving your login on the [Device Activity](https://myaccount.google.com/device-activity) page. +

+ +To integrate Google Maps Location Sharing in Home Assistant, add the following section to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +device_tracker: + - platform: google_maps + username: YOUR_USERNAME + password: YOUR_PASSWORD +``` + +{% configuration %} +username: + description: The email address for the Google account that has access to your shared location. + required: true + type: string +password: + description: The password for your given username. + required: true + type: string +{% endconfiguration %} diff --git a/source/_components/device_tracker.gpslogger.markdown b/source/_components/device_tracker.gpslogger.markdown index 6b6a439cdee..6d1b2d5446a 100644 --- a/source/_components/device_tracker.gpslogger.markdown +++ b/source/_components/device_tracker.gpslogger.markdown @@ -1,7 +1,7 @@ --- layout: page title: "GPSLogger" -description: "Instructions how to use GPSLogger to track devices in Home Assistant." +description: "Instructions on how to use GPSLogger to track devices in Home Assistant." date: 2016-11-25 15:00 sidebar: true comments: false @@ -19,7 +19,14 @@ To integrate GPSLogger in Home Assistant, add the following section to your `con # Example configuration.yaml entry device_tracker: - platform: gpslogger + password: !secret gpslogger_password ``` +{% configuration %} +password: + description: Separate password for GPS Logger endpoint. If provided using regular API password to contact endpoint will result in 401 response. + required: false + type: string +{% endconfiguration %} ## {% linkable_title Setup on your smartphone %} @@ -32,7 +39,7 @@ After the launch, go to **General Options**. Enable **Start on bootup** and **St GPSLogger Settings

-Go to **Logging details** and disable **Log to GPX**. **Log to KML**, and **Log to NMEA**. Enable **Log to custom URL**. +Go to **Logging details** and disable **Log to GPX**, **Log to KML** and **Log to NMEA**. Enable **Log to custom URL**.

@@ -49,7 +56,7 @@ Right after enabling, the app will take you to the **Log to custom URL** setting The relevant endpoint is: `/api/gpslogger` ```text -http://[IP address Home Assistant]:[Port]/api/gpslogger? +https://YOUR.DNS.HOSTNAME:PORT/api/gpslogger? latitude=%LAT&longitude=%LON&device=%SER&accuracy=%ACC &battery=%BATT&speed=%SPD&direction=%DIR &altitude=%ALT&provider=%PROV&activity=%ACT @@ -58,17 +65,17 @@ http://[IP address Home Assistant]:[Port]/api/gpslogger? Add the above URL after you modified it with your settings into the **URL** field. Remove the line breaks as they are only there to make the URL readable here. - It's HIGHLY recommended to use SSL/TLS. -- Use the domain that Home Assistant is available on the internet or the public IP address. Can be a local IP address if you are using a VPN setup. -- Only remove `[Port]` if your Home Assistant instance is using port 80. Otherwise set it to 8123. -- Click on **Parameters** in the app and you will see all available parameters for the URL. For Home Assistant only the above URL will work. -- Make sure to include your [API password](/components/http/) if you have configured a password. Add `&api_password=[Your pasword]` to the end of the URL. -- You can change the name of your device name by replacing `&device=%SER` with `&device=[Devicename]`. +- Use the domain that Home Assistant is available on the internet (or the public IP address if you have a static IP address). This can be a local IP address if you are using an always on VPN from your mobile device to your home network. +- Only remove `PORT` if your Home Assistant instance is using port 443. Otherwise set it to the port you're using. +- For Home Assistant only the above URL, as written, will work - do not add, remove, or change the order of any of the parameters. +- Make sure to include your [API password](/components/http/) if you have configured a password. Add `&api_password=YOUR_PASSWORD` to the end of the URL. +- You can change the name of your device name by replacing `&device=%SER` with `&device=DEVICE_NAME`. -If your battery drains fast then you can tune the performence of GPSLogger under **Performance** -> **Location providers** +If your battery drains fast then you can tune the performance of GPSLogger under **Performance** -> **Location providers**

Performance

-A request can be forced from the app to test if everything is working fine. A succesful request will update the `known_devices.yaml` file with the device's serial number. +A request can be forced from the app to test if everything is working fine. A successful request will update the `known_devices.yaml` file with the device's serial number. diff --git a/source/_components/device_tracker.hitron_coda.markdown b/source/_components/device_tracker.hitron_coda.markdown index fecdc2fd5ed..70910428cfc 100644 --- a/source/_components/device_tracker.hitron_coda.markdown +++ b/source/_components/device_tracker.hitron_coda.markdown @@ -13,7 +13,7 @@ ha_release: 0.58 --- This component offers presence detection by examining devices connected to a [Rogers Hitron CODA](https://www.rogers.com/customer/support/article/wi-fi-password-hitron-coda4582-cgn3amr-cgnm3552-cgn3acr-cgn3) -Router. +or [Shaw Hitron CGNM](https://community.shaw.ca/docs/DOC-4066) Router. To use a Hitron router in your installation, add the following to your `configuration.yaml` file: @@ -24,6 +24,7 @@ device_tracker: host: !secret router_ip username: !secret router_username password: !secret router_password + type: rogers ``` {% configuration %} @@ -39,6 +40,10 @@ password: description: The password for the specified username. Usually your WiFi password. required: true type: string +type: + description: The internet provider for the modem; "rogers" or "shaw". Defaults to "rogers". + required: false + type: string {% endconfiguration %} See the [device tracker component page](/components/device_tracker/) for instructions how to configure the people to be tracked. diff --git a/source/_components/device_tracker.huawei_router.markdown b/source/_components/device_tracker.huawei_router.markdown index 6fb470ea4fb..92ee5c62d47 100644 --- a/source/_components/device_tracker.huawei_router.markdown +++ b/source/_components/device_tracker.huawei_router.markdown @@ -1,20 +1,23 @@ --- layout: page title: "Huawei Router" -description: "Instructions how to integrate Huawei Routers into Home Assistant." +description: "Instructions on how to integrate Huawei Routers into Home Assistant." date: 2017-07-16 01:40 sidebar: true comments: false sharing: true footer: true -logo: huawei.png +logo: huawei.svg ha_category: Presence Detection ha_release: 0.51 --- -This component offers presence detection by looking at connected devices to a [Huawei router](http://m.huawei.com/enmobile/enterprise/products/network/access/pon-one/hw-371813.htm). +The `huawei` device trakcer platform offers presence detection by looking at connected devices to a [Huawei router](http://m.huawei.com/enmobile/enterprise/products/network/access/pon-one/hw-371813.htm). + Currently, this was only tested with the Huawei HG8247H and HG8247Q Smart Router (used by Vodafone Portugal). +## {% linkable_title Configuration %} + To use a Huawei router in your installation, add the following to your `configuration.yaml` file: ```yaml @@ -22,15 +25,23 @@ To use a Huawei router in your installation, add the following to your `configur device_tracker: - platform: huawei_router host: 192.168.1.1 - username: user - password: pass + username: YOUR_USERNAME + password: YOUR_PASSWORD ``` -Configuration variables: - -- **host** (*Required*): The IP address of your router, e.g. 192.168.1.1. -- **username** (*Required*): The username to login into the router (the same used trough the router's web interface). -- **password** (*Required*): The password for the specified username. - +{% configuration %} +host: + description: The IP address of your router, e.g., 192.168.1.1. + required: true + type: string +username: + description: The username to login into the router (the same used trough the router's web interface). + required: true + type: string +password: + description: The password for the specified username. + required: true + type: string +{% endconfiguration %} See the [device tracker component page](/components/device_tracker/) for instructions how to configure the people to be tracked. diff --git a/source/_components/device_tracker.icloud.markdown b/source/_components/device_tracker.icloud.markdown index e98b8271577..a57ba44d4b4 100644 --- a/source/_components/device_tracker.icloud.markdown +++ b/source/_components/device_tracker.icloud.markdown @@ -1,7 +1,7 @@ --- layout: page title: "iCloud" -description: "Instructions how to use iCloud to track devices in Home Assistant." +description: "Instructions on how to use iCloud to track devices in Home Assistant." date: 2015-12-15 1000 sidebar: true comments: false @@ -33,9 +33,11 @@ Configuration variables: - **username** (*Required*): The username for the iCloud account. - **password** (*Required*): The password for your given username. - **account_name** (*Optional*): The friendly name for the account_name. If this isn't given, it will use the account_name of the username (so the part before the `@` in the email address). +- **max_interval** (*Optional*): Maximum interval in minutes between subsequent location upates. This tracker uses dynamic intervals for requesting location updates. When iphone is stationary, interval will eventually be set to `max_interval` to save battery. When iphone starts moving again interval will be dynamically updated to 1 min. Note that updating interval to 1 min might be delayed by maximum `max_interval` minutes. Default is 30 min. Minimum value is 1 min. +- **gps_accuracy_threshold** (*Optional*): iCloud location updates come with some gps_accuracy varying from 10 to 5000 meters. This setting defines the accuracy threshold in meters for a location update. Less accurate updates will be discarded by this tracker. This allows more precise location monitoring and fewer false positive zone changes. Default is 1000 meters.

-This may cause battery drainage as it wakes up your device to get the current location. +Low `max_interval` may cause battery drainage as it wakes up your device to get the current location.

@@ -48,7 +50,7 @@ To disable the drainage of the battery, a dynamic interval is being used for eac 2 Factor Authentication is the improved version of 2 Steps Authentication, this is still not supported by the pyicloud library. Therefore it's not possible to use it with the device_tracker yet. 4 services are available for this component: -- **icloud_update**: This service can be used to ask for an update of a certain iDevice. The `account_name` and `device_name` are optional. +- **icloud_update**: This service can be used to ask for an update of a certain iDevice. The `account_name` and `device_name` are optional. Request will result in new Home Assistant [state_changed](/docs/configuration/events/#event-state_changed) event describing current iphone location. Can be used in automations when manual location update is needed, e.g. to check if anyone is home when door's been opened. - **icloud_lost_iphone**: This service will play the Lost iPhone sound on a certain iDevice. The `account_name` and `device_name` are optional. -- **icloud_set_interval**: This service will change the dynamic interval of an iDevice. The `account_name` and `device_name` are optional. If `interval` is used in the service_data, the iDevice will be updated with that new interval. That interval will be fixed until the iDevice changes zone or if this service is called again. If `interval` isn't used in the service_data, the interval for that iDevice will revert back to it's default dynamic interval based on it's current zone, it's distance towards home and it's battery level. +- **icloud_set_interval**: This service will change the dynamic interval of an iDevice. The `account_name` and `device_name` are optional. If `interval` is used in the service_data, the iDevice will be updated with that new interval. That interval will be fixed until the iDevice changes zone or if this service is called again. If `interval` isn't used in the service_data, the interval for that iDevice will revert back to its default dynamic interval based on its current zone, its distance towards home and its battery level. - **icloud_reset_account**: This service can be used to reset an iCloud account. This is helpful when not all devices are being found by the component or if you have added a new iDevice to your account. The `account_name` is optional. diff --git a/source/_components/device_tracker.keenetic_ndms2.markdown b/source/_components/device_tracker.keenetic_ndms2.markdown index 3dbd197b771..aec5ac8a522 100644 --- a/source/_components/device_tracker.keenetic_ndms2.markdown +++ b/source/_components/device_tracker.keenetic_ndms2.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Keenetic NDMS2 Routers" -description: "Instructions how to integrate Keenetic NDMS2 Routers into Home Assistant." +description: "Instructions on how to integrate Keenetic NDMS2 Routers into Home Assistant." date: 2017-09-15 15:40 sidebar: true comments: false @@ -28,7 +28,7 @@ device_tracker: Configuration variables: -- **host** (*Required*): The IP address of your router, e.g. 192.168.1.1. +- **host** (*Required*): The IP address of your router, e.g., 192.168.1.1. - **username** (*Required*): The username to login into the router (user should have read access to web interface of the router). - **password** (*Required*): The password for the specified username. - **interface** (*Optional*): Ihe internal name of the interface to get devices connected to. Default is 'Home'. For expert users only. diff --git a/source/_components/device_tracker.linksys_ap.markdown b/source/_components/device_tracker.linksys_ap.markdown index b9821eb5227..6cdc3984b2e 100644 --- a/source/_components/device_tracker.linksys_ap.markdown +++ b/source/_components/device_tracker.linksys_ap.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Linksys Access Points" -description: "Instructions how to integrate Linksys Access Points into Home Assistant." +description: "Instructions on how to integrate Linksys Access Points into Home Assistant." date: 2016-12-16 01:40 sidebar: true comments: false diff --git a/source/_components/device_tracker.linksys_smart.markdown b/source/_components/device_tracker.linksys_smart.markdown index 0e1827c6806..0b9875e5f23 100644 --- a/source/_components/device_tracker.linksys_smart.markdown +++ b/source/_components/device_tracker.linksys_smart.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Linksys Smart Wifi Router" -description: "Instructions how to integrate Linksys Smart Wifi Router into Home Assistant." +description: "Instructions on how to integrate Linksys Smart Wifi Router into Home Assistant." date: 2017-06-22 01:40 sidebar: true comments: false @@ -12,12 +12,11 @@ logo: linksys.png ha_release: 0.48 --- -The `linksys_smart` platform offers presence detection by looking at connected devices to a Linksys Smart Wifi based router. +The `linksys_smart` platform offers presence detection by looking at connected devices to a Linksys Smart Wifi based router. -Tested routers: +Tested routers: LINKSYS WRT3200ACM MU-MIMO Gigabit Wi-Fi Wireless Router LINKSYS WRT1900ACS Dual-band Wi-Fi Router -

For this platform to work correctly, it is necessary to disable the "Access via wireless" feature in the Local Management Access section of the router administration page. If "Access via wireless" is not disabled, a connectivity conflict arises because the Home Assistant integration is trying to pass userid and password, but the router is only expecting a password. diff --git a/source/_components/device_tracker.locative.markdown b/source/_components/device_tracker.locative.markdown index 2a185c924e4..02d932a7a42 100644 --- a/source/_components/device_tracker.locative.markdown +++ b/source/_components/device_tracker.locative.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Locative" -description: "Instructions how to use Locative to track devices in Home Assistant." +description: "Instructions on how to use Locative to track devices in Home Assistant." date: 2015-10-13 19:00 sidebar: true comments: false diff --git a/source/_components/device_tracker.luci.markdown b/source/_components/device_tracker.luci.markdown index 937193752e5..c95813e3478 100644 --- a/source/_components/device_tracker.luci.markdown +++ b/source/_components/device_tracker.luci.markdown @@ -1,7 +1,7 @@ --- layout: page title: "OpenWRT (luci)" -description: "Instructions how to integrate OpenWRT routers into Home Assistant." +description: "Instructions on how to integrate OpenWRT routers into Home Assistant." date: 2015-03-23 19:59 sidebar: true comments: false @@ -12,10 +12,14 @@ ha_category: Presence Detection ha_release: pre 0.7 --- -_This is one of the two ways we support OpenWRT. If you encounter problems, try [ubus](/components/device_tracker.ubus/)._ +_This is one of multiple ways we support OpenWRT. For an overview, see [openwrt](/components/device_tracker.openwrt/)._ This is a presence detection scanner for OpenWRT using [luci](http://wiki.openwrt.org/doc/techref/luci). +

+This component requires a [workaround](https://github.com/home-assistant/home-assistant/issues/1258#issuecomment-252469880) when using luci with HTTPS and a self-signed certificate. +

+ Before this scanner can be used you have to install the luci RPC package on OpenWRT: ```bash @@ -35,9 +39,10 @@ device_tracker: Configuration variables: -- **host** (*Required*): The IP address of your router, e.g. `192.168.1.1`. +- **host** (*Required*): The IP address of your router, e.g., `192.168.1.1`. - **username** (*Required*): The username of an user with administrative privileges, usually `admin`. - **password** (*Required*): The password for your given admin account. +- **ssl** (*Optional*): If your router enforces SSL connections, set to `true`. Defaults to `false`. See the [device tracker component page](/components/device_tracker/) for instructions how to configure the people to be tracked. diff --git a/source/_components/device_tracker.markdown b/source/_components/device_tracker.markdown index 105dec1e7f3..41fd9b25a54 100644 --- a/source/_components/device_tracker.markdown +++ b/source/_components/device_tracker.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Device Tracker" -description: "Instructions how to setup device tracking within Home Assistant." +description: "Instructions on how to setup device tracking within Home Assistant." date: 2015-01-20 22:36 sidebar: true comments: false @@ -13,7 +13,7 @@ Home Assistant can get information from your wireless router or third party serv There are also trackers available which use different technologies like [MQTT](/components/mqtt/) or [Nmap](/components/device_tracker.nmap_tracker/) to scan the network for devices. -An [event](/getting-started/automation-trigger/#event-trigger) (`device_tracker_new_device`) will be fired when a device is discovered for the first time. +An [event](/getting-started/automation-trigger/#event-trigger) (`device_tracker_new_device`) will be fired when a device is discovered for the first time. ## {% linkable_title Configuring a `device_tracker` platform %} @@ -26,15 +26,23 @@ device_tracker: host: 192.168.1.1 username: admin password: YOUR_PASSWORD + new_device_defaults: + track_new_devices: True + hide_if_away: False + ``` The following optional parameters can be used with any platform. However device tracker will only look for global settings under the configuration of the first configured platform: | Parameter | Default | Description | -|---------------------|---------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| `track_new_devices` | True | If new discovered devices are tracked by default | -| `interval_seconds` | 12 | Seconds between each scan for new devices | -| `consider_home` | 180 | Seconds to wait till marking someone as not home after not being seen. This parameter is most useful for households with Apple iOS devices that go into sleep mode while still at home to conserve battery life. iPhones will occasionally drop off the network and then re-appear. `consider_home` helps prevent false alarms in presence detection when using IP scanners such as Nmap. `consider_home` accepts various time representations, (E.g. the following all represents 3 minutes: `180`, `0:03`, `0:03:00`) | +|----------------------|---------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| `interval_seconds` | 12 | Seconds between each scan for new devices | +| `consider_home` | 180 | Seconds to wait till marking someone as not home after not being seen. This parameter is most useful for households with Apple iOS devices that go into sleep mode while still at home to conserve battery life. iPhones will occasionally drop off the network and then re-appear. `consider_home` helps prevent false alarms in presence detection when using IP scanners such as Nmap. `consider_home` accepts various time representations, (e.g., the following all represents 3 minutes: `180`, `0:03`, `0:03:00`) | +| `new_device_defaults`| | Default values for new discovered devices. Available options `track_new_devices` (default: `True`), `hide_if_away` (default: `False`) | + +

+ Note that setting `track_new_devices: False` will still result in new devices being recorded in `known_devices.yaml`, but they won't be tracked (`track: no`). +

The extended example from above would look like the following sample: @@ -61,11 +69,15 @@ Here's an example configuration for a single device: devicename: name: Friendly Name mac: EA:AA:55:E7:C6:94 - picture: https://home-assistant.io/images/favicon-192x192.png + picture: https://www.home-assistant.io/images/favicon-192x192.png track: yes hide_if_away: no ``` +

+ In the example above, `devicename` refers to the detected name of the device. For instance, `my_iphone`. +

+ | Parameter | Default | Description | |----------------|-------------------------------|---------------------------------------------------------------------------------------------------------| | `name` | Host name or "Unnamed Device" | The friendly name of the device. | @@ -76,3 +88,7 @@ devicename: | `track` | [uses platform setting] | If `yes`/`on`/`true` then the device will be tracked. Otherwise its location and state will not update. | | `hide_if_away` | False | If `yes`/`on`/`true` then the device will be hidden if it is not at home. | | `consider_home` | [uses platform setting] | Seconds to wait till marking someone as not home after not being seen. Allows you to override the global `consider_home` setting from the platform configuration on a per device level. | + +## {% linkable_title Device states %} + +The state of your tracked device will be `'home'` if it is in the [home zone](/components/zone#home-zone), detected by your network or Bluetooth based presence detection. If you're using a presence detection method that includes coordinates then when it's in a zone the state will be the name of the zone (in lower case). When a device isn't at home and isn't in any zone, the state will be `'not_home'`. diff --git a/source/_components/device_tracker.meraki.markdown b/source/_components/device_tracker.meraki.markdown new file mode 100644 index 00000000000..cbe481d39ee --- /dev/null +++ b/source/_components/device_tracker.meraki.markdown @@ -0,0 +1,49 @@ +--- +layout: page +title: "Meraki" +description: "Instructions on how to integrate Meraki-based presence detection into Home Assistant." +date: 2017-11-22 08:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: meraki.png +ha_category: Presence Detection +ha_release: "0.60" +--- + +Use your Meraki AP as device tracker. Note that Meraki will see all devices, not only connected to the network. + +### {% linkable_title Prerequisites %} + +1. Go to Network-wide/General page, and find the Location and scanning section. +1. Make sure analytics and Scanning API are both enabled. +1. Make note of the Validator string, which will be used in the `device_tracker` configuration. +1. Click **Add a Post URL**: + 1. Set the Post URL to `https://YOUR_HOSTNAME/api/meraki?api_password=YOUR_HASS_PASSWORD` + 1. Set the Secret to a randomly generated string, and make note of it for the `device_tracker` configuration. + 1. Make sure the API Version is set to `2.0`. + 1. Hit **Save** in the bottom right of the page. + +## {% linkable_title Configuration %} + +After you configure access to the Meraki CMX API, add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +device_tracker: + - platform: meraki + secret: your_secret + validator: meraki_validator +``` + +{% configuration %} + secret: + description: Secret code added in Meraki. + required: true + type: string + validator: + description: Validation string from Meraki. + required: true + type: string +{% endconfiguration %} diff --git a/source/_components/device_tracker.mercedesme.markdown b/source/_components/device_tracker.mercedesme.markdown new file mode 100644 index 00000000000..ad59c95e0d5 --- /dev/null +++ b/source/_components/device_tracker.mercedesme.markdown @@ -0,0 +1,19 @@ +--- +layout: page +title: "Mercedes me" +description: "Instructions on for how to integrate Mercedes me into Home Assistant." +date: 2018-01-27 10:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: mercedesme.png +ha_category: Presence Detection +ha_release: 0.63 +--- + +The `Mercedes me` platform allows you to get data about the location of your [Mercedes me connected car](https://www.mercedes-benz.com/en/mercedes-me/) car within Home Assistant. + +The device tracker platform will be automatically configured if Mercedes me component is configured. + +For more configuration information see the [Mercedes me component](/components/mercedesme/) documentation. diff --git a/source/_components/device_tracker.mikrotik.markdown b/source/_components/device_tracker.mikrotik.markdown index e3e49c48469..da1dceee4d9 100644 --- a/source/_components/device_tracker.mikrotik.markdown +++ b/source/_components/device_tracker.mikrotik.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Mikrotik" -description: "Instructions how to integrate Mikrotik/Routerboard based routers into Home Assistant." +description: "Instructions on how to integrate Mikrotik/Routerboard based routers into Home Assistant." date: 2017-04-28 16:03 sidebar: true comments: false diff --git a/source/_components/device_tracker.mqtt.markdown b/source/_components/device_tracker.mqtt.markdown index d60b895c50e..cf8f006de1f 100644 --- a/source/_components/device_tracker.mqtt.markdown +++ b/source/_components/device_tracker.mqtt.markdown @@ -1,7 +1,7 @@ --- layout: page title: "MQTT Device Tracker" -description: "Instructions how to use MQTT to track devices in Home Assistant." +description: "Instructions on how to use MQTT to track devices in Home Assistant." date: 2015-09-19 20:41 sidebar: true comments: false @@ -32,11 +32,11 @@ Configuration variables: - **qos** (*Optional*): The QoS level of the topic. -Example JSON you can publish to the topic (e.g. via mqtt.publish service): +Example JSON you can publish to the topic (e.g., via mqtt.publish service): ```json { - "topic": "/location/paulus", + "topic": "location/paulus", "payload": "home" } ``` diff --git a/source/_components/device_tracker.mqtt_json.markdown b/source/_components/device_tracker.mqtt_json.markdown index d7a515588c9..cc0e4783ec3 100644 --- a/source/_components/device_tracker.mqtt_json.markdown +++ b/source/_components/device_tracker.mqtt_json.markdown @@ -1,7 +1,7 @@ --- layout: page title: "JSON MQTT Device Tracker" -description: "Instructions how to use JSON MQTT to track devices in Home Assistant." +description: "Instructions on how to use JSON MQTT to track devices in Home Assistant." date: 2017-04-12 20:41 sidebar: true comments: false @@ -9,11 +9,10 @@ sharing: true footer: true logo: mqtt.png ha_category: Presence Detection -ha_version: 0.44 ha_iot_class: depends +ha_release: 0.44 --- - The `mqtt_json` 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. To use this device tracker in your installation, add the following to your `configuration.yaml` file: @@ -27,10 +26,16 @@ device_tracker: annetherese_n4: location/annetherese ``` -Configuration variables: - -- **devices** (*Required*): List of devices with their topic. -- **qos** (*Optional*): The QoS level of the topic. +{% configuration %} +devices: + description: List of devices with their topic. + required: true + type: list +qos: + description: The QoS level of the topic. + required: false + type: string +{% endconfiguration %} This platform receives JSON formatted payloads containing GPS information, for example: diff --git a/source/_components/device_tracker.mysensors.markdown b/source/_components/device_tracker.mysensors.markdown index 14db68931ad..5366c68ea78 100644 --- a/source/_components/device_tracker.mysensors.markdown +++ b/source/_components/device_tracker.mysensors.markdown @@ -1,7 +1,7 @@ --- layout: page title: "MySensors Device Tracker" -description: "Instructions how to use MySensors to track devices in Home Assistant." +description: "Instructions on how to use MySensors to track devices in Home Assistant." date: 2017-02-06 15:00 +0100 sidebar: true comments: false diff --git a/source/_components/device_tracker.netgear.markdown b/source/_components/device_tracker.netgear.markdown index 70dbbce1025..8bdcacc8cde 100644 --- a/source/_components/device_tracker.netgear.markdown +++ b/source/_components/device_tracker.netgear.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Netgear" -description: "Instructions how to integrate Netgear routers into Home Assistant." +description: "Instructions on how to integrate Netgear routers into Home Assistant." date: 2015-03-23 19:59 sidebar: true comments: false @@ -13,7 +13,6 @@ ha_iot_class: "Local Polling" ha_release: pre 0.7 --- - This platform allows you to detect presence by looking at connected devices to a [Netgear](http://www.netgear.com/) device. To use this device tracker in your installation, add the following to your `configuration.yaml` file: @@ -29,10 +28,18 @@ device_tracker: Configuration variables: -- **host** (*Optional*): The IP address of your router, e.g. `192.168.1.1`. If not provided `routerlogin.net` will be used. -- **username** (*Optional*): The username of an user with administrative privileges. If not provided `admin` will be used. -- **port** (*Optional*): The port your router communicates with (defaults to `5000`, but `80` is also known to be used on some models). +- **url** (*Optional*): The base URL, e.g., `http://routerlogin.com:5000` for example. If not provided `host` and `port` are used. If none provided autodetection of the URL will be used. +- **host** (*Optional*): The IP address of your router, e.g., `192.168.1.1`. +- **port** (*Optional*): The port your router communicates with. +- **username** (*Optional*): The username of a user with administrative privileges. If not provided `admin` will be used. - **password** (*Required*): The password for your given admin account. +- **devices** (*Optional*): If provided only specified devices will be reported. Can be MAC address or the device name as reported in the Netgear UI. +- **exclude** (*Optional*): Devices to exclude from the scan. +- **accesspoints** (*Optional*): Also track devices on the specified APs. Only supports MAC address. + +When `accesspoints` is specified an extra device will be reported for each device connected to the APs specified here, as `MY-LAPTOP on RBS40`. `Router` will be reported as AP name for the main AP. Only tested with Orbi. + +The use of `devices` or `exclude` is recommended when using `accesspoints` to avoid having a lot of entries. List of models that are known to use port 80: - Nighthawk X4S - AC2600 (R7800) diff --git a/source/_components/device_tracker.nmap_tracker.markdown b/source/_components/device_tracker.nmap_tracker.markdown index 0ce79dfc3a9..74ace37e238 100644 --- a/source/_components/device_tracker.nmap_tracker.markdown +++ b/source/_components/device_tracker.nmap_tracker.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Nmap" -description: "Instructions how to integrate Nmap into Home Assistant." +description: "Instructions on how to integrate Nmap into Home Assistant." date: 2015-03-23 19:59 sidebar: true comments: false diff --git a/source/_components/device_tracker.openwrt.markdown b/source/_components/device_tracker.openwrt.markdown new file mode 100644 index 00000000000..2f4b0f5a18e --- /dev/null +++ b/source/_components/device_tracker.openwrt.markdown @@ -0,0 +1,48 @@ +--- +layout: page +title: "OpenWRT" +description: "Instructions on how to integrate OpenWRT routers into Home Assistant." +date: 2018-03-09 12:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: openwrt.png +ha_category: Presence Detection +ha_release: pre 0.7 +--- + +There are _multiple_ ways of integrating an OpenWRT router for presence detection. A broad distinction can be made between presence detection methods which actively scan for devices (by default every 12 seconds) and those that are notified by some external service on changes. It is essentially a problem of synchronizing states between two remote machines. + +* __active scanning__ + Scan for devices regularly. + * Advantages: + * robust on an unreliable set-up where the the router may not be reachable occasionally + * Disadvantages: + * average six-second delay between connecting and being registered as `home` + * lots of unnecessary network requests + * Examples: + * [ubus](/components/device_tracker.ubus/) + * [luci](/components/device_tracker.luci/) +* __passive/event-based__ + External services which notify Home Assistant of devices via the [REST API endpoint](/developers/rest_api.markdown). + * Advantages: + * devices typically registered in under one second when they connect + * very few network requests + * Disadvantages: + * prone to missed events when connectivity between Home Assistant and the router is not guaranteed + * Examples: + * [openwrt_hass_devicetracker](https://github.com/mueslo/openwrt_hass_devicetracker) + * your own custom script + +### {% linkable_title Event-based device tracker %} + +This can be achieved by running a simple shell script on the OpenWRT router which calls the appropriate Home Assistant service. An OpenWRT package which does this is listed above. As this method directly calls the [service API](/developers/rest_api.markdown#post-apiservicesltdomainltservice), no special configuration is necessary on the Home Assistant side, except for ensuring the device_tracker API is running, which is achieved by adding the following to your `configuration.yaml` file: + +```yaml +device_tracker: +``` + +To get the best of both worlds, you can combine the two approaches, running both a periodic device scanner and an event-based device tracker. + +See the [device tracker component page](/components/device_tracker/) for instructions how to configure the people to be tracked. diff --git a/source/_components/device_tracker.owntracks.markdown b/source/_components/device_tracker.owntracks.markdown index 20cf68ab97a..a3de574f912 100644 --- a/source/_components/device_tracker.owntracks.markdown +++ b/source/_components/device_tracker.owntracks.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Owntracks" -description: "Instructions how to use Owntracks to track devices in Home Assistant." +description: "Instructions on how to use Owntracks to track devices in Home Assistant." date: 2015-09-22 07:00 sidebar: true comments: false @@ -13,8 +13,7 @@ featured: false ha_release: 0.7.4 --- - -This platform allows you to detect presence using [Owntracks](http://owntracks.org/). OwnTracks allows users to track their location on Android and iOS phones and publish it to an MQTT broker. This platform will connect to the broker and monitor for new locations. +This platform allows you to detect presence using [Owntracks](http://owntracks.org/). OwnTracks allows users to track their location on iOS and Android phones and publish it to an MQTT broker. This platform will connect to the broker and monitor for new locations. This component requires [the MQTT component](/components/mqtt/) to be set up and works very well together with [the zone component](/components/zone/). @@ -30,8 +29,11 @@ Configuration variables: - **max_gps_accuracy** (*Optional*): Sometimes Owntracks can report GPS location with a very low accuracy (few kilometers). That can trigger false zoning in your Home Assistant installation. With the parameter, you can filter these GPS reports. The number has to be in meter. For example, if you put 200 only GPS report with an accuracy under 200 will be take in account. - **waypoints** (*Optional*): Owntracks users can define [waypoints](http://owntracks.org/booklet/features/waypoints/) (a.k.a regions) which are similar in spirit to Home Assistant zones. If this configuration variable is `True`, the Owntracks users who are in `waypoint_whitelist` can export waypoints from the device and Home Assistant will import them as zone definitions. Defaults to `True`. -- **waypoint_whitelist** (*Optional*): A list of user names (as defined for [Owntracks](/components/device_tracker.owntracks/)) who can export their waypoints from Owntracks to Home Assistant. This would be the `username` portion of the Base Topic Name, (e.g. owntracks/**username**/iPhone). Defaults to all users who are connected to Home Assistant via Owntracks. +- **waypoint_whitelist** (*Optional*): A list of user names (as defined for [Owntracks](/components/device_tracker.owntracks/)) who can export their waypoints from Owntracks to Home Assistant. This would be the `username` portion of the Base Topic Name, (e.g., owntracks/**username**/iPhone). Defaults to all users who are connected to Home Assistant via Owntracks. - **secret** (*Optional*): [Payload encryption key](http://owntracks.org/booklet/features/encrypt/). This is usable when communicating with a third-party untrusted server or a public server (where anybody can subscribe to any topic). By default the payload is assumed to be unencrypted (although the communication between Home Assistant and the server might still be encrypted). This feature requires the `libsodium` library to be present. +- **mqtt_topic** (*Optional*): The topic to subscribe for Owntracks updates on your MQTT instance (defaults to `owntracks/#`). +- **events_only** (*Optional*): Home Assistant will ignore all location updates and rely solely on geofence enter/leave events. +- **region_mapping** (*Optional*): Dictionary to remap names of regions as configured in the Owntracks app to Home Assistant zones. Use this if you have multiple homes or Home Assistant instances and want to map a different label to 'home'. `key: value` maps Owntracks region `key` to Home Assistant zone `value`. A full sample configuration for the `owntracks` platform is shown below: @@ -41,12 +43,18 @@ device_tracker: - platform: owntracks max_gps_accuracy: 200 waypoints: True + mqtt_topic: "owntracks/#" + events_only: True waypoint_whitelist: - jon - ram + region_mapping: + cabin: home + office: work ``` ### {% linkable_title Using Owntracks with other device trackers %} + Owntracks can also be used with other device trackers, such as [Nmap](/components/device_tracker.nmap_tracker/) or [Netgear](/components/device_tracker.netgear/). To do this, fill in the `mac` field to the Owntracks entry in `known_devices.yaml` with the MAC address of the device you want to track. This way the state of the device will be determined by the source that reported last. The naming convention for known device list is `_` and could be set in app configuration. More details about this config can found in [device tracker](/components/device_tracker/). An example showing the inclusion of the `mac` field for multiple component tracking. The `mac` field will need to be added to the `owntracks` device and will enable tracking by all components that track via the `mac` address. @@ -55,13 +63,14 @@ An example showing the inclusion of the `mac` field for multiple component track USERNAME_DEVICE_ID: name: Friendly Name mac: EA:AA:55:E7:C6:94 - picture: https://home-assistant.io/images/favicon-192x192.png + picture: https://www.home-assistant.io/images/favicon-192x192.png gravatar: test@example.com track: yes hide_if_away: no ``` ### {% linkable_title Using Owntracks regions %} + Owntracks can track regions, and send region entry and exit information to Home Assistant (HA). You set up a region in the Owntracks app which you should name the same as your HA Zone, and then make sure to turn on the `share` option for the region in the owntracks app. Please see the [owntracks documentation](http://owntracks.org/booklet/guide/waypoints/). Home Assistant will use the enter and leave messages to set your zone location. Your location will be set to the center of zone when you enter. Location updates from OwnTracks will be ignored while you are inside a zone. @@ -69,6 +78,7 @@ Home Assistant will use the enter and leave messages to set your zone location. When you exit a zone, Home Assistant will start using location updates to track you again. To make sure that Home Assistant correctly exits a zone (which it calculates based on your GPS coordinates), you may want to set your Zone radius in HA to be slightly smaller that the Owntracks region radius. ### {% linkable_title Using Owntracks regions - forcing Owntracks to update using %}iBeacons + When run in the usual *significant changes mode* (which is kind to your phone battery), Owntracks sometimes doesn't update your location as quickly as you'd like when you arrive at a zone. This can be annoying if you want to trigger an automation when you get home. You can improve the situation using iBeacons. iBeacons are simple Bluetooth devices that send out an "I'm here" message. They are supported by IOS and some Android devices. Owntracks explain more [here](http://owntracks.org/booklet/guide/beacons/). @@ -80,18 +90,21 @@ When you exit an iBeacon region HA will switch back to using GPS to determine yo Sometimes Owntracks will lose connection with an iBeacon for a few seconds. If you name your beacon starting with `-` Owntracks will wait longer before deciding it has exited the beacon zone. HA will ignore the `-` when it matches the Owntracks region with Zones. So if you call your Owntracks region `-home` then HA will recognize it as `home`, but you will have a more stable iBeacon connection. ### {% linkable_title Using Owntracks iBeacons to track devices %} + iBeacons don't need to be stationary. You could put one on your key ring, or in your car. When your phone sees a mobile iBeacon that it knows about, it will tell HA the location of that iBeacon. If your phone moves while you are connected to the iBeacon, HA will update the location of the iBeacon. But when your phone loses the connection, HA will stop updating the iBeacon location. -To use mobile iBeacons with HA, you just set up a region that doesn't match your Zone names. If HA sees an entry event for a iBeacon region that doesn't match a Zone name (say `keys`) - it will start tracking it, calling the device `device_tracker.beacon_keys`). +To use mobile iBeacons with HA, you just set up a region that doesn't match your Zone names. If HA sees an entry event for an iBeacon region that doesn't match a Zone name (say `keys`) - it will start tracking it, calling the device `device_tracker.beacon_keys`). This allows you to write zone automations for devices that can't track themselves (for example *alert me if I leave the house and my keys are still at home*). Another example would be *open the gates if my car arrives home*. ### {% linkable_title Using mobile and fixed iBeacons together %} + You can use iBeacons of both types together, so if you have a Zone `drive` with an iBeacon region called `-drive` and you arrive home with a mobile iBeacon called `-car`, then `device_tracker.beacon_car` will be set to a state of `drive`. ### {% linkable_title Importing Owntracks waypoints as zones %} + By default, any Owntracks user connected to Home Assistant can export their waypoint definitions (from the *Export - Export to Endpoint* menu item) which will then be translated to zone definitions in Home Assistant. The zones will be named `- - `. This functionality can be controlled in 2 ways: 1. The configuration variable `waypoints` can be set to `False` which will disable importing waypoints for all users. diff --git a/source/_components/device_tracker.owntracks_http.markdown b/source/_components/device_tracker.owntracks_http.markdown index 7e91746e55a..64df68dd04e 100644 --- a/source/_components/device_tracker.owntracks_http.markdown +++ b/source/_components/device_tracker.owntracks_http.markdown @@ -1,7 +1,7 @@ --- layout: page title: "OwnTracks (via HTTP)" -description: "Instructions how to use Owntracks via HTTP to track devices in Home Assistant." +description: "Instructions on how to use Owntracks via HTTP to track devices in Home Assistant." date: 2017-09-28 07:00 sidebar: true comments: false @@ -32,5 +32,21 @@ Open OwnTracks and go to Connection preferences: - Mode: Select **Private HTTP** - Host: [Home Assistant URL]:[port]/api/owntracks/[your name]/[device name] - Identification: Turn **Authentication** on, username `homeassistant` and password is your API password that you use to login to Home Assistant. - + Host example: If I host my Home Assistant at `https://example.duckdns.org`, my name is Paulus and my phone is a Pixel I would set the host to be `https://example.duckdns.org/api/owntracks/paulus/pixel`. This will result in an entity with an ID of `device_tracker.paulus_pixel`. You can pick any name for the user and the device. + +Since the battery data is available as an attribute of the device tracker entity, it can be tracked with a [`template` sensor](/components/sensor.template/). + +{% raw %} +```yaml +# Example configuration.yaml entry +sensor: + - platform: template + sensors: + pixel_battery: + friendly_name: Pixel of Paulus + unit_of_measurement: "%" + value_template: '{{ states.device_tracker.paulus_pixel.attributes.battery|int }}' + device_class: battery +``` +{% endraw %} diff --git a/source/_components/device_tracker.ping.markdown b/source/_components/device_tracker.ping.markdown index 79798811983..1f343680127 100644 --- a/source/_components/device_tracker.ping.markdown +++ b/source/_components/device_tracker.ping.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Ping (ICMP)" -description: "Instructions how to integrate Ping (ICMP)-based presence detection into Home Assistant." +description: "Instructions on how to integrate Ping (ICMP)-based presence detection into Home Assistant." date: 2017-01-06 08:00 sidebar: true comments: false diff --git a/source/_components/device_tracker.sky_hub.markdown b/source/_components/device_tracker.sky_hub.markdown index e5a12718946..792aece8a85 100644 --- a/source/_components/device_tracker.sky_hub.markdown +++ b/source/_components/device_tracker.sky_hub.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Sky Hub" -description: "Instructions how to integrate Sky Hub routers into Home Assistant." +description: "Instructions on how to integrate Sky Hub routers into Home Assistant." date: 2017-01-28 09:00 sidebar: true comments: false diff --git a/source/_components/device_tracker.snmp.markdown b/source/_components/device_tracker.snmp.markdown index 22767d9907a..faea7253981 100644 --- a/source/_components/device_tracker.snmp.markdown +++ b/source/_components/device_tracker.snmp.markdown @@ -1,7 +1,7 @@ --- layout: page title: "SNMP" -description: "Instructions how to integrate SNMP into Home Assistant." +description: "Instructions on how to integrate SNMP into Home Assistant." date: 2015-10-08 12:00 sidebar: true comments: false @@ -33,6 +33,8 @@ The following OID examples pull the current MAC Address table from a router. Thi | TP-Link | Archer VR600 | `1.3.6.1.2.1.3.1.1.2` | | EdgeRouter | Lite v1.9.0 | `1.3.6.1.2.1.4.22.1.2` | | Ruckus | ZoneDirector 9.13.3 | `1.3.6.1.4.1.25053.1.2.2.1.1.3.1.1.1.6` | +| DD-WRT | unknown RouterOS version/model | `1.3.6.1.2.1.4.22.1.2` | +| Apple Airport Express (2nd gen.) | 7.6.9 | `1.3.6.1.2.1.3.1.1.2` or `1.3.6.1.2.1.4.22.1.2`| To use the SNMP version 1 platform in your installation, add the following to your `configuration.yaml` file: diff --git a/source/_components/device_tracker.swisscom.markdown b/source/_components/device_tracker.swisscom.markdown index bee21be205f..49c4f72ba96 100644 --- a/source/_components/device_tracker.swisscom.markdown +++ b/source/_components/device_tracker.swisscom.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Swisscom Internet-Box" -description: "Instructions how to integrate Swisscom Internet-Box into Home Assistant." +description: "Instructions on how to integrate Swisscom Internet-Box into Home Assistant." date: 2016-10-29 23:30 sidebar: true comments: false diff --git a/source/_components/device_tracker.tado.markdown b/source/_components/device_tracker.tado.markdown index 446c79131d6..70f130c7e01 100644 --- a/source/_components/device_tracker.tado.markdown +++ b/source/_components/device_tracker.tado.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Tado" -description: "Instructions how to integrate Tado into Home Assistant." +description: "Instructions on how to integrate Tado into Home Assistant." date: 2017-01-17 12:00 sidebar: true comments: false @@ -12,7 +12,7 @@ ha_category: Presence Detection ha_release: 0.37 --- -The `tado` device tracker is using the [Tado Smart Thermostat](https://www.tado.com/) and it's support for person presence detection based on smartphone location by geofencing. +The `tado` device tracker is using the [Tado Smart Thermostat](https://www.tado.com/) and its support for person presence detection based on smartphone location by geofencing. This tracker uses the Tado API to determine if a mobile device is at home. It tracks all devices in your home that Tado knows about. diff --git a/source/_components/device_tracker.tesla.markdown b/source/_components/device_tracker.tesla.markdown index 68307d1057f..affbe9a1a85 100644 --- a/source/_components/device_tracker.tesla.markdown +++ b/source/_components/device_tracker.tesla.markdown @@ -1,6 +1,6 @@ --- layout: page -title: "Tesla" +title: "Tesla Device Tracker" description: "Instructions on for how to integrate Tesla into Home Assistant." date: 2017-08-02 12:20 sidebar: true diff --git a/source/_components/device_tracker.thomson.markdown b/source/_components/device_tracker.thomson.markdown index f9d39eb6d7f..810d586d27b 100644 --- a/source/_components/device_tracker.thomson.markdown +++ b/source/_components/device_tracker.thomson.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Thomson" -description: "Instructions how to integrate Thomson routers into Home Assistant." +description: "Instructions on how to integrate Thomson routers into Home Assistant." date: 2015-08-30 19:00 sidebar: true comments: false diff --git a/source/_components/device_tracker.tile.markdown b/source/_components/device_tracker.tile.markdown index 7dc534339f4..8abb07a6764 100644 --- a/source/_components/device_tracker.tile.markdown +++ b/source/_components/device_tracker.tile.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Tile" -description: "Instructions how to use Tile to track devices in Home Assistant." +description: "Instructions on how to use Tile to track devices in Home Assistant." date: 2017-11-08 20:40:00 sidebar: true comments: false @@ -25,9 +25,6 @@ device_tracker: - platform: tile username: email@address.com password: MY_PASSWORD_123 - monitored_variables: - - TILE - - PHONE ``` {% configuration %} @@ -43,4 +40,8 @@ device_tracker: description: the Tile types to monitor; valid values are `TILE` and `PHONE` (default is for all types to be included) required: false type: list + show_inactive: + description: whether to show expired/disabled Tiles + required: false + type: boolean {% endconfiguration %} diff --git a/source/_components/device_tracker.tomato.markdown b/source/_components/device_tracker.tomato.markdown index e7a105ea2fe..279cd63b687 100644 --- a/source/_components/device_tracker.tomato.markdown +++ b/source/_components/device_tracker.tomato.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Tomato" -description: "Instructions how to integrate Tomato routers into Home Assistant." +description: "Instructions on how to integrate Tomato routers into Home Assistant." date: 2015-03-23 19:59 sidebar: true comments: false @@ -29,14 +29,47 @@ device_tracker: http_id: YOUR_HTTP_ID ``` -Configuration variables: - -- **host** (*Required*): The IP address of your router, e.g. 192.168.1.1. -- **username** (*Required*: The username of an user with administrative privileges, usually *admin*. -- **password** (*Required*): The password for your given admin account. -- **http_id** (*Required*): The value can be obtained by logging in to the Tomato admin interface and search for `http_id` in the page source code. +{% configuration %} +host: + description: "The IP address or hostname of your router, e.g., `192.168.1.1` or `rt-ac68u`." + required: false + type: string +port: + description: "The port number of your router, e.g., `443`." + required: false + type: int + default: 80/443 (automatically detected) +ssl: + description: "Whether to connect via `https`." + required: false + type: bool + default: false +verify_ssl: + description: "If SSL verification for https resources needs to be turned off (for self-signed certs, etc.) this can take on boolean values `False` or `True` or you can pass a location on the device where a certificate can be used for verification e.g., `/mnt/NAS/router_cert.pem`." + required: false + type: [string, bool] + default: true +username: + description: "The username of an user with administrative privileges, usually *admin*." + required: true + type: string +password: + description: "The password for your given admin account." + required: true + type: string +http_id: + description: "The value can be obtained by logging in to the Tomato admin interface and search for `http_id` in the page source code." + required: true + type: string +{% endconfiguration %} See the [device tracker component page](/components/device_tracker/) for instructions how to configure the people to be tracked. A description of the API s available in this [Tomato API](http://paulusschoutsen.nl/blog/2013/10/tomato-api-documentation/) blog post. - + +SSL Certificate: + +Gathering the SSL Certificate of your router can be accomplished with this (or a similar) command: +```bash +openssl s_client -showcerts -connect 172.10.10.1:443 /dev/null | openssl x509 -outform PEM > router_cert.pem +``` \ No newline at end of file diff --git a/source/_components/device_tracker.tplink.markdown b/source/_components/device_tracker.tplink.markdown index 89897bb1e02..89b47681796 100644 --- a/source/_components/device_tracker.tplink.markdown +++ b/source/_components/device_tracker.tplink.markdown @@ -1,7 +1,7 @@ --- layout: page title: "TP-Link" -description: "Instructions how to integrate TP-Link routers into Home Assistant." +description: "Instructions on how to integrate TP-Link routers into Home Assistant." date: 2015-06-22 10:30 sidebar: true comments: false @@ -13,7 +13,14 @@ ha_release: pre 0.7 --- -The `tplink` platform allows you to detect presence by looking at connected devices to a [TP-Link](https://www.tp-link.com) device. This includes the ArcherC9 line. +The `tplink` platform allows you to detect presence by looking at connected devices to a [TP-Link](https://www.tp-link.com) device. + +Currently supported devices includes the following: + +- Archer C7 firmware version 150427 +- Archer C9 firmware version 150811 +- EAP-225 AP with latest firmware version +- Archer D9 firmware version 0.9.1 0.1 v0041.0 Build 160224 Rel.59129n

TP-Link devices typically only allow one login at a time to the admin console. This component will count towards your one allowed login. Depending on how aggressively you configure device_tracker you may not be able to access the admin console of your TP-Link device without first stopping Home Assistant. Home Assistant takes a few seconds to login, collect data, and log out. If you log into the admin console manually, remember to log out so that Home Assistant can log in again. @@ -31,8 +38,8 @@ device_tracker: Configuration variables: -- **host** (*Required*): The IP address of your router, e.g. 192.168.1.1. -- **username** (*Required*: The username of an user with administrative privileges, usually *admin*. +- **host** (*Required*): The IP address of your router, e.g., 192.168.1.1. +- **username** (*Required*): The username of a user with administrative privileges, usually *admin*. The Archer D9 last firmware does not require a username. - **password** (*Required*): The password for your given admin account. For Archer C9 models running firmware version 150811 or later please use the encrypted password you can retrieve like this: @@ -41,7 +48,12 @@ For Archer C9 models running firmware version 150811 or later please use the enc 2. Type in the password you use to login into the password field. 3. Click somewhere else on the page so that the password field is not selected anymore. 4. Open the JavaScript console of your browser (usually by pressing F12 and then clicking on "Console"). -5. Type ```document.getElementById("login-password").value;```. +5. Type `document.getElementById("login-password").value;` or `document.getElementById("pcPassword").value;`, depending on your firmware version. 6. Copy the returned value to your Home Assistant configuration as password. See the [device tracker component page](/components/device_tracker/) for instructions how to configure the people to be tracked. + +For Archer D9 model the default ip is 192.168.1.1, the username is not necessary and you can leave that field blank. + + + diff --git a/source/_components/device_tracker.trackr.markdown b/source/_components/device_tracker.trackr.markdown index 6337b8f7870..962300ed1ea 100644 --- a/source/_components/device_tracker.trackr.markdown +++ b/source/_components/device_tracker.trackr.markdown @@ -1,7 +1,7 @@ --- layout: page title: "TrackR" -description: "Instructions how to use TrackR to track devices in Home Assistant." +description: "Instructions on how to use TrackR to track devices in Home Assistant." date: 2016-12-22 1000 sidebar: true comments: false @@ -24,11 +24,18 @@ To integrate TrackR in Home Assistant, add the following section to your `config # Example configuration.yaml entry device_tracker: platform: trackr - username: USERNAME - password: PASSWORD + username: YOUR_USERNAME + password: YOUR_PASSWORD ``` -Configuration variables: +{% configuration %} +username: + description: The email address for the TrackR account. + required: true + type: string +password: + description: The password for your given username. + required: true + type: string +{% endconfiguration %} -- **username** (*Required*): The email address for the TrackR account. -- **password** (*Required*): The password for your given username. diff --git a/source/_components/device_tracker.ubus.markdown b/source/_components/device_tracker.ubus.markdown index d408fec5448..ba38f2f1b64 100644 --- a/source/_components/device_tracker.ubus.markdown +++ b/source/_components/device_tracker.ubus.markdown @@ -1,7 +1,7 @@ --- layout: page title: "OpenWRT (ubus)" -description: "Instructions how to integrate OpenWRT routers into Home Assistant." +description: "Instructions on how to integrate OpenWRT routers into Home Assistant." date: 2015-03-23 19:59 sidebar: true comments: false @@ -12,7 +12,7 @@ ha_category: Presence Detection ha_release: 0.7.6 --- -_This is one of the two ways we support OpenWRT. If you encounter problems, try [luci](/components/device_tracker.luci/)._ +_This is one of multiple ways we support OpenWRT. For an overview, see [openwrt](/components/device_tracker.openwrt/)._ This is a presence detection scanner for [OpenWRT](https://openwrt.org/) using [ubus](http://wiki.openwrt.org/doc/techref/ubus). It scans for changes in `hostapd.*`, which will detect and report changes in devices connected to the access point on the router. @@ -68,16 +68,15 @@ Configuration variables: - **host** (*Required*): The IP address of your router, eg. 192.168.1.1. - **username** (*Required*): The username of an user with administrative privileges, usually *root*. - **password** (*Required*): The password for your given account. -- **dhcp_software** (*Optional*): The DHCP software used in your router: `dnsmasq` or `dhcpd`. Defaults to `dnsmasq`. - +- **dhcp_software** (*Optional*): The DHCP software used in your router: `dnsmasq`, `dhcpd`, or `none`. Defaults to `dnsmasq`. See the [device tracker component page](/components/device_tracker/) for instructions how to configure the people to be tracked. -## Troubleshooting +## {% linkable_title Troubleshooting %} If you find that this never creates `known_devices.yaml`, or if you need more information on the communication chain between Home Assistant and OpenWRT, follow these steps to grab the packet stream and gain insight into what's happening. -### Increase Log Level +### {% linkable_title Increase Log Level %} 1. On your Home Assistant device, stop Home Assistant 2. Adjust `configuration.yaml` to log more detail for the `device_tracker` component @@ -167,6 +166,6 @@ Connection: keep-alive ``` 11. In this case we are actually receiving a valid response with no data. The request says that we are looking for ARP information from `hostapd.*`, which is the access point on the router. In my environment I don't use the AP on the router, and so it was correctly returning no data. Armed with this information, I know that I cannot use this component for device tracking or presence. -### Cleanup +### {% linkable_title Cleanup %} When you're done troubleshooting, remember to reset your logging configuration and delete any capture files that contain sensitive information. diff --git a/source/_components/device_tracker.unifi.markdown b/source/_components/device_tracker.unifi.markdown index 004d92679d7..e9410667707 100644 --- a/source/_components/device_tracker.unifi.markdown +++ b/source/_components/device_tracker.unifi.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Ubiquiti Unifi WAP" -description: "Instructions how to use a Unifi WAP controller as a device tracker module." +description: "Instructions on how to use a Unifi WAP controller as a device tracker module." date: 2016-02-19 20:59 sidebar: true comments: false @@ -12,7 +12,6 @@ ha_category: Presence Detection ha_release: 0.14 --- - This platform allows you to detect presence by looking at devices connected to a [Ubiquiti](http://ubnt.com/) [Unifi](https://www.ubnt.com/enterprise/#unifi) controller. To use this device tracker in your installation, add the following to your `configuration.yaml` file: @@ -21,24 +20,72 @@ To use this device tracker in your installation, add the following to your `conf # Example configuration.yaml entry device_tracker: - platform: unifi - username: YOUR_ADMIN_USERNAME - password: YOUR_ADMIN_PASSWORD + host: unifi + username: username + password: password + ssid_filter: + - 'HomeSSID' + - 'IoTSSID' ``` -Configuration variables: +{% configuration %} +username: + description: A user on the controller + type: string + required: true +password: + description: The password for the account + type: string + required: true +host: + description: The hostname or IP address of your controller + default: localhost + type: string + required: false +port: + description: The port of your controller's web interface + default: 8443 + type: int + required: false +site_id: + description: For multisite installations, you can specify `site_id` to specify which is used + type: string + required: false + default: default +verify_ssl: + description: Whether to do strict validation on SSL certificates of the Unifi controller. This can be true/false or the path to a locally trusted certificate to use for verification (i.e. "/path/to/custom_cert.pm") + type: boolean or filename + required: false + default: true +detection_time: + description: How long since the last seen time before the device is marked away, specified in seconds. + type: int + required: false + default: 300 +ssid_filter: + description: Filter the SSIDs that tracking will occur on. + type: list of strings + required: false + default: None -- **host** (*Optional*): The hostname or IP address of your controller. Defaults to `localhost`. -- **port** (*Optional*): The port of your controller's web interface. Defaults to `8443`. -- **username** (*Required*: The username of an user with administrative privileges, usually `admin`. -- **password** (*Required*): The password for your given admin account. -- **site_id** (*Optional*): Allows you to specify a `site_id` for device tracking. Defaults to `default`. Found in the URL of the controller (i.e. https://CONTROLLER:PORT/manage/site/SITE_ID/dashboard). -- **verify_ssl** (*Optional*): Controls if the SSL certificate running on your Unifi webserver must be trusted by a known Certificate Authority on the server running Home Assistant. Defaults to 'True' but can also be a value that points to your custom cert "path/to/custom_cert.pem". -- **detection_time** (*Optional*): The Unifi component will not return a device that has not been seen by the controller in the last 180 seconds. You can adjust this threshold with this variable and accepts seconds or `00:00:00` time formats. +{% endconfiguration %} See the [device tracker component page](/components/device_tracker/) for instructions how to configure the people to be tracked. -

-If you decide to install the Unifi Controller on the same system as your Home Assistant, be aware there may be overlap in ports if you have the MQTT component as well. +### {% linkable_title Configuring Users %} + +The Unifi controller allows you to create multiple users on it besides the main administrator. It is recommended that you create a limited user that has `read-only` permissions for the Unifi device tracker. + +### {% linkable_title Conflicts with MQTT %} + +The Unifi controller can either be a dedicated hardware device (Unifi's cloud key), or as software any Linux system. If you run the the Unifi controller on the same operating system as Home Assistant there may be conflicts in ports if you have the MQTT component as well. + +It is recommended that you run the Unifi controller in a dedicated virtual machine to avoid that situation. + +### {% linkable_title Troubleshooting and Time Synchronization %} + +Presence detection depends on accurate time configuration between Home Assistant and the Unifi controller. + +If Home Assistant and the Unifi controller are running on separate machines or VMs ensure that all clocks are syncronized. Failing to have syncronized clocks will lead to Home Assistant failing to mark a device as home. [Related Issue](https://github.com/home-assistant/home-assistant/issues/10507) -

diff --git a/source/_components/device_tracker.unifi_direct.markdown b/source/_components/device_tracker.unifi_direct.markdown index 24124d3cbc2..4816832b8e1 100644 --- a/source/_components/device_tracker.unifi_direct.markdown +++ b/source/_components/device_tracker.unifi_direct.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Ubiquiti Unifi direct AP" -description: "Instructions how to use a Unifi WAP as a device tracker." +description: "Instructions on how to use a Unifi WAP as a device tracker." date: 2017-11-17 14:59 sidebar: true comments: false @@ -13,7 +13,7 @@ ha_release: 0.59 --- -This platform allows you to detect presence by looking at devices connected to a [UniFi AP](http://ubnt.com/unifi-ap/). This device tracker differs form [Ubiquiti Unifi WAP](https://home-assistant.io/components/device_tracker.unifi/) because it doesn't require the Unifi controller software. +This platform allows you to detect presence by looking at devices connected to a [UniFi AP](https://www.ubnt.com/products/#unifi). This device tracker differs form [Ubiquiti Unifi WAP](/components/device_tracker.unifi/) because it doesn't require the Unifi controller software. To use this device tracker in your installation, add the following to your `configuration.yaml` file: @@ -32,11 +32,11 @@ host: required: true type: string username: - description: The username used to connect to your Unifi AP. + description: The SSH device username used to connect to your Unifi AP. required: true type: string password: - description: The password used to connect to your Unifi AP. + description: The SSH device password used to connect to your Unifi AP. required: true type: string {% endconfiguration %} diff --git a/source/_components/device_tracker.upc_connect.markdown b/source/_components/device_tracker.upc_connect.markdown index d58a1878e93..1f77bc8d869 100644 --- a/source/_components/device_tracker.upc_connect.markdown +++ b/source/_components/device_tracker.upc_connect.markdown @@ -1,7 +1,7 @@ --- layout: page title: "UPC ConnectBox" -description: "Instructions how to integrate UPC ConnectBox into Home Assistant." +description: "Instructions on how to integrate UPC ConnectBox into Home Assistant." date: 2016-12-30 00:00 sidebar: true comments: false @@ -32,4 +32,5 @@ See the [device tracker component page](/components/device_tracker/) for instruc Also known to be working with the following devices: - Irish Virgin Media Super Hub 3.0 - Ziggo Connectbox NL + - Unitymedia Connect Box (DE) diff --git a/source/_components/device_tracker.xiaomi.markdown b/source/_components/device_tracker.xiaomi.markdown index 9a8f6a43fd1..d38571007cb 100644 --- a/source/_components/device_tracker.xiaomi.markdown +++ b/source/_components/device_tracker.xiaomi.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Xiaomi Router" -description: "Instructions how to integrate Xiaomi routers into Home Assistant." +description: "Instructions on how to integrate Xiaomi routers into Home Assistant." date: 2017-01-12 12:04 sidebar: true comments: false diff --git a/source/_components/device_tracker.xiaomi_miio.markdown b/source/_components/device_tracker.xiaomi_miio.markdown new file mode 100644 index 00000000000..54f4cf9d5de --- /dev/null +++ b/source/_components/device_tracker.xiaomi_miio.markdown @@ -0,0 +1,38 @@ +--- +layout: page +title: "Xiaomi Mi WiFi Repeater 2" +description: "Instructions how to integrate your Xiaomi Mi WiFi Repeater 2 within Home Assistant." +date: 2018-04-01 21:06 +sidebar: true +comments: false +sharing: true +footer: true +logo: xiaomi.png +ha_category: Presence Detection +ha_iot_class: "Local Polling" +ha_release: 0.67 +--- + +The `xiaomi_miio` device tracker platform is observing your Xiaomi Mi WiFi Repeater 2 and reporting all associated WiFi clients. + +Please follow the instructions on [Retrieving the Access Token](/components/vacuum.xiaomi_miio/#retrieving-the-access-token) to get the API token. + +To add a Xiaomi Mi Air Quality Monitor to your installation, add the following to your `configuration.yaml` file: + +```yaml +device_tracker: + - platform: xiaomi_miio + host: 192.168.130.73 + token: YOUR_TOKEN +``` + +{% configuration %} +host: + description: The IP address of your miio device. + required: true + type: string +token: + description: The API token of your miio device. + required: true + type: string +{% endconfiguration %} diff --git a/source/_components/dialogflow.markdown b/source/_components/dialogflow.markdown index a034f72e28c..bf2cc4b4e61 100644 --- a/source/_components/dialogflow.markdown +++ b/source/_components/dialogflow.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Dialogflow" -description: "Instructions how integrate Dialogflow with Home Assistant." +description: "Instructions on how integrate Dialogflow with Home Assistant." date: 2017-01-27 11:28 sidebar: true comments: false @@ -47,10 +47,10 @@ To use this integration, you should define a conversation (intent) in Dialogflow - Select name, language (if you are planning to use Google Actions check their [supported languages](https://support.google.com/assistant/answer/7108196?hl=en)) and time zone - Click "Save" - Go to "Fulfillment" (in the left menu) -- Enable Webhook and set your Home Assistant URL with the Dialogflow endpoint, e.g. `https://myhome.duckdns.org/api/dialogflow?api_password=HA_PASSWORD` +- Enable Webhook and set your Home Assistant URL with the Dialogflow endpoint, e.g., `https://myhome.duckdns.org/api/dialogflow?api_password=HA_PASSWORD` - Click "Save" - Create a new intent -- Below "User says" write one phrase that you, the user, will tell Dialogflow, e.g. `What is the temperature at home?` +- Below "User says" write one phrase that you, the user, will tell Dialogflow, e.g., `What is the temperature at home?` - In "Action" set some key (this will be the bind with Home Assistant configuration), eg.: GetTemperature - In "Response" set "Cannot connect to Home Assistant or it is taking to long" (fall back response) - At the end of the page, click on "Fulfillment" and check "Use webhook" diff --git a/source/_components/digital_ocean.markdown b/source/_components/digital_ocean.markdown index c2e26b9aa3b..4554819ee2a 100644 --- a/source/_components/digital_ocean.markdown +++ b/source/_components/digital_ocean.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Digital Ocean" -description: "Instructions how to integrate the Digital Ocean within Home Assistant." +description: "Instructions on how to integrate the Digital Ocean within Home Assistant." date: 2016-09-24 20:00 sidebar: true comments: false diff --git a/source/_components/discoverable.markdown b/source/_components/discoverable.markdown index 19c16ce0ac3..12c170a1eee 100644 --- a/source/_components/discoverable.markdown +++ b/source/_components/discoverable.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Discoverable" -description: "Instructions how to setup the discoverable component with Home Assistant." +description: "Instructions on how to setup the discoverable component with Home Assistant." date: 2016-03-01 07:00 sidebar: true comments: false @@ -23,7 +23,7 @@ for state in hass.states(): To enable `discovery` in your installation, add the following to your `configuration.yaml` file: ```yaml -# Example configuration.yml entry +# Example configuration.yaml entry discoverable: expose_password: yes ``` diff --git a/source/_components/discovery.markdown b/source/_components/discovery.markdown index 62f9c0c1b34..e148bfdac29 100644 --- a/source/_components/discovery.markdown +++ b/source/_components/discovery.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Discovery" -description: "Instructions how to setup Home Assistant to discover new devices." +description: "Instructions on how to setup Home Assistant to discover new devices." date: 2015-01-24 14:39 sidebar: true comments: false @@ -14,29 +14,34 @@ ha_category: Other Home Assistant can discover and automatically configure [zeroconf](https://en.wikipedia.org/wiki/Zero-configuration_networking)/[mDNS](https://en.wikipedia.org/wiki/Multicast_DNS) and [uPnP](https://en.wikipedia.org/wiki/Universal_Plug_and_Play) devices on your network. Currently the `discovery` component can detect: - * [Apple TV](https://home-assistant.io/components/apple_tv/) - * [Axis Communications security devices](https://home-assistant.io/components/axis/) - * [Belkin WeMo switches](https://home-assistant.io/components/wemo/) - * [Bluesound speakers](https://home-assistant.io/components/media_player.bluesound/) - * [Bose Soundtouch speakers](https://home-assistant.io/components/media_player.soundtouch/) - * [Denon network receivers](https://home-assistant.io/components/media_player.denonavr/) - * [DirecTV receivers](https://home-assistant.io/components/media_player.directv/) - * [Frontier Silicon internet radios](https://home-assistant.io/components/media_player.frontier_silicon/) - * [Google Cast](https://home-assistant.io/components/media_player.cast/) - * [IKEA Trådfri (Tradfri)](https://home-assistant.io/components/tradfri/) - * [Linn / Openhome](https://home-assistant.io/components/media_player.openhome/) - * [Logitech Harmony Hub](https://home-assistant.io/components/remote.harmony/) - * [Logitech media server (Squeezebox)](https://home-assistant.io/components/media_player.squeezebox/) - * [Netgear routers](https://home-assistant.io/components/device_tracker.netgear/) - * [Panasonic Viera](https://home-assistant.io/components/media_player.panasonic_viera/) - * [Philips Hue](https://home-assistant.io/components/light.hue/) - * [Plex media server](https://home-assistant.io/components/media_player.plex/) - * [Roku media player](https://home-assistant.io/components/media_player.roku/) - * [SABnzbd downloader](https://home-assistant.io/components/sensor.sabnzbd/) - * [Samsung TVs](https://home-assistant.io/components/media_player.samsungtv/) - * [Sonos speakers](https://home-assistant.io/components/media_player.sonos/) - * [Yamaha media player](https://home-assistant.io/components/media_player.yamaha/) - * [Yeelight Sunflower bulb](https://home-assistant.io/components/light.yeelightsunflower/) + * [Apple TV](/components/apple_tv/) + * [Axis Communications security devices](/components/axis/) + * [Belkin WeMo switches](/components/wemo/) + * [Bluesound speakers](/components/media_player.bluesound/) + * [Bose Soundtouch speakers](/components/media_player.soundtouch/) + * [Denon network receivers](/components/media_player.denonavr/) + * [DirecTV receivers](/components/media_player.directv/) + * [Frontier Silicon internet radios](/components/media_player.frontier_silicon/) + * [Google Cast](/components/media_player.cast/) + * [HomeKit](/components/homekit_controller/) + * [IKEA Trådfri (Tradfri)](/components/tradfri/) + * [Linn / Openhome](/components/media_player.openhome/) + * [Logitech Harmony Hub](/components/remote.harmony/) + * [Logitech media server (Squeezebox)](/components/media_player.squeezebox/) + * [Netgear routers](/components/device_tracker.netgear/) + * [Panasonic Viera](/components/media_player.panasonic_viera/) + * [Philips Hue](/components/light.hue/) + * [Plex media server](/components/media_player.plex/) + * [Roku media player](/components/media_player.roku/) + * [SABnzbd downloader](/components/sensor.sabnzbd/) + * [Samsung SyncThru Printer](/components/sensor.syncthru/) + * [Samsung TVs](/components/media_player.samsungtv/) + * [Sonos speakers](/components/media_player.sonos/) + * [Telldus Live](/components/tellduslive/) + * [Wink](/components/wink/) + * [Yamaha media player](/components/media_player.yamaha/) + * [Yeelight Sunflower bulb](/components/light.yeelightsunflower/) + * [Xiaomi Gateway (Aqara)](/components/xiaomi_aqara/) It will be able to add Google Chromecasts and Belkin WeMo switches automatically, for Philips Hue it will require some configuration from the user. @@ -48,11 +53,22 @@ discovery: ignore: - sonos - samsung_tv + enable: + - homekit ``` -Configuration variables: +{% linkable_title Configuration variables: %} -- **ignore** (*Optional*): A list of platforms that never will be automatically configured by `discovery`. +{% configuration discovery %} +ignore: + description: A list of platforms that never will be automatically configured by `discovery`. + required: false + type: string +enable: + description: A list of platforms not enabled by default that `discovery` should discover. + required: false + type: string +{% endconfiguration %} Valid values for ignore are: @@ -75,26 +91,44 @@ Valid values for ignore are: * `plex_mediaserver`: Plex media server * `roku`: Roku media player * `sabnzbd`: SABnzbd downloader + * `samsung_printer`: Samsung SyncThru Printer * `samsung_tv`: Samsung TVs * `sonos`: Sonos speakers + * `songpal` : Songpal + * `tellstick`: Telldus Live + * `wink`: Wink Hub * `yamaha`: Yamaha media player * `yeelight`: Yeelight Sunflower bulb - -

+ * `xiaomi_gw`: Xiaomi Aqara gateway + +Valid values for enable are: + + * `homekit`: HomeKit accessories + +## {% linkable_title Troubleshooting %} + +### {% linkable_title UPnP %} + Home Assistant must be on the same network as the devices for uPnP discovery to work. If running Home Assistant in a [Docker container](/docs/installation/docker/) use switch `--net=host` to put it on the host's network. -

-

+### {% linkable_title Windows %} + +#### {% linkable_title 64-bit Python %} There is currently a known issue with running this component on a 64-bit version of Python and Windows. -

-

+#### {% linkable_title Python 3.5 %} + If you are on Windows and you're using Python 3.5, download the [Netifaces](http://www.lfd.uci.edu/~gohlke/pythonlibs/#netifaces) dependency. -

-

-If you see `Not initializing discovery because could not install dependency netdisco==0.6.1` in the logs, you will need to install the `python3-dev` or `python3-devel` package on your system manually (eg. `sudo apt-get install python3-dev` or `sudo dnf -y install python3-devel`). On the next restart of home-assistant, discovery should work. If you still get an error, check if you have a compiler (`gcc`) available on your system. -

+### {% linkable_title could not install dependency netdisco %} + +If you see `Not initializing discovery because could not install dependency netdisco==0.6.1` in the logs, you will need to install the `python3-dev` or `python3-devel` package on your system manually (eg. `sudo apt-get install python3-dev` or `sudo dnf -y install python3-devel`). On the next restart of Home Assistant, the discovery should work. If you still get an error, check if you have a compiler (`gcc`) available on your system. + +### {% linkable_title DSM and Synology %} + +For DSM/Synology, install via debian-chroot [see this forum post](https://community.home-assistant.io/t/error-starting-home-assistant-on-synology-for-first-time/917/15). + +## {% linkable_title New platforms %} If you are developing a new platform, please read [how to make your platform discoverable](/developers/component_discovery/) for further details. diff --git a/source/_components/dominos.markdown b/source/_components/dominos.markdown index a7b70d7fafb..4f1d1618915 100644 --- a/source/_components/dominos.markdown +++ b/source/_components/dominos.markdown @@ -9,13 +9,16 @@ sharing: true footer: true logo: dominos.png ha_category: Other -ha_version: 0.59 +ha_iot_class: "Cloud Polling" +ha_release: 0.59 --- -The `Dominos` component allows you to order Dominos Pizza from within your Home Assistant scripts and automations. +The `dominos` component allows you to order Dominos Pizza from within your Home Assistant scripts and automations. At present, this component only supports ordering within Canada and the US. +## {% linkable_title Configuration %} + To enable the component, you need to set up your customer information and define some orders. Orders are a group of product codes. You can get these product codes by inspecting an order request from the Dominos web app, or you can [add this custom panel by following this readme](https://github.com/wardcraigj/hass-dominos-panel) to see the available product codes in a separate panel in your install. @@ -25,11 +28,11 @@ Currently, there is no support in this component for toppings, coupons or order ```yaml dominos: country_code: ca - first_name: Justin - last_name: Trudeau - email: justin.trudeau@parl.gc.ca - phone: 6139950253 - address: 24 Sussex Dr, Ottawa, ON, K1M1M4 + first_name: John + last_name: Smith + email: john.smith@example.com + phone: 123456789 + address: 24 Housten Dr, Ottawa, ON, K2M2M2 orders: - name: Medium Pan codes: diff --git a/source/_components/doorbird.markdown b/source/_components/doorbird.markdown index 0b7f1e4120a..43f30816d94 100644 --- a/source/_components/doorbird.markdown +++ b/source/_components/doorbird.markdown @@ -20,13 +20,78 @@ To connect your device, add the following to your `configuration.yaml` file: ```yaml # Example configuration.yaml entry doorbird: - host: IP_OR_HOSTNAME - username: abcdef0001 - password: xxxxxxxxxx + devices: + - host: DOORBIRD_IP_OR_HOSTNAME + username: YOUR_USERNAME + password: YOUR_PASSWORD + hass_url_override: HASS_URL + name: Front Door + - host: DOORBIRD_IP_OR_HOSTNAME + username: YOUR_USERNAME + password: YOUR_PASSWORD + name: Driveway Gate + monitored_conditions: + - doorbell + - motion ``` -Configuration variables: +{% configuration %} +devices: + description: List of doorbird devices. + required: true + type: list + keys: + host: + description: The LAN IP address or hostname of your device. You can find this by going to the [DoorBird Online check](http://www.doorbird.com/checkonline) and entering the information from the paper that was included in the box. + required: true + type: string + username: + description: The username of a non-administrator user account on the device. + required: true + type: string + password: + description: The password for the user specified. + required: true + type: string + name: + description: Custom name for this device. + required: false + type: string + hass_url_override: + description: If your DoorBird cannot connect to the machine running Home Assistant because you are using dynamic DNS or some other HTTP configuration (such as HTTPS), specify the LAN IP of the machine here to force a LAN connection. + required: false + type: string + monitored_conditions: + description: Monitor motion and/or doorbell events for this device. + required: false + type: string + keys: + doorbell: + description: Monitor doorbell events + motion: + description: Monitor motion events (Motion monitoring must be enabled on the doorstation via DoorBird app) -- **host** (*Required*): The LAN IP address or hostname of your device. You can find this by going to the [DoorBird Online check](http://www.doorbird.com/checkonline) and entering the information from the paper that was included in the box. -- **username** (*Required*): The username of a non-administrator user account on the device. -- **password** (*Required*): The password for the user specified. +{% endconfiguration %} + +The configuration above is also used by the following components: +- [Camera](../camera.doorbird) - View live and historical event based images +- [Switch](../switch.doorbird) - Enable control of relays and camera night vision + +## {% linkable_title Motion and Doorbell Events %} + +Home Assistant will fire an event any time a `monitored_condition` happens on a doorstation. Event names are created using the format `doorbird_{station}_{event}` (Examples: `doorbird_side_entry_button`, `doorbird_side_entry_motion`). You can verify the assigned event names in the Home Assistant log file. + +

+Enabling any monitored condition will delete all registered notification services on the doorstation every time Home Assistant starts. This will not affect notifications delivered by the DoorBird mobile app. +

+ +### {% linkable_title Automation Example %} +```yaml +- alias: Doorbird Ring + trigger: + platform: event + event_type: doorbird_side_entry_button + action: + service: light.turn_on + entity_id: light.side_entry_porch +``` \ No newline at end of file diff --git a/source/_components/downloader.markdown b/source/_components/downloader.markdown index 53063587d69..beec2268765 100644 --- a/source/_components/downloader.markdown +++ b/source/_components/downloader.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Downloader" -description: "Instructions how to setup the downloader component with Home Assistant." +description: "Instructions on how to setup the downloader component with Home Assistant." date: 2015-01-24 14:39 sidebar: true comments: false @@ -42,3 +42,29 @@ This will download the file from the given URL. | `subdir` | yes | Download into subdirectory of **download_dir** | | `filename` | yes | Determine the filename. | | `overwrite` | yes | Whether to overwrite the file or not, defaults to `false`. | + +### {% linkable_title Download Status Events %} + +When a download finished successfully, Home Assistant will emit a 'downloader_download_completed' event to the event bus which you can use to write automations against. +In case download failed another event 'downloader_download_failed' is emitted to indicate that the download did not complete successfully. + +Along with the event the following payload parameters are available: + +| Parameter | Description | +|-----------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| `url` | The `url` that was requested.| +| `filename` | The `name` of the file that was being downloaded.| + +#### Example Automation: + +```yaml +- alias: Download Failed Notification + trigger: + platform: event + event_type: downloader_download_failed + action: + service: persistent_notification.create + data_template: + message: "{{trigger.event.data.filename}} download failed" + title: "Download Failed" + ``` diff --git a/source/_components/dyson.markdown b/source/_components/dyson.markdown index a3d015001ce..7c0e1ca2f36 100644 --- a/source/_components/dyson.markdown +++ b/source/_components/dyson.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Dyson" -description: "Instructions how to integrate Dyson into Home Assistant." +description: "Instructions on how to integrate Dyson into Home Assistant." date: 2017-05-27 10:00 sidebar: true comments: false @@ -15,29 +15,31 @@ ha_release: 0.47 The `dyson` component is the main component to integrate all [Dyson](https://dyson.com) related platforms: [Fans](/components/fan/dyson/) and [Robot vacuum](/components/vacuum/dyson/). +## {% linkable_title Configuration %} + To enable this component, add the following lines to your `configuration.yaml`: ```yaml +# Example configuration.yaml entry dyson: - username: - password: - language: + username: YOUR_DYSON_USERNAME + password: YOUR_DYSON_PASSWORD + language: YOUR_DYSON_ACCOUNT_LANGUGAGE devices: - - device_id: # eg: Pure Cool Link device - device_ip: - - device_id: # eg: Eye 360 robot vacuum - device_ip: - ... + - device_id: DEVICE_ID_1 # eg. Serial number: XXX-XX-XXXXXXXX + device_ip: DEVICE_ID_1 + - device_id: DEVICE_ID_2 + device_ip: DEVICE_ID_2 ``` Configuration variables: -- **username** (*Required*): Dyson account username (email address) -- **password** (*Required*): Dyson account password +- **username** (*Required*): Dyson account username (email address). +- **password** (*Required*): Dyson account password. - **language** (*Required*): Dyson account language country code. Known working codes: `FR`, `NL`, `GB`, `AU`. But others codes should work. -- **devices** (*Optional*): List of devices - - **device_id** (*Required*): Device ID. Available in the mobiles applications (*Settings* page) - - **device_ip** (*Required*): Device IP address +- **devices** (*Optional*): List of devices. + - **device_id** (*Required*): Device ID. The Serial Number of the device. Found in the mobiles applications device settings page. + - **device_ip** (*Required*): Device IP address. `devices` list is optional but you'll have to provide them if discovery is not working (warnings in the logs and the devices are not available in Home Assistant web interface). *If your are using a robot vacuum (Dyson 360 Eye), discovery is not yet supported so you have to provide `devices` list.* diff --git a/source/_components/ecobee.markdown b/source/_components/ecobee.markdown index a3e6da2ceef..217922806b2 100644 --- a/source/_components/ecobee.markdown +++ b/source/_components/ecobee.markdown @@ -14,25 +14,24 @@ ha_release: 0.9 ha_iot_class: "Cloud Push" --- - The `ecobee` component lets you control a thermostats and view sensor data from [ecobee](https://ecobee.com) thermostats. You will need to obtain an API key from ecobee's [developer site](https://www.ecobee.com/developers/) to use this component. To get the key, first you need to register your thermostat which should be done as part of the ecobee installation. Once you have done that perform the following steps. -1. Click on the **Become a developer** link on the [developer site](https://www.ecobee.com/developers/). +1. Click on the **Become a developer** link on the [developer site](https://www.ecobee.com/developers/). 2. Login with your ecobee credentials. 3. Accept the SDK agreement. 4. Fill in the fields. -5. Click **save**. +5. Click **save**. Now login to the regular consumer portal, and in the hamburger menu there will be a new option **Developer**. Now we can create the Application to hook up to Home Assistant. -1. Select the Developer option. -2. Select **Create New**. -3. Give your app a name (it appears to need to be unique across all users, as I tried 'home-assistant' and it said it was already in use. Try -home-assistant) and a summary (neither of these are important as they are not used anywhere). -4. For Authorization method select **ecobee PIN**. -5. You don't need an Application Icon or Detailed Description. -6. Click **Create**. +1. Select the Developer option. +2. Select **Create New**. +3. Give your app a name (it appears to need to be unique across all users, as I tried 'home-assistant' and it said it was already in use. Try -home-assistant) and a summary (neither of these are important as they are not used anywhere). +4. For Authorization method select **ecobee PIN**. +5. You don't need an Application Icon or Detailed Description. +6. Click **Create**. Now under the Name and Summary Section you will have an API key. Copy this key and use it in you configuration section below. Click the **X** to close the Developer section. @@ -40,8 +39,8 @@ The first time you run Home Assistant with this component it will give you a PIN The PIN can be found from the Home Assistant portal on the Ecobee card or from the **configurator.ecobee** entity in states in the portal. -- If you do not have an ecobee card, you may be using groups with `default_view` that don't show the card. To get around this you can temporarily comment out the `default_view` section or add the `configurator.ecobee` component to your `default_view` and restart Home Assistant. - +- If you do not have an ecobee card, you may be using groups with `default_view` that don't show the card. To get around this you can temporarily comment out the `default_view` section or add the `configurator.ecobee` component to your `default_view` and restart Home Assistant. + Once you enter the PIN on the ecobee site, wait approximately 5 minutes and then click on the **I have authorized the app** link at the bottom of the ecobee pop-up window. If everything worked correctly, you should now be able to restart Home Assistant again to see the full ecobee card with all of the sensors populated or see the list of sensors in the developer tools. Now you can re-enable your `default_view` (if you had to disable it) and add the ecobee sensors to a group and/or view. To set it up, add the following information to your `configuration.yaml` file: @@ -61,3 +60,5 @@ Configuration variables:

+ +If for whatever reason you delete and re-create your ecobee app at ecobee.com such that your developer API key changes, you will need to delete your `/conf/ecobee.conf file`. You will also need to update the `api_key:` in the `configuration.yaml` or `secrets.yaml` file. diff --git a/source/_components/egardia.markdown b/source/_components/egardia.markdown new file mode 100644 index 00000000000..50efce55a66 --- /dev/null +++ b/source/_components/egardia.markdown @@ -0,0 +1,121 @@ +--- +layout: page +title: "Egardia" +description: "Instructions on how to setup Egardia / Woonveilig within Home Assistant." +date: 2018-03-13 09:00 +sidebar: true +comments: false +sharing: true +footer: true +ha_category: Hub +ha_release: 0.65 +logo: egardia.png +--- + +The `egardia` platform enables the ability to control an [Egardia](http://egardia.com/)/[Woonveilig](http://woonveilig.nl) control panel. These alarm panels are known under different brand names across the world, including Woonveilig in the Netherlands. This was tested on the WL-1716, GATE-01, GATE-02 and GATE-03 versions of the Egardia/Woonveilig platform. Not only will you integrate your alarm control panel, supported sensors (door contacts at this moment) will be added automatically (hidden by default). + +You will need to know the IP of your alarm panel on your local network. Test if you can login to the panel by browsing to the IP address and log in using your Egardia/Woonveilig account. + +## {% linkable_title Basic configuration %} + +To enable the integration with your alarm panel, add the following lines to your `configuration.yaml` file: + ```yaml + # Example configuration.yaml entry + egardia: + host: YOUR_HOST + username: YOUR_USERNAME + password: YOUR_PASSWORD +``` + +{% configuration %} +host: + description: The local IP address of the Egardia/Woonveilig alarm panel. + required: true + type: string +username: + description: Username for the Egardia/Woonveilig account. + required: true + type: string +password: + description: Password for Egardia/Woonveilig account. + required: true + type: string +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' +port: + description: The port of the alarm panel. + required: false + type: int + default: 80 +report_server_enabled: + description: Enable reporting by server. + required: false + type: string + default: false +report_server_port: + description: Port of the Egardia server. + required: false + type: int + default: 52010 +report_server_codes: + description: Map of list of codes for the different states. + required: false + type: map + keys: + arm: + description: List of codes for the 'arm' state. + required: false + type: list + disarm: + description: List of codes for the 'disarm' state. + required: false + type: list + armhome: + description: List of codes for the 'armhome' state. + required: false + type: list + triggered: + description: List of codes for the 'triggered' state. + required: false + type: list + ignore: + description: List of codes that will be ignored. + required: false + type: list +{% endconfiguration %} + +Note that this basic configuration will only enable you to read the armed/armed away/disarmed status of your alarm and will **not** update the status if the alarm is triggered. This is because of how Egardia built their system. The alarm triggers normally go through their servers. +You can change this, however, using the following procedure. This is a more advanced (and more useful) configuration. + +

+There seem to be multiple versions of software running on GATE-02 devices; we have received reports from GATE-02 users who successfully run this package in GATE-02 mode. Others have reported they needed to specify GATE-03 as their version to integrate their GATE-02. +

+ +## {% linkable_title Advanced configuration %} + +1. Log in to your alarm system's control panel. You will need to access http://[IP of your control panel]. You know this already since you need it in the basic configuration from above. Log in to the control panel with your Egardia/Woonveilig username and password. +2. Once logged in, go to *System Settings*, *Report* and change the Server Address for your primary server to the IP or hostname of your Home Assistant machine. You can leave the port number set to 52010 or change it to anything you like. **Make sure to change the settings of the primary server otherwise the messages will not come through. Note that this will limit (or fully stop) the number of alarm messages you will get through Egardia's / Woonveilig services.** Maybe, that is just what you want. Make sure to save your settings by selecting 'OK'. +3. The Egardia component relies on capturing the status codes that your alarm emits when something happens (status change or trigger). These codes will be unique for every situation - i.e. the code emitted by the alarm when a sensor is triggered is unique to that sensor. Also, if you have multiple users or remotes, each remote has unique codes that are emitted by the alarm when status is changed using that remote or by that user. For the Egardia component to work correctly you will need to capture the codes. To do this, on your Home Assistant machine run `$ sudo python3 egardiaserver.py`. Refer to the [python-egardia repository](https://github.com/jeroenterheerdt/python-egardia) for detailed documentation on parameters. This will receive status codes from your alarm control panel and display them. Record the codes shown as well as the status they relate to (see step 4 below). Make sure to change the status of your alarm to all states (disarm, arm, home) by all means possible (all users, remotes, web login, app) as well as trigger the alarm in all ways possible to get 100% coverage of all the codes the alarm system generates. You will need to run this script once and stop it once you have captured all the possible codes. Also, if you ever add users, remotes or sensors to your alarm system, make sure to re-run the script to capture the extra codes so you can update your configuration (see step 4 below). **For comfort, before triggering the alarm it might be good to disable the siren temporarily (can be done in Panel Settings).** +4. Once you have the codes, update your `configuration.yaml`: + ```yaml + # Example configuration.yaml entry + egardia: + host: YOUR_HOST + username: YOUR_USERNAME + password: YOUR_PASSWORD + report_server_enabled: True + report_server_port: PORT_OF_EGARDIASERVER (optional, defaults to 52010) + report_server_codes: + arm: XXXXXXXXXXXXXXXX, XXXXXXXXXXXXXXXX + disarm: XXXXXXXXXXXXXXXX, XXXXXXXXXXXXXXXX + armhome: XXXXXXXXXXXXXXXX + triggered: XXXXXXXXXXXXXXXX, XXXXXXXXXXXXXXXX, XXXXXXXXXXXXXXXX + ignore: XXXXXXXXXXXXXXXX + ``` + +Note that for all code groups (*arm*,*disarm*, etc) multiple codes can be entered since each sensor triggers with a different code and each user of the system has its own arm and disarm codes. Also note that your system will do regular system checks which will be reported as well. Since Home Assistant provides no way of handling them properly, you can enter those codes as *ignore* (again, multiple codes can be used here). The egardia component will ignore these codes and continue returning the old status if it receives any of the codes that are listed as ignore. This is useful for example when you have armed your alarm at night: normally a system check will occur at least once during the night and if that code is not specified anywhere Home Assistant will set the status of the alarm to its default, which is unarmed. This is in fact wrong. Listing the code as ignore changes this behavior and Home Assistant will continue to show the status the alarm is in (disarm, arm, home, triggered) even when system checks occur. + +5. Test your setup and enjoy. The component will update if the alarm status changes, including triggers. You can use this to build your own automations and send notifications as you wish. *Note*: previous versions required a separate egardiaserver to be set up. This is no longer necessary and corresponding system services can be removed (using systemctl). diff --git a/source/_components/eight_sleep.markdown b/source/_components/eight_sleep.markdown index 0d730e2f7ab..3a455d4ab50 100644 --- a/source/_components/eight_sleep.markdown +++ b/source/_components/eight_sleep.markdown @@ -15,6 +15,8 @@ ha_iot_class: "Cloud Polling" The `eight_sleep` component allows Home Assistant to fetch data from your [Eight Sleep](https://eightsleep.com/) smart cover or mattress. +## {% linkable_title Configuration %} + It's setup utilizing 'Sensor' components to convey the current state of your bed and results of your sleep sessions and a 'Binary Sensor' component to indicate your presence in the bed. A service is also provided to set the heating level and duration of the bed. You must have at least two sleep sessions recorded in the Eight Sleep app prior to setting up the Home Assistant component. @@ -24,15 +26,25 @@ To get started add the following information to your `configuration.yaml` file: ```yaml # Example configuration.yaml entry eight_sleep: - username: "user@email.com" - password: "password" + username: YOUR_E_MAIL_ADDRESS + password: YOUR_PASSWORD ``` -Configuration variables: - -- **username** (*Required*): The email address associated with your Eight Sleep account. -- **password** (*Required*): The password associated with your Eight Sleep account. -- **partner** (*Optional*): Default is False. Defines if you'd like to fetch data for both sides of the bed. +{% configuration %} +username: + description: The email address associated with your Eight Sleep account. + required: true + type: string +password: + description: The password associated with your Eight Sleep account. + required: true + type: string +password: + description: Defines if you'd like to fetch data for both sides of the bed. + required: false + type: string + default: False +{% endconfiguration %} ### {% linkable_title Supported features %} diff --git a/source/_components/emulated_hue.markdown b/source/_components/emulated_hue.markdown index 1079a0f96b6..763baa46730 100644 --- a/source/_components/emulated_hue.markdown +++ b/source/_components/emulated_hue.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Emulated Hue Bridge" -description: "Instructions how to emulated Hue Bridge within Home Assistant." +description: "Instructions on how to emulated Hue Bridge within Home Assistant." date: 2016-08-26 08:00 sidebar: true comments: false @@ -13,13 +13,13 @@ ha_release: 0.27 ha_iot_class: "Local Push" --- -

-At this time `emulated_hue` doesn't appear to be working for new Google Home users. +

+Be aware that `emulated_hue` doesn't work for new **Google Home** users. If you're a new user of Google Home, use the [Google Assistant component](/components/google_assistant/).

-The `emulated_hue` component provides a virtual Philips Hue bridge, written entirely in software, that allows services that work with the Hue API to interact with Home Assistant -entities. The driving use case behind this functionality is to allow Home Assistant to work with an Amazon Echo or Google Home with no set up cost outside of configuration changes. -The virtual bridge has the ability to turn entities on or off, or change the brightness of dimmable lights. The volume level of media players can be controlled as brightness. +The `emulated_hue` component provides a virtual Philips Hue bridge, written entirely in software, which allows services that work with the Hue API to interact with Home Assistant +entities. The driving use case behind for functionality is to allow Home Assistant to work with an Amazon Echo or Google Home with no setup cost outside of configuration changes. +The virtual bridge can turn entities on/off or change the brightness of dimmable lights. The volume level of media players can be controlled as brightness.

A physical Hue Bridge is required for Philips Hue lights to function - this virtual bridge will not replace a physical bridge. Instead, it allows Home Assistant to represent non-Philips Hue devices to Amazon Echo as Philips Hue devices, which Amazon Echo can control with built-in support. @@ -29,6 +29,10 @@ A physical Hue Bridge is required for Philips Hue lights to function - this virt It is recommended to assign a static IP address to the computer running Home Assistant. This is because the Amazon Echo discovers devices by IP addresses, and if the IP changes, the Echo won't be able to control it. This is easiest done from your router, see your router's manual for details.

+

+Both Google Home and Alexa use the device they were initially set up with for communication with emulated_hue. In other words: if you remove/replace this device you will also break emulated_hue. +

+ ### {% linkable_title Configuration %} To enable the emulated Hue bridge, add one of the following configs to your `configuration.yaml` file: @@ -47,14 +51,14 @@ emulated_hue: Configuration variables: -- **type** (*Optional*): The type of assistant who we are emulated for. Either `alexa` or `google_home`, defaults to `google_home`. **This configuration option is deprecated and will be removed in a future release. It is no longer necessary to define type.** +- **type** (*Optional*): The type of assistant which we are emulating. Either `alexa` or `google_home`, defaults to `google_home`. **This configuration option is deprecated and will be removed in a future release. It is no longer necessary to define type.** - **host_ip** (*Optional*): The IP address that your Home Assistant installation is running on. If you do not specify this option, the component will attempt to determine the IP address on its own. - **listen_port** (*Optional*): The port the Hue bridge API web server will run on. If not specified, this defaults to 8300. This can be any free port on your system. -- **advertise_ip** (*Optional*): If you need to override the IP address used for UPNP discovery. (For example, using network isolation in Docker) -- **advertise_port** (*Optional*): If you need to specifically override the advertised UPNP port. +- **advertise_ip** (*Optional*): If you need to override the IP address used for UPnP discovery. (For example, using network isolation in Docker) +- **advertise_port** (*Optional*): If you need to specifically override the advertised UPnP port. -- **upnp_bind_multicast** (*Optional*): Whether or not to bind the UPNP (SSDP) listener to the multicast address (239.255.255.250) or instead to the (unicast) host_ip address specified above (or automatically determined). The default is true, which will work for most situations. In special circumstances, like running in a FreeBSD or FreeNAS jail, you may need to disable this. +- **upnp_bind_multicast** (*Optional*): Whether or not to bind the UPnP (SSDP) listener to the multicast address (239.255.255.250) or instead to the (unicast) host_ip address specified above (or automatically determined). The default is true, which will work for most situations. In special circumstances, like running in a FreeBSD or FreeNAS jail, you may need to disable this. - **off_maps_to_on_domains** (*Optional*): The domains that maps an "off" command to an "on" command. @@ -75,6 +79,8 @@ Configuration variables: - `media_player` - `fan` +- **entities** (*Optional*): Customization for entities. + A full configuration sample looks like the one below. ```yaml @@ -90,26 +96,21 @@ emulated_hue: expose_by_default: true exposed_domains: - light -``` - -With additional customization you will be able to specify the behavior of the existing entities. - -```yaml -# Example customization -homeassistant: - customize: + entities: light.bedroom_light: - # Don't allow light.bedroom_light to be controlled by the emulated Hue bridge - emulated_hue_hidden: true - light.office_light: - # Address light.office_light as "back office light" - emulated_hue_name: "back office light" + name: "Bedside Lamp" + light.ceiling_lights: + hidden: true ``` -The following are attributes that can be applied in the `customize` section: +The following are attributes that can be applied in the `entities` section: -- **emulated_hue_hidden** (*Optional*): Whether or not the entity should be exposed by the emulated Hue bridge. Adding `emulated_hue_hidden: false` will expose the entity to Alexa. The default value for this attribute is controlled by the `expose_by_default` option. -- **emulated_hue_name** (*Optional*): The name that the emulated Hue will use. The default for this is the entity's friendly name. +- **name** (*Optional*): The name that the emulated Hue will use. The default for this is the entity's friendly name. +- **hidden** (*Optional*): Whether or not the emulated Hue bridge should expose the entity. Adding `hidden: false` will expose the entity to Alexa. The default value for this attribute is controlled by the `expose_by_default` option. + +

+These attributes used to be found under the `customize` section of `homeassistant`, however, they have now been moved to `entities`. Emulated Hue configuration under `homeassistant.customize` will be deprecated in the near future. +

### {% linkable_title Troubleshooting %} @@ -118,14 +119,14 @@ You can verify that the `emulated_hue` component has been loaded and is respondi - `http://:8300/description.xml` - This URL should return a descriptor file in the form of an XML file. - `http://:8300/api/pi/lights` - This will return a list of devices, lights, scenes, groups, etc.. that `emulated_hue` is exposing to Alexa. -For Google Home, verify that the URLs above are using port 80, rather than port 8300 (i.e. `http://:80/description.xml`). +For Google Home, verify that the URLs above are using port 80, rather than port 8300 (i.e. `http://:80/description.xml`). -An additional step is required to run Home Assistant as non-root user and use port 80 when using the AiO script. Execute the following command to allow `emulated_hue` to use port 80 as non-root user. +An additional step is required to run Home Assistant as a non-root user and use port 80 when using the AiO script. Execute the following command to allow `emulated_hue` to use port 80 as a non-root user. ```bash sudo setcap 'cap_net_bind_service=+ep' /srv/homeassistant/homeassistant_venv/bin/python3 ``` -Please note that your path may be different depending on your installation method. For example, if you followed the [Virtualenv instructions](https://home-assistant.io/docs/installation/virtualenv/), your path will be `/srv/homeassistant/bin/python3`. +Please note that your path may be different depending on your installation method. For example, if you followed the [Virtualenv instructions](/docs/installation/virtualenv/), your path will be `/srv/homeassistant/bin/python3`. ### {% linkable_title License %} diff --git a/source/_components/enocean.markdown b/source/_components/enocean.markdown index 3a10858445e..4e38d204446 100644 --- a/source/_components/enocean.markdown +++ b/source/_components/enocean.markdown @@ -13,7 +13,7 @@ ha_release: 0.21 ha_iot_class: "Local Push" --- -The [EnOcean](https://en.wikipedia.org/wiki/EnOcean) standard is supported by many different vendors. There are switches and sensors of many different kinds, and typically they employ energy harvesting to get power such that no batteries are unnecessary. +The [EnOcean](https://en.wikipedia.org/wiki/EnOcean) standard is supported by many different vendors. There are switches and sensors of many different kinds, and typically they employ energy harvesting to get power such that no batteries are necessary. The `enocean` component adds support for some of these devices. You will need a controller like the [USB300](https://www.enocean.com/en/enocean_modules/usb-300-oem/) in order for it to work. diff --git a/source/_components/envisalink.markdown b/source/_components/envisalink.markdown index 02d0746982c..57deb9f53fb 100644 --- a/source/_components/envisalink.markdown +++ b/source/_components/envisalink.markdown @@ -13,7 +13,7 @@ ha_release: 0.23 ha_iot_class: "Local Push" --- -The `envisalink` component will allow Home Assistant users who own either a DSC or Honeywell alarm panel to leverage their alarm system and it's sensors to provide Home Assistant with rich information about their homes. Connectivity between Home Assistant and the alarm panel is accomplished through a device produced by Eyez On, known as the Envisalink. The Envisalink evl3 and evl4 boards provide a TCP/IP interface to the alarm panel, where it emulates an alarm keypad. This board also exposes a raw TCP/IP based API, upon which this component is built. Currently, the Envisalink version 4 is the latest model. This component supports both the evl3 and the evl4. +The `envisalink` component will allow Home Assistant users who own either a DSC or Honeywell alarm panel to leverage their alarm system and its sensors to provide Home Assistant with rich information about their homes. Connectivity between Home Assistant and the alarm panel is accomplished through a device produced by Eyez On, known as the Envisalink. The Envisalink evl3 and evl4 boards provide a TCP/IP interface to the alarm panel, where it emulates an alarm keypad. This board also exposes a raw TCP/IP based API, upon which this component is built. Currently, the Envisalink version 4 is the latest model. This component supports both the evl3 and the evl4. Please visit the [eyezon website](http://www.eyezon.com/) for further information about the evl3 and evl4 boards. diff --git a/source/_components/eufy.markdown b/source/_components/eufy.markdown new file mode 100644 index 00000000000..60ec2a470dd --- /dev/null +++ b/source/_components/eufy.markdown @@ -0,0 +1,54 @@ +--- +layout: page +title: "Eufy" +description: "Instructions on how to integrate Eufy devices into Home Assistant." +date: 2018-04-09 19:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: eufy.png +ha_category: Hub +ha_release: 0.68 +--- + +The `eufy` component is the main component to integrate various [eufy](https://www.eufylife.com/) devices with Home Assistant. + +Supported devices will be discovered after the `eufy` component is configured: + +```yaml +# Example configuration.yaml entry +eufy: + username: testuser@domain + password: p4ssw0rd +``` + +where username and password are the ones configured in the EufyHome app. Alternately, Eufy devices that are not discoverable can be statically configured. + +```yaml +eufy: + devices: + - address: 192.168.1.10 + access_token: 1234567890abcdef + type: T1012 + name: Smart Light + - address: 192.168.1.11 + access_token: abcdef1234567890 + type: T1201 + name: Smart Switch +``` + +access_token can be obtained by running: + +``` +curl -H "Content-Type: application/json" -d '{"client_id":"eufyhome-app", "client_Secret":"GQCpr9dSp3uQpsOMgJ4xQ", "email":"USERNAME", "password":"PASSWORD"}' https://home-api.eufylife.com/v1/user/email/login | jq +``` + +replacing USERNAME and PASSWORD with the Eufy username and password. This will give an access_token. Then run: + +``` +curl -H token:TOKEN -H category:Home https://home-api.eufylife.com/v1/device/list/devices-and-groups | jq +``` + +replacing TOKEN with the access_token from the previous command. This will provide the local_code for each device. + diff --git a/source/_components/fan.comfoconnect.markdown b/source/_components/fan.comfoconnect.markdown index d24d4eb1845..f1ac6f944f3 100644 --- a/source/_components/fan.comfoconnect.markdown +++ b/source/_components/fan.comfoconnect.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Zehnder ComfoAir Q Ventilation fans" -description: "Instructions how to integrate Zehnder ComfoAir Q350/450/600 fans into Home Assistant." +description: "Instructions on how to integrate Zehnder ComfoAir Q350/450/600 fans into Home Assistant." date: 2017-06-28 18:00 sidebar: true comments: false diff --git a/source/_components/fan.dyson.markdown b/source/_components/fan.dyson.markdown index e827c7ab2cb..d1ae60c6381 100644 --- a/source/_components/fan.dyson.markdown +++ b/source/_components/fan.dyson.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Dyson Purifier Fan" -description: "Instructions how to setup the Dyson Purifier fans within Home Assistant." +description: "Instructions on how to setup the Dyson Purifier fans within Home Assistant." date: 2017-05-27 10:00 sidebar: true comments: false diff --git a/source/_components/fan.insteon_hub.markdown b/source/_components/fan.insteon_hub.markdown deleted file mode 100644 index 364b94fa40c..00000000000 --- a/source/_components/fan.insteon_hub.markdown +++ /dev/null @@ -1,17 +0,0 @@ ---- -layout: page -title: "Insteon Hub Fan" -description: "Instructions how to setup the Insteon Hub Fans within Home Assistant." -date: 2017-08-26 08:00 -sidebar: true -comments: false -sharing: true -footer: true -logo: insteon.png -ha_category: Fan -ha_release: 0.30 ---- - -The `insteon_hub` fan component lets you control your fans connected to an [Insteon Hub](http://www.insteon.com/insteon-hub/) with Home Assistant. - -To get your Insteon Hub fan working with Home Assistant, follow the instructions for the general [Insteon Hub component](/components/insteon_hub/). diff --git a/source/_components/fan.insteon_local.markdown b/source/_components/fan.insteon_local.markdown index 8476fc43d06..69a2249ff9a 100644 --- a/source/_components/fan.insteon_local.markdown +++ b/source/_components/fan.insteon_local.markdown @@ -1,7 +1,7 @@ --- layout: page -title: "Insteon (Local) Fan" -description: "Instructions how to setup the Insteon Hub Fans locally within Home Assistant." +title: "Insteon (local) Fan" +description: "Instructions on how to setup the Insteon Hub Fans locally within Home Assistant." date: 2017-04-06 11:00 sidebar: true comments: false @@ -9,26 +9,10 @@ sharing: true footer: true logo: insteon.png ha_category: Fan -ha_version: 0.48 +ha_release: 0.48 +redirect_from: /components/fan.insteon_hub/ --- -The `insteon_local` fan component lets you control your fan connected to an [Insteon Hub](http://www.insteon.com/insteon-hub/) with Home Assistant. - -To integrate add a fan, configure your hub Insteon(local) with Home Assistant, add the following section to your `configuration.yaml` file: - -```yaml -# Example configuration.yaml platform entry -insteon_local: - host: YOUR HUB IP - username: YOUR HUB USERNAME - password: YOUR HUB PASSWORD - timeout: 10 - port: 25105 -``` - -To add fans to your set-up, add the platform to your light configuration: -```yaml -fan: - - platform: insteon_local -``` +The `insteon_local` fan component lets you control your fans connected to an [Insteon Hub](http://www.insteon.com/insteon-hub/) with Home Assistant. +To get your Insteon fans working with Home Assistant, follow the instructions for the general [Insteon local component](/components/insteon_local/). The fans will be automatically discovered and added to Home Assistant. The device names will be the Insteon address of the fans. diff --git a/source/_components/fan.insteon_plm.markdown b/source/_components/fan.insteon_plm.markdown new file mode 100644 index 00000000000..0c4478778e3 --- /dev/null +++ b/source/_components/fan.insteon_plm.markdown @@ -0,0 +1,16 @@ +--- +layout: page +title: "Insteon PLM Fan" +description: "Instructions on how to setup the Insteon PLM Fans locally within Home Assistant." +date: 2017-02-19 17:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: insteon.png +ha_category: Fan +ha_iot_class: "Local Push" +ha_release: 0.65 +--- + +The `insteon_plm` fan platform lets you control your [FanLinc](https://www.smarthome.com/fanlinc-insteon-2475f-ceiling-fan-and-light-controller-fixture-module-dual-band.html) through an INSTEON PowerLinc Modem (PLM) device connected directly to your system on a USB or serial port. To add support, set up the primary [insteon_plm](/components/insteon_plm/) component. diff --git a/source/_components/fan.isy994.markdown b/source/_components/fan.isy994.markdown index 6b9e55f2895..4c47e76fc40 100644 --- a/source/_components/fan.isy994.markdown +++ b/source/_components/fan.isy994.markdown @@ -1,7 +1,7 @@ --- layout: page title: "ISY994 Fan" -description: "Instructions how to integrate ISY994 fans into Home Assistant." +description: "Instructions on how to integrate ISY994 fans into Home Assistant." date: 2016-09-03 23:00 sidebar: true comments: false diff --git a/source/_components/fan.markdown b/source/_components/fan.markdown index c196d9f7705..aac9c8c7636 100644 --- a/source/_components/fan.markdown +++ b/source/_components/fan.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Fan" -description: "Instructions how to setup Fan devices within Home Assistant." +description: "Instructions on how to setup Fan devices within Home Assistant." date: 2016-08-26 19:00 sidebar: true comments: false diff --git a/source/_components/fan.mqtt.markdown b/source/_components/fan.mqtt.markdown index 82c5193ba30..45fa55d41bc 100644 --- a/source/_components/fan.mqtt.markdown +++ b/source/_components/fan.mqtt.markdown @@ -1,7 +1,7 @@ --- layout: page title: "MQTT Fan" -description: "Instructions how to integrate MQTT fans into Home Assistant." +description: "Instructions on how to integrate MQTT fans into Home Assistant." date: 2016-08-27 09:00 sidebar: true comments: false @@ -15,6 +15,8 @@ ha_iot_class: depends The `mqtt` fan platform lets you control your MQTT enabled fans. +## {% linkable_title Configuration %} + In an ideal scenario, the MQTT device will have a `state_topic` to publish state changes. If these messages are published with a `RETAIN` flag, the MQTT fan will receive an instant state update after subscription and will start with the correct state. Otherwise, the initial state of the fan will be `false` / `off`. When a `state_topic` is not available, the fan will work in optimistic mode. In this mode, the fan will immediately change state after every command. Otherwise, the fan will wait for state confirmation from the device (message from `state_topic`). @@ -24,36 +26,123 @@ Optimistic mode can be forced even if a `state_topic` is available. Try to enabl To enable MQTT fans in your installation, add the following to your `configuration.yaml` file: ```yaml -# Example configuration.yml entry +# Example configuration.yaml entry fan: - platform: mqtt command_topic: "bedroom_fan/on/set" ``` -Configuration variables: - -- **command_topic** (*Required*): The MQTT topic to publish commands to change the fan state. -- **state_topic** (*Optional*): The MQTT topic subscribed to receive state updates. -- **name** (*Optional*): The name of the fan. Default is 'MQTT Fan'. -- **state_topic** (*Optional*): The MQTT topic subscribed to receive state updates. -- **payload_on** (*Optional*): The payload that represents the running state. Default is "ON". -- **payload_off** (*Optional*): The payload that represents the stop state. Default is "OFF". -- **state_value_template** (*Optional*): Defines a [template](/docs/configuration/templating/#processing-incoming-data) to extract a value from the state. -- **qos** (*Optional*): The maximum QoS level of the state topic. Default is 0 and will also be used to publishing messages. -- **optimistic** (*Optional*): Flag that defines if lock works in optimistic mode. Default is `true` if no state topic defined, else `false`. -- **retain** (*Optional*): If the published message should have the retain flag on or not. -- **oscillation_state_topic** (*Optional*): The MQTT topic subscribed to receive oscillation state updates. -- **oscillation_command_topic** (*Optional*): The MQTT topic to publish commands to change the oscillation state. -- **payload_oscillation_on** (*Optional*): The payload that represents the oscillation on state. Default is "oscillate_on". -- **payload_oscillation_off** (*Optional*): The payload that presents the oscillation off state. Default is "oscillate_off". -- **oscillation_value_template** (*Optional*): Defines a [template](/docs/configuration/templating/#processing-incoming-data) to extract a value from the oscillation. -- **speed_state_topic** (*Optional*): The MQTT topic subscribed to receive speed state updates. -- **speed_command_topic** (*Optional*): The MQTT topic to publish commands to change speed state. -- **payload_low_speed** (*Optional*): The payload that represents the fan's low speed. -- **payload_medium_speed** (*Optional*): The payload that represents the fan's medium speed. -- **payload_high_speed** (*Optional*): The payload that represents the fan's high speed. -- **speed_value_template** (*Optional*): Defines a [template](/docs/configuration/templating/#processing-incoming-data) to extract a value from the speed payload. -- **speeds** array (*Optional*): Valid entries for the list are `off`, `low`, `medium`, and `high`. +{% configuration %} +name: + description: The name of the fan. + required: false + type: string + default: MQTT Fan +command_topic: + description: The MQTT topic to publish commands to change the fan state. + required: true + type: string +state_topic: + description: The MQTT topic subscribed to receive state updates. + required: false + type: string +payload_on: + description: The payload that represents the running state. + required: false + type: string + default: ON +payload_off: + description: The payload that represents the stop state. + required: false + type: string + default: OFF +state_value_template: + description: "Defines a [template](/docs/configuration/templating/#processing-incoming-data) to extract a value from the state." + required: false + type: string +qos: + description: The maximum QoS level of the state topic. + required: false + type: integer + default: 0 +optimistic: + description: Flag that defines if lock works in optimistic mode + required: false + type: boolean + default: "`true` if no state topic defined, else `false`." +retain: + description: If the published message should have the retain flag on or not. + required: false + type: boolean + default: true +oscillation_state_topic: + description: The MQTT topic subscribed to receive oscillation state updates. + required: false + type: string +oscillation_command_topic: + description: The MQTT topic to publish commands to change the oscillation state. + required: false + type: string +payload_oscillation_on: + description: The payload that represents the oscillation on state. + required: false + type: string + default: oscillate_on +payload_oscillation_off: + description: The payload that represents the oscillation off state. + required: false + type: string + default: oscillate_off +oscillation_value_template: + description: "Defines a [template](/docs/configuration/templating/#processing-incoming-data) to extract a value from the oscillation." + required: false + type: string +speed_state_topic: + description: The MQTT topic subscribed to receive speed state updates. + required: false + type: string +speed_command_topic: + description: The MQTT topic to publish commands to change speed state. + required: false + type: string +payload_low_speed: + description: The payload that represents the fan's low speed. + required: false + type: string + default: low +payload_medium_speed: + description: The payload that represents the fan's medium speed. + required: false + type: string + default: medium +payload_high_speed: + description: The payload that represents the fan's high speed. + required: false + type: string + default: high +speed_value_template: + description: "Defines a [template](/docs/configuration/templating/#processing-incoming-data) to extract a value from the speed payload." + required: false + type: string +speeds: + description: "List of speeds this fan is capable of running at. Valid entries are `off`, `low`, `medium`, and `high`." + required: false + type: string list +availability_topic: + description: The MQTT topic subscribed to receive availability (online/offline) updates. + required: false + type: string +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 +{% endconfiguration %}

Make sure that your topics match exactly. `some-topic/` and `some-topic` are different topics. @@ -68,7 +157,7 @@ In this section you find some real life examples of how to use this fan. The example below shows a full configuration for a MQTT fan. ```yaml -# Example configuration.yml entry +# Example configuration.yaml entry fan: - platform: mqtt name: "Bedroom Fan" diff --git a/source/_components/fan.template.markdown b/source/_components/fan.template.markdown new file mode 100644 index 00000000000..974eb7508e4 --- /dev/null +++ b/source/_components/fan.template.markdown @@ -0,0 +1,109 @@ +--- +layout: page +title: "Template Fan" +description: "Instructions how to setup the Template fans within Home Assistant." +date: 2018-05-03 09:00 +sidebar: true +comments: false +sharing: true +footer: true +ha_category: Fan +ha_release: 0.69 +ha_iot_class: "Local Push" +logo: home-assistant.png +--- + +The `template` platform creates fans that combine components and provides the +ability to run scripts or invoke services for each of the turn_on, turn_off, set_speed, +set_oscillating, and set_direction commands of a fan. + +To enable Template Fans in your installation, add the following to your +`configuration.yaml` file: + +{% raw %} +```yaml +# Example configuration.yaml entry +fan: + - platform: template + fans: + bedroom_fan: + friendly_name: "Bedroom fan" + value_template: "{{ states('input_boolean.state') }}" + speed_template: "{{ states('input_select.speed') }}" + oscillating_template: "{{ states('input_select.osc') }}" + direction_template: "{{ states('input_select.direction') }}" + turn_on: + service: script.fan_on + turn_off: + service: script.fan_off + set_speed: + service: script.fan_speed + data_template: + speed: "{{ speed }}" + set_oscillating: + service: script.fan_oscillating + data_template: + oscillating: "{{ oscillating }}" + set_direction: + service: script.fan_direction + data_template: + direction: "{{ direction }}" + speeds: + - '1' + - '2' + - '3' +``` +{% endraw %} + +{% configuration %} + fans: + description: List of your fans. + required: true + type: map + keys: + friendly_name: + description: Name to use in the frontend. + required: false + type: string + value_template: + description: "Defines a template to get the state of the fan. Valid value: 'on'/'off'" + required: true + type: template + speed_template: + description: Defines a template to get the speed of the fan. + required: false + type: template + oscillating_template: + description: "Defines a template to get the osc state of the fan. Valid value: True/False" + required: false + type: template + direction_template: + description: "Defines a template to get the direction of the fan. Valid value: 'forward'/'reverse'" + required: false + type: template + turn_on: + description: Defines an action to run when the fan is turned on. + required: true + type: action + turn_off: + description: Defines an action to run when the fan is turned off. + required: true + type: action + set_speed: + description: Defines an action to run when the fan is given a speed command. + required: false + type: action + set_oscillating: + description: Defines an action to run when the fan is given an osc state command. + required: false + type: action + set_direction: + description: Defines an action to run when the fan is given a direction command. + required: false + type: action + speeds: + description: List of speeds the fan is capable of running at. + required: false + type: string list + default: ['low', 'medium', 'high'] +{% endconfiguration %} diff --git a/source/_components/fan.tuya.markdown b/source/_components/fan.tuya.markdown new file mode 100644 index 00000000000..273a6f00729 --- /dev/null +++ b/source/_components/fan.tuya.markdown @@ -0,0 +1,23 @@ +--- +layout: page +title: "Tuya Fan" +description: "Instructions on how to setup the Tuya fan within Home Assistant." +date: 2018-07-17 09:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: tuya.png +ha_category: Fan +ha_iot_class: "Cloud Polling" +ha_release: 0.75 +--- + + +The `tuya` fan platform allows you to control your [Tuya Smart](https://www.tuya.com) fan. + +The platform supports most kinds of Tuya fans. + +

+Full configuration details can be found on the main [Tuya component](/components/tuya/) page. +

\ No newline at end of file diff --git a/source/_components/fan.velbus.markdown b/source/_components/fan.velbus.markdown index ff0652f233f..e1686e65642 100644 --- a/source/_components/fan.velbus.markdown +++ b/source/_components/fan.velbus.markdown @@ -15,27 +15,48 @@ ha_release: "0.50" The `velbus` fan allows you to control [Velbus](http://www.velbus.eu) connected fans. +## {% linkable_title Configuration %} + To use your Velbus fans in your installation, add the following to your `configuration.yaml` file: ```yaml # Example configuration.yaml entry - fan: - platform: velbus devices: - - name: Fan 1 - module: 0xda - channel_low: 4 - channel_medium: 3 - channel_high: 2 + - name: Fan 1 + module: 0xda + channel_low: 4 + channel_medium: 3 + channel_high: 2 ``` -Configuration variables: -- **devices** array (*Required*): The array contains the fans to configure - - **name** (*Required*): Name of the fan. - - **module** (*Required*): The hexadecimal module address - - **channel_low** (*Required*): The channel number in the module for low-speed. - - **channel_medium** (*Required*): The channel number in the module for medium-speed. - - **channel_high** (*Required*): The channel number in the module for high-speed. +{% configuration %} +devices: + description: The list contains the fans to configure. + required: true + type: map + keys: + name: + description: Name to use in the frontend. + required: true + type: string + module: + description: The hexadecimal module address. + required: true + type: string + channel_low: + description: The channel number in the module for low-speed. + required: true + type: string + channel_medium: + description: The channel number in the module for medium-speed. + required: true + type: string + channel_high: + description: The channel number in the module for high-speed. + required: true + type: string +{% endconfiguration %} For hub configuration, see [the Velbus component](/components/velbus/). diff --git a/source/_components/fan.wink.markdown b/source/_components/fan.wink.markdown index 23369dfad2e..129db4b4693 100644 --- a/source/_components/fan.wink.markdown +++ b/source/_components/fan.wink.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Wink Fan" -description: "Instructions how to setup the Wink fans within Home Assistant." +description: "Instructions on how to setup the Wink fans within Home Assistant." date: 2017-01-14 12:00 sidebar: true comments: false diff --git a/source/_components/fan.xiaomi_miio.markdown b/source/_components/fan.xiaomi_miio.markdown index 7acf1291e45..de4a07316da 100644 --- a/source/_components/fan.xiaomi_miio.markdown +++ b/source/_components/fan.xiaomi_miio.markdown @@ -1,45 +1,171 @@ --- layout: page -title: "Xiaomi Air Purifier 2" -description: "Instructions how to integrate your Xiaomi Air Purifier 2 within Home Assistant." +title: "Xiaomi Air Purifier" +description: "Instructions on how to integrate your Xiaomi Air Purifier and Xiaomi Air Humidifier within Home Assistant." date: 2017-10-13 12:35 sidebar: true comments: false sharing: true footer: true logo: xiaomi.png -ha_category: Switch -ha_version: 0.57 +ha_category: Fan ha_iot_class: "Local Polling" +ha_release: 0.57 --- -The `xiaomi_miio` fan platform allows you to control the Xiaomi Air Purifier 2. The Air Purifier Pro isn't supported right now. +The `xiaomi_miio` fan platform allows you to control the Xiaomi Air Purifier and Xiaomi Air Humidifier. -Currently, the supported features are +## Features -* On, Off -* Operation modes (auto, silent, favorite, idle) -* Buzzer (on, off) -* LED (on, off), LED brightness (bright, dim, off) -* Favorite Level -* States - - power - - aqi - - humidity +### Air Purifier 2 et al. + +- Power (on, off) +- Operation modes (auto, silent, favorite, idle) +- Buzzer (on, off) +- Child lock (on, off) +- LED (on, off), LED brightness (bright, dim, off) +- Favorite Level (0...16) +- Attributes + - model - temperature + - humidity + - aqi + - mode + - filter_hours_used + - filter_life_remaining + - favorite_level + - child_lock + - led + - motor_speed + - average_aqi + - purify_volume + - learn_mode + - sleep_time + - sleep_mode_learn_count + - extra_features + - turbo_mode_supported + - auto_detect + - use_time + - button_pressed + - buzzer + - led_brightness + - sleep_mode + +### Air Purifier Pro (zhimi.airpurifier.v6) + +- Power (on, off) +- Operation modes (auto, silent, favorite) +- Child lock (on, off) +- LED (on, off) +- Favorite Level (0...16) +- Attributes + - model + - temperature + - humidity + - aqi + - mode + - filter_hours_used + - filter_life_remaining + - favorite_level + - child_lock + - led + - motor_speed + - average_aqi + - purify_volume + - learn_mode + - sleep_time + - sleep_mode_learn_count + - extra_features + - turbo_mode_supported + - auto_detect + - use_time + - button_pressed + - filter_rfid_product_id + - filter_rfid_tag + - filter_type + - illuminance + - motor2_speed + - volume + +### Air Purifier V3 (zhimi.airpurifier.v3) + +- Power (on, off) +- Operation modes (auto, silent, favorite, idle, medium, high, strong) +- Child lock (on, off) +- LED (on, off) +- Attributes + - model + - aqi - mode - led - - led_brightness - buzzer - child_lock - - brightness - - favorite_level - - filter1_life - - f1_hour_used + - illuminance + - filter_hours_used + - filter_life_remaining + - motor_speed + - average_aqi + - volume + - motor2_speed + - filter_rfid_product_id + - filter_rfid_tag + - filter_type + - purify_volume + - learn_mode + - sleep_time + - sleep_mode_learn_count + - extra_features + - auto_detect - use_time - - motor1_speed + - button_pressed -## {% linkable_title Setup %} +### Air Humidifier (zhimi.humidifier.v1) + +- On, Off +- Operation modes (silent, medium, high) +- Buzzer (on, off) +- Child lock (on, off) +- LED brightness (bright, dim, off) +- Target humidity (30, 40, 50, 60, 70, 80) +- Attributes + - model + - temperature + - humidity + - mode + - buzzer + - child_lock + - trans_level + - target_humidity + - led_brightness + - button_pressed + - use_time + - hardware_version + +### Air Humidifier CA (zhimi.humidifier.ca1) + +- On, Off +- Operation modes (silent, medium, high, auto) +- Buzzer (on, off) +- Child lock (on, off) +- LED brightness (bright, dim, off) +- Target humidity (30, 40, 50, 60, 70, 80) +- Dry mode (on, off) +- Attributes + - model + - temperature + - humidity + - mode + - buzzer + - child_lock + - trans_level + - target_humidity + - led_brightness + - button_pressed + - use_time + - hardware_version + - speed + - depth + - dry Please follow the instructions on [Retrieving the Access Token](/components/vacuum.xiaomi_miio/#retrieving-the-access-token) to get the API token to use in the `configuration.yaml` file. @@ -47,65 +173,188 @@ To add a Xiaomi Air Purifier to your installation, add the following to your `co ```yaml fan: +# Example configuration.yaml entry - platform: xiaomi_miio - name: Xiaomi Air Purifier 2 host: 192.168.130.66 token: YOUR_TOKEN ``` -Configuration variables: -- **host** (*Required*): The IP of your plug. -- **token** (*Required*): The API token of your plug. -- **name** (*Optional*): The name of your plug. +{% configuration %} +host: + description: The IP address of your miio fan. + required: true + type: string +token: + description: The API token of your miio fan. + required: true + type: string +name: + description: The name of your miio fan. + required: false + type: string + default: Xiaomi Air Purifier +model: + description: The model of your miio fan. Valid values are `zhimi.airpurifier.v6`, `zhimi.airpurifier.v3`, `zhimi.humidifier.v1` and `zhimi.humidifier.ca1`. This setting can be used to bypass the device model detection and is recommended if your device isn't always available. + required: false + type: string +{% endconfiguration %} ## {% linkable_title Platform Services %} -### Service fan/xiaomi_miio_set_buzzer_on +### {% linkable_title Service `fan.set_speed` %} + +Set the fan speed/operation mode. + +| Service data attribute | Optional | Description | +|---------------------------|----------|---------------------------------------------------------------------| +| `entity_id` | yes | Only act on a specific air purifier. Else targets all. | +| `speed` | no | Fan speed. Valid values are 'Auto', 'Silent', 'Favorite' and 'Idle' | + +### {% linkable_title Service `fan.xiaomi_miio_set_buzzer_on` %} (Air Purifier Pro excluded) Turn the buzzer on. -| Service data attribute | Optional | Description | -|---------------------------|----------|-------------------------------------------------------| -| `entity_id` | yes | Only act on specific air purifier. Else targets all. | +| Service data attribute | Optional | Description | +|---------------------------|----------|---------------------------------------------------------| +| `entity_id` | yes | Only act on a specific Xiaomi miIO fan entity. Else targets all. | -### Service fan/xiaomi_miio_set_buzzer_off +### {% linkable_title Service `fan.xiaomi_miio_set_buzzer_off` %} (Air Purifier Pro excluded) Turn the buzzer off. -| Service data attribute | Optional | Description | -|---------------------------|----------|-------------------------------------------------------| -| `entity_id` | yes | Only act on specific air purifier. Else targets all. | +| Service data attribute | Optional | Description | +|---------------------------|----------|---------------------------------------------------------| +| `entity_id` | yes | Only act on a specific Xiaomi miIO fan entity. Else targets all. | -### Service fan/xiaomi_miio_set_led_on +### {% linkable_title Service `fan.xiaomi_miio_set_led_on` %} (Air Purifier only) Turn the led on. -| Service data attribute | Optional | Description | -|---------------------------|----------|-------------------------------------------------------| -| `entity_id` | yes | Only act on specific air purifier. Else targets all. | +| Service data attribute | Optional | Description | +|---------------------------|----------|---------------------------------------------------------| +| `entity_id` | yes | Only act on a specific Xiaomi miIO fan entity. Else targets all. | -### Service fan/xiaomi_miio_set_led_off +### {% linkable_title Service `fan.xiaomi_miio_set_led_off` %} (Air Purifier only) Turn the led off. -| Service data attribute | Optional | Description | -|---------------------------|----------|-------------------------------------------------------| -| `entity_id` | yes | Only act on specific air purifier. Else targets all. | +| Service data attribute | Optional | Description | +|---------------------------|----------|---------------------------------------------------------| +| `entity_id` | yes | Only act on a specific Xiaomi miIO fan entity. Else targets all. | -### Service fan/xiaomi_miio_set_led_brightness +### {% linkable_title Service `fan.xiaomi_miio_set_child_lock_on` %} + +Turn the child lock on. + +| Service data attribute | Optional | Description | +|---------------------------|----------|---------------------------------------------------------| +| `entity_id` | yes | Only act on a specific Xiaomi miIO fan entity. Else targets all. | + +### {% linkable_title Service `fan.xiaomi_miio_set_child_lock_off` %} + +Turn the child lock off. + +| Service data attribute | Optional | Description | +|---------------------------|----------|---------------------------------------------------------| +| `entity_id` | yes | Only act on a specific Xiaomi miIO fan entity. Else targets all. | + +### {% linkable_title Service `fan.xiaomi_miio_set_led_brightness` %} (Air Purifier Pro excluded) Set the led brightness. Supported values are 0 (Bright), 1 (Dim), 2 (Off). -| Service data attribute | Optional | Description | -|---------------------------|----------|-------------------------------------------------------| -| `entity_id` | yes | Only act on specific air purifier. Else targets all. | -| `brightness` | no | Brightness, between 0 and 2. | +| Service data attribute | Optional | Description | +|---------------------------|----------|---------------------------------------------------------| +| `entity_id` | yes | Only act on a specific Xiaomi miIO fan entity. Else targets all. | +| `brightness` | no | Brightness, between 0 and 2. | -### Service fan/xiaomi_miio_set_favorite_level +### {% linkable_title Service `fan.xiaomi_miio_set_favorite_level` %} (Air Purifier only) Set the favorite level of the operation mode "favorite". -| Service data attribute | Optional | Description | -|---------------------------|----------|-------------------------------------------------------| -| `entity_id` | yes | Only act on specific air purifier. Else targets all. | -| `level` | no | Level, between 0 and 16. | +| Service data attribute | Optional | Description | +|---------------------------|----------|---------------------------------------------------------| +| `entity_id` | yes | Only act on a specific Xiaomi miIO fan entity. Else targets all. | +| `level` | no | Level, between 0 and 16. | + +### {% linkable_title Service `fan.xiaomi_miio_set_auto_detect_on` %} (Air Purifier Pro only) + +Turn the auto detect on. + +| Service data attribute | Optional | Description | +|---------------------------|----------|---------------------------------------------------------| +| `entity_id` | yes | Only act on a specific Xiaomi miIO fan entity. Else targets all. | + +### {% linkable_title Service `fan.xiaomi_miio_set_auto_detect_off` %} (Air Purifier Pro only) + +Turn the auto detect off. + +| Service data attribute | Optional | Description | +|---------------------------|----------|---------------------------------------------------------| +| `entity_id` | yes | Only act on a specific Xiaomi miIO fan entity. Else targets all. | + +### {% linkable_title Service `fan.xiaomi_miio_set_learn_mode_on` %} (Air Purifier 2 only) + +Turn the learn mode on. + +| Service data attribute | Optional | Description | +|---------------------------|----------|---------------------------------------------------------| +| `entity_id` | yes | Only act on a specific Xiaomi miIO fan entity. Else targets all. | + +### {% linkable_title Service `fan.xiaomi_miio_set_learn_mode_off` %} (Air Purifier 2 only) + +Turn the learn mode off. + +| Service data attribute | Optional | Description | +|---------------------------|----------|---------------------------------------------------------| +| `entity_id` | yes | Only act on a specific Xiaomi miIO fan entity. Else targets all. | + +### {% linkable_title Service `fan.xiaomi_miio_set_volume` %} (Air Purifier Pro only) + +Set the sound volume. + +| Service data attribute | Optional | Description | +|---------------------------|----------|---------------------------------------------------------| +| `entity_id` | yes | Only act on a specific Xiaomi miIO fan entity. Else targets all. | +| `volume` | no | Volume, between 0 and 100. | + +### {% linkable_title Service `fan.xiaomi_miio_reset_filter` %} (Air Purifier 2 only) + +Reset the filter lifetime and usage. + +| Service data attribute | Optional | Description | +|---------------------------|----------|---------------------------------------------------------| +| `entity_id` | yes | Only act on a specific Xiaomi miIO fan entity. Else targets all. | + +### {% linkable_title Service `fan.xiaomi_miio_set_extra_features` %} (Air Purifier only) + +Set the extra features. + +| Service data attribute | Optional | Description | +|---------------------------|----------|---------------------------------------------------------| +| `entity_id` | yes | Only act on a specific Xiaomi miIO fan entity. Else targets all. | +| `features` | no | Integer, known values are 0 and 1. | + +### {% linkable_title Service `fan.xiaomi_miio_set_target_humidity` %} (Air Humidifier only) + +Set the target humidity. + +| Service data attribute | Optional | Description | +|---------------------------|----------|-----------------------------------------------------------------| +| `entity_id` | yes | Only act on a specific Xiaomi miIO fan entity. Else targets all. | +| `humidity` | no | Target humidity. Allowed values are 30, 40, 50, 60, 70 and 80 | + +### {% linkable_title Service `fan.xiaomi_miio_set_dry_on` %} (Air Humidifier CA only) + +Turn the dry mode on. + +| Service data attribute | Optional | Description | +|---------------------------|----------|---------------------------------------------------------| +| `entity_id` | yes | Only act on a specific Xiaomi miIO fan entity. Else targets all. | + +### {% linkable_title Service `fan.xiaomi_miio_set_dry_off` %} (Air Humidifier CA only) + +Turn the dry mode off. + +| Service data attribute | Optional | Description | +|---------------------------|----------|---------------------------------------------------------| +| `entity_id` | yes | Only act on a specific Xiaomi miIO fan entity. Else targets all. | diff --git a/source/_components/fan.zha.markdown b/source/_components/fan.zha.markdown new file mode 100644 index 00000000000..536d9c78bd1 --- /dev/null +++ b/source/_components/fan.zha.markdown @@ -0,0 +1,16 @@ +--- +layout: page +title: "ZigBee Home Automation Fan" +description: "Instructions how to setup ZigBee Home Automation fans within Home Assistant." +date: 2018-02-10 00:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: zigbee.png +ha_category: Fan +ha_iot_class: "Local Polling" +ha_release: 0.66 +--- + +To get your ZigBee fans working with Home Assistant, follow the instructions for the general [ZigBee Home Automation component](/components/zha/). diff --git a/source/_components/fan.zwave.markdown b/source/_components/fan.zwave.markdown index 953620ed3bb..4e83a0b8a58 100644 --- a/source/_components/fan.zwave.markdown +++ b/source/_components/fan.zwave.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Z-Wave Fan" -description: "Instructions how to setup the Z-Wave Fans within Home Assistant." +description: "Instructions on how to setup the Z-Wave Fans within Home Assistant." date: 2017-05-25 17:00 sidebar: true comments: false diff --git a/source/_components/feedreader.markdown b/source/_components/feedreader.markdown index 15b72129655..b5a6b9b3ea5 100644 --- a/source/_components/feedreader.markdown +++ b/source/_components/feedreader.markdown @@ -1,7 +1,7 @@ --- layout: page title: Feedreader -description: "Instructions how to integrate RSS feeds into Home Assistant." +description: "Instructions on how to integrate RSS feeds into Home Assistant." date: 2016-04-18 22:00 sidebar: true comments: false @@ -20,14 +20,41 @@ To use RSS feeds in your installation, add the following to your `configuration. # Example configuration.yaml entry feedreader: urls: - - https://home-assistant.io/atom.xml + - https://www.home-assistant.io/atom.xml - https://github.com/blog.atom - https://hasspodcast.io/feed/podcast ``` -Configuration variables: +{% configuration %} + urls: + description: List of URLS for your feeds. + required: true + type: list + scan_interval: + description: Defines the update interval of the feeds. + required: false + default: 1 hour + type: interval + max_entries: + description: The maximum number of entries to extract from each feed. + required: false + default: 20 + type: int +{% endconfiguration %} -- **urls** (*Required*): List of URLS for your feeds. +The following configuration example shows how to configure update interval and maximum number of entries: + +```yaml +# Example configuration.yaml entry with optional parameters +feedreader: + urls: + - https://www.home-assistant.io/atom.xml + - https://github.com/blog.atom + - https://hasspodcast.io/feed/podcast + scan_interval: + minutes: 30 + max_entries: 5 +``` Feedreader events can be used out of the box to trigger automation actions, e.g.: @@ -67,4 +94,4 @@ hass.bus.listen(EVENT_FEEDREADER, event_listener) To get started developing custom components, please refer to the [developers](/developers) documentation -For a drop in packaged complete example of Feedreader, you can use the [PodCast notifier](https://github.com/CCOSTAN/Home-AssistantConfig/blob/master/packages/hasspodcast.yaml). +For a drop in packaged complete example of Feedreader, you can use the [PodCast notifier](https://github.com/CCOSTAN/Home-AssistantConfig/blob/master/config/packages/hasspodcast.yaml). diff --git a/source/_components/folder_watcher.markdown b/source/_components/folder_watcher.markdown new file mode 100644 index 00000000000..fffd1a68f8d --- /dev/null +++ b/source/_components/folder_watcher.markdown @@ -0,0 +1,82 @@ +--- +layout: page +title: "Folder Watcher" +description: "Component for monitoring changes within the filesystem." +date: 2018-03-11 14:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: home-assistant.png +ha_category: System Monitor +ha_iot_class: "Local Polling" +ha_release: 0.67 +--- + +This component adds [Watchdog](https://pythonhosted.org/watchdog/) file system monitoring, publishing events on the Home Assistant bus on the creation/deletion/modification of files within configured folders. The monitored `event_type` are: + +* `created` +* `deleted` +* `modified` +* `moved` + +Configured folders must be added to [whitelist_external_dirs](/docs/configuration/basic/). Note that by default folder monitoring is recursive, meaning that the contents of sub-folders are also monitored. + +To enable the Folder Watcher component in your installation, add the following to your `configuration.yaml` file: + +{% raw %} +```yaml +folder_watcher: + - folder: /config +``` +{% endraw %} + +{% configuration %} +folder: + description: The folder path + required: true + type: string +patterns: + description: Pattern matching to apply + required: false + default: "*" + type: string +{% endconfiguration %} + +## Patterns + +Pattern matching using [fnmatch](https://docs.python.org/3.6/library/fnmatch.html) can be used to limit filesystem monitoring to only files which match the configured patterns. The following example shows the configuration required to only monitor filetypes `.yaml` and `.txt`. + +{% raw %} +```yaml +folder_watcher: + - folder: /config + patterns: + - '*.yaml' + - '*.txt' +``` +{% endraw %} + +## Automations + +Automations can be triggered on filesystem event data using a `data_template`. The following automation will send a notification with the name and folder of new files added to that folder: + +{% raw %} +```yaml +#Send notification for new image (including the image itself) +automation: +  alias: New file alert + trigger: +   platform: event +   event_type: folder_watcher +   event_data: +      event_type: created + action: +   service: notify.notify +   data_template: +     title: New image captured! +     message: "Created {{ trigger.event.data.file }} in {{ trigger.event.data.folder }}" +     data: +       file: "{{ trigger.event.data.path }}" +``` +{% endraw %} diff --git a/source/_components/foursquare.markdown b/source/_components/foursquare.markdown index 10b5d6ebe61..5ec302887eb 100644 --- a/source/_components/foursquare.markdown +++ b/source/_components/foursquare.markdown @@ -1,7 +1,7 @@ --- layout: page title: Foursquare -description: "Instructions how to the Foursquare API into Home Assistant." +description: "Instructions on how to the Foursquare API into Home Assistant." date: 2016-08-08 17:20 sidebar: true comments: false @@ -31,7 +31,7 @@ Configuration variables: #### Getting the access token #### After you have registered your APP on your [My Apps Page](https://foursquare.com/developers/apps) you get a `CLIENT_ID` and you have specified a -`REDIRECT_URL` which can be any URL you like, but since it will get your access token via a HTTP GET request, it should be a URL which will ignore the `access_token` HTTP GET variable. A good idea is to choose the URL of your Home Assistant. +`REDIRECT_URL` which can be any URL you like, but since it will get your access token via an HTTP GET request, it should be a URL which will ignore the `access_token` HTTP GET variable. A good idea is to choose the URL of your Home Assistant. Visit the following URL in your browser: ``` @@ -40,7 +40,7 @@ https://foursquare.com/oauth2/authenticate?client_id=CLIENT_ID&response_type=tok and change the `CLIENT_ID` and `YOUR_REGISTERED_REDIRECT_URL` to your actual values. You will receive an OAuth request landing page, asking you if you want to connect your Foursquare account to your newly created app. Say "Yes". -After that, you will get redirected to your `REDIRECT_URL` with the `access_token` as a HTTP GET variable. Copy everything after the = and paste it in your configuration.yaml as the `access_token`. +After that, you will get redirected to your `REDIRECT_URL` with the `access_token` as an HTTP GET variable. Copy everything after the = and paste it in your configuration.yaml as the `access_token`. ### {% linkable_title Real-Time API %} diff --git a/source/_components/freedns.markdown b/source/_components/freedns.markdown new file mode 100644 index 00000000000..960d1411d99 --- /dev/null +++ b/source/_components/freedns.markdown @@ -0,0 +1,49 @@ +--- +layout: page +title: "freedns.afraid.org" +description: "Keep your DNS record up to date with FreeDNS." +date: 2018-03-27 21:30 +sidebar: true +comments: false +sharing: true +footer: true +ha_category: Utility +ha_release: 0.67 +--- + +With the `freedns` component you can keep your [FreeDNS](https://freedns.afraid.org) record up to date. + +## {% linkable_title Configuration %} + +You need to determine your update URL or your access token. + +1. Head over to the [FreeDNS](https://freedns.afraid.org) website and login to your account. +2. Select the menu "Dynamic DNS" +3. You should now see your update candiates in a table at the bottom of the page. +4. Copy the link target of the "Direct URL". +5. The access token is the part at the end of the link: `https://freedns.afraid.org/dynamic/update.php?YOUR_UPDATE_TOKEN` +6. Either put the token as `access_token` _or_ the whole URL into the `url` attribute. + +To use the component in your installation, add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +freedns: + access_token: YOUR_TOKEN +``` + +{% configuration %} + access_token: + description: Your access token. This is exclusive to `url`. + required: false + type: string + url: + description: The full update URL. This is exclusive to `access_token`. + required: false + type: string + update_interval: + description: How often to call the update service. + required: false + type: time period + default: 10 minutes +{% endconfiguration %} diff --git a/source/_components/fritzbox.markdown b/source/_components/fritzbox.markdown new file mode 100644 index 00000000000..a5ca0a5f68b --- /dev/null +++ b/source/_components/fritzbox.markdown @@ -0,0 +1,55 @@ +--- +layout: page +title: "Fritzbox" +description: "Instructions on how to integrate the AVM Fritzbox Smart Home components." +date: 2018-02-18 17:10 +sidebar: true +comments: false +sharing: true +footer: true +logo: avm.png +ha_category: Hub +ha_release: 0.68 +ha_iot_class: "Local Polling" +--- + +The [AVM](https://en.avm.de) Fritzbox component for Home Assistant allows you to integrate the switch and climate devices. + +#### {% linkable_title Tested Devices %} + +- [FRITZ!Box 6490 Cable](https://en.avm.de/products/fritzbox/fritzbox-6490-cable/) +- [FRITZ!Box 7590](https://en.avm.de/products/fritzbox/fritzbox-7590/) +- [FRITZ!DECT 200](https://en.avm.de/products/fritzdect/fritzdect-200/) +- [Eurotronic Comet DECT](https://www.eurotronic.org/en/products/comet-dect.html) + + +## {% linkable_title Setup %} + +```yaml +# Example configuration.yaml entry +fritzbox: + devices: + - host: fritz.box + username: YOUR_USERNAME + password: YOUR_PASSWORD +``` + +{% configuration %} +devices: + description: A list of Fritzbox devices. + required: true + type: map + keys: + host: + description: The hostname or IP address of the Fritzbox. + required: true + type: optional + username: + description: The username for Smart Home access. + required: true + type: string + password: + description: The password of the user. + required: true + type: string +{% endconfiguration %} diff --git a/source/_components/frontend.markdown b/source/_components/frontend.markdown index 40274f80623..3cb9e3d5fc8 100644 --- a/source/_components/frontend.markdown +++ b/source/_components/frontend.markdown @@ -23,7 +23,7 @@ frontend: description: "Version of the JavaScript to serve to clients. Options: `es5` - transpiled so old browsers understand it. `latest` - not transpiled, so will work on recent browsers only. `auto` - select a version according to the browser user-agent. The value in the config can be overiden by putting `es5` or `latest` in the URL. For example `http://localhost:8123/states?es5` " required: false type: string - default: es5 + default: auto themes: description: Allow to define different themes. See below for further details. required: false @@ -39,7 +39,11 @@ frontend: required: true type: [list, string] extra_html_url: - description: "List of addtional [resources](/developers/frontend_creating_custom_ui/) to load." + description: "List of additional [resources](/developers/frontend_creating_custom_ui/) to load in `latest` javascript mode." + required: false + type: list + extra_html_url_es5: + description: "List of additional [resources](/developers/frontend_creating_custom_ui/) to load in `es5` javascript mode." required: false type: list development_repo: @@ -65,7 +69,7 @@ frontend: primary-color: blue ``` -The example above defined two themes named `happy` and `sad`. For each theme you can set values for CSS variables. For a partial list of variables used by the main frontend see [ha-style.html](https://github.com/home-assistant/home-assistant-polymer/blob/master/src/resources/ha-style.html). +The example above defined two themes named `happy` and `sad`. For each theme you can set values for CSS variables. For a partial list of variables used by the main frontend see [ha-style.js](https://github.com/home-assistant/home-assistant-polymer/blob/master/src/resources/ha-style.js). There are 2 themes-related services: @@ -131,7 +135,7 @@ Those will be loaded via `` on a ### {% linkable_title Manual Language Selection %} -The browser language is automatically detected. To use a different language, go to **General** in the Configuration panel and select a one from "Choose a Language". It will be applied immediately. +The browser language is automatically detected. To use a different language, go to **General** in the Configuration panel and select one from "Choose a Language". It will be applied immediately.

diff --git a/source/_components/gc100.markdown b/source/_components/gc100.markdown index 063dddcab09..43d74d72b7c 100644 --- a/source/_components/gc100.markdown +++ b/source/_components/gc100.markdown @@ -14,7 +14,7 @@ ha_release: 0.57 The Global Caché [GC-100](https://www.globalcache.com/products/gc-100/) can be integrated into Home Assistant. GC-100 is a TCP-controllable hardware device which has an array of relays, RS232 serial ports, and flexible ports which can be programmed to be either digital inputs or IR blaster outputs. There are a variety of submodels of the GC-100 which have different amounts of each I/O type. -Currently, only relays and ports configured to be digital inputs are supported in Home Assistant. For IR support, please use the iTach remote platform (https://home-assistant.io/components/remote.itach/), but note that it will likely not function concurrently on the same GC100 due to limitations in the TCP socket server implementation used by Global Caché. +Currently, only relays and ports configured to be digital inputs are supported in Home Assistant. For IR support, please use the iTach remote platform (/components/remote.itach/), but note that it will likely not function concurrently on the same GC100 due to limitations in the TCP socket server implementation used by Global Caché. To enable this device, add the following lines to your `configuration.yaml`: diff --git a/source/_components/goalfeed.markdown b/source/_components/goalfeed.markdown new file mode 100644 index 00000000000..474e8a0351f --- /dev/null +++ b/source/_components/goalfeed.markdown @@ -0,0 +1,54 @@ +--- +layout: page +title: "Goalfeed" +description: "Instructions on how to setup Goalfeed events within Home Assistant." +date: 2017-12-13 17:30 +sidebar: true +comments: false +sharing: true +footer: true +logo: goalfeed.png +ha_category: Other +ha_release: 0.63 +--- + +The `goalfeed` component lets you use your Goalfeed account to trigger events in Home Assistant whenever a NHL or MLB team scores. + +To use this component, enter your email address and password from your goalfeed.ca account in your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +goalfeed: + username: YOUR_E_MAIL_ADDRESS + password: YOUR_PASSWORD +``` + +{% configuration %} +username: + required: true + description: The email address on your goalfeed.ca account. + type: string +password: + required: true + description: The password on your goalfeed.ca account. + type: string +{% endconfiguration %} + +Now you can use the goal event type in your automations: + +```yaml +- alias: 'Jets Goal' + trigger: + platform: event + event_type: goal + event_data: + team_name: "Winnipeg Jets" +``` + +Goal events have the following event data: + +- **team**: Three letter code representing the team. This is unique within the leagues, but not unique across the leagues (i.e. 'WPG' or 'TOR'). +- **team_name**: The team that scored (i.e. 'Winnipeg Jets' or 'Toronto Blue Jays'). +- **team_hash**: A unique hash for the team (you can find these values on https://goalfeed.ca/get-teams). +- **league_id**: A unique number for the league. +- **league_name**: A the short name of the league (i.e. 'NHL' or 'MLB'). diff --git a/source/_components/google_assistant.markdown b/source/_components/google_assistant.markdown index cb2efbb6361..c9fbcd65227 100644 --- a/source/_components/google_assistant.markdown +++ b/source/_components/google_assistant.markdown @@ -13,14 +13,21 @@ featured: true ha_release: 0.56 --- -# Google Assistant Docs +

+ Use [Home Assistant Cloud](/cloud/) to integrate with Google Assistant without any effort. +

+ +The `google_assistant` component allows you to control things via Google Assistant (on your mobile or tablet) or a Google Home device. + The Google Assistant component requires a bit more setup than most due to the way Google requires Assistant Apps to be set up.

-To use Google Assistant your Home Assistant configuration has to be externally accessible, with a hostname and SSL certificate. If you haven't already configured that you should do so before continuing. +To use Google Assistant, your Home Assistant configuration has to be externally accessible with a hostname and SSL certificate. If you haven't already configured that, you should do so before continuing.

-### {% linkable_title Configuration %} +## {% linkable_title Configuration %} + +To enable this, add the following lines to your `configuration.yaml` file: ```yaml # Example configuration.yaml entry @@ -29,108 +36,148 @@ google_assistant: client_id: [long URL safe random string] access_token: [a different long URL safe random string] agent_user_id: [a string to identify user] - api_key: [an API Key generated for the Google Actions project] + api_key: [a Homegraph API Key generated for the Google Actions project] exposed_domains: - switch - light - group -``` - -*Note:* It's very important that you use very long strings for `client_id` and `access_token`. Those are essentially the credentials to your Home Assistant instance. You can generate them with the following command: - -`cat /dev/urandom|fold -w 120|head -n 1|base64 -w 0|tr -dc '0-9A-Za-z'|cut -c -80` - -*Configuration Variables:* -* *expose_by_default* (Optional): Expose devices in all supported domains by default. -* *project_id* (Required): Project ID from the Google Developer console (looks like `words-2ab12`) -* *client_id* (Required): A long random URL safe string (no spaces or special characters) that will be used for Implicit OAuth. -* *access_token* (Required): Another different long random URL safe string. -* *agent_user_id* (Optional): A string to identify the user, e.g., email address. If not provided, the component will generate one. -* *api_key* (Optional): An API Key generated for the project from Google Console which allows you to update devices without unlinking and relinking an account (see setup below). If not provided then the request_sync service is not exposed. -* *exposed_domains* (Optional): An array of Home Assistant domains to expose to Google Assistant. Options include: - - `switch` - - `light` - - `cover` - - `media_player` - - `group` - - `fan` - - `scene` - - `script` - -You can also customize your devices similar to other components by adding keys to entities: - -```yaml -homeassistant: - customize: - master_bedroom_light: - google_assistant: true - google_assistant_name: bedroom light - bedroom_blinds: + entity_config: + switch.kitchen: + name: Custom Name for Google Assistant aliases: - - bedroom shades - - bedroom covers - hallway_ceiling_switch: - google_assistant: true - google_assistant_type: light + - bright lights + - entry lights + light.living_room: + expose: false + room: living room ``` -*Entity Customization Keys:* -* *google_assistant*: True exposes entity, false will hide it -* *google_assistant_name*: Can be used to override the primary name of an entity. By default the `friendly_name` of an entity is used. -* *google_assistant_type*: Can be used to override the domain/type of an entity. For example a switch can be treated as a light -* *aliases*: Provides "nicknames" to Google Assistant. These function as alternate names for an entity that Assistant will understand when spoken. +Configuration variables: + +{% configuration %} + +project_id: + description: Project ID from the Google Developer console (looks like `words-2ab12`) + required: true + type: string +client_id: + description: A long random URL safe string (no spaces or special characters) that will be used for Implicit OAuth (example `aBcDeFgHiJkLmNoP`) + required: true + type: string +access_token: + description: Another different long random URL safe string (example `aBcDeFgHiJkLmNoP`) + required: true + type: string +agent_user_id: + description: A string to identify the user, e.g., email address. If not provided, the component will generate one. + required: false + type: string +api_key: + description: An API Key generated for the project from [Google Console](https://console.cloud.google.com/apis/api/homegraph.googleapis.com/overview) which allows you to update devices without unlinking and relinking an account (see step 9 below). If not provided then the `google_assistant.request_sync` service is not exposed. It is recommended to set up this configuration key as it also allows the usage of the following command, "Ok Google, sync my devices". Once you have setup this component you will need to call this service (or command) each time you add a new device that you wish to control via the Google Assistant integration. + required: false + type: string +expose_by_default: + description: Expose devices in all supported domains by default. If set to false, you need to either expose domains or add the expose configuration option to each entity in entity_config and set it to true. + required: false + default: True + type: boolean +exposed_domains: + description: List of entity domains to expose to Google Assistant. + required: false + type: list +entity_config: + description: Entity specific configuration for Google Assistant + required: false + type: map + keys: + '``': + description: Entity to configure + required: false + type: map + keys: + name: + description: Name of the entity to show in Google Assistant + required: false + type: string + expose: + description: Force an entity to be exposed/excluded. + required: false + type: boolean + aliases: + description: Aliases that can also be used to refer to this entity + required: false + type: list + room: + description: Allows for associating this device to a Room in Google Assistant. + required: false + type: string +{% endconfiguration %} + +### {% linkable_title Available domains %} +Currently, the following domains are available to be used with Google Assistant, listed with their default types: + +- group (on/off) +- input boolean (on/off) +- scene (on) +- script (on) +- switch (on/off) +- fan (on/off) +- light (on/off/brightness/rgb color/color temp) +- cover (on/off/set position (via set brightness)) +- media_player (on/off/set volume (via set brightness)) +- climate (temperature setting) + +It's very important that you use very long strings for `client_id` and `access_token`. Those are essentially the credentials to your Home Assistant instance. You can generate them with the following command: + +```bash +$ cat /dev/urandom | fold -w 120 | head -n 1 | base64 -w 0 | tr -dc '0-9A-Za-z' | cut -c -80 +``` + +If you're not using Linux, you can use sites such as [this one](https://www.browserling.com/tools/random-string) to generate a random string (containing mixed case letters and numbers) of up to 80 characters. ### {% linkable_title Setup %} -1. Install the [gactions CLI](https://developers.google.com/actions/tools/gactions-cli) (you'll use this later) - you can download this anywhere, just remember where you put it for later (and don't forget to run `chmod +x gactions`) -2. Create a new file named `project.json` (in the same directory you downloaded `gactions` to) and replace the `[YOUR HOME ASSISTANT URL]` below with the URL you use to access Home Assistant. - Note: This must be an HTTPS URL to work. +1. Create a new project in the [developer console](https://console.actions.google.com/). + a. Add/Import project, give it a name + b. Click on `Home Control` card, select the `Smart home` recommendation + c. Create an Action, under the build section. Add in your home assistant url: `https://[YOUR HOME ASSISTANT URL:PORT]/api/google_assistant`, replace the `[YOUR HOME ASSISTANT URL:PORT]` with the domain / ip address and the port under which your Home Assistant is reachable. If you have set `api_password:` add this password to the URL - eg `https://[YOUR HOME ASSISTANT URL:PORT]/api/google_assistant?api_password=[YOUR API PASSWORD]`) + d. Click `Done`. Then click on `Overview`, which will lead you back to the app details screen. +2. `Account linking` is required for your app to interact with Home Assistant. Set this up under the `Quick Setup` section + a. Leave it at the default `No, I only want to allow account creation on my website` and select Next + b. For the `Linking type` select `OAuth` and `Implicit` + c. Client ID: The `client_id` from your Home Assistant configuration above + d. Authorization URL (replace with your actual URL): `https://[YOUR HOME ASSISTANT URL:PORT]/api/google_assistant/auth`. If you have set `api_password:` add this password to the URL `https://[YOUR HOME ASSISTANT URL:PORT]/api/google_assistant/auth?api_password=[YOUR API PASSWORD]`) + e. Configure your client. Add scopes for `email` and `name`. + f. Testing instructions: Enter anything. It doesn't matter since you won't submit this app. +3. Back on the overview page. Click `Simulator` under `TEST` - you don't have to actually test . +4. If you haven't already added the component configuration to `configuration.yaml` and restarted Home Assistant, you'll be unable to continue until you have. +5. Open the Google Assistant app and go into `Settings > Home Control` +6. Click the `+` sign, and near the bottom, you should have `[test] your app name`. Selecting that should lead you the screen where you can set rooms for your devices or nicknames for your devices. +7. If you want to allow other household users to control the devices: + a. Go to the settings for the project you created in point 1 in the developer console. + b. Under the gear icon, click `Permissions` + c. Click `Add`, type the new user's e-mail address and choose `Project -> Editor` role + d. Have the new user go to [developer console](https://console.actions.google.com/) and repeat steps starting from point 4 +8. If you want to use the `google_assistant.request_sync` service, to update devices without unlinking and relinking, in Home Assistant, then enable Homegraph API for your project: + a. Go to the [cloud console](https://console.cloud.google.com/apis/api/homegraph.googleapis.com/overview) + b. Select your project and click Enable Homegraph API + c. Go to Credentials, which you can find on the left navigation bar under the key icon, and select API Key from Create Credentials + d. Note down the generated API Key and use this in the configuration -```json -{ - "actions": [{ - "name": "actions.devices", - "deviceControl": { - }, - "fulfillment": { - "conversationName": "automation" - } - }], - "conversations": { - "automation" : - { - "name": "automation", - "url": "https://[YOUR HOME ASSISTANT URL]/api/google_assistant" - } - } -} -``` +### {% linkable_title Troubleshooting the request_sync service %} -3. Create a new project in the [developer console](https://console.actions.google.com/). - 1. Add/Import project - 2. Go to Build under the Actions SDK box - 3. Copy the command that looks like: - `gactions update --action_package PACKAGE_NAME --project doctest-2d0b8` -4. Replace `PACKAGE_NAME` with `project.json` and run that command from the same directory you saved `project.json` in (you'll need to put `./` before `gactions` so that it reads `./gactions`). It should output a URL like `https://console.actions.google.com/project/doctest-2d0b8/overview` - go there. -5. You'll need to fill out most of the information on that page, but none of it really matters since you won't be addressing the App directly, only through the Smart Home functionality built into Google Assistant. -6. The final item on that page `Account linking` is required for your app to interact with Home Assistant. - 1. Grant type: `Implicit` - 2. Client ID: The `client_id` from your Home Assistant configuration above - 3. Authorization URL (replace with your actual URL): `https://[YOUR HOME ASSISTANT URL]/api/google_assistant/auth` - 4. Configure your client. Add scopes for `email` and `name` - 5. Testing instructions: doesn't matter since you won't submit this app -7. Back on the main app draft page. Click `Test Draft`. That will take you to the simulator (which won't work) so just close that window. -8. Open the Google Assistant app and go into `Settings > Home Control` -9. Click the `+` sign, and near the bottom, you should have `[test] your app name`. Selecting that should lead to you the screen where you can set rooms for your devices or nicknames for your devices. -10. If you want to allow other houshold users to control the devices: - 1. Go to the developer console using address from point 4. - 2. Under the gear icon, click `Permissions` - 3. Click `Add`, type the new user's e-mail address and choose `Project -> Editor` role - 4. Have the new user go to [developer console](https://console.actions.google.com/) and repeat steps starting from point 7. -11. If you want to use the `google_assistant.request_sync` service in Home Assistant, then enable Homegraph API for your project: - 1. Go to https://console.cloud.google.com/apis/api/homegraph.googleapis.com/overview - 2. Select your project and click Enable Homegraph API - 3. Go to Credentials and select API Key from Create Credentials - 4. Note down the generated API Key and use this in the configuration +The request_sync service requires that the initial sync from Google includes the agent_user_id. If not, the service will log an error that reads something like "Request contains an invalid argument". If this happens, then [unlink the account](https://support.google.com/googlehome/answer/7506443?hl=en-GB) from Home Control and relink. -*Note:* The request_sync service requires that the initial sync from Google includes the agent_user_id. If not, the service will log an error that reads something like "Request contains an invalid argument". If this happens, then [unlink the account](https://support.google.com/googlehome/answer/7506443?hl=en-GB) from Home Control and relink. +The request_sync service may fail with a 404 if the project_id of the Homegraph API differs from the project_id of the Actions SDK found in the preferences of your project on [developer console](https://console.actions.google.com). Resolve this by: + + 1. Removing your project from the [developer console](https://console.actions.google.com). + 2. Add a new project to the [cloud console](https://console.cloud.google.com). Here you get a new `project_id`. + 3. Enable Homegraph API to the new project. + 4. Generate a new API key. + 5. Again, create a new project in the [developer console](https://console.actions.google.com/). Described above. But at the step 'Build under the Actions SDK box' choose your newly created project. By this, they share the same `project_id`. + +### {% linkable_title Troubleshooting with NGINX %} + +When using NGINX, ensure that your `proxy_pass` line *does not* have a trailing `/`, as this will result in errors. Your line should look like: + + proxy_pass http://localhost:8123; diff --git a/source/_components/group.markdown b/source/_components/group.markdown index 74f07dc49bb..924c55e24ac 100644 --- a/source/_components/group.markdown +++ b/source/_components/group.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Group" -description: "Instructions how to setup groups within Home Assistant." +description: "Instructions on how to setup groups within Home Assistant." date: 2015-03-23 19:59 sidebar: true comments: false @@ -22,7 +22,7 @@ By default, every group appears in the HOME tab. If you create a group `default_ group: default_view: view: yes - icon: mdi:home + icon: mdi:home entities: - group.kitchen - group.awesome_people @@ -56,7 +56,7 @@ group: Configuration variables: -- **view** (*Optional*): If yes then the entry will be shown as a view (tab) at the top. +- **view** (*Optional*): If yes then the entry will be shown as a view (tab) at the top. Groups that are set to `view: yes` cannot be used as entities in other views. - **name** (*Optional*): Name of the group. - **icon** (*Optional*): If the group is a view, this icon will show at the top in the frontend instead of the name. If the group is a view and both name and icon have been specified, the icon will appear at the top of the frontend and the name will be displayed as the mouse-over text. If it's not a view, then the icon shows when this group is used in another group. - **control** (*Optional*): Set value to `hidden`. If hidden then the group switch will be hidden. @@ -69,7 +69,7 @@ Example of groups shown as views in the frontend. If all entities in a group are switches or lights then Home Assistant adds a switch at the top of the card that turns them all on/off at once. If you want to hide this switch, set `control` to `hidden`. -You can create views (tabs) that contain other groups. +You can create views (tabs) that contain other groups (but not other groups which are marked as `view: yes`). Notice in the example below that in order to refer to the group "Living Room", you use `group.living_room` (lowercase and spaces replaced with underscores). ```yaml @@ -86,7 +86,7 @@ Notice in the example below that in order to refer to the group "Living Room", y entities: - group.living_room - group.bedroom -``` +``` ## {% linkable_title Default groups %} @@ -118,7 +118,7 @@ group: - group.all_scripts ``` -## {% linkable_title Group behaviour %} +## {% linkable_title Group behavior %} When any member of a group is `on` then the group will also be `on`. Similarly with a device tracker, when any member of the group is `home` then the group is `home`. diff --git a/source/_components/hdmi_cec.markdown b/source/_components/hdmi_cec.markdown index 43c95c45ada..198d89b01bc 100644 --- a/source/_components/hdmi_cec.markdown +++ b/source/_components/hdmi_cec.markdown @@ -1,7 +1,7 @@ --- layout: page title: "HDMI CEC" -description: "Instructions how to interact with HDMI CEC via Home Assistant." +description: "Instructions on how to interact with HDMI CEC via Home Assistant." date: 2016-06-24 19:59 sidebar: true comments: false @@ -31,32 +31,24 @@ If you are using [Hass.io](/hassio/) then just move forward to the configuration #### {% linkable_title Symlinking into virtual environment %} -Create a symlink to the `cec` installation. Keep in mind different installation methods will result in different locations of cec. +Create a symlink to the `cec` installation including the _cec.so file. Keep in mind different installation methods will result in different locations of cec. ```bash -$ ln -s /path/to/your/installation/of/cec /path/to/your/venv/lib/python3.4/site-packages +$ ln -s /path/to/your/installation/of/cec /path/to/your/venv/lib/python*/site-packages +$ ln -s /path/to/your/installation/of/_cec.so /path/to/your/venv/lib/python*/site-packages + ``` + ##### {% linkable_title Symlinking examples: %} For the default virtual environment of a [HASSbian Image for Raspberry Pi](/getting-started/installation-raspberry-pi-image/) the command would be as follows. ```bash -$ ln -s /usr/local/lib/python3.4/dist-packages/cec /srv/homeassistant/lib/python3.4/site-packages +$ ln -s /usr/local/lib/python*/dist-packages/cec /srv/homeassistant/lib/python*/site-packages +$ ln -s /usr/local/lib/python*/dist-packages/_cec.so /srv/homeassistant/lib/python*/site-packages + ``` -For the default virtual environment of a [Raspberry Pi All-In-One installation](/getting-started/installation-raspberry-pi-all-in-one/) the command would be as follows. - -```bash -$ ln -s /usr/local/lib/python3.4/site-packages/cec /srv/homeassistant/homeassistant_venv/lib/python3.4/site-packages -``` - -For the default virtual environment of a [Manual installation](/getting-started/installation-raspberry-pi/) the command would be as follows. - -```bash -$ ln -s /usr/local/lib/python3.4/site-packages/cec /srv/hass/hass_venv/lib/python3.4/site-packages -``` - -

If after symlinking and adding `hdmi_cec:` to your configuration you are getting the following error in your logs, `* failed to open vchiq instance` you will also need to add the user account Home Assistant runs under, to the `video` group. To add the Home Assistant user account to the `video` group, run the following command. `$ usermod -a -G video `

@@ -74,6 +66,7 @@ ssh pi@your_raspberry_pi_ip ```bash echo scan | cec-client -s -d 1 ``` +Note: to use this command you have to install cec-utils package. In Debian based should be: ```sudo apt install cec-utils``` * This will give you the list of devices that are on the bus @@ -154,7 +147,7 @@ hdmi_cec: ### {% linkable_title Select Device %} -Call the `hdmi_cec/select_device` service with the name of the device from config or entity_id or physical address"to select it, for example: +Call the `hdmi_cec.select_device` service with the name of the device from config or entity_id or physical address"to select it, for example: ```json {"device": "Chromecast"} @@ -179,15 +172,29 @@ action: ### {% linkable_title Power On %} -Call the `hdmi_cec/power_on` service (no arguments) to power on any devices that support this function. +Call the `hdmi_cec.power_on` service (no arguments) to power on any devices that support this function. + +An Automation action using the example above would look something like this. + +```yaml +action: + service: hdmi_cec.power_on +``` ### {% linkable_title Standby %} -Call the `hdmi_cec/standby` service (no arguments) to place in standby any devices that support this function. +Call the `hdmi_cec.standby` service (no arguments) to place in standby any devices that support this function. + +An Automation action using the example above would look something like this. + +```yaml +action: + service: hdmi_cec.standby +``` ### {% linkable_title Change volume level %} -Call the `hdmi_cec/volume` service with one of following commands: +Call the `hdmi_cec.volume` service with one of following commands: #### {% linkable_title Volume up %} Increase volume three times: @@ -208,7 +215,6 @@ Stop increasing volume: {"up": "release"} ``` - #### {% linkable_title Volume down %} Decrease volume three times: diff --git a/source/_components/history.markdown b/source/_components/history.markdown index b7cd506edd5..206678c5107 100644 --- a/source/_components/history.markdown +++ b/source/_components/history.markdown @@ -1,7 +1,7 @@ --- layout: page title: "History" -description: "Instructions how to enable history support for Home Assistant." +description: "Instructions on how to enable history support for Home Assistant." date: 2015-03-23 19:59 sidebar: true comments: false @@ -13,7 +13,7 @@ ha_release: pre 0.7 --- -The `history` component will track everything that is going on within Home Assistant and allows the user to browse through it. It depends on the `recorder` component for storing the data and uses the same database setting. If any entities are excluded from being recorded, no history will be available for these entities as well. +The `history` component will track everything that is going on within Home Assistant and allows the user to browse through it. It depends on the `recorder` component for storing the data and uses the same database setting. If any entities are excluded from being recorded, no history will be available for these entities. To enable the history option in your installation, add the following to your `configuration.yaml` file: @@ -42,9 +42,9 @@ Configuration variables: - **entities** (*Optional*): The list of entity ids to be included to the history. - **domains** (*Optional*): The list of domains to be included to the history. -Without any `include` or `exclude` configuration the history displays graphs for every entity (well that's not exactly true - for instance `hidden` entities or `scenes` are never shown) on a given date. If you are only interested in some of the entities you several options: +Without any `include` or `exclude` configuration the history displays graphs for every entity (well that's not exactly true - for instance `hidden` entities or `scenes` are never shown) on a given date. If you are only interested in some of the entities you have several options: -Define domains and entities to `exclude` (aka. blacklist). This is convenient when you are basically happy with the information displayed, but just want to remove some entities or domains. Usually these are entities/domains which do not change (like `weblink`) or rarely change (`updater` or `automation`). +Define domains and entities to `exclude` (aka. blacklist). This is convenient when you are basically happy with the information displayed, but just want to remove some entities or domains. Usually these are entities/domains which do not change (like `weblink`) or rarely change (like `updater` or `automation`). ```yaml # Example configuration.yaml entry with exclude @@ -59,7 +59,7 @@ history: - sensor.date ``` -Define domains and entities to display by using the `include` configuration (aka. whitelist). If you have a lot of entities in your system and your `exclude` lists possibly get very large, it might be better just to define the entities or domains to display. +Define domains and entities to display by using the `include` configuration (aka. whitelist). If you have a lot of entities in your system and your `exclude` list is getting too large, it might be better just to define the entities or domains to `include`. ```yaml # Example configuration.yaml entry with include @@ -71,7 +71,7 @@ history: - media_player ``` -Use the `include` list to define the domains/entities to display, and exclude some of them with in the `exclude` list. This makes sense if you for instance include the `sensor` domain, but want to exclude some specific sensors. Instead of adding every sensor entity to the `include` `entities` list just include the `sensor` domain and exclude the sensor entities you are not interested in. +Use the `include` list to define the domains/entities to display, and exclude some of them within the `exclude` list. This makes sense if you, for instance, include the `sensor` domain, but want to exclude some specific sensors. Instead of adding every sensor entity to the `include` `entities` list just include the `sensor` domain and exclude the sensor entities you are not interested in. Note that the order of any `include` `entities` will be displayed as listed in the configuration, otherwise, the display order is arbitrary. ```yaml # Example configuration.yaml entry with include and exclude @@ -87,9 +87,24 @@ history: - sensor.date ``` +If you'd like the order of display of the sensors to follow the way +they are listed in the included entity list, you can set the flag +`use_include_order` to True. + +```yaml +# Example configuration.yaml entry using specified entity display order +history: + use_include_order: True + include: + entities: + - sun.sun + - light.front_porch +``` + + #### {% linkable_title Implementation details %} -The history is stored in a SQLite database `home-assistant_v2.db` within your configuration directory if the `recorder` component is not set up differently. +The history is stored in a SQLite database `home-assistant_v2.db` within your configuration directory unless the `recorder` component is set up differently. - events table is all events except `time_changed` that happened while recorder component was running. - states table contains all the `new_state` values of `state_changed` events. @@ -105,7 +120,7 @@ When the `history` component queries the states table it only selects states whe #### {% linkable_title On dates %} -SQLite databases do not support native dates. That's why all the dates are saved in seconds since the UNIX epoch. Convert them manually using this site or in Python: +SQLite databases do not support native dates. That's why all the dates are saved in seconds since the UNIX epoch. Convert them manually using [this site](https://www.epochconverter.com/) or in Python: ```python from datetime import datetime @@ -114,4 +129,4 @@ datetime.fromtimestamp(1422830502) #### {% linkable_title API %} -The history information are also available through the [RESTful API](/developers/rest_api/#get-apihistory). +The history information is also available through the [RESTful API](/developers/rest_api/#get-apihistory). diff --git a/source/_components/hive.markdown b/source/_components/hive.markdown index 7c3d47a3c9f..16f2a77ac43 100644 --- a/source/_components/hive.markdown +++ b/source/_components/hive.markdown @@ -14,11 +14,13 @@ ha_iot_class: "Cloud Polling" --- -This Hive component is the main component to set up and integrate all supported Hive devices. Once configured with the minimum required details it will detect and add all your Hive devices into Home Assistant, including support for multizone heating. +The `hive` component is the main component to set up and integrate all supported Hive devices. Once configured with the minimum required details it will detect and add all your Hive devices into Home Assistant, including support for multizone heating. This component uses the unofficial API used in the official Hive website [https://my.hivehome.com](https://my.hivehome.com), and you will need to use the same Username and Password you use on the Hive website to configure this Hive component in Home Assistant. -To add your Hive devices into your Home Assistant installation, using the default scan_interval, add the following to your 'configuration.yaml' file: + + +To add your Hive devices into your Home Assistant installation, add the following to your `configuration.yaml` file: ```yaml # Example configuration.yaml entry @@ -49,6 +51,7 @@ The Hive Home Assistant platform currently supports the following Hive devices: - Hive Active Heating (including hot water and Hive Multizone) - Hive Active Light Dimmable - Hive Active Light Cool to Warm White +- Hive Active Light Color Changing - Hive Active Plug - Hive Window or Door Sensor - Hive Motion Sensor diff --git a/source/_components/homekit.markdown b/source/_components/homekit.markdown new file mode 100644 index 00000000000..74bb8a7c48a --- /dev/null +++ b/source/_components/homekit.markdown @@ -0,0 +1,312 @@ +--- +layout: page +title: "HomeKit" +description: "Instructions on how to setup the HomeKit component in Home Assistant." +date: 2018-02-20 17:30 +sidebar: true +comments: false +sharing: true +footer: true +ha_category: Voice +ha_release: 0.64 +logo: apple-homekit.png +--- + +The `HomeKit` component allows you to forward entities from Home Assistant to Apple `HomeKit`, so they can be controlled from Apple's `Home` app and `Siri`. Please make sure that you have read the [considerations](#considerations) listed below to save you some trouble later. + +

+ It might be necessary to install an additional package: + `$ sudo apt-get install libavahi-compat-libdnssd-dev` +

+ +

+ If you are upgrading Home Assistant from `0.65.x` and have used the HomeKit component, some accessories may not respond or may behave unusually. To fix these problems, you will need to remove the Home Assistant Bridge from your Home, stop Home Assistant and delete the `.homekit.state` file in your configuration folder and follow the Homekit [setup](#setup) steps again. +

+ +```yaml +# Example configuration.yaml entry configuring HomeKit +homekit: + filter: + include_domains: + - alarm_control_panel + - light + - media_player + entity_config: + alarm_control_panel.home: + code: 1234 + light.kitchen_table: + name: Kitchen Table Light + lock.front_door: + code: 1234 + media_player.living_room: + feature_list: + - feature: on_off + - feature: play_pause + - feature: play_stop + - feature: toggle_mute + switch.bedroom_outlet: + type: outlet +``` + +{% configuration %} + homekit: + description: HomeKit configuration. + required: true + type: map + keys: + auto_start: + description: Flag if the HomeKit Server should start automatically after the Home Assistant Core Setup is done. ([Disable Auto Start](#disable-auto-start)) + required: false + type: boolean + default: true + port: + description: Port for the HomeKit extension. + required: false + type: int + default: 51827 + name: + description: Need to be individual for each instance of Home Assistant using the component on the same local network. Between `3` and `25` characters. Alphanumeric and spaces allowed. + required: false + type: string + default: '`Home Assistant Bridge`' + ip_address: + description: The local network IP address. Only necessary if the default from Home Assistant does not work. + required: false + type: string + filter: + description: Filters for entities to be included / excluded from HomeKit. ([Configure Filter](#configure-filter)) + required: false + type: map + keys: + include_domains: + description: Domains to be included. + required: false + type: list + include_entities: + description: Entities to be included. + required: false + type: list + exclude_domains: + description: Domains to be excluded. + required: false + type: list + exclude_entities: + description: Entities to be excluded. + required: false + type: list + entity_config: + description: Configuration for specific entities. All subordinate keys are the corresponding entity ids to the domains, e.g. `alarm_control_panel.alarm`. + required: false + type: map + keys: + '``': + description: Additional options for specific entities. + required: false + type: map + keys: + name: + description: Name of entity to show in HomeKit. HomeKit will cache the name on the first run so a device must be removed and then re-added for any change to take effect. + required: false + type: string + code: + description: Code to `arm / disarm` an alarm or `lock / unlock` a lock. Only applicable for `alarm_control_panel` or `lock` entities. + required: false + type: string + default: '``' + feature_list: + description: Only for `media_player` entities. List of feature dictionaries to add for a given entity. Comparable to the platform schema. + required: false + type: list + keys: + feature: + description: Name of the feature to add to the entity representation. Valid features are `on_off`, `play_pause`, `play_stop` and `toogle_mute`. The media_player entity must support the feature to be valid. + required: true + type: string + type: + description: Only for `switch` entities. Type of accessory to be created within HomeKit. Valid types are `switch` and `outlet`. HomeKit will cache the type on the first run so a device must be removed and then re-added for any change to take effect. + required: false + type: string + default: '`switch`' +{% endconfiguration %} + +

+ If you use Z-Wave, or `discovery:` you'll need to disable auto-start, see the [section below](#disable-auto-start) for details on how to do this. You'll then need to start the HomeKit component once Z-Wave is ready, or an appropriate delay to allow your entities to be discovered. +

+ +## {% linkable_title Setup %} + +To enable the `HomeKit` component in Home Assistant, add the following to your configuration file: + +```yaml +# Example for HomeKit setup +homekit: +``` + +After Home Assistant has started, the entities specified by the filter are exposed to `HomeKit` if they are [supported](#supported-components). To add them: +1. Open the Home Assistant frontend. A new card will display the `pin code`. +1. Open the `Home` app. +2. Choose `Add Accessory`, than select `Don't Have a Code or Can't Scan?` and enter the `pin code`. +4. Confirm the you are adding an `Uncertified Accessory` by clicking on `Add Anyway`. +5. Follow the setup be clicking on `Next` and lastly `Done` in the top right hand corner. +6. The `Home Assistant` Bridge and the Accessories should now be listed in the `Home` app. + +After the setup is completed you should be able to control your Home Assistant components through `Home` and `Siri`. + + +## {% linkable_title Considerations %} + + +### {% linkable_title Accessory ID %} + +Currently this component uses the `entity_id` to generate a unique `accessory id (aid)` for `HomeKit`. The `aid` is used to identify a device and save all configurations made for it. This however means that if you decide to change an `entity_id` all configurations for this accessory made in the `Home` app will be lost. + +### {% linkable_title Device Limit %} + +The HomeKit guidelines only allow a maximum of 100 unique accessories (`aid`) per bridge. Be mindful of this when configuring the filter(s). + +### {% linkable_title Persistence Storage %} + +Unfortunately `HomeKit` doesn't support any kind of persistent storage - only the configuration for accessories that are added to the `Home Assistant Bridge` are kept. To avoid problems it is recommended to use an automation to always start `HomeKit` with at least the same entities setup. If for some reason some entities are not setup, their config will be deleted. (State unknown or similar will not cause any issues.) + +A common situation might be if you decide to disable parts of the configuration for testing. Please make sure to disable `auto start` and `turn off` the `Start HomeKit` automation (if you have one). + + +## {% linkable_title Disable Auto Start %} + +Depending on your individual setup, it might be necessary to disable `Auto Start` for all accessories to be available for `HomeKit`. Only those entities that are fully setup when the `HomeKit` component 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 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: + +{% raw %} +```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 + action: + - service: homekit.start +``` +{% endraw %} + +For a general delay where your component doesn't generate an event, you can also do: + +{% raw %} +```yaml +# Example using a delay after 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 +``` +{% endraw %} + + +## {% linkable_title Configure Filter %} + +By default no entity will be excluded. To limit which entities are being exposed to `HomeKit`, you can use the `filter` parameter. Keep in mind only [supported components](#supported-components) can be added. + +{% raw %} +```yaml +# Example filter to include specified domains and exclude specified entities +homekit: + filter: + include_domains: + - alarm_control_panel + - light + exclude_entities: + - light.kitchen_light +``` +{% endraw %} + +Filters are applied as follows: + +1. No includes or excludes - pass all entities +2. Includes, no excludes - only include specified entities +3. Excludes, no includes - only exclude specified entities +4. Both includes and excludes: + * Include domain specified + - if domain is included, and entity not excluded, pass + - if domain is not included, and entity not included, fail + * Exclude domain specified + - if domain is excluded, and entity not included, fail + - if domain is not excluded, and entity not excluded, pass + - if both include and exclude domains specified, the exclude domains are ignored + * Neither include or exclude domain specified + - if entity is included, pass (as #2 above) + - if entity include and exclude, the entity exclude is ignored + + +## {% linkable_title Supported Components %} + +The following components are currently supported: + +| Component | Type Name | Description | +| --------- | --------- | ----------- | +| alarm_control_panel | SecuritySystem | All security systems. | +| automation / input_boolean / remote / script | Switch | All represented as switches. | +| binary_sensor | Sensor | Support for `co2`, `door`, `garage_door`, `gas`, `moisture`, `motion`, `occupancy`, `opening`, `smoke` and `window` device classes. Defaults to the `occupancy` device class for everything else. | +| climate | Thermostat | All climate devices. | +| cover | GarageDoorOpener | All covers that support `open` and `close` and have `garage` as their `device_class`. | +| cover | WindowCovering | All covers that support `set_cover_position`. | +| cover | WindowCovering | All covers that support `open_cover` and `close_cover` through value mapping. (`open` -> `>=50`; `close` -> `<50`) | +| cover | WindowCovering | All covers that support `open_cover`, `stop_cover` and `close_cover` through value mapping. (`open` -> `>70`; `close` -> `<30`; `stop` -> every value in between) | +| device_tracker | Sensor | Support for `occupancy` device class. | +| fan | Fan | Support for `on / off`, `direction` and `oscillating`. | +| light | Light | Support for `on / off`, `brightness` and `rgb_color`. | +| lock | DoorLock | Support for `lock / unlock`. | +| media_player | MediaPlayer | Represented as a series of switches which control `on / off`, `play / pause`, `play / stop`, or `mute` depending on `supported_features` of entity and the `mode` list specified in `entity_config`. | +| sensor | TemperatureSensor | All sensors that have `Celsius` or `Fahrenheit` as their `unit_of_measurement` or `temperature` as their `device_class`. | +| sensor | HumiditySensor | All sensors that have `%` as their `unit_of_measurement` and `humidity` as their `device_class`. | +| sensor | AirQualitySensor | All sensors that have `pm25` as part of their `entity_id` or `pm25` as their `device_class` | +| sensor | CarbonDioxideSensor | All sensors that have `co2` as part of their `entity_id` or `co2` as their `device_class` | +| sensor | LightSensor | All sensors that have `lm` or `lx` as their `unit_of_measurement` or `illuminance` as their `device_class` | +| switch | Switch | Represented as a switch by default but can be changed by using `type` within `entity_config`. | + + +## {% linkable_title Error reporting %} + +If you encounter any issues or bug and want to report them on `GitHub`, please follow these steps to make it easier for others to help and get your issue solved. + +1. Enable debugging mode: +```yaml +logger: + default: warning + logs: + homeassistant.components.homekit: debug + pyhap: debug +``` +2. Reproduce the bug / problem you have encountered. +3. Stop Home Assistant and copy the log from the log file. That is necessary since some errors only get logged, when Home Assistant is being shutdown. +4. Follow this link: [home-assistant/issues/new](https://github.com/home-assistant/home-assistant/issues/new?labels=component: homekit) and open a new issue. +5. Fill out all fields and especially include the following information: + - The configuration entries for `homekit` and the `component` that is causing the issue. + - The log / traceback you have generated before. + - Screenshots of the failing entity in the `states` panel. + +## {% linkable_title Troubleshooting PIN not appearing %} + +In some instances, the PIN will not appear as a persistent status or in the log files despite deleting `.homekit.state`, enabling logging, and reboot. The log files will include the error ```Duplicate AID found when attempting to add accessory```. + +In such cases, modifying your configuration.yaml to add a filter limiting the included entities similar to the following: + +```yaml +filter: + include_domains: + - light +``` + +Restart Home-Assistant and re-attempt pairing - a persistent status should now correctly appear. diff --git a/source/_components/homekit_controller.markdown b/source/_components/homekit_controller.markdown new file mode 100644 index 00000000000..daa9e79b71e --- /dev/null +++ b/source/_components/homekit_controller.markdown @@ -0,0 +1,37 @@ +--- +layout: page +title: "HomeKit controller support" +description: "Instructions how to integrate your HomeKit devices within Home Assistant." +date: 2018-03-19 21:04 +sidebar: true +comments: false +sharing: true +footer: true +logo: apple-homekit.png +ha_category: Hub +ha_release: 0.68 +ha_iot_class: "Local Polling" +--- + +[HomeKit](https://developer.apple.com/homekit/) controller integration for Home Assistant allows you to connect HomeKit accessories to Home Assistant. This component should not be confused with the [HomeKit](/components/homekit/) component, which allows you to control Home Assistant devices via HomeKit. + +

+ You may need additional packages to support the HomeKit Python module: + `$ sudo apt-get install libgmp-dev libmpfr-dev libmpc-dev` +

+ +There is currently support for the following device types within Home Assistant: + +- [Climate](/components/climate.homekit_controller/) +- [Light](/components/light.homekit_controller/) +- [Switch](/components/switch.homekit_controller/) + +The component will be automatically configured if the [`discovery:`](/components/discovery/) component is enabled and an enable entry added for HomeKit: + +```yaml +discovery: + enable: + - homekit +``` + +For each detected HomeKit accessory, a configuration prompt will appear in the web front end. Use this to provide the HomeKit PIN. Note that HomeKit accessories can only be paired to one device at once. If your device is currently paired with Siri, you will need to reset it in order to pair it with Home Assistant. Once Home Assistant is configured to work with the device, you can export it back to Siri with the [`HomeKit`](/components/homekit/) component. diff --git a/source/_components/homematic.markdown b/source/_components/homematic.markdown index 93cf903eb44..5f860b4d6d0 100644 --- a/source/_components/homematic.markdown +++ b/source/_components/homematic.markdown @@ -2,7 +2,7 @@ layout: page title: "Homematic" description: "Instructions for integrating Homematic into Home Assistant." -date: 2016-11-27 21:38 +date: 2018-02-13 19:10 sidebar: true comments: false sharing: true @@ -13,73 +13,82 @@ ha_iot_class: "Local Push" featured: false --- - -The [Homematic](http://www.homematic.com/) component provides bi-directional communication with your CCU/Homegear. It uses a XML-RPC connection to set values on devices and subscribes to receive events the devices and the CCU emit. +The [Homematic](http://www.homematic.com/) component provides bi-directional communication with your CCU/Homegear. It uses a XML-RPC connection to set values on devices and subscribes to receive events the devices and the CCU emit. If you are using Homegear with paired [Intertechno](http://intertechno.at/) devices, uni-directional communication is possible as well. Device support is available for most of the wired and wireless devices, as well as a few IP devices. If you have a setup with mixed protocols, you have to configure additional hosts with the appropriate ports. The default is using port 2001, which are wireless devices. Wired devices usually are available through port 2000 and IP devices through port 2010. The virtual thermostatgroups the CCU provides use port 9292 **and** require you to set the `path` setting to `/groups`. -If you want to see if a specific device you have is supported, head over to the [pyhomematic](https://github.com/danielperna84/pyhomematic/tree/master/pyhomematic/devicetypes) repository and browse through the source code. A dictionary with the device identifiers (e.g. HM-Sec-SC-2) can be found within the relevant modules near the bottom. If your device is not supported, feel free to contribute. +If you want to see if a specific device you have is supported, head over to the [pyhomematic](https://github.com/danielperna84/pyhomematic/tree/master/pyhomematic/devicetypes) repository and browse through the source code. A dictionary with the device identifiers (e.g., HM-Sec-SC-2) can be found within the relevant modules near the bottom. If your device is not supported, feel free to contribute. We automatically detect all devices we currently support and try to generate useful names. If you enable name-resolving, we try to fetch names from Metadata (Homegear), via JSON-RPC or the XML-API you may have installed on your CCU. Since this may fail this is disabled by default. -You can manually rename the created entities by using Home Assistants [Customizing](https://home-assistant.io/getting-started/customizing-devices/) feature. With it you are also able to hide entities you don't want to see in the UI. +You can manually rename the created entities by using Home Assistant's [Customizing](/docs/configuration/customizing-devices/) feature. With it you are also able to hide entities you don't want to see in the UI. To set up the component, add the following information to your `configuration.yaml` file: ```yaml homematic: - hosts: + interfaces: wireless: - ip: 127.0.0.1 + host: 127.0.0.1 ``` Configuration variables (global): -- **hosts** (*Required*): Configuration for each host to integrate into Home Assistant. +- **interfaces** (*Required*): Configuration for each XML-RPC interface to integrate into Home Assistant. +- **hosts** (*Optional*): Configuration for each Hub (CCU/Homegear) to integrate into Home Assistant. - **local_ip** (*Optional*): IP of device running Home Assistant. Override auto-detected value for exotic network setups. - **local_port** (*Optional*): Port for connection with Home Assistant. By default it is randomly assigned. -Configuration variables (host): +Configuration variables (interface): -- **ip** (*Required*): IP address of CCU/Homegear device. +- **host** (*Required*): IP address or Hostname of CCU/Homegear device or Hass.io add-on. - **port** (*Optional*): Port of CCU/Homegear XML-RPC Server. Wireless: 2001, wired: 2000, IP: 2010, thermostatgroups: 9292. - **callback_ip** (*Optional*): Set this, if Home Assistant is reachable under a different IP from the CCU (NAT, Docker etc.). - **callback_port** (*Optional*): Set this, if Home Assistant is reachable under a different port from the CCU (NAT, Docker etc.). - **resolvenames** (*Optional*): [`metadata`, `json`, `xml`] Try to fetch device names. Defaults to `false` if not specified. +- **jsonport** (*Optional*): Port of CCU JSON-RPC Server. The default is 80, but it may be different when running CCU virtually via Docker. - **username** (*Optional*): When fetching names via JSON-RPC, you need to specify a user with guest-access to the CCU. - **password** (*Optional*): When fetching names via JSON-RPC, you need to specify the password of the user you have configured above. -- **primary** (*Optional*): Set to `true` when using multiple hosts and this host should provide the services and variables. -- **variables** (*Optional*): Set to `true` if you want to use CCU2/Homegear variables. Should only be enabled for the primary host. When using a CCU credentials are required. - **path** (*Optional*): Set to `/groups` when using port 9292. +Configuration variables (host): + +- **host** (*Required*): IP address of CCU/Homegear device. +- **username** (*Optional*): When fetching names via JSON-RPC, you need to specify a user with guest-access to the CCU. +- **password** (*Optional*): When fetching names via JSON-RPC, you need to specify the password of the user you have configured above. + #### Example configuration with multiple protocols and some other options set: ```yaml homematic: - hosts: + interfaces: rf: - ip: 127.0.0.1 + host: 127.0.0.1 resolvenames: json username: Admin password: secret - primary: true - variables: true wired: - ip: 127.0.0.1 + host: 127.0.0.1 port: 2000 resolvenames: json username: Admin password: secret ip: - ip: 127.0.0.1 + host: 127.0.0.1 port: 2010 groups: - ip: 127.0.0.1 + host: 127.0.0.1 port: 9292 resolvenames: json username: Admin password: secret path: /groups + hosts: + ccu2: + host: 127.0.0.1 + username: Admin + password: secret + ``` ### {% linkable_title The `resolvenames` option %} @@ -100,7 +109,7 @@ This does *not* affect the entities in Home Assistant. They all use their own co ### {% linkable_title Reading attributes of entities %} -Most devices have, besides their state, additional attributes like their battery state or valve position. These can be accessed using templates in automations, or even as their own entities using the [template sensor](https://home-assistant.io/components/sensor.template/) component. Here's an example of a template sensor that exposes the valve state of a thermostat. +Most devices have, besides their state, additional attributes like their battery state or valve position. These can be accessed using templates in automations, or even as their own entities using the [template sensor](/components/sensor.template/) component. Here's an example of a template sensor that exposes the valve state of a thermostat. ```yaml sensor: @@ -115,19 +124,19 @@ sensor: ### {% linkable_title Variables %} It is possible to read and set values of system variables you have setup on the CCU/Homegear. The supported types for setting values are float- and bool-variables. -The states of the variables are available through the attributes of your hub entity (e.g. `homematic.rf`). Use templates (as mentioned above) to make your variables available to automations or as entities. +The states of the variables are available through the attributes of your hub entity (e.g., `homematic.ccu2`). Use templates (as mentioned above) to make your variables available to automations or as entities. The values of variables are polled from the CCU/Homegear in an interval of 30 seconds. Setting the value of a variable happens instantly and is directly pushed. ### {% linkable_title Events %} When HomeMatic devices change their state or some other internal value, the CCU/Homegear sends event messages to Home Assistant. These events are automatically parsed and the entities in Home Assistant are updated. However, you can also manually use these events to trigger automations. Two event-types are available: -* **homematic.keypress**: For devices with buttons, see information below -* **homematic.impulse**: For impulse sensors +- **homematic.keypress**: For devices with buttons, see information below +- **homematic.impulse**: For impulse sensors #### {% linkable_title Devices with buttons %} -Devices with buttons (e.g. HM-Sen-MDIR-WM55, remote controls) may not be fully visible in the UI. This is intended, as buttons don't serve any value here and all they do is trigger events. +Devices with buttons (e.g., HM-Sen-MDIR-WM55, remote controls) may not be fully visible in the UI. This is intended, as buttons don't serve any value here and all they do is trigger events. As an example: The HM-Sen-MDIR-WM55 motion detector will be displayed as 2 entities. A motion sensor and a brightness sensor. On top of that we have 2 sets (one set per button) of 4 events: PRESS_SHORT, PRESS_LONG, PRESS_CONT, PRESS_LONG_RELEASE. Be aware, that there are devices which don't provide all of these events. But in general: if you can press it, it usually at least has PRESS_SHORT. @@ -148,17 +157,41 @@ automation: ``` The channel parameter is equal to the channel of the button you are configuring the automation for. You can view the available channels in the UI you use to pair your devices. -The name depends on if you chose to resolve names or not. If not, it will be the device ID (e.g. LEQ1234657). If you chose to resolve names (and that is successful), it will be the name you have set in your CCU or in the metadata (e.g. "Kitchen Switch"). +The name depends on if you chose to resolve names or not. If not, it will be the device ID (e.g., LEQ1234657). If you chose to resolve names (and that is successful), it will be the name you have set in your CCU or in the metadata (e.g., "Kitchen Switch"). + +You can test whether your button works within Home Assistant if you look at the terminal output. When pressing a button, lines similar to those should appear: + +```bash +2018-01-27 11:51:32 INFO (Thread-12) [pyhomematic.devicetypes.generic] HMGeneric.event: address=MEQ1234567:6, interface_id=homeassistant-CCU2, key=PRESS_SHORT, value=True +2018-01-27 11:51:32 INFO (MainThread) [homeassistant.core] Bus:Handling +2018-01-27 11:51:32 INFO (Thread-12) [pyhomematic.devicetypes.generic] HMGeneric.event: address=MEQ1234567:6, interface_id=homeassistant-CCU2, key=INSTALL_TEST, value=True +``` + +It may happen that "your_nice_name" is not resolved correctly; the according message (#2 in the above example) will be missing. This might be due to secure communication between your HM interface and the HM device. You can change the communication from "secure" to "standard" within your HM-interface to solve that issue (in "Einstellungen" - "Geräte" find your device and change "Übertragungsmodus" from secure to standard) - not recommended for devices that should have secure communication. + +#### {% linkable_title `homematic.keypress` events for HomeMatic IP devices %} + +To get the `homematic.keypress` event for some HomeMatic IP devices like WRC2 / WRC6 (wall switch) or SPDR (passage sensor) you have to temporary create an empty program for each channel in the CCU: + +1. In the menu of your CCU's admin panel go to `Programs and connections` > `Programs & CCU connection` +2. Go to `New` in the footer menu +3. Click the plus icon below `Condition: If...` and press the button `Device selection` +4. Select one of the device's channels you need (1-2 / 1-6 for WRC2 / WRC6 and 2-3 for SPDR) +5. Save the program with the `OK` button +6. When your channel is working now, you can edit it to select the other channels one by one +7. At the end, you can delete this program from the CCU ### {% linkable_title Services %} -* *homematic.virtualkey*: Simulate a keypress (or other valid action) on CCU/Homegear with device or virtual keys. -* *homematic.reconnect*: Reconnect to CCU/Homegear without restarting Home Assistant (useful when CCU has been restarted) -* *homematic.set_var_value*: Set the value of a system variable. -* *homematic.set_dev_value*: Control a device manually (even devices without support). Equivalent to setValue-method from XML-RPC. +- *homematic.virtualkey*: Simulate a keypress (or other valid action) on CCU/Homegear with device or virtual keys. +- *homematic.reconnect*: Reconnect to CCU/Homegear without restarting Home Assistant (useful when CCU has been restarted) +- *homematic.set_variable_value*: Set the value of a system variable. +- *homematic.set_device_value*: Control a device manually (even devices without support). Equivalent to setValue-method from XML-RPC. #### {% linkable_title Examples %} -Simulate a button being pressed + +Simulate a button being pressed: + ```yaml ... action: @@ -169,7 +202,8 @@ action: param: PRESS_LONG ``` -Open KeyMatic +Open KeyMatic: + ```yaml ... action: @@ -180,13 +214,14 @@ action: param: OPEN ``` -Set boolean variable to true +Set boolean variable to true: + ```yaml ... action: - service: homematic.set_var_value + service: homematic.set_variable_value data: - entity_id: homematic.rf + entity_id: homematic.ccu2 name: Variablename value: true ``` @@ -196,11 +231,12 @@ action: If you are familiar with the internals of HomeMatic devices, you can manually set values on the devices. This can serve as a workaround if support for a device is currently not available, or only limited functionality has been implemented. Using this service provides you direct access to the setValue-method of the primary connection. If you have multiple hosts, you may select the one hosting a specific device by providing the proxy-parameter with a value equivalent to the name you have chosen. In the example configuration from above `rf`, `wired` and `ip` would be valid values. -Manually turn on a switch actor +Manually turn on a switch actor: + ```yaml ... action: - service: homematic.set_dev_value + service: homematic.set_device_value data: address: LEQ1234567 channel: 1 @@ -208,14 +244,89 @@ action: value: true ``` -Manually set temperature on thermostat +Manually set temperature on thermostat: + ```yaml ... action: - service: homematic.set_dev_value + service: homematic.set_device_value data: address: LEQ1234567 channel: 4 param: SET_TEMPERATURE value: 23.0 ``` + +Manually set lock on KeyMatic devices: + +```yaml +... +action: + service: lock.lock + entity_id: lock.leq1234567 +``` + +Manually set unlock on KeyMatic devices: + +```yaml +... +action: + service: lock.unlock + entity_id: lock.leq1234567 +``` + +#### {% linkable_title Detecting lost connections %} + +When the connection to your HomeMatic CCU or Homegear is lost, Home Assistant will stop getting updates from devices. This may happen after rebooting the CCU for example. Due to the nature of the communication protocol this cannot be handled automatically, so you must call *homematic.reconnect* in this case. That's why it is usually a good idea to check if your HomeMatic components are still updated properly, in order to detect connection losses. This can be done in several ways through an automation: + +- If you have a sensor which you know will be updated frequently (e.g. an outdoor temperature sensor or light sensor) you could set up an automation like this: + + ```yaml + automation: + - alias: Homematic Reconnect + trigger: + platform: state + entity_id: sensor.outdoor_light_level + for: + hours: 3 + action: + # Reconnect, if sensor has not been updated for over 3 hours + service: homematic.reconnect + ``` + +- If you have a CCU you can also create a system variable on the CCU, which stores it's last reboot time. Since Home Assistant can still refresh system variables from the CCU (even after a reboot), this is a pretty reliable way to detect situations where you need to call *homematic.reconnect*. This is how this can be done: + + 1. Create a string variable **V_Last_Reboot** on the CCU + + 2. Creata a new programm on the CCU **without any conditions**, which executes the following *HM-Script* with a delay of 30 seconds: + + ```javascript + var obj = dom.GetObject("V_Last_Reboot"); + string now = system.Date("%d.%m.%Y %H:%M:%S"); + obj.State(now); + ``` + + The HomeMatic CCU will execute all active programs which meet their conditions (none in this case) on every reboot. + + 3. Set up a template sensor in Home Assistant, which contains the value of the system variable: + + ```yaml + - platform: template + sensors: + v_last_reboot: + value_template: "{% raw %}{{ state_attr('homematic.ccu2', 'V_Last_Reboot') or '01.01.1970 00:00:00' }}{% endraw %}" + icon_template: "mdi:clock" + entity_id: homematic.ccu2 + ``` + + 4. Set up an automation which calls *homematic.reconnect* whenever the sensor variable changes: + + ```yaml + automation: + - alias: Homematic CCU Reboot + trigger: + platform: state + entity_id: sensor.v_last_reboot + action: + service: homematic.reconnect + ``` diff --git a/source/_components/homematicip_cloud.markdown b/source/_components/homematicip_cloud.markdown new file mode 100644 index 00000000000..70f90d77af9 --- /dev/null +++ b/source/_components/homematicip_cloud.markdown @@ -0,0 +1,44 @@ +--- +layout: page +title: "HomematicIP Cloud" +description: "Instructions for integrating HomematicIP into Home Assistant." +date: 2018-04-02 13:40 +sidebar: true +comments: false +sharing: true +footer: true +logo: homematicip_cloud.png +ha_category: Hub +ha_iot_class: "Cloud Push" +ha_release: 0.66 +featured: false +--- + +The [HomematicIP](http://www.homematic-ip.com) component platform is used as an interface to the cloud server. +For for communication [homematicip-rest-api](https://github.com/coreGreenberet/homematicip-rest-api) is used. + +To set up the component: + +- generate the authentication token: +```yaml +generate_auth_token.py +``` + +- add the information to your `configuration.yaml` file: +```yaml +homematicip_cloud: + - accesspoint: IDENTIFIER + authtoken: AUTHTOKEN + - name: Location2 + accesspoint: IDENTIFIER2 + authtoken: AUTHTOKEN2 +``` + +Configuration variables (global): + +- **name** (*Optional*): Name to identify your access point, this will be + used to prefix your device names. +- **accesspoint** (*Required*): This is the access point id (SGTIN) +- **authtoken** (*Required*): Authentification token generated with +`generate_auth_token.py`. + diff --git a/source/_components/http.markdown b/source/_components/http.markdown index e6e396109c0..0616476bf07 100644 --- a/source/_components/http.markdown +++ b/source/_components/http.markdown @@ -17,6 +17,10 @@ The `http` component serves all files and data required for the Home Assistant f It is HIGHLY recommended that you set the `api_password`, especially if you are planning to expose your installation to the internet.

+

+Don't use option `server_host` on a hass.io installation! +

+ ```yaml # Example configuration.yaml entry http: @@ -26,18 +30,20 @@ http: Configuration variables: - **api_password** (*Optional*): Protect Home Assistant with a password. -- **server_host** (*Optional*): Only listen to incoming requests on specific IP/host (default: accept all) +- **server_host** (*Optional*): Only listen to incoming requests on specific IP/host (default: bind to `0.0.0.0` which means accept all IPv4 connections). Use `server_host: "::0"` if you want to listen to (and only) IPv6. - **server_port** (*Optional*): Let you set a port to use. Defaults to 8123. - **base_url** (*Optional*): The URL that Home Assistant is available on the internet. For example: `hass-example.duckdns.org:8123`. Defaults to the local IP address. The iOS app finds local installations, if you have an outside URL use this so that you can auto-fill when discovered in the app. - **ssl_certificate** (*Optional*): Path to your TLS/SSL certificate to serve Home Assistant over a secure connection. +- **ssl_peer_certificate** (*Optional*): Path to the client/peer TLS/SSL certificate to accept secure connections from. - **ssl_key** (*Optional*): Path to your TLS/SSL key to serve Home Assistant over a secure connection. -- **cors_allowed_origins** (*Optional*): A list of origin domain names to allow [CORS](https://en.wikipedia.org/wiki/Cross-origin_resource_sharing) requests from. Enabling this will set the `Access-Control-Allow-Origin` header to the Origin header if it is found in the list, and the `Access-Control-Allow-Headers` header to `Origin, Accept, X-Requested-With, Content-type, X-HA-access`. You must provide the exact Origin, i.e. `https://home-assistant.io` will allow requests from `https://home-assistant.io` but __not__ `http://home-assistant.io`. -- **use_x_forwarded_for** (*Optional*): Enable parsing of the `X-Forwarded-For` header, passing on the client's correct IP address in proxied setups. You should only enable this in a trustworthy network environment, as clients passing that header could easily spoof their source IP address. Defaults to False. -- **trusted_networks** (*Optional*): List of trusted networks, consisting of IP addresses or networks, that are allowed to bypass password protection when accessing Home Assistant. It should be noted that if you use a reverse proxy, all requests to Home Assistant, regardless of source, will arrive from the reverse proxy IP address. Therefore in a reverse proxy scenario, this option should be used with extreme care. +- **cors_allowed_origins** (*Optional*): A list of origin domain names to allow [CORS](https://en.wikipedia.org/wiki/Cross-origin_resource_sharing) requests from. Enabling this will set the `Access-Control-Allow-Origin` header to the Origin header if it is found in the list, and the `Access-Control-Allow-Headers` header to `Origin, Accept, X-Requested-With, Content-type, X-HA-access`. You must provide the exact Origin, i.e. `https://www.home-assistant.io` will allow requests from `https://www.home-assistant.io` but __not__ `http://www.home-assistant.io`. +- **use_x_forwarded_for** (*Optional*): Enable parsing of the `X-Forwarded-For` header, passing on the client's correct IP address in proxied setups. You must also whitelist trusted proxies using the `trusted_proxies` setting below for this to work. Non-whitelisted requests with this header will be considered IP spoofing attacks, and the header will, therefore, be ignored. Defaults to False. +- **trusted_proxies** (*Optional*): List of trusted proxies, consisting of IP addresses or networks, that are allowed to set the `X-Forwarded-For` header. This is required when using `use_x_forwarded_for` because all requests to Home Assistant, regardless of source, will arrive from the reverse proxy IP address. Therefore in a reverse proxy scenario, this option should be set with extreme care. +- **trusted_networks** (*Optional*): List of trusted networks, consisting of IP addresses or networks, that are allowed to bypass password protection when accessing Home Assistant. If using a reverse proxy with the `use_x_forwarded_for` option enabled, requests proxied to Home Assistant with a trusted `X-Forwarded-For` header will appear to come from the IP given in that header instead of the proxy IP. - **ip_ban_enabled** (*Optional*): Flag indicating whether additional IP filtering is enabled. Defaults to False. - **login_attempts_threshold** (*Optional*): Number of failed login attempt from single IP after which it will be automatically banned if `ip_ban_enabled` is True. Defaults to -1, meaning that no new automatic bans will be added. -The sample below shows a configuration entry with possible values: +The sample below shows a configuration entry with possible values: ```yaml # Example configuration.yaml entry @@ -48,40 +54,55 @@ http: ssl_key: /etc/letsencrypt/live/hass.example.com/privkey.pem cors_allowed_origins: - https://google.com - - https://home-assistant.io + - https://www.home-assistant.io use_x_forwarded_for: True + trusted_proxies: + - 127.0.0.1 + - ::1 trusted_networks: - 127.0.0.1 - ::1 - 192.168.0.0/24 - - 2001:DB8:ABCD::/48 + - fd00::/8 ip_ban_enabled: True login_attempts_threshold: 5 ``` The [Set up encryption using Let's Encrypt](/blog/2015/12/13/setup-encryption-using-lets-encrypt/) blog post gives you details about the encryption of your traffic using free certificates from [Let's Encrypt](https://letsencrypt.org/). -Or use a self signed certificate following the instructions here [Self-signed certificate for SSL/TLS](/docs/ecosystem/certificates/tls_self_signed_certificate/) +Or use a self signed certificate following the instructions here [Self-signed certificate for SSL/TLS](/docs/ecosystem/certificates/tls_self_signed_certificate/). -On top of the `http` component is a [REST API](/developers/rest_api/) and a [Python API](/developers/python_api/) available. There is also support for [Server-sent events](/developers/server_sent_events/). +## {% linkable_title APIs %} -The `http` platforms are not real platforms within the meaning of the terminology used around Home Assistant. Home Assistant's [REST API](/developers/rest_api/) sends and receives messages over HTTP. +On top of the `http` component is a [REST API](/developers/rest_api/), [Python API](/developers/python_api/) and [WebSocket API](/developers/websocket_api/) available. There is also support for [Server-sent events](/developers/server_sent_events/). + +The `http` platforms are not real platforms within the meaning of the terminology used around Home Assistant. Home Assistant's [REST API](/developers/rest_api/) sends and receives messages over HTTP. + +## {% linkable_title HTTP sensors %} To use those kind of [sensors](/components/sensor.http/) or [binary sensors](components/binary_sensor.http/) in your installation no configuration in Home Assistant is needed. All configuration is done on the devices themselves. This means that you must be able to edit the target URL or endpoint and the payload. The entity will be created after the first message has arrived. All [requests](/developers/rest_api/#post-apistatesltentity_id) need to be sent to the endpoint of the device and must be **POST**. -If you want to use Home Assistant to host or serve static files then create a directory called `www` under the `.homeassistant` configuration path. The static files in `.homeassistant/www/` can be accessed by the following URL `http://your.domain:8123/local/`. +## {% linkable_title IP filtering and banning %} -If you want to apply additional IP filtering, and automatically ban brute force attempts, set `ip_ban_enabled` to `True` and the maximum number of attempts. After the first ban, an `ip_bans.yaml` file will be created in the root configuration folder. It will have the banned IP address and time in UTC when it was added: +If you want to apply additional IP filtering, and automatically ban brute force attempts, set `ip_ban_enabled` to `True` and the maximum number of attempts. After the first ban, an `ip_bans.yaml` file will be created in the root configuration folder. It will have the banned IP address and time in UTC when it was added: ```yaml 127.0.0.1: banned_at: '2016-11-16T19:20:03' ``` -After a ban is added a Persistent Notification is populated to the Home Assistant frontend. +After a ban is added a Persistent Notification is populated to the Home Assistant frontend.

-Please note, that sources from `trusted_networks` won't be banned automatically. +Please note, that sources from `trusted_networks` won't be banned automatically. +

+ +## {% linkable_title Hosting files %} + +If you want to use Home Assistant to host or serve static files then create a directory called `www` under the configuration path (`/config` on Hass.io, `.homeassistant` elsewhere). The static files in `www/` can be accessed by the following URL `http://your.domain:8123/local/`, for example `audio.mp3` would be accessed as `http://your.domain:8123/local/audio.mp3`. + +

+ If you've had to create the `www/` folder for the first time, you'll need to restart Home Assistant.

diff --git a/source/_components/hue.markdown b/source/_components/hue.markdown new file mode 100644 index 00000000000..ce0244b72ef --- /dev/null +++ b/source/_components/hue.markdown @@ -0,0 +1,154 @@ +--- +layout: page +title: "Philips Hue" +description: "Instructions on setting up Philips Hue within Home Assistant." +date: 2017-11-29 23:51 +sidebar: true +comments: false +sharing: true +footer: true +logo: philips_hue.png +ha_category: Hub +ha_iot_class: "Local Polling" +featured: true +ha_release: "0.60" +--- + +Philips Hue support is integrated into Home Assistant as a Hub that can drive the light platform. The preferred way to setup the Philips Hue platform is by enabling the [discovery component](/components/discovery/). + +Once discovered, if you have a custom default view, locate `configurator.philips_hue` in the entities list ( < > ) and add it to a group in `configuration.yaml`. Restart Home Assistant so that the configurator is visible in the Home Assistant dashboard. Once Home Assistant is restarted, locate and click on `configurator.philips_hue` to bring up the initiation dialog. This will prompt you to press the Hue button to register the Hue hub in Home Assistant. Once complete, the configurator entity isn't needed anymore and can be removed from any visible group in `configuration.yaml`. + +When you configure the Hue bridge from Home Assistant, it writes a token to a file in your Home Assistant [configuration directory](/docs/configuration/). That token authenticates the communication with the Hue bridge. This token uses the Address of the Hue Bridge. If the IP address for the Hue Bridge changes, you will need to register the Hue Bridge with Home Assistant again. To avoid this you may set up DHCP registration for your Hue Bridge, so that it always has the same IP address. + +Once registration is complete you should see the Hue lights listed as `light` entities. If you don't you may have to restart Home Assistant once more. Add these light entities to `configuration.yaml` file and restart Home Assistant once more to complete the installation. + +If you want to enable the component without relying on the [discovery component](/components/discovery/), add the following lines to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +hue: + bridges: + - host: DEVICE_IP_ADDRESS +``` + +Configuration variables: + +- **host** (*Required*): The IP address of the device, eg. 192.168.1.10. Required if not using the `discovery` component to discover Hue bridges. +- **allow_unreachable** (*Optional*): (true/false) This will allow unreachable bulbs to report their state correctly. +- **filename** (*Optional*): Make this unique if specifying multiple Hue hubs. +- **allow_hue_groups** (*Optional*): (true/false) Enable this to stop Home Assistant from importing the groups defined on the Hue bridge. + +## {% linkable_title Examples %} + +```yaml +# Example configuration.yaml entry specifying optional parameters +hue: + bridges: + - host: DEVICE_IP_ADDRESS + allow_unreachable: true + allow_hue_groups: true +``` + +### {% linkable_title Migrating from older configuration %} + +In previous versions of the `hue` component the configuration looked different: + +```yaml +# Example configuration.yaml entry +light: + - platform: hue + host: DEVICE_IP_ADDRESS +``` + +You will need to convert each bridge into an entry in the new configuration style. See above for an example. + +### {% linkable_title Multiple Hue bridges %} + +Multiple Hue bridges work transparently with discovery, you don't have to do anything. If you prefer to configure them manually and use multiple Hue bridges then it's needed that you provide a configuration file for every bridge. The bridges can't share a single configuration file. + +Add `filename` to your Hue configuration entry in your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +hue: + bridges: + - host: BRIDGE1_IP_ADDRESS + filename: phue.conf + - host: BRIDGE2_IP_ADDRESS + filename: phue2.conf +``` + +### {% linkable_title Using Hue Groups in Home Assistant %} + +The Hue API allows you to group lights. Home Assistant also supports grouping of entities natively, but sometimes it can be useful to use Hue Groups to group light bulbs. By doing so, Home Assistant only needs to send one API call to change the state of all the bulbs in those groups instead of one call for every light in the group. This causes all the bulbs to change state simultaneously. + +These Hue Groups can be a `Luminaire`, `Lightsource`, `LightGroup` or `Room`. The `Luminaire` and `Lightsource` can't be created manually since the Hue bridge manages these automatically based on the discovered bulbs. The `Room` and `LightGroup` can be created manually through the API, or the mobile app. A bulb can only exist in one `Room`, but can exist in multiple `LightGroup`. The `LightGroup` can be useful to link certain bulbs together since. + +The 2nd generation Hue app only allows to create a `Room`. You need to use the first generation app or the API to create a `LightGroup`. + +Example: + +To create a `LightGroup` named `Ceiling lights` that contains the lights 1, 2 and 3, execute the following command: + +```bash +$ curl -XPOST -d '{"name": "Ceiling lights", "lights": ["1", "2", "3"]}' http:///api//groups +``` + +The `` is the string that is used to register Home Assistant on the bridge, you can find it in the `phue.conf` file in your configuration path. `` is the IP address or hostname of your Hue bridge. + +You can find out the ids of your lights by executing the following command: + +```bash +$ curl http:///api//lights +``` + +Home Assistant will automatically detect your new `LightGroup` and add it to the interface. + +

+ To support Hue Light Groups, your bridge needs to have at least firmware 1.13 (released on June 3, 2016). +

+ +More information can be found on the [Philips Hue API documentation](https://www.developers.meethue.com/documentation/groups-api#22_create_group) website. + + +### {% linkable_title Using Hue Scenes in Home Assistant %} + +The Hue platform has its own concept of scenes for setting the colors of a group of lights at once. Hue Scenes are very cheap, get created by all kinds of apps (as it is the only way to have 2 or more lights change at the same time), and are rarely deleted. A typical Hue hub might have hundreds of scenes stored in them, many that you've never used, almost all very poorly named. + +To avoid user interface overload we don't expose scenes directly. Instead there is a hue.hue_activate_scene service which can be used by `automation` or `script` components. +This will have all the bulbs transitioned at once, instead of one at a time using standard scenes in Home Assistant. + +For instance: + +```yaml +script: + porch_on: + sequence: + - service: hue.hue_activate_scene + data: + group_name: "Porch" + scene_name: "Porch Orange" +``` + +| Service data attribute | Optional | Description | +| ---------------------- | -------- | ----------- | +| `group_name` | no | The group/room name of the lights. Find this in the Hue official app. +| `scene_name` | no | The name of the scene. Find this in the Hue official app. + +*Note*: `group_name` is not linked to Home Assistant group name. + +### {% linkable_title Finding Group and Scene Names %} + +How do you find these names? + +The easiest way to do this is only use the scenes from the 2nd generation Hue app. That is organized by room (group) and scene Name. Use the values of room name and scene name that you see in the app. You can test these work on the `dev-service` console of your Home Assistant instance. + +Alternatively, you can dump all rooms and scene names using this [gist](https://gist.github.com/sdague/5479b632e0fce931951c0636c39a9578). This does **not** tell you which groups and scenes work together but it's sufficient to get values that you can test in the `dev-service` console. + +### {% linkable_title Caveats %} + +The Hue API doesn't activate scenes directly, only on a Hue Group (typically rooms, especially if using the 2nd gen app). But Hue Scenes don't actually reference their group. So heuristic matching is used. + +Neither group names or scene names are guaranteed unique in Hue. If you are getting non deterministic behavior, adjust your Hue scenes via the App to be more identifying. + +The Hue hub has limited spaces for scenes, and will delete scenes if new ones get created that would overflow that space. The API docs say this is based on "Least Recently Used". diff --git a/source/_components/hydrawise.markdown b/source/_components/hydrawise.markdown new file mode 100644 index 00000000000..3c29b449166 --- /dev/null +++ b/source/_components/hydrawise.markdown @@ -0,0 +1,40 @@ +--- +layout: page +title: "Hunter Hydrawise" +description: "Instructions on how to integrate your Hunter Hydrawise Wi-Fi irrigation control system within Home Assistant." +date: 2018-04-11 08:02 +sidebar: true +comments: false +sharing: true +footer: true +logo: hydrawise_logo.png +ha_category: Hub +ha_release: 0.71 +ha_iot_class: Cloud Polling +--- + +The `hydrawise` component allows you to integrate your [Hunter Hydrawise](https://hydrawise.com) Wi-Fi irrigation controller system in Home Assistant. + +To enable it, add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +hydrawise: + access_token: YOUR_API_KEY +``` + +{% configuration %} +access_token: + description: The API KEY assigned to your Hydrawise account. + required: true + type: string +scan_interval: + description: The time interval, in seconds, to poll the Hydrawise cloud. + required: false + type: int + default: 30 +{% endconfiguration %} + +To get your API access token log into your [Hydrawise account](https://app.hydrawise.com/config/account) and in the 'My Account Details' section under Account Settings click 'Generate API Key'. Enter that key in your configuration file as the `API_KEY`. + +Finish the configuration by visiting the [Hydrawise binary sensor](/components/binary_sensor.hydrawise/), [Hydrawise sensor](/components/sensor.hydrawise/) and [Hydrawise switch](/components/switch.hydrawise/) documentation. diff --git a/source/_components/ifttt.manything.markdown b/source/_components/ifttt.manything.markdown index 7288afb90b9..84d0228bc15 100644 --- a/source/_components/ifttt.manything.markdown +++ b/source/_components/ifttt.manything.markdown @@ -1,7 +1,7 @@ --- layout: page title: "ManyThing" -description: "Instructions how to setup ManyThing support with IFTTT." +description: "Instructions on how to setup ManyThing support with IFTTT." date: 2015-09-07 18:00 sidebar: true comments: false diff --git a/source/_components/ifttt.markdown b/source/_components/ifttt.markdown index fc330b5f799..9f48303946c 100644 --- a/source/_components/ifttt.markdown +++ b/source/_components/ifttt.markdown @@ -1,7 +1,7 @@ --- layout: page title: "IFTTT" -description: "Instructions how to setup IFTTT within Home Assistant." +description: "Instructions on how to setup IFTTT within Home Assistant." date: 2015-09-07 18:00 sidebar: true comments: false @@ -21,7 +21,7 @@ ifttt: key: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ``` -`key` is your API key which can be obtained by viewing the **Settings** of the [Webhooks applet](https://ifttt.com/services/maker_webhooks/settings). It's the last part of the URL (e.g. https://maker.ifttt.com/use/MYAPIKEY) you will find under **My Applets** > **Webhooks** > **Settings**. +`key` is your API key which can be obtained by viewing the **Settings** of the [Webhooks applet](https://ifttt.com/services/maker_webhooks/settings). It's the last part of the URL (e.g., https://maker.ifttt.com/use/MYAPIKEY) you will find under **My Applets** > **Webhooks** > **Settings**.

@@ -64,6 +64,7 @@ Choose "Webhooks" as service. You need to setup a unique trigger for each event you sent to IFTTT.

+{% raw %} ```yaml # Example configuration.yaml Automation entry automation: @@ -75,9 +76,11 @@ automation: service: ifttt.trigger data: {"event":"TestHA_Trigger", "value1":"Hello World!"} ``` +{% endraw %} IFTTT can also be used in scripts and with `data_template`. Here is the above automation broken into an automation and script using variables and data_templates. +{% raw %} ```yaml # Example configuration.yaml Automation entry automation: @@ -89,10 +92,12 @@ automation: service: script.ifttt_notify data_template: value1: 'HA Status:' - value2: {% raw %}"{{ trigger.event.data.entity_id.split('_')[1] }} is "{% endraw %} - value3: {% raw %}"{{ trigger.event.data.to_state.state }}"{% endraw %} + value2: "{{ trigger.event.data.entity_id.split('_')[1] }} is " + value3: "{{ trigger.event.data.to_state.state }}" ``` +{% endraw %} +{% raw %} ```yaml #Example Script to send TestHA_Trigger to IFTTT but with some other data (homeassistant UP). ifttt_notify: @@ -100,6 +105,7 @@ ifttt_notify: - service: ifttt.trigger data_template: {"event":"TestHA_Trigger", "value1":"{{ value1 }}", "value2":"{{ value2 }}", "value3":"{{ value3 }}"} ``` +{% endraw %} ### {% linkable_title Sending events from IFTTT to Home Assistant %} diff --git a/source/_components/ihc.markdown b/source/_components/ihc.markdown new file mode 100644 index 00000000000..0030d30361f --- /dev/null +++ b/source/_components/ihc.markdown @@ -0,0 +1,90 @@ +--- +layout: page +title: "IHC" +description: "Instructions on how to integrate the IHC components with Home Assistant" +date: 2017-11-11 22:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: ihc.png +ha_category: Hub +ha_release: "0.62" +ha_iot_class: "Local Push" +--- + +IHC Controller integration for Home Assistant allows you to connect the LK IHC controller to Home Assistant. +(The controller is sold under other names in different countries - "ELKO Living system" in Sweden and Norway) + +An `ihc` section must be present in the `configuration.yaml` file and contain the following options: + +```yaml +# Example configuration.yaml entry +ihc: + url: http://192.168.1.3 + username: admin + password: mysecret + auto_setup: True + info: True +``` + +{% configuration %} +auto_setup: + description: True to have IHC products auto setup. + required: false + type: bool +info: + description: If True additional IHC info will be shown on each component. + required: false + type: bool +password: + description: The password for the IHC Controller. + required: true + type: string +url: + description: The URL of the IHC Controller. + required: true + type: string +username: + description: The username for the IHC Controller. + required: true + type: string +{% endconfiguration %} + +The info option will show the IHC "name", "note" and "position" attributes. +This will make it easier to identify the IHC products within Home Assistant + +There is currently support for the following device types within Home Assistant: + +- [Binary Sensor](/components/binary_sensor.ihc/) +- [Sensor](/components/sensor.ihc/) +- [Light](/components/light.ihc/) +- [Switch](/components/switch.ihc/) + +### Auto setup of IHC products + +If the auto setup is enabled, the `ihc` component will automatically find IHC products and insert these as devices in Home Assistant. +To disable this set auto_setup to False. (Auto setup is on by default) +See the individual device types for a list of IHC products to be recognized automatically. + +Components will get a default name that is a combination of the IHC group and IHC resource id. +If you want to change the display names use the [Customizing entities](/docs/configuration/customizing-devices/) + +### {% linkable_title Manual setup %} + +Each device is associated with an IHC resource id. +To manually setup components you specify resource ids from the IHC project. +(The IHC project is the file you edit/upload to the IHC Controller using LK IHC Visual - or similar program if your controller is not the LK brand). +The project file is an XML file and you can view it with any text/XML editor. +You can rename it to have the XML extension and use a browser like Chrome or Internet Explorer. +The resources are the \ or \ eleements. +Shown as inputs or outputs of products in the IHC application. +You can also use inputs and outputs from function blocks. +These are the \ and \ elements from the project file. + +The IHC resource id should be specified as an integer value. (In the project file the id will be specified as a hex number) + +If you want an easier way to get the IHC resource ids, you can download the [Alternative Service View application](https://www.dingus.dk/updated-ihc-alternative-service-view/). +The application will show the product tree. You can expand it, select inputs and outputs and when selected you can see the resource id. + +See the manual of each device type for configuration options. diff --git a/source/_components/image_processing.dlib_face_detect.markdown b/source/_components/image_processing.dlib_face_detect.markdown index 6673146847d..f4275902565 100644 --- a/source/_components/image_processing.dlib_face_detect.markdown +++ b/source/_components/image_processing.dlib_face_detect.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Dlib Face Detect" -description: "Instructions how to integrate Dlib Face Detect into Home Assistant." +description: "Instructions on how to integrate Dlib Face Detect into Home Assistant." date: 2017-05-05 00:00 sidebar: true comments: false diff --git a/source/_components/image_processing.dlib_face_identify.markdown b/source/_components/image_processing.dlib_face_identify.markdown index 1e47bf13e40..34690d6b8fd 100644 --- a/source/_components/image_processing.dlib_face_identify.markdown +++ b/source/_components/image_processing.dlib_face_identify.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Dlib Face Identify" -description: "Instructions how to integrate Dlib Face Identify into Home Assistant." +description: "Instructions on how to integrate Dlib Face Identify into Home Assistant." date: 2017-01-25 00:00 sidebar: true comments: false @@ -13,7 +13,7 @@ featured: false ha_release: 0.44 --- -The `dlib_face_identify` image processing platform allows you to use the [Dlib](http://www.dlib.net/) through Home Assistant. This platform allow you to identify persons on camera and fire a event with identify persons. +The `dlib_face_identify` image processing platform allows you to use the [Dlib](http://www.dlib.net/) through Home Assistant. This platform allow you to identify persons on camera and fire an event with identify persons. For using the result inside an automation rule, take a look at the [component](/components/image_processing/) page. @@ -36,3 +36,7 @@ Configuration variables: - **entity_id** (*Required*): A camera entity id to get picture from. - **name** (*Optional*): This parameter allows you to override the name of your `image_processing` entity. - **faces** array (*Required*): List of faces sources. + +

+If the platform fails to load because it could not install its requirement, install cmake: `sudo apt-get install cmake`. +

diff --git a/source/_components/image_processing.facebox.markdown b/source/_components/image_processing.facebox.markdown new file mode 100644 index 00000000000..ebb9892aad8 --- /dev/null +++ b/source/_components/image_processing.facebox.markdown @@ -0,0 +1,133 @@ +--- +layout: page +title: "Facebox" +description: "Detect and recognize faces with Facebox." +date: 2018-05-03 00:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: machine-box.png +ha_category: Image Processing +featured: false +ha_release: 0.70 +--- + +The `facebox` image processing platform allows you to detect and recognize faces in a camera image using [Facebox](https://machinebox.io/docs/facebox). The state of the entity is the number of faces detected, and recognized faces are listed in the `matched_faces` attribute. An `image_processing.detect_face` event is fired for each recognized face, and the event `data` provides the `confidence` of recognition, the `name` of the person, the `image_id` of the image associated with the match, the `bounding_box` that contains the face in the image, and the `entity_id` that processing was performed on. + +## {% linkable_title Setup %} + +Facebox runs in a Docker container and it is recommended that you run this container on a machine with a minimum of 2 GB RAM. On your machine with Docker, run the Facebox container with: + +```bash +MB_KEY="INSERT-YOUR-KEY-HERE" + +sudo docker run --name=facebox --restart=always -p 8080:8080 -e "MB_KEY=$MB_KEY" machinebox/facebox +``` + +If you only require face detection (number of faces) you can disable face recognition by adding `-e "MB_FACEBOX_DISABLE_RECOGNITION=true"` to the `docker run` command. + +## {% linkable_title Configuration %} + +To enable this platform in your installation, add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +image_processing: + - platform: facebox + ip_address: 192.168.0.1 + port: 8080 + source: + - entity_id: camera.local_file + name: my_custom_name +``` + +{% configuration %} +ip_address: + description: The IP address of your machine hosting Facebox. + required: true + type: string +port: + description: The port which Facebox is exposed on. + required: true + type: string +source: + description: The list of image sources. + required: true + type: map + keys: + entity_id: + description: A camera entity id to get picture from. + required: true + type: string + name: + description: This parameter allows you to override the name of your `image_processing` entity. + required: false + type: string +{% endconfiguration %} + +## {% linkable_title Automations %} + +Use the `image_processing.detect_face` events to trigger automations, and breakout the `trigger.event.data` using a [data_template](https://www.home-assistant.io/docs/automation/templating/). The following example automation sends a notification when Ringo Star is recognized: + +{% raw %} +```yaml +- id: '12345' + alias: Ringo Starr recognised + trigger: + platform: event + event_type: image_processing.detect_face + event_data: + name: 'Ringo_Starr' + action: + service: notify.platform + data_template: + message: Ringo_Starr recognised with probability {{ trigger.event.data.confidence }} + title: Door-cam notification +``` +{% endraw %} + +## {% linkable_title Service `facebox_teach_face` %} + +The service `facebox_teach_face` can be used to teach Facebox faces. + +| Service data attribute | Optional | Description | +| ---------------------- | -------- | ----------- | +| `entity_id` | no | Entity ID of Facebox entity. +| `name` | no | The name to associate with a face. +| `file_path` | no | The path to the image file. + +A valid service data example: + +{% raw %} +```yaml +{ + "entity_id": "image_processing.facebox_local_file", + "name": "superman", + "file_path": "/images/superman_1.jpeg" +} +``` +{% endraw %} + +An `image_processing.teach_classifier` event is fired for each service call, providing feedback on whether teaching has been successful or unsuccessful. In the unsuccessful case, the `message` field of the `event_data` will contain information on the cause of failure, and a warning is also published in the logs. An automation can be used to receive alerts on teaching, for example, the following automation will send a notification with the teaching image and a message describing the status of the teaching: + +```yaml +- id: '11200961111' + alias: Send facebox teaching result + trigger: + platform: event + event_type: image_processing.teach_classifier + event_data: + classifier: facebox + action: + service: notify.platform + data_template: + title: Facebox teaching + message: Name {{ trigger.event.data.name }} teaching was successful? {{ trigger.event.data.success }} + data: + file: ' {{trigger.event.data.file_path}} ' +``` + +## {% linkable_title Optimising resources %} + +[Image processing components](https://www.home-assistant.io/components/image_processing/) process the image from a camera at a fixed period given by the `scan_interval`. This leads to excessive processing if the image on the camera hasn't changed, as the default `scan_interval` is 10 seconds. You can override this by adding to your config `scan_interval: 10000` (setting the interval to 10,000 seconds), and then call the `image_processing.scan` service when you actually want to perform processing. diff --git a/source/_components/image_processing.markdown b/source/_components/image_processing.markdown index e74ef6ec5c8..1f1507bf280 100644 --- a/source/_components/image_processing.markdown +++ b/source/_components/image_processing.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Image Processing" -description: "Instructions how to setup image processing with Home Assistant." +description: "Instructions on how to setup image processing with Home Assistant." date: 2017-01-09 00:00 sidebar: true comments: false @@ -22,7 +22,7 @@ If you are running Home Assistant over SSL or from within a container, you will Alpr entities attribute have a vehicle counter `vehicles` and all found plates as `plates`. -This event is trigger after OpenALPR found a new licence plate. +This event is trigger after OpenALPR found a new license plate. ```yaml # Example configuration.yaml automation entry diff --git a/source/_components/image_processing.microsoft_face_detect.markdown b/source/_components/image_processing.microsoft_face_detect.markdown index c15e5baab07..06cca72d260 100644 --- a/source/_components/image_processing.microsoft_face_detect.markdown +++ b/source/_components/image_processing.microsoft_face_detect.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Microsoft Face Detect" -description: "Instructions how to integrate Microsoft Face Detect into Home Assistant." +description: "Instructions on how to integrate Microsoft Face Detect into Home Assistant." date: 2017-01-25 00:00 sidebar: true comments: false @@ -13,7 +13,7 @@ featured: false ha_release: 0.38 --- -The `microsoft_face_detect` image processing platform allows you to use the [Microsoft Face Identify](https://www.microsoft.com/cognitive-services/en-us/) API through Home Assistant. This platform enables you do detect face on camera and fire a event with attributes. +The `microsoft_face_detect` image processing platform allows you to use the [Microsoft Face Identify](https://www.microsoft.com/cognitive-services/en-us/) API through Home Assistant. This platform enables you do detect face on camera and fire an event with attributes. Please refer to the [component](/components/microsoft_face/) configuration on how to setup the API key. diff --git a/source/_components/image_processing.microsoft_face_identify.markdown b/source/_components/image_processing.microsoft_face_identify.markdown index e600ae36a61..7f0de67938f 100644 --- a/source/_components/image_processing.microsoft_face_identify.markdown +++ b/source/_components/image_processing.microsoft_face_identify.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Microsoft Face Identify" -description: "Instructions how to integrate Microsoft Face Identify into Home Assistant." +description: "Instructions on how to integrate Microsoft Face Identify into Home Assistant." date: 2017-01-25 00:00 sidebar: true comments: false @@ -13,7 +13,7 @@ featured: false ha_release: 0.37 --- -The `microsoft_face_identify` image processing platform lets you use [Microsoft Face identify](https://www.microsoft.com/cognitive-services/en-us/) API through Home Assistant. This platform allow you do identify persons on camera and fire a event with identify persons. +The `microsoft_face_identify` image processing platform lets you use [Microsoft Face identify](https://www.microsoft.com/cognitive-services/en-us/) API through Home Assistant. This platform allow you do identify persons on camera and fire an event with attributes. Please refer to the [component](/components/microsoft_face/) configuration on how to setup the API key. @@ -24,10 +24,10 @@ For using the result inside an automation rule, take a look at the [component](/ ```yaml # Example configuration.yaml entry image_processing: - - platform: microsoft_face_identify - group: family - source: - - entity_id: camera.door + - platform: microsoft_face_identify + group: family + source: + - entity_id: camera.door ``` Configuration variables: diff --git a/source/_components/image_processing.openalpr_cloud.markdown b/source/_components/image_processing.openalpr_cloud.markdown index 3a13097c872..96e180a7055 100644 --- a/source/_components/image_processing.openalpr_cloud.markdown +++ b/source/_components/image_processing.openalpr_cloud.markdown @@ -1,7 +1,7 @@ --- layout: page title: "OpenALPR Cloud" -description: "Instructions how to integrate licences plates with OpenALPR cloud into Home Assistant." +description: "Instructions on how to integrate licences plates with OpenALPR cloud into Home Assistant." date: 2017-01-09 00:00 sidebar: true comments: false @@ -13,7 +13,7 @@ featured: false ha_release: 0.36 --- -[OpenALPR](http://www.openalpr.com/) integration for Home Assistant allows you to process licences plates from a camera. You can use them to open a garage door or trigger any other [automation](https://home-assistant.io/components/automation/). +[OpenALPR](http://www.openalpr.com/) integration for Home Assistant allows you to process licences plates from a camera. You can use them to open a garage door or trigger any other [automation](/components/automation/). For using the result inside an automation rule, take a look at the [component](/components/image_processing/) page. diff --git a/source/_components/image_processing.openalpr_local.markdown b/source/_components/image_processing.openalpr_local.markdown index 593a9212614..d5da4bab3ee 100644 --- a/source/_components/image_processing.openalpr_local.markdown +++ b/source/_components/image_processing.openalpr_local.markdown @@ -1,7 +1,7 @@ --- layout: page title: "OpenALPR Local" -description: "Instructions how to integrate licences plates with OpenALPR local into Home Assistant." +description: "Instructions on how to integrate licences plates with OpenALPR local into Home Assistant." date: 2017-01-09 00:00 sidebar: true comments: false @@ -14,7 +14,7 @@ ha_release: 0.36 redirect_from: /components/openalpr/ --- -[OpenALPR](http://www.openalpr.com/) integration for Home Assistant allows you to process licences plates from a camera. You can use them to open a garage door or trigger any other [automation](https://home-assistant.io/components/automation/). +[OpenALPR](http://www.openalpr.com/) integration for Home Assistant allows you to process licences plates from a camera. You can use them to open a garage door or trigger any other [automation](/components/automation/). For using inside automation look on [component](/components/image_processing) page. diff --git a/source/_components/image_processing.opencv.markdown b/source/_components/image_processing.opencv.markdown index db6bfd2d5cb..9e485ec6c30 100644 --- a/source/_components/image_processing.opencv.markdown +++ b/source/_components/image_processing.opencv.markdown @@ -1,7 +1,7 @@ --- layout: page title: "OpenCV" -description: "Instructions how to integrate OpenCV image processing into Home Assistant." +description: "Instructions on how to integrate OpenCV image processing into Home Assistant." date: 2017-01-25 00:00 sidebar: true comments: false diff --git a/source/_components/image_processing.seven_segments.markdown b/source/_components/image_processing.seven_segments.markdown index db0ebf4f1b7..a5944d821b5 100644 --- a/source/_components/image_processing.seven_segments.markdown +++ b/source/_components/image_processing.seven_segments.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Seven segments display" -description: "Instructions how to use OCR for seven segments displays into Home Assistant." +description: "Instructions on how to use OCR for seven segments displays into Home Assistant." date: 2017-05-18 08:00 sidebar: true comments: false @@ -93,6 +93,7 @@ image_processing: With the help of a [template sensor](/components/sensor.template/), the value can be shown as badge. +{% raw %} ```yaml sensor: - platform: template @@ -102,4 +103,4 @@ sensor: friendly_name: 'Ampere' unit_of_measurement: 'A' ``` - +{% endraw %} diff --git a/source/_components/influxdb.markdown b/source/_components/influxdb.markdown index f2291bda29d..9df07711f80 100644 --- a/source/_components/influxdb.markdown +++ b/source/_components/influxdb.markdown @@ -23,11 +23,11 @@ The default InfluxDB configuration doesn't enforce authentication. If you have i influxdb: ``` -You will still need to create a database named `home_assistant` via InfluxDB's web interface or command line. For instructions how to create a database check the [InfluxDB documentation](https://docs.influxdata.com/influxdb/latest/introduction/getting_started/#creating-a-database) relevant to the version you have installed. +You will still need to create a database named `home_assistant` via InfluxDB's command line interface. For instructions on how to create a database check the [InfluxDB documentation](https://docs.influxdata.com/influxdb/latest/introduction/getting_started/#creating-a-database) relevant to the version you have installed. Configuration variables: -- **host** (*Optional*): IP address of your database host, e.g. 192.168.1.10. Defaults to `localhost`. +- **host** (*Optional*): IP address of your database host, e.g., 192.168.1.10. Defaults to `localhost`. - **port** (*Optional*): Port to use. Defaults to 8086. - **username** (*Optional*): The username of the database user. The user needs read/write privileges on the database. - **password** (*Optional*): The password for the database user account. @@ -35,10 +35,9 @@ Configuration variables: - **ssl** (*Optional*): Use https instead of http to connect. Defaults to false. - **verify_ssl** (*Optional*): Verify SSL certificate for https request. Defaults to false. - **max_retries** (*Optional*): Allow the component to retry if there was a network error when transmitting data -- **retry_queue_limit** (*Optional*): If retry enabled, specify how much calls are allowed to be queued for retry. - **default_measurement** (*Optional*): Measurement name to use when an entity doesn't have a unit. Defaults to entity id. - **override_measurement** (*Optional*): Measurement name to use instead of unit or default measurement. This will store all data points in a single measurement. -- **component_config**, **component_config_domain**, **component_config_glob** (*Optional*): These attributes contains component-specific override values. See [Customizing devices and services](https://home-assistant.io/getting-started/customizing-devices/) for format. +- **component_config**, **component_config_domain**, **component_config_glob** (*Optional*): These attributes contains component-specific override values. See [Customizing devices and services](/getting-started/customizing-devices/) for format. - **override_measurement** (*Optional*): Measurement name to use for this component, takes precedence over the global 'override_measurement' and component-specific 'unit_of_measurement' attribute. - **exclude** (*Optional*): Configure which components should be excluded from recording to InfluxDB. - **entities** (*Optional*): The list of entity ids to be excluded from recording to InfluxDB. @@ -49,123 +48,13 @@ Configuration variables: - **tags** (*Optional*): Tags to mark the data. - **tags_attributes** (*Optional*): The list of attribute names which should be reported as tags and not fields to InfluxDB. For example, if set to `friendly_name`, it will be possible to group by entities' friendly names as well, in addition to their ids. -## {% linkable_title Data migration %} +## {% linkable_title Helper scripts %} -Starting with 0.36 the InfluxDB component has a new schema to store values in the InfluxDB databases. - -- There will no longer be any tags/fields named `time`. -- All numeric fields (int/float/bool) will be stored as float inside InfluxDB database. -- All string fields corresponding to state attributes will be renamed as `FIELDNAME_str`, where `FIELDNAME` is the state attribute, to avoid type conflicts. -- All string fields corresponding to a state will be renamed as `state` (former value). -- Fields named `value` will always be stored as float. -- Fields named `state` will always be stored as string. - -### {% linkable_title Migration script %} - -If you need to migrate your database, you may require to run the `influxdb_migrator` script. Run the script after upgrade to 0.36 but before the first regular start of `hass` version 0.36. - -These are the steps the script will perform: -1. Create a new database (called `DBNAME__old`) to store old data. -2. Copy data from `DBNAME` database to `DBNAME__old` database. -3. Empty `DBNAME` database (using `drop` then `create`). `DBNAME` database is now considered as the new database. -4. For each measurement of `DBNAME__old` database: - 1. Read all points from the current measurement (in groups of 1000 points by default) and convert them. - 2. Send group of points to `DBNAME` database. -5. Delete the `DBNAME__old` database if needed. - -Example to run the script: - -```bash -$ hass --script influxdb_migrator \ - -H IP_INFLUXDB_HOST -u INFLUXDB_USERNAME -p INFLUXDB_PASSWORD \ - -d INFLUXDB_DB_NAME -``` -Script arguments: - -``` -required arguments: - -d dbname, --dbname dbname InfluxDB database name - -optional arguments: - -h, --help show this help message and exit - -H host, --host host InfluxDB host address - -P port, --port port InfluxDB host port - -u username, --username username - InfluxDB username - -p password, --password password - InfluxDB password - -s step, --step step How many points to migrate at the same time - -o override_measurement, --override-measurement override_measurement - Store all your points in the same measurement - -D, --delete Delete old database -``` - -- If you run the script with only the `-h` option, you will get a help printout with a short explanation of the different options. -- The host option defaults to `'127.0.0.1'`. -- The port option defaults to `8086`. -- You should be able to omit username and password if InfluxDB authentication is disabled, which it is by default. -- The step option defaults to `1000`. - - -## {% linkable_title Data import script %} - -If you want to import all the recorded data from your recorder database you can use the data import script. -It will read all your state_change events from the database and add them as data-points to the InfluxDB. -You can specify the source database either by pointing the `--config` option to the config directory which includes the default SQLite database or by giving a sqlalchemy connection URI with `--uri`. -The writing to InfluxDB is done in batches that can be changed with `--step`. - -You can control, which data is imported by using the command line options `--exclude_entities` and `--exclude_domains`. -Both get a comma separated list of either entity-ids or domain names that are excluded from the import. - -To test what gets imported you can use the `--simulate` option, which disables the actual write to the InfluxDB instance. -This only writes the statistics how much points would be imported from which entity. - -Example to run the script: - -```bash -$ hass --script influxdb_import --config CONFIG_DIR \ - -H IP_INFLUXDB_HOST -u INFLUXDB_USERNAME -p INFLUXDB_PASSWORD \ - --dbname INFLUXDB_DB_NAME --exclude_domains automation,configurator -``` -Script arguments: - -``` -required arguments: - -d dbname, --dbname dbname - InfluxDB database name - -optional arguments: - -h, --help show this help message and exit - -c path_to_config_dir, --config path_to_config_dir - Directory that contains the Home Assistant - configuration - --uri URI Connect to URI and import (if other than default - sqlite) eg: mysql://localhost/homeassistant - - -H host, --host host InfluxDB host address - -P port, --port port InfluxDB host port - -u username, --username username - InfluxDB username - -p password, --password password - InfluxDB password - -s step, --step step How many points to import at the same time - -t tags, --tags tags Comma separated list of tags (key:value) for all - points - -D default_measurement, --default-measurement default_measurement - Store all your points in the same measurement - -o override_measurement, --override-measurement override_measurement - Store all your points in the same measurement - -e exclude_entities, --exclude_entities exclude_entities - Comma separated list of excluded entities - -E exclude_domains, --exclude_domains exclude_domains - Comma separated list of excluded domains - -S, --simulate Do not write points but simulate preprocessing - and print statistics -``` +- [Helper script `influxdb_import`](/docs/tools/influxdb_import/) +- [Helper script `db_migrator`](/docs/tools/db_migrator/) (only used for [Home Assistant 0.36](/blog/2017/01/14/iss-usps-images-packages/#influxdb-export)) ## {% linkable_title Examples %} - ### {% linkable_title Full configuration %} ```yaml diff --git a/source/_components/input_boolean.markdown b/source/_components/input_boolean.markdown index 61e82ff846c..68f75566ba4 100644 --- a/source/_components/input_boolean.markdown +++ b/source/_components/input_boolean.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Input Boolean" -description: "Instructions how to integrate the Input Boolean component into Home Assistant." +description: "Instructions on how to integrate the Input Boolean component into Home Assistant." date: 2016-01-17 16:58 sidebar: true comments: false @@ -24,16 +24,34 @@ input_boolean: icon: mdi:car ``` -Configuration variables: +{% configuration %} + input_boolean: + description: Alias for the input. Multiple entries are allowed. + required: true + type: map + keys: + name: + description: Friendly name of the input. + required: false + type: String + initial: + description: Initial value when Home Assistant starts. + required: false + type: boolean + default: false + icon: + description: Icon to display for the component. Refer to the [Customizing devices](/docs/configuration/customizing-devices/#possible-values) page for possible values. + required: false + type: icon +{% endconfiguration %} -- **[alias]** (*Required*): Alias for the input. - - **name** (*Optional*): Friendly name of the input. - - **initial** (*Optional*): Initial value when Home Assistant starts. Defaults to `False`. - - **icon** (*Optional*): Icon for entry. +### {% linkable_title Restore State %} -Pick an icon that you can find on [materialdesignicons.com](https://materialdesignicons.com/) to use for your input and prefix the name with `mdi:`. For example `mdi:car`, `mdi:ambulance`, or `mdi:motorbike`. +This component will automatically restore the state it had prior to Home Assistant stopping as long as you have the `recorder` component enabled and your entity does **not** have a set value for `initial`. To disable this feature, set a valid value for `initial`. Additional information can be found in the [Restore state](/components/recorder/#restore-state) section of the [`recorder`](/components/recorder/) component documentation. -Here's an example of an automation using the above input_boolean. This action will only occur if the switch is on. +## {% linkable_title Automation Examples %} + +Here's an example of an automation using the above `input_boolean`. This action will only occur if the switch is on. ```yaml automation: diff --git a/source/_components/input_datetime.markdown b/source/_components/input_datetime.markdown index 588154ca277..e8a793ae6a3 100644 --- a/source/_components/input_datetime.markdown +++ b/source/_components/input_datetime.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Input Datetime" -description: "Instructions how to integrate the Input Datetime component into Home Assistant." +description: "Instructions on how to integrate the Input Datetime component into Home Assistant." date: 2017-09-14 16:01 sidebar: true comments: false @@ -33,18 +33,89 @@ input_datetime: has_time: true ``` -Configuration variables: +{% configuration %} + input_datetime: + description: Alias for the datetime input. Multiple entries are allowed. + required: true + type: map + keys: + name: + description: Friendly name of the datetime input. + required: false + type: String + has_time: + description: Set to `true` if the input should have a time. At least one `has_time` or `has_date` must be defined. + required: false + type: Boolean + default: false + has_date: + description: Set to `true` if the input should have a date. At least one `has_time` or `has_date` must be defined. + required: false + type: Boolean + default: false + initial: + description: Set the initial value of this input, depending on `has_time` and `has_date`. + required: false + type: datetime | time | date + default: 1970-01-01 00:00 | 1970-01-01 | 00:00 +{% endconfiguration %} -- **[alias]** (*Required*): Alias for the datetime input. Multiple entries are allowed. - - **name** (*Optional*): Friendly name of the datetime input. - - **has_time** (*Optional*): Set to `true` if this input should have time. Defaults to `false`. - - **has_date** (*Optional*): Set to `true` if this input should have a date. Defaults to `false`. - - **initial** (*Optional*): Set the initial value of this input. Defaults to '1970-01-01 00:00'. If has_time is `false` this must be just a date (e.g.: '1970-01-01'). If has_date is `false` this must be just a time (e.g.: '15:16'). +### {% linkable_title Attributes %} -A datetime input entity's state exports several attributes that can be useful in automations and templates: +A datetime input entity's state exports several attributes that can be useful in automations and templates. -- **has_time**: `true` if this entity has time. -- **has_date**: `true` if this entity has a date. -- **year**, **month**, **day** (Only available if *has_date* is true): The year, month and day of the date. -- **hour**, **minute**, **second** (Only available if *has_time* is true): The hour, minute and second of the time. -- **timestamp**: A timestamp representing the time held in the input. If *has_date* is true, this is the UNIX timestamp of the date / time held by the input. Otherwise (i.e., if only *has_time* is true) the number of seconds since midnight representing the time held by the input. +| Attribute | Description | +| ----- | ----- | +| `has_time` | `true` if this entity has a time. +| `has_date` | `true` if this entity has a date. +| `year`
`month`
`day` | The year, month and day of the date.
(only available if `has_date: true`) +| `hour`
`minute`
`second` | The hour, minute and second of the time.
(only available if `has_time: true`) +| `timestamp` | A timestamp representing the time held in the input.
If `has_date: true`, this is the UNIX timestamp of the date / time held by the input. Otherwise if only `has_time: true`, this is the number of seconds since midnight representing the time held by the input. + +### {% linkable_title Restore State %} + +This component will automatically restore the state it had prior to Home Assistant stopping as long as you have the `recorder` component enabled and your entity does **not** have a set value for `initial`. To disable this feature, set a valid value for `initial`. Additional information can be found in the [Restore state](/components/recorder/#restore-state) section of the [`recorder`](/components/recorder/) component documentation. + +### {% linkable_title Services %} + +This component provides a service to modify the state of the `input_datetime`. + +| Service | Data | Description | +| ----- | ----- | ----- | +| `set_datetime` | `time` | This can be used to dynamically set the time. +| `set_datetime` | `date` | This can be used to dynamically set the date. + +## {% linkable_title Automation Examples %} + +The following example shows the usage of the `input_datetime` as a trigger in an automation (note that you will need a [time sensor](/components/sensor.time_date/) elsewhere in your configuration): + +{% raw %} +```yaml +# Example configuration.yaml entry +# Turns on bedroom light at the time specified. +automation: + trigger: + platform: template +    value_template: "{{ states('sensor.time') == (states.input_datetime.bedroom_alarm_clock_time.attributes.timestamp | int | timestamp_custom('%H:%M', False)) }}" +  action: + service: light.turn_on + entity_id: light.bedroom +``` +{% endraw %} + +To dynamically set the `input_datetime` you can call `input_datetime.set_datetime`. The following example can be used in an automation rule: + +```yaml +# Example configuration.yaml entry +# Sets input_datetime to '05:30' when an input_boolean is turned on. +automation: + trigger: + platform: state + entity_id: input_boolean.example + to: 'on' + action: + service: input_datetime.set_datetime + entity_id: input_datetime.bedroom_alarm_clock_time + data: + time: '05:30:00' +``` diff --git a/source/_components/input_number.markdown b/source/_components/input_number.markdown index 9c041e1b7f3..9f7f65ed956 100644 --- a/source/_components/input_number.markdown +++ b/source/_components/input_number.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Input Number" -description: "Instructions how to integrate the Input Number component into Home Assistant." +description: "Instructions on how to integrate the Input Number component into Home Assistant." date: 2017-09-19 03:30 sidebar: true comments: false @@ -14,7 +14,7 @@ redirect_from: /components/input_slider/ ---

-Before version 0.55 this component was known as `input_slider` and did not have the `mode` configuration option. +Before version 0.55 this component was known as `input_slider` and did not have the `mode` configuration option. Also, service `select_value` is now `set_value`.

The `input_number` component allows the user to define values that can be controlled via the frontend and can be used within conditions of automation. The frontend can display a slider, or a numeric input box. Changes to the slider or numeric input box generate state events. These state events can be utilized as `automation` triggers as well. @@ -39,27 +39,60 @@ input_number: mode: box ``` -Configuration variables: +{% configuration %} + input_number: + description: Alias for the input. Multiple entries are allowed. + required: true + type: map + keys: + min: + description: Minimum value. + required: true + type: float + max: + description: Maximum value. + required: true + type: float + name: + description: Friendly name of the input. + required: false + type: string + initial: + description: Initial value when Home Assistant starts. + required: false + type: float + default: 0 + step: + description: Step value for the slider. Smallest value `0.001`. + required: false + type: float + default: 1 + mode: + description: Can specify `box` or `slider`. + required: false + type: box | slider + default: slider + unit_of_measurement: + description: Unit of measurement in which the value of the slider is expressed in. + required: false + type: string + icon: + description: Icon to display in front of the box/slider in the frontend. Refer to the [Customizing devices](/docs/configuration/customizing-devices/#possible-values) page for possible values. + required: false + type: icon +{% endconfiguration %} -- **[alias]** (*Required*): Alias for the input. Multiple entries are allowed. - - **min** (*Required*): Minimum value. - - **max** (*Required*): Maximum value. - - **name** (*Optional*): Friendly name of the input. - - **initial** (*Optional*): Initial value when Home Assistant starts. Defaults to 0. - - **step** (*Optional*): Step value for the slider. Defaults to 1. - - **mode** (*Optional*): Can specify `box`, or `slider`. Defaults to `slider`. - - **unit_of_measurement** (*Optional*): Unit of measurement in which the value of the slider is expressed in. - - **icon** (*Optional*): Icon to display in front of the box/slider in the frontend. Refer to the [Customizing devices](https://home-assistant.io/docs/configuration/customizing-devices/#possible-values) page for possible values. +### {% linkable_title Restore State %} + +This component will automatically restore the state it had prior to Home Assistant stopping as long as you have the `recorder` component enabled and your entity does **not** have a set value for `initial`. To disable this feature, set a valid value for `initial`. Additional information can be found in the [Restore state](/components/recorder/#restore-state) section of the [`recorder`](/components/recorder/) component documentation. ## {% linkable_title Automation Examples %} Here's an example of `input_number` being used as a trigger in an automation. -```yaml {% raw %} +```yaml # Example configuration.yaml entry using 'input_number' as a trigger in an automation - -# Define input_number input_number: bedroom_brightness: name: Brightness @@ -67,8 +100,6 @@ input_number: min: 0 max: 254 step: 1 - -# Automation. automation: - alias: Bedroom Light - Adjust Brightness trigger: @@ -76,20 +107,18 @@ automation: entity_id: input_number.bedroom_brightness action: - service: light.turn_on -# Note the use of 'data_template:' below rather than the normal 'data:' if you weren't using an input variable + # Note the use of 'data_template:' below rather than the normal 'data:' if you weren't using an input variable data_template: entity_id: light.bedroom - brightness: '{{ trigger.to_state.state | int }}' -{% endraw %} + brightness: "{{ trigger.to_state.state | int }}" ``` +{% endraw %} Another code example using `input_number`, this time being used in an action in an automation. -```yaml {% raw %} +```yaml # Example configuration.yaml entry using 'input_number' in an action in an automation - -# Define 'input_select' input_select: scene_bedroom: name: Scene @@ -101,8 +130,6 @@ input_select: - Relax - 'OFF' initial: 'Select' - -# Define input_number input_number: bedroom_brightness: name: Brightness @@ -110,8 +137,6 @@ input_number: min: 0 max: 254 step: 1 - -# Automation. automation: - alias: Bedroom Light - Custom trigger: @@ -120,21 +145,18 @@ automation: to: CUSTOM action: - service: light.turn_on -# Again, note the use of 'data_template:' rather than the normal 'data:' if you weren't using an input variable. + # Again, note the use of 'data_template:' rather than the normal 'data:' if you weren't using an input variable. data_template: entity_id: light.bedroom - brightness: '{{ states.input_number.bedroom_brightness.state | int }}' -{% endraw %} + brightness: "{{ states('input_number.bedroom_brightness') | int }}" ``` - +{% endraw %} Example of `input_number` being used in a bidirectional manner, both being set by and controlled by an MQTT action in an automation. -```yaml {% raw %} +```yaml # Example configuration.yaml entry using 'input_number' in an action in an automation - -# Define input_number input_number: target_temp: name: Target Heater Temperature Slider @@ -144,30 +166,66 @@ input_number: unit_of_measurement: step icon: mdi:target -# Automation. # This automation script runs when a value is received via MQTT on retained topic: setTemperature # It sets the value slider on the GUI. This slides also had its own automation when the value is changed. -- alias: Set temp slider - trigger: - platform: mqtt - topic: "setTemperature" - action: - service: input_number.set_value - data_template: - entity_id: input_number.target_temp - value: '{{ trigger.payload}}' +automation: + - alias: Set temp slider + trigger: + platform: mqtt + topic: 'setTemperature' + action: + service: input_number.set_value + data_template: + entity_id: input_number.target_temp + value: "{{ trigger.payload }}" - # This automation script runs when the target temperature slider is moved. - # It publishes its value to the same MQTT topic it is also subscribed to. -- alias: Temp slider moved - trigger: - platform: state - entity_id: input_number.target_temp - action: - service: mqtt.publish - data_template: - topic: "setTemperature" - retain: true - payload: '{{ states.input_number.target_temp.state | int }}' -{% endraw %} +# This automation script runs when the target temperature slider is moved. +# It publishes its value to the same MQTT topic it is also subscribed to. +automation: + - alias: Temp slider moved + trigger: + platform: state + entity_id: input_number.target_temp + action: + service: mqtt.publish + data_template: + topic: 'setTemperature' + retain: true + payload: "{{ states('input_number.target_temp') | int }}" ``` +{% endraw %} + +Here's an example of `input_number` being used as a delay in an automation. + +{% raw %} +```yaml +# Example configuration.yaml entry using 'input_number' as a delay in an automation +input_number: + minutes: + name: minutes + icon: mdi:clock-start + initial: 3 + min: 0 + max: 6 + step: 1 + + seconds: + name: seconds + icon: mdi:clock-start + initial: 30 + min: 0 + max: 60 + step: 10 + +automation: + - alias: turn something off after x time after turning it on + trigger: + platform: state + entity_id: switch.something + to: 'on' + action: + - delay: '00:{{ states.input_number.minutes.state | int }}:{{ states.input_number.seconds.state | int }}' + - service: switch.turn_off + entity_id: switch.something +``` +{% endraw %} diff --git a/source/_components/input_select.markdown b/source/_components/input_select.markdown index e8cf94f94d1..dec70767fd1 100644 --- a/source/_components/input_select.markdown +++ b/source/_components/input_select.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Input Select" -description: "Instructions how to integrate the Input Select component into Home Assistant." +description: "Instructions on how to integrate the Input Select component into Home Assistant." date: 2016-02-02 17:00 sidebar: true comments: false @@ -33,27 +33,64 @@ input_select: - Home Alone ``` -Configuration variables: - -- **[alias]** array (*Required*): Alias for the input. Multiple entries are allowed.. - - **name** (*Optional*): Friendly name of the input. - - **options** array (*Required*): List of options to choose from. - - **initial** (*Optional*): Initial value when Home Assistant starts. - - **icon** (*Optional*): Icon for entry. - -Pick an icon that you can find on [materialdesignicons.com](https://materialdesignicons.com/) to use for your input and prefix the name with `mdi:`. For example `mdi:car`, `mdi:ambulance`, or `mdi:motorbike`. +{% configuration %} + input_select: + description: Alias for the input. Multiple entries are allowed. + required: true + type: map + keys: + name: + description: Friendly name of the input. + required: false + type: String + options: + description: List of options to choose from. + required: true + type: Array + initial: + description: Initial value when Home Assistant starts. + required: false + type: Element of options + default: First element of options + icon: + description: Icon to display for the component. Refer to the [Customizing devices](/docs/configuration/customizing-devices/#possible-values) page for possible values. + required: false + type: icon +{% endconfiguration %}

Because YAML defines [booleans](http://yaml.org/type/bool.html) as equivalent, any variations of 'On', 'Yes', 'Y', 'Off', 'No', or 'N' (regardless of case) used as option names will be replaced by True and False unless they are defined in quotation marks.

+### {% linkable_title Restore State %} + +This component will automatically restore the state it had prior to Home Assistant stopping as long as you have the `recorder` component enabled and your entity does **not** have a set value for `initial`. To disable this feature, set a valid value for `initial`. Additional information can be found in the [Restore state](/components/recorder/#restore-state) section of the [`recorder`](/components/recorder/) component documentation. + ### {% linkable_title Services %} -This components provide three services to modify the state of the `input_select`: +This components provide three services to modify the state of the `input_select`. -- `input_select.select_option`: This can be used to select a specific option. The option is passed as `option` attribute in the service data. -- `input_select.select_previous`: Select the previous option. -- `input_select.select_next`: Select the next option. +| Service | Data | Description | +| ------- | ---- | ----------- | +| `select_option` | `option` | This can be used to select a specific option. +| `set_options` | `options`
`entity_id(s)` | Set the options for specific `input_select` entities. +| `select_previous` | | Select the previous option. +| `select_next` | | Select the next option. + +### {% linkable_title Scenes %} + +To specify a target option in a [Scene](/components/scene/) you have to specify the target as `option` attribute: + +```yaml +# Example configuration.yaml entry +scene: + - name: Example1 + entities: + input_select.who_cooks: + option: Paulus +``` + +## {% linkable_title Automation Examples %} The following example shows the usage of the `input_select.select_option` service in an automation: @@ -87,23 +124,10 @@ automation: options: ["Item A", "Item B", "Item C"] ``` -### {% linkable_title Scenes %} - -To specify a target option in a [Scene](/components/scene/) you have to specify the target as `option` attribute: - -```yaml -# Example configuration.yaml entry -scene: - - name: Example1 - entities: - input_select.who_cooks: - option: Paulus -``` - Example of `input_select` being used in a bidirectional manner, both being set by and controlled by an MQTT action in an automation. -```yaml {% raw %} +```yaml # Example configuration.yaml entry using 'input_select' in an action in an automation # Define input_select @@ -129,7 +153,7 @@ input_select: service: input_select.select_option data_template: entity_id: input_select.thermostat_mode - option: '{{ trigger.payload }}' + option: "{{ trigger.payload }}" # This automation script runs when the thermostat mode selector is changed. # It publishes its value to the same MQTT topic it is also subscribed to. @@ -142,6 +166,6 @@ input_select: data_template: topic: "thermostatMode" retain: true - payload: '{{ states.input_select.thermostat_mode.state }}' -{% endraw %} + payload: "{{ states('input_select.thermostat_mode') }}" ``` +{% endraw %} diff --git a/source/_components/input_text.markdown b/source/_components/input_text.markdown index 26ad4846a74..187f08a0e46 100644 --- a/source/_components/input_text.markdown +++ b/source/_components/input_text.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Input Text" -description: "Instructions how to integrate the Input Text component into Home Assistant." +description: "Instructions on how to integrate the Input Text component into Home Assistant." date: 2016-03-15 06:00 sidebar: true comments: false @@ -12,7 +12,7 @@ ha_category: Automation ha_release: 0.53 --- -The `input_text` component allows the user to define values that can be controlled via the frontend and can be used within conditions of automation. Changes to the value stored in the text box generate state events. These state events can be utilized as `automation` triggers as well. +The `input_text` component allows the user to define values that can be controlled via the frontend and can be used within conditions of automation. Changes to the value stored in the text box generate state events. These state events can be utilized as `automation` triggers as well. It can also be configured in password mode (obscured text). ```yaml # Example configuration.yaml entries @@ -27,13 +27,48 @@ input_text: text3: name: Text 3 pattern: '[a-fA-F0-9]*' + text4: + name: Text 4 + mode: password ``` -Configuration variables: +{% configuration %} + input_text: + description: Alias for the input. Multiple entries are allowed. + required: true + type: map + keys: + name: + description: Friendly name of the text input. + required: false + type: String + min: + description: Minimum length for the text value. + required: false + type: int + default: 0 + max: + description: Maximum length for the text value. + required: false + type: int + default: 100 + initial: + description: Initial value when Home Assistant starts. + required: false + type: String + default: empty + pattern: + description: Regex pattern for client side validation. + required: false + type: String + default: empty + mode: + description: Can specify `text` or `password`. Elements of type "password" provide a way for the user to securely enter a value. + required: false + type: String + default: text +{% endconfiguration %} -- **[alias]** (*Required*): Alias for the text input. -- **min** (*Optional*): Minimum length for the text value. Default is `0`. -- **max** (*Optional*): Maximum length for the text value. Default is `100`. -- **name** (*Optional*): Friendly name of the text input. -- **initial** (*Optional*): Initial value when Home Assistant starts. Default is empty string. -- **pattern** (*Optional*): Regex pattern for client side validation. Default is empty string, which is treated same as `.*`. +### {% linkable_title Restore State %} + +This component will automatically restore the state it had prior to Home Assistant stopping as long as you have the `recorder` component enabled and your entity does **not** have a set value for `initial`. To disable this feature, set a valid value for `initial`. Additional information can be found in the [Restore state](/components/recorder/#restore-state) section of the [`recorder`](/components/recorder/) component documentation. diff --git a/source/_components/insteon_hub.markdown b/source/_components/insteon_hub.markdown deleted file mode 100644 index 03bf4b8a6ec..00000000000 --- a/source/_components/insteon_hub.markdown +++ /dev/null @@ -1,37 +0,0 @@ ---- -layout: page -title: "Insteon Hub" -description: "Instructions how to setup the Insteon Hub within Home Assistant." -date: 2016-01-27 08:00 -sidebar: true -comments: false -sharing: true -footer: true -logo: insteon.png -ha_category: Hub -ha_iot_class: "Cloud Polling" ---- - -

-This component has been disabled due to a complaint by Insteon. It will be enabled again once this issue has been resolved. -

- -The `insteon` component lets you use your [Insteon Hub](http://www.insteon.com/insteon-hub/) with Home Assistant. - -You will need to obtain an Insteon REST API key from the [Insteon Developer program](http://www.insteon.com/become-an-insteon-developer) to use this component. - -To integrate your Insteon Hub with Home Assistant, add the following section to your `configuration.yaml` file: - -```yaml -# Example configuration.yaml entry -insteon_hub: - username: YOUR_USERNAME - password: YOUR_PASSWORD - api_key: YOUR_API_KEY -``` - -Configuration variables: - -- **username** (*Required*): The username used to access the Insteon interface (e.g. the [connect.insteon.com](http://connect.insteon.com/) site). -- **password** (*Required*): The password used to access the Insteon interface. -- **api_key** (*Required*): The Insteon REST API key emailed to you once you are approved in the Insteon Developer program. diff --git a/source/_components/insteon_local.markdown b/source/_components/insteon_local.markdown index 96a339f0f03..b4b534aabd9 100644 --- a/source/_components/insteon_local.markdown +++ b/source/_components/insteon_local.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Insteon (local)" -description: "Instructions how to setup the Insteon Hub locally within Home Assistant." +description: "Instructions on how to setup the Insteon Hub locally within Home Assistant." date: 2016-12-18 08:00 sidebar: true comments: false @@ -10,48 +10,53 @@ footer: true logo: insteon.png ha_category: Hub ha_iot_class: "Local Polling" -ha_version: 0.36 +ha_release: 0.36 +redirect_from: /components/insteon_hub/ --- The `insteon_local` component let you use your [Insteon Hub](http://www.insteon.com/insteon-hub/) with Home Assistant. -To integrate your Insteon local setup with Home Assistant, add the following section to your `configuration.yaml` file: +## {% linkable_title Configuration %} + +To integrate your Insteon Hub (local setup) with Home Assistant, add the following to your `configuration.yaml` file: ```yaml # Example configuration.yaml platform entry insteon_local: - host: YOUR HUB IP - username: YOUR HUB USERNAME - password: YOUR HUB PASSWORD + host: YOUR_HUB_IP + username: YOUR_HUB_USERNAME + password: YOUR_HUB_PASSWORD ``` -Configuration variables: +{% configuration %} +host: + description: The IP address of your hub. + required: true + type: string +username: + description: The username used to access the Insteon interface (find in your Insteon app). + required: true + type: string +password: + description: The password used to access the Insteon interface. + required: true + type: string +timeout: + description: Timeout to wait for connections. + required: false + type: time + default: 10 seconds +port: + description: The port your hub is configured to listen to. + required: false + type: string + default: 25105 +{% endconfiguration %} + *Note: The username and password here are for the hub and are different than the ones used to access the app. You can usually find these on the bottom of your hub (unless you've changed them through the settings in the app)* -- **host** (*Required*): The IP address of your hub. -- **username** (*Required*): The username used to access the Insteon interface (find in your Insteon app). -- **password** (*Required*): The password used to access the Insteon interface. -- **timeout** (*Optional*): Timeout to wait for connections. Defaults to 10 seconds. -- **port** (*Optional*): The port your hub is configured to listen to. Defaults to `25105`. -### {% linkable_title Full configuration %} - -The `insteon_local` component currently supports both lights (dimmers) and switches. A full configuration may look like so: - -```yaml -insteon_local: - host: YOUR HUB IP - username: YOUR HUB USERNAME - password: YOUR HUB PASSWORD - timeout: 10 - port: 25105 - -light: - - platform: insteon_local - -switch: - - platform: insteon_local - -fan: - - platform: insteon_local -``` +The `insteon_local` component currently supports lights (dimmers), switches and fans. +

+This component replaces the old `insteon_hub` component, which has been removed due to a complaint by Insteon. +

diff --git a/source/_components/insteon_plm.markdown b/source/_components/insteon_plm.markdown index f28db9b74cd..52f7b93530c 100644 --- a/source/_components/insteon_plm.markdown +++ b/source/_components/insteon_plm.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Insteon PLM" -description: "Instructions how to setup an Insteon USB PLM locally within Home Assistant." +description: "Instructions on how to setup an Insteon USB PLM locally within Home Assistant." date: 2017-02-19 16:00 sidebar: true comments: false @@ -10,62 +10,127 @@ footer: true logo: insteon.png ha_category: Hub ha_iot_class: "Local Push" -ha_version: 0.39 +ha_release: 0.39 --- -This component adds "local push" support for INSTEON PowerLinc Modems allowing -linked INSTEON devices to be used within Home Assistant as lights, switches, -and binary sensors. Device support is provided by the underlying [insteonplm] -package. It is known to work with both the [2413U] USB and [2412S] -RS242 flavors of PLM. This component does not work with the IP-based hub -products. For that, you'll want the "Insteon (Local)" component instead. +This component adds "local push" support for INSTEON PowerLinc Modems allowing linked INSTEON devices to be used within Home Assistant as lights, switches, and binary sensors. Device support is provided by the underlying [insteonplm] package. It is known to work with the [2413U] USB and [2412S] RS242 flavors of PLM and the [2448A7] USB stick. This component does not work with the IP-based hub products. For that, you'll want the [Insteon local component](/components/insteon_local/) instead. [insteonplm]: https://github.com/nugget/python-insteonplm [2413U]: https://www.insteon.com/powerlinc-modem-usb [2412S]: https://www.insteon.com/powerlinc-modem-serial +[2448A7]: https://www.smarthome.com/insteon-2448a7-portable-usb-adapter.html +## {% linkable_title Configuration %} ```yaml # insteon_plm supported configuration variables insteon_plm: port: SERIAL_PORT device_override: - - address: INSTEON_ADDRESS - platform: DEVICE_PLATFORM + - address: ADDRESS + cat: CATEGORY + subcat: SUBCATEGORY + firmware: FIRMWARE + product_key: PRODUCT_KEY + x10_devices: + - housecode: HOUSECODE + unitcode: UNITCODE + platform: PLATFORM + steps: STEPS + x10_all_units_off: HOUSECODE + x10_all_lights_on: HOUSECODE + x10_all_lights_off: HOUSECODE ``` -Configuration variables: -- **port** (*Required*): The port for your device, e.g. `/dev/ttyUSB0` -- **device_override** (*Optional*): Override the default device platform - +{% configuration %} +port: + description: The port for your device, e.g., `/dev/ttyUSB0` + required: true + type: string +device_override: + description: Override the default device definition + required: false + type: list + keys: + ADDRESS: + description: is found on the device itself in the form 1A.2B.3C or 1a2b3c + CATEGORY: + description: is found in the back of the device's User Guide in the form of 0x00 - 0xff + SUBCATEGORY: + description: is found in the back of the device's User Guide in the form of 0x00 - 0xff + FIRMWARE: + description: is a more advanced option and will typically not be used. + PRODUCT_KEY: + description: is a more advanced option and will typically not be used. +x10_devices: + description: Define X10 devices to control or respond to + required: false + type: list + keys: + HOUSECODE: + description: is the X10 housecode values a - p + UNITCODE: + description: is the X10 unit code values 1 - 16 + PLATFORM: + description: is the Home Assistant Platform to associate the device with. Choose one of the following supported platforms. + type: string + keys: + binary_sensor: + description: Used for on/off devices or keypad buttons that are read only. + light: + description: Used for dimmable X10 devices + switch: + description: Used for On/Off X10 devices + STEPS: + description: is the number of dim/bright steps the device supports. Used for dimmable X10 devices only. + default: 22 +x10_all_units_off: + description: Creates an binary_sensor that responds to the X10 standard command for All Units Off. + required: false +x10_all_lights_on: + description: Creates an binary_sensor that responds to the X10 standard command for All Lights On + required: false +x10_all_lights_off: + description: Creates an binary_sensor that responds to the X10 standard command for All Lights Off + required: false +{% endconfiguration %} + +### {% linkable_title Autodiscovery %} + +The first time autodiscovery runs, the duration may require up to 20 seconds per device. Subsequent startups will occur much quicker using cached device information. If a device is not recognized during autodiscovery, you can add the device to the **device_override** configuration. + +In order for a device to be discovered it must be linked to the PLM as either a responder or a controller. + +### {% linkable_title Linking Devices to the PLM %} + +In order for any two Insteon devices to talk with one another, they must be linked. For an overview of device linking, please read the Insteon page on [understanding linking]. The Insteon PLM module supports All-Linking through [Development Tools] service calls. The following services are available: + +- **insteon_plm.add_all_link**: Tells the Insteon Modem (IM) start All-Linking mode. Once the IM is in All-Linking mode, press the link button on the device to complete All-Linking. +- **insteon_plm.delete_all_link**: Tells the Insteon Modem (IM) to remove an All-Link record from the All-Link Database of the IM and a device. Once the IM is set to delete the link, press the link button on the corresponding device to complete the process. +- **insteon_plm.load_all_link_database**: Load the All-Link Database for a device. WARNING - Loading a device All-Link database is very time consuming and inconsistent. This may take a LONG time and may need to be repeated to obtain all records. +- **insteon_plm.print_all_link_database**: Print the All-Link Database for a device. Requires that the All-Link Database is loaded into memory. +- **insteon_plm.print_im_all_link_database**: Print the All-Link Database for the INSTEON Modem (IM). + +If you are looking for more advanced options, you can use the [insteonplm_interactive] command line tool that is distributed with the +[insteonplm] Python module. Please see the documentation on the [insteonplm] GitHub site. Alternatively, you can download [HouseLinc] which runs on any Windows PC, or you can use [Insteon Terminal] which is open source and runs on most platforms. SmartHome no longer supports HouseLinc, but it still works. Insteon Terminal is a very useful tool but please read the disclaimers carefully, they are important. + +[understanding linking]: http://www.insteon.com/support-knowledgebase/2015/1/28/understanding-linking +[Development Tools]: https://www.home-assistant.io/docs/tools/dev-tools/ +[HouseLinc]: https://www.smarthome.com/houselinc.html +[Insteon Terminal]: https://github.com/pfrommerd/insteon-terminal +[insteonplm_interactive]: https://github.com/nugget/python-insteonplm#command-line-interface ### {% linkable_title Customization %} -The only configuration item that is absolutely necessary is the port so that -Home Assistant can connect to the PLM. This will expose all the supported INSTEON -devices which exist in the modem's ALL-Link database. However, devices will -only be shown by their INSTEON hex address (e.g. "1A.2B.3C") which can be a bit -unwieldy. As you link and unlink devices using the 'Set' buttons, they'll be -added and removed from Home Assistant automatically. +The only configuration item that is absolutely necessary is the port so that Home Assistant can connect to the PLM. This will expose all the supported INSTEON devices which exist in the modem’s ALL-Link database. However, devices will only be shown by their INSTEON hex address (e.g., “1A.2B.3C”) which can be a bit unwieldy. As you link and unlink devices using the ‘Set’ buttons, they’ll be added and removed from Home Assistant automatically. -You can use the normal Home Assistant [device customization] section of your -configuration to assign friendly names and special icons to your devices. This -is especially useful for setting device_class on your binary_sensor INSTEON -devices. - -[device customization]: /getting-started/customizing-devices/ +You can use the normal Home Assistant [device customization](/getting-started/customizing-devices/) section of your configuration to assign friendly names and special icons to your devices. This is especially useful for setting device_class on your binary_sensor INSTEON devices. ### {% linkable_title Device Overrides %} -INSTEON devices are added to Home Assistant using the platform(s) that make the -most sense given the model and features of the hardware. In most cases this is -unambiguous, but sometimes the component will not be able to guess the actual -usage of the device. For example, there might be a table lamp plugged into an -INSTEON appliance relay module. By default, this will show as a 'switch' -device in Home Assistant, but it really should be a 'light' device. For -exceptions like this, the component supports a device platform override. You -can set any device (by address) to explicitly use a specific platform if the -default is not correct. +INSTEON devices are added to Home Assistant using the platform(s) that make the most sense given the model and features of the hardware. The features of the INSTEON device are built into the Home Assistant platform. Changing the platform is not recommended. There are two primary uses for the **device_override** feature. +- Devices that do not respond during autodiscovery. This is common for battery operated devices. +- Devices that have not been fully developed. This allows an unknown device to be mapped to a device that operates similarly to another device. ### {% linkable_title Example Configuration with Options%} @@ -83,7 +148,71 @@ homeassistant: insteon_plm: port: /dev/ttyUSB0 device_override: - - address: a1b2c3 # Icon Appliance Module for bedside lamp - platform: light # make it a light instead of a switch + - address: a1b2c3 # Hidden Door Sensor [2845-222] + cat: 0x10 + subcat: 0x11 ``` +### {% linkable_title What NOT to do %} + +Insteon PLM is a top level component and device discovery will identify the Home Assistant platform the device belongs in. As such, do not declare Insteon devices in other platforms. For example, this configuration will NOT work: + +```yaml +light: + - platform: insteon_plm + address: 1a2b3c +``` + +### {% linkable_title Events and Mini-Remotes %} + +Mini-Remote devices do not appear as Home Assistant entities. They generate +events. The following events are available: + +- **insteon_plm.button_on** + - **address**: (required) The Insteon device address in lower case without + dots (e.g. 1a2b3c) + - **button**: (Optional) The button id in lower case. For an 4 button remote + the values are a to d. For an 8 button remote the values are a to g. For + a one button remote this field is not used. +- **insteon_plm.button_of** + - **address**: (required) The Insteon device address in lower case without + dots (e.g. 1a2b3c) + - **button**: (Optional) The button id in lower case. For an 4 button remote + the values are a to d. For an 8 button remote the values are a to g. For + a one button remote this field is not used. + +This allows the mini-remotes to be configured as + +Here is an example of how to use these events for automations: + +``` +automation: + # 4 or 8 button remote with button c pressed + trigger: + platform: event + event_type: insteon_plm.button_on + event_data: + address: 1a2b3c + button: c + condition: + - condition: state + entity_id: light.some_light + state: 'off' + action: + service: light.turn_on + entity_id: light.some_light + + # single button remote + trigger: + platform: event + event_type: insteon_plm.button_on + event_data: + address: 1a2b3c + condition: + - condition: state + entity_id: light.some_light + state: 'off' + action: + service: light.turn_on + entity_id: light.some_light +``` diff --git a/source/_components/intent_script.markdown b/source/_components/intent_script.markdown index 68336fd79d5..eab43f4b930 100644 --- a/source/_components/intent_script.markdown +++ b/source/_components/intent_script.markdown @@ -12,7 +12,7 @@ ha_category: Intent ha_release: "0.50" --- -The intent_script component allows users to configure actions and responses to intents. Intents can be fired by any component that supports it. Examples are Alexa (Amazon Echo), API.ai (Google Assistant) and Snips. +The intent_script component allows users to configure actions and responses to intents. Intents can be fired by any component that supports it. Examples are [Alexa](/components/alexa/) (Amazon Echo), [API.ai](/components/dialogflow/) (Google Assistant) and [Snips](/components/snips/). ```yaml # Example configuration.yaml entry diff --git a/source/_components/ios.markdown b/source/_components/ios.markdown new file mode 100644 index 00000000000..44ac2fa88e3 --- /dev/null +++ b/source/_components/ios.markdown @@ -0,0 +1,17 @@ +--- +layout: page +title: "iOS" +description: "Instructions on how to use the iOS companion app with Home Assistant." +date: 2018-04-06 08:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: apple.png +ha_category: Hub +featured: false +ha_release: 0.31 +ha_iot_class: depends +--- + +The `ios` component is the Home Assistant part for using the iOS companion app. For further details please check the [iOS section](/docs/ecosystem/ios/) in the documentation for further details. diff --git a/source/_components/iota.markdown b/source/_components/iota.markdown new file mode 100644 index 00000000000..d50ad4f5452 --- /dev/null +++ b/source/_components/iota.markdown @@ -0,0 +1,62 @@ +--- +layout: page +title: "IOTA" +description: "Instructions on how to integrate IOTA wallets with Home Assistant." +date: 2017-12-31 13:29 +sidebar: true +comments: false +sharing: true +footer: true +logo: iota.png +ha_category: Finance +ha_release: 0.62 +ha_iot_class: "Cloud Polling" +--- + +[IOTA](http://iota.org/) is a new blockless distributed ledger which is scalable, lightweight and makes it possible to transfer value without any fees. + +The `iota` component displays various details (e.g., the balance, node attributes) of IOTA wallets. + +```yaml +# configuration.yaml example +iota: + iri: https://testnet140.tangle.works:4434 + wallets: + - name: Default Wallet + seed: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX +``` + +{% configuration %} +iri: + description: URL of the IRI node. + required: true + type: string +testnet: + description: Flag for indicating "testnet". + required: false + default: false + type: bool +wallets: + description: List of IOTA wallets. + required: true + type: list + keys: + name: + description: Name of the wallet. + seed: + description: Seed of the wallet. +{% endconfiguration %} + +A full configuration example could look the one below: + +```yaml +# Full example +iota: + iri: https://testnet140.tangle.works:4434 + testnet: true + wallets: + - name: Default Wallet + seed: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX + - name: Exchange Wallet + seed: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX +``` diff --git a/source/_components/isy994.markdown b/source/_components/isy994.markdown index 8cf050f2383..1c833178215 100644 --- a/source/_components/isy994.markdown +++ b/source/_components/isy994.markdown @@ -1,7 +1,7 @@ --- layout: page title: "ISY994 Controller" -description: "Instructions how to setup the ISY994 controller within Home Assistant." +description: "Instructions on how to setup the ISY994 controller within Home Assistant." date: 2015-01-20 22:36 sidebar: true comments: false @@ -29,22 +29,66 @@ isy994: username: ISY_USERNAME password: ISY_PASSWORD ``` + Configuration variables: - **host** (*Required*): The host entry should be in full URL format, eg. http://192.168.10.100:80 - **username** (*Required*): The username that used to access the ISY interface. - **password** (*Required*): The password that used to access the ISY interface. -- **sensor_string** (*Optional*): This is the string that is used to identify which devices are to be assumed to be sensors instead of lights of switches. By default, this string is 'sensor'. If this string is found in the device name or folder, Home Assistant will assume it is as a sensor or binary sensor (if the device has on/off or true/false states). -- **hidden_string** (*Optional*): The HIDDEN_STRING is a string that is used to identify which devices are to be hidden on Home Assistant's front page. This string will be stripped from the device's name before being used. By default, this value is '{HIDE ME}'. +- **sensor_string** (*Optional*): This is the string that is used to identify which devices are to be assumed to be sensors instead of lights of switches. By default, this string is 'sensor'. If this string is found in the device name or folder, Home Assistant will assume it is as a sensor or binary sensor (if the device has on/off or true/false states). This is only necessary for nodes that are not automatically detected as sensors by Home Assistant. Insteon door, window, motion and leak sensors should all be detected automatically. +- **ignore_string** (*Optional*): Any devices that contain this string in their name (or folder path) will be ignored by Home Assistant. They will not become entities at all. The default value is `{IGNORE ME}`. +- **enable_climate** (*Optional*): When enabled, climate measurements from the optional climate module in the ISY994 will show up in Home Assistant as sensors. The default value is `True`. - **tls** (*Optional*): This entry should reflect the version of TLS that the ISY controller is using for HTTPS encryption. This value can be either 1.1 or 1.2. If this value is not set, it is assumed to be version 1.1. This is the default for most users. ISY994 Pro users may likely be using 1.2. When using HTTPS in the host entry, it is best practice to set this value. Once the ISY controller is configured, it will automatically import any binary sensors, covers, fans, lights, locks, sensors and switches it can locate. +### {% linkable_title Sensors %} + +An Insteon door/window sensor will show up as a single Binary Sensor rather than two discrete devices like it does in the ISY994 admin panel. Note that when in "Two Nodes" mode, the sensor will have an UNKNOWN state until the sensor changes for the first time since the last Home Assistant reboot. If you do not use Insteon scenes that are controlled directly from the door sensor, you may prefer to set the sensor to "One Node" mode using the ISY Admin Panel. + +Each Insteon leak sensor will also show up as a single Binary Sensor as opposed to the two nodes seen in the ISY994. The name of the device will be based on what the parent node is named in the ISY994, which is typically the one with "-Dry" at the end of the name. This may be confusing, because "On" means wet in Home Assistant. You can rename this node either in the ISY994 Admin Panel (which will change the entity_id in Home Assistant) or assign a `friendly_name` in the [Customization section](/docs/configuration/customizing-devices/) of your configuration. + +If your leak or door/window sensor supports heartbeats, a new binary_sensor device will be added to Home Assistant to represent the battery state. The sensor will stay "Off" so long as the daily heartbeats occur. If a heartbeat is missed, the sensor will flip to "On". The name of this device will be based on the heartbeat node in the ISY. + +### {% linkable_title Handling Insteon Control Events %} + +A Home Assistant `isy994_control` event is emitted for every "control" event in the Insteon network. This allows you to write automations that trigger based on Insteon button presses. You can also trigger off of the unique Insteon events, such as double-presses, long-holds etc. + +```yaml +automation: + - alias: turn off living room on double tap lightswitch + trigger: + platform: event + event_type: isy994_control + event_data: + entity_id: light.lr_track_lights_front + control: 'DFOF' + action: + service: light.turn_off + entity_id: light.lr_track_lights_rear +``` + +All `isy994_control` events will have an `entity_id` and `control` parameter in its `event_data`. You'll need to refer to ISY994 documentation for the list of every possible control type, but the common ones are: + +- `DON`: On button. +- `DOF`: Off button. +- `DFON`: "Fast On", usually from double-tapping an On button. +- `DFOF`: "Fast Off", usually from double-tapping an Off button. +- `FDUP`: "Fade Up", usually while holding down an On button. +- `FDDOWN`: "Fade Down", usually while holding down an Off button. +- `FDSTOP`: "Fade Stop", when releasing a long-held button. +- `BRT`: "Brighten", from controllers that issue a single command to slightly brighten a light. +- `DIM`: "Dim", from controllers that issue a single command to slightly dim a light. + +### {% linkable_title Insteon Scenes %} + +All Insteon scenes configured in the ISY994 will show up as switches in Home Assistant. + ### {% linkable_title Creating Custom Devices %} Using the Programs tab in the controller's Administrative Console, custom devices can be created that will appear natively inside of Home Assistant. Home Assistant will scan the following folders and build the device to the associated domains: -``` +```text My Programs ├── HA.binary_sensor | ├── Movement In House @@ -82,11 +126,12 @@ My Programs ``` A device is created by creating a directory, with the name for the device, under any of the following root directories: - * *HA.binary_sensor* will create a binary sensor (see [Customizing Devices](https://home-assistant.io/getting-started/customizing-devices/) to set the sensor class) - * *HA.cover* will create a cover - * *HA.fan* will create a fan - * *HA.lock* will create a lock - * *HA.switch* will create a switch + +- *HA.binary_sensor* will create a binary sensor (see [Customizing Devices](/getting-started/customizing-devices/) to set the sensor class). +- *HA.cover* will create a cover. +- *HA.fan* will create a fan. +- *HA.lock* will create a lock. +- *HA.switch* will create a switch. A program, named *status*, is required under the program device directory. A program, named *actions*, is required for all program devices except for binary_sensor. Any other programs in these device directories will be ignored. The *status* program requires that you create a variable with the name of your choice. This variable will store the actual status of the new device and will be updated by the *action* program. @@ -95,21 +140,23 @@ A program, named *status*, is required under the program device directory. A pro

The *status* program in this directory is what indicates the state of the device: - * *binary_sensor* on if the clause returns true, otherwise off - * *cover* closed if the clause returns true, otherwise open - * *fan* on if the clause returns true, otherwise off - * *lock* locked if the clause returns true, otherwise unlocked - * *switch* on if the clause returns true, otherwise off + +- *binary_sensor* on if the clause returns true, otherwise off. +- *cover* closed if the clause returns true, otherwise open. +- *fan* on if the clause returns true, otherwise off. +- *lock* locked if the clause returns true, otherwise unlocked. +- *switch* on if the clause returns true, otherwise off.

The *actions* program indicates what should be performed for the following device services: - * *cover* the THEN clause is evaluated for the open_cover service, the ELSE clause is evaluated for the close_cover service - * *fan* the THEN clause is evaluated for the turn_on service, the ELSE clause is evaluated for the turn_off service - * *lock* the THEN clause is evaluated for the lock service, the ELSE clause is evaluated for the unlock service - * *switch* the THEN clause is evaluated for the turn_on service, the ELSE clause is evaluated for the turn_off service + +- *cover* the THEN clause is evaluated for the open_cover service, the ELSE clause is evaluated for the close_cover service. +- *fan* the THEN clause is evaluated for the turn_on service, the ELSE clause is evaluated for the turn_off service. +- *lock* the THEN clause is evaluated for the lock service, the ELSE clause is evaluated for the unlock service. +- *switch* the THEN clause is evaluated for the turn_on service, the ELSE clause is evaluated for the turn_off service.

diff --git a/source/_components/joaoapps_join.markdown b/source/_components/joaoapps_join.markdown index e27aa82e1a1..822a14604ba 100644 --- a/source/_components/joaoapps_join.markdown +++ b/source/_components/joaoapps_join.markdown @@ -12,23 +12,21 @@ ha_category: Hub ha_release: "0.24" --- - -The Join platform exposes services from [Join](http://joaoapps.com/join). In Home Assistant, the Join features are divided up in two locations, the Join component, and the Join notify platform. The notify platform allows us to send messages to Join devices, the component allows us to access the other special features that Join offers. +The `joaoapps_join` component exposes services from [Join](http://joaoapps.com/join). In Home Assistant, the Join features are divided up in two locations, the Join component, and the Join notify platform. The notify platform allows us to send messages to Join devices, the component allows us to access the other special features that Join offers. In the `configuration.yaml` file you need to provide the api key and device id or name of the target device. You can find your device id and api key [here](https://joinjoaomgcd.appspot.com/). To set it up, add the following information to your `configuration.yaml` file: ```yaml +# Example configuration.yaml entry notify: - platform: joaoapps_join api_key: asd97823jb628a34fwsdfwefd5384345tf2d - device_id: d5asdfasdf54645h45h368761dfe5gt8a *optional - device_ids: d5asdfasdf54645h45h368761dfe5gt8a, a4asdfasdf54645h45h368761dfe5gt3b *optional - device_names: Pixel, iPhone *optional - name: Phones *optional - - + device_id: d5asdfasdf54645h45h368761dfe5gt8a + device_ids: d5asdfasdf54645h45h368761dfe5gt8a, a4asdfasdf54645h45h368761dfe5gt3b + device_names: Pixel, iPhone + name: Phones joaoapps_join: - name: android device_id: group.android @@ -42,20 +40,19 @@ Configuration variables: - **device_ids** (*Optional*): Comma separated list of device ids. - **device_names** (*Optional*): Comma separated list of device names. -The notify service has two optional parameters: `icon` and `vibration`. You can use them like so: +The notify service has two optional parameters: `icon` and `vibration`. You can use them like so: ```json {"message":"Hello from Home Assistant!","title":"Home Assistant","data":{"icon":"https://goo.gl/xeetdy", "vibration":"0,65,706,86,657,95,668,100"}} ``` -The services exposed in the joaoapps_join component can be used with the service data described below: +The services exposed in the `joaoapps_join` component can be used with the service data described below: | Service | Data | |------------------------------ |------------------------------------------------------------------ | | joaoapps_join/ring | | -| joaoapps_join/send_sms | {"number":"5553334444", "message":"Hello!"} | -| joaoapps_join/send_tasker | {"command":"test"} | -| joaoapps_join/send_url | {"url":"http://google.com"} | -| joaoapps_join/send_wallpaper | {"url":"http://www.planwallpaper.com/static/images/ZhGEqAP.jpg"} | -| joaoapps_join/send_file | {"url":"http://download.thinkbroadband.com/5MB.zip"} | - +| joaoapps_join/send_sms | `{"number":"5553334444", "message":"Hello!"}` | +| joaoapps_join/send_tasker | `{"command":"test"}` | +| joaoapps_join/send_url | `{"url":"http://google.com"}` | +| joaoapps_join/send_wallpaper | `{"url":"http://www.planwallpaper.com/static/images/ZhGEqAP.jpg"}` | +| joaoapps_join/send_file | `{"url":"http://download.thinkbroadband.com/5MB.zip"}` | diff --git a/source/_components/juicenet.markdown b/source/_components/juicenet.markdown index 5015022c550..0ff22b9908e 100644 --- a/source/_components/juicenet.markdown +++ b/source/_components/juicenet.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Juicenet" -description: "Instructions how to setup WiFi-equipped Juicenet charging stations with Home Assistant." +description: "Instructions on how to setup WiFi-equipped Juicenet charging stations with Home Assistant." date: 2017-05-20 22:00 sidebar: true comments: false @@ -12,13 +12,14 @@ ha_category: Hub ha_release: 0.47 --- - The `juicenet` sensor platform pulls data from a [JuiceNet](https://emotorwerks.com/products/juicenet/) charging station equipped with a wifi connection. It will access and make available all of the devices attached to your account. +## {% linkable_title Configuration %} + To enable the platform in your installation, add the following to your `configuration.yaml` file: ```yaml -# Example configuration.yml entry +# Example configuration.yaml entry juicenet: access_token: ACCESS_TOKEN ``` diff --git a/source/_components/keyboard.markdown b/source/_components/keyboard.markdown index 07b3e2db260..d1324ae76ae 100644 --- a/source/_components/keyboard.markdown +++ b/source/_components/keyboard.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Keyboard" -description: "Instructions how to simulate key presses with Home Assistant." +description: "Instructions on how to simulate key presses with Home Assistant." date: 2015-01-24 14:39 sidebar: true comments: false @@ -12,15 +12,14 @@ ha_category: Automation ha_release: pre 0.7 --- - The `keyboard` component simulates key presses on the host machine. It currently offers the following Buttons as a Service (BaaS): - * `keyboard/volume_up` - * `keyboard/volume_down` - * `keyboard/volume_mute` - * `keyboard/media_play_pause` - * `keyboard/media_next_track` - * `keyboard/media_prev_track` +- `keyboard/volume_up` +- `keyboard/volume_down` +- `keyboard/volume_mute` +- `keyboard/media_play_pause` +- `keyboard/media_next_track` +- `keyboard/media_prev_track` To load this component, add the following lines to your `configuration.yaml`: @@ -33,7 +32,7 @@ keyboard: You may need to install platform-specific [dependencies for PyUserInput](https://github.com/PyUserInput/PyUserInput#dependencies) in order to use the keyboard component. In most cases this can be done by running: ```bash -$ pip3 install [package name] +pip3 install [package name] ``` #### {% linkable_title Windows %} diff --git a/source/_components/keyboard_remote.markdown b/source/_components/keyboard_remote.markdown index f1d80bfa973..f94507ac0e2 100644 --- a/source/_components/keyboard_remote.markdown +++ b/source/_components/keyboard_remote.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Keyboard Remote" -description: "Instructions how to use a keyboard to remote control Home Assistant." +description: "Instructions on how to use a keyboard to remote control Home Assistant." date: 2016-09-28 14:39 sidebar: true comments: false @@ -15,11 +15,10 @@ ha_iot_class: "Local Push" Receive signals from a keyboard and use it as a remote control. -This component allows you to use a keyboard as remote control. It will fire `keyboard_remote_command_received` events which can then be used in automation rules. +This component allows you to use one or more keyboards as remote controls. It will fire `keyboard_remote_command_received` events which can then be used in automation rules. The `evdev` package is used to interface with the keyboard and thus this is Linux only. It also means you can't use your normal keyboard for this because `evdev` will block it. - ```yaml # Example configuration.yaml entry keyboard_remote: @@ -37,15 +36,17 @@ In case of presence of multiple devices of the same model, `device_descriptor` m A list of possible device descriptors and names is reported in the debug log at startup when the device indicated in the configuration entry could not be found. -A full configuration for Keyboard Remote could look like the one below: +A full configuration for two Keyboard Remotes could look like the one below: ```yaml keyboard_remote: - device_descriptor: '/dev/input/by-id/bluetooth-keyboard' +- device_descriptor: '/dev/input/by-id/bluetooth-keyboard' + type: 'key_up' +- device_descriptor: '/dev/input/event0' type: 'key_up' ``` -or like the following: +Or like the following for one keyboard: ```yaml keyboard_remote: @@ -62,19 +63,24 @@ automation: platform: event event_type: keyboard_remote_command_received event_data: + device_descriptor: "/dev/input/event0" key_code: 107 # inspect log to obtain desired keycode action: service: light.turn_on entity_id: light.all ``` +`device_descriptor` or `device_name` may be specificed in the trigger so the automation will be fired only for that keyboard. This is especially useful if you wish to use several bluetooth remotes to control different devices. Omit them to ensure the same key triggers the automation for all keyboards/remotes. + ## {% linkable_title Disconnections %} + This component manages disconnections and re-connections of the keyboard, for example in the case of a Bluetooth device that turns off automatically to preserve battery. If the keyboard disconnects, the component will fire an event `keyboard_remote_disconnected`. When the keyboard reconnects, an event `keyboard_remote_connected` will be fired. Here's an automation example that plays a sound through a media player whenever the keyboard connects/disconnects: + ```yaml automation: - alias: Keyboard Connected @@ -100,13 +106,14 @@ automation: ``` ## {% linkable_title Permissions %} + There might be permissions problems with the event input device file. If this is the case, the user that Home Assistant runs as must be allowed read and write permissions with: ```bash -$ sudo setfacl -m u:HASS_USER:rw /dev/input/event* +sudo setfacl -m u:HASS_USER:rw /dev/input/event* ``` -where `HASS_USER` is the user who runs Home Assistant. +Where `HASS_USER` is the user who runs Home Assistant. If you want to make this permanent, you can use a udev rule that sets it for all event input devices. Add a file `/etc/udev/rules.d/99-userdev-input.rules` containing: @@ -114,8 +121,8 @@ If you want to make this permanent, you can use a udev rule that sets it for all KERNEL=="event*", SUBSYSTEM=="input", RUN+="/usr/bin/setfacl -m u:HASS_USER:rw $env{DEVNAME}" ``` -You can check ACLs permissions with +You can check ACLs permissions with: ```bash -$ getfacl /dev/input/event* +getfacl /dev/input/event* ``` diff --git a/source/_components/kira.markdown b/source/_components/kira.markdown index d2c2594834a..0e74ad07b69 100644 --- a/source/_components/kira.markdown +++ b/source/_components/kira.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Kira" -description: "Instructions how to integrate Keene Electronics IR over IP modules (Kira) into Home Assistant." +description: "Instructions on how to integrate Keene Electronics IR over IP modules (Kira) into Home Assistant." date: 2017-05-07 00:00 sidebar: true comments: false @@ -39,6 +39,7 @@ kira: ``` Configuration variables: + - **sensors** (*Optional*): Kira sensors to register - **name** (*Optional*): Name of this sensor. - **host** (*Optional*): Bind address for this sensor. 0.0.0.0 is default. @@ -70,17 +71,19 @@ The first time the Kira component is loaded, `kira_codes.yaml` will be created i ``` Configuration variables: + - **name** (*Required*): The name of this code. - **code** (*Required*): The data for this code (see below). - **device** (*Optional*): The device this code is associated with. Default is "unknown". - **type** (*Optional*): The type of this code. If this field is omitted, the type will be autodetected if possible. - **repeat** (*Optional*): The number of times to repeat this code (on transmit). Default is 1. -Some manufacturers (e.g. Samsung) require an IR code to be sent a number of times in a row in rapid succession (usually 3). This doesn't apply to the vast majority of devices, but it can be helpful if needed. +Some manufacturers (e.g., Samsung) require an IR code to be sent a number of times in a row in rapid succession (usually 3). This doesn't apply to the vast majority of devices, but it can be helpful if needed. ### {% linkable_title Code Types %} When creating an entry in `kira_codes.yaml`, a few different kinds of codes can be used. + - **kira**: This is the native wire protocol used by Kira modules. These can be captured using netcat. - **pronto**: Pronto codes are supported. - **nec**: If the device uses NEC IR codes and the manufacturer has published them, they can be used here. diff --git a/source/_components/knx.markdown b/source/_components/knx.markdown index ff8c0786fcc..7acfae76761 100644 --- a/source/_components/knx.markdown +++ b/source/_components/knx.markdown @@ -31,6 +31,7 @@ There is currently support for the following device types within Home Assistant: - [Light](/components/light.knx) - [Thermostat](/components/climate.knx) - [Notify](/components/notify.knx) +- [Scene](/components/scene.knx) ### {% linkable_title Configuration %} @@ -82,8 +83,7 @@ knx: - **fire_event** (*Optional*): If set to True, platform will write all received KNX messages to event bus - **fire_event_filter** (*Optional*): If `fire_event` is set `fire_event_filter` has to be specified. `fire_event_filter` defines a list of patterns for filtering KNX addresses. Only telegrams which match this pattern are sent to the HOme Assistant event bus. -- **state_updater** (*Optional*): The component will collect the current state of each configured device from the KNX bus to display it correctly within Home-Assistant. Set this option to False to prevent this behaviour. -- **time_address** (*Optional*): Broadcast current local time to KNX bus with configured group address. +- **state_updater** (*Optional*): The component will collect the current state of each configured device from the KNX bus to display it correctly within Home-Assistant. Set this option to False to prevent this behavior. ### {% linkable_title Services %} @@ -98,6 +98,27 @@ Service Data: {"address": "1/0/15", "payload": 0} * **address**: KNX group address * **payload**: Payload, either an integer or an array of integers +### {% linkable_title Exposing sensor values or time to knx bus %} + +KNX component is able to expose time or sensor values to KNX bus. The component will broadcast any change of the exposed value to the KNX bus and answer read requests to the specified group address: + +```yaml +# Example configuration.yaml entry +knx: + expose:: + - type: 'temperature' + entity_id: 'sensor.owm_temperature' + address: '0/0/2' + - type: 'time' + address: '0/0/1' + - type: 'datetime' + address: '0/0/23' +``` + +* **type**: Type of the exposed value. Either time or datetime or any supported type of [KNX Sensor](/components/sensor.knx/) (e.g., "temperature" or "humidity"). +* **entity_id**: Entity id of the HASS component to be exposed. Not necessary for types time and datetime. +* **address**: KNX group address. + ### {% linkable_title Known issues %} diff --git a/source/_components/konnected.markdown b/source/_components/konnected.markdown new file mode 100644 index 00000000000..4710844aa45 --- /dev/null +++ b/source/_components/konnected.markdown @@ -0,0 +1,156 @@ +--- +layout: page +title: "Konnected" +description: "Connect wired alarm sensors and siren using the NodeMCU based Konnected Alarm Panel" +date: 2018-04-03 12:30 +sidebar: true +comments: false +sharing: true +footer: true +logo: konnected.png +ha_category: Alarm +ha_release: "0.70" +--- + +The `konnected` component lets you connect wired sensors and switches to a NodeMCU ESP8226 based device running the [open source Konnected software](https://github.com/konnected-io/konnected-security). Reuse the wired sensors and siren from an old or pre-wired alarm system installation and integrate them directly into Home Assistant. + +Visit the [Konnected.io website](https://konnected.io) for more information about the Konnected Alarm Panel board and compatible hardware. + +The component currently supports the following device types in Home Assistant: + +- [Binary Sensor](/components/binary_sensor.konnected/): Wired door and window sensors, motion detectors, glass-break detectors, leak sensors, smoke & CO detectors or any open/close switch. +- [Switch](/components/switch.konnected/): Actuate a siren, strobe, buzzer or relay module. + +This component requires the [`discovery`](https://www.home-assistant.io/components/discovery) component to be enabled. + +## {% linkable_title Configuration %} + +A `konnected` section must be present in the `configuration.yml` file that specifies the Konnected devices on the network and the sensors or actuators attached to them: + +```yaml +# Example configuration.yaml entry +konnected: + access_token: REPLACE_ME_WITH_A_RANDOM_STRING + devices: + - id: 8bcd53 + binary_sensors: + - zone: 1 + type: door + switches: + - zone: out + - id: 438a38 + binary_sensors: + - pin: 2 + type: door + switches: + - pin: 5 +``` + +{% configuration %} +access_token: + description: Any random string. This is used to ensure that only those devices which you have configured can authenticate to Home Assistant to change a device state. + required: true + type: string +api_host: + description: Override the IP address/host (and port number) of Home Assistant that the Konnected device(s) will use to communicate sensor state updates. If omitted, this is defaulted to the value of `base_url` in the `http` component. If you've set `base_url` to an external hostname, then you'll want to set this value back to your _local_ IP address and port (e.g. `http://192.168.1.101:8123`). + required: false + type: url + default: value of `base_url` +devices: + description: A list of Konnected devices that you have on your network. + required: true + type: list + keys: + id: + description: The MAC address of the WiFi module with colons/punctuation removed. You can either use the full 12-character MAC address or only the last 6 characters. This is visible in the device's WiFi SSID and hostname. + required: true + type: string + binary_sensors: + description: A list of binary sensors connected to the device. See [Konnected Binary Sensor](/components/binary_sensor.konnected/) for configuration variables. + required: false + type: list + keys: + pin: + description: The number corresponding to the _IO index_ of the labeled pin on the NodeMCU dev board. See the [NodeMCU GPIO documentation](https://nodemcu.readthedocs.io/en/master/en/modules/gpio/) for more details. Valid values are 1, 2, 5, 6, 7 and 9. + required: exclusive + zone: + description: The number corresponding to the labeled zone on the [Konnected Alarm Panel](https://konnected.io) board. Valid values are 1, 2, 3, 4, 5 and 6. + required: exclusive + type: + description: Any [binary sensor](/components/binary_sensor/) class, typically `door`, `window`, `motion` or `smoke`. + required: true + name: + description: The name of the device used in the front end. + required: false + default: automatically generated + switches: + description: A list of actuators (on/off switches) connected to the device. See [Konnected Switch](/components/switch.konnected/) for configuration variables. + required: false + type: list + keys: + pin: + description: The number corresponding to the _IO index_ of the labeled pin on the NodeMCU dev board. See the [NodeMCU GPIO documentation](https://nodemcu.readthedocs.io/en/master/en/modules/gpio/) for more details. Valid values are 1, 2, 5, 6, 7 and 8. + required: exclusive + zone: + description: The number corresponding to the labeled zone on the [Konnected Alarm Panel](https://konnected.io) board or the word `out` to specify the dedicated ALARM/OUT terminal on the Konnected board. Valid values are 1, 2, 3, 4, 5 and out. + required: exclusive + name: + description: The name of the device used in the front end. + required: false + default: automatically generated + activation: + description: Either "low" or "high" to specify the state when the switch is turned on. + default: high + required: false +{% endconfiguration%} + +#### {% linkable_title Configuration Notes %} + +- Either **pin** or **zone** is required for each actuator or sensor. Do not use both in the same definition. +- Pin `D8` or the `out` zone will only work when activation is set to high (the default). + +## {% linkable_title Full configuration %} + +```yaml +# Example configuration.yaml entry +konnected: + access_token: REPLACE_ME_WITH_A_RANDOM_STRING + devices: + - id: 8bcd53 + binary_sensors: + - zone: 1 + type: door + name: 'Front Door' + - zone: 3 + type: motion + name: 'Test Motion' + switches: + - zone: out + name: siren + - id: 438a38 + binary_sensors: + - pin: 1 + type: motion + name: 'Office Motion' + - pin: 2 + type: door + name: 'Office Door' + switches: + - pin: 5 + name: 'Garage Door' + activation: low +``` + +### {% linkable_title Pin Mapping %} + +Konnected runs on an ESP8266 board with the NodeMCU firmware. It is commonly used with the NodeMCU dev kit WiFi module and optionally Konnected's Alarm Panel hardware. The following table shows the pin mapping between the Konnected hardware labeled zones, the NodeMCU labeled pins and the ESP8266 GPIO pins. + +| Konnected Alarm Panel Zone | NodeMCU pin | IO Index | ESP8266 GPIO | +|---|---|---|---| +| 1 | D1 | 1 | GPIO5 | +| 2 | D2 | 2 | GPIO4 | +| 3 | D5 | 5 | GPIO14 | +| 4 | D6 | 6 | GPIO12 | +| 5 | D7 | 7 | GPIO13 | +| 6 | RX | 9 | GPIO3 | +| ALARM or OUT | D8 | 8 | GPIO15 | diff --git a/source/_components/light.abode.markdown b/source/_components/light.abode.markdown index bb6d597deef..f362107791d 100644 --- a/source/_components/light.abode.markdown +++ b/source/_components/light.abode.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Abode Light" -description: "Instructions how to integrate Abode lights into Home Assistant." +description: "Instructions on how to integrate Abode lights into Home Assistant." date: 2017-08-26 13:28 sidebar: true comments: false diff --git a/source/_components/light.ads.markdown b/source/_components/light.ads.markdown new file mode 100644 index 00000000000..aaedc1c12f4 --- /dev/null +++ b/source/_components/light.ads.markdown @@ -0,0 +1,42 @@ +--- +layout: page +title: "ADS Light" +description: Instructions on how to set up ADS lights within Home Assistant +date: 2017-10-25 10:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: beckhoff.png +ha_category: Light +ha_release: "0.60" +ha_iot_class: "Local Push" +--- + +The `ads` light platform allows you to control your connecte ADS lights. + +To use your ADS device, you first have to set up your [ADS hub](/components/ads/) and then add the following to your `configuration.yaml` +file: + +```yaml +# Example configuration.yaml entry +light: + - platform: ads + adsvar: GVL.enable_light + adsvar_brightness: GVL.brightness +``` + +{% configuration %} + adsvar: + required: true + description: The name of the boolean variable that switches the light on + type: string + adsvar_brightness: + required: false + description: The name of the variable that controls the brightness, use an unsigned integer on the PLC side + type: integer + name: + required: false + description: An identifier for the Light in the frontend + type: string +{% endconfiguration %} diff --git a/source/_components/light.avion.markdown b/source/_components/light.avion.markdown index 74260e93957..68c40b1aac4 100644 --- a/source/_components/light.avion.markdown +++ b/source/_components/light.avion.markdown @@ -21,8 +21,6 @@ To enable these lights, add the following lines to your `configuration.yaml` fil # Example configuration.yaml entry light: - platform: avion - username: testuser@fakedomain.com - password: foobar ``` Configuration variables: diff --git a/source/_components/light.blinksticklight.markdown b/source/_components/light.blinksticklight.markdown index 9deab2be84a..c11da280aca 100644 --- a/source/_components/light.blinksticklight.markdown +++ b/source/_components/light.blinksticklight.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Blinkstick" -description: "Instructions how to setup Blinkstick lights within Home Assistant." +description: "Instructions on how to setup Blinkstick lights within Home Assistant." date: 2015-10-08 10:00 sidebar: true comments: false diff --git a/source/_components/light.blinkt.markdown b/source/_components/light.blinkt.markdown index 617e81cac21..ad2d6200f87 100644 --- a/source/_components/light.blinkt.markdown +++ b/source/_components/light.blinkt.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Blinkt!" -description: "Instructions how to setup Blinkt! RGB LED lights within Home Assistant." +description: "Instructions on how to setup Blinkt! RGB LED lights within Home Assistant." date: 2017-04-30 9:00 sidebar: true comments: false diff --git a/source/_components/light.deconz.markdown b/source/_components/light.deconz.markdown new file mode 100644 index 00000000000..918f0733665 --- /dev/null +++ b/source/_components/light.deconz.markdown @@ -0,0 +1,29 @@ +--- +layout: page +title: "deCONZ Lights" +description: "Instructions on how to integrate Zigbee lights from deCONZ into Home Assistant." +date: 2017-11-12 16:30 +sidebar: true +comments: false +sharing: true +footer: true +logo: deconz.jpeg +ha_category: Light +ha_release: "0.61" +ha_iot_class: "Local Push" +--- + +See the [deCONZ main component](/components/deconz/) for configuration instructions. + +The `Entity Id` names will be `light.device_name`, where `device_name` is defined in deCONZ. Light groups created in deCONZ will be created in Home Assistant as lights named `light.group_name_in_deconz`, allowing the user to control groups of lights with only a single API call to deCONZ. + +#### {% linkable_title Verified supported lights %} + +- IKEA Trådfri bulb E14 WS opal 400lm +- IKEA Trådfri Bulb E27 WS Opal 980lm +- IKEA Trådfri Bulb E27 WS Opal 1000lm +- IKEA Trådfri Bulb GU10 W 400lm +- OSRAM Flex RGBW +- OSRAM Gardenpole RGBW +- Philips Hue White A19 +- Philips Hue White Ambiance A19 diff --git a/source/_components/light.decora_wifi.markdown b/source/_components/light.decora_wifi.markdown index 85dbcd0e575..7fc68d0dcf8 100644 --- a/source/_components/light.decora_wifi.markdown +++ b/source/_components/light.decora_wifi.markdown @@ -8,16 +8,17 @@ comments: false sharing: true footer: true ha_category: Light -ha_iot_class: "Local Polling" +ha_iot_class: "Cloud Polling" logo: leviton.png ha_release: 0.51 --- -Support for [Leviton Decora Wi-Fi](http://www.leviton.com/en/products/lighting-controls/decora-smart-with-wifi) dimmers/switches. +Support for [Leviton Decora Wi-Fi](http://www.leviton.com/en/products/lighting-controls/decora-smart-with-wifi) dimmers/switches via the MyLeviton API. Supported devices (tested): -- [DW6HD1-BZ](https://www.leviton.com/en/products/dw6hd) (Decora Smart Wi-Fi 600W Dimmer) +- [DW6HD1-BZ](https://www.leviton.com/en/products/dw6hd-1bz) (Decora Smart Wi-Fi 600W Dimmer) +- [DW15S-1BZ](https://www.leviton.com/en/products/dw15s-1bz) (Decora Smart Wi-Fi 15A Switch) To enable these lights, add the following lines to your `configuration.yaml` file: @@ -25,13 +26,18 @@ To enable these lights, add the following lines to your `configuration.yaml` fil # Example configuration.yaml entry light: - platform: decora_wifi - username: my_leviton_user_email@email.com - password: my_leviton_password + username: YOUR_USERNAME + password: YOUR_PASSWORD ``` -Configuration variables: - -- **username** (*Required*): Your "My Leviton" app email address/user name. -- **password** (*Required*): Your "My Leviton" app password. - +{% configuration %} +username: + description: Your "My Leviton" app email address/user name. + required: true + type: string +password: + description: Your "My Leviton" app password. + required: true + type: string +{% endconfiguration %} diff --git a/source/_components/light.eufy.markdown b/source/_components/light.eufy.markdown new file mode 100644 index 00000000000..d8596c00487 --- /dev/null +++ b/source/_components/light.eufy.markdown @@ -0,0 +1,19 @@ +--- +layout: page +title: "Eufy Lights" +description: "Instructions on how to integrate Eufy LED lights into Home Assistant." +date: 2018-04-09 19:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: eufy.png +ha_category: Light +ha_iot_class: "Local Polling" +ha_release: 0.68 +--- + +The `eufy` platform allows you to control your [Eufy](http://www.eufylife.com) lights from within Home Assistant. + +They will be automatically discovered if the [Eufy](/components/eufy/) component is enabled. + diff --git a/source/_components/light.flux_led.markdown b/source/_components/light.flux_led.markdown index e74e6942d96..d53ebb88a69 100644 --- a/source/_components/light.flux_led.markdown +++ b/source/_components/light.flux_led.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Flux Led/MagicLight" -description: "Instructions how to setup Flux led/MagicLight within Home Assistant." +description: "Instructions on how to setup Flux led/MagicLight within Home Assistant." date: 2015-07-17 20:09 sidebar: true comments: false @@ -109,6 +109,14 @@ Will add a light with rgb+white mode (default). White and RGB channels can be ad mode: "rgbw" ``` +Will add a light with white mode only. This is useful when only W channel is connected to an RGBW controller and allows the white level to be controlled via brightness value. + +```yaml + 192.168.1.10: + name: NAME + mode: "w" +``` + Some devices such as the Ledenet RGBW controller use a slightly different protocol for communicating the brightness to each color channel. If your device is only turning on or off but not changing color or brightness try adding the LEDENET protocol. ```yaml diff --git a/source/_components/light.futurenow.markdown b/source/_components/light.futurenow.markdown new file mode 100644 index 00000000000..fac13214fca --- /dev/null +++ b/source/_components/light.futurenow.markdown @@ -0,0 +1,97 @@ +--- +layout: page +title: "P5 FutureNow Lights" +description: "Instructions on how to set up P5 FutureNow relay/dimmer units as lights within Home Assistant." +date: 2018-07-24 15:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: p5.png +ha_category: Light +ha_release: 0.75 +--- + +The `futurenow` light platform allows you to use [P5](http://www.p5.hu) FutureNow relay/dimmer units as lights. Currently supported units: +* [FutureNow FNIP-6x2AD](http://www.p5.hu/index.php/products/ethernet-modules/265-fnip-6x2ad) dimmer unit (outputs only) +* [FutureNow FNIP-8x10A](http://www.p5.hu/index.php/products/ethernet-modules/263-fnip-8x10a) relay unit (outputs only) + +### {% linkable_title Configuration Sample %} + +To use your FutureNow units, add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +light: + - platform: futurenow + driver: FNIP6x10ad + host: 192.168.1.101 + port: 7078 + devices: + 5: + name: Dimmer Channel 5 + dimmable: true +``` + +{% configuration %} +driver: + description: "Type of the device. Currently `FNIP6x10ad` or `FNIP8x10a`." + required: true + type: string +host: + description: "The IP address or hostname of your unit, e.g., `192.168.1.101`." + required: true + type: string +port: + description: "The TCP port, as set in the unit's settings. Default is `7078`." + required: true + type: string +devices: + description: "List of output channels to set up as lights." + required: true + type: map + keys: + channel_number: + description: "Output's (light) properties." + required: true + type: map + keys: + name: + description: "The name of the light." + required: true + type: string + dimmable: + description: "Set to `true` to enable dimming (FNIP6x10ad only)." + required: false + type: boolean + default: false +{% endconfiguration %} + +### {% linkable_title Extended Configuration Sample %} + +The following example `configuration.yaml` has two different FutureNow units with multiple channels: + +```yaml +# Example configuration.yaml entry +light: + - platform: futurenow + driver: FNIP6x10ad + host: 192.168.1.101 + port: 7078 + devices: + 5: + name: Dimmer Channel 5 + 6: + name: Dimmer Channel 6 + dimmable: true + + - platform: futurenow + driver: FNIP8x10a + host: 192.168.1.102 + port: 7078 + devices: + 1: + name: Relay Channel 1 + 2: + name: Relay Channel 2 +``` diff --git a/source/_components/light.greenwave.markdown b/source/_components/light.greenwave.markdown new file mode 100644 index 00000000000..16f8e160993 --- /dev/null +++ b/source/_components/light.greenwave.markdown @@ -0,0 +1,41 @@ +--- +layout: page +title: Greenwave Reality (TCP Connected) Lights +description: "Instructions on how to set up Greenwave Reality lights within Home Assistant." +date: 2017-11-17 18:50 +sidebar: true +comments: false +sharing: true +footer: true +logo: greenwavereality.png +ha_category: Light +ha_release: 0.61 +ha_iot_class: "Local Polling" +--- + +This component communicates with the Greenwave Reality (TCP Connected) Gateway to allow control of all lights and fixtures registered to the gateway. Bulbs and Fixtures can be created and modified inside the TCP Lighting App for Android and iOS. + +This component has been tested on firmware revisions: + +- 2.0.105 + +To configure the connection to the gateway, add the following to your `configuration.yaml` file: + +```yaml +light: + - platform: greenwave + host: XXX.XXX.XXX.XXX + version: 3 +``` +The version option is the major revision of your firmware, which should be 2 or 3. If you are running Version 2, there are no extra steps. If you are running Version 3, you must press the Sync button on the gateway prior to the first launch of Home Assistant, so a token can be grabbed. Once Home Assistant has started, you can either press the Sync button again or wait for it to time out manually. + +{% configuration %} +host: + description: The IP Address of your Gateway + required: true + type: string +version: + description: Major version of the gateway firmware + required: true + type: integer +{% endconfiguration %} diff --git a/source/_components/light.group.markdown b/source/_components/light.group.markdown new file mode 100644 index 00000000000..4ec8262463d --- /dev/null +++ b/source/_components/light.group.markdown @@ -0,0 +1,63 @@ +--- +layout: page +title: "Light Group" +description: "Instructions for how to setup light groups within Home Assistant." +date: 2018-02-23 11:41 +sidebar: true +comments: false +sharing: true +footer: true +ha_category: Light +ha_release: 0.65 +ha_iot_class: "Local Push" +logo: home-assistant.png +--- + +The group light platform lets you combine multiple lights into one entity. All child lights of a light group can still be used as usual, but controlling the state of the grouped light will forward the command to each child light. + +To enable this platform in your installation, add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +light: + - platform: group + name: Kitchen Lights + entities: + - light.kitchen_ceiling_lights + - light.kitchen_under_cabinet_lights + - light.kitchen_spot_lights + - light.pendant_lights +``` + +{% configuration %} + name: + description: The name of the light group. Defaults to "Light Group". + required: false + type: string + entities: + description: A list of entities to be included in the light group. + required: true + type: string list +{% endconfiguration %} + +

+ +Example of the light group "Kitchen Lights". +

+ +The supported features of all lights will be added together. For example, if you have one RGB light in a group of otherwise brightness-only lights, the light group will be shown with a color picker. + +## {% linkable_title Script Example %} + +Here's an example of a script using the above light group. + +```yaml +script: + turn_on_kitchen_lights: + alias: Kitchen lights on + sequence: + service: light.turn_on + data: + entity_id: light.kitchen_lights + brightness: 100 +``` diff --git a/source/_components/light.hive.markdown b/source/_components/light.hive.markdown index 7b9038ae169..44221f63711 100644 --- a/source/_components/light.hive.markdown +++ b/source/_components/light.hive.markdown @@ -14,11 +14,13 @@ ha_iot_class: "Cloud Polling" --- -The 'hive' light component integrates your Hive lights into Home Assistant, enabling control of various settings, depending on the model light. +The `hive` light platform integrates your Hive lights into Home Assistant, enabling control of various settings, depending on the model light. -The Hive light component supports the following Hive products: -- **Hive Active Light Dimmable** -- **Hive Active Light Cool to Warm White** +The platform supports the following Hive products: + +- Hive Active Light Dimmable +- Hive Active Light Cool to Warm White +- Hive Active Light Color Changing

diff --git a/source/_components/light.homekit_controller.markdown b/source/_components/light.homekit_controller.markdown new file mode 100644 index 00000000000..f3f7243a10f --- /dev/null +++ b/source/_components/light.homekit_controller.markdown @@ -0,0 +1,16 @@ +--- +layout: page +title: "HomeKit Light" +description: "Instructions how to setup HomeKit lights within Home Assistant." +date: 2017-03-19 21:08 +sidebar: true +comments: false +sharing: true +footer: true +logo: apple-homekit.png +ha_category: Light +ha_iot_class: "Local Polling" +ha_release: 0.68 +--- + +To get your HomeKit lights working with Home Assistant, follow the instructions for the general [HomeKit controller component](/components/homekit_controller/). diff --git a/source/_components/light.homematic.markdown b/source/_components/light.homematic.markdown index b2223ae9e4c..86249ce98e0 100644 --- a/source/_components/light.homematic.markdown +++ b/source/_components/light.homematic.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Homematic Light" -description: "Instructions how to integrate Homematic lights within Home Assistant." +description: "Instructions on how to integrate Homematic lights within Home Assistant." date: 2016-06-28 08:30 sidebar: true comments: false diff --git a/source/_components/light.homematicip_cloud.markdown b/source/_components/light.homematicip_cloud.markdown new file mode 100644 index 00000000000..6ea102daa8d --- /dev/null +++ b/source/_components/light.homematicip_cloud.markdown @@ -0,0 +1,21 @@ +--- +layout: page +title: "HomematicIP Cloud Light" +description: "Instructions on how to integrate HomematicIP light switches within Home Assistant." +date: 2018-04-02 13:40 +sidebar: true +comments: false +sharing: true +footer: true +logo: homematicip_cloud.png +ha_category: Switch +ha_release: 0.70 +ha_iot_class: "Cloud Push" +--- + +The `homematicip_cloud` light platform allows you to control +[HomematicIP](http://www.homematic-ip.com) light switches through Home Assistant. + +Devices will be configured automatically. Please refer to the +[component](/components/homematicip_cloud/) configuration on how to setup +HomematicIP Cloud. diff --git a/source/_components/light.hue.markdown b/source/_components/light.hue.markdown index 871972d4f0c..59e8b8e970e 100644 --- a/source/_components/light.hue.markdown +++ b/source/_components/light.hue.markdown @@ -1,7 +1,7 @@ --- layout: page -title: "Philips Hue" -description: "Instructions how to setup Philips Hue within Home Assistant." +title: "Philips Hue Light" +description: "Instructions on how to integrate Philips Hue lights into Home Assistant." date: 2015-03-23 20:09 sidebar: true comments: false @@ -10,123 +10,11 @@ footer: true logo: philips_hue.png ha_category: Light ha_iot_class: "Local Polling" -featured: true ha_release: pre 0.7 --- -Philips Hue support is integrated into Home Assistant as a light platform. The preferred way to setup the Philips Hue platform is by enabling the [discovery component](/components/discovery/). +The Philips Hue light platform allows you to control your Philips Hue lights. -Once discovered, if you have a custom default view, locate `configurator.philips_hue` in the entities list ( < > ) and add it to a group in `configuration.yaml`. Restart Home Assistant so that the configurator is visible in the Home Assistant dashboard. Once Home Assistant is restarted, locate and click on `configurator.philips_hue` to bring up the initiation dialog. This will prompt you to press the Hue button to register the Hue hub in Home Assistant. Once complete, the configurator entity isn't needed anymore and can be removed from any visible group in `configuration.yaml`. +This component will automatically add `Lights` configured on your Hue bridges. -When you configure the Hue bridge from Home Assistant, it writes a token to a file in your Home Assistant [configuration directory](/docs/configuration/). That token authenticates the communication with the Hue bridge. This token uses the IP Address of the Hue Bridge. If the IP address for the Hue Bridge changes, you will need to register the Hue Bridge with Home Assistant again. To avoid this you may set up DHCP registration for your Hue Bridge, so that it always has the same IP address. - -Restarting Home Assistant once more should result in the Hue lights listed as "light" entities. Add these light entities to configuration.yaml and restart Home Assistant once more to complete the installation. - -If you want to enable the component without relying on the [discovery component](/components/discovery/), add the following lines to your `configuration.yaml` file: - -```yaml -# Example configuration.yaml entry -light: - - platform: hue - host: DEVICE_IP_ADDRESS -``` - -Configuration variables: - -- **host** (*Optional*): IP address of the device, eg. 192.168.1.10. Required if not using the `discovery` component to discover Hue bridges. -- **allow_unreachable** (*Optional*): (true/false) This will allow unreachable bulbs to report their state correctly. -- **filename** (*Optional*): Make this unique if specifying multiple Hue hubs. -- **allow_in_emulated_hue** (*Optional*): )true/false) Enable this to block all Hue entities from being added to the `emulated_hue` component. -- **allow_hue_groups** (*Optional*): (true/false) Enable this to stop Home Assistant from importing the groups defined on the Hue bridge. - -### {% linkable_title Multiple Hue bridges %} - -If you use multiple Hue bridges then it's needed that you provide a configuration file for every bridge. The bridges can't share a single configuration file. - -Add `filename` to your Hue configuration entry in your `configuration.yaml` file: - -```yaml -# Example configuration.yaml entry -light: - - platform: hue - host: BRIDGE1_IP_ADDRESS - filename: phue.conf - - platform: hue - host: BRIDGE2_IP_ADDRESS - filename: phue2.conf -``` - -### {% linkable_title Using Hue Groups in Home Assistant %} - -The Hue API allows you to group lights. Home Assistant also supports grouping of entities natively, but sometimes it can be useful to use Hue Groups to group light bulbs. By doing so, Home Assistant only needs to send one API call to change the state of all the bulbs in those groups instead of one call for every light in the group. This causes all the bulbs to change state simultaneously. - -These Hue Groups can be a `Luminaire`, `Lightsource`, `LightGroup` or `Room`. The `Luminaire` and `Lightsource` can't be created manually since the Hue bridge manages these automatically based on the discovered bulbs. The `Room` and `LightGroup` can be created manually through the API, or the mobile app. A bulb can only exist in one `Room`, but can exist in multiple `LightGroup`. The `LightGroup` can be useful to link certain bulbs together since. - -The 2nd generation Hue app only allows to create a `Room`. You need to use the first generation app or the API to create a `LightGroup`. - -Example: - -To create a `LightGroup` named `Ceiling lights` that contains the lights 1, 2 and 3, execute the following command: - -```bash -$ curl -XPOST -d '{"name": "Ceiling lights", "lights": ["1", "2", "3"]}' http:///api//groups -``` - -The `` is the string that is used to register Home Assistant on the bridge, you can find it in the `phue.conf` file in your configuration path. `` is the IP address or hostname of your Hue bridge. - -You can find out the ids of your lights by executing the following command: - -```bash -$ curl http:///api//lights -``` - -Home Assistant will automatically detect your new `LightGroup` and add it to the interface. - -

- To support Hue Light Groups, your bridge needs to have at least firmware 1.13 (released on June 3, 2016). -

- -More information can be found on the [Philips Hue API documentation](https://www.developers.meethue.com/documentation/groups-api#22_create_group) website. - - -### {% linkable_title Using Hue Scenes in Home Assistant %} - -The Hue platform has it's own concept of scenes for setting the colors of a group of lights at once. Hue Scenes are very cheap, get created by all kinds of apps (as it is the only way to have 2 or more lights change at the same time), and are rarely deleted. A typical Hue hub might have hundreds of scenes stored in them, many that you've never used, almost all very poorly named. - -To avoid user interface overload we don't expose scenes directly. Instead there is a [light.hue_activate_scene](/components/light/#service-lighthue_activate_scene) service which can be used by `automation` or `script` components. -This will have all the bulbs transitioned at once, instead of one at a time using standard scenes in Home Assistant. - -For instance: - -```yaml -script: - porch_on: - sequence: - - service: light.hue_activate_scene - data: - group_name: "Porch" - scene_name: "Porch Orange" -``` - -| Service data attribute | Optional | Description | -| ---------------------- | -------- | ----------- | -| `group_name` | no | The group/room name of the lights. Find this in the Hue official app. -| `scene_name` | no | The name of the scene. Find this in the Hue official app. - -*Note*: `group_name` is not linked to Home Assistant group name. - -*** Finding Group and Scene Names *** - -How do you find these names? - -The easiest way to do this is only use the scenes from the 2nd generation Hue app. That is organized by room (group) and scene Name. Use the values of room name and scene name that you see in the app. You can test these work on the `dev-service` console of your Home Assistant instance. - -Alternatively, you can dump all rooms and scene names using this [gist](https://gist.github.com/sdague/5479b632e0fce931951c0636c39a9578). This does **not** tell you which groups and scenes work together but it's sufficient to get values that you can test in the `dev-service` console. - -*** Caveats *** - -The Hue API doesn't activate scenes directly, only on a Hue Group (typically rooms, especially if using the 2nd gen app). But Hue Scenes don't actually reference their group. So heuristic matching is used. - -Neither group names or scene names are guaranteed unique in Hue. If you are getting non deterministic behavior, adjust your Hue scenes via the App to be more identifying. - -The Hue hub has limited spaces for scenes, and will delete scenes if new ones get created that would overflow that space. The API docs say this is based on "Least Recently Used". +The requirement is that you have setup your [Philips Hue bridge](/components/hue/). diff --git a/source/_components/light.hyperion.markdown b/source/_components/light.hyperion.markdown index eccb243e37d..7cba5e18f41 100644 --- a/source/_components/light.hyperion.markdown +++ b/source/_components/light.hyperion.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Hyperion" -description: "Instructions how to integrate Hyperion into Home Assistant." +description: "Instructions on how to integrate Hyperion into Home Assistant." date: 2015-10-25 22:43 sidebar: true comments: false @@ -29,5 +29,7 @@ Configuration variables: - **host** (*Required*): The IP address of the device the Hyperion service is running on. - **port** (*Optional*): The port used to communicate with the Hyperion service. Defaults to `19444`. - **name** (*Optional*): The name of the device used in the frontend. -- **priority** (*Optional*): The priority of the hyperion instance. Defaults to `128`. +- **priority** (*Optional*): The priority of the Hyperion instance. Defaults to `128`. +- **hdmi_priority** (*Optional*): The priority of the HDMI grabber of this Hyperion instance, note that this priority must be higher than all other priorities used for correct behavior. Defaults to `880`. - **default_color** (*Optional*): The color of the light. Defaults to `[255, 255, 255]`. +- **effect_list** (*Optional*): The list of effects that can be used. Defaults to `['HDMI', 'Cinema brighten lights', 'Cinema dim lights', 'Knight rider', 'Blue mood blobs', 'Cold mood blobs', 'Full color mood blobs', 'Green mood blobs', 'Red mood blobs', 'Warm mood blobs', 'Police Lights Single', 'Police Lights Solid', 'Rainbow mood', 'Rainbow swirl fast', 'Rainbow swirl', 'Random', 'Running dots', 'System Shutdown', 'Snake', 'Sparks Color', 'Sparks', 'Strobe blue', 'Strobe Raspbmc', 'Strobe white', 'Color traces', 'UDP multicast listener', 'UDP listener', 'X-Mas']`. diff --git a/source/_components/light.iglo.markdown b/source/_components/light.iglo.markdown new file mode 100644 index 00000000000..5bc12ba1d64 --- /dev/null +++ b/source/_components/light.iglo.markdown @@ -0,0 +1,42 @@ +--- +layout: page +title: "iGlo" +description: "Instructions on how to integrate iGlo lights into Home Assistant." +date: 2017-12-17 08:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: iglo.png +ha_category: Light +ha_iot_class: "Local Polling" +ha_release: 0.61 +--- + +The `iglo` platform allows you to integrate your [iGlo Lights](https://www.youtube.com/watch?v=oHTS9ji_v-s) into Home Assistant. + +To use your iGlo light in your installation, add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +light: + - platform: iglo + host: 192.168.1.10 +``` + +{% configuration %} +host: + required: true + description: The IP address for connecting to the light. + type: string +name: + required: false + description: The name for this light. + default: iGlo Light + type: string +port: + required: false + description: The port used to connect to the light. + default: 8080 + type: integer +{% endconfiguration %} diff --git a/source/_components/light.ihc.markdown b/source/_components/light.ihc.markdown new file mode 100644 index 00000000000..214f19564be --- /dev/null +++ b/source/_components/light.ihc.markdown @@ -0,0 +1,65 @@ +--- +layout: page +title: "IHC Light" +description: "Instructions on how to integrate IHC lights within Home Assistant." +date: 2017-11-27 13:35 +sidebar: true +comments: false +sharing: true +footer: true +logo: ihc.png +ha_category: Light +ha_release: 0.62 +ha_iot_class: "Local Push" +--- + +Before you can use the IHC Light platform, you must setup the [IHC Component](/components/ihc/) + +When auto setup is enabled the following products will be found in the IHC project and setup as light devices: + +* Wireless lamp outlet dimmer +* Wireless dimmer +* Wireless combi dimmer 4 buttons +* Wireless lamp outlet relay +* Wireless combi relay 4 buttons +* Wireless mobile dimmer +* Dataline lamp outlet + +To manually configure IHC lights insert this section in your configuration: + +```yaml +light: + - platform: ihc + lights: + - id: 12345 + name: tablelight + dimmable: True + - id: 12346 + name: anotherlight + ... +``` + +{% configuration %} +lights: + description: List of lights to setup manually + required: false + type: map + keys: + dimmable: + description: Set to True if the IHC resource is a light level + required: false + type: bool + default: false + id: + description: The IHC resource id. + required: true + type: int + name: + description: The name of the component + required: false + type: string +{% endconfiguration %} + +In the example above 12345 is ihc resource id and "tablelight" is the name. +The IHC resource id can be a light level for dimmers or a boolean output of a relay. +For more information about IHC resource ids see [Manual Setup](/components/ihc/#manual-setup) diff --git a/source/_components/light.insteon_hub.markdown b/source/_components/light.insteon_hub.markdown deleted file mode 100644 index 82c4df9aa54..00000000000 --- a/source/_components/light.insteon_hub.markdown +++ /dev/null @@ -1,18 +0,0 @@ ---- -layout: page -title: "Insteon Hub Light" -description: "Instructions how to setup the Insteon Hub Lights within Home Assistant." -date: 2016-09-10 08:00 -sidebar: true -comments: false -sharing: true -footer: true -logo: insteon.png -ha_category: Light -ha_release: 0.21 -ha_iot_class: "Local Push" ---- - -The `insteon_hub` light component lets you control your lights connected to an [Insteon Hub](http://www.insteon.com/insteon-hub/) with Home Assistant. - -To get your Insteon Hub fan working with Home Assistant, follow the instructions for the general [Insteon Hub component](/components/insteon_hub/). diff --git a/source/_components/light.insteon_local.markdown b/source/_components/light.insteon_local.markdown index 14f91598c91..818e450eb90 100644 --- a/source/_components/light.insteon_local.markdown +++ b/source/_components/light.insteon_local.markdown @@ -1,7 +1,7 @@ --- layout: page -title: "Insteon (Local) Light" -description: "Instructions how to setup the Insteon Hub Lights locally within Home Assistant." +title: "Insteon (local) Light" +description: "Instructions on how to setup the Insteon Hub Lights locally within Home Assistant." date: 2016-12-18 08:00 sidebar: true comments: false @@ -9,28 +9,11 @@ sharing: true footer: true logo: insteon.png ha_category: Light -ha_version: 0.36 ha_iot_class: "Local Push" +ha_release: 0.36 +redirect_from: /components/light.insteon_hub/ --- The `insteon_local` light component lets you control your lights connected to an [Insteon Hub](http://www.insteon.com/insteon-hub/) with Home Assistant. -To integrate add a light, configure your hub Insteon(local) with Home Assistant, add the following section to your `configuration.yaml` file: - -```yaml -# Example configuration.yaml platform entry -insteon_local: - host: YOUR HUB IP - username: YOUR HUB USERNAME - password: YOUR HUB PASSWORD - timeout: 10 - port: 25105 -``` - -To add lights (dimmers) to your set-up, add the platform to your light configuration: - -```yaml -light: - - platform: insteon_local -``` - +To get your Insteon lights working with Home Assistant, follow the instructions for the general [Insteon local component] (/components/insteon_local/). The lights will be automatically discovered and added to Home Assistant. The device names will be the Insteon address of the lights. diff --git a/source/_components/light.insteon_plm.markdown b/source/_components/light.insteon_plm.markdown index 7c95d8dfe4f..40561bdd914 100644 --- a/source/_components/light.insteon_plm.markdown +++ b/source/_components/light.insteon_plm.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Insteon PLM Light" -description: "Instructions how to setup Insteon PLM lights locally within Home Assistant." +description: "Instructions on how to setup the Insteon PLM Lights locally within Home Assistant." date: 2017-02-19 17:00 sidebar: true comments: false @@ -10,8 +10,7 @@ footer: true logo: insteon.png ha_category: Light ha_iot_class: "Local Push" -ha_version: 0.39 +ha_release: 0.39 --- -The `insteon_plm` light platform lets you control your sensors through an INSTEON PowerLinc Modem (PLM) device connected directly to your system on an USB or serial port. To add support, set up the primary [insteon_plm](/components/insteon_plm/) component. - +The `insteon_plm` light platform lets you control your dimmable light switches through an INSTEON PowerLinc Modem (PLM) device connected directly to your system on an USB or serial port. To add support, set up the primary [insteon_plm](/components/insteon_plm/) component. diff --git a/source/_components/light.isy994.markdown b/source/_components/light.isy994.markdown index 8ae450edfcd..6c03413c8b0 100644 --- a/source/_components/light.isy994.markdown +++ b/source/_components/light.isy994.markdown @@ -1,7 +1,7 @@ --- layout: page title: "ISY994 Light" -description: "Instructions how to integrate ISY994 lights into Home Assistant." +description: "Instructions on how to integrate ISY994 lights into Home Assistant." date: 2016-09-03 23:00 sidebar: true comments: false diff --git a/source/_components/light.knx.markdown b/source/_components/light.knx.markdown index b3cf614a1c9..5587f134ecc 100644 --- a/source/_components/light.knx.markdown +++ b/source/_components/light.knx.markdown @@ -36,6 +36,7 @@ Configuration variables: - **brightness_address** (Optional): KNX group address for dimming light. - **state_address** (*Optional*): separate KNX group address for retrieving the switch state of the light. - **brightness_state_address** (*Optional*): separate KNX group address for retrieving the dimmed state of the light. +- **color_address** (*Optional*): separate KNX group address for setting the color of the light. Some KNX devices can change their state internally without any messages on the KNX bus, e.g., if you configure a timer on a channel. The optional `state_address` can be used to inform Home Assistant about these state changes. If a KNX message is seen on the bus addressed to the given state address, this will overwrite the state of the switch object. For switching/light actuators that are only controlled by a single group address and can't change their state internally, you don't have to configure the state address. diff --git a/source/_components/light.lifx.markdown b/source/_components/light.lifx.markdown index 805cb67e680..04f444540fe 100644 --- a/source/_components/light.lifx.markdown +++ b/source/_components/light.lifx.markdown @@ -1,7 +1,7 @@ --- layout: page title: "LIFX" -description: "Instructions how to integrate LIFX into Home Assistant." +description: "Instructions on how to integrate LIFX into Home Assistant." date: 2016-01-27 08:00 sidebar: true comments: false diff --git a/source/_components/light.limitlessled.markdown b/source/_components/light.limitlessled.markdown index bc0849cbcaf..5b606c13ec4 100644 --- a/source/_components/light.limitlessled.markdown +++ b/source/_components/light.limitlessled.markdown @@ -14,11 +14,17 @@ ha_iot_class: "Assumed State" ha_release: pre 0.7 --- -`limitlessled` can control your [LimitlessLED](http://www.limitlessled.com/) lights from within Home Assistant. The lights are also known as EasyBulb, AppLight, AppLamp, MiLight, LEDme, dekolight, or iLight. +`limitlessled` can control your LimitlessLED lights from within Home Assistant. The lights are also known as EasyBulb, AppLight, AppLamp, [MiLight](http://www.milight.com/), LEDme, dekolight, or iLight. + +LimitlessLED bulbs are controlled via groups, so you can only control an individual bulb via the bridge if it is in a group by itself. + +Note: you can assign an `rgbw`, `rgbww`, `white` and `dimmer` group to the same group number, effectively allowing up to 16 groups (4 `rgbww`, 4 `rgbw`, 4 `white` and 4 `dimmer`) per bridge. + +An archive of the extensive API can be found [here](https://github.com/Fantasmos/LimitlessLED-DevAPI). ### {% linkable_title Setup %} -Before configuring Home Assistant, make sure you can control your bulbs or LEDs with the MiLight mobile application. Discover your bridge(s) IP address. You can do this via your router or a mobile application like Fing ([android](https://play.google.com/store/apps/details?id=com.overlook.android.fing&hl=en) or [iTunes](https://itunes.apple.com/us/app/fing-network-scanner/id430921107?mt=8)). Keep in mind that LimitlessLED bulbs are controlled via groups. You can not control an individual bulb via the bridge, unless it is in a group by itself. Note that you can assign an `rgbw`, `rgbww` and `white` group to the same group number, effectively allowing 12 groups (4 `rgbww`, 4 `rgbw` and 4 `white`) per bridge. +Before configuring Home Assistant, make sure you can control your bulbs or LEDs with the MiLight mobile application. Next, discover your bridge(s) IP address. You can do this via your router or a mobile application like Fing ([android](https://play.google.com/store/apps/details?id=com.overlook.android.fing&hl=en) or [iTunes](https://itunes.apple.com/us/app/fing-network-scanner/id430921107?mt=8)). To add `limitlessled` to your installation, add the following to your `configuration.yaml` file: @@ -38,6 +44,9 @@ light: type: rgbw name: Kitchen fade: on + - number: 4 + type: dimmer + name: Livingroom - host: 192.168.1.11 groups: - number: 1 @@ -56,27 +65,65 @@ Configuration variables: - **groups** array (*Required*): The list of available groups. - **number** (*Required*): Group number (`1`-`4`). Corresponds to the group number on the remote. These numbers may overlap only if the type is different. - **name** (*Required*): Any name you'd like. Must be unique among all configured groups. - - **type** (*Optional*): Type of group. Choose either `rgbww`, `rgbw`, `white`, or `bridge-led`. `rgbw` is the default if you don't specify this entry. Use `bridge-led` to control the built-in LED of newer WiFi bridges. - - **fade** (*Optional*): Fade behavior. Defaults to `off`. If turned on, the group is faded out before being turned off. This makes for a more pleasing transition at the expense of wall switch usability, since the light will turn back on at the lowest brightness if it is power cycled. + - **type** (*Optional*): Type of group. Choose either `rgbww`, `rgbw`, `white`, `bridge-led` or `dimmer`. `rgbw` is the default if you don't specify this entry. Use `bridge-led` to control the built-in LED of newer WiFi bridges. + - **fade** (*Optional*): Fade behavior. Defaults to `off`. If turned on, the group is faded out before being turned off. This makes for a more pleasing transition at the expense of wall switch usability since the light will turn back on at the lowest brightness if it is power cycled. + +### {% linkable_title Night Effect %} + +LimitlessLED has a `night` effect that can be used to dim the lights below `brightness: 1`. This night mode is meant to temporarily turn the lights into a nightlight. This mode can be especially helpful when wall switches are also being used. For example, when a light is using the `night` effect one way to return it to its previous brightness level (other than using Home Assistant) is to switch the lights off and then back on from the wall switch. + +Note that the `brightness`, `color` and `temperature` attributes cannot be used when using the `night` effect. You can turn on `night` effect by using the `effect` attribute of the normal `light.turn_on` service. Here is an example: + +```yaml +automation: + - alias: ... + trigger: + # ... + action: + - service: light.turn_on + data: + entity_id: light.office, light.kitchen + effect: night +``` ### {% linkable_title Properties %} Refer to the [light]({{site_root}}/components/light/) documentation for general property usage, but keep in mind the following notes specific to LimitlessLED. - **RGBWW** (Only supported on v6 bridges) - - *Color*: There are 25,856 color possibilities along the LimitlessLED color spectrum. For colors, hue and saturation can be used, but not lightness. If you select a color with lightness, Home Assistant will calculate the nearest valid LimitlessLED color. In white mode the temperature can be set. + - *Color*: There are 25,856 color possibilities along the LimitlessLED color spectrum. For colors, hue and saturation can be used, but not lightness. If you select a color with lightness, Home Assistant will calculate the nearest valid LimitlessLED color. In white mode, the temperature can be set. - *Temperature*: There are 101 temperature steps. - *Brightness*: There are 101 brightness steps. - **RGBW** - - *Color*: There are 256 color possibilities along the LimitlessLED color spectrum. Color properties like saturation and lightness can not be used - only Hue can. The only exception is white (which may be warm or cold depending on the type of RGBW bulb). If you select a color with saturation or lightness, Home Assistant will calculate the nearest valid LimitlessLED color. + - *Color*: There are 256 color possibilities along the LimitlessLED color spectrum. Color properties like saturation and lightness cannot be used - only Hue can. The only exception is white (which may be warm or cold depending on the type of RGBW bulb). If you select a color with saturation or lightness, Home Assistant will calculate the nearest valid LimitlessLED color. - *Brightness*: Wifi bridge v6 supports 101 brightness steps; older versions only 25. - **White** - When using a legacy WiFi bridge (before v6), you can observe on the MiLight mobile application, you can not select a specific brightness or temperature - you can only step each property up or down. There is no indication of which step you are on. This restriction, combined with the unreliable nature of LimitlessLED transmissions, means that setting white bulb properties is done on a best-effort basis. The only very reliable settings are the minimum and maximum of each property. - *Temperature*: Wifi bridge v6 supports 101 temperature steps; older versions only 10. - *Brightness*: Wifi bridge v6 supports 101 brightness steps; older versions only 10. +- **Dimmer** (Only supported on v6 bridges) + - This type is for a single color LED dimmer like the 1CH MiLight dimmer module or similar. This type is only supported by the version 6 Wifi bridges. + - *Brightness*: Wifi bridge v6 supports 101 brightness steps. - **Transitions** - If a transition time is set, the group will transition between the current settings and the target settings for the duration specified. Transitions from or to white are not possible - the color will change immediately. ### {% linkable_title Initialization & Synchronization %} -When starting Home Assistant, your LimitlessLED bulbs will be set to known default values. This ensures a consistent user interface and uninterrupted turning on/off. If you control your LimitlessLED lights via the MiLight mobile application or other means while Home Assistant is running, Home Assistant can not track those changes and you may observe unexpected behavior. This is due to a LimitlessLED limitation. +When starting Home Assistant, the last recorded state will be shown. This might no longer match the actual state of the bulbs. + +If you control your LimitlessLED lights via the MiLight mobile application or other means while Home Assistant is running, Home Assistant cannot track those changes and you may observe obsolete information. + +This lack of synchronization is due to a LimitlessLED limitation. + +

+ +

+ +Because LimitlessLED lights may have an obsolete state, Home Assistant shows the power switch as two buttons rather than a toggle. This ensures that the power can be set with a single click even if the assumed state is wrong. You can change to use the power toggle with [Customize](/docs/configuration/customizing-devices/): + +```yaml +homeassistant: + customize_domain: + light: + assumed_state: false +``` diff --git a/source/_components/light.litejet.markdown b/source/_components/light.litejet.markdown index d51cfd70c75..fedc9fa2bec 100644 --- a/source/_components/light.litejet.markdown +++ b/source/_components/light.litejet.markdown @@ -1,7 +1,7 @@ --- layout: page title: "LiteJet Light" -description: "Instructions how to setup the LiteJet lights within Home Assistant." +description: "Instructions on how to setup the LiteJet lights within Home Assistant." date: 2016-10-26 13:00 sidebar: true comments: false diff --git a/source/_components/light.lutron.markdown b/source/_components/light.lutron.markdown index 3872b5373b5..9e380e8d7ce 100644 --- a/source/_components/light.lutron.markdown +++ b/source/_components/light.lutron.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Lutron Light" -description: "Instructions how to setup the Lutron lights within Home Assistant." +description: "Instructions on how to setup the Lutron lights within Home Assistant." date: 2017-04-30 09:00 sidebar: true comments: false diff --git a/source/_components/light.lutron_caseta.markdown b/source/_components/light.lutron_caseta.markdown index 02e15710d62..4c61accdc60 100644 --- a/source/_components/light.lutron_caseta.markdown +++ b/source/_components/light.lutron_caseta.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Lutron Caseta Light" -description: "Instructions how to setup the Lutron Caseta lights within Home Assistant." +description: "Instructions on how to setup the Lutron Caseta lights within Home Assistant." date: 2017-04-30 09:00 sidebar: true comments: false diff --git a/source/_components/light.lw12wifi.markdown b/source/_components/light.lw12wifi.markdown new file mode 100644 index 00000000000..028528c6a56 --- /dev/null +++ b/source/_components/light.lw12wifi.markdown @@ -0,0 +1,45 @@ +--- +layout: page +title: "Lagute LW-12" +description: "Instructions on how to setup Lagute LW-12 Wifi LED controller within Home Assistant." +date: 2018-04-28 08:00 +sidebar: true +comments: false +sharing: true +footer: true +ha_category: Light +ha_iot_class: "Local Polling" +logo: lagute.png +ha_release: 0.71 +--- + +The `lw12wifi` light platform supports Lagute LW-12 Wifi LED controller. + +## {% linkable_title Configuration %} + +To enable these lights, add the following lines to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +light: + - platform: lw12wifi + host: IP_ADDRESS_CONTROLLER +``` + +{% configuration %} +host: + description: Host name or IP of LW-12 LED stripe to control. + required: true + type: string +port: + description: Some firmware versions of the LW-12 controller listen on different ports. + required: false + type: int + default: 5000 +name: + description: Name to use in the frontend. + required: false + type: string + default: LW-12 FC +{% endconfiguration %} + diff --git a/source/_components/light.markdown b/source/_components/light.markdown index 43706748906..b4e6102c8f6 100644 --- a/source/_components/light.markdown +++ b/source/_components/light.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Lights" -description: "Instructions how to setup your lights with Home Assistant." +description: "Instructions on how to setup your lights with Home Assistant." date: 2015-01-24 14:39 sidebar: true comments: false @@ -15,30 +15,37 @@ This component allows you to track and control various light bulbs. Read the pla The light component supports multiple entries in configuration.yaml by appending a sequential number to the section: light 2:, light 3: etc.

+### {% linkable_title Default turn-on values %} + +To set the default color and brightness values when the light is turned on, create a custom `light_profiles.csv` (as described below in the `profile` attribute of `light.turn_on`). + +The `.default` suffix should be added to the entity identifier of each light to define a default value, e.g. for `light.ceiling_2` the `id` field is `light.ceiling_2.default`. To define a default for all lights, the identifier `group.all_lights.default` can be used. Individual settings always supercede the `all_lights` default setting. + ### {% linkable_title Service `light.turn_on` %} Turns one light on or multiple lights on using [groups]({{site_root}}/components/group/). -Most lights do not support all attributes. You can check the platform documentation of your particular light for hints but in general you will have to try things out and see what works. +Most lights do not support all attributes. You can check the platform documentation of your particular light for hints, but in general, you will have to try things out and see what works. | Service data attribute | Optional | Description | | ---------------------- | -------- | ----------- | | `entity_id` | no | String or list of strings that point at `entity_id`s of lights. Else targets all. | `transition` | yes | Number that represents the time (in seconds) the light should take to transition to the new state. -| `profile` | yes | String with the name of one of the [built-in profiles](https://github.com/home-assistant/home-assistant/blob/master/homeassistant/components/light/light_profiles.csv) (relax, energize, concentrate, reading) or one of the custom profiles defined in `light_profiles.csv` in the current working directory. Light profiles define a xy color and a brightness. If a profile is given and a brightness then the profile brightness will be overwritten. -| `xy_color` | yes | A list containing two floats representing the xy color you want the light to be. Two comma separated floats that represent the color in XY. -| `rgb_color` | yes | A list containing three integers representing the rgb color you want the light to be. Three comma separated integers that represent the color in RGB. You can find a great chart here: [Hue Color Chart](http://www.developers.meethue.com/documentation/hue-xy-values) +| `profile` | yes | String with the name of one of the [built-in profiles](https://github.com/home-assistant/home-assistant/blob/master/homeassistant/components/light/light_profiles.csv) (relax, energize, concentrate, reading) or one of the custom profiles defined in `light_profiles.csv` in the current working directory. Light profiles define an xy color and a brightness. If a profile is given and a brightness then the profile brightness will be overwritten. +| `hs_color` | yes | A list containing two floats representing the hue and saturation of the color you want the light to be. Hue is scaled 0-360, and saturation is scaled 0-100. +| `xy_color` | yes | A list containing two floats representing the xy color you want the light to be. Two comma-separated floats that represent the color in XY. You can find a great chart here: [Hue Color Chart](https://developers.meethue.com/documentation/core-concepts#color_gets_more_complicated). +| `rgb_color` | yes | A list containing three integers between 0 and 255 representing the RGB color you want the light to be. Three comma-separated integers that represent the color in RGB. Note that the specified RGB value will not change the light brightness, only the color. | `white_value` | yes | Integer between 0 and 255 for how bright a dedicated white LED should be. | `color_temp` | yes | An integer in mireds representing the color temperature you want the light to be. | `kelvin` | yes | Alternatively, you can specify the color temperature in Kelvin. -| `color_name` | yes | A human readable string of a color name, such as `blue` or `goldenrod`. All [CSS3 color names](https://www.w3.org/TR/2010/PR-css3-color-20101028/#svg-color) are supported. +| `color_name` | yes | A human-readable string of a color name, such as `blue` or `goldenrod`. All [CSS3 color names](https://www.w3.org/TR/css-color-3/#svg-color) are supported. | `brightness` | yes | Integer between 0 and 255 for how bright the color should be. | `brightness_pct`| yes | Alternatively, you can specify brightness in percent (a number between 0 and 100). | `flash` | yes | Tell light to flash, can be either value `short` or `long`. | `effect`| yes | Applies an effect such as `colorloop` or `random`.

-In order to apply attributes to an entity you will need to add `data:` to the configuration. See example below +In order to apply attributes to an entity, you will need to add `data:` to the configuration. See example below

```yaml diff --git a/source/_components/light.mochad.markdown b/source/_components/light.mochad.markdown index 0bf8b817fe6..9721e9d6c98 100644 --- a/source/_components/light.mochad.markdown +++ b/source/_components/light.mochad.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Mochad Light" -description: "Instructions how to integrate X10 Mochad switches into Home Assistant." +description: "Instructions on how to integrate X10 Mochad lights into Home Assistant." date: 2017-07-14 11:29 sidebar: true comments: false @@ -11,13 +11,14 @@ ha_category: Light ha_release: 0.51 --- -The `mochad` switch platform lets you control an X10 enabled dimmer/light -device. +The `mochad` light platform lets you control an X10 enabled dimmer/light device. + + To enable this sensor, you first have to set up the [mochad component](/components/mochad/) and then add the following to your `configuration.yaml` file: ```yaml -# Example configuration.yml entry +# Example configuration.yaml entry light: - platform: mochad devices: @@ -28,5 +29,7 @@ light: Configuration variables: - **address** (*Required*): The X10 address of the light. -- **name** (*Optional*): The name of the switch. Default is: x10_light_dev_*address*. +- **name** (*Optional*): The name of the light. Default is: x10_light_dev_*address*. - **comm_type** (*Optional*): pl (powerline) or rf (radio frequency). Default is pl. +- **brightness_levels** (*Optional*): The number of brightness levels the X10 light device supports. This can either be 32, 64, or 256 (note that the max +value sent to the device will be n-1 because it starts at 0) diff --git a/source/_components/light.mqtt.markdown b/source/_components/light.mqtt.markdown index ba3041dde38..e92f859fb7c 100644 --- a/source/_components/light.mqtt.markdown +++ b/source/_components/light.mqtt.markdown @@ -1,7 +1,7 @@ --- layout: page title: "MQTT Light" -description: "Instructions how to setup MQTT lights within Home Assistant." +description: "Instructions on how to setup MQTT lights within Home Assistant." date: 2015-11-13 08:30 sidebar: true comments: false @@ -14,6 +14,8 @@ ha_iot_class: depends The `mqtt` light platform lets you control your MQTT enabled lights. It supports setting brightness, color temperature, effects, flashing, on/off, RGB colors, transitions, XY colors and white values. +## {% linkable_title Configuration %} + In an ideal scenario, the MQTT device will have a state topic to publish state changes. If these messages are published with a `RETAIN` flag, the MQTT light will receive an instant state update after subscription and will start with the correct state. Otherwise, the initial state of the switch will be `false` / `off`. When a state topic is not available, the light will work in optimistic mode. In this mode, the light will immediately change state after every command. Otherwise, the light will wait for state confirmation from the device (message from `state_topic`). @@ -21,45 +23,159 @@ When a state topic is not available, the light will work in optimistic mode. In Optimistic mode can be forced, even if the `state_topic` is available. Try to enable it, if experiencing incorrect light operation. ```yaml -# Example configuration.yml entry +# Example configuration.yaml entry light: - platform: mqtt command_topic: "office/rgb1/light/switch" ``` -Configuration variables: - -- **command_topic** (*Required*): The MQTT topic to publish commands to change the switch state. -- **brightness_command_topic** (*Optional*): The MQTT topic to publish commands to change the light's brightness. -- **brightness_scale** (*Optional*): Defines the maximum brightness value (i.e. 100%) of the MQTT device (defaults to 255). -- **brightness_state_topic** (*Optional*): The MQTT topic subscribed to receive brightness state updates. -- **brightness_value_template** (*Optional*): Defines a [template](/docs/configuration/templating/#processing-incoming-data) to extract the brightness value. -- **color_temp_command_topic** (*Optional*): The MQTT topic to publish commands to change the light's color temperature state. The color temperature command slider has a range of 157 to 500 mireds (micro reciprocal degrees). -- **color_temp_state_topic** (*Optional*): The MQTT topic subscribed to receive color temperature state updates. -- **color_temp_value_template** (*Optional*): Defines a [template](/topics/templating/) to extract the color temperature value. -- **effect_command_topic** (*Optional*): The MQTT topic to publish commands to change the light's effect state. -- **effect_state_topic** (*Optional*): The MQTT topic subscribed to receive effect state updates. -- **effect_value_template** (*Optional*): Defines a [template](/docs/configuration/templating/#processing-incoming-data) to extract the effect value. -- **effect_list** (*Optional*): The list of effects the light supports. -- **name** (*Optional*): The name of the switch. Default is 'MQTT Switch'. -- **on_command_type** (*Optional*): Defines when on the payload_on is sent. Using `last` (the default) will send any style (brightness, color, etc) topics first and then a `payload_on` to the `command_topic`. Using `first` will send the `payload_on` and then any style topics. Using `brightness` will only send brightness commands instead of the `payload_on` to turn the light on. -- **optimistic** (*Optional*): Flag that defines if switch works in optimistic mode. Default is true if no state topic defined, else false. -- **payload_off** (*Optional*): The payload that represents disabled state. Default is "OFF". -- **payload_on** (*Optional*): The payload that represents enabled state. Default is "ON". -- **qos** (*Optional*): The maximum QoS level of the state topic. Default is 0 and will also be used to publishing messages. -- **retain** (*Optional*): If the published message should have the retain flag on or not. -- **rgb_command_template** (*Optional*): Defines a [template](/docs/configuration/templating/#processing-incoming-data) to compose message which will be sent to `rgb_command_topic`. Available variables: `red`, `green` and `blue`. -- **rgb_command_topic** (*Optional*): The MQTT topic to publish commands to change the light's RGB state. -- **rgb_state_topic** (*Optional*): The MQTT topic subscribed to receive RGB state updates. -- **rgb_value_template** (*Optional*): Defines a [template](/docs/configuration/templating/#processing-incoming-data) to extract the RGB value. -- **state_topic** (*Optional*): The MQTT topic subscribed to receive state updates. -- **state_value_template** (*Optional*): Defines a [template](/docs/configuration/templating/#processing-incoming-data) to extract the state value. The template should match the payload "on" and "off" values, so if your light uses "power on" to turn on, your `state_value_template` string should return "power on" when the switch is on. For example if the message is just "on", your `state_value_template` should be `power {{ value }}`. -- **white_value_command_topic** (*Optional*): The MQTT topic to publish commands to change the light's white value. -- **white_value_state_topic** (*Optional*): The MQTT topic subscribed to receive white value updates. -- **white_value_value_template** (*Optional*): Defines a [template](/docs/configuration/templating/#processing-incoming-data) to extract the white value. -- **xy_command_topic** (*Optional*): The MQTT topic to publish commands to change the light's XY state. -- **xy_state_topic** (*Optional*): The MQTT topic subscribed to receive XY state updates. -- **xy_value_template** (*Optional*): Defines a [template](/docs/configuration/templating/#processing-incoming-data) to extract the XY value. +{% configuration %} +name: + description: The name of the light. + required: false + type: string + default: MQTT Light +command_topic: + description: The MQTT topic to publish commands to change the switch state. + required: true + type: string +brightness_command_topic: + description: The MQTT topic to publish commands to change the light’s brightness. + required: false + type: string +brightness_scale: + description: "Defines the maximum brightness value (i.e. 100%) of the MQTT device." + required: false + type: integer + default: 255 +brightness_state_topic: + description: The MQTT topic subscribed to receive brightness state updates. + required: false + type: string +brightness_value_template: + description: "Defines a [template](/docs/configuration/templating/#processing-incoming-data) to extract the brightness value." + required: false + type: string +color_temp_command_topic: + description: The MQTT topic to publish commands to change the light’s color temperature state. The color temperature command slider has a range of 153 to 500 mireds (micro reciprocal degrees). + required: false + type: string +color_temp_state_topic: + description: The MQTT topic subscribed to receive color temperature state updates. + required: false + type: string +color_temp_value_template: + description: "Defines a [template](/topics/templating/) to extract the color temperature value." + required: false + type: string +effect_command_topic: + description: "The MQTT topic to publish commands to change the light's effect state." + required: false + type: string +effect_state_topic: + description: The MQTT topic subscribed to receive effect state updates. + required: false + type: string +effect_value_template: + description: "Defines a [template](/docs/configuration/templating/#processing-incoming-data) to extract the effect value." + required: false + type: string +effect_list: + description: The list of effects the light supports. + required: false + type: string list +on_command_type: + description: "Defines when on the payload_on is sent. Using `last` (the default) will send any style (brightness, color, etc) topics first and then a `payload_on` to the `command_topic`. Using `first` will send the `payload_on` and then any style topics. Using `brightness` will only send brightness commands instead of the `payload_on` to turn the light on." + required: false + type: string +optimistic: + description: Flag that defines if switch works in optimistic mode. + required: false + type: boolean + default: "`true` if no state topic defined, else `false`." +payload_on: + description: The payload that represents enabled state. + required: false + type: string + default: "ON" +payload_off: + description: The payload that represents disabled state. + required: false + type: string + default: "OFF" +qos: + description: The maximum QoS level of the state topic. + required: false + type: integer + default: 0 +retain: + description: If the published message should have the retain flag on or not. + required: false + type: boolean + default: false +rgb_command_template: + description: "Defines a [template](/docs/configuration/templating/#processing-incoming-data) to compose message which will be sent to `rgb_command_topic`. Available variables: `red`, `green` and `blue`." + required: false + type: string +rgb_command_topic: + description: "The MQTT topic to publish commands to change the light's RGB state." + required: false + type: string +rgb_state_topic: + description: The MQTT topic subscribed to receive RGB state updates. The expected payload is the RGB values separated by commas, for example `255,0,127`. + required: false + type: string +rgb_value_template: + description: "Defines a [template](/docs/configuration/templating/#processing-incoming-data) to extract the RGB value." + required: false + type: string +state_topic: + description: The MQTT topic subscribed to receive state updates. + required: false + type: string +state_value_template: + description: "Defines a [template](/docs/configuration/templating/#processing-incoming-data) to extract the state value. The template should match the payload `on` and `off` values, so if your light uses `power on` to turn on, your `state_value_template` string should return `power on` when the switch is on. For example if the message is just `on`, your `state_value_template` should be `power {{ value }}`." + required: false + type: string +white_value_command_topic: + description: "The MQTT topic to publish commands to change the light's white value." + required: false + type: string +white_value_state_topic: + description: The MQTT topic subscribed to receive white value updates. + required: false + type: string +white_value_template: + description: "Defines a [template](/docs/configuration/templating/#processing-incoming-data) to extract the white value." + required: false + type: string +xy_command_topic: + description: "The MQTT topic to publish commands to change the light's XY state." + required: false + type: string +xy_state_topic: + description: The MQTT topic subscribed to receive XY state updates. + required: false + type: string +xy_value_template: + description: "Defines a [template](/docs/configuration/templating/#processing-incoming-data) to extract the XY value." + required: false + type: string +availability_topic: + description: The MQTT topic subscribed to receive availability (online/offline) updates. + required: false + type: string +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 +{% endconfiguration %}

Make sure that your topics match exactly. `some-topic/` and `some-topic` are different topics. @@ -71,7 +187,7 @@ Configuration variables: ## {% linkable_title Comparison of light MQTT platforms %} -| Function | [`mqtt`](https://home-assistant.io/components/light.mqtt/) | [`mqtt_json`](https://home-assistant.io/components/light.mqtt_json/) | [`mqtt_template`](https://home-assistant.io/components/light.mqtt_template/) | +| Function | [`mqtt`](/components/light.mqtt/) | [`mqtt_json`](/components/light.mqtt_json/) | [`mqtt_template`](/components/light.mqtt_template/) | |-------------------|------------------------------------------------------------|----------------------------------------------------------------------|------------------------------------------------------------------------------| | Brightness | ✔ | ✔ | ✔ | | Color temperature | ✔ | ✔ | ✔ | @@ -80,6 +196,7 @@ Configuration variables: | RGB Color | ✔ | ✔ | ✔ | | Transitions | ✘ | ✔ | ✔ | | XY Color | ✔ | ✔ | ✘ | +| HS Color | ✘ | ✔ | ✘ | | White Value | ✔ | ✔ | ✔ | ## {% linkable_title Examples %} @@ -90,8 +207,9 @@ In this section you will find some real life examples of how to use this sensor. To enable a light with brightness and RGB support in your installation, add the following to your `configuration.yaml` file: +{% raw %} ```yaml -# Example configuration.yml entry +# Example configuration.yaml entry light: - platform: mqtt name: "Office Light RGB" @@ -101,28 +219,29 @@ light: brightness_command_topic: "office/rgb1/brightness/set" rgb_state_topic: "office/rgb1/rgb/status" rgb_command_topic: "office/rgb1/rgb/set" - state_value_template: "{% raw %}{{ value_json.state }}{% endraw %}" - brightness_value_template: "{% raw %}{{ value_json.brightness }}{% endraw %}" - rgb_value_template: "{% raw %}{{ value_json.rgb | join(',') }}{% endraw %}" + state_value_template: "{{ value_json.state }}" + brightness_value_template: "{{ value_json.brightness }}" + rgb_value_template: "{{ value_json.rgb | join(',') }}" qos: 0 payload_on: "ON" payload_off: "OFF" optimistic: false ``` +{% endraw %} ### {% linkable_title Brightness and no RGB support %} To enable a light with brightness (no RGB version) in your installation, add the following to your `configuration.yaml` file: ```yaml -# Example configuration.yml entry +# Example configuration.yaml entry light: - platform: mqtt name: "Office light" - state_topic: "office/rgb1/light/status" - command_topic: "office/rgb1/light/switch" - brightness_state_topic: 'office/rgb1/light/brightness' - brightness_command_topic: 'office/rgb1/light/brightness/set' + state_topic: "office/light/status" + command_topic: "office/light/switch" + brightness_state_topic: 'office/light/brightness' + brightness_command_topic: 'office/light/brightness/set' qos: 0 payload_on: "ON" payload_off: "OFF" @@ -134,19 +253,18 @@ light: To enable a light that sends only brightness topics to turn it on, add the following to your `configuration.yaml` file. The `command_topic` is only used to send an off command in this case: ```yaml -# Example configuration.yml entry +# Example configuration.yaml entry light: - platform: mqtt name: "Brightness light" state_topic: "office/light/status" command_topic: "office/light/switch" payload_off: "OFF" - brightness_state_topic: 'office/rgb1/light/brightness' - brightness_command_topic: 'office/rgb1/light/brightness/set' + brightness_state_topic: 'office/light/brightness' + brightness_command_topic: 'office/light/brightness/set' on_command_type: 'brightness' ``` - ### {% linkable_title Implementations %} - A [basic example](https://github.com/mertenats/open-home-automation/tree/master/ha_mqtt_light) using a nodeMCU board (ESP8266) to control its built-in LED (on/off). diff --git a/source/_components/light.mqtt_json.markdown b/source/_components/light.mqtt_json.markdown index 54732fe5bff..6e70c8be891 100644 --- a/source/_components/light.mqtt_json.markdown +++ b/source/_components/light.mqtt_json.markdown @@ -23,10 +23,12 @@ This platform supports on/off, brightness, RGB colors, XY colors, color temperat "color_temp": 155, "color": { "r": 255, - "g": 255, - "b": 255, - "x": 0.123, - "y": 0.123 + "g": 180, + "b": 200, + "x": 0.406, + "y": 0.301, + "h": 344.0, + "s": 29.412 }, "effect": "colorloop", "state": "ON", @@ -48,35 +50,116 @@ light: command_topic: "home/rgb1/set" ``` -Configuration variables: - -- **command_topic** (*Required*): The MQTT topic to publish commands to change the light's state. -- **brightness** (*Optional*): Flag that defines if the light supports brightness. Default is false. -- **color_temp** (*Optional*): Flag that defines if the light supports color temperature. Default is false. -- **effect** (*Optional*): Flag that defines if the light supports effects. Default is false. -- **effect_list** (*Optional*): The list of effects the light supports. -- **flash_time_long** (*Optional*): The duration, in seconds, of a "long" flash. Default is 10. -- **flash_time_short** (*Optional*): The duration, in seconds, of a "short" flash. Default is 2. -- **name** (*Optional*): The name of the light. Default is "MQTT JSON Light." -- **optimistic** (*Optional*): Flag that defines if the light works in optimistic mode. Default is true if no state topic defined, else false. -- **qos** (*Optional*): The maximum QoS level of the state topic. Default is 0 and will also be used to publishing messages. -- **retain** (*Optional*): If the published message should have the retain flag on or not. -- **rgb** (*Optional*): Flag that defines if the light supports RGB colors. Default is false. -- **state_topic** (*Optional*): The MQTT topic subscribed to receive state updates. -- **white_value** (*Optional*): Flag that defines if the light supports white values. Default is false. -- **xy** (*Optional*): Flag that defines if the light supports XY colors. Default is false. +{% configuration %} +name: + description: The name of the light. + required: false + type: string + default: MQTT JSON Light +command_topic: + description: The MQTT topic to publish commands to change the light’s state. + required: true + type: string +brightness: + description: Flag that defines if the light supports brightness. + required: false + type: boolean + default: false +brightness_scale: + description: "Defines the maximum brightness value (i.e. 100%) of the MQTT device." + required: false + type: integer + default: 255 +color_temp: + description: Flag that defines if the light supports color temperature. + required: false + type: boolean + default: false +effect: + description: Flag that defines if the light supports effects. + required: false + type: boolean + default: false +effect_list: + description: The list of effects the light supports. + required: false + type: string list +flash_time_long: + description: The duration, in seconds, of a “long” flash. + required: false + type: integer + default: 10 +flash_time_short: + description: The duration, in seconds, of a “short” flash. + required: false + type: integer + default: 2 +optimistic: + description: Flag that defines if the light works in optimistic mode. + required: false + type: boolean + default: "`true` if no state topic defined, else `false`." +qos: + description: The maximum QoS level of the state topic. + required: false + type: integer + default: 0 +retain: + description: If the published message should have the retain flag on or not. + required: false + type: boolean + default: false +rgb: + description: Flag that defines if the light supports RGB colors. + required: false + type: boolean + default: false +state_topic: + description: The MQTT topic subscribed to receive state updates. + required: false + type: string +white_value: + description: Flag that defines if the light supports white values. + required: false + type: boolean + default: false +xy: + description: Flag that defines if the light supports XY colors. + required: false + type: boolean + default: false +hs: + description: Flag that defines if the light supports HS colors. + required: false + type: boolean + default: false +availability_topic: + description: The MQTT topic subscribed to receive availability (online/offline) updates. + required: false + type: string +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 +{% endconfiguration %}

Make sure that your topics match exact. `some-topic/` and `some-topic` are different topics.

- XY and RGB can not be used at the same time. If both are provided, XY overrides RGB. + RGB, XY and HSV can not be used at the same time in `state_topic` messages. Make sure that only one of the color models is in the "color" section of the state MQTT payload.

## {% linkable_title Comparison of light MQTT platforms %} -| Function | [`mqtt`](https://home-assistant.io/components/light.mqtt/) | [`mqtt_json`](https://home-assistant.io/components/light.mqtt_json/) | [`mqtt_template`](https://home-assistant.io/components/light.mqtt_template/) | +| Function | [`mqtt`](/components/light.mqtt/) | [`mqtt_json`](/components/light.mqtt_json/) | [`mqtt_template`](/components/light.mqtt_template/) | |-------------------|------------------------------------------------------------|----------------------------------------------------------------------|------------------------------------------------------------------------------| | Brightness | ✔ | ✔ | ✔ | | Color temperature | ✔ | ✔ | ✔ | @@ -85,6 +168,7 @@ Configuration variables: | RGB Color | ✔ | ✔ | ✔ | | Transitions | ✘ | ✔ | ✔ | | XY Color | ✔ | ✔ | ✘ | +| HS Color | ✘ | ✔ | ✘ | | White Value | ✔ | ✔ | ✔ | ## {% linkable_title Examples %} @@ -120,6 +204,54 @@ light: brightness: true ``` +### {% linkable_title Brightness Scaled %} + +To enable a light using a brightness scale other than 8bit the `brightness_scale` option may be added to denote the "fully on" value: +```yaml +# Example configuration.yaml entry +light: + - platform: mqtt_json + name: mqtt_json_light_1 + state_topic: "home/light" + command_topic: "home/light/set" + brightness: true + brightness_scale: 4095 +``` + +Home Assistant will then convert its 8bit value in the message to and from the device: + +```json +{ + "brightness": 4095, + "state": "ON" +} +``` + +### {% linkable_title HS Color %} + +To use a light with hue+saturation as the color model, set `hs` to `true` in the platform configuration: + +```yaml +light: + - platform: mqtt_json + name: mqtt_json_hs_light + state_topic: "home/light" + command_topic: "home/light/set" + hs: True +``` + +Home Assistant expects the hue values to be in the range 0 to 360 and the saturation values to be scaled from 0 to 100. For example, the following is a blue color shade: + +```json +{ + "state": "ON", + "color": { + "h": 24.0, + "s": 100.0 + } +} +``` + ### {% linkable_title Implementations %} - A full example of custom lighting using this platform and an ESP8266 microcontroller can be found [here](https://github.com/corbanmailloux/esp-mqtt-rgb-led). It supports on/off, brightness, transitions, RGB colors, and flashing. @@ -127,3 +259,7 @@ light: - There is also another implementation forked from the above repo, it supports all the same features but is made for addressable LED strips using FastLED on a NodeMCU V3 it can be found [here](https://github.com/JammyDodger231/nodemcu-mqtt-rgb-led). - [MQTT JSON Light](https://github.com/mertenats/Open-Home-Automation/tree/master/ha_mqtt_rgbw_light_with_discovery) is another implementation for ESP8266 including [MQTT discovery](/docs/mqtt/discovery/). + +- [esphomelib](https://github.com/OttoWinter/esphomelib) is a library for ESP8266 and ESP32 boards that has many of Home Assistant's MQTT features (like [discovery](/docs/mqtt/discovery/)) pre-implemented and provides high-level abstractions for components such as lights or sensors. + +- [AiLight](https://github.com/stelgenhof/AiLight) is a custom firmware for the Ai-Thinker (and equivalent) RGBW WiFi light bulbs that has an ESP8266 onboard and controlled by the MY9291 LED driver. It implements the [MQTT JSON light](/components/light.mqtt_json/) platform and supports ON/OFF, RGBW colours, brightness, colour temperature, flashing and transitions. Also it includes [MQTT Auto Discovery](/docs/mqtt/discovery/)) and the MQTT Last Will and Testament is enabled as well. \ No newline at end of file diff --git a/source/_components/light.mqtt_template.markdown b/source/_components/light.mqtt_template.markdown index 3eed0fa3445..11b43726724 100644 --- a/source/_components/light.mqtt_template.markdown +++ b/source/_components/light.mqtt_template.markdown @@ -33,24 +33,89 @@ light: command_off_template: "off" ``` -Configuration variables: - -- **name** (*Optional*): The name of the light. Default is "MQTT Template Light." -- **effect_list** (*Optional*): List of possible effects. -- **command_topic** (*Required*): The MQTT topic to publish commands to change the light's state. -- **state_topic** (*Optional*): The MQTT topic subscribed to receive state updates. -- **command_on_template** (*Required*): The [template](/docs/configuration/templating/#processing-incoming-data) for *on* state changes. Available variables: `state`, `brightness`, `red`, `green`, `blue`, `flash`, `transition` and `effect`. -- **command_off_template** (*Required*): The [template](/docs/configuration/templating/#processing-incoming-data) for *off* state changes. Available variables: `state` and `transition`. -- **state_template** (*Optional*): [Template](/docs/configuration/templating/#processing-incoming-data) to extract state from the state payload value. -- **brightness_template** (*Optional*): [Template](/docs/configuration/templating/#processing-incoming-data) to extract brightness from the state payload value. -- **red_template** (*Optional*): [Template](/docs/configuration/templating/#processing-incoming-data) to extract red color from the state payload value. -- **green_template** (*Optional*): [Template](/docs/configuration/templating/#processing-incoming-data) to extract green color from the state payload value. -- **blue_template** (*Optional*): [Template](/docs/configuration/templating/#processing-incoming-data) to extract blue color from the state payload value. -- **color_temp_template** (*Optional*): [Template](/docs/configuration/templating/#processing-incoming-data) to extract color temperature from the state payload value. -- **effect_template** (*Optional*): [Template](/docs/configuration/templating/#processing-incoming-data) to extract effect from the state payload value. -- **white_value_template** (*Optional*): [Template](/docs/configuration/templating/#processing-incoming-data) to extract white value from the state payload value. -- **optimistic** (*Optional*): Flag that defines if the light works in optimistic mode. Default is true if no state topic or state template is defined, else false. -- **qos** (*Optional*): The maximum QoS level of the state topic. Default is 0 and will also be used to publishing messages. +{% configuration %} +name: + description: The name of the light. + required: false + type: string + default: MQTT Template Light +effect_list: + description: List of possible effects. + required: false + type: string list +command_topic: + description: The MQTT topic to publish commands to change the light’s state. + required: true + type: string +state_topic: + description: The MQTT topic subscribed to receive state updates. + required: false + type: string +command_on_template: + description: "The [template](/docs/configuration/templating/#processing-incoming-data) for *on* state changes. Available variables: `state`, `brightness`, `red`, `green`, `blue`, `flash`, `transition` and `effect`." + required: true + type: string +command_off_template: + description: "The [template](/docs/configuration/templating/#processing-incoming-data) for *off* state changes. Available variables: `state` and `transition`." + required: true + type: string +state_template: + description: "[Template](/docs/configuration/templating/#processing-incoming-data) to extract state from the state payload value." + required: false + type: string +brightness_template: + description: "[Template](/docs/configuration/templating/#processing-incoming-data) to extract brightness from the state payload value." + required: false + type: string +red_template: + description: "[Template](/docs/configuration/templating/#processing-incoming-data) to extract red color from the state payload value." + required: false + type: string +green_template: + description: "[Template](/docs/configuration/templating/#processing-incoming-data) to extract green color from the state payload value." + required: false + type: string +blue_template: + description: "[Template](/docs/configuration/templating/#processing-incoming-data) to extract blue color from the state payload value." + required: false + type: string +color_temp_template: + description: "[Template](/docs/configuration/templating/#processing-incoming-data) to extract color temperature from the state payload value." + required: false + type: string +effect_template: + description: "[Template](/docs/configuration/templating/#processing-incoming-data) to extract effect from the state payload value." + required: false + type: string +white_value_template: + description: "[Template](/docs/configuration/templating/#processing-incoming-data) to extract white value from the state payload value." + required: false + type: string +optimistic: + description: Flag that defines if the light works in optimistic mode. + required: false + type: string + default: "`true` if no state topic or state template is defined, else `false`." +qos: + description: The maximum QoS level of the state topic. + required: false + type: integer + default: 0 +availability_topic: + description: The MQTT topic subscribed to receive availability (online/offline) updates. + required: false + type: string +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 +{% endconfiguration %}

Make sure that your topics match exact. `some-topic/` and `some-topic` are different topics. @@ -58,7 +123,7 @@ Configuration variables: ## {% linkable_title Comparison of light MQTT platforms %} -| Function | [`mqtt`](https://home-assistant.io/components/light.mqtt/) | [`mqtt_json`](https://home-assistant.io/components/light.mqtt_json/) | [`mqtt_template`](https://home-assistant.io/components/light.mqtt_template/) | +| Function | [`mqtt`](/components/light.mqtt/) | [`mqtt_json`](/components/light.mqtt_json/) | [`mqtt_template`](/components/light.mqtt_template/) | |-------------------|------------------------------------------------------------|----------------------------------------------------------------------|------------------------------------------------------------------------------| | Brightness | ✔ | ✔ | ✔ | | Color temperature | ✔ | ✔ | ✔ | @@ -67,6 +132,7 @@ Configuration variables: | RGB Color | ✔ | ✔ | ✔ | | Transitions | ✘ | ✔ | ✔ | | XY Color | ✔ | ✔ | ✘ | +| HS Color | ✘ | ✔ | ✘ | | White Value | ✔ | ✔ | ✔ | ## {% linkable_title Examples %} @@ -75,7 +141,7 @@ In this section you find some real life examples of how to use this light. ### {% linkable_title Simple string payload %} -For a simple string payload with the format `state,brightness,r-g-b` (e.g. `on,255,255-255-255`), add the following to your `configuration.yaml` file: +For a simple string payload with the format `state,brightness,r-g-b` (e.g., `on,255,255-255-255`), add the following to your `configuration.yaml` file: ```yaml # Example configuration.yaml entry diff --git a/source/_components/light.mysensors.markdown b/source/_components/light.mysensors.markdown index 4bf9a9d28a8..5f91aa43fe1 100644 --- a/source/_components/light.mysensors.markdown +++ b/source/_components/light.mysensors.markdown @@ -1,7 +1,7 @@ --- layout: page title: "MySensors Light" -description: "Instructions how to integrate MySensors lights into Home Assistant." +description: "Instructions on how to integrate MySensors lights into Home Assistant." date: 2016-10-01 15:00 +0200 sidebar: true comments: false diff --git a/source/_components/light.mystrom.markdown b/source/_components/light.mystrom.markdown index f9ceacdb226..9cc2555fb16 100644 --- a/source/_components/light.mystrom.markdown +++ b/source/_components/light.mystrom.markdown @@ -1,7 +1,7 @@ --- layout: page title: "myStrom WiFi Bulb" -description: "Instructions how to integrate myStrom WiFi Bulbs into Home Assistant." +description: "Instructions on how to integrate myStrom WiFi Bulbs into Home Assistant." date: 2017-04-18 06:00 sidebar: true comments: false diff --git a/source/_components/light.nanoleaf_aurora.markdown b/source/_components/light.nanoleaf_aurora.markdown new file mode 100644 index 00000000000..9127387e298 --- /dev/null +++ b/source/_components/light.nanoleaf_aurora.markdown @@ -0,0 +1,56 @@ +--- +layout: page +title: "Nanoleaf Aurora Light Panel" +description: "Instructions how to integrate Nanoleaf Aurora Light Panels into Home Assistant." +date: 2018-01-04 20:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: nanoleaf_aurora_light.png +ha_category: Light +ha_iot_class: "Local Polling" +featured: false +ha_release: 0.67 +--- + +### {% linkable_title Configuration Sample %} + +The `nanoleaf_aurora` platform allows you to control [Nanoleaf Aurora Light Panels](https://nanoleaf.me) from Home Assistant. + +The preferred way to set up this platform is by enabling the [discovery component](https://www.home-assistant.io/components/discovery/). Make sure to press and hold the *ON* button for 5 seconds (the LED will start flashing) on your Nanoleaf Aurora Panel while Home Assistant is starting. + +To configure the Aurora lights manually, add the following lines to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +light: + - platform: nanoleaf_aurora + host: 192.168.1.10 + token: xxxxxxxxxxxxxxxxxxxxx +``` + +{% configuration %} +host: + description: IP address or host-name of the device, e.g., 192.168.1.10. + required: true + type: string +token: + description: The *auth* token that you get via *POST* to */api/v1/new* + required: true + type: string +name: + description: Name of the component, make this unique if you have multiple Light Panels + required: false + type: string + default: Aurora +{% endconfiguration %} + +### {% linkable_title Getting The Auth Token %} + +1. Make sure that your Nanoleaf Aurora Panel is fully patched (as of the time of writing the latest version was 2.2.0) +2. Hold down the *ON* button on the Panel for 5 seconds; the LED will start flashing +3. Issue a *POST* request to the API endpoint, e.g., via `$ curl -i -X POST http://192.168.1.155:16021/api/v1/new` +4. The output should include the auth token like *{"auth_token":"xxxxxxxxxxxxxxxxxxxxx"}*, copy the resulting token into your configuration + +If you get a 403 Forbidden message, you probably did not press the *ON* button long enough. The time-frame to get a valid token is only 30 seconds, so you have to be quick to issue the curl request. diff --git a/source/_components/light.osramlightify.markdown b/source/_components/light.osramlightify.markdown index 86fa342c9b3..d0479693e0c 100644 --- a/source/_components/light.osramlightify.markdown +++ b/source/_components/light.osramlightify.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Osram Lightify" -description: "Instructions how to integrate Osram Lightify into Home Assistant." +description: "Instructions on how to integrate Osram Lightify into Home Assistant." date: 2016-05-29 08:00 sidebar: true comments: false @@ -23,5 +23,5 @@ light: Configuration variables: - **host** (*Required*): IP address of the Osram Lightify bridge, eg. `192.168.1.50`. +- **allow_lightify_nodes** (*Optional*): (true/false) Edit this to stop homeassistant from importing the lightify lights. - **allow_lightify_groups** (*Optional*): (true/false) Edit this to stop homeassistant from importing the lightify groups. - diff --git a/source/_components/light.piglow.markdown b/source/_components/light.piglow.markdown index d261a816487..c2664af84cf 100644 --- a/source/_components/light.piglow.markdown +++ b/source/_components/light.piglow.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Piglow" -description: "Instructions how to setup Piglow LED's within Home Assistant." +description: "Instructions on how to setup Piglow LED's within Home Assistant." date: 2017-01-13 18:00 sidebar: true comments: false diff --git a/source/_components/light.qwikswitch.markdown b/source/_components/light.qwikswitch.markdown index e1f600c98f3..13f61413f64 100644 --- a/source/_components/light.qwikswitch.markdown +++ b/source/_components/light.qwikswitch.markdown @@ -1,7 +1,7 @@ --- layout: page title: "QwikSwitch Light" -description: "Instructions how to integrate Qwikswitch dimmers and relays as lights into Home Assistant." +description: "Instructions on how to integrate Qwikswitch dimmers and relays as lights into Home Assistant." date: 2016-05-04 00:00 sidebar: true comments: false diff --git a/source/_components/light.rflink.markdown b/source/_components/light.rflink.markdown index 0bd73b588ef..cc56e6de3ee 100644 --- a/source/_components/light.rflink.markdown +++ b/source/_components/light.rflink.markdown @@ -1,7 +1,7 @@ --- layout: page title: "RFLink Light" -description: "Instructions how to integrate RFLink lights into Home Assistant." +description: "Instructions on how to integrate RFLink lights into Home Assistant." date: 2016-01-04 sidebar: true comments: false @@ -50,7 +50,7 @@ Device configuration variables: - **name** (*Optional*): Name for the device, defaults to Rflink ID. - **type** (*Optional*): Override automatically detected type of the light device, can be: switchable, dimmable, hybrid or toggle. See 'Light Types' below. (default: Switchable) - **aliases** (*Optional*): Alternative Rflink ID's this device is known by. -- **fire_event** (*Optional*): Fire an `button_pressed` event if this device is turned on or off (default: False). +- **fire_event** (*Optional*): Fire a `button_pressed` event if this device is turned on or off (default: False). - **signal_repetitions** (*Optional*): Repeat every Rflink command this number of times (default: 1). - **fire_event_** (*Optional*): Set default `fire_event` for RFLink switch devices (see below). - **signal_repetitions** (*Optional*): Set default `signal_repetitions` for RFLink switch devices (see below). @@ -86,7 +86,7 @@ Any on/off command from any alias ID updates the current state of the light. How Light devices can come in different forms. Some only switch on and off, other support dimming. Dimmable devices might not always respond nicely to repeated `on` command as they turn into a pulsating state until `on` is pressed again (for example KlikAanKlikUit). The RFLink component support three types of lights to make things work in every situation: -- *Hybrid*: This type sends a `dim` followed by an a `on` command; and `off` commands. This will make dimmable devices turn on at the requested dim level and on/off devices on. One caveat is this type is not compatible with signal repetition as multiple `on` signals will cause dimmers to go into disco mode. +- *Hybrid*: This type sends a `dim` followed by an an `on` command; and `off` commands. This will make dimmable devices turn on at the requested dim level and on/off devices on. One caveat is this type is not compatible with signal repetition as multiple `on` signals will cause dimmers to go into disco mode. - *Switchable*: Device type that sends only `on` and `off` commands. It work for both on/off and dimmable type switches. However dimmables might have issues with signal repetition (see above). - *Dimmable*: Sends only `dim` and `off` commands. This does not work on on/off type devices as they don't understand the `dim` command. For dimmers this does not cause issues with signal repetitions. - *Toggle*: Device type that sends only `on` commands to turn on or off the device. Some switches like for example Livolo light switches use the same 'on' command to switch on and switch off the lights. If the light is on and 'on' gets sent, the light will turn off and if the light is off and 'on' gets sent, the light will turn on. If the device has an unknown state, it will assume it is off by default. diff --git a/source/_components/light.rfxtrx.markdown b/source/_components/light.rfxtrx.markdown index ee5c513fe81..c83d9f71fc7 100644 --- a/source/_components/light.rfxtrx.markdown +++ b/source/_components/light.rfxtrx.markdown @@ -1,7 +1,7 @@ --- layout: page title: "RFXtrx Light" -description: "Instructions how to integrate RFXtrx lights into Home Assistant." +description: "Instructions on how to integrate RFXtrx lights into Home Assistant." date: 2015-10-08 10:15 sidebar: true comments: false @@ -60,3 +60,8 @@ Configuration variables: - **automatic_add** (*Optional*): To enable the automatic addition of new lights. - **signal_repetitions** (*Optional*): Because the RFXtrx device sends its actions via radio and from most receivers it's impossible to know if the signal was received or not. Therefore you can configure the switch to try to send each signal repeatedly. - **fire_event** (*Optional*): Fires an event even if the state is the same as before. Can be used for automations. + +

+If a device ID consists of only numbers, please make sure to surround it with quotes. +This is a known limitation in YAML, because the device ID will be interpreted as a number otherwise. +

diff --git a/source/_components/light.scsgate.markdown b/source/_components/light.scsgate.markdown index 5625b43cfb3..07df0ca0f7e 100644 --- a/source/_components/light.scsgate.markdown +++ b/source/_components/light.scsgate.markdown @@ -1,7 +1,7 @@ --- layout: page title: "SCSGate Light" -description: "Instructions how to integrate SCSGate lights into Home Assistant." +description: "Instructions on how to integrate SCSGate lights into Home Assistant." date: 2016-01-31 19:30 sidebar: true comments: false diff --git a/source/_components/light.sensehat.markdown b/source/_components/light.sensehat.markdown index b2bb9dbce5a..7c7a4d0b378 100644 --- a/source/_components/light.sensehat.markdown +++ b/source/_components/light.sensehat.markdown @@ -1,16 +1,16 @@ --- layout: page title: "Sense HAT Light" -description: "Instructions how to setup Sense HAT LED lights within Home Assistant." +description: "Instructions on how to setup Sense HAT LED lights within Home Assistant." date: 2017-04-29 16:00 sidebar: true comments: false sharing: true footer: true logo: sense-hat.png -ha_version: 0.44 ha_category: Light ha_iot_class: "Assumed State" +ha_release: 0.44 --- The `sensehat` light platform lets you control the [Sense HAT](https://www.raspberrypi.org/products/sense-hat/) board's 8x8 RGB LED matrix on your Raspberry Pi from within Home Assistant. diff --git a/source/_components/light.sisyphus.markdown b/source/_components/light.sisyphus.markdown new file mode 100644 index 00000000000..4c9e0146a99 --- /dev/null +++ b/source/_components/light.sisyphus.markdown @@ -0,0 +1,20 @@ +--- +layout: page +title: "Sisyphus Light" +description: "Instructions on how to integrate the light in your Sisyphus Kinetic Art Table into Home Assistant." +date: 2018-05-06 22:26 +sidebar: true +comments: false +sharing: true +footer: true +logo: sisyphus.png +ha_category: Light +ha_iot_class: "Local Push" +ha_release: 0.75 +--- + +The [Sisyphus](https://sisyphus-industries.com/) integration for Home Assistant allows you to observe and control your Sisyphus Kinetic Art Table. + +Lights will be automatically added for each of your Sisyphus tables if the Sisyphus component is configured. + +For more configuration information see the [Sisyphus component](/components/sisyphus/) documentation. diff --git a/source/_components/light.tellstick.markdown b/source/_components/light.tellstick.markdown index a81d2384646..9c66e121ec6 100644 --- a/source/_components/light.tellstick.markdown +++ b/source/_components/light.tellstick.markdown @@ -1,7 +1,7 @@ --- layout: page title: "TellStick Light" -description: "Instructions how to integrate TellStick lights into Home Assistant." +description: "Instructions on how to integrate TellStick lights into Home Assistant." date: 2015-08-06 19:00 sidebar: true comments: false @@ -15,7 +15,7 @@ ha_iot_class: "Assumed State" This `tellstick` light platform allows you to control your [TellStick](http://www.telldus.se/products/tellstick) dimmers. -To use your TellStick device, you first have to set up your [Tellstick hub](https://home-assistant.io/components/tellstick/) and then add the following to your `configuration.yaml` file: +To use your TellStick device, you first have to set up your [Tellstick hub](/components/tellstick/) and then add the following to your `configuration.yaml` file: ```yaml # Example configuration.yaml entry diff --git a/source/_components/light.template.markdown b/source/_components/light.template.markdown index 69f0315c940..9d1315b3106 100755 --- a/source/_components/light.template.markdown +++ b/source/_components/light.template.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Template Light" -description: "Instructions how to integrate Template Lights into Home Assistant." +description: "Instructions on how to integrate Template Lights into Home Assistant." date: 2016-05-18 20:32 sidebar: true comments: false @@ -42,7 +42,7 @@ light: {% endraw %} {% configuration %} - switches: + lights: description: List of your lights. required: true type: map @@ -52,7 +52,7 @@ light: required: false type: string entity_id: - description: Add a list of entity IDs so the switch only reacts to state changes of these entities. This will reduce the number of times the light will try to update its state. + description: A list of entity IDs so the light only reacts to state changes of these entities. This can be used if the automatic analysis fails to find all relevant entities. required: false type: [string, list] value_template: diff --git a/source/_components/light.tplink.markdown b/source/_components/light.tplink.markdown index 68fff983950..158504bcae0 100644 --- a/source/_components/light.tplink.markdown +++ b/source/_components/light.tplink.markdown @@ -1,7 +1,7 @@ --- layout: page -title: "TPLink Bulb" -description: "Instructions how to integrate TPLink bulbs into Home Assistant." +title: "TP-Link Bulb" +description: "Instructions on how to integrate TP-Link bulbs into Home Assistant." date: 2017-07-25 08:00 sidebar: true comments: false @@ -14,7 +14,7 @@ ha_release: "0.50" --- -The `tplink` light platform allows you to control the state of your [TPLink smart bulb](http://www.tp-link.com/en/products/list-5609.html). +The `tplink` light platform allows you to control the state of your [TP-Link smart bulb](http://www.tp-link.com/en/products/list-5609.html). Supported units: @@ -23,7 +23,7 @@ Supported units: - LB120 - LB130 -To use your TPLink light in your installation, add the following to your `configuration.yaml` file: +To use your TP-Link light in your installation, add the following to your `configuration.yaml` file: ```yaml # Example configuration.yaml entry @@ -32,9 +32,15 @@ light: host: IP_ADDRESS ``` -Configuration variables: - -- **host** (*Required*): The IP address of your TP-Link bulb, eg. `192.168.1.32`. -- **name** (*Optional*): The name to use when displaying this bulb. - +{% configuration %} +name: + description: The name to use when displaying this bulb. + required: false + type: string + default: TP-Link Light +host: + description: "The IP address of your TP-Link bulb, eg. `192.168.1.32`." + required: true + type: string +{% endconfiguration %} diff --git a/source/_components/light.tuya.markdown b/source/_components/light.tuya.markdown new file mode 100644 index 00000000000..ec3d418e5e5 --- /dev/null +++ b/source/_components/light.tuya.markdown @@ -0,0 +1,23 @@ +--- +layout: page +title: "Tuya Light" +description: "Instructions on how to setup the Tuya lights within Home Assistant." +date: 2018-07-16 09:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: tuya.png +ha_category: Light +ha_iot_class: "Cloud Polling" +ha_release: 0.74 +--- + + +The `tuya` light platform allows you to control your [Tuya Smart](https://www.tuya.com) lights. + +The platform supports most kinds of Tuya light. + +

+Full configuration details can be found on the main [Tuya component](/components/tuya/) page. +

\ No newline at end of file diff --git a/source/_components/light.velbus.markdown b/source/_components/light.velbus.markdown index 662b788ca41..ddafbaa7eb5 100644 --- a/source/_components/light.velbus.markdown +++ b/source/_components/light.velbus.markdown @@ -15,26 +15,41 @@ ha_release: "0.50" The `velbus` light allows you to control [Velbus](http://www.velbus.eu) lights. +## {% linkable_title Configuration %} + To use your Velbus lights in your installation, add the following to your `configuration.yaml` file: ```yaml # Example configuration.yaml entry - light: - platform: velbus devices: - - name: Light 1 - module: 0xda - channel: 4 - - name: Light 2 - module: 0xbc - channel: 1 + - name: Light 1 + module: 0xda + channel: 4 + - name: Light 2 + module: 0xbc + channel: 1 ``` -Configuration variables: -- **devices** array (*Required*): The array contains the lights to configure - - **name** (*Required*): Name of the light. - - **module** (*Required*): The hexadecimal module address - - **channel** (*Required*): The channel number in the module. +{% configuration %} +devices: + description: The list contains the lights to configure. + required: true + type: map + keys: + name: + description: Name to use in the frontend. + required: true + type: string + module: + description: The hexadecimal module address. + required: true + type: string + channel: + description: The channel number in the module. + required: true + type: string +{% endconfiguration %} For hub configuration, see [the Velbus component](/components/velbus/). diff --git a/source/_components/light.vera.markdown b/source/_components/light.vera.markdown index da0fc42fff5..dba42ffcaf0 100644 --- a/source/_components/light.vera.markdown +++ b/source/_components/light.vera.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Vera Light" -description: "Instructions how to integrate Vera lights into Home Assistant." +description: "Instructions on how to integrate Vera lights into Home Assistant." date: 2015-10-20 21:00 sidebar: true comments: false diff --git a/source/_components/light.wemo.markdown b/source/_components/light.wemo.markdown index a2ff553aada..1ae147ef864 100644 --- a/source/_components/light.wemo.markdown +++ b/source/_components/light.wemo.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Belkin WeMo Lights" -description: "Instructions how to integrate Belkin WeMo LED lights into Home Assistant." +description: "Instructions on how to integrate Belkin WeMo LED lights and WeMo Dimmer Switch into Home Assistant." date: 2016-02-20 00:45 sidebar: true comments: false @@ -14,7 +14,7 @@ ha_release: 0.14 --- -The `wemo` platform allows you to control your [Belkin WeMo](http://www.belkin.com/us/p/P-F5Z0489/) LED lights from within Home Assistant. +The `wemo` platform allows you to control your Belkin WeMo [LED lights](http://www.belkin.com/us/p/P-F5Z0489/) and [Smart Dimmer Switch](http://www.belkin.com/us/F7C059-Belkin/p/P-F7C059/) from within Home Assistant. They will be automatically discovered if the discovery component is enabled. diff --git a/source/_components/light.wink.markdown b/source/_components/light.wink.markdown index 5e7b74771ed..e537c116018 100644 --- a/source/_components/light.wink.markdown +++ b/source/_components/light.wink.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Wink Light" -description: "Instructions how to setup the Wink lights within Home Assistant." +description: "Instructions on how to setup the Wink lights within Home Assistant." date: 2015-01-20 22:36 sidebar: true comments: false diff --git a/source/_components/light.x10.markdown b/source/_components/light.x10.markdown index 7e0a52fd58a..45df065a499 100644 --- a/source/_components/light.x10.markdown +++ b/source/_components/light.x10.markdown @@ -1,7 +1,7 @@ --- layout: page title: "X10" -description: "Instructions how to setup X10 devices within Home Assistant." +description: "Instructions on how to setup X10 devices within Home Assistant." date: 2016-07-27 sidebar: true comments: false @@ -25,6 +25,7 @@ light: - platform: x10 devices: - id: a2 + name: Guest Room - id: a3 name: Bedroom Lamp ``` @@ -32,4 +33,4 @@ light: Configuration variables: - **id** (*Required*): Device identifier. Composed of house code and unit id. -- **name** (*Optional*): A friendly name for the device. By default *id* from the device is used. +- **name** (*Required*): A friendly name for the device. diff --git a/source/_components/light.xiaomi_aqara.markdown b/source/_components/light.xiaomi_aqara.markdown index 25e01ba22c7..48bf4fb1358 100644 --- a/source/_components/light.xiaomi_aqara.markdown +++ b/source/_components/light.xiaomi_aqara.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Xiaomi Light" -description: "Instructions how to setup the Xiaomi light within Home Assistant." +description: "Instructions on how to setup the Xiaomi light within Home Assistant." date: 2017-07-21 16:34 sidebar: true comments: false diff --git a/source/_components/light.xiaomi_miio.markdown b/source/_components/light.xiaomi_miio.markdown index 5f76deb341e..4597bc7f8fa 100644 --- a/source/_components/light.xiaomi_miio.markdown +++ b/source/_components/light.xiaomi_miio.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Xiaomi Philips Light" -description: "Instructions how to integrate your Xiaomi Philips Lights within Home Assistant." +description: "Instructions on how to integrate your Xiaomi Philips Lights within Home Assistant." date: 2017-08-26 08:45 sidebar: true comments: false @@ -9,13 +9,58 @@ sharing: true footer: true logo: philips.png ha_category: Light -ha_version: 0.53 ha_iot_class: "Local Polling" +ha_release: 0.53 --- -The `xiaomi_miio` platform allows you to control the state of your Xiaomi Philips LED Ball Lamp and Xiaomi Philips LED Ceiling Lamp. +The `xiaomi_miio` platform allows you to control the state of your Xiaomi Philips LED Ball Lamp, Xiaomi Philips Zhirui LED Bulb E14 Candle Lamp, Xiaomi Philips LED Ceiling Lamp and Xiaomi Philips Eyecare Lamp 2. -Currently, the supported features are `on`, `off`, `set_cct` (colortemp) , `set_bright` (brightness). +## Features + +### Philips LED Ball Lamp and Philips Zhirui LED Candle Lamp + +* Power (on, off) +* Brightness +* Color temperature (175...333 mireds) +* Scene (1, 2, 3, 4) +* Delayed turn off (Resolution in seconds) +* Attributes + - model + - scene + - delayed_turn_off + +### Philips LED Ceiling Lamp + +* Power (on, off) +* Brightness +* Color temperature (175...370 mireds) +* Scene (1, 2, 3, 4) +* Night light mode (on, off) +* Delayed turn off (Resolution in seconds) +* Attributes + - model + - scene + - delayed_turn_off + - night_light_mode + - automatic_color_temperature + +### Philips Eyecare Smart Lamp 2 + +* Eyecare light (on, off) +* Ambient light (on, off) +* Brightness (of each light) +* Scene (1, 2, 3, 4) +* Night light mode (on, off) +* Delayed turn off (Resolution in seconds) +* Eye fatigue reminder / notification (on, off) +* Eyecare mode (on, off) +* Attributes + - model + - scene + - delayed_turn_off + - night_light_mode + - reminder + - eyecare_mode Please follow the instructions on [Retrieving the Access Token](/components/vacuum.xiaomi_miio/#retrieving-the-access-token) to get the API token to use in the `configuration.yaml` file. @@ -28,9 +73,93 @@ light: name: Xiaomi Philips Smart LED Ball host: 192.168.130.67 token: YOUR_TOKEN + model: philips.light.bulb ``` -Configuration variables: -- **host** (*Required*): The IP of your light. -- **token** (*Required*): The API token of your light. -- **name** (*Optional*): The name of your light. +{% configuration %} +host: + description: The IP address of your miio light. + required: true + type: string +token: + description: The API token of your miio light. + required: true + type: string +name: + description: The name of your miio light. + required: false + type: string + default: Xiaomi Philips Light +model: + description: The model of your miio light. Valid values are `philips.light.bulb`, `philips.light.candle2`, `philips.light.sread1`, `philips.light.ceiling` and `philips.light.zyceiling`. This setting can be used to bypass the device model detection and is recommended if your device isn't always available. + required: false + type: string +{% endconfiguration %} + +## {% linkable_title Platform Services %} + +### {% linkable_title Service `light.xiaomi_miio_set_scene` %} + +Set one of the 4 available fixed scenes. + +| Service data attribute | Optional | Description | +|---------------------------|----------|-------------------------------------------------------| +| `entity_id` | yes | Only act on a specific light. Else targets all. | +| `scene` | no | Scene, between 1 and 4. | + +### {% linkable_title Service `light.xiaomi_miio_set_delayed_turn_off` %} + +Delayed turn off. + +| Service data attribute | Optional | Description | +|---------------------------|----------|-------------------------------------------------------| +| `entity_id` | yes | Only act on a specific light. Else targets all. | +| `time_period` | no | Time period for the delayed turn off. | + +### {% linkable_title Service `light.xiaomi_miio_reminder_on` %} (Eyecare Smart Lamp 2 only) + +Enable the eye fatigue reminder/notification. + +| Service data attribute | Optional | Description | +|---------------------------|----------|-------------------------------------------------------| +| `entity_id` | yes | Only act on a specific light. Else targets all. | + +### {% linkable_title Service `light.xiaomi_miio_reminder_off` %} (Eyecare Smart Lamp 2 only) + +Disable the eye fatigue reminder/notification. + +| Service data attribute | Optional | Description | +|---------------------------|----------|-------------------------------------------------------| +| `entity_id` | yes | Only act on a specific light. Else targets all. | + +### {% linkable_title Service `light.xiaomi_miio_night_light_mode_on` %} (Eyecare Smart Lamp 2 only) + +Turn the smart night light mode on. + +| Service data attribute | Optional | Description | +|---------------------------|----------|-------------------------------------------------------| +| `entity_id` | yes | Only act on a specific light. Else targets all. | + +### {% linkable_title Service `light.xiaomi_miio_night_light_mode_off` %} (Eyecare Smart Lamp 2 only) + +Turn the smart night light mode off. + +| Service data attribute | Optional | Description | +|---------------------------|----------|-------------------------------------------------------| +| `entity_id` | yes | Only act on a specific light. Else targets all. | + +### {% linkable_title Service `light.xiaomi_miio_eyecare_mode_on` %} (Eyecare Smart Lamp 2 only) + +Turn the eyecare mode on. + +| Service data attribute | Optional | Description | +|---------------------------|----------|-------------------------------------------------------| +| `entity_id` | yes | Only act on a specific light. Else targets all. | + +### {% linkable_title Service `light.xiaomi_miio_eyecare_mode_off` %} (Eyecare Smart Lamp 2 only) + +Turn the eyecare mode off. + +| Service data attribute | Optional | Description | +|---------------------------|----------|-------------------------------------------------------| +| `entity_id` | yes | Only act on a specific light. Else targets all. | diff --git a/source/_components/light.yeelight.markdown b/source/_components/light.yeelight.markdown index c082a8b2d8c..c446d5950f7 100644 --- a/source/_components/light.yeelight.markdown +++ b/source/_components/light.yeelight.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Yeelight Wifi Bulb" -description: "Instructions how to setup Yeelight Wifi devices within Home Assistant." +description: "Instructions on how to setup Yeelight Wifi devices within Home Assistant." date: 2016-10-29 sidebar: true comments: false @@ -35,7 +35,7 @@ light: Configuration variables: -- **ip** (*Required*): IP(s) of your wifi bulbs +- **ip** (*Required*): IP(s) of your Wifi bulbs - **name** (*Optional*): A friendly name for the device. - **transition** (*Optional*, default 350): Smooth transitions over time (in ms). - **use_music_mode** (*Optional*, default False): Enable music mode. @@ -48,7 +48,8 @@ Per default the bulb limits the amount of requests per minute to 60, a limitatio

Before trying to control your light through Home Assistant, you have to setup your bulb using Yeelight app. ( [Android](https://play.google.com/store/apps/details?id=com.yeelight.cherry&hl=fr), [IOS](https://itunes.apple.com/us/app/yeelight/id977125608?mt=8) ). In the bulb property, you have to enable "LAN Mode" (previously called "Developer mode"). LAN mode may only be available with the latest firmware installed on your bulb. Firmware can be updated in the application after connecting the bulb. -Determine your bulb IP (using router, software, ping ...) +Determine your bulb IP (using router, software, ping ...). +Information on how to enable "LAN Mode" can be found [here](https://getyeti.co/posts/how-to-control-yeelight-and-your-smarthome-with-yeti).

@@ -58,9 +59,22 @@ This component is tested to work with the following models. If you have a differ - **YLDP01YL**: LED Bulb (White) - **YLDP02YL**: LED Bulb (Color) - **YLDP03YL**: LED Bulb (Color) - E26 +- **YLDP06YL**: LED Bulb (Color) II +- **YLDD01YL**: Lightstrip (Color) - **YLDD02YL**: Lightstrip (Color) +- **MJCTD01YL**: Xiaomi Mijia Bedside Lamp - WIFI Version! +- **MJTD01YL**: Xiaomi Mijia Smart LED Desk Lamp (autodiscovery isn't possible because the device doesn't support mDNS due to the small amount of RAM) +- **YLXD02YL**: Yeelight Ceiling Light 4 (Jiaoyue 650) +- **YLXD01YL**: Yeelight Smart LED Ceiling Light - Youth Version +## {% linkable_title Platform Services %} +### {% linkable_title Service `light.yeelight_set_mode` %} +Set an operation mode. +| Service data attribute | Optional | Description | +|---------------------------|----------|---------------------------------------------------------------------------------------------| +| `entity_id` | yes | Only act on a specific yeelight. Else targets all. | +| `mode` | no | Operation mode. Valid values are 'last', 'normal', 'rgb', 'hsv', 'color_flow', 'moonlight'. | diff --git a/source/_components/light.yeelightsunflower.markdown b/source/_components/light.yeelightsunflower.markdown index 1b0e441970d..0583084626c 100644 --- a/source/_components/light.yeelightsunflower.markdown +++ b/source/_components/light.yeelightsunflower.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Yeelight Sunflower Bulb" -description: "Instructions how to setup Yeelight Sunflower hub and bulbs within Home Assistant." +description: "Instructions on how to setup Yeelight Sunflower hub and bulbs within Home Assistant." date: 2017-02-11 sidebar: true comments: false diff --git a/source/_components/light.zengge.markdown b/source/_components/light.zengge.markdown index ed15a92752a..b2f46b065d4 100644 --- a/source/_components/light.zengge.markdown +++ b/source/_components/light.zengge.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Zengge" -description: "Instructions how to integrate Zengge Bluetooth bulbs into Home Assistant." +description: "Instructions on how to integrate Zengge Bluetooth bulbs into Home Assistant." date: 2017-01-14 08:00 sidebar: true comments: false diff --git a/source/_components/light.zha.markdown b/source/_components/light.zha.markdown index c3b0cc2d8b7..904c1e59de8 100644 --- a/source/_components/light.zha.markdown +++ b/source/_components/light.zha.markdown @@ -1,7 +1,7 @@ --- layout: page title: "ZigBee Home Automation Light" -description: "Instructions how to setup ZigBee Home Automation lights within Home Assistant." +description: "Instructions on how to setup ZigBee Home Automation lights within Home Assistant." date: 2017-02-22 00:00 sidebar: true comments: false diff --git a/source/_components/light.zigbee.markdown b/source/_components/light.zigbee.markdown index 5730043d1eb..a7d8529551e 100644 --- a/source/_components/light.zigbee.markdown +++ b/source/_components/light.zigbee.markdown @@ -13,7 +13,7 @@ ha_release: 0.12 ha_iot_class: "Local Polling" --- -A ZigBee light in this context is a light connected to one of the digital output pins on a ZigBee module. It can simply be switched on and off. By default, a light is considered `on` when the ZigBee device's digital output is held `high` and considered `off` when it is held `low`. This behaviour can be inverted by setting the `on_state` configuration variable to `low`. +A ZigBee light in this context is a light connected to one of the digital output pins on a ZigBee module. It can simply be switched on and off. By default, a light is considered `on` when the ZigBee device's digital output is held `high` and considered `off` when it is held `low`. This behavior can be inverted by setting the `on_state` configuration variable to `low`. To configure a digital output pin as light, add the following to your `configuration.yaml` file: diff --git a/source/_components/light.zwave.markdown b/source/_components/light.zwave.markdown index 4053e61f1d3..891f63e8867 100644 --- a/source/_components/light.zwave.markdown +++ b/source/_components/light.zwave.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Z-Wave Light" -description: "Instructions how to setup the Z-Wave lights within Home Assistant." +description: "Instructions on how to setup the Z-Wave lights within Home Assistant." date: 2015-11-11 13:00 sidebar: true comments: false diff --git a/source/_components/lirc.markdown b/source/_components/lirc.markdown index ffe675ea0c4..ad96e2316b2 100644 --- a/source/_components/lirc.markdown +++ b/source/_components/lirc.markdown @@ -1,7 +1,7 @@ --- layout: page title: "LIRC" -description: "Instructions how to integrate IR remotes with LIRC into Home Assistant." +description: "Instructions on how to integrate IR remotes with LIRC into Home Assistant." date: 2016-05-22 19:59 sidebar: true comments: false @@ -14,9 +14,9 @@ ha_release: 0.21 ha_iot_class: "Local Push" --- -[LIRC](http://www.lirc.org/) integration for Home Assistant allows you to receive signals from an infrared remote control and control actions based on the buttons you press. You can use them to set scenes or trigger any other [automation](https://home-assistant.io/components/automation/). +[LIRC](http://www.lirc.org/) integration for Home Assistant allows you to receive signals from an infrared remote control and control actions based on the buttons you press. You can use them to set scenes or trigger any other [automation](/components/automation/). -Sending IR commands is not supported in this component (yet), but can be accomplished using the [shell_command component](https://home-assistant.io/components/shell_command/) in conjunction with the `irsend` command. +Sending IR commands is not supported in this component (yet), but can be accomplished using the [shell_command component](/components/shell_command/) in conjunction with the `irsend` command. ### {% linkable_title Installation %} @@ -32,16 +32,16 @@ The configuration is slightly different : - The `hardware.conf` file is not supported, obsoleted by a new `lirc_options.conf` file and systemd unit definitions. - The former single `lirc` service is replaced with the three systemd services `lircd.service`, `lircmd.service` and `irexec.service`. There is no counterpart to the 0.9.0 `lirc` service which covered all of these. Using a separate transmitter device requires yet another service. - - 0.9.4 defaults to using systemd for controlling the services. This is not just start/stop functionality, systemd is used to implement new features and to address shortcomings in 0.9.0. However, traditional systemV scripts are also installed and could be used although this is less tested and not really documented. - -For more infomation have a look at `/usr/share/doc/lirc/README.Debian.gz` where the update process is explained when you have updated from jessie to stretch. + - 0.9.4 defaults to using systemd for controlling the services. This is not just start/stop functionality, systemd is used to implement new features and to address shortcomings in 0.9.0. However, traditional systemV scripts are also installed and could be used although this is less tested and not really documented. + +For more information have a look at `/usr/share/doc/lirc/README.Debian.gz` where the update process is explained when you have updated from jessie to stretch.

### {% linkable_title Configuring LIRC %} -Now teach LIRC about your particular remote control by preparing a lircd configuration file (`/etc/lirc/lircd.conf`). Search the [LIRC remote database](http://lirc.sourceforge.net/remotes/) for your model. If you can't find it, then you can always use the `irrecord` program to learn your remote. This will create a valid configuration file. Add as many remotes as you want by pasting them into the file. If `irrecord` doesn't work (e.g. for some air conditioner remotes), then the `mode2` program is capable of reading the codes in raw mode, followed by `irrecord -a` to extract hex codes. +Now teach LIRC about your particular remote control by preparing a lircd configuration file (`/etc/lirc/lircd.conf`). Search the [LIRC remote database](http://lirc.sourceforge.net/remotes/) for your model. If you can't find it, then you can always use the `irrecord` program to learn your remote. This will create a valid configuration file. Add as many remotes as you want by pasting them into the file. If `irrecord` doesn't work (e.g., for some air conditioner remotes), then the `mode2` program is capable of reading the codes in raw mode, followed by `irrecord -a` to extract hex codes. -Next, you have to make a `~/.lircrc` file that maps keypresses to system actions. [The configuration](http://www.lirc.org/html/configure.html) is a bit tedious but it must be done. Use the `prog = home-assistant` for all keys you want to be recognized by Home Assistant. The values you set for `button` must be the same as in the `lircd.conf` file and the values you put for `config` entry will be the sensor value in Home Assistant when you press the button. An example may look like this: +Next, you have to make a `~/.lircrc` file that maps keypresses to system actions. The file has to be in the home dir of the user running Home Assistant, e.g. in `/home/homeassistant/.lircrc` if you're running in a virtual env. [The configuration](http://www.lirc.org/html/configure.html) is a bit tedious but it must be done. Use the `prog = home-assistant` for all keys you want to be recognized by Home Assistant. The values you set for `button` must be the same as in the `lircd.conf` file and the values you put for `config` entry will be the sensor value in Home Assistant when you press the button. An example may look like this: ```bash begin @@ -98,4 +98,4 @@ automation: entity_id: group.a_lights ``` -The `button_name` data values (e.g. `KEY_0`) are set by you in the `.lircrc` file. +The `button_name` data values (e.g., `KEY_0`) are set by you in the `.lircrc` file. diff --git a/source/_components/litejet.markdown b/source/_components/litejet.markdown index 3770bb024be..fb334089530 100644 --- a/source/_components/litejet.markdown +++ b/source/_components/litejet.markdown @@ -1,7 +1,7 @@ --- layout: page title: "LiteJet" -description: "Instructions how to setup the LiteJet hub within Home Assistant." +description: "Instructions on how to setup the LiteJet hub within Home Assistant." date: 2015-10-26 09:37 sidebar: true comments: false diff --git a/source/_components/lock.abode.markdown b/source/_components/lock.abode.markdown index c1e28603708..9dcc3cff907 100644 --- a/source/_components/lock.abode.markdown +++ b/source/_components/lock.abode.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Abode Lock" -description: "Instructions how to integrate Abode locks into Home Assistant." +description: "Instructions on how to integrate Abode locks into Home Assistant." date: 2017-08-26 13:28 sidebar: true comments: false diff --git a/source/_components/lock.august.markdown b/source/_components/lock.august.markdown new file mode 100644 index 00000000000..eda4f37d06e --- /dev/null +++ b/source/_components/lock.august.markdown @@ -0,0 +1,18 @@ +--- +layout: page +title: "August Lock" +description: "Instructions on how to integrate your August devices into Home Assistant." +date: 2018-02-17 22:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: august.png +ha_category: Lock +ha_release: "0.64" +ha_iot_class: "Cloud Polling" +--- + +The `august` lock platform allows you to control your [August](http://august.com) lock from within Home Assistant. + +To add `august` lock to your installation, follow instructions in [August component](/components/august/). diff --git a/source/_components/lock.bmw_connected_drive.markdown b/source/_components/lock.bmw_connected_drive.markdown new file mode 100755 index 00000000000..4c6c7a2edcf --- /dev/null +++ b/source/_components/lock.bmw_connected_drive.markdown @@ -0,0 +1,20 @@ +--- +layout: page +title: "BMW Connected Drive Lock" +description: "Instructions on how to setup your BMW Connected Drive account with Home Assistant." +date: 2018-02-22 23:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: bmw.png +ha_category: Lock +ha_release: 0.66 +--- + + +The `bmw_connected_drive` platform allows you to import data on your BMW into Home Assistant. + +The lock will be automatically configured if `bmw_connected_drive` component is configured. + +For more configuration information see the [`bmw_connected_drive` component](/components/bmw_connected_drive/) documentation. diff --git a/source/_components/lock.homematic.markdown b/source/_components/lock.homematic.markdown new file mode 100644 index 00000000000..d536312e2ea --- /dev/null +++ b/source/_components/lock.homematic.markdown @@ -0,0 +1,18 @@ +--- +layout: page +title: "Homematic Lock (KeyMatic)" +description: "Instructions how to integrate Homematic locks (KeyMatic) within Home Assistant." +date: 2018-01-28 03:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: homematic.png +ha_category: Lock +ha_release: 0.66 +ha_iot_class: "Local Push" +--- + +The `homematic` lock platform lets you observe and control the state of the HomeMatic [Homematic](http://www.homematic.com/) KeyMatic lock through Home Assistant. + +Devices will be configured automatically. Please refer to the [component](/components/homematic/) configuration on how to setup Homematic. diff --git a/source/_components/lock.isy994.markdown b/source/_components/lock.isy994.markdown index 04109b9cd6e..b019662a68c 100644 --- a/source/_components/lock.isy994.markdown +++ b/source/_components/lock.isy994.markdown @@ -1,7 +1,7 @@ --- layout: page title: "ISY994 Lock" -description: "Instructions how to integrate ISY994 locks into Home Assistant." +description: "Instructions on how to integrate ISY994 locks into Home Assistant." date: 2016-09-03 23:00 sidebar: true comments: false diff --git a/source/_components/lock.kiwi.markdown b/source/_components/lock.kiwi.markdown new file mode 100644 index 00000000000..08c3e9746b5 --- /dev/null +++ b/source/_components/lock.kiwi.markdown @@ -0,0 +1,39 @@ +--- +layout: page +title: "KIWI Lock" +description: "Instructions on how to integrate KIWI Smart Lock and Smart Entry." +date: 2018-05-16 13:37 +sidebar: true +comments: false +sharing: true +footer: true +logo: kiwi.png +ha_category: Lock +featured: false +ha_release: 0.72 +ha_iot_class: "Cloud Polling" +--- + +The `KIWI` platform allows you to open your KIWI Smart Locks and Smart Entry Devices. +All you need to get started is a KIWI account. Register at [the KIWI website](https://kiwi.ki/login/). + +## {% linkable_title Configuration %} + +```yaml +# Example configuration.yaml entry +lock: + - platform: kiwi + username: mail@example.com + password: mySecretPassword +``` + +{% configuration %} +username: + required: true + description: The username of your KIWI account. + type: string +password: + required: true + description: The password of your KIWI account. + type: string +{% endconfiguration %} diff --git a/source/_components/lock.lockitron.markdown b/source/_components/lock.lockitron.markdown index 418881c1693..6b320e71086 100644 --- a/source/_components/lock.lockitron.markdown +++ b/source/_components/lock.lockitron.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Lockitron Lock" -description: "Instructions how to integrate Lockitron locks into Home Assistant." +description: "Instructions on how to integrate Lockitron locks into Home Assistant." date: 2017-03-24 00:00 sidebar: true comments: false diff --git a/source/_components/lock.markdown b/source/_components/lock.markdown index c2c3cc55301..97cc4622020 100644 --- a/source/_components/lock.markdown +++ b/source/_components/lock.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Locks" -description: "Instructions how to setup your locks with Home Assistant." +description: "Instructions on how to setup your locks with Home Assistant." date: 2015-11-21 08:10 sidebar: true comments: false @@ -12,11 +12,11 @@ footer: true Keeps track which locks are in your environment, their state and allows you to control them. * Maintains a state per lock and a combined state `all_locks`. - * Registers services `lock/lock` and `lock/unlock` to control locks. + * Registers services `lock.lock` and `lock.unlock` to control locks. ### {% linkable_title Use the services %} -Go to the **Developer Tools**, then to **Call Service** in the frontend, and choose `lock/lock` or `lock/unlock` from the list of available services (**Available services:** on the left). Enter something like the sample below into the **Service Data** field and hit **CALL SERVICE**. +Go to the **Developer Tools**, then to **Call Service** in the frontend, and choose `lock.lock` or `lock.unlock` from the list of available services (**Services:** on the left). Enter something like the sample below into the **Service Data** field and hit **CALL SERVICE**. ```json {"entity_id":"lock.front_door"} diff --git a/source/_components/lock.mqtt.markdown b/source/_components/lock.mqtt.markdown index 6f91de7d133..ff8eb051702 100644 --- a/source/_components/lock.mqtt.markdown +++ b/source/_components/lock.mqtt.markdown @@ -1,7 +1,7 @@ --- layout: page title: "MQTT Lock" -description: "Instructions how to integrate MQTT locks into Home Assistant." +description: "Instructions on how to integrate MQTT locks into Home Assistant." date: 2016-02-28 15:00 sidebar: true comments: false @@ -24,23 +24,70 @@ Optimistic mode can be forced, even if state topic is available. Try to enable i To enable MQTT locks in your installation, add the following to your `configuration.yaml` file: ```yaml -# Example configuration.yml entry +# Example configuration.yaml entry lock: - platform: mqtt command_topic: "home/frontdoor/set" ``` -Configuration variables: - -- **command_topic** (*Required*): The MQTT topic to publish commands to change the lock state. -- **name** (*Optional*): The name of the lock. Default is 'MQTT Lock'. -- **state_topic** (*Optional*): The MQTT topic subscribed to receive state updates. -- **payload_lock** (*Optional*): The payload that represents enabled/locked state. Default is "LOCK". -- **payload_unlock** (*Optional*): The payload that represents disabled/unlocked state. Default is "UNLOCK". -- **optimistic** (*Optional*): Flag that defines if lock works in optimistic mode. Default is `true` if no `state_topic` defined, else `false`. -- **qos** (*Optional*): The maximum QoS level of the state topic. Default is 0 and will also be used to publishing messages. -- **retain** (*Optional*): If the published message should have the retain flag on or not. -- **value_template** (*Optional*): Defines a [template](/docs/configuration/templating/#processing-incoming-data) to extract a value from the payload. +{% configuration %} +name: + description: The name of the lock. + required: false + type: string + default: MQTT Lock +command_topic: + description: The MQTT topic to publish commands to change the lock state. + required: true + type: string +state_topic: + description: The MQTT topic subscribed to receive state updates. + required: false + type: string +payload_lock: + description: The payload that represents enabled/locked state. + required: false + type: string + default: LOCK +payload_unlock: + description: The payload that represents disabled/unlocked state. + required: false + type: string + default: UNLOCK +optimistic: + description: Flag that defines if lock works in optimistic mode. + required: false + type: string + default: "`true` if no `state_topic` defined, else `false`." +qos: + description: The maximum QoS level of the state topic. + required: false + type: integer + default: 0 +retain: + description: If the published message should have the retain flag on or not. + required: false + type: boolean + default: false +value_template: + description: "Defines a [template](/docs/configuration/templating/#processing-incoming-data) to extract a value from the payload." + required: false + type: string +availability_topic: + description: The MQTT topic subscribed to receive availability (online/offline) updates. + required: false + type: string +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 +{% endconfiguration %}

Make sure that your topics match exactly. `some-topic/` and `some-topic` are different topics. @@ -58,7 +105,7 @@ The example below shows a full configuration for a MQTT lock. # Example configuration.yml entry lock: - platform: mqtt - name: Frontdoor + name: Frontdoor state_topic: "home-assistant/frontdoor/" command_topic: "home-assistant/frontdoor/set" payload_lock: "LOCK" @@ -69,7 +116,7 @@ lock: value_template: '{% raw %}{{ value.x }}{% endraw %}' ``` -Keep an eye on retaining messages to keep the state as you don't want to unlock your door by accident when you restart something. +Keep an eye on retaining messages to keep the state as you don't want to unlock your door by accident when you restart something. For a check you can use the command line tools `mosquitto_pub` shipped with `mosquitto` to send MQTT messages. This allows you to operate your lock manually: diff --git a/source/_components/lock.nello.markdown b/source/_components/lock.nello.markdown index 53f2e26e79b..558f9098b96 100644 --- a/source/_components/lock.nello.markdown +++ b/source/_components/lock.nello.markdown @@ -16,6 +16,7 @@ ha_iot_class: "Cloud Polling" --- The `nello` platform allows you to control [Nello](https://nello.io) intercoms. + To get started you need to create a secondary Nello account and authorize it to access your lock(s).

@@ -24,18 +25,26 @@ Be aware that if you use your main account for Home Assistant you may not be abl ## {% linkable_title Configuration %} +To add your Nello locks to your installation, add the following to your `configuration.yaml` file: + ```yaml # Example configuration.yaml entry lock: - platform: nello - username: mail@example.com - password: mySecretPassword + username: YOUR_USERNAME + password: YOUR_PASSWORD ``` -Configuration variables: - -- **username** (*Required*): The username of your Nello account. -- **password** (*Required*): The password of your Nello account. +{% configuration %} +username: + description: The username of your Nello account. + required: true + type: string +password: + description: The password of your Nello account. + required: true + type: string +{% endconfiguration %} ## {% linkable_title Events %} diff --git a/source/_components/lock.sesame.markdown b/source/_components/lock.sesame.markdown index 121d337cefb..affd029f63a 100644 --- a/source/_components/lock.sesame.markdown +++ b/source/_components/lock.sesame.markdown @@ -15,18 +15,28 @@ ha_release: "0.47" The `sesame` platform allows you to control your [Sesame](https://candyhouse.co/) smart locks made by CANDY HOUSE, Inc. +## {% linkable_title Configuration %} + Your Sesame needs to be paired with a mobile device running the app in *virtual station* mode, or a standalone [Wi-Fi Access Point](https://candyhouse.co/collections/frontpage/products/wi-fi-access-point). -Once you have remote access enabled, add the following to your `configuration.yaml` file: +Once you have remote access enabled using one of the above AND the Integration - cloud option enabled on the Sesame app for that lock settings, add the following to your `configuration.yaml` file: + ```yaml # Example configuration.yaml entry lock: - platform: sesame - email: abc@i-lovecandyhouse.co - password: super-strong-password + email: YOUR_E_MAIL_ADDRESS + password: YOUR_PASSWORD ``` -Configuration variables: +{% configuration %} +email: + description: The email address for your Sesame account. + required: true + type: string +password: + description: The password for your Sesame account. + required: true + type: string +{% endconfiguration %} -- **email** (*Required*): The email address for your Sesame account. -- **password** (*Required*): The password for your Sesame account. diff --git a/source/_components/lock.vera.markdown b/source/_components/lock.vera.markdown index 8baf864dfd3..a3050389878 100644 --- a/source/_components/lock.vera.markdown +++ b/source/_components/lock.vera.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Vera Lock" -description: "Instructions how to integrate Vera locks into Home Assistant." +description: "Instructions on how to integrate Vera locks into Home Assistant." date: 2016-06-29 15:00 sidebar: true comments: false diff --git a/source/_components/lock.verisure.markdown b/source/_components/lock.verisure.markdown index 2e726771795..e3c2d31e850 100644 --- a/source/_components/lock.verisure.markdown +++ b/source/_components/lock.verisure.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Verisure Lock" -description: "Instructions how to setup the Verisure locks within Home Assistant." +description: "Instructions on how to setup the Verisure locks within Home Assistant." date: 2016-02-12 06:00 sidebar: true comments: false diff --git a/source/_components/lock.wink.markdown b/source/_components/lock.wink.markdown index 1f51751b3f4..38b37fe9ea0 100644 --- a/source/_components/lock.wink.markdown +++ b/source/_components/lock.wink.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Wink Lock" -description: "Instructions how to setup the Wink locks within Home Assistant." +description: "Instructions on how to setup the Wink locks within Home Assistant." date: 2015-11-20 12:00 sidebar: true comments: false @@ -13,13 +13,11 @@ ha_release: 0.9 ha_iot_class: "Cloud Polling" --- - The Wink lock platform allows you to control your [Wink](http://www.wink.com/) locks. The requirement is that you have setup [Wink](/components/wink/). - -### Supported lock devices +### {% linkable_title Supported lock devices %} - Kwikset - Schlage @@ -56,7 +54,7 @@ You can use the service wink/wink_set_lock_alarm_sensitivity to set the alarm se | Service data attribute | Optional | Description | | ---------------------- | -------- | ----------- | -| `sensitivity` | no | String one of low, medium_low, medium, medium_high, high +| `sensitivity` | no | String one of low, medium_low, medium, medium_high, high. | `entity_id` | yes | String or list of strings that point at `entity_id`s of locks. Example: @@ -140,7 +138,6 @@ You can use the service wink/wink_add_new_lock_key_code to add a new user code t | `name` | no | the name of the new key code | `code` | no | The new code. Must match length of existing codes. -

Calling service wink/pull_newly_added_wink_devices will add the new key code to Home Assistant. The device will also show up on the next restart of Home Assistant.

diff --git a/source/_components/lock.xiaomi_aqara.markdown b/source/_components/lock.xiaomi_aqara.markdown new file mode 100644 index 00000000000..501e4899537 --- /dev/null +++ b/source/_components/lock.xiaomi_aqara.markdown @@ -0,0 +1,24 @@ +--- +layout: page +title: "Xiaomi Aqara Lock" +description: "Instructions on how to setup the Xiaomi Aqara Lock within Home Assistant." +date: 2018-05-17 20:24 +sidebar: true +comments: false +sharing: true +footer: true +logo: xiaomi.png +ha_category: Lock +ha_release: "0.71" +ha_iot_class: "Local Push" +--- + + +The `xiaomi aqara` lock platform allows you to get data (`changed_by` property, `verified_wrong_times` attribute) from your [Xiaomi](http://www.mi.com/en/) Aqara locks. +A Aqara lock cannot be controlled by Home Assistant. The property `changed_by` provides the user/key ID of the last successful unlock. + +If someone tries to unlock the device but fails more than 3 times the `verified_wrong_times` attribute will be incremented. The counter resets on a successful unlock. + +The requirement to use this platform is that you have set up the [Xiaomi Aqara](/components/xiaomi_aqara/) component. + + diff --git a/source/_components/lock.zwave.markdown b/source/_components/lock.zwave.markdown index e1d6fd7b33d..ba25eacd6c0 100644 --- a/source/_components/lock.zwave.markdown +++ b/source/_components/lock.zwave.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Z-Wave Lock" -description: "Instructions how to setup the Z-Wave Locks within Home Assistant." +description: "Instructions on how to setup the Z-Wave Locks within Home Assistant." date: 2016-05-07 08:00 sidebar: true comments: false diff --git a/source/_components/logbook.markdown b/source/_components/logbook.markdown index 74e493fc9bf..438e7474306 100644 --- a/source/_components/logbook.markdown +++ b/source/_components/logbook.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Logbook" -description: "Instructions how to enable the logbook component for Home Assistant." +description: "Instructions on how to enable the logbook component for Home Assistant." date: 2015-04-25 9:23 sidebar: true comments: false @@ -11,7 +11,7 @@ logo: logbook.png ha_category: "History" --- - The logbook component provides a different perspective on the history of your house by showing all the changes that happened to your house in reverse chronological order. [See the demo for a live example](/demo/). It depends on the `recorder` component for storing the data. This means that if the [`recorder`](/components/recorder/) component is set up to use e.g. MySQL or PostgreSQL as data store, the `logbook` component does not use the default SQLite database to store data. + The logbook component provides a different perspective on the history of your house by showing all the changes that happened to your house in reverse chronological order. [See the demo for a live example](/demo/). It depends on the `recorder` component for storing the data. This means that if the [`recorder`](/components/recorder/) component is set up to use e.g., MySQL or PostgreSQL as data store, the `logbook` component does not use the default SQLite database to store data. To enable the logbook in your installation, add the following to your `configuration.yaml` file: @@ -26,8 +26,8 @@ Configuration variables: - **entities** (*Optional*): The list of entity ids to be excluded from creating logbook entries. - **domains** (*Optional*): The list of domains to be excluded from creating logbook entries. - **include** (*Optional*): Configure which components should create logbook entries. - - **entities** (*Optional*): The list of entity ids to be included from creating logbook entries. - - **domains** (*Optional*): The list of domains to be included from creating logbook entries. + - **entities** (*Optional*): The list of entity ids to be included in creating logbook entries. + - **domains** (*Optional*): The list of domains to be included in creating logbook entries. If you want to exclude messages of some entities or domains from the logbook just add the `exclude` parameter like: @@ -73,7 +73,7 @@ logbook: ### {% linkable_title Exclude Events %} -Entities customized as hidden are excluded from the logbook by default, but sometimes you want to show the entity in the UI and not in the logbook. For instance you use the `sensor.date`to show the current date in the UI, but you do not want an logbook entry for that sensor every day. +Entities customized as hidden are excluded from the logbook by default, but sometimes you want to show the entity in the UI and not in the logbook. For instance you use the `sensor.date`to show the current date in the UI, but you do not want a logbook entry for that sensor every day. To exclude these entities just add them to the `exclude` > `entities` list in the configuration of the logbook. To exclude all events from a whole domain add it to the `exclude` > `domain` list. For instance you use the `sun` domain only to trigger automations on the `azimuth attribute, then you possible are not interested in the logbook entries for sun rise and sun set. diff --git a/source/_components/logentries.markdown b/source/_components/logentries.markdown index e14b908b871..b365e57f63d 100644 --- a/source/_components/logentries.markdown +++ b/source/_components/logentries.markdown @@ -11,7 +11,9 @@ footer: true ha_category: "History" --- -The `logentries` component makes it possible to log all state changes to [your Logentries account](http://logentries.com/) using Logentries Webhook endpoint and a token based log +The `logentries` component makes it possible to log all state changes to [Logentries](http://logentries.com/) using Logentries Webhook endpoint. + +Open the **Add a Log** page and choose **Manual**. Enter a name for your log in **Log Name**, add a group in **Select Log Set**, set **Token TCP - logs are identified by a token.** and press **Create Log Token**. The generated token is required for the Home Assistant configuration. To use the `logentries` component in your installation, add the following to your `configuration.yaml` file: @@ -21,6 +23,10 @@ logentries: token: TOKEN ``` -Configuration variables: +{% configuration %} +token: + description: The token for the log to use. + required: true + type: string +{% endconfiguration %} -- **token** (*Required*): Your Logentries log token. diff --git a/source/_components/logger.markdown b/source/_components/logger.markdown index 70168cf440b..d3cef23a013 100644 --- a/source/_components/logger.markdown +++ b/source/_components/logger.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Logger" -description: "Instructions how to enable the logger component for Home Assistant." +description: "Instructions on how to enable the logger component for Home Assistant." date: 2015-11-12 17:00 sidebar: true comments: false @@ -11,15 +11,16 @@ logo: home-assistant.png ha_category: "Utility" --- -The logger component lets you define the level of logging activities in Home Assistant. +The `logger` component lets you define the level of logging activities in Home Assistant. -To enable the logger in your installation, add the following to your `configuration.yaml` file: +To enable the `logger` component in your installation, add the following to your `configuration.yaml` file: -To have a full log and log everything only this entry is needed (without any qualifier): ```yaml +# Example configuration.yaml entry logger: ``` -To log all messages and ignore events lower than critical for specified components. + +To log all messages and ignore events lower than critical for specified components: ```yaml # Example configuration.yaml entry @@ -30,7 +31,7 @@ logger: homeassistant.components.camera: critical ``` -To ignore all messages lower than critical and log event for specified components. +To ignore all messages lower than critical and log event for specified components: ```yaml # Example configuration.yaml entry @@ -43,7 +44,25 @@ logger: homeassistant.components.camera: critical ``` -Possible log severities are: +{% configuration %} + default: + description: Default log level. + required: false + type: '[log_level](#log-levels)' + default: debug + logs: + description: List of components and their log level. + required: false + type: map + keys: + '<component_namespace>': + description: Logger namespace of the component. + type: '[log_level](#log-levels)' +{% endconfiguration %} + +### {% linkable_title Log Levels %} + +Possible log severity levels are: - critical - fatal @@ -53,11 +72,26 @@ Possible log severities are: - info - debug - notset - + +## {% linkable_title Services %} + +### {% linkable_title Service `set_default_level` %} + +You can alter the default log level (for components without a specified log +level) using the service `logger.set_default_level`. + +An example call might look like this: + +```yaml +service: logger.set_default_level +data: + level: info +``` + ### {% linkable_title Service `set_level` %} You can alter log level for one or several components using the service -``logger.set_level``. It accepts the same format as ``logs`` in the configuration. +`logger.set_level`. It accepts the same format as `logs` in the configuration. An example call might look like this: @@ -68,7 +102,9 @@ data: homeassistant.components.media_player.yamaha: debug ``` -The log information are stored in the [configuration directory](/docs/configuration/) as `home-assistant.log` and you can read it with the command-line tool `cat` or follow it dynamically with `tail -f`. +The log information are stored in the [configuration directory](/docs/configuration/) +as `home-assistant.log` and you can read it with the command-line tool `cat` or +follow it dynamically with `tail -f`. If you are a Hassbian user you can use the example below: @@ -76,7 +112,8 @@ If you are a Hassbian user you can use the example below: $ tail -f /home/homeassistant/.homeassistant/home-assistant.log ``` -If you are a Hass.io user you can use the example below, whenlogged in through the ssh addon: +If you are a Hass.io user, you can use the example below, when logged in through +the [SSH add-on](/addons/ssh/): ```bash $ tail -f /config/home-assistant.log diff --git a/source/_components/lutron.markdown b/source/_components/lutron.markdown index c946160db1e..6799e1feb55 100644 --- a/source/_components/lutron.markdown +++ b/source/_components/lutron.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Lutron" -description: "Instructions how to use Lutron devices with Home Assistant." +description: "Instructions on how to use Lutron devices with Home Assistant." date: 2017-01-28 13:00 sidebar: true comments: false @@ -18,6 +18,8 @@ ha_iot_class: "Local Polling" Presently, there's only support for communicating with the [RadioRA 2](http://www.lutron.com/en-US/Products/Pages/WholeHomeSystems/RadioRA2/Overview.aspx) Main Repeater and only handle light switches and dimmers. +## {% linkable_title Configuration %} + When configured, the `lutron` component will automatically discover the rooms and their associated switches/dimmers as configured by the RadioRA 2 software from Lutron. Each room will be treated as a separate group. To use Lutron RadioRA 2 devices in your installation, add the following to your `configuration.yaml` file using the IP address of your RadioRA 2 main repeater: diff --git a/source/_components/lutron_caseta.markdown b/source/_components/lutron_caseta.markdown index 912bd82dc41..9783766c89d 100644 --- a/source/_components/lutron_caseta.markdown +++ b/source/_components/lutron_caseta.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Lutron Caseta" -description: "Instructions how to use Lutron Caseta devices with Home Assistant." +description: "Instructions on how to use Lutron Caseta devices with Home Assistant." date: 2017-01-28 13:00 sidebar: true comments: false @@ -25,7 +25,7 @@ The currently supported Caseta devices are: - Scenes as Home Assistant [scenes](/components/scene.lutron_caseta/) - Lutron shades as Home Assistant [covers](/components/cover.lutron_caseta/) -When configured, the `lutron_caseta` component will automatically discover the currently supported devices as setup in the Lutron Smart Bridge. The name assigned in the Lutron mobile app will be used to form the `entity_id` used in Home Assistant. e.g. a dimmer called 'Bedroom Lamp' becomes `light.bedroom_lamp` in Home Assistant. +When configured, the `lutron_caseta` component will automatically discover the currently supported devices as setup in the Lutron Smart Bridge. The name assigned in the Lutron mobile app will be used to form the `entity_id` used in Home Assistant. e.g., a dimmer called 'Bedroom Lamp' becomes `light.bedroom_lamp` in Home Assistant. To use Lutron Caseta devices in your installation, you must first log in to your Lutron account and generate a certificate that allows Home Assistant to connect to your bridge. This can be accomplished by downloading and executing [this script](/assets/get_lutron_cert.zip), which will generate three files: caseta.key, caseta.crt, caseta-bridge.crt when you run it. See the instructions at the top of the script for more information. diff --git a/source/_components/mailbox.asterisk_mbox.markdown b/source/_components/mailbox.asterisk_mbox.markdown index 25a0859aa92..07e50d287c1 100644 --- a/source/_components/mailbox.asterisk_mbox.markdown +++ b/source/_components/mailbox.asterisk_mbox.markdown @@ -1,15 +1,15 @@ --- layout: page title: "Asterisk Voicemail Mailbox" -description: "Instructions how to integrate an Asterisk Voicemail within Home Assistant." +description: "Instructions on how to integrate an Asterisk Voicemail within Home Assistant." date: 2017-06-30 18:30 sidebar: true comments: false sharing: true footer: true +logo: asterisk.png ha_category: Mailbox -ha_version: 0.51 +ha_release: 0.51 --- -The Asterisk Voicemail Mailbox provides visual and audio access to voicemail on the Asterisk PBX server. This mailbox is enabled automatically through the [Asterisk Voicemail component](/components/asterisk_mbox) configuration. - +The Asterisk Voicemail Mailbox provides visual and audio access to voicemail on the Asterisk PBX server. This mailbox is enabled automatically through the [Asterisk Voicemail component](/components/asterisk_mbox/) configuration. diff --git a/source/_components/mailbox.markdown b/source/_components/mailbox.markdown index 88ff203523f..c6d270fdad9 100644 --- a/source/_components/mailbox.markdown +++ b/source/_components/mailbox.markdown @@ -1,18 +1,17 @@ --- layout: page title: "Mailbox" -description: "Instructions how to setup your mailboxes with Home Assistant." +description: "Instructions on how to setup your mailboxes with Home Assistant." date: 2017-06-30 18:30 sidebar: true comments: false sharing: true -ha_version: 0.51 footer: true +ha_release: 0.51 --- -Mailboxes provide an list of messages with short information about each. Mailbox messages appear on a separate panel in the frontend. +Mailboxes provide a list of messages with short information about each. Mailbox messages appear on a separate panel in the frontend. Home Assistant currently supports only the [Asterisk Voicemail](/component/mailbox.asterisk_mbox) mailbox. Each mailbox also provides an entity to indicate the number of messages available on the main page. - diff --git a/source/_components/mailgun.markdown b/source/_components/mailgun.markdown index 835464dfd06..2f13d2c0625 100644 --- a/source/_components/mailgun.markdown +++ b/source/_components/mailgun.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Mailgun" -description: "Instructions how to add Mailgun mail notifications to Home Assistant." +description: "Instructions on how to add Mailgun mail notifications to Home Assistant." date: 2017-02-06 16:52 sidebar: true comments: false @@ -12,7 +12,7 @@ ha_category: Notifications ha_release: 0.38 --- -The component supports push messages and generates events based on inbound data. To use, add a Route set to Store and Notify with a URL of the following form: `https:///api/mailgun?api_password=` +The component supports push messages and generates events based on inbound data. To use, add a Route set to Store and Notify with a URL of the following form: `https:///api/mailgun?api_password=` To send messages, use the [Mailgun notify platform][notify]. @@ -25,11 +25,10 @@ To send messages, use the [Mailgun notify platform][notify]. mailgun: domain: mg.example.com api_key: token-XXXXXXXXX - sandbox: False ``` Configuration variables: -- **domain** (*Optional*): This is the domain name to be used when sending out mail. Defaults to the first custom domain you have set up. -- **sandbox** (*Optional*): Whether to use the sandboxed domain for outgoing mail. The `domain` item takes precedence over this. Defaults to `False`. +- **domain** (*Required*): This is the domain name to be used when sending out mail. Defaults to the first custom domain you have set up. - **api_key** (*Required*): This is the API token that has been generated in your Mailgun account. +- **sandbox** (*Optional*): Whether to use the sandboxed domain for outgoing mail. The `domain` item takes precedence over this. Defaults to `False`. diff --git a/source/_components/matrix.markdown b/source/_components/matrix.markdown new file mode 100644 index 00000000000..75bd6da0e6a --- /dev/null +++ b/source/_components/matrix.markdown @@ -0,0 +1,136 @@ +--- +layout: page +title: "Matrix" +description: "Matrix chatbot support" +date: 2018-03-25 18:50 +sidebar: true +comments: false +sharing: true +footer: true +logo: matrix.png +ha_category: Hub +ha_release: 0.69 +--- + +This component allows you to send messages to matrix rooms, as well as to react to messages in matrix rooms. Reacting to commands is accomplished by firing an event when one of the configured commands is triggered. + +```yaml +# Example configuration.yaml entry +matrix: + homeserver: https://matrix.org + username: "@my_matrix_user:matrix.org" + password: supersecurepassword + rooms: + - "#hasstest:matrix.org" + commands: + - word: my_command + name: my_command +``` + +Configuration variables: + +{% configuration %} +username: + description: "The matrix username that Home Assistant should use to log in. *Note*: You must specify a full matrix ID here, including the homeserver domain, e.g. '@my_matrix_bot:matrix.org'. Please note also that the '@' character has a special meaning in YAML, so this must always be given in quotes." + required: true + type: string +password: + description: The password for your Matrix account. + required: true + type: string +homeserver: + description: "The full URL for your homeserver. If you use the default matrix.org homeserver, this is 'https://matrix.org'." + required: true + type: string +verify_ssl: + description: Verify the homeservers certificate. + required: false + type: string + default: true +rooms: + description: "The list of rooms that the bot should join and listen for commands (see below) in. While you can limit the list of rooms that a certain command applies to on a per-command basis (see below), you must still list all rooms here that commands should be received in. Rooms can be given either by their internal ID (e.g., '!cURbafjkfsMDVwdRDQ:matrix.org') or any of their aliases (e.g., '#matrix:matrix.org')." + required: false + type: [string] + default: empty +commands: + description: "A list of commands that the bot should listen for. If a command is triggered (via its *word* or *expression*, see below), an event is fired that you can handle using automations. Every command consists of these possible configuration options:" + required: false + type: map + default: empty + keys: + word: + description: "Specifies a word that the bot should listen for. If you specify 'my_command' here, the bot will react to any message starting with '!my_command'." + required: false + type: string + expression: + description: "Specifies a regular expression (in python regexp syntax) that the bot should listen to. The bot will react to any message that matches the regular expression." + required: false + type: string + name: + description: "The name of the command. This will be an attribute of the event that is fired when this command triggers." + required: true + type: string + rooms: + description: "A list of rooms that the bot should listen for this command in. If this is not given, the *rooms* list from the main config is used. Please note that every room in this list must also be in the main *room* config." + required: false + type: [string] + default: empty +{% endconfiguration %} + +### {% linkable_title Event Data %} + +If a command is triggered, a `matrix_command` event is fired. The event contains the name of the command in the `name` field. + +If the command is a word command, the `data` field contains a list of the command's arguments, i.e., everything that stood behind the word, split at spaces. If the command is an expression command, the `data` field contains the [group dictionary](https://docs.python.org/3.6/library/re.html?highlight=re#re.match.groupdict) of the regular expression that matched the message. + +### {% linkable_title Comprehensive Configuration Example %} + +This example also uses the [matrix `notify` platform](/components/notify.matrix/). + +```yaml +# The Matrix component +matrix: + homeserver: https://matrix.org + username: "@my_matrix_user:matrix.org" + password: supersecurepassword + rooms: + - "#hasstest:matrix.org" + - "#someothertest:matrix.org" + commands: + - word: testword + rooms: + - "#someothertest:matrix.org" + - expression: "My name is (?P.*)" + name: introduction + +notify: + - name: matrix_notify + platform: matrix + default_room: "#hasstest:matrix.org" + +automation: + - alias: 'React to !testword' + trigger: + platform: event + event_type: matrix_command + event_data: + command: testword + action: + service: notify.matrix_notify + data: + message: 'It looks like you wrote !testword' + - alias: 'React to an introduction' + trigger: + platform: event + event_type: matrix_command + event_data: + command: introduction + action: + service: notify.matrix_notify + data_template: + message: "Hello {{trigger.event.data.name}}" +``` + +This configuration will: +- Listen for "!testword" in the room "#someothertest:matrix.org" (and *only*) there. If such a message is encountered, it will answer with "It looks like you wrote !testword" into the "#hasstest:matrix.org" channel. +- Listen in both rooms for any message matching "My name is " and answer with "Hello " into "#hasstest:matrix.org". diff --git a/source/_components/maxcube.markdown b/source/_components/maxcube.markdown index c26cbe114bc..7439d2d19fe 100644 --- a/source/_components/maxcube.markdown +++ b/source/_components/maxcube.markdown @@ -25,13 +25,42 @@ Supported Devices: - MAX! Window Sensor (tested) - MAX! Wall Thermostat (tested) +### {% linkable_title One Gateway %} + A `maxcube` section must be present in the `configuration.yaml` file and contain the following options as required: ```yaml # Example configuration.yaml entry maxcube: - host: 192.168.0.20 + gateways: + - host: 192.168.0.20 ``` -Configuration variables: -- **host** (*Required*): The IP address of the eQ-3 MAX! Cube to use. -- **port** (*Optional*): The UDP port number. Defaults to `62910`. + +### {% linkable_title Multiple Gateways %} + +```yaml +# Example configuration.yaml entry +maxcube: + gateways: + - host: 192.168.0.20 + port: 62910 + - host: 192.168.0.21 + port: 62910 +``` + +{% configuration %} + host: + description: The IP address of the eQ-3 MAX! Cube to use. + required: true + type: string + port: + description: The UDP port number. + required: false + type: int + default: 62910 + scan_interval: + description: The update interval in seconds + required: false + type: int + default: 300 +{% endconfiguration %} diff --git a/source/_components/media_extractor.markdown b/source/_components/media_extractor.markdown index 114d70f3fe7..8386b0390a3 100644 --- a/source/_components/media_extractor.markdown +++ b/source/_components/media_extractor.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Media Extractor" -description: "Instructions how to integrate the Media Extractor into Home Assistant." +description: "Instructions on how to integrate the Media Extractor into Home Assistant." date: 2017-07-12 07:00 sidebar: true comments: false diff --git a/source/_components/media_player.anthemav.markdown b/source/_components/media_player.anthemav.markdown index 945fdc0c648..8e59296db99 100644 --- a/source/_components/media_player.anthemav.markdown +++ b/source/_components/media_player.anthemav.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Anthem A/V Receivers" -description: "Instructions how to integrate Anthem A/V Receivers into Home Assistant." +description: "Instructions on how to integrate Anthem A/V Receivers into Home Assistant." date: 2016-12-31 23:11 sidebar: true comments: false diff --git a/source/_components/media_player.apple_tv.markdown b/source/_components/media_player.apple_tv.markdown index 383afdae981..7b163077602 100644 --- a/source/_components/media_player.apple_tv.markdown +++ b/source/_components/media_player.apple_tv.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Apple TV Media Player" -description: "Instructions how to integrate Apple TV devices into Home Assistant." +description: "Instructions on how to integrate Apple TV devices into Home Assistant." date: 2017-02-08 07:11 sidebar: true comments: false diff --git a/source/_components/media_player.aquostv.markdown b/source/_components/media_player.aquostv.markdown index c9d7d2124d3..0e3dbcba7e0 100644 --- a/source/_components/media_player.aquostv.markdown +++ b/source/_components/media_player.aquostv.markdown @@ -53,5 +53,6 @@ Currently known supported models: - LC-60LE925UN - LC-60LE857U - LC-60EQ10U +- LC-60SQ15U If your model is not on the list then give it a test, if everything works correctly then add it to the list on [GitHub](https://github.com/home-assistant/home-assistant.github.io/tree/current/source/_components/media_player.aquostv.markdown). diff --git a/source/_components/media_player.blackbird.markdown b/source/_components/media_player.blackbird.markdown new file mode 100644 index 00000000000..fbd5fb20edc --- /dev/null +++ b/source/_components/media_player.blackbird.markdown @@ -0,0 +1,65 @@ +--- +layout: page +title: "Blackbird 8x8 HDMI Matrix Switch" +description: "Instructions on how to integrate Monoprice Blackbird 4k 8x8 HDBaseT Matrix Switch into Home Assistant." +date: 2018-03-29 16:35 +sidebar: true +comments: false +sharing: true +footer: true +logo: monoprice.svg +ha_category: Media Player +ha_release: 0.68 +ha_iot_class: "Local Polling" +--- + +The `blackbird` platform allows you to control [Monoprice Blackbird Matrix Switch](https://www.monoprice.com/product?p_id=21819) using a serial connection. + +To add a Blackbird device to your installation, add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +media_player: + - platform: blackbird + port: /dev/ttyUSB0 + zones: + 1: + name: Living Room + sources: + 3: + name: BluRay +``` + +{% configuration %} +port: + description: The serial port to which Blackbird matrix switch is connected. [`port`](#port) and [`host`](#host) cannot be specified concurrently. + required: exclusive + type: string +host: + description: The IP address of the Blackbird matrix switch. [`port`](#port) and [`host`](#host) cannot be specified concurrently. + required: exclusive + type: string +zones: + description: This is the list of zones available. Valid zones are 1, 2, 3, 4, 5, 6, 7, 8. Each zone must have a name assigned to it. + required: true + type: int + keys: + name: + description: The name of the zone. +sources: + description: The list of sources available. Valid source numbers are 1, 2, 3, 4, 5, 6, 7, 8. Each source number corresponds to the input number on the Blackbird matrix switch. Similar to zones, each source must have a name assigned to it. + required: true + type: int + keys: + name: + description: The name of the source. +{% endconfiguration %} + +### {% linkable_title Service `media_player.blackbird_set_all_zones` %} + +Set all zones to the same input source. This service allows you to immediately synchronize all the TVs in your home. Regardless of `entity_id` provided, all zones will be updated. + +| Service data attribute | Optional | Description | +| ---------------------- | -------- | ----------- | +| `entity_id` | yes | String that points at an `entity_id` of a zone. +| `source` | no | String of source name to activate. diff --git a/source/_components/media_player.bluesound.markdown b/source/_components/media_player.bluesound.markdown index f711cbe8971..69372c8c332 100644 --- a/source/_components/media_player.bluesound.markdown +++ b/source/_components/media_player.bluesound.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Bluesound" -description: "Instructions how to integrate Bluesound devices into Home Assistant." +description: "Instructions on how to integrate Bluesound devices into Home Assistant." date: 2017-04-21 19:00 sidebar: true comments: false @@ -46,3 +46,37 @@ media_player: port: 11000 - host: 192.168.1.131 ``` + +### {% linkable_title Service `bluesound_join` %} + +Group players together under a single master speaker. That will make a new group or join to exists group. + +| Service data attribute | Optional | Description | +| ---------------------- | -------- | ----------- | +| `master` | no | A single `entity_id` that will become/hold the master speaker. +| `entity_id` | no | String or list of a single `entity_id` that will group to master speaker. + +### {% linkable_title Service `bluesound_unjoin` %} + +Remove one or more speakers from a group of speakers. If no `entity_id` is provided, all speakers are unjoined. + +| Service data attribute | Optional | Description | +| ---------------------- | -------- | ----------- | +| `entity_id` | yes | String or list of `entity_id`s that will be separated from their master speaker. + +### {% linkable_title Service `bluesound_set_sleep_timer` %} + +Sets a timer that will turn off the speaker. For each time you call this it will increase the time by one step. The steps are (in minutes): 15, 30, 45, 60, 90, 0. +If you increase an ongoing timer of for example 13 minutes, it will increase it to 15. If the timer is set to 90, it will remove the time (hence the 0). + +| Service data attribute | Optional | Description | +| ---------------------- | -------- | ----------- | +| `entity_id` | no | String or list of `entity_id`s that will have their timers set. + +### {% linkable_title Service `bluesound_clear_sleep_timer` %} + +Clear the sleep timer on a speaker, if one is set. + +| Service data attribute | Optional | Description | +| ---------------------- | -------- | ----------- | +| `entity_id` | no | String or list of `entity_id`s that will have their timers cleared. diff --git a/source/_components/media_player.cast.markdown b/source/_components/media_player.cast.markdown deleted file mode 100644 index 52d0e1d39c0..00000000000 --- a/source/_components/media_player.cast.markdown +++ /dev/null @@ -1,31 +0,0 @@ ---- -layout: page -title: "Google Cast" -description: "Instructions how to integrate Google Cast into Home Assistant." -date: 2015-03-23 19:59 -sidebar: true -comments: false -sharing: true -footer: true -logo: google_cast.png -ha_category: Media Player -featured: true -ha_release: pre 0.7 -ha_iot_class: "Local Polling" ---- - - -Google Cast devices like Android TVs and Chromecasts will be automatically discovered if you enable [the discovery component]({{site_root}}/components/discovery/). There is a issue where Chromecasts can only be discovered if your device is connected to the same subnet as your Chromecast. - -Chromecast platform can also be forced to load by adding the following lines to your `configuration.yaml`: - -```yaml -# Example configuration.yaml entry -media_player: - - platform: cast -``` - -Configuration variables: - -- **host** (*Optional*): Use only if you don't want to scan for devices. -- **ignore_cec** (*Optional*) A list of chromecasts that should ignore CEC data for determining the active input. [See the upstream documentation for more information.](https://github.com/balloob/pychromecast#ignoring-cec-data) diff --git a/source/_components/media_player.channels.markdown b/source/_components/media_player.channels.markdown new file mode 100644 index 00000000000..12138976e26 --- /dev/null +++ b/source/_components/media_player.channels.markdown @@ -0,0 +1,61 @@ +--- +layout: page +title: "Channels" +description: "Instructions on how to integrate Channels into Home Assistant." +date: 2018-03-06 11:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: channels.png +ha_category: Media Player +ha_release: 0.65.0 +ha_iot_class: "Local Polling" +--- + + +The Channels platform allows you to control [Channels](https://getchannels.com/) from Home Assistant. Play, pause, seek, or skip commercials on an instance of Channels that is running on your network. + +Your favorite channels will appear as sources in the Source List in Home Assistant. + +To add Channels to your installation, add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +media_player: + - platform: channels + name: Family Room Channels + host: 192.168.1.50 +``` + +Configuration variables: + +- **host** (*Required*): The IP of the device running Channels, e.g., 192.168.1.50 +- **port** (*Optional*): The port where Channels is accessible, defaults to 57000. +- **name** (*Optional*): The name of the Channels instance in Home Assistant, eg. Family Room Channels. Defaults to Channels. + +### {% linkable_title Service `channels_seek_forward` %} + +Seek forward by the number of seconds currently set in settings on the instance of Channels. + +| Service data attribute | Optional | Description | +| ---------------------- | -------- | ----------- | +| `entity_id` | no | String that points at `entity_id` of Channels app. + + +### {% linkable_title Service `channels_seek_backward` %} + +Seek backward by the number of seconds currently set in settings on the instance of Channels. + +| Service data attribute | Optional | Description | +| ---------------------- | -------- | ----------- | +| `entity_id` | no | String that points at `entity_id` of Channels app. + +### {% linkable_title Service `channels_seek_by` %} + +Seek forward or backward by a provided number of seconds. + +| Service data attribute | Optional | Description | +| ---------------------- | -------- | ----------- | +| `entity_id` | no | String that points at `entity_id` of Channels app. +| `seconds` | no | Number of seconds to seek in the timeline by. Negative seconds seeks backwards. diff --git a/source/_components/media_player.clementine.markdown b/source/_components/media_player.clementine.markdown index c730daf5d96..781ac147a56 100644 --- a/source/_components/media_player.clementine.markdown +++ b/source/_components/media_player.clementine.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Clementine Music Player" -description: "Instructions how to integrate Clementine Music Player within Home Assistant." +description: "Instructions on how to integrate Clementine Music Player within Home Assistant." date: 2017-02-11 17:15 sidebar: true comments: false diff --git a/source/_components/media_player.cmus.markdown b/source/_components/media_player.cmus.markdown index e798889686c..1415de1e547 100644 --- a/source/_components/media_player.cmus.markdown +++ b/source/_components/media_player.cmus.markdown @@ -1,7 +1,7 @@ --- layout: page title: "cmus" -description: "Instructions how to integrate cmus Music Player into Home +description: "Instructions on how to integrate cmus Music Player into Home Assistant." date: 2016-06-17 18:45 sidebar: true @@ -23,19 +23,19 @@ media_player: - platform: cmus ``` -if cmus is running on a remote server: +If cmus is running on a remote server: ```yaml # Example configuration.yaml entry media_player: - platform: cmus - host: IP_ADDRESS - password: PASSWORD + host: IP_ADDRESS_OF_CMUS_PLAYER + password: YOUR_PASSWORD ``` Configuration variables: -- **host** (*Optional*): Hostname or IP address of the machine running cmus. Note if a remote cmus is configured that instance must be configured to listen to remote connections, which also requires a password to be set. +- **host** (*Optional*): Hostname or IP address of the machine running cmus. Note if a remote cmus is configured that instance must be configured to listen to remote connections, which also requires a password to be set. - **password** (*Required if host is set*): Password for your cmus player. - **port** (*Optional*): Port of the cmus socket, defaults to 3000. - **name** (*Optional*): The name you'd like to give the cmus player in Home Assistant diff --git a/source/_components/media_player.denon.markdown b/source/_components/media_player.denon.markdown index b8c0e380133..ebfe0177bae 100644 --- a/source/_components/media_player.denon.markdown +++ b/source/_components/media_player.denon.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Denon Network Receivers" -description: "Instructions how to integrate Denon Network Receivers into Home Assistant." +description: "Instructions on how to integrate Denon Network Receivers into Home Assistant." date: 2015-09-08 09:00 sidebar: true comments: false diff --git a/source/_components/media_player.denonavr.markdown b/source/_components/media_player.denonavr.markdown index a64c85c44b3..6c4d2d81957 100644 --- a/source/_components/media_player.denonavr.markdown +++ b/source/_components/media_player.denonavr.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Denon AVR Network Receivers" -description: "Instructions how to integrate Denon AVR Network Receivers into Home Assistant." +description: "Instructions on how to integrate Denon AVR Network Receivers into Home Assistant." date: 2015-09-08 09:00 sidebar: true comments: false @@ -13,11 +13,11 @@ ha_iot_class: "Local Polling" ha_release: 0.7.2 --- - The `denonavr` platform allows you to control a [Denon Network Receivers](http://www.denon.co.uk/chg/product/compactsystems/networkmusicsystems/ceolpiccolo) from Home Assistant. It might be that your device is supported by the [Denon] platform. Supported devices: +- Denon AVR-X1300W - Denon AVR-X2000 - Denon AVR-X2100W - Denon AVR-X4100W @@ -29,6 +29,7 @@ Supported devices: - Marantz M-RC610 - Marantz SR5008 - Marantz SR6007 - SR6010 +- Marantz NR1506 - Marantz NR1604 - Other Denon AVR receivers (untested) - Marantz receivers (experimental) @@ -54,18 +55,19 @@ media_player: Configuration variables: -- **host** (*Optional*): IP address of the device. Example: 192.168.1.32. If not set, auto discovery is used. -- **name** (*Optional*): Name of the device. If not set, friendlyName of receiver is used. -- **show_all_sources** (*Optional*): If True all sources are displayed in sources list even if they are marked as deleted in the receiver. If False deleted sources are not displayed (default). Some receivers have a bug that marks all sources as deleted in the interface. In this case this option could help. +- **host** (*Optional*): IP address of the device. Example: 192.168.1.32. If not set, auto-discovery is used. +- **name** (*Optional*): Name of the device. If not set, friendlyName of the receiver is used. +- **show_all_sources** (*Optional*): If True all sources are displayed in sources list even if they are marked as deleted in the receiver. If False deleted sources are not displayed (default). Some receivers have a bug that marks all sources as deleted in the interface. In this case, this option could help. - **timeout** (*Optional*): Timeout for HTTP requests to the receiver. Defaults to 2 seconds if not provided. - **zones** (*Optional*): List of additional zones to be activated. They are displayed as additional media players with the same functionality Main Zone of the device supports - **zone**: Zone which should be activated. Valid options are Zone2 and Zone3 - - **name** (*Optional*): Name of the zone. If not set the name of the main device + zone as suffix is taken. + - **name** (*Optional*): Name of the zone. If not set the name of the main device + zone as a suffix is taken. A few notes: -- Additional option the control Denon AVR receivers with a builtin web server is using the HTTP interface with denonavr platform. -- denonavr platform supports some additional functionalities like album covers, custom input source names and auto discovery. -- Marantz receivers seem to a have quite simliar interface. Thus if you own one, give it a try. +- An additional option for the control of Denon AVR receivers with a built-in web server is using the HTTP interface with `denonavr` platform. +- The `denonavr` platform supports some additional functionalities like album covers, custom input source names and auto discovery. +- Marantz receivers seem to a have quite a similar interface. Thus if you own one, give it a try. +- Sound mode: The command to set a specific sound mode is different from the value of the current sound mode reported by the receiver (sound_mode_raw). There is a key-value structure (sound_mode_dict) that matches the raw sound mode to one of the possible commands to set a sound mode (for instance {'MUSIC':['PLII MUSIC']}. If you get a "Not able to match sound mode" warning, please open an issue on the [denonavr library](https://github.com/scarface-4711/denonavr), stating which raw sound mode could not be matched so it can be added to the matching dictionary. You can find the current raw sound mode under "Development Tools/States" in the front panel. [Denon]: /components/media_player.denon/ diff --git a/source/_components/media_player.directv.markdown b/source/_components/media_player.directv.markdown index 2cd2c7f44dd..f7f6559619e 100644 --- a/source/_components/media_player.directv.markdown +++ b/source/_components/media_player.directv.markdown @@ -1,7 +1,7 @@ --- layout: page title: "DirecTV" -description: "Instructions how to integrate DirecTV receivers into Home Assistant." +description: "Instructions on how to integrate DirecTV receivers into Home Assistant." date: 2016-07-19 01:0+0000 sidebar: true comments: false diff --git a/source/_components/media_player.dunehd.markdown b/source/_components/media_player.dunehd.markdown index 76c084bcf48..bbf646f0fb9 100644 --- a/source/_components/media_player.dunehd.markdown +++ b/source/_components/media_player.dunehd.markdown @@ -1,7 +1,7 @@ --- layout: page title: "DuneHD media players" -description: "Instructions how to integrate DuneHD media players into Home Assistant." +description: "Instructions on how to integrate DuneHD media players into Home Assistant." date: 2016-11-26 09:00 sidebar: true comments: false diff --git a/source/_components/media_player.emby.markdown b/source/_components/media_player.emby.markdown index ca77cbde1a3..2f12bc1d808 100644 --- a/source/_components/media_player.emby.markdown +++ b/source/_components/media_player.emby.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Emby" -description: "Instructions how to integrate Emby into Home Assistant." +description: "Instructions on how to integrate Emby into Home Assistant." date: 2016-10-13 22:00 sidebar: true comments: false diff --git a/source/_components/media_player.epson.markdown b/source/_components/media_player.epson.markdown new file mode 100644 index 00000000000..e24397901d7 --- /dev/null +++ b/source/_components/media_player.epson.markdown @@ -0,0 +1,63 @@ +--- +layout: page +title: "Epson" +description: "Instructions on how to integrate Epson projector into Home Assistant." +date: 2018-06-13 15:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: epson.png +ha_category: Media Player +ha_release: 0.72 +ha_iot_class: "Local Polling" +--- + +The `epson` platform allows you to control a Epson projector from Home Assistant. + +To add Epson to your installation, add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +media_player: + - platform: epson + host: 192.168.0.123 +``` + +{% configuration %} +host: + description: The host name or address of the Epson projector + required: true + type: string +port: + description: The HTTP port number. + required: false + type: int + default: 80 +name: + description: The name of the device used in the frontend. + required: false + type: string + default: 'EPSON Projector' +ssl: + description: Enable SSL. **Feature not tested.** + required: false + type: bool + default: false +{% endconfiguration %} + +Supported features of Epson projector: +- turn on/off +- set input +- set/get color mode +- increase/decrease volume +- mute/unmute audio +- send next/previous track + +Supported devices: +- Epson projectors supporting ESC/VP21 protocol. + +Tested devices: +- Epson EH-TW5350 + +To make this module work you need to connect your projector to your LAN. The best is to use iProjection app by Epson to test if it is working. diff --git a/source/_components/media_player.firetv.markdown b/source/_components/media_player.firetv.markdown index 855333def81..0abf2b3dadc 100644 --- a/source/_components/media_player.firetv.markdown +++ b/source/_components/media_player.firetv.markdown @@ -1,7 +1,7 @@ --- layout: page title: "FireTV" -description: "Instructions how to integrate Fire-TV into Home Assistant." +description: "Instructions on how to integrate Fire-TV into Home Assistant." date: 2015-10-23 18:00 sidebar: true comments: false @@ -16,7 +16,7 @@ ha_iot_class: "Local Polling" The `firetv` platform allows you to control a [Amazon Fire TV/stick](http://www.amazon.com/Amazon-DV83YW-Fire-TV/dp/B00U3FPN4U). -The python-firetv Python 2.x module with its helper script that exposes a HTTP server to fetch state and perform actions is used. +The python-firetv Python 2.x module with its helper script that exposes an HTTP server to fetch state and perform actions is used. Steps to configure your Amazon Fire TV stick with Home Assistant: diff --git a/source/_components/media_player.frontier_silicon.markdown b/source/_components/media_player.frontier_silicon.markdown index 0c6a5843fa9..c7887e9c8b7 100644 --- a/source/_components/media_player.frontier_silicon.markdown +++ b/source/_components/media_player.frontier_silicon.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Frontier Silicon Internet Radios" -description: "Instructions how to integrate Frontier Silicon Internet Radios into Home Assistant." +description: "Instructions on how to integrate Frontier Silicon Internet Radios into Home Assistant." date: 2017-02-04 00:01 sidebar: true comments: false diff --git a/source/_components/media_player.gpmdp.markdown b/source/_components/media_player.gpmdp.markdown index 7207e0e0924..c65ed0dff0f 100644 --- a/source/_components/media_player.gpmdp.markdown +++ b/source/_components/media_player.gpmdp.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Google Play Music Desktop Player" -description: "Instructions how to integrate GPMDP into Home Assistant." +description: "Instructions on how to integrate GPMDP into Home Assistant." date: 2016-05-09 08:00 sidebar: true comments: false diff --git a/source/_components/media_player.gstreamer.markdown b/source/_components/media_player.gstreamer.markdown index c77e8c40496..288ef12120c 100644 --- a/source/_components/media_player.gstreamer.markdown +++ b/source/_components/media_player.gstreamer.markdown @@ -58,7 +58,7 @@ If you're running Home Assistant in a virtual environment, you'll need to symlin ln -s /path/to/your/installation/of/gi /path/to/your/venv/lib/python3.4/site-packages ``` -On a Raspberry PI, you may need to add the Home Assistant user to the `audio` group: +On a Raspberry Pi, you may need to add the Home Assistant user to the `audio` group: ```bash sudo usermod -a -G audio @@ -68,7 +68,7 @@ sudo usermod -a -G audio ### {% linkable_title Using with TTS %} -To play TTS on your local computer (for example, if you have speakers attached to your Raspberry PI: +To play TTS on your local computer (for example, if you have speakers attached to your Raspberry Pi: ```yaml media_player: diff --git a/source/_components/media_player.horizon.markdown b/source/_components/media_player.horizon.markdown new file mode 100644 index 00000000000..d867d348c9e --- /dev/null +++ b/source/_components/media_player.horizon.markdown @@ -0,0 +1,45 @@ +--- +layout: page +title: "Horizon HD Recorder" +description: "Instructions how to integrate the Unitymedia Horizon HD Recorder into Home Assistant." +date: 2018-05-02 20:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: unitymedia.png +ha_category: Media Player +ha_iot_class: "Local Polling" +ha_release: 0.72 +--- + +The `horizon` component allows you to control a [Unitymedia](https://www.unitymedia.de) Horizon HD Recorder from Home Assistant. + +To add a Horizon HD Recorder to your installation, add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +media_player: + - platform: horizon + host: 192.168.0.127 +``` + +{% configuration %} + host: + description: The hostname or address of the device. + required: true + type: string + port: + description: The port of the device to connect to. + required: false + type: int + name: + description: The name of the device used in the frontend. + required: false + type: string +{% endconfiguration %} + + +#### {% linkable_title Preparation of the Horizon HD Recorder %} + +The Home Networking ("Heimnetzwerk") service needs to be enabled at the settings menu of the Horizon receiver. Once you have set up the Media Library ("Medienbibliothek"), we can determine whether the device is turned on or off. Without this, the component will fail to start. diff --git a/source/_components/media_player.itunes.markdown b/source/_components/media_player.itunes.markdown index fd357eb8ec7..6885a333855 100644 --- a/source/_components/media_player.itunes.markdown +++ b/source/_components/media_player.itunes.markdown @@ -1,7 +1,7 @@ --- layout: page title: "iTunes" -description: "Instructions how to integrate iTunes into Home Assistant." +description: "Instructions on how to integrate iTunes into Home Assistant." date: 2015-06-22 11:00 sidebar: true comments: false diff --git a/source/_components/media_player.kodi.markdown b/source/_components/media_player.kodi.markdown index 556812292c6..83689d4c1ae 100644 --- a/source/_components/media_player.kodi.markdown +++ b/source/_components/media_player.kodi.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Kodi" -description: "Instructions how to integrate Kodi into Home Assistant." +description: "Instructions on how to integrate Kodi into Home Assistant." date: 2015-06-22 11:00 sidebar: true comments: false @@ -17,7 +17,9 @@ ha_iot_class: "Local Push" The `kodi` platform allows you to control a [Kodi](http://kodi.tv/) multimedia system from Home Assistant. -To add Kodi to your installation, add the following to your `configuration.yaml` file: +The preferred way to set up the Kodi platform is by enabling the [discovery component](https://www.home-assistant.io/components/discovery/) which requires enabled [web interface](https://kodi.wiki/view/Web_interface) on your Kodi installation. + +In case the discovery does not work, or you need specific configuration variables, you can add the following to your `configuration.yaml` file: ```yaml # Example configuration.yaml entry diff --git a/source/_components/media_player.lg_netcast.markdown b/source/_components/media_player.lg_netcast.markdown index 138eaec8bde..7a60e235781 100644 --- a/source/_components/media_player.lg_netcast.markdown +++ b/source/_components/media_player.lg_netcast.markdown @@ -1,7 +1,7 @@ --- layout: page title: "LG Netcast TV" -description: "Instructions how to integrate a LG TV (Netcast 3.0 & 4.0) within Home Assistant." +description: "Instructions on how to integrate a LG TV (Netcast 3.0 & 4.0) within Home Assistant." date: 2016-05-12 23:22 sidebar: true comments: false diff --git a/source/_components/media_player.markdown b/source/_components/media_player.markdown index 18350ce1326..46ead6f4af8 100644 --- a/source/_components/media_player.markdown +++ b/source/_components/media_player.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Media Player" -description: "Instructions how to setup your media players with Home Assistant." +description: "Instructions on how to setup your media players with Home Assistant." date: 2015-01-24 14:39 sidebar: true comments: false @@ -9,39 +9,39 @@ sharing: true footer: true --- -Interacts with media players on your network. Please check the sidebar for a full list of supported devices. +Interacts with media players on your network. Please check the right sidebar for a full list of supported devices. ## {% linkable_title Services %} ### {% linkable_title Media control services %} -Available services: `turn_on`, `turn_off`, `toggle`, `volume_up`, `volume_down`, `media_play_pause`, `media_play`, `media_pause`, `media_stop`, `media_next_track`, `media_previous_track`, `clear_playlist` +Available services: `turn_on`, `turn_off`, `toggle`, `volume_up`, `volume_down`, `volume_set`, `media_play_pause`, `media_play`, `media_pause`, `media_stop`, `media_next_track`, `media_previous_track`, `clear_playlist`, `shuffle_set` | Service data attribute | Optional | Description | | ---------------------- | -------- | ------------------------------------------------ | | `entity_id` | yes | Target a specific media player. Defaults to all. | -#### {% linkable_title Service `media_player/volume_mute` %} +#### {% linkable_title Service `media_player.volume_mute` %} | Service data attribute | Optional | Description | |------------------------|----------|--------------------------------------------------| | `entity_id` | yes | Target a specific media player. Defaults to all. | | `is_volume_muted` | no | True/false for mute/unmute | -#### {% linkable_title Service `media_player/volume_set` %} +#### {% linkable_title Service `media_player.volume_set` %} | Service data attribute | Optional | Description | |------------------------|----------|--------------------------------------------------| | `entity_id` | yes | Target a specific media player. Defaults to all. | -| `volume_level` | no | Float for volume level | +| `volume_level` | no | Float for volume level. Range 0..1 | -#### {% linkable_title Service `media_player/media_seek` %} +#### {% linkable_title Service `media_player.media_seek` %} | Service data attribute | Optional | Description | |------------------------|----------|--------------------------------------------------------| | `entity_id` | yes | Target a specific media player. Defaults to all. | | `seek_position` | no | Position to seek to. The format is platform dependent. | -#### {% linkable_title Service `media_player/play_media` %} +#### {% linkable_title Service `media_player.play_media` %} | Service data attribute | Optional | Description | | -----------------------| -------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- | @@ -49,20 +49,29 @@ Available services: `turn_on`, `turn_off`, `toggle`, `volume_up`, `volume_down`, | `media_content_id` | no | A media identifier. The format of this is component dependent. For example, you can provide URLs to Sonos and Cast but only a playlist ID to iTunes. | | `media_content_type` | no | A media type. Must be one of `music`, `tvshow`, `video`, `episode`, `channel` or `playlist`. For example, to play music you would set `media_content_type` to `music`. | -#### {% linkable_title Service `media_player/select_source` %} +#### {% linkable_title Service `media_player.select_source` %} | Service data attribute | Optional | Description | | ---------------------- | -------- | ---------------------------------------------------- | | `entity_id` | yes | Target a specific media player. Defaults to all. | | `source` | no | Name of the source to switch to. Platform dependent. | +#### {% linkable_title Service `media_player/select_sound_mode` %} + +Currently only supported on [Denon AVR](/components/media_player.denonavr/) and [Songpal](/components/media_player.songpal/). + +| Service data attribute | Optional | Description | +| ---------------------- | -------- | ---------------------------------------------------- | +| `entity_id` | no | Target a specific media player. For example `media_player.marantz`| +| `sound_mode` | no | Name of the sound mode to switch to. Platform dependent.| + #### {% linkable_title Service `media_player/shuffle_set` %} -Currently only supported on [Spotify](/components/media_player.spotify/), [MPD](/components/media_player.mpd/), [Kodi](/components/media_player.kodi/), and [Universal](/components/media_player.universal/). +Currently only supported on [Spotify](/components/media_player.spotify/), [MPD](/components/media_player.mpd/), [Kodi](/components/media_player.kodi/), [Squeezebox](/components/media_player.squeezebox/) and [Universal](/components/media_player.universal/). | Service data attribute | Optional | Description | | ---------------------- | -------- | ---------------------------------------------------- | | `entity_id` | no | Target a specific media player. For example `media_player.spotify`| -| `shuffle` | no | `true`/`false` for enabling/disabling shuffle | +| `shuffle` | no | `true`/`false` for enabling/disabling shuffle | diff --git a/source/_components/media_player.mediaroom.markdown b/source/_components/media_player.mediaroom.markdown new file mode 100644 index 00000000000..39a417a5f31 --- /dev/null +++ b/source/_components/media_player.mediaroom.markdown @@ -0,0 +1,85 @@ +--- +layout: page +title: "Mediaroom" +description: "Instructions on how to integrate Mediaroom Set-Top Boxes into Home Assistant." +date: 2018-01-22 22:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: mediaroom.png +ha_category: Media Player +ha_iot_class: "Local Polling" +ha_release: "0.63" +--- + +The `mediaroom` component allows you to control a [Mediaroom](https://en.wikipedia.org/wiki/Ericsson_Mediaroom) Set-Top Box (STB) from Home Assistant. + +To add a Mediaroom STB to your installation, add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +media_player: + - platform: mediaroom +``` + +{% configuration %} + host: + description: The hostname or IP address of the device. + required: false + type: string + default: Tries to discovery your device. + name: + description: The name of the device used in the frontend. + required: false + type: string + default: Mediaroom STB + optimistic: + description: In case the component cannot determine the status of the box, consider the box always ON. + required: false + type: boolean + default: false +{% endconfiguration %} + +Notice that all parameters are optional, and discovery should configure everything for you. + +#### {% linkable_title Using the Mediaroom component %} + +The component has been developed for Portuguese TV operators currently using the Mediaroom platform, but should also work in other deployments in which the STB can be controlled remotely through a socket on port 8082. + +In most cases (single STB) you just need to setup the *platform* and discovery will do the rest. + +If the STB is on the same network segment as Home Assistant, it can determine whether the device is turned on or off. Without this, the component will fail to determine the Set-top box status, and you are required to add the *optimistic* configuration variable. + +## {% linkable_title Examples %} + +### {% linkable_title Example `press_button` script %} + +The `play_media` function can be used in scripts to change channels and emulate button pressing from a remote control. + +{% raw %} +```yaml +# Example play_media script +# +press_button: + sequence: + service: media_player.play_media + data_template: + entity_id: media_player.mediaroom_stb + media_content_id: "{{ value }}" + media_content_type: "channel" +``` +{% endraw %} + +### {% linkable_title Example configuration with 2 STB %} + +```yaml +# Example configuration.yaml entry for 2 STB +media_player: + - platform: mediaroom + host: 192.168.1.64 + name: Living Room STB + - platform: mediaroom + host: 192.168.1.65 + name: Bedroom STB +``` diff --git a/source/_components/media_player.monoprice.markdown b/source/_components/media_player.monoprice.markdown index 7487e75b1e8..75e41d9b631 100644 --- a/source/_components/media_player.monoprice.markdown +++ b/source/_components/media_player.monoprice.markdown @@ -47,3 +47,25 @@ Configuration variables: - **port** (*Required*): The serial port to which Monoprice amplifier is connected - **zones** (*Required*): This is the list of zones available. Valid zones are 11,12,13,14,15,16. In case multiple Monoprice devices are stacked together the list of valid zones is extended by 21,22,23,24,25,26 for the second device and 31,32,33,34,35,36 for the third device. Each zone must have a name assigned to it. - **sources** (*Required*): The list of sources available. Valid source numbers are 1,2,3,4,5,6. Each source number corresponds to the input number on the Monoprice amplifier. Similar to zones, each source must have a name assigned to it. + +### {% linkable_title Service `snapshot` %} + +Take a snapshot of one or more zones' states. This service, and the following one are useful if you want to play a doorbell or notification sound and resume playback afterward. If no `entity_id` is provided, all zones are snapshotted. + +The following attributes are stored in a snapshot: +- Power status (On/Off) +- Mute status (On/Off) +- Volume level +- Source + +| Service data attribute | Optional | Description | +| ---------------------- | -------- | ----------- | +| `entity_id` | yes | String or list of strings that point at `entity_id`s of zones. + +### {% linkable_title Service `restore` %} + +Restore a previously taken snapshot of one or more speakers. If no `entity_id` is provided, all zones are restored. + +| Service data attribute | Optional | Description | +| ---------------------- | -------- | ----------- | +| `entity_id` | yes | String or list of strings that point at `entity_id`s of zones. diff --git a/source/_components/media_player.mpchc.markdown b/source/_components/media_player.mpchc.markdown index 4e4c187d0f4..98f6846f3a1 100644 --- a/source/_components/media_player.mpchc.markdown +++ b/source/_components/media_player.mpchc.markdown @@ -1,7 +1,7 @@ --- layout: page title: "MPC-HC" -description: "Instructions how to integrate MPC-HC into Home Assistant." +description: "Instructions on how to integrate MPC-HC into Home Assistant." date: 2016-07-27 21:21 sidebar: true comments: false diff --git a/source/_components/media_player.mpd.markdown b/source/_components/media_player.mpd.markdown index b561797aacb..51888be2b20 100644 --- a/source/_components/media_player.mpd.markdown +++ b/source/_components/media_player.mpd.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Music Player Daemon (MPD)" -description: "Instructions how to integrate Music Player Daemon into Home Assistant." +description: "Instructions on how to integrate Music Player Daemon into Home Assistant." date: 2016-09-30 23:06 sidebar: true comments: false diff --git a/source/_components/media_player.nad.markdown b/source/_components/media_player.nad.markdown index b35a5ea99b1..41684f72129 100644 --- a/source/_components/media_player.nad.markdown +++ b/source/_components/media_player.nad.markdown @@ -1,7 +1,7 @@ --- layout: page title: "NAD" -description: "Instructions how to integrate NAD receivers into Home Assistant." +description: "Instructions on how to integrate NAD receivers into Home Assistant." date: 2016-01-05 20:00 sidebar: true comments: false diff --git a/source/_components/media_player.nadtcp.markdown b/source/_components/media_player.nadtcp.markdown index 98a160f76b9..e673e4472d8 100644 --- a/source/_components/media_player.nadtcp.markdown +++ b/source/_components/media_player.nadtcp.markdown @@ -1,7 +1,7 @@ --- layout: page title: "NAD tcp" -description: "Instructions how to integrate the NAD D 7050 or C338 digital amplifiers into Home Assistant." +description: "Instructions on how to integrate the NAD D 7050 or C338 digital amplifiers into Home Assistant." date: 2017-06-07 20:00 sidebar: true comments: false diff --git a/source/_components/media_player.onkyo.markdown b/source/_components/media_player.onkyo.markdown index e78075c01a5..630182ba6df 100644 --- a/source/_components/media_player.onkyo.markdown +++ b/source/_components/media_player.onkyo.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Onkyo" -description: "Instructions how to integrate Onkyo and some Pioneer receivers into Home Assistant." +description: "Instructions on how to integrate Onkyo and some Pioneer receivers into Home Assistant." date: 2016-03-30 08:00 sidebar: true comments: false @@ -16,6 +16,8 @@ ha_iot_class: "Local Polling" The `onkyo` platform allows you to control a [Onkyo](http://www.onkyo.com/) and some recent [Pioneer](http://www.pioneerelectronics.com) receivers from Home Assistant. Please be aware that you need to enable "Network Standby" for this component to work in your Hardware. +## {% linkable_title Configuration %} + To add an Onkyo or Pioneer receiver to your installation, add the following to your `configuration.yaml` file: ```yaml @@ -28,11 +30,26 @@ media_player: pc: 'HTPC' ``` -Configuration variables: + If your receiver has second or third zone’s available, they are displayed as additional media players with the same functionality as the main zone. -- **host** (*Optional*): IP address of the device. Example:`192.168.1.2`. If not specified, the platform will load any discovered receivers. -- **name** (*Required if host is specified*): Name of the device. -- **sources** (*Optional*): A list of mappings from source to source name. Valid sources can be found below. A default list will be used if no source mapping is specified. +{% configuration %} +host: + description: IP address of the device. Example:`192.168.1.2`. If not specified, the platform will load any discovered receivers. + required: false + type: string +name: + description: Name of the device. (*Required if host is specified*) + required: false + type: string +max_volume: + description: Maximum volume. Defaults to 80. + required: false + type: number +sources: + description: A list of mappings from source to source name. Valid sources can be found below. A default list will be used if no source mapping is specified. + required: false + type: list +{% endconfiguration %} List of source names: diff --git a/source/_components/media_player.openhome.markdown b/source/_components/media_player.openhome.markdown index e1749688272..ae10d32d3c6 100644 --- a/source/_components/media_player.openhome.markdown +++ b/source/_components/media_player.openhome.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Linn / Openhome" -description: "Instructions how to integrate Linn Ds and Openhome renderers into Home Assistant." +description: "Instructions on how to integrate Linn Ds and Openhome renderers into Home Assistant." date: 2017-02-21 22:40 sidebar: true comments: false diff --git a/source/_components/media_player.panasonic_viera.markdown b/source/_components/media_player.panasonic_viera.markdown index 38cf5f1f8bd..28778486017 100644 --- a/source/_components/media_player.panasonic_viera.markdown +++ b/source/_components/media_player.panasonic_viera.markdown @@ -18,17 +18,18 @@ The `panasonic_viera` platform allows you to control a Panasonic Viera TV. Currently known supported models: -- TX-P42STW50 - TC-P65VT30 -- TX-55CX700E +- TX-32AS520E - TX-49DX650B - TX-50DX700B -- TX-L42ET50 -- TX-P50GT60E +- TX-55CX700E - TX-65EXW784 -- TX-32AS520E +- TX-L42ET50 +- TX-P42STW50 +- TX-P50GT30Y +- TX-P50GT60E -If your model is not on the list then give it a test, if everything works correctly then add it to the list on [GitHub](https://github.com/home-assistant/home-assistant.io). +If your model is not on the list then give it a test, if everything works correctly then add it to the list on [GitHub](https://github.com/home-assistant/home-assistant.github.io/blob/next/source/_components/media_player.panasonic_viera.markdown). Some Panasonic Viera TVs allow Home Assistant to turn them on, if you specify the MAC address with `mac:`. @@ -43,7 +44,33 @@ media_player: Configuration variables: -- **host** (*Required*): The IP of the Panasonic Viera TV, e.g. `192.168.0.10`. +- **host** (*Required*): The IP of the Panasonic Viera TV, e.g., `192.168.0.10`. - **port** (*Optional*): The port number of your Panasonic Viera TV. Defaults to `55000`. -- **mac** (*Optional*): The MAC address of your Panasonic Viera TV, e.g. `AA:BB:CC:DD:99:1A`. +- **mac** (*Optional*): The MAC address of your Panasonic Viera TV, e.g., `AA:BB:CC:DD:99:1A`. - **name** (*Optional*): The name you would like to give to the Panasonic Viera TV. + +### {% linkable_title Example `play_media` script %} + +The `play_media` function can be used to open web pages and other media types (images, movies) in the TV web browser. + +```yaml +# Example play_media script that can be triggered when someone is detected at the door +# +script: + front_door_camera: + alias: "Show who's at the door" + sequence: + - service: media_player.turn_on + data: + entity_id: media_player.living_room_tv + - service: media_player.play_media + data: + entity_id: media_player.living_room_tv + media_content_type: "url" + media_content_id: "http://google.com" + - delay: + seconds: 5 + - service: media_player.media_stop + data: + entity_id: media_player.living_room_tv +``` diff --git a/source/_components/media_player.pandora.markdown b/source/_components/media_player.pandora.markdown index 5f0098cff83..76c04061252 100644 --- a/source/_components/media_player.pandora.markdown +++ b/source/_components/media_player.pandora.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Pandora" -description: "Instructions how to integrate Pandora radio into Home Assistant." +description: "Instructions on how to integrate Pandora radio into Home Assistant." date: 2016-06-10 19:59 sidebar: true comments: false @@ -14,17 +14,17 @@ ha_release: 0.22 ha_iot_class: "Local Polling" --- -If you have a Pandora account, you can control it from Home Assistant with this media player. +If you have a Pandora account, you can control it from Home Assistant with this media player. ### {% linkable_title Installation of Pianobar %} This media player uses the [Pianobar command-line Pandora client](https://github.com/PromyLOPh/pianobar), which you have to install separately. This can be done on a Raspberry Pi 2/3 with Raspbian Jessie as follows . _(Note: Other platforms may have different installation processes)_ -The version of pianobar that comes with Jessie has a bug, so you have to build a more recent version. The latest version depends on a recent version of libraries associated with ffmpeg, so you should make sure you go through the backport process documented in [The FFmpeg component](https://home-assistant.io/components/ffmpeg/) before doing this. Install the following basic dependencies: +The version of pianobar that comes with Jessie has a bug, so you have to build a more recent version. The latest version depends on a recent version of libraries associated with ffmpeg, so you should make sure you go through the backport process documented in [The FFmpeg component](/components/ffmpeg/) before doing this. Install the following basic dependencies: ```bash -$ sudo apt-get install git libao-dev libgcrypt11-dev libfaad-dev libmad0-dev libjson0-dev make pkg-config libcurl4-openssl-dev +$ sudo apt-get install git libao-dev libgcrypt11-dev libfaad-dev libmad0-dev libjson0-dev make pkg-config libcurl4-openssl-dev ``` And now install the backported ffmpeg-related libraries (note that if you're using an older version of ffmpeg for other things on this machine, you may encounter issues after doings this): @@ -61,7 +61,7 @@ media_player: - platform: pandora ``` -That's it! Now you will find a media player. If you click it you will find all your stations listed as different sources. If you switch to one, the station will begin playing. +That's it! Now you will find a media player. If you click it you will find all your stations listed as different sources. If you switch to one, the station will begin playing.

diff --git a/source/_components/media_player.philips_js.markdown b/source/_components/media_player.philips_js.markdown index d7e663e8e55..78f87af83a6 100644 --- a/source/_components/media_player.philips_js.markdown +++ b/source/_components/media_player.philips_js.markdown @@ -29,3 +29,21 @@ Configuration variables: - **host** (*Required*): IP address of TV. - **name** (*Optional*): The name you would like to give to the Philips TV. +- **turn_on_action** (*Optional*): A script that will be executed to turn on the TV (can be used with wol). +- **api_version** (*Optional*): The JointSpace API version of your Philips TV, defaults to `1`. This is an experimental option and not all the functionalities are guaranteed to work with API versions different from `1` and `5`. + +

+When using api_version: 5 changing sources switches tv channels. Additionally this allows setting the volume level. +

+ + +```yaml +# Example configuration.yaml with turn_on_action +media_player: + - platform: philips_js + host: 192.168.1.99 + turn_on_action: + service: wake_on_lan.send_magic_packet + data: + mac: aa:bb:cc:dd:ee:ff +``` diff --git a/source/_components/media_player.pioneer.markdown b/source/_components/media_player.pioneer.markdown index 66086c5ded3..6bc6d1a5b00 100644 --- a/source/_components/media_player.pioneer.markdown +++ b/source/_components/media_player.pioneer.markdown @@ -29,7 +29,7 @@ Configuration variables: - **host** (*Required*): The IP of the Pioneer device, eg. `192.168.0.10` - **name** (*Optional*): The name you would like to give to the receiver. -- **port** (*Optional*): The port on which the Pioneer device listens, e.g. `23` (default) or `8102` +- **port** (*Optional*): The port on which the Pioneer device listens, e.g., `23` (default) or `8102` - **timeout** (*Optional*): Number of seconds (float) to wait for blocking operations like connect, write, and read. Notes: diff --git a/source/_components/media_player.plex.markdown b/source/_components/media_player.plex.markdown index ddaf3a611bf..e17068d2211 100644 --- a/source/_components/media_player.plex.markdown +++ b/source/_components/media_player.plex.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Plex" -description: "Instructions how to integrate Plex into Home Assistant." +description: "Instructions on how to integrate Plex into Home Assistant." date: 2015-10-05 21:21 sidebar: true comments: false @@ -69,6 +69,8 @@ media_player: show_all_controls: false use_custom_entity_ids: true use_episode_art: true + remove_unavailable_clients: true + client_remove_interval: 600 ``` - **entity_namespace** (*Optional*): Prefix for entity ID's. Defaults to `null`. Useful when using overlapping components (ex. Apple TV and Plex components when you have Apple TV's you use as Plex clients). Go from _media_player.playroom2_ to _media_player.plex_playroom_ - **include_non_clients** (*Optional*): Display non-recontrollable clients (ex. remote clients, PlexConnect Apple TV's). Defaults to `false`. @@ -76,6 +78,8 @@ media_player: - **show_all_controls** (*Optional*): Forces all controls to display. Defaults to `false`. Ignores dynamic controls (ex. show volume controls for client A but not for client B) based on detected client capabilities. This option allows you to override this detection if you suspect it to be incorrect. - **use_custom_entity_ids** (*Optional*): Name Entity ID's by client ID's instead of friendly names. Defaults to `false`. HA assigns entity ID's on a first come first serve basis. When you have identically named devices connecting (ex. media_player.plex_web_safari, media_player.plex_web_safari2), you can't reliably distinguish and or predict which device is which. This option avoids this issue by using unique client ID's (ex. media_player.dy4hdna2drhn). - **use_episode_art** (*Optional*): Display TV episode art instead of TV show art. Defaults to `false`. +- **remove_unavailable_clients** (*Optional*): Remove stale plex clients from UI after interval. Defaults to `true`. +- **client_remove_interval** (*Optional*): How long a client is to be unavailable for before it is cleaned up. Defaults to `600 seconds (10min)`. ### {% linkable_title Service `play_media` %} diff --git a/source/_components/media_player.roku.markdown b/source/_components/media_player.roku.markdown index 5c889727de3..c7771e0f406 100644 --- a/source/_components/media_player.roku.markdown +++ b/source/_components/media_player.roku.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Roku" -description: "Instructions how to integrate Roku into Home Assistant." +description: "Instructions on how to integrate Roku into Home Assistant." date: 2016-05-16 20:0+0000 sidebar: true comments: false diff --git a/source/_components/media_player.samsungtv.markdown b/source/_components/media_player.samsungtv.markdown index 2caaf7b0778..69174a09969 100644 --- a/source/_components/media_player.samsungtv.markdown +++ b/source/_components/media_player.samsungtv.markdown @@ -38,6 +38,7 @@ Configuration variables: Currently known supported models: - C7700 +- D5500 - D6500 - D7000 - D8000 @@ -49,29 +50,53 @@ Currently known supported models: - EH5600 - F6400AF - F6400 +- F8000BF - D6505 - D6300SF - U6000 (port must be set to 8001) - U6300 (port must be set to 8001, and `pip3 install websocket-client` must be executed) +- K5579 (port must be set to 8001, On/Off, Forward/Backward, Volume control, but no Play button) - K6500AF (port must be set to 8001) +- KS7005 (port must be set to 8001, and `pip3 install websocket-client` must be executed, MAC address must be provided, On/Off, Volume are OK, no channel change) +- KS8000 (port must be set to 8001, and `pip3 install websocket-client` must be executed) - KS8005 (port must be set to 8001, and `pip3 install websocket-client` must be executed) +- KU6020 (port must be set to 8001, and `pip3 install websocket-client` must be executed) +- KU6290 (port must be set to 8001) +- KU7000 (port must be set to 8001) +- MU6170UXZG (port must be set to 8001, and `pip3 install websocket-client` must be executed) - KS7502 (port must be set to 8001, and `pip3 install websocket-client` must be executed, turn on doesn't work, turn off works fine) - K5600AK (partially supported, turn on works but state is not updated) +- M5620 (port must be set to 8001, and `pip3 install websocket-client` must be executed) - UE65KS8005 (port must be set to 8001, On/Off, Forward/Backward, Volume are OK, but no Play button) +- UE6199UXZG (port must be set to 8001, On/Off, Forward/Backward, Volume control, but no Play button) +- Q7F (port must be set to 8001, MAC must be specified for Power On) +- UE40KU6400U (port must be set to 8001, and `pip3 install websocket-client` must be executed) Currently tested but not working models: - J5200 - Unable to see state and unable to control +- J5500 - State is always "on" and unable to control (but port 8001 *is* open) - JU7000 - Unable to see state and unable to control (but port 8001 *is* open) - JU7500 - Unable to see state and unable to control +- JS8005 - State tracking working but unable to control (but port 8001 *is* open) - JS9000 - State is always "on" and unable to control (but port 8001 *is* open) - JS9500 - State is always "on" and unable to control (but port 8001 *is* open) -- MU6170UXZG (port set to 8001, `pip3 install websocket-client` must be executed, turning on works, status not working reliably, turning off is not permanent (it comes back on).) +- MU6300 - Port set to 8001, `pip3 install websocket-client` must be executed, turning on works, status not working reliably, turning off is not permanent (it comes back on) +None of the 2014 (H) and 2015 (J) model series (e.g., J5200) will work, since Samsung have used a different (encrypted) type of interface for these. + If your model is not on the list then give it a test, if everything works correctly then add it to the list on [GitHub](https://github.com/home-assistant/home-assistant.github.io/tree/current/source/_components/media_player.samsungtv.markdown). -The first letter (U, P, L, H & K) represent the screen type, e.g. LED or Plasma. The second letter represents the region, E is Europe, N is North America and A is Asia & Australia. The two numbers following that represent the screen size. +The first letter (U, P, L, H & K) represent the screen type, e.g., LED or Plasma. The second letter represents the region, E is Europe, N is North America and A is Asia & Australia. The two numbers following that represent the screen size. If you add your model remember to remove these before adding them to the list. -Currently the ability to select a source is not implemented. +Changing channels can be done by calling the `media_player.play_media` service with the following payload: -There's currently a [known issue](https://github.com/home-assistant/home-assistant/issues/2098) with some TVs receiving a *Key press UP* that can interrupt certain applications. This should be fixed as of March 2017. +```javascript +{ + "entity_id": "media_player.office_tv", + "media_content_id": "590", + "media_content_type": "channel" +} +``` + +Currently the ability to select a source is not implemented. diff --git a/source/_components/media_player.sisyphus.markdown b/source/_components/media_player.sisyphus.markdown new file mode 100644 index 00000000000..ef0637ea32a --- /dev/null +++ b/source/_components/media_player.sisyphus.markdown @@ -0,0 +1,20 @@ +--- +layout: page +title: "Sisyphus Media Player" +description: "Instructions on how to integrate media playing on your Sisyphus Kinetic Art Table into Home Assistant." +date: 2018-05-06 22:26 +sidebar: true +comments: false +sharing: true +footer: true +logo: sisyphus.png +ha_category: Media Player +ha_iot_class: "Local Push" +ha_release: 0.75 +--- + +The [Sisyphus](https://sisyphus-industries.com/) integration for Home Assistant allows you to observe and control your Sisyphus Kinetic Art Table. + +Media players will be automatically added for each of your Sisyphus tables if the Sisyphus component is configured. + +For more configuration information see the [Sisyphus component](/components/sisyphus/) documentation. diff --git a/source/_components/media_player.songpal.markdown b/source/_components/media_player.songpal.markdown new file mode 100644 index 00000000000..0fd9a73f72c --- /dev/null +++ b/source/_components/media_player.songpal.markdown @@ -0,0 +1,68 @@ +--- +layout: page +title: "Sony SongPal compatible devices" +description: "Instructions on how to integrate Sony Songpal devices into Home Assistant." +date: 2018-02-03 09:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: sony.png +ha_category: Media Player +ha_iot_class: "Local Polling" +ha_release: 0.65 +--- + +The `songpal` platform allows you to control Sony's Songpal ("[Audio Control API](https://developer.sony.com/develop/audio-control-api/)") compatible devices such as soundbars, AV receivers and wireless speakers from Home Assistant. + +Even when the API officially supports only a few devices (HT-ST5000, HT-MT500, HT-CT800, SRS-ZR5 and STR-DN1080), it has also been confirmed to work on others. [The list of supported devices](http://vssupport.sony.net/en_ww/device.html) from Sony's Songpal website lists devices which are likely to be compatible with this platform. + +If the platform works with your non-listed device, or you encounter bugs, please feel free to [report them upstream](https://github.com/rytilahti/python-songpal). + +A few notes: + +- The quick start-up mode has to be enabled in order to turn the device on. +- Supports currently only one output terminal, i.e. the volume control works only on the first volume controller as reported by the backend library. +- Some devices, e.g., HT-XT3, do not support decreasing the volume step-by-step correctly. +- Feel free to improve the available services! + +## {% linkable_title Configuration %} + +The platform will be loaded automatically by discovery component. If you want to manually configure it, add the following to your `configuration.yaml` file: + +```yaml +media_player: + - platform: songpal + name: my soundbar + endpoint: http://IP_ADDRESS:10000/sony +``` + +{% configuration %} +name: + description: The name to display for this device. + required: false + type: string +endpoint: + description: API endpoint of the device. + required: true + type: string +{% endconfiguration %} + +See [python-songpal's documentation](https://github.com/rytilahti/python-songpal#locating-the-endpoint) how to get your API endpoint. + +## {% linkable_title Services %} + +In addition to the general [media player services](/components/media_player/#services), the following services are provided: + +### {% linkable_title Service `media_player/songpal_set_sound_setting` %} + +For a list of available settings and their values use [`songpal sound`](https://github.com/rytilahti/python-songpal#sound-settings) command. + +| Service data attribute | Optional | Description | +|------------------------|----------|--------------------------------------------------| +| `entity_id` | yes | Target entity, leave unset for all devices | +| `name` | no | Configuration variable, e.g., `nightmode` | +| `value` | no | New configuration value, e.g., `on` | + + + diff --git a/source/_components/media_player.soundtouch.markdown b/source/_components/media_player.soundtouch.markdown index fa2a550b024..463914f2366 100644 --- a/source/_components/media_player.soundtouch.markdown +++ b/source/_components/media_player.soundtouch.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Soundtouch" -description: "Instructions how to integrate Bose Soundtouch devices into Home Assistant." +description: "Instructions on how to integrate Bose Soundtouch devices into Home Assistant." date: 2016-11-06 13:00 sidebar: true comments: false diff --git a/source/_components/media_player.spotify.markdown b/source/_components/media_player.spotify.markdown index ec347498342..8de7240135f 100644 --- a/source/_components/media_player.spotify.markdown +++ b/source/_components/media_player.spotify.markdown @@ -29,7 +29,7 @@ To create the required Spotify Application: - Login to [Spotify Developer](https://developer.spotify.com) - Visit the [My Applications](https://developer.spotify.com/my-applications/#!/applications) page -- Select **Create An App**. Enter any name and description. Once your application is created, view it and copy your **Client ID** and **Client Secret**, which are used in the Home Assistant configuration file. +- Select **Create An App**. Enter any name and description. Once your application is created, view it and copy your **Client ID** and **Client Secret**, which are used in the Home Assistant configuration file. - Add a **Redirect URI** in the following forms: No SSL: `http://:/api/spotify` @@ -38,7 +38,7 @@ To create the required Spotify Application: The URL is whatever you use to access Home Assistant from outside your network (including port if applicable). -- Click **Save** after adding the URI. You may also need to set the `base_url` attribute of the [HTTP Component](https://home-assistant.io/components/http/). +- Click **Save** after adding the URI. You may also need to set the `base_url` attribute of the [HTTP Component](/components/http/). ## {% linkable_title Configuration %} @@ -71,8 +71,7 @@ After the prerequisites and configuration are complete, restart Home Assistant. The sources are based on if you have streamed to these devices before in Spotify. If you don't have any sources, then simply stream from your phone to another device in your house, Bluetooth, echo, etc. Once you do the sources will show up in the developer console as a device to cast/stream to. Also know that the devices won't show up in the dev-console as sources unless they are powered on as well. ## {% linkable_title URI Links For Playlists/Etc %} -You can send playlists to spotify via the "media_content_type": "playlist" and "media_content_id": "spotify:user:spotify:playlist:37i9dQZF1DWSkkUxEhrBdF" which are a part of the media_player.play_media service, you can test this from the services control panel in the Home Assistant frontend. +You can send playlists to spotify via the "media_content_type": "playlist" and "media_content_id": "spotify:user:spotify:playlist:37i9dQZF1DWSkkUxEhrBdF" which are a part of the [media_player.play_media](/components/media_player/#service-media_playerplay_media) service, you can test this from the services control panel in the Home Assistant frontend. -In this example this is a URI link to the Reggae Infusions playlist, the link below from Spotify explains how to get this URI value to use for playlists in the Spotify component. +In this example this is a URI link to the Reggae Infusions playlist, [this support document from Spotify](https://support.spotify.com/us/using_spotify/share_music/why-do-you-have-two-different-link-formats/) explains how to get this URI value to use for playlists in the Spotify component. -https://support.spotify.com/us/using_spotify/share_music/why-do-you-have-two-different-link-formats/ diff --git a/source/_components/media_player.squeezebox.markdown b/source/_components/media_player.squeezebox.markdown index d091d13b6d9..b226960e31b 100644 --- a/source/_components/media_player.squeezebox.markdown +++ b/source/_components/media_player.squeezebox.markdown @@ -33,3 +33,25 @@ Configuration variables: - **password** (*Optional*): The password, if password protection is enabled.

This platform now uses the web interface of the Logitech Media Server to send commands. The default port of the web interface is 9000. It is the same port that you use to access the LMS through your web browser. Originally, this platform used the telnet interface, which defaults to 9090. If you previously specified the port in your configuration file, you will likely need to update it.

+ +### {% linkable_title Service `squeezebox_call_method` %} + +Call a custom Squeezebox JSONRPC API. + +See documentation for this interface on http://HOST:PORT/html/docs/cli-api.html?player= where HOST and PORT are the host name and port for your Logitech Media Server. + +| Service data attribute | Optional | Description | +| ---------------------- | -------- | ----------- | +| `entity_id` | no | Name(s) of the Squeezebox entities where to run the API method. +| `command` | no | Command to pass to Logitech Media Server (p0 in the CLI documentation). +| `parameters` | yes | Array of additional parameters to pass to Logitech Media Server (p1, ..., pN in the CLI documentation). + +This service can be used to integrate any Squeezebox action to an automation. + +It can also be used to target a Squeezebox from IFTT (or DialogFlow, Alexa...). + +For example, to play an album from your collection, create an IFTT applet like this: +- Trigger: Google assistant, with sentence: `I want to listen to album $` +- Action: JSON post query with such JSON body: +`{ "entity_id": "media_player.squeezebox_radio", "command": "playlist", "parameters": ["loadtracks", "album.titlesearch={{TextField}}"] }` +This can work with title search and basically any thing. The same wouldn't have worked by calling directly Squeezebox server as IFTT cannot escape the text field. diff --git a/source/_components/media_player.ue_smart_radio.markdown b/source/_components/media_player.ue_smart_radio.markdown new file mode 100644 index 00000000000..0a250b6b860 --- /dev/null +++ b/source/_components/media_player.ue_smart_radio.markdown @@ -0,0 +1,38 @@ +--- +layout: page +title: "Logitech UE Smart Radio" +description: "Instructions on how to integrate a Logitech UE Smart Radio player into Home Assistant." +date: 2017-12-09 20:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: ueradio.png +ha_category: Media Player +ha_release: "0.60" +ha_iot_class: "Cloud Polling" +--- + + +The `ue_radio` platform allows you to control a [Logitech UE Smart Radio](https://www.uesmartradio.com) from Home Assistant. This lets you control both Logitech UE Smart Radios and Logitech Squeezebox Radios that have been updated with the UE Smart Radio update. + +To add your UE Smart Radio player to your installation, add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +media_player: + - platform: ue_smart_radio + username: YOUR_USERNAME + password: YOUR_PASSWORD +``` + +{% configuration %} +username: + description: The email you use to log in to `uesmartradio.com`. + required: true + type: string +password: + description: The password you use to log in to `uesmartradio.com`. + required: true + type: string +{% endconfiguration %} diff --git a/source/_components/media_player.universal.markdown b/source/_components/media_player.universal.markdown index 106f114f780..76cbc4a4ba6 100644 --- a/source/_components/media_player.universal.markdown +++ b/source/_components/media_player.universal.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Universal" -description: "Instructions how to create a universal media player in Home Assistant." +description: "Instructions on how to create a universal media player in Home Assistant." date: 2016-01-12 22:00 sidebar: true comments: false diff --git a/source/_components/media_player.vizio.markdown b/source/_components/media_player.vizio.markdown index 7c8cfa363ba..12916a2ed3c 100644 --- a/source/_components/media_player.vizio.markdown +++ b/source/_components/media_player.vizio.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Vizio SmartCast TV" -description: "Instructions how to integrate Vizio SmartCast TV into Home Assistant." +description: "Instructions on how to integrate Vizio SmartCast TV into Home Assistant." date: 2017-07-10 19:00 sidebar: true comments: false @@ -14,7 +14,7 @@ ha_release: 0.49 ha_iot_class: "Local Polling" --- -The `vizio` component will allow you to control [SmartCast](https://www.vizio.com/smartcast-app) compatible TVs (2016+ models). +The `vizio` component will allow you to control [SmartCast](https://www.vizio.com/smartcast-app) compatible TVs (2016+ models). ## Pairing @@ -36,7 +36,7 @@ Make sure that your TV is on before continuing. If you don't know IP address of your TV run following command: -```bash +```bash $ pyvizio --ip=0 --auth=0 discover ``` @@ -56,14 +56,14 @@ Initiation will show you two different values: Finally, at this point a PIN code should be displayed at the top of your TV. With all these values, you can now finish pairing: ```bash -$ pyvizio --ip={ip} pair_finish --token={challenge_token} --pin={tv_pin} +$ pyvizio --ip={ip} pair_finish --token={challenge_token} --pin={tv_pin} ``` -You will need the authentication token returned by this command to configure Home Assistant. +You will need the authentication token returned by this command to configure Home Assistant. ## Configuration -To add your Vizio TV to your installation, add the following to your `configuration.yaml` file: +To add your Vizio TV to your installation, add the following to your `configuration.yaml` file: ```yaml # Example configuration.yaml entry @@ -77,6 +77,7 @@ Configuration variables: - **host** (*Required*): IP address of your TV. - **access_token** (*Required*): Authentication token you received in the last step of the pairing process. +- **suppress_warning** (*Optional*): Set to `true` to disable self-signed certificate warnings. ## Notes and limitations @@ -84,20 +85,10 @@ Configuration variables: If the `Power Mode` of your TV is set to `Eco Mode`, turning the device ON won't work. -### Changing tracks +### Changing tracks -Changing tracks works like channels switching. If you have source other than regular TV it might end do nothing. +Changing tracks works like channels switching. If you have source other than regular TV it might end do nothing. ### Sources Source list shows all external devices connected to the TV through HDMI plus list of internal devices (TV mode, Chrome Cast, etc.). - -

-Vizio SmartCast service is accessible through HTTPS with self-signed certificate. If you have low LOGLEVEL in your Home Assistant configuration, you'll see a lot of warnings like this: -`InsecureRequestWarning: Unverified HTTPS request is being made. Adding certificate verification is strongly advised.` - -You can adjust the log level for `media_player` components with the [logger](https://home-assistant.io/components/logger/) component, or if you need to keep a low log level for `media_player` you could proxy calls to your TV through an NGINX reverse proxy. - -If you want to only ignore only this specific [python urllib3 SSL warning](https://urllib3.readthedocs.io/en/latest/advanced-usage.html#ssl-warnings), you will need to run Home Assistant with the python flag `-W` or the environment variable `PYTHONWARNINGS` set to: -`ignore:Unverified HTTPS request is being made` -

diff --git a/source/_components/media_player.vlc.markdown b/source/_components/media_player.vlc.markdown index 21ed9cdf248..09254957645 100644 --- a/source/_components/media_player.vlc.markdown +++ b/source/_components/media_player.vlc.markdown @@ -60,3 +60,7 @@ You need to add the `homeassistant` user to the `audio` group: ```bash sudo usermod -a -G audio homeassistant ``` + +##### {% linkable_title VLC currently not supported with Hass.io %} + +According to the forum topic ["How to add VLC into my Hassio"](http://community.home-assistant.io/t/how-to-add-vlc-into-my-hassio/23000/5), it is not possible to install packages like VLC on Hass.io. diff --git a/source/_components/media_player.volumio.markdown b/source/_components/media_player.volumio.markdown index f8945adc889..26053822e8a 100644 --- a/source/_components/media_player.volumio.markdown +++ b/source/_components/media_player.volumio.markdown @@ -12,12 +12,11 @@ ha_category: Media Player ha_release: 0.41 --- -The `Volumio` platform allows you to control a [Volumio](http://volumio.org) media player -from Home Assistant. +The `Volumio` platform allows you to control a [Volumio](http://volumio.org) media player from Home Assistant. +The preferred way to set up the Volumio platform is by enabling the [discovery component](/components/discovery/). -To add a Volumio player to your installation, add the following to -your `configuration.yaml` file. +In case the discovery does not work, or you need specific configuration variables, you can add the following to your `configuration.yaml` file: ```yaml # Example configuration.yaml entry diff --git a/source/_components/media_player.webostv.markdown b/source/_components/media_player.webostv.markdown index 102852ead3e..a4afa661dad 100644 --- a/source/_components/media_player.webostv.markdown +++ b/source/_components/media_player.webostv.markdown @@ -1,7 +1,7 @@ --- layout: page title: "LG webOS Smart TV" -description: "Instructions how to integrate a LG webOS Smart TV within Home Assistant." +description: "Instructions on how to integrate a LG webOS Smart TV within Home Assistant." date: 2016-04-18 23:24 sidebar: true comments: false @@ -19,7 +19,7 @@ The `webostv` platform allows you to control a [LG](http://www.lg.com/) webOS Sm To begin with enable *LG Connect Apps* feature in *Network* settings of the TV [instructions](http://www.lg.com/uk/support/product-help/CT00008334-1437131798537-others). -Once basic configuration is added to your `configuration.yaml` *Configuration* card should prompt on your HA's States. Follow the instructions and accept pairing request on your TV. +Once basic configuration is added to your `configuration.yaml` *Configuration* card should prompt on your Home Assistants's states. Follow the instructions and accept pairing request on your TV. Pairing information will be saved to the `filename:` provided in configuration; this process is IP sensitive, in case the IP address of your TV would change in future. @@ -36,16 +36,18 @@ media_player: Configuration variables: -- **host** (*Optional*): The IP of the LG webOS Smart TV, e.g. `192.168.0.10`. +- **host** (*Optional*): The IP of the LG webOS Smart TV, e.g., `192.168.0.10`. - **turn_on_action** (*Optional*): Defines an [action](/docs/automation/action/) to turn the TV on. - **name** (*Optional*): The name you would like to give to the LG webOS Smart TV. - **timeout** (*Optional*): The timeout for connections to the TV in seconds. -- **filename** (*Optional*): The filename where the pairing key with the TV should be stored. This path is relative to Home Assistant's config directory. It defaults to `webostv.conf`. +- **filename** (*Optional*): The filename where the pairing key with the TV should be stored. This path is relative to Home Assistant's config directory. It defaults to `webostv.conf`. **NOTE**: When using multiple TVs each TV will need its own unique file. - **customize** array (*Optional*): List of options to customize. - - ***sources** array (*Optional*): List of hardware and webOS App inputs. + - **sources** array (*Optional*): List of hardware and webOS App inputs. If you do not specify `host:`, all LG webOS Smart TVs within your network will be auto-discovered. +### {% linkable_title Example %} + A full configuration example will look like the sample below: ```yaml @@ -53,7 +55,7 @@ A full configuration example will look like the sample below: media_player: - platform: webostv host: 192.168.0.10 - name: Living Room TV + name: Living Room TV timeout: 5 filename: webostv.conf turn_on_action: @@ -67,10 +69,10 @@ media_player: - makotv - netflix ``` -** avoid using `[ ]` in the `name:` of your device. +Avoid using `[ ]` in the `name:` of your device. -*Turn On Action* +### {% linkable_title Turn on action %} Home Assistant is able to turn on a LG webOS Smart TV if you specify an action, like HDMI-CEC or WakeOnLan. @@ -88,11 +90,42 @@ media_player: turn_on_action: service: wake_on_lan.send_magic_packet data: - mac: B4:E6:2A:1E:11:0F + mac: "B4-E6-2A-1E-11-0F" ``` -Any other [actions](/docs/automation/action/) to power on the device can be configured. +Any other [actions](/docs/automation/action/) to power on the device can be configured. -*Sources* +### {% linkable_title Sources %} To obtain complete list of available sources currently configured on the TV, once the webOS TV is configured and linked, while its powered on head to the **Developer Tools** > **States**, find your `media_player.` and use the sources listed in `source_list:` remembering to split them per line into your `sources:` configuration. + +### {% linkable_title Change channel through play_media service %} + +The `play_media` service can be used in a script to switch to the specified tv channel. +It selects the best matching cannel according to the `media_content_id` parameter: + 1. Channel number *(i.e. '1' or '6')* + 2. Exact channel name *(i.e. 'France 2' or 'CNN')* + 3. Substring in channel name *(i.e. 'BFM' in 'BFM TV')* + +```yaml +# Example action entry in script to switch to channel number 1 +service: media_player.play_media +data: + entity_id: media_player.lg_webos_smart_tv + media_content_id: 1 + media_content_type: "channel" + +# Example action entry in script to switch to channel including 'TF1' in its name +service: media_player.play_media +data: + entity_id: media_player.lg_webos_smart_tv + media_content_id: "TF1" + media_content_type: "channel" +``` + +### {% linkable_title Next/Previous buttons %} + +The behaviour of the next and previsous buttons is different depending on the active source: + + - if the source is 'LiveTV' (television): next/previous buttons act as channel up/down + - otherwise: next/previous buttons act as next/previous track diff --git a/source/_components/media_player.xiaomi_tv.markdown b/source/_components/media_player.xiaomi_tv.markdown new file mode 100644 index 00000000000..ffc2f1efc7d --- /dev/null +++ b/source/_components/media_player.xiaomi_tv.markdown @@ -0,0 +1,51 @@ +--- +layout: page +title: "Xiaomi TV" +description: "Instructions on how to integrate a Xiaomi TV into Home Assistant." +date: 2018-02-12 19:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: xiaomi.png +ha_category: Media Player +ha_release: 0.64 +ha_iot_class: "Assumed State" +--- + +The `xiaomi_tv` platform allows you to control a [Xiaomi TV](http://www.mi.com/en/mitv3s/65flat/). + +You need to make sure the TV is connected to the internet, and that your Home Assistant instance is on the same network. + +To add a TV to your installation, add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +media_player: + - platform: xiaomi_tv +``` + +

+When starting or restarting Home Assistant make sure your TV is off. This is a flaw in the TV itself. +

+ +Configuration variables: + +- **host** (*Optional*): The IP of the Xiaomi TV, eg. 192.168.0.10 +- **name** (*Optional*): The name to use on the frontend. Default is 'Xiaomi TV'. + +If you do not set a host in the configuration file, local TVs will automatically be discovered. + +To manually add a TV you can use the following configuration: + +```yaml +# Example configuration.yaml entry +media_player: + - platform: xiaomi_tv + host: YOUR_TV_IP + name: YOUR_TV_NAME +``` + +

+The platform will never turn your TV off. Instead, it will be put to sleep and woken up. This can be useful, because the selected source of the TV will remain the same. It will essentially turn your TV into a dumb TV. +

diff --git a/source/_components/media_player.yamaha.markdown b/source/_components/media_player.yamaha.markdown index 8ab1d511144..b996e642a47 100644 --- a/source/_components/media_player.yamaha.markdown +++ b/source/_components/media_player.yamaha.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Yamaha Network Receivers" -description: "Instructions how to integrate Yamaha Network Receivers into Home Assistant." +description: "Instructions on how to integrate Yamaha Network Receivers into Home Assistant." date: 2016-03-26 0:58 -0700 sidebar: true comments: false @@ -36,7 +36,9 @@ Configuration variables: default name (often model number) that is returned by the device. - **host** (*Optional*): IP address or hostname of the device - **source_ignore** (*Optional*): List of sources to hide in the front-end -- **source_names** (*Optional*): Mapping of internal AVR source names to custom ones, allowing to rename e.g. `HDMI1` to `ChromeCast` +- **source_names** (*Optional*): Mapping of internal AVR source names to custom ones, allowing one to rename e.g., `HDMI1` to `ChromeCast` +- **zone_ignore** (*Optional*): List of zones to hide in the front-end +- **zone_names** (*Optional*): Mapping of zone names to custom ones, allowing one to rename e.g., `Main_Zone` to `Family Room` ### {% linkable_title Discovery notes %} @@ -50,7 +52,7 @@ Configuration variables: have your receiver switched off. - In some cases, auto-discovery fails due to a known bug in the receiver's firmware. It is possible to manually specify the - receiver's IP address or via it's hostname (if it is discoverable by + receiver's IP address or via its hostname (if it is discoverable by your DNS) then. ### {% linkable_title Supported operations %} @@ -59,7 +61,7 @@ Configuration variables: volume control and source selection. Playback controls, for instance play and stop are available for sources that supports it. - The `play_media` service is implemented for `NET RADIO` source - only. The `media_id` is a `>` separted string of the menu path on + only. The `media_id` is a `>` separated string of the menu path on the vtuner service. For instance `Bookmarks>Internet>WAMC 90.3 FM`. ### {% linkable_title Example configuration %} @@ -76,6 +78,10 @@ media_player: source_names: HDMI1: "ChromeCast" AV4: "Vinyl" + zone_ignore: + - "Zone_2" + zone_names: + Main_Zone: "Family Room" ``` ### {% linkable_title Example `play_media` script %} @@ -107,3 +113,13 @@ script: media_content_id: "Bookmarks>Internet>Radio Paradise" ``` + +### {% linkable_title Service `yamaha_enable_output` %} + +Enable or disable an output port (HDMI) on the receiver. + +| Service data attribute | Optional | Description | +| ---------------------- | -------- | ----------- | +| `entity_id` | yes | String or list of strings that point at `entity_id`s of Yamaha receivers. +| `port` | no | Port to enable or disable, e.g., `hdmi1`. +| `enabled` | no | To enable set true, otherwise set to false. diff --git a/source/_components/media_player.yamaha_musiccast.markdown b/source/_components/media_player.yamaha_musiccast.markdown index 121687b9827..7d98e77102f 100644 --- a/source/_components/media_player.yamaha_musiccast.markdown +++ b/source/_components/media_player.yamaha_musiccast.markdown @@ -16,7 +16,7 @@ The `yamaha_musiccast` platform allows you to control [Yamaha MusicCast Receiver Supported devices are listed on their [German site](https://de.yamaha.com/de/products/contents/audio_visual/musiccast/products.html). -To add a Yamaha Network Receiver to your installation, add the following to your `configuration.yaml` file: +To add a Yamaha MusicCast Receiver to your installation, add the following to your `configuration.yaml` file: ```yaml # Example configuration.yaml entry @@ -27,7 +27,7 @@ media_player: Configuration variables: - **host** (*Required*): IP address or hostname of the device -- **port** (*Optional*): UDP Port +- **port** (*Optional*): UDP source port. If multiple devices are present, specify a different port per device - **interval_seconds** (*Optional*): Polling interval (default: 480 seconds = 8 minutes) A few notes: diff --git a/source/_components/media_player.ziggo_mediabox_xl.markdown b/source/_components/media_player.ziggo_mediabox_xl.markdown new file mode 100644 index 00000000000..0581b320a26 --- /dev/null +++ b/source/_components/media_player.ziggo_mediabox_xl.markdown @@ -0,0 +1,43 @@ +--- +layout: page +title: "Ziggo Mediabox XL" +description: "Instructions on how to integrate the Ziggo Mediabox XL into Home Assistant." +date: 2017-11-10 20:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: ziggo.png +ha_category: Media Player +ha_iot_class: "Local Polling" +ha_release: "0.60" +--- + +The `ziggo_mediabox_xl` component allows you to control a [Ziggo](https://www.ziggo.nl/) Mediabox XL from Home Assistant. + +To add a Ziggo Mediabox XL to your installation, add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +media_player: + - platform: ziggo_mediabox_xl + host: 192.168.0.123 + name: Ziggo Mediabox +``` + +{% configuration %} + host: + description: The hostname or address of the device. + required: true + type: string + name: + description: The name of the device used in the frontend. + required: false + type: string +{% endconfiguration %} + +The channel information (numbers and names) are downloaded from ziggo.nl on startup. + +#### {% linkable_title Preparation of the Mediabox %} + +Makes sure to enable the Home Network ("mijn thuisnetwerk") service in the settings menu of the media box. Once you have set up the Media Library ("mediabiblotheek"), we can determine whether the device is turned on or off. Without this, the component will fail to start. diff --git a/source/_components/melissa.markdown b/source/_components/melissa.markdown new file mode 100644 index 00000000000..46be358b61d --- /dev/null +++ b/source/_components/melissa.markdown @@ -0,0 +1,39 @@ +--- +layout: page +title: "Melissa Climate" +description: "Instructions on how to integrate Melissa Climate into Home Assistant." +date: 2017-01-05 17:30 +sidebar: true +comments: false +sharing: true +footer: true +logo: mclimate.png +ha_category: Hub +featured: false +ha_release: 0.63 +ha_iot_class: "Cloud Polling" +--- + +The `Melissa` component is the main component to connect to a [Melissa Climate](http://seemelissa.com/) A/C control. + +## {% linkable_title Configuration %} + +To set the Melissa component up, add the following information to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +melissa: + username: YOUR_MELISSA_USERNAME + password: YOUR_PASSWORD +``` + +{% configuration %} + username: + description: The username for accessing your Melissa account. + required: true + type: string + password: + description: The password for accessing your Melissa account. + required: true + type: string +{% endconfiguration %} diff --git a/source/_components/mercedesme.markdown b/source/_components/mercedesme.markdown new file mode 100644 index 00000000000..db5774c5183 --- /dev/null +++ b/source/_components/mercedesme.markdown @@ -0,0 +1,27 @@ +--- +layout: page +title: "Mercedes me" +description: "Instructions on how to integrate Mercedes car with Mercedes me into Home Assistant." +date: 2018-01-27 17:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: mercedesme.png +ha_category: Hub +ha_release: 0.63 +ha_iot_class: "Cloud Polling" +--- + + +The `mercedesme` component offers integration with the [Mercedes me](https://www.mercedes-benz.com/de/mercedes-me/) cloud service and provides presence detection as well as sensors such as doors, tires, windows, and service interval. + +This component provides the following platforms: + + - Binary Sensors: Windows, tires, doors and lock. + - Sensors:Fuel status, service interval, remaining km, etc. + - Device tracker: To track location of your car. + +

+ The component was removed. The vendor disabled the API endpoint and a new API is not available currently. +

diff --git a/source/_components/mochad.markdown b/source/_components/mochad.markdown index f27367f0da1..bf0617cefb7 100644 --- a/source/_components/mochad.markdown +++ b/source/_components/mochad.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Mochad" -description: "Instructions how to integrate Mochad into Home Assistant." +description: "Instructions on how to integrate Mochad into Home Assistant." date: 2016-10-20 17:09 sidebar: true comments: false @@ -13,6 +13,8 @@ ha_release: 0.32 The `mochad` component is the main component to integrate all X10 platforms being controlled by [mochad](https://sourceforge.net/projects/mochad/). Besides this component you will have to setup your X10 devices separately. +## {% linkable_title Configuration %} + To integrate your Mochad units with Home Assistant, add the following section to your `configuration.yaml` file: ```yaml @@ -20,10 +22,20 @@ To integrate your Mochad units with Home Assistant, add the following section to mochad: ``` -Configuration variables: +{% configuration %} +host: + description: The host that mochad is running on. + required: false + type: string + default: localhost +port: + description: The port that mochad is running on. + required: false + type: int + default: 1099 +{% endconfiguration %} -- **host** (*Optional*): The host that mochad is running on. Defaults to `localhost`. -- **port** (*Optional*): The port that mochad is running on. Defaults to `1099`. +## {% linkable_title Example %} A full configuration sample could look like the one below: diff --git a/source/_components/modbus.markdown b/source/_components/modbus.markdown index f673298d82e..dcccf0ede67 100644 --- a/source/_components/modbus.markdown +++ b/source/_components/modbus.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Modbus" -description: "Instructions how to integrate Modbus within Home Assistant." +description: "Instructions on how to integrate Modbus within Home Assistant." date: 2015-04-25 9:16 sidebar: true comments: false @@ -16,6 +16,8 @@ ha_iot_class: "Local Push" [Modbus](http://www.modbus.org/) is a serial communication protocol to control PLCs (Programmable logic controller). It currently supports sensors and switches which can be controlled over serial, TCP, and UDP connections. +## {% linkable_title Configuration %} + To add modbus to your installation, add the following to your `configuration.yaml` file: For a network connection: @@ -30,7 +32,10 @@ modbus: Configuration variables: -- **type** (*Required*): Type of the connection to Modbus. +- **type** (*Required*): Type of the connection to Modbus. Possible values are: + - *tcp*: Modbus TCP protocol according to "MODBUS Messaging Implementation Guide version 1.0b" provided by Schneider Automation, + - *udp*: Modbus TCP form, but using UDP for transport (removes the overheads required for TCP), + - *rtuovertcp*: Modbus RTU message transmitted with a TCP/IP wrapper and sent over a network instead of serial lines. - **host** (*Required*): The IP address of your Modbus device, eg. 192.168.1.1. - **port** (*Required*): The port for the communication. - **timeout** (*Optional*): Timeout for slave response in seconds. (default: 3) @@ -51,7 +56,7 @@ modbus: Configuration variables: -- **type** (*Required*): Type of the connection to Modebus. +- **type** (*Required*): Type of the connection to Modbus. - **method** (*Required*): Method of the connection to Modbus. - **port** (*Required*): The port where your Modbus device is connected to your Home Assistant host. - **baudrate** (*Required*): The speed for the serial connection. diff --git a/source/_components/mqtt.markdown b/source/_components/mqtt.markdown index 5514b98c362..275cac866ed 100644 --- a/source/_components/mqtt.markdown +++ b/source/_components/mqtt.markdown @@ -1,7 +1,7 @@ --- layout: page title: "MQTT" -description: "Instructions how to setup MQTT within Home Assistant." +description: "Instructions on how to setup MQTT within Home Assistant." date: 2015-08-07 18:00 sidebar: true comments: false @@ -33,6 +33,10 @@ mqtt: broker: IP_ADDRESS_BROKER ``` +

+The minimal setup uses the embedded MQTT broker, however a separate broker is advised for more stability. +

+ ## {% linkable_title Additional features %} - [Certificate](/docs/mqtt/certificate/) diff --git a/source/_components/mqtt_eventstream.markdown b/source/_components/mqtt_eventstream.markdown index 7dd471e5cbf..4946433e630 100644 --- a/source/_components/mqtt_eventstream.markdown +++ b/source/_components/mqtt_eventstream.markdown @@ -1,7 +1,7 @@ --- layout: page title: "MQTT Eventstream" -description: "Instructions how to setup MQTT eventstream within Home Assistant." +description: "Instructions on how to setup MQTT eventstream within Home Assistant." date: 2016-01-13 08:00 sidebar: true comments: false @@ -15,6 +15,8 @@ ha_iot_class: depends The `mqtt_eventstream` component connects two Home Assistant instances via MQTT. +## {% linkable_title Configuration %} + To integrate MQTT Eventstream into Home Assistant, add the following section to your `configuration.yaml` file: ```yaml @@ -33,6 +35,10 @@ subscribe_topic: description: Topic to receive events from the remote server. required: false type: string +ignore_event: + description: Ignore sending these [events](/docs/configuration/events/) over mqtt. + required: false + type: list {% endconfiguration %} ## {% linkable_title Multiple Instances %} @@ -44,6 +50,9 @@ Events from multiple instances can be aggregated to a single master instance by mqtt_eventstream: publish_topic: master/topic subscribe_topic: slaves/# + ignore_event: + - call_service + - state_changed ``` For a multiple instance setup, each slave would publish to their own topic. diff --git a/source/_components/mqtt_statestream.markdown b/source/_components/mqtt_statestream.markdown index 5b7b832fe91..8b1afaa89d5 100644 --- a/source/_components/mqtt_statestream.markdown +++ b/source/_components/mqtt_statestream.markdown @@ -1,7 +1,7 @@ --- layout: page title: "MQTT Statestream" -description: "Instructions how to setup MQTT Statestream within Home Assistant." +description: "Instructions on how to setup MQTT Statestream within Home Assistant." date: 2017-10-01 20:00 sidebar: true comments: false @@ -15,6 +15,8 @@ ha_iot_class: depends The `mqtt_statestream` component publishes state changes in Home Assistant to individual MQTT topics. +## {% linkable_title Configuration %} + To enable MQTT Statestream in Home Assistant, add the following section to your `configuration.yaml` file: ```yaml diff --git a/source/_components/mychevy.markdown b/source/_components/mychevy.markdown new file mode 100644 index 00000000000..15a6b88ff19 --- /dev/null +++ b/source/_components/mychevy.markdown @@ -0,0 +1,59 @@ +--- +layout: page +title: "MyChevy" +description: "Instructions on how to integrate Chevy Bolt car into Home Assistant." +date: 2017-08-28 17:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: chevy.png +ha_category: Hub +ha_release: 0.62 +ha_iot_class: "Cloud Polling" +--- + +The `MyChevy` component communicates with the [my.chevrolet](https://my.chevrolet.com) website using selenium to log in as your user, and screen scrape the data provided. GM does not make it easy to sign up for any official development program, so this provides a workaround to get access to your data. + +This component provides the following platforms: + + - Binary sensors: if the car is plugged in + - Sensors: Battery Level, Charge Mode, EST Range, Total Distance Traveled + +## {% linkable_title Configuration %} + +To use MyChevy in your installation, add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +mychevy: + username: YOUR_E_MAIL_ADDRESS + password: YOUR_PASSWORD +``` + +{% configuration %} +username: + description: The email address associated with your my.chevrolet account. + required: true + type: string +password: + description: The password for your given my.chevrolet account. + required: true + type: string +{% endconfiguration %} + + +#### {% linkable_title Installation %} + +Because this uses selenium behind the scenes, installation is more complicated than merely pip install. See the [installation instructions](https://github.com/sdague/mychevy). + +#### {% linkable_title Limitations %} + +The architecture of the GM automotive networking imposes some limitations on the functionality of the component. + +The OnStar network link is very slow, and takes 1 - 3 minutes to get information back from the car. As such the mychevy component only polls every 30 minutes to not overwhelms that connection. + +The OnStar network (or more specifically the gateway used by the my.chevrolet website) appears to suffer more than most networks when the car is a) in a garage, and b) it's cold outside (like < 15 degrees F). One of the provided sensors is a status sensor which indicates if we got connectivity with the car on the last polling cycle or not. + +The "API" for this is written by web scraping. As such, it only currently is known to work if you have a Chevy Bolt EV, and only 1 Chevy car connected to OnStar. Patches for extended support should go to the https://github.com/sdague/mychevy project first, then Home Assistant can be extended. + diff --git a/source/_components/mycroft.markdown b/source/_components/mycroft.markdown index 50241b7a2f1..9754096be00 100644 --- a/source/_components/mycroft.markdown +++ b/source/_components/mycroft.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Mycroft" -description: "Instructions how to setup Mycroft AI within Home Assistant." +description: "Instructions on how to setup Mycroft AI within Home Assistant." date: 2017-08-26 17:00 sidebar: true comments: false @@ -12,7 +12,7 @@ ha_category: Voice ha_release: 0.53 --- -[Mycroft](https://mycroft.ai) is a open source voice assistant that allows you to send notifications and more to Mycroft from Home Assistant. +[Mycroft](https://mycroft.ai) is an open source voice assistant that allows you to send notifications and more to Mycroft from Home Assistant. ```yaml # Example configuration.yaml entry diff --git a/source/_components/mysensors.markdown b/source/_components/mysensors.markdown index c91f5a123e6..3cd360e2d26 100644 --- a/source/_components/mysensors.markdown +++ b/source/_components/mysensors.markdown @@ -1,7 +1,7 @@ --- layout: page title: "MySensors" -description: "Instructions how to integrate MySensors sensors into Home Assistant." +description: "Instructions on how to integrate MySensors sensors into Home Assistant." date: 2016-10-01 15:00 +0200 sidebar: true comments: false @@ -24,27 +24,6 @@ Integrate your Serial, Ethernet or MQTT Client MySensors Gateway by adding the f mysensors: gateways: - device: '/dev/ttyUSB0' - persistence_file: 'path/mysensors.json' - baud_rate: 38400 - nodes: - 1: - name: 'kitchen' - 3: - name: 'living_room' - - device: '/dev/ttyACM0' - persistence_file: 'path/mysensors2.json' - baud_rate: 115200 - - device: '192.168.1.18' - persistence_file: 'path/mysensors3.json' - tcp_port: 5003 - - device: mqtt - persistence_file: 'path/mysensors4.json' - topic_in_prefix: 'mygateway1-out' - topic_out_prefix: 'mygateway1-in' - optimistic: false - persistence: true - retain: true - version: '2.0' ``` {% configuration %} @@ -62,6 +41,11 @@ mysensors: required: false type: int default: 115200 + persistence_file: + description: The path to a file to save sensor information. The file extension determines the file type. Currently supported file types are 'pickle' and 'json'. + required: false + type: string + default: path/to/config/directory/mysensors.pickle tcp_port: description: Specifies the port of the connected TCP Ethernet gateway. required: false @@ -83,23 +67,14 @@ mysensors: type: map keys: name: - description: The name the node will be renamed to. This nodename becomes part of the entity_id. Default entity_id is [sketch_name]\_[node_id]\_[child_id] and when this name is set, the entity_id becomes [name]\_[child_id]. + description: The name the node will be renamed to. This node name becomes part of the entity_id. Default entity_id is [sketch_name]\_[node_id]\_[child_id] and when this name is set, the entity_id becomes [name]\_[child_id]. required: true type: string - debug: - description: This option has been deprecated. Please remove this from your config if you have it included. Use the [logger component](/components/logger/) to filter log messages on log level. - required: false - type: int persistence: description: Enable or disable local persistence of sensor information. If this is disabled, then each sensor will need to send presentation messages after Home Assistant starts. required: false type: int default: true - persistence_file: - description: The path to a file to save sensor information. The file extension determines the file type. Currently supported file types are 'pickle' and 'json'. - required: false - type: string - default: path/to/config/directory/mysensors.pickle version: description: Specifies the MySensors protocol version to use. Supports 1.4, 1.5 and 2.0. required: false @@ -138,17 +113,47 @@ mqtt: The MQTT gateway requires MySensors version 2.0 and only the MQTT client gateway is supported.

+### {% linkable_title Extended configuration example %} + +```yaml +# Example configuration.yaml entry +mysensors: + gateways: + - device: '/dev/ttyUSB0' + persistence_file: 'path/mysensors.json' + baud_rate: 38400 + nodes: + 1: + name: 'kitchen' + 3: + name: 'living_room' + - device: '/dev/ttyACM0' + persistence_file: 'path/mysensors2.json' + baud_rate: 115200 + - device: '192.168.1.18' + persistence_file: 'path/mysensors3.json' + tcp_port: 5003 + - device: mqtt + persistence_file: 'path/mysensors4.json' + topic_in_prefix: 'mygateway1-out' + topic_out_prefix: 'mygateway1-in' + optimistic: false + persistence: true + retain: true + version: '2.0' +``` + ### {% linkable_title Presentation %} Present a MySensors sensor or actuator, by following these steps: 1. Connect the serial gateway to your computer or the Ethernet or MQTT gateway to your network. 2. Configure the MySensors component in `configuration.yaml`. -3. Start hass. +3. Start Home Assistant. 4. Write and upload your MySensors sketch to the sensor. Make sure you: - Send sketch name. - Present the sensor's S_TYPE. - - Send at least one initial value per V_TYPE. In version 2.0 of MySensors this has to be done in the loop function. See below for an example in 2.0 of how to make sure the initial value has been received by the controller. + - Send at least one initial value per V_TYPE. In version 2.0 of MySensors, this has to be done in the loop function. See below for an example in 2.0 of how to make sure the initial value has been received by the controller. 5. Start the sensor. ```cpp @@ -231,9 +236,11 @@ void receive(const MyMessage &message) { } ``` -### {% linkable_title Heartbeats %} +### {% linkable_title SmartSleep %} -Sending a heartbeat from the MySensors device to Home Assistant activates the SmartSleep functionality in Home Assistant. This means that messages are buffered and only sent to the device upon receiving a heartbeat from the device. State changes are stored so that only the last requested state change is sent to the device. Other types of messages are queued in a FIFO queue. SmartSleep is useful for battery powered actuators that are waiting for commands. See the MySensors library API for information on how to send heartbeats and sleep device. +Sending a heartbeat, `I_HEARTBEAT_RESPONSE`, from the MySensors device to Home Assistant, using MySensors version 2.0 - 2.1, activates the SmartSleep functionality in Home Assistant. This means that messages are buffered and only sent to the device upon receiving a heartbeat from the device. State changes are stored so that only the last requested state change is sent to the device. Other types of messages are queued in a FIFO queue. SmartSleep is useful for battery powered actuators that are waiting for commands. See the MySensors library API for information on how to send heartbeats and sleep the device. + +In MySensors version 2.2 the serial API changed from using `I_HEARTBEAT_RESPONSE` to signal SmartSleep, to using `I_PRE_SLEEP_NOTIFICATION` and `I_POST_SLEEP_NOTIFICATION`. Home Assistant has been upgraded to support the new message types and will activate SmartSleep when receiving a message of type `I_PRE_SLEEP_NOTIFICATION`, if using MySensors version 2.2.x or higher. If Home Assistant is configured to use MySensors version 2.0 - 2.1 the old SmartSleep behavior is retained. ### {% linkable_title Message validation %} @@ -247,7 +254,7 @@ logger: homeassistant.components.mysensors: debug mysensors: debug ``` -The log should inform you of messages that failed validation or if a child value is missing that is required for a certain child type. Note that the log will log all possible combinations of platforms for a child type that failed validation. It is normal to see some platforms fail validation if the child type supports multiple platforms and your sketch doesn't send all corresponding value types. Eg. the S_BARO child type supports both V_PRESSURE and V_FORECAST value types. If you only send a V_PRESSURE value, an S_BARO entity with V_PRESSURE value will be set up for the sensor platform. But the log will inform of a sensor platform that failed validation due to missing V_FORECAST value type for the S_BARO child. Home Assistant will log failed validations of child values at warning level if one required value type for a platform has been received, but other required value types are missing. Most failed validations are logged at debug level. +The log should inform you of messages that failed validation or if a child value is missing that is required for a certain child type. Note that the log will log all possible combinations of platforms for a child type that failed validation. It is normal to see some platforms fail validation if the child type supports multiple platforms and your sketch doesn't send all corresponding value types. Eg. the S_BARO child type supports both V_PRESSURE and V_FORECAST value types. If you only send a V_PRESSURE value, an S_BARO entity with V_PRESSURE value will be set up for the sensor platform. However, the log will inform of a sensor platform that failed validation due to missing V_FORECAST value type for the S_BARO child. Home Assistant will log failed validations of child values at warning level if one required value type for a platform has been received, but other required value types are missing. Most failed validations are logged at debug level. Message validation was introduced in version 0.52 of Home Assistant. diff --git a/source/_components/namecheapdns.markdown b/source/_components/namecheapdns.markdown index 3331080fa93..4f68adb4606 100644 --- a/source/_components/namecheapdns.markdown +++ b/source/_components/namecheapdns.markdown @@ -16,7 +16,7 @@ ha_release: 0.56 With the `namecheapdns` component you can automatically update your dynamic DNS entry at [namecheapdns](https://www.namecheap.com/store/domains/freedns/).

-Namecheap only supports IPv4 adresses to update. +Namecheap only supports IPv4 addresses to update.

To use the component in your installation, add the following to your `configuration.yaml` file: diff --git a/source/_components/neato.markdown b/source/_components/neato.markdown index 6e0849e6f01..43aca42701f 100644 --- a/source/_components/neato.markdown +++ b/source/_components/neato.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Neato Robotics" -description: "Instructions how to integrate your Neato within Home Assistant." +description: "Instructions on how to integrate your Neato within Home Assistant." date: 2016-10-09 20:15 sidebar: true comments: false @@ -12,22 +12,28 @@ ha_category: Hub ha_release: 0.33 --- -The `neato` component allows you to control your [Neato Botvac Connected](https://www.neatorobotics.com/robot-vacuum/botvac-connected-series/botvac-connected/). +The `neato` component allows you to control your [Neato Botvac Connected Robots](https://www.neatorobotics.com/robot-vacuum/botvac-connected-series/). To enable `neato` in your installation, add the following to your `configuration.yaml` file: ```yaml # Example configuration.yaml entry neato: - username: USERNAME - password: PASSWORD + username: YOUR_USERNAME + password: YOUR_PASSWORD ``` -Configuration variables: - -- **username** (*Required*): Username for the Neato account. -- **password** (*Required*): Password for the Neato account. +{% configuration %} +username: + description: Username for the Neato account. + required: true + type: string +password: + description: Password for the Neato account. + required: true + type: string +{% endconfiguration %}

-The Home Assistant Neato platform has only be tested with a Botvac Connected. There is no support for the Botvac D3 Connected and Botvac D5 Connected robots at this time. +After the update to firmware 4.0 (which adds cleaning maps) there is also support for displaying the maps of the Botvac D3 Connected and Botvac D5 Connected robots. More information on how to update can be found [here](https://support.neatorobotics.com/hc/en-us/articles/115004320694-Software-Update-4-0-for-Neato-Botvac-Connected-D3-D5-).

diff --git a/source/_components/nest.markdown b/source/_components/nest.markdown index b3d376c50fc..a6e021b94fa 100644 --- a/source/_components/nest.markdown +++ b/source/_components/nest.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Nest" -description: "Instructions how to integrate Nest into Home Assistant." +description: "Instructions on how to integrate Nest into Home Assistant." date: 2016-01-29 21:57 sidebar: true comments: false @@ -10,7 +10,7 @@ footer: true logo: nest.png ha_category: Hub featured: true -ha_iot_class: "Cloud Polling" +ha_iot_class: "Cloud Push" --- The Nest component is the main component to integrate all [Nest](https://nest.com/) related platforms. To connect Nest, you will have to [sign up for a developer account](https://developers.nest.com/products) and get a `client_id` and `client_secret`. @@ -27,14 +27,14 @@ The Nest component is the main component to integrate all [Nest](https://nest.co - Product name must be unique. We recommend [email] - Home Assistant. - The description, users, URLs can all be anything you want. - Leave the "Redirect URI" Field blank -7. For permissions check every box and if it's an option select the read/write option. +7. For permissions check every box and if it's an option select the read/write option. Note: there are important permissions under the "Other Permissions" category. If you are only adding a thermostat, do not just select the permissions under "Thermostat". You still need to check the boxes under "Other Permissions" in order to give you access to features like away mode, ETA, structure read/write, and postal code. - The description requires a specific format to be accepted. - Use "[Home Assistant] [Edit] [For Home Automation]" as the description as it is not super important. 8. Click "Create Product" 9. Once the new product page opens the "Product ID" and "Product Secret" are located on the right side. These will be used as `client_id` and `client_secret` below. 10. Once Home Assistant is started, a configurator will pop up asking you to log into your Nest account and copy a PIN code into Home Assistant. -Connecting to the Nest Developer API requires outbound port 8553 on your firewall. The configuration will fail if this is not accessible. +Connecting to the Nest Developer API requires outbound port 9553 on your firewall. The configuration will fail if this is not accessible. ### {% linkable_title Configuration %} @@ -65,7 +65,15 @@ Configuration variables: Currently there is a single `nest.set_mode` service available to switch between "away" and "home" modes. This service requires a `home_mode` param and has an -optional `structure` param. +optional `structure` param. While setting "away" mode, an estimated arrival time +can also be set with `eta`, `eta_window`, and `trip_id` parameters. + +- **home_mode** (*Required*): `home` or `away` +- **structure** (*Optional*): Structure(s). Default apply to all structures connected with Home Assistant. +- **eta** (*Optional*): Estimated Time of Arrival from now. +- **eta_window** (*Optional*): ETA window (default is 1 minute). +- **trip_id** (*Optional*): Unique ID for the trip. Using an existing trip ID will update that trip's ETA. + ```yaml # Example script to set away, no structure specified so will execute for all @@ -86,3 +94,16 @@ set_nest_home: structure: - Building ``` + +```yaml +# Example script to set eta, structure specified +set_nest_eta: + sequence: + - service: nest.set_mode + data: + home_mode: away + structure: + - Building + eta: 00:10:30 + eta_window: 00:05 +``` diff --git a/source/_components/netatmo.markdown b/source/_components/netatmo.markdown index a7b6a30a0c0..0efe4ac968c 100644 --- a/source/_components/netatmo.markdown +++ b/source/_components/netatmo.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Netatmo" -description: "Instructions how to integrate Netatmo component into Home Assistant." +description: "Instructions on how to integrate Netatmo component into Home Assistant." date: 2016-06-02 08:10 sidebar: true comments: false @@ -55,6 +55,3 @@ That's it. You can copy and paste your new `client id` and `client secret` in yo

-

-The Home Assistant Netatmo platform has only be tested with the classic indoor, outdoor module and rain meter. There is no support for the wind meter module at this time because developers does not own these modules. -

diff --git a/source/_components/netgear_lte.markdown b/source/_components/netgear_lte.markdown new file mode 100644 index 00000000000..36ce55a6fdc --- /dev/null +++ b/source/_components/netgear_lte.markdown @@ -0,0 +1,39 @@ +--- +layout: page +title: "Netgear LTE" +description: "Instructions on how to integrate your Netgear LTE modem within Home Assistant." +date: 2018-06-06 23:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: netgear.png +ha_release: 0.72 +ha_category: Other +ha_iot_class: "Local Polling" +--- + +The Netgear LTE integration for Home Assistant allows you to observe and control [Netgear LTE modems](https://www.netgear.com/home/products/mobile-broadband/lte-modems/default.aspx), currently only tested with LB2120. + +The integration provides: +* a notify service that will send an SMS +* a sensor with the number of unread SMS messages in the inbox +* a sensor with data usage + +```yaml +# Example configuration.yaml entry +netgear_lte: + - host: IP_ADDRESS + password: SECRET +``` + +{% configuration %} +host: + description: The IP address of the modem web interface. + required: true + type: string +password: + description: The password used for the modem web interface. + required: true + type: string +{% endconfiguration %} diff --git a/source/_components/notify.apns.markdown b/source/_components/notify.apns.markdown index 30737d617ec..dcad472dbb1 100644 --- a/source/_components/notify.apns.markdown +++ b/source/_components/notify.apns.markdown @@ -1,7 +1,7 @@ --- layout: page title: "APNS" -description: "Instructions how to add APNS notifications to Home Assistant." +description: "Instructions on how to add APNS notifications to Home Assistant." date: 2016-09-05 23:00 sidebar: true comments: false diff --git a/source/_components/notify.aws_lambda.markdown b/source/_components/notify.aws_lambda.markdown index 21ef850da95..be5a5494caa 100644 --- a/source/_components/notify.aws_lambda.markdown +++ b/source/_components/notify.aws_lambda.markdown @@ -1,7 +1,7 @@ --- layout: page title: "AWS Lambda" -description: "Instructions how to invoke AWS Lambda functions from Home Assistant." +description: "Instructions on how to invoke AWS Lambda functions from Home Assistant." date: 2016-05-14 16:35 sidebar: true comments: false diff --git a/source/_components/notify.aws_sns.markdown b/source/_components/notify.aws_sns.markdown index 21a6b48cc55..cfa69e00843 100644 --- a/source/_components/notify.aws_sns.markdown +++ b/source/_components/notify.aws_sns.markdown @@ -1,7 +1,7 @@ --- layout: page title: "AWS SNS" -description: "Instructions how to publish messages to AWS SNS from Home Assistant." +description: "Instructions on how to publish messages to AWS SNS from Home Assistant." date: 2016-05-14 16:35 sidebar: true comments: false diff --git a/source/_components/notify.aws_sqs.markdown b/source/_components/notify.aws_sqs.markdown index e40e81050b1..a1e8a33f8bd 100644 --- a/source/_components/notify.aws_sqs.markdown +++ b/source/_components/notify.aws_sqs.markdown @@ -1,7 +1,7 @@ --- layout: page title: "AWS SQS" -description: "Instructions how to publish messages to AWS SQS from Home Assistant." +description: "Instructions on how to publish messages to AWS SQS from Home Assistant." date: 2016-05-14 16:35 sidebar: true comments: false diff --git a/source/_components/notify.ciscospark.markdown b/source/_components/notify.ciscospark.markdown index 96bc67c4968..fb55b90a6f9 100644 --- a/source/_components/notify.ciscospark.markdown +++ b/source/_components/notify.ciscospark.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Cisco Spark" -description: "Instructions how to add CiscoSpark notifications to Home Assistant." +description: "Instructions on how to add CiscoSpark notifications to Home Assistant." date: 2017-02-20 15:00 sidebar: true comments: false @@ -18,6 +18,9 @@ To use this notification platform you need to get a developer token. To obtain a At this time you also need to specify the `Cisco Spark` `roomid`. The `roomid` can also be found at [Spark for Developers](https://developer.ciscospark.com/index.html). Just look in the Documentation under Rooms. +In order to get notified for all new messages in the room you will need to create a bot. This will post the messages from the bot and mark them as new for you which will alert you. If you use your own personal token the messages are added to the room but no notification is triggered. +Once you have created the bot through the new App menu you will need to add the bot to the room that you are a member of as well. Now use the bot access token in your configuration below. + To enable the Cisco Spark notification in your installation, add the following to your `configuration.yaml` file: ```yaml diff --git a/source/_components/notify.clickatell.markdown b/source/_components/notify.clickatell.markdown index 0c274c9a1b7..8ac5d9a614c 100644 --- a/source/_components/notify.clickatell.markdown +++ b/source/_components/notify.clickatell.markdown @@ -16,7 +16,7 @@ ha_release: 0.56 The `clickatell` platform uses [Clickatell](https://clickatell.com) to deliver SMS notifications from Home Assistant. ### Get your Clickatell API Credentials -Go to your [Clickatell SMS Platform Portal](https://portal.clickatell.com/#/) section and create a new SMS integration. There are three screens of information required to creater an integration. Please ensure the following: +Go to your [Clickatell SMS Platform Portal](https://portal.clickatell.com/#/) section and create a new SMS integration. There are three screens of information required to create an integration. Please ensure the following: 1. Give the new Integration an identification name. 2. Ensure it is set for 'production' use. @@ -40,7 +40,7 @@ Configuration variables: * **name** (Optional): Setting the optional parameter name allows multiple notifiers to be created. The default value is `clickatell`. The notifier will bind to the service notify.NOTIFIER_NAME. * **api_key** (Required): Your API key. -* **recipient** (Required): Your phone number. This is where you want to send your notification SMS messages. e.g. `61444333444`. +* **recipient** (Required): Your phone number. This is where you want to send your notification SMS messages. e.g., `61444333444`. -To use notifications, please see the [getting started with automation page](https://home-assistant.io/getting-started/automation/). +To use notifications, please see the [getting started with automation page](/getting-started/automation/). diff --git a/source/_components/notify.clicksend.markdown b/source/_components/notify.clicksend.markdown index 96a43adfe12..8d619617b42 100644 --- a/source/_components/notify.clicksend.markdown +++ b/source/_components/notify.clicksend.markdown @@ -15,27 +15,54 @@ ha_release: 0.48 The `clicksend` platform uses [ClickSend](https://clicksend.com) to deliver notifications from Home Assistant. -### Get your ClickSend API Credentials +## {% linkable_title Prerequisites %} + Go to your [ClickSend Dashboard](https://dashboard.clicksend.com) section and create your new project. After creating your project, you should now be able to obtain your `username` and `api_key`. -### Configuration +## {% linkable_title Configuration %} + To add ClickSend to your installation, add the following to your Home Assistant `configuration.yaml` file: ```yaml +# Example configuration.yaml entry notify: - platform: clicksend name: ClickSend username: CLICKSEND_USERNAME api_key: CLICKSEND_API_KEY recipient: PHONE_NO + +# Multiple recipients +notify: + - platform: clicksend + name: ClickSend + username: CLICKSEND_USERNAME + api_key: CLICKSEND_API_KEY + recipient: [PHONE_NO1, PHONE_NO2] ``` -Configuration variables: +{% configuration %} +name: + description: "Setting the optional parameter name allows multiple notifiers to be created. The default value is `ClickSend`. The notifier will bind to the service `notify.NOTIFIER_NAME`." + required: false + type: string +username: + description: Your Clicksend username. + required: true + type: string +api_key: + description: Your Clicksend API Key. + required: true + type: string +recipient: + description: "A single or multiple phone numbers. This is where you want to send your SMS notification messages, e.g., `09171234567` or `[09171234567, 09177654321]`." + required: true + type: string or list +sender: + description: The name or number of the sender. + required: false + type: string + default: recipient +{% endconfiguration %} -* **name** (Optional): Setting the optional parameter name allows multiple notifiers to be created. The default value is `ClickSend`. The notifier will bind to the service notify.NOTIFIER_NAME. -* **username** (Required): Your `Username`. -* **api_key** (Required): Your `API Key`. -* **recipient** (Required): Your phone no. This is where you want to send your notification SMS messages. eg: `09171234567` - - -To use notifications, please see the [getting started with automation page](https://home-assistant.io/getting-started/automation/). +To use notifications, please see the [getting started with automation page](/getting-started/automation/). diff --git a/source/_components/notify.clicksend_tts.markdown b/source/_components/notify.clicksend_tts.markdown index 28e860834f8..6009c9e9871 100644 --- a/source/_components/notify.clicksend_tts.markdown +++ b/source/_components/notify.clicksend_tts.markdown @@ -38,5 +38,5 @@ Configuration variables: * **language** (Optional): The language you want to use to convert the message to audio. Accepted values are found in the [ClickSend Documentation](http://docs.clicksend.apiary.io/#reference/voice/voice-languages). Default value is `en-us`. * **voice** (Optional): The voice that needs to be used to play the message to the recipient. Allowed values are `female` or `male`. Default value is `female`. -To use notifications, please see the [getting started with automation page](https://home-assistant.io/getting-started/automation/). +To use notifications, please see the [getting started with automation page](/getting-started/automation/). diff --git a/source/_components/notify.command_line.markdown b/source/_components/notify.command_line.markdown index a5d3b6a5942..4f82febe402 100644 --- a/source/_components/notify.command_line.markdown +++ b/source/_components/notify.command_line.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Command line Notify" -description: "Instructions how to add command line notifications to Home Assistant." +description: "Instructions on how to add command line notifications to Home Assistant." date: 2016-02-22 20:00 sidebar: true comments: false diff --git a/source/_components/notify.discord.markdown b/source/_components/notify.discord.markdown index 657b94e84e5..01029fb4b1c 100644 --- a/source/_components/notify.discord.markdown +++ b/source/_components/notify.discord.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Discord" -description: "Instructions how to add Discord notifications to Home Assistant." +description: "Instructions on how to add Discord notifications to Home Assistant." date: 2016-01-14 15:15 sidebar: true comments: false @@ -16,7 +16,7 @@ The [Discord service](https://discordapp.com/) is a platform for the notify comp In order to get a token you need to go to the [Discord My Apps page](https://discordapp.com/developers/applications/me) and create a new application. Once the application is ready, create a [bot](https://discordapp.com/developers/docs/topics/oauth2#bots) user (**Create a Bot User**) and activate **Require OAuth2 Code Grant**. Retrieve the **Client ID** and the (hidden) **Token** of your bot for later. -When setting up the application you can use this [icon](https://home-assistant.io/demo/favicon-192x192.png). +When setting up the application you can use this [icon](/demo/favicon-192x192.png). To use Discord notifications, add the following to your `configuration.yaml` file: @@ -35,11 +35,11 @@ Configuration variables: ### {% linkable_title Setting up the bot %} -Bots can only send messages to servers. To add the bot to a server you are an admin on, get the details of the bot from the [Discord My Apps page](https://discordapp.com/developers/applications/me). +Bots can only send messages to servers. To add the bot to a server you are an admin on, get the details of the bot from the [Discord My Apps page](https://discordapp.com/developers/applications/me).

-

+

Now use the Discord Authorization page with the **Client ID** of your [bot](https://discordapp.com/developers/docs/topics/oauth2#bots). diff --git a/source/_components/notify.ecobee.markdown b/source/_components/notify.ecobee.markdown index 18ba15b94b2..53f97f69d12 100644 --- a/source/_components/notify.ecobee.markdown +++ b/source/_components/notify.ecobee.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Ecobee Notify" -description: "Instructions how to setup the Ecobee notification component within Home Assistant." +description: "Instructions on how to setup the Ecobee notification component within Home Assistant." date: 2016-05-12 09:00 sidebar: true comments: false diff --git a/source/_components/notify.facebook.markdown b/source/_components/notify.facebook.markdown index 209fe6c827d..5b4e4979477 100644 --- a/source/_components/notify.facebook.markdown +++ b/source/_components/notify.facebook.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Facebook Messenger" -description: "Instructions how to add Facebook user notifications to Home Assistant." +description: "Instructions on how to add Facebook user notifications to Home Assistant." date: 2016-12-31 14:14 sidebar: true comments: false @@ -50,7 +50,7 @@ automation: - '+919784516314' ``` -You can also send messages to users that do not have stored their phone number with Facebook, but this requires a bit more work. The Messenger platform uses page specific user IDs instead of a global user ID. You will need to enable a webhook for the "messages" event in Facebook's developer console. Once a user writes a message to a page, that webhook will then receive the user's page specifc ID as part of the webhook's payload. Below is a simple PHP script that reacts to the message "get my id" and sends a reply containing the user's ID: +You can also send messages to users that do not have stored their phone number on Facebook, but this requires a bit more work. The Messenger platform uses page-specific user IDs instead of a global user ID. You will need to enable a webhook for the "messages" event in Facebook's developer console. Once a user writes a message to a page, that webhook will then receive the user's page specific ID as part of the webhook's payload. Below is a simple PHP script that reacts to the message "get my id" and sends a reply containing the user's ID: ```php + +

+ +You will need the last part of the URL which is the `access_token` for your room. + +

+ +

+ +## {% linkable_title Configuration %} + +To add Flock notifications to your installation, add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +notify: + - name: NOTIFIER_NAME + platform: flock + access_token: YOUR_ROOM_TOKEN +``` + +{% configuration %} +name: + description: "The optional parameter `name` allows multiple notifiers to be created. The notifier will bind to the service `notify.NOTIFIER_NAME`." + required: false + type: string + default: notify +access_token: + description: The last part of the webhook URL. + required: true + type: string +{% endconfiguration %} + +To use notifications, please see the [getting started with automation page](/getting-started/automation/). diff --git a/source/_components/notify.free_mobile.markdown b/source/_components/notify.free_mobile.markdown index 0123c7fec5d..f02c52ea304 100644 --- a/source/_components/notify.free_mobile.markdown +++ b/source/_components/notify.free_mobile.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Free Mobile" -description: "Instructions how to add user notifications to Home Assistant." +description: "Instructions on how to add user notifications to Home Assistant." date: 2016-01-12 08:36 sidebar: true comments: false diff --git a/source/_components/notify.gntp.markdown b/source/_components/notify.gntp.markdown index 29bda0c15ac..da4f718eb29 100644 --- a/source/_components/notify.gntp.markdown +++ b/source/_components/notify.gntp.markdown @@ -30,7 +30,7 @@ Configuration variables: - **name** (*Optional*): Setting the optional parameter `name` allows multiple notifiers to be created. The default value is `notify`. The notifier will bind to the service `notify.NOTIFIER_NAME`. - **app_name** (*Optional*): The application name that will be displayed on every notification and will be registered with the server. -- **app_icon** (*Optional*): The icon that will be displayed on every notification. You can provide a HTTP URL or a `file://` URL. File URLs only work if Home Assistant and the GNTP server are running on the same machine. If no `app_icon` is set a local copy of the Home Assistant logo will be used. If you choose to use a HTTP URL please make the maximum image size 150 px by 150 px as Growl for Mac will sometimes timeout when registering. +- **app_icon** (*Optional*): The icon that will be displayed on every notification. You can provide an HTTP URL or a `file://` URL. File URLs only work if Home Assistant and the GNTP server are running on the same machine. If no `app_icon` is set a local copy of the Home Assistant logo will be used. If you choose to use an HTTP URL please make the maximum image size 150 px by 150 px as Growl for Mac will sometimes timeout when registering. - **hostname** (*Optional*): The hostname or IP address of the GNTP server to contact. - **password** (*Optional*): The password to authenticate to the GNTP server with. - **port** (*Optional*): The port that the GNTP server runs on. The specification states that servers should not allow users to use any port other than 23053 but `port` is provided here just in case. diff --git a/source/_components/notify.group.markdown b/source/_components/notify.group.markdown index e68b76112e5..928de178e78 100644 --- a/source/_components/notify.group.markdown +++ b/source/_components/notify.group.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Notify Group" -description: "Instructions how to setup the notify group platform." +description: "Instructions on how to setup the notify group platform." date: 2016-08-18 00:12 sidebar: true comments: false diff --git a/source/_components/notify.hipchat.markdown b/source/_components/notify.hipchat.markdown index d36905f38ed..877bcd8cd82 100644 --- a/source/_components/notify.hipchat.markdown +++ b/source/_components/notify.hipchat.markdown @@ -1,7 +1,7 @@ --- layout: page title: "HipChat" -description: "Instructions how to add HipChat notifications to Home Assistant." +description: "Instructions on how to add HipChat notifications to Home Assistant." date: 2017-08-10 15:00 sidebar: true comments: false diff --git a/source/_components/notify.html5.markdown b/source/_components/notify.html5.markdown index 34547169778..36dd74067e6 100644 --- a/source/_components/notify.html5.markdown +++ b/source/_components/notify.html5.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Push Notifications" -description: "Instructions how to use the HTML5 push notifications platform from Home Assistant." +description: "Instructions on how to use the HTML5 push notifications platform from Home Assistant." date: 2016-08-17 21:58 sidebar: true comments: false @@ -14,6 +14,10 @@ ha_release: 0.27 The `html5` notification platform enables you to receive push notifications to Chrome or Firefox, no matter where you are in the world. `html5` also supports Chrome and Firefox on Android, which enables native-app-like integrations without actually needing a native app. +

+HTML5 push notifications **do not** work on iOS. +

+ To enable this platform, add the following lines to your `configuration.yaml` file: ```yaml @@ -21,41 +25,44 @@ To enable this platform, add the following lines to your `configuration.yaml` fi notify: - name: NOTIFIER_NAME platform: html5 - gcm_api_key: 'gcm-sender-key' + gcm_api_key: 'gcm-server-key' gcm_sender_id: 'gcm-sender-id' ``` Configuration variables: - **name** (*Optional*): Setting the optional parameter `name` allows multiple notifiers to be created. The default value is `notify`. The notifier will bind to the service `notify.NOTIFIER_NAME`. -- **gcm_api_key** (*Required if pushing to Chrome*): The API key provided to you by Google for Google Cloud Messaging (GCM). Required to push to Chrome. +- **gcm_api_key** (*Required if pushing to Chrome*): The API Server key provided to you by Google for Google Cloud Messaging (GCM). Required to push to Chrome. - **gcm_sender_id** (*Required if pushing to Chrome*): The sender ID provided to you by Google for Google Cloud Messaging (GCM). Required to push to Chrome. ### {% linkable_title Getting ready for Chrome %} -1. Create new project at [https://console.cloud.google.com/home/dashboard](https://console.cloud.google.com/home/dashboard). -2. Go to [https://console.cloud.google.com/apis/credentials/domainverification](https://console.cloud.google.com/apis/credentials/domainverification) and verify your domain. -3. After that, go to [https://console.firebase.google.com](https://console.firebase.google.com) and select import Google project, select the project you created. -4. Then, click the cogwheel on top left and select "Project settings". -5. Select 'Cloud Messaging' tab, listed beneath Project Credentials will be your 152 character 'Server Key' and 12 digit ID 'Sender ID'. +1. Make sure you can access your Home Assistant installation from outside your network over https ([see docs](/docs/configuration/remote/)). +2. Create a new project at [https://console.cloud.google.com/home/dashboard](https://console.cloud.google.com/home/dashboard). +3. Go to [https://console.cloud.google.com/apis/credentials/domainverification](https://console.cloud.google.com/apis/credentials/domainverification) and verify your domain via Google Webmaster Central / Search Console - [instructions](#verify-your-domain). +4. With the domain verified, go to [https://console.firebase.google.com](https://console.firebase.google.com), select import Google project, and select the project you created. +5. Then, click the cogwheel on top left and select "Project settings". +6. Select 'Cloud Messaging' tab, listed beneath Project Credentials will be your 152 character 'Server Key' and 12 digit ID 'Sender ID' you need for configuring this component. -#### {% linkable_title Verify your domain with Hass.io %} +#### {% linkable_title Verify your domain %} -1. For verifying your domain you need to download a file in step 2. -2. Create a dictionary named "www" in you Hass.io configuration dictionary. -3. Place the file (something like this: google*.html) in the "www" directory. -4. You can open it by going to **https://yourdomain/local/exact_file_name.html** -5. Proceed with step 3. +Follow these steps to verify domain ownership with Google Webmaster Central / Search Console: +1. Enter your domain and add **'/local'** at the end, ie. https://example.com:8123/local +2. Select HTML file verification and download the google*.html file. +2. Create a directory named "www" in your Home Assistant configuration directory (/config share from Samba add-on). +3. Place the downloaded google*.html file in the "www" directory. +4. RESTART Home Assistant - this is important! +5. Verify the file can be accessed in the browser, ie. **https://example.com:8123/local/google123456789.html** (change filename) - you should a plain text message saying "google-site-verification: ..." - if you see "404: Not Found" or something else, retry the above steps. +6. Go back to Google Webmaster Central / Search Console and proceed with the verification. ### {% linkable_title Requirements %} The `html5` platform can only function if all of the following requirements are met: -(On Hass.io these requirements are already met.) * You are using Chrome and/or Firefox on any desktop platform, ChromeOS or Android. * Your Home Assistant instance is exposed to the world. * If using a proxy, HTTP basic authentication must be off for registering or unregistering for push notifications. It can be re-enabled afterwards. -* `pywebpush` must be installed. `libffi-dev`, `libpython-dev`, and `libssl-dev` must be installed prior to `pywebpush` (i.e. `pywebpush` probably won't automatically install). +* If you don't run Hass.io: `pywebpush` must be installed. `libffi-dev`, `libpython-dev`, and `libssl-dev` must be installed prior to `pywebpush` (i.e. `pywebpush` probably won't automatically install). * You have configured SSL for your Home Assistant. It doesn't need to be configured in Home Assistant though, i.e. you can be running [NGINX](/ecosystem/nginx/) in front of Home Assistant and this will still work. The certificate must be trustworthy (i.e. not self signed). * You are willing to accept the notification permission in your browser. @@ -65,7 +72,7 @@ The `html5` platform can only function if all of the following requirements are Assuming you have already added the platform to your configuration: 1. Open Home Assistant in Chrome or Firefox. -2. Assuming you have met all the [requirements](#requirements) above, you should see a new slider in the sidebar labeled Push Notifications. +2. Assuming you have met all the [requirements](#requirements) above, you should see a new slider for Push Notifications through the sidebar Configuration > General. 3. Slide it to the on position. 4. Within a few seconds you should be prompted to allow notifications from Home Assistant. 5. Assuming you accept, that's all there is to it! @@ -249,7 +256,7 @@ You will receive an event named `html5_notification.closed` when the notificatio ### {% linkable_title Making notifications work with NGINX proxy %} -If you use [NGINX](/ecosystem/nginx/) as an proxy with authentication in front of your Home Assistant instance, you may have trouble with receiving events back to Home Assistant. It's because of authentication token that cannot be passed through the proxy. +If you use [NGINX](/ecosystem/nginx/) as a proxy with authentication in front of your Home Assistant instance, you may have trouble with receiving events back to Home Assistant. It's because of authentication token that cannot be passed through the proxy. To solve the issue put additional location into your nginx site's configuration: diff --git a/source/_components/notify.instapush.markdown b/source/_components/notify.instapush.markdown index 427991e60dc..020f535c106 100644 --- a/source/_components/notify.instapush.markdown +++ b/source/_components/notify.instapush.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Instapush" -description: "Instructions how to add Instapush notifications to Home Assistant." +description: "Instructions on how to add Instapush notifications to Home Assistant." date: 2015-05-01 18:00 sidebar: true comments: false diff --git a/source/_components/notify.joaoapps_join.markdown b/source/_components/notify.joaoapps_join.markdown index 3f64711ff72..2143480d0e3 100644 --- a/source/_components/notify.joaoapps_join.markdown +++ b/source/_components/notify.joaoapps_join.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Join Notify" -description: "Instructions how to setup the Join notification platform within Home Assistant." +description: "Instructions on how to setup the Join notification platform within Home Assistant." date: 2016-07-12 09:00 sidebar: true comments: false diff --git a/source/_components/notify.kodi.markdown b/source/_components/notify.kodi.markdown index 6949a927227..7d350005a85 100644 --- a/source/_components/notify.kodi.markdown +++ b/source/_components/notify.kodi.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Kodi" -description: "Instructions how to add Kodi notifications to Home Assistant." +description: "Instructions on how to add Kodi notifications to Home Assistant." date: 2016-09-12 16:00 sidebar: true comments: false diff --git a/source/_components/notify.lametric.markdown b/source/_components/notify.lametric.markdown index cf50cffaa2e..b9ee3343439 100644 --- a/source/_components/notify.lametric.markdown +++ b/source/_components/notify.lametric.markdown @@ -43,6 +43,11 @@ cycles: required: false type: int default: 1 +priority: + description: Defines the priority of the notification. + required: False + type: string + default: warning {% endconfiguration %} Check out the list of all icons at [https://developer.lametric.com/icons](https://developer.lametric.com/icons). Note that icons always begin with "i" while animations begin with "a". This is part of the name, you can't just use the number! @@ -59,11 +64,12 @@ notify: lifetime: 20 icon: a7956 cycles: 3 + priority: info ``` ### {% linkable_title Changing sounds and icons %} -To add a notification sound or an icon override, it has to be done via service data. +To add a notification sound, icon, cycles, or priority override, it has to be done via service data. ```yaml - alias: "Send notification on arrival at school" @@ -79,4 +85,23 @@ To add a notification sound or an icon override, it has to be done via service d data: sound: 'notification' icon: 'i51' + cycles: 0 + priority: 'critical' +``` + +### {% linkable_title Only notify specific device %} + +If you have more than one La Metric device, you can specify which will receive the message by adding `target:` to the service data: + +```yaml + action: + service: notify.lametric + data: + message: "Son has arrived at school!" + target: "Office LaMetric" + data: + sound: 'notification' + icon: 'i51' ``` + + If target is not specified, all LaMetric devices will be notified. diff --git a/source/_components/notify.lannouncer.markdown b/source/_components/notify.lannouncer.markdown index 2f411679c95..5aba4e41f9e 100644 --- a/source/_components/notify.lannouncer.markdown +++ b/source/_components/notify.lannouncer.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Lannouncer" -description: "Instructions how to add Lannouncer notifications to Home Assistant." +description: "Instructions on how to add Lannouncer notifications to Home Assistant." date: 2017-01-06 10:00 sidebar: true comments: false diff --git a/source/_components/notify.llamalab_automate.markdown b/source/_components/notify.llamalab_automate.markdown index 3b5d5d2dd5a..40becc0eb52 100644 --- a/source/_components/notify.llamalab_automate.markdown +++ b/source/_components/notify.llamalab_automate.markdown @@ -1,7 +1,7 @@ --- layout: page title: "LlamaLab Automate" -description: "Instructions how to add user notifications to Home Assistant." +description: "Instructions on how to add user notifications to Home Assistant." date: 2016-08-21 13:00 sidebar: true comments: false diff --git a/source/_components/notify.mailgun.markdown b/source/_components/notify.mailgun.markdown index be571eb2c14..9e98d180524 100644 --- a/source/_components/notify.mailgun.markdown +++ b/source/_components/notify.mailgun.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Mailgun Notify" -description: "Instructions how to add Mailgun mail notifications to Home Assistant." +description: "Instructions on how to add Mailgun mail notifications to Home Assistant." date: 2017-02-06 16:52 sidebar: true comments: false diff --git a/source/_components/notify.markdown b/source/_components/notify.markdown index 6ef8c7c50db..7f3225bd73c 100644 --- a/source/_components/notify.markdown +++ b/source/_components/notify.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Notifications" -description: "Instructions how to add user notifications to Home Assistant." +description: "Instructions on how to add user notifications to Home Assistant." date: 2015-01-20 22:36 sidebar: true comments: false @@ -21,7 +21,7 @@ notify: api_key: ABCDEFG ``` -The **name** parameter is optional but needed if you want to use multiple platforms. The platform will be exposed as service `notify/`. The name will default to `notify` if not supplied. +The **name** parameter is optional but needed if you want to use multiple platforms. The platform will be exposed as service `notify.`. The name will default to `notify` if not supplied. ### {% linkable_title Service %} @@ -36,7 +36,7 @@ Once loaded, the `notify` platform will expose a service that can be called to s The notification component supports specifying [templates](/topics/templating/) with `data_template`. This will allow you to use the current state of Home Assistant in your notifications. -In an [action](https://home-assistant.io/getting-started/automation-action/) of your [automation setup](/getting-started/automation/) it could look like this with a customized subject. +In an [action](/getting-started/automation-action/) of your [automation setup](/getting-started/automation/) it could look like this with a customized subject. ```yaml action: @@ -59,8 +59,8 @@ For services which have support for sending images. ```json { "message": "Test plugin", - "data": { - "photo": { + "data": { + "photo": { "url": "http://www.gbsun.de/gbpics/berge/berge106.jpg" } } diff --git a/source/_components/notify.mastodon.markdown b/source/_components/notify.mastodon.markdown new file mode 100644 index 00000000000..65bdc1e38a4 --- /dev/null +++ b/source/_components/notify.mastodon.markdown @@ -0,0 +1,51 @@ +--- +layout: page +title: "Mastodon" +description: "Instructions on how to add Instapush notifications to Home Assistant." +date: 2018-03-25 18:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: mastodon.png +ha_category: Notifications +ha_release: 0.67 +--- + +The `mastodon` platform uses [MAstodon](https://joinmastodon.org/) to delivery notifications from Home Assistant. + +Go to **Preferences** in the Mastodon web interface, then to **Development** and create a new application. + +To add Mastodon to your installation, add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +notify: + - name: NOTIFIER_NAME + platform: mastodon + access_token: !secret mastodon_access_token + client_id: !secret mastodon_client_id + client_secret: !secret mastodon_client_secret +``` + +{% configuration %} +access_token: + description: Your Mastodon access token. + required: true + type: string +client_id: + description: Your Mastodon client ID + required: true + type: string +client_secret: + description: Your Mastodon client secret. + required: true + type: string +base_url: + description: URL of the Mastodon instance to use. + required: false + type: string + default: https://mastodon.social +{% endconfiguration %} + +To use notifications, please see the [getting started with automation page](/getting-started/automation/). diff --git a/source/_components/notify.matrix.markdown b/source/_components/notify.matrix.markdown index fe5d7fc3a40..29890d46c8b 100644 --- a/source/_components/notify.matrix.markdown +++ b/source/_components/notify.matrix.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Matrix" -description: "Instructions how to add Matrix notifications to Home Assistant." +description: "Instructions on how to add Matrix notifications to Home Assistant." date: 2016-10-11 23:51 sidebar: true comments: false @@ -15,27 +15,23 @@ ha_release: 0.32 The `matrix` platform allows you to deliver notifications from Home Assistant to a [Matrix](http://matrix.org) room. Rooms can be both direct as well as group chats. -To enable Matrix notifications in your installation, add the following to your `configuration.yaml` file: +## {% linkable_title Configuration %} + +To enable Matrix notifications in your installation, you first need to configure +the [Matrix component](/components/matrix/). Then, add the following to your `configuration.yaml` file: ```yaml # Example configuration.yaml entry notify: - name: NOTIFIER_NAME platform: matrix - homeserver: HOMESERVER - username: USERNAME - password: PASSWORD default_room: ROOM_ID_OR_ALIAS ``` Configuration variables: - **name** (*Optional*): Setting the optional parameter `name` allows multiple notifiers to be created. The default value is `notify`. The notifier will bind to the service `notify.NOTIFIER_NAME`. -- **homeserver** (*Required*): The base URL of the homeserver, where the notifier account is registered (e.g. `https://matrix.org`). -- **username** (*Required*): The username of the notifying Matrix account. -- **password** (*Required*): The password for the given Matrix account. - **default_room** (*Required*): The room all messages will be sent to, when no other target is given. -- **verify_ssl** (*Optional*): Verify the homeservers certificate. Defaults to `true`. The target room has to be precreated, the room id can be obtained from the rooms settings dialog. Rooms by default have a canonical id of the form `"!:homeserver.tld"`, but can also be allocated aliases like `"#roomname:homeserver.tld"`. Make sure to use quotes around the room id or alias to escape special characters (`!`, and `#`) in YAML. The notifying account may need to be invited to the room, depending on the individual rooms policies. diff --git a/source/_components/notify.message_bird.markdown b/source/_components/notify.message_bird.markdown index d8baf5fa0d7..2234a86310e 100644 --- a/source/_components/notify.message_bird.markdown +++ b/source/_components/notify.message_bird.markdown @@ -1,7 +1,7 @@ --- layout: page title: "MessageBird" -description: "Instructions how to add user notifications to Home Assistant." +description: "Instructions on how to add user notifications to Home Assistant." date: 2016-03-15 17:00 sidebar: true comments: false @@ -28,7 +28,7 @@ Configuration variables: - **api_key** (*Required*): Enter the API key for MessageBird. Go to https://www.messagebird.com/ to retrieve your API key. - **name** (*Optional*): Setting the optional parameter `name` allows multiple notifiers to be created. The default value is `notify`. The notifier will bind to the service `notify.NOTIFIER_NAME`. -- **sender** (*Optional*): Setting the optional parameter `sender`. This will be the sender of the SMS. It may be either a telephone number (e.g. `+4915112345678`) or a text with a maximum length of 11 characters. Defaults to `HA`. +- **sender** (*Optional*): Setting the optional parameter `sender`. This will be the sender of the SMS. It may be either a telephone number (e.g., `+4915112345678`) or a text with a maximum length of 11 characters. Defaults to `HA`. ### {% linkable_title Usage %} diff --git a/source/_components/notify.mqtt.markdown b/source/_components/notify.mqtt.markdown index 7aefb8743f0..a1a33ef7e43 100644 --- a/source/_components/notify.mqtt.markdown +++ b/source/_components/notify.mqtt.markdown @@ -1,7 +1,7 @@ --- layout: page title: "MQTT Notifications" -description: "Instructions how to add MQTT notifications to Home Assistant." +description: "Instructions on how to add MQTT notifications to Home Assistant." date: 2016-02-01 08:00 sidebar: true comments: false @@ -14,7 +14,7 @@ ha_iot_class: depends The MQTT notification support is different than the other [notification](/components/notify/) platforms. It is a service. This means that you don't have to create a configuration entry but you need to provide more details when calling the service. -**Call Service** section from the **Developer Tools** allows you to send MQTT messages. Choose *mqtt/publish* from the list of **Available services:** and enter something like the sample below into the **Service Data** field and hit **CALL SERVICE**. +**Call Service** section from the service developer tool icon **Developer Tools** allows you to send MQTT messages. Choose *mqtt.publish* from the list of **Available services:** and enter something like the sample below into the **Service Data** field and hit **CALL SERVICE**. ```json {"payload": "Test message from HA", "topic": "home/notification", "qos": 0, "retain": 0} @@ -24,7 +24,18 @@ The MQTT notification support is different than the other [notification](/compon

-Using the [REST API](/developers/rest_api/#post-apiservicesltdomainltservice) to send a message to a given topic. +The same will work for automations. + +

+ +

+ + +## {% linkable_title Examples %} + +### {% linkable_title REST API %} + +Using the [REST API](https://developers.home-assistant.io/docs/en/external_api_rest.html) to send a message to a given topic. ```bash $ curl -X POST -H "x-ha-access: YOUR_PASSWORD" \ @@ -33,3 +44,31 @@ $ curl -X POST -H "x-ha-access: YOUR_PASSWORD" \ http://IP_ADDRESS:8123/api/services/mqtt/publish ``` +### {% linkable_title Automations %} + +Use as [`script`](/components/script/) in automations. + +{% raw %} +```yaml +automation: + alias: Send me a message when I get home + trigger: + platform: state + entity_id: device_tracker.me + to: 'home' + action: + service: script.notify_mqtt + data: + target: "me" + message: "I'm home" + +script: + notify_mqtt: + sequence: + - service: mqtt.publish + data_template: + payload: "{{ message }}" + topic: home/"{{ target }}" + retain: true +``` +{% endraw %} diff --git a/source/_components/notify.mycroft.markdown b/source/_components/notify.mycroft.markdown index f2e76800989..81917884998 100644 --- a/source/_components/notify.mycroft.markdown +++ b/source/_components/notify.mycroft.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Mycroft AI" -description: "Instructions how to add Mycroft AI notifications to Home Assistant." +description: "Instructions on how to add Mycroft AI notifications to Home Assistant." date: 2017-08-26 17:00 UTC sidebar: true comments: false diff --git a/source/_components/notify.mysensors.markdown b/source/_components/notify.mysensors.markdown index e465afe63d3..3dab5bc10dd 100644 --- a/source/_components/notify.mysensors.markdown +++ b/source/_components/notify.mysensors.markdown @@ -1,7 +1,7 @@ --- layout: page title: "MySensors Notify" -description: "Instructions how to integrate MySensors notifications into Home Assistant." +description: "Instructions on how to integrate MySensors notifications into Home Assistant." date: 2017-01-07 15:00 +0100 sidebar: true comments: false diff --git a/source/_components/notify.netgear_lte.markdown b/source/_components/notify.netgear_lte.markdown new file mode 100644 index 00000000000..e2dc124f918 --- /dev/null +++ b/source/_components/notify.netgear_lte.markdown @@ -0,0 +1,41 @@ +--- +layout: page +title: "Netgear LTE Notify" +description: "Instructions on how to add Netgear LTE notifications to Home Assistant." +date: 2018-06-06 23:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: netgear.png +ha_category: Notifications +ha_release: 0.72 +--- + +The `netgear_lte` platform allows you to use a Netgear LTE modem for notifications from Home Assistant. The message will be sent as an SMS text message. + +This requires you to have set up the [Netgear LTE component](/components/netgear_lte/). + +```yaml +# Example configuration.yaml entry +notify: + - platform: netgear_lte + name: sms + target: "+15105550123" +``` + +{% configuration %} +target: + description: The phone number of a default recipient or a list with multiple recipients. + required: true + type: string, list +name: + description: Setting the optional parameter `name` allows multiple notifiers to be created. + required: false + default: notify + type: string +host: + description: The modem to use. Not needed if you only have one. + required: false + type: string +{% endconfiguration %} diff --git a/source/_components/notify.nfandroidtv.markdown b/source/_components/notify.nfandroidtv.markdown index 3a91a7cba0e..e1bf8659ba8 100644 --- a/source/_components/notify.nfandroidtv.markdown +++ b/source/_components/notify.nfandroidtv.markdown @@ -14,9 +14,11 @@ ha_iot_class: "Local Polling" --- -Notification platform for [Notifications for Android TV](https://play.google.com/store/apps/details?id=de.cyberdream.androidtv.notifications.google&hl=en) and [Notifications for FireTV](https://play.google.com/store/apps/details?id=de.cyberdream.firenotifications.google). +Notification platform for [Notifications for Android TV](https://play.google.com/store/apps/details?id=de.cyberdream.androidtv.notifications.google) and [Notifications for FireTV](https://play.google.com/store/apps/details?id=de.cyberdream.firenotifications.google). + The notifications are in the global scope of your Android TV device. They will be displayed regardless of which application is running. -The In-App purchases only apply to the client for Android smartphones, so there isn't any limit when pushing notifications from Home Assistant. + +When setting this up be aware, that there are two apps: one for your smartphone to send notifications (not required for this platform) and one for your Android TV device to receive the notifications. The app available in the store of your target device is the one that is needed to display notifications sent from Home Assistant. The In-App purchases only apply to the client for Android smartphones, so there isn't any limit when pushing notifications from Home Assistant. To enable the notification platform, add the following to your `configuration.yaml` file: @@ -36,7 +38,7 @@ Configuration variables: - **position** (*Optional*): Has to be one of: bottom-right (default), bottom-left, top-right, top-left, center - **color** (*Optional*): Has to be one of: grey (default), black, indigo, green, red, cyan, teal, amber, pink - **transparency** (*Optional*): Has to be one of: 0%, 25% (default), 50%, 75%, 100% -- **interrupt** (*Optional*): If set to true, 1, on etc., the notification is interactive and can be dismissed or selected to display more details. Depending on the running app (e.g. Netflix), this may stop playback. +- **interrupt** (*Optional*): If set to true, 1, on etc., the notification is interactive and can be dismissed or selected to display more details. Depending on the running app (e.g., Netflix), this may stop playback. The configuration will be used to configure the default values for the notification for the host specified by the IP. However, you can override most of the settings by passing them with the data-attribute when calling the service. This is a fully customized JSON you can use to test how the final notification will look like: diff --git a/source/_components/notify.nma.markdown b/source/_components/notify.nma.markdown deleted file mode 100644 index bbe4e871101..00000000000 --- a/source/_components/notify.nma.markdown +++ /dev/null @@ -1,37 +0,0 @@ ---- -layout: page -title: "Notify My Android" -description: "Instructions how to add NMA notifications to Home Assistant." -date: 2015-05-01 18:00 -sidebar: true -comments: false -sharing: true -footer: true -logo: nma.png -ha_category: Notifications -ha_release: pre 0.7 ---- - - -The `nma` platform uses [Notify My Android (NMA)](http://www.notifymyandroid.com/) to delivery notifications from Home Assistant to your Android device. - -Go to the [NMA website](https://www.notifymyandroid.com) and create a new API key. If you are using the trial offer then keep in mind that your limit is five messages per day. - -To add NMA to your installation, add the following to your `configuration.yaml` file: - -```yaml -# Example configuration.yaml entry -notify: - - name: NOTIFIER_NAME - platform: nma - api_key: ABCDEFGHJKLMNOPQRSTUVXYZ -``` - -Configuration variables: - -- **name** (*Optional*): Setting the optional parameter `name` allows multiple notifiers to be created. The default value is `notify`. The notifier will bind to the service `notify.NOTIFIER_NAME`. -- **api_key** (*Required*): The API key for NMA. - -Details for the [API](https://www.notifymyandroid.com/api.jsp). - -To use notifications, please see the [getting started with automation page](/getting-started/automation/). diff --git a/source/_components/notify.prowl.markdown b/source/_components/notify.prowl.markdown index 2bfeb97fc45..4fbe377bb63 100644 --- a/source/_components/notify.prowl.markdown +++ b/source/_components/notify.prowl.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Prowl" -description: "Instructions how to add Prowl notifications to Home Assistant." +description: "Instructions on how to add Prowl notifications to Home Assistant." date: 2017-08-17 18:00 sidebar: true comments: false diff --git a/source/_components/notify.pushbullet.markdown b/source/_components/notify.pushbullet.markdown index 0ba8c606f3f..cadfd99cf95 100644 --- a/source/_components/notify.pushbullet.markdown +++ b/source/_components/notify.pushbullet.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Pushbullet" -description: "Instructions how to add user notifications to Home Assistant." +description: "Instructions on how to add user notifications to Home Assistant." date: 2015-01-20 22:36 sidebar: true comments: false diff --git a/source/_components/notify.pushetta.markdown b/source/_components/notify.pushetta.markdown index 6209d6bcd1b..bf31900c345 100644 --- a/source/_components/notify.pushetta.markdown +++ b/source/_components/notify.pushetta.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Pushetta" -description: "Instructions how to add Pushetta notifications to Home Assistant." +description: "Instructions on how to add Pushetta notifications to Home Assistant." date: 2015-11-10 18:00 sidebar: true comments: false diff --git a/source/_components/notify.pushover.markdown b/source/_components/notify.pushover.markdown index b9b2dce48a3..7e7680db7e1 100644 --- a/source/_components/notify.pushover.markdown +++ b/source/_components/notify.pushover.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Pushover" -description: "Instructions how to add Pushover notifications to Home Assistant." +description: "Instructions on how to add Pushover notifications to Home Assistant." date: 2015-01-20 22:36 sidebar: true comments: false @@ -15,7 +15,9 @@ ha_release: pre 0.7 The [Pushover service](https://pushover.net/) is a platform for the notify component. This allows components to send messages to the user using Pushover. -In order to get an API key you need to go to the [Pushover website](https://pushover.net) and register a new application. From the website you can also retrieve your user key. +## {% linkable_title Configuration %} + +In order to get an API key you need to [register an application](https://pushover.net/apps/clone/home_assistant) on the Pushover website. Your Pushover user key can be found on the [Pushover dashboard](https://pushover.net/dashboard). To use Pushover notifications, add the following to your `configuration.yaml` file: @@ -35,29 +37,27 @@ Configuration variables: - **user_key** (*Required*): Your user key for Pushover. Example Automation: + ```yaml - service: notify.entity_id - data: + data: message: "This is the message" title: "Title of message" - sound: pianobar - priority: 0 + data: + url: "https://www.home-assistant.io/" + sound: pianobar + priority: 0 ``` -This is a quote from the Pushover website regarding free/open source apps: - -
- If you are creating a client-side library, application, or open source project that will be redistributed and installed by end-users, you may want to require each of your users to register their own application rather than including your own API token with the software. -
- -When setting up the application you can use this [icon](https://home-assistant.io/images/favicon-192x192.png). +Component specific values in the nested `data` section are optional. To use notifications, please see the [getting started with automation page](/getting-started/automation/). -When sending a notification, optional parameters can also be set as per the pushover [API documentation](https://pushover.net/api). +When sending a notification, optional parameters can also be set as per the pushover [API documentation](https://pushover.net/api). Example notification triggered from the Alexa component for an intents is shown below which also uses [Automation Templating](/getting-started/automation-templating/) for the message: +{% raw %} ```yaml # Example configuration.yaml entries alexa: @@ -66,10 +66,12 @@ alexa: action: service: notify.notify data_template: - message: "The location of {% raw %}{{ User }}{% endraw %} has been queried via Alexa." + message: "The location of {{ User }} has been queried via Alexa." + data: + title: "Home Assistant" data: - title: "Home Assistant" sound: falling device: pixel - url: "https://home-assistant.io/" + url: "https://www.home-assistant.io/" ``` +{% endraw %} diff --git a/source/_components/notify.pushsafer.markdown b/source/_components/notify.pushsafer.markdown index 4b003d97d82..5b1ce8ed54c 100644 --- a/source/_components/notify.pushsafer.markdown +++ b/source/_components/notify.pushsafer.markdown @@ -1,8 +1,8 @@ --- layout: page title: "Pushsafer" -description: "Instructions how to add Pushsafer notifications to Home Assistant." -date: 2017-02-17 20:46 +description: "Instructions on how to add Pushsafer notifications to Home Assistant." +date: 2018-01-05 11:15 sidebar: true comments: false sharing: true @@ -15,7 +15,7 @@ ha_release: 0.39 The [Pushsafer service](https://www.pushsafer.com/) is a platform for the notify component. This allows you to send messages to the user using Pushsafer. -In order to get an private or alias key you need to go to the [Pushsafer website](https://www.pushsafer.com) and register. +In order to get a private or alias key you need to go to the [Pushsafer website](https://www.pushsafer.com) and register. To use Pushsafer notifications, add the following to your `configuration.yaml` file: @@ -27,11 +27,78 @@ notify: private_key: ABCDEFGHJKLMNOPQRSTUVXYZ ``` -Configuration variables: +**Configuration variables:** - **name** (*Optional*): Setting the optional parameter `name` allows multiple notifiers to be created. The default value is `notify`. The notifier will bind to the service `notify.NOTIFIER_NAME`. - **private_key** (*Required*): Your private or alias key. Private key = send the notification to all devices with standard params, alias key send the notification to the devices stored in the alias with predefined params. -When setting up the application you can use this [icon](https://home-assistant.io/images/favicon-192x192.png). +### {% linkable_title Examples %} + +Message to two devices with formatted text. + +```json +{ + "title": "Test to 2 devices", + "message": "Attention [b]bold[/b] text[br][url=https://www.pushsafer.com]Link to Pushsafer[/url]", + "target": ["1111", "2222"], + "data": { + "icon": "2", + "iconcolor": "#FF0000", + "sound": "2", + "vibration": "1", + "url": "https://www.home-assistant.io/", + "urltitle": "Open Home Assistant", + "time2live": "0" + } +} +``` + +Message to one device with formatted text and image from an external URL. + +```json +{ + "title": "Test to 1 device with image from an url", + "message": "Attention [i]italic[/i] Text[br][url=https://www.home-assistant.io/]Testlink[/url]", + "target": ["1111"], + "data": { + "icon": "14", + "iconcolor": "#FFFF00", + "sound": "22", + "vibration": "3", + "url": "https://www.home-assistant.io/", + "urltitle": "Open Home Assistant", + "time2live": "60", + "picture1": { + "url":"https://www.home-assistant.io/images/components/alexa/alexa-512x512.png" + } + } +} +``` + +Message to two devices and one device group with formatted text and local image. + +```json +{ + "title": "Test to 3 devices with local image", + "message": "Attention [i]italic[/i] Text[br][url=https://www.home-assistant.io/]Testlink[/url]", + "target": ["1111","2222","gs3333"], + "data": { + "icon": "20", + "iconcolor": "#FF00FF", + "sound": "33", + "vibration": "0", + "url": "https://www.home-assistant.io/", + "urltitle": "Open Home Assistant", + "time2live": "10", + "picture1": { + "path":"C:\\Users\\Kevin\\AppData\\Roaming\\.homeassistant\\image-760-testimage.jpg" + } + } +} +``` + +To customize your push-notification you can take a look at the [Pushsafer API description](https://www.pushsafer.com/en/pushapi). + +When setting up the application you can use this [icon](/images/favicon-192x192.png). To use notifications, please see the [getting started with automation page](/getting-started/automation/). diff --git a/source/_components/notify.rest.markdown b/source/_components/notify.rest.markdown index 370f26be8c3..4d1d83c5813 100644 --- a/source/_components/notify.rest.markdown +++ b/source/_components/notify.rest.markdown @@ -1,7 +1,7 @@ --- layout: page title: "REST" -description: "Instructions how to add RESTful notifications to Home Assistant." +description: "Instructions on how to add RESTful notifications to Home Assistant." date: 2016-02-12 07:00 sidebar: true comments: false @@ -30,6 +30,7 @@ Configuration variables: - **name** (*Optional*): Setting the optional parameter `name` allows multiple notifiers to be created. The default value is `notify`. The notifier will bind to the service `notify.NOTIFIER_NAME`. - **resource** (*Required*): The resource or endpoint that will receive the value. - **method** (*Optional*): The method of the request. Default is GET. +- **headers** (*Optional*): The headers for the request. - **message_param_name** (*Optional*): Parameter name for the message. Defaults to `message`. - **title_param_name** (*Optional*): Parameter name for the title. Defaults to none. - **target_param_name** (*Optional*): Parameter name for the target. Defaults to none. diff --git a/source/_components/notify.rocketchat.markdown b/source/_components/notify.rocketchat.markdown index 2c014c30546..19d9c876d90 100644 --- a/source/_components/notify.rocketchat.markdown +++ b/source/_components/notify.rocketchat.markdown @@ -13,7 +13,9 @@ ha_release: 0.56 --- -The `rocketchat` platform allows you to send messages to your [Rocket.Chat](https://rocket.chat/) instance from Home Assistant. +The `rocketchat` notify platform allows you to send messages to your [Rocket.Chat](https://rocket.chat/) instance from Home Assistant. + +## {% linkable_title Configuration %} To add Rocket.Chat to your installation, add the following to your `configuration.yaml` file: @@ -23,9 +25,9 @@ notify: - platform: rocketchat name: NOTIFIER_NAME url: https://rocketchat.example.com - username: USERNAME - password: PASSWORD - room: my-awesome-room + username: YOUR_USERNAME + password: YOUR_PASSWORD + room: YOUR_ROOM_NAME ``` - **name** (*Optional*): Name displayed in the frontend. The notifier will bind to the service `notify.NOTIFIER_NAME`. @@ -49,8 +51,7 @@ rocketchat_notification: #### {% linkable_title Message variables %} - **message** (*Required*): Message to be displayed. -- **data** (*Optional*): Dictionary containing any of the variables defined in the - [Rocket.Chat docs](https://rocket.chat/docs/developer-guides/rest-api/chat/postmessage#message-object-example) +- **data** (*Optional*): Dictionary containing any of the variables defined in the [Rocket.Chat docs](https://rocket.chat/docs/developer-guides/rest-api/chat/postmessage#message-object-example) To use notifications, please see the [getting started with automation page](/getting-started/automation/). diff --git a/source/_components/notify.sendgrid.markdown b/source/_components/notify.sendgrid.markdown index 16bf7e992a1..2491bac32e4 100644 --- a/source/_components/notify.sendgrid.markdown +++ b/source/_components/notify.sendgrid.markdown @@ -1,7 +1,7 @@ --- layout: page title: "SendGrid" -description: "Instructions how to add email notifications via SendGrid to Home Assistant." +description: "Instructions on how to add email notifications via SendGrid to Home Assistant." date: 2016-02-27 18:00 sidebar: true comments: false diff --git a/source/_components/notify.simplepush.markdown b/source/_components/notify.simplepush.markdown index 4747d9a5f48..2556c820373 100644 --- a/source/_components/notify.simplepush.markdown +++ b/source/_components/notify.simplepush.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Simplepush" -description: "Instructions how to add Simplepush notifications to Home Assistant." +description: "Instructions on how to add Simplepush notifications to Home Assistant." date: 2016-09-11 18:00 sidebar: true comments: false diff --git a/source/_components/notify.slack.markdown b/source/_components/notify.slack.markdown index 0445d1df821..3e384990109 100644 --- a/source/_components/notify.slack.markdown +++ b/source/_components/notify.slack.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Slack" -description: "Instructions how to add Slack notifications to Home Assistant." +description: "Instructions on how to add Slack notifications to Home Assistant." date: 2015-08-06 18:00 sidebar: true comments: false @@ -36,13 +36,13 @@ Configuration variables: - **name** (*Optional*): Setting the optional parameter `name` allows multiple notifiers to be created. The default value is `notify`. The notifier will bind to the service `notify.NOTIFIER_NAME`. - **api_key** (*Required*): The Slack API token to use for sending Slack messages. -- **default_channel** (*Required*): The default channel to post to if no channel is explicitly specified when sending the notification message. +- **default_channel** (*Required*): The default channel to post to if no channel is explicitly specified when sending the notification message. A channel can be specified adding a target attribute to the json at the same level as "message" - **username** (*Optional*): Setting username will allow Home Assistant to post to Slack using the username specified. By default not setting this will post to Slack using the user account or botname that you generated the api_key as. - **icon** (*Optional*): Use one of the Slack emojis as an Icon for the supplied username. Slack uses the standard emoji sets used [here](http://www.webpagefx.com/tools/emoji-cheat-sheet/). ### {% linkable_title Slack service data %} -The following attributes can be placed `data` for extended functionality. +The following attributes can be placed inside `data` for extended functionality. | Service data attribute | Optional | Description | | ---------------------- | -------- | ----------- | @@ -60,6 +60,7 @@ Example for posting file from URL: { "message":"Message that will be added as a comment to the file.", "title":"Title of the file.", + "target": ["#channelname"], "data":{ "file":{ "url":"http://[url to file, photo, security camera etc]", diff --git a/source/_components/notify.smtp.markdown b/source/_components/notify.smtp.markdown index 533129e36cb..130f3dcf0dc 100644 --- a/source/_components/notify.smtp.markdown +++ b/source/_components/notify.smtp.markdown @@ -1,7 +1,7 @@ --- layout: page title: "SMTP" -description: "Instructions how to add e-mail notifications to Home Assistant." +description: "Instructions on how to add e-mail notifications to Home Assistant." date: 2015-06-03 18:00 sidebar: true comments: false @@ -148,7 +148,7 @@ The optional `html` field makes a custom text/HTML multi-part message, allowing ``` -Obviously, this kind of complex html email reporting is done much more conveniently using Jinja2 templating from an [AppDaemon app](https://home-assistant.io/docs/ecosystem/appdaemon/tutorial/), for example. +Obviously, this kind of complex html email reporting is done much more conveniently using Jinja2 templating from an [AppDaemon app](/docs/ecosystem/appdaemon/tutorial/), for example. This platform is fragile and not able to catch all exceptions in a smart way because of the large number of possible configuration combinations. diff --git a/source/_components/notify.stride.markdown b/source/_components/notify.stride.markdown new file mode 100644 index 00000000000..0c79c446673 --- /dev/null +++ b/source/_components/notify.stride.markdown @@ -0,0 +1,63 @@ +--- +layout: page +title: "Stride" +description: "Instructions how to add Stride notifications to Home Assistant." +date: 2018-03-14 15:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: stride.png +ha_category: Notifications +ha_release: 0.66 +--- + +The `stride` platform allows you to send notifications from Home Assistant to [Stride](https://stride.com/). + +You need to obtain a [Stride API token](https://developer.atlassian.com/cloud/stride/security/authentication/#using-room-tokens) to be able to send notifications. When creating the token, you'll see a section labeled "Use this conversation URL to post messages" - it will look something like "https://api.atlassian.com/site/55872e9f-047e-a619-b32c-19d37fbc6038/conversation/26c98c26-0ffd-a11e-3a55-1b397cb71fe0/message". The first set of numbers and letters (`55872e9f-047e-a619-b32c-19d37fbc6038`) is the Cloud ID, and the second set (`26c98c26-0ffd-a11e-3a55-1b397cb71fe0`) is the Room ID. + +To enable the Stride notification in your installation, add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +notify: + - platform: stride + cloudid: CLOUD-ID + token: TOKEN + room: ROOM-ID +``` + +{% configuration %} +name: + description: Setting the optional parameter `name` allows multiple notifiers to be created. The notifier will bind to the service `notify.NOTIFIER_NAME`. + required: false + default: notify + type: string +cloudid: + description: The Stride Cloud ID to use for sending Stride notification. + required: true + type: string +token: + description: The Stride API token to use for sending Stride notifications. + required: true + type: string +room: + description: The default room to post to if no room is explicitly specified when sending the notification. + required: true + type: string +panel: + description: Setting panel will override the default panel type (`None`) for the notification. By default not setting this will post to Stride without using a panel type. Valid options are 'None', 'info', 'note', 'tip', 'warning'. + required: false + type: string +{% endconfiguration %} + +### {% linkable_title Stride service data %} + +The following attributes can be placed `data` for extended functionality. + +| Service data attribute | Optional | Description | +| ---------------------- | -------- | ----------- | +| `room` | yes | (int) Same usage as in configuration.yaml. Overrides any setting set in configuration.yaml. +| `panel` | yes | (str) Same usage as in configuration.yaml. Overrides any setting set in configuration.yaml. + +To use notifications, please see the [getting started with automation page](/getting-started/automation/). diff --git a/source/_components/notify.synology_chat.markdown b/source/_components/notify.synology_chat.markdown new file mode 100644 index 00000000000..5fbbae6a046 --- /dev/null +++ b/source/_components/notify.synology_chat.markdown @@ -0,0 +1,34 @@ +--- +layout: page +title: "Synology Chat" +description: "Instructions on how to add a Synology Chat Bot notifications to Home Assistant." +date: 2018-02-15 07:00 +sidebar: true +comments: false +sharing: true +footer: true +ha_release: 0.65 +logo: synology.png +ha_category: Notifications +--- + +The `synology_chat` notification platform allows you to deliver notifications to your [Synology Chat](https://www.synology.com/en-us/dsm/feature/chat) install as a Synology Chat bot. + +To configure a Synology Chat bot, first you must create a [Synology Chat Integration Incoming Webhook](https://www.synology.com/en-us/knowledgebase/DSM/tutorial/Collaboration/How_to_configure_webhooks_and_slash_commands_in_Chat_Integration#t2.1). After this is complete, you will have a Webhook URL. This is what will be required in the Home Assistant configuration. + +To enable the Synology Chat notification in your installation, add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +notify: + - platform: synology_chat + name: hass_synchat + resource: https://example.your.synology.com/webapi/entry.cgi?api=SYNO.Chat.External&method=incoming&version=1&token=ABCDEFG +``` + +Configuration variables: + +- **name** (*Required*): Setting the parameter `name` allows multiple notifiers to be created. The notifier will bind to the service `notify.NOTIFIER_NAME`. +- **resource** (*Required*): The incoming webhook URL. + +To use notifications, please see the [getting started with automation page](/getting-started/automation/). diff --git a/source/_components/notify.syslog.markdown b/source/_components/notify.syslog.markdown index 5e905e73e55..13683e8a8a2 100644 --- a/source/_components/notify.syslog.markdown +++ b/source/_components/notify.syslog.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Syslog" -description: "Instructions how to add syslog notifications to Home Assistant." +description: "Instructions on how to add syslog notifications to Home Assistant." date: 2015-06-09 16:00 sidebar: true comments: false diff --git a/source/_components/notify.telegram.markdown b/source/_components/notify.telegram.markdown index ac89f6f23c7..077288efab2 100644 --- a/source/_components/notify.telegram.markdown +++ b/source/_components/notify.telegram.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Telegram" -description: "Instructions how to add Telegram notifications to Home Assistant." +description: "Instructions on how to add Telegram notifications to Home Assistant." date: 2015-10-09 18:00 sidebar: true comments: false @@ -99,7 +99,7 @@ action: service: notify.NOTIFIER_NAME data: title: '*Send a message*' - message: 'That's an example that _sends_ a *formatted* message with a custom inline keyboard.' + message: "That's an example that _sends_ a *formatted* message with a custom inline keyboard." data: inline_keyboard: - 'Task 1:/command1, Task 2:/command2' @@ -121,7 +121,7 @@ action: service: notify.NOTIFIER_NAME data: title: Send an images - message: That's an example that sends an image. + message: "That's an example that sends an image." data: photo: - url: http://192.168.1.28/camera.jpg @@ -164,7 +164,7 @@ action: service: notify.NOTIFIER_NAME data: title: Send a video - message: That's an example that sends a video. + message: "That's an example that sends a video." data: video: - url: http://192.168.1.28/camera.mp4 @@ -194,7 +194,7 @@ action: service: notify.NOTIFIER_NAME data: title: Send a document - message: That's an example that sends a document and a custom keyboard. + message: "That's an example that sends a document and a custom keyboard." data: document: file: /tmp/whatever.odf diff --git a/source/_components/notify.twilio_call.markdown b/source/_components/notify.twilio_call.markdown index 9caf251d046..7f0fa2a989e 100644 --- a/source/_components/notify.twilio_call.markdown +++ b/source/_components/notify.twilio_call.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Twilio Call" -description: "Instructions how to add user notifications to Home Assistant." +description: "Instructions on how to add user notifications to Home Assistant." date: 2017-01-27 00:09 sidebar: true comments: false diff --git a/source/_components/notify.twilio_sms.markdown b/source/_components/notify.twilio_sms.markdown index 1e35c14866e..7cec94cf339 100644 --- a/source/_components/notify.twilio_sms.markdown +++ b/source/_components/notify.twilio_sms.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Twilio SMS" -description: "Instructions how to add user notifications to Home Assistant." +description: "Instructions on how to add user notifications to Home Assistant." date: 2016-05-14 14:14 sidebar: true comments: false @@ -47,6 +47,6 @@ automation: data: message: 'The sun has set' target: - - +14151234567 - - +15105555555 + - '+14151234567' + - '+15105555555' ``` diff --git a/source/_components/notify.twitter.markdown b/source/_components/notify.twitter.markdown index f63810e68eb..6bf8867709c 100644 --- a/source/_components/notify.twitter.markdown +++ b/source/_components/notify.twitter.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Twitter" -description: "Instructions how to add Twitter notifications to Home Assistant." +description: "Instructions on how to add Twitter notifications to Home Assistant." date: 2016-01-27 07:00 sidebar: true comments: false diff --git a/source/_components/notify.webostv.markdown b/source/_components/notify.webostv.markdown index 408c31eef02..c3dbadfbe4a 100644 --- a/source/_components/notify.webostv.markdown +++ b/source/_components/notify.webostv.markdown @@ -1,7 +1,7 @@ --- layout: page title: "LG WebOS TV notifications" -description: "Instructions how to integrate a LG WebOS TV within Home Assistant." +description: "Instructions on how to integrate a LG WebOS TV within Home Assistant." date: 2016-04-18 23:24 sidebar: true comments: false @@ -30,10 +30,10 @@ notify: Configuration variables: -- **host** (*Required*): The IP of the LG WebOS Smart TV, e.g. 192.168.0.10 +- **host** (*Required*): The IP of the LG WebOS Smart TV, e.g., 192.168.0.10 - **name** (*Required*): The name you would like to give to the LG WebOS Smart TV. - **filename** (*Optional*): The filename where the pairing key with the TV should be stored. This path is relative to Home Assistant's config directory. It defaults to `webostv.conf`. -- **icon** (*Optional*): The path to an image file to use as the icon in notifications. If provided, this image will override the Home Assistant logo. +- **icon** (*Optional*): The path to an image file to use as the icon in notifications. A possible automation could be: diff --git a/source/_components/notify.xmpp.markdown b/source/_components/notify.xmpp.markdown index db062932d04..14105d9bb6d 100644 --- a/source/_components/notify.xmpp.markdown +++ b/source/_components/notify.xmpp.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Jabber (XMPP)" -description: "Instructions how to add Jabber (XMPP) notifications to Home Assistant." +description: "Instructions on how to add Jabber (XMPP) notifications to Home Assistant." date: 2015-05-08 18:00 sidebar: true comments: false @@ -37,6 +37,10 @@ Configuration variables: - **verify** (*Optional*): Allow disabling SSL certificate validity check (e.g., self-signed certificate). Defaults to `true`. - **room** (*Optional*): Room's name (e.g., example@conference.jabber.org). If set, send a message to chatroom instead of the sender. +

+ sleekxmpp, as of version 1.3.2, does not support >TLS1. If you are running your own XMPP server (e.g. Prosody, ejabberd) make sure to allow using TLS1. +

+ All Jabber IDs (JID) must include the domain. Make sure that the password matches the account provided as sender. To use notifications, please see the [getting started with automation page](/getting-started/automation/). diff --git a/source/_components/notify.yessssms.markdown b/source/_components/notify.yessssms.markdown index e320de496a7..040acd518b8 100644 --- a/source/_components/notify.yessssms.markdown +++ b/source/_components/notify.yessssms.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Yesss SMS" -description: "Instructions how to add user notifications to Home Assistant." +description: "Instructions on how to add user notifications to Home Assistant." date: 2017-10-27 16:00 sidebar: true comments: false diff --git a/source/_components/nuheat.markdown b/source/_components/nuheat.markdown new file mode 100644 index 00000000000..b3654ebbae3 --- /dev/null +++ b/source/_components/nuheat.markdown @@ -0,0 +1,51 @@ +--- +layout: page +title: "NuHeat" +description: "Instructions on how to integrate your NuHeat Signature thermostats within Home Assistant." +date: 2017-11-11 18:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: nuheat.png +ha_category: Hub +ha_release: 0.61 +ha_iot_class: "Cloud Polling" +--- + +The `nuheat` component lets you control connected floor heating thermostats from [NuHeat](http://www.nuheat.com/). + +First, you will need to obtain your thermostat's numeric serial number or ID by logging into [MyNuHeat.com](https://mynuheat.com/) and selecting your thermostat(s). + +Once you have the Thermostat ID(s), add the following information to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +nuheat: + username: YOUR_USERNAME + password: YOUR_PASSWORD + devices: 12345 + +# Example configuration.yaml entry with multiple thermostats +nuheat: + username: YOUR_USERNAME + password: YOUR_PASSWORD + devices: + - 12345 + - 67890 +``` + +{% configuration %} +username: + description: The username for accessing your MyNuHeat account. + required: true + type: string +password: + description: The password for accessing your MyNuHeat account. + required: true + type: string +devices: + description: The serial number/ID of each thermostat you would like to integrate. + required: true + type: [string, int] +{% endconfiguration %} diff --git a/source/_components/nuimo_controller.markdown b/source/_components/nuimo_controller.markdown index e2ed36fba8b..92b1bbd618f 100644 --- a/source/_components/nuimo_controller.markdown +++ b/source/_components/nuimo_controller.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Nuimo controller" -description: "Instructions how to setup and use a Nuimo device in Home Assistant." +description: "Instructions on how to setup and use a Nuimo device in Home Assistant." date: 2016-08-30 12:00 sidebar: true comments: false diff --git a/source/_components/octoprint.markdown b/source/_components/octoprint.markdown index 192d5d9d9a3..03f0fae06d4 100644 --- a/source/_components/octoprint.markdown +++ b/source/_components/octoprint.markdown @@ -1,7 +1,7 @@ --- layout: page title: "OctoPrint" -description: "Instructions how to setup the OctoPrint in Home Assistant." +description: "Instructions on how to setup the OctoPrint in Home Assistant." date: 2015-01-20 22:36 sidebar: true comments: false diff --git a/source/_components/panel_custom.markdown b/source/_components/panel_custom.markdown index 49775f28557..0415c561a7d 100644 --- a/source/_components/panel_custom.markdown +++ b/source/_components/panel_custom.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Panel Custom" -description: "Instructions how to add customized panels to the frontend of Home Assistant." +description: "Instructions on how to add customized panels to the frontend of Home Assistant." date: 2015-08-08 11:00 sidebar: true comments: false diff --git a/source/_components/panel_iframe.markdown b/source/_components/panel_iframe.markdown index 5b170a310b1..8aa5514f0cb 100644 --- a/source/_components/panel_iframe.markdown +++ b/source/_components/panel_iframe.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Panel iFrame" -description: "Instructions how to add iFrames in the frontend of Home Assistant." +description: "Instructions on how to add iFrames in the frontend of Home Assistant." date: 2015-07-17 18:00 sidebar: true comments: false @@ -15,7 +15,7 @@ ha_release: 0.25 The `panel_iframe` support allows you to add additional panels to your Home Assistant frontend. The panels are listed in the sidebar and can contain external resources like the web frontend of your router, your monitoring system, or your media server. -

If you are accessing home Assistant over HTTPS using SSL, you cannot access HTTP sites through an iframe panel.

+

If you are accessing Home Assistant over HTTPS using SSL, you cannot access HTTP sites through an iframe panel.

To enable Panel iFrames in your installation, add the following to your `configuration.yaml` file: @@ -28,12 +28,34 @@ panel_iframe: fridge: title: 'Fridge' url: 'http://192.168.1.5' + otherapp: + title: 'Other App' + url: '/otherapp' ``` -Configuration variables: -- **[panel_name]** (*Required*): Name of the panel. - - **title** (*Required*): Friendly title for the panel. Will be used in the sidebar. - - **icon** (*Optional*): Icon for entry. Pick an icon that you can find on [materialdesignicons.com](https://materialdesignicons.com/) to use for your input and prefix the name with `mdi:`. For example `mdi:car`, `mdi:ambulance`, or `mdi:motorbike`. - - **url** (*Required*): The URL to open. +{% configuration %} + panel_iframe: + description: Enables the panel_iframe component. Only allowed once. + required: true + type: map + keys: + panel_name: + description: Name of the panel. Only allowed once. + required: true + type: map + keys: + title: + description: Friendly title for the panel. Will be used in the sidebar. + required: true + type: string + url: + description: The absolute URL or relative URL with an absolute path to open. + required: true + type: string + icon: + description: Icon for entry. Pick an icon that you can find on [materialdesignicons.com](https://materialdesignicons.com/) to use for your input and prefix the name with `mdi:`. For example `mdi:car`, `mdi:ambulance`, or `mdi:motorbike`. + required: false + type: string +{% endconfiguration %} diff --git a/source/_components/persistent_notification.markdown b/source/_components/persistent_notification.markdown index 2f96756ea92..9fac3ddc0cf 100644 --- a/source/_components/persistent_notification.markdown +++ b/source/_components/persistent_notification.markdown @@ -30,7 +30,7 @@ The service `persistent_notification/create` takes in `message`, `title`, and `n The `persistent_notification` component supports specifying [templates](/topics/templating/) for both the `message` and the `title`. This will allow you to use the current state of Home Assistant in your notifications. -In an [action](https://home-assistant.io/getting-started/automation-action/) of your [automation setup](/getting-started/automation/) it could look like this with a customized subject. +In an [action](/getting-started/automation-action/) of your [automation setup](/getting-started/automation/) it could look like this with a customized subject. ```yaml action: @@ -55,6 +55,26 @@ action: notification_id: "1234" ``` + +### {% linkable_title Markdown support %} + +The message attribute supports the [Markdown formatting syntax](https://daringfireball.net/projects/markdown/syntax). Some examples are: + +| Type | Message | +| ---- | ------- | +| Headline 1 | `# Headline` | +| Headline 2 | `## Headline` | +| Newline | `\n` | +| Bold | `**My bold text**` | +| Cursive | `*My cursive text*` | +| Link | `[Link](https://home-assistant.io/)` | +| Image | `![image](/local/my_image.jpg)` | + +

+ `/local/` in this context refers to the `.homeassistant/www/` folder. +

+ + ### {% linkable_title Create a persistent notification %} Choose service developer tool icon **Services** from the **Developer Tools** to call the `persistent_notification` service. Select `persistent_notification/create` from the list of **Available services:** and enter something like the sample below into the **Service Data** field and hit **CALL SERVICE**. @@ -67,5 +87,3 @@ Choose serv
 }
 ```
 This will create the notification entry shown above.
-
-NOTE: if you have defined a ```default_view:``` in your ```Groups:``` configuration you will need to include ```persistent_notification.<notification_id>``` e.g. ```persistent_notification.1234``` as per the example above, to your Groups configuration, in order to see the notification after creating it. 
diff --git a/source/_components/pilight.markdown b/source/_components/pilight.markdown
index 2b7f8577019..45e98323815 100644
--- a/source/_components/pilight.markdown
+++ b/source/_components/pilight.markdown
@@ -1,7 +1,7 @@
 ---
 layout: page
 title: "Pilight"
-description: "Instructions how to setup Pilight within Home Assistant."
+description: "Instructions on how to setup Pilight within Home Assistant."
 date: 2015-08-07 18:00
 sidebar: true
 comments: false
@@ -13,29 +13,29 @@ ha_release: 0.26
 ha_iot_class: "Local Push"
 ---
 
-[Pilight](https://www.pilight.org/) is a modular and open source solution to communicate with 433 MHz devices and runs on various small form factor computers. A lot of common [protocols](https://wiki.pilight.org/doku.php/protocols) are already available.
+[Pilight](https://www.pilight.org/) is a modular and open source solution to communicate with 433 MHz devices and runs on various small form factor computers. A lot of common [protocols](https://manual.pilight.org/protocols/index.html) are already available.
 
-This pilight hub connects to the [pilight-daemon](https://wiki.pilight.org/doku.php/pdaemon) via a socket connection to receive and send codes. Thus Home Assistant does not have to run on the computer in charge of the RF communication. 
+This pilight hub connects to the [pilight-daemon](https://manual.pilight.org/programs/daemon.html) via a socket connection to receive and send codes. Thus Home Assistant does not have to run on the computer in charge of the RF communication. 
 
-The received and supported RF codes are put on the event bus of Home Assistant and are therefore directly usable by other components (e.g. automation). Additionally a send service is provided to send RF codes.
+The received and supported RF codes are put on the event bus of Home Assistant and are therefore directly usable by other components (e.g., automation). Additionally a send service is provided to send RF codes.
+
+## {% linkable_title Configuration %}
 
 To integrate pilight into Home Assistant, add the following section to your `configuration.yaml` file:
 
 ```yaml
 # Example configuration.yaml entry
 pilight:
-  host: 127.0.0.1
-  port: 5000
 ```
 
 Configuration variables:
 
-- **host** (*Required*): The IP address of the computer running the pilight-daemon, e.g. 192.168.1.32.
-- **port** (*Required*): The network port to connect to. The usual port is [5000](https://www.pilight.org/development/api/).
+- **host** (*Optional*): The IP address of the computer running the pilight-daemon, e.g., 192.168.1.32.
+- **port** (*Optional*): The network port to connect to. The usual port is [5001](https://manual.pilight.org/development/api.html).
 - **send_delay** (*Optional*): You can define a send delay as a fraction of seconds if you experience transmission problems when you try to switch multiple switches at once. This can happen when you use a [pilight USB Nano](https://github.com/pilight/pilight-usb-nano) as hardware and switches a whole group of multiple switches on or off. Tested values are between 0.3 and 0.8 seconds depending on the hardware.
-- **whitelist** (*Optional*): You can define a whitelist to prevent that too many unwanted RF codes (e.g. the neighbours weather station) are put on your HA event bus. All defined subsections have to be matched. A subsection is matched if one of the items are true.
+- **whitelist** (*Optional*): You can define a whitelist to prevent that too many unwanted RF codes (e.g., the neighbors weather station) are put on your HA event bus. All defined subsections have to be matched. A subsection is matched if one of the items are true.
 
-In this example only received RF codes using a daycom or Intertechno protocol are put on the event bus and only when the device id is 42. For more possible settings please look at the receiver section of the pilight [API](https://www.pilight.org/development/api/).
+In this example only received RF codes using a daycom or Intertechno protocol are put on the event bus and only when the device id is 42. For more possible settings please look at the receiver section of the pilight [API](https://manual.pilight.org/development/api.html).
 
 A full configuration sample could look like the sample below:
 
@@ -55,9 +55,9 @@ pilight:
 
 ## {% linkable_title Troubleshooting %}
 
-- A list of tested RF transceiver hardware is available [here](https://wiki.pilight.org/doku.php/electronics). This might be useful before buying.
+- A list of tested RF transceiver hardware is available [here](https://manual.pilight.org/electronics/index.html). This might be useful before buying.
 - Sending commands is simple when the protocol is known by pilight, but receiving commands can be rather difficult. It can happen that the code is not correctly recognized due to different timings in the sending hardware or the RF receiver. If this happens follow these steps:
 
-1. [Install](https://www.pilight.org/get-started/installation/) pilight from source (do not worry that is very easy) and only activate the protocols you are expecting in the pop up menu. This reduces false positives.
+1. [Install](https://manual.pilight.org/installation.html) pilight from source (do not worry that is very easy) and only activate the protocols you are expecting in the pop up menu. This reduces false positives.
 2. Check the real timings of your device + RF receiver by running `pilight-debug`. Remember the `pulslen` parameter.
 3. Go to the `libs/pilight/protocols/433.92` subfolder of the pilight source code and open the .c file of your protocol. Search for `MIN_PULSE_LENGTH`, `MAX_PULSE_LENGTH ` and `AVG_PULSE_LENGTH`. Change the pulse lengths to match your measured one. Recompile and install pilight by re-running `$ sudo ./setup.sh`.
diff --git a/source/_components/plant.markdown b/source/_components/plant.markdown
index b1c5ec976bc..6beaa00557f 100644
--- a/source/_components/plant.markdown
+++ b/source/_components/plant.markdown
@@ -45,22 +45,25 @@ Configuration variables:
   - **max_conductivity** (*Optional*): Maximum conductivity level before triggering a problem. Typical value: 3000
   - **min_temperature** (*Optional*): Minimum temperature before triggering a problem.
   - **max_temperature** (*Optional*): Maximum temperature before triggering a problem.
-  - **min_brightness** (*Optional*): Minimum brightness before triggering a problem.
+  - **min_brightness** (*Optional*): Minimum brightness before triggering a problem. In contrast to the other values, this check is *not* looking at the current situation, but rather at the last days. A problem is only reported if the maximum brightness over the last days was lower than min_brightness. You can use this to check if the plant gets enough light during the course of the day.
   - **max_brightness** (*Optional*): Maximum brightness before triggering a problem.
+  - **check_days** (*Optional*): time interval (in days) used when checking **min_brightness**, if not set, the default value is 3
 
 ## {% linkable_title Examples %}
 ### Using plain MQTT sensor to get the data
 This is a practical example that uses a multiple of `MQTT sensors` to supply the readings used by the `plant` sensor.
-Another good source of this data would be the [Mi Flora](https://home-assistant.io/components/sensor.miflora/) component. 
+Another good source of this data would be the [Mi Flora](/components/sensor.miflora/) component. 
 
 
 If the sensor data is within the min/max values the status will be `ok`, if not the status will be `problem`. You can use this to trigger a notification, if there is a problem with your plant. Of course you can only monitor attributes of your plant, where the sensor is configured and is providing the data.
 
 ## Data Source
 
-The main sources of the data will usually be a [MiFlora sensor](sensor.miflora) or a [MQTT sensor](sensor.mqtt) receiving the data from a [PlantGateway](https://github.com/ChristianKuehnel/plantgateway).
+The main sources of the data will usually be a [MiFlora sensor](/components/sensor.miflora/) or a [MQTT sensor](/components/sensor.mqtt/) receiving the data from a [PlantGateway](https://github.com/ChristianKuehnel/plantgateway).
 
 If you want to get the date via a PlantGateway, this is a typical configuration for the MQTT sensors:
+
+{% raw %}
 ```yaml
 # Example configuration.yaml entry
 plant:
@@ -99,5 +102,6 @@ sensor:
     state_topic: my_plant_topic
     value_template: +If you use MariaDB 10 you need to add port 3307 to the SERVER_IP, e.g., `mysql://user:password@SERVER_IP:3307/DB_NAME?charset=utf8`. + ++If you are running a database server instance on the same server as Home Assistant then you must ensure that this service starts before Home Assistant. For a Linux instance running Systemd (Raspberry Pi, Debian, Ubuntu and others) then you should edit the service file. + +```bash +$ sudo nano /etc/systemd/system/home-assistant@homeassistant.service +``` + +and add the service for PostgreSQL: + +``` +[Unit] +Description=Home Assistant +After=network.target postgresql.service +``` + +Save the file then reload `systemctl`: + +```bash +$ sudo systemctl daemon-reload +``` +

## {% linkable_title Installation notes %} Not all Python bindings for the chosen database engine can be installed directly. This section contains additional details which should help you to get it working. -### {% linkable_title MariDB and MySQL %} +### {% linkable_title MariaDB and MySQL %} -For MariaDB you may have to install a few dependencies. On the Python side we use the `mysqlclient`: +If you are in a virtual environment, don't forget to activate it before installing the `mysqlclient` Python package described below. + +```bash +pi@homeassistant:~ $ sudo -u homeassistant -H -s +homeassistant@homeassistant:~$ source /srv/homeassistant/bin/activate +(homeassistant) homeassistant@homeassistant:~$ pip3 install mysqlclient +``` + +For MariaDB you may have to install a few dependencies. If you're using MariaDB version 10.2, libmariadbclient-dev was renamed to libmariadb-dev, please install the correct package based on your MariaDB version. + +On the Python side we use the `mysqlclient`: ```bash $ sudo apt-get install libmariadbclient-dev libssl-dev @@ -135,14 +210,6 @@ $ sudo apt-get install default-libmysqlclient-dev libssl-dev $ pip3 install mysqlclient ``` -If you are in a virtual environment, don't forget to activate it before installing the `mysqlclient` Python package. - -```bash -pi@homeassistant:~ $ sudo su homeassistant -s /bin/bash -homeassistant@homeassistant:~$ source /srv/homeassistant/bin/activate -(homeassistant) homeassistant@homeassistant:~$ pip3 install mysqlclient -``` - After installing the dependencies, it is required to create the database manually. During the startup, Home Assistant will look for the database specified in the `db_url`. If the database doesn't exist, it will not automatically create it for you. Once Home Assistant finds the database, with right level of permissions, all the required tables will then be automatically created and the data will be populated accordingly. @@ -168,7 +235,7 @@ $ pip3 install pymssql If you are in a virtual environment, don't forget to activate it before installing the pymssql package. ```bash -$ sudo su -s /bin/bash homeassistant +$ sudo -u homeassistant -H -s $ source /srv/homeassistant/bin/activate $ pip3 install pymssql ``` diff --git a/source/_components/remember_the_milk.markdown b/source/_components/remember_the_milk.markdown index d4cc22fa10d..70abbed77e4 100644 --- a/source/_components/remember_the_milk.markdown +++ b/source/_components/remember_the_milk.markdown @@ -12,7 +12,7 @@ ha_category: Calendar ha_release: 0.57 --- -The `Remember The Milk` (RTM) component allows you to create tasks in [remember_the_milk](https://www.rememberthemilk.com) from Home Assistant. You can use this if you want Home Assistant to send you a task that you should not forget, e.g. water the plants. The component allows you to have several RTM accounts in parallel. +The `Remember The Milk` (RTM) component allows you to create tasks in [remember_the_milk](https://www.rememberthemilk.com) from Home Assistant. You can use this if you want Home Assistant to send you a task that you should not forget, e.g., water the plants. The component allows you to have several RTM accounts in parallel. ## {% linkable_title Setup %} @@ -36,7 +36,7 @@ Configuration variables: {% configuration %} name: - description: Name of the RTM account, as you can have serveral accounts in RTM. The name must be unique. + description: Name of the RTM account, as you can have several accounts in RTM. The name must be unique. required: true type: string api_key: @@ -51,7 +51,7 @@ Configuration variables: ### {% linkable_title Step 2: registering your account %} -After saving the configuration, you need to (re-)start Home Assistant. On the first start you will notice a new "Configuration" panel appearing on the Home Assistant page. After opening the configuration page, follow the link "Remember The Milk login". This will take you to a login page where you have to log in with your normal Rember The Milk credentials. This will authorize Home Assistant to access your Remember The Milk account. +After saving the configuration, you need to (re-)start Home Assistant. On the first start you will notice a new "Configuration" panel appearing on the Home Assistant page. After opening the configuration page, follow the link "Remember The Milk login". This will take you to a login page where you have to log in with your normal Remember The Milk credentials. This will authorize Home Assistant to access your Remember The Milk account. After that click on the "login completed" button. This will tell Home Assistant that you have completed the login process on the Remember The Milk page and Home Assistant should try to register with this account. @@ -59,12 +59,61 @@ If the registration was successful, the Configuration panel will disappear from In the background Home Assistant downloaded a "token" from the Remember The Milk server which is stored in the `remember_the_milk.conf` file locally. So you only need to register once. After that the token is used to authenticate with the server. -## {% linkable_title Creating tasks %} +## {% linkable_title Creating/updating tasks with service ```create_task```%} -This component offers a new service domain ```remember_the_milk``` with the service ```create_task```. You can call this service with the argument ```name``` to create a new task in your Remember The Milk account. You can call this service from your usual automations. +This component offers a new service domain ```remember_the_milk``` with the services ```_create_task```. You can call this service with the argument ```name``` and the optional parameter ```id``` to create a new task in your Remember The Milk account. You can call this service from your usual automations. + +If you set an ```id``` and a task with that id exists already, the existing task is updated, rather than creating a new task. This way you can change the name of the task. If you do not set an ```id```, a new task is created with every call. If you're using this from an automation, you could use the name of your automation as id or the entity that triggered the task to be created. This way you can later on update or complete this task. The task creation supports the "smart syntax", so to create a task with the tag "from_hass" which is due today you can create a task with the name ```test task created in Home Assistant ^today #from_hass```. More info about the smart syntax is available on the [Remember The Milk documentation](https://www.rememberthemilk.com/help/answer/basics-smartadd-howdoiuse). +**Note:** +At the moment, smart syntax is *not* supported when updating tasks. All smart syntax commands are ignored during the update and will end up as normal text in the name of the task. + +|Service data attribute | Optional | Description | Example | +|-----------------------|----------|-------------|---------| +| name | no | Name of the new task, you can use the smart syntax here. | "do this ^today #from_hass" | +| id | yes | Identifier for the task you're creating, can be used to update or complete the task later on | "myid" | + +## {% linkable_title Completing tasks with service ```complete_task```%} + +Complete a tasks that was privously created from Home Assistant. You can not complete tasks that were created outside of Home Assistant. + +If you have created your task with an ```id```, calling ```_complete_task``` with the parameter ```id``` will then complete your task. + +|Service data attribute | Optional | Description | Example | +|-----------------------|----------|-------------|---------| +| id | no | Identifier that was defined when creating the task | "myid" | + +## {% linkable_title Automation example %} + +Here's an example for an automation that creates a new task whenever ```sensor.mysensor``` is ```on``` and completes it when the sensor reports ```off```. This way it reminds you to switch it off. By using the ```entity_id``` as id for the task, you can use the same rule also for multiple sensors. + + +```yaml +- id: mysensor_on + trigger: + platform: state + entity_id: sensor.mysensor + to: on + action: + - service: remember_the_milk.myaccount_create_task + data_template: + name: "Please switch of {{trigger.entity_id}}" + id: "{{trigger.entity_id}}" +- id: mysensor_off + trigger: + platform: state + entity_id: sensor.mysensor + to: off + action: + - service: remember_the_milk.myaccount_complete_task + data_template: + id: "{{trigger.entity_id}}" + +``` + + ## {% linkable_title Disclaimer %} This product uses the Remember The Milk API but is not endorsed or certified by Remember The Milk. diff --git a/source/_components/remote.apple_tv.markdown b/source/_components/remote.apple_tv.markdown index 692de767fcd..7fe3bc7f9af 100644 --- a/source/_components/remote.apple_tv.markdown +++ b/source/_components/remote.apple_tv.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Apple TV Remote" -description: "Instructions how to integrate Apple TV remote into Home Assistant." +description: "Instructions on how to integrate Apple TV remote into Home Assistant." date: 2017-06-26 20:50 sidebar: true comments: false diff --git a/source/_components/remote.harmony.markdown b/source/_components/remote.harmony.markdown index ec7057a5a80..c6178d048c9 100755 --- a/source/_components/remote.harmony.markdown +++ b/source/_components/remote.harmony.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Harmony Hub Remote" -description: "Instructions how to integrate Harmony Hub remotes into Home Assistant." +description: "Instructions on how to integrate Harmony Hub remotes into Home Assistant." date: 2016-11-05 17:00 sidebar: true comments: false @@ -23,37 +23,33 @@ Supported units: - Harmony Pro - Harmony Elite - The preferred way to setup the Harmony remote is by enabling the [discovery component](/components/discovery/). -However, if you want to manually configure the device, you will need to add its settings to your `configuration.yaml`. +However, if you want to manually configure the device, you will need to add its settings to your `configuration.yaml` file: ```yaml # Example configuration.yaml entry remote: - platform: harmony name: Bedroom - host: 10.168.1.13 # The IP of your hub + host: 10.168.1.13 ``` -You can override some default configuration values on a discovered hub (e.g. the `port` or `activity`) by adding -a `configuration.yaml` setting. In this case leave the `host` setting empty so the platform will -discover the host IP automatically, but set the `name` in the config to match exactly the name you have -set for your Hub so the platform knows what Hub you are trying to configure. +You can override some default configuration values on a discovered hub (e.g., the `port` or `activity`) by adding a `configuration.yaml` setting. In this case leave the `host` setting empty so the platform will discover the host IP automatically, but set the `name` in the config to match exactly the name you have set for your Hub so the platform knows what Hub you are trying to configure. ```yaml # Example configuration.yaml entry with discovery - platform: harmony - name: Living Room # This name must match the name you have set on the Hub - activity: Watch TV # Overriding the 'activity' setting for this discovered hub + name: Living Room + activity: Watch TV ``` Configuration variables: -- **name** (*Required*): The hub's name to display in the frontend. +- **name** (*Required*): The hub's name to display in the frontend. This name must match the name you have set on the Hub. - **host** (*Optional*): The Harmony device's IP address. Leave empty for the IP to be discovered automatically. - **port** (*Optional*): The Harmony device's port. Defaults to 5222. -- **activity** (*Optional*): Activity to use when `turn_on` service is called without any data. +- **activity** (*Optional*): Activity to use when `turn_on` service is called without any data. Overrides the `activity` setting for this discovered hub. - **delay_secs** (*Optional*): Default duration in seconds between sending commands to a device. Configuration file: @@ -103,6 +99,7 @@ data: - home - 1 - 2 + device: 4576546 delay_secs: 0.6 ``` @@ -118,20 +115,23 @@ Synchronize the Harmony device with the Harmony web service if any changes are m Template sensors can be utilized to display current activity in the frontend. +{% raw %} ```yaml sensor: - platform: template sensors: family_room: - value_template: {% raw %}'{{ states.remote.family_room.attributes.current_activity }}'{% endraw %} + value_template: '{{ states.remote.family_room.attributes.current_activity }}' friendly_name: 'Family Room' bedroom: - value_template: {% raw %}'{{ states.remote.bedroom.attributes.current_activity }}'{% endraw %} + value_template: '{{ states.remote.bedroom.attributes.current_activity }}' friendly_name: 'bedroom' ``` +{% endraw %} -The example below shows how to control an `input_boolean` switch using the Harmony remote's current activity. The switch will turn on when the remote's state changes and the Kodi activity is started and off when the remote's state changes and the current activity is PowerOff. +The example below shows how to control an `input_boolean` switch using the Harmony remote's current activity. The switch will turn on when the remote's state changes and the Kodi activity is started and off when the remote's state changes and the current activity is "PowerOff". +{% raw %} ```yaml automation: - alias: "Watch TV started from harmony hub" @@ -140,7 +140,7 @@ automation: entity_id: remote.family_room condition: condition: template - value_template: {% raw %}'{{ trigger.to_state.attributes.current_activity == "Kodi" }}'{% endraw %} + value_template: '{{ trigger.to_state.attributes.current_activity == "Kodi" }}' action: service: input_boolean.turn_on entity_id: input_boolean.notify @@ -150,8 +150,9 @@ automation: entity_id: remote.family_room condition: condition: template - value_template: {% raw %}'{{ trigger.to_state.attributes.current_activity == "PowerOff" }}'{% endraw %} + value_template: '{{ trigger.to_state.attributes.current_activity == "PowerOff" }}' action: service: input_boolean.turn_off entity_id: input_boolean.notify -```` +``` +{% endraw %} diff --git a/source/_components/remote.itach.markdown b/source/_components/remote.itach.markdown index 35e14d18524..5dd51679a23 100755 --- a/source/_components/remote.itach.markdown +++ b/source/_components/remote.itach.markdown @@ -16,7 +16,7 @@ ha_release: 0.39 The `itach` remote platform allows you to control IR devices with a [Global Caché iTach Device](https://www.globalcache.com/products/itach/ip2irspecs) and GC-100 devices. The Global Cache IR API are similar across their product line. See API documentation links at the end of this page. -In order to utilize the digital input (binary sensor) and relay (switch) features of your Global Cache device you will need to use the [gc100 component](https://home-assistant.io/components/gc100) and associated platforms. +In order to utilize the digital input (binary sensor) and relay (switch) features of your Global Cache device you will need to use the [gc100 component](/components/gc100) and associated platforms. To use your iTach remote in your installation, you will need to know the IR commands for your devices in Pronto hex format and add the following to your `configuration.yaml` file: diff --git a/source/_components/remote.kira.markdown b/source/_components/remote.kira.markdown index 7924da8fe7f..376d29837ae 100644 --- a/source/_components/remote.kira.markdown +++ b/source/_components/remote.kira.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Kira Remote" -description: "Instructions how to integrate Kira modules into Home Assistant." +description: "Instructions on how to integrate Kira modules into Home Assistant." date: 2017-05-07 17:00 sidebar: true comments: false diff --git a/source/_components/remote.markdown b/source/_components/remote.markdown index fada23fde39..7359fae9d25 100755 --- a/source/_components/remote.markdown +++ b/source/_components/remote.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Remotes" -description: "Instructions how to setup your remotes with Home Assistant." +description: "Instructions on how to setup your remotes with Home Assistant." date: 2016-11-05 19:39 sidebar: true comments: false diff --git a/source/_components/remote.xiaomi_miio.markdown b/source/_components/remote.xiaomi_miio.markdown new file mode 100644 index 00000000000..8284a738688 --- /dev/null +++ b/source/_components/remote.xiaomi_miio.markdown @@ -0,0 +1,148 @@ +--- +layout: page +title: "Xiaomi IR Remote" +description: "Instructions for how to integrate the Xiaomi IR Remote within Home Assistant." +date: 2017-01-25 17:08 +sidebar: true +comments: false +sharing: true +footer: true +logo: xiaomi.png +ha_category: Remote +ha_release: 0.63 +ha_iot_class: "Local Polling" +--- + +The `xiaomi miio` remote platform allows you to send IR commands from your Xiaomi IR Remote (ChuangmiIr). + +Please follow the instructions on [Retrieving the Access Token](/components/vacuum.xiaomi_miio/#retrieving-the-access-token) to get the API token to use in the `configuration.yaml` file. + +## {% linkable_title Configuring the Platform %} + +To add a Xiaomi IR Remote to your installation, add the following to your configuration.yaml file: +```yaml +remote: + - platform: xiaomi_miio + host: 192.168.42.42 + token: YOUR_TOKEN +``` + +{% configuration %} +host: + description: The IP of your remote. + required: true + type: string +token: + description: The API token of your remote. + required: true + type: string +name: + description: The name of your remote. + required: false + type: string +slot: + description: The slot used to save learned command. + required: false + type: int + default: 1 +timeout: + description: Timeout for learning a new command. + required: false + type: int + default: 30 +hidden: + description: Hide the entity from UI. There is currently no reason to show the entity in UI as turning it off or on does nothing. + required: false + type: boolean + default: True +commands: + required: false + type: map + keys: + command: + description: A list of commands as [raw (learned command)](/components/remote.xiaomi_miio/#raw) or [pronto hex code](/components/remote.xiaomi_miio/#pronto-hex-code). + required: true + type: list + +{% endconfiguration %} + +## {% linkable_title Full Configuration %} + +```yaml +remote: + - platform: xiaomi_miio + name: "bathroom remote" + host: 192.168.42.42 + token: YOUR_TOKEN + slot: 1 + timeout: 30 + hidden: false + commands: + activate_towel_heater: + command: + - raw:base64:[optional_frequency] + read_bad_poem: + command: + - raw:base64:[optional_frequency] + - pronto:pronto_hex:[optional_repeat] +``` + +## {% linkable_title Use named commands to create UI buttons %} + +```yaml +script: + towel_heater: + sequence: + - service: remote.send_command + entity_id: 'remote.bathroom_remote' + data: + command: + - 'activate_towel_heater' + please_cover_your_ears: + sequence: + - service: remote.send_command + entity_id: 'remote.bathroom_remote' + data: + command: + - 'read_bad_poem' +``` + +## {% linkable_title Command Types %} + +The Xiaomi IR Remote Platform currently supports two different formats for IR codes. + +### {% linkable_title Raw %} + +A raw command is a command learned from [`remote.xiaomi_miio_learn_command`](/components/remote.xiaomi_miio/#remotexiaomi_miio_learn_command). + +A raw command is defined as in the following example: +`raw:Z6UFANEAAAAjAQAAAwkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQIAE=` +with an optional last parameter of frequency: +`raw:Z6UFANEAAAAjAQAAAwkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQIAE=:38400` + +### {% linkable_title Pronto Hex Code %} + +A pronto hex code is a hex code often supplied by the device manufacturer. + +A pronto hex code is defined as in the following example: +`pronto:0000 006C 0022 0002 015B 00AD 0016 0016 0016 0016 0016 0016 0016 0016 0016 0016 0016 0016 0016 0016 0016 0016 0016 0041 0016 0041 0016 0041 0016 0041 0016 0041 0016 0041 0016 0041 0016 0016 0016 0016 0016 0041 0016 0016 0016 0041 0016 0016 0016 0016 0016 0016 0016 0016 0016 0041 0016 0016 0016 0041 0016 0016 0016 0041 0016 0041 0016 0041 0016 0041 0016 0623 015B 0057 0016 0E6E` +with an optional last parameter of repeats (required by some devices): +`pronto:0000 006C 0022 0002 015B 00AD 0016 0016 0016 0016 0016 0016 0016 0016 0016 0016 0016 0016 0016 0016 0016 0016 0016 0041 0016 0041 0016 0041 0016 0041 0016 0041 0016 0041 0016 0041 0016 0016 0016 0016 0016 0041 0016 0016 0016 0041 0016 0016 0016 0016 0016 0016 0016 0016 0016 0041 0016 0016 0016 0041 0016 0016 0016 0041 0016 0041 0016 0041 0016 0041 0016 0623 015B 0057 0016 0E6E:2` + +## {% linkable_title Platform Services %} + +The Xiaomi IR Remote Platform registers two services. + +### {% linkable_title `remote.send_command` %} + +Allows sending either named commands using an identifier or sending commands as one of the two types defined in [Command Types](/components/remote.xiaomi_miio/#command-types). + +### {% linkable_title `remote.xiaomi_miio_learn_command` %} + +Used to learn new commands. + +Use the entity_id of the Xiaomi IR Remote to start a learning process. + +`slot` and `timeout` can be specified, but multiple commands learned to the same slot can still be sent using [`remote.send_command`](/components/remote.xiaomi_miio/#remotesend_command) even if they are overwritten. + +After learning the command the base64 string can be found as a notification in Overview, the string can be copied by left clicking on the string and choose the copy option. diff --git a/source/_components/rest_command.markdown b/source/_components/rest_command.markdown index c01e8ce94ab..4e4ef8fb6f5 100644 --- a/source/_components/rest_command.markdown +++ b/source/_components/rest_command.markdown @@ -1,8 +1,8 @@ --- layout: page title: "RESTful Command" -description: "Instructions how to integrate REST commands into Home Assistant." -date: 2016-12-27 00:00 +description: "Instructions on how to integrate REST commands into Home Assistant." +date: 2018-02-24 00:00 sidebar: true comments: false sharing: true @@ -18,7 +18,7 @@ This component can expose regular REST commands as services. Services can be cal [script]: /components/script/ [automation]: /getting-started/automation/ -To enable this switch, add the following lines to your `configuration.yaml` file: +To use this component, add the following lines to your `configuration.yaml` file: ```yaml # Example configuration.yaml entry @@ -32,10 +32,55 @@ Configuration variables: - **[service_name]** (*Required*): The name used to expose the service. E.g., in the above example, it would be `rest_command.example_request`. - **url** (*Required*): The URL (support template) for sending request. - **method** (*Optional*): HTTP method to use (`get`, `post`, `put`, or `delete`). Defaults to `get`. + - **headers** (*Optional*): The headers for the requests. - **payload** (*Optional*): A string/template to send with request. - **username** (*Optional*): The username for HTTP authentication. - **password** (*Optional*): The password for HTTP authentication. - **timeout** (*Optional*): Timeout for requests. Defaults to 10 seconds. - **content_type** (*Optional*): Content type for the request. -The commands can be dynamic, using templates to insert values of other entities. Service call support variables for template stuff. +## {% linkable_title Examples %} + +The commands can be dynamic, using templates to insert values of other entities. Service call support variables for doing things with templates. + +{% raw %} +```yaml +# Example configuration.yaml entry +rest_command: + my_request: + url: https://slack.com/api/users.profile.set + method: POST + headers: + authorization: !secret rest_headers_secret + accept: 'application/json, text/html' + payload: '{"profile":{"status_text": "{{ status }}","status_emoji": "{{ emoji }}"}}' + content_type: 'application/json; charset=utf-8' +``` +{% endraw %} + +In this example entry, you can see some simple [templates](/docs/configuration/templating/) in use for dynamic parameters. + +Call the new service from [developer tools](/docs/tools/dev-tools/) in the sidebar with some `data` like: + +```json +{ + "status":"My Status Goes Here", + "emoji":":plex:" +} +``` +Or in an example `automation` + +```yaml +automation: +- alias: 'Arrive at Work' + trigger: + platform: zone + entity_id: device_tracker.my_device + zone: zone.work + event: enter + action: + - service: rest_command.my_request + data: + status: "At Work" + emoji: ":calendar:" +``` diff --git a/source/_components/rflink.markdown b/source/_components/rflink.markdown index 26515b5f8c3..208301d229b 100644 --- a/source/_components/rflink.markdown +++ b/source/_components/rflink.markdown @@ -1,7 +1,7 @@ --- layout: page title: "RFLink" -description: "Instructions how to integrate RFLink gateway into Home Assistant." +description: "Instructions on how to integrate RFLink gateway into Home Assistant." date: 2016-01-04 sidebar: true comments: false @@ -68,7 +68,7 @@ $ socat /dev/ttyACM0,b57600 TCP-LISTEN:1234,reuseaddr Other methods of exposing the serial interface over TCP are possible (eg: ESP8266 or using Arduino Wifi shield). Essentially the serial stream should be directly mapped to the TCP stream. -Tested with Wifi serial bridge [esp-link V2.2.3](https://github.com/jeelabs/esp-link/releases/tag/v2.2.3) running on a NodeMCU (ESP8266 Wifi module) with ESP8266 TXD0 (pin D10) and RXD0 (pin D9) connected to Arduino MEGA 2560 RX (Pin 2) and TX (Pin 3) respectively. +Tested with Wifi serial bridge [esp-link V2.2.3](https://github.com/jeelabs/esp-link/releases/tag/v2.2.3) running on a NodeMCU (ESP8266 Wifi module) with ESP8266 TXD0 (pin D10) and RXD0 (pin D9) connected to Arduino MEGA 2560 RX (Pin 2) and TX (Pin 3) respectively.

Due to different logic levels, a voltage level shifter is required between the 3.3V NodeMCU and 5V Arduino MEGA 2560 pins. The BSS138 bidirectional logic level converter has been tested for serial pins and the [link](https://www.aliexpress.com/item/8CH-IIC-I2C-Logic-Level-Converter-Bi-Directional-Module-DC-DC-5V-to-3-3V-Setp/32238089139.html) is recommended for the CC2500 transceiver (used for Ikea Ansluta and Philips Living Colors) @@ -127,7 +127,7 @@ Wildcards only work at the end of the ID, not in the middle or front! ### {% linkable_title Device support %} -Even though a lot of devices are supported by RFLink, not all have been tested/implemented. If you have a device supported by RFLink but not by this component please consider testing and adding support yourself or [create an issue](https://github.com/home-assistant/home-assistant/issues/new) and mention `@aequitas` in the description. +Even though a lot of devices are supported by RFLink, not all have been tested/implemented. If you have a device supported by RFLink but not by this component please consider testing and adding support yourself. ### {% linkable_title Device Incorrectly Identified %} @@ -135,8 +135,8 @@ If you find a device is recognized differently, with different protocols or the ### {% linkable_title Technical Overview %} -- The`rflink` Python module is a asyncio transport/protocol which is setup to fire a callback for every (valid/supported) packet received by the RFLink gateway. -- This component uses this callback to distribute 'rflink packet events' over [Home Assistant's event bus](https://home-assistant.io/docs/configuration/events/) which can be subscribed to by entities/platform implementations. +- The`rflink` Python module is an asyncio transport/protocol which is setup to fire a callback for every (valid/supported) packet received by the RFLink gateway. +- This component uses this callback to distribute 'rflink packet events' over [Home Assistant's event bus](/docs/configuration/events/) which can be subscribed to by entities/platform implementations. - The platform implementation takes care of creating new devices (if enabled) for unseen incoming packet ID's. - Device entities take care of matching to the packet ID, interpreting and performing actions based on the packet contents. Common entity logic is maintained in this main component. diff --git a/source/_components/rfxtrx.markdown b/source/_components/rfxtrx.markdown index 64c0e1dee45..046e27ac027 100644 --- a/source/_components/rfxtrx.markdown +++ b/source/_components/rfxtrx.markdown @@ -1,7 +1,7 @@ --- layout: page title: "RFXtrx" -description: "Instructions how to integrate RFXtrx into Home Assistant." +description: "Instructions on how to integrate RFXtrx into Home Assistant." date: 2015-10-08 10:15 sidebar: true comments: false @@ -24,7 +24,7 @@ rfxtrx: Configuration variables: -- **device** (*Required*): The path to your device, e.g. `/dev/serial/by-id/usb-RFXCOM_RFXtrx433_A1Y0NJGR-if00-port0` +- **device** (*Required*): The path to your device, e.g., `/dev/serial/by-id/usb-RFXCOM_RFXtrx433_A1Y0NJGR-if00-port0` - **debug** (*Optional*): If you want to receive debug output. - **dummy** (*Optional*): Then you have need a connected drive to test your settings. Can be useful for debugging and testing. diff --git a/source/_components/ring.markdown b/source/_components/ring.markdown index 762810d6a70..4daf012653f 100644 --- a/source/_components/ring.markdown +++ b/source/_components/ring.markdown @@ -21,13 +21,19 @@ To enable device linked in your [Ring.com](https://ring.com/) account, add the f ```yaml # Example configuration.yaml entry ring: - username: you@example.com - password: secret + username: YOUR_USERNAME + password: YOUR_PASSWORD ``` -Configuration variables: - -- **username** (*Required*): The username for accessing your Ring account. -- **password** (*Required*): The password for accessing your Ring account. +{% configuration %} +username: + description: The username for accessing your Ring account. + required: true + type: string +password: + description: The password for accessing your Ring account. + required: true + type: string +{% endconfiguration %} Finish its configuration by visiting the [Ring binary sensor](/components/binary_sensor.ring/) or [Ring sensor](/components/sensor.ring/) documentation. diff --git a/source/_components/rpi_gpio.markdown b/source/_components/rpi_gpio.markdown index b0f2fdc3703..31a1befde2e 100644 --- a/source/_components/rpi_gpio.markdown +++ b/source/_components/rpi_gpio.markdown @@ -1,7 +1,7 @@ --- layout: page -title: "Raspberry PI GPIO" -description: "Instructions how to integrate the GPIO capability of a Raspberry PI into Home Assistant." +title: "Raspberry Pi GPIO" +description: "Instructions on how to integrate the GPIO capability of a Raspberry Pi into Home Assistant." date: 2016-08-30 19:00 sidebar: true comments: false diff --git a/source/_components/rpi_pfio.markdown b/source/_components/rpi_pfio.markdown index 51feb22b704..1b3c4785e53 100644 --- a/source/_components/rpi_pfio.markdown +++ b/source/_components/rpi_pfio.markdown @@ -1,7 +1,7 @@ --- layout: page title: "PiFace Digital I/O" -description: "Instructions how to integrate the PiFace Digital I/O module into Home Assistant." +description: "Instructions on how to integrate the PiFace Digital I/O module into Home Assistant." date: 2016-05-08 15:00 sidebar: true comments: false diff --git a/source/_components/rss_feed_template.markdown b/source/_components/rss_feed_template.markdown index 804c3bbe4aa..70c3bbd7f32 100644 --- a/source/_components/rss_feed_template.markdown +++ b/source/_components/rss_feed_template.markdown @@ -17,7 +17,7 @@ The `rss_feed_template` component can export any information from Home Assistant For example, on Android, the app "Simple RSS Widget" can be used to display temperatures on the home screen. ```yaml -# Example configuration.yml entry +# Example configuration.yaml entry rss_feed_template: # Accessible on /api/rss_template/garden # Example: https://localhost:8123/api/rss_template/garden diff --git a/source/_components/sabnzbd.markdown b/source/_components/sabnzbd.markdown new file mode 100644 index 00000000000..16e665b6002 --- /dev/null +++ b/source/_components/sabnzbd.markdown @@ -0,0 +1,117 @@ +--- +layout: page +title: "SABnzbd" +description: "Instructions on how to integrate SABnzbd with Home Assistant." +date: 2018-03-03 19:09 +sidebar: true +comments: false +sharing: true +footer: true +logo: sabnzbd.png +ha_category: Downloading +ha_release: 0.70 +ha_iot_class: "Local Polling" +--- + +The `sabnzbd` component will allow you to monitor and control your downloads with [SABnzbd](https://sabnzbd.org) from +within Home Assistant and setup automations based on the information. + +If SABnzbd is discovered on your network, you can enter your API Key in the Configurator. Press "CONFIGURE" to do it. + +

+ +

+ +This will create services for interacting with SABnzbd in scripts and automations, but no sensors will be created. + + +To configure SABnzbd, add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +sabnzbd: + api_key: YOUR_SABNZBD_API_KEY +``` + +{% configuration %} +api_key: + description: The API key used to interact with your SABnzbd instance + required: true + type: string +host: + description: The hostname of your SABnzbd instance, e.g., 192.168.1.32. + required: false + default: localhost + type: string +name: + description: The name of your SABnzbd instance (this will be the prefix for all created sensors). + required: false + default: SABnzbd + type: string +port: + description: The port on which your SABnzbd instance is listening. + required: false + default: 8080 + type: integer +sensors: + description: List of variables for which to create sensor entities. + required: false + type: list +ssl: + description: Set to true to use SSL (https) to access SABnzbd. + required: false + default: false + type: boolean +{% endconfiguration %} + +Available sensors are: + + * `current_status`: The current status of SABnzbd (Idle, Paused, etc.) + * `speed`: The current download speed + * `queue_size`: The total size of the download queue + * `queue_remaining`: The remaining size of the download queue + * `disk_size`: The total disk size at SABnzbd's download location + * `disk_free`: The available disk space at SABnzbd's download location + * `queue_count`: The number of items in the download queue + * `day_size`: GB downloaded today + * `week_size`: GB downloaded this week + * `month_size`: GB downloaded this month + * `total_size`: Total GB downloaded + +## {% linkable_title Full examples %} + +```yaml +# Example configuration.yaml entry +sabnzbd: + api_key: YOUR_SABNZBD_API_KEY + host: 192.168.1.32 + name: sab + port: 9090 + ssl: true + sensors: + - current_status + - speed + - queue_size + - queue_remaining + - disk_size + - disk_free + - queue_count + - day_size + - week_size + - month_size + - total_size +``` +This will attempt to access your SABnzbd instance at https://192.168.1.32:9090 and will create sensors named +`sensor.sab_status`, `sensor.sab_speed`, etc. + +## {% linkable_title Services %} + +### {% linkable_title Media control services %} +Available services: `pause`, `resume`, `set_speed`. + +#### {% linkable_title Service `sabnzbd/set_speed` %} + +| Service data attribute | Optional | Description | +|------------------------|----------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| `speed` | yes | Sets the download speed limit. If specified as a number with no units, will be interpreted as a percent. If units are provided (e.g., 500K) will be interpreted absolutely. Defaults to 100 | + diff --git a/source/_components/satel_integra.markdown b/source/_components/satel_integra.markdown index c882e71c626..8e71d59e7f0 100644 --- a/source/_components/satel_integra.markdown +++ b/source/_components/satel_integra.markdown @@ -13,7 +13,7 @@ ha_release: 0.54 ha_iot_class: "Local Push" --- -The `satel_integra` component will allow Home Assistant users who own a Satel Integra alarm panel to leverage their alarm system and its sensors to provide Home Assistant with information about their homes. Connectivity between Home Assistant and the alarm is accomplished through a ETHM extension module that must be installed in the alarm. +The `satel_integra` component will allow Home Assistant users who own a Satel Integra alarm panel to leverage their alarm system and its sensors to provide Home Assistant with information about their homes. Connectivity between Home Assistant and the alarm is accomplished through a ETHM extension module that must be installed in the alarm. Compatible with ETHM-1 Plus module with firmware version > 2.00 (version 2.04 confirmed). There is currently support for the following device types within Home Assistant: @@ -56,7 +56,7 @@ Configuration variables: - **port** (*Optional*): The port on which the ETHM module listens for clients using integration protocol. Default: `7094` - **partition** (*Optional*): The partition to operate on. Integra can support multiple partitions, this platform only supports one. Default: `1` - **arm_home_mode** (*Optional*): The mode in which arm Satel Integra when 'arm home' is used. Possible options are `1`,`2` or `3`, default being `1`. For more information on what are the differences between them, please refer to Satel Integra manual. -- **zones** (*Optional*): This module does not discover currently which zones are actually in use, so it will only monitor the ones defined in the config. For each zone, a proper ID must be given as well as it's name (does not need to match the one specified in Satel Integra alarm). For more information on the available zone types, take a look at the [Binary Sensor](/components/binary_sensor.alarmdecoder/) docs. *Note: If no zones are specified, Home Assistant will not load any binary_sensor components.* +- **zones** (*Optional*): This module does not discover currently which zones are actually in use, so it will only monitor the ones defined in the config. For each zone, a proper ID must be given as well as its name (does not need to match the one specified in Satel Integra alarm). For more information on the available zone types, take a look at the [Binary Sensor](/components/binary_sensor.alarmdecoder/) docs. *Note: If no zones are specified, Home Assistant will not load any binary_sensor components.* List of all zone IDs can be taken from DloadX program. diff --git a/source/_components/scene.deconz.markdown b/source/_components/scene.deconz.markdown new file mode 100644 index 00000000000..b5fdf7fa7fe --- /dev/null +++ b/source/_components/scene.deconz.markdown @@ -0,0 +1,18 @@ +--- +layout: page +title: "deCONZ scenes" +description: "Instructions on how to integrate deCONZ scenes into Home Assistant." +date: 2017-11-19 20:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: deconz.jpeg +ha_category: Scene +ha_release: "0.61" +ha_iot_class: "Local Push" +--- + +See the [deCONZ main component](/components/deconz/) for configuration instructions. + +Entity Ids will be scene.group_scene_name, where group is which group the scene belongs to and the name of the scene, both group and name are defined in deCONZ. \ No newline at end of file diff --git a/source/_components/scene.hunterdouglas_powerview.markdown b/source/_components/scene.hunterdouglas_powerview.markdown index 55989717247..2ef810a113e 100644 --- a/source/_components/scene.hunterdouglas_powerview.markdown +++ b/source/_components/scene.hunterdouglas_powerview.markdown @@ -1,14 +1,14 @@ --- layout: page title: "PowerView Scenes" -description: "Instructions how to setup Hunter Douglas PowerView scenes within Home Assistant." +description: "Instructions on how to setup Hunter Douglas PowerView scenes within Home Assistant." date: 2016-03-11 16:00 sidebar: true comments: false sharing: true footer: true logo: hunter-douglas-powerview.png -ha_category: Cover +ha_category: Scene ha_release: 0.15 --- diff --git a/source/_components/scene.knx.markdown b/source/_components/scene.knx.markdown new file mode 100644 index 00000000000..e77b6571811 --- /dev/null +++ b/source/_components/scene.knx.markdown @@ -0,0 +1,34 @@ +--- +layout: page +title: "KNX Scene" +description: "Instructions on how to integrate KNX Scenes into Home Assistant." +date: 2018-02-03 20:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: knx.png +ha_category: Scene +ha_release: "0.63" +--- + +The `knx` scenes platform allows you to trigger [KNX](http://www.knx.org) scenes. + +The `knx` component must be configured correctly, see [KNX Component](/components/knx). + +```yaml +# Example configuration.yaml entry +scene: + - name: Romantic + platform: knx + address: 8/8/8 + scene_number: 23 +``` + +Configuration variables: + +- **name** (*Optional*): A name for this device used within Home Assistant. +- **address**: KNX group address of the binary sensor. +- **scene_number** KNX scene number to be activated. + + diff --git a/source/_components/scene.lifx_cloud.markdown b/source/_components/scene.lifx_cloud.markdown index cddb7cafd26..7b6ac7a2799 100644 --- a/source/_components/scene.lifx_cloud.markdown +++ b/source/_components/scene.lifx_cloud.markdown @@ -17,8 +17,8 @@ The `lifx_cloud` scene platform allows you to activate the scenes that LIFX smar ```yaml # Example configuration.yaml entry scene: - platform: lifx_cloud - token: YOUR_LIFX_TOKEN + - platform: lifx_cloud + token: YOUR_LIFX_TOKEN ``` Configuration variables: diff --git a/source/_components/scene.litejet.markdown b/source/_components/scene.litejet.markdown index fca7954e1b8..511c1cb6fa2 100644 --- a/source/_components/scene.litejet.markdown +++ b/source/_components/scene.litejet.markdown @@ -1,7 +1,7 @@ --- layout: page title: "LiteJet Scenes" -description: "Instructions how to setup LiteJet scenes within Home Assistant." +description: "Instructions on how to setup LiteJet scenes within Home Assistant." date: 2016-10-26 16:00 sidebar: true comments: false diff --git a/source/_components/scene.lutron_caseta.markdown b/source/_components/scene.lutron_caseta.markdown index 2d10556edf5..7e07ed485e6 100644 --- a/source/_components/scene.lutron_caseta.markdown +++ b/source/_components/scene.lutron_caseta.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Lutron Caseta Scene" -description: "Instructions how to setup Lutron Caseta Scenes within Home Assistant." +description: "Instructions on how to setup Lutron Caseta Scenes within Home Assistant." date: 2017-07-28 16:00 sidebar: true comments: false diff --git a/source/_components/scene.markdown b/source/_components/scene.markdown index 74e8dd09b4f..4bf9f168f75 100644 --- a/source/_components/scene.markdown +++ b/source/_components/scene.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Scenes" -description: "Instructions how to setup scenes within Home Assistant." +description: "Instructions on how to setup scenes within Home Assistant." date: 2015-03-23 19:59 sidebar: true comments: false @@ -11,7 +11,7 @@ logo: home-assistant.png ha_category: Organization --- -You can create scenes that capture the states you want certain entities to be. For example a scene can specify that light A should be turned on and light B should be bright red. +You can create scenes that capture the states you want certain entities to be. For example, a scene can specify that light A should be turned on and light B should be bright red. ```yaml # Example configuration.yaml entry @@ -38,6 +38,13 @@ Configuration variables: - **name** (*Required*): Friendly name of scene. - **entities** (*Required*): Entities to control. +As you can see, there are two ways to define the states of each `entity_id`: + +- Define the `state` directly with the entity. +- Define a complex state with its attributes. + +The mapping from states to services is done with the [state helper](https://github.com/home-assistant/home-assistant/blob/master/homeassistant/helpers/state.py#L74). So, please have a look there for available states for your scenes. + Scenes can be activated using the service `scene.turn_on` (there is no 'scene.turn_off' service). ```yaml @@ -55,5 +62,5 @@ automation: ```

-Please note that the scene component currently only supports one service call per entity to achieve the state. Due to this limitation you cannot set states belonging to different services. +Please note that the scene component currently only supports one service call per entity to achieve the state. Due to this limitation, you cannot set states belonging to different services. A workaround for this limitation is to write a script, which you then turn on in your scene.

diff --git a/source/_components/scene.tahoma.markdown b/source/_components/scene.tahoma.markdown new file mode 100644 index 00000000000..b5cd1c42940 --- /dev/null +++ b/source/_components/scene.tahoma.markdown @@ -0,0 +1,17 @@ +--- +layout: page +title: "Tahoma Scene" +description: "Instructions on how to integrate Tahoma scenes into Home Assistant." +date: 2018-02-18 12:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: tahoma.png +ha_category: Scene +ha_release: 0.64 +--- + +The `tahoma` scene platform lets you trigger scenes added to your Tahoma Box in Home Assistant. + +Scenes will be added automatically. Please refer to the [component](/components/tahoma/) configuration on how to setup Tahoma. diff --git a/source/_components/scene.tuya.markdown b/source/_components/scene.tuya.markdown new file mode 100644 index 00000000000..70babb97885 --- /dev/null +++ b/source/_components/scene.tuya.markdown @@ -0,0 +1,24 @@ +--- +layout: page +title: "Tuya Scene" +description: "Instructions on how to setup the Tuya scene within Home Assistant." +date: 2018-07-20 09:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: tuya.png +ha_category: Scene +ha_release: 0.75 +--- + + +The `tuya` scene platform allows you to activate your [Tuya Smart](https://www.tuya.com) scenes. + +The platform supports scenes. + +The device state in frontend panel will not change immediately after you activate a scene. + +

+Full configuration details can be found on the main [Tuya component](/components/tuya/) page. +

\ No newline at end of file diff --git a/source/_components/scene.vera.markdown b/source/_components/scene.vera.markdown new file mode 100644 index 00000000000..8cef7235eca --- /dev/null +++ b/source/_components/scene.vera.markdown @@ -0,0 +1,21 @@ +--- +layout: page +title: "Vera Scene" +description: "Instructions on how to integrate Vera Scenes into Home Assistant." +date: 2017-11-20 20:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: vera.png +ha_category: Scene +ha_iot_class: "Local Push" +ha_release: "0.60" +--- + +The `vera` platform allows you to control your [Vera](http://getvera.com/) scenes from within Home Assistant. + +They will be automatically discovered if the `vera` component is loaded. + +For more configuration information see the [Vera component](/components/vera/) documentation. + diff --git a/source/_components/scene.wink.markdown b/source/_components/scene.wink.markdown index 50ef56848f4..cf8e79cf4cc 100644 --- a/source/_components/scene.wink.markdown +++ b/source/_components/scene.wink.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Wink Scene" -description: "Instructions how to setup the Wink scenes(shortcuts) within Home Assistant." +description: "Instructions on how to setup the Wink scenes(shortcuts) within Home Assistant." date: 2017-04-01 16:45 sidebar: true comments: false diff --git a/source/_components/script.markdown b/source/_components/script.markdown index 4b0fa016dce..856b758aab8 100644 --- a/source/_components/script.markdown +++ b/source/_components/script.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Scripts" -description: "Instructions how to setup scripts within Home Assistant." +description: "Instructions on how to setup scripts within Home Assistant." date: 2015-03-23 19:59 sidebar: true comments: false @@ -26,7 +26,7 @@ script:          message: Current temperature is {% raw %}{{ states.sensor.temperature.state }}{% endraw %} ```

-Script names (e.g. `message_temperature` in the example above) are not allowed to contain dash (minus) characters, i.e. `-`. +Script names (e.g., `message_temperature` in the example above) are not allowed to contain dash (minus) characters, i.e. `-`. The preferred way to separate words for better readability is to use underscore (`_`) characters.

@@ -112,3 +112,9 @@ script: title: "{% raw %}{{ title }}{% endraw %}" message: "{% raw %}{{ message }}{% endraw %}" ``` + +### {% linkable_title In the Overview %} + +Scripts in the Overview panel will be displayed with an **ACTIVATE** button if the device has no `delay:` or `wait:` statement, and as a toggle switch if it has either of those. + +This is to enable you to stop a running script. diff --git a/source/_components/scsgate.markdown b/source/_components/scsgate.markdown index c70238554ca..30fa3c975f4 100644 --- a/source/_components/scsgate.markdown +++ b/source/_components/scsgate.markdown @@ -1,7 +1,7 @@ --- layout: page title: "SCSGate" -description: "Instructions how to integrate SCSGate into Home Assistant." +description: "Instructions on how to integrate SCSGate into Home Assistant." date: 2016-01-31 19:20 sidebar: true comments: false @@ -25,7 +25,7 @@ scsgate: Configuration variables: -- **device** (*Required*): The path to your device, e.g. `/dev/ttyACM0` +- **device** (*Required*): The path to your device, e.g., `/dev/ttyACM0` ### {% linkable_title How to find the scs_id for your devices %} diff --git a/source/_components/sensor.abode.markdown b/source/_components/sensor.abode.markdown index b886d385ab7..f2076b85f95 100644 --- a/source/_components/sensor.abode.markdown +++ b/source/_components/sensor.abode.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Abode Sensor" -description: "Instructions how to integrate Abode sensors into Home Assistant." +description: "Instructions on how to integrate Abode sensors into Home Assistant." date: 2017-10-05 14:00 sidebar: true comments: false diff --git a/source/_components/sensor.ads.markdown b/source/_components/sensor.ads.markdown new file mode 100644 index 00000000000..2360ac70c37 --- /dev/null +++ b/source/_components/sensor.ads.markdown @@ -0,0 +1,51 @@ +--- +layout: page +title: "ADS Sensor" +description: "Instructions on how to integrate ADS numeric values into Home Assistant." +date: 2017-10-25 10:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: beckhoff.png +ha_category: Sensor +ha_release: "0.60" +ha_iot_class: "Local Push" +--- + +The `ads` sensor platform allows reading the value of a numeric variable on your ADS device. The variable can be of type *INT*, *UINT* or *BYTE*. + +To use your ADS device, you first have to set up your [ADS hub](/components/ads/) and then add the following to your `configuration.yaml` +file: + +```yaml +# Example configuration.yaml entry +sensor: + - platform: ads + adsvar: GVL.temperature + unit_of_measurement: '°C' + adstype: int +``` + +{% configuration %} + adsvar: + required: true + description: The name of the variable which you want to access. + type: string + adstype: + required: false + description: The datatype of the ADS variable, possible values are int, uint, byte. + default: int + type: string + name: + required: false + description: An identifier for the sensor. + type: string + factor: + required: false + description: A factor that divides the stored value before displaying in Home Assistant. + default: 1 + type: integer +{% endconfiguration %} + +The *factor* can be used to implement fixed decimals. E.g., set *factor* to 100 if you want to display a fixed decimal value with two decimals. A variable value of `123` will be displayed as `1.23`. diff --git a/source/_components/sensor.airvisual.markdown b/source/_components/sensor.airvisual.markdown index bedf30c7d17..896c09234c3 100644 --- a/source/_components/sensor.airvisual.markdown +++ b/source/_components/sensor.airvisual.markdown @@ -13,21 +13,24 @@ ha_release: 0.53 ha_iot_class: "Cloud Polling" --- -The `airvisual` sensor platform queries the [AirVisual](https://airvisual.com/) API for air quality -data. Data can be collected via latitude/longitude or by city/state/country. -The resulting information creates sensors for the Air Quality Index (AQI), the -human-friendly air quality level, and the main pollutant of that area. Sensors -that conform to either/both the [U.S. and Chinese air quality standards](http://www.clm.com/publication.cfm?ID=366) can be -created. +The `airvisual` sensor platform queries the [AirVisual](https://airvisual.com/) +API for air quality data. Data can be collected via latitude/longitude or by +city/state/country. The resulting information creates sensors for the Air +Quality Index (AQI), the human-friendly air quality level, and the main +pollutant of that area. Sensors that conform to either/both the +[U.S. and Chinese air quality standards](http://www.clm.com/publication.cfm?ID=366) +can be created. -This platform requires an AirVisual API key, which can be obtained [here](https://airvisual.com/api). Note -that the platform was designed using the "Community" package; the "Startup" -and "Enterprise" package keys should continue to function, but actual results -may vary (or not work at all). +This platform requires an AirVisual API key, which can be obtained +[here](https://airvisual.com/api). Note that the platform was designed using +the "Community" package; the "Startup" and "Enterprise" package keys should +continue to function, but actual results may vary (or not work at all).

The "Community" API key is limited to 10,000 calls per month. In order to leave -a buffer, the `airvisual` platform queries the API every 10 minutes. +a buffer, the `airvisual` platform queries the API every 10 minutes by default. +Modification of this (via the `scan_interval` key) to a too-low value may +result in your API key being deactivated.

## {% linkable_title Configuring the Platform via Latitude/Longitude %} @@ -42,59 +45,67 @@ sensor: monitored_conditions: - us - cn + show_on_map: false + scan_interval: 30 + # Configure by latitude/longitude: latitude: 42.81212 longitude: 108.12422 - radius: 500 - show_on_map: false + # Or configure by location: + city: Los Angeles + state: California + country: USA ``` -Configuration variables: +{% configuration %} +api_key: + description: your AirVisual API key + required: required + type: string +monitored_conditions: + description: the air quality standard(s) to use (`us` for U.S., `cn` for Chinese) + required: required + type: list + default: ['us', 'cn'] +show_on_map: + description: whether to show a marker on the map at the specified location + required: optional + type: boolean + default: true +scan_interval: + description: the rate at which AirVisual should be polled for new data + required: optional + type: int + default: 600 +latitude: + description: the latitude of the location to monitor + required: optional + type: str + default: the latitude defined under the `homeassistant` key in `configuration.yaml` +longitude: + description: the longitude of the location to monitor + required: optional + type: str + default: the longitude defined under the `homeassistant` key in `configuration.yaml` +city: + description: the city to monitor + required: optional + type: str +state: + description: the state the city belongs to + required: optional + type: str +country: + description: the country the state belongs to + required: optional + type: str +{% endconfiguration %} -- **api_key** (*Required*): your AirVisual API key -- **monitored_conditions** (*Required*): the air quality standard(s) to use -(`us` for U.S., `cn` for Chinese) -- **latitude** (*Optional*): the latitude to monitor; if excluded, the latitude -defined under the `homeassistant` key in `configuration.yaml` will be used -- **longitude** (*Optional*): the longitude to monitor; if excluded, the longitude -defined under the `homeassistant` key in `configuration.yaml` will be used -- **radius** (*Optional*): the radius (in meters) around the latitude/longitude to -search for the nearest city; defaults to `1000` -- **show_on_map** (*Optional*): whether to show a marker on the map at the specified -location; defaults to `true` - -## {% linkable_title Configuring the Platform via City/State/Country %} - -To enable the platform and gather data via city/state/country, add the -following lines to your `configuration.yaml` file: - -```yaml -sensor: - - platform: airvisual - api_key: abc123 - monitored_conditions: - - us - - cn - city: southend-on-sea - state: essex - country: uk - show_on_map: false -``` - -Configuration variables: - -- **api_key** (*Required*): your AirVisual API key -- **monitored_conditions** (*Required*): the air quality standard(s) to use -(`us` for U.S., `cn` for Chinese) -- **city** (*Optional*): the city to monitor -- **state** (*Optional*): the state/region to monitor -- **country** (*Optional*): the country to monitor -- **show_on_map** (*Optional*): whether to show a marker on the map at the specified -location; defaults to `true` +## {% linkable_title Determining the City/State/Country %} To easily determine the proper values for a particular location, use the -[AirVisual region directory](https://airvisual.com/world). Once you browse to the particular city you want, -take note of the breadcrumb title, which is of the form -`country > state/region > city`. Use this information to fill out +[AirVisual region directory](https://airvisual.com/world). Once you browse to +the particular city you want, take note of the breadcrumb title, which is of +the form `country > state/region > city`. Use this information to fill out `configuration.yaml`. For example, Sao Paulo, Brazil shows a breadcrumb title of @@ -120,8 +131,8 @@ air quality standard: ### Air Quality Index -**Description:** This sensor displays a numeric air quality index (AQI), a metric -for the overall "health" of the air. +**Description:** This sensor displays a numeric air quality index (AQI), a +metric for the overall "health" of the air. **Example Sensor Name:** `sensor.chinese_air_quality_index` diff --git a/source/_components/sensor.alarmdecoder.markdown b/source/_components/sensor.alarmdecoder.markdown index d7b0483f9a1..770e94f1b72 100644 --- a/source/_components/sensor.alarmdecoder.markdown +++ b/source/_components/sensor.alarmdecoder.markdown @@ -1,7 +1,7 @@ --- layout: page title: "AlarmDecoder Sensor" -description: "Instructions how to integrate AlarmDecoder sensors into Home Assistant." +description: "Instructions on how to integrate AlarmDecoder sensors into Home Assistant." date: 2017-04-02 13:28 sidebar: true comments: false diff --git a/source/_components/sensor.alpha_vantage.markdown b/source/_components/sensor.alpha_vantage.markdown new file mode 100644 index 00000000000..8b21b309732 --- /dev/null +++ b/source/_components/sensor.alpha_vantage.markdown @@ -0,0 +1,98 @@ +--- +layout: page +title: "Alpha Vantage" +description: "Instructions on how to setup Alpha Vantage within Home Assistant." +date: 2017-12-02 12:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: alpha_vantage.png +ha_category: Finance +ha_iot_class: "Cloud Polling" +featured: false +ha_release: "0.60" +--- + +The `alpha_vantage` sensor platform uses [Alpha Vantage](https://www.alphavantage.co) to monitor the stock market. This platform also provides detail about exchange rates. + +To enable the `alpha_vantage` platform, add the following lines to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +sensor: + - platform: alpha_vantage + api_key: YOUR_API_KEY + symbols: + - symbol: GOOGL + name: Google + foreign_exchange: + - name: USD_EUR + from: USD + to: EUR +``` + +Either a symbol or a foreign exchange must be configured, otherwise you will not get any data. + +{% configuration %} +api_key: + description: "The API Key from [Alpha Vantage](https://www.alphavantage.co)." + required: true + type: string +symbols: + description: List of stock market symbols for given companies. + required: false + type: map + keys: + name: + description: The name of the sensor to use for the frontend. + required: false + type: string + currency: + description: The name of the sensor to use for the frontend. + required: false + type: string + default: USD + symbol: + description: The stock market symbol for the given company. + required: required + type: string +foreign_exchange: + description: List of currencies. + type: map + required: false + keys: + name: + description: The name of the sensor to use for the frontend. + required: false + type: string + from: + description: The source currency. + required: required + type: string + to: + description: The target currency. + required: required + type: string +{% endconfiguration %} + +## {% linkable_title Examples %} + +In this section you find some real life examples of how to use this sensor. + +### {% linkable_title Google and the exchange rate for Bitcoin %} + +```yaml +sensor: + - platform: alpha_vantage + api_key: YOUR_API_KEY + symbols: + - name: Google + currency: USD + symbol: GOOGL + foreign_exchange: + - from: BTC + to: USD + name: Bitcoin +``` + diff --git a/source/_components/sensor.amcrest.markdown b/source/_components/sensor.amcrest.markdown index 538369de5a3..127021a1e20 100644 --- a/source/_components/sensor.amcrest.markdown +++ b/source/_components/sensor.amcrest.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Amcrest IP Camera" -description: "Instructions how to integrate Amcrest IP cameras sensors within Home Assistant." +description: "Instructions on how to integrate Amcrest IP cameras sensors within Home Assistant." date: 2017-01-13 10:00 sidebar: true comments: false diff --git a/source/_components/sensor.android_ip_webcam.markdown b/source/_components/sensor.android_ip_webcam.markdown index 87f6f0d7835..35d4eefb7aa 100644 --- a/source/_components/sensor.android_ip_webcam.markdown +++ b/source/_components/sensor.android_ip_webcam.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Android IP Webcam Sensor" -description: "Instructions how to integrate sensors for Android IP webcam within Home Assistant." +description: "Instructions on how to integrate sensors for Android IP webcam within Home Assistant." date: 2017-03-10 00:00 sidebar: true comments: false diff --git a/source/_components/sensor.api_stream.markdown b/source/_components/sensor.api_stream.markdown index 4b2c2a26ecf..c363e885332 100644 --- a/source/_components/sensor.api_stream.markdown +++ b/source/_components/sensor.api_stream.markdown @@ -1,7 +1,7 @@ --- layout: page title: "API Stream Sensor" -description: "Instructions how to count clients using the API stream within Home Assistant." +description: "Instructions on how to count clients using the API stream within Home Assistant." date: 2016-11-19 10:00 sidebar: true comments: false diff --git a/source/_components/sensor.arduino.markdown b/source/_components/sensor.arduino.markdown index 02fa7f6aaac..f7f686370a4 100644 --- a/source/_components/sensor.arduino.markdown +++ b/source/_components/sensor.arduino.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Arduino Sensor" -description: "Instructions how to integrate Arduino boards pins as sensors within Home Assistant." +description: "Instructions on how to integrate Arduino boards pins as sensors within Home Assistant." date: 2015-09-14 18:28 sidebar: true comments: false @@ -14,7 +14,7 @@ ha_iot_class: "Local Polling" --- -The `arduino` sensor platform allows you to get an numerical values from an analog input pin of an [Arduino](https://www.arduino.cc/) board. Usually the value is between 0 and 1024. +The `arduino` sensor platform allows you to get numerical values from an analog input pin of an [Arduino](https://www.arduino.cc/) board. Usually the value is between 0 and 1024. To enable an Arduino sensor with Home Assistant, add the following section to your `configuration.yaml` file: diff --git a/source/_components/sensor.arest.markdown b/source/_components/sensor.arest.markdown index bf5c31651c7..4f7c68732fc 100644 --- a/source/_components/sensor.arest.markdown +++ b/source/_components/sensor.arest.markdown @@ -1,7 +1,7 @@ --- layout: page title: "aREST Sensor" -description: "Instructions how to integrate aREST sensors within Home Assistant." +description: "Instructions on how to integrate aREST sensors within Home Assistant." date: 2015-09-07 18:15 sidebar: true comments: false @@ -33,7 +33,7 @@ sensor: Configuration variables: -- **resource** (*Required*): IP address and schema of the device that is exposing an aREST API, e.g. http://192.168.1.10. +- **resource** (*Required*): IP address and schema of the device that is exposing an aREST API, e.g., http://192.168.1.10. - **name** (*Optional*): Let you overwrite the name of the device. By default *name* from the device is used. - **monitored_variables** array (*Optional*): List of exposed variables. - **[variable]** (*Required*): Name of the variable to monitor. diff --git a/source/_components/sensor.arlo.markdown b/source/_components/sensor.arlo.markdown index 309795f7952..86f2870fbae 100644 --- a/source/_components/sensor.arlo.markdown +++ b/source/_components/sensor.arlo.markdown @@ -15,6 +15,10 @@ ha_iot_class: "Cloud Polling" To get your [Arlo](https://arlo.netgear.com/) sensors working within Home Assistant, please follow the instructions for the general [Arlo component](/components/arlo). +This platform does not support Arlo Q. + +## {% linkable_title Configuration %} + Once you have enabled the [Arlo component](/components/arlo), add the following to your `configuration.yaml` file: ```yaml @@ -29,13 +33,30 @@ sensor: - signal_strength ``` +Additionally, for Arlo Baby cameras that have additional sensors, you can add them to the `monitored_conditions` collection: + +```yaml +# Additional sensors available for Arlo Baby cameras +sensor: + - platform: arlo + monitored_conditions: + # ... + - temperature + - humidity + - air_quality +``` + + Configuration variables: -- **monitored_conditions** array (*Required*): Conditions to display in the frontend. The following conditions can be monitored. +- **monitored_conditions** array (*Optional*): Conditions to display in the frontend. The following conditions can be monitored. - **captured_today**: Return the number of videos captured on the current day. - **last_capture**: Return the timestamp from the last video captured by your Arlo camera. - **total_cameras**: Return the number of recognized and active cameras linked on your Arlo account. - **battery_level**: Return the battery level of your Arlo camera. - **signal_strength**: Return the wireless signal strength of your Arlo camera. + - **temperature**: Return the ambient temperature detected by your Arlo Baby camera. + - **humidity**: Return the ambient relative humidity detected by your Arlo Baby camera. + - **air_quality**: Return the ambient air quality (a reading of volatile organic compounds (VOCs) in parts per million) detected by your Arlo Baby camera. If no **monitored_conditions** are specified, all of above will be enabled by default. diff --git a/source/_components/sensor.arwn.markdown b/source/_components/sensor.arwn.markdown index fb66cc50bd0..8a9eea544a7 100644 --- a/source/_components/sensor.arwn.markdown +++ b/source/_components/sensor.arwn.markdown @@ -1,7 +1,7 @@ --- layout: page title: "ARWN Sensor" -description: "Instructions how to integrate ARWN within Home Assistant." +description: "Instructions on how to integrate ARWN within Home Assistant." date: 2016-10-20 15:15 sidebar: true comments: false diff --git a/source/_components/sensor.bh1750.markdown b/source/_components/sensor.bh1750.markdown index 754dc91f86e..4910cdfba0a 100644 --- a/source/_components/sensor.bh1750.markdown +++ b/source/_components/sensor.bh1750.markdown @@ -1,7 +1,7 @@ --- layout: page title: "BH1750 Light sensor" -description: "Instructions how to integrate a BH1750 light sensor into Home Assistant." +description: "Instructions on how to integrate a BH1750 light sensor into Home Assistant." date: 2017-06-10 00:00 sidebar: true comments: false @@ -26,7 +26,7 @@ To use your BH1750 sensor in your installation, add the following to your `confi ```yaml # Example configuration.yaml entry sensor: - - platform: BH1750 + - platform: bh1750 ``` Configuration variables: diff --git a/source/_components/sensor.bitcoin.markdown b/source/_components/sensor.bitcoin.markdown index 85173adc725..ba47bf8d9e1 100644 --- a/source/_components/sensor.bitcoin.markdown +++ b/source/_components/sensor.bitcoin.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Bitcoin" -description: "Instructions how to integrate Bitcoin data within Home Assistant." +description: "Instructions on how to integrate Bitcoin data within Home Assistant." date: 2015-05-08 17:15 sidebar: true comments: false diff --git a/source/_components/sensor.blockchain.markdown b/source/_components/sensor.blockchain.markdown index 21da2883379..8c441ff88b7 100644 --- a/source/_components/sensor.blockchain.markdown +++ b/source/_components/sensor.blockchain.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Blockchain.info" -description: "Instructions how to integrate Blockchain.info data within Home Assistant." +description: "Instructions on how to integrate Blockchain.info data within Home Assistant." date: 2017-06-01 16:20 sidebar: true comments: false diff --git a/source/_components/sensor.bloomsky.markdown b/source/_components/sensor.bloomsky.markdown index a975a0300cb..61b850de1e1 100644 --- a/source/_components/sensor.bloomsky.markdown +++ b/source/_components/sensor.bloomsky.markdown @@ -1,7 +1,7 @@ --- layout: page title: "BloomSky Sensor" -description: "Instructions how to integrate the BloomSky sensors within Home Assistant." +description: "Instructions on how to integrate the BloomSky sensors within Home Assistant." date: 2016-02-03 20:00 sidebar: true comments: false diff --git a/source/_components/sensor.bme280.markdown b/source/_components/sensor.bme280.markdown index 8da831b0678..7dd524405a3 100644 --- a/source/_components/sensor.bme280.markdown +++ b/source/_components/sensor.bme280.markdown @@ -1,7 +1,7 @@ --- layout: page title: "BME280 Sensor" -description: "Instructions how to integrate a BME280 sensor into Home Assistant." +description: "Instructions on how to integrate a BME280 sensor into Home Assistant." date: 2017-06-10 00:00 sidebar: true comments: false diff --git a/source/_components/sensor.bme680.markdown b/source/_components/sensor.bme680.markdown new file mode 100644 index 00000000000..05d42769c1b --- /dev/null +++ b/source/_components/sensor.bme680.markdown @@ -0,0 +1,222 @@ +--- +layout: page +title: "BME680 Sensor" +description: "Instructions on how to integrate a BME680 sensor into Home Assistant." +date: 2018-01-16 00:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: raspberry-pi.png +ha_category: Sensor +ha_release: 0.62 +ha_iot_class: "Local Push" +--- + + +The `bme680` sensor platform allows you to read temperature, humidity, pressure and gas resistance values of a [Bosch BME680 Environmental sensor](https://cdn-shop.adafruit.com/product-files/3660/BME680.pdf) connected via an [I2C](https://en.wikipedia.org/wiki/I²C) bus (SDA, SCL pins). It allows you to use all the operation modes of the sensor described in its datasheet. In addition, it includes a basic air quality calculation that uses gas resistance and humidity measurements to calculate a percentage based air quality measurement. + +Tested devices: + +- [Raspberry Pi](https://www.raspberrypi.org/) + +To use your BME680 sensor in your installation, add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +sensor: + - platform: bme680 +``` + +{% configuration %} +name: + description: The name of the sensor + required: false + default: BME680 Sensor + type: string +i2c_bus: + description: I2C bus that the sensor is connected to. + required: false + default: 1 + type: int +i2c_address: + description: I2C address of the sensor. It is 0x76 or 0x77. + required: false + default: 0x77 + type: int +monitored_conditions: + description: Conditions to monitor. + required: false + default: + - temperature + - humidity + - pressure + - airquality + type: list + keys: + temperature: + description: Monitor temperature. + humidity: + description: Monitor relative humidity. + pressure: + description: Monitor pressure. + gas: + description: Monitor gas resistance values on the VOC sensor. + airquality: + description: Monitor air quality using the values of humidity and gas resistance and calculate a percentage based air quality measurement. +oversampling_temperature: + description: Oversampling multiplier as described in the sensor datasheet. Can be 0 (no sampling), 1, 2, 4, 8, or 16. + required: false + default: 8 + type: int +oversampling_pressure: + description: Oversampling multiplier as described in the sensor datasheet. Can be 0 (no sampling), 1, 2, 4, 8, or 16. + required: false + default: 2 + type: int +oversampling_humidity: + description: Oversampling multiplier as described in the sensor datasheet. Can be 0 (no sampling), 1, 2, 4, 8, or 16. + required: false + default: 4 + type: int +filter_size: + description: IIR filter size as described in the sensor datasheet. Can be 0 (off), 1, 3, 7, 15, 31, 63 or 127. + required: false + default: 3 + type: int +gas_heater_temperature: + description: The temperature to heat the hotplate to for gas resistance measurements as described in the sensor datasheet. Can be between 200-400°C. + required: false + default: 320 + type: int +gas_heater_duration: + description: The duration to heat the hotplate in milliseconds for gas resistance measurements as described in the sensor datasheet. Can be between 1-4032 ms. In reality, you will likely need between 80-100ms to reach a stable temperature. Using a duration greater than 1000ms is inadvisable as it will essentially result in the heater being continually on due to the 1-second update interval. + required: false + default: 150 + type: int +aq_burn_in_time: + description: The duration to perform gas resistance measurements to establish a stable baseline measurements for Air Quality calculations in seconds. The burn in time is only performed when the sensor component is first initialized. + required: false + default: 300 + type: int +aq_humidity_baseline: + description: The baseline *ideal* relative humidity value for the air quality calculations. + required: false + default: 40 + type: int +aq_humidity_bias: + description: The bias for humidity to the gas resistance measurement in the air quality calculations expressed as a percentage of the total calculation e.g., 25% hudidtity to 75% gas. + required: false + default: 25 + type: int +{% endconfiguration %} + +## {% linkable_title Full Examples %} + +If you want to specify the working mode of the digital sensor or need to change the default I2C address (which is 0x77), add more details to the `configuration.yaml` file: + +```yaml +# Example of customized configuration.yaml entry +sensor: + - platform: bme680 + name: BME680 Sensor + i2c_bus: 1 + i2c_address: 0x77 + monitored_conditions: + - temperature + - humidity + - pressure + - gas + - airquality + oversampling_temperature: 8 + oversampling_humidity: 2 + oversampling_pressure: 4 + filter_size: 3 + gas_heater_temperature: 320 + gas_heater_duration: 150 + aq_burn_in_time: 300 + aq_humidity_baseline: 40 + aq_humidity_bias: 25 +``` + +## {% linkable_title Customizing the sensor data %} + +Give the values friendly names and icons, add the following to your `customize:` section. + +```yaml +# Example configuration.yaml entry +customize: + sensor.bme680_sensor_temperature: + icon: mdi:thermometer + friendly_name: Temperature + sensor.bme680_sensor_humidity: + icon: mdi:water + friendly_name: Humidity + sensor.bme680_sensor_pressure: + icon: mdi:gauge + friendly_name: Pressure + sensor.bme680_sensor_air_quality: + icon: mdi:blur + friendly_name: Air Quality +``` + +To create a group, add the following to your `group` section. + +```yaml +# Example configuration.yaml entry +group: + climate: + name: Climate + entities: + - sensor.bme680_sensor_temperature + - sensor.bme680_sensor_humidity + - sensor.bme680_sensor_pressure + - sensor.bme680_sensor_air_quality +``` + +## {% linkable_title Directions for installing SMBus support on Raspberry Pi %} + +Enable I2C interface with the Raspberry Pi configuration utility: + +```bash +# pi user environment: Enable I2C interface +$ sudo raspi-config +``` + +Select `Interfacing options->I2C` choose `` and hit `Enter`, then go to `Finish` and you'll be prompted to reboot. + +Install dependencies to use the `smbus-cffi` module and add your _homeassistant_ user to the _i2c_ group: + +```bash +# pi user environment: Install I2C dependencies and utilities +$ sudo apt-get install build-essential libi2c-dev i2c-tools python-dev libffi-dev + +# pi user environment: Add homeassistant user to the I2C group +$ sudo addgroup homeassistant i2c + +# pi user environment: Reboot Raspberry Pi to apply changes +$ sudo reboot +``` + +### {% linkable_title Check the I2C address of the sensor %} + +After installing `i2c-tools`, a new utility is available to scan the addresses of the connected sensors: + +```bash +$ /usr/sbin/i2cdetect -y 1 +``` + +It will output a table like this: +```text + 0 1 2 3 4 5 6 7 8 9 a b c d e f +00: -- -- -- -- -- -- -- -- -- -- -- -- -- +10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- +20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- +30: -- -- -- -- -- -- -- -- -- -- -- -- 3c -- -- -- +40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- +50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- +60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- +70: -- -- -- -- -- -- -- 76 +``` + +So you can see the sensor address that you are looking for is **0x76** (there is another I2C device on that Raspberry Pi). diff --git a/source/_components/sensor.bmw_connected_drive.markdown b/source/_components/sensor.bmw_connected_drive.markdown new file mode 100644 index 00000000000..083e5124a69 --- /dev/null +++ b/source/_components/sensor.bmw_connected_drive.markdown @@ -0,0 +1,20 @@ +--- +layout: page +title: "BMW Connected Drive Sensor" +description: "Instructions on how to setup your BMW Connected Drive account with Home Assistant." +date: 2018-01-10 23:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: bmw.png +ha_category: Sensor +ha_release: 0.64 +--- + + +The `bmw_connected_drive` platform allows you to import data on your BMW into Home Assistant. + +The sensors will be automatically configured if the `bmw_connected_drive` component is configured. + +For more configuration information see the [`bmw_connected_drive` component](/components/bmw_connected_drive/) documentation. diff --git a/source/_components/sensor.broadlink.markdown b/source/_components/sensor.broadlink.markdown index 70e82936adc..4688cf2aa03 100644 --- a/source/_components/sensor.broadlink.markdown +++ b/source/_components/sensor.broadlink.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Broadlink RM2 and A1 sensor" -description: "Instructions how to integrate Broadlink RM2 and/or A1 E-air sensors within Home Assistant." +description: "Instructions on how to integrate Broadlink RM2 and/or A1 E-air sensors within Home Assistant." date: 2016-12-03 21:59 sidebar: true comments: false @@ -78,7 +78,7 @@ sensor: The pycrypto library needs to be available on your platform. On a typical windows sysytem `pip install pycrypto` will fail, as a compiler needs to be installed first.

-The quickest way around this is to use a pre-built binary, e.g. from [https://github.com/sfbahr/PyCrypto-Wheels](https://github.com/sfbahr/PyCrypto-Wheels) +The quickest way around this is to use a pre-built binary, e.g., from [https://github.com/sfbahr/PyCrypto-Wheels](https://github.com/sfbahr/PyCrypto-Wheels) Be sure to get the correct 64 or 32-bit binary for your system, the full command line will look something like the sample below for a 64-bit system: diff --git a/source/_components/sensor.buienradar.markdown b/source/_components/sensor.buienradar.markdown index e9706efdafd..63e1f88b463 100644 --- a/source/_components/sensor.buienradar.markdown +++ b/source/_components/sensor.buienradar.markdown @@ -1,7 +1,7 @@ --- layout: page -title: "Buienradar" -description: "Instructions how to integrate buienradar.nl sensor within Home Assistant." +title: "Buienradar Sensor" +description: "Instructions on how to integrate buienradar.nl sensor within Home Assistant." date: 2017-05-15 14:00 sidebar: true comments: false @@ -14,7 +14,7 @@ ha_iot_class: "Cloud Polling" --- -The `buienradar` platform uses [buienradar.nl](http://buienradar.nl/) as an source for current meteorological data for your location. The weather forecast is delivered by Buienradar, who provides a web service that provides detailed weather information for users in The Netherlands. The relevant weather station used will be automatically selected based on the location specified in the Home Assistant configuration (or in the buienradar weather/sensor component). A map of all available weather stations can be found [here](https://www.google.com/maps/d/embed?mid=1NivHkTGQUOs0dwQTnTMZi8Uatj0). +The `buienradar` platform uses [buienradar.nl](http://buienradar.nl/) as a source for current meteorological data for your location. The weather forecast is delivered by Buienradar, who provides a web service that provides detailed weather information for users in The Netherlands. The relevant weather station used will be automatically selected based on the location specified in the Home Assistant configuration (or in the buienradar weather/sensor component). A map of all available weather stations can be found [here](https://www.google.com/maps/d/embed?mid=1NivHkTGQUOs0dwQTnTMZi8Uatj0). The selected weather station will provide all weather data, with the exception of the forecasted precipitation. The forecasted precipitation data will be retrieved from buienradar using your actual gps-location (and not the location of the nearest weather station). @@ -56,7 +56,7 @@ Configuration variables: - **groundtemperature**: The current ground temperature (in [C](https://en.wikipedia.org/wiki/Celsius)). - **windspeed**: The wind speed in [m/s](https://en.wikipedia.org/wiki/M/s). - **windforce**: The wind speed/force in [Bft](https://en.wikipedia.org/wiki/Beaufort_scale). - - **winddirection**: Where the wind is coming from: N (North),Z (south), NO (Noth-East), etc. + - **winddirection**: Where the wind is coming from: N (North),Z (south), NO (North-East), etc. - **windazimuth**: Where the wind is coming from in degrees, with true north at 0° and progressing clockwise. - **pressure**: The sea-level air pressure in [hPa](https://en.wikipedia.org/wiki/Hectopascal). - **visibility**: Visibility in meters ([m](https://en.wikipedia.org/wiki/Metre)). diff --git a/source/_components/sensor.canary.markdown b/source/_components/sensor.canary.markdown new file mode 100644 index 00000000000..25efd713e39 --- /dev/null +++ b/source/_components/sensor.canary.markdown @@ -0,0 +1,24 @@ +--- +layout: page +title: "Canary Sensor" +description: "Instructions on how to integrate your Canary devices into Home Assistant." +date: 2017-12-07 22:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: canary.png +ha_category: Sensor +ha_release: "0.60" +ha_iot_class: "Cloud Polling" +--- + +The `canary` sensor platform allows you to integrate the sensors of your [Canary](https://canary.is) devices in Home Assistant. + +To add `canary` sensors to your installation, follow instructions in [Canary component](/components/canary/). + +Once loaded, you will see following sensors: + +* A sensor per camera that reports temperature. +* A sensor per camera that reports humidity. +* A sensor per camera that reports air quality. diff --git a/source/_components/sensor.coinbase.markdown b/source/_components/sensor.coinbase.markdown new file mode 100644 index 00000000000..c506d823417 --- /dev/null +++ b/source/_components/sensor.coinbase.markdown @@ -0,0 +1,15 @@ +--- +layout: page +title: "Coinbase Sensor" +description: "Instructions on how to setup Coinbase sensors within Home Assistant." +date: 2017-12-08 18:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: coinbase.png +ha_category: Sensor +ha_release: 0.61 +--- + +To get your coinbase sensors working with Home Assistant, follow the instructions for the general [Coinbase component](/components/coinbase/). diff --git a/source/_components/sensor.coinmarketcap.markdown b/source/_components/sensor.coinmarketcap.markdown index f0d20afb171..e31c656efae 100644 --- a/source/_components/sensor.coinmarketcap.markdown +++ b/source/_components/sensor.coinmarketcap.markdown @@ -1,7 +1,7 @@ --- layout: page title: "CoinMarketCap" -description: "Instructions how to integrate CoinMarketCap data within Home Assistant." +description: "Instructions on how to integrate CoinMarketCap data within Home Assistant." date: 2016-08-31 08:15 sidebar: true comments: false @@ -25,17 +25,22 @@ sensor: ``` {% configuration %} -currency: - description: The cryptocurrency to use. +currency_id: + description: The ID of the cryptocurrency to use, default is the ID of Bitcoin. required: false - type: string, list - default: Bitcoin + type: int + default: 1 display_currency: description: The currency to display. required: false - type: string, list + type: string default: USD +display_currency_decimals: + description: The amount of decimals to round to. + required: false + type: int + default: 2 {% endconfiguration %} -All supported currencies can be found [here](https://coinmarketcap.com/api/). +All supported currencies can be found [here](https://coinmarketcap.com/api/), a list of currency IDs can be found [here](https://api.coinmarketcap.com/v2/ticker/). diff --git a/source/_components/sensor.comed_hourly_pricing.markdown b/source/_components/sensor.comed_hourly_pricing.markdown index d278c8a7137..b371c8c197d 100644 --- a/source/_components/sensor.comed_hourly_pricing.markdown +++ b/source/_components/sensor.comed_hourly_pricing.markdown @@ -1,7 +1,7 @@ --- layout: page title: "ComEd Hourly Pricing" -description: "Instructions how to set up the ComEd Hourly Pricing sensor in Home Assistant." +description: "Instructions on how to set up the ComEd Hourly Pricing sensor in Home Assistant." date: 2017-03-02 0:15 sidebar: true comments: false diff --git a/source/_components/sensor.comfoconnect.markdown b/source/_components/sensor.comfoconnect.markdown index 78d22454b9b..0d9400f5ce1 100644 --- a/source/_components/sensor.comfoconnect.markdown +++ b/source/_components/sensor.comfoconnect.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Zehnder ComfoAir Q Ventilation sensors" -description: "Instructions how to integrate Zehnder ComfoAir Q350/450/600 sensors into Home Assistant." +description: "Instructions on how to integrate Zehnder ComfoAir Q350/450/600 sensors into Home Assistant." date: 2017-06-28 18:00 sidebar: true comments: false diff --git a/source/_components/sensor.command_line.markdown b/source/_components/sensor.command_line.markdown index b963bdee442..238c46f7f61 100644 --- a/source/_components/sensor.command_line.markdown +++ b/source/_components/sensor.command_line.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Command line Sensor" -description: "Instructions how to integrate command line sensors into Home Assistant." +description: "Instructions on how to integrate command line sensors into Home Assistant." date: 2015-09-13 10:10 sidebar: true comments: false @@ -31,7 +31,9 @@ Configuration variables: - **name** (*Optional*): Name of the command sensor. - **unit_of_measurement** (*Optional*): Defines the unit of measurement of the sensor, if any. - **value_template** (*Optional*): Defines a [template](/docs/configuration/templating/#processing-incoming-data) to extract a value from the payload. -- **scan_interval** (*Optional*): Defines number of seconds for polling interval (defaults to 60 seconds). +- **scan_interval** (*Optional*): Defines number of seconds for polling interval (defaults to 60 seconds). +- **command_timeout** (*Optional*): Defines number of seconds for command timeout (defaults to 15 seconds). +- **json_attributes** (*Optional*): Defines a list of keys to extract values from a JSON dictionary result and then set as sensor attributes. ## {% linkable_title Examples %} @@ -61,6 +63,7 @@ sensor: Thanks to the [`proc`](https://en.wikipedia.org/wiki/Procfs) file system, various details about a system can be retrieved. Here the CPU temperature is of interest. Add something similar to your `configuration.yaml` file: +{% raw %} ```yaml # Example configuration.yaml entry sensor: @@ -69,8 +72,9 @@ sensor: command: "cat /sys/class/thermal/thermal_zone0/temp" # If errors occur, remove degree symbol below unit_of_measurement: "°C" - value_template: '{% raw %}{{ value | multiply(0.001) }}{% endraw %}' + value_template: '{{ value | multiply(0.001) | round(1) }}' ``` +{% endraw %} ### {% linkable_title Monitoring failed login attempts on Home Assistant %} @@ -81,10 +85,10 @@ If you'd like to know how many failed login attempts are made to Home Assistant, sensor: - platform: command_line name: badlogin - command: grep -c 'Login attempt' /home/hass/.homeassistant/home-assistant.log + command: "grep -c 'Login attempt' /home/hass/.homeassistant/home-assistant.log" ``` -Make sure to configure the [logger component](/components/logger) to monitor the [http component](https://home-assistant.io/components/http/) at least the `warning` level. +Make sure to configure the [logger component](/components/logger) to monitor the [http component](/components/http/) at least the `warning` level. ```yaml # Example working logger settings that works @@ -143,13 +147,13 @@ sensor: - platform: command_line name: Brightness command: "python3 /path/to/script/arest-value.py" - unit_of_measurement: "°C" ``` ### {% linkable_title Usage of templating in `command:` %} [Templates](/docs/configuration/templating/) are supported in the `command:` configuration variable. This could be used if you want to include the state of a specific sensor as an argument to your external script. +{% raw %} ```yaml # Example configuration.yaml entry sensor: @@ -158,3 +162,23 @@ sensor: command: 'sh /home/pi/.homeassistant/scripts/wind_direction.sh {{ states.sensor.wind_direction.state }}' unit_of_measurement: "Direction" ``` +{% endraw %} + + +### {% linkable_title Usage of JSON attributes in command output %} + +The example shows how you can retrieve multiple values with one sensor (where the additional are attributes) by using `value_json` and `json_attributes`. + +{% raw %} +```yaml +# Example configuration.yaml entry +sensor: + - platform: command_line + name: JSON time + json_attributes: + - date + - milliseconds_since_epoch + command: 'python3 /home/pi/.homeassistant/scripts/datetime.py' + value_template: '{{ value_json.time }}' +``` +{% endraw %} diff --git a/source/_components/sensor.cpuspeed.markdown b/source/_components/sensor.cpuspeed.markdown index c997ae5a2f4..f69f0149679 100644 --- a/source/_components/sensor.cpuspeed.markdown +++ b/source/_components/sensor.cpuspeed.markdown @@ -1,7 +1,7 @@ --- layout: page title: "CPU speed" -description: "Instructions how to integrate CPU speed within Home Assistant." +description: "Instructions on how to integrate CPU speed within Home Assistant." date: 2015-10-15 11:00 sidebar: true comments: false diff --git a/source/_components/sensor.cups.markdown b/source/_components/sensor.cups.markdown index eb9f43e9dde..2e32f5aa0f9 100644 --- a/source/_components/sensor.cups.markdown +++ b/source/_components/sensor.cups.markdown @@ -1,7 +1,7 @@ --- layout: page title: "CUPS Sensor" -description: "Instructions how to integrate CUPS sensors into Home Assistant." +description: "Instructions on how to integrate CUPS sensors into Home Assistant." date: 2016-10-30 12:10 sidebar: true comments: false diff --git a/source/_components/sensor.daikin.markdown b/source/_components/sensor.daikin.markdown new file mode 100644 index 00000000000..20831781606 --- /dev/null +++ b/source/_components/sensor.daikin.markdown @@ -0,0 +1,57 @@ +--- +layout: page +title: "Daikin AC" +description: "Instructions on how to integrate Daikin AC(s) with Home Assistant." +date: 2017-12-03 05:00 +sidebar: True +comments: false +sharing: true +footer: true +logo: daikin.png +ha_category: Sensor +ha_release: 0.59 +ha_iot_class: "Local Polling" +--- + + +The `daikin` sensor platform integrates Daikin air conditioning systems into Home Assistant, enabling displaying the following parameters: + +- **inside temperature** +- **outside temperature** + +

+Please note, the `daikin` platform integrates **ONLY the european versions of Daikin ACs (models BRP069A41, 42, 43, 45)** into Home Assistant. +

+ +To enable the platform manually, add the following lines to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +sensor: + - platform: daikin + host: 10.0.0.1 + monitored_conditions: + - inside_temperature + - outside_temperature +``` + +{% configuration %} +host: + description: IP or hostname of the device. + required: true + type: string +monitored_conditions: + description: List of items you want to monitor for each device. + required: false + default: All conditions + type: list + keys: + inside_temperature: + description: The current temperature measured inside the house. + outside_temperature: + description: The current temperature measured outside the house. +{% endconfiguration %} + +

+ Please note that some AC devices may report outside temperature only when they are turned on. +

diff --git a/source/_components/sensor.darksky.markdown b/source/_components/sensor.darksky.markdown index ee366dfa66e..2480baeb92e 100644 --- a/source/_components/sensor.darksky.markdown +++ b/source/_components/sensor.darksky.markdown @@ -1,6 +1,6 @@ --- layout: page -title: "Dark Sky" +title: "Dark Sky Sensor" description: "How to integrate Dark Sky within Home Assistant." date: 2016-09-26 08:00 sidebar: true @@ -9,8 +9,8 @@ sharing: true footer: true logo: dark_sky.png ha_category: Weather -featured: true -ha_release: 0.30 +featured: false +ha_release: "0.30" redirect_from: /components/sensor.forecast/ ha_iot_class: "Cloud Polling" --- @@ -20,7 +20,7 @@ The `darksky` platform uses the [Dark Sky](https://darksky.net/) web service as You need an API key which is free but requires [registration](https://darksky.net/dev/register). You can make up to 1000 calls per day for free which means that you could make one approximately every 86 seconds.

-[Dark Sky](https://darksky.net/) will charge you $0.0001 per API call if you enter your credit card details and create more than 1000 calls per day. +[Dark Sky](https://darksky.net/dev/) will charge you $0.0001 per API call if you enter your credit card details and create more than 1000 calls per day.

To add Dark Sky to your installation, add the following to your `configuration.yaml` file: @@ -41,6 +41,46 @@ Configuration variables: - **api_key** (*Required*): Your API key. - **name** (*Optional*): Additional name for the sensors. Default to platform name. - **forecast** array (*Optional*): List of days in the 7 day forecast you would like to receive data on, starting with tomorrow as day 1. Any `monitored_condition` with a daily forecast by DarkSky will generate a sensor tagged with `_`. +- **language** (*Optional*): The desired language of the summary properties. Valid options are + - `ar`: Arabic + - `az`: Azerbaijani + - `be`: Belarusian + - `bg`: Bulgarian + - `bs`: Bosnian + - `ca`: Catalan + - `cs`: Czech + - `da`: Danish + - `de`: German + - `el`: Greek + - `en`: English (which is the default) + - `es`: Spanish + - `et`: Estonian + - `fi`: Finnish + - `fr`: French + - `hr`: Croatian + - `hu`: Hungarian + - `id`: Indonesian + - `is`: Icelandic + - `it`: Italian + - `ja`: Japanese + - `ka`: Georgian + - `kw`: Cornish + - `nb`: Norwegian Bokmål + - `nl`: Dutch + - `pl`: Polish + - `pt`: Portuguese + - `ro`: Romanian + - `ru`: Russian + - `sk`: Slovak + - `sl`: Slovenian + - `sr`: Serbian + - `sv`: Swedish + - `tet`: Tetum + - `tr`: Turkish + - `uk`: Ukrainian + - `x-pig-latin`: Igpay Atinlay + - `zh`: simplified Chinese + - `zh-tw`: traditional Chinese - **latitude** (*Optional*): Latitude coordinate to monitor weather of (required if **longitude** is specified), defaults to coordinates defined in your `configuration.yaml` - **longitude** (*Optional*): Longitude coordinate to monitor weather of (required if **latitude** is specified), defaults to coordinates defined in your `configuration.yaml` - **monitored_conditions** array (*Required*): Conditions to display in the frontend. @@ -48,6 +88,7 @@ Configuration variables: - **precip_type**: The type of precipitation occurring. - **precip_intensity**: The average expected intensity of precipitation occurring. - **precip_probability**: A value between 0 and 1 which is representing the probability of precipitation. + - **precip_accumulation**: Daily snow accumulation. Returns unknown if no snow accumulation available. - **temperature**: The current temperature. - **apparent_temperature**: A numerical value representing the apparent (or "feels like") temperature. - **dew_point**: The dew point. @@ -61,13 +102,13 @@ Configuration variables: - **minutely_summary**: A human-readable text summary for the next hour. - **hourly_summary**: A human-readable text summary for the next 24 hours. - **daily_summary**: A human-readable text summary for the next 7 days. - - **temperature_max**: Today's expected high temperature. - - **temperature_min**: Today's expected low temperature. - - **apparent_temperature_max**: Today's expected apparent high temperature. - - **apparent_temperature_min**: Today's expected apparent low temperature. + - **temperature_high**: Today's daytime expected high temperature. + - **temperature_low**: Today's overnight expected low temperature. + - **apparent_temperature_high**: Today's daytime expected apparent high temperature. + - **apparent_temperature_low**: Today's overnight expected apparent low temperature. - **precip_intensity_max**: Today's expected maximum intensity of precipitation. - **uv_index**: The current UV index. -- **units** (*Optional*): Specify the unit system. Default to `si` or `us` based on the temperature preference in Home Assistant. Other options are `auto`, `us`, `si`, `ca`, and `uk2`. +- **units** (*Optional*): Specify the unit system. Default to `si` or `us` based on the temperature preference in Home Assistant. Other options are `auto`, `us`, `si`, `ca`, `uk` and `uk2`. `auto` will let Dark Sky decide the unit system based on location. - **update_interval** (*Optional*): Minimum time interval between updates. Default is 2 minutes. Supported formats: - `update_interval: 'HH:MM:SS'` diff --git a/source/_components/sensor.deconz.markdown b/source/_components/sensor.deconz.markdown new file mode 100644 index 00000000000..46dad20c0e2 --- /dev/null +++ b/source/_components/sensor.deconz.markdown @@ -0,0 +1,70 @@ +--- +layout: page +title: deCONZ Sensor +description: "Instructions on how to integrate Zigbee sensors from deCONZ into Home Assistant." +date: 2017-11-12 16:30 +sidebar: true +comments: false +sharing: true +footer: true +logo: deconz.jpeg +ha_category: Sensor +ha_release: "0.61" +ha_iot_class: "Local Push" +--- + +See the [deCONZ main component](/components/deconz/) for configuration instructions. + +The following sensor types are supported: + + * Humidity sensor + * Light level sensor + * Pressure sensor + * Switches + * Temperature sensor + +Entity ids will be sensor.device_name, where device_name is defined in deCONZ. Switches aren't exposed as ordinary entities, see the [deCONZ main component](/components/deconz/) for more details. + +#### {% linkable_title Verified to be supported sensors %} + +- Humidity Sensor + - Xiaomi Aqara Humidity/Temperature Sensor + - Xiaomi MiJia Smart Temperature & Humidity Sensor +- Light Level Sensor +- Pressure Sensor +- Switches + - IKEA Trådfri Wireless Dimmer + - Philips Hue Motion Sensor + - IKEA Trådfri Remote + - Philips Hue Dimmer Switch + - Xiaomi Cube + - Xiaomi Aqara Smart Light Switch + - Xiaomi Aqara Smart Wireless Switch + - Xiaomi Smart Home Wireless Switch +- Temperature Sensor + - Xiaomi Temperature/Humidity Sensor + +#### {% linkable_title deCONZ Daylight Sensor %} + +The deCONZ Daylight sensor is a special sensor built into the deCONZ software since version 2.05.12. It is represented in Home Assistant as a sensor called sensor.daylight. The sensor's state value is a string corresponding to the phase of daylight (descriptions below taken from https://github.com/mourner/suncalc, on which the deCONZ implementation is based): + +| Sensor State | Description | +|--------------|-------------| +| sunrise_start | sunrise (top edge of the sun appears on the horizon) | +| sunrise_end | sunrise ends (bottom edge of the sun touches the horizon) | +| golden_hour_1 | morning golden hour (soft light, the best time for photography) | +| solar_noon | solar noon (sun is in the highest position) | +| golden_hour_2 | evening golden hour | +| sunset_start | sunset starts (bottom edge of the sun touches the horizon) | +| sunset_end | sunset (sun disappears below the horizon, evening civil twilight starts) | +| dusk | dusk (evening nautical twilight starts) | +| nautical_dusk | nautical dusk (evening astronomical twilight starts) | +| night_start | night starts (dark enough for astronomical observations) | +| nadir | nadir (darkest moment of the night, the sun is in the lowest position) | +| night_end | night ends (morning astronomical twilight starts) | +| nautical_dawn | nautical dawn (morning nautical twilight starts) | +| dawn | dawn (morning nautical twilight ends, morning civil twilight starts) | + +The sensor also has an attribute called "daylight" that has the value `true` when the sensor's state is `golden_hour_1`, `solar_noon`, or `golden_hour_2`, and `false` otherwise. + +These states can be used in automations as a trigger (e.g., trigger when a certain phase of daylight starts or ends) or condition (e.g., trigger only if in a certain phase of daylight). diff --git a/source/_components/sensor.deluge.markdown b/source/_components/sensor.deluge.markdown index 2f495a8d041..948849b0aad 100644 --- a/source/_components/sensor.deluge.markdown +++ b/source/_components/sensor.deluge.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Deluge Sensor" -description: "Instructions how to integrate Deluge sensors within Home Assistant." +description: "Instructions on how to integrate Deluge sensors within Home Assistant." date: 2017-10-24 17:06 sidebar: true comments: false @@ -23,6 +23,8 @@ To enable this sensor, add the following lines to your `configuration.yaml`: sensor: - platform: deluge host: IP_ADDRESS + username: USERNAME + password: PASSWORD monitored_variables: - 'current_status' - 'download_speed' @@ -34,8 +36,8 @@ Configuration variables: - **host** (*Required*): This is the IP address of your Deluge daemon, eg. 192.168.1.32. - **port** (*Optional*): The port your Deluge daemon uses. Defaults to 58846. Warning, this is not the port of the WebUI. - **name** (*Optional*): The name to use when displaying this Deluge instance. -- **username** (*Optional*): Your Deluge username, if you use authentication. -- **password** (*Optional*): Your Deluge password, if you use authentication. +- **username** (*Required*): Your Deluge daemon username. +- **password** (*Required*): Your Deluge daemon password. - **monitored_variables** array (*Required*): Conditions to display in the frontend. - **current_status**: The status of your Deluge daemon. - **download_speed**: The current download speed. diff --git a/source/_components/sensor.deutsche_bahn.markdown b/source/_components/sensor.deutsche_bahn.markdown index b9cb5359030..6586e49452a 100644 --- a/source/_components/sensor.deutsche_bahn.markdown +++ b/source/_components/sensor.deutsche_bahn.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Deutsche Bahn" -description: "Instructions how to integrate timetable data for travelling in Germany within Home Assistant." +description: "Instructions on how to integrate timetable data for traveling in Germany within Home Assistant." date: 2015-06-02 21:45 sidebar: true comments: false @@ -25,11 +25,21 @@ sensor: from: NAME_OF_START_STATION to: NAME_OF_FINAL_STATION ``` - -Configuration variables: - -- **from** (*Required*): The name of the start station. -- **to** (*Required*): The name of the end/destination station. +{% configuration %} +from: + description: The name of the start station. + required: true + type: string +to: + description: The name of the end/destination station. + required: true + type: string +only_direct: + description: Only show direct connections. + required: false + type: boolean + default: false +{% endconfiguration %} This sensor stores a lot of attributes which can be accessed by other sensors eg. a [template sensor](/components/sensor.template/). diff --git a/source/_components/sensor.dht.markdown b/source/_components/sensor.dht.markdown index fd187c67948..1898ab35d4f 100644 --- a/source/_components/sensor.dht.markdown +++ b/source/_components/sensor.dht.markdown @@ -1,7 +1,7 @@ --- layout: page title: "DHT Sensor" -description: "Instructions how to integrate DHTxx sensors within Home Assistant." +description: "Instructions on how to integrate DHTxx sensors within Home Assistant." date: 2015-08-30 19:15 sidebar: true comments: false diff --git a/source/_components/sensor.discogs.markdown b/source/_components/sensor.discogs.markdown new file mode 100644 index 00000000000..281852abc79 --- /dev/null +++ b/source/_components/sensor.discogs.markdown @@ -0,0 +1,40 @@ +--- +layout: page +title: Discogs Sensor +description: "Instructions on how to set up Discogs sensors within Home Assistant." +date: 2017-12-04 22:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: https://www.magneticmag.com/.image/t_share/MTQ5OTE1NzU4NTczMzk3OTYw/discogs-vinyl-record-mark.png +ha_category: Sensor +ha_release: 0.61 +logo: discogs.png +ha_iot_class: "Cloud Polling" +--- + +The `discogs` platform allows you to see the current amount of records in your [Discogs](https://discogs.com) collection. + +First, you'll need to get a personal access token from your Discogs account. +You can generate a token from your profile's [Developer settings](https://www.discogs.com/settings/developers). + +To enable this sensor, add the following lines to your `configuration.yaml`: + +```yaml +# Example configuration.yaml entry +sensor: + - platform: discogs + token: YOUR_TOKEN +``` + +{% configuration %} +token: + description: The Discogs API token to use as identification to get your collection. + required: true + type: string +name: + description: Name to use in the frontend. + required: false + type: string +{% endconfiguration %} diff --git a/source/_components/sensor.dovado.markdown b/source/_components/sensor.dovado.markdown index f300a90fcb7..bbbd0bae3c5 100644 --- a/source/_components/sensor.dovado.markdown +++ b/source/_components/sensor.dovado.markdown @@ -33,8 +33,8 @@ Configuration variables: - **username** (*Required*): Your username. - **password** (*Required*): Your password. -- **host** (*Optional*): The IP address of your router, e.g. `192.168.1.1`. If no host is provided, the gateway for the same network as Home Assistant will automatically be used. -- **port** (*Optional*): The port number of your router, e.g. `999`. If no port is provided, the default API port (6435) will be used. +- **host** (*Optional*): The IP address of your router, e.g., `192.168.1.1`. If no host is provided, the gateway for the same network as Home Assistant will automatically be used. +- **port** (*Optional*): The port number of your router, e.g., `999`. If no port is provided, the default API port (6435) will be used. - **sensors** array (*Required*): Conditions to display in the frontend. - **network**: Network state (3G, 4G, etc). - **signal**: The signal strength (%). diff --git a/source/_components/sensor.dsmr.markdown b/source/_components/sensor.dsmr.markdown index a83d5a8ac0e..a4df6c3f187 100644 --- a/source/_components/sensor.dsmr.markdown +++ b/source/_components/sensor.dsmr.markdown @@ -1,7 +1,7 @@ --- layout: page title: "DSMR or Slimme meter" -description: "Instructions how to integrate DSMR Smartmeter within Home Assistant." +description: "Instructions on how to integrate DSMR Smartmeter within Home Assistant." date: 2016-11-12 12:00 sidebar: true comments: false @@ -15,8 +15,9 @@ ha_iot_class: "Local Push" A sensor platform for Dutch Smart Meters which comply to DSMR (Dutch Smart Meter Requirements), also known as 'Slimme meter' or 'P1 poort'. -- Currently support DSMR V2.2 and V4 through the [dsmr_parser](https://github.com/ndokter/dsmr_parser) module by Nigel Dokter. -- For official information about DSMR refer to: [DSMR Document](http://www.netbeheernederland.nl/themas/hotspot/hotspot-documenten/?dossierid=11010056&title=Slimme%20meter&onderdeel=Documenten) +- Currently support DSMR V2.2, V3, V4 and V5 through the [dsmr_parser](https://github.com/ndokter/dsmr_parser) module by Nigel Dokter. +- For official information about DSMR refer to: [DSMR Document](https://www.netbeheernederland.nl/dossiers/slimme-meter-15) +- For official information about the P1 port refer to: https://www.wijhebbenzon.nl/media/kunena/attachments/3055/DSMRv5.0FinalP1.pdf - For unofficial hardware connection examples refer to: [Domoticx](http://domoticx.com/p1-poort-slimme-meter-hardware/)

@@ -26,16 +27,19 @@ A sensor platform for Dutch Smart Meters which comply to DSMR (Dutch Smart Meter This component is known to work for: - Iskra ME382 / MT382 (DSMR 2.2) +- ISKRA AM550 (DSMR 5.0) - Landis+Gyr E350 (DMSR 4) - Landis+Gyr ZCF110 / ZM F110 (DSMR 4.2) - Kaifa E0026 - Kamstrup 382JxC (DSMR 2.2) +- Sagemcom XS210 ESMR5 USB serial converters: - Cheap (Banggood/ebay) Generic PL2303 - https://sites.google.com/site/nta8130p1smartmeter/webshop - https://www.sossolutions.nl/slimme-meter-kabel +- https://tweakers.net/gallery/269738/aanbod/ Serial to network proxies: @@ -56,7 +60,7 @@ sensor: description: "Host to which Smartmeter is connected (default: '' (connected via serial or USB, see **port**)). For remote connections, use IP address of host to connect to (i.e. 192.168.1.13)." required: false type: string - name: + dsmr_version: description: "Version of DSMR used by meter. Choices: 2.2, 4, 5. Defaults to 2.2." required: false type: string @@ -69,7 +73,7 @@ Full configuration examples can be found below: sensor: - platform: dsmr port: /dev/ttyUSB1 - dsmr_version: 4 + dsmr_version: 5 group: meter_readings: @@ -88,7 +92,7 @@ sensor: - platform: dsmr host: 192.168.1.13 port: 2001 - dsmr_version: 4 + dsmr_version: 5 group: meter_readings: @@ -127,11 +131,11 @@ $ sudo reboot ### {% linkable_title Technical overview %} -DSMR is a standard to which Dutch smartmeters must comply. It specifies that the smartmeter must send out a 'telegram' every 10 seconds over a serial port. +DSMR is a standard to which Dutch smartmeters must comply. It specifies that the smartmeter must send out a 'telegram' every 10 seconds (every second for DSMR 5.0 devices) over a serial port. The contents of this telegram differ between version but they generally consist of lines with 'obis' (Object Identification System, a numerical ID for a value) followed with the value and unit. -This module sets up a asynchronous reading loop using the `dsmr_parser` module which waits for a complete telegram, parser it and puts it on an async queue as a dictionary of `obis`/object mapping. The numeric value and unit of each value can be read from the objects attributes. Because the `obis` are know for each DSMR version the Entities for this component are create during bootstrap. +This module sets up an asynchronous reading loop using the `dsmr_parser` module which waits for a complete telegram, parser it and puts it on an async queue as a dictionary of `obis`/object mapping. The numeric value and unit of each value can be read from the objects attributes. Because the `obis` are know for each DSMR version the Entities for this component are create during bootstrap. Another loop (DSMR class) is setup which reads the telegram queue, stores/caches the latest telegram and notifies the Entities that the telegram has been updated. diff --git a/source/_components/sensor.dte_energy_bridge.markdown b/source/_components/sensor.dte_energy_bridge.markdown index c79c4b73a0c..80028de606c 100644 --- a/source/_components/sensor.dte_energy_bridge.markdown +++ b/source/_components/sensor.dte_energy_bridge.markdown @@ -1,7 +1,7 @@ --- layout: page title: "DTE Energy Bridge" -description: "Instructions how to setup DTE Energy Bridge with Home Assistant." +description: "Instructions on how to setup DTE Energy Bridge with Home Assistant." date: 2016-06-07 08:10 sidebar: true comments: false diff --git a/source/_components/sensor.dublin_bus_transport.markdown b/source/_components/sensor.dublin_bus_transport.markdown index 3b3161cdf10..6c32206895d 100644 --- a/source/_components/sensor.dublin_bus_transport.markdown +++ b/source/_components/sensor.dublin_bus_transport.markdown @@ -1,13 +1,13 @@ --- layout: page title: "Dublin Bus Transport" -description: "Instructions how to integrate timetable data for travelling on Dublin Bus within Home Assistant." +description: "Instructions on how to integrate timetable data for traveling on Dublin Bus within Home Assistant." date: 2017-01-09 21:45 sidebar: true comments: false sharing: true footer: true -logo: dublin_bus.jpg +logo: dublin_bus.png ha_category: Transport ha_iot_class: "Cloud Polling" ha_release: 0.36 @@ -32,7 +32,7 @@ sensor: Configuration variables: - **stopid** (*Required*): The ID of the bus stop to get the information for. -- **route** (*Optional*): Only show a single bus route at the stop. This is the same as the bus number, e.g. `83`. +- **route** (*Optional*): Only show a single bus route at the stop. This is the same as the bus number, e.g., `83`. - **name** (*Optional*): A friendly name for this sensor. The public RTPI information is coming from [Dub Linked](https://data.dublinked.ie/). diff --git a/source/_components/sensor.duke_energy.markdown b/source/_components/sensor.duke_energy.markdown new file mode 100644 index 00000000000..1d1bb410d5e --- /dev/null +++ b/source/_components/sensor.duke_energy.markdown @@ -0,0 +1,48 @@ +--- +layout: page +title: "Duke Energy" +description: "Instructions on how to set Duke Energy smart meter sensors within Home Assistant." +date: 2018-07-01 09:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: duke_energy.png +ha_category: Sensor +ha_release: "0.74" +ha_iot_class: "Cloud Polling" +--- + +The `duke_energy` sensor platform allows you get the previous days usage for all of your Duke Energy smart meters. + +You will only have access to meters listed in your account at [Duke Energy Usage](https://www.duke-energy.com/my-account/usage-analysis). + +This supports both electric and gas meters. Along with previous days usage, each sensor will have attributes for the previous bills total usage and average usage. + +## {% linkable_title Configuration %} + +To enable the sensor, add the following lines to your `configuration.yaml`: + +```yaml +# Example configuration.yaml entry +sensor: + - platform: duke_energy + username: YOUR_DUKE_USERNAME + password: YOUR_DUKE_PASSWORD +``` + +{% configuration %} +username: + description: Your Duke Energy username + required: true + type: string +password: + description: Your Duke Energy password + required: true + type: string +{% endconfiguration %} + + +

+Meter usage isn't updated until mid-morning. Prior to updating your meter will report 0 for usage starting at midnight. The API is only called to update every 2 hours from startup time. +

diff --git a/source/_components/sensor.dweet.markdown b/source/_components/sensor.dweet.markdown index bc3c710f53e..1bc81d27e67 100644 --- a/source/_components/sensor.dweet.markdown +++ b/source/_components/sensor.dweet.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Dweet.io" -description: "Instructions how to integrate Dweet.io sensors within Home Assistant." +description: "Instructions on how to integrate Dweet.io sensors within Home Assistant." date: 2015-12-10 10:15 sidebar: true comments: false diff --git a/source/_components/sensor.dyson.markdown b/source/_components/sensor.dyson.markdown index 39ac3c5510c..022d778ceb6 100644 --- a/source/_components/sensor.dyson.markdown +++ b/source/_components/sensor.dyson.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Dyson Purifier Sensor" -description: "Instructions how to setup the Dyson Purifier fans within Home Assistant." +description: "Instructions on how to setup the Dyson Purifier fans within Home Assistant." date: 2017-05-27 10:00 sidebar: true comments: false diff --git a/source/_components/sensor.ebox.markdown b/source/_components/sensor.ebox.markdown index a76f9feacc7..d2ad1a9cb5c 100644 --- a/source/_components/sensor.ebox.markdown +++ b/source/_components/sensor.ebox.markdown @@ -1,7 +1,7 @@ --- layout: page title: "EBox" -description: "Instructions how to integrate EBox data usage within Home Assistant." +description: "Instructions on how to integrate EBox data usage within Home Assistant." date: 2017-02-15 17:17 sidebar: true comments: false diff --git a/source/_components/sensor.ecobee.markdown b/source/_components/sensor.ecobee.markdown index 0ae2be049bc..19491a566eb 100644 --- a/source/_components/sensor.ecobee.markdown +++ b/source/_components/sensor.ecobee.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Ecobee Sensor" -description: "Instructions how to setup the Ecobee sensors within Home Assistant." +description: "Instructions on how to setup the Ecobee sensors within Home Assistant." date: 2015-11-30 18:00 sidebar: true comments: false diff --git a/source/_components/sensor.efergy.markdown b/source/_components/sensor.efergy.markdown index b1bde92188d..3ffd7d36d77 100644 --- a/source/_components/sensor.efergy.markdown +++ b/source/_components/sensor.efergy.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Efergy" -description: "Instructions how to integrate Efergy devices within Home Assistant." +description: "Instructions on how to integrate Efergy devices within Home Assistant." date: 2015-07-11 0:15 sidebar: true comments: false @@ -13,17 +13,21 @@ ha_release: pre 0.7 ha_iot_class: "Cloud Polling" --- +Integrate your [Efergy](https://efergy.com) meter information into Home Assistant. -Integrate your [Efergy](https://efergy.com) meter information into Home Assistant. To get an app token: +## {% linkable_title Setup %} + +To get an app token: 1. Log in to your efergy account - 2. Go to the Settings page - 3. Click on App tokens - 4. Click "Add token" +## {% linkable_title Configuration %} + +To enable the sensor, add the following lines to your `configuration.yaml`: + ```yaml # Example configuration.yaml entry sensor: @@ -44,15 +48,13 @@ sensor: Configuration variables: - **app_token** (*Required*): The App Token for your account. -- **utc_offset** (*Required*): Some variables (currently only the daily_cost) require that the -negative number of minutes your timezone is ahead/behind UTC time. +- **utc_offset** (*Required*): Some variables (currently only the daily_cost) require that the negative number of minutes your timezone is ahead/behind UTC time. - **monitored_variables** array (*Required*): Variables to monitor. - **type** (*Required*): Name of the variable. - - **instant_readings**: Instant energy consumption. - - **budget**: Monthly budget. - - **cost**: The cost for energy consumption (with the tariff that has been set in Efergy) over a given period. - - **amount**: The amount of energy consumed over a given period. - - **current_values**: This returns the current energy usage of each device on your account, as efergy_\. If you only have one device in your account, this is effectively the same as instant_readings. + - **instant_readings**: Instant energy consumption. + - **budget**: Monthly budget. + - **cost**: The cost for energy consumption (with the tariff that has been set in Efergy) over a given period. + - **amount**: The amount of energy consumed over a given period. + - **current_values**: This returns the current energy usage of each device on your account, as `efergy_\`. If you only have one device in your account, this is effectively the same as instant_readings. - **period** (*Optional*): Some variables take a period argument. Valid options are "day", "week", "month", and "year". - **currency** (*Optional*): This is used to display the cost/period as the unit when monitoring the cost. It should correspond to the actual currency used in your dashboard. - diff --git a/source/_components/sensor.eight_sleep.markdown b/source/_components/sensor.eight_sleep.markdown index 635587b25ab..2d78d94f705 100644 --- a/source/_components/sensor.eight_sleep.markdown +++ b/source/_components/sensor.eight_sleep.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Eight Sleep Sensor" -description: "Instructions how to integrate sensors for Eight Sleep within Home Assistant." +description: "Instructions on how to integrate sensors for Eight Sleep within Home Assistant." date: 2017-04-24 00:00 sidebar: true comments: false diff --git a/source/_components/sensor.eliqonline.markdown b/source/_components/sensor.eliqonline.markdown index cfa071e3079..b87f019f0ef 100644 --- a/source/_components/sensor.eliqonline.markdown +++ b/source/_components/sensor.eliqonline.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Eliqonline" -description: "Instructions how to integrate Eliqonline devices within Home Assistant." +description: "Instructions on how to integrate Eliqonline devices within Home Assistant." date: 2015-07-11 0:15 sidebar: true comments: false @@ -14,7 +14,7 @@ ha_iot_class: "Cloud Polling" --- -Integrate your [ELIQ Online](http://eliq.se) smart meter information into Home Assistant. To get an [access token](https://my.eliq.se/user/settings/api) and the [Channel ID](https://my.eliq.se/user/settings/data), log in to your account. +Integrate your [ELIQ Online](http://eliq.io) smart meter information into Home Assistant. To get an [access token](https://my.eliq.io/user/settings/api) and the [Channel ID](https://my.eliq.io/user/settings/locations), log in to your account. To enable this sensor in your installation, add the following to your `configuration.yaml` file: @@ -23,13 +23,14 @@ To enable this sensor in your installation, add the following to your `configura sensor: - platform: eliqonline access_token: ACCESS_TOKEN + channel_id: CHANNEL_ID ``` Configuration variables: - **access_token** (*Required*): The Access Token for your account. -- **channel_id** (*Optional*): Channel ID (as integer) of your device. Needed if you have more than one device. +- **channel_id** (*Required*): Channel ID (as integer) of your device. - **name** (*Optional*): The name of the sensor, eg. the city. -For details please check the [API documentation](https://my.eliq.se/knowledge/sv-SE/49-eliq-online/299-eliq-online-api). +For details please check the [API documentation](https://eliq.zendesk.com/hc/en-us/articles/115002708449-API-Eliq-Online). diff --git a/source/_components/sensor.emoncms.markdown b/source/_components/sensor.emoncms.markdown index 3fb5f1aeab7..a15c5081990 100644 --- a/source/_components/sensor.emoncms.markdown +++ b/source/_components/sensor.emoncms.markdown @@ -42,8 +42,8 @@ sensor: ## {% linkable_title Default naming scheme %} The names of the sensors created by this component will use the feed names defined in EmonCMS if available, -or the feed ID otherwise, and will be prefixed with "EmonCMS", e.g. "EmonCMS Total Power" or "EmonCMS Feed 5". -If the `id` property is anything but `1`, the ID will be shown as well, e.g. "EmonCMS 2 Feed 5". +or the feed ID otherwise, and will be prefixed with "EmonCMS", e.g., "EmonCMS Total Power" or "EmonCMS Feed 5". +If the `id` property is anything but `1`, the ID will be shown as well, e.g., "EmonCMS 2 Feed 5". If `sensor_names` is used, any feeds with defined names will get those names exactly, with no prefix. diff --git a/source/_components/sensor.enocean.markdown b/source/_components/sensor.enocean.markdown index 6b627361f18..669c07825aa 100644 --- a/source/_components/sensor.enocean.markdown +++ b/source/_components/sensor.enocean.markdown @@ -1,7 +1,7 @@ --- layout: page title: "EnOcean Sensor" -description: "Instructions how to integrate TellStick sensors into Home Assistant." +description: "Instructions on how to integrate TellStick sensors into Home Assistant." date: 2016-05-26 01:00 sidebar: true comments: false diff --git a/source/_components/sensor.envirophat.markdown b/source/_components/sensor.envirophat.markdown index 0d1c200a6df..9863a4ab3b5 100644 --- a/source/_components/sensor.envirophat.markdown +++ b/source/_components/sensor.envirophat.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Enviro pHAT" -description: "Instructions how to integrate the Enviro pHAT within Home Assistant." +description: "Instructions on how to integrate the Enviro pHAT within Home Assistant." date: 2017-05-03 17:00 sidebar: true comments: false @@ -16,7 +16,7 @@ ha_release: 0.44 The `envirophat` sensor platform allows you to display information collected by an [Enviro pHAT](https://shop.pimoroni.com/products/enviro-phat) add-on board for the Raspberry Pi. The board features a wide range of sensors, such as: - BMP280 temperature/pressure sensor -- TCS3472 light and RGB colour sensor with two LEDs for illumination +- TCS3472 light and RGB color sensor with two LEDs for illumination - LSM303D accelerometer/magnetometer sensor - ADS1015 4-channel 3.3v, analog to digital sensor (ADC) diff --git a/source/_components/sensor.envisalink.markdown b/source/_components/sensor.envisalink.markdown index 24f6474f145..94235f48b84 100644 --- a/source/_components/sensor.envisalink.markdown +++ b/source/_components/sensor.envisalink.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Envisalink Sensor" -description: "Instructions how to integrate Envisalink sensors into Home Assistant." +description: "Instructions on how to integrate Envisalink sensors into Home Assistant." date: 2016-07-01 10:00 sidebar: true comments: false diff --git a/source/_components/sensor.etherscan.markdown b/source/_components/sensor.etherscan.markdown index fcdc5387059..785ed42492a 100644 --- a/source/_components/sensor.etherscan.markdown +++ b/source/_components/sensor.etherscan.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Etherscan" -description: "Instructions how to integrate Etherscan.io data within Home Assistant." +description: "Instructions on how to integrate Etherscan.io data within Home Assistant." date: 2017-06-01 16:20 sidebar: true comments: false @@ -13,16 +13,22 @@ ha_release: 0.47 ha_iot_class: "Cloud Polling" --- +The `Etherscan` sensor platform displays Ether and ERC-20 token balances from [Etherscan.io](https://etherscan.io). -The `Etherscan` sensor platform displays Ethereum wallet balances from [Etherscan.io](https://etherscan.io). - -To add the Etherscan sensor to your installation, specify an ethereum address to watch in the `configuration.yaml` file: +To add the Etherscan sensor to your installation, specify an Ethereum address to watch in the `configuration.yaml` file. You can also optionally provide a token name to retrieve and ERC-20 token balance. If no token is provided then the balance retrieved will be in ETH. You can also optionally provide the token contract address in case the token name is not found. ```yaml # Example configuration.yaml entry sensor: - platform: etherscan address: '0xfB6916095ca1df60bB79Ce92cE3Ea74c37c5d359' + - platform: etherscan + address: "0xfB6916095ca1df60bB79Ce92cE3Ea74c37c5d359" + token: OMG + - platform: etherscan + address: "0xfB6916095ca1df60bB79Ce92cE3Ea74c37c5d359" + token_address: "0xef68e7c694f40c8202821edf525de3782458639f" + token: LRC ``` {% configuration %} @@ -34,6 +40,13 @@ name: description: The name of the sensor used in the frontend. required: false type: string - default: Ethereum Balance + default: ETH Balance +token: + description: The ERC20 token symbol. i.e., OMG. + required: false + type: string +token_address: + description: The ERC20 token contract address. + required: false + type: string {% endconfiguration %} - diff --git a/source/_components/sensor.fail2ban.markdown b/source/_components/sensor.fail2ban.markdown index c96b3109910..ca1467cf1b1 100644 --- a/source/_components/sensor.fail2ban.markdown +++ b/source/_components/sensor.fail2ban.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Fail2Ban Sensor" -description: "Instructions how to integrate a fail2ban sensor into Home Assistant." +description: "Instructions on how to integrate a fail2ban sensor into Home Assistant." date: 2017-10-19 10:30 sidebar: true comments: false @@ -14,10 +14,10 @@ ha_release: 0.57 --- -The `fail2ban` sensor allows for IPs banned by [fail2ban](https://www.fail2ban.org/wiki/index.php/Main_Page) to be displayed in the Home Assistant front-end. +The `fail2ban` sensor allows for IPs banned by [fail2ban](https://www.fail2ban.org/wiki/index.php/Main_Page) to be displayed in the Home Assistant frontend.

-Your system must have fail2ban installed and correctly configured for this sensor to work. In addition, Home Assistant must be able to read the fail2ban log file. +Your system must have `fail2ban` installed and correctly configured for this sensor to work. In addition, Home Assistant must be able to read the `fail2ban` log file.

To enable this sensor, add the following lines to your `configuration.yaml`: @@ -29,29 +29,38 @@ sensor: jails: - ssh - hass-iptables - file_path: /var/log/fail2ban.log ``` -Configuration variables: - -- **jails** (*Required*): List of configured jails you want to display (each jail is its own sensor). -- **name** (*Optional*): Name of the sensor. Defaults to `fail2ban`. -- **file_path** (*Optional*): Path to the fail2ban log. Defaults to `/var/log/fail2ban.log`. -- **scan_interval** (*Optional*): Used to limit how often log file is read and must be a positive integer (representing number of seconds to wait). Defaults to 120. +{% configuration %} +jails: + description: List of configured jails you want to display. + required: true + type: list +name: + description: Name of the sensor. + required: false + type: string + default: fail2ban +file_path: + description: Path to the fail2ban log. + required: false + type: string + default: /var/log/fail2ban.log +{% endconfiguration %} ### {% linkable_title Set up Fail2Ban %} -For most set-ups, you can follow [this tutorial](https://home-assistant.io/cookbook/fail2ban/) to set up fail2ban on your system. It will walk you through creating jails and filters, allowing you to monitor IPs that have been banned for too many failed ssh login attempts, as well as too many failed Home Assistant log in attempts. +For most setups, you can follow [this tutorial](/cookbook/fail2ban/) to set up `fail2ban` on your system. It will walk you through creating jails and filters, allowing you to monitor IP addresses that have been banned for too many failed SSH login attempts, as well as too many failed Home Assistant login attempts. ### {% linkable_title Fail2Ban with Docker %}

-These steps assume you already have the Home Assistant docker running behind nginx and that it is externally accessible. It also assumes the docker is running with the `--net='host'` flag. +These steps assume you already have the Home Assistant docker running behind NGINX and that it is externally accessible. It also assumes the docker is running with the `--net='host'` flag.

-For those of us using Docker, the above tutorial may not be sufficient. The following steps specifically outline how to set up `fail2ban` and Home Assistant when running Home Assistant within a Docker behind nginx. The setup this was tested on was an unRAID server using the [let's encrypt docker](https://github.com/linuxserver/docker-letsencrypt) from linuxserver.io. +For those of us using Docker, the above tutorial may not be sufficient. The following steps specifically outline how to set up `fail2ban` and Home Assistant when running Home Assistant within a Docker behind NGINX. The setup this was tested on was an unRAID server using the [let's encrypt docker](https://github.com/linuxserver/docker-letsencrypt) from linuxserver.io. -#### Set http logger +#### {% linkable_title Set http logger %} In your `configuration.yaml` file, add the following to the `logger` component to ensure that Home Assistant prints failed login attempts to the log. @@ -61,9 +70,9 @@ logger: homeassistant.components.http.ban: warning ``` -#### Edit the `jail.local` file +#### {% linkable_title Edit the `jail.local` file %} -Next, we need to edit the `jail.local` file that is included with the Let's Encrypt docker linked above. Note, for this tutorial, we'll only be implementing the `[hass-iptables]` jail from the [previously linked tutorial](https://home-assistant.io/cookbook/fail2ban/). +Next, we need to edit the `jail.local` file that is included with the Let's Encrypt docker linked above. Note, for this tutorial, we'll only be implementing the `[hass-iptables]` jail from the [previously linked tutorial](/cookbook/fail2ban/). Edit `/mnt/user/appdata/letsencrypt/fail2ban/jail.local` and append the following to the end of the file: @@ -76,7 +85,7 @@ logpath = /hass/home-assistant.log maxretry = 5 ``` -#### Create a filter for the Home Assistant jail +#### {% linkable_title Create a filter for the Home Assistant jail %} Now we need to create a filter for `fail2ban` so that it can properly parse the log. This is done with a `failregex`. Create a file called `hass.local` within the `filter.d` directory in `/mnt/user/appdata/letsencrypt/fail2ban` and add the following: @@ -93,7 +102,7 @@ ignoreregex = datepattern = ^%%Y-%%m-%%d %%H:%%M:%%S ``` -#### Map log file directories +#### {% linkable_title Map log file directories %} First, we need to make sure that fail2ban log can be passed to Home Assistant and that the Home Assistant log can be passed to fail2ban. When starting the Let's Encrypt docker, you need to add the following argument (adjust paths based on your setup): @@ -110,24 +119,24 @@ Now do the same for the Home Assistant docker, but this time we'll be mapping th ``` -#### Send client IP to Home Assistant +#### {% linkable_title Send client IP to Home Assistant %} By default, the IP address that Home Assistant sees will be that of the container (something like `172.17.0.16`). What this means is that for any failed login attempt, assuming you have correctly configured `fail2ban`, the Docker IP will be logged as banned, but the originating IP is still allowed to make attempts. We need `fail2ban` to recognize the originating IP to properly ban it. -First, we have to add the following to the nginx configuration file located in `/mnt/user/appdata/letsencrypt/nginx/site-confs/default`. +First, we have to add the following to the nginx configuration file located in `/mnt/user/appdata/letsencrypt/nginx/site-confs/default`. -``` +```bash proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; ``` This snippet should be added within your Home Assistant server config, so you have something like the following: -``` +```bash server { ... location / { - proxy_pass http://192.168.0.100:8123; + proxy_pass http://192.168.0.100:8123; proxy_set_header Host $host; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; @@ -144,7 +153,7 @@ server { proxy_set_header Connection "upgrade"; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - } + } ... } ``` @@ -158,7 +167,7 @@ http: At this point, once the Let's Encrypt and Home Assistant dockers are restarted, Home Assistant should be correctly logging the originating IP of any failed login attempt. Once that's done and verified, we can move onto the final step. -#### Add the fail2ban sensor +#### {% linkable_title Add the fail2ban sensor %} Now that we've correctly set everything up for Docker, we can add our sensors to `configuration.yaml` with the following: @@ -174,7 +183,7 @@ Assuming you've followed all of the steps, you should have one fail2ban sensor, ### {% linkable_title Other debug tips %} -If, after following these steps, you're unable to get the fail2ban sensor working, here are some other steps you can take that may help: +If, after following these steps, you're unable to get the `fail2ban` sensor working, here are some other steps you can take that may help: - Add `logencoding = utf-8` to the `[hass-iptables]` entry - Ensure the `failregex` you added to `filter.d/hass.local` matches the output within `home-assistant.log` diff --git a/source/_components/sensor.fastdotcom.markdown b/source/_components/sensor.fastdotcom.markdown index 54af9e77cc1..1f808674777 100644 --- a/source/_components/sensor.fastdotcom.markdown +++ b/source/_components/sensor.fastdotcom.markdown @@ -50,3 +50,7 @@ Configuration variables: - **manual** (*Optional*): True or False to turn manual mode on or off. Manual mode will disable scheduled speedtests. There is also a service named `sensor.update_fastdotcom` that you can use to run a fast.com speedtest on demand. You can turn on manual mode to disable the scheduled speedtests. + +## Note + +- When running on Raspberry Pi, just note that the maximum speed is limited by its 100 Mbit/s LAN adapter. diff --git a/source/_components/sensor.fido.markdown b/source/_components/sensor.fido.markdown index 165f52bbf0c..edb59195a38 100644 --- a/source/_components/sensor.fido.markdown +++ b/source/_components/sensor.fido.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Fido" -description: "Instructions how to integrate Fido data usage within Home Assistant." +description: "Instructions on how to integrate Fido data usage within Home Assistant." date: 2017-01-01 17:17 sidebar: true comments: false diff --git a/source/_components/sensor.file.markdown b/source/_components/sensor.file.markdown index 741d297c41f..8ae7216a7d7 100644 --- a/source/_components/sensor.file.markdown +++ b/source/_components/sensor.file.markdown @@ -1,7 +1,7 @@ --- layout: page title: "File Sensor" -description: "Instructions how to integrate sensors which read from files into Home Assistant." +description: "Instructions on how to integrate sensors which read from files into Home Assistant." date: 2017-05-13 12:10 sidebar: true comments: false @@ -14,7 +14,7 @@ ha_release: 0.45 --- -The `file` sensor platform reads the entries from a plain-text file and shows the found value. Only the last line of the file is used. This is similar to do `$ tail -n 1 sensor.txt` on the command-line. +The `file` sensor platform reads the entries from a plain-text file and shows the found value. Only the last line of the file is used. This is similar to do `$ tail -n 1 sensor.txt` on the command-line. Note that file paths must be added to [whitelist_external_dirs](/docs/configuration/basic/). To enable the `file` sensor, add the following lines to your `configuration.yaml`: diff --git a/source/_components/sensor.filesize.markdown b/source/_components/sensor.filesize.markdown new file mode 100644 index 00000000000..3178fa6e3cf --- /dev/null +++ b/source/_components/sensor.filesize.markdown @@ -0,0 +1,31 @@ +--- +layout: page +title: "File size sensor" +description: "Component for monitoring the size of a file." +date: 2018-02-06 14:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: file.png +ha_category: Sensor +ha_iot_class: "Local Polling" +ha_release: 0.64 +--- + +Component for displaying the size in MB of a file. Note that paths must be added to [whitelist_external_dirs](/docs/configuration/basic/). +Add to your config: + +```yaml +sensor: + - platform: filesize + file_paths: + - /config/home-assistant_v2.db + ``` + +{% configuration %} +file_paths: + description: The absolute path to the file. + required: true + type: list of strings +{% endconfiguration %} diff --git a/source/_components/sensor.filter.markdown b/source/_components/sensor.filter.markdown new file mode 100644 index 00000000000..5e2834eebca --- /dev/null +++ b/source/_components/sensor.filter.markdown @@ -0,0 +1,172 @@ +--- +layout: page +title: "Filter Sensor" +description: "Instructions on how to integrate Data Filter Sensors into Home Assistant." +date: 2018-02-20 +sidebar: true +comments: false +sharing: true +footer: true +ha_category: Sensor +ha_release: 0.65 +ha_iot_class: "Local Push" +logo: home-assistant.png +--- + +The `filter` platform enables sensors that process the states of other entities. + +`filter` applies a signal processing algorithm to a sensor, previous and current states, and generates a `new state` given the chosen algorithm. The next image depicts an original sensor and the filter sensor of that same sensor using the [History Graph]({{site_roor}}/components/history_graph/) component. + +

+ +

+ +To enable Filter Sensors in your installation, add the following to your `configuration.yaml` file: + + +```yaml +# Example configuration.yaml entry +sensor: + - platform: filter + name: "filtered realistic humidity" + entity_id: sensor.realistic_humidity + filters: + - filter: outlier + window_size: 4 + radius: 4.0 + - filter: lowpass + time_constant: 10 + precision: 2 + - platform: filter + name: "filtered realistic temperature" + entity_id: sensor.realistic_temperature + filters: + - filter: outlier + window_size: 4 + radius: 2.0 + - filter: lowpass + time_constant: 10 + - filter: time_simple_moving_average + window_size: 00:05 + precision: 2 +``` + +Filters can be chained and are applied according to the order present in the configuration file. + +{% configuration %} +entity_id: + description: The entity ID of the sensor to be filtered. + required: true + type: string +name: + description: Name to use in the frontend. + required: false + type: string +filters: + description: Filters to be used. + required: true + type: list + keys: + filter: + description: Algorithm to be used to filter data. Available filters are `lowpass`, `outlier`, `range`, `throttle` and `time_simple_moving_average`. + required: true + type: string + window_size: + description: Size of the window of previous states. Time based filters such as `time_simple_moving_average` will require a time period (size in time), while other filters such as `outlier` will require an integer (size in number of states) + required: false + type: [int, time] + default: 1 + precision: + description: See [_lowpass_](#low-pass) filter. Defines the precision of the filtered state, through the argument of round(). + required: false + type: int + default: None + time_constant: + description: See [_lowpass_](#low-pass) filter. Loosely relates to the amount of time it takes for a state to influence the output. + required: false + type: int + default: 10 + radius: + description: See [_outlier_](#outlier) filter. Band radius from median of previous states. + required: false + type: float + default: 2.0 + type: + description: See [_time_simple_moving_average_](#time-simple-moving-average) filter. Defines the type of Simple Moving Average. + required: false + type: string + default: last + lower_bound: + description: See [_range_](#range) filter. Lower bound for filter range. + required: false + type: float + default: negative infinity + upper_bound: + description: See [_range_](#range) filter. Upper bound for filter range. + required: false + type: float + default: positive infinity +{% endconfiguration %} + +## {% linkable_title Filters %} + +### {% linkable_title Low-pass %} + +The Low-pass filter (`lowpass`) is one of signal processing most common filters, as it smooths data by shortcutting peaks and valleys. + +The included Low-pass filter is very basic and is based on [exponential smoothing](https://en.wikipedia.org/wiki/Exponential_smoothing), in which the previous data point is weighted with the new data point. + +```python +B = 1.0 / time_constant +A = 1.0 - B +LowPass(state) = A * previous_state + B * state +``` + +The returned value is rounded to the number of decimals defined in (`precision`). + +### {% linkable_title Outlier %} + +The Outlier filter (`outlier`) is a basic Band-pass filter, as it cuts out any value outside a specific range. + +The included Outlier filter will discard any value beyond a band centered on the median of the previous values, replacing it with the median value of the previous values. If inside the band, the + +```python +distance = abs(state - median(previous_states)) + +if distance > radius: + median(previous_states) +else: + state +``` + +### {% linkable_title Throttle %} + +The Throttle filter (`throttle`) will only update the state of the sensor for the first state in the window. This means the filter will skip all other values. + +To adjust the rate you need to set the window_size. To throttle a sensor down to 10%, the `window_size` should be set to 10, for 50% should be set to 2. + +This filter is relevant when you have a sensor which produces states at a very high-rate, which you might want to throttle down for storing or visualization purposes. + +### {% linkable_title Time Simple Moving Average %} + +The Time SMA filter (`time_simple_moving_average`) is based on the paper [Algorithms for Unevenly Spaced Time Series: Moving Averages and Other Rolling Operators](http://www.eckner.com/papers/Algorithms%20for%20Unevenly%20Spaced%20Time%20Series.pdf) by Andreas Eckner. + +The paper defines three types/versions of the Simple Moving Average (SMA): *last*, *next* and *linear*. Currently only *last* is implemented. + +Theta, as described in the paper, is the `window_size` parameter, and can be expressed using time notation (e.g., 00:05 for a five minutes time window). + +### {% linkable_title Range %} + + +The Range filter (`range`) restricts incoming data to a range specified by a lower and upper bound. + +All values greater then the upper bound are replaced by the upper bound and all values lower than the lower bound are replaced by the lower bound. +Per default there are neither upper nor lower bound. + +```python +if new_state > upper_bound: + upper_bound +if new_state < lower_bound: + lower_bound +new_state +``` diff --git a/source/_components/sensor.fints.markdown b/source/_components/sensor.fints.markdown new file mode 100644 index 00000000000..79351f765e3 --- /dev/null +++ b/source/_components/sensor.fints.markdown @@ -0,0 +1,74 @@ +--- +layout: page +title: "FinTS Sensor" +description: "Instructions on how to use the FinTS sensor." +date: 2018-03-25 13:00 +sidebar: true +comments: false +sharing: true +footer: true +ha_category: Sensor +ha_release: 0.70 +ha_iot_class: "Local Push" +logo: home-assistant.png +--- + +With the FinTS sensor, you can fetch your account information from your bank. This only works with banks that support the FinTS (aka. HBCI) standard. The FinTS standard used by many German banks. So if you do not have a German bank account, this will most likely not work for you. To find out if your bank supports FinTS, check the bank's website or call their hotline. + +For each account you have with the bank, a separate sensor is created. If you have several accounts with a bank, you can select which ones you want to have, and you can also give the accounts a name. + +{% raw %} +```yaml +# Example configuration.yaml entry +sensor: + - platform: fints + bank_identification_number: + username: + pin: + url: +``` +{% endraw %} + +To find out the configuration for your bank, check their website or call their hotline. Do not use random information you find on the Internet! As you're storing your bank account information in the Home Assistant configuration: make sure that this configuration is not accessible to anyone. + +{% configuration %} + sensors: + description: List of your sensors. + required: true + type: map + keys: + name: + description: (optional) name of the bank. + required: false + type: string + bank_identification_number: + description: Bank identification number, in most cases the "Bankleitzahl". + required: true + type: string + username: + description: Your FinTS username. + required: true + type: string + pin: + description: Your FinTS PIN or password. + required: true + type: string + url: + description: URL of your bank's FinTS server. + required: true + type: string + accounts: + description: (optional) You can configure with of the accounts of your bank shall be shown in Home Assistant. If this attribute is set, only the accounts listed here are shown. + required: false + type: list + keys: + account: + description: For balance accounts use the IBAN of the account for holdings accounts use the classic account number. + required: true + type: string + name: + description: (optional) Use this field to give the account a meaningful name. + required: false + type: string + +{% endconfiguration %} diff --git a/source/_components/sensor.fitbit.markdown b/source/_components/sensor.fitbit.markdown index 1da5a518367..a273f3d8af2 100644 --- a/source/_components/sensor.fitbit.markdown +++ b/source/_components/sensor.fitbit.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Fitbit" -description: "Instructions how to integrate Fitbit devices within Home Assistant." +description: "Instructions on how to integrate Fitbit devices within Home Assistant." date: 2016-05-09 15:01 sidebar: true comments: false @@ -36,6 +36,7 @@ Configuration variables: - **monitored_resources** (*Optional*): Resource to monitor. Defaults to `activities/steps`. - **clock_format** (*Optional*): Format to use for `sleep/startTime` resource. Accepts `12H` or `24H`. Defaults to `24H`. +- **unit_system** (*Optional*): Unit system to use for measurements. Accepts `default`, `metric`, `en_US` or `en_GB`. Defaults to `default`. Below is the list of resources that you can add to `monitored_resources`. One sensor is exposed for every resource. diff --git a/source/_components/sensor.fixer.markdown b/source/_components/sensor.fixer.markdown index 220619cf301..6bb80331e0a 100644 --- a/source/_components/sensor.fixer.markdown +++ b/source/_components/sensor.fixer.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Fixer.io" -description: "Instructions how to integrate exchange rates from Fixer.io within Home Assistant." +description: "Instructions on how to integrate exchange rates from Fixer.io within Home Assistant." date: 2016-06-20 10:00 sidebar: true comments: false @@ -16,7 +16,13 @@ ha_release: 0.23 The `fixer` sensor will show you the current exchange rate from [Fixer.io](http://fixer.io/) which is using data from the [European Central Bank (ECB)](https://www.ecb.europa.eu). -To get an overview about the available [currencies](http://api.fixer.io/latest). +To get an overview about the available [currencies](https://fixer.io/symbols). + +## {% linkable_title Setup %} + +You need to create an [API key](https://fixer.io/product). There is a rate limit of 1000 calls per month. + +## {% linkable_title Configuration %} To enable this sensor, add the following lines to your `configuration.yaml` file: @@ -24,10 +30,15 @@ To enable this sensor, add the following lines to your `configuration.yaml` file # Example configuration.yaml entry sensor: - platform: fixer + api_key: YOUR_API_KEY target: CHF ``` {% configuration %} +api_key: + description: Your API key for [Fixer.io](http://fixer.io/). + required: true + type: string target: description: The symbol of the target currency. required: true @@ -37,9 +48,6 @@ name: required: false type: string default: Exchange rate -base: - description: The symbol of the base currency. - required: false - type: string - default: USD {% endconfiguration %} + +Details about the API are available in the [Fixer.io documentation](https://fixer.io/documentation). diff --git a/source/_components/sensor.folder.markdown b/source/_components/sensor.folder.markdown new file mode 100644 index 00000000000..292e7366ea6 --- /dev/null +++ b/source/_components/sensor.folder.markdown @@ -0,0 +1,36 @@ +--- +layout: page +title: "Folder sensor" +description: "Sensor for monitoring the contents of a folder." +date: 2018-02-21 14:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: file.png +ha_category: Sensor +ha_iot_class: "Local Polling" +ha_release: 0.64 +--- + +Sensor for monitoring the contents of a folder. Note that folder paths must be added to [whitelist_external_dirs](/docs/configuration/basic/). Optionally a [wildcard filter](https://docs.python.org/3.6/library/fnmatch.html) can be applied to the files considered within the folder. The state of the sensor is the size in MB of files within the folder that meet the filter criteria. The number of filtered files in the folder and total size in bytes of those files are exposed as attributes. + +To enable the `folder` sensor in your installation, add the following to your `configuration.yaml` file: + +```yaml +sensor: + - platform: folder + folder: /config +``` + +{% configuration %} +folder: + description: The folder path + required: true + type: string +filter: + description: Filter to apply + required: false + default: "`*`" + type: string +{% endconfiguration %} diff --git a/source/_components/sensor.foobot.markdown b/source/_components/sensor.foobot.markdown new file mode 100644 index 00000000000..cf300fa7ac1 --- /dev/null +++ b/source/_components/sensor.foobot.markdown @@ -0,0 +1,51 @@ +--- +layout: page +title: "Foobot Air Quality Monitor" +description: "Instructions on how to setup Foobot Air Quality sensor in Home Assistant." +date: 2018-02-14 06:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: foobot.png +ha_category: Health +ha_release: 0.66 +ha_iot_class: "Cloud Polling" +--- + +The `foobot` sensor platform will fetch air quality data from your or yours [Foobot device(s)](https://foobot.io/features/). + +This sensor requires an API token. Please obtain one at [Foobot API site](https://api.foobot.io/apidoc/index.html). + +## {% linkable_title Configuring the Platform %} + +To enable this sensor, add the following lines to your `configuration.yaml` file: + +```yaml +sensor: + - platform: foobot + token: FOOBOT_SECRET_KEY + username: FOOBOT_USERNAME +``` + +{% configuration %} + token: + description: The token for the Foobot API. + required: true + type: string + username: + description: Your Foobot username, used to fetch devices associated with an account. + required: true + type: string +{% endconfiguration %} + +## {% linkable_title Available Metrics %} + +Every ten minutes, it'll fetch the last ten minutes average of the following measurements: + + * Temperature + * Humidity + * Co2 + * VOC + * PM2.5 + * [Index](https://help.foobot.io/hc/en-us/articles/204814371-What-does-central-number-mean-) diff --git a/source/_components/sensor.fritzbox_callmonitor.markdown b/source/_components/sensor.fritzbox_callmonitor.markdown index 157e338e43b..6e50df044b1 100644 --- a/source/_components/sensor.fritzbox_callmonitor.markdown +++ b/source/_components/sensor.fritzbox_callmonitor.markdown @@ -1,7 +1,7 @@ --- layout: page title: "FRITZ!Box Call Monitor" -description: "Instructions how to integrate a phone call monitor for AVM FRITZ!Box routers into Home Assistant." +description: "Instructions on how to integrate a phone call monitor for AVM FRITZ!Box routers into Home Assistant." date: 2016-08-13 15:00 sidebar: true comments: false @@ -14,12 +14,25 @@ ha_iot_class: "Local Polling" --- -The `fritzbox_callmonitor` sensor monitors the call monitor exposed by [AVM Fritz!Box](http://avm.de/produkte/fritzbox/) routers -on TCP port 1012. It will assume the values `idle`, `ringing`, `dialing`, or `talking` with the phone numbers involved contained in the state attributes. +The `fritzbox_callmonitor` sensor monitors the call monitor exposed by [AVM Fritz!Box](http://avm.de/produkte/fritzbox/) routers on TCP port 1012. It will assume the values `idle`, `ringing`, `dialing` or `talking` with the phone numbers involved contained in the state attributes. It can also access the internal phone book of the router to look up the names corresponding to the phone numbers and store them in the state attributes. +## {% linkable_title Prerequisites %} + +To build the package you have to install some dependencies first. + +```bash +$ sudo apt-get update +$ sudo apt-get install libxml2-dev libxslt-dev \ + python3-setuptools zlib1g-dev build-essential +``` + +## {% linkable_title Setup%} + To activate the call monitor on your Fritz!Box, dial #96\*5\* from any phone connected to it. +## {% linkable_title Configuration %} + To use the Fritz!Box call monitor in your installation, add the following to your `configuration.yaml` file: ```yaml @@ -44,7 +57,7 @@ Configuration variables: The example below shows a full configuration for a call monitor with phone book support. ```yaml -# Example configuration.yml entry +# Example configuration.yaml entry sensor: - platform: fritzbox_callmonitor name: Phone @@ -61,8 +74,9 @@ sensor: This example shows how to send notifications whenever the sensor's state changes. You will get notified both when you receive a call and also when a call is placed. +{% raw %} ```yaml -# Example configuration.yml entry. +# Example configuration.yaml entry. automation: - alias: "Notify about phone state" trigger: @@ -73,7 +87,7 @@ automation: data: title: "Phone" message: >- - {% raw %}{% if is_state("sensor.phone", "idle") %} + {% if is_state("sensor.phone", "idle") %} Phone is idle {% elif is_state("sensor.phone", "dialing") %} Calling {{ states.sensor.phone.attributes.to_name }} ({{ states.sensor.phone.attributes.to }}) @@ -81,5 +95,6 @@ automation: Incoming call from {{ states.sensor.phone.attributes.from_name }} ({{ states.sensor.phone.attributes.from }}) {% else %} Talking to {{ states.sensor.phone.attributes.with_name }} ({{ states.sensor.phone.attributes.with }}) - {% endif %}{% endraw %} + {% endif %} ``` +{% endraw %} diff --git a/source/_components/sensor.fritzbox_netmonitor.markdown b/source/_components/sensor.fritzbox_netmonitor.markdown index 9842499a1ac..5a4c3f858a7 100644 --- a/source/_components/sensor.fritzbox_netmonitor.markdown +++ b/source/_components/sensor.fritzbox_netmonitor.markdown @@ -1,7 +1,7 @@ --- layout: page title: "FRITZ!Box Net Monitor" -description: "Instructions how to integrate an AVM FRITZ!Box monitor into Home Assistant." +description: "Instructions on how to integrate an AVM FRITZ!Box monitor into Home Assistant." date: 2017-01-17 22:00 sidebar: true comments: false @@ -13,12 +13,12 @@ ha_release: 0.36 ha_iot_class: "Local Polling" --- - The `fritzbox_netmonitor` sensor monitors the network statistics exposed by [AVM Fritz!Box](http://avm.de/produkte/fritzbox/) routers.

It might be necessary to install additional packages: $ sudo apt-get install libxslt-dev libxml2-dev python3-lxml -If you are working with the All-in-One installation, you may also need to execute also within your virtual environment the command pip install lxml; be patient this will take a while.

+If you are working with the All-in-One installation, you may also need to execute also within your virtual environment the command pip install lxml; be patient this will take a while. +

To use the Fritz!Box network monitor in your installation, add the following to your `configuration.yaml` file: diff --git a/source/_components/sensor.gearbest.markdown b/source/_components/sensor.gearbest.markdown new file mode 100644 index 00000000000..31803acb752 --- /dev/null +++ b/source/_components/sensor.gearbest.markdown @@ -0,0 +1,72 @@ +--- +layout: page +title: "Gearbest" +description: "Instructions on how to integrate a Gearbest sensor into Home Assistant." +date: 2017-11-13 09:08 +sidebar: true +comments: false +sharing: true +footer: true +logo: gearbest.png +ha_category: Sensor +ha_iot_class: "Cloud Polling" +ha_release: "0.60" +--- + + +The `gearbest` sensor will track the price of a product from [Gearbest](https://www.gearbest.com). This information can be used in, e.g., automations to notify you when a price drops. The update interval for every item is currently set to 2 hours. + +To enable this sensor, add the following lines to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +sensor: + - platform: gearbest + currency: EUR + items: + - url: https://www.gearbest.com/.... +``` + +{% configuration %} +currency: + description: "The currency in which the products should be tracked. Currently supported: USD, EUR, GBP, AUD, CAD, CHF, HKD, CNY, NZD, JPY, RUB, BRL, CLP, NOK, DKK, SEK, KRW, ILS, COP, MXN, PEN, THB, IDR, UAH, PLN, INR, BGN, HUF, RON, TRY, CZK, HRK, MAD, AED, SAR, ZAR, SGD, MYR, TWD, RSD, NGN - if the currency could not be found in the conversion rate list, USD will be used as default. Either an ID or an URL must be present." + required: true + type: string +items: + description: List of products that should be tracked. + required: true + type: map + keys: + id: + description: The ID of the product. + required: false + type: int + url: + description: The URL of the product. + required: false + type: string + name: + description: The name of the item. If not set, it is parsed from the website. + required: false + type: string + currency: + description: Overwrite the currency for the current item. + required: false + type: string +{% endconfiguration %} + +### {% linkable_title Extended example %} + +```yaml +# Example configuration.yaml entry +sensor: + - platform: gearbest + currency: EUR + items: + - url: https://www.gearbest.com/3d-printers-3d-printer-kits/pp_779174.html?wid=21 + name: Creality CR-10 upgraded + currency: USD + - id: 779174 + name: Creality CR-10 upgraded #2 + currency: EUR +``` diff --git a/source/_components/sensor.geizhals.markdown b/source/_components/sensor.geizhals.markdown index 13f02fc7a13..c9780740569 100644 --- a/source/_components/sensor.geizhals.markdown +++ b/source/_components/sensor.geizhals.markdown @@ -14,7 +14,7 @@ ha_release: "0.51" --- -The `geizhals` sensor will give you the best price of a product from [Geizhals](https://geizhals.de) or related site. With this information can be used in e.g. automations to notify you when a price drops. +The `geizhals` sensor will give you the best price of a product from [Geizhals](https://geizhals.de) or related site. With this information can be used in e.g., automations to notify you when a price drops. To enable this sensor, add the following lines to your `configuration.yaml` file: @@ -29,7 +29,7 @@ sensor: Configuration variables: - **name** (*Required*): The internal name of the product in Home Assistant. -- **product_id** (*Required*): ID of the product. Get the ID from the geizhals website of your chosen product by clicking on the *Price History* tab, e.g. [here](https://geizhals.de/?phist=1453021). The URL of this site reveals the ID, e.g. with `product_id: 1453021`. +- **product_id** (*Required*): ID of the product. Get the ID from the geizhals website of your chosen product by clicking on the *Price History* tab, e.g., [here](https://geizhals.de/?phist=1453021). The URL of this site reveals the ID, e.g., with `product_id: 1453021`. - **description** (*Optional*): The name of the product in the front end. - **domain** (*Optional*): Domain which should be used for the request. Set this to `geizhals.at`, `geizhals.eu`, `geizhals.de`, `skinflint.co.uk` or `cenowarka.pl`. Defaults to `geizhals.de`. - **regex** (*Optional*): Regular expression to parse the price. Default: `\D\s(\d*)[\,|\.](\d*)`. diff --git a/source/_components/sensor.geo_rss_events.markdown b/source/_components/sensor.geo_rss_events.markdown index 188e895f11a..9d73fe5f7b9 100644 --- a/source/_components/sensor.geo_rss_events.markdown +++ b/source/_components/sensor.geo_rss_events.markdown @@ -9,36 +9,27 @@ sharing: true footer: true logo: rss.png ha_category: Sensor -ha_version: 0.55 ha_iot_class: "Cloud Polling" +ha_release: 0.55 --- -The `geo_rss_events` sensor retrieves events from a GeoRSS feed and -shows information of those events filtered by distance to Home Assistant's -location and grouped by category. +The `geo_rss_events` sensor retrieves events from a GeoRSS feed and shows information of those events filtered by distance to Home Assistant's location and grouped by category. -This sensor is particularly useful if events occur unexpectedly in the -vicinity of the home while the GeoRSS feed also contains many events -representing distant unrelated entries. Typical examples are bush fires -alerts or earthquakes. +This sensor is particularly useful if events occur unexpectedly in the vicinity of the home while the GeoRSS feed also contains many events representing distant unrelated entries. Typical examples are bush fires alerts or earthquakes.

-The reference point for comparing the distance is defined by `latitude` -and `longitude` in the basic configuration. +The reference point for comparing the distance is defined by `latitude` and `longitude` in the basic configuration. -Only entries of the feed are considered that define a location as `point` -or `polygon` in *georss.org* format or as *WGS84 latitude/longitude*. +Only entries of the feed are considered that define a location as `point` or `polygon` in *georss.org* format or as *WGS84 latitude/longitude*. The data is updated every 5 minutes. ## {% linkable_title Configuration %} -To enable the GeoRSS events sensor, add the following lines to your -`configuration.yaml`. This is an example configuration showing bush fire -incidents from the NSW Rural Fire Service. +To enable the GeoRSS events sensor, add the following lines to your `configuration.yaml`. This is an example configuration showing bush fire incidents from the NSW Rural Fire Service. ```yaml # Example configuration.yaml entry @@ -53,13 +44,32 @@ sensor: - 'Advice' ``` -Configuration variables: - -- **url** (*Required*): Full URL of the GeoRSS feed. -- **name** (*Optional*): Name of the sensor used in generating the entity id. Default is 'Event Service'. -- **radius** (*Optional*): The distance in kilometres around the Home Assistant's coordinates in which events are considered. Default is: 20km. -- **categories** (*Optional*): List of event category names found in the GeoRSS feed. A separate sensor is created for each category defined. Default is to join events from all categories into an 'Any' category. -- **unit_of_measurement** (*Optional*): The type of events found in the GeoRSS feed. Default is 'Events'. +{% configuration %} +url: + description: Full URL of the GeoRSS feed. + required: true + type: string +name: + description: Name of the sensor used in generating the entity id. + required: false + type: string + default: Event Service +radius: + description: The distance in kilometers around the Home Assistant's coordinates in which events are considered. + required: false + type: string + default: 20km +categories: + description: List of event category names found in the GeoRSS feed. A separate sensor is created for each category defined. + required: false + type: list + default: Default is to join events from all categories into an 'Any' category. +unit_of_measurement: + description: The type of events found in the GeoRSS feed. + required: false + type: string + default: Events +{% endconfiguration %} ## {% linkable_title Example Feeds %} diff --git a/source/_components/sensor.gitter.markdown b/source/_components/sensor.gitter.markdown index 55b8d29fe40..72f3c4b7dcc 100644 --- a/source/_components/sensor.gitter.markdown +++ b/source/_components/sensor.gitter.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Gitter Sensor" -description: "Instructions how to integrate a Gitter room sensor with Home Assistant" +description: "Instructions on how to integrate a Gitter room sensor with Home Assistant" date: 2017-06-11 09:00 sidebar: true comments: false @@ -15,19 +15,27 @@ ha_release: 0.47 This `gitter` sensor allows one to monitor a [Gitter.im](https://gitter.im) chatroom for unread messages. +## {% linkable_title Configuration %} + Visit [Gitter Developer Apps](https://developer.gitter.im/apps) to retrieve your "Personal Access Token". To use a Gitter sensor in your installation, add the following to your `configuration.yaml` file: ```yaml -# Example configuration.yml entry +# Example configuration.yaml entry sensor: - platform: gitter api_key: YOUR_API_TOKEN ``` -Configuration variables: - -- **api_key** (*Required*): Your Gitter.im API token. -- **room** (*Optional*): Gitter room to monitor. Defaults to `home-assistant/home-assistant` - +{% configuration %} +api_key: + description: Your Gitter.im API token. + required: true + type: string +room: + description: Gitter room to monitor. + required: false + type: string + default: home-assistant/home-assistant +{% endconfiguration %} diff --git a/source/_components/sensor.glances.markdown b/source/_components/sensor.glances.markdown index 03b25369a74..f455945493e 100644 --- a/source/_components/sensor.glances.markdown +++ b/source/_components/sensor.glances.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Glances" -description: "Instructions how to integrate Glances sensors into Home Assistant." +description: "Instructions on how to integrate Glances sensors into Home Assistant." date: 2015-09-14 19:10 sidebar: true comments: false @@ -58,6 +58,9 @@ sensor: - 'process_thread' - 'process_sleeping' - 'cpu_temp' + - 'docker_active' + - 'docker_cpu_use' + - 'docker_memory_use' ``` Configuration variables: @@ -81,5 +84,8 @@ Configuration variables: - **process_thread**: Number of threads - **process_sleeping**: Number of sleeping processes - **cpu_temp**: CPU Temperature (may not available on all platforms) + - **docker_active**: Count of active Docker containers + - **docker_cpu_use**: Total CPU usage in percent of Docker containers + - **docker_memory_use**: Total memory used of Docker containers Not all platforms are able to provide all metrics. For instance `cpu_temp` is requires installing and configuring `lmsensors` in Ubuntu, and may not be available at all in other platforms. diff --git a/source/_components/sensor.google_wifi.markdown b/source/_components/sensor.google_wifi.markdown index 76bb37400a5..303c89ed0a6 100644 --- a/source/_components/sensor.google_wifi.markdown +++ b/source/_components/sensor.google_wifi.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Google Wifi" -description: "Instructions how to integrate Google Wifi/OnHub routers into Home Assistant." +description: "Instructions on how to integrate Google Wifi/OnHub routers into Home Assistant." date: 2017-07-15 21:22 sidebar: true comments: false diff --git a/source/_components/sensor.gpsd.markdown b/source/_components/sensor.gpsd.markdown index 0436c5f3d17..82448cd970b 100644 --- a/source/_components/sensor.gpsd.markdown +++ b/source/_components/sensor.gpsd.markdown @@ -1,7 +1,7 @@ --- layout: page title: "GPSD" -description: "Instructions how to integrate GPSD into Home Assistant." +description: "Instructions on how to integrate GPSD into Home Assistant." date: 2016-07-18 07:00 sidebar: true comments: false diff --git a/source/_components/sensor.gtfs.markdown b/source/_components/sensor.gtfs.markdown index 00243470ada..547ff77afb9 100644 --- a/source/_components/sensor.gtfs.markdown +++ b/source/_components/sensor.gtfs.markdown @@ -21,9 +21,10 @@ You need to find a valid GTFS data set, which you can usually find just by searc Here are some examples: - [Bay Area Rapid Transit (BART)](http://www.bart.gov/schedules/developers/gtfs) - The light rail system for the San Francisco Bay Area. -- [Metropolitan Transit Authority of New York City (MTA)](http://www.bart.gov/schedules/developers/gtfs) - Provides separate data feeds for subway, bus, LIRR and Metro-North of the greater New York City metropolitan region. +- [Metropolitan Transit Authority of New York City (MTA)](http://web.mta.info/developers/) - Provides separate data feeds for subway, bus, LIRR and Metro-North of the greater New York City metropolitan region. - [GBRail.info](http://www.gbrail.info/) - Provides data feeds for most if not all rail companies in Britain. - [Official Timetable Switzerland](http://www.fahrplanfelder.ch/en/timetable-data.html) - The official timetable data for Switzerland. +- [Public Transport Victoria (Australia)](https://www.data.vic.gov.au/data/dataset/ptv-timetable-and-geographic-information-2015-gtfs) - Official PTV GTFS dataset. You need to download a GTFS ZIP file and put it into a folder named `gtfs` in your configuration directory. For ease of use, it is suggested that you rename the file to just the agency/data source name (i.e. `bart.zip` instead of `google_transit_20160328_v1.zip`). You can also unzip and place a folder in the `gtfs` folder. diff --git a/source/_components/sensor.haveibeenpwned.markdown b/source/_components/sensor.haveibeenpwned.markdown index d58401931b2..56cb497b2ad 100644 --- a/source/_components/sensor.haveibeenpwned.markdown +++ b/source/_components/sensor.haveibeenpwned.markdown @@ -1,7 +1,7 @@ --- layout: page title: "HaveIBeenPwned Sensor" -description: "Instructions how to integrate HaveIBeenPwned sensor into Home Assistant." +description: "Instructions on how to integrate HaveIBeenPwned sensor into Home Assistant." date: 2016-09-29 18:00 sidebar: true comments: false @@ -14,18 +14,28 @@ ha_iot_class: "Cloud Polling" --- The `haveibeenpwned` sensor platform creates sensors that check for breached email accounts on [haveibeenpwned](https://haveibeenpwned.com). + +## {% linkable_title Configuration %} + To enable this sensor, add the following lines to your `configuration.yaml`, it will list every specified email address as a sensor showing -the number of breaches on that email account: +the number of breaches on that email account. ```yaml # Example configuration.yaml entry using cloud based emoncms sensor: - platform: haveibeenpwned - email: - - your_email1@domain.com - - your_email2@domain.com + - platform: haveibeenpwned + email: + - your_email1@domain.com + - your_email2@domain.com ``` +{% configuration %} +email: + description: List of email addresses. + required: true + type: list +{% endconfiguration %} + ## {% linkable_title Breach meta data %} If one of your email accounts is breached the sensor will display breach meta data. It will list the title of the site where your email @@ -36,10 +46,6 @@ account has been breached as well as the added date of the breach data. This dat

-## {% linkable_title Configuration variables %} - -- **email** (*Required*): List of email addresses. -

The sensor will scan all email addresses specified with a 5 second delay between all breach data requests on Home Assistant startup. After this initial startup scanning, the sensor will only scan one email account per 15 minutes to prevent abuse, and not hammer "the diff --git a/source/_components/sensor.hddtemp.markdown b/source/_components/sensor.hddtemp.markdown index 73c84fd8a19..0116bedde19 100644 --- a/source/_components/sensor.hddtemp.markdown +++ b/source/_components/sensor.hddtemp.markdown @@ -1,7 +1,7 @@ --- layout: page title: "HDDTemp" -description: "Instructions how to integrate hard drive temperature information into Home Assistant." +description: "Instructions on how to integrate hard drive temperature information into Home Assistant." date: 2016-10-28 07:00 sidebar: true comments: false diff --git a/source/_components/sensor.hive.markdown b/source/_components/sensor.hive.markdown index 3e7350e147c..0d4d087516f 100644 --- a/source/_components/sensor.hive.markdown +++ b/source/_components/sensor.hive.markdown @@ -14,8 +14,12 @@ ha_iot_class: "Cloud Polling" --- -The 'hive' sensor component can expose as a sensor the current online status of your Hive Hub. +The `hive` sensor component exposes Hive data as a sensor. +The platform exposes the following sensors: + +- Hive Hub Online Status +- Hive Outside Temperature

Full configuration details can be found on the main [Hive component](/components/hive/) page. diff --git a/source/_components/sensor.homematic.markdown b/source/_components/sensor.homematic.markdown index aea1b6d5ef2..005011cea61 100644 --- a/source/_components/sensor.homematic.markdown +++ b/source/_components/sensor.homematic.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Homematic Sensor" -description: "Instructions how to integrate Homematic sensors within Home Assistant." +description: "Instructions on how to integrate Homematic sensors within Home Assistant." date: 2016-06-28 08:30 sidebar: true comments: false diff --git a/source/_components/sensor.homematicip_cloud.markdown b/source/_components/sensor.homematicip_cloud.markdown new file mode 100644 index 00000000000..0f91b4aa20d --- /dev/null +++ b/source/_components/sensor.homematicip_cloud.markdown @@ -0,0 +1,21 @@ +--- +layout: page +title: "HomematicIP Cloud Sensor" +description: "Instructions on how to integrate HomematicIP sensors within Home Assistant." +date: 2018-04-02 13:40 +sidebar: true +comments: false +sharing: true +footer: true +logo: homematicip_cloud.png +ha_category: Sensor +ha_release: 0.66 +ha_iot_class: "Cloud Push" +--- + +The `homematicip_cloud` sensor platform allows you to control +[HomematicIP](http://www.homematicip.de) sensors through Home Assistant. + +Devices will be configured automatically. Please refer to the +[component](/components/homematicip_cloud/) configuration on how to setup +HomematicIP Cloud. diff --git a/source/_components/sensor.hp_ilo.markdown b/source/_components/sensor.hp_ilo.markdown index 1f51f2052c3..f242584b9db 100644 --- a/source/_components/sensor.hp_ilo.markdown +++ b/source/_components/sensor.hp_ilo.markdown @@ -15,7 +15,7 @@ ha_iot_class: "Local Polling" The `hp_ilo` platform allows you to do an API call to the HP ILO (Integrated Lights-Out) sensor of your server, and use this data in Home Assistant sensors. -If the ILO or specified jsonpath query returns only a single value (e.g. a temperature or state), it will be put in the state field. If a data structure is returned, it will be placed in the `ilo_data` attribute. +If the ILO or specified jsonpath query returns only a single value (e.g., a temperature or state), it will be put in the state field. If a data structure is returned, it will be placed in the `ilo_data` attribute. Some more details about what can be retrieved from these sensors is available in the [python-hpilo documentation](http://pythonhosted.org/python-hpilo/). @@ -23,6 +23,7 @@ Some more details about what can be retrieved from these sensors is available in

+## {% linkable_title Configuration %} To use this component in your installation, add the following to your `configuration.yaml` file: @@ -31,8 +32,8 @@ To use this component in your installation, add the following to your `configura sensor: - platform: hp_ilo host: IP_ADDRESS or HOSTNAME - username: USERNAME - password: PASSWORD + username: YOUR_USERNAME + password: YOUR_PASSWORD monitored_variables: - name: SENSOR NAME sensor_type: SENSOR TYPE @@ -63,7 +64,7 @@ Valid sensor_types: - **server_health**: Get server health information. - **network_settings**: Get the iLO network settings. -### Example +## {% linkable_title Example %} In order to get two sensors reporting CPU fan speed and Ambient Inlet Temperature, as well as a dump of `server_health` on a HP Microserver Gen8, you could use the following in your `configuration.yaml` file @@ -71,8 +72,8 @@ In order to get two sensors reporting CPU fan speed and Ambient Inlet Temperatur sensor: - platform: hp_ilo host: IP_ADDRESS or HOSTNAME - username: USERNAME - password: PASSWORD + username: YOUR_USERNAME + password: YOUR_PASSWORD monitored_variables: - name: CPU fanspeed sensor_type: server_health diff --git a/source/_components/sensor.http.markdown b/source/_components/sensor.http.markdown index c119330eb41..9b0ec80fe16 100644 --- a/source/_components/sensor.http.markdown +++ b/source/_components/sensor.http.markdown @@ -1,7 +1,7 @@ --- layout: page title: "HTTP Sensor" -description: "Instructions how to integrate HTTP sensors within Home Assistant." +description: "Instructions on how to integrate HTTP sensors within Home Assistant." date: 2016-02-05 12:15 sidebar: true comments: false diff --git a/source/_components/sensor.htu21d.markdown b/source/_components/sensor.htu21d.markdown index f81b0f6c71e..a485fb0c382 100644 --- a/source/_components/sensor.htu21d.markdown +++ b/source/_components/sensor.htu21d.markdown @@ -1,7 +1,7 @@ --- layout: page title: "HTU21D Temperature and humidity sensor" -description: "Instructions how to integrate a HTU21D Temperature and humidity sensor into Home Assistant." +description: "Instructions on how to integrate a HTU21D Temperature and humidity sensor into Home Assistant." date: 2017-06-10 00:00 sidebar: true comments: false diff --git a/source/_components/sensor.hydrawise.markdown b/source/_components/sensor.hydrawise.markdown new file mode 100644 index 00000000000..ed1fbd52e5e --- /dev/null +++ b/source/_components/sensor.hydrawise.markdown @@ -0,0 +1,40 @@ +--- +layout: page +title: "Hunter Hydrawise Sensor" +description: "Instructions on how to integrate your Hunter Hydrawise Wi-Fi irrigation control system within Home Assistant." +date: 2018-04-11 08:02 +sidebar: true +comments: false +sharing: true +footer: true +logo: hydrawise_logo.png +ha_category: Sensor +ha_release: 0.71 +ha_iot_class: Cloud Polling +--- + +Before setting up the [Hunter Hydrawise](https://hydrawise.com) sensors please follow the instructions for setting up the [Hydrawise hub](/components/hydrawise) component. + +Once you have enabled the `hydrawise` component, add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +sensor: + - platform: hydrawise +``` + +{% configuration %} + +monitored_conditions: + description: The sensors that should be displayed on the frontend. + required: false + type: list + default: All sensors are enabled. + keys: + watering_time: + description: The amount of time left if the zone is actively watering. Otherwise the time is 0. + next_cycle: + description: The day and time when the next scheduled automatic watering cycle will start. If the zone is suspended then the value will be `NS` to indicate Not Scheduled. + {% endconfiguration %} + +Finish the configuration by visiting the [Hydrawise binary sensor](/components/binary_sensor.hydrawise/) and [Hydrawise switch](/components/switch.hydrawise/) documentation. diff --git a/source/_components/sensor.hydroquebec.markdown b/source/_components/sensor.hydroquebec.markdown index 18de06c9c7c..891f74ae21c 100644 --- a/source/_components/sensor.hydroquebec.markdown +++ b/source/_components/sensor.hydroquebec.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Hydro-Québec" -description: "Instructions how to integrate Hydro-Québec consumption profile within Home Assistant." +description: "Instructions on how to integrate Hydro-Québec consumption profile within Home Assistant." date: 2016-12-10 0:15 sidebar: true comments: false diff --git a/source/_components/sensor.ihc.markdown b/source/_components/sensor.ihc.markdown new file mode 100644 index 00000000000..b3e91ed9823 --- /dev/null +++ b/source/_components/sensor.ihc.markdown @@ -0,0 +1,59 @@ +--- +layout: page +title: "IHC Sensor" +description: "Instructions on how to integrate IHC Sensors within Home Assistant." +date: 2017-11-27 13:35 +sidebar: true +comments: false +sharing: true +footer: true +logo: ihc.png +ha_category: Sensor +ha_release: 0.62 +ha_iot_class: "Local Push" +--- + +Before you can use the IHC Sensor platform, you must setup the [IHC Component](/components/ihc/) + +When auto setup is enabled the following products will be found in the IHC project and setup as sensors: + +* Dataline temperature sensor - Will insert 2 temperature sensors +* Dataline Humidity - Will insert 1 humidity and 2 temperature sensors (calculated dewpoint) +* Dataline Lux - will insert 1 light and 1 temperature sensor + +To manually configure IHC sensors insert this section: + +```yaml +sensor: + - platform: ihc + sensors: + - id: 12345 + name: 'mysensor' + unit_of_measurement: '°C' + - id: 12346 + ... +``` + +{% configuration %} +sensors: + description: List of sensors to setup manually + required: false + type: map + keys: + id: + description: The IHC resource id. + required: true + type: int + name: + description: The name of the component + required: false + type: string + unit_of_measurement: + description: Defines the unit of measurement of the sensor, if any. + required: false + type: string +{% endconfiguration %} + +The resource id should be a IHC float resource. +For more information about IHC resource ids see [Manual Setup](/components/ihc/#manual-setup) + diff --git a/source/_components/sensor.imap.markdown b/source/_components/sensor.imap.markdown index 34fd3df9231..a3b9af23b29 100644 --- a/source/_components/sensor.imap.markdown +++ b/source/_components/sensor.imap.markdown @@ -1,7 +1,7 @@ --- layout: page title: "IMAP Unread E-mail" -description: "Instructions how to integrate IMAP unread email into Home Assistant." +description: "Instructions on how to integrate IMAP unread email into Home Assistant." date: 2016-07-11 06:00 sidebar: true comments: false @@ -24,8 +24,8 @@ sensor: - platform: imap server: imap.gmail.com port: 993 - username: USERNAME - password: PASSWORD + username: YOUR_USERNAME + password: YOUR_PASSWORD ``` Configuration variables: diff --git a/source/_components/sensor.imap_email_content.markdown b/source/_components/sensor.imap_email_content.markdown index cb639b436cf..22212426f6a 100644 --- a/source/_components/sensor.imap_email_content.markdown +++ b/source/_components/sensor.imap_email_content.markdown @@ -1,7 +1,7 @@ --- layout: page title: "IMAP Email Content" -description: "Instructions how to integrate IMAP email content sensor into Home Assistant." +description: "Instructions on how to integrate IMAP email content sensor into Home Assistant." date: 2016-09-09 12:30 sidebar: true comments: false @@ -38,7 +38,7 @@ Configuration variables: - **username** (*Required*): Username for the IMAP server. - **password** (*Required*): Password for the IMAP server. - **senders** (*Required*): A list of sender email addresses that are allowed to report state via email. Only emails received from these addresses will be processed. -- **value_template** (*Optional*): If specified this template will be used to render the state of sensor. If a template is not supplied the raw message body will be used for the sensor value. The following attributes will be supplied to the template: +- **value_template** (*Optional*): If specified this template will be used to render the state of the sensor. If a template is not supplied the message subject will be used for the sensor value. The following attributes will be supplied to the template: * **from**: The from address of the email * **body**: The body of the email diff --git a/source/_components/sensor.influxdb.markdown b/source/_components/sensor.influxdb.markdown index 1da8e3f1f90..66680379f7d 100644 --- a/source/_components/sensor.influxdb.markdown +++ b/source/_components/sensor.influxdb.markdown @@ -1,7 +1,7 @@ --- layout: page title: "InfluxDB Sensor" -description: "Instructions how to integrate InfluxDB sensors within Home Assistant." +description: "Instructions on how to integrate InfluxDB sensors within Home Assistant." date: 2016-10-26 23:15 sidebar: true comments: false @@ -50,7 +50,7 @@ Configuration variables for the server: ### {% linkable_title Full configuration %} -The example configuration entry bellow create two request to your local InfluxDB instance, one to the database `db1`, the other to `db2`: +The example configuration entry below create two request to your local InfluxDB instance, one to the database `db1`, the other to `db2`: - `select last(value) as value from "°C" where "name" = "foo"` - `select min(tmp) as value from "%" where "entity_id" = ''salon'' and time > now() - 1h` diff --git a/source/_components/sensor.insteon_plm.markdown b/source/_components/sensor.insteon_plm.markdown new file mode 100644 index 00000000000..d394cd05d82 --- /dev/null +++ b/source/_components/sensor.insteon_plm.markdown @@ -0,0 +1,16 @@ +--- +layout: page +title: "Insteon PLM Sensor" +description: "Instructions on how to setup the Insteon PLM sensors locally within Home Assistant." +date: 2017-02-19 17:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: insteon.png +ha_category: Sensor +ha_iot_class: "Local Push" +ha_release: 0.65 +--- + +The `insteon_plm` sensor platform lets you control your sensors through an INSTEON PowerLinc Modem (PLM) device connected directly to your system on a USB or serial port. To add support, set up the primary [insteon_plm](/components/insteon_plm/) component. diff --git a/source/_components/sensor.iota.markdown b/source/_components/sensor.iota.markdown new file mode 100644 index 00000000000..e907cb2795f --- /dev/null +++ b/source/_components/sensor.iota.markdown @@ -0,0 +1,22 @@ +--- +layout: page +title: "IOTA sensor" +description: "Instructions on how to integrate IOTA wallets sensors with Home Assistant." +date: 2017-12-31 13:29 +sidebar: true +comments: false +sharing: true +footer: true +logo: iota.png +ha_category: Finance +ha_release: 0.62 +ha_iot_class: "Cloud Polling" +--- + +The sensors are automatically created if the [IOTA hub](/components/iota/) is present. + +Available sensors: + +- Wallet balance +- Node information + diff --git a/source/_components/sensor.iperf3.markdown b/source/_components/sensor.iperf3.markdown new file mode 100644 index 00000000000..add891e3c17 --- /dev/null +++ b/source/_components/sensor.iperf3.markdown @@ -0,0 +1,89 @@ +--- +layout: page +title: "Iperf3 Sensor" +description: "How to use Iperf3 within Home Assistant to measure your network bandwith." +date: 2018-05-01 02:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: iperf3.png +ha_category: System Monitor +featured: false +ha_release: 0.71 +ha_iot_class: "Local Polling" +--- + +The `iperf3` sensor component allows you to measure network bandwidth performance against a private or public Iperf3 server. + +## {% linkable_title Configuration %} + +By default, it will run every hour. The user can change the update frequency in the config by defining the minute, hour, and day for a iperf3 test to run. + +To add the `iperf3` sensor to your installation, add the following to your `configuration.yaml` file: + +Once per hour, on the hour (default): + +```yaml +# Example configuration.yaml entry +sensor: + - platform: iperf3 + host: iperf.he.net + monitored_conditions: + - download + - upload +``` + +{% configuration %} + monitored_conditions: + description: Sensors to display in the frontend. + required: true + type: list + keys: + download: + description: Download speed (Mbit/s) + upload: + description: Upload speed (Mbit/s) + host: + description: Specify the Iperf3 test to perform the test against. + required: true + type: string + duration: + description: Specify the test duration in seconds. Default is 10 and the valid range is from 5 to 10. + required: false + default: 3 + type: int + parallel: + description: Specify the number of concurrent streams to connect to the server. Default is 1 and the valid range is from 1 to 20. + default: 1 + type: int + protocol: + description: Specify the protocol to be used on the test. Default is TCP and the valid values are TCP or UDP. If your Iperf3 server is located in the Internet, consider to use TCP instead of UDP. If the protocol is set to use UDP, the sensor may not get updated due to package retransmission issues due to its nature. + required: false + default: tcp + type: string + scan_interval: + description: Specify the frequency in seconds which the test will be perfomed. Default value is 1 hour. + required: false + default: 3600 + type: int +{% endconfiguration %} + +You can find a list of public Iperf3 servers [here](https://iperf.fr/iperf-servers.php). You can also start your own Iperf3 server using the [mlabbe/iperf3's](https://hub.docker.com/r/mlabbe/iperf3/) docker image or just refer to your `iperf3` command's man page. + +The frequency when the test will be automatically triggered can be adjusted by setting the value `scan_interval` in seconds. + +Parallel streams can help in some situations. As TCP attempts to be fair and conservative, you may consider increasing the `parallel` attribute. Use this value with careful and refer to Iperf3 man page for more information. + +You can use the service `sensor.iperf3_update` to trigger a manual speed test for all sensors. Iperf3 has its own service call that allow to perform a speed test on a particular entity. + +### {% linkable_title Service `sensor.iperf3_update` %} + +| Service data attribute | Description | +| `entity_id` | String that point at `entity_id`s of the Iperf3 sensor. Else targets all. + + +## {% linkable_title Notes %} + +- When running on Raspberry Pi, just note that the maximum speed is limited by its 100 Mbit/s LAN adapter. +- This component requires the `iperf3` command to be installed on your OS. Please, refer to the [official Iperf3 documentation](http://software.es.net/iperf/obtaining.html) for installation instructions. diff --git a/source/_components/sensor.isy994.markdown b/source/_components/sensor.isy994.markdown index 60913660ef0..0be49fb0e15 100644 --- a/source/_components/sensor.isy994.markdown +++ b/source/_components/sensor.isy994.markdown @@ -1,7 +1,7 @@ --- layout: page title: "ISY994 Sensor" -description: "Instructions how to integrate ISY994 sensors into Home Assistant." +description: "Instructions on how to integrate ISY994 sensors into Home Assistant." date: 2016-09-03 23:00 sidebar: true comments: false diff --git a/source/_components/sensor.juicenet.markdown b/source/_components/sensor.juicenet.markdown index b65740d15e4..03bad7fccc9 100644 --- a/source/_components/sensor.juicenet.markdown +++ b/source/_components/sensor.juicenet.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Juicenet Sensor" -description: "Instructions how to setup WiFi-equipped Juicenet charging stations with Home Assistant." +description: "Instructions on how to setup WiFi-equipped Juicenet charging stations with Home Assistant." date: 2015-01-20 22:36 sidebar: true comments: false diff --git a/source/_components/sensor.kira.markdown b/source/_components/sensor.kira.markdown index 3f4d30443b2..1306cf161b0 100644 --- a/source/_components/sensor.kira.markdown +++ b/source/_components/sensor.kira.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Kira Sensor" -description: "Instructions how to integrate Kira modules into Home Assistant." +description: "Instructions on how to integrate Kira modules into Home Assistant." date: 2017-05-07 17:00 sidebar: true comments: false diff --git a/source/_components/sensor.knx.markdown b/source/_components/sensor.knx.markdown index d44e76e2e30..f7e78920229 100644 --- a/source/_components/sensor.knx.markdown +++ b/source/_components/sensor.knx.markdown @@ -34,5 +34,5 @@ sensor: - **name** (*Optional*): A name for this device used within Home Assistant. - **address**: KNX group address of the sensor. -- **type** (Optional): "percent", "temperature", "illuminance", "speed_ms", "current". +- **type** (Optional): "percent", "temperature", "humidity", "illuminance", "brightness", "speed_ms", "current", "power", "electric_current", "electric_potential", "energy", "frequency", "heatflowrate", "phaseanglerad", "phaseangledeg", "powerfactor" or "speed". diff --git a/source/_components/sensor.kwb.markdown b/source/_components/sensor.kwb.markdown index c53b43e8c27..e47d36488f0 100644 --- a/source/_components/sensor.kwb.markdown +++ b/source/_components/sensor.kwb.markdown @@ -1,7 +1,7 @@ --- layout: page title: "KWB Easyfire Sensor" -description: "Instructions how to integrate the KWB Easyfire sensor into Home Assistant." +description: "Instructions on how to integrate the KWB Easyfire sensor into Home Assistant." date: 2017-03-06 14:10 sidebar: true comments: false @@ -10,7 +10,7 @@ footer: true logo: kwb.png ha_category: Sensor ha_iot_class: "Local Polling" -ha_release: 0.40 +ha_release: "0.40" --- The `kwb` component integrates the sensors of KWB Easyfire pellet central heating units with the Comfort3 controller (http://www.kwbheizung.de/de/produkte/kwb-comfort-3.html) into Home Assistant. @@ -20,6 +20,7 @@ Direct connection via serial (RS485) or via telnet terminal server is supported. Since this serial protocol is proprietary and closed, only most temperature sensors and a few control relays are supported, the rest is still WIP (see https://www.mikrocontroller.net/topic/274137). Direct connection via serial port: + ```yaml # Example configuration.yaml entry - platform: kwb @@ -30,6 +31,7 @@ Direct connection via serial port: ``` Telnet terminal server with a serial-ethernet converter: + ```yaml # Example configuration.yaml entry - platform: kwb diff --git a/source/_components/sensor.lacrosse.markdown b/source/_components/sensor.lacrosse.markdown index 3dc7a9f842e..5218a2b710b 100644 --- a/source/_components/sensor.lacrosse.markdown +++ b/source/_components/sensor.lacrosse.markdown @@ -1,7 +1,7 @@ --- layout: page title: "LaCrosse Sensor" -description: "Instructions how to integrate LaCrosse sensor data received from Jeelink into Home Assistant." +description: "Instructions on how to integrate LaCrosse sensor data received from Jeelink into Home Assistant." date: 2017-10-29 15:00 sidebar: true comments: false @@ -22,7 +22,7 @@ The `lacrosse` sensor platform is using the data provided by a [Jeelink](https:/ ## {% linkable_title Setup %} -Since the sensor change their ID after each powercycle/battery change you can check what sensor IDs are availble by using the command-line tool `pylacrosse` from the pylacrosse package. +Since the sensor change their ID after each powercycle/battery change you can check what sensor IDs are available by using the command-line tool `pylacrosse` from the pylacrosse package. ```bash $ sudo pylacrosse -d /dev/ttyUSB0 scan @@ -41,7 +41,7 @@ sensor: {% configuration %} device: - description: The serial baudrate. + description: The serial device. required: true type: string default: /dev/ttyUSB0 @@ -50,6 +50,26 @@ sensor: required: true type: int default: 57600 + led: + description: Activate or deactivate the Jeelink LED. + required: false + type: boolean + frequency: + description: Initial frequency in 5kHz steps. + required: false + type: int + datarate: + description: "Set the data rate in kbps. Special values for well-known settings are: `0`: 17.241 kbps, `1`: 9.579 kbps, `2`: 8.842 kbps." + required: false + type: int + toggle_mask: + description: "The following values can be combined bitwise: `1` = 17.241 kbps, `2` = 9.579 kbps, `4` = 8.842 kbps" + required: false + type: int + toggle_interval: + description: Enable the toggle mode and set the interval in seconds. + required: false + type: int sensors: description: A list of your sensors. required: true diff --git a/source/_components/sensor.lastfm.markdown b/source/_components/sensor.lastfm.markdown index 218e2f2a8e1..d76a8beba62 100644 --- a/source/_components/sensor.lastfm.markdown +++ b/source/_components/sensor.lastfm.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Last.fm" -description: "Instructions how to integrate Last.fm sensors into Home Assistant." +description: "Instructions on how to integrate Last.fm sensors into Home Assistant." date: 2016-05-18 09:00 sidebar: true comments: false @@ -16,9 +16,13 @@ ha_release: "0.20" The `lastfm` sensor platform will allow you to see whenever a user starts scrobbling, their play count, last song played, and top song played on [Last.fm](http://www.last.fm). +## {% linkable_title Setup %} + To get an API key you need to create an [API account](http://www.last.fm/api/account/create). -To use Last.fm with your installation, add the following to your `configuration.yaml` file: +## {% linkable_title Configuration %} + +To use Last.fm sensor with your installation, add the following to your `configuration.yaml` file: ```yaml # Example configuration.yaml entry @@ -30,9 +34,16 @@ sensor: - user2 ``` -Configuration variables: - -- **api_key** (*Required*): Your API key. -- **users** array (*Required*): Array of users. - - **username** (*Required*): Username of the user. - +{% configuration %} +api_key: + description: Your Last.fm API key. + required: true + type: string +users: + description: List of users. + required: true + type: map + keys: + username: + description: Username of the user to monitor. +{% endconfiguration %} diff --git a/source/_components/sensor.linux_battery.markdown b/source/_components/sensor.linux_battery.markdown index 08c9fca5864..4bc3ea6b7ca 100644 --- a/source/_components/sensor.linux_battery.markdown +++ b/source/_components/sensor.linux_battery.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Linux Battery" -description: "Instructions how to integrate Linux Battery information into Home Assistant." +description: "Instructions on how to integrate Linux Battery information into Home Assistant." date: 2016-09-06 07:00 sidebar: true comments: false @@ -13,7 +13,7 @@ ha_release: 0.28 ha_iot_class: "Local Polling" --- -The `linux_battery` sensor platform is using the information stored in `/sys/class/power_supply/` on your local Linux system to display details about the current state of your battery. +The `linux_battery` sensor platform is using the information stored in `/sys/class/power_supply/` on your local Linux system to display details about the current state of your battery. To setup a battery sensor to your installation, add the following to your `configuration.yaml` file: @@ -23,8 +23,20 @@ sensor: - platform: linux_battery ``` -Configuration variables: - -- **name** (*Optional*): Friendly name to use for the frontend. Default to "Battery". -- **battery** (*Optional*): Number of the battery. Default to `1`. - +{% configuration %} +name: + description: Friendly name to use for the frontend. + required: false + default: Battery + type: string +battery: + description: Number of the battery. + required: false + default: 1 + type: integer +system: + description: "The local system type. Support `linux` and `android`." + required: false + default: linux + type: string +{% endconfiguration %} diff --git a/source/_components/sensor.london_air.markdown b/source/_components/sensor.london_air.markdown index d20d33fc715..b6713b73dc0 100644 --- a/source/_components/sensor.london_air.markdown +++ b/source/_components/sensor.london_air.markdown @@ -16,7 +16,7 @@ ha_release: 0.52 The `london_air` component [queries](http://api.erg.kcl.ac.uk/AirQuality/Hourly/MonitoringIndex/GroupName=London/Json) the London air quality [data feed](https://www.londonair.org.uk/LondonAir/API/) provided by Kings College London. A single sensor will be added for each `location` ([local authority district or borough](https://en.wikipedia.org/wiki/List_of_London_boroughs)) specified in the configuration file. The state of each sensor is the overall air quality in that borough. Note that only 28 of the 32 boroughs have data available. -Boroughs can have multiple monitoring sites at different geographical positions within the borough, and each of those sites can monitor up to six different kinds of pollutant. The pollutants are described [here](http://api.erg.kcl.ac.uk/AirQuality/Information/Species/Json) and are Carbon Monoxide ([CO2](http://www.londonair.org.uk/LondonAir/guide/WhatIsCO.aspx)), Nitrogen Dioxide ([NO2](http://www.londonair.org.uk/LondonAir/guide/WhatIsNO2.aspx)), Ozone ([O3](http://www.londonair.org.uk/LondonAir/guide/WhatIsO3.aspx)), Sulphur Dioxide ([SO2](http://www.londonair.org.uk/LondonAir/guide/WhatIsSO2.aspx)), PM2.5 & PM10 [particulates](http://www.londonair.org.uk/LondonAir/guide/WhatIsPM.aspx). The `latitude` and `longitude` of each site is accessible through a `data` attribute of the sensor, as are details about the pollutants monitored at that site. The `sites` attribute of a sensor displays how many monitoring sites that sensor covers. The `updated` attribute of a sensor states when the data was last published. Nominally data is published hourly, but in my experience this can vary. To limit the number of requests made by the sensor, a single API request is made every 30 minutes. +Boroughs can have multiple monitoring sites at different geographical positions within the borough, and each of those sites can monitor up to six different kinds of pollutant. The pollutants are described [here](http://api.erg.kcl.ac.uk/AirQuality/Information/Species/Json) and are Carbon Monoxide ([CO2](http://www.londonair.org.uk/LondonAir/guide/WhatIsCO.aspx)), Nitrogen Dioxide ([NO2](http://www.londonair.org.uk/LondonAir/guide/WhatIsNO2.aspx)), Ozone ([O3](http://www.londonair.org.uk/LondonAir/guide/WhatIsO3.aspx)), Sulfur Dioxide ([SO2](http://www.londonair.org.uk/LondonAir/guide/WhatIsSO2.aspx)), PM2.5 & PM10 [particulates](http://www.londonair.org.uk/LondonAir/guide/WhatIsPM.aspx). The `latitude` and `longitude` of each site is accessible through a `data` attribute of the sensor, as are details about the pollutants monitored at that site. The `sites` attribute of a sensor displays how many monitoring sites that sensor covers. The `updated` attribute of a sensor states when the data was last published. Nominally data is published hourly, but in my experience this can vary. To limit the number of requests made by the sensor, a single API request is made every 30 minutes. To add sensors to Home-assistant for all possible areas/boroughs add the following to your `configuration.yaml` file: @@ -59,7 +59,7 @@ Configuration variables: - **locations** array (*Required*): At least one entry required. -To explore the data available within the `data` attribute of a sensor use the `dev-template` tool on the Home-assistant frontend. `data` contains a list of monitored sites, where the number of monitored sites are given by the `sites` attribute. If a sensor has four sites, access the fourth site by indexing the list of sites using data[3]. Each site is a dictionary with multiple fields, with entries for the `latitude` and `longitude` of that site, a `pollution_status`, `site_code`, `site_name` and `site_type`. The field `number_of_pollutants` states how many pollutants are monitored (of the possible six) and the field `pollutants` returns a list with data for each pollutant. To access the first pollutant in the list for site zero use `attributes.data[0].pollutants[0]`. Each entry in `pollutants` is a dictionary with fields for the pollutant `code`, `description`, `index`, `quality` and a `summary`. [Template sensors](https://home-assistant.io/components/sensor.template/) can then be added to display these attributes, for example: +To explore the data available within the `data` attribute of a sensor use the `dev-template` tool on the Home-assistant frontend. `data` contains a list of monitored sites, where the number of monitored sites are given by the `sites` attribute. If a sensor has four sites, access the fourth site by indexing the list of sites using data[3]. Each site is a dictionary with multiple fields, with entries for the `latitude` and `longitude` of that site, a `pollution_status`, `site_code`, `site_name` and `site_type`. The field `number_of_pollutants` states how many pollutants are monitored (of the possible six) and the field `pollutants` returns a list with data for each pollutant. To access the first pollutant in the list for site zero use `attributes.data[0].pollutants[0]`. Each entry in `pollutants` is a dictionary with fields for the pollutant `code`, `description`, `index`, `quality` and a `summary`. [Template sensors](/components/sensor.template/) can then be added to display these attributes, for example: ```yaml # Example template sensors diff --git a/source/_components/sensor.loop_energy.markdown b/source/_components/sensor.loopenergy.markdown similarity index 94% rename from source/_components/sensor.loop_energy.markdown rename to source/_components/sensor.loopenergy.markdown index 55f8770b828..b3369c6fc52 100644 --- a/source/_components/sensor.loop_energy.markdown +++ b/source/_components/sensor.loopenergy.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Loop Energy" -description: "Instructions how to integrate Loop Energy devices within Home Assistant." +description: "Instructions on how to integrate Loop Energy devices within Home Assistant." date: 2016-04-02 22:00 sidebar: true comments: false @@ -11,9 +11,9 @@ logo: loop.png ha_category: Energy ha_release: 0.17 ha_iot_class: "Cloud Push" +redirect_from: /components/sensor.loop_energy/ --- - Integrate your [Loop Energy](https://www.your-loop.com/) meter information into Home Assistant. To use this sensor you need the client serial number and secret keys for your devices. The library used to get the data isn't officially supported and the only way to get the keys is to log into loop energy's website and type a command into your browser console. diff --git a/source/_components/sensor.luftdaten.markdown b/source/_components/sensor.luftdaten.markdown index 486b10e5f2a..8e4a41cdefc 100644 --- a/source/_components/sensor.luftdaten.markdown +++ b/source/_components/sensor.luftdaten.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Luftdaten Sensor" -description: "Instructions how to setup Luftdaten sensor in Home Assistant." +description: "Instructions on how to setup Luftdaten sensor in Home Assistant." date: 2017-11-01 00:00 sidebar: true comments: false @@ -45,16 +45,6 @@ sensor: required: false default: Luftdaten Sensor type: string - resource: - description: The URL of the API endpoint. Usually this has not to be changed. - required: false - default: https://api.luftdaten.info/v1/sensor/ - type: string - verify_ssl: - description: Verify SSL connection. - required: false - default: true - type: boolean monitored_conditions: description: A list of conditions you want to monitor. required: true @@ -65,8 +55,24 @@ sensor: P2: description: Show the particle sensors (particles 2.5 microns and below). temperature: - description: Display the temperature from a weather sensor. + description: Display the temperature from the sensor. humidity: - description: Display the humidity from a weather sensor. + description: Display the humidity from the sensor. + pressure: + description: Display the pressure from the sensor. + show_on_map: + description: Option to show the position of the sensor on the map. + required: optional + default: false + type: boolean {% endconfiguration %} +

+If you set `show_on_map` to `True` then the location attributes are named `latitude` and `longitude`. The default name of the location attributes is `lat` and `long` to avoid showing them on the map. +

+ +Not all sensors provide all conditions. Also, it's possible that the sensor values are not available all the time. To check what a sensor is publishing use `curl`: + +```bash +$ curl https://api.luftdaten.info/v1/sensor/[sensorid]/ +``` diff --git a/source/_components/sensor.magicseaweed.markdown b/source/_components/sensor.magicseaweed.markdown new file mode 100644 index 00000000000..1396a5245d0 --- /dev/null +++ b/source/_components/sensor.magicseaweed.markdown @@ -0,0 +1,95 @@ +--- +layout: page +title: "Magicseaweed Sensor" +description: "How to integrate Magicseaweed within Home Assistant." +date: 2018-06-24 21:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: magicseaweed.png +ha_category: Sensor +featured: false +ha_release: "0.75" +ha_iot_class: "Cloud Polling" +--- + +The 'magicseaweed' platform uses the [Magicseaweed Forecast API](https://magicseaweed.com/developer/forecast-api) as a source for surf forecasting data for the surf spots of your choice. + +You need an API key which is free but requires [registration](https://magicseaweed.com/developer/sign-up). Magicseaweed is limiting users of the API to 2 spots for the free plan. + +To add Magicseaweed forecasts to your installation, add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +sensor: + - platform: magicseaweed + api_key: YOUR_API_KEY + spot_id: 1092 + monitored_conditions: + - max_breaking_swell +``` + +{% configuration %} +api_key: + description: The API key to access the service. + required: true + type: string +name: + description: Spot nickname for the sensors. + required: false + default: MSW. + type: string +hour: + description: List of hours you would like to receive data for. + required: false + default: Defaults to current forecast. + type: list + keys: + 3AM: + description: Display forecast for 3AM. + 6AM: + description: Display forecast for 6AM. + 9AM: + description: Display forecast for 9AM. + 12PM: + description: Display forecast for 12PM. + 3PM: + description: Display forecast for 3PM. + 6PM: + description: Display forecast for 6PM. + 9PM: + description: Display forecast for 9PM. + 12AM: + description: Display forecast for 12AM. +spot_id: + description: ID of the surf spot. Details for getting spot id available at [Magicseaweed](https://magicseaweed.com/developer/forecast-api) + required: true + type: string +monitored_conditions: + description: Type of data to display. + required: true + type: list + keys: + swell_forecast: + description: List of forecast summaries as attributes with current summary as state. + min_breaking_swell: + description: The minimum wave height as the state with a detailed list of forecast attributes. + max_breaking_swell: + description: The maximum wave height as the state with a detailed list of forecast attributes. +units: + description: Specify the unit system. + required: false + default: Default to `uk` or `us` based on the temperature preference in Home Assistant. + type: string + keys: + uk: + description: Use UK units. + eu: + description: Use EU units. + us: + description: Use US units. +{% endconfiguration %} + + +Details about the API are available in the [Magicseaweed documentation](https://magicseaweed.com/developer/forecast-api). diff --git a/source/_components/sensor.markdown b/source/_components/sensor.markdown index 9f446e5266e..647f0e7ab08 100644 --- a/source/_components/sensor.markdown +++ b/source/_components/sensor.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Sensor" -description: "Instructions how to setup your sensors with Home Assistant." +description: "Instructions on how to setup your sensors with Home Assistant." date: 2015-01-24 14:39 sidebar: true comments: false @@ -9,8 +9,21 @@ sharing: true footer: true --- -Sensors are gathering information about states and conditions. +Sensors are gathering information about states and conditions. -Home Assistant currently supports a wide range of sensors. They are able to display information which are provides by Home assistant directly, are gathered from web services, and, of course, physical devices. Please check the sidebar for a full list of supported sensor platforms. +Home Assistant currently supports a wide range of sensors. They are able to display information which are provides by Home Assistant directly, are gathered from web services, and, of course, physical devices. Please check the sidebar for a full list of supported sensor platforms. +### {% linkable_title Device Class %} +The way these sensors are displayed in the frontend can be modified in the [customize section](/docs/configuration/customizing-devices/). The following device classes are supported for sensors: + +- **None**: Generic sensor. This is the default and doesn't need to be set. +- **battery**: Percentage of battery that is left. +- **humidity**: Percentage of humidity in the air. +- **illuminance**: The current light level in lx or lm. +- **temperature**: Temperature in °C or °F. + +

+ +Example of various device class icons for sensors. +

diff --git a/source/_components/sensor.melissa.markdown b/source/_components/sensor.melissa.markdown new file mode 100644 index 00000000000..4b18248d522 --- /dev/null +++ b/source/_components/sensor.melissa.markdown @@ -0,0 +1,20 @@ +--- +layout: page +title: "Melissa Sensor" +description: "Instructions on how to integrate Melissa sensors into Home Assistant." +date: 2017-08-30 12:21 +sidebar: true +comments: false +sharing: true +footer: true +logo: mclimate.png +ha_category: Sensor +ha_iot_class: "Cloud Polling" +ha_release: 0.63 +--- + +The `Melissa` platform allows you to get data from your [Melissa](http://seemelissa.com/) sensors from within Home Assistant. + +The sensor platform will be automatically configured if Melissa component is configured. + +For more configuration information see the [Melissa component](/components/melissa/) documentation. diff --git a/source/_components/sensor.mercedesme.markdown b/source/_components/sensor.mercedesme.markdown new file mode 100644 index 00000000000..da5fd9ba453 --- /dev/null +++ b/source/_components/sensor.mercedesme.markdown @@ -0,0 +1,20 @@ +--- +layout: page +title: "Mercedes me Sensor" +description: "Instructions on how to integrate Mercedes me sensors into Home Assistant." +date: 2018-01-27 17:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: mercedesme.png +ha_category: Sensor +ha_iot_class: "Cloud Push" +ha_release: 0.63 +--- + +The `Mercedes me` platform allows you to get data from your [Mercedes me connected car](https://www.mercedes-benz.com/en/mercedes-me/) sensors from within Home Assistant. + +The sensor platform will be automatically configured if Mercedes me component is configured. + +For more configuration information see the [Mercedes me component](/components/mercedesme/) documentation. diff --git a/source/_components/sensor.metoffice.markdown b/source/_components/sensor.metoffice.markdown index fc47f5f5c9b..38447940de0 100644 --- a/source/_components/sensor.metoffice.markdown +++ b/source/_components/sensor.metoffice.markdown @@ -13,10 +13,10 @@ ha_release: 0.42 ha_iot_class: "Cloud Polling" --- -The `metoffice` sensor platform uses the Met Office's [DataPoint API][datapoint] for weather data. +The `metoffice` sensor platform uses the Met Office's [DataPoint API](https://www.metoffice.gov.uk/datapoint) for weather data. -- Each sensor will be given the `device_id` of "Met Office [condition]" -- The sensor checks for new data every minute, starting 30 minutes after the timestamp of the most recent data as the data is updated every half-hour. +- Each sensor will be given the `device_id` of "Met Office [condition]" if `name:` is not set. +- The sensor checks for new data every minute, starting 30 minutes after the timestamp of the most recent data as the data is updated every half hour. To add the Met Office weather to your installation you'll need to register for a free api key at the link above and then add the following to your `configuration.yaml` file: @@ -24,7 +24,7 @@ To add the Met Office weather to your installation you'll need to register for a # Example configuration.yaml entry sensor: - platform: metoffice - api_key: "my-api-key" + api_key: YOUR_API_KEY monitored_conditions: - weather - temperature @@ -43,11 +43,25 @@ Your location will be detected from your home `latitude` and `longitude` setting Configuration variables: -- **api_key** (*Required*): Your personal API key from the [Datapoint website][datapoint]. +- **api_key** (*Required*): Your personal API key from the [Datapoint website](https://www.metoffice.gov.uk/datapoint). +- **name** (*Optional*): Additional name for the sensors. Default to platform name. +- **latitude** (*Optional*): Latitude coordinate to monitor weather of (required if **longitude** is specified), defaults to coordinates defined in your `configuration.yaml`. +- **longitude** (*Optional*): Longitude coordinate to monitor weather of (required if **latitude** is specified), defaults to coordinates defined in your `configuration.yaml`. +- **monitored_conditions** array (*Required*): Conditions to display in the frontend. + - **weather**: A human-readable text summary of the current conditions. + - **temperature**: The current temperature. + - **feels_like_temperature**: A numerical value representing the apparent (or "feels like") temperature. + - **wind_speed**: The wind speed. + - **wind_direction**: Where the wind is coming from. + - **wind_gust**: If there are wind gusts. + - **visibility**: The average visibility. + - **visibility_distance**: The visibility distance. + - **uv**: The UV index. + - **precipitation**: The average expected intensity of precipitation occurring. + - **humidity**: The relative humidity.

This sensor is an alternative to the [`metoffice`](/components/weather.metoffice/) weather platform. The weather platform is easier to configure but less customizable.

-[datapoint]: http://www.metoffice.gov.uk/datapoint diff --git a/source/_components/sensor.mfi.markdown b/source/_components/sensor.mfi.markdown index bcf44344dfa..4498c4d3281 100644 --- a/source/_components/sensor.mfi.markdown +++ b/source/_components/sensor.mfi.markdown @@ -1,7 +1,7 @@ --- layout: page title: "mFi Sensor" -description: "Instructions how to integrate mFi sensors within Home Assistant." +description: "Instructions on how to integrate mFi sensors within Home Assistant." date: 2016-02-07 10:00 sidebar: true comments: false @@ -16,15 +16,17 @@ ha_release: 0.32 The `mfi` sensor platform to allow you to monitor [mFi mPort interface and sensors](https://www.ubnt.com/mfi/mport/). +## {% linkable_title Configuration %} + To add this platform to your installation, add the following to your `configuration.yaml` file: ```yaml # Example configuration.yaml entry sensor: - platform: mfi - host: IP_ADDRESS - username: USERNAME - password: PASSWORD + host: IP_ADDRESS_OF_SENSOR + username: YOUR_USERNAME + password: YOUR_PASSWORD ``` Configuration variables: diff --git a/source/_components/sensor.miflora.markdown b/source/_components/sensor.miflora.markdown index 67f6ecd25f3..85ad3cd03b5 100644 --- a/source/_components/sensor.miflora.markdown +++ b/source/_components/sensor.miflora.markdown @@ -13,9 +13,20 @@ ha_release: 0.29 ha_iot_class: "Local Polling" --- -The `miflora` sensor platform allows one to monitor to plants. The [Mi Flora plant sensor](https://www.aliexpress.com/item/Newest-Original-Xiaomi-Flora-Monitor-Digital-Plants-Flowers-Soil-Water-Light-Tester-Sensor-Monitor-for-Aquarium/32685750372.html) is a small Bluetooth Low Energy device that monitors not only the moisture, but also light, temperature and conductivity. As only a single BLE device can be polled at the same time, the library implements locking to make sure this is the case. +The `miflora` sensor platform allows one to monitor plant soil and air conditions. The [Mi Flora plant sensor](https://xiaomi-mi.com/sockets-and-sensors/xiaomi-huahuacaocao-flower-care-smart-monitor/) is a small Bluetooth Low Energy device that monitors the moisture and conductivity of the soil as well as ambient light and temperature. Since only one BLE device can be polled at a time, the library implements locking to prevent polling more than one device at a time. -Start a scan to determine the MAC addresses of the sensor: +# Install Bluetooth Backend +Before configuring Home Assistant you need a Bluetooth backend and the MAC address of your sensor. Depending on your operating system, you may have to configure the proper Bluetooth backend for your system: + +- On [Hass.io](/hassio/installation/): Miflora will work out of the box. +- On a [generic Docker installation](/docs/installation/docker/): Works out of the box with `--net=host` and properly configured Bluetooth on the host. +- On other Linux systems: + - Preferred solution: Install the `bluepy` library (via pip). When using a virtual environment, make sure to use install the library in the right one. +    - Fallback solution: Install `gatttool` via your package manager. Depending on the distribution, the package name might be: `bluez`, `bluetooth`, `bluez-deprecated` +- On Windows and MacOS there is currently no support for the [miflora library](https://github.com/open-homeautomation/miflora/). + +# Scan for MAC address +Start a scan to determine the MAC addresses of the sensor (you can identify your sensor by looking for `Flower care` or `Flower mate` entries) using this command: ```bash $ sudo hcitool lescan @@ -25,8 +36,19 @@ C4:D3:8C:12:4C:57 Flower mate [...] ``` -Check for `Flower care` or `Flower mate` entries, those are your sensor. +Or, if your distribution is using bluetoothctl use the following commands: +```bash +$ bluetoothctl +[bluetooth]# scan on +[NEW] Controller [default] +[NEW] F8:04:33:AF:AB:A2 [TV] UE48JU6580 +[NEW] C4:D3:8C:12:4C:57 Flower mate +``` + +If you can't use `hcitool` or `bluetoothctl` but have access to an Android phone you can try `BLE Scanner` or similar scanner applications from the Play Store to easily find your sensor MAC address. + +# Configure To use your Mi Flora plant sensor in your installation, add the following to your `configuration.yaml` file: ```yaml @@ -35,7 +57,7 @@ sensor: - platform: miflora mac: 'xx:xx:xx:xx:xx:xx' monitored_conditions: - - temperature + - moisture ``` - **mac** (*Required*): The MAC address of your sensor. @@ -47,16 +69,17 @@ sensor: - **battery**: Battery details. - **name** (*Optional*): The name displayed in the frontend. - **force_update** (*Optional*): Sends update events even if the value hasn't changed. -- **median** (*Optional*): Sometimes the sensor measurements show spikes. Using this parameter, the poller will report the median of the last 3 (you can also use larger values) measurements. This filters out single spikes. Median: 5 will also filter double spikes. If you never have problems with spikes, `median: 1` will work fine. +- **median** (*Optional*): Sometimes the sensor measurements show spikes. Using this parameter, the poller will report the median of the last 3 (you can also use larger values) measurements. This filters out single spikes. Median: 5 will also filter double spikes. If you never have problems with spikes, `median: 1` will work fine. - **timeout** (*Optional*): Define the timeout value in seconds when polling (defaults to 10 if not defined) - **retries** (*Optional*): Define the number of retries when polling (defaults to 2 if not defined) - **cache_value** (*Optional*): Define cache expiration value in seconds (defaults to 1200 if not defined) - **adapter** (*Optional*): Define the Bluetooth adapter to use (defaults to hci0). Run `hciconfig` to get a list of available adapters. -Note that by default the sensor is only polled once every 15 minutes. This means with the `median: 3` setting will take as least 30 minutes before the sensor will report a value after a Home Assistant restart. As the values usually change very slowly, this isn't a big problem. -Reducing polling intervals will have a negative effect on the battery life. +

+By default the sensor is only polled once every 20 minutes. So, if you set `median: 3` it will take _at least_ 40 minutes before the sensor will report a value after a Home Assistant restart. Since the values usually change very slowly, this usually isn't a big problem. Keep in mind though that reducing polling intervals will have a negative effect on the battery life. +

-A full configuration example could looks the one below: +A full configuration example could look like the one below: ```yaml # Example configuration.yaml entry @@ -73,4 +96,3 @@ sensor: - conductivity - battery ``` - diff --git a/source/_components/sensor.min_max.markdown b/source/_components/sensor.min_max.markdown index db4db382a48..428e8485666 100644 --- a/source/_components/sensor.min_max.markdown +++ b/source/_components/sensor.min_max.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Min/max Sensor" -description: "Instructions how to integrate min/max sensors into Home Assistant." +description: "Instructions on how to integrate min/max sensors into Home Assistant." date: 2016-10-13 12:00 sidebar: true comments: false @@ -14,7 +14,7 @@ ha_release: "0.31" --- -The `min_max` sensor platform consumes the state from other sensors to determine the minimum, maximum, and the mean of the collected states. The sensor will always show you the lowest/highest value which was received from all monitored sensors. If you have spikes in your values, it's recommended to filter/equalize your values with a [statistics sensor](/components/sensor.statistics/) first. +The `min_max` sensor platform consumes the state from other sensors to determine the minimum, maximum, latest (last) and the mean of the collected states. The sensor will always show you the lowest/highest/latest value which was received from all monitored sensors. If you have spikes in your values, it's recommended to filter/equalize your values with a [statistics sensor](/components/sensor.statistics/) first. This sensor is an alternative to the [template sensor](/components/sensor.template/)'s `value_template:` to get the average of multiple sensors. @@ -42,7 +42,7 @@ sensor: Configuration variables: - **entity_ids** (*Required*): At least two entities to monitor. The unit of measurement of the first entry will be the one that's used. All entities must use the same unit of measurement. -- **type** (*Optional*): The type of sensor: `min`, `max` or `mean`. Defaults to `max`. +- **type** (*Optional*): The type of sensor: `min`, `max`, `last` or `mean`. Defaults to `max`. - **name** (*Optional*): Name of the sensor to use in the frontend. - **round_digits** (*Optional*): Round mean value to specified number of digits. Defaults to 2. diff --git a/source/_components/sensor.mitemp_bt.markdown b/source/_components/sensor.mitemp_bt.markdown new file mode 100644 index 00000000000..b20d72a4bf5 --- /dev/null +++ b/source/_components/sensor.mitemp_bt.markdown @@ -0,0 +1,94 @@ +--- +layout: page +title: "Xiaomi BLE Temperature and Humidity sensor" +description: "Instructions on how to integrate MiTemp BLE temperature and humidity sensor with Home Assistant." +date: 2018-04-22 12:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: xiaomi.png +ha_category: DIY +ha_release: 0.69 +ha_iot_class: "Local Polling" +--- + +The `mitemp_bt` sensor platform allows one to monitor room temperature and humidity. The [Xiaomi Mijia BLE Temperature and Humidity sensor with LCD](https://www.amazon.com/Temperature-Humidity-Xiaomi-Bluetooth-Screen-Remote/dp/B079L6N6PC) is a small Bluetooth Low Energy device that monitors the room temperature and humidity. As only a single BLE device can be polled at the same time, the library employs locking to make sure this is the case. + +## {% linkable_title Installation %} + +Depending on the operating system you're running, you have to configure the proper Bluetooth backend on your system: + +- On [Hass.io](/hassio/installation/): mitemp_bt will work out of the box. +- On a [generic Docker installation](https://www.home-assistant.io/docs/installation/docker/): Works out of the box with `--net=host` and properly configured Bluetooth on the host. +- On other Linux systems: + - Preferred solution: Install the `bluepy` and `btlewrap` library (via pip). When using a virtual environment, make sure to use install the library in the right one. +    - Fallback solution: Install `btlewrap` library (via pip) and `gatttool` via your package manager. Depending on the distribution, the package name might be: `bluez`, `bluetooth`, `bluez-deprecated` +- Windows and MacOS are currently not supported by the btlewrap library. + +## {% linkable_title Configuration %} + +Start a scan to determine the MAC addresses of the sensor: + +```bash +$ sudo hcitool lescan +LE Scan ... +4C:65:A8:D2:31:7F MJ_HT_V1 +[...] +``` + +Or if your distribution is using bluetoothctl: + +```bash +$ bluetoothctl +[bluetooth]# scan on +Discovery started +[CHG] Controller XX:XX:XX:XX:XX:XX Discovering: yes +[NEW] Device 4C:65:A8:D2:31:7F MJ_HT_V1 +``` + +Check for `MJ_HT_V1` or similar entries, those are your sensor. + +To use your Mi Temperature and Humidity sensor in your installation, add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +sensor: + - platform: mitemp_bt + mac: 'xx:xx:xx:xx:xx:xx' + monitored_conditions: + - temperature +``` + +- **mac** (*Required*): The MAC address of your sensor. +- **monitored_conditions** array (*Optional*): The parameters that should be monitored (defaults to monitoring all parameters). + - **temperature**: Temperature in C at the sensor's location. + - **humidity**: Humidity level in % at the sensor's location. + - **battery**: Battery details (in %). +- **name** (*Optional*): The name displayed in the frontend. +- **force_update** (*Optional*): Sends update events even if the value hasn't changed. +- **median** (*Optional*): Sometimes the sensor measurements show spikes. Using this parameter, the poller will report the median of the last 3 (you can also use larger values) measurements. This filters out single spikes. Median: 5 will also filter double spikes. If you never have problems with spikes, `median: 1` will work fine. +- **timeout** (*Optional*): Define the timeout value in seconds when polling (defaults to 10 if not defined) +- **retries** (*Optional*): Define the number of retries when polling (defaults to 2 if not defined) +- **cache_value** (*Optional*): Define cache expiration value in seconds (defaults to 300 if not defined) +- **adapter** (*Optional*): Define the Bluetooth adapter to use (defaults to hci0). Run `hciconfig` to get a list of available adapters. + +Note that by default the sensor is only polled once every 5 minutes. This means with the `median: 3` setting will take as least 15 minutes before the sensor will report a value after a Home Assistant restart. Even though the hardware is able to provide new values every second, room temperatures don't change that quickly. +Reducing polling intervals will have a negative effect on the battery life. + +A full configuration example could look like the one below: + +```yaml +# Example configuration.yaml entry +sensor: + - platform: mitemp_bt + mac: 'xx:xx:xx:xx:xx:xx' + name: Kids Room Temp + force_update: false + median: 3 + monitored_conditions: + - temperature + - humidity + - battery +``` + diff --git a/source/_components/sensor.modbus.markdown b/source/_components/sensor.modbus.markdown index 70cbfb494c2..5868888488e 100644 --- a/source/_components/sensor.modbus.markdown +++ b/source/_components/sensor.modbus.markdown @@ -1,7 +1,7 @@ --- layout: page title: Modbus Sensor -description: "Instructions how to integrate Modbus sensors into Home Assistant." +description: "Instructions on how to integrate Modbus sensors into Home Assistant." date: 2015-08-30 23:38 sidebar: true comments: false @@ -16,10 +16,12 @@ ha_iot_class: "Local Push" The `modbus` sensor allows you to gather data from [Modbus](http://www.modbus.org/) registers. +## {% linkable_title Configuration %} + To use your Modbus sensors in your installation, add the following to your `configuration.yaml` file: ```yaml -# Example configuration.yml entry +# Example configuration.yaml entry sensor: platform: modbus registers: diff --git a/source/_components/sensor.modem_callerid.markdown b/source/_components/sensor.modem_callerid.markdown index 30f1c98f9e6..6fa1ed1919d 100644 --- a/source/_components/sensor.modem_callerid.markdown +++ b/source/_components/sensor.modem_callerid.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Caller ID Sensor" -description: "Instructions how to integrate the Caller ID sensor into Home Assistant." +description: "Instructions on how to integrate the Caller ID sensor into Home Assistant." date: 2017-02-20 22:10 sidebar: true comments: false @@ -31,13 +31,13 @@ To find the path of your USB modem, run: `$ ls /dev/ttyACM*` -If Home Assistant (`hass`) runs with another user (e.g. `homeassistant` on Hassbian) give access to the stick with: +If Home Assistant (`hass`) runs with another user (e.g., `homeassistant` on Hassbian) give access to the stick with: `$ sudo usermod -a -G dialout homeassistant` Depending on what's plugged into your USB ports, the name found above may change. You can lock in a name, such as `/dev/modem`, by following [these instructions](http://hintshop.ludvig.co.nz/show/persistent-names-usb-serial-devices/). -When the sensor detects a new call, it's state changes to 'ring' for each ring and 'callerid' when caller id information is received. It returns to 'idle' once ringing stops. The state event includes an attribute payload that includes the time of the call, name and number. +When the sensor detects a new call, its state changes to 'ring' for each ring and 'callerid' when caller id information is received. It returns to 'idle' once ringing stops. The state event includes an attribute payload that includes the time of the call, name and number. Some example automations: ```yaml diff --git a/source/_components/sensor.mold_indicator.markdown b/source/_components/sensor.mold_indicator.markdown index 74d91d671dc..b14f077a19d 100644 --- a/source/_components/sensor.mold_indicator.markdown +++ b/source/_components/sensor.mold_indicator.markdown @@ -15,7 +15,7 @@ ha_iot_class: "Local Polling" The Mold Indicator sensor component consumes information of two temperature sensors and a humidity sensor to give an indication for possible mold growth in your home. In case of bad ventilation and insulation, the indoor humidity may lead to condensation on cold surfaces as the windows or even walls. Condensation or a high relative humidity near those cold surfaces leads to a higher risk for mold growth. This sensor component estimates the temperature at a pre-calibrated critical point in the room (the coldest surface) and calculates the relative humidity of the air at that point. If the sensor value rises above approximately 70 percent, mold growth might occur and the room should be ventilated. At 100%, the air humidity condensates at the critical point. -The sensor data may be used e.g. to signal bad air quality (too high air humidity) or to automate operation of indoor air humidifiers to keep the indoor humidity at an optimum. To use the Mold Indicator sensor in your installation, add the following to your `configuration.yaml` file: +The sensor data may be used e.g., to signal bad air quality (too high air humidity) or to automate operation of indoor air humidifiers to keep the indoor humidity at an optimum. To use the Mold Indicator sensor in your installation, add the following to your `configuration.yaml` file: ```yaml # Example configuration.yaml entry diff --git a/source/_components/sensor.moon.markdown b/source/_components/sensor.moon.markdown index 327d2214312..d80c1068988 100644 --- a/source/_components/sensor.moon.markdown +++ b/source/_components/sensor.moon.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Moon Sensor" -description: "Instructions how to integrate the moon sensor into Home Assistant." +description: "Instructions on how to integrate the moon sensor into Home Assistant." date: 2017-02-03 07:10 sidebar: true comments: false @@ -24,4 +24,4 @@ sensor: - platform: moon ``` This sensor will return one of the following values: -`New moon`, `Waxing crescent`, `First quarter`, `Waxing gibbous`, `Full moon`, `Waning gibbous`, `Last quarter` or `Waning crescent` . +`new_moon`, `waxing_crescent`, `first_quarter`, `waxing_gibbous`, `full_moon`, `waning_gibbous`, `last_quarter` or `waning_crescent` . diff --git a/source/_components/sensor.mopar.markdown b/source/_components/sensor.mopar.markdown index eef49e8f63a..65146841838 100644 --- a/source/_components/sensor.mopar.markdown +++ b/source/_components/sensor.mopar.markdown @@ -24,22 +24,32 @@ Be sure you have a [mopar.com](http://mopar.com) account with your vehicle(s) re To enable this sensor, add the following lines to your `configuration.yaml`. ```yaml +# Example configuration.yaml entry sensor: - platform: mopar - username: - password: - pin: + username: YOUR_USERNAME + password: YOUR_PASSWORD + pin: YOUR_UCONNECT_PIN ``` -Configuration options for the Mopar sensor: - -- **username** (*Required*): Your mopar.com username. -- **password** (*Required*): Your mopar.com password. -- **pin** (*Required*): Your uConnect pin. +{% configuration %} +username: + description: Your mopar.com username. + required: true + type: string +password: + description: Your mopar.com password. + required: true + type: string +pin: + description: v + required: true + type: string +{% endconfiguration %} ## {% linkable_title Service %} -Call the `mopar.remote_command` service to perform a remote command on your vehicle. +Call the `sensor.mopar_remote_command` service to perform a remote command on your vehicle. - **vehicle_index** (*Required*): `vehicle_index` attribute found on sensor. - **command** (*Required*): One of `lock/unlock/engineon/engineoff/horn`. diff --git a/source/_components/sensor.mqtt.markdown b/source/_components/sensor.mqtt.markdown index ca8be055d12..0b44200064a 100644 --- a/source/_components/sensor.mqtt.markdown +++ b/source/_components/sensor.mqtt.markdown @@ -1,7 +1,7 @@ --- layout: page title: "MQTT Sensor" -description: "Instructions how to integrate MQTT sensors within Home Assistant." +description: "Instructions on how to integrate MQTT sensors within Home Assistant." date: 2015-05-30 23:21 sidebar: true comments: false @@ -16,47 +16,134 @@ ha_iot_class: depends This `mqtt` sensor platform uses the MQTT message payload as the sensor value. If messages in this `state_topic` are published with *RETAIN* flag, the sensor will receive an instant update with last known value. Otherwise, the initial state will be undefined. +## {% linkable_title Configuration %} + To use your MQTT sensor in your installation, add the following to your `configuration.yaml` file: ```yaml -# Example configuration.yml entry +# Example configuration.yaml entry sensor: - platform: mqtt state_topic: "home/bedroom/temperature" ``` -Configuration variables: - -- **state_topic** (*Required*): The MQTT topic subscribed to receive sensor values. -- **name** (*Optional*): The name of the sensor. Default is 'MQTT Sensor'. -- **qos** (*Optional*): The maximum QoS level of the state topic. Default is 0. -- **unit_of_measurement** (*Optional*): Defines the units of measurement of the sensor, if any. -- **expire_after** (*Optional*): Defines the number of seconds after the value expires if it's not updated. Default is 0 (=never expire). -- **value_template** (*Optional*): Defines a [template](/docs/configuration/templating/#processing-incoming-data) to extract a value from the payload. +{% configuration %} +state_topic: + description: The MQTT topic subscribed to receive sensor values. + required: true + type: string +name: + description: Name of the MQTT sensor. + required: false + type: string + default: MQTT Sensor +qos: + description: The maximum QoS level of the state topic. + required: false + type: int + default: 0 +unit_of_measurement: + description: Defines the units of measurement of the sensor, if any. + required: false + type: string +icon: + description: Icon for the sensor (e.g. `mdi:gauge`). + required: false + type: string +expire_after: + description: Defines the number of seconds after the value expires if it's not updated. + required: false + type: int + default: 0 +value_template: + description: "Defines a [template](/docs/configuration/templating/#processing-incoming-data) to extract the value." + required: false + type: template +force_update: + description: Sends update events even if the value hasn't changed. Useful if you want to have meaningful value graphs in history. + reqired: false + type: boolean + default: False +availability_topic: + description: The MQTT topic subscribed to receive availability (online/offline) updates. + required: false + type: string +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 +json_attributes: + description: A list of keys to extract values from a JSON dictionary payload and then set as sensor attributes. + reqired: false + type: list, string +unique_id: + description: "An ID that uniquely identifies this sensor. If two sensors have the same unique ID, Home Assistant will raise an exception." + required: false + type: string +device_class: + description: The type/class of the sensor to set the icon in the frontend. + required: false + type: device_class + default: None +{% endconfiguration %} ## {% linkable_title Examples %} In this section you find some real life examples of how to use this sensor. +### {% linkable_title JSON attributes configuration %} + +The example sensor below shows a configuration example which uses JSON in the state topic to add extra attributes. It also makes use of the availability topic. Attributes can then be extracted in [Templates](/docs/configuration/templating/#attributes). For example, to extract the `ClientName` attribute from the sensor below, use a template similar to: {% raw %}`{{ state_attr('sensor.bs_rssi', 'ClientName') }}`{% endraw %}. + +{% raw %} +```yaml +# Example configuration.yaml entry +sensor: + - platform: mqtt + name: "BS RSSI" + state_topic: "HUISHS/BunnyShed/NodeHealthJSON" + unit_of_measurement: 'dBm' + value_template: "{{ value_json.RSSI }}" + availability_topic: "HUISHS/BunnyShed/status" + payload_available: "online" + payload_not_available: "offline" + json_attributes: + - ClientName + - IP + - MAC + - RSSI + - HostName + - ConnectedSSID +``` +{% endraw %} + ### {% linkable_title Get battery level %} -If you are using the [Owntracks](/components/device_tracker.owntracks/) and enable the reporting of the battery level then you can use a MQTT sensor to keep track of your battery. A regular MQTT message from Owntracks looks like this: +If you are using the [OwnTracks](/components/device_tracker.owntracks/) and enable the reporting of the battery level then you can use a MQTT sensor to keep track of your battery. A regular MQTT message from OwnTracks looks like this: ```bash owntracks/tablet/tablet {"_type":"location","lon":7.21,"t":"u","batt":92,"tst":144995643,"tid":"ta","acc":27,"lat":46.12} ``` -Thus the trick is extract the battery level from the payload. +Thus the trick is extracting the battery level from the payload. +{% raw %} ```yaml -# Example configuration.yml entry +# Example configuration.yaml entry sensor: - platform: mqtt - state_topic: "owntracks/tablet/tablet" name: "Battery Tablet" - unit_of_measurement: "%" - value_template: {% raw %}'{{ value_json.batt }}'{% endraw %} + state_topic: "owntracks/tablet/tablet" + unit_of_measurement: '%' + value_template: "{{ value_json.batt }}" ``` +{% endraw %} ### {% linkable_title Get temperature and humidity %} @@ -72,17 +159,48 @@ office/sensor1 Then use this configuration example to extract the data from the payload: +{% raw %} ```yaml -# Example configuration.yml entry +# Example configuration.yaml entry sensor: - platform: mqtt - state_topic: 'office/sensor1' - name: 'Temperature' + name: "Temperature" + state_topic: "office/sensor1" unit_of_measurement: '°C' - value_template: {% raw %}'{{ value_json.temperature }}'{% endraw %} + value_template: "{{ value_json.temperature }}" - platform: mqtt - state_topic: 'office/sensor1' - name: 'Humidity' + name: "Humidity" + state_topic: "office/sensor1" unit_of_measurement: '%' - value_template: {% raw %}'{{ value_json.humidity }}'{% endraw %} + value_template: "{{ value_json.humidity }}" ``` +{% endraw %} + +### {% linkable_title Get sensor value from a device with ESPEasy %} + +Assuming that you have flashed your ESP8266 unit with [ESPEasy](https://github.com/letscontrolit/ESPEasy). Under "Config" set a name ("Unit Name:") for your device (here it's "bathroom"). A "Controller" for MQTT with the protocol "OpenHAB MQTT" is present and the entries ("Controller Subscribe:" and "Controller Publish:") are adjusted to match your needs. In this example the topics are prefixed with "home". Please keep in mind that the ESPEasy default topics start with a `/` and only contain the name when writing your entry for the `configuration.yaml` file. + +- **Controller Subscribe**: `home/%sysname%/#` (instead of `/%sysname%/#`) +- **Controller Publish**: `home/%sysname%/%tskname%/%valname%` (instead of `/%sysname%/%tskname%/%valname%`) + +Also, add a sensor in the "Devices" tap with the name "analog" and "brightness" as value. + +As soon as the unit is online, you will get the state of the sensor. + +```bash +home/bathroom/status Connected +... +home/bathroom/analog/brightness 290.00 +``` + +The configuration will look like the example below: + +{% raw %} +```yaml +# Example configuration.yaml entry +sensor: + - platform: mqtt + name: "Brightness" + state_topic: "home/bathroom/analog/brightness" +``` +{% endraw %} diff --git a/source/_components/sensor.mqtt_room.markdown b/source/_components/sensor.mqtt_room.markdown index 598dafefb16..96aaa9dc7da 100644 --- a/source/_components/sensor.mqtt_room.markdown +++ b/source/_components/sensor.mqtt_room.markdown @@ -16,6 +16,8 @@ ha_iot_class: depends The `mqtt_room` sensor platform allows you to detect the indoor location of devices using MQTT clients. +## {% linkable_title Configuration %} + To use this device tracker in your installation, add the following to your `configuration.yaml` file: ```yaml diff --git a/source/_components/sensor.mvglive.markdown b/source/_components/sensor.mvglive.markdown index d3b10f18822..75306f563ff 100644 --- a/source/_components/sensor.mvglive.markdown +++ b/source/_components/sensor.mvglive.markdown @@ -1,7 +1,7 @@ --- layout: page title: "MVG" -description: "Instructions how to integrate Munich public transport departure times into Home Assistant." +description: "Instructions on how to integrate Munich public transport departure times into Home Assistant." date: 2017-03-21 20:00 sidebar: true comments: false @@ -13,9 +13,10 @@ ha_release: 0.42 ha_iot_class: "Cloud Polling" --- - The `mvglive` sensor will give you the departure time of the next bus, tram, subway, or train at the next station or stop in the Munich public transport network. Additional details such as the line number and destination are present in the attributes. +## {% linkable_title Configuration %} + To enable this sensor, add the following lines to your `configuration.yaml` file: ```yaml @@ -29,12 +30,14 @@ sensor: Configuration variables: - **station** (*Required*): Name of the stop or station. Visit [the MVG live web site](http://www.mvg-live.de) to find valid names. - - **destinations** (*Optional*): One or multiple final stop names, e.g. 'Feldmoching' or ['Feldmoching','Harthof']. This can be used to only consider a particular direction of travel + - **destinations** (*Optional*): One or multiple final stop names, e.g., 'Feldmoching' or ['Feldmoching','Harthof']. This can be used to only consider a particular direction of travel - **directions** (*Optional*): Filter by direction of the departure. For Tram, Bus, SEV, and S-Bahn, direction = direction. For U-Bahn trains, directions are more general. For U1, U2, U3 and U6, direction='1' indicates south-bound trains, direction='2' indicates northbound trains. For U4 and U5, direction='1' indicates east-bound trains, direction='2' indicates west-bound trains. For example, setting directions: '1' can be used to get all south-bound trains at Scheidplatz. - - **lines** (*Optional*): One or more line numbers, e.g. 'U2' or ['U2','U8','N41'] + - **lines** (*Optional*): One or more line numbers, e.g., 'U2' or ['U2','U8','N41'] - **products** (*Optional*): One or more modes of transport, defaults to all 4 modes ['U-Bahn', 'Tram', 'Bus', 'S-Bahn']. - **timeoffset** (*Optional*): Do not display departures leaving sooner than this number of minutes (defaults to 0). Useful if you are a couple of minutes away from the stop. + - **number** (*Optional*): Store a list of departures in the attribute "departures", defaults to 1. If you set this parameter to 3, the next three departures will be stored. - **name** (*Optional*): You can customize the name of the sensor, which defaults to the station name. + ## {% linkable_title Examples %} ### {% linkable_title Full configuration %} @@ -42,7 +45,7 @@ Configuration variables: The example below shows a full configuration with three sensors that showcase the various configuration options. ```yaml -# Example configuration.yml entry +# Example configuration.yaml entry sensor: - platform: mvglive nextdeparture: @@ -53,8 +56,12 @@ sensor: timeoffset: 2 - station: Sendlinger Tor lines: ['U2','U8'] + number: 5 - station: Scheidplatz products: ['U-Bahn'] directions: '1' ``` -The first sensor will return S-Bahn departures to Munich Airport or Markt Schwaben that are at least 2 minutes away. The second sensor returns U2 and U8 departures from Sendlinger Tor while the third sensor returns all south-bound U-Bahn trains from Scheidplatz. + +The first sensor will return S-Bahn departures to Munich Airport or Markt Schwaben that are at least 2 minutes away. +The second sensor returns U2 and U8 departures from Sendlinger Tor and stores a total of 5 departures in attributes. To retrieve the time until the second departure, you would use states.sensor.ENTITY_NAME.attributes.departures[1].time. +The third sensor returns all south-bound U-Bahn trains from Scheidplatz. diff --git a/source/_components/sensor.mychevy.markdown b/source/_components/sensor.mychevy.markdown new file mode 100644 index 00000000000..03b3146f5f9 --- /dev/null +++ b/source/_components/sensor.mychevy.markdown @@ -0,0 +1,16 @@ +--- +layout: page +title: "MyChevy Sensors" +description: "Instructions on how to integrate Chevy Bolt sensors car into Home Assistant." +date: 2017-08-28 17:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: chevy.png +ha_category: Sensor +ha_release: 0.62 +ha_iot_class: "Cloud Polling" +--- + +For configuration instructions, see [main component config](/components/mychevy/). diff --git a/source/_components/sensor.mysensors.markdown b/source/_components/sensor.mysensors.markdown index 06d90e74f87..a6e8657014a 100644 --- a/source/_components/sensor.mysensors.markdown +++ b/source/_components/sensor.mysensors.markdown @@ -1,7 +1,7 @@ --- layout: page title: "MySensors Sensor" -description: "Instructions how to integrate MySensors sensors into Home Assistant." +description: "Instructions on how to integrate MySensors sensors into Home Assistant." date: 2016-10-01 15:00 +0200 sidebar: true comments: false diff --git a/source/_components/sensor.nederlandse_spoorwegen.markdown b/source/_components/sensor.nederlandse_spoorwegen.markdown index b4745a3fb65..bbdee43f633 100644 --- a/source/_components/sensor.nederlandse_spoorwegen.markdown +++ b/source/_components/sensor.nederlandse_spoorwegen.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Nederlandse Spoorwegen" -description: "Instructions how to integrate timetable data for travelling by train in the Netherlands within Home Assistant." +description: "Instructions on how to integrate timetable data for traveling by train in the Netherlands within Home Assistant." date: 2017-10-25 13:35 sidebar: true comments: false @@ -24,26 +24,26 @@ Add the data to your `configuration.yaml` file as shown in the example: # Example configuration.yaml entry sensor: - platform: nederlandse_spoorwegen - email: you@example.com - password: !secret ns_password - routes: - - name: Rotterdam-Amsterdam - from: Rtd - to: Asd - - name: Groningen-Zwolle-Maastricht - from: Gn - to: Mt - via: Zl + email: you@example.com + password: !secret ns_password + routes: + - name: Rotterdam-Amsterdam + from: Rtd + to: Asd + - name: Groningen-Zwolle-Maastricht + from: Gn + to: Mt + via: Zl ``` Configuration variables: - **email** (*Required*): The email address you used to request the API password. - **password** (*Required*): The API password provided by the Nederlandse Spoorwegen. -- **routes** array (*Required*): List of travelling routes. +- **routes** array (*Required*): List of traveling routes. - **name** (*Required*): Name of the route. - **from** (*Required*): The start station. - - **to** (*Required*): Direction of the travelling. + - **to** (*Required*): Direction of the traveling. - **via** (*Optional*): Optional other station you wish to visit in between. The data are coming from [Nederlandse Spoorwegen](https://www.ns.nl/). diff --git a/source/_components/sensor.nest.markdown b/source/_components/sensor.nest.markdown index 37e5d83d5a5..dc48bd32ff0 100644 --- a/source/_components/sensor.nest.markdown +++ b/source/_components/sensor.nest.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Nest Sensor" -description: "Instructions how to integrate Nest sensors within Home Assistant." +description: "Instructions on how to integrate Nest sensors within Home Assistant." date: 2016-01-13 19:59 sidebar: true comments: false @@ -10,7 +10,7 @@ footer: true logo: nest.png ha_category: Sensor ha_release: pre 0.7 -ha_iot_class: "Cloud Polling" +ha_iot_class: "Cloud Push" --- @@ -20,6 +20,8 @@ The `nest` sensor platform lets you monitor sensors connected to your [Nest](htt You must have the [Nest component](/components/nest/) configured to use these sensors. The sensors will be setup if the `nest` component is configured and the required configuration for the `nest sensor` is set.

+## {% linkable_title Configuration %} + To enable sensors and customize which sensors are setup, you can extend the [Nest component](/components/nest/) configuration in your `configuration.yaml` file with the following settings: ```yaml # Example configuration.yaml entry @@ -38,6 +40,9 @@ Configuration variables: The following conditions are available by device: +- Nest Home: + - eta: Estimated time of arrival. + - security\_state: `ok` or `deter`. [Security State](#security-state). Only available when Nest Camera exists. - Nest Thermostat: - humidity - operation\_mode @@ -45,8 +50,30 @@ The following conditions are available by device: - target - hvac\_state: The currently active state of the HVAC system, `heating`, `cooling`, or `off`. - Nest Protect: - - co\_status - - smoke\_status - - battery\_health + - co\_status: `Ok`, `Warning`, or `Emergency` + - smoke\_status: `Ok`, `Warning`, or `Emergency` + - battery\_health: `Ok` or `Replace` + - color\_status: `gray`, `green`, `yellow`, or `red`. Indicates device status by color in the Nest app UI. It is an aggregate condition for battery+smoke+CO states, and reflects the actual color indicators displayed in the Nest app. - Nest Camera: none +## {% linkable_title Security State %} + +

+This feature is not designed to transfer your Home Assitant to a secruity system, neither Home Assistant nor Nest be liable to You for damages, +or consequential damages of any character arising as a result of use this feature. + +This feature does not depend on the [Nest Secure alarm system](https://nest.com/alarm-system/overview/) and is not a reflection of the status of that system, +nor does it react to state changes in that system. +

+ +

+This feautre use a new [Nest Secruity API](https://developers.nest.com/documentation/cloud/security-guide), +you may need to change your ["Product"](https://developers.nest.com/products) permission setting to include `Secruity State Read`. +After permission change, you may need to re-authorize your client. +

+ +If a Nest Cam detects the presence of a person (see `person_detected` in [binary_sensor.nest](/components/binary_sensor.nest/)) while the structure is in `away` mode (see `away` in [binary_sensor.nest](/components/binary_sensor.nest/)), the structure enters `deter` mode. + +A `deter` state is re-evaluated after several minutes and relaxed to `ok` if no further `person_detected` events have occurred. + +The `security_state` automatically switches to `ok` when the structure state is `home`. diff --git a/source/_components/sensor.nest_weather.markdown b/source/_components/sensor.nest_weather.markdown index f2d78230556..971e72cb162 100644 --- a/source/_components/sensor.nest_weather.markdown +++ b/source/_components/sensor.nest_weather.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Nest Weather Sensor" -description: "Instructions how to integrate Nest sensors within Home Assistant." +description: "Instructions on how to integrate Nest sensors within Home Assistant." date: 2016-01-13 19:59 sidebar: true comments: false diff --git a/source/_components/sensor.netatmo.markdown b/source/_components/sensor.netatmo.markdown index 14e71e985fe..856ccc0ec47 100644 --- a/source/_components/sensor.netatmo.markdown +++ b/source/_components/sensor.netatmo.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Netatmo Sensor" -description: "Instructions how to integrate Netatmo sensors into Home Assistant." +description: "Instructions on how to integrate Netatmo sensors into Home Assistant." date: 2016-06-23 11:10 sidebar: true comments: false diff --git a/source/_components/sensor.netdata.markdown b/source/_components/sensor.netdata.markdown index 70df53e9c53..6cf4c3e1d86 100644 --- a/source/_components/sensor.netdata.markdown +++ b/source/_components/sensor.netdata.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Netdata" -description: "Instructions how to integrate Netdata within Home Assistant." +description: "Instructions on how to integrate Netdata within Home Assistant." date: 2016-12-05 07:00 sidebar: true comments: false @@ -16,40 +16,85 @@ ha_iot_class: "Local Polling" The `netdata` sensor platform allows you to display information collected by [Netdata](http://my-netdata.io/). +## {% linkable_title Setup %} + +Getting the details to configure the sensors is a bit tricky as Netdata uses different name for the `element:` value that is required. To get the value for the `data_group:` use Netdata's web interface. `1.` marks the name for the `data_group:`. `2.` are the names for the element to show in Home Assistant. The name that is shown can be different than the name under which the metrics are available. + +

+ +

+ +To check if the `element:` name matches the name in the Netdata frontend, use `curl` with the IP address of your Netdata instance, its port and the `data_group`: + +```bash +$ curl -X GET "http://[Netdata_Instance]:19999/api/v1/data?chart=[data_group]&points=2&options=jsonwrap" +{ + "api": 1, + "id": "system.ipv4", + "name": "system.ipv4", +[...] + "dimension_names": ["received", "sent"], + "dimension_ids": ["InOctets", "OutOctets"], +[...] +``` + +- `dimension_names`: Names shown in the frontend. +- `dimension_ids`: Names to use for `element`. + + +## {% linkable_title Configuration %} + To add this platform to your installation, add the following to your `configuration.yaml` file: ```yaml # Example configuration.yaml entry sensor: - platform: netdata + resources: + system.load: + element: load15 + system.cpu: + element: system ``` -Configuration variables: +{% configuration %} +host: + description: The IP address or hostname of your Netdata instance. + required: false + type: string + default: localhost +port: + description: The port that the Netdata instance is running on. + required: false + type: int + default: 19999 +name: + description: Name of the monitored Netdata instance. + required: false + type: number + default: Netdata +resources: + description: List of details to monitor. + required: true + type: map + keys: + data_group: + description: "Name of the data group to monitor, e.g., `system.cpu`." + required: true + keys: + element: + description: The element of the group to monitor. + required: true + type: string + name: + description: Name to use for the sensor in the frontend. + required: false + type: string + default: element name + icon: + description: Icon to use for the sensor. + required: false + type: string + default: "mdi:desktop-classic" +{% endconfiguration %} -- **host** (*Optional*): The IP address or hostname of your Netdata instance. Defaults to `localhost`. -- **port** (*Optional*): The port that the Netdata instance is running on. Defaults to `19999`. -- **name** (*Optional*): Name of the sensor. Defaults to "Netdata". -- **resources** (*Optional*) array: List of details to monitor. Defaults is `memory_free`. - - 'memory_free': Free memory - - 'memory_used': Used memory - - 'memory_cached': Cached memory - - 'memory_buffers': Buffered memory - - 'swap_free': Free swap - - 'swap_used': Used swap - - 'processes_running': Processes Running - - 'processes_blocked': Processes Blocked - - 'system_load': System Load 15 min - - 'system_io_in': System I/O In - - 'system_io_out': System I/O Out - - 'ipv4_in': Amount of inbound IPv4 packets per second - - 'ipv4_out': Amount of outbound IPv4 packets per second - - 'disk_free': Free disk space - - 'cpu_iowait': CPU spent spent waiting for IO operations - - 'cpu_user': CPU time spent executing user tasks - - 'cpu_system': CPU time spent executing system tasks - - 'cpu_softirq': CPU time spent servicing soft interrupts - - 'cpu_guest': CPU time spent on guest tasks (such as VMs) - - 'uptime': Time (in seconds) since last boot - - 'packets_received': Amount of packets received - - 'packets_sent': Amount of packets sent - - 'connections': Total active connections diff --git a/source/_components/sensor.netgear_lte.markdown b/source/_components/sensor.netgear_lte.markdown new file mode 100644 index 00000000000..a8f82f8206a --- /dev/null +++ b/source/_components/sensor.netgear_lte.markdown @@ -0,0 +1,43 @@ +--- +layout: page +title: "Netgear LTE Sensor" +description: "Instructions on how to integrate Netgear LTE sensors into Home Assistant." +date: 2018-06-06 23:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: netgear.png +ha_release: 0.72 +ha_category: Sensor +ha_iot_class: "Local Polling" +--- + +The `netgear_lte` sensor platform allows you to monitor your Netgear LTE modem. + +This requires you to have set up the [Netgear LTE component](/components/netgear_lte/). + +```yaml +# Example configuration.yaml entry +sensor: + - platform: netgear_lte + sensors: + - sms + - usage +``` + +{% configuration %} +sensors: + description: Sensor types to create. + required: true + type: list + keys: + sms: + description: Number of unread SMS messages in the modem inbox. + usage: + description: Amount of data transferred. +host: + description: The modem to use. Not needed if you only have one. + required: false + type: string +{% endconfiguration %} diff --git a/source/_components/sensor.neurio_energy.markdown b/source/_components/sensor.neurio_energy.markdown index dd6cac4ca77..03f9c22b581 100644 --- a/source/_components/sensor.neurio_energy.markdown +++ b/source/_components/sensor.neurio_energy.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Neurio" -description: "Instructions how to integrate Neurio within Home Assistant." +description: "Instructions on how to integrate Neurio within Home Assistant." date: 2016-02-15 21:50 sidebar: true comments: false diff --git a/source/_components/sensor.nsw_fuel_station.markdown b/source/_components/sensor.nsw_fuel_station.markdown new file mode 100644 index 00000000000..5ebdb8fc51e --- /dev/null +++ b/source/_components/sensor.nsw_fuel_station.markdown @@ -0,0 +1,46 @@ +--- +layout: page +title: "NSW Fuel Station Price Sensor" +description: "Instructions on how to integrate NSW fuel station prices into Home Assistant." +date: 2018-06-02 18:00 +sidebar: true +comments: false +sharing: true +footer: true +ha_category: Fuel +ha_release: 0.72 +ha_iot_class: "Cloud Polling" +--- + +The `nsw_fuel_station` sensor platform uses the [NSW Fuel Check App](https://www.fuelcheck.nsw.gov.au/app) data as a source for current fuel price data. + +## {% linkable_title Setup %} + +To get the station ID for any NSW fuel station you will need to: + +- Visit the [Fuel Check App](https://www.fuelcheck.nsw.gov.au/app). +- Open the developer console of your browser (for Chrome, click View -> Developer -> Developer Tools). Click the "Network" tab in the developer console. +- In the Fuel Check App, search for your postcode or click "Fuel Near Me". +- In the developer console, you should see a request to `/FuelCheckApp/v1/fuel/prices/bylocation`. Open this request and preview the response. Find the station you wish to add, and copy down the `ServiceStationID` field. + +## {% linkable_title Configuration %} + +To add the NSW fuel station price sensor to your installation, add the following to your `configuration.yaml` file: + +```yaml +sensor: + - platform: nsw_fuel_station + station_id: 291 +``` + +{% configuration %} +station_id: + description: The ID of the station to track + required: true + type: string +fuel_types: + description: A list of fuel types to track for the station. Must be one of `["E10", "U91", "E85", "P95", "P98", "DL", "PDL", "B20", "LPG", "CNG", "EV"]`. Descriptions of fuel types can be found [here](https://www.fuelcheck.nsw.gov.au/App/Home/FuelTypes). + required: false + default: "`['E10', 'U91']`" + type: list +{% endconfiguration %} diff --git a/source/_components/sensor.nut.markdown b/source/_components/sensor.nut.markdown index 6f42f386884..744002c0f08 100644 --- a/source/_components/sensor.nut.markdown +++ b/source/_components/sensor.nut.markdown @@ -9,8 +9,8 @@ sharing: true footer: true logo: nut.png ha_category: System Monitor -ha_version: 0.34 ha_iot_class: "Local Polling" +ha_release: 0.34 --- The `nut` sensor platform allows you to monitor a UPS (battery backup) by using data from a [NUT](http://networkupstools.org/) (Network UPS Tools) server. @@ -28,56 +28,88 @@ sensor: - battery.runtime ``` -Configuration variables: +{% configuration %} + name: + description: Name prefix for defined sensors. + required: false + default: 'NUT UPS' + type: string + host: + description: The host name or IP address of the device that is running NUT. + required: false + default: localhost + type: string + port: + description: The port number. + required: false + default: 3493 + type: int + alias: + description: Name of the ups on the NUT server. + required: false + default: Will default to the first UPS name listed. + type: string + username: + description: Username to login to the NUT server. + required: false + default: none + type: string + password: + description: Password to login to the NUT server. + required: false + default: none + type: string + resources: + description: Contains all entries to display. + required: true + type: list +{% endconfiguration %} -- **name** (*Optional*): Name prefix for defined sensors. Defaults to 'NUT UPS'. -- **host** (*Optional*): The host name or address of the device that is running NUT. Defaults to localhost. -- **port** (*Optional*): The port number. Defaults to 3493. -- **alias** (*Optional*): Name of the ups on the NUT server. Will default to the first UPS name listed. -- **username** (*Optional*): Username to login to the NUT server. Default is none. -- **password** (*Optional*): Password to login to the NUT server. Default is none. -- **resources** array (*Required*): Contains all entries to display. +### {% linkable_title Example %} -### {% linkable_title Example %} - -Given the following example output from NUT (Your variables may differ): +Given the following example output from NUT (your variables may differ): ```yaml -'ups.timer.reboot': '0', -'battery.voltage': '27.0', -'ups.firmware.aux': 'L3 -P ', -'ups.mfr': 'American Power Conversion', -'battery.runtime.low': '120', -'ups.delay.shutdown': '20', -'ups.load': '19', -'ups.realpower.nominal': '600', -'battery.charge.warning': '50', -'battery.charge.low': '10', -'ups.vendorid': '051d', -'ups.timer.shutdown': '-1', -'ups.test.result': 'No test initiated', -'ups.firmware': '868.L3 -P.D', -'battery.mfr.date': '2015/05/08', -'ups.serial': '3B1519X19994 ', -'ups.productid': '0002', -'battery.runtime': '2552', -'battery.date': '2001/09/25', -'battery.voltage.nominal': '24.0', -'battery.type': 'PbAc', -'ups.mfr.date': '2015/05/08', -'ups.status': 'OL', -'ups.model': 'Back-UPS RS1000G', -'ups.beeper.status': 'disabled', -'battery.charge': '100', -'input.sensitivity': 'medium', -'input.transfer.low': '88' -'input.transfer.high': '147', -'input.voltage': '121.0', -'input.voltage.nominal': '120', -'input.transfer.reason': 'input voltage out of range', +$ upsc ups_name@192.168.11.5 +ups.timer.reboot: 0 +battery.voltage: 27.0 +ups.firmware.aux: L3 -P +ups.mfr: American Power Conversion +battery.runtime.low: 120 +ups.delay.shutdown: 20 +ups.load: 19 +ups.realpower.nominal: 600 +battery.charge.warning: 50 +battery.charge.low: 10 +ups.vendorid: 051d +ups.timer.shutdown: -1 +ups.test.result: No test initiated +ups.firmware: 868.L3 -P.D +battery.mfr.date: 2015/05/08 +ups.serial: 3B1519X19994 +ups.productid: 0002 +battery.runtime: 2552 +battery.date: 2001/09/25 +battery.voltage.nominal: 24.0 +battery.type: PbAc +ups.mfr.date: 2015/05/08 +ups.status: OL +ups.model: Back-UPS RS1000G +ups.beeper.status: disabled +battery.charge: 100 +input.sensitivity: medium +input.transfer.low: 88 +input.transfer.high: 147 +input.voltage: 121.0 +input.voltage.nominal: 120 +input.transfer.reason: input voltage out of range +output.current: 1.10 +output.frequency: 60.20 +output.voltage: 121.50 +output.voltage.nominal: 120 ``` -Use the values from the left hand column. Support is included for most values with 'ups', 'battery', and 'input' prefixes. +Use the values from the left hand column. Support is included for most values with 'ups', 'battery', 'input' and 'output' prefixes. ```yaml sensor: @@ -94,3 +126,14 @@ sensor: - input.voltage - battery.runtime ``` + +### {% linkable_title UPS Status - human-readable version %} + +An additional virtual sensor type `ups.status.display` is available translating the UPS status value retrieved from `ups.status` into a human-readable version. + +```yaml +sensor: + - platform: nut + resources: + - ups.status.display +``` diff --git a/source/_components/sensor.nzbget.markdown b/source/_components/sensor.nzbget.markdown index ad05e14fd0c..cb3b45fc5a5 100644 --- a/source/_components/sensor.nzbget.markdown +++ b/source/_components/sensor.nzbget.markdown @@ -1,7 +1,7 @@ --- layout: page title: "NZBGet" -description: "Instructions how to integrate NZBGet within Home Assistant." +description: "Instructions on how to integrate NZBGet within Home Assistant." date: 2016-04-08 19:59 sidebar: true comments: false diff --git a/source/_components/sensor.octoprint.markdown b/source/_components/sensor.octoprint.markdown index 129660a2f84..c9f3aed618a 100644 --- a/source/_components/sensor.octoprint.markdown +++ b/source/_components/sensor.octoprint.markdown @@ -1,7 +1,7 @@ --- layout: page title: "OctoPrint Sensor" -description: "Instructions how to integrate OctoPrint sensors within Home Assistant." +description: "Instructions on how to integrate OctoPrint sensors within Home Assistant." date: 2016-05-05 08:00 sidebar: true comments: false @@ -31,16 +31,19 @@ sensor: - Current State - Temperatures - Job Percentage + - Time Elapsed + - Time Remaining ``` Configuration variables: - **name** (*Optional*): The name of the sensor. Default is 'OctoPrint'. - **monitored_conditions** array (*Required*): States to monitor. - - **Current State**: Text of current state) + - **Current State**: Text of current state. - **Temperatures**: Temperatures of all available tools, eg. `print`, `head`, `print bed`, etc. These will be displayed as `tool0`, `tool1`, or `toolN` please refer to your OctoPrint frontend to associate the tool number with an actual device. - **Job Percentage**: Percentage of the job. - + - **Time Elapsed**: Time elapsed on current print job, in seconds. + - **Time Remaining**: Time remaining on current print job, in seconds.

If you are tracking temperature it is recommended to set `bed` and/or `number_of_tools` in your octoprint configuration. This will allow the octoprint sensors to load if the printer is offline during Home Assistant startup. diff --git a/source/_components/sensor.onewire.markdown b/source/_components/sensor.onewire.markdown index aaa616d8dab..d8d9076f8c1 100644 --- a/source/_components/sensor.onewire.markdown +++ b/source/_components/sensor.onewire.markdown @@ -1,7 +1,7 @@ --- layout: page title: "One wire Sensor" -description: "Instructions how to integrate One wire (1-wire) sensors into Home Assistant." +description: "Instructions on how to integrate One wire (1-wire) sensors into Home Assistant." date: 2017-09-15 10:10 sidebar: true comments: false @@ -25,10 +25,10 @@ Supported devices: - [DS2406/TAI-8570](https://datasheets.maximintegrated.com/en/ds/DS2406.pdf) Temperature and pressure sensor made by AAG - [DS2438/B1-R1-A](https://datasheets.maximintegrated.com/en/ds/DS2438.pdf) Temperature, pressure and humidity sensor by AAG -The 1-Wire bus can be connected directly to the IO pins of Raspberry Pi or using dedicated interface adapter (e.g [DS9490R](https://datasheets.maximintegrated.com/en/ds/DS9490-DS9490R.pdf)). +The 1-Wire bus can be connected directly to the IO pins of Raspberry Pi or using dedicated interface adapter (e.g [DS9490R](https://datasheets.maximintegrated.com/en/ds/DS9490-DS9490R.pdf)). #### Raspberry Pi setup -In order ot setup 1-Wire support on Raspberry Pi, you'll need to edit `/boot/config.txt` following [this documentation](https://www.waveshare.com/wiki/Raspberry_Pi_Tutorial_Series:_1-Wire_DS18B20_Sensor#Enable_1-Wire). Don't use the `mount_dir` option. +In order to setup 1-Wire support on Raspberry Pi, you'll need to edit `/boot/config.txt` following [this documentation](https://www.waveshare.com/wiki/Raspberry_Pi_Tutorial_Series:_1-Wire_DS18B20_Sensor#Enable_1-Wire). Don't use the `mount_dir` option. #### Interface adapter setup When an interface adapter is used, sensors can be accessed on Linux hosts via [owfs 1-Wire file system](http://owfs.org/). When using an interface adapter and the owfs, the `mount_dir` option must be configured to correspond a directory, where owfs device tree has been mounted. @@ -37,12 +37,12 @@ When an interface adapter is used, sensors can be accessed on Linux hosts via [o This component has been modified to work with devices with multiple sensors which will cause a discontinuity in recorded values. Existing devices will receive a new ID and therefore show up as new devices. If you wish to maintain continuity it can be resolved in the database by renaming the old devices to the new names. -Connect to your database using the instructions from [home-assistant.io/docs/backend/database/](https://home-assistant.io/docs/backend/database/). Check the names of sensors: +Connect to your database using the instructions from [home-assistant.io/docs/backend/database/](/docs/backend/database/). Check the names of sensors: ```sql SELECT entity_id, COUNT(*) as count FROM states GROUP BY entity_id ORDER BY count DESC LIMIT 10; ``` -Alter the names of sensors using the following examples: +Alter the names of sensors using the following examples: ```sql UPDATE states SET entity_id='sensor._temperature' WHERE entity_id LIKE 'sensor.%' AND attributes LIKE '%\u00b0C%'; diff --git a/source/_components/sensor.openevse.markdown b/source/_components/sensor.openevse.markdown index a117ef20f46..e9df04e8da0 100644 --- a/source/_components/sensor.openevse.markdown +++ b/source/_components/sensor.openevse.markdown @@ -1,7 +1,7 @@ --- layout: page title: "OpenEVSE Sensor" -description: "Instructions how to integrate a WiFi-equipped OpenEVSE Charging station with Home Assistant" +description: "Instructions on how to integrate a WiFi-equipped OpenEVSE Charging station with Home Assistant" date: 2017-02-02 22:09 sidebar: true comments: false @@ -16,10 +16,12 @@ ha_iot_class: "Local Polling" This `openevse` sensor platform pulls data from an [OpenEVSE](https://www.openevse.com/) Charging station equipped with an ESP8266-based wifi connection. +## {% linkable_title Configuration %} + To enable this sensor in your installation, add the following to your `configuration.yaml` file: ```yaml -# Example configuration.yml entry +# Example configuration.yaml entry sensor: - platform: openevse host: IP_ADDRESS diff --git a/source/_components/sensor.openhardwaremonitor.markdown b/source/_components/sensor.openhardwaremonitor.markdown index 680a5f20d62..6479aa9c9d8 100644 --- a/source/_components/sensor.openhardwaremonitor.markdown +++ b/source/_components/sensor.openhardwaremonitor.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Open Hardware Monitor Sensor" -description: "Instructions how to integrate Open Hardware Monitor within Home Assistant." +description: "Instructions on how to integrate Open Hardware Monitor within Home Assistant." date: 2017-06-16 00:00:00 sidebar: true comments: false diff --git a/source/_components/sensor.opensky.markdown b/source/_components/sensor.opensky.markdown index baa285ce247..552de4c420a 100644 --- a/source/_components/sensor.opensky.markdown +++ b/source/_components/sensor.opensky.markdown @@ -42,3 +42,19 @@ Both events have two attributes: - **sensor**: Name of `opensky` sensor that fired the event - **callsign**: Callsign of the flight + +To receive notifications of the entering flights, add the following lines to your `configuration.yaml`. + +{% raw %} +```yaml +automation: + - alias: 'Flight entry notification' + trigger: + platform: event + event_type: opensky_entry + action: + service: notify.ios_YOURIPHONENAME + data_template: + message : 'Flight entry of {{ trigger.event.data.callsign }} ' +``` +{% endraw %} diff --git a/source/_components/sensor.openweathermap.markdown b/source/_components/sensor.openweathermap.markdown index 9dc0e763c1c..48d141ddfef 100644 --- a/source/_components/sensor.openweathermap.markdown +++ b/source/_components/sensor.openweathermap.markdown @@ -1,7 +1,7 @@ --- layout: page title: "OpenWeatherMap Sensor" -description: "Instructions how to integrate OpenWeatherMap within Home Assistant." +description: "Instructions on how to integrate OpenWeatherMap within Home Assistant." date: 2015-04-25 9:06 sidebar: true comments: false @@ -14,7 +14,7 @@ ha_iot_class: "Cloud Polling" --- -The `openweathermap` platform uses [OpenWeatherMap](http://openweathermap.org/) as an source for current meteorological data for your location. The `forecast` will show you the condition in 3 h. +The `openweathermap` platform uses [OpenWeatherMap](http://openweathermap.org/) as a source for current meteorological data for your location. The `forecast` will show you the condition in 3 h. You need an API key which is free but requires a [registration](http://home.openweathermap.org/users/sign_up). @@ -30,7 +30,7 @@ sensor: ``` {% configuration %} - apk_key: + api_key: description: Your API key for OpenWeatherMap. required: true type: string diff --git a/source/_components/sensor.otp.markdown b/source/_components/sensor.otp.markdown index 2381fa180d7..849f2167184 100644 --- a/source/_components/sensor.otp.markdown +++ b/source/_components/sensor.otp.markdown @@ -1,7 +1,7 @@ --- layout: page title: "OTP Sensor" -description: "Instructions how to add One-Time Password (OTP) sensors into Home Assistant." +description: "Instructions on how to add One-Time Password (OTP) sensors into Home Assistant." date: 2017-07-04 07:00:00 sidebar: true comments: false @@ -27,7 +27,7 @@ sensor: Configuration variables: - **name** (*Optional*): Name of the sensor to use in the frontend. Defaults to `OTP Sensor`. -- **token** (*Required*): The shared secret you use in your OTP generator (e.g. Google Authenticator on your phone) +- **token** (*Required*): The shared secret you use in your OTP generator (e.g., Google Authenticator on your phone) ## Generating a token @@ -48,5 +48,5 @@ Token: IHEDPEBEVA2WVHB7 Copy and paste the token into your Home Assistant configuration and add it to your OTP generator. Verify that they generate the same code.

-It is vital that your system clock is correct both on your Home Assistant server and on your OTP generator device (e.g. your phone). If not, the generated codes will not match! Make sure NTP is running and syncing your time correctly before creating an issue. +It is vital that your system clock is correct both on your Home Assistant server and on your OTP generator device (e.g., your phone). If not, the generated codes will not match! Make sure NTP is running and syncing your time correctly before creating an issue.

diff --git a/source/_components/sensor.pi_hole.markdown b/source/_components/sensor.pi_hole.markdown index 809cee76ca1..78b4e0fb553 100644 --- a/source/_components/sensor.pi_hole.markdown +++ b/source/_components/sensor.pi_hole.markdown @@ -1,7 +1,7 @@ --- layout: page -title: "Pi-Hole Sensor" -description: "Instructions how to integrate REST sensors into Home Assistant." +title: "Pi-hole Sensor" +description: "Instructions on how to integrate Pi-hole sensors into Home Assistant." date: 2016-09-03 16:30 sidebar: true comments: false @@ -14,7 +14,9 @@ ha_release: 0.28 --- -The `pi_hole` sensor platform is displaying the statistical summary of a [Pi-Hole](https://pi-hole.net/) system. +The `pi_hole` sensor platform is displaying the statistical summary of a [Pi-hole](https://pi-hole.net/) system. + +## {% linkable_title Configuration %} To enable this sensor, add the following lines to your `configuration.yaml` file for a GET request: @@ -24,18 +26,52 @@ sensor: - platform: pi_hole ``` -Configuration variables: +{% configuration %} +host: + description: IP address of the host where Pi-hole is running. + required: false + type: string + default: localhost +location: + description: The installation location of the Pi-hole API. + required: false + type: string + default: admin +ssl: + description: "If `true`, use SSL/TLS to connect to the Pi-Hole system." + required: false + type: boolean + default: false +verify_ssl: + description: Verify the certification of the system. + required: false + type: boolean + default: true +monitored_conditions: + description: Defines the stats to monitor as sensors. + required: false + type: string + default: ads_blocked_today + keys: + ads_blocked_today: + description: Total number of blocked ads today. + ads_percentage_today: + description: Percentage of blocked ads. + dns_queries_today: + description: Total number of DNS queries handled by Pi-hole today. + domains_being_blocked: + description: Total number of domains blocked by Pi-hole. + queries_cached: + description: Total number of cache queries on the last 24 hours. + queries_forwarded: + description: Total number of forwarded queries on the last 24 hours. + unique_clients: + description: Total number of unique clients on the last 24 hours. + unique_domains: + description: Total number of unique domains on the last 24 hours. + clients_ever_seen: + description: Total number of seen clients. +{% endconfiguration %} + +This sensor platform was not made by Pi-hole LLC or the Pi-hole community. They didn't provide support, feedback, testing or helped in any way while it was created. This is third party, may not work if Pi-hole is breaking their API with the latest release, not official, not developed, not supported and not endorsed Pi-hole LLC or the Pi-hole community. The trademark `Pi-hole` and the logo is used here to describe the platform and only to describe. `Pi-hole` is a registered trademark of Pi-hole LLC. -- **host** (*Optional*): The IP address of the Pi-Hole system. Defaults to `localhost`. -- **location** (*Optional*): The installation location of the Pi-Hole API. Defaults to `admin`. -- **ssl** (*Optional*): If `true`, use SSL/TLS to connect to the Pi-Hole system. Defaults to `False`. -- **verify_ssl** (*Optional*): Verify the certification of the system. Default to `True`. -- **monitored_conditions** (*Optional*): Defines the stats to monitor as sensors. - - **ads_blocked_today**: Total number of blocked ads today. - - **ads_percentage_today**: Percentage of blocked ads. - - **dns_queries_today**: Total number of DNS queries handled by Pi-Hole today. - - **domains_being_blocked**: Total number of domains blocked by Pi-Hole. - - **queries_cached**: Total number of cache queries on the last 24 hours. - - **queries_forwarded**: Total number of forwarded queries on the last 24 hours. - - **unique_clients**: Total number of unique clients on the last 24 hours. - - **unique_domains**: Total number of unique domains on the last 24 hours. diff --git a/source/_components/sensor.pilight.markdown b/source/_components/sensor.pilight.markdown index 276586c98c4..2a33cc2a1dd 100644 --- a/source/_components/sensor.pilight.markdown +++ b/source/_components/sensor.pilight.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Pilight Sensor" -description: "Instructions how to integrate pilight sensors within Home Assistant." +description: "Instructions on how to integrate pilight sensors within Home Assistant." date: 2016-10-08 23:21 sidebar: true comments: false @@ -14,12 +14,14 @@ ha_iot_class: depends --- -This `pilight` sensor platform for 433 MHz devices uses a value in the message payload as the sensor value. Unique identifiers (e.g. _uuid_) can be set to distinguish between multiple pilight devices. To use a pilight sensor the pilight Home Assistant hub has to be set up. +This `pilight` sensor platform for 433 MHz devices uses a value in the message payload as the sensor value. Unique identifiers (e.g., _uuid_) can be set to distinguish between multiple pilight devices. To use a pilight sensor the pilight Home Assistant hub has to be set up. + +## {% linkable_title Configuration %} To use your sensor via pilight, make sure it is [supported](https://wiki.pilight.org/doku.php/protocols) and add the following to your `configuration.yaml` file: ```yaml -# Example configuration.yml entry +# Example configuration.yaml entry sensor: - platform: pilight variable: temperature diff --git a/source/_components/sensor.plex.markdown b/source/_components/sensor.plex.markdown index f3dcd7affae..34781716237 100644 --- a/source/_components/sensor.plex.markdown +++ b/source/_components/sensor.plex.markdown @@ -36,3 +36,4 @@ Configuration variables: - **password** (*Optional*): The password for your given account on the remote Plex server. - **server** (*Optional*): The name of your remote Plex server. - **token** (*Optional*): X-Plex-Token of your remote Plex server. +- **ssl** (*Optional*): Use HTTPS to connect to Plex server, *NOTE* host *must not* be an IP when this option is enabled. Defaults to "False" diff --git a/source/_components/sensor.pollen.markdown b/source/_components/sensor.pollen.markdown new file mode 100644 index 00000000000..8c613882242 --- /dev/null +++ b/source/_components/sensor.pollen.markdown @@ -0,0 +1,86 @@ +--- +layout: page +title: "Pollen.com" +description: "Instructions on how to use Pollen.com data within Home Assistant" +date: 2018-01-10 19:20:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: pollen.jpg +ha_category: Health +ha_release: 0.63 +ha_iot_class: "Cloud Polling" +--- + +The `pollen` sensor platform collects and displays allergy and disease +information (based on a U.S. ZIP code) from [Pollen.com](https://www.pollen.com/). Data measured includes: + +* Indicies for allergies and cold/flu measurements +* Trends +* Current outlook +* more! + +## {% linkable_title Configuring the Platform %} + +To integrate `pollen` into Home Assistant, add the following section to your +`configuration.yaml` file (adjusting the `monitored_conditions` list to your +liking): + +```yaml +sensor: + platform: pollen + zip_code: "00544" + monitored_conditions: + - allergy_average_forecasted + - allergy_average_historical + - allergy_index_today + - allergy_index_tomorrow + - allergy_index_yesterday + - disease_average_forecasted +``` + +{% configuration %} + zip_code: + description: the U.S. ZIP code to gather data for (as a quoted string) + required: true + type: string + monitored_conditions: + description: the metric types to monitor; valid values are specified below + required: true + type: list +{% endconfiguration %} + +

+It is important to ensure the ZIP code is quoted if it starts with a 0. Unquoted +ZIP codes that start with 0 will cause errors. +

+ +## {% linkable_title Available Metrics %} + +The following metrics can be monitored: + +* Allergy Index: Forecasted Average (`allergy_average_forecasted`): the average +forecasted allergy index over the next 5 days +* Allergy Index: Historical Average (`allergy_average_historical`): the average +historical allergy index over the past 30 days +* Allergy Index: Today (`allergy_index_today`): the allergy index for today +* Allergy Index: Tomorrow (`allergy_index_tomorrow`): the allergy index for +tomorrow +* Allergy Index: Yesterday (`allergy_index_yesterday`): the allergy index for +yesterday +* Cold & Flu: Forecasted Average (`disease_average_forecasted`): the average +forecasted cold/flu index over the next 5 days + +## {% linkable_title Understanding the Indices %} + +Any index-related sensor will have a value between 0.0 and 12.0. The values +map to the following human-friendly ratings: + +Range | Rating +--------- | ----------- +0.0 - 2.4 | Low +2.5 - 4.8 | Low/Medium +4.9 - 7.2 | Medium +7.3 - 9.6 | Medium/High +9.7 - 12.0 | High diff --git a/source/_components/sensor.postnl.markdown b/source/_components/sensor.postnl.markdown new file mode 100644 index 00000000000..3fa41230239 --- /dev/null +++ b/source/_components/sensor.postnl.markdown @@ -0,0 +1,49 @@ +--- +layout: page +title: PostNL Sensor +description: "Instructions on how to set up PostNL sensors within Home Assistant." +date: 2017-04-22 08:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: postnl.png +ha_category: Sensor +ha_release: 0.69 +ha_iot_class: "Cloud Polling" +--- + +The `postnl` platform allows one to track deliveries by [PostNL](https://www.postnl.nl) (Dutch Postal Services). To use this sensor, you need a [PostNL Account](https://jouw.postnl.nl). It is possible to add multiple accounts to your Home Assistant configuration. + +The sensor value shows the number of packages to be delivered. Each of the packages is available as an attribute. + +## {% linkable_title Configuration %} + +To enable this sensor, add the following lines to your `configuration.yaml`: + +```yaml +sensor: + - platform: postnl + username: POSTNL_USERNAME + password: POSTNL_PASSWORD +``` + +{% configuration %} +name: + description: Sensor name + required: false + default: "postnl" + type: string +username: + description: Account username of jouw.postnl.nl + required: true + type: string +password: + description: Account password of jouw.postnl.nl + required: true + type: string +{% endconfiguration %} + +

+This component is not affiliated with PostNL and retrieves data from the endpoints of the mobile application. Use at your own risk. +

diff --git a/source/_components/sensor.pushbullet.markdown b/source/_components/sensor.pushbullet.markdown index df04990f68a..bd8ee0eda5a 100644 --- a/source/_components/sensor.pushbullet.markdown +++ b/source/_components/sensor.pushbullet.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Pushbullet Mirrors" -description: "Instructions how to read user pushes in Home Assistant" +description: "Instructions on how to read user pushes in Home Assistant" date: 2017-04-20 16:44 sidebar: true comments: false diff --git a/source/_components/sensor.pvoutput.markdown b/source/_components/sensor.pvoutput.markdown index fe2d9b8e09e..a61f6614590 100644 --- a/source/_components/sensor.pvoutput.markdown +++ b/source/_components/sensor.pvoutput.markdown @@ -1,7 +1,7 @@ --- layout: page title: "PVOutput Sensor" -description: "Instructions how to use PVOutput within Home Assistant." +description: "Instructions on how to use PVOutput within Home Assistant." date: 2016-11-06 10:00 sidebar: true comments: false @@ -14,7 +14,7 @@ ha_iot_class: "Cloud Polling" --- -The `pvoutput` sensor platform consumes informations from [PVOutput](http://pvoutput.org/) which were uploaded by your solar photovoltaic (PV) system. +The `pvoutput` sensor platform consumes information from [PVOutput](http://pvoutput.org/) which were uploaded by your solar photovoltaic (PV) system. To add PVOutput details to your installation, add the following to your `configuration.yaml` file: diff --git a/source/_components/sensor.pyload.markdown b/source/_components/sensor.pyload.markdown index c4d7611edb4..4bfd7edf02f 100644 --- a/source/_components/sensor.pyload.markdown +++ b/source/_components/sensor.pyload.markdown @@ -1,7 +1,7 @@ --- layout: page title: "pyLoad Sensor" -description: "Instructions how to integrate pyLoad download sensor within Home Assistant." +description: "Instructions on how to integrate pyLoad download sensor within Home Assistant." date: 2017-10-23 09:00 sidebar: true comments: false @@ -13,7 +13,6 @@ ha_release: 0.58 ha_iot_class: "Local Polling" --- - The `pyload` platform allows you to monitor your downloads with [pyLoad](https://pyload.net/) from within Home Assistant and setup automation based on the information. To enable this sensor, add the following lines to your `configuration.yaml`: @@ -55,10 +54,8 @@ ssl: default: false {% endconfiguration %} - If everything is setup correctly, the download speed will show up in the frontend.

- diff --git a/source/_components/sensor.qnap.markdown b/source/_components/sensor.qnap.markdown index 38dd16ca985..3814f37bd00 100644 --- a/source/_components/sensor.qnap.markdown +++ b/source/_components/sensor.qnap.markdown @@ -1,7 +1,7 @@ --- layout: page title: "QNAP Sensor" -description: "Instructions how to integrate the QNAP sensor within Home Assistant." +description: "Instructions on how to integrate the QNAP sensor within Home Assistant." date: 2017-02-02 06:39 sidebar: true comments: false @@ -16,10 +16,12 @@ ha_iot_class: "Local Polling" This `qnap` sensor allows getting various statistics from your [QNAP NAS](https://www.qnap.com/en-us/). +## {% linkable_title Configuration %} + To use the `qnap` sensor in your installation, add the following to your `configuration.yaml` file: ```yaml -# Example configuration.yml entry +# Example configuration.yaml entry sensor: - platform: qnap host: IP_ADDRESS_OF_QNAP_NAS diff --git a/source/_components/sensor.qwikswitch.markdown b/source/_components/sensor.qwikswitch.markdown new file mode 100644 index 00000000000..afc4fc6cb4c --- /dev/null +++ b/source/_components/sensor.qwikswitch.markdown @@ -0,0 +1,18 @@ +--- +layout: page +title: "QwikSwitch Sensor" +description: "Instructions on how to integrate Qwikswitch dimmers and relays as sensors into Home Assistant." +date: 2016-05-04 00:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: qwikswitch.png +ha_category: Sensor +ha_iot_class: "Local Push" +ha_release: "0.67" +--- + +The `qwikswitch` sensor platform allows you to use your [QwikSwitch](http://www.qwikswitch.co.za/) sensors in Home Assistant. + +The platform is configured through the [QwikSwitch component](/components/qwikswitch/). diff --git a/source/_components/sensor.radarr.markdown b/source/_components/sensor.radarr.markdown index 78ca33d041d..94a46655485 100644 --- a/source/_components/sensor.radarr.markdown +++ b/source/_components/sensor.radarr.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Radarr Sensor" -description: "Instructions how to integrate Radarr sensors with Home Assistant" +description: "Instructions on how to integrate Radarr sensors with Home Assistant" date: 2017-05-04 00:00 sidebar: true comments: false @@ -15,10 +15,12 @@ ha_release: 0.47 This `radarr` sensor platform pulls data from a given [Radarr](https://radarr.video/) instance. +## {% linkable_title Configuration %} + To use your Radarr sensor in your installation, add the following to your `configuration.yaml` file: ```yaml -# Example configuration.yml entry +# Example configuration.yaml entry sensor: - platform: radarr api_key: YOUR_API_KEY diff --git a/source/_components/sensor.rainbird.markdown b/source/_components/sensor.rainbird.markdown new file mode 100644 index 00000000000..750c2874979 --- /dev/null +++ b/source/_components/sensor.rainbird.markdown @@ -0,0 +1,32 @@ +--- +layout: page +title: "Rain Bird Sensor" +description: "Instructions on how to integrate your Rain Bird LNK WiFi Module rain sensor within Home Assistant." +date: 2017-08-25 12:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: rainbird.png +ha_category: Hub +ha_release: 0.61 +ha_iot_class: "Local Polling" +--- + +This `rainbird` sensor allows interacting with [LNK WiFi](http://www.rainbird.com/landscape/products/controllers/LNK-WiFi.htm) module of the Rain Bird Irrigation system in Home Assistant. + +Once you have enabled the [Rain Bird component](/components/rainbird), add the following to your `configuration.yaml` file to enable the rain sensor: + +```yaml +# Example configuration.yaml entry +sensor: + - platform: rainbird + monitored_conditions: + - rainsensor +``` + +Configuration variables: + +- **monitored_conditions**: Currently only rainsensor is supported. Returns the sensor level. + +Please note that due to the implementation of the API within the LNK Module, there is a concurrency issue. For example, the Rain Bird app will give connection issues (like already a connection active). diff --git a/source/_components/sensor.rainmachine.markdown b/source/_components/sensor.rainmachine.markdown new file mode 100644 index 00000000000..7df129ab2b6 --- /dev/null +++ b/source/_components/sensor.rainmachine.markdown @@ -0,0 +1,23 @@ +--- +layout: page +title: "RainMachine Sensor" +description: "Instructions on how to use RainMachine sensors with Home Assistant." +date: 2018-05-06 21:26 +sidebar: true +comments: false +sharing: true +footer: true +logo: rainmachine.png +ha_category: Sensor +ha_iot_class: "Cloud Polling" +ha_release: 0.71 +--- + +The `rainmachine` sensor platform allows you to view crucial sensor data within +a [RainMachine smart Wi-Fi sprinkler controller](http://www.rainmachine.com/). + +

+You must have the [RainMachine component](https://www.home-assistant.io/components/rainmachine/) +configured to use this platform. After configuring that component, sensors +automatically appear. +

diff --git a/source/_components/sensor.random.markdown b/source/_components/sensor.random.markdown index d550d4b88d0..cbe6049cf30 100644 --- a/source/_components/sensor.random.markdown +++ b/source/_components/sensor.random.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Random Sensor" -description: "Instructions how to integrate random number sensors into Home Assistant." +description: "Instructions on how to integrate random number sensors into Home Assistant." date: 2016-10-30 12:10 sidebar: true comments: false @@ -14,7 +14,9 @@ ha_release: 0.32 --- -The `random` sensor platform is creating random sensor values (integers) out of a given range. This can be useful if you want to test automation rules. It generates a new value every time it is polled. +The `random` sensor platform is creating random sensor values (integers) out of a given range. Returned values form a [discrete uniform distribution](https://en.wikipedia.org/wiki/Discrete_uniform_distribution), meaning that each integer value in the range configured is equally likely to be drawn. This can be useful if you want to test automation rules. It generates a new value every time it is polled. + +## {% linkable_title Configuration %} To enable the random sensor, add the following lines to your `configuration.yaml`: @@ -48,4 +50,4 @@ unit_of_measurement: See the [entity component options][entity-docs] to control how often the main component polls the random sensor. The default is 30 seconds. -[entity-docs]: https://home-assistant.io/docs/configuration/platform_options/ +[entity-docs]: /docs/configuration/platform_options/ diff --git a/source/_components/sensor.rest.markdown b/source/_components/sensor.rest.markdown index 9f3da04c7ca..d9594344e8b 100644 --- a/source/_components/sensor.rest.markdown +++ b/source/_components/sensor.rest.markdown @@ -1,7 +1,7 @@ --- layout: page title: "RESTful Sensor" -description: "Instructions how to integrate REST sensors into Home Assistant." +description: "Instructions on how to integrate REST sensors into Home Assistant." date: 2015-09-14 19:10 sidebar: true comments: false @@ -36,19 +36,65 @@ sensor: payload: '{ "device" : "heater" }' ``` -Configuration variables: - -- **resource** (*Required*): The resource or endpoint that contains the value. -- **method** (*Optional*): The method of the request. Default is `GET`. -- **value_template** (*Optional*): Defines a [template](/docs/configuration/templating/#processing-incoming-data) to extract the value. -- **payload** (*Optional*): The payload to send with a POST request. Depends on the service, but usually formed as JSON. -- **name** (*Optional*): Name of the REST sensor. -- **unit_of_measurement** (*Optional*): Defines the unit of measurement of the sensor, if any. -- **verify_ssl** (*Optional*): Verify the certification of the endpoint. Default to `True`. -- **authentication** (*Optional*): Type of the HTTP authentication. `basic` or `digest`. -- **username** (*Optional*): The username for accessing the REST endpoint. -- **password** (*Optional*): The password for accessing the REST endpoint. -- **headers** (*Optional*): The headers for the requests. +{% configuration %} +resource: + description: The resource or endpoint that contains the value. + required: true + type: string + default: string +method: + description: The method of the request. + required: false + type: string + default: GET +name: + description: Name of the REST sensor. + required: false + type: string + default: REST Sensor +value_template: + description: "Defines a [template](/docs/configuration/templating/#processing-incoming-data) to extract the value." + required: false + type: template +payload: + description: The payload to send with a POST request. Depends on the service, but usually formed as JSON. + required: false + type: string +verify_ssl: + description: Verify the certification of the endpoint. + required: false + type: boolean + default: True +unit_of_measurement: + description: Defines the units of measurement of the sensor, if any. + required: false + type: string +authentication: + description: Type of the HTTP authentication. `basic` or `digest`. + required: false + type: string +username: + description: The username for accessing the REST endpoint. + required: false + type: string +password: + description: The password for accessing the REST endpoint. + required: false + type: string +headers: + description: The headers for the requests. + required: false + type: list, string +json_attributes: + description: A list of keys to extract values from a JSON dictionary result and then set as sensor attributes. + reqired: false + type: list, string +force_update: + description: Sends update events even if the value hasn't changed. Useful if you want to have meaningful value graphs in history. + reqired: false + type: boolean + default: False +{% endconfiguration %}

Make sure that the URL exactly matches your endpoint or resource. @@ -67,9 +113,7 @@ In this section you find some real life examples of how to use this sensor. ### {% linkable_title External IP address %} -You can find your external IP address using the service [JSON Test](http://www.jsontest.com) at their http://ip.jsontest.com/ endpoint. - -To display the IP address, the entry for a sensor in the `configuration.yaml` file will look like this. +You can find your external IP address using the service [JSON Test](http://www.jsontest.com) at their [http://ip.jsontest.com/](http://ip.jsontest.com/) URL. ```yaml sensor: @@ -83,8 +127,6 @@ sensor: The [glances](/components/sensor.glances/) sensor is doing the exact same thing for all exposed values. -Add something similar to the entry below to your `configuration.yaml` file: - ```yaml sensor: - platform: rest @@ -109,7 +151,7 @@ sensor: unit_of_measurement: "°C" ``` -### {% linkable_title Accessing a HTTP authentication protected endpoint %} +### {% linkable_title Accessing an HTTP authentication protected endpoint %} The REST sensor supports HTTP authentication and customized headers. @@ -154,3 +196,63 @@ sensor: User-Agent: Home Assistant REST sensor ``` +### {% linkable_title Fetch multiple JSON values and present them as attributes %} + +[JSON Test](http://www.jsontest.com) returns the current time, date and milliseconds since epoch from [http://date.jsontest.com/](http://date.jsontest.com/). + +{% raw %} +```yaml +sensor: + - platform: rest + name: JSON time + json_attributes: + - date + - milliseconds_since_epoch + resource: http://date.jsontest.com/ + value_template: '{{ value_json.time }}' + - platform: template + sensors: + date: + friendly_name: 'Date' + value_template: '{{ states.sensor.json_time.attributes["date"] }}' + milliseconds: + friendly_name: 'milliseconds' + value_template: '{{ states.sensor.json_time.attributes["milliseconds_since_epoch"] }}' +``` +{% endraw %} + +This sample fetches a weather report from [OpenWeatherMap](http://openweathermap.org/), maps the resulting data into attributes of the RESTful sensor and then creates a set of [template](/components/sensor.template/) sensors that monitor the attributes and present the values in a usable form. + +{% raw %} +```yaml +sensor: + - platform: rest + name: OWM_report + json_attributes: + - main + - weather + value_template: '{{ value_json["weather"][0]["description"].title() }}' + resource: http://api.openweathermap.org/data/2.5/weather?zip=80302,us&APPID=VERYSECRETAPIKEY + - platform: template + sensors: + owm_weather: + value_template: '{{ states.sensor.owm_report.attributes.weather[0]["description"].title() }}' + entity_picture_template: '{{ "http://openweathermap.org/img/w/"+states.sensor.owm_report.attributes.weather[0]["icon"].lower()+".png" }}' + entity_id: sensor.owm_report + owm_temp: + friendly_name: 'Outside temp' + value_template: '{{ states.sensor.owm_report.attributes.main["temp"]-273.15 }}' + unit_of_measurement: "°C" + entity_id: sensor.owm_report + owm_pressure: + friendly_name: 'Outside pressure' + value_template: '{{ states.sensor.owm_report.attributes.main["pressure"] }}' + unit_of_measurement: "hP" + entity_id: sensor.owm_report + owm_humidity: + friendly_name: 'Outside humidity' + value_template: '{{ states.sensor.owm_report.attributes.main["humidity"] }}' + unit_of_measurement: "%" + entity_id: sensor.owm_report +``` +{% endraw %} diff --git a/source/_components/sensor.rflink.markdown b/source/_components/sensor.rflink.markdown index 38b529af807..7efee12d68c 100644 --- a/source/_components/sensor.rflink.markdown +++ b/source/_components/sensor.rflink.markdown @@ -1,7 +1,7 @@ --- layout: page title: "RFLink Sensor" -description: "Instructions how to integrate RFLink sensors into Home Assistant." +description: "Instructions on how to integrate RFLink sensors into Home Assistant." date: 2016-01-04 sidebar: true comments: false diff --git a/source/_components/sensor.rfxtrx.markdown b/source/_components/sensor.rfxtrx.markdown index 6d9089e6127..3378d7b03f9 100644 --- a/source/_components/sensor.rfxtrx.markdown +++ b/source/_components/sensor.rfxtrx.markdown @@ -1,7 +1,7 @@ --- layout: page title: "RFXtrx Sensor" -description: "Instructions how to integrate RFXtrx sensors into Home Assistant." +description: "Instructions on how to integrate RFXtrx sensors into Home Assistant." date: 2015-08-06 17:15 sidebar: true comments: false @@ -55,7 +55,9 @@ sensor: - Humidity - Temperature ``` + Only these data_type are valid : + - *Temperature* - *Humidity* - *Barometer* @@ -66,6 +68,7 @@ Only these data_type are valid : - *Sound* - *Sensor Status* - *Counter value* +- *UV* Example configuration: @@ -92,4 +95,7 @@ Configuration variables: - **data_type** (*Optional*): Which data type the sensor should show - **fire_event** (*Optional*): Fires an event even if the state is the same as before. Can be used for automations. - +

+If a device ID consists of only numbers, please make sure to surround it with quotes. +This is a known limitation in YAML, because the device ID will be interpreted as a number otherwise. +

diff --git a/source/_components/sensor.ripple.markdown b/source/_components/sensor.ripple.markdown index ad960c30e53..2eda5415059 100644 --- a/source/_components/sensor.ripple.markdown +++ b/source/_components/sensor.ripple.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Ripple" -description: "Instructions how to integrate ripple.com data within Home Assistant." +description: "Instructions on how to integrate ripple.com data within Home Assistant." date: 2017-06-06 16:20 sidebar: true comments: false diff --git a/source/_components/sensor.sabnzbd.markdown b/source/_components/sensor.sabnzbd.markdown index 47680c4e1af..627379399ec 100644 --- a/source/_components/sensor.sabnzbd.markdown +++ b/source/_components/sensor.sabnzbd.markdown @@ -1,7 +1,7 @@ --- layout: page -title: "SABnzbd" -description: "Instructions how to integrate SABnzbd within Home Assistant." +title: "SABnzbd Sensor" +description: "Instructions on how to integrate SABnzbd with Home Assistant." date: 2015-03-23 19:59 sidebar: true comments: false @@ -14,61 +14,6 @@ ha_iot_class: "Local Polling" --- -The `sabnzbd` platform will allow you to monitor your downloads with [SABnzbd](http://sabnzbd.org) from within Home Assistant and setup automation based on the information. +The `sabnzbd` sensor platform will allow you to monitor your downloads with [SABnzbd](http://sabnzbd.org) from within Home Assistant. -If SABnzbd is discovered on your network you can enter your API Key in the Configurator Press "CONFIGURE" to do it. - -

- -

- -This will enable a minimal setup where `sensor.sabnzbd_status` is enabled. - - -For more advanced usage, add the following to your `configuration.yaml` file: - -```yaml -# Example configuration.yaml entry -sensor: - platform: sabnzbd - host: YOUR_SABNZBD_HOST - api_key: YOUR_API_KEY - monitored_variables: - - 'current_status' - - 'speed' - - 'queue_size' - - 'queue_remaining' - - 'disk_size' - - 'disk_free' - - 'queue_count' -``` - -Configuration variables: - -- **host** (*Required*): The host where your SABnzbd instance is running, eg. 192.168.1.32 -- **port** (*Optional*): The port to use with SABnzbd instance. Defaults to `8080`. -- **api_key** (*Required*): Name that will be used in the frontend for the pin. -- **name** (*Optional*): The name to use when displaying this SABnzbd instance. -- **ssl** (*Optional*): Use `https` instead of `http` to connect. Defaults to False. -- **monitored_variables** array (*Required*): List of the monitored variables. - - **current_status**: Current status of the SABnzbd instance - - **speed**: Current speed. - - **queue_size**: Size of the queue - - **queue_remaining**: Remaining elements in the queue - - **disk_size**: Disk size of the storage location - - **disk_free**: Free disk space at the storage location - - **queue_count**: Number of items in the queue - -Note that this will create the following sensors: - -``` - - sensor.sabnzbd_status - - sensor.sabnzbd_speed - - sensor.sabnzbd_queue - - sensor.sabnzbd_left - - sensor.sabnzbd_disk - - sensor.sabnzbd_disk_free - - sensor.sabnzdb_queue_count -``` - -As always, you can determine the names of sensors by looking at the dev-state page `< >` in the web interface. +To add SABnzbd sensors, please follow the instructions for the [SABnzbd component](/components/sabnzbd). diff --git a/source/_components/sensor.scrape.markdown b/source/_components/sensor.scrape.markdown index 2ab59be72c6..047dd0e9562 100644 --- a/source/_components/sensor.scrape.markdown +++ b/source/_components/sensor.scrape.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Scrape Sensor" -description: "Instructions how to integrate Web scrape sensors into Home Assistant." +description: "Instructions on how to integrate Web scrape sensors into Home Assistant." date: 2016-10-12 09:10 sidebar: true comments: false @@ -22,7 +22,7 @@ To enable this sensor, add the following lines to your `configuration.yaml` file # Example configuration.yaml entry sensor: - platform: scrape - resource: https://home-assistant.io + resource: https://www.home-assistant.io select: ".current-version h1" ``` @@ -43,31 +43,35 @@ In this section you find some real life examples of how to use this sensor. Ther ### {% linkable_title Home Assistant %} -The current release Home Assistant is published on [https://home-assistant.io/](https://home-assistant.io/) +The current release Home Assistant is published on [https://www.home-assistant.io/](/) +{% raw %} ```yaml sensor: # Example configuration.yaml entry - platform: scrape - resource: https://home-assistant.io + resource: https://www.home-assistant.io name: Release select: ".current-version h1" - value_template: '{% raw %}{{ value.split(":")[1] }}{% endraw %}' + value_template: '{{ value.split(":")[1] }}' ``` +{% endraw %} ### {% linkable_title Available implementations %} Get the counter for all our implementations from the [Component overview](/components/) page. +{% raw %} ```yaml # Example configuration.yaml entry sensor: - platform: scrape - resource: https://home-assistant.io/components/ + resource: https://www.home-assistant.io/components/ name: Home Assistant impl. select: 'a[href="#all"]' - value_template: '{% raw %}{{ value.split("(")[1].split(")")[0] }}{% endraw %}' + value_template: '{{ value.split("(")[1].split(")")[0] }}' ``` +{% endraw %} ### {% linkable_title Get a value out of a tag %} @@ -98,7 +102,7 @@ sensor: ### {% linkable_title Get the latest podcast episode file URL %} -If you want to get the file URL for the latest episode of your [favourite podcast](https://hasspodcast.io/), so you can pass it on to a compatible media player. +If you want to get the file URL for the latest episode of your [favorite podcast](https://hasspodcast.io/), so you can pass it on to a compatible media player. ```yaml # Example configuration.yaml entry @@ -109,3 +113,20 @@ sensor: select: 'enclosure:nth-of-type(1)' attribute: url ``` + +### {% linkable_title Energy price %} + +This example tries to retrieve the price for electricity. + +{% raw %} +```yaml +# Example configuration.yaml entry +sensor: + - platform: scrape + resource: https://elen.nu/timpriser-pa-el-for-elomrade-se3-stockholm/ + name: Electricity price + select: ".elspot-content" + value_template: '{{ ((value.split(" ")[0]) | replace (",", ".")) }}' + unit_of_measurement: "öre/kWh" +``` +{% endraw %} diff --git a/source/_components/sensor.season.markdown b/source/_components/sensor.season.markdown index 6297420cd15..875636fb7ce 100644 --- a/source/_components/sensor.season.markdown +++ b/source/_components/sensor.season.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Season Sensor" -description: "Instructions how to add season sensors into Home Assistant." +description: "Instructions on how to add season sensors into Home Assistant." date: 2017-07-04 07:00:00 sidebar: true comments: false diff --git a/source/_components/sensor.sense.markdown b/source/_components/sensor.sense.markdown new file mode 100644 index 00000000000..e13e45dd937 --- /dev/null +++ b/source/_components/sensor.sense.markdown @@ -0,0 +1,74 @@ +--- +layout: page +title: Sense +description: "Instructions on how to integrate Sense within Home Assistant." +date: 2018-01-11 13:50 +sidebar: true +comments: false +sharing: true +footer: true +logo: sense.png +ha_category: Energy +ha_iot_class: "Cloud Polling" +ha_release: 0.65 +--- + + +Integrate your [Sense](https://sense.com) meter information into Home Assistant. +To enable this sensor in your installation, add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +sensor: + platform: sense + email: CLIENT_ID + password: CLIENT_SECRET + monitored_conditions: + - active_usage + - active_production + - daily_usage + - daily_production +``` + +Two types of sensors can be monitored and will be created with the following names: +- **Active Usage/Production**: Current active power usage/production in Watts. Updated every 30 seconds. +- **Daily Usage/Production**: Daily power usage/production in kWh. Updated every 5 minutes. +- ... + +Weekly, Monthly and Yearly variants are also available. + +{% configuration %} +email: + description: The email associated with your Sense account/application. + required: true + type: string +password: + description: The password for your Sense account/application. + required: true + type: string +monitored_conditions: + description: List of sensors to display in the front end. + required: true + type: list + keys: + active_usage: + description: The current power usage in W + active_production: + description: The current solar production in W + daily_usage: + description: Total power used for current day in kWh + daily_production: + description: Total power produced for current day in kWh + weekly_usage: + description: Total power used for current week in kWh + weekly_production: + description: Total power produced for current week in kWh + monthly_usage: + description: Total power used for current month in kWh + monthly_production: + description: Total power produced for current month in kWh + yearly_usage: + description: Total power used for current year in kWh + yearly_production: + description: Total power produced for current year in kWh +{% endconfiguration %} diff --git a/source/_components/sensor.sensehat.markdown b/source/_components/sensor.sensehat.markdown index ae270f052fb..640ea7b1a52 100644 --- a/source/_components/sensor.sensehat.markdown +++ b/source/_components/sensor.sensehat.markdown @@ -1,8 +1,8 @@ --- layout: page title: "Sense HAT" -description: "Instructions how to integrate Sense HAT within Home Assistant." -date: 2017-06-03 04:00 +description: "Instructions on how to integrate Sense HAT within Home Assistant." +date: 2018-06-03 11:30 sidebar: true comments: false sharing: true @@ -35,7 +35,7 @@ Configuration variables: - 'humidity' - 'pressure' is_hat_attached (Optional): True|False boolean; Default value is True declaring that the SenseHAT _is_ physically on the Raspberry Pi - + #### Customizing the Sense HAT data @@ -109,7 +109,7 @@ Here are the steps to make the _SenseHAT_ sensor work _successfully_ with the vi #### Install SenseHAT package to _homeassistant_venv_ ```bash # switch to the homeassistant_venv environment -sudo su -s /bin/bash homeassistant +sudo -u homeassistant -H -s source /srv/homeassistant/homeassistant_venv/bin/activate # install the sense-hat lib @@ -145,10 +145,10 @@ These issues have been discussed in the repository issue (#5093)[https://github. This fix has been tested with a clean install of: -* [Raspbian Jessie - version January 2017](https://downloads.raspberrypi.org/raspbian/images/raspbian-2017-01-10/) - +* [Raspbian Jessie - version January 2017](https://downloads.raspberrypi.org/raspbian/images/raspbian-2017-01-10/) + and - -* [Home-Assistant 0.37.1](https://home-assistant.io/getting-started/installation-raspberry-pi-all-in-one/) + +* [Home-Assistant 0.37.1](/getting-started/installation-raspberry-pi-all-in-one/) For setting up the Sense HAT's RGB LED matrix as lights within Home Assistant, please see the [Sense HAT light component](/components/light.sensehat/). diff --git a/source/_components/sensor.serial.markdown b/source/_components/sensor.serial.markdown index ea1ad91a0b7..356ced350f5 100644 --- a/source/_components/sensor.serial.markdown +++ b/source/_components/sensor.serial.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Serial Sensor" -description: "Instructions how to integrate data from serial connected sensors into Home Assistant." +description: "Instructions on how to integrate data from serial connected sensors into Home Assistant." date: 2017-10-13 07:00 sidebar: true comments: false diff --git a/source/_components/sensor.shodan.markdown b/source/_components/sensor.shodan.markdown index e4ca7947a21..6a98ad30422 100644 --- a/source/_components/sensor.shodan.markdown +++ b/source/_components/sensor.shodan.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Shodan Sensor" -description: "Instructions how to integrate Shodan sensors into Home Assistant." +description: "Instructions on how to integrate Shodan sensors into Home Assistant." date: 2017-08-09 10:30 sidebar: true comments: false diff --git a/source/_components/sensor.sht31.markdown b/source/_components/sensor.sht31.markdown new file mode 100644 index 00000000000..7adbfc2ceea --- /dev/null +++ b/source/_components/sensor.sht31.markdown @@ -0,0 +1,54 @@ +--- +layout: page +title: "Sensirion SHT31 Sensor" +description: "Instructions on how to integrate SHT31 sensors within Home Assistant." +date: 2018-03-06 19:15 +sidebar: true +comments: false +sharing: true +footer: true +ha_category: DIY +ha_release: 0.68 +logo: sensirion.png +ha_iot_class: "Local Polling" +--- + +The `sht31` sensor platform allows you to get the current temperature and humidity from a Sensirion SHT31 device. + +## {% linkable_title Configuration %} + +To use your SHT31 sensor in your installation, add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +sensor: + platform: sht31 + name: Bedroom + i2c_address: 0x44 + monitored_conditions: + - temperature + - humidity +``` + +{% configuration %} + name: + description: The name of the sensor. Temperature and Humidity will be added to the name for the sensor name. + required: false + default: SHT31 + type: string + i2c_address: + description: I2C address of the sensor. + required: false + default: "`0x44`" + type: int + monitored_conditions: + description: Conditions to monitor. + required: false + default: All conditions + type: list + keys: + temperature: + description: The current temperature of the SHT31. + humidity: + description: The current humidity of the SHT31. +{% endconfiguration %} diff --git a/source/_components/sensor.sigfox.markdown b/source/_components/sensor.sigfox.markdown new file mode 100644 index 00000000000..f3f0bbb0ea5 --- /dev/null +++ b/source/_components/sensor.sigfox.markdown @@ -0,0 +1,47 @@ +--- +layout: page +title: "Sigfox Sensor" +description: "Display messages from Sigfox devices in Home Assistant." +date: 2018-04-07 12:10 +sidebar: true +comments: false +sharing: true +footer: true +logo: sigfox.png +ha_category: Sensor +ha_iot_class: "Local Polling" +ha_release: 0.68 +--- + +[SigFox](https://www.sigfox.com/en) component adding a sensor for each Sigfox device registered with your account. The default name of sensors is `sigfox_{DEVICE_ID}` where `DEVICE_ID` is the devices Sigfox ID. The state of an added Sigfox sensor is the payload of the last message published by that device. Additionally, there are attributes for the latitude and longitude coordinates of the device, as well as the signal-to-noise ratio ( [snr](https://en.wikipedia.org/wiki/Signal-to-noise_ratio)). + +```yaml +# Example configuration.yaml entry +sensor: + - platform: sigfox + api_login: your_api_login + api_password: your_api_password +``` + +{% configuration %} +api_login: + description: Your Sigfox API login. + required: true + type: string +api_password: + description: Your Sigfox API password. + required: true + type: string +name: + description: The name to prepend to the device ID. + required: false + default: "sigfox" + type: string +{% endconfiguration %} + +Note that `your_api_login` and `your_api_password` are your **API access credentials** which can be accessed by following: + +1. Log into [Sigfox backend](https://backend.sigfox.com) +1. Select `GROUP` +1. Select `API ACCESS` +1. Click on `new` and create new access entry diff --git a/source/_components/sensor.simulated.markdown b/source/_components/sensor.simulated.markdown new file mode 100644 index 00000000000..07b97c8fce1 --- /dev/null +++ b/source/_components/sensor.simulated.markdown @@ -0,0 +1,105 @@ +--- +layout: page +title: "Simulated sensor" +description: "Component for simulating a numerical sensor." +date: 2018-02-20 08:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: home-assistant.png +ha_category: Sensor +ha_iot_class: "Local Polling" +ha_release: 0.65 +--- + +The `simulated` sensor platform provides a simulated sensor that generates a time-varying signal ```V(t)``` given by the [function](https://en.wikipedia.org/wiki/Sine_wave): + + ``` + V(t) = M + A sin((2 pi (t - t_0) / w) + P) + N(s) + ``` + +where: + +- **M** = the [mean](https://en.wikipedia.org/wiki/Mean) value of the sensor +- **A** = the [amplitude](https://en.wikipedia.org/wiki/Amplitude) of the periodic contribution +- **t** = the time when a value is generated +- **t_0** = the time when the sensor is started +- **w** = the time [period](https://en.wikipedia.org/wiki/Periodic_function) in seconds for a single complete cycle of the periodic contribution +- **P** = the [phase](https://en.wikipedia.org/wiki/Phase_(waves)) offset to add to the periodic contribution, in units of degrees +- **N(s)** = the random [Gaussian noise](https://en.wikipedia.org/wiki/Gaussian_noise) with spread **s** + +The output will be limited to 3 decimals. + +## {% linkable_title Configuration %} + +To add a simulated sensor to your installation, add the following to your `configuration.yaml` file: + +```yaml +sensor: + - platform: simulated +``` + +{% configuration %} +name: + description: The name of the sensor. + required: false + default: simulated + type: string +unit: + description: The unit to apply. + required: false + default: value + type: string +amplitude: + description: The amplitude of periodic contribution. + required: false + default: 1 + type: float +mean: + description: The mean level of the sensor. + required: false + default: 0 + type: float +period: + description: The time in seconds for one complete oscillation of the periodic contribution. + required: false + default: 0 + type: seconds +phase: + description: The phase offset (in degrees) to apply to the periodic component. + required: false + default: 0 + type: float +seed: + description: The [seed](https://docs.python.org/3.6/library/random.html#random.seed) value for the random noise component. + required: false + default: 999 + type: int +spread: + description: The spread is the range of the randomly distributed values about their mean. This is sometimes referred to as the Full Width at Half Maximum ([FWHM](https://en.wikipedia.org/wiki/Full_width_at_half_maximum)) of the random distribution. + required: false + default: None + type: float +relative_to_epoch: + description: Whether to simulate from epoch time (00:00:00, 1970-01-01), or relative to when the sensor was started. + required: false + default: true + type: boolean +{% endconfiguration %} + +## {% linkable_title Example %} + +To give an example of simulating real world data, a simulated relative humidity sensor (in %) can be added using the following configuration: + +```yaml +sensor: + - platform: simulated + name: 'simulated relative humidity' + unit: '%' + amplitude: 0 # Turns off the periodic contribution + mean: 50 + spread: 10 + seed: 999 + relative_to_epoch: false +``` diff --git a/source/_components/sensor.skybeacon.markdown b/source/_components/sensor.skybeacon.markdown index d4e95bb97ff..01d34fe65ba 100644 --- a/source/_components/sensor.skybeacon.markdown +++ b/source/_components/sensor.skybeacon.markdown @@ -14,6 +14,8 @@ ha_iot_class: "Local Polling" The `skybeacon` sensor platform supports [CR2477](http://cnsky9.en.alibaba.com)-powered [iBeacon](https://en.wikipedia.org/wiki/IBeacon)/eddystone sensors that come with temperature/sensor module. +## {% linkable_title Configuration %} + To use your Skybeacon sensor in your installation, add the following to your `configuration.yaml` file: ```yaml @@ -26,8 +28,24 @@ sensor: - humidity ``` -- **mac** (*Required*): The MAC address of your sensor. You can find this be running `hcitool lescan` from command line. -- **monitored_conditions** array (*Required*): The parameters that should be monitored. - - **temperature**: Temperature at the sensor's location. - - **humidity**: Humidity at the sensor's location. +{% configuration %} +mac: + description: "The MAC address of your sensor. You can find this be running `hcitool lescan` from command line." + required: true + type: string +name: + description: The name of the Skybeacon sensor. + required: false + type: string + default: Skybeacon +monitored_conditions: + description: The parameters that should be monitored. + required: false + type: map + keys: + temperature: + description: Temperature at the sensor's location. + humidity: + description: Humidity at the sensor's location. +{% endconfiguration %} diff --git a/source/_components/sensor.sma.markdown b/source/_components/sensor.sma.markdown index b2c9bfdcd19..f3eb1665646 100644 --- a/source/_components/sensor.sma.markdown +++ b/source/_components/sensor.sma.markdown @@ -16,14 +16,16 @@ ha_release: 0.36 The `sma` sensor will poll a [SMA](http://www.sma-solar.com/) [(US)](http://www.sma-america.com/) solar inverter and present the values as sensors (or attributes of sensors) in Home Assistant. +## {% linkable_title Configuration %} + To enable this sensor, add the following lines to your `configuration.yaml` file: ```yaml # Example configuration.yaml entry sensor sma: - platform: sma - host: 192.168.88.199 - password: !secret sma_password + host: IP_ADDRESS_OF_DEVICE + password: YOUR_SMA_PASSWORD sensors: current_consumption: [total_consumption] current_power: diff --git a/source/_components/sensor.smappee.markdown b/source/_components/sensor.smappee.markdown new file mode 100644 index 00000000000..2886f2b4340 --- /dev/null +++ b/source/_components/sensor.smappee.markdown @@ -0,0 +1,19 @@ +--- +layout: page +title: "Smappee Sensor" +description: "Instructions on how to integrate Smappee energy monitor into Home Assistant." +date: 2018-02-26 08:37 +sidebar: true +comments: false +sharing: true +footer: true +logo: smappee.png +ha_release: "0.64" +ha_category: Sensor +--- + +[Smappee](https://www.smappee.com/) controller for energy monitoring and Comport plug switches. + +Energy monitor measurements will be automatically added when you connect to the Smappee controller. + +For more configuration information see the [Smappee component](/components/smappee/) documentation. diff --git a/source/_components/sensor.snmp.markdown b/source/_components/sensor.snmp.markdown index 95429545db1..f492d5ef3a7 100644 --- a/source/_components/sensor.snmp.markdown +++ b/source/_components/sensor.snmp.markdown @@ -1,7 +1,7 @@ --- layout: page title: "SNMP" -description: "Instructions how to integrate SNMP sensors within Home Assistant." +description: "Instructions on how to integrate SNMP sensors within Home Assistant." date: 2016-06-05 20:00 sidebar: true comments: false diff --git a/source/_components/sensor.sochain.markdown b/source/_components/sensor.sochain.markdown new file mode 100644 index 00000000000..26ff8d5fd1b --- /dev/null +++ b/source/_components/sensor.sochain.markdown @@ -0,0 +1,50 @@ +--- +layout: page +title: "SoChain" +description: "Instructions on how to integrate chain.so data within Home Assistant." +date: 2017-06-01 16:20 +sidebar: true +comments: false +sharing: true +footer: true +logo: sochain.png +ha_category: Finance +ha_release: 0.61 +ha_iot_class: "Cloud Polling" +--- + + +The `SoChain` sensor platform displays supported cryptocurrency wallet balances from [SoChain](https://chain.so). + +To add the SoChain sensor to your installation, specify a network and address to watch in the `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +sensor: + - platform: sochain + network: LTC + address: 'M9m37h3dVkLDS13wYK7vcs7ck6MMMX6yhK' +``` + +{% configuration %} +network: + description: The network or blockchain of the cryptocurrency to watch. + required: true + type: string +address: + description: Cryptocurrency wallet address to watch. + required: true + type: string +name: + description: The name of the sensor used in the frontend. (recommended) + required: false + type: string + default: Crypto Balance +{% endconfiguration %} + +Supported networks (which can also be found [here](https://chain.so/api#networks-supported)) are: + +* BTC +* LTC +* DOGE +* DASH diff --git a/source/_components/sensor.socialblade.markdown b/source/_components/sensor.socialblade.markdown new file mode 100644 index 00000000000..cf106c9133e --- /dev/null +++ b/source/_components/sensor.socialblade.markdown @@ -0,0 +1,37 @@ +--- +layout: page +title: Social Blade Sensor +description: "Instructions on how to set up Social Blade Sensor within Home Assistant." +date: 2018-04-23 08:00 +sidebar: false +comments: false +sharing: true +footer: true +logo: socialblade.png +ha_category: Sensor +ha_release: 0.69 +ha_iot_class: "Cloud Polling" +--- + +The `socialblade` sensor component allows you get updates on a youtube channel using your social blade channel id. The sensor gets the subscribers and total views count from [Social Blade Website]( https://socialblade.com/) + +to get the channel id you can go to [Social Blade Website]( https://socialblade.com/) and search for youtube channel by username, then select the channel and grab the id from the url. +The channel id will be the last part of the url : +https://socialblade.com/youtube/channel/{channel_id} + +## Example for `configuration.yaml` : + +```yaml +sensor: + - platform: socialblade + channel_id: YOUR_CHANNEL_NUMBER +``` + +{% configuration %} +channel_id: + description: channel id number optained from the URL when you access Social Blade web client. + required: true + type: string +{% endconfiguration %} + +All the data will be fetch from [Social Blade]( https://socialblade.com/). diff --git a/source/_components/sensor.sonarr.markdown b/source/_components/sensor.sonarr.markdown index 5f4d437c02b..13a4944feaa 100644 --- a/source/_components/sensor.sonarr.markdown +++ b/source/_components/sensor.sonarr.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Sonarr Sensor" -description: "Instructions how to integrate Sonarr sensors with Home Assistant" +description: "Instructions on how to integrate Sonarr sensors with Home Assistant" date: 2016-11-19 13:35 sidebar: true comments: false @@ -16,10 +16,12 @@ ha_iot_class: "Local Polling" This `sonarr` sensor platform pulls data from a given [Sonarr](https://sonarr.tv/) instance. +## {% linkable_title Configuration %} + To use your Sonarr sensor in your installation, add the following to your `configuration.yaml` file: ```yaml -# Example configuration.yml entry +# Example configuration.yaml entry sensor: - platform: sonarr api_key: YOUR_API_KEY diff --git a/source/_components/sensor.speedtest.markdown b/source/_components/sensor.speedtest.markdown index bc1e8bf9884..fb95a0cdff2 100644 --- a/source/_components/sensor.speedtest.markdown +++ b/source/_components/sensor.speedtest.markdown @@ -16,7 +16,9 @@ ha_iot_class: "Cloud Polling" The `speedtest` sensor component uses the [Speedtest.net](https://speedtest.net/) web service to measure network bandwidth performance. -By default, it will run every hour. The user can change the update frequency in the configuration by defining the minute, hour, and day for a speedtest to run. For the `server_id` check the list of [available servers](https://www.speedtest.net/speedtest-servers.php). +## {% linkable_title Configuration %} + +By default, it will run every hour. The user can change the update frequency in the configuration by defining the minute, hour, and day for a speed test to run. For the `server_id` check the list of [available servers](https://www.speedtest.net/speedtest-servers.php). To add a Speedtest.net sensor to your installation, add the following to your `configuration.yaml` file: @@ -32,26 +34,54 @@ sensor: - upload ``` -Configuration variables: - -- **monitored_conditions** array (*Required*): Sensors to display in the frontend. - - **ping**: Reaction time in ms of your connection (how fast you get a response after you've sent out a request). - - **download**: Download speed in Mbps. - - **upload**: Upload speed in Mbps. -- **server_id** (*Optional*): Specify the speedtest server to perform test against. -- **minute** (*Optional*): Specify the minute(s) of the hour to schedule the speedtest. Use a list for multiple entries. Default is 0. -- **hour** (*Optional*): Specify the hour(s) of the day to schedule the speedtest. Use a list for multiple entries. Default is None. -- **day** (*Optional*): Specify the day(s) of the month to schedule the speedtest. Use a list for multiple entries. Default is None. -- **manual** (*Optional*): True or False to turn manual mode on or off. Manual mode will disable scheduled speedtests. +{% configuration %} + monitored_conditions: + description: Sensors to display in the frontend. + required: true + type: list + keys: + ping: + description: Reaction time in ms of your connection (how fast you get a response after you've sent out a request). + download: + description: Download speed (Mbit/s) + upload: + description: Upload speed (Mbit/s) + server_id: + description: Specify the speed test server to perform the test against. + required: false + type: int + day: + description: Specify the day(s) of the month to schedule the speed test. Use a list for multiple entries. + required: false + type: [int, list] + hour: + description: Specify the hour(s) of the day to schedule the speed test. Use a list for multiple entries. + required: false + type: [int, list] + minute: + description: Specify the minute(s) of the hour to schedule the speed test. Use a list for multiple entries. + required: false + type: [int, list] + default: 0 + second: + description: Specify the second(s) of the minute to schedule the speed test. Use a list for multiple entries. + required: false + type: [int, list] + default: 0 + manual: + description: True or False to turn manual mode on or off. Manual mode will disable scheduled speed tests. + required: false + type: bool + default: false +{% endconfiguration %} This component uses [speedtest-cli](https://github.com/sivel/speedtest-cli) to gather network performance data from Speedtest.net. Please be aware of the potential [inconsistencies](https://github.com/sivel/speedtest-cli#inconsistency) that this component may display. -When Home Assistant first starts up, the values of the speedtest will show as `Unknown`. You can use the service `sensor.update_speedtest` to run a manual speedtest and populate the data or just wait for the next regularly scheduled test. You can turn on manual mode to disable the scheduled speedtests. - +When Home Assistant first starts up, the values of the speed test will show as `Unknown`. You can use the service `sensor.update_speedtest` to run a manual speed test and populate the data or just wait for the next regularly scheduled test. You can turn on manual mode to disable the scheduled speed tests. ## {% linkable_title Examples %} -In this section you find some real life examples of how to use this sensor. +In this section, you find some real-life examples of how to use this sensor. ### {% linkable_title Run periodically %} @@ -92,26 +122,30 @@ sensor: ### {% linkable_title Using as a trigger in an automation %} +{% raw %} ```yaml # Example configuration.yaml entry automation: - - alias: 'Internet Speed Glow Connect Great' - trigger: - platform: template - value_template: '{% raw %}{{ states.sensor.speedtest_download.state|float > 10}}{% endraw %}' - action: - service: shell_command.green - - alias: 'Internet Speed Glow Connect Poor' - trigger: - platform: template - value_template: '{% raw %}{{ states.sensor.speedtest_download.state| float < 10 }}{% endraw %}' - action: - service: shell_command.red + - alias: "Internet Speed Glow Connect Great" + trigger: + - platform: template + value_template: "{{ states('sensor.speedtest_download')|float > 10 }}" + action: + - service: shell_command.green + + - alias: "Internet Speed Glow Connect Poor" + trigger: + - platform: template + value_template: "{{ states('sensor.speedtest_download')|float < 10 }}" + action: + - service: shell_command.red ``` +{% endraw %} ## {% linkable_title Notes %} - When running on Raspberry Pi, just note that the maximum speed is limited by its 100 Mbit/s LAN adapter. -- Entries under `monitored_conditions` only control what entities are available under home-assistant, it does not disable the condition from running. -- If ran frequently, this component has the capability of using a very large amount of data. Frequent updates should be avoided on bandwidth capped connections. -- While running, network usage is fully utilized. This may have a negative affect on other devices in use the network such as gaming consoles or streaming boxes. +- Running this platform can have negative effects on the system's performance as it requires a fair amount of memory. +- Entries under `monitored_conditions` only control what entities are available in Home Assistant, it does not disable the condition from running. +- If ran frequently, this component has the ability to use a considerable amount of data. Frequent updates should be avoided on bandwidth-capped connections. +- While running, your network capacity is fully utilized. This may have a negative effect on other devices in use the network such as gaming consoles or streaming boxes. diff --git a/source/_components/sensor.spotcrime.markdown b/source/_components/sensor.spotcrime.markdown new file mode 100644 index 00000000000..b36d01b4b46 --- /dev/null +++ b/source/_components/sensor.spotcrime.markdown @@ -0,0 +1,76 @@ +--- +layout: page +title: "Spot Crime" +description: "Instructions on how to integrate spotcrime.com into Home Assistant." +date: 2018-02-16 9:30 +sidebar: true +comments: false +sharing: true +footer: true +ha_category: Sensor +ha_release: 0.65 +ha_iot_class: "Cloud Polling" +--- + +The `spotcrime` sensor allows one to track reported incidents occurring in a given area. Incidents include anything reported to [Spot Crime](http://spotcrime.com). Your regional emergency services may or may not report data. The sensor defaults to counting incidents within one day, but can be customized via configuration.yaml. + +You will need to request an API key from [Spotcrime](mailto:pyrrhus@spotcrime.com). + +To enable this sensor, add the following lines to your `configuration.yaml`. Your `radius` should be of sufficient size to capture incidents in your area. 0.01 = 1 mile. + +```yaml +sensor: + - platform: spotcrime + name: + radius: + api_key: <"your_api_key_here"> +``` + +{% configuration %} +name: + description: Name the sensor what you'd like. + required: true + type: string +radius: + description: Radius you'd like to search within. 0.01 = 1 mile. + required: true + type: float +api_key: + description: The API key to access the service. + required: true + type: string +days: + description: Number of days you'd like see to crime statistics for. + required: false + type: int +include: + description: Event types you want statistics for. + required: false + type: list +exclude: + description: Event types to ignore statistics for. + required: false + type: list +{% endconfiguration %} + +## {% linkable_title Notes %} + +### {% linkable_title Incident Types %} + +You can explicitly include or exclude incident types. Specifying `include`s restricts the incidents to those types. Specifying `exclude`s will return all incident types except those specified. + +These incident types are available: + +- Arrest +- Arson +- Assault +- Burglary +- Robbery +- Shooting +- Theft +- Vandalism +- Other + +### {% linkable_title Events %} + +The `crimealerts` sensor fires a `crimealerts_incident` event when a new incident is detected, including the type, time, and location of the incident. diff --git a/source/_components/sensor.sql.markdown b/source/_components/sensor.sql.markdown new file mode 100644 index 00000000000..e676ca9d43f --- /dev/null +++ b/source/_components/sensor.sql.markdown @@ -0,0 +1,101 @@ +--- +layout: page +title: "SQL Sensor" +description: "Instructions how to integrate SQL sensors into Home Assistant." +date: 2018-02-03 00:22 +sidebar: true +comments: false +sharing: true +footer: true +logo: sql.png +ha_category: Sensor +ha_release: 0.63 +--- + +The `SQL` sensor platform enables you to use values from an [SQL](https://en.wikipedia.org/wiki/SQL) database supported by the [sqlalchemy](https://www.sqlalchemy.org) library, to populate a sensor state (and attributes). +This can be used to present statistics about Home Assistant sensors if used with the recorder component database. It can also be used with an external data source. + +To configure this sensor, you need to define the sensor connection variables and a list of queries to your `configuration.yaml` file. A sensor will be created for each query: + +To enable it, add the following lines to your `configuration.yaml`: + +{% raw %} +```yaml +# Example configuration.yaml entry to monitor hass database size in MySQL +sensor: + - platform: sql + db_url: mysql://user:password@localhost/hass + queries: + - name: HASS DB size + query: 'SELECT table_schema "database", Round(Sum(data_length + index_length) / 1024, 1) "value" FROM information_schema.tables WHERE table_schema="hass" GROUP BY table_schema;' + column: 'value' + unit_of_measurement: kB +``` +{% endraw %} + +{% configuration %} +db_url: + description: The URL which points to your database. See [supported engines](/components/recorder/#custom-database-engines). + required: false + default: "Defaults to the default recorder `db_url` (not the current `db_url` of recorder)." + type: string +queries: + description: List of your queries. + required: true + type: map + keys: + name: + description: The name of the sensor. + required: true + type: string + query: + description: An SQL QUERY string, should return 1 result at most. + required: true + type: string + column: + description: The field name to select. + required: true + type: string + unit_of_measurement: + description: Defines the units of measurement of the sensor, if any. + required: false + type: string + value_template: + description: Defines a template to extract a value from the payload. + required: false + type: template +{% endconfiguration %} + +## {% linkable_title Examples %} + +In this section you find some real life examples of how to use this sensor. + +### {% linkable_title Current state of an entity %} + +This example shows the previously *recorded* state of sensor *abc123*. + +```sql +SELECT * FROM states WHERE entity_id = 'sensor.abc123' ORDER BY id DESC LIMIT 2 +``` + +Note that the SQL sensor state corresponds to the last row of the SQL resultset. + +### {% linkable_title Previous state of an entity %} + +This example only works with *binary_sensors*: + +```sql +SELECT * FROM states WHERE entity_id='binary_sensor.xyz789' GROUP BY state ORDER BY last_changed DESC LIMIT 1 +``` + +### {% linkable_title Database size in Postgres %} + +```yaml +- platform: sql + db_url: postgresql://user:password@host/dbname + queries: + - name: db_size + query: "SELECT (pg_database_size('dsmrreader')/1024/1024) as db_size;" + column: "db_size" + unit_of_measurement: MB +``` diff --git a/source/_components/sensor.startca.markdown b/source/_components/sensor.startca.markdown new file mode 100644 index 00000000000..cd92fe272ce --- /dev/null +++ b/source/_components/sensor.startca.markdown @@ -0,0 +1,84 @@ +--- +layout: page +title: "Start.ca" +description: "Instructions on how to integrate Start.ca data usage within Home Assistant." +date: 2018-02-12 00:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: startca.png +ha_category: Sensor +ha_release: 0.64 +ha_iot_class: "Cloud Polling" +--- + +Integrate your [Start.ca](https://www.start.ca/) account information into Home Assistant. + +You can get your API key from: + +[Start.ca Usage API](https://www.start.ca/support/usage/api) + +To use your Start.ca sensor in your installation, add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +sensor: + - platform: startca + api_key: API_KEY + total_bandwidth: 400 + monitored_variables: + - usage + - usage_gb + - limit + - used_download + - used_upload + - used_total + - grace_download + - grace_upload + - grace_total + - total_download + - total_upload + - used_remaining +``` + +{% configuration %} +api_key: + description: The Start.ca API key to access the service. + required: true + type: string +total_bandwidth: + description: Your bandwidth limit in gigabytes. Set to `0` for unlimited plans without a cap. + required: true + type: string +monitored_conditions: + description: Conditions to display in the frontend. + required: true + type: list + keys: + usage: + description: Bandwidth usage (percentage). + usage_gb: + description: Bandwidth usage (gigabytes). + limit: + description: Monthly bandwidth limit (gigabytes). + used_download: + description: Bandwidth used by download outside the grace period (gigabytes). + used_upload: + description: Bandwidth used by upload outside the grace period (gigabytes). + used_total: + description: Total bandwidth (download and upload sum calculation) used outside the grace period (gigabytes). + grace_download: + description: Bandwidth used by download during the grace period (gigabytes). + grace_upload: + description: Bandwidth used by upload during the grace period (gigabytes). + grace_total: + description: Total bandwidth (download and upload sum calculation) used during the unlimited period (gigabytes). + total_download: + description: Total bandwidth download (Grace + Used) (gigabytes). + total_download: + description: Total bandwidth upload (Grace + Used) (gigabytes). + used_remaining: + description: Remaining bandwidth calucated from used and supplied total bandwidth (gigabytes). +{% endconfiguration %} + diff --git a/source/_components/sensor.statistics.markdown b/source/_components/sensor.statistics.markdown index 01abb92ca24..9bfd40dd39c 100644 --- a/source/_components/sensor.statistics.markdown +++ b/source/_components/sensor.statistics.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Statistics Sensor" -description: "Instructions how to integrate statistical sensors into Home Assistant." +description: "Instructions on how to integrate statistical sensors into Home Assistant." date: 2016-09-28 12:10 sidebar: true comments: false @@ -16,7 +16,7 @@ ha_release: "0.30" The `statistics` sensor platform consumes the state from other sensors. Besides the maximum and the minimum values, the total, mean, median, variance and the standard deviation are also available as attributes. If it's a binary sensor then only state changes are counted. -If you are running the [recorder](/components/recorder/) component, on startup the data is read from the database. So after a restart of the platform, you will immediately have data available. If you're using the [history](/components/history/) component, this will automatically also start the recoder component on startup. +If you are running the [recorder](/components/recorder/) component, on startup the data is read from the database. So after a restart of the platform, you will immediately have data available. If you're using the [history](/components/history/) component, this will automatically also start the `recorder` component on startup. If you are *not* running the `recorder` component, it can take time till the sensor starts to work because a couple of attributes need more than one value to do the calculation. To enable the statistics sensor, add the following lines to your `configuration.yaml`: diff --git a/source/_components/sensor.steam_online.markdown b/source/_components/sensor.steam_online.markdown index 6cf46388770..b42e343aeea 100644 --- a/source/_components/sensor.steam_online.markdown +++ b/source/_components/sensor.steam_online.markdown @@ -14,11 +14,15 @@ ha_release: 0.14 --- -The Steam component will allow you to track the online status of public [Steam](https://steamcommunity.com) accounts. +The `steam` sensor platform will allow you to track the online status of public [Steam](https://steamcommunity.com) accounts. -You need an API key which is [free](https://steamcommunity.com/dev/apikey) to use the component +## {% linkable_title Setup %} -To find an account's 64-bit SteamID you can check the URL of the profile page, if it ends with a long string on numbers then that's the 64-bit SteamID. However, if the profile has a custom URL you will have to copy the it and enter it into [STEAMID I/O](https://steamid.io/) to find the 64-bit SteamID. +You need a [free API key](https://steamcommunity.com/dev/apikey) to use the platform. + +To find an account's 64-bit SteamID on profiles without a custom URL you can check the URL of the profile page, the long string of numbers at the end is the 64-bit SteamID. If the profile has a custom URL you will have to copy the URL into [STEAMID I/O](https://steamid.io/) to find the 64-bit SteamID. + +## {% linkable_title Configuration %} To use Steam in your installation, add the following to your `configuration.yaml` file: @@ -32,12 +36,23 @@ sensor: - account2 ``` -Configuration variables: - -- **api_key** (*Required*): Your API key from [https://steamcommunity.com/dev/apikey](https://steamcommunity.com/dev/apikey). -- **accounts** array (*Required*): Array of accounts. - - **account_id** (*Required*): 64-bit SteamID. +{% configuration %} +api_key: + required: true + description: Your API key from [https://steamcommunity.com/dev/apikey](https://steamcommunity.com/dev/apikey). + type: string +accounts: + required: true + description: List of accounts. + type: map + keys: + account_id: + required: true + description: The 64-bit SteamID. + type: string +{% endconfiguration %} +## {% linkable_title Examples %} If you want to add the accounts to a group for example you will have to use: diff --git a/source/_components/sensor.supervisord.markdown b/source/_components/sensor.supervisord.markdown index 4fcb8f24157..fc978f2f2de 100644 --- a/source/_components/sensor.supervisord.markdown +++ b/source/_components/sensor.supervisord.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Supervisord" -description: "Instructions how to integrate Supervisord within Home Assistant." +description: "Instructions on how to integrate Supervisord within Home Assistant." date: 2016-05-13 22:00 sidebar: true comments: false @@ -22,7 +22,7 @@ It required that you enable the HTTP feature in the `/etc/supervisord.conf` conf port=127.0.0.1:9001 ``` -After a restart of `supervisord` you should be able to access the web interface. If needed then this could be added as a [iFrame panel](/components/panel_iframe/). +After a restart of `supervisord` you should be able to access the web interface. If needed then this could be added as an [iFrame panel](/components/panel_iframe/).

diff --git a/source/_components/sensor.swiss_hydrological_data.markdown b/source/_components/sensor.swiss_hydrological_data.markdown index 59f81644e2e..44f4d6100bd 100644 --- a/source/_components/sensor.swiss_hydrological_data.markdown +++ b/source/_components/sensor.swiss_hydrological_data.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Swiss Hydrological Data" -description: "Instructions how to integrate hydrological data of Swiss waters within Home Assistant." +description: "Instructions on how to integrate hydrological data of Swiss waters within Home Assistant." date: 2016-06-17 17:00 sidebar: true comments: false diff --git a/source/_components/sensor.swiss_public_transport.markdown b/source/_components/sensor.swiss_public_transport.markdown index bb4a265bc3a..c1063e4d4a5 100644 --- a/source/_components/sensor.swiss_public_transport.markdown +++ b/source/_components/sensor.swiss_public_transport.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Swiss Public Transport" -description: "Instructions how to integrate timetable data for travelling in Switzerland within Home Assistant." +description: "Instructions on how to integrate timetable data for traveling in Switzerland within Home Assistant." date: 2015-06-02 21:45 sidebar: true comments: false diff --git a/source/_components/sensor.syncthru.markdown b/source/_components/sensor.syncthru.markdown new file mode 100644 index 00000000000..19b2e5d1399 --- /dev/null +++ b/source/_components/sensor.syncthru.markdown @@ -0,0 +1,89 @@ +--- +layout: page +title: "Samsung SyncThru Printer" +description: "Instructions on how to integrate a Samsung printer providing SyncThru within Home Assistant." +date: 2018-02-19 23:33 +sidebar: true +comments: false +sharing: true +footer: true +logo: samsung.png +ha_category: Sensor +ha_iot_class: "Local Polling" +ha_release: 0.66 +--- + +The Samsung SyncThru Printer platform allows you to read current data from your local Samsung printer. + +It usually provides information about the device's state, the left amount of ink or toner and the state of paper trays. +The platform automatically monitors every supported part. + +If you wish not to include certain monitored values specify the values that you would like to see in the front-end via the `monitored_conditions` setting. + +```yaml +# Example configuration.yaml entry +sensor: + - platform: syncthru + resource: http://my-printer.address + name: My Awesome Printer + monitored_conditions: + - toner_black + - output_tray_0 +``` + +{% configuration %} + resource: + description: The address for connecting to the printer. Equal to the SyncThru Webservice address. + required: true + default: false + type: url + name: + description: A user specified name for the printer. Defaults to "Samsung Printer" and the friendly name will be the name of the printer model. + required: false + default: Samsung Printer + type: string + monitored_conditions: + description: Conditions to display in the frontend. + required: false + default: all values + type: list + keys: + toner_black: + description: Black toner fill level + toner_cyan: + description: Cyan toner fill level + toner_magenta: + description: Magenta toner fill level + toner_yellow: + description: Yellow toner fill level + drum_black: + description: Black drum state + drum_cyan: + description: Cyan drum state + drum_magenta: + description: Magenta drum state + drum_yellow: + description: Yellow drum state + tray_1: + description: First paper input tray state + tray_2: + description: Second paper input tray state + tray_3: + description: Third paper input tray state + tray_4: + description: Fourth paper input tray state + tray_5: + description: Fifth paper input tray state + output_tray_0: + description: First paper output tray state + output_tray_1: + description: Second paper output tray state + output_tray_2: + description: Third paper output tray state + output_tray_3: + description: Fourth paper output tray state + output_tray_4: + description: Fifth paper output tray state + output_tray_5: + description: Sixth paper output tray state +{% endconfiguration %} diff --git a/source/_components/sensor.synologydsm.markdown b/source/_components/sensor.synologydsm.markdown index bf7a0af0d01..886a357bdaa 100644 --- a/source/_components/sensor.synologydsm.markdown +++ b/source/_components/sensor.synologydsm.markdown @@ -1,7 +1,7 @@ --- layout: page title: "SynologyDSM Sensor" -description: "Instructions how to integrate the SynologyDSM sensor within Home Assistant." +description: "Instructions on how to integrate the SynologyDSM sensor within Home Assistant." date: 2016-10-30 23:21 sidebar: true comments: false @@ -14,17 +14,19 @@ ha_iot_class: "Local Polling" --- -This `synologydsm` sensor allows getting various statistics from your [Synology NAS](https://www.synology.com). +The `synologydsm` sensor platform allows getting various statistics from your [Synology NAS](https://www.synology.com). + +## {% linkable_title Configuration %} To use the `synologydsm` sensor in your installation, add the following to your `configuration.yaml` file: ```yaml -# Example configuration.yml entry +# Example configuration.yaml entry sensor: - platform: synologydsm host: IP_ADDRESS_OF_SYNOLOGY_NAS - username: USERNAME - password: PASSWORD + username: YOUR_USERNAME + password: YOUR_PASSWORD monitored_conditions: - cpu_total_load - memory_real_usage @@ -33,10 +35,11 @@ sensor: Configuration variables: -- **host** (*Required*): The IP address of the Synology NAS to monitor -- **port** (*Optional*): The port number on which the Synology NAS is reachable. Defaults to `5000`. +- **host** (*Required*): The IP address of the Synology NAS to monitor. +- **port** (*Optional*): The port number on which the Synology NAS is reachable. Defaults to `5001`. - **username** (*Required*): An user to connect to the Synology NAS (a separate account is advised, see the Separate User Configuration section below for details). - **password** (*Required*): The password of the user to connect to the Synology NAS. +- **ssl** (*Optional*): Determine if HTTPS should be used. Defaults to `True` which by default runs on port `5001`. - **volumes** (*Optional*): Array of volumes to monitor. Defaults to all volumes. - **disks** (*Optional*): Array of disks to monitor. Defaults to all disks. - **monitored_conditions** (*Required*): Defines a [template](/topics/templating/) to extract a value from the payload. diff --git a/source/_components/sensor.systemmonitor.markdown b/source/_components/sensor.systemmonitor.markdown index 0cc01b8ade6..855dca71c04 100644 --- a/source/_components/sensor.systemmonitor.markdown +++ b/source/_components/sensor.systemmonitor.markdown @@ -1,7 +1,7 @@ --- layout: page title: "System Monitor" -description: "Instructions how to monitor the Home Assistant host." +description: "Instructions on how to monitor the Home Assistant host." date: 2015-03-23 19:59 sidebar: true comments: false @@ -56,19 +56,10 @@ The table contains types and their argument to use in your `configuration.yaml` | ipv4_address | Interface, eg. `eth0` | | ipv6_address | Interface, eg. `eth0` | | processor_use | | -| process | Binary, e.g. `octave-cli` | +| process | Binary, e.g., `octave-cli` | | last_boot | | | since_last_boot | | -**Note**: Some `type:` names used in the `configuration.yaml` file differ from the entity names. - -| Sensor type | Entity ID | -| :------------------ |:-------------------------| -| memory_free | sensor.ram_available | -| memory_use_percent | sensor.ram_used | -| processor_use | sensor.cpu_used | -| disk_use | sensor.disk_used | - ## {% linkable_title Linux specific %} To retrieve all available network interfaces on a Linux System, execute the `ifconfig` command. diff --git a/source/_components/sensor.sytadin.markdown b/source/_components/sensor.sytadin.markdown index 9f23c8df3f8..1c44a9bdd3f 100644 --- a/source/_components/sensor.sytadin.markdown +++ b/source/_components/sensor.sytadin.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Sytadin Sensor" -description: "Instructions how to integrate Sytadin sensors into Home Assistant." +description: "Instructions on how to integrate Sytadin sensors into Home Assistant." date: 2017-10-05 14:00 sidebar: true comments: false diff --git a/source/_components/sensor.tahoma.markdown b/source/_components/sensor.tahoma.markdown index 1b373ac81ce..d5dbf0530e7 100644 --- a/source/_components/sensor.tahoma.markdown +++ b/source/_components/sensor.tahoma.markdown @@ -1,21 +1,17 @@ --- layout: page title: "Tahoma Sensor" -description: "Instructions how to integrate Tahoma sensors into Home Assistant." +description: "Instructions on how to integrate Tahoma sensors into Home Assistant." date: 2017-07-18 12:00 sidebar: true comments: false sharing: true footer: true logo: tahoma.png -ha_category: Cover +ha_category: Sensor ha_release: 0.59 --- -To use your tahoma sensors in your installation, add the following to your `configuration.yaml` file: +The `tahoma` sensor platform lets you see sensors added to your Tahoma Box in Home Assistant. -``yaml -# Example configuration.yml entry -sensor: - platform: tahoma -``` \ No newline at end of file +Sensors will be added automatically. Please refer to the [component](/components/tahoma/) configuration on how to setup Tahoma. diff --git a/source/_components/sensor.ted5000.markdown b/source/_components/sensor.ted5000.markdown index fd09ab7d2ff..20e94ba3e8d 100644 --- a/source/_components/sensor.ted5000.markdown +++ b/source/_components/sensor.ted5000.markdown @@ -9,7 +9,7 @@ sharing: true footer: true logo: ted.png ha_category: Sensor -ha_release: 0.30 +ha_release: "0.30" ha_iot_class: "Local Polling" --- diff --git a/source/_components/sensor.teksavvy.markdown b/source/_components/sensor.teksavvy.markdown new file mode 100644 index 00000000000..9f7a8e70faa --- /dev/null +++ b/source/_components/sensor.teksavvy.markdown @@ -0,0 +1,76 @@ +--- +layout: page +title: "TekSavvy" +description: "Instructions on how to integrate TekSavvy data usage within Home Assistant." +date: 2017-12-17 00:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: teksavvy.png +ha_category: Sensor +ha_release: 0.62 +ha_iot_class: "Cloud Polling" +--- + +Integrate your [TekSavvy](https://myaccount.teksavvy.com/) account information into Home Assistant. + +You can get your API key from [TekSavvy My Account](https://myaccount.teksavvy.com/ApiKey/ApiKeyManagement). + +To use your TekSavvy sensor in your installation, add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +sensor: + - platform: teksavvy + api_key: API_KEY + total_bandwidth: 400 + monitored_variables: + - usage + - usage_gb + - limit + - onpeak_download + - onpeak_upload + - onpeak_total + - offpeak_download + - offpeak_upload + - offpeak_total + - onpeak_remaining +``` + +{% configuration %} +api_key: + description: The TekSavvy API key to access the service. + required: true + type: string +total_bandwidth: + description: Your bandwidth limit in gigabytes. Set to `0` for unlimited plans without a cap. + required: true + type: string +monitored_conditions: + description: Conditions to display in the frontend. + required: true + type: list + keys: + usage: + description: Bandwidth usage (percentage). + usage_gb: + description: Bandwidth usage (gigabytes). + limit: + description: Monthly bandwidth limit (gigabytes). + onpeak_download: + description: Bandwidth used by download outside the unmetered period (gigabytes). + onpeak_upload: + description: Bandwidth used by upload outside the unmetered period (gigabytes). + onpeak_total: + description: Total bandwidth used outside the unmetered period (gigabytes). + offpeak_download: + description: Bandwidth used by download during the unlimited period (gigabytes). + offpeak_upload: + description: Bandwidth used by upload during the unlimited period (gigabytes). + offpeak_total: + description: Total bandwidth used during the unlimited period (gigabytes). + onpeak_remaining: + description: Remaining bandwidth (gigabytes). +{% endconfiguration %} + diff --git a/source/_components/sensor.tellduslive.markdown b/source/_components/sensor.tellduslive.markdown index 356ba316b58..4e136af4760 100644 --- a/source/_components/sensor.tellduslive.markdown +++ b/source/_components/sensor.tellduslive.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Telldus Live sensor" -description: "Instructions how to integrate Telldus Live sensors into Home Assistant." +description: "Instructions on how to integrate Telldus Live sensors into Home Assistant." date: 2016-01-17 15:49 sidebar: true comments: false diff --git a/source/_components/sensor.tellstick.markdown b/source/_components/sensor.tellstick.markdown index dc4cf5be793..c980118ed4e 100644 --- a/source/_components/sensor.tellstick.markdown +++ b/source/_components/sensor.tellstick.markdown @@ -1,7 +1,7 @@ --- layout: page title: "TellStick Sensor" -description: "Instructions how to integrate TellStick sensors into Home Assistant." +description: "Instructions on how to integrate TellStick sensors into Home Assistant." date: 2015-08-06 19:00 sidebar: true comments: false @@ -16,7 +16,7 @@ ha_iot_class: "Local Polling" The `tellstick` sensor platform allows you to get current meteorological data from a [TellStick](http://www.telldus.se/products/tellstick) device. -To use your TellStick device, you first have to set up your [Tellstick hub](https://home-assistant.io/components/tellstick/) and then add the following to your `configuration.yaml` file: +To use your TellStick device, you first have to set up your [Tellstick hub](/components/tellstick/) and then add the following to your `configuration.yaml` file: ```yaml # Example configuration.yaml entry diff --git a/source/_components/sensor.temper.markdown b/source/_components/sensor.temper.markdown index 37229ebed40..09626f0984e 100644 --- a/source/_components/sensor.temper.markdown +++ b/source/_components/sensor.temper.markdown @@ -1,7 +1,7 @@ --- layout: page title: "TEMPer Sensor" -description: "Instructions how to integrate TEMPer sensors into Home Assistant." +description: "Instructions on how to integrate TEMPer sensors into Home Assistant." date: 2015-08-06 19:00 sidebar: true comments: false @@ -22,18 +22,30 @@ sensor: - platform: temper ``` -Configuration option: - -- **name** (*Optional*): The name you would like to give the sensor in Home Assistant. -- **scale** (*Optional*): The scale for the sensor. -- **offset** (*Optional*): The offset to fix reported vales. +{% configuration %} +offset: + description: The offset to fix reported vales. + required: false + type: int + default: o +scale: + description: The scale for the sensor. + required: false + type: int + default: 1 +name: + description: The name to use when displaying this switch. + required: false + type: string + default: myStrom Switch +{% endconfiguration %} Since some of these sensors consistently show higher temperatures the scale and offset values can be used to fine-tune your sensor. The calculation follows the formula `scale * sensor value + offset`. The TEMPer sensors can only be accessed as root by default. To fix the USB permissions on your system create the file `/etc/udev/rules.d/99-tempsensor.rules` and add the following line to it: -``` +```text SUBSYSTEMS=="usb", ACTION=="add", ATTRS{idVendor}=="0c45", ATTRS{idProduct}=="7401", MODE="666" ``` diff --git a/source/_components/sensor.template.markdown b/source/_components/sensor.template.markdown index 0811978b617..7d612f01607 100644 --- a/source/_components/sensor.template.markdown +++ b/source/_components/sensor.template.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Template Sensor" -description: "Instructions how to integrate Template Sensors into Home Assistant." +description: "Instructions on how to integrate Template Sensors into Home Assistant." date: 2016-01-27 07:00 sidebar: true comments: false @@ -13,11 +13,11 @@ ha_iot_class: "Local Push" logo: home-assistant.png --- -The `template` platform supports sensors which break out `state_attributes` -from other entities. +The `template` platform supports sensors which break out `state_attributes` from other entities. -To enable Template Sensors in your installation, add the following to your -`configuration.yaml` file: +## {% linkable_title Configuration %} + +To enable Template Sensors in your installation, add the following to your `configuration.yaml` file: {% raw %} ```yaml @@ -45,8 +45,12 @@ sensor: description: Name to use in the frontend. required: false type: string + friendly_name_template: + description: Defines a template for the name to be used in the frontend (this overrides friendly_name). + required: false + type: template entity_id: - description: Add a list of entity IDs so the sensor only reacts to state changes of these entities. This will reduce the number of times the sensor will try to update its state. + description: A list of entity IDs so the sensor only reacts to state changes of these entities. This can be used if the automatic analysis fails to find all relevant entities. required: false type: string, list unit_of_measurement: @@ -61,22 +65,20 @@ sensor: description: Defines a template for the icon of the sensor. required: false type: template - icon_template: + entity_picture_template: description: Defines a template for the entity picture of the sensor. required: false type: template + device_class: + description: The type/class of the sensor to set the icon in the frontend. + required: false + type: device_class + default: None {% endconfiguration %} ## {% linkable_title Considerations %} -If you are using the state of a platform that takes extra time to load, the -Template Sensor may get an `unknown` state during startup. This results -in error messages in your log file until that platform has completed loading. -If you use `is_state()` function in your template, you can avoid this situation. -For example, you would replace -{% raw %}`{{ states.switch.source.state == 'on' }}`{% endraw %} -with this equivalent that returns `true`/`false` and never gives an unknown -result: +If you are using the state of a platform that takes extra time to load, the Template Sensor may get an `unknown` state during startup. To avoid this (and the resulting error messages in your log file), you can use `is_state()` function in your template. For example, you would replace {% raw %}`{{ states.switch.source.state == 'on' }}`{% endraw %} with this equivalent that returns `true`/`false` and never gives an `unknown` result: {% raw %}`{{ is_state('switch.source', 'on') }}`{% endraw %} ## {% linkable_title Examples %} @@ -101,8 +103,7 @@ sensor: ### {% linkable_title Renaming Sensor Output %} -If you don't like the wording of a sensor output then the Template Sensor can -help too. Let's rename the output of the [Sun component](/components/sun/) as +If you don't like the wording of a sensor output then the Template Sensor can help too. Let's rename the output of the [Sun component](/components/sun/) as a simple example: {% raw %} @@ -121,9 +122,7 @@ sensor: ``` {% endraw %} -Processes monitored by the [System Monitor sensor](/components/sensor.systemmonitor/) -show `on` or `off` if they are running or not. This example shows how the -output of a monitored `glances` process can be renamed. +Processes monitored by the [System Monitor sensor](/components/sensor.systemmonitor/) show `on` or `off` if they are running or not. This example shows how the output of a monitored `glances` process can be renamed. {% raw %} ```yaml @@ -141,13 +140,11 @@ sensor: ``` {% endraw %} -The [Template Binary Sensor](/components/binary_sensor.template/) is the one in -similar cases if you prefer to see an icon instead of text. +The [Template Binary Sensor](/components/binary_sensor.template/) is the one in similar cases if you prefer to see an icon instead of text. ### {% linkable_title Multiline Example With an `if` Test %} -This example shows a multiple line template with an `if` test. It looks at a -sensing switch and shows `on`/`off` in the frontend. +This example shows a multiple line template with an `if` test. It looks at a sensing switch and shows `on`/`off` in the frontend. {% raw %} ```yaml @@ -174,8 +171,7 @@ sensor: ### {% linkable_title Change The Unit of Measurement %} -With a Template Sensor it's easy to convert given values into others if the -unit of measurement doesn't fit your needs. +With a Template Sensor it's easy to convert given values into others if the unit of measurement doesn't fit your needs. {% raw %} ```yaml @@ -245,3 +241,61 @@ sensor: {% endif %} ``` {% endraw %} + +### {% linkable_title Change the Friendly Name Used in the Frontend %} + +This example shows how to change the `friendly_name` based on a date. +Explanation: We add a multiple of 86400 seconds (= 1 day) to the current unix timestamp to get a future date. + +{% raw %} +```yaml +sensor: + - platform: template + sensors: + forecast_1_day_ahead: + friendly_name_template: >- + {%- set date = as_timestamp(now()) + (1 * 86400 ) -%} + {{ date|timestamp_custom("Tomorrow (%-m/%-d)") }} + value_template: "{{ sensor.darksky_weather_forecast_1 }}" + forecast_2_days_ahead: + friendly_name_template: >- + {%- set date = as_timestamp(now()) + (2 * 86400 ) -%} + {{ date|timestamp_custom("%A (%-m/%-d)") }} + value_template: "{{ sensor.darksky_weather_forecast_2 }}" +``` +{% endraw %} + +This example shows how to change the `friendly_name` based on a state. + +{% raw %} +```yaml +sensor: + - platform: template + sensors: + net_power: + friendly_name_template: >- + {% if states('sensor.power_consumption')|float < 0 %} + Power Consumption + {% else %} + Power Production + {% end %} + value_template: "{{ states('sensor.power_consumption') }}" + unit_of_measurement: 'kW' +``` +{% endraw %} + +### {% linkable_title Working with dates %} + +The `template` sensors are not limited to use attributes from other entities but can also work with [Home Assistant's template extensions](/docs/configuration/templating/#home-assistant-template-extensions). + +{% raw %} +```yaml +sensor: +- platform: template + sensors: + nonsmoker: + value_template: '{{ (( as_timestamp(now()) - as_timestamp(strptime("06.07.2018", "%d.%m.%Y")) ) / 86400 ) | round(2) }}' + friendly_name: 'Not smoking' + unit_of_measurement: "Days" +``` +{% endraw %} diff --git a/source/_components/sensor.thethingsnetwork.markdown b/source/_components/sensor.thethingsnetwork.markdown index 6dac17958f2..faeb8b7e650 100644 --- a/source/_components/sensor.thethingsnetwork.markdown +++ b/source/_components/sensor.thethingsnetwork.markdown @@ -1,7 +1,7 @@ --- layout: page title: "The Things Network Sensor" -description: "Instructions how to integrate The Things Network sensors into Home Assistant." +description: "Instructions on how to integrate The Things Network sensors into Home Assistant." date: 2017-09-30 08:00 sidebar: true comments: false @@ -17,6 +17,8 @@ The `thethingsnetwork` sensor platform allows you to get data from a [The Things This platform requires that the [The Things Network component](/components/thethingsnetwork/) is set up and the [The Things Network Storage Integration](https://www.thethingsnetwork.org/docs/applications/storage/) as well. +## {% linkable_title Prerequisites %} + Visit the [The Things Network Console](https://console.thethingsnetwork.org/) website, log in with your The Things Network credentials, choose your application from **Applications** and go to **Integrations**. Add a new integration. @@ -54,6 +56,8 @@ Select **Devices** to get the ID of your device that you want to use. Devices overview

+## {% linkable_title Configuration %} + To enable this platform, add the following lines to your `configuration.yaml`: ```yaml diff --git a/source/_components/sensor.thinkingcleaner.markdown b/source/_components/sensor.thinkingcleaner.markdown index d5c681ff736..af6979bed2a 100644 --- a/source/_components/sensor.thinkingcleaner.markdown +++ b/source/_components/sensor.thinkingcleaner.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Thinking Cleaner sensor" -description: "Instructions how to integrate a ThinkingCleaner sensor within Home Assistant." +description: "Instructions on how to integrate a ThinkingCleaner sensor within Home Assistant." date: 2016-04-10 17:24 sidebar: true comments: false diff --git a/source/_components/sensor.tibber.markdown b/source/_components/sensor.tibber.markdown index 6ebcc84bcf0..81d11c7ac2b 100644 --- a/source/_components/sensor.tibber.markdown +++ b/source/_components/sensor.tibber.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Tibber" -description: "Instructions how to integrate Tibber within Home Assistant." +description: "Instructions on how to integrate Tibber within Home Assistant." date: 2017-10-03 17:00 sidebar: true comments: false @@ -13,7 +13,6 @@ ha_release: 0.55 ha_iot_class: "Cloud Polling" --- - The `tibber` sensor provides the current electricity price if you are a [Tibber](https://tibber.com/) customer. To add Tibber to your installation, add the following to your `configuration.yaml` file: @@ -31,3 +30,31 @@ sensor: required: true type: string {% endconfiguration %} + +## {% linkable_title Examples %} + +In this section, you will find some real-life examples of how to use this sensor. + +### {% linkable_title Electricity price %} + +The electricity price can be used to make automations. The sensor has a `max_price` and `min_price` attribute, with max and min price for the current day. Here is an example to get a notification when the price is above 90% of the maximum price for the day: + +{% raw %} +```yaml +- alias: "Electricity price" + trigger: + platform: time + # Matches every hour at 1 minutes past whole + minutes: 1 + seconds: 00 + condition: + condition: template + value_template: '{{ float(states.sensor.electricity_price_hamretunet_10.state) > 0.9 * float(states.sensor.electricity_price_hamretunet_10.attributes.max_price) }}' + action: + - service: notify.pushbullet + data: + title: "Electricity price" + target: "device/daniel_telefon_cat" + message: "The electricity price is now {{ states.sensor.electricity_price_hamretunet_10.state }}" +``` +{% endraw %} diff --git a/source/_components/sensor.time_date.markdown b/source/_components/sensor.time_date.markdown index a37980565e5..ce9547358eb 100644 --- a/source/_components/sensor.time_date.markdown +++ b/source/_components/sensor.time_date.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Time & Date" -description: "Instructions how to integrate the time and the date within Home Assistant." +description: "Instructions on how to integrate the time and the date within Home Assistant." date: 2015-05-08 17:15 sidebar: true comments: false diff --git a/source/_components/sensor.toon.markdown b/source/_components/sensor.toon.markdown index fabf565aeb4..7a82ab95e9a 100644 --- a/source/_components/sensor.toon.markdown +++ b/source/_components/sensor.toon.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Toon Sensor" -description: "Instructions how to integrate Toon climate devices within Home Assistant." +description: "Instructions on how to integrate Toon climate devices within Home Assistant." date: 2017-10-22 12:00 sidebar: true comments: false diff --git a/source/_components/sensor.torque.markdown b/source/_components/sensor.torque.markdown index 87ff9e0eca2..38379ccd675 100644 --- a/source/_components/sensor.torque.markdown +++ b/source/_components/sensor.torque.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Torque (OBD2)" -description: "Instructions how to integrate Torque sensors into Home Assistant." +description: "Instructions on how to integrate Torque sensors into Home Assistant." date: 2015-12-20 18:00 sidebar: true comments: false diff --git a/source/_components/sensor.tradfri.markdown b/source/_components/sensor.tradfri.markdown new file mode 100644 index 00000000000..fb78480fb1b --- /dev/null +++ b/source/_components/sensor.tradfri.markdown @@ -0,0 +1,16 @@ +--- +layout: page +title: "IKEA Trådfri sensors" +description: "Access and control your ZigBee-based IKEA Trådfri (Tradfri) Sensors." +date: 2017-04-12 22.04 +sidebar: true +comments: false +sharing: true +footer: true +logo: ikea.svg +ha_category: Sensor +ha_iot_class: "Local Polling" +ha_release: 0.67 +--- + +For installation instructions, see [the Trådfri component](/components/tradfri/). diff --git a/source/_components/sensor.trafikverket_weatherstation.markdown b/source/_components/sensor.trafikverket_weatherstation.markdown new file mode 100644 index 00000000000..272c4e09941 --- /dev/null +++ b/source/_components/sensor.trafikverket_weatherstation.markdown @@ -0,0 +1,86 @@ +--- +layout: page +title: "Trafikverket WeatherStation" +description: "Instructions how to integrate Trafikverket WeatherStation within Home Assistant." +date: 2018-02-01 12:06 +sidebar: true +comments: false +sharing: true +footer: true +logo: trafikverket.png +ha_category: Sensor +ha_release: 0.66.0 +--- + +Showing weather information for air and road temperature provided by [Trafikverket](https://www.trafikverket.se/) in Sweden. + +Potential use cases: +- Get weather data in general +- You live near a weather station and want to know the current temperature at home +- Setup automations for your car heating system. If the road is frozen along the way to work, you might want the car heating system to start earlier. + +##### {% linkable_title Configuration %} + +To enable this sensor, add the following lines to your `configuration.yaml`. + +```yaml +sensor: + - platform: trafikverket_weatherstation + name: Trafikverket Road WeatherStation Kungälv + api_key: eXXcbXXXacXXXXc39XX3aXXX4aXX46XX + station: Kungälv + type: road +``` + +{% configuration %} +name: + description: Unique name of the device in the frontend. + required: true + type: string +api_key: + description: API key from Trafikverket. + required: true + type: string +station: + description: Name of the weather station. + required: true + type: string +type: + description: Defines which temperature you want (`air` or `road`). + required: true + type: string +scan_interval: + description: How frequently to query for new data (in seconds). + required: false + type: int + default: 300 +{% endconfiguration %} + +##### {% linkable_title Obtaining API key %} + +Please click [here](https://api.trafikinfo.trafikverket.se/) and register to obtain the API key. + +##### {% linkable_title Weather stations %} + +Click [here](https://www.trafikverket.se/trafikinformation/vag/?TrafficType=personalTraffic&map=1/606442.17/6886316.22/&Layers=RoadWeather%2b) to get a map of valid weather stations. Once a station is found, copy the name according to the below picture and paste it in your `configuration.yaml` file as the `station` variable. + +

+ +

+ +##### {% linkable_title Examples %} + +```yaml +sensor: + - platform: trafikverket_weatherstation + name: Trafikverket Road WeatherStation Kungälv + api_key: eXXcbXXXacXXXXc39XX3aXXX4aXX46XX + station: Kungälv + type: road + - platform: trafikverket_weatherstation + name: Trafikverket Air WeatherStation Lanna + api_key: eXXcbXXXacXXXXc39XX3aXXX4aXX46XX + station: Lanna + type: air + scan_interval: 600 +``` diff --git a/source/_components/sensor.transmission.markdown b/source/_components/sensor.transmission.markdown index 4e540968339..2fbbef26e8c 100644 --- a/source/_components/sensor.transmission.markdown +++ b/source/_components/sensor.transmission.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Transmission Sensor" -description: "Instructions how to integrate Transmission sensors within Home Assistant." +description: "Instructions on how to integrate Transmission sensors within Home Assistant." date: 2015-04-25 9:06 sidebar: true comments: false @@ -16,33 +16,7 @@ ha_iot_class: "Local Polling" The `transmission` platform allows you to monitor your downloads with [Transmission](http://www.transmissionbt.com/) from within Home Assistant and setup automation based on the information. -To enable this sensor, add the following lines to your `configuration.yaml`: - -```yaml -# Example configuration.yaml entry -sensor: - - platform: transmission - host: IP_ADDRESS - monitored_variables: - - 'current_status' - - 'download_speed' - - 'upload_speed' - - 'active_torrents' -``` - -Configuration variables: - -- **host** (*Required*): This is the IP address of your Transmission daemon, eg. 192.168.1.32. -- **port** (*Optional*): The port your Transmission daemon uses, defaults to 9091. -- **name** (*Optional*): The name to use when displaying this Transmission instance. -- **username** (*Optional*): Your Transmission username, if you use authentication. -- **password** (*Optional*): Your Transmission password, if you use authentication. -- **monitored_variables** array (*Required*): Conditions to display in the frontend. - - **current_status**: The status of your Transmission daemon. - - **download_speed**: The current download speed. - - **upload_speed**: The current upload speed. - - **active_torrents**: The current number of active torrents. - +## {% linkable_title Setup %} To use the monitoring, your transmission client needs to allow remote access. If you are running the graphical transmission client (transmission-gtk) go to **Edit** -> **Preferences** and choose the tab **Remote**. Check **Allow remote access**, enter your username and your password, and uncheck the network restriction as needed. @@ -56,3 +30,62 @@ If everything is setup correctly, the details will show up in the frontend.

+## {% linkable_title Configuration %} + +To enable this sensor, add the following lines to your `configuration.yaml`: + +```yaml +# Example configuration.yaml entry +sensor: + - platform: transmission + host: IP_ADDRESS + monitored_variables: + - 'current_status' + - 'download_speed' + - 'upload_speed' + - 'active_torrents' + - 'paused_torrents' + - 'total_torrents' +``` + +{% configuration %} +host: + description: This is the IP address of your Transmission daemon, e.g., 192.168.1.32. + required: true + type: string +port: + description: The port your Transmission daemon uses. + required: false + type: int + default: 9091 +name: + description: The name to use when displaying this Transmission instance in the frontend. + required: false + type: string +username: + description: Your Transmission username, if you use authentication. + required: false + type: string +password: + description: Your Transmission password, if you use authentication. + required: false + type: string +monitored_variables: + description: Conditions to display in the frontend. + required: false + type: map + keys: + current_status: + description: The status of your Transmission daemon. + download_speed: + description: The current download speed. + upload_speed: + description: The current upload speed. + active_torrents: + description: The current number of active torrents. + paused_torrents: + description: The current number of paused torrents. + total_torrents: + description: The total number of torrents present in the client. +{% endconfiguration %} + diff --git a/source/_components/sensor.travisci.markdown b/source/_components/sensor.travisci.markdown index a3944d69a82..82698ab737a 100644 --- a/source/_components/sensor.travisci.markdown +++ b/source/_components/sensor.travisci.markdown @@ -26,7 +26,7 @@ sensor: Configuration variables: -- **api_key** (*Required*): GitHub [access token](https://github.com/settings/applications) with the following scopes: *read:org*, *user:email*, *repo_deployment*, *repo:status*, *write:repo_hook*. +- **api_key** (*Required*): GitHub [access token](https://github.com/settings/tokens) with the following scopes: *read:org*, *user:email*, *repo_deployment*, *repo:status*, *write:repo_hook*. - **branch** (*Optional*): Determine which default branch should be used by the **state** condition. Defaults to *master*. - **scan_interval** (*Optional*): How frequently to query for new data. Defaults to 30 seconds. - **monitored_conditions** array (*Optional*): Conditions to display in the frontend. If not specified, all conditions below will be enabled by default. The following conditions can be monitored. diff --git a/source/_components/sensor.twitch.markdown b/source/_components/sensor.twitch.markdown index ce0b0d051b9..d1265c1b1d5 100644 --- a/source/_components/sensor.twitch.markdown +++ b/source/_components/sensor.twitch.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Twitch" -description: "Instructions how to integrate Twitch sensors into Home Assistant." +description: "Instructions on how to integrate Twitch sensors into Home Assistant." date: 2015-12-19 09:00 sidebar: true comments: false @@ -16,6 +16,8 @@ ha_iot_class: "Cloud Polling" The `twitch` platform will allow you to monitor [Twitch](http://www.twitch.tv/) channel status from within Home Assistant and setup automation based on the information. +## {% linkable_title Configuration %} + To use Twitch with your installation, add the following to your `configuration.yaml` file: ```yaml @@ -27,8 +29,13 @@ sensor: - channel2 ``` -Configuration variables: - -- **channels** array (*Required*): Array of channels. - - **channel_name** (*Required*): Name of the channel. +{% configuration %} +channels: + description: List of channels. + required: true + type: map + keys: + channel_id: + description: Name of the channel. +{% endconfiguration %} diff --git a/source/_components/sensor.uk_transport.markdown b/source/_components/sensor.uk_transport.markdown index 759f37f982d..ccf0c1a5a77 100644 --- a/source/_components/sensor.uk_transport.markdown +++ b/source/_components/sensor.uk_transport.markdown @@ -13,7 +13,6 @@ ha_iot_class: "Cloud Polling" ha_release: "0.50" --- - The `uk_transport` sensor will display the time in minutes until the next departure in a specified direction from of a configured train station or bus stop. The sensor uses [transportAPI](http://www.transportapi.com/) to query live departure data and requires a developer application ID and key which can be obtained [here](https://developer.transportapi.com/). The [free tier](http://www.transportapi.com/plans/) allows 1000 requests daily, which is sufficient for a single sensor refreshing every 87 seconds.

@@ -22,11 +21,10 @@ Additional sensors can be added but at the expense of a reduced refresh rate. 2 Queries are entered as a list, with the two transport modes available being `bus` and `train`. -Train departure sensors require three character long `origin` and `destination` station codes which are searchable on the [National Rail enquiries](http://www.nationalrail.co.uk/times_fares/ldb.aspx) website (e.g. `WAT` is London Waterloo). The validity of a route can be checked by performing a GET request to `/uk/train/station/{station_code}/live.json` in the [API reference webpage](https://developer.transportapi.com/docs?raml=https://transportapi.com/v3/raml/transportapi.raml##request_uk_train_station_station_code_live_json). +Train departure sensors require three character long `origin` and `destination` station codes which are searchable on the [National Rail enquiries](http://www.nationalrail.co.uk/times_fares/ldb.aspx) website (e.g., `WAT` is London Waterloo). The validity of a route can be checked by performing a GET request to `/uk/train/station/{station_code}/live.json` in the [API reference webpage](https://developer.transportapi.com/docs?raml=https://transportapi.com/v3/raml/transportapi.raml##request_uk_train_station_station_code_live_json). To add a single train departure sensor add the following to your `configuration.yaml` file: - ```yaml # Example configuration.yaml entry for a single sensor sensor: @@ -48,7 +46,7 @@ Configuration variables: - **origin** (*Required*): Specify the three character long origin station code. - **destination** (*Required*): Specify the three character long destination station code. -A large amount of information about upcoming departures is available within the attributes of the sensor. The example above creates a sensor with ID `sensor.next_train_to_wat` with the attribute `next_trains` which is a list of the next 25 departing trains. The status of the next departing train is accessed using the [template sensor](https://home-assistant.io/components/sensor.template/) below, as are the train origin, estimated and scheduled departure times, and the departure platform. +A large amount of information about upcoming departures is available within the attributes of the sensor. The example above creates a sensor with ID `sensor.next_train_to_wat` with the attribute `next_trains` which is a list of the next 25 departing trains. The status of the next departing train is accessed using the [template sensor](/components/sensor.template/) below, as are the train origin, estimated and scheduled departure times, and the departure platform. ```yaml # Example configuration.yaml entry for a template sensor to access the attributes of the next departing train. @@ -69,17 +67,15 @@ A large amount of information about upcoming departures is available within the next_trains_platform: friendly_name: 'Next train platform' value_template: {% raw %}'{{states.sensor.next_train_to_wat.attributes.next_trains[0].platform}}'{% endraw %} - ``` Bus sensors require as their `origin` a bus stop ATCO code which can be found by browsing OpenStreetMap data as follows: -1. On [OpenStreetMap.org](http://www.openstreetmap.org/) zoom right in on a bus -stop you're interested in -2. Click the layers picker button on the right hand side -3. Tick the 'map data' layer, and wait for clickable objects to load -4. Click the bus stop node to reveal its tags on the left +1. On [OpenStreetMap.org](http://www.openstreetmap.org/) zoom right in on a bus stop you're interested in. +2. Click the layers picker button on the right hand side. +3. Tick the 'map data' layer, and wait for clickable objects to load. +4. Click the bus stop node to reveal its tags on the left. The `destination` must be a valid location in the "direction" field returned by a GET query to `/uk/bus/stop/{atcocode}/live.json` as described in the [API reference webpage](https://developer.transportapi.com/docs?raml=https://transportapi.com/v3/raml/transportapi.raml##bus_information). A bus sensor is added in the following `configuration.yaml` file entry: @@ -116,7 +112,6 @@ And the template sensor for viewing the next bus attributes. next_bus_estimated: friendly_name: 'Next bus estimated' value_template: {% raw %}'{{states.sensor.next_bus_to_wantage.attributes.next_buses[0].estimated}}'{% endraw %} - ``` Powered by [transportAPI](http://www.transportapi.com/) diff --git a/source/_components/sensor.uptime.markdown b/source/_components/sensor.uptime.markdown index b17f9857976..f67feb188e4 100644 --- a/source/_components/sensor.uptime.markdown +++ b/source/_components/sensor.uptime.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Uptime Sensor" -description: "Instructions how to integrate an uptime sensor into Home Assistant." +description: "Instructions on how to integrate an uptime sensor into Home Assistant." date: 2017-10-13 10:30 sidebar: true comments: false diff --git a/source/_components/sensor.uscis.markdown b/source/_components/sensor.uscis.markdown new file mode 100644 index 00000000000..3d214dc818a --- /dev/null +++ b/source/_components/sensor.uscis.markdown @@ -0,0 +1,39 @@ +--- +layout: page +title: USCIS Sensor +description: "Instructions on how to set up USCIS within Home Assistant." +date: 2018-03-21 08:00 +sidebar: false +comments: false +sharing: true +footer: true +logo: uscis.png +ha_category: Sensor +ha_release: 0.68 +ha_iot_class: "Cloud Polling" +--- + +The `uscis` sensor component allows you get updates on your USCIS case using your case/receipt number. The sensor gets the case information from [USCIS Website]( https://egov.uscis.gov/casestatus/landing.do) + +## Example for `configuration.yaml` : + +```yaml +sensor: + - platform: uscis + case_id: YOUR_CASE_NUMBER + name: OPTIONAL_NAME +``` + +{% configuration %} +friendly_name: + description: Name of the sensor in Home Assistant. + required: false + default: USCIS + type: string +case_id: + description: Case/receipt number used to get the case details from USCIS web client. + required: true + type: string +{% endconfiguration %} + +All the data will be fetch from [USCIS](https://egov.uscis.gov/casestatus/mycasestatus.do). diff --git a/source/_components/sensor.vasttrafik.markdown b/source/_components/sensor.vasttrafik.markdown index 787e5b237ae..8f3862fdd84 100644 --- a/source/_components/sensor.vasttrafik.markdown +++ b/source/_components/sensor.vasttrafik.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Västtrafik Public Transport" -description: "Instructions how to integrate timetable data for travelling in Sweden within Home Assistant." +description: "Instructions on how to integrate timetable data for traveling in Sweden within Home Assistant." date: 2016-10-05 08:45 sidebar: true comments: false @@ -13,8 +13,7 @@ ha_iot_class: "Cloud Polling" ha_release: "0.30" --- - -The `vasttrafik` sensor will provide you travelling details for the larger Göteborg area in Sweden from the [Västtrafik](https://vasttrafik.se/) public transportation service. +The `vasttrafik` sensor will provide you traveling details for the larger Göteborg area in Sweden from the [Västtrafik](https://vasttrafik.se/) public transportation service. You must create an application [here](https://developer.vasttrafik.se/portal/#/applications) to obtain a `key` and a `secret`. @@ -34,10 +33,11 @@ Configuration variables: - **key** (*Required*): The API key to access your Västtrafik account. - **secret** (*Required*): The API secret to access your Västtrafik account. -- **departures** array (*Required*): List of travelling routes. +- **departures** array (*Required*): List of travel routes. - **name** (*Optional*): Name of the route. - **from** (*Required*): The start station. - - **heading** (*Optional*): Direction of the travelling. + - **heading** (*Optional*): Direction of the traveling. + - **lines** (*Optional*): Only consider these lines. - **delay** (*Optional*): Delay in minutes. Defaults to 0. The data are coming from [Västtrafik](https://vasttrafik.se/). @@ -54,5 +54,8 @@ sensor: - name: Mot järntorget from: Musikvägen heading: Järntorget + lines: + - 7 + - GRÖN delay: 10 ``` diff --git a/source/_components/sensor.vera.markdown b/source/_components/sensor.vera.markdown index bd32fdd408e..0fbdf0ff316 100644 --- a/source/_components/sensor.vera.markdown +++ b/source/_components/sensor.vera.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Vera Sensor" -description: "Instructions how to integrate Vera sensors into Home Assistant." +description: "Instructions on how to integrate Vera sensors into Home Assistant." date: 2015-10-20 21:00 sidebar: true comments: false @@ -17,7 +17,7 @@ The `vera` platform allows you to get data from your [Vera](http://getvera.com/) They will be automatically discovered if the vera component is loaded. -Please note that some vera sensors (such as _motion_ and _flood_ sensors) are _armable_ which means that vera will send alerts (email messages to txts) when they are _armed_ an change state. +Please note that some vera sensors (such as _motion_ and _flood_ sensors) are _armable_ which means that vera will send alerts (email messages to txts) when they are _armed_ and change state. Home Assistant will display the state of these sensors regardless of the _armed_ state. diff --git a/source/_components/sensor.verisure.markdown b/source/_components/sensor.verisure.markdown index 75a4676365c..8ee60938a92 100644 --- a/source/_components/sensor.verisure.markdown +++ b/source/_components/sensor.verisure.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Verisure Sensor" -description: "Instructions how to integrate Verisure sensors into Home Assistant." +description: "Instructions on how to integrate Verisure sensors into Home Assistant." date: 2016-02-23 21:31 +0100 sidebar: true comments: false diff --git a/source/_components/sensor.version.markdown b/source/_components/sensor.version.markdown index 3f8eaa196e4..a84c05f7a27 100644 --- a/source/_components/sensor.version.markdown +++ b/source/_components/sensor.version.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Version Sensor" -description: "Instructions how to integrate a version sensor into Home Assistant." +description: "Instructions on how to integrate a version sensor into Home Assistant." date: 2017-08-10 10:30 sidebar: true comments: false diff --git a/source/_components/sensor.waqi.markdown b/source/_components/sensor.waqi.markdown index ce920cfeff2..163ce64ee68 100644 --- a/source/_components/sensor.waqi.markdown +++ b/source/_components/sensor.waqi.markdown @@ -1,7 +1,7 @@ --- layout: page title: "World Air Quality Index" -description: "Instructions how to setup World Air Quality Index sensor in Home Assistant." +description: "Instructions on how to setup World Air Quality Index sensor in Home Assistant." date: 2016-11-17 06:00 sidebar: true comments: false @@ -27,7 +27,7 @@ sensor: locations: - beijing stations: - - Beijing US Embassy + - Beijing US Embassy, Beijing ``` Configuration variables: diff --git a/source/_components/sensor.waze_travel_time.markdown b/source/_components/sensor.waze_travel_time.markdown new file mode 100644 index 00000000000..484785a1a07 --- /dev/null +++ b/source/_components/sensor.waze_travel_time.markdown @@ -0,0 +1,59 @@ +--- +layout: page +title: "Waze Travel Time" +description: "Instructions on how to add Waze travel time to Home Assistant." +date: 2018-01-23 00:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: waze.png +ha_category: Transport +ha_iot_class: "Cloud Polling" +ha_release: 0.67 +--- + +The `waze_travel_time` sensor provides travel time from the [Waze](https://www.waze.com/). + +Unit system is set to metric system. + +## {% linkable_title Configuration %} + +To use this sensor in your installation, add the following `sensor` section to your `configuration.yaml` file: + +```yaml +# Example entry for configuration.yaml +sensor: + - platform: waze_travel_time + origin: Montréal, QC + destination: Québec, QC + region: 'US' +``` + +{% configuration %} +origin: + description: Enter the starting address or the GPS coordinates of the location (GPS coordinates has to be separated by a comma). You can also enter the entity id of a sensor, device_tracker or zone, which provides this information in its state. + required: true + type: string +destination: + description: Enter the destination address or the GPS coordinates of the location (GPS coordinates has to be separated by a comma). You can also enter the entity id of a sensor, device_tracker or zone, which provides this information in its state. + required: true + type: string +region: + description: Choose one of the available regions from 'EU', 'US', 'NA' (equivalent to 'US') or 'IL'. + required: true + type: string +name: + description: A name to display on the sensor. + required: false + default: "Waze Travel Time" + type: string +incl_filter: + description: A substring that has to be present in the description of the selected route (a simple case-insensitive matching). + required: false + type: string +excl_filter: + description: A substring that has to be NOT present in the description of the selected route (a simple case-insensitive matching). + required: false + type: string +{% endconfiguration %} diff --git a/source/_components/sensor.whois.markdown b/source/_components/sensor.whois.markdown index 7a6937ce33f..87e2e674cbc 100644 --- a/source/_components/sensor.whois.markdown +++ b/source/_components/sensor.whois.markdown @@ -14,14 +14,17 @@ ha_iot_class: "Cloud Polling" --- -`whois` sensor allows you to perform daily WHOIS lookups against your owned domains. This provides you with information such as `expiration_date`, `name_servers`, and `registrar` details. +The `whois` sensor platform allows you to perform daily WHOIS lookups against your owned domains. This provides you with information such as `expiration_date`, `name_servers` and `registrar` details. + +## {% linkable_title Configuration %} + +To use this sensor in your installation, add the following to your `configuration.yaml` file: ```yaml # Example configuration.yaml entry sensor: - platform: whois domain: example.net - name: primary ``` {% configuration %} diff --git a/source/_components/sensor.wink.markdown b/source/_components/sensor.wink.markdown index 5a54a704243..7300fd8d65c 100644 --- a/source/_components/sensor.wink.markdown +++ b/source/_components/sensor.wink.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Wink Sensor" -description: "Instructions how to setup the Wink sensors within Home Assistant." +description: "Instructions on how to setup the Wink sensors within Home Assistant." date: 2015-01-20 22:36 sidebar: true comments: false diff --git a/source/_components/sensor.wirelesstag.markdown b/source/_components/sensor.wirelesstag.markdown new file mode 100644 index 00000000000..5b811d400a8 --- /dev/null +++ b/source/_components/sensor.wirelesstag.markdown @@ -0,0 +1,41 @@ +--- +layout: page +title: "WirelessTag Sensor" +description: "Instructions on how to integrate your Wireless Tags sensors within Home Assistant." +date: 2018-03-26 21:50 +comments: false +sidebar: true +sharing: true +footer: true +logo: wirelesstag.png +ha_category: Sensor +ha_iot_class: "Local Push and Cloud Polling" +ha_release: 0.68 +--- + +To get your [wirelesstag.net](http://wirelesstag.net) sensors working within Home Assistant, please follow the instructions for the general [WirelessTag component](/components/wirelesstag). + +To enable tags set up with your [wirelesstag.net](http://wirelesstag.net) account, add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +sensor: + - platform: wirelesstag + monitored_conditions: + - temperature + - humidity +``` + +{% configuration %} + monitored_conditions: + description: The metrics types to monitor; valid values are specified below + required: true + type: list +{% endconfiguration %} + +The following metrics can be monitored: + +* (`temperature`): Value is in Celsius or Fahrenheit (according to your settings at Tag Manager). +* (`humidity`): Humidity level in %. +* (`moisture`): Water level/soil moisture in % (applicable for Water Tag only). +* (`light`): Brightness in lux (if supported by tag). diff --git a/source/_components/sensor.worldclock.markdown b/source/_components/sensor.worldclock.markdown index c195fe37ce9..c35d652f10c 100644 --- a/source/_components/sensor.worldclock.markdown +++ b/source/_components/sensor.worldclock.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Worldclock" -description: "Instructions how to integrate a Worldclock within Home Assistant." +description: "Instructions on how to integrate a Worldclock within Home Assistant." date: 2015-10-02 11:15 sidebar: true comments: false @@ -14,7 +14,7 @@ ha_release: pre 0.7 --- -The `worldclock` sensor platform simple displays the current time in a different time zone +The `worldclock` sensor platform simply displays the current time in a different time zone To enable this sensor in your installation, add the following to your `configuration.yaml` file: diff --git a/source/_components/sensor.worldtidesinfo.markdown b/source/_components/sensor.worldtidesinfo.markdown index 955f380d4a8..1b5dca31857 100644 --- a/source/_components/sensor.worldtidesinfo.markdown +++ b/source/_components/sensor.worldtidesinfo.markdown @@ -1,7 +1,7 @@ --- layout: page title: "World Tides" -description: "Instructions how to add Tides information to Home Assistant." +description: "Instructions on how to add Tides information to Home Assistant." date: 2017-08-23 08:00 sidebar: true comments: false diff --git a/source/_components/sensor.worxlandroid.markdown b/source/_components/sensor.worxlandroid.markdown index 5f52ac95d9d..5497ae70057 100644 --- a/source/_components/sensor.worxlandroid.markdown +++ b/source/_components/sensor.worxlandroid.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Worx Landroid" -description: "Instructions how to integrate Worx Landroid WG796E.1 or WG797E as sensors within Home Assistant." +description: "Instructions on how to integrate Worx Landroid WG796E.1 or WG797E as sensors within Home Assistant." date: 2017-09-12 13:23 sidebar: true comments: false diff --git a/source/_components/sensor.wsdot.markdown b/source/_components/sensor.wsdot.markdown index 3b2e163398c..268fd900b4f 100644 --- a/source/_components/sensor.wsdot.markdown +++ b/source/_components/sensor.wsdot.markdown @@ -15,8 +15,7 @@ ha_release: 0.37 The `wsdot` sensor will give you travel time information from the [Washington State Department of Transportation (WSDOT)](http://wsdot.com/). -First, you need to get a free Traveler Information `api_key` from the [WSDOT API webpage](http://wsdot.com/traffic/api/). Just enter your email address to instantly get the key. - +First, you need to get a free Traveler Information `api_key` from the [WSDOT API webpage](http://wsdot.com/traffic/api/). Just enter your email address to instantly get the key. Once you have the code, create `wsdot` sensors by editing your `configuration.yaml` file as follows: @@ -38,11 +37,11 @@ Configuration variables: - **id** (*Required*): Name of the route. - **name** (*Optional*): Name of the route. Default just uses `id`. -Figuring out which Travel Time ID (`id`) is associated with your routes is a bit of a challenge. If you visit `http://wsdot.com/Traffic/api/TravelTimes/TravelTimesREST.svc/GetTravelTimesAsJson?AccessCode=[your_api_key_here]` substituting your `api_key`, you will get a list of all available routes. Search through it and then find the key `TravelTimeID`. That tells you the number you need. +Figuring out which Travel Time ID (`id`) is associated with your routes is a bit of a challenge. If you visit `http://wsdot.com/Traffic/api/TravelTimes/TravelTimesREST.svc/GetTravelTimesAsJson?AccessCode=[your_api_key_here]` substituting your `api_key`, you will get a list of all available routes. Search through it and then find the key `TravelTimeID`. That tells you the number you need. Some common examples include: -``` +```text 73 Issaquah-Seattle (WB PM) 74 Seattle-Issaquah (EB AM) 75 HOV Issaquah-Seattle (WB REV) @@ -78,4 +77,3 @@ Here's an example of the sensor in use:

- diff --git a/source/_components/sensor.wunderground.markdown b/source/_components/sensor.wunderground.markdown index 4183dfa0b08..d82062c5ffa 100644 --- a/source/_components/sensor.wunderground.markdown +++ b/source/_components/sensor.wunderground.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Weather Underground (WUnderground)" -description: "Instructions how to integrate Weather Underground (WUnderground) Weather within Home Assistant." +description: "Instructions on how to integrate Weather Underground (WUnderground) Weather within Home Assistant." date: 2016-08-18 sidebar: true comments: false @@ -13,11 +13,10 @@ ha_release: 0.27 ha_iot_class: "Cloud Polling" --- - The `wunderground` platform uses [Weather Underground](http://www.wunderground.com) as a source for current weather information.

-Obtain a WUnderground API key [here](https://www.wunderground.com/weather/api). A free account allows 500 requests per day and also a maximum of 10 per minute. See details [here](https://www.wunderground.com/weather/api/d/pricing.html). +Obtain a WUnderground API key [here](https://www.wunderground.com/weather/api). They no longer offer free API keys, and all keys must be paid for, at this time existing free keys will continue to work, but may be disabled in the future.

To add Wunderground to your installation, add the following to your `configuration.yaml` file: @@ -86,7 +85,7 @@ Configuration variables: - **weather**: A human-readable text summary with picture from Wunderground. - **weather_1d** [[12h]](#12h): A human-readable weather forecast using imperial units. - **weather_1d_metric** [[12h]](#12h): A human-readable weather forecast using metric units. - - **weather_1h** [[1h]](#1h): Weather conditions in 1 hour. (e.g. "Thunderstorm" etc.) + - **weather_1h** [[1h]](#1h): Weather conditions in 1 hour. (e.g., "Thunderstorm" etc.) - **wind_degrees**: Wind degrees - **wind_dir**: Wind direction - **wind_gust_kph**: Wind gusts speed in kph @@ -105,7 +104,7 @@ All the conditions listed above will be updated every 5 minutes. _12 hour forecasts_ -Monitored conditions marked above with [12h] are 12 hour forecasts. To get a forecast for different period/daytime replace the `_1d_` part of the sensor name. e.g. `weather_2n` will give you forecast for tomorrow night. Valid values for day are `1` to `4` and valid values for daytime are `d` or `n`. +Monitored conditions marked above with [12h] are 12 hour forecasts. To get a forecast for different period/daytime replace the `_1d_` part of the sensor name. e.g., `weather_2n` will give you forecast for tomorrow night. Valid values for day are `1` to `4` and valid values for daytime are `d` or `n`. _Daily forecasts_ @@ -115,12 +114,11 @@ in `_1d_` part of the sensor name. Valid values are from `1` to `4`. _Hourly forecasts_ Conditions marked with [1h] are hourly forecasts. To get forecast for different hour, replace the number -in the `_1h_` part of the sensor name with `1` to `36`. E.g. `weather_24h` will give you weather in 24 hours. +in the `_1h_` part of the sensor name with `1` to `36`. e.g., `weather_24h` will give you weather in 24 hours. ### {% linkable_title Additional examples %} -#### Daily forecast - +#### {% linkable_title Daily forecast %} ```yaml sensor: @@ -152,8 +150,7 @@ group: ![Daily Forecast](/images/screenshots/wunderground_daily_forecast.png) -#### Weather overview - +#### {% linkable_title Weather overview %} ```yaml sensor: @@ -190,9 +187,12 @@ group: ![Weather overview](/images/screenshots/wunderground_weather_overview.png) -

Note: While the platform is called “wunderground” the sensors will show up in Home Assistant as “PWS” (eg: sensor.pws_weather).

+Note that the Weather Underground sensor is added to the entity_registry, so second and subsequent Personal Weather Station ID (pws_id) will have their monitored conditions suffixed with an index number e.g. + +- sensor.pws_weather_1d_metric_2 + Additional details about the API are available [here](https://www.wunderground.com/weather/api/d/docs). diff --git a/source/_components/sensor.xiaomi_aqara.markdown b/source/_components/sensor.xiaomi_aqara.markdown index 247a9a94c9e..a69c4f685af 100644 --- a/source/_components/sensor.xiaomi_aqara.markdown +++ b/source/_components/sensor.xiaomi_aqara.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Xiaomi Sensor" -description: "Instructions how to setup the Xiaomi sensor within Home Assistant." +description: "Instructions on how to setup the Xiaomi sensor within Home Assistant." date: 2017-07-21 16:34 sidebar: true comments: false diff --git a/source/_components/sensor.xiaomi_miio.markdown b/source/_components/sensor.xiaomi_miio.markdown new file mode 100644 index 00000000000..26e1a4293b9 --- /dev/null +++ b/source/_components/sensor.xiaomi_miio.markdown @@ -0,0 +1,54 @@ +--- +layout: page +title: "Xiaomi Air Quality Monitor" +description: "Instructions how to integrate your Xiaomi Mi Air Quality Monitor within Home Assistant." +date: 2018-02-28 08:35 +sidebar: true +comments: false +sharing: true +footer: true +logo: xiaomi.png +ha_category: Sensor +ha_iot_class: "Local Polling" +ha_release: 0.66 +--- + +The `xiaomi_miio` sensor platform is observing your Xiaomi Mi Air Quality Monitor (PM2.5) and reporting the air quality index. + +Currently, the supported features are: + +- Air Quality Index (AQI) +- Attributes + - power + - charging + - battery + - time_stat + +Please follow the instructions on [Retrieving the Access Token](/components/vacuum.xiaomi_miio/#retrieving-the-access-token) to get the API token. + +To add a Xiaomi Mi Air Quality Monitor to your installation, add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +sensor: + - platform: xiaomi_miio + name: Xiaomi Air Quality Monitor + host: 192.168.130.73 + token: YOUR_TOKEN +``` + +{% configuration %} +host: + description: The IP address of your miio device. + required: true + type: string +token: + description: The API token of your miio device. + required: true + type: string +name: + description: The name of your miio device. + required: false + type: string + default: Xiaomi Miio Sensor +{% endconfiguration %} diff --git a/source/_components/sensor.yahoo_finance.markdown b/source/_components/sensor.yahoo_finance.markdown index de79cc87bd3..0e8d12c0fbe 100644 --- a/source/_components/sensor.yahoo_finance.markdown +++ b/source/_components/sensor.yahoo_finance.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Yahoo Finance" -description: "Instructions how to setup Yahoo Finance within Home Assistant." +description: "Instructions on how to setup Yahoo Finance within Home Assistant." date: 2016-09-18 21:00 sidebar: true comments: false @@ -14,6 +14,10 @@ featured: false ha_release: 0.29 --- +

+ This sensor doesn't work anymore as [Yahoo!](https://yahoo.uservoice.com/forums/382977-finance/suggestions/32103877-yahoo-stock-quote-api-please-bring-back) decommissioned the service in early November 2017. A repleacement is the [`alpha_vantage` sensor](/components/sensor.alpha_vantage/). +

+ The `yahoo_finance` platform uses [Yahoo Finance](https://finance.yahoo.com/) to monitor the stock market. To enable the `yahoo_finance` platform, add the following lines to your `configuration.yaml` file: diff --git a/source/_components/sensor.yr.markdown b/source/_components/sensor.yr.markdown index 362c3aaedbf..772fa6560e1 100644 --- a/source/_components/sensor.yr.markdown +++ b/source/_components/sensor.yr.markdown @@ -1,7 +1,7 @@ --- layout: page title: "YR" -description: "Instructions how to integrate Yr.no within Home Assistant." +description: "Instructions on how to integrate Yr.no within Home Assistant." date: 2016-01-04 14:00 sidebar: true comments: false @@ -14,7 +14,7 @@ ha_iot_class: "Cloud Polling" --- -The `yr` platform uses [YR.no](http://www.yr.no/) as an source for current meteorological data for your location. The +The `yr` platform uses [YR.no](http://www.yr.no/) as a source for current meteorological data for your location. The weather forecast is delivered by the Norwegian Meteorological Institute and the NRK. To add YR to your installation, add the following to your `configuration.yaml` file: diff --git a/source/_components/sensor.yweather.markdown b/source/_components/sensor.yweather.markdown index 7ac041c1cb1..fdd5a38b808 100644 --- a/source/_components/sensor.yweather.markdown +++ b/source/_components/sensor.yweather.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Yahoo Weather Sensor" -description: "Instructions how to integrate Yahoo Weather within Home Assistant." +description: "Instructions on how to integrate Yahoo Weather within Home Assistant." date: 2016-07-06 9:06 sidebar: true comments: false @@ -14,7 +14,7 @@ ha_iot_class: "Cloud Polling" --- -The `yweather` platform uses [Yahoo Weather](https://www.yahoo.com/news/weather/) as an source for current meteorological data. The `forecast` will show you the condition for 5 days, 0 is the current day. You can use only `weather`, `temp_min`, and `temp_max` with forecast. It's important to note that a yweather sensor will only show ONE days forecast at a time so to show multiple days forecasts, you will need to use the 'name:' option and give each sensor a unique name. +The `yweather` platform uses [Yahoo Weather](https://www.yahoo.com/news/weather/) as a source for current meteorological data. The `forecast` will show you the condition for 5 days, 0 is the current day. You can use only `weather`, `temp_min`, and `temp_max` with forecast. It's important to note that a yweather sensor will only show ONE days forecast at a time so to show multiple days forecasts, you will need to use the 'name:' option and give each sensor a unique name.

Use of the Yahoo Weather API should not exceed reasonable request volume. Access is limited to 2000 signed calls per day. diff --git a/source/_components/sensor.zabbix.markdown b/source/_components/sensor.zabbix.markdown index daf65e1a784..ed84c99a14f 100644 --- a/source/_components/sensor.zabbix.markdown +++ b/source/_components/sensor.zabbix.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Zabbix Sensor" -description: "Instructions how to integrate Zabbix Triggers sensors within Home Assistant." +description: "Instructions on how to integrate Zabbix Triggers sensors within Home Assistant." date: 2016-12-13 22:57 sidebar: true comments: false @@ -35,6 +35,6 @@ Configuration variables: - **triggers** array(*Required*): Specifies that this sensor is for Zabbix 'triggers'. In the future there will be other Zabbix sensors. - **name** (*Optional*): Allows you to specify the name for the Sensor, otherwise the host name, as stored in Zabbix, is used. This is useful when you are specifying a list of hostids to monitor as a single count. -- **hostids** (*Optional*): This is a list of Zabbis hostids that we want to filter our count on. +- **hostids** (*Optional*): This is a list of Zabbix hostids that we want to filter our count on. - **individual** (*Optional*): A 'true'/'false' to specify whether we should show individual sensors when a list of hostids is provided. If false, the sensor state will be the count of all triggers for the specified hosts (or all hosts within the Zabbix instance, if hostids isn't provided). diff --git a/source/_components/sensor.zamg.markdown b/source/_components/sensor.zamg.markdown index 9c6558a5693..014752a66ec 100644 --- a/source/_components/sensor.zamg.markdown +++ b/source/_components/sensor.zamg.markdown @@ -1,7 +1,7 @@ --- layout: page title: "ZAMG Sensor" -description: "Instructions how to integrate ZAMG sensors within Home Assistant." +description: "Instructions on how to integrate ZAMG sensors within Home Assistant." date: 2016-12-06 08:00 sidebar: true comments: false diff --git a/source/_components/sensor.zestimate.markdown b/source/_components/sensor.zestimate.markdown new file mode 100644 index 00000000000..ca9547e4040 --- /dev/null +++ b/source/_components/sensor.zestimate.markdown @@ -0,0 +1,58 @@ +--- +layout: page +title: "Zestimate" +description: "Instructions on how to integrate the Zestimate sensor into Home Assistant." +date: 2018-03-02 3:10 +sidebar: true +comments: false +sharing: true +footer: true +ha_category: Sensor +logo: zillow.png +ha_release: 0.65 +ha_iot_class: "Cloud Polling" +--- + +The `zestimate` sensor allows one to track the Zestimate value of properties using the [Zillow API](https://www.zillow.com/howto/api/APIOverview.htm). + +## {% linkable_title Configuration %} + +You will need to sign up for the Zillow API at the following link [Zillow API](https://www.zillow.com/howto/api/APIOverview.htm). You will also need the Zillow property ID for each property you'd like to track. This information is available from the URL of a property you are interested in. + +For example, the White House zpid is 84074482 and can be found in it's Zillow URL: [https://www.zillow.com/homedetails/1600-Pennsylvania-Ave-NW-Washington-DC-20006/84074482_zpid/](https://www.zillow.com/homedetails/1600-Pennsylvania-Ave-NW-Washington-DC-20006/84074482_zpid/) + +To enable this sensor, add the following lines to your `configuration.yaml`. + +```yaml +sensor: + - platform: zestimate + api_key: YOUR_API_KEY + zpid: + - YOUR_ZPID_1 + - YOUR_ZPID_2 +``` + +{% configuration %} +api_key: + description: The API key to access the service. + required: true + type: string +zpid: + description: Property IDs to track in the front end. + required: true + type: list +{% endconfiguration %} + +### {% linkable_title Additional Attributes %} + +The following additional attributes are also available via the sensor. + +These attributes are available: + +- Last update +- 30 Day change in value +- Valuation Range High +- Valuation Range Low +- Address +- Currency +- Amount diff --git a/source/_components/sensor.zoneminder.markdown b/source/_components/sensor.zoneminder.markdown index 5ab384d0020..e60e2742058 100644 --- a/source/_components/sensor.zoneminder.markdown +++ b/source/_components/sensor.zoneminder.markdown @@ -32,3 +32,10 @@ sensor: Configuration variables: - **include_archived** (*Optional*): Whether to include archived ZoneMinder events in event counts. Default is `false`. +- **monitored_conditions** array (*Optional*): Event count sensors to display in the frontend. Default is 'all'. + - **all**: All events. + - **month**: Events in the last month. + - **week**: Events in the last week. + - **day**: Events in the last day. + - **hour**: Events in the last hour. + diff --git a/source/_components/sensor.zwave.markdown b/source/_components/sensor.zwave.markdown index 2b22c7cce9d..70fba841c58 100644 --- a/source/_components/sensor.zwave.markdown +++ b/source/_components/sensor.zwave.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Z-Wave Sensor" -description: "Instructions how to setup the Z-Wave sensors within Home Assistant." +description: "Instructions on how to setup the Z-Wave sensors within Home Assistant." date: 2015-11-15 13:00 sidebar: true comments: false diff --git a/source/_components/shell_command.markdown b/source/_components/shell_command.markdown index d9f64f8a072..07a10b1261b 100644 --- a/source/_components/shell_command.markdown +++ b/source/_components/shell_command.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Shell command" -description: "Instructions how to integrate Shell commands into Home Assistant." +description: "Instructions on how to integrate Shell commands into Home Assistant." date: 2015-10-13 19:10 sidebar: true comments: false @@ -33,6 +33,8 @@ The commands can be dynamic, using templates to insert values for arguments. Whe Any service data passed into the service call to activate the shell command will be available as a variable within the template. +`stdout` and `stderr` output from the command are both captured and will be logged by setting the [log level](/components/logger/) to debug. + ```yaml # Apply value of a GUI slider to the shell_command diff --git a/source/_components/shiftr.markdown b/source/_components/shiftr.markdown index 16ae6a53f05..a3835347043 100644 --- a/source/_components/shiftr.markdown +++ b/source/_components/shiftr.markdown @@ -15,6 +15,8 @@ ha_release: 0.48 The `shiftr` component makes it possible to transfer details collected with Home Assistant to [Shiftr.io](https://shiftr.io) and visualize the flow of the information. Keep in mind that your details will be public! +## {% linkable_title Configuration %} + Create a new [namespace](https://shiftr.io/new) and generate a new token. You will need to use `Key (Username)` and `Secret (Password)` to setup the component. To use the `shiftr` component in your installation, add the following to your `configuration.yaml` file: @@ -22,12 +24,18 @@ To use the `shiftr` component in your installation, add the following to your `c ```yaml # Example configuration.yaml entry shiftr: - username: 63d8187f - password: 32fd92de6a59c3e2 + username: YOUR_NAMESPACE_USERNAME + password: YOUR_NAMESPACE_PASSWORD ``` -Configuration variables: - -- **username** (*Required*): Username for the namespace. -- **password** (*Required*): Password for the namespace. +{% configuration %} +username: + description: Username for the Shiftr namespace. + required: true + type: string +password: + description: Password for the Shiftr namespace. + required: true + type: string +{% endconfiguration %} diff --git a/source/_components/shopping_list.markdown b/source/_components/shopping_list.markdown index c30bbd9ff6e..e99b96e7b3a 100644 --- a/source/_components/shopping_list.markdown +++ b/source/_components/shopping_list.markdown @@ -18,3 +18,18 @@ The `shopping_list` component allows you to keep track of shopping list items. I # Example configuration.yaml entry shopping_list: ``` + +### Services +You can add or remove items on your shopping list by using the following services. + +#### {% linkable_title Service `shopping_list.add_item` %} + +| Service data attribute | Optional | Description | +|------------------------|----------|--------------------------------------------------------| +| `name` | no | Name of the item to add. Example: "Beer" | + +#### {% linkable_title Service `shopping_list.complete_item` %} + +| Service data attribute | Optional | Description | +|------------------------|----------|--------------------------------------------------------| +| `name` | no | Name of the item to mark as completed. Example: "Beer" | \ No newline at end of file diff --git a/source/_components/sisyphus.markdown b/source/_components/sisyphus.markdown new file mode 100644 index 00000000000..dfec9823599 --- /dev/null +++ b/source/_components/sisyphus.markdown @@ -0,0 +1,52 @@ +--- +layout: page +title: "Sisyphus" +description: "Instructions on how to integrate your Sisyphus Kinetic Art Table within Home Assistant." +date: 2018-05-06 22:26 +sidebar: true +comments: false +sharing: true +footer: true +logo: sisyphus.png +ha_category: Hub +featured: false +ha_release: 0.75 +ha_iot_class: "Local Push" +--- + +The [Sisyphus](https://sisyphus-industries.com/) integration for Home Assistant allows you to observe and control your Sisyphus Kinetic Art Table. + +Each table appears in Home Assistant as a Light and a Media Player. + +The light can be used to sleep/wake the table or adjust the brightness of the table light. + +The media player can be used to sleep/wake the table, play/pause, move between tracks, or toggle shuffle on and off. The "volume" control adjusts the table's speed. + +There are two ways to configure this component. For the automatic discovery of your table(s), simply add the following to your `configuration.yaml`: + +```yaml +# This will auto-detect all Sisyphus tables on your local network. +sisyphus: +``` + +Auto-detection can be a little slow, so if your table has a fixed IP address or hostname, you may add a list of tables in your `configuration.yaml`. For example: + +```yaml +# This will skip auto-detection and add only the listed tables +sisyphus: + - name: 'TABLE_NAME' + host: 'TABLE_IP_OR_HOSTNAME' + - name: 'ANOTHER_TABLE_NAME' + host: 'ANOTHER_TABLE_IP_OR_HOSTNAME' +``` + +{% configuration %} +name: + description: The name by which the table should appear in Home Assistant + required: true + type: string +host: + description: The hostname or IP address of the table + required: true + type: string +{% endconfiguration %} diff --git a/source/_components/skybell.markdown b/source/_components/skybell.markdown index b160a879231..189f3a1b999 100644 --- a/source/_components/skybell.markdown +++ b/source/_components/skybell.markdown @@ -13,22 +13,30 @@ ha_release: 0.56 ha_iot_class: "Cloud Polling" --- -The `skybell` implementation allows you to integrate your [Skybell.com](https://skybell.com) doorbells in Home Assistant. +The `skybell` implementation allows you to integrate your [Skybell.com](http://www.skybell.com/) doorbells in Home Assistant. Currently only the Skybell HD is supported by this platform. -To enable devices set up with your [Skybell.com](https://skybell.com/) account, add the following to your `configuration.yaml` file: +## {% linkable_title Configuration %} + +To enable devices set up with your [Skybell.com](http://www.skybell.com/) account, add the following to your `configuration.yaml` file: ```yaml # Example configuration.yaml entry skybell: - username: you@example.com - password: secret + username: YOUR_USERNAME + password: YOUR_PASSWORD ``` -Configuration variables: - -- **username** (*Required*): The username for accessing your Skybell account. -- **password** (*Required*): The password for accessing your Skybell account. +{% configuration %} +username: + description: The username for accessing your Skybell account. + required: true + type: string +password: + description: The password for accessing your Skybell account. + required: true + type: string +{% endconfiguration %} Finish your configuration by visiting the [Skybell binary sensor](/components/binary_sensor.skybell/), [Skybell camera](/components/camera.skybell/), [Skybell light](/components/light.skybell/), [Skybell sensor](/components/sensor.skybell/), or [Skybell switch](/components/switch.skybell/) documentation. diff --git a/source/_components/sleepiq.markdown b/source/_components/sleepiq.markdown index 6527c803f0e..a3efeaa0a0c 100644 --- a/source/_components/sleepiq.markdown +++ b/source/_components/sleepiq.markdown @@ -22,11 +22,18 @@ To set it up, add the following information to your `configuration.yaml` file: ```yaml # Example configuration.yaml entry sleepiq: - username: you@example.com - password: omgsecure + username: YOUR_USERNAME + password: YOUR_PASSWORD ``` -Configuration variables: +{% configuration %} +username: + description: Your SleepIQ username (usually an e-mail address). + required: true + type: string +password: + description: Your SleepIQ password. + required: true + type: string +{% endconfiguration %} -- **username** (*Required*): Your SleepIQ username (usually an email address). -- **password** (*Required*): Your SleepIQ password. diff --git a/source/_components/smappee.markdown b/source/_components/smappee.markdown new file mode 100644 index 00000000000..c91c9d0f59c --- /dev/null +++ b/source/_components/smappee.markdown @@ -0,0 +1,59 @@ +--- +layout: page +title: "Smappee" +description: "Instructions on how to setup Smappee within Home Assistant." +date: 2018-02-26 08:37 +sidebar: true +comments: false +sharing: true +footer: true +logo: smappee.png +ha_release: "0.64" +ha_category: Hub +--- + +The `smappee` component adds support for the [Smappee](https://www.smappee.com/) controller for energy monitoring and Comport plug switches. + +Switches and Sensors are supported - and will be automatically added when you connect to the Smappee controller. + +The smappee component gets information from [Smappee API](https://smappee.atlassian.net/wiki/display/DEVAPI/API+Methods). + +## {% linkable_title Configuration %} + +Info on how to get API access is described in the [smappy wiki](https://github.com/EnergieID/smappy/wiki). + +To use the `smappee` component in your installation, add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +smappee: + host: 10.0.0.5 + client_id: YOUR_CLIENT_ID + client_secret: YOUR_CLIENT_SECRET + username: YOUR_MYSMAPPEE_USERNAME + password: YOUR_MYSMAPPEE_PASSWORD +``` + +```yaml +# Minimal example configuration.yaml entry +smappee: + host: 10.0.0.5 +``` + +```yaml +# Cloud only example configuration.yaml entry +smappee: + client_id: YOUR_CLIENT_ID + client_secret: YOUR_CLIENT_SECRET + username: YOUR_MYSMAPPEE_USERNAME + password: YOUR_MYSMAPPEE_PASSWORD +``` + +Configuration variables: + +- **host** (*Optional*): Your Local Smappee unit IP. +- **host_password** (*Optional*): Your Local Smappee password. +- **client_id** (*Optional*): Your Smappee API client_id. +- **client_secret** (*Optional*): Your Smappee API client_secret. +- **username** (*Optional*): Your My Smappee username. +- **password** (*Optional*): Your My Smappee password. diff --git a/source/_components/snips.markdown b/source/_components/snips.markdown index ef4b7d04295..825dbf19d53 100644 --- a/source/_components/snips.markdown +++ b/source/_components/snips.markdown @@ -1,8 +1,8 @@ --- layout: page title: "Snips" -description: "Instructions how to integrate Snips within Home Assistant." -date: 2017-06-22 12:00 +description: "Instructions on how to integrate Snips within Home Assistant." +date: 2018-05-02 12:00 sidebar: true comments: false sharing: true @@ -12,51 +12,77 @@ ha_category: Voice ha_release: 0.48 --- -The [Snips Voice Platform](https://www.snips.ai) allows users to add powerful voice assistants to their Raspberry Pi devices without compromising on Privacy. It runs 100% on-device, and does not require an Internet connection. It features Hotword Detection, Automatic Speech Recognition (ASR), Natural Language Understanding (NLU) and Dialog Management. +The [Snips Voice Platform](https://www.snips.ai) allows users to add powerful voice assistants to their Raspberry Pi devices without compromising on privacy. It runs 100% on-device, and does not require an internet connection. It features Hotword Detection, Automatic Speech Recognition (ASR), Natural Language Understanding (NLU) and Dialog Management. + +The latest documentation can be found here: [Snips Platform Documentation](https://snips.gitbook.io/documentation/). ![Snips Modules](/images/screenshots/snips_modules.png) -Snips takes voice or text as input, and produces *intents* as output, which are explicit representations of an intention behind an utterance, and which can subsequently be used by Home Assistant to perform appropriate actions. +Snips takes voice or text as input and produces *intents* as output, which are explicit representations of an intention behind an utterance and which can subsequently be used by Home Assistant to perform appropriate actions. ![Snips Modules](/images/screenshots/snips_nlu.png) ## {% linkable_title The Snips Voice Platform %} -### Installation +### {% linkable_title Installation %} -The Snips Voice Platform is installed on Raspberry Pi with the following command: +The Snips platform can be installed via the Snips APT/Debian repository. If you prefer to install the platform using the Docker distribution, check out our [Docker Installation Guide](https://github.com/snipsco/snips-platform-documentation/wiki/6.--Miscellaneous#using-docker). -```sh -(pi) $ curl https://install.snips.ai -sSf | sh +```bash +$ sudo apt-get update +$ sudo apt-get install -y dirmngr +$ sudo bash -c 'echo "deb https://raspbian.snips.ai/$(lsb_release -cs) stable main" > /etc/apt/sources.list.d/snips.list' +$ sudo apt-key adv --keyserver pgp.mit.edu --recv-keys D4F50CDCA10A2849 +$ sudo apt-get update +$ sudo apt-get install -y snips-platform-voice ``` -### Creating an assistant +Note: if the keyserver pgp.mit.edu is down try to use another one in the 4th line , like pgp.surfnet.nl: -

- -
- -Snips assistants are created via the [Snips Console](https://console.snips.ai). Once trained, the assistant should be downloaded and copied to the Raspberry Pi: - -```sh -$ scp assistantproj_XXX.zip pi@pi_hostname:/home/pi/assistant.zip +```bash +sudo apt-key adv --keyserver pgp.surfnet.nl --recv-keys D4F50CDCA10A2849 ``` -and installed locally via the `snips-install-assistant` helper script: +### {% linkable_title Creating an assistant %} -```sh -(pi) $ sudo snips-install-assistant assistant.zip +Head over to the [Snips Console](https://console.snips.ai) to create your assistant. Launch the training and download by clicking on the "Download Assistant" button. + +The next step is to get the assistant to work on your device. Unzip and copy the assistant folder that you downloaded from the web console to the path. Assuming your downloaded assistant folder is on your desktop, just run: + +```bash +$ scp -r ~/Desktop/assistant pi@:/home/pi/. ``` -### Running Snips +Now ssh into your Raspberry Pi: -Make sure that a microphone is plugged to the Raspberry Pi. If you are having trouble setting up audio, we have written a guide on [Raspberry Pi Audio Configuration](https://github.com/snipsco/snips-platform-documentation/wiki/1.-Setup-the-Snips-Voice-Platform-on-your-Raspberry-Pi#configuring-the-audio). +```bash +$ ssh pi@ +``` -Start the Snips Voice Platform using the `snips` command: +By default, this command is `ssh pi@raspberrypi.local`, if you are using the default Raspberry Pi hostname. -```sh -(pi) $ snips +Then, move the assistant to the right folder: + +```bash +(pi) $ sudo mv /home/pi/assistant /usr/share/snips/assistant +``` + +Note: if you already have an assistant installed and wish to replace it, start by removing the previous one, and then move the new one in its place: + +```bash +(pi) $ sudo rm -r /usr/share/snips/assistant +(pi) $ sudo mv /home/pi/assistant /usr/share/snips/assistant +``` + +### {% linkable_title Running Snips %} + +Make sure that a microphone is plugged to the Raspberry Pi. If you are having trouble setting up audio, we have written a guide on [Raspberry Pi Audio Configuration](https://snips.gitbook.io/documentation/installing-snips/on-a-raspberry-pi#2-configuration). + +Start the Snips Voice Platform by starting the `snips-*` services: + +```bash +$ sudo systemctl start "snips-*" ``` Snips is now ready to take voice commands from the microphone. To trigger the listening, simply say @@ -67,23 +93,33 @@ followed by a command, e.g. > Set the lights to green in the living room -We should see the transcribed phrase in the logs, as well as a properly parsed intent. The intent is published on MQTT, on the `hermes/nlu/intentParsed` topic. The Snips Home Assistant component subscribes to this topic, and handles the intent according to the rules defined in `configuration.yaml`, as explained below. +As the Snips Platform parses this query into an intent, it will be published on MQTT, on the `hermes/intent/` topic. The Snips Home Assistant component subscribes to this topic, and handles the intent according to the rules defined in `configuration.yaml` file, as explained below. -#### Optional: specifying an external MQTT broker +#### {% linkable_title Optional: specifying an external MQTT broker %} -By default, Snips runs its own MQTT broker. But we can also tell Snips to use an external broker by specifying this when launching Snips. In this case, instead of running the `snips` command above (which assumes we are using the internal MQTT broker), we use the full launch command with explicitly specified parameters (replace `MQTT_BROKER_IP` and `MQTT_BROKER_PORT` with appropriate values): +By default, Snips runs its own MQTT broker. But we can also tell Snips to use an external broker by specifying this when launching Snips. In this case, we need to specify this in the `/etc/snips.toml` configuration file. For more information on configuring this, see the [Using an external MQTT broker](https://snips.gitbook.io/documentation/advanced-configuration/platform-configuration) article. -```sh -$ docker run -t --rm --name snips --log-driver none -v /home/pi/.asoundrc:/root/.asoundrc -v /opt/snips/config:/opt/snips/config --privileged -v /dev/snd:/dev/snd snipsdocker/platform --mqtt MQTT_BROKER_IP:MQTT_BROKER_PORT -``` +## {% linkable_title Home Assistant configuration %} -For more details on launch options, check the documentation on [Snips Platform Commands](https://github.com/snipsco/snips-platform-documentation/wiki/6.--Learn-more:-Platform-Commands#using-a-custom-mqtt-bus). +{% configuration %} +feedback_sounds: + description: Turn on feedbacks sounds for Snips. + required: false + type: str + default: false +site_ids: + description: A list of siteIds if using multiple Snips instances. Used to make sure feedback is toggled on or off for all sites. + required: false + type: str +probability_threshold: + description: Threshold for intent probability. Range is from 0.00 to 1.00, 1 being highest match. Intents under this level are discarded. + require: false + type: float +{% endconfiguration %} -## Home Assistant configuration +### {% linkable_title Specifying the MQTT broker %} -### Specifying the MQTT broker - -Messages between Snips and Home Assistant are passed via MQTT. We must tell Home Assistant which MQTT broker to use by adding the following entry to `configuration.yaml`: +Messages between Snips and Home Assistant are passed via MQTT. We can either point Snips to the MQTT broker used by Home Assistant, as explained above, or tell Home Assistant which [MQTT broker](/docs/mqtt/) to use by adding the following entry to the `configuration.yaml` file: ```yaml mqtt: @@ -91,17 +127,23 @@ mqtt: port: MQTT_BROKER_PORT ``` -As explained above, Snips by default runs an MQTT broker on port 9898. So if we wish to use this broker, the entry will look as follows: +By default, Snips runs an MQTT broker on port 9898. So if we wish to use this broker, and if Snips and Home Assistant run on the same device, the entry will look as follows: ```yaml mqtt: broker: 127.0.0.1 port: 9898 ``` -### Triggering actions -In Home Assistant, we trigger actions based on intents produced by Snips using the [`intent_script`](/components/intent_script) component. For instance, the following block handles `ActivateLightColors` intents (included in the Snips IoT intent bundle) to change light colors: +Alternatively, MQTT can be configured to bridge messages between servers if using a custom MQTT broker such as [mosquitto](https://mosquitto.org/). +### {% linkable_title Triggering actions %} + +In Home Assistant, we trigger actions based on intents produced by Snips using the [`intent_script`](/components/intent_script) component. For instance, the following block handles a `ActivateLightColor` intent to change light colors: + +Note: If your Snips action is prefixed with a username (e.g. `john:playmusic` or `john__playmusic`), the Snips component in Home Assistant [will try and strip off the username](https://github.com/home-assistant/home-assistant/blob/c664c20165ebeb248b98716cf61e865f274a2dac/homeassistant/components/snips.py#L126-L129). Bear this in mind if you get the error `Received unknown intent` even when what you see on the MQTT bus looks correct. Internally the Snips component is trying to match the non-username version of the intent (i.e., just `playmusic`). + +{% raw %} ```yaml snips: @@ -110,6 +152,158 @@ intent_script: action: - service: light.turn_on data_template: - entity_id: light.{% raw %}{{ objectLocation | replace(" ","_") }}{% endraw %} - color_name: {% raw %}{{ objectColor }}{% endraw %} + entity_id: light.{{ objectLocation | replace(" ","_") }} + color_name: {{ objectColor }} ``` +{% endraw %} + +In the `data_template` block, we have access to special variables, corresponding to the slot names for the intent. In the present case, the `ActivateLightColor` has two slots, `objectLocation` and `objectColor`. + +### {% linkable_title Special slots %} + +Two special values for slots are populated with the siteId the intent originated from and the probability value for the intent. + +In the above example, the slots are plain strings. However, snips has a duration builtin value used for setting timers and this will be parsed to a seconds value. + +{% raw %} +```yaml +SetTimer: + speech: + type: plain + text: weather + action: + service: script.set_timer + data_template: + name: "{{ timer_name }}" + duration: "{{ timer_duration }}" + siteId: "{{ site_id }}" + probability: "{{ probability }}" +``` +{% endraw %} + + + +### {% linkable_title Sending TTS Notifications %} + +You can send TTS notifications to Snips using the snips.say and snips.say_action services. Say_action starts a session and waits for user response, "Would you like me to close the garage door?", "Yes, close the garage door". + +#### {% linkable_title Service `snips.say` %} + +| Service data attribute | Optional | Description | +|------------------------|----------|--------------------------------------------------------| +| `text` | no | Text to say. | +| `site_id` | yes | Site to use to start session. | +| `custom_data` | yes | custom data that will be included with all messages in this session. | + +#### {% linkable_title Service `snips.say_action` %} + +| Service data attribute | Optional | Description | +|------------------------|----------|--------------------------------------------------------| +| `text` | no | Text to say. | +| `site_id` | yes | Site to use to start session. | +| `custom_data` | yes | custom data that will be included with all messages in this session. | +| `can_be_enqueued` | yes | If True, session waits for an open session to end, if False session is dropped if one is running. | +| `intent_filter` | yes | Array of Strings - A list of intents names to restrict the NLU resolution to on the first query. | + + +### {% linkable_title Snips Support %} + +There is an active [discord](https://discordapp.com/invite/3939Kqx) channel for further support. + +### {% linkable_title Configuration Examples %} + +#### {% linkable_title Turn on a light %} + +```yaml +intent_script: + turn_on_light: + speech: + type: plain + text: 'OK, turning on the light' + action: + service: light.turn_on +``` + +##### {% linkable_title Open a Garage Door %} + +```yaml +intent_script: + OpenGarageDoor: + speech: + type: plain + text: 'OK, opening the garage door' + action: + - service: cover.open_cover + data: + entity_id: garage_door +``` + +##### {% linkable_title Intiating a query %} + +Here is a more complex example. The automation is triggered if the garage door is open for more than 10 minutes. +Snips will then ask you if you want to close it and if you respond with something like "Close the garage door" it +will do so. Unfortunately there is no builtin support for yes and no responses. + +```yaml +automation: + garage_door_has_been_open: + trigger: + - platform: state + entity_id: binary_sensor.my_garage_door_sensor + from: 'off' + to: 'on' + for: + minutes: 10 + sequence: + service: snips.say_action + data: + text: 'Garage door has been open 10 minutes, would you like me to close it?' + intentFilter: + - closeGarageDoor + +# This intent is fired if the user responds with the appropriate intent after the above notification +intent_script: + closeGarageDoor: + speech: + type: plain + text: 'OK, closing the garage door' + action: + - service: script.garage_door_close +``` + +##### {% linkable_title Weather %} + +So now you can open and close your garage door, let's check the weather. Add the Weather by Snips Skill to your assistant. Create a weather sensor, in this example [Dark Sk](/components/sensor.darksky/) and the `api_key` in the `secrets.yaml` file. + +```yaml +- platform: darksky + name: "Dark Sky Weather" + api_key: !secret dark_sky_key + update_interval: + minutes: 10 + monitored_conditions: + - summary + - hourly_summary + - temperature + - temperature_max + - temperature_min +``` + +Then add this to your configuration file. + +{% raw %} +```yaml +intent_script: + searchWeatherForecast: + speech: + type: plain + text: > + The weather is currently + {{ states('sensor.dark_sky_weather_temperature') | round(0) }} + degrees outside and {{ states('sensor.dark_sky_weather_summary') }}. + The high today will be + {{ states('sensor.dark_sky_weather_daily_high_temperature') | round(0)}} + and {{ states('sensor.dark_sky_weather_hourly_summary') }} +``` +{% endraw %} + diff --git a/source/_components/media_player.sonos.markdown b/source/_components/sonos.markdown similarity index 73% rename from source/_components/media_player.sonos.markdown rename to source/_components/sonos.markdown index 9f54fa81732..5d3c70c88f7 100644 --- a/source/_components/media_player.sonos.markdown +++ b/source/_components/sonos.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Sonos" -description: "Instructions how to integrate Sonos devices into Home Assistant." +description: "Instructions on how to integrate Sonos devices into Home Assistant." date: 2015-09-12 13:00 sidebar: true comments: false @@ -12,48 +12,16 @@ ha_category: Media Player featured: true ha_release: 0.7.3 ha_iot_class: "Local Polling" +redirect_from: /components/media_player.sonos/ --- -The `sonos` platform allows you to control your [Sonos](http://www.sonos.com) HiFi wireless speakers and audio components from Home Assistant. By default it supports auto-discovery provided by Home Assistant, and you don't need to add anything to your `configuration.yaml`. Alternatively, there are some manual configuration options, listed as follows: +The `sonos` component allows you to control your [Sonos](https://www.sonos.com) HiFi wireless speakers and audio components from Home Assistant. By default it supports auto-discovery provided by Home Assistant, and you don't need to add anything to your `configuration.yaml`. -To add your Sonos components to your installation, add the following to your `configuration.yaml` file. It will perform Sonos auto-discovery of your connected speakers. +If you don't have the discovery component enabled, you can configure the Sonos component by going to the integrations page inside the config panel. -```yaml -# Example configuration.yaml entry using Sonos discovery -media_player: - - platform: sonos -``` +## {% linkable_title Services %} - -If you have multiple network devices, you can provide the IP address of the device that should be used for Sonos auto-discovery. - -```yaml -# Example configuration.yaml entry using Sonos discovery on a specific interface -media_player: - - platform: sonos - interface_addr: 192.0.2.1 -``` - -You can also specify one or more hosts to connect to if they cannot be found with Sonos auto-discovery. - -```yaml -# Example configuration.yaml entry with manually specified addresses -media_player: - - platform: sonos - hosts: 192.0.2.25 -``` - -or, for multiple hosts: - -```yaml -# Example configuration.yaml entry with manually specified addresses -media_player: - - platform: sonos - hosts: - - 192.0.2.25 - - 192.0.2.26 - - 192.0.2.27 -``` +Sonos makes various services available to allow configuring groups. They are currently registered under the media player component. ### {% linkable_title Service `sonos_snapshot` %} @@ -93,7 +61,7 @@ Remove one or more speakers from a group of speakers. If no `entity_id` is provi ### {% linkable_title Service `sonos_set_sleep_timer` %} Sets a timer that will turn off a speaker by tapering the volume down to 0 after a certain amount of time. Protip: If you set the sleep_time value to 0, then the speaker will immediately start tapering the volume down. - + | Service data attribute | Optional | Description | | ---------------------- | -------- | ----------- | | `entity_id` | no | String or list of `entity_id`s that will have their timers set. Must be a coordinator speaker. @@ -102,15 +70,15 @@ Sets a timer that will turn off a speaker by tapering the volume down to 0 after ### {% linkable_title Service `sonos_clear_sleep_timer` %} Clear the sleep timer on a speaker, if one is set. - + | Service data attribute | Optional | Description | | ---------------------- | -------- | ----------- | | `entity_id` | no | String or list of `entity_id`s that will have their timers cleared. Must be a coordinator speaker. ### {% linkable_title Service `sonos_update_alarm` %} -Update an existing sonos alarm. - +Update an existing Sonos alarm. + | Service data attribute | Optional | Description | | ---------------------- | -------- | ----------- | | `entity_id` | no | String or list of `entity_id`s that will have their timers cleared. Must be a coordinator speaker. @@ -118,4 +86,51 @@ Update an existing sonos alarm. | `time` | yes | Time to set the alarm. | `volume` | yes | Float for volume level. | `enabled` | yes | Boolean for whether or not to enable this alarm. -| `include_linked_zones` | yes | Boolean that defines if the alarm also plays on grouped players. +| `include_linked_zones` | yes | Boolean that defines if the alarm also plays on grouped players. + +### {% linkable_title Service `sonos_set_option` %} + +Set Sonos speaker options. + +Night Sound and Speech Enhancement modes are only supported on Sonos PLAYBAR and PLAYBASE speakers when playing from the TV source. Other speaker types will ignore these options. + +| Service data attribute | Optional | Description | +| ---------------------- | -------- | ----------- | +| `entity_id` | no | String or list of `entity_id`s that will have their options set. +| `night_sound` | yes | Boolean to control Night Sound mode. +| `speech_enhance` | yes | Boolean to control Speech Enhancement mode. + + +## {% linkable_title Advanced use %} + +For advanced uses, there are some manual configuration options available. + +If you have multiple network devices, you can provide the IP address of the device that should be used for Sonos auto-discovery. + +```yaml +# Example configuration.yaml entry using Sonos discovery on a specific interface +sonos: + media_player: + interface_addr: 192.0.2.1 +``` + +You can also specify one or more hosts to connect to if they cannot be found with Sonos auto-discovery. + +```yaml +# Example configuration.yaml entry with manually specified addresses +sonos: + media_player: + hosts: 192.0.2.25 +``` + +or, for multiple hosts: + +```yaml +# Example configuration.yaml entry with manually specified addresses +sonos: + media_player: + hosts: + - 192.0.2.25 + - 192.0.2.26 + - 192.0.2.27 +``` diff --git a/source/_components/spaceapi.markdown b/source/_components/spaceapi.markdown new file mode 100644 index 00000000000..eaf817cb351 --- /dev/null +++ b/source/_components/spaceapi.markdown @@ -0,0 +1,149 @@ +--- +layout: page +title: "SpaceAPI" +description: "Instructions on how to configure the SpaceAPI for Home Assistant." +date: 2018-05-08 09:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: spaceapi.png +ha_category: Other +ha_release: "0.70" +--- + +The `spaceapi` component allow Hackerspaces to expose information to web apps or any other application with the [SpaceAPI](http://spaceapi.net/). + +## {% linkable_title Configuration %} + +To setup the `spaceapi` component in your installation, add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +spaceapi: + space: HACKERSPACE_NAME + logo: URL_FOR_LOGO + url: URL + location: + address: ADDRESS + contact: + email: EMAIL_ADDRESS + issue_report_channels: + - email + state: + entity_id: binary_sensor.front_door +``` + +{% configuration %} +space: + description: Name of the Hackerspace. + required: true + type: string +logo: + description: URL which is publicly accessible of the logo. + required: true + type: URL +logo: + description: URL of the hackerspace's web site. + required: true + type: URL +location: + description: Location of the Hackerspace. + required: true + type: map + keys: + address: + description: The physical address of the Hackerspace. + required: true + type: String +contact: + description: Contact information of the Hackerspace. + required: true + type: map + keys: + email: + description: The email address of the Hackerspace. + required: true + type: String + irc: + description: The IRC channel of the Hackerspace + required: false + type: String + mailing_list: + description: The mailing list of the Hackerspace. + required: false + type: String + twitter: + description: The Twitter account of the Hackerspace. + required: false + type: String +issue_report_channels: + description: "The reporting channel for issues. Pick an entity from `contact:`." + required: true + type: List +state: + description: The current state of the Hackerspace. + required: true + type: list + keys: + entity_id: + description: "The `entity_id` of a binary sensor that represents the current state." + required: true + type: entity_id + icon_open: + description: The URL which is publicly accessible of the icon for the open Hackerspace. + required: false + type: URL + icon_closed: + description: The URL which is publicly accessible of the icon for the closed Hackerspace. + required: false + type: URL +sensors: + description: List of sensors to expose. + required: false + type: list + keys: + temperature: + description: List of temperature sensors. + required: true + type: entity_id + humidity: + description: List of humidity sensors. + required: true + type: entity_id +{% endconfiguration %} + +## {% linkable_title Examples %} + +In this section you find some real life examples of how to use this component. + +### {% linkable_title Eastermundigen %} + +A possible configuration entry for [Eastermundigen](http://www.eastermundigen.ch/), a Hackerspace in Switzerland, could look like this. + +```yaml +# Example configuration.yaml entry +spaceapi: + space: Eastermundigen + logo: https://eastermundigen.ch/logo.png + url: https://eastermundigen.ch + location: + address: "Steinbruchweg 16, 3072 Ostermundigen, Schweiz" + contact: + phone: "+41311111111" + twitter: "@eastermundigen" + email: "info@eastermundigen.ch" + issue_report_channels: + - email + state: + entity_id: binary_sensor.front_door" + icon_open: https://eastermundigen.ch/open.png + icon_closed: https://eastermundigen.ch/close.png + sensors: + temperature: + - "sensor.temperature_in" + - "sensor.temperature_out" + humidity: + - "sensor.humidity_in" + - "sensor.humidity_out" +``` diff --git a/source/_components/spc.markdown b/source/_components/spc.markdown index 15731743299..0e8819fb854 100644 --- a/source/_components/spc.markdown +++ b/source/_components/spc.markdown @@ -1,7 +1,7 @@ --- layout: page title: "SPC" -description: "Instructions how to setup Vanderbilt SPC devices within Home Assistant." +description: "Instructions on how to setup Vanderbilt SPC devices within Home Assistant." date: 2017-05-18 08:00 sidebar: true comments: false @@ -27,8 +27,8 @@ spc: Configuration variables: -- **api_url** (*Required*): URL of the SPC Web Gateway command REST API, e.g. `http://:8088`. -- **ws_url** (*Required*): URL of the SPC Web Gateway websocket, e.g. `ws://:8088`. +- **api_url** (*Required*): URL of the SPC Web Gateway command REST API, e.g., `http://:8088`. +- **ws_url** (*Required*): URL of the SPC Web Gateway websocket, e.g., `ws://:8088`. Supported sensors will be automatically discovered and added, however they will be hidden by default. diff --git a/source/_components/spider.markdown b/source/_components/spider.markdown new file mode 100644 index 00000000000..1e71b2bc281 --- /dev/null +++ b/source/_components/spider.markdown @@ -0,0 +1,45 @@ +--- +layout: page +title: "Spider" +description: "Instructions on how to setup the Spider hub within Home Assistant." +date: 2018-07-17 22:01 +sidebar: true +comments: false +sharing: true +footer: true +logo: spider.png +ha_category: Hub +ha_iot_class: "Cloud Polling" +ha_release: 0.75 +--- + +The `spider` component is the main component to integrate all [Itho Daalderop Spider](https://www.ithodaalderop.nl/spider-thermostaat) related platforms. You will need your Spider account information (username, password) to discover and control devices which are related to your account. + +## {% linkable_title Configuration %} + +To add your Spider devices into your Home Assistant installation, add the following to your `configuration.yaml` file: + +```yaml +spider: + username: YOUR_USERNAME + password: YOUR_PASSWORD +``` + +{% configuration %} +username: + description: Account username of mijn.ithodaalderop.nl + required: true + type: string +password: + description: Account password of mijn.ithodaalderop.nl + required: true + type: string +scan_interval: + description: How frequently to query for new data. Defaults to 120 seconds. + required: false + type: int +{% endconfiguration %} + +

+This component is not affiliated with Itho Daalderop Spider and retrieves data from the endpoints of the mobile application. Use at your own risk. +

diff --git a/source/_components/sun.markdown b/source/_components/sun.markdown index 8de87f43be5..91d1f7903eb 100644 --- a/source/_components/sun.markdown +++ b/source/_components/sun.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Sun" -description: "Instructions how to track the sun within Home Assistant." +description: "Instructions on how to track the sun within Home Assistant." date: 2015-01-24 14:39 sidebar: true comments: false diff --git a/source/_components/switch.abode.markdown b/source/_components/switch.abode.markdown index 8979b0e2866..2cc7d2e9777 100644 --- a/source/_components/switch.abode.markdown +++ b/source/_components/switch.abode.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Abode Switch" -description: "Instructions how to integrate Abode switches into Home Assistant." +description: "Instructions on how to integrate Abode switches into Home Assistant." date: 2017-08-26 13:28 sidebar: true comments: false diff --git a/source/_components/switch.acer_projector.markdown b/source/_components/switch.acer_projector.markdown index d9158b31528..70e1ae5499f 100644 --- a/source/_components/switch.acer_projector.markdown +++ b/source/_components/switch.acer_projector.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Acer Projector Switch" -description: "Instructions how to integrate Acer Projector switches into Home Assistant." +description: "Instructions on how to integrate Acer Projector switches into Home Assistant." date: 2016-05-07 07:00 sidebar: true comments: false diff --git a/source/_components/switch.ads.markdown b/source/_components/switch.ads.markdown new file mode 100644 index 00000000000..28396413292 --- /dev/null +++ b/source/_components/switch.ads.markdown @@ -0,0 +1,37 @@ +--- +layout: page +title: "ADS Switch" +description: "Instructions on how to set up ADS switches within Home Assistant." +date: 2017-10-25 10:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: beckhoff.png +ha_category: Switch +ha_release: "0.60" +ha_iot_class: "Local Push" +--- + +The `ads` switch platform accesses a boolean variable on the connected ADS device. The variable is identified by its name. + +To use your ADS device, you first have to set up your [ADS hub](/components/ads/) and then add the following to your `configuration.yaml` +file: + +```yaml +# Example configuration.yaml entry +switch: + - platform: ads + adsvar: .global_bool +``` + +{% configuration %} + adsvar: + required: true + description: The name of the variable which you want to access on the ADS device. + type: string + name: + required: false + description: An identifier for the switch in the frontend. + type: string +{% endconfiguration %} diff --git a/source/_components/switch.amcrest.markdown b/source/_components/switch.amcrest.markdown new file mode 100644 index 00000000000..d9ed4564b22 --- /dev/null +++ b/source/_components/switch.amcrest.markdown @@ -0,0 +1,18 @@ +--- +layout: page +title: "Amcrest IP Camera Settings" +description: "Instructions on how to integrate settings for Amcrest IP Camera as switches within Home Assistant." +date: 2018-03-08 00:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: amcrest.png +ha_category: Switch +ha_release: 0.67 +ha_iot_class: "Local Polling" +--- + +The `amcrest` switch platform lets you control settings of [Amcrest IP Camera](https://home-assistant.io/components/camera.amcrest/) through Home Assistant. + +Switches will be configured automatically. Please refer to the [component](/components/amcrest/) configuration on how to setup. diff --git a/source/_components/switch.android_ip_webcam.markdown b/source/_components/switch.android_ip_webcam.markdown index 980d363adcc..bb32b0c9f5d 100644 --- a/source/_components/switch.android_ip_webcam.markdown +++ b/source/_components/switch.android_ip_webcam.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Android IP Webcam Settings" -description: "Instructions how to integrate settings for Android IP webcam as switch within Home Assistant." +description: "Instructions on how to integrate settings for Android IP webcam as switch within Home Assistant." date: 2017-03-10 00:00 sidebar: true comments: false diff --git a/source/_components/switch.anel_pwrctrl.markdown b/source/_components/switch.anel_pwrctrl.markdown index fbd3023d3f8..c753805477c 100644 --- a/source/_components/switch.anel_pwrctrl.markdown +++ b/source/_components/switch.anel_pwrctrl.markdown @@ -1,7 +1,7 @@ --- layout: page title: "ANEL PwrCtrl Switch" -description: "Instructions how to integrate ANEL PwrCtrl switches within Home Assistant." +description: "Instructions on how to integrate ANEL PwrCtrl switches within Home Assistant." date: 2016-10-02 19:04 sidebar: true comments: false diff --git a/source/_components/switch.arduino.markdown b/source/_components/switch.arduino.markdown index bc4f76b19e3..a27907103af 100644 --- a/source/_components/switch.arduino.markdown +++ b/source/_components/switch.arduino.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Arduino Switch" -description: "Instructions how to integrate Arduino boards pins as switches within Home Assistant." +description: "Instructions on how to integrate Arduino boards pins as switches within Home Assistant." date: 2015-09-14 18:28 sidebar: true comments: false diff --git a/source/_components/switch.arest.markdown b/source/_components/switch.arest.markdown index bca17d23c5b..e0b63695371 100644 --- a/source/_components/switch.arest.markdown +++ b/source/_components/switch.arest.markdown @@ -1,7 +1,7 @@ --- layout: page title: "aREST Switch" -description: "Instructions how to integrate aREST switches within Home Assistant." +description: "Instructions on how to integrate aREST switches within Home Assistant." date: 2015-09-11 23:15 sidebar: true comments: false @@ -13,7 +13,7 @@ ha_iot_class: "Local Polling" ha_release: 0.16 --- -The `arest` switch platform allows you to toggle pins of your devices (like Arduino boards with a Ethernet/Wifi connection, ESP8266 based devices, and the Raspberry Pi) running the [aREST](http://arest.io/) RESTful framework. +The `arest` switch platform allows you to toggle pins of your devices (like Arduino boards with an Ethernet/Wifi connection, ESP8266 based devices, and the Raspberry Pi) running the [aREST](http://arest.io/) RESTful framework. To use your aREST enabled device with pins in your installation, add the following to your `configuration.yaml` file: @@ -25,6 +25,9 @@ switch: pins: 11: name: Fan + 13: + name: Switch + invert: True ``` If you want to use custom functions, then add the following to your `configuration.yaml` file: @@ -39,18 +42,39 @@ switch: function1: name: Light Desk ``` - -Configuration variables: - -- **resource** (*Required*): IP address and schema of the device that is exposing an aREST API, eg. http://192.168.1.10 (no-trailing slash) -- **name** (*Optional*): Let you overwrite the name of the device. By default *name* from the device is used. -- **pins** array (*Optional*): An array with all used pins. - - **name** (*Required*): The name of the pin to use in the frontend. - -or - -- **functions** array (*Optional*): An array with all used functions. - - **name** (*Required*): The name to use in the frontend. +{% configuration %} +resource: + description: IP address and schema of the device that is exposing an aREST API, e.g., http://192.168.1.10 (no-trailing slash) + required: true + type: string +name: + description: Let you overwrite the name of the device. By default *name* from the device is used. + required: optional + type: string +pins: + description: An array with all used pins. + required: false + type: map + keys: + name: + description: The name of the pin to use in the frontend. + required: true + type: string + invert: + description: If the logic for on/off should be inverted. + required: false + type: boolean + default: false +functions: + description: An array with all used functions. + required: false + type: map + keys: + name: + description: The name to use in the frontend. + required: true + type: string +{% endconfiguration %} You can still switch your pins with a web browser or a command line tool. Use the URL http://192.168.1.10/digital/8/1 to set pin 8 to high/on, the JSON response will give you the feedback. diff --git a/source/_components/switch.bbb_gpio.markdown b/source/_components/switch.bbb_gpio.markdown index 22feef16a6e..7b02e6a927b 100644 --- a/source/_components/switch.bbb_gpio.markdown +++ b/source/_components/switch.bbb_gpio.markdown @@ -1,7 +1,7 @@ --- layout: page title: "BeagleBone Black GPIO Switch" -description: "Instructions how to integrate the GPIO of a BeagleBone Black into Home Assistant as a switch." +description: "Instructions on how to integrate the GPIO of a BeagleBone Black into Home Assistant as a switch." date: 2017-01-14 10:00 sidebar: true comments: false diff --git a/source/_components/switch.broadlink.markdown b/source/_components/switch.broadlink.markdown index 8f733a6445b..040a06c726b 100644 --- a/source/_components/switch.broadlink.markdown +++ b/source/_components/switch.broadlink.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Broadlink RM Switch" -description: "Instructions how to have Broadlink RM switches." +description: "Instructions on how to have Broadlink RM switches." date: 2016-11-22 22:41 sidebar: true comments: false @@ -31,7 +31,7 @@ Configuration variables: - **mac** (*Required*): Device MAC address. - **timeout** (*Optional*): Timeout in seconds for the connection to the device. - **friendly_name** (*Optional*): The name used to display the switch in the frontend. -- **type** (*Required for some models*): Switch type. Choose one from: `rm`, `rm2`, `rm_mini`, `rm_pro_phicomm`, `rm2_home_plus`, `rm2_home_plus_gdt`, `rm2_pro_plus`, `rm2_pro_plus2`, `rm2_pro_plus_bl`, `rm_mini_shate`, `sp1`, `sp2`, `honeywell_sp2`, `sp3`, `spmini2`, `spminiplus` or `mp1`. +- **type** (*Required for some models*): Switch type. Choose one from: `rm`, `rm2`, `rm_mini`, `rm_pro_phicomm`, `rm2_home_plus`, `rm2_home_plus_gdt`, `rm2_pro_plus`, `rm2_pro_plus2`, `rm2_pro_plus_bl`, `rm_mini_shate`, `sp1`, `sp2`, `honeywell_sp2`, `sp3`, `spmini2`, `spminiplus` or `mp1`. `SC1` devices can be registered as `sp2`. - **switches** (*Optional*): The array that contains all switches. - **identifier** (*Required*): Name of the command switch as slug. Multiple entries are possible. - **friendly_name** (*Optional*): The name used to display the switch in the frontend. @@ -43,12 +43,12 @@ Configuration variables: - **slot_3** (*Optional*) - **slot_4** (*Optional*) -Information about how to install on Windows can be found [here](https://home-assistant.io/components/sensor.broadlink/#microsoft-windows-installation) +Information about how to install on Windows can be found [here](/components/sensor.broadlink/#microsoft-windows-installation) ### {% linkable_title How to obtain IR/RF packets? %} -Choose Call Service from the Developer Tools. Choose the service broadlink/learn_command from the list of **Available services:** and hit **CALL SERVICE**. Press the button on your remote with in 20 seconds. The packet will be printed as a persistent notification in the States page of the web interface. +Choose Call Service from the Developer Tools. Choose the service `switch.broadlink_learn_command` from the list of **Available services:** and hit **CALL SERVICE**. Press the button on your remote with in 20 seconds. The packet will be printed as a persistent notification in the States page of the web interface. Example config for `rm`, `rm2`, `rm_mini`, `rm_pro_phicomm`, `rm2_home_plus`, `rm2_home_plus_gdt`, `rm2_pro_plus`, `rm2_pro_plus2`, `rm2_pro_plus_bl` and `rm_mini_shate` devices: @@ -90,8 +90,8 @@ switch: friendly_name: "Phillips Tv" command_on: 'JgAcAB0dHB44HhweGx4cHR06HB0cHhwdHB8bHhwADQUAAAAAAAAAAAAAAAA=' command_off: 'JgAaABweOR4bHhwdHB4dHRw6HhsdHR0dOTocAA0FAAAAAAAAAAAAAAAAAAA=' -``` - +``` + Example config for `sp1`, `sp2`, `honeywell_sp2`, `sp3`, `spmini2` and `spminiplus` devices: ```yaml @@ -106,7 +106,7 @@ switch: mac: 'MAC_ADDRESS' type: sp2 friendly_name: 'Humidifier' -``` +``` Example config for `mp1` device: @@ -126,9 +126,9 @@ switch: slot_4: 'Speaker slot' ``` -### {% linkable_title Service `send_packet` %} +### {% linkable_title Service `broadlink_send_packet` %} -You can use the service broadlink/send_packet to directly send IR packets without the need to assign a switch entity for each command. +You can use the service `switch.broadlink_send_packet` to directly send IR packets without the need to assign a switch entity for each command. | Service data attribute | Optional | Description | | ---------------------- | -------- | ----------- | @@ -140,12 +140,12 @@ Example: script: tv_select_source: sequence: - - service: broadlink.send_packet_192_168_0_107 + - service: switch.broadlink_send_packet_192_168_0_107 data: - packet: + packet: - "JgCMAJSSFDYUNhQ2FBEUERQRFBEUERQ2FDYUNhQRFBEUERQRFBEUERQRFDYUERQRFBEUERQRFDYUNhQRFDYUNhQ2FDYUNhQABfWUkhQ2FDYUNhQRFBEUERQRFBEUNhQ2FDYUERQRFBEUERQRFBEUERQ2FBEUERQRFBEUERQ2FDYUERQ2FDYUNhQ2FDYUAA0FAAAAAAAAAAAAAAAA" - "JgBGAJSTFDUUNhM2ExITEhMSExITEhM2EzYTNhQRFBEUERQRFBEUNRQ2ExITNhMSExITNhMSExITEhM2ExITNhQ1FBEUNhMADQUAAA==" -``` +``` ### {% linkable_title Using E-Control Remotes %} @@ -168,7 +168,7 @@ First get or learn all the remotes you want to add to Home Assistant in E-Contro jsonSubIr jsonButton jsonIrCode - + 4. Install Requirements Run `pip install simplejson`. You must install simplejson in the same python version you will use to run the scripts. You can ensure that the current version is installed by attempting to install again and confirming that you see "Requirement already satisfied". diff --git a/source/_components/switch.command_line.markdown b/source/_components/switch.command_line.markdown index cdb5162ca2a..3f3ef8d0220 100644 --- a/source/_components/switch.command_line.markdown +++ b/source/_components/switch.command_line.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Command line Switch" -description: "Instructions how to have switches call command line commands." +description: "Instructions on how to have switches call command line commands." date: 2015-06-10 22:41 sidebar: true comments: false @@ -21,11 +21,11 @@ To enable it, add the following lines to your `configuration.yaml`: ```yaml # Example configuration.yaml entry switch: - platform: command_line - switches: - kitchen_light: - command_on: switch_command on kitchen - command_off: switch_command off kitchen + - platform: command_line + switches: + kitchen_light: + command_on: switch_command on kitchen + command_off: switch_command off kitchen ``` Configuration variables: @@ -40,7 +40,7 @@ Configuration variables: A note on `friendly_name`: -When set, the `friendly_name` had been previously used for API calls and backend configuration instead of the `object_id` ("identifier"), but [this behavior is changing](https://github.com/home-assistant/home-assistant/pull/4343) to make the `friendly_name` for display purposes only. This allows users to set an `identifier` that emphasizes uniqueness and predictability for API and config purposes but have a prettier `friendly_name` still show up in the UI. As an additional benefit, if a user wanted to change the `friendly_name` / display name (e.g. from "Kitchen Lightswitch" to "Kitchen Switch" or "Living Room Light", or remove the `friendly_name` altogether), he or she could do so without needing to change existing automations or API calls. See aREST device below for an example. +When set, the `friendly_name` had been previously used for API calls and backend configuration instead of the `object_id` ("identifier"), but [this behavior is changing](https://github.com/home-assistant/home-assistant/pull/4343) to make the `friendly_name` for display purposes only. This allows users to set an `identifier` that emphasizes uniqueness and predictability for API and config purposes but have a prettier `friendly_name` still show up in the UI. As an additional benefit, if a user wanted to change the `friendly_name` / display name (e.g., from "Kitchen Lightswitch" to "Kitchen Switch" or "Living Room Light", or remove the `friendly_name` altogether), he or she could do so without needing to change existing automations or API calls. See aREST device below for an example. ## {% linkable_title Examples %} @@ -63,7 +63,7 @@ switch: friendly_name: Kitchen Lightswitch ``` -Given this example, in the UI one would see the `friendly_name` of "Kitchen Light". However, the `identifier` is `arest_pin_four`, making the `entity_id` `switch.arest_pin_four`, which is what one would use in [`automation`](https://home-assistant.io/components/automation/) or in [API calls](https://home-assistant.io/developers/). +Given this example, in the UI one would see the `friendly_name` of "Kitchen Light". However, the `identifier` is `arest_pin_four`, making the `entity_id` `switch.arest_pin_four`, which is what one would use in [`automation`](/components/automation/) or in [API calls](/developers/). ### {% linkable_title Shutdown your local host %} @@ -85,7 +85,7 @@ switch: ### {% linkable_title Control your VLC player %} -This switch will control a local VLC media player ([Source](https://community.home-assistant.io/t/vlc-player/106)). +This switch will control a local VLC media player ([Source](https://community.home-assistant.io/t/vlc-player/106)). ```yaml diff --git a/source/_components/switch.deluge.markdown b/source/_components/switch.deluge.markdown index 738732d27cc..b9673415c39 100644 --- a/source/_components/switch.deluge.markdown +++ b/source/_components/switch.deluge.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Deluge Switch" -description: "Instructions how to integrate Deluge within Home Assistant." +description: "Instructions on how to integrate Deluge within Home Assistant." date: 2017-10-19 09:00 sidebar: true comments: false diff --git a/source/_components/switch.digitalloggers.markdown b/source/_components/switch.digitalloggers.markdown index f3142a6bbcf..c0c2272d172 100755 --- a/source/_components/switch.digitalloggers.markdown +++ b/source/_components/switch.digitalloggers.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Digital Loggers Switch" -description: "Instructions how to integrate Digital Loggers DIN III relays into Home Assistant." +description: "Instructions on how to integrate Digital Loggers DIN III relays into Home Assistant." date: 2016-10-02 10:00 sidebar: true comments: false diff --git a/source/_components/switch.dlink.markdown b/source/_components/switch.dlink.markdown index 708ba90e39c..50da6cf4a7b 100644 --- a/source/_components/switch.dlink.markdown +++ b/source/_components/switch.dlink.markdown @@ -1,7 +1,7 @@ --- layout: page title: "D-Link Switch" -description: "Instructions how to integrate D-Link switches into Home Assistant." +description: "Instructions on how to integrate D-Link switches into Home Assistant." date: 2016-02-21 09:00 sidebar: true comments: false diff --git a/source/_components/switch.doorbird.markdown b/source/_components/switch.doorbird.markdown index fc2497f9179..fcd862aa901 100644 --- a/source/_components/switch.doorbird.markdown +++ b/source/_components/switch.doorbird.markdown @@ -1,7 +1,7 @@ --- layout: page title: "DoorBird Switch" -description: "Instructions how to integrate DoorBird video doorbell relays into Home Assistant." +description: "Instructions on how to integrate DoorBird video doorbell relays into Home Assistant." date: 2017-08-06 11:30 sidebar: true comments: false @@ -30,6 +30,14 @@ switch: - open_door ``` -Configuration variables: - -- **switches** (*Required*): A list of switches to include. Possible entries are `light_on` for control of the IR array and `open_door` for control of an electronic door strike or alarm. +{% configuration %} +switches: + description: A list of switches to include. Possible entries are `light_on` for control of the IR array and `open_door` for control of an electronic door strike or alarm. + required: false + type: list + keys: + light_on: + description: Enable the IR light for 3 minutes. + open_door: + description: Activate DoorBird door relay +{% endconfiguration %} diff --git a/source/_components/switch.edimax.markdown b/source/_components/switch.edimax.markdown index 028b64d61a2..06f58328a49 100644 --- a/source/_components/switch.edimax.markdown +++ b/source/_components/switch.edimax.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Edimax Switch" -description: "Instructions how to integrate Edimax switches into Home Assistant." +description: "Instructions on how to integrate Edimax switches into Home Assistant." date: 2015-06-10 22:54 sidebar: true comments: false diff --git a/source/_components/switch.enocean.markdown b/source/_components/switch.enocean.markdown index e701d3e6f41..2676b51dbae 100644 --- a/source/_components/switch.enocean.markdown +++ b/source/_components/switch.enocean.markdown @@ -13,8 +13,7 @@ ha_release: 0.21 ha_iot_class: "Local Push" --- -An EnOcean switch can take many forms. Currently only one type has been tested: Permundo PSC234 - +An EnOcean switch can take many forms. Currently, only a few types have been tested: Permundo PSC234 and Nod On SIN-2-1-01. To use your EnOcean device, you first have to set up your [EnOcean hub](/components/enocean/) and then add the following to your `configuration.yaml` file: @@ -29,3 +28,19 @@ Configuration variables: - **id** (*Required*): The ID of the device. This is a 4 bytes long number. - **name** (*Optional*): An identifier for the switch. Default to `EnOcean Switch`. +- **channel** (*Optional*): The number of the channel (typically 0 or 1) for the output channel to switch. Default to `0`. + +```yaml +# Example entries for a switch with 2 outputs (channels), e.g., the Nod On SIN-2-1-01 +switch nodon01_0: + - platform: enocean + id: [0x05,0x04,0x03,0x02] + name: enocean_nodon01_0 + channel: 0 + +switch nodon01_1: + - platform: enocean + id: [0x05,0x04,0x03,0x02] + name: enocean_nodon01_1 + channel: 1 +``` diff --git a/source/_components/switch.eufy.markdown b/source/_components/switch.eufy.markdown new file mode 100644 index 00000000000..1a79dbd26bd --- /dev/null +++ b/source/_components/switch.eufy.markdown @@ -0,0 +1,19 @@ +--- +layout: page +title: "Eufy Switch" +description: "Instructions on how to integrate Eufy switches into Home Assistant." +date: 2018-04-09 19:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: eufy.png +ha_category: Switch +ha_iot_class: "Local Polling" +ha_release: 0.68 +--- + +The `eufy` platform allows you to control your [Eufy](http://www.eufylife.com) switches from within Home Assistant. + +They will be automatically discovered if the [Eufy](/components/eufy/) component is enabled. + diff --git a/source/_components/switch.flux.markdown b/source/_components/switch.flux.markdown index 69d3e8671e2..41df4100657 100644 --- a/source/_components/switch.flux.markdown +++ b/source/_components/switch.flux.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Flux Light Adjustment" -description: "Instructions how to have switches call command line commands." +description: "Instructions on how to have switches call command line commands." date: 2016-06-01 17:41 sidebar: true comments: false @@ -16,7 +16,9 @@ The `flux` switch platform will change the temperature of your lights similar to The component will update your lights based on the time of day. It will only affect lights that are turned on and listed in the flux configuration. -During the day (in between `start time` and `sunset time`), it will fade the lights from the `start_colortemp` to the `sunset_colortemp`. After sunset (between `sunset_time` and `stop_time`), the lights will fade from the `sunset_colortemp` to the `stop_colortemp`. If the lights are still on after the `stop_time` it will continue to change the light to the `stop_colortemp` until the light is turned off. The fade effect is created by updating the lights every periodically. +During the day (in between `start time` and `sunset time`), it will fade the lights from the `start_colortemp` to the `sunset_colortemp`. After sunset (between `sunset_time` and `stop_time`), the lights will fade from the `sunset_colortemp` to the `stop_colortemp`. If the lights are still on after the `stop_time` it will continue to change the light to the `stop_colortemp` until the light is turned off. The fade effect is created by updating the lights periodically. + +The color temperature is specified kelvin, and accepted values are between 1000 and 40000 kelvin. Lower values will seem more red, while higher will look more white. If you want to update at variable intervals, you can leave the switch turned off and use automation rules that call the service `switch._update` whenever you want the lights updated, where `` equals the `name:` property in the switch configuration. @@ -36,7 +38,7 @@ Configuration variables: - **lights** (*Required*) array: List of light entities. - **name** (*Optional*): The name to use when displaying this switch. - **start_time** (*Optional*): The start time. Default to sunrise. -- **stop_time** (*Optional*): The stop time. Defaults to 22:00. +- **stop_time** (*Optional*): The stop time. Defaults to dusk. - **start_colortemp** (*Optional*): The color temperature at the start. Defaults to `4000`. - **sunset_colortemp** (*Optional*): The sun set color temperature. Defaults to `3000`. - **stop_colortemp** (*Optional*): The color temperature at the end. Defaults to `1900`. diff --git a/source/_components/switch.fritzbox.markdown b/source/_components/switch.fritzbox.markdown new file mode 100644 index 00000000000..83657be0c88 --- /dev/null +++ b/source/_components/switch.fritzbox.markdown @@ -0,0 +1,31 @@ +--- +layout: page +title: "Fritzbox Switch" +description: "Instructions on how to integrate the AVM Fritzbox switch." +date: 2017-11-12 17:10 +sidebar: true +comments: false +sharing: true +footer: true +logo: avm.png +ha_category: Switch +ha_release: 0.68 +ha_iot_class: "Local Polling" +--- + +

+To get AVM Fritzbox switch follow the instructions for the general [Fritzbox](/components/fritzbox/). +

+ +### {% linkable_title Attributes %} + +The are several attributes that can be useful for automations and templates. + +| Attribute | Description | +| --------- | ----------- | +| `device_locked` | The state of the key lock at the device. +| `locked` | The state of the lock for configuring the device via the app or the Fritzbox web interface. +| `temperature_unit` | The unit of the temperature sensor (only available if the device support temperature sensor). +| `temperature` | The current temperature sensor reading (only available if the device supports temperature sensor). +| `total_consumption` | The total power consumption since the beginning of operation (only available if the device supports power meter function). +| `total_consumption_unit` | The unit of the total_consumption (only available if the device supports power meter function). diff --git a/source/_components/switch.fritzdect.markdown b/source/_components/switch.fritzdect.markdown index b0d3b2ee3cd..380deebdaf3 100644 --- a/source/_components/switch.fritzdect.markdown +++ b/source/_components/switch.fritzdect.markdown @@ -1,7 +1,7 @@ --- layout: page title: "AVM FRITZ!DECT Switch" -description: "Instructions how to integrate your AVM FRITZ!DECT switches into Home Assistant." +description: "Instructions on how to integrate your AVM FRITZ!DECT switches into Home Assistant." date: 2017-01-24 21:00 sidebar: true comments: false @@ -23,7 +23,7 @@ Supported devices (tested): Supported Firmwares (tested): - FRITZ!OS: 06.80 / FRITZ!DECT: 03.83 -- FRITZ!OS: 06.60 / FRITZ!DECT: 03.83 +- FRITZ!OS: 06.98-51288 (Beta) / FRITZ!DECT: 03.87 To use your AVM FRITZ!DECT switch(es) in your installation, add the following to your `configuration.yaml` file: @@ -35,12 +35,23 @@ switch: password: YOUR_PASSWORD ``` -Configuration variables: - -- **username** (*Required*): The username for your Fritz!Box. -- **password** (*Required*): The password for your Fritz!Box. -- **host** (*Optional*): The IP address/hostname of your Fritz!Box. Defaults to `fritz.box`. +{% configuration %} +username: + description: The username for your Fritz!Box. + required: true + type: string +password: + description: The password for your Fritz!Box. + required: true + type: string +host: + description: The IP address/hostname of your Fritz!Box. + required: false + type: string + default: fritz.box +{% endconfiguration %} +It is recommended to create a dedicated user for Home Assistant and only allow access to "Smart Home".

If this component throws an error when starting home-assistant you should check if all actors are plugged in and connected to the FritzBox. Inactive actors that are not deleted from FritzBox configuration might lead to errors. diff --git a/source/_components/switch.gc100.markdown b/source/_components/switch.gc100.markdown index 9fcf7217b66..59649d72d15 100644 --- a/source/_components/switch.gc100.markdown +++ b/source/_components/switch.gc100.markdown @@ -1,7 +1,7 @@ --- layout: page title: gc100 Switch -description: "Instructions on how to set up an gc100 switch within Home Assistant." +description: "Instructions on how to set up a gc100 switch within Home Assistant." date: 2017-10-27 17:26 sidebar: true comments: false diff --git a/source/_components/switch.hikvisioncam.markdown b/source/_components/switch.hikvisioncam.markdown index 85249cd681e..64fc873989b 100644 --- a/source/_components/switch.hikvisioncam.markdown +++ b/source/_components/switch.hikvisioncam.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Hikvision Camera Switch" -description: "Instructions how to integrate Hikvision camera switches into Home Assistant." +description: "Instructions on how to integrate Hikvision camera switches into Home Assistant." date: 2015-06-10 22:54 sidebar: true comments: false diff --git a/source/_components/switch.hive.markdown b/source/_components/switch.hive.markdown index 8f7d8677221..e4ea4837975 100644 --- a/source/_components/switch.hive.markdown +++ b/source/_components/switch.hive.markdown @@ -14,10 +14,11 @@ ha_iot_class: "Cloud Polling" --- -The 'hive' switch component integrates your Hive plugs into Home Assistant, enabling control of your devices. +The `hive` switch platform integrates your Hive plugs into Home Assistant, enabling control of your devices. -The Hive switch component supports the following Hive products: -- **Hive Active Plug** +The platform supports the following Hive products: + +- Hive Active Plug

diff --git a/source/_components/switch.homekit_controller.markdown b/source/_components/switch.homekit_controller.markdown new file mode 100644 index 00000000000..43bf3be57b1 --- /dev/null +++ b/source/_components/switch.homekit_controller.markdown @@ -0,0 +1,16 @@ +--- +layout: page +title: "HomeKit Switch" +description: "Instructions on how to setup HomeKit switches within Home Assistant." +date: 2017-03-19 21:08 +sidebar: true +comments: false +sharing: true +footer: true +logo: apple-homekit.png +ha_category: Light +ha_iot_class: "Local Polling" +ha_release: 0.68 +--- + +To get your HomeKit switches working with Home Assistant, follow the instructions for the general [HomeKit controller component](/components/homekit_controller/). diff --git a/source/_components/switch.homematic.markdown b/source/_components/switch.homematic.markdown index 3e3fd7e8788..7902ae4974d 100644 --- a/source/_components/switch.homematic.markdown +++ b/source/_components/switch.homematic.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Homematic Switch" -description: "Instructions how to integrate Homematic switches within Home Assistant." +description: "Instructions on how to integrate Homematic switches within Home Assistant." date: 2016-06-28 08:30 sidebar: true comments: false diff --git a/source/_components/switch.homematicip_cloud.markdown b/source/_components/switch.homematicip_cloud.markdown new file mode 100644 index 00000000000..aba47287c25 --- /dev/null +++ b/source/_components/switch.homematicip_cloud.markdown @@ -0,0 +1,21 @@ +--- +layout: page +title: "HomematicIP Cloud Switch" +description: "Instructions on how to integrate HomematicIP switches within Home Assistant." +date: 2018-04-02 13:40 +sidebar: true +comments: false +sharing: true +footer: true +logo: homematicip_cloud.png +ha_category: Switch +ha_release: 0.70 +ha_iot_class: "Cloud Push" +--- + +The `homematicip_cloud` switch platform allows you to control +[HomematicIP](http://www.homematic-ip.com) switches through Home Assistant. + +Devices will be configured automatically. Please refer to the +[component](/components/homematicip_cloud/) configuration on how to setup +HomematicIP Cloud. diff --git a/source/_components/switch.hook.markdown b/source/_components/switch.hook.markdown index 42903c50c7a..fbfeef75b4b 100644 --- a/source/_components/switch.hook.markdown +++ b/source/_components/switch.hook.markdown @@ -20,21 +20,44 @@ In short, Hook is an RF to Wi-Fi bridge, controlling devices that receive comman Hook provides a simple [REST API](https://app.swaggerhub.com/api/rahilj/GetHook_RestAPI/v1). This Home Assistant component reads in devices that have been set up in the official app. +## {% linkable_title Configuration %} + Configure with either your username/password or your API token for the official app. +To enable this platform in your installation, add the following to your `configuration.yaml` file: + ```yaml # Example configuration.yaml entry -- platform: hook - username: - password: !secret hook +switch: + - platform: hook + username: YOUR_E_MAIL_ADDRESS + password: YOUR_HOOK ``` + Or + ```yaml # Example configuration.yaml entry -- platform: hook - token: +switch: + - platform: hook + token: YOUR_API_TOKEN ``` +{% configuration %} +username: + description: The email address associated with your Hook Smart Home Hub. + required: true + type: string +password: + description: The password for your Hook Smart Home Hub. + required: true + type: string +token: + description: The API token for your Hook Smart Home Hub. + required: true + type: string +{% endconfiguration %} + Extra debug logging is available, if you need it. ```yaml diff --git a/source/_components/switch.hydrawise.markdown b/source/_components/switch.hydrawise.markdown new file mode 100644 index 00000000000..b1ebab81998 --- /dev/null +++ b/source/_components/switch.hydrawise.markdown @@ -0,0 +1,65 @@ +--- +layout: page +title: "Hunter Hydrawise Switch" +description: "Instructions on how to integrate your Hunter Hydrawise Wi-Fi irrigation control system within Home Assistant." +date: 2018-04-11 08:02 +sidebar: true +comments: false +sharing: true +footer: true +logo: hydrawise_logo.png +ha_category: Switch +ha_release: 0.71 +ha_iot_class: Cloud Polling +--- + +Before setting up the [Hunter Hydrawise](https://hydrawise.com) switches please follow the instructions for setting up the [Hydrawise hub](/components/hydrawise) component. + +Once you have enabled the `hydrawise` component, add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +switch: + - platform: hydrawise +``` + +{% configuration %} +watering_minutes: + description: When manual watering is enabled this will determine the length of time in minutes that irrigation zone will run. The allowed values are 5, 10, 15, 30, 45, or 60. + required: false + type: int + default: 15 +monitored_conditions: + description: Selects the set of switches that should be enabled on the frontend. Also sets the length of time a zone will run under manual control. + required: false + type: list + default: All switches are enabled. + keys: + auto_watering: + description: Enables the Smart Watering features for this zone. + manual_watering: + description: Enables the manual watering control for this zone. +{% endconfiguration %} + +### {% linkable_title Switch Operation %} + +When `auto_watering` is `on` the irrigation zone will follow the Smart Watering schedule set through the Hydrawise [mobile or web app](https://www.hydrawise.com). When the `auto_watering` switch is `off` the zone's Smart Watering schedule is suspended for 1 year. + +When `manual_watering` is `on` the zone will run for the amount of time set by `watering_minutes`. + +```yaml +# An example that enables all the switches, and sets the manual watering time to 20 minutes. +switch: + - platform: hydrawise + watering_minutes: 20 +``` + +```yaml +# An example that enables only the manual control switches. +switch: + - platform: hydrawise + monitored_conditions: manual_watering +``` + + +Finish the configuration by visiting the [Hydrawise binary sensor](/components/binary_sensor.hydrawise) and [Hydrawise sensor](/components/sensor.hydrawise/) documentation. diff --git a/source/_components/switch.ihc.markdown b/source/_components/switch.ihc.markdown new file mode 100644 index 00000000000..67abf63932f --- /dev/null +++ b/source/_components/switch.ihc.markdown @@ -0,0 +1,56 @@ +--- +layout: page +title: "IHC Switch" +description: "Instructions on how to integrate IHC switches within Home Assistant." +date: 2017-11-27 13:35 +sidebar: true +comments: false +sharing: true +footer: true +logo: ihc.png +ha_category: Switch +ha_release: 0.62 +ha_iot_class: "Local Push" +--- + +Before you can use the IHC Switch platform, you must setup the [IHC Component](/components/ihc/) + +When auto setup is enabled the following products will be found in the ihc project and setup as switch devices: + +* Wireless plug outlet +* Wireless relay +* Mobile wireless relay +* Dataline plug outlet + +To manually configure IHC switches insert this section in your configuration: + +```yaml +switch: + - platform: ihc + auto_setup: True + switches: + - id: 12345 + name: myswitch + - id: 12346 + .... +``` + +{% configuration %} +switches: + description: List of switches to setup manually + required: false + type: map + keys: + id: + description: The IHC resource id. + required: true + type: int + name: + description: The name of the component + required: false + type: string +{% endconfiguration %} + +The resource id should be a boolean resource. (On/Off) +For more information about IHC resource ids see [Manual Setup](/components/ihc/#manual-setup) + diff --git a/source/_components/switch.insteon_local.markdown b/source/_components/switch.insteon_local.markdown index 0200b5cd439..d465cae2fe5 100644 --- a/source/_components/switch.insteon_local.markdown +++ b/source/_components/switch.insteon_local.markdown @@ -1,7 +1,7 @@ --- layout: page -title: "Insteon (Local) Switch" -description: "Instructions how to setup the Insteon Hub switches locally within Home Assistant." +title: "Insteon (local) Switch" +description: "Instructions on how to setup the Insteon Hub switches locally within Home Assistant." date: 2016-12-18 08:00 sidebar: true comments: false @@ -9,25 +9,9 @@ sharing: true footer: true logo: insteon.png ha_category: Switch -ha_version: 0.36 +ha_release: 0.36 --- The `insteon_local` switch component lets you control your switches connected to an [Insteon Hub](http://www.insteon.com/insteon-hub/) with Home Assistant. -To integrate add a switch, configure your hub Insteon(local) with Home Assistant, add the following section to your `configuration.yaml` file: -```yaml -# Example configuration.yaml platform entry -insteon_local: - host: YOUR HUB IP - username: YOUR HUB USERNAME - password: YOUR HUB PASSWORD - timeout: 10 - port: 25105 -``` - -To add switches to your set-up, add the platform to your light configuration: -```yaml -switch: - - platform: insteon_local -``` - +To get your Insteon switches working with Home Assistant, follow the instructions for the general [Insteon local component](/components/insteon_local/). The switches will be automatically discovered and added to Home Assistant. The device names will be the Insteon address of the switch. diff --git a/source/_components/switch.insteon_plm.markdown b/source/_components/switch.insteon_plm.markdown index 2e32a561603..39f7d1235dc 100644 --- a/source/_components/switch.insteon_plm.markdown +++ b/source/_components/switch.insteon_plm.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Insteon PLM Switch" -description: "Instructions how to setup the Insteon PLM switches locally within Home Assistant." +description: "Instructions on how to setup the Insteon PLM switches locally within Home Assistant." date: 2017-02-19 17:00 sidebar: true comments: false @@ -10,13 +10,7 @@ footer: true logo: insteon.png ha_category: Switch ha_iot_class: "Local Push" -ha_version: 0.39 +ha_release: 0.39 --- -The `insteon_plm` switch platform lets you control your switches through -an INSTEON PowerLinc Modem (PLM) device connected directly to your system on a -USB or serial port. To add support, set up the primary [insteon_plm] -component. - -[insteon_plm]: /components/insteon_plm/ - +The `insteon_plm` switch platform lets you control your on/off switches through an INSTEON PowerLinc Modem (PLM) device connected directly to your system on a USB or serial port. To add support, set up the primary [insteon_plm](/components/insteon_plm/) component. diff --git a/source/_components/switch.isy994.markdown b/source/_components/switch.isy994.markdown index e5b4249dd67..eacf1a002dd 100644 --- a/source/_components/switch.isy994.markdown +++ b/source/_components/switch.isy994.markdown @@ -1,7 +1,7 @@ --- layout: page title: "ISY994 Switch" -description: "Instructions how to integrate ISY994 switch into Home Assistant." +description: "Instructions on how to integrate ISY994 switch into Home Assistant." date: 2016-09-03 23:00 sidebar: true comments: false diff --git a/source/_components/switch.kankun.markdown b/source/_components/switch.kankun.markdown index 03c5a217ed9..919b798f9d1 100644 --- a/source/_components/switch.kankun.markdown +++ b/source/_components/switch.kankun.markdown @@ -15,7 +15,7 @@ ha_iot_class: "Local Polling" The `kankun` switch platform allows you to toggle customized Kankun SP3 Wifi switches. Switches are modified to include the [json.cgi](https://github.com/homedash/kankun-json/blob/master/cgi-bin/json.cgi) -script to provide a HTTP API. Details of the necessary modifications can be found +script to provide an HTTP API. Details of the necessary modifications can be found [here](http://www.homeautomationforgeeks.com/openhab_http.shtml#kankun) (be sure to install the JSON version of the script as linked above). diff --git a/source/_components/switch.konnected.markdown b/source/_components/switch.konnected.markdown new file mode 100644 index 00000000000..8eecdd41801 --- /dev/null +++ b/source/_components/switch.konnected.markdown @@ -0,0 +1,19 @@ +--- +layout: page +title: "Konnected Switch" +description: "Connect wired actuators to Home Assistant with Konnected and a NodeMCU ESP8266" +date: 2018-04-03 12:30 +sidebar: true +comments: false +sharing: true +footer: true +logo: konnected.png +ha_category: Switch +ha_release: "0.70" +ha_iot_class: "Local Push" +--- + +The `konnected` switch platform allows you to actuate an alarm system siren, strobe light, buzzer or any other wired device using a [Konnected Alarm Panel board](https://konnected.io) or relay module and a NodeMCU ESP8266 WiFi module running the [open source Konnected software](https://github.com/konnected-io/konnected-security). + +See the [`konnected`](/components/konnected/) component for configuration and setup instructions. + diff --git a/source/_components/switch.litejet.markdown b/source/_components/switch.litejet.markdown index 22c4d9d65f5..34f90d9badb 100644 --- a/source/_components/switch.litejet.markdown +++ b/source/_components/switch.litejet.markdown @@ -1,7 +1,7 @@ --- layout: page title: "LiteJet Switch" -description: "Instructions how to setup the LiteJet switches within Home Assistant." +description: "Instructions on how to setup the LiteJet switches within Home Assistant." date: 2016-10-26 13:00 sidebar: true comments: false diff --git a/source/_components/switch.lutron_caseta.markdown b/source/_components/switch.lutron_caseta.markdown index 428006a56fb..100e044b1bd 100644 --- a/source/_components/switch.lutron_caseta.markdown +++ b/source/_components/switch.lutron_caseta.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Lutron Caseta Switch" -description: "Instructions how to setup the Lutron Caseta switches within Home Assistant." +description: "Instructions on how to setup the Lutron Caseta switches within Home Assistant." date: 2017-04-30 09:00 sidebar: true comments: false diff --git a/source/_components/switch.markdown b/source/_components/switch.markdown index 73a98c47c13..6e93003ceeb 100644 --- a/source/_components/switch.markdown +++ b/source/_components/switch.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Switches" -description: "Instructions how to setup your switches with Home Assistant." +description: "Instructions on how to setup your switches with Home Assistant." date: 2015-01-24 14:39 sidebar: true comments: false @@ -12,11 +12,11 @@ footer: true Keeps track which switches are in your environment, their state and allows you to control them. * Maintains a state per switch and a combined state `all_switches`. - * Registers services `switch/turn_on`, `switch/turn_off`, and `switch/toggle` to control switches. + * Registers services `switch.turn_on`, `switch.turn_off`, and `switch.toggle` to control switches. ### {% linkable_title Use the services %} -Go the **Developer Tools**, then to **Call Service** in the frontend, and choose `switch/turn_on` or `switch/turn_off` from the list of available services (**Available services:** on the left). Enter something like the sample below into the **Service Data** field and hit **CALL SERVICE**. +In the frontend open the sidebar. At the bottom, under **Developer Tools**, click **Services**. From the Service dropdown menu choose `switch.turn_on` or `switch.turn_off` from the list of available services. In the Entity dropdown menu choose or enter the entity ID you want to work with. This will enter something like the sample below into the **Service Data** field. Now hit **CALL SERVICE**. ```json {"entity_id":"livingroom_pin2"} @@ -24,4 +24,4 @@ Go the **Developer Tools**, then to **Call Service** in the frontend, and choose | Service data attribute | Optional | Description | | ---------------------- | -------- | ----------- | -| `entity_id` | yes | Only act on specific switch. Else targets all. +| `entity_id` | yes | Only act on a specific switch. Otherwise it targets all switches. diff --git a/source/_components/switch.mfi.markdown b/source/_components/switch.mfi.markdown index 62f6ed84d28..f82e5802579 100644 --- a/source/_components/switch.mfi.markdown +++ b/source/_components/switch.mfi.markdown @@ -1,7 +1,7 @@ --- layout: page title: "mFi Switch" -description: "Instructions how to integrate mFi switches within Home Assistant." +description: "Instructions on how to integrate mFi switches within Home Assistant." date: 2016-02-07 10:00 sidebar: true comments: false @@ -15,15 +15,17 @@ ha_iot_class: "Local Polling" The `mfi` switch platform to allow you to control [mFi Controllable Power Outlets](https://www.ubnt.com/mfi/mpower/). +## {% linkable_title Configuration %} + To add this platform to your installation, add the following to your `configuration.yaml` file: ```yaml # Example configuration.yaml entry switch: - platform: mfi - host: IP_ADDRESS - username: USERNAME - password: PASSWORD + host: IP_ADDRESS_OF_SWITCH + username: YOUR_USERNAME + password: YOUR_PASSWORD ``` Configuration variables: diff --git a/source/_components/switch.mochad.markdown b/source/_components/switch.mochad.markdown index 383e91bacd8..a1d7569ec17 100644 --- a/source/_components/switch.mochad.markdown +++ b/source/_components/switch.mochad.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Mochad Switch" -description: "Instructions how to integrate X10 Mochad switches into Home Assistant." +description: "Instructions on how to integrate X10 Mochad switches into Home Assistant." date: 2016-10-20 21:13 sidebar: true comments: false @@ -14,10 +14,12 @@ ha_release: 0.32 The `mochad` switch platform lets you control an X10 enabled switch device. +## {% linkable_title Configuration %} + To enable this sensor, you first have to set up the [mochad component](/components/mochad/) and then add the following to your `configuration.yaml` file: ```yaml -# Example configuration.yml entry +# Example configuration.yaml entry switch: - platform: mochad devices: @@ -31,3 +33,5 @@ Configuration variables: - **name** (*Optional*): The name of the switch. Default is: x10_switch_dev_*address*. - **comm_type** (*Optional*): pl (powerline) or rf (radio frequency). Default is pl. + + diff --git a/source/_components/switch.modbus.markdown b/source/_components/switch.modbus.markdown index bac21bbd812..3bf176c125d 100644 --- a/source/_components/switch.modbus.markdown +++ b/source/_components/switch.modbus.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Modbus Switch" -description: "Instructions how to integrate Modbus switches into Home Assistant." +description: "Instructions on how to integrate Modbus switches into Home Assistant." date: 2015-08-30 23:38 sidebar: true comments: false @@ -16,10 +16,12 @@ ha_iot_class: "Local Push" The `modbus` switch platform allows you to control [Modbus](http://www.modbus.org/) coils or registers. +## {% linkable_title Configuration %} + To use your Modbus switches in your installation, add the following to your `configuration.yaml` file: ```yaml -# Example configuration.yml entry +# Example configuration.yaml entry switch: platform: modbus slave: 1 diff --git a/source/_components/switch.mqtt.markdown b/source/_components/switch.mqtt.markdown index 4ad0a6c1f87..ff824f97137 100644 --- a/source/_components/switch.mqtt.markdown +++ b/source/_components/switch.mqtt.markdown @@ -1,7 +1,7 @@ --- layout: page title: "MQTT Switch" -description: "Instructions how to integrate MQTT switches into Home Assistant." +description: "Instructions on how to integrate MQTT switches into Home Assistant." date: 2015-08-30 23:38 sidebar: true comments: false @@ -15,6 +15,8 @@ ha_iot_class: depends The `mqtt` switch platform lets you control your MQTT enabled switches. +## {% linkable_title Configuration %} + In an ideal scenario, the MQTT device will have a `state_topic` to publish state changes. If these messages are published with a `RETAIN` flag, the MQTT switch will receive an instant state update after subscription, and will start with the correct state. Otherwise, the initial state of the switch will be `false` / `off`. When a `state_topic` is not available, the switch will work in optimistic mode. In this mode, the switch will immediately change state after every command. Otherwise, the switch will wait for state confirmation from the device (message from `state_topic`). @@ -24,26 +26,84 @@ Optimistic mode can be forced, even if the `state_topic` is available. Try to en To enable this switch in your installation, add the following to your `configuration.yaml` file: ```yaml -# Example configuration.yml entry +# Example configuration.yaml entry switch: - platform: mqtt command_topic: "home/bedroom/switch1/set" ``` -Configuration variables: - -- **name** (*Optional*): The name of the switch. Default is 'MQTT Switch'. -- **state_topic** (*Optional*): The MQTT topic subscribed to receive state updates. -- **command_topic** (*Required*): The MQTT topic to publish commands to change the switch state. -- **availability_topic** (*Optional*): The MQTT topic subscribed to receive availability (online/offline) updates. -- **payload_on** (*Optional*): The payload that represents enabled state. Default is "ON". -- **payload_off** (*Optional*): The payload that represents disabled state. Default is "OFF". -- **payload_available** (*Optional*): The payload that represents the available state, e.g. 'online'. Default is "ON". -- **payload_not_available** (*Optional*): The payload that represents the unavailable state, e.g. 'offline'. Default is "OFF". -- **optimistic** (*Optional*): Flag that defines if switch works in optimistic mode. Default is `true` if no `state_topic` defined, else `false`. -- **qos** (*Optional*): The maximum QoS level of the state topic. Default is 0 and will also be used to publishing messages. -- **retain** (*Optional*): If the published message should have the retain flag on or not. -- **value_template** (*Optional*): Defines a [template](/docs/configuration/templating/#processing-incoming-data) to extract a value from the payload. +{% configuration %} +name: + description: The name to use when displaying this switch. + required: false + type: string + default: MQTT Switch +icon: + description: Icon for the switch (e.g. `mdi:radiator`). + required: false + type: string +state_topic: + description: The MQTT topic subscribed to receive state updates. + required: false + type: string +state_on: + description: The payload that represents the on state. + required: false + type: string + default: ON +state_off: + description: The payload that represents the off state. + required: false + type: string + default: OFF +command_topic: + description: The MQTT topic to publish commands to change the switch state. + required: false + type: string +availability_topic: + description: The MQTT topic subscribed to receive availability (online/offline) updates. + required: false + type: string +payload_on: + description: The payload that represents enabled state. + required: false + type: string + default: ON +payload_off: + description: The payload that represents disabled state. + required: false + type: string + default: OFF +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 +optimistic: + description: Flag that defines if switch works in optimistic mode. + required: false + type: boolean + default: "`true` if no `state_topic` defined, else `false`." +qos: + description: The maximum QoS level of the state topic. Default is 0 and will also be used to publishing messages. + required: false + type: integer + default: 0 +retain: + description: If the published message should have the retain flag on or not. + required: false + type: boolean + default: false +value_template: + description: "Defines a [template](/docs/configuration/templating/#processing-incoming-data) to extract a value from the payload." + required: false + type: string +{% endconfiguration %}

Make sure that your topic matches exactly. `some-topic/` and `some-topic` are different topics. @@ -58,7 +118,7 @@ In this section you will find some real life examples of how to use this sensor. The example below shows a full configuration for a switch. ```yaml -# Example configuration.yml entry +# Example configuration.yaml entry switch: - platform: mqtt name: "Bedroom Switch" @@ -67,6 +127,8 @@ switch: availability_topic: "home/bedroom/switch1/available" payload_on: "ON" payload_off: "OFF" + state_on: "ON" + state_off: "OFF" optimistic: false qos: 0 retain: true @@ -75,5 +137,31 @@ switch: For a check you can use the command line tools `mosquitto_pub` shipped with `mosquitto` to send MQTT messages. This allows you to operate your switch manually: ```bash -$ mosquitto_pub -h 127.0.0.1 -t home/bedroom/switch1 -m "ON" +$ mosquitto_pub -h 127.0.0.1 -t home/bedroom/switch1 -m "ON" ``` + +### {% linkable_title Set the state of a device with ESPEasy %} + +Assuming that you have flashed your ESP8266 unit with [ESPEasy](https://github.com/letscontrolit/ESPEasy). Under "Config" is a name ("Unit Name:") set for your device (here it's "bathroom"). A configuration for a "Controller" for MQTT with the protocol "OpenHAB MQTT" is present and the entries ("Controller Subscribe:" and "Controller Publish:") are adjusted to match your needs. In this example the topics are prefixed with "home". There is no further configuration needed as the [GPIOs](https://www.letscontrolit.com/wiki/index.php/GPIO) can be controlled with MQTT directly. + +Manually you can set pin 13 to high with `mosquitto_pub` or another MQTT tool: + +```bash +$ mosquitto_pub -h 127.0.0.1 -t home/bathroom/gpio/13 -m "1" +``` + +The configuration will look like the example below: + +{% raw %} +```yaml +# Example configuration.yaml entry +switch: + - platform: mqtt + name: bathroom + state_topic: "home/bathroom/gpio/13" + command_topic: "home/bathroom/gpio/13" + payload_on: "1" + payload_off: "0" +``` +{% endraw %} + diff --git a/source/_components/switch.mysensors.markdown b/source/_components/switch.mysensors.markdown index d383e68b7d8..a0fffa84e36 100644 --- a/source/_components/switch.mysensors.markdown +++ b/source/_components/switch.mysensors.markdown @@ -1,7 +1,7 @@ --- layout: page title: "MySensors Switch" -description: "Instructions how to integrate MySensors switches into Home Assistant." +description: "Instructions on how to integrate MySensors switches into Home Assistant." date: 2016-10-01 15:00 +0200 sidebar: true comments: false diff --git a/source/_components/switch.mystrom.markdown b/source/_components/switch.mystrom.markdown index 7c81252bfc9..924087adcdd 100644 --- a/source/_components/switch.mystrom.markdown +++ b/source/_components/switch.mystrom.markdown @@ -1,7 +1,7 @@ --- layout: page title: "myStrom Switch" -description: "Instructions how to integrate myStrom switches into Home Assistant." +description: "Instructions on how to integrate myStrom switches into Home Assistant." date: 2015-11-25 22:00 sidebar: true comments: false @@ -53,3 +53,20 @@ or change its state: $ curl -G -X GET http://IP_ADDRESS/relay -d 'state=1' ``` +### {% linkable_title Get the current power consumption %} + +The switch is measuring the current power consumption. To expose this as a sensor use a [`template` sensor](/components/sensor.template/). + +{% raw %} +```yaml +# Example configuration.yaml entry +sensor: + - platform: template + sensors: + power: + friendly_name: "Current Power" + unit_of_measurement: "W" + value_template: "{{ states.switch.office.attributes.current_power_w }}" +``` +{% endraw %} + diff --git a/source/_components/switch.neato.markdown b/source/_components/switch.neato.markdown index b45fa7f5f2b..2f0e1e8d1ee 100644 --- a/source/_components/switch.neato.markdown +++ b/source/_components/switch.neato.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Neato Robotics Switch" -description: "Instructions how to integrate a Neato Botvac Connected switch within Home Assistant." +description: "Instructions on how to integrate a Neato Botvac Connected switch within Home Assistant." date: 2016-10-19 17:10 sidebar: true comments: false diff --git a/source/_components/switch.netio.markdown b/source/_components/switch.netio.markdown index 57f5a5abdb1..f5c4a9742f5 100644 --- a/source/_components/switch.netio.markdown +++ b/source/_components/switch.netio.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Netio Switch" -description: "Instructions how to integrate Netio switches into Home Assistant." +description: "Instructions on how to integrate Netio switches into Home Assistant." date: 2016-09-02 19:00 sidebar: true comments: false diff --git a/source/_components/switch.orvibo.markdown b/source/_components/switch.orvibo.markdown index 30516626dfc..656bcd4a223 100644 --- a/source/_components/switch.orvibo.markdown +++ b/source/_components/switch.orvibo.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Orvibo Switch" -description: "Instructions how to integrate Orvibo sockets within Home Assistant." +description: "Instructions on how to integrate Orvibo sockets within Home Assistant." date: 2015-11-15 18:15 sidebar: true comments: false diff --git a/source/_components/switch.pilight.markdown b/source/_components/switch.pilight.markdown index 6bd48c3087f..ca2c837986d 100644 --- a/source/_components/switch.pilight.markdown +++ b/source/_components/switch.pilight.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Pilight Switch" -description: "Instructions how to have switches using 433 MHz connected to a computer running pilight." +description: "Instructions on how to have switches using 433 MHz connected to a computer running pilight." date: 2015-06-10 22:41 sidebar: true comments: false @@ -13,13 +13,14 @@ ha_release: 0.26 ha_iot_class: "Local Polling" --- - The `pilight` switch platform is issuing 433 MHz commands using [pilight](https://www.pilight.org/) to turn a 433 MHz device on or off. The Pilight Home Assistant hub has to be set up. -Additionally RF commands can be defined that trigger this switch to turn on and off. This allows you to also use the remote shipped with your 433 MHz switch without mixing up the Home Assistant states. You can even define several on/off commands, thus several RF remotes to toggle this switch. +Additionally, RF commands can be defined that trigger this switch to turn on and off. This allows you to also use the remote shipped with your 433 MHz switch without mixing up the Home Assistant states. You can even define several on/off commands, thus several RF remotes to toggle this switch. To be really sure that Home Assistant knows the actual state of your device it is recommended to use the RF remote with codes unknown to any of your 433 MHz devices. Thus you use the remote to trigger this switch to send the correct RF code to the device. +## {% linkable_title Configuration %} + To define a Pilight switch, add the following lines to your `configuration.yaml`: ```yaml @@ -42,20 +43,21 @@ Configuration variables: - **[entry]** (*Required*): Name of the command switch. Multiple entries are possible. - **on_code** (*Required*): The code to turn the device on. - **off_code** (*Required*): The code to turn the device off. - - **on_code_receive** (*Optional*): If given, this command will turn the switch on if it is received by Pilight. - - **off_code_receive** (*Optional*): If given, this command will turn the switch off if it is received by Pilight. + - **on_code_receive** (*Optional*): If given, this command will turn the switch on if it is received by pilight. + - **off_code_receive** (*Optional*): If given, this command will turn the switch off if it is received by pilight. Variables for the different codes (`on_code` and `off_code`): - **protocol** (*Required*): Protocol to use, eg. `intertechno_old` or `daycom`. - **systemcode** (*Optional*): The systemcode of the device. -- **unit** (*Optional*): The unit to use. +- **unit** (*Optional*): The unit to use (is equivalent to `pilight-send --unit`). +- **unitcode** (*Optional*): The unitcode to use (is equivalent to `pilight-send --unitcode`). - **id** (*Optional*): ID of the device - **state** (*Optional*): `'on'` or `'off'` has to be in apostrophes to be parsed correctly. - **'off'** (*Optional*): `1` or `0` - **'on'** (*Optional*): `1` or `0` -For possible code entries look at the [pilight API](https://www.pilight.org/development/api/). All commands allowed by [pilight-send](https://wiki.pilight.org/doku.php/psend) can be used. Which means that if for a certain protocol there are different parameters used, you should be able to replace the variables above by the proper ones required by the specific protocol. When using the `elro_800_switch` or `mumbi` protocol for example, you will have to replace the variable `unit` with `unitcode` or there will be errors occurring. +For possible code entries, look at the [pilight API](https://manual.pilight.org/development/api.html). All commands allowed by [pilight-send](https://manual.pilight.org/programs/send.html) can be used. Which means that if, for a certain protocol, there are different parameters used, you should be able to replace the variables above by the proper ones required by the specific protocol. When using the `elro_800_switch` or `mumbi` protocol, for example, you will have to replace the variable `unit` with `unitcode` or there will be errors occurring. Variables for the different receive codes (`on_code_receive` and `off_code_receive`): diff --git a/source/_components/switch.pulseaudio_loopback.markdown b/source/_components/switch.pulseaudio_loopback.markdown index 138dd949bcd..6248f9910eb 100644 --- a/source/_components/switch.pulseaudio_loopback.markdown +++ b/source/_components/switch.pulseaudio_loopback.markdown @@ -1,7 +1,7 @@ --- layout: page title: "PulseAudio Loopback Switch" -description: "Instructions how to use Pulseaudio loopback modules to build a flexible whole-home audio system." +description: "Instructions on how to use Pulseaudio loopback modules to build a flexible whole-home audio system." date: 2016-03-22 21:00:00 sidebar: true comments: false diff --git a/source/_components/switch.qwikswitch.markdown b/source/_components/switch.qwikswitch.markdown index 9b07aa24d0d..805e47d5fe5 100644 --- a/source/_components/switch.qwikswitch.markdown +++ b/source/_components/switch.qwikswitch.markdown @@ -1,7 +1,7 @@ --- layout: page title: "QwikSwitch Switch" -description: "Instructions how to integrate QwikSwitch relays into Home Assistant." +description: "Instructions on how to integrate QwikSwitch relays into Home Assistant." date: 2016-05-04 00:00 sidebar: true comments: false diff --git a/source/_components/switch.rachio.markdown b/source/_components/switch.rachio.markdown index e04bb7da70e..e24fab29fae 100644 --- a/source/_components/switch.rachio.markdown +++ b/source/_components/switch.rachio.markdown @@ -1,26 +1,25 @@ --- layout: page title: "Rachio Switch" -description: "Instructions how to use Rachio switches with Home Assistant." -date: 2017-05-29 09:00 +description: "Instructions on how to use Rachio switches with Home Assistant." +date: 2018-06-23 16:09 sidebar: true comments: false sharing: true footer: true logo: rachio.png ha_category: Switch -ha_iot_class: "Cloud Polling" +ha_iot_class: "Cloud Push" ha_release: 0.46 --- -The `rachio` switch platform allows you to control your [Rachio irrigation system](http://rachio.com/). +The `rachio` switch platform allows you to toggle zones connected to your [Rachio irrigation system](http://rachio.com/) on and off. -## {% linkable_title Getting your Rachio API Access Token %} +Once configured, a switch will be added for every zone that is enabled on every controller in the account provided, as well as a switch to toggle each controller's standby mode. -1. Log in at [https://app.rach.io/](https://app.rach.io/). -1. Click the user button at the top right. -1. Click API Access Token. -1. Copy the API access token from the dialog that opens. +

+You must have the [Rachio component](/components/rachio/) configured to use this switch. +

To add this platform to your installation, add the following to your `configuration.yaml` file: @@ -28,21 +27,23 @@ To add this platform to your installation, add the following to your `configurat # Example configuration.yaml entry switch: - platform: rachio - access_token: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx ``` Configuration variables: -- **access_token** (*Required*): Your Rachio API Access Token. - **manual_run_mins** (*Optional*): For how long, in minutes, to turn on a station when the switch is enabled. Defaults to 10 minutes. +

+**Water-saving suggestion:**
+Set `manual_run_mins` to a high maximum failsafe value when using scripts to control zones. If something goes wrong with your script, Home Assistant, or you hit the Rachio API rate limit of 1700 calls per day, the controller will still turn off the zone after this amount of time. +

+ ## {% linkable_title Examples %} -In this section you find some real life examples of how to use this switch. +In this section, you find some real-life examples of how to use this switch. ### {% linkable_title `groups.yaml` example %} - ```yaml irrigation: name: Irrigation @@ -51,35 +52,19 @@ irrigation: entities: - group.zones_front - group.zones_back + - switch.side_yard zones_front: name: Front Yard view: false entities: - - switch.driveway - switch.front_bushes - - switch.front_garden - switch.front_yard - - switch.side_yard zones_back: name: Back Yard view: false entities: - - switch.back_bushes - switch.back_garden - switch.back_porch - - switch.back_trees -``` - -### {% linkable_title iFrame %} - -If you would like to see and control more detailed zone information, create an [iFrame](/components/panel_iframe/) that renders the Rachio web app. - -```yaml -panel_iframe: - rachio: - title: Rachio - url: "https://app.rach.io" - icon: mdi:water-pump ``` diff --git a/source/_components/switch.rainbird.markdown b/source/_components/switch.rainbird.markdown index 5a8598c3021..673c4d19287 100644 --- a/source/_components/switch.rainbird.markdown +++ b/source/_components/switch.rainbird.markdown @@ -15,29 +15,28 @@ ha_iot_class: "Local Polling" This `rainbird` switch platform allows interacting with [LNK WiFi](http://www.rainbird.com/landscape/products/controllers/LNK-WiFi.htm) module of the Rain Bird Irrigation system in Home Assistant. -To enable stations as switches inside Home Assistant, add the following to your `configuration.yaml` file: +## {% linkable_title Configuration %} + +Once you have enabled the [Rain Bird component](/components/rainbird), add the following to your `configuration.yaml` file: ```yaml switch: - platform: rainbird - host: '1.1.1.1' - password: 'secretpassword' - sprinkler_1: - zone: 1 - friendly_name: "Front sprinklers" - trigger_time: 20 - scan_interval: 10 - sprinkler_2: - friendly_name: "Back sprinklers" - zone: 2 - trigger_time: 20 - scan_interval: 10 + - platform: rainbird + switches: + sprinkler_1: + zone: 1 + friendly_name: "Front sprinklers" + trigger_time: 10 + scan_interval: 10 + sprinkler_2: + friendly_name: "Back sprinklers" + zone: 2 + trigger_time: 20 + scan_interval: 10 ``` Configuration variables: -- **stickip** (*Required*): The IP address of your LNK WiFi Module. -- **password** (*Required*): The password for accessing the module. - **zone** (*Required*): Station zone identifier. - **friendly_name** (*Optional*): Just a friendly name for the station. - **trigger_time** (*Required*): The default duration to sprinkle the zone. diff --git a/source/_components/switch.raincloud.markdown b/source/_components/switch.raincloud.markdown index e5cbc2d070b..2e2af72de81 100644 --- a/source/_components/switch.raincloud.markdown +++ b/source/_components/switch.raincloud.markdown @@ -25,7 +25,7 @@ switch: Configuration variables: -- **watering_minutes** (*Optional*): Value in minutes to watering your garden via frontend. Defaults to 15. +- **watering_minutes** (*Optional*): Value in minutes to watering your garden via frontend. Defaults to 15. The values allowed are: 5, 10, 15, 30, 45, 60. - **monitored_conditions** array (*Optional*): Conditions to display in the frontend. If not specified, all conditions below will be enabled by default. The following conditions can be monitored. - **auto_watering**: Toggle the watering scheduled per zone. - **manual_watering**: Toggle manually the watering per zone. It will inherent the value in minutes specified on the RainCloud hub component. diff --git a/source/_components/switch.rainmachine.markdown b/source/_components/switch.rainmachine.markdown index 1b85b03aa42..51cba578c1e 100644 --- a/source/_components/switch.rainmachine.markdown +++ b/source/_components/switch.rainmachine.markdown @@ -1,7 +1,7 @@ --- layout: page title: "RainMachine Switch" -description: "Instructions on how to use RainMachine units with Home Assistant." +description: "Instructions on how to use RainMachine switches with Home Assistant." date: 2017-08-14 13:30 sidebar: true comments: false @@ -13,77 +13,24 @@ ha_iot_class: "Cloud Polling" ha_release: 0.51 --- -The `rainmachine` switch platform allows you to control programs and zones within -a [RainMachine smart Wi-Fi sprinkler controller](http://www.rainmachine.com/). +The `rainmachine` switch platform allows you to control programs and zones +within a [RainMachine smart Wi-Fi sprinkler controller](http://www.rainmachine.com/). -## {% linkable_title Configuring the Platform %} - -The platform allows for either local (i.e., directly across the LAN) or remote -(i.e., through RainMachine's cloud API) access; the route you choose will -dictate what your configuration should look like. - -For local access, specify the IP address/hostname of your RainMachine unit -, your RainMachine password, and optionally, the device's HTTP port: - -```yaml -switch: - platform: rainmachine - ip_address: 192.168.1.100 - password: my_password_123 -``` - -For remote access, specify your RainMachine username/email and password: - -```yaml -switch: - platform: rainmachine - email: user@host.com - password: my_password_123 -``` - -Configuration Variables: - -- **ip_address** (*Optional*): the IP address of your RainMachine unit; cannot be -used with the `email` parameter -- **email** (*Optional*): your RainMachine username/email; cannot be used with the -`ip_address` parameter -- **password** (*Required*): your RainMachine password -- **port** (*Optional*): the TCP port used by your unit for the REST API (default: 8080) -- **ssl** (*Optional*): whether communication with the local device should occur -over HTTPS (default: true) -- **zone_run_time** (*Optional*): the number of seconds that a zone should run when -turned on (default: 600) +

+You must have the [RainMachine component](https://www.home-assistant.io/components/rainmachine/) +configured to use this platform. After configuring that component, switches will +automatically appear. +

## {% linkable_title Controlling Your Device %} -After Home Assistant loads, you will see new switches for every enabled program -and zone. These work as expected: +After Home Assistant loads, new switches will be added for every enabled +program and zone. These work as expected: - Program On/Off: starts/stops a program - Zone On/Off: starts/stops a zone (using the `zone_run_time` parameter to determine how long to run for) -Programs and zones are linked. If a program is running its final zone, you will -see both the program and zone switches turned on; turning either one off will -turn the other one off (just like in the web app). - -## {% linkable_title Weblink %} - -If you would like to see and control more detailed information, create an [iFrame](/components/panel_iframe/) that renders the RainMachine web app: - -```yaml -panel_iframe: - rainmachine: - title: RainMachine - url: "https://my.rainmachine.com/s//ui/" - icon: mdi:water-pump -``` - -You can find `` by logging into [https://my.rainmachine.com](https://my.rainmachine.com ) and taking note of the URL. - -## {% linkable_title For Awareness %} - -The remote RainMachine API currently has two broken operations (i.e., they return -error codes): starting a program and stopping a program. Please note that -starting/stopping programs with the remote API is disabled until RainMachine -can fix the issue. +Programs and zones are linked. While a program is running, you will see both +the program and zone switches turned on; turning either one off will turn the +other one off (just like in the web app). diff --git a/source/_components/switch.raspihats.markdown b/source/_components/switch.raspihats.markdown index b2fa067e130..f31a33edaac 100644 --- a/source/_components/switch.raspihats.markdown +++ b/source/_components/switch.raspihats.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Raspihats Switch" -description: "Instructions how to integrate Raspihats add-on boards for Raspberry PI into Home Assistant as a switch." +description: "Instructions on how to integrate Raspihats add-on boards for Raspberry Pi into Home Assistant as a switch." date: 2017-05-15 04:20 sidebar: true comments: false @@ -89,4 +89,4 @@ It will output a table like this: 70: -- -- -- -- -- -- -- 77 ``` -For more details about the Raspihats add-on boards for Raspberry PI, visit [raspihats.com](http://www.raspihats.com/). +For more details about the Raspihats add-on boards for Raspberry Pi, visit [raspihats.com](http://www.raspihats.com/). diff --git a/source/_components/switch.rest.markdown b/source/_components/switch.rest.markdown index d9e22107b6e..65f0afcd3ee 100644 --- a/source/_components/switch.rest.markdown +++ b/source/_components/switch.rest.markdown @@ -1,7 +1,7 @@ --- layout: page title: "RESTful Switch" -description: "Instructions how to integrate REST switches into Home Assistant." +description: "Instructions on how to integrate REST switches into Home Assistant." date: 2015-09-14 19:10 sidebar: true comments: false @@ -13,9 +13,10 @@ ha_release: 0.7.6 ha_iot_class: "Local Polling" --- - The `rest` switch platform allows you to control a given endpoint that supports a [RESTful API](https://en.wikipedia.org/wiki/Representational_state_transfer). The switch can get the state via GET and set the state via POST on a given REST resource. +## {% linkable_title Configuration %} + To enable this switch, add the following lines to your `configuration.yaml` file: ```yaml @@ -25,16 +26,53 @@ switch: resource: http://IP_ADDRESS/ENDPOINT ``` -Configuration variables: - -- **resource** (*Required*): The resource or endpoint that contains the value. -- **name** (*Optional*): Name of the REST switch. -- **method** (*Optional*): HTTP method to use (`post` or `put`). Defaults to `post`. -- **username** (*Optional*): The username for accessing the REST endpoint. -- **password** (*Optional*): The password for accessing the REST endpoint. -- **body_on** (*Optional*): The body of the POST request that commands the switch to become enabled. Default is "ON". This value can be a [template](/topics/templating/). -- **body_off** (*Optional*): The body of the POST request that commands the switch to become disabled. Default is "OFF". This value can also be a [template](/topics/templating/). -- **is_on_template** (*Optional*): A [template](/docs/configuration/templating/#processing-incoming-data) that determines the state of the switch from the value returned by the GET request on the resource URL. This template should compute to a boolean (True or False). If the value is valid JSON, it will be available in the template as the variable `value_json`. Default is equivalent to `'{% raw %}{{ value_json == body_on }}{% endraw %}'`. This means that by default, the state of the switch is on if and only if the response to the GET request matches . +{% configuration %} +resource: + description: The resource or endpoint that contains the value. + required: true + type: string +method: + description: "The method of the request. Supported `post` or `put`." + required: false + type: string + default: post +name: + description: Name of the REST Switch. + required: false + type: string + default: REST Switch +timeout: + description: Timeout for the request. + required: false + type: int + default: 10 +body_on: + description: "The body of the POST request that commands the switch to become enabled. This value can be a [template](/topics/templating/)." + required: false + type: string + default: ON +body_off: + description: "The body of the POST request that commands the switch to become disabled. This value can also be a [template](/topics/templating/)." + required: false + type: string + default: OFF +is_on_template: + description: "A [template](/docs/configuration/templating/#processing-incoming-data) that determines the state of the switch from the value returned by the GET request on the resource URL. This template should compute to a boolean (True or False). If the value is valid JSON, it will be available in the template as the variable `value_json`. Default is equivalent to `'{% raw %}{{ value_json == body_on }}{% endraw %}'`. This means that by default, the state of the switch is on if and only if the response to the GET request matches." + required: false + type: string +username: + description: The username for accessing the REST endpoint. + required: false + type: string +password: + description: The password for accessing the REST endpoint. + required: false + type: string +headers: + description: The headers for the request. + required: false + type: list, string +{% endconfiguration %}

Make sure that the URL matches exactly your endpoint or resource. @@ -44,21 +82,23 @@ Make sure that the URL matches exactly your endpoint or resource. ### {% linkable_title Switch with templated value %} -This example shows a switch that uses a [template](/topics/templating/) to allow Home Assistant to determine its state. In this example the REST endpoint returns this JSON response with true indicating the switch is on. +This example shows a switch that uses a [template](/topics/templating/) to allow Home Assistant to determine its state. In this example, the REST endpoint returns this JSON response with true indicating the switch is on. ```json {"is_active": "true"} ``` - +{% raw %} ```yaml switch: - platform: rest resource: http://IP_ADDRESS/led_endpoint body_on: '{"active": "true"}' body_off: '{"active": "false"}' - is_on_template: '{% raw %}{{value_json.is_active}}{% endraw %}' + is_on_template: '{{ value_json.is_active }}' + headers: + Content-Type: application/json ``` +{% endraw %} `body_on` and `body_off` can also depend on the state of the system. For example, to enable a remote temperature sensor tracking on a radio thermostat, one has to send the current value of the remote temperature sensor. This can be achieved by using the template `{% raw %}'{"rem_temp":{{states.sensor.bedroom_temp.state}}}'{% endraw %}`. - diff --git a/source/_components/switch.rflink.markdown b/source/_components/switch.rflink.markdown index fc7ab2b7a9f..ee42e8bbd74 100644 --- a/source/_components/switch.rflink.markdown +++ b/source/_components/switch.rflink.markdown @@ -1,7 +1,7 @@ --- layout: page title: "RFLink Switch" -description: "Instructions how to integrate RFLink switches into Home Assistant." +description: "Instructions on how to integrate RFLink switches into Home Assistant." date: 2016-01-04 sidebar: true comments: false @@ -50,7 +50,7 @@ Device configuration variables: - **name** (*Optional*): Name for the device, defaults to RFLink ID. - **aliases** (*Optional*): Alternative RFLink ID's this device is known by. -- **fire_event** (*Optional*): Fire an `button_pressed` event if this device is turned on or off (default: False). +- **fire_event** (*Optional*): Fire a `button_pressed` event if this device is turned on or off (default: False). - **signal_repetitions** (*Optional*): Repeat every RFLink command this number of times (default: 1) - **group** (*Optional*): Allow switch to respond to group commands (ALLON/ALLOFF). (default: yes) - **group_aliases** (*Optional*): `aliases` which only respond to group commands. diff --git a/source/_components/switch.rfxtrx.markdown b/source/_components/switch.rfxtrx.markdown index 434a4c45639..b1ef272d1a0 100644 --- a/source/_components/switch.rfxtrx.markdown +++ b/source/_components/switch.rfxtrx.markdown @@ -1,7 +1,7 @@ --- layout: page title: "RFXtrx Switch" -description: "Instructions how to integrate RFXtrx switches into Home Assistant." +description: "Instructions on how to integrate RFXtrx switches into Home Assistant." date: 2015-10-08 10:15 sidebar: true comments: false @@ -54,6 +54,10 @@ Configuration variables: This component and the [rfxtrx binary sensor](/components/binary_sensor.rfxtrx/) can steal each other's devices when setting the `automatic_add` configuration parameter to `true`. Set `automatic_add` only when you have some devices to add to your installation, otherwise leave it to `False`.

+

+If a device ID consists of only numbers, please make sure to surround it with quotes. +This is a known limitation in YAML, because the device ID will be interpreted as a number otherwise. +

Generate codes: @@ -101,10 +105,10 @@ switch: devices: 0710014c440f0160: name: Hall - 0710010244080780: + "0710010244080780": name: Door fire_event: true - + automation: - alias: Switch light on when door bell rings if sun is below horizon and light was off trigger: @@ -145,7 +149,7 @@ scene: entities: switch.light1: on switch.light2: on - + automation: - alias: Use remote to enable scene trigger: diff --git a/source/_components/switch.rpi_gpio.markdown b/source/_components/switch.rpi_gpio.markdown index 2e1d74786d1..5b3a888e240 100644 --- a/source/_components/switch.rpi_gpio.markdown +++ b/source/_components/switch.rpi_gpio.markdown @@ -1,7 +1,7 @@ --- layout: page -title: "Raspberry PI GPIO Switch" -description: "Instructions how to integrate the GPIO of a Raspberry PI into Home Assistant as a switch." +title: "Raspberry Pi GPIO Switch" +description: "Instructions on how to integrate the GPIO of a Raspberry Pi into Home Assistant as a switch." date: 2015-08-07 14:00 sidebar: true comments: false @@ -35,6 +35,10 @@ Configuration variables: For more details about the GPIO layout, visit the Wikipedia [article](https://en.wikipedia.org/wiki/Raspberry_Pi#GPIO_connector) about the Raspberry Pi. +

+Note that a pin managed by HASS is expected to be exclusive to HASS. +

+ A common question is what does Port refer to, this number is the actual GPIO # not the pin #. For example, if you have a relay connected to pin 11 its GPIO # is 17. diff --git a/source/_components/switch.rpi_pfio.markdown b/source/_components/switch.rpi_pfio.markdown index d8e77e79fa0..30498f7d990 100644 --- a/source/_components/switch.rpi_pfio.markdown +++ b/source/_components/switch.rpi_pfio.markdown @@ -1,7 +1,7 @@ --- layout: page title: "PiFace Digital I/O Switch" -description: "Instructions how to integrate the PiFace Digital I/O module into Home Assistant as a switch." +description: "Instructions on how to integrate the PiFace Digital I/O module into Home Assistant as a switch." date: 2016-05-08 15:00 sidebar: true comments: false diff --git a/source/_components/switch.rpi_rf.markdown b/source/_components/switch.rpi_rf.markdown index 2d412034f54..b9813ceb560 100644 --- a/source/_components/switch.rpi_rf.markdown +++ b/source/_components/switch.rpi_rf.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Raspberry Pi RF Switch" -description: "Instructions how to integrate devices controlled via codes sent with low-cost GPIO RF modules on a Raspberry Pi into Home Assistant as a switch." +description: "Instructions on how to integrate devices controlled via codes sent with low-cost GPIO RF modules on a Raspberry Pi into Home Assistant as a switch." date: 2016-05-10 09:00 sidebar: true comments: false diff --git a/source/_components/switch.scsgate.markdown b/source/_components/switch.scsgate.markdown index 07ff2d60053..35e1f6b7f8e 100644 --- a/source/_components/switch.scsgate.markdown +++ b/source/_components/switch.scsgate.markdown @@ -1,7 +1,7 @@ --- layout: page title: "SCSGate Switch" -description: "Instructions how to integrate SCSGate switches into Home Assistant." +description: "Instructions on how to integrate SCSGate switches into Home Assistant." date: 2016-01-31 22:15 sidebar: true comments: false diff --git a/source/_components/switch.smappee.markdown b/source/_components/switch.smappee.markdown new file mode 100644 index 00000000000..0576738e51a --- /dev/null +++ b/source/_components/switch.smappee.markdown @@ -0,0 +1,20 @@ +--- +layout: page +title: "Smappee Switch" +description: "Instructions on how to integrate Smappee Comfort Plug into Home Assistant." +date: 2018-02-26 08:37 +sidebar: true +comments: false +sharing: true +footer: true +logo: smappee.png +ha_release: "0.64" +ha_category: Switch +ha_iot_class: "Local Push" +--- + +[Smappee](https://www.smappee.com/) controller for energy monitoring and Comport plug switches. + +Comport Plugs will be automatically added when you connect to the Smappee controller. + +For more configuration information see the [Smappee component](/components/smappee/) documentation. diff --git a/source/_components/switch.snmp.markdown b/source/_components/switch.snmp.markdown index 7dd158291c0..59d9b239044 100644 --- a/source/_components/switch.snmp.markdown +++ b/source/_components/switch.snmp.markdown @@ -29,13 +29,16 @@ switch: Configuration variables: -- **baseoid** (*Required*): The SNMP BaseOID which to poll for the state of the switch and which to set in order to turn the switch on and off. +- **baseoid** (*Required*): The SNMP BaseOID which to poll for the state of the switch. +- **command_oid** (*Optional*): The SNMP OID which to set in order to turn the switch on and off, if different from `baseoid`. - **host** (*Optional*): The IP/host which to control. Defaults to `localhost`. - **port** (*Optional*): The port on which to communicate. Defaults to `161`. - **community** (*Optional*): community string to use for authentication. Defaults to `private`. - **version** (*Optional*): SNMP version to use - either `1` or `2c`. Defaults to `1`. -- **payload_on** (*Optional*): What return value represents an `On` state for the switch. The same value is used in writes to turn on the switch. Defaults to `1`. -- **payload_off** (*Optional*): What return value represents an `Off` state for the switch. The same value is used in writes to turn off the switch. Defaults to `0`. +- **payload_on** (*Optional*): What return value represents an `On` state for the switch. The same value is used in writes to turn on the switch if `command_payload_on` is not set. Defaults to `1`. +- **payload_off** (*Optional*): What return value represents an `Off` state for the switch. The same value is used in writes to turn off the switch if `command_payload_off` is not set. Defaults to `0`. +- **command_payload_on** (*Optional*): The value to write to turn on the switch, if different from `payload_on`. +- **command_payload_off** (*Optional*): The value to write to turn off the switch, if different from `payload_off`. You should check with your device's vendor to find out the correct BaseOID and what values turn the switch on and off. diff --git a/source/_components/switch.spider.markdown b/source/_components/switch.spider.markdown new file mode 100644 index 00000000000..a38456e927b --- /dev/null +++ b/source/_components/switch.spider.markdown @@ -0,0 +1,24 @@ +--- +layout: page +title: "Spider Power Plug" +description: "Instructions on how to integrate Spider power plugs within Home Assistant." +date: 2018-07-26 22:01 +sidebar: true +comments: false +sharing: true +footer: true +logo: spider.png +ha_category: Switch +ha_iot_class: "Cloud Polling" +ha_release: 0.75 +--- + +The `spider` power plug platform allows you to control your power plugs. It also shows you your current and daily energy usage by the power plug. + +

+Full configuration details can be found on the main [Spider component](/components/spider/) page. +

+ +

+This component is not affiliated with Itho Daalderop Spider and retrieves data from the endpoints of the mobile application. Use at your own risk. +

diff --git a/source/_components/switch.tahoma.markdown b/source/_components/switch.tahoma.markdown new file mode 100644 index 00000000000..a7c3338fee4 --- /dev/null +++ b/source/_components/switch.tahoma.markdown @@ -0,0 +1,17 @@ +--- +layout: page +title: "Tahoma Switch" +description: "Instructions on how to integrate Tahoma switches into Home Assistant." +date: 2017-07-18 12:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: tahoma.png +ha_category: Sensor +ha_release: 0.59 +--- + +The `tahoma` switch platform lets you see switches added to your Tahoma Box in Home Assistant. + +Switches will be added automatically. Please refer to the [component](/components/tahoma/) configuration on how to setup Tahoma. diff --git a/source/_components/switch.tellduslive.markdown b/source/_components/switch.tellduslive.markdown index 4477289a876..1cfa2c6fc86 100644 --- a/source/_components/switch.tellduslive.markdown +++ b/source/_components/switch.tellduslive.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Telldus Live Switch" -description: "Instructions how to integrate Telldus Live switches into Home Assistant." +description: "Instructions on how to integrate Telldus Live switches into Home Assistant." date: 2016-01-17 15:49 sidebar: true comments: false diff --git a/source/_components/switch.tellstick.markdown b/source/_components/switch.tellstick.markdown index 9c1ed88d73d..9de976af4ba 100644 --- a/source/_components/switch.tellstick.markdown +++ b/source/_components/switch.tellstick.markdown @@ -1,7 +1,7 @@ --- layout: page title: "TellStick Switch" -description: "Instructions how to integrate TellStick switches into Home Assistant." +description: "Instructions on how to integrate TellStick switches into Home Assistant." date: 2015-08-06 19:00 sidebar: true comments: false @@ -15,7 +15,7 @@ ha_iot_class: "Assumed State" This `tellstick` switch platform allows you to control [TellStick](http://www.telldus.se/products/tellstick) devices. -To use your TellStick device, you first have to set up your [Tellstick hub](https://home-assistant.io/components/tellstick/) and then add the following to your `configuration.yaml` file: +To use your TellStick device, you first have to set up your [Tellstick hub](/components/tellstick/) and then add the following to your `configuration.yaml` file: ```yaml # Example configuration.yaml entry diff --git a/source/_components/switch.telnet.markdown b/source/_components/switch.telnet.markdown index bffd8e78fb0..ef1345cd5bf 100644 --- a/source/_components/switch.telnet.markdown +++ b/source/_components/switch.telnet.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Telnet Switch" -description: "Instructions how to integrate telnet switches into Home Assistant." +description: "Instructions on how to integrate telnet switches into Home Assistant." date: 2017-08-10 19:19 sidebar: true comments: false @@ -39,6 +39,6 @@ Configuration variables: - **port** (*Optional*): Port to connect to. Default is 23 if not defined. - **command_on** (*Required*): Command to turn device on. - **command_off** (*Required*): Command to turn device off. - - **command_state** (*Required*): Command to determine the state of the switch. If not defined the switch will assume successful state changes. - - **value_template** (*Required*): The template evaluating to `true` will indicate that the switch is on. + - **command_state** (*Optional*): Command to determine the state of the switch. If not defined the switch will assume successful state changes. + - **value_template** (*Optional*): The template evaluating to `true` will indicate that the switch is on. - **name** (*Optional*): The name used to display the switch in the frontend. diff --git a/source/_components/switch.template.markdown b/source/_components/switch.template.markdown index 93880fe6f65..6e968992407 100644 --- a/source/_components/switch.template.markdown +++ b/source/_components/switch.template.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Template Switch" -description: "Instructions how to integrate Template Switches into Home Assistant." +description: "Instructions on how to integrate Template Switches into Home Assistant." date: 2016-02-07 07:00 sidebar: true comments: false @@ -15,16 +15,13 @@ logo: home-assistant.png The `template` platform creates switches that combines components. -For example, if you have a garage door with a toggle switch that operates the -motor and a sensor that allows you know whether the door is open or closed, -you can combine these into a switch that knows whether the garage door is open -or closed. +For example, if you have a garage door with a toggle switch that operates the motor and a sensor that allows you know whether the door is open or closed, you can combine these into a switch that knows whether the garage door is open or closed. -This can simplify the GUI and make it easier to write automations. You can mark -the components you have combined as `hidden` so they don't appear themselves. +This can simplify the GUI and make it easier to write automations. You can mark the components you have combined as `hidden` so they don't appear themselves. -To enable Template Switches in your installation, add the following to your -`configuration.yaml` file: +## {% linkable_title Configuration %} + +To enable Template Switches in your installation, add the following to your `configuration.yaml` file: {% raw %} ```yaml @@ -56,7 +53,7 @@ switch: required: false type: string entity_id: - description: Add a list of entity IDs so the switch only reacts to state changes of these entities. This will reduce the number of times the switch will try to update its state. + description: A list of entity IDs so the switch only reacts to state changes of these entities. This can be used if the automatic analysis fails to find all relevant entities. required: false type: [string, list] value_template: @@ -71,19 +68,19 @@ switch: description: Defines an action to run when the switch is turned off. required: true type: action + icon_template: + description: Defines a template for the icon of the switch. + required: false + type: template + entity_picture_template: + description: Defines a template for the picture of the switch. + required: false + type: template {% endconfiguration %} ## {% linkable_title Considerations %} -If you are using the state of a platform that takes extra time to load, the -Template Switch may get an `unknown` state during startup. This results -in error messages in your log file until that platform has completed loading. -If you use `is_state()` function in your template, you can avoid this situation. -For example, you would replace -{% raw %}`{{ states.switch.source.state == 'on' }}`{% endraw %} -with this equivalent that returns `true`/`false` and never gives an unknown -result: -{% raw %}`{{ is_state('switch.source', 'on') }}`{% endraw %} +If you are using the state of a platform that takes extra time to load, the Template Switch may get an `unknown` state during startup. This results in error messages in your log file until that platform has completed loading. If you use `is_state()` function in your template, you can avoid this situation. For example, you would replace {% raw %}`{{ states.switch.source.state == 'on' }}`{% endraw %} with this equivalent that returns `true`/`false` and never gives an unknown result: {% raw %}`{{ is_state('switch.source', 'on') }}`{% endraw %} ## {% linkable_title Examples %} @@ -113,8 +110,7 @@ switch: ### {% linkable_title Toggle Switch %} -This example shows a switch that takes its state from a sensor, and toggles -a switch. +This example shows a switch that takes its state from a sensor and toggles a switch. {% raw %} ```yaml diff --git a/source/_components/switch.tesla.markdown b/source/_components/switch.tesla.markdown index a8c63ede4ec..2ded4d7d100 100644 --- a/source/_components/switch.tesla.markdown +++ b/source/_components/switch.tesla.markdown @@ -13,7 +13,7 @@ ha_iot_class: "Cloud Push" ha_release: 0.54 --- -The `Tesla` platform allows you to control your [Tesla](https://www.tesla.com/) charger (enable/disable charging) from within Home Assistant. +The `Tesla` platform allows you to control your [Tesla](https://www.tesla.com/) charger (enable/disable charging, max range switch) from within Home Assistant. The switch platform will be automatically configured if Tesla component is configured. diff --git a/source/_components/switch.thinkingcleaner.markdown b/source/_components/switch.thinkingcleaner.markdown index 8be94f7992a..30a937f2124 100644 --- a/source/_components/switch.thinkingcleaner.markdown +++ b/source/_components/switch.thinkingcleaner.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Thinking Cleaner Switch" -description: "Instructions how to integrate a ThinkingCleaner switches within Home Assistant." +description: "Instructions on how to integrate a ThinkingCleaner switches within Home Assistant." date: 2016-04-10 17:24 sidebar: true comments: false diff --git a/source/_components/switch.toon.markdown b/source/_components/switch.toon.markdown index af4e1978501..744622da786 100644 --- a/source/_components/switch.toon.markdown +++ b/source/_components/switch.toon.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Toon Smart Plugs" -description: "Instructions how to integrate Toon smart plugs within Home Assistant." +description: "Instructions on how to integrate Toon smart plugs within Home Assistant." date: 2017-10-22 12:00 sidebar: true comments: false diff --git a/source/_components/switch.tplink.markdown b/source/_components/switch.tplink.markdown index f54235fede7..da0083120b6 100644 --- a/source/_components/switch.tplink.markdown +++ b/source/_components/switch.tplink.markdown @@ -1,7 +1,7 @@ --- layout: page -title: "TPLink Switch" -description: "Instructions how to integrate TPLink switches into Home Assistant." +title: "TP-Link Switch" +description: "Instructions on how to integrate TP-Link switches into Home Assistant." date: 2016-07-13 08:00 sidebar: true comments: false @@ -14,7 +14,7 @@ ha_release: "0.24" --- -The `tplink` switch platform allows you to control the state of your [TPLink smart switch](http://www.tp-link.com/en/products/list-5258.html). +The `tplink` switch platform allows you to control the state of your [TP-Link smart switch](http://www.tp-link.com/en/products/list-5258.html). Supported units: @@ -23,7 +23,7 @@ Supported units: - HS110 - HS200 -To use your TPLink switch in your installation, add the following to your `configuration.yaml` file: +To use your TP-Link switch in your installation, add the following to your `configuration.yaml` file: ```yaml # Example configuration.yaml entry @@ -32,9 +32,19 @@ switch: host: IP_ADDRESS ``` -Configuration variables: - -- **host** (*Required*): The IP address of your TP-Link switch, eg. `192.168.1.32`. -- **name** (*Optional*): The name to use when displaying this switch. - +{% configuration %} +name: + description: The name to use when displaying this switch. + required: false + type: string + default: TP-Link Switch +host: + description: "The IP address of your TP-Link switch, eg. `192.168.1.32`." + required: true + type: string +enable_leds: + description: If the LEDs on the switch (WiFi and power) should be lit. + required: false + type: boolean +{% endconfiguration %} diff --git a/source/_components/switch.transmission.markdown b/source/_components/switch.transmission.markdown index 3c9ef39bfa6..888f1470a0d 100644 --- a/source/_components/switch.transmission.markdown +++ b/source/_components/switch.transmission.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Transmission Switch" -description: "Instructions how to integrate Transmission within Home Assistant." +description: "Instructions on how to integrate Transmission within Home Assistant." date: 2015-06-02 09:00 sidebar: true comments: false diff --git a/source/_components/switch.tuya.markdown b/source/_components/switch.tuya.markdown new file mode 100644 index 00000000000..6f081aee6cd --- /dev/null +++ b/source/_components/switch.tuya.markdown @@ -0,0 +1,23 @@ +--- +layout: page +title: "Tuya Switch" +description: "Instructions on how to setup the Tuya switch within Home Assistant." +date: 2018-07-09 09:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: tuya.png +ha_category: Switch +ha_iot_class: "Cloud Polling" +ha_release: 0.74 +--- + + +The `tuya` switch platform allows you to control your [Tuya Smart](https://www.tuya.com) switch. + +The platform supports switch and socket. + +

+Full configuration details can be found on the main [Tuya component](/components/tuya/) page. +

\ No newline at end of file diff --git a/source/_components/switch.upcloud.markdown b/source/_components/switch.upcloud.markdown new file mode 100644 index 00000000000..98f45d0e68d --- /dev/null +++ b/source/_components/switch.upcloud.markdown @@ -0,0 +1,34 @@ +--- +layout: page +title: UpCloud Switch +description: Instructions on how to set up UpCloud switches within Home Assistant. +date: 2018-01-28 20:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: upcloud.png +ha_category: Switch +ha_release: 0.65 +ha_iot_class: Cloud Polling +--- + +The `upcloud` switch platform allows you to control (start/stop) your UpCloud servers. + +To use your UpCloud servers, you first have to set up your [UpCloud hub](/components/upcloud/) and then add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +switch: + - platform: upcloud + servers: + - 002167b7-4cb1-44b7-869f-e0900ddeeae1 + - 00886296-6137-4074-afe3-068e16d89d00 +``` + +{% configuration %} +servers: + description: List of servers you want to control. + required: true + type: list +{% endconfiguration %} diff --git a/source/_components/switch.velbus.markdown b/source/_components/switch.velbus.markdown index b4a7ae12967..6cd0303fde6 100644 --- a/source/_components/switch.velbus.markdown +++ b/source/_components/switch.velbus.markdown @@ -15,6 +15,8 @@ ha_release: "0.50" The `velbus` switch allows you to control [Velbus](http://www.velbus.eu) connected switches. +## {% linkable_title Configuration %} + To use your Velbus switches in your installation, add the following to your `configuration.yaml` file: ```yaml @@ -23,22 +25,39 @@ To use your Velbus switches in your installation, add the following to your `con light: - platform: velbus devices: - - name: Switch 1 - type: single - module: 0xda - channel: 4 - - name: Switch 2 - type: double - module: 0xbc - open_channel: 1 - close_channel: 2 + - name: Switch 1 + type: single + module: 0xda + channel: 4 + - name: Switch 2 + type: double + module: 0xbc + open_channel: 1 + close_channel: 2 ``` -Configuration variables: -- **devices** array (*Required*): The array contains the switches to configure - - **name** (*Required*): Name of the switch. - - **module** (*Required*): The hexadecimal module address - - **type** (*Required*): Either `single` or `double`. If single, only `channel` attribute is required. If double, both `open_channel` and `close_channel` attributes are required - - **channel** (*Required*): The channel number in the module. +{% configuration %} +devices: + description: The list contains the switches to configure. + required: true + type: map + keys: + name: + description: Name to use in the frontend. + required: true + type: string + module: + description: The hexadecimal module address. + required: true + type: string + channel: + description: The channel number in the module. + required: true + type: string + type: + description: "Either `single` or `double`. If single, only `channel` attribute is required. If `double`, both `open_channel:` and `close_channel:` keys are required." + required: true + type: string +{% endconfiguration %} For hub configuration, see [the Velbus component](/components/velbus/). diff --git a/source/_components/switch.vera.markdown b/source/_components/switch.vera.markdown index 09dc61b109e..e515a8d74c3 100644 --- a/source/_components/switch.vera.markdown +++ b/source/_components/switch.vera.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Vera Switch" -description: "Instructions how to integrate Vera switches into Home Assistant." +description: "Instructions on how to integrate Vera switches into Home Assistant." date: 2015-10-20 21:00 sidebar: true comments: false diff --git a/source/_components/switch.verisure.markdown b/source/_components/switch.verisure.markdown index 4169abe98d8..c84b3739f81 100644 --- a/source/_components/switch.verisure.markdown +++ b/source/_components/switch.verisure.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Verisure SmartPlug" -description: "Instructions how to setup the Verisure SmartPlug within Home Assistant." +description: "Instructions on how to setup the Verisure SmartPlug within Home Assistant." date: 2016-02-15 22:00 sidebar: true comments: false diff --git a/source/_components/switch.vesync.markdown b/source/_components/switch.vesync.markdown new file mode 100644 index 00000000000..b02f476e93e --- /dev/null +++ b/source/_components/switch.vesync.markdown @@ -0,0 +1,47 @@ +--- +layout: page +title: "VeSync Switch" +description: "Instructions on how to set up Etekcity VeSync switches within Home Assistant." +date: 2018-03-09 02:11 +sidebar: true +comments: false +sharing: true +footer: true +logo: vesync.png +ha_category: Switch +ha_release: 0.66 +--- + +The `vesync` switch platform enables integration with Etekcity VeSync smart switches. + +VeSync switches are low-cost wifi smart plugs that offer energy monitoring and work with popular voice assistants. + +To use your VeSync switches, you must first register your switches with the VeSync app. Once registration is complete you must add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +switch: + - platform: vesync + username: YOUR_USERNAME + password: YOUR_PASSWORD +``` + +{% configuration %} +username: + description: Username needed to log in to VeSync. + required: true + type: string +password: + description: Password needed to log in to VeSync. + required: true + type: string +{% endconfiguration %} + +### {% linkable_title Exposed Attributes %} + +VeSync switches will expose the following details. + +| Attribute | Description | Example | +| ------------------- | ------------------------------------------------------------------- | --------------- | +| `current_power_w` | The present power consumption of the switch in watts. | 100 | +| `today_energy_kwh` | The kilowatt hours used by the switch during the previous 24 hours. | 0.12 | diff --git a/source/_components/switch.volvooncall.markdown b/source/_components/switch.volvooncall.markdown new file mode 100644 index 00000000000..f4de42f5011 --- /dev/null +++ b/source/_components/switch.volvooncall.markdown @@ -0,0 +1,16 @@ +--- +layout: page +title: "Volvo On Call" +description: "Instructions for how to integrate Volvo On Call into Home Assistant." +date: 2016-10-02 17:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: volvo.png +ha_category: Presence Detection +ha_release: "0.30" +--- + + +Integrates Volvo on Call into Home Assistant. See the [main component](/components/volvooncall/) for configuration instructions. diff --git a/source/_components/switch.wake_on_lan.markdown b/source/_components/switch.wake_on_lan.markdown index 6fc7699fa72..161cfcd1b50 100644 --- a/source/_components/switch.wake_on_lan.markdown +++ b/source/_components/switch.wake_on_lan.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Wake on LAN Switch" -description: "Instructions how to integrate a wake on lan switch." +description: "Instructions on how to integrate a wake on lan switch." date: 2016-03-18 18:00 sidebar: true comments: false @@ -15,6 +15,8 @@ ha_iot_class: "Local Polling" The `wake_on_lan` (WOL) switch platform allows you to turn on a [WOL](https://en.wikipedia.org/wiki/Wake-on-LAN) enabled computer. +## {% linkable_title Configuration %} +

The WOL switch can only turn on your computer and monitor the state. There is no universal way to turn off a computer remotely. The `turn_off` variable is there to help you call a script when you have figured out how to remotely turn off your computer. See below for suggestions on how to do this. @@ -23,7 +25,7 @@ See below for suggestions on how to do this. To enable this switch in your installation, add the following to your `configuration.yaml` file: ```yaml -# Example configuration.yml entry +# Example configuration.yaml entry switch: - platform: wake_on_lan mac_address: "00-01-02-03-04-05" @@ -42,7 +44,8 @@ Configuration variables: Here are some real life examples of how to use the **turn_off** variable. ### {% linkable_title Suspending Linux %} -Suggested recipe for letting the turn_off script suspend a Linux computer (the **target**) + +Suggested recipe for letting the `turn_off` script suspend a Linux computer (the **target**) from Home Assistant running on another Linux computer (the **server**). 1. On the **server**, log in as the user account Home Assistant is running under. (I'm using `hass` in this example) diff --git a/source/_components/switch.wemo.markdown b/source/_components/switch.wemo.markdown index 7b6a4ae9018..6bca30af1a2 100644 --- a/source/_components/switch.wemo.markdown +++ b/source/_components/switch.wemo.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Belkin WeMo Switch" -description: "Instructions how to integrate Belkin WeMo switches into Home Assistant." +description: "Instructions on how to integrate Belkin WeMo switches into Home Assistant." date: 2016-02-20 00:47 sidebar: true comments: false diff --git a/source/_components/switch.wink.markdown b/source/_components/switch.wink.markdown index 085aba3a382..9a026077925 100644 --- a/source/_components/switch.wink.markdown +++ b/source/_components/switch.wink.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Wink Switch" -description: "Instructions how to setup the Wink switches within Home Assistant." +description: "Instructions on how to setup the Wink switches within Home Assistant." date: 2015-01-20 22:36 sidebar: true comments: false diff --git a/source/_components/switch.wirelesstag.markdown b/source/_components/switch.wirelesstag.markdown new file mode 100644 index 00000000000..f9239b3d11d --- /dev/null +++ b/source/_components/switch.wirelesstag.markdown @@ -0,0 +1,45 @@ +--- +layout: page +title: "WirelessTag Switch" +description: "Instructions on how to integrate your Wireless Tags sensors within Home Assistant." +date: 2018-03-26 21:52 +comments: false +sidebar: true +sharing: true +footer: true +logo: wirelesstag.png +ha_category: Switch +ha_iot_class: "Local Push and Cloud Polling" +ha_release: 0.68 +--- + +To get your [wirelesstag.net](http://wirelesstag.net) switches working within Home Assistant, please follow the instructions for the general [WirelessTag component](/components/wirelesstag). + +To enable tags set up with your [wirelesstag.net](http://wirelesstag.net) account, add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +switch: + - platform: wirelesstag + monitored_conditions: + - motion + - humidity +``` + +{% configuration %} + monitored_conditions: + description: The metrics types to control; valid values are specified below + required: true + type: list +{% endconfiguration %} + +The following metrics can be controlled: + +* (`temperature`): Control arm/disarm temperature monitoring. +* (`humidity`): Control arm/disarm humidity monitoring. +* (`motion`): Control arm/disarm motion and door open/close events monitoring. +* (`light`): Control monitoring of light changes. +* (`moisture`): Control monitoring of water level/soil moisture for water sensor. + +Arm/Disarm of motion switch is required to receive motion and door binary sensors events. +Others are only needed if you want to receive push notifications from tags on a specific range of changes in temperature, humidity, light or moisture. diff --git a/source/_components/switch.xiaomi_aqara.markdown b/source/_components/switch.xiaomi_aqara.markdown index f207229beed..0306ba29213 100644 --- a/source/_components/switch.xiaomi_aqara.markdown +++ b/source/_components/switch.xiaomi_aqara.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Xiaomi Switch" -description: "Instructions how to setup the Xiaomi switch within Home Assistant." +description: "Instructions on how to setup the Xiaomi switch within Home Assistant." date: 2017-07-21 16:34 sidebar: true comments: false diff --git a/source/_components/switch.xiaomi_miio.markdown b/source/_components/switch.xiaomi_miio.markdown index f8d03291d0d..11596d6c241 100644 --- a/source/_components/switch.xiaomi_miio.markdown +++ b/source/_components/switch.xiaomi_miio.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Xiaomi Smart WiFi Socket and Smart Power Strip" -description: "Instructions how to integrate your Xiaomi Smart WiFi Socket aka Plug or Xiaomi Smart Power Strip within Home Assistant." +description: "Instructions on how to integrate your Xiaomi Smart WiFi Socket aka Plug or Xiaomi Smart Power Strip within Home Assistant." date: 2017-08-26 10:18 sidebar: true comments: false @@ -9,16 +9,42 @@ sharing: true footer: true logo: xiaomi.png ha_category: Switch -ha_version: 0.56 ha_iot_class: "Local Polling" +ha_release: 0.56 --- -The `xiaomi_miio` switch platform allows you to control the state of your Xiaomi Smart WiFi Socket aka Plug or Xiaomi Smart Power Strip. - -Currently, the supported features are `on`, `off`. If the device provides the current load, it will be reported. +The `xiaomi_miio` switch platform allows you to control the state of your Xiaomi Smart WiFi Socket aka Plug, Xiaomi Smart Power Strip and Xiaomi Chuangmi Plug V1. Please follow the instructions on [Retrieving the Access Token](/components/vacuum.xiaomi_miio/#retrieving-the-access-token) to get the API token to use in the `configuration.yaml` file. +## Features + +### Xiaomi Smart WiFi Socket + +* Power (on, off) +* Attributes + - Temperature + +### Xiaomi Chuangmi Plug V1 + +* Power (on, off) +* USB (on, off) +* Attributes + - Temperature + +### Xiaomi Smart Power Strip + +* Power (on, off) +* Wifi LED (on, off) +* Power Price (0...999) +* Power Mode (green, normal) (Power Strip V1 only) +* Attributes + - Temperature + - Current + - Load power + - Wifi LED + - Mode (Power Strip V1 only) + To add a plug to your installation, add the following to your `configuration.yaml` file: ```yaml @@ -28,9 +54,61 @@ switch: name: Original Xiaomi Mi Smart WiFi Socket host: 192.168.130.59 token: YOUR_TOKEN + model: chuangmi.plug.m1 ``` -Configuration variables: -- **host** (*Required*): The IP of your plug. -- **token** (*Required*): The API token of your plug. -- **name** (*Optional*): The name of your plug. +{% configuration %} +host: + description: The IP address of your miio device. + required: true + type: string +token: + description: The API token of your miio device. + required: true + type: string +name: + description: The name of your miio device. + required: false + type: string + default: Xiaomi Miio Switch +model: + description: The model of your miio device. Valid values are `chuangmi.plug.v1`, `qmi.powerstrip.v1`, `zimi.powerstrip.v2`, `chuangmi.plug.m1` and `chuangmi.plug.v2`. This setting can be used to bypass the device model detection and is recommended if your device isn't always available. + required: false + type: string +{% endconfiguration %} + +## {% linkable_title Platform Services %} + +### {% linkable_title Service `switch.xiaomi_miio_set_wifi_led_on` %} (Power Strip only) + +Turn the wifi led on. + +| Service data attribute | Optional | Description | +|---------------------------|----------|---------------------------------------------------------| +| `entity_id` | yes | Only act on a specific xiaomi miio switch entity. Else targets all. | + +### {% linkable_title Service `switch.xiaomi_miio_set_wifi_led_off` %} (Power Strip only) + +Turn the wifi led off. + +| Service data attribute | Optional | Description | +|---------------------------|----------|---------------------------------------------------------| +| `entity_id` | yes | Only act on a specific xiaomi miio switch entity. Else targets all. | + +### {% linkable_title Service `switch.xiaomi_miio_set_power_price` %} (Power Strip) + +Set the power price. + +| Service data attribute | Optional | Description | +|---------------------------|----------|---------------------------------------------------------| +| `entity_id` | yes | Only act on a specific xiaomi miio switch entity. Else targets all. | +| `price` | no | Power price, between 0 and 999. | + +### {% linkable_title Service `switch.xiaomi_miio_set_power_mode` %} (Power Strip V1 only) + +Set the power mode. + +| Service data attribute | Optional | Description | +|---------------------------|----------|---------------------------------------------------------------| +| `entity_id` | yes | Only act on a specific xiaomi miio switch entity. Else targets all. | +| `mode` | no | Power mode, valid values are 'normal' and 'green' | diff --git a/source/_components/switch.zigbee.markdown b/source/_components/switch.zigbee.markdown index 58bb428b79e..cbdd87bdfe4 100644 --- a/source/_components/switch.zigbee.markdown +++ b/source/_components/switch.zigbee.markdown @@ -13,7 +13,7 @@ ha_release: 0.12 ha_iot_class: "Local Polling" --- -A ZigBee switch in this context is a device connected to one of the digital output pins on a ZigBee module. It can simply be switched on and off. By default, a switch is considered `on` when the ZigBee device's digital output is held `high` and considered `off` when it is held `low`. This behaviour can be inverted by setting the `on_state` configuration variable to `low`. +A ZigBee switch in this context is a device connected to one of the digital output pins on a ZigBee module. It can simply be switched on and off. By default, a switch is considered `on` when the ZigBee device's digital output is held `high` and considered `off` when it is held `low`. This behavior can be inverted by setting the `on_state` configuration variable to `low`. To configure a digital output pin as switch, add the following to your `configuration.yaml` file: diff --git a/source/_components/switch.zwave.markdown b/source/_components/switch.zwave.markdown index 2ae97b21807..9525daed351 100644 --- a/source/_components/switch.zwave.markdown +++ b/source/_components/switch.zwave.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Z-Wave Switch" -description: "Instructions how to setup the Z-Wave switches within Home Assistant." +description: "Instructions on how to setup the Z-Wave switches within Home Assistant." date: 2015-11-15 13:00 sidebar: true comments: false diff --git a/source/_components/system_log.markdown b/source/_components/system_log.markdown index fae6692223e..c537ba79b09 100644 --- a/source/_components/system_log.markdown +++ b/source/_components/system_log.markdown @@ -12,7 +12,7 @@ ha_category: Other ha_release: 0.58 --- -The `system_log` component stores information about all logged errors and warnings in Home Assistant. All collected information is accessible directly in the frontend, just navigate to the `Info` section under `Developer Tools`. In order to not overload Home Assistant with log data, only the 50 last errors and warnings will be stored. Older entries are automatically discarded from the log. It is possible to change the amount of stored log entries using the parameter `max_entries`. +The `system_log` component stores information about all logged errors and warnings in Home Assistant. All collected information is accessible directly in the frontend, just navigate to the `Info` section under `Developer Tools`. In order to not overload Home Assistant with log data, only the 50 last errors and warnings will be stored. Older entries are automatically discarded from the log. It is possible to change the number of stored log entries using the parameter `max_entries`. This component is automatically loaded by the `frontend` (so no need to do anything if you are using the frontend). If you are not doing so, or if you wish to change a parameter, add the following section to your `configuration.yaml` file: @@ -27,6 +27,11 @@ max_entries: required: false type: int default: 50 +fire_event: + description: Whether events are fired (required when used for triggers). + required: false + type: string + default: false {% endconfiguration %} ## {% linkable_title Services %} @@ -35,3 +40,66 @@ max_entries: To manually clear the system log, call this service. +## {% linkable_title Events %} + +Errors and warnings are posted as the event `system_log_event`, so it is possible to write automations that trigger whenever a warning or error occurs. The following information is included in each event: + +| Field | Description | +|------------------------------------------------------------------------------------------| +| `level` | Either `WARNING` or `ERROR` depending on severity. | +| `source` | File that triggered the error, e.g., `core.py` or `media_player/yamaha.py`. | +| `exception` | Full stack trace if available, otherwise empty string. | +| `message` | Descriptive message of the error, e.g., "Error handling request". | +| `timestamp` | Unix timestamp with as a double, e.g., 1517241010.237416. | + +Live examples of these events can be found in the Home Assistant log file or by just looking in the system log. An example could, for instance, look like this: + + + +The message ("Unable to find service..."), source (`core.py`) and level (`WARNING`) can easily be extracted from the image. Exact timestamp and stack trace is shown if the entry is selected. + +## {% linkable_title Examples %} + +Here are some examples using the events posted by `system_log`. `fire_event` must be set to `true` for these to work. + +### {% linkable_title Counting Number of Warnings %} + +This will create a `counter` that increases every time a warning is logged: + +```yaml +counter: + warning_counter: + name: Warnings + icon: mdi:alert + +automation: + - alias: Count warnings + trigger: + platform: event + event_type: system_log_event + event_data: + level: WARNING + action: + service: counter.increment + entity_id: counter.warning_counter +``` + +### {% linkable_title Conditional Messages %} + +This automation will create a persistent notification whenever an error or warning is logged that has the word "service" in the message: + +```yaml +automation: + - alias: Create notifications for "service" errors + trigger: + platform: event + event_type: system_log_event + condition: + condition: template + value_template: {% raw %}'{{ "service" in trigger.event.data.message }}'{% endraw %} + action: + service: persistent_notification.create + data_template: + title: Something bad happened + message: {% raw %}'{{ trigger.event.data.message }}'{% endraw %} +``` diff --git a/source/_components/tado.markdown b/source/_components/tado.markdown index 34447a66d90..386db0de0d1 100644 --- a/source/_components/tado.markdown +++ b/source/_components/tado.markdown @@ -13,7 +13,6 @@ ha_release: 0.41 ha_iot_class: "Cloud Polling" --- - The `tado` component platform is used as an interface to the [my.tado.com](https://my.tado.com/webapp/#/account/sign-in) website. It adds climate devices for every tado zone and sensors for some additional information of the zones. To use your tado thermostats in your installation, add the following to your `configuration.yaml` file: diff --git a/source/_components/tahoma.markdown b/source/_components/tahoma.markdown index e6e272d8b48..03734815e39 100644 --- a/source/_components/tahoma.markdown +++ b/source/_components/tahoma.markdown @@ -10,10 +10,11 @@ footer: true logo: tahoma.png ha_category: Hub ha_release: 0.59 +ha_iot_class: "Cloud Polling" --- -The `Tahoma` component platform is used as an interface to the [tahomalink.com](https://www.tahomalink.com) website. It adds actually covers and the sun sensor from tahoma platform. +The `Tahoma` component platform is used as an interface to the [tahomalink.com](https://www.tahomalink.com) website. It adds covers, scenes and a sun sensor from the Tahoma platform. To use your Tahoma devices in your installation, add the following to your `configuration.yaml` file: @@ -38,4 +39,6 @@ exclude: description: Excludes devices required: false type: list -{% endconfiguration %} \ No newline at end of file +{% endconfiguration %} + +This also works with the Somfy Connexoon. Check [here](https://somfyhouse.freshdesk.com/nl/support/solutions/articles/14000058145-wat-is-het-verschil-tussen-de-tahoma-en-de-connexoon-) for the differences between the bridges. diff --git a/source/_components/telegram_bot.broadcast.markdown b/source/_components/telegram_bot.broadcast.markdown index d743f1d8916..ee9d4032328 100644 --- a/source/_components/telegram_bot.broadcast.markdown +++ b/source/_components/telegram_bot.broadcast.markdown @@ -8,7 +8,7 @@ comments: false sharing: true footer: true logo: telegram.png -ha_category: Telegram chatbot +ha_category: Notifications ha_release: 0.48 --- diff --git a/source/_components/telegram_bot.markdown b/source/_components/telegram_bot.markdown index be2dcff5e5c..ecbfa306596 100644 --- a/source/_components/telegram_bot.markdown +++ b/source/_components/telegram_bot.markdown @@ -19,24 +19,27 @@ This component creates notification services to send, or edit previously sent, m If you don't need to receive messages, you can use the [broadcast](/components/telegram_bot.broadcast/) platform instead. -### {% linkable_title Notification services %} -Available services: `send_message`, `send_photo`, `send_document`, `send_location`, `edit_message`, `edit_replymarkup`, `edit_caption`, `answer_callback_query`. +## {% linkable_title Notification services %} + +Available services: `send_message`, `send_photo`, `send_document`, `send_location`, `send_sticker`, `edit_message`, `edit_replymarkup`, `edit_caption` and `answer_callback_query`. + +### {% linkable_title Service `telegram_bot.send_message` %} -#### {% linkable_title Service `telegram_bot/send_message` %} Send a notification. | Service data attribute | Optional | Description | |---------------------------|----------|--------------------------------------------------| | `message` | no | Message body of the notification. | | `title` | yes | Optional title for your notification. Will be composed as '%title\n%message'. | -| `target` | yes | An array of pre-authorized chat_ids to send the notification to. Defaults to the first allowed chat_id. | +| `target` | yes | An array of pre-authorized chat_ids or user_ids to send the notification to. Defaults to the first allowed chat_id. | | `parse_mode` | yes | Parser for the message text: `html` or `markdown`. | | `disable_notification` | yes | True/false for send the message silently. iOS users and web users will not receive a notification, Android users will receive a notification with no sound. Defaults to False. | | `disable_web_page_preview`| yes | True/false for disable link previews for links in the message. | | `keyboard` | yes | List of rows of commands, comma-separated, to make a custom keyboard. Example: `["/command1, /command2", "/command3"]` | | `inline_keyboard` | yes | List of rows of commands, comma-separated, to make a custom inline keyboard with buttons with associated callback data. Example: `["/button1, /button2", "/button3"]` or `[[["Text btn1", "/button1"], ["Text btn2", "/button2"]], [["Text btn3", "/button3"]]]` | -#### {% linkable_title Service `telegram_bot/send_photo` %} +### {% linkable_title Service `telegram_bot.send_photo` and `telegram_bot.send_sticker` %} + Send a photo. | Service data attribute | Optional | Description | @@ -44,16 +47,16 @@ Send a photo. | `url` | no | Remote path to an image. | | `file` | no | Local path to an image. | | `caption` | yes | The title of the image. | -| `username` | yes | Username for a URL which require HTTP basic authentication. | -| `password` | yes | Password for a URL which require HTTP basic authentication. | +| `username` | yes | Username for a URL which requires HTTP basic authentication. | +| `password` | yes | Password for a URL which requires HTTP basic authentication. | | `authentication` | yes | Define which authentication method to use. Set to `digest` to use HTTP digest authentication. Defaults to `basic`. | -| `target` | yes | An array of pre-authorized chat_ids to send the notification to. Defaults to the first allowed chat_id. | +| `target` | yes | An array of pre-authorized chat_ids or user_ids to send the notification to. Defaults to the first allowed chat_id. | | `disable_notification` | yes | True/false for send the message silently. iOS users and web users will not receive a notification, Android users will receive a notification with no sound. Defaults to False. | | `keyboard` | yes | List of rows of commands, comma-separated, to make a custom keyboard. Example: `["/command1, /command2", "/command3"]` | | `inline_keyboard` | yes | List of rows of commands, comma-separated, to make a custom inline keyboard with buttons with associated callback data. Example: `["/button1, /button2", "/button3"]` or `[[["Text btn1", "/button1"], ["Text btn2", "/button2"]], [["Text btn3", "/button3"]]]` | +### {% linkable_title Service `telegram_bot.send_video` %} -#### {% linkable_title Service `telegram_bot/send_video` %} Send a video. | Service data attribute | Optional | Description | @@ -64,12 +67,13 @@ Send a video. | `username` | yes | Username for a URL which requires HTTP basic authentication. | | `password` | yes | Password for a URL which requires HTTP basic authentication. | | `authentication` | yes | Define which authentication method to use. Set to `digest` to use HTTP digest authentication. Defaults to `basic`. | -| `target` | yes | An array of pre-authorized chat_ids to send the notification to. Defaults to the first allowed chat_id. | +| `target` | yes | An array of pre-authorized chat_ids or user_ids to send the notification to. Defaults to the first allowed chat_id. | | `disable_notification` | yes | True/false to send the message silently. iOS users and web users will not receive a notification. Android users will receive a notification with no sound. Defaults to False. | | `keyboard` | yes | List of rows of commands, comma-separated, to make a custom keyboard. Example: `["/command1, /command2", "/command3"]` | | `inline_keyboard` | yes | List of rows of commands, comma-separated, to make a custom inline keyboard with buttons with associated callback data. Example: `["/button1, /button2", "/button3"]` or `[[["Text btn1", "/button1"], ["Text btn2", "/button2"]], [["Text btn3", "/button3"]]]` | -#### {% linkable_title Service `telegram_bot/send_document` %} +### {% linkable_title Service `telegram_bot.send_document` %} + Send a document. | Service data attribute | Optional | Description | @@ -77,32 +81,34 @@ Send a document. | `url` | no | Remote path to a document. | | `file` | no | Local path to a document. | | `caption` | yes | The title of the document. | -| `username` | yes | Username for a URL which require HTTP basic authentication. | -| `password` | yes | Password for a URL which require HTTP basic authentication. | +| `username` | yes | Username for a URL which requires HTTP basic authentication. | +| `password` | yes | Password for a URL which requires HTTP basic authentication. | | `authentication` | yes | Define which authentication method to use. Set to `digest` to use HTTP digest authentication. Defaults to `basic`. | -| `target` | yes | An array of pre-authorized chat_ids to send the notification to. Defaults to the first allowed chat_id. | +| `target` | yes | An array of pre-authorized chat_ids or user_ids to send the notification to. Defaults to the first allowed chat_id. | | `disable_notification` | yes | True/false for send the message silently. iOS users and web users will not receive a notification, Android users will receive a notification with no sound. Defaults to False. | | `keyboard` | yes | List of rows of commands, comma-separated, to make a custom keyboard. Example: `["/command1, /command2", "/command3"]` | | `inline_keyboard` | yes | List of rows of commands, comma-separated, to make a custom inline keyboard with buttons with associated callback data. Example: `["/button1, /button2", "/button3"]` or `[[["Text btn1", "/button1"], ["Text btn2", "/button2"]], [["Text btn3", "/button3"]]]` | -#### {% linkable_title Service `telegram_bot/send_location` %} +### {% linkable_title Service `telegram_bot.send_location` %} + Send a location. | Service data attribute | Optional | Description | |---------------------------|----------|--------------------------------------------------| | `latitude` | no | The latitude to send. | | `longitude` | no | The longitude to send. | -| `target` | yes | An array of pre-authorized chat_ids to send the notification to. Defaults to the first allowed chat_id. | +| `target` | yes | An array of pre-authorized chat_ids or user_ids to send the notification to. Defaults to the first allowed `chat_id`. | | `disable_notification` | yes | True/false for send the message silently. iOS users and web users will not receive a notification, Android users will receive a notification with no sound. Defaults to False. | | `keyboard` | yes | List of rows of commands, comma-separated, to make a custom keyboard. Example: `["/command1, /command2", "/command3"]` | | `inline_keyboard` | yes | List of rows of commands, comma-separated, to make a custom inline keyboard with buttons with associated callback data. Example: `["/button1, /button2", "/button3"]` or `[[["Text btn1", "/button1"], ["Text btn2", "/button2"]], [["Text btn3", "/button3"]]]` | -#### {% linkable_title Service `telegram_bot/edit_message` %} +### {% linkable_title Service `telegram_bot.edit_message` %} + Edit a previously sent message in a conversation. | Service data attribute | Optional | Description | |---------------------------|----------|--------------------------------------------------| -| `message_id` | no | Id of the message to edit. When answering a callback from a pressed button, the id of the origin message is in: `{{ trigger.event.data.message.message_id }}`. You can use `"last"` to refer to the last message sent to `chat_id`. | +| `message_id` | no | Id of the message to edit. When answering a callback from a pressed button, the id of the origin message is in: {% raw %}`{{ trigger.event.data.message.message_id }}`{% endraw %}. You can use `"last"` to refer to the last message sent to `chat_id`. | | `chat_id` | no | The chat_id where to edit the message. | | `message` | no | Message body of the notification. | | `title` | yes | Optional title for your notification. Will be composed as '%title\n%message'. | @@ -110,50 +116,53 @@ Edit a previously sent message in a conversation. | `disable_web_page_preview`| yes | True/false for disable link previews for links in the message. | | `inline_keyboard` | yes | List of rows of commands, comma-separated, to make a custom inline keyboard with buttons with associated callback data. Example: `["/button1, /button2", "/button3"]` or `[[["Text btn1", "/button1"], ["Text btn2", "/button2"]], [["Text btn3", "/button3"]]]` | -#### {% linkable_title Service `telegram_bot/edit_caption` %} +### {% linkable_title Service `telegram_bot.edit_caption` %} + Edit the caption of a previously sent message. | Service data attribute | Optional | Description | |---------------------------|----------|--------------------------------------------------| -| `message_id` | no | Id of the message to edit. When answering a callback from a pressed button, the id of the origin message is in: `{{ trigger.event.data.message.message_id }}`. You can use `"last"` to refer to the last message sent to `chat_id`. | +| `message_id` | no | Id of the message to edit. When answering a callback from a pressed button, the id of the origin message is in: {% raw %}`{{ trigger.event.data.message.message_id }}`{% endraw %}. You can use `"last"` to refer to the last message sent to `chat_id`. | | `chat_id` | no | The chat_id where to edit the caption. | | `caption` | no | Message body of the notification. | | `disable_web_page_preview`| yes | True/false for disable link previews for links in the message. | | `inline_keyboard` | yes | List of rows of commands, comma-separated, to make a custom inline keyboard with buttons with associated callback data. Example: `["/button1, /button2", "/button3"]` or `[[["Text btn1", "/button1"], ["Text btn2", "/button2"]], [["Text btn3", "/button3"]]]` | -#### {% linkable_title Service `telegram_bot/edit_replymarkup` %} -Edit the inline keyboard of a previusly sent message. +### {% linkable_title Service `telegram_bot.edit_replymarkup` %} + +Edit the inline keyboard of a previously sent message. | Service data attribute | Optional | Description | |---------------------------|----------|--------------------------------------------------| -| `message_id` | no | Id of the message to edit. When answering a callback from a pressed button, the id of the origin message is in: `{{ trigger.event.data.message.message_id }}`. You can use `"last"` to refer to the last message sent to `chat_id`. | +| `message_id` | no | Id of the message to edit. When answering a callback from a pressed button, the id of the origin message is in: {% raw %}`{{ trigger.event.data.message.message_id }}`{% endraw %}. You can use `"last"` to refer to the last message sent to `chat_id`. | | `chat_id` | no | The chat_id where to edit the reply_markup. | | `disable_web_page_preview`| yes | True/false for disable link previews for links in the message. | | `inline_keyboard` | yes | List of rows of commands, comma-separated, to make a custom inline keyboard with buttons with associated callback data. Example: `["/button1, /button2", "/button3"]` or `[[["Text btn1", "/button1"], ["Text btn2", "/button2"]], [["Text btn3", "/button3"]]]` | -#### {% linkable_title Service `telegram_bot/answer_callback_query` %} +### {% linkable_title Service `telegram_bot.answer_callback_query` %} + Respond to a callback query originated by clicking on an online keyboard button. The answer will be displayed to the user as a notification at the top of the chat screen or as an alert. | Service data attribute | Optional | Description | |---------------------------|----------|--------------------------------------------------| | `message` | no | Unformatted text message body of the notification. | -| `callback_query_id` | no | Unique id of the callback response. In the `telegram_callback` event data: `{{ trigger.event.data.id }}` | +| `callback_query_id` | no | Unique id of the callback response. In the `telegram_callback` event data: {% raw %}`{{ trigger.event.data.id }}`{% endraw %} | | `show_alert` | yes | True/false for show a permanent notification. Defaults to False. | -#### {% linkable_title Service `telegram_bot/delete_message` %} +### {% linkable_title Service `telegram_bot.delete_message` %} Delete a previously sent message in a conversation. | Service data attribute | Optional | Description | |---------------------------|----------|--------------------------------------------------| -| `message_id` | no | Id of the message to delete. When answering a callback from a pressed button, the id of the origin message is in: `{{ trigger.event.data.message.message_id }}`. You can use `"last"` to refer to the last message sent to `chat_id`. | +| `message_id` | no | Id of the message to delete. When answering a callback from a pressed button, the id of the origin message is in: {% raw %}`{{ trigger.event.data.message.message_id }}`{% endraw %}. You can use `"last"` to refer to the last message sent to `chat_id`. | | `chat_id` | no | The chat_id where to delete the message. | -### {% linkable_title `Telegram` notification platform %} +## {% linkable_title `telegram` notification platform %} - -The [Telegram notification platform](/components/notify.telegram/) requires the `telegram_bot` component to work with, and it's designed to generate a customized shortcut (`notify.USERNAME`) to send notifications (messages, photos, documents and locations) to a particular `chat_id` with the old syntax, allowing backward compatibility. +The [`telegram` notification platform](/components/notify.telegram/) requires the `telegram_bot` component to work with, and it's designed to generate a customized shortcut (`notify.USERNAME`) to send notifications (messages, photos, documents and locations) to a particular `chat_id` with the old syntax, allowing backward compatibility. The required yaml configuration now reduces to: + ```yaml notify: - name: NOTIFIER_NAME @@ -161,10 +170,9 @@ notify: chat_id: USER_CHAT_ID ``` -### {% linkable_title Event triggering %} +## {% linkable_title Event triggering %} - -A command looks like `/thecommand`, or `/othercommand with some args`. +A command looks like `/thecommand` or `/othercommand with some args`. When received by Home Assistant it will fire a `telegram_command` event on the event bus with the following `event_data`: @@ -189,7 +197,7 @@ chat_id: "" chat: "" ``` -if the message is sent from a [press from an inline button](https://core.telegram.org/bots#inline-keyboards-and-on-the-fly-updating), for example, a callback query is received, and Home Assistant will fire a `telegram_callback` event with: +If the message is sent from a [press from an inline button](https://core.telegram.org/bots#inline-keyboards-and-on-the-fly-updating), for example, a callback query is received, and Home Assistant will fire a `telegram_callback` event with: ```yaml data: "" @@ -204,7 +212,6 @@ chat_id: "" ### {% linkable_title Configuration samples %} - Simple ping pong example. ```yaml @@ -221,7 +228,7 @@ action: message: 'pong' ``` -Example that show keyboard interaction with `notify.telegram` +An example that shows keyboard interaction with `notify.telegram` ```yaml trigger: @@ -256,8 +263,9 @@ action: entity_id: switch.vision_zm1601eu5_battery_operated_siren_switch_9_0 ``` -An example to show the use of event_data in the action: +An example to show the use of event_data in action: +{% raw %} ```yaml - alias: 'Kitchen Telegram Speak' trigger: @@ -269,17 +277,21 @@ An example to show the use of event_data in the action: - service: notify.kitchen_echo data_template: message: > - Message from {% raw %}{{ trigger.event.data["from_first"] }}. {% for state in trigger.event.data["args"] %} {{ state }} {% endfor %}{% endraw %} + Message from {{ trigger.event.data["from_first"] }}. {% for state in trigger.event.data["args"] %} {{ state }} {% endfor %} ``` +{% endraw %} ### {% linkable_title Sample automations with callback queries and inline keyboards %} -Quick example to show some of the callback capabilities of inline keyboards with a dumb automation consisting in a simple repeater of normal text that presents an inline keyboard with 3 buttons: 'EDIT', 'NO' and 'REMOVE BUTTON': +A quick example to show some of the callback capabilities of inline keyboards with a dumb automation consisting in a simple repeater of normal text that presents an inline keyboard with 3 buttons: 'EDIT', 'NO' and 'REMOVE BUTTON': + - Pressing 'EDIT' changes the sent message. - Pressing 'NO' only shows a brief notification (answering the callback query). - Pressing 'REMOVE BUTTON' changes the inline keyboard removing that button. Text repeater: + +{% raw %} ```yaml - alias: 'Telegram bot that repeats text' hide_entity: true @@ -290,15 +302,18 @@ Text repeater: - service: telegram_bot.send_message data_template: title: '*Dumb automation*' - target: {% raw %}'{{ trigger.event.data.user_id }}'{% endraw %} - message: 'You said: {% raw %}{{ trigger.event.data.text }}{% endraw %}' + target: '{{ trigger.event.data.user_id }}' + message: 'You said: {{ trigger.event.data.text }}' disable_notification: true inline_keyboard: - "Edit message:/edit_msg, Don't:/do_nothing" - "Remove this button:/remove button" ``` +{% endraw %} Message editor: + +{% raw %} ```yaml - alias: 'Telegram bot that edits the last sent message' hide_entity: true @@ -315,19 +330,22 @@ Message editor: show_alert: true - service: telegram_bot.edit_message data_template: - message_id: {% raw %}'{{ trigger.event.data.message.message_id }}'{% endraw %} - chat_id: {% raw %}'{{ trigger.event.data.user_id }}'{% endraw %} + message_id: '{{ trigger.event.data.message.message_id }}' + chat_id: '{{ trigger.event.data.chat_id }}' title: '*Message edit*' inline_keyboard: - "Edit message:/edit_msg, Don't:/do_nothing" - "Remove this button:/remove button" message: > - {% raw %}Callback received from {% raw %}{{ trigger.event.data.from_first }}{% endraw %}. - Message id: {% raw %}{{ trigger.event.data.message.message_id }}{% endraw %}. - Data: {% raw %}{{ trigger.event.data.data }}{% endraw %} + Callback received from {{ trigger.event.data.from_first }}. + Message id: {{ trigger.event.data.message.message_id }}. + Data: {{ trigger.event.data.data }} ``` +{% endraw %} Keyboard editor: + +{% raw %} ```yaml - alias: 'Telegram bot that edits the keyboard' hide_entity: true @@ -339,17 +357,20 @@ Keyboard editor: action: - service: telegram_bot.answer_callback_query data_template: - callback_query_id: {% raw %}'{{ trigger.event.data.id }}'{% endraw %} + callback_query_id: '{{ trigger.event.data.id }}' message: 'Callback received for editing the inline keyboard!' - service: telegram_bot.edit_replymarkup data_template: message_id: 'last' - chat_id: {% raw %}'{{ trigger.event.data.user_id }}'{% endraw %} + chat_id: '{{ trigger.event.data.chat_id }}' inline_keyboard: - "Edit message:/edit_msg, Don't:/do_nothing" ``` +{% endraw %} Only acknowledges the 'NO' answer: + +{% raw %} ```yaml - alias: 'Telegram bot that simply acknowledges' hide_entity: true @@ -361,9 +382,10 @@ Only acknowledges the 'NO' answer: action: - service: telegram_bot.answer_callback_query data_template: - callback_query_id: {% raw %}'{{ trigger.event.data.id }}'{% endraw %} + callback_query_id: '{{ trigger.event.data.id }}' message: 'OK, you said no!' ``` +{% endraw %} For a more complex usage of the `telegram_bot` capabilities, using [AppDaemon](/docs/ecosystem/appdaemon/tutorial/) is advised. @@ -400,7 +422,7 @@ class TelegramBotEventListener(appapi.AppDaemon): assert event_id == 'telegram_callback' data_callback = payload_event['data'] callback_id = payload_event['id'] - user_id = payload_event['user_id'] + chat_id = payload_event['chat_id'] # keyboard = ["Edit message:/edit_msg, Don't:/do_nothing", # "Remove this button:/remove button"] keyboard = [[("Edit message", "/edit_msg"), @@ -420,7 +442,7 @@ class TelegramBotEventListener(appapi.AppDaemon): title = '*Message edit*' msg = 'Callback received from %s. Message id: %s. Data: ``` %s ```' self.call_service('telegram_bot/edit_message', - chat_id=user_id, + chat_id=chat_id, message_id=msg_id, title=title, message=msg % (user, msg_id, data_callback), @@ -436,7 +458,7 @@ class TelegramBotEventListener(appapi.AppDaemon): # Edit the keyboard new_keyboard = keyboard[:1] self.call_service('telegram_bot/edit_replymarkup', - chat_id=user_id, + chat_id=chat_id, message_id='last', inline_keyboard=new_keyboard) diff --git a/source/_components/telegram_bot.polling.markdown b/source/_components/telegram_bot.polling.markdown index a938dca5c5d..15c4d26eb0b 100644 --- a/source/_components/telegram_bot.polling.markdown +++ b/source/_components/telegram_bot.polling.markdown @@ -8,7 +8,7 @@ comments: false sharing: true footer: true logo: telegram.png -ha_category: Telegram chatbot +ha_category: Notifications ha_release: 0.42 --- diff --git a/source/_components/telegram_bot.webhooks.markdown b/source/_components/telegram_bot.webhooks.markdown index 8b88dcb77ae..7821b03c009 100644 --- a/source/_components/telegram_bot.webhooks.markdown +++ b/source/_components/telegram_bot.webhooks.markdown @@ -8,7 +8,7 @@ comments: false sharing: true footer: true logo: telegram.png -ha_category: Telegram chatbot +ha_category: Notifications ha_release: 0.42 --- diff --git a/source/_components/tellduslive.markdown b/source/_components/tellduslive.markdown index f273af65e74..42968880bad 100644 --- a/source/_components/tellduslive.markdown +++ b/source/_components/tellduslive.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Telldus Live" -description: "Instructions how to integrate Telldus Live into Home Assistant." +description: "Instructions on how to integrate Telldus Live into Home Assistant." date: 2016-01-17 16:00 sidebar: true comments: false @@ -13,25 +13,24 @@ featured: false ha_release: 0.11 --- -The `tellduslive` component let you connect to [Telldus Live](https://live.telldus.com). It's cloud platform that connects to your Tellstick connected gear at home. +The `tellduslive` component let you connect to [Telldus Live](https://live.telldus.com). It's cloud platform that connects to your Tellstick Net or Tellstick ZNet connected gear at home. -To get started using Telldus Live, you will have to obtain developer keys from the [developer page](https://api.telldus.com/keys/index). +

+If you are upgrading from 0.58 or older, you need to remove all Telldus configuration from your `configuration.yaml` file before continuing. +

-To integrate your Telldus Live with Home Assistant, add the following section to your `configuration.yaml` file: +Home Assistant will automatically discover the presence of a Tellstick Net or Tellstick ZNet on your local network if the [discovery]({{site_root}}/components/discovery/) component is enabled. When discovery and the key exchange with Telldus Live have been completed, you will be presented with an option to integrate with the cloud or local API for direct communication with your hardware in your LAN. Local API supports only one device at this stage. Local API is only supported with the Znet Lite products, the older hardware (such as Tellstick Net) does not support local API. + +To manually integrate your Telldus Live with Home Assistant, e.g., if your device is on another network or in another location, add the following section to your `configuration.yaml` file: ```yaml # Example configuration.yaml entry tellduslive: - public_key: ABCDEFGHJKLMNOPQRSTUVXYZ - private_key: ABCDEFGHJKLMNOPQRSTUVXYZ - token: ABCDEFGHJKLMNOPQRSTUVXYZ - token_secret: ABCDEFGHJKLMNOPQRSTUVXYZ ``` Configuration variables: -- **public_key** (*Required*): The public key for the Telldus Live service. -- **private_key** (*Required*): The private key for the Telldus Live service. -- **token** (*Required*): The token for the Telldus Live service. -- **token_secret** (*Required*): The token secret for the Telldus Live service. +- **host** (*Optional*): Host address to Tellstick Net or Tellstick ZNet for Local API, only useful when automatic discovery is not enabled. +- **update_interval** (*Optional*): Interval (in seconds) for polling the Telldus Live server (or the local server). +The component will offer configuration through the Home Assistant user interface where it will let you associate it with your Telldus Live account. diff --git a/source/_components/tellstick.markdown b/source/_components/tellstick.markdown index 652e77a15c4..4f9e03870dd 100644 --- a/source/_components/tellstick.markdown +++ b/source/_components/tellstick.markdown @@ -1,7 +1,7 @@ --- layout: page title: "TellStick" -description: "Instructions how to integrate your TellStick into Home Assistant." +description: "Instructions on how to integrate your TellStick into Home Assistant." date: 2015-03-28 13:06 sidebar: true comments: false @@ -21,9 +21,15 @@ To get started, add the devices to your `configuration.yaml` file. tellstick: ``` +```yaml +# Example configuration.yaml entry for hass.io with TellStick add-on +tellstick: + host: core-tellstick + port: [50800, 50801] +``` Configuration variables: - **signal_repetitions** (*Optional*): Because the tellstick sends its actions via radio and from most receivers it's impossible to know if the signal was received or not. Therefore you can configure the switch and light to try to send each signal repeatedly. -- **host** (*Optional*): If you run tellstick on a other server or with a hass.io add-on. -- **port** (*Optional*): If needed with host config option. +- **host** (*Optional*): If you run tellstick on another server or with a hass.io add-on. +- **port** (*Optional*): If needed with host config option. Must be port pair, for example `[50800, 50801]`. diff --git a/source/_components/tesla.markdown b/source/_components/tesla.markdown index 4cc5dbd85d3..8673396fc68 100644 --- a/source/_components/tesla.markdown +++ b/source/_components/tesla.markdown @@ -18,19 +18,19 @@ The `Tesla` component offers integration with the [Tesla](https://auth.tesla.com This component provides the following platforms: - Binary sensors - such as parking and charger connection. - - Sensors - such as Battery level, Inside/Outside temperature. + - Sensors - such as Battery level, Inside/Outside temperature, odometer, and estimated range. - Device tracker - to track location of your car - Lock - Door lock. Enables you to control Tesla's door lock - Climate - HVAC control. Allow you to control (turn on/off, set target temperature) your Tesla's HVAC system. - - Switch - Charger switch. Allow you to start/stop charging. + - Switch - Charger and max range switch. Allow you to start/stop charging and set max range charging. To use Tesla in your installation, add the following to your `configuration.yaml` file: ```yaml # Example configuration.yaml entry tesla: - username: email - password: password + username: YOUR_E_MAIL_ADDRESS + password: YOUR_PASSWORD ``` Configuration variables: diff --git a/source/_components/thethingsnetwork.markdown b/source/_components/thethingsnetwork.markdown index 65211c241d6..328022f6cc8 100644 --- a/source/_components/thethingsnetwork.markdown +++ b/source/_components/thethingsnetwork.markdown @@ -20,7 +20,7 @@ The Things network support various integrations to make the data available: | The Things Network Integration | Home Assistant platform | |---|---| | [MQTT](https://www.thethingsnetwork.org/docs/applications/mqtt/) | | -| [Storage](https://www.thethingsnetwork.org/docs/applications/storage/) | [`thethingsnetwork`](/component/sensor.thethingsnetwork/) | +| [Storage](https://www.thethingsnetwork.org/docs/applications/storage/) | [`thethingsnetwork`](/components/sensor.thethingsnetwork/) | | [HTTP](https://www.thethingsnetwork.org/docs/applications/http/) | | ### {% linkable_title Setup %} diff --git a/source/_components/thingspeak.markdown b/source/_components/thingspeak.markdown index d8da23a931b..2336a597473 100644 --- a/source/_components/thingspeak.markdown +++ b/source/_components/thingspeak.markdown @@ -12,8 +12,8 @@ ha_category: "History" ha_release: 0.32 --- -The `thingspeak` components makes Home Assistant communicate with the [ThingSpeak API](https://thingspeak.com/). -For now, it records exactly one entity at once, which is great for testing purposes. For long-time storage you should rely on the [InfluxDB component](https://home-assistant.io/components/influxdb/). +The `thingspeak` components makes Home Assistant communicate with the [ThingSpeak API](https://thingspeak.com/). +For now, it records exactly one entity at once, which is great for testing purposes. For long-time storage you should rely on the [InfluxDB component](/components/influxdb/). You will have to create a [new channel](https://thingspeak.com/channels/new) on ThingSpeak and grab your Write API Key from the "API Keys" tab of the channel you want to use. diff --git a/source/_components/timer.markdown b/source/_components/timer.markdown index 505aeacdb22..eb6db877f36 100644 --- a/source/_components/timer.markdown +++ b/source/_components/timer.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Timer" -description: "Instructions how to integrate timers into Home Assistant." +description: "Instructions on how to integrate timers into Home Assistant." date: 2017-10-23 06:00 sidebar: true comments: false @@ -14,7 +14,7 @@ ha_release: 0.57 The `timer` component aims to simplify automations based on (dynamic) durations. -When a timer finishes or gets cancelled the corresponding events are fired. This allows you to differentiate if a timer has switched from `active` to `idle` because the given duration has elapsed or it has been cancelled. To control timers in your automations you can use the services mentioned below. When calling the `start` service on a timer that is already running, it resets the duration it will need to finish and restart the timer without triggering any events. This for example makes it easy to create timed lights that get triggered by motion. +When a timer finishes or gets canceled the corresponding events are fired. This allows you to differentiate if a timer has switched from `active` to `idle` because the given duration has elapsed or it has been canceled. To control timers in your automations you can use the services mentioned below. When calling the `start` service on a timer that is already running, it resets the duration it will need to finish and restart the timer without triggering any events. This for example makes it easy to create timed lights that get triggered by motion.

With the current implementation timers don't persist over restarts. After a restart they will be idle again, together with their initial configuration. @@ -25,7 +25,7 @@ To add a timer to your installation, add the following to your `configuration.ya ```yaml # Example configuration.yaml entry timer: - timer: + laundry: duration: '00:01:00' ``` @@ -42,7 +42,7 @@ Pick an icon that you can find on [materialdesignicons.com](https://materialdesi | Event | Description | | --------------- | ----------- | -| timer.cancelled | Fired when a timer has been cancelled | +| timer.cancelled | Fired when a timer has been canceled | | timer.finished | Fired when a timer has completed | ## {% linkable_title Services %} @@ -67,7 +67,7 @@ Pause a running timer. This will retain the remaining duration for later continu #### {% linkable_title Service `timer.cancel` %} -Cancel an active timer. This resets the duration to the last known initial value without firing the `timer.finished` event. If no `entity_id` is given all active timers will be cancelled. +Cancel an active timer. This resets the duration to the last known initial value without firing the `timer.finished` event. If no `entity_id` is given all active timers will be canceled. | Service data attribute | Optional | Description | | ---------------------- | -------- | ----------- | @@ -92,42 +92,71 @@ Select serv
 }
 ```
 
-### {% linkable_title Configuration example %}
+## {% linkable_title Examples %}
+
+Set a timer called `test` to a duration of 30 seconds. 
 
 ```yaml
 # Example configuration.yaml entry
-
-# Set a timer called test to a duration of 30 seconds: 
 timer:
   test:
     duration: 1h) on slow devices. You might have to use `sudo` when installing `autoconf`.

+ +## {% linkable_title Troubleshooting %} +- Firmware updates: After updating the firmware of your Trådfri gateway it might be necessary to repeat the configuration process. If you encounter problems, delete `.tradfri_psk.conf`, restart Home Assistant, when prompted enter the security key and click configure, just like during initial setup. (Possible errors: ```Fatal DTLS error: code 115```) diff --git a/source/_components/tts.amazon_polly.markdown b/source/_components/tts.amazon_polly.markdown index 465a5abea16..8be1fdc0a5e 100644 --- a/source/_components/tts.amazon_polly.markdown +++ b/source/_components/tts.amazon_polly.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Amazon Polly" -description: "Instructions how to setup Amazon Polly with Home Assistant." +description: "Instructions on how to setup Amazon Polly with Home Assistant." date: 2017-01-28 09:00 sidebar: true comments: false @@ -15,6 +15,8 @@ ha_release: 0.37 The `amazon_polly` text-to-speech platform that works with [Amazon Polly](https://aws.amazon.com/polly/) to create the spoken output. Polly is a paid service via Amazon Web Services. There is a [free tier](https://aws.amazon.com/polly/pricing/) for the first 12 months and then a charge per million characters afterwards. +## {% linkable_title Configuration %} + To get started, add the following lines to your `configuration.yaml` (example for Amazon Polly): ```yaml @@ -23,33 +25,62 @@ tts: - platform: amazon_polly aws_access_key_id: AWS_ACCESS_KEY_ID aws_secret_access_key: AWS_SECRET_ACCESS_KEY - profile_name: AWS_PROFILE - region_name: 'us-east-1' - voice: Joanna ``` -Configuration variables: +{% configuration %} +aws_access_key_id: + description: "Your AWS Access Key ID. For more information, please read the [AWS General Reference regarding Security Credentials](http://docs.aws.amazon.com/general/latest/gr/aws-security-credentials.html). If provided, you must also provide an `aws_secret_access_key` and must **not** provide a `profile_name`." + required: true + type: string +aws_secret_access_key: + description: "Your AWS Secret Access Key. For more information, please read the [AWS General Reference regarding Security Credentials](http://docs.aws.amazon.com/general/latest/gr/aws-security-credentials.html). If provided, you must also provide an `aws_access_key_id` and must **not** provide a `profile_name`." + required: true + type: string +profile_name: + description: A credentials profile name. For more information, please see the [boto3 Documentation](http://boto3.readthedocs.io/en/latest/guide/configuration.html#shared-credentials-file) for more information. + required: false + type: string +region_name: + description: "The region identifier to connect to. The default is `us-east-1`. See the [AWS Regions and Endpoints Reference](https://docs.aws.amazon.com/general/latest/gr/rande.html#pol_region) for available regions." + required: false + type: string or list +name: + description: "Setting the optional parameter `name` allows multiple notifiers to be created. The default value is `notify`. The notifier will bind to the service `notify.NOTIFIER_NAME`." + required: false + type: string +text_type: + description: "Specify wherever to use text (default) or ssml markup by default." + required: false + type: string + default: text +voice: + description: "Voice name to be used. See the [Amazon Documentation](http://docs.aws.amazon.com/polly/latest/dg/voicelist.html) for available voices." + required: false + type: string +output_format: + description: "Override the default output format, e.g., `mp3`, `ogg_vorbis` or `pcm`." + required: false + type: string + default: mp3 +sample_rate: + description: "Override the default sample rate, defaults to 22050 for MP3 and Ogg Vorbis, 16000 for pcm." + required: false + type: string +{% endconfiguration %} -| Parameter | Value | Description | -|---------------------|----------|-------------| -| `aws_access_key_id` | Required | Your AWS Access Key ID. For more information, please read the [AWS General Reference regarding Security Credentials](http://docs.aws.amazon.com/general/latest/gr/aws-security-credentials.html). If provided, you must also provide an `aws_secret_access_key` and must **not** provide a `profile_name` | -| `aws_secret_access_key` | Required | Your AWS Secret Access Key. For more information, please read the [AWS General Reference regarding Security Credentials](http://docs.aws.amazon.com/general/latest/gr/aws-security-credentials.html). If provided, you must also provide an `aws_access_key_id` and must **not** provide a `profile_name`. | -| `profile_name` | Optional | A credentials profile name. For more information, please see the [boto3 Documentation](http://boto3.readthedocs.io/en/latest/guide/configuration.html#shared-credentials-file) for more information. | -| `region_name` | Optional | The region identifier to connect to. The default is `us-east-1`. | -| `name` | Optional | Setting the optional parameter `name` allows multiple notifiers to be created. The default value is `notify`. The notifier will bind to the service `notify.NOTIFIER_NAME`. | -| `text_type` | text/ssml | text or ssml: Specify wherever to use text (default) or ssml markup by default. | -| `voice` | Optional | Voice name to be used. See the [Amazon Documentation](http://docs.aws.amazon.com/polly/latest/dg/voicelist.html) for available voices. | -| `output_format` | mp3/ogg_vorbis/pcm | Override the default output format, defaults to MP3. | -| `sample_rate` | 8000/16000/22050 | Override the default sample rate, defaults to 22050 for MP3 and Ogg Vorbis, 16000 for pcm. | -## Usage +## {% linkable_title Usage %} + Say to all `media_player` device entities: + ```yaml - service: tts.amazon_polly_say data_template: message: 'Hello from Amazon Polly' ``` + or + ```yaml - service: tts.amazon_polly_say data_template: diff --git a/source/_components/tts.baidu.markdown b/source/_components/tts.baidu.markdown index e8499742fd8..47ba6f0ad8f 100644 --- a/source/_components/tts.baidu.markdown +++ b/source/_components/tts.baidu.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Baidu Text-to-Speech" -description: "Instructions how to setup Baidu TTS with Home Assistant." +description: "Instructions on how to setup Baidu TTS with Home Assistant." date: 2017-11-21 09:00 sidebar: true comments: false diff --git a/source/_components/tts.google.markdown b/source/_components/tts.google.markdown index 50321b01045..1b0468c87d5 100644 --- a/source/_components/tts.google.markdown +++ b/source/_components/tts.google.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Google Text-to-Speech" -description: "Instructions how to setup Google Text-to-Speech with Home Assistant." +description: "Instructions on how to setup Google Text-to-Speech with Home Assistant." date: 2016-12-13 07:00 sidebar: true comments: false @@ -24,7 +24,8 @@ tts: Configuration variables: -- **language** (*Optional*): The language to use. Defaults to `en`. +- **language** (*Optional*): The language to use. Defaults to `en`. + - [Complete list of supported languages](https://cloud.google.com/speech/docs/languages). A full configuration sample: @@ -35,7 +36,7 @@ tts: language: 'de' ``` -If you are using SSL certificate or Docker, you may need to add the `base_url` configuration variable to your `html` component as follows: +If you are using SSL certificate or Docker, you may need to add the `base_url` configuration variable to your `http` component as follows: ```yaml #Example configuration.yaml entry diff --git a/source/_components/tts.markdown b/source/_components/tts.markdown index 7a2733ebbc3..5fc0d8de47b 100644 --- a/source/_components/tts.markdown +++ b/source/_components/tts.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Text-to-Speech (TTS)" -description: "Instructions how to setup Text-to-Speech (TTS) with Home Assistant." +description: "Instructions on how to setup Text-to-Speech (TTS) with Home Assistant." date: 2016-12-13 07:00 sidebar: true comments: false @@ -22,13 +22,17 @@ tts: - platform: google ``` -The following optional parameters can be used with any platform. However the TTS component will only look for global settings under the configuration of the first configured platform: +

+Depending on your setup, you might need to set a base URL (`base_url`) inside the [http component](/components/http/). +

+ +The following optional parameters can be used with any platform. However, the TTS component will only look for global settings under the configuration of the first configured platform: | Parameter | Default | Description | |---------------------|---------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | `cache` | True | Allow TTS to cache voice file to local storage. | -| `cache_dir` | tts | Folder name or path to folder for caching files. | -| `time_memory` | 300 | Time to hold the voice data inside memory for fast play on media player. Minimum is 60 s and the maximum 57600 s (16 hours). | +| `cache_dir` | tts | Folder name or path to a folder for caching files. | +| `time_memory` | 300 | Time to hold the voice data inside memory for fast play on a media player. Minimum is 60 s and the maximum 57600 s (16 hours). | The extended example from above would look like the following sample: @@ -41,13 +45,9 @@ tts: time_memory: 300 ``` -

-If you are running Home Assistant over SSL or from within a container, you will have to setup a base URL (`base_url`) inside the [http component](/components/http/). -

- ## {% linkable_title Service say %} -The `say` service support `language` and on some platforms also `options` for set i.e. *voice, motion, speed, etc*. The text for speech is set with `message`. +The `say` service support `language` and on some platforms also `options` for set, i.e., *voice, motion, speed, etc*. The text for speech is set with `message`. Say to all `media_player` device entities: @@ -88,3 +88,33 @@ data_template: ## {% linkable_title Cache %} The component has two caches. Both caches can be controlled with the `cache` option in the platform configuration or the service call `say`. A long time cache will be located on the file system. The in-memory cache for fast responses to media players will be auto-cleaned after a short period. + +## {% linkable_title REST Api %} + +#### {% linkable_title POST /api/tts_get_url %} + +Returns an URL to the generated TTS file. Platform and message are required. + +```json +{ + "plaform": "amazon_polly", + "message": "I am speaking now" +} +``` + +The return code is 200 if the file is generated. The message body will contain a JSON object with the URL. + +```json +{ + "url": "http://127.0.0.1:8123/api/tts_proxy/265944c108cbb00b2a621be5930513e03a0bb2cd_en_-_demo.mp3" +} +``` + +Sample `curl` command: + +```bash +$ curl -X POST -H "x-ha-access: YOUR_PASSWORD" \ + -H "Content-Type: application/json" \ + -d '{"message": "I am speaking now", "platform": "amazon_polly"}' \ + http://localhost:8123/api/tts_get_url +``` diff --git a/source/_components/tts.marytts.markdown b/source/_components/tts.marytts.markdown index 42fff710e1a..7b13da9906b 100644 --- a/source/_components/tts.marytts.markdown +++ b/source/_components/tts.marytts.markdown @@ -1,7 +1,7 @@ --- layout: page title: "MaryTTS" -description: "Instructions how to setup MaryTTS with Home Assistant." +description: "Instructions on how to setup MaryTTS with Home Assistant." date: 2017-04-08 16:49 sidebar: true comments: false diff --git a/source/_components/tts.microsoft.markdown b/source/_components/tts.microsoft.markdown index b55acbd0fac..bb68917616e 100644 --- a/source/_components/tts.microsoft.markdown +++ b/source/_components/tts.microsoft.markdown @@ -1,8 +1,8 @@ --- layout: page title: "Microsoft Text-to-Speech" -description: "Instructions how to setup Microsoft Text-to-Speech with Home Assistant." -date: 2017-10-23 11:00 +description: "Instructions on how to setup Microsoft Text-to-Speech with Home Assistant." +date: 2017-11-07 12:00 sidebar: true comments: false sharing: true @@ -27,10 +27,13 @@ tts: Configuration variables: - **api_key** (*Required*): Your API key. -- **language** (*Optional*): The language to use. Defaults to `en-us`. Accepted values are listed in the documentation mentioned below. -- **gender** (*Optional*): The gender you would like to use for the voice. Accepted values are `Female` and `Male`. Defaults to `Female` -- **type** (*Optional*): The voice type you want to use. Accepted values are listed in the service name mapping [in the documentation](https://docs.microsoft.com/en-us/azure/cognitive-services/Speech/api-reference-rest/bingvoiceoutput). Defaults to `ZiraRUS` - +- **language** (*Optional*): The language to use. Defaults to `en-us`. Accepted values are listed in the documentation mentioned below. Note that if you set the language to anything other than the default of `en-us`, you will need to specify a matching voice type as well. +- **gender** (*Optional*): The gender you would like to use for the voice. Accepted values are `Female` and `Male`. Defaults to `Female`. +- **type** (*Optional*): The voice type you want to use. Accepted values are listed as the service name mapping [in the documentation](https://docs.microsoft.com/en-us/azure/cognitive-services/Speech/api-reference-rest/bingvoiceoutput). Defaults to `ZiraRUS`. +- **rate** (*Optional*): Change the rate of speaking in percentage. Example values: `25`, `50`. Defaults to `0` (no change). +- **volume** (*Optional*): Change the volume of the output in percentage. Example values: `-20`, `70`. Defaults to `0` (no change). +- **pitch** (*Optional*): Change the pitch of the output. Example values: `high`. Defaults to `default` (no change). +- **contour** (*Optional*): Change the contour of the output in percentages. This overrides the pitch setting. See the [W3 SSML specification](http://www.w3.org/TR/speech-synthesis/#pitch_contour) for what it does. Example value: `(0,0) (100,100)`. A full configuration sample including optional configuration variables: @@ -39,7 +42,11 @@ A full configuration sample including optional configuration variables: tts: - platform: microsoft api_key: XXXXXXXXX - language: en-us - gender: male - type: BenjaminRUS + language: en-gb + gender: Male + type: George, Apollo + rate: 20 + volume: -50 + pitch: high + contour: (0, 0) (100, 100) ``` diff --git a/source/_components/tts.picotts.markdown b/source/_components/tts.picotts.markdown index 411cc11c4c1..5525c0b8ecb 100644 --- a/source/_components/tts.picotts.markdown +++ b/source/_components/tts.picotts.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Pico Text-to-Speech" -description: "Instructions how to setup Pico Text-to-Speech with Home Assistant." +description: "Instructions on how to setup Pico Text-to-Speech with Home Assistant." date: 2017-01-03 16:00 sidebar: true comments: false diff --git a/source/_components/tts.voicerss.markdown b/source/_components/tts.voicerss.markdown index a256b144dcc..99e6b5d685c 100644 --- a/source/_components/tts.voicerss.markdown +++ b/source/_components/tts.voicerss.markdown @@ -1,7 +1,7 @@ --- layout: page title: "VoiceRSS" -description: "Instructions how to setup VoiceRSS TTS with Home Assistant." +description: "Instructions on how to setup VoiceRSS TTS with Home Assistant." date: 2016-12-13 07:00 sidebar: true comments: false @@ -41,7 +41,7 @@ tts: api_key: 'XXXXX' language: 'de-de' codec: mp3 - format: 8khz_8bit_mono + format: '8khz_8bit_mono' ``` Please note, some media_players require a certain format. For example the Sonos requires a format of '44khz_16bit_stereo' diff --git a/source/_components/tts.yandextts.markdown b/source/_components/tts.yandextts.markdown index 18693965e7e..af30eacea74 100644 --- a/source/_components/tts.yandextts.markdown +++ b/source/_components/tts.yandextts.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Yandex TTS" -description: "Instructions how to setup Yandex SpeechKit TTS with Home Assistant." +description: "Instructions on how to setup Yandex SpeechKit TTS with Home Assistant." date: 2017-01-17 03:04 sidebar: true comments: false diff --git a/source/_components/tuya.markdown b/source/_components/tuya.markdown new file mode 100644 index 00000000000..75b6aecf699 --- /dev/null +++ b/source/_components/tuya.markdown @@ -0,0 +1,51 @@ +--- +layout: page +title: "Tuya" +description: "Instructions on how to setup the Tuya hub within Home Assistant." +date: 2018-07-09 09:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: tuya.png +ha_category: Hub +ha_iot_class: "Cloud Polling" +ha_release: 0.74 +--- + +The `tuya` component is the main component to integrate all [Tuya Smart](https://www.tuya.com) related platforms. You will need your Tuya account information (username, password and account country code) to discover and control devices which related to your account. + +## {% linkable_title Configuration %} + +To add your Tuya devices into your Home Assistant installation, add the following to your `configuration.yaml` file: + +```yaml +tuya: + username: YOUR_TUYA_USERNAME + password: YOUR_TUYA_PASSWORD + country_code: YOUR_ACCOUNT_COUNTRYCODE +``` + +{% configuration %} +username: + description: Your username to login to Tuya. This may be your phone number. + required: true + type: string +password: + description: Your password to login to Tuya. + required: true + type: string +country_code: + description: "Your account [country code](https://www.countrycode.org/) (e.g., 1 for USA or 86 for China)." + required: true + type: string +{% endconfiguration %} + +## {% linkable_title Service %} + +These services are available for the `tuya` component: + +- force_update +- pull_devices + +Devices state data and new devices will refresh automatically. If you want to refresh all devices information or get new devices related to your account manually, you can call the `force_update` or `pull_devices` service. diff --git a/source/_components/twilio.markdown b/source/_components/twilio.markdown index 299a91f0195..ed3752a9e25 100644 --- a/source/_components/twilio.markdown +++ b/source/_components/twilio.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Twilio" -description: "Instructions how to add Twilio notifications to Home Assistant." +description: "Instructions on how to add Twilio notifications to Home Assistant." date: 2016-05-14 14:14 sidebar: true comments: false @@ -32,4 +32,4 @@ Configuration variables: - **auth_token** (*Required*): Your Twilio AUTH TOKEN which can be found in your [console](https://www.twilio.com/console). It should be directly under where you found the `account_sid`. ### {% linkable_title Usage %} -After configuring the base Twilio component, add and configure either or both of the [twilio SMS](https://home-assistant.io/components/notify.twilio_sms/) and [twilio Phone](https://home-assistant.io/components/notify.twilio_call) components to utilize the notification functionality. +After configuring the base Twilio component, add and configure either or both of the [twilio SMS](/components/notify.twilio_sms/) and [twilio Phone](/components/notify.twilio_call) components to utilize the notification functionality. diff --git a/source/_components/upcloud.markdown b/source/_components/upcloud.markdown new file mode 100644 index 00000000000..dcb15e41fc4 --- /dev/null +++ b/source/_components/upcloud.markdown @@ -0,0 +1,44 @@ +--- +layout: page +title: UpCloud +description: Instructions on how to integrate UpCloud within Home Assistant. +date: 2018-01-28 20:00 +sidebar: true +comments: false +sharing: true +footer: true +ha_category: Hub +ha_release: 0.65 +logo: upcloud.png +ha_iot_class: Cloud Polling +--- + + +The `upcloud` component allows you to access the information about your [UpCloud](https://www.upcloud.com/) servers from Home Assistant. + +Set up your API user credentials in your [UpCloud control panel](https://my.upcloud.com/). + +To integrate your UpCloud servers with Home Assistant, add the following section to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +upcloud: + username: YOUR_API_USERNAME + password: YOUR_API_PASSWORD +``` + +{% configuration %} +username: + description: Your UpCloud API username. + required: true + type: string +password: + description: Your UpCloud API user password. + required: true + type: string +scan_interval: + description: Update interval in seconds. + required: false + type: int + default: 60 +{% endconfiguration %} diff --git a/source/_components/updater.markdown b/source/_components/updater.markdown index 4a5b9777b35..b87d554bb91 100644 --- a/source/_components/updater.markdown +++ b/source/_components/updater.markdown @@ -11,7 +11,7 @@ logo: home-assistant.png ha_category: Other --- -The `updater` component will check daily for new releases. It will show a badge in the frontend if a new version is found. As [Hass.io](/hassio/) has it's own schedule for release it doesn't make sense to use this component on Hass.io. +The `updater` component will check daily for new releases. It will show a badge in the frontend if a new version is found. As [Hass.io](/hassio/) has its own schedule for release it doesn't make sense to use this component on Hass.io. The updater component will also collect basic information about the running Home Assistant instance and its environment. The information includes the current Home Assistant version, the time zone, Python version and operating system information. No identifiable information (i.e., IP address, GPS coordinates, etc.) will ever be collected. If you are concerned about your privacy, you are welcome to scrutinize the Python [source code](https://github.com/home-assistant/home-assistant/blob/dev/homeassistant/components/updater.py#L91). For further information about the Updater's data, please check the [detailed overview](/docs/backend/updater/). diff --git a/source/_components/upnp.markdown b/source/_components/upnp.markdown index fb538ef183b..842e3b25ba4 100644 --- a/source/_components/upnp.markdown +++ b/source/_components/upnp.markdown @@ -18,6 +18,8 @@ The IGD automatically creates port forwarding mappings on your router for Home A Please note that UPnP or NAT-PMP needs to be enabled on your router for this component to work. +## {% linkable_title Configuration %} + To integrate this into Home Assistant, add the following section to your `configuration.yaml` file: ```yaml @@ -30,8 +32,6 @@ upnp: If you which to have the statistics without having port mapping done through IGD, add the option **port_mapping**. -Configuration variables: - {% configuration binary_sensor.template %} ports: description: Map of ports to map from internal to external. Pass 'hass' as internal port to use the port Home Assistant runs on. diff --git a/source/_components/usps.markdown b/source/_components/usps.markdown index 6f92cc8e779..3a7c9a06abe 100644 --- a/source/_components/usps.markdown +++ b/source/_components/usps.markdown @@ -16,6 +16,37 @@ ha_iot_class: "Cloud Polling" The `usps` platform allows one to track deliveries and inbound mail from the [US Postal Service (USPS)](https://www.usps.com/). In addition to having a USPS account, you will need to complete the "Opt-In" process for packages by clicking "Get Started Now" on [this page](https://my.usps.com/mobileWeb/pages/intro/start.action). You must also "Opt-In" to [Informed Delivery](https://informeddelivery.usps.com/box/pages/intro/start.action) to see inbound mail. +## Prerequisites + +This component requires that a headless-capable web browser is installed on your system - either PhantomJS or Google Chrome. Preferably use Chrome if your operating system supports it, since PhantomJS is deprecated. + +

+ If you are using a Raspberry Pi, you must use PhantomJS. +

+ +### PhantomJS + +Install the latest version of [PhantomJS]( http://phantomjs.org/download.html). Ensure the executable is on your `PATH`. `phantomjs --version` should work and report the correct version. This is the default option and requires no further configuration. + +

+ Don't use apt-get to install PhantomJS. This version is not compatible. +

+ +If you use the PhantomJS option, specify `driver: phantomjs` in your `usps` configuration. + + +### Chrome + +Install Chrome 59 or greater (preferably the most recent). Install the latest [Chromedriver](https://sites.google.com/a/chromium.org/chromedriver/downloads). Ensure both executables are on your `PATH`. `google-chrome --version` and `chromedriver --version` should work and report the correct version. + +OS-specific instructions: +- [Ubuntu 16](https://gist.github.com/ziadoz/3e8ab7e944d02fe872c3454d17af31a5) (Selenium server portion *not* necessary) +- [RHEL/Centos 7](https://stackoverflow.com/a/46686621) + +If you use the Chrome option, specify `driver: chrome` in your `usps` configuration. + +## Configuration + To enable this component, add the following lines to your `configuration.yaml`: ```yaml @@ -31,6 +62,7 @@ Configuration options for the USPS component: - **username** (*Required*): The username to access the MyUSPS service. - **password** (*Required*): The password for the given username. +- **driver** (*Required*): Specify if you're using `phantomjs` or `chrome`. - **name** (*Optional*): Prefix for sensor names (defaults to "USPS")

diff --git a/source/_components/vacuum.dyson.markdown b/source/_components/vacuum.dyson.markdown index 4ac3d49e5e1..b482899130c 100644 --- a/source/_components/vacuum.dyson.markdown +++ b/source/_components/vacuum.dyson.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Dyson 360 Eye" -description: "Instructions how to integrate your Dyson Eye 360 vacuum robot within Home Assistant." +description: "Instructions on how to integrate your Dyson Eye 360 vacuum robot within Home Assistant." date: 2017-08-06 10:30 sidebar: true comments: false diff --git a/source/_components/vacuum.markdown b/source/_components/vacuum.markdown index 51b0adc667a..bcbf2b1ccaa 100644 --- a/source/_components/vacuum.markdown +++ b/source/_components/vacuum.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Vacuum cleaner robots" -description: "Instructions how to setup a botvac in Home Assistant." +description: "Instructions on how to setup and use vacuum's in Home Assistant." date: 2017-07-28 15:00 sidebar: true comments: false @@ -25,79 +25,79 @@ vacuum: Available services: `turn_on`, `turn_off`, `start_pause`, `stop`, `return_to_home`, `locate`, `clean_spot`, `set_fanspeed` and `send_command`. -Before calling one of these services, make sure your botvac platform supports it. +Before calling one of these services, make sure your vacuum platform supports it. -#### {% linkable_title Service `vacuum/turn_on` %} +#### {% linkable_title Service `vacuum.turn_on` %} Start a new cleaning task. | Service data attribute | Optional | Description | |---------------------------|----------|-------------------------------------------------------| -| `entity_id` | yes | Only act on specific botvac. Else targets all. | +| `entity_id` | yes | Only act on specific vacuum. Else targets all. | -#### {% linkable_title Service `vacuum/turn_off` %} +#### {% linkable_title Service `vacuum.turn_off` %} Stop the current cleaning task and return to the dock. | Service data attribute | Optional | Description | |---------------------------|----------|-------------------------------------------------------| -| `entity_id` | yes | Only act on specific botvac. Else targets all. | +| `entity_id` | yes | Only act on specific vacuum. Else targets all. | -#### {% linkable_title Service `vacuum/start_pause` %} +#### {% linkable_title Service `vacuum.start_pause` %} Start, pause or resume a cleaning task. | Service data attribute | Optional | Description | |---------------------------|----------|-------------------------------------------------------| -| `entity_id` | yes | Only act on specific botvac. Else targets all. | +| `entity_id` | yes | Only act on specific vacuum. Else targets all. | -#### {% linkable_title Service `vacuum/stop` %} +#### {% linkable_title Service `vacuum.stop` %} -Stop the current activity of the botvac. +Stop the current activity of the vacuum. | Service data attribute | Optional | Description | |---------------------------|----------|-------------------------------------------------------| -| `entity_id` | yes | Only act on specific botvac. Else targets all. | +| `entity_id` | yes | Only act on specific vacuum. Else targets all. | -#### {% linkable_title Service `vacuum/return_to_home` %} +#### {% linkable_title Service `vacuum.return_to_home` %} -Tell the botvac to return home. +Tell the vacuum to return home. | Service data attribute | Optional | Description | |---------------------------|----------|-------------------------------------------------------| -| `entity_id` | yes | Only act on specific botvac. Else targets all. | +| `entity_id` | yes | Only act on specific vacuum. Else targets all. | -#### {% linkable_title Service `vacuum/locate` %} +#### {% linkable_title Service `vacuum.locate` %} Locate the vacuum cleaner robot. | Service data attribute | Optional | Description | |---------------------------|----------|-------------------------------------------------------| -| `entity_id` | yes | Only act on specific botvac. Else targets all. | +| `entity_id` | yes | Only act on specific vacuum. Else targets all. | -#### {% linkable_title Service `vacuum/clean_spot` %} +#### {% linkable_title Service `vacuum.clean_spot` %} Tell the vacuum cleaner to do a spot clean-up. | Service data attribute | Optional | Description | |---------------------------|----------|-------------------------------------------------------| -| `entity_id` | yes | Only act on specific botvac. Else targets all. | +| `entity_id` | yes | Only act on specific vacuum. Else targets all. | -#### {% linkable_title Service `vacuum/set_fanspeed` %} +#### {% linkable_title Service `vacuum.set_fanspeed` %} -Set the fan speed of the botvac. The `fanspeed` can be a label, as `balanced` or `turbo`, or be a number; it depends on the `vacuum` platform. +Set the fan speed of the vacuum. The `fanspeed` can be a label, as `balanced` or `turbo`, or be a number; it depends on the `vacuum` platform. | Service data attribute | Optional | Description | |---------------------------|----------|-------------------------------------------------------| -| `entity_id` | yes | Only act on specific botvac. Else targets all. | +| `entity_id` | yes | Only act on specific vacuum. Else targets all. | | `fanspeed` | no | Platform dependent vacuum cleaner fan speed, with speed steps, like 'medium', or by percentage, between 0 and 100. | -#### {% linkable_title Service `vacuum/send_command` %} +#### {% linkable_title Service `vacuum.send_command` %} Send a platform-specific command to the vacuum cleaner. | Service data attribute | Optional | Description | |---------------------------|----------|-------------------------------------------------------| -| `entity_id` | yes | Only act on specific botvac. Else targets all. | +| `entity_id` | yes | Only act on specific vacuum. Else targets all. | | `command` | no | Command to execute. | | `params` | yes | Parameters for the command. | diff --git a/source/_components/vacuum.mqtt.markdown b/source/_components/vacuum.mqtt.markdown index df5a01a8cf8..1777c7cd890 100644 --- a/source/_components/vacuum.mqtt.markdown +++ b/source/_components/vacuum.mqtt.markdown @@ -1,7 +1,7 @@ --- layout: page title: "MQTT Vacuum" -description: "Instructions how to integrate your MQTT enabled Vacuum within Home Assistant." +description: "Instructions on how to integrate your MQTT enabled Vacuum within Home Assistant." date: 2017-09-11 20:26 sidebar: true comments: false @@ -53,36 +53,133 @@ vacuum: send_command_topic: 'vacuum/send_command' ``` -Basic Configuration variables: - -- **name** (*Optional*): The name of the vacuum. Defaults to `MQTT Vacuum`. -- **supported_features** (*Optional*): List of features that the vacuum supports (possible values are `turn_on`, `turn_off`, `pause`, `stop`, `return_home`, `battery`, `status`, `locate`, `clean_spot`, `fan_speed`, `send_command`). Defaults to `turn_on`, `turn_off`, `stop`, `return_home`, `status`, `battery`, `clean_spot`. -- **command_topic** (*Optional*): The MQTT topic to publish commands to control the vacuum. - -Advanced Configuration variables: - -- **qos** (*Optional*): The maximum QoS level of the state topic. Defaults to `0`. Will also be used when publishing messages. -- **retain** (*Optional*): If the published message should have the retain flag on or not. Defaults to `false`. -- **payload_turn_on** (*Optional*): The payload to send to the `command_topic` to begin the cleaning cycle. Defaults to `turn_on`. -- **payload_turn_off** (*Optional*): The payload to send to the `command_topic` to turn the vacuum off. Defaults to `turn_off`. -- **payload_return_to_base** (*Optional*): The payload to send to the `command_topic` to tell the vacuum to return to base. Defaults to `return_to_base`. -- **payload_stop** (*Optional*): The payload to send to the `command_topic` to stop the vacuum. Defaults to `stop`. -- **payload_clean_spot** (*Optional*): The payload to send to the `command_topic` to begin a spot cleaning cycle. Defaults to `clean_spot`. -- **payload_locate** (*Optional*): The payload to send to the `command_topic` to locate the vacuum (typically plays a song). Defaults to `locate`. -- **payload_start_pause** (*Optional*): The payload to send to the `command_topic` to start or pause the vacuum. Defaults to `start_pause`. -- **battery_level_topic** (*Optional*): The MQTT topic subscribed to receive battery level values from the vacuum. -- **battery_level_template** (*Optional*): Defines a [template](/topics/templating/) to define the battery level of the vacuum. -- **charging_topic** (*Optional*): The MQTT topic subscribed to receive charging state values from the vacuum. -- **charging_template** (*Optional*): Defines a [template](/topics/templating/) to define the charging state of the vacuum. -- **cleaning_topic** (*Optional*): The MQTT topic subscribed to receive cleaning state values from the vacuum. -- **cleaning_template** (*Optional*): Defines a [template](/topics/templating/) to define the cleaning state of the vacuum. -- **docked_topic** (*Optional*): The MQTT topic subscribed to receive docked state values from the vacuum. -- **docked_template** (*Optional*): Defines a [template](/topics/templating/) to define the docked state of the vacuum. -- **fan_speed_topic** (*Optional*): The MQTT topic subscribed to receive fan speed values from the vacuum. -- **fan_speed_template** (*Optional*): Defines a [template](/topics/templating/) to define the fan speed of the vacuum. -- **set_fan_speed_topic** (*Optional*): The MQTT topic to publish commands to control the vacuum's fan speed. -- **fan_speed_list** (*Optional*): List of possible fan speeds for the vacuum. -- **send_command_topic** (*Optional*): The MQTT topic to publish custom commands to the vacuum. +{% configuration %} +name: + description: The name of the vacuum. + required: false + type: string + default: MQTT Vacuum +supported_features: + description: "List of features that the vacuum supports (possible values are `turn_on`, `turn_off`, `pause`, `stop`, `return_home`, `battery`, `status`, `locate`, `clean_spot`, `fan_speed`, `send_command`)." + required: false + type: string list + default: "`turn_on`, `turn_off`, `stop`, `return_home`, `status`, `battery`, `clean_spot`" +command_topic: + description: The MQTT topic to publish commands to control the vacuum. + required: false + type: string +qos: + description: The maximum QoS level of the state topic. + required: false + type: integer + default: 0 +retain: + description: If the published message should have the retain flag on or not. + required: false + type: boolean + default: false +payload_turn_on: + description: "The payload to send to the `command_topic` to begin the cleaning cycle." + required: false + type: string + default: turn_on +payload_turn_off: + description: "The payload to send to the `command_topic` to turn the vacuum off." + required: false + type: string + default: turn_off +payload_return_to_base: + description: The payload to send to the `command_topic` to tell the vacuum to return to base. + required: false + type: string + default: return_to_base +payload_stop: + description: The payload to send to the `command_topic` to stop the vacuum. + required: false + type: string + default: stop +payload_clean_spot: + description: The payload to send to the `command_topic` to begin a spot cleaning cycle. + required: false + type: string + default: clean_spot +payload_locate: + description: The payload to send to the `command_topic` to locate the vacuum (typically plays a song). + required: false + type: string + default: locate +payload_start_pause: + description: The payload to send to the `command_topic` to start or pause the vacuum. + required: false + type: string + default: start_pause +battery_level_topic: + description: The MQTT topic subscribed to receive battery level values from the vacuum. + required: false + type: string +battery_level_template: + description: "Defines a [template](/topics/templating/) to define the battery level of the vacuum." + required: false + type: string +charging_topic: + description: The MQTT topic subscribed to receive charging state values from the vacuum. + required: false + type: string +charging_template: + description: "Defines a [template](/topics/templating/) to define the charging state of the vacuum." + required: false + type: string +cleaning_topic: + description: The MQTT topic subscribed to receive cleaning state values from the vacuum. + required: false + type: string +cleaning_template: + description: "Defines a [template](/topics/templating/) to define the cleaning state of the vacuum." + required: false + type: string +docked_topic: + description: The MQTT topic subscribed to receive docked state values from the vacuum. + required: false + type: string +docked_template: + description: "Defines a [template](/topics/templating/) to define the docked state of the vacuum." + required: false + type: string +fan_speed_topic: + description: The MQTT topic subscribed to receive fan speed values from the vacuum. + required: false + type: string +fan_speed_template: + description: "Defines a [template](/topics/templating/) to define the fan speed of the vacuum." + required: false + type: string +set_fan_speed_topic: + description: The MQTT topic to publish commands to control the vacuum's fan speed. + required: false + type: string +fan_speed_list: + description: List of possible fan speeds for the vacuum. + required: false + type: string list +send_command_topic: + description: The MQTT topic to publish custom commands to the vacuum. + required: false + type: string +availability_topic: + description: The MQTT topic subscribed to receive availability (online/offline) updates. + required: false + type: string +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 +{% endconfiguration %} ### {% linkable_title Default MQTT Protocol %} diff --git a/source/_components/vacuum.neato.markdown b/source/_components/vacuum.neato.markdown index 2c0ed934646..d1d334bc3de 100644 --- a/source/_components/vacuum.neato.markdown +++ b/source/_components/vacuum.neato.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Neato Robotics Vacuum" -description: "Instructions how to integrate a Neato Botvac Connected Vacuum within Home Assistant." +description: "Instructions on how to integrate a Neato Botvac Connected Vacuum within Home Assistant." date: 2017-10-18 16:11 sidebar: true comments: false @@ -14,11 +14,15 @@ ha_iot_class: "Cloud Polling" redirect_from: /components/sensor.neato/ --- -

-Starting with 0.57 the `neato` sensor was migrated to a vacuum platform. -

- -The `neato` vacuum platform allows you to control your [Neato Botvac Connected](https://www.neatorobotics.com/robot-vacuum/botvac-connected-series/botvac-connected/). +The `neato` vacuum platform allows you to control your [Neato Botvac Connected](https://www.neatorobotics.com/robot-vacuum/botvac-connected-series/). The status will contain attributes on the robots last clean session. -To add `neato` sensors to your installation, follow instructions in [Neato component](/components/neato/). +To add `neato` vacuum to your installation, please follow instructions in [Neato component](/components/neato/). + +Currently supported features are: + +- `turn_on` +- `pause` +- `stop` +- `return_to_home` +- `turn_off` (stop all activity and return to dock) diff --git a/source/_components/vacuum.roomba.markdown b/source/_components/vacuum.roomba.markdown index 32c1393eb26..0a81a732fcb 100644 --- a/source/_components/vacuum.roomba.markdown +++ b/source/_components/vacuum.roomba.markdown @@ -1,7 +1,7 @@ --- layout: page title: "iRobot Roomba" -description: "Instructions how to integrate your Wi-Fi enabled Roomba within Home Assistant." +description: "Instructions on how to integrate your Wi-Fi enabled Roomba within Home Assistant." date: 2017-08-04 20:43 sidebar: true comments: false @@ -32,7 +32,7 @@ vacuum: Configuration variables: - **host** (*Required*): Hostname or IP address of the Roomba. -- **username** (*Required*): The username (BLID) fro your device. +- **username** (*Required*): The username (BLID) for your device. - **password** (*Required*): The password for your device. - **name** (*Optional*): The name of the vacuum. - **certificate** (*Optional*): Path to your certificate store. Defaults to `/etc/ssl/certs/ca-certificates.crt`. diff --git a/source/_components/vacuum.xiaomi_miio.markdown b/source/_components/vacuum.xiaomi_miio.markdown index e14e1506578..be3f1ed0bbf 100644 --- a/source/_components/vacuum.xiaomi_miio.markdown +++ b/source/_components/vacuum.xiaomi_miio.markdown @@ -2,7 +2,7 @@ layout: page title: "Xiaomi Mi Robot Vacuum" description: "Instructions on how to integrate your Xiaomi Mi Robot Vacuum within Home Assistant." -date: 2017-05-05 18:11 +date: 2018-06-03 11:30 sidebar: true comments: false sharing: true @@ -13,8 +13,7 @@ ha_release: 0.51 ha_iot_class: "Local Polling" --- -The `xiaomi miio` vacuum platform allows you to control the state of your -[Xiaomi Mi Robot Vacuum](http://www.mi.com/roomrobot/). +The `xiaomi miio` vacuum platform allows you to control the state of your [Xiaomi Mi Robot Vacuum](http://www.mi.com/roomrobot/). Currently supported features are: @@ -50,26 +49,22 @@ Configuration variables: ## {% linkable_title Platform Services %} -In addition to [all of the services provided by the `vacuum` component] -]) (`turn_on`, `turn_off`, `start_pause`, `stop`, `return_to_home`, `locate`, -`set_fan_speed` and `send_command`), the `xiaomi` platform introduces specific -services to access the remote control mode of the robot. These are: +In addition to all of the services provided by the `vacuum` component (`turn_on`, `turn_off`, `start_pause`, `stop`, `return_to_home`, `locate`, `set_fan_speed` and `send_command`), the `xiaomi` platform introduces specific services to access the remote control mode of the robot. These are: - `xiaomi_remote_control_start` - `xiaomi_remote_control_stop` - `xiaomi_remote_control_move` - `xiaomi_remote_control_move_step` -### {% linkable_title Service `vacuum/xiaomi_remote_control_start` %} +### {% linkable_title Service `vacuum.xiaomi_remote_control_start` %} -Start the remote control mode of the robot. You can then move it with -`remote_control_move`; when done, call `remote_control_stop`. +Start the remote control mode of the robot. You can then move it with `remote_control_move`; when done, call `remote_control_stop`. | Service data attribute | Optional | Description | |---------------------------|----------|-------------------------------------------------------| | `entity_id` | yes | Only act on specific robot; default targets all | -### {% linkable_title Service `vacuum/xiaomi_remote_control_stop` %} +### {% linkable_title Service `vacuum.xiaomi_remote_control_stop` %} Exit the remote control mode of the robot. @@ -77,20 +72,18 @@ Exit the remote control mode of the robot. |---------------------------|----------|-------------------------------------------------------| | `entity_id` | yes | Only act on specific robot; default targets all | -### {% linkable_title Service `vacuum/xiaomi_remote_control_move` %} +### {% linkable_title Service `vacuum.xiaomi_remote_control_move` %} -Remote control the robot. Please ensure you first set it in remote control -mode with `remote_control_start`. +Remote control the robot. Please ensure you first set it in remote control mode with `remote_control_start`. | Service data attribute | Optional | Description | |---------------------------|----------|-------------------------------------------------------| | `entity_id` | yes | Only act on specific robot; default targets all | | `velocity` | no | Speed: between -0.29 and 0.29 | | `rotation` | no | Rotation: between -179 degrees and 179 degrees | -| `duration` | no | The number of seconds that the robot should move for | +| `duration` | no | The number of milliseconds that the robot should move for | - -### {% linkable_title Service `vacuum/xiaomi_remote_control_move_step` %} +### {% linkable_title Service `vacuum.xiaomi_remote_control_move_step` %} Enter remote control mode, make one move, stop, and exit remote control mode. @@ -99,13 +92,12 @@ Enter remote control mode, make one move, stop, and exit remote control mode. | `entity_id` | yes | Only act on specific robot; default targets all | | `velocity` | no | Speed: between -0.29 and 0.29. | | `rotation` | no | Rotation: between -179 degrees and 179 degrees. | -| `duration` | no | The number of seconds that the robot should move for | +| `duration` | no | The number of milliseconds that the robot should move for | ## {% linkable_title Attributes %} -In addition to [all of the attributes provided by the `vacuum` component](https://home-assistant.io/components/vacuum/#attributes), -(`battery_icon`, `cleaned_area`, `fan_speed`, `fan_speed_list`, `status`, and -`params`), the `xiaomi` platform introduces specific attributes. These are: +In addition to [all of the attributes provided by the `vacuum` component](/components/vacuum/#attributes), +(`battery_icon`, `cleaned_area`, `fan_speed`, `fan_speed_list`, `status`, and `params`), the `xiaomi` platform introduces specific attributes. These are: - `cleaning_time` - `do_not_disturb` @@ -133,12 +125,47 @@ The following table shows the units of measurement for each attribute: ## {% linkable_title Retrieving the Access Token %}

-This token (32 hexadecimal characters) is required for the Xiaomi Mi Robot -Vacuum and Xiaomi Philips Lights. The Xiaomi Gateway uses another security -method and requires a `key` (16 alphanumeric chars), which can be obtained -easily via a hidden menu item at the Mi-Home app. +As per [python-miio issue 185](https://github.com/rytilahti/python-miio/issues/185) the Android Mi-Home app no longer stores the token within the database (it's retrieved from Xiaomi servers from version 5.0.31+). Currently the only known fix is to uninstall, then install a downgraded version of the apk. Apkmirror is a trusted source for older versions of the app. [Mi-Home version 5.0.0](https://www.apkmirror.com/apk/xiaomi-inc/mihome/mihome-5-0-0-release/) is confirmed as working for the following Android methods. + +The iPhone app still stores the token in the sqlite db as of v4.7.18 (July 17, 2018). + +This token (32 hexadecimal characters) is required for the Xiaomi Mi Robot Vacuum, Mi Robot 2 (Roborock) Vacuum, Xiaomi Philips Lights and Xiaomi IR Remote. The Xiaomi Gateway uses another security method and requires a `key` (16 alphanumeric chars), which can be obtained +easily via a hidden menu item at the Mi-Home app or using the `miio` command line tool.

+#### {% linkable_title Miio command line tool %} + +You can install the command line tool with: + +```bash +npm install -g miio +``` + +Discovering devices on current network + +```bash +miio discover +``` + +This will list devices that are connected to the same network as your computer. Let it run for a while so it has a chance to reach all devices, as it might take a minute or two for all devices to answer. + +The commands outputs each device on this format: + +```text +Device ID: 48765421 +Model info: zhimi.airpurifier.m1 +Address: 192.168.100.9 +Token: token-as-hex-here via auto-token +Support: At least basic +``` + +The information output is: + +- __Device ID__ - the unique identifier of the device, does not change if the device is reset. +- __Model ID__ - the model id if it could be determined, this indicates what type of device it is +- __Address__ - the IP that the device has on the network +- __Token__ - the token of the device or ??? if it could not be automatically determined + #### {% linkable_title Windows and Android %} To fetch the token follow these instructions depending on your mobile phone platform. @@ -149,53 +176,52 @@ To fetch the token follow these instructions depending on your mobile phone plat 4. Change the MiToolKit language to English if you need to. 5. Click "Extract Token" 6. On the phone, you must confirm the backup. DO NOT enter any password and press the button to make the backup. -8. Once you have confirmed the backup the token extraction will begin, it should appear in the MiToolKit shortly. +7. Once you have confirmed the backup the token extraction will begin, it should appear in the MiToolKit shortly. #### {% linkable_title Linux and Android (not rooted) %} Follow the pairing process using your phone and Mi-Home app. You will be able to retrieve the token from a SQLite file inside your phone. -Before you begin you need to install `libffi-dev` and `libssl-dev` by running the command below. This is needed for `python-mirobo` to be installed correctly. +Before you begin you need to install `libffi-dev` and `libssl-dev` by running the command below. This is needed for `python-miio` to be installed correctly. ```bash -$ sudo apt-get install libffi-dev libssl-dev +sudo apt-get install libffi-dev libssl-dev ``` If your Home Assistant installation is running in a [Virtualenv](/docs/installation/virtualenv/#upgrading-home-assistant), make sure you activate it by running the commands below. ```bash -$ sudo su -s /bin/bash homeassistant -$ source /srv/homeassistant/bin/activate +sudo -u homeassistant -H -s +source /srv/homeassistant/bin/activate ``` To fetch the token follow these instructions depending on your mobile phone platform. 1. Configure the robot with the Mi-Home app. 2. Enable developer mode, USB debugging and plug the Android phone into the computer. -3. Get ADB e.g. `apt-get install android-tools-adb` or `apt-get install adb` +3. Get ADB e.g., `apt-get install android-tools-adb` or `apt-get install adb` 4. `adb devices` should list your device. Consult ADB manual if necessary. -5. Issue a backup command via adb: `adb backup -noapk com.xiaomi.smarthome -f backup.ab` (set a password if prompted on your phone) +5. Issue a backup command via adb: `adb backup -noapk com.xiaomi.smarthome -f backup.ab` (set a password if prompted on your phone). Some devices may required single quotes in the command `adb backup '-noapk com.xiaomi.smarthome -f backup.ab'` 6. Download the 'ADB Backup Extractor' from [here](https://sourceforge.net/projects/adbextractor/files/latest/download) 7. Extract the data from the backup: `java -jar Android\ Backup\ Utilities/Android\ Backup\ Extractor/android-backup-extractor-20171005-bin/abe.jar unpack backup.ab unpacked.tar` (enter the password, if prompted) 8. Untar the unpacked data: `tar -xvf unpacked.tar` -9. `sqlite3 apps/com.xiaomi.smarthome/db/miio2.db 'select token from devicerecord where name = "Mi Robot Vacuum";'` returns the token for your Xiaomi vacuum bot. - +9. `sqlite3 apps/com.xiaomi.smarthome/db/miio2.db 'select token from devicerecord where name like "%Vacuum%";'` returns the token for your Xiaomi vacuum bot. #### {% linkable_title Linux and Android (rooted!) %} Follow the pairing process using your phone and Mi-Home app. You will be able to retrieve the token from a SQLite file inside your phone. -Before you begin you need to install `libffi-dev` and `libssl-dev` by running the command below. This is needed for `python-mirobo` to be installed correctly. +Before you begin you need to install `libffi-dev` and `libssl-dev` by running the command below. This is needed for `python-miio` to be installed correctly. ```bash -$ sudo apt-get install libffi-dev libssl-dev +sudo apt-get install libffi-dev libssl-dev ``` If your Home Assistant installation is running in a [Virtualenv](/docs/installation/virtualenv/#upgrading-home-assistant), make sure you activate it by running the commands below. ```bash -$ sudo su -s /bin/bash homeassistant -$ source /srv/homeassistant/bin/activate +sudo -u homeassistant -H -s +source /srv/homeassistant/bin/activate ``` To fetch the token follow these instructions depending on your mobile phone platform. @@ -205,7 +231,7 @@ To fetch the token follow these instructions depending on your mobile phone plat 3. Get ADB f.e. `apt-get install android-tools-adb` 4. `adb devices` should list your device 5. `adb root` (does work for development builds only: ones with `ro.debuggable=1`) -6. `adb shell` +6. `adb shell` (for those using Magisk based root the previous command won't work. After entering a shell, type `su` to enter the root shell) 7. `echo "select name,localIP,token from devicerecord;" | sqlite3 /data/data/com.xiaomi.smarthome/databases/miio2.db` returns a list of all registered devices including IP address and token. #### {% linkable_title iOS %} @@ -220,7 +246,7 @@ To fetch the token follow these instructions depending on your mobile phone plat 8. Install [DB Browser for SQLite](http://sqlitebrowser.org/). 9. Open DB Browser and load the `.sqlite` file you saved from your backup. 10. Click on the `Execute SQL` tab. -11. Input and run this query: `SELECT ZTOKEN FROM ZDEVICE WHERE ZNAME = "Mi Robot Vacuum"` +11. Input and run this query: `SELECT ZTOKEN FROM ZDEVICE WHERE ZNAME LIKE "%Vacuum%"` 12. Copy the returned 32-digit hexadecimal string to your clipboard. 13. Open `Terminal` and execute this command: `echo '0: ' | xxd -r -p | openssl enc -d -aes-128-ecb -nopad -nosalt -K 00000000000000000000000000000000` 14. Use the resulting string as your token. diff --git a/source/_components/velbus.markdown b/source/_components/velbus.markdown index 0f8f3abdead..329258ee28a 100644 --- a/source/_components/velbus.markdown +++ b/source/_components/velbus.markdown @@ -13,13 +13,21 @@ ha_iot_class: "Local Push" ha_release: "0.50" --- -The `velbus` component supports the Velbus USB and Serial gateways. +The `velbus` component supports the Velbus USB and serial gateways. + +## {% linkable_title Configuration %} The gateway needs to be configured by adding the following lines to your `configuration.yaml` file: ```yaml # Example configuration.yaml entry - velbus: port: '/dev/ttyUSB00' ``` + +{% configuration %} +port: + description: The port where your board is connected to your Home Assistant host. The port will be most likely named `ttyUSB*`. + required: true + type: string +{% endconfiguration %} diff --git a/source/_components/vera.markdown b/source/_components/vera.markdown index 670d0292c84..1dfa965fb40 100644 --- a/source/_components/vera.markdown +++ b/source/_components/vera.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Vera" -description: "Instructions how to setup Vera Z-Wave hubs and configure devices within Home Assistant." +description: "Instructions on how to setup Vera Z-Wave hubs and configure devices within Home Assistant." date: 2015-03-23 20:04 sidebar: true comments: false @@ -14,7 +14,7 @@ ha_release: pre 0.7 The [Vera](http://getvera.com) hub is a controller mainly connecting to Z-Wave devices. -Switches, Lights (inc Dimmers), Locks, Sensors and Binary sensors are supported - and will be automatically added when HA connects to your Vera controller. +Switches, Lights (inc Dimmers), Locks, Sensors, Binary sensors, and Scenes are supported - and will be automatically added when HA connects to your Vera controller. To use Vera devices in your installation, add the following to your configuration.yaml file using the IP and port number of your Vera controller: diff --git a/source/_components/verisure.markdown b/source/_components/verisure.markdown index d73c9c9e490..7eac9bad584 100644 --- a/source/_components/verisure.markdown +++ b/source/_components/verisure.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Verisure" -description: "Instructions how to setup Verisure devices within Home Assistant." +description: "Instructions on how to setup Verisure devices within Home Assistant." date: 2015-08-17 20:28 sidebar: true comments: false @@ -45,4 +45,4 @@ Configuration variables: - **mouse** (*Optional*): Set to 1 to show mouse detectors, 0 to disable. Default 1. - **door_window** (*Optional*): Set to 1 to show door and window sensors, 0 to disable. Default 1. - **code_digits** (*Optional*): Number of digits in PIN code. Default 4. -- **giid** (*Optional*): The GIID of your installation (If you have more then one alarm system). +- **giid** (*Optional*): The GIID of your installation (If you have more then one alarm system). To find the GIID for your systems run 'python verisure.py EMAIL PASSWORD installations' diff --git a/source/_components/volvooncall.markdown b/source/_components/volvooncall.markdown index acd511a037c..6482d372ccf 100644 --- a/source/_components/volvooncall.markdown +++ b/source/_components/volvooncall.markdown @@ -21,8 +21,8 @@ To use Volvo On Call in your installation, add the following to your `configurat ```yaml # Example configuration.yaml entry volvooncall: - username: username - password: password + username: YOUR_USERNAME + password: YOUR_PASSWORD ``` Users registered with Volvo in North America or China will need to specify a region: @@ -30,15 +30,18 @@ Users registered with Volvo in North America or China will need to specify a reg ```yaml # North America volvooncall: - username: username - password: password + username: YOUR_USERNAME + password: YOUR_PASSWORD region: na ``` + +or + ```yaml # China volvooncall: - username: username - password: password + username: YOUR_USERNAME + password: YOUR_PASSWORD region: cn ``` @@ -47,8 +50,8 @@ A more advanced example for setting the vehicle name and selecting what resource ```yaml # Example configuration.yaml entry volvooncall: - username: username - password: password + username: YOUR_USERNAME + password: YOUR_PASSWORD name: abc123: 'Batmobile' resources: @@ -62,7 +65,8 @@ Configuration variables: - **username** (*Required*): The username associated with your Volvo On Call account. - **password** (*Required*): The password for your given Volvo On Call account. - **region** (*Optional*): The region where the Volvo is registered. Needs to be set for users in North America or China. -- **service_url** (*Optional*): The service URL to use for Volvo On Call. Normally not neccessary to specify. +- **service_url** (*Optional*): The service URL to use for Volvo On Call. Normally not necessary to specify. - **name** (*Optional*): Make it possible to provide a name for the vehicles. - **resources** (*Optional*): A list of resources to display (defaults to all available). +- **scandinavian_miles** (*Optional*): If set to yes, Scandinavian miles ("mil") are used for distances and fuel range (defaults to no). diff --git a/source/_components/wake_on_lan.markdown b/source/_components/wake_on_lan.markdown index a6bd3291ace..2f7b1d4532d 100644 --- a/source/_components/wake_on_lan.markdown +++ b/source/_components/wake_on_lan.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Wake on LAN" -description: "Instructions how to setup the Wake on LAN component in Home Assistant." +description: "Instructions on how to setup the Wake on LAN component in Home Assistant." date: 2017-07-8 15:00 sidebar: true comments: false diff --git a/source/_components/waterfurnace.markdown b/source/_components/waterfurnace.markdown new file mode 100644 index 00000000000..2555b1fb804 --- /dev/null +++ b/source/_components/waterfurnace.markdown @@ -0,0 +1,63 @@ +--- +layout: page +title: "WaterFurnace" +description: "Instructions on how to integrate WaterFurnace Geothermal System into Home Assistant." +date: 2018-01-19 17:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: waterfurnace.png +ha_category: Hub +ha_release: 0.62 +ha_iot_class: "Cloud Polling" +--- + +The `waterfurnace` component communicates with the WaterFurnace Symphony website's WebSocket to show you many of the sensors in your +system. While not an official API, this is the same backend the Symphony website is based on, and should be reasonably stable. + +The sensors provided include: + + - Thermostat Setpoint + - Thermostat Current Temp + - Leaving Air Temp + - Entering Water Loop Temp + - Current Humidity + - Current Humidity Setpoint + - Total system power (in Watts) + - Furnace Mode + +## {% linkable_title Configuration %} + +To use Waterfurnace in your installation, add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +waterfurnace: + username: YOUR_USERNAME + password: YOUR_PASSWORD + unit: 0123456789AB +``` + +{% configuration %} +username: + description: The email address for your Symphony WaterFurnace account + required: true + type: string +password: + description: The password for your Symphony WaterFurnace account + required: true + type: string +unit: + description: The unit serial number for your WaterFurnace + required: true + type: string +{% endconfiguration %} + + +#### {% linkable_title Limitations %} + +The WebSocket interface used by this module requires active polling, otherwise the server side shuts down the connection. By default, this polling is happening every 10 seconds. All sensors are updated during every polling cycle. + +While this is communicating with a thermostat, geothermal systems operate most efficiently when setbacks are not used, and the home is kept at a constant temperature. It remains useful to collect the data from the system to understand its performance, but a full climate interface won't be implemented. + diff --git a/source/_components/watson_iot.markdown b/source/_components/watson_iot.markdown new file mode 100644 index 00000000000..b5c30202d49 --- /dev/null +++ b/source/_components/watson_iot.markdown @@ -0,0 +1,104 @@ +--- +layout: page +title: "IBM Watson IoT Platform" +description: "Record events in the IBM Watson IoT Platform." +date: 2018-04-03 22:09 +sidebar: true +comments: false +sharing: true +footer: true +logo: ibm.png +ha_category: History +ha_release: 0.72 +--- + +The `watson_iot` component enables you to link the devices in Home Assistant +with an [IBM Watson IoT Platform instance](https://www.ibm.com/us-en/marketplace/internet-of-things-cloud). + +## {% linkable_title Configuration %} + +To use this component, you first need to register a gateway device type and then +a gateway device in your IoT platform instance. For instructions on how to do +this check the [official documentation](https://console.bluemix.net/docs/services/IoT/gateways/dashboard.html#IoT_connectGateway) +which provides the details on doing this. After you register the gateway device +for your home-assistant you'll need 4 pieces of information: + - Organization ID + - Gateway device Type + - Gateway device ID + - Authentication Token + +With this basic information you can configure the component: + +```yaml +# Example configuration.yaml entry: +watson_iot: + organization: 'organization_id' + type: 'device_type' + id: 'device_id' + token: 'auth_token' +``` + +{% configuration %} +organization: + description: The Organization ID for your Watson IoT Platform instance + required: true + type: string +type: + description: The device type for the gateway device to use + required: true + type: string +id: + description: The device id for the gateway device to use + required: true + type: string +token: + description: The authentication token for the gateway device + required: true + type: string +exclude: + description: Configure which components should be excluded from recording to Watson IoT Platform. + required: false + type: map + keys: + entities: + description: The list of entity ids to be excluded from recording to Watson IoT Platform. + required: false + type: list + domains: + description: The list of domains to be excluded from recording to Watson IoT Platform. + required: false + type: list +include: + description: Configure which components should be included in recordings to Watson IoT Platform. If set, all other entities will not be recorded to Watson IoT Platform. Values set by the **blacklist** option will prevail. + required: false + type: map + keys: + entities: + description: The list of entity ids to be included from recordings to Watson IoT Platform. + required: false + type: list + domains: + description: The list of domains to be included from recordings to Watson IoT Platform. + required: false + type: list +{% endconfiguration %} + + +## {% linkable_title Examples %} + +### {% linkable_title Full configuration %} + +```yaml +watson_iot: + + exclude: + entities: + - entity.id1 + - entity.id2 + domains: + - automation + include: + entities: + - entity.id3 + - entity.id4 +``` diff --git a/source/_components/weather.bom.markdown b/source/_components/weather.bom.markdown index 3a9d64c81a3..fe26c58337a 100644 --- a/source/_components/weather.bom.markdown +++ b/source/_components/weather.bom.markdown @@ -15,9 +15,12 @@ ha_iot_class: "Cloud Polling" The `bom` weather platform uses the [Australian Bureau of Meteorology (BOM)](http://www.bom.gov.au) as a source for current (half-hourly) meteorological data. +## {% linkable_title Configuration %} + To add the BOM weather platform to your installation, add the following to your `configuration.yaml` file: ```yaml +# Example configuration.yaml entry weather: - platform: bom ``` diff --git a/source/_components/weather.buienradar.markdown b/source/_components/weather.buienradar.markdown index 9cfb72d10ca..0b4ef3f0db8 100644 --- a/source/_components/weather.buienradar.markdown +++ b/source/_components/weather.buienradar.markdown @@ -1,7 +1,7 @@ --- layout: page -title: "Buienradar Weather" -description: "Instructions how to integrate buienradar.nl weather within Home Assistant." +title: "Buienradar" +description: "Instructions on how to integrate buienradar.nl weather within Home Assistant." date: 2017-05-15 14:00 sidebar: true comments: false @@ -14,8 +14,11 @@ ha_iot_class: "Cloud Polling" --- The `buienradar` platform uses [buienradar.nl](http://buienradar.nl/) as a source for current meteorological data for your location. The weather forecast is delivered by Buienradar, who provides a web service that provides detailed weather information for users in The Netherlands. + The relevant weather station used will be automatically selected based on the location specified in the Home Assistant configuration (or in the Buienradar weather/sensor component). A map of all available weather stations can be found [here](https://www.google.com/maps/d/embed?mid=1NivHkTGQUOs0dwQTnTMZi8Uatj0). +## {% linkable_title Configuration %} + To add the Buienradar weather to your installation, add the following to your `configuration.yaml` file: ```yaml @@ -26,7 +29,7 @@ weather: Configuration variables: -- **name** (*Optional*): You can specify a name of the component, but do not have to. If you specify a name, the weather component will get an entity name of 'weather.[name]'; if no name is specified, it will try to set its name to 'weather.BR_[stationname]'. However at the moment in time, the entity is created, no data has been retrieved yet, so the entity will get named 'weather.BR_unknown_station'. Later the station name will be known and get updated, but the entity name remains. +- **name** (*Optional*): You can specify a name of the component, but do not have to. If you specify a name, the weather component will get an entity name of `weather.[name]`; if no name is specified, it will try to set its name to `weather.BR_[stationname]`. However at the moment in time, the entity is created, no data has been retrieved yet, so the entity will get named `weather.BR_unknown_station`. Later the station name will be known and get updated, but the entity name remains. - **latitude** (*Optional*): Latitude to use for selection of data source location. Longitude and latitude will be taken from Home Assistant configuration but can be overridden/changed in this component to select a different location for Buienradar. - **longitude**(*Optional*): Longitude to use for selection of data source location. Longitude and latitude will be taken from Home Assistant configuration but can be overridden/changed in this component to select a different location for Buienradar. - **forecast** (*Optional*): 'True' to add a temperature forecast, 'False' to suppress it. diff --git a/source/_components/weather.darksky.markdown b/source/_components/weather.darksky.markdown new file mode 100644 index 00000000000..6a3b1ad138f --- /dev/null +++ b/source/_components/weather.darksky.markdown @@ -0,0 +1,68 @@ +--- +layout: page +title: "Dark Sky" +description: "Instructions on how to integrate Dark Sky within Home Assistant." +date: 2016-09-29 09:00 +sidebar: true +comments: false +sharing: true +footer: true +featured: true +logo: dark_sky.png +ha_category: Weather +ha_release: 0.61 +ha_iot_class: "Cloud Polling" +--- + +The `darksky` platform uses the [Dark Sky](https://darksky.net/) web service as a source for meteorological data for your location. + +## {% linkable_title Configuration %} + +You need an API key which is free but requires [registration](https://darksky.net/dev/register). The free tier allows up to 1000 calls per day, this platform updates at most every 3 minutes, using up to 480 of those calls. + +

+[Dark Sky](https://darksky.net/dev/) will charge you $0.0001 per API call if you enter your credit card details and create more than 1000 calls per day. +

+ +To add Dark Sky to your installation, add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +weather: + - platform: darksky + api_key: YOUR_API_KEY +``` + +{% configuration %} +api_key: + description: "Your API key for [Dark Sky](https://darksky.net/dev/)." + required: true + type: string +latitude: + description: Manually specify latitude. By default the value will be taken from the Home Assistant configuration. + required: false + type: number + default: Provided by Home Assistant configuration +longitude: + description: Manually specify longitude. By default the value will be taken from the Home Assistant configuration. + required: false + type: number + default: Provided by Home Assistant configuration +units: + description: "Manually specify unit system. Valid values are: `auto`, `us`, `si`, `ca`, `uk` and `uk2`." + required: false + type: string + default: "`si` if Home Assistant unit system is metric, `us` if imperial." +name: + description: Name to use in the frontend. + required: false + type: string + default: Open Sky +{% endconfiguration %} + +

+This platform is an alternative to the [`darksky`](/components/sensor.darksky/) +sensor. +

+ +Details about the API are available in the [Dark Sky documentation](https://darksky.net/dev/docs). diff --git a/source/_components/weather.ecobee.markdown b/source/_components/weather.ecobee.markdown new file mode 100644 index 00000000000..33f1983ecd5 --- /dev/null +++ b/source/_components/weather.ecobee.markdown @@ -0,0 +1,16 @@ +--- +layout: page +title: "Ecobee Weather" +description: "Instructions on how to setup the Ecobee weather within Home Assistant." +date: 2017-11-29 21:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: ecobee.png +ha_category: Weather +ha_release: 0.59 +ha_iot_class: "Local Push" +--- + +To get your Ecobee weather component working with Home Assistant, follow the instructions for the general [Ecobee component](/components/ecobee/). diff --git a/source/_components/weather.ipma.markdown b/source/_components/weather.ipma.markdown new file mode 100644 index 00000000000..02141227ead --- /dev/null +++ b/source/_components/weather.ipma.markdown @@ -0,0 +1,44 @@ +--- +layout: page +title: "IPMA" +description: "Instructions on how to integrate Instituto Português do Mar e Atmosfera weather conditions into Home Assistant." +date: 2018-05-31 17:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: ipma.png +ha_category: Weather +ha_release: 0.72 +ha_iot_class: "Cloud Polling" +--- + +The `ipma` weather platform uses the [Instituto Português do Mar e Atmosfera](http://www.ipma.pt) as a source for current and forecast meteorological data. + +## {% linkable_title Configuration %} + +To add the IPMA weather platform to your installation, add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +weather: + - platform: ipma +``` + +{% configuration %} +name: + description: The name you would like to give to the weather station. + required: false + default: The name of the used station + type: string +latitude: + description: Latitude of the location for which you want weather information. + required: false + default: Home Assistant global latitude configuration + type: string +longitude: + description: Longitude of the location for which you want weather information. + required: false + default: Home Assistant global longitude configuration + type: string +{% endconfiguration %} diff --git a/source/_components/weather.markdown b/source/_components/weather.markdown index f0824091392..25fde662082 100644 --- a/source/_components/weather.markdown +++ b/source/_components/weather.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Weather" -description: "Instructions how to setup your Weather platforms with Home Assistant." +description: "Instructions on how to setup your Weather platforms with Home Assistant." date: 2016-09-28 14:00 sidebar: true comments: false @@ -13,4 +13,22 @@ The `weather` platforms are gathering meteorological information from web servic Home Assistant currently supports free web services and such which require a registration. Please check the sidebar for a full list of supported `weather` platforms. +## {% linkable_title Condition mapping %} + +The `weather` platform only knows the below listed conditions. The reason for this is that for these conditions is an icon from [Material Design Icons](https://materialdesignicons.com/) available and mapped in the [frontend](https://github.com/home-assistant/home-assistant-polymer/blob/master/src/cards/ha-weather-card.js#L170). + +- 'cloudy' +- 'fog' +- 'hail' +- 'lightning' +- 'lightning-rainy' +- 'partlycloudy' +- 'pouring' +- 'rainy' +- 'snowy' +- 'snowy-rainy' +- 'sunny' +- 'windy' +- 'windy-variant' +- 'exceptional': diff --git a/source/_components/weather.metoffice.markdown b/source/_components/weather.metoffice.markdown index d05b55431e6..df624d2a9ca 100644 --- a/source/_components/weather.metoffice.markdown +++ b/source/_components/weather.metoffice.markdown @@ -15,21 +15,23 @@ ha_iot_class: "Cloud Polling" The `metoffice` weather platform uses the Met Office's [DataPoint API][datapoint] for weather data. +## {% linkable_title Configuration %} + To add the Met Office weather platform to your installation, you'll need to register for a free API key at the link above and then add the following to your `configuration.yaml` file: ```yaml +# Example configuration.yaml entry weather: - platform: metoffice - api_key: "my-api-key" + api_key: YOUR_API_KEY ``` Configuration variables: -- **api_key** (*Required*): Your personal API key from the [Datapoint website][datapoint]. +- **api_key** (*Required*): Your personal API key from the [Datapoint website](http://www.metoffice.gov.uk/datapoint).

This platform is an alternative to the [`metoffice`](/components/sensor.metoffice/) sensor. The weather platform is easier to configure but less customizable.

-[datapoint]: http://www.metoffice.gov.uk/datapoint diff --git a/source/_components/weather.openweathermap.markdown b/source/_components/weather.openweathermap.markdown index 9c0a24f4478..bf704c2984b 100644 --- a/source/_components/weather.openweathermap.markdown +++ b/source/_components/weather.openweathermap.markdown @@ -1,7 +1,7 @@ --- layout: page title: "OpenWeatherMap" -description: "Instructions how to integrate OpenWeatherMap within Home Assistant." +description: "Instructions on how to integrate OpenWeatherMap within Home Assistant." date: 2016-09-29 09:00 sidebar: true comments: false @@ -15,6 +15,8 @@ ha_iot_class: "Cloud Polling" The `openweathermap` weather platform uses [OpenWeatherMap](http://openweathermap.org/) as a source for current meteorological data for your location. +## {% linkable_title Configuration %} + You need an API key which is free but requires a [registration](http://home.openweathermap.org/users/sign_up). To add OpenWeatherMap to your installation, add the following to your `configuration.yaml` file: @@ -30,6 +32,7 @@ Configuration variables: - **api_key** (*Required*): Your API key for http://openweathermap.org/. - **name** (*Optional*): Name to use in the frontend. +- **mode** (*Optional*): Can specify `hourly` or `daily`. Select `hourly` for a three-hour forecast or `daily` for daily forecast. Defaults to `hourly`. - **latitude** (*Optional*): Latitude of the location to display the weather. Defaults to the latitude in your `configuration.yaml` file. - **longitude** (*Optional*): Longitude of the location to display the weather. Defaults to the longitude in your `configuration.yaml` file. diff --git a/source/_components/weather.yweather.markdown b/source/_components/weather.yweather.markdown index e0875036794..27bbda8214d 100644 --- a/source/_components/weather.yweather.markdown +++ b/source/_components/weather.yweather.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Yahoo Weather" -description: "Instructions how to integrate Yahoo Weather within Home Assistant." +description: "Instructions on how to integrate Yahoo Weather within Home Assistant." date: 2016-07-06 9:06 sidebar: true comments: false @@ -19,6 +19,8 @@ The `yweather` platform uses [Yahoo Weather](https://www.yahoo.com/news/weather/ Use of the Yahoo Weather API should not exceed reasonable request volume. Access is limited to 2000 signed calls per day.

+## {% linkable_title Configuration %} + The `woeid` (Where On Earth ID) for your location, as shown in the example below. You can find your WOEID by copying the numeric digits at the end of the URL for your location at [Yahoo Weather](https://www.yahoo.com/news/weather/). If you don't add a WOEID, it will be generated from Home Assistant's latitude and longitude. To add Yahoo Weather to your installation, add the following to your `configuration.yaml` file: diff --git a/source/_components/weather.zamg.markdown b/source/_components/weather.zamg.markdown index 89cc25bca87..b3112d97ea8 100644 --- a/source/_components/weather.zamg.markdown +++ b/source/_components/weather.zamg.markdown @@ -1,7 +1,7 @@ --- layout: page title: "ZAMG Weather" -description: "Instructions how to integrate ZAMG sensors within Home Assistant." +description: "Instructions on how to integrate ZAMG sensors within Home Assistant." date: 2016-12-06 08:00 sidebar: true comments: false @@ -17,6 +17,8 @@ The `zamg` platform uses meteorological details published by the Austrian weathe Only observations for capital cities are publicly available. You can check the list of stations in [CSV format](http://www.zamg.ac.at/ogd). +## {% linkable_title Configuration %} + To add ZAMG to your installation, add the following to your `configuration.yaml` file: ```yaml diff --git a/source/_components/weblink.markdown b/source/_components/weblink.markdown index 4d4d5b9cc88..ebc44a1eb96 100644 --- a/source/_components/weblink.markdown +++ b/source/_components/weblink.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Weblink" -description: "Instructions how to setup Links within Home Assistant." +description: "Instructions on how to setup Links within Home Assistant." date: 2016-02-02 20:00 sidebar: true comments: false @@ -22,13 +22,26 @@ weblink: entities: - name: Router url: http://192.168.1.1/ + icon: mdi:router-wireless - name: Home Assistant - url: https://home-assistant.io + url: https://www.home-assistant.io + - name: Grafana + url: /grafana ``` -Configuration variables: -- **name** (*Required*): Text for the link. -- **url** (*Required*): The URL for the link. -- **icon** (*Optional*): Icon for entry. +{% configuration %} +name: + description: Text for the link. + required: true + type: string +url: + description: The URL (absolute URL or absolute path) for the link. + required: true + type: string +icon: + description: Icon for entry. + required: false + type: string +{% endconfiguration %} Pick an icon that you can find on [materialdesignicons.com](https://materialdesignicons.com/) to use for your input and prefix the name with `mdi:`. For example `mdi:car`, `mdi:ambulance`, or `mdi:motorbike`. diff --git a/source/_components/websocket_api.markdown b/source/_components/websocket_api.markdown new file mode 100644 index 00000000000..7711d202b82 --- /dev/null +++ b/source/_components/websocket_api.markdown @@ -0,0 +1,25 @@ +--- +layout: page +title: "Websocket API" +description: "Instructions on how to setup the WebSocket API within Home Assistant." +date: 2018-01-21 08:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: home-assistant.png +ha_category: "Other" +--- + +The `websocket_api` component set up a WebSocket API and allows one to interact with a Home Assistant instance that is running headless. This component depends on the [`http` component](/components/http/). + +

+It is HIGHLY recommended that you set the `api_password`, especially if you are planning to expose your installation to the internet. +

+ +```yaml +# Example configuration.yaml entry +websocket_api: +``` + +For details to use the WebSocket API, please refer to the [WebSocket API documentation](/developers/websocket_api/) . diff --git a/source/_components/wemo.markdown b/source/_components/wemo.markdown index 96821a0032a..af752d9e99a 100644 --- a/source/_components/wemo.markdown +++ b/source/_components/wemo.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Belkin WeMo" -description: "Instructions how to integrate Belkin WeMo devices into Home Assistant." +description: "Instructions on how to integrate Belkin WeMo devices into Home Assistant." date: 2016-02-20 00:41 sidebar: true comments: false @@ -36,3 +36,14 @@ Any WeMo devices that are not statically configured but reachable via discovery Note that if you use this, you may want to set up your router (or whatever runs your DHCP server) to force your WeMo devices to use a static IP address. Check the DHCP section of your router configuration for this ability. If the device doesn't seem to work and all you see is the state "unavailable" on your dashboard, check that your firewall doesn't block incoming request on port 8989 since this is the address to which the WeMo devices send their update. + +## {% linkable_title Emulated devices %} + +Various software that emulates WeMo devices often uses alternative ports. Static configuration should include the port value: + +```yaml +wemo: + static: + - 192.168.1.23:52001 + - 192.168.52.172:52002 +``` diff --git a/source/_components/wink.markdown b/source/_components/wink.markdown index adfb85cf36b..cf62b8d380e 100644 --- a/source/_components/wink.markdown +++ b/source/_components/wink.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Wink" -description: "Instructions how to setup the Wink hub within Home Assistant." +description: "Instructions on how to setup the Wink hub within Home Assistant." date: 2015-01-20 22:36 sidebar: true comments: false @@ -46,7 +46,7 @@ wink: ### {% linkable_title Full oauth authentication (legacy). %} -This should be used for users that obtained their client_id and client_secret via email from Wink support prior to [developer.wink.com's](https://developer.wink.com) existance. +This should be used for users that obtained their client_id and client_secret via email from Wink support prior to [developer.wink.com's](https://developer.wink.com) existence. ```yaml diff --git a/source/_components/wirelesstag.markdown b/source/_components/wirelesstag.markdown new file mode 100644 index 00000000000..d4e229d4a16 --- /dev/null +++ b/source/_components/wirelesstag.markdown @@ -0,0 +1,47 @@ +--- +layout: page +title: "WirelessTag" +description: "Instructions on how to integrate your Wireless Tags sensors within Home Assistant." +date: 2018-03-26 21:32 +comments: false +sidebar: true +sharing: true +footer: true +logo: wirelesstag.png +ha_category: Hub +ha_iot_class: "Local Push and Cloud Polling" +ha_release: 0.68 +--- + +The `wirelesstag` implementation allows you to integrate your [wirelesstag.net](http://wirelesstag.net) sensors tags in Home Assistant. + +To enable tags set up with your [wirelesstag.net](http://wirelesstag.net) account, add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +wirelesstag: + username: you@example.com + password: secret +``` + +{% configuration %} + username: + description: Username for your [wirelesstag.net](http://wirelesstag.net) account. + required: true + type: string + password: + description: Password for your [wirelesstag.net](http://wirelesstag.net) account. + required: true + type: string +{% endconfiguration %} + +Finish your configuration by visiting the [WirelessTag binary sensor](/components/binary_sensor.wirelesstag/), [WirelessTag sensor](/components/sensor.wirelesstag/), or [WirelessTag switch](/components/switch.wirelesstag/) documentation. + +

+ To enable local push notifications from the Tags Manager, you need to add the IP address of the Tags Manager into whitelist in `http` component; i.e., add it to `trusted_networks`. See the [HTTP](/components/http/) for details. + Additionally, you need add at least one [WirelessTag binary sensor](/components/binary_sensor.wirelesstag/) in config to start receiving local push notifications. +

+ +

+ Tags Manager supports local push notifications for `http` schema only. So if your hass uses `https`, local push notifications are disabled and data is received via cloud polling. +

\ No newline at end of file diff --git a/source/_components/xiaomi_aqara.markdown b/source/_components/xiaomi_aqara.markdown index 2e132faa878..203ffcdcf56 100644 --- a/source/_components/xiaomi_aqara.markdown +++ b/source/_components/xiaomi_aqara.markdown @@ -18,6 +18,9 @@ The `xiaomi_aqara` component allows you to integrate [Xiaomi](http://www.mi.com/ #### {% linkable_title Supported Devices %} +- Xiaomi Aqara Gateway (lumi.gateway.v2, lumi.gateway.v3) +- Aqara Air Conditioning Companion (lumi.acpartner.v3) +- Aqara Intelligent Door Lock (lock.aq1) - Temperature and Humidity Sensor (1st and 2nd generation) - Motion Sensor (1st and 2nd generation) - Door and Window Sensor (1st and 2nd generation) @@ -42,8 +45,8 @@ The `xiaomi_aqara` component allows you to integrate [Xiaomi](http://www.mi.com/ - Gateway Radio - Gateway Button -- Aqara Air Conditioning Companion -- Aqara Intelligent Air Conditioner Controller Hub +- Xiaomi Mi Air Conditioning Companion (lumi.acpartner.v2) +- Aqara Intelligent Air Conditioner Controller Hub (lumi.acpartner.v1) - Decoupled mode of the Aqara Wall Switches (Single & Double) - Additional alarm events of the Gas and Smoke Detector: Analog alarm, battery fault alarm (smoke detector only), sensitivity fault alarm, I2C communication failure @@ -56,7 +59,7 @@ To enable {{ page.title }} in your installation, add the following to your `conf ### {% linkable_title One Gateway %} ```yaml -# You can leave mac empty if you only have one gateway. +# You can leave MAC empty if you only have one gateway. xiaomi_aqara: discovery_retry: 5 gateways: @@ -66,7 +69,7 @@ xiaomi_aqara: ### {% linkable_title Multiple Gateways %} ```yaml -# 12 characters mac can be obtained from the gateway. +# 12 characters MAC can be obtained from the gateway. xiaomi_aqara: gateways: - mac: xxxxxxxxxxxx @@ -87,14 +90,28 @@ xiaomi_aqara: ``` {% configuration %} - mac: - description: The MAC address of your gateway. *Optional if only using one gateway.* - required: false - type: string - key: - description: The key of your gateway. *Optional if only using sensors and/or binary sensors.* - required: false - type: string + gateways: + description: A list of gateways to set up. + required: true + type: map + keys: + mac: + description: The MAC address of your gateway. *Optional if only using one gateway.* + required: false + type: string + key: + description: The key of your gateway. *Optional if only using sensors and/or binary sensors.* + required: false + type: string + host: + description: The host/IP address of the gateway. If this parameter is used the multicast discovery of the gateway is skipped. + required: false + type: string + disable: + description: Disable the gateway. This is only useful if you don't want to integrate a specific gateway. + required: false + type: boolean + default: false discovery_retry: description: Number of times that Home Assistant should try to reconnect to the gateway. required: false @@ -105,17 +122,13 @@ xiaomi_aqara: required: false type: string default: any - host: - description: The host / ip address of the gateway. If this parameter is used the multicast discovery of the gateway is skipped. - required: false - type: string {% endconfiguration %} ### {% linkable_title Services %} The gateway provides the following services: -#### {% linkable_title Service xiaomi_aqara.play_ringtone %} +#### {% linkable_title Service `xiaomi_aqara.play_ringtone` %} Play a specific ringtone. The version of the gateway firmware must be `1.4.1_145` at least. Take a look at the examples below. @@ -155,7 +168,7 @@ Allowed values of the `ringtone_id` are: - 29 - Thinker - Custom ringtones (uploaded by the Mi Home app) starting from 10001 -#### {% linkable_title Service xiaomi_aqara.stop_ringtone %} +#### {% linkable_title Service `xiaomi_aqara.stop_ringtone` %} Stops a playing ringtone immediately. @@ -163,13 +176,7 @@ Stops a playing ringtone immediately. |---------------------------|----------|-------------------------------------------------------| | `gw_mac` | no | MAC address of the Xiaomi Aqara Gateway | -#### {% linkable_title Service xiaomi_aqara.add_device %} - -| Service data attribute | Optional | Description | -|---------------------------|----------|-------------------------------------------------------| -| `gw_mac` | no | MAC address of the Xiaomi Aqara Gateway | - -#### {% linkable_title Service xiaomi_aqara.add_device %} +#### {% linkable_title Service `xiaomi_aqara.add_device` %} Enables the join permission of the Xiaomi Aqara Gateway for 30 seconds. A new device can be added afterwards by pressing the pairing button once. @@ -177,7 +184,7 @@ Enables the join permission of the Xiaomi Aqara Gateway for 30 seconds. A new de |---------------------------|----------|-------------------------------------------------------| | `gw_mac` | no | MAC address of the Xiaomi Aqara Gateway | -#### {% linkable_title Service xiaomi_aqara.remove_device %} +#### {% linkable_title Service `xiaomi_aqara.remove_device` %} Removes a specific device. The removal is required if a device shall be paired with another gateway. @@ -190,7 +197,7 @@ Removes a specific device. The removal is required if a device shall be paired w ### {% linkable_title Long Press on Smart Button %} -This example plays the sound of a dog barking when the button is held down, and stops the sound when the button is pressed once. +This example plays the sound of a dog barking when the button is held down and stops the sound when the button is pressed once. *Note: The sound will stop playing automatically when it has ended.* @@ -222,11 +229,30 @@ This example plays the sound of a dog barking when the button is held down, and gw_mac: xxxxxxxxxxxx ``` +### {% linkable_title Double Click on Smart Button %} + +This example toggles the living room lamp on a double click of the button. + +```yaml +- alias: Double Click to toggle living room lamp + trigger: + platform: event + event_type: click + event_data: + entity_id: binary_sensor.switch_158d000xxxxxc2 + click_type: double + action: + service: light.toggle + data: + entity_id: light.living_room_lamp +``` + + ## {% linkable_title Troubleshooting %} ### {% linkable_title Initial setup problem %} -If you run into trouble initializing the gateway with your app, try another smartphone. I had trouble with the OnePlus 3, but it worked with a Nexus 5. +If you run into trouble initializing the gateway with your app, try another smartphone. E.g., it didn't work on an OnePlus 3, but it worked with a Nexus 5. ### {% linkable_title Connection problem %} @@ -238,11 +264,12 @@ If you run into trouble initializing the gateway with your app, try another smar That means that Home Assistant is not getting any response from your Xiaomi gateway. Might be a local network problem or your firewall. - Make sure you have [enabled LAN access](https://www.domoticz.com/wiki/Xiaomi_Gateway_(Aqara)#Adding_the_Xiaomi_Gateway_to_Domoticz). - Turn off the firewall on the system where Home Assistant is running. -- Ensure your router supports multicast as this is a requirement of the Xiaomi GW +- Ensure your router supports multicast as this is a requirement of the Xiaomi Gateway. - Try to leave the MAC address `mac:` blank. - Try to set `discovery_retry: 10`. - Try to disable and then enable LAN access. - Hard reset the gateway: Press the button of the gateway 30 seconds and start again from scratch. - If you are using Home Assistant in [Docker](/docs/installation/docker/), make sure to use `--net=host`. -- If you receive an `{"error":"Invalid key"}` in your log while trying to control the gateway light, you should generate the key again using an Android Phone or alternativly an emulator such as [bluestacks](https://www.bluestacks.com). In some instances there is an issue with keys being generated using the iOS application. -- If the required library "PyXiaomiGateway" cannot be installed you will need to install some missing system dependencies `python3-dev`, `libssl-dev`, `libffi-dev` manually (e.g. `sudo apt-get install python3-dev libssl-dev libffi-dev`). +- If you receive an `{"error":"Invalid key"}` in your log while trying to control the gateway light, you should generate the key again using an Android Phone or alternatively an emulator such as [bluestacks](https://www.bluestacks.com). In some instances there is an issue with keys being generated using the iOS application. +- If the required library "PyXiaomiGateway" cannot be installed you will need to install some missing system dependencies `python3-dev`, `libssl-dev`, `libffi-dev` manually (e.g., `$ sudo apt-get install python3-dev libssl-dev libffi-dev`). + diff --git a/source/_components/zabbix.markdown b/source/_components/zabbix.markdown index 0bc2fe72cbb..e4630839993 100644 --- a/source/_components/zabbix.markdown +++ b/source/_components/zabbix.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Zabbix" -description: "Instructions how to integrate Zabbix into Home Assistant." +description: "Instructions on how to integrate Zabbix into Home Assistant." date: 2016-12-13 22:57 sidebar: true comments: false diff --git a/source/_components/zha.markdown b/source/_components/zha.markdown index 2e4a749b970..8e622bdde56 100644 --- a/source/_components/zha.markdown +++ b/source/_components/zha.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Zigbee Home Automation" -description: "Instructions how to integrate your Zigbee Home Automation within Home Assistant." +description: "Instructions on how to integrate your Zigbee Home Automation within Home Assistant." date: 2017-02-22 19:59 sidebar: true comments: false @@ -18,14 +18,18 @@ integration for Home Assistant allows you to connect many off-the-shelf ZigBee d There is currently support for the following device types within Home Assistant: -- [Binary Sensor](../binary_sensor.zha) (e.g. motion and door sensors) -- [Sensor](../sensor.zha) (e.g. temperature sensors) +- [Binary Sensor](../binary_sensor.zha) (e.g., motion and door sensors) +- [Sensor](../sensor.zha) (e.g., temperature sensors) - [Light](../light.zha) - [Switch](../switch.zha) +- [Fan](../fan.zha) Known working ZigBee radios: -- Nortek/GoControl Z-Wave & Zigbee USB Adaptor - Model HUSBZB-1 +- Nortek/GoControl Z-Wave & Zigbee USB Adapter - Model HUSBZB-1 +- XBee Series 2C +- [Elelabs ZigBee USB Adapter](https://elelabs.com/products/elelabs_usb_adapter.html) +- [Elelabs ZigBee Raspberry Pi Shield](https://elelabs.com/products/elelabs_zigbee_shield.html) To configure the component, a `zha` section must be present in the `configuration.yaml`, and the path to the serial device for the radio and path to the database which will persist your network data is required. @@ -34,12 +38,14 @@ and the path to the serial device for the radio and path to the database which w # Example configuration.yaml entry zha: usb_path: /dev/ttyUSB2 - database_path: zigbee.db + database_path: /home/homeassistant/.homeassistant/zigbee.db ``` Configuration variables: + - **radio_type** (*Optional*): One of `ezsp` (default) or `xbee` - **usb_path** (*Required*): Path to the serial device for the radio. - - **database_path** (*Required*): Path to the database which will keep persistent network data. + - **baudrate** (*Optional*): Baud rate of the serial device. + - **database_path** (*Required*): _Full_ path to the database which will keep persistent network data. To add new devices to the network, call the `permit` service on the `zha` domain, and then follow the device instructions for doing a scan or factory reset. In case you want to add Philips Hue bulbs that have previously been added to another bridge, have a look at: [https://github.com/vanviegen/hue-thief/](https://github.com/vanviegen/hue-thief/) diff --git a/source/_components/zone.markdown b/source/_components/zone.markdown index 00d4f7e664e..c97d06657ff 100644 --- a/source/_components/zone.markdown +++ b/source/_components/zone.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Zone" -description: "Instructions how to setup zones within Home Assistant." +description: "Instructions on how to setup zones within Home Assistant." date: 2015-10-04 09:23 sidebar: true comments: false diff --git a/source/_components/zoneminder.markdown b/source/_components/zoneminder.markdown index 0f3bccbb945..0ebf5fbafc7 100644 --- a/source/_components/zoneminder.markdown +++ b/source/_components/zoneminder.markdown @@ -39,6 +39,6 @@ zoneminder: path: ZM_PATH path_zms: ZM_PATH_ZMS ssl: False - username: USERNAME - password: PASSWORD + username: YOUR_USERNAME + password: YOUR_PASSWORD ``` diff --git a/source/_components/zwave.markdown b/source/_components/zwave.markdown index 316c2d3bd12..9dd4811b3e4 100644 --- a/source/_components/zwave.markdown +++ b/source/_components/zwave.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Z-Wave" -description: "Instructions how to integrate your existing Z-Wave within Home Assistant." +description: "Instructions on how to integrate your existing Z-Wave within Home Assistant." date: 2016-02-27 19:59 sidebar: true comments: false diff --git a/source/_cookbook/automation_flashing_lights.markdown b/source/_cookbook/automation_flashing_lights.markdown index df141213070..5a55323eac1 100644 --- a/source/_cookbook/automation_flashing_lights.markdown +++ b/source/_cookbook/automation_flashing_lights.markdown @@ -97,6 +97,14 @@ script: service: homeassistant.turn_off data: entity_id: switch.REL1 + - alias: loop_room1 + service: script.turn_on + data: + entity_id: script.flash_loop + + flash_loop: + alias: Flash loop + sequence: - delay: # time for flash light off seconds: 1 diff --git a/source/_cookbook/automation_kodi_dynamic_input_select.markdown b/source/_cookbook/automation_kodi_dynamic_input_select.markdown index 040d4f1284e..9fc1bbd3f9e 100644 --- a/source/_cookbook/automation_kodi_dynamic_input_select.markdown +++ b/source/_cookbook/automation_kodi_dynamic_input_select.markdown @@ -12,7 +12,7 @@ ha_category: Automation Examples This requires a [Kodi](/components/media_player.kodi/) media player, and consists of commands that perform queries in the Kodi library, and a selection box (`input_select`) that shows the available options. By clicking the commands, the selection box is updated, and when selecting an option, Kodi plays the media. -Option filling is done in an [AppDaemon](https://home-assistant.io/docs/ecosystem/appdaemon/tutorial/) app, which listens for events that are triggered with the results of the Kodi JSONRPC API queries when scripts run. This application also listens to the selection box and calls the play media service with the corresponding parameters. +Option filling is done in an [AppDaemon](/docs/ecosystem/appdaemon/tutorial/) app, which listens for events that are triggered with the results of the Kodi JSONRPC API queries when scripts run. This application also listens to the selection box and calls the play media service with the corresponding parameters. The media player yaml config: diff --git a/source/_cookbook/automation_using_timeinterval_inputboolean.markdown b/source/_cookbook/automation_using_timeinterval_inputboolean.markdown index 499bc7aa5bb..d5edc5e9613 100644 --- a/source/_cookbook/automation_using_timeinterval_inputboolean.markdown +++ b/source/_cookbook/automation_using_timeinterval_inputboolean.markdown @@ -10,7 +10,7 @@ footer: true ha_category: Automation Examples --- -#### {% linkable_title Change Hue light on interval to random color based on state of a input boolean %} +#### {% linkable_title Change Hue light on interval to random color based on state of an input boolean %} _Note, Philips Hue is currently the only light platform that support the random effect._ diff --git a/source/_cookbook/configuration_yaml_by_aneisch.markdown b/source/_cookbook/configuration_yaml_by_aneisch.markdown index ec652e87ac4..fa59c4f6483 100644 --- a/source/_cookbook/configuration_yaml_by_aneisch.markdown +++ b/source/_cookbook/configuration_yaml_by_aneisch.markdown @@ -8,6 +8,6 @@ comments: false sharing: true footer: true ha_category: Example configuration.yaml -ha_external_link: https://github.com/aneisch/home-assistant/ +ha_external_link: https://github.com/aneisch/home-assistant-config/ --- diff --git a/source/_cookbook/configuration_yaml_by_apocrathia.markdown b/source/_cookbook/configuration_yaml_by_apocrathia.markdown new file mode 100644 index 00000000000..6ac2ccd3290 --- /dev/null +++ b/source/_cookbook/configuration_yaml_by_apocrathia.markdown @@ -0,0 +1,12 @@ +--- +layout: page +title: "Configuration.yaml by Apocrathia" +description: "" +date: 2018-05-02 12:40 +sidebar: true +comments: false +sharing: true +footer: true +ha_category: Example configuration.yaml +ha_external_link: https://github.com/Apocrathia/home-assistant-config/ +--- diff --git a/source/_cookbook/configuration_yaml_by_chriskacerguis.markdown b/source/_cookbook/configuration_yaml_by_chriskacerguis.markdown new file mode 100644 index 00000000000..6c873a0808e --- /dev/null +++ b/source/_cookbook/configuration_yaml_by_chriskacerguis.markdown @@ -0,0 +1,12 @@ +--- +layout: page +title: "Configuration.yaml by chriskacerguis" +description: "" +date: 2017-12-12 09:14 +sidebar: true +comments: false +sharing: true +footer: true +ha_category: Example configuration.yaml +ha_external_link: https://github.com/chriskacerguis/Home-AssistantConfig +--- diff --git a/source/_cookbook/configuration_yaml_by_greenturtwig.markdown b/source/_cookbook/configuration_yaml_by_greenturtwig.markdown index dcb11f84540..a5bc7c5b184 100644 --- a/source/_cookbook/configuration_yaml_by_greenturtwig.markdown +++ b/source/_cookbook/configuration_yaml_by_greenturtwig.markdown @@ -8,6 +8,6 @@ comments: false sharing: true footer: true ha_category: Example configuration.yaml -ha_external_link: https://github.com/GreenTurtwig/personal-home-automation/tree/master/Home%20Assistant +ha_external_link: https://github.com/GreenTurtwig/personal-home-automation/blob/master/configuration.yaml --- diff --git a/source/_cookbook/configuration_yaml_by_gummientchen.markdown b/source/_cookbook/configuration_yaml_by_gummientchen.markdown new file mode 100644 index 00000000000..3205562886f --- /dev/null +++ b/source/_cookbook/configuration_yaml_by_gummientchen.markdown @@ -0,0 +1,12 @@ +--- +layout: page +title: "Configuration.yaml by Gummientchen" +description: "" +date: 2018-03-23 09:13 +sidebar: true +comments: false +sharing: true +footer: true +ha_category: Example configuration.yaml +ha_external_link: https://github.com/Gummientchen/Home-AssistantConfig +--- diff --git a/source/_cookbook/configuration_yaml_by_silvrr.markdown b/source/_cookbook/configuration_yaml_by_silvrr.markdown new file mode 100644 index 00000000000..847b4bf1c07 --- /dev/null +++ b/source/_cookbook/configuration_yaml_by_silvrr.markdown @@ -0,0 +1,12 @@ +--- +layout: page +title: "Configuration.yaml by silvrr" +description: "" +date: 2018-1-18 13:08 +sidebar: true +comments: false +sharing: true +footer: true +ha_category: Example configuration.yaml +ha_external_link: https://github.com/SilvrrGIT/HomeAssistant +--- diff --git a/source/_cookbook/configuration_yaml_by_tinkerer.markdown b/source/_cookbook/configuration_yaml_by_tinkerer.markdown new file mode 100644 index 00000000000..c300a6bd64b --- /dev/null +++ b/source/_cookbook/configuration_yaml_by_tinkerer.markdown @@ -0,0 +1,12 @@ +--- +layout: page +title: "Configuration.yaml by Tinkerer" +description: "" +date: 2018-05-31 13:00 +sidebar: true +comments: false +sharing: true +footer: true +ha_category: Example configuration.yaml +ha_external_link: https://github.com/DubhAd/Home-AssistantConfig/ +--- diff --git a/source/_cookbook/custom_panel_using_react.markdown b/source/_cookbook/custom_panel_using_react.markdown index b8f5f8d59b8..e526487b0c5 100644 --- a/source/_cookbook/custom_panel_using_react.markdown +++ b/source/_cookbook/custom_panel_using_react.markdown @@ -18,9 +18,9 @@ This is a [React](https://facebook.github.io/react/) implementation of [TodoMVC] - It uses the user configuration for the component in the `configuration.yaml` file for rendering. - It allows toggling the sidebar. -All you need is available as a [custom panel](https://github.com/home-assistant/example-custom-config/blob/master/panels/react.html). Download the file and save it in `/panels/` (you might have to create the directory if it doesn't exist). +Download the source [here](https://github.com/home-assistant/example-custom-config/blob/master/panels/react.html). Copy the file to `/panels/` (you might have to create the directory if it doesn't exist). -Create a entry for the panel in your `configuration.yaml` file to enable it. +Create an entry for the panel in your `configuration.yaml` file to enable it. ```yaml panel_custom: diff --git a/source/_cookbook/dim_lights_when_playing_media.markdown b/source/_cookbook/dim_lights_when_playing_media.markdown index e0c19c45d3b..a53c90d9f0a 100644 --- a/source/_cookbook/dim_lights_when_playing_media.markdown +++ b/source/_cookbook/dim_lights_when_playing_media.markdown @@ -12,7 +12,7 @@ ha_category: Automation Examples Like it how the lights dim up/down at the movies? Do it at home as well! -This example uses the [media player](https://home-assistant.io/components/media_player/), [lights](https://home-assistant.io/components/light/) (transitions) and the [sun](https://home-assistant.io/components/sun/) component. We'll use actions to detect media player state changes and [scenes](https://home-assistant.io/components/scene/) to control multiple lights and transition between scenes. +This example uses the [media player](/components/media_player/), [lights](/components/light/) (transitions) and the [sun](/components/sun/) component. We'll use actions to detect media player state changes and [scenes](/components/scene/) to control multiple lights and transition between scenes. #### {% linkable_title Scenes %} One scene for normal light, one for when movies are on. A 2 second transition gives a nice 'feel' to the switch. diff --git a/source/_cookbook/google_maps_card.markdown b/source/_cookbook/google_maps_card.markdown index 1f3c9c1f01c..9055e4c6726 100644 --- a/source/_cookbook/google_maps_card.markdown +++ b/source/_cookbook/google_maps_card.markdown @@ -12,6 +12,8 @@ ha_category: User Interface Using the [generic camera platform] you can present any image on the internet as a camera. Starting release 0.27 these urls can also be based on a template. This example uses this functionality to point a generic camera at the Google Maps static image API and pass in the location of a device. +As of June 2018, Google has changed the API limits for static maps. You now need to have a Google Maps API key. Instructions for registering a key can be found [here](https://github.com/googlemaps/google-maps-services-python#api-keys). Replace `YOUR_API_KEY` with the key you registered. + It also leverages the `limit_refetch_to_url_change` option to ensure that we do not make a lot of requests to the Google Maps API. ```yaml @@ -20,7 +22,7 @@ It also leverages the `limit_refetch_to_url_change` option to ensure that we do camera: name: Paulus platform: generic - still_image_url: {% raw %}https://maps.googleapis.com/maps/api/staticmap?center={{ states.device_tracker.demo_paulus.attributes.latitude }},{{ states.device_tracker.demo_paulus.attributes.longitude }}&zoom=13&size=500x500&maptype=roadmap&markers=color:blue%7Clabel:P%7C{{ states.device_tracker.demo_paulus.attributes.latitude }},{{ states.device_tracker.demo_paulus.attributes.longitude }}{% endraw %} + still_image_url: {% raw %}https://maps.googleapis.com/maps/api/staticmap?center={{ states.device_tracker.demo_paulus.attributes.latitude }},{{ states.device_tracker.demo_paulus.attributes.longitude }}&zoom=13&size=500x500&maptype=roadmap&markers=color:blue%7Clabel:P%7C{{ states.device_tracker.demo_paulus.attributes.latitude }},{{ states.device_tracker.demo_paulus.attributes.longitude }}{% endraw %}&key=YOUR_API_KEY limit_refetch_to_url_change: true ``` diff --git a/source/_cookbook/python_component_automation.markdown b/source/_cookbook/python_component_automation.markdown new file mode 100644 index 00000000000..b098278555c --- /dev/null +++ b/source/_cookbook/python_component_automation.markdown @@ -0,0 +1,159 @@ +--- +layout: page +title: "Automation in Code" +description: "A sample to do automations in Python Code." +date: 2016-02-14 0:40 -0800 +sidebar: true +comments: false +sharing: true +footer: true +ha_category: Automation in Python Examples +--- + +Example component to target an `entity_id` to: + + - turn it on at 7AM in the morning + - turn it on if anyone comes home and it is off + - turn it off if all lights are turned off + - turn it off if all people leave the house + - offer a service to turn it on for 10 seconds + +To set it up, add the following lines to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +example: + target: TARGET_ENTITY +``` + +Configuration variables: + +- **target** (*Required*): TARGET_ENTITY should be one of your devices that can be turned on and off, e.g., a light or a switch. Example value could be light.Ceiling or switch.AC (if you have these devices with those names). + +Create the file `/custom_components/example.py` and copy paste the content below: + + +```python +""" +Example of a custom component. +""" +import time +import logging + +from homeassistant.const import STATE_HOME, STATE_NOT_HOME, STATE_ON, STATE_OFF +from homeassistant.helpers import validate_config +from homeassistant.helpers.event_decorators import \ + track_state_change, track_time_change +from homeassistant.helpers.service import service +import homeassistant.components as core +from homeassistant.components import device_tracker +from homeassistant.components import light + +# The domain of your component. Should be equal to the name of your component. +DOMAIN = "example" + +# List of component names (string) your component depends upon. +# We depend on group because group will be loaded after all the components that +# initialize devices have been setup. +DEPENDENCIES = ['group', 'device_tracker', 'light'] + +# Configuration key for the entity id we are targeting. +CONF_TARGET = 'target' + +# Variable for storing configuration parameters. +TARGET_ID = None + +# Name of the service that we expose. +SERVICE_FLASH = 'flash' + +# Shortcut for the logger +_LOGGER = logging.getLogger(__name__) + + +def setup(hass, config): + """Setup example component.""" + global TARGET_ID + + # Validate that all required config options are given. + if not validate_config(config, {DOMAIN: [CONF_TARGET]}, _LOGGER): + return False + + TARGET_ID = config[DOMAIN][CONF_TARGET] + + # Validate that the target entity id exists. + if hass.states.get(TARGET_ID) is None: + _LOGGER.error("Target entity id %s does not exist", + TARGET_ID) + + # Tell the bootstrapper that we failed to initialize and clear the + # stored target id so our functions don't run. + TARGET_ID = None + return False + + # Tell the bootstrapper that we initialized successfully. + return True + + +@track_state_change(device_tracker.ENTITY_ID_ALL_DEVICES) +def track_devices(hass, entity_id, old_state, new_state): + """Called when the group.all devices change state.""" + # If the target id is not set, return + if not TARGET_ID: + return + + # If anyone comes home and the entity is not on, turn it on. + if new_state.state == STATE_HOME and not core.is_on(hass, TARGET_ID): + + core.turn_on(hass, TARGET_ID) + + # If all people leave the house and the entity is on, turn it off. + elif new_state.state == STATE_NOT_HOME and core.is_on(hass, TARGET_ID): + + core.turn_off(hass, TARGET_ID) + + +@track_time_change(hour=7, minute=0, second=0) +def wake_up(hass, now): + """Turn light on in the morning. + + Turn the light on at 7 AM if there are people home and it is not already + on. + """ + if not TARGET_ID: + return + + if device_tracker.is_on(hass) and not core.is_on(hass, TARGET_ID): + _LOGGER.info('People home at 7AM, turning it on') + core.turn_on(hass, TARGET_ID) + + +@track_state_change(light.ENTITY_ID_ALL_LIGHTS, STATE_ON, STATE_OFF) +def all_lights_off(hass, entity_id, old_state, new_state): + """If all lights turn off, turn off.""" + if not TARGET_ID: + return + + if core.is_on(hass, TARGET_ID): + _LOGGER.info('All lights have been turned off, turning it off') + core.turn_off(hass, TARGET_ID) + + +@service(DOMAIN, SERVICE_FLASH) +def flash_service(hass, call): + """Service that will toggle the target. + + Set the light to off for 10 seconds if on and vice versa. + """ + if not TARGET_ID: + return + + if core.is_on(hass, TARGET_ID): + core.turn_off(hass, TARGET_ID) + time.sleep(10) + core.turn_on(hass, TARGET_ID) + + else: + core.turn_on(hass, TARGET_ID) + time.sleep(10) + core.turn_off(hass, TARGET_ID) +``` diff --git a/source/_cookbook/sonos_say.markdown b/source/_cookbook/sonos_say.markdown index 80a928d7a4a..fd4b04b402f 100644 --- a/source/_cookbook/sonos_say.markdown +++ b/source/_cookbook/sonos_say.markdown @@ -12,7 +12,7 @@ ha_category: Automation Examples #### {% linkable_title Sonos say script to speak with text-to-speech %} -This script allows you to use [TTS](https://home-assistant.io/components/#text-to-speech) on Sonos. +This script allows you to use [TTS](/components/#text-to-speech) on Sonos. ```yaml script: @@ -46,7 +46,7 @@ automation: trigger: - platform: state entity_id: input_boolean.mytest - action: + action: - service: script.sonos_say data: sonos_entity: media_player.office @@ -54,3 +54,14 @@ automation: message: 'Your husband coming home!' delay: '00:00:05' ``` +Note that this example uses the `voicerss` text-to-speech platform. There are many platforms that can be used. The one installed by default with Home Assistant is Google TTS. This appears in your `configuration.yaml` file as: + +``` + tts: + - platform: google +``` + +If you want to use this TTS engine, change the line in the example provided to: +``` +- service: tts.google_say +``` diff --git a/source/_cookbook/track_battery_level.markdown b/source/_cookbook/track_battery_level.markdown index 9de6b14cfb0..696742b1c74 100644 --- a/source/_cookbook/track_battery_level.markdown +++ b/source/_cookbook/track_battery_level.markdown @@ -1,6 +1,6 @@ --- layout: page -title: "Track your battery level" +title: "Track your phone battery level" description: "Basic example how to track the battery level of your mobile devices." date: 2016-01-29 09:00 sidebar: true @@ -12,7 +12,7 @@ ha_category: Automation Examples ### {% linkable_title iOS Devices %} -If you have a device running iOS (iPhone, iPad, etc), The [iCloud](/components/device_tracker.icloud/) is gathering various details about your device including the battery level. To display it in the Frontend use a [template sensor](/components/sensor.template/). You can also use the icon template option to create a dynamic icon that changes with the battery level. +If you have a device running iOS (iPhone, iPad, etc), The [iCloud](/components/device_tracker.icloud/) is gathering various details about your device including the battery level. To display it in the Frontend use a [template sensor](/components/sensor.template/). You can also the `battery` [sensor device class](/components/sensor/#device-class) to dynamically change the icon with the battery level. {% raw %} ```yaml @@ -21,8 +21,6 @@ sensor: sensors: battery_iphone: friendly_name: iPhone Battery - # "entity_id:" ensures that this sensor will only update when your device tracker does. - entity_id: device_tracker.iphone unit_of_measurement: '%' value_template: >- {%- if states.device_tracker.iphone.attributes.battery %} @@ -30,21 +28,10 @@ sensor: {% else %} {{ states.sensor.battery_iphone.state }} {%- endif %} - icon_template: > - {% set battery_level = states.sensor.battery_iphone.state|default(0)|int %} - {% set battery_round = (battery_level / 10) |int * 10 %} - {% if battery_round >= 100 %} - mdi:battery - {% elif battery_round > 0 %} - mdi:battery-{{ battery_round }} - {% else %} - mdi:battery-alert - {% endif %} + device_class: battery ``` {% endraw %} -The `else` part is used to have the sensor keep it's last state if the newest [iCloud](/components/device_tracker.icloud/) update doesn't have any battery state in it (which happens sometimes). Otherwise the sensor will be blank. - ### {% linkable_title Android and iOS Devices %} While running the [Owntracks](/components/device_tracker.owntracks/) device tracker you can retrieve the battery level with a MQTT sensor. Replace username with your MQTT username (for the embedded MQTT it's simply homeassistant), and deviceid with the set Device ID in Owntracks. @@ -57,5 +44,6 @@ sensor: name: "Battery Tablet" unit_of_measurement: "%" value_template: '{{ value_json.batt }}' + device_class: battery ``` {% endraw %} diff --git a/source/_cookbook/turn_on_light_for_10_minutes_when_motion_detected.markdown b/source/_cookbook/turn_on_light_for_10_minutes_when_motion_detected.markdown index 34a244aaa57..65f5cb6b590 100644 --- a/source/_cookbook/turn_on_light_for_10_minutes_when_motion_detected.markdown +++ b/source/_cookbook/turn_on_light_for_10_minutes_when_motion_detected.markdown @@ -10,7 +10,7 @@ footer: true ha_category: Automation Examples --- -#### {% linkable_title Turn on lights with a resettable off timer %} +#### {% linkable_title Turn on lights with a resetable off timer %} This recipe will turn on a light when there is motion and turn off the light when ten minutes has passed without any motion events. diff --git a/source/_data/glossary.yml b/source/_data/glossary.yml index e66face48b2..d68d4c26ca5 100644 --- a/source/_data/glossary.yml +++ b/source/_data/glossary.yml @@ -39,7 +39,7 @@ - topic: Cookbook description: "The [Cookbook](/cookbook/) contains a set of configuration examples of Home Assistant from the community." - topic: Packages - description: "[Packages](/docs/configuration/packages/) allow you to bundle different component configuations together." + description: "[Packages](/docs/configuration/packages/) allow you to bundle different component configurations together." - topic: Customize description: "[Customization](/docs/configuration/customizing-devices/) allows you to overwrite the default parameter of your devices in the configuration." - topic: Zone diff --git a/source/_docs/asterisk_mbox.markdown b/source/_docs/asterisk_mbox.markdown index 65c570aab89..438ed0fd422 100644 --- a/source/_docs/asterisk_mbox.markdown +++ b/source/_docs/asterisk_mbox.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Asterisk Voicemail Server Installation" -description: "Instructions how to integrate your existing Asterisk voicemail within Home Assistant." +description: "Instructions on how to integrate your existing Asterisk voicemail within Home Assistant." date: 2017-06-30 18:30 sidebar: true comments: false @@ -9,28 +9,30 @@ sharing: true footer: true --- -Asterisk Voicemail integration allows Home Assistant to view, listen-to, and delete voicemails from a Asterisk voicemail mailbox. +Asterisk Voicemail integration allows Home Assistant to view, listen to and delete voicemails from a Asterisk voicemail mailbox. There are two components to the integration: + - A server that runs on the Asterisk PBX host and communicates over an open port. - A client which can request inormation from the server. Both parts are necessary for Asterisk voicemail integration. -The server installation is documented below. The client is [integrated inside Home Assistant](/components/asterisk_mbox) +The server installation is documented below. The client is [integrated inside Home Assistant](/components/asterisk_mbox)

-Currently this module can only monitor a single Asterisk PBX mailbox. Multiple mailbox support is planned for the future +Currently this module can only monitor a single Asterisk PBX mailbox.

### {% linkable_title Prerequisites %} Before beginning make sure that you have the following: -- A functional Asterisk PBX setup which is using the default `voicemail` application -- Both Home Assistant and Asterisk PBX running on the same LAN (or the same server) -- The Asterisk PBX server has python 3.4 or newer installed -- Administrator access on the Asterisk PBX (for python module installation) -- Account Access to the `asterisk` user that runs the Asterisk PBX software + +- A functional Asterisk PBX setup which is using the default `voicemail` application. +- Both Home Assistant and Asterisk PBX running on the same LAN (or the same server). +- The Asterisk PBX server has Python 3.5 or newer installed. +- Administrator access on the Asterisk PBX (for python module installation). +- Account access to the `asterisk` user that runs the Asterisk PBX software. ### {% linkable_title Installation %} @@ -44,7 +46,7 @@ Before beginning make sure that you have the following: 3. Create a configuration file for the server - As the `asterisk` user create a `asterisk_mbox.ini` file (You can place this in any directory you choose, but the rommended location is `/etc/asterisk/asterisk_mbox.ini`) + As the `asterisk` user create an `asterisk_mbox.ini` file. You can place this in any directory you choose, but the recommended location is `/etc/asterisk/asterisk_mbox.ini`. ```ini [default] @@ -56,14 +58,14 @@ Before beginning make sure that you have the following: google_key = GOOGLE_API_KEY ``` - - **host** (*Optional*): The IP address to listen on for client requests. This defaults to all IP addresses on the server. To listen only locally, choose `127.0.0.1` - - **port** (*Optional*): The port to listen on for client requests. (default: 12345) - - **password** (*Required*): A password shared between client and server. Use only alpha-numeric characters and spaces - - **mbox\_path** (*Required*): The path to the storage location of mailbox files. This is typically `/var/spool/asterisk/voicemail/default//` - - **cache\_file** (*Required*): A fully-qualified path to a file thht can be written by the server containing transcriptions of voicemails. Example: `/var/spool/asterisk/transcription.cache` - - **google\_key** (*Required*): Your 40 character Google API key + - **host** (*Optional*): The IP address to listen on for client requests. This defaults to all IP addresses on the server. To listen only locally, choose `127.0.0.1` + - **port** (*Optional*): The port to listen on for client requests. Defaults to 12345. + - **password** (*Required*): A password shared between client and server. Use only alpha-numeric characters and spaces + - **mbox\_path** (*Required*): The path to the storage location of mailbox files. This is typically `/var/spool/asterisk/voicemail/default//` + - **cache\_file** (*Required*): A fully-qualified path to a file thht can be written by the server containing transcriptions of voicemails. Example: `/var/spool/asterisk/transcription.cache` + - **google\_key** (*Required*): Your 40 characters Google API key. - Once complete, ensure this file is only accessible by the asterisk user: + Once complete, ensure this file is only accessible by the Asterisk user: ```bash $ sudo chown asterisk:asterisk /etc/asterisk/asterisk_mbox.ini @@ -77,7 +79,7 @@ Before beginning make sure that you have the following: Now complete the [Home Assistant configuration](/components/asterisk_mbox) and verify that Home Assistant can communicate with the server - You can use `Ctrl-C` to terminate the server when done testing + You can use `Ctrl-c` to terminate the server when done testing 5. Configure the server to start automatically @@ -100,5 +102,5 @@ Before beginning make sure that you have the following: ```

-This assumes that your Asterisk PBX server is using `systemd` for init handling. If not, you will need to create the appropriate configuration files yourself. +This assumes that your Asterisk PBX server is using `systemd` for init handling. If not, you will need to create the appropriate configuration files yourself.

diff --git a/source/_docs/automation.markdown b/source/_docs/automation.markdown index 8eb4124183c..e50db5d9bfe 100644 --- a/source/_docs/automation.markdown +++ b/source/_docs/automation.markdown @@ -47,14 +47,12 @@ State changes can be used as the source of triggers and the current state can be Actions are all about calling services. To explore the available services open the Services developer tool. Services allow to change anything. For example turn on a light, run a script or enable a scene. Each service has a domain and a name. For example the service `light.turn_on` is capable of turning on any light in your system. Services can be passed parameters to for example tell which device to turn on or what color to use. -

-As of version 0.42 you have to set an initial state in your automations in order for Home Assistant to restore them upon restart. +You have to set an initial state in your automations in order for Home Assistant to enable them upon restart. ```text +automation: - alias: Automation Name initial_state: True trigger: ... ``` - -

diff --git a/source/_docs/automation/action.markdown b/source/_docs/automation/action.markdown index ce9d7c9e050..0df212be7cd 100644 --- a/source/_docs/automation/action.markdown +++ b/source/_docs/automation/action.markdown @@ -22,13 +22,12 @@ automation: event: sunset action: service: light.turn_on - entity_id: - - light.kitchen - - light.living_room data: brightness: 150 rgb_color: [255, 0, 0] - + entity_id: + - light.kitchen + - light.living_room automation 2: # Notify me on my mobile phone of an event trigger: diff --git a/source/_docs/automation/condition.markdown b/source/_docs/automation/condition.markdown index 78f396fa670..cae9f96a978 100644 --- a/source/_docs/automation/condition.markdown +++ b/source/_docs/automation/condition.markdown @@ -17,6 +17,7 @@ The available conditions for an automation are the same as for the script syntax Example of using condition: ```yaml +automation: - alias: 'Enciende Despacho' trigger: platform: state diff --git a/source/_docs/automation/editor.markdown b/source/_docs/automation/editor.markdown index 8db389733c4..31bced2ddb0 100644 --- a/source/_docs/automation/editor.markdown +++ b/source/_docs/automation/editor.markdown @@ -9,7 +9,7 @@ sharing: true footer: true --- -In Home Assistant 0.45 we introduced the first version of our automation editor. If you just created a new configuration with Home Assistant then you're all set! Go to the UI and enjoy. +In Home Assistant 0.45 we introduced the first version of our automation editor. If you just created a new configuration with Home Assistant, then you're all set! Go to the UI and enjoy. From the UI choose **Configuration** which is located in the sidebar, then click on **Automation** to go to the automation editor. Press the **+** sign in the lower right corner to get started. This example is based on the manual steps described in the [Getting started section](/getting-started/automation/) for a [`random` sensor](/components/sensor.random/). @@ -19,7 +19,7 @@ Choose a meaningful name for your automation rules.

-If the value of the sensor is greater than 10 then the automation rule should apply. +If the value of the sensor is greater than 10, then the automation rule should apply.

@@ -39,11 +39,20 @@ As "Service Data" we want a simple text that is shown as part of the notificatio } ``` -Don't forget to save your new automation rule. In order for your saved automation rule to come into effect you will need to go to the **Configuration** page and click on **Reload Automation**. +Don't forget to save your new automation rule. For your saved automation rule to come into effect, you will need to go to the **Configuration** page and click on **Reload Automation**. ## {% linkable_title Updating your configuration to use the editor %} -The automation editor reads and writes to the file `automations.yaml` in your [configuration](/docs/configuration/) folder. Make sure that you have set up the automation component to read from it: +First, check that you have activated the configuration editor. + +```yaml +# Activate the configuration editor +config: +``` + +The automation editor reads and writes to the file `automations.yaml` in the root of your [configuration](/docs/configuration/) folder. +Currently, both the name of this file and its location are fixed. +Make sure that you have set up the automation component to read from it: ```yaml # Configuration.yaml example @@ -58,9 +67,19 @@ automation old: platform: ... ``` +You can use the `automation:` and `automation old:` sections at the same time: + - `automation old:` to keep your manual designed automations + - `automation:` to save the automation created by the online editor + +```yaml +automation: !include automations.yaml +automation old: !include_dir_merge_list automations +``` + + ## {% linkable_title Migrating your automations to `automations.yaml` %} -If you want to migrate your old 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. +If you want to migrate your old 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. For example, the below automation will be triggered when the sun goes from below the horizon to above the horizon. Then, if the temperature is between 17 and 25 degrees, a light will be turned on. diff --git a/source/_docs/automation/examples.markdown b/source/_docs/automation/examples.markdown index 9e28e0b3e76..2e2ade256f3 100644 --- a/source/_docs/automation/examples.markdown +++ b/source/_docs/automation/examples.markdown @@ -38,6 +38,7 @@ automation: after: '16:00:00' before: '23:00:00' action: + # With a single service call, we don't need a '-' before service - though you can if you want to service: homeassistant.turn_on entity_id: group.living_room @@ -76,9 +77,9 @@ automation: event_data: entity_id: binary_sensor.cube_158d000103a3de action: - - service_template: notify.pushover - data_template: - title: "Cube event detected" - message: "Cube has triggered this event: {{ trigger.event }}" + service_template: notify.pushover + data_template: + title: "Cube event detected" + message: "Cube has triggered this event: {{ trigger.event }}" ``` {% endraw %} diff --git a/source/_docs/automation/templating.markdown b/source/_docs/automation/templating.markdown index 7f721876bd9..74f0427f48c 100644 --- a/source/_docs/automation/templating.markdown +++ b/source/_docs/automation/templating.markdown @@ -69,6 +69,7 @@ The following tables show the available trigger data per platform. | ---- | ---- | | `trigger.platform` | Hardcoded: `event`. | `trigger.event` | Event object that matched. +| `trigger.event.data` | Optional data ### {% linkable_title mqtt %} diff --git a/source/_docs/automation/trigger.markdown b/source/_docs/automation/trigger.markdown index c4b3ee2793a..edccbd457b8 100644 --- a/source/_docs/automation/trigger.markdown +++ b/source/_docs/automation/trigger.markdown @@ -13,6 +13,7 @@ redirect_from: /getting-started/automation-trigger/ Triggers are what starts the processing of an automation rule. It is possible to specify multiple triggers for the same rule. Once a trigger starts, Home Assistant will validate the conditions, if any, and call the action. ### {% linkable_title Event trigger %} + Triggers when an event is being processed. Events are the raw building blocks of Home Assistant. You can match events on just the event name or also require specific event data to be present. Events can be fired by components or via the API. There is no limitation to the types. A list of built-in events can be found [here](/docs/configuration/events/). @@ -33,7 +34,7 @@ automation: ### {% linkable_title Home Assistant trigger %} -Use this platform to trigger when Home Assistant starts up and shuts down. +Triggers when Home Assistant starts up or shuts down. ```yaml automation: @@ -44,6 +45,7 @@ automation: ``` ### {% linkable_title MQTT trigger %} + Triggers when a specific message is received on given topic. Optionally can match on the payload being sent over the topic. ```yaml @@ -56,15 +58,17 @@ automation: ``` ### {% linkable_title Numeric state trigger %} -On state change of a specified entity, attempts to parse the state as a number and triggers once if value is changing from above to below a threshold, or from below to above the given threshold. +Triggers when numeric value of an entity's state crosses a given threshold. On state change of a specified entity, attempts to parse the state as a number and triggers once if value is changing from above to below or from below to above the given threshold. + +{% raw %} ```yaml automation: trigger: platform: numeric_state entity_id: sensor.temperature # Optional - value_template: '{% raw %}{{ state.attributes.battery }}{% endraw %}' + value_template: '{{ state.attributes.battery }}' # At least one of the following required above: 17 below: 25 @@ -75,15 +79,16 @@ automation: minutes: 10 seconds: 5 ``` +{% endraw %}

Listing above and below together means the numeric_state has to be between the two values. -In the example above, a numeric_state that is 17.1-24.9 would fire this trigger. +In the example above, a numeric_state that goes to 17.1-24.9 (from 17 or below, or 25 or above) would fire this trigger.

### {% linkable_title State trigger %} -Triggers when the state of tracked entities change. If only entity_id given will match all state changes, even if only state attributes change. +Triggers when the state of a given entity changes. If only `entity_id` is given trigger will activate for all state changes, even if only state attributes change. ```yaml automation: @@ -107,7 +112,8 @@ automation:

### {% linkable_title Sun trigger %} -Trigger when the sun is setting or rising. An optional time offset can be given to have it trigger for example 45 minutes before sunset, when dusk is setting in. + +Triggers when the sun is setting or rising. An optional time offset can be given to have it trigger a set time before or after the sun event (i.e. 45 minutes before sunset, when dusk is setting in). ```yaml automation: @@ -121,39 +127,37 @@ automation: Sometimes you may want more granular control over an automation based on the elevation of the sun. This can be used to layer automations to occur as the sun lowers on the horizon or even after it is below the horizon. This is also useful when the "sunset" event is not dark enough outside and you would like the automation to run later at a precise solar angle instead of the time offset such as turning on exterior lighting. +{% raw %} ```yaml automation: alias: "Exterior Lighting on when dark outside" trigger: platform: numeric_state entity_id: sun.sun - value_template: "{% raw %}{{ state.attributes.elevation }}{% endraw %}" + value_template: "{{ state.attributes.elevation }}" # Can be a positive or negative number below: -4.0 action: service: switch.turn_on entity_id: switch.exterior_lighting ``` +}{% endraw %} + The US Naval Observatory has a [tool](http://aa.usno.navy.mil/data/docs/AltAz.php) that will help you estimate what the solar angle will be at any specific time. ### {% linkable_title Template trigger %} -

- If your template trigger has no `entity_id` listed, then it is evaluted on *every* state change for *every* entity. Instead you should create a [template sensor](/components/sensor.template/) or [template binary sensor](/components/binary_sensor.template/) and use that in your automation. -

- -Template triggers work by evaluating a [template] on each state change. The trigger will fire if the state change caused the template to render 'true'. This is achieved by having the template result in a true boolean expression (`{% raw %}{{ is_state('device_tracker.paulus', 'home') }}{% endraw %}`) or by having the template render 'true' (example below). +Template triggers work by evaluating a [template](/docs/configuration/templating/) on every state change for all of the recognized entities. The trigger will fire if the state change caused the template to render 'true'. This is achieved by having the template result in a true boolean expression (`{% raw %}{{ is_state('device_tracker.paulus', 'home') }}{% endraw %}`) or by having the template render 'true' (example below). With template triggers you can also evaluate attribute changes by using is_state_attr (`{% raw %}{{ is_state_attr('climate.living_room', 'away_mode', 'off') }}{% endraw %}`) +{% raw %} ```yaml automation: trigger: platform: template - entity_id: device_tracker.paulus - value_template: "{% raw %}{% if is_state('device_tracker.paulus', 'home') %}true{% endif %}{% endraw %}" + value_template: "{% if is_state('device_tracker.paulus', 'home') %}true{% endif %}" ``` - -[template]: /docs/configuration/templating/ +{% endraw %} ### {% linkable_title Time trigger %} @@ -187,7 +191,7 @@ automation 3: ### {% linkable_title Zone trigger %} -Zone triggers can trigger when an entity is entering or leaving the zone. For zone automation to work, you need to have setup a device tracker platform that supports reporting GPS coordinates. Currently this is limited to the [OwnTracks platform](/components/device_tracker.owntracks/) as well as the [iCloud platform](/components/device_tracker.icloud/). +Zone triggers can trigger when an entity is entering or leaving the zone. For zone automation to work, you need to have setup a device tracker platform that supports reporting GPS coordinates. This includes [GPS Logger](/components/device_tracker.gpslogger/), the [OwnTracks platform](/components/device_tracker.owntracks/) and the [iCloud platform](/components/device_tracker.icloud/). ```yaml automation: @@ -199,7 +203,6 @@ automation: event: enter # or "leave" ``` - ### {% linkable_title Multiple triggers %} When your want your automation rule to have multiple triggers, just prefix the first line of each trigger with a dash (-) and indent the next lines accordingly. Whenever one of the triggers fires, your rule is executed. diff --git a/source/_docs/autostart.markdown b/source/_docs/autostart.markdown index 95e9608adc8..48ca9fb411f 100644 --- a/source/_docs/autostart.markdown +++ b/source/_docs/autostart.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Autostart Home Assistant" -description: "Instructions how to setup Home Assistant to launch on start." +description: "Instructions on how to setup Home Assistant to launch on start." date: 2015-9-1 22:57 sidebar: true comments: false diff --git a/source/_docs/autostart/init.d.markdown b/source/_docs/autostart/init.d.markdown index 9f67cbdb2b5..db3ff12fee1 100644 --- a/source/_docs/autostart/init.d.markdown +++ b/source/_docs/autostart/init.d.markdown @@ -14,7 +14,7 @@ Home Assistant can run as a daemon within init.d with the script below. ### {% linkable_title 1. Copy script %} -Copy the script at the end of this page to `/etc/init.d/hass-daemon`. +Copy either the daemon script or the Python environment scrip at the end of this page to `/etc/init.d/hass-daemon` depending on your installation. After that, set the script to be executable: @@ -26,27 +26,41 @@ $ sudo chmod +x /etc/init.d/hass-daemon Create or pick a user that the Home Assistant daemon will run under. Update script to set `RUN_AS` to the username that should be used to execute hass. -### {% linkable_title 3. Change hass executable if required. %} +### {% linkable_title 3. Change hass executable and other variables if required. %} -Some installation environments may require a change in the Home Assistant executable `hass`. Update script to set `HASS_BIN` to the appropriate `hass` executable path. +Some installation environments may require a change in the Home Assistant executable `hass`. Update script to set `HASS_BIN` to the appropriate `hass` executable path. Please also check the other variables for the appropriate value. In general the defaults should work -### {% linkable_title 4. Register the daemon with Linux %} - -```bash -$ sudo update-rc.d hass-daemon defaults -``` - -### {% linkable_title 5. Install this service %} +### {% linkable_title 4. Install this service %} ```bash $ sudo service hass-daemon install ``` +### {% linkable_title 5. Create logrotate rule %} + +This logrotate script at `/etc/logrotate.d/homeassistant` will create an outage of a few seconds every week at night. If you do not want this add `--log-rotate-days 7` to the `FLAGS` variable in the init script. + +``` +/var/log/homeassistant/home-assistant.log +{ + rotate 7 + daily + missingok + notifempty + delaycompress + compress + postrotate + invoke-rc.d hass-daemon restart > /dev/null + endscript +} + +``` + ### {% linkable_title 6. Restart Machine %} That's it. Restart your machine and Home Assistant should start automatically. -If HA does not start, check the log file output for errors at `/var/opt/homeassistant/home-assistant.log` +If HA does not start, check the log file output for errors at `/var/log/homeassistant/home-assistant.log` ### {% linkable_title Extra: Running commands before hass executes %} @@ -71,56 +85,206 @@ PRE_EXEC="" # Typically /usr/bin/hass HASS_BIN="hass" RUN_AS="USER" -PID_FILE="/var/run/hass.pid" +PID_DIR="/var/run" +PID_FILE="$PID_DIR/hass.pid" CONFIG_DIR="/var/opt/homeassistant" -FLAGS="-v --config $CONFIG_DIR --pid-file $PID_FILE --daemon" -REDIRECT="> $CONFIG_DIR/home-assistant.log 2>&1" +LOG_DIR="/var/log/homeassistant" +LOG_FILE="$LOG_DIR/home-assistant.log" +FLAGS="-v --config $CONFIG_DIR --pid-file $PID_FILE --log-file $LOG_FILE --daemon" + start() { + create_piddir if [ -f $PID_FILE ] && kill -0 $(cat $PID_FILE) 2> /dev/null; then echo 'Service already running' >&2 return 1 fi - echo 'Starting service…' >&2 - local CMD="$PRE_EXEC $HASS_BIN $FLAGS $REDIRECT;" - su -c "$CMD" $RUN_AS - echo 'Service started' >&2 + echo -n 'Starting service… ' >&2 + local CMD="$PRE_EXEC $HASS_BIN $FLAGS;" + su -s /bin/bash -c "$CMD" $RUN_AS + if [ $? -ne 0 ]; then + echo "Failed" >&2 + else + echo 'Done' >&2 + fi } stop() { - if [ ! -f "$PID_FILE" ] || ! kill -0 $(cat "$PID_FILE") 2> /dev/null; then + if [ ! -f "$PID_FILE" ] || ! kill -0 $(cat "$PID_FILE") 2> /dev/null; then echo 'Service not running' >&2 return 1 fi - echo 'Stopping service…' >&2 + echo -n 'Stopping service… ' >&2 kill $(cat "$PID_FILE") while ps -p $(cat "$PID_FILE") > /dev/null 2>&1; do sleep 1;done; - echo 'Service stopped' >&2 + rm -f $PID_FILE + echo 'Done' >&2 } install() { - echo "Installing Home Assistant Daemon (hass-daemon)" - echo "999999" > $PID_FILE - chown $RUN_AS $PID_FILE - mkdir -p $CONFIG_DIR - chown $RUN_AS $CONFIG_DIR + echo "Installing Home Assistant Daemon (hass-daemon)" + update-rc.d hass-daemon defaults + create_piddir + mkdir -p $CONFIG_DIR + chown $RUN_AS $CONFIG_DIR + mkdir -p $LOG_DIR + chown $RUN_AS $LOG_DIR } uninstall() { - echo -n "Are you really sure you want to uninstall this service? That cannot be undone. [yes|No] " + echo "Are you really sure you want to uninstall this service? The INIT script will" + echo -n "also be deleted! That cannot be undone. [yes|No] " local SURE read SURE if [ "$SURE" = "yes" ]; then stop - rm -fv "$PID_FILE" + remove_piddir echo "Notice: The config directory has not been removed" echo $CONFIG_DIR + echo "Notice: The log directory has not been removed" + echo $LOG_DIR update-rc.d -f hass-daemon remove rm -fv "$0" echo "Home Assistant Daemon has been removed. Home Assistant is still installed." fi } +create_piddir() { + if [ ! -d "$PID_DIR" ]; then + mkdir -p $PID_DIR + chown $RUN_AS "$PID_DIR" + fi +} + +remove_piddir() { + if [ -d "$PID_DIR" ]; then + if [ -e "$PID_FILE" ]; then + rm -fv "$PID_FILE" + fi + rmdir -fv "$PID_DIR" + fi +} + +case "$1" in + start) + start + ;; + stop) + stop + ;; + install) + install + ;; + uninstall) + uninstall + ;; + restart) + stop + start + ;; + *) + echo "Usage: $0 {start|stop|restart|install|uninstall}" +esac +``` + +### {% linkable_title Python virtual environment %} + +```bash +#!/bin/sh +### BEGIN INIT INFO +# Provides: hass +# Required-Start: $local_fs $network $named $time $syslog +# Required-Stop: $local_fs $network $named $time $syslog +# Default-Start: 2 3 4 5 +# Default-Stop: 0 1 6 +# Description: Home\ Assistant +### END INIT INFO + +# /etc/init.d Service Script for Home Assistant +# Created with: https://gist.github.com/naholyr/4275302#file-new-service-sh +PRE_EXEC="cd /srv/homeassistant; python3 -m venv .; source bin/activate;" +# Typically /usr/bin/hass +HASS_BIN="hass" +RUN_AS="homeassistant" +PID_DIR="/var/run/hass" +PID_FILE="$PID_DIR/hass.pid" +CONFIG_DIR="/home/$RUN_AS/.homeassistant" +LOG_DIR="/var/log/homeassistant" +LOG_FILE="$LOG_DIR/home-assistant.log" +FLAGS="-v --config $CONFIG_DIR --pid-file $PID_FILE --log-file $LOG_FILE --daemon" + +start() { + create_piddir + if [ -f $PID_FILE ] && kill -0 $(cat $PID_FILE) 2> /dev/null; then + echo 'Service already running' >&2 + return 1 + fi + echo -n 'Starting service… ' >&2 + local CMD="$PRE_EXEC $HASS_BIN $FLAGS;" + su -s /bin/bash -c "$CMD" $RUN_AS + if [ $? -ne 0 ]; then + echo "Failed" >&2 + else + echo 'Done' >&2 + fi +} + +stop() { + if [ ! -f "$PID_FILE" ] || ! kill -0 $(cat "$PID_FILE") 2> /dev/null; then + echo 'Service not running' >&2 + return 1 + fi + echo -n 'Stopping service… ' >&2 + kill $(cat "$PID_FILE") + while ps -p $(cat "$PID_FILE") > /dev/null 2>&1; do sleep 1;done; + rm -f $PID_FILE + echo 'Done' >&2 +} + +install() { + echo "Installing Home Assistant Daemon (hass-daemon)" + update-rc.d hass-daemon defaults + create_piddir + mkdir -p $CONFIG_DIR + chown $RUN_AS $CONFIG_DIR + mkdir -p $LOG_DIR + chown $RUN_AS $LOG_DIR +} + +uninstall() { + echo "Are you really sure you want to uninstall this service? The INIT script will" + echo -n "also be deleted! That cannot be undone. [yes|No] " + local SURE + read SURE + if [ "$SURE" = "yes" ]; then + stop + remove_piddir + echo "Notice: The config directory has not been removed" + echo $CONFIG_DIR + echo "Notice: The log directory has not been removed" + echo $LOG_DIR + update-rc.d -f hass-daemon remove + rm -fv "$0" + echo "Home Assistant Daemon has been removed. Home Assistant is still installed." + fi +} + +create_piddir() { + if [ ! -d "$PID_DIR" ]; then + mkdir -p $PID_DIR + chown $RUN_AS "$PID_DIR" + fi +} + +remove_piddir() { + if [ -d "$PID_DIR" ]; then + if [ -e "$PID_FILE" ]; then + rm -fv "$PID_FILE" + fi + rmdir -fv "$PID_DIR" + fi +} + case "$1" in start) start diff --git a/source/_docs/autostart/macos.markdown b/source/_docs/autostart/macos.markdown index 0a1b6ea1348..56e6b27c3f6 100644 --- a/source/_docs/autostart/macos.markdown +++ b/source/_docs/autostart/macos.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Autostart on macOS" -description: "Instructions how to setup Home Assistant to launch on Apple macOS." +description: "Instructions on how to setup Home Assistant to launch on Apple macOS." date: 2015-9-1 22:57 sidebar: true comments: false diff --git a/source/_docs/autostart/synology.markdown b/source/_docs/autostart/synology.markdown index 2d97b91e575..f19f15ab734 100644 --- a/source/_docs/autostart/synology.markdown +++ b/source/_docs/autostart/synology.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Autostart on Synology NAS boot" -description: "Instructions how to setup Home Assistant to launch on boot on Synology NAS." +description: "Instructions on how to setup Home Assistant to launch on boot on Synology NAS." date: 2015-9-1 22:57 sidebar: true comments: false diff --git a/source/_docs/autostart/systemd.markdown b/source/_docs/autostart/systemd.markdown index 4ea709440f8..17211e5ed9d 100644 --- a/source/_docs/autostart/systemd.markdown +++ b/source/_docs/autostart/systemd.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Autostart using systemd" -description: "Instructions how to setup Home Assistant to launch on boot using systemd." +description: "Instructions on how to setup Home Assistant to launch on boot using systemd." date: 2015-9-1 22:57 sidebar: true comments: false @@ -21,7 +21,7 @@ If the preceding command returns the string `systemd`, continue with the instruc A service file is needed to control Home Assistant with `systemd`. The template below should be created using a text editor. Note, root permissions via `sudo` will likely be needed. The following should be noted to modify the template: - `ExecStart` contains the path to `hass` and this may vary. Check with `whereis hass` for the location. -- For most systems, the file is `/etc/systemd/system/home-assistant@[your user].service` with [your user] replaced by the user account that Home Assistant will run as (normally `homeassistant`). In particular, this is the case for Ubuntu 16.04. +- For most systems, the file is `/etc/systemd/system/home-assistant@[your user].service` with [your user] replaced by the user account that Home Assistant will run as (normally `homeassistant`). In particular, this is the case for Ubuntu 16.04. - If unfamiliar with command-line text editors, `sudo nano -w [filename]` can be used with `[filename]` replaced with the full path to the file. Ex. `sudo nano -w /etc/systemd/system/home-assistant@[your user].service`. After text entered, press CTRL-X then press Y to save and exit. - If you're running Home Assistant in a Python virtual environment or a Docker container, please skip to the appropriate template listed below. @@ -41,7 +41,7 @@ WantedBy=multi-user.target ### {% linkable_title Python virtual environment %} -If you've setup Home Assistant in `virtualenv` following our [Python installation guide](https://home-assistant.io/getting-started/installation-virtualenv/) or [manual installation guide for Raspberry Pi](https://home-assistant.io/getting-started/installation-raspberry-pi/), the following template should work for you. If Home Assistant install is not located at `/srv/homeassistant`, please modify the `ExecStart=` line appropriately. +If you've setup Home Assistant in `virtualenv` following our [Python installation guide](/getting-started/installation-virtualenv/) or [manual installation guide for Raspberry Pi](/getting-started/installation-raspberry-pi/), the following template should work for you. If Home Assistant install is not located at `/srv/homeassistant`, please modify the `ExecStart=` line appropriately. ``` [Unit] @@ -80,7 +80,7 @@ WantedBy=multi-user.target ### Next Steps -You need to reload `systemd` to make the daemon aware of the new configuration. +You need to reload `systemd` to make the daemon aware of the new configuration. ```bash $ sudo systemctl --system daemon-reload @@ -128,7 +128,7 @@ Because the log can scroll quite quickly, you can select to view only the error $ sudo journalctl -f -u home-assistant@[your user] | grep -i 'error' ``` -When working on Home Assitant, you can easily restart the system and then watch the log output by combining the above commands using `&&` +When working on Home Assistant, you can easily restart the system and then watch the log output by combining the above commands using `&&` ```bash $ sudo systemctl restart home-assistant@[your user] && sudo journalctl -f -u home-assistant@[your user] diff --git a/source/_docs/autostart/upstart.markdown b/source/_docs/autostart/upstart.markdown index b627ab3806e..c77660a84d7 100644 --- a/source/_docs/autostart/upstart.markdown +++ b/source/_docs/autostart/upstart.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Autostart using Upstart" -description: "Instructions how to setup Home Assistant to launch on boot using Upstart." +description: "Instructions on how to setup Home Assistant to launch on boot using Upstart." date: 2015-9-1 22:57 sidebar: true comments: false diff --git a/source/_docs/configuration.markdown b/source/_docs/configuration.markdown index 0b7a7138ca5..150eef1b46f 100644 --- a/source/_docs/configuration.markdown +++ b/source/_docs/configuration.markdown @@ -11,6 +11,8 @@ footer: true When launched for the first time, Home Assistant will write a default configuration file enabling the web interface and device discovery. It can take up to a minute for your devices to be discovered and appear in the user interface. +The web interface can be found at `http://ip.ad.dre.ss:8123/` - for example if your Home Assistant system has the IP address `192.168.0.40` then you'll find the web interface as `http://192.168.0.40:8123/`. + The location of the folder differs between operating systems: | OS | Path | @@ -18,18 +20,19 @@ The location of the folder differs between operating systems: | macOS | `~/.homeassistant` | | Linux | `~/.homeassistant` | | Windows | `%APPDATA%/.homeassistant` | +| Hass.io | `/config` | If you want to use a different folder for configuration, use the config command line parameter: `hass --config path/to/config`. Inside your configuration folder is the file `configuration.yaml`. This is the main file that contains components to be loaded with their configurations. Throughout the documentation you will find snippets that you can add to your configuration file to enable functionality.

- You will have to restart Home Assistant for changes to `configuration.yaml` to take effect. + You will have to restart Home Assistant for most changes to `configuration.yaml` to take effect. You can load changes to [automations](/docs/automation/), [customize](/docs/configuration/customizing-devices/), [groups](/components/group/), and [scripts](/components/script/) without restarting.

If you run into trouble while configuring Home Assistant, have a look at the [configuration troubleshooting page](/getting-started/troubleshooting-configuration/) and at the [configuration.yaml examples](/cookbook/#example-configurationyaml).

- Test any changes to your configuration files from the command line with `hass --script check_config`. This script allows you to test changes without the need to restart Home Assistant. + Test any changes to your configuration files from the command line with `hass --script check_config`. This script allows you to test changes without the need to restart Home Assistant. Remember to run this as the user you run Home Assistant as.

diff --git a/source/_docs/configuration/basic.markdown b/source/_docs/configuration/basic.markdown index 99614cefc1f..3ac38b00a2f 100644 --- a/source/_docs/configuration/basic.markdown +++ b/source/_docs/configuration/basic.markdown @@ -28,7 +28,7 @@ Configuration variables: - **longitude** (*Optional*): Longitude of your location required to calculate the time the sun rises and sets. - **elevation** (*Optional*): Altitude above sea level in meters. Impacts weather/sunrise data. - **unit_system** (*Optional*): `metric` for Metric, `imperial` for Imperial. -- **time_zone** (*Optional*): Pick yours from here: http://en.wikipedia.org/wiki/List_of_tz_database_time_zones +- **time_zone** (*Optional*): Pick yours from here: [http://en.wikipedia.org/wiki/List_of_tz_database_time_zones](http://en.wikipedia.org/wiki/List_of_tz_database_time_zones) - **name** (*Optional*): Name of the location where Home Assistant is running. - **customize** (*Optional*): [Customize](/docs/configuration/customizing-devices/) entities. - **customize_domain** (*Optional*): [Customize](/docs/configuration/customizing-devices/) all entities in a domain. @@ -37,7 +37,7 @@ Configuration variables: ### {% linkable_title Password protecting the web interface %} -First, you'll want to add a password for the Home Assistant web interface. Use your favourite text editor to open `configuration.yaml` and edit the `http` section: +First, you'll want to add a password for the Home Assistant web interface. Use your favorite text editor to open `configuration.yaml` and edit the `http` section: ```yaml http: diff --git a/source/_docs/configuration/customizing-devices.markdown b/source/_docs/configuration/customizing-devices.markdown index 71b8a2f561a..a3dc6cc91a3 100644 --- a/source/_docs/configuration/customizing-devices.markdown +++ b/source/_docs/configuration/customizing-devices.markdown @@ -61,7 +61,7 @@ homeassistant: | `homebridge_name` | Name of the entity in `HomeBridge`. | `hidden` | Set to `true` to hide the entity. | `homebridge_hidden` | Set to `true` to hide the entity from `HomeBridge`. -| `emulated_hue_hidden` | Set to `true` to hide the entity from `emulated_hue`. +| `emulated_hue_hidden` | Set to `true` to hide the entity from `emulated_hue` (this will be deprecated in the near future and should be configured in [`emulated_hue`](/components/emulated_hue)). | `entity_picture` | Url to use as picture for entity. | `icon` | Any icon from [MaterialDesignIcons.com](http://MaterialDesignIcons.com) ([Cheatsheet](https://materialdesignicons.com/cheatsheet)). Prefix name with `mdi:`, ie `mdi:home`. | `assumed_state` | For switches with an assumed state two buttons are shown (turn off, turn on) instead of a switch. By setting `assumed_state` to `false` you will get the default switch icon. @@ -71,14 +71,15 @@ homeassistant: ### {% linkable_title Device Class %} -Device class is currently supported by the following platforms: +Device class is currently supported by the following components: * [Binary Sensor](/components/binary_sensor/) +* [Sensor](/components/sensor/) * [Cover](/components/cover/) ### {% linkable_title Reloading customize %} -Home Assistant offers a service to reload the core configuration while Home Assistant is running called `homeassistant/reload_core_config`. This allows you to change your customize section and see it being applied without having to restart Home Assistant. To call this service, go to the service developer tool icon service developer tools, select the service `homeassistant/reload_core_config` and click "Call Service". +Home Assistant offers a service to reload the core configuration while Home Assistant is running called `homeassistant.reload_core_config`. This allows you to change your customize section and see it being applied without having to restart Home Assistant. To call this service, go to the service developer tool icon service developer tools, select the service `homeassistant.reload_core_config` and click "CALL SERVICE".

New customize information will be applied the next time the state of the entity gets updated. diff --git a/source/_docs/configuration/devices.markdown b/source/_docs/configuration/devices.markdown index 7b8b1a1f78e..6fbee6a4330 100644 --- a/source/_docs/configuration/devices.markdown +++ b/source/_docs/configuration/devices.markdown @@ -60,10 +60,12 @@ Each group consists of a name and a list of entity IDs. Entity IDs can be retrie ```yaml # Example configuration.yaml entry showing two styles group: - living_room: light.table_lamp, switch.ac + living_room: + entities: light.table_lamp, switch.ac bedroom: - - light.bedroom - - media_player.nexus_player + entities: + - light.bedroom + - media_player.nexus_player ``` For more details please check the [Group](/components/group/) page. diff --git a/source/_docs/configuration/entity-registry.markdown b/source/_docs/configuration/entity-registry.markdown new file mode 100644 index 00000000000..b6183f7b76b --- /dev/null +++ b/source/_docs/configuration/entity-registry.markdown @@ -0,0 +1,59 @@ +--- +layout: page +title: "Entity Registry" +description: "The entity registry contains." +date: 2016-04-20 06:00 +sidebar: true +comments: false +sharing: true +footer: true +--- + +

+This is a new and experimental feature of Home Assistant. +

+ +Starting with version 0.63, Home Assistant keeps a registry of known entities. +The entity registry makes sure that entities get unique identifiers and allow +customizing the identifiers and names of these entities. + +As this is still a very new part of Home Assistant, changes will require a +restart of Home Assistant to take effect. A config user interface will be added +in a future version. + +

+An entity needs to have a unique ID to be registered in the entity registry. +Not all integrations currently provide a unique id for their entities. +

+ +The entity registry is stored in `/entity_registry.yaml`. As a user, +you are unable to add entries, only update them. Here is an example file: + +``` +climate.downstairs_virtual: + platform: nest + unique_id: EPoMyWkpNyoYu3pGlmGxabcdefghijkl + name: Downstairs thermostat +light.study_ceiling: + platform: hue + unique_id: f0:fe:6b:00:14:00:00:00-00 + disabled_by: user +``` + +As a user, you can change the `entity_id` and add the `name` and `disabled_by` +value to each entry. + - Changing the _first line_ of each entry will change the `entity_id` of the entity throughout Home Assistant. + + - The value of `name` will override the _friendly name_ of the entity as given by the integration. + + _Added in Home Assistant 0.64._ + - The key `disabled_by` can either be `hass` or `user`. This functionality + is even more experimental than the whole entity registry itself and might + cause integrations to fail and might be removed in the future. + + _Added in Home Assistant 0.64._ + +{% linkable_title Supported Components %} + +At the moment, only the following components are supported: Z-Wave, Hue, Nest, LIFX, Sonos, Apple TV, Weather Underground +Note that for Weather Underground, second and subsequent Personal Weather Station ID (pws_id) will have their monitored conditions suffixed with an index number. diff --git a/source/_docs/configuration/events.markdown b/source/_docs/configuration/events.markdown index 6ad5aa152d9..ff0bcd35140 100644 --- a/source/_docs/configuration/events.markdown +++ b/source/_docs/configuration/events.markdown @@ -17,6 +17,10 @@ Home Assistant contains a few built-in events that are used to coordinate betwee ### {% linkable_title Event `homeassistant_start` %} Event `homeassistant_start` is fired when all components from the configuration have been intitialized. This is the event that will start the timer firing off `time_changed` events. +

+ Starting 0.42, it is no longer possible to listen for event `homeassistant_start`. Use the 'homeassistant' [platform](/docs/automation/trigger) instead. +

+ ### {% linkable_title Event `homeassistant_stop` %} Event `homeassistant_stop` is fired when Home Assistant is shutting down. It should be used to close any open connection or release any resources. diff --git a/source/_docs/configuration/group_visibility.markdown b/source/_docs/configuration/group_visibility.markdown index 0ec91f0f6b9..c5458e4bf2b 100644 --- a/source/_docs/configuration/group_visibility.markdown +++ b/source/_docs/configuration/group_visibility.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Group Visibility" -description: "Instructions how to change group visibility using automations." +description: "Instructions on how to change group visibility using automations." date: 2016-10-29 13:00 sidebar: true comments: false @@ -14,7 +14,7 @@ After filling Home Assistant with all your precious home automation devices, you ## {% linkable_title Changing visibility of a group %} -To change visibility of a group, use the service `group.set_visibility`, pass the group name as `entity_id` and use `visible` to decide wheter the group should be shown or hidden. +To change visibility of a group, use the service `group.set_visibility`, pass the group name as `entity_id` and use `visible` to decide whether the group should be shown or hidden. ```yaml service: group.set_visibility @@ -104,7 +104,7 @@ sensor: command: "python3 occasion.py" ```

-If you are using docker to run Home Assistant then the occasion.py script will be placed under /config. Your command should instead be: command: "python3 /command/occasion.py" +If you are using docker to run Home Assistant then the occasion.py script will be placed under /config. Your command should instead be: command: "python3 /config/occasion.py"

diff --git a/source/_docs/configuration/packages.markdown b/source/_docs/configuration/packages.markdown index 09feb26aabd..b8caf5394cb 100644 --- a/source/_docs/configuration/packages.markdown +++ b/source/_docs/configuration/packages.markdown @@ -10,9 +10,9 @@ footer: true redirect_from: /topics/packages/ --- -Packages in Home Assistant provides a way to bundle different component's configuration together. We were already introduced to the two configuration styles (specifying platforms entries together or individually) on the [adding devices](/docs/configuration/devices/) page. Both of these configuration methods require you to create the component key in the main `configuration.yaml` file. With packages we have a way to include different components, or parts of configuration using any of the `!include` directives introduced in [splitting the configuration](/docs/configuration/splitting_configuration). +Packages in Home Assistant provides a way to bundle different component's configuration together. We already learned about the two configuration styles (specifying platforms entries together or individually) on the [adding devices](/docs/configuration/devices/) page. Both of these configuration methods require you to create the component key in the main `configuration.yaml` file. With packages we have a way to include different components, or different configuration parts using any of the `!include` directives introduced in [splitting the configuration](/docs/configuration/splitting_configuration). -Packages are configured under the core `homeassistant/packages` in the configuration and take the format of a packages name (no spaces, all lower case) followed by a dictionary with the package config. For example, package `pack_1` would be created as: +Packages are configured under the core `homeassistant/packages` in the configuration and take the format of a package name (no spaces, all lower case) followed by a dictionary with the package config. For example, package `pack_1` would be created as: ```yaml homeassistant: @@ -22,7 +22,7 @@ homeassistant: ...package configuration here... ``` -The package configuration can include: `switch`, `light`, `automation`, `groups` or the majority of the Home Assistant components. +The package configuration can include: `switch`, `light`, `automation`, `groups`, or most other Home Assistant components. It can be specified inline or in a separate YAML file using `!include`. @@ -63,7 +63,7 @@ light: There are some rules for packages that will be merged: -1. Component names may only use the basic form (e.g. `switch` and `switch 1` or `switch aa` is not accepted). +1. Component names may only use the basic form (e.g., `switch`, but not `switch 1` or `switch aa`). 2. Platform based components (`light`, `switch`, etc) can always be merged. 3. Components where entities are identified by a key that will represent the entity_id (`{key: config}`) need to have unique 'keys' between packages and the main configuration file. @@ -73,7 +73,7 @@ There are some rules for packages that will be merged: input_boolean: my_input: ``` -4. Any component that is not a platform [2], or dictionaries with Entity ID keys [3] cannot be merged and can only occur once between all packages and the main configuration. +4. Any component that is not a platform [2], or dictionaries with Entity ID keys [3] can only be merged if its keys, except those for lists, are solely defined once.

Components inside packages can only specify platform entries using configuration style 1, where all the platforms are grouped under the component name. @@ -81,7 +81,7 @@ Components inside packages can only specify platform entries using configuration ### {% linkable_title Create a packages folder %} -One way to organise packages would be to create a folder named "packages" in your Home Assistant configuration directory. In the packages directory you can store any number of packages in a YAML file. This entry in your `configuration.yaml` will load all packages: +One way to organize packages is to create a folder named "packages" in your Home Assistant configuration directory. In the packages directory you can store any number of packages in a YAML file. This entry in your `configuration.yaml` will load all packages: ```yaml homeassistant: diff --git a/source/_docs/configuration/platform_options.markdown b/source/_docs/configuration/platform_options.markdown index 544c651e4b7..7823868022e 100644 --- a/source/_docs/configuration/platform_options.markdown +++ b/source/_docs/configuration/platform_options.markdown @@ -19,17 +19,17 @@ By setting an entity namespace, all entities will be prefixed with that namespac ```yaml # Example configuration.yaml entry light: - platform: hue - entity_namespace: holiday_house + - platform: your_lights + entity_namespace: holiday_house ``` ### {% linkable_title Scan Interval %} -Platforms that require polling will be polled in an interval specified by the main component. For example a light will check every 30 seconds for a changed state. It is possible to overwrite this scan interval for any platform that is being polled by specifying a `scan_interval` configuration key. In the example below we setup the Philips Hue lights but tell Home Assistant to poll the devices every 10 seconds instead of the default 30 seconds. +Platforms that require polling will be polled in an interval specified by the main component. For example a light will check every 30 seconds for a changed state. It is possible to overwrite this scan interval for any platform that is being polled by specifying a `scan_interval` configuration key. In the example below we set up the `your_lights` platform but tell Home Assistant to poll the devices every 10 seconds instead of the default 30 seconds. ```yaml -# Example configuration.yaml entry to poll Hue lights every 10 seconds. +# Example configuration.yaml entry to poll your_lights every 10 seconds. light: - platform: hue - scan_interval: 10 + - platform: your_lights + scan_interval: 10 ``` diff --git a/source/_docs/configuration/remote.markdown b/source/_docs/configuration/remote.markdown index 8bcc7420d71..f0d981b116e 100644 --- a/source/_docs/configuration/remote.markdown +++ b/source/_docs/configuration/remote.markdown @@ -7,18 +7,20 @@ sidebar: true comments: false sharing: true footer: true -redirect_from: /getting-started/basic/#remote-access --- If you're interested in logging in to Home Assistant while away, you'll have to make your instance remotely accessible. -The most common approach is to set up port forwarding from your router to port 8123 on the computer that is hosting Home Assistant. General instructions on how to do this can be found by searching ` port forwarding instructions`. +

+Remember to follow the [securing checklist](/docs/configuration/securing/) before doing this. +

+ +The most common approach is to set up port forwarding (for any port) from your router to port 8123 on the computer that is hosting Home Assistant. General instructions on how to do this can be found by searching ` port forwarding instructions`. You can use any free port on your router and forward that to port 8123. A problem with making a port accessible is that some Internet Service Providers only offer dynamic IPs. This can cause you to lose access to Home Assistant while away. You can solve this by using a free Dynamic DNS service like [DuckDNS](https://www.duckdns.org/). -Remember: Just putting a port up is not secure. You should definitely consider encrypting your traffic if you are accessing your Home Assistant installation remotely. For details please check the [set up encryption using Let's Encrypt](/blog/2015/12/13/setup-encryption-using-lets-encrypt/) blog post, or this [detailed guide](https://home-assistant.io/docs/ecosystem/certificates/lets_encrypt/) to using Let's Encrypt with HA. +Remember: Just putting a port up is not secure. You should definitely consider encrypting your traffic if you are accessing your Home Assistant installation remotely. For details please check the [set up encryption using Let's Encrypt](/blog/2017/09/27/effortless-encryption-with-lets-encrypt-and-duckdns/) blog post or this [detailed guide](/docs/ecosystem/certificates/lets_encrypt/) to using Let's Encrypt with Home Assistant. -Protect your communication with a [self-signed certificate](/cookbook/tls_self_signed_certificate/) between your client and the Home Assistant instance. - -For another way to access your Home Assistant frontend, check out [the instructions how to use Tor](/cookbook/tor_configuration/). +Protect your communication with a [self-signed certificate](/docs/ecosystem/certificates/tls_self_signed_certificate/) between your client and the Home Assistant instance. +For another way to access your Home Assistant frontend, check out [the instructions how to use Tor](/docs/ecosystem/tor/). diff --git a/source/_docs/configuration/secrets.markdown b/source/_docs/configuration/secrets.markdown index b5feb55b2b4..0f1728cc013 100644 --- a/source/_docs/configuration/secrets.markdown +++ b/source/_docs/configuration/secrets.markdown @@ -10,7 +10,7 @@ footer: true redirect_from: /topics/secrets/ --- -The `configuration.yaml` file is a plain-text file, thus it is readable by anyone who has access to the file. The file contains passwords and API tokens which need to be redacted if you want to share your configuration. By using `!secrets` you can remove any private information from you configuration files. This separation can also help you to keep easier track of your passwords and API keys. As they are all stored at one place and no longer spread across the `configuration.yaml` file or even multiple yaml files if you [split up your configuration](/docs/configuration/splitting_configuration/). +The `configuration.yaml` file is a plain-text file, thus it is readable by anyone who has access to the file. The file contains passwords and API tokens which need to be redacted if you want to share your configuration. By using `!secret` you can remove any private information from you configuration files. This separation can also help you to keep easier track of your passwords and API keys. As they are all stored at one place and no longer spread across the `configuration.yaml` file or even multiple yaml files if you [split up your configuration](/docs/configuration/splitting_configuration/). ### {% linkable_title Using secrets.yaml %} @@ -53,65 +53,15 @@ logger: debug ``` This will not print the actual secret's value to the log. -*Option 2*: View where secrets are retrieved from and the contents of all `secrets.yaml` files used, you can use the `check_config` script from the command line: +*Option 2*: View where secrets are retrieved from and the contents of all `secrets.yaml` files used, you can use the [`check_config` script](/docs/tools/check_config/) from the command line: ```bash $ hass --script check_config --secrets ``` This will print all your secrets. -### {% linkable_title Storing passwords in a keyring managed by your OS %} +## {% linkable_title Alternatives to `secrets.yaml` %} -Using [Keyring](https://github.com/jaraco/keyring) is an alternative way to `secrets.yaml`. They can be managed from the command line via the `keyring` script. +- [Using a keyring that is managed by your OS to store secrets](/docs/tools/keyring/) +- [Storing passwords securely in AWS](/docs/tools/credstash/) -```bash -$ hass --script keyring --help -``` - -To store a password in keyring, replace your password or API key with `!secret` and an identifier in `configuration.yaml` file. - -```yaml -http: - api_password: !secret http_password -``` - -Create an entry in your keyring. - -```bash -$ hass --script keyring set http_password -``` - -If you launch Home Assistant now, you will be prompted for the keyring password to unlock your keyring. - -```bash -$ hass -Config directory: /home/fab/.homeassistant -Please enter password for encrypted keyring: -``` - -

- If you are using the Python Keyring, [autostarting](/getting-started/autostart/) of Home Assistant will no longer work. -

- -### {% linkable_title Storing passwords securely in AWS %} - -Using [Credstash](https://github.com/fugue/credstash) is an alternative way to `secrets.yaml`. They can be managed from the command line via the credstash script. - -Before using credstash, you need to set up AWS credentials either via the `aws` command line tool, or using environment variables as explained in the [AWS CLI docs](http://docs.aws.amazon.com/cli/latest/userguide/cli-chap-getting-started.html) as well as creating a KMS key named 'credstash' as explained in the [credstash readme](https://github.com/fugue/credstash#setting-up-kms). After that is complete, you can use the provided script to add secrets to your Home Assistant secret store in credstash - -```bash -$ hass --script credstash --help -``` - -To store a password in credstash, replace your password or API key with `!secret` and an identifier in `configuration.yaml` file. - -```yaml -http: - api_password: !secret http_password -``` - -Create an entry in your credstash store. - -```bash -$ hass --script credstash set http_password -``` diff --git a/source/_docs/configuration/securing.markdown b/source/_docs/configuration/securing.markdown index 24ec0aa4f09..4ed3e20243e 100644 --- a/source/_docs/configuration/securing.markdown +++ b/source/_docs/configuration/securing.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Securing" -description: "Instructions how to secure your Home Assistant installation." +description: "Instructions on how to secure your Home Assistant installation." date: 2016-10-06 06:00 sidebar: true comments: false @@ -14,17 +14,22 @@ One major advantage of Home Assistant is that it's not dependent on cloud servic ### {% linkable_title Checklist %} -- [Protect your web interface with a password](https://home-assistant.io/getting-started/basic/#password-protecting-the-web-interface) +- [Protect your web interface with a password](/getting-started/basic/#password-protecting-the-web-interface) - Secure your host. Sources could be [Red Hat Enterprise Linux 7 Security Guide](https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7/pdf/Security_Guide/Red_Hat_Enterprise_Linux-7-Security_Guide-en-US.pdf), [CIS Red Hat Enterprise Linux 7 Benchmark](https://benchmarks.cisecurity.org/tools2/linux/CIS_Red_Hat_Enterprise_Linux_7_Benchmark_v1.0.0.pdf), or the [Securing Debian Manual](https://www.debian.org/doc/manuals/securing-debian-howto/index.en.html). - Restrict network access to your devices. Set `PermitRootLogin no` in your sshd config (usually `/etc/ssh/sshd_config`) and to use SSH keys for authentication instead of passwords. -- Don't run Home Assistant as root – consider the Principle of Least Privilege. +- Don't run Home Assistant as root – consider the Principle of Least Privilege. - Keep your [secrets](/topics/secrets/) safe. If you want to allow remote access, consider these additional points: - Protect your communication with [TLS/SSL](/docs/ecosystem/certificates/lets_encrypt/). +- Enable IP Filtering and configure a low [Login Attempts Threshold](/components/http/) - Protect your communication with [Tor](/cookbook/tor_configuration/). - Protect your communication with a [self-signed certificate](/cookbook/tls_self_signed_certificate/). - Use a [proxy](/cookbook/apache_configuration/). +- Set up a VPN +- Use a [SSH tunnel](/blog/2017/11/02/secure-shell-tunnel/) to connect to your frontend. - +

+ If you've forwarded any ports to your Home Assistant system from the Internet then it *will* be found by others. Whether through services like Shodan, or direct port scanning, all systems on the Internet are routinely probed for accessible services. If you fail to set a password then it is simply a matter of time before somebody finds your system - potentially as little as a few hours. +

diff --git a/source/_docs/configuration/splitting_configuration.markdown b/source/_docs/configuration/splitting_configuration.markdown index 3a1a9b6e530..ec0d021ea53 100644 --- a/source/_docs/configuration/splitting_configuration.markdown +++ b/source/_docs/configuration/splitting_configuration.markdown @@ -10,9 +10,9 @@ footer: true redirect_from: /topics/splitting_configuration/ --- -So you've been using Home Assistant for a while now and your [configuration.yaml file brings people to tears](https://home-assistant.io/cookbook/configuration_yaml_from_bassclarinetl2/) or you simply want to start off with the distributed approach, here's how to "split the configuration.yaml" into more manageable (read: humanly readable) pieces. +So you've been using Home Assistant for a while now and your [configuration.yaml file brings people to tears](/cookbook/configuration_yaml_from_bassclarinetl2/) or you simply want to start off with the distributed approach, here's how to "split the configuration.yaml" into more manageable (read: humanly readable) pieces. -First off, several community members have sanitized (read: without api keys/passwords etc) versions of their configurations available for viewing, you can see a list of them [here](https://home-assistant.io/cookbook/#example-configurationyaml). +First off, several community members have sanitized (read: without api keys/passwords etc) versions of their configurations available for viewing, you can see a list of them [here](/cookbook/#example-configurationyaml). As commenting code doesn't always happen, please read on for the details. diff --git a/source/_docs/configuration/state_object.markdown b/source/_docs/configuration/state_object.markdown index 72e62321477..fdb99ea0756 100644 --- a/source/_docs/configuration/state_object.markdown +++ b/source/_docs/configuration/state_object.markdown @@ -27,7 +27,7 @@ Field | Description `state.last_changed` | Time the state changed. This is not updated when there are only updated attributes. Example: `2017-10-28 08:13:36.715874+00:00`. `state.attributes` | A dictionary with extra attributes related to the current state. -The attributes of an entity are optional. There are a few attributes that are used by Home Assistant for representing the entity in a specific way. Each component will also have it's own attributes to represent extra state data about the entity. For example, the light component has attributes for the current brightness and color of the light. When an attribute is not available, Home Assistant will not write it to the state. +The attributes of an entity are optional. There are a few attributes that are used by Home Assistant for representing the entity in a specific way. Each component will also have its own attributes to represent extra state data about the entity. For example, the light component has attributes for the current brightness and color of the light. When an attribute is not available, Home Assistant will not write it to the state. When using templates, attributes will be available by their name. For example `state.attributes.assumed_state`. @@ -37,7 +37,7 @@ Attribute | Description `icon` | Icon to use for the entity in the frontend. Example: `mdi:home`. `hidden` | Boolean if the entity should not be shown in the frontend. Example: `true`. `entity_picture` | URL to a picture that should be used instead of showing the domain icon. Example: `http://example.com/picture.jpg`. -`assumed_state` | Boolean if the current state is an assumption. [More info](https://home-assistant.io/blog/2016/02/12/classifying-the-internet-of-things/#classifiers) Example: `True`. +`assumed_state` | Boolean if the current state is an assumption. [More info](/blog/2016/02/12/classifying-the-internet-of-things/#classifiers) Example: `True`. `unit_of_measurement` | The unit of measurement the state is expressed in. Used for grouping graphs or understanding the entity. Example: `°C`. When an attribute contains spaces, you can retrieve it like this: `states.sensor.livingroom.attributes["Battery numeric"]`. diff --git a/source/_docs/configuration/templating.markdown b/source/_docs/configuration/templating.markdown index 40feade2473..eea6b7c46df 100644 --- a/source/_docs/configuration/templating.markdown +++ b/source/_docs/configuration/templating.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Templating" -description: "Instructions how to use the templating feature of Home Assistant." +description: "Instructions on how to use the templating feature of Home Assistant." date: 2015-12-12 12:00 sidebar: true comments: false @@ -43,12 +43,13 @@ script: msg_who_is_home: sequence: - service: notify.notify - message: > - {% raw %}{% if is_state('device_tracker.paulus', 'home') %} - Ha, Paulus is home! - {% else %} - Paulus is at {{ states('device_tracker.paulus') }}. - {% endif %}{% endraw %} + data_template: + message: > + {% raw %}{% if is_state('device_tracker.paulus', 'home') %} + Ha, Paulus is home! + {% else %} + Paulus is at {{ states('device_tracker.paulus') }}. + {% endif %}{% endraw %} ``` [Jinja2](http://jinja.pocoo.org/) supports a wide variety of operations: @@ -67,26 +68,37 @@ Home Assistant adds extensions to allow templates to access all of the current s - `states.sensor.temperature` returns the state object for `sensor.temperature`. - `states('device_tracker.paulus')` will return the state string (not the object) of the given entity or `unknown` if it doesn't exist. - `is_state('device_tracker.paulus', 'home')` will test if the given entity is specified state. +- `state_attr('device_tracker.paulus', 'battery')` will return the value of the attribute or None if it doesn't exist. - `is_state_attr('device_tracker.paulus', 'battery', 40)` will test if the given entity is specified state. - `now()` will be rendered as current time in your time zone. - For specific values: `now().second`, `now().minute`, `now().hour`, `now().day`, `now().month`, `now().year`, `now().weekday()` and `now().isoweekday()` - `utcnow()` will be rendered as UTC time. - For specific values: `utcnow().second`, `utcnow().minute`, `utcnow().hour`, `utcnow().day`, `utcnow().month`, `utcnow().year`, `utcnow().weekday()` and `utcnow().isoweekday()`. - `as_timestamp()` will convert datetime object or string to UNIX timestamp -- `distance()` will measure the distance in meters between home, entity, coordinates. +- `distance()` will measure the distance in kilometers between home, entity, coordinates. - `closest()` will find the closest entity. -- `relative_time(timestamp)` will format the date time as relative time vs now (ie 7 seconds) - `float` will format the output as float. - `strptime(string, format)` will parse a string to a datetime based on a [format][strp-format]. - `log(value, base)` will take the logarithm of the input. When the base is omitted, it defaults to `e` - the natural logarithm. Can also be used as a filter. +- `sin(value)` will return the sine of the input. Can be used as a filter. +- `cos(value)` will return the cosine of the input. Can be used as a filter. +- `tan(value)` will return the tangent of the input. Can be used as a filter. +- `sqrt(value)` will return the square root of the input. Can be used as a filter. +- `e` mathematical constant, approximately 2.71828. +- `pi` mathematical constant, approximately 3.14159. +- `tau` mathematical constant, approximately 6.28318. - Filter `round(x)` will convert the input to a number and round it to `x` decimals. - Filter `timestamp_local` will convert an UNIX timestamp to local time/data. - Filter `timestamp_utc` will convert an UNIX timestamp to UTC time/data. - Filter `timestamp_custom(format_string, local_boolean)` will convert an UNIX timestamp to a custom format, the use of a local timestamp is default, supporting [Python format options](https://docs.python.org/3/library/time.html#time.strftime). -- Filter `max` will obtain the larget item in a sequence. +- Filter `max` will obtain the largest item in a sequence. - Filter `min` will obtain the smallest item in a sequence. +- Filter `regex_match(string, find, ignorecase=FALSE)` will match the find expression at the beginning of the string using regex. +- Filter `regex_search(string, find, ignorecase=FALSE)` will match the find expression anywhere in the string using regex. +- Filter `regex_replace(string, find='', replace='', ignorecase=False)` will replace the find expression with the replace string using regex. +- Filter `regex_findall_index(string, find='', index=0, ignorecase=False)` will find all regex matches of find in string and return the match at index (findall returns an array of matches). -[strp-format]: https://docs.python.org/3.4/library/datetime.html#strftime-and-strptime-behavior +[strp-format]: https://docs.python.org/3.6/library/datetime.html#strftime-and-strptime-behavior

If your template uses an `entity_id` that begins with a number (example: `states.device_tracker.2008_gmc`) you must use a bracket syntax to avoid errors caused by rendering the `entity_id` improperly. In the example given, the correct syntax for the device tracker would be: `states.device_tracker['2008_gmc']` @@ -114,7 +126,7 @@ The next two statements result in same value if state exists. The second one wil ### {% linkable_title Attributes %} -Print an attribute if state is defined +Print an attribute if state is defined. Both will return the same thing but the last one you can specify entity_id from a variable. ```text {% raw %}{% if states.device_tracker.paulus %} @@ -124,6 +136,18 @@ Print an attribute if state is defined {% endif %}{% endraw %} ``` +With strings + +```text +{% raw %}{% set tracker_name = "paulus"%} + +{% if states("device_tracker." + tracker_name) != "unknown" %} + {{ state_attr("device_tracker." + tracker_name, "battery")}} +{% else %} + ?? +{% endif %}{% endraw %} +``` + ### {% linkable_title Sensor states %} Print out a list of all the sensor states. @@ -189,7 +213,7 @@ Closest to an entity: {{ closest(states.zone.school, 'group.children') }}{% endr Since closest returns a state, we can combine it with distance too. ```text -{% raw %}{{ closest(states).name }} is {{ distance(closest(states)) }} meters away.{% endraw %} +{% raw %}{{ closest(states).name }} is {{ distance(closest(states)) }} kilometers away.{% endraw %} ``` ## {% linkable_title Processing incoming data %} @@ -257,6 +281,10 @@ The following overview contains a couple of options to get the needed values: {% raw %}{{ float(value_json) * (2**10) }}{% endraw %} {% raw %}{{ value_json | log }}{% endraw %} {% raw %}{{ log(1000, 10) }}{% endraw %} +{% raw %}{{ sin(pi / 2) }}{% endraw %} +{% raw %}{{ cos(tau) }}{% endraw %} +{% raw %}{{ tan(pi) }}{% endraw %} +{% raw %}{{ sqrt(e) }}{% endraw %} # Timestamps {% raw %}{{ value_json.tst | timestamp_local }}{% endraw %} diff --git a/source/_docs/configuration/troubleshooting.markdown b/source/_docs/configuration/troubleshooting.markdown index f1b88fe876e..0d867a2622c 100644 --- a/source/_docs/configuration/troubleshooting.markdown +++ b/source/_docs/configuration/troubleshooting.markdown @@ -20,7 +20,7 @@ Whenever a component or configuration option results in a warning, it will be st When a component does not show up, many different things can be the case. Before you try any of these steps, make sure to look at the `home-assistant.log` file and see if there are any errors related to your component you are trying to set up. -If you have incorrect entries in your configuration files you can use the `check_config` script to assist in identifying them: `hass --script check_config`. +If you have incorrect entries in your configuration files you can use the [`check_config`](/docs/tools/check_config/) script to assist in identifying them: `hass --script check_config`. If you need to provide the path for your configuration you can do this using the `-c` argument like this: `hass --script check_config -c /path/to/your/config/dir`. #### {% linkable_title Problems with the configuration %} diff --git a/source/_docs/configuration/yaml.markdown b/source/_docs/configuration/yaml.markdown index 9398ec30bdb..68503dab96a 100644 --- a/source/_docs/configuration/yaml.markdown +++ b/source/_docs/configuration/yaml.markdown @@ -93,3 +93,15 @@ lights: !include lights.yaml ``` More information about this feature can also be found at [splitting configuration](/docs/configuration/splitting_configuration/). + +## {% linkable_title Common Issues %} + +### {% linkable_title found character '\t' %} + +If you see the following message: + +``` +found character '\t' that cannot start any token +``` + +This means that you've mistakenly entered a tab character, instead of spaces. diff --git a/source/_docs/ecosystem/apache.markdown b/source/_docs/ecosystem/apache.markdown index ae0c1925114..92c27eb51a7 100644 --- a/source/_docs/ecosystem/apache.markdown +++ b/source/_docs/ecosystem/apache.markdown @@ -35,10 +35,10 @@ To be able to access to your Home Assistant instance by using https://home.examp ServerName home.example.org ProxyPreserveHost On ProxyRequests off - ProxyPass / http://localhost:8123/ - ProxyPassReverse / http://localhost:8123/ ProxyPass /api/websocket ws://localhost:8123/api/websocket ProxyPassReverse /api/websocket ws://localhost:8123/api/websocket + ProxyPass / http://localhost:8123/ + ProxyPassReverse / http://localhost:8123/ RewriteEngine on RewriteCond %{HTTP:Upgrade} =websocket [NC] diff --git a/source/_docs/ecosystem/appdaemon.markdown b/source/_docs/ecosystem/appdaemon.markdown index e2a8d23d68f..f327433108d 100755 --- a/source/_docs/ecosystem/appdaemon.markdown +++ b/source/_docs/ecosystem/appdaemon.markdown @@ -58,7 +58,7 @@ This is also fairly easy to achieve with Home Assistant automations, but we are Our next example is to turn on a light when motion is detected and it is dark, and turn it off after a period of time. This time, the `initialize()` function registers a callback on a state change (of the motion sensor) rather than a specific time. We tell AppDaemon that we are only interested in state changes where the motion detector comes on by adding an additional parameter to the callback registration - `new = "on"`. When the motion is detected, the callback function `motion()` is called, and we check whether or not the sun has set using a built-in convenience function: `sun_down()`. Next, we turn the light on with `turn_on()`, then set a timer using `run_in()` to turn the light off after 60 seconds, which is another call to the scheduler to execute in a set time from now, which results in `AppDaemon` calling `light_off()` 60 seconds later using the `turn_off()` call to actually turn the light off. This is still pretty simple in code terms: ```python -import homeassistant.appapi as appapi +import appdaemon.appapi as appapi class FlashyMotionLights(appapi.AppDaemon): @@ -76,10 +76,10 @@ class FlashyMotionLights(appapi.AppDaemon): This is starting to get a little more complex in Home Assistant automations, requiring an automation rule and two separate scripts. -Now let's extend this with a somewhat artificial example to show something that is simple in AppDaemon but very difficult if not impossible using automations. Let's warn someone inside the house that there has been motion outside by flashing a lamp on and off ten times. We are reacting to the motion as before by turning on the light and setting a timer to turn it off again, but in addition, we set a 1-second timer to run `flash_warning()`, which, when called, toggles the inside light and sets another timer to call itself a second later. To avoid re-triggering forever, it keeps a count of how many times it has been activated and bales out after ten iterations. +Now let's extend this with a somewhat artificial example to show something that is simple in AppDaemon but very difficult if not impossible using automations. Let's warn someone inside the house that there has been motion outside by flashing a lamp on and off ten times. We are reacting to the motion as before by turning on the light and setting a timer to turn it off again, but in addition, we set a 1-second timer to run `flash_warning()`, which, when called, toggles the inside light and sets another timer to call itself a second later. To avoid re-triggering forever, it keeps a count of how many times it has been activated and bails out after ten iterations. ```python -import homeassistant.appapi as appapi +import appdaemon.appapi as appapi class MotionLights(appapi.AppDaemon): @@ -107,4 +107,4 @@ Of course, if I wanted to make this App or its predecessor reusable, I would hav In addition, Apps can write to `AppDaemon`'s log files, and there is a system of constraints that allows you to control when and under what circumstances Apps and callbacks are active to keep the logic clean and simple. -For full installation instructions, see the [AppDaemon Project Documentation pages](http://appdaemon.readthedocs.io/en/latest/). +For full installation instructions, see the [AppDaemon Project Documentation pages](http://appdaemon.readthedocs.io/en/stable/). diff --git a/source/_docs/ecosystem/appdaemon/api.markdown b/source/_docs/ecosystem/appdaemon/api.markdown index 1bc4daacb34..923505b262a 100755 --- a/source/_docs/ecosystem/appdaemon/api.markdown +++ b/source/_docs/ecosystem/appdaemon/api.markdown @@ -22,13 +22,13 @@ import homeassistant.appapi as appapi class MotionLights(appapi.AppDaemon): ``` -When configured as an app in the config file (more on that later) the lifecycle of the App begins. It will be instantiated as an object by AppDaemon, and immediately, it will have a call made to it's `initialize()` function - this function must appear as part of every app: +When configured as an app in the config file (more on that later) the lifecycle of the App begins. It will be instantiated as an object by AppDaemon, and immediately, it will have a call made to its `initialize()` function - this function must appear as part of every app: ```python def initialize(self): ``` -The initialize function allows the app to register any callbacks it might need for responding to state changes, and also any setup activities. When the `initialize()` function returns, the App will be dormant until any of it's callbacks are activated. +The initialize function allows the app to register any callbacks it might need for responding to state changes, and also any setup activities. When the `initialize()` function returns, the App will be dormant until any of its callbacks are activated. There are several circumstances under which `initialize()` might be called: @@ -39,7 +39,7 @@ There are several circumstances under which `initialize()` might be called: - Following a change in the status of Daylight Savings Time - Following a restart of Home Assistant -In every case, the App is responsible for recreating any state it might need as if it were the first time it was ever started. If `initialize()` is called, the app can safely assume that it is either being loaded for the first time, or that all callbacks and timers have been cancelled. In either case, the APP will need to recreate them. Depending upon the application it may be desirable for the App to establish state such as whether or not a particular light is on, within the `initialize()` function to ensure that everything is as expected or to make immediate remedial action (e.g. turn off a light that might have been left on by mistake when the app was restarted). +In every case, the App is responsible for recreating any state it might need as if it were the first time it was ever started. If `initialize()` is called, the app can safely assume that it is either being loaded for the first time, or that all callbacks and timers have been canceled. In either case, the APP will need to recreate them. Depending upon the application it may be desirable for the App to establish state such as whether or not a particular light is on, within the `initialize()` function to ensure that everything is as expected or to make immediate remedial action (e.g., turn off a light that might have been left on by mistake when the app was restarted). After the `initialize()` function is in place, the rest of the app consists of functions that are called by the various callback mechanisms, and any additional functions the user wants to add as part of the program logic. Apps are able to subscribe to 2 main classes of events: @@ -93,7 +93,7 @@ class = NewApp When AppDaemon sees the following configuration it will expect to find a class called `NewApp` defined in a module called `new.py` in the apps subdirectory. Apps can be placed at the root of the Apps directory or within a subdirectory, an arbitrary depth down - wherever the App is, as long as it is in some subdirectory of the Apps dir, or in the Apps dir itself, AppDaemon will find it. There is no need to include information about the path, just the name of the file itself (without the `.py`) is sufficient. If names in the subdirectories overlap, AppDir will pick one of them but the exact choice it will make is undefined. -When starting the system for the first time or when reloading an App or Module, the system will log the fact in it's main log. It is often the case that there is a problem with the class, maybe a syntax error or some other problem. If that is the case, details will be output to the error log allowing the user to remedy the problem and reload. +When starting the system for the first time or when reloading an App or Module, the system will log the fact in its main log. It is often the case that there is a problem with the class, maybe a syntax error or some other problem. If that is the case, details will be output to the error log allowing the user to remedy the problem and reload. ## {% linkable_title Steps to writing an App %} @@ -150,11 +150,11 @@ light = light.garage ## {% linkable_title Callback Constraints %} -Callback constraints are a feature of AppDaemon that removes the need for repetition of some common coding checks. Many Apps will wish to process their callbacks only when certain conditions are met, e.g. someone is home, and it's after sunset. These kinds of conditions crop up a lot, and use of callback constraints can significantly simplify the logic required within callbacks. +Callback constraints are a feature of AppDaemon that removes the need for repetition of some common coding checks. Many Apps will wish to process their callbacks only when certain conditions are met, e.g., someone is home, and it's after sunset. These kinds of conditions crop up a lot, and use of callback constraints can significantly simplify the logic required within callbacks. Put simply, callback constraints are one or more conditions on callback execution that can be applied to an individual App. An App's callbacks will only be executed if all of the constraints are met. If a constraint is absent it will not be checked for. -For example, the presence callback constraint can be added to an App by adding a parameter to it's configuration like this: +For example, the presence callback constraint can be added to an App by adding a parameter to its configuration like this: ```ini [some_app] @@ -194,7 +194,7 @@ constrain_input_boolean = input_boolean.enable_motion_detection,off ``` ### {% linkable_title input_select %} -The input_select constraint prevents callbacks unless the specified input_select is set to one or more of the nominated (comma separated) values. This is useful to allow certain Apps to be turned on and off according to some flag, e.g. a house mode flag. +The input_select constraint prevents callbacks unless the specified input_select is set to one or more of the nominated (comma separated) values. This is useful to allow certain Apps to be turned on and off according to some flag, e.g., a house mode flag. ```ini # Single value @@ -272,7 +272,7 @@ Any other attributes such as brightness for a lamp will only be present if the e Also bear in mind that some attributes such as brightness for a light, will not be present when the light is off. -In most cases, the attribute `state` has the most important value in it, e.g. for a light or switch this will be `on` or `off`, for a sensor it will be the value of that sensor. Many of the AppDaemon API calls and callbacks will implicitly return the value of state unless told to do otherwise. +In most cases, the attribute `state` has the most important value in it, e.g., for a light or switch this will be `on` or `off`, for a sensor it will be the value of that sensor. Many of the AppDaemon API calls and callbacks will implicitly return the value of state unless told to do otherwise. ### {% linkable_title get_state() %} @@ -294,9 +294,9 @@ All parameters are optional, and if `get_state()` is called with no parameters i ##### {% linkable_title entity %} -This is the name of an entity or device type. If just a device type is provided, e.g. `light` or `binary_sensor`, `get_state()` will return a dictionary of all devices of that type, indexed by the entity_id, containing all the state for each entity. +This is the name of an entity or device type. If just a device type is provided, e.g., `light` or `binary_sensor`, `get_state()` will return a dictionary of all devices of that type, indexed by the entity_id, containing all the state for each entity. -If a fully qualified `entity_id` is provided, `get_state()` will return the state attribute for that entity, e.g. `on` or `off` for a light. +If a fully qualified `entity_id` is provided, `get_state()` will return the state attribute for that entity, e.g., `on` or `off` for a light. ##### {% linkable_title attribute %} @@ -345,11 +345,11 @@ set_state(entity_id, **kwargs) ##### {% linkable_title entity_id %} -Entity id for which the state is to be set, e.g. `light.office_1`. +Entity id for which the state is to be set, e.g., `light.office_1`. ##### {% linkable_title values %} -A list of keyword values to be changed or added to the entities state. e.g. `state = "off"`. Note that any optional attributes such as colors for bulbs etc, need to reside in a dictionary called `attributes`; see the example. +A list of keyword values to be changed or added to the entities state. e.g., `state = "off"`. Note that any optional attributes such as colors for bulbs etc, need to reside in a dictionary called `attributes`; see the example. #### {% linkable_title Examples %} @@ -461,7 +461,7 @@ handle = listen_state(callback, entity = None, **kwargs) #### {% linkable_title Returns %} -A unique identifier that can be used to cancel the callback if required. Since variables created within object methods are local to the function they are created in, and in all likelihood the cancellation will be invoked later in a different function, it is recommended that handles are stored in the object namespace, e.g. `self.handle`. +A unique identifier that can be used to cancel the callback if required. Since variables created within object methods are local to the function they are created in, and in all likelihood the cancellation will be invoked later in a different function, it is recommended that handles are stored in the object namespace, e.g., `self.handle`. #### {% linkable_title Parameters %} @@ -473,9 +473,9 @@ Function to be invoked when the requested state change occurs. It must conform t ##### {% linkable_title entity %} -This is the name of an entity or device type. If just a device type is provided, e.g. `light` or `binary_sensor`, `listen_state()` will subscribe to state changes of all devices of that type. If a fully qualified `entity_id` is provided, `listen_state()` will listen for state changes for just that entity. +This is the name of an entity or device type. If just a device type is provided, e.g., `light` or `binary_sensor`, `listen_state()` will subscribe to state changes of all devices of that type. If a fully qualified `entity_id` is provided, `listen_state()` will listen for state changes for just that entity. -When called, AppDaemon will supply the callback function, in old and new, with the state attribute for that entity, e.g. `on` or `off` for a light. +When called, AppDaemon will supply the callback function, in old and new, with the state attribute for that entity, e.g., `on` or `off` for a light. ##### {% linkable_title attribute (optional) %} @@ -539,7 +539,7 @@ self.handle = self.listen_state(self.my_callback, "light.office_1", new = "on", ### {% linkable_title cancel_listen_state() %} -Cancel a `listen_state()` callback. This will mean that the App will no longer be notified for the specific state change that has been cancelled. Other state changes will continue to be monitored. +Cancel a `listen_state()` callback. This will mean that the App will no longer be notified for the specific state change that has been canceled. Other state changes will continue to be monitored. #### {% linkable_title Synopsis %} @@ -565,7 +565,7 @@ self.cancel_listen_state(self.office_light_handle) ### {% linkable_title info_listen_state() %} -Get information on state a callback from it's handle. +Get information on state a callback from its handle. #### {% linkable_title Synopsis %} @@ -909,7 +909,7 @@ self.cancel_timer(handle) ### {% linkable_title info_timer() %} -Get information on a scheduler event from it's handle. +Get information on a scheduler event from its handle. #### {% linkable_title Synopsis %} @@ -944,16 +944,16 @@ All of the scheduler calls above support 2 additional optional arguments, `rando - `random_start` - start of range of the random time - `random_end` - end of range of the random time -`random_start` must always be numerically lower than `random_end`, they can be negative to denote a random offset before and event, or positive to denote a random offset after an event. The event would be a an absolute or relative time or sunrise/sunset depending on which scheduler call you use and these values affect the base time by the spcified amount. If not specified, they will default to `0`. +`random_start` must always be numerically lower than `random_end`, they can be negative to denote a random offset before and event, or positive to denote a random offset after an event. The event would be an absolute or relative time or sunrise/sunset depending on which scheduler call you use and these values affect the base time by the spcified amount. If not specified, they will default to `0`. For example: ```python -# Run a callback in 2 minutes minus a random number of seconds between 0 and 60, e.g. run between 60 and 120 seconds from now +# Run a callback in 2 minutes minus a random number of seconds between 0 and 60, e.g., run between 60 and 120 seconds from now self.handle = self.run_in(callback, 120, random_start = -60, **kwargs) -# Run a callback in 2 minutes plus a random number of seconds between 0 and 60, e.g. run between 120 and 180 seconds from now +# Run a callback in 2 minutes plus a random number of seconds between 0 and 60, e.g., run between 120 and 180 seconds from now self.handle = self.run_in(callback, 120, random_end = 60, **kwargs) -# Run a callback in 2 minutes plus or minus a random number of seconds between 0 and 60, e.g. run between 60 and 180 seconds from now +# Run a callback in 2 minutes plus or minus a random number of seconds between 0 and 60, e.g., run between 60 and 180 seconds from now self.handle = self.run_in(callback, 120, random_start = -60, random_end = 60, **kwargs) ``` @@ -1150,11 +1150,11 @@ None ##### {% linkable_title service %} -The service name, e.g. `light.turn_on`. +The service name, e.g., `light.turn_on`. ##### {% linkable_title \*\*kwargs %} -Each service has different parameter requirements. This argument allows you to specify a comma separated list of keyword value pairs, e.g. `entity_id = light.office_1`. These parameters will be different for every service and can be discovered using the developer tools. Most if not all service calls require an `entity_id` however, so use of the above example is very common with this call. +Each service has different parameter requirements. This argument allows you to specify a comma separated list of keyword value pairs, e.g., `entity_id = light.office_1`. These parameters will be different for every service and can be discovered using the developer tools. Most if not all service calls require an `entity_id` however, so use of the above example is very common with this call. #### {% linkable_title Examples %} @@ -1187,7 +1187,7 @@ None ##### {% linkable_title entity_id %} -Fully qualified entity_id of the thing to be turned on, e.g. `light.office_lamp` or ```scene.downstairs_on``` +Fully qualified entity_id of the thing to be turned on, e.g., `light.office_lamp` or ```scene.downstairs_on``` ##### {% linkable_title \*\*kwargs %} @@ -1219,7 +1219,7 @@ None ##### {% linkable_title entity_id %} -Fully qualified entity_id of the thing to be turned off, e.g. `light.office_lamp` or `scene.downstairs_on`. +Fully qualified entity_id of the thing to be turned off, e.g., `light.office_lamp` or `scene.downstairs_on`. #### {% linkable_title Examples %} @@ -1246,7 +1246,7 @@ None ##### {% linkable_title entity_id %} -Fully qualified entity_id of the thing to be toggled, e.g. `light.office_lamp` or `scene.downstairs_on`. +Fully qualified entity_id of the thing to be toggled, e.g., `light.office_lamp` or `scene.downstairs_on`. #### {% linkable_title Examples %} @@ -1273,7 +1273,7 @@ None ##### {% linkable_title entity_id %} -Fully qualified entity_id of the input_number to be changed, e.g. `input_number.alarm_hour`. +Fully qualified entity_id of the input_number to be changed, e.g., `input_number.alarm_hour`. ##### {% linkable_title value %} @@ -1303,7 +1303,7 @@ None ##### {% linkable_title entity_id %} -Fully qualified entity_id of the input_select to be changed, e.g. `input_select.mode`. +Fully qualified entity_id of the input_select to be changed, e.g., `input_select.mode`. ##### {% linkable_title value %} @@ -1317,7 +1317,7 @@ self.select_option("input_select.mode", "Day") ### {% linkable_title notify() %} -This is a convenience function for the `notify.notify` service. It will send a notification to your defualt notification service. If you have more than one, use `call_service()` to call the specific notification service you require instead. +This is a convenience function for the `notify.notify` service. It will send a notification to your default notification service. If you have more than one, use `call_service()` to call the specific notification service you require instead. #### {% linkable_title Synopsis %} @@ -1385,7 +1385,7 @@ A standard Python object reference. #### {% linkable_title event_name %} -Name of the event that was called, e.g. `call_service`. +Name of the event that was called, e.g., `call_service`. #### {% linkable_title data %} @@ -1422,7 +1422,7 @@ Name of the event to subscribe to. Can be a standard Home Assistant event such a One or more keyword value pairs representing App specific parameters to supply to the callback. If the keywords match values within the event data, they will act as filters, meaning that if they don't match the values, the callback will not fire. -As an example of this, a Minimote controller when activated will generate an event called `zwave.scene_activated`, along with 2 pieces of data that are specific to the event - `entity_id` and `scene`. If you include keyword values for either of those, the values supplied to the `listen_event()1 call must match the values in the event or it will not fire. If the keywords do not match any of the data in the event they are simply ignored. +As an example of this, a Minimote controller when activated will generate an event called `zwave.scene_activated`, along with 2 pieces of data that are specific to the event - `entity_id` and `scene`. If you include keyword values for either of those, the values supplied to the `listen_event()` call must match the values in the event or it will not fire. If the keywords do not match any of the data in the event they are simply ignored. Filtering will work with any event type, but it will be necessary to figure out the data associated with the event to understand what values can be filtered on. This can be achieved by examining Home Assistant's logfiles when the event fires. @@ -1463,7 +1463,7 @@ self.cancel_listen_event(handle) ### {% linkable_title info_listen_event() %} -Get information on an event callback from it's handle. +Get information on an event callback from its handle. #### {% linkable_title Synopsis %} @@ -1528,13 +1528,13 @@ def service(self, event_name, data): #### {% linkable_title event_name %} -The name of the event that caused the callback, e.g. `"MODE_CHANGE"` or `call_service`. +The name of the event that caused the callback, e.g., `"MODE_CHANGE"` or `call_service`. #### {% linkable_title data %} A dictionary containing any additional information associated with the event. -### {% linkable_title Use of Events for Signalling between Home Assistant and AppDaemon %} +### {% linkable_title Use of Events for Signaling between Home Assistant and AppDaemon %} Home Assistant allows for the creation of custom events and existing components can send and receive them. This provides a useful mechanism for signaling back and forth between Home Assistant and AppDaemon. For instance, if you would like to create a UI Element to fire off some code in Home Assistant, all that is necessary is to create a script to fire a custom event, then subscribe to that event in AppDaemon. The script would look something like this: @@ -1552,7 +1552,7 @@ The custom event `MODE_CHANGE` would be subscribed to with: self.listen_event(self.mode_event, "MODE_CHANGE") ``` -Home Assistant can send these events in a variety of other places - within automations, and also directly from Alexa intents. Home Assistant can also listen for custom events with it's automation component. This can be used to signal from AppDaemon code back to Home Assistant. Here is a sample automation: +Home Assistant can send these events in a variety of other places - within automations, and also directly from Alexa intents. Home Assistant can also listen for custom events with its automation component. This can be used to signal from AppDaemon code back to Home Assistant. Here is a sample automation: ```yaml automation: @@ -1617,7 +1617,7 @@ A string representing the location of the tracker. ##### {% linkable_title tracker_id %} -Fully qualified entity_id of the device tracker to query, e.g. `device_tracker.andrew`. +Fully qualified entity_id of the device tracker to query, e.g., `device_tracker.andrew`. #### {% linkable_title Examples %} @@ -1701,7 +1701,7 @@ time() #### {% linkable_title Returns %} -A localised Python time object representing the current AppDaemon time. +A localized Python time object representing the current AppDaemon time. #### {% linkable_title Parameters %} @@ -1725,7 +1725,7 @@ date() #### {% linkable_title Returns %} -A localised Python time object representing the current AppDaemon date. +A localized Python time object representing the current AppDaemon date. #### {% linkable_title Parameters %} @@ -1749,7 +1749,7 @@ datetime() #### {% linkable_title Returns %} -A localised Python datetime object representing the current AppDaemon date and time. +A localized Python datetime object representing the current AppDaemon date and time. #### {% linkable_title Parameters %} @@ -1764,7 +1764,7 @@ now = self.datetime() ### {% linkable_title convert_utc() %} -Home Assistant provides timestamps of several different sorts that may be used to gain additional insight into state changes. These timestamps are in UTC and are coded as ISO 8601 Combined date and time strings. `convert_utc()` will accept one of these strings and convert it to a localised Python datetime object representing the timestamp +Home Assistant provides timestamps of several different sorts that may be used to gain additional insight into state changes. These timestamps are in UTC and are coded as ISO 8601 Combined date and time strings. `convert_utc()` will accept one of these strings and convert it to a localized Python datetime object representing the timestamp #### {% linkable_title Synopsis %} @@ -1774,7 +1774,7 @@ convert_utc(utc_string) #### {% linkable_title Returns %} -`convert_utc(utc_string)` returns a localised Python datetime object representing the timestamp. +`convert_utc(utc_string)` returns a localized Python datetime object representing the timestamp. #### {% linkable_title Parameters %} @@ -1871,7 +1871,7 @@ self.log("{} ({}) is {}".format(tracker, self.friendly_name(tracker), self.get_ ### {% linkable_title split_entity() %} -`split_entity()` will take a fully qualified entity id of the form `light.hall_light` and split it into 2 values, the device and the entity, e.g. `light` and `hall_light`. +`split_entity()` will take a fully qualified entity id of the form `light.hall_light` and split it into 2 values, the device and the entity, e.g., `light` and `hall_light`. #### {% linkable_title Synopsis %} @@ -1925,7 +1925,7 @@ MyApp.turn_light_on() ### {% linkable_title split_device_list() %} -`split_device_list()` will take a comma separated list of device types (or anything else for that matter) and return them as an iterable list. This is intended to assist in use cases where the App takes a list of entities from an argument, e.g. a list of sensors to monitor. If only one entry is provided, an iterable list will still be returned to avoid the need for special processing. +`split_device_list()` will take a comma separated list of device types (or anything else for that matter) and return them as an iterable list. This is intended to assist in use cases where the App takes a list of entities from an argument, e.g., a list of sensors to monitor. If only one entry is provided, an iterable list will still be returned to avoid the need for special processing. #### {% linkable_title Synopsis %} @@ -1941,7 +1941,7 @@ A list of split devices with 1 or more entries. ```python for sensor in self.split_device_list(self.args["sensors"]): - do something for each sensor, e.g. make a state subscription + do something for each sensor, e.g., make a state subscription ``` @@ -2058,7 +2058,7 @@ OK, time travel sadly isn't really possible but it can be very useful when testi ### {% linkable_title Choosing a Start Time %} -Internally, AppDaemon keeps track of it's own time relative to when it was started. This make is possible to start AppDaemon with a different start time and date to the current time. For instance to test that sunset App, start AppDaemon at a time just before sunset and see if it works as expected. To do this, simply use the "-s" argument on AppDaemon's command line. e,g,: +Internally, AppDaemon keeps track of its own time relative to when it was started. This make is possible to start AppDaemon with a different start time and date to the current time. For instance to test that sunset App, start AppDaemon at a time just before sunset and see if it works as expected. To do this, simply use the "-s" argument on AppDaemon's command line. e,g,: ```bash $ appdaemon -s "2016-06-06 19:16:00" @@ -2072,7 +2072,7 @@ Note the timestamps in the log - AppDaemon believes it is now just before sunset ### {% linkable_title Speeding things up %} -Some Apps need to run for periods of a day or two for you to test all aspects. This can be time consuming, but Time Travel can also help here in two ways. The first is by speeding up time. To do this, simply use the `-t` option on the command line. This specifies the amount of time a second lasts while time travelling. The default of course is 1 second, but if you change it to `0.1` for instance, AppDaemon will work 10x faster. If you set it to `0`, AppDaemon will work as fast as possible and, depending in your hardware, may be able to get through an entire day in a matter of minutes. Bear in mind however, due to the threaded nature of AppDaemon, when you are running with `-t 0` you may see actual events firing a little later than expected as the rest of the system tries to keep up with the timer. To set the tick time, start AppDaemon as follows: +Some Apps need to run for periods of a day or two for you to test all aspects. This can be time consuming, but Time Travel can also help here in two ways. The first is by speeding up time. To do this, simply use the `-t` option on the command line. This specifies the amount of time a second lasts while time traveling. The default of course is 1 second, but if you change it to `0.1` for instance, AppDaemon will work 10x faster. If you set it to `0`, AppDaemon will work as fast as possible and, depending in your hardware, may be able to get through an entire day in a matter of minutes. Bear in mind however, due to the threaded nature of AppDaemon, when you are running with `-t 0` you may see actual events firing a little later than expected as the rest of the system tries to keep up with the timer. To set the tick time, start AppDaemon as follows: ```bash $ appdaemon -t 0.1 @@ -2105,4 +2105,4 @@ $ appdaemon -s "2016-06-06 19:16:00" -s "2016-06-06 20:16:00" -t 0 ### {% linkable_title A Note on Times %} -Some Apps you write may depend on checking times of events relative to the current time. If you are time travelling this will not work if you use standard python library calls to get the current time and date etc. For this reason, always use the AppDamon supplied `time()`, `date()` and `datetime()` calls, documented earlier. These calls will consult with AppDaemon's internal time rather than the actual time and give you the correct values. +Some Apps you write may depend on checking times of events relative to the current time. If you are time traveling this will not work if you use standard python library calls to get the current time and date etc. For this reason, always use the AppDamon supplied `time()`, `date()` and `datetime()` calls, documented earlier. These calls will consult with AppDaemon's internal time rather than the actual time and give you the correct values. diff --git a/source/_docs/ecosystem/appdaemon/reboot.markdown b/source/_docs/ecosystem/appdaemon/reboot.markdown index 1ccdd8773a9..2eba9f75a6c 100644 --- a/source/_docs/ecosystem/appdaemon/reboot.markdown +++ b/source/_docs/ecosystem/appdaemon/reboot.markdown @@ -10,4 +10,4 @@ footer: true redirect_from: /ecosystem/appdaemon/reboot/ --- -To run `AppDaemon` at reboot, I have provided a sample init script in the `./scripts` directory. These have been tested on a Raspberry PI - your mileage may vary on other systems. There is also a sample Systemd script. +To run `AppDaemon` at reboot, I have provided a sample init script in the `./scripts` directory. These have been tested on a Raspberry Pi - your mileage may vary on other systems. There is also a sample Systemd script. diff --git a/source/_docs/ecosystem/appdaemon/tutorial.markdown b/source/_docs/ecosystem/appdaemon/tutorial.markdown index 6eee88e98b0..28f325dfa08 100755 --- a/source/_docs/ecosystem/appdaemon/tutorial.markdown +++ b/source/_docs/ecosystem/appdaemon/tutorial.markdown @@ -12,7 +12,7 @@ redirect_from: /ecosystem/appdaemon/tutorial/ ## {% linkable_title Another Take on Automation %} -If you haven't yet read Paulus' excellent Blog entry on [Perfect Home Automation](https://home-assistant.io/blog/2016/01/19/perfect-home-automation/) I would encourage you to take a look. As a veteran of several Home Automation systems with varying degrees success, it was this article more than anything else that convinced me that Home Assistant had the right philosophy behind it and was on the right track. One of the most important points made is that being able to control your lights from your phone, 9 times out of 10 is harder than using a lightswitch - where Home Automation really comes into its own is when you start removing the need to use a phone or the switch - the "Automation" in Home Automation. A surprisingly large number of systems out there miss this essential point and have limited abilities to automate anything which is why a robust and open system such as Home Assistant is such an important part of the equation in bring this all together in the vast and chaotic ecosystem that is the "Internet of Things". +If you haven't yet read Paulus' excellent Blog entry on [Perfect Home Automation](/blog/2016/01/19/perfect-home-automation/) I would encourage you to take a look. As a veteran of several Home Automation systems with varying degrees success, it was this article more than anything else that convinced me that Home Assistant had the right philosophy behind it and was on the right track. One of the most important points made is that being able to control your lights from your phone, 9 times out of 10 is harder than using a lightswitch - where Home Automation really comes into its own is when you start removing the need to use a phone or the switch - the "Automation" in Home Automation. A surprisingly large number of systems out there miss this essential point and have limited abilities to automate anything which is why a robust and open system such as Home Assistant is such an important part of the equation in bring this all together in the vast and chaotic ecosystem that is the "Internet of Things". So given the importance of Automation, what should Automation allow us to do? I am a pragmatist at heart so I judge individual systems by the ease of accomplishing a few basic but representative tasks: @@ -23,14 +23,14 @@ So given the importance of Automation, what should Automation allow us to do? I - Is it open and expandable? - Does it run locally without any reliance on the cloud? -In my opinion, Home Assistant accomplishes the majority of these very well with a combination of Automations, Scripts and Templates, and it's Restful API. +In my opinion, Home Assistant accomplishes the majority of these very well with a combination of Automations, Scripts and Templates, and its Restful API. So why `AppDaemon`? AppDaemon is not meant to replace Home Assistant Automations and Scripts, rather complement them. For a lot of things, automations work well and can be very succinct. However, there is a class of more complex automations for which they become harder to use, and appdeamon then comes into its own. It brings quite a few things to the table: - New paradigm - some problems require a procedural and/or iterative approach, and `AppDaemon` Apps are a much more natural fit for this. Recent enhancements to Home Assistant scripts and templates have made huge strides, but for the most complex scenarios, Apps can do things that Automations can't - Ease of use - AppDaemon's API is full of helper functions that make programming as easy and natural as possible. The functions and their operation are as "Pythonic" as possible, experienced Python programmers should feel right at home. -- Reuse - write a piece of code once and instantiate it as an app as many times as you need with different parameters e.g. a motion light program that you can use in 5 different places around your home. The code stays the same, you just dynamically add new instances of it in the config file -- Dynamic - AppDaemon has been designed from the start to enable the user to make changes without requiring a restart of Home Assistant, thanks to it's loose coupling. However, it is better than that - the user can make changes to code and AppDaemon will automatically reload the code, figure out which Apps were using it and restart them to use the new code with out the need to restart `AppDaemon` itself. It is also possible to change parameters for an individual or multiple apps and have them picked up dynamically, and for a final trick, removing or adding apps is also picked up dynamically. Testing cycles become a lot more efficient as a result. +- Reuse - write a piece of code once and instantiate it as an app as many times as you need with different parameters e.g., a motion light program that you can use in 5 different places around your home. The code stays the same, you just dynamically add new instances of it in the config file +- Dynamic - AppDaemon has been designed from the start to enable the user to make changes without requiring a restart of Home Assistant, thanks to its loose coupling. However, it is better than that - the user can make changes to code and AppDaemon will automatically reload the code, figure out which Apps were using it and restart them to use the new code with out the need to restart `AppDaemon` itself. It is also possible to change parameters for an individual or multiple apps and have them picked up dynamically, and for a final trick, removing or adding apps is also picked up dynamically. Testing cycles become a lot more efficient as a result. - Complex logic - Python's If/Else constructs are clearer and easier to code for arbitrarily complex nested logic - Durable variables and state - variables can be kept between events to keep track of things like the number of times a motion sensor has been activated, or how long it has been since a door opened - All the power of Python - use any of Python's libraries, create your own modules, share variables, refactor and re-use code, create a single app to do everything, or multiple apps for individual tasks - nothing is off limits! @@ -43,22 +43,38 @@ The best way to show what AppDaemon does is through a few simple examples. ### {% linkable_title Sunrise/Sunset Lighting %} -Lets start with a simple App to turn a light on every night at sunset and off every morning at sunrise. Every App when first started will have its `initialize()` function called which gives it a chance to register a callback for AppDaemons's scheduler for a specific time. In this case we are using `run_at_sunrise()` and `run_at_sunset()` to register 2 separate callbacks. The argument `0` is the number of seconds offset from sunrise or sunset and can be negative or positive. For complex intervals it can be convenient to use Python's `datetime.timedelta` class for calculations. When sunrise or sunset occurs, the appropriate callback function, `sunrise_cb()` or `sunset_cb()` is called which then makes a call to Home Assistant to turn the porch light on or off by activating a scene. The variables `args["on_scene"]` and `args["off_scene"]` are passed through from the configuration of this particular App, and the same code could be reused to activate completely different scenes in a different version of the App. +Lets start with a simple App to turn a light on every night fifteen +minutes (900 seconds) before sunset and off every morning at sunrise. +Every App when first started will have its ``initialize()`` function +called which gives it a chance to register a callback for AppDaemons's +scheduler for a specific time. In this case we are using +`run_at_sunrise()` and `run_at_sunset()` to register 2 separate +callbacks. The named argument `offset` is the number of seconds offset +from sunrise or sunset and can be negative or positive (it defaults to +zero). For complex intervals it can be convenient to use Python's +`datetime.timedelta` class for calculations. In the example below, +when sunrise or just before sunset occurs, the appropriate callback +function, `sunrise_cb()` or `before_sunset_cb()` is called which +then makes a call to Home Assistant to turn the porch light on or off by +activating a scene. The variables `args["on_scene"]` and +`args["off_scene"]` are passed through from the configuration of this +particular App, and the same code could be reused to activate completely +different scenes in a different version of the App. ```python -import homeassistant.appapi as appapi + import appdaemon.plugins.hass.hassapi as hass -class OutsideLights(appapi.AppDaemon): + class OutsideLights(hass.Hass): - def initialize(self): - self.run_at_sunrise(self.sunrise_cb, 0) - self.run_at_sunset(self.sunset_cb, 0) - - def sunrise_cb(self, kwargs): - self.turn_on(self.args["off_scene"]) + def initialize(self): + self.run_at_sunrise(self.sunrise_cb) + self.run_at_sunset(self.before_sunset_cb, offset=-900) - def sunset_cb(self, kwargs): - self.turn_on(self.args["on_scene"]) + def sunrise_cb(self, kwargs): + self.turn_on(self.args["off_scene"]) + + def before_sunset_cb(self, kwargs): + self.turn_on(self.args["on_scene"]) ``` @@ -75,12 +91,12 @@ class FlashyMotionLights(appapi.AppDaemon): def initialize(self): self.listen_state(self.motion, "binary_sensor.drive", new = "on") - + def motion(self, entity, attribute, old, new, kwargs): if self.sun_down(): self.turn_on("light.drive") self.run_in(self.light_off, 60) - + def light_off(self, kwargs): self.turn_off("light.drive") ``` @@ -96,17 +112,17 @@ class MotionLights(appapi.AppDaemon): def initialize(self): self.listen_state(self.motion, "binary_sensor.drive", new = "on") - + def motion(self, entity, attribute, old, new, kwargs): if self.self.sun_down(): self.turn_on("light.drive") self.run_in(self.light_off, 60) self.flashcount = 0 self.run_in(self.flash_warning, 1) - + def light_off(self, kwargs): self.turn_off("light.drive") - + def flash_warning(self, kwargs): self.toggle("light.living_room") self.flashcount += 1 @@ -122,7 +138,7 @@ I have spent the last few weeks moving all of my (fairly complex) automations ov Some people will maybe look at all of this and say "what use is this, I can already do all of this", and that is fine, as I said this is an alternative not a replacement, but I am hopeful that for some users this will seem a more natural, powerful and nimble way of building potentially very complex automations. -If this has whet your appetite, feel free to give it a try. +If this has whet your appetite, feel free to give it a try. Happy Automating! diff --git a/source/_docs/ecosystem/backup/backup_dropbox.markdown b/source/_docs/ecosystem/backup/backup_dropbox.markdown index e0d73368990..6baa2cbc9a0 100644 --- a/source/_docs/ecosystem/backup/backup_dropbox.markdown +++ b/source/_docs/ecosystem/backup/backup_dropbox.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Configuration Backup to Dropbox" -description: "Instructions how backup your Home Assistant configuration to Dropbox" +description: "Instructions on how backup your Home Assistant configuration to Dropbox" date: 2017-04-24 18:00 sidebar: true comments: false @@ -10,7 +10,7 @@ footer: true redirect_from: /cookbook/dropboxbackup/ --- -Backing up and regularly syncing your Home Assistant configuration to [Dropbox](http://dropbox.com) similar to [Github Backup](https://home-assistant.io/docs/ecosystem/backup/backup_github/) +Backing up and regularly syncing your Home Assistant configuration to [Dropbox](http://dropbox.com) similar to [Github Backup](/docs/ecosystem/backup/backup_github/) ### {% linkable_title Requirements %} diff --git a/source/_docs/ecosystem/backup/backup_github.markdown b/source/_docs/ecosystem/backup/backup_github.markdown index 8c8c9ad7b35..278d3fc20cb 100644 --- a/source/_docs/ecosystem/backup/backup_github.markdown +++ b/source/_docs/ecosystem/backup/backup_github.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Configuration Backup to GitHub" -description: "Instructions how backup your Home Assistant configuration to GitHub" +description: "Instructions on how backup your Home Assistant configuration to GitHub" date: 2017-01-05 18:00 sidebar: true comments: false @@ -28,21 +28,21 @@ This will not create a full backup of your Home Assistant files or your OS. In a Some best practices to consider before putting your configuration on GitHub: -- Extensive use of [secrets.yaml](https://home-assistant.io/topics/secrets/) to hide sensitive information like usernames, passwords, device information, and location +- Extensive use of [secrets.yaml](/topics/secrets/) to hide sensitive information like usernames, passwords, device information, and location - Exclusion of some files, including `secrets.yaml` and device-specific information using a [`.gitignore`](https://git-scm.com/docs/gitignore) file - Regularly committing your configuration to GitHub to make sure that your backup is up to date - Use a README.md to document your configuration and include screenshots of your Home Assistant GUI ### {% linkable_title Step 1: Installing and Initializing Git %} -In order to put your configuration on GitHub, you must install the git package on your Home Assistant server (instructions below will work on Raspberry Pi, Ubunutu, or any Debian-based system): +In order to put your configuration on GitHub, you must install the git package on your Home Assistant server (instructions below will work on Raspberry Pi, Ubunutu, or any Debian-based system) *note: this isn't required in Hass.io, it's included as default so proceed to step 2*: ```bash $ sudo apt-get update $ sudo apt-get install git ``` -### {% linkable_title Step 2: Creating %} `.gitignore` +### {% linkable_title Step 2: Creating %} `.gitignore`

Before creating and pushing your Home Assistant configuration to GitHub, please make sure to follow the `secrets.yaml` best practice mentioned above and scrub your configuration for any passwords or sensitive information. @@ -133,7 +133,7 @@ Every time you run this script, you will be prompted for a comment to describe t [Travis CI](https://travis-ci.org) is a continuous integration testing system that runs every time the code in your repository is updated and allows you to validate that your code works on a fresh install. -- [Authorise Travis CI](https://travis-ci.org/auth) to have access to your github repos. +- [Authorize Travis CI](https://travis-ci.org/auth) to have access to your github repos. - Create the build script that travis will run to test your repo. - Create a dummy secrets.yaml for Travis. diff --git a/source/_docs/ecosystem/backup/backup_usb.markdown b/source/_docs/ecosystem/backup/backup_usb.markdown index 279c76c3bda..cc07a0b0792 100644 --- a/source/_docs/ecosystem/backup/backup_usb.markdown +++ b/source/_docs/ecosystem/backup/backup_usb.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Configuration Backup to USB drive" -description: "Instructions how backup your Home Assistant configuration to USB drive" +description: "Instructions on how backup your Home Assistant configuration to USB drive" date: 2017-04-29 08:00 sidebar: true comments: false @@ -9,11 +9,12 @@ sharing: true footer: true --- -Backing up your Home Assistant configuration to USB drive. A good plus side is that you don't need to mask all your passwords since the backup is locally at your home/residence. +This will step you through the process of setting up a backup of your Home Assistant configuration to a USB device. This is a good method if you don't want to mask all of your passwords since the backup is kept locally at your home/residence. ### {% linkable_title Requirements %} -First you need a USB drive. Once you have one you need to prepare it to be used on your device. -Once connected you want to format/work with the drive. To know what path it is in, you can check with `dmesg`. + +First, you need a USB drive. It should be formatted properly for your device and connected to your device before beginning. Any type of partition will work, but Linux filesystems are preferred so that you can set permissions. +Once connected you want to mount the drive. To find the path where it is located, you can use the `dmesg` command. ```bash # dmesg | grep sd @@ -32,16 +33,17 @@ Once connected you want to format/work with the drive. To know what path it is i [726259.209004] sd 0:0:0:0: [sda] Attached SCSI removable disk ``` -Here we see we have a drive on `/dev/sda1`. We assume you created a partition on the drive to start with. This can be any type of partition. Preferred is a Linux filesystem type so you can set permissions! +The device here is `sda` and our partition is `sda1`. So our partition is located here `/dev/sda1`. Mount the drive (as root) to `/media` ```bash -# mount /dev/sda1 /media/ +# sudo mount /dev/sda1 /media/ ``` -### {% linkable_title Prepare USB Stick %} -Change into it and create a folder called `hassbackup` and change the ownership to the user that runs Home Assistant. In my case group and user are both `homeassistant`. +### {% linkable_title Prepare the USB Device %} + +Change to the `/media` directory and create a folder called `hassbackup`. Change the ownership to the user that runs Home Assistant. In this example case, the user and group are both `homeassistant`. ```bash # cd /media/ @@ -54,11 +56,10 @@ drwxr-xr-x 22 root root 4096 Mar 22 18:37 .. drwxr-xr-x 2 homeassistant homeassistant 4096 Apr 29 10:36 hassbackup drwx------ 2 root root 16384 Apr 29 10:18 lost+found ``` -You can ignore 'lost+found'. ### {% linkable_title Install Dependency %} -In order to preserve space on your drive we use zip. Install that too. +The script in the next section uses zip to preserve space on your drive. So we will install zip next. ```bash /media# apt-get install zip @@ -68,9 +69,9 @@ Building dependency tree Setting up zip (3.0-8) ... ``` -### {% linkable_title Install and run script %} +### {% linkable_title Download and Run Script %} -Become the `homeassistant` user and place the following [script](https://gist.github.com/riemers/041c6a386a2eab95c55ba3ccaa10e7b0) to a place of your liking. +Become the `homeassistant` user (or whatever user runs Home Assistant). Change to whatever directory you would like the [script](https://gist.github.com/riemers/041c6a386a2eab95c55ba3ccaa10e7b0) placed into and run the following command. ```bash # wget https://gist.githubusercontent.com/riemers/041c6a386a2eab95c55ba3ccaa10e7b0/raw/86727d4e72e9757da4f68f1c9d784720e72d0e99/usb_backup.sh @@ -82,7 +83,7 @@ Make the downloaded script executable. # chmod +x usb_backup.sh ``` -Open up the file and change the paths you want to use, then simply run the `./usb_backup.sh`. +Edit the script file using your preferred text editor (use nano if you are not advanced). Change the paths to reflect your configuration, then simply run `./usb_backup.sh`. ```bash $ .homeassistant/extraconfig/shell_code/usb_backup.sh @@ -91,26 +92,27 @@ $ .homeassistant/extraconfig/shell_code/usb_backup.sh [i] Keeping all files no prunning set ``` -### {% linkable_title Crontab %} -In order for this to automatically make a backup every night at 3 am, you can add a crontab for it as the `homeassistant` user. -Change below path to where you placed the `usb_backup.sh` and run the following line. +### {% linkable_title Set Up Crontab %} + +To automatically backup your configuration on a schedule, you can add a crontab for it as the `homeassistant` user. +Change the path below to the directory where you placed the `usb_backup.sh` and run the following line. This will backup every night at 3 am. ```bash (crontab -l 2>/dev/null; echo "0 3 * * * /home/homeassistant/.homeassistant/extraconfig/shell_code/usb_backup.sh") | crontab - ``` -### {% linkable_title Auto mount %} +### {% linkable_title Auto Mount the USB Device %} -This does not automatically mount your USB drive at boot. You need to do that manually or add a line to your `/etc/fstab` file. +NOTE: This does not automatically mount your USB drive at boot. You will need to manually mount your drive after each boot or add a line to your `/etc/fstab` file. -If your drive is on `/dev/sda1`, you could add a entry to your `/etc/fstab` like so: - -```text -/dev/sda1 /media ext4 defaults,noatime 0 1 -``` - -Manual step to mount the USB drive: +To manually mount a USB drive located at `/dev/sda1`, run the following line: ```bash # mount /dev/sda1 /media ``` + +Alternatively, auto-mount the drive by adding the following entry to your `/etc/fstab`: + +```text +/dev/sda1 /media ext4 defaults,noatime 0 1 +``` diff --git a/source/_docs/ecosystem/certificates/lets_encrypt.markdown b/source/_docs/ecosystem/certificates/lets_encrypt.markdown index edc5fe6b2b3..d8c82f80d42 100644 --- a/source/_docs/ecosystem/certificates/lets_encrypt.markdown +++ b/source/_docs/ecosystem/certificates/lets_encrypt.markdown @@ -2,7 +2,7 @@ layout: page title: "Remote Access with TLS/SSL via Let's Encrypt" description: "A guide to remotely accessing Home Assistant and securing the connection with an SSL certificate from Let's Encrypt" -date: 2017-03-16 17:00 +date: 2018-06-03 11:00 sidebar: true comments: false sharing: true @@ -10,11 +10,11 @@ footer: true ---

-If you are using Hass.io, do not use this guide. Instead, use the [DuckDNS add-on](/addons/duckdns/) to automatically maintain a subdomain including HTTPS certificates via Let's Encrypt. +If you are using Hass.io or Hassbian, do not use this guide. Instead, use the [DuckDNS add-on](/addons/duckdns/) for Hass.io or the [DuckDNS suite](https://github.com/home-assistant/hassbian-scripts/blob/master/docs/duckdns.md) for Hassbian to automatically maintain a subdomain including HTTPS certificates via Let's Encrypt.

-

-Before exposing your Home Assistant instance to the outside world it is ESSENTIAL that you have set a password following the advice on the [http](https://home-assistant.io/docs/configuration/basic/) page. +

+Before exposing your Home Assistant instance to the outside world it is ESSENTIAL that you have set a password following the advice on the [http](/docs/configuration/basic/) page.

@@ -22,16 +22,16 @@ This guide was added by mf_social on 16/03/2017 and was valid at the time of wri * You can access your Home Assistant instance across your local network, and access the device that it is on via SSH from your local network. * You know the internal IP address of your router and can access your router's configuration pages. - * You have already set up a password for your Home Assistant instance, following the advice on this page: [http](https://home-assistant.io/docs/configuration/basic/) + * You have already set up a password for your Home Assistant instance, following the advice on this page: [http](/docs/configuration/basic/) * You want to access your Home Assistant instance when you are away from home (ie, not connected to your local network) and secure it with a TLS/SSL certificate. * You have a basic understanding of the phrases I have used so far. * You are not currently running anything on port 80 on your network (you'd know if you were). * If you are not using Home Assistant on a Debian/Raspian/Hassbian system you will be able to convert any of the terminology I use in to the correct syntax for your system. * You understand that this is a 'guide' covering the general application of these things to the general masses and there are things outside of the scope of it, and it does not cover every eventuality (although I have made some notes where people may stumble). Also, I have used some turns of phrase to make it easier to understand for the novice reader which people of advanced knowledge may say is innacurate. My goal here is to get you through this guide with a satisfactory outcome and have a decent understanding of what you are doing and why, not to teach you advanced internet communication protocols. * Each step presumes you have fully completed the previous step successfully, so if you did an earlier step following a different guide, please ensure that you have not missed anything out that may affect the step you have jumped to, and ensure that you adapt any commands to take in to account different file placements from other guides. - + Steps we will take: - + - 0 - Gain a basic level of understanding around IP addresses, port numbers and port forwarding - 1 - Set your device to have a static IP address - 2 - Set up port forwarding without TLS/SSL and test connection @@ -42,69 +42,69 @@ Steps we will take: - 7 - Set up a sensor to monitor the expiry date of the certificate - 8 - Set up an automatic renewal of the TLS/SSL certificate - 9 - Set up an alert to warn us if something went wrong - + ### {% linkable_title 0 - Gain a basic level of understanding around IP addresses, port numbers and port forwarding %} - + An IP address is a bit like a phone number. When you access your Home Assistant instance you type something similar to 192.168.0.200:8123 in to your address bar of your browser. The bit before the colon is the IP address (in this case 192.168.0.200) and the bit after is the port number (in this case 8123). When you SSH in to the device running Home Assistant you will use the same IP address, and you will use port 22. You may not be aware that you are using port 22, but if you are using Putty look in the box next to where you type the IP address, you will see that it has already selected port 22 for you. - + So, if an IP address is like a phone number, a port number is like an extension number. An analogy would be if you phone your local doctors on 192-1680-200 and the receptionist answers, you ask to speak to Dr. Smith and she will put you through to extension 8123, which is the phone Dr. Smith is sitting at. The doctors surgery is the device your Home Assistant is running on, Dr. Smith is your Home Assistant. Thusly, your Home Assistant instance is 'waiting for your call' on port 8123, at the device IP 192.168.0.200 . - + Now, to speak to the outside world your connection goes through a router. Your router will have two IP addresses. One is the internal network number, most likely 192.168.0.1 in my example, and an external IP address that incoming traffic is sent to. In the example of calling the doctors, the external IP is your telephone number's area code. - + So, when we want to connect to our Home Assistant instance from outside our network we will need to call the correct extension number, at the correct phone number, in the correct area code. - -We will be looking for a system to run like this (in this example I will pretend our external IP is 12.12.12.12): - + +We will be looking for a system to run like this (in this example I will pretend our external IP is 203.0.113.12): + ```text -Outside world -> 12.12.12.12:8123 -> your router -> 192.168.0.200:8123 +Outside world -> 203.0.113.12:8123 -> your router -> 192.168.0.200:8123 ``` Sounds simple? It really is except for two small, but easy to overcome, complications: - + * IP addresses are often dynamically allocated, so they can change. * Because of the way the internet works you cannot chain IP addresses together to get from where you are, to where you want to go. - + To get around the issue of changing IP addresses we must remember that there are two IP addresses affected. Your external one (which we will 'call' to get on to your network from the internet) and your internal one (192.168.0.200 in the example I am currently using). - + So, we can use a static IP to ensure that whenever our device running Home Assistant connects to our router it always uses the same address. This way our internal IP never changes. This is covered in step 1 below. - + We then have no control over our external IP, as our Service Provider will give us a new one at random intervals. To fix this we will use a service called DuckDNS which will give us a name for our connection (something like examplehome.duckdns.org) and behind the scenes will continue to update your external IP. So no matter how many times the IP address changes, typing examplehome.duckdns.org in to our browser will convert to the correct, up-to-date, IP address. This is covered in step 3 below. - -To get around the issue of not being able to chain the IP addresses together (I can't say I want to call 12:12:12:12 and be put through to 192.168.0.200, and then be put through to extension 8123) we use port forwarding. Port forwarding is the process of telling your router which device to allow the outside connection to speak to. In the doctors surgery example, port forwarding is the receptionist. This takes a call from outside, and forwards it to the correct extension number inside. It is important to note that port forwarding can forward an incoming request for one port to a different port on your internal network if you so choose, and we will be doing this later on. The end result being that when we have our TSL/SSL certificate our incoming call will be requesting port 443 (because that is the SSL port, like the SSH port is always 22), but our port forwarding rule will forward this to our HA instance on port 8123. When this guide is completed we will run something like this: - + +To get around the issue of not being able to chain the IP addresses together (I can't say I want to call 203.0.113.12 and be put through to 192.168.0.200, and then be put through to extension 8123) we use port forwarding. Port forwarding is the process of telling your router which device to allow the outside connection to speak to. In the doctors surgery example, port forwarding is the receptionist. This takes a call from outside, and forwards it to the correct extension number inside. It is important to note that port forwarding can forward an incoming request for one port to a different port on your internal network if you so choose, and we will be doing this later on. The end result being that when we have our TLS/SSL certificate our incoming call will by default be requesting port 443 (because that is the default HTTPS port, like the default SSH port is 22), our port forwarding rule can forward this to our HA instance on port 8123 (or we can specify the port number in the URL). When this guide is completed we will run something like this: + ```text -Outside world -> https://examplehome.duckdns.org -> 12.12.12.12:443 -> your router -> 192.168.0.200:8123 +Outside world -> https://examplehome.duckdns.org -> 203.0.113.12:443 -> your router -> 192.168.0.200:8123 ``` So, let's make it happen... ### {% linkable_title 1 - Set your device to have a static IP address %} - + Whenever a device is connected to a network it has an IP address. This IP address is often dynamically assigned to the device on connection. This means there are occasions where the IP address you use to access Home Assistant, or SSH in to the device running Home Assistant, may change. Setting a static IP address means that the device will always be on the same address. - + SSH in to your system running Home Assistant and login. - + Type the following command to list your network interfaces: - + ```bash $ ifconfig ``` -You will receive an ouput similar to the image below: +You will receive an output similar to the image below:

Screenshot

- + Make a note of the interface name and the IP address you are currently on. In the picture it is the wireless connection that is highlighted, but with your setup it may be the wired one (eth0 or similar), make sure you get the correct information. - + Then type the following command to open the text file that controls your network connection: -```bash +```bash $ sudo nano /etc/dhcpcd.conf ``` At the bottom of the file add the following lines: - + ```text interface wlan0 <----- or the interface you just wrote down. @@ -113,7 +113,7 @@ static routers=192.168.0.1 <---- Your router's IP address static domain_name_servers=192.168.0.1 <---- Your router's IP address ``` -It is important to note that the first three bits of your static IP address and your router's IP address should be the same, eg: +It is important to note that the first three bytes of your static IP address and your router's IP address should be the same, eg: ```text Router: 192.168.0.1 @@ -171,10 +171,10 @@ https://whatismyipaddress.com/ This will tell you your current external IP address -Type the external IP address in to the URL bar with http:// in front and :8123 after like so (12.12.12.12 is my example!): +Type the external IP address in to the URL bar with http:// in front and :8123 after like so (203.0.113.12 is my example!): ```text -http://12.12.12.12:8123 +http://203.0.113.12:8123 ``` Can you see your Home Assistant instance? If not, your router may not support 'loopback' - try the next step anyway and if that works, and this one still doesn't, just remember that you cannot use loopback, so will have to use internal addresses when you're on your home network. More on this later on if it's relevant to you. @@ -195,13 +195,17 @@ In the domains section pick a name for your subdomain, this can be anything you The URL you will be using later to access your Home Assistant instance from outside will be the subdomain you picked, followed by duckdns.org . For our example we will say our URL is examplehome.duckdns.org -On the top left of duckdns.org select the install option. Then pick your operating system from the list. In our example we will use a Raspberry Pi. In the dropdown box select the URL you just created. +Set up Home Assistant to keep your DuckDNS URL and external IP address in sync. In your `configuration.yaml` file add the following: -Duckdns.org will now generate personalised instructions for you to follow so that your device can update their website every time your IP address changes. Carefully follow the instructions given on duckdns.org to set up your device. +```yaml +duckdns: + domain: examplehome + access_token: abcdefgh-1234-abcd-1234-abcdefgh +``` -At the end of the instructions DuckDNS will suggest you set up port forwarding. No need, we have already done this in step 2. +The access token is available on your DuckDNS page. Restart Home Assistant after the change. -What you have now done is set up DuckDNS so that whenever you type examplehome.duckdns.org in to your browser it will convert that to your router's external IP address. Your external IP address will always be up to date because your device running Home Assistant will update DuckDNS every time it changes. +What you have now done is set up DuckDNS so that whenever you type examplehome.duckdns.org in to your browser it will convert that to your router's external IP address. Your external IP address will always be up to date because Homeassistant will update DuckDNS every time it changes. Now type your new URL in to your address bar on your browser with port 8123 on the end: @@ -241,20 +245,20 @@ In cases where your ISP blocks port 80 you will need to change the port forward Now SSH in to the device your Home Assistant is running on.

-If you're running the 'standard' setup on a Raspberry Pi the chances are you just logged in as the 'pi' user. If not, you may have logged in as the Home Assistant user. There are commands below that require the Home Assistant user to be on the `sudoers` list. If you are not using the 'standard' pi setup it is presumed you will know how to get your Home Assistant user on the `sudoers` list before continuing. If you are running the 'standard' pi setup, from your 'pi' user issue the following command (where `hass` is the Home Assistant user): +If you're running the 'standard' setup on a Raspberry Pi the chances are you just logged in as the 'pi' user. If not, you may have logged in as the Home Assistant user. There are commands below that require the Home Assistant user to be on the `sudoers` list. If you are not using the 'standard' Pi setup it is presumed you will know how to get your Home Assistant user on the `sudoers` list before continuing. If you are running the 'standard' Pi setup, from your 'pi' user issue the following command (where `homeassistant` is the Home Assistant user): ``` -$ sudo adduser hass sudo +$ sudo adduser homeassistant sudo ```

-If you did not already log in as the user that currently runs Home Assistant, change to that user (usually `hass` or `homeassistant` - you may have used a command similar to this in the past): +If you did not already log in as the user that currently runs Home Assistant, change to that user (usually `homeassistant` or `hass` - you may have used a command similar to this in the past): ```bash -$ sudo su -s /bin/bash hass +$ sudo -u homeassistant -H -s ``` -Make sure you are in the home directory for the HA user: +Make sure you are in the home directory for the Home Assistant user: ```bash $ cd @@ -269,7 +273,14 @@ $ wget https://dl.eff.org/certbot-auto $ chmod a+x certbot-auto ``` -Now we will run the certbot program to get our ssl certificate. You will need to include your email address and your DuckDNS URL in the appropriate places: +You might need to stop Home Assistant before continuing with the next step. You can do this via the Web-UI or use the following command if you are running on Hassbian: + +```text +$ sudo systemctl stop home-assistant@homeassistant.service +``` + +You can restart Home Assistant after the next step using the same command and replacing `stop` with `start`. +Now we will run the certbot program to get our SSL certificate. You will need to include your email address and your DuckDNS URL in the appropriate places: ```text $ ./certbot-auto certonly --standalone --preferred-challenges http-01 --email your@email.address -d examplehome.duckdns.org @@ -297,13 +308,13 @@ Did all of that go without a hitch? Wahoo! Your Let's Encrypt certificate is now ### {% linkable_title 5 - Check the incoming connection %}

-Following on from Step 4 your SSH will still be in the certbot folder. If you edit your configuration files over SSH you will need to change to your `homeassistant` folder: +Following on from Step 4 your SSH will still be in the certbot folder. If you edit your configuration files over SSH you will need to change to our `homeassistant` folder: ``` $ cd ~/.homeassistant ``` -If you use samba shares to edit your files you can exit your SSH now. +If you use Samba shares to edit your files you can exit your SSH now.

If during step 4 you had to use port 443 instead of port 80 to generate your certificate, you should delete that rule now. @@ -329,8 +340,8 @@ http: ssl_key: /etc/letsencrypt/live/examplehome.duckdns.org/privkey.pem base_url: examplehome.duckdns.org ``` - -You may wish to set up other options for the [http](https://home-assistant.io/components/http/) component at this point, these extra options are beyond the scope of this guide. + +You may wish to set up other options for the [http](/components/http/) component at this point, these extra options are beyond the scope of this guide. Save the changes to configuration.yaml. Restart Home Assistant. @@ -356,11 +367,7 @@ https://YOUR-HA-IP:8123 Some cases such as this are where your router does not allow 'loopback' or where there is a problem with incoming connections due to technical failure. In these cases you can still use your internal connection and safely ignore the warnings. -If you were previously using a webapp on your phone/tablet to access your Home Assistant you should delete the old one and create a new one with the new address. The old one will no longer work as it is not keyed to your new, secure URL. Instructions for creating your new webapp can be found here: - -```text -https://home-assistant.io/docs/frontend/mobile/ -``` +If you were previously using a webapp on your phone/tablet to access your Home Assistant you should delete the old one and create a new one with the new address. The old one will no longer work as it is not keyed to your new, secure URL. Instructions for creating your new webapp can be found [here](/docs/frontend/mobile/). All done? Accessing your Home Assistant from across the world with your DuckDNS URL and a lovely secure logo on your browser? Ace! Now let's clean up our port forwards so that we are only exposing the parts of our network that are absolutely necessary to the outside world. @@ -380,11 +387,11 @@ You are now part of one of two groups: * If you have BOTH rules you are able to set up auto renewals of your certificates using port 80 and the standard http challenge, as performed above. * If you only have one, you are still able to set up auto renewals of your certificates, but will have to specify additional options when renewing that will temporarily stop Home Assistant and use port 8123 for certificate renewal. - + Please remember whether you are a ONE-RULE person or a BOTH-RULE person for step 8! - + Let's Encrypt certificates only last for 90 days. When they have less than 30 days left they can be renewed. Renewal is a simple process. - + Move on to step 7 to see how to monitor your certificates expiry date, and be ready to renew your certificate when the time comes. ### {% linkable_title 7 - Set up a sensor to monitor the expiry date of the certificate %} @@ -395,9 +402,9 @@ Setting a sensor to read the number of days left on your TLS/SSL certificate bef * You can set automations based on the number of days left * You can set alerts to notify you if your certificate has not been renewed and is coming close to expiry. * If you cannot set up automatic renewals due to your ISP blocking port 80, you will have timely reminders to complete the process manually. - + If you do not wish to set up a sensor you can skip straight to step 8 to learn how to update your certificates. - + The sensor will rely on a command line program that needs to be installed on your device running Home Assistant. SSH in to the device and run the following commands: ```bash @@ -435,33 +442,33 @@ If you are a ONE-RULE person (from step 6), you can automatically renew your cer If you are a TWO-RULE person (from step 6), you can automatically renew your certificate using a `http-01` challenge and port 80. There are a number of options for automating the renewal process: - + #### Option 1: Your certificate can be renewed as a 'cron job' - cron jobs are background tasks run by the computer at specified intervals (and are totally independent of Home Assistant). Defining cron is outside of the scope of this guide but you will have had dealings with `crontab` when setting up DuckDNS in step 3 - + To set a cron job to run the script at regular intervals: - + * SSH in to your device running Home Assistant. - * Change to your Home Assistant user (command similar to): - + * Change to your Home Assistant user (where `homeassistant` is the name of the user): + ```bash -$ sudo su -s /bin/bash hass +$ sudo -u homeassistant -H -s ``` - + * Open the crontab: - + ```bash $ crontab -e ``` - + * If you are a TWO-RULE Person: Scroll to the bottom of the file and paste in the following line - + ```text 30 2 * * 1 ~/certbot/certbot-auto renew --quiet --no-self-upgrade --standalone --preferred-challenges http-01 ``` * If you are a ONE-RULE Person: Scroll to the bottom of the file and paste in the following line - + ```text 30 2 * * 1 ~/certbot/certbot-auto renew --quiet --no-self-upgrade --standalone --preferred-challenges tls-sni-01 --tls-sni-01-port 8123 --pre-hook "sudo systemctl stop home-assistant@homeassistant.service" --post-hook "sudo systemctl start home-assistant@homeassistant.service" ``` @@ -471,17 +478,17 @@ $ crontab -e 3. We define pre-hooks and post-hooks that stop our Home Assistant service before certbot runs, freeing port 8123 for certificate renewal, and restart Home Assistant after renewal is complete. * Save the file and exit - - + + #### Option 2: You can set an automation in Home Assistant to run the certbot renewal script. - + Add the following sections to your configuration.yaml if you are a TWO-RULE person -```yaml -shell_command: +```yaml +shell_command: renew_ssl: ~/certbot/certbot-auto renew --quiet --no-self-upgrade --standalone --preferred-challenges http-01 - + automation: - alias: 'Auto Renew SSL Cert' trigger: @@ -495,34 +502,34 @@ If you are a ONE-RULE person, replace the `certbot-auto` command above with `~/c #### Option 3: You can manually update the certificate when your certificate is less than 30 days to expiry. - -To manually update: - + +To manually update: + * SSH in to your device running Home Assistant. - * Change to your Home Assistant user (command similar to): - + * Change to your Home Assistant user (where `homeassistant` is the name of the user): + ```bash -$ su - s /bin/bash hass +$ sudo -u homeassistant -H -s ``` - + * Change to your certbot folder - + ```bash $ cd ~/certbot/ ``` * Run the renewal command - + ```bash $ ./certbot-auto renew --quiet --no-self-upgrade --standalone --preferred-challenges http-01 ``` * If you are a ONE-RULE person, replace the `certbot-auto` command above with `~/certbot/certbot-auto renew --quiet --no-self-upgrade --standalone --preferred-challenges tls-sni-01 --tls-sni-01-port 8123 --pre-hook "sudo systemctl stop home-assistant@homeassistant.service" --post-hook "sudo systemctl start home-assistant@homeassistant.service"` - -So, now were all set up. We have our secured, remotely accesible HA instance and we're on track for keeping our certificates up to date. But what if something goes wrong? What if the automation didn't fire? What if the cron job forgot to run? What if the dog ate my homework? Read on to set up an alert so you can be notified in plenty of time if you need to step in and sort out any failures. - + +So, now were all set up. We have our secured, remotely accessible Home Assistant instance and we're on track for keeping our certificates up to date. But what if something goes wrong? What if the automation didn't fire? What if the cron job forgot to run? What if the dog ate my homework? Read on to set up an alert so you can be notified in plenty of time if you need to step in and sort out any failures. + ### {% linkable_title 9 - Set up an alert to warn us if something went wrong. %} - + We set up our automatic renewal of our certificates and whatever method we used the certificate should be renewed on or around 30 days before it expires. But what if a week later it still hasn't been? This alert will go off if the expiry time on the certificate gets down to 21 days. This will give you 3 weeks to fix the problem, get your new certificate installed and get another 90 days of secure Home Assistant connections in play. In your `configuration.yaml` add the following automation, adding your preferred notification platform where appropriate: @@ -531,15 +538,15 @@ In your `configuration.yaml` add the following automation, adding your preferred automation: - alias: 'SSL expiry notification' trigger: - platform: numeric_state - entity_id: sensor.ssl_cert_expiry - below: 21 - action: - service: notify.[your_notification_preference] - data: - message: 'Warning - SSL certificate expires in 21 days and has not been automatically renewed' + platform: numeric_state + entity_id: sensor.ssl_cert_expiry + below: 21 + action: + service: notify.[your_notification_preference] + data: + message: 'Warning - SSL certificate expires in 21 days and has not been automatically renewed' ``` - + If you receive this warning notification, follow the steps for a manual update from step 8. Any error messages received at that point can be googled and resolved. If the manual update goes without a hitch there may be something wrong with your chosen method for automatic updates, and you can start troubleshooting from there. So, that's it. We've taken a Home Assistant instance that was only reachable on the local network, made it accessible from the internet, secured it, and set up a system to ensure that it always stays secure. Well done, go and treat yourself to a cookie! diff --git a/source/_docs/ecosystem/certificates/tls_self_signed_certificate.markdown b/source/_docs/ecosystem/certificates/tls_self_signed_certificate.markdown index 53736e06937..2aab9deb6d9 100644 --- a/source/_docs/ecosystem/certificates/tls_self_signed_certificate.markdown +++ b/source/_docs/ecosystem/certificates/tls_self_signed_certificate.markdown @@ -11,8 +11,8 @@ redirect_from: /cookbook/tls_self_signed_certificate/ --- If your Home Assistant instance is only accessible from your local network you can still protect the communication between your browsers and the frontend with SSL/TLS. -[Let's encrypt]({{site_root}}/blog/2015/12/13/setup-encryption-using-lets-encrypt/) will only work if you have a DNS entry and remote access is allowed. -The solution is to use a self-signed certificate. As you most likely don't have a certification authority (CA) your browser will conplain about the security. If you have a CA then this will not be an issue. +[Let's encrypt]({{site_root}}/blog/2017/09/27/effortless-encryption-with-lets-encrypt-and-duckdns/) will only work if you have a DNS entry and remote access is allowed. +The solution is to use a self-signed certificate. As you most likely don't have a certification authority (CA) your browser will complain about the security. If you have a CA then this will not be an issue. To create a certificate locally, you need the [OpenSSL](https://www.openssl.org/) command-line tool. diff --git a/source/_docs/ecosystem/hadashboard.markdown b/source/_docs/ecosystem/hadashboard.markdown index c73560401ac..87c06d166dd 100755 --- a/source/_docs/ecosystem/hadashboard.markdown +++ b/source/_docs/ecosystem/hadashboard.markdown @@ -10,7 +10,7 @@ footer: true redirect_from: /ecosystem/hadashboard/ --- -HADashboard is a modular, skinnable dashboard for [Home Assistant](https://home-assistant.io/) that is intended to be wall mounted, and is optimized for distance viewing. +HADashboard is a modular, skinnable dashboard for [Home Assistant](/) that is intended to be wall mounted, and is optimized for distance viewing.

@@ -39,4 +39,4 @@ HADashboard is a modular, skinnable dashboard for [Home Assistant](https://home- -For full installation instructions see the HADashboard section in the [AppDaemon Project Documentation](http://appdaemon.readthedocs.io/en/latest/DASHBOARD_INSTALL.html) +For full installation instructions see the HADashboard section in the [AppDaemon Project Documentation](http://appdaemon.readthedocs.io/en/stable/DASHBOARD_INSTALL.html) diff --git a/source/_docs/ecosystem/hass-configurator.markdown b/source/_docs/ecosystem/hass-configurator.markdown index 6e8c30f7d30..3087d6b6b2d 100644 --- a/source/_docs/ecosystem/hass-configurator.markdown +++ b/source/_docs/ecosystem/hass-configurator.markdown @@ -12,7 +12,7 @@ redirect_from: /ecosystem/hass-configurator/ ### {% linkable_title Configuration UI for Home Assistant %} -Since there currently is no nice way to edit the yaml-files Home Assistant is using through the frontend, here is a small webapp that hopefully makes the configuration easier. It is a customized and embedded [Ace editor](https://ace.c9.io/), which has syntax highlighting for yaml, the format used for Home Assistants configuration files. There is an integrated file browser to select whatever file you want to edit. When you're done with editing the file, click the save-button and it will replace the original. +Since there currently is no nice way to edit the yaml-files Home Assistant is using through the frontend, here is a small webapp that hopefully makes the configuration easier. It is a customized and embedded [Ace editor](https://ace.c9.io/), which has syntax highlighting for yaml, the format used for Home Assistants configuration files. There is an integrated file browser to select whatever file you want to edit. When you're done with editing the file, click the save-button and it will replace the original. Essentially this is a browser-based alternative to modifying your configuration through SSH, Windows + SMB, Github etc..

@@ -38,16 +38,16 @@ This tool allows you to browse your filesystem and modify files. So be careful w Consider running the configurator as a user with limited privileges to limit possible damage.

### {% linkable_title Installation (Linux, OS X) %} -There are no dependencies on Python modules that are not part of the standard library. And all the fancy JavaScript libraries are loaded from CDN (which means this doesn't work when you're offline). -- Copy [configurator.py](https://github.com/danielperna84/hass-configurator/blob/master/configurator.py) to your Home Assistant configuration directory (e.g /home/homeassistant/.homeassistant) +There are no dependencies on Python modules that are not part of the standard library. And all the fancy JavaScript libraries are loaded from CDN (which means this doesn't work when you're offline). +- Copy [configurator.py](https://github.com/danielperna84/hass-configurator/blob/master/configurator.py) to your Home Assistant configuration directory (e.g `/home/homeassistant/.homeassistant`): `wget https://raw.githubusercontent.com/danielperna84/hass-configurator/master/configurator.py` - Make it executable: `sudo chmod 755 configurator.py` - (Optional) Set the `GIT` variable in configurator.py to `True` if [GitPython](https://gitpython.readthedocs.io/) is installed on your system. This is required if you want to make use of the Git integration. - Execute it: `sudo ./configurator.py` - To terminate the process do the usual `CTRL+C`, maybe once or twice ### {% linkable_title Configuration %} -Near the top of the configurator.py-file you will find some global variables you can change to customize the configurator. If you are unfamiliar with Python: when setting variables of the type _string_, you have to write that within quotation marks. The default settings are fine for just checking out the configurator quickly. With more customized setups you should change some settings though. -To keep your settings across updates it is also possible to save settings in an external file. In that case copy [settings.conf](https://github.com/danielperna84/hass-configurator/blob/master/settings.conf) wherever you like and append the full path to the file to the command when starting the configurator. E.g. `sudo .configurator.py /home/homeassistant/.homeassistant/mysettings.conf`. This file is in JSON format. So make sure it has a valid syntax (you can set the editor to JSON to get syntax highlighting for the settings). The major difference to the settings in the py-file is, that `None` becomes `null`. +Near the top of the `configurator.py`-file you will find some global variables you can change to customize the configurator. If you are unfamiliar with Python: when setting variables of the type _string_, you have to write that within quotation marks. The default settings are fine for just checking out the configurator quickly. With more customized setups you should change some settings though. +To keep your settings across updates it is also possible to save settings in an external file. In that case copy [settings.conf](https://github.com/danielperna84/hass-configurator/blob/master/settings.conf) wherever you like and append the full path to the file to the command when starting the configurator. e.g., `sudo .configurator.py /home/homeassistant/.homeassistant/mysettings.conf`. This file is in JSON format. So make sure it has a valid syntax (you can set the editor to JSON to get syntax highlighting for the settings). The major difference to the settings in the py-file is, that `None` becomes `null`. #### LISTENIP (string) The IP the service is listening on. By default it is binding to `0.0.0.0`, which is every interface on the system. @@ -66,22 +66,22 @@ Set credentials in the form of `"username:password"` if authentication should be #### ALLOWED_NETWORKS (list) Limit access to the configurator by adding allowed IP addresses / networks to the list, e.g `ALLOWED_NETWORKS = ["192.168.0.0/24", "172.16.47.23"]` #### BANNED_IPS (list) -List of statically banned IP addresses, e.g. `BANNED_IPS = ["1.1.1.1", "2.2.2.2"]` +List of statically banned IP addresses, e.g., `BANNED_IPS = ["1.1.1.1", "2.2.2.2"]` #### BANLIMIT (integer) Ban IPs after `n` failed login attempts. Restart the service to reset banning. The default of `0` disables this feature. `CREDENTIALS` has to be set for this to work. #### IGNORE_PATTERN (list) -Files and folders to ignore in the UI, e.g. `IGNORE_PATTERN = [".*", "*.log", "__pycache__"]`. +Files and folders to ignore in the UI, e.g., `IGNORE_PATTERN = [".*", "*.log", "__pycache__"]`. #### DIRSFIRST (bool) If set to `True`, directories will be displayed at the top of the filebrowser. #### GIT (bool) Set this variable to `True` to enable Git integration. This feature requires [GitPython](https://gitpython.readthedocs.io) to be installed on the system that is running the configurator. For technical reasons this feature can not be enabled with the static settings file. - -__Note regarding `ALLOWED_NETWORKS`, `BANNED_IPS` and `BANLIMIT`__: + +__Note regarding `ALLOWED_NETWORKS`, `BANNED_IPS` and `BANLIMIT`__: The way this is implemented works in the following order: 1. (Only if `CREDENTIALS` is set) Check credentials - - Failure: Retry `BANLIMIT` times, after that return error 420 (unless you try again without any authentication headers set, e.g. private tab of your browser) + - Failure: Retry `BANLIMIT` times, after that return error 420 (unless you try again without any authentication headers set, e.g., private tab of your browser) - Success: Continue 2. Check if client IP address is in `BANNED_IPS` - Yes: Return error 420 @@ -91,7 +91,7 @@ The way this is implemented works in the following order: - Yes: Continue and display UI of configurator ### {% linkable_title Embedding into Home Assistant %} -Home Assistant has the [panel_iframe](https://home-assistant.io/components/panel_iframe/) component. With this it is possible to embed the configurator directly into Home Assistant, allowing you to modify your configuration through the Home Assistant frontend. +Home Assistant has the [panel_iframe](/components/panel_iframe/) component. With this it is possible to embed the configurator directly into Home Assistant, allowing you to modify your configuration through the Home Assistant frontend. An example configuration would look like this: ```yaml @@ -107,11 +107,11 @@ Be careful when setting up port forwarding to the configurator while embedding i ### {% linkable_title Daemonizing / Keeping the configurator running %} Since the configurator script on its own is no service, you will have to take some extra steps to keep it running. Here are five options (for Linux), but there are more, depending on your usecase. -1. Fork the process into the background with the command: +1. Fork the process into the background with the command: `nohup sudo ./configurator.py &` -2. If your system is using systemd (that's usually what you'll find on a Raspberry PI), there's a [template file](https://github.com/danielperna84/hass-configurator/blob/master/hass-poc-configurator.systemd) you can use and then apply the same process to integrate it as mentioned in the [Home Assistant documentation](https://home-assistant.io/docs/autostart/systemd/). If you use this method you have to set the `BASEPATH` variable according to your environment. -3. If you have [supervisor](http://supervisord.org/) running on your system, [hass-poc-configurator.supervisor](https://github.com/danielperna84/hass-configurator/blob/master/hass-poc-configurator.supervisor) would be an example configuration you could use to control the configurator. -4. A tool called [tmux](https://tmux.github.io/), which should be pre-installed with [HASSbian](https://home-assistant.io/docs/hassbian/). +2. If your system is using systemd (that's usually what you'll find on a Raspberry Pi), there's a [template file](https://github.com/danielperna84/hass-configurator/blob/master/hass-configurator.systemd) you can use and then apply the same process to integrate it as mentioned in the [Home Assistant documentation](/docs/autostart/systemd/). If you use this method you have to set the `BASEPATH` variable according to your environment. +3. If you have [supervisor](http://supervisord.org/) running on your system, [hass-poc-configurator.supervisor](https://github.com/danielperna84/hass-configurator/blob/master/hass-configurator.supervisor) would be an example configuration you could use to control the configurator. +4. A tool called [tmux](https://tmux.github.io/), which should be pre-installed with [HASSbian](/docs/hassbian/). 5. A tool called [screen](http://ss64.com/bash/screen.html) (alternative to tmux). If it's not already installed on your system, you can do `sudo apt-get install screen` or `sudo yum install screen` to get it. When it's installed, start a screen session by executing `screen`. Then navigate to your Home Assistant directory and start the configurator like described above. Put the screen session into the background by pressing `CTRL+A` and then `CTRL+D`. It is now safe to disconnect from your SSH session. To resume the screen session, log in to your machine and execute `screen -r`. diff --git a/source/_docs/ecosystem/ios.markdown b/source/_docs/ecosystem/ios.markdown index 6959ade8f13..027fe503230 100644 --- a/source/_docs/ecosystem/ios.markdown +++ b/source/_docs/ecosystem/ios.markdown @@ -21,7 +21,7 @@ The app is available on the iOS App Store in every country that Apple supports.

-## Basic requirements +## {% linkable_title Basic requirements %} * iOS device running at least iOS 9, but iOS 10 is greatly preferred. * Home Assistant 0.42.4 or higher for push notification support. @@ -33,7 +33,7 @@ Loading the `ios` component will also load the [`device_tracker`][device-tracker ## {% linkable_title Setup %} -### Automated Setup +### {% linkable_title Automated Setup %} The `ios` component will automatically be loaded under the following circumstances: @@ -44,7 +44,7 @@ Automated discovery and component loading only happens at first install of the a After the first automated setup you need to add `ios:` to your configuration so that the component loads by default even after restarting Home Assistant. -### Manual Setup +### {% linkable_title Manual Setup %} You may also manually load the `ios` component by adding the following to your configuration: diff --git a/source/_docs/ecosystem/ios/integration.markdown b/source/_docs/ecosystem/ios/integration.markdown index 3bd3791ebb5..b6c27dd4373 100644 --- a/source/_docs/ecosystem/ios/integration.markdown +++ b/source/_docs/ecosystem/ios/integration.markdown @@ -18,7 +18,7 @@ Query parameters are passed as a dictionary in the call. Example: `homeassistant://call_service/device_tracker.see?entity_id=device_tracker.entity` ## Fire event -You can create an [event trigger](https://home-assistant.io/docs/automation/trigger/#event-trigger) and fire the event. +You can create an [event trigger](/docs/automation/trigger/#event-trigger) and fire the event. Example: `homeassistant://fire_event/custom_event?entity_id=MY_CUSTOM_EVENT` diff --git a/source/_docs/ecosystem/ios/notifications.markdown b/source/_docs/ecosystem/ios/notifications.markdown index a4a025907c1..c1eee576e3a 100644 --- a/source/_docs/ecosystem/ios/notifications.markdown +++ b/source/_docs/ecosystem/ios/notifications.markdown @@ -12,7 +12,7 @@ redirect_from: /ecosystem/ios/notifications/ The `ios` notify platform enables sending push notifications to the Home Assistant iOS app. -The 'ios' component will automatically load the notify service. +The 'ios' component will automatically load the notify service. The service component can be called using `service: notify.ios_`. Your device ID can be found in the `ios.conf` file in your configuration folder. The file is compressed JSON. You can view it easier by copying the file contents and pasting them into [JSONLint](http://jsonlint.com). @@ -21,4 +21,4 @@ In this example, the device ID is `robbiet480_7plus`, so the notify service to u {"devices":{"robbiet480_7plus":{"app":{"bundleIdentifer":"io.robbie.HomeAssistant","versionNumber":1,"buildNumber":53},"pushSounds":[],"permissions":["location"],"deviceId":"robbiet480_7plus","device":{"type":"iPhone 7 Plus","systemName":"iOS","systemVersion":"10.3","permanentID":"AB9F02FE-6AC6-47B8-ADEB-5DD87B489156","localizedModel":"iPhone","name":"Robbie's iPhone 7 Plus","model":"iPhone"},"battery":{"state":"Full","level":100},"pushToken":"SECRET","pushId":"SECRET"}}} ``` -You can find more information in the [Basic Notifications](https://home-assistant.io/docs/ecosystem/ios/notifications/basic/) documentation and the [Actionable Notifications](https://home-assistant.io/docs/ecosystem/ios/notifications/actions/) documentation. +You can find more information in the [Basic Notifications](/docs/ecosystem/ios/notifications/basic/) documentation and the [Actionable Notifications](/docs/ecosystem/ios/notifications/actions/) documentation. diff --git a/source/_docs/ecosystem/ios/notifications/actions.markdown b/source/_docs/ecosystem/ios/notifications/actions.markdown index df7caf240c0..eb66feb66f3 100644 --- a/source/_docs/ecosystem/ios/notifications/actions.markdown +++ b/source/_docs/ecosystem/ios/notifications/actions.markdown @@ -32,7 +32,7 @@ In advance of sending a notification: When sending a notification: -1. Send a notification with `data.push.category` set to a pre-defined notification category identifer. +1. Send a notification with `data.push.category` set to a pre-defined notification category identifier. 2. Push notification delivered to device 3. User opens notification. 3. Action tapped diff --git a/source/_docs/ecosystem/ios/notifications/attachments.markdown b/source/_docs/ecosystem/ios/notifications/attachments.markdown index 2138ae602d1..73c8887f9e1 100644 --- a/source/_docs/ecosystem/ios/notifications/attachments.markdown +++ b/source/_docs/ecosystem/ios/notifications/attachments.markdown @@ -26,8 +26,8 @@ To expand a notification on 3D Touch devices simply force touch any notification message: "Something happened at home!"" data: attachment: - url: https://67.media.tumblr.com/ab04c028a5244377a0ab96e73915e584/tumblr_nfn3ztLjxk1tq4of6o1_400.gif - content-type: gif + url: "https://github.com/home-assistant/home-assistant-assets/blob/master/logo-round-192x192.png?raw=true" + content-type: png hide-thumbnail: false ``` diff --git a/source/_docs/ecosystem/ios/notifications/basic.markdown b/source/_docs/ecosystem/ios/notifications/basic.markdown index 5f8d7237450..7e0a5e92887 100644 --- a/source/_docs/ecosystem/ios/notifications/basic.markdown +++ b/source/_docs/ecosystem/ios/notifications/basic.markdown @@ -36,6 +36,7 @@ automation: action: service: notify.ios_ data: + title: "Smart Home Alerts" message: "Something happened at home!" data: push: @@ -53,13 +54,14 @@ automation action: service: notify.ios_ data: + title: "Smart Home Alerts" message: "Something happened at home!" data: subtitle: "Subtitle goes here" ``` ### {% linkable_title Sending notifications to multiple phones %} -To send notifications to multiple phones, create a [notification group](https://home-assistant.io/components/notify.group/): +To send notifications to multiple phones, create a [notification group](/components/notify.group/): ```yaml notify: - name: NOTIFIER_NAME diff --git a/source/_docs/ecosystem/nginx.markdown b/source/_docs/ecosystem/nginx.markdown index 24e4c7e0849..0d44113b3e4 100644 --- a/source/_docs/ecosystem/nginx.markdown +++ b/source/_docs/ecosystem/nginx.markdown @@ -14,13 +14,17 @@ Using NGINX as a proxy for Home Assistant allows you to serve Home Assistant sec ### {% linkable_title 1. Get a domain name forwarded to your IP %} -Chances are, you have a dynamic IP Address (your ISP changes your address periodically). If this is true, you can use a Dynamic DNS service to obtain a domain and set it up to update with you IP. If you purchase your own domain name, you will be able to easily get a trusted SSL certificate later. +Chances are, you have a dynamic IP address (your ISP changes your address periodically). If this is true, you can use a Dynamic DNS service to obtain a domain and set it up to update with you IP. If you purchase your own domain name, you will be able to easily get a trusted SSL certificate later. ### {% linkable_title 2 Install nginx on your server %} This will vary depending on your OS. Check out Google for this. After installing, ensure that NGINX is not running. +

+You will at least need nginx >= 1.3.13, as WebSocket support is required for the reverse proxy. +

+ ### {% linkable_title 3. Obtain an SSL certificate %} There are two ways of obtaining an SSL certificate. @@ -28,7 +32,7 @@ There are two ways of obtaining an SSL certificate. #### {% linkable_title Using Let's Encrypt %} If you purchased your own domain, you can use https://letsencrypt.org/ to obtain a free, publicly trusted SSL certificate. This will allow you to work with services like IFTTT. Download and install per the instructions online and get a certificate using the following command. -``` +```bash $ sudo ./letsencrypt-auto certonly --standalone -d example.com -d www.example.com ``` @@ -75,14 +79,13 @@ $ sudo ln ../sites-available/hass default Double check this configuration to ensure all settings are correct and start nginx. - ### {% linkable_title 8. Port forwarding. %} Forward ports 443 and 80 to your server on your router. Do not forward port 8123. ### {% linkable_title NGINX Config %} -``` +```nginx map $http_upgrade $connection_upgrade { default upgrade; '' close; diff --git a/source/_docs/ecosystem/nginx_subdomain.markdown b/source/_docs/ecosystem/nginx_subdomain.markdown index 714be21f489..64831bd8194 100644 --- a/source/_docs/ecosystem/nginx_subdomain.markdown +++ b/source/_docs/ecosystem/nginx_subdomain.markdown @@ -34,7 +34,7 @@ server { ssl_prefer_server_ciphers on; location / { - proxy_pass http://localhost:8123/; + proxy_pass http://localhost:8123; proxy_set_header Host $host; proxy_http_version 1.1; @@ -78,7 +78,7 @@ Start Home Assistant: Now, you have another instance running on http://localhost To access this instance by using https://countryside.example.org create the file `/etc/nginx/sites-enabled/countryside.example.org` (or symlink via `/etc/nginx/sites-available`) and add the following: -```bash +```nginx server { listen 443 ssl; server_name countryside.example.org; @@ -89,7 +89,7 @@ server { ssl_prefer_server_ciphers on; location / { - proxy_pass http://localhost:8124/; + proxy_pass http://localhost:8124; proxy_set_header Host $host; } @@ -109,7 +109,7 @@ server { Add to your `/etc/nginx/sites-enabled/default` -```bash +```nginx server { listen 80 default_server; server_name example.tld; diff --git a/source/_docs/ecosystem/scenegen.markdown b/source/_docs/ecosystem/scenegen.markdown index 3cf1e1b03c8..37d2534b086 100644 --- a/source/_docs/ecosystem/scenegen.markdown +++ b/source/_docs/ecosystem/scenegen.markdown @@ -10,7 +10,7 @@ footer: true redirect_from: /ecosystem/scenegen/ --- -Scenegen is a scene generation tool for [Home Assistant](https://home-assistant.io/) home automation software. It creates scenes by example, by reading the current states of devices and outputting a corresponding scene. Scenegen is written in python using Home Assistant's RESTFul API so can be run from anywhere. It currently supports lights and switches only. +Scenegen is a scene generation tool for [Home Assistant](/) home automation software. It creates scenes by example, by reading the current states of devices and outputting a corresponding scene. Scenegen is written in python using Home Assistant's RESTFul API so can be run from anywhere. It currently supports lights and switches only. ## {% linkable_title Installation %} diff --git a/source/_docs/ecosystem/synology.markdown b/source/_docs/ecosystem/synology.markdown index 099ea41ef08..ba2c69f04ae 100644 --- a/source/_docs/ecosystem/synology.markdown +++ b/source/_docs/ecosystem/synology.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Synology" -description: "Instructions how to get Home Assistant up and running on Synology" +description: "Instructions on how to get Home Assistant up and running on Synology" release_date: 2016-12-07 15:00:00 -0500 sidebar: true comments: false @@ -10,13 +10,33 @@ footer: true redirect_from: /ecosystem/synology/ --- -Synology NAS are the perfect companion to running Home Assistant. +Synology NAS are the perfect companion to running Home Assistant. But by default, the DSM Reverse Proxy does not configure its NGINX settings to allow WebSocket, and some extra configuration will be required to get the Home Assistant frontend working with the DSM. -### {% linkable_title HTTP Configuration %} +### {% linkable_title Template change %} -Synology will require some extra configuration to get the Home Assistant frontend working. +To allow WebSocket by default for all service exposed by NGINX, you can enable it in the template file located in `/usr/syno/share/nginx/Portal.mustache`. Please be really careful in editing this file since you may break access to the DSM UI. Please backup this file before any edition. -- Copy the Home Assistant specific Reverse Proxy settings from the existing `/etc/nginx/app.d/server.ReverseProxy.conf` to `/usr/local/etc/nginx/conf.d/http.HomeAssistant.conf` +Open `/usr/syno/share/nginx/Portal.mustache` and add the followings in the `Location` section: + +``` + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection "upgrade"; + proxy_read_timeout 86400; +``` + +Then restart the NGINX daemon: + +```bash +sudo synoservicecfg --restart nginx +``` + +This will restart the running HTTP service, not only reverse proxy, as a single instance of NGINX runs everything. + +You can find more information [here](https://github.com/orobardet/dsm-reverse-proxy-websocket). + +#### {% linkable_title HTTP Configuration %} + +- Copy the Home Assistant specific Reverse Proxy settings from the existing `/etc/nginx/app.d/server.ReverseProxy.conf` file to `/usr/local/etc/nginx/conf.d/http.HomeAssistant.conf`. - Include these lines in the location declaration: ``` diff --git a/source/_docs/frontend/browsers.markdown b/source/_docs/frontend/browsers.markdown index d0ead42c919..2454f5989aa 100644 --- a/source/_docs/frontend/browsers.markdown +++ b/source/_docs/frontend/browsers.markdown @@ -12,7 +12,7 @@ redirect_from: /getting-started/browsers/ Home Assistant requires a web browser to show the frontend and supports all major modern browsers. We don't test the web interface against all available browsers but this page tracks different browsers on various operating systems and should help you to pick a browser which works. The "Release" column contains the release number which were tested. This doen't mean that older or newer releases not work. -If a browser is listed as working but you are still having problems, it is possible that some add-on or extension may be the problem. Some add-ons or extenstion are known to cause issue with the frontend, but it's not possible to test them all. If you are having issues with the frontend displaying correctly, you should disable all your add-ons or extensions and enable them one at a time. +If a browser is listed as working but you are still having problems, it is possible that some add-on or extension may be the problem. Some add-ons or extension are known to cause issue with the frontend, but it's not possible to test them all. If you are having issues with the frontend displaying correctly, you should disable all your add-ons or extensions and enable them one at a time. We would appreciate if you help to keep this page up-to-date and add feedback. @@ -23,7 +23,7 @@ We would appreciate if you help to keep this page up-to-date and add feedback. | Internet Explorer ([IE]) | 11 | Not supported | Does not support promises. | | Microsoft [Edge] | deli. Win 10 | works | Streaming updates not working. | | [Chrome] | 61.0.3163.100 | works | | -| [Firefox] | 56.0 | works | | +| [Firefox] | 57.0 | works | | | [Iridium] | 48.2 | works | | | [Opera] | 42.0.2393.351 | works | | @@ -37,9 +37,9 @@ We would appreciate if you help to keep this page up-to-date and add feedback. | Browser | Release | State | Comments | | :-------------------- |:---------------|:-----------|:-------------------------| -| [Firefox] | 57.0 | works | | +| [Firefox] | 59.0 | works | | | [Midori] | 0.5.11 | works | | -| [Chromium] | 61.0.3163.100 | works | | +| [Chromium] | 63.0.3239.108 | works | | | [Conkeror] | 1.0.2 | works | | | [Tor Browser] | 7.0.8 | works | | | [Konqueror] | | unknown | | diff --git a/source/_docs/frontend/mobile.markdown b/source/_docs/frontend/mobile.markdown index 3a2c1af7408..d7342115b7f 100644 --- a/source/_docs/frontend/mobile.markdown +++ b/source/_docs/frontend/mobile.markdown @@ -10,7 +10,7 @@ footer: true redirect_from: /getting-started/mobile/ --- -Home Assistant has [a companion app for iOS](https://home-assistant.io/docs/ecosystem/ios/). +Home Assistant has [a companion app for iOS](/docs/ecosystem/ios/). On both Android and iOS, you can add the Home Assistant "web app" to your homescreen as if it was native (Home Assistant leverages the W3C [manifest.json](https://w3c.github.io/manifest/) support). diff --git a/source/_docs/installation.markdown b/source/_docs/installation.markdown index 632457f28a9..e5e8cb6026a 100644 --- a/source/_docs/installation.markdown +++ b/source/_docs/installation.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Installation of Home Assistant" -description: "Instructions how to install Home Assistant to launch on start." +description: "Instructions on how to install Home Assistant to launch on start." date: 2017-02-15 08:00 sidebar: true comments: false @@ -14,9 +14,25 @@ redirect_from: /getting-started/installation/ Beginners should check our [Getting started guide](/getting-started/) first. This is for users that require advanced installations.

-Home Assistant provides multiple ways to be installed. A requirement is that you have [Python](https://www.python.org/downloads/) installed. For Windows, we require at least **Python 3.5** and for other operating systems at least **Python 3.4.2**. +Home Assistant provides multiple ways to be installed. A requirement is that you have [Python 3.5.3 or later](https://www.python.org/downloads/) installed. + +

+ Please remember to [secure your installation](/docs/configuration/securing/) once you've finished with the installation process. +

+ +
+ +
+
Hass.io
(Beginner friendly)
+
+ +
+ +
+
On top of an existing Python 3.5+ installation
+
diff --git a/source/_docs/installation/archlinux.markdown b/source/_docs/installation/archlinux.markdown index 09ae89b4dde..3e13bd26912 100644 --- a/source/_docs/installation/archlinux.markdown +++ b/source/_docs/installation/archlinux.markdown @@ -21,10 +21,10 @@ $ sudo pacman -S python-pip and Home Assistant itself. ```bash -$ pip3 install homeassistant +$ pip3 install --user homeassistant ``` -Home Assistant is part of the [AUR](https://aur.archlinux.org/packages/home-assistant/). This means that it can be installed with `pacaur`: +Home Assistant is part of the [AUR](https://aur.archlinux.org/packages/home-assistant/). This means that it can be installed with `pacaur`. This package is often broken or outdated: ```bash $ pacaur -S home-assistant diff --git a/source/_docs/installation/armbian.markdown b/source/_docs/installation/armbian.markdown index e54d67acb85..5f16fc5bc0e 100644 --- a/source/_docs/installation/armbian.markdown +++ b/source/_docs/installation/armbian.markdown @@ -11,6 +11,8 @@ footer: true [armbian](https://www.armbian.com) runs on a wide-variety of [ARM development boards](https://www.armbian.com/download/). Currently there are around 50 boards supported inclusive the OrangePi family, Cubieboard, Pine64, and Odroid. +Python 3.5.3 or later is required. + Setup Python and `pip` ```bash diff --git a/source/_docs/installation/centos.markdown b/source/_docs/installation/centos.markdown index b427d83d39e..bf0c76c6eef 100644 --- a/source/_docs/installation/centos.markdown +++ b/source/_docs/installation/centos.markdown @@ -9,9 +9,9 @@ sharing: true footer: true --- -To run Python 3.x on [CentOS](https://www.centos.org/) or RHEL (Red Hat Enterprise Linux), [Software Collections](https://www.softwarecollections.org/en/scls/rhscl/rh-python34/) needs to be activated first. +To run Python 3.x on [CentOS](https://www.centos.org/) or RHEL (Red Hat Enterprise Linux), [Software Collections](https://www.softwarecollections.org/en/scls/rhscl/rh-python36/) needs to be activated first. -There are effort in progress to bring Python 3.4 to [Extra Packages for Enterprise Linux (EPEL)](https://fedoraproject.org/wiki/EPEL) which will allow you to follow the [Fedora Instructions](/docs/installation/fedora/). +You must install Python 3.5.3 or later. Software Collections version of Python 3.5 is 3.5.1 so this guide uses Python 3.6. ### {% linkable_title Using Software Collections %} @@ -20,28 +20,33 @@ First of all install the software collection repository as root. For example, on ```bash $ yum install centos-release-scl ``` - -Then install the Python 3.5 package: +Install some dependencies you'll need later. ```bash -$ yum install rh-python35 +$ yum install gcc gcc-c++ systemd-devel +``` + +Then install the Python 3.6 package: + +```bash +$ yum install rh-python36 ``` Once installed, switch to your `homeassistant` user (if you've set one up), enable the software collection and check that it has set up the new version of Python: ```bash -$ scl enable rh-python35 bash +$ scl enable rh-python36 bash $ python --version -Python 3.5.1 +Python 3.6.3 ``` -You will be in a command shell set up with Python 3.5 as your default version. The virtualenv and pip commands will be correct for this version, so you can now create a virtual environment and install Home Assistant following the main [instructions](https://home-assistant.io/docs/installation/virtualenv/#step-4-set-up-the-virtualenv). +You will be in a command shell set up with Python 3.6 as your default version. The virtualenv and pip commands will be correct for this version, so you can now create a virtual environment and install Home Assistant following the main [instructions](/docs/installation/virtualenv/#step-4-set-up-the-virtualenv). You will need to enable the software collection each time you log on before you activate your virtual environment. ### {% linkable_title Systemd with Software Collections %} -To autostart Home Assistant using systemd follow the main [instructions](https://home-assistant.io/docs/autostart/systemd/) and adjust the template as follows: +To autostart Home Assistant using systemd follow the main [instructions](/docs/autostart/systemd/) and adjust the template as follows: ``` [Unit] @@ -55,7 +60,7 @@ User=homeassistant Environment=VIRTUAL_ENV="/srv/homeassistant" Environment=PATH="$VIRTUAL_ENV/bin:$PATH" # ExecStart using software collection: -ExecStart=/usr/bin/scl enable rh-python35 -- /srv/homeassistant/bin/hass -c "/home/homeassistant/.homeassistant" +ExecStart=/usr/bin/scl enable rh-python36 -- /srv/homeassistant/bin/hass -c "/home/homeassistant/.homeassistant" [Install] WantedBy=multi-user.target diff --git a/source/_docs/installation/docker.markdown b/source/_docs/installation/docker.markdown index cd8f8b26eef..8b3583fd494 100644 --- a/source/_docs/installation/docker.markdown +++ b/source/_docs/installation/docker.markdown @@ -10,7 +10,7 @@ footer: true redirect_from: /getting-started/installation-docker/ --- -Installation with Docker is straightforward. Adjust the following command so that `/path/to/your/config/` points at the folder where you want to store your config and run it: +Installation with Docker is straightforward. Adjust the following command so that `/path/to/your/config/` points at the folder where you want to store your configuration and run it: ### {% linkable_title Linux %} @@ -18,16 +18,27 @@ Installation with Docker is straightforward. Adjust the following command so tha $ docker run -d --name="home-assistant" -v /path/to/your/config:/config -v /etc/localtime:/etc/localtime:ro --net=host homeassistant/home-assistant ``` +### {% linkable_title Raspberry Pi 3 (Raspbian) %} + +```bash +$ docker run -d --name="home-assistant" -v /path/to/your/config:/config -v /etc/localtime:/etc/localtime:ro --net=host homeassistant/raspberrypi3-homeassistant:0.XX.x +``` + +The Docker container for Raspberry Pi 3 does not have a 'latest' tag so the version number must be specified explicitly, i.e. 0.68.0. This goes for both CLI and Docker Compose. + + ### {% linkable_title macOS %} -When using `boot2docker` on macOS you are unable to map the local time to your Docker container. Use `-e "TZ=America/Los_Angeles"` instead of `-v /etc/localtime:/etc/localtime:ro`. Replace "America/Los_Angeles" with [your timezone](http://en.wikipedia.org/wiki/List_of_tz_database_time_zones). +When using `docker-ce` (or `boot2docker`) on macOS, you are unable to map the local timezone to your Docker container ([Docker issue](https://github.com/docker/for-mac/issues/44)). Instead of `-v /etc/localtime:/etc/localtime:ro`, just pass in the timezone environment variable when you launch the container, e.g, `-e "TZ=America/Los_Angeles"`. Replace "America/Los_Angeles" with [your timezone](http://en.wikipedia.org/wiki/List_of_tz_database_time_zones). -Additionally, if your expectation is that you will be able to browse directly to `http://localhost:8123` on your macOS host, then you will also need to replace the `--net=host` switch with `-p 8123:8123`. This is currently the only way to forward ports on to your actual host (macOS) machine instead of the virtual machine inside `xhyve`. More detail on this can be found in [the docker forums](https://forums.docker.com/t/should-docker-run-net-host-work/14215/10). +If you wish to browse directly to `http://localhost:8123` from your macOS host, meaning forward ports directly to the container, replace the `--net=host` switch with `-p 8123:8123`. More detail can be found in [the docker forums](https://forums.docker.com/t/should-docker-run-net-host-work/14215/10). ```bash $ docker run -d --name="home-assistant" -v /path/to/your/config:/config -e "TZ=America/Los_Angeles" -p 8123:8123 homeassistant/home-assistant ``` +Alternatively, `docker-compose` works with any recent release of `docker-ce` on macOS. Note that (further down this page) we provide an example `docker-compose.yml` however it differs from the `docker run` example above. To make the .yml directives match, you would need to make _two_ changes: first add the equivalent `ports:` directive, then _remove_ the `network_mode: host` section. This is because `Port mapping is incompatible with network_mode: host:`. More details can be found at [Docker networking docs](https://docs.docker.com/engine/userguide/networking/#default-networks). Note also the `/dev/tty*` device name used by your Arduino etc. devices will differ from the Linux example, so the compose `mount:` may require updates. + ### {% linkable_title Windows %} When running Home Assistant in Docker on Windows, you may have some difficulty getting ports to map for routing (since the `--net=host` switch actually applies to the hypervisor's network interface). To get around this, you will need to add port proxy ipv4 rules to your local Windows machine, like so (Replacing '192.168.1.10' with whatever your Windows IP is, and '10.0.50.2' with whatever your Docker container's IP is): @@ -40,19 +51,19 @@ This will let you access your Home Assistant portal from http://localhost:8123, ### {% linkable_title Synology NAS %} -As Synology within DSM now supports Docker (with a neat UI), you can simply install Home Assistant using docker without the need for command-line. For details about the package (including compatability-information, if your NAS is supported), see https://www.synology.com/en-us/dsm/app_packages/Docker +As Synology within DSM now supports Docker (with a neat UI), you can simply install Home Assistant using docker without the need for command-line. For details about the package (including compatibility-information, if your NAS is supported), see https://www.synology.com/en-us/dsm/app_packages/Docker The steps would be: * Install "Docker" package on your Synology NAS * Launch Docker-app and move to "Registry"-section -* Find "homeassistant/home-assistant" with registry and click on "Download" +* Find "homeassistant/home-assistant" within registry and click on "Download". Choose the "latest" tag, this will make verison updates easier later on. * Wait for some time until your NAS has pulled the image * Move to the "Image"-section of the Docker-app * Click on "Launch" -* Choose a container-name you want (e.g. "homeassistant") +* Choose a container-name you want (e.g., "homeassistant") * Click on "Advanced Settings" * Set "Enable auto-restart" if you like -* Within "Volume" click on "Add Folder" and choose either an existing folder or add a new folder. The "mount point" has to be "/config", so that Home Assistant will use it for the configs and logs. +* Within "Volume" click on "Add Folder" and choose either an existing folder or add a new folder. The "mount path" has to be "/config", so that Home Assistant will use it for the configs and logs. * Within "Network" select "Use same network as Docker Host" * To ensure that Home Assistant displays the correct timezone go to the "Environment" tab and click the plus sign then add `variable` = `TZ` & `value` = `Europe/London` choosing [your correct timezone](http://en.wikipedia.org/wiki/List_of_tz_database_time_zones) * Confirm the "Advanced Settings" @@ -60,9 +71,9 @@ The steps would be: * Your Home Assistant within Docker should now run and will serve the web interface from port 8123 on your Docker host (this will be your Synology NAS IP address - for example `http://192.168.1.10:8123`) Remark: to update your Home Assistant on your Docker within Synology NAS, you just have to do the following: -* Go to the Docker-app and move to "Image"-section -* Download the "homeassistant/home-assistant" image - don't care, that it is already there -* wait until the system-message/-notification comes up, that the download is finished (there is no progress bar) +* Go to the Docker-app and move to "Registry"-section +* Find "homeassistant/home-assistant" within registry and click on "Download". Choose the "latest" tag, this will overwrite your current image to the latest version. +* Wait until the system-message/-notification comes up, that the download is finished (there is no progress bar) * Move to "Container"-section * Stop your container if it's running * Right-click on it and select "Action"->"Clear". You won't lose any data, as all files are stored in your config-directory @@ -76,11 +87,130 @@ Remark: to restart your Home Assistant within Synology NAS, you just have to do If you want to use a USB Bluetooth adapter or Z-Wave USB Stick with Home Assistant on Synology Docker these instructions do not correctly configure the container to access the USB devices. To configure these devices on your Synology Docker Home Assistant you can follow the instructions provided [here](https://philhawthorne.com/installing-home-assistant-io-on-a-synology-diskstation-nas/) by Phil Hawthorne.

-### {% linkable_title Restart %} +### {% linkable_title QNAP NAS %} -This will launch Home Assistant and serve the web interface from port 8123 on your Docker host. +As QNAP within QTS now supports Docker (with a neat UI), you can simply install Home Assistant using docker without the need for command-line. For details about the package (including compatibility-information, if your NAS is supported), see https://www.qnap.com/solution/container_station/en/index.php + +The steps would be: + + - Install "Container Station" package on your Qnap NAS + - Launch Container Station and move to "Create Container"-section + - Search image "homeassistant/home-assistant" with Docker hub and click on "Install" + - Choose "latest" version and click next + - Choose a container-name you want (e.g., "homeassistant") + - Click on "Advanced Settings" + - Within "Shared Folders" click on "Volume from host" > "Add" and choose either an existing folder or add a new folder. The "mount point has to be `/config`, so that Home Assistant will use it for the configuration and logs. + - Within "Network" and select Network Mode to "Host" + - To ensure that Home Assistant displays the correct timezone go to the "Environment" tab and click the plus sign then add `variable` = `TZ` & `value` = `Europe/London` choosing [your correct timezone](http://en.wikipedia.org/wiki/List_of_tz_database_time_zones) + - Click on "Create" + - Wait for some time until your NAS has created the container + - Your Home Assistant within Docker should now run and will serve the web interface from port 8123 on your Docker host (this will be your Qnap NAS IP address - for example `http://192.xxx.xxx.xxx:8123`) + +Remark: To update your Home Assistant on your Docker within Qnap NAS, you just remove container and image and do steps again (Don't remove "config" folder). + +If you want to use a USB Bluetooth adapter or Z-Wave USB stick with Home Assistant on Qnap Docker, follow those steps: + +#### {% linkable_title Z-Wave %} + + - Connect to your NAS over SSH + - Load cdc-acm kernel module(when nas restart need to run this command) + `insmod /usr/local/modules/cdc-acm.ko` + - Find USB devices attached. Type command: + `ls /dev/tty*` + The above command should show you any USB devices plugged into your NAS. If you have more than one, you may get multiple items returned. Like : `ttyACM0` + + - Run Docker command: + `docker run --name home-assistant --net=host --privileged -itd -v /share/CACHEDEV1_DATA/Public/homeassistant/config:/config -e variable=TZ -e value=Europe/London --device /dev/ttyACM0 homeassistant/home-assistant` + + `-v` is your config path + `-e` is set timezone + + - Edit `configuration.yaml` + +```yaml +zwave: + usb_path: /dev/ttyACM0 +``` + +That will tell Home Assistant where to look for our Z-wave radio. + +#### {% linkable_title Bluetooth %} + + - Connect to your NAS over SSH + - Run Docker command: + `docker run --name home-assistant --net=host --privileged -itd -v /share/CACHEDEV1_DATA/Public/homeassistant/config:/config -e variable=TZ -e value=Europe/London -v /dev/bus/usb:/dev/bus/usb -v /var/run/dbus:/var/run/dbus homeassistant/home-assistant` + + First `-v` is your config path + `-e` is set timezone + + - Edit the `configuration.yaml` file + +```yaml +device_tracker: + - platform: bluetooth_tracker +``` + +### {% linkable_title Restart %} If you change the configuration you have to restart the server. To do that you have 2 options. 1. You can go to the service developer tool icon service developer tools, select the service `homeassistant/restart` and click "Call Service". 2. Or you can restart it from a terminal by running `docker restart home-assistant` + +### {% linkable_title Docker Compose %} + +As the docker command becomes more complex, switching to `docker-compose` can be preferable and support automatically restarting on failure or system restart. Create a `docker-compose.yml` file: + +```yaml + version: '3' + services: + homeassistant: + container_name: home-assistant + image: homeassistant/home-assistant + volumes: + - /path/to/your/config:/config + - /etc/localtime:/etc/localtime:ro + restart: always + network_mode: host +``` + +Then start the container with: + +```bash +$ docker-compose up -d +``` + +To restart Home Assistant when you have changed configuration: + +```bash +$ docker-compose restart +``` + +### {% linkable_title Exposing Devices %} + +In order to use Z-Wave, ZigBbee or other components that require access to devices, you need to map the appropriate device into the container. Ensure the user that is running the container has the correct privileges to access the `/dev/tty*` file, then add the device mapping to your docker command: + +```bash +$ docker run -d --name="home-assistant" -v /path/to/your/config:/config \ + -v /etc/localtime:/etc/localtime:ro --device /dev/ttyUSB0:/dev/ttyUSB0 \ + --net=host homeassistant/home-assistant +``` + +or in a `docker-compose.yml` file: + +```yaml + version: '3' + services: + homeassistant: + container_name: home-assistant + image: homeassistant/home-assistant + volumes: + - /path/to/your/config:/config + - /etc/localtime:/etc/localtime:ro + devices: + - /dev/ttyUSB0:/dev/ttyUSB0 + - /dev/ttyUSB1:/dev/ttyUSB1 + - /dev/ttyACM0:/dev/ttyACM0 + restart: always + network_mode: host +``` diff --git a/source/_docs/installation/freenas.markdown b/source/_docs/installation/freenas.markdown index acf67bb0b88..6679275764c 100644 --- a/source/_docs/installation/freenas.markdown +++ b/source/_docs/installation/freenas.markdown @@ -33,7 +33,7 @@ Create an `/etc/rc.local` file to enable Home Assistant to start when the jail s ```bash -# cd / && mkdir /home && /home/.homeassistant/ +# cd / && mkdir -p /home/.homeassistant ``` ```bash diff --git a/source/_docs/installation/hassbian.markdown b/source/_docs/installation/hassbian.markdown index a9177f3ab1d..9c12947cd46 100644 --- a/source/_docs/installation/hassbian.markdown +++ b/source/_docs/installation/hassbian.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Hassbian" -description: "Instructions to flash the Home Assistant HASSbian image on a Raspberry Pi." +description: "Instructions to flash the Home Assistant Hassbian image on a Raspberry Pi." date: 2016-09-26 21:00 sidebar: true comments: false @@ -10,14 +10,17 @@ footer: true redirect_from: /getting-started/hassbian/ --- -Hassbian is our customized operating system for the Raspberry Pi 3. It is the easiest way of installing Home Assistant. +Hassbian is our customized operating system for the Raspberry Pi Zero, 2,3 and 3B+. It is one of the easiest ways of installing Home Assistant. - - [Install Hassbian][install] - - [Customize your installation][customize] - - [Pi specific integrations][integrations] - - [Learn how to perform common tasks][common] + - [Install Hassbian](/docs/hassbian/installation/) + - [Customize your installation](/docs/hassbian/customization/) + - [Pi specific integrations](/docs/hassbian/integrations/) + - [Learn how to perform common tasks](/docs/hassbian/common-tasks/) -[install]: /docs/hassbian/installation/ -[customize]: /docs/hassbian/customization/ -[common]: /docs/hassbian/common-tasks/ -[integrations]: /docs/hassbian/integrations/ +### {% linkable_title Activating the virtual environment %} + +When instructions tell you to activate the virtual environment to install a Python library, or perform some tasks, the following commands will do this: + +```bash +$ sudo -u homeassistant -H -s +$ source /srv/homeassistant/bin/activate``` diff --git a/source/_docs/installation/hassbian/common-tasks.markdown b/source/_docs/installation/hassbian/common-tasks.markdown index 6fddcd360b6..7c8b9b5b880 100644 --- a/source/_docs/installation/hassbian/common-tasks.markdown +++ b/source/_docs/installation/hassbian/common-tasks.markdown @@ -1,8 +1,8 @@ --- layout: page title: "Common tasks on Hassbian" -description: "Instructions how to do common tasks on Hassbian." -date: 2016-09-26 21:00 +description: "Instructions on how to do common tasks on Hassbian." +date: 2018-06-03 11:00 sidebar: true comments: false sharing: true @@ -11,7 +11,7 @@ redirect_from: /docs/hassbian/common-tasks/ --- ### {% linkable_title Login to the Raspberry Pi %} -To login to your Raspberry Pi running HASSbian you're going to be using a ssh client. Depending on your platform there are several alternatives for doing this. Linux and Max OS generally have a ssh client installed. Windows users are recommended to download and install the ssh client [Putty][ssh-putty]. +To login to your Raspberry Pi running Hassbian you're going to be using a ssh client. Depending on your platform there are several alternatives for doing this. Linux and Max OS generally have a ssh client installed. Windows users are recommended to download and install the ssh client [Putty][ssh-putty]. Connect to the Raspberry Pi over ssh. Default user name is `pi` and password is `raspberry`. Linux and Mac OS users execute the following command in a terminal. @@ -28,23 +28,23 @@ Optionally, starting with Windows 10 anniversary update, you can use the built-i Log in as the `pi` account and execute the following commands: ```bash -$ sudo systemctl stop home-assistant@homeassistant.service +$ sudo systemctl stop home-assistant@homeassistant.service ``` Replace `stop` with `start` or `restart` to get the desired functionality. -To get the current state of the `homeassistant.service` replace `stop` with `status`. +To get the current state of the `homeassistant.service` replace `stop` with `status`. ### {% linkable_title Update Home Assistant %}

-You can also use `hassbian-config` to automate the process by running `sudo hassbian-config upgrade home-assistant` +You can use `hassbian-config` to automate the process by running `sudo hassbian-config upgrade homeassistant`

Log in as the `pi` account and execute the following commands: ```bash -$ sudo systemctl stop home-assistant@homeassistant.service -$ sudo su -s /bin/bash homeassistant +$ sudo systemctl stop home-assistant@homeassistant.service +$ sudo -u homeassistant -H -s $ source /srv/homeassistant/bin/activate $ pip3 install --upgrade homeassistant $ exit @@ -53,18 +53,18 @@ $ sudo systemctl start home-assistant@homeassistant.service This will in order do the following: -- Stop the Home Assistant service running on HASSbian +- Stop the Home Assistant service running on Hassbian - Open a shell as the `homeassistant` user running the Homeassistant service and that has ownership over the Home Assistant installation. - Change into the virtual Python environment at `/srv/homeassistant/` containing the Home Assistant installation. - Upgrade the Home Assistant installation to the latest release. - Exit the shell and return to the `pi` user. -- Restart the Home Assistant service. +- Start the Home Assistant service. ### {% linkable_title Manually launch Home Assistant %} Log in as the `pi` account and execute the following commands: ```bash -$ sudo su -s /bin/bash homeassistant +$ sudo -u homeassistant -H -s $ source /srv/homeassistant/bin/activate $ hass ``` @@ -75,7 +75,7 @@ This will start Home Assistant in your shell and output anything that ends up in Log in as the `pi` account and execute the following commands: ```bash -$ sudo su -s /bin/bash homeassistant +$ sudo -u homeassistant -H -s $ source /srv/homeassistant/bin/activate $ hass --script check_config ``` @@ -86,7 +86,7 @@ This will output any errors in your configuration files to console. Log in as the `pi` account and execute the following commands: ```bash -$ sudo su -s /bin/bash homeassistant +$ sudo -u homeassistant -H -s $ cd /home/homeassistant/.homeassistant $ nano home-assistant.log ``` @@ -109,7 +109,7 @@ $ sudo journalctl -fu home-assistant@homeassistant.service Log in as the `pi` account and execute the following commands: ```bash -$ sudo su -s /bin/bash homeassistant +$ sudo -u homeassistant -H -s $ cd /home/homeassistant/.homeassistant $ nano configuration.yaml ``` diff --git a/source/_docs/installation/hassbian/customization.markdown b/source/_docs/installation/hassbian/customization.markdown index 68a544461db..e1c968a0c41 100644 --- a/source/_docs/installation/hassbian/customization.markdown +++ b/source/_docs/installation/hassbian/customization.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Customization" -description: "Instructions to flash the Home Assistant HASSbian image on a Raspberry Pi." +description: "Instructions to flash the Home Assistant Hassbian image on a Raspberry Pi." date: 2016-09-26 21:00 sidebar: true comments: false @@ -10,26 +10,34 @@ footer: true redirect_from: /docs/hassbian/customization/ --- -To allow you to customize your installation further, we have included a tool called `hassbian-config`. This tool comes with a set of packages that can easily be installed or upgraded for easier customization of your Home Assistant installation. -The tool is available by running `hassbian-config`. +To allow you to customize your installation further, we have included a tool called `hassbian-config`. This tool comes with a set of suites that can easily be installed or upgraded for easier customization of your Home Assistant installation. +The tool is available by running `hassbian-config`. ### Install scripts -To view the available packages run `hassbian-config show` and `sudo hassbian-config install PACKAGENAME`. - - Install Hue. Configures the Python executable to allow usage of low numbered ports for use with Emulated Hue component thats used with Amazon Echo, Google Home and Mycroft.ai. - - Install MariaDB. This script installs MariaDB and it's dependencies for use with the recorder component in Home Assistant. No database or database user is created during this setup and will need to be created manually. - - Install Mosquitto MQTT server. Installs the latest Mosquitto package and client tools from the Mosquitto projects official repository. Now includes websocket support. - - Install Libcec. Adds local [HDMI CEC support][cec]. *This scipt is currently brooken upstream since it currently doesn't build properly for Python >3.4* - - Install Samba. Allows anyone on your network to edit your configuration from any computer. This share is unsecured and it's usage is not recommended if you share your network with others. - - Install Tradfri. Installs dependencies for using IKEA Trådfri. - - Install Duck DNS auto renewal. This script adds an cron job to auto update you the WAN IP address for the defined domain. Before running this script you should already have an Duck DNS account, during the installation you will be asked to supply your domain name and the token for your account. - - Install an web terminal for easy access to ssh in an web browser. This script installs an web terminal called 'shellinabox' to you system that give you SSH access in you web browser. +To view the available suites run `hassbian-config show` or have a look at the [hassbian-scripts repository][hassbian-repo]. +These are some of the available suites: + - [AppDaemon](https://github.com/home-assistant/hassbian-scripts/blob/master/docs/appdaemon.md) + - [Duck DNS](https://github.com/home-assistant/hassbian-scripts/blob/master/docs/duckdns.md) _This can also be configured to generate Let's Encrypt SSL certificates_ + - [Homebridge](https://github.com/home-assistant/hassbian-scripts/blob/master/docs/homebridge.md) + - [Mosquitto](https://github.com/home-assistant/hassbian-scripts/blob/master/docs/mosquitto.md) + - [Samba](https://github.com/home-assistant/hassbian-scripts/blob/master/docs/samba.md) + - [Webterminal](https://github.com/home-assistant/hassbian-scripts/blob/master/docs/webterminal.md) + - Various database engines. + - [MariaDB](https://github.com/home-assistant/hassbian-scripts/blob/master/docs/mariadb.md) + - [PostgreSQL](https://github.com/home-assistant/hassbian-scripts/blob/master/docs/postgresql.md) + - [MS SQL](https://github.com/home-assistant/hassbian-scripts/blob/master/docs/mssql.md) -#### Upgrade scripts -To view the available packages run `hassbian-config show` and `sudo hassbian-config upgrade PACKAGENAME`. -- Upgrade your Home Assistant installation. -- Upgrade your HASSbian installation. -- Upgrade HASSbian-scripts. -- Upgrade HASSbian-scripts from dev branch. + To install any of them simply run `sudo hassbian-config install SUITE`. + +### Upgrade scripts +To view the available suites run `hassbian-config show` or have a look at the [hassbian-scripts repository][hassbian-repo]. +These are some of the available suites: +- [AppDaemon](https://github.com/home-assistant/hassbian-scripts/blob/master/docs/appdaemon.md) +- [Hassbian](https://github.com/home-assistant/hassbian-scripts/blob/master/docs/hassbian.md) +- [Home Assistant](https://github.com/home-assistant/hassbian-scripts/blob/master/docs/homeassistant.md) +- [hassbian-config (hassbian-sctipts)](https://github.com/home-assistant/hassbian-scripts/blob/master/docs/hassbian_config.md) + +To upgrade any of them simply run `sudo hassbian-config upgrade SUITE`. For more information about this tool have a look at the [hassbian-scripts repository][hassbian-repo]. diff --git a/source/_docs/installation/hassbian/installation.markdown b/source/_docs/installation/hassbian/installation.markdown index 3c4acb26e9d..9c0f5934586 100644 --- a/source/_docs/installation/hassbian/installation.markdown +++ b/source/_docs/installation/hassbian/installation.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Installing Hassbian" -description: "Instructions to flash the Home Assistant HASSbian image on a Raspberry Pi." +description: "Instructions to flash the Home Assistant Hassbian image on a Raspberry Pi." date: 2016-09-26 21:00 sidebar: true comments: false @@ -10,22 +10,23 @@ footer: true redirect_from: /docs/hassbian/installation/ --- -The easiest way to install Home Assistant on your Raspberry Pi is by using HASSbian: a Raspberry Pi image with Home Assistant built-in. The image will install the latest version of Home Assistant on initial boot (~10 minutes). +One of the easiest ways to install Home Assistant on your Raspberry Pi Zero, 2, 3 and 3B+ is by using Hassbian: a Raspberry Pi image with Home Assistant built-in. The image will install the latest version of Home Assistant on initial boot (~10 minutes). - 1. [Download the Hassbian image][image-download] (364 MB) - 2. Use [Etcher][etcher] to flash the image to your SD card - 3. Ensure your Raspberry Pi has wired access to the internet for the entire process or configure your wireless network settings **before proceeding to step 4**. - 4. Insert SD card to Raspberry Pi and turn it on. Initial installation of Home Assistant will take about 5 minutes. + 1. [Download the Hassbian image][image-download] + 2. Use [Etcher][etcher] to flash the image to your SD card. We recommend at least a 32 GB SD card to avoid running out of space. + 3. Ensure your Raspberry Pi has wired access to the internet for the entire process or configure your [wireless network settings](#wireless-network) **before proceeding to step 4**. + 4. Insert SD card to Raspberry Pi and turn it on. Initial installation of Home Assistant will take about 10 minutes.

Please remember to ensure you're using an [appropriate power supply](https://www.raspberrypi.org/help/faqs/#powerReqs) with your Pi. Mobile chargers may not be suitable, since some are designed to only provide the full power with that manufacturer's handsets.

-These instructions are also available as a [video](https://www.youtube.com/watch?v=iIz6XqDwHEk). Additional information is available in this [video](https://www.youtube.com/watch?v=tCGlQSsQ-Mc). +These instructions are also available as a [video](https://www.youtube.com/watch?v=iIz6XqDwHEk). +Additional information is available in this [video](https://www.youtube.com/watch?v=tCGlQSsQ-Mc). -After initial boot an installer will run in the background and takes around 15 minutes to complete, after it has finished, you will be prompted to login: `hassbian login:`. Installation is complete at this point. The default username is `pi` and the password is `raspberry`. +After initial boot an installer will run in the background, this will download and install the newest version of [hassbian-config](https://github.com/home-assistant/hassbian-scripts) and Home-Assistant, this takes around 10 minutes to complete, after it has finished, you will be prompted to login: `hassbian login:`. Installation is complete at this point. The default username is `pi` and the password is `raspberry`. -Open a browser on a device that's connected to the same WiFi network as your Raspberry Pi and point it to Home Assistant at [http://hassbian.local:8123]. If you want to login via SSH, the default username is `pi` and password is `raspberry` (please change this by running `passwd`). The Home Assistant configuration is located at `/home/homeassistant/.homeassistant/`. +Open a browser on a device that's connected to the same network as your Raspberry Pi and point it to Home Assistant at [http://hassbian.local:8123]. If you want to login via SSH, the default username is `pi` and password is `raspberry` (please change this by running `passwd`). The Home Assistant configuration is located at `/home/homeassistant/.homeassistant/`. If you find that the web page is not reachable after 30 minutes or so, check that you have files in `/home/homeassistant/.homeassistant/`, if there are no files in this location then run the installer manually using this command: `sudo systemctl start install_homeassistant.service`. @@ -35,7 +36,7 @@ The following extras are included on the image: - GPIO pins are ready to use. - Bluetooth is ready to use (supported models only, no Bluetooth LE). - SSH server is enabled. - - A tool called [`hassbian-config`](https://github.com/home-assistant/hassbian-scripts#hassbian-config-hassbian-config). + - A tool called [`hassbian-config`](https://github.com/home-assistant/hassbian-scripts#hassbian-scripts). ### {% linkable_title Wireless Network %} @@ -51,8 +52,20 @@ network={ psk="YOUR_PASSWORD" } ``` + You may need to adjust the country code depending upon where you are. A list of codes can be found [here](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2#Officially_assigned_code_elements). +If you are running in trouble with your Wifi connection (for [further details](https://www.raspberrypi.org/forums/viewtopic.php?t=207882)), check the output of the following command: + +```bash +$ sudo rfkill list +0: phy0: Wireless LAN +Soft blocked: yes +Hard blocked: no +``` + +To unblock it, execute `$ sudo rfkill unblock wifi`. + ### {% linkable_title Technical Details %} - Home Assistant is installed in a virtual Python environment at `/srv/homeassistant/` @@ -64,3 +77,22 @@ You may need to adjust the country code depending upon where you are. A list of [http://hassbian.local:8123]: http://hassbian.local:8123 [wifi-setup]: https://www.raspberrypi.org/documentation/configuration/wireless/wireless-cli.md +## {% linkable_title Updating %} + +The [Hassbian Scripts](https://github.com/home-assistant/hassbian-scripts) are the easiest way of updating both the host operating system, and Home Assistant. + +### {% linkable_title Updating Home Assistant %} + +SSH to your system as the user `pi` and run: + +```bash +$ sudo hassbian-config upgrade homeassistant +``` + +### {% linkable_title Updating the host operating system %} + +SSH to your system as the user `pi` and run: + +```bash +$ sudo hassbian-config upgrade hassbian +``` diff --git a/source/_docs/installation/hassbian/integrations.markdown b/source/_docs/installation/hassbian/integrations.markdown index e48f9e35367..d6f7a3fd0c1 100644 --- a/source/_docs/installation/hassbian/integrations.markdown +++ b/source/_docs/installation/hassbian/integrations.markdown @@ -26,11 +26,11 @@ For more details about the GPIO layout, visit the [documentation](https://www.ra Permission have been given to the `homeassistant` user to use the GPIO pins and all of the following components should require no underlying changes to work. Just follow the component pages for each on how to add them to your Home Assistant installation. - - [DHT Sensor](/components/sensor.dht/). - - [Raspberry Pi Cover](/components/cover.rpi_gpio/). - - [Raspberry PI GPIO Binary Sensor](/components/binary_sensor.rpi_gpio/). - - [Raspberry PI GPIO Switch](/components/switch.rpi_gpio/). - - [Raspberry Pi RF Switch](/components/switch.rpi_rf/). + - [DHT Sensor](/components/sensor.dht/) + - [Raspberry Pi Cover](/components/cover.rpi_gpio/) + - [Raspberry Pi GPIO Binary Sensor](/components/binary_sensor.rpi_gpio/) + - [Raspberry Pi GPIO Switch](/components/switch.rpi_gpio/) + - [Raspberry Pi RF Switch](/components/switch.rpi_rf/) ### {% linkable_title Raspberry Pi Camera %} diff --git a/source/_docs/installation/hassbian/upgrading.markdown b/source/_docs/installation/hassbian/upgrading.markdown index 7ef479edcb7..1a6b37d4968 100644 --- a/source/_docs/installation/hassbian/upgrading.markdown +++ b/source/_docs/installation/hassbian/upgrading.markdown @@ -1,8 +1,8 @@ --- layout: page title: "Upgrading Hassbian" -description: "Instructions how to upgrade Hassbian to the latest version." -date: 2016-09-26 21:00 +description: "Instructions on how to upgrade Hassbian to the latest version." +date: 2018-06-03 11:00 sidebar: true comments: false sharing: true @@ -10,7 +10,7 @@ footer: true redirect_from: /docs/hassbian/upgrading/ --- -HASSbian is based on Raspbian and uses the same repositories. Any changes to Raspbian will be reflected in HASSbian. To update and upgrade system packages and installed software (excluding Home Assistant) do the following. +Hassbian is based on Raspbian and uses the same repositories. Any changes to Raspbian will be reflected in Hassbian. To update and upgrade system packages and installed software (excluding Home Assistant) do the following. Log in as the `pi` account and execute the following commands: ```bash @@ -18,17 +18,16 @@ $ sudo apt-get update $ sudo apt-get -y upgrade ``` - #### {% linkable_title Updating Home Assistant %}

-You can also use `hassbian-config` to automate the process by running `sudo hassbian-config upgrade home-assistant` +You can use `hassbian-config` to automate the process by running `sudo hassbian-config upgrade homeassistant`

To update the Home Assistant installation execute the following command as the `pi` user. ```bash $ sudo systemctl stop home-assistant@homeassistant.service -$ sudo su -s /bin/bash homeassistant +$ sudo -u homeassistant -H -s $ source /srv/homeassistant/bin/activate $ pip3 install --upgrade homeassistant $ exit diff --git a/source/_docs/installation/macos.markdown b/source/_docs/installation/macos.markdown index 25b3706db7c..51292c43ab2 100644 --- a/source/_docs/installation/macos.markdown +++ b/source/_docs/installation/macos.markdown @@ -11,7 +11,7 @@ footer: true [macOS](http://www.apple.com/macos/) is available by default on Apple computer. If you run a different operating system, please refer to the other section of the documentation. -To run Home Assistant on macOS you need to install Python first. Download Python from https://www.python.org/downloads/mac-osx/ and follow the instructions of the installer. +To run Home Assistant on macOS you need to install Python first. Download Python 3.5.3 or later from https://www.python.org/downloads/mac-osx/ and follow the instructions of the installer. Open a terminal and install Home Assistant. diff --git a/source/_docs/installation/raspberry-pi-all-in-one.markdown b/source/_docs/installation/raspberry-pi-all-in-one.markdown index 485fc64ffdb..f983bb9d0be 100644 --- a/source/_docs/installation/raspberry-pi-all-in-one.markdown +++ b/source/_docs/installation/raspberry-pi-all-in-one.markdown @@ -8,124 +8,6 @@ footer: true redirect_from: /getting-started/installation-raspberry-pi-all-in-one/ --- -The [Raspberry Pi All-In-One Installer](https://github.com/home-assistant/fabric-home-assistant) deploys a complete Home Assistant server including support for MQTT with websockets, Z-Wave, and the OpenZWave Control Panel. - -

-Please remember to ensure you're using an [appropriate power supply](https://www.raspberrypi.org/help/faqs/#powerReqs) with your Pi. Mobile chargers may not be suitable, since some are designed to only provide the full power with that manufacturer's handsets. -

- -The only requirement is that you have a Raspberry Pi with a fresh installation of [Raspbian](https://www.raspberrypi.org/downloads/raspbian/) Jessie (Stretch is not supported at this time) connected to your network. - -

-Note that as of 2016-11-30 SSH is disabled by default in the official Raspbian images. Adding an empty file called `ssh` to `/boot/` on the FAT32 partition will enable it. More information is on the Raspberry Pi Foundation [Blog](https://www.raspberrypi.org/blog/page/2/?fish#a-security-update-for-raspbian-pixel). -

- -Irrespective of whether you use SSH to connect to the Pi from another computer or not, you need SSH to install Home Assistant. So go ahead and enable SSH. - -* Login to Raspberry Pi. For example with `ssh pi@your_raspberry_pi_ip` -* Run the following command: -

- This command is a one-liner and not run as sudo. + The All-In-One Installer is deprecated, you will have problems updating Home Assistant in 2018. Please move to another [installation method](/getting-started/).

- -```bash -$ curl -O https://raw.githubusercontent.com/home-assistant/fabric-home-assistant/master/hass_rpi_installer.sh && sudo chown pi:pi hass_rpi_installer.sh && bash hass_rpi_installer.sh -``` - -Installation will take approx. 1-2 hours depending on the Raspberry Pi model the installer is being run against. The installer will identitfy what Raspberry Pi hardware revision you are using and adjust commands accordingly. A complete log of the install is located at: `/home/pi/fabric-home-assistant/installation_report.txt` The installer has been updated to simply log any errors encountered, but resume installing. Please consult the "installation report" if your install encountered issues. - -[BRUH automation](http://www.bruhautomation.com) has created [a tutorial video](https://www.youtube.com/watch?v=VGl3KTrYo6s) explaining how to install Raspbian on your Raspberry Pi and install Home Assistant using the All-In-One Installer. - -Once rebooted, your Raspberry Pi will be up and running with Home Assistant. You can access it at [http://your_raspberry_pi_ip:8123](http://your_raspberry_pi_ip:8123). - -The Home Assistant configuration is located at `/home/homeassistant/.homeassistant` (or `/home/hass/.homeassistant` if installed prior to December 2016). The [virtualenv](https://virtualenv.pypa.io/en/latest/) with the Home Assistant installation is located at `/srv/homeassistant/homeassistant_venv`. As part of the secure installation, a new user (**homeassistant**) is added to your Raspberry Pi to run Home Assistant. This is a system account and does not have login or other abilities by design. When editing your `configuration.yaml` files, you will need to run the commands with `sudo` or by switching user. - -

- *Windows users*: Setting up WinSCP to allow this seemlessly is at the end of this page. -

- -By default, installation makes use of a Python Virtualenv. If you wish to not follow this recommendation, you may add the flag `-n` to the end of the install command specified above. - -The All-In-One Installer script will do the following automatically: - -* Create all needed directories -* Create needed service accounts -* Install OS and Python dependencies -* Setup a python virtualenv to run Home Assistant and components inside. -* Run as `homeassistant` service account -* Install Home Assistant in a virtualenv -* Install Mosquitto with websocket support running on ports 1883 and 9001 -* Build and Install Python-openzwave in the Home Assistant virtualenv -* Build OpenZWave Control Panel in `/srv/homeassistant/src/open-zwave-control-panel` -* Add Home Assistant to systemd services to start at boot - -### {% linkable_title Upgrading %} - -To upgrade the All-In-One setup manually: - -* Login to Raspberry Pi `ssh pi@your_raspberry_pi_ip` -* Change to homeassistant user `sudo su -s /bin/bash homeassistant` -* Change to virtual environment `source /srv/homeassistant/homeassistant_venv/bin/activate` -* Update Home Assistant `pip3 install --upgrade homeassistant` -* Type `exit` to logout the hass user and return to the `pi` user. - -
-**If you deployed Home Assistant via the AiO installer prior to December 2016** -* Login to Raspberry Pi `ssh pi@your_raspberry_pi_ip` -* Change to homeassistant user `sudo su -s /bin/bash hass` -* Change to virtual environment `source /srv/hass/hass_venv/bin/activate` -* Update Home Assistant `pip3 install --upgrade homeassistant` -* Type `exit` to logout the hass user and return to the `pi` user. -
- -After upgrading, you can restart Home Assistant a few different ways: - -* Restarting the Raspberry Pi `sudo reboot` -* Restarting the Home-Assistant Service `sudo systemctl restart home-assistant.service` - -### {% linkable_title To change the MQTT default password %} - -* Login to Raspberry Pi `ssh pi@your_raspberry_pi_ip` -* Change password `sudo mosquitto_passwd /etc/mosquitto/pwfile pi` -* Restart mosquitto `sudo systemctl restart mosquitto.service` -* Be sure to update your `configuration.yaml` to reflect the new password. - -### {% linkable_title Using the OZWCP web application %} - -To launch the OpenZWave Control Panel (OZWCP) web application: - -* Make sure Home Assistant is not running! So stop that first -* Login to Raspberry Pi `ssh pi@your_raspberry_pi_ip` -* Change to the OZWCP directory `cd /srv/homeassistant/src/open-zwave-control-panel/` -* Launch the control panel `sudo ./ozwcp -p 8888` -* Open a web browser to `http://your_pi_ip:8888` -* Specify your Z-Wave controller, for example `/dev/ttyACM0` and hit initialize - -

- If OZWCP is running really slow verify that your not running Home Assistant or have another page running OZWCP open or strange errors might occur. -

- -
-**If you deployed Home Assistant via the AiO installer prior to December 2016** -* Make sure Home Assistant is not running! So stop that first -* Login to Raspberry Pi `ssh pi@your_raspberry_pi_ip` -* Change to the OZWCP directory `cd /srv/hass/src/open-zwave-control-panel/` -* Launch the control panel `sudo ./ozwcp -p 8888` -* Open a web browser to `http://your_pi_ip:8888` -* Specify your Z-Wave controller, for example `/dev/ttyACM0` and hit initialize -
- -

-Don't check the USB box regardless of using a USB based device. -

- -### {% linkable_title Using the GPIOs %} - -The (**homeassistant**) user is added to the GPIO group as part of the install now. - -### {% linkable_title WinSCP %} - -If you are Windows users who is using [WinSCP](https://winscp.net/), please note that after running the installer, you will need to modify settings allowing you to "switch users" to edit your configuration files. - -First create a new session on WinSCP using Protocol **SCP** pointing to your Pi IP address and port 22 and then modify the needed setting by click on **Advanced...** -> **Environment** -> **SCP/Shell** -> **Shell** and selecting `sudo su -`. diff --git a/source/_docs/installation/raspberry-pi.markdown b/source/_docs/installation/raspberry-pi.markdown index 23d9396ad9e..aa5dee1502e 100644 --- a/source/_docs/installation/raspberry-pi.markdown +++ b/source/_docs/installation/raspberry-pi.markdown @@ -2,7 +2,7 @@ layout: page title: "Manual installation on a Raspberry Pi" description: "Instructions to install Home Assistant on a Raspberry Pi running Raspbian Lite." -date: 2016-09-05 16:00 +date: 2018-06-03 11:00 sidebar: true comments: false sharing: true @@ -12,11 +12,21 @@ redirect_from: /getting-started/installation-raspberry-pi/ This installation of Home Assistant requires the Raspberry Pi to run [Raspbian Lite](https://www.raspberrypi.org/downloads/raspbian/). The installation will be installed in a [Virtual Environment](/docs/installation/virtualenv) with minimal overhead. Instructions assume this is a new installation of Raspbian Lite. +You must have Python 3.5.3 or later installed, which is the case for Raspbian Stretch. + +

+Although these installation steps specifically mention a Raspberry Pi, you can go ahead and proceed on any Linux install as well. This guide is also referred to as the "Advanced Guide" for a virtual environment install. +

+ +

+Please remember to ensure you're using an [appropriate power supply](https://www.raspberrypi.org/help/faqs/#powerReqs) with your Pi. Mobile chargers may not be suitable, since some are designed to only provide the full power with that manufacturer's handsets. USB ports on your computer also will not supply enough power and must not be used. +

+ Connect to the Raspberry Pi over SSH. Default password is `raspberry`. You will need to enable SSH access. The Raspberry Pi website has instructions [here](https://www.raspberrypi.org/documentation/remote-access/ssh/). ```bash -$ ssh pi@ipadress +$ ssh pi@ipaddress ``` Changing the default password is encouraged. @@ -39,10 +49,10 @@ $ sudo apt-get install python3 python3-venv python3-pip ``` Add an account for Home Assistant called `homeassistant`. -Since this account is only for running Home Assistant the extra arguments of `-rm` is added to create a system account and create a home directory. +Since this account is only for running Home Assistant the extra arguments of `-rm` is added to create a system account and create a home directory. The arguments `-G dialout,gpio` adds the user to the `dialout` and the `gpio` group. The first is required for using Z-Wave and Zigbee controllers, while the second is required to communicate with Raspberry's GPIO. ```bash -$ sudo useradd -rm homeassistant +$ sudo useradd -rm homeassistant -G dialout,gpio ``` Next we will create a directory for the installation of Home Assistant and change the owner to the `homeassistant` account. @@ -56,12 +66,18 @@ $ sudo chown homeassistant:homeassistant homeassistant Next up is to create and change to a virtual environment for Home Assistant. This will be done as the `homeassistant` account. ```bash -$ sudo su -s /bin/bash homeassistant +$ sudo -u homeassistant -H -s $ cd /srv/homeassistant $ python3 -m venv . $ source bin/activate ``` -Once you have activated the virtual environment you will notice the prompt change and then you can install Home Assistant. +Once you have activated the virtual environment (notice the prompt change) you will need to run the following command to install a required python package. + +```bash +(homeassistant) homeassistant@raspberrypi:/srv/homeassistant $ python3 -m pip install wheel +``` + +Once you have installed the required python package it is now time to install Home Assistant! ```bash (homeassistant) homeassistant@raspberrypi:/srv/homeassistant $ pip3 install homeassistant @@ -72,6 +88,30 @@ Start Home Assistant for the first time. This will complete the installation, cr ```bash (homeassistant) $ hass ``` - You can now reach your installation on your Raspberry Pi over the web interface on [http://ipaddress:8123](http://ipaddress:8123). +

+When you run the `hass` command for the first time, it will download, install and cache the necessary libraries/dependencies. This procedure may take anywhere between 5 to 10 minutes. During that time, you may get "site cannot be reached" error when accessing the web interface. This will only happen for the first time, and subsequent restarts will be much faster. +

+ +If you want to setup `hass` as a daemon and autostart it on boot please refer to [Autostart Home Assistant](/docs/autostart/). + +### {% linkable_title Updating %} + +To update to the latest version of Home Assistant follow these simple steps: + +```bash +$ sudo -u homeassistant -H -s +$ source /srv/homeassistant/bin/activate +$ pip3 install --upgrade homeassistant +``` + +Once the last command executes restart the Home Assistant service to apply the latest updates. Please keep in mind that some updates may take longer to boot up than others. If Home Assistant fails to start make sure you check the **Breaking Changes** from the [Release Notes](https://github.com/home-assistant/home-assistant/releases). + +### {% linkable_title Activating the virtual environment %} + +When instructions tell you to activate the virtual environment, the following commands will do this: + +```bash +$ sudo -u homeassistant -H -s +$ source /srv/homeassistant/bin/activate``` diff --git a/source/_docs/installation/synology.markdown b/source/_docs/installation/synology.markdown index 34e228ebb59..454dcd8858c 100644 --- a/source/_docs/installation/synology.markdown +++ b/source/_docs/installation/synology.markdown @@ -10,6 +10,10 @@ footer: true redirect_from: /getting-started/installation-synology/ --- +

+Synology only provide Python 3.5.1, which is not compatible with Home Assistant 0.65.0 or later. Until Synology offer an updated version of Python, Home Assistant 0.64 is the most recent version that will be able to be installed. You can manually specify the version of Home Assistant to install, for example to install version 0.64.3 you would do `./python3 -m pip install homeassistant==0.64.3` +

+ There are 2 alternatives, when using Home Assistant on Synology NAS: 1. using Docker 2. directly running on DSM @@ -51,19 +55,21 @@ Install PIP (Python's package management system) # ./python3 -m ensurepip ``` -Use PIP to install Homeassistant package +Use PIP to install Homeassistant package 0.64.3 ```bash -# ./python3 -m pip install homeassistant +# ./python3 -m pip install homeassistant==0.64.3 ``` Create homeassistant config directory & switch to it ```bash # mkdir /volume1/homeassistant +# chown homeassistant /volume1/homeassistant +# chmod 755 /volume1/homeassistant # cd /volume1/homeassistant ``` -Hint: alternatively you can also create a "Shared Folder" via Synology WebUI (e.g. via "File Station") - this has the advantage that the folder is visible via "File Station". +Hint: alternatively you can also create a "Shared Folder" via Synology WebUI (e.g., via "File Station") - this has the advantage that the folder is visible via "File Station". Create hass-daemon file using the following code (edit the variables in uppercase if necessary) @@ -175,8 +181,8 @@ esac Create links to python folders to make things easier in the future: ```bash -# ln -s /volume1/@appstore/py3k/usr/local/bin python3 -# ln -s /volume1/@appstore/py3k/usr/local/lib/python3.5/site-packages/homeassistant +# ln -s /volume1/@appstore/py3k/usr/local/bin/python3 python3 +# ln -s /volume1/@appstore/py3k/usr/local/lib/python3.5/site-packages/homeassistant homeassistant ``` Set the owner and permissions on your config folder diff --git a/source/_docs/installation/updating.markdown b/source/_docs/installation/updating.markdown index 7ee4dbd3f60..a9884322b60 100644 --- a/source/_docs/installation/updating.markdown +++ b/source/_docs/installation/updating.markdown @@ -11,10 +11,14 @@ redirect_from: /getting-started/updating/ ---

-The upgrade process differs depending on the installation you have, so please review the documentation that is specific to your install [Hass.io](/hassio/), [HASSbian](/docs/hassbian/common-tasks/#update-home-assistant), [Raspberry Pi All-In-One Installer](/docs/installation/raspberry-pi-all-in-one/#upgrading), [Vagrant](/docs/installation/vagrant/), or [Virtualenv](/docs/installation/virtualenv/#upgrading-home-assistant). +The upgrade process differs depending on the installation you have, so please review the documentation that is specific to your install [Hass.io](/hassio/), [Hassbian](/docs/installation/hassbian/common-tasks/#update-home-assistant), [Vagrant](/docs/installation/vagrant/), or [Virtualenv](/docs/installation/virtualenv/#upgrading-home-assistant).

-View what's new in the latest version and potential impacts on your system [here](https://github.com/home-assistant/home-assistant/releases). +Check what's new in the latest version and potentially impacts your system in [Home Assistant release notes](https://github.com/home-assistant/home-assistant/releases). It is good practice to review these release notes and pay close attention to the **Breaking Changes** that are listed there. If you haven't done an update for a while, you should also check previous release notes as they can also contain relevant **Breaking Changes**. **Breaking Changes** may require configuration updates for your components. If you missed this and Home Assistant refuses to start, check the log file in the [configuration](/docs/configuration/) directory, e.g., `.homeassistant/home-assistant.log`, for details about broken components. + +

+To avoid permission errors, the upgrade must be run as the same user as the installation was completed, again review the documentation specific to your install [Hass.io](/hassio/), [Hassbian](/docs/hassbian/installation/), [Vagrant](/docs/installation/vagrant/), or [Virtualenv](/docs/installation/virtualenv). +

The default way to update Home Assistant to the latest release, when available, is: @@ -22,11 +26,13 @@ The default way to update Home Assistant to the latest release, when available, $ pip3 install --upgrade homeassistant ``` -After updating, you must restart Home Assistant for the changes to take effect. This means that you will have to restart `hass` itself or the [autostarting](/docs/autostart/) daemon (if applicable). Startup can take considerable amount of time (i.e. minutes) depending on your device. This is because all requirements are updated as well. +For a Docker container, simply pull the latest one: -

-To avoid permission errors, the upgrade must be run as the same user as the installation was completed, again review the documentation specific to your install [Hass.io](/hassio/), [HASSbian](/docs/hassbian/installation/), [Raspberry Pi All-In-One Installer](/docs/installation/raspberry-pi-all-in-one/), [Vagrant](/docs/installation/vagrant/), or [Virtualenv](/docs/installation/virtualenv). -

+```bash +$ sudo docker pull homeassistant/home-assistant:latest +``` + +After updating, you must start/restart Home Assistant for the changes to take effect. This means that you will have to restart `hass` itself or the [autostarting](/docs/autostart/) daemon (if applicable). Startup can take considerable amount of time (i.e. minutes) depending on your device. This is because all requirements are updated as well. [BRUH automation](http://www.bruhautomation.com) has created [a tutorial video](https://www.youtube.com/watch?v=tuG2rs1Cl2Y) explaining how to upgrade Home Assistant. @@ -40,7 +46,7 @@ $ pip3 install homeassistant==0.XX.X #### {% linkable_title Run the development version %} -If you want to stay on the bleeding-edge Home Assistant development branch, you can upgrade to `dev`. +If you want to stay on the bleeding-edge Home Assistant development branch, you can upgrade to `dev`.

The "dev" branch is likely to be unstable. Potential consequences include loss of data and instance corruption. diff --git a/source/_docs/installation/vagrant.markdown b/source/_docs/installation/vagrant.markdown index 8616b286fb3..66b48d09cb1 100644 --- a/source/_docs/installation/vagrant.markdown +++ b/source/_docs/installation/vagrant.markdown @@ -30,7 +30,7 @@ $ cd home-assistant/virtualization/vagrant ```

-The following instructions will assume you changed your working directory to be `home-assistant/virtualization/vagrant`. This is mandatory because Vagrant will look for informations about the running VM inside that folder and won't work otherwise +The following instructions will assume you changed your working directory to be `home-assistant/virtualization/vagrant`. This is mandatory because Vagrant will look for information about the running VM inside that folder and won't work otherwise

diff --git a/source/_docs/installation/virtualenv.markdown b/source/_docs/installation/virtualenv.markdown index ffcfff5c9ab..7c56772af73 100644 --- a/source/_docs/installation/virtualenv.markdown +++ b/source/_docs/installation/virtualenv.markdown @@ -9,99 +9,77 @@ sharing: true footer: true redirect_from: /getting-started/installation-virtualenv/ --- -

-Beginners should check our [getting started guide](/getting-started/) first. + +If you already have Python 3.5.3 or later installed, you can easily give Home Assistant a spin. + +It's recommended when installing Python packages that you use a [virtual environment](https://docs.python.org/3.5/library/venv.html#module-venv). This will make sure that your Python installation and Home Assistant installation won't impact one another. The following steps will work on most unix like systems. + +_(If you're on a Debian based system, you will need to install Python virtual environment support using `apt-get install python3-pip python3-venv`.)_ + +

+It is recommended to use the [advanced guide](/docs/installation/raspberry-pi/) which allows for the installation to run as a `homeassistant` user. The steps below may be shorter but some users find difficulty when applying updates and may run into issues.

-There are several reasons why it makes sense to run Home Assistant in a virtual environment. A [virtualenv](https://virtualenv.pypa.io/en/latest/) encapsulates all aspect of a Python environment within a single directory tree. That means the Python packages you install for Home Assistant won't interact with the rest of your system and vice-versa. It means a random upgrade for some other program on your computer won't break Home Assistant, and it means you don't need to install Python packages as root. +### {% linkable_title Install %} -Virtualenvs are pretty easy to setup. We'll be using Debian in this example (as many Home Assistant users are running Raspbian on a Raspberry Pi), but all of the Python related steps should be the same on just about any platform. + 1. Create a virtual environment in your current directory: + ``` + $ python3 -m venv homeassistant + ``` + 2. Open the virtual environment: + ``` + $ cd homeassistant + ``` + 3. Activate the virtual environment: + ``` + $ source bin/activate + ``` + 4. Install wheel: + ``` + $ python3 -m pip install wheel + ``` + 5. Install Home Assistant: + ``` + $ python3 -m pip install homeassistant + ``` + 6. Configure it to [autostart](/docs/autostart/) + 7. Or run Home Assistant manually: + ``` + $ hass --open-ui + ``` + +### {% linkable_title Upgrade %} -### {% linkable_title Basic guide %} + 1. Stop Home Assistant -The basic guide is for testing Home Assistant. Also check the advanced guide for instances used in production. + 2. Open the directory where the virtual environment is located: + ``` + $ cd homeassistant + ``` + 3. Activate the virtual environment: + ``` + $ source bin/activate + ``` + 4. Upgrade Home Assistant: + ``` + $ python3 -m pip install --upgrade homeassistant + ``` + 5. Start Home Assistant -## {% linkable_title Step 1: Install dependencies %} +### {% linkable_title Notes %} + +- In the future, if you want to start Home Assistant manually again, follow step 2, 3 and 5. +- It's recommended to run Home Assistant as a dedicated user. + +

+Looking for more advanced guides? Check our [Rasbian guide](/docs/installation/raspberry-pi/) or the [other installation guides](/docs/installation/). +

+ +### {% linkable_title After upgrading Python %} + +If you've upgraded Python (for example, you were running 3.5.2 and now you've installed 3.5.4) then you'll need to build a new virtual environment. Simply rename your existing virtual environment directory: ```bash -$ sudo apt-get update -$ sudo apt-get upgrade -$ sudo apt-get install python3-pip python3-dev -$ sudo pip3 install --upgrade virtualenv +$ mv homeassistant homeassistant.old ``` - -## {% linkable_title Step 2: Setup virtualenv %} - -```bash -$ python3 -m venv $HOME/homeassistant -``` - -## {% linkable_title Step 3: Install or update Home Assistant %} - -```bash -$ source $HOME/homeassistant/bin/activate -(homeassistant)$ pip3 install --upgrade homeassistant -``` - -## {% linkable_title Step 4: Run Home Assistant %} - -```bash -$ $HOME/homeassistant/bin/hass -``` - -### {% linkable_title Advanced guide %} -## {% linkable_title Separate user & group for Home Assistant (Basic guide step 2) %} - -It's a good idea to give services like Home Assistant their own user. It gives you more granular control over permissions, and reduces the exposure to the rest of your system in the event there is a security related bug in Home Assistant. This is a reasonably Linux oriented step, and will look different on other operating systems (or even other Linux distributions). - -```bash -$ sudo adduser --system homeassistant -$ sudo addgroup homeassistant -``` - -Home Assistant stores its configuration in `$HOME/.homeassistant` by default, so in this case, it would be in `/home/homeassistant/.homeassistant`. - -If you plan to use a Z-Wave controller, you will need to add this user to the `dialout` group: - -```bash -$ sudo usermod -G dialout -a homeassistant -``` - -## {% linkable_title Custom installation directory for Home Assistant (Basic guide step 2) %} - -This can be anywhere you want. We chose to put it in `/srv`. You also need to change the ownership of the directory to the user you created above. - -```bash -$ sudo mkdir /srv/homeassistant -$ sudo chown homeassistant:homeassistant /srv/homeassistant -$ python3 -m venv /srv/homeassistant -``` - -## {% linkable_title Install or update Home Assistant %} - -This is obviously only necessary if you created a `homeassistant` user, but if you did, be sure to switch to that user whenever you install things in your virtualenv, otherwise you'll end up with mucked up permissions. - -```bash -$ sudo su -s /bin/bash homeassistant -``` - -The `su` command means 'switch' user. We use the '-s' flag because the `homeassistant` user is a system user and doesn't have a default shell by default (to prevent attackers from being able to log in as that user). - -```bash -$ source /srv/homeassistant/bin/activate -(homeassistant)$ pip3 install --upgrade homeassistant -``` - -## {% linkable_title Run Home Assistant (Basic guide step 4) %} - -There are two ways to launch Home Assistant. If you are **in** the virtualenv, you can just run `hass` and it will work as normal. If the virtualenv is not activated, you just use the `hass` executable in the `bin` directory mentioned earlier. There is one caveat... Because Home Assistant stores its configuration in the user's home directory, we need to be the user `homeassistant` or specify the configuration with `-c`. - -```bash -$ sudo -u homeassistant -H /srv/homeassistant/bin/hass -``` - -The `-H` flag is important. It sets the `$HOME` environment variable to `/home/homeassistant` so `hass` can find its configuration. - -## {% linkable_title Starting Home Assistant on boot %} - -The [autostart instructions](/getting-started/autostart/) will work just fine, just be sure to replace `/usr/bin/hass` with `/srv/homeassistant/bin/hass` and specify the `homeassistant` user where appropriate. +Then follow the [Install](/docs/installation/virtualenv/#install) steps again, being sure to use the newly installed version of Python. diff --git a/source/_docs/installation/windows.markdown b/source/_docs/installation/windows.markdown index 899040bc125..3efe0581137 100644 --- a/source/_docs/installation/windows.markdown +++ b/source/_docs/installation/windows.markdown @@ -9,7 +9,13 @@ sharing: true footer: true --- -To run Home Assistant on Microsoft Windows installation you need to install Python first. Download Python for https://www.python.org/downloads/windows/ and follow the instructions of the installer. +To run Home Assistant on Microsoft Windows installation you need to install Python first. Download Python (the latest version of Python 3.6 is recommended) for [https://www.python.org/downloads/windows/](https://www.python.org/downloads/windows/) and follow the instructions of the installer. + +

+There may be alpha or beta releases of Python listed on that download page (marked by the letters `a` or `b` in the version number. Do not use these versions. +

+ +If you use your machine for something other than Home Assistant, you should install it in a [Python virtual environment](#Installing_in_a_Python_virtual_environment). Start @@ -23,5 +29,39 @@ For autostarting Home Assistant please refer to this [guide](https://community.h Check this [video](https://www.youtube.com/watch?v=X27eVvuqwnY) for the installation on Windows 10.

-The Microsoft Windows platform is not a primary target to install home Assistant. Also, not all tools and third-party modules will work. +The Microsoft Windows platform is not a primary target to install Home Assistant. Also, not all tools and third-party modules will work.

+ +## {% linkable_title Updating %} + +To update Home Assistant, stop it and then run: + +```bash +C:\...\> pip3 install --upgrade homeassistant +``` + +Then start Home Assistant. + +## {% linkable_title Installing in a Python virtual environment %} + +Open `cmd.exe` and paste the following commands (one at the time): + +```bash +C:\...\> py -m venv homeassistant +C:\...\> cd homeassistant +C:\...\> Scripts\activate.bat +C:\...\> py -m pip install wheel setuptools pip +C:\...\> py -m pip install homeassistant +C:\...\> hass +``` + +## {% linkable_title Upgrading in a Python virtual environment %} + +To update Home Assistant, stop it and then open `cmd.exe` and paste the following commands (one at the time): + +```bash +C:\...\> cd homeassistant +C:\...\> Scripts\activate.bat +C:\...\> py -m pip install --upgrade homeassistant +``` +Then start Home Assistant. diff --git a/source/_docs/mqtt/birth_will.markdown b/source/_docs/mqtt/birth_will.markdown index afce8a592f5..8ba1aa593ad 100644 --- a/source/_docs/mqtt/birth_will.markdown +++ b/source/_docs/mqtt/birth_will.markdown @@ -1,7 +1,7 @@ --- layout: page title: "MQTT Birth and Last will" -description: "Instructions how to setup MQTT birth and last will messages within Home Assistant." +description: "Instructions on how to setup MQTT birth and last will messages within Home Assistant." date: 2015-08-07 18:00 sidebar: true comments: false diff --git a/source/_docs/mqtt/broker.markdown b/source/_docs/mqtt/broker.markdown index a5f9e9ba70c..47a19df934f 100644 --- a/source/_docs/mqtt/broker.markdown +++ b/source/_docs/mqtt/broker.markdown @@ -1,14 +1,13 @@ --- layout: page title: "MQTT Brokers" -description: "Instructions how to setup MQTT brokers for Home Assistant." +description: "Instructions on how to setup MQTT brokers for Home Assistant." date: 2015-08-07 18:00 sidebar: true comments: false sharing: true footer: true logo: mqtt.png -redirect_from: /components/mqtt/#picking-a-broker --- The MQTT component needs you to run an MQTT broker for Home Assistant to connect to. There are four options, each with various degrees of ease of setup and privacy. @@ -32,6 +31,13 @@ Home Assistant contains an embedded MQTT broker. If no broker configuration is g mqtt: ``` +

+There is an issue with the HBMQTT broker that can cause a memory leak (slowly increasing used memory). This causes an unstable system after the memory is full. You could measure/monitor this with a system monitor. The issue is from 2016 and could already be resolved with newer versions. Use another broker when you experience this issue, for example, Mosquitto.
+
+Issue with the HBMQTT broker: https://github.com/beerfactory/hbmqtt/issues/62
+System monitor: https://www.home-assistant.io/components/sensor.systemmonitor/ +

+ ### {% linkable_title Owntracks%} To use Owntracks with the internal broker a small configuration change must be made in order for the app to use MQTT protocol 3.1.1 (Protocol Level 4). @@ -63,7 +69,7 @@ mqtt: {% configuration %} broker: required: false - description: The IP address or hostname of your MQTT broker, e.g. 192.168.1.32. + description: The IP address or hostname of your MQTT broker, e.g., 192.168.1.32. type: string port: required: false @@ -99,14 +105,23 @@ tls_insecure: type: boolean tls_version: required: false - description: "TLS/SSL protocol version to use. Available options are: `auto`, `1.0`, `1.1`, `1.2`. Defaults to `auto`." + description: "TLS/SSL protocol version to use. Available options are: `'auto'`, `'1.0'`, `'1.1'`, `'1.2'`. Make sure to put quotes around the value. Defaults to `'auto'`." type: string {% endconfiguration %}

There is an issue with the Mosquitto package included in Ubuntu 14.04 LTS. Specify `protocol: 3.1` in your MQTT configuration to work around this issue. -If you get this error `AttributeError: module 'ssl' has no attribute 'PROTOCOL_TLS'` then you need to set `tls_version: 1.2`. +If you get this error `AttributeError: module 'ssl' has no attribute 'PROTOCOL_TLS'` then you need to set `tls_version: '1.2'`. +

+ +

+If you are running a Mosquitto instance on the same server as Home Assistant then you must ensure that the Mosquitto service starts before Home Assistant. For a Linux instance running Systemd (Raspberry Pi, Debian, Ubuntu and others) then you should edit the file /etc/systemd/system/home-assistant@homeassistant.service as root (e.g., sudo nano /etc/systemd/system/home-assistant@homeassistant.service) and add the mosquitto service: +``` +[Unit] +Description=Home Assistant +After=network.target mosquitto.service +```

diff --git a/source/_docs/mqtt/certificate.markdown b/source/_docs/mqtt/certificate.markdown index bf410b916af..252e0a5160a 100644 --- a/source/_docs/mqtt/certificate.markdown +++ b/source/_docs/mqtt/certificate.markdown @@ -1,7 +1,7 @@ --- layout: page title: "MQTT Certificate" -description: "Instructions how to setup MQTT with a certificate in Home Assistant." +description: "Instructions on how to setup MQTT with a certificate in Home Assistant." date: 2015-08-07 18:00 sidebar: true comments: false diff --git a/source/_docs/mqtt/discovery.markdown b/source/_docs/mqtt/discovery.markdown index e9139095d75..75a56503e8a 100644 --- a/source/_docs/mqtt/discovery.markdown +++ b/source/_docs/mqtt/discovery.markdown @@ -1,14 +1,13 @@ --- layout: page title: "MQTT Discovery" -description: "Instructions how to setup MQTT Discovery within Home Assistant." +description: "Instructions on how to setup MQTT Discovery within Home Assistant." date: 2015-08-07 18:00 sidebar: true comments: false sharing: true footer: true logo: mqtt.png -redirect_from: /components/mqtt/#discovery --- The discovery of MQTT devices will enable one to use MQTT devices with only minimal configuration effort on the side of Home Assistant. The configuration is done on the device itself and the topic used by the device. Similar to the [HTTP binary sensor](/components/binary_sensor.http/) and the [HTTP sensor](/components/sensor.http/). The basic idea is that the device itself adds its configuration into your `configuration.yaml` automatically. To prevent multiple identical entries if a device reconnects a unique identifier is necessary. Two parts are required on the device side: The configuration topic which contains the necessary device type and unique identifier and the remaining device configuration without the device type. @@ -16,6 +15,7 @@ The discovery of MQTT devices will enable one to use MQTT devices with only mini Supported by MQTT discovery: - [Binary sensors](/components/binary_sensor.mqtt/) +- [Cameras](/components/camera.mqtt/) - [Covers](/components/cover.mqtt/) - [Fans](/components/fan.mqtt/) - [Lights](/components/light.mqtt/) @@ -43,14 +43,23 @@ The discovery topic need to follow a specific format: ``` - ``: One of the supported components, eg. `binary_sensor`. -- ``: (*Optional*) id of the node providing the topic. -- ``: The ID of the device. This will become the `entity_id` in Home Assistant. +- `` (*Optional*): ID of the node providing the topic. +- ``: The ID of the device. This is only to allow for separate topics for each device and is not used for the `entity_id`. - `<>`: The topic `config` or `state` which defines the current action. The payload will be checked like an entry in your `configuration.yaml` file if a new device is added. This means that missing variables will be filled with the platform's default values. All configuration variables which are *required* must be present in the initial payload send to `/config`. The `` level can be used by clients to only subscribe to their own (command) topics by using one wildcard topic like `/+//+/set`. +### {% linkable_title Support by third-party tools %} + +The following firmware for ESP8266, ESP32 and Sonoff unit has built-in support for MQTT discovery: + +- [Sonoff-Tasmota](https://github.com/arendst/Sonoff-Tasmota) (starting with 5.11.1e) +- [esphomeyaml](https://esphomelib.com/esphomeyaml/index.html) +- [ESPurna](https://github.com/xoseperez/espurna) +- [Arilux AL-LC0X LED controllers](https://github.com/mertenats/Arilux_AL-LC0X) + ### {% linkable_title Examples %} A motion detection device which can be represented by a [binary sensor](/components/binary_sensor.mqtt/) for your garden would sent its configuration as JSON payload to the Configuration topic. After the first message to `config`, then the MQTT messages sent to the state topic will update the state in Home Assistant. @@ -70,7 +79,7 @@ Update the state. $ mosquitto_pub -h 127.0.0.1 -p 1883 -t "homeassistant/binary_sensor/garden/state" -m ON ``` -Setting up a switch is similar but requires a `command_topic` as mentionend in the [MQTT switch documentation](/components/switch.mqtt/). +Setting up a switch is similar but requires a `command_topic` as mentioned in the [MQTT switch documentation](/components/switch.mqtt/). - Configuration topic: `homeassistant/switch/irrigation/config` - State topic: `homeassistant/switch/irrigation/state` @@ -93,3 +102,5 @@ Setting up a sensor with multiple measurement values requires multiple consecuti - Configuration topic no2: `homeassistant/sensor/sensorBedroomH/config` - Configuration payload no2: `{"device_class": "sensor", "name": "Humidity", "state_topic": "homeassistant/sensor/sensorBedroom/state", "unit_of_measurement": "%", "value_template": "{% raw %}{{ value_json.humidity}}{% endraw %}" }` - Common state payload: `{ "temperature": 23.20, "humidity": 43.70 }` + + diff --git a/source/_docs/mqtt/logging.markdown b/source/_docs/mqtt/logging.markdown index 08b84f52777..d4deaf4f48e 100644 --- a/source/_docs/mqtt/logging.markdown +++ b/source/_docs/mqtt/logging.markdown @@ -1,14 +1,13 @@ --- layout: page title: "MQTT Logging" -description: "Instructions how to setup MQTT Logging within Home Assistant." +description: "Instructions on how to setup MQTT Logging within Home Assistant." date: 2015-08-07 18:00 sidebar: true comments: false sharing: true footer: true logo: mqtt.png -redirect_from: /components/mqtt/#logging --- The [logger](/components/logger/) component allow the logging of received MQTT messages. diff --git a/source/_docs/mqtt/processing_json.markdown b/source/_docs/mqtt/processing_json.markdown index b10558655cb..8afb951f8e6 100644 --- a/source/_docs/mqtt/processing_json.markdown +++ b/source/_docs/mqtt/processing_json.markdown @@ -1,14 +1,13 @@ --- layout: page title: "Processing JSON" -description: "Instructions how to process the MQTT payload." +description: "Instructions on how to process the MQTT payload." date: 2015-08-07 18:00 sidebar: true comments: false sharing: true footer: true logo: mqtt.png -redirect_from: /components/mqtt/#processing-json --- The MQTT [switch](/components/switch.mqtt/) and [sensor](/components/sensor.mqtt/) platforms support processing JSON over MQTT messages and parsing them using JSONPath. JSONPath allows you to specify where in the JSON the value resides that you want to use. The following examples will always return the value `100`. diff --git a/source/_docs/mqtt/service.markdown b/source/_docs/mqtt/service.markdown index 0b3e778fdf2..941d79e7b78 100644 --- a/source/_docs/mqtt/service.markdown +++ b/source/_docs/mqtt/service.markdown @@ -1,14 +1,13 @@ --- layout: page title: "MQTT Publish service" -description: "Instructions how to setup the MQTT Publish service within Home Assistant." +description: "Instructions on how to setup the MQTT Publish service within Home Assistant." date: 2015-08-07 18:00 sidebar: true comments: false sharing: true footer: true logo: mqtt.png -redirect_from: /components/mqtt/#publish-service --- The MQTT component will register the service `publish` which allows publishing messages to MQTT topics. There are two ways of specifying your payload. You can either use `payload` to hard-code a payload or use `payload_template` to specify a [template](/topics/templating/) that will be rendered to generate the payload. diff --git a/source/_docs/mqtt/testing.markdown b/source/_docs/mqtt/testing.markdown index 3cc565d0511..e6c87bdbfcd 100644 --- a/source/_docs/mqtt/testing.markdown +++ b/source/_docs/mqtt/testing.markdown @@ -1,14 +1,13 @@ --- layout: page title: "MQTT Testing" -description: "Instructions how to test your MQTT setup." +description: "Instructions on how to test your MQTT setup." date: 2015-08-07 18:00 sidebar: true comments: false sharing: true footer: true logo: mqtt.png -redirect_from: /components/mqtt/#testing-your-setup --- The `mosquitto` broker package ships commandline tools (often as `*-clients` package) to send and receive MQTT messages. As an alternative have a look at [hbmqtt_pub](http://hbmqtt.readthedocs.org/en/latest/references/hbmqtt_pub.html) and [hbmqtt_sub](http://hbmqtt.readthedocs.org/en/latest/references/hbmqtt_sub.html) which are provided by HBMQTT. For sending test messages to a broker running on localhost check the example below: diff --git a/source/_docs/scripts.markdown b/source/_docs/scripts.markdown index bffc89b8a7b..f11861ad1ac 100644 --- a/source/_docs/scripts.markdown +++ b/source/_docs/scripts.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Script Syntax" -description: "Documention for the Home Assistant Script Syntax." +description: "Documentation for the Home Assistant Script Syntax." date: 2016-04-24 08:30 +0100 sidebar: true comments: false @@ -21,7 +21,8 @@ script: sequence: # This is written using the Script Syntax - service: light.turn_on - entity_id: light.ceiling + data: + entity_id: light.ceiling - service: notify.notify data: message: 'Turned on the ceiling light!' @@ -32,11 +33,11 @@ script: The most important one is the action to call a service. This can be done in various ways. For all the different possibilities, have a look at the [service calls page]. ```yaml -alias: Bedroom lights on -service: light.turn_on -data: - entity_id: group.bedroom - brightness: 100 +- alias: Bedroom lights on + service: light.turn_on + data: + entity_id: group.bedroom + brightness: 100 ``` ### {% linkable_title Test a Condition %} @@ -44,9 +45,9 @@ data: While executing a script you can add a condition to stop further execution. When a condition does not return `true`, the script will finish. There are many different conditions which are documented at the [conditions page]. ```yaml -condition: state -entity_id: device_tracker.paulus -state: 'home' +- condition: state + entity_id: device_tracker.paulus + state: 'home' ``` ### {% linkable_title Delay %} @@ -55,46 +56,53 @@ Delays are useful for temporarily suspending your script and start it at a later ```yaml # Waits 1 hour -delay: 01:00 +- delay: '01:00' ``` ```yaml # Waits 1 minute, 30 seconds -delay: 00:01:30 +- delay: '00:01:30' ``` ```yaml # Waits 1 minute -delay: - # supports milliseconds, seconds, minutes, hours, days - minutes: 1 +- delay: + # supports milliseconds, seconds, minutes, hours, days + minutes: 1 ``` +{% raw %} ```yaml # Waits however many minutes input_number.minute_delay is set to # Valid formats include HH:MM and HH:MM:SS -delay: {% raw %}'00:{{ states.input_number.minute_delay.state | int }}:00'{% endraw %} +- delay: "{{ states('input_number.minute_delay') | multiply(60) | timestamp_custom('%H:%M:%S',False) }}" ``` +{% endraw %} + ### {% linkable_title Wait %} Wait until some things are complete. We support at the moment `wait_template` for waiting until a condition is `true`, see also on [Template-Trigger](/docs/automation/trigger/#template-trigger). It is possible to set a timeout after which the script will abort its execution if the condition is not satisfied. Timeout has the same syntax as `delay`. +{% raw %} ```yaml # wait until media player have stop the playing -wait_template: {% raw %}"{{ states.media_player.floor.state == 'stop' }}"{% endraw %} +- wait_template: "{{ is_state('media_player.floor', 'stop') }}" ``` +{% endraw %} +{% raw %} ```yaml -# wait until a valve is < 10 or abort after 1 minutes. -wait_template: {% raw %}"{{ states.climate.kitchen.attributes.valve < 10 }}"{% endraw %} -timeout: 00:01:00 +# wait until a valve is < 10 or abort after 1 minute. +- wait_template: "{{ states.climate.kitchen.attributes.valve|int < 10 }}" + timeout: '00:01:00' ``` +{% endraw %} When using `wait_template` within an automation `trigger.entity_id` is supported for `state`, `numeric_state` and `template` triggers, see also [Available-Trigger-Data](/docs/automation/templating/#available-trigger-data). {% raw %} ```yaml -wait_template: "{{ is_state(trigger.entity_id, 'on') }}" +- wait_template: "{{ is_state('trigger.entity_id', 'on') }}" ``` {% endraw %} @@ -102,13 +110,13 @@ It is also possible to use dummy variables, e.g., in scripts, when using `wait_t {% raw %} ```yaml -# Service call, e.g. from an automation. -service: script.do_something -data_template: - dummy: "{{ input_boolean.switch }}" +# Service call, e.g., from an automation. +- service: script.do_something + data_template: + dummy: input_boolean.switch # Inside the script -wait_template: "{{ is_state(dummy, 'off') }}" +- wait_template: "{{ is_state(dummy, 'off') }}" ``` {% endraw %} @@ -117,14 +125,59 @@ wait_template: "{{ is_state(dummy, 'off') }}" This action allows you to fire an event. Events can be used for many things. It could trigger an automation or indicate to another component that something is happening. For instance, in the below example it is used to create an entry in the logbook. ```yaml -event: LOGBOOK_ENTRY -event_data: - name: Paulus - message: is waking up - entity_id: device_tracker.paulus - domain: light +- event: LOGBOOK_ENTRY + event_data: + name: Paulus + message: is waking up + entity_id: device_tracker.paulus + domain: light ``` +You can also use event_data_template to fire an event with custom data. This could be used to pass data to another script awaiting +an event trigger. + +{% raw %} +```yaml +- event: MY_EVENT + event_data_template: + name: myEvent + customData: "{{ myCustomVariable }}" +``` +{% endraw %} + +### {% linkable_title 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. + +{% raw %} +```yaml +- alias: Fire Event + trigger: + - platform: state + entity_id: switch.kitchen + to: 'on' + action: + - event: event_light_state_changed + event_data: + state: 'on' +``` +{% endraw %} + +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. + +{% raw %} +```yaml +- alias: Capture Event + trigger: + - platform: event + event_type: event_light_state_changed + action: + - service: notify.notify + data_template: + message: "kitchen light is turned {{ trigger.event.data.state }}" +``` +{% endraw %} + [Script component]: /components/script/ [automations]: /getting-started/automation-action/ [Alexa/Amazon Echo]: /components/alexa/ diff --git a/source/_docs/scripts/conditions.markdown b/source/_docs/scripts/conditions.markdown index 3314e0f4273..39398ca10f1 100644 --- a/source/_docs/scripts/conditions.markdown +++ b/source/_docs/scripts/conditions.markdown @@ -28,9 +28,24 @@ condition: below: '20' ``` +If you do not want to combine AND and OR conditions, you can also just list them sequentially, by default all conditions have to be true. +The following configuration works the same as the one listed above: + +```yaml +condition: + - condition: state + entity_id: 'device_tracker.paulus' + state: 'home' + - condition: numeric_state + entity_id: 'sensor.temperature' + below: '20' +``` + +Currently you need to format your conditions like this to be able to edit them using the [automations editor](/docs/automation/editor/). + ### {% linkable_title OR condition %} -Test multiple conditions in 1 condition statement. Passes if any embedded conditions is valid. +Test multiple conditions in 1 condition statement. Passes if any embedded condition is valid. ```yaml condition: @@ -104,14 +119,24 @@ condition: The sun condition can test if the sun has already set or risen when a trigger occurs. The `before` and `after` keys can only be set to `sunset` or `sunrise`. They have a corresponding optional offset value (`before_offset`, `after_offset`) that can be added, similar to the [sun trigger][sun_trigger]. -[sun_trigger]: /getting-started/automation-trigger/#sun-trigger +[sun_trigger]: /docs/automation/trigger/#sun-trigger ```yaml condition: condition: sun after: sunset - # Optional offset value - after_offset: "-1:00:00" + # Optional offset value - in this case it must from -1 hours relative to sunset, or after + after_offset: "-01:00:00" +``` + +```yaml +condition: + condition: or # 'when dark' condition: either after sunset or before sunrise + conditions: + - condition: sun + after: sunset + - condition: sun + before: sunrise ``` Here is a truth table to clarify the parameters with and without offset: diff --git a/source/_docs/scripts/service-calls.markdown b/source/_docs/scripts/service-calls.markdown index b1b18333403..ab73aad5290 100644 --- a/source/_docs/scripts/service-calls.markdown +++ b/source/_docs/scripts/service-calls.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Service Calls" -description: "Instructions how to call services in Home Assistant." +description: "Instructions on how to call services in Home Assistant." date: 2016-03-12 12:00 -0800 sidebar: true comments: false diff --git a/source/_docs/security.markdown b/source/_docs/security.markdown new file mode 100644 index 00000000000..d609e63aa02 --- /dev/null +++ b/source/_docs/security.markdown @@ -0,0 +1,41 @@ +--- +layout: page +title: "Security of Home Assistant" +description: "Security of Home Assistant." +date: 2017-02-13 12:50 +sidebar: true +comments: false +sharing: true +footer: true +--- + +As Home Assistant is like every other service or daemon that is running on a computer system that allows access over a network connection, certain measurement were taken to increase the overall security while still staying operational. + +[Secure your installation](/docs/configuration/securing/) once you've finished with the installation process regardless of your use case. + +Home Assistant is NOT able to change the configuration of your router or firewall. This means that you need to setup [port-forwarding](/docs/configuration/remote/) and adjusting firewall rules if you want to allow access from the internet. By default your frontend and your Hass.io add-ons like Mosquitto, SSH and your Samba shares are only accessible from your local network. + +## {% linkable_title Server banner %} + +Further [details about the fingerprint/server banner](/docs/security/webserver/) of a Home Assistant instance are available. + +## {% linkable_title Porosity %} + +The default port of Home Assistant is 8123. This is the port where the [`frontend`](/components/frontend/) and the [`API`](/components/api/) is served. Both are depending on the [`http`](/components/http/) component which contains the capability to adjust the settings like `server_host` or `server_port`. + +See the [open ports](/docs/security/porosity/) of a Hass.io instance with various add-ons. + +## {% linkable_title HTTP SSL/TLS %} + +Home Assistant is following the [Mozilla's Operations Security team recommendations](https://wiki.mozilla.org/Security/Server_Side_TLS) for Server side SSL/TLS settings. To allow the users to access Home Assistant with most devices the target is **Intermediate compatibility**. + +## {% linkable_title SSH %} + +The SSH connection for [debugging](https://developers.home-assistant.io/docs/en/hassio_debugging.html) on port 22222 is not enabled by default and can only be used with keys. + +Is SSH used with the [SSH server add-on](/addons/ssh/) then the user is responsible for the configuration and security. + +## {% linkable_title Source code %} + +Due to the lack of resources we are not able to review all of our dependencies and inspect them for malicious behavior, leakage of information or compliance with GDPR. But we have a keen interest in the development of our dependencies are try to work closely with the upstream developer. + diff --git a/source/_docs/security/porosity.markdown b/source/_docs/security/porosity.markdown new file mode 100644 index 00000000000..19941ab8208 --- /dev/null +++ b/source/_docs/security/porosity.markdown @@ -0,0 +1,195 @@ +--- +layout: page +title: "Home Assistant/Hass.io porosity" +description: "Use nmap to scan your Home Assistant instance." +date: 2016-10-06 08:00 +sidebar: true +comments: false +sharing: true +footer: true +--- + +As a large amount of users are running [Hass.io](/hassio/), here we are using a Raspberry Pi 3 B and Hass.io 0.70.0 to show how Home Assistant looks from the network side. This is not a full blown investigation, just a quick overview. + +The IP address of the Home Assistant machine is 192.168.0.215. The system which is the source of the scans is a machine running Fedora 27 and Nmap 7.60 is used to preform the port scans. Both systems are in the same network. + +## {% linkable_title SSH server Add-on %} + +To get access to Hass.io in secure way, SSH is provided by the [SSH server add-on](/addons/ssh/). + +```bash +$ sudo nmap -A -n --reason -Pn -T5 -p1-65535 192.168.0.215 + +Starting Nmap 7.60 ( https://nmap.org ) at 2018-05-29 15:08 CEST +Nmap scan report for 192.168.0.215 +Host is up, received arp-response (0.00051s latency). +Not shown: 65532 closed ports +Reason: 65532 resets +PORT STATE SERVICE REASON VERSION +22/tcp open ssh syn-ack ttl 63 OpenSSH 7.5 (protocol 2.0) +| ssh-hostkey: +| 2048 e3:a2:2d:20:3a:67:68:b9:b1:9e:16:fa:48:80:82:96 (RSA) +| 256 92:f0:f4:be:4f:44:60:0e:c4:92:8a:cb:34:9e:c5:c2 (ECDSA) +|_ 256 09:da:a2:14:cd:c4:69:e9:13:e6:70:64:98:d0:55:0c (EdDSA) +8123/tcp open http syn-ack ttl 64 aiohttp 3.1.3 (Python 3.6) +|_http-open-proxy: Proxy might be redirecting requests +| http-robots.txt: 1 disallowed entry +|_/ +|_http-server-header: Python/3.6 aiohttp/3.1.3 +|_http-title: Home Assistant +22222/tcp open ssh syn-ack ttl 64 Dropbear sshd 2016.74 (protocol 2.0) +MAC Address: B8:41:CD:4B:7A:5D (Raspberry Pi Foundation) +Device type: general purpose +Running: Linux 3.X|4.X +OS CPE: cpe:/o:linux:linux_kernel:3 cpe:/o:linux:linux_kernel:4 +OS details: Linux 3.2 - 4.8 +Network Distance: 1 hop +Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel + +TRACEROUTE +HOP RTT ADDRESS +1 0.51 ms 192.168.0.215 + +OS and Service detection performed. Please report any incorrect results at https://nmap.org/submit/ . +Nmap done: 1 IP address (1 host up) scanned in 726.23 seconds +``` + +That port 22 and 8123 are open was expected. On port 22222 is an additional SSH server running. This port is for [debugging](https://developers.home-assistant.io/docs/en/hassio_debugging.html) and supports only a login with a key. This means that you would need to remove the SD card from your Raspberry Pi, create an `authorized_keys` with your SSH public key in it and put the SD Card back in your Pi to get access. + +## {% linkable_title Mosquitto MQTT broker Add-on %} + +While setting up the [Mosquitto MQTT broker add-on](/addons/mosquitto/) no settings very modified, the add-on was running with the default settings. + +```bash +$ sudo nmap -A -n --reason -Pn -T5 -p1-65535 192.168.0.215 + +Starting Nmap 7.60 ( https://nmap.org ) at 2018-05-29 15:52 CEST +Nmap scan report for 192.168.0.215 +Host is up, received arp-response (0.0011s latency). +Not shown: 65532 closed ports +Reason: 65532 resets +PORT STATE SERVICE REASON VERSION +1883/tcp open mosquitto version 1.4.12 syn-ack ttl 63 +| mqtt-subscribe: +| Topics and their most recent payloads: +| $SYS/broker/load/connections/5min: 0.39 +[...] +| $SYS/broker/load/connections/15min: 0.13 +|_ $SYS/broker/clients/total: 2 +8123/tcp open http syn-ack ttl 64 aiohttp 3.1.3 (Python 3.6) +|_http-open-proxy: Proxy might be redirecting requests +| http-robots.txt: 1 disallowed entry +|_/ +|_http-server-header: Python/3.6 aiohttp/3.1.3 +|_http-title: Home Assistant +22222/tcp open ssh syn-ack ttl 64 Dropbear sshd 2016.74 (protocol 2.0) +MAC Address: B8:41:CD:4B:7A:5D (Raspberry Pi Foundation) +Device type: general purpose +Running: Linux 3.X|4.X +OS CPE: cpe:/o:linux:linux_kernel:3 cpe:/o:linux:linux_kernel:4 +OS details: Linux 3.2 - 4.8 +Network Distance: 1 hop +Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel + +TRACEROUTE +HOP RTT ADDRESS +1 1.13 ms 192.168.0.215 + +OS and Service detection performed. Please report any incorrect results at https://nmap.org/submit/ . +Nmap done: 1 IP address (1 host up) scanned in 223.76 seconds +``` + +To secure MQTT to consider to use certificates and to specify users with password under `logins:` at least. Use port 1883 only in your local network. + +## {% linkable_title Samba Add-on %} + +The [Samba add-on](/addons/samba/) enables one to use a Windows system to access the configuration and other shares. Per default there is no user set. To increase your local security we strongly suggest that you set a username and a password and don't allow guests. A sample configuration could look like the one below. + +A port scan for Hass.io with this add-on will give you the details. + +```bash +$ sudo nmap -A -n --reason -Pn -T5 -p1-65535 192.168.0.215 + +Starting Nmap 7.60 ( https://nmap.org ) at 2018-05-29 16:29 CEST +Host is up, received arp-response (0.00045s latency). +Not shown: 65523 closed ports +Reason: 65523 resets +PORT STATE SERVICE REASON VERSION +139/tcp open netbios-ssn syn-ack ttl 64 Samba smbd 3.X - 4.X (workgroup: WORKGROUP) +445/tcp open netbios-ssn syn-ack ttl 64 Samba smbd 4.7.3 (workgroup: WORKGROUP) +8123/tcp open http syn-ack ttl 64 aiohttp 3.1.3 (Python 3.6) +|_http-open-proxy: Proxy might be redirecting requests +| http-robots.txt: 1 disallowed entry +|_/ +|_http-server-header: Python/3.6 aiohttp/3.1.3 +|_http-title: Home Assistant +22222/tcp open ssh syn-ack ttl 64 Dropbear sshd 2016.74 (protocol 2.0) +MAC Address: B8:41:CD:4B:7A:5D (Raspberry Pi Foundation) +Device type: general purpose +Running: Linux 3.X|4.X +OS CPE: cpe:/o:linux:linux_kernel:3 cpe:/o:linux:linux_kernel:4 +OS details: Linux 3.2 - 4.8 +Network Distance: 1 hop +Service Info: Host: HASSIO; OS: Linux; CPE: cpe:/o:linux:linux_kernel + +Host script results: +|_nbstat: NetBIOS name: HASSIO, NetBIOS user: , NetBIOS MAC: (unknown) +| smb-os-discovery: +| OS: Windows 6.1 (Samba 4.7.3) +| Computer name: \x00 +| NetBIOS computer name: HASSIO\x00 +| Workgroup: WORKGROUP\x00 +|_ System time: 2018-05-29T16:41:05+02:00 +| smb-security-mode: +| account_used: guest +| authentication_level: user +| challenge_response: supported +|_ message_signing: disabled (dangerous, but default) +| smb2-security-mode: +| 2.02: +|_ Message signing enabled but not required +| smb2-time: +| date: 2018-05-29 16:41:05 +|_ start_date: 1601-01-01 00:53:28 + +TRACEROUTE +HOP RTT ADDRESS +1 0.46 ms 192.168.0.215 + +OS and Service detection performed. Please report any incorrect results at https://nmap.org/submit/ . +Nmap done: 1 IP address (1 host up) scanned in 727.43 seconds +``` + +139 and 445 are open and it's possible to enumerate the shares. With different tools you will get pretty much the same information. + +```bash +$ smbclient -L //192.168.0.215 -U% + + Sharename Type Comment + --------- ---- ------- + config Disk + addons Disk + share Disk + backup Disk + IPC$ IPC +IPC Service (Samba HomeAssistant config share) +Reconnecting with SMB1 for workgroup listing. + + Server Comment + --------- ------- + + Workgroup Master + --------- ------- + WORKGROUP HASSIO +``` + +But without username and password you can't get access to the configuration file with the settings shown here. + +```json +[...] + "guest": false, + "username": "homeassistant", + "password": "homeassistant", + "interface": "eth0" +} +``` diff --git a/source/_docs/frontend/webserver.markdown b/source/_docs/security/webserver.markdown similarity index 50% rename from source/_docs/frontend/webserver.markdown rename to source/_docs/security/webserver.markdown index c2ff7f1f924..cddb4dc2e5b 100644 --- a/source/_docs/frontend/webserver.markdown +++ b/source/_docs/security/webserver.markdown @@ -7,7 +7,7 @@ sidebar: true comments: false sharing: true footer: true -redirect_from: /details/webserver/ +redirect_from: /docs/frontend/webserver/ --- It was only a matter of time until the first queries for tools like [https://www.shodan.io](https://www.shodan.io/search?query=Home+Assistant) to search for Home Assistant instances showed up. @@ -15,25 +15,40 @@ It was only a matter of time until the first queries for tools like [https://www To get an idea about how your Home Assistant instance looks to a network scanner, you can use `nmap`. The `nmap` tool is already available if you are using the [nmap device tracker](/components/device_tracker/). ```bash -$ nmap -sV -p 8123 --script=http-title,http-headers 192.168.1.3 +$ nmap -sV -p 8123 --script=http-title,http-headers 192.168.0.3 + +Starting Nmap 7.60 ( https://nmap.org ) at 2018-05-29 18:16 CEST +Nmap scan report for 192.168.0.3 +Host is up (0.0058s latency). -Starting Nmap 7.12 ( https://nmap.org ) at 2016-10-06 10:01 CEST -Nmap scan report for 192.168.1.3 (192.168.1.3) -Host is up (0.00011s latency). PORT STATE SERVICE VERSION -8123/tcp open http CherryPy wsgiserver +8123/tcp open http aiohttp 3.1.3 (Python 3.6) | http-headers: | Content-Type: text/html; charset=utf-8 -| Content-Length: 4309 +| Content-Length: 3073 +| Date: Tue, 29 May 2018 16:16:50 GMT +| Server: Python/3.6 aiohttp/3.1.3 | Connection: close -| Date: Thu, 06 Oct 2016 08:01:31 GMT -| Server: Home Assistant -| +| |_ (Request type: GET) -|_http-server-header: Home Assistant +|_http-server-header: Python/3.6 aiohttp/3.1.3 |_http-title: Home Assistant Service detection performed. Please report any incorrect results at https://nmap.org/submit/ . -Nmap done: 1 IP address (1 host up) scanned in 6.70 seconds +Nmap done: 1 IP address (1 host up) scanned in 12.13 seconds ``` +We don't have an unique server banner but in combination with the HTML title `Home Assistant`, is it simple to identify Home Assistant instances. + +```bash +$ nc 192.168.0.3 8123 +GET / HTTP/1.1 +host: localhost + +HTTP/1.1 200 OK +Server: Python/3.6 aiohttp/3.1.3 +[...] +``` + +One option to avoid this exposure is using a [reverse proxy](/docs/ecosystem/nginx/). + diff --git a/source/_docs/tools/benchmark.markdown b/source/_docs/tools/benchmark.markdown new file mode 100644 index 00000000000..04ac884068c --- /dev/null +++ b/source/_docs/tools/benchmark.markdown @@ -0,0 +1,19 @@ +--- +layout: page +title: "benchmark" +description: "Script to perform benchmarking of Home Assistant" +release_date: 2017-02-23 11:00:00 +sidebar: true +comments: false +sharing: true +footer: true +--- + +For testing the performance of Home Assistant the Benchmark script runs until you exit using Control+C. + +Firing and handling of a million events. + +```bash +$ hass --script benchmark async_million_events +``` + diff --git a/source/_docs/tools/check_config.markdown b/source/_docs/tools/check_config.markdown new file mode 100644 index 00000000000..b09ea5b17c2 --- /dev/null +++ b/source/_docs/tools/check_config.markdown @@ -0,0 +1,37 @@ +--- +layout: page +title: "check_config" +description: "Script to perform a check of the current configuration" +release_date: 2017-02-23 11:00:00 +sidebar: true +comments: false +sharing: true +footer: true +--- + +Test any changes to your `configuration.yaml` file before launching Home Assistant. This script allows you to test changes without the need to restart Home Assistant. + +```bash +$ hass --script check_config +``` + +The script has further options like checking configuration files which are not located in the default directory or showing your secrets for debugging. + +```bash +$ hass --script check_config -h +usage: hass [-h] [--script {check_config}] [-c CONFIG] [-i [INFO]] [-f] [-s] + +Check Home Assistant configuration. + +optional arguments: + -h, --help show this help message and exit + --script {check_config} + -c CONFIG, --config CONFIG + Directory that contains the Home Assistant + configuration + -i [INFO], --info [INFO] + Show a portion of the config + -f, --files Show used configuration files + -s, --secrets Show secret information +``` + diff --git a/source/_docs/tools/credstash.markdown b/source/_docs/tools/credstash.markdown new file mode 100644 index 00000000000..023ee239988 --- /dev/null +++ b/source/_docs/tools/credstash.markdown @@ -0,0 +1,32 @@ +--- +layout: page +title: "credstash" +description: "Script to store credentials securely in AWS" +release_date: 2017-02-23 11:00:00 +sidebar: true +comments: false +sharing: true +footer: true +--- + +Using [Credstash](https://github.com/fugue/credstash) is an alternative way to `secrets.yaml`. They can be managed from the command line via the credstash script. + +Before using credstash, you need to set up AWS credentials either via the `aws` command line tool or using environment variables as explained in the [AWS CLI docs](http://docs.aws.amazon.com/cli/latest/userguide/cli-chap-getting-started.html) as well as creating a KMS key named `credstash` as explained in the [credstash Readme](https://github.com/fugue/credstash#setting-up-kms). After that is complete, you can use the provided script to add secrets to your Home Assistant secret store in credstash. + +```bash +$ hass --script credstash --help +``` + +To store a password in credstash, replace your password or API key with `!secret` and an identifier in `configuration.yaml` file. + +```yaml +http: + api_password: !secret http_password +``` + +Create an entry in your credstash store. + +```bash +$ hass --script credstash set http_password +``` + diff --git a/source/_docs/tools/db_migrator.markdown b/source/_docs/tools/db_migrator.markdown new file mode 100644 index 00000000000..68127935ae3 --- /dev/null +++ b/source/_docs/tools/db_migrator.markdown @@ -0,0 +1,71 @@ +--- +layout: page +title: "db_migrator" +description: "Script to migrate data in an InfluxDB database" +release_date: 2017-02-23 11:00:00 +sidebar: true +comments: false +sharing: true +footer: true +--- + +

+This script was only use for 0.36 release cycle! +

+ +Starting with 0.36 the [InfluxDB](omponents/influxdb/) component has a new schema to store values in the InfluxDB databases. + +- There will no longer be any tags/fields named `time`. +- All numeric fields (int/float/bool) will be stored as float inside InfluxDB database. +- All string fields corresponding to state attributes will be renamed as `FIELDNAME_str`, where `FIELDNAME` is the state attribute, to avoid type conflicts. +- All string fields corresponding to a state will be renamed as `state` (former value). +- Fields named `value` will always be stored as float. +- Fields named `state` will always be stored as string. + +## {% linkable_title Migration script %} + +If you need to migrate your database, you may require to run the `influxdb_migrator` script. Run the script after upgrade to 0.36 but before the first regular start of `hass` version 0.36. + +These are the steps the script will perform: + +1. Create a new database (called `DBNAME__old`) to store old data. +2. Copy data from `DBNAME` database to `DBNAME__old` database. +3. Empty `DBNAME` database (using `drop` then `create`). `DBNAME` database is now considered as the new database. +4. For each measurement of `DBNAME__old` database: + 1. Read all points from the current measurement (in groups of 1000 points by default) and convert them. + 2. Send group of points to `DBNAME` database. +5. Delete the `DBNAME__old` database if needed. + +Example to run the script: + +```bash +$ hass --script influxdb_migrator \ + -H IP_INFLUXDB_HOST -u INFLUXDB_USERNAME -p INFLUXDB_PASSWORD \ + -d INFLUXDB_DB_NAME +``` +Script arguments: + +``` +required arguments: + -d dbname, --dbname dbname InfluxDB database name + +optional arguments: + -h, --help show this help message and exit + -H host, --host host InfluxDB host address + -P port, --port port InfluxDB host port + -u username, --username username + InfluxDB username + -p password, --password password + InfluxDB password + -s step, --step step How many points to migrate at the same time + -o override_measurement, --override-measurement override_measurement + Store all your points in the same measurement + -D, --delete Delete old database +``` + +- If you run the script with only the `-h` option, you will get a help printout with a short explanation of the different options. +- The host option defaults to `'127.0.0.1'`. +- The port option defaults to `8086`. +- You should be able to omit username and password if InfluxDB authentication is disabled, which it is by default. +- The step option defaults to `1000`. + diff --git a/source/_docs/tools/dev-tools.markdown b/source/_docs/tools/dev-tools.markdown index 1fbbe59fa3d..99ce3e7cf7e 100644 --- a/source/_docs/tools/dev-tools.markdown +++ b/source/_docs/tools/dev-tools.markdown @@ -9,7 +9,7 @@ sharing: true footer: true --- -The frontend contains a section called "Developer Tools". +The frontend contains a section called "Developer Tools".

@@ -24,3 +24,80 @@ Screenshot of Home Assistant's Developer Tools. | Templates | service developer tool icon | Renders templates | | Info | service developer tool icon | Details about Home Assistant | +## What can I do with Developer Tools? +The Developer Tools is meant for **all** (not just for the developers) to quickly try out things - like calling services, update states, raising events, and publish messages in mqtt…etc.). It is also a necessary tool for those who write custom automations and scripts by hand. The following describes each of the section in detail. + +{% linkable_title Services %} + +This section is used to call Services that are available in the ServiceRegistry. + +The list of services in the “Service” drop down are automatically populated based on the components that are found in the configuration, automation and script files. If a desired service does not exist, it means either the component is not configured properly or not defined in the configuration, automation or script files. + +When a Service is selected, and if that service requires an `entity_id` to be passed, the “Entity” drop down will automatically be populated with corresponding entities. + +A Service may also require additional input to be passed. It is commonly referred to as “service data”. The service data is only accepted in the JSON format, and it may be optional depending on the service. + +When an entity is selected from the Entity drop down, it automatically populates service data with the corresponding `entity_id`. The service data JSON can then be modified to pass additional \[optional\] parameters. The following is an illustration on how to call a `light.turn_on` service. + +To turn on a light bulb, use the following steps: +1. Select `light.turn_on` from the Service drop down +2. Select the entity (typically the light bulb) from the Entity drop down (if no entity_id is selected, it turns on ALL lights) +3. If an entity is selected, the service data is populated with basic JSON that will be passed to the service. An additional data can also be passed by updating the JSON as below. + +```json +{ + "entity_id": "light.bedroom", + "brightness": 255, + "rgb_color": [255, 0, 0] +} +``` +{% linkable_title States %} + +This section shows all the available entities, their corresponding state and the attribute values. The state and the attribute information is what Home Assistant sees at run time. To update the entity with a new state, or a new attribute value, click on the entity, scroll to the top, and modify the values, and click on “SET STATE” button. + +Note that this is the state representation of a device within Home Assistant. That means, it is what Home Assistant sees, and it does not communicate with the actual device in any manner. The updated information can still be used to trigger events, and state changes. To communicate with the actual device, it is recommended to call services in the services section above, instead of updating state. + +For ex: Changing the `light.bedroom` state from `off` to `on` does not turn on the light. If there is an automation that triggers on the `state` change of the `light.bedroom`, it will be triggered – even though the actual bulb has not turned on. Also, when the bulb state changes – the state information will be overridden. In other words, the changes that are made through the “States” section are temporary, and is recommended to use for testing purposes only. + +{% linkable_title Events %} + +This Events section is as basic as it can get. It does only one thing – fires events on the event bus. +To fire an event, simply type the name of the event, and pass the event data in JSON format. +For ex: To fire a custom event, enter the `event_type` as `event_light_state_changed` and the event data JSON as + +```json +{ "state":"on" } +``` + +If there is an automation that handles that event, it will be automatically triggered. See below: +```yaml +- alias: Capture Event + trigger: + platform: event + event_type: event_light_state_changed + action: + - service: notify.notify + data_template: + message: "Light is turned {{ trigger.event.data.state }}" +``` + +{% linkable_title Template Editor %} + +The Template Editor provides a way to test the template code quickly. When the Template Editor page is loaded, it comes with a sample template code that illustrates how the code can be written and tested. + +It has two sections, code goes on the left hand side, and the output is shown on the right hand side. The code can be removed and replaced, and when the page is loaded/refreshed, the default sample code will be loaded back. + +It is a good practice to test the template code in the template editor prior to putting it in automations and scripts. + +For more information about jinja2, visit [jinja2 documentation](http://jinja.pocoo.org/docs/dev/templates/), and also read templating document [here](/topics/templating/) + + +{% linkable_title mqtt %} + +This section is only visible if the MQTT component is configured. To configure MQTT, add `mqtt:` to the `configuration.yaml` file. For more information, refer to the [mqtt](/components/mqtt/) component. + +Even though MQTT in general provides deeper functionality, the developer tools section of MQTT is limited to publishing messages to a given topic. It supports templates for the payload. To publish a message, simply specify the topic name and the payload and click “PUBLISH” button. + +{% linkable_title Info %} + +The Information tab simply provides information about the current installed version, additional links and credits. The tab also contains a section that shows `syslog` information, and the contents of `home-assistant.log` with an option to clear and refresh the logs. diff --git a/source/_docs/tools/ensure_config.markdown b/source/_docs/tools/ensure_config.markdown new file mode 100644 index 00000000000..596c44d5717 --- /dev/null +++ b/source/_docs/tools/ensure_config.markdown @@ -0,0 +1,17 @@ +--- +layout: page +title: "ensure_config" +description: "Script to perform a check if the configuration file exists" +release_date: 2017-02-23 11:00:00 +sidebar: true +comments: false +sharing: true +footer: true +--- + +This script checks if the `configuration.yaml` file exists. If the file is not available, one is created. + +```bash +$ hass --script ensure_config +``` + diff --git a/source/_docs/tools/hass.markdown b/source/_docs/tools/hass.markdown index 3ba0896f359..73e0bd68cd2 100644 --- a/source/_docs/tools/hass.markdown +++ b/source/_docs/tools/hass.markdown @@ -39,6 +39,7 @@ optional arguments: specified days --log-file LOG_FILE Log file to write to. If not set, CONFIG/home- assistant.log is used + --log-no-color Disable color logs --runner On restart exit with code 100 --script ... Run one of the embedded scripts --daemon Run Home Assistant as daemon diff --git a/source/_docs/tools/influxdb_import.markdown b/source/_docs/tools/influxdb_import.markdown new file mode 100644 index 00000000000..8ff3d85e7b8 --- /dev/null +++ b/source/_docs/tools/influxdb_import.markdown @@ -0,0 +1,63 @@ +--- +layout: page +title: "influxdb_import" +description: "Script to import data into an InfluxDB database" +release_date: 2017-02-23 11:00:00 +sidebar: true +comments: false +sharing: true +footer: true +--- + +If you want to import all the recorded data from your recorder database you can use the data import script. It will read all your state_change events from the database and add them as data-points to the InfluxDB. You can specify the source database either by pointing the `--config` option to the config directory which includes the default SQLite database or by giving a sqlalchemy connection URI with `--uri`. + +The writing to InfluxDB is done in batches that can be changed with `--step`. + +You can control, which data is imported by using the command line options `--exclude_entities` and `--exclude_domains`. Both get a comma separated list of either entity-ids or domain names that are excluded from the import. + +To test what gets imported you can use the `--simulate` option, which disables the actual write to the InfluxDB instance. This only writes the statistics how much points would be imported from which entity. + +Example to run the script: + +```bash +$ hass --script influxdb_import --config CONFIG_DIR \ + -H IP_INFLUXDB_HOST -u INFLUXDB_USERNAME -p INFLUXDB_PASSWORD \ + --dbname INFLUXDB_DB_NAME --exclude_domains automation,configurator +``` +Script arguments: + +``` +required arguments: + -d dbname, --dbname dbname + InfluxDB database name + +optional arguments: + -h, --help show this help message and exit + -c path_to_config_dir, --config path_to_config_dir + Directory that contains the Home Assistant + configuration + --uri URI Connect to URI and import (if other than default + sqlite) eg: mysql://localhost/homeassistant + + -H host, --host host InfluxDB host address + -P port, --port port InfluxDB host port + -u username, --username username + InfluxDB username + -p password, --password password + InfluxDB password + -s step, --step step How many points to import at the same time + -t tags, --tags tags Comma separated list of tags (key:value) for all + points + -D default_measurement, --default-measurement default_measurement + Store all your points in the same measurement + -o override_measurement, --override-measurement override_measurement + Store all your points in the same measurement + -e exclude_entities, --exclude_entities exclude_entities + Comma separated list of excluded entities + -E exclude_domains, --exclude_domains exclude_domains + Comma separated list of excluded domains + -S, --simulate Do not write points but simulate preprocessing + and print statistics +``` + + diff --git a/source/_docs/tools/influxdb_migrator.markdown b/source/_docs/tools/influxdb_migrator.markdown new file mode 100644 index 00000000000..df8e83e4058 --- /dev/null +++ b/source/_docs/tools/influxdb_migrator.markdown @@ -0,0 +1,39 @@ +--- +layout: page +title: "influxdb_migrator" +description: "Script to convert an old-structure Influx database to a new one." +release_date: 2017-02-23 11:00:00 +sidebar: true +comments: false +sharing: true +footer: true +--- + +Script to convert an old-structure Influx database to a new one. + +Example to run the script: + +```bash +$ hass --script influxdb_migrator -H IP_INFLUXDB_HOST \ + -u INFLUXDB_USERNAME -p INFLUXDB_PASSWORD \ + --dbname INFLUXDB_DB_NAME +``` +Script arguments: + +``` +optional arguments: + -h, --help show this help message and exit + -d dbname, --dbname dbname + InfluxDB database name + -H host, --host host InfluxDB host address + -P port, --port port InfluxDB host port + -u username, --username username + InfluxDB username + -p password, --password password + InfluxDB password + -s step, --step step How many points to migrate at the same time + -o override_measurement, --override-measurement override_measurement + Store all your points in the same measurement + -D, --delete Delete old database +``` + diff --git a/source/_docs/tools/keyring.markdown b/source/_docs/tools/keyring.markdown new file mode 100644 index 00000000000..be4f2634a0d --- /dev/null +++ b/source/_docs/tools/keyring.markdown @@ -0,0 +1,41 @@ +--- +layout: page +title: "keyring" +description: "Script to store secrets in a keyring" +release_date: 2017-02-23 11:00:00 +sidebar: true +comments: false +sharing: true +footer: true +--- + +Using [Keyring](https://github.com/jaraco/keyring) is an alternative way to `secrets.yaml`. The secrets can be managed from the command line via the `keyring` script. + +```bash +$ hass --script keyring --help +``` + +To store a password in keyring, replace your password or API key with `!secret` and an identifier in `configuration.yaml` file. + +```yaml +http: + api_password: !secret http_password +``` + +Create an entry in your keyring. + +```bash +$ hass --script keyring set http_password +``` + +If you launch Home Assistant now, you will be prompted for the keyring password to unlock your keyring. + +```bash +$ hass +Config directory: /home/homeassistant/.homeassistant +Please enter password for encrypted keyring: +``` + +

+ If you are using the Python Keyring, [autostarting](/getting-started/autostart/) of Home Assistant will no longer work. +

diff --git a/source/_docs/tools/scripts.markdown b/source/_docs/tools/scripts.markdown index a0b96505e3f..2b40ba28c5c 100644 --- a/source/_docs/tools/scripts.markdown +++ b/source/_docs/tools/scripts.markdown @@ -7,47 +7,7 @@ sidebar: true comments: false sharing: true footer: true +redirect_from: /docs/tools/ --- -The command-line and the frontend which simplify common tasks, are helping with migrations, and ensure that Home Assistant runs properly. Please do not confuse those with Home Assistant's [script](/docs/scripts/) feature. -### {% linkable_title Configuration check %} - -Test any changes to your `configuration.yaml` file before launching Home Assistant. This script allows you to test changes without the need to restart Home Assistant. - -```bash -$ hass --script check_config -``` - -### {% linkable_title Existence of configuration %} - -This script checks if the `configuration.yaml` file exists. If the file is not available, one is created. - -```bash -$ hass --script ensure_config -``` - -### {% linkable_title Secrets %} - -There is a method to store secrets outside of your `configuration.yaml` file. For further details, please refer to the [Storing Secrets](/docs/configuration/secrets/) documentation. - -```bash -$ hass --script keyring -``` - -### {% linkable_title Benchmark %} - -For testing the performance of Home Assistant the Benchmark script runs until you exit using Control+C. - -Firing and handling of a million events. - -```bash -$ hass --script benchmark async_million_events -``` - -### {% linkable_title Old scripts %} - -Usually those scripts were only used when a massive update happened and was announced in the release notes. - -- `db_migrator`: Migrate an existing SQLite database to the new schema. -- `influxdb_migrator`: Convert an old InfluxDB to the new format. diff --git a/source/_docs/z-wave.markdown b/source/_docs/z-wave.markdown index 98c9ffc9008..6ee6a284fa1 100644 --- a/source/_docs/z-wave.markdown +++ b/source/_docs/z-wave.markdown @@ -20,7 +20,7 @@ Before configuring the Z-Wave setup, please take a moment and read [this article Z-Wave is a wireless communication protocol designed for home automation. It uses a low power, and low bandwidth, mesh network that allows devices that aren't within direct range of each other to communicate indirectly, via other nodes. Any device that's permanently powered (not battery powered) will help build the mesh, if you don't have enough powered devices, or you locate these poorly, your mesh will be unreliable. -There is a limit of 232 devices in a single Z-Wave network. If you need more devices then you could set up a second Home Assistant system with its own Z-Wave network and connect these with the [MQTT Eventstream](/components/mqtt_eventstream/) or [MQTT Statestream](/components/mqtt_statestream) components. +There is a limit of 232 devices in a single Z-Wave network. If you need more devices then you could set up a second Home Assistant system with its own Z-Wave network and connect these with the [MQTT Eventstream](/components/mqtt_eventstream/) or [MQTT Statestream](/components/mqtt_statestream) components. There is also a limit of 4 hops for Z-Wave, so placing the controller as centrally as you can is important. The Z-Wave standard was improved with Z-Wave Plus, and if you only use Z-Wave plus devices then you will gain the full benefits. @@ -37,3 +37,9 @@ There are 12 different regions for Z-Wave devices, which relates to the frequenc You'll now need to connect your [controller](/docs/z-wave/controllers/), [configure](/docs/z-wave/installation) the Z-Wave component, then [add some devices](/docs/z-wave/adding) using the [control panel](/docs/z-wave/control-panel). [This explains](/docs/z-wave/devices/) about devices, and how [entities are named](/docs/z-wave/entities). You can get more information on the [available services](/docs/z-wave/services/) and [events](/docs/z-wave/events/), what the [query stages](/docs/z-wave/query-stage) of battery powered devices are, as well as details on configuring [specific devices](/docs/z-wave/device-specific/). + +## {% linkable_title Instant status updates %} + +When you toggle a switch or control a light locally you may find that it takes some time for that to be reflected in Home Assistant. That's because Lutron had patents on the status updates using the *Hail* command class, the traditional way of allowing devices to tell the controller that something happened locally. The same result can be achieved through the *Association* command class, or *Central Scene* command class (though, *Central Scene* isn't [fully supported](https://github.com/OpenZWave/open-zwave/pull/1125) in OpenZWave). + +If you search [the Z-Wave products database](http://products.z-wavealliance.org/) for your product and it lists one of those in the **Controlled** command classes (not the **Supported** command classes), then your device will be able to report state changes when they happen. If it doesn't then updates may either happen eventually, or you may need to (carefully) [enable polling](https://www.home-assistant.io/docs/z-wave/control-panel/#entities-of-this-node). diff --git a/source/_docs/z-wave/adding.markdown b/source/_docs/z-wave/adding.markdown index 101fb4a6b27..c52661c0c1c 100644 --- a/source/_docs/z-wave/adding.markdown +++ b/source/_docs/z-wave/adding.markdown @@ -16,9 +16,9 @@ To add (include) a non-secure Z-Wave [device](/docs/z-wave/devices/) to your sys 1. Go to the [Z-Wave control panel](/docs/z-wave/control-panel/) in the Home Assistant frontend 2. Click the **Add Node** button in the *Z-Wave Network Management* card - this will place the controller in inclusion mode 3. Activate your device to be included by following the instructions provided with the device -4. With the device in its final location, run a *Heal* +4. With the device in its final location, run a *Heal Network* -Don't use this for [secure devices](https://home-assistant.io/docs/z-wave/adding/#adding-secure-devices), since this is likely to limit the features the device supports. +Don't use this for [secure devices](/docs/z-wave/adding/#adding-secure-devices), since this is likely to limit the features the device supports.

Don't use the OpenZWave control panel (OZWCP), **or the physical button on a controller**, to add or remove devices. Many devices will only send the information about their capabilities at the time you include them. If you use the OpenZWave control panel, or the button on a device, then Home Assistant won't have that information. Using the physical button on a controller will also result in a non-security inclusion being performed, which may limit the features the device supports. @@ -26,13 +26,19 @@ Don't use the OpenZWave control panel (OZWCP), **or the physical button on a con When you add a device, it may initially appear without a specific entity ID (eg `zwave.__`) and without other identifying information. Running a *Heal* should help speed this process up, and you'll need to run a *Heal* anyway so that all the devices in your Z-Wave network learn about the new device. You *might* need to restart Home Assistant (not reboot the system) to have the entity ID fully visible. -## {% linkable_title Adding Secure Devices %} +## {% linkable_title Network Key %} -Security Z-Wave devices require a network key. You must set the *network_key* configuration variable to use a network key before adding these devices. Some devices only expose their full capabilities when included this way, you should always read the manual for your device to find out the recommended inclusion method. Note, secure devices that had been connected to another hub/network in the past may have a "theft protection" feature which requires to first exclude the device successfully from the previous hub using the previous hub/Software setup before it can be enrolled in a new hub/network. To add (include) a secure Z-Wave device: +Security Z-Wave devices require a network key. Some devices only expose their full capabilities when included this way. You should always read the manual for your device to find out the recommended inclusion method. Note, secure devices that had been connected to another hub/network in the past may have a "theft protection" feature which requires to first exclude the device successfully from the previous hub using the previous hub/Software setup before it can be enrolled in a new hub/network. -1. Go to the [Z-Wave control panel](/docs/z-wave/control-panel/) in the Home Assistant frontend -2. Click the **Add Node Secure** button in the *Z-Wave Network Management* card - this will place the controller in inclusion mode -3. Activate your device to be included by following the instructions provided with the device +A valid network key will be a 16 byte value, defined in the zwave section of your configuration, such as the following example: + +``` +zwave: + usb_path: /dev/ttyACM0 + network_key: "0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x10" +``` + +Each individual value in the defined key can be anywhere from 0x00 to 0xFF. Define your own key by making changes to the above example key or for additional security try one of the two scripts mentioned below. ### {% linkable_title Network Key %} @@ -50,6 +56,15 @@ cat /dev/urandom | LC_CTYPE=C tr -dc '0-9A-F' | fold -w 32 | head -n 1 | sed -e Ensure you keep a backup of this key. If you have to rebuild your system and don't have a backup of this key, you won't be able to reconnect to any security devices. This may mean you have to do a factory reset on those devices, and your controller, before rebuilding your Z-Wave network.

+## {% linkable_title Adding Secure Devices %} + +After defining your network key, follow these steps to add (include) a secure Z-Wave device: + +1. Go to the [Z-Wave control panel](/docs/z-wave/control-panel/) in the Home Assistant frontend +2. Click the **Add Node Secure** button in the *Z-Wave Network Management* card - this will place the controller in inclusion mode +3. Activate your device to be included by following the instructions provided with the device +4. With the device in its final location, run a *Heal Network* + ## {% linkable_title Removing Devices %} To remove (exclude) a Z-Wave device from your system: @@ -57,4 +72,11 @@ To remove (exclude) a Z-Wave device from your system: 1. Go to the Z-Wave control panel in the Home Assistant frontend 2. Click the **Remove Node** button in the *Z-Wave Network Management* card - this will place the controller in exclusion mode 3. Activate your device to be excluded by following the instructions provided with the device -4. With the device in its final location, run a *Heal* +4. Run a *Heal Network* so all the other nodes learn about its removal + +## {% linkable_title Troubleshooting %} + +Sometimes devices won't add to Home Assistant. There are a couple of possible problems. + +1. You're not using all Z-Wave Plus devices, in which case the device can't use the mesh to be added, and must be in the same room as your controller. +2. The device was previously added to another controller, and not removed. You'll need to follow the process above for removing devices first, then try adding it again. diff --git a/source/_docs/z-wave/control-panel.markdown b/source/_docs/z-wave/control-panel.markdown index 5fdc18b9290..81ae4b9918b 100644 --- a/source/_docs/z-wave/control-panel.markdown +++ b/source/_docs/z-wave/control-panel.markdown @@ -32,14 +32,18 @@ Here is where you [include and exclude](/docs/z-wave/adding/) Z-Wave devices fro ## {% linkable_title Z-Wave Node Management %} +

+Since 0.63 and the new experimental [entity registry](/docs/configuration/entity-registry/) **Rename Node** no longer changes the entity id for anything other than the `zwave.` entity for the node (it does change the default *friendly_name* attribute for all the entities). If you would like to update the entity id after renaming a z-wave device, you need to manually edit the [entity_registry.yaml](/docs/configuration/entity-registry/) file. See [this issue](https://github.com/home-assistant/home-assistant/issues/12430). +

+ * **Refresh Node** refreshes the information on the node and its entities. If used on a battery powered device, the device will first need to wake for this to work. * **Remove Failed Node** will remove a failed node from the network. The node needs to be on the controller's Failed Node List (marked as `is_failed: true`), otherwise this command will fail. * **Replace Failed Node** will replace a failed device with another. If the node is not in the controller's Failed Node List, or the node responds, this command will fail. * **Print Node** prints all state of Z-Wave node to the console log -* **Rename Node** sets a node's name - this won't happen immediately, and requires you to restart Home Assistant (not reboot) to set the new name +* **Rename Node** sets the name of the `zwave` entity - this won't happen immediately, and requires you to restart Home Assistant (not reboot) to set the new name. Other entities of a device are renamed using the [entity registry](/docs/configuration/entity-registry/). -* **Heal Node** starts healing of the node.(Update neighbour list and update return routes) +* **Heal Node** starts healing of the node.(Update neighbor list and update return routes) * **Test Node** sends no_op test messages to the node. This could in theory bring back a dead node. @@ -47,14 +51,34 @@ Here is where you [include and exclude](/docs/z-wave/adding/) Z-Wave devices fro Battery powered devices need to be awake before you can use the Z-Wave control panel to update their settings. How to wake your device is device specific, and some devices will stay awake for only a couple of seconds. Please refer to the manual of your device for more details.

+### {% linkable_title Renaming all entities of a node %} + +When you use *Rename Node* it, as mentioned above, only changes the `zwave.` entity. If you've just added a device then the other entities for that device will use that new entity name as the base. However existing entities won't be renamed, so you need to remove them from `entity_registry.yaml`, and the process is like this: + +1. Use *Rename Node* to rename the `zwave.` entity and set the base for all the other entities +2. Shut down Home Assistant and wait for it to stop +3. Delete the relevant entries from `entity_registry.yaml` +4. Start Home Assistant again + +Each block you need to delete will look something like this, you need to delete all 4 lines for each entry. The first number of the `unique-id` is the Node ID of the Z-Wave node. + +```yaml +sensor.fibaro_door_sensor_access_control: + name: + platform: zwave + unique_id: 5-72057594126614528 +``` + #### {% linkable_title Entities of this node %} This is a dropdown where you can select all the entities of this node. Once selected you can then use: * **Refresh Entity** to refresh just that entity's values -* **Entity Attributes** to display the attributes of that entity (eg it's friendly name, the ID of the node, etc) +* **Entity Attributes** to display the attributes of that entity (eg its friendly name, the ID of the node, etc) -Here you can mark a device as requiring polling (before 0.55 this was displayed at the top), so the controller is aware of changes because the device doesn't send updates itself. Do see the information on [polling here](/docs/z-wave/polling/), since excessive polling can break your Z-Wave network. +Here you can mark a device as requiring polling so the controller is aware of changes because the device doesn't send updates itself. Do see the information on [polling here](/docs/z-wave/devices/#polling), since excessive polling can break your Z-Wave network. + +The **Polling intensity** says how many poll intervals does is this device polled on. For example, if you set 2 then it's polled on every second interval. You can also exclude a Z-Wave devices from Home Assistant. You can do that if you have a device that you need to have on the Z-Wave network, but you don't want it to appear in Home Assistant, or if you've got a device that's failed and you're unable to exclude it. @@ -76,10 +100,8 @@ This will display the Z-Wave related information about the node: * **lastResponseRTT** The Round Trip Time of the response to the last request * **manufacturer_name** The name of the manufacturer, as supplied by OpenZWave * **max_baud_rate** The maximum bandwidth the device supports, most modern devices will support 40,000 or higher -* **new_entity_id** In 0.47, Home Assistant introduced a new naming convention for entities, this shows the new naming convention * **node_id** The unique node ID of this node * **node_name** The base name of this node, this is used to build the entity ID of all entities of this node -* **old_entity_id** If `new_entity_ids: false` has been configured, then this is the entity_id that will be used. Support for this will be removed in the future * **product_name** The product name of the device, as supplied by OpenZWave * **query_stage** The query stage for this device (see [here](/docs/z-wave/query-stage/) for details) * **receivedCnt** The number of messages received from the device @@ -104,6 +126,16 @@ You can use this to enable one device to directly control another. This is prima There may be multiple groups, that are used for different purposes. The manual of your device will explain what each group is for. +#### {% linkable_title Broadcast group %} + +Some Z-Wave devices may associate themselves with the broadcast group (group 255). You'll be able to tell if this has happened if opening a door (or triggering a motion sensor) causes lights to come on, and closing the door (or the motion sensor going clear) causes lights to run off. There's no way to clear this from the control panel, but you can use the `zwave.change_association` service: + +```json +{"association": "remove", "node_id": 3, "group": 1, "target_node_id": 255} +``` + +That would remove the broadcast group from association group 1 of the device with node_id 3. + ### {% linkable_title Node config options %} You can set the *wakeup* interval (in seconds) of the device, this is shown for all devices that can be battery powered, even if they are currently mains powered. The wakeup interval only applies when those devices are battery powered. @@ -112,7 +144,7 @@ Underneath that you can select any supported configuration parameter to see the ## {% linkable_title Node user codes %} -If your node has user codes, you can set and delete them. The format is raw hex Ascii code. Bellow the input you will see your actual code. For normal nodes this is as follows: +If your node has user codes, you can set and delete them. The format is raw hex Ascii code. Below the input you will see your actual code. For normal nodes this is as follows: ```yaml \x30 = 0 \x31 = 1 @@ -128,6 +160,20 @@ If your node has user codes, you can set and delete them. The format is raw hex Some non compliant device like tag readers, have implemented to use raw hex code. Please refer to a hex ascii table to set your code. Example: http://www.asciitable.com/ +Here is a small Python program than will take numbers on the command line and print the correct sequence for compliant devices: + +```python +#! /usr/bin/python3 +import sys + +translations = {} + +for x in range(0, 10): + translations["%s" % x] = "\\x3%s" % x + +for c in sys.argv[1]: + print(translations[c], end='') +``` ## {% linkable_title OZW Log %} diff --git a/source/_docs/z-wave/controllers.markdown b/source/_docs/z-wave/controllers.markdown index 941f8d1eea5..fdaac560c3c 100644 --- a/source/_docs/z-wave/controllers.markdown +++ b/source/_docs/z-wave/controllers.markdown @@ -17,7 +17,7 @@ You need to have a [supported Z-Wave USB stick or module](https://github.com/Ope |-------------------------|----------------|------------------|--------------| | Aeotec Z-Stick | ✓ | | | | Aeotec Z-Stick Series 2 | ✓ | | | -| Aeotec Z-Stick Series 5 | ✓ | | ✓ | +| Aeotec Z-Stick Series 5 | ✓ | ✓ | ✓ | | Pine64 Z-Wave Module | ✓ | | | | Razberry GPIO Module | ✓ | | | | Seluxit ViaSens 100 | | | | @@ -27,7 +27,7 @@ You need to have a [supported Z-Wave USB stick or module](https://github.com/Ope | ZWave.me UZB1 | ✓ | | |

- If you're using Hass.io, it's recommended to use a USB stick, not a module. Passing a module through Docker is more complicated than passing a USB stick through. + If you're using Hass.io or running HASS in a Docker container, it's recommended to use a USB stick, not a module. Passing a module through Docker is more complicated than passing a USB stick through.

## {% linkable_title Stick Alternatives %} diff --git a/source/_docs/z-wave/device-specific.markdown b/source/_docs/z-wave/device-specific.markdown index 419d8a8c850..2d217d8c4a2 100644 --- a/source/_docs/z-wave/device-specific.markdown +++ b/source/_docs/z-wave/device-specific.markdown @@ -29,7 +29,7 @@ Home Assistant stores logs from Z-Wave in `OZW_log.txt` in the Home Assistant co ### {% linkable_title Aeotec Z-Stick %} -It's totally normal for your Z-Wave stick to cycle through its LEDs (Yellow, Blue and Red) while plugged into your system. If you don't like this behaviour it can be turned off. +It's totally normal for your Z-Wave stick to cycle through its LEDs (Yellow, Blue and Red) while plugged into your system. If you don't like this behavior it can be turned off. Use the following example commands from a terminal session on your Pi where your Z-Wave stick is connected. @@ -61,6 +61,10 @@ $ sudo systemctl disable hciuart Finally, reboot to make those changes active. It's been reported that this is also required on the Pi2. +

+ If you've installed the Z-Way software, you'll need to ensure you disable it before you install Home Assistant or you won't be able to access the board. Do this with `sudo /etc/init.d/z-way-server stop; sudo update-rc.d z-way-server disable`. +

+ ### {% linkable_title Aeon Minimote %} Here's a handy configuration for the Aeon Labs Minimote that defines all possible button presses. Put it into `automation.yaml`. @@ -74,7 +78,6 @@ Here's a handy configuration for the Aeon Labs Minimote that defines all possibl event_data: entity_id: zwave.aeon_labs_minimote_1 scene_id: 1 - - id: mini_1_held alias: 'Minimote Button 1 Held' trigger: @@ -83,7 +86,6 @@ Here's a handy configuration for the Aeon Labs Minimote that defines all possibl event_data: entity_id: zwave.aeon_labs_minimote_1 scene_id: 2 - - id: mini_2_pressed alias: 'Minimote Button 2 Pressed' trigger: @@ -92,7 +94,6 @@ Here's a handy configuration for the Aeon Labs Minimote that defines all possibl event_data: entity_id: zwave.aeon_labs_minimote_1 scene_id: 3 - - id: mini_2_held alias: 'Minimote Button 2 Held' trigger: @@ -101,7 +102,6 @@ Here's a handy configuration for the Aeon Labs Minimote that defines all possibl event_data: entity_id: zwave.aeon_labs_minimote_1 scene_id: 4 - - id: mini_3_pressed alias: 'Minimote Button 3 Pressed' trigger: @@ -110,7 +110,6 @@ Here's a handy configuration for the Aeon Labs Minimote that defines all possibl event_data: entity_id: zwave.aeon_labs_minimote_1 scene_id: 5 - - id: mini_3_held alias: 'Minimote Button 3 Held' trigger: @@ -119,7 +118,6 @@ Here's a handy configuration for the Aeon Labs Minimote that defines all possibl event_data: entity_id: zwave.aeon_labs_minimote_1 scene_id: 6 - - id: mini_4_pressed alias: 'Minimote Button 4 Pressed' trigger: @@ -128,7 +126,6 @@ Here's a handy configuration for the Aeon Labs Minimote that defines all possibl event_data: entity_id: zwave.aeon_labs_minimote_1 scene_id: 7 - - id: mini_4_held alias: 'Minimote Button 4 Held' trigger: @@ -139,17 +136,51 @@ Here's a handy configuration for the Aeon Labs Minimote that defines all possibl scene_id: 8 ``` +### {% linkable_title Zooz Toggle Switches %} + +Some models of the Zooz Toggle switches ship with an instruction manual with incorrect instruction for Z-Wave inclusion/exclusion. The instructions say that the switch should be quickly switched on-off-on for inclusion and off-on-off for exclusion. However, the correct method is on-on-on for inclusion and off-off-off for exclusion. + +## {% linkable_title Central Scene configuration %} + +To provide Central Scene support you need to shut Home Assistant down and modify your `zwcfg_*.xml` file according to the following guides. + +### {% linkable_title Inovelli Scene Capable On/Off and Dimmer Wall Switches %} + +For Inovelli switches, you'll need to update (or possibly add) the `COMMAND_CLASS_CENTRAL_SCENE` for each node in your `zwcfg` file with the following: + +```xml + + + + + + +``` + +Once this is complete, you should see the follow `zwave.scene_activated` events: + +**Action**|**scene\_id**|**scene\_data** +:-----:|:-----:|:-----: +Double tap off|1|3 +Double tap on|2|3 +Triple tap off|1|4 +Triple tap on|2|4 +4x tap off|1|5 +4x tap on|2|5 +5x tap off|1|6 +5x tap on|2|6 + ### {% linkable_title HomeSeer Switches %} For the HomeSeer devices specifically, you may need to update the `COMMAND_CLASS_CENTRAL_SCENE` for each node in your `zwcfg` file with the following: ```xml - - - - - - + + + + + + ``` Below is a table of the action/scenes for the HomeSeer devices (as a reference for other similar devices): @@ -189,6 +220,49 @@ Triple tap on|1|4 Tap and hold wakes up the Button. +### {% linkable_title Fibaro Keyfob FGKF-601 %} + + +For the Fibaro Keyfob, you may need to update the `COMMAND_CLASS_CENTRAL_SCENE` for each node in your `zwcfg` file with the following: + +```xml + + + + + + + + + + +``` + +Below is a table of the action/scenes for the Keyfob (as a reference for other similar devices): + +**Action**|**scene\_id**|**scene\_data** +:-----:|:-----:|:-----: +Button one (Square) single tap|1|7680 +Button one (Square) hold|1|7800 +Button one (Square) release|1|7740 +Button two (Circle) single tap|2|7680 +Button two (Circle) hold|2|7800 +Button two (Circle) release|2|7740 +Button three (X) single tap|3|7680 +Button three (X) hold|3|7800 +Button three (X) release|3|7740 +Button four (Triangle) single tap|4|7680 +Button four (Triangle) hold|4|7800 +Button four (Triangle) release|4|7740 +Button five (Triangle) single tap|5|7680 +Button five (Triangle) hold|5|7800 +Button five (Triangle) release|5|7740 +Button six (Triangle) single tap|6|7680 +Button six (Triangle) hold|6|7800 +Button six (Triangle) release|6|7740 + +Press circle and plus simultaneously to wake up the device. + ### {% linkable_title Aeotec Wallmote %} @@ -211,11 +285,72 @@ Below is a table of the action/scenes for the Wallmote (as a reference for other **Action**|**scene\_id**|**scene\_data** :-----:|:-----:|:-----: -Button one single tap|1|TBC -Button two single tap|2|TBC -Button three single tap|3|TBC -Button four single tap|4|TBC +Button one single tap|1|0 +Button one hold|1|2 +Button one release|1|1 +Button two single tap|2|0 +Button two hold|2|2 +Button two release|2|1 +Button three single tap|3|0 +Button three hold|3|2 +Button three release|3|1 +Button four single tap|4|0 +Button four hold|4|2 +Button four release|4|1 -### {% linkable_title Zooz Toggle Switches %} +### {% linkable_title WallC-S Switch %} -Some models of the Zooz Toggle switches ship with an instruction manual with incorrect instruction for Z-Wave inclusion/exclusion. The instructions say that the switch should be quickly switched on-off-on for inclusion and off-on-off for exclusion. However, the correct method is on-on-on for inclusion and off-off-off for exclusion. +Use the same configuration as for the Aeotec Wallmote. + +### {% linkable_title HANK One-key Scene Controller HKZN-SCN01 %} + +For the HANK One-key Scene Controller, you may need to update the `COMMAND_CLASS_CENTRAL_SCENE` for each node in your `zwcfg` file with the following: + +```xml + + + + + +``` + +Below is a table of the action/scenes for the Button (as a reference for other similar devices): + +**Action**|**scene\_id**|**scene\_data** +:-----:|:-----:|:-----: +Button single tap|1|0 +Button hold|1|2 +Button release|1|1 + +### {% linkable_title HANK Four-key Scene Controller HKZN-SCN04 %} + +For the HANK Four-key Scene Controller, you may need to update the `COMMAND_CLASS_CENTRAL_SCENE` for each node in your `zwcfg` file with the following: + +```xml + + + + + + + + + +``` + +Below is a table of the action/scenes for the Buttons and associated Pictogram: + +**Action**|**Pictogram**|**scene\_id**|**scene\_data** +:-----:|:-----:|:-----:|:-----: +Button one tap|Moon and Star|1|0 +Button one hold|Moon and Star|1|2 +Button one release|Moon and Star|1|1 +Button two tap|People|2|0 +Button two hold|People|2|2 +Button two release|People|2|1 +Button three tap|Circle|3|0 +Button three hold|Circle|3|2 +Button three release|Circle|3|1 +Button four tap|Circle with Line|4|0 +Button four hold|Circle with Line|4|2 +Button four release|Circle with Line|4|1 \ No newline at end of file diff --git a/source/_docs/z-wave/devices.markdown b/source/_docs/z-wave/devices.markdown index 13d2966b4f4..92d43f00948 100644 --- a/source/_docs/z-wave/devices.markdown +++ b/source/_docs/z-wave/devices.markdown @@ -39,7 +39,7 @@ The key improvements are: ### {% linkable_title Z-Wave Security 2 %} -From 2 April 2017 all newly approved Z-Wave devices will have to support the Security 2 (S2) framework. At the time of writing this (September 2017) OpenZWave does not support the S2 framework. +From 2 April 2017 all newly approved Z-Wave devices will have to support the Security 2 (S2) framework. At the time of writing this (March 2018) OpenZWave does not support the S2 framework. ## {% linkable_title Device power %} diff --git a/source/_docs/z-wave/entities.markdown b/source/_docs/z-wave/entities.markdown index d18e7e39047..ffcd3a6c309 100644 --- a/source/_docs/z-wave/entities.markdown +++ b/source/_docs/z-wave/entities.markdown @@ -10,7 +10,7 @@ footer: true ---

-This is a work in progress, based upon reports in the forum, the author's own devices, and reading of various documentation. It will be incomplete, so if you have a device that isn't reported here, or have a device that reports a different value, please provide a report in the [Z-Wave section](https://community.home-assistant.io/c/configuration/zwave) of the forum or the #zwave channel on [Discord](https://discord.gg/RkajcgS). +This is a work in progress, based upon reports in the forum, the author's own devices and reading of various documentation. It will be incomplete, so if you have a device that isn't reported here or have a device that reports a different value, please provide a report in the [Z-Wave section](https://community.home-assistant.io/c/configuration/zwave) of the forum or the #zwave channel on [Discord](https://discord.gg/RkajcgS).

## {% linkable_title Binary Sensor %} @@ -35,10 +35,26 @@ Devices (usually sensors) that support the Alarm command class will create entit - **4**: Heat sensor - **5**: Water leak sensor - **6**: Access control + - **9**: Lock jammed + - **18**: Lock locked with user code + - **19**: Lock unlocked with user code + - **21**: Manual lock + - **22**: Manual unlock + - **24**: Locked by RF + - **25**: Unlocked by RF + - **27**: Auto lock + - **33**: User deleted + - **112**: Master code changed, or user added + - **113**: Duplicate PIN code error + - **130**: RF Module power cycled + - **161**: Tamper alarm + - **167**: Low battery + - **168**: Critical battery level + - **169**: Battery too low to operate ### {% linkable_title Alarm Level Entity %} -The meaning of the `alarm_level` entity depends on the nature of the alarm sensor +The meaning of the `alarm_level` entity depends on the nature of the alarm sensor. #### {% linkable_title Smoke, CO, and CO2 %} @@ -119,21 +135,19 @@ The meaning of the `alarm_level` entity depends on the nature of the alarm senso - **254**: Deep sleep - **255**: Case open -If your device has an `access_control` entity, but not a `binary_sensor` equivalent, you can use a [template binary sensor](omponents/binary_sensor.template/) to create one: +If your device has an `access_control` entity, but not a `binary_sensor` equivalent, you can use a [template binary sensor](/components/binary_sensor.template/) to create one (here we've defined it as a door, but you can use [any relevant device class](/components/binary_sensor/#device-class): -``` +{% raw %} +```yaml binary_sensor: - platform: template sensors: YOUR_SENSOR: friendly_name: "Friendly name here" - value_template: >- - {% raw %}{%- if is_state('sensor.YOUR_SENSOR_access_control', '22') -%} - on - {%- else -%} - off - {%- endif -%}{% endraw %} + device_class: door + value_template: {{ is_state('sensor.YOUR_ORIGINAL_SENSOR_access_control', '22') }} ``` +{% endraw %} ### {% linkable_title Burglar Entity %} @@ -147,21 +161,19 @@ binary_sensor: - **254**: Deep sleep - **255**: Case open -If your device has an `burglar` entity, but not a `binary_sensor` equivalent, you can use a [template binary sensor](omponents/binary_sensor.template/) to create one: +If your device has a `burglar` entity, but not a `binary_sensor` equivalent, you can use a [template binary sensor](/components/binary_sensor.template/) to create one (here we've defined it as a motion sensor, but you can use [any relevant device class](/components/binary_sensor/#device-class: -``` +{% raw %} +```yaml binary_sensor: - platform: template sensors: YOUR_SENSOR: friendly_name: "Friendly name here" - value_template: >- - {% raw %}{%- if is_state('sensor.YOUR_SENSOR_burglar', '8') -%} - on - {%- else -%} - off - {%- endif -%}{% endraw %} + device_class: motion + value_template: {{ is_state('sensor.YOUR_SENSOR_burglar', '8') }} ``` +{% endraw %} ### {% linkable_title Source Node ID Entity %} diff --git a/source/_docs/z-wave/installation.markdown b/source/_docs/z-wave/installation.markdown index 4765ecb07be..b3fc38d817a 100644 --- a/source/_docs/z-wave/installation.markdown +++ b/source/_docs/z-wave/installation.markdown @@ -10,6 +10,14 @@ footer: true redirect_from: /getting-started/z-wave-installation/ --- +The first time you enable the Z-Wave component it will install the Z-Wave drivers (python-openzwave). This can take up to half an hour on slow machines like Raspberry Pi. + +Installing the drivers might require some extra packages to be installed. Check your platform below. + +## {% linkable_title Platform specific installation instructions %} + +### {% linkable_title Linux (except Hass.io) %} + On Linux platforms (other than Hass.io) there is one dependency you will need to have installed ahead of time (included in `systemd-devel` on Fedora/RHEL systems): ```bash @@ -18,36 +26,38 @@ $ sudo apt-get install libudev-dev On Python 3.6 you may also have to install libpython3.6-dev, and possibly python3.6-dev. -When installing on macOS you may have to also run the command below ahead of time, replace "x.x" with the version of Python (`$ python3 --version`) you have installed. +### {% linkable_title macOS %} + +When installing on macOS you may have to also run the command below ahead of time, replace "x.x" with the version of Python (`$ python3 --version`) you have installed. ```bash $ sudo /Applications/Python\ x.x/Install\ Certificates.command ``` -

-The installation of python-openzwave happens when you first enable the Z-Wave component, and can take half an hour or more on a Raspbery Pi. -

+### {% linkable_title Raspberry Pi %} + +On Raspberry Pi you will need to enable the serial interface in the `raspi-config` tool before you can add Z-Wave to Home Assistant. ## {% linkable_title Configuration %} ```yaml # Example configuration.yaml entry zwave: - usb_path: /dev/ttyUSB0 + usb_path: /dev/ttyACM0 ``` {% configuration zwave %} -usb_path: +usb_path: description: The port where your device is connected to your Home Assistant host. required: false type: string default: /zwaveusbstick network_key: - description: The 16-byte network key in the form `"0x01, 0x02..."` used in order to connect securely to compatible devices. + description: The 16-byte network key in the form `"0x01, 0x02..."` used in order to connect securely to compatible devices. It is recommended that a network key is configured as security enabled devices may not function correctly if they are not added securely. required: false type: string default: None -config_path: +config_path: description: The path to the Python OpenZWave configuration files. required: false type: string @@ -67,16 +77,11 @@ debug: required: false type: boolean default: False -new_entity_ids: - description: Switch to new entity_id generation. - required: false - type: boolean - default: True -device_config: +device_config / device_config_domain / device_config_glob: description: This attribute contains node-specific override values. (For releases prior to 0.39 this variable is called **customize**) See [Customizing devices and services](/docs/configuration/customizing-devices/) for the format. required: false type: string, list - keys: + keys: ignored: description: Ignore this entity completely. It won't be shown in the Web Interface and no events are generated for it. required: false @@ -130,7 +135,7 @@ Or, if there is no result, try to find detailed USB connection info with: $ dmesg | grep USB ``` -If Home Assistant (`hass`) runs with another user (e.g. *homeassistant* on Hassbian) give access to the stick with: +If Home Assistant (`hass`) runs with another user (e.g., *homeassistant* on Hassbian) give access to the stick with: ```bash $ sudo usermod -a -G dialout homeassistant @@ -162,13 +167,7 @@ zwave: usb_path: /dev/ttyACM0 ``` -For some devices the `/dev/ttyAMA0` device is not detected by udev and is therefore not mapped by Docker. To explicitly set this device for mapping to Home-Assistant, execute the following command using the ssh add-on: - -```bash -$ curl -d '{"devices": ["ttyAMA0"]}' http://hassio/homeassistant/options -``` - -After that, you need to change `usb_path` to `/dev/ttyAMA0`. +Depending on your Z-Wave device it may instead be `/dev/ttyAMA0` (eg Razberry board) or `/dev/ttyUSB0` (eg HUBUZB-1). ### {% linkable_title RancherOS %} @@ -185,14 +184,20 @@ Security Z-Wave devices require a network key before being added to the network An easy script to generate a random key: ```bash -cat /dev/urandom | tr -dc '0-9A-F' | fold -w 32 | head -n 1 | sed -e 's/\(..\)/0x\1, /g' -e 's/, $//' +$ cat /dev/urandom | tr -dc '0-9A-F' | fold -w 32 | head -n 1 | sed -e 's/\(..\)/0x\1, /g' -e 's/, $//' +``` + +```yaml +# Example configuration.yaml entry for network_key +zwave: + network_key: "0x2e, 0xcc, 0xab, 0x1c, 0xa3, 0x7f, 0x0e, 0xb5, 0x70, 0x71, 0x2d, 0x98, 0x25, 0x43, 0xee, 0x0c" ``` Ensure you keep a backup of this key. If you have to rebuild your system and don't have a backup of this key, you won't be able to reconnect to any security devices. This may mean you have to do a factory reset on those devices, and your controller, before rebuilding your Z-Wave network. ## {% linkable_title First Run %} -The (compilation and) installation of python-openzwave happens when you first enable the Z-Wave component, and can take half an hour or more on a Raspbery Pi. When you upgrade Home Assistant and python-openzwave is also upgraded, this will also result in a delay while the new version is compiled and installed. +The (compilation and) installation of python-openzwave happens when you first enable the Z-Wave component, and can take half an hour or more on a Raspberry Pi. When you upgrade Home Assistant and python-openzwave is also upgraded, this will also result in a delay while the new version is compiled and installed. The first run after adding a device is when the `zwave` component will take time to initialize the entities, some entities may appear with incomplete names. Running a network heal may speed up this process. @@ -200,10 +205,10 @@ The first run after adding a device is when the `zwave` component will take time ### {% linkable_title Component could not be set up %} -Sometimes the device may not be accessible and you'll get an error message upon startup about not being able to set up Z-Wave. Run the following command for your device path: +Sometimes the device may not be accessible and you'll get an error message upon startup about not being able to set up Z-Wave. Run the following command for your device path (here we're using `/dev/ttyAMA0` for our Razberry board): ```bash -ls -l /dev/ttyAMA0 +$ ls -l /dev/ttyAMA0 ``` You should then see something like this: @@ -215,10 +220,30 @@ crw-rw---- 1 root dialout 204, 64 Apr 1 12:34 /dev/ttyAMA0 The important pieces are the first piece `crw-rw----` and the group `dialout`. If those are different then, for your device path, run: ```bash -sudo chgrp dialout /dev/ttyAMA0 -sudo chmod g+rw /dev/ttyAMA0 +$ sudo chgrp dialout /dev/ttyAMA0 +$ sudo chmod g+rw /dev/ttyAMA0 +``` + +Check too that the account you're running Home Assistant as is in the `dialout` group. For instance, if you're using `homeassistant`: + +```bash +$ groups homeassistant +``` + +That should include `dialout`, if it doesn't then: + +```bash +$ sudo usermod -G dialout homeassistant ``` ### {% linkable_title Device path changes %} If your device path changes when you restart, see [this guide](http://hintshop.ludvig.co.nz/show/persistent-names-usb-serial-devices/) on fixing it. + +### {% linkable_title Unable to install Python Openzwave %} + +If you're getting errors like: + + openzwave-embed/open-zwave-master/libopenzwave.a: No such file or directory + +Then the problem is that you're missing `libudev-dev`, please [install it](/docs/z-wave/installation/#linux-except-hassio). diff --git a/source/_docs/z-wave/query-stage.markdown b/source/_docs/z-wave/query-stage.markdown index 2037963e455..7112cd055b6 100644 --- a/source/_docs/z-wave/query-stage.markdown +++ b/source/_docs/z-wave/query-stage.markdown @@ -9,6 +9,10 @@ sharing: true footer: true --- +When the Z-Wave mesh is first started, the controller will go through all the following stages for every device on the mesh. This is a slow process, and to complete requires that the devices be awake. While devices that are mains or USB powered are always awake, battery-powered devices spend most of their time asleep. Because of this, you can expect that after startup your battery powered devices will spend time in `Initializing (CacheLoad)` - how long depends on the device. + +Your devices will still function normally while marked as `Initializing`. + | Stage | Description | |------------------------|--------------------------------------------------------------------| | None | Query process hasn't started for this node | @@ -17,7 +21,7 @@ footer: true | WakeUp | Start wake up process if a sleeping node | | ManufacturerSpecific1 | Retrieve manufacturer name and product ids if ProtocolInfo lets us | | NodeInfo | Retrieve info about supported, controlled command classes | -| NodePlusInfo | Retrieve ZWave+ info and update device classes | +| NodePlusInfo | Retrieve Z-Wave+ info and update device classes | | SecurityReport | Retrieve a list of Command Classes that require Security | | ManufacturerSpecific2 | Retrieve manufacturer name and product ids | | Versions | Retrieve version information | diff --git a/source/_docs/z-wave/services.markdown b/source/_docs/z-wave/services.markdown index 61c2ff7a860..8b8d9d32276 100644 --- a/source/_docs/z-wave/services.markdown +++ b/source/_docs/z-wave/services.markdown @@ -15,7 +15,7 @@ The `zwave` component exposes multiple services to help maintain the network. Al | ---------------------- | -------------------------------------------------------------------------------------------------------------------------------------------- | | add_node | Put the Z-Wave controller in inclusion mode. Allows you to add a new device to the Z-Wave network. | | add_node_secure | Put the Z-Wave controller in secure inclusion mode. Allows you to add a new device with secure communications to the Z-Wave network. | -| cancel_command | Cancels a running Z-Wave command. If you have started a add_node or remove_node command, and decide you are not going to do it, then this must be used to stop the inclusion/exclusion command. | +| cancel_command | Cancels a running Z-Wave command. If you have started an add_node or remove_node command, and decide you are not going to do it, then this must be used to stop the inclusion/exclusion command. | | change_association | Add or remove an association in the Z-Wave network | | heal_network | Tells the controller to "heal" the Z-Wave network. Basically asks the nodes to tell the controller all of their neighbors so the controller can refigure out optimal routing. | | heal_node | Tells the controller to "heal" a specific node on the network. Requires `node_id` field. You can also force return route update with `return_routes` field. @@ -29,12 +29,13 @@ The `zwave` component exposes multiple services to help maintain the network. Al | remove_failed_node | Remove a failed node from the network. The Node should be on the controller's Failed Node List, otherwise this command will fail. | | replace_failed_node | Replace a failed device with another. If the node is not in the controller's Failed Node List, or the node responds, this command will fail. | | reset_node_meters | Reset a node's meter values. Only works if the node supports this. | -| set_config_parameter | Lets the user set a config parameter to a node. NOTE: Use the parameter option's `label` string as the `value` for list parameters (e.g. `"value": "Off"`). For all other parameters use the relevant integer `value` (e.g. `"value": 1`). | +| set_config_parameter | Lets the user set a config parameter to a node. NOTE: Use the parameter option's `label` string as the `value` for list parameters (e.g., `"value": "Off"`). For all other parameters use the relevant integer `value` (e.g., `"value": 1`). | | soft_reset | Tells the controller to do a "soft reset." This is not supposed to lose any data, but different controllers can behave differently to a "soft reset" command. | | start_network | Starts the Z-Wave network. | | stop_network | Stops the Z-Wave network. | | test_network | Tells the controller to send no-op commands to each node and measure the time for a response. In theory, this can also bring back nodes which have been marked "presumed dead." | | test_node | Tells the controller to send no-op command(s) to a specific node. Requires `node_id` field. You can specify amount of test_messages to send by specifying it with `messages` field. In theory, this could bring back nodes marked as "presumed dead" +| update_config | Attempt to update OZW configuration files from git to support newer devices. After you run this, wait a few minutes then stop Home Assistant. You can now back up your `zwcfg_*.xml` file, then delete the relevant entries from your `zwcfg_*.xml` (between and including `` and ``), and finally start Home Assistant. | The `soft_reset` and `heal_network` commands can be used as part of an automation script to help keep a Z-Wave network running reliably as shown in the example below. By default, Home Assistant will run a `heal_network` at midnight. This is a configuration option for the `zwave` component. The option defaults to `true` but can be disabled by setting `autoheal` to false. If you're having issues with your Z-Wave network, try disabling this automation. diff --git a/source/_faq/after-upgrading.markdown b/source/_faq/after-upgrading.markdown index 0440745d0a9..c74ca7d7646 100644 --- a/source/_faq/after-upgrading.markdown +++ b/source/_faq/after-upgrading.markdown @@ -9,9 +9,8 @@ footer: true ha_category: Usage --- +After upgrading to a new version, you may notice your browser gets stuck at the "loading data" login screen. Close the window/tab and go into your browser settings and delete all the cookies for your URL. You can then log back in and it should work. -After upgrading to a new version, you may notice your browser gets stuck at the "loading data" login screen. Close the window/tab and go into your browser settings and delete all the cookies for your URL. You can then log back in and it should work. - -Android Chrome +Android Chrome: chrome -> settings -> site settings -> storage -> search for your URL for Home Assistant-> "clear & reset" diff --git a/source/_faq/browser.markdown b/source/_faq/browser.markdown index ee2dd204f7a..78ae2000c46 100644 --- a/source/_faq/browser.markdown +++ b/source/_faq/browser.markdown @@ -9,5 +9,4 @@ footer: true ha_category: Usage --- - Close the windows or tab and clear the cache. The frontend is aggressively caching and clearing the cache ensures that the frontend is reloaded when you access it the next time. diff --git a/source/_faq/character_t.markdown b/source/_faq/character_t.markdown new file mode 100644 index 00000000000..7deae536748 --- /dev/null +++ b/source/_faq/character_t.markdown @@ -0,0 +1,12 @@ +--- +layout: page +title: "found character '\t' that cannot start any token" +description: "found character '\t' that cannot start any token" +date: 2018-06-02 10:00 +comments: false +sharing: true +footer: true +ha_category: Usage +--- + +This error means that you used a tab, rather than two spaces. Replace the tab with spaces. diff --git a/source/_faq/component.markdown b/source/_faq/component.markdown index 0f46cf01cf7..9d4aaadff0b 100644 --- a/source/_faq/component.markdown +++ b/source/_faq/component.markdown @@ -9,7 +9,6 @@ footer: true ha_category: Configuration --- - When a component does not show up, many different things can be the case. Before you try any of these steps, make sure to look at the `home-assistant.log` file and see if there are any errors related to your component you are trying to set up. If you have incorrect entries in your configuration files you can use the `check_config` script to assist in identifying them: `hass --script check_config`. diff --git a/source/_faq/configuration-file.markdown b/source/_faq/configuration-file.markdown index 8f06e8247f4..c33e1678269 100644 --- a/source/_faq/configuration-file.markdown +++ b/source/_faq/configuration-file.markdown @@ -9,5 +9,4 @@ footer: true ha_category: Configuration --- - And not JSON or XML for the [configuration file](/docs/configuration/)? Because [YAML](/docs/configuration/yaml/) can be written by hand, you don't have to care about commas or tag and it's a superset of JSON. diff --git a/source/_faq/connection-error.markdown b/source/_faq/connection-error.markdown index 3acb6edd3dc..cad8704c49f 100644 --- a/source/_faq/connection-error.markdown +++ b/source/_faq/connection-error.markdown @@ -9,7 +9,6 @@ footer: true ha_category: Usage --- - It can happen that you get a traceback that notify you about connection issues while running Home Assistant. Eg. ```bash diff --git a/source/_faq/ha-vs-hassio.markdown b/source/_faq/ha-vs-hassio.markdown new file mode 100644 index 00000000000..41e373cfee0 --- /dev/null +++ b/source/_faq/ha-vs-hassio.markdown @@ -0,0 +1,17 @@ +--- +layout: page +title: "Home Assistant vs. Hass.io" +description: "Home Assistant vs. Hass.io" +date: 2018-02-12 09:00 +sidebar: true +comments: false +sharing: true +footer: true +ha_category: Installation +--- + +Home Assistant is a Python program, in simple words. It can be run various operating system and provide the ability to track, control and automate your devices. When people talking about Home Assistant they usually refer to a standalone [installation method](/docs/installation/). + +[Hass.io](/hassio/) is a combination of Home Assistant and tools which allows one to run it easily on a Raspberry Pi and other platforms without setting up an operating system first. Hass.io is an all-in one-solution and has a management user interface that can be used from the Home Assistant frontend. This interface is not present in a standalone setup of Home Assistant. + +Be aware that add-ons are only available in Hass.io, due to the way Hass.io is installed. diff --git a/source/_faq/pip3.markdown b/source/_faq/pip3.markdown index cb957a7cf43..9b4fe56e029 100644 --- a/source/_faq/pip3.markdown +++ b/source/_faq/pip3.markdown @@ -10,7 +10,7 @@ ha_category: Installation --- -This utility should have been installed as part of the Python 3.4 installation. Check if Python 3.4 is installed by running `python3 --version`. If it is not installed, [download it here](https://www.python.org/getit/). +This utility should have been installed as part of the Python 3 installation. Check if Python 3 is installed by running `python3 --version`. If it is not installed, [download it here](https://www.python.org/getit/). If you are able to successfully run `python3 --version` but not `pip3`, install Home Assistant by running the following command instead: diff --git a/source/_faq/release.markdown b/source/_faq/release.markdown new file mode 100644 index 00000000000..f109e5468d0 --- /dev/null +++ b/source/_faq/release.markdown @@ -0,0 +1,14 @@ +--- +layout: page +title: "Releases" +description: "Releases" +date: 2017-06-18 09:00 +sidebar: true +comments: false +sharing: true +footer: true +ha_category: Common +--- + +The usual release cycle is two weeks. Every other weekend will a new release of Home Assistant be available. There is no fix day or time when the release will happen because that depends on the person who is finishing the release. It can already be Monday at your location. If there was no announcement made in the previous release notes or on another communication channel then the release will happen. + diff --git a/source/_includes/article.html b/source/_includes/article.html index b7a6e0e2edb..f88d16cc9c4 100644 --- a/source/_includes/article.html +++ b/source/_includes/article.html @@ -9,7 +9,7 @@

{% include post/date.html %}{{ time }} {% if site.disqus_short_name and page.comments != false and post.comments != false and site.disqus_show_comment_count == true %} - | Comments {% endif %}

diff --git a/source/_includes/asides/cloud_navigation.html b/source/_includes/asides/cloud_navigation.html new file mode 100644 index 00000000000..48ca4058146 --- /dev/null +++ b/source/_includes/asides/cloud_navigation.html @@ -0,0 +1,20 @@ +
+

About Home Assistant

+ +
diff --git a/source/_includes/asides/component_navigation.html b/source/_includes/asides/component_navigation.html index 56ba92ee777..62791497419 100644 --- a/source/_includes/asides/component_navigation.html +++ b/source/_includes/asides/component_navigation.html @@ -1,4 +1,4 @@ -{% assign components = site.components | sort: 'title' %} +{% assign components = site.components | sort_natural: 'title' %} {% assign github_main_repo = 'https://github.com/home-assistant/home-assistant/blob/master/homeassistant' %}
{% include edit_github.html %} diff --git a/source/_includes/asides/cookbook_navigation.html b/source/_includes/asides/cookbook_navigation.html index 7b6287c0565..46fe38558c1 100644 --- a/source/_includes/asides/cookbook_navigation.html +++ b/source/_includes/asides/cookbook_navigation.html @@ -1,6 +1,6 @@
{% include edit_github.html %} - {% assign cookbook = site.cookbook | sort: 'title' %} + {% assign cookbook = site.cookbook | sort_natural: 'title' %}
Back to the cookbook diff --git a/source/_includes/asides/developers_navigation.html b/source/_includes/asides/developers_navigation.html deleted file mode 100644 index 34f1de46476..00000000000 --- a/source/_includes/asides/developers_navigation.html +++ /dev/null @@ -1,134 +0,0 @@ -
- {% include edit_github.html %} - -
-

Development Guide

- -
-
diff --git a/source/_includes/asides/docs_navigation.html b/source/_includes/asides/docs_navigation.html index 463f65313e5..8256e7e1e1a 100644 --- a/source/_includes/asides/docs_navigation.html +++ b/source/_includes/asides/docs_navigation.html @@ -3,7 +3,7 @@

Topics

diff --git a/source/demo/panels/ha-panel-dev-info.html b/source/demo/panels/ha-panel-dev-info.html index e255ca2f83d..516c2e88c54 100644 --- a/source/demo/panels/ha-panel-dev-info.html +++ b/source/demo/panels/ha-panel-dev-info.html @@ -1,2 +1,2 @@ \ No newline at end of file + clear: both;white-space:pre-wrap}
About


Home Assistant
[[hassVersion]]

Developed by a bunch of awesome people.

Published under the MIT license
Source: serverfrontend-uifrontend-core

Built using Python 3, Polymer [[polymerVersion]], NuclearJS [[nuclearVersion]]
Icons by Google and MaterialDesignIcons.com.

The following errors have been logged this session:

[[errorLog]]
\ No newline at end of file diff --git a/source/demo/panels/ha-panel-dev-template.html b/source/demo/panels/ha-panel-dev-template.html index 22e214a7591..8a968150cad 100644 --- a/source/demo/panels/ha-panel-dev-template.html +++ b/source/demo/panels/ha-panel-dev-template.html @@ -1,2 +1,2 @@ \ No newline at end of file + clear: both;white-space:pre-wrap}.rendered.error{color:red}
Templates

Templates are rendered using the Jinja2 template engine with some Home Assistant specific extensions.

[[processed]]
diff --git a/source/developers/add_new_platform.markdown b/source/developers/add_new_platform.markdown index e0882296bfc..3f4505c5775 100644 --- a/source/developers/add_new_platform.markdown +++ b/source/developers/add_new_platform.markdown @@ -9,27 +9,6 @@ sharing: true footer: true --- -Components that interact with devices are called "[Entity Components](https://github.com/home-assistant/home-assistant/blob/dev/homeassistant/helpers/entity_component.py)." They are structured in core and platform logic, which means different brands can use the same logic to handle a light. - -For example, the built-in `switch` component consists of various platforms in [`homeassistant/components/switch/`](https://github.com/home-assistant/home-assistant/tree/master/homeassistant/components/switch). The file `__init__.py` contains the core logic of all platforms and the `vendor_name.py` files contain only the relevant platform code. - -If you're planning to add support for a new type of device to an existing component, you can get away with only writing platform logic. Have a look at how the component works with other platforms and create a similar file for the platform that you want to add: - - - [Example sensor platform](/developers/platform_example_sensor): hello world of platforms. - - [Example light platform](/developers/platform_example_light): showing best practices. - -### {% linkable_title Interfacing with devices %} - -One Home Assistant rule is that platform logic should never interface directly with devices. Instead, use a third-party Python 3 library. This way, Home Assistant can share code with the Python community and keep the project maintainable. - -To integrate the third-party library, create an [Entity class](https://github.com/home-assistant/home-assistant/blob/dev/homeassistant/helpers/entity.py) for your device. Entities are Home Assistant's representations of lights, switches, sensors, etc. and are derived from the [Entity Abstract Class](https://github.com/home-assistant/home-assistant/blob/master/homeassistant/helpers/entity.py). This abstract class contains logic for integrating most standard features into your entities, such as visibility, entity IDs, updates, and much more. - -### {% linkable_title Requirements and dependencies %} - -Platforms can specify dependencies and requirements [the same way as components](/developers/component_deps_and_reqs): - -```python -REQUIREMENTS = ['some-package==2.0.0', 'some-other-package==2.5.0'] -DEPENDENCIES = ['mqtt'] -``` - + \ No newline at end of file diff --git a/source/developers/api.markdown b/source/developers/api.markdown index b46b1fdc4d4..4e226c4af9e 100644 --- a/source/developers/api.markdown +++ b/source/developers/api.markdown @@ -9,10 +9,6 @@ sharing: true footer: true --- -Home Assistant provides various APIs. For detail please refer to [Home Assistant API](https://dev-docs.home-assistant.io/en/dev/) documentation. - - * [Python API](https://dev-docs.home-assistant.io/) - * [Websocket API](/developers/websocket_api/) - * [REST API](/developers/rest_api/) - * [Python REST API](/developers/python_api/) - * [Server-sent events](/developers/server_sent_events/) + \ No newline at end of file diff --git a/source/developers/architecture.markdown b/source/developers/architecture.markdown index 422777573b4..67aab81c304 100644 --- a/source/developers/architecture.markdown +++ b/source/developers/architecture.markdown @@ -7,35 +7,9 @@ sidebar: true comments: false sharing: true footer: true -og_image: /images/architecture/ha_architecture.png +og_image: /images/architecture/ha_architecture.svg --- -Before we dive into the Home Assistant architecture, let's get a clear overview of the home automation landscape as a whole. This way, we can show how the different parts of Home Assistant fit into the picture. - -For more information about each part in this overview, check out our blog. Here's the tl;dr version of the blog: - - * Home Control is responsible for collecting information and controlling devices. - * Home Automation triggers commands based on user configurations. - * Smart Home triggers commands based on previous behaviour. - -

- - Home Automation landscape - - Overview of the home automation landscape -

- -The Home Assistant core is responsible for Home Control. Home Assistant contains four parts which make this possible: - - * **Event Bus**: facilitates the firing and listening of events -- the beating heart of Home Assistant. - * **State Machine**: keeps track of the states of things and fires a `state_changed` event when a state has been changed. - * **Service Registry**: listens on the event bus for `call_service` events and allows other code to register services. - * **Timer**: sends a `time_changed` event every 1 second on the event bus. - -

- - - - Overview of the Home Assistant core architecture -

+ \ No newline at end of file diff --git a/source/developers/architecture_components.markdown b/source/developers/architecture_components.markdown index 095a4f73781..fcd66a99ec2 100644 --- a/source/developers/architecture_components.markdown +++ b/source/developers/architecture_components.markdown @@ -10,58 +10,6 @@ footer: true og_image: /images/architecture/component_interaction.png --- -Home Assistant can be extended with **components**. Each component is responsible for a specific domain within Home Assistant. Components can listen for or trigger events, offer services, and maintain states. Components are written in Python and can do all the goodness that Python has to offer. Out of the box, Home Assistant offers a bunch of [built-in components]({{site_root}}/components/). - -

-Diagram showing interaction between components and the Home Assistant core. -Diagram showing interaction between components and the Home Assistant core -

- -There are two types of components within Home Assistant: components that interact with an Internet of Things domain, and components that respond to events that happen within Home Assistant. Read on to learn about each type! - -#### {% linkable_title Components that interact with an Internet-of-Things domain %} - -These components track devices within a specific domain and consist of a core part and platform-specific logic. These components make their information available via the State Machine and the Event Bus. The components also register services in the Service Registry to expose control of the devices. - -For example, the built-in [`switch` component](/components/switch/) is responsible for interaction with different types of switches. A platform provides support for a particular kind or brand of device. For example, a switch could use a WeMo or Orvibo platform and a light component might interact with the Hue or LIFX platform. - -If you want to add support for a new platform, check out the [add new platform section](/developers/add_new_platform/). - -#### {% linkable_title Components that respond to events that happen within Home Assistant %} - -These components provide small pieces of home automation logic or involve services that do common tasks within your house. - -For example, the [`device_sun_light_trigger` component](/components/device_sun_light_trigger/) tracks the state of devices and the sun to make sure that the lights are turned on when it gets dark and people are home. The component uses logic like this: - -```text -In the event that device 'Paulus Nexus 5' changes to the 'Home' state: - If the sun has set and the lights are not on: - Turn on the lights -``` - -```text -In the event that the combined state of all tracked devices changes to 'Not Home': - If the lights are on: - Turn off the lights -``` - -```text -In the event of the sun setting: - If the lights are off and the combined state of all tracked device equals 'Home': - Turn on the lights -``` - -Look [here](https://github.com/home-assistant/home-assistant/blob/master/config/custom_components/example.py) for a comprehensive example of a home automation component. - -### {% linkable_title The full picture %} - -When we put all the different pieces of Home Assistant together, it's a close match for the initial home automation overview sketch. The smart home AI has not been implemented yet, so it's not included in this picture. - -

- - - - Overview of the full Home Assistant architecture with a couple of loaded components and platforms -

- -The platform logic for components uses third-party Python libraries to communicate with the devices. Through this, we can leverage some of the best libraries in the Python community. + \ No newline at end of file diff --git a/source/developers/asyncio.markdown b/source/developers/asyncio.markdown index 3cbee37c1b2..2cbf497eb62 100644 --- a/source/developers/asyncio.markdown +++ b/source/developers/asyncio.markdown @@ -9,19 +9,6 @@ sharing: true footer: true --- -On September 29, 2016 we released [Home Assistant 0.29][0.29] as part of our bi-weekly release schedule. This release introduced a complete overhaul of the core spearheaded by [Ben Bangert][ben]. - -The old core was set up like a “traditional” threaded application. Each resource that was not thread safe (ie. the state of entities) would be protected by a lock. This caused a lot of waiting and potential inconsistency because a task could now end up waiting halfway through its job until some resource got freed. - -Our new core is based on an Python’s built-in asyncio module. Instead of having all threads have access to the core API objects, access is now limited to a special thread called the event loop. All components will now schedule themselves as a task to be executed by the event loop. This gives us the guarantee that only one task is executed at once, meaning we no longer need any locks. - -The only problem with running everything inside the event loop is when a task is doing blocking I/O, what most third-party Python libraries are doing. For example while requesting new information from a device, the core will stop running until we get a response from the device. To handle this, a task is able to suspend itself until the response is available after which it will be enqueued for the event loop to process the result. - -For a task to be able to suspend itself, all code that it calls has to have this capability added. This means in practice that each device integration will need a full rewrite of the library that offers the integration! As this is not something that can be achieved, ever, a 100% backwards compatible API has been added so that no platform will require updating. - -The backwards compatible API works by scheduling a task from a different thread and blocking that thread until the task has been processed by the event loop. - -### [Next step: asyncio 101 »](/developers/asyncio_101/) - -[0.29]: https://home-assistant.io/blog/2016/09/29/async-sleepiq-emoncms-stocks/ -[ben]: https://github.com/bbangert/ + \ No newline at end of file diff --git a/source/developers/asyncio_101.markdown b/source/developers/asyncio_101.markdown index c88265119fd..a43c09893fc 100644 --- a/source/developers/asyncio_101.markdown +++ b/source/developers/asyncio_101.markdown @@ -9,12 +9,6 @@ sharing: true footer: true --- -If you are not familiar yet with asyncio, please watch the below video. It's a great introduction by [Robert Smallshire][rob] in how and why asyncio works the way it does. - -
- -
- -### [Next step: Categorizing Functions »](/developers/asyncio_categorizing_functions/) - -[rob]: https://github.com/rob-smallshire \ No newline at end of file + \ No newline at end of file diff --git a/source/developers/asyncio_categorizing_functions.markdown b/source/developers/asyncio_categorizing_functions.markdown index 6fe74ad359d..8b54b2058c0 100644 --- a/source/developers/asyncio_categorizing_functions.markdown +++ b/source/developers/asyncio_categorizing_functions.markdown @@ -9,71 +9,6 @@ sharing: true footer: true --- -A piece of work within Home Assistant is represented by a function that will be invoked. It will either run inside our event loop or inside our thread pool, depending on if it is async safe. - -Home Assistant uses the convention that all functions that must be run from within the event loop are prefixed with `async_`. - -## {% linkable_title The coroutine function %} - -Coroutines are special functions based on Python’s generators syntax which allows them to suspend execution while waiting on a result. - -Invoking a coroutine function will return a Generator object back, but will not actually begin execution. This object will execute the task when it is either yielded from (from within another coroutine) or it is scheduled on the event loop. - -To declare a function a coroutine, import the coroutine annotation from the asyncio package and annotate your function. - -```python -import asyncio - -@asyncio.coroutine -def async_look_my_coroutine(target): - result = yield from entity.async_turn_on() - if result: - print("hello {}".format(target)) - -hass.loop.create_task(async_look_my_coroutine("world")) -``` - -In this example, we schedule the coroutine by calling `hass.loop.create_task`. This will add the coroutine to the queue of tasks to be run. When the event loop is running `async_look_my_coroutine` it will suspend the task when `yield from entity.async_turn_on()` is called. At that point a new task will be scheduled to execute `entity.async_turn_on()`. When that job has been executed, `async_look_my_coroutine` will resume. - -## {% linkable_title The callback function %} - -This is a normal function that is considered safe to be run from within the event loop. A callback is unable to suspend itself and thus cannot do any I/O or call a coroutine. A callback is capable of scheduling a new task but it will not be able to wait for the results. - -To declare a function as a callback, import the callback annotation from the core package and annotate your function. - -A common use case for a callback in Home Assistant is as a listener for an event or a service call. It can process the incoming information and then schedule the right calls to be made. Example from the automation component. - -```python -from homeassistant.core import callback - -@callback -def async_trigger_service_handler(service_call): - """Handle automation trigger service calls.""" - vars = service_call.data.get(ATTR_VARIABLES) - for entity in component.async_extract_from_service(service_call): - hass.loop.create_task(entity.async_trigger(vars, True)) -``` - -In this example, `entity.async_trigger` is a coroutine function. Invoking the coroutine function will return a coroutine task. The passed in parameters will be used when the task gets executed. - -To execute the task we have to schedule it for execution on the event loop. This is done by calling `hass.loop.create_task`. - -### {% linkable_title Why even have callbacks? %} - -You might wonder, if a coroutine can do everything a callback can do, why even have a callback. The reason is performance and better state consistency of the core API objects. - -When coroutine A waits for coroutine B, it will suspend itself and schedule a new task to run B. This means that the event loop is now running A, B and then A again. If B is a callback, A will never have to suspend itself and thus the event loop is just running A. The consistency implication is that other events queued to run on the event loop continue to wait until callbacks complete, but will be interleaved when yielding to another coroutine. - -## {% linkable_title Event loop and thread safe %} - -These are functions that are safe to run both in a thread and inside the event loop. These functions are usually performing a computation or transform data in memory. Anything that does I/O does not fall under this category. Many standard library functions fall in this category. For example generating the sum of a set of numbers using sum or merging two dictionaries. - -There is no special annotation to mark functions as part of this category and care should be taken when using these functions from inside the event loop. When in doubt, look at their implementation. - -## {% linkable_title Other functions %} - -These are all the functions that did not fit in the previous categories. These functions are either thread-safe or not considered safe to be run within the event loop. These are functions that use sleep, or perform I/O. - -There is no special annotation necessary to be considered part of this category. - -### [Next step: Working with Async »](/developers/asyncio_working_with_async/) + \ No newline at end of file diff --git a/source/developers/asyncio_misc.markdown b/source/developers/asyncio_misc.markdown index 695b26e3e0b..ee6fd3def87 100644 --- a/source/developers/asyncio_misc.markdown +++ b/source/developers/asyncio_misc.markdown @@ -9,14 +9,6 @@ sharing: true footer: true --- -## {% linkable_title What about ‘async’ and ‘await’ syntax? %} -Python 3.5 introduced new syntax to formalize the asynchronous pattern. This is however not compatible with Python 3.4. The minimum required Python version for Home Assistant is based on the Python version shipped with Debian stable, which is currently 3.4.2. - -For more information, Brett Cannon wrote [an excellent breakdown][brett] on 'async' and 'await' syntax and how asynchronous programming works. - -## {% linkable_title Acknowledgements %} - -Huge thanks to [Ben Bangert][ben] for starting the conversion of the core to async, guiding other contributors while taking their first steps with async programming and peer reviewing this documentation. - -[brett]: http://www.snarky.ca/how-the-heck-does-async-await-work-in-python-3-5 -[ben]: https://github.com/bbangert/ + \ No newline at end of file diff --git a/source/developers/asyncio_working_with_async.markdown b/source/developers/asyncio_working_with_async.markdown index 40fd82b2466..5d66d66594c 100644 --- a/source/developers/asyncio_working_with_async.markdown +++ b/source/developers/asyncio_working_with_async.markdown @@ -9,120 +9,6 @@ sharing: true footer: true --- -Although we have a backwards compatible API, using the async core directly will be a lot faster. Most core components have already been rewritten to leverage the async core. This includes the EntityComponent helper (foundation of light, switch, etc), scripts, groups and automation. - -## {% linkable_title Interacting with the core %} - -[All methods in the Home Assistant core][dev-docs] are implemented in two flavors: an async version and a version to be called from other threads. The versions for other are merely wrappers that call the async version in a threadsafe manner using [the available async utilities][dev-docs-async]. - -So if you are making calls to the core (the hass object) from within a callback or coroutine, use the methods that start with async_. If you need to call an async_ function that is a coroutine, your task must also be a coroutine. - -## {% linkable_title Implementing an async component %} - -To make a component async, implement an async_setup. - -```python -def setup(hass, config): - # Setup your component outside of the event loop. -``` - -Will turn into: - -```python -import asyncio - -@asyncio.coroutine -def async_setup(hass, config): - # Setup your component inside of the event loop. -``` - -## {% linkable_title Implementing an async platform %} - -For platforms we support async setup. Instead of setup_platform you need to have a coroutine async_setup_platform. - -```python -setup_platform(hass, config, add_entities, discovery_info=None): - # Setup your platform outside of the event loop. -``` - -Will turn into: - -```python -import asyncio - -@asyncio.coroutine -def async_setup_platform(hass, config, async_add_entities, - discovery_info=None): - # Setup your platform inside of the event loop -``` - -The only difference with the original parameters is that the `add_entities` function has been replaced by the async friendly callback `async_add_entities`. - -## {% linkable_title Implementing an async entity %} - -You can make your entity async friendly by converting your update method to be async. This requires the dependency of your entities to also be async friendly! - -```python -class MyEntity(Entity): - def update(self): - """Retrieve latest state.""" - self._state = fetch_state() -``` - -Will turn into: - -```python -import asyncio - -class MyEntity(Entity): - @asyncio.coroutine - def async_update(self): - """Retrieve latest state.""" - self._state = yield from async_fetch_state() -``` - -Make sure that all properties defined on your entity do not result in I/O being done. All data has to be fetched inside the update method and cached on the entity. This is because these properties are read from within the event loop and thus doing I/O will result in the core of Home Assistant waiting until your I/O is done. - -## {% linkable_title Calling async functions from threads %} - -Sometimes it will happen that you’re in a thread and you want to call a function that is only available as async. Home Assistant includes a few async helper utilities to help with this. - -In the following example, `say_hello` will schedule `async_say_hello` and block till the function has run and get the result back. - -```python -from homeassistant.util.async import run_callback_threadsafe - -def say_hello(hass, target): - return run_callback_threadsafe( - hass.loop, async_say_hello, target).result() - -def async_say_hello(hass, target): - return "Hello {}!".format(target) -``` - -## {% linkable_title Dealing with passed in functions %} - -If your code takes in functions from other code, you will not know which category the function belongs to and how they should be invoked. This usually only occurs if your code supplies an event helper like `mqtt.async_subscribe` or `track_state_change_listener`. - -To help with this, there are two helper methods on the hass object that you can call from inside the event loop: - -#### {% linkable_title hass.async_run_job %} - -Use this method if the function should be called as soon as possible. This will call callbacks immediately, schedule coroutines for execution on the event loop and schedule other functions to be run inside the thread pool. - -| Callback | Call immediately. -| Coroutine | Schedule for execution on the event loop. -| Other functions | Schedule for execution in the thread pool. - -#### {% linkable_title hass.async_add_job %} - -Use this method if the function should be called but not get priority over already scheduled calls. - -| Callback | Schedule for execution on the event loop. -| Coroutine | Schedule for execution on the event loop. -| Other functions | Schedule for execution in the thread pool. - -### [Next step: Miscellaneous »](/developers/asyncio_misc/) - -[dev-docs]: https://dev-docs.home-assistant.io/en/master/api/core.html -[dev-docs-async]: https://dev-docs.home-assistant.io/en/dev/api/util.html#module-homeassistant.util.async + \ No newline at end of file diff --git a/source/developers/cla.markdown b/source/developers/cla.markdown index f48588f5e17..731c5360d6f 100644 --- a/source/developers/cla.markdown +++ b/source/developers/cla.markdown @@ -30,7 +30,7 @@ By making a contribution to this project, I certify that: (d) I understand and agree that this project and the contribution are public and that a record of the contribution (including all personal information I submit with it) is maintained indefinitely - and may be redistributed consistent with this project or the open + and may be redistributed consistent with this project or the open source license(s) involved. ``` @@ -47,4 +47,4 @@ If you have not signed the CLA and you submit a pull request to a repository und This Contributor License Agreement (CLA) was first announced on January 21st, 2017 in [this][cla-blog] blog post and adopted January 28th, 2017. -[cla-blog]: https://home-assistant.io/blog/2017/01/21/home-assistant-governance/ +[cla-blog]: /blog/2017/01/21/home-assistant-governance/ diff --git a/source/developers/code_review_component.markdown b/source/developers/code_review_component.markdown index 4d708290c54..3d2853668da 100644 --- a/source/developers/code_review_component.markdown +++ b/source/developers/code_review_component.markdown @@ -9,27 +9,6 @@ sharing: true footer: true --- -A checklist of things to do when you're adding a new component. - -

-Not all existing platforms follow the requirements in this checklist. This cannot be used as a reason to not follow them! -

- -### {% linkable_title Requirements %} - - 1. Requirement version pinned: `REQUIREMENTS = ['phue==0.8.1']` - 2. We no longer want requirements hosted on GitHub. Please upload to PyPi. - 3. Requirements should only be imported inside functions. This is necessary because requirements are installed on the fly. - -### {% linkable_title Configuration %} - - 1. Voluptuous schema present for config validation - 2. Default parameters specified in voluptuous schema, not in `setup(…)` - 3. Schema using as many generic config keys as possible from `homeassistant.const` - 4. If having platforms, have a `PLATFORM_SCHEMA`, otherwise `CONFIG_SCHEMA`. - 5. If `PLATFORM_SCHEMA`, import base from `homeassistant.helpers.config_validation` - -### {% linkable_title Component/platform communication %} - - 1. If you need to share global data with platforms, use the dictionary `hass.data`. `hass.data[DATA_XY]` while `XY` is the component is preferred over `hass.data[DOMAIN]`. - 2. If the component fetches data that causes it's related platform entities to update, you can notify them using the dispatcher code in `homeassistant.helpers.dispatcher`. + \ No newline at end of file diff --git a/source/developers/code_review_platform.markdown b/source/developers/code_review_platform.markdown index 1475234123b..0be7ec0a021 100644 --- a/source/developers/code_review_platform.markdown +++ b/source/developers/code_review_platform.markdown @@ -9,70 +9,6 @@ sharing: true footer: true --- -A checklist of things to do when you're adding a new platform. - -

-Not all existing platforms follow the requirements in this checklist. This cannot be used as a reason to not follow them! -

- -### {% linkable_title 1. Requirements %} - - 1. Requirement version should be pinned: `REQUIREMENTS = ['phue==0.8.1']` - 2. We no longer want requirements hosted on GitHub. Please upload to PyPi. - 3. Requirements should only be imported inside functions. This is necessary because requirements are installed on the fly. - -### {% linkable_title 2. Dependencies %} - - 1. If you depend on a component for the connection, add it to your dependencies: `DEPENDENCIES = ['nest']` - -### {% linkable_title 3. Configuration %} - - 1. Volutpuous schema present for config validation - 2. Voluptuous schema extends schema from component
(e.g. `light.hue.PLATFORM_SCHEMA` extends `light.PLATFORM_SCHEMA`) - 3. Default parameters specified in voluptuous schema, not in `setup_platform(…)` - 4. Schema using as many generic config keys as possible from `homeassistant.const` - -```python -import voluptuous as vol - -from homeassistant.const import CONF_FILENAME, CONF_HOST -from homeassistant.components.light import PLATFORM_SCHEMA -import homeassistant.helpers.config_validation as cv - -CONF_ALLOW_UNREACHABLE = 'allow_unreachable' -DEFAULT_UNREACHABLE = False - -PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({ - vol.Required(CONF_HOST): cv.string, - vol.Optional(CONF_ALLOW_UNREACHABLE, - default=DEFAULT_UNREACHABLE): cv.boolean, - vol.Optional(CONF_FILENAME): cv.string, -}) -``` - -### {% linkable_title 4. Setup Platform %} - - 1. Test if passed in info (user/pass/host etc.) works. - 2. Group your calls to `add_devices` if possible. - 3. If platform adds extra services, format should be `._`. - -### {% linkable_title 5. Entity %} - - 1. Extend entity from component, e.g. `class HueLight(Light)` - 2. Do not call `update()` in constructor, use `add_devices(devices, True)` instead. - 3. Do not do any I/O inside properties. Cache values inside `update()` instead. - 4. The state and/or attributes should not contain relative time since something happened. Instead it should store UTC timestamps. - -### {% linkable_title 6. Communication with devices/services %} - - 1. All API specific code has to be part of a third party library hosted on PyPi. Home Assistant should only interact with objects and not make direct calls to the API. - -```python -# bad -status = requests.get(url('/status')) - -# good -from phue import Bridge -bridge = Bridge(…) -status = bridge.status() -``` + \ No newline at end of file diff --git a/source/developers/component_deps_and_reqs.markdown b/source/developers/component_deps_and_reqs.markdown index 750f6b6c852..0a9b6758eb9 100644 --- a/source/developers/component_deps_and_reqs.markdown +++ b/source/developers/component_deps_and_reqs.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Requirements & Dependencies" -description: "Instructions how to define requirements and dependencies." +description: "Instructions on how to define requirements and dependencies." date: 2016-04-16 13:32 sidebar: true comments: false @@ -9,35 +9,6 @@ sharing: true footer: true --- -Home Assistant allows components and platforms to specify their dependencies and requirements using the variables `DEPENDENCIES` and `REQUIREMENTS`. Both are lists that contain strings. - -## {% linkable_title Dependencies %} - -Dependencies are other Home Assistant components that should be setup before the platform is loaded. An example is the MQTT sensor component, which requires an active connection to an MQTT broker. If Home Assistant is unable to load and setup the MQTT component, it will not setup the MQTT sensor component. - -```python -DEPENDENCIES = ['mqtt'] -``` - -## {% linkable_title Requirements %} - -Requirements are Python libraries or modules that you would normally install using `pip` for your component. Home Assistant will try to install the requirements into the `deps` subdirectory of the Home Assistant [configuration directory](/docs/configuration/) if you are not using a `venv` or in something like `path/to/venv/lib/python3.6/site-packages` if you running in a virtual environment. This will make sure that all requirements are present at startup. If steps fails like missing packages for the compilation of a module or other install errors, the component will fail to load. - -Requirements is a list of strings. Each entry is a `pip` compatible string. For example, the media player Cast platform depends on the Python package PyChromecast v0.6.12: - -```python -REQUIREMENTS = ['pychromecast==0.6.12'] -``` - -During development of a component, it can be useful to test against different versions of a requirement. This can be done in two steps, using pychromecast as an example: - -* `pip install pychromecast==0.6.13 --target ~/.homeassistant/deps` -* `hass --skip-pip` - -This will use the specified version, and prevent Home Assistant from trying to override it with what is currently in `REQUIREMENTS`. - -If you need to make changes to a requirement to support your component, it's also possible to `pip install` from a checkout of the requirement. - -* `git clone https://github.com/balloob/pychromecast.git` -* `pip install ./pychromecast` -* `hass --skip-pip` + \ No newline at end of file diff --git a/source/developers/component_discovery.markdown b/source/developers/component_discovery.markdown index bdf66005e86..69fb672d5f5 100644 --- a/source/developers/component_discovery.markdown +++ b/source/developers/component_discovery.markdown @@ -2,43 +2,13 @@ layout: page title: "Component Discovery" description: "How to make component discovery work." -date: 2016-04-16 14:24 -07:00 +date: 2017-11-23 07:27 +02:00 sidebar: true comments: false sharing: true footer: true --- -

-This option is only available for built-in components. -

- -Home Assistant has a discovery service running in the background to discover new devices. Whenever a new device is discovered, a `SERVICE_DISCOVERED` event will be fired with the found service and the information. The `discovery` component has some knowledge about which components handle which type of services and will ensure those are loaded and listening before firing the `SERVICE_DISCOVERED` event. - -### {% linkable_title Add discovery instructions %} - -Device discovery for Home Assistant has been extracted into an external library called [NetDisco](https://github.com/home-assistant/netdisco). This library is integrated using [the `discovery` component](https://github.com/home-assistant/home-assistant/blob/dev/homeassistant/components/discovery.py) and scans the network in intervals for uPnP and zeroconf/mDNS services. - -To have your device be discovered, you will have to extend the NetDisco library to be able to find your device. This is done by adding a new discoverable. [See the repository for examples of existing discoverable.](https://github.com/home-assistant/netdisco/tree/master/netdisco/discoverables) - -### {% linkable_title Listening to `SERVICE_DISCOVERED` events %} - -From your component, you will have to set up the listening for specific services. Given below is an example how one would listen for discovered Chromecasts: - -```python -from homeassistant.loader import get_component - -def setup(hass, config): - discovery = get_component('discovery') - - def chromecast_discovered(service, info): - """ Called when a Chromecast has been discovered. """ - print("Discovered a new Chromecast: {}".format(info)) - - discovery.listen( - hass, discovery.services.GOOGLE_CAST, chromecast_discovered) -``` - -### {% linkable_title Auto-loading your component upon discovery %} - -The Discovery component is capable of setting up your components before firing the `SERVICE_DISCOVERD` event. To do this you will have to update the [`SERVICE_HANDLERS`](https://github.com/home-assistant/home-assistant/blob/dev/homeassistant/components/discovery.py#L29) constant in [the `discovery` component](https://github.com/home-assistant/home-assistant/blob/dev/homeassistant/components/discovery.py). + \ No newline at end of file diff --git a/source/developers/component_events.markdown b/source/developers/component_events.markdown index 485bc2863c8..65f729e52dc 100644 --- a/source/developers/component_events.markdown +++ b/source/developers/component_events.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Handling events" -description: "Instructions how to handle events with your component." +description: "Instructions on how to handle events with your component." date: 2016-04-16 13:32 sidebar: true comments: false @@ -9,4 +9,6 @@ sharing: true footer: true --- -Home Assistant has different ways of responding to events that occur in Home Assistant. These have been organized in [helper methods](https://github.com/home-assistant/home-assistant/blob/dev/homeassistant/helpers/event.py). Examples are `track_state_change`, `track_point_in_time`, `track_time_change`. + \ No newline at end of file diff --git a/source/developers/component_generic_discovery.markdown b/source/developers/component_generic_discovery.markdown index 8eacc22ff4a..5fd2881601c 100644 --- a/source/developers/component_generic_discovery.markdown +++ b/source/developers/component_generic_discovery.markdown @@ -9,69 +9,6 @@ sharing: true footer: true --- -New controller or hub components often need to add platforms in sub-components (i.e. Lights & Switches) without additional configuration. -This can be achieved using the `load_platform` or `async_load_platform` methods from `homeassistant.helpers.discovery`: - -```python -def load_platform(hass, component, platform, discovered=None, hass_config=None) -``` - -From more info on how this works, refer to the [load_platform](https://github.com/home-assistant/home-assistant/blob/dev/homeassistant/helpers/discovery.py#L136) method. - -### {% linkable_title Example %} - -Say you need to implement your new MyFlashyHub that controls both Switches & Lights, you can follow these steps: - -Configuration required for your new hub component: - -```yaml -myflashyhub: - example: setting -``` - -The source for your component can be located in your configuration directory for now: - -```bash -~/.homeassistant/custom_components/myflashyhub.py -~/.homeassistant/custom_components/light/myflashyhub.py -~/.homeassistant/custom_components/switch/myflashyhub.py -``` - -In the hub component `myflashyhub.py` you can call your light and switch components. To pass any non-serializable information to the platforms in the sub-component, you can use a global variable. - -```python -from homeassistant.helpers.discovery import load_platform -DOMAIN = 'myflashyhub' - -DATA_MFH = 'MFH' - -def setup(hass, config): - """Your controller/hub specific code.""" - hass.data[DATA_MFH] = SomeObjectToInitialiseGlobal() - - #--- snip --- - load_platform(hass, 'light', DOMAIN) - load_platform(hass, 'switch', DOMAIN, {'optional': 'arguments'}) -``` - -Add your custom device specific code to the `setup_platform` method in `light/myflashyhub.py` and `switch/myflashyhub`. - -```python -import custom_components.myflashyhub as myflashyhub - -# 'switch' will receive discovery_info={'optional': 'arguments'} -# as passed in above. 'light' will receive discovery_info=None -def setup_platform(hass, config, add_devices, discovery_info=None): - """Your switch/light specific code.""" - # You can now use hass.data[myflashyhub.DATA_MFH] -``` - - -The `load_platform` method allows the platforms to be loaded without the need for any additional platform entries in your `configuration.yaml` file, which normally would have been: - -```yaml -#light: -# platform: myflashyhub -#switch: -# platform: myflashyhub -``` + \ No newline at end of file diff --git a/source/developers/component_loading.markdown b/source/developers/component_loading.markdown index 342aa60b7ed..f5c6e04e9f0 100644 --- a/source/developers/component_loading.markdown +++ b/source/developers/component_loading.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Loading your components" -description: "Instructions how to get your component loaded by Home Assistant." +description: "Instructions on how to get your component loaded by Home Assistant." date: 2016-04-16 13:32 sidebar: true comments: false @@ -9,17 +9,6 @@ sharing: true footer: true --- -A component will be loaded on start if a section (ie. `light:`) for it exists in the config file. A component can also be loaded if another component is loaded that depends on it. When loading a component Home Assistant will check the following paths: - - * `/custom_components/` - * `homeassistant/components/` (built-in components) - -Once loaded, a component will only be setup if all dependencies can be loaded and are able to setup. Keep an eye on the logs to see if your component could be loaded and initialized. - -

-You can override a built-in component by having a component with the same name in your config/custom_components folder. If the built-in component is inside a subfolder, take care to place your customization in a folder with the same name in config/custom_components/*folder*. Note that overriding built-in components is not recommended and will probably break things! -

- -

-Home Assistant will use the directory that contains your config file as the directory that holds your customizations. By default this is the config folder in your current work directory. You can use a different folder by running Home Assistant with the --config argument: python3 homeassistant --config /YOUR/CONFIG/PATH/. -

+ \ No newline at end of file diff --git a/source/developers/component_states.markdown b/source/developers/component_states.markdown index 5e3217de263..d94c5b12ba0 100644 --- a/source/developers/component_states.markdown +++ b/source/developers/component_states.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Handling states" -description: "Instructions how to handle states with your component." +description: "Instructions on how to handle states with your component." date: 2016-07-01 20:00 sidebar: true comments: false @@ -9,14 +9,6 @@ sharing: true footer: true --- -It is the responsibility of the component to maintain the states of the devices in your domain. Each device should be a single state and, if possible, a group should be provided that tracks the combined state of the devices. - -A state can have several attributes that will help the frontend in displaying your state: - -- `friendly_name`: this name will be used as the name of the device -- `entity_picture`: this picture will be shown instead of the domain icon -- `unit_of_measurement`: this will be appended to the state in the interface -- `hidden`: This is a suggestion to the frontend on if the state should be hidden - -These attributes are defined in [homeassistant.helpers.entity](https://github.com/home-assistant/home-assistant/blob/master/homeassistant/helpers/entity.py#L180). - + \ No newline at end of file diff --git a/source/developers/component_visibility.markdown b/source/developers/component_visibility.markdown index 846d6b98b3b..29a84a747df 100644 --- a/source/developers/component_visibility.markdown +++ b/source/developers/component_visibility.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Handling visibility" -description: "Instructions how to handle visibility with your component." +description: "Instructions on how to handle visibility with your component." date: 2016-07-01 20:00 sidebar: true comments: false @@ -9,13 +9,6 @@ sharing: true footer: true --- -Generally, when creating a new entity for Home Assistant you will want it to be a class that inherits the [homeassistant.helpers.entity.Entity](https://github.com/home-assistant/home-assistant/blob/master/homeassistant/helpers/entity.py) class. If this is done, visibility will be handled for you. -You can set a suggestion for your entity's visibility by setting the `hidden` property by doing something similar to the following. - -```python -self.hidden = True -``` - -This will SUGGEST that the active frontend hides the entity. This requires that the active frontend support hidden cards (the default frontend does) and that the value of hidden be included in your attributes dictionary (see above). The Entity abstract class will take care of this for you. - -Remember: The suggestion set by your component's code will always be overwritten by user settings in the `configuration.yaml` file. This is why you may set hidden to be `False`, but the property may remain `True` (or vice-versa). + \ No newline at end of file diff --git a/source/developers/creating_components.markdown b/source/developers/creating_components.markdown index f52629db8a4..678014da4f5 100644 --- a/source/developers/creating_components.markdown +++ b/source/developers/creating_components.markdown @@ -9,19 +9,6 @@ sharing: true footer: true --- -Alright, you're ready to make your first component. AWESOME. Don't worry, we've tried hard to keep it as easy as possible. - -### {% linkable_title Example component %} - -Add `hello_state:` to your `configuration.yaml` file and create a file `/custom_components/hello_state.py` with the below code to test it locally. - -```python -DOMAIN = 'hello_state' - -def setup(hass, config): - hass.states.set('hello.world', 'Paulus') - - return True -``` - -For more examples, see the [Custom Python Component Examples](/cookbook/#custom-python-component-examples) on our examples page. + \ No newline at end of file diff --git a/source/developers/credits.markdown b/source/developers/credits.markdown index b9ccc04b948..735732f80f5 100644 --- a/source/developers/credits.markdown +++ b/source/developers/credits.markdown @@ -2,7 +2,7 @@ layout: page title: "Credits" description: "Credits for the developers who contributed to Home Assistant." -date: 2017-11-24 23:17:36 +0000 +date: 2018-06-03 20:50:11 +0000 sidebar: true comments: false sharing: true @@ -13,798 +13,828 @@ This page contains a list of people who have contributed in one way or another t ### {% linkable_title Author %} -- [Paulus Schoutsen (@balloob)](https://github.com/balloob "6012 total commits to the home-assistant organization, 3571 commits to home-assistant, 1305 commits to home-assistant.github.io, 649 commits to home-assistant-polymer, 244 commits to home-assistant-js, 118 commits to netdisco, 44 commits to home-assistant-js-websocket, 26 commits to hass-release, 14 commits to home-assistant-assets, 8 commits to example-custom-config, 7 commits to micropython-home-assistant, 6 commits to LabelBot, 5 commits to hassio, 3 commits to hassio-addons, 2 commits to issue-bot, 2 commits to lambda-home-assistant-github, 2 commits to hassio-addons-example, 2 commits to hassio-build, 2 commits to python-hassbian, 1 commit to home-assistant-notebooks, 1 commit to home-assistant-iOS") +- [Paulus Schoutsen (@balloob)](https://github.com/balloob "6888 total commits to the home-assistant organization, 3961 commits to home-assistant, 1476 commits to home-assistant.github.io, 854 commits to home-assistant-polymer, 244 commits to home-assistant-js, 124 commits to netdisco, 62 commits to developers.home-assistant, 52 commits to home-assistant-js-websocket, 35 commits to hass-release, 17 commits to LabelBot, 15 commits to home-assistant-assets, 8 commits to example-custom-config, 8 commits to hassio, 7 commits to micropython-home-assistant, 6 commits to custom-panel-starter-kit-react, 3 commits to hassio-addons, 3 commits to hassio-build, 2 commits to ui-schema, 2 commits to issue-bot, 2 commits to lambda-home-assistant-github, 2 commits to home-assistant-iOS, 2 commits to hassio-addons-example, 1 commit to home-assistant-notebooks, 1 commit to architecture, 1 commit to warrant") ### {% linkable_title Contributors %} (in alphabetical order) - [7even (@hwikene)](https://github.com/hwikene "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") -- [Aaron Bach (@bachya)](https://github.com/bachya "33 total commits to the home-assistant organization, 21 commits to home-assistant, 12 commits to home-assistant.github.io") +- [a-andre (@a-andre)](https://github.com/a-andre "3 total commits to the home-assistant organization, 3 commits to home-assistant") +- [Aaron Bach (@bachya)](https://github.com/bachya "61 total commits to the home-assistant organization, 42 commits to home-assistant, 19 commits to home-assistant.github.io") - [Aaron Linville (@linville)](https://github.com/linville "2 total commits to the home-assistant organization, 2 commits to appdaemon") -- [Aaron Morris (@Morrisai)](https://github.com/Morrisai "1 total commits to the home-assistant organization, 1 commit to home-assistant") -- [Aaron Polley (@xarnze)](https://github.com/xarnze "1 total commits to the home-assistant organization, 1 commit to home-assistant") -- [Abhishek Anand (@aa755)](https://github.com/aa755 "1 total commits to the home-assistant organization, 1 commit to home-assistant") -- [Abílio Costa (@abmantis)](https://github.com/abmantis "20 total commits to the home-assistant organization, 12 commits to home-assistant, 5 commits to home-assistant.github.io, 1 commit to netdisco, 1 commit to home-assistant-js-websocket, 1 commit to home-assistant-polymer") -- [Adam (@SilvrrGIT)](https://github.com/SilvrrGIT "9 total commits to the home-assistant organization, 8 commits to home-assistant.github.io, 1 commit to home-assistant") -- [Adam Baxter (@voltagex)](https://github.com/voltagex "2 total commits to the home-assistant organization, 1 commit to home-assistant-polymer, 1 commit to home-assistant") -- [Adam Cooper (@GenericStudent)](https://github.com/GenericStudent "10 total commits to the home-assistant organization, 7 commits to home-assistant, 3 commits to home-assistant.github.io") +- [Abílio Costa (@abmantis)](https://github.com/abmantis "24 total commits to the home-assistant organization, 14 commits to home-assistant, 6 commits to home-assistant.github.io, 2 commits to home-assistant-polymer, 1 commit to home-assistant-js-websocket, 1 commit to netdisco") +- [Adam Baxter (@voltagex)](https://github.com/voltagex "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") +- [Adam Cooper (@GenericStudent)](https://github.com/GenericStudent "11 total commits to the home-assistant organization, 8 commits to home-assistant, 3 commits to home-assistant.github.io") - [Adam Dullage (@Dullage)](https://github.com/Dullage "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") -- [Adam Garcia (@pancho-villa)](https://github.com/pancho-villa "1 total commits to the home-assistant organization, 1 commit to home-assistant") -- [Adam Mills (@armills)](https://github.com/armills "260 total commits to the home-assistant organization, 144 commits to home-assistant, 63 commits to home-assistant-polymer, 49 commits to home-assistant.github.io, 3 commits to home-assistant-js, 1 commit to homebridge-homeassistant") -- [Adam Stone (@astone123)](https://github.com/astone123 "1 total commits to the home-assistant organization, 1 commit to home-assistant") -- [Adrian Popa (@mad-ady)](https://github.com/mad-ady "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") +- [Adam Mills (@armills)](https://github.com/armills "324 total commits to the home-assistant organization, 171 commits to home-assistant, 92 commits to home-assistant-polymer, 57 commits to home-assistant.github.io, 3 commits to home-assistant-js, 1 commit to homebridge-homeassistant") +- [Adrian Popa (@mad-ady)](https://github.com/mad-ady "5 total commits to the home-assistant organization, 4 commits to appdaemon, 1 commit to home-assistant-polymer") - [Adrien Ball (@adrienball)](https://github.com/adrienball "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Adrien Brault (@adrienbrault)](https://github.com/adrienbrault "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Adrián López (@adrianlzt)](https://github.com/adrianlzt "8 total commits to the home-assistant organization, 6 commits to home-assistant.github.io, 2 commits to home-assistant") -- [aetolus (@aetolus)](https://github.com/aetolus "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [AHS (@ahofelt)](https://github.com/ahofelt "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") +- [akloeckner (@akloeckner)](https://github.com/akloeckner "3 total commits to the home-assistant organization, 3 commits to home-assistant") - [Alan Bowman (@alanbowman)](https://github.com/alanbowman "4 total commits to the home-assistant organization, 4 commits to home-assistant") -- [Alan Fischer (@alanfischer)](https://github.com/alanfischer "18 total commits to the home-assistant organization, 15 commits to home-assistant, 3 commits to home-assistant.github.io") +- [Alan Fischer (@alanfischer)](https://github.com/alanfischer "20 total commits to the home-assistant organization, 16 commits to home-assistant, 4 commits to home-assistant.github.io") +- [Alan Tse (@alandtse)](https://github.com/alandtse "4 total commits to the home-assistant organization, 2 commits to home-assistant, 2 commits to home-assistant.github.io") - [Alasdair Nicol (@alasdairnicol)](https://github.com/alasdairnicol "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [Albatross (@DyingAlbatross)](https://github.com/DyingAlbatross "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") -- [Albert Lee (@trisk)](https://github.com/trisk "13 total commits to the home-assistant organization, 8 commits to home-assistant, 5 commits to home-assistant.github.io") +- [Albert Lee (@trisk)](https://github.com/trisk "18 total commits to the home-assistant organization, 11 commits to home-assistant, 7 commits to home-assistant.github.io") - [Alberto Arias Maestro (@albertoarias)](https://github.com/albertoarias "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Alessandro Mogavero (@alexmogavero)](https://github.com/alexmogavero "3 total commits to the home-assistant organization, 3 commits to home-assistant") -- [Alex (@MungoRae)](https://github.com/MungoRae "1 total commits to the home-assistant organization, 1 commit to home-assistant") -- [Alex (@asbach)](https://github.com/asbach "3 total commits to the home-assistant organization, 2 commits to home-assistant.github.io, 1 commit to home-assistant") -- [Alex (@alexrockt)](https://github.com/alexrockt "1 total commits to the home-assistant organization, 1 commit to home-assistant") -- [Alex Barcelo (@alexbarcelo)](https://github.com/alexbarcelo "2 total commits to the home-assistant organization, 2 commits to hassio-addons") -- [Alex Harvey (@infamy)](https://github.com/infamy "25 total commits to the home-assistant organization, 14 commits to home-assistant, 11 commits to home-assistant.github.io") -- [Alex Mekkering (@AlexMekkering)](https://github.com/AlexMekkering "3 total commits to the home-assistant organization, 2 commits to home-assistant.github.io, 1 commit to home-assistant") +- [Alex Barcelo (@alexbarcelo)](https://github.com/alexbarcelo "6 total commits to the home-assistant organization, 3 commits to hassio-addons, 3 commits to home-assistant.github.io") +- [Alex Harvey (@infamy)](https://github.com/infamy "29 total commits to the home-assistant organization, 14 commits to home-assistant, 11 commits to home-assistant.github.io, 4 commits to hassos") +- [Alex Mekkering (@AlexMekkering)](https://github.com/AlexMekkering "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [Alex MF (@adsmf)](https://github.com/adsmf "1 total commits to the home-assistant organization, 1 commit to hassio-addons") +- [Alex Osadchyy (@aosadchyy)](https://github.com/aosadchyy "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Alex Tzonkov (@attzonko)](https://github.com/attzonko "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") +- [Alexander Bachmeier (@asbach)](https://github.com/asbach "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [Alexander Kratzer (@hexxter)](https://github.com/hexxter "8 total commits to the home-assistant organization, 8 commits to home-assistant") -- [Alexander Rust (@binarybucks)](https://github.com/binarybucks "1 total commits to the home-assistant organization, 1 commit to home-assistant") - [Alexandre Perrin (@kAworu)](https://github.com/kAworu "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") -- [Alexis Iglauer (@ax42)](https://github.com/ax42 "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") +- [Alexei Chetroi (@Adminiuga)](https://github.com/Adminiuga "2 total commits to the home-assistant organization, 2 commits to home-assistant") +- [Alexis Iglauer (@ax42)](https://github.com/ax42 "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [Alfie Day (@Azelphur)](https://github.com/Azelphur "12 total commits to the home-assistant organization, 12 commits to home-assistant") - [Aliaksandr (@minchik)](https://github.com/minchik "7 total commits to the home-assistant organization, 3 commits to home-assistant.github.io, 2 commits to appdaemon, 2 commits to home-assistant") -- [Allan Glen (@allanglen)](https://github.com/allanglen "1 total commits to the home-assistant organization, 1 commit to home-assistant") -- [Alok Saboo (@arsaboo)](https://github.com/arsaboo "115 total commits to the home-assistant organization, 67 commits to home-assistant.github.io, 45 commits to home-assistant, 1 commit to pi-gen, 1 commit to home-assistant-polymer, 1 commit to hassio-addons") -- [amigian74 (@amigian74)](https://github.com/amigian74 "2 total commits to the home-assistant organization, 2 commits to home-assistant") +- [Alok Saboo (@arsaboo)](https://github.com/arsaboo "141 total commits to the home-assistant organization, 82 commits to home-assistant.github.io, 53 commits to home-assistant, 4 commits to home-assistant-polymer, 1 commit to hassio-addons, 1 commit to pi-gen") - [amorsillo (@AndrewMorsillo)](https://github.com/AndrewMorsillo "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") - [Anders Fogh Eriksen (@Fogh)](https://github.com/Fogh "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") -- [Anders Melchiorsen (@amelchio)](https://github.com/amelchio "117 total commits to the home-assistant organization, 84 commits to home-assistant, 31 commits to home-assistant.github.io, 2 commits to home-assistant-polymer") -- [Andrea Falcone (@asfalcone)](https://github.com/asfalcone "5 total commits to the home-assistant organization, 5 commits to issue-bot") -- [Andreas Björshammar (@abjorshammar)](https://github.com/abjorshammar "1 total commits to the home-assistant organization, 1 commit to home-assistant") -- [Andreas Cambitsis (@acambitsis)](https://github.com/acambitsis "1 total commits to the home-assistant organization, 1 commit to home-assistant") -- [Andreas Jacobsen (@andreasjacobsen93)](https://github.com/andreasjacobsen93 "9 total commits to the home-assistant organization, 6 commits to home-assistant.github.io, 2 commits to hassio-addons, 1 commit to home-assistant") +- [Anders Melchiorsen (@amelchio)](https://github.com/amelchio "225 total commits to the home-assistant organization, 182 commits to home-assistant, 41 commits to home-assistant.github.io, 2 commits to home-assistant-polymer") +- [andig (@andig)](https://github.com/andig "1 total commits to the home-assistant organization, 1 commit to pi-gen") +- [Andrea Campi (@andreacampi)](https://github.com/andreacampi "8 total commits to the home-assistant organization, 6 commits to home-assistant, 2 commits to home-assistant.github.io") +- [Andreas Björshammar (@abjorshammar)](https://github.com/abjorshammar "2 total commits to the home-assistant organization, 2 commits to home-assistant") +- [Andreas Jacobsen (@andreasjacobsen93)](https://github.com/andreasjacobsen93 "8 total commits to the home-assistant organization, 6 commits to home-assistant.github.io, 2 commits to hassio-addons") - [Andreas Rammhold (@andir)](https://github.com/andir "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") - [Andreas Renberg (@IQAndreas)](https://github.com/IQAndreas "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") -- [Andreea-Daniela Ene (@AndreeaEne)](https://github.com/AndreeaEne "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") -- [Andrej Friesen (@ajfriesen)](https://github.com/ajfriesen "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") -- [Andrew (@aoakeson)](https://github.com/aoakeson "3 total commits to the home-assistant organization, 2 commits to home-assistant.github.io, 1 commit to home-assistant") -- [Andrew (@aneisch)](https://github.com/aneisch "5 total commits to the home-assistant organization, 4 commits to home-assistant.github.io, 1 commit to home-assistant") -- [Andrew Cockburn (@acockburn)](https://github.com/acockburn "626 total commits to the home-assistant organization, 494 commits to appdaemon, 88 commits to hadashboard, 25 commits to scenegen, 19 commits to home-assistant.github.io") -- [Andrew LeCody (@aceat64)](https://github.com/aceat64 "1 total commits to the home-assistant organization, 1 commit to home-assistant") +- [Andreea\-Daniela Ene (@AndreeaEne)](https://github.com/AndreeaEne "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") +- [Andrei Pop (@andreipop2005)](https://github.com/andreipop2005 "2 total commits to the home-assistant organization, 2 commits to home-assistant") +- [Andrej Friesen (@ajfriesen)](https://github.com/ajfriesen "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") +- [Andrew (@aneisch)](https://github.com/aneisch "5 total commits to the home-assistant organization, 5 commits to home-assistant.github.io") +- [Andrew (@aoakeson)](https://github.com/aoakeson "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") +- [Andrew Cockburn (@acockburn)](https://github.com/acockburn "817 total commits to the home-assistant organization, 682 commits to appdaemon, 88 commits to hadashboard, 25 commits to scenegen, 22 commits to home-assistant.github.io") - [Andrew Smith (@andrewmichaelsmith)](https://github.com/andrewmichaelsmith "2 total commits to the home-assistant organization, 2 commits to pi-gen") - [Andrew Stock (@watchforstock)](https://github.com/watchforstock "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Andrew Thigpen (@andythigpen)](https://github.com/andythigpen "33 total commits to the home-assistant organization, 32 commits to home-assistant, 1 commit to home-assistant-js") -- [Andrew Williams (@nikdoof)](https://github.com/nikdoof "1 total commits to the home-assistant organization, 1 commit to home-assistant") +- [Andrew Wedgbury (@sconemad)](https://github.com/sconemad "1 total commits to the home-assistant organization, 1 commit to pi-gen") - [andrew-curtis (@andrew-curtis)](https://github.com/andrew-curtis "7 total commits to the home-assistant organization, 7 commits to home-assistant.github.io") -- [Andrey (@andrey-git)](https://github.com/andrey-git "227 total commits to the home-assistant organization, 97 commits to home-assistant, 96 commits to home-assistant-polymer, 34 commits to home-assistant.github.io") -- [Andrey Kupreychik (@foxel)](https://github.com/foxel "4 total commits to the home-assistant organization, 4 commits to home-assistant") -- [Andrzej (@andriej)](https://github.com/andriej "3 total commits to the home-assistant organization, 2 commits to home-assistant.github.io, 1 commit to home-assistant") +- [Andrey (@andrey-git)](https://github.com/andrey-git "303 total commits to the home-assistant organization, 137 commits to home-assistant-polymer, 128 commits to home-assistant, 37 commits to home-assistant.github.io, 1 commit to home-assistant-js-websocket") +- [Andrey Kupreychik (@foxel)](https://github.com/foxel "9 total commits to the home-assistant organization, 6 commits to home-assistant, 3 commits to home-assistant.github.io") +- [Andrzej (@andriej)](https://github.com/andriej "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [Andréas Lundgren (@adevade)](https://github.com/adevade "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") -- [Andy Castille (@Klikini)](https://github.com/Klikini "9 total commits to the home-assistant organization, 6 commits to home-assistant, 3 commits to home-assistant.github.io") -- [Andy Loughran (@andylockran)](https://github.com/andylockran "2 total commits to the home-assistant organization, 2 commits to home-assistant") -- [andyat (@andyat)](https://github.com/andyat "2 total commits to the home-assistant organization, 2 commits to home-assistant") +- [Andy Castille (@Klikini)](https://github.com/Klikini "14 total commits to the home-assistant organization, 9 commits to home-assistant, 5 commits to home-assistant.github.io") - [anotherthomas (@anotherthomas)](https://github.com/anotherthomas "1 total commits to the home-assistant organization, 1 commit to hassio-addons") -- [Anthony Hughes (@tony2nite)](https://github.com/tony2nite "2 total commits to the home-assistant organization, 1 commit to netdisco, 1 commit to home-assistant") +- [Anthony Arnaud (@aarnaud)](https://github.com/aarnaud "2 total commits to the home-assistant organization, 2 commits to home-assistant") +- [Anthony Hughes (@tony2nite)](https://github.com/tony2nite "1 total commits to the home-assistant organization, 1 commit to netdisco") - [Antoine Bertin (@Diaoul)](https://github.com/Diaoul "5 total commits to the home-assistant organization, 2 commits to home-assistant, 2 commits to home-assistant.github.io, 1 commit to home-assistant-polymer") - [Anton Glukhov (@toxxin)](https://github.com/toxxin "1 total commits to the home-assistant organization, 1 commit to libcoap") -- [Anton Lundin (@glance-)](https://github.com/glance- "7 total commits to the home-assistant organization, 6 commits to home-assistant, 1 commit to netdisco") +- [Anton Lundin (@glance-)](https://github.com/glance- "8 total commits to the home-assistant organization, 7 commits to home-assistant, 1 commit to netdisco") - [Anton Sarukhanov (@antsar)](https://github.com/antsar "6 total commits to the home-assistant organization, 3 commits to home-assistant, 2 commits to home-assistant.github.io, 1 commit to home-assistant-polymer") -- [Antonio Párraga Navarro (@aparraga)](https://github.com/aparraga "1 total commits to the home-assistant organization, 1 commit to home-assistant") -- [Antony Messerli (@antonym)](https://github.com/antonym "1 total commits to the home-assistant organization, 1 commit to home-assistant") -- [Anubhaw Arya (@aarya123)](https://github.com/aarya123 "1 total commits to the home-assistant organization, 1 commit to home-assistant") +- [Antoni K (@Antoni-K)](https://github.com/Antoni-K "1 total commits to the home-assistant organization, 1 commit to hassbian-scripts") - [apo-mak (@apo-mak)](https://github.com/apo-mak "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") +- [arcsur (@arcsur)](https://github.com/arcsur "3 total commits to the home-assistant organization, 3 commits to home-assistant") - [Ardetus (@Ardetus)](https://github.com/Ardetus "4 total commits to the home-assistant organization, 2 commits to home-assistant, 2 commits to home-assistant.github.io") -- [Ardi Mehist (@omgapuppy)](https://github.com/omgapuppy "3 total commits to the home-assistant organization, 2 commits to home-assistant.github.io, 1 commit to home-assistant") -- [Ari Lotter (@arilotter)](https://github.com/arilotter "3 total commits to the home-assistant organization, 2 commits to home-assistant.github.io, 1 commit to home-assistant") -- [arjenfvellinga (@arjenfvellinga)](https://github.com/arjenfvellinga "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") +- [Ardi Mehist (@omgapuppy)](https://github.com/omgapuppy "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") +- [Ari Lotter (@arilotter)](https://github.com/arilotter "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") +- [arjenfvellinga (@arjenfvellinga)](https://github.com/arjenfvellinga "5 total commits to the home-assistant organization, 5 commits to home-assistant.github.io") - [Arno (@aetjansen)](https://github.com/aetjansen "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [ArrayLabs (@arraylabs)](https://github.com/arraylabs "5 total commits to the home-assistant organization, 5 commits to home-assistant") - [Arthur Leonard Andersen (@leoc)](https://github.com/leoc "9 total commits to the home-assistant organization, 9 commits to home-assistant") - [Arttu mahlakaarto (@amahlaka)](https://github.com/amahlaka "6 total commits to the home-assistant organization, 6 commits to home-assistant.github.io") - [Ashton Campbell (@AshtonCampbell)](https://github.com/AshtonCampbell "5 total commits to the home-assistant organization, 5 commits to home-assistant.github.io") -- [Assaf Inbal (@shmuelzon)](https://github.com/shmuelzon "12 total commits to the home-assistant organization, 9 commits to homebridge-homeassistant, 3 commits to home-assistant") -- [Audric Schiltknecht (@chemicalstorm)](https://github.com/chemicalstorm "4 total commits to the home-assistant organization, 3 commits to home-assistant.github.io, 1 commit to home-assistant") +- [Assaf Inbal (@shmuelzon)](https://github.com/shmuelzon "11 total commits to the home-assistant organization, 9 commits to homebridge-homeassistant, 2 commits to home-assistant") +- [Audric Schiltknecht (@chemicalstorm)](https://github.com/chemicalstorm "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [Audun Ytterdal (@auduny)](https://github.com/auduny "2 total commits to the home-assistant organization, 2 commits to home-assistant") -- [aufano (@aufano)](https://github.com/aufano "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Austin (@trainman419)](https://github.com/trainman419 "8 total commits to the home-assistant organization, 8 commits to home-assistant") - [Avraham David Gelbfish (@adgelbfish)](https://github.com/adgelbfish "2 total commits to the home-assistant organization, 1 commit to hadashboard, 1 commit to pi-gen") - [azeroth12 (@azeroth12)](https://github.com/azeroth12 "1 total commits to the home-assistant organization, 1 commit to appdaemon") +- [baflo (@baflo)](https://github.com/baflo "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") +- [Balázs Suhajda (@suhajdab)](https://github.com/suhajdab "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [Baran Kaynak (@barankaynak)](https://github.com/barankaynak "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") - [Barry Williams (@bazwilliams)](https://github.com/bazwilliams "10 total commits to the home-assistant organization, 6 commits to home-assistant, 2 commits to netdisco, 2 commits to home-assistant.github.io") -- [Bart S. (@zBart)](https://github.com/zBart "1 total commits to the home-assistant organization, 1 commit to home-assistant") - [Bart274 (@Bart274)](https://github.com/Bart274 "26 total commits to the home-assistant organization, 17 commits to home-assistant, 8 commits to home-assistant.github.io, 1 commit to home-assistant-polymer") -- [Bas Schipper (@basschipper)](https://github.com/basschipper "5 total commits to the home-assistant organization, 3 commits to home-assistant, 2 commits to home-assistant.github.io") +- [Bas Schipper (@basschipper)](https://github.com/basschipper "9 total commits to the home-assistant organization, 7 commits to home-assistant, 2 commits to home-assistant.github.io") - [bastshoes (@bastshoes)](https://github.com/bastshoes "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") -- [Beat (@bdurrer)](https://github.com/bdurrer "12 total commits to the home-assistant organization, 10 commits to home-assistant.github.io, 1 commit to home-assistant-polymer, 1 commit to home-assistant") +- [battistaar (@battistaar)](https://github.com/battistaar "1 total commits to the home-assistant organization, 1 commit to homebridge-homeassistant") +- [bcl1713 (@bcl1713)](https://github.com/bcl1713 "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") +- [Beat (@bdurrer)](https://github.com/bdurrer "14 total commits to the home-assistant organization, 10 commits to home-assistant.github.io, 3 commits to home-assistant, 1 commit to home-assistant-polymer") - [Ben (@unixben)](https://github.com/unixben "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [Ben Bangert (@bbangert)](https://github.com/bbangert "4 total commits to the home-assistant organization, 4 commits to home-assistant") - [Ben Doerr (@bendoerr)](https://github.com/bendoerr "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") +- [Ben Lebherz (@benleb)](https://github.com/benleb "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [Ben Nuttall (@bennuttall)](https://github.com/bennuttall "1 total commits to the home-assistant organization, 1 commit to pi-gen") - [Ben Origas (@borigas)](https://github.com/borigas "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") +- [Ben Pirt (@bjpirt)](https://github.com/bjpirt "2 total commits to the home-assistant organization, 2 commits to pi-gen") +- [Ben Randall (@veleek)](https://github.com/veleek "4 total commits to the home-assistant organization, 4 commits to home-assistant") - [Ben Thomas (@wazoo)](https://github.com/wazoo "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") -- [Ben Van Mechelen (@benvm)](https://github.com/benvm "1 total commits to the home-assistant organization, 1 commit to home-assistant") +- [Benedict Aas (@Shou)](https://github.com/Shou "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [Benjamin Parzella (@bparzella)](https://github.com/bparzella "1 total commits to the home-assistant organization, 1 commit to pi-gen") -- [Benoit BESSET (@bbesset)](https://github.com/bbesset "1 total commits to the home-assistant organization, 1 commit to home-assistant") +- [Benji (@bbbenji)](https://github.com/bbbenji "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") +- [Bertbert (@bertbert72)](https://github.com/bertbert72 "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [bestlibre (@bestlibre)](https://github.com/bestlibre "16 total commits to the home-assistant organization, 8 commits to home-assistant, 5 commits to home-assistant.github.io, 1 commit to hassio, 1 commit to hassio-build, 1 commit to home-assistant-polymer") - [BigMoby (@bigmoby)](https://github.com/bigmoby "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") -- [Bill Nelson (@xhostplus)](https://github.com/xhostplus "1 total commits to the home-assistant organization, 1 commit to home-assistant") -- [BioSehnsucht (@BioSehnsucht)](https://github.com/BioSehnsucht "12 total commits to the home-assistant organization, 7 commits to home-assistant.github.io, 3 commits to home-assistant, 2 commits to home-assistant-polymer") +- [BioSehnsucht (@BioSehnsucht)](https://github.com/BioSehnsucht "14 total commits to the home-assistant organization, 8 commits to home-assistant.github.io, 4 commits to home-assistant, 2 commits to home-assistant-polymer") - [Bjarni Ivarsson (@bjarniivarsson)](https://github.com/bjarniivarsson "8 total commits to the home-assistant organization, 5 commits to home-assistant, 3 commits to home-assistant-polymer") +- [Björn Orri (@bjornorri)](https://github.com/bjornorri "1 total commits to the home-assistant organization, 1 commit to home-assistant-iOS") - [Björn Ramberg (@bjorne)](https://github.com/bjorne "1 total commits to the home-assistant organization, 1 commit to hassio-build") - [Blanyal D'Souza (@blanyal)](https://github.com/blanyal "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") -- [Blender3D (@Blender3D)](https://github.com/Blender3D "1 total commits to the home-assistant organization, 1 commit to home-assistant") +- [Bob Anderson (@rwa)](https://github.com/rwa "11 total commits to the home-assistant organization, 7 commits to home-assistant, 4 commits to home-assistant.github.io") +- [Bob Igo (@Human)](https://github.com/Human "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [Boced66 (@boced66)](https://github.com/boced66 "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") -- [boltgolt (@Boltgolt)](https://github.com/Boltgolt "2 total commits to the home-assistant organization, 2 commits to home-assistant") -- [boojew (@boojew)](https://github.com/boojew "8 total commits to the home-assistant organization, 6 commits to home-assistant.github.io, 2 commits to home-assistant") -- [Boris K (@bokub)](https://github.com/bokub "11 total commits to the home-assistant organization, 6 commits to home-assistant.github.io, 5 commits to home-assistant") -- [Boyi C (@fanthos)](https://github.com/fanthos "9 total commits to the home-assistant organization, 4 commits to home-assistant-polymer, 3 commits to home-assistant, 2 commits to home-assistant.github.io") -- [Brad Buran (@bburan)](https://github.com/bburan "1 total commits to the home-assistant organization, 1 commit to home-assistant") +- [bonanitech (@bonanitech)](https://github.com/bonanitech "7 total commits to the home-assistant organization, 7 commits to home-assistant.github.io") +- [boojew (@boojew)](https://github.com/boojew "7 total commits to the home-assistant organization, 7 commits to home-assistant.github.io") +- [Boris K (@bokub)](https://github.com/bokub "12 total commits to the home-assistant organization, 6 commits to home-assistant, 6 commits to home-assistant.github.io") +- [bottomquark (@bottomquark)](https://github.com/bottomquark "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") +- [Boyi C (@fanthos)](https://github.com/fanthos "25 total commits to the home-assistant organization, 17 commits to home-assistant-polymer, 6 commits to home-assistant, 2 commits to home-assistant.github.io") +- [bpoirriez (@bpoirriez)](https://github.com/bpoirriez "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") +- [Brad Dixon (@rbdixon)](https://github.com/rbdixon "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Brad Johnson (@bradsk88)](https://github.com/bradsk88 "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Brahma Fear (@brahmafear)](https://github.com/brahmafear "8 total commits to the home-assistant organization, 8 commits to home-assistant.github.io") - [Bram Kragten (@bramkragten)](https://github.com/bramkragten "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") - [Brandon Mathis (@imathis)](https://github.com/imathis "484 total commits to the home-assistant organization, 484 commits to home-assistant.github.io") - [Brandon Weeks (@brandonweeks)](https://github.com/brandonweeks "3 total commits to the home-assistant organization, 3 commits to home-assistant") - [brburns (@brburns)](https://github.com/brburns "2 total commits to the home-assistant organization, 2 commits to netdisco") -- [Brendon Baumgartner (@bbrendon)](https://github.com/bbrendon "10 total commits to the home-assistant organization, 10 commits to home-assistant.github.io") -- [Brent Hughes (@bah2830)](https://github.com/bah2830 "26 total commits to the home-assistant organization, 17 commits to home-assistant, 8 commits to home-assistant.github.io, 1 commit to netdisco") +- [Brenda Wallace (@Br3nda)](https://github.com/Br3nda "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") +- [Brendon Baumgartner (@bbrendon)](https://github.com/bbrendon "11 total commits to the home-assistant organization, 11 commits to home-assistant.github.io") +- [Brent Hughes (@bah2830)](https://github.com/bah2830 "27 total commits to the home-assistant organization, 18 commits to home-assistant, 8 commits to home-assistant.github.io, 1 commit to netdisco") - [Brent Kerlin (@bkerlin)](https://github.com/bkerlin "1 total commits to the home-assistant organization, 1 commit to hassio-build") -- [Brent Saltzman (@brent20)](https://github.com/brent20 "5 total commits to the home-assistant organization, 5 commits to home-assistant.github.io") -- [Brenton Zillins (@bzillins)](https://github.com/bzillins "1 total commits to the home-assistant organization, 1 commit to home-assistant") -- [Brian Cribbs (@cribbstechnologies)](https://github.com/cribbstechnologies "44 total commits to the home-assistant organization, 27 commits to home-assistant, 15 commits to home-assistant.github.io, 2 commits to home-assistant-polymer") +- [Brent Saltzman (@brent20)](https://github.com/brent20 "9 total commits to the home-assistant organization, 9 commits to home-assistant.github.io") +- [Brian Cribbs (@cribbstechnologies)](https://github.com/cribbstechnologies "43 total commits to the home-assistant organization, 26 commits to home-assistant, 15 commits to home-assistant.github.io, 2 commits to home-assistant-polymer") - [Brian Fitzgerald (@Brianfit)](https://github.com/Brianfit "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") -- [Brian Gehrich (@bgehrich)](https://github.com/bgehrich "1 total commits to the home-assistant organization, 1 commit to home-assistant") - [Brian Hopkins (@btotharye)](https://github.com/btotharye "6 total commits to the home-assistant organization, 4 commits to home-assistant.github.io, 2 commits to home-assistant") -- [Brian J King (@brianjking)](https://github.com/brianjking "9 total commits to the home-assistant organization, 9 commits to home-assistant.github.io") +- [Brian J King (@brianjking)](https://github.com/brianjking "10 total commits to the home-assistant organization, 10 commits to home-assistant.github.io") +- [Brian Jinwright (@bjinwright)](https://github.com/bjinwright "159 total commits to the home-assistant organization, 159 commits to warrant") - [Britton Clapp (@britton-clapp)](https://github.com/britton-clapp "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [BRUH Automation (@bruhautomation)](https://github.com/bruhautomation "3 total commits to the home-assistant organization, 3 commits to hassbian-scripts") - [Bruno Adele (@badele)](https://github.com/badele "22 total commits to the home-assistant organization, 22 commits to home-assistant") - [Bruno Binet (@bbinet)](https://github.com/bbinet "1 total commits to the home-assistant organization, 1 commit to hassio-build") - [Bryce Edwards (@hoopty)](https://github.com/hoopty "5 total commits to the home-assistant organization, 3 commits to home-assistant, 2 commits to home-assistant.github.io") -- [c727 (@c727)](https://github.com/c727 "13 total commits to the home-assistant organization, 9 commits to home-assistant-polymer, 4 commits to home-assistant.github.io") +- [bvansambeek (@bvansambeek)](https://github.com/bvansambeek "1 total commits to the home-assistant organization, 1 commit to hassio-build") +- [c727 (@c727)](https://github.com/c727 "93 total commits to the home-assistant organization, 67 commits to home-assistant-polymer, 14 commits to home-assistant.github.io, 8 commits to home-assistant, 2 commits to hassio, 2 commits to developers.home-assistant") - [Caius Cioran (@caiuspb)](https://github.com/caiuspb "3 total commits to the home-assistant organization, 3 commits to home-assistant") -- [Caleb (@finish06)](https://github.com/finish06 "7 total commits to the home-assistant organization, 7 commits to home-assistant") -- [Cameron Bulock (@cbulock)](https://github.com/cbulock "3 total commits to the home-assistant organization, 2 commits to home-assistant.github.io, 1 commit to netdisco") -- [Carlo Costanzo (@CCOSTAN)](https://github.com/CCOSTAN "89 total commits to the home-assistant organization, 81 commits to home-assistant.github.io, 5 commits to home-assistant, 1 commit to fabric-home-assistant, 1 commit to hassbian-scripts, 1 commit to homebridge-homeassistant") +- [Caleb Dunn (@finish06)](https://github.com/finish06 "7 total commits to the home-assistant organization, 7 commits to home-assistant") +- [Cameron Bulock (@cbulock)](https://github.com/cbulock "5 total commits to the home-assistant organization, 2 commits to home-assistant, 2 commits to home-assistant.github.io, 1 commit to netdisco") +- [Carlo Costanzo (@CCOSTAN)](https://github.com/CCOSTAN "98 total commits to the home-assistant organization, 90 commits to home-assistant.github.io, 5 commits to home-assistant, 1 commit to hassbian-scripts, 1 commit to fabric-home-assistant, 1 commit to homebridge-homeassistant") - [carlosmgr (@carlosmgr)](https://github.com/carlosmgr "6 total commits to the home-assistant organization, 6 commits to home-assistant") - [Carter (@BluGeni)](https://github.com/BluGeni "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") -- [cdce8p (@cdce8p)](https://github.com/cdce8p "14 total commits to the home-assistant organization, 10 commits to home-assistant.github.io, 2 commits to home-assistant-polymer, 2 commits to home-assistant") +- [cdce8p (@cdce8p)](https://github.com/cdce8p "127 total commits to the home-assistant organization, 73 commits to home-assistant, 38 commits to home-assistant.github.io, 10 commits to home-assistant-polymer, 4 commits to hass-release, 2 commits to developers.home-assistant") - [Cecron (@Cecron)](https://github.com/Cecron "1 total commits to the home-assistant organization, 1 commit to appdaemon") +- [Cedric Van Goethem (@Zepheus)](https://github.com/Zepheus "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Cenk Gündoğan (@cgundogan)](https://github.com/cgundogan "1 total commits to the home-assistant organization, 1 commit to libcoap") - [Cezar Sá Espinola (@cezarsa)](https://github.com/cezarsa "2 total commits to the home-assistant organization, 2 commits to home-assistant") -- [cgtobi (@cgtobi)](https://github.com/cgtobi "20 total commits to the home-assistant organization, 12 commits to home-assistant, 8 commits to home-assistant.github.io") +- [cgtobi (@cgtobi)](https://github.com/cgtobi "28 total commits to the home-assistant organization, 17 commits to home-assistant, 11 commits to home-assistant.github.io") - [chanders (@chanders)](https://github.com/chanders "2 total commits to the home-assistant organization, 2 commits to hadashboard") - [Charles Blonde (@CharlesBlonde)](https://github.com/CharlesBlonde "19 total commits to the home-assistant organization, 12 commits to home-assistant, 7 commits to home-assistant.github.io") -- [Charles Garwood (@cgarwood)](https://github.com/cgarwood "16 total commits to the home-assistant organization, 11 commits to home-assistant.github.io, 5 commits to home-assistant") +- [Charles Garwood (@cgarwood)](https://github.com/cgarwood "23 total commits to the home-assistant organization, 12 commits to home-assistant.github.io, 8 commits to home-assistant, 3 commits to home-assistant-polymer") - [Charles Spirakis (@srcLurker)](https://github.com/srcLurker "8 total commits to the home-assistant organization, 5 commits to home-assistant, 3 commits to home-assistant.github.io") - [Chayoung You (@yous)](https://github.com/yous "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") -- [Check your git settings! (@invalid-email-address)](https://github.com/invalid-email-address "1 total commits to the home-assistant organization, 1 commit to libcoap") -- [Chia-liang Kao (@clkao)](https://github.com/clkao "2 total commits to the home-assistant organization, 2 commits to home-assistant") +- [Check your git settings\! (@invalid-email-address)](https://github.com/invalid-email-address "1 total commits to the home-assistant organization, 1 commit to libcoap") +- [Chia\-liang Kao (@clkao)](https://github.com/clkao "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Chris (@chennin)](https://github.com/chennin "15 total commits to the home-assistant organization, 11 commits to home-assistant.github.io, 4 commits to home-assistant") - [Chris Aloi (@ctaloi)](https://github.com/ctaloi "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") +- [Chris Crowe (@chriscrowe)](https://github.com/chriscrowe "3 total commits to the home-assistant organization, 3 commits to homebridge-homeassistant") - [Chris Huegle (@chuegle)](https://github.com/chuegle "1 total commits to the home-assistant organization, 1 commit to netdisco") +- [Chris Jones (@fezfox)](https://github.com/fezfox "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [Chris Monteiro (@cmonteiro128)](https://github.com/cmonteiro128 "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [Chris Mulder (@chrisvis)](https://github.com/chrisvis "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Chris Smolen (@smolz)](https://github.com/smolz "10 total commits to the home-assistant organization, 6 commits to home-assistant.github.io, 4 commits to appdaemon") - [Chris Thorn (@chris-thorn)](https://github.com/chris-thorn "7 total commits to the home-assistant organization, 7 commits to home-assistant.github.io") +- [ChrisLasar (@ChrisLasar)](https://github.com/ChrisLasar "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [ChrisS85 (@ChrisS85)](https://github.com/ChrisS85 "1 total commits to the home-assistant organization, 1 commit to hassio-build") - [Christiaan Blom (@Deinara)](https://github.com/Deinara "6 total commits to the home-assistant organization, 6 commits to home-assistant") - [Christian Brædstrup (@LinuxChristian)](https://github.com/LinuxChristian "8 total commits to the home-assistant organization, 8 commits to home-assistant") -- [Christian Lasarczyk (@ChrisLasar)](https://github.com/ChrisLasar "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [Christian Studer (@cstuder)](https://github.com/cstuder "4 total commits to the home-assistant organization, 4 commits to home-assistant.github.io") -- [ChristianKuehnel (@ChristianKuehnel)](https://github.com/ChristianKuehnel "10 total commits to the home-assistant organization, 6 commits to home-assistant.github.io, 4 commits to home-assistant") +- [ChristianKuehnel (@ChristianKuehnel)](https://github.com/ChristianKuehnel "39 total commits to the home-assistant organization, 23 commits to home-assistant, 16 commits to home-assistant.github.io") - [Christoffer Kylvåg (@christoe)](https://github.com/christoe "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [Christoph Wagner (@Christoph-Wagner)](https://github.com/Christoph-Wagner "4 total commits to the home-assistant organization, 4 commits to home-assistant.github.io") -- [Christopher Viel (@Chris-V)](https://github.com/Chris-V "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") +- [Christopher Vella (@chrisvella)](https://github.com/chrisvella "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") +- [Christopher Viel (@Chris-V)](https://github.com/Chris-V "5 total commits to the home-assistant organization, 3 commits to home-assistant, 2 commits to home-assistant.github.io") - [chrysn (@chrysn)](https://github.com/chrysn "65 total commits to the home-assistant organization, 65 commits to libcoap") - [chz^3 (@chzchzchz)](https://github.com/chzchzchz "1 total commits to the home-assistant organization, 1 commit to pi-gen") - [Ciquattro (@CiquattroFPV)](https://github.com/CiquattroFPV "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") -- [clach04 (@clach04)](https://github.com/clach04 "5 total commits to the home-assistant organization, 3 commits to home-assistant.github.io, 2 commits to home-assistant") -- [Claus F. Strasburger (@cfstras)](https://github.com/cfstras "1 total commits to the home-assistant organization, 1 commit to pi-gen") +- [citruz (@citruz)](https://github.com/citruz "4 total commits to the home-assistant organization, 4 commits to home-assistant") +- [clach04 (@clach04)](https://github.com/clach04 "4 total commits to the home-assistant organization, 3 commits to home-assistant.github.io, 1 commit to hassbian-scripts") +- [Claus F\. Strasburger (@cfstras)](https://github.com/cfstras "5 total commits to the home-assistant organization, 5 commits to pi-gen") +- [cogneato (@cogneato)](https://github.com/cogneato "15 total commits to the home-assistant organization, 15 commits to home-assistant.github.io") - [Colin Dunn (@colindunn)](https://github.com/colindunn "2 total commits to the home-assistant organization, 2 commits to home-assistant") -- [Colin O'Dell (@colinodell)](https://github.com/colinodell "24 total commits to the home-assistant organization, 13 commits to home-assistant, 11 commits to home-assistant.github.io") +- [Colin Frei (@colinfrei)](https://github.com/colinfrei "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") +- [Colin O'Dell (@colinodell)](https://github.com/colinodell "27 total commits to the home-assistant organization, 16 commits to home-assistant, 11 commits to home-assistant.github.io") +- [Colin Teubner (@netopiax)](https://github.com/netopiax "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") +- [Conrad Juhl Andersen (@cnrd)](https://github.com/cnrd "7 total commits to the home-assistant organization, 4 commits to home-assistant, 3 commits to home-assistant.github.io") - [Constantine Grantcharov (@conz27)](https://github.com/conz27 "1 total commits to the home-assistant organization, 1 commit to libcoap") - [Constantine Poltyrev (@shprota)](https://github.com/shprota "1 total commits to the home-assistant organization, 1 commit to appdaemon") - [Corban Mailloux (@corbanmailloux)](https://github.com/corbanmailloux "18 total commits to the home-assistant organization, 18 commits to home-assistant.github.io") - [Corey Pauley (@devspacenine)](https://github.com/devspacenine "5 total commits to the home-assistant organization, 3 commits to home-assistant.github.io, 2 commits to home-assistant") -- [corneyl (@corneyl)](https://github.com/corneyl "2 total commits to the home-assistant organization, 2 commits to home-assistant") -- [Craig J. Ward (@wardcraigj)](https://github.com/wardcraigj "18 total commits to the home-assistant organization, 13 commits to home-assistant, 5 commits to home-assistant.github.io") -- [cxlwill (@cxlwill)](https://github.com/cxlwill "2 total commits to the home-assistant organization, 2 commits to home-assistant-polymer") -- [Dale Higgs (@dale3h)](https://github.com/dale3h "33 total commits to the home-assistant organization, 21 commits to home-assistant.github.io, 10 commits to home-assistant, 1 commit to hassbot, 1 commit to homebridge-homeassistant") +- [corneyl (@corneyl)](https://github.com/corneyl "4 total commits to the home-assistant organization, 4 commits to home-assistant") +- [Craig J\. Ward (@wardcraigj)](https://github.com/wardcraigj "27 total commits to the home-assistant organization, 20 commits to home-assistant, 7 commits to home-assistant.github.io") +- [CTLS (@CTLS)](https://github.com/CTLS "3 total commits to the home-assistant organization, 3 commits to home-assistant") +- [CV (@dagobert)](https://github.com/dagobert "4 total commits to the home-assistant organization, 4 commits to home-assistant.github.io") +- [cxlwill (@cxlwill)](https://github.com/cxlwill "4 total commits to the home-assistant organization, 2 commits to hassbian-scripts, 2 commits to home-assistant-polymer") +- [Dale Higgs (@dale3h)](https://github.com/dale3h "37 total commits to the home-assistant organization, 25 commits to home-assistant.github.io, 10 commits to home-assistant, 1 commit to hassbot, 1 commit to homebridge-homeassistant") +- [damarco (@damarco)](https://github.com/damarco "6 total commits to the home-assistant organization, 6 commits to home-assistant") - [Dan (@danieljkemp)](https://github.com/danieljkemp "23 total commits to the home-assistant organization, 16 commits to home-assistant, 7 commits to home-assistant.github.io") -- [Dan Cinnamon (@Cinntax)](https://github.com/Cinntax "14 total commits to the home-assistant organization, 12 commits to home-assistant, 2 commits to home-assistant.github.io") +- [Dan Chen (@djchen)](https://github.com/djchen "2 total commits to the home-assistant organization, 2 commits to home-assistant") +- [Dan Cinnamon (@Cinntax)](https://github.com/Cinntax "17 total commits to the home-assistant organization, 14 commits to home-assistant, 3 commits to home-assistant.github.io") - [Dan Faulknor (@danielfaulknor)](https://github.com/danielfaulknor "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") +- [Dan Nixon (@DanNixon)](https://github.com/DanNixon "25 total commits to the home-assistant organization, 19 commits to home-assistant, 6 commits to home-assistant.github.io") - [Dan Ports (@drkp)](https://github.com/drkp "4 total commits to the home-assistant organization, 4 commits to home-assistant") - [Dan Sarginson (@dansarginson)](https://github.com/dansarginson "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Dan Smith (@kk7ds)](https://github.com/kk7ds "84 total commits to the home-assistant organization, 68 commits to home-assistant, 14 commits to home-assistant.github.io, 2 commits to home-assistant-polymer") - [Dan Sullivan (@dansullivan86)](https://github.com/dansullivan86 "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [Dani (@danichispa)](https://github.com/danichispa "9 total commits to the home-assistant organization, 9 commits to home-assistant.github.io") +- [Daniel (@delneet)](https://github.com/delneet "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [Daniel Escoz (@Darkhogg)](https://github.com/Darkhogg "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") -- [Daniel Høyer Iversen (@Danielhiversen)](https://github.com/Danielhiversen "364 total commits to the home-assistant organization, 242 commits to home-assistant, 119 commits to home-assistant.github.io, 3 commits to home-assistant-polymer") -- [Daniel Perna (@danielperna84)](https://github.com/danielperna84 "69 total commits to the home-assistant organization, 36 commits to home-assistant.github.io, 30 commits to home-assistant, 3 commits to hassio-addons") +- [Daniel Høyer Iversen (@Danielhiversen)](https://github.com/Danielhiversen "307 total commits to the home-assistant organization, 193 commits to home-assistant, 111 commits to home-assistant.github.io, 3 commits to home-assistant-polymer") +- [Daniel Perna (@danielperna84)](https://github.com/danielperna84 "91 total commits to the home-assistant organization, 43 commits to home-assistant, 40 commits to home-assistant.github.io, 8 commits to hassio-addons") - [Daniel Peukert (@dpeukert)](https://github.com/dpeukert "3 total commits to the home-assistant organization, 2 commits to home-assistant.github.io, 1 commit to home-assistant-polymer") - [Daniel Schaal (@schaal)](https://github.com/schaal "2 total commits to the home-assistant organization, 2 commits to home-assistant") -- [Daniel Stone (@daniel-stoneuk)](https://github.com/daniel-stoneuk "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") +- [Daniel Shokouhi (@dshokouhi)](https://github.com/dshokouhi "12 total commits to the home-assistant organization, 12 commits to home-assistant.github.io") - [Daniel Trnka (@trnila)](https://github.com/trnila "2 total commits to the home-assistant organization, 2 commits to appdaemon") -- [Daniel Welch (@danielwelch)](https://github.com/danielwelch "2 total commits to the home-assistant organization, 2 commits to homebridge-homeassistant") -- [DanielXYZ2000 (@DanielXYZ2000)](https://github.com/DanielXYZ2000 "3 total commits to the home-assistant organization, 2 commits to home-assistant.github.io, 1 commit to hassio-addons") +- [Daniel Watkins (@OddBloke)](https://github.com/OddBloke "3 total commits to the home-assistant organization, 3 commits to home-assistant") +- [Daniel Welch (@danielwelch)](https://github.com/danielwelch "6 total commits to the home-assistant organization, 3 commits to home-assistant.github.io, 2 commits to homebridge-homeassistant, 1 commit to hassio-addons") +- [DanielXYZ2000 (@DanielXYZ2000)](https://github.com/DanielXYZ2000 "1 total commits to the home-assistant organization, 1 commit to hassio-addons") - [Daniyar Yeralin (@yeralin)](https://github.com/yeralin "1 total commits to the home-assistant organization, 1 commit to homebridge-homeassistant") -- [dasos (@dasos)](https://github.com/dasos "10 total commits to the home-assistant organization, 6 commits to home-assistant, 3 commits to home-assistant.github.io, 1 commit to netdisco") +- [dasos (@dasos)](https://github.com/dasos "11 total commits to the home-assistant organization, 7 commits to home-assistant, 3 commits to home-assistant.github.io, 1 commit to netdisco") - [datafx (@datafx)](https://github.com/datafx "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") -- [Dave (@d4v3d)](https://github.com/d4v3d "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [Dave Banks (@djbanks)](https://github.com/djbanks "2 total commits to the home-assistant organization, 2 commits to appdaemon") - [Dave J (@kxtcd950)](https://github.com/kxtcd950 "3 total commits to the home-assistant organization, 3 commits to hassbian-scripts") - [DaveSergeant (@dethpickle)](https://github.com/dethpickle "2 total commits to the home-assistant organization, 2 commits to home-assistant") -- [David (@fanaticDavid)](https://github.com/fanaticDavid "12 total commits to the home-assistant organization, 10 commits to home-assistant.github.io, 2 commits to home-assistant") -- [David De Sloovere (@DavidDeSloovere)](https://github.com/DavidDeSloovere "5 total commits to the home-assistant organization, 5 commits to home-assistant.github.io") +- [David (@fanaticDavid)](https://github.com/fanaticDavid "16 total commits to the home-assistant organization, 12 commits to home-assistant.github.io, 3 commits to home-assistant, 1 commit to home-assistant-polymer") +- [David Broadfoot (@dlbroadfoot)](https://github.com/dlbroadfoot "5 total commits to the home-assistant organization, 5 commits to home-assistant") +- [David De Sloovere (@DavidDeSloovere)](https://github.com/DavidDeSloovere "16 total commits to the home-assistant organization, 16 commits to home-assistant.github.io") +- [David F\. Mulcahey (@dmulcahey)](https://github.com/dmulcahey "5 total commits to the home-assistant organization, 5 commits to home-assistant") +- [David Fiel (@dfiel)](https://github.com/dfiel "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [David Grant (@davegravy)](https://github.com/davegravy "6 total commits to the home-assistant organization, 4 commits to home-assistant.github.io, 2 commits to home-assistant") -- [David Jackson (@David-Jackson)](https://github.com/David-Jackson "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") -- [David McNett (@nugget)](https://github.com/nugget "10 total commits to the home-assistant organization, 5 commits to home-assistant, 5 commits to home-assistant.github.io") +- [David McNett (@nugget)](https://github.com/nugget "10 total commits to the home-assistant organization, 5 commits to home-assistant.github.io, 5 commits to home-assistant") - [David Ohayon (@ohayon)](https://github.com/ohayon "3 total commits to the home-assistant organization, 3 commits to issue-bot") - [David Straub (@DavidMStraub)](https://github.com/DavidMStraub "9 total commits to the home-assistant organization, 5 commits to home-assistant, 4 commits to home-assistant.github.io") - [David Wang (@dcwangmit01)](https://github.com/dcwangmit01 "2 total commits to the home-assistant organization, 2 commits to pi-gen") -- [David-Leon Pohl (@DavidLP)](https://github.com/DavidLP "15 total commits to the home-assistant organization, 13 commits to home-assistant, 2 commits to home-assistant.github.io") +- [David Worsham (@arbreng)](https://github.com/arbreng "1 total commits to the home-assistant organization, 1 commit to hassio-build") +- [David\-Leon Pohl (@DavidLP)](https://github.com/DavidLP "13 total commits to the home-assistant organization, 13 commits to home-assistant") - [davidedmundson (@davidedmundson)](https://github.com/davidedmundson "7 total commits to the home-assistant organization, 4 commits to home-assistant, 3 commits to home-assistant.github.io") - [Dawid Wróbel (@wrobelda)](https://github.com/wrobelda "5 total commits to the home-assistant organization, 5 commits to home-assistant.github.io") -- [Dean Camera (@abcminiuser)](https://github.com/abcminiuser "4 total commits to the home-assistant organization, 2 commits to home-assistant, 2 commits to home-assistant.github.io") +- [Dean Camera (@abcminiuser)](https://github.com/abcminiuser "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [deisi (@deisi)](https://github.com/deisi "10 total commits to the home-assistant organization, 10 commits to home-assistant") - [Delio Castillo (@jangeador)](https://github.com/jangeador "2 total commits to the home-assistant organization, 2 commits to hassio-addons") -- [Demid Lupin (@lupin-de-mid)](https://github.com/lupin-de-mid "5 total commits to the home-assistant organization, 3 commits to home-assistant.github.io, 2 commits to home-assistant") -- [Denix (@denics)](https://github.com/denics "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") +- [Demid Lupin (@lupin-de-mid)](https://github.com/lupin-de-mid "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [Dennis de Greef (@dennisdegreef)](https://github.com/dennisdegreef "2 total commits to the home-assistant organization, 2 commits to home-assistant") -- [Dennis Karpienski (@TheRealLink)](https://github.com/TheRealLink "24 total commits to the home-assistant organization, 15 commits to home-assistant-polymer, 6 commits to home-assistant, 2 commits to home-assistant.github.io, 1 commit to netdisco") -- [Dennis Sutch (@sutch)](https://github.com/sutch "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") +- [Dennis Karpienski (@TheRealLink)](https://github.com/TheRealLink "22 total commits to the home-assistant organization, 15 commits to home-assistant-polymer, 6 commits to home-assistant, 1 commit to netdisco") - [Derek (@itchaboy)](https://github.com/itchaboy "5 total commits to the home-assistant organization, 5 commits to home-assistant.github.io") -- [dersger (@dersger)](https://github.com/dersger "3 total commits to the home-assistant organization, 2 commits to home-assistant, 1 commit to home-assistant-polymer") +- [Derek Brooks (@broox)](https://github.com/broox "39 total commits to the home-assistant organization, 30 commits to home-assistant, 9 commits to home-assistant.github.io") +- [dersger (@dersger)](https://github.com/dersger "4 total commits to the home-assistant organization, 3 commits to home-assistant, 1 commit to home-assistant-polymer") - [devdelay (@devdelay)](https://github.com/devdelay "16 total commits to the home-assistant organization, 7 commits to home-assistant.github.io, 5 commits to home-assistant, 4 commits to homebridge-homeassistant") -- [Devon Peet (@dpeet)](https://github.com/dpeet "4 total commits to the home-assistant organization, 4 commits to home-assistant.github.io") -- [Diogo Gomes (@dgomes)](https://github.com/dgomes "9 total commits to the home-assistant organization, 5 commits to home-assistant, 4 commits to home-assistant.github.io") +- [Devon Peet (@dpeet)](https://github.com/dpeet "5 total commits to the home-assistant organization, 5 commits to home-assistant.github.io") +- [Diogo Gomes (@dgomes)](https://github.com/dgomes "54 total commits to the home-assistant organization, 35 commits to home-assistant, 19 commits to home-assistant.github.io") - [Domantas (@Dohxis)](https://github.com/Dohxis "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") -- [Dougal Matthews (@d0ugal)](https://github.com/d0ugal "4 total commits to the home-assistant organization, 2 commits to home-assistant.github.io, 2 commits to home-assistant") -- [dramamoose (@dramamoose)](https://github.com/dramamoose "5 total commits to the home-assistant organization, 3 commits to home-assistant.github.io, 2 commits to home-assistant") +- [Dougal Matthews (@d0ugal)](https://github.com/d0ugal "3 total commits to the home-assistant organization, 3 commits to home-assistant") +- [dramamoose (@dramamoose)](https://github.com/dramamoose "7 total commits to the home-assistant organization, 4 commits to home-assistant, 3 commits to home-assistant.github.io") - [DrewSK (@dzsquared)](https://github.com/dzsquared "8 total commits to the home-assistant organization, 8 commits to home-assistant.github.io") -- [DubhAd (@DubhAd)](https://github.com/DubhAd "74 total commits to the home-assistant organization, 74 commits to home-assistant.github.io") +- [DubhAd (@DubhAd)](https://github.com/DubhAd "260 total commits to the home-assistant organization, 260 commits to home-assistant.github.io") - [Duoxilian (@Duoxilian)](https://github.com/Duoxilian "11 total commits to the home-assistant organization, 6 commits to home-assistant.github.io, 5 commits to home-assistant") -- [Edwin Smulders (@Dutchy-)](https://github.com/Dutchy- "4 total commits to the home-assistant organization, 2 commits to home-assistant.github.io, 2 commits to home-assistant") -- [Egor Tsinko (@etsinko)](https://github.com/etsinko "10 total commits to the home-assistant organization, 8 commits to home-assistant, 2 commits to home-assistant.github.io") -- [Eitan Mosenkis (@emosenkis)](https://github.com/emosenkis "3 total commits to the home-assistant organization, 2 commits to home-assistant, 1 commit to netdisco") -- [Eleftherios Chamakiotis (@lexam79)](https://github.com/lexam79 "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") -- [Ellis Percival (@flyte)](https://github.com/flyte "31 total commits to the home-assistant organization, 25 commits to home-assistant, 6 commits to home-assistant.github.io") -- [Emil Horpen Hetty (@emilhetty)](https://github.com/emilhetty "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") -- [emlt (@emlt)](https://github.com/emlt "2 total commits to the home-assistant organization, 2 commits to home-assistant") -- [endor-force (@endor-force)](https://github.com/endor-force "2 total commits to the home-assistant organization, 1 commit to hassio-build, 1 commit to hassio-addons") +- [ebpetway (@ebpetway)](https://github.com/ebpetway "55 total commits to the home-assistant organization, 55 commits to warrant") +- [Edwin Smulders (@Dutchy-)](https://github.com/Dutchy- "2 total commits to the home-assistant organization, 2 commits to home-assistant") +- [Egor Tsinko (@etsinko)](https://github.com/etsinko "12 total commits to the home-assistant organization, 9 commits to home-assistant, 3 commits to home-assistant.github.io") +- [Eitan Mosenkis (@emosenkis)](https://github.com/emosenkis "4 total commits to the home-assistant organization, 3 commits to home-assistant, 1 commit to netdisco") +- [eldanb (@eldanb)](https://github.com/eldanb "1 total commits to the home-assistant organization, 1 commit to homebridge-homeassistant") +- [Eleftherios Chamakiotis (@lexam79)](https://github.com/lexam79 "2 total commits to the home-assistant organization, 2 commits to home-assistant") +- [Ellis Percival (@flyte)](https://github.com/flyte "29 total commits to the home-assistant organization, 25 commits to home-assistant, 4 commits to home-assistant.github.io") +- [endor-force (@endor-force)](https://github.com/endor-force "10 total commits to the home-assistant organization, 5 commits to hassio-addons, 4 commits to home-assistant.github.io, 1 commit to hassio-build") - [engrbm87 (@engrbm87)](https://github.com/engrbm87 "3 total commits to the home-assistant organization, 3 commits to appdaemon") - [Eric Hagan (@ehagan)](https://github.com/ehagan "4 total commits to the home-assistant organization, 3 commits to home-assistant, 1 commit to home-assistant-polymer") - [Eric Oosting (@eoosting)](https://github.com/eoosting "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [Eric Rolf (@xrolfex)](https://github.com/xrolfex "13 total commits to the home-assistant organization, 13 commits to home-assistant") -- [Eric Thompson (@er0ck)](https://github.com/er0ck "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") -- [Erik Eriksson (@molobrakos)](https://github.com/molobrakos "101 total commits to the home-assistant organization, 92 commits to home-assistant, 6 commits to home-assistant.github.io, 3 commits to netdisco") -- [Erik-jan Riemers (@riemers)](https://github.com/riemers "13 total commits to the home-assistant organization, 13 commits to home-assistant.github.io") +- [Erik Eriksson (@molobrakos)](https://github.com/molobrakos "116 total commits to the home-assistant organization, 100 commits to home-assistant, 13 commits to home-assistant.github.io, 3 commits to netdisco") +- [Erik\-jan Riemers (@riemers)](https://github.com/riemers "14 total commits to the home-assistant organization, 13 commits to home-assistant.github.io, 1 commit to hassbian-scripts") +- [escoand (@escoand)](https://github.com/escoand "11 total commits to the home-assistant organization, 8 commits to home-assistant, 3 commits to netdisco") - [ettisan (@ettisan)](https://github.com/ettisan "8 total commits to the home-assistant organization, 8 commits to home-assistant") +- [Eu (@covrig)](https://github.com/covrig "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") - [Eugenio Panadero (@azogue)](https://github.com/azogue "76 total commits to the home-assistant organization, 45 commits to home-assistant, 25 commits to home-assistant.github.io, 3 commits to homebridge-homeassistant, 3 commits to home-assistant-polymer") -- [Fabian Affolter (@fabaff)](https://github.com/fabaff "4298 total commits to the home-assistant organization, 2777 commits to home-assistant.github.io, 1431 commits to home-assistant, 29 commits to home-assistant-notebooks, 24 commits to home-assistant-assets, 11 commits to hassio-build, 10 commits to home-assistant-polymer, 8 commits to netdisco, 5 commits to hassio-addons, 2 commits to hassio, 1 commit to home-assistant-js-websocket") +- [Ezra Bowden (@bn0)](https://github.com/bn0 "2 total commits to the home-assistant organization, 2 commits to warrant") +- [Fabian Affolter (@fabaff)](https://github.com/fabaff "4735 total commits to the home-assistant organization, 2996 commits to home-assistant.github.io, 1621 commits to home-assistant, 32 commits to home-assistant-assets, 31 commits to home-assistant-notebooks, 11 commits to home-assistant-polymer, 11 commits to hassio-build, 8 commits to netdisco, 7 commits to developers.home-assistant, 5 commits to hassio-addons, 4 commits to hassio, 3 commits to hassos, 2 commits to hass-release, 2 commits to home-assistant-iOS, 1 commit to home-assistant-js-websocket, 1 commit to example-custom-config") - [Fabian Heredia Montiel (@fabianhjr)](https://github.com/fabianhjr "4 total commits to the home-assistant organization, 4 commits to home-assistant") +- [Fabien Piuzzi (@reefab)](https://github.com/reefab "3 total commits to the home-assistant organization, 2 commits to home-assistant, 1 commit to home-assistant-polymer") - [Fabrizio Furnari (@fabfurnari)](https://github.com/fabfurnari "5 total commits to the home-assistant organization, 3 commits to home-assistant.github.io, 2 commits to home-assistant") - [fakezeta (@fakezeta)](https://github.com/fakezeta "7 total commits to the home-assistant organization, 7 commits to home-assistant") -- [Fares Rihani (@anchepiece)](https://github.com/anchepiece "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [Felix (@xifle)](https://github.com/xifle "2 total commits to the home-assistant organization, 2 commits to home-assistant") -- [Felix Krause (@KrauseFx)](https://github.com/KrauseFx "48 total commits to the home-assistant organization, 48 commits to issue-bot") +- [Felix Krause (@KrauseFx)](https://github.com/KrauseFx "27 total commits to the home-assistant organization, 27 commits to issue-bot") - [Ferry van Zeelst (@StaticCube)](https://github.com/StaticCube "6 total commits to the home-assistant organization, 4 commits to home-assistant.github.io, 2 commits to home-assistant") - [Finbarr Brady (@fbradyirl)](https://github.com/fbradyirl "8 total commits to the home-assistant organization, 8 commits to home-assistant") - [Florian Holzapfel (@florianholzapfel)](https://github.com/florianholzapfel "11 total commits to the home-assistant organization, 4 commits to home-assistant, 4 commits to home-assistant.github.io, 3 commits to netdisco") -- [Florian Klien (@flowolf)](https://github.com/flowolf "15 total commits to the home-assistant organization, 12 commits to home-assistant.github.io, 3 commits to home-assistant") +- [Florian Klien (@flowolf)](https://github.com/flowolf "17 total commits to the home-assistant organization, 14 commits to home-assistant.github.io, 3 commits to home-assistant") +- [florianj1 (@florianj1)](https://github.com/florianj1 "1 total commits to the home-assistant organization, 1 commit to hassio") - [florincosta (@florincosta)](https://github.com/florincosta "6 total commits to the home-assistant organization, 3 commits to home-assistant, 3 commits to home-assistant.github.io") - [Fonta (@f0nt4)](https://github.com/f0nt4 "4 total commits to the home-assistant organization, 4 commits to home-assistant.github.io") -- [Franck Nijhof (@frenck)](https://github.com/frenck "13 total commits to the home-assistant organization, 12 commits to home-assistant.github.io, 1 commit to hassio") +- [Franck Nijhof (@frenck)](https://github.com/frenck "34 total commits to the home-assistant organization, 22 commits to home-assistant.github.io, 6 commits to hassio, 2 commits to hassio-addons, 2 commits to home-assistant-polymer, 1 commit to hassio-cli, 1 commit to appdaemon") - [Frank (@syphernl)](https://github.com/syphernl "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") -- [Frantz (@rofrantz)](https://github.com/rofrantz "2 total commits to the home-assistant organization, 2 commits to netdisco") -- [François Martin (@martinfrancois)](https://github.com/martinfrancois "2 total commits to the home-assistant organization, 2 commits to home-assistant") +- [Frantz (@rofrantz)](https://github.com/rofrantz "17 total commits to the home-assistant organization, 9 commits to home-assistant, 4 commits to home-assistant.github.io, 3 commits to netdisco, 1 commit to home-assistant-js-websocket") - [Frederic Hemberger (@fhemberger)](https://github.com/fhemberger "93 total commits to the home-assistant organization, 93 commits to home-assistant.github.io") -- [Fredrik Fjeld (@fredrikfjeld)](https://github.com/fredrikfjeld "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") -- [Fredrik Lindqvist (@Landrash)](https://github.com/Landrash "175 total commits to the home-assistant organization, 74 commits to hassbian-scripts, 69 commits to home-assistant.github.io, 27 commits to pi-gen, 4 commits to home-assistant, 1 commit to home-assistant-polymer") -- [freol35241 (@freol35241)](https://github.com/freol35241 "2 total commits to the home-assistant organization, 2 commits to home-assistant") -- [froz (@froz)](https://github.com/froz "2 total commits to the home-assistant organization, 2 commits to home-assistant") +- [Frederik Bolding (@FrederikBolding)](https://github.com/FrederikBolding "4 total commits to the home-assistant organization, 4 commits to home-assistant") +- [Fredrik Lindqvist (@Landrash)](https://github.com/Landrash "214 total commits to the home-assistant organization, 102 commits to hassbian-scripts, 73 commits to home-assistant.github.io, 34 commits to pi-gen, 4 commits to home-assistant, 1 commit to home-assistant-polymer") +- [freol35241 (@freol35241)](https://github.com/freol35241 "3 total commits to the home-assistant organization, 3 commits to home-assistant") - [fuga2136 (@fuga2136)](https://github.com/fuga2136 "13 total commits to the home-assistant organization, 13 commits to home-assistant.github.io") -- [Gabor Gulyas (@gaborgulyas)](https://github.com/gaborgulyas "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") - [Gabor SZOLLOSI (@szogi)](https://github.com/szogi "3 total commits to the home-assistant organization, 2 commits to home-assistant, 1 commit to appdaemon") - [GadgetReactor (@GadgetReactor)](https://github.com/GadgetReactor "2 total commits to the home-assistant organization, 2 commits to home-assistant") -- [Gavin Mogan (@halkeye)](https://github.com/halkeye "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [Geoff Norton (@kangaroo)](https://github.com/kangaroo "14 total commits to the home-assistant organization, 14 commits to home-assistant") -- [George.M (@nodinosaur)](https://github.com/nodinosaur "8 total commits to the home-assistant organization, 6 commits to home-assistant.github.io, 2 commits to home-assistant") +- [George\.M (@nodinosaur)](https://github.com/nodinosaur "8 total commits to the home-assistant organization, 6 commits to home-assistant.github.io, 2 commits to home-assistant") - [Georgi Kirichkov (@kirichkov)](https://github.com/kirichkov "17 total commits to the home-assistant organization, 11 commits to home-assistant.github.io, 5 commits to home-assistant, 1 commit to appdaemon") -- [Georgi Yanev (@jumpalottahigh)](https://github.com/jumpalottahigh "5 total commits to the home-assistant organization, 3 commits to home-assistant.github.io, 2 commits to home-assistant-polymer") +- [Georgi Yanev (@jumpalottahigh)](https://github.com/jumpalottahigh "6 total commits to the home-assistant organization, 4 commits to home-assistant.github.io, 2 commits to home-assistant-polymer") - [Georgii Staroselskii (@staroselskii)](https://github.com/staroselskii "1 total commits to the home-assistant organization, 1 commit to pi-gen") +- [Gerard (@gerard33)](https://github.com/gerard33 "12 total commits to the home-assistant organization, 6 commits to home-assistant, 6 commits to home-assistant.github.io") - [Gergely Imreh (@imrehg)](https://github.com/imrehg "16 total commits to the home-assistant organization, 11 commits to home-assistant, 5 commits to home-assistant.github.io") - [Gianluca Barbaro (@MrMep)](https://github.com/MrMep "24 total commits to the home-assistant organization, 16 commits to home-assistant, 8 commits to home-assistant.github.io") -- [Gianpaolo Macario (@gmacario)](https://github.com/gmacario "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") -- [Giel Janssens (@gieljnssns)](https://github.com/gieljnssns "6 total commits to the home-assistant organization, 4 commits to home-assistant, 2 commits to home-assistant.github.io") +- [Giel Janssens (@gieljnssns)](https://github.com/gieljnssns "4 total commits to the home-assistant organization, 4 commits to home-assistant") +- [GitBook Bot (@gitbook-bot)](https://github.com/gitbook-bot "1 total commits to the home-assistant organization, 1 commit to developers.home-assistant") - [githubbuh (@githubbuh)](https://github.com/githubbuh "5 total commits to the home-assistant organization, 5 commits to home-assistant.github.io") - [gitmopp (@gitmopp)](https://github.com/gitmopp "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") +- [Giuseppe (@glpatcern)](https://github.com/glpatcern "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [GMFalka (@GMFalka)](https://github.com/GMFalka "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") -- [Gopal Kildoliya (@gopalkildoliya)](https://github.com/gopalkildoliya "6 total commits to the home-assistant organization, 4 commits to home-assistant, 2 commits to home-assistant.github.io") -- [Graeme Smith (@Instagraeme)](https://github.com/Instagraeme "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") -- [GreenTurtwig (@GreenTurtwig)](https://github.com/GreenTurtwig "80 total commits to the home-assistant organization, 73 commits to home-assistant.github.io, 7 commits to home-assistant") -- [Greg Dowling (@pavoni)](https://github.com/pavoni "250 total commits to the home-assistant organization, 223 commits to home-assistant, 25 commits to home-assistant.github.io, 2 commits to netdisco") -- [Greg Laabs (@OverloadUT)](https://github.com/OverloadUT "2 total commits to the home-assistant organization, 2 commits to home-assistant") +- [Gopal Kildoliya (@gopalkildoliya)](https://github.com/gopalkildoliya "4 total commits to the home-assistant organization, 4 commits to home-assistant") +- [GotoCode (@GotoCode)](https://github.com/GotoCode "2 total commits to the home-assistant organization, 2 commits to home-assistant") +- [Grant McConnaughey (@grantmcconnaughey)](https://github.com/grantmcconnaughey "8 total commits to the home-assistant organization, 8 commits to warrant") +- [GreenTurtwig (@GreenTurtwig)](https://github.com/GreenTurtwig "80 total commits to the home-assistant organization, 75 commits to home-assistant.github.io, 5 commits to home-assistant") +- [Greg Dowling (@pavoni)](https://github.com/pavoni "256 total commits to the home-assistant organization, 229 commits to home-assistant, 25 commits to home-assistant.github.io, 2 commits to netdisco") +- [Greg Laabs (@OverloadUT)](https://github.com/OverloadUT "17 total commits to the home-assistant organization, 14 commits to home-assistant, 3 commits to home-assistant.github.io") - [Greg MacLellan (@gregmac)](https://github.com/gregmac "1 total commits to the home-assistant organization, 1 commit to pi-gen") -- [Greg Stengel (@theCMack)](https://github.com/theCMack "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") -- [Greg Stevenson (@gstevenson)](https://github.com/gstevenson "5 total commits to the home-assistant organization, 5 commits to home-assistant.github.io") -- [Greg. A. (@gautric)](https://github.com/gautric "2 total commits to the home-assistant organization, 2 commits to home-assistant") -- [groth-its (@groth-its)](https://github.com/groth-its "2 total commits to the home-assistant organization, 2 commits to home-assistant") +- [Greg Stevenson (@gstevenson)](https://github.com/gstevenson "4 total commits to the home-assistant organization, 4 commits to home-assistant.github.io") +- [Greg\. A\. (@gautric)](https://github.com/gautric "2 total commits to the home-assistant organization, 2 commits to home-assistant") +- [Gregory Benner (@Klathmon)](https://github.com/Klathmon "3 total commits to the home-assistant organization, 3 commits to home-assistant") - [GTH (@gunnarhelgason)](https://github.com/gunnarhelgason "2 total commits to the home-assistant organization, 2 commits to appdaemon") +- [Guillaume Rischard (@grischard)](https://github.com/grischard "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") - [Gustav Ahlberg (@Gyran)](https://github.com/Gyran "20 total commits to the home-assistant organization, 20 commits to home-assistant") - [gwendalg (@gwendalg)](https://github.com/gwendalg "3 total commits to the home-assistant organization, 3 commits to home-assistant") -- [Hajime Morrita (@omo)](https://github.com/omo "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") -- [Hamid (@hamid-elaosta)](https://github.com/hamid-elaosta "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") -- [Hao Hu (@howiehu)](https://github.com/howiehu "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") -- [happyleavesaoc (@happyleavesaoc)](https://github.com/happyleavesaoc "109 total commits to the home-assistant organization, 86 commits to home-assistant, 22 commits to home-assistant.github.io, 1 commit to home-assistant-polymer") -- [Harald Nagel (@haraldnagel)](https://github.com/haraldnagel "8 total commits to the home-assistant organization, 6 commits to home-assistant, 2 commits to home-assistant.github.io") -- [Hari Menon (@floydpink)](https://github.com/floydpink "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") +- [happyleavesaoc (@happyleavesaoc)](https://github.com/happyleavesaoc "114 total commits to the home-assistant organization, 90 commits to home-assistant, 23 commits to home-assistant.github.io, 1 commit to home-assistant-polymer") +- [Harald Nagel (@haraldnagel)](https://github.com/haraldnagel "6 total commits to the home-assistant organization, 6 commits to home-assistant") - [Harris Borawski (@hborawski)](https://github.com/hborawski "2 total commits to the home-assistant organization, 2 commits to home-assistant") -- [hawk259 (@hawk259)](https://github.com/hawk259 "8 total commits to the home-assistant organization, 4 commits to home-assistant.github.io, 3 commits to home-assistant, 1 commit to home-assistant-polymer") +- [hawk259 (@hawk259)](https://github.com/hawk259 "13 total commits to the home-assistant organization, 7 commits to home-assistant, 5 commits to home-assistant.github.io, 1 commit to home-assistant-polymer") - [Heath Paddock (@heathbar)](https://github.com/heathbar "6 total commits to the home-assistant organization, 6 commits to home-assistant") - [Heiko Rothe (@mKeRix)](https://github.com/mKeRix "20 total commits to the home-assistant organization, 15 commits to home-assistant, 5 commits to home-assistant.github.io") +- [Heiko Thiery (@hthiery)](https://github.com/hthiery "7 total commits to the home-assistant organization, 4 commits to home-assistant, 3 commits to home-assistant.github.io") - [Hellowlol (@Hellowlol)](https://github.com/Hellowlol "4 total commits to the home-assistant organization, 3 commits to netdisco, 1 commit to appdaemon") - [Helmut Januschka (@hjanuschka)](https://github.com/hjanuschka "3 total commits to the home-assistant organization, 3 commits to issue-bot") - [Henning Dickten (@hensing)](https://github.com/hensing "2 total commits to the home-assistant organization, 2 commits to home-assistant") -- [Henrik Aronsson (@heennkkee)](https://github.com/heennkkee "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") -- [Henrik Nicolaisen (@hmn)](https://github.com/hmn "6 total commits to the home-assistant organization, 6 commits to home-assistant") +- [Henrik Nicolaisen (@hmn)](https://github.com/hmn "8 total commits to the home-assistant organization, 8 commits to home-assistant") - [Hernán Rossetto (@hmronline)](https://github.com/hmronline "2 total commits to the home-assistant organization, 2 commits to home-assistant") -- [hexa- (@mweinelt)](https://github.com/mweinelt "17 total commits to the home-assistant organization, 9 commits to home-assistant, 7 commits to home-assistant.github.io, 1 commit to home-assistant-polymer") - [heytcass (@heytcass)](https://github.com/heytcass "5 total commits to the home-assistant organization, 5 commits to home-assistant.github.io") - [Hillary Fraley (@hillaryfraley)](https://github.com/hillaryfraley "12 total commits to the home-assistant organization, 12 commits to home-assistant.github.io") -- [honcheng (@honcheng)](https://github.com/honcheng "1 total commits to the home-assistant organization, 1 commit to homebridge-homeassistant") +- [honcheng (@honcheng)](https://github.com/honcheng "2 total commits to the home-assistant organization, 2 commits to homebridge-homeassistant") - [Hugo Dupras (@jabesq)](https://github.com/jabesq "28 total commits to the home-assistant organization, 20 commits to home-assistant, 8 commits to home-assistant.github.io") -- [Hugo Gresse (@HugoGresse)](https://github.com/HugoGresse "7 total commits to the home-assistant organization, 7 commits to home-assistant.github.io") +- [Hugo Gresse (@HugoGresse)](https://github.com/HugoGresse "8 total commits to the home-assistant organization, 8 commits to home-assistant.github.io") - [Hung Le (@hungle)](https://github.com/hungle "1 total commits to the home-assistant organization, 1 commit to libcoap") -- [Huw Davies (@beardedgeek)](https://github.com/beardedgeek "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [Hydreliox (@HydrelioxGitHub)](https://github.com/HydrelioxGitHub "46 total commits to the home-assistant organization, 34 commits to home-assistant, 12 commits to home-assistant.github.io") -- [Iain Matchett (@matchett808)](https://github.com/matchett808 "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [Ian Copp (@icopp)](https://github.com/icopp "3 total commits to the home-assistant organization, 3 commits to home-assistant") - [ianj001 (@ianj001)](https://github.com/ianj001 "7 total commits to the home-assistant organization, 7 commits to home-assistant.github.io") - [icovada (@icovada)](https://github.com/icovada "6 total commits to the home-assistant organization, 3 commits to home-assistant, 3 commits to home-assistant.github.io") -- [Igor Shults (@ishults)](https://github.com/ishults "11 total commits to the home-assistant organization, 6 commits to home-assistant, 4 commits to home-assistant.github.io, 1 commit to home-assistant-polymer") -- [Ioan Loosley (@ioangogo)](https://github.com/ioangogo "5 total commits to the home-assistant organization, 5 commits to home-assistant.github.io") -- [IoTmessenger (@IoTmessenger)](https://github.com/IoTmessenger "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") +- [Igor Bernstein (@igorbernstein2)](https://github.com/igorbernstein2 "2 total commits to the home-assistant organization, 2 commits to home-assistant") +- [Igor Shults (@ishults)](https://github.com/ishults "12 total commits to the home-assistant organization, 6 commits to home-assistant, 5 commits to home-assistant.github.io, 1 commit to home-assistant-polymer") +- [Ioan Loosley (@ioangogo)](https://github.com/ioangogo "10 total commits to the home-assistant organization, 10 commits to home-assistant.github.io") - [Issac Kelly (@issackelly)](https://github.com/issackelly "3 total commits to the home-assistant organization, 3 commits to home-assistant") -- [J-CMartin (@J-CMartin)](https://github.com/J-CMartin "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") -- [J. B. Rainsberger (@jbrains)](https://github.com/jbrains "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") +- [Jacen (@jacen92)](https://github.com/jacen92 "2 total commits to the home-assistant organization, 2 commits to pi-gen") +- [Jack (@squeepip)](https://github.com/squeepip "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [jack (@jackmakesthings)](https://github.com/jackmakesthings "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") -- [Jack Chapple (@jchapple)](https://github.com/jchapple "2 total commits to the home-assistant organization, 2 commits to home-assistant") +- [Jack Fan (@JackWindows)](https://github.com/JackWindows "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Jack Minardi (@jminardi)](https://github.com/jminardi "8 total commits to the home-assistant organization, 8 commits to home-assistant") -- [Jacob Mansfield (@cyberjacob)](https://github.com/cyberjacob "2 total commits to the home-assistant organization, 2 commits to home-assistant") +- [Jacob Mansfield (@cyberjacob)](https://github.com/cyberjacob "3 total commits to the home-assistant organization, 3 commits to home-assistant") - [Jacob Minnis (@jminn)](https://github.com/jminn "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Jacob Siverskog (@jsiverskog)](https://github.com/jsiverskog "1 total commits to the home-assistant organization, 1 commit to pi-gen") -- [Jacob Tomlinson (@jacobtomlinson)](https://github.com/jacobtomlinson "8 total commits to the home-assistant organization, 6 commits to home-assistant.github.io, 2 commits to home-assistant") -- [Jake McCrary (@jakemcc)](https://github.com/jakemcc "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") +- [Jacob Tomlinson (@jacobtomlinson)](https://github.com/jacobtomlinson "6 total commits to the home-assistant organization, 4 commits to home-assistant.github.io, 2 commits to home-assistant") +- [Jaimyn Mayer (@jabelone)](https://github.com/jabelone "1 total commits to the home-assistant organization, 1 commit to hassbian-scripts") - [Jakub Bittner (@rexcze)](https://github.com/rexcze "2 total commits to the home-assistant organization, 2 commits to home-assistant-polymer") - [James Cole (@jamespcole)](https://github.com/jamespcole "94 total commits to the home-assistant organization, 93 commits to home-assistant, 1 commit to home-assistant-js") -- [Jamie van Dyke (@fearoffish)](https://github.com/fearoffish "3 total commits to the home-assistant organization, 2 commits to home-assistant.github.io, 1 commit to home-assistant-iOS") -- [JammyDodger231 (@JammyDodger231)](https://github.com/JammyDodger231 "4 total commits to the home-assistant organization, 4 commits to home-assistant.github.io") -- [Jan Almeroth (@jalmeroth)](https://github.com/jalmeroth "7 total commits to the home-assistant organization, 4 commits to home-assistant, 2 commits to home-assistant.github.io, 1 commit to home-assistant-polymer") +- [James Marsh (@doctorjames)](https://github.com/doctorjames "2 total commits to the home-assistant organization, 2 commits to home-assistant") +- [James Ruan (@jamesruan)](https://github.com/jamesruan "2 total commits to the home-assistant organization, 2 commits to pi-gen") +- [Jamie van Dyke (@fearoffish)](https://github.com/fearoffish "1 total commits to the home-assistant organization, 1 commit to home-assistant-iOS") +- [JammyDodger231 (@JammyDodger231)](https://github.com/JammyDodger231 "5 total commits to the home-assistant organization, 5 commits to home-assistant.github.io") +- [Jan Almeroth (@jalmeroth)](https://github.com/jalmeroth "6 total commits to the home-assistant organization, 5 commits to home-assistant, 1 commit to home-assistant-polymer") - [Jan Harkes (@jaharkes)](https://github.com/jaharkes "110 total commits to the home-assistant organization, 100 commits to home-assistant, 10 commits to netdisco") -- [Jan Losinski (@janLo)](https://github.com/janLo "20 total commits to the home-assistant organization, 16 commits to home-assistant, 4 commits to home-assistant.github.io") +- [Jan Losinski (@janLo)](https://github.com/janLo "21 total commits to the home-assistant organization, 16 commits to home-assistant, 5 commits to home-assistant.github.io") - [Jan Pobořil (@iBobik)](https://github.com/iBobik "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") -- [Jan Wh (@janwh)](https://github.com/janwh "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") -- [Janne Grunau (@jannau)](https://github.com/jannau "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") -- [Jared Beckham (@jtbeckha)](https://github.com/jtbeckha "4 total commits to the home-assistant organization, 2 commits to home-assistant, 2 commits to home-assistant.github.io") -- [Jared J. (@jjensn)](https://github.com/jjensn "1 total commits to the home-assistant organization, 1 commit to netdisco") +- [Jan Willhaus (@janwh)](https://github.com/janwh "4 total commits to the home-assistant organization, 4 commits to home-assistant.github.io") +- [Janne Grunau (@jannau)](https://github.com/jannau "3 total commits to the home-assistant organization, 3 commits to home-assistant") +- [Jared Beckham (@jtbeckha)](https://github.com/jtbeckha "2 total commits to the home-assistant organization, 2 commits to home-assistant") +- [Jared J\. (@jjensn)](https://github.com/jjensn "1 total commits to the home-assistant organization, 1 commit to netdisco") - [Jason Carter (@JasonCarter80)](https://github.com/JasonCarter80 "7 total commits to the home-assistant organization, 4 commits to home-assistant, 3 commits to home-assistant.github.io") - [Jason Hite (@jasonmhite)](https://github.com/jasonmhite "6 total commits to the home-assistant organization, 6 commits to appdaemon") +- [Jason Hu (@awarecan)](https://github.com/awarecan "5 total commits to the home-assistant organization, 4 commits to home-assistant, 1 commit to developers.home-assistant") +- [Javier Gonel (@graffic)](https://github.com/graffic "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Javier González Calleja (@gonzalezcalleja)](https://github.com/gonzalezcalleja "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Jay Stevens (@Jay2645)](https://github.com/Jay2645 "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") +- [JAYMAN-ATX (@JAYMAN-ATX)](https://github.com/JAYMAN-ATX "2 total commits to the home-assistant organization, 2 commits to homebridge-homeassistant") +- [JC Connell (@jcconnell)](https://github.com/jcconnell "7 total commits to the home-assistant organization, 4 commits to home-assistant.github.io, 3 commits to home-assistant") - [Jean Regisser (@jeanregisser)](https://github.com/jeanregisser "2 total commits to the home-assistant organization, 2 commits to home-assistant") -- [Jean-Michel Julien (@KurdyMalloy)](https://github.com/KurdyMalloy "1 total commits to the home-assistant organization, 1 commit to libcoap") -- [Jean-Philippe Bouillot (@Jypy)](https://github.com/Jypy "2 total commits to the home-assistant organization, 2 commits to home-assistant") +- [Jean\-Michel Julien (@KurdyMalloy)](https://github.com/KurdyMalloy "1 total commits to the home-assistant organization, 1 commit to libcoap") +- [Jean\-Philippe Bouillot (@Jypy)](https://github.com/Jypy "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Jeff McGehee (@jlmcgehee21)](https://github.com/jlmcgehee21 "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Jeff Schroeder (@SEJeff)](https://github.com/SEJeff "17 total commits to the home-assistant organization, 17 commits to home-assistant") - [Jeff Wilson (@jawilson)](https://github.com/jawilson "24 total commits to the home-assistant organization, 19 commits to home-assistant, 5 commits to home-assistant.github.io") -- [Jeffrey Lin (@linjef)](https://github.com/linjef "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Jens (@jhoepken)](https://github.com/jhoepken "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") +- [Jens Østergaard Nielsen (@dingusdk)](https://github.com/dingusdk "7 total commits to the home-assistant organization, 4 commits to home-assistant.github.io, 3 commits to home-assistant") +- [Jerad Meisner (@jeradM)](https://github.com/jeradM "7 total commits to the home-assistant organization, 7 commits to home-assistant") - [Jeremiah Wuenschel (@jer)](https://github.com/jer "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") -- [Jeremy (@Wutname1)](https://github.com/Wutname1 "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [Jeremy Williams (@jwillaz)](https://github.com/jwillaz "5 total commits to the home-assistant organization, 5 commits to home-assistant.github.io") - [jeremysv (@jeremysv)](https://github.com/jeremysv "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") -- [Jeroen ter Heerdt (@jeroenterheerdt)](https://github.com/jeroenterheerdt "20 total commits to the home-assistant organization, 12 commits to home-assistant, 8 commits to home-assistant.github.io") +- [Jeroen ter Heerdt (@jeroenterheerdt)](https://github.com/jeroenterheerdt "36 total commits to the home-assistant organization, 20 commits to home-assistant, 16 commits to home-assistant.github.io") - [Jerold Albertson (@jeroldalbertson-wf)](https://github.com/jeroldalbertson-wf "5 total commits to the home-assistant organization, 5 commits to home-assistant.github.io") -- [Jerry Workman (@JerryWorkman)](https://github.com/JerryWorkman "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") -- [Jesse Hills (@jesserockz)](https://github.com/jesserockz "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") -- [Jesse Newland (@jnewland)](https://github.com/jnewland "14 total commits to the home-assistant organization, 11 commits to home-assistant, 3 commits to hubot-home-assistant") +- [Jerry Workman (@JerryWorkman)](https://github.com/JerryWorkman "8 total commits to the home-assistant organization, 8 commits to home-assistant.github.io") +- [Jesse Hills (@jesserockz)](https://github.com/jesserockz "9 total commits to the home-assistant organization, 9 commits to home-assistant") +- [Jesse Newland (@jnewland)](https://github.com/jnewland "16 total commits to the home-assistant organization, 13 commits to home-assistant, 3 commits to hubot-home-assistant") - [JesseWebDotCom (@JesseWebDotCom)](https://github.com/JesseWebDotCom "16 total commits to the home-assistant organization, 8 commits to home-assistant, 8 commits to home-assistant.github.io") - [jgrieger1 (@jgrieger1)](https://github.com/jgrieger1 "1 total commits to the home-assistant organization, 1 commit to appdaemon") -- [jgriff2 (@jgriff2)](https://github.com/jgriff2 "2 total commits to the home-assistant organization, 2 commits to home-assistant") -- [Jim Rollenhagen (@jimrollenhagen)](https://github.com/jimrollenhagen "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") -- [jimbob1001 (@jimbob1001)](https://github.com/jimbob1001 "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") +- [jiafengwang (@jiafengwang)](https://github.com/jiafengwang "1 total commits to the home-assistant organization, 1 commit to appdaemon") +- [jimbob1001 (@jimbob1001)](https://github.com/jimbob1001 "4 total commits to the home-assistant organization, 4 commits to home-assistant.github.io") - [Joakim Nohlgård (@gebart)](https://github.com/gebart "2 total commits to the home-assistant organization, 2 commits to libcoap") -- [Joakim Sørensen (@ludeeus)](https://github.com/ludeeus "27 total commits to the home-assistant organization, 14 commits to hassbian-scripts, 13 commits to home-assistant.github.io") -- [Job (@jmvermeulen)](https://github.com/jmvermeulen "2 total commits to the home-assistant organization, 2 commits to home-assistant") +- [Joakim Sørensen (@ludeeus)](https://github.com/ludeeus "110 total commits to the home-assistant organization, 92 commits to hassbian-scripts, 18 commits to home-assistant.github.io") - [jodur (@jodur)](https://github.com/jodur "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") -- [Joe Lee (@xnoodle)](https://github.com/xnoodle "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") -- [Joe Lu (@snjoetw)](https://github.com/snjoetw "10 total commits to the home-assistant organization, 8 commits to home-assistant, 2 commits to home-assistant.github.io") +- [Joe Lu (@snjoetw)](https://github.com/snjoetw "24 total commits to the home-assistant organization, 18 commits to home-assistant, 5 commits to home-assistant.github.io, 1 commit to appdaemon") +- [Joe McMonagle (@joemcmonagle)](https://github.com/joemcmonagle "13 total commits to the home-assistant organization, 13 commits to home-assistant.github.io") - [joe248 (@joe248)](https://github.com/joe248 "3 total commits to the home-assistant organization, 3 commits to home-assistant") - [Joeboyc2 (@Joeboyc2)](https://github.com/Joeboyc2 "15 total commits to the home-assistant organization, 15 commits to home-assistant.github.io") -- [joemcmonagle (@joemcmonagle)](https://github.com/joemcmonagle "8 total commits to the home-assistant organization, 8 commits to home-assistant.github.io") -- [Johan Bloemberg (@aequitas)](https://github.com/aequitas "43 total commits to the home-assistant organization, 35 commits to home-assistant, 7 commits to home-assistant.github.io, 1 commit to netdisco") -- [Johan Haals (@jhaals)](https://github.com/jhaals "3 total commits to the home-assistant organization, 2 commits to home-assistant.github.io, 1 commit to appdaemon") -- [Johan Klintberg (@moogblob)](https://github.com/moogblob "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") +- [Johan Bloemberg (@aequitas)](https://github.com/aequitas "44 total commits to the home-assistant organization, 35 commits to home-assistant, 8 commits to home-assistant.github.io, 1 commit to netdisco") +- [Johan Haals (@jhaals)](https://github.com/jhaals "1 total commits to the home-assistant organization, 1 commit to appdaemon") - [Johan van der Kuijl (@Rubyan)](https://github.com/Rubyan "4 total commits to the home-assistant organization, 3 commits to home-assistant.github.io, 1 commit to appdaemon") -- [Johann Kellerman (@kellerza)](https://github.com/kellerza "144 total commits to the home-assistant organization, 114 commits to home-assistant, 30 commits to home-assistant.github.io") -- [Johannes K. (@roadrash2108)](https://github.com/roadrash2108 "4 total commits to the home-assistant organization, 4 commits to home-assistant.github.io") +- [Johann Kellerman (@kellerza)](https://github.com/kellerza "181 total commits to the home-assistant organization, 148 commits to home-assistant, 33 commits to home-assistant.github.io") +- [Johannes K\. (@roadrash2108)](https://github.com/roadrash2108 "4 total commits to the home-assistant organization, 4 commits to home-assistant.github.io") - [John (@J-C-B)](https://github.com/J-C-B "5 total commits to the home-assistant organization, 5 commits to home-assistant.github.io") -- [John Arild Berentsen (@turbokongen)](https://github.com/turbokongen "194 total commits to the home-assistant organization, 146 commits to home-assistant, 36 commits to home-assistant.github.io, 12 commits to home-assistant-polymer") -- [John Coggeshall (@coogle)](https://github.com/coogle "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") +- [John Arild Berentsen (@turbokongen)](https://github.com/turbokongen "204 total commits to the home-assistant organization, 151 commits to home-assistant, 37 commits to home-assistant.github.io, 16 commits to home-assistant-polymer") - [John Lindley (@jwl17330536)](https://github.com/jwl17330536 "1 total commits to the home-assistant organization, 1 commit to appdaemon") -- [John McLaughlin (@loghound)](https://github.com/loghound "2 total commits to the home-assistant organization, 2 commits to home-assistant") -- [John Mihalic (@mezz64)](https://github.com/mezz64 "45 total commits to the home-assistant organization, 31 commits to home-assistant, 12 commits to home-assistant.github.io, 1 commit to hadashboard, 1 commit to home-assistant-polymer") -- [Johnny Chadda (@joch)](https://github.com/joch "3 total commits to the home-assistant organization, 2 commits to home-assistant.github.io, 1 commit to home-assistant-polymer") +- [John Mihalic (@mezz64)](https://github.com/mezz64 "50 total commits to the home-assistant organization, 36 commits to home-assistant, 12 commits to home-assistant.github.io, 1 commit to hadashboard, 1 commit to home-assistant-polymer") +- [Johnny Chadda (@joch)](https://github.com/joch "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") - [Jon (@JonMurphy)](https://github.com/JonMurphy "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") -- [Jon Caruana (@joncar)](https://github.com/joncar "5 total commits to the home-assistant organization, 3 commits to home-assistant, 2 commits to home-assistant.github.io") -- [Jon Griffith (@arretx)](https://github.com/arretx "6 total commits to the home-assistant organization, 6 commits to home-assistant.github.io") -- [Jon Maddox (@maddox)](https://github.com/maddox "102 total commits to the home-assistant organization, 78 commits to home-assistant, 16 commits to homebridge-homeassistant, 8 commits to home-assistant.github.io") +- [Jon Caruana (@joncar)](https://github.com/joncar "3 total commits to the home-assistant organization, 3 commits to home-assistant") +- [Jon Griffith (@arretx)](https://github.com/arretx "12 total commits to the home-assistant organization, 11 commits to home-assistant.github.io, 1 commit to appdaemon") +- [Jon Maddox (@maddox)](https://github.com/maddox "107 total commits to the home-assistant organization, 82 commits to home-assistant, 16 commits to homebridge-homeassistant, 9 commits to home-assistant.github.io") - [Jonas Pedersen (@JonasPed)](https://github.com/JonasPed "1 total commits to the home-assistant organization, 1 commit to appdaemon") - [Jonatan Castro (@jcastro)](https://github.com/jcastro "7 total commits to the home-assistant organization, 7 commits to home-assistant.github.io") - [Jonathan Baginski (@patchedsoul)](https://github.com/patchedsoul "115 total commits to the home-assistant organization, 87 commits to fabric-home-assistant, 28 commits to home-assistant.github.io") +- [Jonathan Weinberg (@jonathanweinberg)](https://github.com/jonathanweinberg "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [joopert (@joopert)](https://github.com/joopert "6 total commits to the home-assistant organization, 6 commits to home-assistant") -- [Jordi (@hokus15)](https://github.com/hokus15 "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") -- [Jordy (@jbarrancos)](https://github.com/jbarrancos "39 total commits to the home-assistant organization, 39 commits to home-assistant") +- [Jordi (@hokus15)](https://github.com/hokus15 "4 total commits to the home-assistant organization, 4 commits to home-assistant.github.io") +- [Jordy (@jbarrancos)](https://github.com/jbarrancos "40 total commits to the home-assistant organization, 40 commits to home-assistant") - [Jose Juan Montes (@jjmontesl)](https://github.com/jjmontesl "9 total commits to the home-assistant organization, 6 commits to home-assistant, 3 commits to home-assistant.github.io") - [Joseph Carter (@iKarith)](https://github.com/iKarith "9 total commits to the home-assistant organization, 9 commits to pi-gen") -- [Joseph Piron (@eagleamon)](https://github.com/eagleamon "3 total commits to the home-assistant organization, 3 commits to home-assistant") -- [Josh (@karlw00t)](https://github.com/karlw00t "2 total commits to the home-assistant organization, 2 commits to home-assistant") -- [Josh Anderson (@andersonshatch)](https://github.com/andersonshatch "6 total commits to the home-assistant organization, 3 commits to homebridge-homeassistant, 3 commits to home-assistant") -- [Josh Nichols (@technicalpickles)](https://github.com/technicalpickles "26 total commits to the home-assistant organization, 15 commits to home-assistant, 11 commits to home-assistant.github.io") +- [Josh Anderson (@andersonshatch)](https://github.com/andersonshatch "8 total commits to the home-assistant organization, 5 commits to home-assistant, 3 commits to homebridge-homeassistant") +- [Josh Nichols (@technicalpickles)](https://github.com/technicalpickles "28 total commits to the home-assistant organization, 15 commits to home-assistant, 13 commits to home-assistant.github.io") - [Josh Wright (@JshWright)](https://github.com/JshWright "28 total commits to the home-assistant organization, 20 commits to home-assistant, 8 commits to home-assistant.github.io") - [jpcomtois (@jpcomtois)](https://github.com/jpcomtois "1 total commits to the home-assistant organization, 1 commit to libcoap") - [JudgeDredd (@JudgeDreddKLC)](https://github.com/JudgeDreddKLC "10 total commits to the home-assistant organization, 10 commits to home-assistant.github.io") -- [Juggels (@Juggels)](https://github.com/Juggels "8 total commits to the home-assistant organization, 5 commits to home-assistant, 3 commits to home-assistant.github.io") +- [Juggels (@Juggels)](https://github.com/Juggels "11 total commits to the home-assistant organization, 7 commits to home-assistant, 4 commits to home-assistant.github.io") +- [Julian Kaffke (@jaykay)](https://github.com/jaykay "1 total commits to the home-assistant organization, 1 commit to hassio-addons") - [Julian Kahnert (@JulianKahnert)](https://github.com/JulianKahnert "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") -- [Julius Mittenzwei (@Julius2342)](https://github.com/Julius2342 "14 total commits to the home-assistant organization, 9 commits to home-assistant, 5 commits to home-assistant.github.io") +- [Julius Mittenzwei (@Julius2342)](https://github.com/Julius2342 "31 total commits to the home-assistant organization, 24 commits to home-assistant, 7 commits to home-assistant.github.io") - [jumpkick (@jumpkick)](https://github.com/jumpkick "15 total commits to the home-assistant organization, 12 commits to home-assistant, 3 commits to home-assistant.github.io") -- [Justin Dray (@justin8)](https://github.com/justin8 "9 total commits to the home-assistant organization, 7 commits to home-assistant.github.io, 2 commits to home-assistant") -- [Justin Hayes (@GussyH)](https://github.com/GussyH "7 total commits to the home-assistant organization, 7 commits to hadashboard") -- [Justin Weberg (@justweb1)](https://github.com/justweb1 "28 total commits to the home-assistant organization, 13 commits to home-assistant-polymer, 7 commits to hassbot, 4 commits to home-assistant, 2 commits to home-assistant.github.io, 1 commit to home-assistant-js, 1 commit to hassio") +- [Justin Dray (@justin8)](https://github.com/justin8 "7 total commits to the home-assistant organization, 7 commits to home-assistant.github.io") +- [Justin Hayes (@GussyH)](https://github.com/GussyH "8 total commits to the home-assistant organization, 7 commits to hadashboard, 1 commit to appdaemon") +- [Justin Weberg (@justweb1)](https://github.com/justweb1 "26 total commits to the home-assistant organization, 13 commits to home-assistant-polymer, 7 commits to hassbot, 4 commits to home-assistant, 1 commit to home-assistant-js, 1 commit to hassio") - [Justyn Shull (@justyns)](https://github.com/justyns "5 total commits to the home-assistant organization, 5 commits to home-assistant") -- [Jürgen W (@jurgenweber)](https://github.com/jurgenweber "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") -- [Kai (@luxus)](https://github.com/luxus "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") -- [Kane610 (@Kane610)](https://github.com/Kane610 "15 total commits to the home-assistant organization, 7 commits to home-assistant, 7 commits to home-assistant.github.io, 1 commit to netdisco") - [Karen Goode (@kfgoode)](https://github.com/kfgoode "4 total commits to the home-assistant organization, 4 commits to home-assistant") -- [karlkar (@karlkar)](https://github.com/karlkar "2 total commits to the home-assistant organization, 2 commits to home-assistant") +- [karlkar (@karlkar)](https://github.com/karlkar "15 total commits to the home-assistant organization, 10 commits to home-assistant, 5 commits to home-assistant.github.io") - [Keaton Taylor (@keatontaylor)](https://github.com/keatontaylor "7 total commits to the home-assistant organization, 4 commits to home-assistant, 3 commits to home-assistant.github.io") -- [Keith (@seedzero)](https://github.com/seedzero "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") -- [Keith Lamprecht (@Nixon506E)](https://github.com/Nixon506E "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Ken Bannister (@kb2ma)](https://github.com/kb2ma "1 total commits to the home-assistant organization, 1 commit to libcoap") - [Ken Davidson (@kwdavidson)](https://github.com/kwdavidson "13 total commits to the home-assistant organization, 11 commits to home-assistant.github.io, 2 commits to appdaemon") -- [Kenny Millington (@kmdm)](https://github.com/kmdm "2 total commits to the home-assistant organization, 2 commits to home-assistant") -- [Kevin (@Mister-Espria)](https://github.com/Mister-Espria "2 total commits to the home-assistant organization, 2 commits to home-assistant") -- [Kevin Christensen (@nivekmai)](https://github.com/nivekmai "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") -- [Kevin Delaney (@kevindelaney)](https://github.com/kevindelaney "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") +- [kennedyshead (@kennedyshead)](https://github.com/kennedyshead "10 total commits to the home-assistant organization, 10 commits to home-assistant") - [Kevin Fronczak (@fronzbot)](https://github.com/fronzbot "19 total commits to the home-assistant organization, 11 commits to home-assistant, 8 commits to home-assistant.github.io") - [Kevin Gisi (@gisikw)](https://github.com/gisikw "5 total commits to the home-assistant organization, 5 commits to home-assistant.github.io") - [Kevin Gottsman (@gottsman)](https://github.com/gottsman "6 total commits to the home-assistant organization, 6 commits to home-assistant.github.io") -- [Kevin Panaro (@kevinpanaro)](https://github.com/kevinpanaro "2 total commits to the home-assistant organization, 2 commits to home-assistant") -- [Kevin Siml (@appzer)](https://github.com/appzer "2 total commits to the home-assistant organization, 2 commits to home-assistant") +- [Kevin Siml (@appzer)](https://github.com/appzer "3 total commits to the home-assistant organization, 3 commits to home-assistant") - [Keyasha Brothern (@KMBrothern)](https://github.com/KMBrothern "4 total commits to the home-assistant organization, 4 commits to home-assistant.github.io") - [kfcook (@kfcook)](https://github.com/kfcook "3 total commits to the home-assistant organization, 3 commits to home-assistant") - [kireyeu (@kireyeu)](https://github.com/kireyeu "4 total commits to the home-assistant organization, 4 commits to home-assistant-notebooks") -- [Klaas Hoekema (@KlaasH)](https://github.com/KlaasH "12 total commits to the home-assistant organization, 5 commits to home-assistant, 5 commits to home-assistant.github.io, 2 commits to home-assistant-polymer") +- [Klaas Hoekema (@KlaasH)](https://github.com/KlaasH "12 total commits to the home-assistant organization, 5 commits to home-assistant.github.io, 5 commits to home-assistant, 2 commits to home-assistant-polymer") - [Klaus (@k-laus)](https://github.com/k-laus "1 total commits to the home-assistant organization, 1 commit to appdaemon") +- [koolsb (@koolsb)](https://github.com/koolsb "3 total commits to the home-assistant organization, 3 commits to home-assistant") +- [Kory Prince (@korylprince)](https://github.com/korylprince "4 total commits to the home-assistant organization, 4 commits to home-assistant-polymer") - [Krasimir Chariyski (@Chariyski)](https://github.com/Chariyski "4 total commits to the home-assistant organization, 4 commits to home-assistant.github.io") - [Krasimir Zhelev (@zhelev)](https://github.com/zhelev "1 total commits to the home-assistant organization, 1 commit to netdisco") - [kroimon (@kroimon)](https://github.com/kroimon "1 total commits to the home-assistant organization, 1 commit to netdisco") -- [Kyle Decot (@kyledecot)](https://github.com/kyledecot "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") -- [Kyle Gordon (@kylegordon)](https://github.com/kylegordon "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [Kyle Hendricks (@kylehendricks)](https://github.com/kylehendricks "6 total commits to the home-assistant organization, 6 commits to home-assistant") -- [Kyle R (@qcryptic)](https://github.com/qcryptic "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") -- [lamiskin (@lamiskin)](https://github.com/lamiskin "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") +- [lamiskin (@lamiskin)](https://github.com/lamiskin "4 total commits to the home-assistant organization, 4 commits to home-assistant.github.io") +- [Lars Englund (@larsenglund)](https://github.com/larsenglund "1 total commits to the home-assistant organization, 1 commit to appdaemon") - [lee-js (@lee-js)](https://github.com/lee-js "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") -- [Leon99 (@Leon99)](https://github.com/Leon99 "3 total commits to the home-assistant organization, 2 commits to home-assistant.github.io, 1 commit to appdaemon") +- [Lennart Bernhardt (@LennyPenny)](https://github.com/LennyPenny "1 total commits to the home-assistant organization, 1 commit to hassio-build") +- [Leon99 (@Leon99)](https://github.com/Leon99 "1 total commits to the home-assistant organization, 1 commit to appdaemon") - [Leonardo Saraiva (@vyper)](https://github.com/vyper "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") -- [Lev Aronsky (@aronsky)](https://github.com/aronsky "11 total commits to the home-assistant organization, 8 commits to home-assistant, 3 commits to home-assistant.github.io") -- [Lewis Juggins (@lwis)](https://github.com/lwis "63 total commits to the home-assistant organization, 50 commits to home-assistant, 12 commits to home-assistant.github.io, 1 commit to home-assistant-polymer") +- [Lev Aronsky (@aronsky)](https://github.com/aronsky "14 total commits to the home-assistant organization, 11 commits to home-assistant, 3 commits to home-assistant.github.io") +- [Lewis Juggins (@lwis)](https://github.com/lwis "66 total commits to the home-assistant organization, 53 commits to home-assistant, 12 commits to home-assistant.github.io, 1 commit to home-assistant-polymer") - [lichtteil (@lichtteil)](https://github.com/lichtteil "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") -- [Lindsay Ward (@lindsaymarkward)](https://github.com/lindsaymarkward "17 total commits to the home-assistant organization, 13 commits to home-assistant.github.io, 4 commits to home-assistant") +- [Lindsay Ward (@lindsaymarkward)](https://github.com/lindsaymarkward "18 total commits to the home-assistant organization, 13 commits to home-assistant.github.io, 5 commits to home-assistant") - [linuxlurak (@linuxlurak)](https://github.com/linuxlurak "5 total commits to the home-assistant organization, 3 commits to home-assistant.github.io, 2 commits to hadashboard") - [linvinus (@linvinus)](https://github.com/linvinus "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") - [lrmate (@lrmate)](https://github.com/lrmate "3 total commits to the home-assistant organization, 3 commits to home-assistant") -- [Luar Roji (@cyberplant)](https://github.com/cyberplant "6 total commits to the home-assistant organization, 4 commits to home-assistant.github.io, 2 commits to home-assistant") -- [luca-angemi (@luca-angemi)](https://github.com/luca-angemi "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") +- [Luar Roji (@cyberplant)](https://github.com/cyberplant "4 total commits to the home-assistant organization, 4 commits to home-assistant.github.io") +- [Luc Touraille (@stilllman)](https://github.com/stilllman "1 total commits to the home-assistant organization, 1 commit to netdisco") +- [Luca Angemi (@luca-angemi)](https://github.com/luca-angemi "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") - [LucaSoldi (@LucaSoldi)](https://github.com/LucaSoldi "6 total commits to the home-assistant organization, 6 commits to home-assistant") - [Lucien Guimier (@guimier)](https://github.com/guimier "1 total commits to the home-assistant organization, 1 commit to libcoap") - [Ludovic (@ldvc)](https://github.com/ldvc "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") +- [Ludovico de Nittis (@RyuzakiKK)](https://github.com/RyuzakiKK "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [Lukas (@lukas-hetzenecker)](https://github.com/lukas-hetzenecker "14 total commits to the home-assistant organization, 10 commits to home-assistant, 4 commits to home-assistant.github.io") -- [Lukas Barth (@tinloaf)](https://github.com/tinloaf "22 total commits to the home-assistant organization, 12 commits to home-assistant, 9 commits to home-assistant.github.io, 1 commit to home-assistant-polymer") -- [Lukas Ecklmayr (@outrun0506)](https://github.com/outrun0506 "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") +- [Lukas Barth (@tinloaf)](https://github.com/tinloaf "37 total commits to the home-assistant organization, 23 commits to home-assistant, 12 commits to home-assistant.github.io, 2 commits to home-assistant-polymer") +- [Lukas Ecklmayr (@outrun0506)](https://github.com/outrun0506 "6 total commits to the home-assistant organization, 5 commits to home-assistant.github.io, 1 commit to home-assistant-polymer") +- [Lukas Porubcan (@Luc3as)](https://github.com/Luc3as "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") - [Luke Armstrong (@lukearmstrong)](https://github.com/lukearmstrong "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") -- [Luuk (@Maharball1)](https://github.com/Maharball1 "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") -- [LvivEchoes (@LvivEchoes)](https://github.com/LvivEchoes "7 total commits to the home-assistant organization, 4 commits to home-assistant, 3 commits to home-assistant.github.io") -- [Maciej Bieniek (@bieniu)](https://github.com/bieniu "4 total commits to the home-assistant organization, 3 commits to home-assistant, 1 commit to home-assistant-polymer") -- [Maciej Sokołowski (@matemaciek)](https://github.com/matemaciek "4 total commits to the home-assistant organization, 3 commits to home-assistant, 1 commit to hassio-build") +- [LvivEchoes (@LvivEchoes)](https://github.com/LvivEchoes "8 total commits to the home-assistant organization, 4 commits to home-assistant, 3 commits to home-assistant.github.io, 1 commit to home-assistant-polymer") +- [Maarten Groeneweg (@lazytesting)](https://github.com/lazytesting "1 total commits to the home-assistant organization, 1 commit to hassio-addons") +- [Maciej Bieniek (@bieniu)](https://github.com/bieniu "5 total commits to the home-assistant organization, 4 commits to home-assistant, 1 commit to home-assistant-polymer") +- [Maciej Sokołowski (@matemaciek)](https://github.com/matemaciek "5 total commits to the home-assistant organization, 4 commits to home-assistant, 1 commit to hassio-build") - [Maciej Wasilak (@mwasilak)](https://github.com/mwasilak "1 total commits to the home-assistant organization, 1 commit to libcoap") - [Magnus Ihse Bursie (@magicus)](https://github.com/magicus "16 total commits to the home-assistant organization, 9 commits to home-assistant, 4 commits to netdisco, 3 commits to home-assistant.github.io") - [Magnus Lyckå (@magnus-lycka)](https://github.com/magnus-lycka "1 total commits to the home-assistant organization, 1 commit to netdisco") - [MagnusKnutas (@MagnusKnutas)](https://github.com/MagnusKnutas "29 total commits to the home-assistant organization, 29 commits to home-assistant") -- [Mahasri Kalavala (@skalavala)](https://github.com/skalavala "8 total commits to the home-assistant organization, 8 commits to home-assistant.github.io") -- [Maikel Wever (@maikelwever)](https://github.com/maikelwever "2 total commits to the home-assistant organization, 2 commits to home-assistant") -- [Malte Franken (@exxamalte)](https://github.com/exxamalte "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") -- [Manu (@matrixagent)](https://github.com/matrixagent "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") -- [Marc Egli (@frog32)](https://github.com/frog32 "9 total commits to the home-assistant organization, 7 commits to home-assistant, 2 commits to home-assistant.github.io") -- [Marc Forth (@mf-social)](https://github.com/mf-social "13 total commits to the home-assistant organization, 12 commits to home-assistant.github.io, 1 commit to fabric-home-assistant") -- [Marc Pabst (@mxtra)](https://github.com/mxtra "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") -- [Marc Plano-Lesay (@Kernald)](https://github.com/Kernald "12 total commits to the home-assistant organization, 10 commits to home-assistant.github.io, 2 commits to home-assistant") +- [Mahasri Kalavala (@skalavala)](https://github.com/skalavala "28 total commits to the home-assistant organization, 28 commits to home-assistant.github.io") +- [Malte Franken (@exxamalte)](https://github.com/exxamalte "10 total commits to the home-assistant organization, 5 commits to home-assistant, 3 commits to home-assistant.github.io, 1 commit to developers.home-assistant, 1 commit to home-assistant-polymer") +- [Marc Egli (@frog32)](https://github.com/frog32 "11 total commits to the home-assistant organization, 8 commits to home-assistant, 3 commits to home-assistant.github.io") +- [Marc Forth (@mf-social)](https://github.com/mf-social "27 total commits to the home-assistant organization, 26 commits to home-assistant.github.io, 1 commit to fabric-home-assistant") +- [Marc Khouri (@ubnt-marc-khouri)](https://github.com/ubnt-marc-khouri "4 total commits to the home-assistant organization, 2 commits to home-assistant-polymer, 1 commit to developers.home-assistant, 1 commit to hassio-build") +- [Marc Pabst (@marcpabst)](https://github.com/marcpabst "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") +- [Marc Plano\-Lesay (@Kernald)](https://github.com/Kernald "10 total commits to the home-assistant organization, 10 commits to home-assistant.github.io") - [Marcel030nl (@Marcel030nl)](https://github.com/Marcel030nl "5 total commits to the home-assistant organization, 5 commits to home-assistant.github.io") -- [Marcelo Moreira de Mello (@tchellomello)](https://github.com/tchellomello "139 total commits to the home-assistant organization, 76 commits to home-assistant, 61 commits to home-assistant.github.io, 1 commit to home-assistant-assets, 1 commit to home-assistant-polymer") +- [Marcelo Moreira de Mello (@tchellomello)](https://github.com/tchellomello "147 total commits to the home-assistant organization, 80 commits to home-assistant, 64 commits to home-assistant.github.io, 1 commit to home-assistant-assets, 1 commit to hassio-build, 1 commit to home-assistant-polymer") +- [Marcin Domański (@kabturek)](https://github.com/kabturek "2 total commits to the home-assistant organization, 2 commits to appdaemon") - [Marcin Jaworski (@yawor)](https://github.com/yawor "12 total commits to the home-assistant organization, 12 commits to appdaemon") -- [Marijn Giesen (@marijngiesen)](https://github.com/marijngiesen "7 total commits to the home-assistant organization, 5 commits to hadashboard, 2 commits to home-assistant.github.io") -- [Mark Coombes (@marthoc)](https://github.com/marthoc "3 total commits to the home-assistant organization, 3 commits to home-assistant") +- [Marco (@marconett)](https://github.com/marconett "3 total commits to the home-assistant organization, 3 commits to appdaemon") +- [Marco Orovecchia (@Oro)](https://github.com/Oro "8 total commits to the home-assistant organization, 5 commits to home-assistant, 3 commits to home-assistant.github.io") +- [Marijn Giesen (@marijngiesen)](https://github.com/marijngiesen "5 total commits to the home-assistant organization, 5 commits to hadashboard") +- [Marius (@ciotlosm)](https://github.com/ciotlosm "15 total commits to the home-assistant organization, 9 commits to home-assistant-polymer, 6 commits to home-assistant") +- [Mark Coombes (@marthoc)](https://github.com/marthoc "8 total commits to the home-assistant organization, 8 commits to home-assistant") - [Mark Grosen (@mgsb)](https://github.com/mgsb "1 total commits to the home-assistant organization, 1 commit to netdisco") - [Mark Huson (@mehuman)](https://github.com/mehuman "11 total commits to the home-assistant organization, 11 commits to home-assistant.github.io") -- [Mark Oude Veldhuis (@markoudev)](https://github.com/markoudev "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") -- [Markus (@iMarkus)](https://github.com/iMarkus "3 total commits to the home-assistant organization, 2 commits to home-assistant, 1 commit to hassio") +- [Mark Perdue (@markperdue)](https://github.com/markperdue "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") +- [mark9white (@mark9white)](https://github.com/mark9white "1 total commits to the home-assistant organization, 1 commit to hassio") +- [markferry (@markferry)](https://github.com/markferry "3 total commits to the home-assistant organization, 3 commits to home-assistant") +- [Markus (@iMarkus)](https://github.com/iMarkus "1 total commits to the home-assistant organization, 1 commit to hassio") - [Markus Becker (@markushx)](https://github.com/markushx "6 total commits to the home-assistant organization, 6 commits to libcoap") -- [Markus Lipp (@LightIsLife)](https://github.com/LightIsLife "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") -- [Markus Peter (@bimbar)](https://github.com/bimbar "5 total commits to the home-assistant organization, 3 commits to home-assistant, 2 commits to home-assistant.github.io") +- [Markus Peter (@bimbar)](https://github.com/bimbar "3 total commits to the home-assistant organization, 3 commits to home-assistant") - [Markus Stenberg (@fingon)](https://github.com/fingon "6 total commits to the home-assistant organization, 6 commits to home-assistant") - [Martin Berg (@mbrrg)](https://github.com/mbrrg "7 total commits to the home-assistant organization, 4 commits to home-assistant, 3 commits to home-assistant.github.io") -- [Martin Donlon (@wickerwaka)](https://github.com/wickerwaka "4 total commits to the home-assistant organization, 2 commits to home-assistant, 2 commits to home-assistant.github.io") -- [Martin Eberhardt (@DarkFox)](https://github.com/DarkFox "4 total commits to the home-assistant organization, 4 commits to home-assistant.github.io") -- [Martin Hjelmare (@MartinHjelmare)](https://github.com/MartinHjelmare "143 total commits to the home-assistant organization, 114 commits to home-assistant, 29 commits to home-assistant.github.io") -- [Martin Rowan (@shortbloke)](https://github.com/shortbloke "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") -- [Martin Vacula (@MatoKafkac)](https://github.com/MatoKafkac "2 total commits to the home-assistant organization, 2 commits to home-assistant") +- [Martin Eberhardt (@DarkFox)](https://github.com/DarkFox "5 total commits to the home-assistant organization, 5 commits to home-assistant.github.io") +- [Martin Hjelmare (@MartinHjelmare)](https://github.com/MartinHjelmare "160 total commits to the home-assistant organization, 130 commits to home-assistant, 30 commits to home-assistant.github.io") +- [Martin Rowan (@shortbloke)](https://github.com/shortbloke "3 total commits to the home-assistant organization, 3 commits to home-assistant") +- [Martin Weinelt (@mweinelt)](https://github.com/mweinelt "17 total commits to the home-assistant organization, 9 commits to home-assistant, 7 commits to home-assistant.github.io, 1 commit to home-assistant-polymer") - [Martokk (@martokk)](https://github.com/martokk "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") -- [Mathew Peterson (@mathewpeterson)](https://github.com/mathewpeterson "3 total commits to the home-assistant organization, 2 commits to home-assistant.github.io, 1 commit to homebridge-homeassistant") -- [Matt N. (@mnoorenberghe)](https://github.com/mnoorenberghe "48 total commits to the home-assistant organization, 24 commits to home-assistant-iOS, 16 commits to home-assistant.github.io, 7 commits to home-assistant, 1 commit to home-assistant-polymer") +- [Mathew Peterson (@mathewpeterson)](https://github.com/mathewpeterson "1 total commits to the home-assistant organization, 1 commit to homebridge-homeassistant") +- [Matt N\. (@mnoorenberghe)](https://github.com/mnoorenberghe "54 total commits to the home-assistant organization, 25 commits to home-assistant-iOS, 17 commits to home-assistant.github.io, 9 commits to home-assistant, 2 commits to home-assistant-polymer, 1 commit to homebridge-homeassistant") - [Matt Rogers (@rogersmj)](https://github.com/rogersmj "20 total commits to the home-assistant organization, 20 commits to hadashboard") -- [Matt Schmitt (@schmittx)](https://github.com/schmittx "27 total commits to the home-assistant organization, 20 commits to homebridge-homeassistant, 5 commits to home-assistant, 2 commits to home-assistant.github.io") -- [Matt White (@mw-white)](https://github.com/mw-white "10 total commits to the home-assistant organization, 5 commits to home-assistant, 5 commits to home-assistant.github.io") -- [matt2005 (@matt2005)](https://github.com/matt2005 "2 total commits to the home-assistant organization, 2 commits to home-assistant") +- [Matt Schmitt (@schmittx)](https://github.com/schmittx "83 total commits to the home-assistant organization, 52 commits to homebridge-homeassistant, 17 commits to home-assistant, 11 commits to home-assistant.github.io, 3 commits to home-assistant-polymer") +- [Matt White (@mw-white)](https://github.com/mw-white "10 total commits to the home-assistant organization, 5 commits to home-assistant.github.io, 5 commits to home-assistant") - [Matteo Lampugnani (@t30)](https://github.com/t30 "7 total commits to the home-assistant organization, 7 commits to home-assistant.github.io") - [Matthew Bowen (@mgbowen)](https://github.com/mgbowen "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") -- [Matthew Donoughe (@mdonoughe)](https://github.com/mdonoughe "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") -- [Matthew Garrett (@mjg59)](https://github.com/mjg59 "10 total commits to the home-assistant organization, 7 commits to home-assistant, 3 commits to home-assistant.github.io") -- [Matthew Schick (@mattsch)](https://github.com/mattsch "2 total commits to the home-assistant organization, 2 commits to home-assistant") -- [Matthew Treinish (@mtreinish)](https://github.com/mtreinish "16 total commits to the home-assistant organization, 10 commits to home-assistant, 6 commits to home-assistant.github.io") +- [Matthew Garrett (@mjg59)](https://github.com/mjg59 "25 total commits to the home-assistant organization, 18 commits to home-assistant, 7 commits to home-assistant.github.io") +- [Matthew Rollings (@stealthcopter)](https://github.com/stealthcopter "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") +- [Matthew Treinish (@mtreinish)](https://github.com/mtreinish "21 total commits to the home-assistant organization, 14 commits to home-assistant, 7 commits to home-assistant.github.io") +- [Matthias Dötsch (@brainexe)](https://github.com/brainexe "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") +- [Matthias Urlichs (@smurfix)](https://github.com/smurfix "3 total commits to the home-assistant organization, 3 commits to appdaemon") +- [Mattias Welponer (@mxworm)](https://github.com/mxworm "10 total commits to the home-assistant organization, 6 commits to home-assistant, 4 commits to home-assistant.github.io") - [mattie47 (@mattie47)](https://github.com/mattie47 "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") -- [mauriciobonani (@mauriciobonani)](https://github.com/mauriciobonani "6 total commits to the home-assistant organization, 6 commits to home-assistant.github.io") +- [Max Prokhorov (@mcspr)](https://github.com/mcspr "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") - [Max Rumpf (@Maxr1998)](https://github.com/Maxr1998 "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") +- [maxclaey (@maxclaey)](https://github.com/maxclaey "8 total commits to the home-assistant organization, 5 commits to home-assistant, 3 commits to home-assistant.github.io") +- [maxlaverse (@maxlaverse)](https://github.com/maxlaverse "6 total commits to the home-assistant organization, 6 commits to home-assistant") - [mboeru (@mboeru)](https://github.com/mboeru "1 total commits to the home-assistant organization, 1 commit to home-assistant-iOS") -- [Menno Blom (@b10m)](https://github.com/b10m "3 total commits to the home-assistant organization, 2 commits to home-assistant.github.io, 1 commit to netdisco") +- [mcfrojd (@mcfrojd)](https://github.com/mcfrojd "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") +- [Menno Blom (@b10m)](https://github.com/b10m "4 total commits to the home-assistant organization, 3 commits to home-assistant.github.io, 1 commit to netdisco") - [mertenats (@mertenats)](https://github.com/mertenats "4 total commits to the home-assistant organization, 4 commits to home-assistant.github.io") - [Micha LaQua (@milaq)](https://github.com/milaq "3 total commits to the home-assistant organization, 3 commits to home-assistant") -- [Michael (@hartmms)](https://github.com/hartmms "6 total commits to the home-assistant organization, 4 commits to home-assistant.github.io, 2 commits to home-assistant") +- [Michael (@hartmms)](https://github.com/hartmms "4 total commits to the home-assistant organization, 4 commits to home-assistant.github.io") - [Michael Auchter (@auchter)](https://github.com/auchter "13 total commits to the home-assistant organization, 13 commits to home-assistant") -- [Michael Buffington (@elbowdonkey)](https://github.com/elbowdonkey "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") -- [Michael Fester (@michaelfester)](https://github.com/michaelfester "5 total commits to the home-assistant organization, 3 commits to home-assistant.github.io, 2 commits to home-assistant") +- [Michael Fester (@michaelfester)](https://github.com/michaelfester "4 total commits to the home-assistant organization, 4 commits to home-assistant.github.io") - [Michael Furtak (@mfurtak)](https://github.com/mfurtak "5 total commits to the home-assistant organization, 5 commits to issue-bot") - [Michael Gilbert (@Zyell)](https://github.com/Zyell "8 total commits to the home-assistant organization, 8 commits to home-assistant") -- [Michael Heinemann (@heinemml)](https://github.com/heinemml "4 total commits to the home-assistant organization, 2 commits to home-assistant, 2 commits to home-assistant.github.io") +- [Michael Kutý (@michaelkuty)](https://github.com/michaelkuty "3 total commits to the home-assistant organization, 3 commits to home-assistant") - [Michael Luggen (@l00mi)](https://github.com/l00mi "4 total commits to the home-assistant organization, 4 commits to home-assistant.github.io") -- [Michael Prokop (@mika)](https://github.com/mika "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Michael Requeny (@requenym)](https://github.com/requenym "14 total commits to the home-assistant organization, 14 commits to home-assistant.github.io") - [Michael Shim (@shimeez)](https://github.com/shimeez "1 total commits to the home-assistant organization, 1 commit to fabric-home-assistant") -- [Michaël Arnauts (@michaelarnauts)](https://github.com/michaelarnauts "61 total commits to the home-assistant organization, 31 commits to home-assistant, 26 commits to home-assistant.github.io, 3 commits to home-assistant-polymer, 1 commit to netdisco") +- [Michaël Arnauts (@michaelarnauts)](https://github.com/michaelarnauts "65 total commits to the home-assistant organization, 34 commits to home-assistant, 27 commits to home-assistant.github.io, 3 commits to home-assistant-polymer, 1 commit to netdisco") - [Michel Settembrino (@Michel-Settembrino)](https://github.com/Michel-Settembrino "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [micw (@micw)](https://github.com/micw "8 total commits to the home-assistant organization, 5 commits to home-assistant, 3 commits to home-assistant.github.io") -- [Miha Lunar (@SmilyOrg)](https://github.com/SmilyOrg "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") -- [Mikael Bergemalm (@bergemalm)](https://github.com/bergemalm "2 total commits to the home-assistant organization, 2 commits to home-assistant") -- [Mikayla Hutchinson (@mhutch)](https://github.com/mhutch "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") +- [Mike (@mradziwo)](https://github.com/mradziwo "1 total commits to the home-assistant organization, 1 commit to appdaemon") - [Mike Christianson (@MikeChristianson)](https://github.com/MikeChristianson "6 total commits to the home-assistant organization, 6 commits to home-assistant") -- [Mike G Chambers (@mikegchambers)](https://github.com/mikegchambers "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") -- [Mike Megally (@cmsimike)](https://github.com/cmsimike "6 total commits to the home-assistant organization, 4 commits to home-assistant, 2 commits to home-assistant.github.io") +- [Mike Megally (@cmsimike)](https://github.com/cmsimike "14 total commits to the home-assistant organization, 9 commits to home-assistant, 5 commits to home-assistant.github.io") - [Mike Nestor (@mnestor)](https://github.com/mnestor "6 total commits to the home-assistant organization, 5 commits to home-assistant, 1 commit to home-assistant-polymer") -- [Mike Roberts (@m-roberts)](https://github.com/m-roberts "1 total commits to the home-assistant organization, 1 commit to pi-gen") -- [mikey (@pfista)](https://github.com/pfista "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") +- [Mike O'Driscoll (@mikeodr)](https://github.com/mikeodr "8 total commits to the home-assistant organization, 5 commits to home-assistant.github.io, 3 commits to home-assistant") - [Mikkel Høgh (@mikl)](https://github.com/mikl "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") -- [Milan V. (@milanvo)](https://github.com/milanvo "17 total commits to the home-assistant organization, 9 commits to home-assistant, 7 commits to home-assistant.github.io, 1 commit to home-assistant-polymer") -- [MinchinWeb (@MinchinWeb)](https://github.com/MinchinWeb "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") +- [Milan V\. (@milanvo)](https://github.com/milanvo "18 total commits to the home-assistant organization, 10 commits to home-assistant, 7 commits to home-assistant.github.io, 1 commit to home-assistant-polymer") - [miniconfig (@miniconfig)](https://github.com/miniconfig "27 total commits to the home-assistant organization, 20 commits to home-assistant, 7 commits to home-assistant.github.io") - [Minims (@Minims)](https://github.com/Minims "3 total commits to the home-assistant organization, 3 commits to homebridge-homeassistant") -- [Mister Wil (@MisterWil)](https://github.com/MisterWil "17 total commits to the home-assistant organization, 11 commits to home-assistant, 6 commits to home-assistant.github.io") -- [Mitchell Cash (@mitchellcash)](https://github.com/mitchellcash "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") +- [Mister Wil (@MisterWil)](https://github.com/MisterWil "20 total commits to the home-assistant organization, 14 commits to home-assistant, 6 commits to home-assistant.github.io") - [Mitesh Patel (@gurumitts)](https://github.com/gurumitts "9 total commits to the home-assistant organization, 5 commits to home-assistant, 4 commits to home-assistant.github.io") -- [Mitko Masarliev (@masarliev)](https://github.com/masarliev "3 total commits to the home-assistant organization, 3 commits to home-assistant") -- [mje-nz (@mje-nz)](https://github.com/mje-nz "2 total commits to the home-assistant organization, 2 commits to home-assistant") -- [mjj4791 (@mjj4791)](https://github.com/mjj4791 "22 total commits to the home-assistant organization, 15 commits to home-assistant.github.io, 7 commits to home-assistant") +- [Mitko Masarliev (@masarliev)](https://github.com/masarliev "12 total commits to the home-assistant organization, 8 commits to home-assistant, 4 commits to home-assistant.github.io") +- [mjj4791 (@mjj4791)](https://github.com/mjj4791 "23 total commits to the home-assistant organization, 15 commits to home-assistant.github.io, 8 commits to home-assistant") +- [mmmmmtasty (@mmmmmtasty)](https://github.com/mmmmmtasty "8 total commits to the home-assistant organization, 8 commits to appdaemon") +- [mojotaker (@mojotaker)](https://github.com/mojotaker "1 total commits to the home-assistant organization, 1 commit to developers.home-assistant") - [Molodax (@Molodax)](https://github.com/Molodax "7 total commits to the home-assistant organization, 7 commits to home-assistant.github.io") -- [Moon Shot (@moonshot)](https://github.com/moonshot "2 total commits to the home-assistant organization, 2 commits to home-assistant") -- [moose51789 (@moose51789)](https://github.com/moose51789 "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") - [moskovskiy82 (@moskovskiy82)](https://github.com/moskovskiy82 "6 total commits to the home-assistant organization, 6 commits to home-assistant.github.io") - [motir (@motir)](https://github.com/motir "1 total commits to the home-assistant organization, 1 commit to appdaemon") -- [mtl010957 (@mtl010957)](https://github.com/mtl010957 "2 total commits to the home-assistant organization, 2 commits to home-assistant") +- [mountainsandcode (@mountainsandcode)](https://github.com/mountainsandcode "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") +- [mueslo (@mueslo)](https://github.com/mueslo "5 total commits to the home-assistant organization, 5 commits to home-assistant.github.io") +- [mukundv (@mukundv)](https://github.com/mukundv "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [Mārtiņš Grunskis (@grunskis)](https://github.com/grunskis "1 total commits to the home-assistant organization, 1 commit to netdisco") -- [Naren Salem (@naren8642)](https://github.com/naren8642 "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") -- [Nate (@BillyNate)](https://github.com/BillyNate "2 total commits to the home-assistant organization, 2 commits to home-assistant") +- [Nash Kaminski (@nkaminski)](https://github.com/nkaminski "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") - [Nathan Flynn (@eperdeme)](https://github.com/eperdeme "1 total commits to the home-assistant organization, 1 commit to hassio-addons") -- [Nathan Henrie (@n8henrie)](https://github.com/n8henrie "19 total commits to the home-assistant organization, 9 commits to home-assistant, 6 commits to home-assistant.github.io, 2 commits to homebridge-homeassistant, 1 commit to appdaemon, 1 commit to home-assistant-polymer") -- [Neil Lathwood (@laf)](https://github.com/laf "5 total commits to the home-assistant organization, 3 commits to home-assistant.github.io, 2 commits to home-assistant") +- [Nathan Henrie (@n8henrie)](https://github.com/n8henrie "21 total commits to the home-assistant organization, 10 commits to home-assistant, 7 commits to home-assistant.github.io, 2 commits to homebridge-homeassistant, 1 commit to appdaemon, 1 commit to home-assistant-polymer") +- [Neil Lathwood (@laf)](https://github.com/laf "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [Nelis Willers (@NelisW)](https://github.com/NelisW "1 total commits to the home-assistant organization, 1 commit to fabric-home-assistant") -- [NeLLyMerC (@NeLLyMerC)](https://github.com/NeLLyMerC "4 total commits to the home-assistant organization, 4 commits to home-assistant.github.io") -- [Nemanja Stefanovic (@nemik)](https://github.com/nemik "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") +- [NeLLyMerC (@NeLLyMerC)](https://github.com/NeLLyMerC "5 total commits to the home-assistant organization, 5 commits to home-assistant.github.io") - [neonbunny (@neonbunny)](https://github.com/neonbunny "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") -- [Nicholas Amadori (@namadori)](https://github.com/namadori "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") +- [Nicholas Amadori (@namadori)](https://github.com/namadori "4 total commits to the home-assistant organization, 4 commits to home-assistant.github.io") - [Nicholas Griffin (@nicholasgriffintn)](https://github.com/nicholasgriffintn "6 total commits to the home-assistant organization, 6 commits to home-assistant.github.io") -- [Nicholas Sielicki (@sielicki)](https://github.com/sielicki "4 total commits to the home-assistant organization, 2 commits to home-assistant, 2 commits to home-assistant.github.io") -- [Nick (@quadportnick)](https://github.com/quadportnick "4 total commits to the home-assistant organization, 2 commits to home-assistant, 2 commits to home-assistant.github.io") -- [Nick Waring (@nickwaring)](https://github.com/nickwaring "4 total commits to the home-assistant organization, 2 commits to home-assistant, 2 commits to home-assistant.github.io") -- [Nicolae Vlădescu (@nicolaevladescu)](https://github.com/nicolaevladescu "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") +- [Nick Touran (@partofthething)](https://github.com/partofthething "38 total commits to the home-assistant organization, 25 commits to home-assistant, 13 commits to home-assistant.github.io") +- [Nick Whyte (@nickw444)](https://github.com/nickw444 "3 total commits to the home-assistant organization, 3 commits to home-assistant") +- [Nicko van Someren (@nickovs)](https://github.com/nickovs "3 total commits to the home-assistant organization, 3 commits to home-assistant") - [Nicolas Graziano (@ngraziano)](https://github.com/ngraziano "3 total commits to the home-assistant organization, 3 commits to home-assistant") - [Nicolas Martignoni (@martignoni)](https://github.com/martignoni "1 total commits to the home-assistant organization, 1 commit to pi-gen") -- [Niklas (@niklaswa)](https://github.com/niklaswa "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") -- [Niklas Morberg (@morberg)](https://github.com/morberg "2 total commits to the home-assistant organization, 2 commits to home-assistant") -- [Nikolas Beutler (@biacz)](https://github.com/biacz "4 total commits to the home-assistant organization, 2 commits to home-assistant, 2 commits to home-assistant.github.io") -- [Nils Uliczka (@darookee)](https://github.com/darookee "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") -- [NMA (@nma83)](https://github.com/nma83 "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") -- [nodomain (@nodomain)](https://github.com/nodomain "9 total commits to the home-assistant organization, 7 commits to home-assistant.github.io, 2 commits to homebridge-homeassistant") -- [Nolan Gilley (@nkgilley)](https://github.com/nkgilley "116 total commits to the home-assistant organization, 91 commits to home-assistant, 25 commits to home-assistant.github.io") +- [nielstron (@nielstron)](https://github.com/nielstron "2 total commits to the home-assistant organization, 2 commits to netdisco") +- [Nigel Rook (@NigelRook)](https://github.com/NigelRook "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") +- [Niklas (@niklaswa)](https://github.com/niklaswa "4 total commits to the home-assistant organization, 4 commits to home-assistant.github.io") +- [Niklas Wagner (@Skaronator)](https://github.com/Skaronator "9 total commits to the home-assistant organization, 9 commits to home-assistant.github.io") +- [Nolan Gilley (@nkgilley)](https://github.com/nkgilley "123 total commits to the home-assistant organization, 95 commits to home-assistant, 28 commits to home-assistant.github.io") +- [nordlead2005 (@nordlead2005)](https://github.com/nordlead2005 "7 total commits to the home-assistant organization, 4 commits to home-assistant.github.io, 3 commits to home-assistant") - [NotoriousBDG (@notoriousbdg)](https://github.com/notoriousbdg "3 total commits to the home-assistant organization, 3 commits to hassio-addons") -- [NovapaX (@NovapaX)](https://github.com/NovapaX "7 total commits to the home-assistant organization, 4 commits to home-assistant, 2 commits to home-assistant-polymer, 1 commit to home-assistant-assets") +- [NovapaX (@NovapaX)](https://github.com/NovapaX "59 total commits to the home-assistant organization, 50 commits to home-assistant-polymer, 8 commits to home-assistant, 1 commit to home-assistant-assets") - [ntalekt (@ntalekt)](https://github.com/ntalekt "6 total commits to the home-assistant organization, 6 commits to home-assistant.github.io") -- [Nuno Sousa (@nunofgs)](https://github.com/nunofgs "7 total commits to the home-assistant organization, 4 commits to home-assistant, 2 commits to home-assistant.github.io, 1 commit to homebridge-homeassistant") +- [Nuno Sousa (@nunofgs)](https://github.com/nunofgs "5 total commits to the home-assistant organization, 4 commits to home-assistant, 1 commit to homebridge-homeassistant") - [obgm (@obgm)](https://github.com/obgm "480 total commits to the home-assistant organization, 480 commits to libcoap") -- [Olav Alexander Mjelde (@olavxxx)](https://github.com/olavxxx "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") -- [OLD PROFILE! Go to /dennisreimann (@dbloete)](https://github.com/dbloete "5 total commits to the home-assistant organization, 5 commits to home-assistant.github.io") -- [Ole-Kenneth (@olekenneth)](https://github.com/olekenneth "1 total commits to the home-assistant organization, 1 commit to homebridge-homeassistant") -- [Oleksii Serdiuk (@leppa)](https://github.com/leppa "5 total commits to the home-assistant organization, 3 commits to home-assistant, 2 commits to home-assistant.github.io") +- [Ole\-Kenneth (@olekenneth)](https://github.com/olekenneth "1 total commits to the home-assistant organization, 1 commit to homebridge-homeassistant") +- [Oleksii Serdiuk (@leppa)](https://github.com/leppa "4 total commits to the home-assistant organization, 4 commits to home-assistant") - [Oliv3rDog (@Oliv3rDog)](https://github.com/Oliv3rDog "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") -- [Oliver (@scarface-4711)](https://github.com/scarface-4711 "23 total commits to the home-assistant organization, 13 commits to home-assistant, 9 commits to home-assistant.github.io, 1 commit to netdisco") +- [Oliver (@scarface-4711)](https://github.com/scarface-4711 "28 total commits to the home-assistant organization, 18 commits to home-assistant, 9 commits to home-assistant.github.io, 1 commit to netdisco") - [Oliver van Porten (@mcdeck)](https://github.com/mcdeck "10 total commits to the home-assistant organization, 10 commits to home-assistant") -- [Omar Usman (@omarusman)](https://github.com/omarusman "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [Open Home Automation (@open-homeautomation)](https://github.com/open-homeautomation "41 total commits to the home-assistant organization, 29 commits to home-assistant, 12 commits to home-assistant.github.io") -- [Otto Winter (@OttoWinter)](https://github.com/OttoWinter "2 total commits to the home-assistant organization, 2 commits to home-assistant") +- [Otto Winter (@OttoWinter)](https://github.com/OttoWinter "68 total commits to the home-assistant organization, 53 commits to home-assistant, 12 commits to home-assistant.github.io, 3 commits to home-assistant-polymer") - [oznu (@oznu)](https://github.com/oznu "1 total commits to the home-assistant organization, 1 commit to homebridge-homeassistant") -- [Parker Moore (@parkr)](https://github.com/parkr "62 total commits to the home-assistant organization, 62 commits to home-assistant.github.io") +- [Parker Moore (@parkr)](https://github.com/parkr "60 total commits to the home-assistant organization, 60 commits to home-assistant.github.io") - [pascal (@passie)](https://github.com/passie "4 total commits to the home-assistant organization, 3 commits to home-assistant, 1 commit to home-assistant-polymer") - [Pascal Bach (@bachp)](https://github.com/bachp "10 total commits to the home-assistant organization, 9 commits to home-assistant, 1 commit to netdisco") -- [Pascal Vizeli (@pvizeli)](https://github.com/pvizeli "2199 total commits to the home-assistant organization, 859 commits to hassio, 426 commits to home-assistant, 306 commits to hassio-build, 300 commits to hassio-addons, 290 commits to home-assistant.github.io, 16 commits to hassio-addons-example, 1 commit to netdisco, 1 commit to home-assistant-js-websocket") -- [patkap (@patkap)](https://github.com/patkap "2 total commits to the home-assistant organization, 2 commits to home-assistant") +- [Pascal Vizeli (@pvizeli)](https://github.com/pvizeli "3313 total commits to the home-assistant organization, 1210 commits to hassio, 517 commits to hassos, 463 commits to home-assistant, 418 commits to hassio-build, 353 commits to hassio-addons, 318 commits to home-assistant.github.io, 16 commits to hassio-addons-example, 11 commits to hassio-cli, 4 commits to developers.home-assistant, 1 commit to netdisco, 1 commit to home-assistant-polymer, 1 commit to home-assistant-js-websocket") +- [Pat Thoyts (@patthoyts)](https://github.com/patthoyts "2 total commits to the home-assistant organization, 2 commits to netdisco") - [Patrick Aikens (@duckpuppy)](https://github.com/duckpuppy "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [Patrick Easters (@patrickeasters)](https://github.com/patrickeasters "5 total commits to the home-assistant organization, 5 commits to home-assistant.github.io") -- [Patrick White (@pw)](https://github.com/pw "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [Patrik (@ggravlingen)](https://github.com/ggravlingen "8 total commits to the home-assistant organization, 5 commits to home-assistant, 3 commits to home-assistant.github.io") -- [Patrik Hermansson (@bphermansson)](https://github.com/bphermansson "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") -- [Paul Jimenez (@pjz)](https://github.com/pjz "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") +- [Paul Annekov (@PaulAnnekov)](https://github.com/PaulAnnekov "4 total commits to the home-assistant organization, 4 commits to home-assistant") +- [Paul Hendry (@pshendry)](https://github.com/pshendry "1 total commits to the home-assistant organization, 1 commit to warrant") +- [Paul Jimenez (@pjz)](https://github.com/pjz "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") +- [Paul Nicholls (@pauln)](https://github.com/pauln "2 total commits to the home-assistant organization, 2 commits to netdisco") - [Paul Sokolovsky (@pfalcon)](https://github.com/pfalcon "6 total commits to the home-assistant organization, 3 commits to netdisco, 3 commits to home-assistant") - [Pavel Ponomarev (@awsum)](https://github.com/awsum "2 total commits to the home-assistant organization, 2 commits to home-assistant-polymer") - [PawelWMS (@PawelWMS)](https://github.com/PawelWMS "12 total commits to the home-assistant organization, 12 commits to libcoap") - [Pedro Navarro (@pedronavf)](https://github.com/pedronavf "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [Pedro Pombeiro (@PombeirP)](https://github.com/PombeirP "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") -- [Per Osbäck (@perosb)](https://github.com/perosb "12 total commits to the home-assistant organization, 10 commits to home-assistant, 2 commits to home-assistant.github.io") +- [Per Osbäck (@perosb)](https://github.com/perosb "19 total commits to the home-assistant organization, 19 commits to home-assistant") - [Per Sandström (@persandstrom)](https://github.com/persandstrom "124 total commits to the home-assistant organization, 98 commits to home-assistant, 14 commits to home-assistant.github.io, 12 commits to home-assistant-polymer") -- [Petar Petrov (@MindFreeze)](https://github.com/MindFreeze "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [Pete Peterson (@petey)](https://github.com/petey "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") -- [PeteBa (@PeteBa)](https://github.com/PeteBa "8 total commits to the home-assistant organization, 5 commits to home-assistant, 2 commits to home-assistant.github.io, 1 commit to home-assistant-polymer") +- [PeteBa (@PeteBa)](https://github.com/PeteBa "9 total commits to the home-assistant organization, 5 commits to home-assistant, 4 commits to home-assistant-polymer") - [Peter Epley (@epleypa)](https://github.com/epleypa "6 total commits to the home-assistant organization, 6 commits to home-assistant.github.io") - [Petr Vraník (@konikvranik)](https://github.com/konikvranik "11 total commits to the home-assistant organization, 6 commits to home-assistant, 5 commits to home-assistant.github.io") - [pezinek (@pezinek)](https://github.com/pezinek "8 total commits to the home-assistant organization, 8 commits to home-assistant") - [Phil (@godloth)](https://github.com/godloth "10 total commits to the home-assistant organization, 10 commits to home-assistant.github.io") -- [Phil Cole (@filcole)](https://github.com/filcole "8 total commits to the home-assistant organization, 5 commits to home-assistant.github.io, 3 commits to home-assistant") -- [Phil Haack (@Haacked)](https://github.com/Haacked "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") +- [Phil Cole (@filcole)](https://github.com/filcole "9 total commits to the home-assistant organization, 6 commits to home-assistant.github.io, 3 commits to home-assistant") +- [Phil Elson (@pelson)](https://github.com/pelson "3 total commits to the home-assistant organization, 3 commits to home-assistant") +- [Phil Frost (@bitglue)](https://github.com/bitglue "8 total commits to the home-assistant organization, 8 commits to home-assistant") - [Phil Hawthorne (@philhawthorne)](https://github.com/philhawthorne "24 total commits to the home-assistant organization, 18 commits to home-assistant.github.io, 6 commits to home-assistant") -- [Phil Kates (@philk)](https://github.com/philk "3 total commits to the home-assistant organization, 3 commits to home-assistant") +- [Phil Kates (@philk)](https://github.com/philk "11 total commits to the home-assistant organization, 8 commits to home-assistant, 3 commits to home-assistant.github.io") - [Philip Hofstetter (@pilif)](https://github.com/pilif "6 total commits to the home-assistant organization, 6 commits to home-assistant.github.io") +- [Philip Howard (@Gadgetoid)](https://github.com/Gadgetoid "1 total commits to the home-assistant organization, 1 commit to pi-gen") +- [Philip Kleimeyer (@philklei)](https://github.com/philklei "4 total commits to the home-assistant organization, 4 commits to home-assistant") - [Philip Lundrigan (@philipbl)](https://github.com/philipbl "65 total commits to the home-assistant organization, 56 commits to home-assistant, 9 commits to home-assistant.github.io") -- [Philipp Schmitt (@pschmitt)](https://github.com/pschmitt "36 total commits to the home-assistant organization, 23 commits to home-assistant, 11 commits to home-assistant.github.io, 1 commit to hassio-build, 1 commit to appdaemon") +- [Philip Rosenberg\-Watt (@PhilRW)](https://github.com/PhilRW "15 total commits to the home-assistant organization, 11 commits to home-assistant, 4 commits to home-assistant.github.io") +- [Philipp Hellmich (@runningman84)](https://github.com/runningman84 "4 total commits to the home-assistant organization, 4 commits to home-assistant.github.io") +- [Philipp Schmitt (@pschmitt)](https://github.com/pschmitt "39 total commits to the home-assistant organization, 26 commits to home-assistant, 11 commits to home-assistant.github.io, 1 commit to hassio-build, 1 commit to appdaemon") - [Phill Price (@phillprice)](https://github.com/phillprice "11 total commits to the home-assistant organization, 11 commits to home-assistant.github.io") -- [PhracturedBlue (@PhracturedBlue)](https://github.com/PhracturedBlue "15 total commits to the home-assistant organization, 7 commits to home-assistant, 7 commits to home-assistant.github.io, 1 commit to home-assistant-polymer") -- [Pierre Ståhl (@postlund)](https://github.com/postlund "44 total commits to the home-assistant organization, 29 commits to home-assistant, 9 commits to home-assistant.github.io, 4 commits to netdisco, 2 commits to home-assistant-polymer") -- [Piratonym (@Piratonym)](https://github.com/Piratonym "2 total commits to the home-assistant organization, 2 commits to home-assistant") +- [PhracturedBlue (@PhracturedBlue)](https://github.com/PhracturedBlue "33 total commits to the home-assistant organization, 20 commits to home-assistant, 12 commits to home-assistant.github.io, 1 commit to home-assistant-polymer") +- [PhyberApex (@PhyberApex)](https://github.com/PhyberApex "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") +- [Pierre Ståhl (@postlund)](https://github.com/postlund "50 total commits to the home-assistant organization, 33 commits to home-assistant, 11 commits to home-assistant.github.io, 4 commits to netdisco, 2 commits to home-assistant-polymer") +- [pkonnekermetametrics (@pkonnekermetametrics)](https://github.com/pkonnekermetametrics "5 total commits to the home-assistant organization, 5 commits to warrant") - [PuckStar (@PuckStar)](https://github.com/PuckStar "7 total commits to the home-assistant organization, 7 commits to home-assistant.github.io") -- [R Huish (@Genestealer)](https://github.com/Genestealer "20 total commits to the home-assistant organization, 20 commits to home-assistant.github.io") -- [rbflurry (@rbflurry)](https://github.com/rbflurry "14 total commits to the home-assistant organization, 11 commits to home-assistant.github.io, 3 commits to home-assistant") -- [Reed Riley (@reedriley)](https://github.com/reedriley "2 total commits to the home-assistant organization, 2 commits to home-assistant") -- [Rendili (@Rendili)](https://github.com/Rendili "2 total commits to the home-assistant organization, 2 commits to home-assistant") -- [Rene Tode (@ReneTode)](https://github.com/ReneTode "25 total commits to the home-assistant organization, 25 commits to appdaemon") -- [René Kliment (@renekliment)](https://github.com/renekliment "2 total commits to the home-assistant organization, 2 commits to home-assistant") -- [Rev Michael Greb (@mikegrb)](https://github.com/mikegrb "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") +- [R Huish (@Genestealer)](https://github.com/Genestealer "23 total commits to the home-assistant organization, 23 commits to home-assistant.github.io") +- [Raiford (@raiford)](https://github.com/raiford "1 total commits to the home-assistant organization, 1 commit to hassio-addons") +- [rbflurry (@rbflurry)](https://github.com/rbflurry "16 total commits to the home-assistant organization, 13 commits to home-assistant.github.io, 3 commits to home-assistant") +- [Reed Riley (@reedriley)](https://github.com/reedriley "3 total commits to the home-assistant organization, 3 commits to home-assistant") +- [Rendili (@Rendili)](https://github.com/Rendili "3 total commits to the home-assistant organization, 3 commits to home-assistant") +- [Rene Nulsch (@ReneNulschDE)](https://github.com/ReneNulschDE "21 total commits to the home-assistant organization, 14 commits to home-assistant, 7 commits to home-assistant.github.io") +- [Rene Tode (@ReneTode)](https://github.com/ReneTode "38 total commits to the home-assistant organization, 38 commits to appdaemon") - [Reza Moallemi (@moallemi)](https://github.com/moallemi "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") - [rhooper (@rhooper)](https://github.com/rhooper "27 total commits to the home-assistant organization, 25 commits to home-assistant, 2 commits to hadashboard") - [Riccardo Canta (@commento)](https://github.com/commento "3 total commits to the home-assistant organization, 3 commits to home-assistant") - [Richard Arends (@Mosibi)](https://github.com/Mosibi "8 total commits to the home-assistant organization, 8 commits to home-assistant") - [Richard Cox (@Khabi)](https://github.com/Khabi "15 total commits to the home-assistant organization, 9 commits to home-assistant, 6 commits to home-assistant.github.io") -- [Richard Leurs (@R1chardTM)](https://github.com/R1chardTM "14 total commits to the home-assistant organization, 7 commits to home-assistant, 6 commits to home-assistant.github.io, 1 commit to home-assistant-polymer") +- [Richard Leurs (@R1chardTM)](https://github.com/R1chardTM "13 total commits to the home-assistant organization, 6 commits to home-assistant.github.io, 6 commits to home-assistant, 1 commit to home-assistant-polymer") +- [Richard Lucas (@lucasweb78)](https://github.com/lucasweb78 "9 total commits to the home-assistant organization, 9 commits to home-assistant") +- [Richard Niemand (@rniemand)](https://github.com/rniemand "1 total commits to the home-assistant organization, 1 commit to example-custom-config") +- [Rick (@rcuddy)](https://github.com/rcuddy "1 total commits to the home-assistant organization, 1 commit to pi-gen") - [rkabadi (@rkabadi)](https://github.com/rkabadi "17 total commits to the home-assistant organization, 17 commits to home-assistant") - [Rob Capellini (@capellini)](https://github.com/capellini "3 total commits to the home-assistant organization, 3 commits to home-assistant") +- [Rob Cranfill (@RobCranfill)](https://github.com/RobCranfill "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [Rob Slifka (@rslifka)](https://github.com/rslifka "5 total commits to the home-assistant organization, 5 commits to home-assistant.github.io") -- [Robbie Trencheny (@robbiet480)](https://github.com/robbiet480 "1315 total commits to the home-assistant organization, 646 commits to home-assistant-iOS, 259 commits to home-assistant, 248 commits to home-assistant.github.io, 91 commits to homebridge-homeassistant, 15 commits to home-assistant-polymer, 9 commits to hubot-home-assistant, 8 commits to Analytics-Receiver, 6 commits to netdisco, 3 commits to home-assistant-js, 3 commits to scenegen, 3 commits to appdaemon, 3 commits to hadashboard, 3 commits to hassbot, 3 commits to home-assistant-js-websocket, 3 commits to organization, 2 commits to LabelBot, 2 commits to lambda-home-assistant-github, 2 commits to fabric-home-assistant, 2 commits to home-assistant-assets, 2 commits to micropython-home-assistant, 2 commits to home-assistant-notebooks") -- [Robby Grossman (@freerobby)](https://github.com/freerobby "2 total commits to the home-assistant organization, 2 commits to home-assistant") -- [Robin (@robmarkcole)](https://github.com/robmarkcole "15 total commits to the home-assistant organization, 9 commits to home-assistant.github.io, 6 commits to home-assistant") +- [Robbie Trencheny (@robbiet480)](https://github.com/robbiet480 "1317 total commits to the home-assistant organization, 646 commits to home-assistant-iOS, 259 commits to home-assistant, 249 commits to home-assistant.github.io, 92 commits to homebridge-homeassistant, 15 commits to home-assistant-polymer, 9 commits to hubot-home-assistant, 8 commits to Analytics-Receiver, 6 commits to netdisco, 3 commits to home-assistant-js-websocket, 3 commits to home-assistant-js, 3 commits to scenegen, 3 commits to hassbot, 3 commits to hadashboard, 3 commits to appdaemon, 3 commits to organization, 2 commits to fabric-home-assistant, 2 commits to LabelBot, 2 commits to home-assistant-notebooks, 2 commits to lambda-home-assistant-github, 2 commits to micropython-home-assistant, 2 commits to home-assistant-assets") +- [Robert (@metbril)](https://github.com/metbril "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") +- [Robert Accettura (@raccettura)](https://github.com/raccettura "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") +- [Robert Schütz (@dotlambda)](https://github.com/dotlambda "2 total commits to the home-assistant organization, 1 commit to netdisco, 1 commit to appdaemon") +- [Robert Svensson (@Kane610)](https://github.com/Kane610 "45 total commits to the home-assistant organization, 28 commits to home-assistant, 15 commits to home-assistant.github.io, 1 commit to netdisco, 1 commit to home-assistant-polymer") +- [Robin (@robmarkcole)](https://github.com/robmarkcole "47 total commits to the home-assistant organization, 30 commits to home-assistant.github.io, 16 commits to home-assistant, 1 commit to home-assistant-assets") - [Robin Laurén (@llauren)](https://github.com/llauren "1 total commits to the home-assistant organization, 1 commit to appdaemon") - [Roddie Hasan (@eiddor)](https://github.com/eiddor "6 total commits to the home-assistant organization, 6 commits to home-assistant.github.io") - [Roi Dayan (@roidayan)](https://github.com/roidayan "6 total commits to the home-assistant organization, 6 commits to home-assistant") - [roiff (@roiff)](https://github.com/roiff "1 total commits to the home-assistant organization, 1 commit to homebridge-homeassistant") -- [Ron Klinkien (@cyberjunky)](https://github.com/cyberjunky "5 total commits to the home-assistant organization, 3 commits to home-assistant.github.io, 2 commits to home-assistant") +- [Ron Klinkien (@cyberjunky)](https://github.com/cyberjunky "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") +- [Ron Miller (@brainyron)](https://github.com/brainyron "1 total commits to the home-assistant organization, 1 commit to hassio-addons") - [roqeer (@roqeer)](https://github.com/roqeer "3 total commits to the home-assistant organization, 3 commits to home-assistant") - [Ross Schulman (@rschulman)](https://github.com/rschulman "1 total commits to the home-assistant organization, 1 commit to pi-gen") - [rpitera (@rpitera)](https://github.com/rpitera "5 total commits to the home-assistant organization, 5 commits to home-assistant.github.io") +- [Rubens Panfili (@rpanfili)](https://github.com/rpanfili "1 total commits to the home-assistant organization, 1 commit to hassio-addons") - [rubund (@rubund)](https://github.com/rubund "4 total commits to the home-assistant organization, 4 commits to home-assistant") -- [runningman84 (@runningman84)](https://github.com/runningman84 "4 total commits to the home-assistant organization, 4 commits to home-assistant.github.io") -- [Ruslan Kiianchuk (@zoresvit)](https://github.com/zoresvit "1 total commits to the home-assistant organization, 1 commit to pi-gen") -- [Russell Cloran (@rcloran)](https://github.com/rcloran "19 total commits to the home-assistant organization, 15 commits to home-assistant, 4 commits to homebridge-homeassistant") +- [Ruslan Kiyanchuk (@zoresvit)](https://github.com/zoresvit "1 total commits to the home-assistant organization, 1 commit to pi-gen") +- [Russ K (@rkubes)](https://github.com/rkubes "2 total commits to the home-assistant organization, 2 commits to pi-gen") +- [Russell Cloran (@rcloran)](https://github.com/rcloran "36 total commits to the home-assistant organization, 32 commits to home-assistant, 4 commits to homebridge-homeassistant") - [Ryan Bahm (@rdbahm)](https://github.com/rdbahm "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") -- [Ryan Borstelmann (@SlothCroissant)](https://github.com/SlothCroissant "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [Ryan Daigle (@rwdaigle)](https://github.com/rwdaigle "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") +- [Ryan Jarvis (@Cabalist)](https://github.com/Cabalist "1 total commits to the home-assistant organization, 1 commit to hassbian-scripts") - [Ryan Kraus (@rmkraus)](https://github.com/rmkraus "193 total commits to the home-assistant organization, 163 commits to home-assistant, 15 commits to home-assistant.github.io, 14 commits to home-assistant-polymer, 1 commit to home-assistant-notebooks") -- [Ryan McLean (@ryanm101)](https://github.com/ryanm101 "7 total commits to the home-assistant organization, 4 commits to home-assistant.github.io, 3 commits to home-assistant") +- [Ryan McLean (@ryanm101)](https://github.com/ryanm101 "96 total commits to the home-assistant organization, 74 commits to hassio-cli, 16 commits to home-assistant, 6 commits to home-assistant.github.io") - [Ryan Turner (@turnrye)](https://github.com/turnrye "6 total commits to the home-assistant organization, 6 commits to home-assistant") - [Sabesto (@Sabesto)](https://github.com/Sabesto "3 total commits to the home-assistant organization, 3 commits to home-assistant") -- [Sam Birch (@hotplot)](https://github.com/hotplot "2 total commits to the home-assistant organization, 2 commits to home-assistant") +- [Sacha Telgenhof (@stelgenhof)](https://github.com/stelgenhof "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [Sam Holmes (@sam3d)](https://github.com/sam3d "4 total commits to the home-assistant organization, 4 commits to pi-gen") - [sam-io (@sam-io)](https://github.com/sam-io "3 total commits to the home-assistant organization, 3 commits to home-assistant") -- [sander76 (@sander76)](https://github.com/sander76 "41 total commits to the home-assistant organization, 37 commits to home-assistant, 4 commits to home-assistant.github.io") -- [schneefux (@schneefux)](https://github.com/schneefux "2 total commits to the home-assistant organization, 2 commits to home-assistant") -- [Scott Bradshaw (@swbradshaw)](https://github.com/swbradshaw "2 total commits to the home-assistant organization, 2 commits to home-assistant") +- [sander76 (@sander76)](https://github.com/sander76 "42 total commits to the home-assistant organization, 38 commits to home-assistant, 4 commits to home-assistant.github.io") +- [Scott (@lostage)](https://github.com/lostage "1 total commits to the home-assistant organization, 1 commit to developers.home-assistant") +- [Scott Bradshaw (@swbradshaw)](https://github.com/swbradshaw "4 total commits to the home-assistant organization, 4 commits to home-assistant") - [Scott Griffin (@scottocs11)](https://github.com/scottocs11 "7 total commits to the home-assistant organization, 7 commits to home-assistant.github.io") - [Scott O'Neil (@americanwookie)](https://github.com/americanwookie "7 total commits to the home-assistant organization, 4 commits to home-assistant, 3 commits to home-assistant.github.io") - [Scott Reston (@ih8gates)](https://github.com/ih8gates "9 total commits to the home-assistant organization, 8 commits to home-assistant.github.io, 1 commit to home-assistant-polymer") -- [Sean Dague (@sdague)](https://github.com/sdague "64 total commits to the home-assistant organization, 44 commits to home-assistant, 11 commits to home-assistant.github.io, 5 commits to home-assistant-polymer, 3 commits to netdisco, 1 commit to home-assistant-js") +- [Sean Dague (@sdague)](https://github.com/sdague "76 total commits to the home-assistant organization, 53 commits to home-assistant, 14 commits to home-assistant.github.io, 5 commits to home-assistant-polymer, 3 commits to netdisco, 1 commit to home-assistant-js") - [Sean Gollschewsky (@gollo)](https://github.com/gollo "17 total commits to the home-assistant organization, 10 commits to home-assistant, 4 commits to home-assistant.github.io, 3 commits to hassio-build") -- [Sebastian (@sebk-666)](https://github.com/sebk-666 "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") +- [Sean Wilson (@swilson)](https://github.com/swilson "5 total commits to the home-assistant organization, 4 commits to home-assistant, 1 commit to home-assistant-polymer") +- [Sebastian (@sebk-666)](https://github.com/sebk-666 "6 total commits to the home-assistant organization, 5 commits to home-assistant.github.io, 1 commit to netdisco") - [Sebastian (@sgso)](https://github.com/sgso "3 total commits to the home-assistant organization, 3 commits to libcoap") -- [Sebastian Muszynski (@syssi)](https://github.com/syssi "42 total commits to the home-assistant organization, 21 commits to home-assistant, 19 commits to home-assistant.github.io, 2 commits to home-assistant-polymer") +- [Sebastian Muszynski (@syssi)](https://github.com/syssi "125 total commits to the home-assistant organization, 76 commits to home-assistant, 44 commits to home-assistant.github.io, 3 commits to netdisco, 2 commits to home-assistant-polymer") - [Sebastian von Minckwitz (@teodoc)](https://github.com/teodoc "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") - [Semir Patel (@analogue)](https://github.com/analogue "2 total commits to the home-assistant organization, 2 commits to appdaemon") -- [Sergey Isachenko (@zabuldon)](https://github.com/zabuldon "6 total commits to the home-assistant organization, 6 commits to home-assistant") +- [Sergey Isachenko (@zabuldon)](https://github.com/zabuldon "9 total commits to the home-assistant organization, 9 commits to home-assistant") +- [Sergey Vishnikin (@armicron)](https://github.com/armicron "33 total commits to the home-assistant organization, 33 commits to warrant") +- [Sergio Viudes (@sjvc)](https://github.com/sjvc "3 total commits to the home-assistant organization, 3 commits to home-assistant") - [sfam (@sfam)](https://github.com/sfam "65 total commits to the home-assistant organization, 58 commits to home-assistant, 5 commits to home-assistant.github.io, 1 commit to netdisco, 1 commit to home-assistant-polymer") -- [sharukins (@sharukins)](https://github.com/sharukins "2 total commits to the home-assistant organization, 2 commits to hassio-build") -- [Shiny (@Br3nda)](https://github.com/Br3nda "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") +- [sharukins (@sharukins)](https://github.com/sharukins "3 total commits to the home-assistant organization, 3 commits to hassio-build") - [siebert (@siebert)](https://github.com/siebert "3 total commits to the home-assistant organization, 3 commits to home-assistant") - [Simon (@echox)](https://github.com/echox "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") - [Simon Szustkowski (@simonszu)](https://github.com/simonszu "7 total commits to the home-assistant organization, 4 commits to home-assistant.github.io, 3 commits to home-assistant") - [Sjors Spoorendonk (@sjorsjes)](https://github.com/sjorsjes "4 total commits to the home-assistant organization, 4 commits to home-assistant.github.io") +- [sjoshi10 (@sjoshi10)](https://github.com/sjoshi10 "1 total commits to the home-assistant organization, 1 commit to warrant") - [snizzleorg (@snizzleorg)](https://github.com/snizzleorg "5 total commits to the home-assistant organization, 5 commits to hadashboard") -- [St. John Johnson (@stjohnjohnson)](https://github.com/stjohnjohnson "9 total commits to the home-assistant organization, 5 commits to home-assistant, 4 commits to home-assistant.github.io") +- [St\. John Johnson (@stjohnjohnson)](https://github.com/stjohnjohnson "9 total commits to the home-assistant organization, 5 commits to home-assistant, 4 commits to home-assistant.github.io") +- [starkillerOG (@starkillerOG)](https://github.com/starkillerOG "1 total commits to the home-assistant organization, 1 commit to developers.home-assistant") - [Stefan Jonasson (@stefan-jonasson)](https://github.com/stefan-jonasson "12 total commits to the home-assistant organization, 8 commits to home-assistant, 4 commits to home-assistant.github.io") - [Stefano Scipioni (@scipioni)](https://github.com/scipioni "3 total commits to the home-assistant organization, 3 commits to home-assistant") +- [Steltek (@Steltek)](https://github.com/Steltek "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") +- [stephanerosi (@stephanerosi)](https://github.com/stephanerosi "11 total commits to the home-assistant organization, 8 commits to home-assistant, 3 commits to home-assistant.github.io") - [Stephen Edgar (@ntwb)](https://github.com/ntwb "1 total commits to the home-assistant organization, 1 commit to fabric-home-assistant") -- [Stephen Hoekstra (@shoekstra)](https://github.com/shoekstra "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Stephen Yeargin (@stephenyeargin)](https://github.com/stephenyeargin "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") -- [Steven Looman (@StevenLooman)](https://github.com/StevenLooman "2 total commits to the home-assistant organization, 2 commits to home-assistant") +- [Steve Easley (@SteveEasley)](https://github.com/SteveEasley "3 total commits to the home-assistant organization, 3 commits to home-assistant") +- [Steven Looman (@StevenLooman)](https://github.com/StevenLooman "1 total commits to the home-assistant organization, 1 commit to netdisco") - [Stu Gott (@stu-gott)](https://github.com/stu-gott "9 total commits to the home-assistant organization, 5 commits to home-assistant.github.io, 4 commits to home-assistant") -- [Stuart Mumford (@Cadair)](https://github.com/Cadair "2 total commits to the home-assistant organization, 2 commits to home-assistant") +- [Stuart Williams (@stuwil)](https://github.com/stuwil "1 total commits to the home-assistant organization, 1 commit to netdisco") - [swanwila (@swanwila)](https://github.com/swanwila "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") - [System Tester (@systemtester)](https://github.com/systemtester "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") -- [Sytone (@sytone)](https://github.com/sytone "9 total commits to the home-assistant organization, 6 commits to home-assistant.github.io, 2 commits to home-assistant, 1 commit to hassio-build") -- [Sébastien RAMAGE (@doudz)](https://github.com/doudz "3 total commits to the home-assistant organization, 3 commits to home-assistant") +- [Sytone (@sytone)](https://github.com/sytone "7 total commits to the home-assistant organization, 6 commits to home-assistant.github.io, 1 commit to hassio-build") - [Sören Oldag (@soldag)](https://github.com/soldag "15 total commits to the home-assistant organization, 8 commits to home-assistant.github.io, 7 commits to home-assistant") +- [Tabakhase (@tabakhase)](https://github.com/tabakhase "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") +- [tadly (@tadly)](https://github.com/tadly "4 total commits to the home-assistant organization, 4 commits to home-assistant") +- [tango-foxtrot (@tango-foxtrot)](https://github.com/tango-foxtrot "1 total commits to the home-assistant organization, 1 commit to netdisco") - [Taylor Peet (@RePeet13)](https://github.com/RePeet13 "9 total commits to the home-assistant organization, 9 commits to home-assistant.github.io") - [Teagan Glenn (@Teagan42)](https://github.com/Teagan42 "59 total commits to the home-assistant organization, 49 commits to home-assistant, 9 commits to home-assistant.github.io, 1 commit to home-assistant-js") - [Ted Drain (@TD22057)](https://github.com/TD22057 "4 total commits to the home-assistant organization, 4 commits to home-assistant") - [tedstriker (@tedstriker)](https://github.com/tedstriker "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [Teemu Mikkonen (@T3m3z)](https://github.com/T3m3z "3 total commits to the home-assistant organization, 3 commits to home-assistant") -- [Teemu Patja (@tpatja)](https://github.com/tpatja "2 total commits to the home-assistant organization, 2 commits to home-assistant") -- [Teemu R. (@rytilahti)](https://github.com/rytilahti "43 total commits to the home-assistant organization, 34 commits to home-assistant, 7 commits to home-assistant.github.io, 2 commits to netdisco") +- [Teemu R\. (@rytilahti)](https://github.com/rytilahti "54 total commits to the home-assistant organization, 41 commits to home-assistant, 9 commits to home-assistant.github.io, 4 commits to netdisco") - [Teguh Sobirin (@tjstyle)](https://github.com/tjstyle "2 total commits to the home-assistant organization, 2 commits to pi-gen") - [Tentoe (@Tentoe)](https://github.com/Tentoe "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") - [Theb-1 (@Theb-1)](https://github.com/Theb-1 "5 total commits to the home-assistant organization, 5 commits to home-assistant") - [thecynic (@thecynic)](https://github.com/thecynic "4 total commits to the home-assistant organization, 4 commits to home-assistant") +- [TheFrogDaddy (@TheFrogDaddy)](https://github.com/TheFrogDaddy "1 total commits to the home-assistant organization, 1 commit to appdaemon") +- [thelittlefireman (@thelittlefireman)](https://github.com/thelittlefireman "3 total commits to the home-assistant organization, 3 commits to home-assistant") +- [themanieldaniel (@themanieldaniel)](https://github.com/themanieldaniel "8 total commits to the home-assistant organization, 8 commits to home-assistant.github.io") - [Theodor Lindquist (@theolind)](https://github.com/theolind "25 total commits to the home-assistant organization, 25 commits to home-assistant") -- [Thiago Oliveira (@chilicheech)](https://github.com/chilicheech "3 total commits to the home-assistant organization, 3 commits to home-assistant") -- [Thibault Cohen (@titilambert)](https://github.com/titilambert "38 total commits to the home-assistant organization, 25 commits to home-assistant, 13 commits to home-assistant.github.io") -- [Thibault Maekelbergh (@thibmaek)](https://github.com/thibmaek "1 total commits to the home-assistant organization, 1 commit to hassio-addons") +- [Thiago Oliveira (@chilicheech)](https://github.com/chilicheech "4 total commits to the home-assistant organization, 4 commits to home-assistant") +- [Thibault Cohen (@titilambert)](https://github.com/titilambert "50 total commits to the home-assistant organization, 37 commits to home-assistant, 13 commits to home-assistant.github.io") +- [Thibault Maekelbergh (@thibmaek)](https://github.com/thibmaek "4 total commits to the home-assistant organization, 3 commits to home-assistant.github.io, 1 commit to hassio-addons") +- [Thijs de Jong (@bakedraccoon)](https://github.com/bakedraccoon "21 total commits to the home-assistant organization, 16 commits to home-assistant, 5 commits to home-assistant.github.io") - [ThinkPadNL (@ThinkPadNL)](https://github.com/ThinkPadNL "4 total commits to the home-assistant organization, 4 commits to home-assistant.github.io") -- [Thom Troy (@ttroy50)](https://github.com/ttroy50 "10 total commits to the home-assistant organization, 7 commits to home-assistant.github.io, 3 commits to home-assistant") -- [Thomas Friedel (@tfriedel)](https://github.com/tfriedel "2 total commits to the home-assistant organization, 2 commits to home-assistant") +- [Thom Troy (@ttroy50)](https://github.com/ttroy50 "13 total commits to the home-assistant organization, 7 commits to home-assistant.github.io, 6 commits to home-assistant") - [Thomas Petazzoni (@tpetazzoni)](https://github.com/tpetazzoni "1 total commits to the home-assistant organization, 1 commit to libcoap") -- [Thomas Phillips (@thomas-teknique)](https://github.com/thomas-teknique "2 total commits to the home-assistant organization, 2 commits to pi-gen") +- [Thomas Phillips (@thomas-phillips-nz)](https://github.com/thomas-phillips-nz "2 total commits to the home-assistant organization, 2 commits to pi-gen") - [Thomas Purchas (@thomaspurchas)](https://github.com/thomaspurchas "1 total commits to the home-assistant organization, 1 commit to homebridge-homeassistant") - [Thomas Pötsch (@thp-comnets)](https://github.com/thp-comnets "7 total commits to the home-assistant organization, 7 commits to libcoap") -- [thrawnarn (@thrawnarn)](https://github.com/thrawnarn "1 total commits to the home-assistant organization, 1 commit to netdisco") -- [ThUnD3r|Gr33n (@thundergreen)](https://github.com/thundergreen "4 total commits to the home-assistant organization, 4 commits to home-assistant.github.io") +- [thrawnarn (@thrawnarn)](https://github.com/thrawnarn "9 total commits to the home-assistant organization, 5 commits to home-assistant, 3 commits to home-assistant.github.io, 1 commit to netdisco") +- [ThUnD3r\|Gr33n (@thundergreen)](https://github.com/thundergreen "4 total commits to the home-assistant organization, 4 commits to home-assistant.github.io") - [tijuca (@tijuca)](https://github.com/tijuca "106 total commits to the home-assistant organization, 106 commits to libcoap") -- [Tim Lyakhovetskiy (@tlyakhov)](https://github.com/tlyakhov "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Tim Wilbrink (@TWilb)](https://github.com/TWilb "15 total commits to the home-assistant organization, 15 commits to home-assistant-iOS") +- [Timo (@timotk)](https://github.com/timotk "1 total commits to the home-assistant organization, 1 commit to netdisco") - [timstanley1985 (@timstanley1985)](https://github.com/timstanley1985 "4 total commits to the home-assistant organization, 4 commits to home-assistant.github.io") +- [TJ Rana (@tjrana)](https://github.com/tjrana "1 total commits to the home-assistant organization, 1 commit to pi-gen") - [tleegaard (@tleegaard)](https://github.com/tleegaard "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") - [Tobie Booth (@tobiebooth)](https://github.com/tobiebooth "4 total commits to the home-assistant organization, 3 commits to home-assistant, 1 commit to home-assistant-polymer") -- [Toby Gray (@tobygray)](https://github.com/tobygray "3 total commits to the home-assistant organization, 3 commits to home-assistant") +- [Toby Gray (@tobygray)](https://github.com/tobygray "4 total commits to the home-assistant organization, 4 commits to home-assistant") +- [Tod Schmidt (@tschmidty69)](https://github.com/tschmidty69 "33 total commits to the home-assistant organization, 21 commits to home-assistant, 9 commits to home-assistant.github.io, 2 commits to hassio-addons, 1 commit to hassio") - [toddeye (@toddeye)](https://github.com/toddeye "20 total commits to the home-assistant organization, 20 commits to home-assistant") +- [Tom (@Qu3uk)](https://github.com/Qu3uk "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [Tom Dickman (@tdickman)](https://github.com/tdickman "3 total commits to the home-assistant organization, 3 commits to home-assistant") - [Tom Duijf (@tomduijf)](https://github.com/tomduijf "70 total commits to the home-assistant organization, 53 commits to home-assistant, 9 commits to home-assistant.github.io, 6 commits to home-assistant-polymer, 2 commits to netdisco") +- [Tom Harris (@teharris1)](https://github.com/teharris1 "10 total commits to the home-assistant organization, 7 commits to home-assistant, 3 commits to home-assistant.github.io") - [Tom Hoover (@tomhoover)](https://github.com/tomhoover "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [Tom Matheussen (@Tommatheussen)](https://github.com/Tommatheussen "13 total commits to the home-assistant organization, 6 commits to home-assistant, 4 commits to home-assistant-polymer, 3 commits to home-assistant.github.io") - [Tom Usher (@tomusher)](https://github.com/tomusher "1 total commits to the home-assistant organization, 1 commit to netdisco") @@ -813,50 +843,55 @@ This page contains a list of people who have contributed in one way or another t - [TopdRob (@TopdRob)](https://github.com/TopdRob "7 total commits to the home-assistant organization, 7 commits to home-assistant") - [Torkild Retvedt (@torkildr)](https://github.com/torkildr "2 total commits to the home-assistant organization, 2 commits to appdaemon") - [Toshik (@Toshik)](https://github.com/Toshik "1 total commits to the home-assistant organization, 1 commit to homebridge-homeassistant") +- [Touliloup (@RiRomain)](https://github.com/RiRomain "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [tradiuz (@tradiuz)](https://github.com/tradiuz "5 total commits to the home-assistant organization, 5 commits to home-assistant.github.io") +- [travislreno (@travislreno)](https://github.com/travislreno "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [trbs (@trbs)](https://github.com/trbs "1 total commits to the home-assistant organization, 1 commit to netdisco") - [Trevor (@tboyce021)](https://github.com/tboyce021 "15 total commits to the home-assistant organization, 10 commits to home-assistant, 5 commits to home-assistant.github.io") - [Trey Hunner (@treyhunner)](https://github.com/treyhunner "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") -- [Tristan Caulfield (@Bahnburner)](https://github.com/Bahnburner "1 total commits to the home-assistant organization, 1 commit to home-assistant") - [trollkarlen (@trollkarlen)](https://github.com/trollkarlen "5 total commits to the home-assistant organization, 5 commits to home-assistant") - [Tsvi Mostovicz (@tsvi)](https://github.com/tsvi "9 total commits to the home-assistant organization, 5 commits to home-assistant.github.io, 4 commits to home-assistant") -- [Tyler Page (@iamtpage)](https://github.com/iamtpage "2 total commits to the home-assistant organization, 2 commits to home-assistant") +- [Tyler Page (@iamtpage)](https://github.com/iamtpage "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [Tõnis Tobre (@tobre6)](https://github.com/tobre6 "1 total commits to the home-assistant organization, 1 commit to homebridge-homeassistant") +- [uchagani (@uchagani)](https://github.com/uchagani "8 total commits to the home-assistant organization, 7 commits to home-assistant, 1 commit to home-assistant-polymer") - [Uli (@uehler)](https://github.com/uehler "5 total commits to the home-assistant organization, 5 commits to home-assistant.github.io") - [UnrealKazu (@UnrealKazu)](https://github.com/UnrealKazu "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") - [upsert (@upsert)](https://github.com/upsert "1 total commits to the home-assistant organization, 1 commit to netdisco") - [User5981 (@User5981)](https://github.com/User5981 "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") - [Valentin Alexeev (@valentinalexeev)](https://github.com/valentinalexeev "11 total commits to the home-assistant organization, 8 commits to home-assistant, 3 commits to home-assistant.github.io") +- [Victor Cerutti (@victorcerutti)](https://github.com/victorcerutti "3 total commits to the home-assistant organization, 3 commits to home-assistant-polymer") - [Viet Dzung (@dzungpv)](https://github.com/dzungpv "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") - [Vignesh Venkat (@vickyg3)](https://github.com/vickyg3 "9 total commits to the home-assistant organization, 5 commits to home-assistant, 4 commits to home-assistant.github.io") +- [Ville Skyttä (@scop)](https://github.com/scop "47 total commits to the home-assistant organization, 26 commits to home-assistant, 10 commits to home-assistant.github.io, 4 commits to netdisco, 3 commits to hassio-addons, 2 commits to hassio-build, 2 commits to home-assistant-polymer") - [viswa-swami (@viswa-swami)](https://github.com/viswa-swami "9 total commits to the home-assistant organization, 9 commits to home-assistant") -- [Vlad Korniev (@vkorn)](https://github.com/vkorn "3 total commits to the home-assistant organization, 2 commits to home-assistant, 1 commit to hassio-build") +- [Vlad Korniev (@vkorn)](https://github.com/vkorn "1 total commits to the home-assistant organization, 1 commit to hassio-build") - [vllungu (@vllungu)](https://github.com/vllungu "3 total commits to the home-assistant organization, 3 commits to libcoap") - [vrs01 (@vrs01)](https://github.com/vrs01 "20 total commits to the home-assistant organization, 14 commits to home-assistant.github.io, 6 commits to appdaemon") - [Wagner Sartori Junior (@trunet)](https://github.com/trunet "1 total commits to the home-assistant organization, 1 commit to netdisco") +- [Wesley Young (@wesdyoung)](https://github.com/wesdyoung "1 total commits to the home-assistant organization, 1 commit to warrant") - [Wilco Land (@Wilco89)](https://github.com/Wilco89 "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [Will Heid (@bassclarinetl2)](https://github.com/bassclarinetl2 "20 total commits to the home-assistant organization, 19 commits to home-assistant.github.io, 1 commit to fabric-home-assistant") -- [Will W. (@tiktok7)](https://github.com/tiktok7 "4 total commits to the home-assistant organization, 4 commits to home-assistant") -- [Willems Davy (@joyrider3774)](https://github.com/joyrider3774 "7 total commits to the home-assistant organization, 4 commits to home-assistant.github.io, 3 commits to home-assistant") +- [Will W\. (@tiktok7)](https://github.com/tiktok7 "4 total commits to the home-assistant organization, 4 commits to home-assistant") +- [Willems Davy (@joyrider3774)](https://github.com/joyrider3774 "4 total commits to the home-assistant organization, 4 commits to home-assistant.github.io") - [William Johansson (@radhus)](https://github.com/radhus "1 total commits to the home-assistant organization, 1 commit to hassio") -- [William Scanlon (@w1ll1am23)](https://github.com/w1ll1am23 "102 total commits to the home-assistant organization, 68 commits to home-assistant, 32 commits to home-assistant.github.io, 2 commits to netdisco") +- [William Scanlon (@w1ll1am23)](https://github.com/w1ll1am23 "113 total commits to the home-assistant organization, 78 commits to home-assistant, 33 commits to home-assistant.github.io, 2 commits to netdisco") - [williamlehman (@williamlehman)](https://github.com/williamlehman "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") - [wind-rider (@wind-rider)](https://github.com/wind-rider "5 total commits to the home-assistant organization, 5 commits to home-assistant") - [wokar (@wokar)](https://github.com/wokar "12 total commits to the home-assistant organization, 8 commits to home-assistant, 4 commits to home-assistant.github.io") -- [Wolf-Bastian Pöttner (@BastianPoe)](https://github.com/BastianPoe "6 total commits to the home-assistant organization, 3 commits to home-assistant, 3 commits to home-assistant.github.io") -- [Wolfgang Malgadey (@wmalgadey)](https://github.com/wmalgadey "4 total commits to the home-assistant organization, 4 commits to home-assistant") -- [XECDesign (@XECDesign)](https://github.com/XECDesign "97 total commits to the home-assistant organization, 97 commits to pi-gen") +- [Wolf\-Bastian Pöttner (@BastianPoe)](https://github.com/BastianPoe "7 total commits to the home-assistant organization, 4 commits to home-assistant, 3 commits to home-assistant.github.io") +- [Wolfgang Malgadey (@wmalgadey)](https://github.com/wmalgadey "5 total commits to the home-assistant organization, 5 commits to home-assistant") +- [XECDesign (@XECDesign)](https://github.com/XECDesign "138 total commits to the home-assistant organization, 138 commits to pi-gen") - [Xorso (@Xorso)](https://github.com/Xorso "22 total commits to the home-assistant organization, 21 commits to home-assistant, 1 commit to hassio-addons") - [Yannick POLLART (@ypollart)](https://github.com/ypollart "8 total commits to the home-assistant organization, 4 commits to home-assistant, 4 commits to home-assistant.github.io") - [Yasin Soliman (@yasinS)](https://github.com/yasinS "4 total commits to the home-assistant organization, 4 commits to home-assistant.github.io") -- [Yum (@goofz)](https://github.com/goofz "2 total commits to the home-assistant organization, 2 commits to home-assistant") -- [Zac Hatfield Dodds (@Zac-HD)](https://github.com/Zac-HD "2 total commits to the home-assistant organization, 2 commits to home-assistant") +- [yingzong (@yingzong)](https://github.com/yingzong "1 total commits to the home-assistant organization, 1 commit to warrant") - [Zen Tormey (@xehn)](https://github.com/xehn "4 total commits to the home-assistant organization, 4 commits to home-assistant.github.io") - [Zhao Lu (@zlu)](https://github.com/zlu "4 total commits to the home-assistant organization, 4 commits to home-assistant.github.io") -- [ziotibia81 (@ziotibia81)](https://github.com/ziotibia81 "10 total commits to the home-assistant organization, 6 commits to home-assistant.github.io, 4 commits to home-assistant") -- [Åskar Andersson (@olskar)](https://github.com/olskar "5 total commits to the home-assistant organization, 4 commits to home-assistant.github.io, 1 commit to hassbian-scripts") +- [Zio Tibia (@ziotibia81)](https://github.com/ziotibia81 "12 total commits to the home-assistant organization, 7 commits to home-assistant.github.io, 5 commits to home-assistant") +- [Zorks (@Zorks)](https://github.com/Zorks "5 total commits to the home-assistant organization, 5 commits to home-assistant.github.io") +- [Åskar Andersson (@olskar)](https://github.com/olskar "10 total commits to the home-assistant organization, 6 commits to home-assistant.github.io, 3 commits to home-assistant, 1 commit to hassbian-scripts") This page is irregularly updated using the [`credits_generator` tool](https://github.com/home-assistant/home-assistant.github.io/tree/next/credits_generator). If you think that you are missing, please let us know. -This page was last updated Friday, November 24th 2017, 11:17:36 pm UTC. +This page was last updated Sunday, June 3rd 2018, 8:50:11 pm UTC. diff --git a/source/developers/development.markdown b/source/developers/development.markdown index f2f79b70c40..ea7c7bd480b 100644 --- a/source/developers/development.markdown +++ b/source/developers/development.markdown @@ -9,23 +9,6 @@ sharing: true footer: true --- -Home Assistant is built from the ground up to be easily extensible using components. Home Assistant uses [Python 3](https://www.python.org/) for the backend and [Polymer (Web components)](https://www.polymer-project.org/) for the frontend. - -Home Assistant is open-source and MIT-licensed. Here are links to the source: - - - [home-assistant](https://github.com/home-assistant/home-assistant): Python server backend. - - [home-assistant-polymer](https://github.com/home-assistant/home-assistant-polymer): Polymer UI. - -For those new to contributing to open source software, make sure you are familiar with all of the tools and concepts used in Home Assistant before you start. - -When contributing Home Assistant code: - - [Github](https://guides.github.com/activities/hello-world/) - - [Pip and Virtual Environments](https://www.dabapps.com/blog/introduction-to-pip-and-virtualenv-python/) - - [Python 3](https://www.python.org/) - - [Pylint](https://www.pylint.org) - - [Flake8](http://flake8.pycqa.org/en/latest/) - - [Tox](http://tox.readthedocs.org/en/latest/) - - [TravisCl](https://travis-ci.org/) - -When contributing 3rd Party code to be used by Home Assistant: - - [Publishing your own PyPI package](https://jeffknupp.com/blog/2013/08/16/open-sourcing-a-python-project-the-right-way/) + \ No newline at end of file diff --git a/source/developers/development_101.markdown b/source/developers/development_101.markdown index 851888479f2..7e4858e8906 100644 --- a/source/developers/development_101.markdown +++ b/source/developers/development_101.markdown @@ -9,30 +9,6 @@ sharing: true footer: true --- -The goal of development 101 is to get you familiar with the basics of developing for Home Assistant. Before we start, please make sure you familiarize yourself with the [architecture]. - -To get our code running inside Home Assistant we're going to create a custom component. The first step is to locate your config folder. You can find the path to your config folder by opening the Home Assistant frontend, click on the service developer tool icon. It's the path after the text "Path to configuration.yaml". - -Inside your configuration directory create a new folder called `custom_components`. It might be that one already exists, that's fine too. This is the folder that Home Assistant will look at when looking for custom code. - -

-The Home Assistant API has two variants: a synchronous and an asynchronous version (asyncio). This development course will focus on the synchronous version. -

- -To verify that everything is working correctly, let's create a small Hello World component. To do so, create a file called `hello_world.py` in your custom components folder. Copy paste the following content to it: - -```python -# The domain of your component. Equal to the filename of your component. -DOMAIN = "hello_world" - - -def setup(hass, config): - """Setup the hello_world component.""" - # States are in the format DOMAIN.OBJECT_ID. - hass.states.set('hello_world.Hello_World', 'Works!') - - # Return boolean to indicate that initialization was successfully. - return True -``` - -[architecture]: /developers/architecture/ + \ No newline at end of file diff --git a/source/developers/development_catching_up.markdown b/source/developers/development_catching_up.markdown index 88f4b73e078..30d098ce99f 100644 --- a/source/developers/development_catching_up.markdown +++ b/source/developers/development_catching_up.markdown @@ -9,33 +9,6 @@ sharing: true footer: true --- -If it's taking a while to develop your feature, and you want to catch up with what's in the current Home Assistant `dev` branch, you can use `git rebase`. This will pull the latest Home Assistant changes locally, rewind your commits, bring in the latest changes from Home Assistant, and replay all of your commits on top. - -```bash -# Run this from your feature branch -$ git fetch upstream dev # to pull the latest changes into a local dev branch -$ git rebase upstream/dev # to put those changes into your feature branch before your changes -``` - -If rebase detects conflicts, repeat this process until all changes have been resolved: - -1. `git status` shows you the file with the conflict; edit the file and resolve the lines between `<<<< | >>>>` -3. Add the modified file: `git add ` or `git add .` -4. Continue rebase: `git rebase --continue` -5. Repeat until you've resolved all conflicts - -After rebasing your branch, you will have rewritten history relative to your GitHub fork's branch. When you go to push you will see an error that your history has diverged from the original branch. In order to get your GitHub fork up-to-date with your local branch, you will need to force push, using the following command: - -```bash -# Run this from your feature branch -$ git push origin --force -``` - -Other workflows are covered in detail in the [Github documentation](https://help.github.com/articles/fork-a-repo/). Add an additional `remote` after you clone your fork. - -```bash -$ git remote add upstream https://github.com/home-assistant/home-assistant.git -``` - -Then, `git pull --rebase upstream dev`. - + \ No newline at end of file diff --git a/source/developers/development_checklist.markdown b/source/developers/development_checklist.markdown index 1a1fdb3deff..7fb17c4368c 100644 --- a/source/developers/development_checklist.markdown +++ b/source/developers/development_checklist.markdown @@ -9,12 +9,6 @@ sharing: true footer: true --- - -Before you commit any changes, check your work against these requirements: - -- All dependencies from [pypi](https://pypi.python.org/pypi) are included via the `REQUIREMENTS` variable in your platform or component and only imported inside functions that use them -- New dependencies are added to `requirements_all.txt` (if applicable), using `script/gen_requirements_all.py` -- The `.coveragerc` file is updated to exclude your platform if there are no tests available or your new code uses a third-party library for communication with the device, service, or sensor -- Documentation is developed for [home-assistant.io](https://home-assistant.io/) - * It's OK to start with adding a docstring with configuration details (for example, sample entry for `configuration.yaml` file) to the file header. Visit the [website documentation](/developers/documentation/) for more information about contributing to [home-assistant.io](https://github.com/home-assistant/home-assistant.github.io). - + \ No newline at end of file diff --git a/source/developers/development_config.markdown b/source/developers/development_config.markdown index 56382ecb615..5d89b5b2b5c 100644 --- a/source/developers/development_config.markdown +++ b/source/developers/development_config.markdown @@ -9,27 +9,6 @@ sharing: true footer: true --- -Based on where you are in the code, `config` can mean various things. - -### {% linkable_title On the hass object %} - -On the hass object is an instance of the Config class. The Config class contains the users preferred units, the path to the config directory and which components are loaded. [See available methods.](https://dev-docs.home-assistant.io/en/master/api/core.html#homeassistant.core.Config) - -### {% linkable_title Config passed into component setup %} - -The `config` parameter passed to a component setup is a dictionary containing all of the user supplied configuration. The keys of the dictionary are the component names and the value is another dictionary with the component configuration. - -The object will have already been validated using your `CONFIG_SCHEMA` or `PLATFORM_SCHEMA` if available. If you have defined a `PLATFORM_SCHEMA`, all references to your component (ie `light 2:` etc) will have been changed to be accessible as a list under `config[DOMAIN]`. - -If your configuration file contains the following lines: - -```yaml -example: - host: paulusschoutsen.nl -``` - -Then in the setup method of your component you will be able to refer to `config['example']['host']` to get the value `paulusschoutsen.nl`. - -### {% linkable_title Passed into platform setup %} - -The `config` parameter passed to a platform setup function is only the config for that specific platform. + \ No newline at end of file diff --git a/source/developers/development_environment.markdown b/source/developers/development_environment.markdown index 21d7651f031..4671f6ec643 100644 --- a/source/developers/development_environment.markdown +++ b/source/developers/development_environment.markdown @@ -9,80 +9,6 @@ sharing: true footer: true --- -You'll need to set up a development environment if you want to develop a new feature or component for Home Assistant. Read on to learn how to set up. - -### {% linkable_title Preparing your environment %} - -#### {% linkable_title Developing on Linux %} - -Install the core dependencies. -```bash -$ sudo apt-get install python3-pip python3-dev python3-venv -``` - -In order to run `script/setup` below you will need some more dependencies. -```bash -$ sudo apt-get install libssl-dev libxml2-dev libxslt1-dev libjpeg-dev libffi-dev libudev-dev zlib1g-dev -``` - -

-Different distributions have different package installation mechanisms and sometimes packages names as well. For example Centos would use: `sudo yum install epel-release && sudo yum install python34 python34-devel mysql-devel` -

- -Additional dependencies exist if you plan to perform Frontend Development, please read the [Frontend](https://home-assistant.io/developers/frontend/) section to learn more. - -#### {% linkable_title Developing on Windows %} - -If you are using Windows as a development platform, make sure that you have the correct Microsoft Visual C++ build tools installed. Check the [Windows Compilers](https://wiki.python.org/moin/WindowsCompilers) section on the [Python website](https://www.python.org/) for details. Validation using `tox` will fail if this is not done correctly. - -Also, make sure to install or upgrade the `setuptools` Python package. It contains compatibility improvements and adds automatic use of compilers: - -```bash -$ pip install --upgrade setuptools -``` - -#### {% linkable_title Developing on OS X %} - -Install [Homebrew](https://brew.sh/), then use that to install Python 3: - -```bash -$ brew install python3 -``` - -### {% linkable_title Setup Local Repository %} - -Visit the [Home Assistant repository](https://github.com/home-assistant/home-assistant) and click **Fork**. -Once forked, setup your local copy of the source using the commands: - -```bash -$ git clone https://github.com/YOUR_GIT_USERNAME/home-assistant.git -$ cd home-assistant -$ git remote add upstream https://github.com/home-assistant/home-assistant.git -``` - -### {% linkable_title Setting up virtual environment %} - -If you plan on providing isolation to your environment using [`venv`](https://docs.python.org/3.4/library/venv.html). Within the `home-assistant` directory, create and activate your virtual environment. - -```bash -$ python3 -m venv venv -$ source venv/bin/activate -``` - -### {% linkable_title Setup and Run %} - -```bash -$ cd home-assistant -$ script/setup -``` - -* Run `hass` to invoke your local installation. - -### {% linkable_title Logging %} - -By default logging in home-assistant is tuned for operating in -production (set to INFO by default, with some modules set to even less -verbose logging levels). - -You can use the [logger](/components/logger/) component to adjust -logging to DEBUG to see even more details about what is going on. + \ No newline at end of file diff --git a/source/developers/development_events.markdown b/source/developers/development_events.markdown index e078396fd05..2552fb8e2f3 100644 --- a/source/developers/development_events.markdown +++ b/source/developers/development_events.markdown @@ -9,54 +9,6 @@ sharing: true footer: true --- -The core of Home Assistant is driven by events. That means that if you want to respond to something happening, you'll have to respond to events. Most of the times you won't interact directly with the event system but use one of the [event listener helpers][helpers]. - -The event system is very flexible. There are no limitations on the event type, as long as it's a string. Each event can contain data. The data is a dictionary that can contain any data as long as it's JSON serializable. This means that you can use number, string, dictionary and list. - -[List of events that Home Assistant fires.][object] - -### {% linkable_title Firing events %} - -To fire an event, you have to interact with the event bus. The event bus is available on the Home Assistant instance as `hass.bus`. - -Example component that will fire an event when loaded. - -```python -DOMAIN = 'hello_event' - -def setup(hass, config): - """Set up is called when Home Assistant is loading our component.""" - - # Fire event my_cool_event with event data answer=42 - hass.bus.fire('my_cool_event', { - 'answer': 42 - }) -``` - -### {% linkable_title Listening to events %} - -Most of the times you'll not be firing events but instead listen to events. For example, the state change of an entity is broadcasted as an event. - -```python -DOMAIN = 'hello_event' - -def setup(hass, config): - """Set up is called when Home Assistant is loading our component.""" - count = 0 - - # Listener to handle fired events - def handle_event(event): - nonlocal count - count += 1 - print('Total events received:', count) - - # Listen for when my_cool_event is fired - hass.bus.listen('my_cool_event', handle_event) -``` - -#### {% linkable_title Helpers %} - -Home Assistant comes with a lot of bundled helpers to listen to specific types of event. There are helpers to track a point in time, to track a time interval, a state change or the sun set. [See available methods.][helpers] - -[helpers]: https://dev-docs.home-assistant.io/en/master/api/helpers.html#module-homeassistant.helpers.event -[object]: /docs/configuration/events/ + \ No newline at end of file diff --git a/source/developers/development_guidelines.markdown b/source/developers/development_guidelines.markdown index d5fa2359e1c..e368c75a1e5 100644 --- a/source/developers/development_guidelines.markdown +++ b/source/developers/development_guidelines.markdown @@ -9,73 +9,6 @@ sharing: true footer: true --- -Home Assistant enforces strict [PEP8 style](https://www.python.org/dev/peps/pep-0008/) and [PEP 257 (Docstring Conventions)](https://www.python.org/dev/peps/pep-0257/) compliance on all code submitted. We automatically test every pull request as part of the linting process with [Coveralls](https://coveralls.io/github/home-assistant/home-assistant) and [Travis CI](https://travis-ci.org/home-assistant/home-assistant). - -Summary of the most relevant points: - -- Line length is limited to 79 characters (see below). -- Use 4 spaces per indentation level. We don't use tabs. -- Comments should be full sentences and end with a period. -- [Imports](https://www.python.org/dev/peps/pep-0008/#imports) should be ordered. -- Constants and the content of lists and dictionaries should be in alphabetical order. -- Avoid trailing whitespace but surround binary operators with a single space. -- Line separator should be set to `LF`. - -The maximum line length comes directly from the [PEP8 style guide](https://www.python.org/dev/peps/pep-0008/#maximum-line-length), and is also used by the Python standard library. All code must pass these linting checks, and no exceptions will be made. There have already been numerous requests to increase the maximum line length, but after evaluating the options, the Home Assistant maintainers have decided to stay at 79 characters. This decision is final. - -Those points may require that you adjust your IDE or editor settings. - -## {% linkable_title Our recommandations %} - -For some cases [PEPs](https://www.python.org/dev/peps/) don't make a statement. This section covers our recommendations about the code style. Those points were collected from the exisiting code and based on what contributors and developers were using the most. This is basically a majority decision, thus you may not agree with it. But we would like to encourage you follow those recommandations to keep the code unified. - -### {% linkable_title Quotes %} - -Use single quotes `'` for single word and `"` for multiple words or sentences. - -```python -ATTR_WATERLEVEL = 'level' -CONF_ATTRIBUTION = "Data provided by the WUnderground weather service" -SENSOR_TYPES = { - 'alerts': ['Alerts', None], -} -``` - -### {% linkable_title File headers %} - -The docstring in the file header should contain a link to the documentation to make it easy to find further information, especially about the configuration or details which are not mentioned in the code. - -```python -""" -Support for MQTT lights. - -For more details about this platform, please refer to the documentation at -https://home-assistant.io/components/light.mqtt/ -""" -``` - -### {% linkable_title Requirements %} - -Please place [Platform requirements](/developers/code_review_platform/#1-requirements) right after the imports. - -```python -[...] -from homeassistant.helpers.entity import Entity - -REQUIREMENTS = ['xmltodict==0.11.0'] -``` - -### {% linkable_title Log messages %} - -There is no need to add the platform or component name to the log messages. This will be added automatically. Like `syslog` messages there shouldn't be any period at the end. Try to avoid brackets and additional quotes around the output to make it easier for users to parse the log. A widely style is shown below but you are free to compose the messages as you like. - -```python -_LOGGER.error("No route to device: %s", self._resource) -``` - -```bash -2017-05-01 14:28:07 ERROR [homeassistant.components.sensor.arest] No route to device: 192.168.0.18 -``` - -Don't print out wrong API keys, tokens, usernames, or passwords. - + \ No newline at end of file diff --git a/source/developers/development_hass_object.markdown b/source/developers/development_hass_object.markdown index d4a5926d2ec..e4554ecf7be 100644 --- a/source/developers/development_hass_object.markdown +++ b/source/developers/development_hass_object.markdown @@ -10,29 +10,6 @@ footer: true redirect_from: /developers/component_initialization/ --- -While developing Home Assistant you will see a variable that is everywhere: `hass`. This is the Home Assistant instance that will give you access to all the various parts of the system. - -### {% linkable_title The `hass` object %} - -The Home Assistant instance contains four objects to help you interact with the system. - -| Object | Description | -| ------ | ----------- | -| `hass` | This is the instance of Home Assistant. Allows starting, stopping and enqueing new jobs. [See available methods.](https://dev-docs.home-assistant.io/en/master/api/core.html#homeassistant.core.HomeAssistant) -| `hass.config` | This is the core configuration of Home Assistant exposing location, temperature preferences and config directory path. [See available methods.](https://dev-docs.home-assistant.io/en/master/api/core.html#homeassistant.core.Config) -| `hass.states` | This is the StateMachine. It allows you to set states and track when they are changed. [See available methods.](https://dev-docs.home-assistant.io/en/master/api/core.html#homeassistant.core.StateMachine). | -| `hass.bus` | This is the EventBus. It allows you to trigger and listen for events. [See available methods.](https://dev-docs.home-assistant.io/en/master/api/core.html#homeassistant.core.EventBus). | -| `hass.services` | This is the ServiceRegistry. It allows you to register services. [See available methods.](https://dev-docs.home-assistant.io/en/master/api/core.html#homeassistant.core.ServiceRegistry). | - -### {% linkable_title Where to find `hass` %} - -Depending on what you're writing, there are different ways the `hass` object is made available. - -**Component**
-Passed into `setup(hass, config)` or `async_setup(hass, config)`. - -**Platform**
-Passed into `setup_platform(hass, config, add_devices, discovery_info=None)` or `async_setup_platform(hass, config, async_add_devices, discovery_info=None)`. - -**Entity**
-Available as `self.hass` once the entity has been added via the `add_devices` callback inside a platform. + \ No newline at end of file diff --git a/source/developers/development_services.markdown b/source/developers/development_services.markdown index 1aa11397ede..6d5c2033749 100644 --- a/source/developers/development_services.markdown +++ b/source/developers/development_services.markdown @@ -9,47 +9,6 @@ sharing: true footer: true --- -This is a simple "hello world" example to show the basics of registering a service. To use this example, create the file `/custom_components/hello_service.py` and copy the below example code. - -Services can be called from automation and from the service "Developer tools" in the frontend. - -```python -# The domain of your component. Should be equal to the name of your component. -DOMAIN = 'hello_service' - -ATTR_NAME = 'name' -DEFAULT_NAME = 'World' - - -def setup(hass, config): - """Set up is called when Home Assistant is loading our component.""" - - def handle_hello(call): - name = call.data.get(ATTR_NAME, DEFAULT_NAME) - - hass.states.set('hello_service.hello', name) - - hass.services.register(DOMAIN, 'hello', handle_hello) - - # Return boolean to indicate that initialization was successfully. - return True -``` - -Load the component by adding the following to your `configuration.yaml`. When your component is loaded, a new service should be available to call. - -```yaml -# configuration.yaml entry -hello_service: -``` - -Open the frontend and in the sidebar, click the first icon in the developer tool section. This will open the Call Service developer tool. On the right, find your service and click on it. This will automatically fill in the correct values. - -Pressing "Call Service" will now call your service without any parameters. This will cause your service to create a state with the default name 'World'. If you want to specify the name, you have to specify parameters. Add the following JSON as Service Data and press "Call Service again". - -```json -{ - "name": "Planet" -} -``` - -The service will now overwrite the previous state with "Planet". + \ No newline at end of file diff --git a/source/developers/development_states.markdown b/source/developers/development_states.markdown index 369f87ea54b..cf3db78b4db 100644 --- a/source/developers/development_states.markdown +++ b/source/developers/development_states.markdown @@ -9,132 +9,6 @@ sharing: true footer: true --- -Home Assistant keeps track of the states of entities in a state machine. The state machine has very few requirements: - - - Each state is related to an entity identified by an entity id. This id is made up of a domain and an object id. For example `light.kitchen_ceiling`. You can make up any combination of domain and object id, even overwriting existing states. - - Each state has a primary attribute that describes the state of the entity. In the case of a light this could be for example "on" and "off". You can store anything you want in the state, as long as it's a string (will be converted if it's not). - - You can store more information about an entity by setting attributes. Attributes is a dictionary that can contain any data that you want. The only requirement is that it's JSON serializable, so you're limited to numbers, strings, dictionaries and lists. - -[Description of the state object.](/docs/configuration/state_object/) - -### {% linkable_title Using states in your component %} - -This is a simple tutorial/example on how to create and set states. We will do our work in a component called "hello_state". The purpose of this component is to display a given text in the frontend. - -To get started, create the file `/custom_components/hello_state.py` and copy the below example code. - -```python -""" -Support for showing text in the frontend. - -For more details about this component, please refer to the documentation at -https://home-assistant.io/cookbook/python_component_basic_state/ -""" -import logging - -_LOGGER = logging.getLogger(__name__) - -DOMAIN = 'hello_state' -DEPENDENCIES = [] - -def setup(hass, config): - """Setup the Hello State component. """ - _LOGGER.info("The 'hello state' component is ready!") - - return True -``` - -1. In the file header we decided to add some details: A short description and the link to the documentation. -2. We want to do some logging. This means that we import the Python logging module and create an alias. -3. The component name is equal to the domain name. -4. At the moment this component has no dependencies. For detail check [dependencies](/developers/component_deps_and_reqs/#dependencies) section. -5. The `setup` function will take care of the initialization of our component. - The component will only write a log message. Keep in mind for later that you have several options for the severity: - - - `_LOGGER.info(msg)` - - `_LOGGER.warning(msg)` - - `_LOGGER.error(msg)` - - `_LOGGER.critical(msg)` - - `_LOGGER.exception(msg)` - -7. We return `True` if everything is ok. - -Add the component to your `configuration.yaml` file. - -```yaml -hello_state: -``` - -After a start or a restart of Home Assistant the component will create an entry in the log. - -```bash -16-03-12 14:16:42 INFO (MainThread) [custom_components.hello_state] The 'hello state' component is ready! -``` - -The next step is the introduction of configuration options. A user can pass configuration options to our component via `configuration.yaml`. To use them we'll use the passed in `config` variable to our `setup` method. - -```python -import logging - -_LOGGER = logging.getLogger(__name__) - -DOMAIN = 'hello_state' -DEPENDENCIES = [] - -CONF_TEXT = 'text' -DEFAULT_TEXT = 'No text!' - -def setup(hass, config): - """Set up the Hello State component. """ - # Get the text from the configuration. Use DEFAULT_TEXT if no name is provided. - text = config[DOMAIN].get(CONF_TEXT, DEFAULT_TEXT) - - # States are in the format DOMAIN.OBJECT_ID - hass.states.set('hello_state.Hello_State', text) - - return True -``` - -To use the latest feature of our component, update the entry in your `configuration.yaml` file. - -```yaml -hello_state: - text: 'Hello, World!' -``` - -Thanks to `DEFAULT_TEXT` variable the component will launch even if no `text:` field is used in the `configuration.yaml` file. Quite often there are variables which are required. It's important to check if all mandatory configuration variables are provided. If not, the setup should fail. We will use `voluptuous` as a helper to achieve this. The next listing shows the essential parts. - -```python -import voluptuous as vol - -import homeassistant.helpers.config_validation as cv - -CONFIG_SCHEMA = vol.Schema({ - DOMAIN: vol.Schema({ - vol.Required(CONF_TEXT): cv.string, - }) -}, extra=vol.ALLOW_EXTRA) -``` - -Now, when `text:` is missing from the config, Home Assistant will alert the user and not setup your component. - -After a start or a restart of Home Assistant the component will be visible in the frontend if the `configuration.yaml` file is up-to-date. - -

- -

- -In order to expose attributes for a platform, you will need to define a property called `device_state_attributes` on the entity class, which will return a dictionary of attributes: - -``` -@property -def device_state_attributes(self): - """Return device specific state attributes.""" - return self._attributes -``` - -

-Entities also have a similar property `state_attributes`, which normally doesn't need to be defined by new platforms. This property is used by base components to add standard sets of attributes to a state. Example: The light component uses `state_attributes` to add brightness to the state dictionary. If you are designing a new component, you should define `state_attributes` instead. -

- -To get your component included in the Home Assistant releases, follow the steps described in the [Submitting improvements](https://home-assistant.io/developers/#submitting-improvements) section. Basically you only need to move your component in the `homeassistant/component/` directory of your fork and create a Pull Request. + \ No newline at end of file diff --git a/source/developers/development_submitting.markdown b/source/developers/development_submitting.markdown index 919e20706b9..aaeadba89f6 100644 --- a/source/developers/development_submitting.markdown +++ b/source/developers/development_submitting.markdown @@ -9,39 +9,6 @@ sharing: true footer: true --- -Submit your improvements, fixes, and new features to Home Assistant one at a time, using GitHub [Pull Requests](https://help.github.com/articles/using-pull-requests). Here are the steps: - - 1. From your fork's dev branch, create a new branch to hold your changes: - - `git checkout -b some-feature` - - 2. Make your changes, create a [new platform](/developers/add_new_platform/), develop a [new component](/developers/creating_components/), or fix [issues](https://github.com/home-assistant/home-assistant/issues). - - 3. [Test your changes](/developers/development_testing/) and check for style violations. - - 4. If everything looks good according to these [musts](/developers/development_checklist/), commit your changes: - - `git add .` - - `git commit -m "Added some-feature"` - - * Write a meaningful commit message and not only `Update` or `Fix`. - * Use a capital letter to start with your commit message. - * Don't prefix your commit message with `[bla.bla]` or `platform:`. - * Consider adding tests to ensure that your code works. - - 5. Push your committed changes back to your fork on GitHub: - - `git push origin HEAD` - - 6. Follow [these steps](https://help.github.com/articles/creating-a-pull-request/) to create your pull request. - - * On GitHub, navigate to the main page of the Home Assistant repository. - * In the "Branch" menu, choose the branch that contains your commits (from your fork). - * To the right of the Branch menu, click **New pull request**. - * Use the base branch dropdown menu to select the branch you'd like to merge your changes into, then use the compare branch drop-down menu to choose the topic branch you made your changes in. Make sure the Home Assistant branch matches with your forked branch (`dev`) else you will propose ALL committs between branches. - * Type a title and complete the provided description for your pull request. - * Click **Create pull request**. - - 7. Check for comments and suggestions on your pull request and keep an eye on the [CI output](https://travis-ci.org/home-assistant/home-assistant/). - + \ No newline at end of file diff --git a/source/developers/development_testing.markdown b/source/developers/development_testing.markdown index b1bc38d0c29..dc24f7bbfe7 100644 --- a/source/developers/development_testing.markdown +++ b/source/developers/development_testing.markdown @@ -9,68 +9,6 @@ sharing: true footer: true --- -As states in the [Style guidelines section](/developers/development_guidelines/) all code is checked to verify all unit tests pass and that the code passes the linting tools. Local testing is done using Tox, which has been installed as part of running `script/setup`. To start the tests, simply run it: - -```bash -$ tox -``` -**Important:** Run `tox` before you create your pull request to avoid annoying fixes. - -Running Tox will run unit tests against the locally available Pythons, as well as validate the code and document style using `pycodestyle`, `pydocstyle` and `pylint`. You can run tests on only one tox target -- just use `-e` to select an environment. For example, `tox -e lint` runs the linters only, and `tox -e py34` runs unit tests only on Python 3.4. - -Tox uses virtual environments under the hood to create isolated testing environments. The tox virtual environments will get out-of-date when requirements change, causing test errors. Run `tox -r` to tell Tox to recreate the virtual environments. - -If you are working on tests for a component or platform and you need the dependencies available inside the Tox environment, update the list inside `script/gen_requirements_all.py`. Then run the script and then run `tox -r` to recreate the virtual environments. - -### {% linkable_title Running single tests using Tox %} - -You can pass arguments via Tox to py.test to be able to run single test suites or test files. Replace `py36` with the Python version that you use. - -```bash -# Stop after the first test fails -$ tox -e py36 -- tests/test_core.py -x -# Run test with specified name -$ tox -e py36 -- tests/test_core.py -k test_split_entity_id -# Fail a test after it runs for 2 seconds -$ tox -e py36 -- tests/test_core.py --timeout 2 -# Show the 10 slowest tests -$ tox -e py36 -- tests/test_core.py --duration=10 -``` - -### {% linkable_title Testing outside of Tox %} - -Running tox will invoke the full test suite. Even if you specify which tox target to run, you still run all tests inside that target. That's not very convenient to quickly iterate on your code! To be able to run the specific test suites without Tox, you'll need to install the test dependencies into your Python environment: - -```bash -$ pip3 install -r requirements_test_all.txt -``` - -Now that you have all test dependencies installed, you can run tests on individual files: - -```bash -$ flake8 homeassistant/core.py -$ pylint homeassistant/core.py -$ pydocstyle homeassistant/core.py -$ py.test tests/test_core.py -``` - -You can also run linting tests against all changed files, as reported by `git diff upstream/dev --name-only`, using the `lint` script: - -```bash -$ script/lint --changed -``` - -### {% linkable_title Preventing Linter Errors %} - -Save yourself the hassle of extra commits just to fix style errors by enabling the Flake8 git commit hook. Flake8 will check your code when you try to commit to the repository and block the commit if there are any style errors, which gives you a chance to fix them! - -```bash -$ pip3 install flake8 flake8-docstrings -$ flake8 --install-hook=git -``` - -The `flake8-docstrings` extension will check docstrings according to [PEP257](https://www.python.org/dev/peps/pep-0257/) when running Flake8. - -### {% linkable_title Notes on PyLint and PEP8 validation %} - -If you can't avoid a PyLint warning, add a comment to disable the PyLint check for that line with `# pylint: disable=YOUR-ERROR-NAME`. Example of an unavoidable one is if PyLint incorrectly reports that a certain object doesn't have a certain member. + \ No newline at end of file diff --git a/source/developers/development_validation.markdown b/source/developers/development_validation.markdown index 89d6984e64b..207b61b7d20 100644 --- a/source/developers/development_validation.markdown +++ b/source/developers/development_validation.markdown @@ -9,78 +9,6 @@ sharing: true footer: true --- -The `configuration.yaml` file contains the configuration options for components and platforms. We use [voluptuous](https://pypi.python.org/pypi/voluptuous) to make sure that the configuration provided by the user is valid. Some entries are optional or could be required to set up a platform or a component. Others must be a defined type or from an already-defined list. - -We test the configuration to ensure that users have a great experience and minimise notifications if something is wrong with a platform or component setup before Home Assistant runs. - -Besides [voluptuous](https://pypi.python.org/pypi/voluptuous) default types, many custom types are available. For an overview, take a look at the [config_validation.py](https://github.com/home-assistant/home-assistant/blob/master/homeassistant/helpers/config_validation.py) helper. - -- Types: `string`, `byte`, and `boolean` -- Entity ID: `entity_id` and `entity_ids` -- Numbers: `small_float` and `positive_int` -- Time: `time`, `time_zone` -- Misc: `template`, `slug`, `temperature_unit`, `latitude`, `longitude`, `isfile`, `sun_event`, `ensure_list`, `port`, `url`, and `icon` - -To validate plaforms using [MQTT](/components/mqtt/), `valid_subscribe_topic` and `valid_publish_topic` are available. - -Some things to keep in mind: - -- Use the constants defined in `const.py` -- Import `PLATFORM_SCHEMA` from the parent component and extend it -- Preferred order is `required` first and `optional` second - -### {% linkable_title Snippets %} - -This section contains snippets for the validation we use. - -#### {% linkable_title Default name %} - -It's common to set a default for a sensor if the user doesn't provide a name to use. - -```python -DEFAULT_NAME = 'Sensor name' - -PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({ - ... - vol.Optional(CONF_NAME, default=DEFAULT_NAME): cv.string, -``` - -#### {% linkable_title Limit the values %} - -You might want to limit the user's input to a couple of options. - -```python -DEFAULT_METHOD = 'GET' - -PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({ - ... - vol.Optional(CONF_METHOD, default=DEFAULT_METHOD): vol.In(['POST', 'GET']), -``` - -#### {% linkable_title Port %} - -All port numbers are from a range of 1 to 65535. - -```python -DEFAULT_PORT = 993 - -PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({ - ... - vol.Optional(CONF_PORT, default=DEFAULT_PORT): cv.port, -``` - -#### {% linkable_title Lists %} - -If a sensor has a pre-defined list of available options, test to make sure the configuration entry matches the list. - -```python -SENSOR_TYPES = { - 'article_cache': ('Article Cache', 'MB'), - 'average_download_rate': ('Average Speed', 'MB/s'), -} - -PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({ - ... - vol.Optional(CONF_MONITORED_VARIABLES, default=[]): - vol.All(cv.ensure_list, [vol.In(SENSOR_TYPES)]), -``` + \ No newline at end of file diff --git a/source/developers/documentation/create_page.markdown b/source/developers/documentation/create_page.markdown index f2bf29dcef1..a21303179c8 100644 --- a/source/developers/documentation/create_page.markdown +++ b/source/developers/documentation/create_page.markdown @@ -9,116 +9,6 @@ sharing: true footer: true --- -For a platform or component page, the fastest way is to make a copy of an existing page and edit it. The [Component overview](/components/) and the [Examples section](/cookbook/) are generated automatically, so there is no need to add a link to those pages. - -Please honor the [Standards](/developers/documentation/standards/) we have for the documentation. - -If you start from scratch with a page, you need to add a header. Different sections of the documentation may need different headers. - -```text ---- -layout: page -title: "Awesome Sensor" -description: "home-assistant.io web presence" -date: 2015-06-17 08:00 -sidebar: true -comments: false -sharing: true -footer: true -ha_release: "0.38" -ha_category: Sensor ---- - -Content...Written in markdown. - -{% raw %}### {% linkable_title Linkable Header %}{% endraw %} -... -``` - -There are [pre-definied variables](https://jekyllrb.com/docs/variables/) available but usually, it's not necessary to use them when writing documentation. - -A couple of points to remember: - -- Document the needed steps to retrieve API keys or access token for the third party service or device if needed. -- If you're adding a new component, for the `ha_release` part of the header, just increment of the current release. If the current release is 0.37, make `ha_release` 0.38. If it's 0.30 or 0.40 please quote it with `" "`. -- `ha_category:` is needed to list the platform or component in the appropriate category on the website. - -### {% linkable_title Configuration %} - -Every platform page should contain a configuration sample. This sample must contain only the **required** variables to make it easy to copy and paste it for users into their `configuration.yaml` file. - -The **Configuration Variables** section must use the {% raw %}`{% configuration %} ... {% endconfiguration %}`{% endraw %} tag. - -{% raw %} -```text -{% configuration %} -api_key: - description: The API key to access the service. - required: true - type: string -name: - description: Name to use in the frontend. - required: false - default: The default name to use in the frontend. - type: string -monitored_conditions: - description: Conditions to display in the frontend. - required: true - type: list - keys: - weather: - description: A human-readable text summary. - temperature: - description: The current temperature. -{% endconfiguration %} - -``` -{% endraw %} - -Available keys: - -- **`description:`**: That the variable is about. -- **`required:`**: If the variable is required. -```text -required: true #=> Required -required: false #=> Optional -required: inclusive #=> Inclusive -required: exclusive #=> Exclusive -required: any string here #=> Any string here -``` -- **`type:`**: The type of the variable. Allowed entries: `string`, `int`, `time`, `template` or `map`. For multiple possibilities use `[string, int]`. If you use `map` then you need to define `keys:` (see the [`template` sensor](/components/sensor.template/) for an example). -- **`default:`**: The default value for the variable. - -### {% linkable_title Embedding Code %} - -You can use the [default markdown syntax](https://github.com/adam-p/markdown-here/wiki/Markdown-Cheatsheet#code) to generate syntax highlighted code. For inline code wrap your code in {% raw %}`{% endraw %}. - -When you're writing code that is to be executed on the terminal, prefix it with `$`. - -### {% linkable_title Templates %} - -For the [configuration templating](/topics/templating/) is [Jinja](http://jinja.pocoo.org/) used. Check the [Documentation Standards](/developers/documentation/standards/) for further details. - -If you are don't escape templates then they will be rendered and appear blank on the website. - -### {% linkable_title HTML %} - -The direct usage of HTML is supported but not recommended. The note boxes are an exception. - -```html -

- You need to enable telnet on your router. -

-``` - -### {% linkable_title Images, icons, and logos %} - -The images which are displayed on the pages are stored in various directories according to their purpose. If you want to use a logo and placed `logo:` in the file header then this image should be stored in `source/images/supported_brands`. The background must be transparent. - -| Type | Location | -| :----------- |:----------------------------------------------| -| logos | source/images/supported_brands | -| blog | source/images/blog | -| screenshots | source/images/components | - -Not everything (product, component, etc.) should have a logo. To show something for internal parts of Home Assistant we are using the [Material Design Icons](https://materialdesignicons.com/). + diff --git a/source/developers/documentation/index.markdown b/source/developers/documentation/index.markdown index 33dd22d859f..aed589d8a3e 100644 --- a/source/developers/documentation/index.markdown +++ b/source/developers/documentation/index.markdown @@ -10,35 +10,6 @@ footer: true redirect_from: /developers/website/ --- -The website you are reading now is the home of Home Assistant: [https://home-assistant.io](https://home-assistant.io). This is the place where we provide documentation and additional details about Home Assistant for end users and developers. - -home-assistant.io is built using [Jekyll](http://github.com/mojombo/jekyll) and [these available dependencies](https://pages.github.com/versions/). The pages are written in [markdown](http://daringfireball.net/projects/markdown/). To add a page, you don't need to know about HTML. - -You can use the "**Edit this page on GitHub**" link to edit pages without creating a fork. Keep in mind that you can't upload images while working this way. - -For larger changes, we suggest that you clone the website repository. This way, you can review your changes locally. The process for working on the website is no different from working on Home Assistant itself. You work on your change and propose it via a pull request. - -To test your changes locally, you need to install **Ruby** and its dependencies (gems): - -- [Install Ruby](https://www.ruby-lang.org/en/documentation/installation/) if you don't have it already. Ruby version 2.3.0 or higher is required. -- Install `bundler`, a dependency manager for Ruby: `$ gem install bundler` -- In your home-assistant.github.io root directory, run `$ bundle` to install the gems you need. - -Short cut for Fedora: `$ sudo dnf -y install gcc-c++ ruby ruby-devel rubygem-bundler rubygem-json && bundle` - -Then you can work on the documentation: - -- Fork home-assistant.io [git repository](https://github.com/home-assistant/home-assistant.github.io). -- Create/edit/update a page in the directory `source/_components/` for your platform/component. -- Test your changes to home-assistant.io locally: run `rake preview` and navigate to [http://127.0.0.1:4000](http://127.0.0.1:4000) -- Create a Pull Request (PR) against the **next** branch of home-assistant.github.io if your documentation is a new feature, platform, or component. -- Create a Pull Request (PR) against the **current** branch of home-assistant.github.io if you fix stuff, create Cookbook entries, or expand existing documentation. - -

-It could be necessary that you run `rake generate` prior to `rake preview` for the very first preview. -

-

-Site generated by `rake` is only available locally. If you are developing on a headless machine use port forwarding: -`ssh -L 4000:localhost:4000 user_on_headless_machine@ip_of_headless_machine` -

- + diff --git a/source/developers/documentation/standards.markdown b/source/developers/documentation/standards.markdown index c859c4db6ab..5ef543344ac 100644 --- a/source/developers/documentation/standards.markdown +++ b/source/developers/documentation/standards.markdown @@ -9,61 +9,6 @@ sharing: true footer: true --- -To ensure that the documentation for Home Assistant is consistent and easy to follow for both novice and expert users, we ask that you follow a very strict set of standards for developing the documentation. - -## {% linkable_title General Documentation %} - -* The language of the documentation should be American-English. -* Don't put two spaces after a period and avoid the "Oxford comma". -* Be objective and not gender favoring, polarizing, race related or religion inconsiderate. -* The case of brand names, services, protocols, components, and platforms must match its respective counterpart. E.g. "Z-Wave" **not** "Zwave", "Z-wave", "Z Wave" or "ZWave". Also, "Input Select" **not** "input select" or "Input select". -* All headings should use the {% raw %}`{% linkable_title %}`{% endraw %} tag. - -## {% linkable_title Component and Platform Pages %} - -* The **Configuration Variables** section must use the {% raw %}`{% configuration %}`{% endraw %} tag. -* Configuration variables must document the requirement status. -* Configuration variables must document the default value, if any. -* Configuration variables must document the accepted value types. - * Use `[string, int]` for configuration variables that accept multiple types. -* Use YAML sequence syntax in the sample code if it is supported. -* All examples should be formatted to be included in `configuration.yaml` unless explicitly stated. -* Component and platform names should be a link to their respective documentation pages. - -## {% linkable_title Templates %} - -* All examples containing Jinja2 templates should be wrapped **outside** of the code markdown with the {% raw %}`{% raw %}`{% endraw %} tag. -* Do not use `states.switch.source.state` in templates. Instead use `states()` and `is_state()`. -* Use double quotes (`"`) for: - * `friendly_name` - * Single-line templates: - * `value_template` - * `level_template` - * `icon_template` - * Children of `data_template` -* Use single quotes (`'`) for: - * Strings inside of templates: - * States - * Entity IDs - * `unit_of_measurement` -* No whitespace around pipe character (`|`) for Jinja2 filters. -* Single whitespace after Jinja2 opening delimiters ({% raw %}`{{`{% endraw %}). -* Single whitespace before Jinja2 closing delimiters ({% raw %}`}}`{% endraw %}). -* Do not quote values for: - * `device_class` - * `platform` - * `condition` - * `service` - -## {% linkable_title Renaming Pages %} - -It can happen that a component or platform is renamed, in this case the documentation needs to be updated as well. If you rename a page, add `redirect_from:` to the file header and let it point to the old location/name of the page. Please consider to add details, like release number or old component/platform name, to the page in a [note](/developers/documentation/create_page/#html). - -```text ---- -... -redirect_from: /getting-started/android/ ---- -``` - -Adding a redirect also applies if you move content around in the [documention](/docs/). + diff --git a/source/developers/frontend.markdown b/source/developers/frontend.markdown index 0fb71208d9a..316ca364878 100755 --- a/source/developers/frontend.markdown +++ b/source/developers/frontend.markdown @@ -9,94 +9,6 @@ sharing: true footer: true --- -Home Assistant is built on top of the [Polymer](https://www.polymer-project.org/) webcomponents framework. Polymer allows building encapsulated custom HTML elements. [Home-Assistant-Polymer source code on GitHub.][hass-polymer] - -

-Do not use development mode in production. Home Assistant uses aggressive caching to improve the mobile experience. This is disabled during development so that you do not have to restart the server in between changes. -

- -## {% linkable_title Setting up the environment %} - -

-All commands below need to be run from inside the home-assistant-polymer repository. -

- -Home Assistant will by default serve the compiled version of the frontend from the hass_frontend Python package. For development you want to work with the unbundled source files which are in the home-assistant-polymer repository. - -First step is to configure Home Assistant to use the development mode for the frontend. Do this by updating the frontend config in your `configuration.yaml` and set the path to the polymer repo: - -```yaml -frontend: - development_repo: -``` - -Next step is to git clone the [home-assistant-polymer repository][hass-polymer]. You can place the repository anywhere on your system but to keep these instructions simple we're cloning the home-assistant-polymer repository as a sibling to the Home Assistant repo. - -```bash -$ git clone https://github.com/home-assistant/home-assistant-polymer.git -$ cd home-assistant-polymer -``` - -After cloning, your folder structure should look like this: - -```text -/home-assistant -/home-assistant-polymer -``` - -Node.js is required to build the frontend. The preferred method of installing node.js is with [nvm](https://github.com/creationix/nvm). Install nvm using the instructions in the [README](https://github.com/creationix/nvm#install-script), and install the correct node.js by running the following command: - -```bash -$ nvm install -``` - -[Yarn](https://yarnpkg.com/en/) is used as the package manager for node modules. [Install yarn using the instructions here.](https://yarnpkg.com/en/docs/install) - -Next, development dependencies need to be installed to bootstrap the frontend development environment. First activate the right Node version and then download all the needed modules and do a first build: - -```bash -$ nvm use -$ script/bootstrap -``` - -This script will use yarn and bower to install all the necessary dependencies necessary for development and do an initial build. - -### {% linkable_title Creating pull requests %} - -If you're planning on issuing a PR back to the Home Assistant codebase you need to fork the polymer project and add your fork as a remote to the Home Assistant Polymer repo. - -```bash -$ git remote add -``` - -When you've made your changes and are ready to push them change to the working directory for the polymer project and then push your changes - -``` bash -$ git add -A -$ git commit -m "Added new feature X" -$ git push -u HEAD -``` - -## {% linkable_title Development %} - -If you are changing `html` files under `/src` or `/panels` - just reload the page in your browser to see changes. -If you are changing javascript files under `/js` you need to have gulp running to watch the source files for changes and build when necessary. - -```bash -$ yarn run dev-watch -``` - -The source code for the frontend can be found in different directories: - - - UI: `/home-assistant-polymer/src/` - - Panels: `/home-assistant-polymer/panels/` - - Javascript code: `/home-assistant-polymer/js/` - -# {% linkable_title Building the Polymer frontend %} - -Building a new version of the frontend is as simple as running `script/build_frontend`. -To use a built version package it: `python setup.py sdist` -Install it: `pip3 install dist/home-assistant-frontend-xxxxxxxx.0.tar.gz --upgrade` -Run Home Assistant without trying to reinstall production package: `hass --skip-pip` - -[hass-polymer]: https://github.com/home-assistant/home-assistant-polymer + \ No newline at end of file diff --git a/source/developers/frontend_add_card.markdown b/source/developers/frontend_add_card.markdown index 2deba80dbc3..d10dda464ba 100644 --- a/source/developers/frontend_add_card.markdown +++ b/source/developers/frontend_add_card.markdown @@ -9,20 +9,6 @@ sharing: true footer: true --- -The main interface of Home Assistant is a list of the current entities and their states. For each entity in the system, a state card will be rendered. State cards will show an icon, the name of the entity, when the state has last changed and the current state or a control to interact with it. - -![Cards in the frontend](/images/frontend/frontend-cards1.png) - -The different card types can be found [here](https://github.com/home-assistant/home-assistant-polymer/tree/master/src/state-summary). - -Sensors, when not [grouped](/components/group/), are shown as so-called badges on top of the state cards. - -![Badges in the frontend](/images/frontend/frontend-badges.png) - -The different badges are located in the file [`/src/components/entity/ha-state-label-badge.html`](https://github.com/home-assistant/home-assistant-polymer/blob/master/src/components/entity/ha-state-label-badge.html). - -Adding a custom card type can be done with a few simple steps. For this example we will add a new state card for the domain `camera`: - - 1. Add `'camera'` to the array `DOMAINS_WITH_CARD` in the file [/util/hass-util.html](https://github.com/home-assistant/home-assistant-polymer/blob/master/src/util/hass-util.html#L11). - 2. Create the files `state-card-camera.html` in the folder [/state-summary/](https://github.com/home-assistant/home-assistant-polymer/tree/master/src/state-summary). - 4. Add `` to [state-card-content.html](https://github.com/home-assistant/home-assistant-polymer/blob/master/src/state-summary/state-card-content.html). + \ No newline at end of file diff --git a/source/developers/frontend_add_more_info.markdown b/source/developers/frontend_add_more_info.markdown index 2364c5b3129..5a6993837f5 100644 --- a/source/developers/frontend_add_more_info.markdown +++ b/source/developers/frontend_add_more_info.markdown @@ -9,15 +9,6 @@ sharing: true footer: true --- -Whenever the user taps or clicks on one of the cards, a more info dialog will show. The header of this dialog will be the state card, followed by the history of this entity for the last 24 hours. Below this the more info component is rendered for that entity. The more info component can show more information or allow more ways of control. - -

- - The more info dialog for a light allows the user to control the color and the brightness. -

- -The instructions to add a more info dialog are very similar to adding a new card type. This example will add a new more info component for the domain `camera`: - - 1. Add `'camera'` to the array `DOMAINS_WITH_MORE_INFO` in the file [util/hass-util.html](https://github.com/home-assistant/home-assistant-polymer/blob/master/src/util/hass-util.html#L24). - 2. Create the files `more-info-camera.html` in the folder [/more-infos](https://github.com/home-assistant/home-assistant-polymer/tree/master/src/more-infos). - 4. Add `` to [more-info-content.html](https://github.com/home-assistant/home-assistant-polymer/blob/master/src/more-infos/more-info-content.html) + \ No newline at end of file diff --git a/source/developers/frontend_creating_custom_panels.markdown b/source/developers/frontend_creating_custom_panels.markdown index 87bfc3442a5..670a562cfae 100644 --- a/source/developers/frontend_creating_custom_panels.markdown +++ b/source/developers/frontend_creating_custom_panels.markdown @@ -9,68 +9,6 @@ sharing: true footer: true --- -Any component has the possibility to add a panel to the frontend. Panels will be rendered full screen and have real-time access to the Home Assistant object via JavaScript. Examples of this in the app are map, logbook and history. - -Create a file called `hello.html` in your /panels/. - -The `hello.html` contains the needed building blocks to create the elements inside the view. - -```javascript - - - - -``` - -Create an entry for the new panel in your `configuration.yaml` file: - -```yaml -panel_custom: - - name: hello - sidebar_title: Hello World - sidebar_icon: mdi:hand-pointing-right - url_path: hello -``` - -For more possibilities, see the [Custom panel section](/cookbook/#user-interface) on our Examples page. +window.location = 'https://developers.home-assistant.io/docs/en/frontend_creating_custom_panels.html'; + \ No newline at end of file diff --git a/source/developers/frontend_creating_custom_ui.markdown b/source/developers/frontend_creating_custom_ui.markdown index 7a4b8eeb418..f70c3ce3c19 100644 --- a/source/developers/frontend_creating_custom_ui.markdown +++ b/source/developers/frontend_creating_custom_ui.markdown @@ -10,72 +10,6 @@ footer: true ha_release: 0.38 --- -If you would like to use your own [State card](/developers/frontend_add_card/) without merging your code into [home-assistant-polymer](https://github.com/home-assistant/home-assistant-polymer/) you can create your own implementation. - -Put the element source file and its dependencies in `www/custom_ui/` directory under your Home Assistant [configuration](/docs/configuration/) directory. - -For example if creating a state card for the `light` domain named `state-card-my-custom-light` put `state-card-my-custom-light.html` in `www/custom_ui/`. - -That file should implement `` tag with Polymer. - -In `state-card-my-custom-light.html` you should use `` to import all the dependencies **not** used by Home Assistant's UI. -Do not import any dependencies used by the Home Assistant UI. -Importing those will work in `development: 1` mode, but will fail in production mode. - -1. In the `customize:` section of the `configuration.yaml` file put `custom_ui_state_card: state-card-my-custom-light`. -2. In the `frontend` section use `extra_html_url` to specify the URL to load. - -Example: - -`configuration.yaml`: - -```yaml -homeassistant: - customize: - light.bedroom: - custom_ui_state_card: state-card-my-custom-light - -frontend: - extra_html_url: - - /local/custom_ui/state-card-my-custom-light.html -``` - -`www/custom_ui/state-card-my-custom-light.html`: - -```javascript - - - - -``` - -For more possibilities, see the [Custom UI section](/cookbook/#user-interface) on our Examples page. +window.location = 'https://developers.home-assistant.io/docs/en/frontend_creating_custom_ui.html'; + \ No newline at end of file diff --git a/source/developers/frontend_translation.markdown b/source/developers/frontend_translation.markdown deleted file mode 100644 index ace77c6fe9b..00000000000 --- a/source/developers/frontend_translation.markdown +++ /dev/null @@ -1,45 +0,0 @@ ---- -layout: page -title: "Frontend Translation" -description: "How to translate the frontend for Home Assistant." -date: 2017-10-27 13:00 -sidebar: true -comments: false -sharing: true -footer: true -ha_release: 0.57 ---- - -## {% linkable_title How to start %} -[Join the translation team](https://lokalise.co/signup/3420425759f6d6d241f598.13594006/all/) and choose your language. Even if your language is completely translated, extra proofreading is a big help! Please feel free to review the existing translations, and vote for alternatives that might be more appropriate. - -First time users may find it helpful to switch between multilanguage and single language view using the Multilanguage view button. For more information about the translation workflow, please see the [Lokalise translation workflow documents](https://docs.lokalise.co/category/iOzEuQPS53-for-team-leads-and-translators). - -

-The translation of the Home Assistant frontend is still a work in progress. More phrases will be available for translation soon. -

- -## {% linkable_title Rules %} -1. Only native speakers should submit translations. -2. Stick to [Material Design guidelines](https://material.io/guidelines/style/writing.html). -3. Don't translate or change proper nouns like `Home Assistant`, `Hass.io` or `Hue`. -4. For a region specific translation, keys that will be the same as the base translation should be filled with `[VOID]`. These will be replaced during our translation build process. -5. Translations under the `state_badge` keys will be used for the notification badge display. These translations should be short enough to fit in the badge label without overflowing. This can be tested in the Home Assistant UI either by editing the label text with your browsers development tools, or by using the States developer tool in the Home Assistant UI. In the UI, enter a new entity ID (`device_tracker.test`), and enter the text you want to test in state. -6. If text will be duplicated across different translation keys, make use of the Lokalise key reference feature where possible. The base translation provides examples of this underneath the `states` translations. Please see the [Lokalise key referencing](https://docs.lokalise.co/article/KO5SZWLLsy-key-referencing) documentation for more details. - -## {% linkable_title Adding a new language %} -If your language is not listed you can request it at [GitHub](https://github.com/home-assistant/home-assistant-polymer/issues/new). Please provide both the English name and the native name for your language. For example: -``` -English Name: German -Native Name: Deutsch -``` - -

-Region specific translations (`en-US`, `fr-CA`) will only be included if translations for that region need to differ from the base language translation. -

- -### {% linkable_title Maintainer steps to add a new language %} -1. Language tags have to follow [BCP 47](https://tools.ietf.org/html/bcp47). A list of most language tags can be found here: [IANA sutbtag registry](http://www.iana.org/assignments/language-subtag-registry/language-subtag-registry). Examples: `fr`, `fr-CA`, `zh-Hans`. Only include the country code if country specific overrides are being included, and the base language is already translated. -2. Add the language tag and native name in `src/translations/translationMetadata.json`. Examples: "Français", "Français (CA)" -3. Add the new language in Lokalize. -Note: Sometimes you have to change the tag in Lokalise (Language -> Language settings -> custom ISO code). diff --git a/source/developers/hassio/addon_communication.markdown b/source/developers/hassio/addon_communication.markdown index adb642d465d..2ade126855a 100644 --- a/source/developers/hassio/addon_communication.markdown +++ b/source/developers/hassio/addon_communication.markdown @@ -10,25 +10,6 @@ footer: true redirect_from: /hassio/addon_config/ --- -There are different ways to communication between add-ons inside Home Assistant. - -## {% linkable_title Network %} - -We use a internal network. That allow to speak with every add-on or from Home Assistant to add-on by name or alias. Only the add-ons which runs on the host network are a bit limited. They can speak with all internal add-ons over their name but all other add-on can't address the add-on in question with its name. But using an alias work well. Thus the name/alias is used to communicate inside Hass.io. The name have the following format `{REPO}-{SLUG}`, e.g. `local-xy` or `3283fh-myaddon`. - -Use `hassio` to speak with the internal API. - -## {% linkable_title Home Assistant %} - -An add-on can speak to the [Home Assistant API][hass-api] with our internal proxy. That makes it very easy to communicate with the API without knowing the password, port or any other information of the Home Assistant instance. Use this URL: `http://hassio/homeassistant/api` and internal communication is redirected to the right place. The next stept is to add `homeassistant_api: true` to `config.json` and read the environment variable `API_TOKEN` and use this as Home-Assistant password. - -It is also possible to speak direct to the Home Assistant instance which is named `homeassistant` over our internal network. But you need to know the configuration that is used by the running instance. - -We have severals services for Hass.io inside Home Assistant to execute tasks. To send data over STDIN to an add-on use the simply `hassio.addon_stdin` service. - -## {% linkable_title Hass.io API %} - -To enables calls to the [Hass.io API][hassio-api], add `hassio_api: true` to `config.json` and read the environment variable `API_TOKEN`. Now you can use the API over the URL: `http://hassio/`. Use the `API_TOKEN` with header `X-HASSIO-KEY`. - -[hass-api]: https://home-assistant.io/developers/rest_api/ -[hassio-api]: https://github.com/home-assistant/hassio/blob/master/API.md + \ No newline at end of file diff --git a/source/developers/hassio/addon_config.markdown b/source/developers/hassio/addon_config.markdown index 9ec5bae332f..a13c1e7c712 100644 --- a/source/developers/hassio/addon_config.markdown +++ b/source/developers/hassio/addon_config.markdown @@ -10,188 +10,6 @@ footer: true redirect_from: /hassio/addon_config/ --- -Each add-on is stored in a folder. The file structure looks like this: - -``` -addon_name/ - Dockerfile - config.json - run.sh -``` - -## {% linkable_title Add-on script %} - -As with every Docker container, you will need a script to run when the container is started. A user might run many add-ons, so it is encouraged to try to stick to Bash scripts if you're doing simple things. - -When developing your script: - - - `/data` is a volume for persistent storage. - - `/data/options.json` contains the user configuration. You can use `jq` inside your shell script to parse this data. However, you might have to install `jq` as a separate package in your container (see `Dockerfile` below). - -```bash -CONFIG_PATH=/data/options.json - -TARGET="$(jq --raw-output '.target' $CONFIG_PATH)" -``` - -So if your `options` contain -```json -{ "target": "beer" } -``` -then there will be a variable `TARGET` containing `beer` in the environment of your bash file afterwards. - -## {% linkable_title Add-on Docker file %} - -All add-ons are based on Alpine Linux 3.6. Hass.io will automatically substitute the right base image based on the machine architecture. Add `tzdata` if you need run in a different timezone. `tzdata` Is is already added to our base images. - -``` -ARG BUILD_FROM -FROM $BUILD_FROM - -ENV LANG C.UTF-8 - -# Install requirements for add-on -RUN apk add --no-cache jq - -# Copy data for add-on -COPY run.sh / -RUN chmod a+x /run.sh - -CMD [ "/run.sh" ] -``` - -If you don't use local build on device or our build script, make sure that the Dockerfile have also a set of labels include: -``` -LABEL io.hass.version="VERSION" io.hass.type="addon" io.hass.arch="armhf|aarch64|i386|amd64" -``` - -It is possible to use own base image with `build.json` or if you do not need support for automatic multi-arch building you can also use a simple docker `FROM`. - -### {% linkable_title Build Args %} - -We support the following build arguments by default: - -| ARG | Description | -|-----|-------------| -| BUILD_FROM | Hold image for dynamic builds or buildings over our systems. -| BUILD_VERSION | Add-on version (read from `config.json`). -| BUILD_ARCH | Hold current build arch inside. - -## {% linkable_title Add-on config %} - -The config for an add-on is stored in `config.json`. - -```json -{ - "name": "xy", - "version": "1.2", - "slug": "folder", - "description": "long description", - "arch": ["amd64"], - "url": "website with more information about add-on (ie a forum thread for support)", - "startup": "application", - "boot": "auto", - "ports": { - "123/tcp": 123 - }, - "map": ["config:rw", "ssl"], - "options": {}, - "schema": {}, - "image": "repo/{arch}-my-custom-addon" -} -``` - -| Key | Required | Description | -| --- | -------- | ----------- | -| name | yes | Name of the add-on -| version | yes | Version of the add-on -| slug | yes | Slug of the add-on -| description | yes | Description of the add-on -| arch | no | List of supported arch: `armhf`, `aarch64`, `amd64`, `i386`. Default all. -| url | no | Homepage of the addon. Here you can explain the add-ons and options. -| startup | yes | `initialize` will start addon on setup of Hass.io. `system` is for things like databases and not dependent on other things. `services` will start before Home Assistant, while `application` is started afterwards. Finally `once` is for applications that don't run as a daemon. -| webui | no | A URL for web interface of this add-on. Like `http://[HOST]:[PORT:2839]/dashboard`, the port needs the internal port, which will be replaced with the effective port. It is also possible to bind the proto part to a config options with: `[PROTO:option_name]://[HOST]:[PORT:2839]/dashboard` and he lookup if they is True and going to `https`. -| boot | yes | `auto` by system and manual or only `manual` -| ports | no | Network ports to expose from the container. Format is `"container-port/type": host-port`. -| host_network | no | If that is True, the add-on run on host network. -| devices | no | Device list to map into the add-on. Format is: `::`. i.e. `/dev/ttyAMA0:/dev/ttyAMA0:rwm` -| hassio_api | no | This add-on can access to Hass.io REST API. It set the host alias `hassio`. -| homeassistant_api | no | This add-on can access to Hass.io Home-Assistant REST API proxy. Use `http://hassio/homeassistant/api`. -| privileged | no | Privilege for access to hardware/system. Available access: `NET_ADMIN`, `SYS_ADMIN`, `SYS_RAWIO` -| map | no | List of maps for additional Hass.io folders. Possible values: `config`, `ssl`, `addons`, `backup`, `share`. Defaults to `ro`, which you can change by adding `:rw` to the end of the name. -| environment | no | A dict of environment variable to run add-on. -| audio | no | Boolean. Mark this add-on to use internal an audio system. The available environment variables are `ALSA_INPUT` and `ALSA_OUTPUT` which provide internal information to access alsa. -| gpio | no | Boolean. If this is set to True, `/sys/class/gpio` will map into add-on for access to GPIO interface from kernel. Some library need also `/dev/mem` and `SYS_RAWIO` for read/write access to this device. -| stdin | no | Boolean. If that is enable, you can use the STDIN with Hass.io API. -| legacy | no | Boolean. If the docker image have no hass.io labels, you can enable the legacy mode to use the config data. -| options | yes | Default options value of the add-on -| schema | yes | Schema for options value of the add-on. It can be `False` to disable schema validation and use custom options. -| image | no | For use with Docker Hub. -| timeout | no | Default 10 (second). The timeout to wait until the docker is done or will be killed. -| tmpfs | no | Mount a tmpfs file system in `/tmpfs`. Valide format for this option is : `size=XXXu,uid=N,rw`. Size is mandatory, valid units (`u`) are `k`, `m` and `g` and `XXX` has to be replaced by a number. `uid=N` (with `N` the uid number) and `rw` are optional. - -### {% linkable_title Options / Schema %} - -The `options` dictionary contains all available options and their default value. Set the default value to `null` if the value is required to be given by the user before the add-on can start, and it show it inside default values. Only nested arrays and dictionaries are supported with a deep of two size. If you want make a option optional, put `?` to the end of data type, otherwise it will be a required value. - -```json -{ - "message": "custom things", - "logins": [ - { "username": "beer", "password": "123456" }, - { "username": "cheep", "password": "654321" } - ], - "random": ["haha", "hihi", "huhu", "hghg"], - "link": "http://example.com/", - "size": 15, - "count": 1.2 -} -``` - -The `schema` looks like `options` but describes how we should validate the user input. For example: - -```json -{ - "message": "str", - "logins": [ - { "username": "str", "password": "str" } - ], - "random": ["match(^\w*$)"], - "link": "url", - "size": "int(5,20)", - "count": "float", - "not_need": "str?" -} -``` - -We support: -- str -- bool -- int / int(min,) / int(,max) / int(min,max) -- float / float(min,) / float(,max) / float(min,max) -- email -- url -- port -- match(REGEX) - -## {% linkable_title Add-on extended build %} - -Additional build options for an add-on is stored in `build.json`. This file will be read from our build systems. - -```json -{ - "build_from": { - "armhf": "homeassistant/armhf-base:latest" - }, - "squash": false, - "args": { - "my_build_arg": "xy" - } -} -``` - -| Key | Required | Description | -| --- | -------- | ----------- | -| build_from | no | A dictionary with the hardware architecture as the key and the base Docker image as value. -| squash | no | Default `False`. Be carfully with this option, you can not use the image for caching stuff after that! -| args | no | Allow to set additional Docker build arguments as a dictionary. + \ No newline at end of file diff --git a/source/developers/hassio/addon_development.markdown b/source/developers/hassio/addon_development.markdown index 40680cd1415..1a99e8f3842 100644 --- a/source/developers/hassio/addon_development.markdown +++ b/source/developers/hassio/addon_development.markdown @@ -10,15 +10,6 @@ footer: true redirect_from: /hassio/addon_development/ --- -Add-ons for Hass.io allow the user to extend the functionality around Home Assistant. This can be running an application that Home Assistant can integrate with (like an MQTT broker) or to share the configuration via Samba for easy editing from other computers. Add-ons can be configured via the Hass.io panel in Home Assistant. - -Under the hood, add-ons are Docker images published in [Docker Hub](https://hub.docker.com/). Developers can create [GitHub](https://github.com) repositories that contain multiple references to add-ons for easy sharing with the community. - -
    -
  1. Tutorial: Making your first add-on
  2. -
  3. Configuration
  4. -
  5. Communication
  6. -
  7. Local Testing
  8. -
  9. Publishing
  10. -
  11. Repositories
  12. -
+ \ No newline at end of file diff --git a/source/developers/hassio/addon_presentation.markdown b/source/developers/hassio/addon_presentation.markdown new file mode 100644 index 00000000000..26ee4f20d2b --- /dev/null +++ b/source/developers/hassio/addon_presentation.markdown @@ -0,0 +1,14 @@ +--- +layout: page +title: "Presenting your add-on" +description: "Details on how to present your Hass.io add-on." +date: 2018-01-24 22:15 +sidebar: true +comments: false +sharing: true +footer: true +--- + + \ No newline at end of file diff --git a/source/developers/hassio/addon_publishing.markdown b/source/developers/hassio/addon_publishing.markdown index 4d77c53bc8c..735dbe70933 100644 --- a/source/developers/hassio/addon_publishing.markdown +++ b/source/developers/hassio/addon_publishing.markdown @@ -10,52 +10,6 @@ footer: true redirect_from: /hassio/addon_publishing/ --- -There are two different ways of publishing add-ons. One is to publish pre-build containers to Docker Hub and the other option is to have users build the containers locally on their Hass.io instance. - -#### {% linkable_title Pre-build containers %} - -With pre-build containers, the developer is responsible for building the images for each architecture on their machine and push the results out to Docker Hub. This has a lot of advantages for the user. As a user it will only have to download the final container and be up and running once the download finishes. This makes the installation process fast and almost no chance of failure. This is the preferred method. - -We have automated the process of building and publishing add-ons. See below for the instructions. - -#### {% linkable_title Locally build containers %} - -Starting Hass.io 0.26, it is possible to distribute add-ons that will be built on the users machine. The advantage is that as a developer it is easy to test an idea and see if people are interested in your add-ons. This method includes installing and potentially compiling code. This means that installing such an add-on is slow and adds more wear and tear to users SD card/hard drive than the above mentioned pre-build solution. It also has a higher chance of failure if one of the dependencies of the container has changed or is no longer available. - -Use this option when you are playing with add-ons and seeing if someone is interested in your work. Once you're an established repository, please migrate to pushing builds to Docker Hub as it greatly improves the user experience. In the future we will mark locally built add-ons in the add-on store to warn users. - -## {% linkable_title Build scripts to publish add-ons to Docker Hub %} - -All add-ons are simple docker containers. Inside your add-on `config.json` you specify the Docker image that will be installed for your add-on: - -```json -{ - ... - - "image": "myhub/image-{arch}-addon-name", - - ... -} -``` - -You can use `{arch}` inside the image name to support multiple architectures with 1 configuration file. It will be replaced with the architecture of the user when we load the image. If you use `Buildargs` you can use the `build.json` to overwrite our default args. - -Hass.io assumes that the `master` branch of your add-on repository matches the latest tag on Docker Hub. When you're building a new version, it's suggested that you use another branch, ie `build` or do it with a PR on GitHub. After you push the add-on to [Docker Hub](https://hub.docker.com/), you can merge this branch to master. - -## {% linkable_title Custom Add-ons %} - -You need a Docker Hub account to make your own add-ons. You can build your docker images with docker `build` command or use our script that make it simple. Pull our [builder docker engine][builder] and run one of the following commands. - -For a git repository: - -```bash -$ docker run --rm --privileged -v ~/.docker:/root/.docker homeassistant/amd64-builder --all -t addon-folder -r https://github.com/xy/addons -b branchname -``` - -For a local repository: - -```bash -$ docker run --rm --privileged -v ~/.docker:/root/.docker -v /my_addon:/data homeassistant/amd64-builder --all -t /data -``` - -[builder]: https://github.com/home-assistant/hassio-build/tree/master/builder + \ No newline at end of file diff --git a/source/developers/hassio/addon_repository.markdown b/source/developers/hassio/addon_repository.markdown index 3ad7da57fe1..5e5797ff9f8 100644 --- a/source/developers/hassio/addon_repository.markdown +++ b/source/developers/hassio/addon_repository.markdown @@ -10,28 +10,6 @@ footer: true redirect_from: /hassio/addon_repository/ --- -An Add-on repository can contain one or more add-ons. Each add-on is stored in it's own unique folder. To be indentified as a repository, the repository must contain a configuration file. - -Check the [Example add-on repository](https://github.com/home-assistant/hassio-addons-example) for further details. - -## {% linkable_title Installing a repository %} - -A user can add a repository by going to the Hass.io panel in Home Assistant, clicking on the store icon in the top right, copy/paste the URL of your repostory into the repository textarea and click on **Save**. - -## {% linkable_title Repository configuration %} - -Each repository is required to contain `repository.json` at the root in the git repository. - -```json -{ - "name": "Name of repository", - "url": "http://www.example/addons", - "maintainer": "HomeAssistant Team " -} -``` - -| Key | Required | Description | -| --- | -------- | ----------- | -| name | yes | Name of the repository -| url | no | Homepage of the repository. Here you can explain the various add-ons. -| maintainer | no | Contact info of the maintainer. + \ No newline at end of file diff --git a/source/developers/hassio/addon_testing.markdown b/source/developers/hassio/addon_testing.markdown index d1a2dfc17f8..8c8eaa50cc9 100644 --- a/source/developers/hassio/addon_testing.markdown +++ b/source/developers/hassio/addon_testing.markdown @@ -10,28 +10,6 @@ footer: true redirect_from: /hassio/addon_testing/ --- -The fastest way to develop add-ons is by adding them to your local add-on repository. To access your local add-on repository, install either the [Samba add-on] or [SSH add-on]. - -Right now add-ons will work with images that are stored on Docker Hub (using `image` from add-on config). Without `image` inside local add-ons repository it to be built on the device. - -## {% linkable_title Local build %} - -You can build an try the addon on your developer machine also. Move all addon stuff into a temp folder. If you use `FROM $BUILD_FROM` you need set a base image with build args. Normally you can use follow base images: - -- armhf: `homeassistant/armhf-base:latest` -- aarch64: `homeassistant/aarch64-base:latest` -- amd64: `homeassistant/amd64-base:latest` -- i386: `homeassistant/i386-base:latest` - -Use `docker` to build the test addon: `docker build --build-arg BUILD_FROM="homeassistant/amd64-base:latest" -t local/my-test-addon .` - -## {% linkable_title Local run %} - -Create a new folder for data and add a test _options.json_ file. After that you can run your add-on with: `docker run --rm -v /tmp/my_test_data:/data -p PORT_STUFF_IF_NEEDED local/my-test-addon` - -## {% linkable_title Logs %} - -All stdout and stderr are redirected to the Docker logs. The logs can be fetched from the add-on page inside the Hass.io panel in Home Assistant. - -[Samba add-on]: /addons/samba/ -[SSH add-on]: /addons/ssh/ + \ No newline at end of file diff --git a/source/developers/hassio/addon_tutorial.markdown b/source/developers/hassio/addon_tutorial.markdown index ebd8dd646bf..cca2f3a2f79 100644 --- a/source/developers/hassio/addon_tutorial.markdown +++ b/source/developers/hassio/addon_tutorial.markdown @@ -10,199 +10,6 @@ footer: true redirect_from: /hassio/addon_tutorial/ --- -So you've got Home Assistant going and you've been enjoying the built-in add-ons but you're missing this one application. Time to make your own add-on! In Hass.io 0.24 we introduced the option to have local add-ons be build on your device. This is great for developing new add-ons locally. - -To get started with developing add-ons, we first need access to where Hass.io looks for local add-ons. For this you can use the Samba add-on or the SSH add-on. - -For Samba, once you have enabled and started it, your Hass.io instance will show up in your local network tab and share a folder called "addons". This is the folder to store your custom add-ons. - -If you are on macOS and the folder is not showing up automatically, go to Finder and press CMD+K then enter 'smb://hassio.local' - -

- -With Samba add-on enabled, you can browse to your Hass.io server over the local network. It will contain an addons folder to store your local add-ons. -

- -For SSH, you will have to install it. Before you can start it, you will have to have a private/public key pair and store your public key in the add-on config ([see docs for more info][ssh]). Once started, you can SSH to Hass.io and store your custom add-ons in "/addons". - -

- -Once you SSH into your Hass.io box, you have access to your add-ons in "/addons". -

- -Once you have located your add-on directory, it's time to get started! - -[ssh]: /addons/ssh/ - -## {% linkable_title Step 1: The basics %} - - - Create a new directory called `hello_world` - - Inside that directory create three files. - -`Dockerfile`: -``` -ARG BUILD_FROM -FROM $BUILD_FROM - -ENV LANG C.UTF-8 - -# Copy data for add-on -COPY run.sh / -RUN chmod a+x /run.sh - -CMD [ "/run.sh" ] -``` - -`config.json`: -```json -{ - "name": "Hello world", - "version": "1", - "slug": "hello_world", - "description": "My first real add-on!", - "startup": "before", - "boot": "auto", - "options": {}, - "schema": {} -} -``` - -`run.sh`: -```bash -echo Hello world! -``` - -## {% linkable_title Step 2: Installing and testing your add-on %} - -Now comes the fun part, time to open the Hass.io UI and install and run your add-on. - - - Open the Home Assistant frontend - - Go to the Hass.io panel - - On the top right click the shopping basket to go to the add-on store. - -

- -From the Hass.io main panel open the add-on store. -

- - - On the top right click the refresh button - - You should now see a new card called "Local" that lists your add-on! - -

- -The Hass.io add-on store will list all available local add-ons. -

- - - Click on your add-on to go to the add-on details page. - - Install your add-on - - Start your add-on - - Refresh the logs of your add-on, you should now see "Hello world!" in your logs. - -

- -The add-on will print Hello world to the logs and then quit. -

- -### {% linkable_title I don't see my add-on?! %} - -Oops! You clicked refresh in the store and your add-on didn't show up. Or maybe you just updated an option, clicked refresh and saw your add-on disappear. - -When this happens, it means that your `config.json` is invalid. It's either invalid JSON or one of the specified options is incorrect. To see what went wrong, go to the Hass.io panel and in the supervisor card click on "View logs". This should bring you to a page with the logs of the supervisor. Scroll to the bottom and you should be able to find the validation error. - -Once you fixed the error, go to the add-on store and click refresh again. - -## {% linkable_title Step 3: Hosting a server %} - -Until now we've been able to do some basic stuff, but it's not very useful yet. So let's take it one step further and host a server that we expose on a port. For this we're going to use the built-in HTTP server that comes with Python 3. - -To do this, we will need to update our files as follows: - - - `Dockerfile`: Install Python 3 - - `config.json`: Make the port from the container available on the host - - `run.sh`: Run the Python 3 command to start the HTTP server - -Add to your `Dockerfile` before `RUN`: - -``` -# Install requirements for add-on -RUN apk add --no-cache python3 - -# Python 3 HTTP Server serves the current working dir -# So let's set it to our add-on persistent data directory. -WORKDIR /data -``` - -Add "ports" to `config.json`. This will make TCP on port 8000 inside the container available on the host on port 8000. - -```json -{ - "name": "Hello world", - "version": "0.2", - "slug": "hello_world", - "description": "My first real add-on!", - "startup": "before", - "boot": "auto", - "options": {}, - "schema": {}, - "ports": { - "8000/tcp": 8000 - } -} -``` - -Update `run.sh` to start the Python 3 server: - -``` -python3 -m http.server -``` - -## {% linkable_title Step 4: Installing the update %} - -Since we updated the version number in our `config.json`, Home Assistant will show an update button when looking at the add-on details. You might have to refresh your browser or click the refresh button in the add-on store for it to show up. If you did not update the version number, you can also uninstall and install the add-on again. After installing the add-on again, make sure you start it. - -Now navigate to [http://hassio.local:8000](http://hassio.local:8000) to see our server in action! - -

- -The Python 3 server will allow you to browse the /data folder. -

- -## {% linkable_title Bonus: Working with add-on options %} - -In the screenshot you've probably seen that our server only served up 1 file: `options.json`. This file contains the user configuration for this add-on. Because we specified an empty "config" and "schema" in our `config.json`, the file is currently empty. - -Let's see if we can get some data into that file! - -To do this, we need to specify the default options and a schema for the user to change the options. - -Change the options and schema entries in your `config.json` with the following: - -```json -{ - … - - "options": { - "beer": true, - "wine": true, - "liquor": false, - "name": "world", - "year": 2017 - }, - "schema": { - "beer": "bool", - "wine": "bool", - "liquor": "bool", - "name": "str", - "year": "int" - }, - - … -} -``` - -Refresh the add-on store and re-install your add-on. You will now see the options available in the add-on config screen. When you now go back to our Python 3 server and download `options.json`, you'll see the options you set. - - - [Learn more about the available schema options.](/hassio/addon_config/#options--schema) - - [See how options.json can be used inside `run.sh`](https://github.com/home-assistant/hassio-addons/blob/master/mosquitto/run.sh#L4-L6) - -### [Next step: Add-on config reference »](/developers/hassio/addon_config/) + \ No newline at end of file diff --git a/source/developers/hassio/architecture.markdown b/source/developers/hassio/architecture.markdown index 173e3657ae3..5b3a12f53c7 100644 --- a/source/developers/hassio/architecture.markdown +++ b/source/developers/hassio/architecture.markdown @@ -10,30 +10,6 @@ footer: true redirect_from: /hassio/architecture/ --- -

- Architecture overview of Hass.io - Architecture overview of Hass.io -

- -### {% linkable_title Host Control (HC) %} - -This is a daemon running on the host machine that allows the supervisor to control certain aspects of the host OS: - - - Power cycle (restart, turn off) - - Manage network settings - - Local updates - -### {% linkable_title Host %} - -Our pre-build images are based on [ResinOS]. Any Linux machine can be turned into a Hass.io host by running [the installer][linux]. - -### {% linkable_title Supervisor %} - -The supervisor offers an API to manage the host and running the Docker containers. - -### {% linkable_title Configuration panel %} - -The configuration panel lives inside the supervisor but is accessible via the Home Assistant user interface. The configuration panel allows the user to manage the installation. - -[ResinOS]: https://resinos.io/ -[linux]: /hassio/installation/#alternative-install-on-generic-linux-server + \ No newline at end of file diff --git a/source/developers/hassio/debugging.markdown b/source/developers/hassio/debugging.markdown index 01a92c98ea8..be66c18e375 100644 --- a/source/developers/hassio/debugging.markdown +++ b/source/developers/hassio/debugging.markdown @@ -10,46 +10,6 @@ footer: true redirect_from: /hassio/debugging/ --- -

-This section is not for users. Use the [SSH add-on] to SSH into Hass.io. This is for developers of Hass.io. Do not ask for support if you are using these options. -

- -[SSH add-on]: /addons/ssh/ - -The following debug tips and tricks are for people who are running the Hass.io image and are working on the base image. If you use the generic Linux installer script, you should be able to access your host and logs as per your host. - -## {% linkable_title SSH access to the host %} - -Create an `authorized_keys` file containing your public key, and place it in the root of the boot partition of your SD card. Once the device is booted, you can access your device as root over SSH on port 22222. - -Windows instructions how to generate and use private/public keys with Putty are [here][windows-keys]. Instead of the droplet instructions, add the public key as per above instructions. - -Alternative instructions, for Mac, Windows and Linux can be found [here](https://help.github.com/articles/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent/#platform-mac). - -Follow steps 1-4 under 'Generating a new SSH key' (The other sections are not applicable to Hass.io and can be ignored.) - -Step 3 in the link above, shows the path to the private key file `id_rsa` for your chosen operating system. Your public key, `id_rsa.pub`, is saved in the same folder. Next, copy your public key file to the root of your SD card as `authorized_keys`. - -

-Make sure when you are copying the public key to the root of the /resin-boot partition of the SD card that you rename the file correctly to `authorized_keys` with no `.pub` file extension. -

- -You should then be able to SSH into your Hass.io device. On mac/linux, use: -``` -ssh root@hassio.local -p 22222 -``` - -## {% linkable_title Checking the logs %} - -```bash -# Logs from the supervisor service on the Host OS -journalctl -f -u resin-supervisor.service - -# Hass.io supervisor logs -docker logs hassio_supervisor - -# Home Assistant logs -docker logs homeassistant -``` - -[windows-keys]: https://www.digitalocean.com/community/tutorials/how-to-use-ssh-keys-with-putty-on-digitalocean-droplets-windows-users + \ No newline at end of file diff --git a/source/developers/helpers.markdown b/source/developers/helpers.markdown index 4b9e7f59b97..8916b56c68e 100644 --- a/source/developers/helpers.markdown +++ b/source/developers/helpers.markdown @@ -9,18 +9,6 @@ sharing: true footer: true --- -There are a bunch of online services which can help you if you are developing for Home Assistant or maintaining components. Some of these are directly connected to Pull Requests and the repositories, while others publish details and updates on our [Discord chat server][discord-devs]. - -- [Coveralls][coveralls] -- [Travis CI][travis-ci] -- [gemnasium][gemnasium] -- [Requires.io][requires-io] -- [Pivotal Tracker][pivotal] - -[coveralls]: https://coveralls.io/github/home-assistant/home-assistant -[travis-ci]: https://travis-ci.org/home-assistant/home-assistant -[gemnasium]: https://gemnasium.com/github.com/home-assistant/home-assistant -[requires-io]: https://requires.io/github/home-assistant/home-assistant/requirements/?branch=dev -[pivotal]: https://www.pivotaltracker.com/n/projects/1250084 - -[discord-devs]: https://discord.gg/8X8DTH4 + \ No newline at end of file diff --git a/source/developers/index.markdown b/source/developers/index.markdown index c801866e6aa..3248e7192bf 100644 --- a/source/developers/index.markdown +++ b/source/developers/index.markdown @@ -10,17 +10,6 @@ footer: true og_image: /images/architecture/component_interaction.png --- -Welcome to the Home Assistant development documentation. This is the place to learn all about how Home Assistant works and how you can extend it with support for your devices and services! - -

-Diagram showing interaction between components and the Home Assistant core. -Diagram showing interaction between components and the Home Assistant core. -

- -The best way to familiarize yourself with Home Assistant is to watch the PyCon 2016 talk about Home Assistant and read through the [Python API docs]. - -
- -
- -[Python API docs]: https://dev-docs.home-assistant.io + \ No newline at end of file diff --git a/source/developers/intent/conversation.markdown b/source/developers/intent/conversation.markdown index 38d02fe337a..ea4cad2a452 100644 --- a/source/developers/intent/conversation.markdown +++ b/source/developers/intent/conversation.markdown @@ -9,19 +9,6 @@ sharing: true footer: true --- -The conversation component handles incoming commands from the frontend and converts them to intents. It does this based on registered sentences. - -As a component, you can register sentences with the conversation component to allow it to be remote controlled. Refer to named slots by putting the slot name between curly braces: `{item}`. - -Example code: - -```python -@asyncio.coroutine -def async_setup(hass, config): - hass.components.conversation.async_register('MyCoolIntent', [ - 'I think that {object} is very cool', - 'Nothing is cooler than {object}' - ]) -``` - -If a sentence like "I think that beer is very cool" comes in, the conversation component will generate an intent of type `MyCoolIntent` and with 1 slot, named `object` and value `beer`. + \ No newline at end of file diff --git a/source/developers/intent/firing.markdown b/source/developers/intent/firing.markdown index 17e80678b4b..b8e10eff201 100644 --- a/source/developers/intent/firing.markdown +++ b/source/developers/intent/firing.markdown @@ -9,51 +9,6 @@ sharing: true footer: true --- -When you fire an intent, you will get a response back or an error will be raised. It is up to the component to return the result to the user. - -Example code to handle an intent in Home Assistant. - -```python -from homeassistant.helpers import intent - -intent_type = 'TurnLightOn' -slots = { - 'entity': { 'value': 'Kitchen' } -} - -try: - intent_response = yield from intent.async_handle( - hass, 'example_component', intent_type, slots - ) - -except intent.UnknownIntent as err: - _LOGGER.warning('Received unknown intent %s', intent_type) - -except intent.InvalidSlotInfo as err: - _LOGGER.error('Received invalid slot data: %s', err) - -except intent.IntentError: - _LOGGER.exception('Error handling request for %s', intent_type) -``` - -The intent response is an instance of `homeassistant.helpers.intent.IntentResponse`. - -| Name | Type | Description | -| ---- | ---- | ----------- | -| `intent` | Intent | Instance of intent that triggered response. | -| `speech` | Dictionary | Speech responses. Each key is a type. Allowed types are `plain` and `ssml`. | -| `card` | Dictionary | Card responses. Each key is a type. | - -Speech dictionary values: - -| Name | Type | Description | -| ---- | ---- | ----------- | -| `speech` | String | The text to say -| `extra_data` | Any | Extra information related to this speech. - -Card dictionary values: - -| Name | Type | Description | -| ---- | ---- | ----------- | -| `title` | String | The title of the card -| `content` | Any | The content of the card + \ No newline at end of file diff --git a/source/developers/intent/handling.markdown b/source/developers/intent/handling.markdown index c341f6ef178..040d2d01dc7 100644 --- a/source/developers/intent/handling.markdown +++ b/source/developers/intent/handling.markdown @@ -9,41 +9,6 @@ sharing: true footer: true --- -Any component can register to handle intents. This allows a single component to handle intents fired from multiple voice assistants. - -A component has to register an intent handler for each type that it wants to handle. Intent handlers have to extend `homeassistant.helpers.intent.IntentHandler` - -```python -import asyncio -from homeassistant.helpers import intent - -DATA_KEY = 'example_key' - -@asyncio.coroutine -def async_setup(hass, config): - hass.data[DATA_KEY] = 0 - intent.async_register(hass, CountInvocationIntent()) - - -class CountInvocationIntent(intent.IntentHandler): - """Handle CountInvocationIntent intents.""" - - # Type of intent to handle - intent_type = 'CountInvocationIntent' - - # Optional. A validation schema for slots - # slot_schema = { - # 'item': cv.string - # } - - @asyncio.coroutine - def async_handle(self, intent_obj): - """Handle the intent.""" - intent_obj.hass.data[DATA_KEY] += 1 - - response = intent_obj.create_response() - response.async_set_speech( - "This intent has been invoked {} times".format( - intent_obj.hass.data[DATA_KEY])) - return response -``` + \ No newline at end of file diff --git a/source/developers/intent/index.markdown b/source/developers/intent/index.markdown index a454deecbcc..a00395d8a83 100644 --- a/source/developers/intent/index.markdown +++ b/source/developers/intent/index.markdown @@ -9,29 +9,6 @@ sharing: true footer: true --- -An intent is a description of a user's intention. Intents are generated by user actions, like asking Amazon Echo to turn on a light. - -

- -Architectural overview of intents in Home Assistant -

- -Intents are fired by components that receive them from external sources/services. Conversation, Alexa, API.ai and Snips are currently sourcing intents. - -Any component can handle intents. This makes it very easy for developers to integrate with all voice assistants at once. - -Intents are implemented using the `homeassistant.helpers.intent.Intent` class. It contains the following properties: - -| Name | Type | Description | -| ---- | ---- | ----------- | -| `hass` | Home Assistant | The Home Assistant instance that fired the intent. -| `platform` | string | The platform that fired the intent -| `intent_type` | string | The type (name) of the intent -| `slots` | dictionary | Contains the slot values keyed by slot name. -| `text_input` | string | Optional. The raw text input that initiated the intent. - -Description of the slots dictionary values. - -| Name | Type | Description | -| ---- | ---- | ----------- | -| Value | anything | Value of the slot. + \ No newline at end of file diff --git a/source/developers/internationalization/backend_localization.markdown b/source/developers/internationalization/backend_localization.markdown new file mode 100644 index 00000000000..2c2413fc218 --- /dev/null +++ b/source/developers/internationalization/backend_localization.markdown @@ -0,0 +1,15 @@ +--- +layout: page +title: "Backend Localization" +description: "Translating platforms in Home Assistant" +date: 2018-03-01 18:00 +sidebar: true +comments: false +sharing: true +footer: true +ha_release: 0.64 +--- + + \ No newline at end of file diff --git a/source/developers/internationalization/custom_component_localization.markdown b/source/developers/internationalization/custom_component_localization.markdown new file mode 100644 index 00000000000..d0c6ecdc2f9 --- /dev/null +++ b/source/developers/internationalization/custom_component_localization.markdown @@ -0,0 +1,15 @@ +--- +layout: page +title: "Custom Component Localization" +description: "Translating custom components in Home Assistant" +date: 2018-03-01 18:00 +sidebar: true +comments: false +sharing: true +footer: true +ha_release: 0.64 +--- + + \ No newline at end of file diff --git a/source/developers/internationalization/index.markdown b/source/developers/internationalization/index.markdown new file mode 100644 index 00000000000..ed93383a946 --- /dev/null +++ b/source/developers/internationalization/index.markdown @@ -0,0 +1,15 @@ +--- +layout: page +title: "Internationalization" +description: "Home Assistant internationalization summary" +date: 2018-03-01 18:00 +sidebar: true +comments: false +sharing: true +footer: true +ha_release: 0.64 +--- + + \ No newline at end of file diff --git a/source/developers/internationalization/translation.markdown b/source/developers/internationalization/translation.markdown new file mode 100644 index 00000000000..411e5a09cb0 --- /dev/null +++ b/source/developers/internationalization/translation.markdown @@ -0,0 +1,16 @@ +--- +layout: page +title: "Translation" +description: "How to translate Home Assistant." +date: 2017-10-27 13:00 +sidebar: true +comments: false +sharing: true +footer: true +ha_release: 0.57 +redirect_from: /developers/frontend_translation/ +--- + + \ No newline at end of file diff --git a/source/developers/maintenance.markdown b/source/developers/maintenance.markdown index 4f48326ceb3..d36bb625a01 100644 --- a/source/developers/maintenance.markdown +++ b/source/developers/maintenance.markdown @@ -9,34 +9,6 @@ sharing: true footer: true --- -This page documents a couple of points for maintaining the Home Assistant code. Most of the tasks don't need to be performed on a regular base thus the steps, used tools, or details are preserved here. - -### {% linkable_title Line separator %} - -People are using various operating systems to develop components and platforms for Home Assistant. This could lead to different line endings on file. We prefer `LN`. Especially Microsoft Windows tools tend to use `CRLF`. - -```bash -$ find homeassistant -name "*.py" -exec file {} \; | grep BOM -$ find homeassistant -name "*.py" -exec file {} \; | grep CRLF -``` - -To fix the line separator, use `dos2unix` or `sed`. - -```bash -$ dos2unix homeassistant/components/notify/kodi.py -``` - -### {% linkable_title Dependencies %} - -A lot of components and platforms depends on third-party Python modules. The dependencies which are stored in the `requirements_*.txt` files are tracked by [gemnasium](https://gemnasium.com/github.com/home-assistant/home-assistant) and [Requires.io](https://requires.io/github/home-assistant/home-assistant/requirements/?branch=dev). - -If you update the requirements of a component/platform through the `REQUIREMENTS = ['modules-xyz==0.3']` entry, run the provided script to update the `requirements_*.txt` file(s). - -```bash -$ script/gen_requirements_all.py -``` - -Start a test run of Home Assistant. If that was successful, include all files in a Pull Request. Add a short summary of the changes, a sample configuration entry, details about the tests you performed to ensure the update works, and other useful information to the description. - - - + \ No newline at end of file diff --git a/source/developers/multiple_instances.markdown b/source/developers/multiple_instances.markdown index ffdfd6b5053..6669c7016d6 100644 --- a/source/developers/multiple_instances.markdown +++ b/source/developers/multiple_instances.markdown @@ -9,37 +9,6 @@ sharing: true footer: true --- -# {% linkable_title This has been deprecated and is no longer supported. %} - -Home Assistant supports running multiple synchronised instances using a master-slave model. Whenever `events.fire` or `states.set` is called on the slave it will forward it to the master. The master will replicate all events and changed states to its slaves. - -

- - - - Overview of the Home Assistant architecture for multiple devices. -

- -A slave instance can be started with the following code and has the same support for components as a master instance. - -```python -import homeassistant.remote as remote -import homeassistant.bootstrap as bootstrap - -# Location of the Master API: host, password, port. -# Password and port are optional. -remote_api = remote.API("127.0.0.1", "password", 8124) - -# Initialize slave -hass = remote.HomeAssistant(remote_api) - -# To add an interface to the slave on localhost:8123 -bootstrap.setup_component(hass, 'frontend') - -hass.start() -hass.block_till_stopped() -``` - -

-Because each slave maintains its own Service Registry it is possible to have multiple slaves respond to one service call. -

+ \ No newline at end of file diff --git a/source/developers/platform_example_light.markdown b/source/developers/platform_example_light.markdown index 8a11eec73f5..2c067aed372 100644 --- a/source/developers/platform_example_light.markdown +++ b/source/developers/platform_example_light.markdown @@ -9,116 +9,6 @@ sharing: true footer: true --- -This example is for adding support for the imaginary Awesome Lights. It shows the different best practices for developing a platform. - -Similar to Example Sensor Platform, copy the code below, and create it as a file in `/custom_components/light/awesomelights.py`. - -Add the following to your configuration.yaml: - -```yaml -light: - - platform: awesomelights - host: HOST_HERE - username: USERNAME_HERE - password: PASSWORD_HERE_OR_secrets.yaml -``` - -Note the `platform` name matches the filename for the source code. - -```python -import logging - -import voluptuous as vol - -# Import the device class from the component that you want to support -from homeassistant.components.light import ATTR_BRIGHTNESS, Light, PLATFORM_SCHEMA -from homeassistant.const import CONF_HOST, CONF_USERNAME, CONF_PASSWORD -import homeassistant.helpers.config_validation as cv - -# Home Assistant depends on 3rd party packages for API specific code. -REQUIREMENTS = ['awesome_lights==1.2.3'] - -_LOGGER = logging.getLogger(__name__) - -# Validation of the user's configuration -PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({ - vol.Required(CONF_HOST): cv.string, - vol.Optional(CONF_USERNAME, default='admin'): cv.string, - vol.Optional(CONF_PASSWORD): cv.string, -}) - - -def setup_platform(hass, config, add_devices, discovery_info=None): - """Setup the Awesome Light platform.""" - import awesomelights - - # Assign configuration variables. The configuration check takes care they are - # present. - host = config.get(CONF_HOST) - username = config.get(CONF_USERNAME) - password = config.get(CONF_PASSWORD) - - # Setup connection with devices/cloud - hub = awesomelights.Hub(host, username, password) - - # Verify that passed in configuration works - if not hub.is_valid_login(): - _LOGGER.error("Could not connect to AwesomeLight hub") - return False - - # Add devices - add_devices(AwesomeLight(light) for light in hub.lights()) - - - -class AwesomeLight(Light): - """Representation of an Awesome Light.""" - - def __init__(self, light): - """Initialize an AwesomeLight.""" - self._light = light - self._name = light.name - self._state = None - self._brightness = None - - @property - def name(self): - """Return the display name of this light.""" - return self._name - - @property - def brightness(self): - """Return the brightness of the light. - - This method is optional. Removing it indicates to Home Assistant - that brightness is not supported for this light. - """ - return self._brightness - - @property - def is_on(self): - """Return true if light is on.""" - return self._state - - def turn_on(self, **kwargs): - """Instruct the light to turn on. - - You can skip the brightness part if your light does not support - brightness control. - """ - self._light.brightness = kwargs.get(ATTR_BRIGHTNESS, 255) - self._light.turn_on() - - def turn_off(self, **kwargs): - """Instruct the light to turn off.""" - self._light.turn_off() - - def update(self): - """Fetch new state data for this light. - - This is the only method that should fetch new data for Home Assistant. - """ - self._light.update() - self._state = self._light.is_on() - self._brightness = self._light.brightness -``` + \ No newline at end of file diff --git a/source/developers/platform_example_sensor.markdown b/source/developers/platform_example_sensor.markdown index 166b3071178..110ab631372 100644 --- a/source/developers/platform_example_sensor.markdown +++ b/source/developers/platform_example_sensor.markdown @@ -9,58 +9,6 @@ sharing: true footer: true --- -This is a minimum implementation of a platform for the sensor component. - -### {% linkable_title Installation %} - -Copy the code below and create it as a file in `/custom_components/sensor/example.py`. - -Add the following to your `configuration.yaml` file: - -```yaml -# Example configuration.yaml entry -sensor: - platform: example -``` - -### {% linkable_title Code %} - -```python -from homeassistant.const import TEMP_CELSIUS -from homeassistant.helpers.entity import Entity - - -def setup_platform(hass, config, add_devices, discovery_info=None): - """Setup the sensor platform.""" - add_devices([ExampleSensor()]) - - -class ExampleSensor(Entity): - """Representation of a Sensor.""" - - def __init__(self): - """Initialize the sensor.""" - self._state = None - - @property - def name(self): - """Return the name of the sensor.""" - return 'Example Temperature' - - @property - def state(self): - """Return the state of the sensor.""" - return self._state - - @property - def unit_of_measurement(self): - """Return the unit of measurement.""" - return TEMP_CELSIUS - - def update(self): - """Fetch new state data for the sensor. - - This is the only method that should fetch new data for Home Assistant. - """ - self._state = 23 -``` + \ No newline at end of file diff --git a/source/developers/python_api.markdown b/source/developers/python_api.markdown index 2e752f80b4c..2e3ed1ba299 100644 --- a/source/developers/python_api.markdown +++ b/source/developers/python_api.markdown @@ -9,228 +9,6 @@ sharing: true footer: true --- -See the [developer documentation][devdocs] for a full overview of the documentation. The rest of this page will contain examples on how to use it. - -[devdocs]: https://dev-docs.home-assistant.io/en/master/api/homeassistant.html#module-homeassistant.remote - -In the package [`homeassistant.remote`](https://github.com/home-assistant/home-assistant/blob/master/homeassistant/remote.py) a Python API on top of the [HTTP API](/developers/api/) can be found. - -A simple way to get all current entities is to visit the "Set State" page in the "Developer Tools". For the examples below just choose one from the available entries. Here the sensor `sensor.office_temperature` and the switch `switch.livingroom_pin_2` are used. - -First import the module and setup the basics: - -```python -import homeassistant.remote as remote - -api = remote.API('127.0.0.1', 'password') -print(remote.validate_api(api)) -``` - -### {% linkable_title Get configuration %} - -Get the current configuration of a Home Assistant instance: - -```python -import homeassistant.remote as remote - -api = remote.API('127.0.0.1', 'password') - -print(remote.get_config(api)) -``` - -### {% linkable_title Get details about services, events, and entitites %} - -The output from this is similar to the output you'd find via the frontend, using the [Developer Tools](/docs/tools/dev-tools/). - -```python -import homeassistant.remote as remote - -api = remote.API('127.0.0.1', 'YOUR_PASSWORD') - -print('-- Available services:') -services = remote.get_services(api) -for service in services: - print(service['services']) - -print('\n-- Available events:') -events = remote.get_event_listeners(api) -for event in events: - print(event) - -print('\n-- Available entities:') -entities = remote.get_states(api) -for entity in entities: - print(entity) -``` - -### {% linkable_title Get the state of an entity %} - -To get the details of a single entity, use `get_state`: - -```python -import homeassistant.remote as remote - -api = remote.API('127.0.0.1', 'YOUR_PASSWORD') -office_temp = remote.get_state(api, 'sensor.office_temperature') -print('{} is {} {}.'.format( - office_temp.name, office_temp.state, - office_temp.attributes['unit_of_measurement']) -) -``` - -This outputs the details which are stored for this entity, ie: - -```bash -Office Temperature is 19 °C. -``` - -Switches work the same way. The only difference is that both entities have different attributes. - -```python -import homeassistant.remote as remote - -api = remote.API('127.0.0.1', 'YOUR_PASSWORD') -switch_livingroom = remote.get_state(api, 'switch.livingroom_pin_2') -print('{} is {}.'.format( - switch_livingroom.name, switch_livingroom.state) -) -``` - -### {% linkable_title Set the state of an entity %} - -Of course, it's possible to set the state as well: - -```python -import homeassistant.remote as remote -from homeassistant.const import STATE_ON - -api = remote.API('127.0.0.1', 'YOUR_PASSWORD') -remote.set_state(api, 'sensor.office_temperature', new_state=123) -remote.set_state(api, 'switch.livingroom_pin_2', new_state=STATE_ON) -``` - -The state will be set to the new values until the next update occurs. - -### {% linkable_title Blinking all entities of a domain %} - -If you want to turn on all entities of a domain, retrieve the service via `get_services` and act on that: - - -```python -import time -import homeassistant.remote as remote - -api = remote.API('127.0.0.1', 'YOUR_PASSWORD') -domain = 'switch' - -remote.call_service(api, domain, 'turn_on') -time.sleep(10) -remote.call_service(api, domain, 'turn_off') -``` - -### {% linkable_title Control a single entity %} - -To turn on or off a single switch, pass the ID of the entity: - -```python -import time -import homeassistant.remote as remote - -api = remote.API('127.0.0.1', 'YOUR_PASSWORD') -domain = 'switch' -switch_name = 'switch.livingroom_pin_2' - -remote.call_service(api, domain, 'turn_on', {'entity_id': '{}'.format(switch_name)}) -time.sleep(5) -remote.call_service(api, domain, 'turn_off', {'entity_id': '{}'.format(switch_name)}) -``` - -### {% linkable_title Specify a timeout %} - -The default timeout for an API call with `call_service` is 5 seconds. Services -taking longer than this to return will raise -`homeassistant.exceptions.HomeAssistantError: Timeout`, unless provided with a -longer timeout. - -```python -import homeassistant.remote as remote - -api = remote.API('host', 'password') -domain = 'switch' - -# Assuming switch.timeout_switch takes 10 seconds to return -switch_name = 'switch.timeout_switch' - -# Raises homeassistant.exceptions.HomeAssistantError: Timeout when talking to -remote.call_service(api, domain, 'turn_on', {'entity_id': switch_name}) - -# Runs withous exception -remote.call_service(api, domain, 'turn_on', {'entity_id': switch_name}, - timeout=11) -``` - -### {% linkable_title Send a notification %} - -The example uses the Jabber notification platform to send a single message to the given recipient in the `configuration.yaml` file: - -```python -import homeassistant.remote as remote - -api = remote.API('127.0.0.1', 'YOUR_PASSWORD') -domain = 'notify' -data = {"title":"Test", "message":"A simple test message from HA."} - -remote.call_service(api, domain, 'jabber', data) -``` - -## {% linkable_title Examples %} - -This section contains a couple of sample scripts. - -### {% linkable_title List all sensors and their value %} - -If you want to see, export or list all sensor states then an easy way to do it, is to get all entities and filter for the one you are looking for. - -```python -import homeassistant.remote as remote - -api = remote.API('127.0.0.1', 'YOUR_PASSWORD') -entities = remote.get_states(api) -for entity in entities: - if entity.entity_id.startswith('sensor'): - data = remote.get_state(api, entity.entity_id) - print('{}: {}'.format(data.attributes['friendly_name'], data.state)) -``` - -### {% linkable_title Show difference between `last_changed` and `last_updated` %} - -The documentation about the [State Objects](/docs/configuration/state_object/) describes the -`last_changed` and `last_updated` fields. This example shows how it works in practice. - -```python -import time - -from prettytable import PrettyTable -import homeassistant.remote as remote - -api = remote.API('127.0.0.1', 'YOUR_PASSWORD') - -ACTIONS = { - 'Create sensor': [21, 'Test'], - 'No new sensor value': [21, 'Test'], - 'New sensor value': [22, 'Test'], - 'Update attribute': [22, 'Test1'], -} - -output = PrettyTable(['Action', 'Last changed', 'Last updated']) - -for key, value in ACTIONS.items(): - remote.set_state(api, 'sensor.test', new_state=value[0], - attributes={'friendly_name': value[1]}) - data = remote.get_state(api, 'sensor.test') - output.add_row([key, data.last_changed, data.last_updated]) - time.sleep(2) - -print(output) -``` - + \ No newline at end of file diff --git a/source/developers/releasing.markdown b/source/developers/releasing.markdown index 55ef646a995..741aa147d66 100644 --- a/source/developers/releasing.markdown +++ b/source/developers/releasing.markdown @@ -9,66 +9,6 @@ sharing: true footer: true --- -This page describes the steps for publishing a new Home Assistant release. Those steps requires that you don't use forks but work with the repositories themself. The [hass-release](https://github.com/home-assistant/hass-release) script is a helper to do a release. - -### {% linkable_title Release preparation (3 days before release) %} - -### {% linkable_title GitHub %} - -1. Merge `master` into `dev` to make the PR mergeable. -2. Cut a release branch from `dev`. Example name `release-0-57`. -3. Create a pull request from the release branch to `master` with the upcoming release number as the title. -4. Update `homeassistant/const.py` with the correct version number (remove the `dev` tag) and push that commit to release branch. - -### {% linkable_title Website %} - -1. Merge `current` into `next` -2. Cut release branch of `next`. For example `release-0-57`. -3. Open a PR from release branch to `current` with the upcoming release number as the title. - -## {% linkable_title Release day %} - -From creating the release branch till it has been merged, we tag bugfixes with the milestone for the release (create if doesn't exist). - -### {% linkable_title GitHub %} - -1. Cherry-pick the milestoned PRs that need to get into the release `python3 -m hassrelease milestone_cherry_pick 0.57` -2. Run `python3 -m hassrelease release_notes 0.56` for the release notes. -3. Once the release notes has been generated, issue `python3 -m hassrelease milestone_close 0.56` -4. Merge pull request (DO NOT SQUASH!). Use `Merge pull request`. -5. Go to [releases](https://github.com/home-assistant/home-assistant/releases), click `Draft a new release` and tag a new release on the `master` branch. "Tag version" and "Release title" are the version number (`O.x` for major version, `0.x.y` for minor and bug fix releases). Release description is the text from PR. Press "Publish release" to finish the process. -6. Merge `master` into `dev`. -7. Update `homeassistant/const.py` with the upcoming version number (including the `dev` tag) and push that commit to the `dev` branch. - -### {% linkable_title Website %} - -1. Create a blog post in the release branch and base it on the text of the PR in the main repository. Add images, additional text, links, etc. if it adds value. Tag each platform/component in a message to documentation. -2. Create missing documentation as stubs. -3. Run `credits_generator`. -4. Update `_config.yml` with a link to the new release blog post and version number (at the bottom of the file). -5. Merge `current` into release branch (`$ git checkout release-0-40 && git merge current`) to make the PR mergeable. -6. Merge pull request (blog post, updated frontpage, and all new documentation) to `current`. DO NOT SQUASH! -7. Merge `current` into `next`. - -### {% linkable_title Docker Hub %} - -Tags on Docker hub are automatically created when a release has been created on GitHub. - -### {% linkable_title Python Package Index %} - -Checkout the `master` branch and run `script/release` to publish the new release on [Python Package Index](https://pypi.python.org). - -### {% linkable_title Social media %} - -1. Use [hootsuite](https://hootsuite.com/dashboard) to publish a link to the release post on social media. - -## {% linkable_title Bugfix Release %} - -1. Checkout `master` and update it. `git checkout master && git pull --rebase` -2. Create a new release branch from `master`. `git checkout -b release-0-56-2` -3. Cherry-pick the PRs which were milestoned. -4. Update `homeassistant/const.py` with the correct version number (increment `PATCH_VERSION`) and push that commit to release branch. -5. Create a pull request from the release branch to `master` with the upcoming release number as the title. -6. Merge pull request (DO NOT SQUASH!). Use `Merge pull request`. -7. Go to [releases](https://github.com/home-assistant/home-assistant/releases), click `Draft a new release` and tag a new release on the `master` branch. "Tag version" and "Release title" are the version number (`O.x` for major version, `0.x.y` for minor and bug fix releases). Release description is the text from PR. Press "Publish release" to finish the process. -8. [Publish](/developers/releasing/#python-package-index) the new release on PyPI. + \ No newline at end of file diff --git a/source/developers/rest_api.markdown b/source/developers/rest_api.markdown index cf850cfbec4..83ac65d3b43 100644 --- a/source/developers/rest_api.markdown +++ b/source/developers/rest_api.markdown @@ -9,504 +9,6 @@ sharing: true footer: true --- -Home Assistant runs a web server accessible on port 8123. - - * http://IP_ADDRESS:8123/ is an interface to control Home Assistant. - * http://IP_ADDRESS:8123/api/ is a Rest API. - -The API accepts and returns only JSON encoded objects. All API calls have to be accompanied by the header `X-HA-Access: YOUR_PASSWORD` (YOUR_PASSWORD as specified in your `configuration.yaml` file in the [`http:` section](/components/http/)). - -There are multiple ways to consume the Home Assistant Rest API. One is with `curl`: - -```bash -curl -X GET \ - -H "x-ha-access: YOUR_PASSWORD" \ - -H "Content-Type: application/json" \ - http://IP_ADDRESS:8123/ENDPOINT -``` - -Another option is to use Python and the [Requests](http://docs.python-requests.org/en/latest/) module. - -```python -from requests import get - -url = 'http://localhost:8123/ENDPOINT' -headers = {'x-ha-access': 'YOUR_PASSWORD', - 'content-type': 'application/json'} - -response = get(url, headers=headers) -print(response.text) -``` - -

-You can append `?api_password=YOUR_PASSWORD` to any URL to log in automatically. -

- -Successful calls will return status code 200 or 201. Other status codes that can return are: - - - 400 (Bad Request) - - 401 (Unauthorized) - - 404 (Not Found) - - 405 (Method not allowed) - -### {% linkable_title Actions %} - -The API supports the following actions: - -#### {% linkable_title GET /api/ %} -Returns a message if the API is up and running. - -```json -{ - "message": "API running." -} -``` - -Sample `curl` command: - -```bash -$ curl -X GET -H "x-ha-access: YOUR_PASSWORD" \ - -H "Content-Type: application/json" http://localhost:8123/api/ -``` - -#### {% linkable_title GET /api/config %} -Returns the current configuration as JSON. - -```json -{ - "components":[ - "sensor.cpuspeed", - "frontend", - "config.core", - "http", - "map", - "api", - "sun", - "config", - "discovery", - "conversation", - "recorder", - "group", - "sensor", - "websocket_api", - "automation", - "config.automation", - "config.customize" - ], - "config_dir":"/home/ha/.homeassistant", - "elevation":510, - "latitude":45.8781529, - "location_name":"Home", - "longitude":8.458853651, - "time_zone":"Europe/Zurich", - "unit_system":{ - "length":"km", - "mass":"g", - "temperature":"\u00b0C", - "volume":"L" - }, - "version":"0.56.2", - "whitelist_external_dirs":[ - "/home/ha/.homeassistant/www", - "/home/ha/.homeassistant/" - ] -} -``` - -Sample `curl` command: - -```bash -$ curl -X GET -H "x-ha-access: YOUR_PASSWORD" \ - -H "Content-Type: application/json" http://localhost:8123/api/config -``` - -#### {% linkable_title GET /api/discovery_info %} -Returns basic information about the Home Assistant instance as JSON. - -```json -{ - "base_url": "http://192.168.0.2:8123", - "location_name": "Home", - "requires_api_password": true, - "version": "0.56.2" -} -``` - -Sample `curl` command: - -```bash -$ curl -X GET -H "x-ha-access: YOUR_PASSWORD" \ - -H "Content-Type: application/json" http://localhost:8123/api/discovery_info -``` - -#### {% linkable_title GET /api/events %} -Returns an array of event objects. Each event object contains event name and listener count. - -```json -[ - { - "event": "state_changed", - "listener_count": 5 - }, - { - "event": "time_changed", - "listener_count": 2 - } -] -``` - -Sample `curl` command: - -```bash -$ curl -X GET -H "x-ha-access: YOUR_PASSWORD" \ - -H "Content-Type: application/json" http://localhost:8123/api/events -``` - -#### {% linkable_title GET /api/services %} -Returns an array of service objects. Each object contains the domain and which services it contains. - -```json -[ - { - "domain": "browser", - "services": [ - "browse_url" - ] - }, - { - "domain": "keyboard", - "services": [ - "volume_up", - "volume_down" - ] - } -] -``` - -Sample `curl` command: - -```bash -$ curl -X GET -H "x-ha-access: YOUR_PASSWORD" \ - -H "Content-Type: application/json" http://localhost:8123/api/services -``` - -#### {% linkable_title GET /api/history/period/<timestamp> %} -Returns an array of state changes in the past. Each object contains further details for the entities. - -The `` (`YYYY-MM-DDThh:mm:ssTZD`) is optional and defaults to 1 day before the time of the request. It determines the beginning of the period. - -You can pass the following optional GET parameters: - - `filter_entity_id=` to filter on a single entity - - `end_time=` to choose the end of the period in URL encoded format (defaults to 1 day). - -```json -[ - [ - { - "attributes": { - "friendly_name": "Weather Temperature", - "unit_of_measurement": "\u00b0C" - }, - "entity_id": "sensor.weather_temperature", - "last_changed": "2016-02-06T22:15:00+00:00", - "last_updated": "2016-02-06T22:15:00+00:00", - "state": "-3.9" - }, - { - "attributes": { - "friendly_name": "Weather Temperature", - "unit_of_measurement": "\u00b0C" - }, - "entity_id": "sensor.weather_temperature", - "last_changed": "2016-02-06T22:15:00+00:00", - "last_updated": "2016-02-06T22:15:00+00:00", - "state": "-1.9" - }, - ] -] -``` - -Sample `curl` commands: - -```bash -$ curl -X GET -H "x-ha-access: YOUR_PASSWORD" \ - -H "Content-Type: application/json" \ - http://localhost:8123/api/history/period/2016-12-29T00:00:00+02:00 -``` - -```bash -$ curl -X GET -H "x-ha-access: YOUR_PASSWORD" \ - -H "Content-Type: application/json" \ - http://localhost:8123/api/history/period/2016-12-29T00:00:00+02:00?filter_entity_id=sensor.temperature -``` - -```bash -$ curl -X GET -H "x-ha-access: YOUR_PASSWORD" \ - -H "Content-Type: application/json" \ - http://localhost:8123/api/history/period/2016-12-29T00:00:00+02:00?end_time=2016-12-31T00%3A00%3A00%2B02%3A00 -``` - -#### {% linkable_title GET /api/states %} -Returns an array of state objects. Each state has the following attributes: entity_id, state, last_changed and attributes. - -```json -[ - { - "attributes": {}, - "entity_id": "sun.sun", - "last_changed": "2016-05-30T21:43:32.418320+00:00", - "state": "below_horizon" - }, - { - "attributes": {}, - "entity_id": "process.Dropbox", - "last_changed": "22016-05-30T21:43:32.418320+00:00", - "state": "on" - } -] -``` - -Sample `curl` command: - -```bash -$ curl -X GET -H "x-ha-access: YOUR_PASSWORD" \ - -H "Content-Type: application/json" http://localhost:8123/api/states -``` - -#### {% linkable_title GET /api/states/<entity_id> %} -Returns a state object for specified entity_id. Returns 404 if not found. - -```json -{ - "attributes":{ - "azimuth":336.34, - "elevation":-17.67, - "friendly_name":"Sun", - "next_rising":"2016-05-31T03:39:14+00:00", - "next_setting":"2016-05-31T19:16:42+00:00" - }, - "entity_id":"sun.sun", - "last_changed":"2016-05-30T21:43:29.204838+00:00", - "last_updated":"2016-05-30T21:50:30.529465+00:00", - "state":"below_horizon" -} -``` - -Sample `curl` command: - -```bash -$ curl -X GET -H "x-ha-access: YOUR_PASSWORD" \ - -H "Content-Type: application/json" \ - http://localhost:8123/api/states/sensor.kitchen_temperature -``` - -#### {% linkable_title GET /api/error_log %} -Retrieve all errors logged during the current session of Home Assistant as a plaintext response. - -```text -15-12-20 11:02:50 homeassistant.components.recorder: Found unfinished sessions -15-12-20 11:03:03 netdisco.ssdp: Error fetching description at http://192.168.1.1:8200/rootDesc.xml -15-12-20 11:04:36 homeassistant.components.alexa: Received unknown intent HelpIntent -``` - -Sample `curl` command: - -```bash -$ curl -X GET -H "x-ha-access: YOUR_PASSWORD" \ - -H "Content-Type: application/json" \ - http://localhost:8123/api/error_log -``` - -#### {% linkable_title GET /api/camera_proxy/camera.<entity_id> %} -Returns the data (image) from the specified camera entity_id. - -Sample `curl` command: - -```bash -$ curl -X GET -H "x-ha-access: YOUR_PASSWORD" \ - -H "Content-Type: application/json" \ - http://localhost:8123/api/camera_proxy/camera.my_sample_camera?time=1462653861261 -o image.jpg -``` - -#### {% linkable_title POST /api/states/<entity_id> %} -Updates or creates the current state of an entity. - -Expects a JSON object that has at least a state attribute: - -```json -{ - "state": "below_horizon", - "attributes": { - "next_rising":"2016-05-31T03:39:14+00:00", - "next_setting":"2016-05-31T19:16:42+00:00" - } -} -``` - -The return code is 200 if the entity existed, 201 if the state of a new entity was set. A location header will be returned with the URL of the new resource. The response body will contain a JSON encoded State object. - -```json -{ - "attributes": { - "next_rising":"2016-05-31T03:39:14+00:00", - "next_setting":"2016-05-31T19:16:42+00:00" - }, - "entity_id": "sun.sun", - "last_changed": "2016-05-30T21:43:29.204838+00:00", - "last_updated": "2016-05-30T21:47:30.533530+00:00", - "state": "below_horizon" -} -``` - -Sample `curl` command: - -```bash -$ curl -X POST -H "x-ha-access: YOUR_PASSWORD" \ - -H "Content-Type: application/json" \ - -d '{"state": "25", "attributes": {"unit_of_measurement": "°C"}}' \ - http://localhost:8123/api/states/sensor.kitchen_temperature -``` - -#### {% linkable_title POST /api/events/<event_type> %} -Fires an event with event_type - -You can pass an optional JSON object to be used as `event_data`. - -```json -{ - "next_rising":"2016-05-31T03:39:14+00:00", -} -``` - -Returns a message if successful. - -```json -{ - "message": "Event download_file fired." -} -``` - -#### {% linkable_title POST /api/services/<domain>/<service> %} -Calls a service within a specific domain. Will return when the service has been executed or after 10 seconds, whichever comes first. - -You can pass an optional JSON object to be used as `service_data`. - -```json -{ - "entity_id": "light.Ceiling" -} -``` - -Returns a list of states that have changed while the service was being executed. - -```json -[ - { - "attributes": {}, - "entity_id": "sun.sun", - "last_changed": "2016-05-30T21:43:32.418320+00:00", - "state": "below_horizon" - }, - { - "attributes": {}, - "entity_id": "process.Dropbox", - "last_changed": "22016-05-30T21:43:32.418320+00:00", - "state": "on" - } -] -``` - -Sample `curl` commands: - -Turn the light on: - -```bash -$ curl -X POST -H "x-ha-access: YOUR_PASSWORD" \ - -H "Content-Type: application/json" \ - -d '{"entity_id": "switch.christmas_lights"}' \ - http://localhost:8123/api/services/switch/turn_on -``` - -Send a MQTT message: - -```bash -$ curl -X POST \ - -H "Content-Type: application/json" \ - -H "x-ha-access:YOUR_PASSWORD" \ - -d '{"payload": "OFF", "topic": "home/fridge", "retain": "True"}' \ - http://localhost:8123/api/services/mqtt/publish -``` - -

-The result will include any states that changed while the service was being executed, even if their change was the result of something else happening in the system. -

- -#### {% linkable_title POST /api/template %} -Render a Home Assistant template. [See template docs for more information.](/topics/templating/) - -```json -{ - "template": "Paulus is at {% raw %}{{ states('device_tracker.paulus') }}{% endraw %}!" -} -``` - -Returns the rendered template in plain text. - -```text -Paulus is at work! -``` - -Sample `curl` command: - -```bash -$ curl -X POST -H "x-ha-access: YOUR_PASSWORD" \ - -H "Content-Type: application/json" \ - -d '{"template": "It is {{ now }}!"}' http://localhost:8123/api/template -``` - -#### {% linkable_title POST /api/event_forwarding %} -Set up event forwarding to another Home Assistant instance. - -Requires a JSON object that represents the API to forward to. - -```javascript -{ - "host": "machine", - "api_password": "my_super_secret_password", - "port": 8880 // optional -} -``` - -It will return a message if event forwarding was set up successfully. - -```json -{ - "message": "Event forwarding setup." -} -``` - -#### {% linkable_title DELETE /api/event_forwarding %} -Cancel event forwarding to another Home Assistant instance.
- -Requires a JSON object that represents the API to cancel forwarding to. - -```javascript -{ - "host": "machine", - "api_password": "my_super_secret_password", - "port": 8880 // optional -} -``` - -It will return a message if event forwarding was cancelled successfully. - -```json -{ - "message": "Event forwarding cancelled." -} -``` - -

-If your client does not support DELETE HTTP requests you can add an optional attribute _METHOD and set its value to DELETE. -

- + \ No newline at end of file diff --git a/source/developers/server_sent_events.markdown b/source/developers/server_sent_events.markdown index 2f94a0bc8e0..62c1d956e66 100644 --- a/source/developers/server_sent_events.markdown +++ b/source/developers/server_sent_events.markdown @@ -9,65 +9,6 @@ sharing: true footer: true --- -The [server-sent events](https://developer.mozilla.org/en-US/docs/Web/API/Server-sent_events/Using_server-sent_events) feature is a one-way channel from your Home Assistant server to a client which is acting as a consumer. For bi-directional communication check the [RESTful API](/developers/rest_api/) and [Python API](/developers/python_api/). - -The URI that is generating the data is `/api/stream`. - -A requirement on the client-side is existing support for the [EventSource](https://developer.mozilla.org/en-US/docs/Web/API/EventSource) interface. - -There are various ways to access the stream. One is `curl`: - -```bash -$ curl -X GET -H "x-ha-access: YOUR_PASSWORD" \ - -H "Content-Type: application/json" http://localhost:8123/api/stream -``` - -You can create a convenient view for this by creating an HTML file (`sse.html`) in the `www` folder of your Home Assistant configuration directory (`.homeassistant`). Paste this snippet into the file: - -```html - - - -

Getting Home Assistant server events

-
- - - -``` - -Visit [http://localhost:8123/local/sse.html](http://localhost:8123/local/sse.html) to see the stream of events. - -## {% linkable_title Examples %} - -A simple way to consume server-sent events is to use a command-line http client like [httpie](https://httpie.org/). Installation info is on the site (if you use Homebrew, it's `brew install httpie`). Once installed, run this snippet from your terminal: - -```bash -$ http --stream http://localhost:8123/api/stream x-ha-access:YOUR_PASSWORD content-type:application/json -``` - -### {% linkable_title Website %} - -The [home-assistant-sse](https://github.com/fabaff/home-assistant-sse) repository contains a more advanced example. - -### {% linkable_title Python %} - -If you want to test the server-sent events without creating a website, the Python module [`sseclient` ](https://pypi.python.org/pypi/sseclient/) can help. To install (assuming Python and pip3 are already installed): - -```bash -$ pip3 install sseclient -``` - -A simple script to consume SSE in Python looks like this: - -```python -from sseclient import SSEClient - -messages = SSEClient('http://localhost:8123/api/stream?api_password=YOUR_PASSWORD') -for msg in messages: - print(msg) -``` + \ No newline at end of file diff --git a/source/developers/websocket_api.markdown b/source/developers/websocket_api.markdown index 3cf5796c1b3..7e8bf2f9ed2 100644 --- a/source/developers/websocket_api.markdown +++ b/source/developers/websocket_api.markdown @@ -9,349 +9,6 @@ sharing: true footer: true --- -Home Assistant contains a WebSocket API. This API can be used to stream information from a Home Assistant instance to any client that implements WebSocket. Implementations in different languages: - - - [JavaScript](https://github.com/home-assistant/home-assistant-js-websocket) - powers the frontend - - [Python](https://raw.githubusercontent.com/home-assistant/home-assistant-dev-helper/master/ha-websocket-client.py) - CLI client using [`asyncws`](https://async-websockets.readthedocs.io/en/latest/) - - [JavaScript/HTML](https://raw.githubusercontent.com/home-assistant/home-assistant-dev-helper/master/ha-websocket.html) - WebSocket connection in your browser - -Connect your websocket implementation to `ws://localhost:8123/api/websocket`. - -## {% linkable_title Server states %} - - 1. Client connects - 2. Authentication phase starts - - If no further authentication necessary for the user: go to 3 - - Server sends `auth_required` message - - Client sends `auth` message - - If `auth` message correct: go to 3. - - Server sends `auth_invalid`. Go to 6. - 3. Send `auth_ok` message - 4. Authentication phase ends. - 5. Command phase starts. - 1. Client can send commands. - 2. Server can send results of previous commands. - 6. Client or server disconnects session. - -During the command phase, the client attaches a unique identifier to each message. The server will add this identifier to each message so that the client can link each message to it's origin. - -## {% linkable_title Message format %} - -Each API message is a JSON serialized object containing a `type` key. After the authentication phase messages also must contain an `id`, an integer that contains the number of interactions. - -Example of an auth message: - -```json -{ - "type": "auth", - "api_password": "supersecret" -} -``` - -```json -{ - "id" 5, - "type":"event", - "event":{ - "data":{}, - "event_type":"test_event", - "time_fired":"2016-11-26T01:37:24.265429+00:00", - "origin":"LOCAL" - } -} -``` - -## {% linkable_title Authentication phase %} - -When a client connects to the server, the server will test if the client is authenticated. Authentication will not be necessary if no api_password is set or if the user fulfills one of the other criteria for authentication (trusted network, password in url/header). - -If no authentication is needed, the authentication phase will complete and the server will send an `auth_ok` message. - -```json -{ - "type": "auth_ok" -} -``` - -If authentication is necessary, the server sends out `auth_required`. - -```json -{ - "type": "auth_required" -} -``` - -This means that the next message from the client should be an auth message: - -```json -{ - "type": "auth", - "api_password": "supersecret" -} -``` - -If the client supplies valid authentication, the authentication phase will complete by the server sending the `auth_ok` message: - -```json -{ - "type": "auth_ok" -} -``` - -If the data is incorrect, the server will reply with `auth_invalid` message and disconnect the session. - -```json -{ - "type": "auth_invalid", - "message": "Invalid password" -} -``` - -## {% linkable_title Command phase %} - -During this phase the client can give commands to the server. The server will respond to each command with a `result` message indicating when the command is done and if it was successful. - -```json -{ - "id": 6. - "type": "result", - "success": true, - // Can contain extra result info - "result": null -} -``` - -## {% linkable_title Subscribe to events %} - -The command `subscribe_events` will subscribe your client to the event bus. You can either listen to all events or to a specific event type. If you want to listen to multiple event types, you will have to send multiple `subscribe_events` commands. - -```json -{ - "id": 18, - "type": "subscribe_events", - // Optional - "event_type": "state_changed" -} -``` - -The server will respond with a result message to indicate that the subscription is active. - -```json -{ - "id": 18, - "type": "result", - "success": true, - "result": null -} -``` - -For each event that matches, the server will send a message of type `event`. The `id` in the message will point at the original `id` of the `listen_event` command. - -```json -{ - "id": 18, - "type":"event", - "event":{ - "data":{ - "entity_id":"light.bed_light", - "new_state":{ - "entity_id":"light.bed_light", - "last_changed":"2016-11-26T01:37:24.265390+00:00", - "state":"on", - "attributes":{ - "rgb_color":[ - 254, - 208, - 0 - ], - "color_temp":380, - "supported_features":147, - "xy_color":[ - 0.5, - 0.5 - ], - "brightness":180, - "white_value":200, - "friendly_name":"Bed Light" - }, - "last_updated":"2016-11-26T01:37:24.265390+00:00" - }, - "old_state":{ - "entity_id":"light.bed_light", - "last_changed":"2016-11-26T01:37:10.466994+00:00", - "state":"off", - "attributes":{ - "supported_features":147, - "friendly_name":"Bed Light" - }, - "last_updated":"2016-11-26T01:37:10.466994+00:00" - } - }, - "event_type":"state_changed", - "time_fired":"2016-11-26T01:37:24.265429+00:00", - "origin":"LOCAL" - } -} -``` - -### {% linkable_title Unsubscribing from events %} - -You can unsubscribe from previously created subscription events. Pass the id of the original subscription command as value to the subscription field. - -```json -{ - "id": 19, - "type": "unsubscribe_events", - "subscription": 18 -} -``` - -The server will respond with a result message to indicate that unsubscribing was successful. - -```json -{ - "id": 19, - "type": "result", - "success": true, - "result": null -} -``` - - -### {% linkable_title Calling a service %} - -This will call a service in Home Assistant. Right now there is no return value. The client can listen to `state_changed` events if it is interested in changed entities as a result of a service call. - -```json -{ - "id": 24, - "type": "call_service", - "domain": "light", - "service": "turn_on", - // Optional - "service_data": { - "entity_id": "light.kitchen" - } -} -``` - -The server will indicate with a message indicating that the service is done executing. - -```json -{ - "id": 24, - "type": "result", - "success": true, - "result": null -} -``` - -### {% linkable_title Fetching states %} - -This will get a dump of all the current states in Home Assistant. - -```json -{ - "id": 19, - "type": "get_states" -} -``` - -The server will respond with a result message containing the states. - -```json -{ - "id": 19, - "type": "result", - "success": true, - "result": [ ... ] -} -``` - -### {% linkable_title Fetching config %} - -This will get a dump of the current config in Home Assistant. - -```json -{ - "id": 19, - "type": "get_config" -} -``` - -The server will respond with a result message containing the config. - -```json -{ - "id": 19, - "type": "result", - "success": true, - "result": { ... } -} -``` - -### {% linkable_title Fetching services %} - -This will get a dump of the current services in Home Assistant. - -```json -{ - "id": 19, - "type": "get_services" -} -``` - -The server will respond with a result message containing the services. - -```json -{ - "id": 19, - "type": "result", - "success": true, - "result": { ... } -} -``` - -### {% linkable_title Fetching panels %} - -This will get a dump of the current registered panels in Home Assistant. - -```json -{ - "id": 19, - "type": "get_panels" -} -``` - -The server will respond with a result message containing the current registered panels. - -```json -{ - "id": 19, - "type": "result", - "success": true, - "result": [ ... ] -} -``` - -## {% linkable_title Error handling %} - -If an error occurs, the `success` key in the `result` message will be set to `false`. It will contain an `error` key containing an object with two keys: `code` and `message`. - -| Code | Description | -| ----- | ------------ | -| 1 | A non-increasing identifier has been supplied. -| 2 | Received message is not in expected format (voluptuous validation error). -| 3 | Requested item cannot be found - -```json -{ - "id": 12, - "type":"result", - "success": false, - "error": { - "code": 2, - "message": "Message incorrectly formatted: expected str for dictionary value @ data['event_type']. Got 100" - } -} -``` + \ No newline at end of file diff --git a/source/docs/index.markdown b/source/docs/index.markdown index 65a6e87c6b9..cbc6b8e364c 100644 --- a/source/docs/index.markdown +++ b/source/docs/index.markdown @@ -52,5 +52,4 @@ The documentation covers from beginner to advanced topic around the installation
- To see what Home Assistant can do, take a look at the [demo page](/demo). diff --git a/source/faq/index.markdown b/source/faq/index.markdown index cdf865abf48..9dc9352fcf6 100644 --- a/source/faq/index.markdown +++ b/source/faq/index.markdown @@ -11,17 +11,20 @@ regenerate: true hide_github_edit: true --- -This is a community curated list of frequently asked questions (FAQ) about the installation, setup, and usage of Home Assistant. +This is a community curated list of frequently asked questions (FAQ) about the installation, setup, and usage of Home Assistant. If you want to get details about a term, please check the [glossary](/docs/glossary/). {% assign faq = site.faq | sort: 'title' %} {% assign categories = faq | map: 'ha_category' | uniq | sort %} {% for category in categories %} + ## {% linkable_title {{ category }} %} {% for entry in faq %} {% if entry.ha_category == category %} + ### {% linkable_title {{ entry.title }} %} + {{entry.content}} {% endif %} {% endfor %} diff --git a/source/getting-started/configuration.markdown b/source/getting-started/configuration.markdown index 360ef56f009..e4953339f42 100644 --- a/source/getting-started/configuration.markdown +++ b/source/getting-started/configuration.markdown @@ -9,19 +9,94 @@ sharing: true footer: true --- -When launched for the first time, Home Assistant will write a default configuration file, called `configuration.yaml`, enabling the web interface and [device discovery](/components/discovery/). It can take up to a minute for your devices to be discovered and appear in the user interface. +

+This guide applies only if you've installed Home Assistant via Hass.io. If you've used any other install method then [see here](/docs/configuration/) instead. +

-The `configuration.yaml` is written in [YAML](/docs/configuration/yaml/), stored in [`.homeassistant`](/docs/configuration/), and can be modified with a text editor. +If you made it here, awesome! That means that you got Home Assistant up and running. It might have already found some of your networked devices. This is going to be fun! -See the [components overview page](/components/) to find sample entries for your devices and services. For a sensor that is showing [random values](/components/sensor.random/), the entry would look like the sample below: +Home Assistant stores its configuration in a file called `configuration.yaml`. A default one is created when Home Assistant is started for the first time. Some of the things in the configuration file can be edited via the user interface, other parts require you to edit the configuration file directly. + +There are two common approaches to edit your configuration: via Samba/Windows Networking and via the HASS Configurator. Both of these are [official add-ons for Hass.io](/addons/). + +## {% linkable_title Installing Hass.io add-ons %} + +Hass.io add-ons are installed from the add-on store embedded in the Hass.io panel: + + - Open Home Assistant by navigating to [http://hassio.local:8123][local]. + - Click on the menu icon in the top left and select Hass.io in the sidebar. + - The Hass.io panel opens, now open the add-on store by clicking the shopping bag. + +[local]: http://hassio.local:8123 + +

+ +From the Hass.io main panel open the add-on store. +

+ +### {% linkable_title Editing config via HASS Configurator %} + +The first add-on we should install is the HASS Configurator. With the HASS Configurator you'll be able to edit your Home Assistant configuration from the web interface. + +Go to the add-on store (see previous step), click on Configurator and click on "INSTALL". When installation is complete, the UI will go to the add-on details page for the configurator. Here you will be able to change settings, start and stop the add-on. Follow the steps below to setup the add-on. + + - Set a password on the Config box, don't forget to use quotes on your password + + ```json +{ + "username": "admin", + "password": "YOUR_PASSWORD_WITH_QUOTES", + "certfile": "fullchain.pem", + "keyfile": "privkey.pem", + "ssl": false, + "allowed_networks": [ + "192.168.0.0/16" + ], + "banned_ips": [ + "8.8.8.8" + ], + "banlimit": 0, + "ignore_pattern": [ + "__pycache__" + ], + "dirsfirst": false +} +``` + + - Click on "SAVE" to save your new password + - "START" the add-on + - You will be able to click the "OPEN WEB UI" link to open the Web UI on a new window + - Type your username and password that you recently saved + +Time for the first practice with the configurator. Add the following to `configuration.yaml` file to add a link to the Configurator in the sidebar: + +```yaml +panel_iframe: + configurator: + title: Configurator + icon: mdi:wrench + url: http://hassio.local:3218 +``` + +Now restart Home Assistant for the changes to the configuration to take effect. You can do this by going to the config panel (Configuration in the sidebar) -> General -> Restart Home Assistant. + +### {% linkable_title Editing config via Samba/Windows Networking %} + +Maybe you are not a big fan of our web editor and want to use a text editor on your computer instead. This is possible by sharing the configuration over the network using the Samba add-on, which can be installed from the Hass.io add-on store. + +After you have installed it, click on START. Hass.io should now be available in the networking tab on your computer. Use a text editor like the free [Visual Studio Code](https://code.visualstudio.com/) to edit `configuration.yaml`. + +## {% linkable_title Configuring integrations %} + +Now that you are able to edit the configuration, it's time to set up some of your devices and services. Each service and device will have its own instructions on how to be integrated. Find your devices and services on the [components overview page](/components/). + +

YAML can be a little daunting at first. A lot is possible! [Here is some more info.](/docs/configuration/devices/)

+ +For a sensor that is showing [random values](/components/sensor.random/), the entry would look like the sample below: ```yaml sensor: - platform: random ``` -The [Setting up devices part](/docs/configuration/devices/) contains the additional documentation details about adding devices and services and [customization](/docs/configuration/customizing-devices/). - -For further details about configuration, please take a look at the [configuration documentation](/docs/configuration/). - ### [Next step: Automate Home Assistant »](/getting-started/automation/) diff --git a/source/getting-started/index.markdown b/source/getting-started/index.markdown index 6c15f7caac3..d5a85f87355 100644 --- a/source/getting-started/index.markdown +++ b/source/getting-started/index.markdown @@ -9,30 +9,54 @@ sharing: true footer: true --- -First you will need to install Home Assistant before we can get started: +The goal of this getting started guide is to install [Hass.io](/hassio/) on a Raspberry Pi. Hass.io is our own all in one solution that turns your Raspberry Pi into the ultimate home automation hub. -We have developed **Hass.io** to turn your device into a dedicated Home Assistant hub controlled by a nice webinterface. -For Raspberry Pi and Intel NUC we offer configured images. Flash the image, setup WiFi (if required) and everything else can be done inside the Hass.io webinterface. Great, isn't it? +The following models are supported: +- Raspberry Pi Zero and Zero W +- Raspberry Pi 1 Model B +- Raspberry Pi 2 Model B +- Raspberry Pi 3 Model B and Model B+ -Also Home Assistant runs on any other device that supports **Python 3**. - -
+Follow this guide if you want to get started with Home Assistant easily, or if you have no or little Linux experience. For advanced users or if you have no Raspberry Pi at hand, check our [alternative installation methods](/docs/installation/). The [FAQ](/faq/#home-assistant-vs-hassio) explains more about the differences. -For alternative installation methods, please take a look at the [installation documentation](/docs/installation/). +

+ Please remember to [secure your installation](/docs/configuration/securing/) once you've finished with the installation process. +

-If you run into any issues, please see [the troubleshooting page](/docs/installation/troubleshooting/) or [communication channels](/help/). It contains solutions to many commonly encountered issues. +### {% linkable_title Suggested hardware%} + +We will need a few things to get started with installing Home Assistant. For best performance, we suggest the latest Raspberry Pi 3 Model B+. Links below are linking to Amazon US. If you're not in the US, you should be able to find these items in web stores in your country. + +- [Raspberry Pi 3 Model B+](http://a.co/ak2SQor) + [Power Supply](https://www.raspberrypi.org/help/faqs/#powerReqs) (at least 2.5A) +- [Micro SD Card](http://a.co/gslOydD). Get one that is Class 10 as they are more reliable. Size 32 GB or bigger recommended. +- SD Card reader. Part of most laptops, and also available as [standalone USB sticks](http://a.co/5FCyb0N) (the brand doesn't matter, just pick the cheapest) +- Ethernet cable (optional, Hass.io can work with WiFi as well) +- A USB-Stick (optional, allows for unattended configuration) + +### {% linkable_title Software requirements %} + +- Download the Hass.io image for [your device](https://www.home-assistant.io/hassio/installation/) +- Download [Etcher] to write the image to an SD card +- Text Editor like [Visual Studio Code](https://code.visualstudio.com/) + +[Etcher]: https://etcher.io/ + +### {% linkable_title Installing Hass.io %} + +1. Put the SD card in your SD card reader. +1. Open Etcher, select the Hass.io image and flash it to the SD card. +1. WiFi setup only: Format a USB-Stick with name `CONFIG` and copy one of [the examples] to the file `network/hassos-wifi`. +1. Unmount the SD card and remove it from your SD card reader. +1. Insert the SD card into your Raspberry Pi 3. If you are going to use an Ethernet cable, connect that too. +1. Connect your Raspberry Pi to the power supply, so it turns on. +1. The Raspberry Pi will now boot up, connect to the Internet and download the latest version of Home Assistant, which will take about 20 minutes. +1. Home Assistant will be available at [http://hassio.local:8123][local]. Shortly after the download has started, a simple preparation status page will be available at this URL. Point your browser there. The page refreshes automatically, and Home Assistant will be shown when the download is complete. + +[local]: http://hassio.local:8123 +[the examples]: https://github.com/home-assistant/hassos/blob/dev/Documentation/network.md + +

+When you're done, remember to set up regular backups of your configuration. These backups will protect you from hardware failure and mistakes. On Hass.io you have snapshots, but you can back up to [GitHub](/docs/ecosystem/backup/backup_github/), [DropBox](/docs/ecosystem/backup/backup_dropbox/) and many other ways. All that matters is that you set them up and test them regularly. +

### [Next step: Configuring Home Assistant »](/getting-started/configuration/) diff --git a/source/getting-started/presence-detection.markdown b/source/getting-started/presence-detection.markdown index 8fe44b35c7a..35943263a99 100644 --- a/source/getting-started/presence-detection.markdown +++ b/source/getting-started/presence-detection.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Setting up presence detection" -description: "Instructions how to setup presence detection within Home Assistant." +description: "Instructions on how to setup presence detection within Home Assistant." date: 2015-10-04 12:08 sidebar: true comments: false @@ -15,8 +15,8 @@ We care about privacy. Collected data is only stored in your instance of Presence detection detects if people are home, which is the most valuable input for automation. Knowing who is home or where they are, will open a whole range of other automation options: - - Send me a notification when my child arrives at school - - Turn on the AC when I leave work +- Send me a notification when my child arrives at school +- Turn on the AC when I leave work

@@ -25,31 +25,40 @@ Screenshot of Home Assistant showing a school, work and home zone and two people ### {% linkable_title Setting it up %} -The device tracker component offers presence detection for Home Assistant. It supports two different methods for presence detection: scan for connected devices on the local network and connect to third party service. +The device tracker component offers presence detection for Home Assistant. It supports three different methods for presence detection: scan for connected devices on the local network, scan for Bluetooth devices within range, and connect to third-party service. -Scanning for connected devices is easy to setup. See the instructions for our [supported routers][routers] or [scan the network using nmap][nmap]. This approach does have its limitations, however: it will only be able to detect if a device is at home, and iPhones may show as not home inaccurately (as iPhones disconnect from WiFi if idle). +Scanning for connected devices is easy to setup; options include [supported routers][routers] and [scanning the network using nmap][nmap]. This approach does have its limitations, however: it will only be able to detect if a device is at home, and modern smartphones may show as not home inaccurately (as they disconnect from WiFi if idle). -Home Assistant currently supports multiple third-party services for presence detection: [OwnTracks][ha-owntracks], [GPSLogger][ha-gpslogger] and [Locative][ha-locative]. OwnTracks is an app that you install on your iPhone or Android phone that allows you to push the location of your device to Home Assistant using an MQTT broker. An MQTT broker is an Internet of Things communication platform that you can [freely host yourself][mqtt-self] or get [a private instance for free in the cloud](/components/mqtt/#run-your-own). +You can scan for [Bluetooth][ha-bluetooth] and [Bluetooth LE][ha-bluetooth-le] devices. Unlike with WiFi, modern smartphones don't turn off Bluetooth automatically, though the range is lower. -

-OwnTracks communicates directly with your MQTT broker; no data will pass through their servers. -

+Home Assistant currently supports multiple third-party services for presence detection, such as [OwnTracks over MQTT][ha-owntracks-mqtt], [OwnTracks over HTTP][ha-owntracks-http] [GPSLogger][ha-gpslogger] and [Locative][ha-locative]. + +There are a wide [range of options][ha-presence] available, both for scanning your local network and third-party services. ### {% linkable_title Zones %} -Home Assistant will know the location of your device if you are using OwnTracks. By [setting up zones][zone] you will be able to add names to the locations of your devices. This way you can easily spot on the state page where the people in your house are and use it as [triggers][trigger] and [conditions][condition] for automation. +Home Assistant will know the location of your device if you are using a device tracker that reports a GPS location (such as OwnTracks, GPS Logger, the iOS app, and others). By [setting up zones][zone] you will be able to add names to the locations of your devices. This way you can easily spot on the state page where the people in your house are and use it as [triggers][trigger] and [conditions][condition] for automation. + +

+If you're looking at the [map view][ha-map] then any devices in your Home zone won't be visible, this is by design. +

[routers]: /components/#presence-detection [nmap]: /components/device_tracker.nmap_tracker/ -[ha-owntracks]: /components/device_tracker.owntracks/ +[ha-bluetooth]: /components/device_tracker.bluetooth_tracker/ +[ha-bluetooth-le]: /components/device_tracker.bluetooth_le_tracker/ +[ha-owntracks-mqtt]: /components/device_tracker.owntracks/ +[ha-owntracks-http]: /components/device_tracker.owntracks_http/ [ha-locative]: /components/device_tracker.locative/ [ha-gpslogger]: /components/device_tracker.gpslogger/ +[ha-presence]: /components/#presence-detection [mqtt-self]: /components/mqtt/#run-your-own [mqtt-cloud]: /components/mqtt/#cloudmqtt [zone]: /components/zone/ [trigger]: /getting-started/automation-trigger/#zone-trigger [condition]: /getting-started/automation-condition/#zone-condition +[ha-map]: /components/map/ ### [Next step: Use Home Assistant »](/getting-started/use/) diff --git a/source/hassio/commandline.markdown b/source/hassio/commandline.markdown new file mode 100644 index 00000000000..61fefdd1877 --- /dev/null +++ b/source/hassio/commandline.markdown @@ -0,0 +1,91 @@ +--- +layout: page +title: "Hass.io via the Command line" +description: "Command line utility to control Hass.io." +date: 2017-04-30 13:28 +sidebar: true +comments: false +sharing: true +footer: true +--- + +

+ +Hass.io upgrade process from the SSH command line +

+ +On the SSH command line, you can use the `hassio` command to retrieve logs, check the details of connected hardware, and more. + +Home Assistant: + +```bash +$ hassio homeassistant info +$ hassio homeassistant logs +$ hassio homeassistant check +$ hassio homeassistant restart +$ hassio homeassistant start +$ hassio homeassistant stop +$ hassio homeassistant update +``` + +Supervisor: + +```bash +$ hassio supervisor info +$ hassio supervisor logs +$ hassio supervisor reload +$ hassio supervisor update +``` + +Host: + +```bash +$ hassio host reboot +$ hassio host shutdown +$ hassio host update +``` + +Hardware: + +```bash +$ hassio hardware info +$ hassio hardware audio +``` + +To update Home Assistant to a specific version, use the command: +```bash +hassio homeassistant update --options version=x.y.z +``` +Replace x.y.z with the desired version like `version=0.74.2` + +You can get a better description of the CLI capabilities by typing `hassio help`: + +```bash +NAME: + hassio - Commandline tool to allow interaction with hass.io + +USAGE: + hassio [global options] command [command options] [arguments...] + +VERSION: + 1.3.1 + +AUTHOR: + Home-Assistant + +COMMANDS: + homeassistant, ha info, logs, check, restart, start, stop, update + supervisor, su info, logs, reload, update + host, ho reboot, shutdown, update + hardware, hw info, audio + network, ne info, options + snapshots, sn list, info, reload, new, restore, remove + addons, ad list, info, logo, changelog, logs, stats, + reload, start, stop, install, uninstall, update + help, h Shows a list of commands or help for one command + +GLOBAL OPTIONS: + --debug, -d Prints Debug information + --help, -h show help + --version, -v print the version +``` diff --git a/source/hassio/external_storage.markdown b/source/hassio/external_storage.markdown index a69b7b8a783..b4a930bc194 100644 --- a/source/hassio/external_storage.markdown +++ b/source/hassio/external_storage.markdown @@ -9,7 +9,6 @@ sharing: true footer: true --- - ### {% linkable_title ResinOS / Generic %} Map the USB drive into add-on with `devices` options. If you need it on multiple add-ons, you can use the `/share` folder which is accessible from various add-ons. diff --git a/source/hassio/index.markdown b/source/hassio/index.markdown index 35eb09a523b..c26320cdf8e 100644 --- a/source/hassio/index.markdown +++ b/source/hassio/index.markdown @@ -1,12 +1,13 @@ --- layout: page title: "Hass.io" -description: "Manage your Home Assistant and custom addons." +description: "Manage your Home Assistant and custom add-ons." date: 2017-04-30 13:28 sidebar: true comments: false sharing: true footer: true +redirect_from: /components/hassio/ --- Hass.io turns your Raspberry Pi (or another device) into the ultimate home automation hub powered by Home Assistant. With Hass.io you can focus on integrating your devices and writing automations. @@ -15,32 +16,28 @@ Hass.io turns your Raspberry Pi (or another device) into the ultimate home autom The advantages of using Hass.io: - - Free and open source - - Optimized for embedded devices like Raspberry Pi - - 100% local home automation - - Easy installation and updates (powered by [ResinOS] and [Docker]) - - Management user interface integrated into Home Assistant - - Easily create and restore full backups of your whole configuration. - - Easily install many popular add-ons including [Google Assistant], encryption via [Let's Encrypt] and dynamic DNS via [Duck DNS].

[Browse available add-ons »][all]

- - Active community that is helpful and sharing add-ons including AppDaemon, Homebridge and InfluxDB.

[Browse the forums »][forums]
[Join the Hass.io chat »][chat]
[Browse community add-on repositories »][comm-add-ons]

+- Free and open source +- Optimized for embedded devices like Raspberry Pi +- 100% local home automation +- Easy installation and updates (powered by [HassOS] and [Docker]) +- Management web interface integrated into Home Assistant +- Create and restore full backups of your whole configuration with ease +- Install many popular add-ons with a single click! For example [Google Assistant], encryption via [Let's Encrypt] and dynamic DNS via [Duck DNS].

[Browse available add-ons »][all]

+- Active community that is helpful and sharing add-ons including AppDaemon, Homebridge and InfluxDB.

[Browse the forums »][forums]
[Join the Hass.io chat »][chat]
[Browse community add-on repositories »][comm-add-ons]

- +
### {% linkable_title Upgrading %} -Hass.io users can update Home Assistant via the 'Hass.io' page in the UI. However please note that Home Assistant updates take time to roll into the Hass.io builds. Therefore there is often a slight delay between the availability of a Home Assistant update and an update being available in Hass.io, be patient. When a Hass.io update is available it will be shown as available on the ‘Hass.io' page in your UI. +Hass.io users can update Home Assistant via the 'Hass.io' page in the UI. However, please note that a Home Assistant updates take time to roll into the Hass.io builds. Therefore there is often a slight delay between the availability of a Home Assistant update and the update being available in Hass.io, so be patient. When a Hass.io update is available, it will be shown as a notification in the ‘Hass.io' page in the web interface.

Hass.io dashboard with upgrade notification (under the hamburger menu -> Hass.io)

-

- -Hass.io upgrade process from the SSH command line -

[Google Assistant]: /addons/google_assistant/ [Snips.ai]: /addons/snips/ @@ -50,6 +47,6 @@ Hass.io upgrade process from the SSH command line [comm-add-ons]: https://community.home-assistant.io/tags/hassio-repository [all]: /addons/ [chat]: https://discord.gg/K3UVxJd -[ResinOS]: https://resinos.io/ +[HassOS]: https://github.com/home-assistant/hassos [Docker]: https://www.docker.com/ [install]: /hassio/installation/ diff --git a/source/hassio/installation.markdown b/source/hassio/installation.markdown index 2211ba4381f..024f6392398 100644 --- a/source/hassio/installation.markdown +++ b/source/hassio/installation.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Installing Hass.io" -description: "Instructions on how-to install Hass.io." +description: "Instructions on how to install Hass.io." date: 2017-04-30 13:28 sidebar: true comments: false @@ -9,42 +9,78 @@ sharing: true footer: true --- -Hass.io images are available for all available Raspberry Pi and Intel NUC platforms. +Hass.io images are available for: -- Download the appropriate image for your Raspberry Pi / Intel NUC: - - [Raspberry Pi / Zero][pi1] - - [Raspberry Pi 2][pi2] - - [Raspberry Pi 3][pi3] - - [Intel NUC][nuc] -- Flash the downloaded image to an SD card using [Etcher]. -- Optional - Setup the WiFi or static IP: On the SD-card, edit the `system-connections/resin-sample` file and follow the [ResinOS howto][resinos-network]. -- Insert SD card to Raspberry Pi and turn it on. On first boot, it downloads the latest version of Home Assistant which takes ~20 minutes (slower/faster depending on the platform). +- Download the appropriate image for your device: + - [Raspberry Pi Zero][pi1] + - [Raspberry Pi Zero W][pi0-w] + - [Raspberry Pi 1 Model B][pi1] + - [Raspberry Pi 2 Model B][pi2] + - [Raspberry Pi 3 Model B and B+ 32bit][pi3-32] (recommended) + - [Raspberry Pi 3 Model B and B+ 64bit][pi3-64] +- As [Virtual Appliance]: + - [VMDK][vmdk]

-Please remember to ensure you're using an [appropriate power supply](https://www.raspberrypi.org/help/faqs/#powerReqs) with your Pi. Mobile chargers may not be suitable, since some are designed to only provide the full power with that manufacturer's handsets. +Please remember to ensure you're using an [appropriate power supply](https://www.raspberrypi.org/help/faqs/#powerReqs) with your Pi. Mobile chargers may not be suitable since some were only designed to provide just enough power to the device it was designed for by the manufacturer.

+- Flash the downloaded image to an SD card using [Etcher][etcher]. We recommend at least a 32 GB SD card to avoid running out of space. + +- Optional - Setup the WiFi or static IP: On a USB stick, create the `network/my-network` file and follow the [HassOS howto][hassos-network]. +- Insert the SD card (and optional USB stick) into the Raspberry Pi and turn it on. On first boot, it downloads the latest version of Home Assistant which takes ~20 minutes (slower/faster depending on the platform). + - You will be able to reach your installation at [http://hassio.local:8123][local]. - Enable either the [Samba add-on][samba] or the [SSH add-on][ssh] to manage your configuration in `/config/` (From the UI choose **Hass.io** which is located in the sidebar).

-If you copy over your existing Home Assistant configuration, make sure to enable the Hass.io panel by adding either `discovery:` or `hassio:` to your configuration. +If your router doesn't support mDNS, then you'll have to use the IP address of your Pi instead of `hassio.local`. For example, `http://192.168.0.9:8123`. You should be able to find the IP address of your Pi from the admin interface of your router.

+### {% linkable_title Migrating from a non-Hass.io install %} + +If you copy over your existing Home Assistant configuration, make sure to enable the Hass.io panel by adding either `discovery:` or `hassio:` to your configuration. + ## {% linkable_title Alternative: install on generic Linux server %} -For advanced users, it is also possible to try Hass.io on your Linux server or inside a VM. To do so, [follow these instructions][linux]. +For advanced users, it is also possible to try Hass.io on your [Linux server or inside a virtual machine][linux]. -

When you use this installation method, some add-ons will not be available and the documentation might not work for your installation.

+This is the list of packages you need to have available on your system that will run Hass.io if you are using Debian/Ubuntu: -[Etcher]: https://etcher.io/ -[resinos-network]: https://docs.resin.io/deployment/network/2.0.0/ -[pi1]: https://github.com/home-assistant/hassio-build/releases/download/1.1/resinos-hassio-1.1-raspberrypi.img.bz2 -[pi2]: https://github.com/home-assistant/hassio-build/releases/download/1.1/resinos-hassio-1.1-raspberrypi2.img.bz2 -[pi3]: https://github.com/home-assistant/hassio-build/releases/download/1.1/resinos-hassio-1.1-raspberrypi3.img.bz2 -[nuc]: https://github.com/home-assistant/hassio-build/releases/download/1.1/resinos-hassio-1.1-intel-nuc.img.bz2 + - apparmor-utils + - apt-transport-https + - avahi-daemon + - ca-certificates + - curl + - dbus + - jq + - network-manager + - socat + - software-properties-common + +To perform the Hass.io installation, run the following command as root: + +```bash +$ curl -sL https://raw.githubusercontent.com/home-assistant/hassio-build/master/install/hassio_install | bash -s +``` + +

+When you use this installation method, the core SSH add-on may not function correctly. If that happens, use the community SSH add-on. Some of the documentation might not work for your installation either. +

+ +A detailed guide about running Hass.io as a virtual machine is available in the [blog](/blog/2017/11/29/hassio-virtual-machine/). + +[etcher]: https://etcher.io/ +[Virtual Appliance]: https://github.com/home-assistant/hassos/blob/dev/Documentation/boards/ova.md +[hassos-network]: https://github.com/home-assistant/hassos/blob/dev/Documentation/network.md +[pi0-w]: https://github.com/home-assistant/hassos/releases/download/1.9/hassos_rpi0-w-1.9.img.gz +[pi1]: https://github.com/home-assistant/hassos/releases/download/1.9/hassos_rpi-1.9.img.gz +[pi2]: https://github.com/home-assistant/hassos/releases/download/1.9/hassos_rpi2-1.9.img.gz +[pi3-32]: https://github.com/home-assistant/hassos/releases/download/1.9/hassos_rpi3-1.9.img.gz +[pi3-64]: https://github.com/home-assistant/hassos/releases/download/1.9/hassos_rpi3-64-1.9.img.gz +[vmdk]: https://github.com/home-assistant/hassos/releases/download/1.9/hassos_ova-1.9.vmdk [linux]: https://github.com/home-assistant/hassio-build/tree/master/install#install-hassio [local]: http://hassio.local:8123 [samba]: /addons/samba/ diff --git a/source/hassio/installing_third_party_addons.markdown b/source/hassio/installing_third_party_addons.markdown index 0bf6cb3166c..0840aa4a692 100644 --- a/source/hassio/installing_third_party_addons.markdown +++ b/source/hassio/installing_third_party_addons.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Installing third-party add-ons" -description: "Instructions how to get started using third-party add-ons." +description: "Instructions on how to get started using third-party add-ons." date: 2017-05-14 13:28 sidebar: true comments: false @@ -16,19 +16,19 @@ https://github.com/home-assistant/hassio-addons-example ```

-Home Assistant cannot guarantee the quality or security of third party add-ons. Use at your own risk. +Home Assistant cannot guarantee the quality or security of third-party add-ons. Use at your own risk.

- + From the Hass.io main panel open the add-on store.

- -Add the URLs of repositories (one per line) and then press "Save". A new card for the repository will appear. + +Add the URL of the repository and then press "Add". A new card for the repository will appear.

### {% linkable_title Help: Repository is not showing up %} -If you have added a repository, but it's not showing up, it means that the repository contains invalid configuration. Go to the Hass.io panel -> Three dot menu -> Advanced Settings -> Supervisor card -> View logs and scroll to the bottom. It should tell you what went wrong. Report this information to the repository author. +If you have added a repository, but it's not showing up, it means that the repository contains invalid configuration. Go to the Hass.io panel and then the System tab to find the System log. It should tell you what went wrong. Report this information to the repository author. diff --git a/source/hassio/run_local.markdown b/source/hassio/run_local.markdown index 6dbd4781bf0..8085f77f1f3 100644 --- a/source/hassio/run_local.markdown +++ b/source/hassio/run_local.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Run local scripts" -description: "Instructions on how-to run local script for Home Assistant." +description: "Instructions on how to run a local script for Home Assistant." date: 2017-04-30 13:28 sidebar: true comments: false @@ -9,15 +9,15 @@ sharing: true footer: true --- -Hass.io is a managed environment, which means that you can't install applications that can be embedded into Home Assistant using the `command_line` sensor/switch. +Hass.io is a managed environment, which means you can't install applications that can be embedded into Home Assistant using the `command_line` sensor/switch. -There are three options if you need to run a script to read data from a sensor or send commands to other devices on Hass.io. +There are three options if you need to run a script which reads data from a sensor or sends commands to other devices on Hass.io. -The first option is to write a custom component for Home Assistant. Using Python, you can communicate with your device. For more information about developing a custom component, take a look at the [developer documentation][custom-component]. +The first option is to write a custom component for Home Assistant. This implies that you can communicate with your device using Python. For more information about developing a custom component, take a look at [custom-component development][custom-component]. -The second option is to use STDIN inside add-on and use the service `hassio.addon_stdin` to send data. More about this options look into [developer documentation][communication] for internal add-on communication. There is also describe how do you can easy access to Home-Assistant Rest API. +The second option is to use STDIN inside an add-on and use the service `hassio.addon_stdin` to send data. For more information, have a look at [internal add-on communication][communication]. Here you will also find how you can easily access the Home Assistant Rest API. -The third option is to make a local add-on for Hass.io that sends the data to Home Assistant via MQTT. Before we dive into this, read up on [Hass.io add-on development][addons-tutorial] first. +The third option is to create a local add-on for Hass.io that sends the data to Home Assistant via MQTT. Before we dive into this, read up on [Hass.io add-on development][addons-tutorial] first. For security and speed, Hass.io does not provide a way for containers to communicate directly. So the first step is to set up a communication channel. We're going to use MQTT for this using the [MQTT broker add-on][mqtt-addon]. @@ -25,7 +25,7 @@ For security and speed, Hass.io does not provide a way for containers to communi We loop in our script to fetch data and push it to MQTT and wait until the next process is ready. Here is a basic example and structure for that process. -Our Dockerfile need to install: +In our Dockerfile we need to install: ``` RUN apk --no-cache add jq mosquitto-clients @@ -65,13 +65,14 @@ done We wait for incoming data from the MQTT broker. We can also use an `input_boolean` that triggers an automation to publish a custom command to MQTT topic that can process multiple things in one add-on. -Our Dockerfile need to install: +In our Dockerfile we need to install: ``` RUN apk --no-cache add jq mosquitto-clients ``` Now we can process it with `run.sh`: + ```bash #!/bin/bash set -e diff --git a/source/hassio/zwave.markdown b/source/hassio/zwave.markdown index 3ffe692ecf5..6920a30615c 100644 --- a/source/hassio/zwave.markdown +++ b/source/hassio/zwave.markdown @@ -16,7 +16,7 @@ zwave: usb_path: /dev/ttyACM0 ``` -### RAZBERRY BOARD +### {% linkable_title RAZBERRY BOARD %} If you need GPIO on Raspberry Pi 3 for your Z-Wave module, add the following line into `config.txt` (you have to access that on the SD card directly; simply plug it into your PC and edit it there): @@ -24,12 +24,6 @@ If you need GPIO on Raspberry Pi 3 for your Z-Wave module, add the following lin dtoverlay=pi3-miniuart-bt ``` -For some devices the `/dev/ttyAMA0` device is not detected by udev and is therefore not mapped by Docker. To explicitly set this device for mapping to Home-Assistant, execute the following command using the ssh add-on: - -```bash -$ curl -d '{"devices": ["ttyAMA0"]}' http://hassio/homeassistant/options -``` - After that, you need to change `usb_path` to `/dev/ttyAMA0` in your `configuration.yaml`. ```yaml @@ -37,12 +31,12 @@ zwave: usb_path: /dev/ttyAMA0 ``` -### HUSBZB-1: +### {% linkable_title HUSBZB-1 %} ```yaml zwave: usb_path: /dev/ttyUSB0 - + zha: usb_path: /dev/ttyUSB1 database_path: /config/zigbee.db diff --git a/source/help/index.markdown b/source/help/index.markdown index aecf32601f7..9272fb2bf14 100644 --- a/source/help/index.markdown +++ b/source/help/index.markdown @@ -3,7 +3,7 @@ layout: page title: "Help" description: "If you need help or have a question..." date: 2015-06-25 12:30 -sidebar: false +sidebar: true comments: false sharing: true footer: true @@ -11,24 +11,29 @@ footer: true There are various ways to get in touch with the Home Assistant community. It doesn't matter if you have a question, need help, want to request a feature, or just say 'Hi'. -### {% linkable_title Communication channels %} +### {% linkable_title Communication channels %} - - [Forum][forum] - - [Discord Chat Server][discord] for general Home Assistant discussions and questions. - - Follow us on [Twitter][twitter], use [@home_assistant][twitter] - - Join the [Google+ community][google-plus] - - Join the [Reddit subreddit][reddit] in [/r/homeassistant][reddit] +- [Forum][forum] +- [Discord Chat Server][discord] for general Home Assistant discussions and questions. +- Follow us on [Twitter][twitter], use [@home_assistant][twitter] +- Join the [Facebook community][facebook] +- Join the [Google+ community][google-plus] +- Join the Reddit in [/r/homeassistant][reddit] ### {% linkable_title Bugs, Feature requests, and alike %} -Have you found an issue in your Home Assistant installation? Please report it. Reporting it makes it easy to track and ensures that it gets fixed. +Have you found an issue in your Home Assistant installation? Please report it. Reporting it makes it easy to track and ensures that it gets fixed. For more details please refer to [Reporting issues](/help/reporting_issues/) page. - [Issue tracker Home Assistant](https://github.com/home-assistant/home-assistant/issues) - [Issue tracker home-assistant.io](https://github.com/home-assistant/home-assistant.io/issues) (Website and documentation) -- [Feature requests Home Assistant](https://community.home-assistant.io/c/feature-requests) +- [Issue tracker Frontend](https://github.com/home-assistant/home-assistant-polymer/issues) (Frontend) +- [Issue tracker Hass.io](https://github.com/home-assistant/hassio/issues) +- [Feature requests Home Assistant](https://community.home-assistant.io/c/feature-requests) (Don't post feature requests in the issue trackers. Thanks.) ### {% linkable_title Videos, talks, workshops and alike %} +- [Build your own smart home with Home Assistant](https://zmonkey.org/blog/files/Home%20Assistant%202018%20v1.0.pdf) at [OpenWest](https://openwest.org) - June 2018 +- [Automate your home with Home Assistant](https://www.youtube.com/watch?v=SSrgi4iHGbs) at [foss-north 2018](http://foss-north.se/2018/speakers-and-talks.html#jparadies) - March 2018 - [Home Assistant](https://github.com/home-assistant/home-assistant-assets/tree/master/english/2017-qecampX) at QECampX 2017 - October 2017 - [Open Source Heimautomation mit Home Assistant](https://github.com/home-assistant/home-assistant-assets/tree/master/german/2017-maker-faire-zurich) at [Mini Maker Faire Zurich 2017](https://www.makerfairezurich.ch/en/) - September 2017 - [Why we can't have the Internet of Nice Things: A home automation primer](https://www.openwest.org/custom/description.php?id=92) at [OpenWest 2017](https://www.openwest.org) - July 2017 @@ -38,7 +43,7 @@ Have you found an issue in your Home Assistant installation? Please report it. R - [Home Assistant - Erweiterungen (Platforms/Components)](https://github.com/home-assistant/home-assistant-assets/tree/master/german/2016-puzzle) at [Puzzle ITC](https://www.puzzle.ch/de/) - December 2016 - [Automating Your Life - Home Automation](http://slides.com/teagan42/life_automation#/) at Develop Denver 2016 - August - [Building Online Communities: Home Assistant](https://medium.com/@gitter/building-online-communities-home-assistant-8818dff671ad#.och4x4rhx) - July 2016 -- [Home Assistant Support 101 - Getting around in Home Assistant](https://www.youtube.com/watch?v=dRfk9JAlPJk) ([Slides](https://docs.google.com/presentation/d/1PUnOpeFZxNj4LEjaohGqH_1hOGQGuS5yRHD1ThHr6nk/edit?usp=sharing)) - June 2016 +- [Home Assistant Support 101 - Getting around in Home Assistant](https://www.youtube.com/watch?v=dRfk9JAlPJk) ([Slides](https://docs.google.com/presentation/d/1PUnOpeFZxNj4LEjaohGqH_1hOGQGuS5yRHD1ThHr6nk/edit?usp=sharing)) - June 2016 - [Awaken your home: Python and the Internet of Things](https://www.youtube.com/watch?v=Cfasc9EgbMU&list=PLKsVm4cWHDQB9JBcD7_ZfNcvC6xx47QHT&index=1) at PyCon 2016 - June 2016 - [Automating your Home with Home Assistant](https://www.youtube.com/watch?v=4-6rTwKl6ww&list=PLKsVm4cWHDQB9JBcD7_ZfNcvC6xx47QHT&index=2) at OpenIoT 2016 - March 2016 @@ -48,6 +53,12 @@ Looking for [talking points](/help/talking-points/) or [trivia](/help/trivia)? Don't miss the regular [Home Assistant podcasts](https://hasspodcast.io/). +- [​Home Assistant lets you automate your smart home without giving up privacy](https://www.the-ambient.com/features/home-assistant-automation-privacy-582) - May 2018 +- [HackSpace magazine #6](https://s3-eu-west-1.amazonaws.com/rpi-magazines/issues/full_pdfs/000/000/013/original/HS_6_Digital_Optimised.pdf?1524495009) - May 2018 +- [SmartThings vs Home Assistant](https://smarthome.university/smartthings-vs-home-assistant/) - April 2018 +- [The winners of the Thomas-Krenn-Awards 2018](https://www.thomas-krenn.com/de/tkmag/allgemein/die-gewinner-des-thomas-krenn-awards-2018-stehen-fest/) - March 2018 +- [Best of Open Source Smart Home: Home Assistant vs OpenHAB](https://smarthome.university/your-smart-home-platform-home-assistant-vs-openhab/) - February 2018 +- [Hausautomations-Schaltzentrale Home Assistant auf Python-Basis](https://www.heise.de/ct/ausgabe/2017-26-Hausautomations-Schaltzentrale-Home-Assistant-3909532.html) - December 2017 - [Using Home Assistant the ARTIK Cloud](https://developer.artik.io/documentation/developer-guide/wireless-iot/hass.html) - September 2017 - [Control home automation hardware with Home Assistant](http://www.linux-magazine.com/Issues/2017/203/Home-Assistant) - August 2017 - [Smart Home Home Assistant KNX Alexa Sprachsteuerung](http://onesmarthome.de/smart-home-home-assistant-knx-alexa-sprachsteuerung/) - August 2017 @@ -60,7 +71,7 @@ Don't miss the regular [Home Assistant podcasts](https://hasspodcast.io/). - [Monitor IoT devices with Home Assistant and Datadog](https://www.datadoghq.com/blog/monitor-home-assistant/) - June 2017 - [Castálio Podcast - Episódio 102: Marcelo Mello - Red Hat e Automação Residencial com Home Assistant](https://youtu.be/hZq8ucpzjCs) - May 2017 - [Paulus Schoutsen and Home Assistant - Episode 8](http://codepop.com/open-sourcecraft/episodes/paulus-schoutsen/) - March 2017 -- [Zammad, Home Assistant und Freifunk - are the winner of the Thomas-Krenn-Awards 2017](https://www.thomas-krenn.com/de/tkmag/allgemein/zammad-home-assistant-und-freifunk-das-sind-die-gewinner-des-thomas-krenn-awards-2017/) - March 2017 +- [Zammad, Home Assistant and Freifunk - are the winner of the Thomas-Krenn-Awards 2017](https://www.thomas-krenn.com/de/tkmag/allgemein/zammad-home-assistant-und-freifunk-das-sind-die-gewinner-des-thomas-krenn-awards-2017/) - March 2017 - [10 open source software tools for developing IoT applications](http://www.cbronline.com/news/internet-of-things/10-open-source-software-tools-developing-iot-applications/) - March 2017 - [A Look at HASSbian: Raspberry Pi for Home Automation](http://www.piboards.com/2017/03/07/a-look-at-hassbian-raspberry-pi-for-home-automation/)- March 2017 - [Home Assistant with Paulus Schoutsen - Episode 94](https://www.podcastinit.com/episode-94-home-assistant-with-paulus-schoutsen/) - January 2017 @@ -73,12 +84,9 @@ Don't miss the regular [Home Assistant podcasts](https://hasspodcast.io/). - [5 open source home automation tools](https://opensource.com/life/16/3/5-open-source-home-automation-tools) by [opensource.com](https://opensource.com) - March 2016 - [Home Assistant – Open Source Python Home Automation Platform](http://www.automatedhome.co.uk/new-products/home-assistant-open-source-python-home-automation-platform.html) - January 2015 -### {% linkable_title Roadmap %} - -There is no explicit roadmap available but the public [tracker](https://www.pivotaltracker.com/n/projects/1250084) can give you some insight into what is going on. - [forum]: https://community.home-assistant.io/ [twitter]: https://twitter.com/home_assistant +[facebook]: https://www.facebook.com/homeassistantio [google-plus]: https://plus.google.com/u/0/b/110560654828510104551/communities/106562234893511202708 [reddit]: https://reddit.com/r/homeassistant [discord]: https://discord.gg/c5DvZ4e diff --git a/source/help/reporting_issues.markdown b/source/help/reporting_issues.markdown new file mode 100644 index 00000000000..d2290788c55 --- /dev/null +++ b/source/help/reporting_issues.markdown @@ -0,0 +1,72 @@ +--- +layout: page +title: "Reporting issues" +description: "Reporting issues about Home Assistant" +date: 2018-03-26 09:00 +sidebar: false +comments: false +sharing: true +footer: true +--- + +If you have an installation, a setup or a configuration issue please use our [Forum](https://community.home-assistant.io/) to get help. We have a big community which will help you if they can. + +If you found a bug then please report it in one of our [trackers](/help/#bugs-feature-requests-and-alike). To help you and our developers to identify the issue quickly, please fill out the provided template. The "weird" content you will see is there to render your entry in a nice format after submitting. It's just [markddown](https://guides.github.com/features/mastering-markdown/). + +Use the command below to get the Home Assistant release you are running from a command-line. + +```bash +$ hass --version +``` + +Otherwise check the **About** page which is accessible in the **Developer tools** of the Home Assistant frontend. + +### {% linkable_title First Home Assistant release with the issue %} + +Please provide the release which contains the issue. + +### {% linkable_title Last working Home Assistant release (if known) %} + +If possible, provide the latest release of which you know that the component or platform was working. Home Assistant is evolving very fast and issues may already be addressed or be introduced by a recent change. + +### {% linkable_title Operating environment (Hass.io/Docker/Windows/etc.) %} + +There are many different ways to run Home Assistant. In this section please mention which you are using, e.g. manual installation, [Hass.io](/hassio/), Hasbian or as container (Docker). It can help if you mention which operating system you are using because not all are supported on the same level. + +### {% linkable_title Component/platform %} + +Please add the link to the documention of the component/platform in question. E.g., + +- issue with the `random` sensor: [https://www.home-assistant.io/components/sensor.random/](/components/sensor.random/) +- issue with the `hue` component: [https://www.home-assistant.io/components/hue/](/components/hue/) + +### {% linkable_title Description of problem %} + +Provide a summary of your issue and tell us what's wrong. + +There are components and platform which require additional steps (installing third-party tools, compilers, etc.) to get your setup working. Please describe the steps you took and the ones to reproduce the issue if needed. + +### {% linkable_title Problem-relevant `configuration.yaml` entries %} + +To exclude configuration issues and allow the developers to quickly test, and perhaps reproduce, your issue, add the relevant part of your `configuration.yaml` file. This file is located in your [configuration folder](/docs/configuration/). + +```yaml +sensor: + - platform: random +``` + +Make sure that you don't post your username, password, API key, access token or other [secrets](/docs/configuration/secrets/). + +### {% linkable_title Traceback (if applicable) %} + +If things go wrong there will be a so-called traceback or an error message in other words in your log. Please include this. It starts with **Traceback** and can contain informations where the error was triggered in the code. + +```bash +Traceback (most recent call last): +... +``` + +### {% linkable_title Additional information %} + +This section can contain additional details or other observation. Often the little things can help as well. + diff --git a/source/help/talking-points.markdown b/source/help/talking-points.markdown index 24f587f3928..44c106d2dec 100644 --- a/source/help/talking-points.markdown +++ b/source/help/talking-points.markdown @@ -12,10 +12,8 @@ footer: true People are starting to present Home Assistant at meetings and get-togethers. Below you find a couple of bullet points for your presentation. - [Numbers, numbers, numbers](/help/trivia/) and other details -- Over 750 implementations +- Over 1000 implementations - Not depending on cloud services. We like to keep your privacy private - Control all your devices from a single, mobile-friendly interface - Written in Python3 with 94% test coverage - Active and helpful community - - diff --git a/source/help/trivia.markdown b/source/help/trivia.markdown index 64089ecf5fd..f4a91f4a664 100644 --- a/source/help/trivia.markdown +++ b/source/help/trivia.markdown @@ -17,7 +17,7 @@ Isn't it obvious? Home Assistant is the good soul that is assisting you in your ### {% linkable_title Website %} -The website [https://home-assistant.io](https://home-assistant.io) was launched on December 18, 2014 and contains documentation about the setup process, the platforms and components, and for the developers. +The website [https://www.home-assistant.io](/) was launched on December 18, 2014 and contains documentation about the setup process, the platforms and components, and for the developers. ### {% linkable_title Logo %} @@ -25,21 +25,20 @@ The current logo was created by [Jeremy Geltman](http://jeremygeltman.com/). Fur ### {% linkable_title License %} -Home Assistant is open source software and available under the [MIT](https://opensource.org/licenses/MIT) license. +Home Assistant is open source software and available under the [Apache 2.0](https://www.apache.org/licenses/LICENSE-2.0) license. -### {% linkable_title Numbers %} +### {% linkable_title Numbers %} This sections just contains some random numbers of the Home Assistant eco-system. Sorry, only the main repository counts. -| Description | 2015 | 2016 | +| Description | 2015 | 2016 | 2017 | |---|---| -| [Gitter.io](https://discord.gg/c5DvZ4e) | 334 | 2367 | -| [Forum posts](https://community.home-assistant.io/) | 352 | 33004 | -| [Forum topics](https://community.home-assistant.io/) | 83 | 4863 | -| [Forum members](https://community.home-assistant.io/) | 92 | 3931 | -| [Github stars](https://github.com/home-assistant/home-assistant/stargazers) | 2519 | 5239 | -| [Github forks](https://github.com/home-assistant/home-assistant/network) | 374 | 1424 | -| Page views [ha.io](https://home-assistant.io) | 190,271 | 1,284,855 | +| [Forum posts](https://community.home-assistant.io/) | 352 | 33004 | 171981 | +| [Forum topics](https://community.home-assistant.io/) | 83 | 4863 | 21512 | +| [Forum members](https://community.home-assistant.io/) | 92 | 3931 | 16663 | +| [Github stars](https://github.com/home-assistant/home-assistant/stargazers) | 2519 | 5239 | 12074 | +| [Github forks](https://github.com/home-assistant/home-assistant/network) | 374 | 1424 | 3474 | +| Page views [ha.io](/) | 600,372 | 6,614,343 | 23,727,481 | ### {% linkable_title Commit per year %} @@ -50,13 +49,14 @@ The numbers below only covers the [main git repository](https://github.com/home- 2014: 328 2015: 2963 2016: 4299 +2017: 3917 ``` More details and statistics can be found on [Github](https://github.com/home-assistant/home-assistant/graphs/contributors). ### {% linkable_title First commit %} -The first commit in `git` was made on Sep 17, 2013 by [Paulus Schoutsen](https://github.com/balloob). +The first commit in `git` was made on Sep 17, 2013 by [Paulus Schoutsen](https://github.com/balloob). ```bash commit d55e4d53cccc9123d03f45c53441e7cbfc58e515 diff --git a/source/images/OpenCV_Logo.png b/source/images/OpenCV_Logo.png deleted file mode 100644 index ba8bcf97285..00000000000 Binary files a/source/images/OpenCV_Logo.png and /dev/null differ diff --git a/source/images/architecture/ha_architecture.svg b/source/images/architecture/ha_architecture.svg new file mode 100644 index 00000000000..dbe41b93bc9 --- /dev/null +++ b/source/images/architecture/ha_architecture.svg @@ -0,0 +1,856 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + Home AssistantCore Architecture + + Timer + + Event Bus + + StateMachine + listen for events/fire event + + ServiceRegistry + + + + Light + + + + Many more... + Device Tracker + Switch + Components + set state + + + + + + + + call event listeners + publishservice + callservice + + + call_serviceevents + + service_calledevents + time_changedevents + state_changedevents + + diff --git a/source/images/architecture/home_automation_landscape.svg b/source/images/architecture/home_automation_landscape.svg new file mode 100644 index 00000000000..c0fbca28183 --- /dev/null +++ b/source/images/architecture/home_automation_landscape.svg @@ -0,0 +1,904 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + Lights + + + + Smart Home + + HomeAutomation + User + + Configuration + + Home Control + Commands + Information + + + + Switches + Many more... + Internet of Things + + + + + Commands + Information + Information + Commands + Information(ie. light is on) + Commands(ie. turn light on) + Graphic by Paulus Schoutsen 2014, CC BY 4.0 + + diff --git a/source/images/blog/2017-11-hassio-virtual/hassio.png b/source/images/blog/2017-11-hassio-virtual/hassio.png new file mode 100644 index 00000000000..cf9d90b312c Binary files /dev/null and b/source/images/blog/2017-11-hassio-virtual/hassio.png differ diff --git a/source/images/blog/2017-11-hassio-virtual/social.png b/source/images/blog/2017-11-hassio-virtual/social.png new file mode 100644 index 00000000000..27ac464d579 Binary files /dev/null and b/source/images/blog/2017-11-hassio-virtual/social.png differ diff --git a/source/images/blog/2017-11-hassio-virtual/virtual-machine-manager.png b/source/images/blog/2017-11-hassio-virtual/virtual-machine-manager.png new file mode 100644 index 00000000000..78003a8577e Binary files /dev/null and b/source/images/blog/2017-11-hassio-virtual/virtual-machine-manager.png differ diff --git a/source/images/blog/2017-12-0.59/color-wheel.png b/source/images/blog/2017-12-0.59/color-wheel.png new file mode 100644 index 00000000000..dc45f6dc5e8 Binary files /dev/null and b/source/images/blog/2017-12-0.59/color-wheel.png differ diff --git a/source/images/blog/2017-12-0.59/components.png b/source/images/blog/2017-12-0.59/components.png new file mode 100644 index 00000000000..a68b4b503f4 Binary files /dev/null and b/source/images/blog/2017-12-0.59/components.png differ diff --git a/source/images/blog/2017-12-0.59/picker.png b/source/images/blog/2017-12-0.59/picker.png new file mode 100644 index 00000000000..3021dd2b13a Binary files /dev/null and b/source/images/blog/2017-12-0.59/picker.png differ diff --git a/source/images/blog/2017-12-0.60/components.png b/source/images/blog/2017-12-0.60/components.png new file mode 100644 index 00000000000..8f82d418023 Binary files /dev/null and b/source/images/blog/2017-12-0.60/components.png differ diff --git a/source/images/blog/2018-01-0.61/components.png b/source/images/blog/2018-01-0.61/components.png new file mode 100644 index 00000000000..8f03dfe6b70 Binary files /dev/null and b/source/images/blog/2018-01-0.61/components.png differ diff --git a/source/images/blog/2018-01-0.62/components.png b/source/images/blog/2018-01-0.62/components.png new file mode 100644 index 00000000000..cf3ecb92c77 Binary files /dev/null and b/source/images/blog/2018-01-0.62/components.png differ diff --git a/source/images/blog/2018-02-0.63/components.png b/source/images/blog/2018-02-0.63/components.png new file mode 100644 index 00000000000..1e0b666161b Binary files /dev/null and b/source/images/blog/2018-02-0.63/components.png differ diff --git a/source/images/blog/2018-02-0.64/components.png b/source/images/blog/2018-02-0.64/components.png new file mode 100644 index 00000000000..3d3e8855759 Binary files /dev/null and b/source/images/blog/2018-02-0.64/components.png differ diff --git a/source/images/blog/2018-03-0.65/components.png b/source/images/blog/2018-03-0.65/components.png new file mode 100644 index 00000000000..74ef7019330 Binary files /dev/null and b/source/images/blog/2018-03-0.65/components.png differ diff --git a/source/images/blog/2018-03-0.65/entity-registry-name.gif b/source/images/blog/2018-03-0.65/entity-registry-name.gif new file mode 100644 index 00000000000..0af429f850a Binary files /dev/null and b/source/images/blog/2018-03-0.65/entity-registry-name.gif differ diff --git a/source/images/blog/2018-03-0.65/filter-example.png b/source/images/blog/2018-03-0.65/filter-example.png new file mode 100644 index 00000000000..eab04040b32 Binary files /dev/null and b/source/images/blog/2018-03-0.65/filter-example.png differ diff --git a/source/images/blog/2018-03-0.65/voice-commands.png b/source/images/blog/2018-03-0.65/voice-commands.png new file mode 100644 index 00000000000..39a98deef7e Binary files /dev/null and b/source/images/blog/2018-03-0.65/voice-commands.png differ diff --git a/source/images/blog/2018-03-0.66/components.png b/source/images/blog/2018-03-0.66/components.png new file mode 100644 index 00000000000..890a4b8512f Binary files /dev/null and b/source/images/blog/2018-03-0.66/components.png differ diff --git a/source/images/blog/2018-03-fedora-atomic/social.png b/source/images/blog/2018-03-fedora-atomic/social.png new file mode 100644 index 00000000000..c6bf2a202b3 Binary files /dev/null and b/source/images/blog/2018-03-fedora-atomic/social.png differ diff --git a/source/images/blog/2018-03-release-schedule/release-schedule-diagram.png b/source/images/blog/2018-03-release-schedule/release-schedule-diagram.png new file mode 100644 index 00000000000..a55075f53e0 Binary files /dev/null and b/source/images/blog/2018-03-release-schedule/release-schedule-diagram.png differ diff --git a/source/images/blog/2018-03-release-schedule/social.png b/source/images/blog/2018-03-release-schedule/social.png new file mode 100644 index 00000000000..74449776944 Binary files /dev/null and b/source/images/blog/2018-03-release-schedule/social.png differ diff --git a/source/images/blog/2018-04-0.67/components.png b/source/images/blog/2018-04-0.67/components.png new file mode 100644 index 00000000000..798602b5c1c Binary files /dev/null and b/source/images/blog/2018-04-0.67/components.png differ diff --git a/source/images/blog/2018-04-0.68/components.png b/source/images/blog/2018-04-0.68/components.png new file mode 100644 index 00000000000..57d9fc40b38 Binary files /dev/null and b/source/images/blog/2018-04-0.68/components.png differ diff --git a/source/images/blog/2018-04-developer-website/screenshot.png b/source/images/blog/2018-04-developer-website/screenshot.png new file mode 100644 index 00000000000..faccecea640 Binary files /dev/null and b/source/images/blog/2018-04-developer-website/screenshot.png differ diff --git a/source/images/blog/2018-04-google-assistant/google-assistant-home-assistant.png b/source/images/blog/2018-04-google-assistant/google-assistant-home-assistant.png new file mode 100644 index 00000000000..a7ec721fbcc Binary files /dev/null and b/source/images/blog/2018-04-google-assistant/google-assistant-home-assistant.png differ diff --git a/source/images/blog/2018-04-hassio-2018/blogpost.png b/source/images/blog/2018-04-hassio-2018/blogpost.png new file mode 100644 index 00000000000..443fb8a540b Binary files /dev/null and b/source/images/blog/2018-04-hassio-2018/blogpost.png differ diff --git a/source/images/blog/2018-04-ubiquiti-and-home-assistant/paulus.jpg b/source/images/blog/2018-04-ubiquiti-and-home-assistant/paulus.jpg new file mode 100644 index 00000000000..2a4e3d885f8 Binary files /dev/null and b/source/images/blog/2018-04-ubiquiti-and-home-assistant/paulus.jpg differ diff --git a/source/images/blog/2018-05-0.69/components.png b/source/images/blog/2018-05-0.69/components.png new file mode 100644 index 00000000000..d1d12516dbf Binary files /dev/null and b/source/images/blog/2018-05-0.69/components.png differ diff --git a/source/images/blog/2018-06-0.71/components.png b/source/images/blog/2018-06-0.71/components.png new file mode 100644 index 00000000000..4b0052a35e1 Binary files /dev/null and b/source/images/blog/2018-06-0.71/components.png differ diff --git a/source/images/blog/2018-06-esphomelib/social.png b/source/images/blog/2018-06-esphomelib/social.png new file mode 100644 index 00000000000..b44d8bfb5b8 Binary files /dev/null and b/source/images/blog/2018-06-esphomelib/social.png differ diff --git a/source/images/blog/2018-06-esphomelib/switch.png b/source/images/blog/2018-06-esphomelib/switch.png new file mode 100644 index 00000000000..f1302959eb2 Binary files /dev/null and b/source/images/blog/2018-06-esphomelib/switch.png differ diff --git a/source/images/blog/2018-06-release-0.72/config_entry.png b/source/images/blog/2018-06-release-0.72/config_entry.png new file mode 100644 index 00000000000..fba0cb2931a Binary files /dev/null and b/source/images/blog/2018-06-release-0.72/config_entry.png differ diff --git a/source/images/blog/2018-06-release-0.72/lovelace.png b/source/images/blog/2018-06-release-0.72/lovelace.png new file mode 100644 index 00000000000..21e870e347c Binary files /dev/null and b/source/images/blog/2018-06-release-0.72/lovelace.png differ diff --git a/source/images/blog/2018-07-0.73/lovelace-elements.png b/source/images/blog/2018-07-0.73/lovelace-elements.png new file mode 100644 index 00000000000..64d18b6c323 Binary files /dev/null and b/source/images/blog/2018-07-0.73/lovelace-elements.png differ diff --git a/source/images/blog/2018-07-0.74/components.png b/source/images/blog/2018-07-0.74/components.png new file mode 100644 index 00000000000..bc3a989c790 Binary files /dev/null and b/source/images/blog/2018-07-0.74/components.png differ diff --git a/source/images/blog/2018-07-0.74/paulus_guido.jpg b/source/images/blog/2018-07-0.74/paulus_guido.jpg new file mode 100644 index 00000000000..27fa92ccf75 Binary files /dev/null and b/source/images/blog/2018-07-0.74/paulus_guido.jpg differ diff --git a/source/images/blog/2018-07-hassio-images/blogpost.png b/source/images/blog/2018-07-hassio-images/blogpost.png new file mode 100644 index 00000000000..443fb8a540b Binary files /dev/null and b/source/images/blog/2018-07-hassio-images/blogpost.png differ diff --git a/source/images/blog/2018-08-0.75/change-entity.png b/source/images/blog/2018-08-0.75/change-entity.png new file mode 100644 index 00000000000..32f2028e5c8 Binary files /dev/null and b/source/images/blog/2018-08-0.75/change-entity.png differ diff --git a/source/images/blog/2018-08-0.75/components.png b/source/images/blog/2018-08-0.75/components.png new file mode 100644 index 00000000000..f4e8b4a6642 Binary files /dev/null and b/source/images/blog/2018-08-0.75/components.png differ diff --git a/source/images/components/flock/flock-webhook.png b/source/images/components/flock/flock-webhook.png new file mode 100644 index 00000000000..754c3e91e06 Binary files /dev/null and b/source/images/components/flock/flock-webhook.png differ diff --git a/source/images/components/flock/new-webhook.png b/source/images/components/flock/new-webhook.png new file mode 100644 index 00000000000..37c6e062802 Binary files /dev/null and b/source/images/components/flock/new-webhook.png differ diff --git a/source/images/components/light/group.png b/source/images/components/light/group.png new file mode 100644 index 00000000000..00abf866382 Binary files /dev/null and b/source/images/components/light/group.png differ diff --git a/source/images/components/netdata/details.png b/source/images/components/netdata/details.png new file mode 100644 index 00000000000..13f57d7e16f Binary files /dev/null and b/source/images/components/netdata/details.png differ diff --git a/source/images/frontend/lokalise-multilanguage-view-button.png b/source/images/frontend/lokalise-multilanguage-view-button.png deleted file mode 100644 index 26872d47266..00000000000 Binary files a/source/images/frontend/lokalise-multilanguage-view-button.png and /dev/null differ diff --git a/source/images/hassio/screenshots/adding_repositories.png b/source/images/hassio/screenshots/adding_repositories.png new file mode 100644 index 00000000000..ef3edc88f5d Binary files /dev/null and b/source/images/hassio/screenshots/adding_repositories.png differ diff --git a/source/images/hassio/screenshots/local_repository.png b/source/images/hassio/screenshots/local_repository.png index 0c0af4fb434..06bc8e245de 100644 Binary files a/source/images/hassio/screenshots/local_repository.png and b/source/images/hassio/screenshots/local_repository.png differ diff --git a/source/images/hassio/screenshots/main_panel_addon_store.png b/source/images/hassio/screenshots/main_panel_addon_store.png new file mode 100644 index 00000000000..deffb7db03a Binary files /dev/null and b/source/images/hassio/screenshots/main_panel_addon_store.png differ diff --git a/source/images/hassio/screenshots/main_panel_store_icon.png b/source/images/hassio/screenshots/main_panel_store_icon.png deleted file mode 100644 index 2e92f5fb9d0..00000000000 Binary files a/source/images/hassio/screenshots/main_panel_store_icon.png and /dev/null differ diff --git a/source/images/hassio/screenshots/repositories_editor.png b/source/images/hassio/screenshots/repositories_editor.png deleted file mode 100644 index 5b7f4417120..00000000000 Binary files a/source/images/hassio/screenshots/repositories_editor.png and /dev/null differ diff --git a/source/images/lovelace/lovelace-ui-comparison.png b/source/images/lovelace/lovelace-ui-comparison.png new file mode 100644 index 00000000000..1d79d98716b Binary files /dev/null and b/source/images/lovelace/lovelace-ui-comparison.png differ diff --git a/source/images/lovelace/lovelace_entity_filter.png b/source/images/lovelace/lovelace_entity_filter.png new file mode 100644 index 00000000000..0f873ad2ad6 Binary files /dev/null and b/source/images/lovelace/lovelace_entity_filter.png differ diff --git a/source/images/lovelace/lovelace_entity_filter_glance.png b/source/images/lovelace/lovelace_entity_filter_glance.png new file mode 100644 index 00000000000..c4d7ed37104 Binary files /dev/null and b/source/images/lovelace/lovelace_entity_filter_glance.png differ diff --git a/source/images/lovelace/lovelace_glance_card.png b/source/images/lovelace/lovelace_glance_card.png new file mode 100644 index 00000000000..179633f2c94 Binary files /dev/null and b/source/images/lovelace/lovelace_glance_card.png differ diff --git a/source/images/lovelace/lovelace_glance_card_custom_title.png b/source/images/lovelace/lovelace_glance_card_custom_title.png new file mode 100644 index 00000000000..a0ca1f8e9ea Binary files /dev/null and b/source/images/lovelace/lovelace_glance_card_custom_title.png differ diff --git a/source/images/lovelace/lovelace_history_graph.png b/source/images/lovelace/lovelace_history_graph.png new file mode 100644 index 00000000000..5a602955075 Binary files /dev/null and b/source/images/lovelace/lovelace_history_graph.png differ diff --git a/source/images/lovelace/lovelace_horizontal_stack.PNG b/source/images/lovelace/lovelace_horizontal_stack.PNG new file mode 100644 index 00000000000..c8b9625eaf5 Binary files /dev/null and b/source/images/lovelace/lovelace_horizontal_stack.PNG differ diff --git a/source/images/lovelace/lovelace_iframe.png b/source/images/lovelace/lovelace_iframe.png new file mode 100644 index 00000000000..b25f1029d7d Binary files /dev/null and b/source/images/lovelace/lovelace_iframe.png differ diff --git a/source/images/lovelace/lovelace_map_card.png b/source/images/lovelace/lovelace_map_card.png new file mode 100644 index 00000000000..9325ef07951 Binary files /dev/null and b/source/images/lovelace/lovelace_map_card.png differ diff --git a/source/images/lovelace/lovelace_markdown.png b/source/images/lovelace/lovelace_markdown.png new file mode 100644 index 00000000000..dd432a6abd4 Binary files /dev/null and b/source/images/lovelace/lovelace_markdown.png differ diff --git a/source/images/lovelace/lovelace_mediaplayer.png b/source/images/lovelace/lovelace_mediaplayer.png new file mode 100644 index 00000000000..2d34d42db8f Binary files /dev/null and b/source/images/lovelace/lovelace_mediaplayer.png differ diff --git a/source/images/lovelace/lovelace_picture.png b/source/images/lovelace/lovelace_picture.png new file mode 100644 index 00000000000..8de121e63aa Binary files /dev/null and b/source/images/lovelace/lovelace_picture.png differ diff --git a/source/images/lovelace/lovelace_picture_elements.gif b/source/images/lovelace/lovelace_picture_elements.gif new file mode 100644 index 00000000000..f38fe5c41fb Binary files /dev/null and b/source/images/lovelace/lovelace_picture_elements.gif differ diff --git a/source/images/lovelace/lovelace_picture_entity.gif b/source/images/lovelace/lovelace_picture_entity.gif new file mode 100644 index 00000000000..8b5ee294643 Binary files /dev/null and b/source/images/lovelace/lovelace_picture_entity.gif differ diff --git a/source/images/lovelace/lovelace_picture_glance.gif b/source/images/lovelace/lovelace_picture_glance.gif new file mode 100644 index 00000000000..01c94165552 Binary files /dev/null and b/source/images/lovelace/lovelace_picture_glance.gif differ diff --git a/source/images/lovelace/lovelace_plant.png b/source/images/lovelace/lovelace_plant.png new file mode 100644 index 00000000000..6a209e5d21d Binary files /dev/null and b/source/images/lovelace/lovelace_plant.png differ diff --git a/source/images/lovelace/lovelace_plant_card.png b/source/images/lovelace/lovelace_plant_card.png new file mode 100644 index 00000000000..6a209e5d21d Binary files /dev/null and b/source/images/lovelace/lovelace_plant_card.png differ diff --git a/source/images/lovelace/lovelace_unused_entites.png b/source/images/lovelace/lovelace_unused_entites.png new file mode 100644 index 00000000000..eb82dde1adb Binary files /dev/null and b/source/images/lovelace/lovelace_unused_entites.png differ diff --git a/source/images/lovelace/lovelace_vertical-horizontal-stack.png b/source/images/lovelace/lovelace_vertical-horizontal-stack.png new file mode 100644 index 00000000000..9efe7ed0dc9 Binary files /dev/null and b/source/images/lovelace/lovelace_vertical-horizontal-stack.png differ diff --git a/source/images/lovelace/lovelace_vertical-stack.png b/source/images/lovelace/lovelace_vertical-stack.png new file mode 100644 index 00000000000..e24e9baad2f Binary files /dev/null and b/source/images/lovelace/lovelace_vertical-stack.png differ diff --git a/source/images/lovelace/lovelace_views.png b/source/images/lovelace/lovelace_views.png new file mode 100644 index 00000000000..785f1c9af22 Binary files /dev/null and b/source/images/lovelace/lovelace_views.png differ diff --git a/source/images/lovelace/lovelace_weather.png b/source/images/lovelace/lovelace_weather.png new file mode 100644 index 00000000000..808038b63ab Binary files /dev/null and b/source/images/lovelace/lovelace_weather.png differ diff --git a/source/images/onvif.png b/source/images/onvif.png deleted file mode 100644 index 2ae6ddc58bf..00000000000 Binary files a/source/images/onvif.png and /dev/null differ diff --git a/source/images/press/ct.png b/source/images/press/ct.png new file mode 100644 index 00000000000..2e8ed08bba1 Binary files /dev/null and b/source/images/press/ct.png differ diff --git a/source/images/screenshots/binary_sensor_classes_icons.png b/source/images/screenshots/binary_sensor_classes_icons.png new file mode 100644 index 00000000000..53363bcb990 Binary files /dev/null and b/source/images/screenshots/binary_sensor_classes_icons.png differ diff --git a/source/images/screenshots/developer-tool-mqtt-icon.png b/source/images/screenshots/developer-tool-mqtt-icon.png new file mode 100644 index 00000000000..3ecfd4272fe Binary files /dev/null and b/source/images/screenshots/developer-tool-mqtt-icon.png differ diff --git a/source/images/screenshots/developer-tools.png b/source/images/screenshots/developer-tools.png index 4883ce89c95..37c6e191676 100644 Binary files a/source/images/screenshots/developer-tools.png and b/source/images/screenshots/developer-tools.png differ diff --git a/source/images/screenshots/filter-sensor.png b/source/images/screenshots/filter-sensor.png new file mode 100644 index 00000000000..679d2fdfe06 Binary files /dev/null and b/source/images/screenshots/filter-sensor.png differ diff --git a/source/images/screenshots/get_trafikverket_weather_station_example.png b/source/images/screenshots/get_trafikverket_weather_station_example.png new file mode 100644 index 00000000000..fd0d7535fe1 Binary files /dev/null and b/source/images/screenshots/get_trafikverket_weather_station_example.png differ diff --git a/source/images/screenshots/hello-world-state-card.png b/source/images/screenshots/hello-world-state-card.png new file mode 100644 index 00000000000..9b1f5cbc0ab Binary files /dev/null and b/source/images/screenshots/hello-world-state-card.png differ diff --git a/source/images/screenshots/limitlessled_assumed_state.png b/source/images/screenshots/limitlessled_assumed_state.png new file mode 100644 index 00000000000..ea1b99c3668 Binary files /dev/null and b/source/images/screenshots/limitlessled_assumed_state.png differ diff --git a/source/images/screenshots/mqtt-notify-action.png b/source/images/screenshots/mqtt-notify-action.png new file mode 100644 index 00000000000..bbb82abfb28 Binary files /dev/null and b/source/images/screenshots/mqtt-notify-action.png differ diff --git a/source/images/screenshots/mqtt-notify.png b/source/images/screenshots/mqtt-notify.png index 4c93fe1d14d..5b3f496ddf8 100644 Binary files a/source/images/screenshots/mqtt-notify.png and b/source/images/screenshots/mqtt-notify.png differ diff --git a/source/images/screenshots/sensor_device_classes_icons.png b/source/images/screenshots/sensor_device_classes_icons.png new file mode 100644 index 00000000000..58e115250ca Binary files /dev/null and b/source/images/screenshots/sensor_device_classes_icons.png differ diff --git a/source/images/screenshots/voice-commands.png b/source/images/screenshots/voice-commands.png index 5ff003a0fbf..39a98deef7e 100644 Binary files a/source/images/screenshots/voice-commands.png and b/source/images/screenshots/voice-commands.png differ diff --git a/source/images/supported_brands/Ryobi.png b/source/images/supported_brands/Ryobi.png new file mode 100644 index 00000000000..154ecec84cb Binary files /dev/null and b/source/images/supported_brands/Ryobi.png differ diff --git a/source/images/supported_brands/abode.jpg b/source/images/supported_brands/abode.jpg index 5a5d124cdcf..daaf32a7fca 100644 Binary files a/source/images/supported_brands/abode.jpg and b/source/images/supported_brands/abode.jpg differ diff --git a/source/images/supported_brands/acer.png b/source/images/supported_brands/acer.png index d13ee00b20a..366660abc63 100644 Binary files a/source/images/supported_brands/acer.png and b/source/images/supported_brands/acer.png differ diff --git a/source/images/supported_brands/actiontec.png b/source/images/supported_brands/actiontec.png index 4938b24c029..2d2db14effe 100644 Binary files a/source/images/supported_brands/actiontec.png and b/source/images/supported_brands/actiontec.png differ diff --git a/source/images/supported_brands/airvisual.jpg b/source/images/supported_brands/airvisual.jpg index c5edc1fd83a..757ce57f682 100644 Binary files a/source/images/supported_brands/airvisual.jpg and b/source/images/supported_brands/airvisual.jpg differ diff --git a/source/images/supported_brands/aladdin_connect.png b/source/images/supported_brands/aladdin_connect.png new file mode 100644 index 00000000000..d7b8dbc1fbb Binary files /dev/null and b/source/images/supported_brands/aladdin_connect.png differ diff --git a/source/images/supported_brands/alarmdecoder.png b/source/images/supported_brands/alarmdecoder.png index 143c42ffb2b..d13f9fab22c 100644 Binary files a/source/images/supported_brands/alarmdecoder.png and b/source/images/supported_brands/alarmdecoder.png differ diff --git a/source/images/supported_brands/alarmdotcom.png b/source/images/supported_brands/alarmdotcom.png index 2996f100c18..599442f7e31 100644 Binary files a/source/images/supported_brands/alarmdotcom.png and b/source/images/supported_brands/alarmdotcom.png differ diff --git a/source/images/supported_brands/alpha_vantage.png b/source/images/supported_brands/alpha_vantage.png new file mode 100644 index 00000000000..4674a3ad260 Binary files /dev/null and b/source/images/supported_brands/alpha_vantage.png differ diff --git a/source/images/supported_brands/amazon-echo.png b/source/images/supported_brands/amazon-echo.png index ade28580b2e..fdc30cd9c0f 100644 Binary files a/source/images/supported_brands/amazon-echo.png and b/source/images/supported_brands/amazon-echo.png differ diff --git a/source/images/supported_brands/amcrest.png b/source/images/supported_brands/amcrest.png index 270351a3449..fb6a8a6a8df 100644 Binary files a/source/images/supported_brands/amcrest.png and b/source/images/supported_brands/amcrest.png differ diff --git a/source/images/supported_brands/android_ip_webcam.png b/source/images/supported_brands/android_ip_webcam.png index 2ab060c05c1..07ced1a9359 100644 Binary files a/source/images/supported_brands/android_ip_webcam.png and b/source/images/supported_brands/android_ip_webcam.png differ diff --git a/source/images/supported_brands/anel.png b/source/images/supported_brands/anel.png index 54e066d123b..9bbf8ea47f5 100644 Binary files a/source/images/supported_brands/anel.png and b/source/images/supported_brands/anel.png differ diff --git a/source/images/supported_brands/anthemav.png b/source/images/supported_brands/anthemav.png index 3e0bfecaea8..1daca97b84f 100644 Binary files a/source/images/supported_brands/anthemav.png and b/source/images/supported_brands/anthemav.png differ diff --git a/source/images/supported_brands/antifurto365-ialarm.png b/source/images/supported_brands/antifurto365-ialarm.png new file mode 100644 index 00000000000..5ab86f11e15 Binary files /dev/null and b/source/images/supported_brands/antifurto365-ialarm.png differ diff --git a/source/images/supported_brands/apcupsd.png b/source/images/supported_brands/apcupsd.png index 2c377f5480e..ecc70bf7a84 100644 Binary files a/source/images/supported_brands/apcupsd.png and b/source/images/supported_brands/apcupsd.png differ diff --git a/source/images/supported_brands/apple-homekit.png b/source/images/supported_brands/apple-homekit.png new file mode 100644 index 00000000000..4099a7e60a4 Binary files /dev/null and b/source/images/supported_brands/apple-homekit.png differ diff --git a/source/images/supported_brands/apple.png b/source/images/supported_brands/apple.png index 54db3331e52..4c85726d403 100644 Binary files a/source/images/supported_brands/apple.png and b/source/images/supported_brands/apple.png differ diff --git a/source/images/supported_brands/archlinux.png b/source/images/supported_brands/archlinux.png index 3a3dcb1141d..c1d454acdcd 100644 Binary files a/source/images/supported_brands/archlinux.png and b/source/images/supported_brands/archlinux.png differ diff --git a/source/images/supported_brands/arduino.png b/source/images/supported_brands/arduino.png index 326c0f39304..bdb1cadc2ac 100644 Binary files a/source/images/supported_brands/arduino.png and b/source/images/supported_brands/arduino.png differ diff --git a/source/images/supported_brands/arest.png b/source/images/supported_brands/arest.png index c413ae70a14..3b0a96ce436 100644 Binary files a/source/images/supported_brands/arest.png and b/source/images/supported_brands/arest.png differ diff --git a/source/images/supported_brands/arlo.png b/source/images/supported_brands/arlo.png index d03205f1852..98b6fd2fd1e 100644 Binary files a/source/images/supported_brands/arlo.png and b/source/images/supported_brands/arlo.png differ diff --git a/source/images/supported_brands/armbian.png b/source/images/supported_brands/armbian.png index 5bf094fb1bb..826e920defb 100644 Binary files a/source/images/supported_brands/armbian.png and b/source/images/supported_brands/armbian.png differ diff --git a/source/images/supported_brands/aruba.png b/source/images/supported_brands/aruba.png index a1b42ede109..0686c9137f0 100644 Binary files a/source/images/supported_brands/aruba.png and b/source/images/supported_brands/aruba.png differ diff --git a/source/images/supported_brands/asterisk.png b/source/images/supported_brands/asterisk.png new file mode 100644 index 00000000000..3cd0f888d15 Binary files /dev/null and b/source/images/supported_brands/asterisk.png differ diff --git a/source/images/supported_brands/asus.png b/source/images/supported_brands/asus.png index 00473b5f520..96eb0411cda 100644 Binary files a/source/images/supported_brands/asus.png and b/source/images/supported_brands/asus.png differ diff --git a/source/images/supported_brands/august.png b/source/images/supported_brands/august.png new file mode 100644 index 00000000000..e6019036e80 Binary files /dev/null and b/source/images/supported_brands/august.png differ diff --git a/source/images/supported_brands/automatic.png b/source/images/supported_brands/automatic.png index f2ce5127967..ca86996e09b 100644 Binary files a/source/images/supported_brands/automatic.png and b/source/images/supported_brands/automatic.png differ diff --git a/source/images/supported_brands/avahi.png b/source/images/supported_brands/avahi.png index 7c0101d4b3a..a807ab162c5 100644 Binary files a/source/images/supported_brands/avahi.png and b/source/images/supported_brands/avahi.png differ diff --git a/source/images/supported_brands/avi-on.png b/source/images/supported_brands/avi-on.png index 16f2fba5620..8b3b6da291f 100644 Binary files a/source/images/supported_brands/avi-on.png and b/source/images/supported_brands/avi-on.png differ diff --git a/source/images/supported_brands/avm.png b/source/images/supported_brands/avm.png index 2d72608f832..c62a8a66d3e 100644 Binary files a/source/images/supported_brands/avm.png and b/source/images/supported_brands/avm.png differ diff --git a/source/images/supported_brands/aws_lambda.png b/source/images/supported_brands/aws_lambda.png index cfa1676bf6d..4dcd5a25191 100644 Binary files a/source/images/supported_brands/aws_lambda.png and b/source/images/supported_brands/aws_lambda.png differ diff --git a/source/images/supported_brands/aws_sns.png b/source/images/supported_brands/aws_sns.png index 26af9beb42e..2884c10d8ff 100644 Binary files a/source/images/supported_brands/aws_sns.png and b/source/images/supported_brands/aws_sns.png differ diff --git a/source/images/supported_brands/aws_sqs.png b/source/images/supported_brands/aws_sqs.png index 3601d003057..99ae69a4a21 100644 Binary files a/source/images/supported_brands/aws_sqs.png and b/source/images/supported_brands/aws_sqs.png differ diff --git a/source/images/supported_brands/axis.png b/source/images/supported_brands/axis.png index e58f3ae4507..1d64cd41902 100644 Binary files a/source/images/supported_brands/axis.png and b/source/images/supported_brands/axis.png differ diff --git a/source/images/supported_brands/baiducloud.png b/source/images/supported_brands/baiducloud.png index bdfd421703b..c3a15bb1ed2 100644 Binary files a/source/images/supported_brands/baiducloud.png and b/source/images/supported_brands/baiducloud.png differ diff --git a/source/images/supported_brands/bbox.png b/source/images/supported_brands/bbox.png index 546b07a9b83..9fe58c066d6 100644 Binary files a/source/images/supported_brands/bbox.png and b/source/images/supported_brands/bbox.png differ diff --git a/source/images/supported_brands/beaglebone-black.png b/source/images/supported_brands/beaglebone-black.png index 49510616483..9b65d36c826 100644 Binary files a/source/images/supported_brands/beaglebone-black.png and b/source/images/supported_brands/beaglebone-black.png differ diff --git a/source/images/supported_brands/beckhoff.png b/source/images/supported_brands/beckhoff.png new file mode 100644 index 00000000000..2b3e0b82c76 Binary files /dev/null and b/source/images/supported_brands/beckhoff.png differ diff --git a/source/images/supported_brands/belkin_wemo.png b/source/images/supported_brands/belkin_wemo.png index df7d16b43bd..487c39163ee 100644 Binary files a/source/images/supported_brands/belkin_wemo.png and b/source/images/supported_brands/belkin_wemo.png differ diff --git a/source/images/supported_brands/bitcoin.png b/source/images/supported_brands/bitcoin.png index fd6114282a1..166ab2884d3 100644 Binary files a/source/images/supported_brands/bitcoin.png and b/source/images/supported_brands/bitcoin.png differ diff --git a/source/images/supported_brands/blink.png b/source/images/supported_brands/blink.png index 92c4eb4748c..cb96d9a114d 100644 Binary files a/source/images/supported_brands/blink.png and b/source/images/supported_brands/blink.png differ diff --git a/source/images/supported_brands/blinkstick.png b/source/images/supported_brands/blinkstick.png index 1554641eb69..31b6bb1fe59 100644 Binary files a/source/images/supported_brands/blinkstick.png and b/source/images/supported_brands/blinkstick.png differ diff --git a/source/images/supported_brands/blockchain.png b/source/images/supported_brands/blockchain.png old mode 100755 new mode 100644 index 936fcf700b6..5861917a265 Binary files a/source/images/supported_brands/blockchain.png and b/source/images/supported_brands/blockchain.png differ diff --git a/source/images/supported_brands/bloomsky.png b/source/images/supported_brands/bloomsky.png index 94b1bd2519e..4833957d592 100644 Binary files a/source/images/supported_brands/bloomsky.png and b/source/images/supported_brands/bloomsky.png differ diff --git a/source/images/supported_brands/bluesound.png b/source/images/supported_brands/bluesound.png index 579e33c1db9..557c2e439ae 100644 Binary files a/source/images/supported_brands/bluesound.png and b/source/images/supported_brands/bluesound.png differ diff --git a/source/images/supported_brands/bluetooth.png b/source/images/supported_brands/bluetooth.png index 865d4677b25..f908f6ee991 100644 Binary files a/source/images/supported_brands/bluetooth.png and b/source/images/supported_brands/bluetooth.png differ diff --git a/source/images/supported_brands/bmw.png b/source/images/supported_brands/bmw.png new file mode 100644 index 00000000000..7cb7c8d2716 Binary files /dev/null and b/source/images/supported_brands/bmw.png differ diff --git a/source/images/supported_brands/bom.png b/source/images/supported_brands/bom.png index 37a95ae199c..7570b21da1f 100644 Binary files a/source/images/supported_brands/bom.png and b/source/images/supported_brands/bom.png differ diff --git a/source/images/supported_brands/bravia.png b/source/images/supported_brands/bravia.png index bfb49c34194..b4dfdcc5305 100644 Binary files a/source/images/supported_brands/bravia.png and b/source/images/supported_brands/bravia.png differ diff --git a/source/images/supported_brands/broadlink.png b/source/images/supported_brands/broadlink.png index 11557f1ab8d..5dda86c1947 100644 Binary files a/source/images/supported_brands/broadlink.png and b/source/images/supported_brands/broadlink.png differ diff --git a/source/images/supported_brands/browser.png b/source/images/supported_brands/browser.png index 76af964ef1e..339fbf091fe 100644 Binary files a/source/images/supported_brands/browser.png and b/source/images/supported_brands/browser.png differ diff --git a/source/images/supported_brands/brunt.png b/source/images/supported_brands/brunt.png new file mode 100644 index 00000000000..43b931f813d Binary files /dev/null and b/source/images/supported_brands/brunt.png differ diff --git a/source/images/supported_brands/bt.png b/source/images/supported_brands/bt.png index bf0e321ed3d..f8ac3e6cbc1 100644 Binary files a/source/images/supported_brands/bt.png and b/source/images/supported_brands/bt.png differ diff --git a/source/images/supported_brands/buienradar.png b/source/images/supported_brands/buienradar.png index e8a58c283e3..88d1503177f 100644 Binary files a/source/images/supported_brands/buienradar.png and b/source/images/supported_brands/buienradar.png differ diff --git a/source/images/supported_brands/bus_scs.png b/source/images/supported_brands/bus_scs.png index 149abac37e7..e656aaac4e9 100644 Binary files a/source/images/supported_brands/bus_scs.png and b/source/images/supported_brands/bus_scs.png differ diff --git a/source/images/supported_brands/camcorder.png b/source/images/supported_brands/camcorder.png index 6d0c741fcb8..2e658b7b524 100644 Binary files a/source/images/supported_brands/camcorder.png and b/source/images/supported_brands/camcorder.png differ diff --git a/source/images/supported_brands/canary.png b/source/images/supported_brands/canary.png new file mode 100644 index 00000000000..2603a0bdcc8 Binary files /dev/null and b/source/images/supported_brands/canary.png differ diff --git a/source/images/supported_brands/centos.png b/source/images/supported_brands/centos.png index 41106275c73..b5d6559628e 100644 Binary files a/source/images/supported_brands/centos.png and b/source/images/supported_brands/centos.png differ diff --git a/source/images/supported_brands/channels.png b/source/images/supported_brands/channels.png new file mode 100644 index 00000000000..04567eff1c4 Binary files /dev/null and b/source/images/supported_brands/channels.png differ diff --git a/source/images/supported_brands/chevy.png b/source/images/supported_brands/chevy.png new file mode 100644 index 00000000000..b93b9926ea0 Binary files /dev/null and b/source/images/supported_brands/chevy.png differ diff --git a/source/images/supported_brands/cisco.png b/source/images/supported_brands/cisco.png index 0363d95d456..9167e48caf3 100644 Binary files a/source/images/supported_brands/cisco.png and b/source/images/supported_brands/cisco.png differ diff --git a/source/images/supported_brands/ciscospark.png b/source/images/supported_brands/ciscospark.png index a747164e862..bf24d844195 100644 Binary files a/source/images/supported_brands/ciscospark.png and b/source/images/supported_brands/ciscospark.png differ diff --git a/source/images/supported_brands/citybikes.png b/source/images/supported_brands/citybikes.png index 02408f14b18..bfda92e07ab 100644 Binary files a/source/images/supported_brands/citybikes.png and b/source/images/supported_brands/citybikes.png differ diff --git a/source/images/supported_brands/clementine.png b/source/images/supported_brands/clementine.png index d9ac682e4bf..f1d60fbeaa3 100644 Binary files a/source/images/supported_brands/clementine.png and b/source/images/supported_brands/clementine.png differ diff --git a/source/images/supported_brands/clickatell.png b/source/images/supported_brands/clickatell.png index f3c4bf7d999..5a379016e47 100644 Binary files a/source/images/supported_brands/clickatell.png and b/source/images/supported_brands/clickatell.png differ diff --git a/source/images/supported_brands/clicksend.png b/source/images/supported_brands/clicksend.png index 899ffe1caba..abc574d68cf 100644 Binary files a/source/images/supported_brands/clicksend.png and b/source/images/supported_brands/clicksend.png differ diff --git a/source/images/supported_brands/cloudflare.png b/source/images/supported_brands/cloudflare.png new file mode 100644 index 00000000000..52f28209749 Binary files /dev/null and b/source/images/supported_brands/cloudflare.png differ diff --git a/source/images/supported_brands/coinbase.png b/source/images/supported_brands/coinbase.png new file mode 100644 index 00000000000..a05fc29e5ba Binary files /dev/null and b/source/images/supported_brands/coinbase.png differ diff --git a/source/images/supported_brands/coinmarketcap.png b/source/images/supported_brands/coinmarketcap.png index ff190df626c..07c3f2e8e5f 100644 Binary files a/source/images/supported_brands/coinmarketcap.png and b/source/images/supported_brands/coinmarketcap.png differ diff --git a/source/images/supported_brands/comed.png b/source/images/supported_brands/comed.png index 20800e20f8e..e83c0294ee7 100644 Binary files a/source/images/supported_brands/comed.png and b/source/images/supported_brands/comed.png differ diff --git a/source/images/supported_brands/command_line.png b/source/images/supported_brands/command_line.png index 1c14ff22d45..44c465c8258 100644 Binary files a/source/images/supported_brands/command_line.png and b/source/images/supported_brands/command_line.png differ diff --git a/source/images/supported_brands/conversation.png b/source/images/supported_brands/conversation.png index 02b3879f9e1..96d8e4f8373 100644 Binary files a/source/images/supported_brands/conversation.png and b/source/images/supported_brands/conversation.png differ diff --git a/source/images/supported_brands/cpu.png b/source/images/supported_brands/cpu.png index 42abb4e7986..b779c8a3100 100644 Binary files a/source/images/supported_brands/cpu.png and b/source/images/supported_brands/cpu.png differ diff --git a/source/images/supported_brands/crimereports.png b/source/images/supported_brands/crimereports.png index 9382eac90ef..270891d3b4d 100644 Binary files a/source/images/supported_brands/crimereports.png and b/source/images/supported_brands/crimereports.png differ diff --git a/source/images/supported_brands/cups.png b/source/images/supported_brands/cups.png index 26aef10984c..cf2bf260590 100644 Binary files a/source/images/supported_brands/cups.png and b/source/images/supported_brands/cups.png differ diff --git a/source/images/supported_brands/currencylayer.png b/source/images/supported_brands/currencylayer.png index cc230dfbe90..436a13ac921 100644 Binary files a/source/images/supported_brands/currencylayer.png and b/source/images/supported_brands/currencylayer.png differ diff --git a/source/images/supported_brands/daikin.png b/source/images/supported_brands/daikin.png new file mode 100644 index 00000000000..fa408f00fe6 Binary files /dev/null and b/source/images/supported_brands/daikin.png differ diff --git a/source/images/supported_brands/dark_sky.png b/source/images/supported_brands/dark_sky.png index 5b304a629dc..7a4ac97a67f 100644 Binary files a/source/images/supported_brands/dark_sky.png and b/source/images/supported_brands/dark_sky.png differ diff --git a/source/images/supported_brands/datadog.png b/source/images/supported_brands/datadog.png index 5b9f6e267e7..8fe0ccd0dab 100644 Binary files a/source/images/supported_brands/datadog.png and b/source/images/supported_brands/datadog.png differ diff --git a/source/images/supported_brands/db.png b/source/images/supported_brands/db.png index 4a1349dcfc7..d1d30245289 100644 Binary files a/source/images/supported_brands/db.png and b/source/images/supported_brands/db.png differ diff --git a/source/images/supported_brands/ddwrt.png b/source/images/supported_brands/ddwrt.png index 7746bfe5dc6..44e196292cc 100644 Binary files a/source/images/supported_brands/ddwrt.png and b/source/images/supported_brands/ddwrt.png differ diff --git a/source/images/supported_brands/deconz.jpeg b/source/images/supported_brands/deconz.jpeg new file mode 100644 index 00000000000..fb82275a700 Binary files /dev/null and b/source/images/supported_brands/deconz.jpeg differ diff --git a/source/images/supported_brands/deluge.png b/source/images/supported_brands/deluge.png index e0964b032ab..3a18589b1d5 100644 Binary files a/source/images/supported_brands/deluge.png and b/source/images/supported_brands/deluge.png differ diff --git a/source/images/supported_brands/denon.png b/source/images/supported_brands/denon.png index dc7a1bd1c21..1afa8b9a136 100644 Binary files a/source/images/supported_brands/denon.png and b/source/images/supported_brands/denon.png differ diff --git a/source/images/supported_brands/dht.png b/source/images/supported_brands/dht.png index 0e0bc02d7ee..71968f8a400 100644 Binary files a/source/images/supported_brands/dht.png and b/source/images/supported_brands/dht.png differ diff --git a/source/images/supported_brands/dialogflow.png b/source/images/supported_brands/dialogflow.png index 9b088357cd2..3b15c454103 100644 Binary files a/source/images/supported_brands/dialogflow.png and b/source/images/supported_brands/dialogflow.png differ diff --git a/source/images/supported_brands/digital_ocean.png b/source/images/supported_brands/digital_ocean.png index 12361a7845b..c49e6b19a6c 100644 Binary files a/source/images/supported_brands/digital_ocean.png and b/source/images/supported_brands/digital_ocean.png differ diff --git a/source/images/supported_brands/digitalloggers.png b/source/images/supported_brands/digitalloggers.png old mode 100755 new mode 100644 index 0c732310591..3799c81b581 Binary files a/source/images/supported_brands/digitalloggers.png and b/source/images/supported_brands/digitalloggers.png differ diff --git a/source/images/supported_brands/directv.png b/source/images/supported_brands/directv.png index 46d08e55653..bbe516e7406 100644 Binary files a/source/images/supported_brands/directv.png and b/source/images/supported_brands/directv.png differ diff --git a/source/images/supported_brands/discogs.png b/source/images/supported_brands/discogs.png new file mode 100644 index 00000000000..7bbe196ba19 Binary files /dev/null and b/source/images/supported_brands/discogs.png differ diff --git a/source/images/supported_brands/discord.png b/source/images/supported_brands/discord.png index 7a8ed513912..2d86c471547 100644 Binary files a/source/images/supported_brands/discord.png and b/source/images/supported_brands/discord.png differ diff --git a/source/images/supported_brands/dlib.png b/source/images/supported_brands/dlib.png index 32abc61cb17..c92a3918885 100644 Binary files a/source/images/supported_brands/dlib.png and b/source/images/supported_brands/dlib.png differ diff --git a/source/images/supported_brands/dlink.png b/source/images/supported_brands/dlink.png index 306074342fb..7e0eede51bb 100644 Binary files a/source/images/supported_brands/dlink.png and b/source/images/supported_brands/dlink.png differ diff --git a/source/images/supported_brands/docker.png b/source/images/supported_brands/docker.png index 8ef016c434d..718949c50d8 100644 Binary files a/source/images/supported_brands/docker.png and b/source/images/supported_brands/docker.png differ diff --git a/source/images/supported_brands/dominos.png b/source/images/supported_brands/dominos.png index 85c54f47802..3a5073e8d88 100644 Binary files a/source/images/supported_brands/dominos.png and b/source/images/supported_brands/dominos.png differ diff --git a/source/images/supported_brands/doorbird.png b/source/images/supported_brands/doorbird.png index 116612ef266..c73cf9e8b49 100644 Binary files a/source/images/supported_brands/doorbird.png and b/source/images/supported_brands/doorbird.png differ diff --git a/source/images/supported_brands/dovado.png b/source/images/supported_brands/dovado.png index 24b85ddb4e7..66f809099b9 100644 Binary files a/source/images/supported_brands/dovado.png and b/source/images/supported_brands/dovado.png differ diff --git a/source/images/supported_brands/downloader.png b/source/images/supported_brands/downloader.png index 8c83bffa7e4..0624444f1a4 100644 Binary files a/source/images/supported_brands/downloader.png and b/source/images/supported_brands/downloader.png differ diff --git a/source/images/supported_brands/dte_energy.png b/source/images/supported_brands/dte_energy.png index 2809c2815fa..d67882328eb 100644 Binary files a/source/images/supported_brands/dte_energy.png and b/source/images/supported_brands/dte_energy.png differ diff --git a/source/images/supported_brands/dublin_bus.png b/source/images/supported_brands/dublin_bus.png index aae90b21563..93421d61595 100644 Binary files a/source/images/supported_brands/dublin_bus.png and b/source/images/supported_brands/dublin_bus.png differ diff --git a/source/images/supported_brands/duckdns.png b/source/images/supported_brands/duckdns.png index 01f2060db87..da8f6451fa7 100644 Binary files a/source/images/supported_brands/duckdns.png and b/source/images/supported_brands/duckdns.png differ diff --git a/source/images/supported_brands/duke_energy.png b/source/images/supported_brands/duke_energy.png new file mode 100644 index 00000000000..4c2c3f06c2f Binary files /dev/null and b/source/images/supported_brands/duke_energy.png differ diff --git a/source/images/supported_brands/dunehd.png b/source/images/supported_brands/dunehd.png index 162ea0779a5..6e631d9bc7a 100644 Binary files a/source/images/supported_brands/dunehd.png and b/source/images/supported_brands/dunehd.png differ diff --git a/source/images/supported_brands/dweet.png b/source/images/supported_brands/dweet.png index abf63c0d795..825a0c9bece 100644 Binary files a/source/images/supported_brands/dweet.png and b/source/images/supported_brands/dweet.png differ diff --git a/source/images/supported_brands/dyson.png b/source/images/supported_brands/dyson.png index 1c95415bf67..17c249305ea 100644 Binary files a/source/images/supported_brands/dyson.png and b/source/images/supported_brands/dyson.png differ diff --git a/source/images/supported_brands/ebox.png b/source/images/supported_brands/ebox.png index 7e8ad5aed35..22d1ce90467 100644 Binary files a/source/images/supported_brands/ebox.png and b/source/images/supported_brands/ebox.png differ diff --git a/source/images/supported_brands/ecobee.png b/source/images/supported_brands/ecobee.png index cad94d18941..2406d49bb54 100644 Binary files a/source/images/supported_brands/ecobee.png and b/source/images/supported_brands/ecobee.png differ diff --git a/source/images/supported_brands/econet.png b/source/images/supported_brands/econet.png new file mode 100644 index 00000000000..431af758407 Binary files /dev/null and b/source/images/supported_brands/econet.png differ diff --git a/source/images/supported_brands/eddystone.png b/source/images/supported_brands/eddystone.png index 0d870ce8cbd..586949e6ecb 100644 Binary files a/source/images/supported_brands/eddystone.png and b/source/images/supported_brands/eddystone.png differ diff --git a/source/images/supported_brands/edimax.png b/source/images/supported_brands/edimax.png index 7390bc50222..4d291d0da7f 100644 Binary files a/source/images/supported_brands/edimax.png and b/source/images/supported_brands/edimax.png differ diff --git a/source/images/supported_brands/efergy.png b/source/images/supported_brands/efergy.png index 51a516a3730..4209b39a44d 100644 Binary files a/source/images/supported_brands/efergy.png and b/source/images/supported_brands/efergy.png differ diff --git a/source/images/supported_brands/eff.png b/source/images/supported_brands/eff.png index 03b69cb38e5..5058aaa904a 100644 Binary files a/source/images/supported_brands/eff.png and b/source/images/supported_brands/eff.png differ diff --git a/source/images/supported_brands/egardia.png b/source/images/supported_brands/egardia.png index e9af1a36e32..a6e0270948c 100644 Binary files a/source/images/supported_brands/egardia.png and b/source/images/supported_brands/egardia.png differ diff --git a/source/images/supported_brands/eight_sleep.png b/source/images/supported_brands/eight_sleep.png index 78af45a3b11..100e520a962 100644 Binary files a/source/images/supported_brands/eight_sleep.png and b/source/images/supported_brands/eight_sleep.png differ diff --git a/source/images/supported_brands/eliq.png b/source/images/supported_brands/eliq.png index 7fbd231df0a..79fe5220ff4 100644 Binary files a/source/images/supported_brands/eliq.png and b/source/images/supported_brands/eliq.png differ diff --git a/source/images/supported_brands/emby.png b/source/images/supported_brands/emby.png index 089dd64c7d9..a9e5ea73526 100644 Binary files a/source/images/supported_brands/emby.png and b/source/images/supported_brands/emby.png differ diff --git a/source/images/supported_brands/emoncms.png b/source/images/supported_brands/emoncms.png index e26232737ce..ceb9a81aa78 100644 Binary files a/source/images/supported_brands/emoncms.png and b/source/images/supported_brands/emoncms.png differ diff --git a/source/images/supported_brands/enocean.png b/source/images/supported_brands/enocean.png index a0613a9e18a..b45eae1018b 100644 Binary files a/source/images/supported_brands/enocean.png and b/source/images/supported_brands/enocean.png differ diff --git a/source/images/supported_brands/ephcontrolsember.png b/source/images/supported_brands/ephcontrolsember.png index aac4a6cf1ef..3937a0e25f0 100644 Binary files a/source/images/supported_brands/ephcontrolsember.png and b/source/images/supported_brands/ephcontrolsember.png differ diff --git a/source/images/supported_brands/epson.png b/source/images/supported_brands/epson.png new file mode 100644 index 00000000000..5bf85496eb2 Binary files /dev/null and b/source/images/supported_brands/epson.png differ diff --git a/source/images/supported_brands/ethernet.png b/source/images/supported_brands/ethernet.png index 464115f5588..63a06b1b11d 100644 Binary files a/source/images/supported_brands/ethernet.png and b/source/images/supported_brands/ethernet.png differ diff --git a/source/images/supported_brands/etherscan.png b/source/images/supported_brands/etherscan.png old mode 100755 new mode 100644 index 784f1c30244..1643082763c Binary files a/source/images/supported_brands/etherscan.png and b/source/images/supported_brands/etherscan.png differ diff --git a/source/images/supported_brands/eufy.png b/source/images/supported_brands/eufy.png new file mode 100644 index 00000000000..74d5557281c Binary files /dev/null and b/source/images/supported_brands/eufy.png differ diff --git a/source/images/supported_brands/eyezon.png b/source/images/supported_brands/eyezon.png index 1c4056ab343..03908b3a078 100644 Binary files a/source/images/supported_brands/eyezon.png and b/source/images/supported_brands/eyezon.png differ diff --git a/source/images/supported_brands/facebook.png b/source/images/supported_brands/facebook.png old mode 100755 new mode 100644 index 61ea0a0ff93..21a47457203 Binary files a/source/images/supported_brands/facebook.png and b/source/images/supported_brands/facebook.png differ diff --git a/source/images/supported_brands/fail2ban.png b/source/images/supported_brands/fail2ban.png index 9d3274d3c51..532dff1c4c2 100644 Binary files a/source/images/supported_brands/fail2ban.png and b/source/images/supported_brands/fail2ban.png differ diff --git a/source/images/supported_brands/familyhub.png b/source/images/supported_brands/familyhub.png new file mode 100644 index 00000000000..b34b9823a20 Binary files /dev/null and b/source/images/supported_brands/familyhub.png differ diff --git a/source/images/supported_brands/fastdotcom.png b/source/images/supported_brands/fastdotcom.png index f8bec9c463f..7f3b9936edd 100644 Binary files a/source/images/supported_brands/fastdotcom.png and b/source/images/supported_brands/fastdotcom.png differ diff --git a/source/images/supported_brands/fedex.png b/source/images/supported_brands/fedex.png index c6f5c53e970..65ea920ca45 100644 Binary files a/source/images/supported_brands/fedex.png and b/source/images/supported_brands/fedex.png differ diff --git a/source/images/supported_brands/fedora.png b/source/images/supported_brands/fedora.png index 065c7ecfb87..e30eff2ce3c 100644 Binary files a/source/images/supported_brands/fedora.png and b/source/images/supported_brands/fedora.png differ diff --git a/source/images/supported_brands/ffmpeg.png b/source/images/supported_brands/ffmpeg.png index d8ee3905a13..a0df1edf8ae 100644 Binary files a/source/images/supported_brands/ffmpeg.png and b/source/images/supported_brands/ffmpeg.png differ diff --git a/source/images/supported_brands/fido.png b/source/images/supported_brands/fido.png index 0a27d2d685d..b75090c094a 100644 Binary files a/source/images/supported_brands/fido.png and b/source/images/supported_brands/fido.png differ diff --git a/source/images/supported_brands/file.png b/source/images/supported_brands/file.png index 8835efd9189..24a5fcf36de 100644 Binary files a/source/images/supported_brands/file.png and b/source/images/supported_brands/file.png differ diff --git a/source/images/supported_brands/firetv.png b/source/images/supported_brands/firetv.png index dc5c0e45c2a..c7d83109caf 100644 Binary files a/source/images/supported_brands/firetv.png and b/source/images/supported_brands/firetv.png differ diff --git a/source/images/supported_brands/fitbit.png b/source/images/supported_brands/fitbit.png index 2e8e77dcef0..8db1b9c7bf9 100644 Binary files a/source/images/supported_brands/fitbit.png and b/source/images/supported_brands/fitbit.png differ diff --git a/source/images/supported_brands/fixer-io.png b/source/images/supported_brands/fixer-io.png index 58ff5f563d9..beba7cb70da 100644 Binary files a/source/images/supported_brands/fixer-io.png and b/source/images/supported_brands/fixer-io.png differ diff --git a/source/images/supported_brands/flexit.png b/source/images/supported_brands/flexit.png index 4c13bf9121d..a9d4abe02ff 100644 Binary files a/source/images/supported_brands/flexit.png and b/source/images/supported_brands/flexit.png differ diff --git a/source/images/supported_brands/flic.png b/source/images/supported_brands/flic.png index 44da089f57e..b6503a040ba 100644 Binary files a/source/images/supported_brands/flic.png and b/source/images/supported_brands/flic.png differ diff --git a/source/images/supported_brands/flock.png b/source/images/supported_brands/flock.png new file mode 100644 index 00000000000..4a9d123dfa2 Binary files /dev/null and b/source/images/supported_brands/flock.png differ diff --git a/source/images/supported_brands/foobot.png b/source/images/supported_brands/foobot.png new file mode 100644 index 00000000000..c5f2e7e201b Binary files /dev/null and b/source/images/supported_brands/foobot.png differ diff --git a/source/images/supported_brands/forecast.png b/source/images/supported_brands/forecast.png index bfc3799ae91..7bd7ab32f69 100644 Binary files a/source/images/supported_brands/forecast.png and b/source/images/supported_brands/forecast.png differ diff --git a/source/images/supported_brands/foscam.png b/source/images/supported_brands/foscam.png index 2673d92436f..4ec401f95f0 100644 Binary files a/source/images/supported_brands/foscam.png and b/source/images/supported_brands/foscam.png differ diff --git a/source/images/supported_brands/foursquare.png b/source/images/supported_brands/foursquare.png index 0acf3a24b51..84607fd1fa0 100644 Binary files a/source/images/supported_brands/foursquare.png and b/source/images/supported_brands/foursquare.png differ diff --git a/source/images/supported_brands/free_mobile.png b/source/images/supported_brands/free_mobile.png index fd53557b053..eb9f816d762 100644 Binary files a/source/images/supported_brands/free_mobile.png and b/source/images/supported_brands/free_mobile.png differ diff --git a/source/images/supported_brands/freebox.svg b/source/images/supported_brands/freebox.svg new file mode 100644 index 00000000000..cc9e6c87c50 --- /dev/null +++ b/source/images/supported_brands/freebox.svg @@ -0,0 +1,45 @@ + + + + + + + + + + + + diff --git a/source/images/supported_brands/freenas.png b/source/images/supported_brands/freenas.png index ea2eff89dd2..9bdb6e94159 100644 Binary files a/source/images/supported_brands/freenas.png and b/source/images/supported_brands/freenas.png differ diff --git a/source/images/supported_brands/garadget.png b/source/images/supported_brands/garadget.png index 84aeffea97e..34c0a3d5437 100644 Binary files a/source/images/supported_brands/garadget.png and b/source/images/supported_brands/garadget.png differ diff --git a/source/images/supported_brands/gearbest.png b/source/images/supported_brands/gearbest.png new file mode 100644 index 00000000000..e229b3e4d5b Binary files /dev/null and b/source/images/supported_brands/gearbest.png differ diff --git a/source/images/supported_brands/geizhals.png b/source/images/supported_brands/geizhals.png index ee2995d7bd8..68943379941 100644 Binary files a/source/images/supported_brands/geizhals.png and b/source/images/supported_brands/geizhals.png differ diff --git a/source/images/supported_brands/geofency.png b/source/images/supported_brands/geofency.png index 2a0f3d888fc..faa4688bd73 100644 Binary files a/source/images/supported_brands/geofency.png and b/source/images/supported_brands/geofency.png differ diff --git a/source/images/supported_brands/github.png b/source/images/supported_brands/github.png index 6d813e670eb..c7817913a38 100644 Binary files a/source/images/supported_brands/github.png and b/source/images/supported_brands/github.png differ diff --git a/source/images/supported_brands/gitter.png b/source/images/supported_brands/gitter.png index ad9b9d38cbd..b01b2be0ce5 100644 Binary files a/source/images/supported_brands/gitter.png and b/source/images/supported_brands/gitter.png differ diff --git a/source/images/supported_brands/glances.png b/source/images/supported_brands/glances.png index 6eb5d73f42e..acc10630a5f 100644 Binary files a/source/images/supported_brands/glances.png and b/source/images/supported_brands/glances.png differ diff --git a/source/images/supported_brands/globalcache.png b/source/images/supported_brands/globalcache.png index c57804094c7..1a2e9fc15f3 100644 Binary files a/source/images/supported_brands/globalcache.png and b/source/images/supported_brands/globalcache.png differ diff --git a/source/images/supported_brands/gntp.png b/source/images/supported_brands/gntp.png index 257070f8f4a..df4e355218e 100644 Binary files a/source/images/supported_brands/gntp.png and b/source/images/supported_brands/gntp.png differ diff --git a/source/images/supported_brands/goalfeed.png b/source/images/supported_brands/goalfeed.png new file mode 100644 index 00000000000..93874911c81 Binary files /dev/null and b/source/images/supported_brands/goalfeed.png differ diff --git a/source/images/supported_brands/gogogate2.png b/source/images/supported_brands/gogogate2.png new file mode 100644 index 00000000000..3924104eb54 Binary files /dev/null and b/source/images/supported_brands/gogogate2.png differ diff --git a/source/images/supported_brands/google-assistant.png b/source/images/supported_brands/google-assistant.png index 90af0d1224b..162eccd150e 100644 Binary files a/source/images/supported_brands/google-assistant.png and b/source/images/supported_brands/google-assistant.png differ diff --git a/source/images/supported_brands/google.png b/source/images/supported_brands/google.png index 0d79d1e535a..0300a96487d 100644 Binary files a/source/images/supported_brands/google.png and b/source/images/supported_brands/google.png differ diff --git a/source/images/supported_brands/google_calendar.png b/source/images/supported_brands/google_calendar.png index 3a1ef08fc5b..0141bf76d52 100644 Binary files a/source/images/supported_brands/google_calendar.png and b/source/images/supported_brands/google_calendar.png differ diff --git a/source/images/supported_brands/google_cast.png b/source/images/supported_brands/google_cast.png index f06b5c20f0f..4f54d334f04 100644 Binary files a/source/images/supported_brands/google_cast.png and b/source/images/supported_brands/google_cast.png differ diff --git a/source/images/supported_brands/google_domains.png b/source/images/supported_brands/google_domains.png index 499a699d7cd..3781185c100 100644 Binary files a/source/images/supported_brands/google_domains.png and b/source/images/supported_brands/google_domains.png differ diff --git a/source/images/supported_brands/google_maps.png b/source/images/supported_brands/google_maps.png index 1745ba22e7a..21a296ad042 100644 Binary files a/source/images/supported_brands/google_maps.png and b/source/images/supported_brands/google_maps.png differ diff --git a/source/images/supported_brands/google_wifi.png b/source/images/supported_brands/google_wifi.png index e0e3f8be738..a111f3b6e15 100644 Binary files a/source/images/supported_brands/google_wifi.png and b/source/images/supported_brands/google_wifi.png differ diff --git a/source/images/supported_brands/gpmdp.png b/source/images/supported_brands/gpmdp.png index c871a5f7522..5ea6f3d699a 100644 Binary files a/source/images/supported_brands/gpmdp.png and b/source/images/supported_brands/gpmdp.png differ diff --git a/source/images/supported_brands/gpsd.png b/source/images/supported_brands/gpsd.png index 0bf4b40d265..e8a737f5937 100644 Binary files a/source/images/supported_brands/gpsd.png and b/source/images/supported_brands/gpsd.png differ diff --git a/source/images/supported_brands/grafana.png b/source/images/supported_brands/grafana.png index ed5dcdf1127..f72c135e5dd 100644 Binary files a/source/images/supported_brands/grafana.png and b/source/images/supported_brands/grafana.png differ diff --git a/source/images/supported_brands/graphite.png b/source/images/supported_brands/graphite.png index ad264ba05ac..1f56b1b9127 100644 Binary files a/source/images/supported_brands/graphite.png and b/source/images/supported_brands/graphite.png differ diff --git a/source/images/supported_brands/greenwavereality.png b/source/images/supported_brands/greenwavereality.png new file mode 100644 index 00000000000..377a0720894 Binary files /dev/null and b/source/images/supported_brands/greenwavereality.png differ diff --git a/source/images/supported_brands/gstreamer.png b/source/images/supported_brands/gstreamer.png index e9801776cd6..349bf8e6105 100644 Binary files a/source/images/supported_brands/gstreamer.png and b/source/images/supported_brands/gstreamer.png differ diff --git a/source/images/supported_brands/haveibeenpwned.png b/source/images/supported_brands/haveibeenpwned.png index f45a5b49360..3e664e1937a 100644 Binary files a/source/images/supported_brands/haveibeenpwned.png and b/source/images/supported_brands/haveibeenpwned.png differ diff --git a/source/images/supported_brands/hdmi.png b/source/images/supported_brands/hdmi.png index fda2fd55c64..3689bce6919 100644 Binary files a/source/images/supported_brands/hdmi.png and b/source/images/supported_brands/hdmi.png differ diff --git a/source/images/supported_brands/heat-control.png b/source/images/supported_brands/heat-control.png index e7da6c6b159..0df46e314c7 100644 Binary files a/source/images/supported_brands/heat-control.png and b/source/images/supported_brands/heat-control.png differ diff --git a/source/images/supported_brands/heatmiser.png b/source/images/supported_brands/heatmiser.png index 41bb7f47e24..5cb8647daae 100644 Binary files a/source/images/supported_brands/heatmiser.png and b/source/images/supported_brands/heatmiser.png differ diff --git a/source/images/supported_brands/hewlett_packard_enterprise.png b/source/images/supported_brands/hewlett_packard_enterprise.png index 5dca0790bf5..2093ff10232 100644 Binary files a/source/images/supported_brands/hewlett_packard_enterprise.png and b/source/images/supported_brands/hewlett_packard_enterprise.png differ diff --git a/source/images/supported_brands/hikvision.png b/source/images/supported_brands/hikvision.png index 78f28c25795..6fb2f9c505e 100644 Binary files a/source/images/supported_brands/hikvision.png and b/source/images/supported_brands/hikvision.png differ diff --git a/source/images/supported_brands/hipchat.png b/source/images/supported_brands/hipchat.png index 98c305577a4..58ca3b67059 100644 Binary files a/source/images/supported_brands/hipchat.png and b/source/images/supported_brands/hipchat.png differ diff --git a/source/images/supported_brands/hitron.png b/source/images/supported_brands/hitron.png index 13294d1b98c..18b0496e5ad 100644 Binary files a/source/images/supported_brands/hitron.png and b/source/images/supported_brands/hitron.png differ diff --git a/source/images/supported_brands/hive.png b/source/images/supported_brands/hive.png index 3e955a9e4fd..326eecca53f 100644 Binary files a/source/images/supported_brands/hive.png and b/source/images/supported_brands/hive.png differ diff --git a/source/images/supported_brands/home-assistant.png b/source/images/supported_brands/home-assistant.png index 8140fed007c..87b76011cb0 100644 Binary files a/source/images/supported_brands/home-assistant.png and b/source/images/supported_brands/home-assistant.png differ diff --git a/source/images/supported_brands/homematic.png b/source/images/supported_brands/homematic.png index 158aa98b24e..b525098bfa3 100644 Binary files a/source/images/supported_brands/homematic.png and b/source/images/supported_brands/homematic.png differ diff --git a/source/images/supported_brands/homematicip_cloud.png b/source/images/supported_brands/homematicip_cloud.png new file mode 100644 index 00000000000..1c17246bbfa Binary files /dev/null and b/source/images/supported_brands/homematicip_cloud.png differ diff --git a/source/images/supported_brands/honeywell-tc.png b/source/images/supported_brands/honeywell-tc.png index 65235ebf9c6..e2f8a0267ae 100644 Binary files a/source/images/supported_brands/honeywell-tc.png and b/source/images/supported_brands/honeywell-tc.png differ diff --git a/source/images/supported_brands/honeywell.png b/source/images/supported_brands/honeywell.png index 57879db4204..7387004441b 100644 Binary files a/source/images/supported_brands/honeywell.png and b/source/images/supported_brands/honeywell.png differ diff --git a/source/images/supported_brands/hook.png b/source/images/supported_brands/hook.png index 0ea95f80d66..bac2324b986 100644 Binary files a/source/images/supported_brands/hook.png and b/source/images/supported_brands/hook.png differ diff --git a/source/images/supported_brands/html5.png b/source/images/supported_brands/html5.png index 18f80dc46f5..2aac891d35e 100644 Binary files a/source/images/supported_brands/html5.png and b/source/images/supported_brands/html5.png differ diff --git a/source/images/supported_brands/http.png b/source/images/supported_brands/http.png index 984d013a78c..340500ec6d0 100644 Binary files a/source/images/supported_brands/http.png and b/source/images/supported_brands/http.png differ diff --git a/source/images/supported_brands/hunter-douglas-powerview.png b/source/images/supported_brands/hunter-douglas-powerview.png index 956a0ddc221..5baa01c7dab 100644 Binary files a/source/images/supported_brands/hunter-douglas-powerview.png and b/source/images/supported_brands/hunter-douglas-powerview.png differ diff --git a/source/images/supported_brands/hydrawise_logo.png b/source/images/supported_brands/hydrawise_logo.png new file mode 100644 index 00000000000..fffd11f8ebe Binary files /dev/null and b/source/images/supported_brands/hydrawise_logo.png differ diff --git a/source/images/supported_brands/hyperion.png b/source/images/supported_brands/hyperion.png index a9de0bf8a1b..d194c77bc11 100644 Binary files a/source/images/supported_brands/hyperion.png and b/source/images/supported_brands/hyperion.png differ diff --git a/source/images/supported_brands/ibm.png b/source/images/supported_brands/ibm.png new file mode 100644 index 00000000000..6aee8b97934 Binary files /dev/null and b/source/images/supported_brands/ibm.png differ diff --git a/source/images/supported_brands/icann.png b/source/images/supported_brands/icann.png index d326df3f3e6..1e2c8ee62a5 100644 Binary files a/source/images/supported_brands/icann.png and b/source/images/supported_brands/icann.png differ diff --git a/source/images/supported_brands/icloud.png b/source/images/supported_brands/icloud.png index dca4229c455..cfbdb3245dc 100644 Binary files a/source/images/supported_brands/icloud.png and b/source/images/supported_brands/icloud.png differ diff --git a/source/images/supported_brands/ifttt.png b/source/images/supported_brands/ifttt.png index 072b5aac88f..4afdc5d2f13 100644 Binary files a/source/images/supported_brands/ifttt.png and b/source/images/supported_brands/ifttt.png differ diff --git a/source/images/supported_brands/iglo.png b/source/images/supported_brands/iglo.png new file mode 100644 index 00000000000..95cf696f242 Binary files /dev/null and b/source/images/supported_brands/iglo.png differ diff --git a/source/images/supported_brands/ihc.png b/source/images/supported_brands/ihc.png new file mode 100644 index 00000000000..8224cf9bbe1 Binary files /dev/null and b/source/images/supported_brands/ihc.png differ diff --git a/source/images/supported_brands/influxdb.png b/source/images/supported_brands/influxdb.png index a4e24973c95..ee0ed830965 100644 Binary files a/source/images/supported_brands/influxdb.png and b/source/images/supported_brands/influxdb.png differ diff --git a/source/images/supported_brands/instapush.png b/source/images/supported_brands/instapush.png index 8ac906fae04..c68becbb531 100644 Binary files a/source/images/supported_brands/instapush.png and b/source/images/supported_brands/instapush.png differ diff --git a/source/images/supported_brands/insteon.png b/source/images/supported_brands/insteon.png index 2d9779742b5..4661281ea3c 100644 Binary files a/source/images/supported_brands/insteon.png and b/source/images/supported_brands/insteon.png differ diff --git a/source/images/supported_brands/interlogix.png b/source/images/supported_brands/interlogix.png index 4f3ba1395ef..5de0d973d01 100644 Binary files a/source/images/supported_brands/interlogix.png and b/source/images/supported_brands/interlogix.png differ diff --git a/source/images/supported_brands/iota.png b/source/images/supported_brands/iota.png new file mode 100644 index 00000000000..ab327c8f165 Binary files /dev/null and b/source/images/supported_brands/iota.png differ diff --git a/source/images/supported_brands/iperf3.png b/source/images/supported_brands/iperf3.png new file mode 100644 index 00000000000..a65799a84bd Binary files /dev/null and b/source/images/supported_brands/iperf3.png differ diff --git a/source/images/supported_brands/ipma.png b/source/images/supported_brands/ipma.png new file mode 100644 index 00000000000..69a987cf1ea Binary files /dev/null and b/source/images/supported_brands/ipma.png differ diff --git a/source/images/supported_brands/irishrail.png b/source/images/supported_brands/irishrail.png index 8eaaf9ac8ad..a6bd2e83651 100644 Binary files a/source/images/supported_brands/irishrail.png and b/source/images/supported_brands/irishrail.png differ diff --git a/source/images/supported_brands/irobot_roomba.png b/source/images/supported_brands/irobot_roomba.png index 9bcfe2f2806..797922f18ac 100644 Binary files a/source/images/supported_brands/irobot_roomba.png and b/source/images/supported_brands/irobot_roomba.png differ diff --git a/source/images/supported_brands/iss.png b/source/images/supported_brands/iss.png index ac0e34bf20e..0e27775ec23 100644 Binary files a/source/images/supported_brands/iss.png and b/source/images/supported_brands/iss.png differ diff --git a/source/images/supported_brands/itunes.png b/source/images/supported_brands/itunes.png index e4358c19b19..df1b4fa25c5 100644 Binary files a/source/images/supported_brands/itunes.png and b/source/images/supported_brands/itunes.png differ diff --git a/source/images/supported_brands/joaoapps_join.png b/source/images/supported_brands/joaoapps_join.png index a4e219d3b55..ebfd49648f3 100644 Binary files a/source/images/supported_brands/joaoapps_join.png and b/source/images/supported_brands/joaoapps_join.png differ diff --git a/source/images/supported_brands/juicenet.png b/source/images/supported_brands/juicenet.png index 42fe3862f61..eb1d923f00c 100644 Binary files a/source/images/supported_brands/juicenet.png and b/source/images/supported_brands/juicenet.png differ diff --git a/source/images/supported_brands/jupyter.png b/source/images/supported_brands/jupyter.png index 001edf6afb1..37a8d578a3b 100644 Binary files a/source/images/supported_brands/jupyter.png and b/source/images/supported_brands/jupyter.png differ diff --git a/source/images/supported_brands/keene.png b/source/images/supported_brands/keene.png index 1682aa52a2c..06127c1db33 100644 Binary files a/source/images/supported_brands/keene.png and b/source/images/supported_brands/keene.png differ diff --git a/source/images/supported_brands/keenetic.png b/source/images/supported_brands/keenetic.png index 3149ffe24f5..b9568570e69 100644 Binary files a/source/images/supported_brands/keenetic.png and b/source/images/supported_brands/keenetic.png differ diff --git a/source/images/supported_brands/keyboard.png b/source/images/supported_brands/keyboard.png index 1ed50f32c27..631728e64dd 100644 Binary files a/source/images/supported_brands/keyboard.png and b/source/images/supported_brands/keyboard.png differ diff --git a/source/images/supported_brands/kiwi.png b/source/images/supported_brands/kiwi.png new file mode 100644 index 00000000000..b31d594a368 Binary files /dev/null and b/source/images/supported_brands/kiwi.png differ diff --git a/source/images/supported_brands/knx.png b/source/images/supported_brands/knx.png index 1a558f01c20..303aacfab9e 100644 Binary files a/source/images/supported_brands/knx.png and b/source/images/supported_brands/knx.png differ diff --git a/source/images/supported_brands/kodi.png b/source/images/supported_brands/kodi.png index 9bec5c9d04d..473284e28b2 100644 Binary files a/source/images/supported_brands/kodi.png and b/source/images/supported_brands/kodi.png differ diff --git a/source/images/supported_brands/konnected.png b/source/images/supported_brands/konnected.png new file mode 100644 index 00000000000..cd6ebbf7970 Binary files /dev/null and b/source/images/supported_brands/konnected.png differ diff --git a/source/images/supported_brands/kwb.png b/source/images/supported_brands/kwb.png index ce106123749..11bb04a3860 100644 Binary files a/source/images/supported_brands/kwb.png and b/source/images/supported_brands/kwb.png differ diff --git a/source/images/supported_brands/lagute.png b/source/images/supported_brands/lagute.png new file mode 100644 index 00000000000..86112847428 Binary files /dev/null and b/source/images/supported_brands/lagute.png differ diff --git a/source/images/supported_brands/lametric.png b/source/images/supported_brands/lametric.png index 9e1c2e58fc0..c8cc07d68a1 100644 Binary files a/source/images/supported_brands/lametric.png and b/source/images/supported_brands/lametric.png differ diff --git a/source/images/supported_brands/lannouncer.png b/source/images/supported_brands/lannouncer.png index 06a9d4e154e..21af9ab1794 100644 Binary files a/source/images/supported_brands/lannouncer.png and b/source/images/supported_brands/lannouncer.png differ diff --git a/source/images/supported_brands/lastfm.png b/source/images/supported_brands/lastfm.png index 1b374bf0aa0..ebc9899b2ca 100644 Binary files a/source/images/supported_brands/lastfm.png and b/source/images/supported_brands/lastfm.png differ diff --git a/source/images/supported_brands/letsencrypt.png b/source/images/supported_brands/letsencrypt.png index 935f16f6c35..6e693891cbb 100644 Binary files a/source/images/supported_brands/letsencrypt.png and b/source/images/supported_brands/letsencrypt.png differ diff --git a/source/images/supported_brands/leviton.png b/source/images/supported_brands/leviton.png index e709e097712..da480e785ce 100644 Binary files a/source/images/supported_brands/leviton.png and b/source/images/supported_brands/leviton.png differ diff --git a/source/images/supported_brands/lg.png b/source/images/supported_brands/lg.png index a46b7623580..f4384f768d8 100644 Binary files a/source/images/supported_brands/lg.png and b/source/images/supported_brands/lg.png differ diff --git a/source/images/supported_brands/lifx.png b/source/images/supported_brands/lifx.png index ac9cdf6b2d8..30b0b537ffa 100644 Binary files a/source/images/supported_brands/lifx.png and b/source/images/supported_brands/lifx.png differ diff --git a/source/images/supported_brands/limitlessled_logo.png b/source/images/supported_brands/limitlessled_logo.png index d16b1cf09ad..8a91a2d59f9 100644 Binary files a/source/images/supported_brands/limitlessled_logo.png and b/source/images/supported_brands/limitlessled_logo.png differ diff --git a/source/images/supported_brands/linksys.png b/source/images/supported_brands/linksys.png index 1e92c98f9e2..6dff4204b68 100644 Binary files a/source/images/supported_brands/linksys.png and b/source/images/supported_brands/linksys.png differ diff --git a/source/images/supported_brands/linn.png b/source/images/supported_brands/linn.png index 5d85d7abd7f..e333e0d878e 100644 Binary files a/source/images/supported_brands/linn.png and b/source/images/supported_brands/linn.png differ diff --git a/source/images/supported_brands/linode.png b/source/images/supported_brands/linode.png index 103ff9e404d..3665c3da16f 100644 Binary files a/source/images/supported_brands/linode.png and b/source/images/supported_brands/linode.png differ diff --git a/source/images/supported_brands/linux_battery.png b/source/images/supported_brands/linux_battery.png index c568cbf8789..59bcd695b5e 100644 Binary files a/source/images/supported_brands/linux_battery.png and b/source/images/supported_brands/linux_battery.png differ diff --git a/source/images/supported_brands/llamalab_automate.png b/source/images/supported_brands/llamalab_automate.png index 7adef8ccd0c..afb4697963f 100644 Binary files a/source/images/supported_brands/llamalab_automate.png and b/source/images/supported_brands/llamalab_automate.png differ diff --git a/source/images/supported_brands/locative.png b/source/images/supported_brands/locative.png index 3cb842105d4..c83d26b9f80 100644 Binary files a/source/images/supported_brands/locative.png and b/source/images/supported_brands/locative.png differ diff --git a/source/images/supported_brands/lockitron.png b/source/images/supported_brands/lockitron.png index 906fa7422a9..17985718706 100644 Binary files a/source/images/supported_brands/lockitron.png and b/source/images/supported_brands/lockitron.png differ diff --git a/source/images/supported_brands/logbook.png b/source/images/supported_brands/logbook.png index f8fa57db004..7278a664283 100644 Binary files a/source/images/supported_brands/logbook.png and b/source/images/supported_brands/logbook.png differ diff --git a/source/images/supported_brands/logentries.png b/source/images/supported_brands/logentries.png index 41f9e6a2f7a..8a29f278e3b 100644 Binary files a/source/images/supported_brands/logentries.png and b/source/images/supported_brands/logentries.png differ diff --git a/source/images/supported_brands/logitech.png b/source/images/supported_brands/logitech.png index a9ee9366164..9687ad36708 100644 Binary files a/source/images/supported_brands/logitech.png and b/source/images/supported_brands/logitech.png differ diff --git a/source/images/supported_brands/london_underground.png b/source/images/supported_brands/london_underground.png index 3aeba599d38..805a26a4155 100644 Binary files a/source/images/supported_brands/london_underground.png and b/source/images/supported_brands/london_underground.png differ diff --git a/source/images/supported_brands/loop.png b/source/images/supported_brands/loop.png index 007cf168bb6..fe7b221a3d2 100644 Binary files a/source/images/supported_brands/loop.png and b/source/images/supported_brands/loop.png differ diff --git a/source/images/supported_brands/luftdaten.png b/source/images/supported_brands/luftdaten.png index 3909c9aa884..21c2048d9e1 100644 Binary files a/source/images/supported_brands/luftdaten.png and b/source/images/supported_brands/luftdaten.png differ diff --git a/source/images/supported_brands/lutron.png b/source/images/supported_brands/lutron.png index b0b70aff97c..41fadb2c4d1 100644 Binary files a/source/images/supported_brands/lutron.png and b/source/images/supported_brands/lutron.png differ diff --git a/source/images/supported_brands/lyft.png b/source/images/supported_brands/lyft.png index 10d7824928e..f02ef9307db 100644 Binary files a/source/images/supported_brands/lyft.png and b/source/images/supported_brands/lyft.png differ diff --git a/source/images/supported_brands/machine-box.png b/source/images/supported_brands/machine-box.png new file mode 100644 index 00000000000..c3ac60376c0 Binary files /dev/null and b/source/images/supported_brands/machine-box.png differ diff --git a/source/images/supported_brands/magic_light.png b/source/images/supported_brands/magic_light.png index 8a3f26dc23a..53faf745541 100644 Binary files a/source/images/supported_brands/magic_light.png and b/source/images/supported_brands/magic_light.png differ diff --git a/source/images/supported_brands/magicseaweed.png b/source/images/supported_brands/magicseaweed.png new file mode 100644 index 00000000000..3e54d8fa359 Binary files /dev/null and b/source/images/supported_brands/magicseaweed.png differ diff --git a/source/images/supported_brands/mailgun.png b/source/images/supported_brands/mailgun.png index 4cb621f5491..4f63639f242 100644 Binary files a/source/images/supported_brands/mailgun.png and b/source/images/supported_brands/mailgun.png differ diff --git a/source/images/supported_brands/manything.png b/source/images/supported_brands/manything.png index c43a9ea125d..41ef9cbab14 100644 Binary files a/source/images/supported_brands/manything.png and b/source/images/supported_brands/manything.png differ diff --git a/source/images/supported_brands/marytts.png b/source/images/supported_brands/marytts.png index 2f2d4dd16d0..cd9e8675cae 100644 Binary files a/source/images/supported_brands/marytts.png and b/source/images/supported_brands/marytts.png differ diff --git a/source/images/supported_brands/mastodon.png b/source/images/supported_brands/mastodon.png new file mode 100644 index 00000000000..41132c2d435 Binary files /dev/null and b/source/images/supported_brands/mastodon.png differ diff --git a/source/images/supported_brands/matrix.png b/source/images/supported_brands/matrix.png index 1cfeb6e2721..7ca8951e542 100644 Binary files a/source/images/supported_brands/matrix.png and b/source/images/supported_brands/matrix.png differ diff --git a/source/images/supported_brands/maxcube.png b/source/images/supported_brands/maxcube.png index 05990fbdbb8..b0858856bb7 100644 Binary files a/source/images/supported_brands/maxcube.png and b/source/images/supported_brands/maxcube.png differ diff --git a/source/images/supported_brands/mclimate.png b/source/images/supported_brands/mclimate.png new file mode 100644 index 00000000000..bac1daee734 Binary files /dev/null and b/source/images/supported_brands/mclimate.png differ diff --git a/source/images/supported_brands/mediaroom.png b/source/images/supported_brands/mediaroom.png new file mode 100644 index 00000000000..0e8f3cdbe19 Binary files /dev/null and b/source/images/supported_brands/mediaroom.png differ diff --git a/source/images/supported_brands/meraki.png b/source/images/supported_brands/meraki.png new file mode 100644 index 00000000000..88af43fc3aa Binary files /dev/null and b/source/images/supported_brands/meraki.png differ diff --git a/source/images/supported_brands/mercedesme.png b/source/images/supported_brands/mercedesme.png new file mode 100644 index 00000000000..e500c15ba98 Binary files /dev/null and b/source/images/supported_brands/mercedesme.png differ diff --git a/source/images/supported_brands/message_bird.png b/source/images/supported_brands/message_bird.png index 88b5a2152e8..30eb9987a54 100644 Binary files a/source/images/supported_brands/message_bird.png and b/source/images/supported_brands/message_bird.png differ diff --git a/source/images/supported_brands/metoffice.jpg b/source/images/supported_brands/metoffice.jpg index 5928b11bf3f..b92851c6a0f 100644 Binary files a/source/images/supported_brands/metoffice.jpg and b/source/images/supported_brands/metoffice.jpg differ diff --git a/source/images/supported_brands/mhz19_logo.png b/source/images/supported_brands/mhz19_logo.png index d614a7a242d..b632a70d2f7 100644 Binary files a/source/images/supported_brands/mhz19_logo.png and b/source/images/supported_brands/mhz19_logo.png differ diff --git a/source/images/supported_brands/microsoft.png b/source/images/supported_brands/microsoft.png index d145ee15fc7..535f741d021 100644 Binary files a/source/images/supported_brands/microsoft.png and b/source/images/supported_brands/microsoft.png differ diff --git a/source/images/supported_brands/miflora.png b/source/images/supported_brands/miflora.png index 263aa634ccb..0422f973ad2 100644 Binary files a/source/images/supported_brands/miflora.png and b/source/images/supported_brands/miflora.png differ diff --git a/source/images/supported_brands/mikrotik.png b/source/images/supported_brands/mikrotik.png index 57dd906122b..d683e8b1ebf 100644 Binary files a/source/images/supported_brands/mikrotik.png and b/source/images/supported_brands/mikrotik.png differ diff --git a/source/images/supported_brands/modbus.png b/source/images/supported_brands/modbus.png index 54f6eef57d5..1d1e3a6c7b7 100644 Binary files a/source/images/supported_brands/modbus.png and b/source/images/supported_brands/modbus.png differ diff --git a/source/images/supported_brands/mopar.png b/source/images/supported_brands/mopar.png index 8a526d882e5..96ceb24cd9b 100644 Binary files a/source/images/supported_brands/mopar.png and b/source/images/supported_brands/mopar.png differ diff --git a/source/images/supported_brands/mpchc.png b/source/images/supported_brands/mpchc.png index 621b2436922..656b6423377 100644 Binary files a/source/images/supported_brands/mpchc.png and b/source/images/supported_brands/mpchc.png differ diff --git a/source/images/supported_brands/mpd.png b/source/images/supported_brands/mpd.png index 6a828b64341..90c0a0635c6 100644 Binary files a/source/images/supported_brands/mpd.png and b/source/images/supported_brands/mpd.png differ diff --git a/source/images/supported_brands/mqtt.png b/source/images/supported_brands/mqtt.png index 78d182e3202..6084ff5bc93 100644 Binary files a/source/images/supported_brands/mqtt.png and b/source/images/supported_brands/mqtt.png differ diff --git a/source/images/supported_brands/mvg.png b/source/images/supported_brands/mvg.png index 529609383dc..6d37bf3e28c 100644 Binary files a/source/images/supported_brands/mvg.png and b/source/images/supported_brands/mvg.png differ diff --git a/source/images/supported_brands/mycroft.png b/source/images/supported_brands/mycroft.png index f20b9033ace..547c6e8598a 100644 Binary files a/source/images/supported_brands/mycroft.png and b/source/images/supported_brands/mycroft.png differ diff --git a/source/images/supported_brands/myq.png b/source/images/supported_brands/myq.png index eec41a7f01c..859516244ad 100644 Binary files a/source/images/supported_brands/myq.png and b/source/images/supported_brands/myq.png differ diff --git a/source/images/supported_brands/mysensors.png b/source/images/supported_brands/mysensors.png index ae7fe5a0d24..c59458474d8 100644 Binary files a/source/images/supported_brands/mysensors.png and b/source/images/supported_brands/mysensors.png differ diff --git a/source/images/supported_brands/mystrom.png b/source/images/supported_brands/mystrom.png index b63cf0ac508..e5bcbd52058 100644 Binary files a/source/images/supported_brands/mystrom.png and b/source/images/supported_brands/mystrom.png differ diff --git a/source/images/supported_brands/nad.png b/source/images/supported_brands/nad.png index bcd2e711545..0ca32bb1829 100644 Binary files a/source/images/supported_brands/nad.png and b/source/images/supported_brands/nad.png differ diff --git a/source/images/supported_brands/namecheap.png b/source/images/supported_brands/namecheap.png index 2e72ae7a942..092fc28bfe7 100644 Binary files a/source/images/supported_brands/namecheap.png and b/source/images/supported_brands/namecheap.png differ diff --git a/source/images/supported_brands/nanoleaf_aurora_light.png b/source/images/supported_brands/nanoleaf_aurora_light.png new file mode 100644 index 00000000000..ae620eb1856 Binary files /dev/null and b/source/images/supported_brands/nanoleaf_aurora_light.png differ diff --git a/source/images/supported_brands/nasa.png b/source/images/supported_brands/nasa.png index 07df14823d4..7592a74e170 100644 Binary files a/source/images/supported_brands/nasa.png and b/source/images/supported_brands/nasa.png differ diff --git a/source/images/supported_brands/neato.png b/source/images/supported_brands/neato.png index 0255cc8e60e..e1a5e0634ba 100644 Binary files a/source/images/supported_brands/neato.png and b/source/images/supported_brands/neato.png differ diff --git a/source/images/supported_brands/nederlandse_spoorwegen.png b/source/images/supported_brands/nederlandse_spoorwegen.png index 4326a33e0d4..25e021e6719 100644 Binary files a/source/images/supported_brands/nederlandse_spoorwegen.png and b/source/images/supported_brands/nederlandse_spoorwegen.png differ diff --git a/source/images/supported_brands/nello.png b/source/images/supported_brands/nello.png index 39c62f7da52..46c14cf3e8e 100644 Binary files a/source/images/supported_brands/nello.png and b/source/images/supported_brands/nello.png differ diff --git a/source/images/supported_brands/nest.png b/source/images/supported_brands/nest.png index dea65a74c1a..8831f160be6 100644 Binary files a/source/images/supported_brands/nest.png and b/source/images/supported_brands/nest.png differ diff --git a/source/images/supported_brands/netatmo.png b/source/images/supported_brands/netatmo.png index cd9098ae8ec..badb5cf64e4 100644 Binary files a/source/images/supported_brands/netatmo.png and b/source/images/supported_brands/netatmo.png differ diff --git a/source/images/supported_brands/netbeheernederland.jpg b/source/images/supported_brands/netbeheernederland.jpg index cab529d4b5a..e66485d9d6a 100644 Binary files a/source/images/supported_brands/netbeheernederland.jpg and b/source/images/supported_brands/netbeheernederland.jpg differ diff --git a/source/images/supported_brands/netdata.png b/source/images/supported_brands/netdata.png index a10767008df..73f99217039 100644 Binary files a/source/images/supported_brands/netdata.png and b/source/images/supported_brands/netdata.png differ diff --git a/source/images/supported_brands/netgear.png b/source/images/supported_brands/netgear.png index 519d12ab843..3a800bb6458 100644 Binary files a/source/images/supported_brands/netgear.png and b/source/images/supported_brands/netgear.png differ diff --git a/source/images/supported_brands/netio.png b/source/images/supported_brands/netio.png index 0ccf9bccfa2..3e429723248 100644 Binary files a/source/images/supported_brands/netio.png and b/source/images/supported_brands/netio.png differ diff --git a/source/images/supported_brands/network-snmp.png b/source/images/supported_brands/network-snmp.png index dbb709eeea2..1527eae8a65 100644 Binary files a/source/images/supported_brands/network-snmp.png and b/source/images/supported_brands/network-snmp.png differ diff --git a/source/images/supported_brands/networx.png b/source/images/supported_brands/networx.png index 48728ed9871..bbc71ca113c 100644 Binary files a/source/images/supported_brands/networx.png and b/source/images/supported_brands/networx.png differ diff --git a/source/images/supported_brands/neurio.png b/source/images/supported_brands/neurio.png index f8243caf22f..53b36dcf3e6 100644 Binary files a/source/images/supported_brands/neurio.png and b/source/images/supported_brands/neurio.png differ diff --git a/source/images/supported_brands/nfandroidtv.png b/source/images/supported_brands/nfandroidtv.png index 66a0ca99b5d..38a6b1247a1 100644 Binary files a/source/images/supported_brands/nfandroidtv.png and b/source/images/supported_brands/nfandroidtv.png differ diff --git a/source/images/supported_brands/nma.png b/source/images/supported_brands/nma.png index 9e587d005e0..5ec1b680568 100644 Binary files a/source/images/supported_brands/nma.png and b/source/images/supported_brands/nma.png differ diff --git a/source/images/supported_brands/nmap.png b/source/images/supported_brands/nmap.png index ba5ab90cfea..145e48a9afa 100644 Binary files a/source/images/supported_brands/nmap.png and b/source/images/supported_brands/nmap.png differ diff --git a/source/images/supported_brands/noaa.png b/source/images/supported_brands/noaa.png index 3f9cb0f37ab..837b1001619 100644 Binary files a/source/images/supported_brands/noaa.png and b/source/images/supported_brands/noaa.png differ diff --git a/source/images/supported_brands/noip.png b/source/images/supported_brands/noip.png index ee948b3d410..6db37623bd0 100644 Binary files a/source/images/supported_brands/noip.png and b/source/images/supported_brands/noip.png differ diff --git a/source/images/supported_brands/nuheat.png b/source/images/supported_brands/nuheat.png new file mode 100644 index 00000000000..851f06ca59a Binary files /dev/null and b/source/images/supported_brands/nuheat.png differ diff --git a/source/images/supported_brands/nuimo.png b/source/images/supported_brands/nuimo.png index 340a44dc919..23b8d1c9296 100644 Binary files a/source/images/supported_brands/nuimo.png and b/source/images/supported_brands/nuimo.png differ diff --git a/source/images/supported_brands/nuki.png b/source/images/supported_brands/nuki.png index 51ccb042414..e83e8bec3d5 100644 Binary files a/source/images/supported_brands/nuki.png and b/source/images/supported_brands/nuki.png differ diff --git a/source/images/supported_brands/nut.png b/source/images/supported_brands/nut.png index 518278f8eb0..d661ce720c7 100644 Binary files a/source/images/supported_brands/nut.png and b/source/images/supported_brands/nut.png differ diff --git a/source/images/supported_brands/nzbget.png b/source/images/supported_brands/nzbget.png index 7f959ce7b4b..0cc77e435f7 100644 Binary files a/source/images/supported_brands/nzbget.png and b/source/images/supported_brands/nzbget.png differ diff --git a/source/images/supported_brands/octoprint.png b/source/images/supported_brands/octoprint.png index dcfd344bd6b..1a785ecd8c2 100644 Binary files a/source/images/supported_brands/octoprint.png and b/source/images/supported_brands/octoprint.png differ diff --git a/source/images/supported_brands/oem.png b/source/images/supported_brands/oem.png index 4c69067a2e2..9e682bc42ed 100644 Binary files a/source/images/supported_brands/oem.png and b/source/images/supported_brands/oem.png differ diff --git a/source/images/supported_brands/ohmconnect.png b/source/images/supported_brands/ohmconnect.png index 2bc38a70ae5..21ac54dd845 100644 Binary files a/source/images/supported_brands/ohmconnect.png and b/source/images/supported_brands/ohmconnect.png differ diff --git a/source/images/supported_brands/onewire.png b/source/images/supported_brands/onewire.png index 46530d3e958..a82ef73795c 100644 Binary files a/source/images/supported_brands/onewire.png and b/source/images/supported_brands/onewire.png differ diff --git a/source/images/supported_brands/onkyo.png b/source/images/supported_brands/onkyo.png index 4fdb590e1a9..2561c82c57b 100644 Binary files a/source/images/supported_brands/onkyo.png and b/source/images/supported_brands/onkyo.png differ diff --git a/source/images/supported_brands/onvif.png b/source/images/supported_brands/onvif.png index b1b27611709..a8a08e8aabe 100644 Binary files a/source/images/supported_brands/onvif.png and b/source/images/supported_brands/onvif.png differ diff --git a/source/images/supported_brands/openalpr.png b/source/images/supported_brands/openalpr.png index a8f846fe3f8..f9fd3e9d825 100644 Binary files a/source/images/supported_brands/openalpr.png and b/source/images/supported_brands/openalpr.png differ diff --git a/source/images/supported_brands/opencv.png b/source/images/supported_brands/opencv.png index 29950111018..60d2422fd58 100644 Binary files a/source/images/supported_brands/opencv.png and b/source/images/supported_brands/opencv.png differ diff --git a/source/images/supported_brands/openevse.png b/source/images/supported_brands/openevse.png index 619ed579447..f29dd9d06e8 100644 Binary files a/source/images/supported_brands/openevse.png and b/source/images/supported_brands/openevse.png differ diff --git a/source/images/supported_brands/openexchangerates.png b/source/images/supported_brands/openexchangerates.png index e126a06185e..22a8d32484a 100644 Binary files a/source/images/supported_brands/openexchangerates.png and b/source/images/supported_brands/openexchangerates.png differ diff --git a/source/images/supported_brands/opengarage.png b/source/images/supported_brands/opengarage.png index 9b83e8c5555..4b4c2cabf3a 100644 Binary files a/source/images/supported_brands/opengarage.png and b/source/images/supported_brands/opengarage.png differ diff --git a/source/images/supported_brands/openhardwaremonitor.png b/source/images/supported_brands/openhardwaremonitor.png index 1764adb4185..629a2c1e73a 100644 Binary files a/source/images/supported_brands/openhardwaremonitor.png and b/source/images/supported_brands/openhardwaremonitor.png differ diff --git a/source/images/supported_brands/opensky.png b/source/images/supported_brands/opensky.png index 4fc072a7c2a..61b8b89c36b 100644 Binary files a/source/images/supported_brands/opensky.png and b/source/images/supported_brands/opensky.png differ diff --git a/source/images/supported_brands/openweathermap.png b/source/images/supported_brands/openweathermap.png index 43ce0562d76..b91540e0d79 100644 Binary files a/source/images/supported_brands/openweathermap.png and b/source/images/supported_brands/openweathermap.png differ diff --git a/source/images/supported_brands/openwrt.png b/source/images/supported_brands/openwrt.png index 957d3d3a539..0ec55cbc5cb 100644 Binary files a/source/images/supported_brands/openwrt.png and b/source/images/supported_brands/openwrt.png differ diff --git a/source/images/supported_brands/orange.png b/source/images/supported_brands/orange.png index e2031268096..074fd88be8e 100644 Binary files a/source/images/supported_brands/orange.png and b/source/images/supported_brands/orange.png differ diff --git a/source/images/supported_brands/orvibo.png b/source/images/supported_brands/orvibo.png index 7e3c7fbd208..e9a30e0b458 100644 Binary files a/source/images/supported_brands/orvibo.png and b/source/images/supported_brands/orvibo.png differ diff --git a/source/images/supported_brands/osramlightify.png b/source/images/supported_brands/osramlightify.png index aa2c8bfa9b8..863fdfbec00 100644 Binary files a/source/images/supported_brands/osramlightify.png and b/source/images/supported_brands/osramlightify.png differ diff --git a/source/images/supported_brands/owntracks.png b/source/images/supported_brands/owntracks.png index 6cbad6aaf41..0e7dc136398 100644 Binary files a/source/images/supported_brands/owntracks.png and b/source/images/supported_brands/owntracks.png differ diff --git a/source/images/supported_brands/p5.png b/source/images/supported_brands/p5.png new file mode 100644 index 00000000000..31877689929 Binary files /dev/null and b/source/images/supported_brands/p5.png differ diff --git a/source/images/supported_brands/panasonic.png b/source/images/supported_brands/panasonic.png index 42bbeb90474..776468bf85c 100644 Binary files a/source/images/supported_brands/panasonic.png and b/source/images/supported_brands/panasonic.png differ diff --git a/source/images/supported_brands/pandora.png b/source/images/supported_brands/pandora.png index e1fa6bc1bde..7e64e64ad2e 100644 Binary files a/source/images/supported_brands/pandora.png and b/source/images/supported_brands/pandora.png differ diff --git a/source/images/supported_brands/pencil.png b/source/images/supported_brands/pencil.png index 71519e4a6b7..88f48dee234 100644 Binary files a/source/images/supported_brands/pencil.png and b/source/images/supported_brands/pencil.png differ diff --git a/source/images/supported_brands/philips.png b/source/images/supported_brands/philips.png index 6148e62bac9..e7b43544c1b 100644 Binary files a/source/images/supported_brands/philips.png and b/source/images/supported_brands/philips.png differ diff --git a/source/images/supported_brands/philips_hue.png b/source/images/supported_brands/philips_hue.png index 53d9be8d88a..cdc7b17a985 100644 Binary files a/source/images/supported_brands/philips_hue.png and b/source/images/supported_brands/philips_hue.png differ diff --git a/source/images/supported_brands/pi_hole.png b/source/images/supported_brands/pi_hole.png index 60b0a78dc01..7b6cea12930 100644 Binary files a/source/images/supported_brands/pi_hole.png and b/source/images/supported_brands/pi_hole.png differ diff --git a/source/images/supported_brands/pilight.png b/source/images/supported_brands/pilight.png index 2a5decae30e..6929a50dee8 100644 Binary files a/source/images/supported_brands/pilight.png and b/source/images/supported_brands/pilight.png differ diff --git a/source/images/supported_brands/pioneer.png b/source/images/supported_brands/pioneer.png index 243806a7860..a26c4e7c7e6 100644 Binary files a/source/images/supported_brands/pioneer.png and b/source/images/supported_brands/pioneer.png differ diff --git a/source/images/supported_brands/plex.png b/source/images/supported_brands/plex.png index b7fc5c8f76c..5391139f1f3 100644 Binary files a/source/images/supported_brands/plex.png and b/source/images/supported_brands/plex.png differ diff --git a/source/images/supported_brands/pocketcasts.png b/source/images/supported_brands/pocketcasts.png index ce78f191999..6e9a67efdea 100644 Binary files a/source/images/supported_brands/pocketcasts.png and b/source/images/supported_brands/pocketcasts.png differ diff --git a/source/images/supported_brands/pollen.jpg b/source/images/supported_brands/pollen.jpg new file mode 100644 index 00000000000..a27b221105d Binary files /dev/null and b/source/images/supported_brands/pollen.jpg differ diff --git a/source/images/supported_brands/polly.png b/source/images/supported_brands/polly.png index 68b29134cd0..35fd5c6160b 100644 Binary files a/source/images/supported_brands/polly.png and b/source/images/supported_brands/polly.png differ diff --git a/source/images/supported_brands/postnl.png b/source/images/supported_brands/postnl.png new file mode 100644 index 00000000000..4970f4fad4d Binary files /dev/null and b/source/images/supported_brands/postnl.png differ diff --git a/source/images/supported_brands/proliphix.png b/source/images/supported_brands/proliphix.png index 332464374b6..4e472ff0beb 100644 Binary files a/source/images/supported_brands/proliphix.png and b/source/images/supported_brands/proliphix.png differ diff --git a/source/images/supported_brands/prometheus.png b/source/images/supported_brands/prometheus.png index 2ef61724233..126f1a1c0f1 100644 Binary files a/source/images/supported_brands/prometheus.png and b/source/images/supported_brands/prometheus.png differ diff --git a/source/images/supported_brands/prowl.png b/source/images/supported_brands/prowl.png index b3c7c5d53da..fba42eba1a4 100644 Binary files a/source/images/supported_brands/prowl.png and b/source/images/supported_brands/prowl.png differ diff --git a/source/images/supported_brands/pulseaudio.png b/source/images/supported_brands/pulseaudio.png index 75d99335abd..af65713ae3c 100644 Binary files a/source/images/supported_brands/pulseaudio.png and b/source/images/supported_brands/pulseaudio.png differ diff --git a/source/images/supported_brands/pushbullet.png b/source/images/supported_brands/pushbullet.png index 553642398b7..66cdf8efdce 100644 Binary files a/source/images/supported_brands/pushbullet.png and b/source/images/supported_brands/pushbullet.png differ diff --git a/source/images/supported_brands/pushetta.png b/source/images/supported_brands/pushetta.png index d2c5715676d..88976dd93fe 100644 Binary files a/source/images/supported_brands/pushetta.png and b/source/images/supported_brands/pushetta.png differ diff --git a/source/images/supported_brands/pushover.png b/source/images/supported_brands/pushover.png index 092cf702ff6..387253deb2e 100644 Binary files a/source/images/supported_brands/pushover.png and b/source/images/supported_brands/pushover.png differ diff --git a/source/images/supported_brands/pushsafer.png b/source/images/supported_brands/pushsafer.png index aedc8421321..252817154b3 100644 Binary files a/source/images/supported_brands/pushsafer.png and b/source/images/supported_brands/pushsafer.png differ diff --git a/source/images/supported_brands/pvoutput.png b/source/images/supported_brands/pvoutput.png index f5a6e4aee28..78352738f6d 100644 Binary files a/source/images/supported_brands/pvoutput.png and b/source/images/supported_brands/pvoutput.png differ diff --git a/source/images/supported_brands/pyload.png b/source/images/supported_brands/pyload.png index effe219bc3f..5edf68c82f7 100644 Binary files a/source/images/supported_brands/pyload.png and b/source/images/supported_brands/pyload.png differ diff --git a/source/images/supported_brands/qnap.png b/source/images/supported_brands/qnap.png index 2b394234b47..fc3bcd132f7 100644 Binary files a/source/images/supported_brands/qnap.png and b/source/images/supported_brands/qnap.png differ diff --git a/source/images/supported_brands/qwikswitch.png b/source/images/supported_brands/qwikswitch.png index ada6158b54d..b27efc56714 100644 Binary files a/source/images/supported_brands/qwikswitch.png and b/source/images/supported_brands/qwikswitch.png differ diff --git a/source/images/supported_brands/rachio.png b/source/images/supported_brands/rachio.png index 0b8a9d97113..d2a21da41bc 100644 Binary files a/source/images/supported_brands/rachio.png and b/source/images/supported_brands/rachio.png differ diff --git a/source/images/supported_brands/radarr.png b/source/images/supported_brands/radarr.png index c731e94afcc..b8f79e38eab 100644 Binary files a/source/images/supported_brands/radarr.png and b/source/images/supported_brands/radarr.png differ diff --git a/source/images/supported_brands/radiotherm.png b/source/images/supported_brands/radiotherm.png index 8d179646829..e2af5490735 100644 Binary files a/source/images/supported_brands/radiotherm.png and b/source/images/supported_brands/radiotherm.png differ diff --git a/source/images/supported_brands/rainbird.png b/source/images/supported_brands/rainbird.png index c5e02246e3b..f1909a566e8 100644 Binary files a/source/images/supported_brands/rainbird.png and b/source/images/supported_brands/rainbird.png differ diff --git a/source/images/supported_brands/raincloud.jpg b/source/images/supported_brands/raincloud.jpg index 71902e3d21d..b943a6831f3 100644 Binary files a/source/images/supported_brands/raincloud.jpg and b/source/images/supported_brands/raincloud.jpg differ diff --git a/source/images/supported_brands/rainmachine.png b/source/images/supported_brands/rainmachine.png index 629eab8382b..45c5cf868fe 100644 Binary files a/source/images/supported_brands/rainmachine.png and b/source/images/supported_brands/rainmachine.png differ diff --git a/source/images/supported_brands/raspberry-pi.png b/source/images/supported_brands/raspberry-pi.png index f7440be36d8..9fd63332b70 100644 Binary files a/source/images/supported_brands/raspberry-pi.png and b/source/images/supported_brands/raspberry-pi.png differ diff --git a/source/images/supported_brands/raspihats.png b/source/images/supported_brands/raspihats.png index 4439cbc7b83..2d87e584294 100644 Binary files a/source/images/supported_brands/raspihats.png and b/source/images/supported_brands/raspihats.png differ diff --git a/source/images/supported_brands/rememberthemilk.png b/source/images/supported_brands/rememberthemilk.png index 04bbc33fcbb..1f283b96b99 100644 Binary files a/source/images/supported_brands/rememberthemilk.png and b/source/images/supported_brands/rememberthemilk.png differ diff --git a/source/images/supported_brands/rest.png b/source/images/supported_brands/rest.png index 059d5bc7645..4295722789a 100644 Binary files a/source/images/supported_brands/rest.png and b/source/images/supported_brands/rest.png differ diff --git a/source/images/supported_brands/restful.png b/source/images/supported_brands/restful.png index dd5bf0cc803..6da6c25f858 100644 Binary files a/source/images/supported_brands/restful.png and b/source/images/supported_brands/restful.png differ diff --git a/source/images/supported_brands/rflink.png b/source/images/supported_brands/rflink.png index b597bba1c29..050e186d7e9 100644 Binary files a/source/images/supported_brands/rflink.png and b/source/images/supported_brands/rflink.png differ diff --git a/source/images/supported_brands/rfxtrx.png b/source/images/supported_brands/rfxtrx.png index 1264937fb85..dbf47ee82fb 100644 Binary files a/source/images/supported_brands/rfxtrx.png and b/source/images/supported_brands/rfxtrx.png differ diff --git a/source/images/supported_brands/ring.png b/source/images/supported_brands/ring.png index 52f746e4dcc..36c701b5701 100644 Binary files a/source/images/supported_brands/ring.png and b/source/images/supported_brands/ring.png differ diff --git a/source/images/supported_brands/ripple.png b/source/images/supported_brands/ripple.png index 02559dfd361..3a7e82080ea 100644 Binary files a/source/images/supported_brands/ripple.png and b/source/images/supported_brands/ripple.png differ diff --git a/source/images/supported_brands/rocketchat.png b/source/images/supported_brands/rocketchat.png index 90d802ceba0..49856e98a10 100644 Binary files a/source/images/supported_brands/rocketchat.png and b/source/images/supported_brands/rocketchat.png differ diff --git a/source/images/supported_brands/roku.png b/source/images/supported_brands/roku.png index 0a86a60e8d1..e8310360168 100644 Binary files a/source/images/supported_brands/roku.png and b/source/images/supported_brands/roku.png differ diff --git a/source/images/supported_brands/roth.png b/source/images/supported_brands/roth.png new file mode 100644 index 00000000000..5529edce585 Binary files /dev/null and b/source/images/supported_brands/roth.png differ diff --git a/source/images/supported_brands/rss.gif b/source/images/supported_brands/rss.gif index f392663d1be..b1fc025785f 100644 Binary files a/source/images/supported_brands/rss.gif and b/source/images/supported_brands/rss.gif differ diff --git a/source/images/supported_brands/rss.png b/source/images/supported_brands/rss.png index 26ede7114a6..c850c817e20 100644 Binary files a/source/images/supported_brands/rss.png and b/source/images/supported_brands/rss.png differ diff --git a/source/images/supported_brands/russound.png b/source/images/supported_brands/russound.png index 4461fff8403..4c4dfcba56c 100644 Binary files a/source/images/supported_brands/russound.png and b/source/images/supported_brands/russound.png differ diff --git a/source/images/supported_brands/sabnzbd.png b/source/images/supported_brands/sabnzbd.png index 48056574977..dbe5437c906 100644 Binary files a/source/images/supported_brands/sabnzbd.png and b/source/images/supported_brands/sabnzbd.png differ diff --git a/source/images/supported_brands/samsung.png b/source/images/supported_brands/samsung.png index 59faac2b17b..7ae61eeb0b7 100644 Binary files a/source/images/supported_brands/samsung.png and b/source/images/supported_brands/samsung.png differ diff --git a/source/images/supported_brands/satel.jpg b/source/images/supported_brands/satel.jpg index 4285254ca39..90b086036ef 100644 Binary files a/source/images/supported_brands/satel.jpg and b/source/images/supported_brands/satel.jpg differ diff --git a/source/images/supported_brands/sendgrid.png b/source/images/supported_brands/sendgrid.png index 7d24c38491a..a18faa7c6b0 100644 Binary files a/source/images/supported_brands/sendgrid.png and b/source/images/supported_brands/sendgrid.png differ diff --git a/source/images/supported_brands/sense-hat.png b/source/images/supported_brands/sense-hat.png index e6dda07bb0e..f4b12fb41b6 100644 Binary files a/source/images/supported_brands/sense-hat.png and b/source/images/supported_brands/sense-hat.png differ diff --git a/source/images/supported_brands/sense.png b/source/images/supported_brands/sense.png new file mode 100644 index 00000000000..40244b4b0e8 Binary files /dev/null and b/source/images/supported_brands/sense.png differ diff --git a/source/images/supported_brands/sensibo.png b/source/images/supported_brands/sensibo.png index 8cf1c33afa4..7c596866fe9 100644 Binary files a/source/images/supported_brands/sensibo.png and b/source/images/supported_brands/sensibo.png differ diff --git a/source/images/supported_brands/sensirion.png b/source/images/supported_brands/sensirion.png new file mode 100644 index 00000000000..f159c332531 Binary files /dev/null and b/source/images/supported_brands/sensirion.png differ diff --git a/source/images/supported_brands/serial_pm.png b/source/images/supported_brands/serial_pm.png index 78a5d7f67b5..c957403f5d0 100644 Binary files a/source/images/supported_brands/serial_pm.png and b/source/images/supported_brands/serial_pm.png differ diff --git a/source/images/supported_brands/sesame.png b/source/images/supported_brands/sesame.png index a99834a4b6b..1eb14e23597 100644 Binary files a/source/images/supported_brands/sesame.png and b/source/images/supported_brands/sesame.png differ diff --git a/source/images/supported_brands/sharp_aquos.png b/source/images/supported_brands/sharp_aquos.png index dd9dd7ec3ed..aea41dc34c2 100644 Binary files a/source/images/supported_brands/sharp_aquos.png and b/source/images/supported_brands/sharp_aquos.png differ diff --git a/source/images/supported_brands/shiftr.png b/source/images/supported_brands/shiftr.png index 438cbf76fda..94fd708fc6f 100644 Binary files a/source/images/supported_brands/shiftr.png and b/source/images/supported_brands/shiftr.png differ diff --git a/source/images/supported_brands/shodan.png b/source/images/supported_brands/shodan.png index 7de15d9eac6..42a1a5ffe74 100644 Binary files a/source/images/supported_brands/shodan.png and b/source/images/supported_brands/shodan.png differ diff --git a/source/images/supported_brands/sigfox.png b/source/images/supported_brands/sigfox.png new file mode 100644 index 00000000000..5f073d56309 Binary files /dev/null and b/source/images/supported_brands/sigfox.png differ diff --git a/source/images/supported_brands/simplepush.png b/source/images/supported_brands/simplepush.png index fa44e1c8bee..fa8d789d417 100644 Binary files a/source/images/supported_brands/simplepush.png and b/source/images/supported_brands/simplepush.png differ diff --git a/source/images/supported_brands/simplisafe.png b/source/images/supported_brands/simplisafe.png index 86b22137972..794723a0ad7 100644 Binary files a/source/images/supported_brands/simplisafe.png and b/source/images/supported_brands/simplisafe.png differ diff --git a/source/images/supported_brands/sisyphus.png b/source/images/supported_brands/sisyphus.png new file mode 100644 index 00000000000..d1fd34ba65f Binary files /dev/null and b/source/images/supported_brands/sisyphus.png differ diff --git a/source/images/supported_brands/sky.png b/source/images/supported_brands/sky.png index 1c5b8d90269..b7750d5de7d 100644 Binary files a/source/images/supported_brands/sky.png and b/source/images/supported_brands/sky.png differ diff --git a/source/images/supported_brands/skybell.png b/source/images/supported_brands/skybell.png index 3eac85b677e..ff8ef0308af 100644 Binary files a/source/images/supported_brands/skybell.png and b/source/images/supported_brands/skybell.png differ diff --git a/source/images/supported_brands/slack.png b/source/images/supported_brands/slack.png index d48d683f059..22e7ff12e9a 100644 Binary files a/source/images/supported_brands/slack.png and b/source/images/supported_brands/slack.png differ diff --git a/source/images/supported_brands/sleepiq.png b/source/images/supported_brands/sleepiq.png index 2ef992997fd..77e13dc4981 100644 Binary files a/source/images/supported_brands/sleepiq.png and b/source/images/supported_brands/sleepiq.png differ diff --git a/source/images/supported_brands/sma.png b/source/images/supported_brands/sma.png index cdef0f732e8..c7e0d8f5b65 100644 Binary files a/source/images/supported_brands/sma.png and b/source/images/supported_brands/sma.png differ diff --git a/source/images/supported_brands/smappee.png b/source/images/supported_brands/smappee.png new file mode 100644 index 00000000000..14436be638a Binary files /dev/null and b/source/images/supported_brands/smappee.png differ diff --git a/source/images/supported_brands/smartthings.png b/source/images/supported_brands/smartthings.png index 96c2cedfc82..acc969a0c5a 100644 Binary files a/source/images/supported_brands/smartthings.png and b/source/images/supported_brands/smartthings.png differ diff --git a/source/images/supported_brands/smtp.png b/source/images/supported_brands/smtp.png index 2c3df6cfd92..bb1bde31f66 100644 Binary files a/source/images/supported_brands/smtp.png and b/source/images/supported_brands/smtp.png differ diff --git a/source/images/supported_brands/snapcast.png b/source/images/supported_brands/snapcast.png index 5d10505e282..53873a29f61 100644 Binary files a/source/images/supported_brands/snapcast.png and b/source/images/supported_brands/snapcast.png differ diff --git a/source/images/supported_brands/snips.png b/source/images/supported_brands/snips.png index 4c5bbd7218f..e317b9631f8 100644 Binary files a/source/images/supported_brands/snips.png and b/source/images/supported_brands/snips.png differ diff --git a/source/images/supported_brands/sochain.png b/source/images/supported_brands/sochain.png new file mode 100644 index 00000000000..d3680f2a66b Binary files /dev/null and b/source/images/supported_brands/sochain.png differ diff --git a/source/images/supported_brands/socialblade.png b/source/images/supported_brands/socialblade.png new file mode 100644 index 00000000000..6013d91bf0c Binary files /dev/null and b/source/images/supported_brands/socialblade.png differ diff --git a/source/images/supported_brands/sonarr.png b/source/images/supported_brands/sonarr.png index 83190d9b642..5fe84183f1b 100644 Binary files a/source/images/supported_brands/sonarr.png and b/source/images/supported_brands/sonarr.png differ diff --git a/source/images/supported_brands/sonos.png b/source/images/supported_brands/sonos.png index 2980b9d9b27..f0cd78894dc 100644 Binary files a/source/images/supported_brands/sonos.png and b/source/images/supported_brands/sonos.png differ diff --git a/source/images/supported_brands/sony.png b/source/images/supported_brands/sony.png new file mode 100644 index 00000000000..f89037784d2 Binary files /dev/null and b/source/images/supported_brands/sony.png differ diff --git a/source/images/supported_brands/soundtouch.png b/source/images/supported_brands/soundtouch.png index d5323ec31f7..dc7c30bdcb3 100644 Binary files a/source/images/supported_brands/soundtouch.png and b/source/images/supported_brands/soundtouch.png differ diff --git a/source/images/supported_brands/spaceapi.png b/source/images/supported_brands/spaceapi.png new file mode 100644 index 00000000000..364516a240c Binary files /dev/null and b/source/images/supported_brands/spaceapi.png differ diff --git a/source/images/supported_brands/speedtest.png b/source/images/supported_brands/speedtest.png index d9bd06b6f9b..1aba2c9a440 100644 Binary files a/source/images/supported_brands/speedtest.png and b/source/images/supported_brands/speedtest.png differ diff --git a/source/images/supported_brands/spider.png b/source/images/supported_brands/spider.png new file mode 100644 index 00000000000..55e53bddc83 Binary files /dev/null and b/source/images/supported_brands/spider.png differ diff --git a/source/images/supported_brands/splunk.png b/source/images/supported_brands/splunk.png index 9c324f82ef4..844de0352b0 100644 Binary files a/source/images/supported_brands/splunk.png and b/source/images/supported_brands/splunk.png differ diff --git a/source/images/supported_brands/spotify.png b/source/images/supported_brands/spotify.png index b4da680d1ac..28e7a17fd02 100644 Binary files a/source/images/supported_brands/spotify.png and b/source/images/supported_brands/spotify.png differ diff --git a/source/images/supported_brands/sql.png b/source/images/supported_brands/sql.png new file mode 100644 index 00000000000..1ff88836868 Binary files /dev/null and b/source/images/supported_brands/sql.png differ diff --git a/source/images/supported_brands/squeezebox.png b/source/images/supported_brands/squeezebox.png index 86ab4f290bc..a3017a43a78 100644 Binary files a/source/images/supported_brands/squeezebox.png and b/source/images/supported_brands/squeezebox.png differ diff --git a/source/images/supported_brands/startca.png b/source/images/supported_brands/startca.png new file mode 100644 index 00000000000..93d5f6e1b10 Binary files /dev/null and b/source/images/supported_brands/startca.png differ diff --git a/source/images/supported_brands/statsd.png b/source/images/supported_brands/statsd.png index 6f6d33dfb01..416867f59d5 100644 Binary files a/source/images/supported_brands/statsd.png and b/source/images/supported_brands/statsd.png differ diff --git a/source/images/supported_brands/steam.png b/source/images/supported_brands/steam.png index 05e082c991c..1e6983ccd49 100644 Binary files a/source/images/supported_brands/steam.png and b/source/images/supported_brands/steam.png differ diff --git a/source/images/supported_brands/stride.png b/source/images/supported_brands/stride.png new file mode 100644 index 00000000000..c6ceb6ed67c Binary files /dev/null and b/source/images/supported_brands/stride.png differ diff --git a/source/images/supported_brands/sun.png b/source/images/supported_brands/sun.png index df5443e639d..340eec8f6ff 100644 Binary files a/source/images/supported_brands/sun.png and b/source/images/supported_brands/sun.png differ diff --git a/source/images/supported_brands/supervisord.png b/source/images/supported_brands/supervisord.png index 6905d5870bc..8302cef25e9 100644 Binary files a/source/images/supported_brands/supervisord.png and b/source/images/supported_brands/supervisord.png differ diff --git a/source/images/supported_brands/swiss-hydrological-data.png b/source/images/supported_brands/swiss-hydrological-data.png index d4101c41648..e78d2505aef 100644 Binary files a/source/images/supported_brands/swiss-hydrological-data.png and b/source/images/supported_brands/swiss-hydrological-data.png differ diff --git a/source/images/supported_brands/swisscom.png b/source/images/supported_brands/swisscom.png index 512c755fbc4..e364aced5de 100644 Binary files a/source/images/supported_brands/swisscom.png and b/source/images/supported_brands/swisscom.png differ diff --git a/source/images/supported_brands/synology.png b/source/images/supported_brands/synology.png index 66c524488f9..29d1b9fae45 100644 Binary files a/source/images/supported_brands/synology.png and b/source/images/supported_brands/synology.png differ diff --git a/source/images/supported_brands/syslog.png b/source/images/supported_brands/syslog.png index ba0c0f25302..f6440d6b003 100644 Binary files a/source/images/supported_brands/syslog.png and b/source/images/supported_brands/syslog.png differ diff --git a/source/images/supported_brands/system_monitor.png b/source/images/supported_brands/system_monitor.png index 0a57ddecb4c..2078a0e96b5 100644 Binary files a/source/images/supported_brands/system_monitor.png and b/source/images/supported_brands/system_monitor.png differ diff --git a/source/images/supported_brands/sytadin.png b/source/images/supported_brands/sytadin.png index e79d6ccaf36..6bd0594bb98 100644 Binary files a/source/images/supported_brands/sytadin.png and b/source/images/supported_brands/sytadin.png differ diff --git a/source/images/supported_brands/tado.png b/source/images/supported_brands/tado.png index 36845732b11..9c819c28a5c 100644 Binary files a/source/images/supported_brands/tado.png and b/source/images/supported_brands/tado.png differ diff --git a/source/images/supported_brands/tahoma.png b/source/images/supported_brands/tahoma.png index 5c74c58b073..8c0aa726ae1 100644 Binary files a/source/images/supported_brands/tahoma.png and b/source/images/supported_brands/tahoma.png differ diff --git a/source/images/supported_brands/tank_utility.png b/source/images/supported_brands/tank_utility.png index 165ca069dd8..017459c5b77 100644 Binary files a/source/images/supported_brands/tank_utility.png and b/source/images/supported_brands/tank_utility.png differ diff --git a/source/images/supported_brands/tapsaff.png b/source/images/supported_brands/tapsaff.png index 41ff2cf369f..b8627bd38c3 100644 Binary files a/source/images/supported_brands/tapsaff.png and b/source/images/supported_brands/tapsaff.png differ diff --git a/source/images/supported_brands/tcp_ip.png b/source/images/supported_brands/tcp_ip.png index c675c816127..8b23949e8f3 100644 Binary files a/source/images/supported_brands/tcp_ip.png and b/source/images/supported_brands/tcp_ip.png differ diff --git a/source/images/supported_brands/technicolor.png b/source/images/supported_brands/technicolor.png index c6ec9feff49..224a4ff9528 100644 Binary files a/source/images/supported_brands/technicolor.png and b/source/images/supported_brands/technicolor.png differ diff --git a/source/images/supported_brands/ted.png b/source/images/supported_brands/ted.png index f686d6a83bb..b859f9962dd 100644 Binary files a/source/images/supported_brands/ted.png and b/source/images/supported_brands/ted.png differ diff --git a/source/images/supported_brands/teksavvy.png b/source/images/supported_brands/teksavvy.png new file mode 100644 index 00000000000..573b397226c Binary files /dev/null and b/source/images/supported_brands/teksavvy.png differ diff --git a/source/images/supported_brands/telegram.png b/source/images/supported_brands/telegram.png index aa31a734eeb..ce9e7db5f2e 100644 Binary files a/source/images/supported_brands/telegram.png and b/source/images/supported_brands/telegram.png differ diff --git a/source/images/supported_brands/telldus.png b/source/images/supported_brands/telldus.png index 06fa9ccc324..f739cfba823 100644 Binary files a/source/images/supported_brands/telldus.png and b/source/images/supported_brands/telldus.png differ diff --git a/source/images/supported_brands/telldus_tellstick.png b/source/images/supported_brands/telldus_tellstick.png index b5256123e84..76e2fb464a6 100644 Binary files a/source/images/supported_brands/telldus_tellstick.png and b/source/images/supported_brands/telldus_tellstick.png differ diff --git a/source/images/supported_brands/telstra.png b/source/images/supported_brands/telstra.png index 2f34cae1a91..89982d107e2 100644 Binary files a/source/images/supported_brands/telstra.png and b/source/images/supported_brands/telstra.png differ diff --git a/source/images/supported_brands/tesla.png b/source/images/supported_brands/tesla.png index 44db488cf2c..4a7ab975bab 100644 Binary files a/source/images/supported_brands/tesla.png and b/source/images/supported_brands/tesla.png differ diff --git a/source/images/supported_brands/thethingsnetwork.png b/source/images/supported_brands/thethingsnetwork.png index 5f39f7dbbfd..eb4ddf129b2 100644 Binary files a/source/images/supported_brands/thethingsnetwork.png and b/source/images/supported_brands/thethingsnetwork.png differ diff --git a/source/images/supported_brands/thingspeak.png b/source/images/supported_brands/thingspeak.png index f71ccd3bea0..93fc058571a 100644 Binary files a/source/images/supported_brands/thingspeak.png and b/source/images/supported_brands/thingspeak.png differ diff --git a/source/images/supported_brands/thinkingcleaner.png b/source/images/supported_brands/thinkingcleaner.png index 0ea93811ba8..f8b2b351bbd 100644 Binary files a/source/images/supported_brands/thinkingcleaner.png and b/source/images/supported_brands/thinkingcleaner.png differ diff --git a/source/images/supported_brands/tibber.png b/source/images/supported_brands/tibber.png index 2b8ec3ed3a8..1cb606c42e2 100644 Binary files a/source/images/supported_brands/tibber.png and b/source/images/supported_brands/tibber.png differ diff --git a/source/images/supported_brands/tikteck.png b/source/images/supported_brands/tikteck.png index 4e40e16a9ef..4aec9425819 100644 Binary files a/source/images/supported_brands/tikteck.png and b/source/images/supported_brands/tikteck.png differ diff --git a/source/images/supported_brands/tile.png b/source/images/supported_brands/tile.png index 8b8e559fcf7..b65f85e375a 100644 Binary files a/source/images/supported_brands/tile.png and b/source/images/supported_brands/tile.png differ diff --git a/source/images/supported_brands/todoist.png b/source/images/supported_brands/todoist.png old mode 100755 new mode 100644 index 08d4b38e4f1..0ba1efdab87 Binary files a/source/images/supported_brands/todoist.png and b/source/images/supported_brands/todoist.png differ diff --git a/source/images/supported_brands/tomato.png b/source/images/supported_brands/tomato.png index a4e0f37fcfe..11150d51582 100644 Binary files a/source/images/supported_brands/tomato.png and b/source/images/supported_brands/tomato.png differ diff --git a/source/images/supported_brands/toon.png b/source/images/supported_brands/toon.png index b10a6fb9768..f3bb39cc330 100644 Binary files a/source/images/supported_brands/toon.png and b/source/images/supported_brands/toon.png differ diff --git a/source/images/supported_brands/tor.png b/source/images/supported_brands/tor.png index 10f787fcb80..b9d196aa7e2 100644 Binary files a/source/images/supported_brands/tor.png and b/source/images/supported_brands/tor.png differ diff --git a/source/images/supported_brands/torque.png b/source/images/supported_brands/torque.png index 408b934ad94..17dbabc2b2d 100644 Binary files a/source/images/supported_brands/torque.png and b/source/images/supported_brands/torque.png differ diff --git a/source/images/supported_brands/tp-link.png b/source/images/supported_brands/tp-link.png index 1eced933fdc..a16aea183dd 100644 Binary files a/source/images/supported_brands/tp-link.png and b/source/images/supported_brands/tp-link.png differ diff --git a/source/images/supported_brands/trackr.png b/source/images/supported_brands/trackr.png index 0dcc1045224..9cb8c03ffb1 100644 Binary files a/source/images/supported_brands/trackr.png and b/source/images/supported_brands/trackr.png differ diff --git a/source/images/supported_brands/trafikverket.png b/source/images/supported_brands/trafikverket.png new file mode 100644 index 00000000000..7fb6b3e9daa Binary files /dev/null and b/source/images/supported_brands/trafikverket.png differ diff --git a/source/images/supported_brands/train.png b/source/images/supported_brands/train.png index 6976e191beb..cc9ba565df7 100644 Binary files a/source/images/supported_brands/train.png and b/source/images/supported_brands/train.png differ diff --git a/source/images/supported_brands/transmission.png b/source/images/supported_brands/transmission.png index 13759b5eb43..cf42c523024 100644 Binary files a/source/images/supported_brands/transmission.png and b/source/images/supported_brands/transmission.png differ diff --git a/source/images/supported_brands/tuya.png b/source/images/supported_brands/tuya.png new file mode 100644 index 00000000000..58608de6153 Binary files /dev/null and b/source/images/supported_brands/tuya.png differ diff --git a/source/images/supported_brands/twilio.png b/source/images/supported_brands/twilio.png index ae02c87378c..944c4075173 100644 Binary files a/source/images/supported_brands/twilio.png and b/source/images/supported_brands/twilio.png differ diff --git a/source/images/supported_brands/twitch.png b/source/images/supported_brands/twitch.png index da759dd14b4..ed7b3100950 100644 Binary files a/source/images/supported_brands/twitch.png and b/source/images/supported_brands/twitch.png differ diff --git a/source/images/supported_brands/twitter.png b/source/images/supported_brands/twitter.png index 312ec93d6c0..2c735bd64fb 100644 Binary files a/source/images/supported_brands/twitter.png and b/source/images/supported_brands/twitter.png differ diff --git a/source/images/supported_brands/uber.png b/source/images/supported_brands/uber.png index e7f9c7ca6ab..ecea616e613 100644 Binary files a/source/images/supported_brands/uber.png and b/source/images/supported_brands/uber.png differ diff --git a/source/images/supported_brands/ubiquiti.png b/source/images/supported_brands/ubiquiti.png index cd754aabd8d..a40943383a0 100644 Binary files a/source/images/supported_brands/ubiquiti.png and b/source/images/supported_brands/ubiquiti.png differ diff --git a/source/images/supported_brands/ueradio.png b/source/images/supported_brands/ueradio.png new file mode 100644 index 00000000000..962f13baf80 Binary files /dev/null and b/source/images/supported_brands/ueradio.png differ diff --git a/source/images/supported_brands/unitymedia.png b/source/images/supported_brands/unitymedia.png new file mode 100644 index 00000000000..c391309d8fc Binary files /dev/null and b/source/images/supported_brands/unitymedia.png differ diff --git a/source/images/supported_brands/universal_devices.png b/source/images/supported_brands/universal_devices.png index 9e5d5205ed3..6460a6b5dee 100644 Binary files a/source/images/supported_brands/universal_devices.png and b/source/images/supported_brands/universal_devices.png differ diff --git a/source/images/supported_brands/upc.png b/source/images/supported_brands/upc.png index 6c9e01d6472..49314e11de9 100644 Binary files a/source/images/supported_brands/upc.png and b/source/images/supported_brands/upc.png differ diff --git a/source/images/supported_brands/upcloud.png b/source/images/supported_brands/upcloud.png new file mode 100644 index 00000000000..0dc7e882b59 Binary files /dev/null and b/source/images/supported_brands/upcloud.png differ diff --git a/source/images/supported_brands/updater.png b/source/images/supported_brands/updater.png index 94dfb6c3be1..3825544d09e 100644 Binary files a/source/images/supported_brands/updater.png and b/source/images/supported_brands/updater.png differ diff --git a/source/images/supported_brands/upnp.png b/source/images/supported_brands/upnp.png index 940919bd8c0..50d6e3f096f 100644 Binary files a/source/images/supported_brands/upnp.png and b/source/images/supported_brands/upnp.png differ diff --git a/source/images/supported_brands/ups.png b/source/images/supported_brands/ups.png index c423dea2dde..83a19d196b0 100644 Binary files a/source/images/supported_brands/ups.png and b/source/images/supported_brands/ups.png differ diff --git a/source/images/supported_brands/uptimerobot.png b/source/images/supported_brands/uptimerobot.png new file mode 100644 index 00000000000..64a319bff2b Binary files /dev/null and b/source/images/supported_brands/uptimerobot.png differ diff --git a/source/images/supported_brands/uscis.png b/source/images/supported_brands/uscis.png new file mode 100644 index 00000000000..b878a50bc95 Binary files /dev/null and b/source/images/supported_brands/uscis.png differ diff --git a/source/images/supported_brands/usps.png b/source/images/supported_brands/usps.png index b3857ac13fa..da6223e086f 100644 Binary files a/source/images/supported_brands/usps.png and b/source/images/supported_brands/usps.png differ diff --git a/source/images/supported_brands/vagrant.png b/source/images/supported_brands/vagrant.png index 362e379fc5c..4a44f0f5ffe 100644 Binary files a/source/images/supported_brands/vagrant.png and b/source/images/supported_brands/vagrant.png differ diff --git a/source/images/supported_brands/vanderbilt_spc.png b/source/images/supported_brands/vanderbilt_spc.png index 6d1136ef7d7..4d0f519459d 100644 Binary files a/source/images/supported_brands/vanderbilt_spc.png and b/source/images/supported_brands/vanderbilt_spc.png differ diff --git a/source/images/supported_brands/vasttrafik.png b/source/images/supported_brands/vasttrafik.png index 2d6428c2daa..74f1e82ef4e 100644 Binary files a/source/images/supported_brands/vasttrafik.png and b/source/images/supported_brands/vasttrafik.png differ diff --git a/source/images/supported_brands/velbus.png b/source/images/supported_brands/velbus.png index ebb143ae612..32a076882f9 100644 Binary files a/source/images/supported_brands/velbus.png and b/source/images/supported_brands/velbus.png differ diff --git a/source/images/supported_brands/velux.png b/source/images/supported_brands/velux.png index 2e5f35b2fe0..b7dcd8aab79 100644 Binary files a/source/images/supported_brands/velux.png and b/source/images/supported_brands/velux.png differ diff --git a/source/images/supported_brands/venstar.png b/source/images/supported_brands/venstar.png new file mode 100644 index 00000000000..e6026b5fbd0 Binary files /dev/null and b/source/images/supported_brands/venstar.png differ diff --git a/source/images/supported_brands/vera.png b/source/images/supported_brands/vera.png index a3023a20a54..12cdfe69f18 100644 Binary files a/source/images/supported_brands/vera.png and b/source/images/supported_brands/vera.png differ diff --git a/source/images/supported_brands/verisure.png b/source/images/supported_brands/verisure.png index 639c2d6c649..3bd73069595 100644 Binary files a/source/images/supported_brands/verisure.png and b/source/images/supported_brands/verisure.png differ diff --git a/source/images/supported_brands/verizon.png b/source/images/supported_brands/verizon.png index c84464cf343..7f9151ae223 100644 Binary files a/source/images/supported_brands/verizon.png and b/source/images/supported_brands/verizon.png differ diff --git a/source/images/supported_brands/vesync.png b/source/images/supported_brands/vesync.png new file mode 100644 index 00000000000..2883881260d Binary files /dev/null and b/source/images/supported_brands/vesync.png differ diff --git a/source/images/supported_brands/videolan.png b/source/images/supported_brands/videolan.png index ab284313d67..e8deed0545a 100644 Binary files a/source/images/supported_brands/videolan.png and b/source/images/supported_brands/videolan.png differ diff --git a/source/images/supported_brands/view-dashboard.png b/source/images/supported_brands/view-dashboard.png index c8e420f6e25..265949149e4 100644 Binary files a/source/images/supported_brands/view-dashboard.png and b/source/images/supported_brands/view-dashboard.png differ diff --git a/source/images/supported_brands/vizio-smartcast.png b/source/images/supported_brands/vizio-smartcast.png index d48d972062f..ffcbc409326 100644 Binary files a/source/images/supported_brands/vizio-smartcast.png and b/source/images/supported_brands/vizio-smartcast.png differ diff --git a/source/images/supported_brands/voicerss.png b/source/images/supported_brands/voicerss.png index 9e54daab9b4..fd10708463a 100644 Binary files a/source/images/supported_brands/voicerss.png and b/source/images/supported_brands/voicerss.png differ diff --git a/source/images/supported_brands/volumio.png b/source/images/supported_brands/volumio.png index 1625ff0becb..359cb3924fa 100644 Binary files a/source/images/supported_brands/volumio.png and b/source/images/supported_brands/volumio.png differ diff --git a/source/images/supported_brands/volvo.png b/source/images/supported_brands/volvo.png index d5ade641ac9..c5c4703e10b 100644 Binary files a/source/images/supported_brands/volvo.png and b/source/images/supported_brands/volvo.png differ diff --git a/source/images/supported_brands/vultr.png b/source/images/supported_brands/vultr.png index 17c9f74aaa7..dc1ed45f41b 100644 Binary files a/source/images/supported_brands/vultr.png and b/source/images/supported_brands/vultr.png differ diff --git a/source/images/supported_brands/waqi.png b/source/images/supported_brands/waqi.png index 7b48ff52c44..eae4bd9f5dd 100644 Binary files a/source/images/supported_brands/waqi.png and b/source/images/supported_brands/waqi.png differ diff --git a/source/images/supported_brands/waterfurnace.png b/source/images/supported_brands/waterfurnace.png new file mode 100644 index 00000000000..c46a3097db0 Binary files /dev/null and b/source/images/supported_brands/waterfurnace.png differ diff --git a/source/images/supported_brands/waze.png b/source/images/supported_brands/waze.png new file mode 100644 index 00000000000..add78246a20 Binary files /dev/null and b/source/images/supported_brands/waze.png differ diff --git a/source/images/supported_brands/webos.png b/source/images/supported_brands/webos.png index 11c3685c87e..3615af5a80d 100644 Binary files a/source/images/supported_brands/webos.png and b/source/images/supported_brands/webos.png differ diff --git a/source/images/supported_brands/windows.png b/source/images/supported_brands/windows.png index 9ff997483bd..10a54fb0575 100644 Binary files a/source/images/supported_brands/windows.png and b/source/images/supported_brands/windows.png differ diff --git a/source/images/supported_brands/wink.png b/source/images/supported_brands/wink.png index a8ffdb232a9..232b6806ce0 100644 Binary files a/source/images/supported_brands/wink.png and b/source/images/supported_brands/wink.png differ diff --git a/source/images/supported_brands/wirelesstag.png b/source/images/supported_brands/wirelesstag.png new file mode 100644 index 00000000000..283b0a7e631 Binary files /dev/null and b/source/images/supported_brands/wirelesstag.png differ diff --git a/source/images/supported_brands/woonveilig.png b/source/images/supported_brands/woonveilig.png index 8d7e776c984..a466fa32806 100644 Binary files a/source/images/supported_brands/woonveilig.png and b/source/images/supported_brands/woonveilig.png differ diff --git a/source/images/supported_brands/worldtidesinfo.png b/source/images/supported_brands/worldtidesinfo.png index 5e49de79406..2663cbda3da 100644 Binary files a/source/images/supported_brands/worldtidesinfo.png and b/source/images/supported_brands/worldtidesinfo.png differ diff --git a/source/images/supported_brands/worx.png b/source/images/supported_brands/worx.png index dfc0f49da22..48f24b65be9 100644 Binary files a/source/images/supported_brands/worx.png and b/source/images/supported_brands/worx.png differ diff --git a/source/images/supported_brands/wsdot.png b/source/images/supported_brands/wsdot.png index bfe04f11388..044d14a1db6 100644 Binary files a/source/images/supported_brands/wsdot.png and b/source/images/supported_brands/wsdot.png differ diff --git a/source/images/supported_brands/wunderground.png b/source/images/supported_brands/wunderground.png index 02d1dddc53f..60c81eda856 100644 Binary files a/source/images/supported_brands/wunderground.png and b/source/images/supported_brands/wunderground.png differ diff --git a/source/images/supported_brands/xbox-live.png b/source/images/supported_brands/xbox-live.png index 2d930dc3765..efc4d83ff17 100644 Binary files a/source/images/supported_brands/xbox-live.png and b/source/images/supported_brands/xbox-live.png differ diff --git a/source/images/supported_brands/xeoma.png b/source/images/supported_brands/xeoma.png new file mode 100644 index 00000000000..0cfa62d28f1 Binary files /dev/null and b/source/images/supported_brands/xeoma.png differ diff --git a/source/images/supported_brands/xiaomi.png b/source/images/supported_brands/xiaomi.png index 167b1419a01..0bda458c7fd 100644 Binary files a/source/images/supported_brands/xiaomi.png and b/source/images/supported_brands/xiaomi.png differ diff --git a/source/images/supported_brands/xmpp.png b/source/images/supported_brands/xmpp.png index 102a945639c..92ad996865d 100644 Binary files a/source/images/supported_brands/xmpp.png and b/source/images/supported_brands/xmpp.png differ diff --git a/source/images/supported_brands/yahoo_finance.png b/source/images/supported_brands/yahoo_finance.png index 41a60c547be..3f8500737de 100644 Binary files a/source/images/supported_brands/yahoo_finance.png and b/source/images/supported_brands/yahoo_finance.png differ diff --git a/source/images/supported_brands/yahooweather.png b/source/images/supported_brands/yahooweather.png index 4b275368f00..4cdb1cc572d 100644 Binary files a/source/images/supported_brands/yahooweather.png and b/source/images/supported_brands/yahooweather.png differ diff --git a/source/images/supported_brands/yamaha.png b/source/images/supported_brands/yamaha.png index f9682281025..cdccba9318b 100644 Binary files a/source/images/supported_brands/yamaha.png and b/source/images/supported_brands/yamaha.png differ diff --git a/source/images/supported_brands/yandex.png b/source/images/supported_brands/yandex.png index e1160dad73d..4e1fca5c352 100644 Binary files a/source/images/supported_brands/yandex.png and b/source/images/supported_brands/yandex.png differ diff --git a/source/images/supported_brands/yeelight.png b/source/images/supported_brands/yeelight.png index 32036cce6d0..0f1fe142a33 100644 Binary files a/source/images/supported_brands/yeelight.png and b/source/images/supported_brands/yeelight.png differ diff --git a/source/images/supported_brands/yesssat.png b/source/images/supported_brands/yesssat.png index 4e44694bd34..14caa0e79d3 100644 Binary files a/source/images/supported_brands/yesssat.png and b/source/images/supported_brands/yesssat.png differ diff --git a/source/images/supported_brands/yi.png b/source/images/supported_brands/yi.png index 06f02bc9b09..314528e3796 100644 Binary files a/source/images/supported_brands/yi.png and b/source/images/supported_brands/yi.png differ diff --git a/source/images/supported_brands/yr.png b/source/images/supported_brands/yr.png index fba7173b3db..cd8e028d273 100644 Binary files a/source/images/supported_brands/yr.png and b/source/images/supported_brands/yr.png differ diff --git a/source/images/supported_brands/z-wave.png b/source/images/supported_brands/z-wave.png index 3abd5ee7f15..0b1075ab69a 100644 Binary files a/source/images/supported_brands/z-wave.png and b/source/images/supported_brands/z-wave.png differ diff --git a/source/images/supported_brands/zabbix.png b/source/images/supported_brands/zabbix.png index de8c6324aee..42df4d6cfb7 100644 Binary files a/source/images/supported_brands/zabbix.png and b/source/images/supported_brands/zabbix.png differ diff --git a/source/images/supported_brands/zamg.png b/source/images/supported_brands/zamg.png index 181a7bf877a..edcec5dcc59 100644 Binary files a/source/images/supported_brands/zamg.png and b/source/images/supported_brands/zamg.png differ diff --git a/source/images/supported_brands/zehnder.png b/source/images/supported_brands/zehnder.png index 27dab1c4d31..2324f91c532 100644 Binary files a/source/images/supported_brands/zehnder.png and b/source/images/supported_brands/zehnder.png differ diff --git a/source/images/supported_brands/zengge.png b/source/images/supported_brands/zengge.png index 3cec99c9319..a3ddf759298 100644 Binary files a/source/images/supported_brands/zengge.png and b/source/images/supported_brands/zengge.png differ diff --git a/source/images/supported_brands/zhong_hong.png b/source/images/supported_brands/zhong_hong.png new file mode 100644 index 00000000000..f1a4d1bb99f Binary files /dev/null and b/source/images/supported_brands/zhong_hong.png differ diff --git a/source/images/supported_brands/zigbee.png b/source/images/supported_brands/zigbee.png index e547e71b1dd..d91383457c4 100644 Binary files a/source/images/supported_brands/zigbee.png and b/source/images/supported_brands/zigbee.png differ diff --git a/source/images/supported_brands/ziggo.png b/source/images/supported_brands/ziggo.png new file mode 100644 index 00000000000..950ae08b058 Binary files /dev/null and b/source/images/supported_brands/ziggo.png differ diff --git a/source/images/supported_brands/zillow.png b/source/images/supported_brands/zillow.png new file mode 100644 index 00000000000..1235a1acbe6 Binary files /dev/null and b/source/images/supported_brands/zillow.png differ diff --git a/source/images/supported_brands/zoneminder.png b/source/images/supported_brands/zoneminder.png index 7e8e234bde8..f2204c73378 100644 Binary files a/source/images/supported_brands/zoneminder.png and b/source/images/supported_brands/zoneminder.png differ diff --git a/source/index.html b/source/index.html index 63e1dde1083..263f991553a 100644 --- a/source/index.html +++ b/source/index.html @@ -11,8 +11,6 @@ hide_github_edit: true description: Open-source home automation platform running on Python 3. Track and control all devices at home and automate control. Installation in less than a minute. --- -{% assign recent_release_post = site.categories['Release-Notes'].first %} -
@@ -30,7 +28,23 @@ description: Open-source home automation platform running on Python 3. Track and +
+
+

Alexa, turn on the lights

+ Use Alexa to control Home Assistant. + + +
+
+

Ok Google, turn on the AC

+ Use Google Assistant to control Home Assistant. + +
@@ -119,9 +133,11 @@ description: Open-source home automation platform running on Python 3. Track and Wired.com logo OpenSource.com logo - + Linux Magazine logo + Ct logo +
diff --git a/source/join-chat/index.html b/source/join-chat/index.html new file mode 100644 index 00000000000..662157a609e --- /dev/null +++ b/source/join-chat/index.html @@ -0,0 +1,3 @@ + \ No newline at end of file diff --git a/source/latest-release-notes/index.html b/source/latest-release-notes/index.html new file mode 100644 index 00000000000..743b5160158 --- /dev/null +++ b/source/latest-release-notes/index.html @@ -0,0 +1,8 @@ +--- +--- + +{% assign recent_release_post = site.categories['Release-Notes'].first %} + + diff --git a/source/lovelace/changelog.markdown b/source/lovelace/changelog.markdown new file mode 100644 index 00000000000..729242721c2 --- /dev/null +++ b/source/lovelace/changelog.markdown @@ -0,0 +1,150 @@ +--- +layout: page +title: "Lovelace Changelog" +description: "Changelog of the Lovelace UI." +date: 2018-07-01 10:28 +00:00 +sidebar: true +comments: false +sharing: true +footer: true +--- + +## {% linkable_title Changes in 0.74.0 %} +- ❤️ [Lovelace card gallery](https://home-assistant-lovelace-gallery.netlify.com/) +- 🔧 Async communication improvements + +### Views +- 📣 Allow views with badges and no cards + +### Cards +- 📣 [picture elements card]: Allow custom elements including custom cards +- 📣 [entities card]: Separate row entity elements, and add `secondary_info` ❤️ +- 📣 [glance card]: Make column width configurable +- 🔧 [picture glance card]: Use custom off states +- 🔧 [picture glance card]: Fixed to work again with [entity filter card] +- 🔧 Removed `text-transform: capitalize;` from card heading + +## {% linkable_title Changes in 0.74.0b0 %} + +### Views +- Add basic support for `badges` like in old view style +- Custom cards now work with `panel: true` + +### Cards +- 📣 [glance card]: Entity `tap_action` can now be `toggle` and `turn-on` besides the default of showing the more info dialog +- 📣 [glance card]: Support added to hide `name` or `state` +- 📣 [history graph card]: Support added to override entity names +- 📣 [picture glance card]: Support added to open the more info dialog for cameras and media players. +- 📣 [picture elements card]: Support new element type `image` +- 📣 [picture elements card]: Support new element type `service-icon` +- 🔧 [entity filter card]: Fix edge cases that could make it crash ([supports this new use case](https://github.com/home-assistant/ui-schema/issues/82)) +- 🔧 [picture glance card]: Fix crash when the state of entity was unavailable + +## {% linkable_title Changes in 0.73.1 %} + +- Setting Lovelace as default now updates `Overview` button to point to `/lovelace` +- Allow setting background styles (global and per view) + +### Cards + +- 📣 New card: `map` that allows showing `device_tracker` entities on a map card +- 📣 `entities` card now support `type: custom:state-card-custom` for the entities list + +## {% linkable_title Changes in 0.73.0 %} + +### Views + +- 📣 New button to show unused entities in Lovelace + +## {% linkable_title Changes in 0.73.0b5 %} + +- 🏁 Only minor fixes in this release + +## {% linkable_title Changes in 0.73.0b4 %} + +### Cards + +- 📣 `picture-entity` allow hiding of infobar using `show_info: false` +- 📣 `picture-entity` now supports `tap_action` parameter allowing you to switch from `on`/`off` to `more-info-dialog` +- 📣 `picture-glance` now supports `navigation_path` +- `picture-entity` renamed `title` to `name` +- `picture-elements` renamed `path` to `navigation_path` +- ‼️ `camera-preview` card removed, features added to `picture-entity` and `picture-glance` + +## {% linkable_title Changes in 0.73.0b3 %} + +### Views + +- 📣 Added panel mode for a view to use the 1st card to fill the whole screen + +### Cards + +- 📣 New card: `picture` for triggering navigation and services +- 📣 `picture-elements` now supports `navigation` type +- 📣 `picture-entity` now supports `camera_image` +- 📣 `picture-glance` now supports `camera_image` +- 📣 `picture-glance` now supports `state_image` and `entity` like `picture-entity` +- 📣 `entity-filter` now supports custom name for entities like `glance` and `entities` +- `entities` and `glance` custom titles now use `name` not `title` +- `entity-filter` now uses `entities` as a static list to filter state against +- `entity-filter` uses `state_filter` array instead of `filter` object +- 🔧 Fix wrapping and padding for `service-button` in `picture-elements` +- ‼️ `entity-filter` no longer allows to show all entities or a full domain + +## {% linkable_title Changes in 0.73.0b2 %} + +- :zap: Went by too fast :zap: + +## {% linkable_title Changes in 0.73.0b1 %} + +### Cards + +- `column` renamed to `vertical-stack` +- `row` renamed to `horizontal-stack` +- `picture-elements` new `state-badge` using `ha-state-label-badge` +- `picture-elements` renamed `state-badge` to `state-icon` +- `picture-elements` renamed `state-text` to `state-label` +- `picture-elements` moved/renamed `service.data` to `service_data` +- `picture-elements` combined `service.domain` and `service.server` into `service` +- 📣 `entities` allow custom title just like `glance` +- 📣 `entity-filter` allow auto-hide if empty using `show_empty: false` +- 🔧 Fix card size calculation `horizontal-stack`/`vertical-stack` + +## {% linkable_title Changes in 0.73.0b0 %} + +- 📣 New feature to allow Lovelace to be default for `/` + +### Views + +- 📣 Now views have deep-links: `/lovelace/3` will link to the tab with id `3` +- `name` renamed `title` to match cards setup +- `tab_icon` renamed `icon` for simplicity + +### Cards + +- 📣 New card: `picture-elements` +- 📣 New card: `column` +- 📣 New card: `row` +- 📣 `glance` allow custom title for entities - rename your entity only in this card +- 📣 `entities` toggle button in a header can now be hidden using `show_header_toggle: false` +- `entity-picture` renamed `picture-entity` to be consistent with `picture-glance` +- `entity-filter` removed `card_config` and made `card` property an object +- 🔧 Fix use of groups in `picture-entity` +- 🔧 Fix the title in `glance` to avoid overlapping + +## {% linkable_title Changes in 0.72.1 %} + +### Cards + +- 🐞 Bug introduced in `glance` card - titles now overlap +- 📣 New card: `iframe` + +## {% linkable_title Changes in 0.72 %} + +- Initial release of the Lovelace UI + +[glance card]: /lovelace/glance/ +[history graph card]: /lovelace/history-graph/ +[picture glance card]: /lovelace/picture-glance/ +[picture elements card]: /lovelace/picture-elements/ +[entity filter card]: /lovelace/entity-filter/ diff --git a/source/lovelace/index.markdown b/source/lovelace/index.markdown new file mode 100644 index 00000000000..a78abb9fc3a --- /dev/null +++ b/source/lovelace/index.markdown @@ -0,0 +1,143 @@ +--- +layout: page +title: "Lovelace UI" +description: "The Lovelace UI is a powerful and configurable interface for Home Assistant." +date: 2018-07-01 10:28 +00:00 +sidebar: true +comments: false +sharing: true +footer: true +--- + +

+This is an experimental feature. Configuration might change in future versions. +

+ +Starting with Home Assistant 0.72, we're experimenting with a new way of defining your interface. We're calling it the Lovelace UI. + +The Lovelace UI is: + +- **Extremely fast**. We create the user interface when the UI configuration changes. When a state changes, we just make the UI represent the current state. +- **Extremely customizable**. We have a new file for just configuration. In the past, we declined UI specific options because they did not fit in the state machine. They will fit in a configuration file for a user interface. +- **Extremely extensible**. It's based on the web standard [custom elements](https://developer.mozilla.org/en-US/docs/Web/Web_Components/Using_custom_elements). Don't like the built-in cards? Make your own! Custom cards are treated the same as built-in cards and are configured the same way. [Check the docs.](https://developers.home-assistant.io/docs/en/lovelace_custom_card.html) +- **Making the backend faster**. With Lovelace, the backend will no longer need to maintain entities like groups for the sole purpose of showing them on the frontend. + +
+ +
+ +## {% linkable_title How it works %} + +The old user interface relied solely on the state machine. This caused trouble as it meant that the state machine was now not only the source for device states, but also for user interface configuration. With Lovelace, we're taking a completely different approach. All user interface configuration will live in a separate file, controlled by the user. + +

+Diagram showing how states no longer contain UI configuration. +Visual comparison of old configuration versus new configuration +

+ + + +## {% linkable_title Trying it out %} + +Create a new file `/ui-lovelace.yaml` and add the following content. Adjust the entity names to entities that exist in your Home Assistant installation. + +```yaml +title: My Awesome Home +# Include external resources +resources: + - url: /local/my-custom-card.js + type: js + - url: /local/my-webfont.css + type: css + +# Optional background for all views. Check https://developer.mozilla.org/en-US/docs/Web/CSS/background for more examples. +background: center / cover no-repeat url("/background.png") fixed +# Exclude entities from "Unused entities" view +excluded_entities: + - weblink.router +views: + # View tab title. + - title: Example + # Optional unique id for direct access /lovelace/${id} + id: example + # Optional background (overwrites the global background). + background: radial-gradient(crimson, skyblue) + # Each view can have a different theme applied. Theme should be defined in the frontend. + theme: dark-mode + # The cards to show on this view. + cards: + # The filter card will filter entities for their state + - type: entity-filter + entities: + - device_tracker.paulus + - device_tracker.anne_there + state_filter: + - 'home' + card: + type: glance + title: People that are home + + # The picture entity card will represent an entity with a picture + - type: picture-entity + image: https://www.home-assistant.io/images/default-social.png + entity: light.bed_light + + # Specify a tab icon if you want the view tab to be an icon. + - icon: mdi:home-assistant + # Title of the view. Will be used as the tooltip for tab icon + title: Second view + cards: + # Entities card will take a list of entities and show their state. + - type: entities + # Title of the entities card + title: Example + # The entities here will be shown in the same order as specified. + # Each entry is an entity ID or a map with extra options. + entities: + - light.kitchen + - switch.ac + - entity: light.living_room + # Override the name to use + name: LR Lights + + # The markdown card will render markdown text. + - type: markdown + title: Lovelace + content: > + Welcome to your **Lovelace UI**. +``` + +Now restart Home Assistant, navigate to `/lovelace`. When you make changes to `ui-lovelace.yaml`, you don't have to restart Home Assistant or refresh the page. Just hit the refresh button at the top of the UI. + +## {% linkable_title Setting Lovelace as the Default UI %} +Once you are ready to start using Lovelace UI as your main user interface, click on info, the "i" icon under 'Developer Tools" in the home assistant side-bar. Next, locate >>Set lovelace as default page on this device<< under the home assistant version information and click it. + +Note that this is a per-device setting and will need to be changed on each device you access the UI from. + +## {% linkable_title Custom Cards %} + +It is possible to add your own custom cards to show up in the Lovelace UI. For more information, check [the developer docs](https://developers.home-assistant.io/docs/en/lovelace_custom_card.html). + +## {% linkable_title Current limitations %} + +This is the very very early version aimed at gathering feedback. Discussion and suggestions are welcome in the [ui-schema repository](https://github.com/home-assistant/ui-schema) and in the [chat](/join-chat/) in #lovelace. + +## {% linkable_title FAQ %} + +### I am running Firefox but, custom cards like gauge-card look bad or don't load at all. How do I fix this? + +This is probably because your version of Firefox doesn't have custom components supported or enabled. Please set to `true` in your `about:config` the following settings: `dom.webcomponents.customelements.enabled` and `dom.webcomponents.shadowdom.enabled` + +### Custom components don't load on my IOS device? + +This is because for IOS devices by default javascript served is `es5`. You can allow custom components to load by forcing `javascript_version: latest` in your `configuration.yaml` under `frontend:`. + +> Note: Enabling `latest` on IOS could cause automation and script editor to crash. + +### I would like to add an image to my card, but I do not know where to put them. + +Given examples refer to `/local/example_image.jpg`. That means you should have `www` directory next to your HA `configuration.yaml`. An image kept in `HA_configuration_dir/www/example_image.jpg` will be shown after refreshing Lovelace page. + +> Note: Remember to restart Home Assistant right after creating `www` directory. Otherwise, HA will not know that you created this directory. diff --git a/source/lovelace/tips.markdown b/source/lovelace/tips.markdown new file mode 100644 index 00000000000..32ea7b697f4 --- /dev/null +++ b/source/lovelace/tips.markdown @@ -0,0 +1,63 @@ +--- +layout: page +title: "Lovelace Tips and Tricks" +description: "Helpful tips and tricks for using the Lovelace UI in Home Assistant." +date: 2018-07-23 21:57 +00:00 +sidebar: true +comments: false +sharing: true +footer: true +--- + +The Lovelace UI is a very powerful UI. Here are a few tips and tricks that +might help you when working with Lovelace. + +*Have a tip or trick of your own? Click the "Edit this page on GitHub" at the +top of this page to share it with everyone!* + +## {% linkable_title Tools %} + +We have some amazing users that have created various tools to help you get +started with Lovelace. + +### {% linkable_title Lovelace Migration Script %} + +The [Lovelace Migration Script][migration-script] by [@dale3h] converts your +current "old UI" configuration to the new Lovelace format. The idea behind +this tool is to help give you something to start playing with right away. + +### {% linkable_title Lovelace Config Generator %} + +The [Lovelace Config Generator][config-generator] by [@thomasloven] provides +you with the ability to split your Lovelace configuration into multiple files. + +

+ Split configuration is currently possible directly in Lovelace, but it + is expected to be removed in the near future due to fact that Home Assistant + will be writing directly to the `ui-lovelace.yaml` file. +

+ +## {% linkable_title Tips and Tricks %} + +### {% linkable_title Header Using Panel and Stacks %} + +You can create a header by using `panel: true` with nested +[Vertical Stack][vertical-stack] and [Horizontal Stack][horizontal-stack] +cards. See the code [here][header-stacks]. ([@dale3h]) + +### {% linkable_title Disable Click on Elements %} + +If you do not want an element to be clickable you can add `pointer-events: none` +to the element's `style:` configuration. This is quite useful when building a +[Picture Elements][picture-elements] card that will be viewed mostly in a +mobile browser. (@Toast) + +[@dale3h]: https://github.com/dale3h +[@thomasloven]: https://github.com/thomasloven + +[config-generator]: https://github.com/thomasloven/homeassistant-lovelace-gen +[header-stacks]: https://gist.github.com/dale3h/37b34aebb0c336ffd5fb877c2651097a +[horizontal-stack]: /lovelace/horizontal-stack/ +[migration-script]: https://github.com/dale3h/python-lovelace +[picture-elements]: /lovelace/picture-elements/ +[vertical-stack]: /lovelace/vertical-stack/ diff --git a/source/lovelace/views.markdown b/source/lovelace/views.markdown new file mode 100644 index 00000000000..e25c77b39a4 --- /dev/null +++ b/source/lovelace/views.markdown @@ -0,0 +1,130 @@ +--- +layout: page +title: "Views" +description: "The Lovelace UI is a powerful and configurable interface for Home Assistant." +date: 2018-07-01 10:28 +00:00 +sidebar: true +comments: false +sharing: true +footer: true +--- + +To display cards on the UI you have to define them in views. Views sort cards in columns based on their `card size`. If you want to group some cards you have to use `stack` cards. + +

+ Views toolbar + Use titles and icons to describe the content of views. +

+ +{% configuration views %} +views: + required: true + description: A list of view configurations. + type: list + keys: + title: + required: true + description: The title or name. + type: string + badges: + required: false + description: List of entities IDs to display as badge. + type: list + cards: + required: false + description: Cards to display in this view. + type: list + id: + required: false + description: IDs are used in the URL, more info below. + type: string + default: view index + icon: + required: false + description: Icon-name from Material Design Icons. + type: string + panel: + required: false + description: Renders the view in panel mode, more info below. + type: boolean + default: "false" + background: + required: false + description: Style the background using CSS, more info below. + type: string + theme: + required: false + description: Themes view and cards, more info below. + type: string +{% endconfiguration %} + +## {% linkable_title IDs %} + +You can link to one view from another view by its ID. For this use cards that support navigation (`navigation_path`). Do not use special characters in IDs. + +### {% linkable_title Example %} + +View config: + +```yaml +- title: Living room + # the final path is /lovelace/living_room + id: living_room +``` + +Picture card config: + +```yaml +- type: picture + image: /local/living_room.png + navigation_path: /lovelace/living_room +``` + +## {% linkable_title Icons %} + +If you define an icon the title will be used as a tooltip. + +### {% linkable_title Example %} + +```yaml +- title: Garden + icon: mdi:flower +``` + +## {% linkable_title Panel mode %} + +This renders the first card on full width, other cards in this view will not be rendered. Good for cards like `map`, `stack` or `picture-elements`. + +### {% linkable_title Example %} + +```yaml +- title: Map + panel: true + cards: + - type: map + entities: + - device_tracker.demo_paulus + - zone.home +``` + +## {% linkable_title Background %} + +Style the background of views using [CSS](https://en.wikipedia.org/wiki/Cascading_Style_Sheets). For wallpapers you probably want to use the example below, more options can be found [here](https://developer.mozilla.org/en-US/docs/Web/CSS/background). + +### {% linkable_title Example %} + +```yaml +- title: Living room + background: center / cover no-repeat url("/local/background.png") fixed +``` + +## {% linkable_title Themes %} + +Set a separate [theme](/components/frontend/#themes) for the view and its cards. + +### {% linkable_title Example %} + +```yaml +- title: Home + theme: happy +``` diff --git a/source/privacy/index.markdown b/source/privacy/index.markdown index fc63d2812bb..706b1e67c8e 100644 --- a/source/privacy/index.markdown +++ b/source/privacy/index.markdown @@ -11,45 +11,55 @@ footer: true Your privacy is critically important to us. At Home Assistant, we have a few fundamental principles: - - We don’t ask you for personal information unless we truly need it. (We can’t stand services that ask you for things like your gender or income level for no apparent reason.) - - We don’t share your personal information with anyone except to comply with the law, develop our products, or protect our rights. - - We don’t store personal information on our servers unless required for the ongoing operation of one of our services. +- We don’t ask you for personal information unless we truly need it. (We can’t stand services that ask you for things like your gender or income level for no apparent reason.) +- We don’t share your personal information with anyone except to comply with the law, develop our products, or protect our rights. +- We don’t store personal information on our servers unless required for the ongoing operation of one of our services. If you have questions about deleting or correcting your personal data please contact our support team. ## {% linkable_title Website Visitors %} + Like most website operators, Home Assistant collects non-personally-identifying information of the sort that web browsers and servers typically make available, such as the browser type, language preference, referring site, and the date and time of each visitor request. Home Assistant’s purpose in collecting non-personally identifying information is to better understand how Home Assistant’s visitors use its website. From time to time, Home Assistant may release non-personally-identifying information in the aggregate, e.g., by publishing a report on trends in the usage of its website. Home Assistant also collects potentially personally-identifying information like Internet Protocol (IP) addresses for logged in users and for users leaving comments on the blog or forums. Home Assistant only discloses logged in user and commenter IP addresses under the same circumstances that it uses and discloses personally-identifying information as described below. ## {% linkable_title Gathering of Personally-Identifying Information %} + Certain visitors to Home Assistant’s websites choose to interact with Home Assistant in ways that require Home Assistant to gather personally-identifying information. The amount and type of information that Home Assistant gathers depends on the nature of the interaction. For example, we ask visitors who create a forum account to provide a username and an email address. Those who engage in transactions with Home Assistant are asked to provide additional information, including as necessary the personal and financial information required to process those transactions. In each case, Home Assistant collects such information only insofar as is necessary or appropriate to fulfill the purpose of the visitor’s interaction with Home Assistant. Home Assistant does not disclose personally-identifying information other than as described below. And visitors can always refuse to supply personally-identifying information, with the caveat that it may prevent them from engaging in certain website-related activities. ## {% linkable_title Aggregated Statistics %} + Home Assistant may collect statistics about the behavior of visitors to its websites. For instance, Home Assistant may monitor the most popular component documentation. Home Assistant may display this information publicly or provide it to others. However, Home Assistant does not disclose personally-identifying information other than as described below. ## {% linkable_title Information We Collect from Other Sources %} + With your authorization, we may also obtain information about you from other sources. For example, if you create or log into your WordPress.com account through a social media service (like Facebook or Google) or if you connect your account to a social media service, we will receive information from that service (such as your username, basic profile information, and friends list) via the authorization procedures used by that service. The information we receive depends on which services you authorize and any options that are available. ## {% linkable_title Protection of Certain Personally-Identifying Information %} + Home Assistant discloses potentially personally-identifying and personally-identifying information only to those of its employees, contractors and affiliated organizations that (i) need to know that information in order to process it on Home Assistant’s behalf or to provide services available at Home Assistant’s websites, and (ii) that have agreed not to disclose it to others. Some of those employees, contractors and affiliated organizations may be located outside of your home country; by using Home Assistant’s websites, you consent to the transfer of such information to them. Home Assistant will not rent or sell potentially personally-identifying and personally-identifying information to anyone. Other than to its employees, contractors and affiliated organizations, as described above, Home Assistant discloses potentially personally-identifying and personally-identifying information only in response to a subpoena, court order or other governmental request, or when Home Assistant believes in good faith that disclosure is reasonably necessary to protect the property or rights of Home Assistant, third parties or the public at large. If you are a registered user of an Home Assistant website and have supplied your email address, Home Assistant may occasionally send you an email to tell you about new features, solicit your feedback, or just keep you up to date with what’s going on with Home Assistant and our products. We primarily use our various product blogs to communicate this type of information, so we expect to keep this type of email to a minimum. If you send us a request (for example via a support email or via one of our feedback mechanisms), we reserve the right to publish it in order to help us clarify or respond to your request or to help us support other users. Home Assistant takes all measures reasonably necessary to protect against the unauthorized access, use, alteration or destruction of potentially personally-identifying and personally-identifying information. ## {% linkable_title Cookies %} + A cookie is a string of information that a website stores on a visitor’s computer, and that the visitor’s browser provides to the website each time the visitor returns. Home Assistant uses cookies to help Home Assistant identify and track visitors, their usage of Home Assistant website, and their website access preferences. Home Assistant visitors who do not wish to have cookies placed on their computers should set their browsers to refuse cookies before using Home Assistant’s websites, with the drawback that certain features of Home Assistant’s websites may not function properly without the aid of cookies. ## {% linkable_title Business Transfers %} + If Home Assistant, or substantially all of its assets, were acquired, or in the unlikely event that Home Assistant goes out of business or enters bankruptcy, user information would be one of the assets that is transferred or acquired by a third party. You acknowledge that such transfers may occur, and that any acquirer of Home Assistant may continue to use your personal information as set forth in this policy. ## {% linkable_title Ads %} + Ads appearing on any of our websites may be delivered to users by advertising partners, who may set cookies. These cookies allow the ad server to recognize your computer each time they send you an online advertisement to compile information about you or others who use your computer. This information allows ad networks to, among other things, deliver targeted advertisements that they believe will be of most interest to you. This Privacy Policy covers the use of cookies by Home Assistant and does not cover the use of cookies by any advertisers. ## {% linkable_title Privacy Policy Changes %} + Although most changes are likely to be minor, Home Assistant may change its Privacy Policy from time to time, and in Home Assistant’s sole discretion. Home Assistant encourages visitors to frequently check this page for any changes to its Privacy Policy. Your continued use of this site after any change in this Privacy Policy will constitute your acceptance of such change. ### {% linkable_title Change log %} - - October 19, 2017: Initial version + +- October 19, 2017: Initial version _This privacy policy has been adapted from the [Automattic privacy policy][Home Assistant] and is licensed [Creative Commons ShareAlike][cc]._ [Home Assistant]: https://automattic.com/privacy/ -[cc]: https://creativecommons.org/licenses/by-sa/4.0/ \ No newline at end of file +[cc]: https://creativecommons.org/licenses/by-sa/4.0/ diff --git a/source/tos/index.markdown b/source/tos/index.markdown index cadd9cd4421..199e220d694 100644 --- a/source/tos/index.markdown +++ b/source/tos/index.markdown @@ -21,21 +21,20 @@ If you create an account on the Website, you are responsible for maintaining the If you post material to the Website, post links on the Website, or otherwise make (or allow any third party to make) material available by means of the Website (any such material, "Content"), You are entirely responsible for the content of, and any harm resulting from, that Content. That is the case regardless of whether the Content in question constitutes text, graphics, an audio file, or computer software. By making Content available, you represent and warrant that: -* the downloading, copying and use of the Content will not infringe the proprietary rights, including but not limited to the copyright, patent, trademark or trade secret rights, of any third party; -* if your employer has rights to intellectual property you create, you have either (i) received permission from your employer to post or make available the Content, including but not limited to any software, or (ii) secured from your employer a waiver as to all rights in or to the Content; -* you have fully complied with any third-party licenses relating to the Content, and have done all things necessary to successfully pass through to end users any required terms; -* the Content does not contain or install any viruses, worms, malware, Trojan horses or other harmful or destructive content; -* the Content is not spam, is not machine- or randomly-generated, and does not contain unethical or unwanted commercial content designed to drive traffic to third party sites or boost the search engine rankings of third party sites, or to further unlawful acts (such as phishing) or mislead recipients as to the source of the material (such as spoofing); -* the Content is not pornographic, does not contain threats or incite violence, and does not violate the privacy or publicity rights of any third party; -* your content is not getting advertised via unwanted electronic messages such as spam links on newsgroups, email lists, blogs and web sites, and similar unsolicited promotional methods; -* your content is not named in a manner that misleads your readers into thinking that you are another person or company; and -* you have, in the case of Content that includes computer code, accurately categorized and/or described the type, nature, uses and effects of the materials, whether requested to do so by Home Assistant or otherwise. +* the downloading, copying and use of the Content will not infringe the proprietary rights, including but not limited to the copyright, patent, trademark or trade secret rights, of any third party; +* if your employer has rights to intellectual property you create, you have either (i) received permission from your employer to post or make available the Content, including but not limited to any software, or (ii) secured from your employer a waiver as to all rights in or to the Content; +* you have fully complied with any third-party licenses relating to the Content, and have done all things necessary to successfully pass through to end users any required terms; +* the Content does not contain or install any viruses, worms, malware, Trojan horses or other harmful or destructive content; +* the Content is not spam, is not machine- or randomly-generated, and does not contain unethical or unwanted commercial content designed to drive traffic to third party sites or boost the search engine rankings of third party sites, or to further unlawful acts (such as phishing) or mislead recipients as to the source of the material (such as spoofing); +* the Content is not pornographic, does not contain threats or incite violence, and does not violate the privacy or publicity rights of any third party; +* your content is not getting advertised via unwanted electronic messages such as spam links on newsgroups, email lists, blogs and web sites, and similar unsolicited promotional methods; +* your content is not named in a manner that misleads your readers into thinking that you are another person or company; and +* you have, in the case of Content that includes computer code, accurately categorized and/or described the type, nature, uses and effects of the materials, whether requested to do so by Home Assistant or otherwise. ## {% linkable_title 3. User Content License %} User contributions are licensed under a [Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License](http://creativecommons.org/licenses/by-nc-sa/3.0/deed.en_US). Without limiting any of those representations or warranties, Home Assistant has the right (though not the obligation) to, in Home Assistant’s sole discretion (i) refuse or remove any content that, in Home Assistant’s reasonable opinion, violates any Home Assistant policy or is in any way harmful or objectionable, or (ii) terminate or deny access to and use of the Website to any individual or entity for any reason, in Home Assistant’s sole discretion. Home Assistant will have no obligation to provide a refund of any amounts previously paid. - ## {% linkable_title 4. Payment and Renewal %} ### General Terms