From c68df1bc668791daba0948ea9cf05a5eb4533608 Mon Sep 17 00:00:00 2001 From: Duoxilian Date: Sun, 29 Jan 2017 02:24:10 -0600 Subject: [PATCH 01/81] Update climate.markdown (#1898) Add documentation for hold_mode. --- source/_components/climate.markdown | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/source/_components/climate.markdown b/source/_components/climate.markdown index 24caf95194e..d90be5414d8 100644 --- a/source/_components/climate.markdown +++ b/source/_components/climate.markdown @@ -54,12 +54,17 @@ automation: ### {% linkable_title Service `climate.set_away_mode` %} -Turn away mode on/off for climate device +This service has been deprecated. Use `climate.set_hold_mode` instead. + + +### {% linkable_title Service `climate.set_hold_mode` %} + +Set hold mode for climate device | 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. -| `away_mode` | no | New value of away mode. +| `hold_mode` | no | New value of hold mode. #### {% linkable_title Automation example %} @@ -69,10 +74,10 @@ automation: platform: time after: "07:15:00" action: - - service: climate.set_away_mode + - service: climate.set_hold_mode data: entity_id: climate.kitchen - away_mode: true + hold_mode: 'away' ``` ### {% linkable_title Service `climate.set_temperature` %} From c0e7e8531921fc772f6ee1a971573d2908298161 Mon Sep 17 00:00:00 2001 From: Martin Hjelmare Date: Sun, 29 Jan 2017 12:59:52 +0100 Subject: [PATCH 02/81] Add info on mysensors S_RGBW_LIGHT (#1899) --- source/_components/light.mysensors.markdown | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/source/_components/light.mysensors.markdown b/source/_components/light.mysensors.markdown index e5bafe3c251..8abeb4a3cfd 100644 --- a/source/_components/light.mysensors.markdown +++ b/source/_components/light.mysensors.markdown @@ -29,8 +29,11 @@ S_TYPE | V_TYPE ------------|------------- S_DIMMER | [V_DIMMER\* or V_PERCENTAGE\*], [V_LIGHT\* or V_STATUS\*] S_RGB_LIGHT | V_RGB*, [V_LIGHT\* or V_STATUS\*], [V_DIMMER or V_PERCENTAGE] +S_RGBW_LIGHT | V_RGBW*, [V_LIGHT\* or V_STATUS\*], [V_DIMMER or V_PERCENTAGE] -V_TYPES with a star (\*) denote V_TYPES that should be sent at sketch startup. For an S_DIMMER, send both a V_DIMMER/V_PERCENTAGE and a V_LIGHT/V_STATUS message. For an S_RGB_LIGHT, send both a V_RGB and a V_LIGHT/V_STATUS message with a V_DIMMER/V_PERCENTAGE message being optional. Sketch should acknowledge a command sent from controller with the same type. If command invokes a change to off state (including a V_PERCENTAGE or V_RGB message of zero), only a V_STATUS of zero message should be sent. See sketches below for examples. +V_TYPES with a star (\*) denote V_TYPES that should be sent at sketch startup. For an S_DIMMER, send both a V_DIMMER/V_PERCENTAGE and a V_LIGHT/V_STATUS message. For an S_RGB_LIGHT, send both a V_RGB and a V_LIGHT/V_STATUS message with a V_DIMMER/V_PERCENTAGE message being optional. Same principal applies for S_RGBW_LIGHT and V_RGBW. + +Sketch should acknowledge a command sent from controller with the same type. If command invokes a change to off state (including a V_PERCENTAGE, V_RGB, or V_RGBW message of zero), only a V_STATUS of zero message should be sent. See sketches below for examples. For more information, visit the [serial api] of MySensors. @@ -111,10 +114,10 @@ void incomingMessage(const MyMessage &message) { ### {% linkable_title MySensors 2.x example sketch %} ```cpp -/* +/* * Example Dimmable Light * Code adapted from http://github.com/mysensors/MySensors/tree/master/examples/DimmableLight - * + * * Documentation: http://www.mysensors.org * Support Forum: http://forum.mysensors.org * @@ -170,7 +173,7 @@ void presentation() void receive(const MyMessage &message) { - //When receiving a V_STATUS command, switch the light between OFF + //When receiving a V_STATUS command, switch the light between OFF //and the last received dimmer value if ( message.type == V_STATUS ) { Serial.println( "V_STATUS command received..." ); @@ -189,7 +192,7 @@ void receive(const MyMessage &message) //Update constroller status send_status_message(); - + } else if ( message.type == V_PERCENTAGE ) { Serial.println( "V_PERCENTAGE command received..." ); int dim_value = constrain( message.getInt(), 0, 100 ); @@ -202,11 +205,11 @@ void receive(const MyMessage &message) } else { last_state = LIGHT_ON; last_dim = dim_value; - + //Update constroller with dimmer value send_dimmer_message(); } - + } else { Serial.println( "Invalid command received..." ); return; From 1966a015deccb2d5651ca93c1f8a4886b069e130 Mon Sep 17 00:00:00 2001 From: Jeff Schroeder Date: Sun, 29 Jan 2017 15:59:21 -0600 Subject: [PATCH 03/81] Fix "cameras" hyperlink which was invalid markdown (#1906) --- source/_components/image_processing.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/image_processing.markdown b/source/_components/image_processing.markdown index 07d11d01069..7b477d3c76e 100644 --- a/source/_components/image_processing.markdown +++ b/source/_components/image_processing.markdown @@ -10,7 +10,7 @@ footer: true ha_release: 0.36 --- -Image processing enables Home Assistant to process images from [cameras][/components/#camera]. Only camera entities are supported as sources. +Image processing enables Home Assistant to process images from [cameras](/components/#camera). Only camera entities are supported as sources. For interval control, use `scan_interval` in platform. From af8353376c7095d3cc905a62a140a9f2519aa2c9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adri=C3=A1n=20L=C3=B3pez?= Date: Sun, 29 Jan 2017 23:00:28 +0100 Subject: [PATCH 04/81] Fix example to work correctly (#1912) --- source/_components/alexa.markdown | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/source/_components/alexa.markdown b/source/_components/alexa.markdown index db6115b352b..fd763355e97 100644 --- a/source/_components/alexa.markdown +++ b/source/_components/alexa.markdown @@ -158,9 +158,11 @@ alexa: {%- for state in states.device_tracker -%} {%- if state.name.lower() == User.lower() -%} {{ state.name }} is at {{ state.state }} + {%- elif loop.last -%} + I am sorry, I do not know where {{ User }} is. {%- endif -%} {%- else -%} - I am sorry, I do not know where {{ User }} is. + Sorry, I don't have any trackers registered. {%- endfor -%} card: type: simple From 55b3fded16ec72a2ba043b5231ed405a79f1e654 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Sat, 28 Jan 2017 15:50:34 -0800 Subject: [PATCH 05/81] Remove unnecessary regenerate statements --- source/_ecosystem/appdaemon/api.markdown | 1 - source/_ecosystem/appdaemon/configuration.markdown | 1 - source/_ecosystem/appdaemon/example_apps.markdown | 1 - source/_ecosystem/appdaemon/installation.markdown | 1 - source/_ecosystem/appdaemon/operation.markdown | 1 - source/_ecosystem/appdaemon/reboot.markdown | 1 - source/_ecosystem/appdaemon/running.markdown | 1 - source/_ecosystem/appdaemon/tutorial.markdown | 1 - source/_ecosystem/appdaemon/updating.markdown | 1 - source/_ecosystem/appdaemon/windows.markdown | 1 - source/_posts/2016-10-24-explaining-the-updater.markdown | 1 + .../_posts/2017-01-03-control-my-christmas-tree-stats.markdown | 1 + source/_posts/2017-01-21-home-assistant-governance.markdown | 1 + source/index.html | 1 + 14 files changed, 4 insertions(+), 10 deletions(-) diff --git a/source/_ecosystem/appdaemon/api.markdown b/source/_ecosystem/appdaemon/api.markdown index af1b241f1ec..891ef1dec87 100755 --- a/source/_ecosystem/appdaemon/api.markdown +++ b/source/_ecosystem/appdaemon/api.markdown @@ -7,7 +7,6 @@ sidebar: true comments: false sharing: true footer: true -regenerate: true hide_github_edit: true --- diff --git a/source/_ecosystem/appdaemon/configuration.markdown b/source/_ecosystem/appdaemon/configuration.markdown index 27aac6fd82e..ec955aff622 100644 --- a/source/_ecosystem/appdaemon/configuration.markdown +++ b/source/_ecosystem/appdaemon/configuration.markdown @@ -7,7 +7,6 @@ sidebar: true comments: false sharing: true footer: true -regenerate: true hide_github_edit: true --- diff --git a/source/_ecosystem/appdaemon/example_apps.markdown b/source/_ecosystem/appdaemon/example_apps.markdown index 6f42885fec9..2d7b659ad79 100644 --- a/source/_ecosystem/appdaemon/example_apps.markdown +++ b/source/_ecosystem/appdaemon/example_apps.markdown @@ -7,7 +7,6 @@ sidebar: true comments: false sharing: true footer: true -regenerate: true hide_github_edit: true --- diff --git a/source/_ecosystem/appdaemon/installation.markdown b/source/_ecosystem/appdaemon/installation.markdown index 14f46148441..6eb9f1f16c5 100644 --- a/source/_ecosystem/appdaemon/installation.markdown +++ b/source/_ecosystem/appdaemon/installation.markdown @@ -7,7 +7,6 @@ sidebar: true comments: false sharing: true footer: true -regenerate: true hide_github_edit: true --- diff --git a/source/_ecosystem/appdaemon/operation.markdown b/source/_ecosystem/appdaemon/operation.markdown index 499bca70ef3..9f643719a61 100644 --- a/source/_ecosystem/appdaemon/operation.markdown +++ b/source/_ecosystem/appdaemon/operation.markdown @@ -7,7 +7,6 @@ sidebar: true comments: false sharing: true footer: true -regenerate: true hide_github_edit: true --- diff --git a/source/_ecosystem/appdaemon/reboot.markdown b/source/_ecosystem/appdaemon/reboot.markdown index 4cac399650b..96d7b9552b8 100644 --- a/source/_ecosystem/appdaemon/reboot.markdown +++ b/source/_ecosystem/appdaemon/reboot.markdown @@ -7,7 +7,6 @@ sidebar: true comments: false sharing: true footer: true -regenerate: true hide_github_edit: true --- diff --git a/source/_ecosystem/appdaemon/running.markdown b/source/_ecosystem/appdaemon/running.markdown index f447a73895d..78e5cf3976e 100755 --- a/source/_ecosystem/appdaemon/running.markdown +++ b/source/_ecosystem/appdaemon/running.markdown @@ -7,7 +7,6 @@ sidebar: true comments: false sharing: true footer: true -regenerate: true hide_github_edit: true --- diff --git a/source/_ecosystem/appdaemon/tutorial.markdown b/source/_ecosystem/appdaemon/tutorial.markdown index fe9f6ee8718..bec655b9074 100755 --- a/source/_ecosystem/appdaemon/tutorial.markdown +++ b/source/_ecosystem/appdaemon/tutorial.markdown @@ -7,7 +7,6 @@ sidebar: true comments: false sharing: true footer: true -regenerate: true hide_github_edit: true --- diff --git a/source/_ecosystem/appdaemon/updating.markdown b/source/_ecosystem/appdaemon/updating.markdown index 28229fb6ece..20a5ebef141 100644 --- a/source/_ecosystem/appdaemon/updating.markdown +++ b/source/_ecosystem/appdaemon/updating.markdown @@ -7,7 +7,6 @@ sidebar: true comments: false sharing: true footer: true -regenerate: true hide_github_edit: true --- diff --git a/source/_ecosystem/appdaemon/windows.markdown b/source/_ecosystem/appdaemon/windows.markdown index 3ec32879838..360bf975a12 100755 --- a/source/_ecosystem/appdaemon/windows.markdown +++ b/source/_ecosystem/appdaemon/windows.markdown @@ -7,7 +7,6 @@ sidebar: true comments: false sharing: true footer: true -regenerate: true hide_github_edit: true --- diff --git a/source/_posts/2016-10-24-explaining-the-updater.markdown b/source/_posts/2016-10-24-explaining-the-updater.markdown index 20245ce6639..fd920bd0d31 100644 --- a/source/_posts/2016-10-24-explaining-the-updater.markdown +++ b/source/_posts/2016-10-24-explaining-the-updater.markdown @@ -12,6 +12,7 @@ categories: Organisation On Saturday, we released [Home Assistant 0.31][0.31] which includes an improved updater component that checks for new versions using the Home Assistant servers. We wanted to update the community on its rollout and answer some questions that have come up. As part of the update check anonymous information about your operating system and Python version is submitted to Home Assistant servers unless you have opted out. + ## {% linkable_title Why we changed the updater %} This change was driven by two important factors. diff --git a/source/_posts/2017-01-03-control-my-christmas-tree-stats.markdown b/source/_posts/2017-01-03-control-my-christmas-tree-stats.markdown index 8303520eedd..d96dc5b8aef 100644 --- a/source/_posts/2017-01-03-control-my-christmas-tree-stats.markdown +++ b/source/_posts/2017-01-03-control-my-christmas-tree-stats.markdown @@ -24,6 +24,7 @@ I added three devices to the Home Assistant instance - a Wemo Insight, Sonoff Sw The Christmas tree in action.

+ During the time by tree was set up, I had 7,366 visitors from 88 countries connect to my Home Assistant instance. This generated an estimated 100,000 clicks on the switches in my Home Assistant instance - thanks in part to some folks who posted up with macros for 6-8 hour stretches.

diff --git a/source/_posts/2017-01-21-home-assistant-governance.markdown b/source/_posts/2017-01-21-home-assistant-governance.markdown index 97b4155ff53..4c8df71e76a 100644 --- a/source/_posts/2017-01-21-home-assistant-governance.markdown +++ b/source/_posts/2017-01-21-home-assistant-governance.markdown @@ -22,6 +22,7 @@ The Home Assistant project and community has seen enormous growth in the last th Starting today we are announcing a few initiatives to help protect our users, contributors and community members. + ## {% linkable_title Code of Conduct %} More people are getting to know and love Home Assistant every day and our community keeps growing. Our community consists of people from all over the world with different backgrounds and we want Home Assistant to be a place where everyone can feel at home. To help with this we're introducing a Code of Conduct. The Code of Conduct describes what type of behavior is unacceptable, how we will enforce it and where to report incidents. diff --git a/source/index.html b/source/index.html index 01e8cc0acd5..94c7b1c5bf8 100644 --- a/source/index.html +++ b/source/index.html @@ -6,6 +6,7 @@ show_title: false sidebar: false hero_unit: true is_homepage: true +regenerate: true hide_github_edit: true description: Open-source home automation platform running on Python 3. Track and control all devices at home and automate control. Installation in less than a minute. hide_github_edit: true From 5dec4c51ea81372e3c01f99e6073327c9ab5b449 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Sun, 29 Jan 2017 00:50:56 +0100 Subject: [PATCH 06/81] Add customization section --- source/_posts/2017-01-28-face-coffee-wink.markdown | 3 +++ 1 file changed, 3 insertions(+) diff --git a/source/_posts/2017-01-28-face-coffee-wink.markdown b/source/_posts/2017-01-28-face-coffee-wink.markdown index 9a6939ba7c6..658880fc674 100644 --- a/source/_posts/2017-01-28-face-coffee-wink.markdown +++ b/source/_posts/2017-01-28-face-coffee-wink.markdown @@ -28,6 +28,9 @@ After a security audit by Stephen O'Conner, he found that our source for randoml Although the old method is not insecure, the new method is a lot more secure. Upgrading to the latest version is encouraged. +### {% linkable_title New customization options %} +[@Andrey-git] has added some great new options to the customize functionality. It is now possible to specify customizations as a wildcard for entities or for a specific domain. + ### {% linkable_title Major Wink and HDMI CEC improvements %} [@w1ll1am23] did an amazing job fixing a ton of bugs and issues with the Wink integration. Biggest improvement is that it now is able to automatically refresh the authentication tokens. This means that if you have your email address and password in your `configuration.yaml` file, no `client_id` and `client_secret` are needed, and token which was generated with the generator located in the [Wink][wink] documentation. From 712fa3c95ce797761ff2dcc15063f6d23c54b915 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Sun, 29 Jan 2017 00:54:37 +0100 Subject: [PATCH 07/81] Fix title --- source/_posts/2017-01-28-face-coffee-wink.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_posts/2017-01-28-face-coffee-wink.markdown b/source/_posts/2017-01-28-face-coffee-wink.markdown index 658880fc674..d5fc2183c62 100644 --- a/source/_posts/2017-01-28-face-coffee-wink.markdown +++ b/source/_posts/2017-01-28-face-coffee-wink.markdown @@ -17,7 +17,7 @@ No stats, no numbers, and alike this time. Ok, just one number: 0.37. We are bac ### {% linkable_title Governance %} As announced, the new [Governance][gov] requires for developers to sign the CLA. [Code of Conduct][coc], [Contributor License Agreement][cla], and proper [Licensing][license] will to protect all involved parties in the Home Assistant eco-system from users and community members to contributors. -### Face recognition using the Microsoft Face API %} +### {% linkable_title Face recognition using the Microsoft Face API %} [@pvizeli] has been on a roll with the image processing integrations. This time it's the [Microsoft Face API][face]. This means that now it will be possible to train the API with the people you want to recognize and send images from your camera to the API as another source of automation. Want to play a personalized tune when someone enters the house? It is now possible 😎 From 757168bc6653aa231a74eda5bdfc9a274432c4ee Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Sat, 28 Jan 2017 16:01:23 -0800 Subject: [PATCH 08/81] Fix bullet points --- .../2017-01-28-face-coffee-wink.markdown | 162 +++++++++--------- 1 file changed, 81 insertions(+), 81 deletions(-) diff --git a/source/_posts/2017-01-28-face-coffee-wink.markdown b/source/_posts/2017-01-28-face-coffee-wink.markdown index d5fc2183c62..056987f94a4 100644 --- a/source/_posts/2017-01-28-face-coffee-wink.markdown +++ b/source/_posts/2017-01-28-face-coffee-wink.markdown @@ -1,6 +1,6 @@ --- layout: post -title: "0.37: Face, Coffee, Wink" +title: "0.37: Face detection, Coffee, Wink" description: "Governance, Face recognition, improved camera security, and a coffee maker" date: 2017-01-28 08:04:05 +0000 date_formatted: "January 28, 2017" @@ -16,7 +16,7 @@ No stats, no numbers, and alike this time. Ok, just one number: 0.37. We are bac ### {% linkable_title Governance %} As announced, the new [Governance][gov] requires for developers to sign the CLA. [Code of Conduct][coc], [Contributor License Agreement][cla], and proper [Licensing][license] will to protect all involved parties in the Home Assistant eco-system from users and community members to contributors. - + ### {% linkable_title Face recognition using the Microsoft Face API %} [@pvizeli] has been on a roll with the image processing integrations. This time it's the [Microsoft Face API][face]. This means that now it will be possible to train the API with the people you want to recognize and send images from your camera to the API as another source of automation. @@ -44,88 +44,88 @@ Thanks to [@konikvranik] the [HDMI CEC][cec] integration got a huge update with ### {% linkable_title All changes %} #### {% linkable_title New platforms/components %} -Netatmo: [Netatmo][netatmo] Presence support ([@gieljnssns]) -Sensor: [Amcrest][amcrest] camera sensors ([@tchellomello]) -Notify: New [Discord][discord] notification component ([@Deinara]) -Device tracker: [Tado][tado] device tracker support ([@jmvermeulen]) -Sensor: Add [Skybeacon][skybeacon] BLE temperature/humidity sensor ([@anpetrov]) -New [Zabbix][zabbix] component ([@Whytey]) -Media player: New platform [Anthemav][anthem] Media player ([@nugget]) -Light: Add support for [Avion][avion] Bluetooth dimmer switches ([@mjg59]) -Binary sensor: [Beaglebone Black][bb-bin] binary sensor ([@MatoKafkac]) -Light: [Piglow][piglow] support ([@xarnze]) -[Face][face] recognition for automation ([@pvizeli]) -Sensor: New [Washington State DOT][wsdot] sensor ([@partofthething]) -Support for Wemo CoffeeMaker devices ([@stu-gott]) -Device tracker: [Sky hub][sky] support ([@alexmogavero]) -Support for [Lutron][lutron] RadioRA 2 ([@thecynic]) -TTS: Amazon [Polly TTS][polly] platform ([@robbiet480]) -Device tracker: Support for [Linksys][linksys] Access Points ([@lukas-hetzenecker]) -Notify: Make calls with [Twilio][twilio] ([@fakezeta]) +- Netatmo: [Netatmo][netatmo] Presence support ([@gieljnssns]) +- Sensor: [Amcrest][amcrest] camera sensors ([@tchellomello]) +- Notify: New [Discord][discord] notification component ([@Deinara]) +- Device tracker: [Tado][tado] device tracker support ([@jmvermeulen]) +- Sensor: Add [Skybeacon][skybeacon] BLE temperature/humidity sensor ([@anpetrov]) +- New [Zabbix][zabbix] component ([@Whytey]) +- Media player: New platform [Anthemav][anthem] Media player ([@nugget]) +- Light: Add support for [Avion][avion] Bluetooth dimmer switches ([@mjg59]) +- Binary sensor: [Beaglebone Black][bb-bin] binary sensor ([@MatoKafkac]) +- Light: [Piglow][piglow] support ([@xarnze]) +- [Face][face] recognition for automation ([@pvizeli]) +- Sensor: New [Washington State DOT][wsdot] sensor ([@partofthething]) +- Support for Wemo CoffeeMaker devices ([@stu-gott]) +- Device tracker: [Sky hub][sky] support ([@alexmogavero]) +- Support for [Lutron][lutron] RadioRA 2 ([@thecynic]) +- TTS: Amazon [Polly TTS][polly] platform ([@robbiet480]) +- Device tracker: Support for [Linksys][linksys] Access Points ([@lukas-hetzenecker]) +- Notify: Make calls with [Twilio][twilio] ([@fakezeta]) #### Improvements %} -Script: Fix script release ([@balloob]) -Camera - Amcrest: Add support for direct MJPEG streams from Amcrest cameras ([@colinodell]) -Sensor - Miflora: Removing throttle decorator ([@freol35241]) -Notify - Lannouncer: Fix `get_service` method ([@mKeRix]) -Sensor - WAQI: Add station parameter to waqi sensor ([@whhsw]) -Sensor - USPS: Absolute path to save cookie used by USPS sensor ([@tchellomello]) -Nest: Fix python-nest release number ([@Danielhiversen]) -Keyboard remote: Improve support ([@MrMep]) -Device tracker - VolvoOnCall: Fix timedelta ([@pvizeli]) -Climate - eq3btsmart: Expose away attribute ([@rytilahti]) -Remote: Reserve a test port for broken API to fix race ([@armills]) -Climate - Ecobee: Made target temperature sensitive to auto mode ([@Duoxilian]) -Configuration: Fix load_yaml default value ([@balloob]) -Notify - Facebook: Fix encoding error ([@Danielhiversen]) -Emulated_hue: Add `upnp_bind_multicast` option, default type to Google, and persist emulated hue IDs ([@hoopty], [@balloob]) -Docker: Install phantomjs in Docker container ([@jnewland]) -Media player - MPD: Add listing and selection of available MPD playlists ([@partofthething]) -Media player - Denon AVR: Denon improvements ([@glance-]) -Light - x10.py: Improved x10 state monitoring ([@martst]) -Sensor - DSMR: TCP, reconnecting and V4 CRC support ([@aequitas]) -Media player - Yamaha.py: Fix Yamaha doing I/O in event loop ([@balloob]) -Device tracker UPC: Make upc more robust ([@pvizeli]) -Climate - Generic thermostat: Update ([@MrMep]) -Device tracker - Xiaomi.py: Xiaomi Mi Router token refresh ([@RiRomain]) -Camera - MJPEG: Support still image for thumbmail ([@pvizeli]) -Sensor - ZAMG: Updated valid station id list ([@HerrHofrat]) -Light - ISY994: Not overwrite `state_attributes` ([@rmkraus])[emul-hue] -Light - Zwave: Use only supported features for devices ([@turbokongen]) -Media player - Kodi: Support for volume stepping ([@armills]) -Media player- roku: Use `is_screensaver`, update IDLE state, and use device name ([@robbiet480], [@xhostplus]) -Switch - HDMI CEC: Support for devices and commands ([@konikvranik]) -Lock - Zwave: Improvements to Zwave lock platform ([@turbokongen]) -TTS: Invalidate broken file cache entries ([@stu-gott]) -Light - Hue: Improvements ([@robbiet480]) -TTS - YandexTTS: Added speed and emotion to Yandex TTS ([@lupin-de-mid]) -Light - tellstick.py: Tellstick light fix ([@stefan-jonasson]) -Switch - insteon_local.py: only check for devices when not defined in config ([@wardcraigj]) -Notify - Twitter: Allow direct messaging to user ([@fabaff]) -Fan - MQTT: Dont set a speed when fan turns on ([@robbiet480]) -Config: Allow easier customization of whole domain, entity lists, globs ([@andrey-git]) -Sensor - Homematic: Update device support ([@danielperna84]) -Binary sensor - ISS: Add location to attributes and option to show position on the map ([@fabaff]) -Media player - Kodi: Add SSL configuration option ([@ecksun]) -Sensor - WAQI: Add missing particle value ([@fabaff]) -Wink: Support for python-wink 1.0.0 ([@w1ll1am23]) -Binary sensor - RPi GPIO: Add a small sleep before reading the sensor ([@snagytx]) -Sensor - USPS: Add name to configuration ([@happyleavesaoc]) -Sensor - Miflora: Remove throttle decorator from miflora platform ([@freol35241]) -Device tracker - asuswrt.py: Add IPv6 support when parsing neighbors ([@leppa]) -iOS: Discover notify.ios when iOS component loads ([@robbiet480]) -Homematic: Add MAX shutter contact class ([@jannau]) -Sensor - Darksky: Added forecast support ([@nordlead2005]) -Switch - Pilight: Implement echo config option ([@janLo]) -Core: Support customize in packages ([@kellerza]) -Switch - Flux: Allow disabling setting the brightness ([@rytilahti]) -Media player - Sonos: Add `is_coordinator`, set coordinator after join/unjoin, and no emtpy image ([@pvizeli], [@andrey-git], [@robbiet480]) -Climate: Hold mode ([@Duoxilian]) -Switch - TPlink: No longer doing I/O in event bus ([@balloob]) -Light - Insteon local: Improve Insteon configuration ([@wardcraigj]) -Emulated Hue: Emulated Hue "host-ip" fails to bind when running in docker without `--net=host` ([@jeremydk]) -Climate - EQ3 BT smart: Add reporting for availability ([@rytilahti]) +- Script: Fix script release ([@balloob]) +- Camera - Amcrest: Add support for direct MJPEG streams from Amcrest cameras ([@colinodell]) +- Sensor - Miflora: Removing throttle decorator ([@freol35241]) +- Notify - Lannouncer: Fix `get_service` method ([@mKeRix]) +- Sensor - WAQI: Add station parameter to waqi sensor ([@whhsw]) +- Sensor - USPS: Absolute path to save cookie used by USPS sensor ([@tchellomello]) +- Nest: Fix python-nest release number ([@Danielhiversen]) +- Keyboard remote: Improve support ([@MrMep]) +- Device tracker - VolvoOnCall: Fix timedelta ([@pvizeli]) +- Climate - eq3btsmart: Expose away attribute ([@rytilahti]) +- Remote: Reserve a test port for broken API to fix race ([@armills]) +- Climate - Ecobee: Made target temperature sensitive to auto mode ([@Duoxilian]) +- Configuration: Fix load_yaml default value ([@balloob]) +- Notify - Facebook: Fix encoding error ([@Danielhiversen]) +- Emulated_hue: Add `upnp_bind_multicast` option, default type to Google, and persist emulated hue IDs ([@hoopty], [@balloob]) +- Docker: Install phantomjs in Docker container ([@jnewland]) +- Media player - MPD: Add listing and selection of available MPD playlists ([@partofthething]) +- Media player - Denon AVR: Denon improvements ([@glance-]) +- Light - x10.py: Improved x10 state monitoring ([@martst]) +- Sensor - DSMR: TCP, reconnecting and V4 CRC support ([@aequitas]) +- Media player - Yamaha.py: Fix Yamaha doing I/O in event loop ([@balloob]) +- Device tracker UPC: Make upc more robust ([@pvizeli]) +- Climate - Generic thermostat: Update ([@MrMep]) +- Device tracker - Xiaomi.py: Xiaomi Mi Router token refresh ([@RiRomain]) +- Camera - MJPEG: Support still image for thumbmail ([@pvizeli]) +- Sensor - ZAMG: Updated valid station id list ([@HerrHofrat]) +- Light - ISY994: Not overwrite `state_attributes` ([@rmkraus])[emul-hue] +- Light - Zwave: Use only supported features for devices ([@turbokongen]) +- Media player - Kodi: Support for volume stepping ([@armills]) +- Media player- roku: Use `is_screensaver`, update IDLE state, and use device name ([@robbiet480], [@xhostplus]) +- Switch - HDMI CEC: Support for devices and commands ([@konikvranik]) +- Lock - Zwave: Improvements to Zwave lock platform ([@turbokongen]) +- TTS: Invalidate broken file cache entries ([@stu-gott]) +- Light - Hue: Improvements ([@robbiet480]) +- TTS - YandexTTS: Added speed and emotion to Yandex TTS ([@lupin-de-mid]) +- Light - tellstick.py: Tellstick light fix ([@stefan-jonasson]) +- Switch - insteon_local.py: only check for devices when not defined in config ([@wardcraigj]) +- Notify - Twitter: Allow direct messaging to user ([@fabaff]) +- Fan - MQTT: Dont set a speed when fan turns on ([@robbiet480]) +- Config: Allow easier customization of whole domain, entity lists, globs ([@andrey-git]) +- Sensor - Homematic: Update device support ([@danielperna84]) +- Binary sensor - ISS: Add location to attributes and option to show position on the map ([@fabaff]) +- Media player - Kodi: Add SSL configuration option ([@ecksun]) +- Sensor - WAQI: Add missing particle value ([@fabaff]) +- Wink: Support for python-wink 1.0.0 ([@w1ll1am23]) +- Binary sensor - RPi GPIO: Add a small sleep before reading the sensor ([@snagytx]) +- Sensor - USPS: Add name to configuration ([@happyleavesaoc]) +- Sensor - Miflora: Remove throttle decorator from miflora platform ([@freol35241]) +- Device tracker - asuswrt.py: Add IPv6 support when parsing neighbors ([@leppa]) +- iOS: Discover notify.ios when iOS component loads ([@robbiet480]) +- Homematic: Add MAX shutter contact class ([@jannau]) +- Sensor - Darksky: Added forecast support ([@nordlead2005]) +- Switch - Pilight: Implement echo config option ([@janLo]) +- Core: Support customize in packages ([@kellerza]) +- Switch - Flux: Allow disabling setting the brightness ([@rytilahti]) +- Media player - Sonos: Add `is_coordinator`, set coordinator after join/unjoin, and no emtpy image ([@pvizeli], [@andrey-git], [@robbiet480]) +- Climate: Hold mode ([@Duoxilian]) +- Switch - TPlink: No longer doing I/O in event bus ([@balloob]) +- Light - Insteon local: Improve Insteon configuration ([@wardcraigj]) +- Emulated Hue: Emulated Hue "host-ip" fails to bind when running in docker without `--net=host` ([@jeremydk]) +- Climate - EQ3 BT smart: Add reporting for availability ([@rytilahti]) Bugfix: [@balloob], [@fabaff], [@freol35241], [@pvizeli], [@Danielhiversen], [@tdickman], [@armills], [@rytilahti], [@R1chardTM], [@asbach], [@happyleavesaoc], [@robbiet480], [@colinodell], [@joopert], [@dale3h], [@pavoni], [@jaharkes], [@MartinHjelmare], [@mezz64], [@jabesq], and you if you are missing in this list. From dcc0eed45534439db4d188e154f03b82f352054a Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Sun, 29 Jan 2017 01:04:40 +0100 Subject: [PATCH 09/81] Fix title --- source/_posts/2017-01-28-face-coffee-wink.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_posts/2017-01-28-face-coffee-wink.markdown b/source/_posts/2017-01-28-face-coffee-wink.markdown index 056987f94a4..b666c5a3763 100644 --- a/source/_posts/2017-01-28-face-coffee-wink.markdown +++ b/source/_posts/2017-01-28-face-coffee-wink.markdown @@ -63,7 +63,7 @@ Thanks to [@konikvranik] the [HDMI CEC][cec] integration got a huge update with - Device tracker: Support for [Linksys][linksys] Access Points ([@lukas-hetzenecker]) - Notify: Make calls with [Twilio][twilio] ([@fakezeta]) -#### Improvements %} +#### {% linkable_title Improvements %} - Script: Fix script release ([@balloob]) - Camera - Amcrest: Add support for direct MJPEG streams from Amcrest cameras ([@colinodell]) From 615be55abe7a63d8fac9362c47b4dae93206a0e5 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Sat, 28 Jan 2017 16:32:03 -0800 Subject: [PATCH 10/81] Fix image --- source/_posts/2017-01-28-face-coffee-wink.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_posts/2017-01-28-face-coffee-wink.markdown b/source/_posts/2017-01-28-face-coffee-wink.markdown index b666c5a3763..caca3f85569 100644 --- a/source/_posts/2017-01-28-face-coffee-wink.markdown +++ b/source/_posts/2017-01-28-face-coffee-wink.markdown @@ -8,7 +8,7 @@ author: Fabian Affolter et al. author_twitter: fabaff comments: true categories: Release-Notes -og_image: /images/blog/2016-01-0.37/social.png +og_image: /images/blog/2017-01-0.37/social.png --- From 303e2b46ecb610a60e42288f74a3a44cdfbe7d37 Mon Sep 17 00:00:00 2001 From: Alok Saboo Date: Sat, 28 Jan 2017 19:37:09 -0500 Subject: [PATCH 11/81] Added missing backticks (#1902) --- source/_components/microsoft_face.markdown | 1 + 1 file changed, 1 insertion(+) diff --git a/source/_components/microsoft_face.markdown b/source/_components/microsoft_face.markdown index 5e3d0961fcf..ae15f4f330f 100644 --- a/source/_components/microsoft_face.markdown +++ b/source/_components/microsoft_face.markdown @@ -82,3 +82,4 @@ After we done with changes on a group, we need train this group to make our AI f service: microsoft_face.train_group data: group: family +``` From 82367d99cadc22dfe8616fba6ca6c054472c9797 Mon Sep 17 00:00:00 2001 From: Matt N Date: Sat, 28 Jan 2017 16:37:47 -0800 Subject: [PATCH 12/81] Fix link and typos in hadashboard/reboot.markdown (#1900) --- source/_ecosystem/hadashboard/reboot.markdown | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/_ecosystem/hadashboard/reboot.markdown b/source/_ecosystem/hadashboard/reboot.markdown index 17ca88d8af0..0d87ef28725 100755 --- a/source/_ecosystem/hadashboard/reboot.markdown +++ b/source/_ecosystem/hadashboard/reboot.markdown @@ -9,8 +9,8 @@ sharing: true footer: true --- -To run Dashing and `hapush` at reboot, I have provided sample init scripts in the `./init` directory. These have been tested on a Raspberry PI - your mileage may vary on other systems. +To run Dashing and `hapush` at reboot, I have provided sample init scripts in the `./init` directory. These have been tested on a Raspberry Pi - your mileage may vary on other systems. -Instructions for automaticaly starting a docker install can be found (here)[https://docs.docker.com/engine/admin/host_integration/]. +Instructions for automatically starting a docker install can be found [here](https://docs.docker.com/engine/admin/host_integration/). For docker you may also want to use docker-compose - there is a sample compose file in the `./init` directory. From 392c91b4211f2f74674236a6b1d59a5b3bc13dde Mon Sep 17 00:00:00 2001 From: Robbie Trencheny Date: Sat, 28 Jan 2017 16:48:52 -0800 Subject: [PATCH 13/81] Fix wording on emulated_hue breaking change --- source/_posts/2017-01-28-face-coffee-wink.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_posts/2017-01-28-face-coffee-wink.markdown b/source/_posts/2017-01-28-face-coffee-wink.markdown index caca3f85569..4e8decf66aa 100644 --- a/source/_posts/2017-01-28-face-coffee-wink.markdown +++ b/source/_posts/2017-01-28-face-coffee-wink.markdown @@ -130,7 +130,7 @@ Thanks to [@konikvranik] the [HDMI CEC][cec] integration got a huge update with Bugfix: [@balloob], [@fabaff], [@freol35241], [@pvizeli], [@Danielhiversen], [@tdickman], [@armills], [@rytilahti], [@R1chardTM], [@asbach], [@happyleavesaoc], [@robbiet480], [@colinodell], [@joopert], [@dale3h], [@pavoni], [@jaharkes], [@MartinHjelmare], [@mezz64], [@jabesq], and you if you are missing in this list. ### {% linkable_title Breaking changes %} -- A **major** breaking change in the [`emulated_hue`][emul-hue] component means that without changing a configuration value before starting up the newer Home Assistant version you will lose all devices that Alexa has discovered and will need to re-add them as well as create new groups. Find out about the [details](emul_hue). +- A **major** breaking change in the [`emulated_hue`][emul-hue] component means that unless you set `type: alexa` before starting up the newer Home Assistant version you will lose all devices that Alexa has discovered and will need to re-add them as well as create new groups. - The platform of the [ISS][iss] integration was change to `binary_sensor`. Please check the platform documentation. - The [Roku][roku] media uses now a new format for the entity IDs. - [OpenALPR][openalpr] is no longer a component. It's now a platform for [Image processing][image]. From b6f7eb7735990100654233ae739a68bfa7f7070a Mon Sep 17 00:00:00 2001 From: Robbie Trencheny Date: Sat, 28 Jan 2017 16:53:48 -0800 Subject: [PATCH 14/81] Update Hue docs to note the new parameters --- source/_components/light.hue.markdown | 2 ++ 1 file changed, 2 insertions(+) diff --git a/source/_components/light.hue.markdown b/source/_components/light.hue.markdown index b33fe179100..b13b1a0c7a3 100644 --- a/source/_components/light.hue.markdown +++ b/source/_components/light.hue.markdown @@ -34,6 +34,8 @@ Configuration variables: - **host** (*Required*): IP address of the device, eg. 192.168.1.10. - **allow_unreachable** (*Optional*): This will allow unreachable bulbs to report their state correctly. By default *name* from the device is used. - **filename** (*Optional*): Make this unique if specifying multiple Hue hubs. +- **allow_in_emulated_hue** (*Optional*): Enable this to block all Hue entities from being added to the `emulated_hue` component. +- **allow_hue_groups** (*Optional*): Enable this to stop Home Assistant from importing the groups defined on the Hue bridge. ### {% linkable_title Using Hue Groups in Home Assistant %} From 7a41936827ff40aae96678a0a92935f34a8659b5 Mon Sep 17 00:00:00 2001 From: Robbie Trencheny Date: Sat, 28 Jan 2017 16:55:10 -0800 Subject: [PATCH 15/81] Host is now optional on Hue --- source/_components/light.hue.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/light.hue.markdown b/source/_components/light.hue.markdown index b13b1a0c7a3..4bb561e0514 100644 --- a/source/_components/light.hue.markdown +++ b/source/_components/light.hue.markdown @@ -31,7 +31,7 @@ light: Configuration variables: -- **host** (*Required*): IP address of the device, eg. 192.168.1.10. +- **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*): This will allow unreachable bulbs to report their state correctly. By default *name* from the device is used. - **filename** (*Optional*): Make this unique if specifying multiple Hue hubs. - **allow_in_emulated_hue** (*Optional*): Enable this to block all Hue entities from being added to the `emulated_hue` component. From a477eaf44b6551c003c8e4bbd87edb6dd5d4a641 Mon Sep 17 00:00:00 2001 From: Matt N Date: Sun, 29 Jan 2017 00:23:46 -0800 Subject: [PATCH 16/81] Fix typos and grammar in media_player.vlc.markdown (#1894) --- source/_components/media_player.vlc.markdown | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/source/_components/media_player.vlc.markdown b/source/_components/media_player.vlc.markdown index f3bd0064399..21ed9cdf248 100644 --- a/source/_components/media_player.vlc.markdown +++ b/source/_components/media_player.vlc.markdown @@ -29,13 +29,13 @@ Configuration variables: - **name** (*Optional*): The name to use in the frontend. - **arguments** (*Optional*): Additional arguments to be passed to VLC. -Only "music" media type is supported for now. +Only the "music" media type is supported for now. This service will control a background VLC instance, therefore you cannot use this to control a VLC instance launched on your desktop, unlike the Kodi media player for example. ## {% linkable_title Full configuration %} -A full configuration for VLC could llok like the one below: +A full configuration for VLC could look like the one below: ```yaml # Example configuration.yaml entry @@ -47,7 +47,7 @@ media_player: ##### {% linkable_title Additional configuration on macOS %} -On macOS phython-vlc won’t find the VLC plugin directory unless you add this to the user’s `.bash_profile` that is running Home Assistant: +On macOS `python-vlc` won’t find the VLC plugin directory unless you add this to the user’s `.bash_profile` that is running Home Assistant: ```bash export VLC_PLUGIN_PATH=$VLC_PLUGIN_PATH:/Applications/VLC.app/Contents/MacOS/plugins @@ -55,7 +55,7 @@ export VLC_PLUGIN_PATH=$VLC_PLUGIN_PATH:/Applications/VLC.app/Contents/MacOS/plu ##### {% linkable_title Additional configuration for Rasperry Pi %} -You need to add `homeassistant` user to `audio` group: +You need to add the `homeassistant` user to the `audio` group: ```bash sudo usermod -a -G audio homeassistant From f788abf2cde239245d17cd48e03eac2862c3a322 Mon Sep 17 00:00:00 2001 From: Alok Saboo Date: Sun, 29 Jan 2017 03:24:36 -0500 Subject: [PATCH 17/81] Added default option (#1903) --- source/_components/emulated_hue.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/emulated_hue.markdown b/source/_components/emulated_hue.markdown index 8c622ce7cc8..1c82a36da79 100644 --- a/source/_components/emulated_hue.markdown +++ b/source/_components/emulated_hue.markdown @@ -39,7 +39,7 @@ emulated_hue: Configuration variables: -- **type** (*Optional*): The type of assistant who we are emulated for. Either `alexa` or `google_home`. +- **type** (*Optional*): The type of assistant who we are emulated for. Either `alexa` or `google_home`, defaults to `alexa`. - **host_ip** (*Optional*): The IP address that your Home Assistant installation is running on. If you do not specify this option, the component will attempt to determine the IP address on its own. - **listen_port** (*Optional*): The port the Hue bridge API web server will run on. If not specified, this defaults to 8300. This can be any free port on your system. - **upnp_bind_multicast** (*Optional*): Whether or not to bind the UPNP (SSDP) listener to the multicast address (239.255.255.250) or instead to the (unicast) host_ip address specified above (or automatically determined). The default is true, which will work for most situations. In special circumstances, like running in a FreeBSD or FreeNAS jail, you may need to disable this. From f9e982cd457f7f1b7e3da777f7038ce1faf34807 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Sun, 29 Jan 2017 13:32:40 +0100 Subject: [PATCH 18/81] Remove duplicate --- source/_components/media_player.plex.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/media_player.plex.markdown b/source/_components/media_player.plex.markdown index f22c20ba4d4..8ac957ebcf7 100644 --- a/source/_components/media_player.plex.markdown +++ b/source/_components/media_player.plex.markdown @@ -15,7 +15,7 @@ ha_iot_class: "Local Polling" --- -The `plex` platform allows you to connect a [Plex Media Server](https://plex.tv) to Home Assistant. It will allow you to control media playback and see the current playing item. The preferred way to setup the Plex platform is by enabling the the [the discovery component](/components/discovery/) and requires GDM to be enabled. +The `plex` platform allows you to connect a [Plex Media Server](https://plex.tv) to Home Assistant. It will allow you to control media playback and see the current playing item. The preferred way to setup the Plex platform is by enabling the [the discovery component](/components/discovery/) and requires GDM to be enabled. If local authentication is enabled or multiple users are defined, Home Assistant requires an authentication token to be entered in the frontend. Press "CONFIGURE" to do it. From f91948eea81a65f936dd5f2ab65a0fdc7ef19d7f Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Sun, 29 Jan 2017 13:33:16 +0100 Subject: [PATCH 19/81] Add inital Lutron docs --- source/_components/lutron.markdown | 17 +++++++++++++++++ source/images/supported_brands/lutron.png | Bin 0 -> 7969 bytes 2 files changed, 17 insertions(+) create mode 100644 source/_components/lutron.markdown create mode 100644 source/images/supported_brands/lutron.png diff --git a/source/_components/lutron.markdown b/source/_components/lutron.markdown new file mode 100644 index 00000000000..944364e0824 --- /dev/null +++ b/source/_components/lutron.markdown @@ -0,0 +1,17 @@ +--- +layout: page +title: "Lutron" +description: "Instructions how to use Lutron devices with Home Assistant." +date: 2017-01-28 13:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: lutron.png +ha_category: Hub +featured: False +ha_release: 0.37 +--- + +The `lutron` component is the base for all [Lutron](http://www.lutron.com/) in Home Assistant. The preferred way to setup the `lutron` component is by enabling the [the discovery component](/components/discovery/). + diff --git a/source/images/supported_brands/lutron.png b/source/images/supported_brands/lutron.png new file mode 100644 index 0000000000000000000000000000000000000000..c62feb80d47c71bddbf6e7537d447908729019cd GIT binary patch literal 7969 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 lD*s>pR|Fnob`H1&0X1cEle(jV34i Date: Sun, 29 Jan 2017 15:46:29 +0100 Subject: [PATCH 20/81] Documentation for linksys_ap device tracker (#1600) * Documentation for linksys_ap device tracker * Update device_tracker.linksys_ap.markdown * Update device_tracker.linksys_ap.markdown * Update device_tracker.linksys_ap.markdown --- .../device_tracker.linksys_ap.markdown | 49 +++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 source/_components/device_tracker.linksys_ap.markdown diff --git a/source/_components/device_tracker.linksys_ap.markdown b/source/_components/device_tracker.linksys_ap.markdown new file mode 100644 index 00000000000..8f3e2a4716a --- /dev/null +++ b/source/_components/device_tracker.linksys_ap.markdown @@ -0,0 +1,49 @@ +--- +layout: page +title: "Linksys Access Points" +description: "Instructions how to integrate Linksys Access Points into Home Assistant." +date: 2016-12-16 01:40 +sidebar: true +comments: false +sharing: true +footer: true +ha_category: Presence Detection +featured: false +ha_release: 0.37 +--- + +The `linksys_ap` platform offers presence detection by looking at connected devices to a Linksys based access point. +It was tested with a LAPAC1750 AC1750 Dual Band Access Point. + +To use a Linksys Access Point in your installation, add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +device_tracker: + - platform: linksys_ap + host: 192.168.1.1 + username: admin + password: password +``` + +Configuration variables: + +- **host** (*Required*): The hostname or IP address of your access point, eg. `192.168.1.1`. +- **username** (*Required*: The username of an user with administrative privileges (read-only is sufficient). +- **password** (*Required*): The password for your given admin account. +- **verify_ssl** (*Optional*): Verify SSL certificate for https request. Defaults to true. + +Example for all configuration options: +```yaml +# Example configuration.yaml entry +device_tracker: + - platform: linksys_ap + host: 192.168.1.1 + username: admin + password: password + verify_ssl: true + scan_interval: 6 + consider_home: 12 +``` + +See the [device tracker component page](/components/device_tracker/) for instructions how to configure the people to be tracked. From b9cdd75e6e8a7cf6b5fa63ff760ed9d693053d28 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Sun, 29 Jan 2017 15:57:13 +0100 Subject: [PATCH 21/81] Add logo --- .../device_tracker.linksys_ap.markdown | 2 +- source/images/supported_brands/linksys.png | Bin 0 -> 75740 bytes 2 files changed, 1 insertion(+), 1 deletion(-) create mode 100644 source/images/supported_brands/linksys.png diff --git a/source/_components/device_tracker.linksys_ap.markdown b/source/_components/device_tracker.linksys_ap.markdown index 8f3e2a4716a..b9821eb5227 100644 --- a/source/_components/device_tracker.linksys_ap.markdown +++ b/source/_components/device_tracker.linksys_ap.markdown @@ -8,7 +8,7 @@ comments: false sharing: true footer: true ha_category: Presence Detection -featured: false +logo: linksys.png ha_release: 0.37 --- diff --git a/source/images/supported_brands/linksys.png b/source/images/supported_brands/linksys.png new file mode 100644 index 0000000000000000000000000000000000000000..fe7aa78c65413c5fb728a076d3d6f4ff7b5d3cd2 GIT binary patch literal 75740 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 literal 0 HcmV?d00001 From 617259ba56d63edcc4d21001251ac07a325f7918 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Sun, 29 Jan 2017 16:02:36 +0100 Subject: [PATCH 22/81] Add logo --- source/_components/light.avion.markdown | 10 ++++++---- source/images/supported_brands/avi-on.png | Bin 0 -> 6112 bytes 2 files changed, 6 insertions(+), 4 deletions(-) create mode 100644 source/images/supported_brands/avi-on.png diff --git a/source/_components/light.avion.markdown b/source/_components/light.avion.markdown index 34e882699e6..6fbcab8a579 100644 --- a/source/_components/light.avion.markdown +++ b/source/_components/light.avion.markdown @@ -1,7 +1,7 @@ --- layout: page -title: "Avion" -description: "Instructions on how to setup GE Avion Bluetooth dimmers within Home Assistant." +title: "Avi-on" +description: "Instructions on how to setup GE Avi-on Bluetooth dimmers within Home Assistant." date: 2017-01-17 23:17 sidebar: true comments: false @@ -9,11 +9,13 @@ sharing: true footer: true ha_category: Light ha_iot_class: "Assumed State" -featured: false +logo: avi-on.png ha_release: 0.37 --- -Support for the Avion Bluetooth dimmer switch [Avi-On](http://avi-on.com/). To enable these lights, add the following lines to your `configuration.yaml` file: +Support for the Avi-on Bluetooth dimmer switch [Avi-On](http://avi-on.com/). + +To enable these lights, add the following lines to your `configuration.yaml` file: ```yaml # Example configuration.yaml entry diff --git a/source/images/supported_brands/avi-on.png b/source/images/supported_brands/avi-on.png new file mode 100644 index 0000000000000000000000000000000000000000..c1c65f77e6da3eb777a5653ce256a3b555bf7341 GIT binary patch literal 6112 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 HScm@yF8F9` literal 0 HcmV?d00001 From 265168bb630fcda886b5ec759e98d053cbe17e20 Mon Sep 17 00:00:00 2001 From: fakezeta Date: Mon, 30 Jan 2017 13:50:22 +0100 Subject: [PATCH 23/81] Added documentation for notify.twilio_call component (#1885) * Added documentation for notify.twilio_call component * Correct version number * Added some information and limitation about the Twilio free trial * revision bump * Update notify.twilio_call.markdown --- .../_components/notify.twilio_call.markdown | 61 +++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 source/_components/notify.twilio_call.markdown diff --git a/source/_components/notify.twilio_call.markdown b/source/_components/notify.twilio_call.markdown new file mode 100644 index 00000000000..a5989bd1424 --- /dev/null +++ b/source/_components/notify.twilio_call.markdown @@ -0,0 +1,61 @@ +yout: page +title: "Twilio Call" +description: "Instructions how to add user notifications to Home Assistant." +date: 2017-01-27 00:09 +sidebar: true +comments: false +sharing: true +footer: true +logo: twilio.png +ha_category: Notifications +ha_release: "0.37" +--- + +The `twilio` notification platform enables sending notifications via Voice, powered by [Twilio](https://twilio.com). +Passed message will be read by Text-To-Speech service. + +This component is just an adaptation from the Twilio SMS notification platform and won't exist without it. + +Free trial account is available at [Twilio](https://twilio.com) website providing free calls to verified phone numbers. +Calls are limited to 10 minutes and will play a short trial message before your message runs. + +Upgraded accounts have no limitation. + +To use this notification platform in your installation, add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +notify: + - name: NOTIFIER_NAME + platform: twilio_call + account_sid: ACCOUNT_SID_FROM_TWILIO + auth_token: AUTH_TOKEN_FROM_TWILIO + from_number: E164_PHONE_NUMBER +``` + +Configuration variables: + +- **account_sid** (*Required*): Your Twilio Account SID which can be found in your [console](https://www.twilio.com/console). It starts with the letters `AC`. +- **auth_token** (*Required*): Your Twilio Account SID which can be found in your [console](https://www.twilio.com/console). It should be directly under where you found the `account_sid`. +- **from_number** (*Required*): An [E.164](https://en.wikipedia.org/wiki/E.164) formatted phone number, like +14151234567. See [Twilio's guide to formatting phone numbers](https://www.twilio.com/help/faq/phone-numbers/how-do-i-format-phone-numbers-to-work-internationally) for more information. +- **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`. + +### {% linkable_title Usage %} + +Twilio is a notify platform and thus can be controlled by calling the notify service [as described here](/components/notify/). It will send a notification to all E.164 phone numbers in the notification **target**. See the notes above regarding the `from_number` configuration variable for information about formatting phone numbers. + +```yaml +# Example automation notification entry +automation: + - alias: The sun has set + trigger: + platform: sun + event: sunset + action: + service: notify.twilio_sms + data: + message: 'The sun has set' + target: + - +14151234567 + - +15105555555 +``` From e0d73b0a965e39471feea0237f105b9dee63efde Mon Sep 17 00:00:00 2001 From: Andrzej Date: Mon, 30 Jan 2017 14:34:42 +0100 Subject: [PATCH 24/81] Update notify.html5.markdown (#1916) Configuration addon resolving html5 callback security issue with htpasswd nginx proxy --- source/_components/notify.html5.markdown | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/source/_components/notify.html5.markdown b/source/_components/notify.html5.markdown index 63197a526ea..559e57c7a71 100644 --- a/source/_components/notify.html5.markdown +++ b/source/_components/notify.html5.markdown @@ -236,3 +236,27 @@ You will receive an event named `html5_notification.closed` when the notificatio platform: event event_type: html5_notification.closed ``` + +### {% linkable_title Making notifications work with NGINX proxy %} + +If you use [NGINX](/ecosystem/nginx/) as an proxy with authentication in front of HASS, you may have trouble with receiving events back to HASS. It's because of authentication token that cannot be passed through the proxy. + +To solve the issue put additional location into your nginx site's configuration: + +```bash +location /api/notify.html5/callback { + if ($http_authorization = "") { return 403; } + allow all; + proxy_pass http://localhost:8123; + proxy_set_header Host $host; + proxy_redirect http:// https://; +} +``` + +This rule check if request have `Authorization` HTTP header and bypass the htpasswd (if you use one). + +If you still have the problem, even with mentioned rule, try to add this code: +```bash + proxy_set_header Authorization $http_authorization; + proxy_pass_header Authorization; +``` From c194ab6b7ae2800db499b4099554b6604d0fdeda Mon Sep 17 00:00:00 2001 From: RunOnGitHub Date: Mon, 30 Jan 2017 15:00:11 +0100 Subject: [PATCH 25/81] Update hdmi_cec.markdown (#1915) If we follow the instructions on raspberry, the install path is different after a manual build. --- source/_components/hdmi_cec.markdown | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/source/_components/hdmi_cec.markdown b/source/_components/hdmi_cec.markdown index e586904bc00..1e13b407d1b 100644 --- a/source/_components/hdmi_cec.markdown +++ b/source/_components/hdmi_cec.markdown @@ -39,6 +39,13 @@ For the default virtual environment of a [Raspberry Pi All-In-One installation]( $ ln -s /usr/local/lib/python3.4/dist-packages/cec /srv/hass/hass_venv/lib/python3.4/site-packages ``` +For the default virtual environment of a [Manual installation](/getting-started/installation-raspberry-pi/) the command would be as follows. + +```bash +$ ln -s /usr/local/lib/python3.4/site-packages/cec /srv/hass/hass_venv/lib/python3.4/site-packages +``` + +

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

From 226fc527d4552250a172d1cecdf28bd5fc5b5e6c Mon Sep 17 00:00:00 2001 From: David McNett Date: Mon, 30 Jan 2017 08:08:30 -0600 Subject: [PATCH 26/81] Document OID for Ruckus ZoneDirector presence detection via SNMP (#1897) --- source/_components/device_tracker.snmp.markdown | 1 + 1 file changed, 1 insertion(+) diff --git a/source/_components/device_tracker.snmp.markdown b/source/_components/device_tracker.snmp.markdown index 601c8283291..d8559db08c0 100644 --- a/source/_components/device_tracker.snmp.markdown +++ b/source/_components/device_tracker.snmp.markdown @@ -29,6 +29,7 @@ OID examples: - pfSense: `1.3.6.1.2.1.4.22.1.2` (tested on 2.2.4-RELEASE, need to enable SNMP service) - TPLink: `1.3.6.1.2.1.3.1.1.2.19.1` (Archer VR2600v, need to enable SNMP service) - EdgeRouter `1.3.6.1.2.1.4.22.1.2` (EdgeRouter Lite v1.9.0, need to enable SNMP service) +- Ruckus: `1.3.6.1.4.1.25053.1.2.2.1.1.3.1.1.1.6` (Ruckus ZoneDirector, tested on 9.13.3) To use the SNMP version 1 platform in your installation, add the following to your `configuration.yaml` file: From 623024ee29d6bfc879b7db9b79b9481e40c7d7e7 Mon Sep 17 00:00:00 2001 From: Josh Wright Date: Tue, 31 Jan 2017 19:05:18 -0500 Subject: [PATCH 27/81] Language cleanup on sensor.http A small cleanup of some language and phrasing on the sensor.http page. --- source/_components/sensor.http.markdown | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/_components/sensor.http.markdown b/source/_components/sensor.http.markdown index fc294d49470..c3fcefa4943 100644 --- a/source/_components/sensor.http.markdown +++ b/source/_components/sensor.http.markdown @@ -28,7 +28,7 @@ You should choose a unique device name (DEVICE_NAME) to avoid clashes with other {"state": "20", "attributes": {"unit_of_measurement": "°C", "friendly_name": "Bathroom Temperature"}} ``` -For a quick test `curl` can be useful to "simulate" a device. +For a quick test, `curl` can be useful to "simulate" a device. ```bash $ curl -X POST -H "x-ha-access: YOUR_PASSWORD" \ @@ -37,7 +37,7 @@ $ curl -X POST -H "x-ha-access: YOUR_PASSWORD" \ http://localhost:8123/api/states/sensor.bathroom_temperature ``` -Use again `curl` to retrieve the [current state](/developers/rest_api/#get-apistatesltentity_id) to check if the sensor is working. +You can then use `curl` again to retrieve the [current sensor state](/developers/rest_api/#get-apistatesltentity_id) and verify the sensor is working. ```bash $ curl -X GET -H "x-ha-access: YOUR_PASSWORD" \ From 9b6240553a01e1903bc4c4700e89795e179ef8dd Mon Sep 17 00:00:00 2001 From: Pascal Vizeli Date: Wed, 1 Feb 2017 09:01:06 +0100 Subject: [PATCH 28/81] Spliting doc for ffmpeg binary sensor (#1924) --- ...n => binary_sensor.ffmpeg_motion.markdown} | 44 +++-------------- .../binary_sensor.ffmpeg_noise.markdown | 48 +++++++++++++++++++ 2 files changed, 54 insertions(+), 38 deletions(-) rename source/_components/{binary_sensor.ffmpeg.markdown => binary_sensor.ffmpeg_motion.markdown} (54%) create mode 100644 source/_components/binary_sensor.ffmpeg_noise.markdown diff --git a/source/_components/binary_sensor.ffmpeg.markdown b/source/_components/binary_sensor.ffmpeg_motion.markdown similarity index 54% rename from source/_components/binary_sensor.ffmpeg.markdown rename to source/_components/binary_sensor.ffmpeg_motion.markdown index 35201fbea47..1d86e45e1ad 100644 --- a/source/_components/binary_sensor.ffmpeg.markdown +++ b/source/_components/binary_sensor.ffmpeg_motion.markdown @@ -1,7 +1,7 @@ --- layout: page -title: "FFmpeg Binary Sensor" -description: "Instructions on how to integrate an FFmpeg-based binary sensor" +title: "FFmpeg Motion Binary Sensor" +description: "Instructions on how to integrate an FFmpeg-based motion binary sensor" date: 2016-08-25 08:00 sidebar: true comments: false @@ -10,45 +10,15 @@ footer: true logo: ffmpeg.png ha_category: Binary Sensor ha_release: 0.27 -ha_iot_class: "Local Polling" --- -The `ffmpeg` platform allows you to use any video or audio feed with [FFmpeg](http://www.ffmpeg.org/) for various sensors in Home Assistant. Available are: **noise**, **motion**. +The `ffmpeg` platform allows you to use any video feed with [FFmpeg](http://www.ffmpeg.org/) for motion sensors in Home Assistant.

-If the `ffmpeg` process is broken, the sensor will be unavailable. To controll the ffmpeg process of sensor, use the service *binary_sensor.ffmpeg_start*, *binary_sensor.ffmpeg_stop*, *binary_sensor.ffmpeg_restart*. +If the `ffmpeg` process is broken, the sensor will be unavailable. To controll the ffmpeg process of sensor, use the service *ffmpeg.start*, *ffmpeg.stop*, *ffmpeg.restart*.

-### {% linkable_title Noise %} - -To add FFmpeg with noise detection to your installation, add the following to your `configuration.yaml` file: - -```yaml -# Example configuration.yaml entry -binary_sensor: - - platform: ffmpeg - tool: noise -``` - -Configuration variables: - -- **input** (*Required*): An FFmpeg-compatible input file, stream, or feed. -- **tool** (*Required*): `noise`. -- **name** (*Optional*): Override the name of your camera. -- **initial_state** (*Optional*): Default true. Start ffmpeg with home-assistant. -- **peak** (*Optional*): Default -30. The threshold of detecting noise, in dB. 0 is very loud and -100 is low. -- **duration** (*Optional*): Default 1 second. How long the noise needs to be over the peak to trigger the state. -- **reset** (*Optional*): Default 20 seconds. The time to reset the state after no new noise is over the peak. -- **extra_arguments** (*Optional*): Extra options to pass to `ffmpeg`, like audio frequency filtering. -- **output** (*Optional*): Allows you to send the audio output of this sensor to an Icecast server or other FFmpeg-supported output, e.g. to stream with Sonos after a state is triggered. - -To experiment with values: - -```bash -$ ffmpeg -i YOUR_INPUT -vn -filter:a silencedetect=n=-30dB:d=1 -f null - -``` - ### {% linkable_title Motion %} FFmpeg doesn't have a motion detection filter, but can use a scene filter to detect a new scene/motion. You can set how much needs to change in order to detect motion with the option 'changes', the percent value of change between frames. If you want a really small value for 'changes', you can also add a denoise filter. @@ -59,16 +29,14 @@ To add FFmpeg with motion detection to your installation, add the following to y # Example configuration.yaml entry binary_sensor: - platform: ffmpeg - tool: motion input: FFMPEG_SUPPORTED_INPUT ``` Configuration variables: - **input** (*Required*): An FFmpeg-compatible input file, stream, or feed. -- **tool** (*Required*): `motion`. - **name** (*Optional*): Override the name of your camera for the frontend. -- **initial_state** (*Optional*): Start `ffmpeg` with Home Assistant. Defaults to `true`. +- **initial_state** (*Optional*): Start `ffmpeg` with Home Assistant. Defaults to `true`. - **changes** (*Optional*): How much needs to change between two frames to detect it as motion (a lower value is more sensitive). Defaults to 10%. - **reset** (*Optional*): The time to reset the state after no new motion is detected. Defaults to 20 seconds. - **repeat** (*Optional*): How many events need to be detected in *repeat_time* in order to trigger a motion. Defaults to 0 repeats (deactivated). @@ -85,7 +53,7 @@ If you are running into trouble with this sensor, please refer to the [troublesh #### {% linkable_title Tipps %} -- Use motion only in a customer area with [crop filter](https://ffmpeg.org/ffmpeg-filters.html#crop): +- Use motion only in a customer area with [crop filter](https://ffmpeg.org/ffmpeg-filters.html#crop): ```yaml extra_arguments: -filter:v "crop=100:100:12:34" diff --git a/source/_components/binary_sensor.ffmpeg_noise.markdown b/source/_components/binary_sensor.ffmpeg_noise.markdown new file mode 100644 index 00000000000..8ee08064d69 --- /dev/null +++ b/source/_components/binary_sensor.ffmpeg_noise.markdown @@ -0,0 +1,48 @@ +--- +layout: page +title: "FFmpeg Noise Binary Sensor" +description: "Instructions on how to integrate an FFmpeg-based noise binary sensor" +date: 2016-08-25 08:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: ffmpeg.png +ha_category: Binary Sensor +ha_release: 0.27 +--- + + +The `ffmpeg` platform allows you to use any video or audio feed with [FFmpeg](http://www.ffmpeg.org/) for various sensors in Home Assistant. + +

+If the `ffmpeg` process is broken, the sensor will be unavailable. To controll the ffmpeg process of sensor, use the service *ffmpeg.start*, *ffmpeg.stop*, *ffmpeg.restart*. +

+ +### {% linkable_title Noise %} + +To add FFmpeg with noise detection to your installation, add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +binary_sensor: + - platform: ffmpeg + input: FFMPEG_SUPPORTED_INPUT +``` + +Configuration variables: + +- **input** (*Required*): An FFmpeg-compatible input file, stream, or feed. +- **name** (*Optional*): Override the name of your camera. +- **initial_state** (*Optional*): Default true. Start ffmpeg with home-assistant. +- **peak** (*Optional*): Default -30. The threshold of detecting noise, in dB. 0 is very loud and -100 is low. +- **duration** (*Optional*): Default 1 second. How long the noise needs to be over the peak to trigger the state. +- **reset** (*Optional*): Default 20 seconds. The time to reset the state after no new noise is over the peak. +- **extra_arguments** (*Optional*): Extra options to pass to `ffmpeg`, like audio frequency filtering. +- **output** (*Optional*): Allows you to send the audio output of this sensor to an Icecast server or other FFmpeg-supported output, e.g. to stream with Sonos after a state is triggered. + +To experiment with values: + +```bash +$ ffmpeg -i YOUR_INPUT -vn -filter:a silencedetect=n=-30dB:d=1 -f null - +``` From 1d1f018e2cfa3feb08f9bf0979a7d653ab954eab Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Wed, 1 Feb 2017 09:04:37 +0100 Subject: [PATCH 29/81] Add redirect --- source/_components/binary_sensor.ffmpeg_motion.markdown | 1 + 1 file changed, 1 insertion(+) diff --git a/source/_components/binary_sensor.ffmpeg_motion.markdown b/source/_components/binary_sensor.ffmpeg_motion.markdown index 1d86e45e1ad..f9337073dd1 100644 --- a/source/_components/binary_sensor.ffmpeg_motion.markdown +++ b/source/_components/binary_sensor.ffmpeg_motion.markdown @@ -10,6 +10,7 @@ footer: true logo: ffmpeg.png ha_category: Binary Sensor ha_release: 0.27 +redirect_from: /components/binary_sensor.ffmpeg/ --- From a94b3fdf35ff7b36913550049cd9cf29dd9f40b4 Mon Sep 17 00:00:00 2001 From: Duoxilian Date: Thu, 2 Feb 2017 13:54:16 -0600 Subject: [PATCH 30/81] Update climate.markdown (#1944) --- source/_components/climate.markdown | 30 ++++++++++++++++++++++++++--- 1 file changed, 27 insertions(+), 3 deletions(-) diff --git a/source/_components/climate.markdown b/source/_components/climate.markdown index d90be5414d8..a8b0e8b3dd0 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` +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`

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**. @@ -54,12 +54,36 @@ automation: ### {% linkable_title Service `climate.set_away_mode` %} -This service has been deprecated. Use `climate.set_hold_mode` instead. +Set away mode for climate device. The away mode changes the target temperature permanently to a temperature +reflecting a situation where the climate device is set to save energy. This may be used to emulate a +"vacation mode", for example. + +| 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. +| `away_mode` | no | New value of away mode. + +#### {% linkable_title Automation example %} + +```yaml +automation: + trigger: + platform: time + after: "07:15:00" + action: + - service: climate.set_away_mode + data: + entity_id: climate.kitchen + away_mode: 'on' +``` ### {% linkable_title Service `climate.set_hold_mode` %} -Set hold mode for climate device +Set hold mode for climate device. The hold mode changes the target temperature of the client device temporarily to +a different temperature. Typical hold modes provided by a climate device are "away" or "home", where the hold temperature +is chosen depending on a predefined climate, or "temperature" hold, where a particular temperature is selected as the +temporary target temperature. The particular modes available depend on the climate device. | Service data attribute | Optional | Description | | ---------------------- | -------- | ----------- | From eedd1f18132f7974b67736a049af4c4326440c9a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20H=C3=B8yer=20Iversen?= Date: Thu, 2 Feb 2017 20:57:19 +0100 Subject: [PATCH 31/81] Update sensor.miflora.markdown (#1942) --- source/_components/sensor.miflora.markdown | 1 + 1 file changed, 1 insertion(+) diff --git a/source/_components/sensor.miflora.markdown b/source/_components/sensor.miflora.markdown index b35fa94d9e9..05a93c3f3c8 100644 --- a/source/_components/sensor.miflora.markdown +++ b/source/_components/sensor.miflora.markdown @@ -39,6 +39,7 @@ sensor: - **timeout** (*Optional*): Define the timeout value in seconds when polling (defaults to 10 if not defined) - **retries** (*Optional*): Define the number of retries when polling (defaults to 2 if not defined) - **cache** (*Optional*): Define cache expiration value in seconds (defaults to 1200 if not defined) +- **adapter** (*Optional*): Define the bluetooth adapter to use (defaults to hci0). Run `hciconfig` to get a list of available adapters. Note that by default the sensor is only polled once every 15 minutes. This means with the `median: 3` setting will take as least 30 minutes before the sensor will report a value after a Home Assistant restart. As the values usually change very slowly, this isn't a big problem. Reducing polling intervals will have a negative effect on the battery life. From ba04007709ca42628748d3c1a44d6476125c6a41 Mon Sep 17 00:00:00 2001 From: Philipp Schmitt Date: Thu, 2 Feb 2017 21:03:10 +0100 Subject: [PATCH 32/81] lock.nuki documentation (#1941) --- source/_components/lock.nuki.markdown | 47 ++++++++++++++++++++++++ source/images/supported_brands/nuki.png | Bin 0 -> 3929 bytes 2 files changed, 47 insertions(+) create mode 100644 source/_components/lock.nuki.markdown create mode 100644 source/images/supported_brands/nuki.png diff --git a/source/_components/lock.nuki.markdown b/source/_components/lock.nuki.markdown new file mode 100644 index 00000000000..eb944582b4d --- /dev/null +++ b/source/_components/lock.nuki.markdown @@ -0,0 +1,47 @@ +--- +layout: page +title: "Nuki Smart Lock" +description: "Instructions on how to integrate a Nuki Smart Lock devices." +date: 2017-02-02 09:35 +sidebar: true +comments: false +sharing: true +footer: true +logo: nuki.png +ha_category: Lock +featured: false +ha_release: 0.38 +ha_iot_class: "Local Polling" +--- + +The `nuki` platform allows you to control [Nuki Smart Locks](nuki.io) via either a [sofware](https://play.google.com/store/apps/details?id=io.nuki.bridge&hl=fr) or a [physical bridge](https://nuki.io/en/bridge/). + +To add a Nuki bridge to your installation, you need to enable developper mode on your bridge and define a port and an access token. This can be achieved using the Android app. Please note that there seems to be a maximum length for the API token, even though the app allows you to set a longer one. +Then add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +lock: + - platform: nuki + host: 192.168.1.120 + token: fe2345ef +``` + +Configuration variables: + +- **host** (*Required*): The IP or hostname of the Nuki bridge. +- **port** (*Optional*): The port on which the Nuki bridge is listening on. Defaults to `8080`. +- **token** (*Optional*): The token that was defined when setting up the bridge. + +## {% linkable_title Full configuration %} + +Here's a full configuration example for a Nuki bridge: + +```yaml +# Example configuration.yaml entry +lock: + - platform: nuki + host: 192.168.1.120 + port: 8080 + token: fe2345ef +``` diff --git a/source/images/supported_brands/nuki.png b/source/images/supported_brands/nuki.png new file mode 100644 index 0000000000000000000000000000000000000000..c916b469bf4323597186b5d2684a93be6c076148 GIT binary patch literal 3929 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 Date: Thu, 2 Feb 2017 15:29:16 -0500 Subject: [PATCH 33/81] Document the QNAP sensor (#1943) --- source/_components/sensor.qnap.markdown | 65 ++++++++++++++++++++++++ source/images/supported_brands/qnap.png | Bin 0 -> 23115 bytes 2 files changed, 65 insertions(+) create mode 100644 source/_components/sensor.qnap.markdown create mode 100644 source/images/supported_brands/qnap.png diff --git a/source/_components/sensor.qnap.markdown b/source/_components/sensor.qnap.markdown new file mode 100644 index 00000000000..c00ad813859 --- /dev/null +++ b/source/_components/sensor.qnap.markdown @@ -0,0 +1,65 @@ +--- +layout: page +title: "QNAP Sensor" +description: "Instructions how to integrate the QNAP sensor within Home Assistant." +date: 2017-02-02 06:39 +sidebar: true +comments: false +sharing: true +footer: true +logo: qnap.png +ha_category: Sensor +ha_release: 0.38 +ha_iot_class: "Local Polling" +--- + + +This `qnap` sensor allows getting various statistics from your [QNAP NAS](https://www.qnap.com/en-us/). + +To use the `qnap` sensor in your installation, add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yml entry +sensor: + - platform: qnap + host: IP_ADDRESS_OF_QNAP_NAS + username: USERNAME + password: PASSWORD + monitored_conditions: + - status + - cpu_usage + - memory_percent_used + - network_tx + - volume_percentage_used +``` + +Configuration variables: + +- **host** (*Required*): The IP address of the QNAP NAS to monitor +- **port** (*Optional*): The port number on which the QNAP NAS web interface is reachable. Defaults to `8080`. +- **ssl** (*Optional*): Whether to connect via `https`. Defaults to `false`. +- **username** (*Required*): An user to connect to the QNAP NAS. +- **password** (*Required*): The password of the user to connect to the QNAP NAS. +- **drives** (*Optional*): Array of drives to monitor (ex: `0:1`). Defaults to all drives. +- **volumes** (*Optional*): Array of volumes to monitor (ex: `DataVol1`). Defaults to all volumes. +- **nics** (*Optional*): Array of network interfaces to monitor (ex: `eth0`). Defaults to all NICs. +- **monitored_conditions** (*Required*): Defines the stats to monitor as sensors. + - **status**: Displays overall system health. + - **cpu_temp**: Displays the CPU's temperature. + - **cpu_usage**: Displays the CPU's utilization as a percentage. + - **memory_free**: Displays the size of available RAM in GB. + - **memory_used**: Displays the size of used RAM in GB. + - **memory_percent_used**: Displays the size of used RAM as a percentage of total RAM. + - **network_link_status**: Displays whether the network interfaces is up (creates a new entry for each interface). + - **network_tx**: Displays the upload speed of a network interface in MB/s (creates a new entry for each interface). + - **network_rx**: Displays the download speed of a network interface in MB/s (creates a new entry for each interface). + - **drive_smart_status**: Displays the S.M.A.R.T. status of the drive (creates a new entry for each drive). + - **drive_temp**: Displays the temperature of the drive (creates a new entry for each drive). + - **volume_size_free**: Displays the available space of the volume in GB (creates a new entry for each volume). + - **volume_size_used**: Displays the used space of the volume in GB (creates a new entry for each volume). + - **volume_percentage_used**: Displays the used space of the volume as a percentage (creates a new entry for each volume). + +QNAP device support: + +This component has been tested on a TS-451 running QTS 4.2.2. Other QNAP NAS devices using similar firmware should work fine. +For more information about supported devices, or to report issues with your device, please visit the [qnapstats project](https://github.com/colinodell/python-qnapstats#device-support). \ No newline at end of file diff --git a/source/images/supported_brands/qnap.png b/source/images/supported_brands/qnap.png new file mode 100644 index 0000000000000000000000000000000000000000..2ffae64462cbf06d40a69878fabf775772eb4a0f GIT binary patch literal 23115 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 literal 0 HcmV?d00001 From fe577ef1720b7c1d62b1842c81f9e529e9bde460 Mon Sep 17 00:00:00 2001 From: miniconfig Date: Fri, 3 Feb 2017 02:05:33 -0500 Subject: [PATCH 34/81] Added Documentation for OpenEVSE sensor. (#1947) * Added Documentation for OpenEVSE sensor. * Added ha_release. --- source/_components/sensor.openevse.markdown | 40 ++++++++++++++++++++ source/images/supported_brands/openevse.png | Bin 0 -> 12257 bytes 2 files changed, 40 insertions(+) create mode 100644 source/_components/sensor.openevse.markdown create mode 100644 source/images/supported_brands/openevse.png diff --git a/source/_components/sensor.openevse.markdown b/source/_components/sensor.openevse.markdown new file mode 100644 index 00000000000..5325eb0da1b --- /dev/null +++ b/source/_components/sensor.openevse.markdown @@ -0,0 +1,40 @@ +--- +layout: page +title: "OpenEVSE Sensor" +description: "Instructions how to integrate a WiFi-equipped OpenEVSE Charging station with Home Assistant" +date: 2017-02-02 22:09 +sidebar: true +comments: false +sharing: true +footer: true +logo: openevse.png +ha_category: Sensor +ha_release: "0.38" +--- + + +This `openevse` sensor platform pulls data from an [OpenEVSE](https://www.openevse.com/) Charging station equipped with an ESP8266-based wifi connection. + +To enable this sensor in your installation, add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yml entry +sensor: + - platform: openevse + host: IP_ADDRESS + monitored_variables: + - status +``` + +Configuration variables: + +- **api_key** (*Required*): Your Sonarr API key, found in Settings > General in the Sonarr Web UI. +- **host** (*Required*): The IP address or hostname of your charger +- **monitored_variables** array (*Required*): Conditions to display on the frontend. + - **status**: The status of the charger (i.e., "Connected", "Charging", etc.) + - **charge_time**: The number of minutes the charging has been charging, or 0 if it is not charging. + - **rtc_temp**: The temperature reported by the real time clock sensor, or 0 if the sensor is not installed. + - **ir_temp**: The temperature reported by the IR remote sensor, or 0 if the sensor is not installed. + - **ambient_temp**: The temperature reported by the ambient sensor, or 0 if the sensor is not installed. + - **usage_session**: The energy usage for the current charging session. + - **usage_total**: The total energy usage for the device. diff --git a/source/images/supported_brands/openevse.png b/source/images/supported_brands/openevse.png new file mode 100644 index 0000000000000000000000000000000000000000..0c3eb00f5d3dbc33f67abc947b657132383a8a94 GIT binary patch literal 12257 zcmV<7FCNf|P)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00006 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 literal 0 HcmV?d00001 From 49a0841126c57d56b2b7b20a872a8096825a4267 Mon Sep 17 00:00:00 2001 From: Ryan Kraus Date: Fri, 3 Feb 2017 02:26:18 -0500 Subject: [PATCH 35/81] Alert component documentation. (#1787) * Alert component documentation. Added the documentation for the alert component. home-assistant/home-assistant#5201 * Updated alert documentation to reflect changes made in PR. * Bumped the ha_release number. --- source/_components/alert.markdown | 121 ++++++++++++++++++++++++++++++ 1 file changed, 121 insertions(+) create mode 100644 source/_components/alert.markdown diff --git a/source/_components/alert.markdown b/source/_components/alert.markdown new file mode 100644 index 00000000000..edaaff7d20e --- /dev/null +++ b/source/_components/alert.markdown @@ -0,0 +1,121 @@ +--- +layout: page +title: "Alert" +description: "Instructions how to setup automatic alerts within Home Assistant." +date: 2017-01-15 20:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: home-assistant.png +ha_category: Automation +ha_release: 0.38 +--- + +The `alert` component is designed to notify you when problematic issues arise. +For example, if the garage door is left open, the `alert` component can be +used remind you of this by sending you repeating notifications at customizable +intervals. This is also useful for low battery sensors, water leak sensors, +or any condition that may need your attention. + +Alerts will add an entity to the front end only when they are firing. This +entity allows you to silence an alert until it is resolved. + +### {% linkable_title Basic Example %} + +The `alert` component makes use of any of the `notifications` components. +To setup the `alert` component, first, you must setup a `notification` +component. Then, add the following to your configuration file: + +```yaml +# Example configuration.yaml entry +alert: + garage_door: + name: Garage is open + entity_id: input_boolean.garage_door + state: 'on' # Optional, 'on' is the default value + repeat: 30 + can_acknowledge: True # Optional, default is True + skip_first: True # Optional, false is the default + notifiers: + - ryans_phone + - kristens_phone +``` +Configuration variables: + +- **name** (*Required*): The friendly name of the alert. +- **entity_id** (*Required*): The ID of the entity to watch. +- **state** (*Optional*): The problem condition for the entity. +- **repeat** (*Required*): Number of minutes before the notification should be repeated. Can be either a number or a list of numbers. +- **can_acknowledge** (*Optional*): Allows the alert to be unacknowledgable. +- **skip_first** (*Optional*): Controls whether the notification should be sent immediately or after the first delay. +- **notifiers** (*Required*): List of `notification` components to use for alerts. + +In this example, the garage door status (`input_boolean.garage_door`) is +watched and this alert will be triggered when its status is equal to `on`. +This indicates that the door has been opened. Because the `skip_first` +option was set to `True`, the first notification will not be delivered +immediately. However, every 30 minutes, a notification will be delivered until +either `input_boolean.garage_door` no longer has a state of `on` or until the +alert is acknowledged using the Home Assistant frontend. + +### {% linkable_title Complex Alert Criteria %} + +By design, the `alert` component only handles very simple criteria for firing. +That is, is only checks if a single entity's state is equal to a value. At some +point, it may be desireable to have an alert with a more complex criteria. +Possibly, when a battery percentage falls below a threshold. Maybe you want to +disable the alert on certain days. Maybe the alert firing should depend on more +than one input. For all of these situations, it is best to use the alert in +conjunction with a `Template Binary Sensor`. The following example does that. + +```yaml +binary_sensor: + - platform: template + sensors: + motion_battery_low: + value_template: {% raw %}'{{ states.sensor.motion.attributes.battery < 15 }}'{% endraw %} + friendly_name: 'Motion battery is low' + +alert: + motion_battery: + - name: Motion Battery is Low + entity_id: binary_sensor.motion_battery_low + repeat: 30 + notifiers: + - ryans_phone + - kristens_phone +``` + +This example will begin firing as soon as the entity `sensor.motion`'s +`battery` attribute falls below 15. It will continue to fire until the battery +attribute raises above 15 or the alert is acknowledged on the frontend. + +### {% linkable_title Dynamic Notification Delay Times %} + +It may be desireable to have the delays between alert notifications dynamically +change as the alert continues to fire. This can be done by setting the `repeat` +configuration key to a list of numbers rather than a single number. Altering +the first example would look like the following. + +```yaml +# Example configuration.yaml entry +alert: + garage_door: + name: Garage is open + entity_id: input_boolean.garage_door + state: 'on' # Optional, 'on' is the default value + repeat: + - 15 + - 30 + - 60 + can_acknowledge: True # Optional, default is True + skip_first: True # Optional, false is the default + notifiers: + - ryans_phone + - kristens_phone +``` + +Now, the first message will be sent after a 15 minute delay. The second will be +sent after a 30 minute delay. A 60 minute delay will fall between every +following notification. From cadb541ebf526d291210c93cbed3e4dd80f393ff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Wolf-Bastian=20P=C3=B6ttner?= Date: Fri, 3 Feb 2017 08:30:22 +0100 Subject: [PATCH 36/81] Added documentation for fritz dect switches (#1867) --- source/_components/switch.fritzdect.markdown | 43 ++++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 source/_components/switch.fritzdect.markdown diff --git a/source/_components/switch.fritzdect.markdown b/source/_components/switch.fritzdect.markdown new file mode 100644 index 00000000000..cf4dce4061f --- /dev/null +++ b/source/_components/switch.fritzdect.markdown @@ -0,0 +1,43 @@ +--- +layout: page +title: "AVM FRITZ!DECT Switch" +description: "Instructions how to integrate your AVM FRITZ!DECT switches into Home Assistant." +date: 2017-01-24 21:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: avm.png +ha_category: Switch +ha_iot_class: "Local Polling" +ha_release: 0.37 +--- + + +The `fritzdect` switch platform allows you to control the state of your [AVM FRITZ!DECT DECT-based wireless switches](https://en.avm.de/products/fritzdect/). The AVM FRITZ!DECT switches need to be paired to your Fritz!Box and then can be monitored and controlled via Home Assistant. + +Supported devices (tested): + +- FRITZ!DECT 200 + +Supported Firmwares (tested): + +- FRITZ!OS: 06.80 / FRITZ!DECT: 03.83 +- FRITZ!OS: 06.60 / FRITZ!DECT: 03.83 + +To use your AVM FRITZ!DECT switch(es) in your installation, add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +switch: + - platform: fritzdect + username: YOUR_USERNAME + password: YOUR_PASSWORD +``` + +Configuration variables: + +- **host** (*Optional*): The IP address / hostname of your Fritz!Box. Defaults to fritz.box. +- **username** (*Required*): The username for your Fritz!Box. +- **password** (*Required*): The password for your Fritz!Box. + From cc9204a1173545f0b6e3251876bb6be56367fce3 Mon Sep 17 00:00:00 2001 From: Philipp Schmitt Date: Fri, 3 Feb 2017 08:55:24 +0100 Subject: [PATCH 37/81] Add documentation for Orange Livebox Play TV devices (#1872) * Add documentation for Orange Livebox Play TV devices * Add documentation about the port config parameter * Reword according to suggestion by @Landrash * Update HA release version --- .../media_player.liveboxplaytv.markdown | 45 ++++++++++++++++++ source/images/supported_brands/orange.png | Bin 0 -> 8017 bytes 2 files changed, 45 insertions(+) create mode 100644 source/_components/media_player.liveboxplaytv.markdown create mode 100644 source/images/supported_brands/orange.png diff --git a/source/_components/media_player.liveboxplaytv.markdown b/source/_components/media_player.liveboxplaytv.markdown new file mode 100644 index 00000000000..ce474e0c9f7 --- /dev/null +++ b/source/_components/media_player.liveboxplaytv.markdown @@ -0,0 +1,45 @@ +--- +layout: page +title: "Orange Livebox Play TV" +description: "Instructions on how to integrate a Livebox Play TV appliance into Home Assistant." +date: 2017-01-25 07:27 +sidebar: true +comments: false +sharing: true +footer: true +logo: orange.png +ha_category: Media Player +featured: false +ha_release: 0.38 +ha_iot_class: "Local Polling" +--- + +The `liveboxplaytv` platform allows you to control [Orange Livebox Play TV appliances](https://boutique.orange.fr/internet/decodeur-tv-livebox). + +To add an Orange Livebox Play TV to your installation, add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +media_player: + - platform: liveboxplaytv + host: 192.168.1.3 +``` + +Configuration variables: + +- **host** (*Required*): The IP or hostname of the Orange Livebox Play TV appliance. +- **name** (*Optional*): The name to use in the frontend. Defaults to `Livebox Play TV`. +- **port** (*Optional*): The port on which the Livebox is listening on. Defaults to 8080. + +## {% linkable_title Full configuration %} + +A full configuration example for an Orange TV appliance can look like this: + +```yaml +# Example configuration.yaml entry +media_player: + - platform: liveboxplaytv + host: 192.168.1.3 + port: 8080 + name: Orange Livebox Play TV +``` diff --git a/source/images/supported_brands/orange.png b/source/images/supported_brands/orange.png new file mode 100644 index 0000000000000000000000000000000000000000..69ac6fab341bb67727b23ba2c4a29a5e7f3b992d GIT binary patch literal 8017 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 a3d4sxmdIcCjdw@R2hcOst$FzP_5T6ma_7 Date: Fri, 3 Feb 2017 09:08:43 +0100 Subject: [PATCH 38/81] Update ha_release --- source/_components/switch.fritzdect.markdown | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/source/_components/switch.fritzdect.markdown b/source/_components/switch.fritzdect.markdown index cf4dce4061f..1a9fe609480 100644 --- a/source/_components/switch.fritzdect.markdown +++ b/source/_components/switch.fritzdect.markdown @@ -10,7 +10,7 @@ footer: true logo: avm.png ha_category: Switch ha_iot_class: "Local Polling" -ha_release: 0.37 +ha_release: 0.38 --- @@ -37,7 +37,6 @@ switch: Configuration variables: -- **host** (*Optional*): The IP address / hostname of your Fritz!Box. Defaults to fritz.box. - **username** (*Required*): The username for your Fritz!Box. - **password** (*Required*): The password for your Fritz!Box. - +- **host** (*Optional*): The IP address/hostname of your Fritz!Box. Defaults to `fritz.box`. From b31bb8d4b2629cbd0f9111845d8d6473bcb4d5c2 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Fri, 3 Feb 2017 09:12:32 +0100 Subject: [PATCH 39/81] Remove line breaks --- source/_components/alert.markdown | 54 ++++++++----------------------- 1 file changed, 14 insertions(+), 40 deletions(-) diff --git a/source/_components/alert.markdown b/source/_components/alert.markdown index edaaff7d20e..baa601a0383 100644 --- a/source/_components/alert.markdown +++ b/source/_components/alert.markdown @@ -12,20 +12,13 @@ ha_category: Automation ha_release: 0.38 --- -The `alert` component is designed to notify you when problematic issues arise. -For example, if the garage door is left open, the `alert` component can be -used remind you of this by sending you repeating notifications at customizable -intervals. This is also useful for low battery sensors, water leak sensors, -or any condition that may need your attention. +The `alert` component is designed to notify you when problematic issues arise. For example, if the garage door is left open, the `alert` component can be used remind you of this by sending you repeating notifications at customizable intervals. This is also useful for low battery sensors, water leak sensors, or any condition that may need your attention. -Alerts will add an entity to the front end only when they are firing. This -entity allows you to silence an alert until it is resolved. +Alerts will add an entity to the front end only when they are firing. This entity allows you to silence an alert until it is resolved. ### {% linkable_title Basic Example %} -The `alert` component makes use of any of the `notifications` components. -To setup the `alert` component, first, you must setup a `notification` -component. Then, add the following to your configuration file: +The `alert` component makes use of any of the `notifications` components. To setup the `alert` component, first, you must setup a `notification` component. Then, add the following to your configuration file: ```yaml # Example configuration.yaml entry @@ -33,10 +26,10 @@ alert: garage_door: name: Garage is open entity_id: input_boolean.garage_door - state: 'on' # Optional, 'on' is the default value + state: 'on' repeat: 30 - can_acknowledge: True # Optional, default is True - skip_first: True # Optional, false is the default + can_acknowledge: True + skip_first: True notifiers: - ryans_phone - kristens_phone @@ -45,29 +38,17 @@ Configuration variables: - **name** (*Required*): The friendly name of the alert. - **entity_id** (*Required*): The ID of the entity to watch. -- **state** (*Optional*): The problem condition for the entity. +- **state** (*Optional*): The problem condition for the entity. Defaults to `on`. - **repeat** (*Required*): Number of minutes before the notification should be repeated. Can be either a number or a list of numbers. -- **can_acknowledge** (*Optional*): Allows the alert to be unacknowledgable. -- **skip_first** (*Optional*): Controls whether the notification should be sent immediately or after the first delay. +- **can_acknowledge** (*Optional*): Allows the alert to be unacknowledgable. Defaults to `true`. +- **skip_first** (*Optional*): Controls whether the notification should be sent immediately or after the first delay. Defaults to `false`. - **notifiers** (*Required*): List of `notification` components to use for alerts. -In this example, the garage door status (`input_boolean.garage_door`) is -watched and this alert will be triggered when its status is equal to `on`. -This indicates that the door has been opened. Because the `skip_first` -option was set to `True`, the first notification will not be delivered -immediately. However, every 30 minutes, a notification will be delivered until -either `input_boolean.garage_door` no longer has a state of `on` or until the -alert is acknowledged using the Home Assistant frontend. +In this example, the garage door status (`input_boolean.garage_door`) is watched and this alert will be triggered when its status is equal to `on`. This indicates that the door has been opened. Because the `skip_first` option was set to `True`, the first notification will not be delivered immediately. However, every 30 minutes, a notification will be delivered until either `input_boolean.garage_door` no longer has a state of `on` or until the alert is acknowledged using the Home Assistant frontend. ### {% linkable_title Complex Alert Criteria %} -By design, the `alert` component only handles very simple criteria for firing. -That is, is only checks if a single entity's state is equal to a value. At some -point, it may be desireable to have an alert with a more complex criteria. -Possibly, when a battery percentage falls below a threshold. Maybe you want to -disable the alert on certain days. Maybe the alert firing should depend on more -than one input. For all of these situations, it is best to use the alert in -conjunction with a `Template Binary Sensor`. The following example does that. +By design, the `alert` component only handles very simple criteria for firing. That is, is only checks if a single entity's state is equal to a value. At some point, it may be desireable to have an alert with a more complex criteria. Possibly, when a battery percentage falls below a threshold. Maybe you want to disable the alert on certain days. Maybe the alert firing should depend on more than one input. For all of these situations, it is best to use the alert in conjunction with a `Template Binary Sensor`. The following example does that. ```yaml binary_sensor: @@ -87,16 +68,11 @@ alert: - kristens_phone ``` -This example will begin firing as soon as the entity `sensor.motion`'s -`battery` attribute falls below 15. It will continue to fire until the battery -attribute raises above 15 or the alert is acknowledged on the frontend. +This example will begin firing as soon as the entity `sensor.motion`'s `battery` attribute falls below 15. It will continue to fire until the battery attribute raises above 15 or the alert is acknowledged on the frontend. ### {% linkable_title Dynamic Notification Delay Times %} -It may be desireable to have the delays between alert notifications dynamically -change as the alert continues to fire. This can be done by setting the `repeat` -configuration key to a list of numbers rather than a single number. Altering -the first example would look like the following. +It may be desireable to have the delays between alert notifications dynamically change as the alert continues to fire. This can be done by setting the `repeat` configuration key to a list of numbers rather than a single number. Altering the first example would look like the following. ```yaml # Example configuration.yaml entry @@ -116,6 +92,4 @@ alert: - kristens_phone ``` -Now, the first message will be sent after a 15 minute delay. The second will be -sent after a 30 minute delay. A 60 minute delay will fall between every -following notification. +Now, the first message will be sent after a 15 minute delay. The second will be sent after a 30 minute delay. A 60 minute delay will fall between every following notification. From 345be28e5f7c30f58aa722eea1e8496aed1aca9c Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Fri, 3 Feb 2017 09:44:38 +0100 Subject: [PATCH 40/81] Add wind bearing (#1950) --- source/_components/sensor.openweathermap.markdown | 1 + 1 file changed, 1 insertion(+) diff --git a/source/_components/sensor.openweathermap.markdown b/source/_components/sensor.openweathermap.markdown index cdc25f3f97d..b54344f82d2 100644 --- a/source/_components/sensor.openweathermap.markdown +++ b/source/_components/sensor.openweathermap.markdown @@ -37,6 +37,7 @@ Configuration variables: - **weather**: A human-readable text summary. - **temperature**: The current temperature. - **wind_speed**: The wind speed. + - **wind_bearing**: The wind bearing. - **humidity**: The relative humidity. - **pressure**: The sea-level air pressure in millibars. - **clouds**: Description about cloud coverage. From 0d3616737bbcd1255cd25aedb8da4fd844b50b87 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Fri, 3 Feb 2017 09:45:17 +0100 Subject: [PATCH 41/81] Add moon docs (#1949) --- source/_components/sensor.moon.markdown | 26 +++++++++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 source/_components/sensor.moon.markdown diff --git a/source/_components/sensor.moon.markdown b/source/_components/sensor.moon.markdown new file mode 100644 index 00000000000..b1795b040ce --- /dev/null +++ b/source/_components/sensor.moon.markdown @@ -0,0 +1,26 @@ +--- +layout: page +title: "Moon Sensor" +description: "Instructions how to integrate the moon sensor into Home Assistant." +date: 2017-02-03 07:10 +sidebar: true +comments: false +sharing: true +footer: true +logo: home-assistant.png +ha_category: Weather +ha_iot_class: "Local Polling" +ha_release: 0.38 +--- + + +The `moon` sensor platform is tracking the moon phases. + +To enable the moon sensor, add the following lines to your `configuration.yaml`: + +```yaml +# Example configuration.yaml entry +sensor: + - platform: moon +``` + From 502a5567a6b1e36ba27854056ba60fae856a43da Mon Sep 17 00:00:00 2001 From: Daniel Perna Date: Fri, 3 Feb 2017 17:58:05 +0100 Subject: [PATCH 42/81] Updated variable usage --- source/_components/homematic.markdown | 25 ++++++++++++++++++++----- 1 file changed, 20 insertions(+), 5 deletions(-) diff --git a/source/_components/homematic.markdown b/source/_components/homematic.markdown index c38aed75424..feb48621efa 100644 --- a/source/_components/homematic.markdown +++ b/source/_components/homematic.markdown @@ -47,7 +47,7 @@ Configuration variables (host): - **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. +- **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. #### Example configuration with multiple protocols and some other options set: @@ -89,10 +89,24 @@ In order to allow communication with multiple hosts or different protocols in pa Using multiple hosts has the drawback, that the services (explained below) may not work as expected. Only one connection can be used for services, which limits the devices/variables a service can use to the scope/protocol of the host. This does *not* affect the entites in Home Assistant. They all use their own connection and work as expected. +### Reading attributes of entities + +Most devices have, besides their state, additional attributes like their battery state or valve position. These can be accessed using templates in automations, or even as their own entities using the [template sensor](https://home-assistant.io/components/sensor.template/) component. Here's an example of a template sensor that exposes the valve state of a thermostat. + +```yaml +sensor: +- platform: template + sensors: + bedroom_valve: + value_template: '{{ states.climate.leq123456.attributes.Valve }}' + entity_id: climate.leq123456 + friendly_name: 'Bedroom valve' +``` + ### Variables -It is possible to read and set values of system variables you have setup on the CCU/Homegear. An example of how that is done can be found below. The supported types for setting values are float- and bool-variables. -Each variable will be available as it's own entity in the form of `homematic.name`. The predefined `homematic.homematic` variable has the number of service messages as it's value. You can use these variable-entities like any other entity in Home Assistant to trigger automations. +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 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. ### Events @@ -157,13 +171,14 @@ action: param: OPEN ``` -Set variable +Set boolean variable to true ```yaml ... action: service: homematic.set_var_value data: - entity_id: homematic.varname_bool + entity_id: homematic.rf + name: Variablename value: true ``` From c874a93bbc304759e3833da20cfcfc39cda66850 Mon Sep 17 00:00:00 2001 From: Daniel Perna Date: Fri, 3 Feb 2017 18:01:45 +0100 Subject: [PATCH 43/81] Made topics linkable --- source/_components/homematic.markdown | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/source/_components/homematic.markdown b/source/_components/homematic.markdown index feb48621efa..ef5a77a2ded 100644 --- a/source/_components/homematic.markdown +++ b/source/_components/homematic.markdown @@ -73,7 +73,7 @@ homematic: port: 2010 ``` -### The `resolvenames` option +### {% linkable_title The `resolvenames` option %} We use three approaches to fetch the names of devices. Each assumes you have properly named your devices in your existing Homematic setup. As a general advice: Use ASCII for your devices names. Home Assistant won't include non-ASCII characters in entity-names. @@ -83,13 +83,13 @@ We use three approaches to fetch the names of devices. Each assumes you have pro Resolving names can take some time. So when you start Home Assistant you won't see you devices at first. For a setup with 20+ devices it can take up to a minute until all devices show up in the UI. -### Multiple hosts +### {% linkable_title Multiple hosts %} In order to allow communication with multiple hosts or different protocols in parallel (wireless, wired and ip), multiple connections will be established, each to the configured destination. The name you choose for the host has to be unique and limited to ASCII letters. Using multiple hosts has the drawback, that the services (explained below) may not work as expected. Only one connection can be used for services, which limits the devices/variables a service can use to the scope/protocol of the host. This does *not* affect the entites in Home Assistant. They all use their own connection and work as expected. -### Reading attributes of entities +### {% linkable_title Reading attributes of entities %} Most devices have, besides their state, additional attributes like their battery state or valve position. These can be accessed using templates in automations, or even as their own entities using the [template sensor](https://home-assistant.io/components/sensor.template/) component. Here's an example of a template sensor that exposes the valve state of a thermostat. @@ -103,20 +103,20 @@ sensor: friendly_name: 'Bedroom valve' ``` -### Variables +### {% 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 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. -### Events +### {% linkable_title Events %} When HomeMatic devices change their state or some other internal value, the CCU/Homegear sends event messages to Home Assistant. These events are automatically parsed and the entities in Home Assistant are updated. However, you can also manually use these events to trigger automations. Two event-types are available: * **homematic.keypress**: For devices with buttons, see information below * **homematic.impulse**: For impulse sensors -#### Devices with buttons +#### {% linkable_title Devices with buttons %} Devices with buttons (e.g. HM-Sen-MDIR-WM55, remote controls) may not be fully visible in the UI. This is intended, as buttons don't serve any value here and all they do is trigger events. As an example: @@ -141,14 +141,14 @@ automation: The channel parameter is equal to the channel of the button you are configuring the automation for. You can view the available channels in the UI you use to pair your devices. The name depends on if you chose to resolve names or not. If not, it will be the device ID (e.g. LEQ1234657). If you chose to resolve names (and that is successful), it will be the name you have set in your CCU or in the metadata (e.g. "Kitchen Switch"). -### Services +### {% linkable_title Services %} * *homematic.virtualkey*: Simulate a keypress (or other valid action) on CCU/Homegear with device or virtual keys. * *homematic.reconnect*: Reconnect to CCU/Homegear without restarting Home Assistant (useful when CCU has been restarted) * *homematic.set_var_value*: Set the value of a system variable. * *homematic.set_dev_value*: Control a device manually (even devices without support). Equivalent to setValue-method from XML-RPC. -#### Examples +#### {% linkable_title Examples %} Simulate a button being pressed ```yaml ... @@ -183,7 +183,7 @@ action: ``` -#### Advanced examples +#### {% linkable_title Advanced examples %} If you are familiar with the internals of HomeMatic devices, you can manually set values on the devices. This can serve as a workaround if support for a device is currently not available, or only limited functionality has been implemented. Using this service provides you direct access to the setValue-method of the primary connection. If you have multiple hosts, you may select the one hosting a specific device by providing the proxy-parameter with a value equivalent to the name you have chosen. In the example configuration from above `rf`, `wired` and `ip` would be valid values. From 3d6c06c130592cc92676f857acd407fc7e12e359 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Sat, 4 Feb 2017 09:59:13 +0100 Subject: [PATCH 44/81] Add load (#1954) --- source/_components/sensor.systemmonitor.markdown | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/source/_components/sensor.systemmonitor.markdown b/source/_components/sensor.systemmonitor.markdown index 836b0d4641f..0cf101c08c0 100644 --- a/source/_components/sensor.systemmonitor.markdown +++ b/source/_components/sensor.systemmonitor.markdown @@ -25,7 +25,6 @@ sensor: - type: disk_use_percent arg: /home - type: memory_free - - type: processor_use ``` Configuration variables: @@ -47,6 +46,9 @@ The table contains types and their argument to use in your `configuration.yaml` | swap_use_percent | | | swap_use | | | swap_free | | +| load_1m | | +| load_5m | | +| load_15m | | | network_in | Interface, eg. `eth0` | | network_out | Interface, eg. `eth0` | | packets_in | Interface, eg. `eth0` | From cb07f61ef08d5ee9956346a91473c0bf75a51905 Mon Sep 17 00:00:00 2001 From: Duoxilian Date: Sun, 5 Feb 2017 02:26:33 -0600 Subject: [PATCH 45/81] Update climate.ecobee.markdown (#1967) --- source/_components/climate.ecobee.markdown | 247 +++++++++++++++++++++ 1 file changed, 247 insertions(+) diff --git a/source/_components/climate.ecobee.markdown b/source/_components/climate.ecobee.markdown index 48c31005144..7c5884da8c7 100644 --- a/source/_components/climate.ecobee.markdown +++ b/source/_components/climate.ecobee.markdown @@ -13,4 +13,251 @@ ha_release: 0.9 ha_iot_class: "Cloud Push" --- +

To get your Ecobee thermostats working with Home Assistant, follow the instructions for the general [Ecobee component](/components/ecobee/). +

+ +## {% linkable_title Concepts %} + +The Ecobee 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 +currently active climate or it may be overridden by a hold. When the +thermostat is not in auto mode, there is a single target +temperature. When the thermostat is in auto operation mode, there is a +pair of target temperatures: the lower target temperature determines +the lowest desired temperature, while the higher target temperature +determines the highest desired temperature (the thermostat will switch +between heating and cooling to keep the temperature within these +limits). + +A _climate_ is a predefined or user-defined set of states that the +thermostat aims to achieve. The ecobee thermostat provides three predefined +climates: home, away, and sleep. The user can define additional climates. + +A _hold_ is an override of the target temperature defined in the +currently active climate. The temperature targeted in the hold mode may be +explicitly set (temperature hold) or it may be derived from a reference +climate (home or away hold). All holds are temporary. Temperature and +climate holds expire when the thermostat transitions to the next climate +defined in its program. + +When in _away mode_, the target temperature is permanently overridden by +the target temperature defined for the away climate. The away mode is a +simple way to emulate a vacation mode. + +The _operation mode_ of the device is the currently active operational +modes that the Ecobee thermostat provides: heat, auxHeatOnly, cool, +auto, and off. + + +## {% linkable_title Attributes %} + +The following attributes are provided by the Ecobee Thermostat: +`name`, `temperature_unit`, `current_temperature`, `target_temperature`, +`target_temperature_low`, `target_temperature_high`, `desired_fan_mode`, +`fan`, `current_hold_mode`, `current_operation`, `operation_list`, +`operation_mode`, `mode`, `fan_min_on_time`, `device_state_attributes`, +`is_away_mode_on`. +The attributes `min_temp` and `max_temp` are meaningless constant values. + + +### {% linkable_title Attribute `name` %} + +Returns the name of the Ecobee Thermostat. + +| Attribute type | Description | +| ---------------| ----------- | +| String | Name of the Ecobee 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 | Currenly 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 `target_temperature_low` %} + +Returns the desired heating temperature set in the thermostat when in +auto operation mode. + +| Attribute type | Description | +| ---------------| ----------- | +| Integer | Target temperature + +### {% linkable_title Attribute `target_temperature_high` %} + +Returns the desired cooling temperature set in the thermostat when in +auto operation mode. + +| Attribute type | Description | +| ---------------| ----------- | +| Integer | Target temperature + +### {% linkable_title Attribute `desired_fan_mode` %} + +Returns the desired fan mode of the current operation. + +| Attribute type | Description | +| ---------------| ----------- | +| String | 'on', 'off' + +### {% linkable_title Attribute `fan` %} + +Returns the current fan state. + +| Attribute type | Description | +| ---------------| ----------- | +| String | 'on', 'off' + +### {% linkable_title Attribute `current_hold_mode` %} + +Returns the current temperature hold, if any. + +| Attribute type | Description | +| ---------------| ----------- | +| String | 'home', 'away', 'temp', None + +### {% linkable_title Attribute `current_operation` %} + +Returns the current operation of the thermostat. + +| Attribute type | Description | +| ---------------| ----------- | +| String | 'auto', 'cool', 'heat', 'off' + +### {% linkable_title Attribute `operation_list` %} + +Returns the list of available operation modes. + +| Attribute type | Description | +| ---------------| ----------- | +| List of String | Available operation modes + +### {% linkable_title Attribute `operation_mode` %} + +Returns the current operation mode of the thermostat. + +| Attribute type | Description | +| ---------------| ----------- | +| String | Currently active operation mode + +### {% linkable_title Attribute `mode` %} + +Returns the climate currently active on the thermostat. + +### {% linkable_title Attribute `fan_min_on_time` %} + +Returns the current fan mimimum on time. + +| Attribute type | Description | +| ---------------| ----------- | +| Integer | Current fan minimum on time in minutes + +### {% linkable_title Attribute `is_away_mode_on` %} + +Returns whether the thermostat is in away mode (see the corresponding +service for more detail). + +### {% linkable_title Attribute `actual humidity` %} + +Returns the humidity as measured by the thermostat. + +| Attribute type | Description | +| ---------------| ----------- | +| Integer | Current humidity + + +## {% linkable_title Services %} + +The following services are provided by the Ecobee Thermostat: +`set_away_mode`, `set_hold_mode`, `set_temperature`, `set_operation_mode`, +`fan_min_on_time`, `resume_program`. +The services `set_aux_heat`, `set_humidity`, `set_fan_mode`, and +`set_swing_mode` offered by the [Climate component](/components/climate/) +are not implemented for this thermostat. + + + +### {% linkable_title Service `set_away_mode` %} + +Turns the away mode on or off for the thermostat. + +| 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. +| `away_mode` | no | 'on' or 'off' + + +### {% linkable_title Service `set_hold_mode` %} + +Puts the thermostat into the given hold mode. For 'home' and 'away', the +target temperature is taken from the home or away, climate, respectively. +For 'temp', the current temperature is taken as the target temperature. +When None is provided as parameter, the hold_mode is turned 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. Else targets all. +| `hold_mode` | no | 'home', 'away', 'temp', None + +### {% linkable_title Service `set_temperature` %} + +Puts the thermostat into a temporary 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. +| `target_temp_low` | no | Desired heating target temperature (when in auto mode) +| `target_temp_high` | no | Desired cooling target temperature (when in auto mode) +| `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_operation_mode` %} + +Sets the current operation mode of the thermostat. + +| 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. +| `operation_mode` | no | 'auto', 'auxHeatOnly', 'cool', 'heat', 'off' + +### {% linkable_title Service `fan_min_on_time` %} + +Sets the fan minimum on time. + +| 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. +| `fan_min_on_time` | no | Desired fan minimum on time + +### {% linkable_title Service `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. +| `resume_all` | no | true or false From d7d4ed83f5ce958c61144d1238dffe05bb0f4245 Mon Sep 17 00:00:00 2001 From: System Tester Date: Mon, 6 Feb 2017 01:50:23 +1000 Subject: [PATCH 46/81] Update automation_flashing_lights.markdown (#1971) Corrected spelling mistake in instruction text. --- source/_cookbook/automation_flashing_lights.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_cookbook/automation_flashing_lights.markdown b/source/_cookbook/automation_flashing_lights.markdown index 3a9a8bdb1b6..cf09063f1f2 100644 --- a/source/_cookbook/automation_flashing_lights.markdown +++ b/source/_cookbook/automation_flashing_lights.markdown @@ -12,7 +12,7 @@ ha_category: Automation Examples #### {% linkable_title Flashing lights triggered by an alarm %} -For flashing regular lights in case the the triggering of an alarm. +For flashing regular lights in case an alarm is triggered. ```yaml # AlmAct1 - switch to activate the alarm in Room1 From 74ac6b9383ddd56e6fd404421676bb0f2a74b42c Mon Sep 17 00:00:00 2001 From: Martin Hjelmare Date: Sun, 5 Feb 2017 21:07:45 +0100 Subject: [PATCH 47/81] Update mysensors sensor (#1976) * Add V_DIRECTION. * Add example sketch for mysensors 2.x. --- source/_components/sensor.mysensors.markdown | 68 +++++++++++++++++++- 1 file changed, 66 insertions(+), 2 deletions(-) diff --git a/source/_components/sensor.mysensors.markdown b/source/_components/sensor.mysensors.markdown index 0db855d0f47..755ab8f74fe 100644 --- a/source/_components/sensor.mysensors.markdown +++ b/source/_components/sensor.mysensors.markdown @@ -24,7 +24,7 @@ S_TYPE | V_TYPE S_TEMP | V_TEMP S_HUM | V_HUM S_BARO | V_PRESSURE, V_FORECAST -S_WIND | V_WIND, V_GUST +S_WIND | V_WIND, V_GUST, V_DIRECTION S_RAIN | V_RAIN, V_RAINRATE S_UV | V_UV S_WEIGHT | V_WEIGHT, V_IMPEDANCE @@ -68,7 +68,7 @@ By using V_UNIT_PREFIX, it's possible to set a custom unit for any sensor. The s For more information, visit the [serial api] of MySensors. -### {% linkable_title Example sketch %} +### {% linkable_title MySensors 1.5 example sketch %} ```cpp /** @@ -116,5 +116,69 @@ void loop() } ``` +### {% linkable_title MySensors 2.x example sketch %} + +```cpp +/** + * Documentation: http://www.mysensors.org + * Support Forum: http://forum.mysensors.org + * + * http://www.mysensors.org/build/light + */ + +#define MY_DEBUG +#define MY_RADIO_NRF24 + +#include +#include +#include + +#define SN "LightLuxSensor" +#define SV "1.0" +#define CHILD_ID 1 +unsigned long SLEEP_TIME = 30000; // Sleep time between reads (in milliseconds) + +BH1750 lightSensor; +MyMessage msg(CHILD_ID, V_LEVEL); +MyMessage msgPrefix(CHILD_ID, V_UNIT_PREFIX); // Custom unit message. +uint16_t lastlux = 0; +bool initialValueSent = false; + +void setup() +{ + sendSketchInfo(SN, SV); + present(CHILD_ID, S_LIGHT_LEVEL); + lightSensor.begin(); +} + +void loop() +{ + if (!initialValueSent) { + Serial.println("Sending initial value"); + send(msgPrefix.set("custom_lux")); // Set custom unit. + send(msg.set(lastlux)); + Serial.println("Requesting initial value from controller"); + request(CHILD_ID, V_LEVEL); + wait(2000, C_SET, V_LEVEL); + } + uint16_t lux = lightSensor.readLightLevel(); // Get Lux value + if (lux != lastlux) { + send(msg.set(lux)); + lastlux = lux; + } + + sleep(SLEEP_TIME); +} + +void receive(const MyMessage &message) { + if (message.type == V_LEVEL) { + if (!initialValueSent) { + Serial.println("Receiving initial value from controller"); + initialValueSent = true; + } + } +} +``` + [main component]: /components/mysensors/ [serial api]: https://www.mysensors.org/download/serial_api_15 From 1975b2c0b2e85d5edff661f9e0af5c135395b07e Mon Sep 17 00:00:00 2001 From: andrey-git Date: Mon, 6 Feb 2017 08:54:21 +0200 Subject: [PATCH 48/81] Add custom ui documentation (#1963) --- .../custom_ui_by_andrey-git.markdown | 12 +++++++ .../asides/developers_navigation.html | 1 + .../frontend_creating_custom_ui.markdown | 35 +++++++++++++++++++ 3 files changed, 48 insertions(+) create mode 100644 source/_cookbook/custom_ui_by_andrey-git.markdown create mode 100644 source/developers/frontend_creating_custom_ui.markdown diff --git a/source/_cookbook/custom_ui_by_andrey-git.markdown b/source/_cookbook/custom_ui_by_andrey-git.markdown new file mode 100644 index 00000000000..cea9eeae1a2 --- /dev/null +++ b/source/_cookbook/custom_ui_by_andrey-git.markdown @@ -0,0 +1,12 @@ +--- +layout: page +title: "Custom UI light state-card by andrey-git" +description: "" +date: 2017-02-04 10:45 +sidebar: true +comments: false +sharing: true +footer: true +ha_category: User Interface +ha_external_link: https://github.com/andrey-git/home-assistant-custom-ui +--- diff --git a/source/_includes/asides/developers_navigation.html b/source/_includes/asides/developers_navigation.html index e2906ef3985..d821918c437 100644 --- a/source/_includes/asides/developers_navigation.html +++ b/source/_includes/asides/developers_navigation.html @@ -58,6 +58,7 @@
  • {% active_link /developers/frontend_add_card/ Add State Card %}
  • {% active_link /developers/frontend_add_more_info/ Add More Info Dialog %}
  • {% active_link /developers/frontend_creating_custom_panels/ Add Custom Panels %}
  • +
  • {% active_link /developers/frontend_creating_custom_ui/ Add Custom UI %}
  • diff --git a/source/developers/frontend_creating_custom_ui.markdown b/source/developers/frontend_creating_custom_ui.markdown new file mode 100644 index 00000000000..b5ef37072e6 --- /dev/null +++ b/source/developers/frontend_creating_custom_ui.markdown @@ -0,0 +1,35 @@ +--- +layout: page +title: "Creating custom UI" +description: "Introduction to create custom ui for Home Assistant." +date: 2017-02-04 13:00 +sidebar: true +comments: false +sharing: true +footer: true +ha_release: 0.38 +--- +If you would like to use your own [State card](/developers/frontend_add_card/) without merging your code into [home-assistant-polymer](https://github.com/home-assistant/home-assistant-polymer/) you can create your own implementation. + +- Put the element source file and its dependencies in `www/custom_ui/` directory under you homeassistant config. + +For example if creating a state card for the `light` domain named `my_custom_light_card` put `state-card-my_custom_light_card.html` in `www/custom_ui/`. + +That file should implement `` tag with Polymer. + +In `state-card-my_custom_light_card.html` you should use `` to import all the dependencies **not** used by Homeassistant UI. +Do not import any dependencies used by Homeassistant UI. +Importing those will work in `development: 1` mode, but will fail in production mode. + +- In the `customize:` section of `configuration.yaml` put `custom_ui_state_card: `. + +For example: +```yaml +homeassistant: + customize: + - entity_id: light + custom_ui_state_card: my_custom_light_card +``` + + +For more possibilities, see the [Custom UI section](/cookbook/#user-interface) on our Examples page. From c91fb865680b44a0509b46a05c05ad0eb95cc4a2 Mon Sep 17 00:00:00 2001 From: thecynic Date: Sun, 5 Feb 2017 23:09:09 -0800 Subject: [PATCH 49/81] Update lutron component documentaion (#1932) --- source/_components/lutron.markdown | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/source/_components/lutron.markdown b/source/_components/lutron.markdown index 944364e0824..bcf77fe41e1 100644 --- a/source/_components/lutron.markdown +++ b/source/_components/lutron.markdown @@ -13,5 +13,27 @@ featured: False ha_release: 0.37 --- -The `lutron` component is the base for all [Lutron](http://www.lutron.com/) in Home Assistant. The preferred way to setup the `lutron` component is by enabling the [the discovery component](/components/discovery/). +[Lutron](http://www.lutron.com/) is an American lighting control company. They have several lines of home automation devices that manage light switches/dimmers, occupancy sensors, HVAC controls, etc. The `lutron` component in Home Assistant is responsible for communicating with the main hub for these systems. +Presently, there's only support for communicating with the [RadioRA 2](http://www.lutron.com/en-US/Products/Pages/WholeHomeSystems/RadioRA2/Overview.aspx) Main Repeater and only handle light switches and dimmers. + +When configured, the `lutron` component will automatically discover the rooms and their associated switches/dimmers as configured by the RadioRA 2 software from Lutron. Each room will be treated as a separate group. + +To use Lutron RadioRA 2 devices in your installation, add the following to your configuration.yaml file using the IP of your RadioRA 2 Main Repeater: + +``` yaml +lutron: + lutron_host: + lutron_user: lutron + lutron_password: integration +``` + +Configuration variables: + +- **lutron_ip** (*Required*): The IP address of the Main Repeater. +- **lutron_user** (*Required*): The login name of the user. The user `lutron` always exists, but other users can be added via RadioRA 2 software. +- **lutron_password** (*Required*): The password for the user specified above. `integration` is the password for the always-present `lutron` user. + +

    + It is recommended to assign a static IP address to your Main Repeater. This ensures that it won't change IP addresses, so you won't have to change the `lutron_ip` if it reboots and comes up with a different IP address. +

    From faff9c90a00fa1044299313b0cbaad46a94c5c6e Mon Sep 17 00:00:00 2001 From: Philipp Schmitt Date: Mon, 6 Feb 2017 08:10:21 +0100 Subject: [PATCH 50/81] webostv: Add documentation for the filename config (#1951) * notify.webostv and media_player.webostv: Add documentation for the filename configuration * Remove line breaks --- source/_components/media_player.webostv.markdown | 2 ++ source/_components/notify.webostv.markdown | 2 ++ 2 files changed, 4 insertions(+) diff --git a/source/_components/media_player.webostv.markdown b/source/_components/media_player.webostv.markdown index 6e75f6356d2..91b18f2c560 100644 --- a/source/_components/media_player.webostv.markdown +++ b/source/_components/media_player.webostv.markdown @@ -30,6 +30,7 @@ Configuration variables: - **host** (*Optional*): The IP of the LG webOS Smart TV, e.g. `192.168.0.10`. - **mac** (*Optional*): The MAC address of the TV, e.g. `C8:08:E9:99:99:1A`. - **name** (*Optional*): 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`. - **customize** array (*Optional*): List of options to customize. - ***sources** array (*Optional*): List of hardware inputs. @@ -45,6 +46,7 @@ media_player: host: 192.168.0.10 mac: C8:08:E9:99:99:1A name: Living Room TV + filename: webostv.conf customize: sources: - livetv diff --git a/source/_components/notify.webostv.markdown b/source/_components/notify.webostv.markdown index 3c7a6113d20..24ab68a53a5 100644 --- a/source/_components/notify.webostv.markdown +++ b/source/_components/notify.webostv.markdown @@ -25,12 +25,14 @@ notify: - platform: webostv host: 192.168.0.112 name: livingroom_tv + filename: webostv.conf ``` 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`. A possible automation could be: From 79c38c1792f5f99f9e968a4f5ca53ee78f8fe5d7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adri=C3=A1n=20L=C3=B3pez?= Date: Mon, 6 Feb 2017 14:02:05 +0100 Subject: [PATCH 51/81] Doc for rich facebook messages (#1979) --- source/_components/notify.facebook.markdown | 23 +++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/source/_components/notify.facebook.markdown b/source/_components/notify.facebook.markdown index b34a8a396ff..3a425016cc5 100644 --- a/source/_components/notify.facebook.markdown +++ b/source/_components/notify.facebook.markdown @@ -49,3 +49,26 @@ automation: - +919413017584 - +919784516314 ``` + +### {% linkable_title Rich messages %} +You could also send rich messing (cards, buttons, images, videos, etc). [Info](https://developers.facebook.com/docs/messenger-platform/send-api-reference) to which types or messages and how to build them. + +```yaml +# Example script with a notification entry with rich message + +script: + test_fb_notification: + sequence: + - service: notify.facebook + data: + message: Some text before the quick replies + target: 0034643123212 + data: + quick_replies: + - content_type: text + title: Red + payload: DEVELOPER_DEFINED_PAYLOAD_FOR_PICKING_RED + - content_type: text + title: Blue + payload: DEVELOPER_DEFINED_PAYLOAD_FOR_PICKING_BLUE +``` From 2b2866765265336794266e50f57249b4b48e5169 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Tue, 7 Feb 2017 19:13:16 +0100 Subject: [PATCH 52/81] Add MQTT discovery (#1952) * Add MQTT discovery * Update configuration --- source/_components/mqtt.markdown | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/source/_components/mqtt.markdown b/source/_components/mqtt.markdown index 1a0e649b816..f0d6cdb249f 100644 --- a/source/_components/mqtt.markdown +++ b/source/_components/mqtt.markdown @@ -29,6 +29,7 @@ mqtt: password: PASSWORD certificate: /home/paulus/dev/addtrustexternalcaroot.crt protocol: 3.1 + discovery: "discovery/#" birth_message: topic: 'hass/status' payload: 'online' @@ -53,6 +54,7 @@ Configuration variables: - **client_key** (*Optional*): Client key (example: `/home/user/owntracks/cookie.key`) - **client_cert** (*Optional*): Client certificate (example: `/home/user/owntracks/cookie.crt`) - **protocol** (*Optional*): Protocol to use: 3.1 or 3.1.1. By default it connects with 3.1.1 and falls back to 3.1 if server does not support 3.1. +- **discovery** (*Optional*): The MQTT topic subscribed to use for discovery of MQTT devices. - **birth_message** (*Optional*): - **topic** (*Required*): The MQTT topic to publish the message. - **payload** (*Required*): The message content. @@ -183,7 +185,7 @@ Home Assistant will automatically load the correct certificate if you connect to - Integrating it into own component. See the [MQTT example component](/cookbook/python_component_mqtt_basic/) how to do this. -### {% linkable_title Publish service %} +## {% linkable_title Publish service %} The MQTT component will register the service `publish` which allows publishing messages to MQTT topics. There are two ways of specifying your payload. You can either use `payload` to hard-code a payload or use `payload_template` to specify a [template](/topics/templating/) that will be rendered to generate the payload. @@ -201,7 +203,23 @@ The MQTT component will register the service `publish` which allows publishing m } ``` -### {% linkable_title Logging %} +## {% linkable_title Discovery %} + +The discovery of MQTT devices will enable one to use MQTT devices with only minimal configuration effort on the side of Home Assistant. The configuration is done on the device itself and the topic used by the device. Similar to the [HTTP binary sensor](/components/binary_sensor.http/) and the [HTTP sensor](/components/sensor.http/). Only support for binary sensor is available at the moment. + +To enable MQTT discovery, add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +mqtt: + discovery: true + # Optional + discovery_prefix: homeassistant +``` + +A motion detection device for your garden would sent its configuration as JSON payload `{"name": "garden", "sensor_class": "motion"}` to the topic `homeassistant/binary_sensor/garden/config`. After the first message to `config`, then the MQTT messages sent to `state`, eg. `homeassistant/binary_sensor/garden/state`, will update the state in Home Assistant. + +## {% linkable_title Logging %} The [logger](/components/logger/) component allow the logging of received MQTT messages. From 2d9a7e8b8dc4ff355b4754041e15c3cdb0f74f98 Mon Sep 17 00:00:00 2001 From: Trevor Date: Tue, 7 Feb 2017 12:32:47 -0600 Subject: [PATCH 53/81] Document icon_template for template sensor (#1991) --- source/_components/sensor.template.markdown | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/source/_components/sensor.template.markdown b/source/_components/sensor.template.markdown index f5aad22eb5e..2d9352ce426 100644 --- a/source/_components/sensor.template.markdown +++ b/source/_components/sensor.template.markdown @@ -36,6 +36,7 @@ Configuration variables: - **friendly_name** (*Optional*): Name to use in the Frontend. - **unit_of_measurement** (*Optional*): Defines the units of measurement of the sensor, if any. - **value_template** (*Required*): Defines a [template](/topics/templating/) to extract a value from the event bus. + - **icon_template** (*Optional*): Defines a [template](/topics/templating/) for the icon of the sensor. - **entity_id** (*Optional*): 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 it's state. @@ -136,3 +137,18 @@ sensor: unit_of_measurement: 'kB/s' ``` +### {% linkable_title Change the icon %} + +This example shows how to change the icon based on the day/night cycle. + +```yaml +sensor: + - platform: template + sensors: + day_night: + friendly_name: 'Day/Night' + value_template: {% raw %}'{% if is_state("sun.sun", "above_horizon") %}Day{% else %}Night{% endif %}'{% endraw %} + icon_template: {% raw %}'{% if is_state("sun.sun", "above_horizon") %}mdi:weather-sunny{% else %}mdi:weather-night{% endif %}'{% endraw %} + +``` + From 7b9a54f77fc8e15320c5c1dd021b9251e2cb8c4b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Bidoul=20=28ACSONE=29?= Date: Tue, 7 Feb 2017 19:35:22 +0100 Subject: [PATCH 54/81] document min/max jinja filters (#1977) --- source/_topics/templating.markdown | 2 ++ 1 file changed, 2 insertions(+) diff --git a/source/_topics/templating.markdown b/source/_topics/templating.markdown index 7b71cabebc9..da0434fa668 100644 --- a/source/_topics/templating.markdown +++ b/source/_topics/templating.markdown @@ -81,6 +81,8 @@ Home Assistant adds extensions to allow templates to access all of the current s - Filter `timestamp_local` will convert an UNIX timestamp to local time/data. - Filter `timestamp_utc` will convert an UNIX timestamp to UTC time/data. - Filter `timestamp_custom(format_string, local_boolean)` will convert an UNIX timestamp to a custom format, the use of a local timestamp is default, supporting [Python format options](https://docs.python.org/3/library/time.html#time.strftime). +- Filter `max` will obtain the larget item in a sequence. +- Filter `min` will obtain the smallest item in a sequence. [strp-format]: https://docs.python.org/3.4/library/datetime.html#strftime-and-strptime-behavior From e8a25e8194b5e334537cdfd088b122437bd41752 Mon Sep 17 00:00:00 2001 From: Yannic-HAW Date: Tue, 7 Feb 2017 19:40:22 +0100 Subject: [PATCH 55/81] Update switch.broadlink.markdown (#1980) Added description and example for send_packet service --- source/_components/switch.broadlink.markdown | 25 ++++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) diff --git a/source/_components/switch.broadlink.markdown b/source/_components/switch.broadlink.markdown index 62508e1daa2..cd7d36aa457 100644 --- a/source/_components/switch.broadlink.markdown +++ b/source/_components/switch.broadlink.markdown @@ -99,8 +99,7 @@ switch 2: command_off: 'JgAaABweOR4bHhwdHB4dHRw6HhsdHR0dOTocAA0FAAAAAAAAAAAAAAAAAAA=' ``` - - + Example config for sp1, sp2, honeywell_sp2, sp3, spmini2 and spminiplus devices: ```yaml @@ -121,6 +120,28 @@ switch 2: ``` +### {% linkable_title Service `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. + +| Service data attribute | Optional | Description | +| ---------------------- | -------- | ----------- | +| `packet` | no | String or list of strings that contain the packet data. + +Example: + +```yaml +script: + tv_select_source: + sequence: + - service: broadlink.send_packet_192_168_0_107 + data: + packet: + - "JgCMAJSSFDYUNhQ2FBEUERQRFBEUERQ2FDYUNhQRFBEUERQRFBEUERQRFDYUERQRFBEUERQRFDYUNhQRFDYUNhQ2FDYUNhQABfWUkhQ2FDYUNhQRFBEUERQRFBEUNhQ2FDYUERQRFBEUERQRFBEUERQ2FBEUERQRFBEUERQ2FDYUERQ2FDYUNhQ2FDYUAA0FAAAAAAAAAAAAAAAA" + - "JgBGAJSTFDUUNhM2ExITEhMSExITEhM2EzYTNhQRFBEUERQRFBEUNRQ2ExITNhMSExITNhMSExITEhM2ExITNhQ1FBEUNhMADQUAAA==" +``` + + ### {% linkable_title Using E-Control Remotes %} If you already have your remotes learned on E-Control app you can use this method to "copy" trem to HA. From 050cb97c2ec4eca4b65e0da2f204caa0423c7b97 Mon Sep 17 00:00:00 2001 From: rbflurry Date: Tue, 7 Feb 2017 14:51:05 -0500 Subject: [PATCH 56/81] Update notifications.markdown --- source/_ecosystem/ios/notifications.markdown | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/source/_ecosystem/ios/notifications.markdown b/source/_ecosystem/ios/notifications.markdown index ff2fa1d5f1b..4156760fef7 100644 --- a/source/_ecosystem/ios/notifications.markdown +++ b/source/_ecosystem/ios/notifications.markdown @@ -11,14 +11,12 @@ footer: true The `ios` notify platform enables sending push notifications to the Home Assistant iOS app. -## {% linkable_title Setup %} +The 'ios' platform will automatically load the notify serivce. + +The configuration.yaml entry below is no longer required. ```yaml # Example configuration.yaml entry notify: - platform: ios ``` - -Configuration variables: - -- **name** (*Optional*): The name of the service. From 9e9b235ecd9a4c514c9e18d4a097b45f115a2f34 Mon Sep 17 00:00:00 2001 From: rbflurry Date: Tue, 7 Feb 2017 14:54:27 -0500 Subject: [PATCH 57/81] Update ios.markdown --- source/_ecosystem/ios.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_ecosystem/ios.markdown b/source/_ecosystem/ios.markdown index 234eef7a9d4..d29b597bd50 100644 --- a/source/_ecosystem/ios.markdown +++ b/source/_ecosystem/ios.markdown @@ -33,7 +33,7 @@ Currently, the app is only available via a closed beta. It will be on the App St The `ios` component is the companion component for the Home Assistant iOS app. While not required, adding the `ios` component to your setup will greatly enhance the iOS app with new notification, location and sensor functions not possible with a standalone app. -Loading the `ios` component will also load the [`device_tracker`][device-tracker] and [`zeroconf`][zeroconf] components. It also provides functionality required for the iOS notify platform but will not automatically load the `notify` component or platform as of 0.31.1. You must manually load it. See the [iOS notify platform][ios-notify] for more information. +Loading the `ios` component will also load the [`device_tracker`][device-tracker], [`zeroconf`][zeroconf] and ['notify'][notify] components. ## {% linkable_title Setup %} From 716eeac8afbcec467f479e384d0b3f8e326fb670 Mon Sep 17 00:00:00 2001 From: rbflurry Date: Tue, 7 Feb 2017 14:56:19 -0500 Subject: [PATCH 58/81] Update ios.markdown --- source/_ecosystem/ios.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_ecosystem/ios.markdown b/source/_ecosystem/ios.markdown index d29b597bd50..d119758d8bb 100644 --- a/source/_ecosystem/ios.markdown +++ b/source/_ecosystem/ios.markdown @@ -33,7 +33,7 @@ Currently, the app is only available via a closed beta. It will be on the App St The `ios` component is the companion component for the Home Assistant iOS app. While not required, adding the `ios` component to your setup will greatly enhance the iOS app with new notification, location and sensor functions not possible with a standalone app. -Loading the `ios` component will also load the [`device_tracker`][device-tracker], [`zeroconf`][zeroconf] and ['notify'][notify] components. +Loading the `ios` component will also load the [`device_tracker`][device-tracker], [`zeroconf`][zeroconf] and [`notify`][notify] components. ## {% linkable_title Setup %} From 36698f122777df739e0b8409ce963b5e80ecc50e Mon Sep 17 00:00:00 2001 From: Martin Hjelmare Date: Tue, 7 Feb 2017 21:20:26 +0100 Subject: [PATCH 59/81] Add mysensors device tracker (#1986) * Add mysensors device tracker * Add release info --- .../binary_sensor.mysensors.markdown | 2 +- source/_components/climate.mysensors.markdown | 2 +- .../device_tracker.mysensors.markdown | 105 ++++++++++++++++++ source/_components/light.mysensors.markdown | 2 + source/_components/sensor.mysensors.markdown | 2 +- source/_components/switch.mysensors.markdown | 2 +- 6 files changed, 111 insertions(+), 4 deletions(-) create mode 100644 source/_components/device_tracker.mysensors.markdown diff --git a/source/_components/binary_sensor.mysensors.markdown b/source/_components/binary_sensor.mysensors.markdown index 2d1c74226cf..488bb713f6d 100644 --- a/source/_components/binary_sensor.mysensors.markdown +++ b/source/_components/binary_sensor.mysensors.markdown @@ -86,4 +86,4 @@ void loop() ``` [main component]: /components/mysensors/ -[serial api]: https://www.mysensors.org/download/serial_api_15 +[serial api]: http://www.mysensors.org/download diff --git a/source/_components/climate.mysensors.markdown b/source/_components/climate.mysensors.markdown index 0a3150cc5bc..2ee210d76f4 100644 --- a/source/_components/climate.mysensors.markdown +++ b/source/_components/climate.mysensors.markdown @@ -116,4 +116,4 @@ void incomingMessage(const MyMessage &message) { ``` [main component]: /components/mysensors/ -[serial api]: https://www.mysensors.org/download/serial_api_15 +[serial api]: http://www.mysensors.org/download diff --git a/source/_components/device_tracker.mysensors.markdown b/source/_components/device_tracker.mysensors.markdown new file mode 100644 index 00000000000..be28b220e80 --- /dev/null +++ b/source/_components/device_tracker.mysensors.markdown @@ -0,0 +1,105 @@ +--- +layout: page +title: "MySensors Device Tracker" +description: "Instructions how to use MySensors to track devices in Home Assistant." +date: 2017-02-06 15:00 +0100 +sidebar: true +comments: false +sharing: true +footer: true +logo: mysensors.png +ha_category: Presence Detection +featured: false +ha_release: "0.38" +ha_iot_class: "Local Push" +--- + +Integrates MySensors device trackers into Home Assistant. See the [main component] for configuration instructions. + +The following sensor types are supported: + +##### MySensors version 2.0 and higher + +S_TYPE | V_TYPE +-------------------|--------------------------------------- +S_GPS | V_POSITION + +For more information, visit the [serial api] of MySensors. + +### {% linkable_title MySensors 2.x example sketch %} + +```cpp +/** + * Documentation: http://www.mysensors.org + * Support Forum: http://forum.mysensors.org + * + * http://www.mysensors.org/build/gps + */ + +// Enable debug prints to serial monitor +#define MY_DEBUG +// Enable and select radio type attached +#define MY_RADIO_NRF24 +//#define MY_RADIO_RFM69 + +#include + +#define SN "GPS Sensor" +#define SV "1.0" + +// GPS position send interval (in millisectonds) +#define GPS_SEND_INTERVAL 30000 +// The child id used for the gps sensor +#define CHILD_ID_GPS 1 + +MyMessage msg(CHILD_ID_GPS, V_POSITION); + +// Last time GPS position was sent to controller +unsigned long lastGPSSent = -31000; + +// Some buffers +char latBuf[11]; +char lngBuf[11]; +char altBuf[6]; +char payload[30]; + +// Dummy values. Implementation of real GPS device is not done. +float gpsLocationLat = 40.741895; +float gpsLocationLng = -73.989308; +float gpsAltitudeMeters = 12.0; + +void setup() { + +} + +void presentation() { + sendSketchInfo(SN, SV); + present(CHILD_ID_GPS, S_GPS); +} + +void loop() +{ + unsigned long currentTime = millis(); + + // Evaluate if it is time to send a new position + bool timeToSend = currentTime - lastGPSSent > GPS_SEND_INTERVAL; + + if (timeToSend) { + // Send current gps location + // Build position and altitude string to send + dtostrf(gpsLocationLat, 1, 6, latBuf); + dtostrf(gpsLocationLng, 1, 6, lngBuf); + dtostrf(gpsAltitudeMeters, 1, 0, altBuf); + sprintf(payload, "%s,%s,%s", latBuf, lngBuf, altBuf); + + Serial.print(F("Position: ")); + Serial.println(payload); + + send(msg.set(payload)); + lastGPSSent = currentTime; + } +} +``` + +[main component]: /components/mysensors/ +[serial api]: http://www.mysensors.org/download diff --git a/source/_components/light.mysensors.markdown b/source/_components/light.mysensors.markdown index 8abeb4a3cfd..4bf9a9d28a8 100644 --- a/source/_components/light.mysensors.markdown +++ b/source/_components/light.mysensors.markdown @@ -111,6 +111,7 @@ void incomingMessage(const MyMessage &message) { } } ``` + ### {% linkable_title MySensors 2.x example sketch %} ```cpp @@ -244,5 +245,6 @@ void send_status_message() } } ``` + [main component]: /components/mysensors/ [serial api]: http://www.mysensors.org/download diff --git a/source/_components/sensor.mysensors.markdown b/source/_components/sensor.mysensors.markdown index 755ab8f74fe..6324f833db7 100644 --- a/source/_components/sensor.mysensors.markdown +++ b/source/_components/sensor.mysensors.markdown @@ -181,4 +181,4 @@ void receive(const MyMessage &message) { ``` [main component]: /components/mysensors/ -[serial api]: https://www.mysensors.org/download/serial_api_15 +[serial api]: http://www.mysensors.org/download diff --git a/source/_components/switch.mysensors.markdown b/source/_components/switch.mysensors.markdown index ead64bdcbe3..974843207e7 100644 --- a/source/_components/switch.mysensors.markdown +++ b/source/_components/switch.mysensors.markdown @@ -203,4 +203,4 @@ void incomingMessage(const MyMessage &message) { ``` [main component]: /components/mysensors/ -[serial api]: https://www.mysensors.org/download/serial_api_15 +[serial api]: http://www.mysensors.org/download From 6263eaeacab4558a5e769fd36a6121f1399ddb51 Mon Sep 17 00:00:00 2001 From: Robbie Trencheny Date: Tue, 7 Feb 2017 12:27:11 -0800 Subject: [PATCH 60/81] Language fix --- source/_ecosystem/ios/notifications.markdown | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/source/_ecosystem/ios/notifications.markdown b/source/_ecosystem/ios/notifications.markdown index 4156760fef7..49490161de0 100644 --- a/source/_ecosystem/ios/notifications.markdown +++ b/source/_ecosystem/ios/notifications.markdown @@ -11,12 +11,4 @@ footer: true The `ios` notify platform enables sending push notifications to the Home Assistant iOS app. -The 'ios' platform will automatically load the notify serivce. - -The configuration.yaml entry below is no longer required. - -```yaml -# Example configuration.yaml entry -notify: - - platform: ios -``` +The 'ios' component will automatically load the notify serivce. No extra configuration is needed or supported. From 6148be73ab406352b2c42c491a915e42b0c655ce Mon Sep 17 00:00:00 2001 From: Robbie Trencheny Date: Tue, 7 Feb 2017 12:27:37 -0800 Subject: [PATCH 61/81] Another quick language fix --- source/_ecosystem/ios.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_ecosystem/ios.markdown b/source/_ecosystem/ios.markdown index d119758d8bb..862fce661c4 100644 --- a/source/_ecosystem/ios.markdown +++ b/source/_ecosystem/ios.markdown @@ -33,7 +33,7 @@ Currently, the app is only available via a closed beta. It will be on the App St The `ios` component is the companion component for the Home Assistant iOS app. While not required, adding the `ios` component to your setup will greatly enhance the iOS app with new notification, location and sensor functions not possible with a standalone app. -Loading the `ios` component will also load the [`device_tracker`][device-tracker], [`zeroconf`][zeroconf] and [`notify`][notify] components. +Loading the `ios` component will also load the [`device_tracker`][device-tracker], [`zeroconf`][zeroconf] and [`notify`][notify] platforms. ## {% linkable_title Setup %} From 663aecf546a9d2170e0d455091d8813a834ac621 Mon Sep 17 00:00:00 2001 From: Daniel Perna Date: Wed, 8 Feb 2017 02:17:45 +0100 Subject: [PATCH 62/81] Wrapped templates --- source/_components/homematic.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/homematic.markdown b/source/_components/homematic.markdown index ef5a77a2ded..5fe5da38f5e 100644 --- a/source/_components/homematic.markdown +++ b/source/_components/homematic.markdown @@ -98,7 +98,7 @@ sensor: - platform: template sensors: bedroom_valve: - value_template: '{{ states.climate.leq123456.attributes.Valve }}' + value_template: '{% raw %}{{ states.climate.leq123456.attributes.Valve }}{% endraw %}' entity_id: climate.leq123456 friendly_name: 'Bedroom valve' ``` From 9dfe758f3f555274f1f12cfbb79e259e0fc6ca3a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pierre=20St=C3=A5hl?= Date: Wed, 8 Feb 2017 18:33:54 +0100 Subject: [PATCH 63/81] Add documentation for Apple TV (#1996) --- .../media_player.apple_tv.markdown | 60 ++++++++++++++++++ source/images/supported_brands/apple.png | Bin 0 -> 3576 bytes 2 files changed, 60 insertions(+) create mode 100644 source/_components/media_player.apple_tv.markdown create mode 100644 source/images/supported_brands/apple.png diff --git a/source/_components/media_player.apple_tv.markdown b/source/_components/media_player.apple_tv.markdown new file mode 100644 index 00000000000..9abdbdfe359 --- /dev/null +++ b/source/_components/media_player.apple_tv.markdown @@ -0,0 +1,60 @@ +--- +layout: page +title: "Apple TV" +description: "Instructions how to integrate Apple TV devices into Home Assistant." +date: 2017-02-08 07:11 +sidebar: true +comments: false +sharing: true +footer: true +logo: apple.png +ha_category: Media Player +ha_iot_class: "Local Polling" +ha_release: 0.38 +--- + +The `apple_tv` platform allows you to control an Apple TV (3rd and 4th generation). + +

    +Currently you must have Home Sharing enabled for this to work. Support for pairing Home Assistant +with your device will be supported in a later released. +

    + +## {% linkable_title Configuration %} + +If you want to automatically discover new devices, just make sure you have ``discovery:``in +your ``configuration.yaml``. To manually add an Apple TV to your installation, add the following +to your configuration file: + +```yaml +# Example configuration.yaml entry +media_player: + - platform: apple_tv + host: IP_ADDRESS + login_id: LOGIN_ID + name: NAME +``` + +Configuration variables: + +- **host** (*Required*): The IP-address of the device +- **login_id** (*Required*): An identifier used to login to the device, see below +- **name** (*Optional*): The name of the device used in the frontend + +In order to connect to the device you need a *login id*. The easiest way to obtain this identifier +is to use the application ``atvremote``. It should be available in the same environment as you +installed Home-Assistant. Just run it like this to scan for all devices (try again if a device +is missing): + +``` +$ atvremote scan +Found Apple TVs: + - Apple TV at 10.0.10.22 (login id: 00000000-1234-5678-9012-345678901234) +``` + +Just copy and paste the login id from the device you want to add. For more details about +atvremote, see: [this page](https://github.com/postlund/pyatv/blob/master/docs/atvremote.rst). + +## Notes and Limitations + +- Pairing is currently not supported diff --git a/source/images/supported_brands/apple.png b/source/images/supported_brands/apple.png new file mode 100644 index 0000000000000000000000000000000000000000..37af65d5fedd8292c8c3bdee8c467d35950c5e1d GIT binary patch literal 3576 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 lR8zd*aFrYKpeZ-(gLjAa?PF;ZHk_{ Date: Wed, 8 Feb 2017 18:36:22 +0100 Subject: [PATCH 64/81] Minor changes --- .../media_player.apple_tv.markdown | 22 +++++-------------- 1 file changed, 6 insertions(+), 16 deletions(-) diff --git a/source/_components/media_player.apple_tv.markdown b/source/_components/media_player.apple_tv.markdown index 9abdbdfe359..4a63c08b933 100644 --- a/source/_components/media_player.apple_tv.markdown +++ b/source/_components/media_player.apple_tv.markdown @@ -16,15 +16,10 @@ ha_release: 0.38 The `apple_tv` platform allows you to control an Apple TV (3rd and 4th generation).

    -Currently you must have Home Sharing enabled for this to work. Support for pairing Home Assistant -with your device will be supported in a later released. +Currently you must have Home Sharing enabled for this to work. Support for pairing Home Assistant with your device will be supported in a later released.

    -## {% linkable_title Configuration %} - -If you want to automatically discover new devices, just make sure you have ``discovery:``in -your ``configuration.yaml``. To manually add an Apple TV to your installation, add the following -to your configuration file: +If you want to automatically discover new devices, just make sure you have `discovery:` in your `configuration.yaml` file. To manually add an Apple TV to your installation, add the following to your `configuration.yaml` file: ```yaml # Example configuration.yaml entry @@ -32,7 +27,6 @@ media_player: - platform: apple_tv host: IP_ADDRESS login_id: LOGIN_ID - name: NAME ``` Configuration variables: @@ -41,20 +35,16 @@ Configuration variables: - **login_id** (*Required*): An identifier used to login to the device, see below - **name** (*Optional*): The name of the device used in the frontend -In order to connect to the device you need a *login id*. The easiest way to obtain this identifier -is to use the application ``atvremote``. It should be available in the same environment as you -installed Home-Assistant. Just run it like this to scan for all devices (try again if a device -is missing): +In order to connect to the device you need a *login id*. The easiest way to obtain this identifier is to use the application ``atvremote``. It should be available in the same environment as you installed Home-Assistant. Just run it like this to scan for all devices (try again if a device is missing): -``` +```bash $ atvremote scan Found Apple TVs: - Apple TV at 10.0.10.22 (login id: 00000000-1234-5678-9012-345678901234) ``` -Just copy and paste the login id from the device you want to add. For more details about -atvremote, see: [this page](https://github.com/postlund/pyatv/blob/master/docs/atvremote.rst). +Just copy and paste the login id from the device you want to add. For more details about `atvremote`, see: [this page](https://github.com/postlund/pyatv/blob/master/docs/atvremote.rst). -## Notes and Limitations +## {% linkable_title Notes and Limitations %} - Pairing is currently not supported From 4b6358c12ba7c1fb80d4742c001f66d0849fde51 Mon Sep 17 00:00:00 2001 From: Philipp Schmitt Date: Wed, 8 Feb 2017 18:39:42 +0100 Subject: [PATCH 65/81] Document the notify.mailgun service (#1989) --- source/_components/notify.mailgun.markdown | 71 +++++++++++++++++++++ source/images/supported_brands/mailgun.png | Bin 0 -> 33218 bytes 2 files changed, 71 insertions(+) create mode 100644 source/_components/notify.mailgun.markdown create mode 100644 source/images/supported_brands/mailgun.png diff --git a/source/_components/notify.mailgun.markdown b/source/_components/notify.mailgun.markdown new file mode 100644 index 00000000000..52f69b5251e --- /dev/null +++ b/source/_components/notify.mailgun.markdown @@ -0,0 +1,71 @@ +--- +layout: page +title: "Mailgun" +description: "Instructions how to add Mailgun mail notifications to Home Assistant." +date: 2017-02-06 16:52 +sidebar: true +comments: false +sharing: true +footer: true +logo: mailgun.png +ha_category: Notifications +ha_release: 0.38 +--- + +The Mailgun notification service allows you to send emails via Mailgun's REST API. + +## {% linkable_title Sample configuration %} + +```yaml +# Example configuration.yaml entry +notify: + - name: NOTIFIER_NAME + platform: mailgun + domain: YOUR_MAILGUN_DOMAIN + token: TOKEN + recipient: RECIPIENT_EMAIL +``` + +Configuration variables: + +- **domain** (*Optional*): This is the domain name to be used when sending out mail. Defaults to the first custom domain you have set up. +- **sandbox** (*Optional*): Whether to use the sandboxed domain for outgoing mail. The `domain` item takes precedence over this. Defaults to `False`. +- **token** (*Required*): This is the API token that has been generated in your Mailgun account. +- **recipient** (*Required*): The email address of the recipient. +- **sender** (*Optional*): The sender's email address. Defaults to `hass@DOMAIN`, where `DOMAIN` is outgoint mail domain, as defined by the `domain` and `sanbox` configuration entries. + +## {% linkable_title Full configuration %} + +A full configuration example for the Mailgun notifier system can look like this: + +```yaml +# Example configuration.yaml entry +notify: + - name: mailgun + platform: mailgun + domain: mg.example.com + sanbox: False + token: 'token-XXXXXXXXX' + recipient: me@example.com +``` + +## {% linkable_title Example automation %} + +The following automation reacts to an event by sending out an email with two attachments. + +```yaml +# Example automation using Mailgun notifications +automation: + trigger: + platform: event + event_type: SPECIAL_EVENT + action: + service: notify.mailgun + data: + title: "Something special has happened" + message: "This a test message from Home Assistant" + data: + images: + - /home/pi/pic_test1.png + - /home/pi/pic_test2.png +``` diff --git a/source/images/supported_brands/mailgun.png b/source/images/supported_brands/mailgun.png new file mode 100644 index 0000000000000000000000000000000000000000..46126e7d30fabdab4c1ff09e4f17b3f7b9332cbc GIT binary patch literal 33218 zcmd42Wk6Kl)<3RD=O7?8#0*F`(hS{Q3P=u!NDtj0IY)*VX+2_n&xj$>|wfEWQm7b0&2_YTfojZ3()YX&>?%cVzdFReu z2tF?6PR6jBKIVtkOWDNB(CxXGFVw^Cj{Gw>8#`uo7pT3RfgSXjzk9EpG=_@B!N|nR zL|aSJ*3E?v`lk<{p9>5_edms}tRD<&>tyG}Y-4Bd;0ginH?)A69iBnJ#v2KM43QUr9{+&uxA%^WQFB zP7v_FlrquQV^(zYuwxeC6XCTL5PZZeCc!5tBKSyLkcU}FKv0-pK$u@pm{(9pQb0md zP=xuP4;UlO@NAzn-m zUQd5lFQ^}{t0&99IVjnA+Il#^yd2zIng4Kv+PHapLBJSI|7C&;>_2Q>J^yhN#$o(^ zP#C`;pTHlJ{@qbq`~SbIi_3p{dwLnz{g1x?D`QV1f0!M=ft{zDw}≤GVPm5e1V} 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 i{|^K;o&-L{dh&79{@v1ZcC!Blt|X@>TP Date: Fri, 10 Feb 2017 17:01:49 -0800 Subject: [PATCH 66/81] Add Apple TV to the featured section --- source/_components/media_player.apple_tv.markdown | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/source/_components/media_player.apple_tv.markdown b/source/_components/media_player.apple_tv.markdown index 4a63c08b933..e9707203e10 100644 --- a/source/_components/media_player.apple_tv.markdown +++ b/source/_components/media_player.apple_tv.markdown @@ -11,12 +11,13 @@ logo: apple.png ha_category: Media Player ha_iot_class: "Local Polling" ha_release: 0.38 +featured: true --- The `apple_tv` platform allows you to control an Apple TV (3rd and 4th generation).

    -Currently you must have Home Sharing enabled for this to work. Support for pairing Home Assistant with your device will be supported in a later released. +Currently you must have Home Sharing enabled for this to work. Support for pairing Home Assistant with your device will be supported in a later release.

    If you want to automatically discover new devices, just make sure you have `discovery:` in your `configuration.yaml` file. To manually add an Apple TV to your installation, add the following to your `configuration.yaml` file: From 5a4cac7ade8d071b3c208498c42ee97afbc0b363 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Fri, 10 Feb 2017 20:40:42 -0800 Subject: [PATCH 67/81] Unfeature neato --- source/_components/neato.markdown | 1 - 1 file changed, 1 deletion(-) diff --git a/source/_components/neato.markdown b/source/_components/neato.markdown index 24fc98b3c60..6e0849e6f01 100644 --- a/source/_components/neato.markdown +++ b/source/_components/neato.markdown @@ -10,7 +10,6 @@ footer: true logo: neato.png ha_category: Hub ha_release: 0.33 -featured: true --- The `neato` component allows you to control your [Neato Botvac Connected](https://www.neatorobotics.com/robot-vacuum/botvac-connected-series/botvac-connected/). From f6cd2717f7dc898e7e147be530b43300c66171a2 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Fri, 10 Feb 2017 20:41:51 -0800 Subject: [PATCH 68/81] Bump version --- _config.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/_config.yml b/_config.yml index 02db5419bab..d91423a1787 100644 --- a/_config.yml +++ b/_config.yml @@ -131,10 +131,10 @@ social: # Home Assistant release details current_major_version: 0 -current_minor_version: 37 -current_patch_version: 1 -date_released: 2017-02-02 +current_minor_version: 38 +current_patch_version: 0 +date_released: 2017-02-11 # Either # or the anchor link to latest release notes in the blog post. # Must be prefixed with a # and have double quotes around it. -patch_version_notes: "#release-0371---february-2" +patch_version_notes: "#" From 1601df1129952ce2676d9ea91a45c92439ee1688 Mon Sep 17 00:00:00 2001 From: Johan Bloemberg Date: Sat, 11 Feb 2017 15:40:30 +0100 Subject: [PATCH 69/81] Add Rflink component documentation. (#1715) * Add Rflink component documentation. * Add sensor docs. * Add lights and switch documentation. * Add logo. * Update to latest changes. * Use relative hyperlinks for internal links. * Fix links, some text changes. --- source/_components/light.rflink.markdown | 104 ++++++++++++++++++++++ source/_components/rflink.markdown | 91 +++++++++++++++++++ source/_components/sensor.rflink.markdown | 69 ++++++++++++++ source/_components/switch.rflink.markdown | 81 +++++++++++++++++ source/images/supported_brands/rflink.png | Bin 0 -> 3920 bytes 5 files changed, 345 insertions(+) create mode 100644 source/_components/light.rflink.markdown create mode 100644 source/_components/rflink.markdown create mode 100644 source/_components/sensor.rflink.markdown create mode 100644 source/_components/switch.rflink.markdown create mode 100644 source/images/supported_brands/rflink.png diff --git a/source/_components/light.rflink.markdown b/source/_components/light.rflink.markdown new file mode 100644 index 00000000000..37381ba395e --- /dev/null +++ b/source/_components/light.rflink.markdown @@ -0,0 +1,104 @@ +--- +layout: page +title: "Rflink Light" +description: "Instructions how to integrate Rflink lights into Home Assistant." +date: 2016-01-04 +sidebar: true +comments: false +sharing: true +footer: true +logo: rflink.png +ha_category: Light +ha_release: 0.38 +--- + +The `rflink` component support devices that use [Rflink gateway firmware](http://www.nemcon.nl/blog2/), for example the [Nodo Rflink Gateway](https://www.nodo-shop.nl/nl/21-rflink-gateway). Rflink gateway is an Arduino firmware that allows communication with 433Mhz devices using cheap hardware (Arduino + 433Mhz tranceiver). + +First you have to set up your [rflink hub](/components/rflink/). + +After configuring the Rflink hub lights will be automatically discovered and added. + +New/unknown lights can be assigned to a default group automatically by specifying the `new_devices_group` option with a group name. If the group doesn't exist it will be created. + +For example: + +```yaml +# Example configuration.yaml entry +sensor: + platform: rflink + new_devices_group: "New Rflink Lights" +``` + +Rflink switch/light ID's are composed of: protocol, id, switch. For example: `newkaku_0000c6c2_1`. + +Once the ID of a light is known it can be used to configure the light in HA, for example to add it to a different group, hide it or configure a nice name. + +Configuring a device as light with a nice name: + +```yaml +# Example configuration.yaml entry +light: + platform: rflink + devices: + newkaku_0000c6c2_1: + name: Living room +``` + +Configuration variables: + +- **devices** (*Optional*): A list of devices with their name to use in the frontend. +- **new_devices_group** (*Optional*): Create group to add new/unknown devices to. +- **device_defaults**: (*Optional*) + - **fire_event_** (*Optional*): Set default `fire_event` for Rflink switch devices (see below). + - **signal_repetitions** (*Optional*): Set default `signal_repetitions` for Rflink switch devices (see below). + +Device configuration variables: + +- **name** (*Optional*): Name for the device, defaults to Rflink ID. +- **type** (*Optional*): Override automatically detected type of the light device, can be: switchable, dimmable or hybrid. See 'Light Types' below. +- **aliasses** (*Optional*): Alternative Rflink ID's this device is known by. +- **fire_event_** (*Optional*): Fire an `button_pressed` event if this device is turned on or off (default: False). +- **signal_repetitions** (*Optional*): Repeat every Rflink command this number of times (default: 1) + +# Light state + +Initially the state of a light is unknown. When the light is turned on or off (via frontend or 433Mhz remote) the state is known and will be shown in the frontend. + +Sometimes a light is controlled by multiple 433Mhz remotes, each remote has its own code programmed in the light. To allow tracking of the state when switched via other remotes add the corresponding remote codes as aliasses: + +```yaml +# Example configuration.yaml entry +light: + platform: rflink + devices: + newkaku_0000c6c2_1: + name: Living room + aliasses: + - newkaku_000000001_2 + - kaku_000001_a +``` + +Any on/off command from any allias ID updates the current state of the light. However when sending a command through the frontend only the primary ID is used. + +# Light types + +Light devices can come in different forms. Some only switch on and off, other support dimming. Dimmable devices might not always respond nicely to repeated `on` command as they turn into a pulsating state until `on` is pressed again (for example KlikAanKlikUit). The Rflink component support three types of lights to make things work in every situation: + +*Hybrid*: This type sends a `dim` followed by an a `on` command; and `off` commands. This will make dimmable devices turn on at the requested dim level and on/off devices on. One caveat is this type is not compatible with signal repetition as multiple `on` signals will cause dimmers to go into disco mode. + +*Switchable*: Device type that sends only `on` and `off` commands. It work for both on/off and dimmable type switches. However dimmables might have issues with signal repetition (see above). + +*Dimmable*: Sends only `dim` and `off` commands. This does not work on on/off type devices as they don't understand the `dim` command. For dimmers this does not cause issues with signal repetitions. + +By default new lights are assigned the `switchable` type. Protocol supporting dimming are assigned the `hybrid` type. Currently only `newkaku` protocol is detected as dimmable. Please refer to Device Support to get your dimmers supported. + +# Hiding/ignoring lights +Lights are added automatically when the Rflink gateway intercepts a 433Mhz command in the ether. To prevent cluttering the frontend use any of these methods: + +- Configure a `new_devices_group` for lights and optionally add it to a different `view`. +- Hide unwanted devices using [customizations](/getting-started/customizing-devices/) +- [Ignore devices on a platform level](/components/rflink/#ignoring-devices) + +# Device support +See [device support](/components/rflink/#device-support) + diff --git a/source/_components/rflink.markdown b/source/_components/rflink.markdown new file mode 100644 index 00000000000..b2d931d5e62 --- /dev/null +++ b/source/_components/rflink.markdown @@ -0,0 +1,91 @@ +--- +layout: page +title: "Rflink" +description: "Instructions how to integrate Rflink gateway into Home Assistant." +date: 2016-01-04 +sidebar: true +comments: false +sharing: true +footer: true +logo: rflink.png +ha_category: Hub +ha_release: 0.38 +--- + +The `rflink` component support devices that use [Rflink gateway firmware](http://www.nemcon.nl/blog2/), for example the [Nodo Rflink Gateway](https://www.nodo-shop.nl/nl/21-rflink-gateway). Rflink gateway is an Arduino firmware that allows communication with 433Mhz devices using cheap hardware (Arduino + 433Mhz tranceiver). + +The 433Mhz spectrum is used by many manufacturers mostly using their own protocol/standard and includes devices like: light switches, blinds, weather stations, alarms and various other sensors. + +A complete list of devices supported by Rflink can be found [here](http://www.nemcon.nl/blog2/devlist) + +This component is tested with the following hardware/software: + +- Nodo Rflink Gateway V1.4/Rflink R44 + +To enable Rflink in your installation, add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +rflink: + port: /dev/serial/by-id/usb-id01234 +``` + +Configuration variables: + +- **port** (*Required*): The path to Rflink usb/serial device or TCP port in TCP mode. +- **host** (*Optional*): Switches to TCP mode, connects to host instead of to usb/serial. +- **wait_for_ack** (*Optional*): Wait for Rflink to ackowledge commands sent before sending new command (slower but more reliable). Default: True +- **ignore_devices** (*Optional*): List of devices id's to ignore. Supports wildcards (*) at the end. +- **reconnect_interval** (*Optional*): Time in seconds between reconnect attempts. + +Complete example: + +```yaml +# Example configuration.yaml entry +rflink: + port: /dev/serial/by-id/usb-id01234 + wait_for_ack: False + ignore_devices: + - newkaku_000001_01 + - digitech_* +``` + +# TCP mode + +TCP mode allows connect to a Rflink device over TCP/IP network. This is for example useful if placing the Rflink device next to the HA server is not optimal or desired (eg: bad reception). + +To expose the usb/serial interface over TCP on a different host (Linux) the following command can be used: + + socat /dev/ttyACM0,b57600 TCP-LISTEN:1234,reuseaddr + +Other methods of exposing the serial interface over TCP are possible (eg: ESP8266 or using Arduino Wifi shield). Basically the serial stream should be directly mapped to the TCP stream. + +```yaml +# Example configuration.yaml entry +rflink: + host: 192.168.0.10 + port: 1234 +``` +# Ignoring devices +Rflink platform can be configured to completely ignore a device on a platform level. This is useful when you have neighbors which also use 433Mhz technology. + +For example: + +```yaml +# Example configuration.yaml entry +rflink: + port: /dev/serial/by-id/usb-id01234 + wait_for_ack: False + ignore_devices: + - newkaku_000001_01 + - digitech_* + - kaku_1_* +``` + +This configuration will ignore the button `1` of the `newkaku` device with ID `000001`, all devices of the `digitech` protocol and all switches of the `kaku` protocol device with codewheel ID `1`. + +Wildcards only work at the end of the ID, not in the middle of front! + +# Device support +Even though a lot of devices are supported by Rflink, not all have been tested/implemented. If you have a device supported by Rflink but not by this component please consider testing and adding support yourself or [create an issue](https://github.com/home-assistant/home-assistant/issues/new) and mention `@aequitas` in the description. + diff --git a/source/_components/sensor.rflink.markdown b/source/_components/sensor.rflink.markdown new file mode 100644 index 00000000000..11c26f26527 --- /dev/null +++ b/source/_components/sensor.rflink.markdown @@ -0,0 +1,69 @@ +--- +layout: page +title: "Rflink Sensor" +description: "Instructions how to integrate Rflink sensors into Home Assistant." +date: 2016-01-04 +sidebar: true +comments: false +sharing: true +footer: true +logo: rflink.png +ha_category: Sensor +ha_release: 0.38 +--- + +The `rflink` component support devices that use [Rflink gateway firmware](http://www.nemcon.nl/blog2/), for example the [Nodo Rflink Gateway](https://www.nodo-shop.nl/nl/21-rflink-gateway). Rflink gateway is an Arduino firmware that allows communication with 433Mhz devices using cheap hardware (Arduino + 433Mhz tranceiver). + +First you have to set up your [rflink hub](/components/rflink/). + +After configuring the Rflink hub sensors will be automatically discovered and added. + +New/unknown sensors can be assigned to a default group automatically by specifying the `new_devices_group` option with a group name. If the group doesn't exist it will be created. + +For example: + +```yaml +# Example configuration.yaml entry +sensor: + platform: rflink + new_devices_group: "New Rflink Sensors" +``` + +Rflink sensor ID's are composed of: protocol, id and type (optional). For example: `alectov1_0334_temp`. Some sensors emit multiple types of data. Each will be created as its own + +Once the ID of a sensor is known it can be used to configure the sensor in HA, for example to add it to a different group, hide it or configure a nice name. + +Assigning name to a sensor: + +```yaml +# Example configuration.yaml entry +sensor: + platform: rflink + devices: + # assign name to a sensor + alectov1_0334_temp: + name: Temperature Outside +``` + +Configuration variables: + +- **devices** (*Optional*): A list of devices with their name to use in the frontend. +- **new_devices_group** (*Optional*): Create group to add new/unknown devices to. + +Device configuration variables: + +- **name** (*Optional*): Name for the device, defaults to Rflink ID. +- **sensor_type_** (*Optional*): Override automatically detected type of sensor. +- **unit_of_measurement** (*Optional*): Override automatically detected unit of sensor. +- **aliasses** (*Optional*): Alternative Rflink ID's this device is known by. + +# Hiding/ignoring sensors +Sensors are added automatically when the Rflink gateway intercepts a 433Mhz command in the ether. To prevent cluttering the frontend use any of these methods: + +- Configure a `new_devices_group` for sensors and optionally add it to a different `view`. +- Hide unwanted devices using [customizations](/getting-started/customizing-devices/) +- [Ignore devices on a platform level](/components/rflink/#ignoring-devices) + +# Device support +See [device support](/components/rflink/#device-support) + diff --git a/source/_components/switch.rflink.markdown b/source/_components/switch.rflink.markdown new file mode 100644 index 00000000000..bae099388d9 --- /dev/null +++ b/source/_components/switch.rflink.markdown @@ -0,0 +1,81 @@ +--- +layout: page +title: "Rflink Switch" +description: "Instructions how to integrate Rflink switches into Home Assistant." +date: 2016-01-04 +sidebar: true +comments: false +sharing: true +footer: true +logo: rflink.png +ha_category: Switch +ha_release: 0.38 +--- + +The `rflink` component support devices that use [Rflink gateway firmware](http://www.nemcon.nl/blog2/), for example the [Nodo Rflink Gateway](https://www.nodo-shop.nl/nl/21-rflink-gateway). Rflink gateway is an Arduino firmware that allows communication with 433Mhz devices using cheap hardware (Arduino + 433Mhz tranceiver). + +First you have to set up your [rflink hub](/components/rflink/). + +The Rflink component does not know the difference between a `switch` and a `light`. Therefore all switchable devices are automatically added as `light` by default. + +Rflink switch/light ID's are composed of: protocol, id, switch. For example: `newkaku_0000c6c2_1`. + +Once the ID of a switch is known it can be used to configure it as a switch type in HA, for example to add it to a different group, hide it or configure a nice name. + +Configuring a device as switch with a nice name: + +```yaml +# Example configuration.yaml entry +switch: + platform: rflink + device_defaults: + fire_event: true + signal_repetitions: 2 + devices: + newkaku_0000c6c2_1: + name: Ceiling fan + icon: mdi:fan + conrad_00785c_0a: + name: Motion sensor kitchen + icon: mdi:run + +``` + +Configuration variables: + +- **devices** (*Optional*): A list of devices with their name to use in the frontend. +- **device_defaults**: (*Optional*) + - **fire_event_** (*Optional*): Set default `fire_event` for Rflink switch devices (see below). + - **signal_repetitions** (*Optional*): Set default `signal_repetitions` for Rflink switch devices (see below). + +Device configuration variables: + +- **name** (*Optional*): Name for the device, defaults to Rflink ID. +- **aliasses** (*Optional*): Alternative Rflink ID's this device is known by. +- **fire_event_** (*Optional*): Fire an `button_pressed` event if this device is turned on or off (default: False). +- **signal_repetitions** (*Optional*): Repeat every Rflink command this number of times (default: 1) + +# Switch state + +Initially the state of a switch is unknown. When the switch is turned on or off (via frontend or 433Mhz remote) the state is known and will be shown in the frontend. + +Sometimes a switch is controlled by multiple 433Mhz remotes, each remote has its own code programmed in the switch. To allow tracking of the state when switched via other remotes add the corresponding remote codes as aliasses: + +```yaml +# Example configuration.yaml entry +switch: + platform: rflink + devices: + newkaku_0000c6c2_1: + name: Ceiling fan + icon: mdi:fan + aliasses: + - newkaku_000000001_2 + - kaku_000001_a +``` + +Any on/off command from any alias ID updates the current state of the switch. However when sending a command through the frontend only the primary ID is used. + +# Device support +See [device support](/components/rflink/#device-support) + diff --git a/source/images/supported_brands/rflink.png b/source/images/supported_brands/rflink.png new file mode 100644 index 0000000000000000000000000000000000000000..e044a89afdb89e873a4fabad2c4f56eb4ae477c3 GIT binary patch literal 3920 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 literal 0 HcmV?d00001 From ecfc9a4718267dfcec8b596b46ad40419547011b Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Sat, 11 Feb 2017 15:37:15 +0100 Subject: [PATCH 70/81] Update for 0.38 --- source/_components/ha.markdown | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/_components/ha.markdown b/source/_components/ha.markdown index 9c319931421..5773362c209 100644 --- a/source/_components/ha.markdown +++ b/source/_components/ha.markdown @@ -1,6 +1,6 @@ --- layout: page -title: "Home Assistant 0.37" +title: "Home Assistant 0.38" description: "" date: 2016-12-16 17:00 sidebar: true @@ -9,7 +9,7 @@ sharing: true footer: true logo: home-assistant.png ha_category: Other -ha_release: 0.37 +ha_release: 0.38 --- Details about the latest release can always be found at: From 8111f0f4f708759e7836998d47b0ee1fb0ed1947 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Sat, 11 Feb 2017 15:58:20 +0100 Subject: [PATCH 71/81] Minor changes and fixes --- source/_components/light.rflink.markdown | 18 +++++++++--------- source/_components/rflink.markdown | 23 ++++++++++++++--------- source/_components/sensor.rflink.markdown | 6 ++++-- source/_components/switch.rflink.markdown | 5 +++-- 4 files changed, 30 insertions(+), 22 deletions(-) diff --git a/source/_components/light.rflink.markdown b/source/_components/light.rflink.markdown index 37381ba395e..babb149f5a6 100644 --- a/source/_components/light.rflink.markdown +++ b/source/_components/light.rflink.markdown @@ -60,7 +60,7 @@ Device configuration variables: - **fire_event_** (*Optional*): Fire an `button_pressed` event if this device is turned on or off (default: False). - **signal_repetitions** (*Optional*): Repeat every Rflink command this number of times (default: 1) -# Light state +### {% linkable_title Light state %} Initially the state of a light is unknown. When the light is turned on or off (via frontend or 433Mhz remote) the state is known and will be shown in the frontend. @@ -80,25 +80,25 @@ light: Any on/off command from any allias ID updates the current state of the light. However when sending a command through the frontend only the primary ID is used. -# Light types +### {% linkable_title Light types %} Light devices can come in different forms. Some only switch on and off, other support dimming. Dimmable devices might not always respond nicely to repeated `on` command as they turn into a pulsating state until `on` is pressed again (for example KlikAanKlikUit). The Rflink component support three types of lights to make things work in every situation: -*Hybrid*: This type sends a `dim` followed by an a `on` command; and `off` commands. This will make dimmable devices turn on at the requested dim level and on/off devices on. One caveat is this type is not compatible with signal repetition as multiple `on` signals will cause dimmers to go into disco mode. - -*Switchable*: Device type that sends only `on` and `off` commands. It work for both on/off and dimmable type switches. However dimmables might have issues with signal repetition (see above). - -*Dimmable*: Sends only `dim` and `off` commands. This does not work on on/off type devices as they don't understand the `dim` command. For dimmers this does not cause issues with signal repetitions. +- *Hybrid*: This type sends a `dim` followed by an a `on` command; and `off` commands. This will make dimmable devices turn on at the requested dim level and on/off devices on. One caveat is this type is not compatible with signal repetition as multiple `on` signals will cause dimmers to go into disco mode. +- *Switchable*: Device type that sends only `on` and `off` commands. It work for both on/off and dimmable type switches. However dimmables might have issues with signal repetition (see above). +- *Dimmable*: Sends only `dim` and `off` commands. This does not work on on/off type devices as they don't understand the `dim` command. For dimmers this does not cause issues with signal repetitions. By default new lights are assigned the `switchable` type. Protocol supporting dimming are assigned the `hybrid` type. Currently only `newkaku` protocol is detected as dimmable. Please refer to Device Support to get your dimmers supported. -# Hiding/ignoring lights +### {% linkable_title Hiding/ignoring lights %} + Lights are added automatically when the Rflink gateway intercepts a 433Mhz command in the ether. To prevent cluttering the frontend use any of these methods: - Configure a `new_devices_group` for lights and optionally add it to a different `view`. - Hide unwanted devices using [customizations](/getting-started/customizing-devices/) - [Ignore devices on a platform level](/components/rflink/#ignoring-devices) -# Device support +### {% linkable_title Device support %} + See [device support](/components/rflink/#device-support) diff --git a/source/_components/rflink.markdown b/source/_components/rflink.markdown index b2d931d5e62..91462a0f026 100644 --- a/source/_components/rflink.markdown +++ b/source/_components/rflink.markdown @@ -12,9 +12,9 @@ ha_category: Hub ha_release: 0.38 --- -The `rflink` component support devices that use [Rflink gateway firmware](http://www.nemcon.nl/blog2/), for example the [Nodo Rflink Gateway](https://www.nodo-shop.nl/nl/21-rflink-gateway). Rflink gateway is an Arduino firmware that allows communication with 433Mhz devices using cheap hardware (Arduino + 433Mhz tranceiver). +The `rflink` component support devices that use [Rflink gateway firmware](http://www.nemcon.nl/blog2/), for example the [Nodo Rflink Gateway](https://www.nodo-shop.nl/nl/21-rflink-gateway). Rflink gateway is an Arduino firmware that allows communication with 433 Mhz devices using cheap hardware (Arduino + 433 Mhz tranceiver). -The 433Mhz spectrum is used by many manufacturers mostly using their own protocol/standard and includes devices like: light switches, blinds, weather stations, alarms and various other sensors. +The 433 Mhz spectrum is used by many manufacturers mostly using their own protocol/standard and includes devices like: light switches, blinds, weather stations, alarms and various other sensors. A complete list of devices supported by Rflink can be found [here](http://www.nemcon.nl/blog2/devlist) @@ -33,8 +33,8 @@ rflink: Configuration variables: - **port** (*Required*): The path to Rflink usb/serial device or TCP port in TCP mode. -- **host** (*Optional*): Switches to TCP mode, connects to host instead of to usb/serial. -- **wait_for_ack** (*Optional*): Wait for Rflink to ackowledge commands sent before sending new command (slower but more reliable). Default: True +- **host** (*Optional*): Switches to TCP mode, connects to host instead of to USB/serial. +- **wait_for_ack** (*Optional*): Wait for Rflink to ackowledge commands sent before sending new command (slower but more reliable). Defaults to `True` - **ignore_devices** (*Optional*): List of devices id's to ignore. Supports wildcards (*) at the end. - **reconnect_interval** (*Optional*): Time in seconds between reconnect attempts. @@ -50,13 +50,15 @@ rflink: - digitech_* ``` -# TCP mode +### {% linkable_title TCP mode %} TCP mode allows connect to a Rflink device over TCP/IP network. This is for example useful if placing the Rflink device next to the HA server is not optimal or desired (eg: bad reception). To expose the usb/serial interface over TCP on a different host (Linux) the following command can be used: - socat /dev/ttyACM0,b57600 TCP-LISTEN:1234,reuseaddr +```bash +$ socat /dev/ttyACM0,b57600 TCP-LISTEN:1234,reuseaddr +``` Other methods of exposing the serial interface over TCP are possible (eg: ESP8266 or using Arduino Wifi shield). Basically the serial stream should be directly mapped to the TCP stream. @@ -66,8 +68,10 @@ rflink: host: 192.168.0.10 port: 1234 ``` -# Ignoring devices -Rflink platform can be configured to completely ignore a device on a platform level. This is useful when you have neighbors which also use 433Mhz technology. + +### {% linkable_title Ignoring devices %} + +Rflink platform can be configured to completely ignore a device on a platform level. This is useful when you have neighbors which also use 433 Mhz technology. For example: @@ -86,6 +90,7 @@ This configuration will ignore the button `1` of the `newkaku` device with ID `0 Wildcards only work at the end of the ID, not in the middle of front! -# Device support +### {% linkable_title Device support %} + Even though a lot of devices are supported by Rflink, not all have been tested/implemented. If you have a device supported by Rflink but not by this component please consider testing and adding support yourself or [create an issue](https://github.com/home-assistant/home-assistant/issues/new) and mention `@aequitas` in the description. diff --git a/source/_components/sensor.rflink.markdown b/source/_components/sensor.rflink.markdown index 11c26f26527..9a07fc001d3 100644 --- a/source/_components/sensor.rflink.markdown +++ b/source/_components/sensor.rflink.markdown @@ -57,13 +57,15 @@ Device configuration variables: - **unit_of_measurement** (*Optional*): Override automatically detected unit of sensor. - **aliasses** (*Optional*): Alternative Rflink ID's this device is known by. -# Hiding/ignoring sensors +### {% linkable_title Hiding/ignoring sensors %} + Sensors are added automatically when the Rflink gateway intercepts a 433Mhz command in the ether. To prevent cluttering the frontend use any of these methods: - Configure a `new_devices_group` for sensors and optionally add it to a different `view`. - Hide unwanted devices using [customizations](/getting-started/customizing-devices/) - [Ignore devices on a platform level](/components/rflink/#ignoring-devices) -# Device support +### {% linkable_title Device support %} + See [device support](/components/rflink/#device-support) diff --git a/source/_components/switch.rflink.markdown b/source/_components/switch.rflink.markdown index bae099388d9..9fb8ecb9cd0 100644 --- a/source/_components/switch.rflink.markdown +++ b/source/_components/switch.rflink.markdown @@ -55,7 +55,7 @@ Device configuration variables: - **fire_event_** (*Optional*): Fire an `button_pressed` event if this device is turned on or off (default: False). - **signal_repetitions** (*Optional*): Repeat every Rflink command this number of times (default: 1) -# Switch state +### {% linkable_title Switch state %} Initially the state of a switch is unknown. When the switch is turned on or off (via frontend or 433Mhz remote) the state is known and will be shown in the frontend. @@ -76,6 +76,7 @@ switch: Any on/off command from any alias ID updates the current state of the switch. However when sending a command through the frontend only the primary ID is used. -# Device support +### {% linkable_title Device support %} + See [device support](/components/rflink/#device-support) From 0ebf6f85b5dda4f9b57632a34c2ac47bfc2deafc Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Sat, 11 Feb 2017 16:44:05 +0100 Subject: [PATCH 72/81] Add details --- source/_components/rflink.markdown | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/source/_components/rflink.markdown b/source/_components/rflink.markdown index 91462a0f026..43fe9c4b609 100644 --- a/source/_components/rflink.markdown +++ b/source/_components/rflink.markdown @@ -94,3 +94,11 @@ Wildcards only work at the end of the ID, not in the middle of front! Even though a lot of devices are supported by Rflink, not all have been tested/implemented. If you have a device supported by Rflink but not by this component please consider testing and adding support yourself or [create an issue](https://github.com/home-assistant/home-assistant/issues/new) and mention `@aequitas` in the description. + +### {% linkable_title Technical overview %} + +- The`rflink` Python module a asyncio transport/protocol is setup that fires an callback for every (valid/supported) packet received by the Rflink gateway. +- This component uses this callback to distribute 'rflink packet events' over the HASS bus which can be subscribed to by entities/platform implementations. +- The platform implementions take care of creating new devices (if enabled) for unsees incoming packet id's. +- Device entities take care of matching to the packet ID, interpreting and performing actions based on the packet contents. Common entitiy logic is maintained in this main component. + From a6b619924cb8d5f4659e395b8e8682b63af60485 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Sat, 11 Feb 2017 16:50:35 +0100 Subject: [PATCH 73/81] Add social image for 0.38 --- source/images/blog/2017-02-0.38/social.png | Bin 0 -> 113811 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 source/images/blog/2017-02-0.38/social.png diff --git a/source/images/blog/2017-02-0.38/social.png b/source/images/blog/2017-02-0.38/social.png new file mode 100644 index 0000000000000000000000000000000000000000..b0446f46f9297cff36560370b7b6de082646ced6 GIT binary patch literal 113811 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 znt�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
    azHV`^ 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 Xf(i+V6)$Tr;4f80ltQ_j>68Bj+Rjdq literal 0 HcmV?d00001 From 1dbd7c45b4bb5ce735a930825ba87c78fea9faad Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Sat, 11 Feb 2017 17:46:57 +0100 Subject: [PATCH 74/81] Add blog post for 0.38 --- ...02-11-alert-appletv-mqtt-yeelight.markdown | 189 ++++++++++++++++++ 1 file changed, 189 insertions(+) create mode 100644 source/_posts/2017-02-11-alert-appletv-mqtt-yeelight.markdown diff --git a/source/_posts/2017-02-11-alert-appletv-mqtt-yeelight.markdown b/source/_posts/2017-02-11-alert-appletv-mqtt-yeelight.markdown new file mode 100644 index 00000000000..a19eeecd56f --- /dev/null +++ b/source/_posts/2017-02-11-alert-appletv-mqtt-yeelight.markdown @@ -0,0 +1,189 @@ +--- +layout: post +title: "0.38: Alert, AppleTV, MQTT discovery, and Yeelight" +description: "Faster and more configurable frontend, " +date: 2017-02-11 08:04:05 +0000 +date_formatted: "February 11, 2017" +author: Fabian Affolter et al. +author_twitter: fabaff +comments: true +categories: Release-Notes +og_image: /images/blog/2017-02-0.38/social.png +--- + +0.38, hurry :tada: In this release we (special thanks to [@pvizeli]) have migrated all core components to work asynchronous. + +The configuration checking support was expanded. We have now `homeassistant.check_config`. This means that the service `homeassistant.restart` will now only restart your Home Assistant installation if the configuration is valid. + +### {% linkable_title Rewritten frontend core %} +The core of the frontend has been completely been rewritten, optimizing for speed and lost connection recovery. Even on the slowest phones it should fly now. + +### {% linkable_title Custom state-card UI %} +A nice new feature is the possibility to create [custom state-card][custom-ui] in the frondend. Go ahead and write your own state-card for [lights][light], sensors, locks, etc. + +### {% linkable_title MQTT discovery %} +The latest MQTT feature is [discovery][mqtt-discovery] support. Do not confuse this which the Home Assistant [Discovery][discovery]. MQTT Discover is for MQTT-only. Similar to the HTTP sensor/binary sensor allows this to use devices with minimal configuration. + +### {% linkable_title Alert component %} +If you left your front door open, then the [`alert`][alert] component can be used to remind you of this by sending you repeating notifications at a given interval. + +### {% linkable_title Yeelight %} +The [`yeelight`][yeelight] component has been ported to use a more stable and feature-complete [python-yeelight][python-yeelight] backend, and supports now both white and RGB bulbs. The component also supports transitions and can be configured to save the settings to the bulb on changes. The users currently using custom components for Yeelight are encouraged to move back to use the included version and report any problems with it to our [issue tracker][issue]. + +### {% linkable_title All changes %} +#### {% linkable_title New platforms/components %} + +- Sensor: Support for monitoring [OpenEVSE][openevse] chargers ([@miniconfig]) +- Voice command [API.AI][apiai] ([@adrianlzt]) +- [Alert][alert] Component ([@rmkraus]) +- [Rflink][rflink] 433Mhz gateway platform and components ([@aequitas]) +- Lock: Support for [Nuki.io][nuki] smart locks ([@pschmitt]) +- Sensor: [QNAP][qnap] Sensor ([@colinodell]) +- Switch: Add support for [FRITZ!DECT][fritz] wireless switches based on fritzhome ([@BastianPoe]) +- Sensor: Add [moon][moon] sensor ([@fabaff]) +- Media player: Support for the [Orange Livebox Play TV][orange] appliance ([@pschmitt]) +- Media player: Initial support for [Apple TV][apple] ([@postlund]) +- MQTT: [MQTT discovery][mqtt-discovery] support ([@balloob], [@fabaff]) +- Notify: [Mailgun][mailgun] notify service ([@pschmitt]) + +#### {% linkable_title Improvements %} + +- Switch - Pilight: Validation no longer rejects alphanumeric IDs ([@DavidLP]) +- Device tracker - ASUSWrt: Fixes `ip neigh` regex to handle the possible IPv6 "router" flag ([@kylehendricks]) +- Light - MySensors: Fix mysensors RGB and W light turn on ([@MartinHjelmare]) +- Light - Yeelight: new yeelight backend lib, new features ([@rytilahti]) +- Climate - Eq3btsmart: Cleanup modes & available, bump version requirement ([@rytilahti]) +- Sensor - SMA: Handle units correctly ([@kellerza]) +- MQTT eventstream: Prevent infinite loop in cross configured MQTT event streams ([@aequitas]) +- Light - [Hue][hue]: Fix lightgroups not syncing state ([@tboyce1]) +- Dvice tracker - Owntracks: Fix OwnTracks state names ([@tboyce1]) +- Wink: Wink AC and additional sensor support ([@w1ll1am23]) +- Modbus: Modbus write_register accept list ([@benvm]) +- Device tracker - Ping: Add devices detected by ping as SOURCE_TYPE_ROUTER instead of GPS ([@michaelarnauts]) +- Climate - Ecobee: Cleanup climate and ecobee ([@Duoxilian]) +- Sensor - Miflora: Allow specification of bluetooth adapter ([@Danielhiversen]) +- Sensor - [Systemmonitor][systemmonitor]: Add average load to systemmonitor ([@eagleamon]) +- Sensor - [Openweathermap][owm]: Add wind bearing ([@fabaff]) +- Notify - Facebook: Allow to use data for enhanced messages ([@adrianlzt]) +- Light - Hyperion: Change CONF_DEFAULT_COLOR CV type ([@Joeboyc2]) +- Mysensors: Fix validation of serial port on windows ([@MartinHjelmare]) +- Notify - Webostv: Store the key file in the configuration directory ([@pschmitt]) +- TTS: TTS ID3 support ([@robbiet480]) +- Switch - Broadlink: Add send packet service ([@Yannic-HAW]) +- Wink: Add support for position on Wink cover ([@albertoarias]) +- Light - Flux: Make brightness display work for RGB devices. ([@aequitas]) +- Media player - Roku: Fix attribute error for media_player/roku ([@tchellomello]) +- Light - MQTT template: Fix brightness slider for MQTT template lights ([@ray0711]) +- Template: Add `min` and `max` Jinja2 [filters][filters] ([@sbidoul]) +- Device tracker - Skyhub: Improve Sky Hub error handling ([@alexmogavero]) +- Notify - SMTP: Add error checking to the MIMEImage encoding ([@stratosmacker]) +- Light - MQTT: Check for command topics when determining the capabilities of an MQTT light ([@herm]) +- Core: Check config before restarting ([@andrey-git]) +- Light - [Hue][hue]: Fix groups with same names ([@tboyce1]) +- Template: Add icon_template to template sensor ([@tboyce1]) +- Recorder: Refactoring, scoping, and better handling of SQLAlchemy Sessions ([@kellerza]) +- Light - Flux: Add support for fluxled discovery. ([@aequitas]) +- Media player - AppleTV: Add discovery support to Apple TV ([@postlund]) +- Sensor - Template: Improve warning message in template rendering ([@Danielhiversen]) +- Light - Demo: Add available property and typing hints ([@rytilahti]) +- Sensor - ARWN: Enhancements to [ARWN][arwn] platform ([@sdague]) +- Fan - ISY994: Change medium state for filtering ([@Teagan42]) +- Climate - Ecobee: Support away_mode as permanent hold and hold_mode as temporary hold. ([@Duoxilian]) +- Tellduslive: Don't throw exception if connection to server is lost ([@molobrakos]) +- Zoneminder: Refactoring and JSON decode error handling ([@pschmitt]) +- Image processing: Cleanup Base face class add support for microsoft face detect ([@pvizeli]) + +Bugfix(es): [@balloob], [@fabaff], [@pvizeli], [@mnoorenberghe] [@Danielhiversen], [@armills], [@tchellomello], [@aequitas], [@mathewpeterson], [@molobrakos], [@michaelarnauts], [@jabesq], [@turbokongen], [@JshWright], [@andriej], [@jawilson], [@andrey-git], [@nodinosaur], [@konikvranik], and you if you are missing here. + +### {% linkable_title Breaking changes %} +- The support for [LG webOS Smart TVs][webostv] was improved. This requires you to move `$HOME/.pylgtv` to `$HASS_CONFIG_DIR/webostv.conf` or Home Assistant will need to be paired with the TV again. +- Image processing events have been renamed: `identify_face` has become `image_processing.detect_face`, `found_plate` has become `image_processing.found_plate` +- The [FFmpeg binary sensor][ffmpeg-bin] change the platform name from `ffmpeg` to `ffmpeg_noise` and `ffmpeg_motion`. Also all FFmpeg-related services are moved from a platform implementation to a the [FFmpeg components][ffmpeg] and were rename from `binary_sensor.ffmpeg_xy` to `ffmpeg.xy`. + +### {% linkable_title If you need help... %} +...don't hesitate to use our [Forum][forum] or join us for a little [chat][gitter]. 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][issue]. Make sure to fill in all fields of the issue template. + +[@acambitsis]: https://github.com/acambitsis +[@adrianlzt]: https://github.com/adrianlzt +[@aequitas]: https://github.com/aequitas +[@albertoarias]: https://github.com/albertoarias +[@alexmogavero]: https://github.com/alexmogavero +[@andrey-git]: https://github.com/andrey-git +[@andriej]: https://github.com/andriej +[@armills]: https://github.com/armills +[@balloob]: https://github.com/balloob +[@BastianPoe]: https://github.com/BastianPoe +[@benvm]: https://github.com/benvm +[@colinodell]: https://github.com/colinodell +[@Danielhiversen]: https://github.com/Danielhiversen +[@DavidLP]: https://github.com/DavidLP +[@Duoxilian]: https://github.com/Duoxilian +[@eagleamon]: https://github.com/eagleamon +[@fabaff]: https://github.com/fabaff +[@herm]: https://github.com/herm +[@jabesq]: https://github.com/jabesq +[@jawilson]: https://github.com/jawilson +[@Joeboyc2]: https://github.com/Joeboyc2 +[@JshWright]: https://github.com/JshWright +[@kellerza]: https://github.com/kellerza +[@konikvranik]: https://github.com/konikvranik +[@kylehendricks]: https://github.com/kylehendricks +[@LinuxChristian]: https://github.com/LinuxChristian +[@MartinHjelmare]: https://github.com/MartinHjelmare +[@mathewpeterson]: https://github.com/mathewpeterson +[@michaelarnauts]: https://github.com/michaelarnauts +[@miniconfig]: https://github.com/miniconfig +[@mnoorenberghe]: https://github.com/mnoorenberghe +[@molobrakos]: https://github.com/molobrakos +[@nodinosaur]: https://github.com/nodinosaur +[@postlund]: https://github.com/postlund +[@pschmitt]: https://github.com/pschmitt +[@pvizeli]: https://github.com/pvizeli +[@ray0711]: https://github.com/ray0711 +[@rmkraus]: https://github.com/rmkraus +[@robbiet480]: https://github.com/robbiet480 +[@rytilahti]: https://github.com/rytilahti +[@sbidoul]: https://github.com/sbidoul +[@sdague]: https://github.com/sdague +[@stratosmacker]: https://github.com/stratosmacker +[@tboyce1]: https://github.com/tboyce1 +[@tchellomello]: https://github.com/tchellomello +[@Teagan42]: https://github.com/Teagan42 +[@turbokongen]: https://github.com/turbokongen +[@valentinalexeev]: https://github.com/valentinalexeev +[@w1ll1am23]: https://github.com/w1ll1am23 +[@Yannic-HAW]: https://github.com/Yannic-HAW + +[alert]: https://home-assistant.io/components/alert/ +[apiai]: https://home-assistant.io/components/apiai/ +[apple]: https://home-assistant.io/components/media_player.apple_tv/ +[arwn]: https://home-assistant.io/components/sensor.arwn/ +[custom-ui]: https://home-assistant.io/developers/frontend_creating_custom_ui/ +[discovery]: https://home-assistant.io/components/discovery/ +[ffmpeg-bin]: https://home-assistant.io/components/binary_sensor.ffmpeg/ +[ffmpeg]: https://home-assistant.io/components/ffmpeg/ +[filters]: https://home-assistant.io/topics/templating/#home-assistant-template-extensions +[fritz]: https://home-assistant.io/components/switch.fritzdect/ +[hue]: https://home-assistant.io/components/light.hue/ +[light]: https://home-assistant.io/cookbook/custom_ui_by_andrey-git +[mailgun]: https://home-assistant.io/components/notify.mailgun/ +[moon]: https://home-assistant.io/components/sensor.moon/ +[mqtt-discovery]: https://home-assistant.io/components/mqtt/#discovery +[nuki]: https://home-assistant.io/components/lock.nuki/ +[openevse]: https://home-assistant.io/components/sensor.openevse/ +[orange]: https://home-assistant.io/components/media_player.liveboxplaytv/ +[owm]: https://home-assistant.io/components/sensor.openweathermap/ +[python-yeelight]: https://gitlab.com/stavros/python-yeelight +[qnap]: https://home-assistant.io/components/sensor.qnap/ +[rflink]: https://home-assistant.io/components/rflink/ +[systemmonitor]: https://home-assistant.io/components/sensor.systemmonitor/ +[webostv]: https://home-assistant.io/components/media_player.webostv/ +[yeelight]: https://home-assistant.io/components/light.yeelight/ + +[issue]: https://github.com/home-assistant/home-assistant/issues +[gitter]: https://gitter.im/home-assistant/home-assistant +[forum]: https://community.home-assistant.io/ + From 3af68990ade9e4ce248415394da7b72f98a1e401 Mon Sep 17 00:00:00 2001 From: Pascal Vizeli Date: Sat, 11 Feb 2017 18:00:15 +0100 Subject: [PATCH 75/81] Add new platform microsoft_face_detect / add braking changes for 0.38 (#2004) * Add new platform microsoft_face_detect / add braking changes * add more infos --- source/_components/image_processing.markdown | 14 +++---- ..._processing.microsoft_face_detect.markdown | 38 +++++++++++++++++++ ...rocessing.microsoft_face_identify.markdown | 2 +- 3 files changed, 46 insertions(+), 8 deletions(-) create mode 100644 source/_components/image_processing.microsoft_face_detect.markdown diff --git a/source/_components/image_processing.markdown b/source/_components/image_processing.markdown index 7bd4c48b188..aaf458d39e4 100644 --- a/source/_components/image_processing.markdown +++ b/source/_components/image_processing.markdown @@ -30,20 +30,20 @@ automation: - alias: Open garage door trigger: platform: event - event_type: found_plate + event_type: image_processing.found_plate event_data: entity_id: openalpr.camera_garage_1 plate: BE2183423 ... ``` -The following event attributes will be present: `entity_id`, `plate`, `confidence` +The following event attributes will be present (platform depents): `entity_id`, `plate`, `confidence` -## {% linkable_title Face identify %} +## {% linkable_title Face %} -Face entities attribute have a face counter `total_faces` and all validated person as `known_faces`. +Face entities attribute have a face counter `total_faces` and all face data as `faces`. -This event is trigger after Microsoft Face identify found a known faces. +This event is trigger after Microsoft Face found a faces. ```yaml # Example configuration.yaml automation entry @@ -51,11 +51,11 @@ automation: - alias: Known person in front of my door trigger: platform: event - event_type: identify_face + event_type: image_processing.detect_face event_data: entity_id: image_processing.door name: 'Hans Maier' ... ``` -The following event attributes will be present: `entity_id`, `name`, `confidence` +The following event attributes will be present (platform depends): `entity_id`, `name`, `confidence`, `age`, `gender`, `motion`, `glasses` diff --git a/source/_components/image_processing.microsoft_face_detect.markdown b/source/_components/image_processing.microsoft_face_detect.markdown new file mode 100644 index 00000000000..10ed16b8f48 --- /dev/null +++ b/source/_components/image_processing.microsoft_face_detect.markdown @@ -0,0 +1,38 @@ +--- +layout: page +title: "Microsoft Face detect" +description: "Instructions how to integrate microsoft face detect into Home Assistant." +date: 2017-01-25 00:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: microsoft.png +ha_category: Image Processing +featured: false +ha_release: 0.37 +--- + +The `microsoft_face_detect` image processing platform lets you use [Microsoft Face identify](https://www.microsoft.com/cognitive-services/en-us/) API through Home Assistant. This platform allow you do detect face on camera and fire a event with attributes. + +Please refer to the [component](/components/microsoft_face/) configuration on how to setup the API key. + +For using the result inside an automation rule, take a look at the [component](/components/image_processing/) page. + +### {% linkable_title Configuration Home Assistant %} + +```yaml +# Example configuration.yaml entry +image_processing: + - platform: microsoft_face_detect + source: + - entity_id: camera.door +``` +Configuration variables: + +- **group** (*Required*): Micrsoft face group to detect person from it. +- **confidence** (*Optional*): The minimum of confidence in percent to process with Home Assistant. Defaults to 80. +- **source** array (*Required*): List of image sources. + - **entity_id** (*Required*): A camera entity id to get picture from. + - **name** (*Optional*): This parameter allows you to override the name of your `image_processing` entity. +- **attributes** array (*Optional*): Default age,gender. Attributes for search on picture. Supported: age, gender, glasses diff --git a/source/_components/image_processing.microsoft_face_identify.markdown b/source/_components/image_processing.microsoft_face_identify.markdown index 9265a9e26b4..c134396c5c3 100644 --- a/source/_components/image_processing.microsoft_face_identify.markdown +++ b/source/_components/image_processing.microsoft_face_identify.markdown @@ -13,7 +13,7 @@ featured: false ha_release: 0.37 --- -The `microsoft_face_identify` image processing platform lets you use [Microsoft Face identify](https://www.microsoft.com/cognitive-services/en-us/) API through Home Assistant. +The `microsoft_face_identify` image processing platform lets you use [Microsoft Face identify](https://www.microsoft.com/cognitive-services/en-us/) API through Home Assistant. This platform allow you do identify persons on camera and fire a event with identify persons. Please refer to the [component](/components/microsoft_face/) configuration on how to setup the API key. From 05219416f0ea21528e3a338e69884a8c7eb16c93 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Sat, 11 Feb 2017 18:09:54 +0100 Subject: [PATCH 76/81] Minor updates --- source/_components/image_processing.markdown | 4 ++-- ..._processing.microsoft_face_detect.markdown | 19 ++++++++++--------- ...rocessing.microsoft_face_identify.markdown | 5 +++-- 3 files changed, 15 insertions(+), 13 deletions(-) diff --git a/source/_components/image_processing.markdown b/source/_components/image_processing.markdown index aaf458d39e4..41f36134250 100644 --- a/source/_components/image_processing.markdown +++ b/source/_components/image_processing.markdown @@ -37,7 +37,7 @@ automation: ... ``` -The following event attributes will be present (platform depents): `entity_id`, `plate`, `confidence` +The following event attributes will be present (platform-dependent): `entity_id`, `plate`, `confidence` ## {% linkable_title Face %} @@ -58,4 +58,4 @@ automation: ... ``` -The following event attributes will be present (platform depends): `entity_id`, `name`, `confidence`, `age`, `gender`, `motion`, `glasses` +The following event attributes will be present (platform-dependent): `entity_id`, `name`, `confidence`, `age`, `gender`, `motion`, `glasses` diff --git a/source/_components/image_processing.microsoft_face_detect.markdown b/source/_components/image_processing.microsoft_face_detect.markdown index 10ed16b8f48..aa2a1cd1a83 100644 --- a/source/_components/image_processing.microsoft_face_detect.markdown +++ b/source/_components/image_processing.microsoft_face_detect.markdown @@ -1,7 +1,7 @@ --- layout: page -title: "Microsoft Face detect" -description: "Instructions how to integrate microsoft face detect into Home Assistant." +title: "Microsoft Face Detect" +description: "Instructions how to integrate Microsoft Face Detect into Home Assistant." date: 2017-01-25 00:00 sidebar: true comments: false @@ -10,10 +10,10 @@ footer: true logo: microsoft.png ha_category: Image Processing featured: false -ha_release: 0.37 +ha_release: 0.38 --- -The `microsoft_face_detect` image processing platform lets you use [Microsoft Face identify](https://www.microsoft.com/cognitive-services/en-us/) API through Home Assistant. This platform allow you do detect face on camera and fire a event with attributes. +The `microsoft_face_detect` image processing platform allows you to use the [Microsoft Face Identify](https://www.microsoft.com/cognitive-services/en-us/) API through Home Assistant. This platform enables you do detect face on camera and fire a event with attributes. Please refer to the [component](/components/microsoft_face/) configuration on how to setup the API key. @@ -24,15 +24,16 @@ For using the result inside an automation rule, take a look at the [component](/ ```yaml # Example configuration.yaml entry image_processing: - - platform: microsoft_face_detect - source: - - entity_id: camera.door + - platform: microsoft_face_detect + source: + - entity_id: camera.door ``` + Configuration variables: -- **group** (*Required*): Micrsoft face group to detect person from it. +- **group** (*Required*): Microsoft Face group used to detect the person. - **confidence** (*Optional*): The minimum of confidence in percent to process with Home Assistant. Defaults to 80. - **source** array (*Required*): List of image sources. - **entity_id** (*Required*): A camera entity id to get picture from. - **name** (*Optional*): This parameter allows you to override the name of your `image_processing` entity. -- **attributes** array (*Optional*): Default age,gender. Attributes for search on picture. Supported: age, gender, glasses +- **attributes** array (*Optional*): The image search attributes. Supported: `age`, `gender`, `glasses`. Default `age`, `gender`. diff --git a/source/_components/image_processing.microsoft_face_identify.markdown b/source/_components/image_processing.microsoft_face_identify.markdown index c134396c5c3..e600ae36a61 100644 --- a/source/_components/image_processing.microsoft_face_identify.markdown +++ b/source/_components/image_processing.microsoft_face_identify.markdown @@ -1,7 +1,7 @@ --- layout: page -title: "Microsoft Face identify" -description: "Instructions how to integrate microsoft face identify into Home Assistant." +title: "Microsoft Face Identify" +description: "Instructions how to integrate Microsoft Face Identify into Home Assistant." date: 2017-01-25 00:00 sidebar: true comments: false @@ -29,6 +29,7 @@ image_processing: source: - entity_id: camera.door ``` + Configuration variables: - **group** (*Required*): Micrsoft face group to detect person from it. From 785b5bbdb19c8c04ad963e4a54123aec2015a522 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Sat, 11 Feb 2017 19:47:39 +0100 Subject: [PATCH 77/81] Update release blog post --- source/_posts/2017-02-11-alert-appletv-mqtt-yeelight.markdown | 2 ++ 1 file changed, 2 insertions(+) diff --git a/source/_posts/2017-02-11-alert-appletv-mqtt-yeelight.markdown b/source/_posts/2017-02-11-alert-appletv-mqtt-yeelight.markdown index a19eeecd56f..9d7152f95fc 100644 --- a/source/_posts/2017-02-11-alert-appletv-mqtt-yeelight.markdown +++ b/source/_posts/2017-02-11-alert-appletv-mqtt-yeelight.markdown @@ -45,6 +45,7 @@ The [`yeelight`][yeelight] component has been ported to use a more stable and fe - Media player: Initial support for [Apple TV][apple] ([@postlund]) - MQTT: [MQTT discovery][mqtt-discovery] support ([@balloob], [@fabaff]) - Notify: [Mailgun][mailgun] notify service ([@pschmitt]) +- Image Processing: Support [Microsoft Face detection][face-detect] ([@pvizeli]) #### {% linkable_title Improvements %} @@ -163,6 +164,7 @@ Experiencing issues introduced by this release? Please report them in our [issue [arwn]: https://home-assistant.io/components/sensor.arwn/ [custom-ui]: https://home-assistant.io/developers/frontend_creating_custom_ui/ [discovery]: https://home-assistant.io/components/discovery/ +[face-detect]: https://home-assistant.io/components/image_processing.microsoft_face_detect/ [ffmpeg-bin]: https://home-assistant.io/components/binary_sensor.ffmpeg/ [ffmpeg]: https://home-assistant.io/components/ffmpeg/ [filters]: https://home-assistant.io/topics/templating/#home-assistant-template-extensions From 0d0a8b642da1d968ead275bc19f4ba2932cad45f Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Sat, 11 Feb 2017 20:53:55 +0100 Subject: [PATCH 78/81] Only support for binary sensors --- source/_posts/2017-02-11-alert-appletv-mqtt-yeelight.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_posts/2017-02-11-alert-appletv-mqtt-yeelight.markdown b/source/_posts/2017-02-11-alert-appletv-mqtt-yeelight.markdown index 9d7152f95fc..5ccfc8b2f45 100644 --- a/source/_posts/2017-02-11-alert-appletv-mqtt-yeelight.markdown +++ b/source/_posts/2017-02-11-alert-appletv-mqtt-yeelight.markdown @@ -22,7 +22,7 @@ The core of the frontend has been completely been rewritten, optimizing for spee A nice new feature is the possibility to create [custom state-card][custom-ui] in the frondend. Go ahead and write your own state-card for [lights][light], sensors, locks, etc. ### {% linkable_title MQTT discovery %} -The latest MQTT feature is [discovery][mqtt-discovery] support. Do not confuse this which the Home Assistant [Discovery][discovery]. MQTT Discover is for MQTT-only. Similar to the HTTP sensor/binary sensor allows this to use devices with minimal configuration. +The latest MQTT feature is [discovery][mqtt-discovery] support. Do not confuse this which the Home Assistant [Discovery][discovery]. MQTT Discover is for MQTT-only. Similar to the HTTP sensor/binary sensor allows this to use devices with minimal configuration. At the moment only binary sensors are supported. ### {% linkable_title Alert component %} If you left your front door open, then the [`alert`][alert] component can be used to remind you of this by sending you repeating notifications at a given interval. From 890d0927acff3a3178f0b6fe135ca8b41752791a Mon Sep 17 00:00:00 2001 From: Robbie Trencheny Date: Sat, 11 Feb 2017 13:39:15 -0800 Subject: [PATCH 79/81] Update credits.markdown --- source/developers/credits.markdown | 287 ++++++++++++++++------------- 1 file changed, 162 insertions(+), 125 deletions(-) diff --git a/source/developers/credits.markdown b/source/developers/credits.markdown index c582120f53b..b65cc70575c 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-01-22 03:58:53 +0000 +date: 2017-02-11 21:38:58 +0000 sidebar: true comments: false sharing: true @@ -13,7 +13,7 @@ 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 "4759 total commits to the home-assistant organization, 3008 commits to home-assistant, 941 commits to home-assistant.github.io, 449 commits to home-assistant-polymer, 243 commits to home-assistant-js, 79 commits to netdisco, 21 commits to home-assistant-js-websocket, 8 commits to home-assistant-assets, 7 commits to micropython-home-assistant, 2 commits to lambda-home-assistant-github, 1 commit to home-assistant-notebooks") +- [Paulus Schoutsen (@balloob)](https://github.com/balloob "4870 total commits to the home-assistant organization, 3051 commits to home-assistant, 970 commits to home-assistant.github.io, 474 commits to home-assistant-polymer, 244 commits to home-assistant-js, 79 commits to netdisco, 33 commits to home-assistant-js-websocket, 8 commits to home-assistant-assets, 7 commits to micropython-home-assistant, 2 commits to lambda-home-assistant-github, 1 commit to home-assistant-iOS, 1 commit to home-assistant-notebooks") ### {% linkable_title Contributors %} @@ -22,19 +22,22 @@ This page contains a list of people who have contributed in one way or another t - [Aaron Linville (@linville)](https://github.com/linville "1 total commits to the home-assistant organization, 1 commit to appdaemon") - [Aaron Malone (@aaroncm)](https://github.com/aaroncm "1 total commits to the home-assistant organization, 1 commit to home-assistant.github.io") - [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 "2 total commits to the home-assistant organization, 1 commit to home-assistant, 1 commit to home-assistant.github.io") - [Abhishek Anand (@aa755)](https://github.com/aa755 "2 total commits to the home-assistant organization, 1 commit to home-assistant, 1 commit to home-assistant.github.io") - [abmantis (@abmantis)](https://github.com/abmantis "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [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 "52 total commits to the home-assistant organization, 32 commits to home-assistant, 14 commits to home-assistant-polymer, 3 commits to home-assistant-js, 3 commits to home-assistant.github.io") +- [Adam Mills (@armills)](https://github.com/armills "70 total commits to the home-assistant organization, 41 commits to home-assistant, 16 commits to home-assistant-polymer, 10 commits to home-assistant.github.io, 3 commits to home-assistant-js") - [ADeeds (@ADeeds)](https://github.com/ADeeds "1 total commits to the home-assistant organization, 1 commit to home-assistant.github.io") - [AdithyanI (@AdithyanI)](https://github.com/AdithyanI "1 total commits to the home-assistant organization, 1 commit to home-assistant.github.io") - [Aditya Shevade (@adibis)](https://github.com/adibis "1 total commits to the home-assistant organization, 1 commit to home-assistant.github.io") - [Adrien Brault (@adrienbrault)](https://github.com/adrienbrault "2 total commits to the home-assistant organization, 2 commits to home-assistant") +- [AdriĂĄn LĂłpez (@adrianlzt)](https://github.com/adrianlzt "5 total commits to the home-assistant organization, 3 commits to home-assistant.github.io, 2 commits to home-assistant") - [Alan Bowman (@alanbowman)](https://github.com/alanbowman "5 total commits to the home-assistant organization, 4 commits to home-assistant, 1 commit to home-assistant.github.io") - [Albert Lee (@trisk)](https://github.com/trisk "10 total commits to the home-assistant organization, 6 commits to home-assistant, 4 commits to home-assistant.github.io") -- [Alberto Arias Maestro (@albertoarias)](https://github.com/albertoarias "1 total commits to the home-assistant organization, 1 commit to home-assistant") +- [Alberto Arias Maestro (@albertoarias)](https://github.com/albertoarias "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Aleksey Gureiev (@alg)](https://github.com/alg "1 total commits to the home-assistant organization, 1 commit to home-assistant.github.io") -- [Alex (@asbach)](https://github.com/asbach "1 total commits to the home-assistant organization, 1 commit to home-assistant") +- [Alessandro Mogavero (@alexmogavero)](https://github.com/alexmogavero "2 total commits to the home-assistant organization, 2 commits 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 Harvey (@infamy)](https://github.com/infamy "21 total commits to the home-assistant organization, 11 commits to home-assistant, 10 commits to home-assistant.github.io") - [Alex Mekkering (@AlexMekkering)](https://github.com/AlexMekkering "1 total commits to the home-assistant organization, 1 commit to home-assistant.github.io") - [Alex Popov (@AlexVPopov)](https://github.com/AlexVPopov "1 total commits to the home-assistant organization, 1 commit to home-assistant.github.io") @@ -46,19 +49,20 @@ This page contains a list of people who have contributed in one way or another t - [Alexandre Perrin (@kAworu)](https://github.com/kAworu "4 total commits to the home-assistant organization, 4 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") - [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 "37 total commits to the home-assistant organization, 21 commits to home-assistant.github.io, 16 commits to home-assistant") +- [Alok Saboo (@arsaboo)](https://github.com/arsaboo "45 total commits to the home-assistant organization, 29 commits to home-assistant.github.io, 16 commits to home-assistant") - [AlucardZero (@AlucardZero)](https://github.com/AlucardZero "13 total commits to the home-assistant organization, 9 commits to home-assistant.github.io, 4 commits to home-assistant") - [amahlaka (@amahlaka)](https://github.com/amahlaka "6 total commits to the home-assistant organization, 6 commits to home-assistant.github.io") - [amorsillo (@fignuts)](https://github.com/fignuts "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") - [Anastasia A. (@Sacret)](https://github.com/Sacret "1 total commits to the home-assistant organization, 1 commit to home-assistant.github.io") - [Anders Gjendem (@agjendem)](https://github.com/agjendem "1 total commits to the home-assistant organization, 1 commit to home-assistant.github.io") +- [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 "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [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") - [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 "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") -- [Andrew Cockburn (@acockburn)](https://github.com/acockburn "222 total commits to the home-assistant organization, 107 commits to appdaemon, 82 commits to hadashboard, 25 commits to scenegen, 8 commits to home-assistant.github.io") +- [Andrew Cockburn (@acockburn)](https://github.com/acockburn "237 total commits to the home-assistant organization, 122 commits to appdaemon, 82 commits to hadashboard, 25 commits to scenegen, 8 commits to home-assistant.github.io") - [Andrew LeCody (@aceat64)](https://github.com/aceat64 "2 total commits to the home-assistant organization, 1 commit to home-assistant, 1 commit to home-assistant.github.io") - [Andrew McClure (@nzfarmer1)](https://github.com/nzfarmer1 "1 total commits to the home-assistant organization, 1 commit to home-assistant") - [Andrew Patton (@acusti)](https://github.com/acusti "1 total commits to the home-assistant organization, 1 commit to home-assistant.github.io") @@ -67,8 +71,8 @@ This page contains a list of people who have contributed in one way or another t - [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 "5 total commits to the home-assistant organization, 5 commits to home-assistant.github.io") -- [andrey-git (@andrey-git)](https://github.com/andrey-git "13 total commits to the home-assistant organization, 6 commits to home-assistant, 4 commits to home-assistant-polymer, 3 commits to home-assistant.github.io") -- [Andrzej (@andriej)](https://github.com/andriej "1 total commits to the home-assistant organization, 1 commit to home-assistant.github.io") +- [Andrey (@andrey-git)](https://github.com/andrey-git "37 total commits to the home-assistant organization, 17 commits to home-assistant, 12 commits to home-assistant.github.io, 8 commits to home-assistant-polymer") +- [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") - [Andy Lindeman (@alindeman)](https://github.com/alindeman "1 total commits to the home-assistant organization, 1 commit to home-assistant.github.io") - [Andy Loughran (@andylockran)](https://github.com/andylockran "4 total commits to the home-assistant organization, 2 commits to home-assistant, 2 commits to home-assistant.github.io") - [andyat (@andyat)](https://github.com/andyat "2 total commits to the home-assistant organization, 2 commits to home-assistant") @@ -79,6 +83,7 @@ This page contains a list of people who have contributed in one way or another t - [Anurag El Dorado (@aedorado)](https://github.com/aedorado "1 total commits to the home-assistant organization, 1 commit to home-assistant.github.io") - [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") - [Arnaud BĂ©trĂ©mieux (@arnoo)](https://github.com/arnoo "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") - [Arno (@aetjansen)](https://github.com/aetjansen "1 total commits to the home-assistant organization, 1 commit 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") @@ -92,12 +97,15 @@ This page contains a list of people who have contributed in one way or another t - [Bart274 (@Bart274)](https://github.com/Bart274 "25 total commits to the home-assistant organization, 17 commits to home-assistant, 7 commits to home-assistant.github.io, 1 commit to home-assistant-polymer") - [Bartek Celary (@bcelary)](https://github.com/bcelary "1 total commits to the home-assistant organization, 1 commit to home-assistant.github.io") - [Bas Stottelaar (@basilfx)](https://github.com/basilfx "1 total commits to the home-assistant organization, 1 commit to home-assistant.github.io") +- [bbrendon (@bbrendon)](https://github.com/bbrendon "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [Beau Simensen (@simensen)](https://github.com/simensen "1 total commits to the home-assistant organization, 1 commit to home-assistant.github.io") - [Ben Bangert (@bbangert)](https://github.com/bbangert "5 total commits to the home-assistant organization, 4 commits to home-assistant, 1 commit to home-assistant.github.io") - [Ben Doerr (@bendoerr)](https://github.com/bendoerr "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [Ben Miller (@beepmill)](https://github.com/beepmill "1 total commits to the home-assistant organization, 1 commit to home-assistant") - [Ben Origas (@borigas)](https://github.com/borigas "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") - [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 "30 total commits to the home-assistant organization, 30 commits to home-assistant-ansible") - [Benjamin Bryan (@ahnooie)](https://github.com/ahnooie "1 total commits to the home-assistant organization, 1 commit to home-assistant.github.io") - [Benoit BESSET (@bbesset)](https://github.com/bbesset "1 total commits to the home-assistant organization, 1 commit to home-assistant") - [bestlibre (@bestlibre)](https://github.com/bestlibre "9 total commits to the home-assistant organization, 6 commits to home-assistant, 3 commits to home-assistant.github.io") @@ -106,6 +114,7 @@ This page contains a list of people who have contributed in one way or another t - [blackdog70 (@blackdog70)](https://github.com/blackdog70 "1 total commits to the home-assistant organization, 1 commit to home-assistant") - [Blanyal D'Souza (@blanyal)](https://github.com/blanyal "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [Boced66 (@boced66)](https://github.com/boced66 "1 total commits to the home-assistant organization, 1 commit to home-assistant.github.io") +- [Boris K (@bokub)](https://github.com/bokub "1 total commits to the home-assistant organization, 1 commit to home-assistant") - [Brad Buran (@bburan)](https://github.com/bburan "1 total commits to the home-assistant organization, 1 commit to home-assistant") - [Brad Johnson (@bradsk88)](https://github.com/bradsk88 "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [BradleyDHobbs (@BradleyDHobbs)](https://github.com/BradleyDHobbs "1 total commits to the home-assistant organization, 1 commit to home-assistant.github.io") @@ -114,18 +123,19 @@ This page contains a list of people who have contributed in one way or another t - [Brandon Weeks (@brandonweeks)](https://github.com/brandonweeks "3 total commits to the home-assistant organization, 3 commits to home-assistant") - [Brendan Berg (@captainnapalm)](https://github.com/captainnapalm "1 total commits to the home-assistant organization, 1 commit to home-assistant.github.io") - [Brent Hughes (@bah2830)](https://github.com/bah2830 "25 total commits to the home-assistant organization, 16 commits to home-assistant, 8 commits to home-assistant.github.io, 1 commit to netdisco") -- [Brian J King (@brianjking)](https://github.com/brianjking "4 total commits to the home-assistant organization, 4 commits to home-assistant.github.io") +- [Brent Saltzman (@brent20)](https://github.com/brent20 "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") +- [Brian J King (@brianjking)](https://github.com/brianjking "5 total commits to the home-assistant organization, 5 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") - [Brigham Brown (@brigham)](https://github.com/brigham "1 total commits to the home-assistant organization, 1 commit to home-assistant.github.io") - [Britton Clapp (@britton-clapp)](https://github.com/britton-clapp "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [Bruno Adele (@badele)](https://github.com/badele "22 total commits to the home-assistant organization, 22 commits to home-assistant") -- [Bryce Edwards (@hoopty)](https://github.com/hoopty "1 total commits to the home-assistant organization, 1 commit to home-assistant") +- [Bryce Edwards (@hoopty)](https://github.com/hoopty "3 total commits to the home-assistant organization, 2 commits to home-assistant.github.io, 1 commit to home-assistant") - [Buut (@buut-vrij)](https://github.com/buut-vrij "1 total commits to the home-assistant organization, 1 commit 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 "1 total commits to the home-assistant organization, 1 commit 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 "74 total commits to the home-assistant organization, 68 commits to home-assistant.github.io, 5 commits to home-assistant, 1 commit to fabric-home-assistant") +- [Carlo Costanzo (@CCOSTAN)](https://github.com/CCOSTAN "78 total commits to the home-assistant organization, 71 commits to home-assistant.github.io, 5 commits to home-assistant, 1 commit to fabric-home-assistant, 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") - [chanders (@chanders)](https://github.com/chanders "2 total commits to the home-assistant organization, 2 commits to hadashboard") @@ -133,27 +143,32 @@ This page contains a list of people who have contributed in one way or another t - [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") - [Chema GarcĂ­a (@sch3m4)](https://github.com/sch3m4 "1 total commits to the home-assistant organization, 1 commit 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 LaRose (@cjlarose)](https://github.com/cjlarose "1 total commits to the home-assistant organization, 1 commit to home-assistant.github.io") -- [Chris Monteiro (@funstuff234)](https://github.com/funstuff234 "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") +- [Chris Monteiro (@cmonteiro128)](https://github.com/cmonteiro128 "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [Chris Mulder (@chrisvis)](https://github.com/chrisvis "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Chris R. Miller (@mysteriouspants)](https://github.com/mysteriouspants "1 total commits to the home-assistant organization, 1 commit to home-assistant.github.io") - [Chris Sims (@jcsims)](https://github.com/jcsims "1 total commits to the home-assistant organization, 1 commit to home-assistant.github.io") - [chris-thorn (@chris-thorn)](https://github.com/chris-thorn "5 total commits to the home-assistant organization, 5 commits to home-assistant.github.io") - [Christiaan Blom (@Deinara)](https://github.com/Deinara "2 total commits to the home-assistant organization, 1 commit to home-assistant, 1 commit to home-assistant.github.io") -- [Christian BrĂŠdstrup (@LinuxChristian)](https://github.com/LinuxChristian "6 total commits to the home-assistant organization, 5 commits to home-assistant, 1 commit to home-assistant.github.io") +- [Christian BrĂŠdstrup (@LinuxChristian)](https://github.com/LinuxChristian "7 total commits to the home-assistant organization, 6 commits to home-assistant, 1 commit 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") - [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") - [chrom3 (@chrom3)](https://github.com/chrom3 "3 total commits to the home-assistant organization, 2 commits to home-assistant.github.io, 1 commit to home-assistant") - [Chun-wei Kuo (@Domon)](https://github.com/Domon "1 total commits to the home-assistant organization, 1 commit to home-assistant.github.io") +- [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 "1 total commits to the home-assistant organization, 1 commit to home-assistant.github.io") -- [clach04 (@clach04)](https://github.com/clach04 "4 total commits to the home-assistant organization, 2 commits to home-assistant, 2 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") - [Clemens Wolff (@c-w)](https://github.com/c-w "1 total commits to the home-assistant organization, 1 commit to home-assistant") - [ClĂĄudio Ribeiro (@DailyMatters)](https://github.com/DailyMatters "1 total commits to the home-assistant organization, 1 commit to home-assistant.github.io") - [codeavenger07 (@codeavenger07)](https://github.com/codeavenger07 "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") -- [Colin O'Dell (@colinodell)](https://github.com/colinodell "6 total commits to the home-assistant organization, 4 commits to home-assistant, 2 commits to home-assistant.github.io") -- [Corban Mailloux (@corbanmailloux)](https://github.com/corbanmailloux "7 total commits to the home-assistant organization, 6 commits to home-assistant.github.io, 1 commit to home-assistant") -- [Craig J. Ward (@wardcraigj)](https://github.com/wardcraigj "3 total commits to the home-assistant organization, 2 commits to home-assistant, 1 commit to home-assistant.github.io") +- [Colin O'Dell (@colinodell)](https://github.com/colinodell "9 total commits to the home-assistant organization, 5 commits to home-assistant, 4 commits to home-assistant.github.io") +- [Cooper Dale (@Cooper-Dale)](https://github.com/Cooper-Dale "1 total commits to the home-assistant organization, 1 commit to home-assistant.github.io") +- [Corban Mailloux (@corbanmailloux)](https://github.com/corbanmailloux "13 total commits to the home-assistant organization, 12 commits to home-assistant.github.io, 1 commit to home-assistant") +- [Craig J. Ward (@wardcraigj)](https://github.com/wardcraigj "6 total commits to the home-assistant organization, 3 commits to home-assistant, 3 commits to home-assistant.github.io") - [dainok (@dainok)](https://github.com/dainok "1 total commits to the home-assistant organization, 1 commit to home-assistant") - [Dale Higgs (@dale3h)](https://github.com/dale3h "21 total commits to the home-assistant organization, 13 commits to home-assistant.github.io, 7 commits to home-assistant, 1 commit to hassbot") - [Dan (@danieljkemp)](https://github.com/danieljkemp "20 total commits to the home-assistant organization, 13 commits to home-assistant, 7 commits to home-assistant.github.io") @@ -165,24 +180,25 @@ This page contains a list of people who have contributed in one way or another t - [Dan Sullivan (@dansullivan86)](https://github.com/dansullivan86 "3 total commits to the home-assistant organization, 2 commits to home-assistant.github.io, 1 commit to home-assistant") - [Dani (@danichispa)](https://github.com/danichispa "9 total commits to the home-assistant organization, 9 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 "248 total commits to the home-assistant organization, 175 commits to home-assistant, 71 commits to home-assistant.github.io, 2 commits to home-assistant-polymer") +- [Daniel HĂžyer Iversen (@Danielhiversen)](https://github.com/Danielhiversen "277 total commits to the home-assistant organization, 188 commits to home-assistant, 87 commits to home-assistant.github.io, 2 commits to home-assistant-polymer") - [Daniel Matuschek (@usul27)](https://github.com/usul27 "2 total commits to the home-assistant organization, 1 commit to home-assistant, 1 commit to home-assistant.github.io") -- [Daniel Perna (@danielperna84)](https://github.com/danielperna84 "33 total commits to the home-assistant organization, 22 commits to home-assistant.github.io, 11 commits to home-assistant") +- [Daniel Perna (@danielperna84)](https://github.com/danielperna84 "41 total commits to the home-assistant organization, 28 commits to home-assistant.github.io, 13 commits to home-assistant") - [Daniel Peukert (@dpeukert)](https://github.com/dpeukert "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") +- [Daniel Wiberg (@dannew)](https://github.com/dannew "1 total commits to the home-assistant organization, 1 commit to home-assistant.github.io") - [Danijel Stojnic (@danijelst)](https://github.com/danijelst "1 total commits to the home-assistant organization, 1 commit to home-assistant") - [Daphne L (@daphotron)](https://github.com/daphotron "1 total commits to the home-assistant organization, 1 commit to home-assistant.github.io") - [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") - [Dave Banks (@djbanks)](https://github.com/djbanks "3 total commits to the home-assistant organization, 2 commits to appdaemon, 1 commit to home-assistant") - [DaveSergeant (@dethpickle)](https://github.com/dethpickle "3 total commits to the home-assistant organization, 2 commits to home-assistant, 1 commit to home-assistant.github.io") +- [David (@fanaticDavid)](https://github.com/fanaticDavid "6 total commits to the home-assistant organization, 6 commits to home-assistant.github.io") - [David (@dschoorisse)](https://github.com/dschoorisse "1 total commits to the home-assistant organization, 1 commit to home-assistant.github.io") -- [David (@fanaticDavid)](https://github.com/fanaticDavid "5 total commits to the home-assistant organization, 5 commits to home-assistant.github.io") - [David Baumann (@daBONDi)](https://github.com/daBONDi "2 total commits to the home-assistant organization, 1 commit to home-assistant, 1 commit to home-assistant.github.io") - [David De Sloovere (@DavidDeSloovere)](https://github.com/DavidDeSloovere "1 total commits to the home-assistant organization, 1 commit to home-assistant.github.io") -- [David McNett (@nugget)](https://github.com/nugget "2 total commits to the home-assistant organization, 1 commit to home-assistant, 1 commit to home-assistant.github.io") +- [David McNett (@nugget)](https://github.com/nugget "5 total commits to the home-assistant organization, 3 commits to home-assistant.github.io, 2 commits to home-assistant") - [David Straub (@DavidMStraub)](https://github.com/DavidMStraub "4 total commits to the home-assistant organization, 2 commits to home-assistant, 2 commits to home-assistant.github.io") - [David Tchepak (@dtchepak)](https://github.com/dtchepak "1 total commits to the home-assistant organization, 1 commit to home-assistant.github.io") - [David Thomas (@synth3tk)](https://github.com/synth3tk "1 total commits to the home-assistant organization, 1 commit to home-assistant.github.io") -- [David-Leon Pohl (@DavidLP)](https://github.com/DavidLP "12 total commits to the home-assistant organization, 10 commits to home-assistant, 2 commits to home-assistant.github.io") +- [David-Leon Pohl (@DavidLP)](https://github.com/DavidLP "14 total commits to the home-assistant organization, 12 commits to home-assistant, 2 commits to home-assistant.github.io") - [davidedmundson (@davidedmundson)](https://github.com/davidedmundson "7 total commits to the home-assistant organization, 4 commits to home-assistant, 3 commits to home-assistant.github.io") - [Dean Camera (@abcminiuser)](https://github.com/abcminiuser "4 total commits to the home-assistant organization, 2 commits to home-assistant, 2 commits to home-assistant.github.io") - [Dean Galvin (@FreekingDean)](https://github.com/FreekingDean "1 total commits to the home-assistant organization, 1 commit to home-assistant") @@ -191,14 +207,17 @@ This page contains a list of people who have contributed in one way or another t - [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") - [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") +- [diplix (@diplix)](https://github.com/diplix "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [Dmytro Kytsmen (@Kietzmann)](https://github.com/Kietzmann "1 total commits to the home-assistant organization, 1 commit to home-assistant.github.io") - [doudz (@doudz)](https://github.com/doudz "1 total commits to the home-assistant organization, 1 commit to home-assistant") - [dpressle (@dpressle)](https://github.com/dpressle "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") +- [dramamoose (@dramamoose)](https://github.com/dramamoose "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [Drew Wells (@drewwells)](https://github.com/drewwells "1 total commits to the home-assistant organization, 1 commit to home-assistant.github.io") - [DrewSK (@dzsquared)](https://github.com/dzsquared "4 total commits to the home-assistant organization, 4 commits to home-assistant.github.io") -- [Duoxilian (@Duoxilian)](https://github.com/Duoxilian "1 total commits to the home-assistant organization, 1 commit to home-assistant") +- [Duoxilian (@Duoxilian)](https://github.com/Duoxilian "9 total commits to the home-assistant organization, 5 commits to home-assistant.github.io, 4 commits to home-assistant") - [Dustin S (@texnofobix)](https://github.com/texnofobix "1 total commits to the home-assistant organization, 1 commit to home-assistant") - [Dylan Barlett (@dbarlett)](https://github.com/dbarlett "1 total commits to the home-assistant organization, 1 commit to home-assistant.github.io") +- [ecksun (@ecksun)](https://github.com/ecksun "1 total commits to the home-assistant organization, 1 commit to home-assistant") - [Edward Romano (@oudeismetis)](https://github.com/oudeismetis "1 total commits to the home-assistant organization, 1 commit to home-assistant") - [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") - [eieste (@eieste)](https://github.com/eieste "1 total commits to the home-assistant organization, 1 commit to home-assistant") @@ -211,14 +230,16 @@ This page contains a list of people who have contributed in one way or another t - [Eric Jansen (@ej81)](https://github.com/ej81 "1 total commits to the home-assistant organization, 1 commit to home-assistant") - [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 "55 total commits to the home-assistant organization, 51 commits to home-assistant, 2 commits to netdisco, 2 commits to home-assistant.github.io") +- [Erik Eriksson (@molobrakos)](https://github.com/molobrakos "59 total commits to the home-assistant organization, 55 commits to home-assistant, 2 commits to netdisco, 2 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") -- [Fabian Affolter (@fabaff)](https://github.com/fabaff "3157 total commits to the home-assistant organization, 1963 commits to home-assistant.github.io, 1060 commits to home-assistant, 49 commits to home-assistant-ansible, 20 commits to home-assistant-notebooks, 19 commits to home-assistant-cli, 18 commits to home-assistant-dev-helper, 10 commits to home-assistant-polymer, 9 commits to home-assistant-assets, 8 commits to netdisco, 1 commit to home-assistant-js-websocket") +- [Fabian Affolter (@fabaff)](https://github.com/fabaff "3300 total commits to the home-assistant organization, 2066 commits to home-assistant.github.io, 1085 commits to home-assistant, 57 commits to home-assistant-ansible, 23 commits to home-assistant-dev-helper, 21 commits to home-assistant-cli, 20 commits to home-assistant-notebooks, 10 commits to home-assistant-polymer, 9 commits to home-assistant-assets, 8 commits to netdisco, 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") +- [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") - [Farzad Noorian (@fnoorian)](https://github.com/fnoorian "1 total commits to the home-assistant organization, 1 commit to home-assistant.github.io") - [Felipe Cypriano (@fcy)](https://github.com/fcy "1 total commits to the home-assistant organization, 1 commit 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 Fischer (@felixfischer)](https://github.com/felixfischer "1 total commits to the home-assistant organization, 1 commit to home-assistant.github.io") - [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, 7 commits to home-assistant, 1 commit to home-assistant.github.io") - [Flavio Castelli (@flavio)](https://github.com/flavio "3 total commits to the home-assistant organization, 2 commits to home-assistant, 1 commit to home-assistant.github.io") @@ -228,7 +249,8 @@ This page contains a list of people who have contributed in one way or another t - [Frantz (@rofrantz)](https://github.com/rofrantz "3 total commits to the home-assistant organization, 2 commits to netdisco, 1 commit to home-assistant") - [Frederic Hemberger (@fhemberger)](https://github.com/fhemberger "93 total commits to the home-assistant organization, 93 commits to home-assistant.github.io") - [Fredrik Haglund (@PetitCircuitLab)](https://github.com/PetitCircuitLab "1 total commits to the home-assistant organization, 1 commit to home-assistant") -- [Fredrik Lindqvist (@Landrash)](https://github.com/Landrash "46 total commits to the home-assistant organization, 37 commits to home-assistant.github.io, 5 commits to pi-gen, 4 commits to home-assistant") +- [Fredrik Lindqvist (@Landrash)](https://github.com/Landrash "79 total commits to the home-assistant organization, 44 commits to home-assistant.github.io, 27 commits to hassbian-scripts, 4 commits to home-assistant, 3 commits to pi-gen, 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") - [GadgetReactor (@GadgetReactor)](https://github.com/GadgetReactor "2 total commits to the home-assistant organization, 2 commits to home-assistant") @@ -236,23 +258,24 @@ This page contains a list of people who have contributed in one way or another t - [garrettbeachy (@garrettbeachy)](https://github.com/garrettbeachy "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [Gaurav Kulkarni (@gauravkulkarni96)](https://github.com/gauravkulkarni96 "1 total commits to the home-assistant organization, 1 commit 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 "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") +- [George.M (@nodinosaur)](https://github.com/nodinosaur "3 total commits to the home-assistant organization, 2 commits to home-assistant.github.io, 1 commit to home-assistant") - [Georgi Kirichkov (@kirichkov)](https://github.com/kirichkov "7 total commits to the home-assistant organization, 4 commits to home-assistant, 3 commits to home-assistant.github.io") - [Georgii Staroselskii (@staroselskii)](https://github.com/staroselskii "1 total commits to the home-assistant organization, 1 commit to pi-gen") - [Gergely Imreh (@imrehg)](https://github.com/imrehg "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Gert (@Gerto)](https://github.com/Gerto "2 total commits to the home-assistant organization, 1 commit to home-assistant, 1 commit to home-assistant.github.io") -- [Gianluca Barbaro (@MrMep)](https://github.com/MrMep "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 "18 total commits to the home-assistant organization, 12 commits to home-assistant, 6 commits to home-assistant.github.io") - [Giannie (@Giannie)](https://github.com/Giannie "2 total commits to the home-assistant organization, 1 commit to home-assistant, 1 commit 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") - [Gilles Margerie (@Gilles95)](https://github.com/Gilles95 "1 total commits to the home-assistant organization, 1 commit to home-assistant") - [Glyn Hudson (@glynhudson)](https://github.com/glynhudson "1 total commits to the home-assistant organization, 1 commit to home-assistant.github.io") - [GMFalka (@GMFalka)](https://github.com/GMFalka "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") -- [godloth (@godloth)](https://github.com/godloth "7 total commits to the home-assistant organization, 7 commits to home-assistant.github.io") -- [Gopal Kildoliya (@gopalkildoliya)](https://github.com/gopalkildoliya "4 total commits to the home-assistant organization, 4 commits to home-assistant") +- [godloth (@godloth)](https://github.com/godloth "9 total commits to the home-assistant organization, 9 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 "1 total commits to the home-assistant organization, 1 commit to home-assistant.github.io") - [Graham Christensen (@grahamc)](https://github.com/grahamc "1 total commits to the home-assistant organization, 1 commit to home-assistant.github.io") - [Greg (@theCMack)](https://github.com/theCMack "1 total commits to the home-assistant organization, 1 commit to home-assistant.github.io") - [Greg Dowling (@pavoni)](https://github.com/pavoni "218 total commits to the home-assistant organization, 193 commits to home-assistant, 23 commits to home-assistant.github.io, 2 commits to netdisco") +- [Greg MacLellan (@gregmac)](https://github.com/gregmac "1 total commits to the home-assistant organization, 1 commit to pi-gen") - [Greg Stevenson (@gstevenson)](https://github.com/gstevenson "4 total commits to the home-assistant organization, 4 commits to home-assistant.github.io") - [Gregor Gruener (@ggruner)](https://github.com/ggruner "2 total commits to the home-assistant organization, 1 commit to home-assistant, 1 commit to home-assistant.github.io") - [gross1989 (@gross1989)](https://github.com/gross1989 "1 total commits to the home-assistant organization, 1 commit to home-assistant") @@ -262,7 +285,7 @@ This page contains a list of people who have contributed in one way or another t - [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") - [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 "60 total commits to the home-assistant organization, 49 commits to home-assistant, 10 commits to home-assistant.github.io, 1 commit to home-assistant-polymer") +- [happyleavesaoc (@happyleavesaoc)](https://github.com/happyleavesaoc "62 total commits to the home-assistant organization, 50 commits to home-assistant, 11 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 "3 total commits to the home-assistant organization, 2 commits to home-assistant, 1 commit to home-assistant.github.io") @@ -270,19 +293,19 @@ This page contains a list of people who have contributed in one way or another t - [HBDK (@HBDK)](https://github.com/HBDK "2 total commits to the home-assistant organization, 1 commit to home-assistant, 1 commit to home-assistant.github.io") - [hcooper (@hcooper)](https://github.com/hcooper "3 total commits to the home-assistant organization, 2 commits to home-assistant.github.io, 1 commit to home-assistant") - [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 "19 total commits to the home-assistant organization, 14 commits to home-assistant, 5 commits to home-assistant.github.io") +- [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 "3 total commits to the home-assistant organization, 3 commits to netdisco") - [Henning Dickten (@hensing)](https://github.com/hensing "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Henryk Plötz (@henryk)](https://github.com/henryk "1 total commits to the home-assistant organization, 1 commit to home-assistant") +- [Hermann Kraus (@herm)](https://github.com/herm "1 total commits to the home-assistant organization, 1 commit to home-assistant") - [HernĂĄn R (@hmronline)](https://github.com/hmronline "2 total commits to the home-assistant organization, 2 commits to home-assistant") -- [HerrHofrat (@HerrHofrat)](https://github.com/HerrHofrat "2 total commits to the home-assistant organization, 1 commit to home-assistant, 1 commit to home-assistant.github.io") - [hexa- (@mweinelt)](https://github.com/mweinelt "18 total commits to the home-assistant organization, 10 commits to home-assistant, 8 commits to home-assistant.github.io") - [hexxter (@hexxter)](https://github.com/hexxter "8 total commits to the home-assistant organization, 8 commits to home-assistant") - [heytcass (@heytcass)](https://github.com/heytcass "6 total commits to the home-assistant organization, 5 commits to home-assistant.github.io, 1 commit to home-assistant") - [Hillary Fraley (@hillaryfraley)](https://github.com/hillaryfraley "12 total commits to the home-assistant organization, 12 commits to home-assistant.github.io") - [hokagegano (@hokagegano)](https://github.com/hokagegano "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [Horea Christian (@TheChymera)](https://github.com/TheChymera "1 total commits to the home-assistant organization, 1 commit to home-assistant.github.io") -- [Hugo Dupras (@jabesq)](https://github.com/jabesq "21 total commits to the home-assistant organization, 15 commits to home-assistant, 6 commits to home-assistant.github.io") +- [Hugo Dupras (@jabesq)](https://github.com/jabesq "24 total commits to the home-assistant organization, 18 commits to home-assistant, 6 commits to home-assistant.github.io") - [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 "40 total commits to the home-assistant organization, 31 commits to home-assistant, 9 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") @@ -294,6 +317,7 @@ This page contains a list of people who have contributed in one way or another t - [irvingwa (@irvingwa)](https://github.com/irvingwa "1 total commits to the home-assistant organization, 1 commit to home-assistant") - [Issac Kelly (@issackelly)](https://github.com/issackelly "3 total commits to the home-assistant organization, 3 commits to home-assistant") - [Ivo Wever (@Confusion)](https://github.com/Confusion "1 total commits to the home-assistant organization, 1 commit to home-assistant.github.io") +- [J-CMartin (@J-CMartin)](https://github.com/J-CMartin "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [J. B. Rainsberger (@jbrains)](https://github.com/jbrains "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [jack (@jackmakesthings)](https://github.com/jackmakesthings "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [Jack Chapple (@jchapple)](https://github.com/jchapple "2 total commits to the home-assistant organization, 2 commits to home-assistant") @@ -302,10 +326,13 @@ This page contains a list of people who have contributed in one way or another t - [Jake McCrary (@jakemcc)](https://github.com/jakemcc "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [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") -- [Jan Harkes (@jaharkes)](https://github.com/jaharkes "110 total commits to the home-assistant organization, 99 commits to home-assistant, 10 commits to netdisco, 1 commit to home-assistant.github.io") -- [Jan Losinski (@janLo)](https://github.com/janLo "10 total commits to the home-assistant organization, 8 commits to home-assistant, 2 commits to home-assistant.github.io") -- [Jan Poboƙil (@iBobik)](https://github.com/iBobik "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") +- [JammyDodger231 (@JammyDodger231)](https://github.com/JammyDodger231 "4 total commits to the home-assistant organization, 4 commits to home-assistant.github.io") +- [Jan Harkes (@jaharkes)](https://github.com/jaharkes "111 total commits to the home-assistant organization, 100 commits to home-assistant, 10 commits to netdisco, 1 commit to home-assistant.github.io") +- [Jan Losinski (@janLo)](https://github.com/janLo "11 total commits to the home-assistant organization, 9 commits to home-assistant, 2 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 "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [Jan-Preben Mossin (@jpmossin)](https://github.com/jpmossin "1 total commits to the home-assistant organization, 1 commit to home-assistant") +- [Janne Grunau (@jannau)](https://github.com/jannau "1 total commits to the home-assistant organization, 1 commit to home-assistant") - [Janos Racz (@rczjns)](https://github.com/rczjns "1 total commits to the home-assistant organization, 1 commit 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 "2 total commits to the home-assistant organization, 1 commit to netdisco, 1 commit to home-assistant") @@ -318,14 +345,17 @@ This page contains a list of people who have contributed in one way or another t - [Jean Regisser (@jeanregisser)](https://github.com/jeanregisser "1 total commits to the home-assistant organization, 1 commit to home-assistant") - [Jean-Philippe Bouillot (@Jypy)](https://github.com/Jypy "3 total commits to the home-assistant organization, 2 commits to home-assistant, 1 commit to home-assistant.github.io") - [Jed Lippold (@jlippold)](https://github.com/jlippold "1 total commits to the home-assistant organization, 1 commit to home-assistant.github.io") -- [Jeff Schroeder (@SEJeff)](https://github.com/SEJeff "17 total commits to the home-assistant organization, 17 commits to home-assistant") -- [Jeff Wilson (@jawilson)](https://github.com/jawilson "10 total commits to the home-assistant organization, 8 commits to home-assistant, 2 commits to home-assistant.github.io") +- [Jeff Schroeder (@SEJeff)](https://github.com/SEJeff "18 total commits to the home-assistant organization, 17 commits to home-assistant, 1 commit to home-assistant.github.io") +- [Jeff Wilson (@jawilson)](https://github.com/jawilson "11 total commits to the home-assistant organization, 9 commits to home-assistant, 2 commits to home-assistant.github.io") - [Jeffrey Lin (@linjef)](https://github.com/linjef "3 total commits to the home-assistant organization, 2 commits to home-assistant, 1 commit 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") +- [jeremydk (@jeremydk)](https://github.com/jeremydk "1 total commits to the home-assistant organization, 1 commit to home-assistant") - [Jerod Santo (@jerodsanto)](https://github.com/jerodsanto "1 total commits to the home-assistant organization, 1 commit 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 "1 total commits to the home-assistant organization, 1 commit to home-assistant.github.io") - [Jesse Newland (@jnewland)](https://github.com/jnewland "13 total commits to the home-assistant organization, 9 commits to home-assistant, 3 commits to hubot-home-assistant, 1 commit to home-assistant.github.io") +- [Jesse Osiecki (@stratosmacker)](https://github.com/stratosmacker "1 total commits to the home-assistant organization, 1 commit to home-assistant") - [Jesse Zoldak (@jzoldak)](https://github.com/jzoldak "1 total commits to the home-assistant organization, 1 commit to home-assistant") - [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") @@ -335,35 +365,38 @@ This page contains a list of people who have contributed in one way or another t - [Job Vermeulen (@jmvermeulen)](https://github.com/jmvermeulen "2 total commits to the home-assistant organization, 1 commit to home-assistant, 1 commit 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 Rocklin (@joerocklin)](https://github.com/joerocklin "2 total commits to the home-assistant organization, 1 commit to home-assistant, 1 commit to home-assistant.github.io") -- [Joeboyc2 (@Joeboyc2)](https://github.com/Joeboyc2 "10 total commits to the home-assistant organization, 10 commits to home-assistant.github.io") +- [Joeboyc2 (@Joeboyc2)](https://github.com/Joeboyc2 "11 total commits to the home-assistant organization, 10 commits to home-assistant.github.io, 1 commit to home-assistant") - [Joel Asher Friedman (@joelash)](https://github.com/joelash "1 total commits to the home-assistant organization, 1 commit to home-assistant") - [Joel Clermont (@joelclermont)](https://github.com/joelclermont "1 total commits to the home-assistant organization, 1 commit 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 "10 total commits to the home-assistant organization, 9 commits to home-assistant, 1 commit to home-assistant.github.io") +- [Johan Bloemberg (@aequitas)](https://github.com/aequitas "21 total commits to the home-assistant organization, 18 commits to home-assistant, 2 commits to home-assistant.github.io, 1 commit to netdisco") - [Johan Carlquist (@theseal)](https://github.com/theseal "1 total commits to the home-assistant organization, 1 commit to home-assistant") - [Johan Klintberg (@moogblob)](https://github.com/moogblob "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [Johan Svensson (@jsvensson)](https://github.com/jsvensson "1 total commits to the home-assistant organization, 1 commit to home-assistant.github.io") -- [Johann Kellerman (@kellerza)](https://github.com/kellerza "112 total commits to the home-assistant organization, 84 commits to home-assistant, 28 commits to home-assistant.github.io") -- [John Arild Berentsen (@turbokongen)](https://github.com/turbokongen "144 total commits to the home-assistant organization, 115 commits to home-assistant, 24 commits to home-assistant.github.io, 5 commits to home-assistant-polymer") +- [Johann Kellerman (@kellerza)](https://github.com/kellerza "128 total commits to the home-assistant organization, 98 commits to home-assistant, 30 commits to home-assistant.github.io") +- [John Arild Berentsen (@turbokongen)](https://github.com/turbokongen "150 total commits to the home-assistant organization, 120 commits to home-assistant, 25 commits to home-assistant.github.io, 5 commits to home-assistant-polymer") - [John Lindley (@jwl17330536)](https://github.com/jwl17330536 "18 total commits to the home-assistant organization, 11 commits to hadashboard, 6 commits to home-assistant.github.io, 1 commit to home-assistant") - [John McLaughlin (@loghound)](https://github.com/loghound "2 total commits to the home-assistant organization, 2 commits to home-assistant") -- [John Mihalic (@mezz64)](https://github.com/mezz64 "15 total commits to the home-assistant organization, 9 commits to home-assistant, 5 commits to home-assistant.github.io, 1 commit to hadashboard") +- [John Mihalic (@mezz64)](https://github.com/mezz64 "17 total commits to the home-assistant organization, 11 commits to home-assistant, 5 commits to home-assistant.github.io, 1 commit to hadashboard") - [John W. Long (@jlong)](https://github.com/jlong "1 total commits to the home-assistant organization, 1 commit to home-assistant.github.io") - [John Williams (@Jaidan)](https://github.com/Jaidan "1 total commits to the home-assistant organization, 1 commit to home-assistant") +- [Jon (@JonMurphy)](https://github.com/JonMurphy "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [Jon Caruana (@joncar)](https://github.com/joncar "4 total commits to the home-assistant organization, 2 commits to home-assistant, 2 commits to home-assistant.github.io") - [Jon Evans (@craftyjon)](https://github.com/craftyjon "1 total commits to the home-assistant organization, 1 commit to home-assistant") - [Jon Maddox (@maddox)](https://github.com/maddox "101 total commits to the home-assistant organization, 78 commits to home-assistant, 15 commits to homebridge-homeassistant, 8 commits to home-assistant.github.io") - [Jonatan Castro (@jcastro)](https://github.com/jcastro "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") -- [Jonathan Baginski (@jbags81)](https://github.com/jbags81 "101 total commits to the home-assistant organization, 75 commits to fabric-home-assistant, 25 commits to home-assistant.github.io, 1 commit to home-assistant") +- [Jonathan Baginski (@jbags81)](https://github.com/jbags81 "110 total commits to the home-assistant organization, 82 commits to fabric-home-assistant, 27 commits to home-assistant.github.io, 1 commit to home-assistant") - [Jonathan Martens (@jmartens)](https://github.com/jmartens "1 total commits to the home-assistant organization, 1 commit to home-assistant.github.io") - [joopert (@joopert)](https://github.com/joopert "4 total commits to the home-assistant organization, 4 commits to home-assistant") - [Jordan Keith (@zeddD1abl0)](https://github.com/zeddD1abl0 "2 total commits to the home-assistant organization, 1 commit to home-assistant, 1 commit to home-assistant.github.io") +- [Jose Juan Montes (@jjmontesl)](https://github.com/jjmontesl "1 total commits to the home-assistant organization, 1 commit to home-assistant") - [Josep del Rio (@joseprio)](https://github.com/joseprio "1 total commits to the home-assistant organization, 1 commit to home-assistant.github.io") -- [Joseph Carter (@iKarith)](https://github.com/iKarith "6 total commits to the home-assistant organization, 6 commits to pi-gen") +- [Joseph Carter (@iKarith)](https://github.com/iKarith "8 total commits to the home-assistant organization, 8 commits to pi-gen") - [Joseph Hassell (@poster983)](https://github.com/poster983 "1 total commits to the home-assistant organization, 1 commit to home-assistant.github.io") -- [Joseph Piron (@eagleamon)](https://github.com/eagleamon "2 total commits to the home-assistant organization, 2 commits to home-assistant") +- [Joseph Piron (@eagleamon)](https://github.com/eagleamon "3 total commits to the home-assistant organization, 3 commits to home-assistant") +- [Josh Anderson (@andersonshatch)](https://github.com/andersonshatch "1 total commits to the home-assistant organization, 1 commit to homebridge-homeassistant") - [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 Wright (@JshWright)](https://github.com/JshWright "22 total commits to the home-assistant organization, 17 commits to home-assistant, 5 commits to home-assistant.github.io") +- [Josh Wright (@JshWright)](https://github.com/JshWright "24 total commits to the home-assistant organization, 18 commits to home-assistant, 6 commits to home-assistant.github.io") - [JSprengard (@JSprengard)](https://github.com/JSprengard "1 total commits to the home-assistant organization, 1 commit to home-assistant.github.io") - [JTimNolan (@JTimNolan)](https://github.com/JTimNolan "1 total commits to the home-assistant organization, 1 commit to home-assistant.github.io") - [jtscott (@jtscott)](https://github.com/jtscott "1 total commits to the home-assistant organization, 1 commit to home-assistant") @@ -371,10 +404,11 @@ This page contains a list of people who have contributed in one way or another t - [juggie (@juggie)](https://github.com/juggie "1 total commits to the home-assistant organization, 1 commit to home-assistant") - [Julien Danjou (@jd)](https://github.com/jd "1 total commits to the home-assistant organization, 1 commit to home-assistant") - [jumpkick (@jumpkick)](https://github.com/jumpkick "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") +- [Justin Dray (@justin8)](https://github.com/justin8 "4 total commits to the home-assistant organization, 4 commits to home-assistant.github.io") - [Justin Good (@justingood)](https://github.com/justingood "1 total commits to the home-assistant organization, 1 commit to home-assistant.github.io") - [Justin Hayes (@GussyH)](https://github.com/GussyH "7 total commits to the home-assistant organization, 7 commits to hadashboard") - [Justin Moy (@justincmoy)](https://github.com/justincmoy "2 total commits to the home-assistant organization, 1 commit to home-assistant, 1 commit to home-assistant.github.io") -- [Justin Weberg (@justweb1)](https://github.com/justweb1 "26 total commits to the home-assistant organization, 13 commits to home-assistant-polymer, 6 commits to hassbot, 4 commits to home-assistant, 2 commits to home-assistant.github.io, 1 commit to home-assistant-js") +- [Justin Weberg (@justweb1)](https://github.com/justweb1 "27 total commits to the home-assistant organization, 13 commits to home-assistant-polymer, 7 commits to hassbot, 4 commits to home-assistant, 2 commits to home-assistant.github.io, 1 commit to home-assistant-js") - [Justyn Shull (@justyns)](https://github.com/justyns "7 total commits to the home-assistant organization, 6 commits to home-assistant, 1 commit to home-assistant.github.io") - [Kai (@luxus)](https://github.com/luxus "3 total commits to the home-assistant organization, 2 commits to home-assistant.github.io, 1 commit to home-assistant") - [KAMAL AWASTHI (@KamalAwasthi)](https://github.com/KamalAwasthi "1 total commits to the home-assistant organization, 1 commit to home-assistant.github.io") @@ -390,17 +424,20 @@ This page contains a list of people who have contributed in one way or another t - [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 "7 total commits to the home-assistant organization, 6 commits to home-assistant.github.io, 1 commit to home-assistant") - [Kevin Panaro (@kevinpanaro)](https://github.com/kevinpanaro "2 total commits to the home-assistant organization, 2 commits to home-assistant") +- [Kevin Tawaststjerna (@ktawaststjerna)](https://github.com/ktawaststjerna "1 total commits to the home-assistant organization, 1 commit to home-assistant.github.io") - [Keyasha Brothern (@KMBrothern)](https://github.com/KMBrothern "4 total commits to the home-assistant organization, 4 commits to home-assistant.github.io") - [kireyeu (@kireyeu)](https://github.com/kireyeu "4 total commits to the home-assistant organization, 4 commits to home-assistant-notebooks") - [KiXaM ćˆ»ă‚€ (@kixam)](https://github.com/kixam "3 total commits to the home-assistant organization, 3 commits to home-assistant") - [Klaas Hoekema (@KlaasH)](https://github.com/KlaasH "2 total commits to the home-assistant organization, 1 commit to home-assistant, 1 commit to home-assistant.github.io") -- [KmanOz (@KmanOz)](https://github.com/KmanOz "1 total commits to the home-assistant organization, 1 commit to home-assistant.github.io") - [koen01 (@koen01)](https://github.com/koen01 "1 total commits to the home-assistant organization, 1 commit to home-assistant") - [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") - [Kumar Gaurav Pandey (@gaurav1911)](https://github.com/gaurav1911 "1 total commits to the home-assistant organization, 1 commit to home-assistant.github.io") - [Kyle Gordon (@kylegordon)](https://github.com/kylegordon "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") -- [Kyle Hendricks (@kylehendricks)](https://github.com/kylehendricks "5 total commits to the home-assistant organization, 4 commits to home-assistant, 1 commit to home-assistant.github.io") +- [Kyle Hendricks (@kylehendricks)](https://github.com/kylehendricks "6 total commits to the home-assistant organization, 5 commits to home-assistant, 1 commit to home-assistant.github.io") +- [lamiskin (@lamiskin)](https://github.com/lamiskin "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [Lars Alexander Blumberg (@larsblumberg)](https://github.com/larsblumberg "1 total commits to the home-assistant organization, 1 commit to home-assistant.github.io") +- [lee-js (@lee-js)](https://github.com/lee-js "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [Leon (@leonsim)](https://github.com/leonsim "1 total commits to the home-assistant organization, 1 commit to home-assistant.github.io") - [Leonardo Saraiva (@vyper)](https://github.com/vyper "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [Lewis Juggins (@lwis)](https://github.com/lwis "45 total commits to the home-assistant organization, 37 commits to home-assistant, 8 commits to home-assistant.github.io") @@ -409,10 +446,10 @@ This page contains a list of people who have contributed in one way or another t - [Lindsay Ward (@lindsaymarkward)](https://github.com/lindsaymarkward "12 total commits to the home-assistant organization, 12 commits to home-assistant.github.io") - [linuxlurak (@linuxlurak)](https://github.com/linuxlurak "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [LucaSoldi (@LucaSoldi)](https://github.com/LucaSoldi "7 total commits to the home-assistant organization, 6 commits to home-assistant, 1 commit to home-assistant.github.io") -- [Lukas (@lukas-hetzenecker)](https://github.com/lukas-hetzenecker "12 total commits to the home-assistant organization, 9 commits to home-assistant, 3 commits to home-assistant.github.io") +- [Lukas (@lukas-hetzenecker)](https://github.com/lukas-hetzenecker "15 total commits to the home-assistant organization, 10 commits to home-assistant, 5 commits to home-assistant.github.io") - [Luke Armstrong (@lukearmstrong)](https://github.com/lukearmstrong "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [Luke Karrys (@lukekarrys)](https://github.com/lukekarrys "1 total commits to the home-assistant organization, 1 commit to home-assistant.github.io") -- [Lupin Demid (@lupin-de-mid)](https://github.com/lupin-de-mid "3 total commits to the home-assistant organization, 2 commits to home-assistant, 1 commit to home-assistant.github.io") +- [Lupin Demid (@lupin-de-mid)](https://github.com/lupin-de-mid "4 total commits to the home-assistant organization, 2 commits to home-assistant, 2 commits to home-assistant.github.io") - [Madhan Sundaram (@madhan5000)](https://github.com/madhan5000 "1 total commits to the home-assistant organization, 1 commit to home-assistant.github.io") - [Magas (@magas0)](https://github.com/magas0 "1 total commits to the home-assistant organization, 1 commit to home-assistant") - [Maggi Trymbill (@trymbill)](https://github.com/trymbill "1 total commits to the home-assistant organization, 1 commit to home-assistant") @@ -430,31 +467,35 @@ This page contains a list of people who have contributed in one way or another t - [Marc Plano-Lesay (@Kernald)](https://github.com/Kernald "9 total commits to the home-assistant organization, 9 commits to home-assistant.github.io") - [Marcel (@MTRNord)](https://github.com/MTRNord "1 total commits to the home-assistant organization, 1 commit to home-assistant.github.io") - [Marcel030nl (@Marcel030nl)](https://github.com/Marcel030nl "6 total commits to the home-assistant organization, 5 commits to home-assistant.github.io, 1 commit to home-assistant") -- [Marcelo Moreira de Mello (@tchellomello)](https://github.com/tchellomello "71 total commits to the home-assistant organization, 38 commits to home-assistant.github.io, 33 commits to home-assistant") +- [Marcelo Moreira de Mello (@tchellomello)](https://github.com/tchellomello "78 total commits to the home-assistant organization, 39 commits to home-assistant.github.io, 39 commits to home-assistant") +- [Marcin Jaworski (@yawor)](https://github.com/yawor "10 total commits to the home-assistant organization, 10 commits to appdaemon") - [Marijn Giesen (@marijngiesen)](https://github.com/marijngiesen "7 total commits to the home-assistant organization, 5 commits to hadashboard, 2 commits to home-assistant.github.io") - [Mark (@scmmmh)](https://github.com/scmmmh "1 total commits to the home-assistant organization, 1 commit to home-assistant") - [Mark Huson (@mehuman)](https://github.com/mehuman "8 total commits to the home-assistant organization, 8 commits to home-assistant.github.io") - [Mark King (@vemek)](https://github.com/vemek "1 total commits to the home-assistant organization, 1 commit to home-assistant") - [Mark Nichols (@zanshin)](https://github.com/zanshin "1 total commits to the home-assistant organization, 1 commit to home-assistant.github.io") +- [Mark Oude Veldhuis (@markoudev)](https://github.com/markoudev "1 total commits to the home-assistant organization, 1 commit to home-assistant") +- [markcarline (@markcarline)](https://github.com/markcarline "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [markferry (@markferry)](https://github.com/markferry "1 total commits to the home-assistant organization, 1 commit to home-assistant") - [Markus Peter (@bimbar)](https://github.com/bimbar "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Markus Stenberg (@fingon)](https://github.com/fingon "6 total commits to the home-assistant organization, 6 commits to home-assistant") - [Markus Thiel (@mackelito)](https://github.com/mackelito "1 total commits to the home-assistant organization, 1 commit to home-assistant.github.io") - [Martin Bernstorff (@ryqiem)](https://github.com/ryqiem "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [Martin Elwin (@melwin)](https://github.com/melwin "1 total commits to the home-assistant organization, 1 commit to home-assistant.github.io") -- [Martin Hjelmare (@MartinHjelmare)](https://github.com/MartinHjelmare "94 total commits to the home-assistant organization, 75 commits to home-assistant, 19 commits to home-assistant.github.io") +- [Martin Hjelmare (@MartinHjelmare)](https://github.com/MartinHjelmare "104 total commits to the home-assistant organization, 80 commits to home-assistant, 24 commits to home-assistant.github.io") - [Martin J. Laubach (@mjl)](https://github.com/mjl "1 total commits to the home-assistant organization, 1 commit to home-assistant") -- [Martin Rowan (@shortbloke)](https://github.com/shortbloke "1 total commits to the home-assistant organization, 1 commit to home-assistant") +- [Martin Rowan (@shortbloke)](https://github.com/shortbloke "2 total commits to the home-assistant organization, 1 commit to home-assistant, 1 commit to home-assistant.github.io") - [Martin Vacula (@MatoKafkac)](https://github.com/MatoKafkac "3 total commits to the home-assistant organization, 2 commits to home-assistant, 1 commit to home-assistant.github.io") - [martst (@martst)](https://github.com/martst "1 total commits to the home-assistant organization, 1 commit to home-assistant") - [Masahiro Kamata (@kamatari)](https://github.com/kamatari "1 total commits to the home-assistant organization, 1 commit to home-assistant.github.io") - [Mason Stewart (@masondesu)](https://github.com/masondesu "1 total commits to the home-assistant organization, 1 commit to home-assistant.github.io") -- [Mathew Peterson (@mathewpeterson)](https://github.com/mathewpeterson "1 total commits to the home-assistant organization, 1 commit to home-assistant.github.io") +- [Mathew Peterson (@mathewpeterson)](https://github.com/mathewpeterson "2 total commits to the home-assistant organization, 1 commit to home-assistant, 1 commit to home-assistant.github.io") - [Mathieu Maret (@mmaret-geny)](https://github.com/mmaret-geny "1 total commits to the home-assistant organization, 1 commit to home-assistant.github.io") - [Mathieu Maret (@mmaret)](https://github.com/mmaret "1 total commits to the home-assistant organization, 1 commit to home-assistant.github.io") +- [Matt Cahill (@matt-cahill)](https://github.com/matt-cahill "1 total commits to the home-assistant organization, 1 commit to home-assistant.github.io") - [Matt Enright (@wickedshimmy)](https://github.com/wickedshimmy "1 total commits to the home-assistant organization, 1 commit to home-assistant.github.io") - [Matt Hall (@Neko22)](https://github.com/Neko22 "1 total commits to the home-assistant organization, 1 commit to home-assistant.github.io") -- [Matt N. (@mnoorenberghe)](https://github.com/mnoorenberghe "10 total commits to the home-assistant organization, 7 commits to home-assistant.github.io, 3 commits to home-assistant") +- [Matt N. (@mnoorenberghe)](https://github.com/mnoorenberghe "16 total commits to the home-assistant organization, 11 commits to home-assistant.github.io, 4 commits to home-assistant, 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") - [Matteo Lampugnani (@t30)](https://github.com/t30 "8 total commits to the home-assistant organization, 7 commits to home-assistant.github.io, 1 commit to home-assistant") - [Matthew Bowen (@mgbowen)](https://github.com/mgbowen "4 total commits to the home-assistant organization, 3 commits to home-assistant.github.io, 1 commit to home-assistant") @@ -464,6 +505,7 @@ This page contains a list of people who have contributed in one way or another t - [Matthias Urlichs (@smurfix)](https://github.com/smurfix "1 total commits to the home-assistant organization, 1 commit to home-assistant.github.io") - [Max Rumpf (@Maxr1998)](https://github.com/Maxr1998 "4 total commits to the home-assistant organization, 4 commits to home-assistant.github.io") - [Mel Riffe (@melriffe)](https://github.com/melriffe "1 total commits to the home-assistant organization, 1 commit to home-assistant.github.io") +- [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, 2 commits to home-assistant, 1 commit to home-assistant.github.io") - [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 "12 total commits to the home-assistant organization, 12 commits to home-assistant") @@ -471,95 +513,85 @@ This page contains a list of people who have contributed in one way or another t - [Michael G. Schwern (@schwern)](https://github.com/schwern "1 total commits to the home-assistant organization, 1 commit to home-assistant.github.io") - [Michael Gilbert (@Zyell)](https://github.com/Zyell "8 total commits to the home-assistant organization, 8 commits to home-assistant") - [Michael KutĂœ (@michaelkuty)](https://github.com/michaelkuty "1 total commits to the home-assistant organization, 1 commit to home-assistant") -- [Michael Liu (@icefalcn)](https://github.com/icefalcn "1 total commits to the home-assistant organization, 1 commit to home-assistant.github.io") +- [Michael Luggen (@l00mi)](https://github.com/l00mi "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [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") -- [MichaelSprague (@MichaelSprague)](https://github.com/MichaelSprague "1 total commits to the home-assistant organization, 1 commit to home-assistant.github.io") -- [MichaĂ«l Arnauts (@michaelarnauts)](https://github.com/michaelarnauts "39 total commits to the home-assistant organization, 21 commits to home-assistant, 15 commits to home-assistant.github.io, 3 commits to home-assistant-polymer") +- [MichaĂ«l Arnauts (@michaelarnauts)](https://github.com/michaelarnauts "46 total commits to the home-assistant organization, 23 commits to home-assistant, 20 commits to home-assistant.github.io, 3 commits to home-assistant-polymer") - [Michel Settembrino (@MS-Informatique)](https://github.com/MS-Informatique "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [Mikayla Hutchinson (@mhutch)](https://github.com/mhutch "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") -- [Mike Ballou (@ballou88)](https://github.com/ballou88 "1 total commits to the home-assistant organization, 1 commit to home-assistant.github.io") - [Mike Hennessy (@henworth)](https://github.com/henworth "1 total commits to the home-assistant organization, 1 commit to home-assistant") -- [Mike Nicholson (@themikenicholson)](https://github.com/themikenicholson "1 total commits to the home-assistant organization, 1 commit to home-assistant.github.io") - [mikebarris (@mikebarris)](https://github.com/mikebarris "1 total commits to the home-assistant organization, 1 commit to home-assistant") - [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") - [Milas Bowman (@milas)](https://github.com/milas "1 total commits to the home-assistant organization, 1 commit to home-assistant") - [MinchinWeb (@MinchinWeb)](https://github.com/MinchinWeb "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") -- [miniconfig (@miniconfig)](https://github.com/miniconfig "19 total commits to the home-assistant organization, 16 commits to home-assistant, 3 commits to home-assistant.github.io") +- [miniconfig (@miniconfig)](https://github.com/miniconfig "25 total commits to the home-assistant organization, 19 commits to home-assistant, 6 commits to home-assistant.github.io") - [mnestor (@mnestor)](https://github.com/mnestor "6 total commits to the home-assistant organization, 5 commits to home-assistant, 1 commit to home-assistant-polymer") -- [Mokilok (@Mokilok)](https://github.com/Mokilok "1 total commits to the home-assistant organization, 1 commit to home-assistant.github.io") -- [Molodax (@Molodax)](https://github.com/Molodax "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") +- [Molodax (@Molodax)](https://github.com/Molodax "5 total commits to the home-assistant organization, 5 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") - [moskovskiy82 (@moskovskiy82)](https://github.com/moskovskiy82 "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [mtl010957 (@mtl010957)](https://github.com/mtl010957 "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [myoung34 (@myoung34)](https://github.com/myoung34 "1 total commits to the home-assistant organization, 1 commit to home-assistant.github.io") -- [Naren Salem (@naren8642)](https://github.com/naren8642 "1 total commits to the home-assistant organization, 1 commit to home-assistant.github.io") -- [Nathan Broadbent (@ndbroadbent)](https://github.com/ndbroadbent "1 total commits to the home-assistant organization, 1 commit to home-assistant.github.io") -- [Nathan Freitas (@n8fr8)](https://github.com/n8fr8 "1 total commits to the home-assistant organization, 1 commit to home-assistant.github.io") -- [Nathan Henrie (@n8henrie)](https://github.com/n8henrie "14 total commits to the home-assistant organization, 7 commits to home-assistant.github.io, 5 commits to home-assistant, 2 commits to homebridge-homeassistant") -- [Nathan Long (@nathanl)](https://github.com/nathanl "1 total commits to the home-assistant organization, 1 commit to home-assistant.github.io") +- [Nathan Henrie (@n8henrie)](https://github.com/n8henrie "13 total commits to the home-assistant organization, 6 commits to home-assistant.github.io, 5 commits to home-assistant, 2 commits to homebridge-homeassistant") - [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") -- [NeLLyMerC (@NeLLyMerC)](https://github.com/NeLLyMerC "1 total commits to the home-assistant organization, 1 commit 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") +- [neonbunny (@neonbunny)](https://github.com/neonbunny "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [Ness (@Xx-Ness-xX)](https://github.com/Xx-Ness-xX "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [Nicholas Sideras (@nsideras)](https://github.com/nsideras "1 total commits to the home-assistant organization, 1 commit to home-assistant") -- [Nick Hammond (@nickhammond)](https://github.com/nickhammond "1 total commits to the home-assistant organization, 1 commit to home-assistant.github.io") -- [Nick Sabinske (@quadportnick)](https://github.com/quadportnick "2 total commits to the home-assistant organization, 1 commit to home-assistant, 1 commit to home-assistant.github.io") -- [Nick Touran (@partofthething)](https://github.com/partofthething "35 total commits to the home-assistant organization, 24 commits to home-assistant, 11 commits to home-assistant.github.io") -- [Nick Vella (@nvella)](https://github.com/nvella "6 total commits to the home-assistant organization, 4 commits to home-assistant, 1 commit to homebridge-homeassistant, 1 commit to home-assistant.github.io") -- [Nick Waring (@nickwaring)](https://github.com/nickwaring "5 total commits to the home-assistant organization, 3 commits to home-assistant.github.io, 2 commits to home-assistant") +- [Nick Sabinske (@quadportnick)](https://github.com/quadportnick "1 total commits to the home-assistant organization, 1 commit to home-assistant") +- [Nick Touran (@partofthething)](https://github.com/partofthething "37 total commits to the home-assistant organization, 25 commits to home-assistant, 12 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") - [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") - [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 "1 total commits to the home-assistant organization, 1 commit to homebridge-homeassistant") +- [nodomain (@nodomain)](https://github.com/nodomain "6 total commits to the home-assistant organization, 4 commits to home-assistant.github.io, 2 commits to homebridge-homeassistant") - [Nolan Gilley (@nkgilley)](https://github.com/nkgilley "103 total commits to the home-assistant organization, 81 commits to home-assistant, 22 commits to home-assistant.github.io") -- [nordlead2005 (@nordlead2005)](https://github.com/nordlead2005 "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") +- [nordlead2005 (@nordlead2005)](https://github.com/nordlead2005 "3 total commits to the home-assistant organization, 2 commits to home-assistant.github.io, 1 commit to home-assistant") - [Nuno Sousa (@nunofgs)](https://github.com/nunofgs "3 total commits to the home-assistant organization, 2 commits to home-assistant, 1 commit to homebridge-homeassistant") -- [OGINO Masanori (@omasanori)](https://github.com/omasanori "1 total commits to the home-assistant organization, 1 commit to home-assistant.github.io") +- [nunojusto (@nunojusto)](https://github.com/nunojusto "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") -- [Olimpiu Rob (@olimpiurob)](https://github.com/olimpiurob "2 total commits to the home-assistant organization, 1 commit to home-assistant, 1 commit 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 "3 total commits to the home-assistant organization, 2 commits to home-assistant.github.io, 1 commit to home-assistant") +- [Olimpiu Rob (@olimpiurob)](https://github.com/olimpiurob "1 total commits to the home-assistant organization, 1 commit 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 "7 total commits to the home-assistant organization, 3 commits to home-assistant, 3 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") - [Open Home Automation (@open-homeautomation)](https://github.com/open-homeautomation "20 total commits to the home-assistant organization, 16 commits to home-assistant, 4 commits to home-assistant.github.io") -- [OpenDave15 (@OpenDave15)](https://github.com/OpenDave15 "2 total commits to the home-assistant organization, 1 commit to home-assistant, 1 commit to home-assistant.github.io") -- [Otto Winter (@OttoWinter)](https://github.com/OttoWinter "2 total commits to the home-assistant organization, 1 commit to home-assistant, 1 commit to home-assistant.github.io") +- [OpenDave15 (@OpenDave15)](https://github.com/OpenDave15 "1 total commits to the home-assistant organization, 1 commit to home-assistant") +- [Otto Winter (@OttoWinter)](https://github.com/OttoWinter "1 total commits to the home-assistant organization, 1 commit to home-assistant") - [Parker Moore (@parkr)](https://github.com/parkr "62 total commits to the home-assistant organization, 62 commits to home-assistant.github.io") - [Pascal Bach (@bachp)](https://github.com/bachp "7 total commits to the home-assistant organization, 7 commits to home-assistant") -- [Pascal Vizeli (@pvizeli)](https://github.com/pvizeli "282 total commits to the home-assistant organization, 223 commits to home-assistant, 59 commits to home-assistant.github.io") +- [Pascal Vizeli (@pvizeli)](https://github.com/pvizeli "346 total commits to the home-assistant organization, 262 commits to home-assistant, 84 commits to home-assistant.github.io") - [patkap (@patkap)](https://github.com/patkap "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Patrick Aikens (@duckpuppy)](https://github.com/duckpuppy "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") -- [Patrick Hobusch (@pathob)](https://github.com/pathob "1 total commits to the home-assistant organization, 1 commit 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") -- [Paul (@PollieKrismis)](https://github.com/PollieKrismis "1 total commits to the home-assistant organization, 1 commit to home-assistant.github.io") - [Paul Philippov (@themactep)](https://github.com/themactep "1 total commits to the home-assistant organization, 1 commit to home-assistant") - [Pavel Ponomarev (@awsum)](https://github.com/awsum "2 total commits to the home-assistant organization, 2 commits to home-assistant-polymer") -- [Pavel Pravosud (@rwz)](https://github.com/rwz "1 total commits to the home-assistant organization, 1 commit to home-assistant.github.io") -- [Pedro Navarro (@pedronavf)](https://github.com/pedronavf "1 total commits to the home-assistant organization, 1 commit to home-assistant.github.io") +- [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 Sandström (@persandstrom)](https://github.com/persandstrom "117 total commits to the home-assistant organization, 94 commits to home-assistant, 12 commits to home-assistant-polymer, 11 commits to home-assistant.github.io") -- [Petar Petrov (@MindFreeze)](https://github.com/MindFreeze "1 total commits to the home-assistant organization, 1 commit to home-assistant.github.io") - [Pete Peterson (@petey)](https://github.com/petey "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") -- [Petr VranĂ­k (@konikvranik)](https://github.com/konikvranik "8 total commits to the home-assistant organization, 5 commits to home-assistant.github.io, 3 commits to home-assistant") +- [Petr VranĂ­k (@konikvranik)](https://github.com/konikvranik "10 total commits to the home-assistant organization, 5 commits to home-assistant.github.io, 5 commits to home-assistant") - [phardy (@phardy)](https://github.com/phardy "1 total commits to the home-assistant organization, 1 commit 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 Hansen (@Hansen8601)](https://github.com/Hansen8601 "1 total commits to the home-assistant organization, 1 commit to home-assistant") -- [Phil Hawthorne (@philhawthorne)](https://github.com/philhawthorne "9 total commits to the home-assistant organization, 8 commits to home-assistant.github.io, 1 commit to home-assistant") -- [Phil Kates (@philk)](https://github.com/philk "2 total commits to the home-assistant organization, 1 commit to home-assistant, 1 commit to home-assistant.github.io") +- [Phil Hawthorne (@philhawthorne)](https://github.com/philhawthorne "8 total commits to the home-assistant organization, 7 commits to home-assistant.github.io, 1 commit to home-assistant") +- [Phil Kates (@philk)](https://github.com/philk "1 total commits to the home-assistant organization, 1 commit to home-assistant") - [Phileep (@Phileep)](https://github.com/Phileep "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [Philip Hofstetter (@pilif)](https://github.com/pilif "6 total commits to the home-assistant organization, 6 commits to home-assistant.github.io") - [Philip 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") -- [Pierre StĂ„hl (@postlund)](https://github.com/postlund "4 total commits to the home-assistant organization, 3 commits to home-assistant, 1 commit to home-assistant.github.io") +- [Philipp Schmitt (@pschmitt)](https://github.com/pschmitt "9 total commits to the home-assistant organization, 5 commits to home-assistant, 4 commits to home-assistant.github.io") +- [Pierre StĂ„hl (@postlund)](https://github.com/postlund "12 total commits to the home-assistant organization, 7 commits to home-assistant, 3 commits to netdisco, 2 commits to home-assistant.github.io") - [pinksocks (@pinksocks)](https://github.com/pinksocks "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [Piratonym (@Piratonym)](https://github.com/Piratonym "2 total commits to the home-assistant organization, 2 commits to home-assistant") -- [Pratyush Mohapatra (@Ativerc)](https://github.com/Ativerc "1 total commits to the home-assistant organization, 1 commit to home-assistant.github.io") - [PuckStar (@PuckStar)](https://github.com/PuckStar "6 total commits to the home-assistant organization, 6 commits to home-assistant.github.io") -- [Qwertee (@Qwertee)](https://github.com/Qwertee "1 total commits to the home-assistant organization, 1 commit to home-assistant.github.io") - [r-jordan (@r-jordan)](https://github.com/r-jordan "1 total commits to the home-assistant organization, 1 commit to home-assistant") - [R1chardTM (@R1chardTM)](https://github.com/R1chardTM "9 total commits to the home-assistant organization, 5 commits to home-assistant, 4 commits to home-assistant.github.io") -- [Randall Mason (@ClashTheBunny)](https://github.com/ClashTheBunny "1 total commits to the home-assistant organization, 1 commit to home-assistant.github.io") -- [Rashmi Yadav (@raysrashmi)](https://github.com/raysrashmi "1 total commits to the home-assistant organization, 1 commit to home-assistant.github.io") -- [RenĂ© (@rretsiem)](https://github.com/rretsiem "1 total commits to the home-assistant organization, 1 commit to home-assistant.github.io") +- [ray0711 (@ray0711)](https://github.com/ray0711 "1 total commits to the home-assistant organization, 1 commit to home-assistant") +- [rbflurry (@rbflurry)](https://github.com/rbflurry "5 total commits to the home-assistant organization, 5 commits to home-assistant.github.io") +- [RBHR (@rbhr)](https://github.com/rbhr "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [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") - [rhooper (@rhooper)](https://github.com/rhooper "28 total commits to the home-assistant organization, 25 commits to home-assistant, 3 commits to home-assistant.github.io") @@ -567,48 +599,43 @@ This page contains a list of people who have contributed in one way or another t - [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 "12 total commits to the home-assistant organization, 8 commits to home-assistant, 4 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 Huish (@Genestealer)](https://github.com/Genestealer "1 total commits to the home-assistant organization, 1 commit to home-assistant.github.io") - [rkabadi (@rkabadi)](https://github.com/rkabadi "17 total commits to the home-assistant organization, 17 commits to home-assistant") -- [rmevans9 (@rmevans9)](https://github.com/rmevans9 "1 total commits to the home-assistant organization, 1 commit to home-assistant.github.io") - [Rob Capellini (@capellini)](https://github.com/capellini "3 total commits to the home-assistant organization, 3 commits to home-assistant") -- [Rob Cranfill (@RobCranfill)](https://github.com/RobCranfill "1 total commits to the home-assistant organization, 1 commit to home-assistant.github.io") -- [Rob Johnson (@robjohnson189)](https://github.com/robjohnson189 "2 total commits to the home-assistant organization, 1 commit to home-assistant, 1 commit to home-assistant.github.io") +- [Rob Johnson (@robjohnson189)](https://github.com/robjohnson189 "1 total commits to the home-assistant organization, 1 commit 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 "848 total commits to the home-assistant organization, 400 commits to home-assistant-iOS, 187 commits to home-assistant, 185 commits to home-assistant.github.io, 50 commits to homebridge-homeassistant, 12 commits to home-assistant-polymer, 6 commits to hubot-home-assistant, 6 commits to Analytics-Receiver, 1 commit to netdisco, 1 commit to organization") -- [Robby Grossman (@freerobby)](https://github.com/freerobby "3 total commits to the home-assistant organization, 2 commits to home-assistant, 1 commit to home-assistant.github.io") -- [Robert Kowalski (@robertkowalski)](https://github.com/robertkowalski "1 total commits to the home-assistant organization, 1 commit to home-assistant.github.io") -- [Robin LaurĂ©n (@llauren)](https://github.com/llauren "2 total commits to the home-assistant organization, 1 commit to appdaemon, 1 commit to home-assistant.github.io") -- [Roddie Hasan (@eiddor)](https://github.com/eiddor "4 total commits to the home-assistant organization, 4 commits to home-assistant.github.io") -- [Roi Dayan (@roidayan)](https://github.com/roidayan "7 total commits to the home-assistant organization, 6 commits to home-assistant, 1 commit to home-assistant.github.io") -- [Ron Klinkien (@cyberjunky)](https://github.com/cyberjunky "2 total commits to the home-assistant organization, 1 commit to home-assistant, 1 commit to home-assistant.github.io") +- [Robbie Trencheny (@robbiet480)](https://github.com/robbiet480 "971 total commits to the home-assistant organization, 410 commits to home-assistant-iOS, 216 commits to home-assistant.github.io, 210 commits to home-assistant, 59 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 organization, 3 commits to home-assistant-cli, 3 commits to scenegen, 3 commits to home-assistant-js-websocket, 3 commits to appdaemon, 3 commits to home-assistant-js, 2 commits to home-assistant-notebooks, 2 commits to lambda-home-assistant-github, 2 commits to home-assistant-ansible, 2 commits to micropython-home-assistant, 2 commits to home-assistant-assets, 2 commits to home-assistant-dev-helper, 2 commits to fabric-home-assistant") +- [Robby Grossman (@freerobby)](https://github.com/freerobby "2 total commits to the home-assistant organization, 2 commits to home-assistant") +- [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") +- [Roman (@HerrHofrat)](https://github.com/HerrHofrat "2 total commits to the home-assistant organization, 1 commit to home-assistant, 1 commit to home-assistant.github.io") +- [Ron Klinkien (@cyberjunky)](https://github.com/cyberjunky "1 total commits to the home-assistant organization, 1 commit 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") - [roqeer (@roqeer)](https://github.com/roqeer "3 total commits to the home-assistant organization, 3 commits to home-assistant") - [Rowan (@GreenTurtwig)](https://github.com/GreenTurtwig "69 total commits to the home-assistant organization, 63 commits to home-assistant.github.io, 6 commits to home-assistant") - [rpr69 (@rpr69)](https://github.com/rpr69 "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [RubenKelevra (@RubenKelevra)](https://github.com/RubenKelevra "1 total commits to the home-assistant organization, 1 commit to home-assistant.github.io") - [rubund (@rubund)](https://github.com/rubund "6 total commits to the home-assistant organization, 4 commits to home-assistant, 2 commits to home-assistant.github.io") -- [Russ Nelson (@RussNelson)](https://github.com/RussNelson "1 total commits to the home-assistant organization, 1 commit to home-assistant.github.io") - [Russell Cloran (@rcloran)](https://github.com/rcloran "6 total commits to the home-assistant organization, 4 commits to homebridge-homeassistant, 2 commits to home-assistant") - [Ryan Borstelmann (@ryanborstelmann)](https://github.com/ryanborstelmann "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 Gibbons (@rtgibbons)](https://github.com/rtgibbons "1 total commits to the home-assistant organization, 1 commit to home-assistant.github.io") -- [Ryan Kraus (@rmkraus)](https://github.com/rmkraus "191 total commits to the home-assistant organization, 160 commits to home-assistant, 16 commits to home-assistant.github.io, 14 commits to home-assistant-polymer, 1 commit to home-assistant-notebooks") -- [Ryan Spicer (@alterscape)](https://github.com/alterscape "1 total commits to the home-assistant organization, 1 commit to home-assistant.github.io") +- [Ryan Kraus (@rmkraus)](https://github.com/rmkraus "193 total commits to the home-assistant organization, 161 commits to home-assistant, 17 commits to home-assistant.github.io, 14 commits to home-assistant-polymer, 1 commit to home-assistant-notebooks") +- [Ryan Parrish (@stickystyle)](https://github.com/stickystyle "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [Ryan Turner (@ryanturner)](https://github.com/ryanturner "6 total commits to the home-assistant organization, 6 commits to home-assistant") - [s1gnalrunner (@s1gnalrunner)](https://github.com/s1gnalrunner "1 total commits to the home-assistant organization, 1 commit to home-assistant") +- [Sam Holmes (@sam3d)](https://github.com/sam3d "3 total commits to the home-assistant organization, 3 commits to pi-gen") - [Sam Riley (@samriley)](https://github.com/samriley "1 total commits to the home-assistant organization, 1 commit to home-assistant") - [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 "5 total commits to the home-assistant organization, 3 commits to home-assistant, 2 commits to home-assistant.github.io") - [Samuel BĂ©trisey (@betrisey)](https://github.com/betrisey "3 total commits to the home-assistant organization, 2 commits to home-assistant.github.io, 1 commit to home-assistant") -- [Samuel Mertenat (@mertenats)](https://github.com/mertenats "4 total commits to the home-assistant organization, 4 commits to home-assistant.github.io") - [Sander de Leeuw (@sdeleeuw)](https://github.com/sdeleeuw "1 total commits to the home-assistant organization, 1 commit to home-assistant") - [sander76 (@sander76)](https://github.com/sander76 "35 total commits to the home-assistant organization, 32 commits to home-assistant, 3 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 Bartuska (@bing281)](https://github.com/bing281 "1 total commits to the home-assistant organization, 1 commit to home-assistant") - [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 "2 total commits to the home-assistant organization, 1 commit to home-assistant-polymer, 1 commit to home-assistant") -- [Sean Dague (@sdague)](https://github.com/sdague "46 total commits to the home-assistant organization, 33 commits to home-assistant, 7 commits to home-assistant.github.io, 3 commits to netdisco, 2 commits to home-assistant-polymer, 1 commit to home-assistant-js") +- [Sean Dague (@sdague)](https://github.com/sdague "47 total commits to the home-assistant organization, 34 commits to home-assistant, 7 commits to home-assistant.github.io, 3 commits to netdisco, 2 commits to home-assistant-polymer, 1 commit to home-assistant-js") - [Sebastian Hartnick (@goir)](https://github.com/goir "1 total commits to the home-assistant organization, 1 commit to home-assistant") - [Sebastian von Minckwitz (@teodoc)](https://github.com/teodoc "2 total commits to the home-assistant organization, 1 commit to home-assistant-polymer, 1 commit to home-assistant") - [sfam (@sfam)](https://github.com/sfam "65 total commits to the home-assistant organization, 58 commits to home-assistant, 5 commits to home-assistant.github.io, 1 commit to netdisco, 1 commit to home-assistant-polymer") @@ -617,29 +644,34 @@ This page contains a list of people who have contributed in one way or another t - [Simon Elsbrock (@else)](https://github.com/else "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [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 "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") -- [smolz (@smolz)](https://github.com/smolz "8 total commits to the home-assistant organization, 6 commits to home-assistant.github.io, 2 commits to appdaemon") +- [smolz (@smolz)](https://github.com/smolz "10 total commits to the home-assistant organization, 6 commits to home-assistant.github.io, 4 commits to appdaemon") +- [snagytx (@snagytx)](https://github.com/snagytx "1 total commits to the home-assistant organization, 1 commit to home-assistant") - [snizzleorg (@snizzleorg)](https://github.com/snizzleorg "5 total commits to the home-assistant organization, 5 commits to hadashboard") - [srirams (@srirams)](https://github.com/srirams "1 total commits to the home-assistant organization, 1 commit to home-assistant") - [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") +- [Stefano Scipioni (@scipioni)](https://github.com/scipioni "1 total commits to the home-assistant organization, 1 commit 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 Spalding (@fotoetienne)](https://github.com/fotoetienne "1 total commits to the home-assistant organization, 1 commit to home-assistant") - [Steven Barnes (@salt-lick)](https://github.com/salt-lick "1 total commits to the home-assistant organization, 1 commit to home-assistant") - [Steven Webb (@cy1701)](https://github.com/cy1701 "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") -- [Stu Gott (@stu-gott)](https://github.com/stu-gott "1 total commits to the home-assistant organization, 1 commit to home-assistant") +- [Stu Gott (@stu-gott)](https://github.com/stu-gott "4 total commits to the home-assistant organization, 2 commits to home-assistant, 2 commits to home-assistant.github.io") +- [StĂ©phane Bidoul (ACSONE) (@sbidoul)](https://github.com/sbidoul "3 total commits to the home-assistant organization, 2 commits to home-assistant.github.io, 1 commit to home-assistant") - [sustah (@sustah)](https://github.com/sustah "1 total commits to the home-assistant organization, 1 commit to home-assistant") +- [System Tester (@systemtester)](https://github.com/systemtester "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [Sytone (@sytone)](https://github.com/sytone "9 total commits to the home-assistant organization, 6 commits to home-assistant.github.io, 2 commits to home-assistant-cli, 1 commit to home-assistant") - [Sören Oldag (@soldag)](https://github.com/soldag "5 total commits to the home-assistant organization, 3 commits to home-assistant.github.io, 2 commits to home-assistant") -- [Teagan Glenn (@Teagan42)](https://github.com/Teagan42 "48 total commits to the home-assistant organization, 44 commits to home-assistant, 3 commits to home-assistant.github.io, 1 commit to home-assistant-js") +- [Teagan Glenn (@Teagan42)](https://github.com/Teagan42 "49 total commits to the home-assistant organization, 45 commits to home-assistant, 3 commits to home-assistant.github.io, 1 commit to home-assistant-js") - [techtrails (@techtrails)](https://github.com/techtrails "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [Teemu Mikkonen (@T3m3z)](https://github.com/T3m3z "5 total commits to the home-assistant organization, 3 commits to home-assistant, 2 commits to home-assistant.github.io") - [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 "5 total commits to the home-assistant organization, 4 commits to home-assistant, 1 commit to netdisco") +- [Teemu R. (@rytilahti)](https://github.com/rytilahti "18 total commits to the home-assistant organization, 11 commits to home-assistant, 6 commits to home-assistant.github.io, 1 commit to netdisco") - [Teguh Sobirin (@tjstyle)](https://github.com/tjstyle "2 total commits to the home-assistant organization, 2 commits to pi-gen") - [Terry Carlin (@terrycarlin)](https://github.com/terrycarlin "3 total commits to the home-assistant organization, 2 commits to home-assistant.github.io, 1 commit to home-assistant") - [The Gitter Badger (@gitter-badger)](https://github.com/gitter-badger "1 total commits to the home-assistant organization, 1 commit to home-assistant") - [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 "1 total commits to the home-assistant organization, 1 commit to home-assistant") - [thejacko12354 (@thejacko12354)](https://github.com/thejacko12354 "1 total commits to the home-assistant organization, 1 commit to home-assistant") - [Theodor Lindquist (@theolind)](https://github.com/theolind "27 total commits to the home-assistant organization, 25 commits to home-assistant, 2 commits to home-assistant.github.io") - [Thiago Oliveira (@chilicheech)](https://github.com/chilicheech "1 total commits to the home-assistant organization, 1 commit to home-assistant") @@ -648,6 +680,7 @@ This page contains a list of people who have contributed in one way or another t - [Thom Troy (@ttroy50)](https://github.com/ttroy50 "1 total commits to the home-assistant organization, 1 commit to home-assistant") - [Thomas (@ktpx)](https://github.com/ktpx "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [Thomas Friedel (@tfriedel)](https://github.com/tfriedel "1 total commits to the home-assistant organization, 1 commit to home-assistant") +- [ThUnD3r|Gr33n (@thundergreen)](https://github.com/thundergreen "4 total commits to the home-assistant organization, 4 commits to home-assistant.github.io") - [Tim (@tinglis1)](https://github.com/tinglis1 "4 total commits to the home-assistant organization, 3 commits to home-assistant.github.io, 1 commit to home-assistant") - [Tim Gray (@tgray)](https://github.com/tgray "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [Tim Harton (@timharton)](https://github.com/timharton "1 total commits to the home-assistant organization, 1 commit to home-assistant") @@ -657,13 +690,14 @@ This page contains a list of people who have contributed in one way or another t - [Tom Dickman (@tdickman)](https://github.com/tdickman "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Tom Duijf (@tomduijf)](https://github.com/tomduijf "70 total commits to the home-assistant organization, 53 commits to home-assistant, 9 commits to home-assistant.github.io, 6 commits to home-assistant-polymer, 2 commits to netdisco") - [Tom Hoover (@tomhoover)](https://github.com/tomhoover "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") -- [Tom Matheussen (@Tommatheussen)](https://github.com/Tommatheussen "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") +- [Tom Matheussen (@Tommatheussen)](https://github.com/Tommatheussen "2 total commits to the home-assistant organization, 2 commits to home-assistant-polymer") - [Tomi Tuhkanen (@ttu)](https://github.com/ttu "3 total commits to the home-assistant organization, 3 commits to home-assistant") - [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 "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") +- [Trevor (@tboyce1)](https://github.com/tboyce1 "5 total commits to the home-assistant organization, 5 commits to home-assistant") - [Trey Hunner (@treyhunner)](https://github.com/treyhunner "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [trollkarlen (@trollkarlen)](https://github.com/trollkarlen "5 total commits to the home-assistant organization, 5 commits to home-assistant") -- [Valentin Alexeev (@valentinalexeev)](https://github.com/valentinalexeev "7 total commits to the home-assistant organization, 5 commits to home-assistant, 2 commits to home-assistant.github.io") +- [Valentin Alexeev (@valentinalexeev)](https://github.com/valentinalexeev "8 total commits to the home-assistant organization, 6 commits to home-assistant, 2 commits to home-assistant.github.io") - [Valentin VĂLCIU (@axiac)](https://github.com/axiac "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [Vitor Espindola (@vitorespindola)](https://github.com/vitorespindola "3 total commits to the home-assistant organization, 3 commits to home-assistant") - [Vittorio Monaco (@vittoriom)](https://github.com/vittoriom "1 total commits to the home-assistant organization, 1 commit to home-assistant") @@ -679,11 +713,14 @@ This page contains a list of people who have contributed in one way or another t - [Will Heid (@bassclarinetl2)](https://github.com/bassclarinetl2 "11 total commits to the home-assistant organization, 11 commits to home-assistant.github.io") - [Will Hughes (@insertjokehere)](https://github.com/insertjokehere "3 total commits to the home-assistant organization, 2 commits to home-assistant.github.io, 1 commit 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 Scanlon (@w1ll1am23)](https://github.com/w1ll1am23 "37 total commits to the home-assistant organization, 27 commits to home-assistant, 10 commits to home-assistant.github.io") +- [William Scanlon (@w1ll1am23)](https://github.com/w1ll1am23 "43 total commits to the home-assistant organization, 31 commits to home-assistant, 12 commits to home-assistant.github.io") - [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 "11 total commits to the home-assistant organization, 7 commits to home-assistant, 4 commits to home-assistant.github.io") -- [XECDesign (@XECDesign)](https://github.com/XECDesign "22 total commits to the home-assistant organization, 22 commits to pi-gen") +- [Wolf-Bastian Pöttner (@BastianPoe)](https://github.com/BastianPoe "1 total commits to the home-assistant organization, 1 commit to home-assistant") +- [XECDesign (@XECDesign)](https://github.com/XECDesign "56 total commits to the home-assistant organization, 56 commits to pi-gen") - [Xorso (@Xorso)](https://github.com/Xorso "18 total commits to the home-assistant organization, 18 commits to home-assistant") +- [Yannic-HAW (@Yannic-HAW)](https://github.com/Yannic-HAW "1 total commits to the home-assistant organization, 1 commit to home-assistant") +- [Yannick Simard (@TheRaven)](https://github.com/TheRaven "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [yasin (@yasinS)](https://github.com/yasinS "4 total commits to the home-assistant organization, 4 commits to home-assistant.github.io") - [Zac Hatfield Dodds (@Zac-HD)](https://github.com/Zac-HD "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Zac Mrowicki (@zmrow)](https://github.com/zmrow "1 total commits to the home-assistant organization, 1 commit to home-assistant") @@ -695,4 +732,4 @@ This page contains a list of people who have contributed in one way or another t 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 Sunday, January 22nd 2017, 3:58:53 am UTC. +This page was last updated Saturday, February 11th 2017, 9:38:58 pm UTC. From 94ebb8c429808e2c24645ebbb33df453978773da Mon Sep 17 00:00:00 2001 From: Robbie Trencheny Date: Sat, 11 Feb 2017 13:57:56 -0800 Subject: [PATCH 80/81] Clean up release blog post --- ...02-11-alert-appletv-mqtt-yeelight.markdown | 44 +++++++++++-------- 1 file changed, 26 insertions(+), 18 deletions(-) diff --git a/source/_posts/2017-02-11-alert-appletv-mqtt-yeelight.markdown b/source/_posts/2017-02-11-alert-appletv-mqtt-yeelight.markdown index 5ccfc8b2f45..7e6aeb13f71 100644 --- a/source/_posts/2017-02-11-alert-appletv-mqtt-yeelight.markdown +++ b/source/_posts/2017-02-11-alert-appletv-mqtt-yeelight.markdown @@ -4,32 +4,38 @@ title: "0.38: Alert, AppleTV, MQTT discovery, and Yeelight" description: "Faster and more configurable frontend, " date: 2017-02-11 08:04:05 +0000 date_formatted: "February 11, 2017" -author: Fabian Affolter et al. -author_twitter: fabaff +author: Robbie Trencheny, Fabian Affolter +author_twitter: robbie comments: true categories: Release-Notes og_image: /images/blog/2017-02-0.38/social.png --- -0.38, hurry :tada: In this release we (special thanks to [@pvizeli]) have migrated all core components to work asynchronous. +Another Saturday, another release! -The configuration checking support was expanded. We have now `homeassistant.check_config`. This means that the service `homeassistant.restart` will now only restart your Home Assistant installation if the configuration is valid. +### {% linkable_title Core updates %} +- Thanks to [@pvizeli], all the core components are now written asyncronously, completing our migration from syncronous to asyncronous code! -### {% linkable_title Rewritten frontend core %} -The core of the frontend has been completely been rewritten, optimizing for speed and lost connection recovery. Even on the slowest phones it should fly now. +- Now when you restart Home Assistant using the `homeassistant.restart` service, your configuration is checked. If it appears to be invalid the restart will fail. -### {% linkable_title Custom state-card UI %} -A nice new feature is the possibility to create [custom state-card][custom-ui] in the frondend. Go ahead and write your own state-card for [lights][light], sensors, locks, etc. +### {% linkable_title Rewritten frontend %} +The frontend has been completely been rewritten, optimizing for speed and lost connection recovery. Even on the slowest phones it should fly now. The frontend also now uses the new [WebSockets API][websocket-api] instead of the [EventStream API][event-stream-api]. + +### {% linkable_title Custom state card UI %} +A nice new feature is the possibility to create [custom state cards][custom-ui] in the frondend. Go ahead and write your own state card for [lights][light], sensors, locks, etc. ### {% linkable_title MQTT discovery %} -The latest MQTT feature is [discovery][mqtt-discovery] support. Do not confuse this which the Home Assistant [Discovery][discovery]. MQTT Discover is for MQTT-only. Similar to the HTTP sensor/binary sensor allows this to use devices with minimal configuration. At the moment only binary sensors are supported. +MQTT now has [discovery][mqtt-discovery] support which is different than our [`discovery`][discovery] component. Similar to the HTTP sensor and HTTP binary sensor, MQTT discovery removes the need for configuration by allowing devices to make their presence known to Home Assistant. ### {% linkable_title Alert component %} -If you left your front door open, then the [`alert`][alert] component can be used to remind you of this by sending you repeating notifications at a given interval. +If you left your front door open, then the new [`alert`][alert] component can be used to remind you of this by sending you repeating notifications at a given interval. ### {% linkable_title Yeelight %} The [`yeelight`][yeelight] component has been ported to use a more stable and feature-complete [python-yeelight][python-yeelight] backend, and supports now both white and RGB bulbs. The component also supports transitions and can be configured to save the settings to the bulb on changes. The users currently using custom components for Yeelight are encouraged to move back to use the included version and report any problems with it to our [issue tracker][issue]. +### {% linkable_title Apple TV %} +[Apple TV][apple-tv] is now a supported [`media_player`][media-player]! It has support for just about every media player function, including a realtime display of playback status and artwork. + ### {% linkable_title All changes %} #### {% linkable_title New platforms/components %} @@ -42,7 +48,7 @@ The [`yeelight`][yeelight] component has been ported to use a more stable and fe - Switch: Add support for [FRITZ!DECT][fritz] wireless switches based on fritzhome ([@BastianPoe]) - Sensor: Add [moon][moon] sensor ([@fabaff]) - Media player: Support for the [Orange Livebox Play TV][orange] appliance ([@pschmitt]) -- Media player: Initial support for [Apple TV][apple] ([@postlund]) +- Media player: Initial support for [Apple TV][apple-tv] ([@postlund]) - MQTT: [MQTT discovery][mqtt-discovery] support ([@balloob], [@fabaff]) - Notify: [Mailgun][mailgun] notify service ([@pschmitt]) - Image Processing: Support [Microsoft Face detection][face-detect] ([@pvizeli]) @@ -94,15 +100,15 @@ The [`yeelight`][yeelight] component has been ported to use a more stable and fe - Zoneminder: Refactoring and JSON decode error handling ([@pschmitt]) - Image processing: Cleanup Base face class add support for microsoft face detect ([@pvizeli]) -Bugfix(es): [@balloob], [@fabaff], [@pvizeli], [@mnoorenberghe] [@Danielhiversen], [@armills], [@tchellomello], [@aequitas], [@mathewpeterson], [@molobrakos], [@michaelarnauts], [@jabesq], [@turbokongen], [@JshWright], [@andriej], [@jawilson], [@andrey-git], [@nodinosaur], [@konikvranik], and you if you are missing here. +Bugfixes: [@balloob], [@fabaff], [@pvizeli], [@mnoorenberghe] [@Danielhiversen], [@armills], [@tchellomello], [@aequitas], [@mathewpeterson], [@molobrakos], [@michaelarnauts], [@jabesq], [@turbokongen], [@JshWright], [@andriej], [@jawilson], [@andrey-git], [@nodinosaur], [@konikvranik], and you if you are missing here. ### {% linkable_title Breaking changes %} - The support for [LG webOS Smart TVs][webostv] was improved. This requires you to move `$HOME/.pylgtv` to `$HASS_CONFIG_DIR/webostv.conf` or Home Assistant will need to be paired with the TV again. - Image processing events have been renamed: `identify_face` has become `image_processing.detect_face`, `found_plate` has become `image_processing.found_plate` -- The [FFmpeg binary sensor][ffmpeg-bin] change the platform name from `ffmpeg` to `ffmpeg_noise` and `ffmpeg_motion`. Also all FFmpeg-related services are moved from a platform implementation to a the [FFmpeg components][ffmpeg] and were rename from `binary_sensor.ffmpeg_xy` to `ffmpeg.xy`. +- The [FFmpeg binary sensor][ffmpeg-bin] change the platform name from `ffmpeg` to `ffmpeg_noise` and `ffmpeg_motion`. Also all FFmpeg-related services are moved from a platform implementation to a the [FFmpeg components][ffmpeg] and were rename from `binary_sensor.ffmpeg_xy` to `ffmpeg.xy`. ### {% linkable_title If you need help... %} -...don't hesitate to use our [Forum][forum] or join us for a little [chat][gitter]. The release notes have comments enabled but it's preferred if you use the former communication channels. Thanks. +...don't hesitate to use our very active [forums][forum] or join us for a little [chat][gitter]. 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][issue]. Make sure to fill in all fields of the issue template. @@ -160,7 +166,7 @@ Experiencing issues introduced by this release? Please report them in our [issue [alert]: https://home-assistant.io/components/alert/ [apiai]: https://home-assistant.io/components/apiai/ -[apple]: https://home-assistant.io/components/media_player.apple_tv/ +[apple-tv]: https://home-assistant.io/components/media_player.apple_tv/ [arwn]: https://home-assistant.io/components/sensor.arwn/ [custom-ui]: https://home-assistant.io/developers/frontend_creating_custom_ui/ [discovery]: https://home-assistant.io/components/discovery/ @@ -172,6 +178,7 @@ Experiencing issues introduced by this release? Please report them in our [issue [hue]: https://home-assistant.io/components/light.hue/ [light]: https://home-assistant.io/cookbook/custom_ui_by_andrey-git [mailgun]: https://home-assistant.io/components/notify.mailgun/ +[media-player]: https://home-assistant.io/components/media_player/ [moon]: https://home-assistant.io/components/sensor.moon/ [mqtt-discovery]: https://home-assistant.io/components/mqtt/#discovery [nuki]: https://home-assistant.io/components/lock.nuki/ @@ -185,7 +192,8 @@ Experiencing issues introduced by this release? Please report them in our [issue [webostv]: https://home-assistant.io/components/media_player.webostv/ [yeelight]: https://home-assistant.io/components/light.yeelight/ -[issue]: https://github.com/home-assistant/home-assistant/issues -[gitter]: https://gitter.im/home-assistant/home-assistant +[event-stream-api]: https://home-assistant.io/developers/server_sent_events/ [forum]: https://community.home-assistant.io/ - +[gitter]: https://gitter.im/home-assistant/home-assistant +[issue]: https://github.com/home-assistant/home-assistant/issues +[websocket-api]: https://home-assistant.io/developers/websocket_api/ From 38099760e16160dd3fdfc1d86dccfe00a7270e19 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Sat, 11 Feb 2017 23:15:41 +0100 Subject: [PATCH 81/81] Small change --- source/_posts/2017-02-11-alert-appletv-mqtt-yeelight.markdown | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/_posts/2017-02-11-alert-appletv-mqtt-yeelight.markdown b/source/_posts/2017-02-11-alert-appletv-mqtt-yeelight.markdown index 7e6aeb13f71..395f3389630 100644 --- a/source/_posts/2017-02-11-alert-appletv-mqtt-yeelight.markdown +++ b/source/_posts/2017-02-11-alert-appletv-mqtt-yeelight.markdown @@ -14,7 +14,7 @@ og_image: /images/blog/2017-02-0.38/social.png Another Saturday, another release! ### {% linkable_title Core updates %} -- Thanks to [@pvizeli], all the core components are now written asyncronously, completing our migration from syncronous to asyncronous code! +- Thanks to [@pvizeli], all the core components are now written asynchronously. All entity components are now migrated from synchronously to asynchronously code! - Now when you restart Home Assistant using the `homeassistant.restart` service, your configuration is checked. If it appears to be invalid the restart will fail. @@ -48,7 +48,7 @@ The [`yeelight`][yeelight] component has been ported to use a more stable and fe - Switch: Add support for [FRITZ!DECT][fritz] wireless switches based on fritzhome ([@BastianPoe]) - Sensor: Add [moon][moon] sensor ([@fabaff]) - Media player: Support for the [Orange Livebox Play TV][orange] appliance ([@pschmitt]) -- Media player: Initial support for [Apple TV][apple-tv] ([@postlund]) +- Media player: [Apple TV][apple-tv] support ([@postlund]) - MQTT: [MQTT discovery][mqtt-discovery] support ([@balloob], [@fabaff]) - Notify: [Mailgun][mailgun] notify service ([@pschmitt]) - Image Processing: Support [Microsoft Face detection][face-detect] ([@pvizeli])