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/.themes/classic/source/assets/jwplayer/glow/controlbar/background.png b/.themes/classic/source/assets/jwplayer/glow/controlbar/background.png index c2824cc432c..e932cb09a99 100644 Binary files a/.themes/classic/source/assets/jwplayer/glow/controlbar/background.png and b/.themes/classic/source/assets/jwplayer/glow/controlbar/background.png differ diff --git a/.themes/classic/source/assets/jwplayer/glow/controlbar/divider.png b/.themes/classic/source/assets/jwplayer/glow/controlbar/divider.png index 77cd829a4b5..021685f4b0a 100644 Binary files a/.themes/classic/source/assets/jwplayer/glow/controlbar/divider.png and b/.themes/classic/source/assets/jwplayer/glow/controlbar/divider.png differ diff --git a/.themes/classic/source/assets/jwplayer/glow/controlbar/fullscreenButton.png b/.themes/classic/source/assets/jwplayer/glow/controlbar/fullscreenButton.png index e06aa50ca29..9d3291e8e59 100644 Binary files a/.themes/classic/source/assets/jwplayer/glow/controlbar/fullscreenButton.png and b/.themes/classic/source/assets/jwplayer/glow/controlbar/fullscreenButton.png differ diff --git a/.themes/classic/source/assets/jwplayer/glow/controlbar/fullscreenButtonOver.png b/.themes/classic/source/assets/jwplayer/glow/controlbar/fullscreenButtonOver.png index d2bc4fc75a8..ef55acc7ca4 100644 Binary files a/.themes/classic/source/assets/jwplayer/glow/controlbar/fullscreenButtonOver.png and b/.themes/classic/source/assets/jwplayer/glow/controlbar/fullscreenButtonOver.png differ diff --git a/.themes/classic/source/assets/jwplayer/glow/controlbar/muteButtonOver.png b/.themes/classic/source/assets/jwplayer/glow/controlbar/muteButtonOver.png index 96fe7bb0242..091cc054a2a 100644 Binary files a/.themes/classic/source/assets/jwplayer/glow/controlbar/muteButtonOver.png and b/.themes/classic/source/assets/jwplayer/glow/controlbar/muteButtonOver.png differ diff --git a/.themes/classic/source/assets/jwplayer/glow/controlbar/normalscreenButton.png b/.themes/classic/source/assets/jwplayer/glow/controlbar/normalscreenButton.png index 22295074029..f7c23cd5ba1 100644 Binary files a/.themes/classic/source/assets/jwplayer/glow/controlbar/normalscreenButton.png and b/.themes/classic/source/assets/jwplayer/glow/controlbar/normalscreenButton.png differ diff --git a/.themes/classic/source/assets/jwplayer/glow/controlbar/normalscreenButtonOver.png b/.themes/classic/source/assets/jwplayer/glow/controlbar/normalscreenButtonOver.png index 15db44d4e66..1f6aebd73ae 100644 Binary files a/.themes/classic/source/assets/jwplayer/glow/controlbar/normalscreenButtonOver.png and b/.themes/classic/source/assets/jwplayer/glow/controlbar/normalscreenButtonOver.png differ diff --git a/.themes/classic/source/assets/jwplayer/glow/controlbar/pauseButton.png b/.themes/classic/source/assets/jwplayer/glow/controlbar/pauseButton.png index e399bf34cb9..e6ab8aa55a3 100644 Binary files a/.themes/classic/source/assets/jwplayer/glow/controlbar/pauseButton.png and b/.themes/classic/source/assets/jwplayer/glow/controlbar/pauseButton.png differ diff --git a/.themes/classic/source/assets/jwplayer/glow/controlbar/pauseButtonOver.png b/.themes/classic/source/assets/jwplayer/glow/controlbar/pauseButtonOver.png index 409d89d29a3..8dcf0c5bfcc 100644 Binary files a/.themes/classic/source/assets/jwplayer/glow/controlbar/pauseButtonOver.png and b/.themes/classic/source/assets/jwplayer/glow/controlbar/pauseButtonOver.png differ diff --git a/.themes/classic/source/assets/jwplayer/glow/controlbar/playButtonOver.png b/.themes/classic/source/assets/jwplayer/glow/controlbar/playButtonOver.png index 3fe284845fa..6898116a3b7 100644 Binary files a/.themes/classic/source/assets/jwplayer/glow/controlbar/playButtonOver.png and b/.themes/classic/source/assets/jwplayer/glow/controlbar/playButtonOver.png differ diff --git a/.themes/classic/source/assets/jwplayer/glow/controlbar/timeSliderBuffer.png b/.themes/classic/source/assets/jwplayer/glow/controlbar/timeSliderBuffer.png index 73b371abbca..5e151d69c8c 100644 Binary files a/.themes/classic/source/assets/jwplayer/glow/controlbar/timeSliderBuffer.png and b/.themes/classic/source/assets/jwplayer/glow/controlbar/timeSliderBuffer.png differ diff --git a/.themes/classic/source/assets/jwplayer/glow/controlbar/timeSliderCapLeft.png b/.themes/classic/source/assets/jwplayer/glow/controlbar/timeSliderCapLeft.png index 72322171bd5..e89fc5c6afc 100644 Binary files a/.themes/classic/source/assets/jwplayer/glow/controlbar/timeSliderCapLeft.png and b/.themes/classic/source/assets/jwplayer/glow/controlbar/timeSliderCapLeft.png differ diff --git a/.themes/classic/source/assets/jwplayer/glow/controlbar/timeSliderCapRight.png b/.themes/classic/source/assets/jwplayer/glow/controlbar/timeSliderCapRight.png index 626444a66a7..ae47e9018b3 100644 Binary files a/.themes/classic/source/assets/jwplayer/glow/controlbar/timeSliderCapRight.png and b/.themes/classic/source/assets/jwplayer/glow/controlbar/timeSliderCapRight.png differ diff --git a/.themes/classic/source/assets/jwplayer/glow/controlbar/timeSliderRail.png b/.themes/classic/source/assets/jwplayer/glow/controlbar/timeSliderRail.png index 27851dfdf36..63692be0b75 100644 Binary files a/.themes/classic/source/assets/jwplayer/glow/controlbar/timeSliderRail.png and b/.themes/classic/source/assets/jwplayer/glow/controlbar/timeSliderRail.png differ diff --git a/.themes/classic/source/assets/jwplayer/glow/controlbar/unmuteButton.png b/.themes/classic/source/assets/jwplayer/glow/controlbar/unmuteButton.png index 3658453cfc1..6433b4d476a 100644 Binary files a/.themes/classic/source/assets/jwplayer/glow/controlbar/unmuteButton.png and b/.themes/classic/source/assets/jwplayer/glow/controlbar/unmuteButton.png differ diff --git a/.themes/classic/source/assets/jwplayer/glow/controlbar/unmuteButtonOver.png b/.themes/classic/source/assets/jwplayer/glow/controlbar/unmuteButtonOver.png index 138ebb35ba8..206be887e0a 100644 Binary files a/.themes/classic/source/assets/jwplayer/glow/controlbar/unmuteButtonOver.png and b/.themes/classic/source/assets/jwplayer/glow/controlbar/unmuteButtonOver.png differ diff --git a/.themes/classic/source/assets/jwplayer/glow/display/background.png b/.themes/classic/source/assets/jwplayer/glow/display/background.png index 391152f5e2f..eb7c709d39b 100644 Binary files a/.themes/classic/source/assets/jwplayer/glow/display/background.png and b/.themes/classic/source/assets/jwplayer/glow/display/background.png differ diff --git a/.themes/classic/source/assets/jwplayer/glow/display/bufferIcon.png b/.themes/classic/source/assets/jwplayer/glow/display/bufferIcon.png index a3819c1ef19..10ae39736ad 100644 Binary files a/.themes/classic/source/assets/jwplayer/glow/display/bufferIcon.png and b/.themes/classic/source/assets/jwplayer/glow/display/bufferIcon.png differ diff --git a/.themes/classic/source/assets/jwplayer/glow/display/muteIcon.png b/.themes/classic/source/assets/jwplayer/glow/display/muteIcon.png index e0408bbda5e..8e078ae4387 100644 Binary files a/.themes/classic/source/assets/jwplayer/glow/display/muteIcon.png and b/.themes/classic/source/assets/jwplayer/glow/display/muteIcon.png differ diff --git a/.themes/classic/source/assets/jwplayer/glow/display/playIcon.png b/.themes/classic/source/assets/jwplayer/glow/display/playIcon.png index cb384278722..269e4311bcb 100644 Binary files a/.themes/classic/source/assets/jwplayer/glow/display/playIcon.png and b/.themes/classic/source/assets/jwplayer/glow/display/playIcon.png differ diff --git a/.themes/classic/source/assets/jwplayer/glow/dock/button.png b/.themes/classic/source/assets/jwplayer/glow/dock/button.png index 391152f5e2f..eb7c709d39b 100644 Binary files a/.themes/classic/source/assets/jwplayer/glow/dock/button.png and b/.themes/classic/source/assets/jwplayer/glow/dock/button.png differ diff --git a/.themes/classic/source/assets/jwplayer/glow/playlist/item.png b/.themes/classic/source/assets/jwplayer/glow/playlist/item.png index 812592c3ce5..825911836fb 100644 Binary files a/.themes/classic/source/assets/jwplayer/glow/playlist/item.png and b/.themes/classic/source/assets/jwplayer/glow/playlist/item.png differ diff --git a/.themes/classic/source/assets/jwplayer/glow/playlist/itemOver.png b/.themes/classic/source/assets/jwplayer/glow/playlist/itemOver.png index 549f3721d6b..cbb7e34d85f 100644 Binary files a/.themes/classic/source/assets/jwplayer/glow/playlist/itemOver.png and b/.themes/classic/source/assets/jwplayer/glow/playlist/itemOver.png differ diff --git a/.themes/classic/source/assets/jwplayer/glow/playlist/sliderCapBottom.png b/.themes/classic/source/assets/jwplayer/glow/playlist/sliderCapBottom.png index 048cc623be9..61c6dfbbba0 100644 Binary files a/.themes/classic/source/assets/jwplayer/glow/playlist/sliderCapBottom.png and b/.themes/classic/source/assets/jwplayer/glow/playlist/sliderCapBottom.png differ diff --git a/.themes/classic/source/assets/jwplayer/glow/playlist/sliderCapTop.png b/.themes/classic/source/assets/jwplayer/glow/playlist/sliderCapTop.png index 65c463a0c04..4d6dae6290f 100644 Binary files a/.themes/classic/source/assets/jwplayer/glow/playlist/sliderCapTop.png and b/.themes/classic/source/assets/jwplayer/glow/playlist/sliderCapTop.png differ diff --git a/.themes/classic/source/assets/jwplayer/glow/playlist/sliderRail.png b/.themes/classic/source/assets/jwplayer/glow/playlist/sliderRail.png index 121778affdc..2b455a6ff85 100644 Binary files a/.themes/classic/source/assets/jwplayer/glow/playlist/sliderRail.png and b/.themes/classic/source/assets/jwplayer/glow/playlist/sliderRail.png differ diff --git a/.themes/classic/source/assets/jwplayer/glow/sharing/embedScreen.png b/.themes/classic/source/assets/jwplayer/glow/sharing/embedScreen.png index b4059754baf..dabce156c23 100644 Binary files a/.themes/classic/source/assets/jwplayer/glow/sharing/embedScreen.png and b/.themes/classic/source/assets/jwplayer/glow/sharing/embedScreen.png differ diff --git a/.themes/classic/source/assets/jwplayer/glow/sharing/shareIcon.png b/.themes/classic/source/assets/jwplayer/glow/sharing/shareIcon.png index eae1d4e7559..b659a20c3b5 100644 Binary files a/.themes/classic/source/assets/jwplayer/glow/sharing/shareIcon.png and b/.themes/classic/source/assets/jwplayer/glow/sharing/shareIcon.png differ diff --git a/.themes/classic/source/assets/jwplayer/glow/sharing/shareScreen.png b/.themes/classic/source/assets/jwplayer/glow/sharing/shareScreen.png index 695ec949f86..2435d3777eb 100644 Binary files a/.themes/classic/source/assets/jwplayer/glow/sharing/shareScreen.png and b/.themes/classic/source/assets/jwplayer/glow/sharing/shareScreen.png differ diff --git a/.themes/classic/source/favicon.png b/.themes/classic/source/favicon.png index 0f250673059..2ad3a59140c 100644 Binary files a/.themes/classic/source/favicon.png and b/.themes/classic/source/favicon.png differ diff --git a/.themes/classic/source/images/bird_32_gray.png b/.themes/classic/source/images/bird_32_gray.png index 574f210aec4..cf2cb22d97d 100644 Binary files a/.themes/classic/source/images/bird_32_gray.png and b/.themes/classic/source/images/bird_32_gray.png differ diff --git a/.themes/classic/source/images/bird_32_gray_fail.png b/.themes/classic/source/images/bird_32_gray_fail.png index 8337d10317a..d6259651482 100644 Binary files a/.themes/classic/source/images/bird_32_gray_fail.png and b/.themes/classic/source/images/bird_32_gray_fail.png differ diff --git a/.themes/classic/source/images/code_bg.png b/.themes/classic/source/images/code_bg.png index a57bab56a1b..ebd3acfa9b7 100644 Binary files a/.themes/classic/source/images/code_bg.png and b/.themes/classic/source/images/code_bg.png differ diff --git a/.themes/classic/source/images/dotted-border.png b/.themes/classic/source/images/dotted-border.png index 57f99071a5a..d19b60c9f6b 100644 Binary files a/.themes/classic/source/images/dotted-border.png and b/.themes/classic/source/images/dotted-border.png differ diff --git a/.themes/classic/source/images/email.png b/.themes/classic/source/images/email.png index e55473fef7b..9100c8bb194 100644 Binary files a/.themes/classic/source/images/email.png and b/.themes/classic/source/images/email.png differ diff --git a/.themes/classic/source/images/line-tile.png b/.themes/classic/source/images/line-tile.png index f67ee19fdc9..9247c3b1f5c 100644 Binary files a/.themes/classic/source/images/line-tile.png and b/.themes/classic/source/images/line-tile.png differ diff --git a/.themes/classic/source/images/noise.png b/.themes/classic/source/images/noise.png index 432e05bfd1a..46cdf03fdf2 100644 Binary files a/.themes/classic/source/images/noise.png and b/.themes/classic/source/images/noise.png differ diff --git a/.themes/classic/source/images/rss.png b/.themes/classic/source/images/rss.png index 151ae718ebf..037ce65db15 100644 Binary files a/.themes/classic/source/images/rss.png and b/.themes/classic/source/images/rss.png differ diff --git a/.themes/classic/source/images/search.png b/.themes/classic/source/images/search.png index 1220ff4e261..d0e1b1908bb 100644 Binary files a/.themes/classic/source/images/search.png and b/.themes/classic/source/images/search.png differ diff --git a/Gemfile b/Gemfile index c30860255d8..d7b8fe661d0 100644 --- a/Gemfile +++ b/Gemfile @@ -1,5 +1,7 @@ source "https://rubygems.org" +ruby "> 2.3.0" + group :development do gem 'rake', '~> 10.0' gem 'jekyll', '~> 3.0' @@ -7,6 +9,9 @@ group :development do gem 'sass-globbing', '~> 1.0' gem 'stringex', '~> 1.4' gem 'pry' + + # See https://github.com/home-assistant/home-assistant.github.io/pull/3904 + gem 'rb-inotify', '< 0.9.9' end group :jekyll_plugins do diff --git a/Gemfile.lock b/Gemfile.lock index d706705eb30..4a9684644f8 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -73,8 +73,8 @@ GEM rack rake (10.5.0) rb-fsevent (0.10.2) - rb-inotify (0.9.10) - ffi (>= 0.5.0, < 2) + rb-inotify (0.9.8) + ffi (>= 0.5.0) redcarpet (3.4.0) rouge (1.11.1) safe_yaml (1.0.4) @@ -104,9 +104,13 @@ DEPENDENCIES octopress-include-tag pry rake (~> 10.0) + rb-inotify (< 0.9.9) sass-globbing (~> 1.0) sinatra (~> 1.4.2) stringex (~> 1.4) +RUBY VERSION + ruby 2.4.1p111 + BUNDLED WITH 1.15.4 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/_config.yml b/_config.yml index 69312dd7804..fb491ec4791 100644 --- a/_config.yml +++ b/_config.yml @@ -139,12 +139,12 @@ social: # Home Assistant release details current_major_version: 0 -current_minor_version: 57 -current_patch_version: 2 -date_released: 2017-11-05 +current_minor_version: 61 +current_patch_version: 1 +date_released: 2018-01-16 # Either # or the anchor link to latest release notes in the blog post. # Must be prefixed with a # and have double quotes around it. # Major release: -patch_version_notes: "#release-0572--november-5" +patch_version_notes: "#release-0611---january-16" # Minor release (Example #release-0431---april-25): diff --git a/credits_generator/README.md b/credits_generator/README.md index 03c187d2d8a..ee89f678174 100644 --- a/credits_generator/README.md +++ b/credits_generator/README.md @@ -3,11 +3,17 @@ credits_generator This tool can be used to update the [Home Assistant's Credits page](https://home-assistant.io/developers/credits/). +Setup +----- + ```bash $ cd credits_generator $ npm install ``` +Usage +----- + Set your personal GitHub access token as environmental variable. ```bash @@ -17,6 +23,7 @@ $ export GITHUB_TOKEN= Run the script. ```bash +$ cd credits_generator $ node update_credits.js ``` diff --git a/source/_addons/configurator.markdown b/source/_addons/configurator.markdown index f2b2d3df19f..97640ebe203 100644 --- a/source/_addons/configurator.markdown +++ b/source/_addons/configurator.markdown @@ -46,7 +46,9 @@ Screenshot of the HASS Configurator. "ssl": false, "allowed_networks": ["192.168.0.0/16"], "banned_ips": ["8.8.8.8"], - "ignore_pattern": ["__pycache__"] + "banlimit": 0, + "ignore_pattern": ["__pycache__"], + "dirsfirst": false, } ``` @@ -55,7 +57,9 @@ Screenshot of the HASS Configurator. - **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. ### {% linkable_title Embedding into Home-Assistant %} diff --git a/source/_addons/duckdns.markdown b/source/_addons/duckdns.markdown index f54e69f0da0..297cbb8fd9e 100644 --- a/source/_addons/duckdns.markdown +++ b/source/_addons/duckdns.markdown @@ -42,8 +42,10 @@ 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. + +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. diff --git a/source/_addons/git_pull.markdown b/source/_addons/git_pull.markdown index 579ca5ad092..e482db95099 100644 --- a/source/_addons/git_pull.markdown +++ b/source/_addons/git_pull.markdown @@ -13,7 +13,7 @@ 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, "repeat": { "active": false, @@ -32,7 +32,7 @@ Load and update configuration files for Home Assistant from a GIT repository. } ``` -- **repository** (*Required*): GIT url to your repository. +- **repository** (*Required*): GIT url to your repository. You have to add .git to your GITHub-Repository-URL (see example Config) - **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. - **repeat/interval** (*Optional*): Pull all x seconds and look for changes. @@ -44,4 +44,8 @@ Load and update configuration files for Home Assistant from a GIT repository. * **ed25519** * **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. +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..21c4c8b8af4 100644 --- a/source/_addons/google_assistant.markdown +++ b/source/_addons/google_assistant.markdown @@ -10,7 +10,11 @@ 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. +

+ If you are wanting to integrate your Google Home, or mobile phone running Google Assistant, with Home Assistant then you want the [Google Assistant component](https://home-assistant.io/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: @@ -67,14 +71,13 @@ Configuration variables: ### {% 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..aa1137abd0b --- /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 exists configuration, you need new 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 handbook of your device. +- **device** (*Require*): Device on host. + +For RF devices +- **serial** (*Require*): Serial number of 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: + BidCoS-RF: + host: core-homematic + port: 2001 +``` + +## {% linkable_title Raspberry Pi3 %} + +With HM-MOD-PRI-PCB you need 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..bf6845005f6 100644 --- a/source/_addons/lets_encrypt.markdown +++ b/source/_addons/lets_encrypt.markdown @@ -16,13 +16,8 @@ You should not use this if you are also using the [DuckDNS add-on]. The DuckDNS 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. -

- ```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,6 @@ 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 a SSL proxy, change the port number. [DuckDNS add-on]: /addons/duckdns/ diff --git a/source/_addons/mariadb.markdown b/source/_addons/mariadb.markdown index d04dc3c474c..b7882dd2c6f 100644 --- a/source/_addons/mariadb.markdown +++ b/source/_addons/mariadb.markdown @@ -34,15 +34,15 @@ Set up a [mariadb](https://mariadb.org/) SQL server. It supports multiple databa Configuration variables: -- **databases** (*Require*): Listen of databases. -- **logins** (*Require*): Listen of logindata they will create or update. - - **username** (*Require*): Username for login. - - **host** (*Require*): Host for login, if you need a login with multibe hosts, use '%'. - - **password** (*Require*): Password for login. -- **rights** (*Require*): Listen of rights to be handle. - - **username** (*Require*): Username for grant rights. +- **databases** (*Require*): List of databases. +- **logins** (*Require*): List of SQL accounts to create or update. + - **username** (*Require*): Username for account. + - **host** (*Require*): Host for account. If you need an account on multiple hosts, use '%'. + - **password** (*Require*): Password for account. +- **rights** (*Require*): List of rights to be granted. + - **username** (*Require*): Username for granted rights. - **host** (*Require*): Host is a part of username like above. - - **database** (*Require*): Database name to grant this user rights to. + - **database** (*Require*): Database name on which to grant user rights. - **grant** (*Require*): SQL grant part for access too. ## {% linkable_title Home Assistant configuration %} diff --git a/source/_addons/mosquitto.markdown b/source/_addons/mosquitto.markdown index f944dc7989c..5512542ed20 100644 --- a/source/_addons/mosquitto.markdown +++ b/source/_addons/mosquitto.markdown @@ -23,7 +23,9 @@ Set up [Mosquitto](https://mosquitto.org/) as MQTT broker. "customize": { "active": false, "folder": "mosquitto" - } + }, + "certfile": "fullchain.pem", + "keyfile": "privkey.pem" } ``` @@ -48,3 +50,12 @@ To use the Mosquitto as [broker](/docs/mqtt/broker/#run-your-own) add the follow 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 +``` diff --git a/source/_addons/tellstick.markdown b/source/_addons/tellstick.markdown new file mode 100644 index 00000000000..d75100774c9 --- /dev/null +++ b/source/_addons/tellstick.markdown @@ -0,0 +1,103 @@ +--- +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 has been made to the configuration you need to restart the add-on for the changes to take effect. + +Configuration variables: + +- **id** (*Required*): This is 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 parameter model 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 selflearning 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 house. +- **fade** (*Optional*): Fade is either `true` or `false` and tells a dimmer if is 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](https://home-assistant.io/components/light.tellstick/), [sensors](https://home-assistant.io/components/sensor.tellstick/) and [switches](https://home-assistant.io/components/switch.tellstick/) you follow the guidelines for each type individually that is [described for Home Assistant](https://home-assistant.io/components/tellstick/) + +The add-on will also enable you to interact with tdtool via a Home Assistant services call, see example below for selflearning 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 normaly 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/ads.markdown b/source/_components/ads.markdown new file mode 100644 index 00000000000..cea2088d32e --- /dev/null +++ b/source/_components/ads.markdown @@ -0,0 +1,59 @@ +--- +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.alarmdecoder.markdown b/source/_components/alarm_control_panel.alarmdecoder.markdown index fec4f0cb3fd..991bdeb7724 100644 --- a/source/_components/alarm_control_panel.alarmdecoder.markdown +++ b/source/_components/alarm_control_panel.alarmdecoder.markdown @@ -18,3 +18,58 @@ The `alarmdecoder` alarm control panel platform allows you to control your [Alar 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. + +**Note**: `alarm_arm_custom_bypass` and `alarm_trigger`, while available in the services list in Home Assistant, are not currently implemented in the Alarm Decoder component. + +### {% 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.arlo.markdown b/source/_components/alarm_control_panel.arlo.markdown index bc94d594a54..19294db81b1 100644 --- a/source/_components/alarm_control_panel.arlo.markdown +++ b/source/_components/alarm_control_panel.arlo.markdown @@ -14,7 +14,7 @@ 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,7 +26,53 @@ 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 %} + +## {% 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). -- **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. -- **away_mode_name**: (*Optional*): Like the home mode, the Arlo base station does not have a built-in away mode, however, you can map a custom mode from the Arlo app to Home Assistant with this variable, just make sure the name matches exactly what you have set up in the Arlo app. 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..8a9c00b7b31 100644 --- a/source/_components/alarm_control_panel.concord232.markdown +++ b/source/_components/alarm_control_panel.concord232.markdown @@ -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 https://github.com/JasonCarter80/concord232. + +To enable this platform in home assistant, add the following lines to your `configuration.yaml`: ```yaml # Example configuration.yaml entry diff --git a/source/_components/alarm_control_panel.egardia.markdown b/source/_components/alarm_control_panel.egardia.markdown index b8309efd549..20c555587e4 100644 --- a/source/_components/alarm_control_panel.egardia.markdown +++ b/source/_components/alarm_control_panel.egardia.markdown @@ -12,11 +12,11 @@ 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. +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 GATE-01, GATE-02 and GATE-03 versions 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`: +To enable the integration with your alarm panel, add the following lines to your `configuration.yaml` file: ```yaml # Example configuration.yaml entry @@ -32,17 +32,18 @@ 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. +- **version** (*Optional*): The version of the Egardia system. `GATE-01`, `GATE-02` and `GATE-03` are currently supported. Defaults to `GATE-01`. - **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_port** (*Optional*): Port of the Egardia server. Defaults to 52010. - **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'. +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. 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 @@ -53,7 +54,7 @@ alarm_control_panel:   username: YOUR_USERNAME   password: YOUR_PASSWORD report_server_enabled: True - report_server_port: PORT_OF_EGARDIASERVER (85 as per the instructions above) + report_server_port: PORT_OF_EGARDIASERVER (optional, defaults to 52010) report_server_codes: arm: XXXXXXXXXXXXXXXX, XXXXXXXXXXXXXXXX disarm: XXXXXXXXXXXXXXXX, XXXXXXXXXXXXXXXX @@ -62,29 +63,6 @@ alarm_control_panel: 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. +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. +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/alarm_control_panel.ialarm.markdown b/source/_components/alarm_control_panel.ialarm.markdown new file mode 100644 index 00000000000..db0288b47f4 --- /dev/null +++ b/source/_components/alarm_control_panel.ialarm.markdown @@ -0,0 +1,48 @@ +--- +layout: page +title: "Antifurto365 iAlarm Control Panel" +description: "Instructions 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.manual.markdown b/source/_components/alarm_control_panel.manual.markdown index 0bdb28cd801..86509ebe620 100644 --- a/source/_components/alarm_control_panel.manual.markdown +++ b/source/_components/alarm_control_panel.manual.markdown @@ -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..95fd3e09ff2 100644 --- a/source/_components/alarm_control_panel.manual_mqtt.markdown +++ b/source/_components/alarm_control_panel.manual_mqtt.markdown @@ -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](/component/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.mqtt.markdown b/source/_components/alarm_control_panel.mqtt.markdown index 7e6feaa7a2e..199ebacaee1 100644 --- a/source/_components/alarm_control_panel.mqtt.markdown +++ b/source/_components/alarm_control_panel.mqtt.markdown @@ -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.spc.markdown b/source/_components/alarm_control_panel.spc.markdown index 673e687fa3b..78e7066f00e 100644 --- a/source/_components/alarm_control_panel.spc.markdown +++ b/source/_components/alarm_control_panel.spc.markdown @@ -18,3 +18,19 @@ The `spc` alarm control panel platform allows you to control your [Vanderbilt SP The requirement is that you have setup your [SPC hub](/components/spc/). +The `changed_by` attribute enables one to be able to take different actions depending on who armed/disarmed the alarm in [automation](/getting-started/automation/). + +```yaml +automation: + - alias: Alarm status changed + trigger: + - platform: state + entity_id: alarm_control_panel.alarm_1 + action: + - service: notify.notify + data_template: + message: > + {% raw %}Alarm changed from {{ trigger.from_state.state }} + to {{ trigger.to_state.state }} + by {{ trigger.to_state.attributes.changed_by }}{% endraw %} +``` diff --git a/source/_components/alarmdecoder.markdown b/source/_components/alarmdecoder.markdown index 82beb4b5e62..aa1109dbdf7 100644 --- a/source/_components/alarmdecoder.markdown +++ b/source/_components/alarmdecoder.markdown @@ -39,6 +39,7 @@ alarmdecoder: 01: name: 'Smoke Detector' type: 'smoke' + rfid: '0123456' 02: name: 'Front Door' type: 'opening' @@ -53,3 +54,4 @@ 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. diff --git a/source/_components/alexa.markdown b/source/_components/alexa.markdown index 179fb4076c1..6b1347a386e 100644 --- a/source/_components/alexa.markdown +++ b/source/_components/alexa.markdown @@ -10,9 +10,13 @@ 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) @@ -135,6 +139,13 @@ Custom slot type for scene support. The names must exactly match the scene names (minus underscores - amazon discards them anyway and we later map them back in with the template). +In the new Alexa Skills Kit, you can also create synonyms for slot type values, which can be used in place of the base value in utterances. Synonyms will be replaced with their associated slot value in the intent request sent to the Alexa API endpoint, but only if there are not multiple synonym matches. Otherwise, the value of the synonym that was spoken will be used. + +

+ +Custom slot values with synonyms. +

+ Add a sample utterance: ```text @@ -318,7 +329,7 @@ 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". [amazon-dev-console]: https://developer.amazon.com diff --git a/source/_components/api.markdown b/source/_components/api.markdown new file mode 100644 index 00000000000..cdac55a1b44 --- /dev/null +++ b/source/_components/api.markdown @@ -0,0 +1,25 @@ +--- +layout: page +title: "API" +description: "Instructions 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..bba7b7ac785 100644 --- a/source/_components/apple_tv.markdown +++ b/source/_components/apple_tv.markdown @@ -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 %} @@ -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` %} 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/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.deconz.markdown b/source/_components/binary_sensor.deconz.markdown new file mode 100644 index 00000000000..f06c89241bd --- /dev/null +++ b/source/_components/binary_sensor.deconz.markdown @@ -0,0 +1,33 @@ +--- +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: + + * Open/Close detection + * Presence 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.digital_ocean.markdown b/source/_components/binary_sensor.digital_ocean.markdown index 48e17b354d0..e4bc04ac1cb 100644 --- a/source/_components/binary_sensor.digital_ocean.markdown +++ b/source/_components/binary_sensor.digital_ocean.markdown @@ -26,7 +26,10 @@ binary_sensor: - 'coreos-512mb-nyc3-01' ``` -Configuration variables: - -- **droplets** (*Required*): List of droplets you want to control. +{% configuration %} +droplets: + description: List of droplets you want to monitor. + required: true + type: list +{% endconfiguration %} 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.hive.markdown b/source/_components/binary_sensor.hive.markdown new file mode 100644 index 00000000000..ef695f46014 --- /dev/null +++ b/source/_components/binary_sensor.hive.markdown @@ -0,0 +1,28 @@ +--- +layout: page +title: "Hive Binary Sensor" +description: "Instructions on how to integrate Hive Sensors with Home Assistant." +date: 2017-09-24 21:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: hive.png +ha_category: Binary Sensor +ha_release: 0.59 +ha_iot_class: "Cloud Polling" +--- + + +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** + + +

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

+ + diff --git a/source/_components/binary_sensor.iss.markdown b/source/_components/binary_sensor.iss.markdown index b2b2b3d9015..c2061706882 100644 --- a/source/_components/binary_sensor.iss.markdown +++ b/source/_components/binary_sensor.iss.markdown @@ -25,9 +25,13 @@ binary_sensor: - platform: iss ``` -Configuration variables: - -- **show_on_map** (*Optional*): Option to show the position of the ISS on the map. Defaults to `False`. +{% configuration %} +show_on_map: + description: Option to show the position of the ISS on the map. + required: optional + default: false + type: string +{% endconfiguration %}

If you set `show_on_map` `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. diff --git a/source/_components/binary_sensor.markdown b/source/_components/binary_sensor.markdown index afc028a2bcb..781f4f45576 100644 --- a/source/_components/binary_sensor.markdown +++ b/source/_components/binary_sensor.markdown @@ -14,21 +14,27 @@ Binary sensors gather information about the state of devices which have a "digit 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. -- **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 +- **battery**: `On` means low, `Off` means normal +- **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 +- **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. +- **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). diff --git a/source/_components/binary_sensor.mqtt.markdown b/source/_components/binary_sensor.mqtt.markdown index 3b1ff864534..65058598382 100644 --- a/source/_components/binary_sensor.mqtt.markdown +++ b/source/_components/binary_sensor.mqtt.markdown @@ -29,18 +29,54 @@ binary_sensor: state_topic: "home-assistant/window/contact" ``` -Configuration variables: - -- **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. +{% 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 +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 +{% endconfiguration %} 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: diff --git a/source/_components/binary_sensor.random.markdown b/source/_components/binary_sensor.random.markdown index 7376d6254d9..ea8de4b90cc 100644 --- a/source/_components/binary_sensor.random.markdown +++ b/source/_components/binary_sensor.random.markdown @@ -25,10 +25,10 @@ binary_sensor: ``` {% configuration %} - name: - description: Name to use in the frontend. - required: false - type: string +name: + description: Name to use in the frontend. + required: false + type: string {% endconfiguration %} See the [entity component options](/docs/configuration/platform_options/) to control how often the main component polls the random binary sensor. The default is 30 seconds. diff --git a/source/_components/binary_sensor.rest.markdown b/source/_components/binary_sensor.rest.markdown index 0a5c789d36e..4739781d2fb 100644 --- a/source/_components/binary_sensor.rest.markdown +++ b/source/_components/binary_sensor.rest.markdown @@ -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.template.markdown b/source/_components/binary_sensor.template.markdown index 009f4131ddd..290e3af9bc6 100644 --- a/source/_components/binary_sensor.template.markdown +++ b/source/_components/binary_sensor.template.markdown @@ -48,10 +48,6 @@ binary_sensor: description: Name to use in the frontend. 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. - required: false - type: string, list device_class: description: The type/class of the sensor to set the icon in the frontend. required: false @@ -126,13 +122,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 +136,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 +148,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 +180,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..aa12fad99f5 100644 --- a/source/_components/binary_sensor.threshold.markdown +++ b/source/_components/binary_sensor.threshold.markdown @@ -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.workday.markdown b/source/_components/binary_sensor.workday.markdown index 45f1d2386cc..0d4782bc12a 100644 --- a/source/_components/binary_sensor.workday.markdown +++ b/source/_components/binary_sensor.workday.markdown @@ -22,12 +22,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.3) notation. +- **province** (*Optional*): Province code according to [holidays](https://pypi.python.org/pypi/holidays/0.9.3) 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 +37,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..a317550cbf8 100644 --- a/source/_components/binary_sensor.xiaomi_aqara.markdown +++ b/source/_components/binary_sensor.xiaomi_aqara.markdown @@ -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 (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) | ### {% linkable_title Automation examples %} diff --git a/source/_components/calendar.caldav.markdown b/source/_components/calendar.caldav.markdown new file mode 100644 index 00000000000..6ae9f8c36a4 --- /dev/null +++ b/source/_components/calendar.caldav.markdown @@ -0,0 +1,99 @@ +--- +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 10 minutes. + +### {% linkable_title Prerequisites %} + +You need to have a CalDav server and eventually credentials for it. This component was tested against [Baikal](http://sabre.io/baikal/) but any component complying with the RFC4791 should work. + +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 +calendar: + - platform: caldav + url: https://baikal.my-server.net/cal.php/calendars/john.doe@test.com/default +``` + +{% 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. + 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 + pending_charges: Regular expression for filtering the events + 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 Sensor attributes %} + +```yaml +# Example configuration.yaml entry +calendar: + - platform: caldav + url: https://baikal.my-server.net/cal.php/calendars/john.doe@test.com/default + username: john.doe@test.com + password: !secret caldav + custom_calendars: + - name: 'HomeOffice' + calendar: 'Agenda' + search: 'HomeOffice' +``` diff --git a/source/_components/calendar.google.markdown b/source/_components/calendar.google.markdown index 658dae1f2bc..3442a972a04 100644 --- a/source/_components/calendar.google.markdown +++ b/source/_components/calendar.google.markdown @@ -22,7 +22,7 @@ Generate a Client ID and Client Secret on [Google Developers Console](https://co 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. diff --git a/source/_components/calendar.todoist.markdown b/source/_components/calendar.todoist.markdown index 65401ebc643..00bdca07f75 100644 --- a/source/_components/calendar.todoist.markdown +++ b/source/_components/calendar.todoist.markdown @@ -109,7 +109,7 @@ 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: diff --git a/source/_components/camera.canary.markdown b/source/_components/camera.canary.markdown new file mode 100644 index 00000000000..bf7c029bc73 --- /dev/null +++ b/source/_components/camera.canary.markdown @@ -0,0 +1,18 @@ +--- +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 view the latest camera image (triggered by motion) by your [Canary](https://canary.is) device in Home Assistant. + +To add `canary` camera to your installation, follow instructions in [Canary component](/components/canary/). diff --git a/source/_components/camera.doorbird.markdown b/source/_components/camera.doorbird.markdown index 55fcb419f8c..d96a1ebe9b7 100644 --- a/source/_components/camera.doorbird.markdown +++ b/source/_components/camera.doorbird.markdown @@ -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.generic.markdown b/source/_components/camera.generic.markdown index 69637387a44..c6f41ac3376 100644 --- a/source/_components/camera.generic.markdown +++ b/source/_components/camera.generic.markdown @@ -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: @@ -57,3 +57,14 @@ 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 an 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 +``` diff --git a/source/_components/camera.markdown b/source/_components/camera.markdown index e0dee527ad6..21629b68d86 100644 --- a/source/_components/camera.markdown +++ b/source/_components/camera.markdown @@ -45,6 +45,18 @@ Take a snapshot from a camera. 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.onvif.markdown b/source/_components/camera.onvif.markdown index fe8561afa32..0cfa7cf4534 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 @@ -31,6 +31,6 @@ Configuration variables: - **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 - +- **extra_arguments** (*Optional*): Extra options to pass to `ffmpeg`, e.g. image quality or video filter options. More details in [FFmpeg component](/components/ffmpeg). If you are running into trouble with this sensor, please refer to the [Troubleshooting section](/components/ffmpeg/#troubleshooting). diff --git a/source/_components/camera.ring.markdown b/source/_components/camera.ring.markdown index c383381eaf7..eb7fc031628 100644 --- a/source/_components/camera.ring.markdown +++ b/source/_components/camera.ring.markdown @@ -1,6 +1,6 @@ --- layout: page -title: "Ring Binary Camera" +title: "Ring Camera" description: "Instructions on how to integrate your Ring.com devices within Home Assistant." date: 2017-10-20 10:00 sidebar: true @@ -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). +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: @@ -32,19 +32,30 @@ Configuration variables: Currently it supports doorbell and stickup cameras. +## {% linkable_title Saving the videos captured by your Ring Door Bell %} -## {% linkable_title Saving locally the videos captured by your Ring Door Bell %} +You can save locally the latest video captured by your Ring Door Bell using the [downloader](/components/downloader) along with either an [automation](/components/automation) or [python_script](/components/python_script). First, enable the [downloader](/components/downloader) component in your configuration by adding the following to your `configuration.yaml`. -You can save locally the latest video captured by your Ring Door Bell by enabling the [downloader](/components/downloader) and the [python_scripts](/components/python_script) components. - - - Add to the `configuration.yaml` the `downloader` and `python_scripts`. Visit the component page for further details. - -```json -python_script: +```yaml downloader: download_dir: downloads ``` - - Create a file `ring_downloader.py` in the folder `/python_scripts` and give it this content: +Then you can use the following `action` in your automation (this will save the video file under `/downloads/ring_/`): + +```yaml +action: + - service: downloader.download_file + data_template: + url: "{{ states.camera.front_door.attributes.video_url }}" + subdir: "{{states.camera.front_door.attributes.friendly_name}}" + filename: "{{states.camera.front_door.attributes.friendly_name}}" +``` + +If you want to use `python_script`, enable it your `configuration.yaml` file first: +```yaml +python_script: +``` +You can then use the following `python_script` to save the video file: ```python # obtain ring doorbell camera object @@ -57,15 +68,9 @@ subdir_name = 'ring_{}'.format(ring_cam.attributes.get('friendly_name')) data = { 'url': ring_cam.attributes.get('video_url'), 'subdir': subdir_name, + 'filename': ring_cam.attributes.get('friendly_name') } # call downloader component to save the video hass.services.call('downloader', 'download_file', data) ``` - - - Start Home Assistant - - Call the server `python_script/ring_downloader` - -You should be able to see a video file saved under `//ring_/`. - -You can also automate the process by integrating it with the (automation)[/components/automation) component. diff --git a/source/_components/camera.yi.markdown b/source/_components/camera.yi.markdown index 98cc2b1f38b..052e3b26d63 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,14 @@ 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. +

+

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,7 +67,7 @@ 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`. +- **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..425055f48a4 --- /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. + +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: you@example.com + password: secret +``` + +{% 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/climate.daikin.markdown b/source/_components/climate.daikin.markdown new file mode 100644 index 00000000000..52e3f5b5252 --- /dev/null +++ b/source/_components/climate.daikin.markdown @@ -0,0 +1,48 @@ +--- +layout: page +title: "Daikin AC" +description: "Instructions on how to integrate Daikin AC(s) with Home Assistant." +date: 2017-12-03 05:00 +sidebar: false +comments: false +sharing: true +footer: true +logo: N/A +ha_category: Climate +ha_release: 0.59 +ha_iot_class: "Local Polling" +--- + +### Description ### + +The climate component 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. +

+ +### Configuration ### + +The component has been integrated with discovery so all your Daikin AC's climate devices can be automatically discovered. +Manual configuration and customization is also possible by using the sample configuration from below: + +```yaml +# Example configuration.yaml entry +climate: + - platform: daikin + host: 10.0.0.1 + name: optional name +``` + +Configuration variables: + +- **host** (*Required*): IP or hostname of the device +- **name** (*Optional*): If the device has a name previously set by the user than that name will be used + diff --git a/source/_components/climate.econet.markdown b/source/_components/climate.econet.markdown new file mode 100644 index 00000000000..3feb4aa6437 --- /dev/null +++ b/source/_components/climate.econet.markdown @@ -0,0 +1,64 @@ +--- +layout: page +title: "EcoNet water heater" +description: "Instructions 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.generic_thermostat.markdown b/source/_components/climate.generic_thermostat.markdown index e477044c300..d816c7ac5fe 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" (default: 16). Please specify when using `ac_mode: True` to a higher value. 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.hive.markdown b/source/_components/climate.hive.markdown new file mode 100644 index 00000000000..dd3fd41ca51 --- /dev/null +++ b/source/_components/climate.hive.markdown @@ -0,0 +1,30 @@ +--- +layout: page +title: "Hive Thermostat" +description: "Instructions on how to integrate Hive thermostat(s) with Home Assistant." +date: 2017-09-24 21:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: hive.png +ha_category: Climate +ha_release: 0.59 +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**. +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 Hive climate component supports the following Hive products: +- **Hive Active Heating** +- **Hive Multizone** +- **Hot water control** + + +

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

+ + diff --git a/source/_components/climate.honeywell.markdown b/source/_components/climate.honeywell.markdown index 8a50fc5dd66..8104a6a77f1 100644 --- a/source/_components/climate.honeywell.markdown +++ b/source/_components/climate.honeywell.markdown @@ -36,5 +36,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.knx.markdown b/source/_components/climate.knx.markdown index 1c740bba30c..b5b59a01e36 100644 --- a/source/_components/climate.knx.markdown +++ b/source/_components/climate.knx.markdown @@ -25,10 +25,11 @@ To use your KNX thermostats in your installation, add the following lines to you climate: - platform: knx name: HASS-Kitchen.Temperature - temperature_address: '6/2/1' - setpoint_address: '5/1/2' - target_temperature_address: '5/1/1' - operation_mode_address: '5/1/3' + temperature_address: '5/1/1' + setpoint_shift_address: '5/1/2' + setpoint_shift_state_address: '5/1/3' + target_temperature_address: '5/1/4' + operation_mode_address: '5/1/5' ``` Alternatively, if your device has dedicated binary group addresses for frost/night/comfort mode: @@ -38,12 +39,13 @@ Alternatively, if your device has dedicated binary group addresses for frost/nig climate: - platform: knx name: HASS-Kitchen.Temperature - temperature_address: '6/2/1' - setpoint_address: '5/1/2' - target_temperature_address: '5/1/1' - operation_mode_frost_protection_address: '5/1/3' - operation_mode_night_address: '5/1/4' - operation_mode_comfort_address: '5/1/5' + temperature_address: '5/1/1' + setpoint_shift_address: '5/1/2' + setpoint_shift_state_address: '5/1/3' + target_temperature_address: '5/1/4' + operation_mode_frost_protection_address: '5/1/5' + operation_mode_night_address: '5/1/6' + operation_mode_comfort_address: '5/1/7' ``` Configuration variables: @@ -51,7 +53,16 @@ Configuration variables: - **name** (*Optional*): A name for this device used within Home Assistant. - **temperature_address**: KNX group address for reading current room temperature from KNX bus. - **target_temperature_address**: KNX group address for reading current target temperature from KNX bus. -- **setpoint_address**: KNX group address for basis setpoint + +The `knx` component sets the desired target temperature by modifying the setpoint_shift. The module provides the following configuration options: + +* **setpoint_shift_address**: (*Optional*) KNX address for setpoint_shift +* **setpoint_shift_state_address**: (*Optional*) Explicit KNX address for reading setpoint_shift. +* **setpoint_shift_step**: (*Optional*) Defines for step size in Kelvin for each step of setpoint_shift. Default is 0.5 K. +* **setpoint_shift_min**: (*Optional*) Minimum value of setpoint shift. Default is "-6". +* **setpoint_shift_max**: (*Optional*) Maximum value of setpoint shift. Default is "6". + +The operation modes may be controlled with the following directives: - **operation_mode_address** (*Optional*): KNX address for operation mode (Frost protection/night/comfort). - **operation_mode_state_address** (*Optional*): Explicit KNX address for reading operation mode @@ -63,5 +74,3 @@ Configuration variables: - **operation_mode_comfort_address** (*Optional*): KNX address for switching on/off comfort mode. `operation_mode_frost_protection_address` / `operation_mode_night_address` / `operation_mode_comfort_address` are not necessary if `operation_mode_address` was specified. - - diff --git a/source/_components/climate.markdown b/source/_components/climate.markdown index ce47cc8a3cb..53cfc080136 100644 --- a/source/_components/climate.markdown +++ b/source/_components/climate.markdown @@ -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.mqtt.markdown b/source/_components/climate.mqtt.markdown index 7d624b4d9a9..85675df1f62 100644 --- a/source/_components/climate.mqtt.markdown +++ b/source/_components/climate.mqtt.markdown @@ -7,7 +7,7 @@ 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,39 +28,182 @@ 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 +{% 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'. - -Configuration of the MQTT topics: - -- **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). - -#### Optimistic mode +#### {% linkable_title Optimistic mode %} 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 Using Templates %} + +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`. Obvisouly, in this case you could also just set `value_template: {% raw %}"{{ value_json }}"{% endraw %}`. + + ### {% linkable_title Example %} A full configuration example looks like the one below. diff --git a/source/_components/climate.nuheat.markdown b/source/_components/climate.nuheat.markdown new file mode 100644 index 00000000000..51ffd6fee4b --- /dev/null +++ b/source/_components/climate.nuheat.markdown @@ -0,0 +1,139 @@ +--- +layout: page +title: "NuHeat Thermostat" +description: "Instructions 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.touchline.markdown b/source/_components/climate.touchline.markdown new file mode 100644 index 00000000000..ebc48a9df82 --- /dev/null +++ b/source/_components/climate.touchline.markdown @@ -0,0 +1,32 @@ +--- +layout: page +title: "Roth Touchline" +description: "Instructions 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/cloud.alexa.markdown b/source/_components/cloud.alexa.markdown new file mode 100644 index 00000000000..81a4b09eac6 --- /dev/null +++ b/source/_components/cloud.alexa.markdown @@ -0,0 +1,119 @@ +--- +layout: page +title: "Alexa via Home Assistant Cloud" +description: "Enable the Alexa integration via Home Assistant Cloud integration." +date: 2017-11-17 20:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: home-assistant.png +ha_release: 0.60 +ha_category: Cloud +ha_iot_class: "Cloud Push" +--- + +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 Home Assistant. + +To use this integration, you need to have: + + - The cloud component set up. [Learn more](/components/cloud/) + - An Alexa enabled device like the Amazon Echo + - Activated the [Home Assistant Smart Home skill for Alexa][alexa skill] + +

Only Amazon US is currently supported. Other regions are being certified.

+ +You can use `configuration.yaml` to configure the entities that are being shown to Alexa and how they are exposed. + +```yaml +# Example configuration.yaml entry configuring Alexa +cloud: + alexa: + 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 +``` + +{% 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 + entity_config: + description: Entity specific configuration for Alexa + required: false + type: map + keys: + '``': + description: Entity to configure + required: false + type: map + keys: + name: + description: Name of entity to show in Alexa + required: false + type: string + description: + description: Description of entity to show in Alexa + required: false + type: string + display_categories: + description: The display category to use in Alexa. [Available categories](https://developer.amazon.com/docs/device-apis/alexa-discovery.html#display-categories) + required: false + type: string +{% endconfiguration %} + +### {% linkable_title Possible values for customizing %} + +_Configuration via `customize:` is no longer available. Use the entity config as described above._ + +### {% linkable_title Available domains %} +Currently, the following domains are available to be used with Alexa: + +- alert +- automation (enables/disables) +- cover +- fan (supports on/off and set speed) +- group +- input_boolean +- light +- 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 +- script (enables/disables) +- switch + +[alexa skill]: https://alexa.amazon.com/spa/index.html#skills/dp/B0772J1QKB/?ref=skill_dsk_skb_sr_2 diff --git a/source/_components/cloud.google_assistant.markdown b/source/_components/cloud.google_assistant.markdown new file mode 100644 index 00000000000..3dc3dde7cf1 --- /dev/null +++ b/source/_components/cloud.google_assistant.markdown @@ -0,0 +1,98 @@ +--- +layout: page +title: "Google Assistant via Home Assistant Cloud" +description: "Enable the Google Assistant via Home Assistant Cloud integration." +date: 2017-11-17 20:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: home-assistant.png +ha_release: 0.61 +ha_category: Cloud +ha_iot_class: "Cloud Push" +published: false +--- + +The Google Assistant integration allows users to control the entities via the Home Assistant Smart Home skill for Google Assistant. This means that you can say things like "Ok Google, turn on the kitchen light" to control your local Home Assistant. + +To use this integration, you need to have: + + - The cloud component set up. [Learn more](/components/cloud/) + - A Google Assistant enabled device like the Google Home + - Activated the Home Assistant Smart Home skill for Google Assistant + +You can use `configuration.yaml` to configure the entities that are being shown to Google Assistant and how they are exposed. + +```yaml +# Example configuration.yaml entry configuring Google Assistant +cloud: + google_actions: + filter: + include_entities: + - light.kitchen + - light.kitchen_left + include_domains: + - switch + exclude_entities: + - switch.outside + entity_config: + switch.kitchen: + name: Custom Name for Google Assistant + aliases: + - bright lights + - entry lights + type: 'action.devices.types.LIGHT' +``` + +{% configuration %} +google_actions: + description: Configuration options for the Google Assistant integration. + required: false + type: map + keys: + filter: + description: Filters for entities to include/exclude from Google Assistant. + 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 + 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 entity to show in Google Assistant + required: false + type: string + aliases: + description: Aliases that can also be used to refer to this entity + required: false + type: list + type: + description: Override the type of the entity in Google Assistant. [List of available types](https://developers.google.com/actions/smarthome/guides/) + required: false + type: string +{% endconfiguration %} + diff --git a/source/_components/cloud.markdown b/source/_components/cloud.markdown new file mode 100644 index 00000000000..57717e6eabe --- /dev/null +++ b/source/_components/cloud.markdown @@ -0,0 +1,47 @@ +--- +layout: page +title: "Home Assistant Cloud" +description: "Enable the Home Assistant Cloud integration." +date: 2017-11-17 20:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: home-assistant.png +ha_release: 0.60 +ha_category: Voice +ha_iot_class: "Cloud Push" +--- + +

The Home Assistant Cloud is currently in open beta and will become part of the upcoming Community Support Package. [Learn more](/blog/2017/12/17/introducing-home-assistant-cloud/)

+ +The Home Assistant Cloud allows you to quickly integrate your local Home Assistant with various cloud services like Amazon Alexa. + +The following integrations are currently available: + + - [Amazon Alexa (Amazon Echo)](/components/cloud.alexa/) + + + +### {% linkable_title How does it work? %} + +The Home Assistant Cloud has been designed with security in mind. When you activate the Cloud component, your instance will create a secure connection to the Home Assistant Cloud. There is no need for any further configuration or to expose your instance to the internet. + +Integrations like Alexa will deliver messages to our cloud which we will forward to your local instance for processing. We just forward the response back to Alexa. This means that we do not have to store the state of your house in our cloud, we’re just the messenger! + +You can find a list of frequently asked questions (and their answers) in [this blog post](/blog/2017/12/17/introducing-home-assistant-cloud/#faq). + +### {% linkable_title Enabling the cloud %} + +The Home Assistant Cloud is enabled by default. If not, add this to your configuration: + +```yaml +# Example configuration.yaml entry to enable the cloud component +cloud: +``` + +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. + +```yaml +config: +``` diff --git a/source/_components/coinbase.markdown b/source/_components/coinbase.markdown new file mode 100644 index 00000000000..d39e34e3a73 --- /dev/null +++ b/source/_components/coinbase.markdown @@ -0,0 +1,47 @@ +--- +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/cover.garadget.markdown b/source/_components/cover.garadget.markdown index 1d34384fffa..6ae25d44e8e 100644 --- a/source/_components/cover.garadget.markdown +++ b/source/_components/cover.garadget.markdown @@ -98,3 +98,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.lutron.markdown b/source/_components/cover.lutron.markdown new file mode 100644 index 00000000000..50cb5b1ef90 --- /dev/null +++ b/source/_components/cover.lutron.markdown @@ -0,0 +1,16 @@ +--- +layout: page +title: "Lutron Cover" +description: "Instructions 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.mqtt.markdown b/source/_components/cover.mqtt.markdown index e466514cadd..94cc013f787 100755 --- a/source/_components/cover.mqtt.markdown +++ b/source/_components/cover.mqtt.markdown @@ -35,33 +35,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 an `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 %} @@ -78,7 +170,7 @@ cover: name: "MQTT Cover" command_topic: "home-assistant/cover/set" state_topic: "home-assistant/cover/state" - availability_topic: "home-assistant/cover/availability" + availability_topic: "home-assistant/cover/availability" qos: 0 retain: true payload_open: "OPEN" diff --git a/source/_components/cover.tahoma.markdown b/source/_components/cover.tahoma.markdown new file mode 100644 index 00000000000..787b6fb126c --- /dev/null +++ b/source/_components/cover.tahoma.markdown @@ -0,0 +1,21 @@ +--- +layout: page +title: "Tahoma Cover" +description: "Instructions how to integrate Tahoma covers into Home Assistant." +date: 2017-07-18 12:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: tahoma.png +ha_category: Cover +ha_release: 0.59 +--- + +To use your tahoma covers in your installation, add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yml entry +cover: + platform: tahoma +``` diff --git a/source/_components/cover.tellstick.markdown b/source/_components/cover.tellstick.markdown new file mode 100644 index 00000000000..2008ef2a73d --- /dev/null +++ b/source/_components/cover.tellstick.markdown @@ -0,0 +1,25 @@ +--- +layout: page +title: "TellStick Cover" +description: "Instructions 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..1450be2d50d 100644 --- a/source/_components/cover.template.markdown +++ b/source/_components/cover.template.markdown @@ -48,10 +48,6 @@ cover: description: Name to use in the frontend. 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. - required: false - type: [string, list] value_template: description: Defines a template to get the state of the cover. Valid values are `open`/`true` or `closed`/`false`. [`value_template`](#value_template) and [`position_template`](#position_template) cannot be specified concurrently. required: exclusive @@ -201,9 +197,6 @@ cover: {% else %} mdi:window-closed {% endif %} - entity_id: - - cover.bedroom - - cover.livingroom sensor: - platform: template @@ -217,9 +210,6 @@ sensor: {% else %} closed {% endif %} - entity_id: - - cover.bedroom - - cover.livingroom script: cover_group: diff --git a/source/_components/cover.zwave.markdown b/source/_components/cover.zwave.markdown index b3204b21089..90547584ceb 100644 --- a/source/_components/cover.zwave.markdown +++ b/source/_components/cover.zwave.markdown @@ -2,7 +2,7 @@ layout: page title: "Z-Wave Cover" description: "Instructions how to setup the Z-Wave covers within Home Assistant." -date: 2016-08-24 14:15 +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..03a1d598145 --- /dev/null +++ b/source/_components/daikin.markdown @@ -0,0 +1,70 @@ +--- +layout: page +title: "Daikin AC" +description: "Instructions on how to integrate Hive devices with Home Assistant." +date: 2017-12-10 21:00 +sidebar: false +comments: false +sharing: true +footer: true +logo: N/A +ha_category: Climate +ha_release: 0.59 +ha_iot_class: "Local Polling" +--- + +### Description ### + +The 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: +```yaml +# Example configuration.yaml entry +daikin: +``` + +

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

+ +A full manual configuration example is give below: + +```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 + detault: 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. +

+ + +The Daikin Home Assistant platform currently supports the following Hive devices: + +- [Climate](/components/climate.daikin) +- [Sensor](/components/sensor.daikin) diff --git a/source/_components/deconz.markdown b/source/_components/deconz.markdown new file mode 100644 index 00000000000..6b65b086649 --- /dev/null +++ b/source/_components/deconz.markdown @@ -0,0 +1,148 @@ +--- +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/). + +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 GUI to create an API key. When you've generated the API key from Home Assistant, the API key will be stored in deconz.conf inside the home-assistant folder. + +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 +``` + +#### {% linkable_title Supported Device types %} + +- [Zigbee Lights](/components/light.deconz/) +- [Humidity Sensors](/components/sensor.deconz/) +- [Light Level Sensors](/components/sensor.deconz/) +- [OpenClose Detectors](/components/binary_sensor.deconz/) +- [Presence Detectors](/components/binary_sensor.deconz/) +- [Pressure Sensors](/components/sensor.deconz/) +- [Switches (Remote Controls)](/components/sensor.deconz/) +- [Temperature Sensors](/components/sensor.deconz/) + +{% 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 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. | +| `data` | No | Data is a JSON object with what data you want to alter. | + +{ "field": "/lights/1", "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. + +## {% linkable_title Examples %} + +### {% linkable_title Step up and step down input number with wireless dimmer %} + +```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: {% raw %}> + {% set bri = states.light.lamp.attributes.brightness | int %} + {{ [bri+30, 249] | min }}{% endraw %} + + - 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: {% raw %}> + {% set bri = states.light.lamp.attributes.brightness | int %} + {{ [bri-30, 0] | max }}{% endraw %} +``` diff --git a/source/_components/device_tracker.bluetooth_le_tracker.markdown b/source/_components/device_tracker.bluetooth_le_tracker.markdown index e0da81a826a..a9a47e20a81 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 infomation 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. -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 %} + +Normaly 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.gpslogger.markdown b/source/_components/device_tracker.gpslogger.markdown index 6b6a439cdee..909d620aae9 100644 --- a/source/_components/device_tracker.gpslogger.markdown +++ b/source/_components/device_tracker.gpslogger.markdown @@ -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 %} @@ -60,7 +67,7 @@ Add the above URL after you modified it with your settings into the **URL** fiel - 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. +- For Home Assistant only the above URL, as written, will work - do not add or remove any parameters. - 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]`. diff --git a/source/_components/device_tracker.hitron_coda.markdown b/source/_components/device_tracker.hitron_coda.markdown new file mode 100644 index 00000000000..fecdc2fd5ed --- /dev/null +++ b/source/_components/device_tracker.hitron_coda.markdown @@ -0,0 +1,44 @@ +--- +layout: page +title: "Hitron CODA Routers" +description: "Instructions on how to integrate Hitron CODA Routers into Home Assistant." +date: 2017-10-03 15:40 +sidebar: true +comments: false +sharing: true +footer: true +logo: hitron.png +ha_category: Presence Detection +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. + +To use a Hitron router in your installation, add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +device_tracker: + - platform: hitron_coda + host: !secret router_ip + username: !secret router_username + password: !secret router_password +``` + +{% configuration %} +host: + description: The IP address of your router, e.g., `192.168.0.1`. + required: true + type: string +username: + description: The username to login into the router (user should have read access to the web interface of the router). Usually "cusadmin". + required: true + type: string +password: + description: The password for the specified username. Usually your WiFi password. + 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.huawei_router.markdown b/source/_components/device_tracker.huawei_router.markdown index 42c7b22a4e4..6c9647ac3cd 100644 --- a/source/_components/device_tracker.huawei_router.markdown +++ b/source/_components/device_tracker.huawei_router.markdown @@ -7,13 +7,13 @@ 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). -Currently, this was only tested with the Huawei HG8247H (used by Vodafone Portugal). +Currently, this was only tested with the Huawei HG8247H and HG8247Q Smart Router (used by Vodafone Portugal). To use a Huawei router in your installation, add the following to your `configuration.yaml` file: diff --git a/source/_components/device_tracker.luci.markdown b/source/_components/device_tracker.luci.markdown index 937193752e5..32d0cde87b8 100644 --- a/source/_components/device_tracker.luci.markdown +++ b/source/_components/device_tracker.luci.markdown @@ -16,6 +16,10 @@ _This is one of the two ways we support OpenWRT. If you encounter problems, try 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 diff --git a/source/_components/device_tracker.markdown b/source/_components/device_tracker.markdown index 105dec1e7f3..25e29614980 100644 --- a/source/_components/device_tracker.markdown +++ b/source/_components/device_tracker.markdown @@ -26,15 +26,19 @@ 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`) | The extended example from above would look like the following sample: @@ -66,6 +70,10 @@ devicename: 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. | diff --git a/source/_components/device_tracker.meraki.markdown b/source/_components/device_tracker.meraki.markdown new file mode 100644 index 00000000000..a88aa1d7130 --- /dev/null +++ b/source/_components/device_tracker.meraki.markdown @@ -0,0 +1,37 @@ +--- +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. +Follow instructions [here](https://meraki.cisco.com/technologies/location-analytics-api) how to enable Location Analytics. + +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.nmap_tracker.markdown b/source/_components/device_tracker.nmap_tracker.markdown index 74b40f25eed..0ce79dfc3a9 100644 --- a/source/_components/device_tracker.nmap_tracker.markdown +++ b/source/_components/device_tracker.nmap_tracker.markdown @@ -15,7 +15,7 @@ featured: false As an alternative to the router-based device tracking, it is possible to directly scan the network for devices by using Nmap. The IP addresses to scan can be specified in any format that Nmap understands, including the network-prefix notation (`192.168.1.1/24`) and the range notation (`192.168.1.1-255`). -If you're on Debian or Ubuntu, you might have to install the packages for `arp` and `nmap`. Do so by running `$ sudo apt-get install net-tools nmap`. On a Fedora host run `$ sudo dnf -y install nmap`. +You might have to install the packages for `arp` and `nmap`. On Debian based hosts (for example Hassbian and Raspbian) do so by running `$ sudo apt-get install net-tools nmap`. On a Fedora host run `$ sudo dnf -y install nmap`.

If you are using [Hass.io](/hassio/) then just move forward to the configuration as all requirements are already fulfilled. @@ -29,7 +29,7 @@ To use this device tracker in your installation, add the following to your `conf # Example configuration.yaml entry device_tracker: - platform: nmap_tracker - hosts: 192.168.1.1/24 + hosts: 192.168.1.0/24 ``` Configuration variables: @@ -47,7 +47,7 @@ A full example for the `nmap` tracker could look like the following sample: # One whole subnet, and skipping two specific IPs. device_tracker: - platform: nmap_tracker - hosts: 192.168.1.1/24 + hosts: 192.168.1.0/24 home_interval: 10 exclude: - 192.168.1.12 @@ -60,7 +60,7 @@ device_tracker: device_tracker: - platform: nmap_tracker hosts: - - 192.168.1.1/24 + - 192.168.1.0/24 - 10.0.0.2 - 10.0.0.15 ``` diff --git a/source/_components/device_tracker.owntracks.markdown b/source/_components/device_tracker.owntracks.markdown index 20cf68ab97a..0bd137c0ab7 100644 --- a/source/_components/device_tracker.owntracks.markdown +++ b/source/_components/device_tracker.owntracks.markdown @@ -14,7 +14,11 @@ 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 phones and publish it to an MQTT broker. This platform will connect to the broker and monitor for new locations. + +

+The Android app for OwnTracks is no longer developed or supported, Zanzito is a drop in replacement for OwnTracks MQTT. +

This component requires [the MQTT component](/components/mqtt/) to be set up and works very well together with [the zone component](/components/zone/). @@ -32,6 +36,9 @@ Configuration variables: - **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. - **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,9 +48,14 @@ 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 %} diff --git a/source/_components/device_tracker.owntracks_http.markdown b/source/_components/device_tracker.owntracks_http.markdown index 7e91746e55a..718be249ad3 100644 --- a/source/_components/device_tracker.owntracks_http.markdown +++ b/source/_components/device_tracker.owntracks_http.markdown @@ -15,6 +15,10 @@ ha_release: 0.55 OwnTracks is a free and open source application that allows you to track your location in Home Assistant. This is a platform that supports OwnTracks via their HTTP publishing method. +

+The Android app for OwnTracks is no longer developed or supported. Consider [GPS Logger](/components/device_tracker.gpslogger/) as an alternative. +

+ To integrate Owntracks tracking via HTTP in Home Assistant, add the following section to your `configuration.yaml` file: ```yaml diff --git a/source/_components/device_tracker.snmp.markdown b/source/_components/device_tracker.snmp.markdown index b6a140f3920..60c14a1f873 100644 --- a/source/_components/device_tracker.snmp.markdown +++ b/source/_components/device_tracker.snmp.markdown @@ -19,7 +19,7 @@ A lot WiFi access points and WiFi routers support the Simple Network Management This device tracker needs SNMP to be enabled on the router. It could be that you need to install the SNMP support manually.

-OID examples: +The following OID examples pull the current MAC Address table from a router. This reflects all recent devices seen on the network. However, since devices are not removed until they time out, this is less effective for [device tracker component page](/components/device_tracker/) than desirable. It is recommended to use [Ping](/components/device_tracker.ping/) or [NMAP](/components/device_tracker.nmap_tracker/) instead. | Brand | Device/Firmware | OID | |---|---|---|---| @@ -33,6 +33,7 @@ OID examples: | 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` | 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.tile.markdown b/source/_components/device_tracker.tile.markdown new file mode 100644 index 00000000000..63ba3d693c8 --- /dev/null +++ b/source/_components/device_tracker.tile.markdown @@ -0,0 +1,47 @@ +--- +layout: page +title: "Tile" +description: "Instructions how to use Tile to track devices in Home Assistant." +date: 2017-11-08 20:40:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: tile.png +ha_release: 0.58 +ha_category: Presence Detection +ha_iot_class: "Cloud Polling" +--- + +The `tile` platform allows Home Assistant to utilize [Tile® Bluetooth trackers](https://www.thetileapp.com). +The official Tile mobile app handles the actual tracking of Tile devices using +the mobile device's Bluetooth and GPS. + +To integrate Tile into Home Assistant, add the following section to your +`configuration.yaml` file: + +```yaml +device_tracker: + - platform: tile + username: email@address.com + password: MY_PASSWORD_123 +``` + +{% configuration %} + username: + description: the email address for the Tile account + required: true + type: string + password: + description: the password for the Tile account + required: true + type: string + monitored_variables: + 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.unifi.markdown b/source/_components/device_tracker.unifi.markdown index af017915885..f2b5e2a4350 100644 --- a/source/_components/device_tracker.unifi.markdown +++ b/source/_components/device_tracker.unifi.markdown @@ -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,18 +20,63 @@ 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 + username: USERNAME + password: PASSWORD ``` -Configuration variables: - -- **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. +{% 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: optional + default: 300 +{% endconfiguration %} See the [device tracker component page](/components/device_tracker/) for instructions how to configure the people to be tracked. + +### {% 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 dedicate +virtual machine to avoid that situation. + +[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 new file mode 100644 index 00000000000..8c0bda46b8e --- /dev/null +++ b/source/_components/device_tracker.unifi_direct.markdown @@ -0,0 +1,45 @@ +--- +layout: page +title: "Ubiquiti Unifi direct AP" +description: "Instructions how to use a Unifi WAP as a device tracker." +date: 2017-11-17 14:59 +sidebar: true +comments: false +sharing: true +footer: true +logo: ubiquiti.png +ha_category: Presence Detection +ha_release: 0.59 +--- + + +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](https://home-assistant.io/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: + +```yaml +# Example configuration.yaml entry +device_tracker: + - platform: unifi_direct + host: YOUR_AP_IP_ADDRESS + username: YOUR_USERNAME + password: YOUR_PASSWORD +``` + +{% configuration %} +host: + description: The hostname or IP address of your Unifi AP. + required: true + type: string +username: + description: The SSH device username used to connect to your Unifi AP. + required: true + type: string +password: + description: The SSH device password used to connect to your Unifi AP. + 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.upc_connect.markdown b/source/_components/device_tracker.upc_connect.markdown index d58a1878e93..ca0a7e57b23 100644 --- a/source/_components/device_tracker.upc_connect.markdown +++ b/source/_components/device_tracker.upc_connect.markdown @@ -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/digital_ocean.markdown b/source/_components/digital_ocean.markdown index 6c5c190ba76..c2e26b9aa3b 100644 --- a/source/_components/digital_ocean.markdown +++ b/source/_components/digital_ocean.markdown @@ -26,6 +26,10 @@ digital_ocean: access_token: YOUR_API_KEY ``` -Configuration variables: +{% configuration %} +access_token: + description: Your Digital Ocean API access token. + required: true + type: string +{% endconfiguration %} -- **access_token** (*Required*): Your Digital Ocean API access token. diff --git a/source/_components/discovery.markdown b/source/_components/discovery.markdown index 62f9c0c1b34..f6629e31598 100644 --- a/source/_components/discovery.markdown +++ b/source/_components/discovery.markdown @@ -35,6 +35,8 @@ Home Assistant can discover and automatically configure [zeroconf](https://en.wi * [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/) + * [Telldus Live](https://home-assistant.io/components/tellduslive/) + * [Wink](https://home-assistant.io/components/wink/) * [Yamaha media player](https://home-assistant.io/components/media_player.yamaha/) * [Yeelight Sunflower bulb](https://home-assistant.io/components/light.yeelightsunflower/) @@ -77,9 +79,11 @@ Valid values for ignore are: * `sabnzbd`: SABnzbd downloader * `samsung_tv`: Samsung TVs * `sonos`: Sonos speakers + * `tellduslive`: Telldus Live + * `wink`: Wink Hub * `yamaha`: Yamaha media player * `yeelight`: Yeelight Sunflower bulb - +

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. @@ -94,7 +98,9 @@ If you are on Windows and you're using Python 3.5, download the [Netifaces](http

-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. +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. + +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).

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 new file mode 100644 index 00000000000..062c0fbfea8 --- /dev/null +++ b/source/_components/dominos.markdown @@ -0,0 +1,80 @@ +--- +layout: page +title: "Dominos Pizza" +description: "Instructions on how to setup Dominos Pizza ordering within Home Assistant." +date: 2017-11-05 17:30 +sidebar: true +comments: false +sharing: true +footer: true +logo: dominos.png +ha_category: Other +ha_version: 0.59 +--- + +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. + +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. + +Currently, there is no support in this component for toppings, coupons or order tracking. + +```yaml +dominos: + country_code: ca + 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: + - P12IPAZA +``` + +Now you can use the Dominos service to order pizza within your automations: + +```yaml +- service: dominos.order + data: + order_entity_id: dominos.medium_pan +``` + +{% configuration %} + country_code: + required: true + description: \'ca\' or \'us\', depending on your location + type: string + first_name: + required: true + description: Your first name + type: string + last_name: + required: true + description: Your last name + type: string + email: + required: true + description: Your email address + type: string + phone: + required: true + description: Your phone number + type: string + address: + required: true + description: Your delivery address + type: string + show_menu: + required: false + description: Dumps product codes from your nearest store into your log (for use in with the custom panel) + type: integer + orders: + required: false + description: Sets of product codes to use for ordering + type: list +{% endconfiguration %} diff --git a/source/_components/doorbird.markdown b/source/_components/doorbird.markdown index 0b7f1e4120a..4ce686ec640 100644 --- a/source/_components/doorbird.markdown +++ b/source/_components/doorbird.markdown @@ -30,3 +30,8 @@ Configuration variables: - **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. +- **doorbell_events** (*Optional*): Setting this to `true` this will register a callback URL with the device so that events can be published to the event bus when the doorbell rings. + +

+Enabling `doorbell_events` will delete all other registered push notification services with the device every time Home Assistant starts. This will not affect notifications delivered by the DoorBird mobile app. +

diff --git a/source/_components/ecobee.markdown b/source/_components/ecobee.markdown index a3e6da2ceef..1d18fb430d1 100644 --- a/source/_components/ecobee.markdown +++ b/source/_components/ecobee.markdown @@ -61,3 +61,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/emulated_hue.markdown b/source/_components/emulated_hue.markdown index 0244bc546aa..0082534a2ad 100644 --- a/source/_components/emulated_hue.markdown +++ b/source/_components/emulated_hue.markdown @@ -13,8 +13,8 @@ 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](https://home-assistant.io/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 @@ -22,7 +22,7 @@ entities. The driving use case behind this functionality is to allow Home Assist 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.

-A physical Hue Bridge is required for the lights to function - this virtual bridge will not replace a physical bridge. +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.

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/fan.insteon_local.markdown b/source/_components/fan.insteon_local.markdown index 8476fc43d06..359f099477b 100644 --- a/source/_components/fan.insteon_local.markdown +++ b/source/_components/fan.insteon_local.markdown @@ -14,21 +14,4 @@ ha_version: 0.48 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 -``` - +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 disovered and added to Home Assistant. The device names will be the Insteon address of the fans. diff --git a/source/_components/fan.mqtt.markdown b/source/_components/fan.mqtt.markdown index 82c5193ba30..1a0329404f8 100644 --- a/source/_components/fan.mqtt.markdown +++ b/source/_components/fan.mqtt.markdown @@ -30,30 +30,117 @@ fan: 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. diff --git a/source/_components/fan.xiaomi_miio.markdown b/source/_components/fan.xiaomi_miio.markdown index 7acf1291e45..23110f63028 100644 --- a/source/_components/fan.xiaomi_miio.markdown +++ b/source/_components/fan.xiaomi_miio.markdown @@ -8,36 +8,38 @@ comments: false sharing: true footer: true logo: xiaomi.png -ha_category: Switch +ha_category: Fan ha_version: 0.57 ha_iot_class: "Local Polling" --- -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 2, Air Purifier 2S and Air Purifier Pro. Currently, the supported features are * 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 -* States +* Favorite Level (0...16) +* Attributes - power - aqi + - average_aqi - humidity - temperature - mode + - favorite_level - led - led_brightness - buzzer - child_lock - - brightness - - favorite_level - - filter1_life - - f1_hour_used - - use_time - - motor1_speed + - purify_volume + - filter_life_remaining + - filter_hours_used + - motor_speed + ## {% linkable_title Setup %} @@ -66,7 +68,7 @@ Turn the buzzer on. | Service data attribute | Optional | Description | |---------------------------|----------|-------------------------------------------------------| -| `entity_id` | yes | Only act on specific air purifier. Else targets all. | +| `entity_id` | yes | Only act on a specfici air purifier. Else targets all. | ### Service fan/xiaomi_miio_set_buzzer_off @@ -74,7 +76,7 @@ Turn the buzzer off. | Service data attribute | Optional | Description | |---------------------------|----------|-------------------------------------------------------| -| `entity_id` | yes | Only act on specific air purifier. Else targets all. | +| `entity_id` | yes | Only act on a specfici air purifier. Else targets all. | ### Service fan/xiaomi_miio_set_led_on @@ -82,7 +84,7 @@ Turn the led on. | Service data attribute | Optional | Description | |---------------------------|----------|-------------------------------------------------------| -| `entity_id` | yes | Only act on specific air purifier. Else targets all. | +| `entity_id` | yes | Only act on a specfici air purifier. Else targets all. | ### Service fan/xiaomi_miio_set_led_off @@ -90,7 +92,23 @@ Turn the led off. | Service data attribute | Optional | Description | |---------------------------|----------|-------------------------------------------------------| -| `entity_id` | yes | Only act on specific air purifier. Else targets all. | +| `entity_id` | yes | Only act on a specfici air purifier. Else targets all. | + +### 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 specfici air purifier. Else targets all. | + +### 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 specfici air purifier. Else targets all. | ### Service fan/xiaomi_miio_set_led_brightness @@ -98,7 +116,7 @@ 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. | +| `entity_id` | yes | Only act on a specfici air purifier. Else targets all. | | `brightness` | no | Brightness, between 0 and 2. | ### Service fan/xiaomi_miio_set_favorite_level @@ -107,5 +125,5 @@ 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. | +| `entity_id` | yes | Only act on a specfici air purifier. Else targets all. | | `level` | no | Level, between 0 and 16. | diff --git a/source/_components/frontend.markdown b/source/_components/frontend.markdown index dc48dd837fb..92c0e8d8dd4 100644 --- a/source/_components/frontend.markdown +++ b/source/_components/frontend.markdown @@ -19,6 +19,11 @@ frontend: ``` {% configuration %} + javascript_version: + 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: auto themes: description: Allow to define different themes. See below for further details. required: false @@ -34,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 addtional [resources](/developers/frontend_creating_custom_ui/) to load in `latest` javascript mode." + required: false + type: list + extra_html_url_es5: + description: "List of addtional [resources](/developers/frontend_creating_custom_ui/) to load in `es5` javascript mode." required: false type: list development_repo: @@ -101,8 +110,12 @@ automation: ### {% linkable_title Manual Theme Selection %} -When themes are enabled in the `configuration.yaml` file, a new option will show up in the Configuration panel under `configuration.yaml` called "Set a theme." You can then choose any installed theme from the dropdown list and it will be applied immediately. +When themes are enabled in the `configuration.yaml` file, a new option will show up in the Configuration panel under **General** called "Set a theme." You can then choose any installed theme from the dropdown list and it will be applied immediately. +

+ + Set a theme +

## {% linkable_title Loading extra HTML %} @@ -118,4 +131,13 @@ frontend: - /file2.html ``` -Those will be loaded via `` on any page (states and panels) +Those will be loaded via `` on any page (states and panels). + +### {% 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. + +

+ + Choose a Language +

diff --git a/source/_components/google_assistant.markdown b/source/_components/google_assistant.markdown index 23c1ce73397..78ce76d51a9 100644 --- a/source/_components/google_assistant.markdown +++ b/source/_components/google_assistant.markdown @@ -13,14 +13,15 @@ featured: true ha_release: 0.56 --- -# Google Assistant Docs +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 %} +To enable this, add the following lines to your `configuration.yaml` file: ```yaml # Example configuration.yaml entry @@ -28,57 +29,95 @@ google_assistant: project_id: someproject-2d0b8 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: [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. -* *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 + type: light + light.living_room: + expose: false ``` -*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 setup below). If not provided then the request_sync service is not exposed. + required: false + type: string +expose_by_default: + description: Expose devices in all supported domains by default. + 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 + type: + description: Override the domain how Google Assistant has to interpretet the entity. For example, set to `light` for a switch entity to have it be handeld as a light. + required: false + type: string +{% endconfiguration %} + +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`) +1. Download the [gactions CLI](https://developers.google.com/actions/tools/gactions-cli) (you'll use this later) - you can download and run this anywhere and on any machine, just remember where you put it for later (and don't forget to run `chmod +x gactions`to make it executable on mac or linux) 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. @@ -107,19 +146,37 @@ homeassistant: 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. +4. Replace `PACKAGE_NAME` with `project.json` and run that command in a console from the same directory you saved `project.json` in (you'll need to put `./` before `gactions` so that it reads `./gactions` if you're running it on Linux or Windows). 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: Should be the same as `client_id` from your hass config 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. + 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`. If you have set `api_password:` add this password to the URL `https://[YOUR HOME ASSISTANT URL]/api/google_assistant/auth?api_password=[YOUR API PASSWORD]`) + 4. Configure your client. Add scopes for `email` and `name`. + 5. Testing instructions: Enter anything. It 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. 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. 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. +10. If you want to allow other household users to control the devices: + 1. Go to the developer console using the 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, to update devices without unlinking and relinking, in Home Assistant, then enable Homegraph API for your project: + 1. Go to the [cloud console](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 + +### {% linkable_title Troubleshooting the request_sync service %} + +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. diff --git a/source/_components/group.markdown b/source/_components/group.markdown index 5dd01ab44c5..9a515fafc6f 100644 --- a/source/_components/group.markdown +++ b/source/_components/group.markdown @@ -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 @@ -79,20 +79,19 @@ Notice in the example below that in order to refer to the group "Living Room", y entities: - light.light_family_1 - binary_sensor.motion_living - Bedroom: light.light_bedroom, switch.sleeping - Rooms: view: yes name: Rooms entities: - group.living_room - group.bedroom -``` +``` ## {% linkable_title Default groups %} Some components automatically create special groups containing component entities. These groups are named like `group.all_...`, for example: + - `group.all_switches` - `group.all_lights` - `group.all_devices` @@ -105,13 +104,11 @@ Default groups appear in the HOME tab, if not overridden by user views and group ```yaml # Example configuration.yaml to include default groups in custom view - customize: group.all_automations: hidden: false group.all_scripts: hidden: false - group: automation_view: name: Automation @@ -124,3 +121,22 @@ group: ## {% linkable_title Group behaviour %} 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`. + +## {% linkable_title Customize group order %} +You can also order your groups using [customize](/docs/configuration/customizing-devices/) with `order: ` if they don't show up in the order you want them in. + +```yaml +# Example configuration.yaml to order groups with order: +customize: + group.all_automations: + order: 1 + group.all_scripts: + order: 2 +group: + automation_view: + name: Automation + view: yes + entities: + - group.all_automations + - group.all_scripts +``` diff --git a/source/_components/hdmi_cec.markdown b/source/_components/hdmi_cec.markdown index 43c95c45ada..758f8d468e9 100644 --- a/source/_components/hdmi_cec.markdown +++ b/source/_components/hdmi_cec.markdown @@ -154,7 +154,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 +179,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 +222,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..b252d3b205f 100644 --- a/source/_components/history.markdown +++ b/source/_components/history.markdown @@ -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,6 +87,21 @@ 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. diff --git a/source/_components/hive.markdown b/source/_components/hive.markdown new file mode 100644 index 00000000000..8f760b08c76 --- /dev/null +++ b/source/_components/hive.markdown @@ -0,0 +1,55 @@ +--- +layout: page +title: "Hive" +description: "Instructions on how to integrate Hive devices with Home Assistant." +date: 2017-09-24 21:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: hive.png +ha_category: Hub +ha_release: 0.59 +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. + +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: + +```yaml +# Example configuration.yaml entry +hive: + username: YOUR_USERNAME + password: YOUR_PASSWORD +``` + +{% configuration %} +username: + description: Your username from [https://my.hivehome.com](https://my.hivehome.com). + required: true + type: string +password: + description: Your password from [https://my.hivehome.com](https://my.hivehome.com). + required: true + type: string +scan_interval: + description: The time in minutes between Hive API calls + required: false + type: int + default: 2 +{% endconfiguration %} + + +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 Colour Changing +- Hive Active Plug +- Hive Window or Door Sensor +- Hive Motion Sensor diff --git a/source/_components/homematic.markdown b/source/_components/homematic.markdown index 93cf903eb44..73287f74209 100644 --- a/source/_components/homematic.markdown +++ b/source/_components/homematic.markdown @@ -28,58 +28,69 @@ To set up the component, add the following information to your `configuration.ya ```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. - **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 %} @@ -115,7 +126,7 @@ 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 %} @@ -154,8 +165,8 @@ The name depends on if you chose to resolve names or not. If not, it will be the * *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.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 @@ -184,9 +195,9 @@ 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 ``` @@ -200,7 +211,7 @@ Manually turn on a switch actor ```yaml ... action: - service: homematic.set_dev_value + service: homematic.set_device_value data: address: LEQ1234567 channel: 1 @@ -212,7 +223,7 @@ Manually set temperature on thermostat ```yaml ... action: - service: homematic.set_dev_value + service: homematic.set_device_value data: address: LEQ1234567 channel: 4 diff --git a/source/_components/http.markdown b/source/_components/http.markdown index e6e396109c0..0a6d20b2cd0 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: @@ -61,9 +65,9 @@ http: 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/). +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. diff --git a/source/_components/hue.markdown b/source/_components/hue.markdown new file mode 100644 index 00000000000..46d8f2cc9f3 --- /dev/null +++ b/source/_components/hue.markdown @@ -0,0 +1,144 @@ +--- +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 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** (*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 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 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 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/ifttt.markdown b/source/_components/ifttt.markdown index fc330b5f799..764138d2725 100644 --- a/source/_components/ifttt.markdown +++ b/source/_components/ifttt.markdown @@ -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/image_processing.seven_segments.markdown b/source/_components/image_processing.seven_segments.markdown index db0ebf4f1b7..13249bc52b1 100644 --- a/source/_components/image_processing.seven_segments.markdown +++ b/source/_components/image_processing.seven_segments.markdown @@ -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 60bd6cac432..f2291bda29d 100644 --- a/source/_components/influxdb.markdown +++ b/source/_components/influxdb.markdown @@ -34,6 +34,8 @@ Configuration variables: - **database** (*Optional*): Name of the database to use. Defaults to `home_assistant`. The database must already exist. - **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. @@ -175,6 +177,7 @@ influxdb: password: MY_PASSWORD ssl: true verify_ssl: true + max_retries: 3 default_measurement: state exclude: entities: diff --git a/source/_components/input_boolean.markdown b/source/_components/input_boolean.markdown index 61e82ff846c..ff2aa46ca85 100644 --- a/source/_components/input_boolean.markdown +++ b/source/_components/input_boolean.markdown @@ -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 supports the `restore_state` function which restores the state after Home Assistant has started to the value it has been before Home Assistant stopped. To use this feature please make sure that the [`recorder`](/components/recorder/) component is enabled and your entity does not have a value set 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 f9351f09848..4b9d9ae568a 100644 --- a/source/_components/input_datetime.markdown +++ b/source/_components/input_datetime.markdown @@ -33,18 +33,45 @@ 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'. +### {% 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 availabel 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 supports the `restore_state` function which restores the state after Home Assistant has started to the value it has been before Home Assistant stopped. To use this feature please make sure that the [`recorder`](/components/recorder/) component is enabled and your entity does not have a value set 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/input_number.markdown b/source/_components/input_number.markdown index 9c041e1b7f3..32829baeff4 100644 --- a/source/_components/input_number.markdown +++ b/source/_components/input_number.markdown @@ -39,27 +39,61 @@ input_number: mode: box ``` -Configuration variables: -- **[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. +{% 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: Maxium 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 %} + +### {% linkable_title Restore State %} + +This component supports the `restore_state` function which restores the state after Home Assistant has started to the value it has been before Home Assistant stopped. To use this feature please make sure that the [`recorder`](/components/recorder/) component is enabled and your entity does not have a value set 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 +101,6 @@ input_number: min: 0 max: 254 step: 1 - -# Automation. automation: - alias: Bedroom Light - Adjust Brightness trigger: @@ -76,20 +108,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 +131,6 @@ input_select: - Relax - 'OFF' initial: 'Select' - -# Define input_number input_number: bedroom_brightness: name: Brightness @@ -110,8 +138,6 @@ input_number: min: 0 max: 254 step: 1 - -# Automation. automation: - alias: Bedroom Light - Custom trigger: @@ -120,21 +146,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 +167,31 @@ 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 %} diff --git a/source/_components/input_select.markdown b/source/_components/input_select.markdown index e8cf94f94d1..bf25b89d5f7 100644 --- a/source/_components/input_select.markdown +++ b/source/_components/input_select.markdown @@ -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 supports the `restore_state` function which restores the state after Home Assistant has started to the value it has been before Home Assistant stopped. To use this feature please make sure that the [`recorder`](/components/recorder/) component is enabled and your entity does not have a value set 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..2fa07711af3 100644 --- a/source/_components/input_text.markdown +++ b/source/_components/input_text.markdown @@ -29,11 +29,38 @@ input_text: pattern: '[a-fA-F0-9]*' ``` -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 +{% 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 supports the `restore_state` function which restores the state after Home Assistant has started to the value it has been before Home Assistant stopped. To use this feature please make sure that the [`recorder`](/components/recorder/) component is enabled and your entity does not have a value set 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_local.markdown b/source/_components/insteon_local.markdown index 96a339f0f03..fba10871713 100644 --- a/source/_components/insteon_local.markdown +++ b/source/_components/insteon_local.markdown @@ -33,9 +33,9 @@ Configuration variables: - **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 %} +### {% linkable_title Full configuration %} -The `insteon_local` component currently supports both lights (dimmers) and switches. A full configuration may look like so: +The `insteon_local` component currently supports lights (dimmers), switches and fans. ```yaml insteon_local: @@ -44,14 +44,4 @@ insteon_local: password: YOUR HUB PASSWORD timeout: 10 port: 25105 - -light: - - platform: insteon_local - -switch: - - platform: insteon_local - -fan: - - platform: insteon_local ``` - diff --git a/source/_components/isy994.markdown b/source/_components/isy994.markdown index 8cf050f2383..558765a764b 100644 --- a/source/_components/isy994.markdown +++ b/source/_components/isy994.markdown @@ -34,12 +34,55 @@ 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](https://home-assistant.io/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: diff --git a/source/_components/joaoapps_join.markdown b/source/_components/joaoapps_join.markdown index e27aa82e1a1..c0b94b2eb58 100644 --- a/source/_components/joaoapps_join.markdown +++ b/source/_components/joaoapps_join.markdown @@ -13,22 +13,21 @@ 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 +41,20 @@ 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/knx.markdown b/source/_components/knx.markdown index b813ac3aee4..ff8c0786fcc 100644 --- a/source/_components/knx.markdown +++ b/source/_components/knx.markdown @@ -18,6 +18,10 @@ The [KNX](http://www.knx.org) integration for Home Assistant allows you to conne The component requires a local KNX/IP interface like the [Weinzierl 730](http://www.weinzierl.de/index.php/en/all-knx/knx-devices-en/knx-ip-interface-730-en). Through this, it will send and receive commands to and from other devices to the KNX bus. +

+ Please note, the `knx` platform does not support Windows and needs at least python version 3.5. +

+ There is currently support for the following device types within Home Assistant: - [Binary Sensor](/components/binary_sensor.knx) @@ -79,6 +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. ### {% linkable_title Services %} diff --git a/source/_components/light.ads.markdown b/source/_components/light.ads.markdown new file mode 100644 index 00000000000..b5188cf33e8 --- /dev/null +++ b/source/_components/light.ads.markdown @@ -0,0 +1,42 @@ +--- +layout: page +title: "ADS Light" +description: Instructions 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.deconz.markdown b/source/_components/light.deconz.markdown new file mode 100644 index 00000000000..7ee2d591950 --- /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. + +Entity Ids 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 to be supported sensors %} + +- 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..48ce82aa3aa 100644 --- a/source/_components/light.decora_wifi.markdown +++ b/source/_components/light.decora_wifi.markdown @@ -17,7 +17,8 @@ Support for [Leviton Decora Wi-Fi](http://www.leviton.com/en/products/lighting-c 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: diff --git a/source/_components/light.greenwave.markdown b/source/_components/light.greenwave.markdown new file mode 100644 index 00000000000..a0cba942d4c --- /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.hive.markdown b/source/_components/light.hive.markdown new file mode 100644 index 00000000000..89f55459fb0 --- /dev/null +++ b/source/_components/light.hive.markdown @@ -0,0 +1,29 @@ +--- +layout: page +title: "Hive Light" +description: "Instructions on how to integrate Hive lights with Home Assistant." +date: 2017-09-24 21:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: hive.png +ha_category: Light +ha_release: 0.59 +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 component supports the following Hive products: +- **Hive Active Light Dimmable** +- **Hive Active Light Cool to Warm White** +- **Hive Active Light Colour Changing** + + +

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

+ + diff --git a/source/_components/light.hue.markdown b/source/_components/light.hue.markdown index 871972d4f0c..d4d37548b6b 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 how to integrate Philips Hue lights into Home Assistant." date: 2015-03-23 20:09 sidebar: true comments: false @@ -14,119 +14,8 @@ 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..7f3b23ad6c3 100644 --- a/source/_components/light.hyperion.markdown +++ b/source/_components/light.hyperion.markdown @@ -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.insteon_local.markdown b/source/_components/light.insteon_local.markdown index 14f91598c91..06af902dfd7 100644 --- a/source/_components/light.insteon_local.markdown +++ b/source/_components/light.insteon_local.markdown @@ -15,22 +15,4 @@ ha_iot_class: "Local Push" 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 disovered and added to Home Assistant. The device names will be the Insteon address of the lights. diff --git a/source/_components/light.mochad.markdown b/source/_components/light.mochad.markdown index 0bf8b817fe6..2902cb71be0 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 how to integrate X10 Mochad lights into Home Assistant." date: 2017-07-14 11:29 sidebar: true comments: false @@ -11,7 +11,7 @@ ha_category: Light ha_release: 0.51 --- -The `mochad` switch platform lets you control an X10 enabled dimmer/light +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: @@ -28,5 +28,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 99a1746623c..33f76eb5cc1 100644 --- a/source/_components/light.mqtt.markdown +++ b/source/_components/light.mqtt.markdown @@ -27,39 +27,153 @@ light: 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. -- **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 157 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. + 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_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. diff --git a/source/_components/light.mqtt_json.markdown b/source/_components/light.mqtt_json.markdown index 54732fe5bff..d14f58001a4 100644 --- a/source/_components/light.mqtt_json.markdown +++ b/source/_components/light.mqtt_json.markdown @@ -48,23 +48,99 @@ 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 +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. @@ -120,6 +196,29 @@ 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 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. diff --git a/source/_components/light.mqtt_template.markdown b/source/_components/light.mqtt_template.markdown index 3eed0fa3445..5a13ea9dfb6 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. diff --git a/source/_components/light.mystrom.markdown b/source/_components/light.mystrom.markdown index ea1334c3f97..f9ceacdb226 100644 --- a/source/_components/light.mystrom.markdown +++ b/source/_components/light.mystrom.markdown @@ -26,11 +26,21 @@ light: mac: MAC_ADDRESS ``` -Configuration variables: - -- **host** (*Required*): The IP address of your myStrom WiFi Bulb, eg. `192.168.1.32`. -- **mac** (*Required*): The MAC address of your myStrom WiFi Bulb, eg. `5AAC8CA542F3`. -- **name** (*Optional*): The name to use when displaying this light. +{% configuration %} +host: + description: "The IP address of your myStrom WiFi Bulb, e.g., `192.168.1.32`." + required: true + type: string +mac: + description: "The MAC address of your myStrom WiFi Bulb, e.g., `5AAC8CA542F3`." + required: true + type: string +name: + description: The name to use when displaying this bulb. + required: false + type: string + default: myStrom Bulb +{% endconfiguration %} Check if you are able to access the light located at `IP_ADRRESS`. The details about your light is provided as a JSON response. diff --git a/source/_components/light.template.markdown b/source/_components/light.template.markdown index 69f0315c940..58648b4735b 100755 --- a/source/_components/light.template.markdown +++ b/source/_components/light.template.markdown @@ -42,7 +42,7 @@ light: {% endraw %} {% configuration %} - switches: + lights: description: List of your lights. required: true type: map @@ -51,10 +51,6 @@ light: description: Name to use in the frontend. 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. - required: false - type: [string, list] value_template: description: Defines a template to get the state of the light. required: false diff --git a/source/_components/light.tplink.markdown b/source/_components/light.tplink.markdown index 68fff983950..71fc4e97171 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 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.wemo.markdown b/source/_components/light.wemo.markdown index a2ff553aada..df44818d044 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 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.x10.markdown b/source/_components/light.x10.markdown index 7e0a52fd58a..b79a8814413 100644 --- a/source/_components/light.x10.markdown +++ b/source/_components/light.x10.markdown @@ -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.yeelight.markdown b/source/_components/light.yeelight.markdown index 426b4754b0b..2d836c596a9 100644 --- a/source/_components/light.yeelight.markdown +++ b/source/_components/light.yeelight.markdown @@ -47,8 +47,9 @@ Per default the bulb limits the amount of requests per minute to 60, a limitatio ### {% linkable_title Initial setup %}

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 "Developer Mode" Developer 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 ...) +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 ...). +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,6 +59,7 @@ 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 +- **YLDD01YL**: Lightstrip (Color) - **YLDD02YL**: Lightstrip (Color) diff --git a/source/_components/linode.markdown b/source/_components/linode.markdown index 49336ba74a1..623132c0448 100644 --- a/source/_components/linode.markdown +++ b/source/_components/linode.markdown @@ -13,7 +13,7 @@ ha_release: 0.57 ha_iot_class: "Cloud Polling" --- -The `linode` component allows you to access the information about your [Linode](https://www.linode.com) systems from Home Assistant. +The `linode` component allows you to access the information about your [Linode](https://linode.com) systems from Home Assistant. Obtain your oAuth2 Access Token from Linode account. * diff --git a/source/_components/lirc.markdown b/source/_components/lirc.markdown index 72ea7b545ef..ffe675ea0c4 100644 --- a/source/_components/lirc.markdown +++ b/source/_components/lirc.markdown @@ -26,9 +26,15 @@ To allow Home Assistant to talk to your IR receiver, you need to first make sure $ sudo apt-get install lirc liblircclient-dev ``` -

-If you are configuring on a Raspberry Pi, there are excellent instructions with GPIO schematics and driver configurations [here](http://alexba.in/blog/2013/01/06/setting-up-lirc-on-the-raspberrypi/). Consider following these. +If you are configuring on a Raspberry Pi, there are excellent instructions with GPIO schematics and driver configurations [here](http://alexba.in/blog/2013/01/06/setting-up-lirc-on-the-raspberrypi/). Take notice, the instructions in this blog are valid for Raspian Jesse where lirc 0.9.0 was included in the debian package. In Raspian Stretch lirc 0.9.4 is included in the Debian package. +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.

### {% linkable_title Configuring LIRC %} diff --git a/source/_components/lock.mqtt.markdown b/source/_components/lock.mqtt.markdown index 6f91de7d133..8ed47ccf4ab 100644 --- a/source/_components/lock.mqtt.markdown +++ b/source/_components/lock.mqtt.markdown @@ -30,17 +30,64 @@ lock: 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.sesame.markdown b/source/_components/lock.sesame.markdown index 121d337cefb..01d9910fdac 100644 --- a/source/_components/lock.sesame.markdown +++ b/source/_components/lock.sesame.markdown @@ -17,7 +17,7 @@ The `sesame` platform allows you to control your [Sesame](https://candyhouse.co/ 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: 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/lutron_caseta.markdown b/source/_components/lutron_caseta.markdown index c2a3f41f7c6..912bd82dc41 100644 --- a/source/_components/lutron_caseta.markdown +++ b/source/_components/lutron_caseta.markdown @@ -27,17 +27,25 @@ The currently supported Caseta devices are: 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, add the following to your `configuration.yaml` file using the IP of your Smart Bridge: +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. + +Once you have the three necessary files, place them in your configuration directory and add the following to your `configuration.yaml`: ```yaml # Example configuration.yaml entry lutron_caseta: host: IP_ADDRESS + keyfile: caseta.key + certfile: caseta.crt + ca_certs: caseta-bridge.crt ``` Configuration variables: - **host** (*Required*): The IP address of the Lutron Smart Bridge. +- **keyfile** (*Required*): The private key that Home Assistant will use to authenticate to the bridge. +- **certfile** (*Required*): The certificate chain that Home Assistant will use to authenticate to the bridge. +- **ca_certs** (*Required*): The list of certificate authorities (usually only one) that Home Assistant will expect when connecting to the bridge.

It is recommended to assign a static IP address to your Lutron Smart Bridge. This ensures that it won't change IP address, so you won't have to change the `host` if it reboots and comes up with a different IP address. diff --git a/source/_components/maxcube.markdown b/source/_components/maxcube.markdown index c26cbe114bc..c9645e9fc59 100644 --- a/source/_components/maxcube.markdown +++ b/source/_components/maxcube.markdown @@ -30,7 +30,7 @@ A `maxcube` section must be present in the `configuration.yaml` file and contain ```yaml # Example configuration.yaml entry maxcube: - host: 192.168.0.20 + host: 192.168.0.20 ``` Configuration variables: - **host** (*Required*): The IP address of the eQ-3 MAX! Cube to use. diff --git a/source/_components/media_player.aquostv.markdown b/source/_components/media_player.aquostv.markdown index 2c764f46873..0e3dbcba7e0 100644 --- a/source/_components/media_player.aquostv.markdown +++ b/source/_components/media_player.aquostv.markdown @@ -52,5 +52,7 @@ Currently known supported models: - LC-52LE925UN - 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.cast.markdown b/source/_components/media_player.cast.markdown index 52d0e1d39c0..63271c16760 100644 --- a/source/_components/media_player.cast.markdown +++ b/source/_components/media_player.cast.markdown @@ -17,7 +17,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`: +The Chromecast platform can also be forced to load by adding the following lines to your `configuration.yaml`: ```yaml # Example configuration.yaml entry @@ -28,4 +28,15 @@ media_player: 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) +- **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) + +## {% linkable_title Example %} + +By setting `host:` you can specify the Chromecast to use. + +```yaml +# Example configuration.yaml entry +media_player: + - platform: cast + host: 192.168.1.10 +``` diff --git a/source/_components/media_player.denonavr.markdown b/source/_components/media_player.denonavr.markdown index a64c85c44b3..9d9e50da1d4 100644 --- a/source/_components/media_player.denonavr.markdown +++ b/source/_components/media_player.denonavr.markdown @@ -18,6 +18,7 @@ The `denonavr` platform allows you to control a [Denon Network Receivers](http:/ Supported devices: +- Denon AVR-X1300W - Denon AVR-X2000 - Denon AVR-X2100W - Denon AVR-X4100W diff --git a/source/_components/media_player.markdown b/source/_components/media_player.markdown index 18350ce1326..62c1af3a4cc 100644 --- a/source/_components/media_player.markdown +++ b/source/_components/media_player.markdown @@ -14,7 +14,7 @@ Interacts with media players on your network. Please check the sidebar for a ful ## {% 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 | | ---------------------- | -------- | ------------------------------------------------ | @@ -58,11 +58,11 @@ Available services: `turn_on`, `turn_off`, `toggle`, `volume_up`, `volume_down`, #### {% 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.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.samsungtv.markdown b/source/_components/media_player.samsungtv.markdown index 511bdeee001..c743a692698 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 @@ -55,17 +56,22 @@ Currently known supported models: - U6300 (port must be set to 8001, and `pip3 install websocket-client` must be executed) - K6500AF (port must be set to 8001) - KS8005 (port must be set to 8001, and `pip3 install websocket-client` must be executed) +- KU6290 (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) +- 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) 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 - 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) 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. diff --git a/source/_components/media_player.sonos.markdown b/source/_components/media_player.sonos.markdown index 9f54fa81732..3afe420ff4d 100644 --- a/source/_components/media_player.sonos.markdown +++ b/source/_components/media_player.sonos.markdown @@ -109,7 +109,7 @@ Clear the sleep timer on a speaker, if one is set. ### {% linkable_title Service `sonos_update_alarm` %} -Update an existing sonos alarm. +Update an existing Sonos alarm. | Service data attribute | Optional | Description | | ---------------------- | -------- | ----------- | @@ -119,3 +119,15 @@ Update an existing sonos 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. + +### {% 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. 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..217b625b8d5 --- /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: USERNAME + password: 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 1d19ddadcf6..106f114f780 100644 --- a/source/_components/media_player.universal.markdown +++ b/source/_components/media_player.universal.markdown @@ -14,7 +14,7 @@ featured: false Universal Media Players combine multiple existing entities in Home Assistant into one media player entity. This is used for creating a single entity that controls an entire media center. -Multiple Media Player entities can be controlled from a Universal Media Player. Additionally, the Universal Media Player allows volume and power commands to be re-routed to other entities in Home Assistant. This allows the power and volume to control external devices like a television or audio receiver. +Multiple media player entities can be controlled from an universal media player. Additionally, the universal media player allows volume and power commands to be re-routed to other entities in Home Assistant. This allows the power and volume to control external devices like a television or audio receiver. A Universal Media Player is created in `configuration.yaml` as follows. @@ -47,23 +47,46 @@ media_player: state: ENTITY_ID|ATTRIBUTE ``` -Configuration variables: +{% configuration %} +name: + description: The name to assign the player. + required: true + type: string +children: + description: Ordered list of child media players this entity will control. + required: true + type: list +state_template: + description: "A [template](/topics/templating/) can be specified to render the state of the media player. This way, the state could depend on entities different from media players, like switches or input booleans." + required: false + type: template +commands: + description: "Commands to be overwritten. Possible entries are `turn_on`, `turn_off`, `select_source`, `volume_set`, `volume_up`, `volume_down` and `volume_mute`." + required: false + type: string +attributes: + description: "Attributes that can be overwritten. Possible entries are `is_volume_muted`, `state`, `source`, `source_list` and `volume_level`. The values should be an entity ID and state attribute separated by a pipe character (|). If the entity ID's state should be used, then only the entity id should be provided." + required: false + type: string +{% endconfiguration %} -- **name** (*Required*): The name to assign the player -- **children** (*Required*): Ordered list of child media players this entity will control -- **commands** (*Optional*): Commands to be overwritten. Possible entries are *turn_on*, *turn_off*, *select_source*, *volume_set*, *volume_up*, *volume_down*, and *volume_mute*. -- **attributes** (*Optional*): Attributes that can be overwritten. Possible entries are *is_volume_muted*, *state*, *source*, *source_list, and *volume_level*. The values should be an entity id and state attribute separated by a bar (\|). If the entity id's state should be used, then only the entity id should be provided. +The Universal Media Player will primarily imitate one of its `children`. The Universal Media Player will control the first child on the list that is active (not idle/off). The Universal Media Player will also inherit its state from the first active child if a `state_template` is not provided. Entities in the `children:` list must be media players, but the state template can contain any entity. -The universal media player will primarily imitate one of its *children*. The first child in the list that is active (not idle/off) will be controlled the universal media player. The universal media player will also inherit its state from the first active child. Entities in the *children* list must be media players. +It is recommended that the command `turn_on`, the command `turn_off`, and the attribute `state` all be provided together. The `state` attribute indicates if the media player is on or off. If `state` indicates the media player is off, this status will take precedence over the states of the children. If all the children are idle/off and `state` is on, the Universal Media Player's state will be on. -It is recommended that the command *turn_on*, the command *turn_off*, and the attribute *state* all be provided together. The *state* attribute indicates if the Media Player is on or off. If *state* indicates the media player is off, this status will take precedent over the states of the children. If all the children are idle/off and *state* is on, the universal media player's state will be on. +It is also recommended that the command `volume_up`, the command `volume_down`, the command `volume_mute`, and the attribute `is_volume_muted` all be provided together. The attribute `is_volume_muted` should return either True or the on state when the volume is muted. The `volume_mute` service should toggle the mute setting. -It is also recommended that the command *volume_up*, the command *volume_down*, the command *volume_mute*, and the attribute *is_volume_muted* all be provided together. The attribute *is_volume_muted* should return either True or the on state when the volume is muted. The *volume_mute* service should toggle the mute setting. +When providing `select_source` as a command, it is recommended to also provide the attributes `source`, and `source_list`. The `source` attribute is the currently select source, while the `source_list` attribute is a list of all available sources. -When providing *select_source* as a command, it is recommended to also provide the attributes *source*, and *source_list*. The *source* attribute is the currently select source, while the *source_list* attribute is a list of all available sources. +## {% linkable_title Usage examples %} -Below is an example configuration. +#### {% linkable_title Chromecast & Kodi control with switches %} +In this example, a switch is available to control the power of the television. Switches are also available to turn the volume up, turn the volume down, and mute the audio. These could be command line switches or any other entity in Home Assistant. The `turn_on` and `turn_off` commands will be redirected to the television, and the volume commands will be redirected to an audio receiver. The `select_source` command will be passed directly to an A/V receiver. + +The children are a Chromecast and a Kodi player. If the Chromecast is playing, the Universal Media Player will reflect its status. If the Chromecast is idle and Kodi is playing, the universal media player will change to reflect its status. + +{% raw %} ```yaml media_player: platform: universal @@ -96,12 +119,12 @@ media_player: service: media_player.select_source data_template: entity_id: media_player.receiver - source: '{% raw %}{{ source }}{% endraw %}' + source: '{{ source }}' volume_set: service: media_player.volume_set data_template: entity_id: media_player.receiver - volume_level: '{% raw %}{{ volume_level }}{% endraw %}' + volume_level: '{{ volume_level }}' attributes: state: switch.living_room_tv @@ -109,9 +132,112 @@ media_player: volume_level: media_player.receiver|volume_level source: media_player.receiver|source source_list: media_player.receiver|source_list - ``` +{% endraw %} -In this example, a switch is available to control the power of the television. Switches are also available to turn the volume up, turn the volume down, and mute the audio. These could be command line switches or any other entity in Home Assistant. The *turn_on* and *turn_off* commands will be redirected to the television and the volume commands will be redirected to an audio receiver. The *select_source* command will be passed directly to an A/V receiver. +#### {% linkable_title Kodi CEC-TV control %} -The children are a Chromecast and a Kodi player. If the Chromecast is playing, the Universal Media Player will reflect its status. If the Chromecast is idle and Kodi is playing, the Universal Media player will change to reflect its status. +In this example, a [Kodi Media Player](/components/media_player.kodi/) runs in a CEC capable device (OSMC/OpenElec running in a Raspberry Pi 24/7, for example), and, with the JSON-CEC Kodi addon installed, it can turn on and off the attached TV. + +We store the state of the attached TV in a hidden [input boolean](/components/input_boolean/), so we can differentiate the TV being on or off, while Kodi is always 'idle', and use the universal media player to render its state with a template. We can hide the Kodi Media Player too, and only show the universal one, which now can differentiate between the 'idle' and the 'off' state (being the second when it is idle and the TV is off). + +Because the input boolean used to store the TV state is only changing when using the Home Assistant `turn_on` and `turn_off` actions, and Kodi could be controlled by so many ways, we also define some automations to update this Input Boolean when needed. + +In an Apple HomeKit scene, we can now expose this universal media player as an on/off switch in Homebridge, and, that way, use Siri to turn on and off the TV. + +The complete configuration is: + +{% raw %} +```yaml +homeassistant: + customize: + input_boolean.kodi_tv_state: + hidden: true + homebridge_hidden: true + media_player.kodi: + hidden: true + homebridge_hidden: true + media_player.kodi_tv: + friendly_name: Kodi + homebridge_name: Kodi + homebridge_media_player_switch: on_off + +input_boolean: + kodi_tv_state: + +media_player: +- platform: universal + name: Kodi TV + state_template: > + {% if is_state('media_player.kodi', 'idle') and is_state('input_boolean.kodi_tv_state', 'off') %} + off + {% else %} + {{ states('media_player.kodi') }} + {% endif %} + children: + - media_player.kodi + commands: + turn_on: + service: media_player.turn_on + data: + entity_id: media_player.kodi + turn_off: + service: media_player.turn_off + data: + entity_id: media_player.kodi + attributes: + is_volume_muted: media_player.kodi|is_volume_muted + volume_level: media_player.kodi|volume_level + +- platform: kodi + name: Kodi + host: 192.168.1.10 + turn_on_action: + - service: input_boolean.turn_on + data: + entity_id: input_boolean.kodi_tv_state + - service: media_player.kodi_call_method + data: + entity_id: media_player.kodi + method: Addons.ExecuteAddon + addonid: script.json-cec + params: + command: activate + turn_off_action: + - service: input_boolean.turn_off + data: + entity_id: input_boolean.kodi_tv_state + - service: media_player.media_stop + data: + entity_id: media_player.kodi + - service: media_player.kodi_call_method + data: + entity_id: media_player.kodi + method: Addons.ExecuteAddon + addonid: script.json-cec + params: + command: standby + +automation: +- alias: Turn on the TV when Kodi is activated + trigger: + platform: state + entity_id: media_player.kodi_tv + from: 'off' + to: 'playing' + action: + - service: media_player.turn_on + entity_id: media_player.kodi_tv + +- alias: Turn off the TV when Kodi is in idle > 15 min + trigger: + platform: state + entity_id: media_player.kodi_tv + to: 'idle' + for: + minutes: 15 + action: + - service: media_player.turn_off + entity_id: media_player.kodi_tv +``` +{% endraw %} diff --git a/source/_components/media_player.yamaha.markdown b/source/_components/media_player.yamaha.markdown index 8ab1d511144..049b33a832d 100644 --- a/source/_components/media_player.yamaha.markdown +++ b/source/_components/media_player.yamaha.markdown @@ -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 %} @@ -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..5919b19b50b --- /dev/null +++ b/source/_components/media_player.ziggo_mediabox_xl.markdown @@ -0,0 +1,43 @@ +--- +layout: page +title: "Ziggo Mediabox XL" +description: "Instructions 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/modbus.markdown b/source/_components/modbus.markdown index f673298d82e..9d560058290 100644 --- a/source/_components/modbus.markdown +++ b/source/_components/modbus.markdown @@ -30,7 +30,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 +54,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_eventstream.markdown b/source/_components/mqtt_eventstream.markdown index e440c9ec5ec..7dd471e5cbf 100644 --- a/source/_components/mqtt_eventstream.markdown +++ b/source/_components/mqtt_eventstream.markdown @@ -24,12 +24,18 @@ mqtt_eventstream: subscribe_topic: OtherHaServerName ``` -Configuration variables: +{% configuration %} +publish_topic: + description: Topic for publishing local events. + required: false + type: string +subscribe_topic: + description: Topic to receive events from the remote server. + required: false + type: string +{% endconfiguration %} -- **publish_topic** (*Optional*): Topic for publishing local events -- **subscribe_topic** (*Optional*): Topic to receive events from the remote server. - -## Multiple Instances +## {% linkable_title Multiple Instances %} Events from multiple instances can be aggregated to a single master instance by subscribing to a wildcard topic from the master instance. diff --git a/source/_components/mqtt_statestream.markdown b/source/_components/mqtt_statestream.markdown index 1fa88b4469f..5b7b832fe91 100644 --- a/source/_components/mqtt_statestream.markdown +++ b/source/_components/mqtt_statestream.markdown @@ -32,6 +32,12 @@ Configuration variables: Default is false. - **publish_timestamps** (*Optional*): Publish the last_changed and last_updated timestamps for the entity. Default is false. +- **exclude** (*Optional*): Configure which components should be excluded from recordings. See *Include/Exclude* section below for details. + - **entities** (*Optional*): The list of entity ids to be excluded from recordings. + - **domains** (*Optional*): The list of domains to be excluded from recordings. +- **include** (*Optional*): Configure which components should be included in recordings. If set, all other entities will not be recorded. + - **entities** (*Optional*): The list of entity ids to be included from recordings. + - **domains** (*Optional*): The list of domains to be included from recordings. ## Operation @@ -44,6 +50,56 @@ For example, with the example configuration above, if an entity called 'light.ma If that entity also has an attribute called `brightness`, the component will also publish the value of that attribute to `homeassistant/light/master_bedroom_dimmer/brightness`. -All states and attributes are passed through JSON serialization before publishing. **Please note** that this causes strings to be quoted (e.g., the string 'on' will be published as '"on"'). You can access the JSON deserialized values (as well as unquoted strings) at many places by using `value_json` instead of `value`. +All states and attributes are passed through JSON serialization before publishing. **Please note** that this causes strings to be quoted (e.g., the string 'on' will be published as '"on"'). You can access the JSON deserialized values (as well as unquoted strings) at many places by using `value_json` instead of `value`. The last_updated and last_changed values for the entity will be published to `homeassistant/light/master_bedroom_dimmer/last_updated` and `homeassistant/light/master_bedroom_dimmer/last_changed`, respectively. The timestamps are in ISO 8601 format - for example, `2017-10-01T23:20:30.920969+00:00`. + +## Include/exclude + +The **exclude** and **include** configuration variables can be used to filter the items that are published to MQTT. + +1\. If neither **exclude** or **include** are specified, all entities are published. + +2\. If only **exclude** is specified, then all entities except the ones listed are published. + +```yaml +# Example of excluding entities +mqtt_statestream: + base_topic: homeassistant + exclude: + domains: + - switch + entities: + - sensor.nopublish +``` +In the above example, all entities except for *switch.x* and *sensor.nopublish* will be published to MQTT. + +3\. If only **include** is specified, then only the specified entries are published. + +```yaml +# Example of excluding entities +mqtt_statestream: + base_topic: homeassistant + include: + domains: + - sensor + entities: + - lock.important +``` +In this example, only *sensor.x* and *lock.important* will be published. + +4\. If both **include** and **exclude** are specified then all entities specified by **include** are published except for the ones +specified by **exclude**. + +```yaml +# Example of excluding entities +mqtt_statestream: + base_topic: homeassistant + include: + domains: + - sensor + exclude: + entities: + - sensor.noshow +``` +In this example, all sensors except for *sensor.noshow* will be published. diff --git a/source/_components/mychevy.markdown b/source/_components/mychevy.markdown new file mode 100644 index 00000000000..64584db11d9 --- /dev/null +++ b/source/_components/mychevy.markdown @@ -0,0 +1,73 @@ +--- +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 - such as Battery Level, Charge Mode, EST Range, Total + Distance Traveled + +To use MyChevy in your installation, add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +mychevy: + username: email + password: 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 +at 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/neato.markdown b/source/_components/neato.markdown index 6e0849e6f01..8c5b205e98a 100644 --- a/source/_components/neato.markdown +++ b/source/_components/neato.markdown @@ -29,5 +29,5 @@ Configuration variables: - **password** (*Required*): Password for the Neato account.

-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. The start/stop functionality does not work. More information on how to update 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..7aa5adfb9c9 100644 --- a/source/_components/nest.markdown +++ b/source/_components/nest.markdown @@ -34,7 +34,7 @@ The Nest component is the main component to integrate all [Nest](https://nest.co 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 %} diff --git a/source/_components/netatmo.markdown b/source/_components/netatmo.markdown index a7b6a30a0c0..ebb254a3109 100644 --- a/source/_components/netatmo.markdown +++ b/source/_components/netatmo.markdown @@ -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/notify.ciscospark.markdown b/source/_components/notify.ciscospark.markdown index 96bc67c4968..cf2449fac42 100644 --- a/source/_components/notify.ciscospark.markdown +++ b/source/_components/notify.ciscospark.markdown @@ -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.clicksend.markdown b/source/_components/notify.clicksend.markdown index 96a43adfe12..e7eb8acc816 100644 --- a/source/_components/notify.clicksend.markdown +++ b/source/_components/notify.clicksend.markdown @@ -18,10 +18,10 @@ The `clicksend` platform uses [ClickSend](https://clicksend.com) to deliver noti ### Get your ClickSend API Credentials 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 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 @@ -30,12 +30,28 @@ notify: recipient: PHONE_NO ``` -Configuration variables: - -* **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` - +{% 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: "Your phone number. This is where you want to send your notification SMS messages, e.g., `09171234567`." + required: true + type: string +sender: + description: The name or number of the sender. + required: false + type: string + default: recipient +{% endconfiguration %} To use notifications, please see the [getting started with automation page](https://home-assistant.io/getting-started/automation/). diff --git a/source/_components/notify.html5.markdown b/source/_components/notify.html5.markdown index 34547169778..1adf5f015e1 100644 --- a/source/_components/notify.html5.markdown +++ b/source/_components/notify.html5.markdown @@ -21,14 +21,14 @@ 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 %} @@ -41,11 +41,12 @@ Configuration variables: #### {% linkable_title Verify your domain with Hass.io %} -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. +1. Set `https://yourdomain/local/` as URL. +2. For verifying your domain you need to download a file in step 2. +3. Create a directory named "www" in you Hass.io configuration directory. +4. Place the file (something like this: google*.html) in the "www" directory. +5. Verify the domain. +6. Proceed with step 3. ### {% linkable_title Requirements %} @@ -65,7 +66,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! diff --git a/source/_components/notify.lametric.markdown b/source/_components/notify.lametric.markdown index 8adb8c094eb..cf50cffaa2e 100644 --- a/source/_components/notify.lametric.markdown +++ b/source/_components/notify.lametric.markdown @@ -12,17 +12,71 @@ ha_category: Notifications ha_release: 0.49 --- -This component allows to send notification to a LaMetric device. It need the LaMetric platform to be configured first. +The `lametric` notification platform allows to send notification to a LaMetric device. It needs the LaMetric platform to be configured first. + +To enable LaMetric notifications in your installation, add the following to your `configuration.yaml` file: ```yaml +# Example configuration.yaml entry notify: - name: lametric1 + name: NOTIFIER_NAME platform: lametric - display_time: 20 - icon: i555 ``` -- **name** (*Optional*): The name of the LaMetric device. Usually it is "My Lametric" -- **display_time** (*Optional*): Defines how long the message should be displayed (in seconds). -- **icon** (*Optional*): An icon or animation. Check out the list of all icons her: 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. +{% 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 +lifetime: + description: Defines how long the message remains in LaMetric notification queue (in seconds). + required: false + type: int + default: 10 +icon: + description: An icon or animation. + required: false + type: string +cycles: + description: Defines how often the notification is displayed. + required: false + type: int + default: 1 +{% 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! + +## {% linkable_title Examples %} + +### {% linkable_title Full configuration example %} + +```yaml +# Example configuration.yaml entry +notify: + name: NOTIFIER_NAME + platform: lametric + lifetime: 20 + icon: a7956 + cycles: 3 +``` + +### {% linkable_title Changing sounds and icons %} + +To add a notification sound or an icon override, it has to be done via service data. + +```yaml +- alias: "Send notification on arrival at school" + trigger: + platform: state + entity_id: device_tracker.son_mobile + from: 'not_home' + to: 'school' + action: + service: notify.lametric + data: + message: "Son has arrived at school!" + data: + sound: 'notification' + icon: 'i51' + ``` diff --git a/source/_components/notify.nfandroidtv.markdown b/source/_components/notify.nfandroidtv.markdown index 3a91a7cba0e..79b3096a7de 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: @@ -50,7 +52,7 @@ This is a fully customized JSON you can use to test how the final notification w "duration":2, "transparency":"0%", "color": "red", - "interrupt": 1 + "interrupt": 1, } } ``` diff --git a/source/_components/notify.pushover.markdown b/source/_components/notify.pushover.markdown index b9b2dce48a3..67e7db1098a 100644 --- a/source/_components/notify.pushover.markdown +++ b/source/_components/notify.pushover.markdown @@ -37,12 +37,15 @@ Configuration variables: 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://home-assistant.io/" + sound: pianobar + priority: 0 ``` +Component specific values in the nested `data` section are optional. This is a quote from the Pushover website regarding free/open source apps: @@ -54,7 +57,7 @@ When setting up the application you can use this [icon](https://home-assistant.i 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: @@ -67,8 +70,9 @@ alexa: service: notify.notify data_template: message: "The location of {% raw %}{{ User }}{% endraw %} has been queried via Alexa." + data: + title: "Home Assistant" data: - title: "Home Assistant" sound: falling device: pixel url: "https://home-assistant.io/" diff --git a/source/_components/notify.pushsafer.markdown b/source/_components/notify.pushsafer.markdown index 4b003d97d82..a62e213e747 100644 --- a/source/_components/notify.pushsafer.markdown +++ b/source/_components/notify.pushsafer.markdown @@ -2,7 +2,7 @@ layout: page title: "Pushsafer" description: "Instructions how to add Pushsafer notifications to Home Assistant." -date: 2017-02-17 20:46 +date: 2018-01-05 11:15 sidebar: true comments: false sharing: true @@ -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. +### {% linkable_title Examples %} + +Message to two devices with formated 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://home-assistant.io/", + "urltitle": "Open Home Assistant", + "time2live": "0" + } +} +``` + +Message to one device with formated 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://home-assistant.io/]Testlink[/url]", + "target": ["1111"], + "data": { + "icon": "14", + "iconcolor": "#FFFF00", + "sound": "22", + "vibration": "3", + "url": "https://home-assistant.io/", + "urltitle": "Open Home Assistant", + "time2live": "60", + "picture1": { + "url":"https://home-assistant.io/images/components/alexa/alexa-512x512.png" + } + } +} +``` + +Message to two devices and one device group with formated text and local image. + +```json +{ + "title": "Test to 3 devices with local image", + "message": "Attention [i]italic[/i] Text[br][url=https://home-assistant.io/]Testlink[/url]", + "target": ["1111","2222","gs3333"], + "data": { + "icon": "20", + "iconcolor": "#FF00FF", + "sound": "33", + "vibration": "0", + "url": "https://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](https://home-assistant.io/images/favicon-192x192.png). To use notifications, please see the [getting started with automation page](/getting-started/automation/). diff --git a/source/_components/notify.slack.markdown b/source/_components/notify.slack.markdown index 0445d1df821..75b5419f59a 100644 --- a/source/_components/notify.slack.markdown +++ b/source/_components/notify.slack.markdown @@ -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.telegram.markdown b/source/_components/notify.telegram.markdown index 7df967d6289..ac89f6f23c7 100644 --- a/source/_components/notify.telegram.markdown +++ b/source/_components/notify.telegram.markdown @@ -156,6 +156,35 @@ homeassistant: ```

+### {% linkable_title Video support %} + +```yaml +... +action: + service: notify.NOTIFIER_NAME + data: + title: Send a video + message: That's an example that sends a video. + data: + video: + - url: http://192.168.1.28/camera.mp4 + username: admin + password: secrete + - file: /tmp/video.mp4 + caption: Video Title xy + - url: http://somebla.ie/video.mp4 + caption: I.e. for a Title +``` + +Configuration variables: + +- **url** or **file** (*Required*): For local or remote path to a video. +- **caption** (*Optional*): The title of the video. +- **username** (*Optional*): Username for a URL which require HTTP authentication. +- **password** (*Optional*): Username for a URL which require HTTP authentication. +- **authentication** (*Optional*): Set to 'digest' to use HTTP digest authentication, defaults to 'basic'. +- **keyboard** (*Optional*): List of rows of commands, comma-separated, to make a custom keyboard. +- **inline_keyboard** (*Optional*): List of rows of commands, comma-separated, to make a custom inline keyboard with buttons with associated callback data. ### {% linkable_title Document support %} diff --git a/source/_components/notify.telstra.markdown b/source/_components/notify.telstra.markdown index e60260b6361..4297cfc69f1 100644 --- a/source/_components/notify.telstra.markdown +++ b/source/_components/notify.telstra.markdown @@ -15,7 +15,7 @@ ha_release: 0.31 The `telstra` notification platform allows you to deliver Home Assistant notifications to Australian phone numbers over the [Telstra SMS API](https://dev.telstra.com/content/sms-api-0). -To enable the Telstra notifications in your installation, you must first create an account and API app over at [dev.telstra.com](https://dev.telstra.com/). The free tier allows for 1000 notifications to be sent per month. +To enable the Telstra notifications in your installation, you must first create an account and API app over at [dev.telstra.com](https://dev.telstra.com/). The free tier allows for a maximum of 1000 free messages. After your API app is approved, add the following to your `configuration.yaml` file: diff --git a/source/_components/notify.twilio_sms.markdown b/source/_components/notify.twilio_sms.markdown index 1e35c14866e..ec5002258ce 100644 --- a/source/_components/notify.twilio_sms.markdown +++ b/source/_components/notify.twilio_sms.markdown @@ -47,6 +47,6 @@ automation: data: message: 'The sun has set' target: - - +14151234567 - - +15105555555 + - '+14151234567' + - '+15105555555' ``` diff --git a/source/_components/notify.webostv.markdown b/source/_components/notify.webostv.markdown index 408c31eef02..8064c8fbf85 100644 --- a/source/_components/notify.webostv.markdown +++ b/source/_components/notify.webostv.markdown @@ -33,7 +33,7 @@ Configuration variables: - **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/nuheat.markdown b/source/_components/nuheat.markdown new file mode 100644 index 00000000000..a261aececba --- /dev/null +++ b/source/_components/nuheat.markdown @@ -0,0 +1,51 @@ +--- +layout: page +title: "NuHeat" +description: "Instructions 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: you@example.com + password: very-secure-password + devices: 12345 + +# Example configuration.yaml entry with multiple thermostats +nuheat: + username: you@example.com + password: very-secure-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/pilight.markdown b/source/_components/pilight.markdown index 2b7f8577019..fcb1cf875b4 100644 --- a/source/_components/pilight.markdown +++ b/source/_components/pilight.markdown @@ -13,9 +13,9 @@ 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. @@ -31,11 +31,11 @@ pilight: 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/). +- **port** (*Required*): The network port to connect to. The usual port is [5000](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. -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..80fccc281d4 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.miflora/) 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: '{{ value_json.brightness }}' ``` +{% endraw %} You have to replace the `state_topic` with the value that you configured in the PlantGateway. It also depends on the global configuration of your MQTT server. diff --git a/source/_components/rainbird.markdown b/source/_components/rainbird.markdown new file mode 100644 index 00000000000..4257826b7d4 --- /dev/null +++ b/source/_components/rainbird.markdown @@ -0,0 +1,33 @@ +--- +layout: page +title: "Rain Bird" +description: "Instructions on how to integrate your Rain Bird LNK WiFi Module within Home Assistant." +date: 2017-12-07 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` component 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 it, add the following to your `configuration.yaml` file: + +```yaml +rainbird: + host: '1.1.1.1' + password: 'XXXXXXX' +``` + +Configuration variables: + +- **host** (*Required*): The IP address of your LNK WiFi Module. +- **password** (*Required*): The password for accessing the module. + +Finish its configuration by visiting the [Rain Bird sensor](/components/sensor.rainbird/) and [Rain Bird switch](/components/switch.rainbird/) documentation. + +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/recorder.markdown b/source/_components/recorder.markdown index 6531fdf71a0..48ada639fde 100644 --- a/source/_components/recorder.markdown +++ b/source/_components/recorder.markdown @@ -25,18 +25,51 @@ To setup the `recorder` component in your installation, add the following to you recorder: ``` -Configuration variables: - -- **purge_interval** (*Optional*): (days) Enable scheduled purge of older events and states. The purge task runs every x days from when the `recorder component` is first enabled. If a scheduled purge is missed (e.g. if Home Assistant was not running) then the schedule will resume soon after Home Assistant restarts. You can use [service](#service-purge) call `recorder.purge` when required without impacting the purge schedule. -- **purge_keep_days** (*Required with `purge_interval`*): Specify number of history days to keep in recorder database after purge. -- **exclude** (*Optional*): Configure which components should be excluded from recordings. - - **entities** (*Optional*): The list of entity ids to be excluded from recordings. - - **domains** (*Optional*): The list of domains to be excluded from recordings. -- **include** (*Optional*): Configure which components should be included in recordings. If set, all other entities will not be recorded. - - **entities** (*Optional*): The list of entity ids to be included from recordings. - - **domains** (*Optional*): The list of domains to be included from recordings. -- **db_url** (*Optional*): The URL which point to your database. - +{% configuration %} + recorder: + description: Enables the recorder component. Only allowed once. + required: true + type: map + keys: + db_url: + description: The URL which points to your database. + required: false + type: URL + purge_interval: + description: Enable scheduled purge of older events and states. The purge task runs every `purge_interval` days from when the `recorder component` is first enabled. If a scheduled purge is missed (e.g if Home Assistant was not running), the schedule will resume soon after Home Assistant restarts. You can use the [service](#service-purge) call `purge` when required without impacting the purge schedule. If `purge_interval` is set, `purge_keep_days` needs to be set as well. + required: Inclusive + type: int + purge_keep_days: + description: Specify the number of history days to keep in recorder database after purge. If `purge_interval` is set, `purge_keep_days` needs to be set as well. + required: Inclusive + type: int + exclude: + description: Configure which components should be excluded + required: false + type: map + keys: + domains: + description: The list of domains to be excluded from recordings. + required: false + type: List + entities: + description: The list of entity ids to be excluded from recordings. + required: false + type: List + include: + description: Configure which components should be included in recordings. If set, all other entities will not be recorded. + required: false + type: map + keys: + domains: + description: The list of domains to be included in the recordings. + required: false + type: List + entities: + description: The list of entity ids to be included in the recordings. + required: false + type: List +{% endconfiguration %} Define domains and entities to `exclude` (aka. blacklist). This is convenient when you are basically happy with the information recorded, 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`). @@ -100,26 +133,37 @@ action: keep_days: 5 ``` -## Custom database engines +### {% linkable_title Restore State %} + +If the `recorder` component is activated then some components support `restore_state` which will restore the state of the entity after Home Assistant is started to the state before Home Assistant was stopped. Please make sure that you do not exclude the entities for which you want the state to be restored from your recordings. An incomplete list of components that currently support `restore_state`: + +* [`input_boolean`](/components/input_boolean/#restore-state) +* [`input_number`](/components/input_number/#restore-state) +* [`input_select`](/components/input_select/#restore-state) +* [`input_datetime`](/components/input_datetime/#restore-state) +* [`input_text`](/components/input_text/#restore-state) + + +## {% linkable_title Custom database engines %} | Database engine | `db_url` | | :---------------|:---------------------------------------------------------| | SQLite | `sqlite:///PATH/TO/DB_NAME` | -| MariaDB | `mysql://SERVER_IP/DB_NAME` | -| MariaDB         | `mysql://user:password@SERVER_IP/DB_NAME`       | -| MySQL | `mysql://SERVER_IP/DB_NAME` | -| MySQL           | `mysql://user:password@SERVER_IP/DB_NAME`       | -| MySQL (pymysql) | `mysql+pymysql://SERVER_IP/DB_NAME` | -| MySQL (pymysql) | `mysql+pymysql://user:password@SERVER_IP/DB_NAME` | +| MariaDB | `mysql://SERVER_IP/DB_NAME?charset=utf8` | +| MariaDB         | `mysql://user:password@SERVER_IP/DB_NAME?charset=utf8` | +| MySQL | `mysql://SERVER_IP/DB_NAME?charset=utf8` | +| MySQL           | `mysql://user:password@SERVER_IP/DB_NAME?charset=utf8` | +| MySQL (pymysql) | `mysql+pymysql://SERVER_IP/DB_NAME?charset=utf8` | +| MySQL (pymysql) | `mysql+pymysql://user:password@SERVER_IP/DB_NAME?charset=utf8` | | PostgreSQL | `postgresql://SERVER_IP/DB_NAME` | | PostgreSQL | `postgresql://scott:tiger@SERVER_IP/DB_NAME` | -| MS SQL Server | `mssql+pymssql://user:pass@SERVER_IP/DB_NAME?charset=utf8` | +| MS SQL Server | `mssql+pymssql://user:pass@SERVER_IP/DB_NAME?charset=utf8` | ## {% 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`: diff --git a/source/_components/remember_the_milk.markdown b/source/_components/remember_the_milk.markdown index d4cc22fa10d..1c3169028b1 100644 --- a/source/_components/remember_the_milk.markdown +++ b/source/_components/remember_the_milk.markdown @@ -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 68e11de80dd..692de767fcd 100644 --- a/source/_components/remote.apple_tv.markdown +++ b/source/_components/remote.apple_tv.markdown @@ -37,7 +37,4 @@ data: - left - menu - select - device: '' ``` - -Please note that `device` must be specified (because of validation) but is not used by this platform. So you may specify any value. diff --git a/source/_components/remote.harmony.markdown b/source/_components/remote.harmony.markdown index 41cc37cdc53..cc2eba65ccd 100755 --- a/source/_components/remote.harmony.markdown +++ b/source/_components/remote.harmony.markdown @@ -9,7 +9,7 @@ sharing: true footer: true logo: logitech.png ha_category: Remote -ha_iot_class: "Local Polling" +ha_iot_class: "Local Push" ha_release: "0.34" --- @@ -23,38 +23,34 @@ 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 turnon service is called without any data. -- **scan_interval** (*Optional*): Amount in seconds in between polling for device's current activity. Defaults to 30 seconds. +- **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: @@ -64,49 +60,78 @@ Upon startup one file will be written to your Home Assistant configuration direc - List of all programmed device names and ID numbers - List of all available commands per programmed device -Supported services: +### {% linkable_title Service `remote.turn_off` %} -- **Turn Off**: Turn off all devices that were switched on from the start of the current activity.s -- **Turn On**: Start an activity, will start the default activity from configuration.yaml if no activity is specified. The specified activity can either be the activity name or the activity ID from the configuration file written to your [Home Assistant configuration directory](/docs/configuration/). The service will respond faster if the activity ID is passed instead of the name. -- **Send Command**: Send a single command or a set of commands to one device, device ID and available commands are written to the configuration file at startup. You can optionally specify the number of times you wish to repeat the command(s) and delay you want between repeated command(s). -- **Sync**: Synchronizes the Harmony device with the Harmony web service if any changes are made from the web portal or app. +Turn off all devices that were switched on from the start of the current activity. +| Service data attribute | Optional | Description | +| ---------------------- | -------- | ----------- | +| `entity_id` | yes | Only act on a specific remote, else target all. + +### {% linkable_title Service `remote.turn_on` %} + +Start an activity. Will start the default `activity` from configuration.yaml if no activity is specified. The specified activity can either be the activity name or the activity ID from the configuration file written to your [Home Assistant configuration directory](/docs/configuration/). + +| Service data attribute | Optional | Description | +| ---------------------- | -------- | ----------- | +| `entity_id` | yes | Only act on a specific remote, else target all. +| `activity` | yes | Activity ID or Activity Name to start. + +### {% linkable_title Service `remote.send_command` %} + +Send a single command or a set of commands to one device, device ID and available commands are written to the configuration file at startup. You can optionally specify the number of times you wish to repeat the command(s) and delay you want between repeated command(s). + +| Service data attribute | Optional | Description | +| ---------------------- | -------- | ----------- | +| `entity_id` | yes | Only act on a specific remote, else target all. +| `device` | no | Device ID to send the command to. +| `command` | no | A single command or a list of commands to send. +| `num_repeats` | yes | The number of times to repeat the command(s). +| `delay_secs` | yes | The number of seconds between sending each command. + +A typical service call for sending several button presses looks like this: + +```yaml +service: remote.send_command +data: + entity_id: remote.tv_room + command: + - home + - 1 + - 2 + device: 4576546 + delay_secs: 0.6 +``` + +### {% linkable_title Service `remote.harmony_sync` %} + +Synchronize the Harmony device with the Harmony web service if any changes are made from the web portal or app. + +| Service data attribute | Optional | Description | +| ---------------------- | -------- | ----------- | +| `entity_id` | yes | Only act on a specific remote, else target all. ### {% linkable_title Examples %} -A template switch can be used to display and control the state of an activity in the frontend. - -```yaml -switch: - - platform: template - switches: - tv: - value_template: "{% raw %}{% if is_state('remote.family_room', 'on') %}on{% else %}off{% endif %}{% endraw %}" - turn_on: - service: remote.turn_on - entity_id: remote.family_room - turn_off: - service: remote.turn_off - entity_id: remote.family_room -``` - 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" @@ -115,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 @@ -125,44 +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 -```` - -The automation example below shows how to send a command via the harmony remote using the `send_command` service to send the 'Pause' command to the hub, which is already defined as an IR code for each device to be used via the Harmony app. It is checking for the activity name as exposed through the sensor in the harmony remote component using Jinja if statements to set the device_id, sending the correct Pause command for the given activity. This requires checking your activity list and device_id from the `harmony_REMOTENAME.conf` file created when you start the component. In this example, the harmony hub is named bedroom. - -```yaml -automation: - - alias: Harmony Pause contextual for activity - trigger: - # trigger happens to be from a flic button - could be any valid event - platform: event - event_type: flic_click - event_data: - button_name: flic_80e4da70bbb1 - click_type: double - action: - service: remote.send_command - data_template: - # using a data template to have if brances for relevant device - # Always the same entity_id - the harmony hub - entity_id: remote.bedroom - # Always the same command - the Pause key - command: Pause - # select device based upon the activity being undertaken. - device: > - # when in WATCH TV activity, the pause key relates to a TiVo, which is device 22987101 - {% raw %}{% if is_state("sensor.bedroom", "WATCH TV") %}{% raw %} - 22987101 - # when in WATCH APPLE TV activity, the pause key relates to an Apple TV, which is device 23002316 - {% raw %}{% elif is_state("sensor.bedroom", "WATCH APPLE TV") %}{% endraw %} - 23002316 - {% raw %}{% elif is_state("sensor.bedroom", "PLEX") %}{% endraw %} - 23048786 - {% raw %}{% elif is_state("sensor.bedroom", "WATCH BLU RAY") %}{% endraw %} - 23043122 - {% raw %}{% endif %}{% endraw %} - -```` +``` +{% endraw %} diff --git a/source/_components/remote.itach.markdown b/source/_components/remote.itach.markdown index 97234c7516f..35e14d18524 100755 --- a/source/_components/remote.itach.markdown +++ b/source/_components/remote.itach.markdown @@ -48,7 +48,7 @@ Configuration variables: - **name** (*Required*): Command name. - **data** (*Required*): Hex command data. -An example to call the component from developer tools using the remote, send_command service `{ "entity_id":"remote.tv", "device":"0", "command":"menu" }` +An example to call the component from developer tools using the `remote.send_command` service: `{ "entity_id":"remote.tv", "command":"menu" }` Note: Global Cache devices expect data in their own format of "sendir...". This component converts hex code to Global Cache IR form. diff --git a/source/_components/remote.markdown b/source/_components/remote.markdown index 327797ebbc8..fada23fde39 100755 --- a/source/_components/remote.markdown +++ b/source/_components/remote.markdown @@ -13,7 +13,7 @@ ha_release: "0.34" Keeps track which remotes are in your environment, their state and allows you to control them. * Maintains a state per remote and a combined state `all_remotes`. - * Registers services `remote/turn_on`, `remote/turn_off`, `remote/toggle`, `remote/sync`, and `remote/send_command` to control remotes. + * Registers services `remote/turn_on`, `remote/turn_off`, `remote/toggle`, and `remote/send_command` to control remotes. ### {% linkable_title Use the services %} @@ -25,5 +25,6 @@ Go to the **Developer Tools**, then to **Call Service** in the frontend, and cho | Service data attribute | Optional | Description | | ---------------------- | -------- | ----------- | -| `entity_id` | yes | Only act on specific remote. Else targets all. +| `entity_id` | yes | Only act on a specific remote, else target all. +See the platform documentation for each type of remote for more detailed examples. 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/satel_integra.markdown b/source/_components/satel_integra.markdown index c882e71c626..4cbe5957bfd 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: 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.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/sensor.ads.markdown b/source/_components/sensor.ads.markdown new file mode 100644 index 00000000000..0e65a67bb60 --- /dev/null +++ b/source/_components/sensor.ads.markdown @@ -0,0 +1,51 @@ +--- +layout: page +title: "ADS Sensor" +description: "Instructions 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.alpha_vantage.markdown b/source/_components/sensor.alpha_vantage.markdown new file mode 100644 index 00000000000..29712a8d0c9 --- /dev/null +++ b/source/_components/sensor.alpha_vantage.markdown @@ -0,0 +1,90 @@ +--- +layout: page +title: "Alpha Vantage" +description: "Instructions 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. + +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 +``` + +{% 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 + default: GOOGL + 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.arlo.markdown b/source/_components/sensor.arlo.markdown index 72fc0ae36bb..309795f7952 100644 --- a/source/_components/sensor.arlo.markdown +++ b/source/_components/sensor.arlo.markdown @@ -26,6 +26,7 @@ sensor: - last_capture - total_cameras - battery_level + - signal_strength ``` Configuration variables: @@ -35,5 +36,6 @@ Configuration variables: - **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. If no **monitored_conditions** are specified, all of above will be enabled by default. diff --git a/source/_components/sensor.bh1750.markdown b/source/_components/sensor.bh1750.markdown index 754dc91f86e..8b07a844825 100644 --- a/source/_components/sensor.bh1750.markdown +++ b/source/_components/sensor.bh1750.markdown @@ -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 f2475e71038..85173adc725 100644 --- a/source/_components/sensor.bitcoin.markdown +++ b/source/_components/sensor.bitcoin.markdown @@ -27,29 +27,58 @@ sensor: - trade_volume_btc ``` -Configuration variables: - -- **currency** (*Optional*): The currency to exchange to, eg. CHF, USD, EUR, etc. Default is USD. -- **display_options** array (*Required*): Options to display in the frontend. - - **exchangerate**: Exchange rate of 1 BTC - - **trade_volume_btc**: Trade volume - - **miners_revenue_usd**: Miners revenue - - **btc_mined**: BTC mined - - **trade_volume_usd**: Trade volume in USD - - **difficulty**: Difficulty - - **minutes_between_blocks**: Time between blocks in minutes - - **number_of_transactions**: Number of transactions - - **hash_rate**: Hash rate in PH/s - - **timestamp**: Timestamp - - **mined_blocks**: Minded Blocks - - **blocks_size**: Block size - - **total_fees_btc**: Total fees in BTC - - **total_btc_sent**: Total sent in BTC - - **estimated_btc_sent**: Estimated sent in BTC - - **total_btc**: Total of BTC - - **total_blocks**: Total Blocks - - **next_retarget**: Next retarget - - **estimated_transaction_volume_usd**: Estimated transaction volume in BTC - - **miners_revenue_btc**: Miners revenue in BTC - - **market_price_usd**: Market price in USD +{% configuration %} +currency: + description: The currency to exchange to, eg. CHF, USD, EUR, etc. + required: false + type: string + default: USD +display_options: + description: Options to display in the frontend. + required: true + type: map + keys: + exchangerate: + description: Exchange rate of 1 BTC + trade_volume_btc: + description: Trade volume + miners_revenue_usd: + description: Miners revenue + btc_mined: + description: BTC mined + trade_volume_usd: + description: Trade volume in USD + difficulty: + description: Difficulty + minutes_between_blocks: + description: Time between blocks in minutes + number_of_transactions: + description: Number of transactions + hash_rate: + description: Hash rate in PH/s + timestamp: + description: Timestamp + mined_blocks: + description: Minded Blocks + blocks_size: + description: Block size + total_fees_btc: + description: Total fees in BTC + total_btc_sent: + description: Total sent in BTC + estimated_btc_sent: + description: Estimated sent in BTC + total_btc: + description: Total of BTC + total_blocks: + description: Total Blocks + next_retarget: + description: Next retarget + estimated_transaction_volume_usd: + description: Estimated transaction volume in BTC + miners_revenue_btc: + description: Miners revenue in BTC + market_price_usd: + description: Market price in USD +{% endconfiguration %} diff --git a/source/_components/sensor.blockchain.markdown b/source/_components/sensor.blockchain.markdown index 26e5b590eda..21da2883379 100644 --- a/source/_components/sensor.blockchain.markdown +++ b/source/_components/sensor.blockchain.markdown @@ -27,7 +27,10 @@ sensor: - '183J5pXWqYYsxZ7inTVw9tEpejDXyMFroe' ``` -Configuration variables: - -- **addresses** (*Required*): List of bitcoin wallet addresses to watch. +{% configuration %} +addresses: + description: List of bitcoin wallet addresses to watch. + required: true + type: string, list +{% endconfiguration %} 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..89c06fc6f35 --- /dev/null +++ b/source/_components/sensor.coinbase.markdown @@ -0,0 +1,15 @@ +--- +layout: page +title: "Coinbase Sensor" +description: "Instructions 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 e8ab719c944..63fde6b5ea5 100644 --- a/source/_components/sensor.coinmarketcap.markdown +++ b/source/_components/sensor.coinmarketcap.markdown @@ -24,7 +24,18 @@ sensor: - platform: coinmarketcap ``` -Configuration variables: +{% configuration %} +currency: + description: The cryptocurrency to use. + required: false + type: string + default: Bitcoin +display_currency: + description: The currency to display. + required: false + type: string + default: USD +{% endconfiguration %} + +All supported currencies can be found [here](https://coinmarketcap.com/api/). -- **currency** (*Optional*): The cryptocurrency to use, eg. `bitcoin`, `litecoin`, `steem`, etc. Default is `bitcoin`. -- **display_currency** (*Optional*): The currency to display, eg. `USD`, `EUR`, `GBP`, etc. Default is `USD`. All supported currencies can be found [here](https://coinmarketcap.com/api/). diff --git a/source/_components/sensor.command_line.markdown b/source/_components/sensor.command_line.markdown index b963bdee442..3d5f533fbeb 100644 --- a/source/_components/sensor.command_line.markdown +++ b/source/_components/sensor.command_line.markdown @@ -143,7 +143,6 @@ 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:` %} @@ -155,6 +154,6 @@ sensor: sensor: - platform: command_line name: wind direction - command: 'sh /home/pi/.homeassistant/scripts/wind_direction.sh {{ states.sensor.wind_direction.state }}' + command: 'sh /home/pi/.homeassistant/scripts/wind_direction.sh {% raw %}{{ states.sensor.wind_direction.state }}{% endraw %}' unit_of_measurement: "Direction" ``` diff --git a/source/_components/sensor.cups.markdown b/source/_components/sensor.cups.markdown index 6ccaf7f3879..eb9f43e9dde 100644 --- a/source/_components/sensor.cups.markdown +++ b/source/_components/sensor.cups.markdown @@ -33,12 +33,22 @@ sensor: - C430 ``` -Configuration variables: - -- **printers** array (*Required*): List of printers to add. -- **host** (*Optional*): IP address of the CUPS print server. -- **port** (*Optional*): Port address of the CUPS print server. Defaults to 631. - +{% configuration %} +printers: + description: List of printers to add. + required: true + type: list +host: + description: IP address of the CUPS print server. + required: false + type: string + default: 127.0.0.1 +port: + description: Port of the CUPS print server. + required: false + type: int + default: 631 +{% endconfiguration %}

You will need to install the `python3-dev` or `python3-devel` and the development files for CUPS (`libcups2-dev` or`cups-devel`) package on your system manually (eg. `sudo apt-get install python3-dev libcups2-dev` or `sudo dnf -y install python3-devel cups-devel`) along with a compiler (`gcc`). diff --git a/source/_components/sensor.currencylayer.markdown b/source/_components/sensor.currencylayer.markdown index d26955ba01d..2c59a2a8b9b 100644 --- a/source/_components/sensor.currencylayer.markdown +++ b/source/_components/sensor.currencylayer.markdown @@ -31,8 +31,20 @@ sensor: - INR ``` -Configuration variables: +{% configuration %} +api_key: + description: "The API Key from [Currencylayer](https://currencylayer.com/)." + required: true + type: string +quote: + description: The symbol(s) of the quote or target currencies. + required: false + type: string, list + default: Exchange rate +base: + description: The symbol of the base currency. + required: false + type: string + default: USD +{% endconfiguration %} -- **api_key** (*Required*): API Key from [Currencylayer](https://currencylayer.com/). -- **base** (*Optional*): The symbol of the base currency. Defaults to USD. -- **quote** (*Required*): The symbol(s) of the quote or target currencies. diff --git a/source/_components/sensor.daikin.markdown b/source/_components/sensor.daikin.markdown new file mode 100644 index 00000000000..5e8967f99b6 --- /dev/null +++ b/source/_components/sensor.daikin.markdown @@ -0,0 +1,62 @@ +--- +layout: page +title: "Daikin AC" +description: "Instructions on how to integrate Daikin AC(s) with Home Assistant." +date: 2017-12-03 05:00 +sidebar: false +comments: false +sharing: true +footer: true +logo: N/A +ha_category: Climate +ha_release: 0.59 +ha_iot_class: "Local Polling" +--- + +### Description ### + +The sensor component 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 +

+ +### Configuration ### + +The component has been integrated with discovery so all your Daikin AC's climate devices can be automatically discovered. +Manual configuration and customization is also possible by using the sample configuration from below: + +```yaml +# Example configuration.yaml entry +sensor: + - platform: daikin + host: 10.0.0.1 + name: optional name + 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 + detault: 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..427d5afb683 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 @@ -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: @@ -67,7 +67,7 @@ Configuration variables: - **apparent_temperature_min**: Today's 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..6844c88d833 --- /dev/null +++ b/source/_components/sensor.deconz.markdown @@ -0,0 +1,45 @@ +--- +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 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.dsmr.markdown b/source/_components/sensor.dsmr.markdown index 326057c7996..a83d5a8ac0e 100644 --- a/source/_components/sensor.dsmr.markdown +++ b/source/_components/sensor.dsmr.markdown @@ -107,6 +107,11 @@ Optional configuration example for ser2net: # Example /etc/ser2net.conf for proxying USB/serial connections to DSMRv4 smart meters 2001:raw:600:/dev/ttyUSB0:115200 NONE 1STOPBIT 8DATABITS XONXOFF LOCAL -RTSCTS ``` +or +```sh +# Example /etc/ser2net.conf for proxying USB/serial connections to DSMRv2.2 smart meters +2001:raw:600:/dev/ttyUSB0:9600 EVEN 1STOPBIT 7DATABITS XONXOFF LOCAL -RTSCTS +``` [HASSbian](/getting-started/installation-raspberry-pi-image/) users have to give dialout permission to the user `homeassistant`: diff --git a/source/_components/sensor.dublin_bus_transport.markdown b/source/_components/sensor.dublin_bus_transport.markdown index 3b3161cdf10..c44a9f593e6 100644 --- a/source/_components/sensor.dublin_bus_transport.markdown +++ b/source/_components/sensor.dublin_bus_transport.markdown @@ -7,7 +7,7 @@ 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 diff --git a/source/_components/sensor.eliqonline.markdown b/source/_components/sensor.eliqonline.markdown index cfa071e3079..87dd5ac8fd6 100644 --- a/source/_components/sensor.eliqonline.markdown +++ b/source/_components/sensor.eliqonline.markdown @@ -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.etherscan.markdown b/source/_components/sensor.etherscan.markdown index 8200f531779..fcdc5387059 100644 --- a/source/_components/sensor.etherscan.markdown +++ b/source/_components/sensor.etherscan.markdown @@ -25,7 +25,15 @@ sensor: address: '0xfB6916095ca1df60bB79Ce92cE3Ea74c37c5d359' ``` -Configuration variables: +{% configuration %} +address: + description: Ethereum wallet address to watch. + required: true + type: string +name: + description: The name of the sensor used in the frontend. + required: false + type: string + default: Ethereum Balance +{% endconfiguration %} -- **address** (*Required*): Ethereum wallet address to watch. -- **name** (*Optional*): The name of the sensor used in the frontend. diff --git a/source/_components/sensor.fail2ban.markdown b/source/_components/sensor.fail2ban.markdown index c96b3109910..5fb8c141f4a 100644 --- a/source/_components/sensor.fail2ban.markdown +++ b/source/_components/sensor.fail2ban.markdown @@ -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,7 +70,7 @@ 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/). @@ -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,20 +119,20 @@ 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`. -``` +```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 / { @@ -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.fixer.markdown b/source/_components/sensor.fixer.markdown index 3a555f2c254..220619cf301 100644 --- a/source/_components/sensor.fixer.markdown +++ b/source/_components/sensor.fixer.markdown @@ -27,9 +27,19 @@ sensor: target: CHF ``` -Configuration variables: - -- **target** (*Required*): The symbol of the target currency. -- **name** (*Optional*): Name to use in the frontend. -- **base** (*Optional*): The symbol of the base currency. Default to USD - +{% configuration %} +target: + description: The symbol of the target currency. + required: true + type: string +name: + description: Name to use in the frontend. + required: false + type: string + default: Exchange rate +base: + description: The symbol of the base currency. + required: false + type: string + default: USD +{% endconfiguration %} diff --git a/source/_components/sensor.fritzbox_netmonitor.markdown b/source/_components/sensor.fritzbox_netmonitor.markdown index d6c8a3e9842..9842499a1ac 100644 --- a/source/_components/sensor.fritzbox_netmonitor.markdown +++ b/source/_components/sensor.fritzbox_netmonitor.markdown @@ -34,16 +34,18 @@ Configuration variables: The following statistics will be exposed as attributes. -|Attribute |Description | -|:-----------------|:------------------------------------------------------------| -|is_linked |True if the FritzBox is physically linked to the provider | -|is_connected |True if the FritzBox has established an internet-connection | -|wan_access_type |Connection-type, can be `DSL` or `Cable` | -|external_ip |External ip address | -|uptime |Uptime in seconds | -|bytes_sent |Bytes sent | -|bytes_received |Bytes received | -|max_byte_rate_up |Maximum upstream-rate in bytes/s | -|max_byte_rate_down|Maximum downstream-rate in bytes/s | +|Attribute |Description | +|:----------------------|:------------------------------------------------------------| +|is_linked |True if the FritzBox is physically linked to the provider | +|is_connected |True if the FritzBox has established an internet-connection | +|wan_access_type |Connection-type, can be `DSL` or `Cable` | +|external_ip |External ip address | +|uptime |Uptime in seconds | +|bytes_sent |Bytes sent | +|bytes_received |Bytes received | +|transmission_rate_up |Current upstream speed in bytes/s | +|transmission_rate_down |Current downstream speed in bytes/s | +|max_byte_rate_up |Maximum upstream-rate in bytes/s | +|max_byte_rate_down |Maximum downstream-rate in bytes/s | The sensor's state corresponds to the `is_linked` attribute and is either `online`, `offline`, or `unavailable` (in case connection to the router is lost). 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.gtfs.markdown b/source/_components/sensor.gtfs.markdown index 00243470ada..874617d87b6 100644 --- a/source/_components/sensor.gtfs.markdown +++ b/source/_components/sensor.gtfs.markdown @@ -24,6 +24,7 @@ Here are some examples: - [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. - [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.hive.markdown b/source/_components/sensor.hive.markdown new file mode 100644 index 00000000000..3e7350e147c --- /dev/null +++ b/source/_components/sensor.hive.markdown @@ -0,0 +1,24 @@ +--- +layout: page +title: "Hive Sensor" +description: "Instructions on how to integrate Hive Sensors with Home Assistant." +date: 2017-09-24 21:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: hive.png +ha_category: Sensor +ha_release: 0.59 +ha_iot_class: "Cloud Polling" +--- + + +The 'hive' sensor component can expose as a sensor the current online status of your Hive Hub. + + +

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

+ + diff --git a/source/_components/sensor.imap_email_content.markdown b/source/_components/sensor.imap_email_content.markdown index cb639b436cf..35f9d2d694a 100644 --- a/source/_components/sensor.imap_email_content.markdown +++ b/source/_components/sensor.imap_email_content.markdown @@ -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.lacrosse.markdown b/source/_components/sensor.lacrosse.markdown index d024d174403..c9005581f75 100644 --- a/source/_components/sensor.lacrosse.markdown +++ b/source/_components/sensor.lacrosse.markdown @@ -25,7 +25,7 @@ The `lacrosse` sensor platform is using the data provided by a [Jeelink](https:/ 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. ```bash -$ sudo pylacrosse -D /dev/ttyUSB0 scan +$ sudo pylacrosse -d /dev/ttyUSB0 scan ``` To use your `lacrosse` compatible sensor in your installation, add the following to your `configuration.yaml` file: @@ -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.luftdaten.markdown b/source/_components/sensor.luftdaten.markdown index 486b10e5f2a..6417ee5e0a5 100644 --- a/source/_components/sensor.luftdaten.markdown +++ b/source/_components/sensor.luftdaten.markdown @@ -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,15 @@ 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. {% endconfiguration %} +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.metoffice.markdown b/source/_components/sensor.metoffice.markdown index fc47f5f5c9b..ff622357718 100644 --- a/source/_components/sensor.metoffice.markdown +++ b/source/_components/sensor.metoffice.markdown @@ -15,8 +15,8 @@ ha_iot_class: "Cloud Polling" The `metoffice` sensor platform uses the Met Office's [DataPoint API][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](http://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.miflora.markdown b/source/_components/sensor.miflora.markdown index 67f6ecd25f3..4d15463a1c7 100644 --- a/source/_components/sensor.miflora.markdown +++ b/source/_components/sensor.miflora.markdown @@ -13,8 +13,18 @@ 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 plants. 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 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. +# Installation +Depending on the operating system you're running, you have to configure the proper Bluetooth backend on your system: + +- On [Hass.io](https://home-assistant.io/hassio/installation/): Miflora will work out of the box. +- On other Linux systems: + - Prefered 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` +- Windows and MacOS are currently not supported by the [miflora library](https://github.com/open-homeautomation/miflora/). + +# Configuration Start a scan to determine the MAC addresses of the sensor: ```bash @@ -25,6 +35,17 @@ C4:D3:8C:12:4C:57 Flower mate [...] ``` +Or if your distribution is using bluetoothctl: + +```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 +``` + + Check for `Flower care` or `Flower mate` entries, those are your sensor. To use your Mi Flora plant sensor in your installation, add the following to your `configuration.yaml` file: @@ -56,7 +77,7 @@ sensor: 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. -A full configuration example could looks the one below: +A full configuration example could look like the one below: ```yaml # Example configuration.yaml entry diff --git a/source/_components/sensor.min_max.markdown b/source/_components/sensor.min_max.markdown index db4db382a48..a71e0650e20 100644 --- a/source/_components/sensor.min_max.markdown +++ b/source/_components/sensor.min_max.markdown @@ -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.modbus.markdown b/source/_components/sensor.modbus.markdown index fd3b7157560..70cbfb494c2 100644 --- a/source/_components/sensor.modbus.markdown +++ b/source/_components/sensor.modbus.markdown @@ -49,13 +49,15 @@ Configuration variables: - **name** (*Required*): Name of the sensor. - **slave** (*Required*): The number of the slave (Optional for tcp and upd Modbus). - **register** (*Required*): Register number. - - **register_type** (*Optional*): Modbus register type (holding, input), default holding + - **register_type** (*Optional*): Modbus register type (holding, input), default holding. - **unit_of_measurement** (*Optional*): Unit to attach to value. - **count** (*Optional*): Number of registers to read. - - **scale** (*Optional*): Scale factor (output = scale * value + offset), default 1 - - **offset** (*Optional*): Final offset (output = scale * value + offset), default 0 - - **precision** (*Optional*): Number of valid decimals, default 0 - - **data_type** (*Optional*): Response representation (int, float). If float selected, value will be converted to IEEE 754 floating point format. default int + - **reverse_order** (*Optional*): Reverse the order of registers when count >1, default False. + - **scale** (*Optional*): Scale factor (output = scale * value + offset), default 1. + - **offset** (*Optional*): Final offset (output = scale * value + offset), default 0. + - **precision** (*Optional*): Number of valid decimals, default 0. + - **data_type** (*Optional*): Response representation (int, uint, float, custom). If float selected, value will be converted to IEEE 754 floating point format. Default int. + - **structure** (*Optional*): If data_type is custom specify here a double quoted python struct format string to unpack the value. See python documentation for details. Ex: ">i". 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. @@ -72,7 +74,6 @@ sensor: slave: 10 register: 0 register_type: holding - update_interval: 2.5 unit_of_measurement: °C count: 1 scale: 0.1 diff --git a/source/_components/sensor.mopar.markdown b/source/_components/sensor.mopar.markdown index eef49e8f63a..3357ae91939 100644 --- a/source/_components/sensor.mopar.markdown +++ b/source/_components/sensor.mopar.markdown @@ -39,7 +39,7 @@ Configuration options for the Mopar sensor: ## {% 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..2f80c563b15 100644 --- a/source/_components/sensor.mqtt.markdown +++ b/source/_components/sensor.mqtt.markdown @@ -25,14 +25,58 @@ sensor: 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 +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 +{% endconfiguration %} ## {% linkable_title Examples %} diff --git a/source/_components/sensor.openexchangerates.markdown b/source/_components/sensor.openexchangerates.markdown index 63e94b74a85..14340a44711 100644 --- a/source/_components/sensor.openexchangerates.markdown +++ b/source/_components/sensor.openexchangerates.markdown @@ -28,9 +28,24 @@ sensor: quote: EUR ``` -Configuration variables: +{% configuration %} +name: + description: The name of the sensor. + required: false + type: string + default: Exchange Rate Sensor +api_key: + description: "The API Key for [Open Exchange Rates](https://openexchangerates.org)." + required: true + type: string +quote: + description: The symbol of the quote or target currency. + required: true + type: string +base: + description: The symbol of the base currency. + required: false + type: string + default: USD +{% endconfiguration %} -- **api_key** (*Required*): API Key for [Open Exchange Rates](https://openexchangerates.org). -- **quote** (*Required*): The symbol of the quote or target currency. -- **name** (*Optional*): Name to use in the frontend. -- **base** (*Optional*): The symbol of the base currency. Defaults to USD. diff --git a/source/_components/sensor.openweathermap.markdown b/source/_components/sensor.openweathermap.markdown index 9dc0e763c1c..f672ff07291 100644 --- a/source/_components/sensor.openweathermap.markdown +++ b/source/_components/sensor.openweathermap.markdown @@ -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.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.pyload.markdown b/source/_components/sensor.pyload.markdown index 4ad24e38938..c4d7611edb4 100644 --- a/source/_components/sensor.pyload.markdown +++ b/source/_components/sensor.pyload.markdown @@ -24,16 +24,41 @@ sensor: - platform: pyload ``` -Configuration variables: +{% configuration %} +host: + description: This is the IP address of your pyLoad download manager. + required: false + type: string + default: localhost +port: + description: The port your pyLoad interface uses. + required: false + type: int + default: 8000 +name: + description: The name to use when displaying this pyLoad instance. + required: false + type: string + default: 20 +username: + description: Your pyLoad username. + required: false + type: string +password: + description: Your pyLoad password. + required: false + type: string +ssl: + description: Enable SSL/TLS for the host. + required: false + type: boolean + default: false +{% endconfiguration %} -- **host** (*Optional*): This is the IP address of your pyLoad download manager, eg. 192.168.0.100. Defaults to `localhost`. -- **port** (*Optional*): The port your pyLoad interface uses. Defaults to 8000. -- **name** (*Optional*): The name to use when displaying this pyLoad instance. -- **username** (*Optional*): Your pyLoad username. -- **password** (*Optional*): Your pyLoad password. If everything is setup correctly, the download speed will show up in the frontend.

+ diff --git a/source/_components/sensor.rainbird.markdown b/source/_components/sensor.rainbird.markdown new file mode 100644 index 00000000000..aebb59be073 --- /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/rainburd), 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.random.markdown b/source/_components/sensor.random.markdown index ac61331913b..d550d4b88d0 100644 --- a/source/_components/sensor.random.markdown +++ b/source/_components/sensor.random.markdown @@ -24,12 +24,27 @@ sensor: - platform: random ``` -Configuration variables: - -- **name** (*Optional*): Name of the sensor to use in the frontend. Defaults to `Random Sensor`. -- **minimum** (*Optional*): Lower limit for the values. Defaults to `0`. -- **maximum** (*Optional*): Upper limit for the values. Defaults to `20`. -- **unit_of_measurement** (*Optional*): Defines the units of measurement of the sensor, if any. +{% configuration %} +name: + description: Name to use in the frontend. + required: false + type: string + default: Random Sensor +minimum: + description: Lower limit for the values. + required: false + type: string + default: 0 +maximum: + description: Upper limit for the values. + required: false + type: int + default: 20 +unit_of_measurement: + description: Defines the units of measurement of the sensor, if any. + required: false + type: string +{% endconfiguration %} See the [entity component options][entity-docs] to control how often the main component polls the random sensor. The default is 30 seconds. diff --git a/source/_components/sensor.rest.markdown b/source/_components/sensor.rest.markdown index 9f3da04c7ca..c496c7a0e0e 100644 --- a/source/_components/sensor.rest.markdown +++ b/source/_components/sensor.rest.markdown @@ -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 @@ -154,3 +196,63 @@ sensor: User-Agent: Home Assistant REST sensor ``` +### {% linkable_title Fetch multiple JSON values and present them as attibutes %} + +[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() }}' + icon_template: '{{ "http://openweathermap.org/img/w/"+states.sensor.owm_report.attributes.weather[0]["icon"]+".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.ripple.markdown b/source/_components/sensor.ripple.markdown index 1db3abc0979..ad960c30e53 100644 --- a/source/_components/sensor.ripple.markdown +++ b/source/_components/sensor.ripple.markdown @@ -25,7 +25,15 @@ sensor: address: 'r3kmLJN5D28dHuH8vZNUZpMC43pEHpaocV' ``` -Configuration variables: +{% configuration %} +address: + description: Ripple wallet address to watch. + required: true + type: string +name: + description: Name for the sensor to use in the frontend. + required: false + type: string + default: Ripple Balance +{% endconfiguration %} -- **address** (*Required*): Ripple wallet address to watch -- **name** (*Optional*): Name for the sensor to use in the frontend. diff --git a/source/_components/sensor.sabnzbd.markdown b/source/_components/sensor.sabnzbd.markdown index ffa7310c2e1..47680c4e1af 100644 --- a/source/_components/sensor.sabnzbd.markdown +++ b/source/_components/sensor.sabnzbd.markdown @@ -40,6 +40,7 @@ sensor: - 'queue_remaining' - 'disk_size' - 'disk_free' + - 'queue_count' ``` Configuration variables: @@ -56,6 +57,7 @@ Configuration variables: - **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: @@ -66,6 +68,7 @@ Note that this will create the following sensors: - 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. diff --git a/source/_components/sensor.scrape.markdown b/source/_components/sensor.scrape.markdown index 2ab59be72c6..41e77ec52be 100644 --- a/source/_components/sensor.scrape.markdown +++ b/source/_components/sensor.scrape.markdown @@ -45,6 +45,7 @@ In this section you find some real life examples of how to use this sensor. Ther The current release Home Assistant is published on [https://home-assistant.io/](https://home-assistant.io/) +{% raw %} ```yaml sensor: # Example configuration.yaml entry @@ -52,13 +53,15 @@ sensor: resource: https://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: @@ -66,8 +69,9 @@ sensor: resource: https://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 %} @@ -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] }}' + unit_of_measurement: "öre/kWh" +``` +{% endraw %} diff --git a/source/_components/sensor.serial.markdown b/source/_components/sensor.serial.markdown index 52646cf648a..ea1ad91a0b7 100644 --- a/source/_components/sensor.serial.markdown +++ b/source/_components/sensor.serial.markdown @@ -31,19 +31,23 @@ sensor: ``` {% configuration %} - serial_port: - description: Local serial port where the sensor is connected and access is granted. - required: true - type: string - name: - description: Friendly name to use for the frontend. Default to "Serial sensor". - required: false - type: string - baudrate: - description: Baudrate of the serial port. - required: false - default: 9600 Bps - type: int +serial_port: + description: Local serial port where the sensor is connected and access is granted. + required: true + type: string +name: + description: Friendly name to use for the frontend. Default to "Serial sensor". + required: false + type: string +baudrate: + description: Baudrate of the serial port. + required: false + default: 9600 Bps + type: int +value_template: + description: "Defines a [template](/docs/configuration/templating/#processing-incoming-data) to extract a value from the serial line." + required: false + type: template {% endconfiguration %} diff --git a/source/_components/sensor.sochain.markdown b/source/_components/sensor.sochain.markdown new file mode 100644 index 00000000000..77bf1c78364 --- /dev/null +++ b/source/_components/sensor.sochain.markdown @@ -0,0 +1,50 @@ +--- +layout: page +title: "SoChain" +description: "Instructions 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.speedtest.markdown b/source/_components/sensor.speedtest.markdown index d9c25821a8a..bc1e8bf9884 100644 --- a/source/_components/sensor.speedtest.markdown +++ b/source/_components/sensor.speedtest.markdown @@ -113,3 +113,5 @@ automation: - 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. diff --git a/source/_components/sensor.systemmonitor.markdown b/source/_components/sensor.systemmonitor.markdown index 283e302217f..0cc01b8ade6 100644 --- a/source/_components/sensor.systemmonitor.markdown +++ b/source/_components/sensor.systemmonitor.markdown @@ -67,6 +67,7 @@ The table contains types and their argument to use in your `configuration.yaml` | 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 %} diff --git a/source/_components/sensor.tahoma.markdown b/source/_components/sensor.tahoma.markdown new file mode 100644 index 00000000000..80cf6bc4ebb --- /dev/null +++ b/source/_components/sensor.tahoma.markdown @@ -0,0 +1,21 @@ +--- +layout: page +title: "Tahoma Sensor" +description: "Instructions 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_release: 0.59 +--- + +To use your tahoma sensors in your installation, add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yml entry +sensor: + platform: tahoma +``` diff --git a/source/_components/sensor.teksavvy.markdown b/source/_components/sensor.teksavvy.markdown new file mode 100644 index 00000000000..2181e4273de --- /dev/null +++ b/source/_components/sensor.teksavvy.markdown @@ -0,0 +1,77 @@ +--- +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 +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. + 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.temper.markdown b/source/_components/sensor.temper.markdown index 37229ebed40..227cc42f80a 100644 --- a/source/_components/sensor.temper.markdown +++ b/source/_components/sensor.temper.markdown @@ -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..3c865a2ee2a 100644 --- a/source/_components/sensor.template.markdown +++ b/source/_components/sensor.template.markdown @@ -45,10 +45,6 @@ sensor: description: Name to use in the frontend. 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. - required: false - type: string, list unit_of_measurement: description: Defines the units of measurement of the sensor, if any. required: false @@ -70,12 +66,11 @@ sensor: ## {% 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. +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 +with this equivalent that returns `true`/`false` and never gives an `unknown` result: {% raw %}`{{ is_state('switch.source', 'on') }}`{% endraw %} diff --git a/source/_components/sensor.thethingsnetwork.markdown b/source/_components/sensor.thethingsnetwork.markdown index 76870e368ec..6dac17958f2 100644 --- a/source/_components/sensor.thethingsnetwork.markdown +++ b/source/_components/sensor.thethingsnetwork.markdown @@ -62,7 +62,7 @@ sensor: - platform: thethingsnetwork device_id: ha-demo values: - sensor_value: unit of measurment + sensor_value: unit of measurement voltage: V ``` 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.viaggiatreno.markdown b/source/_components/sensor.viaggiatreno.markdown new file mode 100644 index 00000000000..d8ad4e16a00 --- /dev/null +++ b/source/_components/sensor.viaggiatreno.markdown @@ -0,0 +1,62 @@ +--- +layout: page +title: "ViaggiaTreno Italian Railroads" +description: "Instructions on how to integrate Italian Railroads data (from ViaggiaTreno API) into Home Assistant." +date: 2017-11-07 14:35 +sidebar: true +comments: false +sharing: true +footer: true +logo: train.png +ha_category: Transport +ha_iot_class: "Cloud Polling" +ha_release: 0.58 +--- + +The `viaggiatreno` sensor will give you information about configured train ids and stations using the public [ViaggiaTreno](http://viaggiatreno.it) API. + +To activate the sensor you need at least two parameters: the `train_id` and the `station_id`. + +The first is available just looking at the [ViaggiaTreno](http://viaggiatreno.it/) timetable, the latter can be obtained using the dedicated API endpoint: +`http://www.viaggiatreno.it/viaggiatrenonew/resteasy/viaggiatreno/autocompletaStazione/` +(e.g., `http://www.viaggiatreno.it/viaggiatrenonew/resteasy/viaggiatreno/autocompletaStazione/ROMA` will list all station names (with ids) that starts with *ROMA*). + +

+Note that the `station_id` is referred to the train's **departing station**. If a train number does not match with the station id, no data will be returned to the sensor. +

+ +Then add the data to your `configuration.yaml` file as shown in the example: + +```yaml +# Example configuration.yaml entry +sensor: + - platform: viaggiatreno + train_id: 12279 + station_id: S08409 +``` + +{% configuration %} +train_id: + description: The ID of the train. + required: true + type: int +station_id: + description: The ID of the starting station. + required: true + type: int +train_name: + description: The name of the sensor. Defaults to 'Train from '. + required: false + type: string +{% endconfiguration %} + +

+In a future implementation, the station name could be used to automatically search best-matching station id, without the need to specify it. +

+ +The public timetables are coming from [ViaggiaTreno](http://viaggiatreno.it). + +

+Instructions (in Italian) for the API are available at: +https://github.com/bluviolin/TrainMonitor/wiki/API-del-sistema-Viaggiatreno +

diff --git a/source/_components/sensor.yahoo_finance.markdown b/source/_components/sensor.yahoo_finance.markdown index f6f8fdb8568..8a55a78dda7 100644 --- a/source/_components/sensor.yahoo_finance.markdown +++ b/source/_components/sensor.yahoo_finance.markdown @@ -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: @@ -24,10 +28,18 @@ sensor: - platform: yahoo_finance ``` -Configuration variables: - -- **name** (*Optional*): The name of the sensor. If not specified, it defaults to *Yahoo Stock*. -- **symbols** array (*Optional*): List of stock market symbols for given companies. If not specified, it defaults to *Yahoo (YHOO)*. +{% configuration %} +name: + description: The name of the sensor. + required: false + type: string + default: Yahoo Stock +symbols: + description: List of stock market symbols for given companies. + required: false + type: string, list + default: YHOO +{% endconfiguration %} ## {% linkable_title Examples %} 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/skybell.markdown b/source/_components/skybell.markdown index b160a879231..4a7a2cfdac6 100644 --- a/source/_components/skybell.markdown +++ b/source/_components/skybell.markdown @@ -13,11 +13,11 @@ 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: +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 @@ -26,9 +26,15 @@ skybell: password: secret ``` -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/snips.markdown b/source/_components/snips.markdown index ef4b7d04295..1e8dae2e052 100644 --- a/source/_components/snips.markdown +++ b/source/_components/snips.markdown @@ -12,26 +12,40 @@ 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://github.com/snipsco/snips-platform-documentation/wiki). ![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 Voice Platform is installed as a Docker image on Raspberry Pi with the following command: -```sh +```bash (pi) $ curl https://install.snips.ai -sSf | sh ``` -### Creating an assistant +Snips can also be installed on a Debian/Ubuntu machine as well: + +```bash +$ sudo apt-get update +$ sudo apt-get install -y dirmngr +$ sudo bash -c 'echo "deb https://debian.snips.ai/$(lsb_release -cs) stable main" > /etc/apt/sources.list.d/snips.list' +$ sudo apt-key adv --keyserver pgp.mit.edu --recv-keys F727C778CCB0A455 + +$ sudo apt-get update +$ sudo apt-get install -y snips-platform-voice +``` + +### {% linkable_title Creating an assistant %}
@@ -39,26 +53,34 @@ The Snips Voice Platform is installed on Raspberry Pi with the following command 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 +```bash $ scp assistantproj_XXX.zip pi@pi_hostname:/home/pi/assistant.zip ``` and installed locally via the `snips-install-assistant` helper script: -```sh +```bash (pi) $ sudo snips-install-assistant assistant.zip ``` -### Running Snips +### {% 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://github.com/snipsco/snips-platform-documentation/wiki/1.-Setup-the-Snips-Voice-Platform-on-your-Raspberry-Pi#configuring-the-audio). Start the Snips Voice Platform using the `snips` command: -```sh +Raspberry Pi: + +```bash (pi) $ snips ``` +Debian/Ubuntu: + +```bash +$ sudo systemctl start "snips-*" +``` + Snips is now ready to take voice commands from the microphone. To trigger the listening, simply say > Hey Snips @@ -67,23 +89,32 @@ 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. +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/intent/` 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. -#### 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): +Raspberry Pi: + ```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 +$ 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 ``` +Debian/Ubuntu: + +Edit the `/etc/snips.toml` file. See snips documentation for more information on configuring this 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). -## Home Assistant configuration +## {% linkable_title Home Assistant configuration %} -### Specifying the MQTT broker +### {% linkable_title 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 must tell Home Assistant which [MQTT broker](/docs/mqtt/) to use by adding the following entry to the `configuration.yaml` file: ```yaml mqtt: @@ -98,10 +129,14 @@ mqtt: broker: 127.0.0.1 port: 9898 ``` -### Triggering actions + +Alternatively, MQTT can be configured to bridge messages between servers if using a custom MQTT broker such as `mosquitto`. + +### {% 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 `ActivateLightColors` intents (included in the Snips IoT intent bundle) to change light colors: +{% raw %} ```yaml snips: @@ -110,6 +145,87 @@ 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 %} + +The variables that can be used in the template are of the form 'slotName = value'. + +Snips intents that utilize builtin slot types will contain extended information along with the value and can be exposed using this format: + +{% raw %} +```yaml +SetTimer: + speech: + type: plain + text: weather + action: + service: script.set_timer + data_template: + name: "{{ timer_name }}" + duration: "{{ timer_duration }}" + seconds: "{{ slots.timer_duration.value.seconds }}" + minutes: "{{ slots.timer_duration.value.minutes }}" + hours: "{{ slots.timer_duration.value.hours }}" +``` +{% endraw %} + +### 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. | + +#### Configuration Examples + +```yaml +script: + turn_on_light: + sequence: + service: script.turn_on_light + service: snips.say + data: + text: 'OK, the light is now on' + +automation: + query_garage_door: + 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 ``` 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.broadlink.markdown b/source/_components/switch.broadlink.markdown index 8f733a6445b..f63297eed5e 100644 --- a/source/_components/switch.broadlink.markdown +++ b/source/_components/switch.broadlink.markdown @@ -48,7 +48,7 @@ Information about how to install on Windows can be found [here](https://home-ass ### {% 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: @@ -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,7 +140,7 @@ 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: - "JgCMAJSSFDYUNhQ2FBEUERQRFBEUERQ2FDYUNhQRFBEUERQRFBEUERQRFDYUERQRFBEUERQRFDYUNhQRFDYUNhQ2FDYUNhQABfWUkhQ2FDYUNhQRFBEUERQRFBEUNhQ2FDYUERQRFBEUERQRFBEUERQ2FBEUERQRFBEUERQ2FDYUERQ2FDYUNhQ2FDYUAA0FAAAAAAAAAAAAAAAA" diff --git a/source/_components/switch.command_line.markdown b/source/_components/switch.command_line.markdown index cdb5162ca2a..0c70ae6afca 100644 --- a/source/_components/switch.command_line.markdown +++ b/source/_components/switch.command_line.markdown @@ -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: diff --git a/source/_components/switch.digital_ocean.markdown b/source/_components/switch.digital_ocean.markdown index 7eb640197d1..e17a74ab35c 100644 --- a/source/_components/switch.digital_ocean.markdown +++ b/source/_components/switch.digital_ocean.markdown @@ -26,7 +26,10 @@ switch: - 'coreos-512mb-nyc3-01' ``` -Configuration variables: - -- **droplets** (*Required*): List of droplets you want to control. +{% configuration %} +droplets: + description: List of droplets you want to control. + required: true + type: list +{% endconfiguration %} diff --git a/source/_components/switch.flux.markdown b/source/_components/switch.flux.markdown index d53a0714ff6..69d3e8671e2 100644 --- a/source/_components/switch.flux.markdown +++ b/source/_components/switch.flux.markdown @@ -16,9 +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 30 seconds with a 30 second transition time. +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. -If you don't wish to have flux update on 30 second 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. +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. To use the Flux switch in your installation, add the following to your `configuration.yaml` file: @@ -43,6 +43,8 @@ Configuration variables: - **brightness** (*Optional*): The brightness of the lights. Calculated with `RGB_to_xy` by default. - **disable_brightness_adjust** (*Optional*): If true, brightness will not be adjusted besides color temperature. Defaults to False. - **mode** (*Optional*): Select how color temperature is passed to lights. Valid values are `xy`, `mired` and `rgb`. Defaults to `xy`. +- **transition** (*Optional*): Transition time for the light changes (high values may not be supported by all light models). Defaults to 30. +- **interval** (*Optional*): Frequency at which the lights should be updated. Defaults to 30. Full example: @@ -62,5 +64,7 @@ switch: brightness: 200 disable_brightness_adjust: True mode: xy + transition: 30 + interval: 60 ``` diff --git a/source/_components/switch.hikvision.markdown b/source/_components/switch.hikvisioncam.markdown similarity index 100% rename from source/_components/switch.hikvision.markdown rename to source/_components/switch.hikvisioncam.markdown diff --git a/source/_components/switch.hive.markdown b/source/_components/switch.hive.markdown new file mode 100644 index 00000000000..8f7d8677221 --- /dev/null +++ b/source/_components/switch.hive.markdown @@ -0,0 +1,27 @@ +--- +layout: page +title: "Hive Switch" +description: "Instructions on how to integrate Hive Plugs with Home Assistant." +date: 2017-09-24 21:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: hive.png +ha_category: Switch +ha_release: 0.59 +ha_iot_class: "Cloud Polling" +--- + + +The 'hive' switch component integrates your Hive plugs into Home Assistant, enabling control of your devices. + +The Hive switch component supports the following Hive products: +- **Hive Active Plug** + + +

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

+ + diff --git a/source/_components/switch.hook.markdown b/source/_components/switch.hook.markdown index 42903c50c7a..3ba23b8c19a 100644 --- a/source/_components/switch.hook.markdown +++ b/source/_components/switch.hook.markdown @@ -24,15 +24,17 @@ Configure with either your username/password or your API token for the official ```yaml # Example configuration.yaml entry -- platform: hook - username: - password: !secret hook +switch: + - platform: hook + username: + password: !secret hook ``` Or ```yaml # Example configuration.yaml entry -- platform: hook - token: +switch: + - platform: hook + token: ``` Extra debug logging is available, if you need it. diff --git a/source/_components/switch.insteon_local.markdown b/source/_components/switch.insteon_local.markdown index 0200b5cd439..0d8c71aa8d8 100644 --- a/source/_components/switch.insteon_local.markdown +++ b/source/_components/switch.insteon_local.markdown @@ -14,20 +14,4 @@ ha_version: 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 disovered and added to Home Assistant. The device names will be the Insteon address of the switch. diff --git a/source/_components/switch.modbus.markdown b/source/_components/switch.modbus.markdown index d664731534e..bac21bbd812 100644 --- a/source/_components/switch.modbus.markdown +++ b/source/_components/switch.modbus.markdown @@ -14,7 +14,7 @@ ha_iot_class: "Local Push" --- -The `modbus` switch platform allows you to control [Modbus](http://www.modbus.org/) coils. +The `modbus` switch platform allows you to control [Modbus](http://www.modbus.org/) coils or registers. To use your Modbus switches in your installation, add the following to your `configuration.yaml` file: @@ -30,11 +30,28 @@ switch: - name: Switch2 slave: 2 coil: 14 + registers: + - name: Register1 + slave: 1 + register: 11 + command_on: 1 + command_off: 0 ``` Configuration variables: -- **coils** (*Optional*): A list of relevant coils to read from/write to +- **coils** (*Optional*): A list of relevant coils to read from/write to. - **slave** (*Required*): The number of the slave (can be omitted for tcp and udp Modbus). - - **name** (*Required*): Name of the sensor - - **coil** (*Required*): Coil number + - **name** (*Required*): Name of the switch. + - **coil** (*Required*): Coil number. +- **registers** (*Optional*): A list of relevant registers to read from/write to. + - **slave** (*Required*): The number of the slave (can be omitted for tcp and udp Modbus). + - **name** (*Required*): Name of the switch. + - **register** (*Required*): Register number. + - **command_on** (*Required*): Value to write to turn on the switch. + - **command_off** (*Required*): Value to write to turn off the switch. + - **verify_state** (*Optional*): Define if is possible to readback the status of the switch. (default: True) + - **verify_register** (*Optional*): Register to readback. (default: same as register) + - **register_type** (*Optional*): Modbus register type: holding or input. (default: holding) + - **state_on** (*Optional*): Register value when switch is on. (default: same as command_on) + - **state_off** (*Optional*): Register value when switch is off. (default: same as command_off) diff --git a/source/_components/switch.mqtt.markdown b/source/_components/switch.mqtt.markdown index 4ad0a6c1f87..3804130cc61 100644 --- a/source/_components/switch.mqtt.markdown +++ b/source/_components/switch.mqtt.markdown @@ -30,20 +30,64 @@ switch: 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 +state_topic: + description: The MQTT topic subscribed to receive state updates. + required: false + type: string +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. diff --git a/source/_components/switch.mystrom.markdown b/source/_components/switch.mystrom.markdown index a9a4e3d7b0c..6fafcbbb783 100644 --- a/source/_components/switch.mystrom.markdown +++ b/source/_components/switch.mystrom.markdown @@ -25,10 +25,17 @@ switch: host: IP_ADRRESS ``` -Configuration variables: - -- **host** (*Required*): The IP address of your myStrom switch, eg. `http://192.168.1.32`. -- **name** (*Optional*): The name to use when displaying this switch. +{% configuration %} +host: + description: "The IP address of your myStrom switch, e.g., `http://192.168.1.32`." + required: true + type: string +name: + description: The name to use when displaying this switch. + required: false + type: string + default: myStrom Switch +{% endconfiguration %} Check if you are able to access the device located at `http://IP_ADRRESS`. The details about your switch is provided as a JSON response. @@ -46,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.rainbird.markdown b/source/_components/switch.rainbird.markdown index 44134393a61..eee1d471b9e 100644 --- a/source/_components/switch.rainbird.markdown +++ b/source/_components/switch.rainbird.markdown @@ -1,46 +1,41 @@ ---- -layout: page -title: "Rain Bird Switch" -description: "Instructions on how to integrate your Rain Bird LNK WiFi Module as Switches 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.57 -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: - -```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 -``` - -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. -- **scan_interval** (*Optional*): How fast to refresh the switch. - -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). +--- +layout: page +title: "Rain Bird Switch" +description: "Instructions on how to integrate your Rain Bird LNK WiFi Module as Switches 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.57 +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. + +Once you have enabled the [Rain Bird component](/components/rainbird), add the following to your `configuration.yaml` file: + +```yaml +switch: + 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 +``` + +Configuration variables: + +- **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. +- **scan_interval** (*Optional*): How fast to refresh the switch. + +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/switch.rest.markdown b/source/_components/switch.rest.markdown index d9e22107b6e..776882cd54b 100644 --- a/source/_components/switch.rest.markdown +++ b/source/_components/switch.rest.markdown @@ -25,16 +25,50 @@ 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 + default: 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 Binary 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 +{% endconfiguration %}

Make sure that the URL matches exactly your endpoint or resource. diff --git a/source/_components/switch.rfxtrx.markdown b/source/_components/switch.rfxtrx.markdown index 73902df97f2..434a4c45639 100644 --- a/source/_components/switch.rfxtrx.markdown +++ b/source/_components/switch.rfxtrx.markdown @@ -51,7 +51,7 @@ Configuration variables: - **fire_event** (*Optional*): Fires an event even if the state is the same as before, for example a doorbell switch. Can also be used for automations.

-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`. +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`.

diff --git a/source/_components/switch.template.markdown b/source/_components/switch.template.markdown index 93880fe6f65..a6f545a97be 100644 --- a/source/_components/switch.template.markdown +++ b/source/_components/switch.template.markdown @@ -55,10 +55,6 @@ switch: description: Name to use in the frontend. 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. - required: false - type: [string, list] value_template: description: Defines a template to set the state of the switch. required: true diff --git a/source/_components/switch.tplink.markdown b/source/_components/switch.tplink.markdown index f54235fede7..5839ff2cef0 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 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/system_log.markdown b/source/_components/system_log.markdown new file mode 100644 index 00000000000..fae6692223e --- /dev/null +++ b/source/_components/system_log.markdown @@ -0,0 +1,37 @@ +--- +layout: page +title: "System Log" +description: "Summary of errors and warnings in Home Assistant during runtime." +date: 2017-11-11 18:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: home-assistant.png +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`. + +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: + +```yaml +system_log: + max_entries: MAX_ENTRIES +``` + +{% configuration %} +max_entries: + description: Number of entries to store (older entries are discarded). + required: false + type: int + default: 50 +{% endconfiguration %} + +## {% linkable_title Services %} + +### {% linkable_title Service `clear` %} + +To manually clear the system log, call this service. + diff --git a/source/_components/tahoma.markdown b/source/_components/tahoma.markdown new file mode 100644 index 00000000000..3d092af3fbc --- /dev/null +++ b/source/_components/tahoma.markdown @@ -0,0 +1,42 @@ +--- +layout: page +title: "Tahoma" +description: "Instructions on how to integrate Somfy Tahoma devices with Home Assistant." +date: 2017-07-18 12:00 +sidebar: true +comments: false +sharing: true +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. + +To use your Tahoma devices in your installation, add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +tahoma: + username: YOUR_USERNAME + password: YOUR_PASSWORD + exclude: [BridgeHUEComponent, HueLampHUEComponent, PodComponent] +``` + +{% configuration %} +username: + description: Username for tahomalink.com + required: true + type: string +password: + description: Password for tahomalink.com + required: true + type: string +exclude: + description: Excludes devices + required: false + type: list +{% endconfiguration %} 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 c4d93c43bc5..be2dcff5e5c 100644 --- a/source/_components/telegram_bot.markdown +++ b/source/_components/telegram_bot.markdown @@ -52,6 +52,23 @@ Send a photo. | `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` %} +Send a video. + +| Service data attribute | Optional | Description | +|---------------------------|----------|--------------------------------------------------| +| `url` | no | Remote path to a video. | +| `file` | no | Local path to a video. | +| `caption` | yes | The title of the 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. | +| `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` %} Send a document. 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..735593a0b19 100644 --- a/source/_components/tellduslive.markdown +++ b/source/_components/tellduslive.markdown @@ -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..de69aaffc3b 100644 --- a/source/_components/tellstick.markdown +++ b/source/_components/tellstick.markdown @@ -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. +- **port** (*Optional*): If needed with host config option. Must be port pair, for example `[50800, 50801]`. diff --git a/source/_components/timer.markdown b/source/_components/timer.markdown index c3e35ab8fbe..b04e480aca9 100644 --- a/source/_components/timer.markdown +++ b/source/_components/timer.markdown @@ -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 diffferentiate 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 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.

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' ``` @@ -92,3 +92,42 @@ Select serv
 }
 ```
 
+### {% linkable_title Configuration example %}
+
+```yaml
+# Example configuration.yaml entry
+
+# Set a timer called test to a duration of 30 seconds: 
+timer:
+  test:
+    duration: Do not use the `api_key` variable. The key is only needed once at initial setup.

+ +

+ +Please make sure you have `autoconf` installed (`apt-get install autoconf`) if you want to use this component. Also, installing some dependencies might take considerable time (>1h) on slow devices. You might have to use `sudo` when installing `autoconf`. + +

diff --git a/source/_components/tts.baidu.markdown b/source/_components/tts.baidu.markdown new file mode 100644 index 00000000000..e8499742fd8 --- /dev/null +++ b/source/_components/tts.baidu.markdown @@ -0,0 +1,62 @@ +--- +layout: page +title: "Baidu Text-to-Speech" +description: "Instructions how to setup Baidu TTS with Home Assistant." +date: 2017-11-21 09:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: baiducloud.png +ha_category: Text-to-speech +ha_release: 0.59 +--- + +The `baidu` text-to-speech platform uses [Baidu TTS engine](https://cloud.baidu.com/product/speech/tts) to read a text with natural sounding voices. + +To get started, add the following lines to your `configuration.yaml`: + +```yaml +#Example configuration.yaml entry +tts: + - platform: baidu + app_id: YOUR_APPID + api_key: YOUR_APIKEY + secret_key: YOUR_SECRETKEY +``` + +{% configuration %} +app_id: + description: The App ID for the use this service, must be already registered on Baidu. + required: true + type: string +api_key: + description: The API key from Baidu. + required: true + type: string +secret_key: + description: The secret key from Baidu. + required: true + type: string +speed: + description: Audio speed from 0 to 9. + required: false + type: int + default: 5 +pitch: + description: Audio pitch from 0 to 9. + required: false + type: int + default: 5 +volume: + description: Audio volume from 0 to 15. + required: false + type: int + default: 5 +person: + description: Voice type. You choose one from 0, 1, 3 or 4. + required: false + type: int + default: 0 +{% endconfiguration %} + diff --git a/source/_components/tts.google.markdown b/source/_components/tts.google.markdown index 50321b01045..cbed90dadad 100644 --- a/source/_components/tts.google.markdown +++ b/source/_components/tts.google.markdown @@ -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.microsoft.markdown b/source/_components/tts.microsoft.markdown index b55acbd0fac..036dfed524e 100644 --- a/source/_components/tts.microsoft.markdown +++ b/source/_components/tts.microsoft.markdown @@ -2,7 +2,7 @@ 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 +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/updater.markdown b/source/_components/updater.markdown index 86991b94d52..4a5b9777b35 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. +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 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/vacuum.markdown b/source/_components/vacuum.markdown index 0428eef3e7d..51b0adc667a 100644 --- a/source/_components/vacuum.markdown +++ b/source/_components/vacuum.markdown @@ -11,7 +11,7 @@ footer: true The `vacuum` component enables the ability to control home cleaning robots within Home Assistant. -To use this component in your installation, add a `vacuum` platform to your `configuration.yaml` file, like the [Xiaomi](/components/vacuum.xiaomi/). +To use this component in your installation, add a `vacuum` platform to your `configuration.yaml` file, like the [Xiaomi](/components/vacuum.xiaomi_miio/). ```yaml # Example configuration.yaml entry diff --git a/source/_components/vacuum.mqtt.markdown b/source/_components/vacuum.mqtt.markdown index df5a01a8cf8..65ed9679cef 100644 --- a/source/_components/vacuum.mqtt.markdown +++ b/source/_components/vacuum.mqtt.markdown @@ -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.xiaomi_miio.markdown b/source/_components/vacuum.xiaomi_miio.markdown index 1528d5c5eec..4abc27588cb 100644 --- a/source/_components/vacuum.xiaomi_miio.markdown +++ b/source/_components/vacuum.xiaomi_miio.markdown @@ -104,7 +104,7 @@ Enter remote control mode, make one move, stop, and exit remote control mode. ## {% 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 +(`battery_icon`, `cleaned_area`, `fan_speed`, `fan_speed_list`, `status`, and `params`), the `xiaomi` platform introduces specific attributes. These are: - `cleaning_time` @@ -121,7 +121,7 @@ The following table shows the units of measurement for each attribute: | Attribute | Unit of measurement | Description | |---------------------------|---------------------|-------------------------------------------------------| | `do_not_disturb` | | DND mode on / off | -| `cleaning_time` | minutes | Last / actual cleaning time in minutes | +| `cleaning_time` | minutes | Last / actual cleaning time in minutes | | `cleaned_area` | square meter | Last / actual cleaned area in square meters | | `main_brush_left` | hours | Hours left until a change of the main brush is needed | | `side_brush_left` | hours | Hours left until a change of the side brush is needed | @@ -141,9 +141,21 @@ easily via a hidden menu item at the Mi-Home app. #### {% linkable_title Windows and Android %} +To fetch the token follow these instructions depending on your mobile phone platform. + +1. Configure the robot with the Mi-Home app. +2. Download and extract the [MiToolKit.zip](https://github.com/ultrara1n/MiToolkit/releases). +3. Enable developer mode and USB debugging on the Android phone and plug it into the computer. +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. + +#### {% 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 @@ -159,18 +171,21 @@ $ 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. Download and extract the [MiToolKit.zip](https://github.com/ultrara1n/MiToolkit/releases). -3. Enable developer mode and USB debugging on the Android phone and plug it into the computer. -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. +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` +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) +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. + #### {% 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 diff --git a/source/_components/vera.markdown b/source/_components/vera.markdown index 670d0292c84..264f39157f7 100644 --- a/source/_components/vera.markdown +++ b/source/_components/vera.markdown @@ -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 1db2480cf9e..d73c9c9e490 100644 --- a/source/_components/verisure.markdown +++ b/source/_components/verisure.markdown @@ -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). diff --git a/source/_components/volvooncall.markdown b/source/_components/volvooncall.markdown index 24a6200f5f9..20b8fc51106 100644 --- a/source/_components/volvooncall.markdown +++ b/source/_components/volvooncall.markdown @@ -25,21 +25,21 @@ volvooncall: password: password ``` -Users registered with Volvo in North America or China will need to specify a service URL: +Users registered with Volvo in North America or China will need to specify a region: ```yaml # North America volvooncall: username: username password: password - service_url: 'https://vocapi-na.wirelesscar.net/customerapi/rest/v3.0/' + region: na ``` ```yaml # China volvooncall: username: username password: password - service_url: 'https://vocapi-cn.wirelesscar.net/customerapi/rest/v3.0/' + region: cn ``` A more advanced example for setting the vehicle name and selecting what resources to display: @@ -61,7 +61,9 @@ Configuration variables: - **username** (*Required*): The username associated with your Volvo On Call account. - **password** (*Required*): The password for your given Volvo On Call account. -- **service_url** (*Optional*): The service URL to use for Volvo On Call (defaults to https://vocapi.wirelesscar.net/customerapi/rest/v3.0/). +- **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. - **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/waterfurnace.markdown b/source/_components/waterfurnace.markdown new file mode 100644 index 00000000000..b747ff597a2 --- /dev/null +++ b/source/_components/waterfurnace.markdown @@ -0,0 +1,68 @@ +--- +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 + +To use Waterfurnace in your installation, add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +waterfurnace: + username: you@example.com + password: secr3tpassword + 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 it's performance, but a full climate +interface won't be implemented. diff --git a/source/_components/weather.bom.markdown b/source/_components/weather.bom.markdown index 03bc747f403..3a9d64c81a3 100644 --- a/source/_components/weather.bom.markdown +++ b/source/_components/weather.bom.markdown @@ -22,10 +22,17 @@ weather: - platform: bom ``` -Configuration variables: - -- **name** (*Optional*): The name you would like to give to the weather station. -- **station** (*Optional*): The station ID string; defaults to the closest station. See the [`sensor.bom` docs](/components/sensor.bom/) for details on how to find the ID of a station. +{% configuration %} +name: + description: The name you would like to give to the weather station. + required: optional + type: string +station: + description: "The station ID string. See the [`sensor.bom` docs](/components/sensor.bom/) for details on how to find the ID of a station." + required: optional + default: The closest station + type: string +{% endconfiguration %}

This platform is an alternative to the [`bom`](/components/sensor.bom/) sensor. diff --git a/source/_components/weather.darksky.markdown b/source/_components/weather.darksky.markdown new file mode 100644 index 00000000000..0352ef6074e --- /dev/null +++ b/source/_components/weather.darksky.markdown @@ -0,0 +1,70 @@ +--- +layout: page +title: "Dark Sky" +description: "Instructions how to integrate Dark Sky within Home Assistant." +date: 2016-09-29 09:00 +sidebar: true +comments: false +sharing: true +footer: 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. + +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..0f328309630 --- /dev/null +++ b/source/_components/weather.ecobee.markdown @@ -0,0 +1,16 @@ +--- +layout: page +title: "Ecobee Weather" +description: "Instructions 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.metoffice.markdown b/source/_components/weather.metoffice.markdown index d05b55431e6..58751218063 100644 --- a/source/_components/weather.metoffice.markdown +++ b/source/_components/weather.metoffice.markdown @@ -20,16 +20,15 @@ To add the Met Office weather platform to your installation, you'll need to regi ```yaml 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/websocket_api.markdown b/source/_components/websocket_api.markdown new file mode 100644 index 00000000000..4eff8a8a3f6 --- /dev/null +++ b/source/_components/websocket_api.markdown @@ -0,0 +1,25 @@ +--- +layout: page +title: "Websocket API" +description: "Instructions 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/xiaomi_aqara.markdown b/source/_components/xiaomi_aqara.markdown index 61d3ed9231d..c5cdbcc7885 100644 --- a/source/_components/xiaomi_aqara.markdown +++ b/source/_components/xiaomi_aqara.markdown @@ -9,7 +9,7 @@ sharing: true footer: true logo: xiaomi.png ha_category: Hub -ha_release: "0.50" +ha_release: "0.57" ha_iot_class: "Local Push" redirect_from: /components/xiaomi/ --- @@ -49,14 +49,14 @@ The `xiaomi_aqara` component allows you to integrate [Xiaomi](http://www.mi.com/ ## {% linkable_title Setup %} -Follow the setup process using your phone and Mi-Home app. From here you will be able to retrieve the key from within the app following [this tutorial](https://community.home-assistant.io/t/beta-xiaomi-gateway-integration/8213/1832). +Follow the setup process using your phone and Mi-Home app. From here you will be able to retrieve the key (password) from within the app following [this tutorial](https://www.domoticz.com/wiki/Xiaomi_Gateway_(Aqara)#Adding_the_Xiaomi_Gateway_to_Domoticz). To enable {{ page.title }} in your installation, add the following to your `configuration.yaml` file: ### {% 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 +66,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 @@ -106,7 +106,7 @@ xiaomi_aqara: 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. + 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 %} @@ -115,7 +115,7 @@ xiaomi_aqara: 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 +155,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 +163,13 @@ Stops a playing ringtone immediately. |---------------------------|----------|-------------------------------------------------------| | `gw_mac` | no | MAC address of the Xiaomi Aqara Gateway | -#### {% linkable_title Service xiaomi_aqara.add_device %} +#### {% 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 +177,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 +190,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 +222,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 %} @@ -236,12 +255,14 @@ 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://community.home-assistant.io/t/beta-xiaomi-gateway-integration/8213/1832). +- 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 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/_cookbook/configuration_yaml_by_aneisch b/source/_cookbook/configuration_yaml_by_aneisch.markdown similarity index 74% rename from source/_cookbook/configuration_yaml_by_aneisch rename to source/_cookbook/configuration_yaml_by_aneisch.markdown index ec652e87ac4..fa59c4f6483 100644 --- a/source/_cookbook/configuration_yaml_by_aneisch +++ 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_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_cy1701 b/source/_cookbook/configuration_yaml_by_cy1701.markdown similarity index 100% rename from source/_cookbook/configuration_yaml_by_cy1701 rename to source/_cookbook/configuration_yaml_by_cy1701.markdown diff --git a/source/_cookbook/configuration_yaml_by_mf_social.markdown b/source/_cookbook/configuration_yaml_by_mf_social.markdown new file mode 100644 index 00000000000..67eb9d16280 --- /dev/null +++ b/source/_cookbook/configuration_yaml_by_mf_social.markdown @@ -0,0 +1,12 @@ +--- +layout: page +title: "Configuration.yaml by mf_social" +description: "" +date: 2017-10-11 11:45 +sidebar: true +comments: false +sharing: true +footer: true +ha_category: Example configuration.yaml +ha_external_link: https://github.com/mf-social/Home-Assistant +--- 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_stanvx b/source/_cookbook/configuration_yaml_by_stanvx.markdown similarity index 100% rename from source/_cookbook/configuration_yaml_by_stanvx rename to source/_cookbook/configuration_yaml_by_stanvx.markdown diff --git a/source/_cookbook/custom_panel_using_react.markdown b/source/_cookbook/custom_panel_using_react.markdown index b8f5f8d59b8..800f2f3378d 100644 --- a/source/_cookbook/custom_panel_using_react.markdown +++ b/source/_cookbook/custom_panel_using_react.markdown @@ -18,7 +18,7 @@ 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. 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/_data/glossary.yml b/source/_data/glossary.yml index 7ee16d84fb3..e66face48b2 100644 --- a/source/_data/glossary.yml +++ b/source/_data/glossary.yml @@ -27,17 +27,17 @@ - topic: Template description: "A [template](/docs/automation/templating/) is an automation definition that can include variables for the service or data from the trigger values. This allows automations to generate dynamic actions." - topic: Script - description: "[Scripts](/docs/scripts/) are components that allow users to specify a sequence of actions to be executed by Home Assistant when turned on" + description: "[Scripts](/docs/scripts/) are components that allow users to specify a sequence of actions to be executed by Home Assistant when turned on." - topic: Scene description: "[Scenes](/components/scene/) 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." - topic: HADashboard description: "[HADashboard](/docs/ecosystem/hadashboard/) is a modular, skinnable dashboard for Home Assistant that is intended to be wall mounted, and is optimized for distance viewing." - topic: hass - description: "HASS or [hass](/docs/tools/hass/) is often used as an abbreviation for Home Assistant. It is aslo the comand line tool for accessing" + description: "HASS or [hass](/docs/tools/hass/) is often used as an abbreviation for Home Assistant. It is also the command line tool." - topic: Hass.io - description: "[Hass.io](/hassio/) is an operating system that will take care of installing and updating Home Assistant, is managed from the Home Assistant UI, allows creating/restoring snapshots of your configuration, and can easily be extended" + description: "[Hass.io](/hassio/) is an operating system that will take care of installing and updating Home Assistant, is managed from the Home Assistant UI, allows creating/restoring snapshots of your configuration, and can easily be extended." - topic: Cookbook - description: "The [Cookbook](/cookbook/) contains a set of configuration examples of Home Assistant from the community" + 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." - topic: Customize diff --git a/source/_docs/automation/editor.markdown b/source/_docs/automation/editor.markdown index d7f17072139..8db389733c4 100644 --- a/source/_docs/automation/editor.markdown +++ b/source/_docs/automation/editor.markdown @@ -62,6 +62,8 @@ automation old: 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. + ```yaml # Example automations.yaml entry - id: my_unique_id # <-- Required for editor to work. diff --git a/source/_docs/automation/examples.markdown b/source/_docs/automation/examples.markdown index a1eb7ddfae7..9e28e0b3e76 100644 --- a/source/_docs/automation/examples.markdown +++ b/source/_docs/automation/examples.markdown @@ -12,6 +12,7 @@ redirect_from: /getting-started/automation-examples/ Just some sample automation rules to get you started. +{% raw %} ```yaml # Example of entry in configuration.yaml automation: @@ -64,4 +65,20 @@ automation: service: notify.notify data: message: 'Paulus left the house' + +# Send a notification via Pushover with the event of a Xiaomi cube. Custom event from the Xiaomi component. + - alias: 'Xiaomi Cube Action' + hide_entity: false + initial_state: false + trigger: + platform: event + event_type: cube_action + 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 }}" ``` +{% endraw %} diff --git a/source/_docs/automation/templating.markdown b/source/_docs/automation/templating.markdown index a53912dc46c..74f0427f48c 100644 --- a/source/_docs/automation/templating.markdown +++ b/source/_docs/automation/templating.markdown @@ -51,6 +51,14 @@ There are a few very important rules to remember when writing automation templat Remembering these simple rules will help save you from many headaches and endless hours of frustration when using automation templates. +## {% linkable_title Trigger State Object %} + +Knowing how to access the [state object](/docs/configuration/state_object/) of a trigger entity could be one of the more common questions. Here are a few ways for the [`state`](#state), [`numeric_state`](#numeric_state) and [`template`](#template) triggers: + +* `trigger.from_state` will return the **previous** [state object](/docs/configuration/state_object/) of the entity. +* `trigger.to_state` will return the **new** [state object](/docs/configuration/state_object/) that triggered trigger. +* `states[trigger.to_state.domain][trigger.to_state.object_id]` will return the **current** [state object](/docs/configuration/state_object/) of the entity. + ## {% linkable_title Available Trigger Data %} The following tables show the available trigger data per platform. @@ -61,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 a54145e0956..140fd421aed 100644 --- a/source/_docs/automation/trigger.markdown +++ b/source/_docs/automation/trigger.markdown @@ -138,7 +138,7 @@ The US Naval Observatory has a [tool](http://aa.usno.navy.mil/data/docs/AltAz.ph ### {% linkable_title Template trigger %} -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] 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 %}`) ```yaml diff --git a/source/_docs/autostart/init.d.markdown b/source/_docs/autostart/init.d.markdown index 9f67cbdb2b5..dba77396779 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 deamon 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 %} @@ -73,54 +87,211 @@ HASS_BIN="hass" RUN_AS="USER" PID_FILE="/var/run/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() { + if [ ! -d "$PID_DIR" ]; then + echo "It seems you did not run" + echo -e "\tservice hass-daemon install" + return 1 + fi 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() { + if [ ! -d "$PID_DIR" ]; then + echo "It seems you did not run" + echo -e "\tservice hass-daemon install" + return 1 + fi + 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/systemd.markdown b/source/_docs/autostart/systemd.markdown index f4d3b25ff83..e1e1b6b4669 100644 --- a/source/_docs/autostart/systemd.markdown +++ b/source/_docs/autostart/systemd.markdown @@ -28,7 +28,7 @@ A service file is needed to control Home Assistant with `systemd`. The template ``` [Unit] Description=Home Assistant -After=network.target +After=network-online.target [Service] Type=simple @@ -46,7 +46,7 @@ If you've setup Home Assistant in `virtualenv` following our [Python installatio ``` [Unit] Description=Home Assistant -After=network.target +After=network-online.target [Service] Type=simple @@ -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/configuration/customizing-devices.markdown b/source/_docs/configuration/customizing-devices.markdown index 43f6885f334..71b8a2f561a 100644 --- a/source/_docs/configuration/customizing-devices.markdown +++ b/source/_docs/configuration/customizing-devices.markdown @@ -63,7 +63,7 @@ homeassistant: | `homebridge_hidden` | Set to `true` to hide the entity from `HomeBridge`. | `emulated_hue_hidden` | Set to `true` to hide the entity from `emulated_hue`. | `entity_picture` | Url to use as picture for entity. -| `icon` | Any icon from [MaterialDesignIcons.com](http://MaterialDesignIcons.com). Prefix name with `mdi:`, ie `mdi:home`. +| `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. | `device_class` | Sets the class of the device, changing the device state and icon that is displayed on the UI (see below). | `initial_state` | Sets the initial state for automations. `on` or `off`. 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/packages.markdown b/source/_docs/configuration/packages.markdown index 09feb26aabd..584014521f4 100644 --- a/source/_docs/configuration/packages.markdown +++ b/source/_docs/configuration/packages.markdown @@ -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. diff --git a/source/_docs/configuration/remote.markdown b/source/_docs/configuration/remote.markdown index 8bcc7420d71..bd0d0ba60b5 100644 --- a/source/_docs/configuration/remote.markdown +++ b/source/_docs/configuration/remote.markdown @@ -10,7 +10,7 @@ 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. +If you're interested in logging in to Home Assistant while away, you'll have to make your instance remotely accessible. Remember to follow the [securing checklist](/docs/configuration/securing/) before doing this. 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`. diff --git a/source/_docs/configuration/secrets.markdown b/source/_docs/configuration/secrets.markdown index b5feb55b2b4..523bba9c4c4 100644 --- a/source/_docs/configuration/secrets.markdown +++ b/source/_docs/configuration/secrets.markdown @@ -85,7 +85,7 @@ If you launch Home Assistant now, you will be prompted for the keyring password ```bash $ hass -Config directory: /home/fab/.homeassistant +Config directory: /home/homeassistant/.homeassistant Please enter password for encrypted keyring: ``` @@ -97,7 +97,7 @@ Please enter password for encrypted keyring: 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 +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 diff --git a/source/_docs/configuration/templating.markdown b/source/_docs/configuration/templating.markdown index c02fbb7f2a2..a0d56a158ac 100644 --- a/source/_docs/configuration/templating.markdown +++ b/source/_docs/configuration/templating.markdown @@ -75,9 +75,9 @@ Home Assistant adds extensions to allow templates to access all of the current s - `as_timestamp()` will convert datetime object or string to UNIX timestamp - `distance()` will measure the distance in meters 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. - 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. @@ -254,6 +254,8 @@ The following overview contains a couple of options to get the needed values: # Math {% raw %}{{ value_json | float * 1024 }}{% endraw %} {% raw %}{{ float(value_json) * (2**10) }}{% endraw %} +{% raw %}{{ value_json | log }}{% endraw %} +{% raw %}{{ log(1000, 10) }}{% endraw %} # Timestamps {% raw %}{{ value_json.tst | timestamp_local }}{% endraw %} diff --git a/source/_docs/ecosystem/appdaemon.markdown b/source/_docs/ecosystem/appdaemon.markdown index e2a8d23d68f..ca2a59f65e4 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): @@ -79,7 +79,7 @@ This is starting to get a little more complex in Home Assistant automations, req 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. ```python -import homeassistant.appapi as appapi +import appdaemon.appapi as appapi class MotionLights(appapi.AppDaemon): diff --git a/source/_docs/ecosystem/certificates/lets_encrypt.markdown b/source/_docs/ecosystem/certificates/lets_encrypt.markdown index edc5fe6b2b3..2841c355031 100644 --- a/source/_docs/ecosystem/certificates/lets_encrypt.markdown +++ b/source/_docs/ecosystem/certificates/lets_encrypt.markdown @@ -254,7 +254,7 @@ If you did not already log in as the user that currently runs Home Assistant, ch $ sudo su -s /bin/bash hass ``` -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 +269,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 +304,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. @@ -519,7 +526,7 @@ $ ./certbot-auto renew --quiet --no-self-upgrade --standalone --preferred-challe * 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. %} diff --git a/source/_docs/ecosystem/hass-configurator.markdown b/source/_docs/ecosystem/hass-configurator.markdown index bca0a948ee6..d88d4a2d7fe 100644 --- a/source/_docs/ecosystem/hass-configurator.markdown +++ b/source/_docs/ecosystem/hass-configurator.markdown @@ -15,6 +15,11 @@ redirect_from: /ecosystem/hass-configurator/ 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.. +

+ +Screenshot of the HASS Configurator. +

+ ### {% linkable_title Feature list %} - Web-Based editor to modify your files @@ -34,14 +39,14 @@ Consider running the configurator as a user with limited privileges to limit pos ### {% 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) +- 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. +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) @@ -64,6 +69,10 @@ Limit access to the configurator by adding allowed IP addresses / networks to th 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__"]`. +#### 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. diff --git a/source/_docs/frontend/browsers.markdown b/source/_docs/frontend/browsers.markdown index d0ead42c919..6ad520acfc1 100644 --- a/source/_docs/frontend/browsers.markdown +++ b/source/_docs/frontend/browsers.markdown @@ -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 | | @@ -39,7 +39,7 @@ We would appreciate if you help to keep this page up-to-date and add feedback. | :-------------------- |:---------------|:-----------|:-------------------------| | [Firefox] | 57.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/installation.markdown b/source/_docs/installation.markdown index c5fe54e9ed8..4b54abe2d32 100644 --- a/source/_docs/installation.markdown +++ b/source/_docs/installation.markdown @@ -10,9 +10,25 @@ footer: true redirect_from: /getting-started/installation/ --- -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**. +

+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 3.5+](https://www.python.org/downloads/) installed.
+ +
+ +
+
Hass.io
(Beginner friendly)
+
+ +
+ +
+
On top of an existing Python 3.5+ installation
+
diff --git a/source/_docs/installation/docker.markdown b/source/_docs/installation/docker.markdown index 4b3d8de4633..0b327c90076 100644 --- a/source/_docs/installation/docker.markdown +++ b/source/_docs/installation/docker.markdown @@ -54,9 +54,10 @@ The steps would be: * 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 "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" * Click on "Next" and then "Apply" -* Your Home Assistant within Docker should now run +* 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 @@ -64,14 +65,68 @@ Remark: to update your Home Assistant on your Docker within Synology NAS, you ju * 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 loose any data, as all files are stored in your config-directory +* Right-click on it and select "Action"->"Clear". You won't lose any data, as all files are stored in your config-directory * Start the container again - it will then boot up with the new Home Assistant image -### {% linkable_title Restart %} +Remark: to restart your Home Assistant within Synology NAS, you just have to do the following: +* Go to the Docker-app and move to "Container"-section +* Right-click on it and select "Action"->"Restart". -This will launch Home Assistant and serve the web interface from port 8123 on your Docker host. +

+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 %} 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 an terminal by running `docker restart home-assistant` + 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: + web: + 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 +``` + +### {% linkable_title Exposing Devices %} + +In order to use z-wave, zigbee 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: + web: + 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/customization.markdown b/source/_docs/installation/hassbian/customization.markdown index 68a544461db..dd33b47401c 100644 --- a/source/_docs/installation/hassbian/customization.markdown +++ b/source/_docs/installation/hassbian/customization.markdown @@ -21,8 +21,8 @@ To view the available packages run `hassbian-config show` and `sudo hassbian-con - 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. + - Install Duck DNS auto renewal. This script adds a cron job to auto update 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 a web terminal for easy access to ssh in any web browser. This script installs a web terminal called 'shellinabox' on your system that gives you SSH access in your web browser. #### Upgrade scripts To view the available packages run `hassbian-config show` and `sudo hassbian-config upgrade PACKAGENAME`. diff --git a/source/_docs/installation/python.markdown b/source/_docs/installation/python.markdown index e0603a076c1..a7dda882e25 100644 --- a/source/_docs/installation/python.markdown +++ b/source/_docs/installation/python.markdown @@ -22,7 +22,7 @@ Running these commands will: - Install Home Assistant - Launch Home Assistant and serve the web interface on [http://localhost:8123](http://localhost:8123) -If you're running a Linux-based platform, we suggest you follow the [VirtualEnv instructions](/docs/installation/virtualenv/) to avoid using `root`. +If you're running a Linux-based platform, we suggest you follow the instructions for a [virtual environment](/docs/installation/virtualenv/) to avoid using `root`. Video tutorials of this process for various operating systems are available here: @@ -30,3 +30,4 @@ Video tutorials of this process for various operating systems are available here - [macOS](https://www.youtube.com/watch?v=hej6ipN86ls) - [Ubuntu 14.04](https://www.youtube.com/watch?v=SXaAG1lGNH0) +Keep in mind that the used operating systems and the shown software releases may be outdated. diff --git a/source/_docs/installation/raspberry-pi-all-in-one.markdown b/source/_docs/installation/raspberry-pi-all-in-one.markdown index 485fc64ffdb..6039ffed440 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](https://home-assistant.io/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..f78838ec5ab 100644 --- a/source/_docs/installation/raspberry-pi.markdown +++ b/source/_docs/installation/raspberry-pi.markdown @@ -72,6 +72,8 @@ 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. +

diff --git a/source/_docs/installation/troubleshooting.markdown b/source/_docs/installation/troubleshooting.markdown index 5edabe046ae..29566bb36ec 100644 --- a/source/_docs/installation/troubleshooting.markdown +++ b/source/_docs/installation/troubleshooting.markdown @@ -14,7 +14,7 @@ It can happen that you run into trouble while installing Home Assistant. This pa #### {% linkable_title pip3: command not found %} -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 installation. Check if Python 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: @@ -72,3 +72,6 @@ After upgrading to a new version, you may notice your browser gets stuck at the Android Chrome chrome -> settings -> site settings -> storage -> search for your URL for Home Assistant-> "clear & reset" +#### {% linkable_title Not initializing discovery because could not install dependency netdisco %} + +If you see `Not initializing discovery because could not install dependency netdisco==x.y.z` 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. diff --git a/source/_docs/installation/updating.markdown b/source/_docs/installation/updating.markdown index f5df3a9361b..a23aa31b27f 100644 --- a/source/_docs/installation/updating.markdown +++ b/source/_docs/installation/updating.markdown @@ -11,9 +11,11 @@ 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/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). + The default way to update Home Assistant to the latest release, when available, is: ```bash @@ -23,7 +25,7 @@ $ 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.

-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 [HASSIO](/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). +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).

[BRUH automation](http://www.bruhautomation.com) has created [a tutorial video](https://www.youtube.com/watch?v=tuG2rs1Cl2Y) explaining how to upgrade Home Assistant. diff --git a/source/_docs/installation/virtualenv.markdown b/source/_docs/installation/virtualenv.markdown index 00e487c03f2..e62966b26c5 100644 --- a/source/_docs/installation/virtualenv.markdown +++ b/source/_docs/installation/virtualenv.markdown @@ -1,7 +1,7 @@ --- layout: page -title: "Installation in virtualenv" -description: "Instructions how to install Home Assistant in a virtual environment." +title: "Installation in Python virtual environment" +description: "How to install Home Assistant in a Python virtual environment." date: 2016-4-16 16:40 sidebar: true comments: false @@ -10,97 +10,59 @@ footer: true redirect_from: /getting-started/installation-virtualenv/ --- -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. +If you already have Python 3.5 or later installed, you can easily give Home Assistant a spin. -Virtualenvs are pretty easy to setup. This example will walk through one method of setting one up (there are certainly others). 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. +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. -### {% linkable_title Step 0: Install some dependencies %} +_(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`.)_ -```bash -$ sudo apt-get update -$ sudo apt-get upgrade -$ sudo apt-get install python3-pip python3-dev -$ sudo pip3 install --upgrade virtualenv -``` +### {% linkable_title Install %} -### {% linkable_title Step 1: Create a Home Assistant user & group %} + 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 Home Assistant: + ``` + $ python3 -m pip install homeassistant + ``` + 5. Configure it to [autostart](/docs/autostart/) + 6. Or run Home Assistant manually: + ``` + $ hass --open-ui + ``` + +### {% linkable_title Upgrade %} -This step is optional, but 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). + 1. Stop Home Assistant -```bash -$ sudo adduser --system homeassistant -$ sudo addgroup homeassistant -``` + 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 -Home Assistant stores its configuration in `$HOME/.homeassistant` by default, so in this case, it would be in `/home/homeassistant/.homeassistant` +### {% linkable_title Notes %} -If you plan to use a Z-Wave controller, you will need to add this user to the `dialout` group +- In the future, if you want to start Home Assistant manually again, follow step 2, 3 and 5. +- It's recommanded to run Home Assistant as a dedicated user. -```bash -$ sudo usermod -G dialout -a homeassistant -``` - -### {% linkable_title Step 2: Create a directory for Home Assistant %} - -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 (if you created one). - -```bash -$ sudo mkdir /srv/homeassistant -$ sudo chown homeassistant:homeassistant /srv/homeassistant -``` - -### {% linkable_title Step 3: Become the new user %} - -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). - -### {% linkable_title Step 4: Set up the virtualenv %} - -All this step does is stick a Python environment in the directory we're using. That's it. It's just a directory. There's nothing special about it, and it is entirely self-contained. - -It will include a `bin` directory, which will contain all the executables used in the virtualenv (including Home Assistant itself). It also includes a script called `activate` which we will use to activate the virtualenv. - -```bash -$ virtualenv -p python3 /srv/homeassistant -``` - -### {% linkable_title Step 5: Activate the virtualenv %} - -```bash -$ source /srv/homeassistant/bin/activate -``` - -After that, your prompt should include `(homeassistant)`. - -### {% linkable_title Step 6: Install Home Assistant %} - -Once your virtualenv has been activated, you don't need to `sudo` any of your `pip` commands. `pip` will be installing things in the virtualenv, which the `homeassistant` user has permission to modify. - -```bash -(homeassistant)$ pip3 install --upgrade homeassistant -``` - -And that's it... you now have Home Assistant installed, and you can be sure that every bit of it is contained in `/srv/homeassistant`. - -### {% linkable_title Finally... Run Home Assistant %} - -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` user 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 Upgrading Home Assistant %} - -Upgrading Home Assistant is simple, just repeat steps 3, 5 and 6. - -### {% 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. +

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

diff --git a/source/_docs/installation/windows.markdown b/source/_docs/installation/windows.markdown index 899040bc125..1c9ced30b04 100644 --- a/source/_docs/installation/windows.markdown +++ b/source/_docs/installation/windows.markdown @@ -9,7 +9,11 @@ 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. +

Start @@ -23,5 +27,5 @@ 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.

diff --git a/source/_docs/mqtt/discovery.markdown b/source/_docs/mqtt/discovery.markdown index 98daf5e74ea..e9139095d75 100644 --- a/source/_docs/mqtt/discovery.markdown +++ b/source/_docs/mqtt/discovery.markdown @@ -16,6 +16,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/) +- [Covers](/components/cover.mqtt/) - [Fans](/components/fan.mqtt/) - [Lights](/components/light.mqtt/) - [Sensors](/components/sensor.mqtt/) diff --git a/source/_docs/scripts.markdown b/source/_docs/scripts.markdown index bffc89b8a7b..d61ee449b8d 100644 --- a/source/_docs/scripts.markdown +++ b/source/_docs/scripts.markdown @@ -124,6 +124,16 @@ event_data: 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. +``` +event: MY_EVENT +event_data_template: + name: myEvent + customData: "{{ myCustomVariable }}" +``` + + [Script component]: /components/script/ [automations]: /getting-started/automation-action/ diff --git a/source/_docs/scripts/conditions.markdown b/source/_docs/scripts/conditions.markdown index 5763106da34..3314e0f4273 100644 --- a/source/_docs/scripts/conditions.markdown +++ b/source/_docs/scripts/conditions.markdown @@ -114,6 +114,23 @@ condition: after_offset: "-1:00:00" ``` +Here is a truth table to clarify the parameters with and without offset: + +| command | night | at sunrise | daytime | at sunset | +| ---------------------------------- | ------------ |:-----------:| ------- |:----------:| +| `after: sunset` | True | ⇒ | False | ⇒ | +| + `after_offset: "01:00:00"` | True | ⇒ | False | **+1h** | +| + `after_offset: "-01:00:00"` | True | ⇒ | False | **-1h** | +| `before: sunset` | False | ⇒ | True | ⇒ | +| + `before_offset: "01:00:00"` | False | ⇒ | True | **+1h** | +| + `before_offset: "-01:00:00"` | False | ⇒ | True | **-1h** | +| `after: sunrise` | False | ⇒ | True | ⇒ | +| + `after_offset: "01:00:00"` | False | **+1h** | True | ⇒ | +| + `after_offset: "-01:00:00"` | False | **-1h** | True | ⇒ | +| `before: sunrise` | True | ⇒ | False | ⇒ | +| + `before_offset: "01:00:00"` | True | **+1h** | False | ⇒ | +| + `before_offset: "-01:00:00"` | True | **-1h** | False | ⇒ | + ### {% linkable_title Template condition %} The template condition will test if the [given template][template] renders a value equal to true. This is achieved by having the template result in a true boolean expression or by having the template render 'true'. @@ -146,7 +163,7 @@ condition: ``` Valid values for `weekday` are `mon`, `tue`, `wed`, `thu`, `fri`, `sat`, `sun`. -Time condition windows can span across the midnight threshold. In the example above, the condition window is from 3pm to 2am. +Time condition windows can span across the midnight threshold. In the example above, the condition window is from 3pm to 2am. ### {% linkable_title Zone condition %} diff --git a/source/_docs/z-wave.markdown b/source/_docs/z-wave.markdown index 98c9ffc9008..c6a68fb3c65 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. diff --git a/source/_docs/z-wave/adding.markdown b/source/_docs/z-wave/adding.markdown index 8c2e52017be..04c01cc9271 100644 --- a/source/_docs/z-wave/adding.markdown +++ b/source/_docs/z-wave/adding.markdown @@ -2,7 +2,7 @@ layout: page title: "Z-Wave Devices - Adding and Removing" description: "How to add and remove Z-Wave devices." -date: 2016-02-27 19:59 +date: 2017-11-08 19:06 sidebar: true comments: false sharing: true @@ -11,17 +11,36 @@ footer: true ## {% linkable_title Adding Non-Secure Devices %} -To add (include) a non-secure Z-Wave [device](/docs/z-wave/devices/) to your system, go to the [Z-Wave control panel](/docs/z-wave/control-panel/) in the Home Assistant frontend and click the **Add Node** button in the *Z-Wave Network Management* card. This will place the controller in inclusion mode, after which you should activate your device to be included by following the instructions provided with the device. Don't use this for secure devices, since this is likely to limit the features the device supports. +To add (include) a non-secure Z-Wave [device](/docs/z-wave/devices/) to your system: + +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* + +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 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. +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.

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 before being added to the network using the **Add Secure Node** button in the Z-Wave Network Management card. 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. +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. + +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 %} An easy script to generate a random key: ```bash @@ -37,7 +56,19 @@ 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 + ## {% linkable_title Removing Devices %} -To remove (exclude) a Z-Wave device from your system, go to the Z-Wave control panel in the Home Assistant frontend and click the **Remove Node** button in the *Z-Wave Network Management* card. This will place the controller in exclusion mode, after which you should activate your device to be excluded by following the instructions provided with the device. +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* diff --git a/source/_docs/z-wave/control-panel.markdown b/source/_docs/z-wave/control-panel.markdown index 2327e51117f..c33375f242b 100644 --- a/source/_docs/z-wave/control-panel.markdown +++ b/source/_docs/z-wave/control-panel.markdown @@ -36,7 +36,8 @@ Here is where you [include and exclude](/docs/z-wave/adding/) Z-Wave devices fro * **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 + +* **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 * **Heal Node** starts healing of the node.(Update neighbour list and update return routes) @@ -53,7 +54,9 @@ This is a dropdown where you can select all the entities of this node. Once sele * **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) -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. @@ -109,6 +112,26 @@ You can set the *wakeup* interval (in seconds) of the device, this is shown for Underneath that you can select any supported configuration parameter to see the current setting. You can then change this and select **Set Config Parameter** to updated it. Battery powered devices will be updated the next time they wake. +## {% 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: +```yaml +\x30 = 0 +\x31 = 1 +\x32 = 2 +\x33 = 3 +\x34 = 4 +\x35 = 5 +\x36 = 6 +\x37 = 7 +\x38 = 8 +\x39 = 9 +``` +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/ + + ## {% linkable_title OZW Log %} +If you want to only retrieve some lines at the end of the log, you can specify that with the selection field. Max is the last 1000 lines and minimum is 0 which equals the whole log. If this is not specified, you will retrieve the whole log. Select **Refresh** to display the log if you need it to check activities. diff --git a/source/_docs/z-wave/device-specific.markdown b/source/_docs/z-wave/device-specific.markdown index f7a219a2fc2..30e6bef26d5 100644 --- a/source/_docs/z-wave/device-specific.markdown +++ b/source/_docs/z-wave/device-specific.markdown @@ -47,12 +47,24 @@ $ echo -e -n "\x01\x08\x00\xF2\x51\x01\x01\x05\x01\x50" > /dev/serial/by-id/usb- ### {% linkable_title Razberry Board %} -You need to disable the on-board Bluetooth since the board requires the use of the hardware UART (and there's only one on the Pi3). You do this by adding the following to the end of `/boot/config.txt`, then rebooting: +You need to disable the on-board Bluetooth since the board requires the use of the hardware UART (and there's only one on the Pi3). You do this by adding the following to the end of `/boot/config.txt`: ``` dtoverlay=pi3-disable-bt ``` +Then disable the Bluetooth modem service: + +```bash +$ 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`. @@ -66,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: @@ -75,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: @@ -84,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: @@ -93,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: @@ -102,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: @@ -111,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: @@ -120,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: @@ -131,6 +136,14 @@ 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 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: @@ -156,3 +169,66 @@ Triple tap on|1|4 Triple tap off|2|4 Tap and hold on|1|2 Tap and hold off|2|2 + +### {% linkable_title Fibaro Button FGPB-101-6 v3.2 %} + + + +For the Button, 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** +:-----:|:-----:|:-----: +Single tap on|1|0 +Double tap on|1|3 +Triple tap on|1|4 + +Tap and hold wakes up the Button. + +### {% linkable_title Aeotec Wallmote %} + + + +For the Aeotec Wallmote, 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 Wallmote (as a reference for other similar devices): + +**Action**|**scene\_id**|**scene\_data** +:-----:|:-----:|:-----: +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 WallC-S Switch %} + +Use the same configuration as for the Aeotec Wallmote. diff --git a/source/_docs/z-wave/entities.markdown b/source/_docs/z-wave/entities.markdown index d18e7e39047..b5a597b4ebf 100644 --- a/source/_docs/z-wave/entities.markdown +++ b/source/_docs/z-wave/entities.markdown @@ -119,7 +119,7 @@ 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: ``` binary_sensor: @@ -128,10 +128,10 @@ binary_sensor: YOUR_SENSOR: friendly_name: "Friendly name here" value_template: >- - {% raw %}{%- if is_state('sensor.YOUR_SENSOR_access_control', '22') -%} - on + {% raw %}{%- if is_state('sensor.YOUR_ORIGINAL_SENSOR_access_control', '22') -%} + true {%- else -%} - off + false {%- endif -%}{% endraw %} ``` @@ -147,7 +147,7 @@ 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 an `burglar` entity, but not a `binary_sensor` equivalent, you can use a [template binary sensor](/components/binary_sensor.template/) to create one: ``` binary_sensor: @@ -157,9 +157,9 @@ binary_sensor: friendly_name: "Friendly name here" value_template: >- {% raw %}{%- if is_state('sensor.YOUR_SENSOR_burglar', '8') -%} - on + true {%- else -%} - off + false {%- endif -%}{% endraw %} ``` diff --git a/source/_docs/z-wave/installation.markdown b/source/_docs/z-wave/installation.markdown index 40ef9739c62..d5bdbae4c98 100644 --- a/source/_docs/z-wave/installation.markdown +++ b/source/_docs/z-wave/installation.markdown @@ -25,7 +25,11 @@ $ sudo /Applications/Python\ x.x/Install\ Certificates.command ```

-The installation of python-openzwave can take half an hour or more on a Raspbery Pi. +The 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. +

+ +

+On Raspberry Pi you will need to enable the serial interface in the raspbi-config tool before you can add Z-Wave to Home Assistant.

## {% linkable_title Configuration %} @@ -159,7 +163,7 @@ To enable Z-Wave, plug your Z-Wave USB stick into your Raspberry Pi 3 and add th ```yaml zwave: - usb_path: /dev/ttyACM0 + usb_path: /dev/ttyAMA0 ``` 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: @@ -170,6 +174,15 @@ $ curl -d '{"devices": ["ttyAMA0"]}' http://hassio/homeassistant/options After that, you need to change `usb_path` to `/dev/ttyAMA0`. +### {% linkable_title RancherOS %} + +If you're using RancherOS for containers, you'll need to ensure you enable the kernel-extras service so that the `USB_ACM` module (also known as `cdc_acm`) is loaded: + +```bash +$ sudo ros service enable kernel-extras +$ sudo ros service up kernel-extras +``` + ### {% linkable_title Network Key %} Security Z-Wave devices require a network key before being added to the network using the Add Secure Node button in the Z-Wave Network Management card. You must set the *network_key* configuration variable to use a network key before adding these devices. @@ -179,11 +192,19 @@ An easy script to generate a random key: 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 %} -Upon first run, the `zwave` component will take time to initialize entities and entities may appear with incomplete names. Running a network heal may speed up this process. +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 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. ## {% linkable_title Troubleshooting %} diff --git a/source/_posts/2019-09-16-hassbian-1.3-a-bit-of-a-stretch.markdown b/source/_posts/2017-09-16-hassbian-1.3-a-bit-of-a-stretch.markdown similarity index 100% rename from source/_posts/2019-09-16-hassbian-1.3-a-bit-of-a-stretch.markdown rename to source/_posts/2017-09-16-hassbian-1.3-a-bit-of-a-stretch.markdown diff --git a/source/_posts/2019-09-25-new-hassio-build-system.markdown b/source/_posts/2017-09-25-new-hassio-build-system.markdown similarity index 100% rename from source/_posts/2019-09-25-new-hassio-build-system.markdown rename to source/_posts/2017-09-25-new-hassio-build-system.markdown diff --git a/source/_posts/2017-11-04-release-57.markdown b/source/_posts/2017-11-04-release-57.markdown index 0779d7b5a66..dc054b035ce 100644 --- a/source/_posts/2017-11-04-release-57.markdown +++ b/source/_posts/2017-11-04-release-57.markdown @@ -92,6 +92,11 @@ Okay, one more highlight before we'll let you check out the changelog. Contribut - Update frontend with fixes for setting temperature on climate card ([@balloob]) - Fix setting max brightness for TRADFRI ([@ggravlingen] - [#10359]) +## {% linkable_title release 0.57.3 - november 11 %} + +- Tellstick Duo acync callback fix ([@stefan-jonasson] - [#10384]) ([tellstick docs]) +- Fixed update() method and removed `ding` feature from stickupcams/floodlight ([@tchellomello] - [#10428]) ([binary_sensor.ring docs]) ([camera.ring docs]) ([sensor.ring docs]) + ## {% linkable_title If you need help... %} ...don't hesitate to use our very active [forums](https://community.home-assistant.io/) or join us for a little [chat](https://discord.gg/c5DvZ4e). The release notes have comments enabled but it's preferred if you use the former communication channels. Thanks. @@ -643,4 +648,12 @@ Experiencing issues introduced by this release? Please report them in our [issue [wink docs]: https://home-assistant.io/components/wink/ [xiaomi_aqara docs]: https://home-assistant.io/components/xiaomi_aqara/ [ikea email]: https://twitter.com/home_assistant/status/925373865802502144 -[wink-auth]: https://home-assistant.io/components/wink/#authenticate-using-developerwinkcomhttpsdeveloperwinkcom \ No newline at end of file +[wink-auth]: https://home-assistant.io/components/wink/#authenticate-using-developerwinkcomhttpsdeveloperwinkcom +[#10384]: https://github.com/home-assistant/home-assistant/pull/10384 +[#10428]: https://github.com/home-assistant/home-assistant/pull/10428 +[@stefan-jonasson]: https://github.com/stefan-jonasson +[@tchellomello]: https://github.com/tchellomello +[binary_sensor.ring docs]: https://home-assistant.io/components/binary_sensor.ring/ +[camera.ring docs]: https://home-assistant.io/components/camera.ring/ +[sensor.ring docs]: https://home-assistant.io/components/sensor.ring/ +[tellstick docs]: https://home-assistant.io/components/tellstick/ diff --git a/source/_posts/2017-11-10-ttn-with-mqtt.markdown b/source/_posts/2017-11-10-ttn-with-mqtt.markdown new file mode 100644 index 00000000000..d619623c020 --- /dev/null +++ b/source/_posts/2017-11-10-ttn-with-mqtt.markdown @@ -0,0 +1,198 @@ +--- +layout: post +title: "Home Assistant and The Things Network (TTN)" +description: "How to use transfer MQTT messages from The Things Network (TTN) to a local broker." +date: 2017-11-10 14:00:00 +0200 +date_formatted: "November 10, 2017" +author: Fabian Affolter +author_twitter: fabaff +comments: true +categories: How-To +og_image: /images/blog/2017-11-mqtt-ttn/social-ha-ttn.png +--- + +The Home Assistant integration for [The Things Network (TTN)](https://www.thethingsnetwork.org/) uses their [Storage](https://www.thethingsnetwork.org/docs/applications/storage/) feature to get the sensor data. The easiest way to observe TTN sensors would be [MQTT](https://www.thethingsnetwork.org/docs/applications/mqtt/) as it doesn't requires any additional configuration. + +At the moment Home Assistant only supports one [MQTT broker](/docs/mqtt/). This means that you can't subscribe to topics which are located on different brokers. + + + +## {% linkable_title Subscribe to the TTN Broker %} + +To check what your devices are sending, subscribe to the topic `+/devices/+/up` with a command-line tool like `mosquitto_sub`. The `` is the postfix of the **Handler** entry in your **Application overview**. `` is the **Application ID** and `` is your access key. + +```bash +$ mosquitto_sub -v -h .thethings.network -t '+/devices/+/up' -u '' -P '' +{ + "app_id": "ha-demo", + "dev_id": "device01", + "hardware_serial": "AJDJENDNHRBFBBT", + "port": 1, + [...] +``` + +The payload contains details about the device itself and the sensor data. The sensor data is stored in `payload_fields`. Depending on the device configuration it may contain a single value or multiple values. + +## {% linkable_title The relay %} + +To be able to work locally with the MQTT data that is received from the devices connected to TTN, we need to transfer it to the local broker. With this simple script below all messages from a given device are re-published on your local MQTT broker after they are received. Modify the script with your details as outlined in the previous section. + +```python +"""Relay MQTT messages from The Things Network to a local MQTT broker.""" +import paho.mqtt.client as mqtt +import paho.mqtt.publish as publish + +DEVICE_NAME = '' + +TTN_BROKER = '.thethings.network' +TTN_USERNAME = '' +TTN_PASSWORD = '' +TTN_TOPIC = '+/devices/{}/up'.format(DEVICE_NAME) + +LOCAL_BROKER = '192.168.0.2' +LOCAL_TOPIC = 'home/ttn/garden_temp' + + +def on_connect(client, userdata, flags, rc): + """Subscribe to topic after connection to broker is made.""" + print("Connected with result code", str(rc)) + client.subscribe(TTN_TOPIC) + + +def on_message(client, userdata, msg): + """Relay message to a different broker.""" + publish.single( + LOCAL_TOPIC, payload=msg.payload, qos=0, retain=False, + hostname=LOCAL_BROKER, port=1883, client_id='ttn-local', + keepalive=60, will=None, auth=None, tls=None, protocol=mqtt.MQTTv311) + + +client = mqtt.Client() +client.username_pw_set(TTN_USERNAME, password=TTN_PASSWORD) +client.on_connect = on_connect +client.on_message = on_message +client.connect(TTN_BROKER, 1883, 60) + +client.loop_forever() +``` + +Save it and run it. As soon as a MQTT message is received from your device you should see it on your local broker (here 192.168.0.2) if you subscribe to `#` or the topic given in the script above `home/ttn/garden_temp`. + +```bash +$ mosquitto_sub -h 192.168.0.2 -t "#" -d +``` + +## {% linkable_title The sensor %} + +All we would need now, is a [`mqtt` sensor](/components/sensor.mqtt/) with a `value_template`. With a sophisticated custom sensor it would be possible to displaying a little more than just the state. The device is only sending the temperature `{"temperature": 7.5}` but there are other details available which the sensor should show. + +```python +"""Support for The Things Network MQTT sensors.""" +import asyncio +from datetime import timedelta +import json +import logging + +import voluptuous as vol + +import homeassistant.components.mqtt as mqtt +from homeassistant.components.mqtt import CONF_STATE_TOPIC +from homeassistant.const import CONF_NAME, CONF_UNIT_OF_MEASUREMENT +from homeassistant.core import callback +import homeassistant.helpers.config_validation as cv +from homeassistant.helpers.entity import Entity + +_LOGGER = logging.getLogger(__name__) + +DEFAULT_NAME = 'MQTT TTN Sensor' +DEFAULT_FORCE_UPDATE = False +DEPENDENCIES = ['mqtt'] + +PLATFORM_SCHEMA = mqtt.MQTT_RO_PLATFORM_SCHEMA.extend({ + vol.Optional(CONF_NAME, default=DEFAULT_NAME): cv.string, + vol.Optional(CONF_UNIT_OF_MEASUREMENT): cv.string, + +}) + + +@asyncio.coroutine +def async_setup_platform(hass, config, async_add_devices, discovery_info=None): + """Set up the TTN MQTT Sensor.""" + async_add_devices([MqttTtnSensor( + config.get(CONF_NAME), config.get(CONF_STATE_TOPIC), + config.get(CONF_UNIT_OF_MEASUREMENT)) + ]) + + +class MqttTtnSensor(Entity): + """Representation of a sensor.""" + + def __init__(self, name, state_topic, unit_of_measurement): + """Initialize the sensor.""" + self._state = None + self._name = name + self._unit_of_measurement = unit_of_measurement + self._attributes = {} + self._state_topic = state_topic + + def async_added_to_hass(self): + """Subscribe to MQTT events.""" + @callback + def message_received(topic, payload, qos): + """Handle new MQTT messages.""" + + try: + data = json.loads(payload) + except json.JSONDecodeError: + _LOGGER.error("Invalid JSON data received: %s", data) + + self._state = data['payload_fields'][next( + iter(data['payload_fields']))] + self._attributes = data + del self._attributes['payload_fields'] + del self._attributes['metadata'] + self.async_schedule_update_ha_state() + + return mqtt.async_subscribe( + self.hass, self._state_topic, message_received, 0) + + @property + def should_poll(self): + """No polling needed.""" + return False + + @property + def name(self): + """Return the name of the sensor.""" + return self._name + + @property + def unit_of_measurement(self): + """Return the unit this state is expressed in.""" + return self._unit_of_measurement + + @property + def state_attributes(self): + """Return the attributes of the entity.""" + return self._attributes + + @property + def state(self): + """Return the state of the entity.""" + return self._state +``` + +Store it in `/custom_components/sensor/mqtt_ttn.py` and it will handle the messages. + +## {% linkable_title The configuration %} + +Now create the [`mqtt_ttn` sensor](/components/sensor.mqtt/) entry for your device. + +``` +sensor: + - platform: mqtt_ttn + name: TTN Sensor + state_topic: "home/ttn/garden_temp" +``` + +This solution is not production-ready, scalable or stable but it could fill the gape till Home Assistant is able to connect to multiple MQTT brokers. If you have multiple devices relay all messages to your local broker and add an configuration variable to `mqtt_ttn` sensor which allows you to select the device. diff --git a/source/_posts/2017-11-12-tor.markdown b/source/_posts/2017-11-12-tor.markdown new file mode 100644 index 00000000000..32b35415987 --- /dev/null +++ b/source/_posts/2017-11-12-tor.markdown @@ -0,0 +1,102 @@ +--- +layout: post +title: "Secure remote access to Home Assistant using Tor" +description: "Using Tor with Home Assistant and Hass.io." +date: 2017-11-12 10:00:00 +0200 +date_formatted: "November 12, 2017" +author: Franck Nijhof & Fabian Affolter +author_twitter: frenck +comments: true +categories: How-To +og_image: /images/blog/2017-11-tor/social.png +--- + +Routers and gateways provided by broadband internet providers are very often limited regarding features and configuration possibilities. Most of these limitations affect the opportunities that allow users to set up port-forwarding, DMZ, and DHCP reservations since the suppliers figured that average user does not want (or should not) deal with these. Making your Home Assistant instance available remotely (and securely), in this case, becomes more difficult. Are you one of those unlucky ones? + +There are a couple of options available to achieve a remote (and secure) accessible Home Assistant instance. However, almost all of them require you to: open one or more ports on your router, expose a public IP address, and require you to reserve a fixed IP in your DHCP server (or set up a static IP address). Examples of these are: + +- Combination of [DuckDNS](/components/duckdns/) (or similar), [Let's Encrypt](/docs/ecosystem/certificates/lets_encrypt/) (SSL), DHCP reservation, and forwarding a port to your device running Home Assistant. +- Setup a VPN, which often requires more hardware and software. Additionally, it also requires port-forwarding, DHCP reservation and most likely [DuckDNS](/components/duckdns/) (or similar). +- [SSH tunnel-ing](/blog/2017/11/02/secure-shell-tunnel/). Which still requires port-forwarding, DHCP reservation and most likely (yeah, you've guessed it) [DuckDNS](/components/duckdns/) (or similar). + +There is, however, another option available that most people do not realize: [Tor](https://www.torproject.org). [Tor](https://www.torproject.org) offers a capability that they refer to as [Tor's Hidden Services](https://www.torproject.org/docs/hidden-services.html.en), which allows you to securely access your Home Assistant installation *without* the need for all these things. No need to forward and open ports, no need to expose your public IP, no DNS entry, no need for SSL certificates, and you do not have to assign a fixed IP to the device running your Home Assistant. + +The most amazing part? It is super easy to set up! + + + +## {% linkable_title Setting up Tor %} + +Our [documentation](/docs/ecosystem/tor/) provides an detailled guide about seting up a [Tor's Hidden Service](https://www.torproject.org/docs/hidden-services.html.en). The setup is straight-forward: + +1. Install Tor. On a Debian-based system: `$ sudo apt-get install tor`. On Fedora: `$ sudo dnf install tor` +2. Modify Tor's main configuration file `/etc/tor/torrc` to include the following lines: + + ```bash + ############### This section is just for location-hidden services ### + + ## Once you have configured a hidden service, you can look at the + ## contents of the file ".../hidden_service/hostname" for the address + ## to tell people. + ... + HiddenServiceDir /var/lib/tor/homeassistant/ + HiddenServicePort 80 127.0.0.1:8123 + ... + ``` +3. Restart Tor: `$ sudo systemctl restart tor` +4. The Tor-generated hostname file contains the hostname you need to access your installation. + + ```bash + $ sudo cat /var/lib/tor/homeassistant/hostname + abcdef1234567890.onion + ``` + +## {% linkable_title Tor add-on for Hass.io %} + +[Franck Nijhof (@frenck)](https://github.com/frenck) created the [Tor add-on](https://github.com/hassio-addons/addon-tor) for [Hass.io](/hassio/). This add-on makes the installation and the setup extremely simple. Go to the **Hass.io** panel, then to the **Store**, copy `https://github.com/hassio-addons/repository` into the text box of **Add-On Repositories** and save it. + +A new entry **Tor** will show-up in the list of add-ons. Click on it to install it. The configuration is done in **Options**. Please refer to the [Configuration documentation](https://github.com/hassio-addons/addon-tor#configuration) for further details. A possible configuration could look like the sample below (which is the default configuration). + +```json +{ + "log_level": "info", + "socks": false, + "hidden_services": true, + "stealth": false, + "client_names": [], + "ports": [ + "8123:80" + ] +} +``` + +When you are done, press **Save** and then **Start**. In the **Logs** section, you can see what the add-on is doing. Watch out for an entry like the one below, which will tell you your hostname on the Tor network. + +```bash +INFO: ----------------------------------------------------------- +INFO: Your Home Assistant instance is available on Tor! +INFO: Address: abcdef1234567890.onion +INFO: ----------------------------------------------------------- +``` + +Don't worry if you missed it, restarting the add-on will display it again. The details are also stored and available in the `/ssl/tor/hidden_service/hostname` file. + +## {% linkable_title Tor clients %} + +To access you Home Assistant via the Tor Hidden Service, you will need a Tor client. There are multiple clients, for different devices and platforms, available. The [Tor Browser](https://www.torproject.org/projects/torbrowser.html.en) is by far the simplest option, which is available for Windows, MacOS & Linux. + +Simply download and install the [Tor Browser](https://www.torproject.org/projects/torbrowser.html.en), start it, and enter the "dot onion" address you've gained from the earlier steps (`abcdef1234567890.onion` in this case). Voila! + +Some other clients: + +- [Orbot](https://guardianproject.info/apps/orbot/) for Android +- [Orfox](https://play.google.com/store/apps/details?id=info.guardianproject.orfox&hl=nl) for Android +- [Onion Browser](https://mike.tig.as/onionbrowser/) for iOS + +## {% linkable_title Cranking up security %} + +The setup described in this blog post is easy and relatively secure, but anyone who knows your `.onion` address can still connect to your Home Assistant instance (Remember to use passwords!). With all of the [discussion](https://blog.torproject.org/quick-simple-guide-tor-and-internet-things-so-far) about putting your IoT on the Tor Network, maybe you want to add an extra layer of defense, especially if you’re going to be the only one that uses it. Tor offers an additional layer of security, called "Hidden Service Authentication", usually referred to as "Stealth"-mode. + +This "Stealth"-mode adds an extra layer of security to your Hidden Service by only responding to a client that passes a unique secret cookie as it connects. Obviously, this requires additional configuration on the Tor client applications. + +Additional information can be found in the [Tor documentation](/docs/ecosystem/tor/) and the [Tor add-on repository](https://github.com/hassio-addons/addon-tor), including how to setup the "Stealth"-mode. The Tor Project itself provides details about a variaty of topics in their [documentation](https://www.torproject.org/docs/documentation.html.en). diff --git a/source/_posts/2017-11-18-release-58.markdown b/source/_posts/2017-11-18-release-58.markdown new file mode 100644 index 00000000000..80d8a664c1a --- /dev/null +++ b/source/_posts/2017-11-18-release-58.markdown @@ -0,0 +1,503 @@ +--- +layout: post +title: "0.58: More translations, faster frontend, system log" +description: "We now have 445 translators helping out and the frontend is receiving some polishing." +date: 2017-11-18 04:00:00 +date_formatted: "November 18, 2017" +author: Paulus Schoutsen +author_twitter: balloob +comments: true +categories: Release-Notes +og_image: /images/blog/2017-11-0.58/components.png +--- + +
+ +

+The Hass.io release of 0.58 will be delayed by a couple of days because Pascal is moving this weekend. +

+ +## {% linkable_title Translation update %} + +Translations are up and running in full speed. Shortly after the last release we got our translation pipeline figured out. [@armills] and [@c727] are doing an amazing job managing this project. We've doubled the number of supported languages to 42 and the amount of keys to translate went from 8 to 130. Our translaters are on top of their game and 79% is already translated. + +Talking about our translators, we now have 445 people with an account to help with translations. Not bad for 3 weeks! + +And because more translations is more better, [@robbiet480] has added the iOS app to Lokalise, our translation management platform. The iOS app is currently supported in 7 different languages. + +[Learn more about how to help with translations](https://home-assistant.io/blog/2017/11/05/frontend-translations/) + +## {% linkable_title Frontend improvements continue %} + +Thanks to [@Andrey-git] we now are able to serve the frontend in modern JavaScript. Leveraging modern JavaScript makes the frontend faster to load and run. For now it's opt-in but we're looking into making it opt-out in the future. The ES5 version of the frontend will remain available for older devices. + +To try it once, add `?latest` to your Home Assistant bookmark. To make it the default on your installation, update your config to look like this: + +``` +frontend: + javascript_version: latest +``` + +

+For Custom UI users: your custom UI will need to be updated before it can work with the new version of the frontend. +

+ +### {% linkable_title System log enhanced %} + +Our about screen that shows the error logs has gained a nice upgrade by [@postlund]. Now the 50 latest exceptions will be displayed with the option to get more information. + +

+ Screenshot of the about screen showing the system log. + Screenshot of the about screen showing the system log. +

+ +## {% linkable_title New Platforms %} + +- pyLoad download sensor ([@iMarkus] - [#10089]) ([sensor.pyload docs]) (new-platform) +- Add LaCrosse sensor platform ([@hthiery] - [#10195]) ([sensor.lacrosse docs]) (new-platform) +- Refactor Neato botvac components as a vacuum ([@jabesq] - [#9946]) ([neato docs]) ([sensor.neato docs]) ([switch.neato docs]) ([vacuum.neato docs]) (breaking change) (new-platform) +- Add platform and sensors for Vultr VPS ([@GenericStudent] - [#9928]) ([vultr docs]) ([binary_sensor.vultr docs]) ([sensor.vultr docs]) (new-platform) +- Adds support for Tile® Bluetooth trackers ([@bachya] - [#10478]) ([device_tracker.tile docs]) (new-platform) +- Support presence detection using Hitron Coda router ([@arilotter] - [#9682]) ([device_tracker.hitron_coda docs]) (new-platform) +- Add basic backend support for a system log ([@postlund] - [#10492]) ([system_log docs]) (new-platform) +- New sensor viaggiatreno. ([@fabfurnari] - [#10522]) ([sensor.viaggiatreno docs]) (new-platform) + +## {% linkable_title Release 0.58.1 - November 21 %} + +- Fix yweather ([@tinloaf] - [#10661]) ([weather.yweather docs]) +- Properly initialize Harmony remote ([@amelchio] - [#10665]) ([remote.harmony docs]) +- Handle the new version of HydroQuebec website ([@titilambert] - [#10682]) ([sensor.hydroquebec docs]) +- Fix for time_date sensor ([@etsinko] - [#10694]) ([sensor.time_date docs]) +- Frontend fixes ([@andrey-git] [@armills] [@balloob]) + +## {% linkable_title If you need help... %} + +...don't hesitate to use our very active [forums](https://community.home-assistant.io/) or join us for a little [chat](https://discord.gg/c5DvZ4e). The release notes have comments enabled but it's preferred if you use the former communication channels. Thanks. + +## {% linkable_title Reporting Issues %} + +Experiencing issues introduced by this release? Please report them in our [issue tracker](https://github.com/home-assistant/home-assistant/issues). Make sure to fill in all fields of the issue template. + + + +## {% linkable_title Breaking Changes %} + + - `hass.states.is_state_attr(entity_id, attribute, value)` has been removed. The template version still exists. Unused method parameter `wait` has been removed from `hass.bus.async_fire` ([@balloob] - [#10305]) (breaking change) +- Refactor Neato botvac components as a vacuum ([@jabesq] - [#9946]) ([neato docs]) ([switch.neato docs]) ([vacuum.neato docs]) (breaking change) (new-platform) +- Lutron released a firmware updated for the Caseta system which removed our ability to connect to and control the bridge device over SSH, breaking compatibility with pylutron_caseta and Home Assistant. Component has been updated to work again, please see the docs on how to set it up. ([@mdonoughe] - [#10286]) ([lutron_caseta docs]) (breaking change) + +## {% linkable_title All changes %} + +- Bump python-miio for improved device support ([@syssi] - [#10294]) ([light.xiaomi_miio docs]) ([switch.xiaomi_miio docs]) +- pyLoad download sensor ([@iMarkus] - [#10089]) ([sensor.pyload docs]) (new-platform) +- Add LaCrosse sensor platform ([@hthiery] - [#10195]) ([sensor.lacrosse docs]) (new-platform) +- Clean up core ([@balloob] - [#10305]) (breaking change) +- Refactor Neato botvac components as a vacuum ([@jabesq] - [#9946]) ([neato docs]) ([sensor.neato docs]) ([switch.neato docs]) ([vacuum.neato docs]) (breaking change) (new-platform) +- Move constants to setup.py ([@fabaff] - [#10312]) ([no_ip docs]) +- Add option to overwrite file to the downloader component ([@arsaboo] - [#10298]) ([downloader docs]) +- Use constants for HTTP headers ([@fabaff] - [#10313]) ([binary_sensor.aurora docs]) ([device_tracker.tplink docs]) ([device_tracker.upc_connect docs]) ([media_player.bluesound docs]) ([sensor.haveibeenpwned docs]) ([sensor.zamg docs]) ([telegram_bot.polling docs]) +- fix a import in test causing vs code to fail to discover ([@perosb] - [#10358]) +- Upgrade sqlalchemy to 1.1.15 ([@fabaff] - [#10330]) +- Move counter component ([@fabaff] - [#10332]) ([counter docs]) +- Add platform and sensors for Vultr VPS ([@GenericStudent] - [#9928]) ([vultr docs]) ([binary_sensor.vultr docs]) ([sensor.vultr docs]) (new-platform) +- Add heal_node and test_node services. ([@turbokongen] - [#10369]) ([zwave docs]) +- Addition of new binary sensor class 'plug' ([@echox] - [#10336]) ([binary_sensor docs]) +- Upgrae simplepush to 1.1.4 ([@fabaff] - [#10365]) ([notify.simplepush docs]) +- Update aiohttp to 2.3.1 ([@pvizeli] - [#10139]) +- Device model identification of the Xiaomi Philips Ceiling Lamp fixed. ([@syssi] - [#10401]) ([light.xiaomi_miio docs]) +- Zwave save cache to file now. ([@turbokongen] - [#10381]) +- Bump to 0.12.2 to fix urllib3 dependency ([@MisterWil] - [#10420]) ([abode docs]) +- Remove extra info from zwave entity states ([@armills] - [#10413]) ([zwave docs]) +- Fixes issue #10425 ([@robmarkcole] - [#10426]) ([sensor.london_air docs]) +- Add baudrate option to Serial sensor ([@dgomes] - [#10439]) ([sensor.serial docs]) (breaking change) +- Remove model info from state ([@balloob] - [#10399]) ([light.tradfri docs]) +- update tibber library ([@danielhiversen] - [#10460]) ([sensor.tibber docs]) +- update pywebpush==1.3.0 ([@perosb] - [#10374]) ([notify.html5 docs]) +- Fix slow WOL switch test ([@balloob] - [#10455]) +- Fix recorder stop on SQLite vacuuming error ([@milanvo] - [#10405]) +- Add include/exclude filter to mqtt_statestream ([@mw-white] - [#10354]) ([mqtt_statestream docs]) +- Upgrade to 0.1.2 ([@TopdRob] - [#10348]) ([notify.free_mobile docs]) +- Upgrade pyatv to 0.3.6 ([@TopdRob] - [#10349]) ([apple_tv docs]) +- Remove useless temp converting ([@pvizeli] - [#10465]) ([climate.homematic docs]) +- Upgrade apns2 to 0.3.0 ([@TopdRob] - [#10347]) ([notify.apns docs]) +- Improvement of KNX climate component ([@Julius2342] - [#10388]) ([knx docs]) ([climate.knx docs]) +- Updated gc100 package requirement to 1.0.3a ([@davegravy] - [#10484]) ([gc100 docs]) +- Remove lag from Harmony remote platform ([@amelchio] - [#10218]) ([remote docs]) ([remote.harmony docs]) +- Improve error handling. ([@cgtobi] - [#10482]) ([influxdb docs]) +- Upgrade psutil to 5.4.1 ([@fabaff] - [#10490]) ([sensor.systemmonitor docs]) +- Upgrade youtube_dl to 2017.11.06 ([@fabaff] - [#10491]) ([media_extractor docs]) +- Fix for telegram polling. (added pausing when error occurs) ([@sander76] - [#10214]) ([telegram_bot.polling docs]) +- add JSON processing capabilities to sensor_serial ([@dgomes] - [#10476]) ([sensor.serial docs]) +- upgrade to new pylutron_caseta with TLS ([@mdonoughe] - [#10286]) ([lutron_caseta docs]) (breaking change) +- Bump dev to 0.58.0.dev0 ([@fabaff] - [#10510]) +- OwnTracks Message Handling ([@ehagan] - [#10489]) ([device_tracker.owntracks docs]) +- Add support for Alexa intent slot synonyms. ([@kmdm] - [#10469]) +- Introduce media progress for Yamaha Musiccast devices ([@jalmeroth] - [#10256]) ([media_player.yamaha_musiccast docs]) +- Add an option to serve ES6 JS to clients ([@andrey-git] - [#10474]) +- Adapt to new yarl API ([@tinloaf] - [#10527]) ([tts.google docs]) +- Update nederlandse_spoorwegen.py to include platform information ([@hmmbob] - [#10494]) ([sensor.nederlandse_spoorwegen docs]) +- Pin yarl ([@tinloaf] - [#10528]) +- Support configuration of region (no service url neccessary ([@molobrakos] - [#10513]) ([volvooncall docs]) +- Fix import in tests ([@andrey-git] - [#10525]) +- Update axis.py ([@Kane610] - [#10412]) ([axis docs]) +- Add attribute to show who last un/set alarm (SPC) ([@mbrrg] - [#9906]) ([spc docs]) ([alarm_control_panel.spc docs]) ([binary_sensor.spc docs]) +- Fixed Wink Quirky Aros bugs. ([@w1ll1am23] - [#10533]) ([climate.wink docs]) +- Adds support for Tile® Bluetooth trackers ([@bachya] - [#10478]) ([device_tracker.tile docs]) (new-platform) +- telegram_bot: Support for sending videos ([@vickyg3] - [#10470]) ([telegram_bot docs]) ([notify.telegram docs]) +- Pre-construct frontend index.html ([@balloob] - [#10520]) +- notify.html5: use new json save and load functions ([@perosb] - [#10416]) ([notify.html5 docs]) +- Change to device state attributes ([@dgomes] - [#10536]) ([sensor.serial docs]) +- Google Assistant request sync service ([@r4nd0mbr1ck] - [#10165]) +- Optimize concurrent access to media player image cache ([@amelchio] - [#10345]) ([media_player docs]) +- webostv: set current source correctly ([@KapJI] - [#10548]) ([media_player.webostv docs]) +- Upgrade pysnmp to 4.4.2 ([@fabaff] - [#10539]) ([device_tracker.snmp docs]) ([sensor.snmp docs]) ([switch.snmp docs]) +- Fix and clean lametric ([@MartinHjelmare] - [#10391]) ([lametric docs]) ([notify.lametric docs]) +- Support presence detection using Hitron Coda router ([@arilotter] - [#9682]) ([device_tracker.hitron_coda docs]) (new-platform) +- Better support for int types ([@ziotibia81] - [#10409]) ([sensor.modbus docs]) +- Don't use the 'id' field since it can be autogenerated (fixes #10551). ([@kmdm] - [#10554]) +- pad packets to multiple of 4 characters ([@SteveEdson] - [#10560]) ([switch.broadlink docs]) +- Move temperature display helper from components to helpers ([@fabaff] - [#10555]) ([climate docs]) ([weather docs]) ([climate.eq3btsmart docs]) +- webostv: Reduce default timeout to prevent log spamming ([@abmantis] - [#10564]) ([media_player.webostv docs]) +- Fix lametric sound ([@MartinHjelmare] - [#10562]) ([lametric docs]) ([notify.lametric docs]) +- Use a template for the Universal media player state ([@azogue] - [#10395]) ([media_player.universal docs]) +- Verisure: Added option to set installation giid ([@abjorshammar] - [#10504]) ([verisure docs]) +- Bump ring_doorbell to 0.1.7 ([@tchellomello] - [#10566]) ([ring docs]) +- Add code to enable discovery for mqtt cover ([@marthoc] - [#10580]) ([cover.mqtt docs]) +- Google Assistant for climate entities: Support QUERY and respect system-wide unit_system setting. ([@emosenkis] - [#10346]) +- turn service call handler into coroutine ([@NovapaX] - [#10576]) ([configurator docs]) +- Add basic backend support for a system log ([@postlund] - [#10492]) ([system_log docs]) (new-platform) +- Tradfri unique identities ([@NovapaX] - [#10414]) ([tradfri docs]) +- Add panel build type ([@balloob] - [#10589]) +- Cloud updates ([@balloob] - [#10567]) +- Upgrade youtube_dl to 2017.11.15 ([@fabaff] - [#10592]) ([media_extractor docs]) +- Fix Yahoo Weather icons over SSL ([@OnFreund] - [#10602]) ([sensor.yweather docs]) +- Arlo - Fixes for updated library ([@jwillaz] - [#9892]) ([arlo docs]) ([camera.arlo docs]) ([sensor.arlo docs]) +- Do not add panel from system_log ([@postlund] - [#10600]) ([system_log docs]) +- Fix ValueError exception ([@ziotibia81] - [#10596]) ([sensor.modbus docs]) +- Fix Hikvision (motion) switch bug ([@arsaboo] - [#10608]) ([switch.hikvisioncam docs]) +- Allow unicode when dumping yaml ([@andrey-git] - [#10607]) +- Support script execution for Alexa ([@micbase] - [#10517]) +- bump client version ([@wardcraigj] - [#10610]) ([alarm_control_panel.totalconnect docs]) +- New sensor viaggiatreno. ([@fabfurnari] - [#10522]) ([sensor.viaggiatreno docs]) (new-platform) +- Modbus switch register support ([@ziotibia81] - [#10563]) ([switch.modbus docs]) +- Upgrade mypy to 0.550 ([@fabaff] - [#10591]) +- Small fix to be able to use mac and vendor in "device_tracker_new_device" event. ([@Boltgolt] - [#10537]) ([device_tracker docs]) +- add support for color temperature and color to Google Assistant ([@perosb] - [#10039]) +- Cleanup old stale restore feature ([@pvizeli] - [#10593]) ([light docs]) +- Correct input_datetime initial value parsing ([@colindunn] - [#10417]) ([input_datetime docs]) +- Change generic thermostat to control heating on mode change Off -> Auto ([@milanvo] - [#10601]) ([climate.generic_thermostat docs]) +- Improve WUnderground config validation ([@milanvo] - [#10573]) ([sensor.wunderground docs]) +- update hbmqtt to 0.9.1 ([@masarliev] - [#10611]) +- Allow to pass YandexTTS options via sevice call ([@andrey-git] - [#10578]) ([tts docs]) ([tts.yandextts docs]) +- Snapcast: bump version and enable reconnect. ([@janLo] - [#10626]) ([media_player.snapcast docs]) +- Fix async missing decorators ([@armills] - [#10628]) +- Alexa slot synonym fix ([@devspacenine] - [#10614]) +- Adjust logging in downloader component ([@amelchio] - [#10622]) ([downloader docs]) +- Added sorted() to python_script ([@etsinko] - [#10621]) ([python_script docs]) +- Add loglinefetch for frontend API call ([@turbokongen] - [#10579]) +- Fixes AirVisual bug regarding incorrect location data ([@bachya] - [#10054]) ([sensor.airvisual docs]) +- Make MQTT reconnection logic more resilient and fix race condition ([@cezarsa] - [#10133]) ([mqtt docs]) +- Alexa improvements ([@robbiet480] - [#10632]) +- Print entity type in "too slow" warnings ([@andrey-git] - [#10641]) +- Bump pyatv to 0.3.8 ([@postlund] - [#10643]) ([apple_tv docs]) +- Implement entity and domain exclude/include for Alexa ([@robbiet480] - [#10647]) + +[#10039]: https://github.com/home-assistant/home-assistant/pull/10039 +[#10054]: https://github.com/home-assistant/home-assistant/pull/10054 +[#10089]: https://github.com/home-assistant/home-assistant/pull/10089 +[#10133]: https://github.com/home-assistant/home-assistant/pull/10133 +[#10139]: https://github.com/home-assistant/home-assistant/pull/10139 +[#10165]: https://github.com/home-assistant/home-assistant/pull/10165 +[#10195]: https://github.com/home-assistant/home-assistant/pull/10195 +[#10214]: https://github.com/home-assistant/home-assistant/pull/10214 +[#10218]: https://github.com/home-assistant/home-assistant/pull/10218 +[#10256]: https://github.com/home-assistant/home-assistant/pull/10256 +[#10286]: https://github.com/home-assistant/home-assistant/pull/10286 +[#10294]: https://github.com/home-assistant/home-assistant/pull/10294 +[#10298]: https://github.com/home-assistant/home-assistant/pull/10298 +[#10305]: https://github.com/home-assistant/home-assistant/pull/10305 +[#10312]: https://github.com/home-assistant/home-assistant/pull/10312 +[#10313]: https://github.com/home-assistant/home-assistant/pull/10313 +[#10330]: https://github.com/home-assistant/home-assistant/pull/10330 +[#10332]: https://github.com/home-assistant/home-assistant/pull/10332 +[#10336]: https://github.com/home-assistant/home-assistant/pull/10336 +[#10345]: https://github.com/home-assistant/home-assistant/pull/10345 +[#10346]: https://github.com/home-assistant/home-assistant/pull/10346 +[#10347]: https://github.com/home-assistant/home-assistant/pull/10347 +[#10348]: https://github.com/home-assistant/home-assistant/pull/10348 +[#10349]: https://github.com/home-assistant/home-assistant/pull/10349 +[#10354]: https://github.com/home-assistant/home-assistant/pull/10354 +[#10358]: https://github.com/home-assistant/home-assistant/pull/10358 +[#10365]: https://github.com/home-assistant/home-assistant/pull/10365 +[#10369]: https://github.com/home-assistant/home-assistant/pull/10369 +[#10374]: https://github.com/home-assistant/home-assistant/pull/10374 +[#10381]: https://github.com/home-assistant/home-assistant/pull/10381 +[#10388]: https://github.com/home-assistant/home-assistant/pull/10388 +[#10391]: https://github.com/home-assistant/home-assistant/pull/10391 +[#10395]: https://github.com/home-assistant/home-assistant/pull/10395 +[#10399]: https://github.com/home-assistant/home-assistant/pull/10399 +[#10401]: https://github.com/home-assistant/home-assistant/pull/10401 +[#10405]: https://github.com/home-assistant/home-assistant/pull/10405 +[#10409]: https://github.com/home-assistant/home-assistant/pull/10409 +[#10412]: https://github.com/home-assistant/home-assistant/pull/10412 +[#10413]: https://github.com/home-assistant/home-assistant/pull/10413 +[#10414]: https://github.com/home-assistant/home-assistant/pull/10414 +[#10416]: https://github.com/home-assistant/home-assistant/pull/10416 +[#10417]: https://github.com/home-assistant/home-assistant/pull/10417 +[#10420]: https://github.com/home-assistant/home-assistant/pull/10420 +[#10426]: https://github.com/home-assistant/home-assistant/pull/10426 +[#10439]: https://github.com/home-assistant/home-assistant/pull/10439 +[#10455]: https://github.com/home-assistant/home-assistant/pull/10455 +[#10460]: https://github.com/home-assistant/home-assistant/pull/10460 +[#10465]: https://github.com/home-assistant/home-assistant/pull/10465 +[#10469]: https://github.com/home-assistant/home-assistant/pull/10469 +[#10470]: https://github.com/home-assistant/home-assistant/pull/10470 +[#10474]: https://github.com/home-assistant/home-assistant/pull/10474 +[#10476]: https://github.com/home-assistant/home-assistant/pull/10476 +[#10478]: https://github.com/home-assistant/home-assistant/pull/10478 +[#10482]: https://github.com/home-assistant/home-assistant/pull/10482 +[#10484]: https://github.com/home-assistant/home-assistant/pull/10484 +[#10489]: https://github.com/home-assistant/home-assistant/pull/10489 +[#10490]: https://github.com/home-assistant/home-assistant/pull/10490 +[#10491]: https://github.com/home-assistant/home-assistant/pull/10491 +[#10492]: https://github.com/home-assistant/home-assistant/pull/10492 +[#10494]: https://github.com/home-assistant/home-assistant/pull/10494 +[#10504]: https://github.com/home-assistant/home-assistant/pull/10504 +[#10510]: https://github.com/home-assistant/home-assistant/pull/10510 +[#10513]: https://github.com/home-assistant/home-assistant/pull/10513 +[#10517]: https://github.com/home-assistant/home-assistant/pull/10517 +[#10520]: https://github.com/home-assistant/home-assistant/pull/10520 +[#10522]: https://github.com/home-assistant/home-assistant/pull/10522 +[#10525]: https://github.com/home-assistant/home-assistant/pull/10525 +[#10527]: https://github.com/home-assistant/home-assistant/pull/10527 +[#10528]: https://github.com/home-assistant/home-assistant/pull/10528 +[#10533]: https://github.com/home-assistant/home-assistant/pull/10533 +[#10536]: https://github.com/home-assistant/home-assistant/pull/10536 +[#10537]: https://github.com/home-assistant/home-assistant/pull/10537 +[#10539]: https://github.com/home-assistant/home-assistant/pull/10539 +[#10548]: https://github.com/home-assistant/home-assistant/pull/10548 +[#10554]: https://github.com/home-assistant/home-assistant/pull/10554 +[#10555]: https://github.com/home-assistant/home-assistant/pull/10555 +[#10560]: https://github.com/home-assistant/home-assistant/pull/10560 +[#10562]: https://github.com/home-assistant/home-assistant/pull/10562 +[#10563]: https://github.com/home-assistant/home-assistant/pull/10563 +[#10564]: https://github.com/home-assistant/home-assistant/pull/10564 +[#10566]: https://github.com/home-assistant/home-assistant/pull/10566 +[#10567]: https://github.com/home-assistant/home-assistant/pull/10567 +[#10573]: https://github.com/home-assistant/home-assistant/pull/10573 +[#10576]: https://github.com/home-assistant/home-assistant/pull/10576 +[#10578]: https://github.com/home-assistant/home-assistant/pull/10578 +[#10579]: https://github.com/home-assistant/home-assistant/pull/10579 +[#10580]: https://github.com/home-assistant/home-assistant/pull/10580 +[#10589]: https://github.com/home-assistant/home-assistant/pull/10589 +[#10591]: https://github.com/home-assistant/home-assistant/pull/10591 +[#10592]: https://github.com/home-assistant/home-assistant/pull/10592 +[#10593]: https://github.com/home-assistant/home-assistant/pull/10593 +[#10596]: https://github.com/home-assistant/home-assistant/pull/10596 +[#10600]: https://github.com/home-assistant/home-assistant/pull/10600 +[#10601]: https://github.com/home-assistant/home-assistant/pull/10601 +[#10602]: https://github.com/home-assistant/home-assistant/pull/10602 +[#10607]: https://github.com/home-assistant/home-assistant/pull/10607 +[#10608]: https://github.com/home-assistant/home-assistant/pull/10608 +[#10610]: https://github.com/home-assistant/home-assistant/pull/10610 +[#10611]: https://github.com/home-assistant/home-assistant/pull/10611 +[#10614]: https://github.com/home-assistant/home-assistant/pull/10614 +[#10621]: https://github.com/home-assistant/home-assistant/pull/10621 +[#10622]: https://github.com/home-assistant/home-assistant/pull/10622 +[#10626]: https://github.com/home-assistant/home-assistant/pull/10626 +[#10628]: https://github.com/home-assistant/home-assistant/pull/10628 +[#10632]: https://github.com/home-assistant/home-assistant/pull/10632 +[#10641]: https://github.com/home-assistant/home-assistant/pull/10641 +[#10643]: https://github.com/home-assistant/home-assistant/pull/10643 +[#10647]: https://github.com/home-assistant/home-assistant/pull/10647 +[#9682]: https://github.com/home-assistant/home-assistant/pull/9682 +[#9892]: https://github.com/home-assistant/home-assistant/pull/9892 +[#9906]: https://github.com/home-assistant/home-assistant/pull/9906 +[#9928]: https://github.com/home-assistant/home-assistant/pull/9928 +[#9946]: https://github.com/home-assistant/home-assistant/pull/9946 +[@Boltgolt]: https://github.com/Boltgolt +[@GenericStudent]: https://github.com/GenericStudent +[@Julius2342]: https://github.com/Julius2342 +[@Kane610]: https://github.com/Kane610 +[@KapJI]: https://github.com/KapJI +[@MartinHjelmare]: https://github.com/MartinHjelmare +[@MisterWil]: https://github.com/MisterWil +[@NovapaX]: https://github.com/NovapaX +[@OnFreund]: https://github.com/OnFreund +[@SteveEdson]: https://github.com/SteveEdson +[@TopdRob]: https://github.com/TopdRob +[@abjorshammar]: https://github.com/abjorshammar +[@abmantis]: https://github.com/abmantis +[@amelchio]: https://github.com/amelchio +[@andrey-git]: https://github.com/andrey-git +[@arilotter]: https://github.com/arilotter +[@armills]: https://github.com/armills +[@arsaboo]: https://github.com/arsaboo +[@azogue]: https://github.com/azogue +[@bachya]: https://github.com/bachya +[@balloob]: https://github.com/balloob +[@cezarsa]: https://github.com/cezarsa +[@cgtobi]: https://github.com/cgtobi +[@colindunn]: https://github.com/colindunn +[@danielhiversen]: https://github.com/danielhiversen +[@davegravy]: https://github.com/davegravy +[@devspacenine]: https://github.com/devspacenine +[@dgomes]: https://github.com/dgomes +[@echox]: https://github.com/echox +[@ehagan]: https://github.com/ehagan +[@emosenkis]: https://github.com/emosenkis +[@etsinko]: https://github.com/etsinko +[@fabaff]: https://github.com/fabaff +[@fabfurnari]: https://github.com/fabfurnari +[@hmmbob]: https://github.com/hmmbob +[@hthiery]: https://github.com/hthiery +[@iMarkus]: https://github.com/iMarkus +[@jabesq]: https://github.com/jabesq +[@jalmeroth]: https://github.com/jalmeroth +[@janLo]: https://github.com/janLo +[@jwillaz]: https://github.com/jwillaz +[@kmdm]: https://github.com/kmdm +[@marthoc]: https://github.com/marthoc +[@masarliev]: https://github.com/masarliev +[@mbrrg]: https://github.com/mbrrg +[@mdonoughe]: https://github.com/mdonoughe +[@micbase]: https://github.com/micbase +[@milanvo]: https://github.com/milanvo +[@molobrakos]: https://github.com/molobrakos +[@mw-white]: https://github.com/mw-white +[@perosb]: https://github.com/perosb +[@postlund]: https://github.com/postlund +[@pvizeli]: https://github.com/pvizeli +[@r4nd0mbr1ck]: https://github.com/r4nd0mbr1ck +[@robbiet480]: https://github.com/robbiet480 +[@c727]: https://github.com/c727 +[@robmarkcole]: https://github.com/robmarkcole +[@sander76]: https://github.com/sander76 +[@syssi]: https://github.com/syssi +[@tchellomello]: https://github.com/tchellomello +[@tinloaf]: https://github.com/tinloaf +[@turbokongen]: https://github.com/turbokongen +[@vickyg3]: https://github.com/vickyg3 +[@w1ll1am23]: https://github.com/w1ll1am23 +[@wardcraigj]: https://github.com/wardcraigj +[@ziotibia81]: https://github.com/ziotibia81 +[abode docs]: https://home-assistant.io/components/abode/ +[alarm_control_panel.spc docs]: https://home-assistant.io/components/alarm_control_panel.spc/ +[alarm_control_panel.totalconnect docs]: https://home-assistant.io/components/alarm_control_panel.totalconnect/ +[apple_tv docs]: https://home-assistant.io/components/apple_tv/ +[arlo docs]: https://home-assistant.io/components/arlo/ +[axis docs]: https://home-assistant.io/components/axis/ +[binary_sensor docs]: https://home-assistant.io/components/binary_sensor/ +[binary_sensor.aurora docs]: https://home-assistant.io/components/binary_sensor.aurora/ +[binary_sensor.spc docs]: https://home-assistant.io/components/binary_sensor.spc/ +[binary_sensor.vultr docs]: https://home-assistant.io/components/binary_sensor.vultr/ +[camera.arlo docs]: https://home-assistant.io/components/camera.arlo/ +[climate docs]: https://home-assistant.io/components/climate/ +[climate.eq3btsmart docs]: https://home-assistant.io/components/climate.eq3btsmart/ +[climate.generic_thermostat docs]: https://home-assistant.io/components/climate.generic_thermostat/ +[climate.homematic docs]: https://home-assistant.io/components/climate.homematic/ +[climate.knx docs]: https://home-assistant.io/components/climate.knx/ +[climate.wink docs]: https://home-assistant.io/components/climate.wink/ +[cloud docs]: https://home-assistant.io/components/cloud/ +[cloud.auth_api docs]: https://home-assistant.io/components/cloud.auth_api/ +[cloud.const docs]: https://home-assistant.io/components/cloud.const/ +[cloud.http_api docs]: https://home-assistant.io/components/cloud.http_api/ +[cloud.iot docs]: https://home-assistant.io/components/cloud.iot/ +[config.zwave docs]: https://home-assistant.io/components/config.zwave/ +[configurator docs]: https://home-assistant.io/components/configurator/ +[counter docs]: https://home-assistant.io/components/counter/ +[cover.mqtt docs]: https://home-assistant.io/components/cover.mqtt/ +[device_tracker docs]: https://home-assistant.io/components/device_tracker/ +[device_tracker.hitron_coda docs]: https://home-assistant.io/components/device_tracker.hitron_coda/ +[device_tracker.owntracks docs]: https://home-assistant.io/components/device_tracker.owntracks/ +[device_tracker.snmp docs]: https://home-assistant.io/components/device_tracker.snmp/ +[device_tracker.tile docs]: https://home-assistant.io/components/device_tracker.tile/ +[device_tracker.tplink docs]: https://home-assistant.io/components/device_tracker.tplink/ +[device_tracker.upc_connect docs]: https://home-assistant.io/components/device_tracker.upc_connect/ +[downloader docs]: https://home-assistant.io/components/downloader/ +[gc100 docs]: https://home-assistant.io/components/gc100/ +[google_assistant.smart_home docs]: https://home-assistant.io/components/google_assistant.smart_home/ +[hassio docs]: https://home-assistant.io/components/hassio/ +[influxdb docs]: https://home-assistant.io/components/influxdb/ +[input_datetime docs]: https://home-assistant.io/components/input_datetime/ +[knx docs]: https://home-assistant.io/components/knx/ +[lametric docs]: https://home-assistant.io/components/lametric/ +[light docs]: https://home-assistant.io/components/light/ +[light.tradfri docs]: https://home-assistant.io/components/light.tradfri/ +[light.xiaomi_miio docs]: https://home-assistant.io/components/light.xiaomi_miio/ +[lutron_caseta docs]: https://home-assistant.io/components/lutron_caseta/ +[media_extractor docs]: https://home-assistant.io/components/media_extractor/ +[media_player docs]: https://home-assistant.io/components/media_player/ +[media_player.bluesound docs]: https://home-assistant.io/components/media_player.bluesound/ +[media_player.snapcast docs]: https://home-assistant.io/components/media_player.snapcast/ +[media_player.universal docs]: https://home-assistant.io/components/media_player.universal/ +[media_player.webostv docs]: https://home-assistant.io/components/media_player.webostv/ +[media_player.yamaha_musiccast docs]: https://home-assistant.io/components/media_player.yamaha_musiccast/ +[mqtt docs]: https://home-assistant.io/components/mqtt/ +[mqtt.discovery docs]: https://home-assistant.io/components/mqtt.discovery/ +[mqtt.server docs]: https://home-assistant.io/components/mqtt.server/ +[mqtt_statestream docs]: https://home-assistant.io/components/mqtt_statestream/ +[neato docs]: https://home-assistant.io/components/neato/ +[no_ip docs]: https://home-assistant.io/components/no_ip/ +[notify.apns docs]: https://home-assistant.io/components/notify.apns/ +[notify.free_mobile docs]: https://home-assistant.io/components/notify.free_mobile/ +[notify.html5 docs]: https://home-assistant.io/components/notify.html5/ +[notify.lametric docs]: https://home-assistant.io/components/notify.lametric/ +[notify.simplepush docs]: https://home-assistant.io/components/notify.simplepush/ +[notify.telegram docs]: https://home-assistant.io/components/notify.telegram/ +[python_script docs]: https://home-assistant.io/components/python_script/ +[remote docs]: https://home-assistant.io/components/remote/ +[remote.harmony docs]: https://home-assistant.io/components/remote.harmony/ +[ring docs]: https://home-assistant.io/components/ring/ +[sensor.airvisual docs]: https://home-assistant.io/components/sensor.airvisual/ +[sensor.arlo docs]: https://home-assistant.io/components/sensor.arlo/ +[sensor.haveibeenpwned docs]: https://home-assistant.io/components/sensor.haveibeenpwned/ +[sensor.lacrosse docs]: https://home-assistant.io/components/sensor.lacrosse/ +[sensor.london_air docs]: https://home-assistant.io/components/sensor.london_air/ +[sensor.modbus docs]: https://home-assistant.io/components/sensor.modbus/ +[sensor.neato docs]: https://home-assistant.io/components/sensor.neato/ +[sensor.nederlandse_spoorwegen docs]: https://home-assistant.io/components/sensor.nederlandse_spoorwegen/ +[sensor.pyload docs]: https://home-assistant.io/components/sensor.pyload/ +[sensor.serial docs]: https://home-assistant.io/components/sensor.serial/ +[sensor.snmp docs]: https://home-assistant.io/components/sensor.snmp/ +[sensor.systemmonitor docs]: https://home-assistant.io/components/sensor.systemmonitor/ +[sensor.tibber docs]: https://home-assistant.io/components/sensor.tibber/ +[sensor.viaggiatreno docs]: https://home-assistant.io/components/sensor.viaggiatreno/ +[sensor.vultr docs]: https://home-assistant.io/components/sensor.vultr/ +[sensor.wunderground docs]: https://home-assistant.io/components/sensor.wunderground/ +[sensor.yweather docs]: https://home-assistant.io/components/sensor.yweather/ +[sensor.zamg docs]: https://home-assistant.io/components/sensor.zamg/ +[spc docs]: https://home-assistant.io/components/spc/ +[switch.broadlink docs]: https://home-assistant.io/components/switch.broadlink/ +[switch.hikvisioncam docs]: https://home-assistant.io/components/switch.hikvisioncam/ +[switch.modbus docs]: https://home-assistant.io/components/switch.modbus/ +[switch.neato docs]: https://home-assistant.io/components/switch.neato/ +[switch.snmp docs]: https://home-assistant.io/components/switch.snmp/ +[switch.xiaomi_miio docs]: https://home-assistant.io/components/switch.xiaomi_miio/ +[system_log docs]: https://home-assistant.io/components/system_log/ +[telegram_bot docs]: https://home-assistant.io/components/telegram_bot/ +[telegram_bot.polling docs]: https://home-assistant.io/components/telegram_bot.polling/ +[tradfri docs]: https://home-assistant.io/components/tradfri/ +[tts docs]: https://home-assistant.io/components/tts/ +[tts.google docs]: https://home-assistant.io/components/tts.google/ +[tts.yandextts docs]: https://home-assistant.io/components/tts.yandextts/ +[vacuum.neato docs]: https://home-assistant.io/components/vacuum.neato/ +[verisure docs]: https://home-assistant.io/components/verisure/ +[volvooncall docs]: https://home-assistant.io/components/volvooncall/ +[vultr docs]: https://home-assistant.io/components/vultr/ +[weather docs]: https://home-assistant.io/components/weather/ +[weather.demo docs]: https://home-assistant.io/components/weather.demo/ +[websocket_api docs]: https://home-assistant.io/components/websocket_api/ +[zwave docs]: https://home-assistant.io/components/zwave/ +[#10661]: https://github.com/home-assistant/home-assistant/pull/10661 +[#10665]: https://github.com/home-assistant/home-assistant/pull/10665 +[#10682]: https://github.com/home-assistant/home-assistant/pull/10682 +[#10694]: https://github.com/home-assistant/home-assistant/pull/10694 +[@amelchio]: https://github.com/amelchio +[@etsinko]: https://github.com/etsinko +[@tinloaf]: https://github.com/tinloaf +[@titilambert]: https://github.com/titilambert +[remote.harmony docs]: https://home-assistant.io/components/remote.harmony/ +[sensor.hydroquebec docs]: https://home-assistant.io/components/sensor.hydroquebec/ +[sensor.time_date docs]: https://home-assistant.io/components/sensor.time_date/ +[weather.yweather docs]: https://home-assistant.io/components/weather.yweather/ diff --git a/source/_posts/2017-11-29-hassio-virtual-machine.markdown b/source/_posts/2017-11-29-hassio-virtual-machine.markdown new file mode 100644 index 00000000000..2f53ef97d9d --- /dev/null +++ b/source/_posts/2017-11-29-hassio-virtual-machine.markdown @@ -0,0 +1,153 @@ +--- +layout: post +title: "Set up Hass.io on top of a virtual machine" +description: "A how-to about using Hass.io on x86_64 hardware in a virtualized way." +date: 2017-11-29 06:00:00 +0000 +date_formatted: "November 29, 2017" +author: Fabian Affolter +author_twitter: fabaff +comments: true +categories: How-To +og_image: /images/blog/2017-11-hassio-virtual/social.png +--- + + +The images for the Raspberry Pi family and the Intel NUC are an easy way to get started with [Hass.io](/hassio/). For a test or if you have a system which is already hosting virtual machines then the [**Hass.io installer**](/hassio/installation/#alternative-install-on-generic-linux-server) is an option to use Hass.io in a virtualized environment. In this guide the host is a Fedora 27 system with [libvirt](https://libvirt.org/) support and the guest will be running Debian 9. Hass.io will be installed on the guest. + + + +Assuming that you already have setup `libvirtd`. You might need to install `virt-builder` and `virt-viewer` additionally. + +```bash +$ sudo dnf -y install libguestfs-tools-c virt-install virt-viewer +``` + +We will create a virtual machine with Debian 9 and a 10 GB disk image in the QCOW format. Use `$ virt-builder --list` to get an overview about what's operating systems are available if you prefer to use a different system. + +```bash +$ sudo virt-builder debian-9 \ + --output /var/lib/libvirt/images/hassio.img \ + --format qcow2 \ + --size 10G \ + --root-password password:test123 \ + --hostname hassio \ + --firstboot-command "dpkg-reconfigure openssh-server" +[...] +[ 147.6] Finishing off + Output file: /var/lib/libvirt/images/hassio.img + Output size: 10.0G + Output format: qcow2 + Total usable space: 9.3G + Free space: 8.1G (87%) +``` + +Now, we are making our new virtual machine available for `libvirtd`. If you get an error that the OS is unknown, use `$ osinfo-query os` to get the name to use with `--os-variant`. To access the virtual machine is connected to the bridge `bridge0`. + +```bash +$ sudo virt-install --name hassio --import --ram 1024 \ + --os-variant debian9 -w bridge=bridge0 \ + --autostart --disk /var/lib/libvirt/images/hassio.img +``` + +

+ + Hass.io virtual machine in Virtual Machine Manager +

+ +Depending on your preferences you can use the Virtual Machine Manager (`virt-manager`) or `virsh` to manage the created virtual machine. Log in and create an user with `# useradd ha` and set a password with `# passwd ha`. We will need that user to make a SSH connection to the virtual machine. + +Log in as `ha` with the given password. If your are using the default network of `libvirtd` then the DHCP range is defined in `/var/lib/libvirt/dnsmasq/default.conf`. In this guide the virtual machine is present at 192.168.0.109. + +```bash +$ ssh ha@192.168.0.109 +ha@192.168.0.109's password: +Linux hassio 4.9.0-3-amd64 #1 SMP Debian 4.9.30-2+deb9u3 (2017-08-06) x86_64 +[...] +$ +``` + +Install the requirements after you switch the user to `root`. + +```bash +$ su +Password: +root@hassio:/home/ha# +root@hassio:/home/ha# apt-get update +root@hassio:/home/ha# apt-get install bash socat jq curl avahi-daemon \ + apt-transport-https ca-certificates +``` + +We want the latest Docker release. This requires additional steps to set it up as unlike other distributions Debian is lacking behind with current packages. + +```bash +root@hassio:/home/ha# wget https://download.docker.com/linux/debian/gpg +root@hassio:/home/ha# apt-key add gpg +OK +root@hassio:/home/ha# echo "deb [arch=amd64] https://download.docker.com/linux/debian $(lsb_release -cs) stable" | tee -a /etc/apt/sources.list.d/docker.list +root@hassio:/home/ha# apt-get update +``` + +Now, it's possible to install a current release of [Docker](https://www.docker.com/). + +```bash +root@hassio:/home/ha# apt-get -y install docker-ce +``` + +Start `docker` and enable it. + +```bash +root@hassio:/home/ha# systemctl start docker && systemctl enable docker +``` + +An [installation script](https://github.com/home-assistant/hassio-build/tree/master/install#install-hassio) will take care about the setup of all moving parts. + +```bash +root@hassio:/home/ha# curl -sL https://raw.githubusercontent.com/home-assistant/hassio-build/master/install/hassio_install | bash - +[INFO] Install supervisor docker +[INFO] Install generic HostControl +[INFO] Install startup scripts +[INFO] Init systemd +Created symlink /etc/systemd/system/multi-user.target.wants/hassio-supervisor.service → /etc/systemd/system/hassio-supervisor.service. +[INFO] Start services +``` + +If it's done, then there will be two new containers. + +```bash +root@hassio:/home/ha# docker ps +CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES +ada5bbfc74f0 homeassistant/qemux86-64-homeassistant "/usr/bin/entry.sh..." 4 minutes ago Up 4 minutes homeassistant +5954ac452ffc homeassistant/amd64-hassio-supervisor "/usr/bin/entry.sh..." 7 minutes ago Up 7 minutes hassio_supervisor +``` + +After a connection to the container which is containing Home Assistant is made, you will see the log output. + +```bash +root@hassio:/home/ha# docker attach --sig-proxy=false ada5bbfc74f0 +2017-11-28 19:24:30 INFO (MainThread) [homeassistant.core] Bus:Handling + + Hass.io overview +

+ +Keep in mind that there are limitations with this approach. Not all [add-ons](/addons/) will work and some don't make sense to use as the hardware is not present. E.g., use the [SSH community add-on](https://github.com/hassio-addons/addon-ssh) instead of the default [SSH add-on](/addons/ssh/). + diff --git a/source/_posts/2017-12-03-release-59.markdown b/source/_posts/2017-12-03-release-59.markdown new file mode 100644 index 00000000000..98c4d669b2f --- /dev/null +++ b/source/_posts/2017-12-03-release-59.markdown @@ -0,0 +1,431 @@ +--- +layout: post +title: "0.59: Order pizza, Entity Picker, Color Wheel" +description: "If you don't want to create items on our shopping list with HTTP requests, just order pizza!" +date: 2017-12-03 02:00:00 +date_formatted: "December 3, 2017" +author: Fabian Affolter +author_twitter: fabaff +comments: true +categories: Release-Notes +og_image: /images/blog/2017-12-0.59/components.png +--- + + + +We are proud to announce the availability of Home Assistant 0.59. To keep you in the loop: This is the second last release in 2017. We have stuck to our bi-weekly release cycle for another year but we decided that we will take a little break between Christmas and New Year. + +## {% linkable_title Dominos Pizza platform %} +With the Dominos Pizza integration made by [@wardcraigj] your home is now taking care that you don't starve. In combination with a [Skybell](/components/skybell/) or a [DoorBird](/components/doorbird/) you will know exactly when the pizza is in front of your door. + +## {% linkable_title Color picker %} +[@NovapaX] created a new color picker. While dragging the color badge with your finger, a badge will appear above your finger so you can see the current color. + +

+ Screenshot of the color wheel. + Screenshot of the color wheel. +

+ +## {% linkable_title Shopping list tweaks %} +[@balloob] has refreshed the shopping list UI to make it more usable. It's now possible to add items by typing, instead of just voice. Also editting has been made easier. + +## {% linkable_title Entity picker %} +[@balloob] improved the way if you want to pick an entity. In the automation editor, the script editor and the service section of the Developer Tools it's much easier to identify the right one! The automation editor will only suggest relevant entities. + +

+ Screenshot of the Entity Picker. + Screenshot of the of the Enitity Picker. +

+ +## {% linkable_title Hass.io Add-ons %} +If you follow our [twitter feed](https://twitter.com/home_assistant) then you may already know that [@frenck](https://github.com/frenck) spent some time to bring new stuff to the [Community Hass.io Add-ons repository](https://github.com/hassio-addons/repository). + +- [Cloud9 IDE](https://github.com/hassio-addons/addon-ide) +- [Terminal support](https://github.com/hassio-addons/addon-terminal) +- New release of the [Tor add-on](https://github.com/hassio-addons/addon-tor) + +## {% linkable_title New Platforms %} + +- Support for Unifi direct access device tracker (No unifi controller software) ([@w1ll1am23] - [#10097]) ([device_tracker.unifi_direct docs]) (new-platform) +- Tahoma platform for Somfy Covers and Sensors ([@philklei] - [#10652]) ([tahoma docs]) ([cover.tahoma docs]) ([sensor.tahoma docs]) (new-platform) +- New Hive Component / Platforms ([@Rendili] - [#9804]) ([hive docs]) ([climate.hive docs]) ([light.hive docs]) ([sensor.hive docs]) ([switch.hive docs]) (new-platform) +- Add Dominos Pizza platform ([@wardcraigj] - [#10379]) ([dominos docs]) (new-platform) +- Add tts.baidu platform ([@zhujisheng] - [#10724]) ([tts.baidu docs]) (new-platform) +- Create ecobee weather platform ([@PhracturedBlue] - [#10869]) ([ecobee docs]) ([weather.ecobee docs]) (new-platform) + +## {% linkable_title Release 0.59.1 - December 4 %} + +- Fix Notifications for Android TV ([@danielperna84] - [#10798]) ([notify.nfandroidtv docs]) +- fix iOS component config generation ([@wrboyce] - [#10923]) +- Fix color wheel in group more info dialogs ([@NovapaX] - [#10934]) +- Dominos no order fix ([@wardcraigj] - [#10935]) ([dominos docs]) + +## {% linkable_title Release 0.59.2 - December 6 %} + +- Require FF43 for latest js ([@andrey-git] - [#10941]) +- Fix linksys_ap.py by inheriting DeviceScanner ([@mateuszdrab] - [#10947]) ([device_tracker.linksys_ap docs]) +- Upgrade tellduslive library version (closes https://github.com/home-assistant/home-assistant/issues/10922) ([@molobrakos] - [#10950]) ([tellduslive docs]) +- Allow chime to work for wink siren/chime ([@w1ll1am23] - [#10961]) ([wink docs]) +- Reload closest store on api menu request ([@wardcraigj] - [#10962]) ([dominos docs]) +- Revert pychromecast update ([@balloob] - [#10989]) ([media_player.cast docs]) + +## {% linkable_title If you need help... %} + +...don't hesitate to use our very active [forums](https://community.home-assistant.io/) or join us for a little [chat](https://discord.gg/c5DvZ4e). The release notes have comments enabled but it's preferred if you use the former communication channels. Thanks. + +## {% linkable_title Reporting Issues %} + +Experiencing issues introduced by this release? Please report them in our [issue tracker](https://github.com/home-assistant/home-assistant/issues). Make sure to fill in all fields of the issue template. + + + +## {% linkable_title Breaking Changes %} + +- Added cycles config option to LaMetric notifications ([@frittes] - [#10656]) ([notify.lametric docs]) (breaking change) +- Fix name collision when using multiple Hue bridges ([@zBart] - [#10486]) ([light.hue docs]) (breaking change) +- Single LEDs in Blinkt support ([@matemaciek] - [#10581]) ([light.blinkt docs]) (breaking change) +- Tellduslive update with support for auto config and Local api ([@fredrike] - [#10435]) ([tellduslive docs]) (breaking change) +- Add useragent-based detection of JS version ([@andrey-git] - [#10776]) (breaking change) + +## {% linkable_title All changes %} + +- Added unit_of_measurement to Currencylayer ([@arsaboo] - [#10598]) ([sensor.currencylayer docs]) +- Change generic thermostat - any toggle device as heater switch ([@milanvo] - [#10597]) ([climate.generic_thermostat docs]) +- Add hddtemp sensor device even if unreachable. ([@cgtobi] - [#10623]) ([sensor.hddtemp docs]) +- Restore target temperature for generic thermostat ([@tinloaf] - [#10635]) ([climate.generic_thermostat docs]) +- Update lnetatmo ([@gieljnssns] - [#10631]) ([netatmo docs]) +- Support for Unifi direct access device tracker (No unifi controller software) ([@w1ll1am23] - [#10097]) ([device_tracker.unifi_direct docs]) (new-platform) +- Add Facebook Notification tests ([@broox] - [#10642]) +- Change some warnings to info ([@cgarwood] - [#10386]) ([emulated_hue docs]) +- Added cycles config option to LaMetric notifications ([@frittes] - [#10656]) ([notify.lametric docs]) (breaking change) +- Netatmo httperror403 fix ([@gieljnssns] - [#10659]) ([netatmo docs]) +- Bump dev to 0.59.0.dev0 ([@fabaff] - [#10675]) +- Include unit_of_measurement as InfluxDb field ([@PeteBa] - [#9790]) ([influxdb docs]) +- Tahoma platform for Somfy Covers and Sensors ([@philklei] - [#10652]) ([tahoma docs]) ([cover.tahoma docs]) ([sensor.tahoma docs]) (new-platform) +- Populate measurement state field for HA states like home/not_home ([@PeteBa] - [#9833]) ([influxdb docs]) +- Reorganize lint travis builds ([@balloob] - [#10670]) +- Refactored to new global json saving and loading ([@mnigbur] - [#10677]) +- Convert configurator to use markdown ([@balloob] - [#10668]) ([configurator docs]) ([light.hue docs]) +- index.html improvements ([@balloob] - [#10696]) +- Add Arm Custom Bypass to alarm_control_panel ([@uchagani] - [#10697]) ([alarm_control_panel docs]) +- Fix conversation ([@balloob] - [#10686]) ([conversation docs]) +- Shopping list: add item HTTP API ([@balloob] - [#10674]) ([shopping_list docs]) +- Add presence device_class ([@arsaboo] - [#10705]) ([binary_sensor docs]) +- python-miio version bumped for improved device support. ([@syssi] - [#10720]) ([fan.xiaomi_miio docs]) ([light.xiaomi_miio docs]) ([switch.xiaomi_miio docs]) ([vacuum.xiaomi_miio docs]) +- Adding Queue count sensor ([@bigwoof] - [#10723]) ([sensor.sabnzbd docs]) +- Bump pychromecast to 1.0.2 ([@OttoWinter] - [#10728]) ([media_player.cast docs]) +- Fix unit conversion for Sensibo A/C units ([@bryanyork] - [#10692]) ([climate.sensibo docs]) +- Optimised images. Saved 80 KB out of 656 KB. 12.3% overall (up to 32.1% per file) ([@grischard] - [#10735]) +- Add transmission rate ([@svenstaro] - [#10740]) ([sensor.fritzbox_netmonitor docs]) +- Update pytradfri to 4.1.0 ([@lwis] - [#10521]) ([tradfri docs]) ([light.tradfri docs]) +- Use new DoorBirdPy (v0.1.0) ([@Klikini] - [#10734]) ([doorbird docs]) +- Add fan and reduce I/O calls in radiotherm ([@TD22057] - [#10437]) ([climate.radiotherm docs]) +- New Hive Component / Platforms ([@Rendili] - [#9804]) ([hive docs]) ([climate.hive docs]) ([light.hive docs]) ([sensor.hive docs]) ([switch.hive docs]) (new-platform) +- Temporarily fix yahoo weather API issue and add unit test. ([@cgtobi] - [#10737]) ([sensor.yweather docs]) +- Google assistant climate mode fix ([@braddparker] - [#10726]) ([google_assistant.smart_home docs]) +- Protect sensitive information for Amcrest cameras ([@tchellomello] - [#10569]) ([amcrest docs]) ([camera.amcrest docs]) ([sensor.amcrest docs]) +- InfluxDB send retry after IOError ([@janLo] - [#10263]) ([influxdb docs]) +- Add Dominos Pizza platform ([@wardcraigj] - [#10379]) ([dominos docs]) (new-platform) +- Fix name collision when using multiple Hue bridges ([@zBart] - [#10486]) ([light.hue docs]) (breaking change) +- Make shell_command async ([@n8henrie] - [#10741]) ([shell_command docs]) +- Update CODEOWNERS with hive Component / Platforms ([@Rendili] - [#10775]) +- Bump total-connect-client version ([@uchagani] - [#10769]) ([alarm_control_panel.totalconnect docs]) +- Fix scene description formatting. ([@balloob] - [#10785]) +- Fixes #10773: Demo Alarm Broken ([@uchagani] - [#10777]) ([alarm_control_panel.demo docs]) +- Load Ring camera only with Ring Protect plan activated ([@tchellomello] - [#10739]) ([ring docs]) ([camera.ring docs]) +- system_log improvements ([@andrey-git] - [#10709]) ([system_log docs]) +- Fix WUnderground error handling, rework entity methods ([@milanvo] - [#10295]) ([sensor.wunderground docs]) +- Add away_mode_name to arlo alarm control panel ([@bcl1713] - [#10796]) ([alarm_control_panel.arlo docs]) +- Add missing docstring ([@fabaff] - [#10812]) ([notify.pushbullet docs]) +- Cloud cognito switch ([@balloob] - [#10823]) ([cloud docs]) ([cloud.auth_api docs]) ([cloud.iot docs]) +- Added sensor types from telldus server src ([@rasmusbe] - [#10787]) ([sensor.tellduslive docs]) +- Add tts.baidu platform ([@zhujisheng] - [#10724]) ([tts.baidu docs]) (new-platform) +- make RGB values consistent as int. fixes #10766 ([@perosb] - [#10782]) +- Single LEDs in Blinkt support ([@matemaciek] - [#10581]) ([light.blinkt docs]) (breaking change) +- Add debug ([@dgomes] - [#10828]) ([sensor.serial docs]) +- Fix "recently pair device" ([@stephenyeargin] - [#10832]) +- Fixed Yeelight's color temperature conversion to RGB ([@chocomega] - [#10831]) ([light.yeelight docs]) +- Fix for Sensibo with missing temperature ([@andrey-git] - [#10801]) ([climate.sensibo docs]) +- upgrade somecomfort to 0.5.0 ([@dferrante] - [#10834]) ([climate.honeywell docs]) +- Add support for logarithm in templates ([@odinuge] - [#10824]) +- Changing handling for google_assistant groups to treat them as lights. ([@snowzach] - [#10111]) +- Tellduslive update with support for auto config and Local api ([@fredrike] - [#10435]) ([tellduslive docs]) (breaking change) +- KNX: Added config option for broadcasting current time to KNX bus. ([@Julius2342] - [#10654]) ([knx docs]) +- Ecobee set humidity level ([@cbulock] - [#10780]) ([ecobee docs]) ([climate.ecobee docs]) +- Add device class for low battery ([@schmittx] - [#10829]) ([binary_sensor docs]) +- Tellduslive: Use magic constants for battery level. Also, the previous formula for battery level was wrong. ([@molobrakos] - [#10788]) ([tellduslive docs]) +- Add useragent-based detection of JS version ([@andrey-git] - [#10776]) (breaking change) +- add support for multiple execution per execute request ([@perosb] - [#10844]) ([google_assistant.http docs]) +- Upgrade HomeMatic, add devices ([@danielperna84] - [#10845]) ([homematic docs]) ([binary_sensor.homematic docs]) ([sensor.homematic docs]) +- Climate component: add supported_features ([@tinloaf] - [#10658]) ([climate docs]) ([climate.generic_thermostat docs]) ([climate.mqtt docs]) +- Upgrade mutagen to 1.39 ([@fabaff] - [#10851]) ([tts docs]) +- Updated codeowner for Tile device tracker ([@bachya] - [#10861]) +- Revert "KNX: Added config option for broadcasting current time to KNX bus. (#10654)" ([@Julius2342] - [#10874]) ([knx docs]) +- Upgrade distro to 1.1.0 ([@fabaff] - [#10850]) ([updater docs]) +- Bugfix trigger state with multible entities ([@pvizeli] - [#10857]) ([automation.state docs]) +- tellstick fix DEPENDENCIES and update tellcore-net ([@pvizeli] - [#10859]) ([tellstick docs]) ([sensor.tellstick docs]) +- Upgrade aiohttp to 2.3.5 ([@fabaff] - [#10889]) +- Upgrade fastdotcom to 0.0.3 ([@fabaff] - [#10886]) ([sensor.fastdotcom docs]) +- Upgrade schiene to 0.19 ([@fabaff] - [#10887]) ([sensor.deutsche_bahn docs]) +- Xiaomi Vacuum: remove deprecated calls ([@rytilahti] - [#10839]) ([vacuum.xiaomi_miio docs]) +- Create ecobee weather platform ([@PhracturedBlue] - [#10869]) ([ecobee docs]) ([weather.ecobee docs]) (new-platform) +- Microsoft Text-to-speech: Fixing missing en-gb support bug ([@jeroenterheerdt] - [#10429]) ([tts.microsoft docs]) +- Upgrade youtube_dl to 2017.11.26 ([@fabaff] - [#10890]) ([media_extractor docs]) +- Upgrade yarl to 0.15.0 ([@fabaff] - [#10888]) +- Fix tests ([@pvizeli] - [#10891]) +- Refactored WHOIS sensor to resolve assumed key errors ([@GenericStudent] - [#10662]) ([sensor.whois docs]) +- Serve latest extra_html in dev mode ([@andrey-git] - [#10863]) +- Reload groups after saving a change via config API ([@andrey-git] - [#10877]) ([config.group docs]) +- Fix issues from review of ecobee weather component ([@PhracturedBlue] - [#10903]) ([weather.ecobee docs]) +- Bugfix #10902 ([@turbokongen] - [#10904]) ([zwave docs]) + +[#10097]: https://github.com/home-assistant/home-assistant/pull/10097 +[#10111]: https://github.com/home-assistant/home-assistant/pull/10111 +[#10263]: https://github.com/home-assistant/home-assistant/pull/10263 +[#10295]: https://github.com/home-assistant/home-assistant/pull/10295 +[#10379]: https://github.com/home-assistant/home-assistant/pull/10379 +[#10386]: https://github.com/home-assistant/home-assistant/pull/10386 +[#10429]: https://github.com/home-assistant/home-assistant/pull/10429 +[#10435]: https://github.com/home-assistant/home-assistant/pull/10435 +[#10437]: https://github.com/home-assistant/home-assistant/pull/10437 +[#10486]: https://github.com/home-assistant/home-assistant/pull/10486 +[#10521]: https://github.com/home-assistant/home-assistant/pull/10521 +[#10569]: https://github.com/home-assistant/home-assistant/pull/10569 +[#10581]: https://github.com/home-assistant/home-assistant/pull/10581 +[#10597]: https://github.com/home-assistant/home-assistant/pull/10597 +[#10598]: https://github.com/home-assistant/home-assistant/pull/10598 +[#10623]: https://github.com/home-assistant/home-assistant/pull/10623 +[#10631]: https://github.com/home-assistant/home-assistant/pull/10631 +[#10635]: https://github.com/home-assistant/home-assistant/pull/10635 +[#10642]: https://github.com/home-assistant/home-assistant/pull/10642 +[#10652]: https://github.com/home-assistant/home-assistant/pull/10652 +[#10654]: https://github.com/home-assistant/home-assistant/pull/10654 +[#10656]: https://github.com/home-assistant/home-assistant/pull/10656 +[#10658]: https://github.com/home-assistant/home-assistant/pull/10658 +[#10659]: https://github.com/home-assistant/home-assistant/pull/10659 +[#10662]: https://github.com/home-assistant/home-assistant/pull/10662 +[#10668]: https://github.com/home-assistant/home-assistant/pull/10668 +[#10670]: https://github.com/home-assistant/home-assistant/pull/10670 +[#10674]: https://github.com/home-assistant/home-assistant/pull/10674 +[#10675]: https://github.com/home-assistant/home-assistant/pull/10675 +[#10677]: https://github.com/home-assistant/home-assistant/pull/10677 +[#10686]: https://github.com/home-assistant/home-assistant/pull/10686 +[#10692]: https://github.com/home-assistant/home-assistant/pull/10692 +[#10696]: https://github.com/home-assistant/home-assistant/pull/10696 +[#10697]: https://github.com/home-assistant/home-assistant/pull/10697 +[#10705]: https://github.com/home-assistant/home-assistant/pull/10705 +[#10709]: https://github.com/home-assistant/home-assistant/pull/10709 +[#10720]: https://github.com/home-assistant/home-assistant/pull/10720 +[#10723]: https://github.com/home-assistant/home-assistant/pull/10723 +[#10724]: https://github.com/home-assistant/home-assistant/pull/10724 +[#10726]: https://github.com/home-assistant/home-assistant/pull/10726 +[#10728]: https://github.com/home-assistant/home-assistant/pull/10728 +[#10734]: https://github.com/home-assistant/home-assistant/pull/10734 +[#10735]: https://github.com/home-assistant/home-assistant/pull/10735 +[#10737]: https://github.com/home-assistant/home-assistant/pull/10737 +[#10739]: https://github.com/home-assistant/home-assistant/pull/10739 +[#10740]: https://github.com/home-assistant/home-assistant/pull/10740 +[#10741]: https://github.com/home-assistant/home-assistant/pull/10741 +[#10769]: https://github.com/home-assistant/home-assistant/pull/10769 +[#10775]: https://github.com/home-assistant/home-assistant/pull/10775 +[#10776]: https://github.com/home-assistant/home-assistant/pull/10776 +[#10777]: https://github.com/home-assistant/home-assistant/pull/10777 +[#10780]: https://github.com/home-assistant/home-assistant/pull/10780 +[#10782]: https://github.com/home-assistant/home-assistant/pull/10782 +[#10785]: https://github.com/home-assistant/home-assistant/pull/10785 +[#10787]: https://github.com/home-assistant/home-assistant/pull/10787 +[#10788]: https://github.com/home-assistant/home-assistant/pull/10788 +[#10796]: https://github.com/home-assistant/home-assistant/pull/10796 +[#10801]: https://github.com/home-assistant/home-assistant/pull/10801 +[#10812]: https://github.com/home-assistant/home-assistant/pull/10812 +[#10823]: https://github.com/home-assistant/home-assistant/pull/10823 +[#10824]: https://github.com/home-assistant/home-assistant/pull/10824 +[#10828]: https://github.com/home-assistant/home-assistant/pull/10828 +[#10829]: https://github.com/home-assistant/home-assistant/pull/10829 +[#10831]: https://github.com/home-assistant/home-assistant/pull/10831 +[#10832]: https://github.com/home-assistant/home-assistant/pull/10832 +[#10834]: https://github.com/home-assistant/home-assistant/pull/10834 +[#10839]: https://github.com/home-assistant/home-assistant/pull/10839 +[#10844]: https://github.com/home-assistant/home-assistant/pull/10844 +[#10845]: https://github.com/home-assistant/home-assistant/pull/10845 +[#10850]: https://github.com/home-assistant/home-assistant/pull/10850 +[#10851]: https://github.com/home-assistant/home-assistant/pull/10851 +[#10857]: https://github.com/home-assistant/home-assistant/pull/10857 +[#10859]: https://github.com/home-assistant/home-assistant/pull/10859 +[#10861]: https://github.com/home-assistant/home-assistant/pull/10861 +[#10863]: https://github.com/home-assistant/home-assistant/pull/10863 +[#10869]: https://github.com/home-assistant/home-assistant/pull/10869 +[#10874]: https://github.com/home-assistant/home-assistant/pull/10874 +[#10877]: https://github.com/home-assistant/home-assistant/pull/10877 +[#10886]: https://github.com/home-assistant/home-assistant/pull/10886 +[#10887]: https://github.com/home-assistant/home-assistant/pull/10887 +[#10888]: https://github.com/home-assistant/home-assistant/pull/10888 +[#10889]: https://github.com/home-assistant/home-assistant/pull/10889 +[#10890]: https://github.com/home-assistant/home-assistant/pull/10890 +[#10891]: https://github.com/home-assistant/home-assistant/pull/10891 +[#10903]: https://github.com/home-assistant/home-assistant/pull/10903 +[#10904]: https://github.com/home-assistant/home-assistant/pull/10904 +[#9790]: https://github.com/home-assistant/home-assistant/pull/9790 +[#9804]: https://github.com/home-assistant/home-assistant/pull/9804 +[#9833]: https://github.com/home-assistant/home-assistant/pull/9833 +[@GenericStudent]: https://github.com/GenericStudent +[@Julius2342]: https://github.com/Julius2342 +[@Klikini]: https://github.com/Klikini +[@OttoWinter]: https://github.com/OttoWinter +[@PeteBa]: https://github.com/PeteBa +[@PhracturedBlue]: https://github.com/PhracturedBlue +[@Rendili]: https://github.com/Rendili +[@TD22057]: https://github.com/TD22057 +[@andrey-git]: https://github.com/andrey-git +[@arsaboo]: https://github.com/arsaboo +[@bachya]: https://github.com/bachya +[@balloob]: https://github.com/balloob +[@bcl1713]: https://github.com/bcl1713 +[@bigwoof]: https://github.com/bigwoof +[@braddparker]: https://github.com/braddparker +[@broox]: https://github.com/broox +[@bryanyork]: https://github.com/bryanyork +[@cbulock]: https://github.com/cbulock +[@cgarwood]: https://github.com/cgarwood +[@cgtobi]: https://github.com/cgtobi +[@chocomega]: https://github.com/chocomega +[@danielperna84]: https://github.com/danielperna84 +[@dferrante]: https://github.com/dferrante +[@dgomes]: https://github.com/dgomes +[@fabaff]: https://github.com/fabaff +[@fredrike]: https://github.com/fredrike +[@frittes]: https://github.com/frittes +[@gieljnssns]: https://github.com/gieljnssns +[@grischard]: https://github.com/grischard +[@janLo]: https://github.com/janLo +[@jeroenterheerdt]: https://github.com/jeroenterheerdt +[@lwis]: https://github.com/lwis +[@matemaciek]: https://github.com/matemaciek +[@milanvo]: https://github.com/milanvo +[@mnigbur]: https://github.com/mnigbur +[@molobrakos]: https://github.com/molobrakos +[@n8henrie]: https://github.com/n8henrie +[@odinuge]: https://github.com/odinuge +[@perosb]: https://github.com/perosb +[@philklei]: https://github.com/philklei +[@pvizeli]: https://github.com/pvizeli +[@rasmusbe]: https://github.com/rasmusbe +[@rytilahti]: https://github.com/rytilahti +[@schmittx]: https://github.com/schmittx +[@snowzach]: https://github.com/snowzach +[@stephenyeargin]: https://github.com/stephenyeargin +[@svenstaro]: https://github.com/svenstaro +[@syssi]: https://github.com/syssi +[@tchellomello]: https://github.com/tchellomello +[@tinloaf]: https://github.com/tinloaf +[@turbokongen]: https://github.com/turbokongen +[@uchagani]: https://github.com/uchagani +[@w1ll1am23]: https://github.com/w1ll1am23 +[@wardcraigj]: https://github.com/wardcraigj +[@zBart]: https://github.com/zBart +[@zhujisheng]: https://github.com/zhujisheng +[alarm_control_panel docs]: https://home-assistant.io/components/alarm_control_panel/ +[alarm_control_panel.arlo docs]: https://home-assistant.io/components/alarm_control_panel.arlo/ +[alarm_control_panel.demo docs]: https://home-assistant.io/components/alarm_control_panel.demo/ +[alarm_control_panel.totalconnect docs]: https://home-assistant.io/components/alarm_control_panel.totalconnect/ +[amcrest docs]: https://home-assistant.io/components/amcrest/ +[automation.state docs]: https://home-assistant.io/docs/automation/trigger/#state-trigger +[binary_sensor docs]: https://home-assistant.io/components/binary_sensor/ +[binary_sensor.homematic docs]: https://home-assistant.io/components/binary_sensor.homematic/ +[camera.amcrest docs]: https://home-assistant.io/components/camera.amcrest/ +[camera.ring docs]: https://home-assistant.io/components/camera.ring/ +[climate docs]: https://home-assistant.io/components/climate/ +[climate.ecobee docs]: https://home-assistant.io/components/climate.ecobee/ +[climate.generic_thermostat docs]: https://home-assistant.io/components/climate.generic_thermostat/ +[climate.hive docs]: https://home-assistant.io/components/climate.hive/ +[climate.honeywell docs]: https://home-assistant.io/components/climate.honeywell/ +[climate.mqtt docs]: https://home-assistant.io/components/climate.mqtt/ +[climate.radiotherm docs]: https://home-assistant.io/components/climate.radiotherm/ +[climate.sensibo docs]: https://home-assistant.io/components/climate.sensibo/ +[cloud docs]: https://home-assistant.io/components/cloud/ +[cloud.auth_api docs]: https://home-assistant.io/components/cloud.auth_api/ +[cloud.iot docs]: https://home-assistant.io/components/cloud.iot/ +[config.group docs]: https://home-assistant.io/components/config.group/ +[configurator docs]: https://home-assistant.io/components/configurator/ +[conversation docs]: https://home-assistant.io/components/conversation/ +[cover.tahoma docs]: https://home-assistant.io/components/cover.tahoma/ +[device_tracker.unifi_direct docs]: https://home-assistant.io/components/device_tracker.unifi_direct/ +[dominos docs]: https://home-assistant.io/components/dominos/ +[doorbird docs]: https://home-assistant.io/components/doorbird/ +[ecobee docs]: https://home-assistant.io/components/ecobee/ +[emulated_hue docs]: https://home-assistant.io/components/emulated_hue/ +[fan.xiaomi_miio docs]: https://home-assistant.io/components/fan.xiaomi_miio/ +[google_assistant.http docs]: https://home-assistant.io/components/google_assistant.http/ +[google_assistant.smart_home docs]: https://home-assistant.io/components/google_assistant.smart_home/ +[hive docs]: https://home-assistant.io/components/hive/ +[homematic docs]: https://home-assistant.io/components/homematic/ +[influxdb docs]: https://home-assistant.io/components/influxdb/ +[knx docs]: https://home-assistant.io/components/knx/ +[light.blinkt docs]: https://home-assistant.io/components/light.blinkt/ +[light.hive docs]: https://home-assistant.io/components/light.hive/ +[light.hue docs]: https://home-assistant.io/components/light.hue/ +[light.tradfri docs]: https://home-assistant.io/components/light.tradfri/ +[light.xiaomi_miio docs]: https://home-assistant.io/components/light.xiaomi_miio/ +[light.yeelight docs]: https://home-assistant.io/components/light.yeelight/ +[media_extractor docs]: https://home-assistant.io/components/media_extractor/ +[media_player.cast docs]: https://home-assistant.io/components/media_player.cast/ +[netatmo docs]: https://home-assistant.io/components/netatmo/ +[notify.lametric docs]: https://home-assistant.io/components/notify.lametric/ +[notify.pushbullet docs]: https://home-assistant.io/components/notify.pushbullet/ +[ring docs]: https://home-assistant.io/components/ring/ +[sensor.amcrest docs]: https://home-assistant.io/components/sensor.amcrest/ +[sensor.currencylayer docs]: https://home-assistant.io/components/sensor.currencylayer/ +[sensor.deutsche_bahn docs]: https://home-assistant.io/components/sensor.deutsche_bahn/ +[sensor.fastdotcom docs]: https://home-assistant.io/components/sensor.fastdotcom/ +[sensor.fritzbox_netmonitor docs]: https://home-assistant.io/components/sensor.fritzbox_netmonitor/ +[sensor.hddtemp docs]: https://home-assistant.io/components/sensor.hddtemp/ +[sensor.hive docs]: https://home-assistant.io/components/sensor.hive/ +[sensor.homematic docs]: https://home-assistant.io/components/sensor.homematic/ +[sensor.sabnzbd docs]: https://home-assistant.io/components/sensor.sabnzbd/ +[sensor.serial docs]: https://home-assistant.io/components/sensor.serial/ +[sensor.tahoma docs]: https://home-assistant.io/components/sensor.tahoma/ +[sensor.tellduslive docs]: https://home-assistant.io/components/sensor.tellduslive/ +[sensor.tellstick docs]: https://home-assistant.io/components/sensor.tellstick/ +[sensor.whois docs]: https://home-assistant.io/components/sensor.whois/ +[sensor.wunderground docs]: https://home-assistant.io/components/sensor.wunderground/ +[sensor.yweather docs]: https://home-assistant.io/components/sensor.yweather/ +[shell_command docs]: https://home-assistant.io/components/shell_command/ +[shopping_list docs]: https://home-assistant.io/components/shopping_list/ +[switch.hive docs]: https://home-assistant.io/components/switch.hive/ +[switch.xiaomi_miio docs]: https://home-assistant.io/components/switch.xiaomi_miio/ +[system_log docs]: https://home-assistant.io/components/system_log/ +[tahoma docs]: https://home-assistant.io/components/tahoma/ +[tellduslive docs]: https://home-assistant.io/components/tellduslive/ +[tellstick docs]: https://home-assistant.io/components/tellstick/ +[tradfri docs]: https://home-assistant.io/components/tradfri/ +[tts docs]: https://home-assistant.io/components/tts/ +[tts.baidu docs]: https://home-assistant.io/components/tts.baidu/ +[tts.microsoft docs]: https://home-assistant.io/components/tts.microsoft/ +[updater docs]: https://home-assistant.io/components/updater/ +[vacuum.xiaomi_miio docs]: https://home-assistant.io/components/vacuum.xiaomi_miio/ +[weather.ecobee docs]: https://home-assistant.io/components/weather.ecobee/ +[zwave docs]: https://home-assistant.io/components/zwave/ +[#10798]: https://github.com/home-assistant/home-assistant/pull/10798 +[#10923]: https://github.com/home-assistant/home-assistant/pull/10923 +[#10934]: https://github.com/home-assistant/home-assistant/pull/10934 +[#10935]: https://github.com/home-assistant/home-assistant/pull/10935 +[@NovapaX]: https://github.com/NovapaX +[@wrboyce]: https://github.com/wrboyce +[notify.nfandroidtv docs]: https://home-assistant.io/components/notify.nfandroidtv/ +[#10941]: https://github.com/home-assistant/home-assistant/pull/10941 +[#10947]: https://github.com/home-assistant/home-assistant/pull/10947 +[#10950]: https://github.com/home-assistant/home-assistant/pull/10950 +[#10961]: https://github.com/home-assistant/home-assistant/pull/10961 +[#10962]: https://github.com/home-assistant/home-assistant/pull/10962 +[#10989]: https://github.com/home-assistant/home-assistant/pull/10989 +[@andrey-git]: https://github.com/andrey-git +[@balloob]: https://github.com/balloob +[@mateuszdrab]: https://github.com/mateuszdrab +[@molobrakos]: https://github.com/molobrakos +[@w1ll1am23]: https://github.com/w1ll1am23 +[@wardcraigj]: https://github.com/wardcraigj +[device_tracker.linksys_ap docs]: https://home-assistant.io/components/device_tracker.linksys_ap/ +[dominos docs]: https://home-assistant.io/components/dominos/ +[media_player.cast docs]: https://home-assistant.io/components/media_player.cast/ +[tellduslive docs]: https://home-assistant.io/components/tellduslive/ +[wink docs]: https://home-assistant.io/components/wink/ diff --git a/source/_posts/2017-12-17-introducing-home-assistant-cloud.markdown b/source/_posts/2017-12-17-introducing-home-assistant-cloud.markdown new file mode 100644 index 00000000000..b55eabb3e31 --- /dev/null +++ b/source/_posts/2017-12-17-introducing-home-assistant-cloud.markdown @@ -0,0 +1,107 @@ +--- +layout: post +title: Introducing Home Assistant Cloud +description: "Use Alexa to control any device that is connected to Home Assistant." +date: 2017-12-17 03:00:00 +date_formatted: "December 17, 2017" +author: Paulus Schoutsen +author_twitter: balloob +comments: true +categories: Announcements +--- + +Today we’re introducing the next step in the Home Assistant saga: the Home Assistant Cloud. The goal of the Home Assistant Cloud is to bridge the gap between your local Home Assistant instance and services in the cloud while delivering the maximum possible security and privacy. + +The first service that is supported via the Home Assistant Cloud is the Amazon Alexa Smart Home skill. This integration will allow you to control all your devices in Home Assistant via Amazon Alexa. You will be able to say _“Alexa, turn on the kitchen lights”_ and your local Home Assistant will turn on the lights. Because Alexa talks to Home Assistant, it doesn’t matter what kind of lights they are! Anything that is linked to Home Assistant will work. IKEA lights, a 10 year old X10 switch or something you’ve made yourself. As long as Home Assistant can control it, you can control it via Alexa. + +We have designed the Home Assistant Cloud with security in mind. When you activate the new Cloud component, your instance will create a secure connection to the Home Assistant Cloud. There is no need for any further configuration or to expose your instance to the internet. + +Integrations like Alexa will deliver messages to our cloud which we will forward to your local instance for processing. We just forward the response back to Alexa. This means that we do not have to store the state of your house in our cloud, we’re just the messenger! + +We are making the beta of the Home Assistant Cloud publicly available today. During the beta period the Home Assistant Cloud will be free to use. We are currently planning to run a beta till March 1, 2018 0:00 UTC. Once the beta ends, the Home Assistant Cloud will be part of our Community Support package which will run at $5 USD/month. + +By subscribing to the Community Support package you will show your support for the Home Assistant organization, its projects and its community. It will help fund development, cover our operating costs and gives you access to use Home Assistant Cloud. + +So if you ever felt like donating money to support the development of Home Assistant and Hass.io: sign up for the Home Assistant Cloud! + +### {% linkable_title Why not take donations? %} + +With donations you have to convince people to keep donating and it will be hard to plan around the amount of available money. The biggest concern is what do you do when there is not enough money. We could shut down the servers or again depend on the wallets of our developers. We could run Wikipedia style advertisements for donating, but those are even more annoying than running advertisements. + +## {% linkable_title Getting started %} + +Upgrade Home Assistant to 0.60 and enable the [`cloud`](/components/cloud/) and [`config`](/components/config/) components: + +```yaml +# Example configuration.yaml entry +cloud: +config: +``` + +Now restart Home Assistant and navigate to the configuration panel. It will offer a new cloud section. Here you can create an account and login. Once logged in, your instance will connect to the cloud. + +The next step is to configure Alexa. This can be done by enabling the Home Assistant skill for Alexa and link your Home Assistant cloud account. + +Once you’re done, ask Alexa to discover devices (“Alexa, discover devices”) and you are all set to control them: “Alexa, turn on <device name>”. + +See the [Cloud component configuration](/components/cloud/) to learn how to filter which devices get exposed to Alexa. + +## {% linkable_title FAQ %} + +_Last updated: December 26, 2017_ + +#### {% linkable_title I thought the Home Assistant crew didn't like the cloud? %} + +You are right, [we don't](https://home-assistant.io/blog/2016/01/19/perfect-home-automation/#your-system-should-run-at-home-not-in-the-cloud)! The Home Assistant Cloud is not an alternative to running your local Home Assistant instance. All control and automations are still running locally. + +Instead, the Home Assistant Cloud is an extension of your local instance. It allows to communicate with companies that force us to communicate via a public available cloud endpoint like Amazon Alexa and Google Assistant. + +Home Assistant Cloud is only used to route the messages to your local Home Assistant instance. All messages are processed locally. + +_(Some people have suggested we rename to Home Assistant Bridge to avoid this confusion)_ + +#### {% linkable_title Will Home Assistant and Hass.io remain open source? %} + +Yes. Yes. Yes! Home Assistant is the work of hundreds of developers all working together in creating something amazing. The only thing that will require a subscription is the optional cloud functionality. + +#### {% linkable_title Where is the source code for the Alexa skill? %} + +All messages are processed locally and so the Alexa skill code is part of the Home Assistant code. The Home Assistant Cloud only routes the messages to your local Home Assistant instance. This means that you can audit the source code to check all the things that the cloud can do: + + - [Module that processes incoming cloud messages](https://github.com/home-assistant/home-assistant/blob/dev/homeassistant/components/cloud/iot.py) + - [Alexa Smart Home v3 skill](https://github.com/home-assistant/home-assistant/blob/dev/homeassistant/components/alexa/smart_home.py) + +#### {% linkable_title What other features will come to the cloud? %} + +We have a lot of ideas! We are not going to make any promises but here are some things that we’re looking into: + +- Google Home / Google Assistant Smart Home skill +- Allow easy linking of other cloud services to Home Assistant. No more local juggling with OAuth flows. For example, link your Fitbit account and the Fitbit component will show up in Home Assistant. +- Encrypted backups of your Hass.io data +- Text to speech powered by AWS Polly +- Generic HTTP cloud endpoint for people to send messages to their local instance. This will allow people to build applications on top of the Home Assistant cloud. +- IFTTT integration +- Alexa shopping list integration + +#### {% linkable_title What countries are supported at launch? %} + +Only US is currently supported. The reason for this limitation is that we need to do extra steps and certifications for each country's Alexa skill. This is in progress but the timeline depends on Amazon. + +#### {% linkable_title How is the connection made to the cloud? %} + +The connection is made using a WebSocket connection over HTTPS. [See the source here](https://github.com/home-assistant/home-assistant/blob/dev/homeassistant/components/cloud/iot.py). + +#### {% linkable_title I think that the price is too high for what I get. %} + +The Home Assistant Cloud functionality is a perk for becoming a supporter of the Home Assistant project. As a supporter you will help fund development, cover our operating costs and gives you access to use Home Assistant Cloud. You are not paying to just maintain the cloud servers. + +The perks offered for being a supporter will also extend over time, as noted in [this answer](#what-other-features-will-come-to-the-cloud). + +#### {% linkable_title What will the Home Assistant organization do with the funds ? %} + +The plan is to hire developers to work fulltime on Home Assistant. We have grown a lot in the last 4 years and the work load is pushing the limits of what our core developers can do. Open source burn out is very common ([1], [2]) and we want to avoid this by moving most organization and release chores to a paid position. + +_For more background on these topics, check out [HASS Podcast 15](https://hasspodcast.io/ha015/)._ + +[1]: https://nolanlawson.com/2017/03/05/what-it-feels-like-to-be-an-open-source-maintainer/ +[2]: https://www.kennethreitz.org/essays/the-reality-of-developer-burnout diff --git a/source/_posts/2017-12-17-release-60.markdown b/source/_posts/2017-12-17-release-60.markdown new file mode 100644 index 00000000000..6f795df119c --- /dev/null +++ b/source/_posts/2017-12-17-release-60.markdown @@ -0,0 +1,408 @@ +--- +layout: post +title: "0.60: Beckhoff/TwinCAT, WebDav, Gearbest, iAlarm" +description: "Use Home Assistant for your production line or track prices and the stock market." +date: 2017-12-17 02:00:00 +date_formatted: "December 17, 2017" +author: Fabian Affolter +author_twitter: fabaff +comments: true +categories: Release-Notes +og_image: /images/blog/2017-12-0.60/components.png +--- + + + +The biggest change for 0.60 will be covered in a separate [blog post](/blog/2017/12/17/introducing-home-assistant-cloud/). Thus, we will keep it short here. Just one thing: This is the last release in 2017. We will be back to our bi-weekly release cycle in 2018. + +A big "Thank you" to all people who supported us to make this release possible. + +## {% linkable_title TwinCAT %} +With the brand-new [ADS (automation device specification)][ads docs] component by [@stlehmann] allows you to hook Home Assistant into this fieldbus independent interface which is often used between Beckhoff devices running with TwinCAT. + +## {% linkable_title WebDav calendar %} +Thanks to [@maxlaverse] Home Assistant support now [WebDav calendars][calendar.caldav docs]. + +## {% linkable_title Tracking prices %} +With the new [`gearbest` sensor][sensor.gearbest docs] there is now an additional sensor available to track the price of a product. + +## {% linkable_title Financial details %} +Yahoo! has discontinued their financial service. To fill this gap we have now the [`alpha_vantage` sensor][sensor.alpha_vantage docs] which is intruded in this release and allows you to monitor the stock market. + +## {% linkable_title New Platforms %} + +- Add iAlarm support ([@RyuzakiKK] - [#10878]) ([alarm_control_panel.ialarm docs]) (new-platform) +- Add Alpha Vantage sensor ([@fabaff] - [#10873]) ([sensor.alpha_vantage docs]) (new-platform) +- Add ADS component ([@stlehmann] - [#10142]) ([ads docs]) ([binary_sensor.ads docs]) ([light.ads docs]) ([sensor.ads docs]) ([switch.ads docs]) (new-platform) +- Gearbest sensor ([@HerrHofrat] - [#10556]) ([sensor.gearbest docs]) (new-platform) +- Add Ziggo Mediabox XL media_player ([@b10m] - [#10514]) ([media_player.ziggo_mediabox_xl docs]) (new-platform) +- Meraki AP Device tracker ([@masarliev] - [#10971]) ([device_tracker.meraki docs]) (new-platform) +- Added Vera scenes ([@alanfischer] - [#10424]) ([vera docs]) ([scene.vera docs]) (new-platform) +- Add support for Canary component and platforms ([@snjoetw] - [#10306]) ([canary docs]) ([camera.canary docs]) ([sensor.canary docs]) (new-platform) +- Add support for Logitech UE Smart Radios. ([@GreenTurtwig] - [#10077]) ([media_player.ue_smart_radio docs]) (new-platform) +- Added support for cover in tellstick ([@perfalk] - [#10858]) ([tellstick docs]) ([cover.tellstick docs]) (new-platform) +- Add a caldav calendar component ([@maxlaverse] - [#10842]) ([calendar.caldav docs]) (new-platform) +- Refactor hue to split bridge support from light platform ([@andreacampi] - [#10691]) ([hue docs]) ([light.hue docs]) (breaking change) (new-platform) + +## {% linkable_title Release 0.60.1 - January 6 %} + +- Fix async IO in Sesame lock component. ([@veleek] - [#11054]) ([lock.sesame docs]) +- Fix webdav calendar schema ([@maxlaverse] - [#11185]) ([calendar.caldav docs]) +- homematic: add username and password to interface config schema ([@jannau] - [#11214]) ([homematic docs]) +- Fix webostv select source ([@OddBloke] - [#11227]) ([media_player.webostv docs]) +- Fix detection of if a negative node is in use ([@OverloadUT] - [#11255]) ([binary_sensor.isy994 docs]) +- Bugfix homematic available modus ([@pvizeli] - [#11256]) ([homematic docs]) +- Support multiple Hue bridges with lights of the same id ([@andreacampi] - [#11259]) ([light.hue docs]) +- Fix inverted sensors on the concord232 binary sensor component ([@CTLS] - [#11261]) ([binary_sensor.concord232 docs]) +- Fix handling zero values for state_on/state_off ([@ziotibia81] - [#11264]) ([switch.modbus docs]) +- Fix allday events in custom_calendars ([@maxlaverse] - [#11272]) ([calendar.caldav docs]) +- Fix unpredictable entity names in concord232 binary_sensor ([@rwa] - [#11292]) ([binary_sensor.concord232 docs]) +- Fix leak sensors always showing Unknown until Wet ([@OverloadUT] - [#11313]) ([binary_sensor.isy994 docs]) +- Don't block on sevice call for alexa ([@pvizeli] - [#11358]) ([alexa.smart_home docs]) +- iOS 10 should be served javascript_version:es5 ([@mnoorenberghe] - [#11387]) + +## {% linkable_title If you need help... %} + +...don't hesitate to use our very active [forums](https://community.home-assistant.io/) or join us for a little [chat](https://discord.gg/c5DvZ4e). The release notes have comments enabled but it's preferred if you use the former communication channels. Thanks. + +## {% linkable_title Reporting Issues %} + +Experiencing issues introduced by this release? Please report them in our [issue tracker](https://github.com/home-assistant/home-assistant/issues). Make sure to fill in all fields of the issue template. + + + +## {% linkable_title Breaking Changes %} + +- Update snips to listen on new mqtt topic and utilize rawValue ([@tschmidty69] - [#11020]) ([snips docs]) (breaking change) +- Refactor hue to split bridge support from light platform ([@andreacampi] - [#10691]) ([hue docs]) ([light.hue docs]) (breaking change) (new-platform) +- Use luftdaten module ([@fabaff] - [#10970]) ([sensor.luftdaten docs]) (breaking change) +- ISY994 sensor improvements ([@OverloadUT] - [#10805]) ([isy994 docs]) ([binary_sensor.isy994 docs]) (breaking change) +- Homematic next ([@pvizeli] - [#11156]) ([homematic docs]) (breaking change) + +## {% linkable_title All changes %} + +- Update ecobee version to fix stack-trace issue ([@PhracturedBlue] - [#10894]) ([ecobee docs]) +- Pybotvac multi ([@raymccarthy] - [#10843]) ([neato docs]) +- More declarative timeout syntax for manual alarm control panel. ([@bonzini] - [#10738]) ([alarm_control_panel.manual docs]) ([alarm_control_panel.manual_mqtt docs]) +- Unpacking RESTful sensor JSON results into attributes. ([@nickovs] - [#10753]) ([sensor.rest docs]) +- Bump dev to 0.60.0.dev0 ([@fabaff] - [#10912]) +- Update eliqonline.py ([@molobrakos] - [#10914]) ([sensor.eliqonline docs]) +- Add iAlarm support ([@RyuzakiKK] - [#10878]) ([alarm_control_panel.ialarm docs]) (new-platform) +- Correction of Samsung Power OFF behaviour ([@RiRomain] - [#10907]) ([media_player.samsungtv docs]) +- Add Alpha Vantage sensor ([@fabaff] - [#10873]) ([sensor.alpha_vantage docs]) (new-platform) +- Don't repeat getting receiver name on each update / pushed to denonavr 0.5.5 ([@scarface-4711] - [#10915]) ([media_player.denonavr docs]) +- Add Min and Event Count Metrics To Prometheus ([@bah2830] - [#10530]) ([prometheus docs]) +- Update coveragerc ([@balloob] - [#10931]) +- Report availability of TP-Link smart sockets ([@DanNixon] - [#10933]) ([switch.tplink docs]) +- Set percent unit for battery level so that history displays properly; edited variable name for consistency ([@nbougues] - [#10932]) ([sensor.tesla docs]) +- Export climate status and target temperature to Prometheus ([@hudashot] - [#10919]) ([prometheus docs]) +- Tado ignore invalid devices ([@dasos] - [#10927]) ([climate.tado docs]) +- don't ignore voltage data if sensor data changed ([@PaulAnnekov] - [#10925]) ([xiaomi_aqara docs]) +- Add ADS component ([@stlehmann] - [#10142]) ([ads docs]) ([binary_sensor.ads docs]) ([light.ads docs]) ([sensor.ads docs]) ([switch.ads docs]) (new-platform) +- Gearbest sensor ([@HerrHofrat] - [#10556]) ([sensor.gearbest docs]) (new-platform) +- Add Ziggo Mediabox XL media_player ([@b10m] - [#10514]) ([media_player.ziggo_mediabox_xl docs]) (new-platform) +- Generic thermostat initial_operation_mode ([@ziotibia81] - [#10690]) ([climate.generic_thermostat docs]) +- Use new build path for dev translations ([@armills] - [#10937]) +- Add option to set default hide if away for new devices ([@masarliev] - [#10762]) ([device_tracker docs]) +- Allow disabling the LEDs on TP-Link smart plugs ([@DanNixon] - [#10980]) ([switch.tplink docs]) +- Meraki AP Device tracker ([@masarliev] - [#10971]) ([device_tracker.meraki docs]) (new-platform) +- Update tradfri.py ([@pvizeli] - [#10991]) ([light.tradfri docs]) +- webostv: Ensure source exists before use ([@OddBloke] - [#10959]) ([media_player.webostv docs]) +- Ensure Docker script files uses LF line endings to support Docker for Windows. ([@R1chardTM] - [#10067]) +- Added Vera scenes ([@alanfischer] - [#10424]) ([vera docs]) ([scene.vera docs]) (new-platform) +- Fix Egardia alarm status shown as unknown after restart ([@jeroenterheerdt] - [#11010]) ([alarm_control_panel.egardia docs]) +- Handle OSError when forcibly turning off media_player.samsungtv ([@lwis] - [#10997]) ([media_player.samsungtv docs]) +- Shuffle support in Sonos ([@mar-schmidt] - [#10875]) ([media_player.sonos docs]) +- Add support for Canary component and platforms ([@snjoetw] - [#10306]) ([canary docs]) ([camera.canary docs]) ([sensor.canary docs]) (new-platform) +- Ignore Sonos players with unknown hostnames ([@amelchio] - [#11013]) +- Support LIFX Mini products ([@amelchio] - [#10996]) ([light.lifx docs]) +- Update snips to listen on new mqtt topic and utilize rawValue ([@tschmidty69] - [#11020]) ([snips docs]) (breaking change) +- Change default js version to auto ([@andrey-git] - [#10999]) +- Serialize mochad requests ([@mtreinish] - [#11029]) ([mochad docs]) ([light.mochad docs]) ([switch.mochad docs]) +- In dev mode expose only relevant sources ([@andrey-git] - [#11026]) +- Added force_update for REST sensor ([@foxel] - [#11016]) ([sensor.miflora docs]) ([sensor.mqtt docs]) ([sensor.rest docs]) +- Add support for Logitech UE Smart Radios. ([@GreenTurtwig] - [#10077]) ([media_player.ue_smart_radio docs]) (new-platform) +- Make notify.html5 depend on config ([@balloob] - [#11052]) ([notify.html5 docs]) +- This change fixes the error `OSError: [WinError 193]` on Windows debuggers (i.e. PyCharm) ([@tringler] - [#11034]) +- Added support for cover in tellstick ([@perfalk] - [#10858]) ([tellstick docs]) ([cover.tellstick docs]) (new-platform) +- Add a caldav calendar component ([@maxlaverse] - [#10842]) ([calendar.caldav docs]) (new-platform) +- Add GPS coords to meraki ([@addelovein] - [#10998]) ([device_tracker.meraki docs]) +- Refactor hue to split bridge support from light platform ([@andreacampi] - [#10691]) ([hue docs]) ([light.hue docs]) (breaking change) (new-platform) +- add custom bypass status to total connect ([@uchagani] - [#11042]) ([alarm_control_panel.totalconnect docs]) +- Volvo on call: Optional use of Scandinavian miles. Also add average fuel consumption property ([@molobrakos] - [#11051]) ([volvooncall docs]) ([sensor.volvooncall docs]) +- Allow tradfri to read the available state of the device ([@pvizeli] - [#11056]) ([light.tradfri docs]) +- Upgrade aiohttp to 2.3.6 ([@fabaff] - [#11079]) +- Upgrade yarl to 0.16.0 ([@fabaff] - [#11078]) +- Upgrade psutil to 5.4.2 ([@fabaff] - [#11083]) ([sensor.systemmonitor docs]) +- Upgrade youtube_dl to 2017.12.10 ([@fabaff] - [#11080]) ([media_extractor docs]) +- Upgrade shodan to 1.7.7 ([@fabaff] - [#11084]) ([sensor.shodan docs]) +- Update tellcore-net to 0.4 ([@pvizeli] - [#11087]) ([tellstick docs]) +- Bump pymusiccast to version 0.1.6 ([@jalmeroth] - [#11091]) ([media_player.yamaha_musiccast docs]) +- Use luftdaten module ([@fabaff] - [#10970]) ([sensor.luftdaten docs]) (breaking change) +- Bump pyatv to 0.3.9 ([@postlund] - [#11104]) ([apple_tv docs]) +- Report availability for TP-Link smart bulbs ([@DanNixon] - [#10976]) ([light.tplink docs]) +- Fix incorrect comment. ([@emosenkis] - [#11111]) +- Update Warrant ([@balloob] - [#11101]) ([cloud docs]) +- Fixed typo in automation.py ([@ryanm101] - [#11116]) ([config.automation docs]) +- Add media position properties ([@pschmitt] - [#10076]) ([media_player.liveboxplaytv docs]) +- update pyripple ([@nkgilley] - [#11122]) ([sensor.ripple docs]) +- Skip HASS emulated Hue bridges from detection. ([@andreacampi] - [#11128]) ([hue docs]) +- Always consume the no_throttle keyword argument. ([@andreacampi] - [#11126]) +- Add problem device class ([@armills] - [#11130]) ([binary_sensor docs]) +- set default utc offset to 0 ([@pollett] - [#11114]) ([sensor.efergy docs]) +- Allow using more than one keyboard remote ([@BryanJacobs] - [#11061]) ([keyboard_remote docs]) +- ISY994 sensor improvements ([@OverloadUT] - [#10805]) ([isy994 docs]) ([binary_sensor.isy994 docs]) (breaking change) +- Disable html5 notify dependency ([@balloob] - [#11135]) ([notify.html5 docs]) +- Upgrade Homematic ([@danielperna84] - [#11149]) ([homematic docs]) +- Fix X10 commands for mochad light turn on ([@mtreinish] - [#11146]) ([light.mochad docs]) +- Homematic next ([@pvizeli] - [#11156]) ([homematic docs]) (breaking change) +- Resolve hostnames ([@pvizeli] - [#11160]) ([homematic docs]) +- Perform logbook filtering on the worker thread ([@armills] - [#11161]) ([logbook docs]) +- Don't connect to cloud if subscription expired ([@balloob] - [#11163]) ([cloud docs]) ([cloud.const docs]) +- Add install mode to homematic ([@pvizeli] - [#11164]) ([homematic docs]) +- convert alarmdecoder interface from async to sync ([@PhracturedBlue] - [#11168]) ([alarmdecoder docs]) +- Remove logging ([@cmsimike] - [#11173]) ([sensor.octoprint docs]) +- Revbump to SoCo 0.13 and add support for Night Sound and Speech Enhancement. ([@rbdixon] - [#10765]) ([media_player.sonos docs]) + +[#10067]: https://github.com/home-assistant/home-assistant/pull/10067 +[#10076]: https://github.com/home-assistant/home-assistant/pull/10076 +[#10077]: https://github.com/home-assistant/home-assistant/pull/10077 +[#10142]: https://github.com/home-assistant/home-assistant/pull/10142 +[#10306]: https://github.com/home-assistant/home-assistant/pull/10306 +[#10424]: https://github.com/home-assistant/home-assistant/pull/10424 +[#10514]: https://github.com/home-assistant/home-assistant/pull/10514 +[#10530]: https://github.com/home-assistant/home-assistant/pull/10530 +[#10556]: https://github.com/home-assistant/home-assistant/pull/10556 +[#10690]: https://github.com/home-assistant/home-assistant/pull/10690 +[#10691]: https://github.com/home-assistant/home-assistant/pull/10691 +[#10738]: https://github.com/home-assistant/home-assistant/pull/10738 +[#10753]: https://github.com/home-assistant/home-assistant/pull/10753 +[#10762]: https://github.com/home-assistant/home-assistant/pull/10762 +[#10765]: https://github.com/home-assistant/home-assistant/pull/10765 +[#10805]: https://github.com/home-assistant/home-assistant/pull/10805 +[#10842]: https://github.com/home-assistant/home-assistant/pull/10842 +[#10843]: https://github.com/home-assistant/home-assistant/pull/10843 +[#10858]: https://github.com/home-assistant/home-assistant/pull/10858 +[#10873]: https://github.com/home-assistant/home-assistant/pull/10873 +[#10875]: https://github.com/home-assistant/home-assistant/pull/10875 +[#10878]: https://github.com/home-assistant/home-assistant/pull/10878 +[#10894]: https://github.com/home-assistant/home-assistant/pull/10894 +[#10907]: https://github.com/home-assistant/home-assistant/pull/10907 +[#10912]: https://github.com/home-assistant/home-assistant/pull/10912 +[#10914]: https://github.com/home-assistant/home-assistant/pull/10914 +[#10915]: https://github.com/home-assistant/home-assistant/pull/10915 +[#10919]: https://github.com/home-assistant/home-assistant/pull/10919 +[#10925]: https://github.com/home-assistant/home-assistant/pull/10925 +[#10927]: https://github.com/home-assistant/home-assistant/pull/10927 +[#10931]: https://github.com/home-assistant/home-assistant/pull/10931 +[#10932]: https://github.com/home-assistant/home-assistant/pull/10932 +[#10933]: https://github.com/home-assistant/home-assistant/pull/10933 +[#10937]: https://github.com/home-assistant/home-assistant/pull/10937 +[#10959]: https://github.com/home-assistant/home-assistant/pull/10959 +[#10970]: https://github.com/home-assistant/home-assistant/pull/10970 +[#10971]: https://github.com/home-assistant/home-assistant/pull/10971 +[#10976]: https://github.com/home-assistant/home-assistant/pull/10976 +[#10980]: https://github.com/home-assistant/home-assistant/pull/10980 +[#10991]: https://github.com/home-assistant/home-assistant/pull/10991 +[#10996]: https://github.com/home-assistant/home-assistant/pull/10996 +[#10997]: https://github.com/home-assistant/home-assistant/pull/10997 +[#10998]: https://github.com/home-assistant/home-assistant/pull/10998 +[#10999]: https://github.com/home-assistant/home-assistant/pull/10999 +[#11010]: https://github.com/home-assistant/home-assistant/pull/11010 +[#11013]: https://github.com/home-assistant/home-assistant/pull/11013 +[#11016]: https://github.com/home-assistant/home-assistant/pull/11016 +[#11020]: https://github.com/home-assistant/home-assistant/pull/11020 +[#11026]: https://github.com/home-assistant/home-assistant/pull/11026 +[#11029]: https://github.com/home-assistant/home-assistant/pull/11029 +[#11034]: https://github.com/home-assistant/home-assistant/pull/11034 +[#11042]: https://github.com/home-assistant/home-assistant/pull/11042 +[#11051]: https://github.com/home-assistant/home-assistant/pull/11051 +[#11052]: https://github.com/home-assistant/home-assistant/pull/11052 +[#11056]: https://github.com/home-assistant/home-assistant/pull/11056 +[#11061]: https://github.com/home-assistant/home-assistant/pull/11061 +[#11078]: https://github.com/home-assistant/home-assistant/pull/11078 +[#11079]: https://github.com/home-assistant/home-assistant/pull/11079 +[#11080]: https://github.com/home-assistant/home-assistant/pull/11080 +[#11083]: https://github.com/home-assistant/home-assistant/pull/11083 +[#11084]: https://github.com/home-assistant/home-assistant/pull/11084 +[#11087]: https://github.com/home-assistant/home-assistant/pull/11087 +[#11091]: https://github.com/home-assistant/home-assistant/pull/11091 +[#11101]: https://github.com/home-assistant/home-assistant/pull/11101 +[#11104]: https://github.com/home-assistant/home-assistant/pull/11104 +[#11111]: https://github.com/home-assistant/home-assistant/pull/11111 +[#11114]: https://github.com/home-assistant/home-assistant/pull/11114 +[#11116]: https://github.com/home-assistant/home-assistant/pull/11116 +[#11122]: https://github.com/home-assistant/home-assistant/pull/11122 +[#11126]: https://github.com/home-assistant/home-assistant/pull/11126 +[#11128]: https://github.com/home-assistant/home-assistant/pull/11128 +[#11130]: https://github.com/home-assistant/home-assistant/pull/11130 +[#11135]: https://github.com/home-assistant/home-assistant/pull/11135 +[#11146]: https://github.com/home-assistant/home-assistant/pull/11146 +[#11149]: https://github.com/home-assistant/home-assistant/pull/11149 +[#11156]: https://github.com/home-assistant/home-assistant/pull/11156 +[#11160]: https://github.com/home-assistant/home-assistant/pull/11160 +[#11161]: https://github.com/home-assistant/home-assistant/pull/11161 +[#11163]: https://github.com/home-assistant/home-assistant/pull/11163 +[#11164]: https://github.com/home-assistant/home-assistant/pull/11164 +[#11168]: https://github.com/home-assistant/home-assistant/pull/11168 +[#11173]: https://github.com/home-assistant/home-assistant/pull/11173 +[@BryanJacobs]: https://github.com/BryanJacobs +[@DanNixon]: https://github.com/DanNixon +[@GreenTurtwig]: https://github.com/GreenTurtwig +[@HerrHofrat]: https://github.com/HerrHofrat +[@OddBloke]: https://github.com/OddBloke +[@OverloadUT]: https://github.com/OverloadUT +[@PaulAnnekov]: https://github.com/PaulAnnekov +[@PhracturedBlue]: https://github.com/PhracturedBlue +[@R1chardTM]: https://github.com/R1chardTM +[@RiRomain]: https://github.com/RiRomain +[@RyuzakiKK]: https://github.com/RyuzakiKK +[@addelovein]: https://github.com/addelovein +[@alanfischer]: https://github.com/alanfischer +[@amelchio]: https://github.com/amelchio +[@andreacampi]: https://github.com/andreacampi +[@andrey-git]: https://github.com/andrey-git +[@armills]: https://github.com/armills +[@b10m]: https://github.com/b10m +[@bah2830]: https://github.com/bah2830 +[@balloob]: https://github.com/balloob +[@bonzini]: https://github.com/bonzini +[@cmsimike]: https://github.com/cmsimike +[@danielperna84]: https://github.com/danielperna84 +[@dasos]: https://github.com/dasos +[@emosenkis]: https://github.com/emosenkis +[@fabaff]: https://github.com/fabaff +[@foxel]: https://github.com/foxel +[@hudashot]: https://github.com/hudashot +[@jalmeroth]: https://github.com/jalmeroth +[@jeroenterheerdt]: https://github.com/jeroenterheerdt +[@lwis]: https://github.com/lwis +[@mar-schmidt]: https://github.com/mar-schmidt +[@masarliev]: https://github.com/masarliev +[@maxlaverse]: https://github.com/maxlaverse +[@molobrakos]: https://github.com/molobrakos +[@mtreinish]: https://github.com/mtreinish +[@nbougues]: https://github.com/nbougues +[@nickovs]: https://github.com/nickovs +[@nkgilley]: https://github.com/nkgilley +[@perfalk]: https://github.com/perfalk +[@pollett]: https://github.com/pollett +[@postlund]: https://github.com/postlund +[@pschmitt]: https://github.com/pschmitt +[@pvizeli]: https://github.com/pvizeli +[@raymccarthy]: https://github.com/raymccarthy +[@rbdixon]: https://github.com/rbdixon +[@ryanm101]: https://github.com/ryanm101 +[@scarface-4711]: https://github.com/scarface-4711 +[@snjoetw]: https://github.com/snjoetw +[@stlehmann]: https://github.com/stlehmann +[@tringler]: https://github.com/tringler +[@tschmidty69]: https://github.com/tschmidty69 +[@uchagani]: https://github.com/uchagani +[@ziotibia81]: https://github.com/ziotibia81 +[ads docs]: https://home-assistant.io/components/ads/ +[alarm_control_panel.egardia docs]: https://home-assistant.io/components/alarm_control_panel.egardia/ +[alarm_control_panel.ialarm docs]: https://home-assistant.io/components/alarm_control_panel.ialarm/ +[alarm_control_panel.manual docs]: https://home-assistant.io/components/alarm_control_panel.manual/ +[alarm_control_panel.manual_mqtt docs]: https://home-assistant.io/components/alarm_control_panel.manual_mqtt/ +[alarm_control_panel.totalconnect docs]: https://home-assistant.io/components/alarm_control_panel.totalconnect/ +[alarmdecoder docs]: https://home-assistant.io/components/alarmdecoder/ +[apple_tv docs]: https://home-assistant.io/components/apple_tv/ +[binary_sensor docs]: https://home-assistant.io/components/binary_sensor/ +[binary_sensor.ads docs]: https://home-assistant.io/components/binary_sensor.ads/ +[binary_sensor.isy994 docs]: https://home-assistant.io/components/binary_sensor.isy994/ +[calendar.caldav docs]: https://home-assistant.io/components/calendar.caldav/ +[camera.canary docs]: https://home-assistant.io/components/camera.canary/ +[canary docs]: https://home-assistant.io/components/canary/ +[climate.generic_thermostat docs]: https://home-assistant.io/components/climate.generic_thermostat/ +[climate.tado docs]: https://home-assistant.io/components/climate.tado/ +[cloud docs]: https://home-assistant.io/components/cloud/ +[cloud.const docs]: https://home-assistant.io/components/cloud.const/ +[config.automation docs]: https://home-assistant.io/components/config.automation/ +[cover.tellstick docs]: https://home-assistant.io/components/cover.tellstick/ +[device_tracker docs]: https://home-assistant.io/components/device_tracker/ +[device_tracker.meraki docs]: https://home-assistant.io/components/device_tracker.meraki/ +[ecobee docs]: https://home-assistant.io/components/ecobee/ +[homematic docs]: https://home-assistant.io/components/homematic/ +[hue docs]: https://home-assistant.io/components/hue/ +[isy994 docs]: https://home-assistant.io/components/isy994/ +[keyboard_remote docs]: https://home-assistant.io/components/keyboard_remote/ +[light.ads docs]: https://home-assistant.io/components/light.ads/ +[light.hue docs]: https://home-assistant.io/components/light.hue/ +[light.lifx docs]: https://home-assistant.io/components/light.lifx/ +[light.mochad docs]: https://home-assistant.io/components/light.mochad/ +[light.tplink docs]: https://home-assistant.io/components/light.tplink/ +[light.tradfri docs]: https://home-assistant.io/components/light.tradfri/ +[logbook docs]: https://home-assistant.io/components/logbook/ +[media_extractor docs]: https://home-assistant.io/components/media_extractor/ +[media_player.denonavr docs]: https://home-assistant.io/components/media_player.denonavr/ +[media_player.liveboxplaytv docs]: https://home-assistant.io/components/media_player.liveboxplaytv/ +[media_player.samsungtv docs]: https://home-assistant.io/components/media_player.samsungtv/ +[media_player.sonos docs]: https://home-assistant.io/components/media_player.sonos/ +[media_player.ue_smart_radio docs]: https://home-assistant.io/components/media_player.ue_smart_radio/ +[media_player.webostv docs]: https://home-assistant.io/components/media_player.webostv/ +[media_player.yamaha_musiccast docs]: https://home-assistant.io/components/media_player.yamaha_musiccast/ +[media_player.ziggo_mediabox_xl docs]: https://home-assistant.io/components/media_player.ziggo_mediabox_xl/ +[mochad docs]: https://home-assistant.io/components/mochad/ +[neato docs]: https://home-assistant.io/components/neato/ +[notify.html5 docs]: https://home-assistant.io/components/notify.html5/ +[prometheus docs]: https://home-assistant.io/components/prometheus/ +[scene.vera docs]: https://home-assistant.io/components/scene.vera/ +[sensor.ads docs]: https://home-assistant.io/components/sensor.ads/ +[sensor.alpha_vantage docs]: https://home-assistant.io/components/sensor.alpha_vantage/ +[sensor.canary docs]: https://home-assistant.io/components/sensor.canary/ +[sensor.efergy docs]: https://home-assistant.io/components/sensor.efergy/ +[sensor.eliqonline docs]: https://home-assistant.io/components/sensor.eliqonline/ +[sensor.gearbest docs]: https://home-assistant.io/components/sensor.gearbest/ +[sensor.luftdaten docs]: https://home-assistant.io/components/sensor.luftdaten/ +[sensor.miflora docs]: https://home-assistant.io/components/sensor.miflora/ +[sensor.mqtt docs]: https://home-assistant.io/components/sensor.mqtt/ +[sensor.octoprint docs]: https://home-assistant.io/components/sensor.octoprint/ +[sensor.rest docs]: https://home-assistant.io/components/sensor.rest/ +[sensor.ripple docs]: https://home-assistant.io/components/sensor.ripple/ +[sensor.shodan docs]: https://home-assistant.io/components/sensor.shodan/ +[sensor.systemmonitor docs]: https://home-assistant.io/components/sensor.systemmonitor/ +[sensor.tesla docs]: https://home-assistant.io/components/sensor.tesla/ +[sensor.volvooncall docs]: https://home-assistant.io/components/sensor.volvooncall/ +[snips docs]: https://home-assistant.io/components/snips/ +[switch.ads docs]: https://home-assistant.io/components/switch.ads/ +[switch.mochad docs]: https://home-assistant.io/components/switch.mochad/ +[switch.tplink docs]: https://home-assistant.io/components/switch.tplink/ +[tellstick docs]: https://home-assistant.io/components/tellstick/ +[vera docs]: https://home-assistant.io/components/vera/ +[volvooncall docs]: https://home-assistant.io/components/volvooncall/ +[xiaomi_aqara docs]: https://home-assistant.io/components/xiaomi_aqara/ +[#11054]: https://github.com/home-assistant/home-assistant/pull/11054 +[#11185]: https://github.com/home-assistant/home-assistant/pull/11185 +[#11214]: https://github.com/home-assistant/home-assistant/pull/11214 +[#11227]: https://github.com/home-assistant/home-assistant/pull/11227 +[#11255]: https://github.com/home-assistant/home-assistant/pull/11255 +[#11256]: https://github.com/home-assistant/home-assistant/pull/11256 +[#11259]: https://github.com/home-assistant/home-assistant/pull/11259 +[#11261]: https://github.com/home-assistant/home-assistant/pull/11261 +[#11264]: https://github.com/home-assistant/home-assistant/pull/11264 +[#11272]: https://github.com/home-assistant/home-assistant/pull/11272 +[#11292]: https://github.com/home-assistant/home-assistant/pull/11292 +[#11313]: https://github.com/home-assistant/home-assistant/pull/11313 +[#11358]: https://github.com/home-assistant/home-assistant/pull/11358 +[#11387]: https://github.com/home-assistant/home-assistant/pull/11387 +[@CTLS]: https://github.com/CTLS +[@OddBloke]: https://github.com/OddBloke +[@OverloadUT]: https://github.com/OverloadUT +[@andreacampi]: https://github.com/andreacampi +[@jannau]: https://github.com/jannau +[@maxlaverse]: https://github.com/maxlaverse +[@mnoorenberghe]: https://github.com/mnoorenberghe +[@pvizeli]: https://github.com/pvizeli +[@rwa]: https://github.com/rwa +[@veleek]: https://github.com/veleek +[@ziotibia81]: https://github.com/ziotibia81 +[alexa.smart_home docs]: https://home-assistant.io/components/alexa.smart_home/ +[binary_sensor.concord232 docs]: https://home-assistant.io/components/binary_sensor.concord232/ +[binary_sensor.isy994 docs]: https://home-assistant.io/components/binary_sensor.isy994/ +[calendar.caldav docs]: https://home-assistant.io/components/calendar.caldav/ +[homematic docs]: https://home-assistant.io/components/homematic/ +[light.hue docs]: https://home-assistant.io/components/light.hue/ +[lock.sesame docs]: https://home-assistant.io/components/lock.sesame/ +[media_player.webostv docs]: https://home-assistant.io/components/media_player.webostv/ +[switch.modbus docs]: https://home-assistant.io/components/switch.modbus/ diff --git a/source/_posts/2017-12-28-thank-you.markdown b/source/_posts/2017-12-28-thank-you.markdown new file mode 100644 index 00000000000..f5632f7d6fe --- /dev/null +++ b/source/_posts/2017-12-28-thank-you.markdown @@ -0,0 +1,44 @@ +--- +layout: post +title: "Thank You" +description: "Thanks to all our contributors, dependencies and companies that help make Home Assistant awesome." +date: 2017-12-28 22:00:00 UTC +date_formatted: "December 28, 2017" +author: Fabian affolter +author_twitter: fabaff +comments: true +categories: Community +og_image: +--- + +2017 is almost over and this means it's time to do a little recap of our 2017. This was a great year for Home Assistant. Again, we were able to stick to our bi-weekly release cycle. There were 25 releases over the year and each release included the work of around 60 contributors. + +We got 10.000 stars on [GitHub], reached 10.000 commits in the main repo (over 4300 were made in 2017), got a [Thomas-Krenn award], participated in [Hacktoberfest], we have now almost 1000 integrations (the exact number is 938), we [moved to Discord] and we are up to over 2 million pageviews per month on our forum. Beside that we announced the [Home Assistant cloud] and have regular [Home Assistant Podcasts]. + +We also do not want to forget to mention [Hass.io] and all the great Hass.io add-ons. + +Uff, what a year...Thank you, dear community for being so helpful, supportive and awesome 🙇. + +A very big thanks goes out to the developers of the Python language and all the open source libraries and tools that Home Assistant depends on. You are the foundation for our success and all of you can be proud of yourself. + +We would also like to thanks all the companies that offer their services for free to open source projects. Without these we would not be able to operate at our speed or scale. Thank you [GitHub], [TravisCI], [CloudFlare], [Discord] and [Discourse]! + +Some of us are taking a break and spending some quality time with family and loved ones. + +Stay tuned for more Home Assistant awesomeness in 2018. We will keep the pace but first: Happy New Year! + +-- Home Assistant Organization + +[CloudFlare]: https://CloudFlare.com +[Discord]: https://discordapp.com +[Discourse]: https://Discourse.com +[forum]: https://community.home-assistant.io +[GitHub]: https://GitHub.com +[Hacktoberfest]: /blog/2017/11/04/release-57/#hacktoberfest +[Hass.io]: https://home-assistant.io/hassio/ +[Home Assistant cloud]: /blog/2017/12/17/introducing-home-assistant-cloud/ +[Home Assistant Podcasts]: https://hasspodcast.io/ +[moved to Discord]: /blog/2017/07/03/home-assistant-is-moving-to-discord/ +[Thomas-Krenn award]: /blog/2017/04/01/thomas-krenn-award/ +[TravisCI]: https://Travis-ci.org + diff --git a/source/_posts/2018-01-14-release-61.markdown b/source/_posts/2018-01-14-release-61.markdown new file mode 100644 index 00000000000..f83e933ee79 --- /dev/null +++ b/source/_posts/2018-01-14-release-61.markdown @@ -0,0 +1,797 @@ +--- +layout: post +title: "0.61: Coinbase, Discogs, iGlo, Sochain" +description: "New crypto currency sensors and other new stuff including breaking changes." +date: 2018-01-14 18:00:00 +date_formatted: "January 14, 2018" +author: Fabian Affolter +author_twitter: fabaff +comments: true +categories: Release-Notes +og_image: /images/blog/2018-01-0.61/components.png +--- + + + +Almost a 100 contributors to this release 🎉 That's what you get when you skip a release. It's a little late but "Happy New Year" and welcome to 0.61 the first release 2018. + +This release contain some breaking changes. Please make sure that you check the section below if you are running into trouble. + +## {% linkable_title Assistant configs %} + +We made a mistake in the foundation of both the Google Assistant and Alexa integrations: they were storing their config inside customize. This is not the right place and we moved them to be under the components itself. See the breaking changes section on how to migrate. + +## {% linkable_title Hass.io updates %} + +[@pvizeli] has made it easier to create and restore snapshots for Hass.io by calling the new services. This way it will be easy to automate the creation of a snapshot at night. The updater has also been fixed and will now report on new versions of Hass.io that are available. + +## {% linkable_title Improved loading speed %} + +[@amelchio] has made startup of Home Assistant _even_ faster. All service descriptions are now loaded only when needed by the frontend instead of during startup. This did mean that we had to enforce our service convention. We found a few platforms that didn't follow this and they have been updated: + +```text +todoist.new_task -> calendar.todoist_new_task + +snapcast.snapcast_snapshot -> media_player.snapcast_snapshot +snapcast.snapcast_restore -> media_player.snapcast_restore + +mopar.remote_command -> sensor.mopar_remote_command + +broadlink.learn_command_192_168_0_107 -> switch.broadlink_learn_command_192_168_0_107 +broadlink.send_packet_192_168_0_107 -> switch.broadlink_send_packet_192_168_0_107 +``` + +## {% linkable_title New Platforms %} + +- Add Discogs Sensor platform ([@thibmaek] - [#10957]) ([sensor.discogs docs]) (new-platform) +- Greenwave Reality (TCP Connected) Lighting Component ([@dfiel] - [#11282]) ([light.greenwave docs]) (new-platform) +- Added rainsensor ([@jbarrancos] - [#11023]) ([rainbird docs]) ([sensor.rainbird docs]) ([switch.rainbird docs]) (new-platform) +- Sochain cryptocurrency sensor ([@Klathmon] - [#11335]) ([sensor.sochain docs]) (new-platform) +- Support for EcoNet water heaters ([@w1ll1am23] - [#11260]) ([climate.econet docs]) (new-platform) +- Add deCONZ component ([@Kane610] - [#10321]) ([deconz docs]) ([binary_sensor.deconz docs]) ([light.deconz docs]) ([sensor.deconz docs]) (new-platform) +- Added new climate component from Daikin ([@rofrantz] - [#10983]) ([climate.daikin docs]) (new-platform) +- Add Touchline climate platform ([@abondoe] - [#10547]) ([climate.touchline docs]) (new-platform) +- Add new iGlo component ([@jesserockz] - [#11171]) ([light.iglo docs]) (new-platform) +- Add Dark Sky weather component ([@DanNixon] - [#11435]) ([weather.darksky docs]) (new-platform) +- Coinbase.com sensor platform ([@nkgilley] - [#11036]) ([coinbase docs]) ([sensor.coinbase docs]) (new-platform) + +## {% linkable_title Release 0.61.1 - January 16 %} + +- Fix zha color probe ([@rcloran] - [#11670]) ([zha docs]) ([light.zha docs]) +- Move several local services to their right domain ([@amelchio] - [#11677]) ([calendar.todoist docs]) ([media_player.snapcast docs]) ([media_player.soundtouch docs]) ([sensor.mopar docs]) ([switch.broadlink docs]) ([switch.scsgate docs]) (breaking change) +- Rfxtrx fix ([@danielhiversen] - [#11678]) ([rfxtrx docs]) ([binary_sensor.rfxtrx docs]) +- History order bugfix and opt-in option ([@rwa] - [#11686]) ([history docs]) +- Fix purge with MariaDB / MySQL ([@tinloaf] - [#11713]) + +## {% linkable_title If you need help... %} + +...don't hesitate to use our very active [forums](https://community.home-assistant.io/) or join us for a little [chat](https://discord.gg/c5DvZ4e). The release notes have comments enabled but it's preferred if you use the former communication channels. Thanks. + +## {% linkable_title Reporting Issues %} + +Experiencing issues introduced by this release? Please report them in our [issue tracker](https://github.com/home-assistant/home-assistant/issues). Make sure to fill in all fields of the issue template. + + + +## {% linkable_title Breaking Changes %} + +- Extend Threshold binary sensor to support ranges. This means that you can now set `up` and `lower`. ([@DanNixon] - [#11110]) ([binary_sensor.threshold docs]) (breaking change) +- The Steam game platform contains changes: + - `game` attribute no longer set in `device_state_attributes` if no game is currently being played as the string "None" is no longer passed if no current game is being played, instead the `game` attribute is not present. + - States now use lower snake case. + - The "Play" and "Trade" states has been renamed to "looking_to_play" and "looking_to_trade". + ([@frwickst] - [#11182]) ([sensor.steam_online docs]) (breaking change) +- The [`tile`][device_tracker.tile docs] platform now shows only active Tiles by default; to show all Tiles, including expired/inactive ones, `show_inactive` must be `True`. The following state attributes have been removed: `last_seen` and `last_updated`. ([@bachya] - [#11172]) ([device_tracker.tile docs]) (breaking change) +- The `hidden_string` feature has been removed from the isy994 component. Previously, this allowed entities to be "hidden" in Home Assistant if a configured string was present in an ISY device's name or folder path. This was removed because hiding devices is now done via the customization feature. +Note however, that this feature was replaced by a new ignore_string config option, which will now cause Home Assistant to completely ignore devices with the matching string so that they will not be imported as a Home Assistant device at all. This can be helpful if you have nodes in the ISY that aren't useful at all in Hass (IR transmitter nodes are a good example.) ([@OverloadUT] - [#11243]) ([isy994 docs]) ([binary_sensor.isy994 docs]) ([cover.isy994 docs]) ([fan.isy994 docs]) ([light.isy994 docs]) ([lock.isy994 docs]) ([sensor.isy994 docs]) ([switch.isy994 docs]) (breaking change) +- The [`egardia` alarm panel][alarm_control_panel.egardia docs] platform no longer a need the users to run a separate Egardiaserver component. It can now also run on HASS.io. ([@jeroenterheerdt] - [#11344]) ([alarm_control_panel.egardia docs]) (breaking change) +- The binary sensor platform of the DoorBird integration has been deleted, so remove DoorBird from your `binary_sensor` configuration. Instead, set the `doorbell_events` option of the `doorbird` component to `True`. The `last_visitor` option has been removed from the camera component, as it is now always added as an entity. ([@Klikini] - [#11193]) ([camera.doorbird docs]) (breaking change) +- The following attributes of the TP-Link switch and light platform have been renamed: + - Light: `current_consumption` -> `current_power_w`, `daily_consumption` -> `daily_energy_kwh` and `monthly_consumption` -> `monthly_energy_kwh` + - Switch: `current` -> `current_a`, `current_consumption` -> `current_power_w`, `total_consumption` -> `total_energy_kwh` and `daily_consumption` -> `today_energy_kwh` ([@DanNixon] - [#10979]) ([light.tplink docs]) ([switch.tplink docs]) (breaking change) +- Move IMAP Email Content body to an attribute ([@notoriousbdg] - [#11096]) ([sensor.imap_email_content docs]) (breaking change) +- Automations which were using `state` that was returning `target_temperature` of the `netatmo` climate platform needs an update. ([@ciotlosm] - [#11345]) ([climate.netatmo docs]) (breaking change) +- The default availability payloads for the `MQTT` switch platform have changed from "ON" and "OFF" to "online" and "offline" (in order to match the majority of MQTT platforms that already supported availability reporting). ([@DanNixon] - [#11336]) (breaking change) +- Customizations for how entities are exposed to Alexa are no longer set via `customize`. Instead they are set via the configuration of the cloud component: + + ```yaml + cloud: + alexa: + entity_config: + switch.kitchen: + name: 'Name for Alexa' + description: 'Description for Alexa' + display_categories: 'LIGHT' + ``` + ([@balloob] - [#11461]) ([cloud docs]) ([alexa.smart_home docs]) (breaking change) +- The extension of the `alpha_vantage` requires an update of the configuration as now are exchange data available as well. ([@ChristianKuehnel] - [#11427]) ([sensor.alpha_vantage docs]) (breaking change) +- The `prometheus` component now supports pushing all sensors and fixes wrong metrics. If may require that you update your configuration. ([@michaelkuty] - [#11159]) ([prometheus docs]) (breaking change) +- Insteon local devices will now use their address as the `entity_id` and `name`. The friendly name can be customized using the [standard customization configuration](https://home-assistant.io/docs/configuration/customizing-devices/). ([@camrun91] - [#11088]) ([insteon_local docs]) ([fan.insteon_local docs]) ([light.insteon_local docs]) ([switch.insteon_local docs]) (breaking change) +- Google Assistant is no longer configured via `customize` but instead has its configuration under the `google_assistant` entry in your `configuration.yaml`. The attributes will no longer have to be prefixed with `google_assistant_` either. + + | Old option | New option | + | ---------- | ------------ | + | google_assistant | expose | + | aliases | aliases | + | google_assistant_name | name | + | google_assistant_type | type | + + Before: + + ```yaml + homeassistant: + customize: + switch.kitchen: + google_assistant: false + google_assistant_name: nice lights + google_assistant_type: light + aliases: + - roof lights + + google_assistant: + ``` + + After: + + ```yaml + google_assistant: + entity_config: + switch.kitchen: + expose: false + alias: roof lights + name: nice lights + type: light + ``` +([@balloob] - [#11499]) ([cloud docs]) ([google_assistant docs]) (breaking change) +- The `climate.set_aux_heat` service is no longer available for the Sensibo climate platform. Now call `climate.turn_on` or `climate.turn_off`. ([@andrey-git] - [#11579]) ([climate.sensibo docs]) (breaking change) +- Release 0.61.0 introduced a lazy service loading strategy that relied on all components and platforms following our naming convention. After the release we realized that not all services did, which have been addressed by this fix. This results in certain services changing names: + + ``` + todoist.new_task -> calendar.todoist_new_task + + snapcast.snapcast_snapshot -> media_player.snapcast_snapshot + snapcast.snapcast_restore -> media_player.snapcast_restore + + mopar.remote_command -> sensor.mopar_remote_command + + broadlink.learn_command_192_168_0_107 -> switch.broadlink_learn_command_192_168_0_107 + broadlink.send_packet_192_168_0_107 -> switch.broadlink_send_packet_192_168_0_107 + ``` + ([@amelchio] - [#11677]) ([calendar.todoist docs]) ([media_player.snapcast docs]) ([media_player.soundtouch docs]) ([sensor.mopar docs]) ([switch.broadlink docs]) ([switch.scsgate docs]) (breaking change) + + +## {% linkable_title All changes %} + +- Try multiple methods of getting data in asuswrt. ([@PeWu] - [#11140]) ([device_tracker.asuswrt docs]) +- Hydroquebec component use now asyncio ([@titilambert] - [#10795]) ([sensor.hydroquebec docs]) +- Hive Component Release Two ([@KJonline] - [#11053]) ([hive docs]) ([climate.hive docs]) ([light.hive docs]) +- Add Discogs Sensor platform ([@thibmaek] - [#10957]) ([sensor.discogs docs]) (new-platform) +- Fix statistics sensor mean and median when only one sample is available. ([@markferry] - [#11180]) ([sensor.statistics docs]) +- Extend Threshold binary sensor to support ranges ([@DanNixon] - [#11110]) ([binary_sensor.threshold docs]) (breaking change) +- Bump python-miio version ([@djchen] - [#11232]) ([fan.xiaomi_miio docs]) ([light.xiaomi_miio docs]) ([switch.xiaomi_miio docs]) ([vacuum.xiaomi_miio docs]) +- Backup configuration files before overwriting ([@cgarwood] - [#11216]) +- Upgrade to new miflora version 0.2.0 ([@ChristianKuehnel] - [#11250]) ([sensor.miflora docs]) +- Add workaround for running tox on Windows platforms ([@veleek] - [#11188]) +- added myself to become code owner for miflora and plant ([@ChristianKuehnel] - [#11251]) +- Proper Steam game names and small fixes ([@frwickst] - [#11182]) ([sensor.steam_online docs]) (breaking change) +- Bugfix: 10509 - http is hard coded in plex sensor ([@ryanm101] - [#11072]) ([sensor.plex docs]) +- Adding MotionIP to BinarySensors for HMIP-SMI ([@schnoetz] - [#11268]) ([homematic docs]) +- Revert "Backup configuration files before overwriting" ([@pvizeli] - [#11269]) +- Functinality to save/restore snapshots for monoprice platform ([@etsinko] - [#10296]) ([media_player.monoprice docs]) +- Change manifest path to /states as this is the path / actually sets. ([@andrey-git] - [#11274]) +- Report Sensibo as off when it is off ([@andrey-git] - [#11281]) ([climate.sensibo docs]) +- Added password for GPS logger endpoint ([@foxel] - [#11245]) ([device_tracker.gpslogger docs]) +- Greenwave Reality (TCP Connected) Lighting Component ([@dfiel] - [#11282]) ([light.greenwave docs]) (new-platform) +- Adds support for disabled Tiles and automatic session renewal ([@bachya] - [#11172]) ([device_tracker.tile docs]) (breaking change) +- Plex refactor ([@ryanm101] - [#11235]) ([media_player.plex docs]) +- alexa: Add handling for covers ([@philk] - [#11242]) ([alexa.smart_home docs]) +- Added rainsensor ([@jbarrancos] - [#11023]) ([rainbird docs]) ([sensor.rainbird docs]) ([switch.rainbird docs]) (new-platform) +- Store raw state of RF sensors from alarmdecoder ([@PhracturedBlue] - [#10841]) ([alarmdecoder docs]) ([binary_sensor.alarmdecoder docs]) +- Add Chime status and control to Alarm Decoder component ([@goyney] - [#11271]) ([alarm_control_panel.alarmdecoder docs]) +- Better error handling ([@rofrantz] - [#11297]) ([sensor.transmission docs]) ([switch.transmission docs]) +- Removed error log used as debug ([@cmsimike] - [#11301]) ([octoprint docs]) +- Huge ISY994 platform cleanup, fixes support for 5.0.10 firmware ([@OverloadUT] - [#11243]) ([isy994 docs]) ([binary_sensor.isy994 docs]) ([cover.isy994 docs]) ([fan.isy994 docs]) ([light.isy994 docs]) ([lock.isy994 docs]) ([sensor.isy994 docs]) ([switch.isy994 docs]) (breaking change) +- Add heartbeat to websocket connections ([@balloob] - [#11298]) ([cloud.iot docs]) +- Fix typo in bitcoin.py component for mined blocks. ([@awkwardDuck] - [#11318]) ([sensor.bitcoin docs]) +- xiaomi_aqara: Fix covers never being closed ([@cnrd] - [#11319]) ([cover.xiaomi_aqara docs]) +- Fix for track_new_devices BC ([@masarliev] - [#11202]) ([device_tracker docs]) +- Upgrade aiohttp_cors to 0.6.0 ([@fabaff] - [#11310]) ([http docs]) +- Upgrade pysnmp to 4.4.3 ([@fabaff] - [#11317]) ([device_tracker.snmp docs]) ([sensor.snmp docs]) ([switch.snmp docs]) +- Upgrade luftdaten to 0.1.3 ([@fabaff] - [#11316]) ([sensor.luftdaten docs]) +- Upgrade yahooweather to 0.10 ([@fabaff] - [#11309]) ([weather.yweather docs]) +- Upgrade distro to 1.2.0 ([@fabaff] - [#11312]) ([updater docs]) +- Upgrade python-digitalocean to 1.13.2 ([@fabaff] - [#11311]) ([digital_ocean docs]) +- Upgrade youtube_dl to 2017.12.23 ([@fabaff] - [#11308]) ([media_extractor docs]) +- Upgrade alpha_vantage to 1.6.0 ([@fabaff] - [#11307]) ([sensor.alpha_vantage docs]) +- Bugfix for HA Issue 7292, 9412 - switch to gamertag to receive ssl image url ([@ReneNulschDE] - [#11315]) ([sensor.xbox_live docs]) +- closes #11314 by not restricting the voice to anything but a string ([@Human] - [#11326]) ([tts.marytts docs]) +- Additional device classes for binary sensors ([@schmittx] - [#11280]) ([binary_sensor docs]) +- Remove need for separate EgardiaServer setup ([@jeroenterheerdt] - [#11344]) ([alarm_control_panel.egardia docs]) (breaking change) +- Add default names and validation for TP-Link devices ([@DanNixon] - [#11346]) ([light.tplink docs]) ([switch.tplink docs]) +- Sochain cryptocurrency sensor ([@Klathmon] - [#11335]) ([sensor.sochain docs]) (new-platform) +- pass stops_at to get_station_by_name ([@ttroy50] - [#11304]) ([sensor.irish_rail_transport docs]) +- Move data instance to setup ([@fabaff] - [#11350]) ([sensor.swiss_public_transport docs]) +- Update modbus.py ([@goldminenine] - [#11238]) ([modbus docs]) +- DoorBird feature update ([@Klikini] - [#11193]) ([camera.doorbird docs]) (breaking change) +- Upgrade aiohttp to 2.3.7 ([@fabaff] - [#11329]) +- Upgrade fuzzywuzzy to 0.16.0 ([@fabaff] - [#11331]) ([conversation docs]) +- Upgrade pyowm to 2.8.0 ([@fabaff] - [#11332]) ([sensor.openweathermap docs]) ([weather.openweathermap docs]) +- Upgrade sqlalchemy to 1.2.0 ([@fabaff] - [#11333]) +- Upgrade mypy to 0.560 ([@fabaff] - [#11334]) +- Upgrade python-telegram-bot to 9.0.0 ([@fabaff] - [#11341]) ([telegram_bot docs]) +- Upgrade youtube_dl to 2017.12.28 ([@fabaff] - [#11357]) ([media_extractor docs]) +- Correct units used in TP-Link energy monioring ([@DanNixon] - [#10979]) ([light.tplink docs]) ([switch.tplink docs]) (breaking change) +- Add HTTP endpoint for resending email confirmation ([@balloob] - [#11354]) ([cloud.auth_api docs]) ([cloud.http_api docs]) +- Fix RGB template ordering in MQTT Light ([@DanNixon] - [#11362]) ([light.mqtt docs]) +- Ping device tracker now respects interval_seconds ([@tschmidty69] - [#11348]) ([device_tracker.ping docs]) +- Fido component use now asyncio ([@titilambert] - [#11244]) ([sensor.fido docs]) +- Support for EcoNet water heaters ([@w1ll1am23] - [#11260]) ([climate.econet docs]) (new-platform) +- Remember the Milk - updating and completing tasks ([@ChristianKuehnel] - [#11069]) ([remember_the_milk docs]) +- Reverts unit conversions in TP-Link bulb ([@DanNixon] - [#11381]) ([light.tplink docs]) +- Clean up Google Assistant ([@balloob] - [#11375]) ([google_assistant docs]) ([google_assistant.http docs]) ([google_assistant.smart_home docs]) +- Adding support for Egardia / Woonveilig version GATE-03 ([@jeroenterheerdt] - [#11397]) ([alarm_control_panel.egardia docs]) +- Add deCONZ component ([@Kane610] - [#10321]) ([deconz docs]) ([binary_sensor.deconz docs]) ([light.deconz docs]) ([sensor.deconz docs]) (new-platform) +- Fix broken tests ([@balloob] - [#11395]) +- Upgrade pychromecast to 1.0.3 ([@OttoWinter] - [#11410]) ([media_player.cast docs]) +- Bump pywemo to fix request include problems. ([@pavoni] - [#11401]) ([wemo docs]) +- Log exceptions that happen during service call ([@balloob] - [#11394]) +- Move IMAP Email Content body to an attribute ([@notoriousbdg] - [#11096]) ([sensor.imap_email_content docs]) (breaking change) +- Notify webos timeout error fix ([@masarliev] - [#11027]) ([notify.webostv docs]) +- Removed status block to allow https://github.com/home-assistant/home-assistant-polymer/pull/766 with no impact ([@ciotlosm] - [#11345]) ([climate.netatmo docs]) (breaking change) +- More support for availability reporting on MQTT components ([@DanNixon] - [#11336]) (breaking change) +- Do not purge the most recent state for an entity ([@tinloaf] - [#11039]) +- Performance optimization of TP-Link switch ([@amelchio] - [#11416]) ([switch.tplink docs]) +- Fixing OpenWeatherMap Sensor. Current weather is 'unknown' if forecast: false. It was reported as #8640. ([@tomaszduda23] - [#11417]) ([sensor.openweathermap docs]) +- Silence redundant warnings about slow setup ([@amelchio] - [#11352]) +- Account for User-Agent being non-existent, causing a TypeError ([@akatrevorjay] - [#11064]) +- Cloud Updates ([@balloob] - [#11404]) ([cloud docs]) +- Add support for the renaming of Yamaha Receiver Zones via configuration file. Added a test to cover the change, plus previously untested options. ([@dfinlay] - [#11402]) ([media_player.yamaha docs]) +- Plex api update ([@ryanm101] - [#11423]) ([media_player.plex docs]) ([sensor.plex docs]) +- fix: hmip-etrv-2 now working with homeassistant ([@daenny] - [#11175]) ([homematic docs]) ([climate.homematic docs]) +- Fix errors in zigbee push state ([@SteveEasley] - [#11386]) ([zigbee docs]) +- Add on/off supported feature to climate ([@andrey-git] - [#11379]) ([climate docs]) ([climate.demo docs]) ([climate.sensibo docs]) +- Fix CONF_FRIENDLY_NAME ([@cdce8p] - [#11438]) ([cover.template docs]) ([light.template docs]) +- Climate: fix missing "|" ([@andrey-git] - [#11441]) ([climate.demo docs]) +- Google Assistant -> Google Actions ([@balloob] - [#11442]) ([cloud.iot docs]) +- Added new climate component from Daikin ([@rofrantz] - [#10983]) ([climate.daikin docs]) (new-platform) +- Updated generic thermostat to respect operation_mode and added away mode ([@ciotlosm] - [#11445]) ([climate.generic_thermostat docs]) +- Reconnect to alarmdecoder on disconnect ([@PhracturedBlue] - [#11383]) ([alarmdecoder docs]) +- Set tahoma cover scan interval to 60 seconds ([@bakedraccoon] - [#11447]) ([cover.tahoma docs]) +- Add some tests to the cloud component ([@balloob] - [#11460]) ([cloud docs]) ([cloud.iot docs]) +- Input Select - Added service description ([@cdce8p] - [#11456]) ([input_select docs]) +- Input Boolean - Deleted 'DEFAULT_INITIAL' ([@cdce8p] - [#11453]) ([input_boolean docs]) +- Updated gitignore file ([@cdce8p] - [#11452]) +- Update hydroquebec component to use hass httpsession ([@titilambert] - [#11412]) ([sensor.hydroquebec docs]) +- Catch everything when calling to OctoPrint API to fix #10557 ([@w1ll1am23] - [#11457]) ([octoprint docs]) +- Update PULL_REQUEST_TEMPLATE.md ([@danielhiversen] - [#11465]) +- Alexa to not use customize for entity config ([@balloob] - [#11461]) ([cloud docs]) ([alexa.smart_home docs]) (breaking change) +- Don't duplicate html5 registrations ([@Chris-V] - [#11451]) ([notify.html5 docs]) +- AlarmDecoder remove icon function as BinarySensorDevice handles it correctly now ([@hawk259] - [#11467]) ([binary_sensor.alarmdecoder docs]) +- Upgrade psutil to 5.4.3 ([@fabaff] - [#11468]) ([sensor.systemmonitor docs]) +- Upgrade alpha_vantage to 1.8.0 ([@fabaff] - [#11476]) ([sensor.alpha_vantage docs]) +- Fix vultr tests ([@balloob] - [#11477]) +- Upgrade yarl to 0.17.0 ([@fabaff] - [#11478]) +- Add Touchline climate platform ([@abondoe] - [#10547]) ([climate.touchline docs]) (new-platform) +- Upgrade pysnmp to 4.4.4 ([@fabaff] - [#11485]) ([device_tracker.snmp docs]) ([sensor.snmp docs]) ([switch.snmp docs]) +- Add new iGlo component ([@jesserockz] - [#11171]) ([light.iglo docs]) (new-platform) +- Add missing configuration variables ([@fabaff] - [#11390]) ([sensor.metoffice docs]) +- Clean up Alexa.intent and DialogFlow.intent ([@balloob] - [#11492]) ([alexa.intent docs]) +- Fix time functions would throw errors in python scripts ([@tomwaters] - [#11414]) ([python_script docs]) +- Upgrade pywebpush to 1.5.0 ([@Chris-V] - [#11497]) ([notify.html5 docs]) +- upgrade schiene to 0.20 ([@JulianKahnert] - [#11504]) ([sensor.deutsche_bahn docs]) +- timer: include the remaining time in the state attributes ([@Julio-Guerra] - [#11510]) ([timer docs]) +- More tolerant KNX component if gateway cant be connected ([@Julius2342] - [#11511]) ([knx docs]) ([binary_sensor.knx docs]) ([climate.knx docs]) ([cover.knx docs]) ([light.knx docs]) ([sensor.knx docs]) ([switch.knx docs]) +- Snips (new) added speech response, parse snips/duration ([@tschmidty69] - [#11513]) ([snips docs]) +- Add Dark Sky weather component ([@DanNixon] - [#11435]) ([weather.darksky docs]) (new-platform) +- Lazy loading of service descriptions ([@amelchio] - [#11479]) ([api docs]) ([websocket_api docs]) ([light.lifx docs]) +- Fix canary flaky test ([@balloob] - [#11519]) +- Address missed review comments for Dark Sky weather ([@DanNixon] - [#11520]) ([weather.darksky docs]) +- New features for Owntracks device_tracker ([@cpcowart] - [#11480]) ([device_tracker.owntracks docs]) +- Reconnect before mochad switch send command ([@aosadchyy] - [#11296]) ([switch.mochad docs]) +- Fix Kodi channels media type ([@florianj1] - [#11505]) ([media_player.kodi docs]) +- Extension sensor alpha_vantage ([@ChristianKuehnel] - [#11427]) ([sensor.alpha_vantage docs]) (breaking change) +- MQTT json attributes ([@timstanley1985] - [#11439]) ([sensor.mqtt docs]) +- Support pushing all sensors and fix wrong metrics. ([@michaelkuty] - [#11159]) ([prometheus docs]) (breaking change) +- Add options feature to Baidu TTS. ([@yienxu] - [#11462]) ([tts.baidu docs]) +- Insteon local update ([@camrun91] - [#11088]) ([insteon_local docs]) ([fan.insteon_local docs]) ([light.insteon_local docs]) ([switch.insteon_local docs]) (breaking change) +- Snips: (fix) support new intentName format ([@tschmidty69] - [#11509]) ([snips docs]) +- Upgrade numpy to 1.14.0 ([@fabaff] - [#11542]) ([binary_sensor.trend docs]) ([image_processing.opencv docs]) +- Upgrade python-etherscan-api to 0.0.2 ([@fabaff] - [#11535]) ([sensor.etherscan docs]) +- Upgrade Sphinx to 1.6.6 ([@fabaff] - [#11534]) +- ZoneMinder event sensor updates ([@swilson] - [#11369]) ([sensor.zoneminder docs]) +- Move Google Assistant entity config out of customize ([@balloob] - [#11499]) ([cloud docs]) ([google_assistant docs]) (breaking change) +- Upgrade lightify to 1.0.6.1 ([@fabaff] - [#11545]) ([light.osramlightify docs]) +- Improved test runtime ([@cdce8p] - [#11553]) ([binary_sensor.workday docs]) +- Add 2 media_player services and 1 custom service to Squeezebox platform ([@ericpignet] - [#10969]) ([media_player.squeezebox docs]) +- Fix error on entity_config missing ([@philk] - [#11561]) ([google_assistant.http docs]) +- Upgrade keyring to 10.3.2 ([@fabaff] - [#11531]) +- Coinbase.com sensor platform ([@nkgilley] - [#11036]) ([coinbase docs]) ([sensor.coinbase docs]) (new-platform) +- Try to fix crashes after Hue refactoring ([@andreacampi] - [#11270]) ([light.hue docs]) +- Remove execution file perm ([@balloob] - [#11563]) +- Deprecate explicit entity_id in template platforms ([@amelchio] - [#11123]) ([binary_sensor.template docs]) ([cover.template docs]) ([light.template docs]) ([sensor.template docs]) ([switch.template docs]) +- Test tweaks ([@balloob] - [#11560]) +- Add Velux Windows to Tahoma ([@bakedraccoon] - [#11538]) ([tahoma docs]) ([cover.tahoma docs]) +- Extend hass.io services / updater ([@pvizeli] - [#11549]) ([hassio docs]) +- Add sensibo_assume_state service to Sensibo climate ([@andrey-git] - [#11567]) ([climate.sensibo docs]) +- Tracking all groups to allow changing of existing groups ([@randellhodges] - [#11444]) ([group docs]) +- Fix new squeezebox service descriptions for lazy loading ([@amelchio] - [#11574]) ([media_player.squeezebox docs]) +- Mark REST binary_sensor unavailable if request fails ([@DanNixon] - [#11506]) ([binary_sensor.rest docs]) +- Tado improvements - hot water zone sensors and climate precision ([@andersonshatch] - [#11521]) ([climate.tado docs]) ([sensor.tado docs]) +- Make the rpi_rf component thread-safe using an RLock ([@ulido] - [#11487]) ([switch.rpi_rf docs]) +- Update pyhomematic, support new devices ([@danielperna84] - [#11578]) ([homematic docs]) +- Alarmdecoder add validation of the zone types ([@hawk259] - [#11488]) ([alarmdecoder docs]) +- Support OSRAM lights on ZHA ([@armills] - [#11522]) ([light.zha docs]) +- Fix bluetooth tracker source ([@swilson] - [#11469]) ([device_tracker docs]) ([device_tracker.bluetooth_le_tracker docs]) ([device_tracker.bluetooth_tracker docs]) +- Fix for asuswrt, telnet not working and presence-detection for router mode ([@kennedyshead] - [#11422]) ([device_tracker.asuswrt docs]) +- Remove aux_heat support from Sensibo now that UI supports on/off ([@andrey-git] - [#11579]) ([climate.sensibo docs]) (breaking change) +- Changed device type of media player and cover to switch ([@Laqoore] - [#11483]) ([google_assistant.smart_home docs]) +- Control ordering of display in history component ([@rwa] - [#11340]) ([history docs]) +- Pr/11430 ([@balloob] - [#11587]) +- Cast return values and add unit tests for the yahoo weather component. ([@cgtobi] - [#10699]) ([weather.yweather docs]) +- add velux roller shutter to tahoma ([@bakedraccoon] - [#11586]) ([tahoma docs]) +- Added support for enable/disable motion detection ([@abjorshammar] - [#11583]) ([camera.uvc docs]) +- Avoid returning empty media_image_url string ([@JackWindows] - [#11557]) ([media_player.cast docs]) +- Core support for hass.io calls & Bugfix check_config ([@pvizeli] - [#11571]) ([__init__ docs]) ([hassio docs]) ([updater docs]) +- Fix Tahoma stop command for 2 types of shutters ([@bakedraccoon] - [#11588]) ([cover.tahoma docs]) +- Pushbullet email support (fix) ([@tschmidty69] - [#11590]) ([notify.pushbullet docs]) +- Fix state for trigger with forced updates ([@armills] - [#11595]) ([automation.state docs]) +- Snips add say and say_actions services (new) ([@tschmidty69] - [#11596]) ([snips docs]) +- Concord232 alarm arm away fix ([@rwa] - [#11597]) ([alarm_control_panel.concord232 docs]) ([binary_sensor.concord232 docs]) +- Bugfix and cleanup for Rfxtrx ([@danielhiversen] - [#11600]) +- Xiaomi lib upgrade ([@danielhiversen] - [#11603]) +- Upgrade yarl to 0.18.0 ([@fabaff] - [#11609]) +- patch stop command ([@bakedraccoon] - [#11612]) ([cover.tahoma docs]) +- Use kelvin/mireds correctly for setting iglo white ([@jesserockz] - [#11622]) +- Update Pyarlo to 0.1.2 ([@arsaboo] - [#11626]) + +[#10296]: https://github.com/home-assistant/home-assistant/pull/10296 +[#10321]: https://github.com/home-assistant/home-assistant/pull/10321 +[#10547]: https://github.com/home-assistant/home-assistant/pull/10547 +[#10699]: https://github.com/home-assistant/home-assistant/pull/10699 +[#10795]: https://github.com/home-assistant/home-assistant/pull/10795 +[#10841]: https://github.com/home-assistant/home-assistant/pull/10841 +[#10957]: https://github.com/home-assistant/home-assistant/pull/10957 +[#10969]: https://github.com/home-assistant/home-assistant/pull/10969 +[#10979]: https://github.com/home-assistant/home-assistant/pull/10979 +[#10983]: https://github.com/home-assistant/home-assistant/pull/10983 +[#11023]: https://github.com/home-assistant/home-assistant/pull/11023 +[#11027]: https://github.com/home-assistant/home-assistant/pull/11027 +[#11036]: https://github.com/home-assistant/home-assistant/pull/11036 +[#11039]: https://github.com/home-assistant/home-assistant/pull/11039 +[#11053]: https://github.com/home-assistant/home-assistant/pull/11053 +[#11064]: https://github.com/home-assistant/home-assistant/pull/11064 +[#11069]: https://github.com/home-assistant/home-assistant/pull/11069 +[#11072]: https://github.com/home-assistant/home-assistant/pull/11072 +[#11088]: https://github.com/home-assistant/home-assistant/pull/11088 +[#11096]: https://github.com/home-assistant/home-assistant/pull/11096 +[#11110]: https://github.com/home-assistant/home-assistant/pull/11110 +[#11123]: https://github.com/home-assistant/home-assistant/pull/11123 +[#11140]: https://github.com/home-assistant/home-assistant/pull/11140 +[#11159]: https://github.com/home-assistant/home-assistant/pull/11159 +[#11171]: https://github.com/home-assistant/home-assistant/pull/11171 +[#11172]: https://github.com/home-assistant/home-assistant/pull/11172 +[#11175]: https://github.com/home-assistant/home-assistant/pull/11175 +[#11180]: https://github.com/home-assistant/home-assistant/pull/11180 +[#11182]: https://github.com/home-assistant/home-assistant/pull/11182 +[#11188]: https://github.com/home-assistant/home-assistant/pull/11188 +[#11193]: https://github.com/home-assistant/home-assistant/pull/11193 +[#11202]: https://github.com/home-assistant/home-assistant/pull/11202 +[#11216]: https://github.com/home-assistant/home-assistant/pull/11216 +[#11232]: https://github.com/home-assistant/home-assistant/pull/11232 +[#11235]: https://github.com/home-assistant/home-assistant/pull/11235 +[#11238]: https://github.com/home-assistant/home-assistant/pull/11238 +[#11242]: https://github.com/home-assistant/home-assistant/pull/11242 +[#11243]: https://github.com/home-assistant/home-assistant/pull/11243 +[#11244]: https://github.com/home-assistant/home-assistant/pull/11244 +[#11245]: https://github.com/home-assistant/home-assistant/pull/11245 +[#11250]: https://github.com/home-assistant/home-assistant/pull/11250 +[#11251]: https://github.com/home-assistant/home-assistant/pull/11251 +[#11260]: https://github.com/home-assistant/home-assistant/pull/11260 +[#11268]: https://github.com/home-assistant/home-assistant/pull/11268 +[#11269]: https://github.com/home-assistant/home-assistant/pull/11269 +[#11270]: https://github.com/home-assistant/home-assistant/pull/11270 +[#11271]: https://github.com/home-assistant/home-assistant/pull/11271 +[#11274]: https://github.com/home-assistant/home-assistant/pull/11274 +[#11280]: https://github.com/home-assistant/home-assistant/pull/11280 +[#11281]: https://github.com/home-assistant/home-assistant/pull/11281 +[#11282]: https://github.com/home-assistant/home-assistant/pull/11282 +[#11296]: https://github.com/home-assistant/home-assistant/pull/11296 +[#11297]: https://github.com/home-assistant/home-assistant/pull/11297 +[#11298]: https://github.com/home-assistant/home-assistant/pull/11298 +[#11301]: https://github.com/home-assistant/home-assistant/pull/11301 +[#11304]: https://github.com/home-assistant/home-assistant/pull/11304 +[#11307]: https://github.com/home-assistant/home-assistant/pull/11307 +[#11308]: https://github.com/home-assistant/home-assistant/pull/11308 +[#11309]: https://github.com/home-assistant/home-assistant/pull/11309 +[#11310]: https://github.com/home-assistant/home-assistant/pull/11310 +[#11311]: https://github.com/home-assistant/home-assistant/pull/11311 +[#11312]: https://github.com/home-assistant/home-assistant/pull/11312 +[#11315]: https://github.com/home-assistant/home-assistant/pull/11315 +[#11316]: https://github.com/home-assistant/home-assistant/pull/11316 +[#11317]: https://github.com/home-assistant/home-assistant/pull/11317 +[#11318]: https://github.com/home-assistant/home-assistant/pull/11318 +[#11319]: https://github.com/home-assistant/home-assistant/pull/11319 +[#11326]: https://github.com/home-assistant/home-assistant/pull/11326 +[#11329]: https://github.com/home-assistant/home-assistant/pull/11329 +[#11331]: https://github.com/home-assistant/home-assistant/pull/11331 +[#11332]: https://github.com/home-assistant/home-assistant/pull/11332 +[#11333]: https://github.com/home-assistant/home-assistant/pull/11333 +[#11334]: https://github.com/home-assistant/home-assistant/pull/11334 +[#11335]: https://github.com/home-assistant/home-assistant/pull/11335 +[#11336]: https://github.com/home-assistant/home-assistant/pull/11336 +[#11340]: https://github.com/home-assistant/home-assistant/pull/11340 +[#11341]: https://github.com/home-assistant/home-assistant/pull/11341 +[#11344]: https://github.com/home-assistant/home-assistant/pull/11344 +[#11345]: https://github.com/home-assistant/home-assistant/pull/11345 +[#11346]: https://github.com/home-assistant/home-assistant/pull/11346 +[#11348]: https://github.com/home-assistant/home-assistant/pull/11348 +[#11350]: https://github.com/home-assistant/home-assistant/pull/11350 +[#11352]: https://github.com/home-assistant/home-assistant/pull/11352 +[#11354]: https://github.com/home-assistant/home-assistant/pull/11354 +[#11357]: https://github.com/home-assistant/home-assistant/pull/11357 +[#11362]: https://github.com/home-assistant/home-assistant/pull/11362 +[#11369]: https://github.com/home-assistant/home-assistant/pull/11369 +[#11375]: https://github.com/home-assistant/home-assistant/pull/11375 +[#11379]: https://github.com/home-assistant/home-assistant/pull/11379 +[#11381]: https://github.com/home-assistant/home-assistant/pull/11381 +[#11383]: https://github.com/home-assistant/home-assistant/pull/11383 +[#11386]: https://github.com/home-assistant/home-assistant/pull/11386 +[#11390]: https://github.com/home-assistant/home-assistant/pull/11390 +[#11394]: https://github.com/home-assistant/home-assistant/pull/11394 +[#11395]: https://github.com/home-assistant/home-assistant/pull/11395 +[#11397]: https://github.com/home-assistant/home-assistant/pull/11397 +[#11401]: https://github.com/home-assistant/home-assistant/pull/11401 +[#11402]: https://github.com/home-assistant/home-assistant/pull/11402 +[#11404]: https://github.com/home-assistant/home-assistant/pull/11404 +[#11410]: https://github.com/home-assistant/home-assistant/pull/11410 +[#11412]: https://github.com/home-assistant/home-assistant/pull/11412 +[#11414]: https://github.com/home-assistant/home-assistant/pull/11414 +[#11416]: https://github.com/home-assistant/home-assistant/pull/11416 +[#11417]: https://github.com/home-assistant/home-assistant/pull/11417 +[#11422]: https://github.com/home-assistant/home-assistant/pull/11422 +[#11423]: https://github.com/home-assistant/home-assistant/pull/11423 +[#11427]: https://github.com/home-assistant/home-assistant/pull/11427 +[#11435]: https://github.com/home-assistant/home-assistant/pull/11435 +[#11438]: https://github.com/home-assistant/home-assistant/pull/11438 +[#11439]: https://github.com/home-assistant/home-assistant/pull/11439 +[#11441]: https://github.com/home-assistant/home-assistant/pull/11441 +[#11442]: https://github.com/home-assistant/home-assistant/pull/11442 +[#11444]: https://github.com/home-assistant/home-assistant/pull/11444 +[#11445]: https://github.com/home-assistant/home-assistant/pull/11445 +[#11447]: https://github.com/home-assistant/home-assistant/pull/11447 +[#11451]: https://github.com/home-assistant/home-assistant/pull/11451 +[#11452]: https://github.com/home-assistant/home-assistant/pull/11452 +[#11453]: https://github.com/home-assistant/home-assistant/pull/11453 +[#11456]: https://github.com/home-assistant/home-assistant/pull/11456 +[#11457]: https://github.com/home-assistant/home-assistant/pull/11457 +[#11460]: https://github.com/home-assistant/home-assistant/pull/11460 +[#11461]: https://github.com/home-assistant/home-assistant/pull/11461 +[#11462]: https://github.com/home-assistant/home-assistant/pull/11462 +[#11465]: https://github.com/home-assistant/home-assistant/pull/11465 +[#11467]: https://github.com/home-assistant/home-assistant/pull/11467 +[#11468]: https://github.com/home-assistant/home-assistant/pull/11468 +[#11469]: https://github.com/home-assistant/home-assistant/pull/11469 +[#11476]: https://github.com/home-assistant/home-assistant/pull/11476 +[#11477]: https://github.com/home-assistant/home-assistant/pull/11477 +[#11478]: https://github.com/home-assistant/home-assistant/pull/11478 +[#11479]: https://github.com/home-assistant/home-assistant/pull/11479 +[#11480]: https://github.com/home-assistant/home-assistant/pull/11480 +[#11483]: https://github.com/home-assistant/home-assistant/pull/11483 +[#11485]: https://github.com/home-assistant/home-assistant/pull/11485 +[#11487]: https://github.com/home-assistant/home-assistant/pull/11487 +[#11488]: https://github.com/home-assistant/home-assistant/pull/11488 +[#11492]: https://github.com/home-assistant/home-assistant/pull/11492 +[#11497]: https://github.com/home-assistant/home-assistant/pull/11497 +[#11499]: https://github.com/home-assistant/home-assistant/pull/11499 +[#11504]: https://github.com/home-assistant/home-assistant/pull/11504 +[#11505]: https://github.com/home-assistant/home-assistant/pull/11505 +[#11506]: https://github.com/home-assistant/home-assistant/pull/11506 +[#11509]: https://github.com/home-assistant/home-assistant/pull/11509 +[#11510]: https://github.com/home-assistant/home-assistant/pull/11510 +[#11511]: https://github.com/home-assistant/home-assistant/pull/11511 +[#11513]: https://github.com/home-assistant/home-assistant/pull/11513 +[#11519]: https://github.com/home-assistant/home-assistant/pull/11519 +[#11520]: https://github.com/home-assistant/home-assistant/pull/11520 +[#11521]: https://github.com/home-assistant/home-assistant/pull/11521 +[#11522]: https://github.com/home-assistant/home-assistant/pull/11522 +[#11531]: https://github.com/home-assistant/home-assistant/pull/11531 +[#11534]: https://github.com/home-assistant/home-assistant/pull/11534 +[#11535]: https://github.com/home-assistant/home-assistant/pull/11535 +[#11538]: https://github.com/home-assistant/home-assistant/pull/11538 +[#11542]: https://github.com/home-assistant/home-assistant/pull/11542 +[#11545]: https://github.com/home-assistant/home-assistant/pull/11545 +[#11549]: https://github.com/home-assistant/home-assistant/pull/11549 +[#11553]: https://github.com/home-assistant/home-assistant/pull/11553 +[#11557]: https://github.com/home-assistant/home-assistant/pull/11557 +[#11560]: https://github.com/home-assistant/home-assistant/pull/11560 +[#11561]: https://github.com/home-assistant/home-assistant/pull/11561 +[#11563]: https://github.com/home-assistant/home-assistant/pull/11563 +[#11567]: https://github.com/home-assistant/home-assistant/pull/11567 +[#11571]: https://github.com/home-assistant/home-assistant/pull/11571 +[#11574]: https://github.com/home-assistant/home-assistant/pull/11574 +[#11578]: https://github.com/home-assistant/home-assistant/pull/11578 +[#11579]: https://github.com/home-assistant/home-assistant/pull/11579 +[#11583]: https://github.com/home-assistant/home-assistant/pull/11583 +[#11586]: https://github.com/home-assistant/home-assistant/pull/11586 +[#11587]: https://github.com/home-assistant/home-assistant/pull/11587 +[#11588]: https://github.com/home-assistant/home-assistant/pull/11588 +[#11590]: https://github.com/home-assistant/home-assistant/pull/11590 +[#11595]: https://github.com/home-assistant/home-assistant/pull/11595 +[#11596]: https://github.com/home-assistant/home-assistant/pull/11596 +[#11597]: https://github.com/home-assistant/home-assistant/pull/11597 +[#11600]: https://github.com/home-assistant/home-assistant/pull/11600 +[#11603]: https://github.com/home-assistant/home-assistant/pull/11603 +[#11609]: https://github.com/home-assistant/home-assistant/pull/11609 +[#11612]: https://github.com/home-assistant/home-assistant/pull/11612 +[#11622]: https://github.com/home-assistant/home-assistant/pull/11622 +[#11626]: https://github.com/home-assistant/home-assistant/pull/11626 +[@Chris-V]: https://github.com/Chris-V +[@ChristianKuehnel]: https://github.com/ChristianKuehnel +[@DanNixon]: https://github.com/DanNixon +[@Human]: https://github.com/Human +[@JackWindows]: https://github.com/JackWindows +[@JulianKahnert]: https://github.com/JulianKahnert +[@Julio-Guerra]: https://github.com/Julio-Guerra +[@Julius2342]: https://github.com/Julius2342 +[@KJonline]: https://github.com/KJonline +[@Kane610]: https://github.com/Kane610 +[@Klathmon]: https://github.com/Klathmon +[@Klikini]: https://github.com/Klikini +[@Laqoore]: https://github.com/Laqoore +[@OttoWinter]: https://github.com/OttoWinter +[@OverloadUT]: https://github.com/OverloadUT +[@PeWu]: https://github.com/PeWu +[@PhracturedBlue]: https://github.com/PhracturedBlue +[@ReneNulschDE]: https://github.com/ReneNulschDE +[@SteveEasley]: https://github.com/SteveEasley +[@abjorshammar]: https://github.com/abjorshammar +[@abondoe]: https://github.com/abondoe +[@akatrevorjay]: https://github.com/akatrevorjay +[@amelchio]: https://github.com/amelchio +[@andersonshatch]: https://github.com/andersonshatch +[@andreacampi]: https://github.com/andreacampi +[@andrey-git]: https://github.com/andrey-git +[@aosadchyy]: https://github.com/aosadchyy +[@armills]: https://github.com/armills +[@arsaboo]: https://github.com/arsaboo +[@awkwardDuck]: https://github.com/awkwardDuck +[@bachya]: https://github.com/bachya +[@bakedraccoon]: https://github.com/bakedraccoon +[@balloob]: https://github.com/balloob +[@camrun91]: https://github.com/camrun91 +[@cdce8p]: https://github.com/cdce8p +[@cgarwood]: https://github.com/cgarwood +[@cgtobi]: https://github.com/cgtobi +[@ciotlosm]: https://github.com/ciotlosm +[@cmsimike]: https://github.com/cmsimike +[@cnrd]: https://github.com/cnrd +[@cpcowart]: https://github.com/cpcowart +[@daenny]: https://github.com/daenny +[@danielhiversen]: https://github.com/danielhiversen +[@danielperna84]: https://github.com/danielperna84 +[@dfiel]: https://github.com/dfiel +[@dfinlay]: https://github.com/dfinlay +[@djchen]: https://github.com/djchen +[@ericpignet]: https://github.com/ericpignet +[@etsinko]: https://github.com/etsinko +[@fabaff]: https://github.com/fabaff +[@florianj1]: https://github.com/florianj1 +[@foxel]: https://github.com/foxel +[@frwickst]: https://github.com/frwickst +[@goldminenine]: https://github.com/goldminenine +[@goyney]: https://github.com/goyney +[@hawk259]: https://github.com/hawk259 +[@jbarrancos]: https://github.com/jbarrancos +[@jeroenterheerdt]: https://github.com/jeroenterheerdt +[@jesserockz]: https://github.com/jesserockz +[@kennedyshead]: https://github.com/kennedyshead +[@markferry]: https://github.com/markferry +[@masarliev]: https://github.com/masarliev +[@michaelkuty]: https://github.com/michaelkuty +[@nkgilley]: https://github.com/nkgilley +[@notoriousbdg]: https://github.com/notoriousbdg +[@pavoni]: https://github.com/pavoni +[@philk]: https://github.com/philk +[@pvizeli]: https://github.com/pvizeli +[@randellhodges]: https://github.com/randellhodges +[@rofrantz]: https://github.com/rofrantz +[@rwa]: https://github.com/rwa +[@ryanm101]: https://github.com/ryanm101 +[@schmittx]: https://github.com/schmittx +[@schnoetz]: https://github.com/schnoetz +[@swilson]: https://github.com/swilson +[@thibmaek]: https://github.com/thibmaek +[@timstanley1985]: https://github.com/timstanley1985 +[@tinloaf]: https://github.com/tinloaf +[@titilambert]: https://github.com/titilambert +[@tomaszduda23]: https://github.com/tomaszduda23 +[@tomwaters]: https://github.com/tomwaters +[@tschmidty69]: https://github.com/tschmidty69 +[@ttroy50]: https://github.com/ttroy50 +[@ulido]: https://github.com/ulido +[@veleek]: https://github.com/veleek +[@w1ll1am23]: https://github.com/w1ll1am23 +[@yienxu]: https://github.com/yienxu +[__init__ docs]: https://home-assistant.io/components/__init__/ +[alarm_control_panel.alarmdecoder docs]: https://home-assistant.io/components/alarm_control_panel.alarmdecoder/ +[alarm_control_panel.concord232 docs]: https://home-assistant.io/components/alarm_control_panel.concord232/ +[alarm_control_panel.egardia docs]: https://home-assistant.io/components/alarm_control_panel.egardia/ +[alarmdecoder docs]: https://home-assistant.io/components/alarmdecoder/ +[alexa.intent docs]: https://home-assistant.io/components/alexa.intent/ +[alexa.smart_home docs]: https://home-assistant.io/components/alexa.smart_home/ +[api docs]: https://home-assistant.io/components/api/ +[automation.state docs]: https://home-assistant.io/docs/automation/trigger/#state-trigger +[binary_sensor docs]: https://home-assistant.io/components/binary_sensor/ +[binary_sensor.alarmdecoder docs]: https://home-assistant.io/components/binary_sensor.alarmdecoder/ +[binary_sensor.concord232 docs]: https://home-assistant.io/components/binary_sensor.concord232/ +[binary_sensor.deconz docs]: https://home-assistant.io/components/binary_sensor.deconz/ +[binary_sensor.isy994 docs]: https://home-assistant.io/components/binary_sensor.isy994/ +[binary_sensor.knx docs]: https://home-assistant.io/components/binary_sensor.knx/ +[binary_sensor.rest docs]: https://home-assistant.io/components/binary_sensor.rest/ +[binary_sensor.template docs]: https://home-assistant.io/components/binary_sensor.template/ +[binary_sensor.threshold docs]: https://home-assistant.io/components/binary_sensor.threshold/ +[binary_sensor.trend docs]: https://home-assistant.io/components/binary_sensor.trend/ +[binary_sensor.workday docs]: https://home-assistant.io/components/binary_sensor.workday/ +[camera.doorbird docs]: https://home-assistant.io/components/camera.doorbird/ +[camera.uvc docs]: https://home-assistant.io/components/camera.uvc/ +[climate docs]: https://home-assistant.io/components/climate/ +[climate.daikin docs]: https://home-assistant.io/components/climate.daikin/ +[climate.demo docs]: https://home-assistant.io/components/climate.demo/ +[climate.econet docs]: https://home-assistant.io/components/climate.econet/ +[climate.generic_thermostat docs]: https://home-assistant.io/components/climate.generic_thermostat/ +[climate.hive docs]: https://home-assistant.io/components/climate.hive/ +[climate.homematic docs]: https://home-assistant.io/components/climate.homematic/ +[climate.knx docs]: https://home-assistant.io/components/climate.knx/ +[climate.netatmo docs]: https://home-assistant.io/components/climate.netatmo/ +[climate.sensibo docs]: https://home-assistant.io/components/climate.sensibo/ +[climate.tado docs]: https://home-assistant.io/components/climate.tado/ +[climate.touchline docs]: https://home-assistant.io/components/climate.touchline/ +[cloud docs]: https://home-assistant.io/components/cloud/ +[cloud.auth_api docs]: https://home-assistant.io/components/cloud.auth_api/ +[cloud.http_api docs]: https://home-assistant.io/components/cloud.http_api/ +[cloud.iot docs]: https://home-assistant.io/components/cloud.iot/ +[coinbase docs]: https://home-assistant.io/components/coinbase/ +[conversation docs]: https://home-assistant.io/components/conversation/ +[cover.isy994 docs]: https://home-assistant.io/components/cover.isy994/ +[cover.knx docs]: https://home-assistant.io/components/cover.knx/ +[cover.tahoma docs]: https://home-assistant.io/components/cover.tahoma/ +[cover.template docs]: https://home-assistant.io/components/cover.template/ +[cover.xiaomi_aqara docs]: https://home-assistant.io/components/cover.xiaomi_aqara/ +[deconz docs]: https://home-assistant.io/components/deconz/ +[device_tracker docs]: https://home-assistant.io/components/device_tracker/ +[device_tracker.asuswrt docs]: https://home-assistant.io/components/device_tracker.asuswrt/ +[device_tracker.bluetooth_le_tracker docs]: https://home-assistant.io/components/device_tracker.bluetooth_le_tracker/ +[device_tracker.bluetooth_tracker docs]: https://home-assistant.io/components/device_tracker.bluetooth_tracker/ +[device_tracker.gpslogger docs]: https://home-assistant.io/components/device_tracker.gpslogger/ +[device_tracker.owntracks docs]: https://home-assistant.io/components/device_tracker.owntracks/ +[device_tracker.ping docs]: https://home-assistant.io/components/device_tracker.ping/ +[device_tracker.snmp docs]: https://home-assistant.io/components/device_tracker.snmp/ +[device_tracker.tile docs]: https://home-assistant.io/components/device_tracker.tile/ +[digital_ocean docs]: https://home-assistant.io/components/digital_ocean/ +[fan.insteon_local docs]: https://home-assistant.io/components/fan.insteon_local/ +[fan.isy994 docs]: https://home-assistant.io/components/fan.isy994/ +[fan.xiaomi_miio docs]: https://home-assistant.io/components/fan.xiaomi_miio/ +[google_assistant docs]: https://home-assistant.io/components/google_assistant/ +[google_assistant.http docs]: https://home-assistant.io/components/google_assistant.http/ +[google_assistant.smart_home docs]: https://home-assistant.io/components/google_assistant.smart_home/ +[group docs]: https://home-assistant.io/components/group/ +[hassio docs]: https://home-assistant.io/components/hassio/ +[history docs]: https://home-assistant.io/components/history/ +[hive docs]: https://home-assistant.io/components/hive/ +[homematic docs]: https://home-assistant.io/components/homematic/ +[http docs]: https://home-assistant.io/components/http/ +[image_processing.opencv docs]: https://home-assistant.io/components/image_processing.opencv/ +[input_boolean docs]: https://home-assistant.io/components/input_boolean/ +[input_select docs]: https://home-assistant.io/components/input_select/ +[insteon_local docs]: https://home-assistant.io/components/insteon_local/ +[isy994 docs]: https://home-assistant.io/components/isy994/ +[knx docs]: https://home-assistant.io/components/knx/ +[light.deconz docs]: https://home-assistant.io/components/light.deconz/ +[light.greenwave docs]: https://home-assistant.io/components/light.greenwave/ +[light.hive docs]: https://home-assistant.io/components/light.hive/ +[light.hue docs]: https://home-assistant.io/components/light.hue/ +[light.iglo docs]: https://home-assistant.io/components/light.iglo/ +[light.insteon_local docs]: https://home-assistant.io/components/light.insteon_local/ +[light.isy994 docs]: https://home-assistant.io/components/light.isy994/ +[light.knx docs]: https://home-assistant.io/components/light.knx/ +[light.lifx docs]: https://home-assistant.io/components/light.lifx/ +[light.mqtt docs]: https://home-assistant.io/components/light.mqtt/ +[light.osramlightify docs]: https://home-assistant.io/components/light.osramlightify/ +[light.template docs]: https://home-assistant.io/components/light.template/ +[light.tplink docs]: https://home-assistant.io/components/light.tplink/ +[light.xiaomi_miio docs]: https://home-assistant.io/components/light.xiaomi_miio/ +[light.zha docs]: https://home-assistant.io/components/light.zha/ +[lock.isy994 docs]: https://home-assistant.io/components/lock.isy994/ +[media_extractor docs]: https://home-assistant.io/components/media_extractor/ +[media_player.cast docs]: https://home-assistant.io/components/media_player.cast/ +[media_player.kodi docs]: https://home-assistant.io/components/media_player.kodi/ +[media_player.monoprice docs]: https://home-assistant.io/components/media_player.monoprice/ +[media_player.plex docs]: https://home-assistant.io/components/media_player.plex/ +[media_player.squeezebox docs]: https://home-assistant.io/components/media_player.squeezebox/ +[media_player.yamaha docs]: https://home-assistant.io/components/media_player.yamaha/ +[modbus docs]: https://home-assistant.io/components/modbus/ +[notify.html5 docs]: https://home-assistant.io/components/notify.html5/ +[notify.pushbullet docs]: https://home-assistant.io/components/notify.pushbullet/ +[notify.webostv docs]: https://home-assistant.io/components/notify.webostv/ +[octoprint docs]: https://home-assistant.io/components/octoprint/ +[prometheus docs]: https://home-assistant.io/components/prometheus/ +[python_script docs]: https://home-assistant.io/components/python_script/ +[rainbird docs]: https://home-assistant.io/components/rainbird/ +[remember_the_milk docs]: https://home-assistant.io/components/remember_the_milk/ +[sensor.alpha_vantage docs]: https://home-assistant.io/components/sensor.alpha_vantage/ +[sensor.bitcoin docs]: https://home-assistant.io/components/sensor.bitcoin/ +[sensor.coinbase docs]: https://home-assistant.io/components/sensor.coinbase/ +[sensor.deconz docs]: https://home-assistant.io/components/sensor.deconz/ +[sensor.deutsche_bahn docs]: https://home-assistant.io/components/sensor.deutsche_bahn/ +[sensor.discogs docs]: https://home-assistant.io/components/sensor.discogs/ +[sensor.etherscan docs]: https://home-assistant.io/components/sensor.etherscan/ +[sensor.fido docs]: https://home-assistant.io/components/sensor.fido/ +[sensor.hydroquebec docs]: https://home-assistant.io/components/sensor.hydroquebec/ +[sensor.imap_email_content docs]: https://home-assistant.io/components/sensor.imap_email_content/ +[sensor.irish_rail_transport docs]: https://home-assistant.io/components/sensor.irish_rail_transport/ +[sensor.isy994 docs]: https://home-assistant.io/components/sensor.isy994/ +[sensor.knx docs]: https://home-assistant.io/components/sensor.knx/ +[sensor.luftdaten docs]: https://home-assistant.io/components/sensor.luftdaten/ +[sensor.metoffice docs]: https://home-assistant.io/components/sensor.metoffice/ +[sensor.miflora docs]: https://home-assistant.io/components/sensor.miflora/ +[sensor.mqtt docs]: https://home-assistant.io/components/sensor.mqtt/ +[sensor.openweathermap docs]: https://home-assistant.io/components/sensor.openweathermap/ +[sensor.plex docs]: https://home-assistant.io/components/sensor.plex/ +[sensor.rainbird docs]: https://home-assistant.io/components/sensor.rainbird/ +[sensor.snmp docs]: https://home-assistant.io/components/sensor.snmp/ +[sensor.sochain docs]: https://home-assistant.io/components/sensor.sochain/ +[sensor.statistics docs]: https://home-assistant.io/components/sensor.statistics/ +[sensor.steam_online docs]: https://home-assistant.io/components/sensor.steam_online/ +[sensor.swiss_public_transport docs]: https://home-assistant.io/components/sensor.swiss_public_transport/ +[sensor.systemmonitor docs]: https://home-assistant.io/components/sensor.systemmonitor/ +[sensor.tado docs]: https://home-assistant.io/components/sensor.tado/ +[sensor.template docs]: https://home-assistant.io/components/sensor.template/ +[sensor.transmission docs]: https://home-assistant.io/components/sensor.transmission/ +[sensor.xbox_live docs]: https://home-assistant.io/components/sensor.xbox_live/ +[sensor.zoneminder docs]: https://home-assistant.io/components/sensor.zoneminder/ +[snips docs]: https://home-assistant.io/components/snips/ +[switch.insteon_local docs]: https://home-assistant.io/components/switch.insteon_local/ +[switch.isy994 docs]: https://home-assistant.io/components/switch.isy994/ +[switch.knx docs]: https://home-assistant.io/components/switch.knx/ +[switch.mochad docs]: https://home-assistant.io/components/switch.mochad/ +[switch.rainbird docs]: https://home-assistant.io/components/switch.rainbird/ +[switch.rpi_rf docs]: https://home-assistant.io/components/switch.rpi_rf/ +[switch.snmp docs]: https://home-assistant.io/components/switch.snmp/ +[switch.template docs]: https://home-assistant.io/components/switch.template/ +[switch.tplink docs]: https://home-assistant.io/components/switch.tplink/ +[switch.transmission docs]: https://home-assistant.io/components/switch.transmission/ +[switch.xiaomi_miio docs]: https://home-assistant.io/components/switch.xiaomi_miio/ +[tahoma docs]: https://home-assistant.io/components/tahoma/ +[telegram_bot docs]: https://home-assistant.io/components/telegram_bot/ +[timer docs]: https://home-assistant.io/components/timer/ +[tts.baidu docs]: https://home-assistant.io/components/tts.baidu/ +[tts.marytts docs]: https://home-assistant.io/components/tts.marytts/ +[updater docs]: https://home-assistant.io/components/updater/ +[vacuum.xiaomi_miio docs]: https://home-assistant.io/components/vacuum.xiaomi_miio/ +[weather.darksky docs]: https://home-assistant.io/components/weather.darksky/ +[weather.openweathermap docs]: https://home-assistant.io/components/weather.openweathermap/ +[weather.yweather docs]: https://home-assistant.io/components/weather.yweather/ +[websocket_api docs]: https://home-assistant.io/components/websocket_api/ +[wemo docs]: https://home-assistant.io/components/wemo/ +[zigbee docs]: https://home-assistant.io/components/zigbee/ +[#11670]: https://github.com/home-assistant/home-assistant/pull/11670 +[#11677]: https://github.com/home-assistant/home-assistant/pull/11677 +[#11678]: https://github.com/home-assistant/home-assistant/pull/11678 +[#11686]: https://github.com/home-assistant/home-assistant/pull/11686 +[#11713]: https://github.com/home-assistant/home-assistant/pull/11713 +[@amelchio]: https://github.com/amelchio +[@danielhiversen]: https://github.com/danielhiversen +[@rcloran]: https://github.com/rcloran +[@rwa]: https://github.com/rwa +[@tinloaf]: https://github.com/tinloaf +[binary_sensor.rfxtrx docs]: https://home-assistant.io/components/binary_sensor.rfxtrx/ +[calendar.todoist docs]: https://home-assistant.io/components/calendar.todoist/ +[history docs]: https://home-assistant.io/components/history/ +[light.zha docs]: https://home-assistant.io/components/light.zha/ +[media_player.snapcast docs]: https://home-assistant.io/components/media_player.snapcast/ +[media_player.soundtouch docs]: https://home-assistant.io/components/media_player.soundtouch/ +[rfxtrx docs]: https://home-assistant.io/components/rfxtrx/ +[sensor.mopar docs]: https://home-assistant.io/components/sensor.mopar/ +[switch.broadlink docs]: https://home-assistant.io/components/switch.broadlink/ +[switch.scsgate docs]: https://home-assistant.io/components/switch.scsgate/ +[zha docs]: https://home-assistant.io/components/zha/ diff --git a/source/_posts/2018-01-21-clarification-emulated-hue.markdown b/source/_posts/2018-01-21-clarification-emulated-hue.markdown new file mode 100644 index 00000000000..11d57e37c5e --- /dev/null +++ b/source/_posts/2018-01-21-clarification-emulated-hue.markdown @@ -0,0 +1,34 @@ +--- +layout: post +title: "Clarification about Emulated Hue" +description: "The Emulated Hue component is not going to be removed nor will we ever remove any functionality from Home Assistant to push you to subscribe to the Community Support Package." +date: 2018-01-21 01:00:00 +date_formatted: "January 21, 2018" +author: Paulus Schoutsen +author_twitter: balloob +comments: true +categories: Public Service Announcement +--- + +There are some misconceptions floating around about the future of the Emulated Hue component and I would like to set the record straight. **The Emulated Hue component is not going to be removed nor will we ever remove any functionality from Home Assistant to push you to support the Home Assistant project by subscribing to the Community Support Package.** + +The reason people are concerned about the future of the Emulated Hue component is because of a poor choice of words in a deprecation message. This message was [introduced a year ago][pr2] when we deprecated the config option `type: alexa` for the Emulated Hue component: + +> Alexa type is deprecated and will be removed in a future version + +That config option should never have been called `type: alexa` but instead have been called `mode: legacy`. If you think about it, why would emulating something even have different modes it emulates based on the consumer? That means that one of the two emulation modes is incorrect. + +The old implementation was not 100% correct. It was correct enough to work with Alexa (the original target) but not with Google Home. When fixing Emulated Hue we added `type: alexa` to re-enable the old implementation so that people did not have to go through the trouble to re-add their Alexa devices. The option was deprecated to indicate that we would remove the incorrect emulation in the future. However, we forgot about actually following through with that. + +The mistake we made was calling the correct mode `google_home` although it had nothing to do with Google Home. It confused people and they kept adding `type: alexa` to their configuration, triggering the deprecation warning. + +The warning will be updated starting Home Assistant 0.62 and will also include a link to this blog post. + +More info: + +- To read about what was incorrect in the first version of Emulated Hue, take a look at the PR fixing it: [Re-org emulated_hue and fix google home][pr1]. +- Read the [documentation on how to configure Emulated Hue][eh-conf] + +[pr1]: https://github.com/home-assistant/home-assistant/pull/4708 +[pr2]: https://github.com/home-assistant/home-assistant/pull/5549 +[eh-conf]: https://home-assistant.io/components/emulated_hue/#configuration diff --git a/source/assets/get_lutron_cert.zip b/source/assets/get_lutron_cert.zip new file mode 100644 index 00000000000..b3849e8a412 Binary files /dev/null and b/source/assets/get_lutron_cert.zip differ diff --git a/source/assets/jwplayer/glow/controlbar/background.png b/source/assets/jwplayer/glow/controlbar/background.png index c2824cc432c..e932cb09a99 100644 Binary files a/source/assets/jwplayer/glow/controlbar/background.png and b/source/assets/jwplayer/glow/controlbar/background.png differ diff --git a/source/assets/jwplayer/glow/controlbar/divider.png b/source/assets/jwplayer/glow/controlbar/divider.png index 77cd829a4b5..021685f4b0a 100644 Binary files a/source/assets/jwplayer/glow/controlbar/divider.png and b/source/assets/jwplayer/glow/controlbar/divider.png differ diff --git a/source/assets/jwplayer/glow/controlbar/fullscreenButton.png b/source/assets/jwplayer/glow/controlbar/fullscreenButton.png index e06aa50ca29..9d3291e8e59 100644 Binary files a/source/assets/jwplayer/glow/controlbar/fullscreenButton.png and b/source/assets/jwplayer/glow/controlbar/fullscreenButton.png differ diff --git a/source/assets/jwplayer/glow/controlbar/fullscreenButtonOver.png b/source/assets/jwplayer/glow/controlbar/fullscreenButtonOver.png index d2bc4fc75a8..ef55acc7ca4 100644 Binary files a/source/assets/jwplayer/glow/controlbar/fullscreenButtonOver.png and b/source/assets/jwplayer/glow/controlbar/fullscreenButtonOver.png differ diff --git a/source/assets/jwplayer/glow/controlbar/muteButtonOver.png b/source/assets/jwplayer/glow/controlbar/muteButtonOver.png index 96fe7bb0242..091cc054a2a 100644 Binary files a/source/assets/jwplayer/glow/controlbar/muteButtonOver.png and b/source/assets/jwplayer/glow/controlbar/muteButtonOver.png differ diff --git a/source/assets/jwplayer/glow/controlbar/normalscreenButton.png b/source/assets/jwplayer/glow/controlbar/normalscreenButton.png index 22295074029..f7c23cd5ba1 100644 Binary files a/source/assets/jwplayer/glow/controlbar/normalscreenButton.png and b/source/assets/jwplayer/glow/controlbar/normalscreenButton.png differ diff --git a/source/assets/jwplayer/glow/controlbar/normalscreenButtonOver.png b/source/assets/jwplayer/glow/controlbar/normalscreenButtonOver.png index 15db44d4e66..1f6aebd73ae 100644 Binary files a/source/assets/jwplayer/glow/controlbar/normalscreenButtonOver.png and b/source/assets/jwplayer/glow/controlbar/normalscreenButtonOver.png differ diff --git a/source/assets/jwplayer/glow/controlbar/pauseButton.png b/source/assets/jwplayer/glow/controlbar/pauseButton.png index e399bf34cb9..e6ab8aa55a3 100644 Binary files a/source/assets/jwplayer/glow/controlbar/pauseButton.png and b/source/assets/jwplayer/glow/controlbar/pauseButton.png differ diff --git a/source/assets/jwplayer/glow/controlbar/pauseButtonOver.png b/source/assets/jwplayer/glow/controlbar/pauseButtonOver.png index 409d89d29a3..8dcf0c5bfcc 100644 Binary files a/source/assets/jwplayer/glow/controlbar/pauseButtonOver.png and b/source/assets/jwplayer/glow/controlbar/pauseButtonOver.png differ diff --git a/source/assets/jwplayer/glow/controlbar/playButtonOver.png b/source/assets/jwplayer/glow/controlbar/playButtonOver.png index 3fe284845fa..6898116a3b7 100644 Binary files a/source/assets/jwplayer/glow/controlbar/playButtonOver.png and b/source/assets/jwplayer/glow/controlbar/playButtonOver.png differ diff --git a/source/assets/jwplayer/glow/controlbar/timeSliderBuffer.png b/source/assets/jwplayer/glow/controlbar/timeSliderBuffer.png index 73b371abbca..5e151d69c8c 100644 Binary files a/source/assets/jwplayer/glow/controlbar/timeSliderBuffer.png and b/source/assets/jwplayer/glow/controlbar/timeSliderBuffer.png differ diff --git a/source/assets/jwplayer/glow/controlbar/timeSliderCapLeft.png b/source/assets/jwplayer/glow/controlbar/timeSliderCapLeft.png index 72322171bd5..e89fc5c6afc 100644 Binary files a/source/assets/jwplayer/glow/controlbar/timeSliderCapLeft.png and b/source/assets/jwplayer/glow/controlbar/timeSliderCapLeft.png differ diff --git a/source/assets/jwplayer/glow/controlbar/timeSliderCapRight.png b/source/assets/jwplayer/glow/controlbar/timeSliderCapRight.png index 626444a66a7..ae47e9018b3 100644 Binary files a/source/assets/jwplayer/glow/controlbar/timeSliderCapRight.png and b/source/assets/jwplayer/glow/controlbar/timeSliderCapRight.png differ diff --git a/source/assets/jwplayer/glow/controlbar/timeSliderRail.png b/source/assets/jwplayer/glow/controlbar/timeSliderRail.png index 27851dfdf36..63692be0b75 100644 Binary files a/source/assets/jwplayer/glow/controlbar/timeSliderRail.png and b/source/assets/jwplayer/glow/controlbar/timeSliderRail.png differ diff --git a/source/assets/jwplayer/glow/controlbar/unmuteButton.png b/source/assets/jwplayer/glow/controlbar/unmuteButton.png index 3658453cfc1..6433b4d476a 100644 Binary files a/source/assets/jwplayer/glow/controlbar/unmuteButton.png and b/source/assets/jwplayer/glow/controlbar/unmuteButton.png differ diff --git a/source/assets/jwplayer/glow/controlbar/unmuteButtonOver.png b/source/assets/jwplayer/glow/controlbar/unmuteButtonOver.png index 138ebb35ba8..206be887e0a 100644 Binary files a/source/assets/jwplayer/glow/controlbar/unmuteButtonOver.png and b/source/assets/jwplayer/glow/controlbar/unmuteButtonOver.png differ diff --git a/source/assets/jwplayer/glow/display/background.png b/source/assets/jwplayer/glow/display/background.png index 391152f5e2f..eb7c709d39b 100644 Binary files a/source/assets/jwplayer/glow/display/background.png and b/source/assets/jwplayer/glow/display/background.png differ diff --git a/source/assets/jwplayer/glow/display/bufferIcon.png b/source/assets/jwplayer/glow/display/bufferIcon.png index a3819c1ef19..10ae39736ad 100644 Binary files a/source/assets/jwplayer/glow/display/bufferIcon.png and b/source/assets/jwplayer/glow/display/bufferIcon.png differ diff --git a/source/assets/jwplayer/glow/display/muteIcon.png b/source/assets/jwplayer/glow/display/muteIcon.png index e0408bbda5e..8e078ae4387 100644 Binary files a/source/assets/jwplayer/glow/display/muteIcon.png and b/source/assets/jwplayer/glow/display/muteIcon.png differ diff --git a/source/assets/jwplayer/glow/display/playIcon.png b/source/assets/jwplayer/glow/display/playIcon.png index cb384278722..269e4311bcb 100644 Binary files a/source/assets/jwplayer/glow/display/playIcon.png and b/source/assets/jwplayer/glow/display/playIcon.png differ diff --git a/source/assets/jwplayer/glow/dock/button.png b/source/assets/jwplayer/glow/dock/button.png index 391152f5e2f..eb7c709d39b 100644 Binary files a/source/assets/jwplayer/glow/dock/button.png and b/source/assets/jwplayer/glow/dock/button.png differ diff --git a/source/assets/jwplayer/glow/playlist/item.png b/source/assets/jwplayer/glow/playlist/item.png index 812592c3ce5..825911836fb 100644 Binary files a/source/assets/jwplayer/glow/playlist/item.png and b/source/assets/jwplayer/glow/playlist/item.png differ diff --git a/source/assets/jwplayer/glow/playlist/itemOver.png b/source/assets/jwplayer/glow/playlist/itemOver.png index 549f3721d6b..cbb7e34d85f 100644 Binary files a/source/assets/jwplayer/glow/playlist/itemOver.png and b/source/assets/jwplayer/glow/playlist/itemOver.png differ diff --git a/source/assets/jwplayer/glow/playlist/sliderCapBottom.png b/source/assets/jwplayer/glow/playlist/sliderCapBottom.png index 048cc623be9..61c6dfbbba0 100644 Binary files a/source/assets/jwplayer/glow/playlist/sliderCapBottom.png and b/source/assets/jwplayer/glow/playlist/sliderCapBottom.png differ diff --git a/source/assets/jwplayer/glow/playlist/sliderCapTop.png b/source/assets/jwplayer/glow/playlist/sliderCapTop.png index 65c463a0c04..4d6dae6290f 100644 Binary files a/source/assets/jwplayer/glow/playlist/sliderCapTop.png and b/source/assets/jwplayer/glow/playlist/sliderCapTop.png differ diff --git a/source/assets/jwplayer/glow/playlist/sliderRail.png b/source/assets/jwplayer/glow/playlist/sliderRail.png index 121778affdc..2b455a6ff85 100644 Binary files a/source/assets/jwplayer/glow/playlist/sliderRail.png and b/source/assets/jwplayer/glow/playlist/sliderRail.png differ diff --git a/source/assets/jwplayer/glow/sharing/embedScreen.png b/source/assets/jwplayer/glow/sharing/embedScreen.png index b4059754baf..dabce156c23 100644 Binary files a/source/assets/jwplayer/glow/sharing/embedScreen.png and b/source/assets/jwplayer/glow/sharing/embedScreen.png differ diff --git a/source/assets/jwplayer/glow/sharing/shareIcon.png b/source/assets/jwplayer/glow/sharing/shareIcon.png index eae1d4e7559..b659a20c3b5 100644 Binary files a/source/assets/jwplayer/glow/sharing/shareIcon.png and b/source/assets/jwplayer/glow/sharing/shareIcon.png differ diff --git a/source/assets/jwplayer/glow/sharing/shareScreen.png b/source/assets/jwplayer/glow/sharing/shareScreen.png index 695ec949f86..2435d3777eb 100644 Binary files a/source/assets/jwplayer/glow/sharing/shareScreen.png and b/source/assets/jwplayer/glow/sharing/shareScreen.png differ diff --git a/source/demo/favicon-192x192.png b/source/demo/favicon-192x192.png index 2959efdf89d..3cd8005a166 100644 Binary files a/source/demo/favicon-192x192.png and b/source/demo/favicon-192x192.png differ diff --git a/source/demo/favicon-apple-180x180.png b/source/demo/favicon-apple-180x180.png index 20117d00f22..03b5dd7780c 100644 Binary files a/source/demo/favicon-apple-180x180.png and b/source/demo/favicon-apple-180x180.png differ diff --git a/source/demo/images/config_philips_hue.jpg b/source/demo/images/config_philips_hue.jpg index f10d258bf34..fd31dc7bbbf 100644 Binary files a/source/demo/images/config_philips_hue.jpg and b/source/demo/images/config_philips_hue.jpg differ diff --git a/source/demo/images/thrones.jpg b/source/demo/images/thrones.jpg index 227a9955380..0c57c03db5d 100644 Binary files a/source/demo/images/thrones.jpg and b/source/demo/images/thrones.jpg differ diff --git a/source/demo/webcam.jpg b/source/demo/webcam.jpg index 4d6b94348c4..215a4da7b06 100644 Binary files a/source/demo/webcam.jpg and b/source/demo/webcam.jpg differ diff --git a/source/developers/api.markdown b/source/developers/api.markdown index b46b1fdc4d4..999647d0382 100644 --- a/source/developers/api.markdown +++ b/source/developers/api.markdown @@ -12,7 +12,10 @@ 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/) + * [WebSocket API](/developers/websocket_api/) * [REST API](/developers/rest_api/) * [Python REST API](/developers/python_api/) * [Server-sent events](/developers/server_sent_events/) + +If you are not using the [`frontend`](/components/frontend/) in your setup then you need to enable the components by adding them to your `configuration.yaml` file. E.g., [`websocket_api:`](/components/websocket_api/) for the WebSocket API or [`api:`](/components/api/) for the [REST API](/developers/rest_api/) and the [Python REST API](/developers/python_api/). + diff --git a/source/developers/architecture_components.markdown b/source/developers/architecture_components.markdown index 095a4f73781..ac05c93ba03 100644 --- a/source/developers/architecture_components.markdown +++ b/source/developers/architecture_components.markdown @@ -51,7 +51,7 @@ In the event of the sun setting: 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. +Look [here](/python_component_automation/) for a comprehensive example of a home automation component. ### {% linkable_title The full picture %} diff --git a/source/developers/code_review_component.markdown b/source/developers/code_review_component.markdown index 4d708290c54..9b7bdff4601 100644 --- a/source/developers/code_review_component.markdown +++ b/source/developers/code_review_component.markdown @@ -15,21 +15,22 @@ 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 %} +### {% linkable_title 1. 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 %} +### {% linkable_title 2. 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` + 4. If your component has platforms, define a `PLATFORM_SCHEMA` instead of a `CONFIG_SCHEMA`. + 5. If using a `PLATFORM_SCHEMA` to be used with `EntityComponent`, import base from `homeassistant.helpers.config_validation` + 6. Never depend on users adding things to `customize` to configure behavior inside your component. -### {% linkable_title Component/platform communication %} +### {% linkable_title 3. 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`. diff --git a/source/developers/code_review_platform.markdown b/source/developers/code_review_platform.markdown index 0361d4bfc70..96f78c60a0c 100644 --- a/source/developers/code_review_platform.markdown +++ b/source/developers/code_review_platform.markdown @@ -27,28 +27,28 @@ Not all existing platforms follow the requirements in this checklist. This canno ### {% linkable_title 3. Configuration %} - 1. Volutpuous schema present for config validation + 1. Voluptuous 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` + 4. Your `PLATFORM_SCHEMA` should use as many generic config keys as possible from `homeassistant.const` + ```python + import voluptuous as vol -```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 -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 -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, -}) -``` + 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, + }) + ``` + 5. Never depend on users adding things to `customize` to configure behavior inside your platform. ### {% linkable_title 4. Setup Platform %} @@ -61,11 +61,12 @@ PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({ 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')) diff --git a/source/developers/component_discovery.markdown b/source/developers/component_discovery.markdown index bdf66005e86..2911adaa26d 100644 --- a/source/developers/component_discovery.markdown +++ b/source/developers/component_discovery.markdown @@ -2,7 +2,7 @@ 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 @@ -23,22 +23,38 @@ To have your device be discovered, you will have to extend the NetDisco library ### {% 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: +From your component, you will have to set up the listening for specific services. Given below is an example how one would listen for a discovered AwesomeDevice: ```python -from homeassistant.loader import get_component +from homeassistant.components.discovery import SERVICE_AWESOMEDEVICE +from homeassistant.helpers import discovery + +DOMAIN = 'awesomedevice' + +DEPENDENCIES = ['http'] def setup(hass, config): - discovery = get_component('discovery') + cfg = config.get(DOMAIN) - def chromecast_discovered(service, info): - """ Called when a Chromecast has been discovered. """ - print("Discovered a new Chromecast: {}".format(info)) + def device_discovered(service, info): + """ Called when a Awesome device has been discovered. """ + print("Discovered a new Awesome device: {}".format(info)) discovery.listen( - hass, discovery.services.GOOGLE_CAST, chromecast_discovered) + hass, SERVICE_AWESOMEDEVICE, device_discovered) + + return True ``` ### {% 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). +The `discovery` component is capable of setting up your components before firing the `EVENT_PLATFORM_DISCOVERED` 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#L40) constant in [the `discovery` component](https://github.com/home-assistant/home-assistant/blob/dev/homeassistant/components/discovery.py): + +```python +SERVICE_AWESOMEDEVICE = 'awesomedevice' + +SERVICE_HANDLERS = { + ... + SERVICE_AWESOMEDEVICE: ('awesomedevice', None), +} +``` diff --git a/source/developers/credits.markdown b/source/developers/credits.markdown index 9d447d5b141..9e5a224e4b6 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-10-31 19:14:47 +0000 +date: 2018-01-13 18:07:58 +0000 sidebar: true comments: false sharing: true @@ -13,26 +13,21 @@ 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 "5895 total commits to the home-assistant organization, 3516 commits to home-assistant, 1279 commits to home-assistant.github.io, 619 commits to home-assistant-polymer, 244 commits to home-assistant-js, 117 commits to netdisco, 44 commits to home-assistant-js-websocket, 24 commits to hass-release, 14 commits to home-assistant-assets, 8 commits to example-custom-config, 7 commits to micropython-home-assistant, 5 commits to LabelBot, 4 commits to hassio, 3 commits to hassio-addons, 2 commits to issue-bot, 2 commits to hassio-addons-example, 2 commits to python-hassbian, 2 commits to lambda-home-assistant-github, 1 commit to hassio-build, 1 commit to home-assistant-notebooks, 1 commit to home-assistant-iOS") +- [Paulus Schoutsen (@balloob)](https://github.com/balloob "6125 total commits to the home-assistant organization, 3619 commits to home-assistant, 1332 commits to home-assistant.github.io, 682 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, 10 commits to LabelBot, 8 commits to example-custom-config, 7 commits to micropython-home-assistant, 5 commits to hassio, 3 commits to hassio-addons, 2 commits to hassio-addons-example, 2 commits to hassio-build, 2 commits to python-hassbian, 2 commits to issue-bot, 2 commits to lambda-home-assistant-github, 1 commit to home-assistant-notebooks, 1 commit to warrant, 1 commit to home-assistant-iOS") ### {% 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 "28 total commits to the home-assistant organization, 18 commits to home-assistant, 10 commits to home-assistant.github.io") +- [Aaron Bach (@bachya)](https://github.com/bachya "36 total commits to the home-assistant organization, 23 commits to home-assistant, 13 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 "18 total commits to the home-assistant organization, 11 commits to home-assistant, 4 commits to home-assistant.github.io, 1 commit to home-assistant-js-websocket, 1 commit to home-assistant-polymer, 1 commit to netdisco") -- [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 "6 total commits to the home-assistant organization, 6 commits 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 "8 total commits to the home-assistant organization, 8 commits to home-assistant.github.io") +- [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 "228 total commits to the home-assistant organization, 141 commits to home-assistant, 42 commits to home-assistant.github.io, 41 commits to home-assistant-polymer, 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") +- [Adam Mills (@armills)](https://github.com/armills "286 total commits to the home-assistant organization, 150 commits to home-assistant, 81 commits to home-assistant-polymer, 51 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 "1 total commits to the home-assistant organization, 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") @@ -40,214 +35,212 @@ This page contains a list of people who have contributed in one way or another t - [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") - [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") - [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") - [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 (@alexrockt)](https://github.com/alexrockt "1 total commits to the home-assistant organization, 1 commit 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 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 (@asbach)](https://github.com/asbach "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") +- [Alex Barcelo (@alexbarcelo)](https://github.com/alexbarcelo "3 total commits to the home-assistant organization, 3 commits to hassio-addons") +- [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 hassio-os") +- [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 Tzonkov (@attzonko)](https://github.com/attzonko "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") - [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 "102 total commits to the home-assistant organization, 59 commits to home-assistant.github.io, 41 commits to home-assistant, 1 commit to hassio-addons, 1 commit to pi-gen") +- [Aliaksandr (@minchik)](https://github.com/minchik "7 total commits to the home-assistant organization, 3 commits to home-assistant.github.io, 2 commits to home-assistant, 2 commits to appdaemon") +- [Alok Saboo (@arsaboo)](https://github.com/arsaboo "125 total commits to the home-assistant organization, 75 commits to home-assistant.github.io, 45 commits to home-assistant, 3 commits to home-assistant-polymer, 1 commit to pi-gen, 1 commit to hassio-addons") - [amigian74 (@amigian74)](https://github.com/amigian74 "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [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 "107 total commits to the home-assistant organization, 78 commits to home-assistant, 27 commits to home-assistant.github.io, 2 commits to home-assistant-polymer") +- [Anders Melchiorsen (@amelchio)](https://github.com/amelchio "126 total commits to the home-assistant organization, 91 commits to home-assistant, 33 commits to home-assistant.github.io, 2 commits to home-assistant-polymer") +- [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") - [Andrea Falcone (@asfalcone)](https://github.com/asfalcone "5 total commits to the home-assistant organization, 5 commits to issue-bot") -- [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") +- [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 "625 total commits to the home-assistant organization, 494 commits to appdaemon, 88 commits to hadashboard, 25 commits to scenegen, 18 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") +- [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 "4 total commits to the home-assistant organization, 4 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 "692 total commits to the home-assistant organization, 560 commits to appdaemon, 88 commits to hadashboard, 25 commits to scenegen, 19 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-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 "195 total commits to the home-assistant organization, 91 commits to home-assistant, 73 commits to home-assistant-polymer, 31 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 "264 total commits to the home-assistant organization, 116 commits to home-assistant-polymer, 111 commits to home-assistant, 37 commits to home-assistant.github.io") +- [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 "2 total commits to the home-assistant organization, 2 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 "8 total commits to the home-assistant organization, 5 commits to home-assistant, 3 commits to home-assistant.github.io") +- [Andy Castille (@Klikini)](https://github.com/Klikini "11 total commits to the home-assistant organization, 7 commits to home-assistant, 4 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") -- [Anthony Hughes (@tony2nite)](https://github.com/tony2nite "2 total commits to the home-assistant organization, 1 commit to netdisco, 1 commit to home-assistant") +- [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 "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 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") - [apo-mak (@apo-mak)](https://github.com/apo-mak "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") - [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") -- [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") -- [arretx (@arretx)](https://github.com/arretx "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [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") - [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") - [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") +- [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 "11 total commits to the home-assistant organization, 10 commits to home-assistant.github.io, 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 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 Randall (@veleek)](https://github.com/veleek "3 total commits to the home-assistant organization, 3 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") -- [Benjamin Affolter (@bliemli)](https://github.com/bliemli "31 total commits to the home-assistant organization, 31 commits to home-assistant-ansible") - [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") - [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") - [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 "4 total commits to the home-assistant organization, 4 commits to home-assistant") +- [Bob Igo (@Human)](https://github.com/Human "2 total commits to the home-assistant organization, 2 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") +- [Boyi C (@fanthos)](https://github.com/fanthos "11 total commits to the home-assistant organization, 6 commits to home-assistant-polymer, 3 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") +- [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 Karani Ndwiga (@rayrayndwiga)](https://github.com/rayrayndwiga "1 total commits to the home-assistant organization, 1 commit to home-assistant") -- [Brian Torres-Gil (@btorresgil)](https://github.com/btorresgil "1 total commits to the home-assistant organization, 1 commit to home-assistant") +- [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 "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") +- [c727 (@c727)](https://github.com/c727 "18 total commits to the home-assistant organization, 11 commits to home-assistant-polymer, 7 commits to home-assistant.github.io") - [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 "4 total commits to the home-assistant organization, 2 commits to home-assistant.github.io, 1 commit to netdisco, 1 commit to home-assistant") -- [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 homebridge-homeassistant, 1 commit to hassbian-scripts") +- [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 "95 total commits to the home-assistant organization, 87 commits to home-assistant.github.io, 5 commits to home-assistant, 1 commit to fabric-home-assistant, 1 commit to homebridge-homeassistant, 1 commit to hassbian-scripts") - [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 "3 total commits to the home-assistant organization, 2 commits to home-assistant.github.io, 1 commit to home-assistant") -- [Casper Weiss Bang (@C0DK)](https://github.com/C0DK "1 total commits to the home-assistant organization, 1 commit to home-assistant") -- [cdce8p (@cdce8p)](https://github.com/cdce8p "12 total commits to the home-assistant organization, 8 commits to home-assistant.github.io, 2 commits to home-assistant-polymer, 2 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 "21 total commits to the home-assistant organization, 12 commits to home-assistant.github.io, 7 commits to home-assistant, 2 commits to home-assistant-polymer") - [Cecron (@Cecron)](https://github.com/Cecron "1 total commits to the home-assistant organization, 1 commit to appdaemon") - [Cenk Gündoğan (@cgundogan)](https://github.com/cgundogan "1 total commits to the home-assistant organization, 1 commit to libcoap") -- [cgtobi (@cgtobi)](https://github.com/cgtobi "11 total commits to the home-assistant organization, 6 commits to home-assistant, 5 commits to home-assistant.github.io") +- [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 "22 total commits to the home-assistant organization, 13 commits to home-assistant, 9 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 "15 total commits to the home-assistant organization, 11 commits to home-assistant.github.io, 4 commits to home-assistant") +- [Charles Garwood (@cgarwood)](https://github.com/cgarwood "17 total commits to the home-assistant organization, 11 commits to home-assistant.github.io, 6 commits to home-assistant") - [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") -- [Chema García (@sch3m4)](https://github.com/sch3m4 "1 total commits to the home-assistant organization, 1 commit to home-assistant") - [Chia-liang Kao (@clkao)](https://github.com/clkao "2 total commits to the home-assistant organization, 2 commits to home-assistant") -- [Chris (@firstof9)](https://github.com/firstof9 "1 total commits to the home-assistant organization, 1 commit 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 Baumgartner (@mchrisb03)](https://github.com/mchrisb03 "1 total commits to the home-assistant organization, 1 commit to home-assistant") - [Chris Huegle (@chuegle)](https://github.com/chuegle "1 total commits to the home-assistant organization, 1 commit to netdisco") -- [Chris Kacerguis (@chriskacerguis)](https://github.com/chriskacerguis "1 total commits to the home-assistant organization, 1 commit to home-assistant") - [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 "6 total commits to the home-assistant organization, 6 commits to home-assistant.github.io") +- [Chris Thorn (@chris-thorn)](https://github.com/chris-thorn "7 total commits to the home-assistant organization, 7 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 "7 total commits to the home-assistant organization, 7 commits to home-assistant") +- [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 "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") -- [ChristianKuehnel (@ChristianKuehnel)](https://github.com/ChristianKuehnel "6 total commits to the home-assistant organization, 3 commits to home-assistant.github.io, 3 commits to home-assistant") -- [Christoph Wagner (@Christoph-Wagner)](https://github.com/Christoph-Wagner "5 total commits to the home-assistant organization, 4 commits to home-assistant.github.io, 1 commit to home-assistant") -- [Christopher Viel (@Chris-V)](https://github.com/Chris-V "3 total commits to the home-assistant organization, 2 commits to home-assistant.github.io, 1 commit to home-assistant") +- [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 "15 total commits to the home-assistant organization, 8 commits to home-assistant, 7 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 "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") -- [Clemens Wolff (@c-w)](https://github.com/c-w "1 total commits to the home-assistant organization, 1 commit to home-assistant") -- [Colin Dunn (@colindunn)](https://github.com/colindunn "1 total commits to the home-assistant organization, 1 commit to home-assistant") +- [cogneato (@cogneato)](https://github.com/cogneato "3 total commits to the home-assistant organization, 3 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") -- [Conrad Juhl Andersen (@cnrd)](https://github.com/cnrd "1 total commits to the home-assistant organization, 1 commit to home-assistant") +- [Colin Teubner (@netopiax)](https://github.com/netopiax "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") +- [Conrad Juhl Andersen (@cnrd)](https://github.com/cnrd "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [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 "19 total commits to the home-assistant organization, 18 commits to home-assistant.github.io, 1 commit to home-assistant") +- [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 "14 total commits to the home-assistant organization, 9 commits to home-assistant, 5 commits to home-assistant.github.io") -- [CTLS (@CTLS)](https://github.com/CTLS "1 total commits to the home-assistant organization, 1 commit to home-assistant") +- [Craig J. Ward (@wardcraigj)](https://github.com/wardcraigj "23 total commits to the home-assistant organization, 17 commits to home-assistant, 6 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") - [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") - [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 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 "14 total commits to the home-assistant organization, 12 commits to home-assistant, 2 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 "17 total commits to the home-assistant organization, 12 commits to home-assistant, 5 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 "362 total commits to the home-assistant organization, 241 commits to home-assistant, 119 commits to home-assistant.github.io, 2 commits to home-assistant-polymer") -- [Daniel Perna (@danielperna84)](https://github.com/danielperna84 "65 total commits to the home-assistant organization, 34 commits to home-assistant.github.io, 29 commits to home-assistant, 2 commits to hassio-addons") +- [Daniel Høyer Iversen (@Danielhiversen)](https://github.com/Danielhiversen "367 total commits to the home-assistant organization, 245 commits to home-assistant, 119 commits to home-assistant.github.io, 3 commits to home-assistant-polymer") +- [Daniel Perna (@danielperna84)](https://github.com/danielperna84 "77 total commits to the home-assistant organization, 38 commits to home-assistant.github.io, 35 commits to home-assistant, 4 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 Trnka (@trnila)](https://github.com/trnila "2 total commits to the home-assistant organization, 2 commits to appdaemon") -- [Daniel Watkins (@OddBloke)](https://github.com/OddBloke "4 total commits to the home-assistant organization, 4 commits to home-assistant-ansible") +- [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 "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") - [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 Grant (@davegravy)](https://github.com/davegravy "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") +- [David (@fanaticDavid)](https://github.com/fanaticDavid "13 total commits to the home-assistant organization, 10 commits to home-assistant.github.io, 2 commits to home-assistant, 1 commit to home-assistant-polymer") +- [David De Sloovere (@DavidDeSloovere)](https://github.com/DavidDeSloovere "7 total commits to the home-assistant organization, 7 commits to home-assistant.github.io") +- [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 Ohayon (@ohayon)](https://github.com/ohayon "3 total commits to the home-assistant organization, 3 commits to issue-bot") @@ -258,94 +251,106 @@ This page contains a list of people who have contributed in one way or another t - [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") - [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") - [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") -- [Derek (@itchaboy)](https://github.com/itchaboy "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") +- [Derek (@itchaboy)](https://github.com/itchaboy "5 total commits to the home-assistant organization, 5 commits to home-assistant.github.io") +- [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 "3 total commits to the home-assistant organization, 2 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") -- [Diogo Gomes (@dgomes)](https://github.com/dgomes "4 total commits to the home-assistant organization, 2 commits to home-assistant, 2 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 "10 total commits to the home-assistant organization, 6 commits to home-assistant, 4 commits to home-assistant.github.io") +- [DoloresHA (@DoloresHA)](https://github.com/DoloresHA "2 total commits to the home-assistant organization, 2 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, 2 commits to home-assistant.github.io") - [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") - [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 "47 total commits to the home-assistant organization, 47 commits to home-assistant.github.io") +- [DubhAd (@DubhAd)](https://github.com/DubhAd "107 total commits to the home-assistant organization, 107 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") +- [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- "4 total commits to the home-assistant organization, 2 commits to home-assistant, 2 commits to home-assistant.github.io") -- [Egor Tsinko (@etsinko)](https://github.com/etsinko "7 total commits to the home-assistant organization, 5 commits to home-assistant, 2 commits to home-assistant.github.io") +- [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 "6 total commits to the home-assistant organization, 3 commits to home-assistant, 2 commits to home-assistant.github.io, 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.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 "9 total commits to the home-assistant organization, 4 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 "3 total commits to the home-assistant organization, 2 commits to home-assistant, 1 commit to home-assistant-polymer") +- [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 "98 total commits to the home-assistant organization, 90 commits to home-assistant, 5 commits to home-assistant.github.io, 3 commits to netdisco") +- [Erik Eriksson (@molobrakos)](https://github.com/molobrakos "111 total commits to the home-assistant organization, 97 commits to home-assistant, 11 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") - [ettisan (@ettisan)](https://github.com/ettisan "8 total commits to the home-assistant organization, 8 commits to home-assistant") -- [Eugenio Panadero (@azogue)](https://github.com/azogue "73 total commits to the home-assistant organization, 44 commits to home-assistant, 23 commits to home-assistant.github.io, 3 commits to homebridge-homeassistant, 3 commits to home-assistant-polymer") -- [Fabian Affolter (@fabaff)](https://github.com/fabaff "4325 total commits to the home-assistant organization, 2710 commits to home-assistant.github.io, 1411 commits to home-assistant, 61 commits to home-assistant-ansible, 29 commits to home-assistant-dev-helper, 29 commits to home-assistant-notebooks, 24 commits to home-assistant-assets, 24 commits to home-assistant-cli, 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") +- [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") +- [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 "4452 total commits to the home-assistant organization, 2870 commits to home-assistant.github.io, 1483 commits to home-assistant, 32 commits to home-assistant-assets, 30 commits to home-assistant-notebooks, 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") - [Fabian Heredia Montiel (@fabianhjr)](https://github.com/fabianhjr "4 total commits to the home-assistant organization, 4 commits to home-assistant") +- [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.github.io, 4 commits to home-assistant, 3 commits to netdisco") -- [Florian Klien (@flowolf)](https://github.com/flowolf "11 total commits to the home-assistant organization, 8 commits to home-assistant.github.io, 3 commits to home-assistant") -- [florincosta (@florincosta)](https://github.com/florincosta "6 total commits to the home-assistant organization, 3 commits to home-assistant.github.io, 3 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 "16 total commits to the home-assistant organization, 13 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 "17 total commits to the home-assistant organization, 13 commits to home-assistant.github.io, 2 commits to hassio, 2 commits to home-assistant-polymer") - [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 "7 total commits to the home-assistant organization, 3 commits to home-assistant, 2 commits to netdisco, 2 commits to home-assistant.github.io") - [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") +- [Fredrik Lindqvist (@Landrash)](https://github.com/Landrash "176 total commits to the home-assistant organization, 74 commits to hassbian-scripts, 70 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") - [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") -- [Georgi Kirichkov (@kirichkov)](https://github.com/kirichkov "16 total commits to the home-assistant organization, 10 commits to home-assistant.github.io, 5 commits to home-assistant, 1 commit to appdaemon") -- [Georgi Yanev (@jumpalottahigh)](https://github.com/jumpalottahigh "4 total commits to the home-assistant organization, 2 commits to home-assistant-polymer, 2 commits to home-assistant.github.io") +- [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 "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") +- [gerard33 (@gerard33)](https://github.com/gerard33 "3 total commits to the home-assistant organization, 3 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 "4 total commits to the home-assistant organization, 2 commits to home-assistant, 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") - [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") - [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") +- [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 "83 total commits to the home-assistant organization, 75 commits to home-assistant.github.io, 8 commits to home-assistant") +- [Greg Dowling (@pavoni)](https://github.com/pavoni "251 total commits to the home-assistant organization, 224 commits to home-assistant, 25 commits to home-assistant.github.io, 2 commits to netdisco") +- [Greg Laabs (@OverloadUT)](https://github.com/OverloadUT "11 total commits to the home-assistant organization, 8 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") - [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") +- [Hamid (@hamid-elaosta)](https://github.com/hamid-elaosta "3 total commits to the home-assistant organization, 3 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") - [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 "10 total commits to the home-assistant organization, 5 commits to home-assistant, 4 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") - [Hellowlol (@Hellowlol)](https://github.com/Hellowlol "4 total commits to the home-assistant organization, 3 commits to netdisco, 1 commit to appdaemon") @@ -354,21 +359,20 @@ This page contains a list of people who have contributed in one way or another t - [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") - [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") -- [Hugo Dupras (@jabesq)](https://github.com/jabesq "27 total commits to the home-assistant organization, 19 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") +- [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 "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 "45 total commits to the home-assistant organization, 34 commits to home-assistant, 11 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.github.io, 3 commits to home-assistant") -- [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") +- [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 "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 "7 total commits to the home-assistant organization, 7 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") - [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") @@ -385,19 +389,19 @@ This page contains a list of people who have contributed in one way or another t - [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 "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") +- [Jan Almeroth (@jalmeroth)](https://github.com/jalmeroth "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") - [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 "18 total commits to the home-assistant organization, 14 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.github.io, 2 commits to home-assistant") +- [Jan Willhaus (@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 "5 total commits to the home-assistant organization, 3 commits to home-assistant, 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") - [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") - [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") -- [jbarrancos (@jbarrancos)](https://github.com/jbarrancos "39 total commits to the home-assistant organization, 39 commits to home-assistant") +- [JAYMAN-ATX (@JAYMAN-ATX)](https://github.com/JAYMAN-ATX "2 total commits to the home-assistant organization, 2 commits to homebridge-homeassistant") - [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") @@ -408,32 +412,35 @@ This page contains a list of people who have contributed in one way or another t - [Jens (@jhoepken)](https://github.com/jhoepken "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [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 "3 total commits to the home-assistant organization, 3 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 "19 total commits to the home-assistant organization, 12 commits to home-assistant, 7 commits to home-assistant.github.io") +- [Jeroen ter Heerdt (@jeroenterheerdt)](https://github.com/jeroenterheerdt "29 total commits to the home-assistant organization, 16 commits to home-assistant, 13 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") -- [JesseWebDotCom (@JesseWebDotCom)](https://github.com/JesseWebDotCom "16 total commits to the home-assistant organization, 8 commits to home-assistant.github.io, 8 commits to 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 "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") +- [Joakim Sørensen (@ludeeus)](https://github.com/ludeeus "28 total commits to the home-assistant organization, 15 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") +- [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 "12 total commits to the home-assistant organization, 9 commits to home-assistant, 3 commits to home-assistant.github.io") +- [Joe McMonagle (@joemcmonagle)](https://github.com/joemcmonagle "12 total commits to the home-assistant organization, 12 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 "1 total commits to the home-assistant organization, 1 commit to appdaemon") +- [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 van der Kuijl (@Rubyan)](https://github.com/Rubyan "3 total commits to the home-assistant organization, 2 commits to home-assistant.github.io, 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") - [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 "185 total commits to the home-assistant organization, 143 commits to home-assistant, 33 commits to home-assistant.github.io, 9 commits to home-assistant-polymer") +- [John Arild Berentsen (@turbokongen)](https://github.com/turbokongen "200 total commits to the home-assistant organization, 148 commits to home-assistant, 37 commits to home-assistant.github.io, 15 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 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") @@ -441,24 +448,27 @@ This page contains a list of people who have contributed in one way or another t - [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") - [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 "11 total commits to the home-assistant organization, 10 commits to home-assistant.github.io, 1 commit to appdaemon") - [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") - [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") - [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 "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 "24 total commits to the home-assistant organization, 15 commits to home-assistant, 9 commits to home-assistant.github.io") +- [Josh Anderson (@andersonshatch)](https://github.com/andersonshatch "7 total commits to the home-assistant organization, 4 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") -- [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 "11 total commits to the home-assistant organization, 8 commits to home-assistant, 3 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 "5 total commits to the home-assistant organization, 3 commits to home-assistant.github.io, 2 commits to home-assistant") +- [Julius Mittenzwei (@Julius2342)](https://github.com/Julius2342 "18 total commits to the home-assistant organization, 12 commits to home-assistant, 6 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") @@ -466,7 +476,7 @@ This page contains a list of people who have contributed in one way or another t - [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 "13 total commits to the home-assistant organization, 6 commits to home-assistant, 6 commits to home-assistant.github.io, 1 commit to netdisco") +- [Kane610 (@Kane610)](https://github.com/Kane610 "18 total commits to the home-assistant organization, 8 commits to home-assistant, 8 commits to home-assistant.github.io, 1 commit to netdisco, 1 commit to home-assistant-polymer") - [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") - [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") @@ -474,318 +484,300 @@ This page contains a list of people who have contributed in one way or another t - [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 Fronczak (@fronzbot)](https://github.com/fronzbot "18 total commits to the home-assistant organization, 11 commits to home-assistant, 7 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") +- [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") - [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 "9 total commits to the home-assistant organization, 5 commits to home-assistant, 4 commits to home-assistant.github.io") +- [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") - [Klaus (@k-laus)](https://github.com/k-laus "1 total commits to the home-assistant organization, 1 commit to appdaemon") - [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") -- [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") +- [kroimon (@kroimon)](https://github.com/kroimon "1 total commits to the home-assistant organization, 1 commit to netdisco") - [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") +- [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 "61 total commits to the home-assistant organization, 48 commits to home-assistant, 12 commits to home-assistant.github.io, 1 commit to home-assistant-polymer") +- [Lewis Juggins (@lwis)](https://github.com/lwis "64 total commits to the home-assistant organization, 51 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") - [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") - [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 "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") +- [Lukas Barth (@tinloaf)](https://github.com/tinloaf "27 total commits to the home-assistant organization, 15 commits to home-assistant, 10 commits to home-assistant.github.io, 2 commits 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 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") -- [Lupin Demid (@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") -- [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 "3 total commits to the home-assistant organization, 2 commits to home-assistant, 1 commit to home-assistant-polymer") -- [Maciej Sokołowski (@matemaciek)](https://github.com/matemaciek "3 total commits to the home-assistant organization, 2 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 "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 "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 "7 total commits to the home-assistant organization, 7 commits to home-assistant.github.io") +- [Mahasri Kalavala (@skalavala)](https://github.com/skalavala "10 total commits to the home-assistant organization, 10 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 "11 total commits to the home-assistant organization, 10 commits to home-assistant.github.io, 1 commit to fabric-home-assistant") +- [Marc Egli (@frog32)](https://github.com/frog32 "7 total commits to the home-assistant organization, 7 commits to home-assistant") +- [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") - [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 "132 total commits to the home-assistant organization, 72 commits to home-assistant, 58 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 "140 total commits to the home-assistant organization, 77 commits to home-assistant, 61 commits to home-assistant.github.io, 1 commit to home-assistant-assets, 1 commit to home-assistant-polymer") - [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") +- [Marcus Schmidt (@mar-schmidt)](https://github.com/mar-schmidt "2 total commits to the home-assistant organization, 2 commits to home-assistant") +- [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 "6 total commits to the home-assistant organization, 4 commits to home-assistant-polymer, 2 commits to home-assistant") +- [Mark Coombes (@marthoc)](https://github.com/marthoc "3 total commits to the home-assistant organization, 3 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") - [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") -- [marthoc (@marthoc)](https://github.com/marthoc "2 total commits to the home-assistant organization, 2 commits to home-assistant") -- [Martin Berg (@mbrrg)](https://github.com/mbrrg "5 total commits to the home-assistant organization, 3 commits to home-assistant, 2 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 "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") -- [Martin Hjelmare (@MartinHjelmare)](https://github.com/MartinHjelmare "138 total commits to the home-assistant organization, 112 commits to home-assistant, 26 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 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 "2 total commits to the home-assistant organization, 2 commits to home-assistant") +- [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 Vacula (@MatoKafkac)](https://github.com/MatoKafkac "2 total commits to the home-assistant organization, 2 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 "47 total commits to the home-assistant organization, 23 commits to home-assistant-iOS, 16 commits to home-assistant.github.io, 7 commits to home-assistant, 1 commit to home-assistant-polymer") +- [Mateusz Drab (@mateuszdrab)](https://github.com/mateuszdrab "2 total commits to the home-assistant organization, 2 commits to home-assistant") +- [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 "52 total commits to the home-assistant organization, 24 commits to home-assistant-iOS, 17 commits to home-assistant.github.io, 9 commits to home-assistant, 1 commit to homebridge-homeassistant, 1 commit to home-assistant-polymer") - [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 "26 total commits to the home-assistant organization, 19 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 "6 total commits to the home-assistant organization, 3 commits to home-assistant.github.io, 3 commits to home-assistant") -- [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 "37 total commits to the home-assistant organization, 23 commits to homebridge-homeassistant, 7 commits to home-assistant, 4 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, 5 commits to home-assistant.github.io") - [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 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 Treinish (@mtreinish)](https://github.com/mtreinish "20 total commits to the home-assistant organization, 13 commits to home-assistant, 7 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") +- [mauriciobonani (@mauriciobonani)](https://github.com/mauriciobonani "7 total commits to the home-assistant organization, 7 commits to home-assistant.github.io") - [Max Rumpf (@Maxr1998)](https://github.com/Maxr1998 "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") +- [maxlaverse (@maxlaverse)](https://github.com/maxlaverse "5 total commits to the home-assistant organization, 5 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 "6 total commits to the home-assistant organization, 3 commits to home-assistant.github.io, 2 commits to home-assistant, 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 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 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 "2 total commits to the home-assistant organization, 2 commits to home-assistant") +- [Michael Kutý (@michaelkuty)](https://github.com/michaelkuty "2 total commits to the home-assistant organization, 2 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") -- [Michel Settembrino (@MS-Informatique)](https://github.com/MS-Informatique "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") +- [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 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 "7 total commits to the home-assistant organization, 7 commits to home-assistant") - [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") - [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 "11 total commits to the home-assistant organization, 5 commits to home-assistant, 5 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 "16 total commits to the home-assistant organization, 10 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 "17 total commits to the home-assistant organization, 11 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 "2 total commits to the home-assistant organization, 2 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") +- [Mitko Masarliev (@masarliev)](https://github.com/masarliev "10 total commits to the home-assistant organization, 7 commits to home-assistant, 3 commits to home-assistant.github.io") - [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") +- [mmmmmtasty (@mmmmmtasty)](https://github.com/mmmmmtasty "8 total commits to the home-assistant organization, 8 commits to appdaemon") - [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 "5 total commits to the home-assistant organization, 5 commits to home-assistant.github.io") +- [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") - [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") - [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 "18 total commits to the home-assistant organization, 8 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") +- [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 home-assistant-polymer, 1 commit to appdaemon") - [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") - [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 "3 total commits to the home-assistant organization, 3 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 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 Vella (@nvella)](https://github.com/nvella "5 total commits to the home-assistant organization, 4 commits to home-assistant, 1 commit to homebridge-homeassistant") -- [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") +- [Nicholas Sielicki (@sielicki)](https://github.com/sielicki "2 total commits to the home-assistant organization, 2 commits to home-assistant") +- [Nick (@quadportnick)](https://github.com/quadportnick "2 total commits to the home-assistant organization, 2 commits to home-assistant") +- [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 Waring (@nickwaring)](https://github.com/nickwaring "2 total commits to the home-assistant organization, 2 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") +- [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") +- [Nikolas Beutler (@biacz)](https://github.com/biacz "2 total commits to the home-assistant organization, 2 commits to home-assistant") +- [Nolan Gilley (@nkgilley)](https://github.com/nkgilley "119 total commits to the home-assistant organization, 93 commits to home-assistant, 26 commits to home-assistant.github.io") - [NotoriousBDG (@notoriousbdg)](https://github.com/notoriousbdg "3 total commits to the home-assistant organization, 3 commits to hassio-addons") -- [ntalekt (@ntalekt)](https://github.com/ntalekt "5 total commits to the home-assistant organization, 5 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") +- [NovapaX (@NovapaX)](https://github.com/NovapaX "9 total commits to the home-assistant organization, 4 commits to home-assistant-polymer, 4 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 "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") +- [Oleksii Serdiuk (@leppa)](https://github.com/leppa "3 total commits to the home-assistant organization, 3 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 "24 total commits to the home-assistant organization, 14 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") -- [olskar (@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") -- [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 "3 total commits to the home-assistant organization, 3 commits to home-assistant") - [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 "2154 total commits to the home-assistant organization, 840 commits to hassio, 411 commits to home-assistant, 300 commits to hassio-addons, 298 commits to hassio-build, 287 commits to home-assistant.github.io, 16 commits to hassio-addons-example, 1 commit to home-assistant-js-websocket, 1 commit to netdisco") -- [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 "2335 total commits to the home-assistant organization, 917 commits to hassio, 446 commits to home-assistant, 323 commits to hassio-build, 315 commits to hassio-addons, 305 commits to home-assistant.github.io, 16 commits to hassio-addons-example, 10 commits to hassio-cli, 1 commit to netdisco, 1 commit to home-assistant-js-websocket, 1 commit to hassio-os") - [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 "3 total commits to the home-assistant organization, 3 commits to home-assistant") -- [Paul Jimenez (@pjz)](https://github.com/pjz "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") +- [Paul Hendry (@pshendry)](https://github.com/pshendry "1 total commits to the home-assistant organization, 1 commit to warrant") - [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 "5 total commits to the home-assistant organization, 5 commits to home-assistant") +- [Per Osbäck (@perosb)](https://github.com/perosb "12 total commits to the home-assistant organization, 12 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") - [Pete Peterson (@petey)](https://github.com/petey "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") -- [PetePriority (@PetePriority)](https://github.com/PetePriority "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") -- [Peter Epley (@epleypa)](https://github.com/epleypa "4 total commits to the home-assistant organization, 4 commits to home-assistant.github.io") +- [PeteBa (@PeteBa)](https://github.com/PeteBa "6 total commits to the home-assistant organization, 5 commits to home-assistant, 1 commit 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 Hawthorne (@philhawthorne)](https://github.com/philhawthorne "23 total commits to the home-assistant organization, 17 commits to home-assistant.github.io, 6 commits to home-assistant") -- [Phil Kates (@philk)](https://github.com/philk "5 total commits to the home-assistant organization, 3 commits to home-assistant, 2 commits to home-assistant.github.io") -- [Phileep (@Phileep)](https://github.com/Phileep "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") +- [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 "5 total commits to the home-assistant organization, 5 commits to home-assistant") - [Philip Hofstetter (@pilif)](https://github.com/pilif "6 total commits to the home-assistant organization, 6 commits to home-assistant.github.io") - [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 appdaemon, 1 commit to hassio-build") -- [Phill Price (@phillprice)](https://github.com/phillprice "10 total commits to the home-assistant organization, 10 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 "37 total commits to the home-assistant organization, 25 commits to home-assistant, 8 commits to home-assistant.github.io, 4 commits to netdisco") +- [Philipp Schmitt (@pschmitt)](https://github.com/pschmitt "37 total commits to the home-assistant organization, 24 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 "25 total commits to the home-assistant organization, 15 commits to home-assistant, 9 commits to home-assistant.github.io, 1 commit to home-assistant-polymer") +- [Pierre Ståhl (@postlund)](https://github.com/postlund "45 total commits to the home-assistant organization, 30 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") +- [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 "19 total commits to the home-assistant organization, 19 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") -- [RBHR (@rbhr)](https://github.com/rbhr "2 total commits to the home-assistant organization, 2 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") +- [Rasmus (@rasmusbe)](https://github.com/rasmusbe "2 total commits to the home-assistant organization, 2 commits to home-assistant") +- [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 "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") +- [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 "38 total commits to the home-assistant organization, 38 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") - [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 "30 total commits to the home-assistant organization, 25 commits to home-assistant, 3 commits to home-assistant.github.io, 2 commits to hadashboard") +- [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 Cunningham (@rythie)](https://github.com/rythie "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") -- [Richard Leurs (@R1chardTM)](https://github.com/R1chardTM "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") +- [Richard Leurs (@R1chardTM)](https://github.com/R1chardTM "15 total commits to the home-assistant organization, 8 commits to home-assistant, 6 commits to home-assistant.github.io, 1 commit to home-assistant-polymer") - [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 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 "1223 total commits to the home-assistant organization, 553 commits to home-assistant-iOS, 255 commits to home-assistant, 247 commits to home-assistant.github.io, 90 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 hadashboard, 3 commits to hassbot, 3 commits to scenegen, 3 commits to home-assistant-cli, 3 commits to home-assistant-js, 3 commits to appdaemon, 3 commits to home-assistant-js-websocket, 3 commits to organization, 2 commits to home-assistant-ansible, 2 commits to home-assistant-dev-helper, 2 commits to home-assistant-notebooks, 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 LabelBot") +- [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 hassbot, 3 commits to hadashboard, 3 commits to home-assistant-js-websocket, 3 commits to appdaemon, 3 commits to home-assistant-js, 3 commits to scenegen, 3 commits to organization, 2 commits to LabelBot, 2 commits to home-assistant-assets, 2 commits to fabric-home-assistant, 2 commits to home-assistant-notebooks, 2 commits to micropython-home-assistant, 2 commits to lambda-home-assistant-github") - [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 "13 total commits to the home-assistant organization, 8 commits to home-assistant.github.io, 5 commits to home-assistant") +- [Robin (@robmarkcole)](https://github.com/robmarkcole "16 total commits to the home-assistant organization, 9 commits to home-assistant.github.io, 6 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") -- [Ronald Dehuysser (@rdehuyss)](https://github.com/rdehuyss "2 total commits to the home-assistant organization, 2 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 Dargan (@rossdargan)](https://github.com/rossdargan "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [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") - [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") -- [RunOnGitHub (@RunOnGitHub)](https://github.com/RunOnGitHub "2 total commits to the home-assistant organization, 2 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 "21 total commits to the home-assistant organization, 15 commits to home-assistant, 4 commits to homebridge-homeassistant, 2 commits to home-assistant.github.io") +- [Ruslan Kiyanchuk (@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") - [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 Bray (@rbray89)](https://github.com/rbray89 "2 total commits to the home-assistant organization, 2 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 Kraus (@rmkraus)](https://github.com/rmkraus "195 total commits to the home-assistant organization, 163 commits to home-assistant, 17 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 "5 total commits to the home-assistant organization, 3 commits to home-assistant, 2 commits to home-assistant.github.io") -- [Ryan Parrish (@stickystyle)](https://github.com/stickystyle "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") +- [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 "47 total commits to the home-assistant organization, 35 commits to hassio-cli, 7 commits to home-assistant, 5 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") -- [Sacha Telgenhof (@stelgenhof)](https://github.com/stelgenhof "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [Sam Birch (@hotplot)](https://github.com/hotplot "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Sam Holmes (@sam3d)](https://github.com/sam3d "4 total commits to the home-assistant organization, 4 commits to pi-gen") -- [Sam Jongenelen (@SamJongenelen)](https://github.com/SamJongenelen "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") -- [Sam Whited (@SamWhited)](https://github.com/SamWhited "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [sam-io (@sam-io)](https://github.com/sam-io "3 total commits to the home-assistant organization, 3 commits to home-assistant") -- [Samuel Bétrisey (@betrisey)](https://github.com/betrisey "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") -- [sander76 (@sander76)](https://github.com/sander76 "40 total commits to the home-assistant organization, 36 commits to home-assistant, 4 commits to home-assistant.github.io") -- [Schmackos (@Schmackos)](https://github.com/Schmackos "2 total commits to the home-assistant organization, 2 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 "4 total commits to the home-assistant organization, 2 commits to home-assistant, 2 commits to home-assistant.github.io") +- [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") +- [Scott Bradshaw (@swbradshaw)](https://github.com/swbradshaw "2 total commits to the home-assistant organization, 2 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 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") +- [Sean Wilson (@swilson)](https://github.com/swilson "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Sebastian (@sebk-666)](https://github.com/sebk-666 "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [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 "32 total commits to the home-assistant organization, 16 commits to home-assistant, 14 commits to home-assistant.github.io, 2 commits to home-assistant-polymer") +- [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 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 "8 total commits to the home-assistant organization, 6 commits to home-assistant, 2 commits to home-assistant.github.io") -- [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 home-assistant-polymer, 1 commit to netdisco") -- [sharukins (@sharukins)](https://github.com/sharukins "2 total commits to the home-assistant organization, 2 commits to hassio-build") -- [Shawna O'Neal (@cherrykoda)](https://github.com/cherrykoda "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") +- [Sergey Isachenko (@zabuldon)](https://github.com/zabuldon "6 total commits to the home-assistant organization, 6 commits to home-assistant") +- [Sergey Vishnikin (@armicron)](https://github.com/armicron "33 total commits to the home-assistant organization, 33 commits to warrant") +- [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 "3 total commits to the home-assistant organization, 3 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") - [siebert (@siebert)](https://github.com/siebert "3 total commits to the home-assistant organization, 3 commits to home-assistant") -- [Simon Elsbrock (@else)](https://github.com/else "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") +- [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") -- [Stefan Jonasson (@stefan-jonasson)](https://github.com/stefan-jonasson "10 total commits to the home-assistant organization, 6 commits to home-assistant, 4 commits to home-assistant.github.io") +- [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") - [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") - [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") - [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 "11 total commits to the home-assistant organization, 6 commits to home-assistant.github.io, 2 commits to home-assistant-cli, 2 commits to home-assistant, 1 commit to hassio-build") +- [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") - [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") -- [Taylor Peet (@RePeet13)](https://github.com/RePeet13 "8 total commits to the home-assistant organization, 8 commits to home-assistant.github.io") +- [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 "2 total commits to the home-assistant organization, 2 commits to home-assistant") +- [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 "42 total commits to the home-assistant organization, 33 commits to home-assistant, 7 commits to home-assistant.github.io, 2 commits to netdisco") +- [Teemu R. (@rytilahti)](https://github.com/rytilahti "44 total commits to the home-assistant organization, 35 commits to home-assistant, 7 commits to home-assistant.github.io, 2 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") - [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 "36 total commits to the home-assistant organization, 23 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") +- [Thibault Cohen (@titilambert)](https://github.com/titilambert "41 total commits to the home-assistant organization, 28 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 "5 total commits to the home-assistant organization, 5 commits to home-assistant") - [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 "6 total commits to the home-assistant organization, 3 commits to home-assistant.github.io, 3 commits to home-assistant") +- [Thom Troy (@ttroy50)](https://github.com/ttroy50 "11 total commits to the home-assistant organization, 7 commits to home-assistant.github.io, 4 commits to home-assistant") - [Thomas Friedel (@tfriedel)](https://github.com/tfriedel "2 total commits to the home-assistant organization, 2 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") @@ -805,51 +797,60 @@ This page contains a list of people who have contributed in one way or another t - [Tom Usher (@tomusher)](https://github.com/tomusher "1 total commits to the home-assistant organization, 1 commit to netdisco") - [Tomi Salmi (@tomppasalmi)](https://github.com/tomppasalmi "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") - [Tomi Tuhkanen (@ttu)](https://github.com/ttu "3 total commits to the home-assistant organization, 3 commits to home-assistant") -- [TopdRob (@TopdRob)](https://github.com/TopdRob "4 total commits to the home-assistant organization, 4 commits to home-assistant") +- [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 "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [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 "14 total commits to the home-assistant organization, 10 commits to home-assistant, 4 commits to home-assistant.github.io") +- [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") +- [tschmidty69 (@tschmidty69)](https://github.com/tschmidty69 "6 total commits to the home-assistant organization, 6 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 "5 total commits to the home-assistant organization, 3 commits to home-assistant.github.io, 2 commits to home-assistant") - [Tõnis Tobre (@tobre6)](https://github.com/tobre6 "1 total commits to the home-assistant organization, 1 commit to homebridge-homeassistant") -- [Uli (@uehler)](https://github.com/uehler "4 total commits to the home-assistant organization, 4 commits to home-assistant.github.io") +- [uchagani (@uchagani)](https://github.com/uchagani "5 total commits to the home-assistant organization, 4 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") - [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 "4 total commits to the home-assistant organization, 4 commits to home-assistant") +- [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") - [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") - [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 Boyce (@wrboyce)](https://github.com/wrboyce "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [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") - [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 "92 total commits to the home-assistant organization, 63 commits to home-assistant, 27 commits to home-assistant.github.io, 2 commits to netdisco") +- [William Scanlon (@w1ll1am23)](https://github.com/w1ll1am23 "106 total commits to the home-assistant organization, 71 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.github.io, 3 commits to home-assistant") +- [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") - [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 "7 total commits to the home-assistant organization, 4 commits to home-assistant, 3 commits to home-assistant.github.io") +- [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") +- [yingzong (@yingzong)](https://github.com/yingzong "1 total commits to the home-assistant organization, 1 commit to warrant") - [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") - [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 "4 total commits to the home-assistant organization, 4 commits to home-assistant.github.io") +- [Zio Tibia (@ziotibia81)](https://github.com/ziotibia81 "14 total commits to the home-assistant organization, 7 commits to home-assistant, 7 commits to home-assistant.github.io") +- [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 "5 total commits to the home-assistant organization, 4 commits to home-assistant.github.io, 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 Tuesday, October 31st 2017, 7:14:47 pm UTC. +This page was last updated Saturday, January 13th 2018, 6:07:58 pm UTC. diff --git a/source/developers/development_environment.markdown b/source/developers/development_environment.markdown index 21d7651f031..0ff14d5c567 100644 --- a/source/developers/development_environment.markdown +++ b/source/developers/development_environment.markdown @@ -16,11 +16,13 @@ You'll need to set up a development environment if you want to develop a new fea #### {% 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 ``` @@ -33,7 +35,28 @@ Additional dependencies exist if you plan to perform Frontend Development, pleas #### {% 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. +If you are using Windows as a development platform, make sure that you have the correct Microsoft [Visual C++ build tools](http://landinghub.visualstudio.com/visual-cpp-build-tools) installed. The installation of the most requirements and validation using `tox` will fail if this is not done correctly. Check the [Windows Compilers](https://wiki.python.org/moin/WindowsCompilers) section on the [Python website](https://www.python.org/) for details. + +Due to Home Assistant is mainly designed and developed on Linux distributions it is not recommended to develop on Windows machines. However on Windows 10 machines you should decide to set up a [Linux subsystem](https://docs.microsoft.com/de-de/windows/wsl/install-win10). + +Setup Linux subsystem. + +```bash +$ apt-get update +$ apt-get upgrade +$ echo 'export DISPLAY=:0' >> ~/.bashrc && . ~/.bashrc +$ sudo apt-get install xubuntu-desktop -y +``` + +It is recommended using [PyCharm](https://www.jetbrains.com/pycharm/download/) as debugger. Download and start PyCharm. + +```bash +$ wget https://download.jetbrains.com/python/pycharm-community-20XX.X.tar.gz +$ tar -xzf pycharm-community-20XX.X +$ ./pycharm.sh +``` + +In order to display the PyCharm GUI on Windows you need to run a X-Server like [VcXserv](https://sourceforge.net/projects/vcxsrv/). Also, make sure to install or upgrade the `setuptools` Python package. It contains compatibility improvements and adds automatic use of compilers: @@ -62,27 +85,26 @@ $ 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. +To isolate your environment from the rest of the system, set up a [`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 +$ python3 -m venv . +$ source bin/activate ``` - -### {% linkable_title Setup and Run %} +Install the requirements with a provided script named `setup`. ```bash -$ cd home-assistant $ script/setup ``` -* Run `hass` to invoke your local installation. +Invoke your installation. + +```bash +$ hass +``` ### {% 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). +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. +You can use the [logger](/components/logger/) component to adjust logging to DEBUG to see even more details about what is going on. diff --git a/source/developers/documentation/create_page.markdown b/source/developers/documentation/create_page.markdown index db3ca834c6a..f2bf29dcef1 100644 --- a/source/developers/documentation/create_page.markdown +++ b/source/developers/documentation/create_page.markdown @@ -86,7 +86,7 @@ required: inclusive #=> Inclusive required: exclusive #=> Exclusive required: any string here #=> Any string here ``` -- **`type:`**: The type of the variable. Allowed entries: `string`, `int` 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). +- **`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 %} diff --git a/source/developers/documentation/index.markdown b/source/developers/documentation/index.markdown index f2306b2b5aa..33dd22d859f 100644 --- a/source/developers/documentation/index.markdown +++ b/source/developers/documentation/index.markdown @@ -20,7 +20,7 @@ For larger changes, we suggest that you clone the website repository. This way, 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. +- [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. diff --git a/source/developers/frontend.markdown b/source/developers/frontend.markdown index 98e88c7f26d..0fb71208d9a 100755 --- a/source/developers/frontend.markdown +++ b/source/developers/frontend.markdown @@ -27,7 +27,7 @@ First step is to configure Home Assistant to use the development mode for the fr ```yaml frontend: - development_repo: ../home-assistant-polymer + 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. diff --git a/source/developers/frontend_creating_custom_panels.markdown b/source/developers/frontend_creating_custom_panels.markdown index 87bfc3442a5..4066e6062a6 100644 --- a/source/developers/frontend_creating_custom_panels.markdown +++ b/source/developers/frontend_creating_custom_panels.markdown @@ -9,13 +9,28 @@ 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. +Panels are pages within Home Assistant that show information within Home Assistant and can allow controlling it. Panels are linked from the sidebar and rendered full screen. The have have real-time access to the Home Assistant object via JavaScript. Examples of panels in the app are map, logbook and history. + +Besides components registering panels, users can also register panels using the `panel_custom` component. This allows users to quickly build their own custom interfaces for Home Assistant. + +### {% linkable_title Before you get started %} + +The Home Assistant user interface is currently served to browsers in modern JavaScript and older JavaScript (ES5). The older version has a wider browser support but that comes at a cost of size, performance and more difficult to get started building panels for authors. + +We therefore advice to set up the frontend to serve the modern version of the frontend so that you won't need any build tools while developing. If you realize that your audience requires both, you can add a transpilation step in the future. To set up your frontend to always serve the latest version, add this to your config: + +``` +frontend: + javascript_version: latest +``` + +### {% linkable_title Building your first panel %} 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 +```html