From b74b2fc33b81e4b2b143dc2695b981ab92e39fa7 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Sun, 15 Jan 2017 09:19:35 -0800 Subject: [PATCH 001/103] Update frontend docs --- source/_components/frontend.markdown | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/source/_components/frontend.markdown b/source/_components/frontend.markdown index 976c6f506ef..47027c322bf 100644 --- a/source/_components/frontend.markdown +++ b/source/_components/frontend.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Frontend" -description: "Offers a web framework to serve files." +description: "Offers a frontend to Home Assistant." date: 2015-12-06 21:35 sidebar: true comments: false @@ -11,14 +11,9 @@ logo: home-assistant.png ha_category: "Other" --- -The `http` component serves all files and data required for the Home Assistant frontend. You only need to add this to your configuration file if you want to change any of the default settings. - -

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

+This offers the official frontend to control Home Assistant. ```yaml # Example configuration.yaml entry frontend: ``` - From 5d9797c0fc7bade2f51c215413705e0d2accaa5a Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Sun, 15 Jan 2017 09:31:24 -0800 Subject: [PATCH 002/103] Fix blog post --- source/_posts/2017-01-14-iss-usps-images-packages.markdown | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/source/_posts/2017-01-14-iss-usps-images-packages.markdown b/source/_posts/2017-01-14-iss-usps-images-packages.markdown index 9762db10ad9..a21cf0c28d5 100644 --- a/source/_posts/2017-01-14-iss-usps-images-packages.markdown +++ b/source/_posts/2017-01-14-iss-usps-images-packages.markdown @@ -3,12 +3,11 @@ layout: post title: "0.36: ISS, USPS, Image processing, Insteon" description: "Track packages, space stations, TrackR devices, Xiaomi, and UPC connect boxes" date: 2017-01-14 08:04:05 +0000 -date_formatted: "January 14, 2017" +date_formatted: "January 15, 2017" author: Fabian Affolter author_twitter: fabaff comments: true categories: Release-Notes -og_image: /images/blog/2016-12-0.35/social.png --- Welcome to 2017 and 0.36. We are proud to announce the first release for this year. While we are still migrating parts to async but 0.36 is focusing on new features and a lot of bug fixes. From 6c5c2f2916af049f5910157f4dc5823e7b35fd6e Mon Sep 17 00:00:00 2001 From: Daniel Perna Date: Sun, 15 Jan 2017 20:43:40 +0100 Subject: [PATCH 003/103] Fixed wrong syntax (#1781) --- source/_ecosystem/appdaemon/api.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_ecosystem/appdaemon/api.markdown b/source/_ecosystem/appdaemon/api.markdown index 8615d751248..af1b241f1ec 100755 --- a/source/_ecosystem/appdaemon/api.markdown +++ b/source/_ecosystem/appdaemon/api.markdown @@ -1160,7 +1160,7 @@ Each service has different parameter requirements. This argument allows you to s #### {% linkable_title Examples %} ```python -self.call_service("light.turn_on", entity_id = "light/office_lamp", color_name = "red") +self.call_service("light/turn_on", entity_id = "light.office_lamp", color_name = "red") self.call_service("notify/notify", title = "Hello", message = "Hello World") ``` ### {% linkable_title turn_on() %} From f9f26b79a17aab4a8fffa90c1dc3f51b95bb8736 Mon Sep 17 00:00:00 2001 From: Adam Mills Date: Sun, 15 Jan 2017 14:47:27 -0500 Subject: [PATCH 004/103] Add instructions for installing node.js via nvm (#1770) --- source/developers/frontend.markdown | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/source/developers/frontend.markdown b/source/developers/frontend.markdown index 663dbb6e4bc..a30c3178196 100644 --- a/source/developers/frontend.markdown +++ b/source/developers/frontend.markdown @@ -22,15 +22,18 @@ Do not use development mode in production. Home Assistant uses aggressive cachin ## {% linkable_title Setting up the environment %} -Home Assistant will by default serve the compiled version of the frontend. To enable development mode for Home Assistant, update your `configuration.yaml` to have these lines: +Home Assistant will by default serve the compiled version of the frontend. As everything is compiled into the file `frontend.html` you do not want to work with the compiled version but with the separate files during development. To enable development mode for Home Assistant, update your `configuration.yaml` to have these lines: ```yaml http: development: 1 ``` -As everything is compiled into the file `frontend.html` you do not want to work with the compiled version but with the separate files during development. +Node.js is required to setup the frontend development environment. The preferred method of installing node.js is [nvm](https://github.com/creationix/nvm). Install nvm using the instructions in the [README](https://github.com/creationix/nvm#install-script), and install node.js by running the following command: +```bash +$ nvm install node +``` Next step is to get the frontend code. When you clone the Home Assistant repository, the frontend repository is not cloned by default. You can setup the frontend development environment by running: ```bash From 6e4ab5aee202a35a0fb9a2a909c948c0cbaa1ab9 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Sun, 15 Jan 2017 12:19:09 -0800 Subject: [PATCH 005/103] fix release notes link --- _config.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_config.yml b/_config.yml index a1b0cabf635..103288c959b 100644 --- a/_config.yml +++ b/_config.yml @@ -136,4 +136,4 @@ date_released: 2017-01-15 # 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-0353---december-23" +patch_version_notes: "#" From 6d32e1a823fab14c4015ef1f9edf9e137efca439 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Sun, 15 Jan 2017 21:25:15 +0100 Subject: [PATCH 006/103] Add TTS changes --- ...17-01-14-iss-usps-images-packages.markdown | 22 ++++++++++--------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/source/_posts/2017-01-14-iss-usps-images-packages.markdown b/source/_posts/2017-01-14-iss-usps-images-packages.markdown index a21cf0c28d5..83c60b8edc9 100644 --- a/source/_posts/2017-01-14-iss-usps-images-packages.markdown +++ b/source/_posts/2017-01-14-iss-usps-images-packages.markdown @@ -25,7 +25,7 @@ $ hass --script influxdb_migrator \ ``` ## {% linkable_title International Space Station (ISS) %} -No, unfortunately we are not going to space. The `iss` sensor is tracking the position of the International Space Station and gives your some details. +No, unfortunately we are not going to space. The `iss` sensor is tracking the position of the International Space Station and gives you some details. ## {% linkable_title Insteon local %} The support for Insteon was removed due to issues a while ago. With the `insteon_local` component support for [Insteon][insteon] is back and let one work locally with an Insteon setup. @@ -80,6 +80,7 @@ The new [image processing component][image] currently works with [number plates] - All string fields corresponding to a state will be renamed as state (former value). - Fields named value will always be stored as float. - Fields named state will always be stored as string. +- TTS cache files use now the language abbreviation as part of the name. If you want to use the cache, it need to be renamed or cleared, new created. E. g. `HASH_PLATFORM.xxx` -> `HASH_LANG_PLATFORM.xxx`. ## {% linkable_title If you need help... %} ...don't hesitate to use our [Forum](https://community.home-assistant.io/) or join us for a little [chat](https://gitter.im/home-assistant/home-assistant). The release notes have comments enabled but it's preferred if you use the former communication channels. Thanks. @@ -113,9 +114,11 @@ Experiencing issues introduced by this release? Please report them in our [issue [@jjensn]: https://github.com/jjensn [@kellerza]: https://github.com/kellerza [@kk7ds]: https://github.com/kk7ds +[@lupin-de-mid]: https://github.com/lupin-de-mid [@lwis]: https://github.com/lwis [@magicus]: https://github.com/magicus [@markferry]: https://github.com/markferry +[@MartinHjelmare]: https://github.com/MartinHjelmare [@MatoKafkac]: https://github.com/MatoKafkac [@mezz64]: https://github.com/mezz64 [@michaelarnauts]: https://github.com/michaelarnauts @@ -130,23 +133,26 @@ Experiencing issues introduced by this release? Please report them in our [issue [@rmkraus]: https://github.com/rmkraus [@scmmmh]: https://github.com/scmmmh [@technicalpickles]: https://github.com/technicalpickles +[@titilambert]: https://github.com/titilambert [@ttroy50]: https://github.com/ttroy50 [@turbokongen]: https://github.com/turbokongen [@w1ll1am23]: https://github.com/w1ll1am23 [@wardcraigj]: https://github.com/wardcraigj [@webworxshop]: https://github.com/webworxshop -[@titilambert]: https://github.com/titilambert [@Zac-HD]: https://github.com/Zac-HD -[@MartinHjelmare]: https://github.com/MartinHjelmare -[@lupin-de-mid]: https://github.com/lupin-de-mid +[apns]: https://home-assistant.io/components/notify.apns/ [beaglebone]: https://home-assistant.io/components/bbb_gpio/ [bl-switch]: https://home-assistant.io/components/switch.broadlink/ +[bom]: https://home-assistant.io/components/weather.bom/ [dublin]: https://home-assistant.io/components/sensor.dublin_public_transport/ [image]: https://home-assistant.io/components/image_processing/ +[influx]: https://home-assistant.io/components/influxdb/ [insteon]: https://home-assistant.io/components/insteon_local/ +[iss]: https://home-assistant.io/components/sensor.iss/ [kankun]: https://home-assistant.io/components/switch.kankun/ [lannouncer]: https://home-assistant.io/components/notify.lannouncer/ +[mysensors]: https://home-assistant.io/components/notify.mysensors/ [packages]: https://home-assistant.io/topics/packages/ [pico]: https://home-assistant.io/components/tts.picotts/ [ping]: https://home-assistant.io/components/device_tracker.ping/ @@ -161,11 +167,7 @@ Experiencing issues introduced by this release? Please report them in our [issue [usps]: https://home-assistant.io/components/sensor.usps/ [wink-fan]: https://home-assistant.io/components/fan.wink/ [xiaomi]: https://home-assistant.io/components/device_tracker.xiaomi/ +[yandex]: https://home-assistant.io/components/tts.yandextts/ [yeelight]: https://home-assistant.io/components/light.yeelight/ [zengge]: https://home-assistant.io/components/light.zengge/ -[bom]: https://home-assistant.io/components/weather.bom/ -[apns]: https://home-assistant.io/components/notify.apns/ -[mysensors]: https://home-assistant.io/components/notify.mysensors/ -[influx]: https://home-assistant.io/components/influxdb/ -[iss]: https://home-assistant.io/components/sensor.iss/ -[yandex]: https://home-assistant.io/components/tts.yandextts/ + From 8a06b607694ae387797e27797bd5a8b02ed42af3 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Sun, 15 Jan 2017 21:48:28 +0100 Subject: [PATCH 007/103] Add missing logo --- source/images/supported_brands/zengge.png | Bin 0 -> 2867 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 source/images/supported_brands/zengge.png diff --git a/source/images/supported_brands/zengge.png b/source/images/supported_brands/zengge.png new file mode 100644 index 0000000000000000000000000000000000000000..cdfbba2587ae03f8493b26938f198005fecf4a7f GIT binary patch literal 2867 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 RbzT4f002ovPDHLkV1oEMid+By literal 0 HcmV?d00001 From 5bfc9c783d712425be1ab3c60b0e3fe22481967d Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Sun, 15 Jan 2017 22:00:45 +0100 Subject: [PATCH 008/103] Updade for 0.36 --- source/_components/ha.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/ha.markdown b/source/_components/ha.markdown index 20cbd26137d..c6d7c637caf 100644 --- a/source/_components/ha.markdown +++ b/source/_components/ha.markdown @@ -1,6 +1,6 @@ --- layout: page -title: "Home Assistant 0.35" +title: "Home Assistant 0.36" description: "" date: 2016-12-16 17:00 sidebar: true From 0cc5def8d1e27f8494119232a8610346df5acda4 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Sun, 15 Jan 2017 22:25:50 +0100 Subject: [PATCH 009/103] Add missing social image --- ...017-01-14-iss-usps-images-packages.markdown | 1 + source/images/blog/2017-01-0.36/social.png | Bin 0 -> 120834 bytes 2 files changed, 1 insertion(+) create mode 100644 source/images/blog/2017-01-0.36/social.png diff --git a/source/_posts/2017-01-14-iss-usps-images-packages.markdown b/source/_posts/2017-01-14-iss-usps-images-packages.markdown index 83c60b8edc9..27d1d52201a 100644 --- a/source/_posts/2017-01-14-iss-usps-images-packages.markdown +++ b/source/_posts/2017-01-14-iss-usps-images-packages.markdown @@ -8,6 +8,7 @@ author: Fabian Affolter author_twitter: fabaff comments: true categories: Release-Notes +og_image: /images/blog/2016-01-0.36/social.png --- Welcome to 2017 and 0.36. We are proud to announce the first release for this year. While we are still migrating parts to async but 0.36 is focusing on new features and a lot of bug fixes. diff --git a/source/images/blog/2017-01-0.36/social.png b/source/images/blog/2017-01-0.36/social.png new file mode 100644 index 0000000000000000000000000000000000000000..18f824453e488a8f5ebec72ee14ae560e45b6c52 GIT binary patch literal 120834 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%0A_7uoqn3>y=!ryJ!3$JVp$cGlB2iZI$9G&7?& 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 UI<$lqN50*;-B34E=jg@%0L!3&CIA2c literal 0 HcmV?d00001 From b19538b43c839e956e5e8c88f42ccb5830ee4bc8 Mon Sep 17 00:00:00 2001 From: Fredrik Lindqvist Date: Sun, 15 Jan 2017 22:59:38 +0100 Subject: [PATCH 010/103] Quick fix for formatting of bbb_gpio.markdown Fix formatting of link to function as a proper link. --- source/_components/bbb_gpio.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/bbb_gpio.markdown b/source/_components/bbb_gpio.markdown index 96ee54010ee..fc5142b2527 100644 --- a/source/_components/bbb_gpio.markdown +++ b/source/_components/bbb_gpio.markdown @@ -12,5 +12,5 @@ ha_category: DIY ha_release: 0.36 --- -The `bbb_gpio` component is the base for all [BeagleBone Black][https://beagleboard.org/black] related GPIO platforms in Home Assistant. There is no setup needed for the component itself, for the platforms please check their corresponding pages. +The `bbb_gpio` component is the base for all [BeagleBone Black](https://beagleboard.org/black) related GPIO platforms in Home Assistant. There is no setup needed for the component itself, for the platforms please check their corresponding pages. From f0ebc4a2ebb7d3bacb1f7ac1da405ce161dd8943 Mon Sep 17 00:00:00 2001 From: Martin Hjelmare Date: Mon, 16 Jan 2017 00:04:25 +0100 Subject: [PATCH 011/103] Add docs on influxdb data migration (#1786) * Add docs for migrator script. * Update release blog and link to influxdb sections. --- source/_components/influxdb.markdown | 47 ++++++++++++++++++- ...17-01-14-iss-usps-images-packages.markdown | 15 +++--- 2 files changed, 52 insertions(+), 10 deletions(-) diff --git a/source/_components/influxdb.markdown b/source/_components/influxdb.markdown index c6154faf5f4..c1382750bff 100644 --- a/source/_components/influxdb.markdown +++ b/source/_components/influxdb.markdown @@ -14,6 +14,8 @@ ha_release: 0.9 The `influxdb` component makes it possible to transfer all state changes to an external [InfluxDB](https://influxdb.com/) database. For more details, [see the blog post on InfluxDB](/blog/2015/12/07/influxdb-and-grafana/). +## {% linkable_title Configuration %} + The default InfluxDB configuration doesn't enforce authentication. If you have installed InfluxDB on the same host where Home Assistant is running and haven't made any configuration changes, add the following to your `configuration.yaml` file: ```yaml @@ -33,10 +35,12 @@ Configuration variables: - **ssl** (*Optional*): Use https instead of http to connect. Defaults to false. - **verify_ssl** (*Optional*): Verify SSL certificate for https request. Defaults to false. - **default_measurement** (*Optional*): Measurement name to use when an entity doesn't have a unit. Defaults to entity id. +- **override_measurement** (*Optional*): Measurement name to use instead of unit or default measurement. This will store all data points in the singel same measurement. - **blacklist** (*Optional*): List of entities not logged to InfluxDB. - **whitelist** (*Optional*): List of the entities (only) that will be logged to InfluxDB. If not set, all entities will be logged. Values set by the **blacklist** option will prevail. - **tags** (*Optional*): Tags to mark the data. +## {% linkable_title Data migration %} Starting with 0.36 the InfluxDB component has a new schema to store values in the InfluxDB databases. @@ -47,13 +51,52 @@ Starting with 0.36 the InfluxDB component has a new schema to store values in th - Fields named value will always be stored as float. - Fields named state will always be stored as string. -If you need to migrate your database, you may require to run the `influxdb_migrator` script. +### {% linkable_title Migration script %} + +If you need to migrate your database, you may require to run the `influxdb_migrator` script. Run the script after upgrade to 0.36 but before first regular start of `hass` version 0.36. + +These are the steps the script will perform: +1. Create a new database (called `DBNAME__old`) to store old data. +2. Copy data from `DBNAME` database to `DBNAME__old` database. +3. Empty `DBNAME` database (using `drop` then `create`). `DBNAME` database is now considered as the new database. +4. For each measurement of `DBNAME__old` database: + 1. Read all points from the current measuremnt (by group of `1000` points by default) and convert them. + 2. Send group of points to `DBNAME` database. +5. Delete the `DBNAME__old` database if needed. + +Example to run the script: ```bash $ hass --script influxdb_migrator \ -H IP_INFLUXDB_HOST -u INFLUXDB_USERNAME -p INFLUXDB_PASSWORD \ - -o test_series -d INFLUXDB_DB_NAME + -d INFLUXDB_DB_NAME ``` +Script arguments: + +``` +required arguments: + -d dbname, --dbname dbname InfluxDB database name + +optional arguments: + -h, --help show this help message and exit + -H host, --host host InfluxDB host address + -P port, --port port InfluxDB host port + -u username, --username username + InfluxDB username + -p password, --password password + InfluxDB password + -s step, --step step How many points to migrate at the same time + -o override_measurement, --override-measurement override_measurement + Store all your points in the same measurement + -D, --delete Delete old database +``` + +- If you run the script with only the `-h` option, you will get a help printout with a short explanation of the different options. +- The host option defaults to `'127.0.0.1'`. +- The port option defaults to `8086`. +- You should be able to omit username and password, if InfluxDB authentication is disabled, which it is by default. +- The step option defaults to `1000`. + ## {% linkable_title Examples %} diff --git a/source/_posts/2017-01-14-iss-usps-images-packages.markdown b/source/_posts/2017-01-14-iss-usps-images-packages.markdown index 27d1d52201a..183d657fc0c 100644 --- a/source/_posts/2017-01-14-iss-usps-images-packages.markdown +++ b/source/_posts/2017-01-14-iss-usps-images-packages.markdown @@ -17,19 +17,19 @@ Welcome to 2017 and 0.36. We are proud to announce the first release for this ye [Packages][packages] are providing a new way to organize different component's configuration parts together. With packages we offer the option to include different components or parts of configuration using any of the `!include` directives. ## {% linkable_title InfluxDB export %} -The [InfluxDB][influx] component was causing problems in a wide variety of use cases. [@titilambert] improved our InfluxDB exporter feature. It might be that you need to run the migration script to update your InfluxDB database. +The [InfluxDB][influx] component was causing problems in a wide variety of use cases. [@titilambert] improved our InfluxDB exporter feature. It might be that you need to run the [migration script](/components/influxdb/#migration-script) to update your InfluxDB database. ```bash $ hass --script influxdb_migrator \ -H IP_INFLUXDB_HOST -u INFLUXDB_USERNAME -p INFLUXDB_PASSWORD \ - -o test_series -d INFLUXDB_DB_NAME + -d INFLUXDB_DB_NAME ``` ## {% linkable_title International Space Station (ISS) %} -No, unfortunately we are not going to space. The `iss` sensor is tracking the position of the International Space Station and gives you some details. +No, unfortunately we are not going to space. The `iss` sensor is tracking the position of the International Space Station and gives you some details. ## {% linkable_title Insteon local %} -The support for Insteon was removed due to issues a while ago. With the `insteon_local` component support for [Insteon][insteon] is back and let one work locally with an Insteon setup. +The support for Insteon was removed due to issues a while ago. With the `insteon_local` component support for [Insteon][insteon] is back and let one work locally with an Insteon setup. ## {% linkable_title Image processing %} The new [image processing component][image] currently works with [number plates][plates]. But this could level the way to integrate feature like facial recognition, motion detection, or gestures control. @@ -70,10 +70,10 @@ The new [image processing component][image] currently works with [number plates] - Scripts: Support for `last_triggered` ([@Danielhiversen]) - Media player: Support for `SUPPORT_PLAY` flag ([@armills]) - Minor and not so minor features and bug fixes by [@balloob], [@pvizeli], [@fabaff], [@mezz64], [@andrey-git], [@aequitas], [@abmantis], [@turbokongen], [@jabesq], [@michaelarnauts], [@kellerza], [@titilambert], [@btorresgil], [@henworth], [@armills], [@mjg59], [@Giannie], [@n8henrie], [@magicus], [@florianholzapfel], [@MrMep], [@bah2830], [@happyleavesaoc], [@lwis], [@glance-], [@markferry], and [@nikdoof]. - + ## {% linkable_title Breaking changes %} - [APNS][apns] service was moved to the `notify` domain. Use `notify.apns_NOTIFIER_NAME` instead of `apns.NOTIFIER_NAME`. -- [InfluxDB][influx] component has a new schema to store values in the InfluxDB database. You may require to run the `influxdb_migrator` script. +- [InfluxDB][influx] component has a new [schema](/components/influxdb/#data-migration) to store values in the InfluxDB database. You may require to run the [`influxdb_migrator`](/components/influxdb/#migration-script) script. You have to note: - There will not be any tags/fields named time anymore. - All numeric fields (int/float/bool) will be stored as float inside influx db. @@ -140,7 +140,7 @@ Experiencing issues introduced by this release? Please report them in our [issue [@w1ll1am23]: https://github.com/w1ll1am23 [@wardcraigj]: https://github.com/wardcraigj [@webworxshop]: https://github.com/webworxshop -[@Zac-HD]: https://github.com/Zac-HD +[@Zac-HD]: https://github.com/Zac-HD [apns]: https://home-assistant.io/components/notify.apns/ [beaglebone]: https://home-assistant.io/components/bbb_gpio/ @@ -171,4 +171,3 @@ Experiencing issues introduced by this release? Please report them in our [issue [yandex]: https://home-assistant.io/components/tts.yandextts/ [yeelight]: https://home-assistant.io/components/light.yeelight/ [zengge]: https://home-assistant.io/components/light.zengge/ - From a341b7248be65e74fa6255011aaec85f0eeee606 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Sun, 15 Jan 2017 15:27:02 -0800 Subject: [PATCH 012/103] Add initial code review check lists --- .../asides/developers_navigation.html | 2 + .../developers/code_review_component.markdown | 40 +++++++++++ .../developers/code_review_platform.markdown | 67 +++++++++++++++++++ 3 files changed, 109 insertions(+) create mode 100644 source/developers/code_review_component.markdown create mode 100644 source/developers/code_review_platform.markdown diff --git a/source/_includes/asides/developers_navigation.html b/source/_includes/asides/developers_navigation.html index 9ec9e38ca0e..5fdc0d9adfc 100644 --- a/source/_includes/asides/developers_navigation.html +++ b/source/_includes/asides/developers_navigation.html @@ -25,6 +25,7 @@
  • {% active_link /developers/add_new_platform/ Support a new device (as a platform) %}
      +
    • {% active_link /developers/code_review_platform/ Checklist creating a platform %}
    • {% active_link /developers/platform_example_sensor/ Example sensor platform %}
    • {% active_link /developers/platform_example_light/ Example light platform %}
    @@ -32,6 +33,7 @@
  • {% active_link /developers/creating_components/ Adding a new component %}
      +
    • {% active_link /developers/code_review_component/ Checklist creating a component %}
    • {% active_link /developers/component_loading/ Loading components %}
    • {% active_link /developers/component_deps_and_reqs/ Requirements & Dependencies %}
    • {% active_link /developers/component_initialization/ Initialization %}
    • diff --git a/source/developers/code_review_component.markdown b/source/developers/code_review_component.markdown new file mode 100644 index 00000000000..9e2d5ffb594 --- /dev/null +++ b/source/developers/code_review_component.markdown @@ -0,0 +1,40 @@ +--- +layout: page +title: "Checklist for creating a component" +description: "A list of things to pay attention to when code reviewing a component." +date: 2017-01-15 14:09 -0800 +sidebar: true +comments: false +sharing: true +footer: true +--- + +A checklist of things to do when you're adding a new component. + +### {% linkable_title Requirements %} + + 1. Requirement version pinned: `REQUIREMENTS = ['phue==0.8.1']` + 2. If requirement hosted on GitHub: + - Point at a zip archive of a release tag or commit SHA. + - Add version found in zip-archive as hash to url. + +```python +REQUIREMENTS = [ + 'http://github.com/technicalpickles/python-nest' + '/archive/e6c9d56a8df455d4d7746389811f2c1387e8cb33.zip' + '#python-nest==3.0.3'] +``` + +### {% linkable_title Configuration %} + + 1. Volutpuous schema present for config validation + 2. Default parameters specified in voluptuous schema, not in `setup_platform(…)` + 3. Schema using as many generic config keys as possible from `homeassistant.const` + 4. If having platforms, have a `PLATFORM_SCHEMA`, otherwise `CONFIG_SCHEMA`. + 5. If `PLATFORM_SCHEMA`, import base from `homeassistant.helpers.config_validation` + + +### {% linkable_title Component/platform communication %} + + 1. If you need to share global data with platforms, use the dictionary `hass.data`. + 2. If the component fetches data that causes related platform entities to update, diff --git a/source/developers/code_review_platform.markdown b/source/developers/code_review_platform.markdown new file mode 100644 index 00000000000..a50fdf91a79 --- /dev/null +++ b/source/developers/code_review_platform.markdown @@ -0,0 +1,67 @@ +--- +layout: page +title: "Checklist for creating a platform" +description: "A list of things to pay attention to when code reviewing a platform." +date: 2017-01-15 14:09 -0800 +sidebar: true +comments: false +sharing: true +footer: true +--- + +A checklist of things to do when you're adding a new platform. + +### {% linkable_title 1. Requirements %} + + 1. Requirement version pinned: `REQUIREMENTS = ['phue==0.8.1']` + 2. If requirement hosted on GitHub: + - Point at a zip archive of a release tag or commit SHA. + - Add version found in zip-archive as hash to url. + +```python +REQUIREMENTS = [ + 'http://github.com/technicalpickles/python-nest' + '/archive/e6c9d56a8df455d4d7746389811f2c1387e8cb33.zip' + '#python-nest==3.0.3'] +``` + +### {% linkable_title 2. Dependencies %} + + 1. If you depend on a component for the connection, add it to your dependencies: `DEPENDENCIES = ['nest']` + +### {% linkable_title 3. Configuration %} + + 1. Volutpuous schema present for config validation + 2. Voluptuous schema extends schema from component
      (e.g. `light.hue.PLATFORM_SCHEMA` extends `light.PLATFORM_SCHEMA`) + 3. Default parameters specified in voluptuous schema, not in `setup_platform(…)` + 4. Schema using as many generic config keys as possible from `homeassistant.const` + +```python +import voluptuous as vol + +from homeassistant.const import CONF_FILENAME, CONF_HOST +from homeassistant.components.light import PLATFORM_SCHEMA +import homeassistant.helpers.config_validation as cv + +CONF_ALLOW_UNREACHABLE = 'allow_unreachable' +DEFAULT_UNREACHABLE = False + +PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({ + vol.Required(CONF_HOST): cv.string, + vol.Optional(CONF_ALLOW_UNREACHABLE, + default=DEFAULT_UNREACHABLE): cv.boolean, + vol.Optional(CONF_FILENAME): cv.string, +}) +``` + +### {% linkable_title 4. Setup Platform %} + + 1. Test if passed in info (user/pass/host etc.) works. + 2. Group your calls to `add_devices` if possible. + 3. If platform adds extra services, format should be `._`. + +### {% linkable_title 5. Entity %} + + 1. Extend entity from component, e.g. `class HueLight(Light)` + 2. Do not call `update()` in constructor, use `add_devices(devices, True)` instead. + 3. Do not do any I/O inside properties. Cache values inside `update()` instead. From 86789c91ebbcf12d45bd0758d4c8958214e25d6b Mon Sep 17 00:00:00 2001 From: Corban Mailloux Date: Mon, 16 Jan 2017 02:16:15 -0500 Subject: [PATCH 013/103] USPS sensor typo fixes (#1788) --- source/_components/sensor.usps.markdown | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/_components/sensor.usps.markdown b/source/_components/sensor.usps.markdown index fe81ff01c5a..20594513dbf 100644 --- a/source/_components/sensor.usps.markdown +++ b/source/_components/sensor.usps.markdown @@ -1,7 +1,7 @@ --- layout: page title: USPS Sensor -description: "Instructions on how to set up USP sensors within Home Assistant." +description: "Instructions on how to set up USPS sensors within Home Assistant." date: 2017-01-06 08:00 sidebar: true comments: false @@ -24,7 +24,7 @@ sensor: password: YOUR_PASSWORD ``` -Configuration options for the a TCP Sensor: +Configuration options for the USPS Sensor: - **username** (*Required*): The username to access the USPS service. - **password** (*Required*): The password for the given username. From 492f9753a65ee5c8f80fb47cacb26e0d0d15b866 Mon Sep 17 00:00:00 2001 From: Corban Mailloux Date: Mon, 16 Jan 2017 02:18:44 -0500 Subject: [PATCH 014/103] Typo fixes in APNS docs. (#1789) --- source/_components/notify.apns.markdown | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/source/_components/notify.apns.markdown b/source/_components/notify.apns.markdown index 354a1897cb2..30737d617ec 100644 --- a/source/_components/notify.apns.markdown +++ b/source/_components/notify.apns.markdown @@ -14,7 +14,7 @@ ha_release: 0.31 The `apns` platform uses the Apple Push Notification service (APNS) to deliver notifications from Home Assistant. -To use the APNS service you will need an Apple developer account and you will need to create an App to receive push notifications. For more information see the apple developer documentation. +To use the APNS service you will need an Apple developer account and you will need to create an app to receive push notifications. For more information, see the Apple developer documentation. ```yaml # Example configuration.yaml entry @@ -36,20 +36,20 @@ The APNS platform will register two services, `notify.NOTIFIER_NAME` and `notify ### notify.apns_NOTIFIER_NAME -This service will register device id's with home assistant. In order to receive a notification a device must be registered. The app on the device can use this service to send an ID to Home Assistant during startup, the ID will be stored in `[NOTIFIER_NAME]_apns.yaml`. +This service will register device IDs with Home Assistant. In order to receive a notification a device must be registered. The app on the device can use this service to send an ID to Home Assistant during startup, the ID will be stored in `[NOTIFIER_NAME]_apns.yaml`. -See didRegisterForRemoteNotificationsWithDeviceToken in the [Apple developer documentation](https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIApplicationDelegate_Protocol/#//apple_ref/occ/intfm/UIApplicationDelegate/application:didRegisterForRemoteNotificationsWithDeviceToken:) for more information about how to obtain a device id. +See `didRegisterForRemoteNotificationsWithDeviceToken` in the [Apple developer documentation](https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIApplicationDelegate_Protocol/#//apple_ref/occ/intfm/UIApplicationDelegate/application:didRegisterForRemoteNotificationsWithDeviceToken:) for more information about how to obtain a device ID. ### notify.NOTIFIER_NAME This service will send messages to a registered device. The following parameters can be used: -- **message**: The message to send +- **message**: The message to send. - **target**: The desired state of the device, only devices that match the state will receive messages. To enable state tracking a registered device must have a `tracking_device_id` attribute added to the `[NOTIFIER_NAME]_apns.yaml` file. If this ID matches a device in `known_devices.yaml` the device state will be tracked. - **data**: - * **badge**: The number to display as the badge of the app ic. + * **badge**: The number to display as the badge of the app icon. * **sound**: The name of a sound file in the app bundle or in the Library/Sounds folder. - * **category**: Provide this key with a string value that represents the identifier property of the UIMutableUserNotificationCategory. + * **category**: Provide this key with a string value that represents the identifier property of the `UIMutableUserNotificationCategory`. * **content_available**: Provide this key with a value of 1 to indicate that new content is available. From 55f99eeaf5ac59e1178b2945fdc8f10ca2fe3e0b Mon Sep 17 00:00:00 2001 From: Gopal Kildoliya Date: Mon, 16 Jan 2017 13:01:23 +0530 Subject: [PATCH 015/103] Notify component for Facebook Messenger (#1683) * Create notify.facebook.markdown * Update notify.facebook.markdown * Update notify.facebook.markdown * Added Facebook logo --- source/_components/notify.facebook.markdown | 51 ++++++++++++++++++++ source/images/supported_brands/facebook.png | Bin 0 -> 12708 bytes 2 files changed, 51 insertions(+) create mode 100644 source/_components/notify.facebook.markdown create mode 100755 source/images/supported_brands/facebook.png diff --git a/source/_components/notify.facebook.markdown b/source/_components/notify.facebook.markdown new file mode 100644 index 00000000000..55f9adc4c78 --- /dev/null +++ b/source/_components/notify.facebook.markdown @@ -0,0 +1,51 @@ +--- +layout: page +title: "Facebook Messenger" +description: "Instructions how to add user notifications to Home Assistant." +date: 2016-12-31 14:14 +sidebar: true +comments: false +sharing: true +footer: true +logo: facebook.png +ha_category: Notifications +ha_release: "0.35" +--- + +The `facebook` notification platform enables sending notifications via Facebook Messenger, powered by [Facebook](https://facebook.com). + +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: facebook + page_access_token: FACEBOOK_PAGE_ACCESS_TOKEN +``` + +Configuration variables: + +- **page_access_token** (*Required*): Access token for your facebook page. Checkout [Facebook Messenger Platform](https://developers.facebook.com/docs/messenger-platform/guides/setup) 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`. + +### Usage + +With Facebook notify service, you can send your notifications to your facebook messenger with help of your facebook page. You have to create a [Facebook Page and App](https://developers.facebook.com/docs/messenger-platform/guides/quick-start) for this service. You can control it by calling the notify service [as described here](/components/notify/). It will send a message on messenger to user specified by **target** on behalf of your page. See the [quick start](https://developers.facebook.com/docs/messenger-platform/guides/quick-start) guide for more information. +The phone number used in **target** should be registered with facebook messenger. Phone number of the recipient should be in +1(212)555-2368 format. If your app is not approved by facebook then the recipient should by either admin, developer or tester for your facebook app. [More...](https://developers.facebook.com/docs/messenger-platform/send-api-reference#phone_number) + +```yaml +# Example automation notification entry +automation: + - alias: Evening Greeting + trigger: + platform: sun + event: sunset + action: + service: notify.facebook + data: + message: 'Good Evening' + target: + - +919413017584 + - +919784516314 +``` diff --git a/source/images/supported_brands/facebook.png b/source/images/supported_brands/facebook.png new file mode 100755 index 0000000000000000000000000000000000000000..26333d70c5e7b7286d5eb8953dd3c999a4ddb5bf GIT binary patch literal 12708 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 U;pGm$9fQxsCg#SOI~{)gfAwJB-~a#s literal 0 HcmV?d00001 From c01c26c5aa44e19061f8906a4aadfa2b3fc9fc88 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Mon, 16 Jan 2017 08:34:21 +0100 Subject: [PATCH 016/103] Update ha_release --- source/_components/notify.facebook.markdown | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/source/_components/notify.facebook.markdown b/source/_components/notify.facebook.markdown index 55f9adc4c78..b34a8a396ff 100644 --- a/source/_components/notify.facebook.markdown +++ b/source/_components/notify.facebook.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Facebook Messenger" -description: "Instructions how to add user notifications to Home Assistant." +description: "Instructions how to add Facebook user notifications to Home Assistant." date: 2016-12-31 14:14 sidebar: true comments: false @@ -9,7 +9,7 @@ sharing: true footer: true logo: facebook.png ha_category: Notifications -ha_release: "0.35" +ha_release: 0.36 --- The `facebook` notification platform enables sending notifications via Facebook Messenger, powered by [Facebook](https://facebook.com). @@ -29,7 +29,7 @@ Configuration variables: - **page_access_token** (*Required*): Access token for your facebook page. Checkout [Facebook Messenger Platform](https://developers.facebook.com/docs/messenger-platform/guides/setup) 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`. -### Usage +### {% linkable_title Usage %} With Facebook notify service, you can send your notifications to your facebook messenger with help of your facebook page. You have to create a [Facebook Page and App](https://developers.facebook.com/docs/messenger-platform/guides/quick-start) for this service. You can control it by calling the notify service [as described here](/components/notify/). It will send a message on messenger to user specified by **target** on behalf of your page. See the [quick start](https://developers.facebook.com/docs/messenger-platform/guides/quick-start) guide for more information. The phone number used in **target** should be registered with facebook messenger. Phone number of the recipient should be in +1(212)555-2368 format. If your app is not approved by facebook then the recipient should by either admin, developer or tester for your facebook app. [More...](https://developers.facebook.com/docs/messenger-platform/send-api-reference#phone_number) From 001fbbe9d3e6b29a0764fc2ddba3833443b0b2b2 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Mon, 16 Jan 2017 08:36:00 +0100 Subject: [PATCH 017/103] Add @gopalkildoliya --- source/developers/credits.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/developers/credits.markdown b/source/developers/credits.markdown index 1146cb15a5b..71a954b950c 100644 --- a/source/developers/credits.markdown +++ b/source/developers/credits.markdown @@ -104,6 +104,7 @@ This page contains a list of people who have contributed in one way or another t - [Giel Janssens](https://github.com/gieljnssns) - [Gilles Margerie](https://github.com/Gilles95) - [goir](https://github.com/goir) +- [Gopal Kildoliya](https://github.com/gopalkildoliya) - [Greg Dowling](https://github.com/pavoni) - [gross1989](https://github.com/gross1989) - [Guillem Barba](https://github.com/gbarba) @@ -274,5 +275,4 @@ This page contains a list of people who have contributed in one way or another t - [wokar](https://github.com/wokar) - [Zac Mrowicki](https://github.com/zmrow) - This page is irregularly updated. As a base we use the Github [contributors overview](https://github.com/home-assistant/home-assistant/graphs/contributors) of the Home Assistant git repository and the [overview](https://github.com/home-assistant/home-assistant.io/graphs/contributors) for [home-assistant.io](https://home-assistant.io). If you think that you are missing, please let us know or add yourself. From ae54348a074b77fdafa63514dbca4bd0fb2bc614 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Mon, 16 Jan 2017 08:40:45 +0100 Subject: [PATCH 018/103] Add Facebook Messenger notification support --- source/_posts/2017-01-14-iss-usps-images-packages.markdown | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/source/_posts/2017-01-14-iss-usps-images-packages.markdown b/source/_posts/2017-01-14-iss-usps-images-packages.markdown index 183d657fc0c..7094c3f3202 100644 --- a/source/_posts/2017-01-14-iss-usps-images-packages.markdown +++ b/source/_posts/2017-01-14-iss-usps-images-packages.markdown @@ -57,6 +57,7 @@ The new [image processing component][image] currently works with [number plates] - Weather: [Australian BOM][bom] (Bureau of Meteorology) support ([@Zac-HD]) - Notify: Support for [MySensors][mysensors] notifications ([@MartinHjelmare]) - TTS: New [Yandex SpeechKit TTS][yandex] integration ([@lupin-de-mid]) +- Notify: [Facebook Messenger][facebook] support ([@gopalkildoliya]) - Sensor - sonarr: Add `urlbase` to [Sonarr][] ([@quadportnick]) - Switch - broadlink: Support for [SP][bl-switch] devices ([@Danielhiversen]) @@ -108,6 +109,7 @@ Experiencing issues introduced by this release? Please report them in our [issue [@florianholzapfel]: https://github.com/florianholzapfel [@Giannie]: https://github.com/Giannie [@glance-]: https://github.com/glance- +[@gopalkildoliya]: https://github.com/gopalkildoliya [@happyleavesaoc]: https://github.com/happyleavesaoc [@henworth]: https://github.com/henworth [@HydrelioxGitHub]: https://github.com/HydrelioxGitHub @@ -147,6 +149,7 @@ Experiencing issues introduced by this release? Please report them in our [issue [bl-switch]: https://home-assistant.io/components/switch.broadlink/ [bom]: https://home-assistant.io/components/weather.bom/ [dublin]: https://home-assistant.io/components/sensor.dublin_public_transport/ +[facebook]: https://home-assistant.io/components/notify.facebook/ [image]: https://home-assistant.io/components/image_processing/ [influx]: https://home-assistant.io/components/influxdb/ [insteon]: https://home-assistant.io/components/insteon_local/ @@ -171,3 +174,4 @@ Experiencing issues introduced by this release? Please report them in our [issue [yandex]: https://home-assistant.io/components/tts.yandextts/ [yeelight]: https://home-assistant.io/components/light.yeelight/ [zengge]: https://home-assistant.io/components/light.zengge/ + From 8f2e73735f34e2c52a8da6e2310f49aadaa953b5 Mon Sep 17 00:00:00 2001 From: lamiskin Date: Mon, 16 Jan 2017 21:45:29 +1000 Subject: [PATCH 019/103] Fix volvooncall.markdown external website link (#1794) Volvo on call website is now found at: device_tracker.volvooncall.markdown --- source/_components/device_tracker.volvooncall.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/device_tracker.volvooncall.markdown b/source/_components/device_tracker.volvooncall.markdown index d09efd871db..757bb787a06 100644 --- a/source/_components/device_tracker.volvooncall.markdown +++ b/source/_components/device_tracker.volvooncall.markdown @@ -13,7 +13,7 @@ ha_release: "0.30" --- -The `volvooncall` platform offers presence detection by retrieving your car's information from the [Volvo On Call](http://www.volvocars.com/intl/own/owner-info/volvo-on-call#) cloud service. +The `volvooncall` platform offers presence detection by retrieving your car's information from the [Volvo On Call](http://www.volvocars.com/intl/own/connectivity/volvo-on-call) cloud service. To use Volvo On Call in your installation, add the following to your `configuration.yaml` file: From 32f8d0db1438317ac8416b041aa74cf5d13964eb Mon Sep 17 00:00:00 2001 From: Pedro Navarro Date: Mon, 16 Jan 2017 03:46:35 -0800 Subject: [PATCH 020/103] Fixed typo (#1792) --- source/developers/asyncio.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/developers/asyncio.markdown b/source/developers/asyncio.markdown index f663b8d36e9..72cbb76c6c4 100644 --- a/source/developers/asyncio.markdown +++ b/source/developers/asyncio.markdown @@ -11,7 +11,7 @@ footer: true On September 29, 2016 we released [Home Assistant 0.29][0.29] as part of our bi-weekly release schedule. This release introduced a complete overhaul of the core spearheaded by [Ben Bangert][ben]. -The old core was set up like a “traditional” threaded application. Each resource that was not thread safe (ie. the state of entities) would be protected by a lock. This caused a lot of waiting and potential inconsistency because a task could now end up waiting halfway through it’s job until some resource got freed. +The old core was set up like a “traditional” threaded application. Each resource that was not thread safe (ie. the state of entities) would be protected by a lock. This caused a lot of waiting and potential inconsistency because a task could now end up waiting halfway through its job until some resource got freed. Our new core is based on an Python’s built-in asyncio module. Instead of having all threads have access to the core API objects, access is now limited to a special thread called the event loop. All components will now schedule themselves as a task to be executed by the event loop. This gives us the guarantee that only one task is executed at once, meaning we no longer need any locks. From 3a4c5b7cd04beddf828befc598ef43eea606ef40 Mon Sep 17 00:00:00 2001 From: RBHR Date: Mon, 16 Jan 2017 22:34:01 +1030 Subject: [PATCH 021/103] Update code_review_component.markdown (#1793) --- source/developers/code_review_component.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/developers/code_review_component.markdown b/source/developers/code_review_component.markdown index 9e2d5ffb594..9c349fbc1c8 100644 --- a/source/developers/code_review_component.markdown +++ b/source/developers/code_review_component.markdown @@ -27,7 +27,7 @@ REQUIREMENTS = [ ### {% linkable_title Configuration %} - 1. Volutpuous schema present for config validation + 1. Voluptuous schema present for config validation 2. Default parameters specified in voluptuous schema, not in `setup_platform(…)` 3. Schema using as many generic config keys as possible from `homeassistant.const` 4. If having platforms, have a `PLATFORM_SCHEMA`, otherwise `CONFIG_SCHEMA`. From 1084768cd488f03c4918955b83963a1418b3d51d Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Mon, 16 Jan 2017 22:20:13 -0800 Subject: [PATCH 022/103] Release 0.36.1 --- _config.yml | 6 ++-- ...17-01-14-iss-usps-images-packages.markdown | 32 ++++++++++++++----- 2 files changed, 27 insertions(+), 11 deletions(-) diff --git a/_config.yml b/_config.yml index 103288c959b..7757ff45185 100644 --- a/_config.yml +++ b/_config.yml @@ -131,9 +131,9 @@ social: # Home Assistant release details current_major_version: 0 current_minor_version: 36 -current_patch_version: 0 -date_released: 2017-01-15 +current_patch_version: 1 +date_released: 2017-01-17 # 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: "#" +patch_version_notes: "#release-0361---january-17" diff --git a/source/_posts/2017-01-14-iss-usps-images-packages.markdown b/source/_posts/2017-01-14-iss-usps-images-packages.markdown index 7094c3f3202..beab4c9407d 100644 --- a/source/_posts/2017-01-14-iss-usps-images-packages.markdown +++ b/source/_posts/2017-01-14-iss-usps-images-packages.markdown @@ -13,10 +13,10 @@ og_image: /images/blog/2016-01-0.36/social.png Welcome to 2017 and 0.36. We are proud to announce the first release for this year. While we are still migrating parts to async but 0.36 is focusing on new features and a lot of bug fixes. -## {% linkable_title Packages %} +### {% linkable_title Packages %} [Packages][packages] are providing a new way to organize different component's configuration parts together. With packages we offer the option to include different components or parts of configuration using any of the `!include` directives. -## {% linkable_title InfluxDB export %} +### {% linkable_title InfluxDB export %} The [InfluxDB][influx] component was causing problems in a wide variety of use cases. [@titilambert] improved our InfluxDB exporter feature. It might be that you need to run the [migration script](/components/influxdb/#migration-script) to update your InfluxDB database. ```bash @@ -25,16 +25,17 @@ $ hass --script influxdb_migrator \ -d INFLUXDB_DB_NAME ``` -## {% linkable_title International Space Station (ISS) %} +### {% linkable_title International Space Station (ISS) %} No, unfortunately we are not going to space. The `iss` sensor is tracking the position of the International Space Station and gives you some details. -## {% linkable_title Insteon local %} +### {% linkable_title Insteon local %} The support for Insteon was removed due to issues a while ago. With the `insteon_local` component support for [Insteon][insteon] is back and let one work locally with an Insteon setup. -## {% linkable_title Image processing %} +### {% linkable_title Image processing %} The new [image processing component][image] currently works with [number plates][plates]. But this could level the way to integrate feature like facial recognition, motion detection, or gestures control. ## {% linkable_title All changes %} + - Sensor: Support for [HydroQuebec][quebec] ([@titilambert]) - Sensor: Tracking the [ISS][iss] ([@HydrelioxGitHub]) - Sensor: [USPS][usps] deliveries tracking ([@happyleavesaoc]) @@ -72,7 +73,19 @@ The new [image processing component][image] currently works with [number plates] - Media player: Support for `SUPPORT_PLAY` flag ([@armills]) - Minor and not so minor features and bug fixes by [@balloob], [@pvizeli], [@fabaff], [@mezz64], [@andrey-git], [@aequitas], [@abmantis], [@turbokongen], [@jabesq], [@michaelarnauts], [@kellerza], [@titilambert], [@btorresgil], [@henworth], [@armills], [@mjg59], [@Giannie], [@n8henrie], [@magicus], [@florianholzapfel], [@MrMep], [@bah2830], [@happyleavesaoc], [@lwis], [@glance-], [@markferry], and [@nikdoof]. -## {% linkable_title Breaking changes %} +### {% linkable_title Release 0.36.1 - January 17 %} + + - Fix load_yaml default value ([@balloob]) + - Fix discovery of flux_led ([@Danielhiversen]) + - Fix Python Nest dependency re-installation ([@Danielhiversen]) + - Make USPS to use absolute path to save cookie ([@tchellomello]) + - Fix UPC_connect cookies ([@pvizeli]) + - Fix Eq3bt import issues ([@rytilahti]) + - Fix Bluetooth and Volvo trackers ([@pvizeli]) + - Fix lannouncer notify platform ([@mKeRix]) + +### {% linkable_title Breaking changes %} + - [APNS][apns] service was moved to the `notify` domain. Use `notify.apns_NOTIFIER_NAME` instead of `apns.NOTIFIER_NAME`. - [InfluxDB][influx] component has a new [schema](/components/influxdb/#data-migration) to store values in the InfluxDB database. You may require to run the [`influxdb_migrator`](/components/influxdb/#migration-script) script. You have to note: @@ -84,12 +97,15 @@ The new [image processing component][image] currently works with [number plates] - Fields named state will always be stored as string. - TTS cache files use now the language abbreviation as part of the name. If you want to use the cache, it need to be renamed or cleared, new created. E. g. `HASH_PLATFORM.xxx` -> `HASH_LANG_PLATFORM.xxx`. -## {% linkable_title If you need help... %} +### {% linkable_title If you need help... %} ...don't hesitate to use our [Forum](https://community.home-assistant.io/) or join us for a little [chat](https://gitter.im/home-assistant/home-assistant). The release notes have comments enabled but it's preferred if you use the former communication channels. Thanks. -## {% linkable_title Reporting Issues %} +### {% linkable_title Reporting Issues %} Experiencing issues introduced by this release? Please report them in our [issue tracker](https://github.com/home-assistant/home-assistant/issues). Make sure to fill in all fields of the issue template. +[@tchellomello]: https://github.com/tchellomello +[@rytilahti]: https://github.com/rytilahti +[@mKeRix]: https://github.com/mKeRix [@abmantis]: https://github.com/abmantis [@aequitas]: https://github.com/aequitas [@andrey-git]: https://github.com/andrey-git From 40cf33809474d2d6358a7e81ba6c314f5f74ab0f Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Tue, 17 Jan 2017 07:57:05 +0100 Subject: [PATCH 023/103] Make title shorter --- source/_components/sensor.bom.markdown | 2 +- source/_components/weather.bom.markdown | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/source/_components/sensor.bom.markdown b/source/_components/sensor.bom.markdown index 793da252e66..0bbcff19c12 100644 --- a/source/_components/sensor.bom.markdown +++ b/source/_components/sensor.bom.markdown @@ -1,6 +1,6 @@ --- layout: page -title: "Bureau of Meteorology (BOM) Australia" +title: "BOM Australia Sensor" description: "Instructions on how to integrate Bureau of Meteorology Australia weather conditions into Home Assistant." date: 2016-09-13 18:00 sidebar: true diff --git a/source/_components/weather.bom.markdown b/source/_components/weather.bom.markdown index ac0c378a7e1..8107a84ae74 100644 --- a/source/_components/weather.bom.markdown +++ b/source/_components/weather.bom.markdown @@ -1,6 +1,6 @@ --- layout: page -title: "Bureau of Meteorology (BOM) Australia" +title: "BOM Australia" description: "Instructions on how to integrate Bureau of Meteorology Australia weather conditions into Home Assistant." date: 2016-09-29 09:00 sidebar: true From 321f7a34cfa476812c6ba7a272e1e6c6dfa934ce Mon Sep 17 00:00:00 2001 From: Justin Dray Date: Tue, 17 Jan 2017 16:59:06 +1000 Subject: [PATCH 024/103] Update Samsung tv compatibility list (#1799) --- source/_components/media_player.samsungtv.markdown | 1 + 1 file changed, 1 insertion(+) diff --git a/source/_components/media_player.samsungtv.markdown b/source/_components/media_player.samsungtv.markdown index 7d7daa2b89b..6d0221e4da8 100644 --- a/source/_components/media_player.samsungtv.markdown +++ b/source/_components/media_player.samsungtv.markdown @@ -55,6 +55,7 @@ Currently tested but not working models: - H6400 - Shows in GUI but unable to control. - J5200 - Unable to see state and unable to control - JU6400 - Shows in GUI but unable to control +- KU6000 - Shows in the GUI but unable to control If your model is not on the list then give it a test, if everything works correctly then add it to the list on [GitHub](https://github.com/home-assistant/home-assistant.github.io/tree/current/source/_components/media_player.samsungtv.markdown). The first letter (U, P, L, H & K) represent the screen type, e.g. LED or Plasma. The second letter represents the region, E is Europe, N is North America and A is Asia & Australia. The two numbers following that represent the screen size. From bb0446016a76b1954c980b047207773f963c7417 Mon Sep 17 00:00:00 2001 From: Bryce Edwards Date: Tue, 17 Jan 2017 00:59:42 -0600 Subject: [PATCH 025/103] Add upnp_bind_multicast option to emulated_hue component (#1798) --- source/_components/emulated_hue.markdown | 1 + 1 file changed, 1 insertion(+) diff --git a/source/_components/emulated_hue.markdown b/source/_components/emulated_hue.markdown index 16251cf164e..8c622ce7cc8 100644 --- a/source/_components/emulated_hue.markdown +++ b/source/_components/emulated_hue.markdown @@ -42,6 +42,7 @@ Configuration variables: - **type** (*Optional*): The type of assistant who we are emulated for. Either `alexa` or `google_home`. - **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. - **off_maps_to_on_domains** (*Optional*): The domains that maps an "off" command to an "on" command. For example, if `script` is included in the list, and you ask Alexa to "turn off the *water plants* script," the command will be handled as if you asked her to turn on the script. From 6a22aa665180fdebe91ed1bf819d41c529e3a0ef Mon Sep 17 00:00:00 2001 From: Corban Mailloux Date: Tue, 17 Jan 2017 02:00:17 -0500 Subject: [PATCH 026/103] Typo fixes in TTS docs. (#1796) --- source/_components/tts.markdown | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/source/_components/tts.markdown b/source/_components/tts.markdown index 3578244078f..406d3d3cae8 100644 --- a/source/_components/tts.markdown +++ b/source/_components/tts.markdown @@ -55,7 +55,7 @@ service: tts.google_say data: message: 'May the Force be with you.' ``` -Say to the `media_player.floor` device entitie: +Say to the `media_player.floor` device entity: ```yaml service: tts.google_say @@ -64,7 +64,7 @@ data: message: 'May the Force be with you.' ``` -Say to the `media_player.floor` device entitie in french: +Say to the `media_player.floor` device entity in French: ```yaml service: tts.google_say @@ -85,4 +85,4 @@ data_template: ## {% linkable_title Cache %} -The component have two caches. Both caches can be controlled with the `cache` option in the platform configuration or the service call `say`. A long time cache will be located on the file system. The in-memory cache for fast responses to media players will be auto-cleaned after a short period. +The component has two caches. Both caches can be controlled with the `cache` option in the platform configuration or the service call `say`. A long time cache will be located on the file system. The in-memory cache for fast responses to media players will be auto-cleaned after a short period. From 7cd5ee3112b0c84310a5d1f506660a7a07c119ab Mon Sep 17 00:00:00 2001 From: J-CMartin Date: Tue, 17 Jan 2017 01:01:12 -0600 Subject: [PATCH 027/103] All in One documentation - WinSCP section update (#1795) Added some more verbiage as how to properly configure WinSCP to be able to access the folder structure under .homeassistant with the ability to edit the config files using WinSCP. It took me a bit to find that SCP protocol needed to be selected when creating a new session, so I edited the last paragraph to add that requirement and make it easier for first time installers. --- .../installation-raspberry-pi-all-in-one.markdown | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/source/getting-started/installation-raspberry-pi-all-in-one.markdown b/source/getting-started/installation-raspberry-pi-all-in-one.markdown index 5d4f687a268..b26a97cacfb 100644 --- a/source/getting-started/installation-raspberry-pi-all-in-one.markdown +++ b/source/getting-started/installation-raspberry-pi-all-in-one.markdown @@ -109,4 +109,6 @@ The (**homeassistant**)user is added to the GPIO group as part of the install no ### {% linkable_title WinSCP %} -If you are Windows users who is using [WinSCP](https://winscp.net/), please note that after running the installer, you will need to modify settings allowing you to "switch users" to edit your configuration files. The needed change within WinSCP is: **Environment** -> **SCP/Shell** -> **Shell** and set it to `sudo su -`. +If you are Windows users who is using [WinSCP](https://winscp.net/), please note that after running the installer, you will need to modify settings allowing you to "switch users" to edit your configuration files. + +First create a new session on WinSCP using Protocol **SCP** pointing to your Pi IP address and port 22 and then modify the needed setting by click on **Advanced...** -> **Environment** -> **SCP/Shell** -> **Shell** and selecting `sudo su -`. From c1aeb7ed5564f3a9eebbdec98e5cf7359c86527c Mon Sep 17 00:00:00 2001 From: Alex Date: Tue, 17 Jan 2017 08:02:12 +0100 Subject: [PATCH 028/103] Update systemd unit file for virtualenv (#1785) The current systemd unit file will provoke an error because the 'ExecPre' line calls a shell built-in function and all systemd Execs need to use an absolute path. the proposed change sets the python environment using the provided 'Environment' calls as used by systemd. --- source/getting-started/autostart-systemd.markdown | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/source/getting-started/autostart-systemd.markdown b/source/getting-started/autostart-systemd.markdown index 5e473f49351..93f744ea1ea 100644 --- a/source/getting-started/autostart-systemd.markdown +++ b/source/getting-started/autostart-systemd.markdown @@ -45,7 +45,9 @@ After=network.target [Service] Type=simple User=homeassistant -ExecStartPre=source /srv/homeassistant/homeassistant_venv/bin/activate +#make sure the virtualenv python binary is used +Environment=VIRTUAL_ENV="/srv/homeassistant/homeassistant_venv" +Environment=PATH="$VIRTUAL_ENV/bin:$PATH" ExecStart=/srv/homeassistant/homeassistant_venv/bin/hass -c "/home/homeassistant/.homeassistant" [Install] From c065258549dd211c9f0b92fe6a9daa6f93f59f8c Mon Sep 17 00:00:00 2001 From: Michael Luggen Date: Tue, 17 Jan 2017 08:02:49 +0100 Subject: [PATCH 029/103] Update z-wave.markdown (#1784) --- source/getting-started/z-wave.markdown | 3 +++ 1 file changed, 3 insertions(+) diff --git a/source/getting-started/z-wave.markdown b/source/getting-started/z-wave.markdown index 8e0e7ebc224..01c45f1b787 100644 --- a/source/getting-started/z-wave.markdown +++ b/source/getting-started/z-wave.markdown @@ -93,6 +93,9 @@ Or, on some other systems (such as Raspberry Pi), use: ```bash $ ls /dev/ttyACM* + +# If `hass` runs with another user (e.g. *homeassistant* on Hassbian) give access to the stick with: +$ sudo usermod -a -G dialout homeassistant ``` Or, on some other systems (such as Pine 64), use: From 3d24514cfc711dbd0eb1a2e9d4ce682547dc2d67 Mon Sep 17 00:00:00 2001 From: lee-js Date: Tue, 17 Jan 2017 19:50:22 +0000 Subject: [PATCH 030/103] Exaple code fixed (#1805) Example config caused hass to fail to start. Corrected and confirmed working. --- source/_components/light.yeelight.markdown | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/_components/light.yeelight.markdown b/source/_components/light.yeelight.markdown index d8077071cc7..deaf332af8a 100644 --- a/source/_components/light.yeelight.markdown +++ b/source/_components/light.yeelight.markdown @@ -19,11 +19,11 @@ To enable those lights, add the following lines to your `configuration.yaml` fil ```yaml # Example configuration.yaml entry light: - platform: yeelight + - platform: yeelight devices: 192.168.1.25: name: Front Door - 192.168.1.13 + 192.168.1.13: name: Living Room ``` From a19afd2a8d971ba6ec708f45b1c2eec4bc6e66f5 Mon Sep 17 00:00:00 2001 From: Justin Dray Date: Wed, 18 Jan 2017 05:51:28 +1000 Subject: [PATCH 031/103] Updated supported TV list and update port info (#1800) Updated port information to cover 2016+ TVs that are supported as of this week. I've removed the similar model TVs that had the same issue as mine (KU6000), that being they were modern ones using a websocket interface on a different port to the old ones. --- source/_components/media_player.samsungtv.markdown | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/source/_components/media_player.samsungtv.markdown b/source/_components/media_player.samsungtv.markdown index 6d0221e4da8..9d9b7ed17b1 100644 --- a/source/_components/media_player.samsungtv.markdown +++ b/source/_components/media_player.samsungtv.markdown @@ -30,7 +30,7 @@ media_player: Configuration variables: - **host** (*Required*): The IP of the Samsung Smart TV, eg. `192.168.0.10`. -- **port** (*Optional*): The port of the Samsung Smart TV. Defaults to 55000. +- **port** (*Optional*): The port of the Samsung Smart TV. Defaults to 55000. If set to 8001, the new websocket connection will be used (required for 2016+ TVs). - **name** (*Optional*): The name you would like to give to the Samsung Smart TV. - **timeout** (*Optional*): The time-out for the communication with the TV. Defaults to 0. @@ -51,14 +51,12 @@ Currently known supported models: Currently tested but not working models: -- KU6300 - Shows in GUI but unable to control. -- H6400 - Shows in GUI but unable to control. - J5200 - Unable to see state and unable to control -- JU6400 - Shows in GUI but unable to control -- KU6000 - Shows in the GUI but unable to control If your model is not on the list then give it a test, if everything works correctly then add it to the list on [GitHub](https://github.com/home-assistant/home-assistant.github.io/tree/current/source/_components/media_player.samsungtv.markdown). The first letter (U, P, L, H & K) represent the screen type, e.g. LED or Plasma. The second letter represents the region, E is Europe, N is North America and A is Asia & Australia. The two numbers following that represent the screen size. If you add your model remember to remove these before adding them to the list. +Currently the ability to select a source is not implemented. + There's currently a [known issue](https://github.com/home-assistant/home-assistant/issues/2098) with some TV's receiving a *Key press UP* that can interrupt certain applications. From e1cf7a99ab43f20798d30fc983c3be844800ea66 Mon Sep 17 00:00:00 2001 From: officiallybob Date: Tue, 17 Jan 2017 14:54:07 -0500 Subject: [PATCH 032/103] Update sensor.usps.markdown (#1803) * Update sensor.usps.markdown Added more information on Opting In to MY USPS. * Update sensor.usps.markdown --- source/_components/sensor.usps.markdown | 1 + 1 file changed, 1 insertion(+) diff --git a/source/_components/sensor.usps.markdown b/source/_components/sensor.usps.markdown index 20594513dbf..edab8c42190 100644 --- a/source/_components/sensor.usps.markdown +++ b/source/_components/sensor.usps.markdown @@ -13,6 +13,7 @@ ha_release: 0.36 --- The `usps` platform allows one to track deliveries by the [US Postal Service (USPS)](https://www.usps.com/). +In addition to having a USPS account, you will need to complete the "Opt-In" process by clicking "Get Started Now" on [this page](https://my.usps.com/mobileWeb/pages/intro/start.action). Currently, you also will need to have a package listed in the "Package Dashboard" in order for the component to complete set-up. To enable this sensor, add the following lines to your `configuration.yaml`: From e19f20b2032d78f740a61294df05a531f8ffa9f9 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Tue, 17 Jan 2017 14:36:13 +0100 Subject: [PATCH 033/103] Add section for Docker Hub --- source/developers/releasing.markdown | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/source/developers/releasing.markdown b/source/developers/releasing.markdown index 1525f30b0e6..c651002b450 100644 --- a/source/developers/releasing.markdown +++ b/source/developers/releasing.markdown @@ -29,6 +29,10 @@ This page describes the steps for publishing a new Home Assistant release. 5. Merge `current` into `next` (`$ git checkout next && git merge current`) to make the PR mergeable. 6. Merge pull request (blog post, updated frontpage, and all new documentation) to `current`. +### {% linkable_title Docker Hub %} + +Create a new [tag](https://hub.docker.com/r/homeassistant/home-assistant/tags/) at https://hub.docker.com for the release. + ### {% linkable_title Python Package Index %} Checkout the `master` branch and run `script/release` to publish the new release on [Python Package Index](https://pypi.python.org). From b37fb0a38ae2eeb6b45be8792eb8bfa52769008d Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Wed, 18 Jan 2017 08:18:12 +0100 Subject: [PATCH 034/103] Add variable description and other minor changes --- .../_components/device_tracker.swisscom.markdown | 9 ++++++--- .../device_tracker.upc_connect.markdown | 14 +++++++++----- 2 files changed, 15 insertions(+), 8 deletions(-) diff --git a/source/_components/device_tracker.swisscom.markdown b/source/_components/device_tracker.swisscom.markdown index e7931976677..bee21be205f 100644 --- a/source/_components/device_tracker.swisscom.markdown +++ b/source/_components/device_tracker.swisscom.markdown @@ -13,7 +13,7 @@ ha_release: 0.32 --- -The `swisscom` platform offers presence detection by looking at connected devices to an [Internet-Box](https://www.swisscom.ch/en/residential/help/device/internet-router.html) router from [Swisscom](https://www.swisscom.ch), which is the main Internet provider in Switzerland. +The `swisscom` platform offers presence detection by looking at connected devices to an [Internet-Box](https://www.swisscom.ch/en/residential/help/device/internet-router.html) router from [Swisscom](https://www.swisscom.ch) which is an Internet provider in Switzerland.

      There are three models of Internet-Box (light, standard and plus). The platform has only been tested on the Internet-Box plus but the others should work as well because they have the same web interface. @@ -24,8 +24,11 @@ To use an Internet-Box router in your installation, add the following to your `c ```yaml # Example configuration.yaml entry device_tracker: - platform: swisscom - host: "192.168.1.1" # only required if not 192.168.1.1 + - platform: swisscom ``` +Configuration variables: + +- **host** (*Optional*): The IP address of your router. Set it if you are not using `192.168.1.1`. + See the [device tracker component page](/components/device_tracker/) for instructions how to configure the people to be tracked. diff --git a/source/_components/device_tracker.upc_connect.markdown b/source/_components/device_tracker.upc_connect.markdown index b66dad89fa0..7302fb818d3 100644 --- a/source/_components/device_tracker.upc_connect.markdown +++ b/source/_components/device_tracker.upc_connect.markdown @@ -13,16 +13,20 @@ ha_release: 0.36 --- -The `upc_connect` platform offers presence detection by looking at connected devices to an [ConnectBox](https://www.upc.ch/de/internet/connectbox/) router from [Liberty Global](http://www.libertyglobal.com/), which is a Internet provider in Switzerland, Austria. +The `upc_connect` platform offers presence detection by looking at connected devices to a [Connect Box](https://www.upc.ch/de/internet/connectbox/) from [Liberty Global](http://www.libertyglobal.com/) (also known as UPC Cablecom in Switzerland) which is a Internet provider in Switzerland and Austria. -To use an Internet-Box router in your installation, add the following to your `configuration.yaml` file: +To use a Connect Box in your installation, add the following to your `configuration.yaml` file: ```yaml # Example configuration.yaml entry device_tracker: - platform: upc_connect - password: '123456' - host: "192.168.0.1" # only required if not 192.168.0.1 + - platform: upc_connect + password: YOUR_PASSWORD ``` +Configuration variables: + +- **password** (*Required*): The password for your Connect Box. +- **host** (*Optional*): The IP address of your router. Set it if you are not using `192.168.0.1`. + See the [device tracker component page](/components/device_tracker/) for instructions how to configure the people to be tracked. From fda68bef2597cb479a99fd5f5f40d95c49487fe9 Mon Sep 17 00:00:00 2001 From: Teemu R Date: Wed, 18 Jan 2017 08:24:02 +0100 Subject: [PATCH 035/103] Update eq3btsmart doc for new features (#1618) * WIP: Update eq3btsmart for new features This is WIP as it requires a revamped backend library, and should not be merged before the changes to the backend are done. See https://github.com/bimbar/bluepy_devices/pull/6 for details. * Update climate.eq3btsmart.markdown simplify the documentation, there is no need to pair the device. --- .../_components/climate.eq3btsmart.markdown | 50 ++++++------------- 1 file changed, 16 insertions(+), 34 deletions(-) diff --git a/source/_components/climate.eq3btsmart.markdown b/source/_components/climate.eq3btsmart.markdown index 127f32edb59..39915d97238 100644 --- a/source/_components/climate.eq3btsmart.markdown +++ b/source/_components/climate.eq3btsmart.markdown @@ -12,47 +12,29 @@ ha_category: Climate ha_iot_class: "Local Poll" --- - The `eq3btsmart` climate platform allows you to integrate EQ3 Bluetooth Smart Thermostats. -The only functionality is to set the temperature, there doesn't seem to be any way to query the temperature sensor or battery level ([read more](https://forum.fhem.de/index.php/topic,39308.15.html)). +The current functionality allows setting the temperature as well as controlling the supported modes with help of [python-eq3bt](https://github.com/rytilahti/python-eq3bt) library. +As the device doesn't contain a temperature sensor ([read more](https://forum.fhem.de/index.php/topic,39308.15.html)), +we report target temperature also as current one. -Setup is a bit more cumbersome than for most other thermostats. It has to be paired first: +### Testing the connectivity ### +Before configuring Home Assistant you should check that connectivity with the thermostat is working, which can can be done with the eq3cli tool: ```bash -bluetoothctl -scan on - -scan off - -pair -trust -disconnect -exit -``` +eq3cli --mac 00:11:22:33:44:55 -Then check with gatttool if the connection works as expected: - -```bash -gatttool -b 00:11:22:33:44:55 -I -[00:11:22:33:44:55][LE]> connect -Attempting to connect to 00:11:22:33:44:55 -Connection successful -[00:11:22:33:44:55][LE]> char-write-req 0x0411 03 -Characteristic value was written successfully -Notification handle = 0x0421 value: 02 01 09 14 04 2d -[00:11:22:33:44:55][LE]> disconnect -[00:11:22:33:44:55][LE]> exit -``` - -Important: For gatttool or homeassistant to work, the thermostat needs to be disconnected from bluetoothd, so I found it best to modify the hass-daemon startscript by adding: - -```bash -/usr/bin/bt-device -d CC-RT-BLE -``` - -to the start function of /etc/init.d/hass-daemon. +[00:1A:22:XX:XX:XX] Target 17.0 (mode: auto dst, away: no) +Locked: False +Batter low: False +Window open: False +Boost: False +Current target temp: 21.0 +Current mode: auto dst +Valve: 0 +``` +### Configuration ### ```yaml # Example configuration.yaml entry From 37670c3912a160ae9eb42907fdae1aa7f12cc2f8 Mon Sep 17 00:00:00 2001 From: diplix Date: Wed, 18 Jan 2017 08:25:24 +0100 Subject: [PATCH 036/103] add instructions for macOS vlc configuration (#1810) https://community.home-assistant.io/t/audio-media-player-to-local-audio-out/9714/4?u=diplix --- source/_components/media_player.vlc.markdown | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/source/_components/media_player.vlc.markdown b/source/_components/media_player.vlc.markdown index 78d2971daee..8a9b6b48522 100644 --- a/source/_components/media_player.vlc.markdown +++ b/source/_components/media_player.vlc.markdown @@ -44,3 +44,11 @@ media_player: name: speaker_1 arguments: '--alsa-audio-device=hw:1,0' ``` + +##### {% 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: + +```bash +export VLC_PLUGIN_PATH=$VLC_PLUGIN_PATH:/Applications/VLC.app/Contents/MacOS/plugins +``` From bb9e6c0f49f6f33c7be29ff6b33b015b214af004 Mon Sep 17 00:00:00 2001 From: Teemu R Date: Wed, 18 Jan 2017 08:26:15 +0100 Subject: [PATCH 037/103] Update switch.flux.markdown (#1809) Document -1 for brightness. --- source/_components/switch.flux.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/switch.flux.markdown b/source/_components/switch.flux.markdown index 886625d1404..efb8b1371e3 100644 --- a/source/_components/switch.flux.markdown +++ b/source/_components/switch.flux.markdown @@ -48,6 +48,6 @@ Configuration variables: - **start_colortemp** (*Optional*): The color temperature at the start. Defaults to `4000`. - **sunset_colortemp** (*Optional*): The sun set color temperature. Defaults to `3000`. - **stop_colortemp** (*Optional*): The color temperature at the end. Defaults to `1900`. -- **brightness** (*Optional*): The brightness of the lights. Calculated with `RGB_to_xy` by default. +- **brightness** (*Optional*): The brightness of the lights. Calculated with `RGB_to_xy` by default. Setting to -1 disables brightness updates. - **mode** (*Optional*): Select how color temperature is passed to lights. Valid values are `xy` and `mired`. Defaults to `xy`. From 12ff2bfd0374ab8ff366956f97d17e031b3924e5 Mon Sep 17 00:00:00 2001 From: Brent Saltzman Date: Wed, 18 Jan 2017 01:28:52 -0600 Subject: [PATCH 038/103] Updated URL for Foscam CGI guide. (#1808) Former URL is now 404'ing. --- source/_cookbook/foscam_away_mode_PTZ.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_cookbook/foscam_away_mode_PTZ.markdown b/source/_cookbook/foscam_away_mode_PTZ.markdown index ab6a334e563..e24be64f1c9 100644 --- a/source/_cookbook/foscam_away_mode_PTZ.markdown +++ b/source/_cookbook/foscam_away_mode_PTZ.markdown @@ -10,7 +10,7 @@ footer: true ha_category: Automation Examples --- -This requires a [Foscam IP Camera](/components/camera.foscam/) camera with PTZ (Pan, Tilt, Zoom) and CGI functionality ([Source](http://www.ipcamcontrol.net/files/Foscam%20IPCamera%20CGI%20User%20Guide-V1.0.4.pdf)) +This requires a [Foscam IP Camera](/components/camera.foscam/) camera with PTZ (Pan, Tilt, Zoom) and CGI functionality ([Source](http://www.foscam.es/descarga/Foscam-IPCamera-CGI-User-Guide-AllPlatforms-2015.11.06.pdf)) Foscam Cameras can be controlled by Home Assistant through a number of CGI commands. The following outlines examples of the switch, services, and scripts required to move between 2 preset destinations while controlling motion detection, but many other options of movement are provided in the Foscam CGI User Guide linked above. From cd22d296c9edd8615f6758474cbdc21a6d79926d Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Wed, 18 Jan 2017 18:03:49 +0100 Subject: [PATCH 039/103] Add number blog post --- source/_posts/2017-01-18-numbers.markdown | 25 +++++++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 source/_posts/2017-01-18-numbers.markdown diff --git a/source/_posts/2017-01-18-numbers.markdown b/source/_posts/2017-01-18-numbers.markdown new file mode 100644 index 00000000000..8cbdf4f8a19 --- /dev/null +++ b/source/_posts/2017-01-18-numbers.markdown @@ -0,0 +1,25 @@ +--- +layout: post +title: "Numbers" +description: "Numbers, lists, etc." +date: 2017-01-18 08:04:05 +0000 +date_formatted: "January 18, 2017" +author: Fabian Affolter +author_twitter: fabaff +comments: true +categories: Community +--- + +It's week 3 of 2017 and great things did already happen. This is just a little recap. + +- In the [OSS Metrics leaderboard](https://ossmetrics.com/leaderboard) we are on place 30. Within three months we moved from our starting place which was 66 in September 2016 up to the current one. +- We were listed on [Github Trending](https://github.com/trending/python). Also, was [@balloob](https://github.com/balloob) mentioned as trending developer. +- [@balloob](https://github.com/balloob)'s talk at the OpenIoT Summit 2016 was rated as one of the [Top 5 videos](http://technewsdir.com/top-5-videos-from-embedded-linux-conference-and-openiot-summit-2016) of the conference. +- We now ship over [500](/components/#all) components and platforms. +- We processed over 3500 Pull requests on the [main repository](https://github.com/home-assistant/home-assistant) so far. + +You may ask yourself why this is amazing. It's amazing because we are a community-only project driven by volunteers there is no financial support, no company in the background, and no paid developers who are working on Home Assistant. Here is another "Thank you" because you are the driving force behind Home Assistant. + +What more numbers? Checkout the [Trivia page](/help/trivia/#numbers)... + +-- Fabian From ad022c41a2b36dbf60964c5ecb90a4978382e7ef Mon Sep 17 00:00:00 2001 From: Pascal Vizeli Date: Wed, 18 Jan 2017 21:09:13 +0100 Subject: [PATCH 040/103] Update image_processing.openalpr_local.markdown --- .../_components/image_processing.openalpr_local.markdown | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/source/_components/image_processing.openalpr_local.markdown b/source/_components/image_processing.openalpr_local.markdown index 11e8818445a..4fa919cd90c 100644 --- a/source/_components/image_processing.openalpr_local.markdown +++ b/source/_components/image_processing.openalpr_local.markdown @@ -35,11 +35,11 @@ $ wget -O- -q http://plates.openalpr.com/h786poj.jpg | alpr - ### {% linkable_title Configuration Home Assistant %} + ```yaml # Example configuration.yaml entry image_processing: - platform: openalpr_cloud - api_key: 'sk_abcxyz123456' region: eu source: - entity_id: camera.garage @@ -47,8 +47,9 @@ image_processing: Configuration variables: - **region** (*Required*): Country or region. List of supported [values](https://github.com/openalpr/openalpr/tree/master/runtime_data/config). -- **api_key** (*Required*): You need an API key from [OpenALPR Cloud](https://cloud.openalpr.com/). -- **confidence** (*Optional*): The minimum of confidence in percent to process with Home Assistant. Defaults to 80. +- **alpr_bin** (*Optional*): The command line tool alpr from OpenALPR software for local processing. Defaults to `alpr`. +- **confidence** (*Optional*): The minimum of confidence in percent to process with Home Assistant. Defaults to 80. - **source** array (*Required*): List of image sources. - **entities** (*Required*): A list of devices to add in Home Assistant. - **name** (*Optional*): This parameter allows you to override the name of your OpenALPR entity. + From 3dabf3df68c02fd36aaac793f948ab60d62972ec Mon Sep 17 00:00:00 2001 From: Pascal Vizeli Date: Wed, 18 Jan 2017 21:09:22 +0100 Subject: [PATCH 041/103] Update image_processing.openalpr_cloud.markdown --- source/_components/image_processing.openalpr_cloud.markdown | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/source/_components/image_processing.openalpr_cloud.markdown b/source/_components/image_processing.openalpr_cloud.markdown index cb856a44890..366578664d6 100644 --- a/source/_components/image_processing.openalpr_cloud.markdown +++ b/source/_components/image_processing.openalpr_cloud.markdown @@ -21,6 +21,7 @@ ha_release: 0.36 # Example configuration.yaml entry image_processing: - platform: openalpr_cloud + api_key: 'sk_abcxyz123456' region: eu source: - entity_id: camera.garage @@ -28,8 +29,8 @@ image_processing: Configuration variables: - **region** (*Required*): Country or region. List of supported [values](https://github.com/openalpr/openalpr/tree/master/runtime_data/config). -- **alpr_bin** (*Optional*): The command line tool alpr from OpenALPR software for local processing. Defaults to `alpr`. -- **confidence** (*Optional*): The minimum of confidence in percent to process with Home Assistant. Defaults to 80. +- **api_key** (*Required*): You need an API key from [OpenALPR Cloud](https://cloud.openalpr.com/). +- **confidence** (*Optional*): The minimum of confidence in percent to process with Home Assistant. Defaults to 80. - **source** array (*Required*): List of image sources. - **entities** (*Required*): A list of devices to add in Home Assistant. - **name** (*Optional*): This parameter allows you to override the name of your OpenALPR entity. From 714b48711ce8bf875f1102db065bf2b60cf8b276 Mon Sep 17 00:00:00 2001 From: Pascal Vizeli Date: Wed, 18 Jan 2017 21:40:38 +0100 Subject: [PATCH 042/103] Update image_processing.markdown --- 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 9c07aff9bac..f51af982b57 100644 --- a/source/_components/image_processing.markdown +++ b/source/_components/image_processing.markdown @@ -26,7 +26,7 @@ automation: - alias: Open garage door trigger: platform: event - event_type: openalpr.found + event_type: found_plate event_data: entity_id: openalpr.camera_garage_1 plate: BE2183423 From 5fd472537442f02cf1a45d87ac77cf49ffac9ffe Mon Sep 17 00:00:00 2001 From: Ryan Parrish Date: Thu, 19 Jan 2017 01:50:55 -0500 Subject: [PATCH 043/103] Add missing '1' to clarify the example. (#1815) --- source/_components/sensor.mqtt_room.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/sensor.mqtt_room.markdown b/source/_components/sensor.mqtt_room.markdown index 5d7da7a5d68..4e6446cc5d3 100644 --- a/source/_components/sensor.mqtt_room.markdown +++ b/source/_components/sensor.mqtt_room.markdown @@ -34,7 +34,7 @@ Configuration variables: - **device_id** (*Required*): The device id to track for this sensor. - **name** (*Optional*): The name of the sensor. - **state_topic** (*Optional*): The topic that contains all subtopics for the rooms. -- **timeout** (*Optional*): The time in seconds after which a room presence state is considered old. An example: device1 is reported at scanner1 with a distance of 1. No further updates are sent from scanner1. After 5 seconds scanner2 reports device with a distance of 2. The old location info is discarded in favor of the new scanner2 information as the timeout has passed. +- **timeout** (*Optional*): The time in seconds after which a room presence state is considered old. An example: device1 is reported at scanner1 with a distance of 1. No further updates are sent from scanner1. After 5 seconds scanner2 reports device1 with a distance of 2. The old location info is discarded in favor of the new scanner2 information as the timeout has passed. - **away_timeout** (*Optional*): The time in seconds after which the state should be set to `away` if there were no updates. `0` disables the check and is the default. Example JSON that should be published to the room topics: From 33191734db75f6984bab7547f65fa1759a5a82d8 Mon Sep 17 00:00:00 2001 From: nodomain Date: Thu, 19 Jan 2017 07:56:08 +0100 Subject: [PATCH 044/103] Fixed mySQL config documentation (#1821) I just did not work with the description before. See also https://community.home-assistant.io/t/error-in-setting-up-recorder-with-mysql/7705/2 --- source/_components/recorder.markdown | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/source/_components/recorder.markdown b/source/_components/recorder.markdown index 373b8144d0c..b6160e56763 100644 --- a/source/_components/recorder.markdown +++ b/source/_components/recorder.markdown @@ -90,8 +90,8 @@ If you only want to hide events from e.g. your history, take a look at the [`his | Database engine | `db_url` | | :---------------|:---------------------------------------------------------| | SQLite | `sqlite:///PATH/TO/DB_NAME` | -| MySQL | `mysql://SERVER_IP/DB_NAME` | -| MySQL | `mysql://user:password@SERVER_IP/DB_NAME` | +| MySQL | `mysql+pymysql://SERVER_IP/DB_NAME` | +| MySQL           | `mysql+pymysql://user:password@SERVER_IP/DB_NAME`       | | PostgreSQL | `postgresql://SERVER_IP/DB_NAME` | | PostgreSQL | `postgresql://scott:tiger@SERVER_IP/DB_NAME` | @@ -105,8 +105,16 @@ For MySQL you may have to install a few dependencies: ```bash $ sudo apt-get install libmysqlclient-dev -$ pip3 install mysqlclient +$ pip3 install pymysql ``` +If you are in a virtual environment, don't forget to activate it before installing the pymysql package. + +```bash +pi@homeassistant:~ $ sudo -i +root@homeassistant:~# su homeassistant +homeassistant@homeassistant:/root$ cd /srv/homeassistant/homeassistant_venv/ +homeassistant@homeassistant:/srv/homeassistant/homeassistant_venv$ source bin/activate +(homeassistant_venv) homeassistant@homeassistant:/srv/homeassistant/homeassistant_venv$ pip3 install pymysql ### {% linkable_title PostgreSQL %} From 84d1090ec2a586739b44b42cfdc5f53601945079 Mon Sep 17 00:00:00 2001 From: Robbie Trencheny Date: Thu, 19 Jan 2017 11:43:15 -0800 Subject: [PATCH 045/103] Fix ha_category --- source/_components/image_processing.openalpr_cloud.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/image_processing.openalpr_cloud.markdown b/source/_components/image_processing.openalpr_cloud.markdown index 366578664d6..d56d78ccdcb 100644 --- a/source/_components/image_processing.openalpr_cloud.markdown +++ b/source/_components/image_processing.openalpr_cloud.markdown @@ -8,7 +8,7 @@ comments: false sharing: true footer: true logo: openalpr.png -ha_category: Image_Processing +ha_category: Image Processing featured: false ha_release: 0.36 --- From 58003be3209d9beb467eb3f30631f6f037d6a54b Mon Sep 17 00:00:00 2001 From: Robbie Trencheny Date: Thu, 19 Jan 2017 11:43:28 -0800 Subject: [PATCH 046/103] Fix ha_category --- source/_components/image_processing.openalpr_local.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/image_processing.openalpr_local.markdown b/source/_components/image_processing.openalpr_local.markdown index 4fa919cd90c..ecf0a36f1dc 100644 --- a/source/_components/image_processing.openalpr_local.markdown +++ b/source/_components/image_processing.openalpr_local.markdown @@ -8,7 +8,7 @@ comments: false sharing: true footer: true logo: openalpr.png -ha_category: Image_Processing +ha_category: Image Processing featured: false ha_release: 0.36 --- From fa3dfe8e3b6df15f00cf5e6361417945a224e0a4 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Thu, 19 Jan 2017 22:35:59 +0100 Subject: [PATCH 047/103] Remove wrong file (should have been fan.wink) --- source/_components/fan.nest.markdown | 30 ---------------------------- 1 file changed, 30 deletions(-) delete mode 100644 source/_components/fan.nest.markdown diff --git a/source/_components/fan.nest.markdown b/source/_components/fan.nest.markdown deleted file mode 100644 index 62f405cd8b4..00000000000 --- a/source/_components/fan.nest.markdown +++ /dev/null @@ -1,30 +0,0 @@ ---- -layout: page -title: "Nest Fan" -description: "Instructions how to integrate Nest fans within Home Assistant." -date: 2015-03-23 19:59 -sidebar: true -comments: false -sharing: true -footer: true -logo: nest.png -ha_category: Fan -ha_release: 0.29 -ha_iot_class: "Local Polling" ---- - - -The `nest` fan platform let you control a fan from [Nest](https://nest.com). - -

      -You must have the [Nest component](/components/nest/) configured to use those thermostats. -

      - -To set it up, add the following information to your `configuration.yaml` file: - -```yaml -# Example configuration.yaml entry -fan: - - platform: nest -``` - From d8483c1cfc5534aa3626924fcd4f062163763ba3 Mon Sep 17 00:00:00 2001 From: "Craig J. Ward" Date: Thu, 19 Jan 2017 16:04:22 -0600 Subject: [PATCH 048/103] Insteon local (#1829) * add documentation * insteon switch * update documentation * update documentation --- source/_components/insteon_local.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/insteon_local.markdown b/source/_components/insteon_local.markdown index 10172c55460..1b1343083a3 100644 --- a/source/_components/insteon_local.markdown +++ b/source/_components/insteon_local.markdown @@ -26,7 +26,7 @@ insteon_local: ``` Configuration variables: - +*Note: The username and password here are for the hub and are different than the ones used to access the app. You can usually find these on the bottom of your hub (unless you've changed them through the settings in the app)* - **host** (*Required*): The IP address of your hub. - **username** (*Required*): The username used to access the Insteon interface (find in your Insteon app). - **password** (*Required*): The password used to access the Insteon interface. From a47b93bf2a7ee2362c1455e6ff02d80239095d60 Mon Sep 17 00:00:00 2001 From: Jon Date: Thu, 19 Jan 2017 16:05:00 -0600 Subject: [PATCH 049/103] Update ecobee.markdown (#1828) --- source/_components/ecobee.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/ecobee.markdown b/source/_components/ecobee.markdown index 8e120b3c01a..6b5fd1d61e4 100644 --- a/source/_components/ecobee.markdown +++ b/source/_components/ecobee.markdown @@ -32,7 +32,7 @@ Now login to the regular consumer portal, and in the hamburger menu there will b 3. Give your app a name (it appears to need to be unique across all users, as I tried 'home-assistant' and it said it was already in use. Try -home-assistant) and a summary (neither of these are important as they are not used anywhere). 4. For Authorization method select **ecobee PIN**. 5. You don't need an Application Icon or Detailed Description. -6. Click **Save**. +6. Click **Create**. Now under the Name and Summary Section you will have an API key. Copy this key and use it in you configuration section below. Click the **X** to close the Developer section. From 4ebe77ce1cfe79e90d8382566cc1fcba281e82e5 Mon Sep 17 00:00:00 2001 From: Chris Aloi Date: Thu, 19 Jan 2017 17:06:46 -0500 Subject: [PATCH 050/103] Revised on, off and state parameters (#1827) Updated on, of and state parameters to reflect [docs](https://home-assistant.io/components/switch.command_line/) --- source/_cookbook/foscam_away_mode_PTZ.markdown | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/source/_cookbook/foscam_away_mode_PTZ.markdown b/source/_cookbook/foscam_away_mode_PTZ.markdown index e24be64f1c9..d5b6e9ec0de 100644 --- a/source/_cookbook/foscam_away_mode_PTZ.markdown +++ b/source/_cookbook/foscam_away_mode_PTZ.markdown @@ -25,9 +25,9 @@ switch: switches: #Switch for Foscam Motion Detection foscam_motion: - oncmd: 'curl -k "https://ipaddress:443/cgi-bin/CGIProxy.fcgi?cmd=setMotionDetectConfig&isEnable=1&usr=admin&pwd=password"' - offcmd: 'curl -k "https://ipaddress:443/cgi-bin/CGIProxy.fcgi?cmd=setMotionDetectConfig&isEnable=0&usr=admin&pwd=password"' - statecmd: 'curl -k --silent "https://ipaddress:443/cgi-bin/CGIProxy.fcgi?cmd=getMotionDetectConfig&usr=admin&pwd=password" | grep -oP "(?<=isEnable>).*?(?=)"' + command_on: 'curl -k "https://ipaddress:443/cgi-bin/CGIProxy.fcgi?cmd=setMotionDetectConfig&isEnable=1&usr=admin&pwd=password"' + command_off: 'curl -k "https://ipaddress:443/cgi-bin/CGIProxy.fcgi?cmd=setMotionDetectConfig&isEnable=0&usr=admin&pwd=password"' + command_state: 'curl -k --silent "https://ipaddress:443/cgi-bin/CGIProxy.fcgi?cmd=getMotionDetectConfig&usr=admin&pwd=password" | grep -oP "(?<=isEnable>).*?(?=)"' value_template: '{% raw %}{{ value == "1" }}{% endraw %}' ``` From 797b1a8f03a7884c0a97840a42978fec33af6cf8 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Fri, 20 Jan 2017 08:59:31 +0100 Subject: [PATCH 051/103] Add elevation (#1830) --- source/developers/rest_api.markdown | 23 +++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/source/developers/rest_api.markdown b/source/developers/rest_api.markdown index 2bdf49b707b..23f5a2e4c8b 100644 --- a/source/developers/rest_api.markdown +++ b/source/developers/rest_api.markdown @@ -77,22 +77,29 @@ Returns the current configuration as JSON. "components": [ "recorder", "http", - "sensor.time_date", + "weather.openweathermap", "api", + "websocket_api", "frontend", + "sensor.time_date", "sun", - "logbook", - "history", + "device_tracker", "group", "automation" ], - "latitude": 44.1234, + "config_dir": "/home/ha/.homeassistant", + "elevation": 590, + "latitude": 45.92, "location_name": "Home", - "longitude": 5.5678, - "unit_system": "metric", + "longitude": 6.52, "time_zone": "Europe/Zurich", - "config_dir": "/home/hass/.homeassistant", - "version": "0.8.0.dev0" + "unit_system": { + "length": "km", + "mass": "g", + "temperature": "\\u00b0C", + "volume": "L" + }, + "version": "0.37.0.dev0" } ``` From b8ea0d25bf797c9a579f987532ce6321e08d5503 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20H=C3=B8yer=20Iversen?= Date: Fri, 20 Jan 2017 16:26:52 +0100 Subject: [PATCH 052/103] Update switch.broadlink.markdown --- source/_components/switch.broadlink.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/switch.broadlink.markdown b/source/_components/switch.broadlink.markdown index ca0dfd0d8aa..64b178a02b2 100644 --- a/source/_components/switch.broadlink.markdown +++ b/source/_components/switch.broadlink.markdown @@ -34,7 +34,7 @@ Configuration variables: - **mac** (*Required*): Device mac address. - **timeout** (*Optional*): Timeout in seconds for the connection to the device - **friendly_name** (*Optional*): The name used to display the switch in the frontend. -- **types** (*Optional*): Switch type. (rm, rm2, rm_mini, rm_pro_phicomm, rm2_home_plus, rm2_home_plus_gdt, rm2_pro_plus, rm2_pro_plus2, rm2_pro_plus_bl, rm_mini_shate, sp1, sp2, honeywell_sp2, sp3, spmini2 or spminiplus) +- **type** (*Optional*): Switch type. (rm, rm2, rm_mini, rm_pro_phicomm, rm2_home_plus, rm2_home_plus_gdt, rm2_pro_plus, rm2_pro_plus2, rm2_pro_plus_bl, rm_mini_shate, sp1, sp2, honeywell_sp2, sp3, spmini2 or spminiplus) - **switches** (*Optional*): The array that contains all switches. - **identifier** (*Required*): Name of the command switch as slug. Multiple entries are possible. - **friendly_name** (*Optional*): The name used to display the switch in the frontend. From cebb0fe1c804103efcb83868efc038a54505be7e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20H=C3=B8yer=20Iversen?= Date: Fri, 20 Jan 2017 16:29:03 +0100 Subject: [PATCH 053/103] Update switch.broadlink.markdown --- source/_components/switch.broadlink.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/switch.broadlink.markdown b/source/_components/switch.broadlink.markdown index 64b178a02b2..a3233fefef9 100644 --- a/source/_components/switch.broadlink.markdown +++ b/source/_components/switch.broadlink.markdown @@ -42,7 +42,7 @@ Configuration variables: - **command_off** (*Required*): Base64 encoded packet from RM device to take for off. -How to obtain IR/RF packets? +### {% linkable_title How to obtain IR/RF packets? %} Choose Call Service from the Developer Tools. Choose the service broadlink/learn_command from the list of Available services: and hit CALL SERVICE. Press the button on your remote with in 20 seconds. The packet will be printed in the log and as a persistent notification. From 3eb541144a1a07af990f1429e8aaa9fb6e809b50 Mon Sep 17 00:00:00 2001 From: Adam Mills Date: Fri, 20 Jan 2017 15:21:11 -0500 Subject: [PATCH 054/103] Include ignore_cec in cast documentation (#1838) --- source/_components/media_player.cast.markdown | 1 + 1 file changed, 1 insertion(+) diff --git a/source/_components/media_player.cast.markdown b/source/_components/media_player.cast.markdown index cf9c6ea4dc2..52d0e1d39c0 100644 --- a/source/_components/media_player.cast.markdown +++ b/source/_components/media_player.cast.markdown @@ -28,3 +28,4 @@ media_player: Configuration variables: - **host** (*Optional*): Use only if you don't want to scan for devices. +- **ignore_cec** (*Optional*) A list of chromecasts that should ignore CEC data for determining the active input. [See the upstream documentation for more information.](https://github.com/balloob/pychromecast#ignoring-cec-data) From 05b0f0e94049378c0aa48d388fabc928fbf94cdf Mon Sep 17 00:00:00 2001 From: Roddie Hasan Date: Sat, 21 Jan 2017 11:28:06 -0600 Subject: [PATCH 055/103] Fix typo (#1843) --- source/_components/light.flux_led.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/light.flux_led.markdown b/source/_components/light.flux_led.markdown index 1fe744c16be..ddf22757d27 100644 --- a/source/_components/light.flux_led.markdown +++ b/source/_components/light.flux_led.markdown @@ -91,7 +91,7 @@ Will add a light with white mode (default). Changing the brightness will set the mode: "rgbw" ``` -Some devices such as the Ledenet RGBW controller use a slightly difference protocol for communicating the brightness to each color channel. If your device is only turning on or off but not changing color or brightness try adding the LEDENET protocol. +Some devices such as the Ledenet RGBW controller use a slightly different protocol for communicating the brightness to each color channel. If your device is only turning on or off but not changing color or brightness try adding the LEDENET protocol. ```yaml light: From 8eaa3e7f07d9b6890c0c7890e2025c52099ae484 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C3=ABl=20Arnauts?= Date: Sat, 21 Jan 2017 21:26:50 +0100 Subject: [PATCH 056/103] Update sensor.influxdb.markdown (#1845) Fix case of `influxdb` component name. --- source/_components/sensor.influxdb.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/sensor.influxdb.markdown b/source/_components/sensor.influxdb.markdown index c16839f1fa0..74300203a5c 100644 --- a/source/_components/sensor.influxdb.markdown +++ b/source/_components/sensor.influxdb.markdown @@ -12,7 +12,7 @@ ha_category: Sensor ha_release: 0.32 --- -The `InfluxDB` sensor allows you to use values from an [InfluxDB](https://influxdb.com/) database to populate a sensor state. This can be use to present statistic about home_assistant sensors if used with the `influxdb` history component. It can also be used with an external data source. +The `influxdb` sensor allows you to use values from an [InfluxDB](https://influxdb.com/) database to populate a sensor state. This can be use to present statistic about home_assistant sensors if used with the `influxdb` history component. It can also be used with an external data source. To configure this sensor, you need to define the sensor connection variables and a list of queries to your `configuration.yaml` file. A sensor will be created for each query: From 869e40569aeb0655ab986f9bdb664b85fa60bb07 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C3=ABl=20Arnauts?= Date: Sat, 21 Jan 2017 21:27:40 +0100 Subject: [PATCH 057/103] Fix recorder.markdown layout (#1844) The mysql shell example wasn't closed correcty. --- source/_components/recorder.markdown | 1 + 1 file changed, 1 insertion(+) diff --git a/source/_components/recorder.markdown b/source/_components/recorder.markdown index b6160e56763..1026ecba718 100644 --- a/source/_components/recorder.markdown +++ b/source/_components/recorder.markdown @@ -115,6 +115,7 @@ root@homeassistant:~# su homeassistant homeassistant@homeassistant:/root$ cd /srv/homeassistant/homeassistant_venv/ homeassistant@homeassistant:/srv/homeassistant/homeassistant_venv$ source bin/activate (homeassistant_venv) homeassistant@homeassistant:/srv/homeassistant/homeassistant_venv$ pip3 install pymysql +``` ### {% linkable_title PostgreSQL %} From 3682ec0e412e0494f64223d45bbcff4a4d2a59a1 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Sat, 21 Jan 2017 23:37:18 +0100 Subject: [PATCH 058/103] Add a couple of badges --- README.markdown | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/README.markdown b/README.markdown index 38c15c62b77..dc508edbd51 100644 --- a/README.markdown +++ b/README.markdown @@ -1,4 +1,9 @@ -# Home Assistant website +[![Gitter](https://img.shields.io/gitter/room/nwjs/nw.js.svg)](https://gitter.im/home-assistant/website) +[![Travis branch](https://img.shields.io/travis/home-assistant/home-assistant.github.io/next.svg)](https://travis-ci.org/home-assistant/home-assistant.github.io) +[![Krihelimeter](http://www.krihelinator.xyz/badge/home-assistant/home-assistant.github.io)](http://www.krihelinator.xyz) +[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT) + +# Home Assistant website This is the source for the [Home-Assistant.io website](https://home-assistant.io). From 7e468d59dabfd5cc38c6915bfc4ac312a573e643 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Sun, 22 Jan 2017 11:23:50 +0100 Subject: [PATCH 059/103] Fix style --- source/developers/component_visibility.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/developers/component_visibility.markdown b/source/developers/component_visibility.markdown index 610534e4440..846d6b98b3b 100644 --- a/source/developers/component_visibility.markdown +++ b/source/developers/component_visibility.markdown @@ -18,4 +18,4 @@ self.hidden = True This will SUGGEST that the active frontend hides the entity. This requires that the active frontend support hidden cards (the default frontend does) and that the value of hidden be included in your attributes dictionary (see above). The Entity abstract class will take care of this for you. -Remember: The suggestion set by your component's code will always be overwritten by user settings in the 'configuration.yaml' file. This is why you may set hidden to be False, but the property may remain True (or vice-versa). +Remember: The suggestion set by your component's code will always be overwritten by user settings in the `configuration.yaml` file. This is why you may set hidden to be `False`, but the property may remain `True` (or vice-versa). From aa3d3f8acef630bd3182822dd9f5827e5cd7e851 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adri=C3=A1n=20L=C3=B3pez?= Date: Sun, 22 Jan 2017 21:08:59 +0100 Subject: [PATCH 060/103] Fix componentes/camera link (#1853) --- 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 f51af982b57..55c693b3cd4 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 image from [cameras][/components/#camera]. Only camera entities are supported as sources. +Image processing enables Home Assistant to process image from [cameras](/components/#camera). Only camera entities are supported as sources. For interval control, use `scan_interval` in platform. From 60bc3946cb16adc35237dcb36a35b90dbeccdf8e Mon Sep 17 00:00:00 2001 From: Robbie Trencheny Date: Sun, 22 Jan 2017 16:56:49 -0800 Subject: [PATCH 061/103] Add Governance blog post, docs, update footer with Creative Commons license, add credits_generator --- CLA.md | 54 + CODE_OF_CONDUCT.md | 80 ++ LICENSE.md | 177 ++++ credits_generator/credits.mustache | 27 + credits_generator/package.json | 17 + credits_generator/update_credits.js | 155 +++ .../asides/developers_navigation.html | 12 +- source/_includes/custom/footer.html | 1 + ...7-01-21-home-assistant-governance.markdown | 101 ++ source/developers/cla.markdown | 63 ++ source/developers/cla_sign.html | 409 ++++++++ source/developers/code_of_conduct.markdown | 89 ++ source/developers/credits.markdown | 942 +++++++++++++----- source/developers/license.markdown | 37 + 14 files changed, 1900 insertions(+), 264 deletions(-) create mode 100644 CLA.md create mode 100644 CODE_OF_CONDUCT.md create mode 100644 LICENSE.md create mode 100644 credits_generator/credits.mustache create mode 100644 credits_generator/package.json create mode 100644 credits_generator/update_credits.js create mode 100644 source/_posts/2017-01-21-home-assistant-governance.markdown create mode 100644 source/developers/cla.markdown create mode 100644 source/developers/cla_sign.html create mode 100644 source/developers/code_of_conduct.markdown create mode 100644 source/developers/license.markdown diff --git a/CLA.md b/CLA.md new file mode 100644 index 00000000000..4560e3be643 --- /dev/null +++ b/CLA.md @@ -0,0 +1,54 @@ +# Contributor License Agreement + +The following terms are used throughout this agreement: + +**You** - the person or legal entity including its affiliates asked to accept this agreement. +An affiliate is any entity that controls or is controlled by the legal entity, or is under common control with it. + +**Project** - is an umbrella term that refers to any and all Home Assistant open source projects. + +**Contribution** - any type of work that is submitted to a Project, including any modifications or additions to existing work. + +**Submitted** - conveyed to a Project via a pull request, commit, issue, or any form of electronic, written, or +verbal communication with Home Assistant, contributors or maintainers. + +# 1. Grant of Copyright License. + +Subject to the terms and conditions of this agreement, You grant to the Projects’ maintainers, contributors, +users and to Home Assistant a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, +prepare derivative works of, publicly display, publicly perform, sublicense, and distribute Your contributions and such +derivative works. Except for this license, You reserve all rights, title, and interest in your contributions. + +# 2. Grant of Patent License. + +Subject to the terms and conditions of this agreement, You grant to the Projects’ maintainers, contributors, users and to +Home Assistant a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent +license to make, have made, use, offer to sell, sell, import, and otherwise transfer your contributions, where such license +applies only to those patent claims licensable by you that are necessarily infringed by your contribution or by combination of +your contribution with the project to which this contribution was submitted. + +If any entity institutes patent litigation - including cross-claim or counterclaim in a lawsuit - against You alleging that +your contribution or any project it was submitted to constitutes or is responsible for direct or contributory patent infringement, +then any patent licenses granted to that entity under this agreement shall terminate as of the date such litigation is filed. + +# 3. Source of Contribution. + +Your contribution is either your original creation, based upon previous work that, to the best of your knowledge, +is covered under an appropriate open source license and you have the right under that license to submit that work with modifications, +whether created in whole or in part by you, or you have clearly identified the source of the contribution and any license or other +restriction (like related patents, trademarks, and license agreements) of which you are personally aware. + +## Attribution + +This Contributor License Agreement is adapted from the [GitHub CLA][github-cla]. + +## Signing + +To sign this CLA you must first submit a pull request to a repository under the Home Assistant organization. + +## Adoption + +This Contributor License Agreement (CLA) was first announced on January 21st, 2017 in [this][cla-blog] blog post and adopted January 28th, 2017. + +[github-cla]: https://cla.github.com/agreement +[cla-blog]: https://home-assistant.io/blog/2017/01/21/home-assistant-governance/ diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md new file mode 100644 index 00000000000..5d2149dce05 --- /dev/null +++ b/CODE_OF_CONDUCT.md @@ -0,0 +1,80 @@ +# Contributor Covenant Code of Conduct + +## Our Pledge + +In the interest of fostering an open and welcoming environment, we as +contributors and maintainers pledge to making participation in our project and +our community a harassment-free experience for everyone, regardless of age, body +size, disability, ethnicity, gender identity and expression, level of experience, +nationality, personal appearance, race, religion, or sexual identity and +orientation. + +## Our Standards + +Examples of behavior that contributes to creating a positive environment +include: + +* Using welcoming and inclusive language +* Being respectful of differing viewpoints and experiences +* Gracefully accepting constructive criticism +* Focusing on what is best for the community +* Showing empathy towards other community members + +Examples of unacceptable behavior by participants include: + +* The use of sexualized language or imagery and unwelcome sexual attention or +advances +* Trolling, insulting/derogatory comments, and personal or political attacks +* Public or private harassment +* Publishing others' private information, such as a physical or electronic + address, without explicit permission +* Other conduct which could reasonably be considered inappropriate in a + professional setting + +## Our Responsibilities + +Project maintainers are responsible for clarifying the standards of acceptable +behavior and are expected to take appropriate and fair corrective action in +response to any instances of unacceptable behavior. + +Project maintainers have the right and responsibility to remove, edit, or +reject comments, commits, code, wiki edits, issues, and other contributions +that are not aligned to this Code of Conduct, or to ban temporarily or +permanently any contributor for other behaviors that they deem inappropriate, +threatening, offensive, or harmful. + +## Scope + +This Code of Conduct applies both within project spaces and in public spaces +when an individual is representing the project or its community. Examples of +representing a project or community include using an official project e-mail +address, posting via an official social media account, or acting as an appointed +representative at an online or offline event. Representation of a project may be +further defined and clarified by project maintainers. + +## Enforcement + +Instances of abusive, harassing, or otherwise unacceptable behavior may be +reported by contacting the project team at [safety@home-assistant.io][email]. All +complaints will be reviewed and investigated and will result in a response that +is deemed necessary and appropriate to the circumstances. The project team is +obligated to maintain confidentiality with regard to the reporter of an incident. +Further details of specific enforcement policies may be posted separately. + +Project maintainers who do not follow or enforce the Code of Conduct in good +faith may face temporary or permanent repercussions as determined by other +members of the project's leadership. + +## Attribution + +This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, +available [here][version]. + +## Adoption + +This Code of Conduct was first adopted January 21st, 2017 and announced in [this][coc-blog] blog post. + +[homepage]: http://contributor-covenant.org +[version]: http://contributor-covenant.org/version/1/4/ +[email]: mailto:safety@home-assistant.io +[coc-blog]: https://home-assistant.io/blog/2017/01/21/home-assistant-governance/ diff --git a/LICENSE.md b/LICENSE.md new file mode 100644 index 00000000000..6981c7b8898 --- /dev/null +++ b/LICENSE.md @@ -0,0 +1,177 @@ +## creative commons + +# Attribution-NonCommercial-ShareAlike 4.0 International + +Creative Commons Corporation (“Creative Commons”) is not a law firm and does not provide legal services or legal advice. Distribution of Creative Commons public licenses does not create a lawyer-client or other relationship. Creative Commons makes its licenses and related information available on an “as-is” basis. Creative Commons gives no warranties regarding its licenses, any material licensed under their terms and conditions, or any related information. Creative Commons disclaims all liability for damages resulting from their use to the fullest extent possible. + +### Using Creative Commons Public Licenses + +Creative Commons public licenses provide a standard set of terms and conditions that creators and other rights holders may use to share original works of authorship and other material subject to copyright and certain other rights specified in the public license below. The following considerations are for informational purposes only, are not exhaustive, and do not form part of our licenses. + +* __Considerations for licensors:__ Our public licenses are intended for use by those authorized to give the public permission to use material in ways otherwise restricted by copyright and certain other rights. Our licenses are irrevocable. Licensors should read and understand the terms and conditions of the license they choose before applying it. Licensors should also secure all rights necessary before applying our licenses so that the public can reuse the material as expected. Licensors should clearly mark any material not subject to the license. This includes other CC-licensed material, or material used under an exception or limitation to copyright. [More considerations for licensors](http://wiki.creativecommons.org/Considerations_for_licensors_and_licensees#Considerations_for_licensors). + +* __Considerations for the public:__ By using one of our public licenses, a licensor grants the public permission to use the licensed material under specified terms and conditions. If the licensor’s permission is not necessary for any reason–for example, because of any applicable exception or limitation to copyright–then that use is not regulated by the license. Our licenses grant only permissions under copyright and certain other rights that a licensor has authority to grant. Use of the licensed material may still be restricted for other reasons, including because others have copyright or other rights in the material. A licensor may make special requests, such as asking that all changes be marked or described. Although not required by our licenses, you are encouraged to respect those requests where reasonable. [More considerations for the public](http://wiki.creativecommons.org/Considerations_for_licensors_and_licensees#Considerations_for_licensees). + +## Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International Public License + +By exercising the Licensed Rights (defined below), You accept and agree to be bound by the terms and conditions of this Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International Public License ("Public License"). To the extent this Public License may be interpreted as a contract, You are granted the Licensed Rights in consideration of Your acceptance of these terms and conditions, and the Licensor grants You such rights in consideration of benefits the Licensor receives from making the Licensed Material available under these terms and conditions. + +### Section 1 – Definitions. + +a. __Adapted Material__ means material subject to Copyright and Similar Rights that is derived from or based upon the Licensed Material and in which the Licensed Material is translated, altered, arranged, transformed, or otherwise modified in a manner requiring permission under the Copyright and Similar Rights held by the Licensor. For purposes of this Public License, where the Licensed Material is a musical work, performance, or sound recording, Adapted Material is always produced where the Licensed Material is synched in timed relation with a moving image. + +b. __Adapter's License__ means the license You apply to Your Copyright and Similar Rights in Your contributions to Adapted Material in accordance with the terms and conditions of this Public License. + +c. __BY-NC-SA Compatible License__ means a license listed at [creativecommons.org/compatiblelicenses](http://creativecommons.org/compatiblelicenses), approved by Creative Commons as essentially the equivalent of this Public License. + +d. __Copyright and Similar Rights__ means copyright and/or similar rights closely related to copyright including, without limitation, performance, broadcast, sound recording, and Sui Generis Database Rights, without regard to how the rights are labeled or categorized. For purposes of this Public License, the rights specified in Section 2(b)(1)-(2) are not Copyright and Similar Rights. + +e. __Effective Technological Measures__ means those measures that, in the absence of proper authority, may not be circumvented under laws fulfilling obligations under Article 11 of the WIPO Copyright Treaty adopted on December 20, 1996, and/or similar international agreements. + +f. __Exceptions and Limitations__ means fair use, fair dealing, and/or any other exception or limitation to Copyright and Similar Rights that applies to Your use of the Licensed Material. + +g. __License Elements__ means the license attributes listed in the name of a Creative Commons Public License. The License Elements of this Public License are Attribution, NonCommercial, and ShareAlike. + +h. __Licensed Material__ means the artistic or literary work, database, or other material to which the Licensor applied this Public License. + +i. __Licensed Rights__ means the rights granted to You subject to the terms and conditions of this Public License, which are limited to all Copyright and Similar Rights that apply to Your use of the Licensed Material and that the Licensor has authority to license. + +h. __Licensor__ means the individual(s) or entity(ies) granting rights under this Public License. + +i. __NonCommercial__ means not primarily intended for or directed towards commercial advantage or monetary compensation. For purposes of this Public License, the exchange of the Licensed Material for other material subject to Copyright and Similar Rights by digital file-sharing or similar means is NonCommercial provided there is no payment of monetary compensation in connection with the exchange. + +j. __Share__ means to provide material to the public by any means or process that requires permission under the Licensed Rights, such as reproduction, public display, public performance, distribution, dissemination, communication, or importation, and to make material available to the public including in ways that members of the public may access the material from a place and at a time individually chosen by them. + +k. __Sui Generis Database Rights__ means rights other than copyright resulting from Directive 96/9/EC of the European Parliament and of the Council of 11 March 1996 on the legal protection of databases, as amended and/or succeeded, as well as other essentially equivalent rights anywhere in the world. + +l. __You__ means the individual or entity exercising the Licensed Rights under this Public License. Your has a corresponding meaning. + +### Section 2 – Scope. + +a. ___License grant.___ + + 1. Subject to the terms and conditions of this Public License, the Licensor hereby grants You a worldwide, royalty-free, non-sublicensable, non-exclusive, irrevocable license to exercise the Licensed Rights in the Licensed Material to: + + A. reproduce and Share the Licensed Material, in whole or in part, for NonCommercial purposes only; and + + B. produce, reproduce, and Share Adapted Material for NonCommercial purposes only. + + 2. __Exceptions and Limitations.__ For the avoidance of doubt, where Exceptions and Limitations apply to Your use, this Public License does not apply, and You do not need to comply with its terms and conditions. + + 3. __Term.__ The term of this Public License is specified in Section 6(a). + + 4. __Media and formats; technical modifications allowed.__ The Licensor authorizes You to exercise the Licensed Rights in all media and formats whether now known or hereafter created, and to make technical modifications necessary to do so. The Licensor waives and/or agrees not to assert any right or authority to forbid You from making technical modifications necessary to exercise the Licensed Rights, including technical modifications necessary to circumvent Effective Technological Measures. For purposes of this Public License, simply making modifications authorized by this Section 2(a)(4) never produces Adapted Material. + + 5. __Downstream recipients.__ + + A. __Offer from the Licensor – Licensed Material.__ Every recipient of the Licensed Material automatically receives an offer from the Licensor to exercise the Licensed Rights under the terms and conditions of this Public License. + + B. __Additional offer from the Licensor – Adapted Material.__ Every recipient of Adapted Material from You automatically receives an offer from the Licensor to exercise the Licensed Rights in the Adapted Material under the conditions of the Adapter’s License You apply. + + C. __No downstream restrictions.__ You may not offer or impose any additional or different terms or conditions on, or apply any Effective Technological Measures to, the Licensed Material if doing so restricts exercise of the Licensed Rights by any recipient of the Licensed Material. + + 6. __No endorsement.__ Nothing in this Public License constitutes or may be construed as permission to assert or imply that You are, or that Your use of the Licensed Material is, connected with, or sponsored, endorsed, or granted official status by, the Licensor or others designated to receive attribution as provided in Section 3(a)(1)(A)(i). + +b. ___Other rights.___ + + 1. Moral rights, such as the right of integrity, are not licensed under this Public License, nor are publicity, privacy, and/or other similar personality rights; however, to the extent possible, the Licensor waives and/or agrees not to assert any such rights held by the Licensor to the limited extent necessary to allow You to exercise the Licensed Rights, but not otherwise. + + 2. Patent and trademark rights are not licensed under this Public License. + + 3. To the extent possible, the Licensor waives any right to collect royalties from You for the exercise of the Licensed Rights, whether directly or through a collecting society under any voluntary or waivable statutory or compulsory licensing scheme. In all other cases the Licensor expressly reserves any right to collect such royalties, including when the Licensed Material is used other than for NonCommercial purposes. + +### Section 3 – License Conditions. + +Your exercise of the Licensed Rights is expressly made subject to the following conditions. + +a. ___Attribution.___ + + 1. If You Share the Licensed Material (including in modified form), You must: + + A. retain the following if it is supplied by the Licensor with the Licensed Material: + + i. identification of the creator(s) of the Licensed Material and any others designated to receive attribution, in any reasonable manner requested by the Licensor (including by pseudonym if designated); + + ii. a copyright notice; + + iii. a notice that refers to this Public License; + + iv. a notice that refers to the disclaimer of warranties; + + v. a URI or hyperlink to the Licensed Material to the extent reasonably practicable; + + B. indicate if You modified the Licensed Material and retain an indication of any previous modifications; and + + C. indicate the Licensed Material is licensed under this Public License, and include the text of, or the URI or hyperlink to, this Public License. + + 2. You may satisfy the conditions in Section 3(a)(1) in any reasonable manner based on the medium, means, and context in which You Share the Licensed Material. For example, it may be reasonable to satisfy the conditions by providing a URI or hyperlink to a resource that includes the required information. + + 3. If requested by the Licensor, You must remove any of the information required by Section 3(a)(1)(A) to the extent reasonably practicable. + +b. ___ShareAlike.___ + +In addition to the conditions in Section 3(a), if You Share Adapted Material You produce, the following conditions also apply. + +1. The Adapter’s License You apply must be a Creative Commons license with the same License Elements, this version or later, or a BY-NC-SA Compatible License. + +2. You must include the text of, or the URI or hyperlink to, the Adapter's License You apply. You may satisfy this condition in any reasonable manner based on the medium, means, and context in which You Share Adapted Material. + +3. You may not offer or impose any additional or different terms or conditions on, or apply any Effective Technological Measures to, Adapted Material that restrict exercise of the rights granted under the Adapter's License You apply. + +### Section 4 – Sui Generis Database Rights. + +Where the Licensed Rights include Sui Generis Database Rights that apply to Your use of the Licensed Material: + +a. for the avoidance of doubt, Section 2(a)(1) grants You the right to extract, reuse, reproduce, and Share all or a substantial portion of the contents of the database for NonCommercial purposes only; + +b. if You include all or a substantial portion of the database contents in a database in which You have Sui Generis Database Rights, then the database in which You have Sui Generis Database Rights (but not its individual contents) is Adapted Material, including for purposes of Section 3(b); and + +c. You must comply with the conditions in Section 3(a) if You Share all or a substantial portion of the contents of the database. + +For the avoidance of doubt, this Section 4 supplements and does not replace Your obligations under this Public License where the Licensed Rights include other Copyright and Similar Rights. + +### Section 5 – Disclaimer of Warranties and Limitation of Liability. + +a. __Unless otherwise separately undertaken by the Licensor, to the extent possible, the Licensor offers the Licensed Material as-is and as-available, and makes no representations or warranties of any kind concerning the Licensed Material, whether express, implied, statutory, or other. This includes, without limitation, warranties of title, merchantability, fitness for a particular purpose, non-infringement, absence of latent or other defects, accuracy, or the presence or absence of errors, whether or not known or discoverable. Where disclaimers of warranties are not allowed in full or in part, this disclaimer may not apply to You.__ + +b. __To the extent possible, in no event will the Licensor be liable to You on any legal theory (including, without limitation, negligence) or otherwise for any direct, special, indirect, incidental, consequential, punitive, exemplary, or other losses, costs, expenses, or damages arising out of this Public License or use of the Licensed Material, even if the Licensor has been advised of the possibility of such losses, costs, expenses, or damages. Where a limitation of liability is not allowed in full or in part, this limitation may not apply to You.__ + +c. The disclaimer of warranties and limitation of liability provided above shall be interpreted in a manner that, to the extent possible, most closely approximates an absolute disclaimer and waiver of all liability. + +### Section 6 – Term and Termination. + +a. This Public License applies for the term of the Copyright and Similar Rights licensed here. However, if You fail to comply with this Public License, then Your rights under this Public License terminate automatically. + +b. Where Your right to use the Licensed Material has terminated under Section 6(a), it reinstates: + + 1. automatically as of the date the violation is cured, provided it is cured within 30 days of Your discovery of the violation; or + + 2. upon express reinstatement by the Licensor. + + For the avoidance of doubt, this Section 6(b) does not affect any right the Licensor may have to seek remedies for Your violations of this Public License. + +c. For the avoidance of doubt, the Licensor may also offer the Licensed Material under separate terms or conditions or stop distributing the Licensed Material at any time; however, doing so will not terminate this Public License. + +d. Sections 1, 5, 6, 7, and 8 survive termination of this Public License. + +### Section 7 – Other Terms and Conditions. + +a. The Licensor shall not be bound by any additional or different terms or conditions communicated by You unless expressly agreed. + +b. Any arrangements, understandings, or agreements regarding the Licensed Material not stated herein are separate from and independent of the terms and conditions of this Public License. + +### Section 8 – Interpretation. + +a. For the avoidance of doubt, this Public License does not, and shall not be interpreted to, reduce, limit, restrict, or impose conditions on any use of the Licensed Material that could lawfully be made without permission under this Public License. + +b. To the extent possible, if any provision of this Public License is deemed unenforceable, it shall be automatically reformed to the minimum extent necessary to make it enforceable. If the provision cannot be reformed, it shall be severed from this Public License without affecting the enforceability of the remaining terms and conditions. + +c. No term or condition of this Public License will be waived and no failure to comply consented to unless expressly agreed to by the Licensor. + +d. Nothing in this Public License constitutes or may be interpreted as a limitation upon, or waiver of, any privileges and immunities that apply to the Licensor or You, including from the legal processes of any jurisdiction or authority. + +``` +Creative Commons is not a party to its public licenses. Notwithstanding, Creative Commons may elect to apply one of its public licenses to material it publishes and in those instances will be considered the “Licensor.” Except for the limited purpose of indicating that material is shared under a Creative Commons public license or as otherwise permitted by the Creative Commons policies published at [creativecommons.org/policies](http://creativecommons.org/policies), Creative Commons does not authorize the use of the trademark “Creative Commons” or any other trademark or logo of Creative Commons without its prior written consent including, without limitation, in connection with any unauthorized modifications to any of its public licenses or any other arrangements, understandings, or agreements concerning use of licensed material. For the avoidance of doubt, this paragraph does not form part of the public licenses. + +Creative Commons may be contacted at creativecommons.org +``` diff --git a/credits_generator/credits.mustache b/credits_generator/credits.mustache new file mode 100644 index 00000000000..c2419f1c321 --- /dev/null +++ b/credits_generator/credits.mustache @@ -0,0 +1,27 @@ +--- +layout: page +title: "Credits" +description: "Credits for the developers who contributed to Home Assistant." +date: {{ headerDate }} +sidebar: true +comments: false +sharing: true +footer: true +--- + +This page contains a list of people who have contributed in one way or another to Home Assistant. Hover over a username to see their contributions. + +### {% linkable_title Author %} + +- [{{fearlessLeader.info.name}} (@{{fearlessLeader.info.username}})](https://github.com/{{fearlessLeader.info.login}} "{{fearlessLeader.countString}}") + +### {% linkable_title Contributors %} + +(in alphabetical order) + +{{#allUsers}}- [{{info.name}} (@{{info.username}})](https://github.com/{{info.username}} "{{countString}}") +{{/allUsers}} + +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 {{ footerDate }}. diff --git a/credits_generator/package.json b/credits_generator/package.json new file mode 100644 index 00000000000..a5647d81d44 --- /dev/null +++ b/credits_generator/package.json @@ -0,0 +1,17 @@ +{ + "name": "credits_generator", + "version": "1.0.0", + "description": "A tool to generate the Home Assistant credits page", + "main": "update_credits.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "author": "", + "license": "MIT", + "dependencies": { + "async": "^2.1.4", + "github": "^8.1.0", + "moment-timezone": "^0.5.11", + "mu2": "^0.5.21" + } +} diff --git a/credits_generator/update_credits.js b/credits_generator/update_credits.js new file mode 100644 index 00000000000..d850ccaee9f --- /dev/null +++ b/credits_generator/update_credits.js @@ -0,0 +1,155 @@ +var fs = require('fs') + , async = require('async') + , GitHubApi = require('github') + , mu = require('mu2') + , moment = require('moment-timezone'); + +if(!process.env.GITHUB_TOKEN) { + console.error('You must set the GITHUB_TOKEN environment variable to a GitHub personal access token.'); + return; +} + +var organizationName = process.env.GITHUB_ORGANIZATION_NAME || 'home-assistant'; + +mu.root = __dirname; + +var github = new GitHubApi({ + headers: { 'user-agent': 'Home Assistant Contributors List Updater ' } +}); + +github.authenticate({ type: 'oauth', token: process.env.GITHUB_TOKEN }); + +var usersMap = {}; + +github.repos.getForOrg({ + org: organizationName, + type: 'public', + per_page: 100 +}, function(err, repos){ + var headerSource = (err && err.headers) ? err.headers : repos.meta; + var ratelimitLimit = Number(headerSource['x-ratelimit-limit']); + var ratelimitRemaining = Number(headerSource['x-ratelimit-remaining']); + console.log('Rate limits: '+ratelimitRemaining+'/'+ratelimitLimit, '(remaining/limit)'); + if(err) { + if(err.code == 403 && ratelimitRemaining == 0) { + var resetUnixTime = moment.unix(err.headers['x-ratelimit-reset']); + var resetTimeFormatted = resetUnixTime.format(); + var resetAt = moment().to(resetUnixTime); + console.error('Error when getting list of repos in org, because rate limits are exhausted. Rate limits reset', resetAt, 'from now ('+resetTimeFormatted+')'); + } else { + console.error('Error when attempting to get a list of all repos in org...', err.message); + } + return; + } + async.each(repos, function(repo, cb){ + github.repos.getContributors({ owner: organizationName, repo: repo.name, per_page: 100 }, function(err, contributors){ + getContributors(err, contributors, repo, cb); + }); + }, function(err){ + if(err){ + console.error('Error when iterating organization repos', err); + return; + } + console.log('Done getting contributors for '+repos.length+' found organization repos...'); + async.each(Object.keys(usersMap), function(login, cb){ + github.users.getForUser({username: login}, function(err, userInfo){ + if(err){ + console.error('Got error when get user details for', login, err); + cb(err); + return; + } + if(userInfo.login == 'RubenKelevra') userInfo.name = 'RubenKelevra'; // ugh, because his name is `@RubenKelevra` + usersMap[login].info.name = userInfo.name || userInfo.login; + usersMap[login].info.username = userInfo.login; + cb(); + }); + }, function(err){ + if(err){ + console.error('Got error when running', err); + return; + } else { + console.log('Building contributors!!!'); + buildContributors(); + } + }); + }); +}); + +function getContributors(err, res, repo, callback){ + if(err) { + console.error('Error when getting contributors', err); + callback(err); + return + } else { + console.log('Processing the '+res.length+' contributors to '+repo.name); + async.each(res, function(contributor, cb){ + if(!usersMap[contributor.login]) { + usersMap[contributor.login] = { + counts: {}, + info: {login: contributor.login, id: contributor.id} + }; + } + usersMap[contributor.login].counts[repo.name] = contributor.contributions; + cb(null); + }, function(){ + if (github.hasNextPage(res)) { + github.getNextPage(res, function(newErr, newContributors){ + getContributors(newErr, newContributors, repo, callback); + }); + } else { + callback(null); + } + }); + } +} + +function buildContributors(){ + var fearlessLeader = usersMap['balloob']; + fearlessLeader.countString = buildCountString(fearlessLeader.counts); + delete usersMap['balloob']; + var users = Object.keys(usersMap).map(function (key) { + var obj = usersMap[key]; + obj.countString = buildCountString(obj.counts); + return obj; + }).sort(function(a, b){ + var nameA = a.info.name.toLowerCase(); + var nameB = b.info.name.toLowerCase(); + if (nameA < nameB) { return -1; } + if (nameA > nameB) { return 1; } + return 0; + }); + var headerDate = moment().tz('UTC').format('YYYY-MM-DD HH:mm:ss ZZ'); + var footerDate = moment().tz('UTC').format('dddd, MMMM Do YYYY, h:mm:ss a zz'); + var output = ''; + mu.compileAndRender('credits.mustache', { + allUsers: users, + fearlessLeader: fearlessLeader, + headerDate: headerDate, + footerDate: footerDate + }).on('data', function (data) { + output += data.toString(); + }).on('end', function(){ + fs.writeFile('../source/developers/credits.markdown', output, function (writeErr) { + if (writeErr) { + console.log('Error when writing credits.markdown', writeErr); + } else { + console.log('Done getting user info, wrote credits.markdown file!'); + } + }); + }); +} + +function buildCountString(counts){ + var totalCommits = 0; + var countStrings = []; + Object.keys(counts).sort(function(a, b){ + return counts[b] - counts[a]; + }).forEach(function (countKey) { + var count = counts[countKey]; + var word = (count > 1) ? 'commits' : 'commit'; + totalCommits = totalCommits+count; + countStrings.push(count+' '+word+' to '+countKey); + }); + countStrings.unshift(totalCommits+' total commits to the home-assistant organization'); + return countStrings.join(', '); +} diff --git a/source/_includes/asides/developers_navigation.html b/source/_includes/asides/developers_navigation.html index 5fdc0d9adfc..7c8f3f527a5 100644 --- a/source/_includes/asides/developers_navigation.html +++ b/source/_includes/asides/developers_navigation.html @@ -25,7 +25,6 @@
    • {% active_link /developers/add_new_platform/ Support a new device (as a platform) %}
        -
      • {% active_link /developers/code_review_platform/ Checklist creating a platform %}
      • {% active_link /developers/platform_example_sensor/ Example sensor platform %}
      • {% active_link /developers/platform_example_light/ Example light platform %}
      @@ -33,7 +32,6 @@
    • {% active_link /developers/creating_components/ Adding a new component %}
        -
      • {% active_link /developers/code_review_component/ Checklist creating a component %}
      • {% active_link /developers/component_loading/ Loading components %}
      • {% active_link /developers/component_deps_and_reqs/ Requirements & Dependencies %}
      • {% active_link /developers/component_initialization/ Initialization %}
      • @@ -73,8 +71,16 @@
      • {% active_link /developers/helpers/ Online helpers %}
      • {% active_link /developers/multiple_instances/ Multiple Instances %}
      • {% active_link /developers/website/ Home-Assistant.io %}
      • -
      • {% active_link /developers/credits/ Credits %}
      • {% active_link /developers/releasing/ Releasing %}
      • +
      • + Governance +
          +
        • {% active_link /developers/cla/ Contributor License Agreement %}
        • +
        • {% active_link /developers/code_of_conduct/ Code of Conduct %}
        • +
        • {% active_link /developers/credits/ Credits %}
        • +
        • {% active_link /developers/license/ License %}
        • +
        +
      diff --git a/source/_includes/custom/footer.html b/source/_includes/custom/footer.html index 4e69741e097..8e3b4766524 100644 --- a/source/_includes/custom/footer.html +++ b/source/_includes/custom/footer.html @@ -9,4 +9,5 @@ Website powered by Jekyll and the Oscalite theme.
      Hosted by GitHub and served by CloudFlare. + Creative Commons License
      home-assistant.io is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. diff --git a/source/_posts/2017-01-21-home-assistant-governance.markdown b/source/_posts/2017-01-21-home-assistant-governance.markdown new file mode 100644 index 00000000000..05ee5df1b78 --- /dev/null +++ b/source/_posts/2017-01-21-home-assistant-governance.markdown @@ -0,0 +1,101 @@ +--- +layout: post +title: "Home Assistant Governance" +description: "Protecting Home Assistant for all, now and into the future" +date: 2017-01-21 15:05:00 -0800 +date_formatted: "January 21, 2017" +author: Paulus Schoutsen +author_twitter: balloob +comments: true +categories: Organisation +--- + +The Home Assistant project and community has seen enormous growth in the last three years. Many volunteers work tirelessly everyday to give you all the awesomeness that you see today. Much more work is involved than many people realize. Beyond simply coding Home Assistant, volunteers continually maintain related projects, update documentation, post examples, author blog posts, and moderate the forums and chat. This is something that we want to keep safe and functional, even as we grow. + +Starting today we are announcing a few initiatives to help protect our users, contributors and community members. + +## 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. + +Moving forward this Code of Conduct will be active for all projects within the Home Assistant organisation. + +[Read the Code of Conduct][coc] + +[coc]: http://contributor-covenant.org/version/1/4/ + +## Contributor License Agreement + +Moving forward we will also require that all contributors to any project have electronically signed a contributor license agreement (CLA). We have adopted the CLA that GitHub uses for their projects. Currently we have no plans to retroactively require a CLA for previous contributions, only those going forward. + +Until a signed CLA is on file your pull request will not be reviewed or accepted. When you open a new pull request, if you do not have a CLA on file, our helpful bot will walk you through the steps to complete the process. + +**We intend to require an electronically signed contributor licensing agreement for all contributors beginning with our next release (0.37), currently scheduled for release on Saturday, January 28th, 2017 (one week from today).** The CLA is being added to all repositories today. + +A CLA is difficult to describe but GitHub did an excellent job so this next section is taken from [https://cla.github.com][gh-cla]: + +### What is a Contributor License Agreement? + +A Contributor License Agreement, known as a CLA, asks contributors to confirm that: + +1. Anyone can use your contributions anywhere, for free, forever. +2. Your contributions do not infringe on anyone else's rights. + +The GitHub CLA helps ensure the smooth operation and usability of the open source projects that we maintain. + +### Why is a CLA necessary? + +It depends on the jurisdiction, but in the United States, contributions are owned by the author or their employer. When the contribution is accepted, the project becomes a bundle of derivative works. The agreement of all contributors are necessary to maintain distribution of the complete project and to any licensing agreement. + +### Isn’t that the purpose of an open source license? + +Most open source licenses deal with use of the original code, and don’t refer to contributions, or derivatives of the original. + +### How does a CLA protect a project? + +If the owner of a contribution decides that they don’t want the contribution to be part of the project or in any given distribution, the law is on their side. The project, contributors, and users may be subject to legal action. This may require payment of damages and could prevent further usage or contributions until the matter is resolved. + +Even when there is no legal pursuit, too much ambiguity can jeopardize or doom a project by preventing those that can’t risk legal action from getting involved. + +### Why does it seem like only “corporate” projects have a CLA? + +There are many projects without corporate ownership that use a CLA or even a copyright assignment–jQuery and Eclipse, for example. However, it is true that projects with financial backing tend to be at a higher risk of becoming a target, so they may have a lower tolerance for legal ambiguity. + +### What makes the GitHub CLA different from other CLAs? + +The GitHub CLA does not include benign terms that serve no purpose, nor does it include pernicious terms that try to grab more rights than necessary to protect users of the project. Accepting the CLA is a low-overhead click-through when making a pull request, and it only needs to be accepted on the first contribution to a project or organization. + +[gh-cla]: https://cla.github.com/ + +## Security requirements + +With more collaborators involved with Home Assistant we are also exposing ourselves to more risk as more people have write access. As such we taking the following steps. + + 1. As of November 3rd, 2016, all collaborators have been required to have 2 factor authentication (2FA) enabled on their GitHub account. + 2. Going forward, we will do an audit from time to time and strip collaborators from write access if they haven't contributed for a while. This is in no sense meant to boot people, and you are absolutely eligible to get it back in the future when you wish start contributing again. + +## Licensing + +We will now ensure that a `LICENSE.md` file exists in all projects under the Home Assistant organization and is an [OSI approved open source license](https://opensource.org/licenses) or a [Creative Commons](https://creativecommons.org) license. + +### Code License + +The chosen license for all code projects under the Home Assistant organization is The MIT License. + +The core Home Assistant project has been licensed under the MIT license since almost the beginning of the project and is the most chosen license for open source projects. + +Wikipedia has this to say about it: + +> The MIT License is a permissive free software license originating at the Massachusetts Institute of Technology (MIT). As a permissive license, it puts only very limited restriction on reuse and has therefore an excellent license compatibility. The MIT license permits reuse within proprietary software provided that all copies of the licensed software include a copy of the MIT License terms and the copyright notice. The MIT license is also compatible with many copyleft licenses, such as the GNU General Public License (GPL); MIT licensed software can be integrated into GPL software, but not the other way around. + +### Documentation License + +All content on home-assistant.io and all other documentation/asset projects under the Home Assistant organization will be licensed under the Creative Commons License, specifically the [Attribution-NonCommercial-ShareAlike 4.0 International](https://creativecommons.org/licenses/by-nc-sa/4.0/) license. + +## Crediting contributors + +We have now mostly automated updating the [Credits](/developers/credits/) page so that contributors get their attribution more quickly. + +## In closing + +We hope you understand that our desire with these changes is only to help protect the amazing community that has been built around Home Assistant. If you have any questions, please contact me via email, Twitter or Gitter. diff --git a/source/developers/cla.markdown b/source/developers/cla.markdown new file mode 100644 index 00000000000..fab330fb2f4 --- /dev/null +++ b/source/developers/cla.markdown @@ -0,0 +1,63 @@ +---- +layout: page +title: "Contributor License Agreement" +description: "The Code of Conduct for Home Assistant projects." +date: 2017-01-21 15:05:00 -0800 +sidebar: true +comments: false +sharing: true +footer: true +---- + +The following terms are used throughout this agreement: + +**You** - the person or legal entity including its affiliates asked to accept this agreement. +An affiliate is any entity that controls or is controlled by the legal entity, or is under common control with it. + +**Project** - is an umbrella term that refers to any and all Home Assistant open source projects. + +**Contribution** - any type of work that is submitted to a Project, including any modifications or additions to existing work. + +**Submitted** - conveyed to a Project via a pull request, commit, issue, or any form of electronic, written, or +verbal communication with Home Assistant, contributors or maintainers. + +# 1. Grant of Copyright License. + +Subject to the terms and conditions of this agreement, You grant to the Projects’ maintainers, contributors, +users and to Home Assistant a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, +prepare derivative works of, publicly display, publicly perform, sublicense, and distribute Your contributions and such +derivative works. Except for this license, You reserve all rights, title, and interest in your contributions. + +# 2. Grant of Patent License. + +Subject to the terms and conditions of this agreement, You grant to the Projects’ maintainers, contributors, users and to +Home Assistant a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent +license to make, have made, use, offer to sell, sell, import, and otherwise transfer your contributions, where such license +applies only to those patent claims licensable by you that are necessarily infringed by your contribution or by combination of +your contribution with the project to which this contribution was submitted. + +If any entity institutes patent litigation - including cross-claim or counterclaim in a lawsuit - against You alleging that +your contribution or any project it was submitted to constitutes or is responsible for direct or contributory patent infringement, +then any patent licenses granted to that entity under this agreement shall terminate as of the date such litigation is filed. + +# 3. Source of Contribution. + +Your contribution is either your original creation, based upon previous work that, to the best of your knowledge, +is covered under an appropriate open source license and you have the right under that license to submit that work with modifications, +whether created in whole or in part by you, or you have clearly identified the source of the contribution and any license or other +restriction (like related patents, trademarks, and license agreements) of which you are personally aware. + +## Attribution + +This Contributor License Agreement is adapted from the [GitHub CLA][github-cla]. + +## Signing + +To sign this CLA you must first submit a pull request to a repository under the Home Assistant organization. + +## Adoption + +This Contributor License Agreement (CLA) was first announced on January 21st, 2017 in [this][cla-blog] blog post and adopted January 28th, 2017. + +[github-cla]: https://cla.github.com/agreement +[cla-blog]: https://home-assistant.io/blog/2017/01/21/home-assistant-governance/ diff --git a/source/developers/cla_sign.html b/source/developers/cla_sign.html new file mode 100644 index 00000000000..81318dc5642 --- /dev/null +++ b/source/developers/cla_sign.html @@ -0,0 +1,409 @@ +--- +layout: page +title: "CLA Signature" +description: "The Home Assistant contributor license agreement (CLA) signature page" +date: 2017-01-21 15:05:00 -0800 +sidebar: true +comments: false +sharing: true +footer: true +--- + + + + +
      +
      +
      + + myself + my company +
      +
      + + +
      +
      + + +
      +
      + + +
      +
      + + +
      +
      + + +
      +
      + + +
      + I have read and agreed to the Home Assistant Contributor License Agreement +
      + +
      +
      + + + + + diff --git a/source/developers/code_of_conduct.markdown b/source/developers/code_of_conduct.markdown new file mode 100644 index 00000000000..786694b7da9 --- /dev/null +++ b/source/developers/code_of_conduct.markdown @@ -0,0 +1,89 @@ +--- +layout: page +title: "Contributor Covenant Code of Conduct" +description: "The Code of Conduct for Home Assistant projects." +date: 2017-01-21 15:05:00 -0800 +sidebar: true +comments: false +sharing: true +footer: true +--- + +## Our Pledge + +In the interest of fostering an open and welcoming environment, we as +contributors and maintainers pledge to making participation in our project and +our community a harassment-free experience for everyone, regardless of age, body +size, disability, ethnicity, gender identity and expression, level of experience, +nationality, personal appearance, race, religion, or sexual identity and +orientation. + +## Our Standards + +Examples of behavior that contributes to creating a positive environment +include: + +* Using welcoming and inclusive language +* Being respectful of differing viewpoints and experiences +* Gracefully accepting constructive criticism +* Focusing on what is best for the community +* Showing empathy towards other community members + +Examples of unacceptable behavior by participants include: + +* The use of sexualized language or imagery and unwelcome sexual attention or +advances +* Trolling, insulting/derogatory comments, and personal or political attacks +* Public or private harassment +* Publishing others' private information, such as a physical or electronic + address, without explicit permission +* Other conduct which could reasonably be considered inappropriate in a + professional setting + +## Our Responsibilities + +Project maintainers are responsible for clarifying the standards of acceptable +behavior and are expected to take appropriate and fair corrective action in +response to any instances of unacceptable behavior. + +Project maintainers have the right and responsibility to remove, edit, or +reject comments, commits, code, wiki edits, issues, and other contributions +that are not aligned to this Code of Conduct, or to ban temporarily or +permanently any contributor for other behaviors that they deem inappropriate, +threatening, offensive, or harmful. + +## Scope + +This Code of Conduct applies both within project spaces and in public spaces +when an individual is representing the project or its community. Examples of +representing a project or community include using an official project e-mail +address, posting via an official social media account, or acting as an appointed +representative at an online or offline event. Representation of a project may be +further defined and clarified by project maintainers. + +## Enforcement + +Instances of abusive, harassing, or otherwise unacceptable behavior may be +reported by contacting the project team at [safety@home-assistant.io][email]. All +complaints will be reviewed and investigated and will result in a response that +is deemed necessary and appropriate to the circumstances. The project team is +obligated to maintain confidentiality with regard to the reporter of an incident. +Further details of specific enforcement policies may be posted separately. + +Project maintainers who do not follow or enforce the Code of Conduct in good +faith may face temporary or permanent repercussions as determined by other +members of the project's leadership. + +## Attribution + +This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, +available [here][version]. + +## Adoption + +This Code of Conduct was first adopted January 21st, 2017 and announced in [this][coc-blog] blog post. + +[homepage]: http://contributor-covenant.org +[version]: http://contributor-covenant.org/version/1/4/ +[email]: mailto:safety@home-assistant.io +[coc-blog]: https://home-assistant.io/blog/2017/01/21/home-assistant-governance/ diff --git a/source/developers/credits.markdown b/source/developers/credits.markdown index 71a954b950c..c582120f53b 100644 --- a/source/developers/credits.markdown +++ b/source/developers/credits.markdown @@ -2,277 +2,697 @@ layout: page title: "Credits" description: "Credits for the developers who contributed to Home Assistant." -date: 2015-06-19 09:30 +date: 2017-01-22 03:58:53 +0000 sidebar: true comments: false sharing: true footer: true --- -This page contains a list of people who have contributed in one way or another to Home Assistant. +This page contains a list of people who have contributed in one way or another to Home Assistant. Hover over a username to see their contributions. -### {% linkable_title Author %} +### {% linkable_title Author %} -- [Paulus Schoutsen](https://github.com/balloob) +- [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") -### {% linkable_title Contributors %} +### {% linkable_title Contributors %} (in alphabetical order) -- [Abhishek Anand](https://github.com/aa755) -- [Adam Mills](https://github.com/armills) -- [Adrien Brault](https://github.com/adrienbrault) -- [Alexander Fortin](https://github.com/shaftoe) -- [Alex Harvey](https://github.com/infamy) -- [Allan Glen](https://github.com/allanglen) -- [AlucardZero](https://github.com/AlucardZero) -- [amorsillo](https://github.com/fignuts) -- [Andrew](https://github.com/aoakeson) -- [Andrew LeCody](https://github.com/aceat64) -- [Andy Loughran](https://github.com/andylockran) -- [andythigpen](https://github.com/andythigpen) -- [Antoine Bertin](https://github.com/Diaoul) -- [Antonio Párraga Navarro](https://github.com/aparraga) -- [Ardetus](https://github.com/Ardetus) -- [Ardi Mehist](https://github.com/omgapuppy) -- [arsaboo](https://github.com/arsaboo/) -- [Arthur Leonard Andersen](https://github.com/leoc) -- [Assaf Inbal](https://github.com/shmuelzon) -- [Austin](https://github.com/trainman419) -- [Azelphur](https://github.com/Azelphur) -- [Bart274](https://github.com/Bart274) -- [Ben Bangert](https://github.com/bbangert) -- [bestlibre](https://github.com/bestlibre) -- [Bjarni Ivarsson](https://github.com/bjarniivarsson) -- [blackdog70](https://github.com/blackdog70) -- [Brad Buran](https://github.com/bburan) -- [Brad Johnson](https://github.com/bradsk88) -- [Brent](https://github.com/bah2830) -- [Bruno Adele](https://github.com/badele) -- [Cameron Bulock](https://github.com/cbulock) -- [Cameron Llewellyn](https://github.com/camrun91) -- [Carlo Costanzo](https://github.com/CCOSTAN) -- [cawilliamson](https://github.com/cawilliamson) -- [Charles Spirakis](https://github.com/srcLurker) -- [Chris Mulder](https://github.com/chrisvis) -- [Christian Braedstrup](https://github.com/LinuxChristian) -- [Christopher Viel](https://github.com/Chris-V) -- [chrom3](https://github.com/chrom3) -- [Corban Mailloux](https://github.com/corbanmailloux) -- [coteyr](https://github.com/coteyr/) -- [Craig J. Ward](https://github.com/wardcraigj) -- [Craig Ward](https://github.com/wardcraigj) -- [dainok](https://github.com/dainok) -- [Dale Higgs](https://github.com/dale3h) -- [Dan Cinnamon](https://github.com/Cinntax) -- [Dan Ford](https://github.com/dpford) -- [Daniel Høyer Iversen](https://github.com/danielhiversen) -- [Daniel J. Kemp](https://github.com/danieljkemp/) -- [Daniel Matuschek](https://github.com/usul27) -- [Daniel Perna](https://github.com/danielperna84) -- [Daniel Zozin](https://github.com/zeroDenial) -- [Danijel Stojnic](https://github.com/danijelst) -- [Dan Smith](https://github.com/kk7ds) -- [Dan Sullivan](https://github.com/dansullivan86/) -- [Daren Lord](https://github.com/Xorso) -- [dasos](https://github.com/dasos) -- [dasos](https://github.com/dasos) -- [Dave Banks](https://github.com/djbanks) -- [David-Leon Pohl](https://github.com/DavidLP) -- [David Straub](https://github.com/DavidMStraub) -- [Dean Camera](https://github.com/abcminiuser) -- [Dean Galvin](https://github.com/FreekingDean) -- [Dennis Karpienski](https://github.com/TheRealLink) -- [devdelay](https://github.com/devdelay) -- [Edwin Smulders](https://github.com/Dutchy-) -- [Ellis Percival](https://github.com/flyte) -- [Eric Hagan](https://github.com/ehagan) -- [Eric Rolf](https://github.com/xrolfex) -- [ettisan](https://github.com/ettisan) -- [Fabian Affolter](https://github.com/fabaff) -- [Fabian Heredia Montiel](https://github.com/fabianhjr) -- [Felix](https://github.com/xifle) -- [Ferry van Zeelst](https://github.com/StaticCube) -- [Finbarr Brady](https://github.com/fbradyirl) -- [Flavio Castelli](https://github.com/flavio) -- [Florian Holzapfel](https://github.com/florianholzapfel) -- [fotoetienne](https://github.com/fotoetienne) -- [Fredrik Haglund](https://github.com/PetitCircuitLab) -- [Fredrik Lindqvist](https://github.com/Landrash) -- [GadgetReactor](https://github.com/GadgetReactor) -- [Geoff Norton](https://github.com/kangaroo) -- [Giel Janssens](https://github.com/gieljnssns) -- [Gilles Margerie](https://github.com/Gilles95) -- [goir](https://github.com/goir) -- [Gopal Kildoliya](https://github.com/gopalkildoliya) -- [Greg Dowling](https://github.com/pavoni) -- [gross1989](https://github.com/gross1989) -- [Guillem Barba](https://github.com/gbarba) -- [Gustav Ahlberg](https://github.com/Gyran) -- [gwendalg](https://github.com/gwendalg) -- [gwendalg](https://github.com/gwendalg) -- [happyleavesaoc](https://github.com/happyleavesaoc) -- [Harald Nagel](https://github.com/haraldnagel) -- [Harris Borawski](https://github.com/hborawski) -- [HBDK](https://github.com/HBDK) -- [hcooper](https://github.com/hcooper) -- [Heathbar](https://github.com/heathbar) -- [Heiko Rothe](https://github.com/mKeRix) -- [Hernán](https://github.com/hmronline) -- [hexa-](https://github.com/mweinelt) -- [Hugo Dupras](https://github.com/jabesq) -- [Hydreliox](https://github.com/HydrelioxGitHub) -- [Ian Copp](https://github.com/icopp) -- [iandday](https://github.com/iandday) -- [Igor Shults](https://github.com/ishults) -- [Issac Kelly](https://github.com/issackelly) -- [Jack Chapple](https://github.com/chapple) -- [Jacob Tomlinson](https://github.com/jacobtomlinson) -- [James Cole](https://github.com/jamespcole) -- [Jan Harkes](https://github.com/jaharkes) -- [Jan Losinski](https://github.com/janLo) -- [Jan-Preben Mossin](https://github.com/jpmossin) -- [Jared Beckham](https://github.com/tbeckha) -- [Jaret Stezelberger](https://github.com/DesignFirst) -- [Jason Carter](https://github.com/JasonCarter80) -- [Javier González Calleja](https://github.com/gonzalezcalleja) -- [Jean-Philippe Bouillot](https://github.com/Jypy) -- [Jean Regisser](https://github.com/jeanregisser) -- [Jeffrey Lin](https://github.com/linjef/) -- [Jeffrey Tang](https://github.com/Qrtn) -- [Jeff Schroeder](https://github.com/SEJeff) -- [Jesse Newland](https://github.com/jnewland) -- [jgriff2](https://github.com/jgriff2) -- [jnimmo](https://github.com/jnimmo) -- [Joel Asher Friedman](https://github.com/joelash) -- [Joe McMonagle](https://github.com/joemcmonagle) -- [Johan Bloemberg](https://github.com/aequitas) -- [John Arild Berentsen](https://github.com/turbokongen) -- [John](https://github.com/mezz64) -- [John Lindley](https://github.com/jwl17330536) -- [John McLaughlin](https://github.com/loghound) -- [John Williams](https://github.com/Jaidan) -- [Jon Caruana](https://github.com/joncar) -- [Jon Maddox](https://github.com/maddox) -- [joopert](https://github.com/joopert) -- [Joseph Hughes](https://github.com/joshughes) -- [Joseph Piron](https://github.com/eagleamon) -- [Josh Nichols](https://github.com/technicalpickles) -- [Josh Wright](https://github.com/JshWright/) -- [joyrider](https://github.com/joyrider) -- [Juggels](https://github.com/Juggels) -- [Julien Danjou](https://github.com/jd) -- [Justin Moy](https://github.com/justincmoy) -- [Justin Weberg](https://github.com/justweb1) -- [Justyn Shull](https://github.com/justyns/) -- [Karen Goode](https://github.com/kfgoode) -- [kaustubhphatak](https://github.com/kaustubhphatak) -- [Keaton Taylor](https://github.com/keatontaylor) -- [kennedyshead](https://github.com/kennedyshead) -- [Kevin Gottsman](https://github.com/gottsman) -- [kireyeu](https://github.com/kireyeu) -- [kixam](https://github.com/kixam) -- [Klaas Hoekema](https://github.com/KlaasH) -- [Kyle Hendricks](https://github.com/kylehendricks) -- [Lewis Juggins](https://github.com/lwis/) -- [Luca Soldi](https://github.com/LucaSoldi) -- [Lukas Hetzenecker](https://github.com/lukas-hetzenecker) -- [Magnus Ihse Bursie](https://github.com/magicus) -- [Magnus Knutas](https://github.com/MagnusKnutas) -- [Mal Curtis](https://github.com/snikch) -- [Malte Deiseroth](https://github.com/deisi) -- [Malte Franken](https://github.com/exxamalte) -- [Manoj](https://github.com/vmulpuru) -- [Marcelo Moreira de Mello](https://github.com/tchellomello) -- [Marc Pabst](https://github.com/mxtra) -- [Markus Peter](https://github.com/bimbar) -- [Markus Stenberg](https://github.com/fingon) -- [Martin Hjelmare](https://github.com/MartinHjelmare) -- [Martin Vacula](https://github.com/MatoKafkac) -- [Matteo Lampugnani](https://github.com/t30) -- [Matthew Bowen](https://github.com/mgbowen) -- [Matthew Treinish](https://github.com/mtreinish) -- [Matthias Grawinkel](https://github.com/meatz) -- [Matt Noorenberghe](https://github.com/mnoorenberghe) -- [Michaël Arnauts](https://github.com/michaelarnauts) -- [Michael Gilbert](https://github.com/Zyell) -- [Michael Kutý](https://github.com/michaelkuty) -- [Michael Long](https://github.com/phareous) -- [Micha LaQua](https://github.com/milaq) -- [miniconfig](https://github.com/miniconfig) -- [molobrakos](https://github.com/molobrakos) -- [Moon Shot](https://github.com/moonshot) -- [Nathan Henrie](https://github.com/n8henrie) -- [Nick Touran](https://github.com/partofthething) -- [Nick Vella](https://github.com/nvella) -- [Nick Waring](https://github.com/nickwaring) -- [Nicolas Graziano](https://github.com/ngraziano) -- [Nils Uliczka](https://github.com/darookee) -- [Nolan Gilley](https://github.com/nkgilley) -- [Nuno Sousa](https://github.com/nunofgs) -- [Oliver van Porten](https://github.com/mcdeck) -- [open-homeautomation](https://github.com/open-homeautomation) -- [Otto Winter](https://github.com/OttoWinter) -- [Øystein Hansen](https://github.com/oeysteinhansen) -- [Pascal Bach](https://github.com/bachp) -- [Pascal Vizeli](https://github.com/pvizeli) -- [Per Sandström](https://github.com/persandstrom) -- [Philip Lundrigan](https://github.com/philipbl) -- [Pierre Ståhl](https://github.com/postlund) -- [Piratonym](https://github.com/Piratonym) -- [Rev Michael Greb](https://github.com/mikegrb) -- [rhooper](https://github.com/rhooper) -- [Richard Arends](https://github.com/Mosibi) -- [Richard Cox](https://github.com/khabi) -- [rkabadi](https://github.com/rkabadi) -- [Robbie Trencheny](https://github.com/robbiet480) -- [Rob Capellini](https://github.com/capellini) -- [Rob Johnson](https://github.com/robjohnson189) -- [Rob Olimpiu](https://github.com/olimpiurob) -- [Roi Dayan](https://github.com/roidayan) -- [Ron Klinkien](https://github.com/cyberjunky) -- [Rowan Hine](https://github.com/GreenTurtwig) -- [rubund](https://github.com/rubund) -- [Russell Cloran](https://github.com/rcloran) -- [Ryan Kraus](https://github.com/rmkraus) -- [Ryan Turner](https://github.com/ryanturner) -- [sam-io](https://github.com/sam-io) -- [Samuel Bétrisey](https://github.com/betrisey) -- [sander76](https://github.com/sander76) -- [schneefux](https://github.com/schneefux) -- [Scott O'Neil](https://github.com/americanwookie) -- [Scott Reston](https://github.com/ih8gates) -- [Sean Dague](https://github.com/sdague) -- [sfam](https://github.com/sfam) -- [Stefan Jonasson](https://github.com/stefan-jonasson) -- [Steven Barnes](https://github.com/salt-lick) -- [St. John Johnson](https://github.com/stjohnjohnson) -- [TangoAlpha](https://github.com/TangoAlpha) -- [Teagan Glenn](https://github.com/Teagan42) -- [Teemu Mikkonen](https://github.com/T3m3z) -- [Teemu Patja](https://github.com/tpatja) -- [Theb-1](https://github.com/Theb-1) -- [Theodor Lindquist](https://github.com/theolind) -- [Thomas Friedel](https://github.com/tfriedel) -- [Thom Troy](https://github.com/ttroy50) -- [tilutza](https://github.com/tilutza) -- [Tim Harton](https://github.com/timharton) -- [Tim](https://github.com/tinglis1) -- [Tobie Booth](https://github.com/tobiebooth) -- [toddeye](https://github.com/toddeye) -- [Tom Duijf](https://github.com/tomduijf) -- [Touliloup]https://github.com/RiRomain -- [trollkarlen](https://github.com/trollkarlen) -- [Valentin Alexeev](https://github.com/valentinalexeev) -- [vitorespindola](https://github.com/vitorespindola) -- [Vlad Korniev](https://github.com/vkorn) -- [vladonemo](https://github.com/vladonemo) -- [Warren Konkel](https://github.com/wkonkel) -- [webworxshop](https://github.com/webworxshop) -- [Willems Davy](https://github.com/joyrider3774) -- [William Scanlon](https://github.com/w1ll1am23) -- [wind-rider](https://github.com/wind-rider) -- [wokar](https://github.com/wokar) -- [Zac Mrowicki](https://github.com/zmrow) +- [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") +- [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") +- [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") +- [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") +- [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") +- [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") +- [Alex Tzonkov (@attzonko)](https://github.com/attzonko "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") +- [Alex Vernacchia (@vernak2539)](https://github.com/vernak2539 "1 total commits to the home-assistant organization, 1 commit to home-assistant.github.io") +- [Alexander Bandukwala (@7h3kk1d)](https://github.com/7h3kk1d "1 total commits to the home-assistant organization, 1 commit to home-assistant.github.io") +- [Alexander Fortin (@shaftoe)](https://github.com/shaftoe "21 total commits to the home-assistant organization, 15 commits to home-assistant, 6 commits to home-assistant.github.io") +- [Alexander Slansky (@aslansky)](https://github.com/aslansky "1 total commits to the home-assistant organization, 1 commit to home-assistant.github.io") +- [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") +- [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 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 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") +- [Andrew Starr-Bochicchio (@andrewsomething)](https://github.com/andrewsomething "1 total commits to the home-assistant organization, 1 commit to home-assistant.github.io") +- [Andrew Stock (@watchforstock)](https://github.com/watchforstock "2 total commits to the home-assistant organization, 2 commits to home-assistant") +- [Andrew Thigpen (@andythigpen)](https://github.com/andythigpen "33 total commits to the home-assistant organization, 32 commits to home-assistant, 1 commit to home-assistant-js") +- [Andrew Williams (@nikdoof)](https://github.com/nikdoof "1 total commits to the home-assistant organization, 1 commit to home-assistant") +- [andrew-curtis (@andrew-curtis)](https://github.com/andrew-curtis "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") +- [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") +- [anpetrov (@anpetrov)](https://github.com/anpetrov "1 total commits to the home-assistant organization, 1 commit to home-assistant") +- [Antoine Bertin (@Diaoul)](https://github.com/Diaoul "5 total commits to the home-assistant organization, 2 commits to home-assistant, 2 commits to home-assistant.github.io, 1 commit to home-assistant-polymer") +- [Anton Lundin (@glance-)](https://github.com/glance- "4 total commits to the home-assistant organization, 3 commits to home-assistant, 1 commit to netdisco") +- [Antonio Párraga Navarro (@aparraga)](https://github.com/aparraga "1 total commits to the home-assistant organization, 1 commit to home-assistant") +- [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") +- [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") +- [Ashura (@CoalaJoe)](https://github.com/CoalaJoe "5 total commits to the home-assistant organization, 4 commits to home-assistant.github.io, 1 commit to home-assistant") +- [Assaf Inbal (@shmuelzon)](https://github.com/shmuelzon "8 total commits to the home-assistant organization, 5 commits to homebridge-homeassistant, 3 commits to home-assistant") +- [atorralba (@atorralba)](https://github.com/atorralba "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") +- [Audun Ytterdal (@auduny)](https://github.com/auduny "2 total commits to the home-assistant organization, 2 commits to home-assistant") +- [Austin (@trainman419)](https://github.com/trainman419 "8 total commits to the home-assistant organization, 8 commits to home-assistant") +- [Avraham David Gelbfish (@adgelbfish)](https://github.com/adgelbfish "1 total commits to the home-assistant organization, 1 commit to hadashboard") +- [Barry Williams (@bazwilliams)](https://github.com/bazwilliams "1 total commits to the home-assistant organization, 1 commit to netdisco") +- [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") +- [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") +- [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") +- [Bill Nelson (@xhostplus)](https://github.com/xhostplus "1 total commits to the home-assistant organization, 1 commit to home-assistant") +- [Bjarni Ivarsson (@bjarniivarsson)](https://github.com/bjarniivarsson "8 total commits to the home-assistant organization, 5 commits to home-assistant, 3 commits to home-assistant-polymer") +- [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") +- [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") +- [brahmafear (@brahmafear)](https://github.com/brahmafear "4 total commits to the home-assistant organization, 4 commits to home-assistant.github.io") +- [Brandon Mathis (@imathis)](https://github.com/imathis "484 total commits to the home-assistant organization, 484 commits to home-assistant.github.io") +- [Brandon Weeks (@brandonweeks)](https://github.com/brandonweeks "3 total commits to the home-assistant organization, 3 commits to home-assistant") +- [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") +- [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") +- [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") +- [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") +- [Charles Blonde (@CharlesBlonde)](https://github.com/CharlesBlonde "2 total commits to the home-assistant organization, 1 commit to home-assistant, 1 commit to home-assistant.github.io") +- [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 Baumgartner (@mchrisb03)](https://github.com/mchrisb03 "1 total commits to the home-assistant organization, 1 commit to home-assistant") +- [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 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") +- [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") +- [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") +- [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") +- [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") +- [Dan Cinnamon (@Cinntax)](https://github.com/Cinntax "13 total commits to the home-assistant organization, 10 commits to home-assistant, 3 commits to home-assistant.github.io") +- [Dan Ford (@dpford)](https://github.com/dpford "1 total commits to the home-assistant organization, 1 commit to home-assistant") +- [Dan Lowe (@tangledhelix)](https://github.com/tangledhelix "1 total commits to the home-assistant organization, 1 commit to home-assistant.github.io") +- [Dan Olson (@danielolson13)](https://github.com/danielolson13 "1 total commits to the home-assistant organization, 1 commit to home-assistant.github.io") +- [Dan Smith (@kk7ds)](https://github.com/kk7ds "84 total commits to the home-assistant organization, 68 commits to home-assistant, 14 commits to home-assistant.github.io, 2 commits to home-assistant-polymer") +- [Dan Sullivan (@dansullivan86)](https://github.com/dansullivan86 "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 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 Peukert (@dpeukert)](https://github.com/dpeukert "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") +- [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 (@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 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") +- [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") +- [deisi (@deisi)](https://github.com/deisi "7 total commits to the home-assistant organization, 7 commits to home-assistant") +- [demonspork (@demonspork)](https://github.com/demonspork "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") +- [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") +- [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") +- [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") +- [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") +- [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") +- [Ellis Percival (@flyte)](https://github.com/flyte "31 total commits to the home-assistant organization, 25 commits to home-assistant, 6 commits to home-assistant.github.io") +- [Emil Horpen Hetty (@emilhetty)](https://github.com/emilhetty "3 total commits to the home-assistant organization, 2 commits to home-assistant.github.io, 1 commit to home-assistant") +- [Emily Cassandra Meeker (@ecmeeker)](https://github.com/ecmeeker "1 total commits to the home-assistant organization, 1 commit to home-assistant.github.io") +- [Emmanuel Mwangi (@cloudbring)](https://github.com/cloudbring "1 total commits to the home-assistant organization, 1 commit to home-assistant.github.io") +- [Eric Clymer (@ericwclymer)](https://github.com/ericwclymer "1 total commits to the home-assistant organization, 1 commit to home-assistant") +- [Eric Hagan (@ehagan)](https://github.com/ehagan "3 total commits to the home-assistant organization, 1 commit to home-assistant-polymer, 1 commit to home-assistant, 1 commit to home-assistant.github.io") +- [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") +- [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 Heredia Montiel (@fabianhjr)](https://github.com/fabianhjr "4 total commits to the home-assistant organization, 4 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") +- [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") +- [Florian Holzapfel (@florianholzapfel)](https://github.com/florianholzapfel "12 total commits to the home-assistant organization, 5 commits to home-assistant.github.io, 4 commits to home-assistant, 3 commits to netdisco") +- [Fonta (@f0nt4)](https://github.com/f0nt4 "4 total commits to the home-assistant organization, 4 commits to home-assistant.github.io") +- [Frank (@syphernl)](https://github.com/syphernl "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") +- [Frantz (@rofrantz)](https://github.com/rofrantz "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") +- [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") +- [Galtwise (@Galtwise)](https://github.com/Galtwise "1 total commits to the home-assistant organization, 1 commit to home-assistant.github.io") +- [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") +- [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") +- [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") +- [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 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") +- [gsabbe (@gsabbe)](https://github.com/gsabbe "1 total commits to the home-assistant organization, 1 commit to home-assistant") +- [Gunnar Helgason (@gunnarhelgason)](https://github.com/gunnarhelgason "1 total commits to the home-assistant organization, 1 commit to appdaemon") +- [Gustav Ahlberg (@Gyran)](https://github.com/Gyran "20 total commits to the home-assistant organization, 20 commits to home-assistant") +- [gwendalg (@gwendalg)](https://github.com/gwendalg "3 total commits to the home-assistant organization, 3 commits to home-assistant") +- [Hajime Morrita (@omo)](https://github.com/omo "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") +- [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") +- [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") +- [Harry Kantas (@harrykantas)](https://github.com/harrykantas "1 total commits to the home-assistant organization, 1 commit to home-assistant") +- [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") +- [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") +- [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") +- [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") +- [iandday (@iandday)](https://github.com/iandday "1 total commits to the home-assistant organization, 1 commit to home-assistant") +- [ianj001 (@ianj001)](https://github.com/ianj001 "7 total commits to the home-assistant organization, 7 commits to home-assistant.github.io") +- [icovada (@icovada)](https://github.com/icovada "5 total commits to the home-assistant organization, 3 commits to home-assistant.github.io, 2 commits to home-assistant") +- [Igor Shults (@ishults)](https://github.com/ishults "7 total commits to the home-assistant organization, 5 commits to home-assistant, 1 commit to home-assistant-polymer, 1 commit to home-assistant.github.io") +- [IoTGuy (@farminf)](https://github.com/farminf "1 total commits to the home-assistant organization, 1 commit to home-assistant") +- [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. 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") +- [Jacob Minnis (@jminn)](https://github.com/jminn "1 total commits to the home-assistant organization, 1 commit to home-assistant") +- [Jacob Tomlinson (@jacobtomlinson)](https://github.com/jacobtomlinson "5 total commits to the home-assistant organization, 4 commits to home-assistant.github.io, 1 commit to home-assistant") +- [Jake McCrary (@jakemcc)](https://github.com/jakemcc "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") +- [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") +- [Jan-Preben Mossin (@jpmossin)](https://github.com/jpmossin "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") +- [Jason Carter (@JasonCarter80)](https://github.com/JasonCarter80 "6 total commits to the home-assistant organization, 3 commits to home-assistant, 3 commits to home-assistant.github.io") +- [Jason Hite (@jasonmhite)](https://github.com/jasonmhite "6 total commits to the home-assistant organization, 6 commits to appdaemon") +- [Jason Woodward (@woodwardjd)](https://github.com/woodwardjd "1 total commits to the home-assistant organization, 1 commit to home-assistant.github.io") +- [Javier González Calleja (@gonzalezcalleja)](https://github.com/gonzalezcalleja "3 total commits to the home-assistant organization, 2 commits to home-assistant, 1 commit to home-assistant.github.io") +- [jazzaj (@jazzaj)](https://github.com/jazzaj "1 total commits to the home-assistant organization, 1 commit to home-assistant") +- [jbcodemonkey (@jbcodemonkey)](https://github.com/jbcodemonkey "1 total commits to the home-assistant organization, 1 commit to home-assistant") +- [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") +- [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") +- [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") +- [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 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") +- [Jimmy Tang (@jcftang)](https://github.com/jcftang "1 total commits to the home-assistant organization, 1 commit to home-assistant.github.io") +- [jnimmo (@jnimmo)](https://github.com/jnimmo "3 total commits to the home-assistant organization, 2 commits to home-assistant.github.io, 1 commit to home-assistant") +- [Jo Liss (@joliss)](https://github.com/joliss "1 total commits to the home-assistant organization, 1 commit to home-assistant.github.io") +- [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") +- [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 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") +- [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 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 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 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") +- [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 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") +- [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") +- [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") +- [Juggels (@Juggels)](https://github.com/Juggels "2 total commits to the home-assistant organization, 1 commit to home-assistant, 1 commit to home-assistant.github.io") +- [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 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") +- [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") +- [Kareem Sultan (@kareem613)](https://github.com/kareem613 "1 total commits to the home-assistant organization, 1 commit to home-assistant.github.io") +- [Karen Goode (@kfgoode)](https://github.com/kfgoode "5 total commits to the home-assistant organization, 4 commits to home-assistant, 1 commit to home-assistant.github.io") +- [kaustubhphatak (@kaustubhphatak)](https://github.com/kaustubhphatak "3 total commits to the home-assistant organization, 2 commits to home-assistant.github.io, 1 commit to home-assistant") +- [Keaton Taylor (@keatontaylor)](https://github.com/keatontaylor "6 total commits to the home-assistant organization, 3 commits to home-assistant, 3 commits to home-assistant.github.io") +- [Keith (@seedzero)](https://github.com/seedzero "3 total commits to the home-assistant organization, 2 commits to home-assistant.github.io, 1 commit to home-assistant") +- [Keith Lamprecht (@Nixon506E)](https://github.com/Nixon506E "2 total commits to the home-assistant organization, 2 commits to home-assistant") +- [Ken Carpenter (@mindjuice)](https://github.com/mindjuice "1 total commits to the home-assistant organization, 1 commit to home-assistant.github.io") +- [Kent Fenwick (@kent)](https://github.com/kent "1 total commits to the home-assistant organization, 1 commit to home-assistant.github.io") +- [Kevin Christensen (@nivekmai)](https://github.com/nivekmai "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") +- [Kevin Gisi (@gisikw)](https://github.com/gisikw "5 total commits to the home-assistant organization, 5 commits to home-assistant.github.io") +- [Kevin Gottsman (@gottsman)](https://github.com/gottsman "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") +- [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") +- [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") +- [Lars Alexander Blumberg (@larsblumberg)](https://github.com/larsblumberg "1 total commits to the home-assistant organization, 1 commit 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") +- [lichtteil (@lichtteil)](https://github.com/lichtteil "2 total commits to the home-assistant organization, 1 commit to home-assistant, 1 commit to home-assistant.github.io") +- [LightIsLife (@LightIsLife)](https://github.com/LightIsLife "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") +- [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") +- [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") +- [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") +- [Magnus Ihse Bursie (@magicus)](https://github.com/magicus "16 total commits to the home-assistant organization, 9 commits to home-assistant, 4 commits to netdisco, 3 commits to home-assistant.github.io") +- [Magnus Lyckå (@magnus-lycka)](https://github.com/magnus-lycka "1 total commits to the home-assistant organization, 1 commit to netdisco") +- [MagnusKnutas (@MagnusKnutas)](https://github.com/MagnusKnutas "29 total commits to the home-assistant organization, 29 commits to home-assistant") +- [Maido Käära (@v3rm0n)](https://github.com/v3rm0n "1 total commits to the home-assistant organization, 1 commit to home-assistant.github.io") +- [MaKin211 (@MaKin211)](https://github.com/MaKin211 "1 total commits to the home-assistant organization, 1 commit to home-assistant.github.io") +- [Mal Curtis (@snikch)](https://github.com/snikch "1 total commits to the home-assistant organization, 1 commit to home-assistant") +- [Malte Franken (@exxamalte)](https://github.com/exxamalte "3 total commits to the home-assistant organization, 2 commits to home-assistant.github.io, 1 commit to home-assistant") +- [Manoj (@vmulpuru)](https://github.com/vmulpuru "1 total commits to the home-assistant organization, 1 commit to home-assistant") +- [Manu (@matrixagent)](https://github.com/matrixagent "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") +- [Marc Forth (@mf-social)](https://github.com/mf-social "3 total commits to the home-assistant organization, 2 commits to home-assistant.github.io, 1 commit to fabric-home-assistant") +- [Marc Pabst (@mxtra)](https://github.com/mxtra "2 total commits to the home-assistant organization, 1 commit to home-assistant-polymer, 1 commit to home-assistant") +- [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") +- [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") +- [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 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 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") +- [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 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 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") +- [Matthew Garrett (@mjg59)](https://github.com/mjg59 "8 total commits to the home-assistant organization, 5 commits to home-assistant, 3 commits to home-assistant.github.io") +- [Matthew Treinish (@mtreinish)](https://github.com/mtreinish "12 total commits to the home-assistant organization, 8 commits to home-assistant, 4 commits to home-assistant.github.io") +- [Matthias Grawinkel (@meatz)](https://github.com/meatz "2 total commits to the home-assistant organization, 1 commit to home-assistant, 1 commit to home-assistant.github.io") +- [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") +- [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") +- [Michael Buffington (@elbowdonkey)](https://github.com/elbowdonkey "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") +- [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 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") +- [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") +- [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") +- [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") +- [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") +- [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") +- [Nicolas Graziano (@ngraziano)](https://github.com/ngraziano "3 total commits to the home-assistant organization, 3 commits to home-assistant") +- [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") +- [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") +- [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") +- [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") +- [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") +- [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") +- [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 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") +- [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") +- [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") +- [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") +- [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") +- [Riccardo Massari (@maxdrift)](https://github.com/maxdrift "1 total commits to the home-assistant organization, 1 commit to home-assistant") +- [Richard Arends (@Mosibi)](https://github.com/Mosibi "8 total commits to the home-assistant organization, 8 commits to home-assistant") +- [Richard Cox (@Khabi)](https://github.com/Khabi "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 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") +- [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 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 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") +- [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") +- [Shawna (@Nightarrow85)](https://github.com/Nightarrow85 "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") +- [SilvrrGIT (@SilvrrGIT)](https://github.com/SilvrrGIT "7 total commits to the home-assistant organization, 7 commits to home-assistant.github.io") +- [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") +- [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") +- [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") +- [sustah (@sustah)](https://github.com/sustah "1 total commits to the home-assistant organization, 1 commit to home-assistant") +- [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") +- [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") +- [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") +- [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") +- [Thibault Cohen (@titilambert)](https://github.com/titilambert "8 total commits to the home-assistant organization, 5 commits to home-assistant, 3 commits to home-assistant.github.io") +- [ThinkPadNL (@ThinkPadNL)](https://github.com/ThinkPadNL "4 total commits to the home-assistant organization, 4 commits to home-assistant.github.io") +- [Thom Troy (@ttroy50)](https://github.com/ttroy50 "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") +- [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") +- [Tobie Booth (@tobiebooth)](https://github.com/tobiebooth "4 total commits to the home-assistant organization, 3 commits to home-assistant, 1 commit to home-assistant-polymer") +- [Todd McNeal (@tmcneal)](https://github.com/tmcneal "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") +- [toddeye (@toddeye)](https://github.com/toddeye "20 total commits to the home-assistant organization, 20 commits to home-assistant") +- [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") +- [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") +- [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 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") +- [Vlad Korniev (@vkorn)](https://github.com/vkorn "1 total commits to the home-assistant organization, 1 commit to home-assistant") +- [Vladimir Nemergut (@vladonemo)](https://github.com/vladonemo "1 total commits to the home-assistant organization, 1 commit to home-assistant") +- [vrs01 (@vrs01)](https://github.com/vrs01 "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") +- [Wagner Sartori Junior (@trunet)](https://github.com/trunet "1 total commits to the home-assistant organization, 1 commit to netdisco") +- [Warren Konkel (@wkonkel)](https://github.com/wkonkel "1 total commits to the home-assistant organization, 1 commit to home-assistant") +- [webworxshop (@webworxshop)](https://github.com/webworxshop "1 total commits to the home-assistant organization, 1 commit to home-assistant") +- [whhsw (@whhsw)](https://github.com/whhsw "1 total commits to the home-assistant organization, 1 commit to home-assistant") +- [Whytey (@Whytey)](https://github.com/Whytey "1 total commits to the home-assistant organization, 1 commit to home-assistant") +- [Wilco Land (@Wilco89)](https://github.com/Wilco89 "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") +- [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") +- [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") +- [Xorso (@Xorso)](https://github.com/Xorso "18 total commits to the home-assistant organization, 18 commits to home-assistant") +- [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") +- [Zeb Palmer (@zebpalmer)](https://github.com/zebpalmer "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") +- [Zen Tormey (@xehn)](https://github.com/xehn "4 total commits to the home-assistant organization, 4 commits to home-assistant.github.io") +- [Zhao Lu (@zlu)](https://github.com/zlu "4 total commits to the home-assistant organization, 4 commits to home-assistant.github.io") +- [Øystein Hansen (@oeysteinhansen)](https://github.com/oeysteinhansen "1 total commits to the home-assistant organization, 1 commit to home-assistant") -This page is irregularly updated. As a base we use the Github [contributors overview](https://github.com/home-assistant/home-assistant/graphs/contributors) of the Home Assistant git repository and the [overview](https://github.com/home-assistant/home-assistant.io/graphs/contributors) for [home-assistant.io](https://home-assistant.io). If you think that you are missing, please let us know or add yourself. + +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. diff --git a/source/developers/license.markdown b/source/developers/license.markdown new file mode 100644 index 00000000000..ec1a81b5581 --- /dev/null +++ b/source/developers/license.markdown @@ -0,0 +1,37 @@ +--- +layout: page +title: "The MIT License (MIT)" +description: "The License that all Home Assistant projects are licensed under" +date: 2017-01-21 15:05:00 -0800 +sidebar: true +comments: false +sharing: true +footer: true +--- + +Copyright © `2013-2017` `Paulus Schoutsen` + +Permission is hereby granted, free of charge, to any person +obtaining a copy of this software and associated documentation +files (the “Software”), to deal in the Software without +restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following +conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. + +## Adoption + +The MIT license was adopted shortly after Home Assistant was created and all projects hosted under the Home Assistant [GitHub Organization](https://github.com/home-assistant) are licensed under it. From 293c07512aad4600fa110b61b3904cc86af52605 Mon Sep 17 00:00:00 2001 From: Robbie Trencheny Date: Sun, 22 Jan 2017 16:58:17 -0800 Subject: [PATCH 062/103] Add missing links --- source/_includes/asides/developers_navigation.html | 2 ++ 1 file changed, 2 insertions(+) diff --git a/source/_includes/asides/developers_navigation.html b/source/_includes/asides/developers_navigation.html index 7c8f3f527a5..e2906ef3985 100644 --- a/source/_includes/asides/developers_navigation.html +++ b/source/_includes/asides/developers_navigation.html @@ -25,6 +25,7 @@
    • {% active_link /developers/add_new_platform/ Support a new device (as a platform) %}
        +
      • {% active_link /developers/code_review_platform/ Checklist creating a platform %}
      • {% active_link /developers/platform_example_sensor/ Example sensor platform %}
      • {% active_link /developers/platform_example_light/ Example light platform %}
      @@ -32,6 +33,7 @@
    • {% active_link /developers/creating_components/ Adding a new component %}
        +
      • {% active_link /developers/code_review_component/ Checklist creating a component %}
      • {% active_link /developers/component_loading/ Loading components %}
      • {% active_link /developers/component_deps_and_reqs/ Requirements & Dependencies %}
      • {% active_link /developers/component_initialization/ Initialization %}
      • From 375c5209e4a4f6c7a8f4dc8553cc35b9e932a347 Mon Sep 17 00:00:00 2001 From: Robbie Trencheny Date: Sun, 22 Jan 2017 17:15:49 -0800 Subject: [PATCH 063/103] Fix a link issue and a layout issue on governance --- source/_posts/2017-01-21-home-assistant-governance.markdown | 2 +- source/developers/cla.markdown | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/source/_posts/2017-01-21-home-assistant-governance.markdown b/source/_posts/2017-01-21-home-assistant-governance.markdown index 05ee5df1b78..f5082dbbbaa 100644 --- a/source/_posts/2017-01-21-home-assistant-governance.markdown +++ b/source/_posts/2017-01-21-home-assistant-governance.markdown @@ -22,7 +22,7 @@ Moving forward this Code of Conduct will be active for all projects within the H [Read the Code of Conduct][coc] -[coc]: http://contributor-covenant.org/version/1/4/ +[coc]: /developers/code_of_conduct/ ## Contributor License Agreement diff --git a/source/developers/cla.markdown b/source/developers/cla.markdown index fab330fb2f4..584f1b311d6 100644 --- a/source/developers/cla.markdown +++ b/source/developers/cla.markdown @@ -1,4 +1,4 @@ ----- +--- layout: page title: "Contributor License Agreement" description: "The Code of Conduct for Home Assistant projects." @@ -7,7 +7,7 @@ sidebar: true comments: false sharing: true footer: true ----- +--- The following terms are used throughout this agreement: From 8c1f9b3b6ca654b6d2c6ded35e20a05a869d800e Mon Sep 17 00:00:00 2001 From: Robbie Trencheny Date: Sun, 22 Jan 2017 21:49:34 -0800 Subject: [PATCH 064/103] complete cla signup flow --- source/developers/cla_sign.html | 90 +++++++++++++++++++++++++-- source/developers/cla_sign_start.html | 27 ++++++++ 2 files changed, 113 insertions(+), 4 deletions(-) create mode 100644 source/developers/cla_sign_start.html diff --git a/source/developers/cla_sign.html b/source/developers/cla_sign.html index 81318dc5642..38e98f55b18 100644 --- a/source/developers/cla_sign.html +++ b/source/developers/cla_sign.html @@ -27,10 +27,22 @@ footer: true #company_name_group { display: none; } + + #signature_form { + display: none; + } + + #complete { + display: none; + } +
        +
        +

        Please wait while we complete authentication and load data from GitHub...

        +
        -
        +
        @@ -47,7 +59,8 @@ footer: true
        - + +
        @@ -61,13 +74,21 @@ footer: true
        - I have read and agreed to the Home Assistant Contributor License Agreement + I have read and agreed to the Home Assistant Contributor License Agreement
        +
        +
        +

        Thanks!

        +

        Thank you for signing the Home Assistant Contributor license agreement. We are now redirecting you back to your pull request.

        +
        + + + + + From 0351b2201adac73fbdb459d5589510095ddc0625 Mon Sep 17 00:00:00 2001 From: Robbie Trencheny Date: Sun, 22 Jan 2017 21:52:32 -0800 Subject: [PATCH 065/103] Change to real URL --- source/developers/cla_sign_start.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/developers/cla_sign_start.html b/source/developers/cla_sign_start.html index 10067ab34d8..53ed501016c 100644 --- a/source/developers/cla_sign_start.html +++ b/source/developers/cla_sign_start.html @@ -22,6 +22,6 @@ $(document).ready(function(){ if(redirect && redirect.length > 0) { localStorage.setItem("pr", redirect[1]); } - window.location = "https://github.com/login/oauth/authorize?client_id=44151bab2be25f885aa7&response_type=code&scope=user%3Aemail&redirect_uri=http%3A%2F%2Flocalhost%3A4000%2Fdevelopers%2Fcla_sign%2F" + window.location = "https://github.com/login/oauth/authorize?client_id=44151bab2be25f885aa7&response_type=code&scope=user%3Aemail&redirect_uri=https%3A%2F%2Fhome-assistant.io%2Fdevelopers%2Fcla_sign%2F" }); From 024a00a0b9717af27db900a00f7299fcd4ddb474 Mon Sep 17 00:00:00 2001 From: dramamoose Date: Mon, 23 Jan 2017 03:21:54 -0700 Subject: [PATCH 066/103] Update light.flux_led.markdown (#1849) Additional details added, I added another device which I wasn't sure was compatible until I bought it, and more details on configuring. --- source/_components/light.flux_led.markdown | 25 +++++++++++++++++----- 1 file changed, 20 insertions(+), 5 deletions(-) diff --git a/source/_components/light.flux_led.markdown b/source/_components/light.flux_led.markdown index ddf22757d27..fbede854c20 100644 --- a/source/_components/light.flux_led.markdown +++ b/source/_components/light.flux_led.markdown @@ -14,7 +14,7 @@ featured: false ha_release: 0.25 --- -The `flux_led` support is integrated into Home Assistant as a light platform. Several brands use the same protocol and they have the HF-LPB100 chipset in common. +The `flux_led` support is integrated into Home Assistant as a light platform. Several brands of both bulbs and controllers use the same protocol and they have the HF-LPB100 chipset in common. The chances are high that your bulb or controller (eg. WiFi LED CONTROLLER) will work if you can control the device with the MagicHome app. Example of bulbs: @@ -22,9 +22,12 @@ Example of bulbs: - [MagicLight® Plus - WiFi Smart LED Light Bulb4](https://www.amazon.com/gp/product/B00NOC93NG) - [Flux WiFi Smart LED Light Bulb4](http://smile.amazon.com/Flux-WiFi-Smart-Light-Bulb/dp/B01A6GHHTE) - [WIFI smart LED light Bulb1](http://smile.amazon.com/gp/product/B01CS1EZYK) -- [Ledenet WiFi RGBW Controller](https://www.amazon.com/gp/product/B01DY56N8U) -The chances are high that your bulb or controller (eg. WiFi LED CONTROLLER) will work if you can control the device with the MagicHome app. +Examples of controllers: + +- [Ledenet WiFi RGBW Controller](https://www.amazon.com/gp/product/B01DY56N8U) +- [SUPERNIGHT WiFi Wireless LED Smart Controller](https://www.amazon.com/dp/B01JZ2SI6Q) + To enable those lights, add the following lines to your `configuration.yaml` file: @@ -37,7 +40,19 @@ light: Configuration variables: - **automatic_add** (*Optional*): To enable the automatic addition of lights on startup. -- **devices** (*Optional*): A list of devices with their ip address and a custom name to use in the frontend. +- **devices** (*Optional*): A list of devices with their ip address + +Configuration variables within devices list: + +- **name** (*Optional*): A friendly name for the device. +- **mode** (*Optional*): The chosen brightness mode; options are 'rgbw' and 'rgb', defaults to rgbw. +- **protocol** (*Optional*): Set this to 'ledenet' if you are using a ledenet bulb. + + +

        +Depending on your controller or bulb type, there are two ways to configure brightness. +The component defaults to rgbw. If your device has a separate white channel, you do not need to specify anything else; changing the brighness will set the device to white with your chosen brightness. However, if your device does not have a separate white channel, you will need to set the mode to rgb. In this mode, the device will keep the same color, and adjust the rgb values to dim or brighten the color. +

        ### {% linkable_title Example configuration %} @@ -75,7 +90,7 @@ automation: effect: random ``` -Will add a light with out the white mode: +Will add a light without the white mode: ```yaml 192.168.1.10: From f18dcf81e33e1a11b8614520319eeb206f0c877c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20H=C3=B8yer=20Iversen?= Date: Tue, 24 Jan 2017 00:25:22 +0100 Subject: [PATCH 067/103] Update switch.broadlink.markdown (#1856) --- source/_components/switch.broadlink.markdown | 3 +++ 1 file changed, 3 insertions(+) diff --git a/source/_components/switch.broadlink.markdown b/source/_components/switch.broadlink.markdown index a3233fefef9..88f5acf5d26 100644 --- a/source/_components/switch.broadlink.markdown +++ b/source/_components/switch.broadlink.markdown @@ -42,6 +42,9 @@ Configuration variables: - **command_off** (*Required*): Base64 encoded packet from RM device to take for off. +Information about how to install on Windows can be found here: https://home-assistant.io/components/sensor.broadlink/#microsoft-windows-installation + + ### {% linkable_title How to obtain IR/RF packets? %} Choose Call Service from the Developer Tools. Choose the service broadlink/learn_command from the list of Available services: and hit CALL SERVICE. Press the button on your remote with in 20 seconds. The packet will be printed in the log and as a persistent notification. From b9b18124a6c0ea534fe005a1617cc20a7f837075 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Sun, 22 Jan 2017 11:29:27 +0100 Subject: [PATCH 068/103] Minimize configuration sample --- source/_components/switch.bbb_gpio.markdown | 2 -- 1 file changed, 2 deletions(-) diff --git a/source/_components/switch.bbb_gpio.markdown b/source/_components/switch.bbb_gpio.markdown index e03354ef118..58022c11f3e 100644 --- a/source/_components/switch.bbb_gpio.markdown +++ b/source/_components/switch.bbb_gpio.markdown @@ -25,8 +25,6 @@ switch: name: LED Red P9_12: name: LED Green - initial: true - invert_logic: true ``` Configuration variables: From 2e507945ff46be0ab42d11c3e190ac7392b76888 Mon Sep 17 00:00:00 2001 From: Pascal Vizeli Date: Tue, 24 Jan 2017 09:25:55 +0100 Subject: [PATCH 069/103] Create sonos_say.markdown cookbook (#1816) * Create sonos_say.markdown * Don't render templates --- source/_cookbook/sonos_say.markdown | 49 +++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 source/_cookbook/sonos_say.markdown diff --git a/source/_cookbook/sonos_say.markdown b/source/_cookbook/sonos_say.markdown new file mode 100644 index 00000000000..223c2acaea1 --- /dev/null +++ b/source/_cookbook/sonos_say.markdown @@ -0,0 +1,49 @@ +--- +layout: page +title: "Sonos say script to speak with text-to-speech" +description: "Sonos say script to speak with text-to-speech." +date: 2017-01-18 00:00 +sidebar: true +comments: false +sharing: true +footer: true +ha_category: Automation Examples +--- + +#### {% linkable_title Sonos say script to speak with text-to-speech %} + +This script allow you to use TTS on sonos in a easy way with all features. + +```yaml +script: + sonos_say: + alias: "Sonos TTS script" + sequence: + - service: media_player.sonos_snapshot + data_template: + entity_id: {% raw %}{{ sonos_entity }}{% endraw %} + - service: media_player.sonos_unjoin + data_template: + entity_id: {% raw %}{{ sonos_entity }}{% endraw %} + - service: media_player.volume_set + data_template: + entity_id: {% raw %}{{ sonos_entity }}{% endraw %} + volume_level: {% raw %}{{ volume }}{% endraw %} + - service: tts.voicerss_say + data_template: + entity_id: {% raw %}{{ sonos_entity }}{% endraw %} + message: {% raw %}{{ message }}{% endraw %} + - delay: '00:00:10' + - service: media_player.sonos_restore + data_template: + entity_id: {% raw %}{{ sonos_entity }}{% endraw %} +``` + +We call this now with: +```yaml +service: script.sonos_say +data: + sonos_entity: media_player.kitchen + volume: 0.3 + message: 'Your husband comming home!" +``` From 8ca99e1d2f3a41228c4d02d967354ac1657fef20 Mon Sep 17 00:00:00 2001 From: Robbie Trencheny Date: Tue, 24 Jan 2017 01:11:12 -0800 Subject: [PATCH 070/103] Spelling fix on notify.kodi --- source/_components/notify.kodi.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/notify.kodi.markdown b/source/_components/notify.kodi.markdown index 057a3ab86c3..db80cf189c9 100644 --- a/source/_components/notify.kodi.markdown +++ b/source/_components/notify.kodi.markdown @@ -13,7 +13,7 @@ ha_release: 0.29 --- -The `Kodi` platform allows you so send messages to your [Kodi](https://kodi.tv/) multimedia system from Home Assistant. +The `Kodi` platform allows you to send messages to your [Kodi](https://kodi.tv/) multimedia system from Home Assistant. To add Kodi to your installation, add the following to your `configuration.yaml` file: From f4778a3aa4980a835ede367603c401fd634e5973 Mon Sep 17 00:00:00 2001 From: Robbie Trencheny Date: Tue, 24 Jan 2017 01:22:05 -0800 Subject: [PATCH 071/103] Spelling fix for HTML5 push notifications --- source/_components/notify.html5.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/notify.html5.markdown b/source/_components/notify.html5.markdown index 6d618ba4e1f..63197a526ea 100644 --- a/source/_components/notify.html5.markdown +++ b/source/_components/notify.html5.markdown @@ -36,7 +36,7 @@ Configuration variables: - Create new project at [https://console.cloud.google.com/home/dashboard](https://console.cloud.google.com/home/dashboard). - Go to [https://console.cloud.google.com/apis/credentials/domainverification](https://console.cloud.google.com/apis/credentials/domainverification) and verify your domain. - After that, go to [https://console.firebase.google.com](https://console.firebase.google.com) and select import Google project, select the project you created. -- Then, click the clogwheel on top left and select "Project settings". +- Then, click the cogwheel on top left and select "Project settings". - Select Cloud messaging tab if under server key is button Regenerate key, click that. From 39de8342a336cbf06354f1e087d8a284b9b4bd5f Mon Sep 17 00:00:00 2001 From: JammyDodger231 Date: Tue, 24 Jan 2017 10:57:25 +0000 Subject: [PATCH 072/103] Added in second implementation (#1864) Added in my implementation of MQTT light control for using addressable LED strips like the WS2812B, NeoPixels and the rest. --- source/_components/light.mqtt_json.markdown | 2 ++ 1 file changed, 2 insertions(+) diff --git a/source/_components/light.mqtt_json.markdown b/source/_components/light.mqtt_json.markdown index c2eed64ddb7..07809d16fb6 100644 --- a/source/_components/light.mqtt_json.markdown +++ b/source/_components/light.mqtt_json.markdown @@ -97,3 +97,5 @@ light: ### {% linkable_title Implementations %} A full example of custom lighting using this platform and an ESP8266 microcontroller can be found [here](https://github.com/corbanmailloux/esp-mqtt-rgb-led). It supports on/off, brightness, transitions, RGB colors, and flashing. + +There is also another implementation forked from the above repo, it supports all the same features but is made for addressable LED strips using FastLED on a NodeMCU V3 it can be found [here](https://github.com/JammyDodger231/nodemcu-mqtt-rgb-led) From 1c42266be5af773bbe1022548cb2c089a5ee2488 Mon Sep 17 00:00:00 2001 From: Oliv3rDog Date: Tue, 24 Jan 2017 12:17:36 -0200 Subject: [PATCH 073/103] Update switch.broadlink.markdown --- source/_components/switch.broadlink.markdown | 42 ++++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/source/_components/switch.broadlink.markdown b/source/_components/switch.broadlink.markdown index 88f5acf5d26..a17f27dda6e 100644 --- a/source/_components/switch.broadlink.markdown +++ b/source/_components/switch.broadlink.markdown @@ -117,3 +117,45 @@ switch 2: friendly_name: 'Humidifier' ``` + + +How to use E-CONTROL remotes on Home Assistant + +If you already have your remotes learned on E-Control app you can use this method to "copy" trem to HA. + +First get or learn all the remotes you want to add on HA in E-CONTROL + +1) download script from https://github.com/NightRang3r/Broadlink-e-control-db-dump5 + +2) open the e-control app and on the left side menu choose "Share" and then "Share to other phones in WLAN" it should generate the files you will need on the script. + +3) Connect your Android device to your computer and browse the SD card / External Storage folder "/broadlink/newremote/SharedData/" You need to get the following files: +jsonSubIr +jsonButton +jsonIrCode +and put them in the same folder as this script. + +4) Install Requirement: simplejson +pip install simplejson +(you must install simplejson in the same python version you will use to run the scripts) +(to check the version it is installed, you simple try to install again and will get the "already satisfied") +(some one got it installed on 2.7 with 'sudo easy_install simplejson') + +5) Navigate to the fold you have downloaded and run: +python getBroadlinkSharedData.py +Follow the screen steps. +(those scripts were tested on python2.7) + +6) Install python broadlink library: +git clone https://github.com/mjg59/python-broadlink.git1 +(navigate to folder you downloaded) +sudo python setup.py install + +7) Test the codes you got by using sendcode script you have already downloded. +You need to edit the script with your RM Pro IP Address and MAC Address and with the code in hex format. +When run the script, you know the code works when get message +Code sent... +Not every code works. + +8) Convert the working HEX codes to Base64 here: http://tomeko.net/online_tools/hex_to_base64.php?lang=en1 +and use on HA. From 2f9ad06aebb23dba072a9fffe8a78563430e803c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20H=C3=B8yer=20Iversen?= Date: Tue, 24 Jan 2017 21:35:49 +0100 Subject: [PATCH 074/103] Update switch.broadlink.markdown --- source/_components/switch.broadlink.markdown | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/source/_components/switch.broadlink.markdown b/source/_components/switch.broadlink.markdown index 88f5acf5d26..b42360acaa7 100644 --- a/source/_components/switch.broadlink.markdown +++ b/source/_components/switch.broadlink.markdown @@ -58,6 +58,7 @@ switch 2: host: 192.168.1.2 mac: 'B4:43:0D:CC:0F:58' timeout: 15 + switches: # Will work on most Phillips tvs: tv: friendly_name: "Phillips Tv" @@ -90,11 +91,12 @@ switch 2: host: 192.168.1.2 mac: 'B4:43:0D:CC:0F:58' timeout: 15 + switches: # Will work on most Phillips tvs: tv: friendly_name: "Phillips Tv" command_on: 'JgAcAB0dHB44HhweGx4cHR06HB0cHhwdHB8bHhwADQUAAAAAAAAAAAAAAAA=' - + command_off: 'JgAaABweOR4bHhwdHB4dHRw6HhsdHR0dOTocAA0FAAAAAAAAAAAAAAAAAAA=' ``` From f3bb7d6b4759320b72f43e5502ee6c3e5a23b7c3 Mon Sep 17 00:00:00 2001 From: Robbie Trencheny Date: Tue, 24 Jan 2017 13:20:52 -0800 Subject: [PATCH 075/103] Cleanup layout and grammar --- source/_components/switch.broadlink.markdown | 55 +++++++++++--------- 1 file changed, 30 insertions(+), 25 deletions(-) diff --git a/source/_components/switch.broadlink.markdown b/source/_components/switch.broadlink.markdown index a17f27dda6e..6317b4a9b46 100644 --- a/source/_components/switch.broadlink.markdown +++ b/source/_components/switch.broadlink.markdown @@ -119,43 +119,48 @@ switch 2: ``` -How to use E-CONTROL remotes on Home Assistant +### {% 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. -First get or learn all the remotes you want to add on HA in E-CONTROL +First get or learn all the remotes you want to add on HA in E-Control -1) download script from https://github.com/NightRang3r/Broadlink-e-control-db-dump5 +1. Download -2) open the e-control app and on the left side menu choose "Share" and then "Share to other phones in WLAN" it should generate the files you will need on the script. + Get the script from [here](https://github.com/NightRang3r/Broadlink-e-control-db-dump5). -3) Connect your Android device to your computer and browse the SD card / External Storage folder "/broadlink/newremote/SharedData/" You need to get the following files: -jsonSubIr -jsonButton -jsonIrCode -and put them in the same folder as this script. +2. Dump the data from the app -4) Install Requirement: simplejson -pip install simplejson -(you must install simplejson in the same python version you will use to run the scripts) -(to check the version it is installed, you simple try to install again and will get the "already satisfied") -(some one got it installed on 2.7 with 'sudo easy_install simplejson') + Open the E-Control app on your mobile device. On the left side menu choose "Share" and then "Share to other phones in WLAN". It will generate the files you will need for the script. -5) Navigate to the fold you have downloaded and run: -python getBroadlinkSharedData.py -Follow the screen steps. -(those scripts were tested on python2.7) +3. Get data from your Android device -6) Install python broadlink library: -git clone https://github.com/mjg59/python-broadlink.git1 -(navigate to folder you downloaded) -sudo python setup.py install + Connect your Android device to your computer and browse the SD card / External Storage folder "/broadlink/newremote/SharedData/". You need to get the following files and put them in the same folder as this script.: -7) Test the codes you got by using sendcode script you have already downloded. + jsonSubIr + jsonButton + jsonIrCode + +4. Install Requirements + + Run `pip install simplejson`. You must install simplejson in the same python version you will use to run the scripts. You can ensure that the current version is installed by attempting to install again and confirming that you see "Requirement already satisfied". + +5. Get the data from the device + + Navigate to the folder you downloaded and run `python getBroadlinkSharedData.py`. Follow the steps on screen. NOTE: These scripts were only tested with Python 2.7. + +6. Install python-broadlink library: + + 1. `git clone https://github.com/mjg59/python-broadlink.git` + 2. `cd python-broadlink` + 3. `sudo python setup.py install` + +7. Test the codes +Use the `sendcode` script you have already downloded to test the codes you got from the device You need to edit the script with your RM Pro IP Address and MAC Address and with the code in hex format. When run the script, you know the code works when get message Code sent... Not every code works. -8) Convert the working HEX codes to Base64 here: http://tomeko.net/online_tools/hex_to_base64.php?lang=en1 -and use on HA. +8. Convert the hex codes to base64 +Use [this](http://tomeko.net/online_tools/hex_to_base64.php?lang=en1) tool to conver the hex codes to base64 for use with Home Assistant. From a11ff60b86a7fb82f48b4ed6f1e9e198eaddf482 Mon Sep 17 00:00:00 2001 From: Stu Gott Date: Wed, 25 Jan 2017 01:10:23 -0500 Subject: [PATCH 076/103] Update switch.wemo.markdown (#1869) --- source/_components/switch.wemo.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/switch.wemo.markdown b/source/_components/switch.wemo.markdown index a650562ca1b..7b6a4ae9018 100644 --- a/source/_components/switch.wemo.markdown +++ b/source/_components/switch.wemo.markdown @@ -13,7 +13,7 @@ ha_iot_class: "Local Push" --- -The `wemo` platform allows you to control your [Belkin WeMo](http://www.belkin.com/us/p/P-F7C027/) switches from within Home Assistant. +The `wemo` platform allows you to control your [Belkin WeMo](http://www.belkin.com/us/p/P-F7C027/) switches from within Home Assistant. This includes support for Wemo enabled [Mr. Coffee](http://www.mrcoffee.com/wemo-landing-page.html) smart coffee makers. They will be automatically discovered if the discovery component is enabled. From 297e37dbae17389d1c2816f2b1c40e0c48458952 Mon Sep 17 00:00:00 2001 From: nunojusto Date: Wed, 25 Jan 2017 08:40:34 +0000 Subject: [PATCH 077/103] correct value_template format for command_state (#1868) --- source/_components/switch.command_line.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/switch.command_line.markdown b/source/_components/switch.command_line.markdown index f62e5bc67ca..5c8574118ea 100644 --- a/source/_components/switch.command_line.markdown +++ b/source/_components/switch.command_line.markdown @@ -59,7 +59,7 @@ switch: command_on: "/usr/bin/curl -X GET http://192.168.1.10/digital/4/1" command_off: "/usr/bin/curl -X GET http://192.168.1.10/digital/4/0" command_state: "/usr/bin/curl -X GET http://192.168.1.10/digital/4" - value_template: '{% raw %}{{ return_value == "1" }}{% endraw %}' + value_template: '{% raw %}{{ value == "1" }}{% endraw %}' friendly_name: Kitchen Lightswitch ``` From 54944aac501c302edc27dc612086e58582087460 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20H=C3=B8yer=20Iversen?= Date: Wed, 25 Jan 2017 10:55:31 +0100 Subject: [PATCH 078/103] Update switch.broadlink.markdown --- source/_components/switch.broadlink.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/switch.broadlink.markdown b/source/_components/switch.broadlink.markdown index 6317b4a9b46..7ce70e8aeef 100644 --- a/source/_components/switch.broadlink.markdown +++ b/source/_components/switch.broadlink.markdown @@ -163,4 +163,4 @@ Code sent... Not every code works. 8. Convert the hex codes to base64 -Use [this](http://tomeko.net/online_tools/hex_to_base64.php?lang=en1) tool to conver the hex codes to base64 for use with Home Assistant. +Use [this](http://tomeko.net/online_tools/hex_to_base64.php?lang=en1) tool to convert the hex codes to base64 for use with Home Assistant. From 03d44a12b0c26552346055682db7132d358928a5 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Wed, 25 Jan 2017 11:13:20 +0100 Subject: [PATCH 079/103] Revert "correct value_template format for command_state" (#1873) --- source/_components/switch.command_line.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/switch.command_line.markdown b/source/_components/switch.command_line.markdown index 5c8574118ea..f62e5bc67ca 100644 --- a/source/_components/switch.command_line.markdown +++ b/source/_components/switch.command_line.markdown @@ -59,7 +59,7 @@ switch: command_on: "/usr/bin/curl -X GET http://192.168.1.10/digital/4/1" command_off: "/usr/bin/curl -X GET http://192.168.1.10/digital/4/0" command_state: "/usr/bin/curl -X GET http://192.168.1.10/digital/4" - value_template: '{% raw %}{{ value == "1" }}{% endraw %}' + value_template: '{% raw %}{{ return_value == "1" }}{% endraw %}' friendly_name: Kitchen Lightswitch ``` From 6c8215ea176719e51fb5f8f1646178ddd1538338 Mon Sep 17 00:00:00 2001 From: godloth Date: Wed, 25 Jan 2017 05:15:15 -0500 Subject: [PATCH 080/103] added delimiter to fix some display errors (#1874) --- source/_components/binary_sensor.rest.markdown | 1 + 1 file changed, 1 insertion(+) diff --git a/source/_components/binary_sensor.rest.markdown b/source/_components/binary_sensor.rest.markdown index f6157737bb2..9ee605dad67 100644 --- a/source/_components/binary_sensor.rest.markdown +++ b/source/_components/binary_sensor.rest.markdown @@ -109,3 +109,4 @@ Authorization: Basic aGExOnRlc3Qx Accept-Encoding: identity Content-Type: application/json User-Agent: Home Assistant +``` From cb9b7f056732d1ec950c42053fee08baa1868dda Mon Sep 17 00:00:00 2001 From: ThUnD3r|Gr33n Date: Wed, 25 Jan 2017 11:30:06 +0100 Subject: [PATCH 081/103] Corrected automation part: event_type and event_data (#1744) automation: - alias: Open garage door trigger: platform: event event_type: openalpr.found event_data: entity_id: openalpr.camera_garage_1 plate: XXXXXXXX --- source/_components/openalpr.markdown | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/_components/openalpr.markdown b/source/_components/openalpr.markdown index f99797d6d20..1649693a5df 100644 --- a/source/_components/openalpr.markdown +++ b/source/_components/openalpr.markdown @@ -118,8 +118,8 @@ automation: - alias: Open garage door trigger: platform: event - Event_type: openalpr.found - Event_data: + event_type: openalpr.found + event_data: entity_id: openalpr.camera_garage_1 plate: BE2183423 ... From cf48134a2eb1fd67c965469128f92ebce76162e4 Mon Sep 17 00:00:00 2001 From: Pascal Vizeli Date: Wed, 25 Jan 2017 12:16:06 +0100 Subject: [PATCH 082/103] Update image_processing.openalpr_cloud.markdown --- source/_components/image_processing.openalpr_cloud.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/image_processing.openalpr_cloud.markdown b/source/_components/image_processing.openalpr_cloud.markdown index d56d78ccdcb..1b5be4e79dc 100644 --- a/source/_components/image_processing.openalpr_cloud.markdown +++ b/source/_components/image_processing.openalpr_cloud.markdown @@ -32,5 +32,5 @@ Configuration variables: - **api_key** (*Required*): You need an API key from [OpenALPR Cloud](https://cloud.openalpr.com/). - **confidence** (*Optional*): The minimum of confidence in percent to process with Home Assistant. Defaults to 80. - **source** array (*Required*): List of image sources. - - **entities** (*Required*): A list of devices to add in Home Assistant. + - **entity_id** (*Required*): A list of devices to add in Home Assistant. - **name** (*Optional*): This parameter allows you to override the name of your OpenALPR entity. From a3c7b2e333208d51fd5c6ae58a0c28b9a57b48d5 Mon Sep 17 00:00:00 2001 From: ThUnD3r|Gr33n Date: Wed, 25 Jan 2017 16:27:58 +0100 Subject: [PATCH 083/103] Configuration correction. (#1875) Hey fellas. Changed the Friendly name indicator in config. Have a great day! --- source/_components/light.zengge.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/light.zengge.markdown b/source/_components/light.zengge.markdown index d19d2eacdf6..ed15a92752a 100644 --- a/source/_components/light.zengge.markdown +++ b/source/_components/light.zengge.markdown @@ -27,4 +27,4 @@ Configuration variables: - **devices** array (*Required*): List of your devices/bulbs. - **MAC address** (*Required*): The MAC address of the bulb. - - **MAC address** (*Optional*): Friendly name for the frontend. + - **name** (*Optional*): Friendly name for the frontend. From ce79924ed019405963afd21b4842f94188bb0958 Mon Sep 17 00:00:00 2001 From: markcarline Date: Wed, 25 Jan 2017 15:30:14 +0000 Subject: [PATCH 084/103] Update z-wave.markdown (#1835) The documentation mentions "auto_heal" which I think it should be "autoheal" ? --- source/getting-started/z-wave.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/getting-started/z-wave.markdown b/source/getting-started/z-wave.markdown index 01c45f1b787..f7b4d3c89f3 100644 --- a/source/getting-started/z-wave.markdown +++ b/source/getting-started/z-wave.markdown @@ -242,7 +242,7 @@ The `zwave` component exposes multiple services to help maintain the network. | stop_network | Stops the Z-Wave network.| | test_network | Tells the controller to send no-op commands to each node and measure the time for a response. In theory, this can also bring back nodes which have been marked "presumed dead".| -The `soft_reset` and `heal_network` commands can be used as part of an automation script to help keep a Z-Wave network running reliably as shown in the example below. By default, Home Assistant will run a `heal_network` at midnight. This is a configuration option for the `zwave` component, the option defaults to `true` but can be disabled by setting `auto_heal` to false. Using the `soft_reset` function with some Z-Wave controllers can cause the Z-Wave network to hang. If you're having issues with your Z-Wave network try disabling this automation. +The `soft_reset` and `heal_network` commands can be used as part of an automation script to help keep a Z-Wave network running reliably as shown in the example below. By default, Home Assistant will run a `heal_network` at midnight. This is a configuration option for the `zwave` component, the option defaults to `true` but can be disabled by setting `autoheal` to false. Using the `soft_reset` function with some Z-Wave controllers can cause the Z-Wave network to hang. If you're having issues with your Z-Wave network try disabling this automation. ```yaml # Example configuration.yaml automation entry From fd4cf4662b2717050857f53f0f69bbfa6350173d Mon Sep 17 00:00:00 2001 From: Adam Mills Date: Wed, 25 Jan 2017 10:39:08 -0500 Subject: [PATCH 085/103] Clarify zwave refresh delay configurations (#1858) * Clarify zwave refresh delay configurations * Update z-wave.markdown Added missing word. --- source/getting-started/z-wave.markdown | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/getting-started/z-wave.markdown b/source/getting-started/z-wave.markdown index f7b4d3c89f3..b2d7fcc8965 100644 --- a/source/getting-started/z-wave.markdown +++ b/source/getting-started/z-wave.markdown @@ -79,8 +79,8 @@ Configuration variables: - **customize** (*Optional*): This attribute contains node-specific override values: - **polling_intensity** (*Optional*): Enables polling of a value and sets the frequency of polling (0=none, 1=every time through the list, 2=every other time, etc). If not specified then your device will not be polled. - **ignored** (*Optional*): Ignore this entitiy completely. It won't be shown in the Web Interface and no events are generated for it. - - **refresh_value** (*Optional*): Enable refreshing of the node value. Only light component uses this. Defaults to 2 second delay. - - **delay** (*Optional*): Specify the delay to wait for refresh of node value if you want other than 2 seconds. + - **refresh_value** (*Optional*): Enable refreshing of the node value. Only the light component uses this. Defaults to False. + - **delay** (*Optional*): Specify the delay for refreshing of node value. Only the light component uses this. Defaults to 2 seconds. - **debug** (*Optional*): Print verbose z-wave info to log. Defaults to False. To find the path of your Z-Wave USB stick or module, run: From 76a214b358b77b2352a94321ba328ac7095c1e63 Mon Sep 17 00:00:00 2001 From: Pascal Vizeli Date: Wed, 25 Jan 2017 19:19:42 +0100 Subject: [PATCH 086/103] remove delay. Is not needed on sonos --- source/_cookbook/sonos_say.markdown | 1 - 1 file changed, 1 deletion(-) diff --git a/source/_cookbook/sonos_say.markdown b/source/_cookbook/sonos_say.markdown index 223c2acaea1..a30ab882f2c 100644 --- a/source/_cookbook/sonos_say.markdown +++ b/source/_cookbook/sonos_say.markdown @@ -33,7 +33,6 @@ script: data_template: entity_id: {% raw %}{{ sonos_entity }}{% endraw %} message: {% raw %}{{ message }}{% endraw %} - - delay: '00:00:10' - service: media_player.sonos_restore data_template: entity_id: {% raw %}{{ sonos_entity }}{% endraw %} From fd0a2c0c475195e14e794a2b99bc57c631aed783 Mon Sep 17 00:00:00 2001 From: Pascal Vizeli Date: Wed, 25 Jan 2017 19:53:46 +0100 Subject: [PATCH 087/103] revert the change back to delay --- source/_cookbook/sonos_say.markdown | 1 + 1 file changed, 1 insertion(+) diff --git a/source/_cookbook/sonos_say.markdown b/source/_cookbook/sonos_say.markdown index a30ab882f2c..643e86469d5 100644 --- a/source/_cookbook/sonos_say.markdown +++ b/source/_cookbook/sonos_say.markdown @@ -33,6 +33,7 @@ script: data_template: entity_id: {% raw %}{{ sonos_entity }}{% endraw %} message: {% raw %}{{ message }}{% endraw %} + - delay: '00:00:05' - service: media_player.sonos_restore data_template: entity_id: {% raw %}{{ sonos_entity }}{% endraw %} From 5048b92d0185df0e79b97f09269fe34e64ac0dda Mon Sep 17 00:00:00 2001 From: Molodax Date: Wed, 25 Jan 2017 20:25:38 +0100 Subject: [PATCH 088/103] Update media_player.vlc.markdown adding homeassistant user to audio group is needed to make it work, see details here https://community.home-assistant.io/t/vlc-with-google-tts-on-raspberry-pi/10418 --- source/_components/media_player.vlc.markdown | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/source/_components/media_player.vlc.markdown b/source/_components/media_player.vlc.markdown index 8a9b6b48522..f3bd0064399 100644 --- a/source/_components/media_player.vlc.markdown +++ b/source/_components/media_player.vlc.markdown @@ -52,3 +52,11 @@ On macOS phython-vlc won’t find the VLC plugin directory unless you add this t ```bash export VLC_PLUGIN_PATH=$VLC_PLUGIN_PATH:/Applications/VLC.app/Contents/MacOS/plugins ``` + +##### {% linkable_title Additional configuration for Rasperry Pi %} + +You need to add `homeassistant` user to `audio` group: + +```bash +sudo usermod -a -G audio homeassistant +``` From a8e759c4e8e9cd90c4af63c7c8b32de647684093 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Thu, 26 Jan 2017 08:44:29 +0100 Subject: [PATCH 089/103] Make title linkable --- ...7-01-21-home-assistant-governance.markdown | 30 +++++++++---------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/source/_posts/2017-01-21-home-assistant-governance.markdown b/source/_posts/2017-01-21-home-assistant-governance.markdown index f5082dbbbaa..447f4dc320d 100644 --- a/source/_posts/2017-01-21-home-assistant-governance.markdown +++ b/source/_posts/2017-01-21-home-assistant-governance.markdown @@ -14,7 +14,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. -## Code of Conduct +## {% 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. @@ -24,7 +24,7 @@ Moving forward this Code of Conduct will be active for all projects within the H [coc]: /developers/code_of_conduct/ -## Contributor License Agreement +## {% linkable_title Contributor License Agreement %} Moving forward we will also require that all contributors to any project have electronically signed a contributor license agreement (CLA). We have adopted the CLA that GitHub uses for their projects. Currently we have no plans to retroactively require a CLA for previous contributions, only those going forward. @@ -34,7 +34,7 @@ Until a signed CLA is on file your pull request will not be reviewed or accepted A CLA is difficult to describe but GitHub did an excellent job so this next section is taken from [https://cla.github.com][gh-cla]: -### What is a Contributor License Agreement? +### {% linkable_title What is a Contributor License Agreement? %} A Contributor License Agreement, known as a CLA, asks contributors to confirm that: @@ -43,42 +43,42 @@ A Contributor License Agreement, known as a CLA, asks contributors to confirm th The GitHub CLA helps ensure the smooth operation and usability of the open source projects that we maintain. -### Why is a CLA necessary? +### {% linkable_title Why is a CLA necessary? %} It depends on the jurisdiction, but in the United States, contributions are owned by the author or their employer. When the contribution is accepted, the project becomes a bundle of derivative works. The agreement of all contributors are necessary to maintain distribution of the complete project and to any licensing agreement. -### Isn’t that the purpose of an open source license? +### {% linkable_title Isn’t that the purpose of an open source license?v Most open source licenses deal with use of the original code, and don’t refer to contributions, or derivatives of the original. -### How does a CLA protect a project? +### {% linkable_title How does a CLA protect a project? %} If the owner of a contribution decides that they don’t want the contribution to be part of the project or in any given distribution, the law is on their side. The project, contributors, and users may be subject to legal action. This may require payment of damages and could prevent further usage or contributions until the matter is resolved. Even when there is no legal pursuit, too much ambiguity can jeopardize or doom a project by preventing those that can’t risk legal action from getting involved. -### Why does it seem like only “corporate” projects have a CLA? +### {% linkable_title Why does it seem like only "corporate" projects have a CLA? %} -There are many projects without corporate ownership that use a CLA or even a copyright assignment–jQuery and Eclipse, for example. However, it is true that projects with financial backing tend to be at a higher risk of becoming a target, so they may have a lower tolerance for legal ambiguity. +There are many projects without corporate ownership that use a CLA or even a copyright assignment: jQuery and Eclipse, for example. However, it is true that projects with financial backing tend to be at a higher risk of becoming a target, so they may have a lower tolerance for legal ambiguity. -### What makes the GitHub CLA different from other CLAs? +### {% linkable_title What makes the GitHub CLA different from other CLAs? %} The GitHub CLA does not include benign terms that serve no purpose, nor does it include pernicious terms that try to grab more rights than necessary to protect users of the project. Accepting the CLA is a low-overhead click-through when making a pull request, and it only needs to be accepted on the first contribution to a project or organization. [gh-cla]: https://cla.github.com/ -## Security requirements +## {% linkable_title Security requirements %} With more collaborators involved with Home Assistant we are also exposing ourselves to more risk as more people have write access. As such we taking the following steps. 1. As of November 3rd, 2016, all collaborators have been required to have 2 factor authentication (2FA) enabled on their GitHub account. 2. Going forward, we will do an audit from time to time and strip collaborators from write access if they haven't contributed for a while. This is in no sense meant to boot people, and you are absolutely eligible to get it back in the future when you wish start contributing again. -## Licensing +## {% linkable_title Licensing %} We will now ensure that a `LICENSE.md` file exists in all projects under the Home Assistant organization and is an [OSI approved open source license](https://opensource.org/licenses) or a [Creative Commons](https://creativecommons.org) license. -### Code License +### {% linkable_title Code License %} The chosen license for all code projects under the Home Assistant organization is The MIT License. @@ -88,14 +88,14 @@ Wikipedia has this to say about it: > The MIT License is a permissive free software license originating at the Massachusetts Institute of Technology (MIT). As a permissive license, it puts only very limited restriction on reuse and has therefore an excellent license compatibility. The MIT license permits reuse within proprietary software provided that all copies of the licensed software include a copy of the MIT License terms and the copyright notice. The MIT license is also compatible with many copyleft licenses, such as the GNU General Public License (GPL); MIT licensed software can be integrated into GPL software, but not the other way around. -### Documentation License +### {% linkable_title Documentation License %} All content on home-assistant.io and all other documentation/asset projects under the Home Assistant organization will be licensed under the Creative Commons License, specifically the [Attribution-NonCommercial-ShareAlike 4.0 International](https://creativecommons.org/licenses/by-nc-sa/4.0/) license. -## Crediting contributors +## {% linkable_title Crediting contributors %} We have now mostly automated updating the [Credits](/developers/credits/) page so that contributors get their attribution more quickly. -## In closing +## {% linkable_title In closing %} We hope you understand that our desire with these changes is only to help protect the amazing community that has been built around Home Assistant. If you have any questions, please contact me via email, Twitter or Gitter. From 9dd9a1fb76bcf91dc36c7f9c79e4ae5b2a9868e5 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Thu, 26 Jan 2017 08:47:21 +0100 Subject: [PATCH 090/103] Fix markup --- source/_posts/2017-01-21-home-assistant-governance.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_posts/2017-01-21-home-assistant-governance.markdown b/source/_posts/2017-01-21-home-assistant-governance.markdown index 447f4dc320d..4575ee38126 100644 --- a/source/_posts/2017-01-21-home-assistant-governance.markdown +++ b/source/_posts/2017-01-21-home-assistant-governance.markdown @@ -47,7 +47,7 @@ The GitHub CLA helps ensure the smooth operation and usability of the open sourc It depends on the jurisdiction, but in the United States, contributions are owned by the author or their employer. When the contribution is accepted, the project becomes a bundle of derivative works. The agreement of all contributors are necessary to maintain distribution of the complete project and to any licensing agreement. -### {% linkable_title Isn’t that the purpose of an open source license?v +### {% linkable_title Isn’t that the purpose of an open source license? %} Most open source licenses deal with use of the original code, and don’t refer to contributions, or derivatives of the original. From 6dab7769665bfab53af3803df39f90d55f11c41b Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Thu, 26 Jan 2017 09:23:55 +0100 Subject: [PATCH 091/103] Fix logo --- source/_components/sensor.waqi.markdown | 10 +++++++--- source/images/supported_brands/waqi.png | Bin 0 -> 10064 bytes 2 files changed, 7 insertions(+), 3 deletions(-) create mode 100644 source/images/supported_brands/waqi.png diff --git a/source/_components/sensor.waqi.markdown b/source/_components/sensor.waqi.markdown index 73260b00339..0f78155c79e 100644 --- a/source/_components/sensor.waqi.markdown +++ b/source/_components/sensor.waqi.markdown @@ -7,8 +7,8 @@ sidebar: true comments: false sharing: true footer: true -logo: smtp.png -ha_category: Sensor +logo: waqi.png +ha_category: Health ha_release: 0.34 ha_iot_class: "Local Polling" --- @@ -22,13 +22,17 @@ To enable this sensor, add the following lines to your `configuration.yaml` file sensor: - platform: waqi locations: - - beijin + - beijing + stations: + - Beijing US Embassy ``` Configuration variables: - **locations** (*Required*): a list of location names to look for air quality data. In case a specific location has multiple registered stations all of them will be added to Home Assistant +- **stations** (*Optional*): a list of station names to look for air quality data. Station should be within locations specified above. + The value reported is an overall AQ index for the location. The values of the index can be interpreted as following: AQI | Status | Description diff --git a/source/images/supported_brands/waqi.png b/source/images/supported_brands/waqi.png new file mode 100644 index 0000000000000000000000000000000000000000..913aedf1137479c2107fe0c4552a4f20c296d0f3 GIT binary patch literal 10064 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 M8~j Date: Thu, 26 Jan 2017 14:03:01 +0100 Subject: [PATCH 092/103] Update switch.broadlink.markdown --- source/_components/switch.broadlink.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/switch.broadlink.markdown b/source/_components/switch.broadlink.markdown index 3d288b97649..903676f11d2 100644 --- a/source/_components/switch.broadlink.markdown +++ b/source/_components/switch.broadlink.markdown @@ -42,7 +42,7 @@ Configuration variables: - **command_off** (*Required*): Base64 encoded packet from RM device to take for off. -Information about how to install on Windows can be found here: https://home-assistant.io/components/sensor.broadlink/#microsoft-windows-installation +Information about how to install on Windows can be found [here](https://home-assistant.io/components/sensor.broadlink/#microsoft-windows-installation) ### {% linkable_title How to obtain IR/RF packets? %} From 87dfa42e300f07f6308c30504dfa34ceda24bb8a Mon Sep 17 00:00:00 2001 From: Oleksii Serdiuk Date: Thu, 26 Jan 2017 16:20:43 +0100 Subject: [PATCH 093/103] Add Opera to the list of supported browsers (#1877) Tested on Windows 10, Kubuntu Linux 16.10, and Android 6. --- source/getting-started/browsers.markdown | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/source/getting-started/browsers.markdown b/source/getting-started/browsers.markdown index b2035b6b599..f36be2f2a45 100644 --- a/source/getting-started/browsers.markdown +++ b/source/getting-started/browsers.markdown @@ -22,6 +22,7 @@ We would appreciate if you help to keep this page up-to-date and add feedback. | [Chrome] | 50.0.2661.102 | works | | | [Firefox] | 43.0.1 | works | | | [Iridium] | 48.2 | works | | +| [Opera] | 42.0.2393.351 | works | | ## {% linkable_title macOS %} @@ -39,7 +40,7 @@ We would appreciate if you help to keep this page up-to-date and add feedback. | [Conkeror] | 1.0.2 | works | | | [Konqueror] | | unknown | | | [Uzbl] | 0.9.0 | works | | -| [Opera] | | unknown | | +| [Opera] | 42.0.2393.351 | works | | | [Lynx] | 2.12 | fails | loads empty page | | [elinks] | | fails | page with manifest and import | | [w3m] | 0.5.3 | fails | display the icon shown while loading HA | @@ -52,6 +53,7 @@ We would appreciate if you help to keep this page up-to-date and add feedback. | :-------------------- |:---------------|:-----------|:-------------------------| | [Chrome] | 50.0.2661.89 | works | Can also be added to desktop | | [Firefox] | 46.0.1 | works | Can also be added to desktop | +| [Opera] | 42.0.2246.112628 | works | Can also be added to desktop | ## {% linkable_title iOS %} From a8d63c1f8f7d1677555c325934718f6a11c862e1 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Thu, 26 Jan 2017 16:35:28 +0100 Subject: [PATCH 094/103] Move Jupyter docs from cookbook to Ecosystem (#1860) --- .../jupyter_notebooks_graph.markdown | 13 ------------ source/_ecosystem/notebooks.markdown | 20 +++++++++++++++++++ .../notebooks/api.markdown} | 5 ++--- .../notebooks/database.markdown} | 5 ++--- source/_ecosystem/notebooks/graph.markdown | 12 +++++++++++ .../notebooks/installation.markdown} | 11 +++------- .../notebooks/stats.markdown} | 3 +-- 7 files changed, 40 insertions(+), 29 deletions(-) delete mode 100644 source/_cookbook/jupyter_notebooks_graph.markdown create mode 100644 source/_ecosystem/notebooks.markdown rename source/{_cookbook/jupyter_notebooks_api.markdown => _ecosystem/notebooks/api.markdown} (50%) rename source/{_cookbook/jupyter_notebooks_database.markdown => _ecosystem/notebooks/database.markdown} (53%) create mode 100644 source/_ecosystem/notebooks/graph.markdown rename source/{_cookbook/jupyter_notebooks_introduction.markdown => _ecosystem/notebooks/installation.markdown} (75%) rename source/{_cookbook/jupyter_notebooks_stats.markdown => _ecosystem/notebooks/stats.markdown} (82%) diff --git a/source/_cookbook/jupyter_notebooks_graph.markdown b/source/_cookbook/jupyter_notebooks_graph.markdown deleted file mode 100644 index 8e857c397e4..00000000000 --- a/source/_cookbook/jupyter_notebooks_graph.markdown +++ /dev/null @@ -1,13 +0,0 @@ ---- -layout: page -title: "Jupyter Notebooks Graph" -description: "Basic example how to create a graph with a Jupyter notebook." -date: 2016-07-23 09:00 -sidebar: true -comments: false -sharing: true -footer: true -ha_category: Jupyter Notebooks -ha_external_link: https://github.com/home-assistant/home-assistant-notebooks/blob/master/graph-single-sensor.ipynb ---- - diff --git a/source/_ecosystem/notebooks.markdown b/source/_ecosystem/notebooks.markdown new file mode 100644 index 00000000000..6dfd9a73633 --- /dev/null +++ b/source/_ecosystem/notebooks.markdown @@ -0,0 +1,20 @@ +--- +layout: page +title: "Jupyter Notebooks" +description: "Jupyter Notebooks to interact offline and online with Home Assistant." +release_date: 2016-11-13 15:00:00 +sidebar: true +comments: false +sharing: true +footer: true +--- + +The [Jupyter Notebooks](http://jupyter.org/) allows you to create and share documents that contain live code, equations, visualizations, and explanatory text directly in your browser. The web application what is formerly known as the IPython Notebook supports over 40 programming languages. + +Visit [https://try.jupyter.org/](https://try.jupyter.org/) to get a preview before you install it locally. + +

        + +

        + +[nbviewer](http://nbviewer.jupyter.org/github/home-assistant/home-assistant-notebooks/tree/master/) is rendering our notebooks online. GitHub is creating a preview as well. diff --git a/source/_cookbook/jupyter_notebooks_api.markdown b/source/_ecosystem/notebooks/api.markdown similarity index 50% rename from source/_cookbook/jupyter_notebooks_api.markdown rename to source/_ecosystem/notebooks/api.markdown index 4daaad35a5f..eb6d00aa6af 100644 --- a/source/_cookbook/jupyter_notebooks_api.markdown +++ b/source/_ecosystem/notebooks/api.markdown @@ -1,13 +1,12 @@ --- layout: page -title: "Notebook for Home Assistant Python API" +title: "Home Assistant Python API" description: "Basic example how to work with the Home Assistant Python API in a Jupyter notebook." date: 2016-07-23 09:00 sidebar: true comments: false sharing: true footer: true -ha_category: Jupyter Notebooks -ha_external_link: https://github.com/home-assistant/home-assistant-notebooks/blob/master/home-assistant-python-api.ipynb +ha_external_link: http://nbviewer.jupyter.org/github/home-assistant/home-assistant-notebooks/blob/master/home-assistant-python-api.ipynb --- diff --git a/source/_cookbook/jupyter_notebooks_database.markdown b/source/_ecosystem/notebooks/database.markdown similarity index 53% rename from source/_cookbook/jupyter_notebooks_database.markdown rename to source/_ecosystem/notebooks/database.markdown index 22802cd0709..9c62f5c79f7 100644 --- a/source/_cookbook/jupyter_notebooks_database.markdown +++ b/source/_ecosystem/notebooks/database.markdown @@ -1,13 +1,12 @@ --- layout: page -title: "Jupyter Notebooks Database" +title: "Database" description: "Basic example how to work with stored Home Assistant information in a Jupyter notebook." date: 2016-07-23 09:00 sidebar: true comments: false sharing: true footer: true -ha_category: Jupyter Notebooks -ha_external_link: https://github.com/home-assistant/home-assistant-notebooks/blob/master/database-examples.ipynb +ha_external_link: http://nbviewer.jupyter.org/github/home-assistant/home-assistant-notebooks/blob/master/database-examples.ipynb --- diff --git a/source/_ecosystem/notebooks/graph.markdown b/source/_ecosystem/notebooks/graph.markdown new file mode 100644 index 00000000000..ce0dc91cede --- /dev/null +++ b/source/_ecosystem/notebooks/graph.markdown @@ -0,0 +1,12 @@ +--- +layout: page +title: "Graph" +description: "Basic example how to create a graph with a Jupyter notebook." +date: 2016-07-23 09:00 +sidebar: true +comments: false +sharing: true +footer: true +ha_external_link: http://nbviewer.jupyter.org/github/home-assistant/home-assistant-notebooks/blob/master/graph-single-sensor.ipynb +--- + diff --git a/source/_cookbook/jupyter_notebooks_introduction.markdown b/source/_ecosystem/notebooks/installation.markdown similarity index 75% rename from source/_cookbook/jupyter_notebooks_introduction.markdown rename to source/_ecosystem/notebooks/installation.markdown index d4ed78b50c4..ffc67af78d2 100644 --- a/source/_cookbook/jupyter_notebooks_introduction.markdown +++ b/source/_ecosystem/notebooks/installation.markdown @@ -1,27 +1,22 @@ --- layout: page -title: "Jupyter Notebooks Introduction" +title: "Installation" description: "Setup and first steps for Jupyter Notebooks and Home Assistant." date: 2016-07-23 09:00 sidebar: true comments: false sharing: true footer: true -ha_category: Jupyter Notebooks --- -The [Jupyter Notebooks](http://jupyter.org/) allows you to create and share documents that contain live code, equations, visualizations, and explanatory text directly in your browser. The web application what is formerly known as the IPython Notebook supports over 40 programming languages. - -Visit [https://try.jupyter.org/](https://try.jupyter.org/) to get a preview before you install it locally. - -The very first step is to install the requirement to run Jupyter Notebooks. +To run Jupyter Notebooks locally, an installation of [Jupyter](http://jupyter.org/) is needed. Consider to run Jupyter in a [virtualenv](/getting-started/installation-virtualenv/). ```bash $ pip3 install jupyter matplotlib ```

        -Certain notebooks hosted in the [Home Assistant notebooks repository](https://github.com/home-assistant/home-assistant-notebooks) require access to a running Home Assistant instance or parts of a Home Assistant installation. If you want to run those notebooks install Home Assistant with `$ pip3 install homeassistant` as well. +Certain notebooks hosted in the [Home Assistant notebooks repository](https://github.com/home-assistant/home-assistant-notebooks) require access to a running Home Assistant instance or parts of a Home Assistant installation. If you want to run those notebooks, install Home Assistant with `$ pip3 install homeassistant` as well.

        Now you are able to start the application. diff --git a/source/_cookbook/jupyter_notebooks_stats.markdown b/source/_ecosystem/notebooks/stats.markdown similarity index 82% rename from source/_cookbook/jupyter_notebooks_stats.markdown rename to source/_ecosystem/notebooks/stats.markdown index a770b3b057a..35582c9abfa 100644 --- a/source/_cookbook/jupyter_notebooks_stats.markdown +++ b/source/_ecosystem/notebooks/stats.markdown @@ -1,13 +1,12 @@ --- layout: page -title: "Jupyter Notebooks Statistics" +title: "Statistics" description: "Basic example how to create basic statistics with a Jupyter notebook." date: 2016-10-03 09:00 sidebar: true comments: false sharing: true footer: true -ha_category: Jupyter Notebooks ha_external_link: http://nbviewer.jupyter.org/github/home-assistant/home-assistant-notebooks/blob/master/database-statistics.ipynb --- From 53f5ad4c13cdb3b311287aa169d1ad86624e7e26 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Thu, 26 Jan 2017 16:50:22 +0100 Subject: [PATCH 095/103] Add missing sidebar for notebooks --- .../asides/ecosystem_notebooks_navigation.html | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 source/_includes/asides/ecosystem_notebooks_navigation.html diff --git a/source/_includes/asides/ecosystem_notebooks_navigation.html b/source/_includes/asides/ecosystem_notebooks_navigation.html new file mode 100644 index 00000000000..72415a3dd0b --- /dev/null +++ b/source/_includes/asides/ecosystem_notebooks_navigation.html @@ -0,0 +1,15 @@ +
        + +
        +

        Jupyter Notebooks

        + +
        +
        + From e780463da2f7f88835a14500f33e3cd95f4a9f1c Mon Sep 17 00:00:00 2001 From: Jan Wh Date: Thu, 26 Jan 2017 23:05:07 +0100 Subject: [PATCH 096/103] Necessary quotation in Matrix room id or alias (#1883) * Necessary quotation in Matrix room id or alias [YAML syntax](https://symfony.com/doc/current/components/yaml/yaml_format.html) suggests that strings containing `!` and `#` should be wrapped in single or double quotes. Otherwise it will be recognised as an inline comment. * Clarified wording --- source/_components/notify.matrix.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/notify.matrix.markdown b/source/_components/notify.matrix.markdown index 1b86eea729a..ddc172f8dc0 100644 --- a/source/_components/notify.matrix.markdown +++ b/source/_components/notify.matrix.markdown @@ -36,6 +36,6 @@ Configuration variables: - **default_room** (*Required*): The room all messages will be sent to, when no other target is given. - **verify_ssl** (*Optional*): Verify the homeservers certificate. Defaults to `true`. -The target room has to be precreated, the room id can be obtained from the rooms settings dialog. Rooms by default have a canonical id of the form `!:homeserver.tld`, but can also be allocated aliases like `#roomname:homeserver.tld`. The notifying account may need to be invited to the room, depending on the individual rooms policies. +The target room has to be precreated, the room id can be obtained from the rooms settings dialog. Rooms by default have a canonical id of the form `"!:homeserver.tld"`, but can also be allocated aliases like `"#roomname:homeserver.tld"`. Make sure to use quotes around the room id or alias to escape special characters (`!`, and `#`) in YAML. The notifying account may need to be invited to the room, depending on the individual rooms policies. To use notifications, please see the [getting started with automation page](/getting-started/automation/). From c5264ad282af33d5e8326537a441f0790d9d338d Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Fri, 27 Jan 2017 02:25:55 +0100 Subject: [PATCH 097/103] Add details about HP Microserver gen8i https://community.home-assistant.io/t/hp-ilo-sensor-component/2935/9 --- source/_components/sensor.hp_ilo.markdown | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/source/_components/sensor.hp_ilo.markdown b/source/_components/sensor.hp_ilo.markdown index 69a5f170a45..d259a373444 100644 --- a/source/_components/sensor.hp_ilo.markdown +++ b/source/_components/sensor.hp_ilo.markdown @@ -67,3 +67,15 @@ Configuration variables: - **server_uid_status**: Get the status of the UID light. - **server_health**: Get server health information. - **network_settings**: Get the iLO network settings. + +

        +Not every hardware supports all values. +

        + +### {% linkable_title HP Microserver gen8 %} + +On this hardware you need to remove the below listed variables from `monitored_variables:` to avoid errors. + +- `server_oa_info` +- `server_power_readings` +- `server_power_on_time` From 974fdb2ab138af641f3082575c7331eed4a8f86d Mon Sep 17 00:00:00 2001 From: nodomain Date: Fri, 27 Jan 2017 18:42:04 +0100 Subject: [PATCH 098/103] Update history.markdown (#1823) --- source/_components/history.markdown | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/_components/history.markdown b/source/_components/history.markdown index 6bd9ae60202..b7cd506edd5 100644 --- a/source/_components/history.markdown +++ b/source/_components/history.markdown @@ -13,7 +13,7 @@ ha_release: pre 0.7 --- -The `history` component will track everything that is going on within Home Assistant and allows the user to browse through it. +The `history` component will track everything that is going on within Home Assistant and allows the user to browse through it. It depends on the `recorder` component for storing the data and uses the same database setting. If any entities are excluded from being recorded, no history will be available for these entities as well. To enable the history option in your installation, add the following to your `configuration.yaml` file: @@ -89,7 +89,7 @@ history: #### {% linkable_title Implementation details %} -The history is stored in a SQLite database `home-assistant_v2.db` within your configuration directory. +The history is stored in a SQLite database `home-assistant_v2.db` within your configuration directory if the `recorder` component is not set up differently. - events table is all events except `time_changed` that happened while recorder component was running. - states table contains all the `new_state` values of `state_changed` events. From 639504b408d7b8a13adb88bb055984df3090f45f Mon Sep 17 00:00:00 2001 From: JammyDodger231 Date: Fri, 27 Jan 2017 17:45:04 +0000 Subject: [PATCH 099/103] Update mqtt.markdown (#1884) After having my own MQTT server running on a VPS that is hosted elsewhere from my home assistant server I found that after using lets encrypt it would not allow me to use the .pem files created with home assistant. They worked natively with mosquitto_sub and owntracks but this is the only method I found to work. The change should help anyone else who can't get a secure connection and save hours of searching --- source/_components/mqtt.markdown | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/source/_components/mqtt.markdown b/source/_components/mqtt.markdown index 5f39d180cc5..e829e5da5fb 100644 --- a/source/_components/mqtt.markdown +++ b/source/_components/mqtt.markdown @@ -119,6 +119,10 @@ mqtt: There is an issue with the Mosquitto package included in Ubuntu 14.04 LTS. Specify `protocol: 3.1` in your MQTT configuration to work around this issue.

        +

        +If you are running a mosquitto instance on a different server with proper SSL encryption using a service like letsencrypt you may have to set the certificate to the operating systems own `.crt` certificates file. In the instance of ubuntu this would be `certificate: /etc/ssl/certs/ca-certificates.crt` +

        + ### {% linkable_title Public broker %} The Mosquitto project runs a [public broker](http://test.mosquitto.org). This is the easiest to set up, but there is no privacy as all messages are public. Use this only for testing purposes and not for real tracking of your devices. From 9f93cf647b90e35be8ec3027b217769c702f9cb5 Mon Sep 17 00:00:00 2001 From: Yannick Simard Date: Fri, 27 Jan 2017 14:40:51 -0500 Subject: [PATCH 100/103] Update configuration key ensor -> sensor (#1892) --- source/_components/sensor.hydroquebec.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/sensor.hydroquebec.markdown b/source/_components/sensor.hydroquebec.markdown index 27483f02c29..d49ecdf9ba6 100644 --- a/source/_components/sensor.hydroquebec.markdown +++ b/source/_components/sensor.hydroquebec.markdown @@ -18,7 +18,7 @@ Integrate your [Hydro-Québec](https://www.hydroquebec.com/portail/) consumption ```yaml # Example configuration.yaml entry -ensor: +sensor: - platform: hydroquebec username: MYUSERNAME password: MYPASSWORD From ed7ff529af63ba05535a83994251c6150ca28777 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Fri, 27 Jan 2017 21:55:38 -0800 Subject: [PATCH 101/103] Update governance post --- ...7-01-21-home-assistant-governance.markdown | 31 ++- source/developers/cla.markdown | 55 ++--- source/developers/license.markdown | 223 ++++++++++++++++-- 3 files changed, 237 insertions(+), 72 deletions(-) diff --git a/source/_posts/2017-01-21-home-assistant-governance.markdown b/source/_posts/2017-01-21-home-assistant-governance.markdown index 4575ee38126..68a5e466c21 100644 --- a/source/_posts/2017-01-21-home-assistant-governance.markdown +++ b/source/_posts/2017-01-21-home-assistant-governance.markdown @@ -1,6 +1,6 @@ --- layout: post -title: "Home Assistant Governance" +title: "Home Assistant Governance [updated]" description: "Protecting Home Assistant for all, now and into the future" date: 2017-01-21 15:05:00 -0800 date_formatted: "January 21, 2017" @@ -10,6 +10,12 @@ comments: true categories: Organisation --- +### {% linkable_title UPDATE JAN 28, 2017 %} + +After feedback from the community we have updated [the CLA][cla] and the license that Home Assistant is distributed under. For the CLA, instead of enforcing requirements on the grants and code, we now require contributions to be licensed under the Apache 2.0 license. Special thanks to [Matthew Garrett][mjg59] for his feedback and advice. This also means that starting with release 0.37, Home Assistant will re-license the current code under [the Apache 2.0 license][license]. + +--- + The Home Assistant project and community has seen enormous growth in the last three years. Many volunteers work tirelessly everyday to give you all the awesomeness that you see today. Much more work is involved than many people realize. Beyond simply coding Home Assistant, volunteers continually maintain related projects, update documentation, post examples, author blog posts, and moderate the forums and chat. This is something that we want to keep safe and functional, even as we grow. Starting today we are announcing a few initiatives to help protect our users, contributors and community members. @@ -26,7 +32,7 @@ Moving forward this Code of Conduct will be active for all projects within the H ## {% linkable_title Contributor License Agreement %} -Moving forward we will also require that all contributors to any project have electronically signed a contributor license agreement (CLA). We have adopted the CLA that GitHub uses for their projects. Currently we have no plans to retroactively require a CLA for previous contributions, only those going forward. +Moving forward we will also require that all contributors to any project have electronically signed our [contributor license agreement (CLA)][cla]. ~~We have adopted the CLA that GitHub uses for their projects~~ (see update at the top). Currently we have no plans to retroactively require a CLA for previous contributions, only those going forward. Until a signed CLA is on file your pull request will not be reviewed or accepted. When you open a new pull request, if you do not have a CLA on file, our helpful bot will walk you through the steps to complete the process. @@ -61,12 +67,6 @@ Even when there is no legal pursuit, too much ambiguity can jeopardize or doom a There are many projects without corporate ownership that use a CLA or even a copyright assignment: jQuery and Eclipse, for example. However, it is true that projects with financial backing tend to be at a higher risk of becoming a target, so they may have a lower tolerance for legal ambiguity. -### {% linkable_title What makes the GitHub CLA different from other CLAs? %} - -The GitHub CLA does not include benign terms that serve no purpose, nor does it include pernicious terms that try to grab more rights than necessary to protect users of the project. Accepting the CLA is a low-overhead click-through when making a pull request, and it only needs to be accepted on the first contribution to a project or organization. - -[gh-cla]: https://cla.github.com/ - ## {% linkable_title Security requirements %} With more collaborators involved with Home Assistant we are also exposing ourselves to more risk as more people have write access. As such we taking the following steps. @@ -80,13 +80,7 @@ We will now ensure that a `LICENSE.md` file exists in all projects under the Hom ### {% linkable_title Code License %} -The chosen license for all code projects under the Home Assistant organization is The MIT License. - -The core Home Assistant project has been licensed under the MIT license since almost the beginning of the project and is the most chosen license for open source projects. - -Wikipedia has this to say about it: - -> The MIT License is a permissive free software license originating at the Massachusetts Institute of Technology (MIT). As a permissive license, it puts only very limited restriction on reuse and has therefore an excellent license compatibility. The MIT license permits reuse within proprietary software provided that all copies of the licensed software include a copy of the MIT License terms and the copyright notice. The MIT license is also compatible with many copyleft licenses, such as the GNU General Public License (GPL); MIT licensed software can be integrated into GPL software, but not the other way around. +The chosen license for all code projects under the Home Assistant organization is [the Apache 2.0 license][license]. ### {% linkable_title Documentation License %} @@ -98,4 +92,9 @@ We have now mostly automated updating the [Credits](/developers/credits/) page s ## {% linkable_title In closing %} -We hope you understand that our desire with these changes is only to help protect the amazing community that has been built around Home Assistant. If you have any questions, please contact me via email, Twitter or Gitter. +We hope you understand that our desire with these changes is only to help protect the amazing community that has been built around Home Assistant. If you have any questions, please contact us via email, Twitter or Gitter. + +[cla]: /developers/cla/ +[mjg59]: https://twitter.com/mjg59 +[gh-cla]: https://cla.github.com/ +[license]: /developers/license/ diff --git a/source/developers/cla.markdown b/source/developers/cla.markdown index 584f1b311d6..46f9192c0a0 100644 --- a/source/developers/cla.markdown +++ b/source/developers/cla.markdown @@ -9,47 +9,35 @@ sharing: true footer: true --- -The following terms are used throughout this agreement: +# Contributor License Agreement -**You** - the person or legal entity including its affiliates asked to accept this agreement. -An affiliate is any entity that controls or is controlled by the legal entity, or is under common control with it. +``` +By making a contribution to this project, I certify that: -**Project** - is an umbrella term that refers to any and all Home Assistant open source projects. +(a) The contribution was created in whole or in part by me and I + have the right to submit it under the Apache 2.0 license; or -**Contribution** - any type of work that is submitted to a Project, including any modifications or additions to existing work. +(b) The contribution is based upon previous work that, to the best + of my knowledge, is covered under an appropriate open source + license and I have the right under that license to submit that + work with modifications, whether created in whole or in part + by me, under the Apache 2.0 license; or -**Submitted** - conveyed to a Project via a pull request, commit, issue, or any form of electronic, written, or -verbal communication with Home Assistant, contributors or maintainers. +(c) The contribution was provided directly to me by some other + person who certified (a), (b) or (c) and I have not modified + it. -# 1. Grant of Copyright License. - -Subject to the terms and conditions of this agreement, You grant to the Projects’ maintainers, contributors, -users and to Home Assistant a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, -prepare derivative works of, publicly display, publicly perform, sublicense, and distribute Your contributions and such -derivative works. Except for this license, You reserve all rights, title, and interest in your contributions. - -# 2. Grant of Patent License. - -Subject to the terms and conditions of this agreement, You grant to the Projects’ maintainers, contributors, users and to -Home Assistant a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent -license to make, have made, use, offer to sell, sell, import, and otherwise transfer your contributions, where such license -applies only to those patent claims licensable by you that are necessarily infringed by your contribution or by combination of -your contribution with the project to which this contribution was submitted. - -If any entity institutes patent litigation - including cross-claim or counterclaim in a lawsuit - against You alleging that -your contribution or any project it was submitted to constitutes or is responsible for direct or contributory patent infringement, -then any patent licenses granted to that entity under this agreement shall terminate as of the date such litigation is filed. - -# 3. Source of Contribution. - -Your contribution is either your original creation, based upon previous work that, to the best of your knowledge, -is covered under an appropriate open source license and you have the right under that license to submit that work with modifications, -whether created in whole or in part by you, or you have clearly identified the source of the contribution and any license or other -restriction (like related patents, trademarks, and license agreements) of which you are personally aware. +(d) I understand and agree that this project and the contribution + are public and that a record of the contribution (including all + personal information I submit with it) is maintained indefinitely + and may be redistributed consistent with this project or the open + source license(s) involved. +``` ## Attribution -This Contributor License Agreement is adapted from the [GitHub CLA][github-cla]. +The text of this license is available under the [Creative Commons Attribution-ShareAlike 3.0 Unported License](http://creativecommons.org/licenses/by-sa/3.0/). It is based on the Linux [Developer Certificate Of Origin](http://elinux.org/Developer_Certificate_Of_Origin), but is modified to explicitly use the Apache 2.0 license +and not mention sign-off. ## Signing @@ -59,5 +47,4 @@ To sign this CLA you must first submit a pull request to a repository under the This Contributor License Agreement (CLA) was first announced on January 21st, 2017 in [this][cla-blog] blog post and adopted January 28th, 2017. -[github-cla]: https://cla.github.com/agreement [cla-blog]: https://home-assistant.io/blog/2017/01/21/home-assistant-governance/ diff --git a/source/developers/license.markdown b/source/developers/license.markdown index ec1a81b5581..317ba72da2a 100644 --- a/source/developers/license.markdown +++ b/source/developers/license.markdown @@ -1,6 +1,6 @@ --- layout: page -title: "The MIT License (MIT)" +title: "The Apache 2.0 License" description: "The License that all Home Assistant projects are licensed under" date: 2017-01-21 15:05:00 -0800 sidebar: true @@ -9,29 +9,208 @@ sharing: true footer: true --- -Copyright © `2013-2017` `Paulus Schoutsen` +The Home Assistant source code is released under the following license. -Permission is hereby granted, free of charge, to any person -obtaining a copy of this software and associated documentation -files (the “Software”), to deal in the Software without -restriction, including without limitation the rights to use, -copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the -Software is furnished to do so, subject to the following -conditions: +``` + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION -THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES -OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT -HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -OTHER DEALINGS IN THE SOFTWARE. + 1. Definitions. -## Adoption + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. -The MIT license was adopted shortly after Home Assistant was created and all projects hosted under the Home Assistant [GitHub Organization](https://github.com/home-assistant) are licensed under it. + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright {yyyy} {name of copyright owner} + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +``` From 3fccba290bf51007afbce7c01e4c24b5186ec38b Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Fri, 27 Jan 2017 21:57:56 -0800 Subject: [PATCH 102/103] Blog tweak --- source/_posts/2017-01-21-home-assistant-governance.markdown | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/source/_posts/2017-01-21-home-assistant-governance.markdown b/source/_posts/2017-01-21-home-assistant-governance.markdown index 68a5e466c21..97b4155ff53 100644 --- a/source/_posts/2017-01-21-home-assistant-governance.markdown +++ b/source/_posts/2017-01-21-home-assistant-governance.markdown @@ -12,7 +12,9 @@ categories: Organisation ### {% linkable_title UPDATE JAN 28, 2017 %} -After feedback from the community we have updated [the CLA][cla] and the license that Home Assistant is distributed under. For the CLA, instead of enforcing requirements on the grants and code, we now require contributions to be licensed under the Apache 2.0 license. Special thanks to [Matthew Garrett][mjg59] for his feedback and advice. This also means that starting with release 0.37, Home Assistant will re-license the current code under [the Apache 2.0 license][license]. +After feedback from the community we have updated [the CLA][cla] and the license that Home Assistant is distributed under. For the CLA, instead of enforcing requirements on the grants and code, we now require contributions to be licensed under the Apache 2.0 license. Special thanks to [Matthew Garrett][mjg59] for his feedback and advice. + +Starting with release 0.37, Home Assistant will re-license the current code under [the Apache 2.0 license][license]. This is the license that will be used moving forward for all projects under our organization. --- From 94151d02b9eec551887778c28dac613b0ea80ef3 Mon Sep 17 00:00:00 2001 From: Christian Studer Date: Sat, 28 Jan 2017 08:54:14 +0100 Subject: [PATCH 103/103] Fixes a typo (#1893) --- source/getting-started/automation-trigger.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/getting-started/automation-trigger.markdown b/source/getting-started/automation-trigger.markdown index 9a3e7d7dc35..d6e15fa263a 100644 --- a/source/getting-started/automation-trigger.markdown +++ b/source/getting-started/automation-trigger.markdown @@ -131,7 +131,7 @@ automation 3: seconds: 00 ```

        - Rememebr that if you are using matching to include both `minutes` and `seconds`. Without `seconds`, your automation will trigger 60 times during the matching minute. + Remember that if you are using matching to include both `minutes` and `seconds`. Without `seconds`, your automation will trigger 60 times during the matching minute.

        ### {% linkable_title Zone trigger %}