From 34ec0f3c9432cc42c40aefd6a32c74ad3caaa899 Mon Sep 17 00:00:00 2001 From: Derek Brooks Date: Sat, 11 Nov 2017 16:26:57 -0600 Subject: [PATCH 001/993] add initial NuHeat documentation --- source/_components/climate.nuheat.markdown | 169 +++++++++++++++++++++ source/_components/nuheat.markdown | 43 ++++++ source/images/supported_brands/nuheat.png | Bin 0 -> 4061 bytes 3 files changed, 212 insertions(+) create mode 100644 source/_components/climate.nuheat.markdown create mode 100644 source/_components/nuheat.markdown create mode 100644 source/images/supported_brands/nuheat.png diff --git a/source/_components/climate.nuheat.markdown b/source/_components/climate.nuheat.markdown new file mode 100644 index 0000000000..4880f4b9a2 --- /dev/null +++ b/source/_components/climate.nuheat.markdown @@ -0,0 +1,169 @@ +--- +layout: page +title: "NuHeat Thermostat" +description: "Instructions how to integrate your NuHeat Signature thermostats within Home Assistant." +date: 2017-11-11 18:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: nuheat.png +ha_category: Climate +ha_release: 0.53 +ha_iot_class: "Cloud Polling" +--- + +

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

+ +## {% linkable_title Concepts %} + +The NuHeat Thermostat supports the following key concepts. + +The _target temperature_ is the temperature that the device attempts to achieve. The target temperature is either determined by the schedule programmed into the thermostat (_auto mode_) or may be overridden. When the target temperature is set by home assistant, the thermostat will hold this temperature until the schedule is resumed. + +When in _away mode_ the temperature is permanently overridden to the minimum temperature supported by the thermostat. + + +## {% linkable_title Attributes %} + +The following attributes are provided by the NuHeat thermostat: `name`, `temperature_unit`, `current_temperature`, `target_temperature`, `target_temperature_low`, `target_temperature_high`, `current_hold_mode`, `current_operation`, `operation_list`, `is_away_mode_on`, `min_temp`, `max_temp` + + +### {% linkable_title Attribute `name` %} + +Returns the name of the NuHeat Thermostat. + +| Attribute type | Description | +| ---------------| ----------- | +| String | Name of the thermostat + +### {% linkable_title Attribute `temperature_unit` %} + +Returns the unit of measurement used for temperature by the thermostat. + +| Attribute type | Description | +| ---------------| ----------- | +| String | Name of the temperature unit + +### {% linkable_title Attribute `current_temperature` %} + +Returns the current temperature measured by the thermostat. + +| Attribute type | Description | +| ---------------| ----------- | +| Integer | Currently measured temperature + +### {% linkable_title Attribute `target_temperature` %} + +Returns the target temperature of the thermostat, when the thermostat is +not in auto operation mode. + +| Attribute type | Description | +| ---------------| ----------- | +| Integer | Target temperature + +### {% linkable_title Attribute `target_temperature_low` %} + +Returns the desired heating temperature set in the thermostat when in +auto operation mode. + +| Attribute type | Description | +| ---------------| ----------- | +| Integer | Target temperature + +### {% linkable_title Attribute `target_temperature_high` %} + +Returns the desired cooling temperature set in the thermostat when in +auto operation mode. + +| Attribute type | Description | +| ---------------| ----------- | +| Integer | Target temperature + +### {% linkable_title Attribute `current_hold_mode` %} + +Returns the current temperature hold, if any. + +| Attribute type | Description | +| ---------------| ----------- | +| String | 'temperature', 'temporary_temperature', 'away', 'auto', etc. + +### {% linkable_title Attribute `current_operation` %} + +Returns the current operation of the thermostat. + +| Attribute type | Description | +| ---------------| ----------- | +| String | 'heat', 'idle' + +### {% linkable_title Attribute `operation_list` %} + +Returns the list of available operation modes. + +| Attribute type | Description | +| ---------------| ----------- | +| List of String | Available operation modes + +### {% linkable_title Attribute `is_away_mode_on` %} + +Returns whether the thermostat is in away mode. + +| Attribute type | Description | +| ---------------| ----------- | +| Boolean | True, False + +### {% linkable_title Attribute `min_temp` %} + +Returns the minimum supported temperature by the thermostat + +| Attribute type | Description | +| ---------------| ----------- | +| Integer | Minimum supported temperature + +### {% linkable_title Attribute `max_temp` %} + +Returns the maximum supported temperature by the thermostat + +| Attribute type | Description | +| ---------------| ----------- | +| Integer | Maximum supported temperature + + +## {% linkable_title Services %} + +The following services are provided by the NuHeat Thermostat: `set_away_mode`, `set_temperature`, `resume_program`. + +The services `fan_min_on_time`, `set_aux_heat`, `set_hold_mode`, `set_humidity`, `set_fan_mode`, `set_operation_mode`, and `set_swing_mode` offered by the [Climate component](/components/climate/) are not implemented for this thermostat. + +### {% linkable_title Service `set_away_mode` %} + +Turns the away mode on or off for the thermostat. + +| Service data attribute | Optional | Description | +| ---------------------- | -------- | ----------- | +| `entity_id` | yes | String or list of strings that point at `entity_id`'s of climate devices to control. Else targets all. +| `away_mode` | no | 'on' or 'off' + +### {% linkable_title Service `set_temperature` %} + +Puts the thermostat into a temporary hold at the given temperature. + +| Service data attribute | Optional | Description | +| ---------------------- | -------- | ----------- | +| `entity_id` | yes | String or list of strings that point at `entity_id`'s of climate devices to control. Else targets all. +| `target_temp_low` | no | Desired heating target temperature (when in auto mode) +| `target_temp_high` | no | Desired cooling target temperature (when in auto mode) +| `temperature` | no | Desired target temperature (when not in auto mode) + +Only the target temperatures relevant for the current operation mode need to +be provided. + +### {% linkable_title Service `resume_program` %} + +Resumes the currently active schedule. + +| Service data attribute | Optional | Description | +| ---------------------- | -------- | ----------- | +| `entity_id` | yes | String or list of strings that point at `entity_id`'s of climate devices to control. Else targets all. diff --git a/source/_components/nuheat.markdown b/source/_components/nuheat.markdown new file mode 100644 index 0000000000..946c5ca523 --- /dev/null +++ b/source/_components/nuheat.markdown @@ -0,0 +1,43 @@ +--- +layout: page +title: "NuHeat" +description: "Instructions how to integrate your NuHeat Signature thermostats within Home Assistant." +date: 2017-11-11 18:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: nuheat.png +ha_category: Hub +ha_release: 0.53 +ha_iot_class: "Cloud Polling" +--- + +The `nuheat` component lets you control connected floor heating thermostats from [NuHeat](http://www.nuheat.com/). + +First, you will need to obtain your thermostat's numeric serial number or ID by logging into [MyNuHeat.com](https://mynuheat.com/) and selecting your thermostat(s). + +Once you have the Thermostat ID(s), add the following information to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +nuheat: + username: you@example.com + password: very-secure-password + devices: 12345 + +# Example configuration.yaml entry with multiple thermostats +nuheat: + username: you@example.com + password: very-secure-password + devices: + - 12345 + - 67890 +``` + +Configuration variables: + +- **username** (*Required*): The username for accessing your MyNuHeat account. +- **password** (*Required*): The password for accessing your MyNuHeat account. +- **devices** (*Required*): The serial number / ID of each thermostat you would like integrate with Home Assistant. + diff --git a/source/images/supported_brands/nuheat.png b/source/images/supported_brands/nuheat.png new file mode 100644 index 0000000000000000000000000000000000000000..35016d1c223346c94cce0b7d6be6a7547977c84c GIT binary patch literal 4061 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 Date: Sat, 11 Nov 2017 16:30:23 -0600 Subject: [PATCH 002/993] bump ha_release to 0.58 --- source/_components/climate.nuheat.markdown | 2 +- source/_components/nuheat.markdown | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/source/_components/climate.nuheat.markdown b/source/_components/climate.nuheat.markdown index 4880f4b9a2..053cb0c5fd 100644 --- a/source/_components/climate.nuheat.markdown +++ b/source/_components/climate.nuheat.markdown @@ -9,7 +9,7 @@ sharing: true footer: true logo: nuheat.png ha_category: Climate -ha_release: 0.53 +ha_release: 0.58 ha_iot_class: "Cloud Polling" --- diff --git a/source/_components/nuheat.markdown b/source/_components/nuheat.markdown index 946c5ca523..cf3405edd1 100644 --- a/source/_components/nuheat.markdown +++ b/source/_components/nuheat.markdown @@ -9,7 +9,7 @@ sharing: true footer: true logo: nuheat.png ha_category: Hub -ha_release: 0.53 +ha_release: 0.58 ha_iot_class: "Cloud Polling" --- From 3627455804a178b749b767fb69da62c460abae2c Mon Sep 17 00:00:00 2001 From: Derek Brooks Date: Sat, 11 Nov 2017 16:45:23 -0600 Subject: [PATCH 003/993] documentation guideline fixes --- source/_components/climate.nuheat.markdown | 2 +- source/_components/nuheat.markdown | 20 ++++++++++++++------ 2 files changed, 15 insertions(+), 7 deletions(-) diff --git a/source/_components/climate.nuheat.markdown b/source/_components/climate.nuheat.markdown index 053cb0c5fd..01addf4732 100644 --- a/source/_components/climate.nuheat.markdown +++ b/source/_components/climate.nuheat.markdown @@ -135,7 +135,7 @@ Returns the maximum supported temperature by the thermostat The following services are provided by the NuHeat Thermostat: `set_away_mode`, `set_temperature`, `resume_program`. -The services `fan_min_on_time`, `set_aux_heat`, `set_hold_mode`, `set_humidity`, `set_fan_mode`, `set_operation_mode`, and `set_swing_mode` offered by the [Climate component](/components/climate/) are not implemented for this thermostat. +The services `fan_min_on_time`, `set_aux_heat`, `set_hold_mode`, `set_humidity`, `set_fan_mode`, `set_operation_mode` and `set_swing_mode` offered by the [Climate component](/components/climate/) are not implemented for this thermostat. ### {% linkable_title Service `set_away_mode` %} diff --git a/source/_components/nuheat.markdown b/source/_components/nuheat.markdown index cf3405edd1..250f5ec7d7 100644 --- a/source/_components/nuheat.markdown +++ b/source/_components/nuheat.markdown @@ -35,9 +35,17 @@ nuheat: - 67890 ``` -Configuration variables: - -- **username** (*Required*): The username for accessing your MyNuHeat account. -- **password** (*Required*): The password for accessing your MyNuHeat account. -- **devices** (*Required*): The serial number / ID of each thermostat you would like integrate with Home Assistant. - +{% configuration %} +username: + description: The username for accessing your MyNuHeat account. + required: true + type: string +password: + description: The password for accessing your MyNuHeat account. + required: true + type: string +devices: + description: The serial number / ID of each thermostat you would like integrate with Home Assistant. + required: true + type: [string, int] +{% endconfiguration %} From 0e5f2e90078b7000afc785e831d2e1ccac8f1890 Mon Sep 17 00:00:00 2001 From: Franck Nijhof Date: Sun, 19 Nov 2017 19:16:09 +0100 Subject: [PATCH 004/993] :pencil2: Fixes a small typo --- source/_components/nuheat.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/nuheat.markdown b/source/_components/nuheat.markdown index 250f5ec7d7..6c22c3aa0e 100644 --- a/source/_components/nuheat.markdown +++ b/source/_components/nuheat.markdown @@ -45,7 +45,7 @@ password: required: true type: string devices: - description: The serial number / ID of each thermostat you would like integrate with Home Assistant. + description: The serial number / ID of each thermostat you would like to integrate with Home Assistant. required: true type: [string, int] {% endconfiguration %} From ab3772913cc4d27e3e501672a6ea60c1a7df3903 Mon Sep 17 00:00:00 2001 From: David De Sloovere Date: Sat, 25 Nov 2017 14:41:05 +0100 Subject: [PATCH 005/993] Fix HTML5 notify domain verification instructions Didn't say you need to restart. Can't get the internal link working --- source/_components/notify.html5.markdown | 24 ++++++++++++++---------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/source/_components/notify.html5.markdown b/source/_components/notify.html5.markdown index 3454716977..52f800e9a7 100644 --- a/source/_components/notify.html5.markdown +++ b/source/_components/notify.html5.markdown @@ -33,19 +33,23 @@ Configuration variables: ### {% linkable_title Getting ready for Chrome %} -1. Create new project at [https://console.cloud.google.com/home/dashboard](https://console.cloud.google.com/home/dashboard). -2. Go to [https://console.cloud.google.com/apis/credentials/domainverification](https://console.cloud.google.com/apis/credentials/domainverification) and verify your domain. -3. After that, go to [https://console.firebase.google.com](https://console.firebase.google.com) and select import Google project, select the project you created. -4. Then, click the cogwheel on top left and select "Project settings". -5. Select 'Cloud Messaging' tab, listed beneath Project Credentials will be your 152 character 'Server Key' and 12 digit ID 'Sender ID'. +1. Make sure you can access your Home Assistant installation from outside your network over https ([see docs](https://home-assistant.io/docs/configuration/remote/)). +2. Create a new project at [https://console.cloud.google.com/home/dashboard](https://console.cloud.google.com/home/dashboard). +3. Go to [https://console.cloud.google.com/apis/credentials/domainverification](https://console.cloud.google.com/apis/credentials/domainverification) and verify your domain via Google Webmaster Central / Search Console - [hass.io instructions](#verify-your-domain-with-hassio). +4. With the domain verified, go to [https://console.firebase.google.com](https://console.firebase.google.com), select import Google project, and select the project you created. +5. Then, click the cogwheel on top left and select "Project settings". +6. Select 'Cloud Messaging' tab, listed beneath Project Credentials will be your 152 character 'Server Key' and 12 digit ID 'Sender ID'. #### {% linkable_title Verify your domain with Hass.io %} -1. For verifying your domain you need to download a file in step 2. -2. Create a dictionary named "www" in you Hass.io configuration dictionary. -3. Place the file (something like this: google*.html) in the "www" directory. -4. You can open it by going to **https://yourdomain/local/exact_file_name.html** -5. Proceed with step 3. +Follow these steps to verify domain ownership with Google Webmaster Central / Search Console: +1. Enter your domain and add **'/local'** at the end, ie. https://whitehouse.duckdns.org:8123/local +2. Select HTML file verification and download the google*.html file. +2. Create a directory named "www" in your Hass.io configuration directory (/config share from Samba add-on). +3. Place the downloaded google*.html file in the "www" directory. +4. RESTART Home Assistant - this is important! +5. Verify the file can be accessed in the browser, ie. **https://whitehouse.duckdns.org:8123/local/goole123456789.html** (change filename) - you should a plain text message saying "google-site-verification: ..." - if you see "404: Not Found" or something else, retry the above steps. +6. Go back to Google Webmaster Central / Search Console and proceed with the verification. ### {% linkable_title Requirements %} From 27bf0fa0b4a9bcac972a7cd6fe97e28cd19af6bf Mon Sep 17 00:00:00 2001 From: David De Sloovere Date: Sat, 25 Nov 2017 14:44:15 +0100 Subject: [PATCH 006/993] update on requirements --- source/_components/notify.html5.markdown | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/source/_components/notify.html5.markdown b/source/_components/notify.html5.markdown index 52f800e9a7..2b75901d10 100644 --- a/source/_components/notify.html5.markdown +++ b/source/_components/notify.html5.markdown @@ -54,12 +54,11 @@ Follow these steps to verify domain ownership with Google Webmaster Central / Se ### {% linkable_title Requirements %} The `html5` platform can only function if all of the following requirements are met: -(On Hass.io these requirements are already met.) * You are using Chrome and/or Firefox on any desktop platform, ChromeOS or Android. * Your Home Assistant instance is exposed to the world. * If using a proxy, HTTP basic authentication must be off for registering or unregistering for push notifications. It can be re-enabled afterwards. -* `pywebpush` must be installed. `libffi-dev`, `libpython-dev`, and `libssl-dev` must be installed prior to `pywebpush` (i.e. `pywebpush` probably won't automatically install). +* If you don't run Hass.io: `pywebpush` must be installed. `libffi-dev`, `libpython-dev`, and `libssl-dev` must be installed prior to `pywebpush` (i.e. `pywebpush` probably won't automatically install). * You have configured SSL for your Home Assistant. It doesn't need to be configured in Home Assistant though, i.e. you can be running [NGINX](/ecosystem/nginx/) in front of Home Assistant and this will still work. The certificate must be trustworthy (i.e. not self signed). * You are willing to accept the notification permission in your browser. From 52cb747bdef1a9b0ff404ff6b80acfec3c0e0f8f Mon Sep 17 00:00:00 2001 From: David De Sloovere Date: Sat, 25 Nov 2017 14:48:34 +0100 Subject: [PATCH 007/993] Update notify.html5.markdown --- 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 2b75901d10..8331ad249f 100644 --- a/source/_components/notify.html5.markdown +++ b/source/_components/notify.html5.markdown @@ -38,7 +38,7 @@ Configuration variables: 3. Go to [https://console.cloud.google.com/apis/credentials/domainverification](https://console.cloud.google.com/apis/credentials/domainverification) and verify your domain via Google Webmaster Central / Search Console - [hass.io instructions](#verify-your-domain-with-hassio). 4. With the domain verified, go to [https://console.firebase.google.com](https://console.firebase.google.com), select import Google project, and select the project you created. 5. Then, click the cogwheel on top left and select "Project settings". -6. Select 'Cloud Messaging' tab, listed beneath Project Credentials will be your 152 character 'Server Key' and 12 digit ID 'Sender ID'. +6. Select 'Cloud Messaging' tab, listed beneath Project Credentials will be your 152 character 'Server Key' and 12 digit ID 'Sender ID' you need for configuring this component. #### {% linkable_title Verify your domain with Hass.io %} From 5b8aabf3833fa5e7c8c4317eac3c3d9e27977e25 Mon Sep 17 00:00:00 2001 From: Derek Brooks Date: Wed, 6 Dec 2017 22:46:13 -0600 Subject: [PATCH 008/993] remove away mode documentation, since that functionality was requested to be removed --- source/_components/climate.nuheat.markdown | 29 +++------------------- 1 file changed, 4 insertions(+), 25 deletions(-) diff --git a/source/_components/climate.nuheat.markdown b/source/_components/climate.nuheat.markdown index 01addf4732..5f5ecaa0a8 100644 --- a/source/_components/climate.nuheat.markdown +++ b/source/_components/climate.nuheat.markdown @@ -23,12 +23,10 @@ The NuHeat Thermostat supports the following key concepts. The _target temperature_ is the temperature that the device attempts to achieve. The target temperature is either determined by the schedule programmed into the thermostat (_auto mode_) or may be overridden. When the target temperature is set by home assistant, the thermostat will hold this temperature until the schedule is resumed. -When in _away mode_ the temperature is permanently overridden to the minimum temperature supported by the thermostat. - ## {% linkable_title Attributes %} -The following attributes are provided by the NuHeat thermostat: `name`, `temperature_unit`, `current_temperature`, `target_temperature`, `target_temperature_low`, `target_temperature_high`, `current_hold_mode`, `current_operation`, `operation_list`, `is_away_mode_on`, `min_temp`, `max_temp` +The following attributes are provided by the NuHeat thermostat: `name`, `temperature_unit`, `current_temperature`, `target_temperature`, `current_hold_mode`, `current_operation`, `operation_list`, `min_temp`, `max_temp` ### {% linkable_title Attribute `name` %} @@ -88,7 +86,7 @@ Returns the current temperature hold, if any. | Attribute type | Description | | ---------------| ----------- | -| String | 'temperature', 'temporary_temperature', 'away', 'auto', etc. +| String | 'temperature', 'temporary_temperature', 'auto', etc. ### {% linkable_title Attribute `current_operation` %} @@ -106,14 +104,6 @@ Returns the list of available operation modes. | ---------------| ----------- | | List of String | Available operation modes -### {% linkable_title Attribute `is_away_mode_on` %} - -Returns whether the thermostat is in away mode. - -| Attribute type | Description | -| ---------------| ----------- | -| Boolean | True, False - ### {% linkable_title Attribute `min_temp` %} Returns the minimum supported temperature by the thermostat @@ -133,18 +123,9 @@ Returns the maximum supported temperature by the thermostat ## {% linkable_title Services %} -The following services are provided by the NuHeat Thermostat: `set_away_mode`, `set_temperature`, `resume_program`. +The following services are provided by the NuHeat Thermostat: `set_temperature`, `resume_program`. -The services `fan_min_on_time`, `set_aux_heat`, `set_hold_mode`, `set_humidity`, `set_fan_mode`, `set_operation_mode` and `set_swing_mode` offered by the [Climate component](/components/climate/) are not implemented for this thermostat. - -### {% linkable_title Service `set_away_mode` %} - -Turns the away mode on or off for the thermostat. - -| Service data attribute | Optional | Description | -| ---------------------- | -------- | ----------- | -| `entity_id` | yes | String or list of strings that point at `entity_id`'s of climate devices to control. Else targets all. -| `away_mode` | no | 'on' or 'off' +The services `fan_min_on_time`, `set_aux_heat`, `set_away_mode`, `set_hold_mode`, `set_humidity`, `set_fan_mode`, `set_operation_mode` and `set_swing_mode` offered by the [Climate component](/components/climate/) are not implemented for this thermostat. ### {% linkable_title Service `set_temperature` %} @@ -153,8 +134,6 @@ Puts the thermostat into a temporary hold at the given temperature. | Service data attribute | Optional | Description | | ---------------------- | -------- | ----------- | | `entity_id` | yes | String or list of strings that point at `entity_id`'s of climate devices to control. Else targets all. -| `target_temp_low` | no | Desired heating target temperature (when in auto mode) -| `target_temp_high` | no | Desired cooling target temperature (when in auto mode) | `temperature` | no | Desired target temperature (when not in auto mode) Only the target temperatures relevant for the current operation mode need to From 918487ba885339bdd7fb6821da9b1e56d7134dc4 Mon Sep 17 00:00:00 2001 From: Mark Harrison Date: Fri, 15 Dec 2017 10:15:55 +0100 Subject: [PATCH 009/993] Updated links and configuration example (#4215) Updated external links and added channel_id variable to configuration example as it is now required. --- source/_components/sensor.eliqonline.markdown | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/source/_components/sensor.eliqonline.markdown b/source/_components/sensor.eliqonline.markdown index 7d8452595f..87dd5ac8fd 100644 --- a/source/_components/sensor.eliqonline.markdown +++ b/source/_components/sensor.eliqonline.markdown @@ -14,7 +14,7 @@ ha_iot_class: "Cloud Polling" --- -Integrate your [ELIQ Online](http://eliq.se) smart meter information into Home Assistant. To get an [access token](https://my.eliq.se/user/settings/api) and the [Channel ID](https://my.eliq.se/user/settings/data), log in to your account. +Integrate your [ELIQ Online](http://eliq.io) smart meter information into Home Assistant. To get an [access token](https://my.eliq.io/user/settings/api) and the [Channel ID](https://my.eliq.io/user/settings/locations), log in to your account. To enable this sensor in your installation, add the following to your `configuration.yaml` file: @@ -23,6 +23,7 @@ To enable this sensor in your installation, add the following to your `configura sensor: - platform: eliqonline access_token: ACCESS_TOKEN + channel_id: CHANNEL_ID ``` Configuration variables: @@ -31,5 +32,5 @@ Configuration variables: - **channel_id** (*Required*): Channel ID (as integer) of your device. - **name** (*Optional*): The name of the sensor, eg. the city. -For details please check the [API documentation](https://my.eliq.se/knowledge/sv-SE/49-eliq-online/299-eliq-online-api). +For details please check the [API documentation](https://eliq.zendesk.com/hc/en-us/articles/115002708449-API-Eliq-Online). From 54d609caf9a77262789c8deae173c16716ffea4b Mon Sep 17 00:00:00 2001 From: Pascal Vizeli Date: Sun, 17 Dec 2017 10:33:42 +0100 Subject: [PATCH 010/993] Changes for 0.60 / homematic (#4219) * Changes for 0.60 / homematic * Update homematic.markdown --- source/_components/homematic.markdown | 49 ++++++++++++++++----------- 1 file changed, 30 insertions(+), 19 deletions(-) diff --git a/source/_components/homematic.markdown b/source/_components/homematic.markdown index 93cf903eb4..73287f7420 100644 --- a/source/_components/homematic.markdown +++ b/source/_components/homematic.markdown @@ -28,58 +28,69 @@ To set up the component, add the following information to your `configuration.ya ```yaml homematic: - hosts: + interfaces: wireless: - ip: 127.0.0.1 + host: 127.0.0.1 ``` Configuration variables (global): -- **hosts** (*Required*): Configuration for each host to integrate into Home Assistant. +- **interfaces** (*Required*): Configuration for each XML-RPC interface to integrate into Home Assistant. +- **hosts** (*Optional*): Configuration for each Hub (CCU/Homegear) to integrate into Home Assistant. - **local_ip** (*Optional*): IP of device running Home Assistant. Override auto-detected value for exotic network setups. - **local_port** (*Optional*): Port for connection with Home Assistant. By default it is randomly assigned. -Configuration variables (host): +Configuration variables (interface): -- **ip** (*Required*): IP address of CCU/Homegear device. +- **host** (*Required*): IP address or Hostname of CCU/Homegear device or Hass.io add-on. - **port** (*Optional*): Port of CCU/Homegear XML-RPC Server. Wireless: 2001, wired: 2000, IP: 2010, thermostatgroups: 9292. - **callback_ip** (*Optional*): Set this, if Home Assistant is reachable under a different IP from the CCU (NAT, Docker etc.). - **callback_port** (*Optional*): Set this, if Home Assistant is reachable under a different port from the CCU (NAT, Docker etc.). - **resolvenames** (*Optional*): [`metadata`, `json`, `xml`] Try to fetch device names. Defaults to `false` if not specified. - **username** (*Optional*): When fetching names via JSON-RPC, you need to specify a user with guest-access to the CCU. - **password** (*Optional*): When fetching names via JSON-RPC, you need to specify the password of the user you have configured above. -- **primary** (*Optional*): Set to `true` when using multiple hosts and this host should provide the services and variables. -- **variables** (*Optional*): Set to `true` if you want to use CCU2/Homegear variables. Should only be enabled for the primary host. When using a CCU credentials are required. - **path** (*Optional*): Set to `/groups` when using port 9292. +Configuration variables (host): + +- **host** (*Required*): IP address of CCU/Homegear device. +- **username** (*Optional*): When fetching names via JSON-RPC, you need to specify a user with guest-access to the CCU. +- **password** (*Optional*): When fetching names via JSON-RPC, you need to specify the password of the user you have configured above. + #### Example configuration with multiple protocols and some other options set: ```yaml homematic: - hosts: + interfaces: rf: - ip: 127.0.0.1 + host: 127.0.0.1 resolvenames: json username: Admin password: secret primary: true variables: true wired: - ip: 127.0.0.1 + host: 127.0.0.1 port: 2000 resolvenames: json username: Admin password: secret ip: - ip: 127.0.0.1 + host: 127.0.0.1 port: 2010 groups: - ip: 127.0.0.1 + host: 127.0.0.1 port: 9292 resolvenames: json username: Admin password: secret path: /groups + hosts: + ccu2: + host: 127.0.0.1 + username: Admin + password: secret + ``` ### {% linkable_title The `resolvenames` option %} @@ -115,7 +126,7 @@ sensor: ### {% linkable_title Variables %} It is possible to read and set values of system variables you have setup on the CCU/Homegear. The supported types for setting values are float- and bool-variables. -The states of the variables are available through the attributes of your hub entity (e.g. `homematic.rf`). Use templates (as mentioned above) to make your variables available to automations or as entities. +The states of the variables are available through the attributes of your hub entity (e.g. `homematic.ccu2`). Use templates (as mentioned above) to make your variables available to automations or as entities. The values of variables are polled from the CCU/Homegear in an interval of 30 seconds. Setting the value of a variable happens instantly and is directly pushed. ### {% linkable_title Events %} @@ -154,8 +165,8 @@ The name depends on if you chose to resolve names or not. If not, it will be the * *homematic.virtualkey*: Simulate a keypress (or other valid action) on CCU/Homegear with device or virtual keys. * *homematic.reconnect*: Reconnect to CCU/Homegear without restarting Home Assistant (useful when CCU has been restarted) -* *homematic.set_var_value*: Set the value of a system variable. -* *homematic.set_dev_value*: Control a device manually (even devices without support). Equivalent to setValue-method from XML-RPC. +* *homematic.set_variable_value*: Set the value of a system variable. +* *homematic.set_device_value*: Control a device manually (even devices without support). Equivalent to setValue-method from XML-RPC. #### {% linkable_title Examples %} Simulate a button being pressed @@ -184,9 +195,9 @@ Set boolean variable to true ```yaml ... action: - service: homematic.set_var_value + service: homematic.set_variable_value data: - entity_id: homematic.rf + entity_id: homematic.ccu2 name: Variablename value: true ``` @@ -200,7 +211,7 @@ Manually turn on a switch actor ```yaml ... action: - service: homematic.set_dev_value + service: homematic.set_device_value data: address: LEQ1234567 channel: 1 @@ -212,7 +223,7 @@ Manually set temperature on thermostat ```yaml ... action: - service: homematic.set_dev_value + service: homematic.set_device_value data: address: LEQ1234567 channel: 4 From 9ec27db1789fdc6cc322c724c06eaa5b2ad7ef41 Mon Sep 17 00:00:00 2001 From: GreenTurtwig Date: Sun, 17 Dec 2017 13:37:48 +0000 Subject: [PATCH 011/993] Documentation for Logitech UE Smart Radios (#3538) * Documentation for Logitech UE Smart Radios * Updated name. * Update example config. * Update with new configuration format. * Updated with requested changes. --- .../media_player.ue_smart_radio.markdown | 38 ++++++++++++++++++ source/images/supported_brands/ueradio.png | Bin 0 -> 6473 bytes 2 files changed, 38 insertions(+) create mode 100644 source/_components/media_player.ue_smart_radio.markdown create mode 100644 source/images/supported_brands/ueradio.png diff --git a/source/_components/media_player.ue_smart_radio.markdown b/source/_components/media_player.ue_smart_radio.markdown new file mode 100644 index 0000000000..217b625b8d --- /dev/null +++ b/source/_components/media_player.ue_smart_radio.markdown @@ -0,0 +1,38 @@ +--- +layout: page +title: "Logitech UE Smart Radio" +description: "Instructions on how to integrate a Logitech UE Smart Radio player into Home Assistant." +date: 2017-12-09 20:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: ueradio.png +ha_category: Media Player +ha_release: "0.60" +ha_iot_class: "Cloud Polling" +--- + + +The `ue_radio` platform allows you to control a [Logitech UE Smart Radio](https://www.uesmartradio.com) from Home Assistant. This lets you control both Logitech UE Smart Radios and Logitech Squeezebox Radios that have been updated with the UE Smart Radio update. + +To add your UE Smart Radio player to your installation, add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +media_player: + - platform: ue_smart_radio + username: USERNAME + password: PASSWORD +``` + +{% configuration %} +username: + description: The email you use to log in to `uesmartradio.com`. + required: true + type: string +password: + description: The password you use to log in to `uesmartradio.com`. + required: true + type: string +{% endconfiguration %} diff --git a/source/images/supported_brands/ueradio.png b/source/images/supported_brands/ueradio.png new file mode 100644 index 0000000000000000000000000000000000000000..ebbde9e8eb074f093a4456ddcf0b11c6f848d001 GIT binary patch literal 6473 zcmV-P8Mfw$P)#l+U%Dktvoy<1a@X;X^W3+Sxih)TOzut7^ZR_} zliYh}&Y3yq%=w+?InSbO+olvKr7$osFbElU0q+2&0ozS;OiXOt(t)KcA`uIKWO4*$ zMX;122gGABEEGyX&W2nr2MUx8D6mWu8Wp+j(HIyQ7#NHzqT^KVp1{$-GGHk% z9T)(f1J(dfgk0ZrU>5KakgihOT>+fr`202Cr)Ef1j2{9AIX*uRyvKD;Gw`tE^8j$f zF5G4ZNxS9oH{e5NC>cy?}IUV>0 z@J7?M1_lNOJ3rAxfzQcNSH^Ys5=?cbfNukz^!dHhbgO}Zfx*sCH1mPmfE8t4*G+I8 z@(sYpe11y;pEBLLQ(~=a0kYXNiGjhcOEhm1sbp3K*M0_dVsdAmI0mj2bM!h_nHA&mDrNYIcfkDM6x<{jwY65=gG0~Tbhk^eMaF2Te$2&gv z0pCUY&+LkR12NzP;O)Snz+xaSzvY0}(T;of0ly#|Uy}%M9B>M7IIy>4>?DDwfk%Kl zfIs>yG+G^>zva<)tK@J>s>P(#df@UBpW)ZQ-+ji{8Nl1nJ}FMZ-XPcfTAnQtLR&Ti z@09jD7+8R|qy)$SFG!vD0C!9K2Ekj;QxpHg0x3 z>xESymm;0>zD;bBkQ0U_| z2l$DM(NfCT4qQy-mYPk#RWiYsdf%PErTDuKta6?2B<3Zu$Sb9ulq}rpeBQr{gs=_+ zPL{u6;V!v{)+)TSm-{?_EpV6581uta;47jTva59DfIkE00Zp6RJL%}`qNB5m*Eeor z!{&B`=>CR|(D6=LjC~JCw|92Yu~na6jAV`rc%!#YV#%VKM6*BeOn`pq5^1CyOqbPe zr33V8$K+m1qWP0U;>+Vid8zFR%PZFy=5SdhR@#5h0RL77(YzHHte~Dhd#GSPAno@v z;7TEyj~b$>D$yJiaQuXEbOGnMiDuK5j=c7vRmR5G(N@XpokSBILuJ;0j!RZ4Y~V{q zI~f@NArjpbkM{j5@E2fNmMW=;>&Szt0H)6vJHL0a44jF(?D;IT5Q{sV1E3lb%}N^-=y$qb?F=0A!h>)W5y6=ypL{sh_-Ekgm@{EwiSSqhCdtA4^1U1?z9@iy-uNIMt zju0~UQgOX;42kA3*UIQ>5C7OER#WB>K zKSysT>`ge~#Acx5Mt&K+f9E&1-{6#JHf-sjV_P?!+j`j6)x*|pJ+yD_qNwT&Z2?ox zUVzteLKzR3U(Mx@Iwn5Gn`q{UxazE9i>x|J#i4SITdj5U7}u=v=*ydA(3gt0$tvAh zXRV25cMtvcZzm44X|LHN#-^W9J^{S5w%u}fVe8N@d|F|U8RX*=t1|8tG6daA- zgmzxP*)?$;E{lv00Ph~B3D*!!;ds7a3>D{IRk+8K$KZjZ!yuZE1SFa6A}ilkspC%9 zgycLniVEOUMON>Vm1urN;l}Wy3d&jJK{l`AZBBcjM?c(1d6q2BdOLjjwiZNlqwCry zJ=BrKaEV9#tv)32kn7wH4%K2gI7(C!KlSJbKce|WnRT4!QO2=Vo^TD(6prVo@!qeS zQpNjR8s`CQ^*E zoUa+8sVUL4`P}QtHMmzl!DD`@L{s3Drj(k8*0l%0pL|pg&x$x0FS9%)FYlA=8i}3U zlh+-IG@oQ;`J2j-oHRFKaQY2RAJ$Ru8H~%nUKpxjzT|&(@W^T8%5nw zDV`IuDg{?nFnOjav=Ds*2DOBjiZuz`UxRzO&1d`_Rn7{{jW9&!f4V+@SQvbo>-#6= zr96|;f^EiuA5gxj?#_g16z*@W4x!xDvZ~KxE~B$k9^z7`^%73(xa%fBoBpTk^GyND zx*KiPlgEMR{U2w$9_hN~nkqeKHo!#WUL4LabA3(Wl}K@;YwT4E19&_1?ptaBUX}_g zLb$OG$N&4IJ^9`Ek%(j~WQEy=_D21ztb`Y%)od$0uDu2wtza@@rK?{y5>7+9J#ut>Vq-=mDTroXYk5FIDMT zUqPE@R|5A$G980zqY-U*vBfpM^6>J~Ux2qNI&2Jke7AcLqS-%$n{u-5MIQC^q7#?x zi;khzC@<=}*`ca=LMFxEQJ5Eg5!z>Di{m>bFNZUGr;WBW8rq2l+kvjn4}@6uA6!JU z%<;e5-1gOw>a@{*94l(no^BP;(;*P(KV1{SQU}qv(@{TM#b*r?Pq3$ixxrw35yd-% zQywE8-<<_~u}1gXRL+BWF=SA*_)KPbJT8;}bwV=FqGSKK_XASsO?IysRryupndrTQ zy^9dvE9kw7ub}-pCMxE+KEEDf*>08Qe8>N8hpjso^w3J{U-vJ=~ipB`Lro$ zKZt4}NITmY7?g)t5TXe~H@g_^wT_Q8(JZULRr2}sV@MtCJ}b9;2FCr0kPK*Z!2RTC z2QHhyoj1)x`U?wv9-?|4ZVRq3W6ISsKHU_LdpTenR32W7EI*Zlfx#{(s*ML$u)~Vw zDGEKWmowVD_T@3kI>+O?pE>@&6s?;1?;_Gz8f{3hdV=?fdt!=&Sa$Omb-8u)VNJ#j z)YgKj8q!p1jQ%q!D1-6Debg?B{mZo`ns=bhXLD%NxN|)wPbYy~iH-?1==jb;Cri7+ zV{*LKCG!6eZCr2+T6ew=dZTI>?GXBikkiJUVBom*>|r{q?&12p)$#um9*cpw1kd$z z0=13w(B=C4C_4UGnCKs)z6EA3G#E!bD#y5DqPXfJCwa>DNS?c@XJIoIbfL$bT~%bs!k z|2R7OK;9@o$ztKs0QE)Cfjnyo_a4dKjPD-ZKgY5E40dhow2212{Af0WRQBf`|DR29 z>#0^DoO9)TFOpdcd~=cyCbyN+K_RV*EefOVu6Ggjk6piCM4=U2Iry)D*N1^uTvEnN zN{=^I3D&zlABiy)HV6l8lZj}a2&wEt&?+?0DzRhH`!d}XmiGs=7xrYgj(M6wzl#e( zDEAab$J!d8(7ErMjLsq%MVswbqQ3hmS|vIW@Eh0X@l0LtS4NxNM=3w{n8EnK&oE=R z8r+Lt*#8AGFMDYMW>bbqahRAlyKUi|J!UOyn>Axu+pHPO_MA6&+59Cc{HKpk5xK(?~gW-_X}QmolA0WlKz`gVgIcLZm0Yh zfd-@TkdH>>vMRUj#drr1b*f!ASE7g?>sJC$=KSl}w_wJN7Ma3=y=W_-AF&?f1_7(r3Zv zm+3Mm*Sve22y$=WOQLP^s{g8T^3f58)jg6ZEFo0%^DxcOn(p z&5X`sI709}qz!0i*Fnc1y$$cIhOde`<`J}Mcupq6<)W_giY<1Z{8r9=&O=)eop#B_Fc+5Zdw9tx~%Kz2BFV7w-_MbCu&>6nbyU zoqf_40=rAdxl`J+4Q-)zJUWGf+aKsov`R4*;B7goCN=kEcD23d7I zSK{-(hPNNfF~AEIwC6KamhJTTBB~R=V;wru1%_xs$3E!2$aD=R>_3;FLd7LDT}I&^ zWwnkcMH66kbaqh=(QMt;NF2^P9?Yx zI4*>8_Cs4SMO-?=_fi$Y+TrNjCo#uu$Ys?regJ|mFag+^8K_;7JWO$gt#1JEP z9eu;4M{mAZ#K{wa+-r!>{dIJD-m@IvO+i~|)l(R=%b;`|BO>}|(2j!NVsupPQZQBe z;wabmpD`q3Fi~*Tl~<@(EKW2UB^r&Ql)}#CNTyPzams)KvY8CgNCX?OEJeI7PLmZO zJ!CUHoG6WGY}-yLrA`HYLFu7L+*lvtv)O1f*Epjc_7pm0z)Os++cxkXb&;}Y(PH9tabmGJ(MSYk zS=hGCvBw=}7DJ^Fj8fRxq|#Xwib%vJl~W83W$7PEkr>I6%;ZRCC{1;iFH|P>@1i$P z%Rx8Vs%0?bXN{nJD$aI&|1x@0&n!*K!$P!*bD_`g?dVu|FQ7N;2hsZL>F7{Ghv99Y z@LTi-rs)p@H^x+*t^UeYs;_T5y}dp3_4RYx9d{TKr~#a+GlgO#In2=T2qS5mNUV{> zh|MdT`{?K$!p_+!AeXhV0cF``6HOjx0^gzZ6us|d{Ps>1+L7&QM*DGmSfm?+@-PLh zD!my02(#tjn`p0SLox`{Av)`iKSuneW#`<^;65s#R7dj{sLuy}go0(B`6Nqw|eC zY=%}KY)2bid>tLPEN{2}Mzq7^Ovkx{XbZKcgz$fje@J!%gOboPwME6_al5IxnN%uC zDwSe5F=QI1bYf8iG`?xyx{aaX5z<-3aLS@Lk)*vhNnavEeJnyIm(c+ShvRhjrl`-w zsIyZXFmEac>@$;D)2Cutk})oRttTq`*0uLf`Uy)Z?T6CS z-h~~Fvh+;{uv>E@{R92%HhntNnx~LTrFr?)SJ>X&33irwb7nKUZ4VAUXqj?o6)Hy0 z_5l)!LAtgl7|K{Ak`}LZ4)Ma40UBcw8skxtnJk%1mSi@^;7As7IU3@y*Q`2@*l#AY z+jb)siGi{LNi+rq1_tAXcwJn@Vlf+~Yz4NmOzt-?ocGZWy2IF1Ofre#6p6t>y1KjA z);mBZ(oDuybaroN)241xi4={^4Wv~ayG^a5wLVTZXOqd;G&Mw+(OSohsddbl)NL@EW* z7s0S>C}v60|SEzOf Date: Mon, 18 Dec 2017 19:11:04 +0100 Subject: [PATCH 012/993] Add documentation for Discogs sensor (#4138) * Add documentation for Discogs sensor * Update config style --- source/_components/sensor.discogs.markdown | 39 ++++++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 source/_components/sensor.discogs.markdown diff --git a/source/_components/sensor.discogs.markdown b/source/_components/sensor.discogs.markdown new file mode 100644 index 0000000000..4c4bfe4ef6 --- /dev/null +++ b/source/_components/sensor.discogs.markdown @@ -0,0 +1,39 @@ +--- +layout: page +title: Discogs Sensor +description: "Instructions on how to set up Discogs sensors within Home Assistant." +date: 2017-12-04 22:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: https://www.magneticmag.com/.image/t_share/MTQ5OTE1NzU4NTczMzk3OTYw/discogs-vinyl-record-mark.png +ha_category: Sensor +ha_release: 0.61 +ha_iot_class: "Cloud Polling" +--- + +The `discogs` platform allows you to see the current amount of records in your [Discogs](https://discogs.com) collection. + +First, you'll need to get a personal access token from your Discogs account. +You can generate a token from your profile's [Developer settings](https://www.discogs.com/settings/developers). + +To enable this sensor, add the following lines to your `configuration.yaml`: + +```yaml +# Example configuration.yaml entry +sensor: + - platform: discogs + token: YOUR_TOKEN +``` + +{% configuration %} +token: + description: The Discogs API token to use as identification to get your collection. + required: true + type: string +name: + description: Name to use in the frontend. + required: false + type: string +{% endconfiguration %} From 12afecde0d86ce89a9c6072cdad0e554b073e5aa Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Tue, 19 Dec 2017 01:49:52 +0100 Subject: [PATCH 013/993] Update with range (#4242) --- .../binary_sensor.threshold.markdown | 39 ++++++++++++++----- 1 file changed, 29 insertions(+), 10 deletions(-) diff --git a/source/_components/binary_sensor.threshold.markdown b/source/_components/binary_sensor.threshold.markdown index c2e9e875b3..aa12fad99f 100644 --- a/source/_components/binary_sensor.threshold.markdown +++ b/source/_components/binary_sensor.threshold.markdown @@ -14,15 +14,17 @@ ha_release: 0.34 --- -The `threshold` binary sensor platform observes the state of another sensor. If the value is below (`lower`) or higher (`upper`) than the given threshold then state of the threshold sensor is changed. +The `threshold` binary sensor platform observes the state of another sensor. If the value is below (`lower`) or higher (`upper`) than the given threshold then state of the threshold sensor is changed. It support also a range if `lower` and `upper` are given. If the sensor is configured with no hysteresis and the sensor value is equal to the threshold, the sensor is turned off since it is not `lower` or `upper` with respect to the threshold. It's an alternative to the template binary sensor's `value_template:` to get the abnormal/too high/too low states. +{% raw %} ```yaml -{% raw %}{{ states.sensor.furnace.state > 2.5 }}{% endraw %} +{{ states.sensor.furnace.state > 2.5 }} ``` +{% endraw %} To enable the threshold sensor, add the following lines to your `configuration.yaml`: @@ -30,15 +32,32 @@ To enable the threshold sensor, add the following lines to your `configuration.y # Example configuration.yaml entry binary_sensor: - platform: threshold - threshold: 15 - type: lower entity_id: sensor.random + lower: 20 ``` -Configuration variables: +{% configuration %} +entity_id: + description: "The entity to monitor. Only [sensors](/components/sensor/) are supported." + required: true + type: entity_id +lower: + description: The lower threshold which the observed value is compared against. + required: false + type: float +upper: + description: The upper threshold which the observed value is compared against. + required: false + type: float +hysteresis: + description: The distance the observed value must be from the threshold before the state is changed. + required: false + type: float + default: 0.0 +name: + description: Name of the sensor to use in the frontend. + required: false + type: string + default: +{% endconfiguration %} -- **entity_id** (*Required*): The entity to monitor. Only [sensors](/components/sensor/) are supported. -- **threshold** (*Required*): The threshold which the observed value is compared against. -- **type** (*Required*): `lower` if the value needs to be below the threshold or `upper` if higher. -- **hysteresis** (*Optional*): The distance the observed value must be from the threshold before the state is changed. Defaults to `0.0` -- **name** (*Optional*): Name of the sensor to use in the frontend. Defaults to `Stats`. From 29b4c672a7a5a3806e72c60290a9fe37ac5d5c6c Mon Sep 17 00:00:00 2001 From: Ryan McLean Date: Thu, 21 Dec 2017 15:25:08 +0000 Subject: [PATCH 014/993] updated docs to add SSL option (#4238) * updated docs to add SSL option * Update sensor.plex.markdown --- source/_components/sensor.plex.markdown | 1 + 1 file changed, 1 insertion(+) diff --git a/source/_components/sensor.plex.markdown b/source/_components/sensor.plex.markdown index f3dcd7affa..3478171623 100644 --- a/source/_components/sensor.plex.markdown +++ b/source/_components/sensor.plex.markdown @@ -36,3 +36,4 @@ Configuration variables: - **password** (*Optional*): The password for your given account on the remote Plex server. - **server** (*Optional*): The name of your remote Plex server. - **token** (*Optional*): X-Plex-Token of your remote Plex server. +- **ssl** (*Optional*): Use HTTPS to connect to Plex server, *NOTE* host *must not* be an IP when this option is enabled. Defaults to "False" From fd2dd4d2981bf1d7694137c6bccdddee51911e8b Mon Sep 17 00:00:00 2001 From: Jordy <31309880+jbarrancos@users.noreply.github.com> Date: Sun, 24 Dec 2017 23:54:24 +0100 Subject: [PATCH 015/993] Updated documentation with new sensor (#4094) * Removed parts related to the component * Component configuration * Update rainbird.markdown * Update rainbird.markdown * Create sensor.rainbird.markdown * Update sensor.rainbird.markdown * Update rainbird.markdown * Update sensor.rainbird.markdown * Update sensor.rainbird.markdown * Update sensor.rainbird.markdown * Update rainbird.markdown * Update sensor.rainbird.markdown --- source/_components/rainbird.markdown | 33 +++++++++++++++++++++ source/_components/sensor.rainbird.markdown | 32 ++++++++++++++++++++ source/_components/switch.rainbird.markdown | 7 +---- 3 files changed, 66 insertions(+), 6 deletions(-) create mode 100644 source/_components/rainbird.markdown create mode 100644 source/_components/sensor.rainbird.markdown diff --git a/source/_components/rainbird.markdown b/source/_components/rainbird.markdown new file mode 100644 index 0000000000..4257826b7d --- /dev/null +++ b/source/_components/rainbird.markdown @@ -0,0 +1,33 @@ +--- +layout: page +title: "Rain Bird" +description: "Instructions on how to integrate your Rain Bird LNK WiFi Module within Home Assistant." +date: 2017-12-07 12:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: rainbird.png +ha_category: Hub +ha_release: 0.61 +ha_iot_class: "Local Polling" +--- + +This `rainbird` component allows interacting with [LNK WiFi](http://www.rainbird.com/landscape/products/controllers/LNK-WiFi.htm) module of the Rain Bird Irrigation system in Home Assistant. + +To enable it, add the following to your `configuration.yaml` file: + +```yaml +rainbird: + host: '1.1.1.1' + password: 'XXXXXXX' +``` + +Configuration variables: + +- **host** (*Required*): The IP address of your LNK WiFi Module. +- **password** (*Required*): The password for accessing the module. + +Finish its configuration by visiting the [Rain Bird sensor](/components/sensor.rainbird/) and [Rain Bird switch](/components/switch.rainbird/) documentation. + +Please note that due to the implementation of the API within the LNK Module, there is a concurrency issue. For example, the Rain Bird app will give connection issues (like already a connection active). diff --git a/source/_components/sensor.rainbird.markdown b/source/_components/sensor.rainbird.markdown new file mode 100644 index 0000000000..aebb59be07 --- /dev/null +++ b/source/_components/sensor.rainbird.markdown @@ -0,0 +1,32 @@ +--- +layout: page +title: "Rain Bird Sensor" +description: "Instructions on how to integrate your Rain Bird LNK WiFi Module rain sensor within Home Assistant." +date: 2017-08-25 12:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: rainbird.png +ha_category: Hub +ha_release: 0.61 +ha_iot_class: "Local Polling" +--- + +This `rainbird` sensor allows interacting with [LNK WiFi](http://www.rainbird.com/landscape/products/controllers/LNK-WiFi.htm) module of the Rain Bird Irrigation system in Home Assistant. + +Once you have enabled the [Rain Bird component](/components/rainburd), add the following to your `configuration.yaml` file to enable the rain sensor: + +```yaml +# Example configuration.yaml entry +sensor: + - platform: rainbird + monitored_conditions: + - rainsensor +``` + +Configuration variables: + +- **monitored_conditions**: Currently only rainsensor is supported. Returns the sensor level. + +Please note that due to the implementation of the API within the LNK Module, there is a concurrency issue. For example, the Rain Bird app will give connection issues (like already a connection active). diff --git a/source/_components/switch.rainbird.markdown b/source/_components/switch.rainbird.markdown index 5a8598c302..eee1d471b9 100644 --- a/source/_components/switch.rainbird.markdown +++ b/source/_components/switch.rainbird.markdown @@ -15,13 +15,10 @@ ha_iot_class: "Local Polling" This `rainbird` switch platform allows interacting with [LNK WiFi](http://www.rainbird.com/landscape/products/controllers/LNK-WiFi.htm) module of the Rain Bird Irrigation system in Home Assistant. -To enable stations as switches inside Home Assistant, add the following to your `configuration.yaml` file: +Once you have enabled the [Rain Bird component](/components/rainbird), add the following to your `configuration.yaml` file: ```yaml switch: - platform: rainbird - host: '1.1.1.1' - password: 'secretpassword' sprinkler_1: zone: 1 friendly_name: "Front sprinklers" @@ -36,8 +33,6 @@ switch: Configuration variables: -- **stickip** (*Required*): The IP address of your LNK WiFi Module. -- **password** (*Required*): The password for accessing the module. - **zone** (*Required*): Station zone identifier. - **friendly_name** (*Optional*): Just a friendly name for the station. - **trigger_time** (*Required*): The default duration to sprinkle the zone. From b40d325460bf03101a99ec63359ffbefac5ba613 Mon Sep 17 00:00:00 2001 From: Michael Irigoyen Date: Mon, 25 Dec 2017 05:35:39 -0500 Subject: [PATCH 016/993] Update the Alarm Decoder docs to outline the services and attributes (#4277) * Update the Alarm Decoder alarm panel doc to outline the services and attributes available * Update docs to meet standards --- .../alarm_control_panel.alarmdecoder.markdown | 55 +++++++++++++++++++ 1 file changed, 55 insertions(+) diff --git a/source/_components/alarm_control_panel.alarmdecoder.markdown b/source/_components/alarm_control_panel.alarmdecoder.markdown index fec4f0cb3f..991bdeb772 100644 --- a/source/_components/alarm_control_panel.alarmdecoder.markdown +++ b/source/_components/alarm_control_panel.alarmdecoder.markdown @@ -18,3 +18,58 @@ The `alarmdecoder` alarm control panel platform allows you to control your [Alar The requirement is that you have setup your [AlarmDecoder hub](/components/alarmdecoder/). +### {% linkable_title Services %} + +The Alarm Decoder component gives you access to several services for you to control your alarm with. + +- `alarm_arm_away`: Arms the alarm in away mode; all faults will trigger the alarm. +- `alarm_arm_home`: Arms the alarm in stay mode; faults to the doors or windows will trigger the alarm. +- `alarm_arm_night`: Arms the alarm in instant mode; all faults will trigger the alarm. Additionally, the entry delay is turned off on the doors. +- `alarm_disarm`: Disarms the alarm from any state. Also clears a `check_zone` flag after an alarm was triggered. +- `alarmdecoder_alarm_toggle_chime`: Toggles the alarm's chime state. + +**Note**: `alarm_arm_custom_bypass` and `alarm_trigger`, while available in the services list in Home Assistant, are not currently implemented in the Alarm Decoder component. + +### {% linkable_title Attributes %} + +There are several attributes available on the alarm panel to give you more information about your alarm. + +- `ac_power`: Set to `true` if your system has AC power supplying it. +- `backlight_on`: Set to `true` if your keypad's backlight is on. +- `battery_low`: Set to `true` if your system's back-up battery is low. +- `check_zone`: Set to `true` if your system was recently triggered. When `check_zone` is `true`, it must be cleared by entering your code + 1 before attempting to rearm your alarm. +- `chime`: Set to `true` if your system's chime is activated. When activated, your system will beep anytime a door or window is faulted while the alarm is disarmed. +- `entry_delay_off`: Set to `true` if your system is in "Instant" mode, meaning the alarm will sound on any faults. +- `programming_mode`: Set to `true` if your system is in programming mode. +- `ready`: Set to `true` if your system is ready to be armed. Any faults, including motions sensors, will make this value `false`. +- `zone_bypassed`: Set to `true` if your system is currently bypassing a zone. + +### {% linkable_title Examples %} + +Using a combination of the available services and attributes, you can create switch templates. + +#### {% linkable_title Chime Status and Control %} + +{% raw %} +```yaml +- platform: template + switches: + alarm_chime: + friendly_name: Chime + value_template: "{{ is_state_attr('alarm_control_panel.alarm_panel', 'chime', true) }}" + turn_on: + service: alarm_control_panel.alarmdecoder_alarm_toggle_chime + data: + code: !secret alarm_code + turn_off: + service: alarm_control_panel.alarmdecoder_alarm_toggle_chime + data: + code: !secret alarm_code + icon_template: >- + {% if is_state_attr('alarm_control_panel.alarm_panel', 'chime', true) %} + mdi:bell-ring + {% else %} + mdi:bell-off + {% endif %} +``` +{% endraw %} From af8529395c66774fb260fb7e3cd07b4440d711df Mon Sep 17 00:00:00 2001 From: PhracturedBlue Date: Mon, 25 Dec 2017 07:29:31 -0800 Subject: [PATCH 017/993] Add documentation on associating an RF serial-number with the zone (#4091) * Add documentation on associating an RF serial-number with the corresponding zone * Spelling --- source/_components/alarmdecoder.markdown | 2 ++ 1 file changed, 2 insertions(+) diff --git a/source/_components/alarmdecoder.markdown b/source/_components/alarmdecoder.markdown index 82beb4b5e6..aa1109dbdf 100644 --- a/source/_components/alarmdecoder.markdown +++ b/source/_components/alarmdecoder.markdown @@ -39,6 +39,7 @@ alarmdecoder: 01: name: 'Smoke Detector' type: 'smoke' + rfid: '0123456' 02: name: 'Front Door' type: 'opening' @@ -53,3 +54,4 @@ Configuration variables: - **baudrate** (*Optional*): The baud rate of the AlarmDecoder device, if using serial type. Default: `115200` - **panel_display** (*Optional*): Create a sensor called sensor.alarm_display to match the Alarm Keypad display. Default: `off` - **zones** (*Optional*): AlarmDecoder has no way to tell us which zones are actually in use, so each zone must be configured in Home Assistant. For each zone, at least a name must be given. For more information on the available zone types, take a look at the [Binary Sensor](/components/binary_sensor.alarmdecoder/) docs. *Note: If no zones are specified, Home Assistant will not load any binary_sensor components.* +- **rfid** (*Optional*): The RF serial-number associated with RF zones. Providing this field allows Home Assistant to associate raw sensor data to a given zone, allowing direct monitoring of the state, battery, and supervision status. From 93535411ec63b1a47b10eacee7b6fe2c3154ba65 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Thu, 28 Dec 2017 10:44:45 +0100 Subject: [PATCH 018/993] Update 'ha_release' and other minor changes (#4291) --- source/_components/climate.nuheat.markdown | 6 +++--- source/_components/nuheat.markdown | 4 ++-- source/images/supported_brands/nuheat.png | Bin 4061 -> 3730 bytes 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/source/_components/climate.nuheat.markdown b/source/_components/climate.nuheat.markdown index 5f5ecaa0a8..5c033f46eb 100644 --- a/source/_components/climate.nuheat.markdown +++ b/source/_components/climate.nuheat.markdown @@ -9,7 +9,7 @@ sharing: true footer: true logo: nuheat.png ha_category: Climate -ha_release: 0.58 +ha_release: 0.61 ha_iot_class: "Cloud Polling" --- @@ -21,12 +21,12 @@ To get your [NuHeat Signature](http://www.nuheat.com/products/thermostats/signat The NuHeat Thermostat supports the following key concepts. -The _target temperature_ is the temperature that the device attempts to achieve. The target temperature is either determined by the schedule programmed into the thermostat (_auto mode_) or may be overridden. When the target temperature is set by home assistant, the thermostat will hold this temperature until the schedule is resumed. +The `target temperature` is the temperature that the device attempts to achieve. The target temperature is either determined by the schedule programmed into the thermostat (`auto mode`) or may be overridden. When the target temperature is set by Home Assistant, the thermostat will hold this temperature until the schedule is resumed. ## {% linkable_title Attributes %} -The following attributes are provided by the NuHeat thermostat: `name`, `temperature_unit`, `current_temperature`, `target_temperature`, `current_hold_mode`, `current_operation`, `operation_list`, `min_temp`, `max_temp` +The following attributes are provided by the NuHeat thermostat: `name`, `temperature_unit`, `current_temperature`, `target_temperature`, `current_hold_mode`, `current_operation`, `operation_list`, `min_temp` and `max_temp`. ### {% linkable_title Attribute `name` %} diff --git a/source/_components/nuheat.markdown b/source/_components/nuheat.markdown index 6c22c3aa0e..a261aececb 100644 --- a/source/_components/nuheat.markdown +++ b/source/_components/nuheat.markdown @@ -9,7 +9,7 @@ sharing: true footer: true logo: nuheat.png ha_category: Hub -ha_release: 0.58 +ha_release: 0.61 ha_iot_class: "Cloud Polling" --- @@ -45,7 +45,7 @@ password: required: true type: string devices: - description: The serial number / ID of each thermostat you would like to integrate with Home Assistant. + description: The serial number/ID of each thermostat you would like to integrate. required: true type: [string, int] {% endconfiguration %} diff --git a/source/images/supported_brands/nuheat.png b/source/images/supported_brands/nuheat.png index 35016d1c223346c94cce0b7d6be6a7547977c84c..4bc30571f0bfd123d2c1a87fe04e558076ce429f 100644 GIT binary patch delta 3683 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 BVU7R* delta 4016 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 W*=hWwYGv{O0000 Date: Thu, 28 Dec 2017 05:02:41 -0800 Subject: [PATCH 019/993] Documentation updates for the changes to ISY994 (#4288) --- source/_components/isy994.markdown | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/source/_components/isy994.markdown b/source/_components/isy994.markdown index 0b59c64b24..558765a764 100644 --- a/source/_components/isy994.markdown +++ b/source/_components/isy994.markdown @@ -35,7 +35,8 @@ Configuration variables: - **username** (*Required*): The username that used to access the ISY interface. - **password** (*Required*): The password that used to access the ISY interface. - **sensor_string** (*Optional*): This is the string that is used to identify which devices are to be assumed to be sensors instead of lights of switches. By default, this string is 'sensor'. If this string is found in the device name or folder, Home Assistant will assume it is as a sensor or binary sensor (if the device has on/off or true/false states). This is only necessary for nodes that are not automatically detected as sensors by Home Assistant. Insteon door, window, motion and leak sensors should all be detected automatically. -- **hidden_string** (*Optional*): The HIDDEN_STRING is a string that is used to identify which devices are to be hidden on Home Assistant's front page. This string will be stripped from the device's name before being used. By default, this value is '{HIDE ME}'. +- **ignore_string** (*Optional*): Any devices that contain this string in their name (or folder path) will be ignored by Home Assistant. They will not become entities at all. The default value is `{IGNORE ME}`. +- **enable_climate** (*Optional*): When enabled, climate measurements from the optional climate module in the ISY994 will show up in Home Assistant as sensors. The default value is `True`. - **tls** (*Optional*): This entry should reflect the version of TLS that the ISY controller is using for HTTPS encryption. This value can be either 1.1 or 1.2. If this value is not set, it is assumed to be version 1.1. This is the default for most users. ISY994 Pro users may likely be using 1.2. When using HTTPS in the host entry, it is best practice to set this value. Once the ISY controller is configured, it will automatically import any binary sensors, covers, fans, lights, locks, sensors and switches it can locate. From d3b1bd6431ce90bc43f8b4eabb0f49ab39445ff9 Mon Sep 17 00:00:00 2001 From: Aaron Bach Date: Thu, 28 Dec 2017 10:15:19 -0700 Subject: [PATCH 020/993] Device tracker: disabled Tiles and automatic session renewal (#4223) * Added doc update for HASS PR #11172 * Requested changes --- source/_components/device_tracker.tile.markdown | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/source/_components/device_tracker.tile.markdown b/source/_components/device_tracker.tile.markdown index 7dc534339f..63ba3d693c 100644 --- a/source/_components/device_tracker.tile.markdown +++ b/source/_components/device_tracker.tile.markdown @@ -25,9 +25,6 @@ device_tracker: - platform: tile username: email@address.com password: MY_PASSWORD_123 - monitored_variables: - - TILE - - PHONE ``` {% configuration %} @@ -43,4 +40,8 @@ device_tracker: description: the Tile types to monitor; valid values are `TILE` and `PHONE` (default is for all types to be included) required: false type: list + show_inactive: + description: whether to show expired/disabled Tiles + required: false + type: boolean {% endconfiguration %} From 4db836f80af821ddb14b0208d437fe312ea1f354 Mon Sep 17 00:00:00 2001 From: Egor Tsinko Date: Thu, 28 Dec 2017 10:16:26 -0700 Subject: [PATCH 021/993] added documentation for monoprice_snapshot/monoprice_restore services. (#3874) * added documentation for monoprice_snapshot/monoprice_restore services. * :pencil2: Tiny spelling & grammar fixes * minor changes * Changed service names to snapshot and restore * fixed minor typo --- .../media_player.monoprice.markdown | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/source/_components/media_player.monoprice.markdown b/source/_components/media_player.monoprice.markdown index 7487e75b1e..75e41d9b63 100644 --- a/source/_components/media_player.monoprice.markdown +++ b/source/_components/media_player.monoprice.markdown @@ -47,3 +47,25 @@ Configuration variables: - **port** (*Required*): The serial port to which Monoprice amplifier is connected - **zones** (*Required*): This is the list of zones available. Valid zones are 11,12,13,14,15,16. In case multiple Monoprice devices are stacked together the list of valid zones is extended by 21,22,23,24,25,26 for the second device and 31,32,33,34,35,36 for the third device. Each zone must have a name assigned to it. - **sources** (*Required*): The list of sources available. Valid source numbers are 1,2,3,4,5,6. Each source number corresponds to the input number on the Monoprice amplifier. Similar to zones, each source must have a name assigned to it. + +### {% linkable_title Service `snapshot` %} + +Take a snapshot of one or more zones' states. This service, and the following one are useful if you want to play a doorbell or notification sound and resume playback afterward. If no `entity_id` is provided, all zones are snapshotted. + +The following attributes are stored in a snapshot: +- Power status (On/Off) +- Mute status (On/Off) +- Volume level +- Source + +| Service data attribute | Optional | Description | +| ---------------------- | -------- | ----------- | +| `entity_id` | yes | String or list of strings that point at `entity_id`s of zones. + +### {% linkable_title Service `restore` %} + +Restore a previously taken snapshot of one or more speakers. If no `entity_id` is provided, all zones are restored. + +| Service data attribute | Optional | Description | +| ---------------------- | -------- | ----------- | +| `entity_id` | yes | String or list of strings that point at `entity_id`s of zones. From 3c43e0b45b3a3e15dfc735bf5b038fe7a9b9c8b3 Mon Sep 17 00:00:00 2001 From: Derek Brooks Date: Thu, 28 Dec 2017 09:52:30 -0800 Subject: [PATCH 022/993] update nuheat docs for recent component changes (#4296) --- source/_components/climate.nuheat.markdown | 35 ++++++++-------------- 1 file changed, 13 insertions(+), 22 deletions(-) diff --git a/source/_components/climate.nuheat.markdown b/source/_components/climate.nuheat.markdown index 5c033f46eb..51ffd6fee4 100644 --- a/source/_components/climate.nuheat.markdown +++ b/source/_components/climate.nuheat.markdown @@ -62,24 +62,6 @@ not in auto operation mode. | ---------------| ----------- | | Integer | Target temperature -### {% linkable_title Attribute `target_temperature_low` %} - -Returns the desired heating temperature set in the thermostat when in -auto operation mode. - -| Attribute type | Description | -| ---------------| ----------- | -| Integer | Target temperature - -### {% linkable_title Attribute `target_temperature_high` %} - -Returns the desired cooling temperature set in the thermostat when in -auto operation mode. - -| Attribute type | Description | -| ---------------| ----------- | -| Integer | Target temperature - ### {% linkable_title Attribute `current_hold_mode` %} Returns the current temperature hold, if any. @@ -123,13 +105,13 @@ Returns the maximum supported temperature by the thermostat ## {% linkable_title Services %} -The following services are provided by the NuHeat Thermostat: `set_temperature`, `resume_program`. +The following services are provided by the NuHeat Thermostat: `set_temperature`, `set_hold_mode`, `nuheat_resume_program`. -The services `fan_min_on_time`, `set_aux_heat`, `set_away_mode`, `set_hold_mode`, `set_humidity`, `set_fan_mode`, `set_operation_mode` and `set_swing_mode` offered by the [Climate component](/components/climate/) are not implemented for this thermostat. +The services `fan_min_on_time`, `set_aux_heat`, `set_away_mode`, `set_humidity`, `set_fan_mode`, `set_operation_mode` and `set_swing_mode` offered by the [Climate component](/components/climate/) are not implemented for this thermostat. ### {% linkable_title Service `set_temperature` %} -Puts the thermostat into a temporary hold at the given temperature. +Puts the thermostat into an indefinite hold at the given temperature. | Service data attribute | Optional | Description | | ---------------------- | -------- | ----------- | @@ -139,7 +121,16 @@ Puts the thermostat into a temporary hold at the given temperature. Only the target temperatures relevant for the current operation mode need to be provided. -### {% linkable_title Service `resume_program` %} +### {% linkable_title Service `set_hold_mode` %} + +Sets the thermostat's hold mode. The NuHeat thermostat supports "auto" (to run the thermostat's programmed schedule), "temperature" (to indefinitely hold the thermostat's current target temperature), or "temporary_temperature" (to hold the thermostat's current target temperature until the thermostat's next scheduled event). + +| Service data attribute | Optional | Description | +| ---------------------- | -------- | ----------- | +| `entity_id` | yes | String or list of strings that point at `entity_id`'s of climate devices to control. Else targets all. +| `hold_mode` | no | New value of hold mode. + +### {% linkable_title Service `nuheat_resume_program` %} Resumes the currently active schedule. From 2ecb5c44fbbc344a0f1292f45f7bf67e30bfddd7 Mon Sep 17 00:00:00 2001 From: Matt Schmitt Date: Thu, 28 Dec 2017 12:55:51 -0500 Subject: [PATCH 023/993] Additional device classes for binary sensors (#4267) * Add additional device classes for binary sensor --- source/_components/binary_sensor.markdown | 33 ++++++++++++----------- 1 file changed, 18 insertions(+), 15 deletions(-) diff --git a/source/_components/binary_sensor.markdown b/source/_components/binary_sensor.markdown index 6b6d1d8c5d..781f4f4557 100644 --- a/source/_components/binary_sensor.markdown +++ b/source/_components/binary_sensor.markdown @@ -15,23 +15,26 @@ The way these sensors are displayed in the frontend can be modified in the [cust - **None**: Generic on/off. This is the default and doesn't need to be set. - **battery**: `On` means low, `Off` means normal -- **cold**: `On` means cold -- **connectivity**: `On` means connection present, `Off` means no connection -- **gas**: `On` means gas detected -- **heat**: `On` means hot -- **light**: Lightness threshold -- **moisture**: `On` means wet -- **motion**: `On` means motion detected -- **moving**: `On` means moving, `Off` means stopped -- **occupancy**: `On` means occupied, `Off` means not occupied +- **cold**: `On` means cold, `Off` means normal +- **connectivity**: `On` means connected, `Off` means disconnected +- **door**: `On` means open, `Off` means closed +- **garage_door**: `On` means open, `Off` means closed +- **gas**: `On` means gas detected, `Off` means no gas (clear) +- **heat**: `On` means hot, `Off` means normal +- **light**: `On` means light detected, `Off` means no light +- **moisture**: `On` means moisture detected (wet), `Off` means no moisture (dry) +- **motion**: `On` means motion detected, `Off` means no motion (clear) +- **moving**: `On` means moving, `Off` means not moving (stopped) +- **occupancy**: `On` means occupied, `Off` means not occupied (clear) - **opening**: `On` means open, `Off` means closed - **plug**: `On` means device is plugged in, `Off` means device is unplugged -- **power**: Power, over-current, etc. -- **presence**: `On` means Home, `Off` means Away -- **problem**: `On` means a problem was detected, `Off` means the status is OK +- **power**: `On` means power detected, `Off` means no power +- **presence**: `On` means home, `Off` means away +- **problem**: `On` means problem detected, `Off` means no problem (OK) - **safety**: `On` means unsafe, `Off` means safe -- **smoke**: `On` means smoke detected -- **sound**: `On` means sound detected, `Off` means no sound -- **vibration**: `On` means vibration detected, `Off` means no vibration +- **smoke**: `On` means smoke detected, `Off` means no smoke (clear) +- **sound**: `On` means sound detected, `Off` means no sound (clear) +- **vibration**: `On` means vibration detected, `Off` means no vibration (clear) +- **window**: `On` means open, `Off` means closed For analog sensors please check the [component overview](https://home-assistant.io/components/#sensor). From 57855e2165262fe988cb610c53e187026e554f7d Mon Sep 17 00:00:00 2001 From: Dan Nixon Date: Thu, 28 Dec 2017 20:23:16 +0000 Subject: [PATCH 024/993] Document default names for TP-Link devces (#4294) - Document default names for smart sockets and bulbs - Change all references to the company to "TP-Link" --- source/_components/light.tplink.markdown | 24 ++++++++++++++--------- source/_components/switch.tplink.markdown | 12 +++++------- 2 files changed, 20 insertions(+), 16 deletions(-) diff --git a/source/_components/light.tplink.markdown b/source/_components/light.tplink.markdown index 68fff98395..71fc4e9717 100644 --- a/source/_components/light.tplink.markdown +++ b/source/_components/light.tplink.markdown @@ -1,7 +1,7 @@ --- layout: page -title: "TPLink Bulb" -description: "Instructions how to integrate TPLink bulbs into Home Assistant." +title: "TP-Link Bulb" +description: "Instructions how to integrate TP-Link bulbs into Home Assistant." date: 2017-07-25 08:00 sidebar: true comments: false @@ -14,7 +14,7 @@ ha_release: "0.50" --- -The `tplink` light platform allows you to control the state of your [TPLink smart bulb](http://www.tp-link.com/en/products/list-5609.html). +The `tplink` light platform allows you to control the state of your [TP-Link smart bulb](http://www.tp-link.com/en/products/list-5609.html). Supported units: @@ -23,7 +23,7 @@ Supported units: - LB120 - LB130 -To use your TPLink light in your installation, add the following to your `configuration.yaml` file: +To use your TP-Link light in your installation, add the following to your `configuration.yaml` file: ```yaml # Example configuration.yaml entry @@ -32,9 +32,15 @@ light: host: IP_ADDRESS ``` -Configuration variables: - -- **host** (*Required*): The IP address of your TP-Link bulb, eg. `192.168.1.32`. -- **name** (*Optional*): The name to use when displaying this bulb. - +{% configuration %} +name: + description: The name to use when displaying this bulb. + required: false + type: string + default: TP-Link Light +host: + description: "The IP address of your TP-Link bulb, eg. `192.168.1.32`." + required: true + type: string +{% endconfiguration %} diff --git a/source/_components/switch.tplink.markdown b/source/_components/switch.tplink.markdown index ee56f35688..4feabe6734 100644 --- a/source/_components/switch.tplink.markdown +++ b/source/_components/switch.tplink.markdown @@ -1,7 +1,7 @@ --- layout: page -title: "TPLink Switch" -description: "Instructions how to integrate TPLink switches into Home Assistant." +title: "TP-Link Switch" +description: "Instructions how to integrate TP-Link switches into Home Assistant." date: 2016-07-13 08:00 sidebar: true comments: false @@ -14,7 +14,7 @@ ha_release: "0.24" --- -The `tplink` switch platform allows you to control the state of your [TPLink smart switch](http://www.tp-link.com/en/products/list-5258.html). +The `tplink` switch platform allows you to control the state of your [TP-Link smart switch](http://www.tp-link.com/en/products/list-5258.html). Supported units: @@ -23,7 +23,7 @@ Supported units: - HS110 - HS200 -To use your TPLink switch in your installation, add the following to your `configuration.yaml` file: +To use your TP-Link switch in your installation, add the following to your `configuration.yaml` file: ```yaml # Example configuration.yaml entry @@ -37,7 +37,7 @@ name: description: The name to use when displaying this switch. required: false type: string - default: Random Sensor + default: TP-Link Switch host: description: "The IP address of your TP-Link switch, eg. `192.168.1.32`." required: true @@ -49,5 +49,3 @@ enable_leds: default: true {% endconfiguration %} - - From bb938dd2ad6836a6252d2e85a99aa6c33b2c1408 Mon Sep 17 00:00:00 2001 From: Gregory Benner Date: Thu, 28 Dec 2017 16:11:49 -0500 Subject: [PATCH 025/993] add docs for sochain sensor (#4287) * add sochain documentation * Minimize configuration sample --- source/_components/sensor.sochain.markdown | 50 +++++++++++++++++++++ source/images/supported_brands/sochain.png | Bin 0 -> 28597 bytes 2 files changed, 50 insertions(+) create mode 100644 source/_components/sensor.sochain.markdown create mode 100644 source/images/supported_brands/sochain.png diff --git a/source/_components/sensor.sochain.markdown b/source/_components/sensor.sochain.markdown new file mode 100644 index 0000000000..77bf1c7836 --- /dev/null +++ b/source/_components/sensor.sochain.markdown @@ -0,0 +1,50 @@ +--- +layout: page +title: "SoChain" +description: "Instructions how to integrate chain.so data within Home Assistant." +date: 2017-06-01 16:20 +sidebar: true +comments: false +sharing: true +footer: true +logo: sochain.png +ha_category: Finance +ha_release: 0.61 +ha_iot_class: "Cloud Polling" +--- + + +The `SoChain` sensor platform displays supported cryptocurrency wallet balances from [SoChain](https://chain.so). + +To add the SoChain sensor to your installation, specify a network and address to watch in the `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +sensor: + - platform: sochain + network: LTC + address: 'M9m37h3dVkLDS13wYK7vcs7ck6MMMX6yhK' +``` + +{% configuration %} +network: + description: The network or blockchain of the cryptocurrency to watch. + required: true + type: string +address: + description: Cryptocurrency wallet address to watch. + required: true + type: string +name: + description: The name of the sensor used in the frontend. (recommended) + required: false + type: string + default: Crypto Balance +{% endconfiguration %} + +Supported networks (which can also be found [here](https://chain.so/api#networks-supported)) are: + +* BTC +* LTC +* DOGE +* DASH diff --git a/source/images/supported_brands/sochain.png b/source/images/supported_brands/sochain.png new file mode 100644 index 0000000000000000000000000000000000000000..0cfc42bc6eb6ae59e030ebed4d6507e1ef5b4b36 GIT binary patch literal 28597 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 Date: Fri, 29 Dec 2017 03:36:33 +0100 Subject: [PATCH 026/993] Update alarm_control_panel.egardia.markdown (#4282) * Update alarm_control_panel.egardia.markdown * Update alarm_control_panel.egardia.markdown --- .../alarm_control_panel.egardia.markdown | 38 ++++--------------- 1 file changed, 8 insertions(+), 30 deletions(-) diff --git a/source/_components/alarm_control_panel.egardia.markdown b/source/_components/alarm_control_panel.egardia.markdown index 04bc5bf881..6706a50f23 100644 --- a/source/_components/alarm_control_panel.egardia.markdown +++ b/source/_components/alarm_control_panel.egardia.markdown @@ -12,11 +12,11 @@ ha_release: 0.51 ha_category: Alarm --- -The `egardia` platform enables the ability to control an [Egardia](http://egardia.com/)/Woonveilig control panel. These alarm panels are known under different brand names across the world, including Woonveilig in the Netherlands. This was tested on a Gate01 version of the Egardia/Woonveilig platform. +The `egardia` platform enables the ability to control an [Egardia](http://egardia.com/)/[Woonveilig](http://woonveilig.nl) control panel. These alarm panels are known under different brand names across the world, including Woonveilig in the Netherlands. This was tested on a GATE-01 and GATE-02 version of the Egardia/Woonveilig platform. You will need to know the IP of your alarm panel on your local network. Test if you can login to the panel by browsing to the IP address and log in using your Egardia/Woonveilig account. -To enable this, add the following lines to your `configuration.yaml` file: +To enable the integration with your alarm panel, add the following lines to your `configuration.yaml` file: ```yaml # Example configuration.yaml entry @@ -32,17 +32,18 @@ Configuration variables: - **host** (*Required*): The local IP address of the Egardia/Woonveilig alarm panel. - **username** (*Required*): Username for the Egardia/Woonveilig account. - **password** (*Required*): Password for Egardia/Woonveilig account. +- **version** (*Optional*): The version of the Egardia system. `GATE-01` and `GATE-02` are currently supported. Defaults to `GATE-01`. - **port** (*Optional*): The port of the alarm panel. Defaults to 80. - **name** (*Optional*): Name to use for the alarm panel. Defaults to `Egardia`. - **report_server_enabled** (*Optional*): Enable reporting by server. Defaults to `False`. -- **report_server_port** (*Optional*): Port of the Egardia server. Defaults to 85. +- **report_server_port** (*Optional*): Port of the Egardia server. Defaults to 52010. - **report_server_codes** list (*Optional*): List of codes for the different states. Note that this basic configuration will only enable you to read the armed/armed away/disarmed status of your alarm and will **not** update the status if the alarm is triggered. This is because of how Egardia built their system. The alarm triggers normally go through their servers. You can change this, however, using the following procedure. This is a more advanced configuration. 1. Log in into your alarm system's control panel. You will need to access http://[IP of your control panel]. You know this already since you need it in the basic configuration from above. Log in to the control panel with your Egardia/Woonveilig username and password. -2. Once logged in, go to *System Settings*, *Report* and change the Server Address for your primary server to the IP or hostname of your Home Assistant machine. Also, update the port number 85 or to anything you like. The provided software that you will set up in the next steps runs on port 85 by default. **Make sure to change the settings of the primary server otherwise the messages will not come through. Note that this will limit (or fully stop) the number of alarm messages you will get through Egardia's / Woonveilig services.** Maybe, that is just what you want. Make sure to save your settings by selecting 'OK'. +2. Once logged in, go to *System Settings*, *Report* and change the Server Address for your primary server to the IP or hostname of your Home Assistant machine. You can leave the port number set to 52010 or change it to anything you like. **Make sure to change the settings of the primary server otherwise the messages will not come through. Note that this will limit (or fully stop) the number of alarm messages you will get through Egardia's / Woonveilig services.** Maybe, that is just what you want. Make sure to save your settings by selecting 'OK'. 3. On your Home Assistant machine run `$ sudo python3 egardiaserver.py`. Refer to the [python-egardia repository](https://github.com/jeroenterheerdt/python-egardia) for detailed documentation on parameters. This will receive status codes from your alarm control panel and display them. You will need the codes to include in your configuration.yaml. Make sure to change the status of your alarm to all states (disarm, arm, home) by all means possible (all users, remotes, web login, app) as well as trigger the alarm in all ways possible to get 100% coverage. **Before triggering the alarm it might be good to disable the siren temporarily (can be done in Panel Settings).** 4. Once you have the codes, update your `configuration.yaml`: ```yaml @@ -53,7 +54,7 @@ alarm_control_panel:   username: YOUR_USERNAME   password: YOUR_PASSWORD report_server_enabled: True - report_server_port: PORT_OF_EGARDIASERVER (85 as per the instructions above) + report_server_port: PORT_OF_EGARDIASERVER (optional, defaults to 52010) report_server_codes: arm: XXXXXXXXXXXXXXXX, XXXXXXXXXXXXXXXX disarm: XXXXXXXXXXXXXXXX, XXXXXXXXXXXXXXXX @@ -62,29 +63,6 @@ alarm_control_panel: ignore: XXXXXXXXXXXXXXXX ``` -Note that for triggered, arm and disarm multiple codes can be entered since each sensor triggers with a different code and each user of the system has its own arm and disarm codes. Also note that your system will do regular system checks which will be reported as well. Since Home Assistant provides no way of handling them properly, you can enter those codes as ignore (again, multiple codes can be used here). The egardia component will ignore these codes and continue returning the old status if it receives any of the codes that are listed as ignore. This is useful for example when you have armed your alarm at night: normally a system check will occur at least once during the night and if that code is not specified anywhere Home Assistant will set the status of the alarm to its default, which is unarmed. This is in fact wrong. Listing the code as ignore changes this behavior and Home Assistant will continue to show the status the alarm is in (disarm, arm, home, triggered) even when system checks occur. +Note that for *triggered*, *arm* and *disarm* multiple codes can be entered since each sensor triggers with a different code and each user of the system has its own arm and disarm codes. Also note that your system will do regular system checks which will be reported as well. Since Home Assistant provides no way of handling them properly, you can enter those codes as *ignore* (again, multiple codes can be used here). The egardia component will ignore these codes and continue returning the old status if it receives any of the codes that are listed as ignore. This is useful for example when you have armed your alarm at night: normally a system check will occur at least once during the night and if that code is not specified anywhere Home Assistant will set the status of the alarm to its default, which is unarmed. This is in fact wrong. Listing the code as ignore changes this behavior and Home Assistant will continue to show the status the alarm is in (disarm, arm, home, triggered) even when system checks occur. -5. Start the `egardiaserver.py` script on boot of your Home Assistant machine, for example by using `systemctl` by `systemd`. To use this method, create a shell script named `egardiaserver.sh` that contains something like the following: - -```bash -$ source /srv/homeassistant/bin/activate -$ python3 /srv/homeassistant/lib/python3.5/site-packages/pythonegardia/egardiaserver.py -host [YOURHOST] -password '[YOURPASSWORD]' -ssl True > /tmp/egardiaserver.log 2>&1 -``` - -Mark it as executable (`$ chmod +x`) and run `sudo nano /lib/systemd/system/egardiaserver.service`. Enter the following into the `egardiaserver.service` file: - -```bash -[Unit] -Description=Egardia Server Service - -[Service] -ExecStart=/bin/bash /srv/homeassistant/homeassistant_venv/lib/python3.5/site-packages/pythonegardia/egardiaserver.sh -StandardOutput=journal+console - -[Install] -WantedBy=multi-user.target -Alias=egardiaserver.service -``` - -Save and then run `sudo systemctl enable egardiaserver.service` and `sudo systemctl start egardiaserver.service`. -6. Test your setup and enjoy. The component will update if the alarm status changes, including triggers. You can use this to build your own automations and send notifications as you wish. +5. Test your setup and enjoy. The component will update if the alarm status changes, including triggers. You can use this to build your own automations and send notifications as you wish. *Note*: previous versions required a separate egardiaserver to be set up. This is no longer necessary and corresponding system services can be removed (using systemctl). From df0e39561614b5a391dc682afdf1e7e4450e3ba1 Mon Sep 17 00:00:00 2001 From: goldminenine <34691572+goldminenine@users.noreply.github.com> Date: Fri, 29 Dec 2017 09:20:31 +0100 Subject: [PATCH 027/993] Update modbus.markdown (#4261) Documentation change associated to pull request: https://github.com/home-assistant/home-assistant/pull/11238 --- source/_components/modbus.markdown | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/source/_components/modbus.markdown b/source/_components/modbus.markdown index f673298d82..9d56005829 100644 --- a/source/_components/modbus.markdown +++ b/source/_components/modbus.markdown @@ -30,7 +30,10 @@ modbus: Configuration variables: -- **type** (*Required*): Type of the connection to Modbus. +- **type** (*Required*): Type of the connection to Modbus. Possible values are: + - *tcp*: Modbus TCP protocol according to "MODBUS Messaging Implementation Guide version 1.0b" provided by Schneider Automation, + - *udp*: Modbus TCP form, but using UDP for transport (removes the overheads required for TCP), + - *rtuovertcp*: Modbus RTU message transmitted with a TCP/IP wrapper and sent over a network instead of serial lines. - **host** (*Required*): The IP address of your Modbus device, eg. 192.168.1.1. - **port** (*Required*): The port for the communication. - **timeout** (*Optional*): Timeout for slave response in seconds. (default: 3) @@ -51,7 +54,7 @@ modbus: Configuration variables: -- **type** (*Required*): Type of the connection to Modebus. +- **type** (*Required*): Type of the connection to Modbus. - **method** (*Required*): Method of the connection to Modbus. - **port** (*Required*): The port where your Modbus device is connected to your Home Assistant host. - **baudrate** (*Required*): The speed for the serial connection. From 309b287b9dde97233345c6ec12235a44be1f09c7 Mon Sep 17 00:00:00 2001 From: Andy Castille Date: Fri, 29 Dec 2017 02:40:08 -0600 Subject: [PATCH 028/993] Doorbird live view update (#4230) * doorbird live_view option * Change Doorbird binary sensor to Local Push after code change * Document DoorBird events * Remove DoorBird camera options https://github.com/home-assistant/home-assistant/pull/11193/commits/2d7d1d72e5b45bb951d0314c4b0e161c5d91d9f5 --- .../binary_sensor.doorbird.markdown | 28 ------------------- source/_components/camera.doorbird.markdown | 6 +--- source/_components/doorbird.markdown | 5 ++++ 3 files changed, 6 insertions(+), 33 deletions(-) delete mode 100644 source/_components/binary_sensor.doorbird.markdown diff --git a/source/_components/binary_sensor.doorbird.markdown b/source/_components/binary_sensor.doorbird.markdown deleted file mode 100644 index b16dc68c5e..0000000000 --- a/source/_components/binary_sensor.doorbird.markdown +++ /dev/null @@ -1,28 +0,0 @@ ---- -layout: page -title: "DoorBird Binary Sensor" -description: "Instructions how to integrate DoorBird video doorbell state into Home Assistant." -date: 2017-08-06 11:30 -sidebar: true -comments: false -sharing: true -footer: true -logo: doorbird.png -ha_category: Binary Sensor -ha_release: "0.54" -ha_iot_class: "Local Polling" ---- - -The `doorbird` binary sensor platform allows Home Assistant to monitor when your [DoorBird](http://www.doorbird.com/) doorbell rings. - -

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

- -To enable the binary sensor, add the following to your `configuration.yaml` file: - -```yaml -# Example configuration.yaml entry -binary_sensor: - - platform: doorbird -``` diff --git a/source/_components/camera.doorbird.markdown b/source/_components/camera.doorbird.markdown index 55fcb419f8..d96a1ebe9b 100644 --- a/source/_components/camera.doorbird.markdown +++ b/source/_components/camera.doorbird.markdown @@ -13,7 +13,7 @@ ha_release: "0.54" ha_iot_class: "Local Polling" --- -The `doorbird` implementation allows you to view the live video and saved images from your [DoorBird](http://www.doorbird.com/) device in Home Assistant. +The `doorbird` implementation allows you to view the live video and previous images from your [DoorBird](http://www.doorbird.com/) device in Home Assistant.

You must have the [DoorBird component](/components/doorbird/) configured to use this camera. @@ -26,7 +26,3 @@ To enable the camera, add the following to your `configuration.yaml` file: camera: - platform: doorbird ``` - -Configuration variables: - -- **last_visitor** (*Optional*): Adds a second camera that shows the last picture taken when someone rang the doorbell. Default is `false`. diff --git a/source/_components/doorbird.markdown b/source/_components/doorbird.markdown index 0b7f1e4120..4ce686ec64 100644 --- a/source/_components/doorbird.markdown +++ b/source/_components/doorbird.markdown @@ -30,3 +30,8 @@ Configuration variables: - **host** (*Required*): The LAN IP address or hostname of your device. You can find this by going to the [DoorBird Online check](http://www.doorbird.com/checkonline) and entering the information from the paper that was included in the box. - **username** (*Required*): The username of a non-administrator user account on the device. - **password** (*Required*): The password for the user specified. +- **doorbell_events** (*Optional*): Setting this to `true` this will register a callback URL with the device so that events can be published to the event bus when the doorbell rings. + +

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

From 59beeef4925fc41eebf72dc6909bc05a61da819f Mon Sep 17 00:00:00 2001 From: William Scanlon Date: Fri, 29 Dec 2017 13:06:43 -0500 Subject: [PATCH 029/993] Doc for EcoNet water heaters (#4299) --- source/_components/climate.econet.markdown | 64 +++++++++++++++++++++ source/images/supported_brands/econet.png | Bin 0 -> 285502 bytes 2 files changed, 64 insertions(+) create mode 100644 source/_components/climate.econet.markdown create mode 100644 source/images/supported_brands/econet.png diff --git a/source/_components/climate.econet.markdown b/source/_components/climate.econet.markdown new file mode 100644 index 0000000000..3feb4aa643 --- /dev/null +++ b/source/_components/climate.econet.markdown @@ -0,0 +1,64 @@ +--- +layout: page +title: "EcoNet water heater" +description: "Instructions how to integrate Rheem EcoNet water heaters into Home Assistant." +date: 2017-12-28 14:51 +sidebar: true +comments: false +sharing: true +footer: true +logo: econet.png +ha_category: Climate +ha_release: 0.61.0 +ha_iot_class: "Cloud Polling" +--- + + +The `econet` water heater platform is consuming the information provided by a [EcoNet enabled Rheem water heater](http://www.rheem.com/EcoNet/Home). This component allows you to set the temperature, the operation mode, and enable vaction mode. + +To enable the `econet` water heater platform add the following to your config. + + +```yaml +# Example configuration.yaml entry +climate: + - platform: econet + username: YOUR_ECONET_EMAIL + password: YOUR_ECONET_PASSWORD +``` + +{% configuration %} +username: + description: The username used to connect to your EcoNet account. + required: true + type: string +password: + description: The password used to connect to your EcoNet account. + required: true + type: string +{% endconfiguration %} + + +### {% linkable_title Service `econet_add_vacation` %} + +You can use the service econet/add_vacation to create a new vacation for your EcoNet water heaters. + +| Service data attribute | Optional | Description | +| ---------------------- | -------- | ----------- | +| `entity_id` | yes | The entity id of the water heater to add the vaction to. +| `start_date` | yes | This is a Unix timestamp for when the vaction should start. +| `end_date` | yes | this is a Unix timestamp for when the vaction should end. + +

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

+ +### {% linkable_title Service `econet_delete_vacation` %} + +You can use the service econet/delete_vacation to remove all vactions from an EcoNet water heater. + +| Service data attribute | Optional | Description | +| ---------------------- | -------- | ----------- | +| `entity_id` | yes | The entity id of the water heater to remove the vaction from. + + diff --git a/source/images/supported_brands/econet.png b/source/images/supported_brands/econet.png new file mode 100644 index 0000000000000000000000000000000000000000..cff0e0706c447bbc6024597af5415bc4ab56ccc3 GIT binary patch literal 285502 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 Date: Sat, 30 Dec 2017 09:01:06 +0000 Subject: [PATCH 030/993] Hive Component Release Two (#4178) * Update documentation for hive active light colour changing light * Updated hive climate documentation for aux heat / boost feature --- source/_components/binary_sensor.hive.markdown | 2 +- source/_components/climate.hive.markdown | 1 + source/_components/hive.markdown | 1 + source/_components/light.hive.markdown | 1 + 4 files changed, 4 insertions(+), 1 deletion(-) diff --git a/source/_components/binary_sensor.hive.markdown b/source/_components/binary_sensor.hive.markdown index 62022aa898..ef695f4601 100644 --- a/source/_components/binary_sensor.hive.markdown +++ b/source/_components/binary_sensor.hive.markdown @@ -1,6 +1,6 @@ --- layout: page -title: "Hive Sensor" +title: "Hive Binary Sensor" description: "Instructions on how to integrate Hive Sensors with Home Assistant." date: 2017-09-24 21:00 sidebar: true diff --git a/source/_components/climate.hive.markdown b/source/_components/climate.hive.markdown index a6c40b1462..dd3fd41ca5 100644 --- a/source/_components/climate.hive.markdown +++ b/source/_components/climate.hive.markdown @@ -15,6 +15,7 @@ ha_iot_class: "Cloud Polling" The 'hive' climate component integrates your Hive thermostat and hot water into Home Assistant, enabling control of setting the **mode** and setting the **target temperature**. +A short boost for Hive Heating or Hive Hot water can be set by using the **Aux Heat** function, this will turn on the boost feature for Hive Heating or Hive Hot water for 30 minutes at 0.5 degrees higher than the current temperature. The Hive climate component supports the following Hive products: - **Hive Active Heating** diff --git a/source/_components/hive.markdown b/source/_components/hive.markdown index 7c3d47a3c9..8f760b08c7 100644 --- a/source/_components/hive.markdown +++ b/source/_components/hive.markdown @@ -49,6 +49,7 @@ The Hive Home Assistant platform currently supports the following Hive devices: - Hive Active Heating (including hot water and Hive Multizone) - Hive Active Light Dimmable - Hive Active Light Cool to Warm White +- Hive Active Light Colour Changing - Hive Active Plug - Hive Window or Door Sensor - Hive Motion Sensor diff --git a/source/_components/light.hive.markdown b/source/_components/light.hive.markdown index 7b9038ae16..89f55459fb 100644 --- a/source/_components/light.hive.markdown +++ b/source/_components/light.hive.markdown @@ -19,6 +19,7 @@ The 'hive' light component integrates your Hive lights into Home Assistant, enab The Hive light component supports the following Hive products: - **Hive Active Light Dimmable** - **Hive Active Light Cool to Warm White** +- **Hive Active Light Colour Changing**

From dceec870d86d5867ef202a5d2b36bfadf4c95562 Mon Sep 17 00:00:00 2001 From: David Fiel Date: Sat, 30 Dec 2017 05:05:14 -0500 Subject: [PATCH 031/993] Documentation for new TCP Lighting (Greenwave Reality) component (#4005) * Create light.tcpbulbs.markdown * Change Version to 0.59 * Change Configuration to correct formatting * Removed Configuration Variables Header * Update and rename light.tcpbulbs.markdown to light.greenwave.markdown * Update light.greenwave.markdown * Update light.greenwave.markdown * :lipstick: Adds the Greenwave Reality logo * :lipstick: Improved crop of logo --- source/_components/light.greenwave.markdown | 41 ++++++++++++++++++ .../supported_brands/greenwavereality.png | Bin 0 -> 12550 bytes 2 files changed, 41 insertions(+) create mode 100644 source/_components/light.greenwave.markdown create mode 100644 source/images/supported_brands/greenwavereality.png diff --git a/source/_components/light.greenwave.markdown b/source/_components/light.greenwave.markdown new file mode 100644 index 0000000000..a0cba942d4 --- /dev/null +++ b/source/_components/light.greenwave.markdown @@ -0,0 +1,41 @@ +--- +layout: page +title: Greenwave Reality (TCP Connected) Lights +description: "Instructions on how to set up Greenwave Reality lights within Home Assistant." +date: 2017-11-17 18:50 +sidebar: true +comments: false +sharing: true +footer: true +logo: greenwavereality.png +ha_category: Light +ha_release: 0.61 +ha_iot_class: "Local Polling" +--- + +This component communicates with the Greenwave Reality (TCP Connected) Gateway to allow control of all lights and fixtures registered to the gateway. Bulbs and Fixtures can be created and modified inside the TCP Lighting App for Android and iOS. + +This component has been tested on firmware revisions: + +- 2.0.105 + +To configure the connection to the gateway, add the following to your `configuration.yaml` file: + +```yaml +light: + - platform: greenwave + host: XXX.XXX.XXX.XXX + version: 3 +``` +The version option is the major revision of your firmware, which should be 2 or 3. If you are running Version 2, there are no extra steps. If you are running Version 3, you must press the Sync button on the gateway prior to the first launch of Home Assistant, so a token can be grabbed. Once home assistant has started, you can either press the Sync button again or wait for it to time out manually. + +{% configuration %} +host: + description: The IP Address of your Gateway + required: true + type: string +version: + description: Major version of the gateway firmware + required: true + type: integer +{% endconfiguration %} diff --git a/source/images/supported_brands/greenwavereality.png b/source/images/supported_brands/greenwavereality.png new file mode 100644 index 0000000000000000000000000000000000000000..d80243b4750402b2cff235dd27a829b63b4a36a2 GIT binary patch literal 12550 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 literal 0 HcmV?d00001 From 9c599e592b1b6cba75fa77068b4e7c3a93659a17 Mon Sep 17 00:00:00 2001 From: Andrey Kupreychik Date: Sat, 30 Dec 2017 17:05:49 +0700 Subject: [PATCH 032/993] GPS Logger auth section (#4253) --- source/_components/device_tracker.gpslogger.markdown | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/source/_components/device_tracker.gpslogger.markdown b/source/_components/device_tracker.gpslogger.markdown index 6b6a439cde..994b8c2989 100644 --- a/source/_components/device_tracker.gpslogger.markdown +++ b/source/_components/device_tracker.gpslogger.markdown @@ -19,7 +19,14 @@ To integrate GPSLogger in Home Assistant, add the following section to your `con # Example configuration.yaml entry device_tracker: - platform: gpslogger + password: !secret gpslogger_password ``` +{% configuration %} +password: + description: Separate password for GPS Logger endpoint. If provided using regular API password to contact endpoint will result in 401 response. + required: false + type: string +{% endconfiguration %} ## {% linkable_title Setup on your smartphone %} From efa6a029ffdd4c2f40367aee4476de6f48632e40 Mon Sep 17 00:00:00 2001 From: Jeroen ter Heerdt Date: Mon, 1 Jan 2018 02:11:47 +0100 Subject: [PATCH 033/993] Add support for GATE-03 version of Ergardia alarm system (#4315) --- source/_components/alarm_control_panel.egardia.markdown | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/_components/alarm_control_panel.egardia.markdown b/source/_components/alarm_control_panel.egardia.markdown index 6706a50f23..20c555587e 100644 --- a/source/_components/alarm_control_panel.egardia.markdown +++ b/source/_components/alarm_control_panel.egardia.markdown @@ -12,7 +12,7 @@ ha_release: 0.51 ha_category: Alarm --- -The `egardia` platform enables the ability to control an [Egardia](http://egardia.com/)/[Woonveilig](http://woonveilig.nl) control panel. These alarm panels are known under different brand names across the world, including Woonveilig in the Netherlands. This was tested on a GATE-01 and GATE-02 version of the Egardia/Woonveilig platform. +The `egardia` platform enables the ability to control an [Egardia](http://egardia.com/)/[Woonveilig](http://woonveilig.nl) control panel. These alarm panels are known under different brand names across the world, including Woonveilig in the Netherlands. This was tested on the GATE-01, GATE-02 and GATE-03 versions of the Egardia/Woonveilig platform. You will need to know the IP of your alarm panel on your local network. Test if you can login to the panel by browsing to the IP address and log in using your Egardia/Woonveilig account. @@ -32,7 +32,7 @@ Configuration variables: - **host** (*Required*): The local IP address of the Egardia/Woonveilig alarm panel. - **username** (*Required*): Username for the Egardia/Woonveilig account. - **password** (*Required*): Password for Egardia/Woonveilig account. -- **version** (*Optional*): The version of the Egardia system. `GATE-01` and `GATE-02` are currently supported. Defaults to `GATE-01`. +- **version** (*Optional*): The version of the Egardia system. `GATE-01`, `GATE-02` and `GATE-03` are currently supported. Defaults to `GATE-01`. - **port** (*Optional*): The port of the alarm panel. Defaults to 80. - **name** (*Optional*): Name to use for the alarm panel. Defaults to `Egardia`. - **report_server_enabled** (*Optional*): Enable reporting by server. Defaults to `False`. From da754f48b042dab03e8f0f55ec0840b24ca278ce Mon Sep 17 00:00:00 2001 From: ChristianKuehnel Date: Mon, 1 Jan 2018 14:38:09 +0100 Subject: [PATCH 034/993] Added documentation for completing/updating tasks (#4186) * Added documentation for completing/updating tasks * extended documentation with table and examples * fixed missing %} --- source/_components/remember_the_milk.markdown | 53 ++++++++++++++++++- 1 file changed, 51 insertions(+), 2 deletions(-) diff --git a/source/_components/remember_the_milk.markdown b/source/_components/remember_the_milk.markdown index d4cc22fa10..1c3169028b 100644 --- a/source/_components/remember_the_milk.markdown +++ b/source/_components/remember_the_milk.markdown @@ -59,12 +59,61 @@ If the registration was successful, the Configuration panel will disappear from In the background Home Assistant downloaded a "token" from the Remember The Milk server which is stored in the `remember_the_milk.conf` file locally. So you only need to register once. After that the token is used to authenticate with the server. -## {% linkable_title Creating tasks %} +## {% linkable_title Creating/updating tasks with service ```create_task```%} -This component offers a new service domain ```remember_the_milk``` with the service ```create_task```. You can call this service with the argument ```name``` to create a new task in your Remember The Milk account. You can call this service from your usual automations. +This component offers a new service domain ```remember_the_milk``` with the services ```_create_task```. You can call this service with the argument ```name``` and the optional parameter ```id``` to create a new task in your Remember The Milk account. You can call this service from your usual automations. + +If you set an ```id``` and a task with that id exists already, the existing task is updated, rather than creating a new task. This way you can change the name of the task. If you do not set an ```id```, a new task is created with every call. If you're using this from an automation, you could use the name of your automation as id or the entity that triggered the task to be created. This way you can later on update or complete this task. The task creation supports the "smart syntax", so to create a task with the tag "from_hass" which is due today you can create a task with the name ```test task created in Home Assistant ^today #from_hass```. More info about the smart syntax is available on the [Remember The Milk documentation](https://www.rememberthemilk.com/help/answer/basics-smartadd-howdoiuse). +**Note:** +At the moment, smart syntax is *not* supported when updating tasks. All smart syntax commands are ignored during the update and will end up as normal text in the name of the task. + +|Service data attribute | Optional | Description | Example | +|-----------------------|----------|-------------|---------| +| name | no | Name of the new task, you can use the smart syntax here. | "do this ^today #from_hass" | +| id | yes | Identifier for the task you're creating, can be used to update or complete the task later on | "myid" | + +## {% linkable_title Completing tasks with service ```complete_task```%} + +Complete a tasks that was privously created from Home Assistant. You can not complete tasks that were created outside of Home Assistant. + +If you have created your task with an ```id```, calling ```_complete_task``` with the parameter ```id``` will then complete your task. + +|Service data attribute | Optional | Description | Example | +|-----------------------|----------|-------------|---------| +| id | no | Identifier that was defined when creating the task | "myid" | + +## {% linkable_title Automation example %} + +Here's an example for an automation that creates a new task whenever ```sensor.mysensor``` is ```on``` and completes it when the sensor reports ```off```. This way it reminds you to switch it off. By using the ```entity_id``` as id for the task, you can use the same rule also for multiple sensors. + + +```yaml +- id: mysensor_on + trigger: + platform: state + entity_id: sensor.mysensor + to: on + action: + - service: remember_the_milk.myaccount_create_task + data_template: + name: "Please switch of {{trigger.entity_id}}" + id: "{{trigger.entity_id}}" +- id: mysensor_off + trigger: + platform: state + entity_id: sensor.mysensor + to: off + action: + - service: remember_the_milk.myaccount_complete_task + data_template: + id: "{{trigger.entity_id}}" + +``` + + ## {% linkable_title Disclaimer %} This product uses the Remember The Milk API but is not endorsed or certified by Remember The Milk. From 943b2e311923ead807e5f1d12a9229c94d37b011 Mon Sep 17 00:00:00 2001 From: Kane610 Date: Mon, 1 Jan 2018 18:35:59 +0100 Subject: [PATCH 035/993] Add deCONZ component documentation (#3967) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Deconz hub documentation * Add binary sensor documentation * Add sensor documentation * Add light documentation * Improve description * Add information about HASS events from ZHASwitch buttonpresses * Added description about how entity id naming works * Added links to dresden elektronik, deconz and deconz rest api Added automation examples for a IKEA Trådfri dimmer and input number Added list of supported device types Added lists of verified to work devices Removed references to Axis component * Changed description of how to generate API key * Added information about configuration variables username and password * Updated lists of verified devices * Links from list of supported device to sub modules * Remove documentation for api_key_generation since functionality has been removed * Add documentation for configure service * Documentation for scenes * Bumped HASS release version to 0.59 * Added Xiaomi Aqara Smart Wireless Switch to list of verified to work devices * Added improved automation example by simonporter007 * Added information about deCONZ configurator * Fix raw code * Added more lights to supported list * Make description about entity id same in all types * Updated installation instructions * Added Dresden Elektroniks logo * Added Tseels verified to work devices * Bump ha_release string * Added information about groups Added additional verified lights * Link to information about switch not being an entity on main hub page * Improved information about switches not being normal entities * It should be api_key not api-key * Removed specifying deconz version * Bump version to 0.61 * Fix typos * Use configuration tags to describe configuration parameters * Fix martinhjelamares comments * Rename parameter service data attribute --- .../_components/binary_sensor.deconz.markdown | 33 ++++ source/_components/deconz.markdown | 148 ++++++++++++++++++ source/_components/light.deconz.markdown | 29 ++++ source/_components/scene.deconz.markdown | 18 +++ source/_components/sensor.deconz.markdown | 45 ++++++ source/images/supported_brands/deconz.jpeg | Bin 0 -> 12197 bytes 6 files changed, 273 insertions(+) create mode 100644 source/_components/binary_sensor.deconz.markdown create mode 100644 source/_components/deconz.markdown create mode 100644 source/_components/light.deconz.markdown create mode 100644 source/_components/scene.deconz.markdown create mode 100644 source/_components/sensor.deconz.markdown create mode 100644 source/images/supported_brands/deconz.jpeg diff --git a/source/_components/binary_sensor.deconz.markdown b/source/_components/binary_sensor.deconz.markdown new file mode 100644 index 0000000000..f06c89241b --- /dev/null +++ b/source/_components/binary_sensor.deconz.markdown @@ -0,0 +1,33 @@ +--- +layout: page +title: "deCONZ Binary Sensor" +description: "Instructions on how to integrate Zigbee binary sensors from deCONZ into Home Assistant." +date: 2017-11-12 16:30 +sidebar: true +comments: false +sharing: true +footer: true +logo: deconz.jpeg +ha_category: Binary Sensor +ha_release: "0.61" +ha_iot_class: "Local Push" +--- + +See the [deCONZ main component](/components/deconz/) for configuration instructions. + +The following sensor types are supported: + + * Open/Close detection + * Presence detection + +Entity ids will be binary_sensor.device_name, where device_name is defined in deCONZ. + +#### {% linkable_title Verified to be supported binary sensors %} + +- Open/Close Detection + - Xiaomi Smart Home Security Door & Window Contact Sensor +- Presence Detection + - IKEA Trådfri Motion Sensor + - Philips Hue Motion Sensor + - Xiaomi Motion Sensor + - Xiaomi Smart Home Aqara Human Body Sensor diff --git a/source/_components/deconz.markdown b/source/_components/deconz.markdown new file mode 100644 index 0000000000..8d050e7d43 --- /dev/null +++ b/source/_components/deconz.markdown @@ -0,0 +1,148 @@ +--- +layout: page +title: "deCONZ" +description: "Instructions on how to setup Conbee/Raspbee devices with deCONZ from Dresden Elektronik within Home Assistant." +date: 2017-11-12 16:30 +sidebar: true +comments: false +sharing: true +footer: true +logo: deconz.jpeg +ha_category: Hub +ha_release: "0.61" +ha_iot_class: "Local Push" +--- + +[deCONZ](https://www.dresden-elektronik.de/funktechnik/products/software/pc/deconz/) by [Dresden Elektronik](https://www.dresden-elektronik.de) is a software that communicates with Conbee/Raspbee Zigbee gateways and exposes Zigbee devices that are connected to the gateway. + +[deCONZ REST API](http://dresden-elektronik.github.io/deconz-rest-doc/). + +Home Assistant will automatically discover deCONZ presence on your network, if `discovery:` is present in your `configuration.yaml` file. + +If you don't have the API key, you can generate an API key for deCONZ by using the one-click functionality similar to Philips Hue. Go to Menu->Settings->Unlock Gateway in deCONZ and then use the deCONZ configurator in Home Assistant GUI to create an API key. When you've generated the API key from Home Assistant, the API key will be stored in deconz.conf inside the home-assistant folder. + +You can add the following to your configuration.yaml file if you are not using the `discovery:` component: + +```yaml +# Example configuration.yaml entry +deconz: + host: IP ADDRESS +``` + +#### {% linkable_title Supported Device types %} + +- [Zigbee Lights](/components/light/deconz/) +- [Humidity Sensors](/components/sensor/deconz/) +- [Light Level Sensors](/components/sensor/deconz/) +- [OpenClose Detectors](/components/binary_sensor/deconz/) +- [Presence Detectors](/components/binary_sensor/deconz/) +- [Pressure Sensors](/components/sensor/deconz/) +- [Switches (Remote Controls)](/components/sensor/deconz/) +- [Temperature Sensors](/components/sensor/deconz/) + +{% configuration %} +host: + description: The IP address of your deCONZ web server. + required: false + type: string +api_key: + description: The API key to access your deCONZ web server. + required: false + type: string +port: + description: Configure port deCONZ web server is accessible from. + required: false + default: 80 + type: int +{% endconfiguration %} + +A full configuration could look like this: + +```yaml +# Example configuration.yaml entry +deconz: + host: 127.0.0.1 + api_key: 0123456789 + port: 80 +``` + +## {% linkable_title Device services %} +Available services: `configure`. + +#### {% linkable_title Service `deconz/configure` %} +Set attribute of device in Deconz using [Rest API](http://dresden-elektronik.github.io/deconz-rest-doc/rest/). + +| Service data attribute | Optional | Description | +|-----------|----------|-------------| +| `field` | No | String representing a specific device in deCONZ. | +| `data` | No | Data is a JSON object with what data you want to alter. | + +{ "field": "/lights/1", "data": {"name": "light2"} } + +{ "field": "/config", "data": {"permitjoin": 60} } + +## {% linkable_title Remote control devices%} + +Remote controls (ZHASwitch category) will be not be exposed as a regular entity, but as events named 'deconz_event' with a payload of 'id' and 'event'. Id will be the device name from deCONZ and Event will be the momentary state of the switch. However, a sensor entity will be created that shows the battery level of the switch as reported by deCONZ, named sensor.device_name_battery_level. + +Typical values for switches, the event codes are 4 numbers where the first and last number are of interest here. + +| Switch code | Description | +|-------------|-------------| +| 1XXX | Button #1 up to #8 | +| XXX1 | Button hold | +| XXX2 | Button short release | +| XXX3 | Button long release | + +Where for example on a Philips Hue Dimmer, 2001 would be holding the dim up button. + +## {% linkable_title Examples %} + +### {% linkable_title Step up and step down input number with wireless dimmer %} + +```yaml +automation: + - alias: 'Toggle lamp from dimmer' + initial_state: 'on' + trigger: + platform: event + event_type: deconz_event + event_data: + id: remote_control_1 + event: 1002 + action: + service: light.toggle + entity_id: light.lamp + + - alias: 'Increase brightness of lamp from dimmer' + initial_state: 'on' + trigger: + platform: event + event_type: deconz_event + event_data: + id: remote_control_1 + event: 2002 + action: + - service: light.turn_on + data_template: + entity_id: light.lamp + brightness: {% raw %}> + {% set bri = states.light.lamp.attributes.brightness | int %} + {{ [bri+30, 249] | min }}{% endraw %} + + - alias: 'Decrease brightness of lamp from dimmer' + initial_state: 'on' + trigger: + platform: event + event_type: deconz_event + event_data: + id: remote_control_1 + event: 3002 + action: + - service: light.turn_on + data_template: + entity_id: light.lamp + brightness: {% raw %}> + {% set bri = states.light.lamp.attributes.brightness | int %} + {{ [bri-30, 0] | max }}{% endraw %} +``` diff --git a/source/_components/light.deconz.markdown b/source/_components/light.deconz.markdown new file mode 100644 index 0000000000..7ee2d59195 --- /dev/null +++ b/source/_components/light.deconz.markdown @@ -0,0 +1,29 @@ +--- +layout: page +title: "deCONZ lights" +description: "Instructions on how to integrate Zigbee lights from deCONZ into Home Assistant." +date: 2017-11-12 16:30 +sidebar: true +comments: false +sharing: true +footer: true +logo: deconz.jpeg +ha_category: Light +ha_release: "0.61" +ha_iot_class: "Local Push" +--- + +See the [deCONZ main component](/components/deconz/) for configuration instructions. + +Entity Ids names will be light.device_name, where device_name is defined in deCONZ. Light groups created in deCONZ will be created in Home Assistant as lights named light.group_name_in_deconz, allowing the user to control groups of lights with only a single API call to deCONZ. + +#### {% linkable_title Verified to be supported sensors %} + +- IKEA Trådfri bulb E14 WS opal 400lm +- IKEA Trådfri Bulb E27 WS Opal 980lm +- IKEA Trådfri Bulb E27 WS Opal 1000lm +- IKEA Trådfri Bulb GU10 W 400lm +- OSRAM Flex RGBW +- OSRAM Gardenpole RGBW +- Philips Hue White A19 +- Philips Hue White Ambiance A19 diff --git a/source/_components/scene.deconz.markdown b/source/_components/scene.deconz.markdown new file mode 100644 index 0000000000..b5fdf7fa7f --- /dev/null +++ b/source/_components/scene.deconz.markdown @@ -0,0 +1,18 @@ +--- +layout: page +title: "deCONZ scenes" +description: "Instructions on how to integrate deCONZ scenes into Home Assistant." +date: 2017-11-19 20:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: deconz.jpeg +ha_category: Scene +ha_release: "0.61" +ha_iot_class: "Local Push" +--- + +See the [deCONZ main component](/components/deconz/) for configuration instructions. + +Entity Ids will be scene.group_scene_name, where group is which group the scene belongs to and the name of the scene, both group and name are defined in deCONZ. \ No newline at end of file diff --git a/source/_components/sensor.deconz.markdown b/source/_components/sensor.deconz.markdown new file mode 100644 index 0000000000..6844c88d83 --- /dev/null +++ b/source/_components/sensor.deconz.markdown @@ -0,0 +1,45 @@ +--- +layout: page +title: deCONZ Sensor +description: "Instructions on how to integrate Zigbee sensors from deCONZ into Home Assistant." +date: 2017-11-12 16:30 +sidebar: true +comments: false +sharing: true +footer: true +logo: deconz.jpeg +ha_category: Sensor +ha_release: "0.61" +ha_iot_class: "Local Push" +--- + +See the [deCONZ main component](/components/deconz/) for configuration instructions. + +The following sensor types are supported: + + * Humidity sensor + * Light level sensor + * Pressure sensor + * Switches + * Temperature sensor + +Entity ids will be sensor.device_name, where device_name is defined in deCONZ. Switches aren't exposed as ordinary entities, see the [deCONZ main component](/components/deconz/) for more details. + +#### {% linkable_title Verified to be supported sensors %} + +- Humidity Sensor + - Xiaomi Aqara Humidity/Temperature Sensor + - Xiaomi MiJia Smart Temperature & Humidity Sensor +- Light Level Sensor +- Pressure Sensor +- Switches + - IKEA Trådfri Wireless Dimmer + - Philips Hue Motion Sensor + - IKEA Trådfri Remote + - Philips Hue Dimmer Switch + - Xiaomi Cube + - Xiaomi Aqara Smart Light Switch + - Xiaomi Aqara Smart Wireless Switch + - Xiaomi Smart Home Wireless Switch +- Temperature Sensor + - Xiaomi Temperature/Humidity Sensor diff --git a/source/images/supported_brands/deconz.jpeg b/source/images/supported_brands/deconz.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..6bd2e5373d78d218e61aa4c935dcf4640cb16931 GIT binary patch literal 12197 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 S)&0-P{lC)xwFWr0d;TB&{nn%a literal 0 HcmV?d00001 From 5d321e66f73716d1f3cc05b2cac01a9752735772 Mon Sep 17 00:00:00 2001 From: Dan Nixon Date: Tue, 2 Jan 2018 02:33:19 +0000 Subject: [PATCH 036/993] Update MQTT platforms that now support availablity (#4293) To accompany changes from: https://github.com/home-assistant/home-assistant/pull/11336 Updated platforms: - Switch (previously supported) - Binary sensor (previously supported) - Cover (previously supported) - Light - JSON light - Template light - Sensor - Alarm control panel - Lock - HVAC - Fan - Vacuum --- .../alarm_control_panel.mqtt.markdown | 64 +++++-- .../_components/binary_sensor.mqtt.markdown | 60 ++++-- source/_components/climate.mqtt.markdown | 143 +++++++++++--- source/_components/cover.mqtt.markdown | 148 +++++++++++--- source/_components/fan.mqtt.markdown | 135 ++++++++++--- source/_components/light.mqtt.markdown | 180 ++++++++++++++---- source/_components/light.mqtt_json.markdown | 105 ++++++++-- .../_components/light.mqtt_template.markdown | 101 ++++++++-- source/_components/lock.mqtt.markdown | 73 +++++-- source/_components/sensor.mqtt.markdown | 15 +- source/_components/switch.mqtt.markdown | 72 +++++-- source/_components/vacuum.mqtt.markdown | 157 ++++++++++++--- 12 files changed, 1024 insertions(+), 229 deletions(-) diff --git a/source/_components/alarm_control_panel.mqtt.markdown b/source/_components/alarm_control_panel.mqtt.markdown index 7e6feaa7a2..199ebacaee 100644 --- a/source/_components/alarm_control_panel.mqtt.markdown +++ b/source/_components/alarm_control_panel.mqtt.markdown @@ -35,14 +35,56 @@ alarm_control_panel: command_topic: "home/alarm/set" ``` -Configuration variables: - -- **state_topic** (*Required*): The MQTT topic subscribed to receive state updates. -- **command_topic** (*Required*): The MQTT topic to publish commands to change the alarm state. -- **name** (*Optional*): The name of the alarm. Default is 'MQTT Alarm'. -- **qos** (*Optional*): The maximum QoS level of the state topic. Default is 0. This QoS will also be used to publishing messages. -- **payload_disarm** (*Optional*): The payload to disarm your Alarm Panel. Default is "DISARM". -- **payload_arm_home** (*Optional*): The payload to set armed-home mode on your Alarm Panel. Default is "ARM_HOME". -- **payload_arm_away** (*Optional*): The payload to set armed-away mode on your Alarm Panel. Default is "ARM_AWAY". -- **code** (*Optional*): If defined, specifies a code to enable or disable the alarm in the frontend. - +{% configuration %} +name: + description: The name of the alarm. + required: false + type: string + default: MQTT Alarm +state_topic: + description: The MQTT topic subscribed to receive state updates. + required: true + type: string +command_topic: + description: The MQTT topic to publish commands to change the alarm state. + required: true + type: string +qos: + description: The maximum QoS level of the state topic. + required: false + type: integer + default: 0 +payload_disarm: + description: The payload to disarm your Alarm Panel. + required: false + type: string + default: DISARM +payload_arm_home: + description: The payload to set armed-home mode on your Alarm Panel. + required: false + type: string + default: ARM_HOME +payload_arm_away: + description: The payload to set armed-away mode on your Alarm Panel. + required: false + type: string + default: ARM_AWAY +code: + description: If defined, specifies a code to enable or disable the alarm in the frontend. + required: false + type: string +availability_topic: + description: The MQTT topic subscribed to receive availability (online/offline) updates. + required: false + type: string +payload_available: + description: The payload that represents the available state. + required: false + type: string + default: online +payload_not_available: + description: The payload that represents the unavailable state. + required: false + type: string + default: offline +{% endconfiguration %} diff --git a/source/_components/binary_sensor.mqtt.markdown b/source/_components/binary_sensor.mqtt.markdown index 3b1ff86453..6505859838 100644 --- a/source/_components/binary_sensor.mqtt.markdown +++ b/source/_components/binary_sensor.mqtt.markdown @@ -29,18 +29,54 @@ binary_sensor: state_topic: "home-assistant/window/contact" ``` -Configuration variables: - -- **name** (*Optional*): The name of the binary sensor. Default is `MQTT Binary Sensor`. -- **state_topic** (*Required*): The MQTT topic subscribed to receive sensor values. -- **payload_on** (*Optional*): The payload that represents the on state. Default is `ON`. -- **payload_off** (*Optional*): The payload that represents the off state. Default is `OFF`. -- **availability_topic** (*Optional*): The MQTT topic subscribed to receive birth and LWT messages from the MQTT device. If `availability_topic` is not defined, the binary sensor availability state will always be `available`. If `availability_topic` is defined, the binary sensor availability state will be `unavailable` by default. -- **payload_available** (*Optional*): The payload that represents the online state. Default is `online`. -- **payload_not_available** (*Optional*): The payload that represents the offline state. Default is `offline`. -- **qos** (*Optional*): The maximum QoS level to be used when receiving messages. Default is `0`. -- **device_class** (*Optional*): The [type/class](/components/binary_sensor/) of the sensor to set the icon in the frontend. -- **value_template** (*Optional*): Defines a [template](/docs/configuration/templating/#processing-incoming-data) to extract a value from the payload. +{% configuration %} +name: + description: The name of the binary sensor. + required: false + type: string + default: MQTT Binary Sensor +state_topic: + description: The MQTT topic subscribed to receive sensor values. + required: true + type: string +payload_on: + description: The payload that represents the on state. + required: false + type: string + default: ON +payload_off: + description: The payload that represents the off state. + required: false + type: string + default: OFF +availability_topic: + description: "The MQTT topic subscribed to receive birth and LWT messages from the MQTT device. If `availability_topic` is not defined, the binary sensor availability state will always be `available`. If `availability_topic` is defined, the binary sensor availability state will be `unavailable` by default." + required: false + type: string +payload_available: + description: The payload that represents the online state. + required: false + type: string + default: online +payload_not_available: + description: The payload that represents the offline state. + required: false + type: string + default: offline +qos: + description: The maximum QoS level to be used when receiving messages. + required: false + type: integer + default: 0 +device_class: + description: "The [type/class](/components/binary_sensor/) of the sensor to set the icon in the frontend." + required: false + type: string +value_template: + description: "Defines a [template](/docs/configuration/templating/#processing-incoming-data) to extract a value from the payload." + required: false + type: string +{% endconfiguration %} To test, you can use the command line tool `mosquitto_pub` shipped with `mosquitto` or the `mosquitto-clients` package to send MQTT messages. To set the state of the binary sensor manually: diff --git a/source/_components/climate.mqtt.markdown b/source/_components/climate.mqtt.markdown index 7d624b4d9a..3713b1274c 100644 --- a/source/_components/climate.mqtt.markdown +++ b/source/_components/climate.mqtt.markdown @@ -28,34 +28,121 @@ climate: temperature_command_topic: /sensors/hvac_study/target_temp ``` -Configuration variables *except* for MQTT topics: - -- **name** (*Required*): Name of MQTT HVAC. -- **qos** (*Optional*): The maximum QoS level of the state topic. Default is `0` and will also be used to publishing messages. -- **retain** (*Optional*): If the published message should have the retain flag on or not. -- **send_if_off** (*Optional*): Set to `false` to suppress sending of all MQTT messages when the current mode is `Off`. Defaults to `true`. -- **initial** (*Optional*): Set the initial target temperature. Defaults to 21 degrees. -- **payload_on** (*Optional*): For MQTT topics that control an `on` / `off` value (e.g., `aux_command_topic`), set the value that should be sent for `on`. Defaults to 'ON'. -- **payload_off** (*Optional*): For MQTT topics that control an `on` / `off` value (e.g., `aux_command_topic`), set the value that should be sent for `off`. Defaults to 'OFF'. - -Configuration of the MQTT topics: - -- **current_temperature_topic** (*Optional*): The MQTT topic on which to listen for the current temperature -- **power_command_topic** (*Optional*): The MQTT topic to publish commands to change the power state. This is useful if your device has a separate power toggle in addition to mode. -- **mode_command_topic** (*Optional*): The MQTT topic to publish commands to change the HVAC operation mode. -- **mode_state_topic** (*Optional*): The MQTT topic to subscribe for changes of the HVAC operation mode. If this is not set, the operation mode works in optimistic mode (see below). -- **temperature_command_topic** (*Optional*): The MQTT topic to publish commands to change the target temperature. -- **temperature_state_topic** (*Optional*): The MQTT topic to subscribe for changes in the target temperature. If this is not set, the target temperature works in optimistic mode (see below). -- **fan_mode_command_topic** (*Optional*): The MQTT topic to publish commands to change the fan mode. -- **fan_mode_state_topic** (*Optional*): The MQTT topic to subscribe for changes of the HVAC fan mode. If this is not set, the fan mode works in optimistic mode (see below). -- **swing_mode_command_topic** (*Optional*): The MQTT topic to publish commands to change the swing mode. -- **swing_mode_state_topic** (*Optional*): The MQTT topic to subscribe for changes of the HVAC swing mode. If this is not set, the swing mode works in optimistic mode (see below). -- **away_mode_command_topic** (*Optional*): The MQTT topic to publish commands to change the away mode. -- **away_mode_state_topic** (*Optional*): The MQTT topic to subscribe for changes of the HVAC away mode. If this is not set, the away mode works in optimistic mode (see below). -- **hold_command_topic** (*Optional*): The MQTT topic to publish commands to change the hold mode. -- **hold_state_topic** (*Optional*): The MQTT topic to subscribe for changes of the HVAC hold mode. If this is not set, the hold mode works in optimistic mode (see below). -- **aux_command_topic** (*Optional*): The MQTT topic to publish commands to switch auxiliary heat. -- **aux_state_topic** (*Optional*): The MQTT topic to subscribe for changes of the auxiliary heat mode. If this is not set, the auxiliary heat mode works in optimistic mode (see below). +{% configuration %} +name: + description: The name of the HVAC. + required: false + type: string + default: MQTT HVAC +qos: + description: The maximum QoS level to be used when receiving and publishing messages. + required: false + type: integer + default: 0 +retain: + description: Defines if published messages should have the retain flag set. + required: false + type: boolean + default: false +send_if_off: + description: "Set to `false` to suppress sending of all MQTT messages when the current mode is `Off`." + required: false + type: boolean + default: true +initial: + description: Set the initial target temperature. + required: false + type: number + default: 21 +payload_on: + description: The payload that represents enabled state. + required: false + type: string + default: ON +payload_off: + description: The payload that represents disabled state. + required: false + type: string + default: OFF +availability_topic: + description: The MQTT topic subscribed to receive availability (online/offline) updates. + required: false + type: string +payload_available: + description: The payload that represents the available state. + required: false + type: string + default: online +payload_not_available: + description: The payload that represents the unavailable state. + required: false + type: string + default: offline +current_temperature_topic: + description: The MQTT topic on which to listen for the current temperature. + required: false + type: string +power_command_topic: + description: The MQTT topic to publish commands to change the power state. This is useful if your device has a separate power toggle in addition to mode. + required: false + type: string +mode_command_topic: + description: The MQTT topic to publish commands to change the HVAC operation mode. + required: false + type: string +mode_state_topic: + description: The MQTT topic to subscribe for changes of the HVAC operation mode. If this is not set, the operation mode works in optimistic mode (see below). + required: false + type: string +temperature_command_topic: + description: The MQTT topic to publish commands to change the target temperature. + required: false + type: string +temperature_state_topic: + description: The MQTT topic to subscribe for changes in the target temperature. If this is not set, the target temperature works in optimistic mode (see below). + required: false + type: string +fan_mode_command_topic: + description: The MQTT topic to publish commands to change the fan mode. + required: false + type: string +fan_mode_state_topic: + description: The MQTT topic to subscribe for changes of the HVAC fan mode. If this is not set, the fan mode works in optimistic mode (see below). + required: false + type: string +swing_mode_command_topic: + description: The MQTT topic to publish commands to change the swing mode. + required: false + type: string +swing_mode_state_topic: + description: The MQTT topic to subscribe for changes of the HVAC swing mode. If this is not set, the swing mode works in optimistic mode (see below). + required: false + type: string +away_mode_command_topic: + description: The MQTT topic to publish commands to change the away mode. + required: false + type: string +away_mode_state_topic: + description: The MQTT topic to subscribe for changes of the HVAC away mode. If this is not set, the away mode works in optimistic mode (see below). + required: false + type: string +hold_command_topic: + description: The MQTT topic to publish commands to change the hold mode. + required: false + type: string +hold_state_topic: + description: The MQTT topic to subscribe for changes of the HVAC hold mode. If this is not set, the hold mode works in optimistic mode (see below). + required: false + type: string +aux_command_topic: + description: The MQTT topic to publish commands to switch auxiliary heat. + required: false + type: string +aux_state_topic: + description: The MQTT topic to subscribe for changes of the auxiliary heat mode. If this is not set, the auxiliary heat mode works in optimistic mode (see below). + required: false + type: string +{% endconfiguration %} #### Optimistic mode diff --git a/source/_components/cover.mqtt.markdown b/source/_components/cover.mqtt.markdown index e466514cad..94cc013f78 100755 --- a/source/_components/cover.mqtt.markdown +++ b/source/_components/cover.mqtt.markdown @@ -35,33 +35,125 @@ cover: command_topic: "home-assistant/cover/set" ``` -Configuration variables: - -- **name** (*Optional*): The name of the sensor. Default is `MQTT Cover`. -- **command_topic** (*Optional*): The MQTT topic to publish commands to control the cover. -- **payload_open** (*Optional*): The payload that opens the cover. Default is `OPEN`. -- **payload_close** (*Optional*): The payload that closes the cover. Default is `CLOSE`. -- **payload_stop** (*Optional*): The payload that stops the cover. default is `STOP`. -- **state_topic** (*Optional*): The MQTT topic subscribed to receive cover state messages. -- **state_open** (*Optional*): The payload that represents the open state. Default is `open`. -- **state_closed** (*Optional*): The payload that represents the closed state. Default is `closed`. -- **availability_topic** (*Optional*): The MQTT topic subscribed to to receive birth and LWT messages from the MQTT cover device. If `availability_topic` is not defined, the cover availability state will always be "available". If `availability_topic` is defined, the cover availability state will be "unavailable" by default. -- **payload_available** (*Optional*): The payload that represents the online state. Default is `online`. -- **payload_not_available** (*Optional*): The payload that represents the offline state. Default is `offline`. -- **optimistic** (*Optional*): Flag that defines if switch works in optimistic mode. Default is `true` if no state topic defined, else `false`. -- **qos** (*Optional*): The maximum QoS level to be used when receiving and publishing messages. Default is `0`. -- **retain** (*Optional*): Defines if published messages should have the retain flag set. Default is `false`. -- **value_template** (*Optional*): Defines a [template](/docs/configuration/templating/#processing-incoming-data) to extract a value from the payload. -- **set_position_topic** (*Optional*): The MQTT topic to publish position commands to. -- **set_position_template** (*Optional*): Defines a [template](/topics/templating/) to define the position to be sent to the `set_position_topic` topic. Incoming position value is available for use in the template `{{position}}`. If no template is defined, the numeric position (0-100) will be written directly to the topic. -- **tilt_command_topic** (*Optional*): The MQTT topic to publish commands to control the cover tilt. -- **tilt_status_topic** (*Optional*): The MQTT topic subscribed to receive tilt status update values. -- **tilt_min** (*Optional*): The minimum tilt value. Default is `0` -- **tilt_max** (*Optional*): The maximum tilt value. Default is `100` -- **tilt_closed_value** (*Optional*): The value that will be sent on a `close_cover_tilt` command. Default is `0` -- **tilt_opened_value** (*Optional*): The value that will be sent on an `open_cover_tilt` command. Default is `100` -- **tilt_status_optimistic** (*Optional*): Flag that determines if tilt works in optimistic mode. Default is `true` if `tilt_status_topic` is not defined, else `false` -- **tilt_invert_state** (*Optional*): Flag that determines if open/close are flipped; higher values toward closed and lower values toward open. Default is `False` +{% configuration %} +name: + description: The name of the cover. + required: false + type: string + default: MQTT Cover +command_topic: + description: The MQTT topic to publish commands to control the cover. + required: false + type: string +payload_open: + description: The command payload that opens the cover. + required: false + type: string + default: OPEN +payload_close: + description: The command payload that closes the cover. + required: false + type: string + default: CLOSE +payload_stop: + description: The command payload that stops the cover. + required: false + type: string + default: STOP +state_topic: + description: The MQTT topic subscribed to receive cover state messages. + required: false + type: string +state_open: + description: The payload that represents the open state. + required: false + type: string + default: open +state_closed: + description: The payload that represents the closed state. + required: false + type: string + default: closed +availability_topic: + description: "The MQTT topic subscribed to to receive birth and LWT messages from the MQTT cover device. If `availability_topic` is not defined, the cover availability state will always be `available`. If `availability_topic` is defined, the cover availability state will be `unavailable` by default." + required: false + type: string +payload_available: + description: The payload that represents the online state. + required: false + type: string + default: online +payload_not_available: + description: The payload that represents the offline state. + required: false + type: string + default: offline +optimistic: + description: Flag that defines if switch works in optimistic mode. + required: false + type: string + default: "`true` if no state topic defined, else `false`." +qos: + description: The maximum QoS level to be used when receiving and publishing messages. + required: false + type: integer + default: 0 +retain: + description: Defines if published messages should have the retain flag set. + required: false + type: boolean + default: false +value_template: + description: "Defines a [template](/docs/configuration/templating/#processing-incoming-data) to extract a value from the payload." + required: false + type: string +set_position_topic: + description: The MQTT topic to publish position commands to. + required: false + type: string +set_position_template: + description: " Defines a [template](/topics/templating/) to define the position to be sent to the `set_position_topic` topic. Incoming position value is available for use in the template `{{position}}`. If no template is defined, the numeric position (0-100) will be written directly to the topic." + required: false + type: string +tilt_command_topic: + description: The MQTT topic to publish commands to control the cover tilt. + required: false + type: string +tilt_status_topic: + description: The MQTT topic subscribed to receive tilt status update values. + required: false + type: string +tilt_min: + description: The minimum tilt value. + required: false + type: integer + default: 0 +tilt_max: + description: The maximum tilt value + required: false + type: integer + default: 100 +tilt_closed_value: + description: The value that will be sent on an `close_cover_tilt` command. + required: false + type: integer + default: 0 +tilt_opened_value: + description: The value that will be sent on an `open_cover_tilt` command. + required: false + type: integer + default: 0 +tilt_status_optimistic: + description: Flag that determines if tilt works in optimistic mode. + required: false + type: boolean + default: "`true` if `tilt_status_topic` is not defined, else `false`" +tilt_invert_state: + description: Flag that determines if open/close are flipped; higher values toward closed and lower values toward open. + required: false + type: boolean + default: false +{% endconfiguration %} ## {% linkable_title Examples %} @@ -78,7 +170,7 @@ cover: name: "MQTT Cover" command_topic: "home-assistant/cover/set" state_topic: "home-assistant/cover/state" - availability_topic: "home-assistant/cover/availability" + availability_topic: "home-assistant/cover/availability" qos: 0 retain: true payload_open: "OPEN" diff --git a/source/_components/fan.mqtt.markdown b/source/_components/fan.mqtt.markdown index 82c5193ba3..1a0329404f 100644 --- a/source/_components/fan.mqtt.markdown +++ b/source/_components/fan.mqtt.markdown @@ -30,30 +30,117 @@ fan: command_topic: "bedroom_fan/on/set" ``` -Configuration variables: - -- **command_topic** (*Required*): The MQTT topic to publish commands to change the fan state. -- **state_topic** (*Optional*): The MQTT topic subscribed to receive state updates. -- **name** (*Optional*): The name of the fan. Default is 'MQTT Fan'. -- **state_topic** (*Optional*): The MQTT topic subscribed to receive state updates. -- **payload_on** (*Optional*): The payload that represents the running state. Default is "ON". -- **payload_off** (*Optional*): The payload that represents the stop state. Default is "OFF". -- **state_value_template** (*Optional*): Defines a [template](/docs/configuration/templating/#processing-incoming-data) to extract a value from the state. -- **qos** (*Optional*): The maximum QoS level of the state topic. Default is 0 and will also be used to publishing messages. -- **optimistic** (*Optional*): Flag that defines if lock works in optimistic mode. Default is `true` if no state topic defined, else `false`. -- **retain** (*Optional*): If the published message should have the retain flag on or not. -- **oscillation_state_topic** (*Optional*): The MQTT topic subscribed to receive oscillation state updates. -- **oscillation_command_topic** (*Optional*): The MQTT topic to publish commands to change the oscillation state. -- **payload_oscillation_on** (*Optional*): The payload that represents the oscillation on state. Default is "oscillate_on". -- **payload_oscillation_off** (*Optional*): The payload that presents the oscillation off state. Default is "oscillate_off". -- **oscillation_value_template** (*Optional*): Defines a [template](/docs/configuration/templating/#processing-incoming-data) to extract a value from the oscillation. -- **speed_state_topic** (*Optional*): The MQTT topic subscribed to receive speed state updates. -- **speed_command_topic** (*Optional*): The MQTT topic to publish commands to change speed state. -- **payload_low_speed** (*Optional*): The payload that represents the fan's low speed. -- **payload_medium_speed** (*Optional*): The payload that represents the fan's medium speed. -- **payload_high_speed** (*Optional*): The payload that represents the fan's high speed. -- **speed_value_template** (*Optional*): Defines a [template](/docs/configuration/templating/#processing-incoming-data) to extract a value from the speed payload. -- **speeds** array (*Optional*): Valid entries for the list are `off`, `low`, `medium`, and `high`. +{% configuration %} +name: + description: The name of the fan. + required: false + type: string + default: MQTT Fan +command_topic: + description: The MQTT topic to publish commands to change the fan state. + required: true + type: string +state_topic: + description: The MQTT topic subscribed to receive state updates. + required: false + type: string +payload_on: + description: The payload that represents the running state. + required: false + type: string + default: ON +payload_off: + description: The payload that represents the stop state. + required: false + type: string + default: OFF +state_value_template: + description: "Defines a [template](/docs/configuration/templating/#processing-incoming-data) to extract a value from the state." + required: false + type: string +qos: + description: The maximum QoS level of the state topic. + required: false + type: integer + default: 0 +optimistic: + description: Flag that defines if lock works in optimistic mode + required: false + type: boolean + default: "`true` if no state topic defined, else `false`." +retain: + description: If the published message should have the retain flag on or not. + required: false + type: boolean + default: true +oscillation_state_topic: + description: The MQTT topic subscribed to receive oscillation state updates. + required: false + type: string +oscillation_command_topic: + description: The MQTT topic to publish commands to change the oscillation state. + required: false + type: string +payload_oscillation_on: + description: The payload that represents the oscillation on state. + required: false + type: string + default: oscillate_on +payload_oscillation_off: + description: The payload that represents the oscillation off state. + required: false + type: string + default: oscillate_off +oscillation_value_template: + description: "Defines a [template](/docs/configuration/templating/#processing-incoming-data) to extract a value from the oscillation." + required: false + type: string +speed_state_topic: + description: The MQTT topic subscribed to receive speed state updates. + required: false + type: string +speed_command_topic: + description: The MQTT topic to publish commands to change speed state. + required: false + type: string +payload_low_speed: + description: The payload that represents the fan's low speed. + required: false + type: string + default: low +payload_medium_speed: + description: The payload that represents the fan's medium speed. + required: false + type: string + default: medium +payload_high_speed: + description: The payload that represents the fan's high speed. + required: false + type: string + default: high +speed_value_template: + description: "Defines a [template](/docs/configuration/templating/#processing-incoming-data) to extract a value from the speed payload." + required: false + type: string +speeds: + description: "List of speeds this fan is capable of running at. Valid entries are `off`, `low`, `medium`, and `high`." + required: false + type: string list +availability_topic: + description: The MQTT topic subscribed to receive availability (online/offline) updates. + required: false + type: string +payload_available: + description: The payload that represents the available state. + required: false + type: string + default: online +payload_not_available: + description: The payload that represents the unavailable state. + required: false + type: string + default: offline +{% endconfiguration %}

Make sure that your topics match exactly. `some-topic/` and `some-topic` are different topics. diff --git a/source/_components/light.mqtt.markdown b/source/_components/light.mqtt.markdown index ba3041dde3..33f76eb5cc 100644 --- a/source/_components/light.mqtt.markdown +++ b/source/_components/light.mqtt.markdown @@ -27,39 +27,153 @@ light: command_topic: "office/rgb1/light/switch" ``` -Configuration variables: - -- **command_topic** (*Required*): The MQTT topic to publish commands to change the switch state. -- **brightness_command_topic** (*Optional*): The MQTT topic to publish commands to change the light's brightness. -- **brightness_scale** (*Optional*): Defines the maximum brightness value (i.e. 100%) of the MQTT device (defaults to 255). -- **brightness_state_topic** (*Optional*): The MQTT topic subscribed to receive brightness state updates. -- **brightness_value_template** (*Optional*): Defines a [template](/docs/configuration/templating/#processing-incoming-data) to extract the brightness value. -- **color_temp_command_topic** (*Optional*): The MQTT topic to publish commands to change the light's color temperature state. The color temperature command slider has a range of 157 to 500 mireds (micro reciprocal degrees). -- **color_temp_state_topic** (*Optional*): The MQTT topic subscribed to receive color temperature state updates. -- **color_temp_value_template** (*Optional*): Defines a [template](/topics/templating/) to extract the color temperature value. -- **effect_command_topic** (*Optional*): The MQTT topic to publish commands to change the light's effect state. -- **effect_state_topic** (*Optional*): The MQTT topic subscribed to receive effect state updates. -- **effect_value_template** (*Optional*): Defines a [template](/docs/configuration/templating/#processing-incoming-data) to extract the effect value. -- **effect_list** (*Optional*): The list of effects the light supports. -- **name** (*Optional*): The name of the switch. Default is 'MQTT Switch'. -- **on_command_type** (*Optional*): Defines when on the payload_on is sent. Using `last` (the default) will send any style (brightness, color, etc) topics first and then a `payload_on` to the `command_topic`. Using `first` will send the `payload_on` and then any style topics. Using `brightness` will only send brightness commands instead of the `payload_on` to turn the light on. -- **optimistic** (*Optional*): Flag that defines if switch works in optimistic mode. Default is true if no state topic defined, else false. -- **payload_off** (*Optional*): The payload that represents disabled state. Default is "OFF". -- **payload_on** (*Optional*): The payload that represents enabled state. Default is "ON". -- **qos** (*Optional*): The maximum QoS level of the state topic. Default is 0 and will also be used to publishing messages. -- **retain** (*Optional*): If the published message should have the retain flag on or not. -- **rgb_command_template** (*Optional*): Defines a [template](/docs/configuration/templating/#processing-incoming-data) to compose message which will be sent to `rgb_command_topic`. Available variables: `red`, `green` and `blue`. -- **rgb_command_topic** (*Optional*): The MQTT topic to publish commands to change the light's RGB state. -- **rgb_state_topic** (*Optional*): The MQTT topic subscribed to receive RGB state updates. -- **rgb_value_template** (*Optional*): Defines a [template](/docs/configuration/templating/#processing-incoming-data) to extract the RGB value. -- **state_topic** (*Optional*): The MQTT topic subscribed to receive state updates. -- **state_value_template** (*Optional*): Defines a [template](/docs/configuration/templating/#processing-incoming-data) to extract the state value. The template should match the payload "on" and "off" values, so if your light uses "power on" to turn on, your `state_value_template` string should return "power on" when the switch is on. For example if the message is just "on", your `state_value_template` should be `power {{ value }}`. -- **white_value_command_topic** (*Optional*): The MQTT topic to publish commands to change the light's white value. -- **white_value_state_topic** (*Optional*): The MQTT topic subscribed to receive white value updates. -- **white_value_value_template** (*Optional*): Defines a [template](/docs/configuration/templating/#processing-incoming-data) to extract the white value. -- **xy_command_topic** (*Optional*): The MQTT topic to publish commands to change the light's XY state. -- **xy_state_topic** (*Optional*): The MQTT topic subscribed to receive XY state updates. -- **xy_value_template** (*Optional*): Defines a [template](/docs/configuration/templating/#processing-incoming-data) to extract the XY value. +{% configuration %} +name: + description: The name of the light. + required: false + type: string + default: MQTT Light +command_topic: + description: The MQTT topic to publish commands to change the switch state. + required: true + type: string +brightness_command_topic: + description: The MQTT topic to publish commands to change the light’s brightness. + required: false + type: string +brightness_scale: + description: "Defines the maximum brightness value (i.e. 100%) of the MQTT device." + required: false + type: integer + default: 255 +brightness_state_topic: + description: The MQTT topic subscribed to receive brightness state updates. + required: false + type: string +brightness_value_template: + description: "Defines a [template](/docs/configuration/templating/#processing-incoming-data) to extract the brightness value." + required: false + type: string +color_temp_command_topic: + description: The MQTT topic to publish commands to change the light’s color temperature state. The color temperature command slider has a range of 157 to 500 mireds (micro reciprocal degrees). + required: false + type: string +color_temp_state_topic: + description: The MQTT topic subscribed to receive color temperature state updates. + required: false + type: string +color_temp_value_template: + description: "Defines a [template](/topics/templating/) to extract the color temperature value." + required: false + type: string +effect_command_topic: + description: "The MQTT topic to publish commands to change the light's effect state." + required: false + type: string +effect_state_topic: + description: The MQTT topic subscribed to receive effect state updates. + required: false + type: string +effect_value_template: + description: "Defines a [template](/docs/configuration/templating/#processing-incoming-data) to extract the effect value." + required: false + type: string +effect_list: + description: The list of effects the light supports. + required: false + type: string list +on_command_type: + description: "Defines when on the payload_on is sent. Using `last` (the default) will send any style (brightness, color, etc) topics first and then a `payload_on` to the `command_topic`. Using `first` will send the `payload_on` and then any style topics. Using `brightness` will only send brightness commands instead of the `payload_on` to turn the light on." + required: false + type: string +optimistic: + description: Flag that defines if switch works in optimistic mode. + required: false + type: boolean + default: "`true` if no state topic defined, else `false`." +payload_on: + description: The payload that represents enabled state. + required: false + type: string + default: ON +payload_off: + description: The payload that represents disabled state. + required: false + type: string + default: OFF +qos: + description: The maximum QoS level of the state topic. + required: false + type: integer + default: 0 +retain: + description: If the published message should have the retain flag on or not. + required: false + type: boolean + default: false +rgb_command_template: + description: "Defines a [template](/docs/configuration/templating/#processing-incoming-data) to compose message which will be sent to `rgb_command_topic`. Available variables: `red`, `green` and `blue`." + required: false + type: string +rgb_command_topic: + description: "The MQTT topic to publish commands to change the light's RGB state." + required: false + type: string +rgb_state_topic: + description: The MQTT topic subscribed to receive RGB state updates. + required: false + type: string +rgb_value_template: + description: "Defines a [template](/docs/configuration/templating/#processing-incoming-data) to extract the RGB value." + required: false + type: string +state_topic: + description: The MQTT topic subscribed to receive state updates. + required: false + type: string +state_value_template: + description: "Defines a [template](/docs/configuration/templating/#processing-incoming-data) to extract the state value. The template should match the payload `on` and `off` values, so if your light uses `power on` to turn on, your `state_value_template` string should return `power on` when the switch is on. For example if the message is just `on`, your `state_value_template` should be `power {{ value }}`." + required: false + type: string +white_value_command_topic: + description: "The MQTT topic to publish commands to change the light's white value." + required: false + type: string +white_value_state_topic: + description: The MQTT topic subscribed to receive white value updates. + required: false + type: string +white_value_value_template: + description: "Defines a [template](/docs/configuration/templating/#processing-incoming-data) to extract the white value." + required: false + type: string +xy_command_topic: + description: "The MQTT topic to publish commands to change the light's XY state." + required: false + type: string +xy_state_topic: + description: The MQTT topic subscribed to receive XY state updates. + required: false + type: string +xy_value_template: + description: "Defines a [template](/docs/configuration/templating/#processing-incoming-data) to extract the XY value." + required: false + type: string +availability_topic: + description: The MQTT topic subscribed to receive availability (online/offline) updates. + required: false + type: string +payload_available: + description: The payload that represents the available state. + required: false + type: string + default: online +payload_not_available: + description: The payload that represents the unavailable state. + required: false + type: string + default: offline +{% endconfiguration %}

Make sure that your topics match exactly. `some-topic/` and `some-topic` are different topics. diff --git a/source/_components/light.mqtt_json.markdown b/source/_components/light.mqtt_json.markdown index 54732fe5bf..d6ba5ad07d 100644 --- a/source/_components/light.mqtt_json.markdown +++ b/source/_components/light.mqtt_json.markdown @@ -48,23 +48,94 @@ light: command_topic: "home/rgb1/set" ``` -Configuration variables: - -- **command_topic** (*Required*): The MQTT topic to publish commands to change the light's state. -- **brightness** (*Optional*): Flag that defines if the light supports brightness. Default is false. -- **color_temp** (*Optional*): Flag that defines if the light supports color temperature. Default is false. -- **effect** (*Optional*): Flag that defines if the light supports effects. Default is false. -- **effect_list** (*Optional*): The list of effects the light supports. -- **flash_time_long** (*Optional*): The duration, in seconds, of a "long" flash. Default is 10. -- **flash_time_short** (*Optional*): The duration, in seconds, of a "short" flash. Default is 2. -- **name** (*Optional*): The name of the light. Default is "MQTT JSON Light." -- **optimistic** (*Optional*): Flag that defines if the light works in optimistic mode. Default is true if no state topic defined, else false. -- **qos** (*Optional*): The maximum QoS level of the state topic. Default is 0 and will also be used to publishing messages. -- **retain** (*Optional*): If the published message should have the retain flag on or not. -- **rgb** (*Optional*): Flag that defines if the light supports RGB colors. Default is false. -- **state_topic** (*Optional*): The MQTT topic subscribed to receive state updates. -- **white_value** (*Optional*): Flag that defines if the light supports white values. Default is false. -- **xy** (*Optional*): Flag that defines if the light supports XY colors. Default is false. +{% configuration %} +name: + description: The name of the light. + required: false + type: string + default: MQTT JSON Light +command_topic: + description: The MQTT topic to publish commands to change the light’s state. + required: true + type: string +brightness: + description: Flag that defines if the light supports brightness. + required: false + type: boolean + default: false +color_temp: + description: Flag that defines if the light supports color temperature. + required: false + type: boolean + default: false +effect: + description: Flag that defines if the light supports effects. + required: false + type: boolean + default: false +effect_list: + description: The list of effects the light supports. + required: false + type: string list +flash_time_long: + description: The duration, in seconds, of a “long” flash. + required: false + type: integer + default: 10 +flash_time_short: + description: The duration, in seconds, of a “short” flash. + required: false + type: integer + default: 2 +optimistic: + description: Flag that defines if the light works in optimistic mode. + required: false + type: boolean + default: "`true` if no state topic defined, else `false`." +qos: + description: The maximum QoS level of the state topic. + required: false + type: integer + default: 0 +retain: + description: If the published message should have the retain flag on or not. + required: false + type: boolean + default: false +rgb: + description: Flag that defines if the light supports RGB colors. + required: false + type: boolean + default: false +state_topic: + description: The MQTT topic subscribed to receive state updates. + required: false + type: string +white_value: + description: Flag that defines if the light supports white values. + required: false + type: boolean + default: false +xy: + description: Flag that defines if the light supports XY colors. + required: false + type: boolean + default: false +availability_topic: + description: The MQTT topic subscribed to receive availability (online/offline) updates. + required: false + type: string +payload_available: + description: The payload that represents the available state. + required: false + type: string + default: online +payload_not_available: + description: The payload that represents the unavailable state. + required: false + type: string + default: offline +{% endconfiguration %}

Make sure that your topics match exact. `some-topic/` and `some-topic` are different topics. diff --git a/source/_components/light.mqtt_template.markdown b/source/_components/light.mqtt_template.markdown index 3eed0fa344..5a13ea9dfb 100644 --- a/source/_components/light.mqtt_template.markdown +++ b/source/_components/light.mqtt_template.markdown @@ -33,24 +33,89 @@ light: command_off_template: "off" ``` -Configuration variables: - -- **name** (*Optional*): The name of the light. Default is "MQTT Template Light." -- **effect_list** (*Optional*): List of possible effects. -- **command_topic** (*Required*): The MQTT topic to publish commands to change the light's state. -- **state_topic** (*Optional*): The MQTT topic subscribed to receive state updates. -- **command_on_template** (*Required*): The [template](/docs/configuration/templating/#processing-incoming-data) for *on* state changes. Available variables: `state`, `brightness`, `red`, `green`, `blue`, `flash`, `transition` and `effect`. -- **command_off_template** (*Required*): The [template](/docs/configuration/templating/#processing-incoming-data) for *off* state changes. Available variables: `state` and `transition`. -- **state_template** (*Optional*): [Template](/docs/configuration/templating/#processing-incoming-data) to extract state from the state payload value. -- **brightness_template** (*Optional*): [Template](/docs/configuration/templating/#processing-incoming-data) to extract brightness from the state payload value. -- **red_template** (*Optional*): [Template](/docs/configuration/templating/#processing-incoming-data) to extract red color from the state payload value. -- **green_template** (*Optional*): [Template](/docs/configuration/templating/#processing-incoming-data) to extract green color from the state payload value. -- **blue_template** (*Optional*): [Template](/docs/configuration/templating/#processing-incoming-data) to extract blue color from the state payload value. -- **color_temp_template** (*Optional*): [Template](/docs/configuration/templating/#processing-incoming-data) to extract color temperature from the state payload value. -- **effect_template** (*Optional*): [Template](/docs/configuration/templating/#processing-incoming-data) to extract effect from the state payload value. -- **white_value_template** (*Optional*): [Template](/docs/configuration/templating/#processing-incoming-data) to extract white value from the state payload value. -- **optimistic** (*Optional*): Flag that defines if the light works in optimistic mode. Default is true if no state topic or state template is defined, else false. -- **qos** (*Optional*): The maximum QoS level of the state topic. Default is 0 and will also be used to publishing messages. +{% configuration %} +name: + description: The name of the light. + required: false + type: string + default: MQTT Template Light +effect_list: + description: List of possible effects. + required: false + type: string list +command_topic: + description: The MQTT topic to publish commands to change the light’s state. + required: true + type: string +state_topic: + description: The MQTT topic subscribed to receive state updates. + required: false + type: string +command_on_template: + description: "The [template](/docs/configuration/templating/#processing-incoming-data) for *on* state changes. Available variables: `state`, `brightness`, `red`, `green`, `blue`, `flash`, `transition` and `effect`." + required: true + type: string +command_off_template: + description: "The [template](/docs/configuration/templating/#processing-incoming-data) for *off* state changes. Available variables: `state` and `transition`." + required: true + type: string +state_template: + description: "[Template](/docs/configuration/templating/#processing-incoming-data) to extract state from the state payload value." + required: false + type: string +brightness_template: + description: "[Template](/docs/configuration/templating/#processing-incoming-data) to extract brightness from the state payload value." + required: false + type: string +red_template: + description: "[Template](/docs/configuration/templating/#processing-incoming-data) to extract red color from the state payload value." + required: false + type: string +green_template: + description: "[Template](/docs/configuration/templating/#processing-incoming-data) to extract green color from the state payload value." + required: false + type: string +blue_template: + description: "[Template](/docs/configuration/templating/#processing-incoming-data) to extract blue color from the state payload value." + required: false + type: string +color_temp_template: + description: "[Template](/docs/configuration/templating/#processing-incoming-data) to extract color temperature from the state payload value." + required: false + type: string +effect_template: + description: "[Template](/docs/configuration/templating/#processing-incoming-data) to extract effect from the state payload value." + required: false + type: string +white_value_template: + description: "[Template](/docs/configuration/templating/#processing-incoming-data) to extract white value from the state payload value." + required: false + type: string +optimistic: + description: Flag that defines if the light works in optimistic mode. + required: false + type: string + default: "`true` if no state topic or state template is defined, else `false`." +qos: + description: The maximum QoS level of the state topic. + required: false + type: integer + default: 0 +availability_topic: + description: The MQTT topic subscribed to receive availability (online/offline) updates. + required: false + type: string +payload_available: + description: The payload that represents the available state. + required: false + type: string + default: online +payload_not_available: + description: The payload that represents the unavailable state. + required: false + type: string + default: offline +{% endconfiguration %}

Make sure that your topics match exact. `some-topic/` and `some-topic` are different topics. diff --git a/source/_components/lock.mqtt.markdown b/source/_components/lock.mqtt.markdown index 6f91de7d13..8ed47ccf4a 100644 --- a/source/_components/lock.mqtt.markdown +++ b/source/_components/lock.mqtt.markdown @@ -30,17 +30,64 @@ lock: command_topic: "home/frontdoor/set" ``` -Configuration variables: - -- **command_topic** (*Required*): The MQTT topic to publish commands to change the lock state. -- **name** (*Optional*): The name of the lock. Default is 'MQTT Lock'. -- **state_topic** (*Optional*): The MQTT topic subscribed to receive state updates. -- **payload_lock** (*Optional*): The payload that represents enabled/locked state. Default is "LOCK". -- **payload_unlock** (*Optional*): The payload that represents disabled/unlocked state. Default is "UNLOCK". -- **optimistic** (*Optional*): Flag that defines if lock works in optimistic mode. Default is `true` if no `state_topic` defined, else `false`. -- **qos** (*Optional*): The maximum QoS level of the state topic. Default is 0 and will also be used to publishing messages. -- **retain** (*Optional*): If the published message should have the retain flag on or not. -- **value_template** (*Optional*): Defines a [template](/docs/configuration/templating/#processing-incoming-data) to extract a value from the payload. +{% configuration %} +name: + description: The name of the lock. + required: false + type: string + default: MQTT Lock +command_topic: + description: The MQTT topic to publish commands to change the lock state. + required: true + type: string +state_topic: + description: The MQTT topic subscribed to receive state updates. + required: false + type: string +payload_lock: + description: The payload that represents enabled/locked state. + required: false + type: string + default: LOCK +payload_unlock: + description: The payload that represents disabled/unlocked state. + required: false + type: string + default: UNLOCK +optimistic: + description: Flag that defines if lock works in optimistic mode. + required: false + type: string + default: "`true` if no `state_topic` defined, else `false`." +qos: + description: The maximum QoS level of the state topic. + required: false + type: integer + default: 0 +retain: + description: If the published message should have the retain flag on or not. + required: false + type: boolean + default: false +value_template: + description: "Defines a [template](/docs/configuration/templating/#processing-incoming-data) to extract a value from the payload." + required: false + type: string +availability_topic: + description: The MQTT topic subscribed to receive availability (online/offline) updates. + required: false + type: string +payload_available: + description: The payload that represents the available state. + required: false + type: string + default: online +payload_not_available: + description: The payload that represents the unavailable state. + required: false + type: string + default: offline +{% endconfiguration %}

Make sure that your topics match exactly. `some-topic/` and `some-topic` are different topics. @@ -58,7 +105,7 @@ The example below shows a full configuration for a MQTT lock. # Example configuration.yml entry lock: - platform: mqtt - name: Frontdoor + name: Frontdoor state_topic: "home-assistant/frontdoor/" command_topic: "home-assistant/frontdoor/set" payload_lock: "LOCK" @@ -69,7 +116,7 @@ lock: value_template: '{% raw %}{{ value.x }}{% endraw %}' ``` -Keep an eye on retaining messages to keep the state as you don't want to unlock your door by accident when you restart something. +Keep an eye on retaining messages to keep the state as you don't want to unlock your door by accident when you restart something. For a check you can use the command line tools `mosquitto_pub` shipped with `mosquitto` to send MQTT messages. This allows you to operate your lock manually: diff --git a/source/_components/sensor.mqtt.markdown b/source/_components/sensor.mqtt.markdown index 0fb3ab1175..9a7e6c00de 100644 --- a/source/_components/sensor.mqtt.markdown +++ b/source/_components/sensor.mqtt.markdown @@ -58,8 +58,21 @@ force_update: reqired: false type: boolean default: False +availability_topic: + description: The MQTT topic subscribed to receive availability (online/offline) updates. + required: false + type: string +payload_available: + description: The payload that represents the available state. + required: false + type: string + default: online +payload_not_available: + description: The payload that represents the unavailable state. + required: false + type: string + default: offline {% endconfiguration %} - ## {% linkable_title Examples %} In this section you find some real life examples of how to use this sensor. diff --git a/source/_components/switch.mqtt.markdown b/source/_components/switch.mqtt.markdown index 4ad0a6c1f8..3804130cc6 100644 --- a/source/_components/switch.mqtt.markdown +++ b/source/_components/switch.mqtt.markdown @@ -30,20 +30,64 @@ switch: command_topic: "home/bedroom/switch1/set" ``` -Configuration variables: - -- **name** (*Optional*): The name of the switch. Default is 'MQTT Switch'. -- **state_topic** (*Optional*): The MQTT topic subscribed to receive state updates. -- **command_topic** (*Required*): The MQTT topic to publish commands to change the switch state. -- **availability_topic** (*Optional*): The MQTT topic subscribed to receive availability (online/offline) updates. -- **payload_on** (*Optional*): The payload that represents enabled state. Default is "ON". -- **payload_off** (*Optional*): The payload that represents disabled state. Default is "OFF". -- **payload_available** (*Optional*): The payload that represents the available state, e.g. 'online'. Default is "ON". -- **payload_not_available** (*Optional*): The payload that represents the unavailable state, e.g. 'offline'. Default is "OFF". -- **optimistic** (*Optional*): Flag that defines if switch works in optimistic mode. Default is `true` if no `state_topic` defined, else `false`. -- **qos** (*Optional*): The maximum QoS level of the state topic. Default is 0 and will also be used to publishing messages. -- **retain** (*Optional*): If the published message should have the retain flag on or not. -- **value_template** (*Optional*): Defines a [template](/docs/configuration/templating/#processing-incoming-data) to extract a value from the payload. +{% configuration %} +name: + description: The name to use when displaying this switch. + required: false + type: string + default: MQTT Switch +state_topic: + description: The MQTT topic subscribed to receive state updates. + required: false + type: string +command_topic: + description: The MQTT topic to publish commands to change the switch state. + required: false + type: string +availability_topic: + description: The MQTT topic subscribed to receive availability (online/offline) updates. + required: false + type: string +payload_on: + description: The payload that represents enabled state. + required: false + type: string + default: ON +payload_off: + description: The payload that represents disabled state. + required: false + type: string + default: OFF +payload_available: + description: The payload that represents the available state. + required: false + type: string + default: online +payload_not_available: + description: The payload that represents the unavailable state. + required: false + type: string + default: offline +optimistic: + description: Flag that defines if switch works in optimistic mode. + required: false + type: boolean + default: "`true` if no `state_topic` defined, else `false`." +qos: + description: The maximum QoS level of the state topic. Default is 0 and will also be used to publishing messages. + required: false + type: integer + default: 0 +retain: + description: If the published message should have the retain flag on or not. + required: false + type: boolean + default: false +value_template: + description: "Defines a [template](/docs/configuration/templating/#processing-incoming-data) to extract a value from the payload." + required: false + type: string +{% endconfiguration %}

Make sure that your topic matches exactly. `some-topic/` and `some-topic` are different topics. diff --git a/source/_components/vacuum.mqtt.markdown b/source/_components/vacuum.mqtt.markdown index df5a01a8cf..65ed9679ce 100644 --- a/source/_components/vacuum.mqtt.markdown +++ b/source/_components/vacuum.mqtt.markdown @@ -53,36 +53,133 @@ vacuum: send_command_topic: 'vacuum/send_command' ``` -Basic Configuration variables: - -- **name** (*Optional*): The name of the vacuum. Defaults to `MQTT Vacuum`. -- **supported_features** (*Optional*): List of features that the vacuum supports (possible values are `turn_on`, `turn_off`, `pause`, `stop`, `return_home`, `battery`, `status`, `locate`, `clean_spot`, `fan_speed`, `send_command`). Defaults to `turn_on`, `turn_off`, `stop`, `return_home`, `status`, `battery`, `clean_spot`. -- **command_topic** (*Optional*): The MQTT topic to publish commands to control the vacuum. - -Advanced Configuration variables: - -- **qos** (*Optional*): The maximum QoS level of the state topic. Defaults to `0`. Will also be used when publishing messages. -- **retain** (*Optional*): If the published message should have the retain flag on or not. Defaults to `false`. -- **payload_turn_on** (*Optional*): The payload to send to the `command_topic` to begin the cleaning cycle. Defaults to `turn_on`. -- **payload_turn_off** (*Optional*): The payload to send to the `command_topic` to turn the vacuum off. Defaults to `turn_off`. -- **payload_return_to_base** (*Optional*): The payload to send to the `command_topic` to tell the vacuum to return to base. Defaults to `return_to_base`. -- **payload_stop** (*Optional*): The payload to send to the `command_topic` to stop the vacuum. Defaults to `stop`. -- **payload_clean_spot** (*Optional*): The payload to send to the `command_topic` to begin a spot cleaning cycle. Defaults to `clean_spot`. -- **payload_locate** (*Optional*): The payload to send to the `command_topic` to locate the vacuum (typically plays a song). Defaults to `locate`. -- **payload_start_pause** (*Optional*): The payload to send to the `command_topic` to start or pause the vacuum. Defaults to `start_pause`. -- **battery_level_topic** (*Optional*): The MQTT topic subscribed to receive battery level values from the vacuum. -- **battery_level_template** (*Optional*): Defines a [template](/topics/templating/) to define the battery level of the vacuum. -- **charging_topic** (*Optional*): The MQTT topic subscribed to receive charging state values from the vacuum. -- **charging_template** (*Optional*): Defines a [template](/topics/templating/) to define the charging state of the vacuum. -- **cleaning_topic** (*Optional*): The MQTT topic subscribed to receive cleaning state values from the vacuum. -- **cleaning_template** (*Optional*): Defines a [template](/topics/templating/) to define the cleaning state of the vacuum. -- **docked_topic** (*Optional*): The MQTT topic subscribed to receive docked state values from the vacuum. -- **docked_template** (*Optional*): Defines a [template](/topics/templating/) to define the docked state of the vacuum. -- **fan_speed_topic** (*Optional*): The MQTT topic subscribed to receive fan speed values from the vacuum. -- **fan_speed_template** (*Optional*): Defines a [template](/topics/templating/) to define the fan speed of the vacuum. -- **set_fan_speed_topic** (*Optional*): The MQTT topic to publish commands to control the vacuum's fan speed. -- **fan_speed_list** (*Optional*): List of possible fan speeds for the vacuum. -- **send_command_topic** (*Optional*): The MQTT topic to publish custom commands to the vacuum. +{% configuration %} +name: + description: The name of the vacuum. + required: false + type: string + default: MQTT Vacuum +supported_features: + description: "List of features that the vacuum supports (possible values are `turn_on`, `turn_off`, `pause`, `stop`, `return_home`, `battery`, `status`, `locate`, `clean_spot`, `fan_speed`, `send_command`)." + required: false + type: string list + default: "`turn_on`, `turn_off`, `stop`, `return_home`, `status`, `battery`, `clean_spot`" +command_topic: + description: The MQTT topic to publish commands to control the vacuum. + required: false + type: string +qos: + description: The maximum QoS level of the state topic. + required: false + type: integer + default: 0 +retain: + description: If the published message should have the retain flag on or not. + required: false + type: boolean + default: false +payload_turn_on: + description: "The payload to send to the `command_topic` to begin the cleaning cycle." + required: false + type: string + default: turn_on +payload_turn_off: + description: "The payload to send to the `command_topic` to turn the vacuum off." + required: false + type: string + default: turn_off +payload_return_to_base: + description: The payload to send to the `command_topic` to tell the vacuum to return to base. + required: false + type: string + default: return_to_base +payload_stop: + description: The payload to send to the `command_topic` to stop the vacuum. + required: false + type: string + default: stop +payload_clean_spot: + description: The payload to send to the `command_topic` to begin a spot cleaning cycle. + required: false + type: string + default: clean_spot +payload_locate: + description: The payload to send to the `command_topic` to locate the vacuum (typically plays a song). + required: false + type: string + default: locate +payload_start_pause: + description: The payload to send to the `command_topic` to start or pause the vacuum. + required: false + type: string + default: start_pause +battery_level_topic: + description: The MQTT topic subscribed to receive battery level values from the vacuum. + required: false + type: string +battery_level_template: + description: "Defines a [template](/topics/templating/) to define the battery level of the vacuum." + required: false + type: string +charging_topic: + description: The MQTT topic subscribed to receive charging state values from the vacuum. + required: false + type: string +charging_template: + description: "Defines a [template](/topics/templating/) to define the charging state of the vacuum." + required: false + type: string +cleaning_topic: + description: The MQTT topic subscribed to receive cleaning state values from the vacuum. + required: false + type: string +cleaning_template: + description: "Defines a [template](/topics/templating/) to define the cleaning state of the vacuum." + required: false + type: string +docked_topic: + description: The MQTT topic subscribed to receive docked state values from the vacuum. + required: false + type: string +docked_template: + description: "Defines a [template](/topics/templating/) to define the docked state of the vacuum." + required: false + type: string +fan_speed_topic: + description: The MQTT topic subscribed to receive fan speed values from the vacuum. + required: false + type: string +fan_speed_template: + description: "Defines a [template](/topics/templating/) to define the fan speed of the vacuum." + required: false + type: string +set_fan_speed_topic: + description: The MQTT topic to publish commands to control the vacuum's fan speed. + required: false + type: string +fan_speed_list: + description: List of possible fan speeds for the vacuum. + required: false + type: string list +send_command_topic: + description: The MQTT topic to publish custom commands to the vacuum. + required: false + type: string +availability_topic: + description: The MQTT topic subscribed to receive availability (online/offline) updates. + required: false + type: string +payload_available: + description: The payload that represents the available state. + required: false + type: string + default: online +payload_not_available: + description: The payload that represents the unavailable state. + required: false + type: string + default: offline +{% endconfiguration %} ### {% linkable_title Default MQTT Protocol %} From 6bad36ef05c9fbd15c4e1ff0400117de727749d5 Mon Sep 17 00:00:00 2001 From: Anders Melchiorsen Date: Tue, 2 Jan 2018 20:51:24 +0100 Subject: [PATCH 037/993] TP-Link switch LEDs are unchanged by default (#4327) --- source/_components/switch.tplink.markdown | 1 - 1 file changed, 1 deletion(-) diff --git a/source/_components/switch.tplink.markdown b/source/_components/switch.tplink.markdown index 4feabe6734..5839ff2cef 100644 --- a/source/_components/switch.tplink.markdown +++ b/source/_components/switch.tplink.markdown @@ -46,6 +46,5 @@ enable_leds: description: If the LEDs on the switch (WiFi and power) should be lit. required: false type: boolean - default: true {% endconfiguration %} From f12f5f96ea1f1ae868d1dff20145419a049f711a Mon Sep 17 00:00:00 2001 From: Dave Finlay Date: Wed, 3 Jan 2018 12:02:39 -0800 Subject: [PATCH 038/993] Yamaha Receiver Documentation update for `zone_names`. Added information on missing configuration option `ignore_zones`. (#4320) --- source/_components/media_player.yamaha.markdown | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/source/_components/media_player.yamaha.markdown b/source/_components/media_player.yamaha.markdown index 8ab1d51114..c958aa1466 100644 --- a/source/_components/media_player.yamaha.markdown +++ b/source/_components/media_player.yamaha.markdown @@ -36,7 +36,9 @@ Configuration variables: default name (often model number) that is returned by the device. - **host** (*Optional*): IP address or hostname of the device - **source_ignore** (*Optional*): List of sources to hide in the front-end -- **source_names** (*Optional*): Mapping of internal AVR source names to custom ones, allowing to rename e.g. `HDMI1` to `ChromeCast` +- **source_names** (*Optional*): Mapping of internal AVR source names to custom ones, allowing one to rename e.g. `HDMI1` to `ChromeCast` +- **zone_ignore** (*Optional*): List of zones to hide in the front-end +- **zone_names** (*Optional*): Mapping of zone names to custom ones, allowing one to rename e.g. `Main_Zone` to `Family Room` ### {% linkable_title Discovery notes %} @@ -76,6 +78,10 @@ media_player: source_names: HDMI1: "ChromeCast" AV4: "Vinyl" + zone_ignore: + - "Zone_2" + zone_names: + Main_Zone: "Family Room" ``` ### {% linkable_title Example `play_media` script %} From 0c03654efa6e9da9c5dc84800bdf82b547a81d0f Mon Sep 17 00:00:00 2001 From: Andrey Date: Thu, 4 Jan 2018 00:11:09 +0200 Subject: [PATCH 039/993] Climate: Add turn_on/turn_off services (#4306) * Add turn_on/turn_off services * Reword based on feedback --- source/_components/climate.markdown | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/source/_components/climate.markdown b/source/_components/climate.markdown index ce47cc8a3c..53cfc08013 100644 --- a/source/_components/climate.markdown +++ b/source/_components/climate.markdown @@ -23,7 +23,7 @@ climate: ## {% linkable_title Services %} ### {% linkable_title Climate control services %} -Available services: `climate.set_aux_heat`, `climate.set_away_mode`, `climate.set_temperature`, `climate.set_humidity`, `climate.set_fan_mode`, `climate.set_operation_mode`, `climate.set_swing_mode`, `climate.set_hold_mode` +Available services: `climate.set_aux_heat`, `climate.set_away_mode`, `climate.set_temperature`, `climate.set_humidity`, `climate.set_fan_mode`, `climate.set_operation_mode`, `climate.set_swing_mode`, `climate.set_hold_mode`, `climate.turn_on`, `climate.turn_off`

Not all climate services may be available for your platform. Be sure to check the available services Home Assistant has enabled by checking service developer tool icon **Services**. @@ -222,6 +222,22 @@ automation: entity_id: climate.kitchen swing_mode: 1 ``` +### {% linkable_title Service `climate.turn_on` %} + +Turn climate device on + +| Service data attribute | Optional | Description | +| ---------------------- | -------- | ----------- | +| `entity_id` | yes | String or list of strings that point at `entity_id`'s of climate devices to control. Targets all when omitted. + +### {% linkable_title Service `climate.turn_off` %} + +Turn climate device off + +| Service data attribute | Optional | Description | +| ---------------------- | -------- | ----------- | +| `entity_id` | yes | String or list of strings that point at `entity_id`'s of climate devices to control. Targets all when omitted. + #### {% linkable_title Customization %} The step for the setpoint can be adjusted (default to 0,5 increments) by adding the following line into configuration From 864e67903dc920efefd19a0f080513a0e1983b46 Mon Sep 17 00:00:00 2001 From: Frantz Date: Thu, 4 Jan 2018 13:57:11 +0200 Subject: [PATCH 040/993] Added new daikin platform (climate + sensors) (#4127) * Create climate.daikin.markdown * Update climate.daikin.markdown * Update climate.daikin.markdown * Added the entire Daikin platform and also Daikin sensors docs * Update climate.daikin.markdown * Update daikin.markdown * Update sensor.daikin.markdown --- source/_components/climate.daikin.markdown | 46 ++++++++++++++++ source/_components/daikin.markdown | 63 ++++++++++++++++++++++ source/_components/sensor.daikin.markdown | 61 +++++++++++++++++++++ 3 files changed, 170 insertions(+) create mode 100644 source/_components/climate.daikin.markdown create mode 100644 source/_components/daikin.markdown create mode 100644 source/_components/sensor.daikin.markdown diff --git a/source/_components/climate.daikin.markdown b/source/_components/climate.daikin.markdown new file mode 100644 index 0000000000..5b4c2182a9 --- /dev/null +++ b/source/_components/climate.daikin.markdown @@ -0,0 +1,46 @@ +--- +layout: page +title: "Daikin AC" +description: "Instructions on how to integrate Daikin AC(s) with Home Assistant." +date: 2017-12-03 05:00 +sidebar: false +comments: false +sharing: true +footer: true +logo: N/A +ha_category: Climate +ha_release: 0.59 +ha_iot_class: "Local Polling" +--- + +### Description ### + +The climate component integrates Daikin air conditioning systems into Home Assistant, enabling control of setting the following parameters: +- **mode** (cool, heat, dry, fan only or auto) +- **fan speed** +- **target temperature** +- **swing mode** (on supported models) + +Current temperature is displayed. + +

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

+ +### Configuration ### + +Manual configuration and customization is possible by using the sample configuration from below: + +```yaml +# Example configuration.yaml entry +climate: + - platform: daikin + host: 10.0.0.1 + name: optional name +``` + +Configuration variables: + +- **host** (*Required*): IP or hostname of the device +- **name** (*Optional*): If the device has a name previously set by the user than that name will be used + diff --git a/source/_components/daikin.markdown b/source/_components/daikin.markdown new file mode 100644 index 0000000000..548c05ec31 --- /dev/null +++ b/source/_components/daikin.markdown @@ -0,0 +1,63 @@ +--- +layout: page +title: "Daikin AC" +description: "Instructions on how to integrate Hive devices with Home Assistant." +date: 2017-12-10 21:00 +sidebar: false +comments: false +sharing: true +footer: true +logo: N/A +ha_category: Climate +ha_release: 0.59 +ha_iot_class: "Local Polling" +--- + +### Description ### + +The component integrates Daikin air conditioning systems into Home Assistant. + +To automatically add all your Daikin devices (ACs and associated sensors) into your Home Assistant installation, add the following to your 'configuration.yaml' file: + +

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

+ +```yaml +# Example configuration.yaml entry +daikin: + hosts: + - 192.168.4.161 + + monitored_conditions: + - inside_temperature + - outside_temperature + +``` + +{% configuration %} +hosts: + description: List of IP addresses or hostnames. + required: true + type: array +monitored_conditions: + description: List of items you want to monitor for each device. + required: false + detault: All conditions + type: list + keys: + inside_temperature: + description: The current temperature measured inside the house. + outside_temperature: + description: The current temperature measured outside the house. +{% endconfiguration %} + +

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

+ + +The Daikin Home Assistant platform currently supports the following Hive devices: + +- [Climate](/components/climate.daikin) +- [Sensor](/components/sensor.daikin) diff --git a/source/_components/sensor.daikin.markdown b/source/_components/sensor.daikin.markdown new file mode 100644 index 0000000000..dfb6978640 --- /dev/null +++ b/source/_components/sensor.daikin.markdown @@ -0,0 +1,61 @@ +--- +layout: page +title: "Daikin AC" +description: "Instructions on how to integrate Daikin AC(s) with Home Assistant." +date: 2017-12-03 05:00 +sidebar: false +comments: false +sharing: true +footer: true +logo: N/A +ha_category: Climate +ha_release: 0.59 +ha_iot_class: "Local Polling" +--- + +### Description ### + +The sensor component integrates Daikin air conditioning systems into Home Assistant, enabling displaying the following parameters: +- **inside temperature** +- **outside temperature** + +

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

+ +### Configuration ### + +Manual configuration and customization is possible by using the sample configuration from below: + +```yaml +# Example configuration.yaml entry +sensor: + - platform: daikin + host: 10.0.0.1 + name: optional name + monitored_conditions: + - inside_temperature + - outside_temperature + +``` + +{% configuration %} +host: + description: IP or hostname of the device. + required: true + type: string +monitored_conditions: + description: List of items you want to monitor for each device. + required: false + detault: All conditions + type: list + keys: + inside_temperature: + description: The current temperature measured inside the house. + outside_temperature: + description: The current temperature measured outside the house. +{% endconfiguration %} + +

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

From 3867353a4fb1b20361a5a52bb0096aaa18041013 Mon Sep 17 00:00:00 2001 From: Kevin Siml Date: Fri, 5 Jan 2018 17:31:45 +0100 Subject: [PATCH 041/993] Update Pushsafer documentation (#4345) * Update notify.pushsafer.markdown * Update notify.pushsafer.markdown * Update notify.pushsafer.markdown * Update notify.pushsafer.markdown * Update notify.pushsafer.markdown * Change format --- source/_components/notify.pushsafer.markdown | 71 +++++++++++++++++++- 1 file changed, 69 insertions(+), 2 deletions(-) diff --git a/source/_components/notify.pushsafer.markdown b/source/_components/notify.pushsafer.markdown index 4b003d97d8..a62e213e74 100644 --- a/source/_components/notify.pushsafer.markdown +++ b/source/_components/notify.pushsafer.markdown @@ -2,7 +2,7 @@ layout: page title: "Pushsafer" description: "Instructions how to add Pushsafer notifications to Home Assistant." -date: 2017-02-17 20:46 +date: 2018-01-05 11:15 sidebar: true comments: false sharing: true @@ -27,11 +27,78 @@ notify: private_key: ABCDEFGHJKLMNOPQRSTUVXYZ ``` -Configuration variables: +**Configuration variables:** - **name** (*Optional*): Setting the optional parameter `name` allows multiple notifiers to be created. The default value is `notify`. The notifier will bind to the service `notify.NOTIFIER_NAME`. - **private_key** (*Required*): Your private or alias key. Private key = send the notification to all devices with standard params, alias key send the notification to the devices stored in the alias with predefined params. +### {% linkable_title Examples %} + +Message to two devices with formated text. + +```json +{ + "title": "Test to 2 devices", + "message": "Attention [b]bold[/b] text[br][url=https://www.pushsafer.com]Link to Pushsafer[/url]", + "target": ["1111", "2222"], + "data": { + "icon": "2", + "iconcolor": "#FF0000", + "sound": "2", + "vibration": "1", + "url": "https://home-assistant.io/", + "urltitle": "Open Home Assistant", + "time2live": "0" + } +} +``` + +Message to one device with formated text and image from an external URL. + +```json +{ + "title": "Test to 1 device with image from an url", + "message": "Attention [i]italic[/i] Text[br][url=https://home-assistant.io/]Testlink[/url]", + "target": ["1111"], + "data": { + "icon": "14", + "iconcolor": "#FFFF00", + "sound": "22", + "vibration": "3", + "url": "https://home-assistant.io/", + "urltitle": "Open Home Assistant", + "time2live": "60", + "picture1": { + "url":"https://home-assistant.io/images/components/alexa/alexa-512x512.png" + } + } +} +``` + +Message to two devices and one device group with formated text and local image. + +```json +{ + "title": "Test to 3 devices with local image", + "message": "Attention [i]italic[/i] Text[br][url=https://home-assistant.io/]Testlink[/url]", + "target": ["1111","2222","gs3333"], + "data": { + "icon": "20", + "iconcolor": "#FF00FF", + "sound": "33", + "vibration": "0", + "url": "https://home-assistant.io/", + "urltitle": "Open Home Assistant", + "time2live": "10", + "picture1": { + "path":"C:\\Users\\Kevin\\AppData\\Roaming\\.homeassistant\\image-760-testimage.jpg" + } + } +} +``` + +To customize your push-notification you can take a look at the [Pushsafer API description](https://www.pushsafer.com/en/pushapi). + When setting up the application you can use this [icon](https://home-assistant.io/images/favicon-192x192.png). To use notifications, please see the [getting started with automation page](/getting-started/automation/). From 2ff654ef2bb855bb008f61f137b5983265b34235 Mon Sep 17 00:00:00 2001 From: tadly Date: Sat, 6 Jan 2018 00:39:18 +0100 Subject: [PATCH 042/993] reference python-miio instead of python-mirobo (#4346) --- source/_components/vacuum.xiaomi_miio.markdown | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/_components/vacuum.xiaomi_miio.markdown b/source/_components/vacuum.xiaomi_miio.markdown index e14e150657..4abc27588c 100644 --- a/source/_components/vacuum.xiaomi_miio.markdown +++ b/source/_components/vacuum.xiaomi_miio.markdown @@ -155,7 +155,7 @@ To fetch the token follow these instructions depending on your mobile phone plat Follow the pairing process using your phone and Mi-Home app. You will be able to retrieve the token from a SQLite file inside your phone. -Before you begin you need to install `libffi-dev` and `libssl-dev` by running the command below. This is needed for `python-mirobo` to be installed correctly. +Before you begin you need to install `libffi-dev` and `libssl-dev` by running the command below. This is needed for `python-miio` to be installed correctly. ```bash $ sudo apt-get install libffi-dev libssl-dev @@ -185,7 +185,7 @@ To fetch the token follow these instructions depending on your mobile phone plat Follow the pairing process using your phone and Mi-Home app. You will be able to retrieve the token from a SQLite file inside your phone. -Before you begin you need to install `libffi-dev` and `libssl-dev` by running the command below. This is needed for `python-mirobo` to be installed correctly. +Before you begin you need to install `libffi-dev` and `libssl-dev` by running the command below. This is needed for `python-miio` to be installed correctly. ```bash $ sudo apt-get install libffi-dev libssl-dev From f4be3e95e4723e75dc3e3706d313316fcb073ce7 Mon Sep 17 00:00:00 2001 From: tbergo Date: Sat, 6 Jan 2018 11:15:41 +0100 Subject: [PATCH 043/993] Add Roth Touchline documentation (#4336) * Add Roth Touchline documentation Add Roth Touchline documentation Pull request in home-assistant (if applicable): home-assistant/home-assistant#10547 * Minor changes --- source/_components/climate.touchline.markdown | 32 ++++++++++++++++++ source/images/supported_brands/roth.png | Bin 0 -> 2479 bytes 2 files changed, 32 insertions(+) create mode 100644 source/_components/climate.touchline.markdown create mode 100644 source/images/supported_brands/roth.png diff --git a/source/_components/climate.touchline.markdown b/source/_components/climate.touchline.markdown new file mode 100644 index 0000000000..ebc48a9df8 --- /dev/null +++ b/source/_components/climate.touchline.markdown @@ -0,0 +1,32 @@ +--- +layout: page +title: "Roth Touchline" +description: "Instructions how to integrate Roth Touchline within Home Assistant." +date: 2018-01-03 12:35 +sidebar: true +comments: false +sharing: true +footer: true +logo: roth.png +ha_category: Climate +ha_release: 0.61 +ha_iot_class: "Local Polling" +--- + +The `touchline` climate platform let you control [ROTH Touchline](http://www.roth-nordic.dk/dk/roth-touchline-tradloes-gulvvarmeregulering-1475.htm) floor heating thermostats from Roth. + + +To set it up, add the following information to your `configuration.yaml` file: + +```yaml +climate: + - platform: touchline + host: YOUR_IPADDRESS +``` + +{% configuration %} +host: + description: The IP address of your controller, e.g., http://192.168.1.1. + required: false + type: string +{% endconfiguration %} diff --git a/source/images/supported_brands/roth.png b/source/images/supported_brands/roth.png new file mode 100644 index 0000000000000000000000000000000000000000..7fadc544d069d2b98b8b7bd63ea338b84b82c5e9 GIT binary patch literal 2479 zcmV;g2~hTlP)KLZ*U+qVlCO z1pvGRfFglV&Idqp0U#$^Ayoh%zXAYT78B(MfKmX6ds6?vDSu#Dd_p1sxdZ^%smpv6 z0N5$Z+yMY=g)m0}0N^K)?vRO6(-gRspEd5t0@sEESYlILoWgV4K%?BY`_V;AQ+-yBcy>0@?alSKrJ*uD_nqU za2xKyG`xWK2!=2a4q}SfAufn75`wHpl96;oiR2?iNEK3#G$S3zWuzY&MkbJ_$UO1^ zC8O%7K5BvTP!BW!jX)DoAu2_8q6KILT8o}U+tF{)0dy3dLSLYZ7zNYBOfW9C8Vkna zFaajRKEq0}!&o!cja|p?VAI%Z0!mOP7!!B|Z$boN3qeZACsYuQ5zY~=5Pl@g5Z)3g zL|vjS(Tf;C;u`Nj^=!LcULaO;MqkQamUzlnhD%rJmAF8KTTlNmQKbPK~8Xs72Hh)L!a1 z^&O2(*tv&-3+*t41(%|K0s zW`pLC7NW(|+M-pi)uZ)N+gLkFd$)F{_7jc{XB{Vx)5@9B(bie3vrDI4=OOdRBUy^{Vu4>J#)m^yT`e^rsCB4B`yR4EhZ*Lr=qO!*hnujjW9XMn{b%a2-4j z{{kO0W*UbY7aQL&p_;5QDKzObrI-er?l&DUqnm}9m75KjYnsQKA2xqrVQP_TaoXaQ zrL$$O<#$#Tt1zo7t8r^HYq52Q^`cFH%>kRS6(%dhE4pkE+Ys9t+bKJqU9Mffy_P-S zzRiA#8^*2U&hb2W#k_F`TZcS{TaLJ+%<<|^6qOw{8=VyWLyT`sSFBBJ zeH=TkC~j%Ja{XMqApU+rbizQQf8ym0E*sjCY?Hp;XtMFhCf!Y6Zf0+;*uva$Aeo+A zlA@AQ%%}591q?yCkR`0z%Gp|*il;WFS*M*9If*W8^V!yy9+5sKP8L7QkY{|z+$Uj4 z>ZI1v&h0+iZ^@Emv+^7TSy7#3k=3OPQjTSdvKMm>>@eQZ`RSTZCw9tm$+>lTEAwvb zO5XMUvxCx|*?rr%l z`-;z1`qj~E4c8^#ukNGvjrKR)$QlT^sd@9sKfk%P|A!5??FZ4pk)h_{{2ycQ*p6T$ z_eRf+72g%y^SaNu|9bq^MDygn2ZD#bkMKuJk0+-tPuI`nKS}w?|Ec9O+OuC~hkx## zJMw(bFX=C$UwXVUn^&EG`})zZH{WzGG`_8Px9h$5UmJc~yXgMG=6Ag%)upA6z1)-o z5c&ImcePz5z#$w!ed9;Zq#r=zF+lI_e*=`;j^&OFoksuw03c&XQcVB=hYA1yj12$* z1-AeIfam}KQUw436trpZx~=PLdaZ8Svfl{ckCMZ_@^FWNw#AT4|H!M}GDk__DnBL(RFksOc_CAorz_ zUs#HDu8d7V0k(vhnGb*o@YBQbuK}>=3otVUY?^BX*kKMlS90L7GXDthOn@oyQMn(R zxhl2|Y0Aq)h2`vYeWI|0O%4?fIR`aLKI++ zfNghDcB|8+0R04PgNQ*)1?VT>sfcxjDq5~$o08P@t^#y~=)+Eo0Qd4_*~QpL6rhKI zm{GWBcuq>WUG|H8i_Ud6!2OB+>AwLy2Js#E Date: Sun, 7 Jan 2018 09:52:43 +1300 Subject: [PATCH 044/993] Add documentation for iGlo component (#4222) * Add documentation for iGlo component * Bump to 0.61 and update mistake * Minor changes and minimize the config sample --- source/_components/light.iglo.markdown | 42 ++++++++++++++++++++++++ source/images/supported_brands/iglo.png | Bin 0 -> 22440 bytes 2 files changed, 42 insertions(+) create mode 100644 source/_components/light.iglo.markdown create mode 100644 source/images/supported_brands/iglo.png diff --git a/source/_components/light.iglo.markdown b/source/_components/light.iglo.markdown new file mode 100644 index 0000000000..5bc12ba1d6 --- /dev/null +++ b/source/_components/light.iglo.markdown @@ -0,0 +1,42 @@ +--- +layout: page +title: "iGlo" +description: "Instructions on how to integrate iGlo lights into Home Assistant." +date: 2017-12-17 08:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: iglo.png +ha_category: Light +ha_iot_class: "Local Polling" +ha_release: 0.61 +--- + +The `iglo` platform allows you to integrate your [iGlo Lights](https://www.youtube.com/watch?v=oHTS9ji_v-s) into Home Assistant. + +To use your iGlo light in your installation, add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +light: + - platform: iglo + host: 192.168.1.10 +``` + +{% configuration %} +host: + required: true + description: The IP address for connecting to the light. + type: string +name: + required: false + description: The name for this light. + default: iGlo Light + type: string +port: + required: false + description: The port used to connect to the light. + default: 8080 + type: integer +{% endconfiguration %} diff --git a/source/images/supported_brands/iglo.png b/source/images/supported_brands/iglo.png new file mode 100644 index 0000000000000000000000000000000000000000..69b51da1d346c3d0e94c4bf925bd4efec1b052b3 GIT binary patch literal 22440 zcmd3Og+o(s*ft^!!bF5oG6W=~rKLNh9o-?|=tfFMHLn9DbE5^HpWRFekb$bgt5fd?EJxbpv{FDhBrug?S>uhUE~#--rn=)1)Q?7{6zTOolZf!5`i z*pvF?SL8i~aotEmPktKBo^F(e+;>XKQ*u`OLkBB+secQ1+j4`>FqD$Gn20|Mqy?oRu ze1QF4?Y;KFahpb7d$q>A0rNxQYonbewr70IzZmz1Sd8xL+E#4;c`6!V+HyY{_tQ8Q zCwQ&>c{BnWfiPcIlC~r0(d@i159kfqBecejl|M9#T0X(~DF5%7*&}O`SU%cvLYNW? z8k*>_*Qb9CAt3KTlPa5b>aqX+*DAR7=+ky^CwCC;(540AeJ57t%Bmh}GtntH@O}rG zWxia+$}N`vDT76b)Cc_geKyj0zW2*k*AkG|U#yA!1GWQ(u<$Y+i6Jj%JsF)>7cZ{x z8O%qAXm6d(gE5u6`}1cQCN0xa!J;Br?KHM%_q-GuBbbmtqNxf<6qTrRvvYZ44u`x) z4d_7#S3TC9<-T)77`9ZOF5VJfn%|P`Y~SK%Xjl}J#D1>*X9~7(gt>3lR?)s!F?fib zZ#@%0dRll(Dp{?n?aUf&X`#lB<1k0ma^zCH? zC~gra_Fil_SGx2c+$&N?arlGF_ZHGewYd}-$mYDd?2}l-h(DRX9KhDODM6-b8$(qk zT2PjvB6!hjuEbg`1pH^JbNgu6CXIH@@Ky8fvCvJoB&b*M;H`E^Z^8>wZXukqYdU2#C&vfPfo<69LNedsRSDE<)uZV#i9=`-zXV@3VhUA5XyEjpogF zvu`Cy>kRvvnr`pBcXb=$$X^sEjGy6HhEFEggs0Z zthc1c+4La;j|kip7>>b~rQoJk7UF`}w0c8F0R|Mf(RuRP6u+wI{Ic`eh+f+g7Nk7t zemAkWkYU8?>=^Ny=aOCsH6HVIoQrAzj9}D8i1jLdqG8=$LRihVJjT``AYg|SgeH>f z5cp=(z01b5rc~YdUVH6!2b!p!XQlj`+C*gzwIK8CV`a=JJ`Hb<-d^V1b~XF#e?*DK zB9=|wn;-hPn00SX8FHqNsdj=Nj2@Z!Pxx<8vI!IcZuOk-X)Io``-~%AhPq`jMTICh zrXw_%C3$~ygnYh9VbJWI*+(O9`CcTRmnP24d+qEoDmE3Ex~z6w4@Z6WM_P3#b?p^YVfGV zpEXhumZET&$3|pd(1E4AE$Z`2%E@nrz^dBLIEDMIRvJr+9!TeXGK8EtGKXK=7>nk; z+sgRx@wg^f%{Xc`_N5HYUmO}@1EJQl+61>BMlj2guyGn_fmT|tTQ;iwn_;+sN~IBt z0e89q3*m%-LK+p@AUU)kH!fVTZgF}o*2QM8>3A$=HX}W1r58h6+4PpY4~lbGRo>{k zlkfHeA>?+y`Q)%pIn)%H&b_TDeeh;pqH( z+#5kZZl|w`!G8N8qGdl=+kz9znhS`&*&F>s8~@VJtv;Lwgl}{;cD)HRheETc|2`8M z0XHN%X-sS$h9!trYd)?iZu*ICDkBT?yH2mcWL~!}_k>T@Q7Y2f7udzJEs07p1XADD$PN#lFs*F6*E|UV+L5(I>LK)VQIo6d15Eb%uzi}eVGu zZQqRH0m;3g{prlxsJzB)_wuLf#wd>Ai^wRH|8DJ{xrKe&kljNY!fgf_cmow}$TQEu zxzxWWc%QC+DLp|O*v58(LyB~MRqgmTnq2c|4D)?{#hWo&X;hkME1FXDw?wO+Lnf&pO_$?p)DL4p1D;(y4s;T2iD(5C&>!pi;K-jhoI7 zRIl*b32}zOAu`O)4o{aTcwmb%7o4M&2AsP#{GGnyoi^gVR+Z9UzW?BW?$aNZlH1QD z=~?l>#NiNSP}KaR?%{fbk&R(EW*<54v#)u0bIlH9uEDCen3_ux zQJcKpN?M3COBf%W%zWK%!|!)9KVL5*A<=EauaLG;O6)ioQ#$~u>Guk;0%|70r*1GS zf(9W;1#K(-&vU`o7tfd4rFwzi{qmi+&x@(y6Z6_g7IOJpAgb@^iHP}x{C|6h_`YZV zOWhWK%#-R_5?jMg zqiV+R9mQT(Q{q3)3KminD+xX|?Y_j0uxFPRj1}jp8NJ<@4Up7{krTqQwy(?aM2C?8 zj&rCR_Oan_ue())Nt@(Lso?X`;G5{`Y7b6I;uKrMdLeRQ?$9`}b6xyJMFx(feTlyc z>!lQ^X9(B1nhmpgS<375cFSpq zBha@q8j34sVsfQ|dd2JWlhsG*`%A6;+uPK@eFaK_+Pd8qS8JY0#TZt{hW5UXL?etg zlP?pS%Z^RnPvxx9Cg_29{*Ya}A`h)PcVjGP)W@rxtk={r?>>*!!by#9O*5RQ&3*_~ zU*BA;%vn&w7)!!xD6`mP!J!8d44F-9!0lLN)vV1(m4slq8Vs4f{PEl&=VwloQ`Fb6 z*-srjAE!s{JIiVnzq|o!K11GOf^Q$~YmO$Ckh2xM#ncAlPoyw+hdt}+1HZoq_wbzv zVK^fQ0cle(63K;HVj(dQ2|~s%N=%6-`ObfT3;91Z3IMwEeZR+zgq>Mb4zRi_`RDc8 zk7p2ExsuRoL_sHYiQs!di{-t*=>xBKS)?>R>K-G!!~C(Vy8iFpg#$P3x19&;E7xIP z7pn=U-miuwu6UZh%kb_aW?3m|FrEg%OZpydd~J$a_>5iUtyTA6w6XTdQBa#GIgpZ?T1cQh~^`Xn3vU2aw8fU+a zKvPB(wd1@-GVH9879`pGU#HPl0^-tzkN6mIhq>=!M=xPIpTUS_PKM|gRNUfFqEmLr3@o9p*0j9A8uT*4SI z&U4z$-{!d77(saV#Ii`67QwB~R3T<$ZVNKtZ~{115a^Wzd;3S77PodPh5W$}!9~$7)M97JV%=A}Y=Zk%;1r9^3UE zM|+L$W5)M^NAHIUE9Qa7V5Wl5lz(q$M);Lc%d)3u02x?@RIB@1QYQe~-i`z13XaLVobY z`L&D_>++dU*luxDx~P^?6~?S0CK?zVUBABs#D2z657%5t*Y-k$0d1`oZ9fx^(pK0O z#vdG~2qq=t1s^}`=j-CV@?XA0HiXbV`I1ww)q!_0d@v=ehne06~A%)8Ia2*bS+_a;w8 zC{G^y3gwWEj*RkAYkst&jzxfKAI(!a^GwuzE^6CnihfFR5lEsWC+_DSxzc&BX_1?_ zJJ$=I@G<5xn>h$Dv4(a+MZD!!JCaz#O@#{0oBN;I@rS71PhtJu&xU%EPe;<>AIU=g zhCH~zxjB~Vz`Mo63B-Gb^+vd`%6|h-m{lLfHJI1qDR#MWwL_OYfTL37zQ}R9MUs&- zmC0m7LeLG$9|uL`Ka7u$cXj2JUWmJ;!CT4bdzeJq{ zQaa?mUiZ|;|k&$#u9{?0OmxuPs$@AG4! z>G;u@_e(E`bw3z-oDe>7h5y18!L)}QoAXgOR5*HIwOoJ1=+o6AepQhioznrW5T7JN zKIh=3>WBSpAD4I!-o9nOC+}LHwE3P=Xl6@xj*l~5v_3hyekQIOpLo}F&p%S&o;EDp zdeMO>wbs3=jWm$8lxYX%gE!5c@MIBT_*t#TlOQr4q^ztIm$U~znQ-6 zp&HE&6b6$hW}}<}B>;RwwCCl+K6M_SDaG=f_87jt+#(K6{o?)6{ztFAPsSaE*XquX zm)2sF5F-KmCOO#I)(tq{pz?M1JcH8tXeg5q0+F{xHxqO2>l<&ncD~oH;e6Ao%FdZK zG+@Ku>&xG3wOyrJK;bXCvm_$dAxjV+R33ACE_Fk8_cVatnD@G&LOF{6vks~CuU>Gf z1jQ@u2+`Asprat`QU${_pik=_@Qj|~kTFa<_=bb*=8G8~t7Mh%Y^JB9r(d0|E))?H zv(l#MJo=$2AOq@=_(CX!_?T&mc94vae(OQXI~o)G>Y47VLfzNU+Nl?=3|97B9gWhg z@rS)sqX!%5<`yD!K~xIkN-$>~*#~zv(^G00D`N;%o;W^tlS>d(?&zdHcLSQOgWGlc39vpn}%0Xt5FEd7+$OYP!NX*1{6|207ZEm(-D;^D*Tz*V9M z1ILlN`ijW5Pg`4pb^M>g?`-UnF}x3)Vtan#UfJW`=x$|SipCw_Mt?t0i6*c%*>nas zl|5F9U?L$SUA~muB_sdu8VoY8RhdSQawvybfa3o3E-7YQ_6Ol85&IbWgqQAt8?U%@ zJ?#s22P9y|K#7yB)hzeTA-p%>!_-^c(kZhlHK)lAO3DxWYX`2OteV-mNc6QJ0X9)8 z@azFNRmAoCWM6A#v?-*%J47?9ByNblT1;@&x7)g)#m-KN6njWYiYEdl0fmp#x<>$r zTFwWE*#ghy>+~8l23bQORDfM#J7&Z<^p8p<>FJRBYv|O?h&ukIX2H3nHAyHavI}(W zOmz(;ufn6$6yUg5+lGDW1vM8>N10@p%a~);y&b-MSDv6yFqDP0dK@8#;hVAqJ#P5d zL1c>}ieNm}gxVnqnE}K1={)B*VXA2c&Iq(l|GW!Edm#kp@P#S6>DA3; z?NfK*AAEJ(>!vrKz5z|33>4~rZd$Ke19*`cL&y!5Hbo%nf+h(<-Vl+U1GXhV>9`61fA;Gevi+$nR z$Jp>5bO(%V-*APVHG{73N6s^9waOSW1_BZmwU-(p{C#tewGH)v4ywPZ#BAoBmuKqx z`=6SrzoFE-Az<7OWb6_IZaF3oLu&1BN5n_9DHN`St6E7U`?S&>h{u849A)kJY{F!x zT^ZCf9A(J_H=?yK)q*~buF6cY73GWp5Rbefj@Qtzsv<2Yk*b4z!Pgo%f(8KUU>kEgk>~+sNfNiby>Da7gnDLHj<&w&9QkAeBD<3t7^0<_tLe~ zwjdtp|*8E)j8eX>e)uCss?9p+@80Ej^S~jyya^c=_!n_1t zl7~2*Ll^g?4puIgfK|8u`{tOrk?#@b!x7mBrmzh=53oeG1x8dK@ogT7Mn82KMn1l> zR9n7`Z03uPCp|<--Dc1~pl;T*+ppnci(XCV9Q{az%K=S)JKyaVqiE30D^J(IQDK z(k05UNR@71qxg~P7k|C#Yt>F{f7nTns1k)jRq93oUb{Vv`r$Ds7Bzowh6$ZmMPN$`RbkDE4eKI_V5 zEt|L4mUlC7dQEQq-eUBgd0Qw5!Of~4xsEE}ax>lPW63@~a`%Ab%V*vKbfMs!1il;| zER)jtkXmmwjzywji(1u=#^;8VXE(eA0cUN&DDIzzGH?9i1%|ZraBK9IWADGTO)q1} zB=!`0D3%4zK5kp7QPBYTTYAt5%Ic=Eqz!G@RGN^Yj&LbsSb!iqAppzDRZARaU~Y38 zLFZFYz4(nufAFrc*hI>2O$#upBxaD+W>-`%hpIfED>)(j*LE&K5Y8pM1)kL3Ey3_fZDM%CO+yvBb6|{OT_4E1=<|TX z$@5v!XUT-$C#iwG8vZ=pft0|S`?y>%N1x``n}tV;J`;z5&=SAn4vGkpPKnd?XF^k_--x} zO=tIn?N6FG)l#6_LBcx?ItwJ-1f-)FP#9wu)t ze0sh~kHdY+fYWI%!Wy9rn$FJndo*qv$m}SVA<2-yDk8;TEos~k*!9lxd6;U}b=p4IyT1Q!1Mlxj=8855SJ zQ79rM1pr9BjzY*H-VF|GiOls{MT+UBk-4U#J_9x&>{I;98wvZNx^5Vr_iNXJ_e?Z? ztsO_kwR|Kv_zm1QI28R1SDQVoibGp(k7S~ka~3A))-3$@GKec&@`pFOj0r=j-~=ZC zOx3pET+jmXhBsq4(bjO@Y?x)cQmOL5WM8=K*36m&aEE{5-2p(U#@9btsF@vn*qiRn z3+6>)q=uG?|Lm>`>187FbpE1?Ow#S#@!aZr-ZT&z)Mn~!7)sefh}?i@eCRIlH~n5ZyGj%I#4LYS8@JjR>UO^FVX=n zRKZ5X7HA1R7y zsRrESSLdU*Z^+1$N+zTJzDUneI%OwZEnSeORNY3Y3bJIpm03uR@d%lEytk3r{`I*A zNM8xSl%WQkY01@-)hqM$`~M#rjOBA0zfvS|v2HuF*1lL%*jJBE@OSq4JIbs7?t!v74EABw~zHs-I>1#Lwnl!jBOkF6b#|4(Y2uj6&@^U z)ucem_I!(qx&kU|_K`WO?KkLlx1gYS=7GO&=C2el3G3vLWusWm>E_MLHl*0Q#=&?9km|W3#iOlrgq1XOXY#)-QOk>cD0cRnMYq(LN0`ph|Y^ zHtmH*QO$-8As))>r3_u0<$%R)rcsaAP+Y9YJc7&@#IXjf@r&8365i3kZLA>@oO4W3 z>3Zj7=R>PSLINjdjnrv+^VQ}d;c9;T_pe11X+u*9cBnPf?ZtFC08=WZZPbDeTb~rp z(EW8P@A+=>1^3h9p3^Vfh-JExvLzM~kK3i9pF{@p0wC`rwRv9yT5z*rnv>iz&%@qL ziOZ-*6W^D`>e-C$SD2I?pk3N!s2}t-+L{2S)mhL|ANW`W3`jp_=9|OCiLW?rzghqPY61M*0HEv8H@4U6UTFq@Qpw(53(V<@ z-9FzjxLi^b9+BZ@*JlKnmzTBX z)gLdtS+nEdNp?!V_*q9iA3CdpZ*~PKCG02O$SO}@T?33X*7X-TyFbcd39|y%3tO)0 zpq>q|HNY8d9)-~ZML|OUr(rv`p{ml08oyT-`uZ~sEa|yS%a_jOQYDvUeQvSN^)Y4( zUba+$4B03dRldivHyyaQABck{B9D7_6Z;Mu|B7wG02bN^O$9hlIizahx$RwIldFc&zlxr2^H6#rXnt&hH1YpT7iRE zifMS1Kb>VQlw)0M!Z=hVl=7Au2z||?>amC4EAJ&i;YWvH0Q!ozMxRR_N$i`Y`ZCG1 zlxhu!QEUZ?hx*;QG$MIBx#ALtAC6BGEv$J#BFzvd=fRpb@ z0uWIBr|0=pa#O-n%uM4po22Tm^=aW{DP1=FVIXX`a^g`8Ye{yxZ1_4L{y1qx-&nf{!@wicSvux{R_wunnf zb^G!IZLhIH6Na%N4ohA;G(TTXJkUK9fY<<}?Vz45I_MyOzmBZX7bYm5CGpzcdiH2MECPfDdNn5h8mKf~%KEHD;NX)&dUaE}+Q#XaGOU#Lu98 zILvs(tdgTy_=1yCZL3Leyi7taqm(RP5F6QVFVK^2F4+x0gjOQr7Hz0tN`07afB~0* zC3tyYeBAur)$7#9C6%8>sn~|xSv%jtejq*{syh5e5qqw2hvVZ5ML&I3z$_DB(&g)s z2fzU|)&l>;gIkSCD-0Uswnpgp>U?G*895;Z@^n52>jMw7B?EO{b{|x8B?2TaD@)Vj zSsY?>U%{+p%qX8zjjdn~r_)rva#ron;A5J+>dG7{NsMBz|lk0|~Q# z?!24CJY$kyRFe3HJ#FZ55;MIX)T{7w!`<_XL%=1aFO4X|Ou6*SE>w57%DBQ~JM+p! zaHkvUC!_ArR`I|KoGc9i@+-?J@;3{q*=X;z@@z@}XjaVxP^e5RZ%3`i(=SQRSRr9v z>R-@ZYqrop|H>W~AZLJjNJ%S;IMxm0ffU57{NZO00)ZsvUVfECs$NVH=>ULy;mGW8 z7#ZcWMVBWF^m3>qZu$j+ZZCcokf8gzVqbXr^8tY0)=5)j-od)$)Y^iutg7cKDH`Ly zg~11K3ya?@T!N-tlBOUh-B&n9FlL9lJ}R5aiw{fgPC;1tybrvtaHyMR3!q@TUNf)N z8q3fo(;SbtFqdFD5|CHk{uiT6GCh!}5*TO8+nSE<7+{AOg-*%KGsKWK8Ah=Awm3jO z#8F&sT0loG4{xw^-r6B{Yp1iyW*XwBu)SAM1EYVpC{I(;Jmoq9!np?^v!r>hTMPF?zR6Q4n$y$KS@3QFY~U9wrs*hWp^+p$vk3L)>k1#ld9>1|G<`Ne+jLJ4 zfAzTfPwju{+tc#R;&bimIFGpA5hA92RDVolOk5yP#i{h=%@0+oAXtW-IjYtkMs`2@ zQFv36D%HOa&E1NP-dsNU`t_HS7o{E zJ~(b?zA+$)tNg)nV*O?F*94uaL+&0)weGJ!VAsxvICtD2@Ycm^0hfx0&{{kB#O|*) z998X=Ht6QVH~qhaIT)q_Ug7XX_5q$xRW7p(^AmbiK!Xz{FdSsUtdFr01mnR<$io9FZTu1R1|yGr3c^zu0cKuudf?_}iAA#@3yCdL*>Zd=CI z27jgP-;#g$rE4((mr(=`33%)!#*^Q0KbSg~lL#DmeE@W?6_kBOKL)3ShpR|Zi-Kwp zL2{%YA@RdKwPej%-WFqk6 zo@4DXMnCmzHuYR(NtqaHYPn&tf7>`k-C_usk;m)QcjGpA$#Tq*wC*4y*f)pMgz6)Y ztJC?HEm9J_Z&PzsNY7r&)KDG-k`+&pL!n(53FT3Lu2A2TMBT%E6dDGL_@R{o2sDiB z(yJD;sj$9LYY8HdWdJuOPB2pc`NYwBWfWq&6TW8(**xKM6 zgLUxj>KReKc^+@*asXO+u=bR^QW9mD`nag7WN2qsi!=h~Bjm;&{z7XoY!aw;1&01U z9roIYRRrxaJV2h{jKAu#HT)_;kiFqm)Q-!f&|)j|M@#jN0Ut(t?xGycVWjN1@DB5R zdNU8re@8x1tIQ+;p+U=4K0G4Zn(a#^4s0Z&v)sv zT}R>#*?|G`OX5#O><%Qz+E6lxxU_Pv3dHX2Ke78We@M;Q!rTx*t|?K4&YnKzA=T?=cGPCVoTVj32F! z>JyhsY022oWtZS;E2H+j-Lh!QbYS(lB^oi7!hX84mZ!MngD zBk*I8d}H&;>zA`tu~htG$C5+_1XD$4A^7CVO;S($vk zIyZ|);>zWeJ*IjeyuS6O{(3QH)HtpEvx$flNF57FG<*9FG?pxGt;Gs)rH|egsTn`o zooG++xW~@&?fC6Ii(S-{Zqdo%_GCA_l>rxV^R8rfQ%aXY+IH`SKHHFDRj0>8fR-t8 zROR(9LMpP^H4-7a{qE@^8)@LRHI;pWlSl*`U`vrx?M-MAr z`laofrO_&Y!7uL-uJ(CZ3a@^e|Gr4U&q4riNQ>Q_q88Jxp?xIP@jkhqI|6pkv3y{O zKDauE!2M2IKb=(yv&5Nq_W_`!6WwXjj|S$(J4z3wTtE4E!lQ5w>+sPJIC-|$X=N7D zX2{Wvv84)bqa5D)9yEljTu5mk9ha9-`(E3G`6cEo=|=A5wh2O z6reTTy?1-TU-43Xl|`mSP~C>%*ml0riv*@>Z&WW^efkNHTLx6K1(3tjD`BN?5B&!Q zjgSgukTN&?WR-`6@UxwogP`BW0MwEnVQh-v33yXaJ5ZMOy)vz-<`K@}Z1k!rF%z(U zm8VFN-*1ii7Dm-=O1y02OC;)2yjB0Bi(NJnJ0Ex3WQd^~J6|MSCk z`lmi*`pVsVEb5IvH<8Dr^M4t<TJ|r*7tl--$*1`1(3b zl^qP*g8%pTOXf1`veE>V0&Mic;46jwV466r-M1Ed#mUh~gzC%FPo_gT1 zZ#*AOPSlYmXxrOq4e{l}ihW^Vkp5aX^<*W0rn#qkGe7K*hoWsp|2Z2hL-rzoo*5POoiFLYYB7Z!u5mv&*@W3 zfAV=3|CfDWfCD954e^Ks$fdJvGJq3PDJT8BC)8pP*fwqy1L)f+dc)Z!4vAMSdH82- zh4S3EXUywP^r(Db3G6Zc%|AQTP00Ex(w{zKj>LE#5HSK0jDXRIV{zUJH9dprW{(mt z|42XW++Q*8cs}BB9oj1zTv|9H;~Hr1@s>i8z;kL(nrY?xxc%u>Knx{n6tY)4=Oc`8 zzUl6YwodQQM6b9a70e(*9ux|PWK=>dkxI1(;tp!eh|hw&x^*j_M4G|ak} z{mgOn3EZ8lFWY{V1hf7=)Qmn*XGrwtb_GgKE1&8=TO$4W4z$eA)uaAOFgAk`&#nqj)LRzYFFcbyD(Tw{8T!EAcEh9PFkidcy zAx2%s&2aUc?~NHv!_R!ny*wnokiIP2rE_hypMH}PI|ct$PxL7fBB>P$ zBIsV;&tfa;{!ad0Eqd0A-{Lo+Rhli(1NvpRYpH&OkS7c<%BpVX@xb?;_-iRg9yk$p zta(SO{+uo<%H^nC{B-qY)Xr&AI8Da&p60tm9p|t%zzDuT+~XkxZBbnyZE#02dBywj z<_HV02je8?aD`D>A~SoHcm$#*U0Iw|WDV$ovQfL0?WnkAQ)|B$roGCgy z#e=n(FuK(fN{Ba_3q>MJU-hsb1GxRo@56_xw zuuA@mEg&tg5~#i_+8)ZcQT7bG&hHuHQ!2t zY0K%CoUIX}^0-haP*Oml62YFIztbu`0Ga_+eU7SGU8k}sL6Qc44VZ=HH0d~I+3(-u zT}DZJ85J_Ds1)O}&lEV>6@8SD}bf;%ocHI`{OV#msRp zXup{WPn8`Qm?`2o{6wDz6V}gTQ)R2YT(GjVEE&S5>{1wK`?>j%#NbZKaLX8P4JbB8 zG3XEei(}i~(IVFG0m1JEIRI!HrnQ#L%Z?LEi^FjXf4op%44r$e>mV7Ng~D0z4xOM; zFw84?vf^7*%wT{ux3!kXrbU4(MEu^QeBq1#$g@fGm2kF zbgDnCtr_(9W4?>210-uTr&2ZwkntoghQ{1O*b@3@13u3P#PR$O9`O*88%i&+NU=Qv zMGwc-NquAVa?qMI7iU#V2fqrhId`RMat?=rrS7Vmyv4Uff&j8MR&>ZonH$nep>mc^ zSCvWq1<(TL6$Oo7xY3W5Cl~{x8z_}8kYWDx-VxV8?S+{P3KM{U3-w|tf99?TKU>Dt zh8%=2h-DD~<$QFP5ont9Q0#u`XAo8{0Ec|Jlcxia7hAN;2~&B6jCg$Sca#c_C6?4d zXPBB$_3n=U^;rx8fS+H=aH`rDSTJb2$9Y5m{Fzb`qQ5D&uj$9XTAR8+Q@{a3K$a9; z$xF!nyfs|HRr&`;NX+=Q=l2j91~)o6g7LJ_IVgo;pmz})(W~#evHg#j9sUJE$IYG| zR?z2xfGRbRO2OG`Ll%+rraaYYaN*JY6FvDR?tl+PMNgpaaeR1C!=Nl%(FuW4*t3i* zqMt58gUbMEEi12$vpt}{4q_PUDAkSW<^`WzN*uqFP-Zuc#*~dNN`g}+47k%iX%v1^ zw=*c!yVX*?vl#;!n^?Jb|DdeV2*ZU17Uv!J8#o`S^}^E^z`&#moO6^l!PcdXF#Vas zg>F&_pi+8Wu&{&_G|e==YJL%$>2a1Fp+O-klkzW=Zq=H);bi$loD6``0iN3u-0*jA zW*1Ufs$awXwd3g!|Et0mnc3M^;@RRngGpWAdqOA`*qO!X(|dREZxDwunync0;`wQ& z3!ti*AQ|cXA8w(^jIZElK*5Frw(hZ12( z;4|lRghpumWWqZfTh8nzyJ`>9j^rg-xeUs1dbjwp)lD|j&AxyyXP7Tb04CL>}p zPuKw*T72y%iMgmgOUZfd)=|Cq+xXMJ^aHks^ zH;?FMBqb$X_P;?4SHaFAJxF1kRh<0+l6NY20BBZDUN=sskhW45mzFucX2@fcU5I)Z z{*@O0lA*;eZym?$mVQi1N;1sw$#9tyV#^D!XAwtDaxuI;Pc0u3{PMW zP5n*(AAM>S=RB-Ffpct=z({y6Z$56t?}k?Y>!$O95D*E%pVEXbZ^<*_T|XgJVglIx zftlJbvyB1TT+zd#{Y5&TM$^xx+k-+T@M4Ldhg!&((!(K7x*Dvo#Mw2Q-0)i)?jw&n z&_?Zuxr^OG25Nf@xu_Bp3UF|VI=Rzm(h!I=Ycxch?Ce!^Q|&Z53BCOGDQhxtfJa9j zfW*UomvX!Lx0(~bde#Gm@P~l99greO1mPvh1^jt#G@2awlHOZ{W{y++<1_Xz5^bBC zvrr1tQTbc|En?N>ovr|5?R4gj=CQqX@rIu*^rrx_W={8m8wb8sI|ibfO!Ty!!J98Z>er-P9Zd7 zOaFC@W&OMYg~D%zp1o&Z!*LGd@plvow=N|~$&}b)uw#1joCS3oW6O+wc+csU$f+Qj zm@^K2vHQS-d7(FxRNewKRT_my4LFB;eNWs%)&>>KaKy5D8l>yHchQ_fmR#PH z7jHh4*M_6~0J#(($eauPav}&66--CzxIKve9KPC)G9# zpz#fJf^A}FZ-8?aYd-OCi>4hpKp*;EO#+UC*4idl{du}?PyF3nmn35!2(&;-0fLUa z_VJYIvq?Y|`(nY5E*^3KX#Q_5dZ{#nClu?sD+yl++;`M3-16Hi;EBdwJH%1=2n>@g z&sN)w=7{@Q0ns8RkDyGoKg2zh)i_4eJ%Y@c&eYRgn<5T4`nsQUDFw5Lo`5VBUk@@8 ztO8$a6?3w)lhUqjtOXn&ljG*H_lPFF9r zKt1VkjSe6pVk##}XRohZZE@uJm#o)dQWIj8`t3&%#(?FHv;YnenLw(9#9X$P=kbak zitmRY{nDYQPGaGwV)y!CcE36}jfd#!49VuDjhM{TDtNjgE(fJ?r zncvw*Mo4NV06;nT;-A_}ng{KFJ;hkFQP(TJtv}s7XGNUyG!(Qg8cpT^KL^w|ly`(E z<@47C*!Lqqmk;GSQrnIK7`g$po=j;AV=^#!S!Do3>Ij07hfRPsXCef{*Us;%mMG!Rv(&QQI^s_ZX7Z zN-*T@wDj?2Z~VerICE>ld-n_%GM*Nu$O40IbJFa%4S6%|cVzY2r}J#2Pe47-rRU?w+Is>EumD0h6|_A~atow<|6ye3aq7 zE^c<;MC=H<57xJ~wq9EA3~@fst?hK*cGhDzG+wfw_W#LssK+p(V+4##G7XczveP|& zXG%v$w+y^ohJ=LdH@jVVP~Zh0ij!fs-?R-zXYhGX?8NYs_x7*Rh=LSXiu3ck(`}(v zp8+PHND*DydTzR3{r#y%8fxrOT+1)M&%*%w_J}TC@zjF%Q=gmN`sGcjvz$N->H(v; zS*c$8om&1`*}<(JXwm-QOOgqPX9jFPfZ?H78=`00kG(tMs^^foY7kJX+ zW%TcP!SRs5aBhkslzofY$v>)*mfoN6(vg&=fMT#nKD+r%E>N7-ssckw068?ereTxM zD+|U8#)$9JGTNYNGEj2?HDx=hgk0V*-oUe)3u~$j_IljRQm6KMzjn^zHG$zao*{B0 zS}n!lH5$#fp|>`E+A{;5;XqAMX2Q-7n;jXCk0InR%x>m;ox-LT#yR})*>(kTe-FH z{v~-mZoCMLRb(QGkn?O_{0PFR0R+{4t*+;6?xJ&gATYmxzy?^2RGpJ^`J>J^*IpP3 zo+gF9EaRI0SIwEfL-qe}ToIEclT?<;u1r*98`)AxBr+oVHufbnS;xL)NEAY3$y)X$ z5yp~bLdd>l22<}5#?oLgmhY?2fAPJp*DvRn`QcpW%(`*Gh@5~Zx*oh&tqsHIky z>JnrBmtoqr>h#7x{~zHJKzO9HtE01Vo7yBF8QkQVaqvMvp7Gn59pR9+jn`G3qg2=Z zH_1bdXHk*uHhY^r$?pMW?O;G; z>$g3ay$+vMJq5Wq?d6_I{xC35Wg_(t!~)R^5SrUNXrXKcEnmb`;5Ac=eYcrCzGtlG@n<(GbHbsZG-zpOjg&F75D z1u(b-_&OUS?Ra+`oa+LNV{16B}DtuuQM?{5BW70dF{e9;>iy+@vF-;-t# zsq*_1qq5JL@4ZeHU1h{Ext#pVwIcrQepQ;ywRW=zTvWce$$e?-0S>%U>YWH4Oa=Af z*ck{i>13>7$Z5zoG2K^-1ADTyHP(dQfY}dJ*IkM$M*`P zO4A%nL(<4ffN#wxm;|&?>Dm9?{1d4FA{Ns$HDWNi)>NyQMwre|IUX`6oZb1LWR!+8 zgm-0SLT^R*vqY~aIl1+vko-GykMuFwFG7##M}SB9a^CR(ZFuBoWU7Aw zx8}#mXPB}B`FkacKIH?`C8hr<88*#0#^)dEo1mgU&EE48&o@TOV?vDlP!UP0BW=FT+ zk)obKvXGi_tUdd15vKE)Q@jS*^c2H?x!y@P8C5y`tQGl6aY$u&ZtJ!8?|ldmULMAJ zHdeBujB{sIZM}a$wJWJJ0%4U+}OoT7EVyv&4KnR$+!*k^itb2df2xKV=@I>2Y#$h8$Z*8Kg4sfLaJ( z-P-rE{s@qqnQlC!<(sqXP|lc|FsN48-T@?_cPyh*f(WainSS*bYf z^XT;}{F6>m-5IUL=bV8!_LA<}*pNv`OaQ@0G>okGxG-6WP=9YIn*<=0f%J+JE(@>b zP^UZ9CEq!EmR#!wU*&tg{PMD{9IhcSZPNk+GvCKpI zMn*W0NO@avIYl$P%Wg_)#e=)9mFCf(8Q0VJ>^gtha^h0<{${IPYXyDk)ponz z^jM4NZNuGD4Hf_BhWva{n4q9=0$ytUKv^9T#sUJHtzqxzNZ*0 zHL#L~pm@B#S5Qz?kJzC?+}9EM^(~UE7Iww<$lx6sp<|1HT^If(s4=IGR%Q8zW&(Ov zA(Nw|WW_y?dadT$&ooH5P{zHXP0s9~19^If_dBO}Z^%YPPlI#6`};|<+2q#NcuS?o z7uEAWQXE{^mKg9+R$ILKiNIX39?z98so zw12x2J&lBTsAH?pbTdip8`|8F!+h@R19^$+wUo}_UEPnj2aR6mK^K&G==oAxvT$(% z&Ja*X-)guERS8w~`Mk7OMc86j$-WDPy7De6Ux!|Qyr`P4*K)FBJ%!D?a)E2Nt&$+x zpkZ#y-mzYXOybD9hxd;6TO*KKj}G|BWZBHS{p}PP$VK}RaXYfp-N1lIjNWa=OM6#C zTTNi_gheuO96Y6`&}_rKAsm*4G((*C=y)-DQ1_^OdZ~^GGj^m zFG`FSro|D*>dkbw#ot92X-Uf=&U>jIBg)(P`y;wWiUEFisg*Nt5rg+$%YqVwHJZz; z=q?)Dh)3QN9*%ikb0CKk(Ka#ihl%Xugiuxo%@ohO>;NA0@SMT{%Dm18SJ1(9efymhpE{x|d|YKb_5WUX(OX5Q$FsIGquK zCaT5EobAlM|Ish-;?X2ExO3TW_MtiC*o2QMbO&w<5OM!;s?2lLY|S0 zIR=&ycv13BzYuGVWZ}xIU-XyFIR1q2_U}cJjyPX)`bp|kenoX92NH6OC@=_#n6rl^ z9=#hRBb0OGQP$(j^22hn`GqSc1(eTviF(|1EzOgDOx3GQNF#@llbt>n?$}02v*)I$ z$kTRadoPXR?3X`$K2&!5GcI_LyjMAK0UiXYzvp*h;a%p(RlDyhgBadKt=8TK#C%vlb6axd0gHul3F z8&eO_rKd&6`*lgII&cU*-1l1dB~#=u^TItm?Vf?d&p&o{2RK$)Z< z5y>D`75^1lE8S*S-RX+cND{j@@;%#DiXsrZt7L@pa>dc5uQg?%A5J(=z3FQ@Ton9q z@l58p=}UB58*i>saxtyrUWXe8F(DNc62&=9*pUy2d)A&%a5;-`0lJA`?|0$%Z)-t zV}B1wwf*kio26CeYX~#JwB+p&d@rR15}|k$`|}~iaKU$%3(Fp;ysO(XW~y#kNA`|@ zpW0DNdD_OS_@_xHGax8FxRbRn!&~Fc1qYGBJJ9D~7ust;ROep%ofFhOW1Wl?VUIM# z8%V|Fr6p_cF9&+u9R|2ADE=rjc5_eSNE(%6zS=un6cxWdhLM{6NL^uWeLP`^+oKC! zbHiB`E2lEzB=3KiIWqNAn9i{M*i3A&cs4w&0ToI>CEvY~E)w^ZjEu{)7go97ee|}A7cjWVi02iT3tZxA zE{CuFa`vs`SsJ+2&BJ*9_=ebBSmJ385rodXj23n#C%|J=2i{OYzYN)b?7}Ck&4n|o ztp3D|vnsD9xK~vhpsY+fRtI>>z6XenjHb=^!bq1eZSKW8mQM7o#BtU4%k{<6hp;8t zxBackB7^BYa*zQKWPNoUc@NSfO!1d26iY$A6iNWI*_xMPs3f*BPh#JP3-73Aos=h0 z>KleuJlnhZ=1^+}5p4_AOz%X+-@WahO^=+qZ^!x7YV)kYqYK)*75F^qJ95}Vo>MG? zKyjz`y?GnZK(N703H2{guz8A=wJt3j9-fbV%g+XVJ7&L9^Ji>}dpxaF9UB_bmyha^T)1HOSR}`@?%i2?S_kRO{vb7APP{xMs z8(c^;b=UIk)6Xto>7g=sTZM0aX9vPE(z9zL{jQ;6M$f^&Ex|dI+YH!&ugG26sScq9 zF6TTI_@zJ(*tna!0>4-$lXiv)y$6`!tmdQ7UEO|7ah#~uM%5&sFKO1k86B{GHcwYO zt`5p0Asr0aYwbSotYKOQqo;PyrFE`rFmu$yu|D`nF>UFbYnxqNCmhe8zo&3g$5K9K zpz{13QpwX97dz>AX}*LTvt#fZ`%#j1=lgpH-218sVu8tG_uN0Fi@}pRdHhuUM^}_w z!FV>THgSeh&sJD5O>ysI0=M{a|4g&j0@rnvUQB@t-m(aZyP9k*ow)nvuXz7B) z>44G*6V7*6BxNVB_o3}gx6KW>iFGU*mD?$etxAd?;}v_oTl`XPlv97MqaGsoQ7dIijN_QmD@#kZUEA_yvJECrG-Lm@;ZP^QiLW;7-f^L#muM)OD5+b?8$IrdJEf6d^EdKQ?N|7ogtl(HPMGPlpZsbtvHd=LN!>GBQI1z`mUhx+V8^0aW!K3{9 z9nLX6>uI+>uTycEXzo^e+3JTf{L|njt*lRnn|IGO1qQB8qcJPKwUS+CGx`SHm&Sdq z&N=Y%%al=yt0J7QyS%BmT9<)xt`*87uzol(QAl>Z}^ADFQG?KFOt{p@R)A%;VblK)uZ zv*e2*AG^irSw=wgV(0ygEe`a}1FM%~vbj3*t8&VnDL0CvR!EKycf~gXRLZXy&|~KD z;(&mv5sVv#-}*;FVFw|_iC_u-kEQ|*7@#-e_5Z_*h1w1ED_4EtrPPBnpi`GYTT|~& J#VwnN{{!AyRmK1S literal 0 HcmV?d00001 From 5d8f0fc7c254a6418d831896db6441bb7248dcb4 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Sat, 6 Jan 2018 22:56:57 +0100 Subject: [PATCH 045/993] Add missing configuration variables (#4310) --- source/_components/sensor.metoffice.markdown | 25 ++++++++++++++----- source/_components/weather.metoffice.markdown | 5 ++-- 2 files changed, 21 insertions(+), 9 deletions(-) diff --git a/source/_components/sensor.metoffice.markdown b/source/_components/sensor.metoffice.markdown index 8a327524c0..ff62235771 100644 --- a/source/_components/sensor.metoffice.markdown +++ b/source/_components/sensor.metoffice.markdown @@ -15,8 +15,8 @@ ha_iot_class: "Cloud Polling" The `metoffice` sensor platform uses the Met Office's [DataPoint API][datapoint] for weather data. -- Each sensor will be given the `device_id` of "Met Office [condition]" -- The sensor checks for new data every minute, starting 30 minutes after the timestamp of the most recent data as the data is updated every half-hour. +- Each sensor will be given the `device_id` of "Met Office [condition]" if `name:` is not set. +- The sensor checks for new data every minute, starting 30 minutes after the timestamp of the most recent data as the data is updated every half hour. To add the Met Office weather to your installation you'll need to register for a free api key at the link above and then add the following to your `configuration.yaml` file: @@ -24,7 +24,7 @@ To add the Met Office weather to your installation you'll need to register for a # Example configuration.yaml entry sensor: - platform: metoffice - api_key: "my-api-key" + api_key: YOUR_API_KEY monitored_conditions: - weather - temperature @@ -43,12 +43,25 @@ Your location will be detected from your home `latitude` and `longitude` setting Configuration variables: -- **api_key** (*Required*): Your personal API key from the [Datapoint website][datapoint]. -- **name** (*Optional*): Name to use in the frontend, will be the prefix. +- **api_key** (*Required*): Your personal API key from the [Datapoint website](http://www.metoffice.gov.uk/datapoint). +- **name** (*Optional*): Additional name for the sensors. Default to platform name. +- **latitude** (*Optional*): Latitude coordinate to monitor weather of (required if **longitude** is specified), defaults to coordinates defined in your `configuration.yaml`. +- **longitude** (*Optional*): Longitude coordinate to monitor weather of (required if **latitude** is specified), defaults to coordinates defined in your `configuration.yaml`. +- **monitored_conditions** array (*Required*): Conditions to display in the frontend. + - **weather**: A human-readable text summary of the current conditions. + - **temperature**: The current temperature. + - **feels_like_temperature**: A numerical value representing the apparent (or "feels like") temperature. + - **wind_speed**: The wind speed. + - **wind_direction**: Where the wind is coming from. + - **wind_gust**: If there are wind gusts. + - **visibility**: The average visibility. + - **visibility_distance**: The visibility distance. + - **uv**: The UV index. + - **precipitation**: The average expected intensity of precipitation occurring. + - **humidity**: The relative humidity.

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

-[datapoint]: http://www.metoffice.gov.uk/datapoint diff --git a/source/_components/weather.metoffice.markdown b/source/_components/weather.metoffice.markdown index d05b55431e..5875121806 100644 --- a/source/_components/weather.metoffice.markdown +++ b/source/_components/weather.metoffice.markdown @@ -20,16 +20,15 @@ To add the Met Office weather platform to your installation, you'll need to regi ```yaml weather: - platform: metoffice - api_key: "my-api-key" + api_key: YOUR_API_KEY ``` Configuration variables: -- **api_key** (*Required*): Your personal API key from the [Datapoint website][datapoint]. +- **api_key** (*Required*): Your personal API key from the [Datapoint website](http://www.metoffice.gov.uk/datapoint).

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

-[datapoint]: http://www.metoffice.gov.uk/datapoint From 88d3c88c61c1a53bba3b4fb12977c7345f3ba67f Mon Sep 17 00:00:00 2001 From: florianj1 <35061897+florianj1@users.noreply.github.com> Date: Sun, 7 Jan 2018 14:10:14 +0100 Subject: [PATCH 046/993] Update addon_config.markdown (#4361) Documation updated, since the newly added docker options 'SYS_TIME' and 'SYS_NICE' are missing --- source/developers/hassio/addon_config.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/developers/hassio/addon_config.markdown b/source/developers/hassio/addon_config.markdown index 43cf11f786..5ed0ef4155 100644 --- a/source/developers/hassio/addon_config.markdown +++ b/source/developers/hassio/addon_config.markdown @@ -120,7 +120,7 @@ The config for an add-on is stored in `config.json`. | auto_uart | no | Default False. Auto mapping all UART/Serial device from host into add-on. | hassio_api | no | This add-on can access to Hass.io REST API. It set the host alias `hassio`. | homeassistant_api | no | This add-on can access to Hass.io Home-Assistant REST API proxy. Use `http://hassio/homeassistant/api`. -| privileged | no | Privilege for access to hardware/system. Available access: `NET_ADMIN`, `SYS_ADMIN`, `SYS_RAWIO` +| privileged | no | Privilege for access to hardware/system. Available access: `NET_ADMIN`, `SYS_ADMIN`, `SYS_RAWIO`, `SYS_TIME`, `SYS_TIME` | map | no | List of maps for additional Hass.io folders. Possible values: `config`, `ssl`, `addons`, `backup`, `share`. Defaults to `ro`, which you can change by adding `:rw` to the end of the name. | environment | no | A dict of environment variable to run add-on. | audio | no | Boolean. Mark this add-on to use internal an audio system. The available environment variables are `ALSA_INPUT` and `ALSA_OUTPUT` which provide internal information to access alsa. From 5223e10ffd968bab59eb8d0291849c9a3b7fb742 Mon Sep 17 00:00:00 2001 From: Dan Nixon Date: Sun, 7 Jan 2018 22:00:33 +0000 Subject: [PATCH 047/993] Document Dark Sky weather platform (#4333) --- source/_components/sensor.darksky.markdown | 6 +- source/_components/weather.darksky.markdown | 70 +++++++++++++++++++++ 2 files changed, 73 insertions(+), 3 deletions(-) create mode 100644 source/_components/weather.darksky.markdown diff --git a/source/_components/sensor.darksky.markdown b/source/_components/sensor.darksky.markdown index ee366dfa66..427d5afb68 100644 --- a/source/_components/sensor.darksky.markdown +++ b/source/_components/sensor.darksky.markdown @@ -1,6 +1,6 @@ --- layout: page -title: "Dark Sky" +title: "Dark Sky Sensor" description: "How to integrate Dark Sky within Home Assistant." date: 2016-09-26 08:00 sidebar: true @@ -20,7 +20,7 @@ The `darksky` platform uses the [Dark Sky](https://darksky.net/) web service as You need an API key which is free but requires [registration](https://darksky.net/dev/register). You can make up to 1000 calls per day for free which means that you could make one approximately every 86 seconds.

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

To add Dark Sky to your installation, add the following to your `configuration.yaml` file: @@ -67,7 +67,7 @@ Configuration variables: - **apparent_temperature_min**: Today's expected apparent low temperature. - **precip_intensity_max**: Today's expected maximum intensity of precipitation. - **uv_index**: The current UV index. -- **units** (*Optional*): Specify the unit system. Default to `si` or `us` based on the temperature preference in Home Assistant. Other options are `auto`, `us`, `si`, `ca`, and `uk2`. +- **units** (*Optional*): Specify the unit system. Default to `si` or `us` based on the temperature preference in Home Assistant. Other options are `auto`, `us`, `si`, `ca`, `uk` and `uk2`. `auto` will let Dark Sky decide the unit system based on location. - **update_interval** (*Optional*): Minimum time interval between updates. Default is 2 minutes. Supported formats: - `update_interval: 'HH:MM:SS'` diff --git a/source/_components/weather.darksky.markdown b/source/_components/weather.darksky.markdown new file mode 100644 index 0000000000..0352ef6074 --- /dev/null +++ b/source/_components/weather.darksky.markdown @@ -0,0 +1,70 @@ +--- +layout: page +title: "Dark Sky" +description: "Instructions how to integrate Dark Sky within Home Assistant." +date: 2016-09-29 09:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: dark_sky.png +ha_category: Weather +ha_release: 0.61 +ha_iot_class: "Cloud Polling" +--- + +The `darksky` platform uses the [Dark Sky](https://darksky.net/) web service as +a source for meteorological data for your location. + +You need an API key which is free but requires +[registration](https://darksky.net/dev/register). The free tier allows up to +1000 calls per day, this platform updates at most every 3 minutes, using up to +480 of those calls. + +

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

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

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

+ +Details about the API are available in the [Dark Sky documentation](https://darksky.net/dev/docs). From 0ed4db4d59d306f4bf70914d268e18f3e5960145 Mon Sep 17 00:00:00 2001 From: Chris Cowart Date: Sun, 7 Jan 2018 23:17:49 -0800 Subject: [PATCH 048/993] Updates for new Owntracks features (#4350) --- source/_components/device_tracker.owntracks.markdown | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/source/_components/device_tracker.owntracks.markdown b/source/_components/device_tracker.owntracks.markdown index 20cf68ab97..f23457ad8d 100644 --- a/source/_components/device_tracker.owntracks.markdown +++ b/source/_components/device_tracker.owntracks.markdown @@ -32,6 +32,9 @@ Configuration variables: - **waypoints** (*Optional*): Owntracks users can define [waypoints](http://owntracks.org/booklet/features/waypoints/) (a.k.a regions) which are similar in spirit to Home Assistant zones. If this configuration variable is `True`, the Owntracks users who are in `waypoint_whitelist` can export waypoints from the device and Home Assistant will import them as zone definitions. Defaults to `True`. - **waypoint_whitelist** (*Optional*): A list of user names (as defined for [Owntracks](/components/device_tracker.owntracks/)) who can export their waypoints from Owntracks to Home Assistant. This would be the `username` portion of the Base Topic Name, (e.g. owntracks/**username**/iPhone). Defaults to all users who are connected to Home Assistant via Owntracks. - **secret** (*Optional*): [Payload encryption key](http://owntracks.org/booklet/features/encrypt/). This is usable when communicating with a third-party untrusted server or a public server (where anybody can subscribe to any topic). By default the payload is assumed to be unencrypted (although the communication between Home Assistant and the server might still be encrypted). This feature requires the `libsodium` library to be present. +- **mqtt_topic** (*Optional*): The topic to subscribe for Owntracks updates on your MQTT instance (defaults to `owntracks/#`). +- **events_only** (*Optional*): Home Assistant will ignore all location updates and rely solely on geofence enter/leave events. +- **region_mapping** (*Optional*): Dictionary to remap names of regions as configured in the Owntracks app to Home Assistant zones. Use this if you have multiple homes or Home Assistant instances and want to map a different label to 'home'. `key: value` maps Owntracks region `key` to Home Assistant zone `value`. A full sample configuration for the `owntracks` platform is shown below: @@ -41,9 +44,14 @@ device_tracker: - platform: owntracks max_gps_accuracy: 200 waypoints: True + mqtt_topic: "owntracks/#" + events_only: True waypoint_whitelist: - jon - ram + region_mapping: + cabin: home + office: work ``` ### {% linkable_title Using Owntracks with other device trackers %} From f850f2e109708cd3b1504fdd071235b2855b7b92 Mon Sep 17 00:00:00 2001 From: timstanley1985 Date: Mon, 8 Jan 2018 16:07:54 +0000 Subject: [PATCH 049/993] MQTT json sensor attributes (#4334) * MQTT json sensor attributes * Add line break --- source/_components/sensor.mqtt.markdown | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/source/_components/sensor.mqtt.markdown b/source/_components/sensor.mqtt.markdown index 9a7e6c00de..2f80c563b1 100644 --- a/source/_components/sensor.mqtt.markdown +++ b/source/_components/sensor.mqtt.markdown @@ -72,7 +72,12 @@ payload_not_available: required: false type: string default: offline +json_attributes: + description: A list of keys to extract values from a JSON dictionary payload and then set as sensor attributes. + reqired: false + type: list, string {% endconfiguration %} + ## {% linkable_title Examples %} In this section you find some real life examples of how to use this sensor. From 18fe3e4452baece2e190d0409afff2050b62a577 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Mon, 8 Jan 2018 17:09:04 +0100 Subject: [PATCH 050/993] Add details for foreign exchange support (#4374) --- .../_components/sensor.alpha_vantage.markdown | 45 +++++++++++++++++-- 1 file changed, 41 insertions(+), 4 deletions(-) diff --git a/source/_components/sensor.alpha_vantage.markdown b/source/_components/sensor.alpha_vantage.markdown index 3e78232b24..29712a8d0c 100644 --- a/source/_components/sensor.alpha_vantage.markdown +++ b/source/_components/sensor.alpha_vantage.markdown @@ -33,21 +33,58 @@ api_key: symbols: description: List of stock market symbols for given companies. required: false - type: string, list default: GOOGL + type: map + keys: + name: + description: The name of the sensor to use for the frontend. + required: false + type: string + currency: + description: The name of the sensor to use for the frontend. + required: false + type: string + default: USD + symbol: + description: The stock market symbol for the given company. + required: required + type: string +foreign_exchange: + description: List of currencies. + type: map + required: false + keys: + name: + description: The name of the sensor to use for the frontend. + required: false + type: string + from: + description: The source currency. + required: required + type: string + to: + description: The target currency. + required: required + type: string {% endconfiguration %} ## {% linkable_title Examples %} In this section you find some real life examples of how to use this sensor. -### {% linkable_title Red Hat and Google %} +### {% linkable_title Google and the exchange rate for Bitcoin %} ```yaml sensor: - platform: alpha_vantage + api_key: YOUR_API_KEY symbols: - - RHT - - GOOGL + - name: Google + currency: USD + symbol: GOOGL + foreign_exchange: + - from: BTC + to: USD + name: Bitcoin ``` From 7c47fac5671815b2b7e15f916ec40728217f663d Mon Sep 17 00:00:00 2001 From: Cameron Llewellyn Date: Mon, 8 Jan 2018 11:18:54 -0600 Subject: [PATCH 051/993] Update insteon local documentation (#4198) * Update insteon local documentation * Update Insteon_local Changes * Small docs cleanup * Remove duplicated config info --- source/_components/fan.insteon_local.markdown | 19 +----------------- source/_components/insteon_local.markdown | 14 ++----------- .../_components/light.insteon_local.markdown | 20 +------------------ .../_components/switch.insteon_local.markdown | 18 +---------------- 4 files changed, 5 insertions(+), 66 deletions(-) diff --git a/source/_components/fan.insteon_local.markdown b/source/_components/fan.insteon_local.markdown index 8476fc43d0..359f099477 100644 --- a/source/_components/fan.insteon_local.markdown +++ b/source/_components/fan.insteon_local.markdown @@ -14,21 +14,4 @@ ha_version: 0.48 The `insteon_local` fan component lets you control your fan connected to an [Insteon Hub](http://www.insteon.com/insteon-hub/) with Home Assistant. -To integrate add a fan, configure your hub Insteon(local) with Home Assistant, add the following section to your `configuration.yaml` file: - -```yaml -# Example configuration.yaml platform entry -insteon_local: - host: YOUR HUB IP - username: YOUR HUB USERNAME - password: YOUR HUB PASSWORD - timeout: 10 - port: 25105 -``` - -To add fans to your set-up, add the platform to your light configuration: -```yaml -fan: - - platform: insteon_local -``` - +To get your insteon fans working with Home Assistant, follow the instructions for the general [Insteon local component](/components/insteon_local/). The fans will be automatically disovered and added to Home Assistant. The device names will be the Insteon address of the fans. diff --git a/source/_components/insteon_local.markdown b/source/_components/insteon_local.markdown index 96a339f0f0..fba1087171 100644 --- a/source/_components/insteon_local.markdown +++ b/source/_components/insteon_local.markdown @@ -33,9 +33,9 @@ Configuration variables: - **timeout** (*Optional*): Timeout to wait for connections. Defaults to 10 seconds. - **port** (*Optional*): The port your hub is configured to listen to. Defaults to `25105`. -### {% linkable_title Full configuration %} +### {% linkable_title Full configuration %} -The `insteon_local` component currently supports both lights (dimmers) and switches. A full configuration may look like so: +The `insteon_local` component currently supports lights (dimmers), switches and fans. ```yaml insteon_local: @@ -44,14 +44,4 @@ insteon_local: password: YOUR HUB PASSWORD timeout: 10 port: 25105 - -light: - - platform: insteon_local - -switch: - - platform: insteon_local - -fan: - - platform: insteon_local ``` - diff --git a/source/_components/light.insteon_local.markdown b/source/_components/light.insteon_local.markdown index 14f91598c9..06af902dfd 100644 --- a/source/_components/light.insteon_local.markdown +++ b/source/_components/light.insteon_local.markdown @@ -15,22 +15,4 @@ ha_iot_class: "Local Push" The `insteon_local` light component lets you control your lights connected to an [Insteon Hub](http://www.insteon.com/insteon-hub/) with Home Assistant. -To integrate add a light, configure your hub Insteon(local) with Home Assistant, add the following section to your `configuration.yaml` file: - -```yaml -# Example configuration.yaml platform entry -insteon_local: - host: YOUR HUB IP - username: YOUR HUB USERNAME - password: YOUR HUB PASSWORD - timeout: 10 - port: 25105 -``` - -To add lights (dimmers) to your set-up, add the platform to your light configuration: - -```yaml -light: - - platform: insteon_local -``` - +To get your insteon lights working with Home Assistant, follow the instructions for the general [Insteon local component](/components/insteon_local/). The lights will be automatically disovered and added to Home Assistant. The device names will be the Insteon address of the lights. diff --git a/source/_components/switch.insteon_local.markdown b/source/_components/switch.insteon_local.markdown index 0200b5cd43..0d8c71aa8d 100644 --- a/source/_components/switch.insteon_local.markdown +++ b/source/_components/switch.insteon_local.markdown @@ -14,20 +14,4 @@ ha_version: 0.36 The `insteon_local` switch component lets you control your switches connected to an [Insteon Hub](http://www.insteon.com/insteon-hub/) with Home Assistant. -To integrate add a switch, configure your hub Insteon(local) with Home Assistant, add the following section to your `configuration.yaml` file: -```yaml -# Example configuration.yaml platform entry -insteon_local: - host: YOUR HUB IP - username: YOUR HUB USERNAME - password: YOUR HUB PASSWORD - timeout: 10 - port: 25105 -``` - -To add switches to your set-up, add the platform to your light configuration: -```yaml -switch: - - platform: insteon_local -``` - +To get your insteon switches working with Home Assistant, follow the instructions for the general [Insteon local component](/components/insteon_local/). The switches will be automatically disovered and added to Home Assistant. The device names will be the Insteon address of the switch. From 08b3c109cc63f719be297bc1711843f9563341ef Mon Sep 17 00:00:00 2001 From: Sean Wilson Date: Tue, 9 Jan 2018 15:59:04 -0500 Subject: [PATCH 052/993] Add monitored_conditions documentation. (#4303) * Add monitored_conditions documentation. * Remove monitored_conditions from example * Add missing 'week' monitored_condition --- source/_components/sensor.zoneminder.markdown | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/source/_components/sensor.zoneminder.markdown b/source/_components/sensor.zoneminder.markdown index 5ab384d002..e60e274205 100644 --- a/source/_components/sensor.zoneminder.markdown +++ b/source/_components/sensor.zoneminder.markdown @@ -32,3 +32,10 @@ sensor: Configuration variables: - **include_archived** (*Optional*): Whether to include archived ZoneMinder events in event counts. Default is `false`. +- **monitored_conditions** array (*Optional*): Event count sensors to display in the frontend. Default is 'all'. + - **all**: All events. + - **month**: Events in the last month. + - **week**: Events in the last week. + - **day**: Events in the last day. + - **hour**: Events in the last hour. + From 4d46155c4dec9d4ff64753b4c45e02c271a351e1 Mon Sep 17 00:00:00 2001 From: Eric Pignet Date: Wed, 10 Jan 2018 14:05:32 +1100 Subject: [PATCH 053/993] Doc for Squeezebox new services (#4142) * Add service squeezebox_call_method to Squeezebox doc * Update media_player.squeezebox.markdown * Add Squeezebox as supporting shuffle_set * Adapted to component's pull request feedback --- source/_components/media_player.markdown | 2 +- .../media_player.squeezebox.markdown | 22 +++++++++++++++++++ 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/source/_components/media_player.markdown b/source/_components/media_player.markdown index 18350ce132..5e19cf34e9 100644 --- a/source/_components/media_player.markdown +++ b/source/_components/media_player.markdown @@ -58,7 +58,7 @@ Available services: `turn_on`, `turn_off`, `toggle`, `volume_up`, `volume_down`, #### {% linkable_title Service `media_player/shuffle_set` %} -Currently only supported on [Spotify](/components/media_player.spotify/), [MPD](/components/media_player.mpd/), [Kodi](/components/media_player.kodi/), and [Universal](/components/media_player.universal/). +Currently only supported on [Spotify](/components/media_player.spotify/), [MPD](/components/media_player.mpd/), [Kodi](/components/media_player.kodi/), [Squeezebox](/components/media_player.squeezebox/) and [Universal](/components/media_player.universal/). | Service data attribute | Optional | Description | | ---------------------- | -------- | ---------------------------------------------------- | diff --git a/source/_components/media_player.squeezebox.markdown b/source/_components/media_player.squeezebox.markdown index d091d13b6d..b226960e31 100644 --- a/source/_components/media_player.squeezebox.markdown +++ b/source/_components/media_player.squeezebox.markdown @@ -33,3 +33,25 @@ Configuration variables: - **password** (*Optional*): The password, if password protection is enabled.

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

+ +### {% linkable_title Service `squeezebox_call_method` %} + +Call a custom Squeezebox JSONRPC API. + +See documentation for this interface on http://HOST:PORT/html/docs/cli-api.html?player= where HOST and PORT are the host name and port for your Logitech Media Server. + +| Service data attribute | Optional | Description | +| ---------------------- | -------- | ----------- | +| `entity_id` | no | Name(s) of the Squeezebox entities where to run the API method. +| `command` | no | Command to pass to Logitech Media Server (p0 in the CLI documentation). +| `parameters` | yes | Array of additional parameters to pass to Logitech Media Server (p1, ..., pN in the CLI documentation). + +This service can be used to integrate any Squeezebox action to an automation. + +It can also be used to target a Squeezebox from IFTT (or DialogFlow, Alexa...). + +For example, to play an album from your collection, create an IFTT applet like this: +- Trigger: Google assistant, with sentence: `I want to listen to album $` +- Action: JSON post query with such JSON body: +`{ "entity_id": "media_player.squeezebox_radio", "command": "playlist", "parameters": ["loadtracks", "album.titlesearch={{TextField}}"] }` +This can work with title search and basically any thing. The same wouldn't have worked by calling directly Squeezebox server as IFTT cannot escape the text field. From 9109d9d67ffd725c1bd9b9b23e7dbb31fabc78cf Mon Sep 17 00:00:00 2001 From: Nolan Gilley Date: Wed, 10 Jan 2018 18:42:41 -0500 Subject: [PATCH 054/993] Add coinbase component and sensor (#4168) * coinbase. pr 11036 * Update coinbase.markdown * exchange rate sensors * Update coinbase.markdown * Update sensor.coinbase.markdown * Update coinbase.markdown --- source/_components/coinbase.markdown | 47 ++++++++++++++++++++ source/_components/sensor.coinbase.markdown | 15 +++++++ source/images/supported_brands/coinbase.png | Bin 0 -> 37777 bytes 3 files changed, 62 insertions(+) create mode 100644 source/_components/coinbase.markdown create mode 100644 source/_components/sensor.coinbase.markdown create mode 100755 source/images/supported_brands/coinbase.png diff --git a/source/_components/coinbase.markdown b/source/_components/coinbase.markdown new file mode 100644 index 0000000000..d39e34e3a7 --- /dev/null +++ b/source/_components/coinbase.markdown @@ -0,0 +1,47 @@ +--- +layout: page +title: "coinbase" +description: "Instructions for how to add Coinbase sensors to Home Assistant." +date: 2017-12-08 17:54 +sidebar: true +comments: false +sharing: true +footer: true +logo: coinbase.png +ha_release: 0.61 +ha_iot_class: "Cloud Polling" +--- + + +The `coinbase` component lets you access account balances and exchange rates from [coinbase](https://coinbase.com). + +You will need to obtain an API key from coinbase's [developer site](https://www.coinbase.com/settings/api) to use this component. You need to give read access to `wallet:accounts` in order for the component to access relevant data. + +To set it up, add the following information to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +coinbase: + api_key: asdfghjklqwertyuiopzxcvbnm + api_secret: nkjnewncfghjklqwertyuiopzxcvbnm + exchange_rate_currencies: + - BTC + - ETH + - LTC +======= +``` + +{% configuration %} +api_key: + description: Your API key to access coinbase. + required: true + type: string +api_secret: + description: Your API secret to access coinbase. + required: true + type: string +exchange_rate_currencies: + description: List of currencies to create exchange rate sensors for. + required: false + type: list +{% endconfiguration %} diff --git a/source/_components/sensor.coinbase.markdown b/source/_components/sensor.coinbase.markdown new file mode 100644 index 0000000000..89c06fc6f3 --- /dev/null +++ b/source/_components/sensor.coinbase.markdown @@ -0,0 +1,15 @@ +--- +layout: page +title: "Coinbase Sensor" +description: "Instructions how to setup Coinbase sensors within Home Assistant." +date: 2017-12-08 18:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: coinbase.png +ha_category: Sensor +ha_release: 0.61 +--- + +To get your coinbase sensors working with Home Assistant, follow the instructions for the general [Coinbase component](/components/coinbase/). diff --git a/source/images/supported_brands/coinbase.png b/source/images/supported_brands/coinbase.png new file mode 100755 index 0000000000000000000000000000000000000000..03f5018cae890348203e3f0a777e4293e10071d0 GIT binary patch literal 37777 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

!xj+OVVkF*suG!SnF=yf}`YE2EKdVZk$} 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 Date: Thu, 11 Jan 2018 16:48:28 +0100 Subject: [PATCH 055/993] Included note instructing to enclose Norwegian language code in quotes to avoid it being evaluated as a boolean. (#4393) --- source/_components/binary_sensor.workday.markdown | 1 + 1 file changed, 1 insertion(+) diff --git a/source/_components/binary_sensor.workday.markdown b/source/_components/binary_sensor.workday.markdown index 3864850d14..7730c514fe 100644 --- a/source/_components/binary_sensor.workday.markdown +++ b/source/_components/binary_sensor.workday.markdown @@ -37,6 +37,7 @@ Configuration variables: Days are specified as follows: `mon`, `tue`, `wed`, `thu`, `fri`, `sat`, `sun`. The keyword `holiday` is used for public holidays identified by the holidays module.

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

From 06fe679bd8abc574d2a8cbcb71168c1aca2b7ec6 Mon Sep 17 00:00:00 2001 From: Mitko Masarliev Date: Thu, 11 Jan 2018 22:23:47 +0200 Subject: [PATCH 056/993] PR#11027 (#4196) --- source/_components/notify.webostv.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/notify.webostv.markdown b/source/_components/notify.webostv.markdown index 408c31eef0..8064c8fbf8 100644 --- a/source/_components/notify.webostv.markdown +++ b/source/_components/notify.webostv.markdown @@ -33,7 +33,7 @@ Configuration variables: - **host** (*Required*): The IP of the LG WebOS Smart TV, e.g. 192.168.0.10 - **name** (*Required*): The name you would like to give to the LG WebOS Smart TV. - **filename** (*Optional*): The filename where the pairing key with the TV should be stored. This path is relative to Home Assistant's config directory. It defaults to `webostv.conf`. -- **icon** (*Optional*): The path to an image file to use as the icon in notifications. If provided, this image will override the Home Assistant logo. +- **icon** (*Optional*): The path to an image file to use as the icon in notifications. A possible automation could be: From fa13b976188d4b4791e20d551e3da575d2105456 Mon Sep 17 00:00:00 2001 From: Bob Anderson Date: Thu, 11 Jan 2018 13:17:05 -0800 Subject: [PATCH 057/993] Add note about ordering (#4289) * add note about ordering, matching PR #11340 in HA * :pencil2: Grammar --- source/_components/history.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/history.markdown b/source/_components/history.markdown index b7cd506edd..4bddad4fbb 100644 --- a/source/_components/history.markdown +++ b/source/_components/history.markdown @@ -71,7 +71,7 @@ history: - media_player ``` -Use the `include` list to define the domains/entities to display, and exclude some of them with in the `exclude` list. This makes sense if you for instance include the `sensor` domain, but want to exclude some specific sensors. Instead of adding every sensor entity to the `include` `entities` list just include the `sensor` domain and exclude the sensor entities you are not interested in. +Use the `include` list to define the domains/entities to display, and exclude some of them within the `exclude` list. This makes sense if you, for instance, include the `sensor` domain, but want to exclude some specific sensors. Instead of adding every sensor entity to the `include` `entities` list just include the `sensor` domain and exclude the sensor entities you are not interested in. Note that the order of any `include` `entities` will be displayed as listed in the configuration, otherwise, the display order is arbitrary. ```yaml # Example configuration.yaml entry with include and exclude From b4b0972cc54a3a06535de47b2da3922080c4f114 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Thu, 11 Jan 2018 13:45:14 -0800 Subject: [PATCH 058/993] Add docs for entity_config for Google Assistant and Alexa (#4386) * Update cloud docs and google assistant docs * Unpublish Google Assistant * :pencil2: Grammar * :pencil2: Missing comma * :pencil2: Spelling & grammar --- source/_components/cloud.alexa.markdown | 119 ++++++++++++++++ .../cloud.google_assistant.markdown | 98 +++++++++++++ source/_components/cloud.markdown | 106 +++----------- source/_components/google_assistant.markdown | 131 +++++++++++------- ...-introducing-home-assistant-cloud.markdown | 4 +- source/index.html | 2 +- 6 files changed, 324 insertions(+), 136 deletions(-) create mode 100644 source/_components/cloud.alexa.markdown create mode 100644 source/_components/cloud.google_assistant.markdown diff --git a/source/_components/cloud.alexa.markdown b/source/_components/cloud.alexa.markdown new file mode 100644 index 0000000000..81a4b09eac --- /dev/null +++ b/source/_components/cloud.alexa.markdown @@ -0,0 +1,119 @@ +--- +layout: page +title: "Alexa via Home Assistant Cloud" +description: "Enable the Alexa integration via Home Assistant Cloud integration." +date: 2017-11-17 20:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: home-assistant.png +ha_release: 0.60 +ha_category: Cloud +ha_iot_class: "Cloud Push" +--- + +The Alexa integration allows users to control the entities via the [Home Assistant Smart Home skill for Alexa][alexa skill]. This means that you can say things like "Alexa, turn on the kitchen light" to control your local Home Assistant. + +To use this integration, you need to have: + + - The cloud component set up. [Learn more](/components/cloud/) + - An Alexa enabled device like the Amazon Echo + - Activated the [Home Assistant Smart Home skill for Alexa][alexa skill] + +

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

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

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

+ +The Home Assistant Cloud allows you to quickly integrate your local Home Assistant with various cloud services like Amazon Alexa. + +The following integrations are currently available: + + - [Amazon Alexa (Amazon Echo)](/components/cloud.alexa/) + + + +### {% linkable_title How does it work? %} + +The Home Assistant Cloud has been designed with security in mind. When you activate the Cloud component, your instance will create a secure connection to the Home Assistant Cloud. There is no need for any further configuration or to expose your instance to the internet. + +Integrations like Alexa will deliver messages to our cloud which we will forward to your local instance for processing. We just forward the response back to Alexa. This means that we do not have to store the state of your house in our cloud, we’re just the messenger! + +You can find a list of frequently asked questions (and their answers) in [this blog post](/blog/2017/12/17/introducing-home-assistant-cloud/#faq). + +### {% linkable_title Enabling the cloud %} + +The Home Assistant Cloud is enabled by default. If not, add this to your configuration: ```yaml # Example configuration.yaml entry to enable the cloud component cloud: ``` -Once activated, go to the configuration panel in Home Assistant and create an account and log in. There is no need to configure your router or expose your instance to the internet in any other way. - -If you are not seeing the **Configuration** panel, make sure you have the following option enabled in your configuration.yaml` file. +Once activated, go to the configuration panel in Home Assistant and create an account and log in. If you are not seeing the **Configuration** panel, make sure you have the following option enabled in your configuration.yaml` file. ```yaml config: ``` - -### {% linkable_title Amazon Alexa %} - -The Alexa integration allows users to control the entities via the [Home Assistant Smart Home skill for Alexa][alexa skill]. This means that you can say things like "Alexa, turn on the kitchen light" to control your local instance. - -```yaml -# Example configuration.yaml entry configuring Alexa -cloud: - alexa: - filter: - include_entities: - - light.kitchen - include_domains: - - switch - exclude_entities: - - light.living_room - exclude_domains: - - script -``` - -{% configuration %} -alexa: - description: Configuration options for the Amazon Alexa integration. - required: false - type: map - keys: - filter: - description: Filters for entities to include/exclude from Alexa. - required: false - type: map - keys: - include_entities: - description: Entity IDs to include. - required: false - type: list - include_domains: - description: Domains to include. - required: false - type: list - exclude_entities: - description: Entity IDs to exclude. - required: false - type: list - exclude_domains: - description: Domains to exclude. - required: false - type: list -{% endconfiguration %} - -### {% linkable_title Possible values for customize %} - -| Attribute | Description | -| --------- | ----------- | -| `alexa_hidden` | Hide the entity from the Alexa smart home devices. -| `alexa_name` | Defines name of the entity for a Alexa smart home device. Useful if you have an entity with a friendly name in a local language that you want to access using an English sounding name. -| `alexa_description` | The description of the device in the Alexa smart home device list. -| `alexa_display_categories` | Set displayCategories, useful for things like media_player (TV/SPEAKERS) or scene (ACTIVITY_TRIGGER/SCENE_TRIGGER). More info can be found [here](https://developer.amazon.com/docs/device-apis/alexa-discovery.html#display-categories). - -### {% linkable_title Available domains %} -Currently, the following domains are available to be used with Alexa: -- alert -- automation (enables/disables) -- cover -- fan (supports on/off and set speed) -- group -- input_boolean -- light -- lock (lock and unlock, but unlock is untested as Amazon has disabled unlock for now) -- media_player (play, pause, stop, set volume, adjust volume, next track and previous track) -- scene -- script (enables/disables) -- switch - -[alexa skill]: https://alexa.amazon.com/spa/index.html#skills/dp/B0772J1QKB/?ref=skill_dsk_skb_sr_2 - -### {% linkable_title Frequently Asked Questions %} - -You can find a list of frequently asked questions (and their answers) in [this blog post](https://home-assistant.io/blog/2017/12/17/introducing-home-assistant-cloud/#faq). diff --git a/source/_components/google_assistant.markdown b/source/_components/google_assistant.markdown index 1e27ce6cc3..8d52c96919 100644 --- a/source/_components/google_assistant.markdown +++ b/source/_components/google_assistant.markdown @@ -18,7 +18,7 @@ The `google_assistant` component allows you to control things via Google Assista The Google Assistant component requires a bit more setup than most due to the way Google requires Assistant Apps to be set up.

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

To enable this, add the following lines to your `configuration.yaml` file: @@ -35,26 +35,77 @@ google_assistant: - switch - light - group + entity_config: + switch.kitchen: + name: Custom Name for Alexa + aliases: + - bright lights + - entry lights + type: 'action.devices.types.LIGHT' + light.living_room: + expose: false ``` Configuration variables: -- **expose_by_default** (*Optional*): Expose devices in all supported domains by default. -- **project_id** (*Required*): Project ID from the Google Developer console (looks like `words-2ab12`) -- **client_id** (*Required*): A long random URL safe string (no spaces or special characters) that will be used for Implicit OAuth. -- **access_token** (*Required*): Another different long random URL safe string. -- **agent_user_id** (*Optional*): A string to identify the user, e.g., email address. If not provided, the component will generate one. -- **api_key** (*Optional*): An API Key generated for the project from [Google Console](https://console.cloud.google.com/apis/api/homegraph.googleapis.com/overview) which allows you to update devices without unlinking and relinking an account (see setup below). If not provided then the request_sync service is not exposed. -- **exposed_domains** (*Optional*): An array of Home Assistant domains to expose to Google Assistant. Options include: - - `switch` - - `light` - - `cover` - - `media_player` - - `group` - - `fan` - - `scene` - - `script` - - `climate` +{% configuration %} + +project_id: + description: Project ID from the Google Developer console (looks like `words-2ab12`) + required: true + type: string +client_id: + description: A long random URL safe string (no spaces or special characters) that will be used for Implicit OAuth (example `aBcDeFgHiJkLmNoP`) + required: true + type: string +access_token: + description: Another different long random URL safe string (example `aBcDeFgHiJkLmNoP`) + required: true + type: string +agent_user_id: + description: A string to identify the user, e.g., email address. If not provided, the component will generate one. + required: false + type: string +api_key: + description: An API Key generated for the project from [Google Console](https://console.cloud.google.com/apis/api/homegraph.googleapis.com/overview) which allows you to update devices without unlinking and relinking an account (see setup below). If not provided then the request_sync service is not exposed. + required: false + type: string +expose_by_default: + description: Expose devices in all supported domains by default. + required: false + default: True + type: boolean +exposed_domains: + description: List of entity domains to expose to Google Assistant. + required: false + type: list +entity_config: + description: Entity specific configuration for Google Assistant + required: false + type: map + keys: + '``': + description: Entity to configure + required: false + type: map + keys: + name: + description: Name of the entity to show in Google Assistant + required: false + type: string + expose: + description: Force an entity to be exposed/excluded. + required: false + type: boolean + aliases: + description: Aliases that can also be used to refer to this entity + required: false + type: list + type: + description: Override the type of the entity in Google Assistant. [List of available types](https://developers.google.com/actions/smarthome/guides/) + required: false + type: string +{% endconfiguration %} It's very important that you use very long strings for `client_id` and `access_token`. Those are essentially the credentials to your Home Assistant instance. You can generate them with the following command: @@ -64,31 +115,6 @@ $ cat /dev/urandom | fold -w 120 | head -n 1 | base64 -w 0 | tr -dc '0-9A-Za-z' If you're not using Linux, you can use sites such as [this one](https://www.browserling.com/tools/random-string) to generate a random string (containing mixed case letters and numbers) of up to 80 characters. - -You can also customize your devices similar to other components by adding keys to entities: - -```yaml -homeassistant: - customize: - master_bedroom_light: - google_assistant: true - google_assistant_name: bedroom light - bedroom_blinds: - aliases: - - bedroom shades - - bedroom covers - hallway_ceiling_switch: - google_assistant: true - google_assistant_type: light -``` - -Entity Customization Keys: - -- **google_assistant**: True exposes entity, false will hide it. -- **google_assistant_name**: Can be used to override the primary name of an entity. By default the `friendly_name` of an entity is used. -- **google_assistant_type**: Can be used to override the domain/type of an entity. For example a switch can be treated as a light -- **aliases**: Provides "nicknames" to Google Assistant. These function as alternate names for an entity that Assistant will understand when spoken. - ### {% linkable_title Setup %} 1. Download the [gactions CLI](https://developers.google.com/actions/tools/gactions-cli) (you'll use this later) - you can download and run this anywhere and on any machine, just remember where you put it for later (and don't forget to run `chmod +x gactions`to make it executable on mac or linux) @@ -132,8 +158,8 @@ Entity Customization Keys: 8. If you haven't already added the component configuration to `configuration.yaml` and restarted Home Assistant, you'll be unable to continue until you have. 8. Open the Google Assistant app and go into `Settings > Home Control` 9. Click the `+` sign, and near the bottom, you should have `[test] your app name`. Selecting that should lead to you the screen where you can set rooms for your devices or nicknames for your devices. -10. If you want to allow other houshold users to control the devices: - 1. Go to the developer console using address from point 4. +10. If you want to allow other household users to control the devices: + 1. Go to the developer console using the address from point 4. 2. Under the gear icon, click `Permissions` 3. Click `Add`, type the new user's e-mail address and choose `Project -> Editor` role 4. Have the new user go to [developer console](https://console.actions.google.com/) and repeat steps starting from point 7. @@ -143,11 +169,14 @@ Entity Customization Keys: 3. Go to Credentials and select API Key from Create Credentials 4. Note down the generated API Key and use this in the configuration -*Note:* The request_sync service requires that the initial sync from Google includes the agent_user_id. If not, the service will log an error that reads something like "Request contains an invalid argument". If this happens, then [unlink the account](https://support.google.com/googlehome/answer/7506443?hl=en-GB) from Home Control and relink. +### {% linkable_title Troubleshooting the request_sync service %} -*Note:* The request_sync service may fail with a 404 if the project_id of the Homegraph API differs from the project_id of the Actions SDK found in the preferences of your project on [developer console](https://console.actions.google.com). Resolve this by: - 1. Removing your project on the [developer console](https://console.actions.google.com). - 2. Add a new project in the [cloud console](https://console.cloud.google.com). Here you get a new project_id. - 3. Enable Homegraph API to the new project. - 4. Generete a new API key. - 5. Again create a new project in the [developer console](https://console.actions.google.com/). Described above. But at the step 'Build under the Actions SDK box' choose your newly created project. By this they share the same project_id. +The request_sync service requires that the initial sync from Google includes the agent_user_id. If not, the service will log an error that reads something like "Request contains an invalid argument". If this happens, then [unlink the account](https://support.google.com/googlehome/answer/7506443?hl=en-GB) from Home Control and relink. + +The request_sync service may fail with a 404 if the project_id of the Homegraph API differs from the project_id of the Actions SDK found in the preferences of your project on [developer console](https://console.actions.google.com). Resolve this by: + + 1. Removing your project from the [developer console](https://console.actions.google.com). + 2. Add a new project to the [cloud console](https://console.cloud.google.com). Here you get a new project_id. + 3. Enable Homegraph API to the new project. + 4. Generate a new API key. + 5. Again create a new project in the [developer console](https://console.actions.google.com/). Described above. But at the step 'Build under the Actions SDK box' choose your newly created project. By this, they share the same project_id. diff --git a/source/_posts/2017-12-17-introducing-home-assistant-cloud.markdown b/source/_posts/2017-12-17-introducing-home-assistant-cloud.markdown index ddc52e5ab7..b55eabb3e3 100644 --- a/source/_posts/2017-12-17-introducing-home-assistant-cloud.markdown +++ b/source/_posts/2017-12-17-introducing-home-assistant-cloud.markdown @@ -14,7 +14,9 @@ Today we’re introducing the next step in the Home Assistant saga: the Home Ass The first service that is supported via the Home Assistant Cloud is the Amazon Alexa Smart Home skill. This integration will allow you to control all your devices in Home Assistant via Amazon Alexa. You will be able to say _“Alexa, turn on the kitchen lights”_ and your local Home Assistant will turn on the lights. Because Alexa talks to Home Assistant, it doesn’t matter what kind of lights they are! Anything that is linked to Home Assistant will work. IKEA lights, a 10 year old X10 switch or something you’ve made yourself. As long as Home Assistant can control it, you can control it via Alexa. -We have designed the Home Assistant Cloud with security in mind. When you activate the new Cloud component, your instance will setup a secure connection to the Home Assistant Cloud. Alexa will deliver messages to our cloud which we will forward to your local instance for processing. We just forward the response back to Alexa. This means that we do not have to store the state of your house in our cloud, we’re just the messenger! +We have designed the Home Assistant Cloud with security in mind. When you activate the new Cloud component, your instance will create a secure connection to the Home Assistant Cloud. There is no need for any further configuration or to expose your instance to the internet. + +Integrations like Alexa will deliver messages to our cloud which we will forward to your local instance for processing. We just forward the response back to Alexa. This means that we do not have to store the state of your house in our cloud, we’re just the messenger! We are making the beta of the Home Assistant Cloud publicly available today. During the beta period the Home Assistant Cloud will be free to use. We are currently planning to run a beta till March 1, 2018 0:00 UTC. Once the beta ends, the Home Assistant Cloud will be part of our Community Support package which will run at $5 USD/month. diff --git a/source/index.html b/source/index.html index 173bef72c1..a847b2632b 100644 --- a/source/index.html +++ b/source/index.html @@ -38,7 +38,7 @@ description: Open-source home automation platform running on Python 3. Track and Use Alexa to control Home Assistant. From 88932265276720993e1f2736c01efc098955e861 Mon Sep 17 00:00:00 2001 From: Marius Date: Thu, 11 Jan 2018 23:52:49 +0200 Subject: [PATCH 059/993] Updated generic thermostat documentation (#4285) * Updated documentation for PR https://github.com/home-assistant/home-assistant/pull/11325/files * Updated documentation to match implementation using only one away_temp * Updated documentation to add back initial_operation_mode avoiding breaking change * :pencil2: Minor grammar --- .../climate.generic_thermostat.markdown | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/source/_components/climate.generic_thermostat.markdown b/source/_components/climate.generic_thermostat.markdown index 180f67f04e..d816c7ac5f 100644 --- a/source/_components/climate.generic_thermostat.markdown +++ b/source/_components/climate.generic_thermostat.markdown @@ -14,7 +14,7 @@ ha_iot_class: "Local Polling" --- -The `generic_thermostat` climate platform is a thermostat implemented in Home Assistant. It uses a sensor and a switch connected to a heater under the hood. If the measured temperature is cooler then the target temperature, the heater will be turned on and turned off when required temperature is reached. +The `generic_thermostat` climate platform is a thermostat implemented in Home Assistant. It uses a sensor and a switch connected to a heater or air conditioning under the hood. When in heater mode, if the measured temperature is cooler then the target temperature, the heater will be turned on and turned off when the required temperature is reached. When in air conditioning mode, if the measured temperature is hotter then the target temperature, the air conditioning will be turned on and turned off when required temperature is reached. ```yaml # Example configuration.yaml entry @@ -28,20 +28,25 @@ climate: Configuration variables: - **name** (*Required*): Name of thermostat -- **heater** (*Required*): `entity_id` for heater switch, must be a toggle device. +- **heater** (*Required*): `entity_id` for heater switch, must be a toggle device. Becomes air conditioning switch when `ac_mode` is set to `True` - **target_sensor** (*Required*): `entity_id` for a temperature sensor, target_sensor.state must be temperature. - **min_temp** (*Optional*): Set minimum set point available (default: 7) - **max_temp** (*Optional*): Set maximum set point available (default: 35) -- **target_temp** (*Optional*): Set initial target temperature. Failure to set this variable will result in target temperature being set to null on startup. As of version 0.59 it will retain the target temperature set before restart if this variable is not configured. +- **target_temp** (*Optional*): Set initial target temperature. Failure to set this variable will result in target temperature being set to null on startup. As of version 0.59, it will retain the target temperature set before restart if available. - **ac_mode** (*Optional*): Set the switch specified in the *heater* option to be treated as a cooling device instead of a heating device. - **min_cycle_duration** (*Optional*): Set a minimum amount of time that the switch specified in the *heater* option must be in it's current state prior to being switched either off or on. - **cold_tolerance** (*Optional*): Set a minimum amount of difference between the temperature read by the sensor specified in the *target_sensor* option and the target temperature that must change prior to being switched on. For example, if the target temperature is 25 and the tolerance is 0.5 the heater will start when the sensor equals or goes below 24.5. - **hot_tolerance** (*Optional*): Set a minimum amount of difference between the temperature read by the sensor specified in the *target_sensor* option and the target temperature that must change prior to being switched off. For example, if the target temperature is 25 and the tolerance is 0.5 the heater will stop when the sensor equals or goes above 25.5. -- **keep_alive** (*Optional*): Set a keep-alive interval. If set, the switch specified in the *heater* option will be triggered every time the interval elapses. Use with heaters and A/C units that shut off if they don't receive a signal from their remote for a while. +- **keep_alive** (*Optional*): Set a keep-alive interval. If set, the switch specified in the *heater* option will be triggered every time the interval elapses. Use with heaters and A/C units that shut off if they don't receive a signal from their remote for a while. Use also with switches that might lose state. The keep-alive call is done with the current valid climate component state (either on or off). - **initial_operation_mode** (*Optional*): Set the initial operation mode. Valid values are `off` or `auto`. Value has to be double quoted. If this parameter is not set, it is preferable to set a *keep_alive* value. This is helpful to align any discrepancies between *generic_thermostat* and *heater* state. +- **away_temp** (*Optional*): Set the temperature used by "away_mode" (default: 16). Please specify when using `ac_mode: True` to a higher value. A full configuration example looks like the one below. `min_cycle_duration` and `keep_alive` must contain at least one of the following entries: `days:`, `hours:`, `minutes:`, `seconds:` or `milliseconds:`. +Currently the `generic_thermostat` climate platform supports 'heat', 'cool' and 'off' operation modes. You can force your `generic_thermstat` to avoid starting by setting Operation to 'off'. + +Please note that changing Away Mode you will force a target temperature change as well that will get restored once the Away Mode is turned off. + ```yaml # Full example configuration.yaml entry climate: @@ -51,6 +56,7 @@ climate: target_sensor: sensor.study_temperature min_temp: 15 max_temp: 21 + ac_mode: False target_temp: 17 cold_tolerance: 0.3 hot_tolerance: 0 @@ -59,4 +65,5 @@ climate: keep_alive: minutes: 3 initial_operation_mode: "off" + away_temp: 16 ``` From 666c8657b0ed9fbfe59a9319380ea798fdd8c6e5 Mon Sep 17 00:00:00 2001 From: NotoriousBDG Date: Thu, 11 Jan 2018 17:00:32 -0500 Subject: [PATCH 060/993] Change default IMAP Email Content sensor value from body to subject (#4199) * Change default sensor value from body to subject * :pencil2: Grammar --- source/_components/sensor.imap_email_content.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/sensor.imap_email_content.markdown b/source/_components/sensor.imap_email_content.markdown index cb639b436c..35f9d2d694 100644 --- a/source/_components/sensor.imap_email_content.markdown +++ b/source/_components/sensor.imap_email_content.markdown @@ -38,7 +38,7 @@ Configuration variables: - **username** (*Required*): Username for the IMAP server. - **password** (*Required*): Password for the IMAP server. - **senders** (*Required*): A list of sender email addresses that are allowed to report state via email. Only emails received from these addresses will be processed. -- **value_template** (*Optional*): If specified this template will be used to render the state of sensor. If a template is not supplied the raw message body will be used for the sensor value. The following attributes will be supplied to the template: +- **value_template** (*Optional*): If specified this template will be used to render the state of the sensor. If a template is not supplied the message subject will be used for the sensor value. The following attributes will be supplied to the template: * **from**: The from address of the email * **body**: The body of the email From 78d5d8346885a9befa59f47da3cf4d60547ae665 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jason=20K=C3=B6lker?= Date: Sat, 13 Jan 2018 17:58:28 +0000 Subject: [PATCH 061/993] light/mqqt_json: document brightness scaling (#4403) --- source/_components/light.mqtt_json.markdown | 28 +++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/source/_components/light.mqtt_json.markdown b/source/_components/light.mqtt_json.markdown index d6ba5ad07d..d14f58001a 100644 --- a/source/_components/light.mqtt_json.markdown +++ b/source/_components/light.mqtt_json.markdown @@ -63,6 +63,11 @@ brightness: required: false type: boolean default: false +brightness_scale: + description: "Defines the maximum brightness value (i.e. 100%) of the MQTT device." + required: false + type: integer + default: 255 color_temp: description: Flag that defines if the light supports color temperature. required: false @@ -191,6 +196,29 @@ light: brightness: true ``` +### {% linkable_title Brightness Scaled %} + +To enable a light using a brightness scale other than 8bit the `brightness_scale` option may be added to denote the "fully on" value: +```yaml +# Example configuration.yaml entry +light: + - platform: mqtt_json + name: mqtt_json_light_1 + state_topic: "home/light" + command_topic: "home/light/set" + brightness: true + brightness_scale: 4095 +``` + +Home Assistant will then convert its 8bit value in the message to and from the device: + +```json +{ + "brightness": 4095, + "state": "ON", +} +``` + ### {% linkable_title Implementations %} - A full example of custom lighting using this platform and an ESP8266 microcontroller can be found [here](https://github.com/corbanmailloux/esp-mqtt-rgb-led). It supports on/off, brightness, transitions, RGB colors, and flashing. From 31d2f03fa61f404f32747feea6f01b6af58ae48e Mon Sep 17 00:00:00 2001 From: Andrew Cockburn Date: Sun, 14 Jan 2018 11:27:44 -0500 Subject: [PATCH 062/993] Update appdaemon.markdown --- source/_docs/ecosystem/appdaemon.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_docs/ecosystem/appdaemon.markdown b/source/_docs/ecosystem/appdaemon.markdown index ca2a59f65e..76edbc1dd5 100755 --- a/source/_docs/ecosystem/appdaemon.markdown +++ b/source/_docs/ecosystem/appdaemon.markdown @@ -107,4 +107,4 @@ Of course, if I wanted to make this App or its predecessor reusable, I would hav In addition, Apps can write to `AppDaemon`'s log files, and there is a system of constraints that allows you to control when and under what circumstances Apps and callbacks are active to keep the logic clean and simple. -For full installation instructions, see the [AppDaemon Project Documentation pages](http://appdaemon.readthedocs.io/en/latest/). +For full installation instructions, see the [AppDaemon Project Documentation pages](http://appdaemon.readthedocs.io/en/stable/). From fda2bca3c0589685edb1fc7101212c7423effe30 Mon Sep 17 00:00:00 2001 From: Lukas Barth Date: Sun, 14 Jan 2018 18:19:19 +0100 Subject: [PATCH 063/993] Document templates in MQTT climate (#4407) * document templates * Remove stale comment * Fix template --- source/_components/climate.mqtt.markdown | 58 +++++++++++++++++++++++- 1 file changed, 57 insertions(+), 1 deletion(-) diff --git a/source/_components/climate.mqtt.markdown b/source/_components/climate.mqtt.markdown index 03c5808ceb..85675df1f6 100644 --- a/source/_components/climate.mqtt.markdown +++ b/source/_components/climate.mqtt.markdown @@ -78,6 +78,10 @@ payload_not_available: required: false type: string default: offline +value_template: + description: Default template to render the payloads on *all* `*_state_topic`s with. + type: template + required: false current_temperature_topic: description: The MQTT topic on which to listen for the current temperature. required: false @@ -94,6 +98,10 @@ mode_state_topic: description: The MQTT topic to subscribe for changes of the HVAC operation mode. If this is not set, the operation mode works in optimistic mode (see below). required: false type: string +mode_state_template: + description: A template to render the value received on the `mode_state_topic` with. + required: false + type: template temperature_command_topic: description: The MQTT topic to publish commands to change the target temperature. required: false @@ -102,6 +110,10 @@ temperature_state_topic: description: The MQTT topic to subscribe for changes in the target temperature. If this is not set, the target temperature works in optimistic mode (see below). required: false type: string +temperature_state_template: + description: A template to render the value received on the `temperature_state_topic` with. + required: false + type: template fan_mode_command_topic: description: The MQTT topic to publish commands to change the fan mode. required: false @@ -110,6 +122,10 @@ fan_mode_state_topic: description: The MQTT topic to subscribe for changes of the HVAC fan mode. If this is not set, the fan mode works in optimistic mode (see below). required: false type: string +fan_mode_state_template: + description: A template to render the value received on the `fan_mode_state_topic` with. + required: false + type: template swing_mode_command_topic: description: The MQTT topic to publish commands to change the swing mode. required: false @@ -118,6 +134,10 @@ swing_mode_state_topic: description: The MQTT topic to subscribe for changes of the HVAC swing mode. If this is not set, the swing mode works in optimistic mode (see below). required: false type: string +swing_mode_state_template: + description: A template to render the value received on the `swing_mode_state_topic` with. + required: false + type: template away_mode_command_topic: description: The MQTT topic to publish commands to change the away mode. required: false @@ -126,6 +146,10 @@ away_mode_state_topic: description: The MQTT topic to subscribe for changes of the HVAC away mode. If this is not set, the away mode works in optimistic mode (see below). required: false type: string +away_mode_state_template: + description: A template to render the value received on the `away_mode_state_topic` with. + required: false + type: template hold_command_topic: description: The MQTT topic to publish commands to change the hold mode. required: false @@ -134,6 +158,10 @@ hold_state_topic: description: The MQTT topic to subscribe for changes of the HVAC hold mode. If this is not set, the hold mode works in optimistic mode (see below). required: false type: string +hold_state_template: + description: A template to render the value received on the `hold_state_topic` with. + required: false + type: template aux_command_topic: description: The MQTT topic to publish commands to switch auxiliary heat. required: false @@ -142,12 +170,40 @@ aux_state_topic: description: The MQTT topic to subscribe for changes of the auxiliary heat mode. If this is not set, the auxiliary heat mode works in optimistic mode (see below). required: false type: string +aux_state_template: + description: A template to render the value received on the `aux_state_topic` with. + required: false + type: template {% endconfiguration %} -#### Optimistic mode +#### {% linkable_title Optimistic mode %} If a property works in *optimistic mode* (when the corresponding state topic is not set), home assistant will assume that any state changes published to the command topics did work and change the internal state of the entity immediately after publishing to the command topic. If it does not work in optimistic mode, the internal state of the entity is only updated when the requested update is confirmed by the device through the state topic. +#### {% linkable_title Using Templates %} + +For all `*_state_topic`s, a template can be specified that will be used to render the incoming payloads on these topics. Also, a default template that applies to all state topis can be specified as `value_template`. This can be useful if you received payloads are e.g. in JSON format. Since in JSON, a quoted string (e.g. `"foo"`) is just a string, this can also be used for unquoting. + +Say you receive the operation mode `"auto"` via your `mode_state_topic`, but the mode is actually called just `auto`, here's what you could do: + +{% raw %} +```yaml +climate: + - platform: mqtt + name: Study + modes: + - off + - on + - auto + mode_command_topic: "study/ac/mode/set" + mode_state_topic: "study/ac/mode/state" + mode_state_template: "{{ value_json }}" +``` +{% endraw %} + +This will parse the incoming `"auto"` as JSON, resulting in `auto`. Obvisouly, in this case you could also just set `value_template: {% raw %}"{{ value_json }}"{% endraw %}`. + + ### {% linkable_title Example %} A full configuration example looks like the one below. From fbe44c115e8c610a4570e72e8340af4f87655179 Mon Sep 17 00:00:00 2001 From: Lukas Ecklmayr Date: Sun, 14 Jan 2018 20:34:48 +0100 Subject: [PATCH 064/993] fixed URL for github access token (#4415) --- source/_components/sensor.travisci.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/sensor.travisci.markdown b/source/_components/sensor.travisci.markdown index a3944d69a8..82698ab737 100644 --- a/source/_components/sensor.travisci.markdown +++ b/source/_components/sensor.travisci.markdown @@ -26,7 +26,7 @@ sensor: Configuration variables: -- **api_key** (*Required*): GitHub [access token](https://github.com/settings/applications) with the following scopes: *read:org*, *user:email*, *repo_deployment*, *repo:status*, *write:repo_hook*. +- **api_key** (*Required*): GitHub [access token](https://github.com/settings/tokens) with the following scopes: *read:org*, *user:email*, *repo_deployment*, *repo:status*, *write:repo_hook*. - **branch** (*Optional*): Determine which default branch should be used by the **state** condition. Defaults to *master*. - **scan_interval** (*Optional*): How frequently to query for new data. Defaults to 30 seconds. - **monitored_conditions** array (*Optional*): Conditions to display in the frontend. If not specified, all conditions below will be enabled by default. The following conditions can be monitored. From 394f9b5e94dbb8626f4377e3199305278c029b71 Mon Sep 17 00:00:00 2001 From: DubhAd Date: Sun, 14 Jan 2018 19:35:26 +0000 Subject: [PATCH 065/993] Clarifications (#4414) Added more words around the API key and request_sync to make it clearer they're linked, and what the API key is --- source/_components/google_assistant.markdown | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/source/_components/google_assistant.markdown b/source/_components/google_assistant.markdown index 1e27ce6cc3..ea966d4f4a 100644 --- a/source/_components/google_assistant.markdown +++ b/source/_components/google_assistant.markdown @@ -30,7 +30,7 @@ google_assistant: client_id: [long URL safe random string] access_token: [a different long URL safe random string] agent_user_id: [a string to identify user] - api_key: [an API Key generated for the Google Actions project] + api_key: [a Homegraph API Key generated for the Google Actions project] exposed_domains: - switch - light @@ -44,7 +44,7 @@ Configuration variables: - **client_id** (*Required*): A long random URL safe string (no spaces or special characters) that will be used for Implicit OAuth. - **access_token** (*Required*): Another different long random URL safe string. - **agent_user_id** (*Optional*): A string to identify the user, e.g., email address. If not provided, the component will generate one. -- **api_key** (*Optional*): An API Key generated for the project from [Google Console](https://console.cloud.google.com/apis/api/homegraph.googleapis.com/overview) which allows you to update devices without unlinking and relinking an account (see setup below). If not provided then the request_sync service is not exposed. +- **api_key** (*Optional*): A Homegraph API Key generated for the project from [Google Console](https://console.cloud.google.com/apis/api/homegraph.googleapis.com/overview) which allows you to update devices without unlinking and relinking an account (see setup below). If not provided then the request_sync service is not exposed. - **exposed_domains** (*Optional*): An array of Home Assistant domains to expose to Google Assistant. Options include: - `switch` - `light` @@ -137,7 +137,7 @@ Entity Customization Keys: 2. Under the gear icon, click `Permissions` 3. Click `Add`, type the new user's e-mail address and choose `Project -> Editor` role 4. Have the new user go to [developer console](https://console.actions.google.com/) and repeat steps starting from point 7. -11. If you want to use the `google_assistant.request_sync` service in Home Assistant, then enable Homegraph API for your project: +11. If you want to use the `google_assistant.request_sync` service, to update devices without unlinking and relinking, in Home Assistant, then enable Homegraph API for your project: 1. Go to the [cloud console](https://console.cloud.google.com/apis/api/homegraph.googleapis.com/overview) 2. Select your project and click Enable Homegraph API 3. Go to Credentials and select API Key from Create Credentials From 68bb69747742024092accbcd034b712cb4849f8a Mon Sep 17 00:00:00 2001 From: Lukas Ecklmayr Date: Sun, 14 Jan 2018 20:36:16 +0100 Subject: [PATCH 066/993] Update Docs to match regex for repository URL (#4413) Describe that https:// Repository URLs have to end with .git to match regex for repository URL. --- source/_addons/git_pull.markdown | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/_addons/git_pull.markdown b/source/_addons/git_pull.markdown index 126fab9c1a..e482db9509 100644 --- a/source/_addons/git_pull.markdown +++ b/source/_addons/git_pull.markdown @@ -13,7 +13,7 @@ Load and update configuration files for Home Assistant from a GIT repository. ```json { - "repository": "https://example.com/my_configs", + "repository": "https://example.com/my_configs.git", "auto_restart": false, "repeat": { "active": false, @@ -32,7 +32,7 @@ Load and update configuration files for Home Assistant from a GIT repository. } ``` -- **repository** (*Required*): GIT url to your repository. +- **repository** (*Required*): GIT url to your repository. You have to add .git to your GITHub-Repository-URL (see example Config) - **auto_restart** (*Optional*): Make a restart of Home-Assistant if the config have change and is valid. - **repeat/active** (*Optional*): Pull periodic for GIT updates. - **repeat/interval** (*Optional*): Pull all x seconds and look for changes. From 15ad1b35d332ec4d34cc7540e0839e135b7de3aa Mon Sep 17 00:00:00 2001 From: Aaron Bach Date: Sun, 14 Jan 2018 12:40:38 -0700 Subject: [PATCH 067/993] Added firmware version warning (#4411) --- source/_components/camera.yi.markdown | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/source/_components/camera.yi.markdown b/source/_components/camera.yi.markdown index d5f1fa4d1a..052e3b26d6 100644 --- a/source/_components/camera.yi.markdown +++ b/source/_components/camera.yi.markdown @@ -30,6 +30,10 @@ In order to integrate the camera with Home Assistant, it is necessary to install Once installed, please ensure that you have enabled FTP and Telnet on your device. +

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

+

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

From a489115a08b292cedbcc5a6d1adc0b3b15b50fc6 Mon Sep 17 00:00:00 2001 From: Conrad Juhl Andersen Date: Sun, 14 Jan 2018 20:49:13 +0100 Subject: [PATCH 068/993] Googleified the Google Assistant docs (#4404) --- source/_components/cloud.google_assistant.markdown | 4 ++-- source/_components/google_assistant.markdown | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/source/_components/cloud.google_assistant.markdown b/source/_components/cloud.google_assistant.markdown index 1ab00b8437..3dc3dde7cf 100644 --- a/source/_components/cloud.google_assistant.markdown +++ b/source/_components/cloud.google_assistant.markdown @@ -38,7 +38,7 @@ cloud: - switch.outside entity_config: switch.kitchen: - name: Custom Name for Alexa + name: Custom Name for Google Assistant aliases: - bright lights - entry lights @@ -52,7 +52,7 @@ google_actions: type: map keys: filter: - description: Filters for entities to include/exclude from Alexa. + description: Filters for entities to include/exclude from Google Assistant. required: false type: map keys: diff --git a/source/_components/google_assistant.markdown b/source/_components/google_assistant.markdown index 8d52c96919..5904ae734f 100644 --- a/source/_components/google_assistant.markdown +++ b/source/_components/google_assistant.markdown @@ -37,7 +37,7 @@ google_assistant: - group entity_config: switch.kitchen: - name: Custom Name for Alexa + name: Custom Name for Google Assistant aliases: - bright lights - entry lights From d5c3a8edab05ed2132a5a50089a950921c7be969 Mon Sep 17 00:00:00 2001 From: Nicko van Someren Date: Sun, 14 Jan 2018 13:15:27 -0700 Subject: [PATCH 069/993] Added page for new Lutron covers support. (#4400) * Added page for new Lutron covers support. * :pencil2: Added ha_release tag --- source/_components/cover.lutron.markdown | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 source/_components/cover.lutron.markdown diff --git a/source/_components/cover.lutron.markdown b/source/_components/cover.lutron.markdown new file mode 100644 index 0000000000..50cb5b1ef9 --- /dev/null +++ b/source/_components/cover.lutron.markdown @@ -0,0 +1,16 @@ +--- +layout: page +title: "Lutron Cover" +description: "Instructions how to setup the Lutron shades within Home Assistant." +date: 2018-01-11 20:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: lutron.png +ha_category: Cover +ha_iot_class: "Local Polling" +ha_release: 0.61 +--- + +To get your Lutron roller shades working with Home Assistant, follow the instructions for the general [Lutron component](/components/lutron/). From e32717db89d8a51fd0476cc753e661b2e7d5a9fe Mon Sep 17 00:00:00 2001 From: tschmidty69 Date: Sun, 14 Jan 2018 15:18:14 -0500 Subject: [PATCH 070/993] Snips say and say_action services (new) (#4399) * Update media_player.markdown * Update media_player.markdown * Update snips.markdown * Update media_player.markdown * Update snips.markdown --- source/_components/media_player.markdown | 4 +- source/_components/snips.markdown | 58 ++++++++++++++++++++++++ 2 files changed, 60 insertions(+), 2 deletions(-) diff --git a/source/_components/media_player.markdown b/source/_components/media_player.markdown index 5e19cf34e9..62c1af3a4c 100644 --- a/source/_components/media_player.markdown +++ b/source/_components/media_player.markdown @@ -14,7 +14,7 @@ Interacts with media players on your network. Please check the sidebar for a ful ## {% linkable_title Services %} ### {% linkable_title Media control services %} -Available services: `turn_on`, `turn_off`, `toggle`, `volume_up`, `volume_down`, `media_play_pause`, `media_play`, `media_pause`, `media_stop`, `media_next_track`, `media_previous_track`, `clear_playlist` +Available services: `turn_on`, `turn_off`, `toggle`, `volume_up`, `volume_down`, `volume_set`, `media_play_pause`, `media_play`, `media_pause`, `media_stop`, `media_next_track`, `media_previous_track`, `clear_playlist`, `shuffle_set` | Service data attribute | Optional | Description | | ---------------------- | -------- | ------------------------------------------------ | @@ -63,6 +63,6 @@ Currently only supported on [Spotify](/components/media_player.spotify/), [MPD]( | Service data attribute | Optional | Description | | ---------------------- | -------- | ---------------------------------------------------- | | `entity_id` | no | Target a specific media player. For example `media_player.spotify`| -| `shuffle` | no | `true`/`false` for enabling/disabling shuffle | +| `shuffle` | no | `true`/`false` for enabling/disabling shuffle | diff --git a/source/_components/snips.markdown b/source/_components/snips.markdown index 642faabf93..1e8dae2e05 100644 --- a/source/_components/snips.markdown +++ b/source/_components/snips.markdown @@ -171,3 +171,61 @@ SetTimer: ``` {% endraw %} +### Sending TTS Notifications + +You can send TTS notifications to Snips using the snips.say and snips.say_action services. Say_action starts a session and waits for user response, "Would you like me to close the garage door?", "Yes, close the garage door". + +#### {% linkable_title Service `snips/say` %} + +| Service data attribute | Optional | Description | +|------------------------|----------|--------------------------------------------------------| +| `text` | no | Text to say. | +| `site_id` | yes | Site to use to start session. | +| `custom_data` | yes | custom data that will be included with all messages in this session. | + +#### {% linkable_title Service `snips/say_action` %} + +| Service data attribute | Optional | Description | +|------------------------|----------|--------------------------------------------------------| +| `text` | no | Text to say. | +| `site_id` | yes | Site to use to start session. | +| `custom_data` | yes | custom data that will be included with all messages in this session. | +| `can_be_enqueued` | yes | If True, session waits for an open session to end, if False session is dropped if one is running. | +| `intent_filter` | yes | Array of Strings - A list of intents names to restrict the NLU resolution to on the first query. | + +#### Configuration Examples + +```yaml +script: + turn_on_light: + sequence: + service: script.turn_on_light + service: snips.say + data: + text: 'OK, the light is now on' + +automation: + query_garage_door: + trigger: + - platform: state + entity_id: binary_sensor.my_garage_door_sensor + from: 'off' + to: 'on' + for: + minutes: 10 + sequence: + service: snips.say_action + data: + text: 'Garage door has been open 10 minutes, would you like me to close it?' + intentFilter: + - closeGarageDoor + +# This intent is fired if the user responds with the appropriate intent after the above notification +intent_script: + closeGarageDoor: + speech: + type: plain + text: 'OK, closing the garage door' + action: + - service: script.garage_door_close +``` From c2226035d823ccc81b4cebb0a62dfa973fd37a46 Mon Sep 17 00:00:00 2001 From: starkillerOG Date: Sun, 14 Jan 2018 21:47:41 +0100 Subject: [PATCH 071/993] Hyperion light, new features (#4376) * Update Hyperion light documentation Added brightness, HDMI and effect support in my pull request. This includes two new optional variables that can be configured. * :pencil2: Small typo's --- source/_components/light.hyperion.markdown | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/source/_components/light.hyperion.markdown b/source/_components/light.hyperion.markdown index eccb243e37..7f3b23ad6c 100644 --- a/source/_components/light.hyperion.markdown +++ b/source/_components/light.hyperion.markdown @@ -29,5 +29,7 @@ Configuration variables: - **host** (*Required*): The IP address of the device the Hyperion service is running on. - **port** (*Optional*): The port used to communicate with the Hyperion service. Defaults to `19444`. - **name** (*Optional*): The name of the device used in the frontend. -- **priority** (*Optional*): The priority of the hyperion instance. Defaults to `128`. +- **priority** (*Optional*): The priority of the Hyperion instance. Defaults to `128`. +- **hdmi_priority** (*Optional*): The priority of the HDMI grabber of this Hyperion instance, note that this priority must be higher than all other priorities used for correct behavior. Defaults to `880`. - **default_color** (*Optional*): The color of the light. Defaults to `[255, 255, 255]`. +- **effect_list** (*Optional*): The list of effects that can be used. Defaults to `['HDMI', 'Cinema brighten lights', 'Cinema dim lights', 'Knight rider', 'Blue mood blobs', 'Cold mood blobs', 'Full color mood blobs', 'Green mood blobs', 'Red mood blobs', 'Warm mood blobs', 'Police Lights Single', 'Police Lights Solid', 'Rainbow mood', 'Rainbow swirl fast', 'Rainbow swirl', 'Random', 'Running dots', 'System Shutdown', 'Snake', 'Sparks Color', 'Sparks', 'Strobe blue', 'Strobe Raspbmc', 'Strobe white', 'Color traces', 'UDP multicast listener', 'UDP listener', 'X-Mas']`. From 99541284dc5c25e518322856acb129ab964f7ae6 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Mon, 15 Jan 2018 09:32:27 +0100 Subject: [PATCH 072/993] Update for 0.61 --- _config.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/_config.yml b/_config.yml index 413de4a3ab..f05fc66aca 100644 --- a/_config.yml +++ b/_config.yml @@ -139,12 +139,12 @@ social: # Home Assistant release details current_major_version: 0 -current_minor_version: 60 -current_patch_version: 1 -date_released: 2018-01-06 +current_minor_version: 61 +current_patch_version: 0 +date_released: 2018-01-14 # Either # or the anchor link to latest release notes in the blog post. # Must be prefixed with a # and have double quotes around it. # Major release: -patch_version_notes: "#release-0601---january-6" +patch_version_notes: "#" # Minor release (Example #release-0431---april-25): From 08970671b16773ba5c197e69c9e9f8b5dec591d8 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Mon, 15 Jan 2018 11:41:07 +0100 Subject: [PATCH 073/993] Add Discogs logo --- source/_components/sensor.discogs.markdown | 1 + source/images/supported_brands/discogs.png | Bin 0 -> 59964 bytes 2 files changed, 1 insertion(+) create mode 100644 source/images/supported_brands/discogs.png diff --git a/source/_components/sensor.discogs.markdown b/source/_components/sensor.discogs.markdown index 4c4bfe4ef6..281852abc7 100644 --- a/source/_components/sensor.discogs.markdown +++ b/source/_components/sensor.discogs.markdown @@ -10,6 +10,7 @@ footer: true logo: https://www.magneticmag.com/.image/t_share/MTQ5OTE1NzU4NTczMzk3OTYw/discogs-vinyl-record-mark.png ha_category: Sensor ha_release: 0.61 +logo: discogs.png ha_iot_class: "Cloud Polling" --- diff --git a/source/images/supported_brands/discogs.png b/source/images/supported_brands/discogs.png new file mode 100644 index 0000000000000000000000000000000000000000..e207579d99af6f3a8c169314aeff12e9e952d724 GIT binary patch literal 59964 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 Date: Mon, 15 Jan 2018 12:00:17 +0100 Subject: [PATCH 074/993] Add release blog post for 0.61 --- source/_posts/2018-01-14-release-61.markdown | 732 ++++++++++++++++++ .../images/blog/2018-01-0.61/components.png | Bin 0 -> 106189 bytes 2 files changed, 732 insertions(+) create mode 100644 source/_posts/2018-01-14-release-61.markdown create mode 100644 source/images/blog/2018-01-0.61/components.png diff --git a/source/_posts/2018-01-14-release-61.markdown b/source/_posts/2018-01-14-release-61.markdown new file mode 100644 index 0000000000..230b737f83 --- /dev/null +++ b/source/_posts/2018-01-14-release-61.markdown @@ -0,0 +1,732 @@ +--- +layout: post +title: "0.61: Coinbase, Discogs, iGlo, Sochain" +description: "New crypto currency sensors and other new stuff including breaking changes." +date: 2018-01-14 18:00:00 +date_formatted: "January 14, 2018" +author: Fabian Affolter +author_twitter: fabaff +comments: true +categories: Release-Notes +og_image: /images/blog/2018-01-0.61/components.png +--- + + + +Almost a 100 contributors to this release 🎉 That's what you get when you skip a release. It's a little late but "Happy New Year" and welcome to 0.61 the first release 2018. + +This release contain some breaking changes. Please make sure that you check the section below if you are running into trouble. + +There is not much more to tell and I don't want to make something up. + + +## {% linkable_title New Platforms %} + +- Add Discogs Sensor platform ([@thibmaek] - [#10957]) ([sensor.discogs docs]) (new-platform) +- Greenwave Reality (TCP Connected) Lighting Component ([@dfiel] - [#11282]) ([light.greenwave docs]) (new-platform) +- Added rainsensor ([@jbarrancos] - [#11023]) ([rainbird docs]) ([sensor.rainbird docs]) ([switch.rainbird docs]) (new-platform) +- Sochain cryptocurrency sensor ([@Klathmon] - [#11335]) ([sensor.sochain docs]) (new-platform) +- Support for EcoNet water heaters ([@w1ll1am23] - [#11260]) ([climate.econet docs]) (new-platform) +- Add deCONZ component ([@Kane610] - [#10321]) ([deconz docs]) ([binary_sensor.deconz docs]) ([light.deconz docs]) ([sensor.deconz docs]) (new-platform) +- Added new climate component from Daikin ([@rofrantz] - [#10983]) ([climate.daikin docs]) (new-platform) +- Add Touchline climate platform ([@abondoe] - [#10547]) ([climate.touchline docs]) (new-platform) +- Add new iGlo component ([@jesserockz] - [#11171]) ([light.iglo docs]) (new-platform) +- Add Dark Sky weather component ([@DanNixon] - [#11435]) ([weather.darksky docs]) (new-platform) +- Coinbase.com sensor platform ([@nkgilley] - [#11036]) ([coinbase docs]) ([sensor.coinbase docs]) (new-platform) + +## {% linkable_title If you need help... %} + +...don't hesitate to use our very active [forums](https://community.home-assistant.io/) or join us for a little [chat](https://discord.gg/c5DvZ4e). The release notes have comments enabled but it's preferred if you use the former communication channels. Thanks. + +## {% linkable_title Reporting Issues %} + +Experiencing issues introduced by this release? Please report them in our [issue tracker](https://github.com/home-assistant/home-assistant/issues). Make sure to fill in all fields of the issue template. + + + +## {% linkable_title Breaking Changes %} + +- Extend Threshold binary sensor to support ranges. This means that you can now set `up` and `lower`. ([@DanNixon] - [#11110]) ([binary_sensor.threshold docs]) (breaking change) +- The Steam game platform contains changes: + - `game` attribute no longer set in `device_state_attributes` if no game is currently being played as the string "None" is no longer passed if no current game is being played, instead the `game` attribute is not present. + - States now use lower snake case. + - The "Play" and "Trade" states has been renamed to "looking_to_play" and "looking_to_trade". + ([@frwickst] - [#11182]) ([sensor.steam_online docs]) (breaking change) +- The [`tile`][device_tracker.tile docs] platform now shows only active Tiles by default; to show all Tiles, including expired/inactive ones, `show_inactive` must be `True`. The following state attributes have been removed: `last_seen` and `last_updated`. ([@bachya] - [#11172]) ([device_tracker.tile docs]) (breaking change) +- The `hidden_string` feature has been removed from the isy994 component. Previously, this allowed entities to be "hidden" in Home Assistant if a configured string was present in an ISY device's name or folder path. This was removed because hiding devices is now done via the customization feature. +Note however, that this feature was replaced by a new ignore_string config option, which will now cause Home Assistant to completely ignore devices with the matching string so that they will not be imported as a Home Assistant device at all. This can be helpful if you have nodes in the ISY that aren't useful at all in Hass (IR transmitter nodes are a good example.) ([@OverloadUT] - [#11243]) ([isy994 docs]) ([binary_sensor.isy994 docs]) ([cover.isy994 docs]) ([fan.isy994 docs]) ([light.isy994 docs]) ([lock.isy994 docs]) ([sensor.isy994 docs]) ([switch.isy994 docs]) (breaking change) +- The [`egardia` alarm panel][alarm_control_panel.egardia docs] platform no longer a need the users to run a separate Egardiaserver component. It can now also run on HASS.io. ([@jeroenterheerdt] - [#11344]) ([alarm_control_panel.egardia docs]) (breaking change) +- The binary sensor platform of the DoorBird integration has been deleted, so remove DoorBird from your `binary_sensor` configuration. Instead, set the `doorbell_events` option of the `doorbird` component to `True`. The `last_visitor` option has been removed from the camera component, as it is now always added as an entity. ([@Klikini] - [#11193]) ([camera.doorbird docs]) (breaking change) +- The following attributes of the TP-Link switch and light platform have been renamed: + - Light: `current_consumption` -> `current_power_w`, `daily_consumption` -> `daily_energy_kwh` and `monthly_consumption` -> `monthly_energy_kwh` + - Switch: `current` -> `current_a`, `current_consumption` -> `current_power_w`, `total_consumption` -> `total_energy_kwh` and `daily_consumption` -> `today_energy_kwh` ([@DanNixon] - [#10979]) ([light.tplink docs]) ([switch.tplink docs]) (breaking change) +- Move IMAP Email Content body to an attribute ([@notoriousbdg] - [#11096]) ([sensor.imap_email_content docs]) (breaking change) +- Automations which were using `state` that was returning `target_temperature` of the `netatmo` climate platform needs an update. ([@ciotlosm] - [#11345]) ([climate.netatmo docs]) (breaking change) +- The default availability payloads for the `MQTT` switch platform have changed from "ON" and "OFF" to "online" and "offline" (in order to match the majority of MQTT platforms that already supported availability reporting). ([@DanNixon] - [#11336]) (breaking change) +- Customizations for how entities are exposed to Alexa are no longer set via `customize`. Instead they are set via the configuration of the cloud component: + + ```yaml + cloud: + alexa: + entity_config: + switch.kitchen: + name: 'Name for Alexa' + description: 'Description for Alexa' + display_categories: 'LIGHT' + ``` + ([@balloob] - [#11461]) ([cloud docs]) ([alexa.smart_home docs]) (breaking change) +- The extension of the `alpha_vantage` requires an update of the configuration as now are exchange data available as well. ([@ChristianKuehnel] - [#11427]) ([sensor.alpha_vantage docs]) (breaking change) +- The `prometheus` component now supports pushing all sensors and fixes wrong metrics. If may require that you update your configuration. ([@michaelkuty] - [#11159]) ([prometheus docs]) (breaking change) +- Insteon local devices will now use their address as the `entity_id` and `name`. The friendly name can be customized using the [standard customization configuration](https://home-assistant.io/docs/configuration/customizing-devices/). ([@camrun91] - [#11088]) ([insteon_local docs]) ([fan.insteon_local docs]) ([light.insteon_local docs]) ([switch.insteon_local docs]) (breaking change) +- Google Assistant is no longer configured via `customize` but instead has its configuration under the `google_assistant` entry in your `configuration.yaml`. The attributes will no longer have to be prefixed with `google_assistant_` either. + + | Old option | New option | + | ---------- | ------------ | + | google_assistant | expose | + | aliases | aliases | + | google_assistant_name | name | + | google_assistant_type | type | + + Before: + + ```yaml + homeassistant: + customize: + switch.kitchen: + google_assistant: false + google_assistant_name: nice lights + google_assistant_type: light + aliases: + - roof lights + + google_assistant: + ``` + + After: + + ```yaml + google_assistant: + entity_config: + switch.kitchen: + expose: false + alias: roof lights + name: nice lights + type: light + ``` +([@balloob] - [#11499]) ([cloud docs]) ([google_assistant docs]) (breaking change) +- The `climate.set_aux_heat` service is no longer available for the Sensibo cliamte platform. Now call `climate.turn_on` or `climate.turn_off`. ([@andrey-git] - [#11579]) ([climate.sensibo docs]) (breaking change) + +## {% linkable_title All changes %} + +- Try multiple methods of getting data in asuswrt. ([@PeWu] - [#11140]) ([device_tracker.asuswrt docs]) +- Hydroquebec component use now asyncio ([@titilambert] - [#10795]) ([sensor.hydroquebec docs]) +- Hive Component Release Two ([@KJonline] - [#11053]) ([hive docs]) ([climate.hive docs]) ([light.hive docs]) +- Add Discogs Sensor platform ([@thibmaek] - [#10957]) ([sensor.discogs docs]) (new-platform) +- Fix statistics sensor mean and median when only one sample is available. ([@markferry] - [#11180]) ([sensor.statistics docs]) +- Extend Threshold binary sensor to support ranges ([@DanNixon] - [#11110]) ([binary_sensor.threshold docs]) (breaking change) +- Bump python-miio version ([@djchen] - [#11232]) ([fan.xiaomi_miio docs]) ([light.xiaomi_miio docs]) ([switch.xiaomi_miio docs]) ([vacuum.xiaomi_miio docs]) +- Backup configuration files before overwriting ([@cgarwood] - [#11216]) +- Upgrade to new miflora version 0.2.0 ([@ChristianKuehnel] - [#11250]) ([sensor.miflora docs]) +- Add workaround for running tox on Windows platforms ([@veleek] - [#11188]) +- added myself to become code owner for miflora and plant ([@ChristianKuehnel] - [#11251]) +- Proper Steam game names and small fixes ([@frwickst] - [#11182]) ([sensor.steam_online docs]) (breaking change) +- Bugfix: 10509 - http is hard coded in plex sensor ([@ryanm101] - [#11072]) ([sensor.plex docs]) +- Adding MotionIP to BinarySensors for HMIP-SMI ([@schnoetz] - [#11268]) ([homematic docs]) +- Revert "Backup configuration files before overwriting" ([@pvizeli] - [#11269]) +- Functinality to save/restore snapshots for monoprice platform ([@etsinko] - [#10296]) ([media_player.monoprice docs]) +- Change manifest path to /states as this is the path / actually sets. ([@andrey-git] - [#11274]) +- Report Sensibo as off when it is off ([@andrey-git] - [#11281]) ([climate.sensibo docs]) +- Added password for GPS logger endpoint ([@foxel] - [#11245]) ([device_tracker.gpslogger docs]) +- Greenwave Reality (TCP Connected) Lighting Component ([@dfiel] - [#11282]) ([light.greenwave docs]) (new-platform) +- Adds support for disabled Tiles and automatic session renewal ([@bachya] - [#11172]) ([device_tracker.tile docs]) (breaking change) +- Plex refactor ([@ryanm101] - [#11235]) ([media_player.plex docs]) +- alexa: Add handling for covers ([@philk] - [#11242]) ([alexa.smart_home docs]) +- Added rainsensor ([@jbarrancos] - [#11023]) ([rainbird docs]) ([sensor.rainbird docs]) ([switch.rainbird docs]) (new-platform) +- Store raw state of RF sensors from alarmdecoder ([@PhracturedBlue] - [#10841]) ([alarmdecoder docs]) ([binary_sensor.alarmdecoder docs]) +- Add Chime status and control to Alarm Decoder component ([@goyney] - [#11271]) ([alarm_control_panel.alarmdecoder docs]) +- Better error handling ([@rofrantz] - [#11297]) ([sensor.transmission docs]) ([switch.transmission docs]) +- Removed error log used as debug ([@cmsimike] - [#11301]) ([octoprint docs]) +- Huge ISY994 platform cleanup, fixes support for 5.0.10 firmware ([@OverloadUT] - [#11243]) ([isy994 docs]) ([binary_sensor.isy994 docs]) ([cover.isy994 docs]) ([fan.isy994 docs]) ([light.isy994 docs]) ([lock.isy994 docs]) ([sensor.isy994 docs]) ([switch.isy994 docs]) (breaking change) +- Add heartbeat to websocket connections ([@balloob] - [#11298]) ([cloud.iot docs]) +- Fix typo in bitcoin.py component for mined blocks. ([@awkwardDuck] - [#11318]) ([sensor.bitcoin docs]) +- xiaomi_aqara: Fix covers never being closed ([@cnrd] - [#11319]) ([cover.xiaomi_aqara docs]) +- Fix for track_new_devices BC ([@masarliev] - [#11202]) ([device_tracker docs]) +- Upgrade aiohttp_cors to 0.6.0 ([@fabaff] - [#11310]) ([http docs]) +- Upgrade pysnmp to 4.4.3 ([@fabaff] - [#11317]) ([device_tracker.snmp docs]) ([sensor.snmp docs]) ([switch.snmp docs]) +- Upgrade luftdaten to 0.1.3 ([@fabaff] - [#11316]) ([sensor.luftdaten docs]) +- Upgrade yahooweather to 0.10 ([@fabaff] - [#11309]) ([weather.yweather docs]) +- Upgrade distro to 1.2.0 ([@fabaff] - [#11312]) ([updater docs]) +- Upgrade python-digitalocean to 1.13.2 ([@fabaff] - [#11311]) ([digital_ocean docs]) +- Upgrade youtube_dl to 2017.12.23 ([@fabaff] - [#11308]) ([media_extractor docs]) +- Upgrade alpha_vantage to 1.6.0 ([@fabaff] - [#11307]) ([sensor.alpha_vantage docs]) +- Bugfix for HA Issue 7292, 9412 - switch to gamertag to receive ssl image url ([@ReneNulschDE] - [#11315]) ([sensor.xbox_live docs]) +- closes #11314 by not restricting the voice to anything but a string ([@Human] - [#11326]) ([tts.marytts docs]) +- Additional device classes for binary sensors ([@schmittx] - [#11280]) ([binary_sensor docs]) +- Remove need for separate EgardiaServer setup ([@jeroenterheerdt] - [#11344]) ([alarm_control_panel.egardia docs]) (breaking change) +- Add default names and validation for TP-Link devices ([@DanNixon] - [#11346]) ([light.tplink docs]) ([switch.tplink docs]) +- Sochain cryptocurrency sensor ([@Klathmon] - [#11335]) ([sensor.sochain docs]) (new-platform) +- pass stops_at to get_station_by_name ([@ttroy50] - [#11304]) ([sensor.irish_rail_transport docs]) +- Move data instance to setup ([@fabaff] - [#11350]) ([sensor.swiss_public_transport docs]) +- Update modbus.py ([@goldminenine] - [#11238]) ([modbus docs]) +- DoorBird feature update ([@Klikini] - [#11193]) ([camera.doorbird docs]) (breaking change) +- Upgrade aiohttp to 2.3.7 ([@fabaff] - [#11329]) +- Upgrade fuzzywuzzy to 0.16.0 ([@fabaff] - [#11331]) ([conversation docs]) +- Upgrade pyowm to 2.8.0 ([@fabaff] - [#11332]) ([sensor.openweathermap docs]) ([weather.openweathermap docs]) +- Upgrade sqlalchemy to 1.2.0 ([@fabaff] - [#11333]) +- Upgrade mypy to 0.560 ([@fabaff] - [#11334]) +- Upgrade python-telegram-bot to 9.0.0 ([@fabaff] - [#11341]) ([telegram_bot docs]) +- Upgrade youtube_dl to 2017.12.28 ([@fabaff] - [#11357]) ([media_extractor docs]) +- Correct units used in TP-Link energy monioring ([@DanNixon] - [#10979]) ([light.tplink docs]) ([switch.tplink docs]) (breaking change) +- Add HTTP endpoint for resending email confirmation ([@balloob] - [#11354]) ([cloud.auth_api docs]) ([cloud.http_api docs]) +- Fix RGB template ordering in MQTT Light ([@DanNixon] - [#11362]) ([light.mqtt docs]) +- Ping device tracker now respects interval_seconds ([@tschmidty69] - [#11348]) ([device_tracker.ping docs]) +- Fido component use now asyncio ([@titilambert] - [#11244]) ([sensor.fido docs]) +- Support for EcoNet water heaters ([@w1ll1am23] - [#11260]) ([climate.econet docs]) (new-platform) +- Remember the Milk - updating and completing tasks ([@ChristianKuehnel] - [#11069]) ([remember_the_milk docs]) +- Reverts unit conversions in TP-Link bulb ([@DanNixon] - [#11381]) ([light.tplink docs]) +- Clean up Google Assistant ([@balloob] - [#11375]) ([google_assistant docs]) ([google_assistant.http docs]) ([google_assistant.smart_home docs]) +- Adding support for Egardia / Woonveilig version GATE-03 ([@jeroenterheerdt] - [#11397]) ([alarm_control_panel.egardia docs]) +- Add deCONZ component ([@Kane610] - [#10321]) ([deconz docs]) ([binary_sensor.deconz docs]) ([light.deconz docs]) ([sensor.deconz docs]) (new-platform) +- Fix broken tests ([@balloob] - [#11395]) +- Upgrade pychromecast to 1.0.3 ([@OttoWinter] - [#11410]) ([media_player.cast docs]) +- Bump pywemo to fix request include problems. ([@pavoni] - [#11401]) ([wemo docs]) +- Log exceptions that happen during service call ([@balloob] - [#11394]) +- Move IMAP Email Content body to an attribute ([@notoriousbdg] - [#11096]) ([sensor.imap_email_content docs]) (breaking change) +- Notify webos timeout error fix ([@masarliev] - [#11027]) ([notify.webostv docs]) +- Removed status block to allow https://github.com/home-assistant/home-assistant-polymer/pull/766 with no impact ([@ciotlosm] - [#11345]) ([climate.netatmo docs]) (breaking change) +- More support for availability reporting on MQTT components ([@DanNixon] - [#11336]) (breaking change) +- Do not purge the most recent state for an entity ([@tinloaf] - [#11039]) +- Performance optimization of TP-Link switch ([@amelchio] - [#11416]) ([switch.tplink docs]) +- Fixing OpenWeatherMap Sensor. Current weather is 'unknown' if forecast: false. It was reported as #8640. ([@tomaszduda23] - [#11417]) ([sensor.openweathermap docs]) +- Silence redundant warnings about slow setup ([@amelchio] - [#11352]) +- Account for User-Agent being non-existent, causing a TypeError ([@akatrevorjay] - [#11064]) +- Cloud Updates ([@balloob] - [#11404]) ([cloud docs]) +- Add support for the renaming of Yamaha Receiver Zones via configuration file. Added a test to cover the change, plus previously untested options. ([@dfinlay] - [#11402]) ([media_player.yamaha docs]) +- Plex api update ([@ryanm101] - [#11423]) ([media_player.plex docs]) ([sensor.plex docs]) +- fix: hmip-etrv-2 now working with homeassistant ([@daenny] - [#11175]) ([homematic docs]) ([climate.homematic docs]) +- Fix errors in zigbee push state ([@SteveEasley] - [#11386]) ([zigbee docs]) +- Add on/off supported feature to climate ([@andrey-git] - [#11379]) ([climate docs]) ([climate.demo docs]) ([climate.sensibo docs]) +- Fix CONF_FRIENDLY_NAME ([@cdce8p] - [#11438]) ([cover.template docs]) ([light.template docs]) +- Climate: fix missing "|" ([@andrey-git] - [#11441]) ([climate.demo docs]) +- Google Assistant -> Google Actions ([@balloob] - [#11442]) ([cloud.iot docs]) +- Added new climate component from Daikin ([@rofrantz] - [#10983]) ([climate.daikin docs]) (new-platform) +- Updated generic thermostat to respect operation_mode and added away mode ([@ciotlosm] - [#11445]) ([climate.generic_thermostat docs]) +- Reconnect to alarmdecoder on disconnect ([@PhracturedBlue] - [#11383]) ([alarmdecoder docs]) +- Set tahoma cover scan interval to 60 seconds ([@bakedraccoon] - [#11447]) ([cover.tahoma docs]) +- Add some tests to the cloud component ([@balloob] - [#11460]) ([cloud docs]) ([cloud.iot docs]) +- Input Select - Added service description ([@cdce8p] - [#11456]) ([input_select docs]) +- Input Boolean - Deleted 'DEFAULT_INITIAL' ([@cdce8p] - [#11453]) ([input_boolean docs]) +- Updated gitignore file ([@cdce8p] - [#11452]) +- Update hydroquebec component to use hass httpsession ([@titilambert] - [#11412]) ([sensor.hydroquebec docs]) +- Catch everything when calling to OctoPrint API to fix #10557 ([@w1ll1am23] - [#11457]) ([octoprint docs]) +- Update PULL_REQUEST_TEMPLATE.md ([@danielhiversen] - [#11465]) +- Alexa to not use customize for entity config ([@balloob] - [#11461]) ([cloud docs]) ([alexa.smart_home docs]) (breaking change) +- Don't duplicate html5 registrations ([@Chris-V] - [#11451]) ([notify.html5 docs]) +- AlarmDecoder remove icon function as BinarySensorDevice handles it correctly now ([@hawk259] - [#11467]) ([binary_sensor.alarmdecoder docs]) +- Upgrade psutil to 5.4.3 ([@fabaff] - [#11468]) ([sensor.systemmonitor docs]) +- Upgrade alpha_vantage to 1.8.0 ([@fabaff] - [#11476]) ([sensor.alpha_vantage docs]) +- Fix vultr tests ([@balloob] - [#11477]) +- Upgrade yarl to 0.17.0 ([@fabaff] - [#11478]) +- Add Touchline climate platform ([@abondoe] - [#10547]) ([climate.touchline docs]) (new-platform) +- Upgrade pysnmp to 4.4.4 ([@fabaff] - [#11485]) ([device_tracker.snmp docs]) ([sensor.snmp docs]) ([switch.snmp docs]) +- Add new iGlo component ([@jesserockz] - [#11171]) ([light.iglo docs]) (new-platform) +- Add missing configuration variables ([@fabaff] - [#11390]) ([sensor.metoffice docs]) +- Clean up Alexa.intent and DialogFlow.intent ([@balloob] - [#11492]) ([alexa.intent docs]) +- Fix time functions would throw errors in python scripts ([@tomwaters] - [#11414]) ([python_script docs]) +- Upgrade pywebpush to 1.5.0 ([@Chris-V] - [#11497]) ([notify.html5 docs]) +- upgrade schiene to 0.20 ([@JulianKahnert] - [#11504]) ([sensor.deutsche_bahn docs]) +- timer: include the remaining time in the state attributes ([@Julio-Guerra] - [#11510]) ([timer docs]) +- More tolerant KNX component if gateway cant be connected ([@Julius2342] - [#11511]) ([knx docs]) ([binary_sensor.knx docs]) ([climate.knx docs]) ([cover.knx docs]) ([light.knx docs]) ([sensor.knx docs]) ([switch.knx docs]) +- Snips (new) added speech response, parse snips/duration ([@tschmidty69] - [#11513]) ([snips docs]) +- Add Dark Sky weather component ([@DanNixon] - [#11435]) ([weather.darksky docs]) (new-platform) +- Lazy loading of service descriptions ([@amelchio] - [#11479]) ([api docs]) ([websocket_api docs]) ([light.lifx docs]) +- Fix canary flaky test ([@balloob] - [#11519]) +- Address missed review comments for Dark Sky weather ([@DanNixon] - [#11520]) ([weather.darksky docs]) +- New features for Owntracks device_tracker ([@cpcowart] - [#11480]) ([device_tracker.owntracks docs]) +- Reconnect before mochad switch send command ([@aosadchyy] - [#11296]) ([switch.mochad docs]) +- Fix Kodi channels media type ([@florianj1] - [#11505]) ([media_player.kodi docs]) +- Extension sensor alpha_vantage ([@ChristianKuehnel] - [#11427]) ([sensor.alpha_vantage docs]) (breaking change) +- MQTT json attributes ([@timstanley1985] - [#11439]) ([sensor.mqtt docs]) +- Support pushing all sensors and fix wrong metrics. ([@michaelkuty] - [#11159]) ([prometheus docs]) (breaking change) +- Add options feature to Baidu TTS. ([@yienxu] - [#11462]) ([tts.baidu docs]) +- Insteon local update ([@camrun91] - [#11088]) ([insteon_local docs]) ([fan.insteon_local docs]) ([light.insteon_local docs]) ([switch.insteon_local docs]) (breaking change) +- Snips: (fix) support new intentName format ([@tschmidty69] - [#11509]) ([snips docs]) +- Upgrade numpy to 1.14.0 ([@fabaff] - [#11542]) ([binary_sensor.trend docs]) ([image_processing.opencv docs]) +- Upgrade python-etherscan-api to 0.0.2 ([@fabaff] - [#11535]) ([sensor.etherscan docs]) +- Upgrade Sphinx to 1.6.6 ([@fabaff] - [#11534]) +- ZoneMinder event sensor updates ([@swilson] - [#11369]) ([sensor.zoneminder docs]) +- Move Google Assistant entity config out of customize ([@balloob] - [#11499]) ([cloud docs]) ([google_assistant docs]) (breaking change) +- Upgrade lightify to 1.0.6.1 ([@fabaff] - [#11545]) ([light.osramlightify docs]) +- Improved test runtime ([@cdce8p] - [#11553]) ([binary_sensor.workday docs]) +- Add 2 media_player services and 1 custom service to Squeezebox platform ([@ericpignet] - [#10969]) ([media_player.squeezebox docs]) +- Fix error on entity_config missing ([@philk] - [#11561]) ([google_assistant.http docs]) +- Upgrade keyring to 10.3.2 ([@fabaff] - [#11531]) +- Coinbase.com sensor platform ([@nkgilley] - [#11036]) ([coinbase docs]) ([sensor.coinbase docs]) (new-platform) +- Try to fix crashes after Hue refactoring ([@andreacampi] - [#11270]) ([light.hue docs]) +- Remove execution file perm ([@balloob] - [#11563]) +- Deprecate explicit entity_id in template platforms ([@amelchio] - [#11123]) ([binary_sensor.template docs]) ([cover.template docs]) ([light.template docs]) ([sensor.template docs]) ([switch.template docs]) +- Test tweaks ([@balloob] - [#11560]) +- Add Velux Windows to Tahoma ([@bakedraccoon] - [#11538]) ([tahoma docs]) ([cover.tahoma docs]) +- Extend hass.io services / updater ([@pvizeli] - [#11549]) ([hassio docs]) +- Add sensibo_assume_state service to Sensibo climate ([@andrey-git] - [#11567]) ([climate.sensibo docs]) +- Tracking all groups to allow changing of existing groups ([@randellhodges] - [#11444]) ([group docs]) +- Fix new squeezebox service descriptions for lazy loading ([@amelchio] - [#11574]) ([media_player.squeezebox docs]) +- Mark REST binary_sensor unavailable if request fails ([@DanNixon] - [#11506]) ([binary_sensor.rest docs]) +- Tado improvements - hot water zone sensors and climate precision ([@andersonshatch] - [#11521]) ([climate.tado docs]) ([sensor.tado docs]) +- Make the rpi_rf component thread-safe using an RLock ([@ulido] - [#11487]) ([switch.rpi_rf docs]) +- Update pyhomematic, support new devices ([@danielperna84] - [#11578]) ([homematic docs]) +- Alarmdecoder add validation of the zone types ([@hawk259] - [#11488]) ([alarmdecoder docs]) +- Support OSRAM lights on ZHA ([@armills] - [#11522]) ([light.zha docs]) +- Fix bluetooth tracker source ([@swilson] - [#11469]) ([device_tracker docs]) ([device_tracker.bluetooth_le_tracker docs]) ([device_tracker.bluetooth_tracker docs]) +- Fix for asuswrt, telnet not working and presence-detection for router mode ([@kennedyshead] - [#11422]) ([device_tracker.asuswrt docs]) +- Remove aux_heat support from Sensibo now that UI supports on/off ([@andrey-git] - [#11579]) ([climate.sensibo docs]) (breaking change) +- Changed device type of media player and cover to switch ([@Laqoore] - [#11483]) ([google_assistant.smart_home docs]) +- Control ordering of display in history component ([@rwa] - [#11340]) ([history docs]) +- Pr/11430 ([@balloob] - [#11587]) +- Cast return values and add unit tests for the yahoo weather component. ([@cgtobi] - [#10699]) ([weather.yweather docs]) +- add velux roller shutter to tahoma ([@bakedraccoon] - [#11586]) ([tahoma docs]) +- Added support for enable/disable motion detection ([@abjorshammar] - [#11583]) ([camera.uvc docs]) +- Avoid returning empty media_image_url string ([@JackWindows] - [#11557]) ([media_player.cast docs]) +- Core support for hass.io calls & Bugfix check_config ([@pvizeli] - [#11571]) ([__init__ docs]) ([hassio docs]) ([updater docs]) +- Fix Tahoma stop command for 2 types of shutters ([@bakedraccoon] - [#11588]) ([cover.tahoma docs]) +- Pushbullet email support (fix) ([@tschmidty69] - [#11590]) ([notify.pushbullet docs]) +- Fix state for trigger with forced updates ([@armills] - [#11595]) ([automation.state docs]) +- Snips add say and say_actions services (new) ([@tschmidty69] - [#11596]) ([snips docs]) +- Concord232 alarm arm away fix ([@rwa] - [#11597]) ([alarm_control_panel.concord232 docs]) ([binary_sensor.concord232 docs]) +- Bugfix and cleanup for Rfxtrx ([@danielhiversen] - [#11600]) +- Xiaomi lib upgrade ([@danielhiversen] - [#11603]) +- Upgrade yarl to 0.18.0 ([@fabaff] - [#11609]) +- patch stop command ([@bakedraccoon] - [#11612]) ([cover.tahoma docs]) +- Use kelvin/mireds correctly for setting iglo white ([@jesserockz] - [#11622]) +- Update Pyarlo to 0.1.2 ([@arsaboo] - [#11626]) + +[#10296]: https://github.com/home-assistant/home-assistant/pull/10296 +[#10321]: https://github.com/home-assistant/home-assistant/pull/10321 +[#10547]: https://github.com/home-assistant/home-assistant/pull/10547 +[#10699]: https://github.com/home-assistant/home-assistant/pull/10699 +[#10795]: https://github.com/home-assistant/home-assistant/pull/10795 +[#10841]: https://github.com/home-assistant/home-assistant/pull/10841 +[#10957]: https://github.com/home-assistant/home-assistant/pull/10957 +[#10969]: https://github.com/home-assistant/home-assistant/pull/10969 +[#10979]: https://github.com/home-assistant/home-assistant/pull/10979 +[#10983]: https://github.com/home-assistant/home-assistant/pull/10983 +[#11023]: https://github.com/home-assistant/home-assistant/pull/11023 +[#11027]: https://github.com/home-assistant/home-assistant/pull/11027 +[#11036]: https://github.com/home-assistant/home-assistant/pull/11036 +[#11039]: https://github.com/home-assistant/home-assistant/pull/11039 +[#11053]: https://github.com/home-assistant/home-assistant/pull/11053 +[#11064]: https://github.com/home-assistant/home-assistant/pull/11064 +[#11069]: https://github.com/home-assistant/home-assistant/pull/11069 +[#11072]: https://github.com/home-assistant/home-assistant/pull/11072 +[#11088]: https://github.com/home-assistant/home-assistant/pull/11088 +[#11096]: https://github.com/home-assistant/home-assistant/pull/11096 +[#11110]: https://github.com/home-assistant/home-assistant/pull/11110 +[#11123]: https://github.com/home-assistant/home-assistant/pull/11123 +[#11140]: https://github.com/home-assistant/home-assistant/pull/11140 +[#11159]: https://github.com/home-assistant/home-assistant/pull/11159 +[#11171]: https://github.com/home-assistant/home-assistant/pull/11171 +[#11172]: https://github.com/home-assistant/home-assistant/pull/11172 +[#11175]: https://github.com/home-assistant/home-assistant/pull/11175 +[#11180]: https://github.com/home-assistant/home-assistant/pull/11180 +[#11182]: https://github.com/home-assistant/home-assistant/pull/11182 +[#11188]: https://github.com/home-assistant/home-assistant/pull/11188 +[#11193]: https://github.com/home-assistant/home-assistant/pull/11193 +[#11202]: https://github.com/home-assistant/home-assistant/pull/11202 +[#11216]: https://github.com/home-assistant/home-assistant/pull/11216 +[#11232]: https://github.com/home-assistant/home-assistant/pull/11232 +[#11235]: https://github.com/home-assistant/home-assistant/pull/11235 +[#11238]: https://github.com/home-assistant/home-assistant/pull/11238 +[#11242]: https://github.com/home-assistant/home-assistant/pull/11242 +[#11243]: https://github.com/home-assistant/home-assistant/pull/11243 +[#11244]: https://github.com/home-assistant/home-assistant/pull/11244 +[#11245]: https://github.com/home-assistant/home-assistant/pull/11245 +[#11250]: https://github.com/home-assistant/home-assistant/pull/11250 +[#11251]: https://github.com/home-assistant/home-assistant/pull/11251 +[#11260]: https://github.com/home-assistant/home-assistant/pull/11260 +[#11268]: https://github.com/home-assistant/home-assistant/pull/11268 +[#11269]: https://github.com/home-assistant/home-assistant/pull/11269 +[#11270]: https://github.com/home-assistant/home-assistant/pull/11270 +[#11271]: https://github.com/home-assistant/home-assistant/pull/11271 +[#11274]: https://github.com/home-assistant/home-assistant/pull/11274 +[#11280]: https://github.com/home-assistant/home-assistant/pull/11280 +[#11281]: https://github.com/home-assistant/home-assistant/pull/11281 +[#11282]: https://github.com/home-assistant/home-assistant/pull/11282 +[#11296]: https://github.com/home-assistant/home-assistant/pull/11296 +[#11297]: https://github.com/home-assistant/home-assistant/pull/11297 +[#11298]: https://github.com/home-assistant/home-assistant/pull/11298 +[#11301]: https://github.com/home-assistant/home-assistant/pull/11301 +[#11304]: https://github.com/home-assistant/home-assistant/pull/11304 +[#11307]: https://github.com/home-assistant/home-assistant/pull/11307 +[#11308]: https://github.com/home-assistant/home-assistant/pull/11308 +[#11309]: https://github.com/home-assistant/home-assistant/pull/11309 +[#11310]: https://github.com/home-assistant/home-assistant/pull/11310 +[#11311]: https://github.com/home-assistant/home-assistant/pull/11311 +[#11312]: https://github.com/home-assistant/home-assistant/pull/11312 +[#11315]: https://github.com/home-assistant/home-assistant/pull/11315 +[#11316]: https://github.com/home-assistant/home-assistant/pull/11316 +[#11317]: https://github.com/home-assistant/home-assistant/pull/11317 +[#11318]: https://github.com/home-assistant/home-assistant/pull/11318 +[#11319]: https://github.com/home-assistant/home-assistant/pull/11319 +[#11326]: https://github.com/home-assistant/home-assistant/pull/11326 +[#11329]: https://github.com/home-assistant/home-assistant/pull/11329 +[#11331]: https://github.com/home-assistant/home-assistant/pull/11331 +[#11332]: https://github.com/home-assistant/home-assistant/pull/11332 +[#11333]: https://github.com/home-assistant/home-assistant/pull/11333 +[#11334]: https://github.com/home-assistant/home-assistant/pull/11334 +[#11335]: https://github.com/home-assistant/home-assistant/pull/11335 +[#11336]: https://github.com/home-assistant/home-assistant/pull/11336 +[#11340]: https://github.com/home-assistant/home-assistant/pull/11340 +[#11341]: https://github.com/home-assistant/home-assistant/pull/11341 +[#11344]: https://github.com/home-assistant/home-assistant/pull/11344 +[#11345]: https://github.com/home-assistant/home-assistant/pull/11345 +[#11346]: https://github.com/home-assistant/home-assistant/pull/11346 +[#11348]: https://github.com/home-assistant/home-assistant/pull/11348 +[#11350]: https://github.com/home-assistant/home-assistant/pull/11350 +[#11352]: https://github.com/home-assistant/home-assistant/pull/11352 +[#11354]: https://github.com/home-assistant/home-assistant/pull/11354 +[#11357]: https://github.com/home-assistant/home-assistant/pull/11357 +[#11362]: https://github.com/home-assistant/home-assistant/pull/11362 +[#11369]: https://github.com/home-assistant/home-assistant/pull/11369 +[#11375]: https://github.com/home-assistant/home-assistant/pull/11375 +[#11379]: https://github.com/home-assistant/home-assistant/pull/11379 +[#11381]: https://github.com/home-assistant/home-assistant/pull/11381 +[#11383]: https://github.com/home-assistant/home-assistant/pull/11383 +[#11386]: https://github.com/home-assistant/home-assistant/pull/11386 +[#11390]: https://github.com/home-assistant/home-assistant/pull/11390 +[#11394]: https://github.com/home-assistant/home-assistant/pull/11394 +[#11395]: https://github.com/home-assistant/home-assistant/pull/11395 +[#11397]: https://github.com/home-assistant/home-assistant/pull/11397 +[#11401]: https://github.com/home-assistant/home-assistant/pull/11401 +[#11402]: https://github.com/home-assistant/home-assistant/pull/11402 +[#11404]: https://github.com/home-assistant/home-assistant/pull/11404 +[#11410]: https://github.com/home-assistant/home-assistant/pull/11410 +[#11412]: https://github.com/home-assistant/home-assistant/pull/11412 +[#11414]: https://github.com/home-assistant/home-assistant/pull/11414 +[#11416]: https://github.com/home-assistant/home-assistant/pull/11416 +[#11417]: https://github.com/home-assistant/home-assistant/pull/11417 +[#11422]: https://github.com/home-assistant/home-assistant/pull/11422 +[#11423]: https://github.com/home-assistant/home-assistant/pull/11423 +[#11427]: https://github.com/home-assistant/home-assistant/pull/11427 +[#11435]: https://github.com/home-assistant/home-assistant/pull/11435 +[#11438]: https://github.com/home-assistant/home-assistant/pull/11438 +[#11439]: https://github.com/home-assistant/home-assistant/pull/11439 +[#11441]: https://github.com/home-assistant/home-assistant/pull/11441 +[#11442]: https://github.com/home-assistant/home-assistant/pull/11442 +[#11444]: https://github.com/home-assistant/home-assistant/pull/11444 +[#11445]: https://github.com/home-assistant/home-assistant/pull/11445 +[#11447]: https://github.com/home-assistant/home-assistant/pull/11447 +[#11451]: https://github.com/home-assistant/home-assistant/pull/11451 +[#11452]: https://github.com/home-assistant/home-assistant/pull/11452 +[#11453]: https://github.com/home-assistant/home-assistant/pull/11453 +[#11456]: https://github.com/home-assistant/home-assistant/pull/11456 +[#11457]: https://github.com/home-assistant/home-assistant/pull/11457 +[#11460]: https://github.com/home-assistant/home-assistant/pull/11460 +[#11461]: https://github.com/home-assistant/home-assistant/pull/11461 +[#11462]: https://github.com/home-assistant/home-assistant/pull/11462 +[#11465]: https://github.com/home-assistant/home-assistant/pull/11465 +[#11467]: https://github.com/home-assistant/home-assistant/pull/11467 +[#11468]: https://github.com/home-assistant/home-assistant/pull/11468 +[#11469]: https://github.com/home-assistant/home-assistant/pull/11469 +[#11476]: https://github.com/home-assistant/home-assistant/pull/11476 +[#11477]: https://github.com/home-assistant/home-assistant/pull/11477 +[#11478]: https://github.com/home-assistant/home-assistant/pull/11478 +[#11479]: https://github.com/home-assistant/home-assistant/pull/11479 +[#11480]: https://github.com/home-assistant/home-assistant/pull/11480 +[#11483]: https://github.com/home-assistant/home-assistant/pull/11483 +[#11485]: https://github.com/home-assistant/home-assistant/pull/11485 +[#11487]: https://github.com/home-assistant/home-assistant/pull/11487 +[#11488]: https://github.com/home-assistant/home-assistant/pull/11488 +[#11492]: https://github.com/home-assistant/home-assistant/pull/11492 +[#11497]: https://github.com/home-assistant/home-assistant/pull/11497 +[#11499]: https://github.com/home-assistant/home-assistant/pull/11499 +[#11504]: https://github.com/home-assistant/home-assistant/pull/11504 +[#11505]: https://github.com/home-assistant/home-assistant/pull/11505 +[#11506]: https://github.com/home-assistant/home-assistant/pull/11506 +[#11509]: https://github.com/home-assistant/home-assistant/pull/11509 +[#11510]: https://github.com/home-assistant/home-assistant/pull/11510 +[#11511]: https://github.com/home-assistant/home-assistant/pull/11511 +[#11513]: https://github.com/home-assistant/home-assistant/pull/11513 +[#11519]: https://github.com/home-assistant/home-assistant/pull/11519 +[#11520]: https://github.com/home-assistant/home-assistant/pull/11520 +[#11521]: https://github.com/home-assistant/home-assistant/pull/11521 +[#11522]: https://github.com/home-assistant/home-assistant/pull/11522 +[#11531]: https://github.com/home-assistant/home-assistant/pull/11531 +[#11534]: https://github.com/home-assistant/home-assistant/pull/11534 +[#11535]: https://github.com/home-assistant/home-assistant/pull/11535 +[#11538]: https://github.com/home-assistant/home-assistant/pull/11538 +[#11542]: https://github.com/home-assistant/home-assistant/pull/11542 +[#11545]: https://github.com/home-assistant/home-assistant/pull/11545 +[#11549]: https://github.com/home-assistant/home-assistant/pull/11549 +[#11553]: https://github.com/home-assistant/home-assistant/pull/11553 +[#11557]: https://github.com/home-assistant/home-assistant/pull/11557 +[#11560]: https://github.com/home-assistant/home-assistant/pull/11560 +[#11561]: https://github.com/home-assistant/home-assistant/pull/11561 +[#11563]: https://github.com/home-assistant/home-assistant/pull/11563 +[#11567]: https://github.com/home-assistant/home-assistant/pull/11567 +[#11571]: https://github.com/home-assistant/home-assistant/pull/11571 +[#11574]: https://github.com/home-assistant/home-assistant/pull/11574 +[#11578]: https://github.com/home-assistant/home-assistant/pull/11578 +[#11579]: https://github.com/home-assistant/home-assistant/pull/11579 +[#11583]: https://github.com/home-assistant/home-assistant/pull/11583 +[#11586]: https://github.com/home-assistant/home-assistant/pull/11586 +[#11587]: https://github.com/home-assistant/home-assistant/pull/11587 +[#11588]: https://github.com/home-assistant/home-assistant/pull/11588 +[#11590]: https://github.com/home-assistant/home-assistant/pull/11590 +[#11595]: https://github.com/home-assistant/home-assistant/pull/11595 +[#11596]: https://github.com/home-assistant/home-assistant/pull/11596 +[#11597]: https://github.com/home-assistant/home-assistant/pull/11597 +[#11600]: https://github.com/home-assistant/home-assistant/pull/11600 +[#11603]: https://github.com/home-assistant/home-assistant/pull/11603 +[#11609]: https://github.com/home-assistant/home-assistant/pull/11609 +[#11612]: https://github.com/home-assistant/home-assistant/pull/11612 +[#11622]: https://github.com/home-assistant/home-assistant/pull/11622 +[#11626]: https://github.com/home-assistant/home-assistant/pull/11626 +[@Chris-V]: https://github.com/Chris-V +[@ChristianKuehnel]: https://github.com/ChristianKuehnel +[@DanNixon]: https://github.com/DanNixon +[@Human]: https://github.com/Human +[@JackWindows]: https://github.com/JackWindows +[@JulianKahnert]: https://github.com/JulianKahnert +[@Julio-Guerra]: https://github.com/Julio-Guerra +[@Julius2342]: https://github.com/Julius2342 +[@KJonline]: https://github.com/KJonline +[@Kane610]: https://github.com/Kane610 +[@Klathmon]: https://github.com/Klathmon +[@Klikini]: https://github.com/Klikini +[@Laqoore]: https://github.com/Laqoore +[@OttoWinter]: https://github.com/OttoWinter +[@OverloadUT]: https://github.com/OverloadUT +[@PeWu]: https://github.com/PeWu +[@PhracturedBlue]: https://github.com/PhracturedBlue +[@ReneNulschDE]: https://github.com/ReneNulschDE +[@SteveEasley]: https://github.com/SteveEasley +[@abjorshammar]: https://github.com/abjorshammar +[@abondoe]: https://github.com/abondoe +[@akatrevorjay]: https://github.com/akatrevorjay +[@amelchio]: https://github.com/amelchio +[@andersonshatch]: https://github.com/andersonshatch +[@andreacampi]: https://github.com/andreacampi +[@andrey-git]: https://github.com/andrey-git +[@aosadchyy]: https://github.com/aosadchyy +[@armills]: https://github.com/armills +[@arsaboo]: https://github.com/arsaboo +[@awkwardDuck]: https://github.com/awkwardDuck +[@bachya]: https://github.com/bachya +[@bakedraccoon]: https://github.com/bakedraccoon +[@balloob]: https://github.com/balloob +[@camrun91]: https://github.com/camrun91 +[@cdce8p]: https://github.com/cdce8p +[@cgarwood]: https://github.com/cgarwood +[@cgtobi]: https://github.com/cgtobi +[@ciotlosm]: https://github.com/ciotlosm +[@cmsimike]: https://github.com/cmsimike +[@cnrd]: https://github.com/cnrd +[@cpcowart]: https://github.com/cpcowart +[@daenny]: https://github.com/daenny +[@danielhiversen]: https://github.com/danielhiversen +[@danielperna84]: https://github.com/danielperna84 +[@dfiel]: https://github.com/dfiel +[@dfinlay]: https://github.com/dfinlay +[@djchen]: https://github.com/djchen +[@ericpignet]: https://github.com/ericpignet +[@etsinko]: https://github.com/etsinko +[@fabaff]: https://github.com/fabaff +[@florianj1]: https://github.com/florianj1 +[@foxel]: https://github.com/foxel +[@frwickst]: https://github.com/frwickst +[@goldminenine]: https://github.com/goldminenine +[@goyney]: https://github.com/goyney +[@hawk259]: https://github.com/hawk259 +[@jbarrancos]: https://github.com/jbarrancos +[@jeroenterheerdt]: https://github.com/jeroenterheerdt +[@jesserockz]: https://github.com/jesserockz +[@kennedyshead]: https://github.com/kennedyshead +[@markferry]: https://github.com/markferry +[@masarliev]: https://github.com/masarliev +[@michaelkuty]: https://github.com/michaelkuty +[@nkgilley]: https://github.com/nkgilley +[@notoriousbdg]: https://github.com/notoriousbdg +[@pavoni]: https://github.com/pavoni +[@philk]: https://github.com/philk +[@pvizeli]: https://github.com/pvizeli +[@randellhodges]: https://github.com/randellhodges +[@rofrantz]: https://github.com/rofrantz +[@rwa]: https://github.com/rwa +[@ryanm101]: https://github.com/ryanm101 +[@schmittx]: https://github.com/schmittx +[@schnoetz]: https://github.com/schnoetz +[@swilson]: https://github.com/swilson +[@thibmaek]: https://github.com/thibmaek +[@timstanley1985]: https://github.com/timstanley1985 +[@tinloaf]: https://github.com/tinloaf +[@titilambert]: https://github.com/titilambert +[@tomaszduda23]: https://github.com/tomaszduda23 +[@tomwaters]: https://github.com/tomwaters +[@tschmidty69]: https://github.com/tschmidty69 +[@ttroy50]: https://github.com/ttroy50 +[@ulido]: https://github.com/ulido +[@veleek]: https://github.com/veleek +[@w1ll1am23]: https://github.com/w1ll1am23 +[@yienxu]: https://github.com/yienxu +[__init__ docs]: https://home-assistant.io/components/__init__/ +[alarm_control_panel.alarmdecoder docs]: https://home-assistant.io/components/alarm_control_panel.alarmdecoder/ +[alarm_control_panel.concord232 docs]: https://home-assistant.io/components/alarm_control_panel.concord232/ +[alarm_control_panel.egardia docs]: https://home-assistant.io/components/alarm_control_panel.egardia/ +[alarmdecoder docs]: https://home-assistant.io/components/alarmdecoder/ +[alexa.intent docs]: https://home-assistant.io/components/alexa.intent/ +[alexa.smart_home docs]: https://home-assistant.io/components/alexa.smart_home/ +[api docs]: https://home-assistant.io/components/api/ +[automation.state docs]: https://home-assistant.io/docs/automation/trigger/#state-trigger +[binary_sensor docs]: https://home-assistant.io/components/binary_sensor/ +[binary_sensor.alarmdecoder docs]: https://home-assistant.io/components/binary_sensor.alarmdecoder/ +[binary_sensor.concord232 docs]: https://home-assistant.io/components/binary_sensor.concord232/ +[binary_sensor.deconz docs]: https://home-assistant.io/components/binary_sensor.deconz/ +[binary_sensor.isy994 docs]: https://home-assistant.io/components/binary_sensor.isy994/ +[binary_sensor.knx docs]: https://home-assistant.io/components/binary_sensor.knx/ +[binary_sensor.rest docs]: https://home-assistant.io/components/binary_sensor.rest/ +[binary_sensor.template docs]: https://home-assistant.io/components/binary_sensor.template/ +[binary_sensor.threshold docs]: https://home-assistant.io/components/binary_sensor.threshold/ +[binary_sensor.trend docs]: https://home-assistant.io/components/binary_sensor.trend/ +[binary_sensor.workday docs]: https://home-assistant.io/components/binary_sensor.workday/ +[camera.doorbird docs]: https://home-assistant.io/components/camera.doorbird/ +[camera.uvc docs]: https://home-assistant.io/components/camera.uvc/ +[climate docs]: https://home-assistant.io/components/climate/ +[climate.daikin docs]: https://home-assistant.io/components/climate.daikin/ +[climate.demo docs]: https://home-assistant.io/components/climate.demo/ +[climate.econet docs]: https://home-assistant.io/components/climate.econet/ +[climate.generic_thermostat docs]: https://home-assistant.io/components/climate.generic_thermostat/ +[climate.hive docs]: https://home-assistant.io/components/climate.hive/ +[climate.homematic docs]: https://home-assistant.io/components/climate.homematic/ +[climate.knx docs]: https://home-assistant.io/components/climate.knx/ +[climate.netatmo docs]: https://home-assistant.io/components/climate.netatmo/ +[climate.sensibo docs]: https://home-assistant.io/components/climate.sensibo/ +[climate.tado docs]: https://home-assistant.io/components/climate.tado/ +[climate.touchline docs]: https://home-assistant.io/components/climate.touchline/ +[cloud docs]: https://home-assistant.io/components/cloud/ +[cloud.auth_api docs]: https://home-assistant.io/components/cloud.auth_api/ +[cloud.http_api docs]: https://home-assistant.io/components/cloud.http_api/ +[cloud.iot docs]: https://home-assistant.io/components/cloud.iot/ +[coinbase docs]: https://home-assistant.io/components/coinbase/ +[conversation docs]: https://home-assistant.io/components/conversation/ +[cover.isy994 docs]: https://home-assistant.io/components/cover.isy994/ +[cover.knx docs]: https://home-assistant.io/components/cover.knx/ +[cover.tahoma docs]: https://home-assistant.io/components/cover.tahoma/ +[cover.template docs]: https://home-assistant.io/components/cover.template/ +[cover.xiaomi_aqara docs]: https://home-assistant.io/components/cover.xiaomi_aqara/ +[deconz docs]: https://home-assistant.io/components/deconz/ +[device_tracker docs]: https://home-assistant.io/components/device_tracker/ +[device_tracker.asuswrt docs]: https://home-assistant.io/components/device_tracker.asuswrt/ +[device_tracker.bluetooth_le_tracker docs]: https://home-assistant.io/components/device_tracker.bluetooth_le_tracker/ +[device_tracker.bluetooth_tracker docs]: https://home-assistant.io/components/device_tracker.bluetooth_tracker/ +[device_tracker.gpslogger docs]: https://home-assistant.io/components/device_tracker.gpslogger/ +[device_tracker.owntracks docs]: https://home-assistant.io/components/device_tracker.owntracks/ +[device_tracker.ping docs]: https://home-assistant.io/components/device_tracker.ping/ +[device_tracker.snmp docs]: https://home-assistant.io/components/device_tracker.snmp/ +[device_tracker.tile docs]: https://home-assistant.io/components/device_tracker.tile/ +[digital_ocean docs]: https://home-assistant.io/components/digital_ocean/ +[fan.insteon_local docs]: https://home-assistant.io/components/fan.insteon_local/ +[fan.isy994 docs]: https://home-assistant.io/components/fan.isy994/ +[fan.xiaomi_miio docs]: https://home-assistant.io/components/fan.xiaomi_miio/ +[google_assistant docs]: https://home-assistant.io/components/google_assistant/ +[google_assistant.http docs]: https://home-assistant.io/components/google_assistant.http/ +[google_assistant.smart_home docs]: https://home-assistant.io/components/google_assistant.smart_home/ +[group docs]: https://home-assistant.io/components/group/ +[hassio docs]: https://home-assistant.io/components/hassio/ +[history docs]: https://home-assistant.io/components/history/ +[hive docs]: https://home-assistant.io/components/hive/ +[homematic docs]: https://home-assistant.io/components/homematic/ +[http docs]: https://home-assistant.io/components/http/ +[image_processing.opencv docs]: https://home-assistant.io/components/image_processing.opencv/ +[input_boolean docs]: https://home-assistant.io/components/input_boolean/ +[input_select docs]: https://home-assistant.io/components/input_select/ +[insteon_local docs]: https://home-assistant.io/components/insteon_local/ +[isy994 docs]: https://home-assistant.io/components/isy994/ +[knx docs]: https://home-assistant.io/components/knx/ +[light.deconz docs]: https://home-assistant.io/components/light.deconz/ +[light.greenwave docs]: https://home-assistant.io/components/light.greenwave/ +[light.hive docs]: https://home-assistant.io/components/light.hive/ +[light.hue docs]: https://home-assistant.io/components/light.hue/ +[light.iglo docs]: https://home-assistant.io/components/light.iglo/ +[light.insteon_local docs]: https://home-assistant.io/components/light.insteon_local/ +[light.isy994 docs]: https://home-assistant.io/components/light.isy994/ +[light.knx docs]: https://home-assistant.io/components/light.knx/ +[light.lifx docs]: https://home-assistant.io/components/light.lifx/ +[light.mqtt docs]: https://home-assistant.io/components/light.mqtt/ +[light.osramlightify docs]: https://home-assistant.io/components/light.osramlightify/ +[light.template docs]: https://home-assistant.io/components/light.template/ +[light.tplink docs]: https://home-assistant.io/components/light.tplink/ +[light.xiaomi_miio docs]: https://home-assistant.io/components/light.xiaomi_miio/ +[light.zha docs]: https://home-assistant.io/components/light.zha/ +[lock.isy994 docs]: https://home-assistant.io/components/lock.isy994/ +[media_extractor docs]: https://home-assistant.io/components/media_extractor/ +[media_player.cast docs]: https://home-assistant.io/components/media_player.cast/ +[media_player.kodi docs]: https://home-assistant.io/components/media_player.kodi/ +[media_player.monoprice docs]: https://home-assistant.io/components/media_player.monoprice/ +[media_player.plex docs]: https://home-assistant.io/components/media_player.plex/ +[media_player.squeezebox docs]: https://home-assistant.io/components/media_player.squeezebox/ +[media_player.yamaha docs]: https://home-assistant.io/components/media_player.yamaha/ +[modbus docs]: https://home-assistant.io/components/modbus/ +[notify.html5 docs]: https://home-assistant.io/components/notify.html5/ +[notify.pushbullet docs]: https://home-assistant.io/components/notify.pushbullet/ +[notify.webostv docs]: https://home-assistant.io/components/notify.webostv/ +[octoprint docs]: https://home-assistant.io/components/octoprint/ +[prometheus docs]: https://home-assistant.io/components/prometheus/ +[python_script docs]: https://home-assistant.io/components/python_script/ +[rainbird docs]: https://home-assistant.io/components/rainbird/ +[remember_the_milk docs]: https://home-assistant.io/components/remember_the_milk/ +[sensor.alpha_vantage docs]: https://home-assistant.io/components/sensor.alpha_vantage/ +[sensor.bitcoin docs]: https://home-assistant.io/components/sensor.bitcoin/ +[sensor.coinbase docs]: https://home-assistant.io/components/sensor.coinbase/ +[sensor.deconz docs]: https://home-assistant.io/components/sensor.deconz/ +[sensor.deutsche_bahn docs]: https://home-assistant.io/components/sensor.deutsche_bahn/ +[sensor.discogs docs]: https://home-assistant.io/components/sensor.discogs/ +[sensor.etherscan docs]: https://home-assistant.io/components/sensor.etherscan/ +[sensor.fido docs]: https://home-assistant.io/components/sensor.fido/ +[sensor.hydroquebec docs]: https://home-assistant.io/components/sensor.hydroquebec/ +[sensor.imap_email_content docs]: https://home-assistant.io/components/sensor.imap_email_content/ +[sensor.irish_rail_transport docs]: https://home-assistant.io/components/sensor.irish_rail_transport/ +[sensor.isy994 docs]: https://home-assistant.io/components/sensor.isy994/ +[sensor.knx docs]: https://home-assistant.io/components/sensor.knx/ +[sensor.luftdaten docs]: https://home-assistant.io/components/sensor.luftdaten/ +[sensor.metoffice docs]: https://home-assistant.io/components/sensor.metoffice/ +[sensor.miflora docs]: https://home-assistant.io/components/sensor.miflora/ +[sensor.mqtt docs]: https://home-assistant.io/components/sensor.mqtt/ +[sensor.openweathermap docs]: https://home-assistant.io/components/sensor.openweathermap/ +[sensor.plex docs]: https://home-assistant.io/components/sensor.plex/ +[sensor.rainbird docs]: https://home-assistant.io/components/sensor.rainbird/ +[sensor.snmp docs]: https://home-assistant.io/components/sensor.snmp/ +[sensor.sochain docs]: https://home-assistant.io/components/sensor.sochain/ +[sensor.statistics docs]: https://home-assistant.io/components/sensor.statistics/ +[sensor.steam_online docs]: https://home-assistant.io/components/sensor.steam_online/ +[sensor.swiss_public_transport docs]: https://home-assistant.io/components/sensor.swiss_public_transport/ +[sensor.systemmonitor docs]: https://home-assistant.io/components/sensor.systemmonitor/ +[sensor.tado docs]: https://home-assistant.io/components/sensor.tado/ +[sensor.template docs]: https://home-assistant.io/components/sensor.template/ +[sensor.transmission docs]: https://home-assistant.io/components/sensor.transmission/ +[sensor.xbox_live docs]: https://home-assistant.io/components/sensor.xbox_live/ +[sensor.zoneminder docs]: https://home-assistant.io/components/sensor.zoneminder/ +[snips docs]: https://home-assistant.io/components/snips/ +[switch.insteon_local docs]: https://home-assistant.io/components/switch.insteon_local/ +[switch.isy994 docs]: https://home-assistant.io/components/switch.isy994/ +[switch.knx docs]: https://home-assistant.io/components/switch.knx/ +[switch.mochad docs]: https://home-assistant.io/components/switch.mochad/ +[switch.rainbird docs]: https://home-assistant.io/components/switch.rainbird/ +[switch.rpi_rf docs]: https://home-assistant.io/components/switch.rpi_rf/ +[switch.snmp docs]: https://home-assistant.io/components/switch.snmp/ +[switch.template docs]: https://home-assistant.io/components/switch.template/ +[switch.tplink docs]: https://home-assistant.io/components/switch.tplink/ +[switch.transmission docs]: https://home-assistant.io/components/switch.transmission/ +[switch.xiaomi_miio docs]: https://home-assistant.io/components/switch.xiaomi_miio/ +[tahoma docs]: https://home-assistant.io/components/tahoma/ +[telegram_bot docs]: https://home-assistant.io/components/telegram_bot/ +[timer docs]: https://home-assistant.io/components/timer/ +[tts.baidu docs]: https://home-assistant.io/components/tts.baidu/ +[tts.marytts docs]: https://home-assistant.io/components/tts.marytts/ +[updater docs]: https://home-assistant.io/components/updater/ +[vacuum.xiaomi_miio docs]: https://home-assistant.io/components/vacuum.xiaomi_miio/ +[weather.darksky docs]: https://home-assistant.io/components/weather.darksky/ +[weather.openweathermap docs]: https://home-assistant.io/components/weather.openweathermap/ +[weather.yweather docs]: https://home-assistant.io/components/weather.yweather/ +[websocket_api docs]: https://home-assistant.io/components/websocket_api/ +[wemo docs]: https://home-assistant.io/components/wemo/ +[zigbee docs]: https://home-assistant.io/components/zigbee/ diff --git a/source/images/blog/2018-01-0.61/components.png b/source/images/blog/2018-01-0.61/components.png new file mode 100644 index 0000000000000000000000000000000000000000..8f03dfe6b70bf2b2e071afb83f82449b15e56767 GIT binary patch literal 106189 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

pxK|IDl{Qx*}gfNrC>D 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 literal 0 HcmV?d00001 From 951dc25c4d9db19a613d41c3d90a20d0966575d0 Mon Sep 17 00:00:00 2001 From: Bob Anderson Date: Fri, 12 Jan 2018 14:13:58 -0800 Subject: [PATCH 075/993] Add detail on external client/server requirement (#4401) * Add detail on external client/server requirement * Update name --- source/_components/alarm_control_panel.concord232.markdown | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/source/_components/alarm_control_panel.concord232.markdown b/source/_components/alarm_control_panel.concord232.markdown index 9581683f3e..8a9c00b7b3 100644 --- a/source/_components/alarm_control_panel.concord232.markdown +++ b/source/_components/alarm_control_panel.concord232.markdown @@ -14,7 +14,9 @@ ha_release: 0.31 The `concord232` platform provides integration with GE, Interlogix (and other brands) alarm panels that support the RS-232 Automation Control Panel interface module (or have it built in). Supported panels include Concord 4. -To enable this, add the following lines to your `configuration.yaml`: +To use this platform, you will need to have the external concord232 client and server installed. The server must be running on the device which is connected to the automation module's serial port. The client must be installed on the machine running Home Assistant. These may often be the same machine, but do not have to be. For additional details in setting up and testing the client and server, see https://github.com/JasonCarter80/concord232. + +To enable this platform in home assistant, add the following lines to your `configuration.yaml`: ```yaml # Example configuration.yaml entry From e042340b41346a28b27996cdd1bff2b2f3349862 Mon Sep 17 00:00:00 2001 From: R Huish Date: Sat, 13 Jan 2018 17:58:57 +0000 Subject: [PATCH 076/993] Broken internal link for [autostart](docs/autostart/) (#4408) Current link giving 404 error --- source/_docs/installation/virtualenv.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_docs/installation/virtualenv.markdown b/source/_docs/installation/virtualenv.markdown index 022b8e9ea8..e62966b26c 100644 --- a/source/_docs/installation/virtualenv.markdown +++ b/source/_docs/installation/virtualenv.markdown @@ -34,7 +34,7 @@ _(If you're on a Debian based system, you will need to install Python virtual en ``` $ python3 -m pip install homeassistant ``` - 5. Configure it to [autostart](docs/autostart/) + 5. Configure it to [autostart](/docs/autostart/) 6. Or run Home Assistant manually: ``` $ hass --open-ui From 028158f2f7b7ac93c14f7dff76e8c6e744ec010c Mon Sep 17 00:00:00 2001 From: DubhAd Date: Sat, 13 Jan 2018 17:59:48 +0000 Subject: [PATCH 077/993] Added Python version notes (#4406) Given that people using Windows keep grabbing the alpha releases of 3.7, I've added a recommendation of Python 3.6, and a note about not downloading alpha or beta versions, and how to identify them. --- source/_docs/installation/windows.markdown | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/source/_docs/installation/windows.markdown b/source/_docs/installation/windows.markdown index 3554d44737..1c9ced30b0 100644 --- a/source/_docs/installation/windows.markdown +++ b/source/_docs/installation/windows.markdown @@ -9,7 +9,11 @@ sharing: true footer: true --- -To run Home Assistant on Microsoft Windows installation you need to install Python first. Download Python for [https://www.python.org/downloads/windows/](https://www.python.org/downloads/windows/) and follow the instructions of the installer. +To run Home Assistant on Microsoft Windows installation you need to install Python first. Download Python (the latest version of Python 3.6 is recommended) for [https://www.python.org/downloads/windows/](https://www.python.org/downloads/windows/) and follow the instructions of the installer. + +

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

Start From b70a54bacbea3cb5a41366386c86789f51f1ed30 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Sat, 13 Jan 2018 19:10:42 +0100 Subject: [PATCH 078/993] Update for 0.61 --- source/developers/credits.markdown | 270 +++++++++++++---------------- 1 file changed, 122 insertions(+), 148 deletions(-) diff --git a/source/developers/credits.markdown b/source/developers/credits.markdown index 00acf5e0df..9e5a224e4b 100644 --- a/source/developers/credits.markdown +++ b/source/developers/credits.markdown @@ -2,7 +2,7 @@ layout: page title: "Credits" description: "Credits for the developers who contributed to Home Assistant." -date: 2017-12-24 22:59:57 +0000 +date: 2018-01-13 18:07:58 +0000 sidebar: true comments: false sharing: true @@ -13,27 +13,21 @@ This page contains a list of people who have contributed in one way or another t ### {% linkable_title Author %} -- [Paulus Schoutsen (@balloob)](https://github.com/balloob "6082 total commits to the home-assistant organization, 3596 commits to home-assistant, 1324 commits to home-assistant.github.io, 674 commits to home-assistant-polymer, 244 commits to home-assistant-js, 118 commits to netdisco, 44 commits to home-assistant-js-websocket, 26 commits to hass-release, 14 commits to home-assistant-assets, 8 commits to example-custom-config, 7 commits to micropython-home-assistant, 6 commits to LabelBot, 5 commits to hassio, 3 commits to hassio-addons, 2 commits to hassio-addons-example, 2 commits to hassio-build, 2 commits to python-hassbian, 2 commits to issue-bot, 2 commits to lambda-home-assistant-github, 1 commit to home-assistant-notebooks, 1 commit to home-assistant-iOS, 1 commit to warrant") +- [Paulus Schoutsen (@balloob)](https://github.com/balloob "6125 total commits to the home-assistant organization, 3619 commits to home-assistant, 1332 commits to home-assistant.github.io, 682 commits to home-assistant-polymer, 244 commits to home-assistant-js, 118 commits to netdisco, 44 commits to home-assistant-js-websocket, 26 commits to hass-release, 14 commits to home-assistant-assets, 10 commits to LabelBot, 8 commits to example-custom-config, 7 commits to micropython-home-assistant, 5 commits to hassio, 3 commits to hassio-addons, 2 commits to hassio-addons-example, 2 commits to hassio-build, 2 commits to python-hassbian, 2 commits to issue-bot, 2 commits to lambda-home-assistant-github, 1 commit to home-assistant-notebooks, 1 commit to warrant, 1 commit to home-assistant-iOS") ### {% linkable_title Contributors %} (in alphabetical order) - [7even (@hwikene)](https://github.com/hwikene "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") -- [Aaron Bach (@bachya)](https://github.com/bachya "35 total commits to the home-assistant organization, 23 commits to home-assistant, 12 commits to home-assistant.github.io") +- [Aaron Bach (@bachya)](https://github.com/bachya "36 total commits to the home-assistant organization, 23 commits to home-assistant, 13 commits to home-assistant.github.io") - [Aaron Linville (@linville)](https://github.com/linville "2 total commits to the home-assistant organization, 2 commits to appdaemon") -- [Aaron Morris (@Morrisai)](https://github.com/Morrisai "1 total commits to the home-assistant organization, 1 commit to home-assistant") -- [Aaron Polley (@xarnze)](https://github.com/xarnze "1 total commits to the home-assistant organization, 1 commit to home-assistant") -- [Abhishek Anand (@aa755)](https://github.com/aa755 "1 total commits to the home-assistant organization, 1 commit to home-assistant") -- [Abílio Costa (@abmantis)](https://github.com/abmantis "20 total commits to the home-assistant organization, 12 commits to home-assistant, 5 commits to home-assistant.github.io, 1 commit to home-assistant-js-websocket, 1 commit to netdisco, 1 commit to home-assistant-polymer") -- [Adam (@SilvrrGIT)](https://github.com/SilvrrGIT "9 total commits to the home-assistant organization, 8 commits to home-assistant.github.io, 1 commit to home-assistant") -- [Adam Baxter (@voltagex)](https://github.com/voltagex "2 total commits to the home-assistant organization, 1 commit to home-assistant-polymer, 1 commit to home-assistant") +- [Abílio Costa (@abmantis)](https://github.com/abmantis "20 total commits to the home-assistant organization, 12 commits to home-assistant, 5 commits to home-assistant.github.io, 1 commit to netdisco, 1 commit to home-assistant-js-websocket, 1 commit to home-assistant-polymer") +- [Adam (@SilvrrGIT)](https://github.com/SilvrrGIT "8 total commits to the home-assistant organization, 8 commits to home-assistant.github.io") +- [Adam Baxter (@voltagex)](https://github.com/voltagex "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") - [Adam Cooper (@GenericStudent)](https://github.com/GenericStudent "11 total commits to the home-assistant organization, 8 commits to home-assistant, 3 commits to home-assistant.github.io") - [Adam Dullage (@Dullage)](https://github.com/Dullage "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") -- [Adam Garcia (@pancho-villa)](https://github.com/pancho-villa "1 total commits to the home-assistant organization, 1 commit to home-assistant") -- [Adam Mills (@armills)](https://github.com/armills "284 total commits to the home-assistant organization, 148 commits to home-assistant, 81 commits to home-assistant-polymer, 51 commits to home-assistant.github.io, 3 commits to home-assistant-js, 1 commit to homebridge-homeassistant") -- [Adam Stone (@astone123)](https://github.com/astone123 "1 total commits to the home-assistant organization, 1 commit to home-assistant") -- [Adde Lovein (@addelovein)](https://github.com/addelovein "1 total commits to the home-assistant organization, 1 commit to home-assistant") +- [Adam Mills (@armills)](https://github.com/armills "286 total commits to the home-assistant organization, 150 commits to home-assistant, 81 commits to home-assistant-polymer, 51 commits to home-assistant.github.io, 3 commits to home-assistant-js, 1 commit to homebridge-homeassistant") - [Adrian Popa (@mad-ady)](https://github.com/mad-ady "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") - [Adrien Ball (@adrienball)](https://github.com/adrienball "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Adrien Brault (@adrienbrault)](https://github.com/adrienbrault "2 total commits to the home-assistant organization, 2 commits to home-assistant") @@ -47,53 +41,46 @@ This page contains a list of people who have contributed in one way or another t - [Albert Lee (@trisk)](https://github.com/trisk "13 total commits to the home-assistant organization, 8 commits to home-assistant, 5 commits to home-assistant.github.io") - [Alberto Arias Maestro (@albertoarias)](https://github.com/albertoarias "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Alessandro Mogavero (@alexmogavero)](https://github.com/alexmogavero "3 total commits to the home-assistant organization, 3 commits to home-assistant") -- [Alex (@alexrockt)](https://github.com/alexrockt "1 total commits to the home-assistant organization, 1 commit to home-assistant") -- [Alex (@MungoRae)](https://github.com/MungoRae "1 total commits to the home-assistant organization, 1 commit to home-assistant") -- [Alex (@asbach)](https://github.com/asbach "3 total commits to the home-assistant organization, 2 commits to home-assistant.github.io, 1 commit to home-assistant") +- [Alex (@asbach)](https://github.com/asbach "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [Alex Barcelo (@alexbarcelo)](https://github.com/alexbarcelo "3 total commits to the home-assistant organization, 3 commits to hassio-addons") -- [Alex Harvey (@infamy)](https://github.com/infamy "25 total commits to the home-assistant organization, 14 commits to home-assistant, 11 commits to home-assistant.github.io") -- [Alex Mekkering (@AlexMekkering)](https://github.com/AlexMekkering "3 total commits to the home-assistant organization, 2 commits to home-assistant.github.io, 1 commit to home-assistant") +- [Alex Harvey (@infamy)](https://github.com/infamy "29 total commits to the home-assistant organization, 14 commits to home-assistant, 11 commits to home-assistant.github.io, 4 commits to hassio-os") +- [Alex Mekkering (@AlexMekkering)](https://github.com/AlexMekkering "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [Alex MF (@adsmf)](https://github.com/adsmf "1 total commits to the home-assistant organization, 1 commit to hassio-addons") - [Alex Tzonkov (@attzonko)](https://github.com/attzonko "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [Alexander Kratzer (@hexxter)](https://github.com/hexxter "8 total commits to the home-assistant organization, 8 commits to home-assistant") -- [Alexander Rust (@binarybucks)](https://github.com/binarybucks "1 total commits to the home-assistant organization, 1 commit to home-assistant") - [Alexandre Perrin (@kAworu)](https://github.com/kAworu "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [Alexis Iglauer (@ax42)](https://github.com/ax42 "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [Alfie Day (@Azelphur)](https://github.com/Azelphur "12 total commits to the home-assistant organization, 12 commits to home-assistant") -- [Aliaksandr (@minchik)](https://github.com/minchik "7 total commits to the home-assistant organization, 3 commits to home-assistant.github.io, 2 commits to appdaemon, 2 commits to home-assistant") -- [Allan Glen (@allanglen)](https://github.com/allanglen "1 total commits to the home-assistant organization, 1 commit to home-assistant") -- [Alok Saboo (@arsaboo)](https://github.com/arsaboo "119 total commits to the home-assistant organization, 69 commits to home-assistant.github.io, 45 commits to home-assistant, 3 commits to home-assistant-polymer, 1 commit to hassio-addons, 1 commit to pi-gen") +- [Aliaksandr (@minchik)](https://github.com/minchik "7 total commits to the home-assistant organization, 3 commits to home-assistant.github.io, 2 commits to home-assistant, 2 commits to appdaemon") +- [Alok Saboo (@arsaboo)](https://github.com/arsaboo "125 total commits to the home-assistant organization, 75 commits to home-assistant.github.io, 45 commits to home-assistant, 3 commits to home-assistant-polymer, 1 commit to pi-gen, 1 commit to hassio-addons") - [amigian74 (@amigian74)](https://github.com/amigian74 "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [amorsillo (@AndrewMorsillo)](https://github.com/AndrewMorsillo "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") - [Anders Fogh Eriksen (@Fogh)](https://github.com/Fogh "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") -- [Anders Melchiorsen (@amelchio)](https://github.com/amelchio "120 total commits to the home-assistant organization, 86 commits to home-assistant, 32 commits to home-assistant.github.io, 2 commits to home-assistant-polymer") -- [Andrea Campi (@andreacampi)](https://github.com/andreacampi "6 total commits to the home-assistant organization, 4 commits to home-assistant, 2 commits to home-assistant.github.io") +- [Anders Melchiorsen (@amelchio)](https://github.com/amelchio "126 total commits to the home-assistant organization, 91 commits to home-assistant, 33 commits to home-assistant.github.io, 2 commits to home-assistant-polymer") +- [Andrea Campi (@andreacampi)](https://github.com/andreacampi "8 total commits to the home-assistant organization, 6 commits to home-assistant, 2 commits to home-assistant.github.io") - [Andrea Falcone (@asfalcone)](https://github.com/asfalcone "5 total commits to the home-assistant organization, 5 commits to issue-bot") -- [Andreas Björshammar (@abjorshammar)](https://github.com/abjorshammar "1 total commits to the home-assistant organization, 1 commit to home-assistant") -- [Andreas Cambitsis (@acambitsis)](https://github.com/acambitsis "1 total commits to the home-assistant organization, 1 commit to home-assistant") -- [Andreas Jacobsen (@andreasjacobsen93)](https://github.com/andreasjacobsen93 "9 total commits to the home-assistant organization, 6 commits to home-assistant.github.io, 2 commits to hassio-addons, 1 commit to home-assistant") +- [Andreas Björshammar (@abjorshammar)](https://github.com/abjorshammar "2 total commits to the home-assistant organization, 2 commits to home-assistant") +- [Andreas Jacobsen (@andreasjacobsen93)](https://github.com/andreasjacobsen93 "8 total commits to the home-assistant organization, 6 commits to home-assistant.github.io, 2 commits to hassio-addons") - [Andreas Rammhold (@andir)](https://github.com/andir "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") - [Andreas Renberg (@IQAndreas)](https://github.com/IQAndreas "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [Andreea-Daniela Ene (@AndreeaEne)](https://github.com/AndreeaEne "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") -- [Andrej Friesen (@ajfriesen)](https://github.com/ajfriesen "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") -- [Andrew (@aneisch)](https://github.com/aneisch "5 total commits to the home-assistant organization, 4 commits to home-assistant.github.io, 1 commit to home-assistant") -- [Andrew (@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 Cockburn (@acockburn)](https://github.com/acockburn "662 total commits to the home-assistant organization, 530 commits to appdaemon, 88 commits to hadashboard, 25 commits to scenegen, 19 commits to home-assistant.github.io") -- [Andrew LeCody (@aceat64)](https://github.com/aceat64 "1 total commits to the home-assistant organization, 1 commit to home-assistant") +- [Andrej Friesen (@ajfriesen)](https://github.com/ajfriesen "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") +- [Andrew (@aneisch)](https://github.com/aneisch "4 total commits to the home-assistant organization, 4 commits to home-assistant.github.io") +- [Andrew (@aoakeson)](https://github.com/aoakeson "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") +- [Andrew Cockburn (@acockburn)](https://github.com/acockburn "692 total commits to the home-assistant organization, 560 commits to appdaemon, 88 commits to hadashboard, 25 commits to scenegen, 19 commits to home-assistant.github.io") - [Andrew Smith (@andrewmichaelsmith)](https://github.com/andrewmichaelsmith "2 total commits to the home-assistant organization, 2 commits to pi-gen") - [Andrew Stock (@watchforstock)](https://github.com/watchforstock "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Andrew Thigpen (@andythigpen)](https://github.com/andythigpen "33 total commits to the home-assistant organization, 32 commits to home-assistant, 1 commit to home-assistant-js") -- [Andrew Williams (@nikdoof)](https://github.com/nikdoof "1 total commits to the home-assistant organization, 1 commit to home-assistant") - [andrew-curtis (@andrew-curtis)](https://github.com/andrew-curtis "7 total commits to the home-assistant organization, 7 commits to home-assistant.github.io") -- [Andrey (@andrey-git)](https://github.com/andrey-git "253 total commits to the home-assistant organization, 109 commits to home-assistant-polymer, 108 commits to home-assistant, 36 commits to home-assistant.github.io") -- [Andrey Kupreychik (@foxel)](https://github.com/foxel "8 total commits to the home-assistant organization, 6 commits to home-assistant, 2 commits to home-assistant.github.io") -- [Andrzej (@andriej)](https://github.com/andriej "3 total commits to the home-assistant organization, 2 commits to home-assistant.github.io, 1 commit to home-assistant") +- [Andrey (@andrey-git)](https://github.com/andrey-git "264 total commits to the home-assistant organization, 116 commits to home-assistant-polymer, 111 commits to home-assistant, 37 commits to home-assistant.github.io") +- [Andrey Kupreychik (@foxel)](https://github.com/foxel "9 total commits to the home-assistant organization, 6 commits to home-assistant, 3 commits to home-assistant.github.io") +- [Andrzej (@andriej)](https://github.com/andriej "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [Andréas Lundgren (@adevade)](https://github.com/adevade "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") -- [Andy Castille (@Klikini)](https://github.com/Klikini "9 total commits to the home-assistant organization, 6 commits to home-assistant, 3 commits to home-assistant.github.io") +- [Andy Castille (@Klikini)](https://github.com/Klikini "11 total commits to the home-assistant organization, 7 commits to home-assistant, 4 commits to home-assistant.github.io") - [Andy Loughran (@andylockran)](https://github.com/andylockran "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [andyat (@andyat)](https://github.com/andyat "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [anotherthomas (@anotherthomas)](https://github.com/anotherthomas "1 total commits to the home-assistant organization, 1 commit to hassio-addons") -- [Anthony Hughes (@tony2nite)](https://github.com/tony2nite "2 total commits to the home-assistant organization, 1 commit to netdisco, 1 commit to home-assistant") +- [Anthony Hughes (@tony2nite)](https://github.com/tony2nite "1 total commits to the home-assistant organization, 1 commit to netdisco") - [Antoine Bertin (@Diaoul)](https://github.com/Diaoul "5 total commits to the home-assistant organization, 2 commits to home-assistant, 2 commits to home-assistant.github.io, 1 commit to home-assistant-polymer") - [Anton Glukhov (@toxxin)](https://github.com/toxxin "1 total commits to the home-assistant organization, 1 commit to libcoap") - [Anton Lundin (@glance-)](https://github.com/glance- "7 total commits to the home-assistant organization, 6 commits to home-assistant, 1 commit to netdisco") @@ -115,6 +102,7 @@ This page contains a list of people who have contributed in one way or another t - [Austin (@trainman419)](https://github.com/trainman419 "8 total commits to the home-assistant organization, 8 commits to home-assistant") - [Avraham David Gelbfish (@adgelbfish)](https://github.com/adgelbfish "2 total commits to the home-assistant organization, 1 commit to hadashboard, 1 commit to pi-gen") - [azeroth12 (@azeroth12)](https://github.com/azeroth12 "1 total commits to the home-assistant organization, 1 commit to appdaemon") +- [baflo (@baflo)](https://github.com/baflo "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") - [Balázs Suhajda (@suhajdab)](https://github.com/suhajdab "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [Baran Kaynak (@barankaynak)](https://github.com/barankaynak "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") - [Barry Williams (@bazwilliams)](https://github.com/bazwilliams "10 total commits to the home-assistant organization, 6 commits to home-assistant, 2 commits to netdisco, 2 commits to home-assistant.github.io") @@ -128,16 +116,19 @@ This page contains a list of people who have contributed in one way or another t - [Ben Doerr (@bendoerr)](https://github.com/bendoerr "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [Ben Nuttall (@bennuttall)](https://github.com/bennuttall "1 total commits to the home-assistant organization, 1 commit to pi-gen") - [Ben Origas (@borigas)](https://github.com/borigas "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") -- [Ben Randall (@veleek)](https://github.com/veleek "2 total commits to the home-assistant organization, 2 commits to home-assistant") +- [Ben Randall (@veleek)](https://github.com/veleek "3 total commits to the home-assistant organization, 3 commits to home-assistant") - [Ben Thomas (@wazoo)](https://github.com/wazoo "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") - [Benjamin Parzella (@bparzella)](https://github.com/bparzella "1 total commits to the home-assistant organization, 1 commit to pi-gen") -- [bestlibre (@bestlibre)](https://github.com/bestlibre "16 total commits to the home-assistant organization, 8 commits to home-assistant, 5 commits to home-assistant.github.io, 1 commit to hassio-build, 1 commit to hassio, 1 commit to home-assistant-polymer") +- [Benji (@bbbenji)](https://github.com/bbbenji "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") +- [bestlibre (@bestlibre)](https://github.com/bestlibre "16 total commits to the home-assistant organization, 8 commits to home-assistant, 5 commits to home-assistant.github.io, 1 commit to hassio, 1 commit to hassio-build, 1 commit to home-assistant-polymer") - [BigMoby (@bigmoby)](https://github.com/bigmoby "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [BioSehnsucht (@BioSehnsucht)](https://github.com/BioSehnsucht "12 total commits to the home-assistant organization, 7 commits to home-assistant.github.io, 3 commits to home-assistant, 2 commits to home-assistant-polymer") - [Bjarni Ivarsson (@bjarniivarsson)](https://github.com/bjarniivarsson "8 total commits to the home-assistant organization, 5 commits to home-assistant, 3 commits to home-assistant-polymer") - [Björn Orri (@bjornorri)](https://github.com/bjornorri "1 total commits to the home-assistant organization, 1 commit to home-assistant-iOS") - [Björn Ramberg (@bjorne)](https://github.com/bjorne "1 total commits to the home-assistant organization, 1 commit to hassio-build") - [Blanyal D'Souza (@blanyal)](https://github.com/blanyal "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") +- [Bob Anderson (@rwa)](https://github.com/rwa "4 total commits to the home-assistant organization, 4 commits to home-assistant") +- [Bob Igo (@Human)](https://github.com/Human "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [Boced66 (@boced66)](https://github.com/boced66 "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [boltgolt (@Boltgolt)](https://github.com/Boltgolt "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [boojew (@boojew)](https://github.com/boojew "8 total commits to the home-assistant organization, 6 commits to home-assistant.github.io, 2 commits to home-assistant") @@ -151,10 +142,10 @@ This page contains a list of people who have contributed in one way or another t - [Brandon Mathis (@imathis)](https://github.com/imathis "484 total commits to the home-assistant organization, 484 commits to home-assistant.github.io") - [Brandon Weeks (@brandonweeks)](https://github.com/brandonweeks "3 total commits to the home-assistant organization, 3 commits to home-assistant") - [brburns (@brburns)](https://github.com/brburns "2 total commits to the home-assistant organization, 2 commits to netdisco") -- [Brendon Baumgartner (@bbrendon)](https://github.com/bbrendon "10 total commits to the home-assistant organization, 10 commits to home-assistant.github.io") +- [Brendon Baumgartner (@bbrendon)](https://github.com/bbrendon "11 total commits to the home-assistant organization, 11 commits to home-assistant.github.io") - [Brent Hughes (@bah2830)](https://github.com/bah2830 "27 total commits to the home-assistant organization, 18 commits to home-assistant, 8 commits to home-assistant.github.io, 1 commit to netdisco") - [Brent Kerlin (@bkerlin)](https://github.com/bkerlin "1 total commits to the home-assistant organization, 1 commit to hassio-build") -- [Brent Saltzman (@brent20)](https://github.com/brent20 "7 total commits to the home-assistant organization, 7 commits to home-assistant.github.io") +- [Brent Saltzman (@brent20)](https://github.com/brent20 "9 total commits to the home-assistant organization, 9 commits to home-assistant.github.io") - [Brian Cribbs (@cribbstechnologies)](https://github.com/cribbstechnologies "43 total commits to the home-assistant organization, 26 commits to home-assistant, 15 commits to home-assistant.github.io, 2 commits to home-assistant-polymer") - [Brian Fitzgerald (@Brianfit)](https://github.com/Brianfit "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [Brian Hopkins (@btotharye)](https://github.com/btotharye "6 total commits to the home-assistant organization, 4 commits to home-assistant.github.io, 2 commits to home-assistant") @@ -165,18 +156,18 @@ This page contains a list of people who have contributed in one way or another t - [Bruno Adele (@badele)](https://github.com/badele "22 total commits to the home-assistant organization, 22 commits to home-assistant") - [Bruno Binet (@bbinet)](https://github.com/bbinet "1 total commits to the home-assistant organization, 1 commit to hassio-build") - [Bryce Edwards (@hoopty)](https://github.com/hoopty "5 total commits to the home-assistant organization, 3 commits to home-assistant, 2 commits to home-assistant.github.io") -- [c727 (@c727)](https://github.com/c727 "16 total commits to the home-assistant organization, 10 commits to home-assistant-polymer, 6 commits to home-assistant.github.io") +- [c727 (@c727)](https://github.com/c727 "18 total commits to the home-assistant organization, 11 commits to home-assistant-polymer, 7 commits to home-assistant.github.io") - [Caius Cioran (@caiuspb)](https://github.com/caiuspb "3 total commits to the home-assistant organization, 3 commits to home-assistant") - [Caleb (@finish06)](https://github.com/finish06 "7 total commits to the home-assistant organization, 7 commits to home-assistant") - [Cameron Bulock (@cbulock)](https://github.com/cbulock "5 total commits to the home-assistant organization, 2 commits to home-assistant, 2 commits to home-assistant.github.io, 1 commit to netdisco") -- [Carlo Costanzo (@CCOSTAN)](https://github.com/CCOSTAN "92 total commits to the home-assistant organization, 84 commits to home-assistant.github.io, 5 commits to home-assistant, 1 commit to hassbian-scripts, 1 commit to fabric-home-assistant, 1 commit to homebridge-homeassistant") +- [Carlo Costanzo (@CCOSTAN)](https://github.com/CCOSTAN "95 total commits to the home-assistant organization, 87 commits to home-assistant.github.io, 5 commits to home-assistant, 1 commit to fabric-home-assistant, 1 commit to homebridge-homeassistant, 1 commit to hassbian-scripts") - [carlosmgr (@carlosmgr)](https://github.com/carlosmgr "6 total commits to the home-assistant organization, 6 commits to home-assistant") - [Carter (@BluGeni)](https://github.com/BluGeni "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") -- [cdce8p (@cdce8p)](https://github.com/cdce8p "14 total commits to the home-assistant organization, 10 commits to home-assistant.github.io, 2 commits to home-assistant-polymer, 2 commits to home-assistant") +- [cdce8p (@cdce8p)](https://github.com/cdce8p "21 total commits to the home-assistant organization, 12 commits to home-assistant.github.io, 7 commits to home-assistant, 2 commits to home-assistant-polymer") - [Cecron (@Cecron)](https://github.com/Cecron "1 total commits to the home-assistant organization, 1 commit to appdaemon") - [Cenk Gündoğan (@cgundogan)](https://github.com/cgundogan "1 total commits to the home-assistant organization, 1 commit to libcoap") - [Cezar Sá Espinola (@cezarsa)](https://github.com/cezarsa "2 total commits to the home-assistant organization, 2 commits to home-assistant") -- [cgtobi (@cgtobi)](https://github.com/cgtobi "21 total commits to the home-assistant organization, 12 commits to home-assistant, 9 commits to home-assistant.github.io") +- [cgtobi (@cgtobi)](https://github.com/cgtobi "22 total commits to the home-assistant organization, 13 commits to home-assistant, 9 commits to home-assistant.github.io") - [chanders (@chanders)](https://github.com/chanders "2 total commits to the home-assistant organization, 2 commits to hadashboard") - [Charles Blonde (@CharlesBlonde)](https://github.com/CharlesBlonde "19 total commits to the home-assistant organization, 12 commits to home-assistant, 7 commits to home-assistant.github.io") - [Charles Garwood (@cgarwood)](https://github.com/cgarwood "17 total commits to the home-assistant organization, 11 commits to home-assistant.github.io, 6 commits to home-assistant") @@ -196,45 +187,48 @@ This page contains a list of people who have contributed in one way or another t - [Christian Brædstrup (@LinuxChristian)](https://github.com/LinuxChristian "8 total commits to the home-assistant organization, 8 commits to home-assistant") - [Christian Lasarczyk (@ChrisLasar)](https://github.com/ChrisLasar "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [Christian Studer (@cstuder)](https://github.com/cstuder "4 total commits to the home-assistant organization, 4 commits to home-assistant.github.io") -- [ChristianKuehnel (@ChristianKuehnel)](https://github.com/ChristianKuehnel "12 total commits to the home-assistant organization, 6 commits to home-assistant, 6 commits to home-assistant.github.io") +- [ChristianKuehnel (@ChristianKuehnel)](https://github.com/ChristianKuehnel "15 total commits to the home-assistant organization, 8 commits to home-assistant, 7 commits to home-assistant.github.io") - [Christoffer Kylvåg (@christoe)](https://github.com/christoe "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [Christoph Wagner (@Christoph-Wagner)](https://github.com/Christoph-Wagner "4 total commits to the home-assistant organization, 4 commits to home-assistant.github.io") -- [Christopher Viel (@Chris-V)](https://github.com/Chris-V "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") +- [Christopher Viel (@Chris-V)](https://github.com/Chris-V "5 total commits to the home-assistant organization, 3 commits to home-assistant, 2 commits to home-assistant.github.io") - [chrysn (@chrysn)](https://github.com/chrysn "65 total commits to the home-assistant organization, 65 commits to libcoap") - [chz^3 (@chzchzchz)](https://github.com/chzchzchz "1 total commits to the home-assistant organization, 1 commit to pi-gen") - [Ciquattro (@CiquattroFPV)](https://github.com/CiquattroFPV "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [clach04 (@clach04)](https://github.com/clach04 "5 total commits to the home-assistant organization, 3 commits to home-assistant.github.io, 2 commits to home-assistant") - [Claus F. Strasburger (@cfstras)](https://github.com/cfstras "1 total commits to the home-assistant organization, 1 commit to pi-gen") +- [cogneato (@cogneato)](https://github.com/cogneato "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [Colin Dunn (@colindunn)](https://github.com/colindunn "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Colin O'Dell (@colinodell)](https://github.com/colinodell "24 total commits to the home-assistant organization, 13 commits to home-assistant, 11 commits to home-assistant.github.io") - [Colin Teubner (@netopiax)](https://github.com/netopiax "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") +- [Conrad Juhl Andersen (@cnrd)](https://github.com/cnrd "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Constantine Grantcharov (@conz27)](https://github.com/conz27 "1 total commits to the home-assistant organization, 1 commit to libcoap") - [Constantine Poltyrev (@shprota)](https://github.com/shprota "1 total commits to the home-assistant organization, 1 commit to appdaemon") - [Corban Mailloux (@corbanmailloux)](https://github.com/corbanmailloux "18 total commits to the home-assistant organization, 18 commits to home-assistant.github.io") - [Corey Pauley (@devspacenine)](https://github.com/devspacenine "5 total commits to the home-assistant organization, 3 commits to home-assistant.github.io, 2 commits to home-assistant") - [corneyl (@corneyl)](https://github.com/corneyl "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Craig J. Ward (@wardcraigj)](https://github.com/wardcraigj "23 total commits to the home-assistant organization, 17 commits to home-assistant, 6 commits to home-assistant.github.io") -- [CTLS (@CTLS)](https://github.com/CTLS "2 total commits to the home-assistant organization, 2 commits to home-assistant") +- [CTLS (@CTLS)](https://github.com/CTLS "3 total commits to the home-assistant organization, 3 commits to home-assistant") - [cxlwill (@cxlwill)](https://github.com/cxlwill "2 total commits to the home-assistant organization, 2 commits to home-assistant-polymer") - [Dale Higgs (@dale3h)](https://github.com/dale3h "33 total commits to the home-assistant organization, 21 commits to home-assistant.github.io, 10 commits to home-assistant, 1 commit to hassbot, 1 commit to homebridge-homeassistant") - [Dan (@danieljkemp)](https://github.com/danieljkemp "23 total commits to the home-assistant organization, 16 commits to home-assistant, 7 commits to home-assistant.github.io") - [Dan Chen (@djchen)](https://github.com/djchen "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Dan Cinnamon (@Cinntax)](https://github.com/Cinntax "14 total commits to the home-assistant organization, 12 commits to home-assistant, 2 commits to home-assistant.github.io") - [Dan Faulknor (@danielfaulknor)](https://github.com/danielfaulknor "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") -- [Dan Nixon (@DanNixon)](https://github.com/DanNixon "4 total commits to the home-assistant organization, 4 commits to home-assistant") +- [Dan Nixon (@DanNixon)](https://github.com/DanNixon "17 total commits to the home-assistant organization, 12 commits to home-assistant, 5 commits to home-assistant.github.io") - [Dan Ports (@drkp)](https://github.com/drkp "4 total commits to the home-assistant organization, 4 commits to home-assistant") - [Dan Sarginson (@dansarginson)](https://github.com/dansarginson "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Dan Smith (@kk7ds)](https://github.com/kk7ds "84 total commits to the home-assistant organization, 68 commits to home-assistant, 14 commits to home-assistant.github.io, 2 commits to home-assistant-polymer") - [Dan Sullivan (@dansullivan86)](https://github.com/dansullivan86 "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [Dani (@danichispa)](https://github.com/danichispa "9 total commits to the home-assistant organization, 9 commits to home-assistant.github.io") +- [Daniel (@delneet)](https://github.com/delneet "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [Daniel Escoz (@Darkhogg)](https://github.com/Darkhogg "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") -- [Daniel Høyer Iversen (@Danielhiversen)](https://github.com/Danielhiversen "364 total commits to the home-assistant organization, 242 commits to home-assistant, 119 commits to home-assistant.github.io, 3 commits to home-assistant-polymer") -- [Daniel Perna (@danielperna84)](https://github.com/danielperna84 "75 total commits to the home-assistant organization, 38 commits to home-assistant.github.io, 34 commits to home-assistant, 3 commits to hassio-addons") +- [Daniel Høyer Iversen (@Danielhiversen)](https://github.com/Danielhiversen "367 total commits to the home-assistant organization, 245 commits to home-assistant, 119 commits to home-assistant.github.io, 3 commits to home-assistant-polymer") +- [Daniel Perna (@danielperna84)](https://github.com/danielperna84 "77 total commits to the home-assistant organization, 38 commits to home-assistant.github.io, 35 commits to home-assistant, 4 commits to hassio-addons") - [Daniel Peukert (@dpeukert)](https://github.com/dpeukert "3 total commits to the home-assistant organization, 2 commits to home-assistant.github.io, 1 commit to home-assistant-polymer") - [Daniel Schaal (@schaal)](https://github.com/schaal "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Daniel Stone (@daniel-stoneuk)](https://github.com/daniel-stoneuk "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [Daniel Trnka (@trnila)](https://github.com/trnila "2 total commits to the home-assistant organization, 2 commits to appdaemon") -- [Daniel Watkins (@OddBloke)](https://github.com/OddBloke "2 total commits to the home-assistant organization, 2 commits to home-assistant") +- [Daniel Watkins (@OddBloke)](https://github.com/OddBloke "3 total commits to the home-assistant organization, 3 commits to home-assistant") - [Daniel Welch (@danielwelch)](https://github.com/danielwelch "2 total commits to the home-assistant organization, 2 commits to homebridge-homeassistant") - [DanielXYZ2000 (@DanielXYZ2000)](https://github.com/DanielXYZ2000 "3 total commits to the home-assistant organization, 2 commits to home-assistant.github.io, 1 commit to hassio-addons") - [Daniyar Yeralin (@yeralin)](https://github.com/yeralin "1 total commits to the home-assistant organization, 1 commit to homebridge-homeassistant") @@ -264,21 +258,21 @@ This page contains a list of people who have contributed in one way or another t - [Dennis Karpienski (@TheRealLink)](https://github.com/TheRealLink "24 total commits to the home-assistant organization, 15 commits to home-assistant-polymer, 6 commits to home-assistant, 2 commits to home-assistant.github.io, 1 commit to netdisco") - [Dennis Sutch (@sutch)](https://github.com/sutch "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [Derek (@itchaboy)](https://github.com/itchaboy "5 total commits to the home-assistant organization, 5 commits to home-assistant.github.io") -- [Derek Brooks (@broox)](https://github.com/broox "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") +- [Derek Brooks (@broox)](https://github.com/broox "39 total commits to the home-assistant organization, 30 commits to home-assistant, 9 commits to home-assistant.github.io") - [dersger (@dersger)](https://github.com/dersger "3 total commits to the home-assistant organization, 2 commits to home-assistant, 1 commit to home-assistant-polymer") - [devdelay (@devdelay)](https://github.com/devdelay "16 total commits to the home-assistant organization, 7 commits to home-assistant.github.io, 5 commits to home-assistant, 4 commits to homebridge-homeassistant") -- [Devon Peet (@dpeet)](https://github.com/dpeet "4 total commits to the home-assistant organization, 4 commits to home-assistant.github.io") +- [Devon Peet (@dpeet)](https://github.com/dpeet "5 total commits to the home-assistant organization, 5 commits to home-assistant.github.io") - [Diogo Gomes (@dgomes)](https://github.com/dgomes "10 total commits to the home-assistant organization, 6 commits to home-assistant, 4 commits to home-assistant.github.io") - [DoloresHA (@DoloresHA)](https://github.com/DoloresHA "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [Domantas (@Dohxis)](https://github.com/Dohxis "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") - [Dougal Matthews (@d0ugal)](https://github.com/d0ugal "4 total commits to the home-assistant organization, 2 commits to home-assistant, 2 commits to home-assistant.github.io") - [dramamoose (@dramamoose)](https://github.com/dramamoose "5 total commits to the home-assistant organization, 3 commits to home-assistant.github.io, 2 commits to home-assistant") - [DrewSK (@dzsquared)](https://github.com/dzsquared "8 total commits to the home-assistant organization, 8 commits to home-assistant.github.io") -- [DubhAd (@DubhAd)](https://github.com/DubhAd "95 total commits to the home-assistant organization, 95 commits to home-assistant.github.io") +- [DubhAd (@DubhAd)](https://github.com/DubhAd "107 total commits to the home-assistant organization, 107 commits to home-assistant.github.io") - [Duoxilian (@Duoxilian)](https://github.com/Duoxilian "11 total commits to the home-assistant organization, 6 commits to home-assistant.github.io, 5 commits to home-assistant") - [ebpetway (@ebpetway)](https://github.com/ebpetway "55 total commits to the home-assistant organization, 55 commits to warrant") - [Edwin Smulders (@Dutchy-)](https://github.com/Dutchy- "4 total commits to the home-assistant organization, 2 commits to home-assistant, 2 commits to home-assistant.github.io") -- [Egor Tsinko (@etsinko)](https://github.com/etsinko "11 total commits to the home-assistant organization, 9 commits to home-assistant, 2 commits to home-assistant.github.io") +- [Egor Tsinko (@etsinko)](https://github.com/etsinko "12 total commits to the home-assistant organization, 9 commits to home-assistant, 3 commits to home-assistant.github.io") - [Eitan Mosenkis (@emosenkis)](https://github.com/emosenkis "6 total commits to the home-assistant organization, 3 commits to home-assistant, 2 commits to home-assistant.github.io, 1 commit to netdisco") - [eldanb (@eldanb)](https://github.com/eldanb "1 total commits to the home-assistant organization, 1 commit to homebridge-homeassistant") - [Eleftherios Chamakiotis (@lexam79)](https://github.com/lexam79 "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") @@ -296,7 +290,7 @@ This page contains a list of people who have contributed in one way or another t - [ettisan (@ettisan)](https://github.com/ettisan "8 total commits to the home-assistant organization, 8 commits to home-assistant") - [Eugenio Panadero (@azogue)](https://github.com/azogue "76 total commits to the home-assistant organization, 45 commits to home-assistant, 25 commits to home-assistant.github.io, 3 commits to homebridge-homeassistant, 3 commits to home-assistant-polymer") - [Ezra Bowden (@bn0)](https://github.com/bn0 "2 total commits to the home-assistant organization, 2 commits to warrant") -- [Fabian Affolter (@fabaff)](https://github.com/fabaff "4390 total commits to the home-assistant organization, 2846 commits to home-assistant.github.io, 1454 commits to home-assistant, 29 commits to home-assistant-notebooks, 24 commits to home-assistant-assets, 11 commits to hassio-build, 10 commits to home-assistant-polymer, 8 commits to netdisco, 5 commits to hassio-addons, 2 commits to hassio, 1 commit to home-assistant-js-websocket") +- [Fabian Affolter (@fabaff)](https://github.com/fabaff "4452 total commits to the home-assistant organization, 2870 commits to home-assistant.github.io, 1483 commits to home-assistant, 32 commits to home-assistant-assets, 30 commits to home-assistant-notebooks, 11 commits to hassio-build, 10 commits to home-assistant-polymer, 8 commits to netdisco, 5 commits to hassio-addons, 2 commits to hassio, 1 commit to home-assistant-js-websocket") - [Fabian Heredia Montiel (@fabianhjr)](https://github.com/fabianhjr "4 total commits to the home-assistant organization, 4 commits to home-assistant") - [Fabrizio Furnari (@fabfurnari)](https://github.com/fabfurnari "5 total commits to the home-assistant organization, 3 commits to home-assistant.github.io, 2 commits to home-assistant") - [fakezeta (@fakezeta)](https://github.com/fakezeta "7 total commits to the home-assistant organization, 7 commits to home-assistant") @@ -307,27 +301,27 @@ This page contains a list of people who have contributed in one way or another t - [Finbarr Brady (@fbradyirl)](https://github.com/fbradyirl "8 total commits to the home-assistant organization, 8 commits to home-assistant") - [Florian Holzapfel (@florianholzapfel)](https://github.com/florianholzapfel "11 total commits to the home-assistant organization, 4 commits to home-assistant, 4 commits to home-assistant.github.io, 3 commits to netdisco") - [Florian Klien (@flowolf)](https://github.com/flowolf "16 total commits to the home-assistant organization, 13 commits to home-assistant.github.io, 3 commits to home-assistant") +- [florianj1 (@florianj1)](https://github.com/florianj1 "1 total commits to the home-assistant organization, 1 commit to hassio") - [florincosta (@florincosta)](https://github.com/florincosta "6 total commits to the home-assistant organization, 3 commits to home-assistant, 3 commits to home-assistant.github.io") - [Fonta (@f0nt4)](https://github.com/f0nt4 "4 total commits to the home-assistant organization, 4 commits to home-assistant.github.io") -- [Franck Nijhof (@frenck)](https://github.com/frenck "16 total commits to the home-assistant organization, 12 commits to home-assistant.github.io, 2 commits to hassio, 2 commits to home-assistant-polymer") +- [Franck Nijhof (@frenck)](https://github.com/frenck "17 total commits to the home-assistant organization, 13 commits to home-assistant.github.io, 2 commits to hassio, 2 commits to home-assistant-polymer") - [Frank (@syphernl)](https://github.com/syphernl "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") -- [Frantz (@rofrantz)](https://github.com/rofrantz "2 total commits to the home-assistant organization, 2 commits to netdisco") -- [François Martin (@martinfrancois)](https://github.com/martinfrancois "2 total commits to the home-assistant organization, 2 commits to home-assistant") +- [Frantz (@rofrantz)](https://github.com/rofrantz "7 total commits to the home-assistant organization, 3 commits to home-assistant, 2 commits to netdisco, 2 commits to home-assistant.github.io") - [Frederic Hemberger (@fhemberger)](https://github.com/fhemberger "93 total commits to the home-assistant organization, 93 commits to home-assistant.github.io") - [Fredrik Fjeld (@fredrikfjeld)](https://github.com/fredrikfjeld "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [Fredrik Lindqvist (@Landrash)](https://github.com/Landrash "176 total commits to the home-assistant organization, 74 commits to hassbian-scripts, 70 commits to home-assistant.github.io, 27 commits to pi-gen, 4 commits to home-assistant, 1 commit to home-assistant-polymer") - [freol35241 (@freol35241)](https://github.com/freol35241 "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [froz (@froz)](https://github.com/froz "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [fuga2136 (@fuga2136)](https://github.com/fuga2136 "13 total commits to the home-assistant organization, 13 commits to home-assistant.github.io") -- [Gabor Gulyas (@gaborgulyas)](https://github.com/gaborgulyas "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") - [Gabor SZOLLOSI (@szogi)](https://github.com/szogi "3 total commits to the home-assistant organization, 2 commits to home-assistant, 1 commit to appdaemon") - [GadgetReactor (@GadgetReactor)](https://github.com/GadgetReactor "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Gavin Mogan (@halkeye)](https://github.com/halkeye "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [Geoff Norton (@kangaroo)](https://github.com/kangaroo "14 total commits to the home-assistant organization, 14 commits to home-assistant") - [George.M (@nodinosaur)](https://github.com/nodinosaur "8 total commits to the home-assistant organization, 6 commits to home-assistant.github.io, 2 commits to home-assistant") - [Georgi Kirichkov (@kirichkov)](https://github.com/kirichkov "17 total commits to the home-assistant organization, 11 commits to home-assistant.github.io, 5 commits to home-assistant, 1 commit to appdaemon") -- [Georgi Yanev (@jumpalottahigh)](https://github.com/jumpalottahigh "5 total commits to the home-assistant organization, 3 commits to home-assistant.github.io, 2 commits to home-assistant-polymer") +- [Georgi Yanev (@jumpalottahigh)](https://github.com/jumpalottahigh "6 total commits to the home-assistant organization, 4 commits to home-assistant.github.io, 2 commits to home-assistant-polymer") - [Georgii Staroselskii (@staroselskii)](https://github.com/staroselskii "1 total commits to the home-assistant organization, 1 commit to pi-gen") +- [gerard33 (@gerard33)](https://github.com/gerard33 "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [Gergely Imreh (@imrehg)](https://github.com/imrehg "16 total commits to the home-assistant organization, 11 commits to home-assistant, 5 commits to home-assistant.github.io") - [Gianluca Barbaro (@MrMep)](https://github.com/MrMep "24 total commits to the home-assistant organization, 16 commits to home-assistant, 8 commits to home-assistant.github.io") - [Gianpaolo Macario (@gmacario)](https://github.com/gmacario "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") @@ -339,8 +333,8 @@ This page contains a list of people who have contributed in one way or another t - [Graeme Smith (@Instagraeme)](https://github.com/Instagraeme "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [Grant McConnaughey (@grantmcconnaughey)](https://github.com/grantmcconnaughey "8 total commits to the home-assistant organization, 8 commits to warrant") - [GreenTurtwig (@GreenTurtwig)](https://github.com/GreenTurtwig "83 total commits to the home-assistant organization, 75 commits to home-assistant.github.io, 8 commits to home-assistant") -- [Greg Dowling (@pavoni)](https://github.com/pavoni "250 total commits to the home-assistant organization, 223 commits to home-assistant, 25 commits to home-assistant.github.io, 2 commits to netdisco") -- [Greg Laabs (@OverloadUT)](https://github.com/OverloadUT "6 total commits to the home-assistant organization, 4 commits to home-assistant, 2 commits to home-assistant.github.io") +- [Greg Dowling (@pavoni)](https://github.com/pavoni "251 total commits to the home-assistant organization, 224 commits to home-assistant, 25 commits to home-assistant.github.io, 2 commits to netdisco") +- [Greg Laabs (@OverloadUT)](https://github.com/OverloadUT "11 total commits to the home-assistant organization, 8 commits to home-assistant, 3 commits to home-assistant.github.io") - [Greg MacLellan (@gregmac)](https://github.com/gregmac "1 total commits to the home-assistant organization, 1 commit to pi-gen") - [Greg Stengel (@theCMack)](https://github.com/theCMack "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [Greg Stevenson (@gstevenson)](https://github.com/gstevenson "5 total commits to the home-assistant organization, 5 commits to home-assistant.github.io") @@ -350,13 +344,13 @@ This page contains a list of people who have contributed in one way or another t - [Guillaume Rischard (@grischard)](https://github.com/grischard "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") - [Gustav Ahlberg (@Gyran)](https://github.com/Gyran "20 total commits to the home-assistant organization, 20 commits to home-assistant") - [gwendalg (@gwendalg)](https://github.com/gwendalg "3 total commits to the home-assistant organization, 3 commits to home-assistant") -- [Hajime Morrita (@omo)](https://github.com/omo "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") -- [Hamid (@hamid-elaosta)](https://github.com/hamid-elaosta "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") +- [Hamid (@hamid-elaosta)](https://github.com/hamid-elaosta "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [Hao Hu (@howiehu)](https://github.com/howiehu "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [happyleavesaoc (@happyleavesaoc)](https://github.com/happyleavesaoc "109 total commits to the home-assistant organization, 86 commits to home-assistant, 22 commits to home-assistant.github.io, 1 commit to home-assistant-polymer") +- [Harald Nagel (@haraldnagel)](https://github.com/haraldnagel "8 total commits to the home-assistant organization, 6 commits to home-assistant, 2 commits to home-assistant.github.io") - [Hari Menon (@floydpink)](https://github.com/floydpink "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [Harris Borawski (@hborawski)](https://github.com/hborawski "2 total commits to the home-assistant organization, 2 commits to home-assistant") -- [hawk259 (@hawk259)](https://github.com/hawk259 "8 total commits to the home-assistant organization, 4 commits to home-assistant.github.io, 3 commits to home-assistant, 1 commit to home-assistant-polymer") +- [hawk259 (@hawk259)](https://github.com/hawk259 "10 total commits to the home-assistant organization, 5 commits to home-assistant, 4 commits to home-assistant.github.io, 1 commit to home-assistant-polymer") - [Heath Paddock (@heathbar)](https://github.com/heathbar "6 total commits to the home-assistant organization, 6 commits to home-assistant") - [Heiko Rothe (@mKeRix)](https://github.com/mKeRix "20 total commits to the home-assistant organization, 15 commits to home-assistant, 5 commits to home-assistant.github.io") - [Hellowlol (@Hellowlol)](https://github.com/Hellowlol "4 total commits to the home-assistant organization, 3 commits to netdisco, 1 commit to appdaemon") @@ -369,7 +363,7 @@ This page contains a list of people who have contributed in one way or another t - [Hillary Fraley (@hillaryfraley)](https://github.com/hillaryfraley "12 total commits to the home-assistant organization, 12 commits to home-assistant.github.io") - [honcheng (@honcheng)](https://github.com/honcheng "2 total commits to the home-assistant organization, 2 commits to homebridge-homeassistant") - [Hugo Dupras (@jabesq)](https://github.com/jabesq "28 total commits to the home-assistant organization, 20 commits to home-assistant, 8 commits to home-assistant.github.io") -- [Hugo Gresse (@HugoGresse)](https://github.com/HugoGresse "7 total commits to the home-assistant organization, 7 commits to home-assistant.github.io") +- [Hugo Gresse (@HugoGresse)](https://github.com/HugoGresse "8 total commits to the home-assistant organization, 8 commits to home-assistant.github.io") - [Hung Le (@hungle)](https://github.com/hungle "1 total commits to the home-assistant organization, 1 commit to libcoap") - [Huw Davies (@beardedgeek)](https://github.com/beardedgeek "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [Hydreliox (@HydrelioxGitHub)](https://github.com/HydrelioxGitHub "46 total commits to the home-assistant organization, 34 commits to home-assistant, 12 commits to home-assistant.github.io") @@ -378,7 +372,7 @@ This page contains a list of people who have contributed in one way or another t - [ianj001 (@ianj001)](https://github.com/ianj001 "7 total commits to the home-assistant organization, 7 commits to home-assistant.github.io") - [icovada (@icovada)](https://github.com/icovada "6 total commits to the home-assistant organization, 3 commits to home-assistant, 3 commits to home-assistant.github.io") - [Igor Shults (@ishults)](https://github.com/ishults "12 total commits to the home-assistant organization, 6 commits to home-assistant, 5 commits to home-assistant.github.io, 1 commit to home-assistant-polymer") -- [Ioan Loosley (@ioangogo)](https://github.com/ioangogo "5 total commits to the home-assistant organization, 5 commits to home-assistant.github.io") +- [Ioan Loosley (@ioangogo)](https://github.com/ioangogo "7 total commits to the home-assistant organization, 7 commits to home-assistant.github.io") - [IoTmessenger (@IoTmessenger)](https://github.com/IoTmessenger "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [Issac Kelly (@issackelly)](https://github.com/issackelly "3 total commits to the home-assistant organization, 3 commits to home-assistant") - [J-CMartin (@J-CMartin)](https://github.com/J-CMartin "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") @@ -399,8 +393,8 @@ This page contains a list of people who have contributed in one way or another t - [Jan Harkes (@jaharkes)](https://github.com/jaharkes "110 total commits to the home-assistant organization, 100 commits to home-assistant, 10 commits to netdisco") - [Jan Losinski (@janLo)](https://github.com/janLo "21 total commits to the home-assistant organization, 16 commits to home-assistant, 5 commits to home-assistant.github.io") - [Jan Pobořil (@iBobik)](https://github.com/iBobik "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") -- [Jan Wh (@janwh)](https://github.com/janwh "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") -- [Janne Grunau (@jannau)](https://github.com/jannau "4 total commits to the home-assistant organization, 2 commits to home-assistant, 2 commits to home-assistant.github.io") +- [Jan Willhaus (@janwh)](https://github.com/janwh "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") +- [Janne Grunau (@jannau)](https://github.com/jannau "5 total commits to the home-assistant organization, 3 commits to home-assistant, 2 commits to home-assistant.github.io") - [Jared Beckham (@jtbeckha)](https://github.com/jtbeckha "4 total commits to the home-assistant organization, 2 commits to home-assistant, 2 commits to home-assistant.github.io") - [Jared J. (@jjensn)](https://github.com/jjensn "1 total commits to the home-assistant organization, 1 commit to netdisco") - [Jason Carter (@JasonCarter80)](https://github.com/JasonCarter80 "7 total commits to the home-assistant organization, 4 commits to home-assistant, 3 commits to home-assistant.github.io") @@ -420,7 +414,7 @@ This page contains a list of people who have contributed in one way or another t - [Jeremy (@Wutname1)](https://github.com/Wutname1 "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [Jeremy Williams (@jwillaz)](https://github.com/jwillaz "5 total commits to the home-assistant organization, 5 commits to home-assistant.github.io") - [jeremysv (@jeremysv)](https://github.com/jeremysv "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") -- [Jeroen ter Heerdt (@jeroenterheerdt)](https://github.com/jeroenterheerdt "25 total commits to the home-assistant organization, 14 commits to home-assistant, 11 commits to home-assistant.github.io") +- [Jeroen ter Heerdt (@jeroenterheerdt)](https://github.com/jeroenterheerdt "29 total commits to the home-assistant organization, 16 commits to home-assistant, 13 commits to home-assistant.github.io") - [Jerold Albertson (@jeroldalbertson-wf)](https://github.com/jeroldalbertson-wf "5 total commits to the home-assistant organization, 5 commits to home-assistant.github.io") - [Jerry Workman (@JerryWorkman)](https://github.com/JerryWorkman "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [Jesse Hills (@jesserockz)](https://github.com/jesserockz "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") @@ -454,27 +448,27 @@ This page contains a list of people who have contributed in one way or another t - [Johnny Chadda (@joch)](https://github.com/joch "3 total commits to the home-assistant organization, 2 commits to home-assistant.github.io, 1 commit to home-assistant-polymer") - [Jon (@JonMurphy)](https://github.com/JonMurphy "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [Jon Caruana (@joncar)](https://github.com/joncar "5 total commits to the home-assistant organization, 3 commits to home-assistant, 2 commits to home-assistant.github.io") -- [Jon Griffith (@arretx)](https://github.com/arretx "8 total commits to the home-assistant organization, 8 commits to home-assistant.github.io") +- [Jon Griffith (@arretx)](https://github.com/arretx "11 total commits to the home-assistant organization, 10 commits to home-assistant.github.io, 1 commit to appdaemon") - [Jon Maddox (@maddox)](https://github.com/maddox "102 total commits to the home-assistant organization, 78 commits to home-assistant, 16 commits to homebridge-homeassistant, 8 commits to home-assistant.github.io") - [Jonas Pedersen (@JonasPed)](https://github.com/JonasPed "1 total commits to the home-assistant organization, 1 commit to appdaemon") - [Jonatan Castro (@jcastro)](https://github.com/jcastro "7 total commits to the home-assistant organization, 7 commits to home-assistant.github.io") - [Jonathan Baginski (@patchedsoul)](https://github.com/patchedsoul "115 total commits to the home-assistant organization, 87 commits to fabric-home-assistant, 28 commits to home-assistant.github.io") - [joopert (@joopert)](https://github.com/joopert "6 total commits to the home-assistant organization, 6 commits to home-assistant") - [Jordi (@hokus15)](https://github.com/hokus15 "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") -- [Jordy (@jbarrancos)](https://github.com/jbarrancos "39 total commits to the home-assistant organization, 39 commits to home-assistant") +- [Jordy (@jbarrancos)](https://github.com/jbarrancos "40 total commits to the home-assistant organization, 40 commits to home-assistant") - [Jose Juan Montes (@jjmontesl)](https://github.com/jjmontesl "9 total commits to the home-assistant organization, 6 commits to home-assistant, 3 commits to home-assistant.github.io") - [Joseph Carter (@iKarith)](https://github.com/iKarith "9 total commits to the home-assistant organization, 9 commits to pi-gen") - [Joseph Piron (@eagleamon)](https://github.com/eagleamon "3 total commits to the home-assistant organization, 3 commits to home-assistant") - [Josh (@karlw00t)](https://github.com/karlw00t "2 total commits to the home-assistant organization, 2 commits to home-assistant") -- [Josh Anderson (@andersonshatch)](https://github.com/andersonshatch "6 total commits to the home-assistant organization, 3 commits to homebridge-homeassistant, 3 commits to home-assistant") -- [Josh Nichols (@technicalpickles)](https://github.com/technicalpickles "26 total commits to the home-assistant organization, 15 commits to home-assistant, 11 commits to home-assistant.github.io") +- [Josh Anderson (@andersonshatch)](https://github.com/andersonshatch "7 total commits to the home-assistant organization, 4 commits to home-assistant, 3 commits to homebridge-homeassistant") +- [Josh Nichols (@technicalpickles)](https://github.com/technicalpickles "28 total commits to the home-assistant organization, 15 commits to home-assistant, 13 commits to home-assistant.github.io") - [Josh Wright (@JshWright)](https://github.com/JshWright "28 total commits to the home-assistant organization, 20 commits to home-assistant, 8 commits to home-assistant.github.io") - [jpcomtois (@jpcomtois)](https://github.com/jpcomtois "1 total commits to the home-assistant organization, 1 commit to libcoap") - [JudgeDredd (@JudgeDreddKLC)](https://github.com/JudgeDreddKLC "10 total commits to the home-assistant organization, 10 commits to home-assistant.github.io") - [Juggels (@Juggels)](https://github.com/Juggels "8 total commits to the home-assistant organization, 5 commits to home-assistant, 3 commits to home-assistant.github.io") - [Julian Kaffke (@jaykay)](https://github.com/jaykay "1 total commits to the home-assistant organization, 1 commit to hassio-addons") -- [Julian Kahnert (@JulianKahnert)](https://github.com/JulianKahnert "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") -- [Julius Mittenzwei (@Julius2342)](https://github.com/Julius2342 "17 total commits to the home-assistant organization, 11 commits to home-assistant, 6 commits to home-assistant.github.io") +- [Julian Kahnert (@JulianKahnert)](https://github.com/JulianKahnert "5 total commits to the home-assistant organization, 3 commits to home-assistant.github.io, 2 commits to home-assistant") +- [Julius Mittenzwei (@Julius2342)](https://github.com/Julius2342 "18 total commits to the home-assistant organization, 12 commits to home-assistant, 6 commits to home-assistant.github.io") - [jumpkick (@jumpkick)](https://github.com/jumpkick "15 total commits to the home-assistant organization, 12 commits to home-assistant, 3 commits to home-assistant.github.io") - [Justin Dray (@justin8)](https://github.com/justin8 "9 total commits to the home-assistant organization, 7 commits to home-assistant.github.io, 2 commits to home-assistant") - [Justin Hayes (@GussyH)](https://github.com/GussyH "7 total commits to the home-assistant organization, 7 commits to hadashboard") @@ -482,7 +476,7 @@ This page contains a list of people who have contributed in one way or another t - [Justyn Shull (@justyns)](https://github.com/justyns "5 total commits to the home-assistant organization, 5 commits to home-assistant") - [Jürgen W (@jurgenweber)](https://github.com/jurgenweber "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [Kai (@luxus)](https://github.com/luxus "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") -- [Kane610 (@Kane610)](https://github.com/Kane610 "16 total commits to the home-assistant organization, 7 commits to home-assistant, 7 commits to home-assistant.github.io, 1 commit to netdisco, 1 commit to home-assistant-polymer") +- [Kane610 (@Kane610)](https://github.com/Kane610 "18 total commits to the home-assistant organization, 8 commits to home-assistant, 8 commits to home-assistant.github.io, 1 commit to netdisco, 1 commit to home-assistant-polymer") - [Karen Goode (@kfgoode)](https://github.com/kfgoode "4 total commits to the home-assistant organization, 4 commits to home-assistant") - [karlkar (@karlkar)](https://github.com/karlkar "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Keaton Taylor (@keatontaylor)](https://github.com/keatontaylor "7 total commits to the home-assistant organization, 4 commits to home-assistant, 3 commits to home-assistant.github.io") @@ -497,7 +491,6 @@ This page contains a list of people who have contributed in one way or another t - [Kevin Fronczak (@fronzbot)](https://github.com/fronzbot "19 total commits to the home-assistant organization, 11 commits to home-assistant, 8 commits to home-assistant.github.io") - [Kevin Gisi (@gisikw)](https://github.com/gisikw "5 total commits to the home-assistant organization, 5 commits to home-assistant.github.io") - [Kevin Gottsman (@gottsman)](https://github.com/gottsman "6 total commits to the home-assistant organization, 6 commits to home-assistant.github.io") -- [Kevin Panaro (@kevinpanaro)](https://github.com/kevinpanaro "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Kevin Siml (@appzer)](https://github.com/appzer "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Keyasha Brothern (@KMBrothern)](https://github.com/KMBrothern "4 total commits to the home-assistant organization, 4 commits to home-assistant.github.io") - [kfcook (@kfcook)](https://github.com/kfcook "3 total commits to the home-assistant organization, 3 commits to home-assistant") @@ -507,14 +500,11 @@ This page contains a list of people who have contributed in one way or another t - [Krasimir Chariyski (@Chariyski)](https://github.com/Chariyski "4 total commits to the home-assistant organization, 4 commits to home-assistant.github.io") - [Krasimir Zhelev (@zhelev)](https://github.com/zhelev "1 total commits to the home-assistant organization, 1 commit to netdisco") - [kroimon (@kroimon)](https://github.com/kroimon "1 total commits to the home-assistant organization, 1 commit to netdisco") -- [Kyle Decot (@kyledecot)](https://github.com/kyledecot "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") -- [Kyle Gordon (@kylegordon)](https://github.com/kylegordon "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [Kyle Hendricks (@kylehendricks)](https://github.com/kylehendricks "6 total commits to the home-assistant organization, 6 commits to home-assistant") -- [Kyle R (@qcryptic)](https://github.com/qcryptic "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") -- [lamiskin (@lamiskin)](https://github.com/lamiskin "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") -- [LaurensBot (@LaurensBot)](https://github.com/LaurensBot "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") +- [lamiskin (@lamiskin)](https://github.com/lamiskin "4 total commits to the home-assistant organization, 4 commits to home-assistant.github.io") +- [Lars Englund (@larsenglund)](https://github.com/larsenglund "1 total commits to the home-assistant organization, 1 commit to appdaemon") - [lee-js (@lee-js)](https://github.com/lee-js "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") -- [Leon99 (@Leon99)](https://github.com/Leon99 "3 total commits to the home-assistant organization, 2 commits to home-assistant.github.io, 1 commit to appdaemon") +- [Leon99 (@Leon99)](https://github.com/Leon99 "1 total commits to the home-assistant organization, 1 commit to appdaemon") - [Leonardo Saraiva (@vyper)](https://github.com/vyper "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [Lev Aronsky (@aronsky)](https://github.com/aronsky "11 total commits to the home-assistant organization, 8 commits to home-assistant, 3 commits to home-assistant.github.io") - [Lewis Juggins (@lwis)](https://github.com/lwis "64 total commits to the home-assistant organization, 51 commits to home-assistant, 12 commits to home-assistant.github.io, 1 commit to home-assistant-polymer") @@ -528,25 +518,23 @@ This page contains a list of people who have contributed in one way or another t - [LucaSoldi (@LucaSoldi)](https://github.com/LucaSoldi "6 total commits to the home-assistant organization, 6 commits to home-assistant") - [Lucien Guimier (@guimier)](https://github.com/guimier "1 total commits to the home-assistant organization, 1 commit to libcoap") - [Ludovic (@ldvc)](https://github.com/ldvc "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") -- [Ludovico de Nittis (@RyuzakiKK)](https://github.com/RyuzakiKK "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") +- [Ludovico de Nittis (@RyuzakiKK)](https://github.com/RyuzakiKK "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [Lukas (@lukas-hetzenecker)](https://github.com/lukas-hetzenecker "14 total commits to the home-assistant organization, 10 commits to home-assistant, 4 commits to home-assistant.github.io") -- [Lukas Barth (@tinloaf)](https://github.com/tinloaf "24 total commits to the home-assistant organization, 13 commits to home-assistant, 9 commits to home-assistant.github.io, 2 commits to home-assistant-polymer") +- [Lukas Barth (@tinloaf)](https://github.com/tinloaf "27 total commits to the home-assistant organization, 15 commits to home-assistant, 10 commits to home-assistant.github.io, 2 commits to home-assistant-polymer") - [Lukas Ecklmayr (@outrun0506)](https://github.com/outrun0506 "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") - [Lukas Porubcan (@Luc3as)](https://github.com/Luc3as "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") - [Luke Armstrong (@lukearmstrong)](https://github.com/lukearmstrong "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") -- [Luuk (@Maharball1)](https://github.com/Maharball1 "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [LvivEchoes (@LvivEchoes)](https://github.com/LvivEchoes "8 total commits to the home-assistant organization, 4 commits to home-assistant, 3 commits to home-assistant.github.io, 1 commit to home-assistant-polymer") +- [Maarten Groeneweg (@lazytesting)](https://github.com/lazytesting "1 total commits to the home-assistant organization, 1 commit to hassio-addons") - [Maciej Bieniek (@bieniu)](https://github.com/bieniu "4 total commits to the home-assistant organization, 3 commits to home-assistant, 1 commit to home-assistant-polymer") - [Maciej Sokołowski (@matemaciek)](https://github.com/matemaciek "5 total commits to the home-assistant organization, 4 commits to home-assistant, 1 commit to hassio-build") - [Maciej Wasilak (@mwasilak)](https://github.com/mwasilak "1 total commits to the home-assistant organization, 1 commit to libcoap") - [Magnus Ihse Bursie (@magicus)](https://github.com/magicus "16 total commits to the home-assistant organization, 9 commits to home-assistant, 4 commits to netdisco, 3 commits to home-assistant.github.io") - [Magnus Lyckå (@magnus-lycka)](https://github.com/magnus-lycka "1 total commits to the home-assistant organization, 1 commit to netdisco") - [MagnusKnutas (@MagnusKnutas)](https://github.com/MagnusKnutas "29 total commits to the home-assistant organization, 29 commits to home-assistant") -- [Mahasri Kalavala (@skalavala)](https://github.com/skalavala "9 total commits to the home-assistant organization, 9 commits to home-assistant.github.io") +- [Mahasri Kalavala (@skalavala)](https://github.com/skalavala "10 total commits to the home-assistant organization, 10 commits to home-assistant.github.io") - [Maikel Wever (@maikelwever)](https://github.com/maikelwever "2 total commits to the home-assistant organization, 2 commits to home-assistant") -- [Malte Franken (@exxamalte)](https://github.com/exxamalte "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") -- [Manu (@matrixagent)](https://github.com/matrixagent "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") -- [Marc Egli (@frog32)](https://github.com/frog32 "9 total commits to the home-assistant organization, 7 commits to home-assistant, 2 commits to home-assistant.github.io") +- [Marc Egli (@frog32)](https://github.com/frog32 "7 total commits to the home-assistant organization, 7 commits to home-assistant") - [Marc Forth (@mf-social)](https://github.com/mf-social "13 total commits to the home-assistant organization, 12 commits to home-assistant.github.io, 1 commit to fabric-home-assistant") - [Marc Pabst (@mxtra)](https://github.com/mxtra "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") - [Marc Plano-Lesay (@Kernald)](https://github.com/Kernald "12 total commits to the home-assistant organization, 10 commits to home-assistant.github.io, 2 commits to home-assistant") @@ -554,53 +542,48 @@ This page contains a list of people who have contributed in one way or another t - [Marcelo Moreira de Mello (@tchellomello)](https://github.com/tchellomello "140 total commits to the home-assistant organization, 77 commits to home-assistant, 61 commits to home-assistant.github.io, 1 commit to home-assistant-assets, 1 commit to home-assistant-polymer") - [Marcin Jaworski (@yawor)](https://github.com/yawor "12 total commits to the home-assistant organization, 12 commits to appdaemon") - [Marcus Schmidt (@mar-schmidt)](https://github.com/mar-schmidt "2 total commits to the home-assistant organization, 2 commits to home-assistant") -- [Marijn Giesen (@marijngiesen)](https://github.com/marijngiesen "7 total commits to the home-assistant organization, 5 commits to hadashboard, 2 commits to home-assistant.github.io") +- [Marijn Giesen (@marijngiesen)](https://github.com/marijngiesen "5 total commits to the home-assistant organization, 5 commits to hadashboard") +- [Marius (@ciotlosm)](https://github.com/ciotlosm "6 total commits to the home-assistant organization, 4 commits to home-assistant-polymer, 2 commits to home-assistant") - [Mark Coombes (@marthoc)](https://github.com/marthoc "3 total commits to the home-assistant organization, 3 commits to home-assistant") - [Mark Grosen (@mgsb)](https://github.com/mgsb "1 total commits to the home-assistant organization, 1 commit to netdisco") - [Mark Huson (@mehuman)](https://github.com/mehuman "11 total commits to the home-assistant organization, 11 commits to home-assistant.github.io") -- [Mark Oude Veldhuis (@markoudev)](https://github.com/markoudev "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") -- [markferry (@markferry)](https://github.com/markferry "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Markus (@iMarkus)](https://github.com/iMarkus "3 total commits to the home-assistant organization, 2 commits to home-assistant, 1 commit to hassio") - [Markus Becker (@markushx)](https://github.com/markushx "6 total commits to the home-assistant organization, 6 commits to libcoap") -- [Markus Lipp (@LightIsLife)](https://github.com/LightIsLife "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") -- [Markus Peter (@bimbar)](https://github.com/bimbar "5 total commits to the home-assistant organization, 3 commits to home-assistant, 2 commits to home-assistant.github.io") +- [Markus Peter (@bimbar)](https://github.com/bimbar "3 total commits to the home-assistant organization, 3 commits to home-assistant") - [Markus Stenberg (@fingon)](https://github.com/fingon "6 total commits to the home-assistant organization, 6 commits to home-assistant") - [Martin Berg (@mbrrg)](https://github.com/mbrrg "7 total commits to the home-assistant organization, 4 commits to home-assistant, 3 commits to home-assistant.github.io") -- [Martin Donlon (@wickerwaka)](https://github.com/wickerwaka "4 total commits to the home-assistant organization, 2 commits to home-assistant, 2 commits to home-assistant.github.io") +- [Martin Donlon (@wickerwaka)](https://github.com/wickerwaka "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Martin Eberhardt (@DarkFox)](https://github.com/DarkFox "4 total commits to the home-assistant organization, 4 commits to home-assistant.github.io") - [Martin Hjelmare (@MartinHjelmare)](https://github.com/MartinHjelmare "143 total commits to the home-assistant organization, 114 commits to home-assistant, 29 commits to home-assistant.github.io") -- [Martin Rowan (@shortbloke)](https://github.com/shortbloke "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [Martin Vacula (@MatoKafkac)](https://github.com/MatoKafkac "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Martin Weinelt (@mweinelt)](https://github.com/mweinelt "17 total commits to the home-assistant organization, 9 commits to home-assistant, 7 commits to home-assistant.github.io, 1 commit to home-assistant-polymer") - [Martokk (@martokk)](https://github.com/martokk "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [Mateusz Drab (@mateuszdrab)](https://github.com/mateuszdrab "2 total commits to the home-assistant organization, 2 commits to home-assistant") -- [Mathew Peterson (@mathewpeterson)](https://github.com/mathewpeterson "3 total commits to the home-assistant organization, 2 commits to home-assistant.github.io, 1 commit to homebridge-homeassistant") -- [Matt N. (@mnoorenberghe)](https://github.com/mnoorenberghe "49 total commits to the home-assistant organization, 24 commits to home-assistant-iOS, 16 commits to home-assistant.github.io, 7 commits to home-assistant, 1 commit to homebridge-homeassistant, 1 commit to home-assistant-polymer") +- [Mathew Peterson (@mathewpeterson)](https://github.com/mathewpeterson "1 total commits to the home-assistant organization, 1 commit to homebridge-homeassistant") +- [Matt N. (@mnoorenberghe)](https://github.com/mnoorenberghe "52 total commits to the home-assistant organization, 24 commits to home-assistant-iOS, 17 commits to home-assistant.github.io, 9 commits to home-assistant, 1 commit to homebridge-homeassistant, 1 commit to home-assistant-polymer") - [Matt Rogers (@rogersmj)](https://github.com/rogersmj "20 total commits to the home-assistant organization, 20 commits to hadashboard") -- [Matt Schmitt (@schmittx)](https://github.com/schmittx "33 total commits to the home-assistant organization, 23 commits to homebridge-homeassistant, 6 commits to home-assistant, 3 commits to home-assistant.github.io, 1 commit to home-assistant-polymer") +- [Matt Schmitt (@schmittx)](https://github.com/schmittx "37 total commits to the home-assistant organization, 23 commits to homebridge-homeassistant, 7 commits to home-assistant, 4 commits to home-assistant.github.io, 3 commits to home-assistant-polymer") - [Matt White (@mw-white)](https://github.com/mw-white "10 total commits to the home-assistant organization, 5 commits to home-assistant, 5 commits to home-assistant.github.io") - [Matteo Lampugnani (@t30)](https://github.com/t30 "7 total commits to the home-assistant organization, 7 commits to home-assistant.github.io") - [Matthew Bowen (@mgbowen)](https://github.com/mgbowen "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") -- [Matthew Donoughe (@mdonoughe)](https://github.com/mdonoughe "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [Matthew Garrett (@mjg59)](https://github.com/mjg59 "10 total commits to the home-assistant organization, 7 commits to home-assistant, 3 commits to home-assistant.github.io") -- [Matthew Hilton (@matt2005)](https://github.com/matt2005 "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Matthew Schick (@mattsch)](https://github.com/mattsch "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Matthew Treinish (@mtreinish)](https://github.com/mtreinish "20 total commits to the home-assistant organization, 13 commits to home-assistant, 7 commits to home-assistant.github.io") - [mattie47 (@mattie47)](https://github.com/mattie47 "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") -- [mauriciobonani (@mauriciobonani)](https://github.com/mauriciobonani "6 total commits to the home-assistant organization, 6 commits to home-assistant.github.io") +- [mauriciobonani (@mauriciobonani)](https://github.com/mauriciobonani "7 total commits to the home-assistant organization, 7 commits to home-assistant.github.io") - [Max Rumpf (@Maxr1998)](https://github.com/Maxr1998 "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") -- [maxlaverse (@maxlaverse)](https://github.com/maxlaverse "3 total commits to the home-assistant organization, 3 commits to home-assistant") +- [maxlaverse (@maxlaverse)](https://github.com/maxlaverse "5 total commits to the home-assistant organization, 5 commits to home-assistant") - [mboeru (@mboeru)](https://github.com/mboeru "1 total commits to the home-assistant organization, 1 commit to home-assistant-iOS") - [Menno Blom (@b10m)](https://github.com/b10m "6 total commits to the home-assistant organization, 3 commits to home-assistant.github.io, 2 commits to home-assistant, 1 commit to netdisco") - [mertenats (@mertenats)](https://github.com/mertenats "4 total commits to the home-assistant organization, 4 commits to home-assistant.github.io") - [Micha LaQua (@milaq)](https://github.com/milaq "3 total commits to the home-assistant organization, 3 commits to home-assistant") - [Michael (@hartmms)](https://github.com/hartmms "6 total commits to the home-assistant organization, 4 commits to home-assistant.github.io, 2 commits to home-assistant") - [Michael Auchter (@auchter)](https://github.com/auchter "13 total commits to the home-assistant organization, 13 commits to home-assistant") -- [Michael Buffington (@elbowdonkey)](https://github.com/elbowdonkey "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [Michael Fester (@michaelfester)](https://github.com/michaelfester "5 total commits to the home-assistant organization, 3 commits to home-assistant.github.io, 2 commits to home-assistant") - [Michael Furtak (@mfurtak)](https://github.com/mfurtak "5 total commits to the home-assistant organization, 5 commits to issue-bot") - [Michael Gilbert (@Zyell)](https://github.com/Zyell "8 total commits to the home-assistant organization, 8 commits to home-assistant") -- [Michael Heinemann (@heinemml)](https://github.com/heinemml "4 total commits to the home-assistant organization, 2 commits to home-assistant, 2 commits to home-assistant.github.io") +- [Michael Heinemann (@heinemml)](https://github.com/heinemml "2 total commits to the home-assistant organization, 2 commits to home-assistant") +- [Michael Kutý (@michaelkuty)](https://github.com/michaelkuty "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Michael Luggen (@l00mi)](https://github.com/l00mi "4 total commits to the home-assistant organization, 4 commits to home-assistant.github.io") - [Michael Prokop (@mika)](https://github.com/mika "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Michael Requeny (@requenym)](https://github.com/requenym "14 total commits to the home-assistant organization, 14 commits to home-assistant.github.io") @@ -608,54 +591,44 @@ This page contains a list of people who have contributed in one way or another t - [Michaël Arnauts (@michaelarnauts)](https://github.com/michaelarnauts "61 total commits to the home-assistant organization, 31 commits to home-assistant, 26 commits to home-assistant.github.io, 3 commits to home-assistant-polymer, 1 commit to netdisco") - [Michel Settembrino (@Michel-Settembrino)](https://github.com/Michel-Settembrino "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [micw (@micw)](https://github.com/micw "8 total commits to the home-assistant organization, 5 commits to home-assistant, 3 commits to home-assistant.github.io") -- [Miha Lunar (@SmilyOrg)](https://github.com/SmilyOrg "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [Mikael Bergemalm (@bergemalm)](https://github.com/bergemalm "2 total commits to the home-assistant organization, 2 commits to home-assistant") -- [Mikayla Hutchinson (@mhutch)](https://github.com/mhutch "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [Mike Christianson (@MikeChristianson)](https://github.com/MikeChristianson "6 total commits to the home-assistant organization, 6 commits to home-assistant") -- [Mike G Chambers (@mikegchambers)](https://github.com/mikegchambers "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") -- [Mike Megally (@cmsimike)](https://github.com/cmsimike "8 total commits to the home-assistant organization, 6 commits to home-assistant, 2 commits to home-assistant.github.io") +- [Mike Megally (@cmsimike)](https://github.com/cmsimike "7 total commits to the home-assistant organization, 7 commits to home-assistant") - [Mike Nestor (@mnestor)](https://github.com/mnestor "6 total commits to the home-assistant organization, 5 commits to home-assistant, 1 commit to home-assistant-polymer") - [Mike Roberts (@m-roberts)](https://github.com/m-roberts "1 total commits to the home-assistant organization, 1 commit to pi-gen") -- [mikey (@pfista)](https://github.com/pfista "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [Mikkel Høgh (@mikl)](https://github.com/mikl "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [Milan V. (@milanvo)](https://github.com/milanvo "18 total commits to the home-assistant organization, 10 commits to home-assistant, 7 commits to home-assistant.github.io, 1 commit to home-assistant-polymer") -- [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 "27 total commits to the home-assistant organization, 20 commits to home-assistant, 7 commits to home-assistant.github.io") - [Minims (@Minims)](https://github.com/Minims "3 total commits to the home-assistant organization, 3 commits to homebridge-homeassistant") - [Mister Wil (@MisterWil)](https://github.com/MisterWil "17 total commits to the home-assistant organization, 11 commits to home-assistant, 6 commits to home-assistant.github.io") -- [Mitchell Cash (@mitchellcash)](https://github.com/mitchellcash "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [Mitesh Patel (@gurumitts)](https://github.com/gurumitts "9 total commits to the home-assistant organization, 5 commits to home-assistant, 4 commits to home-assistant.github.io") -- [Mitko Masarliev (@masarliev)](https://github.com/masarliev "7 total commits to the home-assistant organization, 5 commits to home-assistant, 2 commits to home-assistant.github.io") -- [mje-nz (@mje-nz)](https://github.com/mje-nz "2 total commits to the home-assistant organization, 2 commits to home-assistant") +- [Mitko Masarliev (@masarliev)](https://github.com/masarliev "10 total commits to the home-assistant organization, 7 commits to home-assistant, 3 commits to home-assistant.github.io") - [mjj4791 (@mjj4791)](https://github.com/mjj4791 "22 total commits to the home-assistant organization, 15 commits to home-assistant.github.io, 7 commits to home-assistant") +- [mmmmmtasty (@mmmmmtasty)](https://github.com/mmmmmtasty "8 total commits to the home-assistant organization, 8 commits to appdaemon") - [Molodax (@Molodax)](https://github.com/Molodax "7 total commits to the home-assistant organization, 7 commits to home-assistant.github.io") - [Moon Shot (@moonshot)](https://github.com/moonshot "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [moose51789 (@moose51789)](https://github.com/moose51789 "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") - [moskovskiy82 (@moskovskiy82)](https://github.com/moskovskiy82 "6 total commits to the home-assistant organization, 6 commits to home-assistant.github.io") - [motir (@motir)](https://github.com/motir "1 total commits to the home-assistant organization, 1 commit to appdaemon") -- [mtl010957 (@mtl010957)](https://github.com/mtl010957 "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Mārtiņš Grunskis (@grunskis)](https://github.com/grunskis "1 total commits to the home-assistant organization, 1 commit to netdisco") -- [Naren Salem (@naren8642)](https://github.com/naren8642 "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [Nate (@BillyNate)](https://github.com/BillyNate "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Nathan Flynn (@eperdeme)](https://github.com/eperdeme "1 total commits to the home-assistant organization, 1 commit to hassio-addons") -- [Nathan Henrie (@n8henrie)](https://github.com/n8henrie "19 total commits to the home-assistant organization, 9 commits to home-assistant, 6 commits to home-assistant.github.io, 2 commits to homebridge-homeassistant, 1 commit to appdaemon, 1 commit to home-assistant-polymer") +- [Nathan Henrie (@n8henrie)](https://github.com/n8henrie "19 total commits to the home-assistant organization, 9 commits to home-assistant, 6 commits to home-assistant.github.io, 2 commits to homebridge-homeassistant, 1 commit to home-assistant-polymer, 1 commit to appdaemon") - [Neil Lathwood (@laf)](https://github.com/laf "5 total commits to the home-assistant organization, 3 commits to home-assistant.github.io, 2 commits to home-assistant") - [Nelis Willers (@NelisW)](https://github.com/NelisW "1 total commits to the home-assistant organization, 1 commit to fabric-home-assistant") - [NeLLyMerC (@NeLLyMerC)](https://github.com/NeLLyMerC "5 total commits to the home-assistant organization, 5 commits to home-assistant.github.io") -- [Nemanja Stefanovic (@nemik)](https://github.com/nemik "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [neonbunny (@neonbunny)](https://github.com/neonbunny "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") -- [Nicholas Amadori (@namadori)](https://github.com/namadori "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [Nicholas Griffin (@nicholasgriffintn)](https://github.com/nicholasgriffintn "6 total commits to the home-assistant organization, 6 commits to home-assistant.github.io") -- [Nicholas Sielicki (@sielicki)](https://github.com/sielicki "4 total commits to the home-assistant organization, 2 commits to home-assistant, 2 commits to home-assistant.github.io") +- [Nicholas Sielicki (@sielicki)](https://github.com/sielicki "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Nick (@quadportnick)](https://github.com/quadportnick "2 total commits to the home-assistant organization, 2 commits to home-assistant") +- [Nick Touran (@partofthething)](https://github.com/partofthething "38 total commits to the home-assistant organization, 25 commits to home-assistant, 13 commits to home-assistant.github.io") - [Nick Waring (@nickwaring)](https://github.com/nickwaring "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Nicolas Graziano (@ngraziano)](https://github.com/ngraziano "3 total commits to the home-assistant organization, 3 commits to home-assistant") - [Nicolas Martignoni (@martignoni)](https://github.com/martignoni "1 total commits to the home-assistant organization, 1 commit to pi-gen") -- [Niklas (@niklaswa)](https://github.com/niklaswa "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") -- [Niklas Morberg (@morberg)](https://github.com/morberg "2 total commits to the home-assistant organization, 2 commits to home-assistant") +- [Nigel Rook (@NigelRook)](https://github.com/NigelRook "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") +- [Niklas (@niklaswa)](https://github.com/niklaswa "4 total commits to the home-assistant organization, 4 commits to home-assistant.github.io") - [Nikolas Beutler (@biacz)](https://github.com/biacz "2 total commits to the home-assistant organization, 2 commits to home-assistant") -- [NMA (@nma83)](https://github.com/nma83 "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") -- [Nolan Gilley (@nkgilley)](https://github.com/nkgilley "117 total commits to the home-assistant organization, 92 commits to home-assistant, 25 commits to home-assistant.github.io") +- [Nolan Gilley (@nkgilley)](https://github.com/nkgilley "119 total commits to the home-assistant organization, 93 commits to home-assistant, 26 commits to home-assistant.github.io") - [NotoriousBDG (@notoriousbdg)](https://github.com/notoriousbdg "3 total commits to the home-assistant organization, 3 commits to hassio-addons") - [NovapaX (@NovapaX)](https://github.com/NovapaX "9 total commits to the home-assistant organization, 4 commits to home-assistant-polymer, 4 commits to home-assistant, 1 commit to home-assistant-assets") - [ntalekt (@ntalekt)](https://github.com/ntalekt "6 total commits to the home-assistant organization, 6 commits to home-assistant.github.io") @@ -668,13 +641,12 @@ This page contains a list of people who have contributed in one way or another t - [Oliver (@scarface-4711)](https://github.com/scarface-4711 "24 total commits to the home-assistant organization, 14 commits to home-assistant, 9 commits to home-assistant.github.io, 1 commit to netdisco") - [Oliver van Porten (@mcdeck)](https://github.com/mcdeck "10 total commits to the home-assistant organization, 10 commits to home-assistant") - [Open Home Automation (@open-homeautomation)](https://github.com/open-homeautomation "41 total commits to the home-assistant organization, 29 commits to home-assistant, 12 commits to home-assistant.github.io") -- [Otto Winter (@OttoWinter)](https://github.com/OttoWinter "2 total commits to the home-assistant organization, 2 commits to home-assistant") +- [Otto Winter (@OttoWinter)](https://github.com/OttoWinter "3 total commits to the home-assistant organization, 3 commits to home-assistant") - [oznu (@oznu)](https://github.com/oznu "1 total commits to the home-assistant organization, 1 commit to homebridge-homeassistant") - [Parker Moore (@parkr)](https://github.com/parkr "60 total commits to the home-assistant organization, 60 commits to home-assistant.github.io") - [pascal (@passie)](https://github.com/passie "4 total commits to the home-assistant organization, 3 commits to home-assistant, 1 commit to home-assistant-polymer") - [Pascal Bach (@bachp)](https://github.com/bachp "10 total commits to the home-assistant organization, 9 commits to home-assistant, 1 commit to netdisco") -- [Pascal Vizeli (@pvizeli)](https://github.com/pvizeli "2268 total commits to the home-assistant organization, 879 commits to hassio, 440 commits to home-assistant, 322 commits to hassio-build, 306 commits to hassio-addons, 299 commits to home-assistant.github.io, 16 commits to hassio-addons-example, 4 commits to hassio-cli, 1 commit to home-assistant-js-websocket, 1 commit to netdisco") -- [patkap (@patkap)](https://github.com/patkap "2 total commits to the home-assistant organization, 2 commits to home-assistant") +- [Pascal Vizeli (@pvizeli)](https://github.com/pvizeli "2335 total commits to the home-assistant organization, 917 commits to hassio, 446 commits to home-assistant, 323 commits to hassio-build, 315 commits to hassio-addons, 305 commits to home-assistant.github.io, 16 commits to hassio-addons-example, 10 commits to hassio-cli, 1 commit to netdisco, 1 commit to home-assistant-js-websocket, 1 commit to hassio-os") - [Patrick Aikens (@duckpuppy)](https://github.com/duckpuppy "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [Patrick Easters (@patrickeasters)](https://github.com/patrickeasters "5 total commits to the home-assistant organization, 5 commits to home-assistant.github.io") - [Patrik (@ggravlingen)](https://github.com/ggravlingen "8 total commits to the home-assistant organization, 5 commits to home-assistant, 3 commits to home-assistant.github.io") @@ -695,12 +667,12 @@ This page contains a list of people who have contributed in one way or another t - [Phil Cole (@filcole)](https://github.com/filcole "8 total commits to the home-assistant organization, 5 commits to home-assistant.github.io, 3 commits to home-assistant") - [Phil Haack (@Haacked)](https://github.com/Haacked "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [Phil Hawthorne (@philhawthorne)](https://github.com/philhawthorne "24 total commits to the home-assistant organization, 18 commits to home-assistant.github.io, 6 commits to home-assistant") -- [Phil Kates (@philk)](https://github.com/philk "3 total commits to the home-assistant organization, 3 commits to home-assistant") +- [Phil Kates (@philk)](https://github.com/philk "5 total commits to the home-assistant organization, 5 commits to home-assistant") - [Philip Hofstetter (@pilif)](https://github.com/pilif "6 total commits to the home-assistant organization, 6 commits to home-assistant.github.io") - [Philip Lundrigan (@philipbl)](https://github.com/philipbl "65 total commits to the home-assistant organization, 56 commits to home-assistant, 9 commits to home-assistant.github.io") - [Philipp Schmitt (@pschmitt)](https://github.com/pschmitt "37 total commits to the home-assistant organization, 24 commits to home-assistant, 11 commits to home-assistant.github.io, 1 commit to hassio-build, 1 commit to appdaemon") - [Phill Price (@phillprice)](https://github.com/phillprice "11 total commits to the home-assistant organization, 11 commits to home-assistant.github.io") -- [PhracturedBlue (@PhracturedBlue)](https://github.com/PhracturedBlue "22 total commits to the home-assistant organization, 13 commits to home-assistant, 8 commits to home-assistant.github.io, 1 commit to home-assistant-polymer") +- [PhracturedBlue (@PhracturedBlue)](https://github.com/PhracturedBlue "25 total commits to the home-assistant organization, 15 commits to home-assistant, 9 commits to home-assistant.github.io, 1 commit to home-assistant-polymer") - [Pierre Ståhl (@postlund)](https://github.com/postlund "45 total commits to the home-assistant organization, 30 commits to home-assistant, 9 commits to home-assistant.github.io, 4 commits to netdisco, 2 commits to home-assistant-polymer") - [Piratonym (@Piratonym)](https://github.com/Piratonym "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [pkonnekermetametrics (@pkonnekermetametrics)](https://github.com/pkonnekermetametrics "5 total commits to the home-assistant organization, 5 commits to warrant") @@ -710,9 +682,8 @@ This page contains a list of people who have contributed in one way or another t - [rbflurry (@rbflurry)](https://github.com/rbflurry "16 total commits to the home-assistant organization, 13 commits to home-assistant.github.io, 3 commits to home-assistant") - [Reed Riley (@reedriley)](https://github.com/reedriley "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Rendili (@Rendili)](https://github.com/Rendili "2 total commits to the home-assistant organization, 2 commits to home-assistant") -- [Rene Tode (@ReneTode)](https://github.com/ReneTode "25 total commits to the home-assistant organization, 25 commits to appdaemon") +- [Rene Tode (@ReneTode)](https://github.com/ReneTode "38 total commits to the home-assistant organization, 38 commits to appdaemon") - [René Kliment (@renekliment)](https://github.com/renekliment "2 total commits to the home-assistant organization, 2 commits to home-assistant") -- [Rev Michael Greb (@mikegrb)](https://github.com/mikegrb "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [Reza Moallemi (@moallemi)](https://github.com/moallemi "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") - [rhooper (@rhooper)](https://github.com/rhooper "27 total commits to the home-assistant organization, 25 commits to home-assistant, 2 commits to hadashboard") - [Riccardo Canta (@commento)](https://github.com/commento "3 total commits to the home-assistant organization, 3 commits to home-assistant") @@ -722,9 +693,9 @@ This page contains a list of people who have contributed in one way or another t - [rkabadi (@rkabadi)](https://github.com/rkabadi "17 total commits to the home-assistant organization, 17 commits to home-assistant") - [Rob Capellini (@capellini)](https://github.com/capellini "3 total commits to the home-assistant organization, 3 commits to home-assistant") - [Rob Slifka (@rslifka)](https://github.com/rslifka "5 total commits to the home-assistant organization, 5 commits to home-assistant.github.io") -- [Robbie Trencheny (@robbiet480)](https://github.com/robbiet480 "1315 total commits to the home-assistant organization, 646 commits to home-assistant-iOS, 259 commits to home-assistant, 248 commits to home-assistant.github.io, 91 commits to homebridge-homeassistant, 15 commits to home-assistant-polymer, 9 commits to hubot-home-assistant, 8 commits to Analytics-Receiver, 6 commits to netdisco, 3 commits to home-assistant-js, 3 commits to scenegen, 3 commits to organization, 3 commits to home-assistant-js-websocket, 3 commits to appdaemon, 3 commits to hadashboard, 3 commits to hassbot, 2 commits to home-assistant-assets, 2 commits to fabric-home-assistant, 2 commits to lambda-home-assistant-github, 2 commits to LabelBot, 2 commits to micropython-home-assistant, 2 commits to home-assistant-notebooks") +- [Robbie Trencheny (@robbiet480)](https://github.com/robbiet480 "1315 total commits to the home-assistant organization, 646 commits to home-assistant-iOS, 259 commits to home-assistant, 248 commits to home-assistant.github.io, 91 commits to homebridge-homeassistant, 15 commits to home-assistant-polymer, 9 commits to hubot-home-assistant, 8 commits to Analytics-Receiver, 6 commits to netdisco, 3 commits to hassbot, 3 commits to hadashboard, 3 commits to home-assistant-js-websocket, 3 commits to appdaemon, 3 commits to home-assistant-js, 3 commits to scenegen, 3 commits to organization, 2 commits to LabelBot, 2 commits to home-assistant-assets, 2 commits to fabric-home-assistant, 2 commits to home-assistant-notebooks, 2 commits to micropython-home-assistant, 2 commits to lambda-home-assistant-github") - [Robby Grossman (@freerobby)](https://github.com/freerobby "2 total commits to the home-assistant organization, 2 commits to home-assistant") -- [Robin (@robmarkcole)](https://github.com/robmarkcole "15 total commits to the home-assistant organization, 9 commits to home-assistant.github.io, 6 commits to home-assistant") +- [Robin (@robmarkcole)](https://github.com/robmarkcole "16 total commits to the home-assistant organization, 9 commits to home-assistant.github.io, 6 commits to home-assistant, 1 commit to home-assistant-assets") - [Robin Laurén (@llauren)](https://github.com/llauren "1 total commits to the home-assistant organization, 1 commit to appdaemon") - [Roddie Hasan (@eiddor)](https://github.com/eiddor "6 total commits to the home-assistant organization, 6 commits to home-assistant.github.io") - [Roi Dayan (@roidayan)](https://github.com/roidayan "6 total commits to the home-assistant organization, 6 commits to home-assistant") @@ -736,26 +707,26 @@ This page contains a list of people who have contributed in one way or another t - [rpitera (@rpitera)](https://github.com/rpitera "5 total commits to the home-assistant organization, 5 commits to home-assistant.github.io") - [rubund (@rubund)](https://github.com/rubund "4 total commits to the home-assistant organization, 4 commits to home-assistant") - [runningman84 (@runningman84)](https://github.com/runningman84 "4 total commits to the home-assistant organization, 4 commits to home-assistant.github.io") -- [Ruslan Kiianchuk (@zoresvit)](https://github.com/zoresvit "1 total commits to the home-assistant organization, 1 commit to pi-gen") +- [Ruslan Kiyanchuk (@zoresvit)](https://github.com/zoresvit "1 total commits to the home-assistant organization, 1 commit to pi-gen") - [Russell Cloran (@rcloran)](https://github.com/rcloran "19 total commits to the home-assistant organization, 15 commits to home-assistant, 4 commits to homebridge-homeassistant") - [Ryan Bahm (@rdbahm)](https://github.com/rdbahm "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [Ryan Borstelmann (@SlothCroissant)](https://github.com/SlothCroissant "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [Ryan Daigle (@rwdaigle)](https://github.com/rwdaigle "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [Ryan Kraus (@rmkraus)](https://github.com/rmkraus "193 total commits to the home-assistant organization, 163 commits to home-assistant, 15 commits to home-assistant.github.io, 14 commits to home-assistant-polymer, 1 commit to home-assistant-notebooks") -- [Ryan McLean (@ryanm101)](https://github.com/ryanm101 "11 total commits to the home-assistant organization, 6 commits to home-assistant, 5 commits to home-assistant.github.io") +- [Ryan McLean (@ryanm101)](https://github.com/ryanm101 "47 total commits to the home-assistant organization, 35 commits to hassio-cli, 7 commits to home-assistant, 5 commits to home-assistant.github.io") - [Ryan Turner (@turnrye)](https://github.com/turnrye "6 total commits to the home-assistant organization, 6 commits to home-assistant") - [Sabesto (@Sabesto)](https://github.com/Sabesto "3 total commits to the home-assistant organization, 3 commits to home-assistant") - [Sam Birch (@hotplot)](https://github.com/hotplot "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Sam Holmes (@sam3d)](https://github.com/sam3d "4 total commits to the home-assistant organization, 4 commits to pi-gen") - [sam-io (@sam-io)](https://github.com/sam-io "3 total commits to the home-assistant organization, 3 commits to home-assistant") - [sander76 (@sander76)](https://github.com/sander76 "41 total commits to the home-assistant organization, 37 commits to home-assistant, 4 commits to home-assistant.github.io") -- [schneefux (@schneefux)](https://github.com/schneefux "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Scott Bradshaw (@swbradshaw)](https://github.com/swbradshaw "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Scott Griffin (@scottocs11)](https://github.com/scottocs11 "7 total commits to the home-assistant organization, 7 commits to home-assistant.github.io") - [Scott O'Neil (@americanwookie)](https://github.com/americanwookie "7 total commits to the home-assistant organization, 4 commits to home-assistant, 3 commits to home-assistant.github.io") - [Scott Reston (@ih8gates)](https://github.com/ih8gates "9 total commits to the home-assistant organization, 8 commits to home-assistant.github.io, 1 commit to home-assistant-polymer") - [Sean Dague (@sdague)](https://github.com/sdague "64 total commits to the home-assistant organization, 44 commits to home-assistant, 11 commits to home-assistant.github.io, 5 commits to home-assistant-polymer, 3 commits to netdisco, 1 commit to home-assistant-js") - [Sean Gollschewsky (@gollo)](https://github.com/gollo "17 total commits to the home-assistant organization, 10 commits to home-assistant, 4 commits to home-assistant.github.io, 3 commits to hassio-build") +- [Sean Wilson (@swilson)](https://github.com/swilson "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Sebastian (@sebk-666)](https://github.com/sebk-666 "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [Sebastian (@sgso)](https://github.com/sgso "3 total commits to the home-assistant organization, 3 commits to libcoap") - [Sebastian Muszynski (@syssi)](https://github.com/syssi "42 total commits to the home-assistant organization, 21 commits to home-assistant, 19 commits to home-assistant.github.io, 2 commits to home-assistant-polymer") @@ -799,13 +770,14 @@ This page contains a list of people who have contributed in one way or another t - [thecynic (@thecynic)](https://github.com/thecynic "4 total commits to the home-assistant organization, 4 commits to home-assistant") - [Theodor Lindquist (@theolind)](https://github.com/theolind "25 total commits to the home-assistant organization, 25 commits to home-assistant") - [Thiago Oliveira (@chilicheech)](https://github.com/chilicheech "3 total commits to the home-assistant organization, 3 commits to home-assistant") -- [Thibault Cohen (@titilambert)](https://github.com/titilambert "39 total commits to the home-assistant organization, 26 commits to home-assistant, 13 commits to home-assistant.github.io") +- [Thibault Cohen (@titilambert)](https://github.com/titilambert "41 total commits to the home-assistant organization, 28 commits to home-assistant, 13 commits to home-assistant.github.io") - [Thibault Maekelbergh (@thibmaek)](https://github.com/thibmaek "4 total commits to the home-assistant organization, 3 commits to home-assistant.github.io, 1 commit to hassio-addons") +- [Thijs de Jong (@bakedraccoon)](https://github.com/bakedraccoon "5 total commits to the home-assistant organization, 5 commits to home-assistant") - [ThinkPadNL (@ThinkPadNL)](https://github.com/ThinkPadNL "4 total commits to the home-assistant organization, 4 commits to home-assistant.github.io") -- [Thom Troy (@ttroy50)](https://github.com/ttroy50 "10 total commits to the home-assistant organization, 7 commits to home-assistant.github.io, 3 commits to home-assistant") +- [Thom Troy (@ttroy50)](https://github.com/ttroy50 "11 total commits to the home-assistant organization, 7 commits to home-assistant.github.io, 4 commits to home-assistant") - [Thomas Friedel (@tfriedel)](https://github.com/tfriedel "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Thomas Petazzoni (@tpetazzoni)](https://github.com/tpetazzoni "1 total commits to the home-assistant organization, 1 commit to libcoap") -- [Thomas Phillips (@thomas-teknique)](https://github.com/thomas-teknique "2 total commits to the home-assistant organization, 2 commits to pi-gen") +- [Thomas Phillips (@thomas-phillips-nz)](https://github.com/thomas-phillips-nz "2 total commits to the home-assistant organization, 2 commits to pi-gen") - [Thomas Purchas (@thomaspurchas)](https://github.com/thomaspurchas "1 total commits to the home-assistant organization, 1 commit to homebridge-homeassistant") - [Thomas Pötsch (@thp-comnets)](https://github.com/thp-comnets "7 total commits to the home-assistant organization, 7 commits to libcoap") - [thrawnarn (@thrawnarn)](https://github.com/thrawnarn "1 total commits to the home-assistant organization, 1 commit to netdisco") @@ -830,10 +802,12 @@ This page contains a list of people who have contributed in one way or another t - [Toshik (@Toshik)](https://github.com/Toshik "1 total commits to the home-assistant organization, 1 commit to homebridge-homeassistant") - [Touliloup (@RiRomain)](https://github.com/RiRomain "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [tradiuz (@tradiuz)](https://github.com/tradiuz "5 total commits to the home-assistant organization, 5 commits to home-assistant.github.io") +- [travislreno (@travislreno)](https://github.com/travislreno "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [trbs (@trbs)](https://github.com/trbs "1 total commits to the home-assistant organization, 1 commit to netdisco") - [Trevor (@tboyce021)](https://github.com/tboyce021 "15 total commits to the home-assistant organization, 10 commits to home-assistant, 5 commits to home-assistant.github.io") - [Trey Hunner (@treyhunner)](https://github.com/treyhunner "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [trollkarlen (@trollkarlen)](https://github.com/trollkarlen "5 total commits to the home-assistant organization, 5 commits to home-assistant") +- [tschmidty69 (@tschmidty69)](https://github.com/tschmidty69 "6 total commits to the home-assistant organization, 6 commits to home-assistant") - [Tsvi Mostovicz (@tsvi)](https://github.com/tsvi "9 total commits to the home-assistant organization, 5 commits to home-assistant.github.io, 4 commits to home-assistant") - [Tyler Page (@iamtpage)](https://github.com/iamtpage "5 total commits to the home-assistant organization, 3 commits to home-assistant.github.io, 2 commits to home-assistant") - [Tõnis Tobre (@tobre6)](https://github.com/tobre6 "1 total commits to the home-assistant organization, 1 commit to homebridge-homeassistant") @@ -857,7 +831,7 @@ This page contains a list of people who have contributed in one way or another t - [Will W. (@tiktok7)](https://github.com/tiktok7 "4 total commits to the home-assistant organization, 4 commits to home-assistant") - [Willems Davy (@joyrider3774)](https://github.com/joyrider3774 "7 total commits to the home-assistant organization, 4 commits to home-assistant.github.io, 3 commits to home-assistant") - [William Johansson (@radhus)](https://github.com/radhus "1 total commits to the home-assistant organization, 1 commit to hassio") -- [William Scanlon (@w1ll1am23)](https://github.com/w1ll1am23 "104 total commits to the home-assistant organization, 70 commits to home-assistant, 32 commits to home-assistant.github.io, 2 commits to netdisco") +- [William Scanlon (@w1ll1am23)](https://github.com/w1ll1am23 "106 total commits to the home-assistant organization, 71 commits to home-assistant, 33 commits to home-assistant.github.io, 2 commits to netdisco") - [williamlehman (@williamlehman)](https://github.com/williamlehman "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") - [wind-rider (@wind-rider)](https://github.com/wind-rider "5 total commits to the home-assistant organization, 5 commits to home-assistant") - [wokar (@wokar)](https://github.com/wokar "12 total commits to the home-assistant organization, 8 commits to home-assistant, 4 commits to home-assistant.github.io") @@ -872,11 +846,11 @@ This page contains a list of people who have contributed in one way or another t - [Zac Hatfield Dodds (@Zac-HD)](https://github.com/Zac-HD "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Zen Tormey (@xehn)](https://github.com/xehn "4 total commits to the home-assistant organization, 4 commits to home-assistant.github.io") - [Zhao Lu (@zlu)](https://github.com/zlu "4 total commits to the home-assistant organization, 4 commits to home-assistant.github.io") -- [Zio Tibia (@ziotibia81)](https://github.com/ziotibia81 "12 total commits to the home-assistant organization, 7 commits to home-assistant.github.io, 5 commits to home-assistant") -- [Zorks (@Zorks)](https://github.com/Zorks "4 total commits to the home-assistant organization, 4 commits to home-assistant.github.io") +- [Zio Tibia (@ziotibia81)](https://github.com/ziotibia81 "14 total commits to the home-assistant organization, 7 commits to home-assistant, 7 commits to home-assistant.github.io") +- [Zorks (@Zorks)](https://github.com/Zorks "5 total commits to the home-assistant organization, 5 commits to home-assistant.github.io") - [Åskar Andersson (@olskar)](https://github.com/olskar "5 total commits to the home-assistant organization, 4 commits to home-assistant.github.io, 1 commit to hassbian-scripts") This page is irregularly updated using the [`credits_generator` tool](https://github.com/home-assistant/home-assistant.github.io/tree/next/credits_generator). If you think that you are missing, please let us know. -This page was last updated Sunday, December 24th 2017, 10:59:57 pm UTC. +This page was last updated Saturday, January 13th 2018, 6:07:58 pm UTC. From 1e7b950ad61781ff781fcb6fc5bdc07daf128650 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Sat, 13 Jan 2018 22:55:57 +0100 Subject: [PATCH 079/993] update --- source/_docs/frontend/browsers.markdown | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/_docs/frontend/browsers.markdown b/source/_docs/frontend/browsers.markdown index d0ead42c91..6ad520acfc 100644 --- a/source/_docs/frontend/browsers.markdown +++ b/source/_docs/frontend/browsers.markdown @@ -23,7 +23,7 @@ We would appreciate if you help to keep this page up-to-date and add feedback. | Internet Explorer ([IE]) | 11 | Not supported | Does not support promises. | | Microsoft [Edge] | deli. Win 10 | works | Streaming updates not working. | | [Chrome] | 61.0.3163.100 | works | | -| [Firefox] | 56.0 | works | | +| [Firefox] | 57.0 | works | | | [Iridium] | 48.2 | works | | | [Opera] | 42.0.2393.351 | works | | @@ -39,7 +39,7 @@ We would appreciate if you help to keep this page up-to-date and add feedback. | :-------------------- |:---------------|:-----------|:-------------------------| | [Firefox] | 57.0 | works | | | [Midori] | 0.5.11 | works | | -| [Chromium] | 61.0.3163.100 | works | | +| [Chromium] | 63.0.3239.108 | works | | | [Conkeror] | 1.0.2 | works | | | [Tor Browser] | 7.0.8 | works | | | [Konqueror] | | unknown | | From ba538c71f9b5ff16ffdd59e50f8c8bf9dc00be4c Mon Sep 17 00:00:00 2001 From: Lukas Ecklmayr Date: Sun, 14 Jan 2018 20:34:48 +0100 Subject: [PATCH 080/993] fixed URL for github access token (#4415) --- source/_components/sensor.travisci.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/sensor.travisci.markdown b/source/_components/sensor.travisci.markdown index a3944d69a8..82698ab737 100644 --- a/source/_components/sensor.travisci.markdown +++ b/source/_components/sensor.travisci.markdown @@ -26,7 +26,7 @@ sensor: Configuration variables: -- **api_key** (*Required*): GitHub [access token](https://github.com/settings/applications) with the following scopes: *read:org*, *user:email*, *repo_deployment*, *repo:status*, *write:repo_hook*. +- **api_key** (*Required*): GitHub [access token](https://github.com/settings/tokens) with the following scopes: *read:org*, *user:email*, *repo_deployment*, *repo:status*, *write:repo_hook*. - **branch** (*Optional*): Determine which default branch should be used by the **state** condition. Defaults to *master*. - **scan_interval** (*Optional*): How frequently to query for new data. Defaults to 30 seconds. - **monitored_conditions** array (*Optional*): Conditions to display in the frontend. If not specified, all conditions below will be enabled by default. The following conditions can be monitored. From 6360fcdd432d80ade39e80ad4ab008239432f9b8 Mon Sep 17 00:00:00 2001 From: Lukas Ecklmayr Date: Sun, 14 Jan 2018 20:36:16 +0100 Subject: [PATCH 081/993] Update Docs to match regex for repository URL (#4413) Describe that https:// Repository URLs have to end with .git to match regex for repository URL. --- source/_addons/git_pull.markdown | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/_addons/git_pull.markdown b/source/_addons/git_pull.markdown index 126fab9c1a..e482db9509 100644 --- a/source/_addons/git_pull.markdown +++ b/source/_addons/git_pull.markdown @@ -13,7 +13,7 @@ Load and update configuration files for Home Assistant from a GIT repository. ```json { - "repository": "https://example.com/my_configs", + "repository": "https://example.com/my_configs.git", "auto_restart": false, "repeat": { "active": false, @@ -32,7 +32,7 @@ Load and update configuration files for Home Assistant from a GIT repository. } ``` -- **repository** (*Required*): GIT url to your repository. +- **repository** (*Required*): GIT url to your repository. You have to add .git to your GITHub-Repository-URL (see example Config) - **auto_restart** (*Optional*): Make a restart of Home-Assistant if the config have change and is valid. - **repeat/active** (*Optional*): Pull periodic for GIT updates. - **repeat/interval** (*Optional*): Pull all x seconds and look for changes. From 7371450b2a19848abc3fe11bd2d644058e78b753 Mon Sep 17 00:00:00 2001 From: Aaron Bach Date: Sun, 14 Jan 2018 12:40:38 -0700 Subject: [PATCH 082/993] Added firmware version warning (#4411) --- source/_components/camera.yi.markdown | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/source/_components/camera.yi.markdown b/source/_components/camera.yi.markdown index d5f1fa4d1a..052e3b26d6 100644 --- a/source/_components/camera.yi.markdown +++ b/source/_components/camera.yi.markdown @@ -30,6 +30,10 @@ In order to integrate the camera with Home Assistant, it is necessary to install Once installed, please ensure that you have enabled FTP and Telnet on your device. +

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

+

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

From 29b655073b36fcd2e4e907016db125e19fd59074 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Mon, 15 Jan 2018 09:32:27 +0100 Subject: [PATCH 083/993] Update for 0.61 --- _config.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/_config.yml b/_config.yml index 413de4a3ab..f05fc66aca 100644 --- a/_config.yml +++ b/_config.yml @@ -139,12 +139,12 @@ social: # Home Assistant release details current_major_version: 0 -current_minor_version: 60 -current_patch_version: 1 -date_released: 2018-01-06 +current_minor_version: 61 +current_patch_version: 0 +date_released: 2018-01-14 # Either # or the anchor link to latest release notes in the blog post. # Must be prefixed with a # and have double quotes around it. # Major release: -patch_version_notes: "#release-0601---january-6" +patch_version_notes: "#" # Minor release (Example #release-0431---april-25): From f2f47b3b3a63c2959726a63607c4f41e41db309b Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Mon, 15 Jan 2018 11:41:07 +0100 Subject: [PATCH 084/993] Add Discogs logo --- source/_components/sensor.discogs.markdown | 1 + source/images/supported_brands/discogs.png | Bin 0 -> 59964 bytes 2 files changed, 1 insertion(+) create mode 100644 source/images/supported_brands/discogs.png diff --git a/source/_components/sensor.discogs.markdown b/source/_components/sensor.discogs.markdown index 4c4bfe4ef6..281852abc7 100644 --- a/source/_components/sensor.discogs.markdown +++ b/source/_components/sensor.discogs.markdown @@ -10,6 +10,7 @@ footer: true logo: https://www.magneticmag.com/.image/t_share/MTQ5OTE1NzU4NTczMzk3OTYw/discogs-vinyl-record-mark.png ha_category: Sensor ha_release: 0.61 +logo: discogs.png ha_iot_class: "Cloud Polling" --- diff --git a/source/images/supported_brands/discogs.png b/source/images/supported_brands/discogs.png new file mode 100644 index 0000000000000000000000000000000000000000..e207579d99af6f3a8c169314aeff12e9e952d724 GIT binary patch literal 59964 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 Date: Mon, 15 Jan 2018 12:00:17 +0100 Subject: [PATCH 085/993] Add release blog post for 0.61 --- source/_posts/2018-01-14-release-61.markdown | 732 ++++++++++++++++++ .../images/blog/2018-01-0.61/components.png | Bin 0 -> 106189 bytes 2 files changed, 732 insertions(+) create mode 100644 source/_posts/2018-01-14-release-61.markdown create mode 100644 source/images/blog/2018-01-0.61/components.png diff --git a/source/_posts/2018-01-14-release-61.markdown b/source/_posts/2018-01-14-release-61.markdown new file mode 100644 index 0000000000..230b737f83 --- /dev/null +++ b/source/_posts/2018-01-14-release-61.markdown @@ -0,0 +1,732 @@ +--- +layout: post +title: "0.61: Coinbase, Discogs, iGlo, Sochain" +description: "New crypto currency sensors and other new stuff including breaking changes." +date: 2018-01-14 18:00:00 +date_formatted: "January 14, 2018" +author: Fabian Affolter +author_twitter: fabaff +comments: true +categories: Release-Notes +og_image: /images/blog/2018-01-0.61/components.png +--- + + + +Almost a 100 contributors to this release 🎉 That's what you get when you skip a release. It's a little late but "Happy New Year" and welcome to 0.61 the first release 2018. + +This release contain some breaking changes. Please make sure that you check the section below if you are running into trouble. + +There is not much more to tell and I don't want to make something up. + + +## {% linkable_title New Platforms %} + +- Add Discogs Sensor platform ([@thibmaek] - [#10957]) ([sensor.discogs docs]) (new-platform) +- Greenwave Reality (TCP Connected) Lighting Component ([@dfiel] - [#11282]) ([light.greenwave docs]) (new-platform) +- Added rainsensor ([@jbarrancos] - [#11023]) ([rainbird docs]) ([sensor.rainbird docs]) ([switch.rainbird docs]) (new-platform) +- Sochain cryptocurrency sensor ([@Klathmon] - [#11335]) ([sensor.sochain docs]) (new-platform) +- Support for EcoNet water heaters ([@w1ll1am23] - [#11260]) ([climate.econet docs]) (new-platform) +- Add deCONZ component ([@Kane610] - [#10321]) ([deconz docs]) ([binary_sensor.deconz docs]) ([light.deconz docs]) ([sensor.deconz docs]) (new-platform) +- Added new climate component from Daikin ([@rofrantz] - [#10983]) ([climate.daikin docs]) (new-platform) +- Add Touchline climate platform ([@abondoe] - [#10547]) ([climate.touchline docs]) (new-platform) +- Add new iGlo component ([@jesserockz] - [#11171]) ([light.iglo docs]) (new-platform) +- Add Dark Sky weather component ([@DanNixon] - [#11435]) ([weather.darksky docs]) (new-platform) +- Coinbase.com sensor platform ([@nkgilley] - [#11036]) ([coinbase docs]) ([sensor.coinbase docs]) (new-platform) + +## {% linkable_title If you need help... %} + +...don't hesitate to use our very active [forums](https://community.home-assistant.io/) or join us for a little [chat](https://discord.gg/c5DvZ4e). The release notes have comments enabled but it's preferred if you use the former communication channels. Thanks. + +## {% linkable_title Reporting Issues %} + +Experiencing issues introduced by this release? Please report them in our [issue tracker](https://github.com/home-assistant/home-assistant/issues). Make sure to fill in all fields of the issue template. + + + +## {% linkable_title Breaking Changes %} + +- Extend Threshold binary sensor to support ranges. This means that you can now set `up` and `lower`. ([@DanNixon] - [#11110]) ([binary_sensor.threshold docs]) (breaking change) +- The Steam game platform contains changes: + - `game` attribute no longer set in `device_state_attributes` if no game is currently being played as the string "None" is no longer passed if no current game is being played, instead the `game` attribute is not present. + - States now use lower snake case. + - The "Play" and "Trade" states has been renamed to "looking_to_play" and "looking_to_trade". + ([@frwickst] - [#11182]) ([sensor.steam_online docs]) (breaking change) +- The [`tile`][device_tracker.tile docs] platform now shows only active Tiles by default; to show all Tiles, including expired/inactive ones, `show_inactive` must be `True`. The following state attributes have been removed: `last_seen` and `last_updated`. ([@bachya] - [#11172]) ([device_tracker.tile docs]) (breaking change) +- The `hidden_string` feature has been removed from the isy994 component. Previously, this allowed entities to be "hidden" in Home Assistant if a configured string was present in an ISY device's name or folder path. This was removed because hiding devices is now done via the customization feature. +Note however, that this feature was replaced by a new ignore_string config option, which will now cause Home Assistant to completely ignore devices with the matching string so that they will not be imported as a Home Assistant device at all. This can be helpful if you have nodes in the ISY that aren't useful at all in Hass (IR transmitter nodes are a good example.) ([@OverloadUT] - [#11243]) ([isy994 docs]) ([binary_sensor.isy994 docs]) ([cover.isy994 docs]) ([fan.isy994 docs]) ([light.isy994 docs]) ([lock.isy994 docs]) ([sensor.isy994 docs]) ([switch.isy994 docs]) (breaking change) +- The [`egardia` alarm panel][alarm_control_panel.egardia docs] platform no longer a need the users to run a separate Egardiaserver component. It can now also run on HASS.io. ([@jeroenterheerdt] - [#11344]) ([alarm_control_panel.egardia docs]) (breaking change) +- The binary sensor platform of the DoorBird integration has been deleted, so remove DoorBird from your `binary_sensor` configuration. Instead, set the `doorbell_events` option of the `doorbird` component to `True`. The `last_visitor` option has been removed from the camera component, as it is now always added as an entity. ([@Klikini] - [#11193]) ([camera.doorbird docs]) (breaking change) +- The following attributes of the TP-Link switch and light platform have been renamed: + - Light: `current_consumption` -> `current_power_w`, `daily_consumption` -> `daily_energy_kwh` and `monthly_consumption` -> `monthly_energy_kwh` + - Switch: `current` -> `current_a`, `current_consumption` -> `current_power_w`, `total_consumption` -> `total_energy_kwh` and `daily_consumption` -> `today_energy_kwh` ([@DanNixon] - [#10979]) ([light.tplink docs]) ([switch.tplink docs]) (breaking change) +- Move IMAP Email Content body to an attribute ([@notoriousbdg] - [#11096]) ([sensor.imap_email_content docs]) (breaking change) +- Automations which were using `state` that was returning `target_temperature` of the `netatmo` climate platform needs an update. ([@ciotlosm] - [#11345]) ([climate.netatmo docs]) (breaking change) +- The default availability payloads for the `MQTT` switch platform have changed from "ON" and "OFF" to "online" and "offline" (in order to match the majority of MQTT platforms that already supported availability reporting). ([@DanNixon] - [#11336]) (breaking change) +- Customizations for how entities are exposed to Alexa are no longer set via `customize`. Instead they are set via the configuration of the cloud component: + + ```yaml + cloud: + alexa: + entity_config: + switch.kitchen: + name: 'Name for Alexa' + description: 'Description for Alexa' + display_categories: 'LIGHT' + ``` + ([@balloob] - [#11461]) ([cloud docs]) ([alexa.smart_home docs]) (breaking change) +- The extension of the `alpha_vantage` requires an update of the configuration as now are exchange data available as well. ([@ChristianKuehnel] - [#11427]) ([sensor.alpha_vantage docs]) (breaking change) +- The `prometheus` component now supports pushing all sensors and fixes wrong metrics. If may require that you update your configuration. ([@michaelkuty] - [#11159]) ([prometheus docs]) (breaking change) +- Insteon local devices will now use their address as the `entity_id` and `name`. The friendly name can be customized using the [standard customization configuration](https://home-assistant.io/docs/configuration/customizing-devices/). ([@camrun91] - [#11088]) ([insteon_local docs]) ([fan.insteon_local docs]) ([light.insteon_local docs]) ([switch.insteon_local docs]) (breaking change) +- Google Assistant is no longer configured via `customize` but instead has its configuration under the `google_assistant` entry in your `configuration.yaml`. The attributes will no longer have to be prefixed with `google_assistant_` either. + + | Old option | New option | + | ---------- | ------------ | + | google_assistant | expose | + | aliases | aliases | + | google_assistant_name | name | + | google_assistant_type | type | + + Before: + + ```yaml + homeassistant: + customize: + switch.kitchen: + google_assistant: false + google_assistant_name: nice lights + google_assistant_type: light + aliases: + - roof lights + + google_assistant: + ``` + + After: + + ```yaml + google_assistant: + entity_config: + switch.kitchen: + expose: false + alias: roof lights + name: nice lights + type: light + ``` +([@balloob] - [#11499]) ([cloud docs]) ([google_assistant docs]) (breaking change) +- The `climate.set_aux_heat` service is no longer available for the Sensibo cliamte platform. Now call `climate.turn_on` or `climate.turn_off`. ([@andrey-git] - [#11579]) ([climate.sensibo docs]) (breaking change) + +## {% linkable_title All changes %} + +- Try multiple methods of getting data in asuswrt. ([@PeWu] - [#11140]) ([device_tracker.asuswrt docs]) +- Hydroquebec component use now asyncio ([@titilambert] - [#10795]) ([sensor.hydroquebec docs]) +- Hive Component Release Two ([@KJonline] - [#11053]) ([hive docs]) ([climate.hive docs]) ([light.hive docs]) +- Add Discogs Sensor platform ([@thibmaek] - [#10957]) ([sensor.discogs docs]) (new-platform) +- Fix statistics sensor mean and median when only one sample is available. ([@markferry] - [#11180]) ([sensor.statistics docs]) +- Extend Threshold binary sensor to support ranges ([@DanNixon] - [#11110]) ([binary_sensor.threshold docs]) (breaking change) +- Bump python-miio version ([@djchen] - [#11232]) ([fan.xiaomi_miio docs]) ([light.xiaomi_miio docs]) ([switch.xiaomi_miio docs]) ([vacuum.xiaomi_miio docs]) +- Backup configuration files before overwriting ([@cgarwood] - [#11216]) +- Upgrade to new miflora version 0.2.0 ([@ChristianKuehnel] - [#11250]) ([sensor.miflora docs]) +- Add workaround for running tox on Windows platforms ([@veleek] - [#11188]) +- added myself to become code owner for miflora and plant ([@ChristianKuehnel] - [#11251]) +- Proper Steam game names and small fixes ([@frwickst] - [#11182]) ([sensor.steam_online docs]) (breaking change) +- Bugfix: 10509 - http is hard coded in plex sensor ([@ryanm101] - [#11072]) ([sensor.plex docs]) +- Adding MotionIP to BinarySensors for HMIP-SMI ([@schnoetz] - [#11268]) ([homematic docs]) +- Revert "Backup configuration files before overwriting" ([@pvizeli] - [#11269]) +- Functinality to save/restore snapshots for monoprice platform ([@etsinko] - [#10296]) ([media_player.monoprice docs]) +- Change manifest path to /states as this is the path / actually sets. ([@andrey-git] - [#11274]) +- Report Sensibo as off when it is off ([@andrey-git] - [#11281]) ([climate.sensibo docs]) +- Added password for GPS logger endpoint ([@foxel] - [#11245]) ([device_tracker.gpslogger docs]) +- Greenwave Reality (TCP Connected) Lighting Component ([@dfiel] - [#11282]) ([light.greenwave docs]) (new-platform) +- Adds support for disabled Tiles and automatic session renewal ([@bachya] - [#11172]) ([device_tracker.tile docs]) (breaking change) +- Plex refactor ([@ryanm101] - [#11235]) ([media_player.plex docs]) +- alexa: Add handling for covers ([@philk] - [#11242]) ([alexa.smart_home docs]) +- Added rainsensor ([@jbarrancos] - [#11023]) ([rainbird docs]) ([sensor.rainbird docs]) ([switch.rainbird docs]) (new-platform) +- Store raw state of RF sensors from alarmdecoder ([@PhracturedBlue] - [#10841]) ([alarmdecoder docs]) ([binary_sensor.alarmdecoder docs]) +- Add Chime status and control to Alarm Decoder component ([@goyney] - [#11271]) ([alarm_control_panel.alarmdecoder docs]) +- Better error handling ([@rofrantz] - [#11297]) ([sensor.transmission docs]) ([switch.transmission docs]) +- Removed error log used as debug ([@cmsimike] - [#11301]) ([octoprint docs]) +- Huge ISY994 platform cleanup, fixes support for 5.0.10 firmware ([@OverloadUT] - [#11243]) ([isy994 docs]) ([binary_sensor.isy994 docs]) ([cover.isy994 docs]) ([fan.isy994 docs]) ([light.isy994 docs]) ([lock.isy994 docs]) ([sensor.isy994 docs]) ([switch.isy994 docs]) (breaking change) +- Add heartbeat to websocket connections ([@balloob] - [#11298]) ([cloud.iot docs]) +- Fix typo in bitcoin.py component for mined blocks. ([@awkwardDuck] - [#11318]) ([sensor.bitcoin docs]) +- xiaomi_aqara: Fix covers never being closed ([@cnrd] - [#11319]) ([cover.xiaomi_aqara docs]) +- Fix for track_new_devices BC ([@masarliev] - [#11202]) ([device_tracker docs]) +- Upgrade aiohttp_cors to 0.6.0 ([@fabaff] - [#11310]) ([http docs]) +- Upgrade pysnmp to 4.4.3 ([@fabaff] - [#11317]) ([device_tracker.snmp docs]) ([sensor.snmp docs]) ([switch.snmp docs]) +- Upgrade luftdaten to 0.1.3 ([@fabaff] - [#11316]) ([sensor.luftdaten docs]) +- Upgrade yahooweather to 0.10 ([@fabaff] - [#11309]) ([weather.yweather docs]) +- Upgrade distro to 1.2.0 ([@fabaff] - [#11312]) ([updater docs]) +- Upgrade python-digitalocean to 1.13.2 ([@fabaff] - [#11311]) ([digital_ocean docs]) +- Upgrade youtube_dl to 2017.12.23 ([@fabaff] - [#11308]) ([media_extractor docs]) +- Upgrade alpha_vantage to 1.6.0 ([@fabaff] - [#11307]) ([sensor.alpha_vantage docs]) +- Bugfix for HA Issue 7292, 9412 - switch to gamertag to receive ssl image url ([@ReneNulschDE] - [#11315]) ([sensor.xbox_live docs]) +- closes #11314 by not restricting the voice to anything but a string ([@Human] - [#11326]) ([tts.marytts docs]) +- Additional device classes for binary sensors ([@schmittx] - [#11280]) ([binary_sensor docs]) +- Remove need for separate EgardiaServer setup ([@jeroenterheerdt] - [#11344]) ([alarm_control_panel.egardia docs]) (breaking change) +- Add default names and validation for TP-Link devices ([@DanNixon] - [#11346]) ([light.tplink docs]) ([switch.tplink docs]) +- Sochain cryptocurrency sensor ([@Klathmon] - [#11335]) ([sensor.sochain docs]) (new-platform) +- pass stops_at to get_station_by_name ([@ttroy50] - [#11304]) ([sensor.irish_rail_transport docs]) +- Move data instance to setup ([@fabaff] - [#11350]) ([sensor.swiss_public_transport docs]) +- Update modbus.py ([@goldminenine] - [#11238]) ([modbus docs]) +- DoorBird feature update ([@Klikini] - [#11193]) ([camera.doorbird docs]) (breaking change) +- Upgrade aiohttp to 2.3.7 ([@fabaff] - [#11329]) +- Upgrade fuzzywuzzy to 0.16.0 ([@fabaff] - [#11331]) ([conversation docs]) +- Upgrade pyowm to 2.8.0 ([@fabaff] - [#11332]) ([sensor.openweathermap docs]) ([weather.openweathermap docs]) +- Upgrade sqlalchemy to 1.2.0 ([@fabaff] - [#11333]) +- Upgrade mypy to 0.560 ([@fabaff] - [#11334]) +- Upgrade python-telegram-bot to 9.0.0 ([@fabaff] - [#11341]) ([telegram_bot docs]) +- Upgrade youtube_dl to 2017.12.28 ([@fabaff] - [#11357]) ([media_extractor docs]) +- Correct units used in TP-Link energy monioring ([@DanNixon] - [#10979]) ([light.tplink docs]) ([switch.tplink docs]) (breaking change) +- Add HTTP endpoint for resending email confirmation ([@balloob] - [#11354]) ([cloud.auth_api docs]) ([cloud.http_api docs]) +- Fix RGB template ordering in MQTT Light ([@DanNixon] - [#11362]) ([light.mqtt docs]) +- Ping device tracker now respects interval_seconds ([@tschmidty69] - [#11348]) ([device_tracker.ping docs]) +- Fido component use now asyncio ([@titilambert] - [#11244]) ([sensor.fido docs]) +- Support for EcoNet water heaters ([@w1ll1am23] - [#11260]) ([climate.econet docs]) (new-platform) +- Remember the Milk - updating and completing tasks ([@ChristianKuehnel] - [#11069]) ([remember_the_milk docs]) +- Reverts unit conversions in TP-Link bulb ([@DanNixon] - [#11381]) ([light.tplink docs]) +- Clean up Google Assistant ([@balloob] - [#11375]) ([google_assistant docs]) ([google_assistant.http docs]) ([google_assistant.smart_home docs]) +- Adding support for Egardia / Woonveilig version GATE-03 ([@jeroenterheerdt] - [#11397]) ([alarm_control_panel.egardia docs]) +- Add deCONZ component ([@Kane610] - [#10321]) ([deconz docs]) ([binary_sensor.deconz docs]) ([light.deconz docs]) ([sensor.deconz docs]) (new-platform) +- Fix broken tests ([@balloob] - [#11395]) +- Upgrade pychromecast to 1.0.3 ([@OttoWinter] - [#11410]) ([media_player.cast docs]) +- Bump pywemo to fix request include problems. ([@pavoni] - [#11401]) ([wemo docs]) +- Log exceptions that happen during service call ([@balloob] - [#11394]) +- Move IMAP Email Content body to an attribute ([@notoriousbdg] - [#11096]) ([sensor.imap_email_content docs]) (breaking change) +- Notify webos timeout error fix ([@masarliev] - [#11027]) ([notify.webostv docs]) +- Removed status block to allow https://github.com/home-assistant/home-assistant-polymer/pull/766 with no impact ([@ciotlosm] - [#11345]) ([climate.netatmo docs]) (breaking change) +- More support for availability reporting on MQTT components ([@DanNixon] - [#11336]) (breaking change) +- Do not purge the most recent state for an entity ([@tinloaf] - [#11039]) +- Performance optimization of TP-Link switch ([@amelchio] - [#11416]) ([switch.tplink docs]) +- Fixing OpenWeatherMap Sensor. Current weather is 'unknown' if forecast: false. It was reported as #8640. ([@tomaszduda23] - [#11417]) ([sensor.openweathermap docs]) +- Silence redundant warnings about slow setup ([@amelchio] - [#11352]) +- Account for User-Agent being non-existent, causing a TypeError ([@akatrevorjay] - [#11064]) +- Cloud Updates ([@balloob] - [#11404]) ([cloud docs]) +- Add support for the renaming of Yamaha Receiver Zones via configuration file. Added a test to cover the change, plus previously untested options. ([@dfinlay] - [#11402]) ([media_player.yamaha docs]) +- Plex api update ([@ryanm101] - [#11423]) ([media_player.plex docs]) ([sensor.plex docs]) +- fix: hmip-etrv-2 now working with homeassistant ([@daenny] - [#11175]) ([homematic docs]) ([climate.homematic docs]) +- Fix errors in zigbee push state ([@SteveEasley] - [#11386]) ([zigbee docs]) +- Add on/off supported feature to climate ([@andrey-git] - [#11379]) ([climate docs]) ([climate.demo docs]) ([climate.sensibo docs]) +- Fix CONF_FRIENDLY_NAME ([@cdce8p] - [#11438]) ([cover.template docs]) ([light.template docs]) +- Climate: fix missing "|" ([@andrey-git] - [#11441]) ([climate.demo docs]) +- Google Assistant -> Google Actions ([@balloob] - [#11442]) ([cloud.iot docs]) +- Added new climate component from Daikin ([@rofrantz] - [#10983]) ([climate.daikin docs]) (new-platform) +- Updated generic thermostat to respect operation_mode and added away mode ([@ciotlosm] - [#11445]) ([climate.generic_thermostat docs]) +- Reconnect to alarmdecoder on disconnect ([@PhracturedBlue] - [#11383]) ([alarmdecoder docs]) +- Set tahoma cover scan interval to 60 seconds ([@bakedraccoon] - [#11447]) ([cover.tahoma docs]) +- Add some tests to the cloud component ([@balloob] - [#11460]) ([cloud docs]) ([cloud.iot docs]) +- Input Select - Added service description ([@cdce8p] - [#11456]) ([input_select docs]) +- Input Boolean - Deleted 'DEFAULT_INITIAL' ([@cdce8p] - [#11453]) ([input_boolean docs]) +- Updated gitignore file ([@cdce8p] - [#11452]) +- Update hydroquebec component to use hass httpsession ([@titilambert] - [#11412]) ([sensor.hydroquebec docs]) +- Catch everything when calling to OctoPrint API to fix #10557 ([@w1ll1am23] - [#11457]) ([octoprint docs]) +- Update PULL_REQUEST_TEMPLATE.md ([@danielhiversen] - [#11465]) +- Alexa to not use customize for entity config ([@balloob] - [#11461]) ([cloud docs]) ([alexa.smart_home docs]) (breaking change) +- Don't duplicate html5 registrations ([@Chris-V] - [#11451]) ([notify.html5 docs]) +- AlarmDecoder remove icon function as BinarySensorDevice handles it correctly now ([@hawk259] - [#11467]) ([binary_sensor.alarmdecoder docs]) +- Upgrade psutil to 5.4.3 ([@fabaff] - [#11468]) ([sensor.systemmonitor docs]) +- Upgrade alpha_vantage to 1.8.0 ([@fabaff] - [#11476]) ([sensor.alpha_vantage docs]) +- Fix vultr tests ([@balloob] - [#11477]) +- Upgrade yarl to 0.17.0 ([@fabaff] - [#11478]) +- Add Touchline climate platform ([@abondoe] - [#10547]) ([climate.touchline docs]) (new-platform) +- Upgrade pysnmp to 4.4.4 ([@fabaff] - [#11485]) ([device_tracker.snmp docs]) ([sensor.snmp docs]) ([switch.snmp docs]) +- Add new iGlo component ([@jesserockz] - [#11171]) ([light.iglo docs]) (new-platform) +- Add missing configuration variables ([@fabaff] - [#11390]) ([sensor.metoffice docs]) +- Clean up Alexa.intent and DialogFlow.intent ([@balloob] - [#11492]) ([alexa.intent docs]) +- Fix time functions would throw errors in python scripts ([@tomwaters] - [#11414]) ([python_script docs]) +- Upgrade pywebpush to 1.5.0 ([@Chris-V] - [#11497]) ([notify.html5 docs]) +- upgrade schiene to 0.20 ([@JulianKahnert] - [#11504]) ([sensor.deutsche_bahn docs]) +- timer: include the remaining time in the state attributes ([@Julio-Guerra] - [#11510]) ([timer docs]) +- More tolerant KNX component if gateway cant be connected ([@Julius2342] - [#11511]) ([knx docs]) ([binary_sensor.knx docs]) ([climate.knx docs]) ([cover.knx docs]) ([light.knx docs]) ([sensor.knx docs]) ([switch.knx docs]) +- Snips (new) added speech response, parse snips/duration ([@tschmidty69] - [#11513]) ([snips docs]) +- Add Dark Sky weather component ([@DanNixon] - [#11435]) ([weather.darksky docs]) (new-platform) +- Lazy loading of service descriptions ([@amelchio] - [#11479]) ([api docs]) ([websocket_api docs]) ([light.lifx docs]) +- Fix canary flaky test ([@balloob] - [#11519]) +- Address missed review comments for Dark Sky weather ([@DanNixon] - [#11520]) ([weather.darksky docs]) +- New features for Owntracks device_tracker ([@cpcowart] - [#11480]) ([device_tracker.owntracks docs]) +- Reconnect before mochad switch send command ([@aosadchyy] - [#11296]) ([switch.mochad docs]) +- Fix Kodi channels media type ([@florianj1] - [#11505]) ([media_player.kodi docs]) +- Extension sensor alpha_vantage ([@ChristianKuehnel] - [#11427]) ([sensor.alpha_vantage docs]) (breaking change) +- MQTT json attributes ([@timstanley1985] - [#11439]) ([sensor.mqtt docs]) +- Support pushing all sensors and fix wrong metrics. ([@michaelkuty] - [#11159]) ([prometheus docs]) (breaking change) +- Add options feature to Baidu TTS. ([@yienxu] - [#11462]) ([tts.baidu docs]) +- Insteon local update ([@camrun91] - [#11088]) ([insteon_local docs]) ([fan.insteon_local docs]) ([light.insteon_local docs]) ([switch.insteon_local docs]) (breaking change) +- Snips: (fix) support new intentName format ([@tschmidty69] - [#11509]) ([snips docs]) +- Upgrade numpy to 1.14.0 ([@fabaff] - [#11542]) ([binary_sensor.trend docs]) ([image_processing.opencv docs]) +- Upgrade python-etherscan-api to 0.0.2 ([@fabaff] - [#11535]) ([sensor.etherscan docs]) +- Upgrade Sphinx to 1.6.6 ([@fabaff] - [#11534]) +- ZoneMinder event sensor updates ([@swilson] - [#11369]) ([sensor.zoneminder docs]) +- Move Google Assistant entity config out of customize ([@balloob] - [#11499]) ([cloud docs]) ([google_assistant docs]) (breaking change) +- Upgrade lightify to 1.0.6.1 ([@fabaff] - [#11545]) ([light.osramlightify docs]) +- Improved test runtime ([@cdce8p] - [#11553]) ([binary_sensor.workday docs]) +- Add 2 media_player services and 1 custom service to Squeezebox platform ([@ericpignet] - [#10969]) ([media_player.squeezebox docs]) +- Fix error on entity_config missing ([@philk] - [#11561]) ([google_assistant.http docs]) +- Upgrade keyring to 10.3.2 ([@fabaff] - [#11531]) +- Coinbase.com sensor platform ([@nkgilley] - [#11036]) ([coinbase docs]) ([sensor.coinbase docs]) (new-platform) +- Try to fix crashes after Hue refactoring ([@andreacampi] - [#11270]) ([light.hue docs]) +- Remove execution file perm ([@balloob] - [#11563]) +- Deprecate explicit entity_id in template platforms ([@amelchio] - [#11123]) ([binary_sensor.template docs]) ([cover.template docs]) ([light.template docs]) ([sensor.template docs]) ([switch.template docs]) +- Test tweaks ([@balloob] - [#11560]) +- Add Velux Windows to Tahoma ([@bakedraccoon] - [#11538]) ([tahoma docs]) ([cover.tahoma docs]) +- Extend hass.io services / updater ([@pvizeli] - [#11549]) ([hassio docs]) +- Add sensibo_assume_state service to Sensibo climate ([@andrey-git] - [#11567]) ([climate.sensibo docs]) +- Tracking all groups to allow changing of existing groups ([@randellhodges] - [#11444]) ([group docs]) +- Fix new squeezebox service descriptions for lazy loading ([@amelchio] - [#11574]) ([media_player.squeezebox docs]) +- Mark REST binary_sensor unavailable if request fails ([@DanNixon] - [#11506]) ([binary_sensor.rest docs]) +- Tado improvements - hot water zone sensors and climate precision ([@andersonshatch] - [#11521]) ([climate.tado docs]) ([sensor.tado docs]) +- Make the rpi_rf component thread-safe using an RLock ([@ulido] - [#11487]) ([switch.rpi_rf docs]) +- Update pyhomematic, support new devices ([@danielperna84] - [#11578]) ([homematic docs]) +- Alarmdecoder add validation of the zone types ([@hawk259] - [#11488]) ([alarmdecoder docs]) +- Support OSRAM lights on ZHA ([@armills] - [#11522]) ([light.zha docs]) +- Fix bluetooth tracker source ([@swilson] - [#11469]) ([device_tracker docs]) ([device_tracker.bluetooth_le_tracker docs]) ([device_tracker.bluetooth_tracker docs]) +- Fix for asuswrt, telnet not working and presence-detection for router mode ([@kennedyshead] - [#11422]) ([device_tracker.asuswrt docs]) +- Remove aux_heat support from Sensibo now that UI supports on/off ([@andrey-git] - [#11579]) ([climate.sensibo docs]) (breaking change) +- Changed device type of media player and cover to switch ([@Laqoore] - [#11483]) ([google_assistant.smart_home docs]) +- Control ordering of display in history component ([@rwa] - [#11340]) ([history docs]) +- Pr/11430 ([@balloob] - [#11587]) +- Cast return values and add unit tests for the yahoo weather component. ([@cgtobi] - [#10699]) ([weather.yweather docs]) +- add velux roller shutter to tahoma ([@bakedraccoon] - [#11586]) ([tahoma docs]) +- Added support for enable/disable motion detection ([@abjorshammar] - [#11583]) ([camera.uvc docs]) +- Avoid returning empty media_image_url string ([@JackWindows] - [#11557]) ([media_player.cast docs]) +- Core support for hass.io calls & Bugfix check_config ([@pvizeli] - [#11571]) ([__init__ docs]) ([hassio docs]) ([updater docs]) +- Fix Tahoma stop command for 2 types of shutters ([@bakedraccoon] - [#11588]) ([cover.tahoma docs]) +- Pushbullet email support (fix) ([@tschmidty69] - [#11590]) ([notify.pushbullet docs]) +- Fix state for trigger with forced updates ([@armills] - [#11595]) ([automation.state docs]) +- Snips add say and say_actions services (new) ([@tschmidty69] - [#11596]) ([snips docs]) +- Concord232 alarm arm away fix ([@rwa] - [#11597]) ([alarm_control_panel.concord232 docs]) ([binary_sensor.concord232 docs]) +- Bugfix and cleanup for Rfxtrx ([@danielhiversen] - [#11600]) +- Xiaomi lib upgrade ([@danielhiversen] - [#11603]) +- Upgrade yarl to 0.18.0 ([@fabaff] - [#11609]) +- patch stop command ([@bakedraccoon] - [#11612]) ([cover.tahoma docs]) +- Use kelvin/mireds correctly for setting iglo white ([@jesserockz] - [#11622]) +- Update Pyarlo to 0.1.2 ([@arsaboo] - [#11626]) + +[#10296]: https://github.com/home-assistant/home-assistant/pull/10296 +[#10321]: https://github.com/home-assistant/home-assistant/pull/10321 +[#10547]: https://github.com/home-assistant/home-assistant/pull/10547 +[#10699]: https://github.com/home-assistant/home-assistant/pull/10699 +[#10795]: https://github.com/home-assistant/home-assistant/pull/10795 +[#10841]: https://github.com/home-assistant/home-assistant/pull/10841 +[#10957]: https://github.com/home-assistant/home-assistant/pull/10957 +[#10969]: https://github.com/home-assistant/home-assistant/pull/10969 +[#10979]: https://github.com/home-assistant/home-assistant/pull/10979 +[#10983]: https://github.com/home-assistant/home-assistant/pull/10983 +[#11023]: https://github.com/home-assistant/home-assistant/pull/11023 +[#11027]: https://github.com/home-assistant/home-assistant/pull/11027 +[#11036]: https://github.com/home-assistant/home-assistant/pull/11036 +[#11039]: https://github.com/home-assistant/home-assistant/pull/11039 +[#11053]: https://github.com/home-assistant/home-assistant/pull/11053 +[#11064]: https://github.com/home-assistant/home-assistant/pull/11064 +[#11069]: https://github.com/home-assistant/home-assistant/pull/11069 +[#11072]: https://github.com/home-assistant/home-assistant/pull/11072 +[#11088]: https://github.com/home-assistant/home-assistant/pull/11088 +[#11096]: https://github.com/home-assistant/home-assistant/pull/11096 +[#11110]: https://github.com/home-assistant/home-assistant/pull/11110 +[#11123]: https://github.com/home-assistant/home-assistant/pull/11123 +[#11140]: https://github.com/home-assistant/home-assistant/pull/11140 +[#11159]: https://github.com/home-assistant/home-assistant/pull/11159 +[#11171]: https://github.com/home-assistant/home-assistant/pull/11171 +[#11172]: https://github.com/home-assistant/home-assistant/pull/11172 +[#11175]: https://github.com/home-assistant/home-assistant/pull/11175 +[#11180]: https://github.com/home-assistant/home-assistant/pull/11180 +[#11182]: https://github.com/home-assistant/home-assistant/pull/11182 +[#11188]: https://github.com/home-assistant/home-assistant/pull/11188 +[#11193]: https://github.com/home-assistant/home-assistant/pull/11193 +[#11202]: https://github.com/home-assistant/home-assistant/pull/11202 +[#11216]: https://github.com/home-assistant/home-assistant/pull/11216 +[#11232]: https://github.com/home-assistant/home-assistant/pull/11232 +[#11235]: https://github.com/home-assistant/home-assistant/pull/11235 +[#11238]: https://github.com/home-assistant/home-assistant/pull/11238 +[#11242]: https://github.com/home-assistant/home-assistant/pull/11242 +[#11243]: https://github.com/home-assistant/home-assistant/pull/11243 +[#11244]: https://github.com/home-assistant/home-assistant/pull/11244 +[#11245]: https://github.com/home-assistant/home-assistant/pull/11245 +[#11250]: https://github.com/home-assistant/home-assistant/pull/11250 +[#11251]: https://github.com/home-assistant/home-assistant/pull/11251 +[#11260]: https://github.com/home-assistant/home-assistant/pull/11260 +[#11268]: https://github.com/home-assistant/home-assistant/pull/11268 +[#11269]: https://github.com/home-assistant/home-assistant/pull/11269 +[#11270]: https://github.com/home-assistant/home-assistant/pull/11270 +[#11271]: https://github.com/home-assistant/home-assistant/pull/11271 +[#11274]: https://github.com/home-assistant/home-assistant/pull/11274 +[#11280]: https://github.com/home-assistant/home-assistant/pull/11280 +[#11281]: https://github.com/home-assistant/home-assistant/pull/11281 +[#11282]: https://github.com/home-assistant/home-assistant/pull/11282 +[#11296]: https://github.com/home-assistant/home-assistant/pull/11296 +[#11297]: https://github.com/home-assistant/home-assistant/pull/11297 +[#11298]: https://github.com/home-assistant/home-assistant/pull/11298 +[#11301]: https://github.com/home-assistant/home-assistant/pull/11301 +[#11304]: https://github.com/home-assistant/home-assistant/pull/11304 +[#11307]: https://github.com/home-assistant/home-assistant/pull/11307 +[#11308]: https://github.com/home-assistant/home-assistant/pull/11308 +[#11309]: https://github.com/home-assistant/home-assistant/pull/11309 +[#11310]: https://github.com/home-assistant/home-assistant/pull/11310 +[#11311]: https://github.com/home-assistant/home-assistant/pull/11311 +[#11312]: https://github.com/home-assistant/home-assistant/pull/11312 +[#11315]: https://github.com/home-assistant/home-assistant/pull/11315 +[#11316]: https://github.com/home-assistant/home-assistant/pull/11316 +[#11317]: https://github.com/home-assistant/home-assistant/pull/11317 +[#11318]: https://github.com/home-assistant/home-assistant/pull/11318 +[#11319]: https://github.com/home-assistant/home-assistant/pull/11319 +[#11326]: https://github.com/home-assistant/home-assistant/pull/11326 +[#11329]: https://github.com/home-assistant/home-assistant/pull/11329 +[#11331]: https://github.com/home-assistant/home-assistant/pull/11331 +[#11332]: https://github.com/home-assistant/home-assistant/pull/11332 +[#11333]: https://github.com/home-assistant/home-assistant/pull/11333 +[#11334]: https://github.com/home-assistant/home-assistant/pull/11334 +[#11335]: https://github.com/home-assistant/home-assistant/pull/11335 +[#11336]: https://github.com/home-assistant/home-assistant/pull/11336 +[#11340]: https://github.com/home-assistant/home-assistant/pull/11340 +[#11341]: https://github.com/home-assistant/home-assistant/pull/11341 +[#11344]: https://github.com/home-assistant/home-assistant/pull/11344 +[#11345]: https://github.com/home-assistant/home-assistant/pull/11345 +[#11346]: https://github.com/home-assistant/home-assistant/pull/11346 +[#11348]: https://github.com/home-assistant/home-assistant/pull/11348 +[#11350]: https://github.com/home-assistant/home-assistant/pull/11350 +[#11352]: https://github.com/home-assistant/home-assistant/pull/11352 +[#11354]: https://github.com/home-assistant/home-assistant/pull/11354 +[#11357]: https://github.com/home-assistant/home-assistant/pull/11357 +[#11362]: https://github.com/home-assistant/home-assistant/pull/11362 +[#11369]: https://github.com/home-assistant/home-assistant/pull/11369 +[#11375]: https://github.com/home-assistant/home-assistant/pull/11375 +[#11379]: https://github.com/home-assistant/home-assistant/pull/11379 +[#11381]: https://github.com/home-assistant/home-assistant/pull/11381 +[#11383]: https://github.com/home-assistant/home-assistant/pull/11383 +[#11386]: https://github.com/home-assistant/home-assistant/pull/11386 +[#11390]: https://github.com/home-assistant/home-assistant/pull/11390 +[#11394]: https://github.com/home-assistant/home-assistant/pull/11394 +[#11395]: https://github.com/home-assistant/home-assistant/pull/11395 +[#11397]: https://github.com/home-assistant/home-assistant/pull/11397 +[#11401]: https://github.com/home-assistant/home-assistant/pull/11401 +[#11402]: https://github.com/home-assistant/home-assistant/pull/11402 +[#11404]: https://github.com/home-assistant/home-assistant/pull/11404 +[#11410]: https://github.com/home-assistant/home-assistant/pull/11410 +[#11412]: https://github.com/home-assistant/home-assistant/pull/11412 +[#11414]: https://github.com/home-assistant/home-assistant/pull/11414 +[#11416]: https://github.com/home-assistant/home-assistant/pull/11416 +[#11417]: https://github.com/home-assistant/home-assistant/pull/11417 +[#11422]: https://github.com/home-assistant/home-assistant/pull/11422 +[#11423]: https://github.com/home-assistant/home-assistant/pull/11423 +[#11427]: https://github.com/home-assistant/home-assistant/pull/11427 +[#11435]: https://github.com/home-assistant/home-assistant/pull/11435 +[#11438]: https://github.com/home-assistant/home-assistant/pull/11438 +[#11439]: https://github.com/home-assistant/home-assistant/pull/11439 +[#11441]: https://github.com/home-assistant/home-assistant/pull/11441 +[#11442]: https://github.com/home-assistant/home-assistant/pull/11442 +[#11444]: https://github.com/home-assistant/home-assistant/pull/11444 +[#11445]: https://github.com/home-assistant/home-assistant/pull/11445 +[#11447]: https://github.com/home-assistant/home-assistant/pull/11447 +[#11451]: https://github.com/home-assistant/home-assistant/pull/11451 +[#11452]: https://github.com/home-assistant/home-assistant/pull/11452 +[#11453]: https://github.com/home-assistant/home-assistant/pull/11453 +[#11456]: https://github.com/home-assistant/home-assistant/pull/11456 +[#11457]: https://github.com/home-assistant/home-assistant/pull/11457 +[#11460]: https://github.com/home-assistant/home-assistant/pull/11460 +[#11461]: https://github.com/home-assistant/home-assistant/pull/11461 +[#11462]: https://github.com/home-assistant/home-assistant/pull/11462 +[#11465]: https://github.com/home-assistant/home-assistant/pull/11465 +[#11467]: https://github.com/home-assistant/home-assistant/pull/11467 +[#11468]: https://github.com/home-assistant/home-assistant/pull/11468 +[#11469]: https://github.com/home-assistant/home-assistant/pull/11469 +[#11476]: https://github.com/home-assistant/home-assistant/pull/11476 +[#11477]: https://github.com/home-assistant/home-assistant/pull/11477 +[#11478]: https://github.com/home-assistant/home-assistant/pull/11478 +[#11479]: https://github.com/home-assistant/home-assistant/pull/11479 +[#11480]: https://github.com/home-assistant/home-assistant/pull/11480 +[#11483]: https://github.com/home-assistant/home-assistant/pull/11483 +[#11485]: https://github.com/home-assistant/home-assistant/pull/11485 +[#11487]: https://github.com/home-assistant/home-assistant/pull/11487 +[#11488]: https://github.com/home-assistant/home-assistant/pull/11488 +[#11492]: https://github.com/home-assistant/home-assistant/pull/11492 +[#11497]: https://github.com/home-assistant/home-assistant/pull/11497 +[#11499]: https://github.com/home-assistant/home-assistant/pull/11499 +[#11504]: https://github.com/home-assistant/home-assistant/pull/11504 +[#11505]: https://github.com/home-assistant/home-assistant/pull/11505 +[#11506]: https://github.com/home-assistant/home-assistant/pull/11506 +[#11509]: https://github.com/home-assistant/home-assistant/pull/11509 +[#11510]: https://github.com/home-assistant/home-assistant/pull/11510 +[#11511]: https://github.com/home-assistant/home-assistant/pull/11511 +[#11513]: https://github.com/home-assistant/home-assistant/pull/11513 +[#11519]: https://github.com/home-assistant/home-assistant/pull/11519 +[#11520]: https://github.com/home-assistant/home-assistant/pull/11520 +[#11521]: https://github.com/home-assistant/home-assistant/pull/11521 +[#11522]: https://github.com/home-assistant/home-assistant/pull/11522 +[#11531]: https://github.com/home-assistant/home-assistant/pull/11531 +[#11534]: https://github.com/home-assistant/home-assistant/pull/11534 +[#11535]: https://github.com/home-assistant/home-assistant/pull/11535 +[#11538]: https://github.com/home-assistant/home-assistant/pull/11538 +[#11542]: https://github.com/home-assistant/home-assistant/pull/11542 +[#11545]: https://github.com/home-assistant/home-assistant/pull/11545 +[#11549]: https://github.com/home-assistant/home-assistant/pull/11549 +[#11553]: https://github.com/home-assistant/home-assistant/pull/11553 +[#11557]: https://github.com/home-assistant/home-assistant/pull/11557 +[#11560]: https://github.com/home-assistant/home-assistant/pull/11560 +[#11561]: https://github.com/home-assistant/home-assistant/pull/11561 +[#11563]: https://github.com/home-assistant/home-assistant/pull/11563 +[#11567]: https://github.com/home-assistant/home-assistant/pull/11567 +[#11571]: https://github.com/home-assistant/home-assistant/pull/11571 +[#11574]: https://github.com/home-assistant/home-assistant/pull/11574 +[#11578]: https://github.com/home-assistant/home-assistant/pull/11578 +[#11579]: https://github.com/home-assistant/home-assistant/pull/11579 +[#11583]: https://github.com/home-assistant/home-assistant/pull/11583 +[#11586]: https://github.com/home-assistant/home-assistant/pull/11586 +[#11587]: https://github.com/home-assistant/home-assistant/pull/11587 +[#11588]: https://github.com/home-assistant/home-assistant/pull/11588 +[#11590]: https://github.com/home-assistant/home-assistant/pull/11590 +[#11595]: https://github.com/home-assistant/home-assistant/pull/11595 +[#11596]: https://github.com/home-assistant/home-assistant/pull/11596 +[#11597]: https://github.com/home-assistant/home-assistant/pull/11597 +[#11600]: https://github.com/home-assistant/home-assistant/pull/11600 +[#11603]: https://github.com/home-assistant/home-assistant/pull/11603 +[#11609]: https://github.com/home-assistant/home-assistant/pull/11609 +[#11612]: https://github.com/home-assistant/home-assistant/pull/11612 +[#11622]: https://github.com/home-assistant/home-assistant/pull/11622 +[#11626]: https://github.com/home-assistant/home-assistant/pull/11626 +[@Chris-V]: https://github.com/Chris-V +[@ChristianKuehnel]: https://github.com/ChristianKuehnel +[@DanNixon]: https://github.com/DanNixon +[@Human]: https://github.com/Human +[@JackWindows]: https://github.com/JackWindows +[@JulianKahnert]: https://github.com/JulianKahnert +[@Julio-Guerra]: https://github.com/Julio-Guerra +[@Julius2342]: https://github.com/Julius2342 +[@KJonline]: https://github.com/KJonline +[@Kane610]: https://github.com/Kane610 +[@Klathmon]: https://github.com/Klathmon +[@Klikini]: https://github.com/Klikini +[@Laqoore]: https://github.com/Laqoore +[@OttoWinter]: https://github.com/OttoWinter +[@OverloadUT]: https://github.com/OverloadUT +[@PeWu]: https://github.com/PeWu +[@PhracturedBlue]: https://github.com/PhracturedBlue +[@ReneNulschDE]: https://github.com/ReneNulschDE +[@SteveEasley]: https://github.com/SteveEasley +[@abjorshammar]: https://github.com/abjorshammar +[@abondoe]: https://github.com/abondoe +[@akatrevorjay]: https://github.com/akatrevorjay +[@amelchio]: https://github.com/amelchio +[@andersonshatch]: https://github.com/andersonshatch +[@andreacampi]: https://github.com/andreacampi +[@andrey-git]: https://github.com/andrey-git +[@aosadchyy]: https://github.com/aosadchyy +[@armills]: https://github.com/armills +[@arsaboo]: https://github.com/arsaboo +[@awkwardDuck]: https://github.com/awkwardDuck +[@bachya]: https://github.com/bachya +[@bakedraccoon]: https://github.com/bakedraccoon +[@balloob]: https://github.com/balloob +[@camrun91]: https://github.com/camrun91 +[@cdce8p]: https://github.com/cdce8p +[@cgarwood]: https://github.com/cgarwood +[@cgtobi]: https://github.com/cgtobi +[@ciotlosm]: https://github.com/ciotlosm +[@cmsimike]: https://github.com/cmsimike +[@cnrd]: https://github.com/cnrd +[@cpcowart]: https://github.com/cpcowart +[@daenny]: https://github.com/daenny +[@danielhiversen]: https://github.com/danielhiversen +[@danielperna84]: https://github.com/danielperna84 +[@dfiel]: https://github.com/dfiel +[@dfinlay]: https://github.com/dfinlay +[@djchen]: https://github.com/djchen +[@ericpignet]: https://github.com/ericpignet +[@etsinko]: https://github.com/etsinko +[@fabaff]: https://github.com/fabaff +[@florianj1]: https://github.com/florianj1 +[@foxel]: https://github.com/foxel +[@frwickst]: https://github.com/frwickst +[@goldminenine]: https://github.com/goldminenine +[@goyney]: https://github.com/goyney +[@hawk259]: https://github.com/hawk259 +[@jbarrancos]: https://github.com/jbarrancos +[@jeroenterheerdt]: https://github.com/jeroenterheerdt +[@jesserockz]: https://github.com/jesserockz +[@kennedyshead]: https://github.com/kennedyshead +[@markferry]: https://github.com/markferry +[@masarliev]: https://github.com/masarliev +[@michaelkuty]: https://github.com/michaelkuty +[@nkgilley]: https://github.com/nkgilley +[@notoriousbdg]: https://github.com/notoriousbdg +[@pavoni]: https://github.com/pavoni +[@philk]: https://github.com/philk +[@pvizeli]: https://github.com/pvizeli +[@randellhodges]: https://github.com/randellhodges +[@rofrantz]: https://github.com/rofrantz +[@rwa]: https://github.com/rwa +[@ryanm101]: https://github.com/ryanm101 +[@schmittx]: https://github.com/schmittx +[@schnoetz]: https://github.com/schnoetz +[@swilson]: https://github.com/swilson +[@thibmaek]: https://github.com/thibmaek +[@timstanley1985]: https://github.com/timstanley1985 +[@tinloaf]: https://github.com/tinloaf +[@titilambert]: https://github.com/titilambert +[@tomaszduda23]: https://github.com/tomaszduda23 +[@tomwaters]: https://github.com/tomwaters +[@tschmidty69]: https://github.com/tschmidty69 +[@ttroy50]: https://github.com/ttroy50 +[@ulido]: https://github.com/ulido +[@veleek]: https://github.com/veleek +[@w1ll1am23]: https://github.com/w1ll1am23 +[@yienxu]: https://github.com/yienxu +[__init__ docs]: https://home-assistant.io/components/__init__/ +[alarm_control_panel.alarmdecoder docs]: https://home-assistant.io/components/alarm_control_panel.alarmdecoder/ +[alarm_control_panel.concord232 docs]: https://home-assistant.io/components/alarm_control_panel.concord232/ +[alarm_control_panel.egardia docs]: https://home-assistant.io/components/alarm_control_panel.egardia/ +[alarmdecoder docs]: https://home-assistant.io/components/alarmdecoder/ +[alexa.intent docs]: https://home-assistant.io/components/alexa.intent/ +[alexa.smart_home docs]: https://home-assistant.io/components/alexa.smart_home/ +[api docs]: https://home-assistant.io/components/api/ +[automation.state docs]: https://home-assistant.io/docs/automation/trigger/#state-trigger +[binary_sensor docs]: https://home-assistant.io/components/binary_sensor/ +[binary_sensor.alarmdecoder docs]: https://home-assistant.io/components/binary_sensor.alarmdecoder/ +[binary_sensor.concord232 docs]: https://home-assistant.io/components/binary_sensor.concord232/ +[binary_sensor.deconz docs]: https://home-assistant.io/components/binary_sensor.deconz/ +[binary_sensor.isy994 docs]: https://home-assistant.io/components/binary_sensor.isy994/ +[binary_sensor.knx docs]: https://home-assistant.io/components/binary_sensor.knx/ +[binary_sensor.rest docs]: https://home-assistant.io/components/binary_sensor.rest/ +[binary_sensor.template docs]: https://home-assistant.io/components/binary_sensor.template/ +[binary_sensor.threshold docs]: https://home-assistant.io/components/binary_sensor.threshold/ +[binary_sensor.trend docs]: https://home-assistant.io/components/binary_sensor.trend/ +[binary_sensor.workday docs]: https://home-assistant.io/components/binary_sensor.workday/ +[camera.doorbird docs]: https://home-assistant.io/components/camera.doorbird/ +[camera.uvc docs]: https://home-assistant.io/components/camera.uvc/ +[climate docs]: https://home-assistant.io/components/climate/ +[climate.daikin docs]: https://home-assistant.io/components/climate.daikin/ +[climate.demo docs]: https://home-assistant.io/components/climate.demo/ +[climate.econet docs]: https://home-assistant.io/components/climate.econet/ +[climate.generic_thermostat docs]: https://home-assistant.io/components/climate.generic_thermostat/ +[climate.hive docs]: https://home-assistant.io/components/climate.hive/ +[climate.homematic docs]: https://home-assistant.io/components/climate.homematic/ +[climate.knx docs]: https://home-assistant.io/components/climate.knx/ +[climate.netatmo docs]: https://home-assistant.io/components/climate.netatmo/ +[climate.sensibo docs]: https://home-assistant.io/components/climate.sensibo/ +[climate.tado docs]: https://home-assistant.io/components/climate.tado/ +[climate.touchline docs]: https://home-assistant.io/components/climate.touchline/ +[cloud docs]: https://home-assistant.io/components/cloud/ +[cloud.auth_api docs]: https://home-assistant.io/components/cloud.auth_api/ +[cloud.http_api docs]: https://home-assistant.io/components/cloud.http_api/ +[cloud.iot docs]: https://home-assistant.io/components/cloud.iot/ +[coinbase docs]: https://home-assistant.io/components/coinbase/ +[conversation docs]: https://home-assistant.io/components/conversation/ +[cover.isy994 docs]: https://home-assistant.io/components/cover.isy994/ +[cover.knx docs]: https://home-assistant.io/components/cover.knx/ +[cover.tahoma docs]: https://home-assistant.io/components/cover.tahoma/ +[cover.template docs]: https://home-assistant.io/components/cover.template/ +[cover.xiaomi_aqara docs]: https://home-assistant.io/components/cover.xiaomi_aqara/ +[deconz docs]: https://home-assistant.io/components/deconz/ +[device_tracker docs]: https://home-assistant.io/components/device_tracker/ +[device_tracker.asuswrt docs]: https://home-assistant.io/components/device_tracker.asuswrt/ +[device_tracker.bluetooth_le_tracker docs]: https://home-assistant.io/components/device_tracker.bluetooth_le_tracker/ +[device_tracker.bluetooth_tracker docs]: https://home-assistant.io/components/device_tracker.bluetooth_tracker/ +[device_tracker.gpslogger docs]: https://home-assistant.io/components/device_tracker.gpslogger/ +[device_tracker.owntracks docs]: https://home-assistant.io/components/device_tracker.owntracks/ +[device_tracker.ping docs]: https://home-assistant.io/components/device_tracker.ping/ +[device_tracker.snmp docs]: https://home-assistant.io/components/device_tracker.snmp/ +[device_tracker.tile docs]: https://home-assistant.io/components/device_tracker.tile/ +[digital_ocean docs]: https://home-assistant.io/components/digital_ocean/ +[fan.insteon_local docs]: https://home-assistant.io/components/fan.insteon_local/ +[fan.isy994 docs]: https://home-assistant.io/components/fan.isy994/ +[fan.xiaomi_miio docs]: https://home-assistant.io/components/fan.xiaomi_miio/ +[google_assistant docs]: https://home-assistant.io/components/google_assistant/ +[google_assistant.http docs]: https://home-assistant.io/components/google_assistant.http/ +[google_assistant.smart_home docs]: https://home-assistant.io/components/google_assistant.smart_home/ +[group docs]: https://home-assistant.io/components/group/ +[hassio docs]: https://home-assistant.io/components/hassio/ +[history docs]: https://home-assistant.io/components/history/ +[hive docs]: https://home-assistant.io/components/hive/ +[homematic docs]: https://home-assistant.io/components/homematic/ +[http docs]: https://home-assistant.io/components/http/ +[image_processing.opencv docs]: https://home-assistant.io/components/image_processing.opencv/ +[input_boolean docs]: https://home-assistant.io/components/input_boolean/ +[input_select docs]: https://home-assistant.io/components/input_select/ +[insteon_local docs]: https://home-assistant.io/components/insteon_local/ +[isy994 docs]: https://home-assistant.io/components/isy994/ +[knx docs]: https://home-assistant.io/components/knx/ +[light.deconz docs]: https://home-assistant.io/components/light.deconz/ +[light.greenwave docs]: https://home-assistant.io/components/light.greenwave/ +[light.hive docs]: https://home-assistant.io/components/light.hive/ +[light.hue docs]: https://home-assistant.io/components/light.hue/ +[light.iglo docs]: https://home-assistant.io/components/light.iglo/ +[light.insteon_local docs]: https://home-assistant.io/components/light.insteon_local/ +[light.isy994 docs]: https://home-assistant.io/components/light.isy994/ +[light.knx docs]: https://home-assistant.io/components/light.knx/ +[light.lifx docs]: https://home-assistant.io/components/light.lifx/ +[light.mqtt docs]: https://home-assistant.io/components/light.mqtt/ +[light.osramlightify docs]: https://home-assistant.io/components/light.osramlightify/ +[light.template docs]: https://home-assistant.io/components/light.template/ +[light.tplink docs]: https://home-assistant.io/components/light.tplink/ +[light.xiaomi_miio docs]: https://home-assistant.io/components/light.xiaomi_miio/ +[light.zha docs]: https://home-assistant.io/components/light.zha/ +[lock.isy994 docs]: https://home-assistant.io/components/lock.isy994/ +[media_extractor docs]: https://home-assistant.io/components/media_extractor/ +[media_player.cast docs]: https://home-assistant.io/components/media_player.cast/ +[media_player.kodi docs]: https://home-assistant.io/components/media_player.kodi/ +[media_player.monoprice docs]: https://home-assistant.io/components/media_player.monoprice/ +[media_player.plex docs]: https://home-assistant.io/components/media_player.plex/ +[media_player.squeezebox docs]: https://home-assistant.io/components/media_player.squeezebox/ +[media_player.yamaha docs]: https://home-assistant.io/components/media_player.yamaha/ +[modbus docs]: https://home-assistant.io/components/modbus/ +[notify.html5 docs]: https://home-assistant.io/components/notify.html5/ +[notify.pushbullet docs]: https://home-assistant.io/components/notify.pushbullet/ +[notify.webostv docs]: https://home-assistant.io/components/notify.webostv/ +[octoprint docs]: https://home-assistant.io/components/octoprint/ +[prometheus docs]: https://home-assistant.io/components/prometheus/ +[python_script docs]: https://home-assistant.io/components/python_script/ +[rainbird docs]: https://home-assistant.io/components/rainbird/ +[remember_the_milk docs]: https://home-assistant.io/components/remember_the_milk/ +[sensor.alpha_vantage docs]: https://home-assistant.io/components/sensor.alpha_vantage/ +[sensor.bitcoin docs]: https://home-assistant.io/components/sensor.bitcoin/ +[sensor.coinbase docs]: https://home-assistant.io/components/sensor.coinbase/ +[sensor.deconz docs]: https://home-assistant.io/components/sensor.deconz/ +[sensor.deutsche_bahn docs]: https://home-assistant.io/components/sensor.deutsche_bahn/ +[sensor.discogs docs]: https://home-assistant.io/components/sensor.discogs/ +[sensor.etherscan docs]: https://home-assistant.io/components/sensor.etherscan/ +[sensor.fido docs]: https://home-assistant.io/components/sensor.fido/ +[sensor.hydroquebec docs]: https://home-assistant.io/components/sensor.hydroquebec/ +[sensor.imap_email_content docs]: https://home-assistant.io/components/sensor.imap_email_content/ +[sensor.irish_rail_transport docs]: https://home-assistant.io/components/sensor.irish_rail_transport/ +[sensor.isy994 docs]: https://home-assistant.io/components/sensor.isy994/ +[sensor.knx docs]: https://home-assistant.io/components/sensor.knx/ +[sensor.luftdaten docs]: https://home-assistant.io/components/sensor.luftdaten/ +[sensor.metoffice docs]: https://home-assistant.io/components/sensor.metoffice/ +[sensor.miflora docs]: https://home-assistant.io/components/sensor.miflora/ +[sensor.mqtt docs]: https://home-assistant.io/components/sensor.mqtt/ +[sensor.openweathermap docs]: https://home-assistant.io/components/sensor.openweathermap/ +[sensor.plex docs]: https://home-assistant.io/components/sensor.plex/ +[sensor.rainbird docs]: https://home-assistant.io/components/sensor.rainbird/ +[sensor.snmp docs]: https://home-assistant.io/components/sensor.snmp/ +[sensor.sochain docs]: https://home-assistant.io/components/sensor.sochain/ +[sensor.statistics docs]: https://home-assistant.io/components/sensor.statistics/ +[sensor.steam_online docs]: https://home-assistant.io/components/sensor.steam_online/ +[sensor.swiss_public_transport docs]: https://home-assistant.io/components/sensor.swiss_public_transport/ +[sensor.systemmonitor docs]: https://home-assistant.io/components/sensor.systemmonitor/ +[sensor.tado docs]: https://home-assistant.io/components/sensor.tado/ +[sensor.template docs]: https://home-assistant.io/components/sensor.template/ +[sensor.transmission docs]: https://home-assistant.io/components/sensor.transmission/ +[sensor.xbox_live docs]: https://home-assistant.io/components/sensor.xbox_live/ +[sensor.zoneminder docs]: https://home-assistant.io/components/sensor.zoneminder/ +[snips docs]: https://home-assistant.io/components/snips/ +[switch.insteon_local docs]: https://home-assistant.io/components/switch.insteon_local/ +[switch.isy994 docs]: https://home-assistant.io/components/switch.isy994/ +[switch.knx docs]: https://home-assistant.io/components/switch.knx/ +[switch.mochad docs]: https://home-assistant.io/components/switch.mochad/ +[switch.rainbird docs]: https://home-assistant.io/components/switch.rainbird/ +[switch.rpi_rf docs]: https://home-assistant.io/components/switch.rpi_rf/ +[switch.snmp docs]: https://home-assistant.io/components/switch.snmp/ +[switch.template docs]: https://home-assistant.io/components/switch.template/ +[switch.tplink docs]: https://home-assistant.io/components/switch.tplink/ +[switch.transmission docs]: https://home-assistant.io/components/switch.transmission/ +[switch.xiaomi_miio docs]: https://home-assistant.io/components/switch.xiaomi_miio/ +[tahoma docs]: https://home-assistant.io/components/tahoma/ +[telegram_bot docs]: https://home-assistant.io/components/telegram_bot/ +[timer docs]: https://home-assistant.io/components/timer/ +[tts.baidu docs]: https://home-assistant.io/components/tts.baidu/ +[tts.marytts docs]: https://home-assistant.io/components/tts.marytts/ +[updater docs]: https://home-assistant.io/components/updater/ +[vacuum.xiaomi_miio docs]: https://home-assistant.io/components/vacuum.xiaomi_miio/ +[weather.darksky docs]: https://home-assistant.io/components/weather.darksky/ +[weather.openweathermap docs]: https://home-assistant.io/components/weather.openweathermap/ +[weather.yweather docs]: https://home-assistant.io/components/weather.yweather/ +[websocket_api docs]: https://home-assistant.io/components/websocket_api/ +[wemo docs]: https://home-assistant.io/components/wemo/ +[zigbee docs]: https://home-assistant.io/components/zigbee/ diff --git a/source/images/blog/2018-01-0.61/components.png b/source/images/blog/2018-01-0.61/components.png new file mode 100644 index 0000000000000000000000000000000000000000..8f03dfe6b70bf2b2e071afb83f82449b15e56767 GIT binary patch literal 106189 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

pxK|IDl{Qx*}gfNrC>D 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 literal 0 HcmV?d00001 From dcac44041bfc8036a04c7e29567bf334214d0e3a Mon Sep 17 00:00:00 2001 From: Simon Date: Mon, 15 Jan 2018 16:19:17 +0100 Subject: [PATCH 086/993] Update hass-configurator.markdown (#4420) * Update hass-configurator.markdown add wget line * Minor changes --- source/_docs/ecosystem/hass-configurator.markdown | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/_docs/ecosystem/hass-configurator.markdown b/source/_docs/ecosystem/hass-configurator.markdown index 6e8c30f7d3..d88d4a2d7f 100644 --- a/source/_docs/ecosystem/hass-configurator.markdown +++ b/source/_docs/ecosystem/hass-configurator.markdown @@ -39,14 +39,14 @@ Consider running the configurator as a user with limited privileges to limit pos ### {% linkable_title Installation (Linux, OS X) %} There are no dependencies on Python modules that are not part of the standard library. And all the fancy JavaScript libraries are loaded from CDN (which means this doesn't work when you're offline). -- Copy [configurator.py](https://github.com/danielperna84/hass-configurator/blob/master/configurator.py) to your Home Assistant configuration directory (e.g /home/homeassistant/.homeassistant) +- Copy [configurator.py](https://github.com/danielperna84/hass-configurator/blob/master/configurator.py) to your Home Assistant configuration directory (e.g `/home/homeassistant/.homeassistant`): `wget https://raw.githubusercontent.com/danielperna84/hass-configurator/master/configurator.py` - Make it executable: `sudo chmod 755 configurator.py` - (Optional) Set the `GIT` variable in configurator.py to `True` if [GitPython](https://gitpython.readthedocs.io/) is installed on your system. This is required if you want to make use of the Git integration. - Execute it: `sudo ./configurator.py` - To terminate the process do the usual `CTRL+C`, maybe once or twice ### {% linkable_title Configuration %} -Near the top of the configurator.py-file you will find some global variables you can change to customize the configurator. If you are unfamiliar with Python: when setting variables of the type _string_, you have to write that within quotation marks. The default settings are fine for just checking out the configurator quickly. With more customized setups you should change some settings though. +Near the top of the `configurator.py`-file you will find some global variables you can change to customize the configurator. If you are unfamiliar with Python: when setting variables of the type _string_, you have to write that within quotation marks. The default settings are fine for just checking out the configurator quickly. With more customized setups you should change some settings though. To keep your settings across updates it is also possible to save settings in an external file. In that case copy [settings.conf](https://github.com/danielperna84/hass-configurator/blob/master/settings.conf) wherever you like and append the full path to the file to the command when starting the configurator. E.g. `sudo .configurator.py /home/homeassistant/.homeassistant/mysettings.conf`. This file is in JSON format. So make sure it has a valid syntax (you can set the editor to JSON to get syntax highlighting for the settings). The major difference to the settings in the py-file is, that `None` becomes `null`. #### LISTENIP (string) From 29cff64e143a18b5ba16b7d9b348187b0f55d6db Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Mon, 15 Jan 2018 17:32:07 +0100 Subject: [PATCH 087/993] Add section about file permissions --- source/developers/maintenance.markdown | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/source/developers/maintenance.markdown b/source/developers/maintenance.markdown index 182aba26bc..4995e7de51 100644 --- a/source/developers/maintenance.markdown +++ b/source/developers/maintenance.markdown @@ -28,6 +28,10 @@ To fix the line separator, use `dos2unix` or `sed`. $ dos2unix homeassistant/components/notify/kodi.py ``` +### {% linkable_title File permissions %} + +Most files don't need to the be executable. `0644` is fine. + ### {% linkable_title Dependencies %} A lot of components and platforms depends on third-party Python modules. The dependencies which are stored in the `requirements_*.txt` files are tracked by [gemnasium](https://gemnasium.com/github.com/home-assistant/home-assistant) and [Requires.io](https://requires.io/github/home-assistant/home-assistant/requirements/?branch=dev). From 1b1fcb555879cbf002955e85e2b911b657fbe4be Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Mon, 15 Jan 2018 19:20:11 +0100 Subject: [PATCH 088/993] Add sender (#4422) --- source/_components/notify.clicksend.markdown | 32 +++++++++++++++----- 1 file changed, 24 insertions(+), 8 deletions(-) diff --git a/source/_components/notify.clicksend.markdown b/source/_components/notify.clicksend.markdown index 96a43adfe1..e7eb8acc81 100644 --- a/source/_components/notify.clicksend.markdown +++ b/source/_components/notify.clicksend.markdown @@ -18,10 +18,10 @@ The `clicksend` platform uses [ClickSend](https://clicksend.com) to deliver noti ### Get your ClickSend API Credentials Go to your [ClickSend Dashboard](https://dashboard.clicksend.com) section and create your new project. After creating your project, you should now be able to obtain your `username` and `api_key`. -### Configuration To add ClickSend to your installation, add the following to your Home Assistant `configuration.yaml` file: ```yaml +# Example configuration.yaml entry notify: - platform: clicksend name: ClickSend @@ -30,12 +30,28 @@ notify: recipient: PHONE_NO ``` -Configuration variables: - -* **name** (Optional): Setting the optional parameter name allows multiple notifiers to be created. The default value is `ClickSend`. The notifier will bind to the service notify.NOTIFIER_NAME. -* **username** (Required): Your `Username`. -* **api_key** (Required): Your `API Key`. -* **recipient** (Required): Your phone no. This is where you want to send your notification SMS messages. eg: `09171234567` - +{% configuration %} +name: + description: "Setting the optional parameter name allows multiple notifiers to be created. The default value is `ClickSend`. The notifier will bind to the service `notify.NOTIFIER_NAME`." + required: false + type: string +username: + description: Your Clicksend username. + required: true + type: string +api_key: + description: Your Clicksend API Key. + required: true + type: string +recipient: + description: "Your phone number. This is where you want to send your notification SMS messages, e.g., `09171234567`." + required: true + type: string +sender: + description: The name or number of the sender. + required: false + type: string + default: recipient +{% endconfiguration %} To use notifications, please see the [getting started with automation page](https://home-assistant.io/getting-started/automation/). From fa914ad4214a8896b37cac970ef0eb1520dc500b Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Mon, 15 Jan 2018 13:40:05 -0800 Subject: [PATCH 089/993] Clarify google_assistant type --- source/_components/google_assistant.markdown | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/_components/google_assistant.markdown b/source/_components/google_assistant.markdown index 3b28d438f5..f8bbe65f3a 100644 --- a/source/_components/google_assistant.markdown +++ b/source/_components/google_assistant.markdown @@ -41,7 +41,7 @@ google_assistant: aliases: - bright lights - entry lights - type: 'action.devices.types.LIGHT' + type: light light.living_room: expose: false ``` @@ -102,7 +102,7 @@ entity_config: required: false type: list type: - description: Override the type of the entity in Google Assistant. [List of available types](https://developers.google.com/actions/smarthome/guides/) + description: Override the domain how Google Assistant has to interpretet the entity. For example, set to `light` for a switch entity to have it be handeld as a light. required: false type: string {% endconfiguration %} From 100eaa4a23f348d986dfdf38562211a7e987db22 Mon Sep 17 00:00:00 2001 From: angel12 Date: Mon, 15 Jan 2018 15:09:46 -0700 Subject: [PATCH 090/993] Include Smart Dimmer Switch (#4111) Update documentation to include the Smart Dimmer Switch --- source/_components/light.wemo.markdown | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/_components/light.wemo.markdown b/source/_components/light.wemo.markdown index a2ff553aad..df44818d04 100644 --- a/source/_components/light.wemo.markdown +++ b/source/_components/light.wemo.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Belkin WeMo Lights" -description: "Instructions how to integrate Belkin WeMo LED lights into Home Assistant." +description: "Instructions how to integrate Belkin WeMo LED lights and WeMo Dimmer Switch into Home Assistant." date: 2016-02-20 00:45 sidebar: true comments: false @@ -14,7 +14,7 @@ ha_release: 0.14 --- -The `wemo` platform allows you to control your [Belkin WeMo](http://www.belkin.com/us/p/P-F5Z0489/) LED lights from within Home Assistant. +The `wemo` platform allows you to control your Belkin WeMo [LED lights](http://www.belkin.com/us/p/P-F5Z0489/) and [Smart Dimmer Switch](http://www.belkin.com/us/F7C059-Belkin/p/P-F7C059/) from within Home Assistant. They will be automatically discovered if the discovery component is enabled. From aa24838365e50be4bf088edd1ed21b989f8a6bfc Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Mon, 15 Jan 2018 14:16:32 -0800 Subject: [PATCH 091/993] Update release61 notes --- source/_posts/2018-01-14-release-61.markdown | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/source/_posts/2018-01-14-release-61.markdown b/source/_posts/2018-01-14-release-61.markdown index 230b737f83..fea6ad4243 100644 --- a/source/_posts/2018-01-14-release-61.markdown +++ b/source/_posts/2018-01-14-release-61.markdown @@ -17,8 +17,13 @@ Almost a 100 contributors to this release 🎉 That's what you get when you ski This release contain some breaking changes. Please make sure that you check the section below if you are running into trouble. -There is not much more to tell and I don't want to make something up. +## {% linkable_title Assistant configs %} +We made a mistake in the foundation of both the Google Assistant and Alexa integrations: they were storing their config inside customize. This is not the right place and we moved them to be under the components itself. See the breaking changes section on how to migrate. + +## {% linkable_title Hass.io updates %} + +Pascal has made it easier to create and restore snapshots for Hass.io by calling the new services. This way it will be easy to automate the creation of a snapshot at night. The updater has also been fixed and will now report on new versions of Hass.io that are available. ## {% linkable_title New Platforms %} From 15f53cddd4daae4a9562d85a677a5ca74bf28c81 Mon Sep 17 00:00:00 2001 From: iliketoprogram14 Date: Tue, 16 Jan 2018 00:12:04 -0800 Subject: [PATCH 092/993] Updated sensor.template example (#4428) Removed entity_id from sensor.template example, entity_id was deprecated for template platforms with release 0.61 (issue #11123). --- source/_components/sensor.template.markdown | 1 - 1 file changed, 1 deletion(-) diff --git a/source/_components/sensor.template.markdown b/source/_components/sensor.template.markdown index 34d255184a..3c865a2ee2 100644 --- a/source/_components/sensor.template.markdown +++ b/source/_components/sensor.template.markdown @@ -27,7 +27,6 @@ sensor: sensors: solar_angle: friendly_name: "Sun angle" - entity_id: sun.sun unit_of_measurement: 'degrees' value_template: "{{ states.sun.sun.attributes.elevation }}" From d656fec50a34283bae0ee1b03d799af2a4891f12 Mon Sep 17 00:00:00 2001 From: karlkar Date: Tue, 16 Jan 2018 09:24:29 +0100 Subject: [PATCH 093/993] Addrd extra arguments to onvif config (#4425) --- source/_components/camera.onvif.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/camera.onvif.markdown b/source/_components/camera.onvif.markdown index 9c48b6b424..0cfa7cf453 100644 --- a/source/_components/camera.onvif.markdown +++ b/source/_components/camera.onvif.markdown @@ -31,6 +31,6 @@ Configuration variables: - **username** (*Optional*): The username for the camera. - **password** (*Optional*): The password for the camera. - **port** (*Optional*): The port for the camera. This defaults to 5000 - +- **extra_arguments** (*Optional*): Extra options to pass to `ffmpeg`, e.g. image quality or video filter options. More details in [FFmpeg component](/components/ffmpeg). If you are running into trouble with this sensor, please refer to the [Troubleshooting section](/components/ffmpeg/#troubleshooting). From efb356801ea7040bd7c15ada2a811c69064edeca Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Tue, 16 Jan 2018 09:24:52 +0100 Subject: [PATCH 094/993] Enable probot move (#4427) --- .github/move.yml | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 .github/move.yml diff --git a/.github/move.yml b/.github/move.yml new file mode 100644 index 0000000000..e041083c9a --- /dev/null +++ b/.github/move.yml @@ -0,0 +1,13 @@ +# Configuration for move-issues - https://github.com/dessant/move-issues + +# Delete the command comment. Ignored when the comment also contains other content +deleteCommand: true +# Close the source issue after moving +closeSourceIssue: true +# Lock the source issue after moving +lockSourceIssue: false +# Set custom aliases for targets +# aliases: +# r: repo +# or: owner/repo + From 0b09c4edc374b92320a42662e5e354c7c1b1ca01 Mon Sep 17 00:00:00 2001 From: DubhAd Date: Tue, 16 Jan 2018 20:18:12 +0000 Subject: [PATCH 095/993] Removed relative_time (#4423) Apparently it was removed some time ago (bug from 0.30.1 saying it didn't work then), but the docs weren't updated. --- source/_docs/configuration/templating.markdown | 1 - 1 file changed, 1 deletion(-) diff --git a/source/_docs/configuration/templating.markdown b/source/_docs/configuration/templating.markdown index 40feade247..a0d56a158a 100644 --- a/source/_docs/configuration/templating.markdown +++ b/source/_docs/configuration/templating.markdown @@ -75,7 +75,6 @@ Home Assistant adds extensions to allow templates to access all of the current s - `as_timestamp()` will convert datetime object or string to UNIX timestamp - `distance()` will measure the distance in meters between home, entity, coordinates. - `closest()` will find the closest entity. -- `relative_time(timestamp)` will format the date time as relative time vs now (ie 7 seconds) - `float` will format the output as float. - `strptime(string, format)` will parse a string to a datetime based on a [format][strp-format]. - `log(value, base)` will take the logarithm of the input. When the base is omitted, it defaults to `e` - the natural logarithm. Can also be used as a filter. From 26ad2e256c4b049eb4a26fdc82804d1849ae2c8b Mon Sep 17 00:00:00 2001 From: Bob Anderson Date: Tue, 16 Jan 2018 12:21:59 -0800 Subject: [PATCH 096/993] Explain history order config flag (#4426) * add note and example for new history configuration flag to use include order * use better example entities --- source/_components/history.markdown | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/source/_components/history.markdown b/source/_components/history.markdown index 4bddad4fbb..b252d3b205 100644 --- a/source/_components/history.markdown +++ b/source/_components/history.markdown @@ -87,6 +87,21 @@ history: - sensor.date ``` +If you'd like the order of display of the sensors to follow the way +they are listed in the included entity list, you can set the flag +`use_include_order` to True. + +```yaml +# Example configuration.yaml entry using specified entity display order +history: + use_include_order: True + include: + entities: + - sun.sun + - light.front_porch +``` + + #### {% linkable_title Implementation details %} The history is stored in a SQLite database `home-assistant_v2.db` within your configuration directory if the `recorder` component is not set up differently. From 846b8cff825b21c928a07a634c49a9994f1d51a1 Mon Sep 17 00:00:00 2001 From: Anders Melchiorsen Date: Tue, 16 Jan 2018 23:49:37 +0100 Subject: [PATCH 097/993] Move several local services to their right domain (#4424) --- source/_components/calendar.todoist.markdown | 2 +- source/_components/sensor.mopar.markdown | 2 +- source/_components/switch.broadlink.markdown | 8 ++++---- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/source/_components/calendar.todoist.markdown b/source/_components/calendar.todoist.markdown index 65401ebc64..00bdca07f7 100644 --- a/source/_components/calendar.todoist.markdown +++ b/source/_components/calendar.todoist.markdown @@ -109,7 +109,7 @@ Home Assistant does its best to determine what task in each project is "most" im ### {% linkable_title Services %} -Todoist also comes with access to a service, `todoist.new_task`. This service can be used to create a new Todoist task. You can specify labels and a project, or you can leave them blank, and the task will go to your "Inbox" project. +Todoist also comes with access to a service, `calendar.todoist_new_task`. This service can be used to create a new Todoist task. You can specify labels and a project, or you can leave them blank, and the task will go to your "Inbox" project. Here's an example JSON payload: diff --git a/source/_components/sensor.mopar.markdown b/source/_components/sensor.mopar.markdown index eef49e8f63..3357ae9193 100644 --- a/source/_components/sensor.mopar.markdown +++ b/source/_components/sensor.mopar.markdown @@ -39,7 +39,7 @@ Configuration options for the Mopar sensor: ## {% linkable_title Service %} -Call the `mopar.remote_command` service to perform a remote command on your vehicle. +Call the `sensor.mopar_remote_command` service to perform a remote command on your vehicle. - **vehicle_index** (*Required*): `vehicle_index` attribute found on sensor. - **command** (*Required*): One of `lock/unlock/engineon/engineoff/horn`. diff --git a/source/_components/switch.broadlink.markdown b/source/_components/switch.broadlink.markdown index 8f733a6445..f63297eed5 100644 --- a/source/_components/switch.broadlink.markdown +++ b/source/_components/switch.broadlink.markdown @@ -48,7 +48,7 @@ Information about how to install on Windows can be found [here](https://home-ass ### {% linkable_title How to obtain IR/RF packets? %} -Choose Call Service from the Developer Tools. Choose the service broadlink/learn_command from the list of **Available services:** and hit **CALL SERVICE**. Press the button on your remote with in 20 seconds. The packet will be printed as a persistent notification in the States page of the web interface. +Choose Call Service from the Developer Tools. Choose the service `switch.broadlink_learn_command` from the list of **Available services:** and hit **CALL SERVICE**. Press the button on your remote with in 20 seconds. The packet will be printed as a persistent notification in the States page of the web interface. Example config for `rm`, `rm2`, `rm_mini`, `rm_pro_phicomm`, `rm2_home_plus`, `rm2_home_plus_gdt`, `rm2_pro_plus`, `rm2_pro_plus2`, `rm2_pro_plus_bl` and `rm_mini_shate` devices: @@ -126,9 +126,9 @@ switch: slot_4: 'Speaker slot' ``` -### {% linkable_title Service `send_packet` %} +### {% linkable_title Service `broadlink_send_packet` %} -You can use the service broadlink/send_packet to directly send IR packets without the need to assign a switch entity for each command. +You can use the service `switch.broadlink_send_packet` to directly send IR packets without the need to assign a switch entity for each command. | Service data attribute | Optional | Description | | ---------------------- | -------- | ----------- | @@ -140,7 +140,7 @@ Example: script: tv_select_source: sequence: - - service: broadlink.send_packet_192_168_0_107 + - service: switch.broadlink_send_packet_192_168_0_107 data: packet: - "JgCMAJSSFDYUNhQ2FBEUERQRFBEUERQ2FDYUNhQRFBEUERQRFBEUERQRFDYUERQRFBEUERQRFDYUNhQRFDYUNhQ2FDYUNhQABfWUkhQ2FDYUNhQRFBEUERQRFBEUNhQ2FDYUERQRFBEUERQRFBEUERQ2FBEUERQRFBEUERQ2FDYUERQ2FDYUNhQ2FDYUAA0FAAAAAAAAAAAAAAAA" From 59fc51eb5901a555713556fa27b176dd469b335c Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Tue, 16 Jan 2018 14:55:44 -0800 Subject: [PATCH 098/993] Release 0.61.1 --- _config.yml | 6 +- source/_posts/2018-01-14-release-61.markdown | 64 +++++++++++++++++++- 2 files changed, 65 insertions(+), 5 deletions(-) diff --git a/_config.yml b/_config.yml index f05fc66aca..fb491ec479 100644 --- a/_config.yml +++ b/_config.yml @@ -140,11 +140,11 @@ social: # Home Assistant release details current_major_version: 0 current_minor_version: 61 -current_patch_version: 0 -date_released: 2018-01-14 +current_patch_version: 1 +date_released: 2018-01-16 # Either # or the anchor link to latest release notes in the blog post. # Must be prefixed with a # and have double quotes around it. # Major release: -patch_version_notes: "#" +patch_version_notes: "#release-0611---january-16" # Minor release (Example #release-0431---april-25): diff --git a/source/_posts/2018-01-14-release-61.markdown b/source/_posts/2018-01-14-release-61.markdown index fea6ad4243..f83e933ee7 100644 --- a/source/_posts/2018-01-14-release-61.markdown +++ b/source/_posts/2018-01-14-release-61.markdown @@ -23,7 +23,23 @@ We made a mistake in the foundation of both the Google Assistant and Alexa integ ## {% linkable_title Hass.io updates %} -Pascal has made it easier to create and restore snapshots for Hass.io by calling the new services. This way it will be easy to automate the creation of a snapshot at night. The updater has also been fixed and will now report on new versions of Hass.io that are available. +[@pvizeli] has made it easier to create and restore snapshots for Hass.io by calling the new services. This way it will be easy to automate the creation of a snapshot at night. The updater has also been fixed and will now report on new versions of Hass.io that are available. + +## {% linkable_title Improved loading speed %} + +[@amelchio] has made startup of Home Assistant _even_ faster. All service descriptions are now loaded only when needed by the frontend instead of during startup. This did mean that we had to enforce our service convention. We found a few platforms that didn't follow this and they have been updated: + +```text +todoist.new_task -> calendar.todoist_new_task + +snapcast.snapcast_snapshot -> media_player.snapcast_snapshot +snapcast.snapcast_restore -> media_player.snapcast_restore + +mopar.remote_command -> sensor.mopar_remote_command + +broadlink.learn_command_192_168_0_107 -> switch.broadlink_learn_command_192_168_0_107 +broadlink.send_packet_192_168_0_107 -> switch.broadlink_send_packet_192_168_0_107 +``` ## {% linkable_title New Platforms %} @@ -39,6 +55,14 @@ Pascal has made it easier to create and restore snapshots for Hass.io by calling - Add Dark Sky weather component ([@DanNixon] - [#11435]) ([weather.darksky docs]) (new-platform) - Coinbase.com sensor platform ([@nkgilley] - [#11036]) ([coinbase docs]) ([sensor.coinbase docs]) (new-platform) +## {% linkable_title Release 0.61.1 - January 16 %} + +- Fix zha color probe ([@rcloran] - [#11670]) ([zha docs]) ([light.zha docs]) +- Move several local services to their right domain ([@amelchio] - [#11677]) ([calendar.todoist docs]) ([media_player.snapcast docs]) ([media_player.soundtouch docs]) ([sensor.mopar docs]) ([switch.broadlink docs]) ([switch.scsgate docs]) (breaking change) +- Rfxtrx fix ([@danielhiversen] - [#11678]) ([rfxtrx docs]) ([binary_sensor.rfxtrx docs]) +- History order bugfix and opt-in option ([@rwa] - [#11686]) ([history docs]) +- Fix purge with MariaDB / MySQL ([@tinloaf] - [#11713]) + ## {% linkable_title If you need help... %} ...don't hesitate to use our very active [forums](https://community.home-assistant.io/) or join us for a little [chat](https://discord.gg/c5DvZ4e). The release notes have comments enabled but it's preferred if you use the former communication channels. Thanks. @@ -119,7 +143,22 @@ Note however, that this feature was replaced by a new ignore_string config optio type: light ``` ([@balloob] - [#11499]) ([cloud docs]) ([google_assistant docs]) (breaking change) -- The `climate.set_aux_heat` service is no longer available for the Sensibo cliamte platform. Now call `climate.turn_on` or `climate.turn_off`. ([@andrey-git] - [#11579]) ([climate.sensibo docs]) (breaking change) +- The `climate.set_aux_heat` service is no longer available for the Sensibo climate platform. Now call `climate.turn_on` or `climate.turn_off`. ([@andrey-git] - [#11579]) ([climate.sensibo docs]) (breaking change) +- Release 0.61.0 introduced a lazy service loading strategy that relied on all components and platforms following our naming convention. After the release we realized that not all services did, which have been addressed by this fix. This results in certain services changing names: + + ``` + todoist.new_task -> calendar.todoist_new_task + + snapcast.snapcast_snapshot -> media_player.snapcast_snapshot + snapcast.snapcast_restore -> media_player.snapcast_restore + + mopar.remote_command -> sensor.mopar_remote_command + + broadlink.learn_command_192_168_0_107 -> switch.broadlink_learn_command_192_168_0_107 + broadlink.send_packet_192_168_0_107 -> switch.broadlink_send_packet_192_168_0_107 + ``` + ([@amelchio] - [#11677]) ([calendar.todoist docs]) ([media_player.snapcast docs]) ([media_player.soundtouch docs]) ([sensor.mopar docs]) ([switch.broadlink docs]) ([switch.scsgate docs]) (breaking change) + ## {% linkable_title All changes %} @@ -735,3 +774,24 @@ Note however, that this feature was replaced by a new ignore_string config optio [websocket_api docs]: https://home-assistant.io/components/websocket_api/ [wemo docs]: https://home-assistant.io/components/wemo/ [zigbee docs]: https://home-assistant.io/components/zigbee/ +[#11670]: https://github.com/home-assistant/home-assistant/pull/11670 +[#11677]: https://github.com/home-assistant/home-assistant/pull/11677 +[#11678]: https://github.com/home-assistant/home-assistant/pull/11678 +[#11686]: https://github.com/home-assistant/home-assistant/pull/11686 +[#11713]: https://github.com/home-assistant/home-assistant/pull/11713 +[@amelchio]: https://github.com/amelchio +[@danielhiversen]: https://github.com/danielhiversen +[@rcloran]: https://github.com/rcloran +[@rwa]: https://github.com/rwa +[@tinloaf]: https://github.com/tinloaf +[binary_sensor.rfxtrx docs]: https://home-assistant.io/components/binary_sensor.rfxtrx/ +[calendar.todoist docs]: https://home-assistant.io/components/calendar.todoist/ +[history docs]: https://home-assistant.io/components/history/ +[light.zha docs]: https://home-assistant.io/components/light.zha/ +[media_player.snapcast docs]: https://home-assistant.io/components/media_player.snapcast/ +[media_player.soundtouch docs]: https://home-assistant.io/components/media_player.soundtouch/ +[rfxtrx docs]: https://home-assistant.io/components/rfxtrx/ +[sensor.mopar docs]: https://home-assistant.io/components/sensor.mopar/ +[switch.broadlink docs]: https://home-assistant.io/components/switch.broadlink/ +[switch.scsgate docs]: https://home-assistant.io/components/switch.scsgate/ +[zha docs]: https://home-assistant.io/components/zha/ From 8eb7643a658ee8b9e45daf660dd70fcf292fce5c Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Tue, 16 Jan 2018 22:41:36 -0800 Subject: [PATCH 099/993] Update timer.markdown --- source/_components/timer.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/timer.markdown b/source/_components/timer.markdown index 505aeacdb2..b04e480aca 100644 --- a/source/_components/timer.markdown +++ b/source/_components/timer.markdown @@ -25,7 +25,7 @@ To add a timer to your installation, add the following to your `configuration.ya ```yaml # Example configuration.yaml entry timer: - timer: + laundry: duration: '00:01:00' ``` From 978d901f71da0d83c93990d56d81e944a42dc482 Mon Sep 17 00:00:00 2001 From: DubhAd Date: Wed, 17 Jan 2018 07:01:47 +0000 Subject: [PATCH 100/993] Typo fix (#4437) Missing comma, now found and restored to its rightful place --- source/_docs/z-wave/adding.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_docs/z-wave/adding.markdown b/source/_docs/z-wave/adding.markdown index 2c1cef428a..04c01cc927 100644 --- a/source/_docs/z-wave/adding.markdown +++ b/source/_docs/z-wave/adding.markdown @@ -35,7 +35,7 @@ A valid network key will be a 16 byte value, defined in the zwave section of you ``` zwave: usb_path: /dev/ttyACM0 - network_key: "0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F 0x10" + network_key: "0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x10" ``` Each individual value in the defined key can be anywhere from 0x00 to 0xFF. Define your own key by making changes to the above example key or for additional security try one of the two scripts mentioned below. From 0d754a62994769908daf2655f1c3d1228b248026 Mon Sep 17 00:00:00 2001 From: nicxvan Date: Wed, 17 Jan 2018 02:03:42 -0500 Subject: [PATCH 101/993] Add text about serial option for z stick operation (#4440) * Add text about serial option for z stick operation * Fixing naming conventions to match brand names * Fix name --- source/_docs/z-wave/installation.markdown | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/source/_docs/z-wave/installation.markdown b/source/_docs/z-wave/installation.markdown index 15b87957cb..d5bdbae4c9 100644 --- a/source/_docs/z-wave/installation.markdown +++ b/source/_docs/z-wave/installation.markdown @@ -25,7 +25,11 @@ $ sudo /Applications/Python\ x.x/Install\ Certificates.command ```

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

+ +

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

## {% linkable_title Configuration %} From 7b20739182fb41d3af0e52606b804fc8a28806f0 Mon Sep 17 00:00:00 2001 From: Antony Messerli Date: Wed, 17 Jan 2018 01:04:27 -0600 Subject: [PATCH 102/993] Adds KU6290 to tested Samsung TV models (#4441) --- 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 f64277c404..c743a69269 100644 --- a/source/_components/media_player.samsungtv.markdown +++ b/source/_components/media_player.samsungtv.markdown @@ -56,6 +56,7 @@ Currently known supported models: - U6300 (port must be set to 8001, and `pip3 install websocket-client` must be executed) - K6500AF (port must be set to 8001) - KS8005 (port must be set to 8001, and `pip3 install websocket-client` must be executed) +- KU6290 (port must be set to 8001) - MU6170UXZG (port must be set to 8001, and `pip3 install websocket-client` must be executed) - KS7502 (port must be set to 8001, and `pip3 install websocket-client` must be executed, turn on doesn't work, turn off works fine) - K5600AK (partially supported, turn on works but state is not updated) From 6fbbb019ba5d5f1664d88d918f6d4a63cd2caba2 Mon Sep 17 00:00:00 2001 From: Collin Allen Date: Tue, 16 Jan 2018 23:04:48 -0800 Subject: [PATCH 103/993] Fix typo in index.markdown (#4435) Corrects `utlimate` to `ultimate`. --- source/getting-started/index.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/getting-started/index.markdown b/source/getting-started/index.markdown index 6b7620b287..00af92bbd0 100644 --- a/source/getting-started/index.markdown +++ b/source/getting-started/index.markdown @@ -9,7 +9,7 @@ sharing: true footer: true --- -The goal of this getting started guide is to install Hass.io on a Raspberry Pi 3. Hass.io is our own all in one solution that turns your Raspberry PI into the utlimate home automation hub. +The goal of this getting started guide is to install Hass.io on a Raspberry Pi 3. Hass.io is our own all in one solution that turns your Raspberry PI into the ultimate home automation hub. Follow this guide if you want to easily get started with Home Assistant, or if you have no or little Linux experience. For advanced users, check our [alternative installation methods](/docs/installation/). From f8ab881dd4f0c1b7d2aac7799808d41d46148d39 Mon Sep 17 00:00:00 2001 From: Sean Dague Date: Wed, 17 Jan 2018 02:05:37 -0500 Subject: [PATCH 104/993] Added mychevy docs (#4410) * Added mychevy docs * :pencil2: Update ha_release * :pencil2: Removed configuration variables header --- source/_components/mychevy.markdown | 73 +++++++++++++++++++++++ source/images/supported_brands/chevy.png | Bin 0 -> 27477 bytes 2 files changed, 73 insertions(+) create mode 100644 source/_components/mychevy.markdown create mode 100644 source/images/supported_brands/chevy.png diff --git a/source/_components/mychevy.markdown b/source/_components/mychevy.markdown new file mode 100644 index 0000000000..64584db11d --- /dev/null +++ b/source/_components/mychevy.markdown @@ -0,0 +1,73 @@ +--- +layout: page +title: "MyChevy" +description: "Instructions on how to integrate Chevy Bolt car into Home Assistant." +date: 2017-08-28 17:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: chevy.png +ha_category: Hub +ha_release: 0.62 +ha_iot_class: "Cloud Polling" +--- + +The `MyChevy` component communicates with the +[my.chevrolet](https://my.chevrolet.com) website using selenium to log +in as your user, and screen scrape the data provided. GM does not +make it easy to sign up for any official development program, so this +provides a workaround to get access to your data. + +This component provides the following platforms: + - Binary sensors - if the car is plugged in + - Sensors - such as Battery Level, Charge Mode, EST Range, Total + Distance Traveled + +To use MyChevy in your installation, add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +mychevy: + username: email + password: password +``` + +{% configuration %} +username: + description: The email address associated with your my.chevrolet account + required: true + type: string +password: + description: The password for your given my.chevrolet account + required: true + type: string +{% endconfiguration %} + + +#### {% linkable_title Installation %} + +Because this uses selenium behind the scenes, installation is more +complicated than merely pip install. See the installation instructions +at https://github.com/sdague/mychevy. + +#### {% linkable_title Limitations %} + +The architecture of the GM automotive networking imposes some +limitations on the functionality of the component. + +The OnStar network link is very slow, and takes 1 - 3 minutes to get +information back from the car. As such the mychevy component only +polls every 30 minutes to not overwhelms that connection. + +The OnStar network (or more specifically the gateway used by the +my.chevrolet website) appears to suffer more than most networks when +the car is a) in a garage, and b) it's cold outside (like < 15 degrees +F). One of the provided sensors is a status sensor which indicates if +we got connectivity with the car on the last polling cycle or not. + +The "API" for this is written by web scraping. As such, it only +currently is known to work if you have a Chevy Bolt EV, and only 1 +Chevy car connected to OnStar. Patches for extended support should go +to the https://github.com/sdague/mychevy project first, then +Home Assistant can be extended. diff --git a/source/images/supported_brands/chevy.png b/source/images/supported_brands/chevy.png new file mode 100644 index 0000000000000000000000000000000000000000..184da879bc910f76d2d67360997679f335dcee39 GIT binary patch literal 27477 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 Date: Wed, 17 Jan 2018 15:45:58 +0100 Subject: [PATCH 105/993] Lacrosse (#4430) * fix typo Signed-off-by: Heiko Thiery * add new configuration parameter documentation Signed-off-by: Heiko Thiery * fix syntax errors Signed-off-by: Heiko Thiery * :pencil2: Minor spelling changes --- source/_components/sensor.lacrosse.markdown | 22 ++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/source/_components/sensor.lacrosse.markdown b/source/_components/sensor.lacrosse.markdown index 3dc7a9f842..c9005581f7 100644 --- a/source/_components/sensor.lacrosse.markdown +++ b/source/_components/sensor.lacrosse.markdown @@ -41,7 +41,7 @@ sensor: {% configuration %} device: - description: The serial baudrate. + description: The serial device. required: true type: string default: /dev/ttyUSB0 @@ -50,6 +50,26 @@ sensor: required: true type: int default: 57600 + led: + description: Activate or deactivate the Jeelink LED. + required: false + type: boolean + frequency: + description: Initial frequency in 5kHz steps. + required: false + type: int + datarate: + description: "Set the data rate in kbps. Special values for well-known settings are: `0`: 17.241 kbps, `1`: 9.579 kbps, `2`: 8.842 kbps." + required: false + type: int + toggle_mask: + description: "The following values can be combined bitwise: `1` = 17.241 kbps, `2` = 9.579 kbps, `4` = 8.842 kbps" + required: false + type: int + toggle_interval: + description: Enable the toggle mode and set the interval in seconds. + required: false + type: int sensors: description: A list of your sensors. required: true From a733d0417f72d9e6dad7b288b79849c08c1496c4 Mon Sep 17 00:00:00 2001 From: cogneato Date: Wed, 17 Jan 2018 07:49:13 -0700 Subject: [PATCH 106/993] Update lets_encrypt.markdown (#4442) --- source/_addons/lets_encrypt.markdown | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/source/_addons/lets_encrypt.markdown b/source/_addons/lets_encrypt.markdown index 8917e007bf..bf6845005f 100644 --- a/source/_addons/lets_encrypt.markdown +++ b/source/_addons/lets_encrypt.markdown @@ -16,13 +16,8 @@ You should not use this if you are also using the [DuckDNS add-on]. The DuckDNS Setup and manage a [Let's Encrypt](https://letsencrypt.org/) certificate. This will create a certificate on the first run and will auto-renew if the certificate is within 30 days of expiration. -

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

- ```json { - "challenge": "https", "email": "example@example.com", "domains": ["example.com", "mqtt.example.com", "hass.example.com"] } @@ -30,7 +25,6 @@ This add-on uses ports 80/443 to verify the certificate request. You will need t Configuration variables: -- **challenge** (*Optional*): Default it use 443 ('https') you can change it to 'http' for use port 80. - **email** (*Required*): Your email address for registration on Let's Encrypt. - **domains** (*Required*): A list of domains to create/renew the certificate. @@ -45,6 +39,6 @@ http: ssl_key: /ssl/privkey.pem ``` -If you use a other port as `8123` or a SSL proxy, change the port number. +If you use another port such as `8123` or a SSL proxy, change the port number. [DuckDNS add-on]: /addons/duckdns/ From fde45a109ddac3ca0ccded3bf7bfaa9d129060c4 Mon Sep 17 00:00:00 2001 From: Kane610 Date: Wed, 17 Jan 2018 19:23:43 +0100 Subject: [PATCH 107/993] Fix links to components (#4444) --- source/_components/deconz.markdown | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/source/_components/deconz.markdown b/source/_components/deconz.markdown index 8d050e7d43..6b65b08664 100644 --- a/source/_components/deconz.markdown +++ b/source/_components/deconz.markdown @@ -31,14 +31,14 @@ deconz: #### {% linkable_title Supported Device types %} -- [Zigbee Lights](/components/light/deconz/) -- [Humidity Sensors](/components/sensor/deconz/) -- [Light Level Sensors](/components/sensor/deconz/) -- [OpenClose Detectors](/components/binary_sensor/deconz/) -- [Presence Detectors](/components/binary_sensor/deconz/) -- [Pressure Sensors](/components/sensor/deconz/) -- [Switches (Remote Controls)](/components/sensor/deconz/) -- [Temperature Sensors](/components/sensor/deconz/) +- [Zigbee Lights](/components/light.deconz/) +- [Humidity Sensors](/components/sensor.deconz/) +- [Light Level Sensors](/components/sensor.deconz/) +- [OpenClose Detectors](/components/binary_sensor.deconz/) +- [Presence Detectors](/components/binary_sensor.deconz/) +- [Pressure Sensors](/components/sensor.deconz/) +- [Switches (Remote Controls)](/components/sensor.deconz/) +- [Temperature Sensors](/components/sensor.deconz/) {% configuration %} host: From 36977287005ef56ca4c60c7b72a74bdd6f73bd89 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pierre=20St=C3=A5hl?= Date: Wed, 17 Jan 2018 21:31:52 +0100 Subject: [PATCH 108/993] Add documentation for yamaha_enable_output (#4201) * Add documentation for yamaha_enable_output * :pencil2: Corrected optional flag on entity_id --- source/_components/media_player.yamaha.markdown | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/source/_components/media_player.yamaha.markdown b/source/_components/media_player.yamaha.markdown index c958aa1466..049b33a832 100644 --- a/source/_components/media_player.yamaha.markdown +++ b/source/_components/media_player.yamaha.markdown @@ -113,3 +113,13 @@ script: media_content_id: "Bookmarks>Internet>Radio Paradise" ``` + +### {% linkable_title Service `yamaha_enable_output` %} + +Enable or disable an output port (HDMI) on the receiver. + +| Service data attribute | Optional | Description | +| ---------------------- | -------- | ----------- | +| `entity_id` | yes | String or list of strings that point at `entity_id`s of Yamaha receivers. +| `port` | no | Port to enable or disable, e.g. `hdmi1`. +| `enabled` | no | To enable set true, otherwise set to false. From 3f9319dd431ca9a07b2873048697517f5be9a80b Mon Sep 17 00:00:00 2001 From: Andrew Date: Thu, 18 Jan 2018 01:29:07 -0600 Subject: [PATCH 109/993] Update github url (#4450) --- source/_cookbook/configuration_yaml_by_aneisch.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_cookbook/configuration_yaml_by_aneisch.markdown b/source/_cookbook/configuration_yaml_by_aneisch.markdown index ec652e87ac..fa59c4f648 100644 --- a/source/_cookbook/configuration_yaml_by_aneisch.markdown +++ b/source/_cookbook/configuration_yaml_by_aneisch.markdown @@ -8,6 +8,6 @@ comments: false sharing: true footer: true ha_category: Example configuration.yaml -ha_external_link: https://github.com/aneisch/home-assistant/ +ha_external_link: https://github.com/aneisch/home-assistant-config/ --- From 895dc1cbdd5845a6672048e8c83011e39c31c8a8 Mon Sep 17 00:00:00 2001 From: Chris Helming Date: Thu, 18 Jan 2018 02:29:40 -0500 Subject: [PATCH 110/993] Update calendar.google.markdown (#4449) Clarified steps. --- source/_components/calendar.google.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/calendar.google.markdown b/source/_components/calendar.google.markdown index 658dae1f2b..3442a972a0 100644 --- a/source/_components/calendar.google.markdown +++ b/source/_components/calendar.google.markdown @@ -22,7 +22,7 @@ Generate a Client ID and Client Secret on [Google Developers Console](https://co 1. Follow the wizard using the following information. 1. When it gets to the point of asking _Which API are you using?_ just click cancel. -1. Click on the tab 'OAuth consent screen'. +1. Under APIs & Services > Credentials, click on the tab 'OAuth consent screen'. 1. Set 'Product name shown to users' to anything you want. We suggest Home-Assistant. 1. Save this page. You don't have to fill out anything else there. 1. Click 'Create credentials' -> OAuth client ID. From 5d284b274cfd9f3384c4b0c9f8993e7f3b64b731 Mon Sep 17 00:00:00 2001 From: Ettienne Gous Date: Fri, 19 Jan 2018 00:18:29 +1100 Subject: [PATCH 111/993] Fix platform incorrect CaSe (#4451) Was saying platform not found with incorrect case when I used check config Lower down in the doc it shows a correct example with lower case that did work --- source/_components/sensor.bh1750.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/sensor.bh1750.markdown b/source/_components/sensor.bh1750.markdown index 754dc91f86..8b07a84482 100644 --- a/source/_components/sensor.bh1750.markdown +++ b/source/_components/sensor.bh1750.markdown @@ -26,7 +26,7 @@ To use your BH1750 sensor in your installation, add the following to your `confi ```yaml # Example configuration.yaml entry sensor: - - platform: BH1750 + - platform: bh1750 ``` Configuration variables: From c73fce01653d82e7c0a3a5086281514e4bd5142a Mon Sep 17 00:00:00 2001 From: mukundv Date: Fri, 19 Jan 2018 00:19:51 +1100 Subject: [PATCH 112/993] Added PTV (AU) GTFS dataset link (#4452) Added a link to PTV Australia GTFS dataset. --- source/_components/sensor.gtfs.markdown | 1 + 1 file changed, 1 insertion(+) diff --git a/source/_components/sensor.gtfs.markdown b/source/_components/sensor.gtfs.markdown index 00243470ad..874617d87b 100644 --- a/source/_components/sensor.gtfs.markdown +++ b/source/_components/sensor.gtfs.markdown @@ -24,6 +24,7 @@ Here are some examples: - [Metropolitan Transit Authority of New York City (MTA)](http://www.bart.gov/schedules/developers/gtfs) - Provides separate data feeds for subway, bus, LIRR and Metro-North of the greater New York City metropolitan region. - [GBRail.info](http://www.gbrail.info/) - Provides data feeds for most if not all rail companies in Britain. - [Official Timetable Switzerland](http://www.fahrplanfelder.ch/en/timetable-data.html) - The official timetable data for Switzerland. +- [Public Transport Victoria (Australia)](https://www.data.vic.gov.au/data/dataset/ptv-timetable-and-geographic-information-2015-gtfs) - Official PTV GTFS dataset. You need to download a GTFS ZIP file and put it into a folder named `gtfs` in your configuration directory. For ease of use, it is suggested that you rename the file to just the agency/data source name (i.e. `bart.zip` instead of `google_transit_20160328_v1.zip`). You can also unzip and place a folder in the `gtfs` folder. From 9fc7968571f104b0321749027a14fe17fa1545a5 Mon Sep 17 00:00:00 2001 From: Adam Date: Thu, 18 Jan 2018 13:13:52 -0600 Subject: [PATCH 113/993] Sharing my config to the cookbook --- .../_cookbook/configuration_yaml_by_silvrr.markdown | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 source/_cookbook/configuration_yaml_by_silvrr.markdown diff --git a/source/_cookbook/configuration_yaml_by_silvrr.markdown b/source/_cookbook/configuration_yaml_by_silvrr.markdown new file mode 100644 index 0000000000..847b4bf1c0 --- /dev/null +++ b/source/_cookbook/configuration_yaml_by_silvrr.markdown @@ -0,0 +1,12 @@ +--- +layout: page +title: "Configuration.yaml by silvrr" +description: "" +date: 2018-1-18 13:08 +sidebar: true +comments: false +sharing: true +footer: true +ha_category: Example configuration.yaml +ha_external_link: https://github.com/SilvrrGIT/HomeAssistant +--- From 670ef128437dcbf1600cf5c347d140b2d95a1f7a Mon Sep 17 00:00:00 2001 From: Pascal Vizeli Date: Thu, 18 Jan 2018 22:26:38 +0100 Subject: [PATCH 114/993] Update addon_communication.markdown --- source/developers/hassio/addon_communication.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/developers/hassio/addon_communication.markdown b/source/developers/hassio/addon_communication.markdown index f4c8c43d6d..e9292b484d 100644 --- a/source/developers/hassio/addon_communication.markdown +++ b/source/developers/hassio/addon_communication.markdown @@ -22,7 +22,7 @@ Use `hassio` to speak with the internal API. An add-on can speak to the [Home Assistant API][hass-api] with our internal proxy. That makes it very easy to communicate with the API without knowing the password, port or any other information of the Home Assistant instance. Use this URL: `http://hassio/homeassistant/api` and internal communication is redirected to the right place. The next stept is to add `homeassistant_api: true` to `config.json` and read the environment variable `HASSIO_TOKEN` and use this as Home-Assistant password. -We have also a proxy for [Websocket Home Assistant API][hass-websocket]. It work like the API proxy above and use `API_TOKEN` as password. Use this URL: `http://hassio/homeassistant/websocket`. +We have also a proxy for [Websocket Home Assistant API][hass-websocket]. It work like the API proxy above and use `HASSIO_TOKEN` as password. Use this URL: `http://hassio/homeassistant/websocket`. It is also possible to speak direct to the Home Assistant instance which is named `homeassistant` over our internal network. But you need to know the configuration that is used by the running instance. From 2115f186832cc08b6e3855715055620ee5720241 Mon Sep 17 00:00:00 2001 From: Pascal Vizeli Date: Thu, 18 Jan 2018 22:28:35 +0100 Subject: [PATCH 115/993] Update addon_communication.markdown --- source/developers/hassio/addon_communication.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/developers/hassio/addon_communication.markdown b/source/developers/hassio/addon_communication.markdown index e9292b484d..9b4d3fbdc1 100644 --- a/source/developers/hassio/addon_communication.markdown +++ b/source/developers/hassio/addon_communication.markdown @@ -30,7 +30,7 @@ We have severals services for Hass.io inside Home Assistant to execute tasks. To ## {% linkable_title Hass.io API %} -To enables calls to the [Hass.io API][hassio-api], add `hassio_api: true` to `config.json` and read the environment variable `API_TOKEN`. Now you can use the API over the URL: `http://hassio/`. Use the `HASSIO_TOKEN` with header `X-HASSIO-KEY`. +To enables calls to the [Hass.io API][hassio-api], add `hassio_api: true` to `config.json` and read the environment variable `HASSIO_TOKEN`. Now you can use the API over the URL: `http://hassio/`. Use the `HASSIO_TOKEN` with header `X-HASSIO-KEY`. [hass-api]: https://home-assistant.io/developers/rest_api/ [hass-websocket]: https://home-assistant.io/developers/websocket_api/ From 06d8bb1634c265de89a5d5a4d09a1ce60eca4c8d Mon Sep 17 00:00:00 2001 From: markferry Date: Thu, 18 Jan 2018 22:03:54 +0000 Subject: [PATCH 116/993] Document min_max 'last' attribute (#4167) --- source/_components/sensor.min_max.markdown | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/_components/sensor.min_max.markdown b/source/_components/sensor.min_max.markdown index db4db382a4..a71e0650e2 100644 --- a/source/_components/sensor.min_max.markdown +++ b/source/_components/sensor.min_max.markdown @@ -14,7 +14,7 @@ ha_release: "0.31" --- -The `min_max` sensor platform consumes the state from other sensors to determine the minimum, maximum, and the mean of the collected states. The sensor will always show you the lowest/highest value which was received from all monitored sensors. If you have spikes in your values, it's recommended to filter/equalize your values with a [statistics sensor](/components/sensor.statistics/) first. +The `min_max` sensor platform consumes the state from other sensors to determine the minimum, maximum, latest (last) and the mean of the collected states. The sensor will always show you the lowest/highest/latest value which was received from all monitored sensors. If you have spikes in your values, it's recommended to filter/equalize your values with a [statistics sensor](/components/sensor.statistics/) first. This sensor is an alternative to the [template sensor](/components/sensor.template/)'s `value_template:` to get the average of multiple sensors. @@ -42,7 +42,7 @@ sensor: Configuration variables: - **entity_ids** (*Required*): At least two entities to monitor. The unit of measurement of the first entry will be the one that's used. All entities must use the same unit of measurement. -- **type** (*Optional*): The type of sensor: `min`, `max` or `mean`. Defaults to `max`. +- **type** (*Optional*): The type of sensor: `min`, `max`, `last` or `mean`. Defaults to `max`. - **name** (*Optional*): Name of the sensor to use in the frontend. - **round_digits** (*Optional*): Round mean value to specified number of digits. Defaults to 2. From 4d19f4ba1249f46af0abd088043d87f265563893 Mon Sep 17 00:00:00 2001 From: Jean-Philippe Jodoin Date: Thu, 18 Jan 2018 17:04:51 -0500 Subject: [PATCH 117/993] Added TekSavvy data usage sensor documentation. (#4227) * Added TekSavvy data usage sensor documentation. * Fix usage_gb parameters * Fixed date * Use configuration section + formulation fix * Removed tab * Update 'ha_release' --- source/_components/sensor.teksavvy.markdown | 77 ++++++++++++++++++++ source/images/supported_brands/teksavvy.png | Bin 0 -> 136009 bytes 2 files changed, 77 insertions(+) create mode 100644 source/_components/sensor.teksavvy.markdown create mode 100644 source/images/supported_brands/teksavvy.png diff --git a/source/_components/sensor.teksavvy.markdown b/source/_components/sensor.teksavvy.markdown new file mode 100644 index 0000000000..2181e4273d --- /dev/null +++ b/source/_components/sensor.teksavvy.markdown @@ -0,0 +1,77 @@ +--- +layout: page +title: "TekSavvy" +description: "Instructions on how to integrate TekSavvy data usage within Home Assistant." +date: 2017-12-17 00:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: teksavvy.png +ha_category: Sensor +ha_release: 0.62 +ha_iot_class: "Cloud Polling" +--- + +Integrate your [TekSavvy](https://myaccount.teksavvy.com/) account information into Home Assistant. + +You can get your API key from +https://myaccount.teksavvy.com/ApiKey/ApiKeyManagement + +To use your TekSavvy sensor in your installation, add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +sensor: + - platform: teksavvy + api_key: API_KEY + total_bandwidth: 400 + monitored_variables: + - usage + - usage_gb + - limit + - onpeak_download + - onpeak_upload + - onpeak_total + - offpeak_download + - offpeak_upload + - offpeak_total + - onpeak_remaining +``` + +{% configuration %} +api_key: + description: The TekSavvy API key to access the service. + required: true + type: string +total_bandwidth: + description: Your bandwidth limit in gigabytes. + required: true + type: string +monitored_conditions: + description: Conditions to display in the frontend. + required: true + type: list + keys: + usage: + description: Bandwidth usage (percentage). + usage_gb: + description: Bandwidth usage (gigabytes). + limit: + description: Monthly bandwidth limit (gigabytes). + onpeak_download: + description: Bandwidth used by download outside the unmetered period (gigabytes). + onpeak_upload: + description: Bandwidth used by upload outside the unmetered period (gigabytes). + onpeak_total: + description: Total bandwidth used outside the unmetered period (gigabytes). + offpeak_download: + description: Bandwidth used by download during the unlimited period (gigabytes). + offpeak_upload: + description: Bandwidth used by upload during the unlimited period (gigabytes). + offpeak_total: + description: Total bandwidth used during the unlimited period (gigabytes). + onpeak_remaining: + description: Remaining bandwidth (gigabytes). +{% endconfiguration %} + diff --git a/source/images/supported_brands/teksavvy.png b/source/images/supported_brands/teksavvy.png new file mode 100644 index 0000000000000000000000000000000000000000..ba241bc6ef0d93f43c9fee1a1094ff2ae63d726d GIT binary patch literal 136009 zcmeFZXH=8h+BO;$#R@7aO+f|ey^1sy0g)!X7ePQ;LhseCH0dQ2mEHxU1PEY(2%&eR zM1jyDkkCRX-;8c??e`n|yyuK@e(sFrkQI{o%xB*1x~}_ve05(<@zimK;}8hsl+xWh znh*%hDG20X%h7}29Sz*lSMV2w%`Mei5J*Y5A4ww`{QqUkyPB#H$O~!+BozGF0bdHf z34!=~Lm;yu5Qr2O0-FM*XP2iyB^Rb!+NVjjasr-WkdUK9LRKg-9SKc2yBY!99>fQTagSzgs>fR|ieNOuW zCF@ZRK{|PD9+*OZNKrxU1|CnED1a@NZ6HVs$PPnVNK`g|eEbpR18-VrmY+x^&z_0Y za9e-`9bhsK;)JN^DpZ?&@I89E8Qu0Q^@__uGl~PtKKiu>oq9TjgVZSZ(lQKY{eou_ zAZOrZ67)Q0XkT8xru>GlqT_V}Lp+Z)-8Jhvj$3EYuOuEso{}N)l%^*PpW=~@6MaTu*wt>+2_ilOl3X$@Pk0K(%LOXf)_uL7vdn3d0KJ=Rio707RA&bS^ z-3$=()>n3Agb?1M<3a7bkZ+?Ti=OL{po|>YrGfftYE>!zR|juZhm|<%>c*Xk{~~mj zc9nWZ{YCw|;yN2vnWYGPr-{Uh%7fQId_|1hyw_B}W!q#38(ggZnf79nnR3^i>By~Q zFRHXJH1bbhWrd=ZPnW|{Q^%`prEbJ;q$O=qf7#7wL|k~)y?N%oWoS^ZJJ-#CMM{q2 zXD)Y<8cp`nVRf4Vmjk?iaz%%@?%~9DY(8asXsh@AP6f*@We3TOl4=9AN>kLez|aF-%Ch`RJ9(;&t1TY`hf)`RTsQ!?BV zesmahi~aiH_9x0e7^)6HpODPYsRY@WU#LBD;xxsBD?)dIC$F5pOVj8Q%%+z)39 z4l{l^39c6`_e00&VC|9iXD5DKa=JDGVSXn0gRm^RDJFGX_Q~|=pwnj<-oK{1dh+Yx z6~*^&yq-oBD87DkJmY|^e08MEB%9Fd*2^#rx^su+73tqQXr$)cKX;=1NI8?v<2;2+ z3hr-xG{iM5a}0VFMd%A(_A3s*MRuN

VrUecB`#db={6|2-_7y|Y-5?&PWTu#(SS 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

%WYg2%xgnURur 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 VcvsEUhoSi4A~jB`XQ^8F{1aXChz9@w literal 0 HcmV?d00001 From 3453399df614448aea9c88e380a8f5ec0c17e364 Mon Sep 17 00:00:00 2001 From: CV Date: Thu, 18 Jan 2018 23:45:19 +0100 Subject: [PATCH 118/993] Changed wording and init scripts (#4455) I changed the init scripts to be more reliable. hass executable supports the option --log-file. Using this is much safer and does not lead to problems with permission and overwriting old logfiles. Also I added creating the directory and ownership in the install function. To prevent log file groth I added a logrotate rule. I moved the update-rc.d command you had in your manual into the install function since you already ad it in the uninstall function. This prevents more copy&paste errors. I changed the PID file to be located in an extra directory. This way you do not have to to this hack with writing a fake PID file in the install function. Also, I read many users having problems that hass daemon is not starting (see eg. https://community.home-assistant.io/t/autostart-virtualenv-ubuntu-14-04/2120/37) without showing any errors. This is due to a missing PID file or its wrong permissions. By changing as stated and adding a test this problem should not arise any more. I changes some wording in the manual to make it more understandable. --- source/_docs/autostart/init.d.markdown | 172 ++++++++++++++++++------- 1 file changed, 126 insertions(+), 46 deletions(-) diff --git a/source/_docs/autostart/init.d.markdown b/source/_docs/autostart/init.d.markdown index 6605b6e10b..dba7739677 100644 --- a/source/_docs/autostart/init.d.markdown +++ b/source/_docs/autostart/init.d.markdown @@ -14,7 +14,7 @@ Home Assistant can run as a daemon within init.d with the script below. ### {% linkable_title 1. Copy script %} -Copy the script at the end of this page to `/etc/init.d/hass-daemon`. +Copy either the deamon script or the Python environment scrip at the end of this page to `/etc/init.d/hass-daemon` depending on your installation. After that, set the script to be executable: @@ -26,27 +26,41 @@ $ sudo chmod +x /etc/init.d/hass-daemon Create or pick a user that the Home Assistant daemon will run under. Update script to set `RUN_AS` to the username that should be used to execute hass. -### {% linkable_title 3. Change hass executable if required. %} +### {% linkable_title 3. Change hass executable and other variables if required. %} -Some installation environments may require a change in the Home Assistant executable `hass`. Update script to set `HASS_BIN` to the appropriate `hass` executable path. +Some installation environments may require a change in the Home Assistant executable `hass`. Update script to set `HASS_BIN` to the appropriate `hass` executable path. Please also check the other variables for the appropriate value. In general the defaults should work -### {% linkable_title 4. Register the daemon with Linux %} - -```bash -$ sudo update-rc.d hass-daemon defaults -``` - -### {% linkable_title 5. Install this service %} +### {% linkable_title 4. Install this service %} ```bash $ sudo service hass-daemon install ``` +### {% linkable_title 5. Create logrotate rule %} + +This logrotate script at `/etc/logrotate.d/homeassistant` will create an outage of a few seconds every week at night. If you do not want this add `--log-rotate-days 7` to the `FLAGS` variable in the init script. + +``` +/var/log/homeassistant/home-assistant.log +{ + rotate 7 + daily + missingok + notifempty + delaycompress + compress + postrotate + invoke-rc.d hass-daemon restart > /dev/null + endscript +} + +``` + ### {% linkable_title 6. Restart Machine %} That's it. Restart your machine and Home Assistant should start automatically. -If HA does not start, check the log file output for errors at `/var/opt/homeassistant/home-assistant.log` +If HA does not start, check the log file output for errors at `/var/log/homeassistant/home-assistant.log` ### {% linkable_title Extra: Running commands before hass executes %} @@ -73,54 +87,87 @@ HASS_BIN="hass" RUN_AS="USER" PID_FILE="/var/run/hass.pid" CONFIG_DIR="/var/opt/homeassistant" -FLAGS="-v --config $CONFIG_DIR --pid-file $PID_FILE --daemon" -REDIRECT="> $CONFIG_DIR/home-assistant.log 2>&1" +LOG_DIR="/var/log/homeassistant" +LOG_FILE="$LOG_DIR/home-assistant.log" +FLAGS="-v --config $CONFIG_DIR --pid-file $PID_FILE --log-file $LOG_FILE --daemon" + start() { + if [ ! -d "$PID_DIR" ]; then + echo "It seems you did not run" + echo -e "\tservice hass-daemon install" + return 1 + fi if [ -f $PID_FILE ] && kill -0 $(cat $PID_FILE) 2> /dev/null; then echo 'Service already running' >&2 return 1 fi - echo 'Starting service…' >&2 - local CMD="$PRE_EXEC $HASS_BIN $FLAGS $REDIRECT;" - su -c "$CMD" $RUN_AS - echo 'Service started' >&2 + echo -n 'Starting service… ' >&2 + local CMD="$PRE_EXEC $HASS_BIN $FLAGS;" + su -s /bin/bash -c "$CMD" $RUN_AS + if [ $? -ne 0 ]; then + echo "Failed" >&2 + else + echo 'Done' >&2 + fi } stop() { - if [ ! -f "$PID_FILE" ] || ! kill -0 $(cat "$PID_FILE") 2> /dev/null; then + if [ ! -f "$PID_FILE" ] || ! kill -0 $(cat "$PID_FILE") 2> /dev/null; then echo 'Service not running' >&2 return 1 fi - echo 'Stopping service…' >&2 + echo -n 'Stopping service… ' >&2 kill $(cat "$PID_FILE") while ps -p $(cat "$PID_FILE") > /dev/null 2>&1; do sleep 1;done; - echo 'Service stopped' >&2 + rm -f $PID_FILE + echo 'Done' >&2 } install() { - echo "Installing Home Assistant Daemon (hass-daemon)" - echo "999999" > $PID_FILE - chown $RUN_AS $PID_FILE - mkdir -p $CONFIG_DIR - chown $RUN_AS $CONFIG_DIR + echo "Installing Home Assistant Daemon (hass-daemon)" + update-rc.d hass-daemon defaults + create_piddir + mkdir -p $CONFIG_DIR + chown $RUN_AS $CONFIG_DIR + mkdir -p $LOG_DIR + chown $RUN_AS $LOG_DIR } uninstall() { - echo -n "Are you really sure you want to uninstall this service? That cannot be undone. [yes|No] " + echo "Are you really sure you want to uninstall this service? The INIT script will" + echo -n "also be deleted! That cannot be undone. [yes|No] " local SURE read SURE if [ "$SURE" = "yes" ]; then stop - rm -fv "$PID_FILE" + remove_piddir echo "Notice: The config directory has not been removed" echo $CONFIG_DIR + echo "Notice: The log directory has not been removed" + echo $LOG_DIR update-rc.d -f hass-daemon remove rm -fv "$0" echo "Home Assistant Daemon has been removed. Home Assistant is still installed." fi } +create_piddir() { + if [ ! -d "$PID_DIR" ]; then + mkdir -p $PID_DIR + chown $RUN_AS "$PID_DIR" + fi +} + +remove_piddir() { + if [ -d "$PID_DIR" ]; then + if [ -e "$PID_FILE" ]; then + rm -fv "$PID_FILE" + fi + rmdir -fv "$PID_DIR" + fi +} + case "$1" in start) start @@ -158,60 +205,93 @@ esac # /etc/init.d Service Script for Home Assistant # Created with: https://gist.github.com/naholyr/4275302#file-new-service-sh -PRE_EXEC="cd /srv/homeassistant && python3 -m venv . && source bin/activate &&" +PRE_EXEC="cd /srv/homeassistant; python3 -m venv .; source bin/activate;" # Typically /usr/bin/hass HASS_BIN="hass" -RUN_AS="USER" -PID_FILE="/var/run/hass.pid" -CONFIG_DIR="/home/USER/.homeassistant" -FLAGS="-v --config $CONFIG_DIR --pid-file $PID_FILE --daemon" -REDIRECT="> $CONFIG_DIR/home-assistant.log 2>&1" +RUN_AS="homeassistant" +PID_DIR="/var/run/hass" +PID_FILE="$PID_DIR/hass.pid" +CONFIG_DIR="/home/$RUN_AS/.homeassistant" +LOG_DIR="/var/log/homeassistant" +LOG_FILE="$LOG_DIR/home-assistant.log" +FLAGS="-v --config $CONFIG_DIR --pid-file $PID_FILE --log-file $LOG_FILE --daemon" start() { + if [ ! -d "$PID_DIR" ]; then + echo "It seems you did not run" + echo -e "\tservice hass-daemon install" + return 1 + fi if [ -f $PID_FILE ] && kill -0 $(cat $PID_FILE) 2> /dev/null; then echo 'Service already running' >&2 return 1 fi - echo 'Starting service…' >&2 - local CMD="$PRE_EXEC $HASS_BIN $FLAGS $REDIRECT;" + echo -n 'Starting service… ' >&2 + local CMD="$PRE_EXEC $HASS_BIN $FLAGS;" su -s /bin/bash -c "$CMD" $RUN_AS - echo 'Service started' >&2 + if [ $? -ne 0 ]; then + echo "Failed" >&2 + else + echo 'Done' >&2 + fi } stop() { - if [ ! -f "$PID_FILE" ] || ! kill -0 $(cat "$PID_FILE") 2> /dev/null; then + if [ ! -f "$PID_FILE" ] || ! kill -0 $(cat "$PID_FILE") 2> /dev/null; then echo 'Service not running' >&2 return 1 fi - echo 'Stopping service…' >&2 + echo -n 'Stopping service… ' >&2 kill $(cat "$PID_FILE") while ps -p $(cat "$PID_FILE") > /dev/null 2>&1; do sleep 1;done; - echo 'Service stopped' >&2 + rm -f $PID_FILE + echo 'Done' >&2 } install() { - echo "Installing Home Assistant Daemon (hass-daemon)" - echo "999999" > $PID_FILE - chown $RUN_AS $PID_FILE - mkdir -p $CONFIG_DIR - chown $RUN_AS $CONFIG_DIR + echo "Installing Home Assistant Daemon (hass-daemon)" + update-rc.d hass-daemon defaults + create_piddir + mkdir -p $CONFIG_DIR + chown $RUN_AS $CONFIG_DIR + mkdir -p $LOG_DIR + chown $RUN_AS $LOG_DIR } uninstall() { - echo -n "Are you really sure you want to uninstall this service? That cannot be undone. [yes|No] " + echo "Are you really sure you want to uninstall this service? The INIT script will" + echo -n "also be deleted! That cannot be undone. [yes|No] " local SURE read SURE if [ "$SURE" = "yes" ]; then stop - rm -fv "$PID_FILE" + remove_piddir echo "Notice: The config directory has not been removed" echo $CONFIG_DIR + echo "Notice: The log directory has not been removed" + echo $LOG_DIR update-rc.d -f hass-daemon remove rm -fv "$0" echo "Home Assistant Daemon has been removed. Home Assistant is still installed." fi } +create_piddir() { + if [ ! -d "$PID_DIR" ]; then + mkdir -p $PID_DIR + chown $RUN_AS "$PID_DIR" + fi +} + +remove_piddir() { + if [ -d "$PID_DIR" ]; then + if [ -e "$PID_FILE" ]; then + rm -fv "$PID_FILE" + fi + rmdir -fv "$PID_DIR" + fi +} + case "$1" in start) start From 9186821adfc817faecb16098efe8ba4b7fae9726 Mon Sep 17 00:00:00 2001 From: karlkar Date: Thu, 18 Jan 2018 23:46:12 +0100 Subject: [PATCH 119/993] Fix for Botvac D3 and D5 (#4456) --- source/_components/neato.markdown | 9 --------- 1 file changed, 9 deletions(-) diff --git a/source/_components/neato.markdown b/source/_components/neato.markdown index 45bdd344e5..8c5b205e98 100644 --- a/source/_components/neato.markdown +++ b/source/_components/neato.markdown @@ -28,15 +28,6 @@ Configuration variables: - **username** (*Required*): Username for the Neato account. - **password** (*Required*): Password for the Neato account. -The Home Assistant Neato platform has not been tested with all models of Botvac. - - | BotVac Model | Tested | - | --- | --- | - | Botvac Connected | SUCCESS | - | Botvac D3 Connected (firmware 4.0+) | PARTIALLY WORKING | - | Botvac D5 Connected (firmware 4.0+) | PARTIALLY WORKING | - | Botvac D7 Connected | SUCCESS | -

After the update to firmware 4.0 (which adds cleaning maps) there is also support for displaying the maps of the Botvac D3 Connected and Botvac D5 Connected robots. The start/stop functionality does not work. More information on how to update here: https://support.neatorobotics.com/hc/en-us/articles/115004320694-Software-Update-4-0-for-Neato-Botvac-Connected-D3-D5-

From af6bcffd5d6d33c575a751e51ec54d53415ce3c7 Mon Sep 17 00:00:00 2001 From: Sebastian Muszynski Date: Fri, 19 Jan 2018 11:40:00 +0100 Subject: [PATCH 120/993] Additional attributes and services of the Xiaomi Air Purifier introduced (#4254) * New attributes average_aqi and purify_volume introduced and service light.xiaomi_miio_set_child_lock_{on,off} added. * Grammar issue fixed. --- source/_components/fan.xiaomi_miio.markdown | 50 ++++++++++++++------- 1 file changed, 34 insertions(+), 16 deletions(-) diff --git a/source/_components/fan.xiaomi_miio.markdown b/source/_components/fan.xiaomi_miio.markdown index 218a7c0da4..23110f6302 100644 --- a/source/_components/fan.xiaomi_miio.markdown +++ b/source/_components/fan.xiaomi_miio.markdown @@ -8,36 +8,38 @@ comments: false sharing: true footer: true logo: xiaomi.png -ha_category: Switch +ha_category: Fan ha_version: 0.57 ha_iot_class: "Local Polling" --- -The `xiaomi_miio` fan platform allows you to control the Xiaomi Air Purifier 2, Air Purifier 2S andd Air Purifier Pro. +The `xiaomi_miio` fan platform allows you to control the Xiaomi Air Purifier 2, Air Purifier 2S and Air Purifier Pro. Currently, the supported features are * On, Off * Operation modes (auto, silent, favorite, idle) * Buzzer (on, off) +* Child lock (on, off) * LED (on, off), LED brightness (bright, dim, off) -* Favorite Level -* States +* Favorite Level (0...16) +* Attributes - power - aqi + - average_aqi - humidity - temperature - mode + - favorite_level - led - led_brightness - buzzer - child_lock - - brightness - - favorite_level - - filter1_life - - f1_hour_used - - use_time - - motor1_speed + - purify_volume + - filter_life_remaining + - filter_hours_used + - motor_speed + ## {% linkable_title Setup %} @@ -66,7 +68,7 @@ Turn the buzzer on. | Service data attribute | Optional | Description | |---------------------------|----------|-------------------------------------------------------| -| `entity_id` | yes | Only act on specific air purifier. Else targets all. | +| `entity_id` | yes | Only act on a specfici air purifier. Else targets all. | ### Service fan/xiaomi_miio_set_buzzer_off @@ -74,7 +76,7 @@ Turn the buzzer off. | Service data attribute | Optional | Description | |---------------------------|----------|-------------------------------------------------------| -| `entity_id` | yes | Only act on specific air purifier. Else targets all. | +| `entity_id` | yes | Only act on a specfici air purifier. Else targets all. | ### Service fan/xiaomi_miio_set_led_on @@ -82,7 +84,7 @@ Turn the led on. | Service data attribute | Optional | Description | |---------------------------|----------|-------------------------------------------------------| -| `entity_id` | yes | Only act on specific air purifier. Else targets all. | +| `entity_id` | yes | Only act on a specfici air purifier. Else targets all. | ### Service fan/xiaomi_miio_set_led_off @@ -90,7 +92,23 @@ Turn the led off. | Service data attribute | Optional | Description | |---------------------------|----------|-------------------------------------------------------| -| `entity_id` | yes | Only act on specific air purifier. Else targets all. | +| `entity_id` | yes | Only act on a specfici air purifier. Else targets all. | + +### Service fan/xiaomi_miio_set_child_lock_on + +Turn the child lock on. + +| Service data attribute | Optional | Description | +|---------------------------|----------|-------------------------------------------------------| +| `entity_id` | yes | Only act on a specfici air purifier. Else targets all. | + +### Service fan/xiaomi_miio_set_child_lock_off + +Turn the child lock off. + +| Service data attribute | Optional | Description | +|---------------------------|----------|-------------------------------------------------------| +| `entity_id` | yes | Only act on a specfici air purifier. Else targets all. | ### Service fan/xiaomi_miio_set_led_brightness @@ -98,7 +116,7 @@ Set the led brightness. Supported values are 0 (Bright), 1 (Dim), 2 (Off). | Service data attribute | Optional | Description | |---------------------------|----------|-------------------------------------------------------| -| `entity_id` | yes | Only act on specific air purifier. Else targets all. | +| `entity_id` | yes | Only act on a specfici air purifier. Else targets all. | | `brightness` | no | Brightness, between 0 and 2. | ### Service fan/xiaomi_miio_set_favorite_level @@ -107,5 +125,5 @@ Set the favorite level of the operation mode "favorite". | Service data attribute | Optional | Description | |---------------------------|----------|-------------------------------------------------------| -| `entity_id` | yes | Only act on specific air purifier. Else targets all. | +| `entity_id` | yes | Only act on a specfici air purifier. Else targets all. | | `level` | no | Level, between 0 and 16. | From 6525969cfc3b54abd4424ca7250d491fc2071326 Mon Sep 17 00:00:00 2001 From: ChristianKuehnel Date: Fri, 19 Jan 2018 11:41:22 +0100 Subject: [PATCH 121/993] plant - added config option "check history" (#3417) * added config option "group_name" to plant * added documentation for new behaviour of min_brightness * Update plant.markdown fixed typos * * removed group feature (see PR for details) * escaped curly braces as they were not rendered on github * undo escaping braces --- source/_components/plant.markdown | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/source/_components/plant.markdown b/source/_components/plant.markdown index daba937a93..80fccc281d 100644 --- a/source/_components/plant.markdown +++ b/source/_components/plant.markdown @@ -45,8 +45,9 @@ Configuration variables: - **max_conductivity** (*Optional*): Maximum conductivity level before triggering a problem. Typical value: 3000 - **min_temperature** (*Optional*): Minimum temperature before triggering a problem. - **max_temperature** (*Optional*): Maximum temperature before triggering a problem. - - **min_brightness** (*Optional*): Minimum brightness before triggering a problem. + - **min_brightness** (*Optional*): Minimum brightness before triggering a problem. In contrast to the other values, this check is *not* looking at the current situation, but rather at the last days. A problem is only reported if the maximum brightness over the last days was lower than min_brightness. You can use this to check if the plant gets enough light during the course of the day. - **max_brightness** (*Optional*): Maximum brightness before triggering a problem. + - **check_days** (*Optional*): time interval (in days) used when checking **min_brightness**, if not set, the default value is 3 ## {% linkable_title Examples %} ### Using plain MQTT sensor to get the data From 122a77bc82ff026a7edc62f6b9fc2f158005c261 Mon Sep 17 00:00:00 2001 From: tschmidty69 Date: Fri, 19 Jan 2018 05:44:01 -0500 Subject: [PATCH 122/993] Added event_data_template (#4180) * Added event_data_template * Update scripts.markdown --- source/_docs/scripts.markdown | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/source/_docs/scripts.markdown b/source/_docs/scripts.markdown index bffc89b8a7..d61ee449b8 100644 --- a/source/_docs/scripts.markdown +++ b/source/_docs/scripts.markdown @@ -124,6 +124,16 @@ event_data: entity_id: device_tracker.paulus domain: light ``` +You can also use event_data_template to fire an event with custom data. This could be used to pass data to another script awaiting +an event trigger. +``` +event: MY_EVENT +event_data_template: + name: myEvent + customData: "{{ myCustomVariable }}" +``` + + [Script component]: /components/script/ [automations]: /getting-started/automation-action/ From 874e76d797f1bce1267340f29f0beead5f2d6528 Mon Sep 17 00:00:00 2001 From: ubnt-marc-khouri <35465461+ubnt-marc-khouri@users.noreply.github.com> Date: Fri, 19 Jan 2018 16:53:53 -0500 Subject: [PATCH 123/993] Documentation tweak (#4466) * Add Wink to "discovery" component docs * Views (groups with `view: yes`) cannot be nested in other views This commit documents that groups with `view: yes` cannot be used as entities within another group with `view: yes`. Several forum users have been confused by this behaviour -- and me too! :) Example posts: - https://community.home-assistant.io/t/groups-not-appearing/23593 - https://community.home-assistant.io/t/group-cards-not-showing/1052/14 - https://community.home-assistant.io/t/groups-not-shown-on-state-tab/30395/2 --- source/_components/discovery.markdown | 4 +++- source/_components/group.markdown | 8 ++++---- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/source/_components/discovery.markdown b/source/_components/discovery.markdown index 18ac58261c..f6629e3159 100644 --- a/source/_components/discovery.markdown +++ b/source/_components/discovery.markdown @@ -36,6 +36,7 @@ Home Assistant can discover and automatically configure [zeroconf](https://en.wi * [Samsung TVs](https://home-assistant.io/components/media_player.samsungtv/) * [Sonos speakers](https://home-assistant.io/components/media_player.sonos/) * [Telldus Live](https://home-assistant.io/components/tellduslive/) + * [Wink](https://home-assistant.io/components/wink/) * [Yamaha media player](https://home-assistant.io/components/media_player.yamaha/) * [Yeelight Sunflower bulb](https://home-assistant.io/components/light.yeelightsunflower/) @@ -79,9 +80,10 @@ Valid values for ignore are: * `samsung_tv`: Samsung TVs * `sonos`: Sonos speakers * `tellduslive`: Telldus Live + * `wink`: Wink Hub * `yamaha`: Yamaha media player * `yeelight`: Yeelight Sunflower bulb - +

Home Assistant must be on the same network as the devices for uPnP discovery to work. If running Home Assistant in a [Docker container](/docs/installation/docker/) use switch `--net=host` to put it on the host's network. diff --git a/source/_components/group.markdown b/source/_components/group.markdown index 74f07dc49b..9a515fafc6 100644 --- a/source/_components/group.markdown +++ b/source/_components/group.markdown @@ -22,7 +22,7 @@ By default, every group appears in the HOME tab. If you create a group `default_ group: default_view: view: yes - icon: mdi:home + icon: mdi:home entities: - group.kitchen - group.awesome_people @@ -56,7 +56,7 @@ group: Configuration variables: -- **view** (*Optional*): If yes then the entry will be shown as a view (tab) at the top. +- **view** (*Optional*): If yes then the entry will be shown as a view (tab) at the top. Groups that are set to `view: yes` cannot be used as entities in other views. - **name** (*Optional*): Name of the group. - **icon** (*Optional*): If the group is a view, this icon will show at the top in the frontend instead of the name. If the group is a view and both name and icon have been specified, the icon will appear at the top of the frontend and the name will be displayed as the mouse-over text. If it's not a view, then the icon shows when this group is used in another group. - **control** (*Optional*): Set value to `hidden`. If hidden then the group switch will be hidden. @@ -69,7 +69,7 @@ Example of groups shown as views in the frontend. If all entities in a group are switches or lights then Home Assistant adds a switch at the top of the card that turns them all on/off at once. If you want to hide this switch, set `control` to `hidden`. -You can create views (tabs) that contain other groups. +You can create views (tabs) that contain other groups (but not other groups which are marked as `view: yes`). Notice in the example below that in order to refer to the group "Living Room", you use `group.living_room` (lowercase and spaces replaced with underscores). ```yaml @@ -86,7 +86,7 @@ Notice in the example below that in order to refer to the group "Living Room", y entities: - group.living_room - group.bedroom -``` +``` ## {% linkable_title Default groups %} From 0124a62db4a2ea4a80e5985f0cf51423e16bed48 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Fri, 19 Jan 2018 23:03:56 +0100 Subject: [PATCH 124/993] Add raw --- source/_components/image_processing.seven_segments.markdown | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/source/_components/image_processing.seven_segments.markdown b/source/_components/image_processing.seven_segments.markdown index db0ebf4f1b..13249bc52b 100644 --- a/source/_components/image_processing.seven_segments.markdown +++ b/source/_components/image_processing.seven_segments.markdown @@ -93,6 +93,7 @@ image_processing: With the help of a [template sensor](/components/sensor.template/), the value can be shown as badge. +{% raw %} ```yaml sensor: - platform: template @@ -102,4 +103,4 @@ sensor: friendly_name: 'Ampere' unit_of_measurement: 'A' ``` - +{% endraw %} From 878515d59abb65d2341ef7299caee1383829be72 Mon Sep 17 00:00:00 2001 From: ChristianKuehnel Date: Sat, 20 Jan 2018 08:54:50 +0100 Subject: [PATCH 125/993] component.sensor.miflora - extended documentation regarding Bluetooth backends (#4279) * updated miflora documentation after changes to bluetooth backend y * :pencil2: Small fixes --- source/_components/sensor.miflora.markdown | 25 ++++++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) diff --git a/source/_components/sensor.miflora.markdown b/source/_components/sensor.miflora.markdown index 739ce1e2c0..4d15463a1c 100644 --- a/source/_components/sensor.miflora.markdown +++ b/source/_components/sensor.miflora.markdown @@ -13,8 +13,18 @@ ha_release: 0.29 ha_iot_class: "Local Polling" --- -The `miflora` sensor platform allows one to monitor to plants. The [Mi Flora plant sensor](https://xiaomi-mi.com/sockets-and-sensors/xiaomi-huahuacaocao-flower-care-smart-monitor/) is a small Bluetooth Low Energy device that monitors not only the moisture, but also light, temperature and conductivity. As only a single BLE device can be polled at the same time, the library implements locking to make sure this is the case. +The `miflora` sensor platform allows one to monitor plants. The [Mi Flora plant sensor](https://xiaomi-mi.com/sockets-and-sensors/xiaomi-huahuacaocao-flower-care-smart-monitor/) is a small Bluetooth Low Energy device that monitors not only the moisture but also light, temperature, and conductivity. As only a single BLE device can be polled at the same time, the library implements locking to make sure this is the case. +# Installation +Depending on the operating system you're running, you have to configure the proper Bluetooth backend on your system: + +- On [Hass.io](https://home-assistant.io/hassio/installation/): Miflora will work out of the box. +- On other Linux systems: + - Prefered solution: Install the `bluepy` library (via pip). When using a virtual environment, make sure to use install the library in the right one. +    - Fallback solution: Install `gatttool` via your package manager. Depending on the distribution, the package name might be: `bluez`, `bluetooth`, `bluez-deprecated` +- Windows and MacOS are currently not supported by the [miflora library](https://github.com/open-homeautomation/miflora/). + +# Configuration Start a scan to determine the MAC addresses of the sensor: ```bash @@ -25,6 +35,17 @@ C4:D3:8C:12:4C:57 Flower mate [...] ``` +Or if your distribution is using bluetoothctl: + +```bash +$ bluetoothctl +[bluetooth]# scan on +[NEW] Controller [default] +[NEW] F8:04:33:AF:AB:A2 [TV] UE48JU6580 +[NEW] C4:D3:8C:12:4C:57 Flower mate +``` + + Check for `Flower care` or `Flower mate` entries, those are your sensor. To use your Mi Flora plant sensor in your installation, add the following to your `configuration.yaml` file: @@ -56,7 +77,7 @@ sensor: Note that by default the sensor is only polled once every 15 minutes. This means with the `median: 3` setting will take as least 30 minutes before the sensor will report a value after a Home Assistant restart. As the values usually change very slowly, this isn't a big problem. Reducing polling intervals will have a negative effect on the battery life. -A full configuration example could looks the one below: +A full configuration example could look like the one below: ```yaml # Example configuration.yaml entry From 093a9a664689b709a99832042c25eb92b6f7acce Mon Sep 17 00:00:00 2001 From: Sean Dague Date: Sat, 20 Jan 2018 09:34:20 -0500 Subject: [PATCH 126/993] Update unifi docs to recommend read-only user While doing this, also update the configuration section to current configuration markup best practices, which also fixed a number of inaccuracies with the defaults by cross checking with the source code. Fixes issue home-assistant/home-assistant#11821 --- .../_components/device_tracker.unifi.markdown | 67 +++++++++++++++---- 1 file changed, 53 insertions(+), 14 deletions(-) diff --git a/source/_components/device_tracker.unifi.markdown b/source/_components/device_tracker.unifi.markdown index 5e25b7df5c..25c5bc97c6 100644 --- a/source/_components/device_tracker.unifi.markdown +++ b/source/_components/device_tracker.unifi.markdown @@ -21,24 +21,63 @@ To use this device tracker in your installation, add the following to your `conf # Example configuration.yaml entry device_tracker: - platform: unifi - username: YOUR_ADMIN_USERNAME - password: YOUR_ADMIN_PASSWORD + username: USERNAME + password: PASSWORD ``` -Configuration variables: - -- **host** (*Optional*): The hostname or IP address of your controller. Defaults to `localhost`. -- **port** (*Optional*): The port of your controller's web interface. Defaults to `8443`. -- **username** (*Required*: The username of an user with administrative privileges, usually `admin`. -- **password** (*Required*): The password for your given admin account. -- **site_id** (*Optional*): Allows you to specify a `site_id` for device tracking. Defaults to `default`. Found in the URL of the controller (i.e. https://CONTROLLER:PORT/manage/site/SITE_ID/dashboard). -- **verify_ssl** (*Optional*): Controls if the SSL certificate running on your Unifi webserver must be trusted by a known Certificate Authority on the server running Home Assistant. Defaults to 'True' but can also be a value that points to your custom cert "path/to/custom_cert.pem". -- **detection_time** (*Optional*): The Unifi component will only return devices that have been seen by the controller in the last 180 seconds. You can adjust this threshold with this variable and accepts seconds or `00:00:00` time formats. +{% configuration %} +username: + description: A user on the controller + type: string + required: true +password: + description: The password for the account + type: string + required: true +host: + description: The hostname or IP address of your controller + default: localhost + type: string + required: false +port: + description: The port of your controller's web interface + default: 8443 + type: int + required: false +site_id: + description: for multisite installations, you can specify `site_id` to specify which is used + type: string + required: false + default: default +verify_ssl: + description: whether to do strict validation on SSL certificates of the unifi controller. This can be true/false or the path to a locally trusted certificate to use for verification (i.e. "/path/to/custom_cert.pm") + type: boolean or filename + required: false + default: true +detection_time: + description: How long since the last seen time before the device is marked away, specified in seconds. + type: int + required: optional + default: 300 +{% endconfiguration %} See the [device tracker component page](/components/device_tracker/) for instructions how to configure the people to be tracked. -

-If you decide to install the Unifi Controller on the same system as your Home Assistant, be aware there may be overlap in ports if you have the MQTT component as well. +### {% linkable_title Configuring Users %} + +The Unifi controller allows you to create multiple users on it besides +the main administrator. It is recommended that you create a limitted +user that has `read only` permissions for the unifi device tracker. + +### {% linkable_title Conflicts with MQTT %} + +The Unifi controller can either be a dedicated hardware device +(Unifi's cloud key), or as software any Linux system. If you run the +the Unifi controller on the same operating system as Home Assistant +there may be conflicts in ports if you have the MQTT component as +well. + +It is recommended that you run the Unifi controller in a dedicate +virtual machine to avoid that situation. [Related Issue](https://github.com/home-assistant/home-assistant/issues/10507) -

From 347bca1ea559d9d3934e73fb5933e59270068172 Mon Sep 17 00:00:00 2001 From: Franck Nijhof Date: Sat, 20 Jan 2018 16:16:57 +0100 Subject: [PATCH 127/993] :pencil2: Minor spelling, grammar & Markdown changes --- source/_components/device_tracker.unifi.markdown | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/source/_components/device_tracker.unifi.markdown b/source/_components/device_tracker.unifi.markdown index 25c5bc97c6..f2b5e2a435 100644 --- a/source/_components/device_tracker.unifi.markdown +++ b/source/_components/device_tracker.unifi.markdown @@ -12,7 +12,6 @@ ha_category: Presence Detection ha_release: 0.14 --- - This platform allows you to detect presence by looking at devices connected to a [Ubiquiti](http://ubnt.com/) [Unifi](https://www.ubnt.com/enterprise/#unifi) controller. To use this device tracker in your installation, add the following to your `configuration.yaml` file: @@ -35,7 +34,7 @@ password: type: string required: true host: - description: The hostname or IP address of your controller + description: The hostname or IP address of your controller default: localhost type: string required: false @@ -45,12 +44,12 @@ port: type: int required: false site_id: - description: for multisite installations, you can specify `site_id` to specify which is used + description: For multisite installations, you can specify `site_id` to specify which is used type: string required: false default: default verify_ssl: - description: whether to do strict validation on SSL certificates of the unifi controller. This can be true/false or the path to a locally trusted certificate to use for verification (i.e. "/path/to/custom_cert.pm") + description: Whether to do strict validation on SSL certificates of the Unifi controller. This can be true/false or the path to a locally trusted certificate to use for verification (i.e. "/path/to/custom_cert.pm") type: boolean or filename required: false default: true @@ -66,8 +65,8 @@ See the [device tracker component page](/components/device_tracker/) for instruc ### {% linkable_title Configuring Users %} The Unifi controller allows you to create multiple users on it besides -the main administrator. It is recommended that you create a limitted -user that has `read only` permissions for the unifi device tracker. +the main administrator. It is recommended that you create a limited +user that has `read-only` permissions for the Unifi device tracker. ### {% linkable_title Conflicts with MQTT %} From 02bc68af98c6e5d6719d1df8dde91a4e8b8b0f28 Mon Sep 17 00:00:00 2001 From: DubhAd Date: Sat, 20 Jan 2018 15:18:19 +0000 Subject: [PATCH 128/993] Added note about Android being abandoned (#4473) Directing people to GPS Logger as a possible alternative on Android --- source/_components/device_tracker.owntracks_http.markdown | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/source/_components/device_tracker.owntracks_http.markdown b/source/_components/device_tracker.owntracks_http.markdown index 7e91746e55..718be249ad 100644 --- a/source/_components/device_tracker.owntracks_http.markdown +++ b/source/_components/device_tracker.owntracks_http.markdown @@ -15,6 +15,10 @@ ha_release: 0.55 OwnTracks is a free and open source application that allows you to track your location in Home Assistant. This is a platform that supports OwnTracks via their HTTP publishing method. +

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

+ To integrate Owntracks tracking via HTTP in Home Assistant, add the following section to your `configuration.yaml` file: ```yaml From f6603f4c7152510f175d9d2fa02fdeccdb198fd9 Mon Sep 17 00:00:00 2001 From: DubhAd Date: Sat, 20 Jan 2018 15:18:33 +0000 Subject: [PATCH 129/993] Added note about abandonment of Android (#4472) Directing people to Zanzito since the OwnTracks team have officially abandoned the Android app (see ). I'll also apply a note to the HTTP version. --- source/_components/device_tracker.owntracks.markdown | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/source/_components/device_tracker.owntracks.markdown b/source/_components/device_tracker.owntracks.markdown index f23457ad8d..0bd137c0ab 100644 --- a/source/_components/device_tracker.owntracks.markdown +++ b/source/_components/device_tracker.owntracks.markdown @@ -14,7 +14,11 @@ ha_release: 0.7.4 --- -This platform allows you to detect presence using [Owntracks](http://owntracks.org/). OwnTracks allows users to track their location on Android and iOS phones and publish it to an MQTT broker. This platform will connect to the broker and monitor for new locations. +This platform allows you to detect presence using [Owntracks](http://owntracks.org/). OwnTracks allows users to track their location on iOS phones and publish it to an MQTT broker. This platform will connect to the broker and monitor for new locations. + +

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

This component requires [the MQTT component](/components/mqtt/) to be set up and works very well together with [the zone component](/components/zone/). From 5bc9a6604d62c31f0262275046715275d4ebab3d Mon Sep 17 00:00:00 2001 From: flashoftheblades Date: Sat, 20 Jan 2018 10:26:10 -0500 Subject: [PATCH 130/993] Update variable names for away mode (#4458) The actual variables in the honeywell.py script are looking for 'away_cool_temperature' and 'away_heat_temperature'. --- source/_components/climate.honeywell.markdown | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/_components/climate.honeywell.markdown b/source/_components/climate.honeywell.markdown index 8a50fc5dd6..8104a6a77f 100644 --- a/source/_components/climate.honeywell.markdown +++ b/source/_components/climate.honeywell.markdown @@ -36,5 +36,5 @@ Configuration variables: - **region** (*Optional*): Region identifier (either 'eu' or 'us'). Defaults to 'eu' if not provided. - **scan_interval**(*Optional*): Scan interval is expressed in seconds. Recommended value of 600 seconds. Default value is 120 seconds. Omitting scan_interval may result in too-frequent polling and cause you to rate-limited by Honeywell. - **away_temperature** (*Optional*) (*only for eu region*): Heating setpoint when away mode is on. If omitted it defaults to 16.0 deg C. -- **cool_away_temperature** (*Optional*) (*only for us region*): Cooling setpoint when away mode is on. If omitted it defaults to 30.0 deg C. -- **heat_away_temperature** (*Optional*) (*only for us region*): Heating setpoint when away mode is on. If omitted it defaults to 16.0 deg C. +- **away_cool_temperature** (*Optional*) (*only for us region*): Cooling setpoint when away mode is on. If omitted it defaults to 30.0 deg C. +- **away_heat_temperature** (*Optional*) (*only for us region*): Heating setpoint when away mode is on. If omitted it defaults to 16.0 deg C. From 06e73a8ac9704b5432beb910d75ae95ee9be9e22 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Filip=20Bedn=C3=A1rik?= Date: Sat, 20 Jan 2018 17:09:20 +0100 Subject: [PATCH 131/993] Update holidays python module version to 0.9.3 (#4475) --- source/_components/binary_sensor.workday.markdown | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/_components/binary_sensor.workday.markdown b/source/_components/binary_sensor.workday.markdown index 7730c514fe..0d4782bc12 100644 --- a/source/_components/binary_sensor.workday.markdown +++ b/source/_components/binary_sensor.workday.markdown @@ -28,8 +28,8 @@ binary_sensor: Configuration variables: - **name** (*Optional*): A name for this sensor. Defaults to *Workday Sensor* -- **country** (*Required*): Country code according to [holidays](https://pypi.python.org/pypi/holidays/0.8.1) notation. -- **province** (*Optional*): Province code according to [holidays](https://pypi.python.org/pypi/holidays/0.8.1) notation. Defaults to None. +- **country** (*Required*): Country code according to [holidays](https://pypi.python.org/pypi/holidays/0.9.3) notation. +- **province** (*Optional*): Province code according to [holidays](https://pypi.python.org/pypi/holidays/0.9.3) notation. Defaults to None. - **workdays** (*Optional*): List of workdays. Defaults to `mon`, `tue`, `wed`, `thu`, `fri`. - **excludes** (*Optional*): List of workday excludes. Defaults to `sat`, `sun`, `holiday`. - **days_offset** (*Optional*): Set days offset. Defaults to `0`. From b3c050747e14783cf12755ee67fef2413105c0d7 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Sat, 20 Jan 2018 18:29:57 +0100 Subject: [PATCH 132/993] Add browser as option --- source/developers/server_sent_events.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/developers/server_sent_events.markdown b/source/developers/server_sent_events.markdown index 2f94a0bc8e..fc54b168da 100644 --- a/source/developers/server_sent_events.markdown +++ b/source/developers/server_sent_events.markdown @@ -15,7 +15,7 @@ The URI that is generating the data is `/api/stream`. A requirement on the client-side is existing support for the [EventSource](https://developer.mozilla.org/en-US/docs/Web/API/EventSource) interface. -There are various ways to access the stream. One is `curl`: +There are various ways to access the stream. If you have not set an `api_password` in the [`http`](/components/http/) section of your `configuration.yaml` file then you use your modern browser to read the messages. A command-line option is `curl`: ```bash $ curl -X GET -H "x-ha-access: YOUR_PASSWORD" \ From 779538064b2d359fb6a7e99a0639aa84c888884c Mon Sep 17 00:00:00 2001 From: DubhAd Date: Sat, 20 Jan 2018 19:52:29 +0000 Subject: [PATCH 133/993] Language tweak (#4478) The "only the above URL" lead to some considerable confusion where somebody thought that you couldn't use the other Parameters, not that you had to use those. --- source/_components/device_tracker.gpslogger.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/device_tracker.gpslogger.markdown b/source/_components/device_tracker.gpslogger.markdown index 994b8c2989..909d620aae 100644 --- a/source/_components/device_tracker.gpslogger.markdown +++ b/source/_components/device_tracker.gpslogger.markdown @@ -67,7 +67,7 @@ Add the above URL after you modified it with your settings into the **URL** fiel - It's HIGHLY recommended to use SSL/TLS. - Use the domain that Home Assistant is available on the internet or the public IP address. Can be a local IP address if you are using a VPN setup. - Only remove `[Port]` if your Home Assistant instance is using port 80. Otherwise set it to 8123. -- Click on **Parameters** in the app and you will see all available parameters for the URL. For Home Assistant only the above URL will work. +- For Home Assistant only the above URL, as written, will work - do not add or remove any parameters. - Make sure to include your [API password](/components/http/) if you have configured a password. Add `&api_password=[Your pasword]` to the end of the URL. - You can change the name of your device name by replacing `&device=%SER` with `&device=[Devicename]`. From 4fe223e922b6740e1cb13a18bdfdb374adc2763f Mon Sep 17 00:00:00 2001 From: bkcberry Date: Sat, 20 Jan 2018 13:56:17 -0600 Subject: [PATCH 134/993] Adds Xiaomi double button click example (#4468) * added example for smart button double click * added example for smart button double click --- source/_components/xiaomi_aqara.markdown | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/source/_components/xiaomi_aqara.markdown b/source/_components/xiaomi_aqara.markdown index 2b142c434c..c5cdbcc788 100644 --- a/source/_components/xiaomi_aqara.markdown +++ b/source/_components/xiaomi_aqara.markdown @@ -222,6 +222,25 @@ This example plays the sound of a dog barking when the button is held down and s gw_mac: xxxxxxxxxxxx ``` +### {% linkable_title Double Click on Smart Button %} + +This example toggles the living room lamp on a double click of the button. + +```yaml +- alias: Double Click to toggle living room lamp + trigger: + platform: event + event_type: click + event_data: + entity_id: binary_sensor.switch_158d000xxxxxc2 + click_type: double + action: + service: light.toggle + data: + entity_id: light.living_room_lamp +``` + + ## {% linkable_title Troubleshooting %} ### {% linkable_title Initial setup problem %} From 1f582818fac1000003470a4c864e80560af1c508 Mon Sep 17 00:00:00 2001 From: Frantz Date: Sun, 21 Jan 2018 07:11:40 +0200 Subject: [PATCH 135/993] Enable Daikin autodiscovery (#4483) * Create climate.daikin.markdown * Added the entire Daikin platform and also Daikin sensors docs * Update climate.daikin.markdown * Update daikin.markdown * Update sensor.daikin.markdown * Added-Daikin-autodiscovery-docs --- source/_components/climate.daikin.markdown | 3 ++- source/_components/daikin.markdown | 11 +++++++++-- source/_components/sensor.daikin.markdown | 3 ++- 3 files changed, 13 insertions(+), 4 deletions(-) diff --git a/source/_components/climate.daikin.markdown b/source/_components/climate.daikin.markdown index 5b4c2182a9..116cf08034 100644 --- a/source/_components/climate.daikin.markdown +++ b/source/_components/climate.daikin.markdown @@ -29,7 +29,8 @@ Current temperature is displayed. ### Configuration ### -Manual configuration and customization is possible by using the sample configuration from below: +The component has been integrated with discovery so all your Daikin AC's climate devices can be automatically discovered. +Manual configuration and customization is also possible by using the sample configuration from below: ```yaml # Example configuration.yaml entry diff --git a/source/_components/daikin.markdown b/source/_components/daikin.markdown index 548c05ec31..03a1d59814 100644 --- a/source/_components/daikin.markdown +++ b/source/_components/daikin.markdown @@ -18,13 +18,19 @@ ha_iot_class: "Local Polling" The component integrates Daikin air conditioning systems into Home Assistant. To automatically add all your Daikin devices (ACs and associated sensors) into your Home Assistant installation, add the following to your 'configuration.yaml' file: +```yaml +# Example configuration.yaml entry +daikin: +```

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

+A full manual configuration example is give below: + ```yaml -# Example configuration.yaml entry +# Full manual example configuration.yaml entry daikin: hosts: - 192.168.4.161 @@ -38,7 +44,8 @@ daikin: {% configuration %} hosts: description: List of IP addresses or hostnames. - required: true + required: false + default: All discovered hosts type: array monitored_conditions: description: List of items you want to monitor for each device. diff --git a/source/_components/sensor.daikin.markdown b/source/_components/sensor.daikin.markdown index dfb6978640..5e8967f99b 100644 --- a/source/_components/sensor.daikin.markdown +++ b/source/_components/sensor.daikin.markdown @@ -25,7 +25,8 @@ The sensor component integrates Daikin air conditioning systems into Home Assist ### Configuration ### -Manual configuration and customization is possible by using the sample configuration from below: +The component has been integrated with discovery so all your Daikin AC's climate devices can be automatically discovered. +Manual configuration and customization is also possible by using the sample configuration from below: ```yaml # Example configuration.yaml entry From 82ec418c2dc576f6bf054d5335a47ef4e1adaccf Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Sat, 20 Jan 2018 21:27:15 -0800 Subject: [PATCH 136/993] Add blog post: clarification about emulated hue --- ...-01-21-clarification-emulated-hue.markdown | 34 +++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 source/_posts/2018-01-21-clarification-emulated-hue.markdown diff --git a/source/_posts/2018-01-21-clarification-emulated-hue.markdown b/source/_posts/2018-01-21-clarification-emulated-hue.markdown new file mode 100644 index 0000000000..4af75e1128 --- /dev/null +++ b/source/_posts/2018-01-21-clarification-emulated-hue.markdown @@ -0,0 +1,34 @@ +--- +layout: post +title: "Clarification about Emulated Hue" +description: "The Emulated Hue component is not going to be removed nor will we ever remove any functionality from Home Assistant to push you to subscribe to the Community Support Package." +date: 2018-01-21 01:00:00 +date_formatted: "January 21, 2018" +author: Paulus Schoutsen +author_twitter: balloob +comments: true +categories: Public Service Announcement +--- + +There are some misconceptions floating about the future of the Emulated Hue component and I would like to set it straight. **The Emulated Hue component is not going to be removed nor will we ever remove any functionality from Home Assistant to push you to support the Home Assistant project by subscribing to the Community Support Package.** + +The reason people are concerned about the future of the Emulated Hue component is because of a poor choice of words in a deprecation message. This message was [introduced a year ago][pr2] when we deprecated the config option `type: alexa` for the Emulated Hue component: + +> Alexa type is deprecated and will be removed in a future version + +That config option should never have been called `type: alexa` but instead have been called `mode: legacy`. If you think about it, why would emulating something even have different modes it emulates based on the consumer? That means that one of the two emulation modes is incorrect. + +The old implementation was not 100% correct. It was correct enough to work with Alexa (the original target) but not with Google Home. When fixing Emulated Hue we added `type: alexa` to re-enable the old implementation so that people did not have to go through the trouble to re-add their Alexa devices. The option was deprecated to indicate that we would remove the incorrect emulation in the future. However, we forgot about actually following through with that. + +The mistake we made was calling the correct mode `google_home` although it had nothing to do with Google Home. It confused people and they kept adding `type: alexa` to their configuration, triggering the deprecation warning. + +The warning will be updated starting Home Assistant 0.62 and will also include a link to this blog post. + +More info: + +- To read about what was incorrect in the first version of Emulated Hue, take a look at the PR fixing it: [Re-org emulated_hue and fix google home][pr1]. +- Read the [documentation on how to configure Emulated Hue][eh-conf] + +[pr1]: https://github.com/home-assistant/home-assistant/pull/4708 +[pr2]: https://github.com/home-assistant/home-assistant/pull/5549 +[eh-conf]: https://home-assistant.io/components/emulated_hue/#configuration From f5b4dee474a5f08ca8899077a511c35470acfd6a Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Sat, 20 Jan 2018 22:54:09 -0800 Subject: [PATCH 137/993] Update 2018-01-21-clarification-emulated-hue.markdown --- source/_posts/2018-01-21-clarification-emulated-hue.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_posts/2018-01-21-clarification-emulated-hue.markdown b/source/_posts/2018-01-21-clarification-emulated-hue.markdown index 4af75e1128..11d57e37c5 100644 --- a/source/_posts/2018-01-21-clarification-emulated-hue.markdown +++ b/source/_posts/2018-01-21-clarification-emulated-hue.markdown @@ -10,7 +10,7 @@ comments: true categories: Public Service Announcement --- -There are some misconceptions floating about the future of the Emulated Hue component and I would like to set it straight. **The Emulated Hue component is not going to be removed nor will we ever remove any functionality from Home Assistant to push you to support the Home Assistant project by subscribing to the Community Support Package.** +There are some misconceptions floating around about the future of the Emulated Hue component and I would like to set the record straight. **The Emulated Hue component is not going to be removed nor will we ever remove any functionality from Home Assistant to push you to support the Home Assistant project by subscribing to the Community Support Package.** The reason people are concerned about the future of the Emulated Hue component is because of a poor choice of words in a deprecation message. This message was [introduced a year ago][pr2] when we deprecated the config option `type: alexa` for the Emulated Hue component: From 22529d403210467053ecc3b28e0f3002254c4f3a Mon Sep 17 00:00:00 2001 From: Sean Dague Date: Sun, 21 Jan 2018 03:40:27 -0500 Subject: [PATCH 138/993] Add docs for waterfurnace component (#4467) * Add docs for waterfurnace component * address changes from review * add further review comments --- source/_components/waterfurnace.markdown | 68 ++++++++++++++++++ .../images/supported_brands/waterfurnace.png | Bin 0 -> 6985 bytes 2 files changed, 68 insertions(+) create mode 100644 source/_components/waterfurnace.markdown create mode 100644 source/images/supported_brands/waterfurnace.png diff --git a/source/_components/waterfurnace.markdown b/source/_components/waterfurnace.markdown new file mode 100644 index 0000000000..b747ff597a --- /dev/null +++ b/source/_components/waterfurnace.markdown @@ -0,0 +1,68 @@ +--- +layout: page +title: "WaterFurnace" +description: "Instructions on how to integrate WaterFurnace Geothermal System into Home Assistant." +date: 2018-01-19 17:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: waterfurnace.png +ha_category: Hub +ha_release: 0.62 +ha_iot_class: "Cloud Polling" +--- + +The `waterfurnace` component communicates with the WaterFurnace +Symphony website's WebSocket to show you many of the sensors in your +system. While not an official API, this is the same backend the +Symphony website is based on, and should be reasonably stable. + +The sensors provided include: + - Thermostat Setpoint + - Thermostat Current Temp + - Leaving Air Temp + - Entering Water Loop Temp + - Current Humidity + - Current Humidity Setpoint + - Total system power (in Watts) + - Furnace Mode + +To use Waterfurnace in your installation, add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +waterfurnace: + username: you@example.com + password: secr3tpassword + unit: 0123456789AB +``` + +{% configuration %} +username: + description: The email address for your Symphony WaterFurnace account + required: true + type: string +password: + description: The password for your Symphony WaterFurnace account + required: true + type: string +unit: + description: The unit serial number for your WaterFurnace + required: true + type: string +{% endconfiguration %} + + +#### {% linkable_title Limitations %} + +The WebSocket interface used by this module requires active polling, +otherwise the server side shuts down the connection. By default, this +polling is happening every 10 seconds. All sensors are updated during +every polling cycle. + +While this is communicating with a thermostat, geothermal systems +operate most efficiently when setbacks are not used, and the home is +kept at a constant temperature. It remains useful to collect the data +from the system to understand it's performance, but a full climate +interface won't be implemented. diff --git a/source/images/supported_brands/waterfurnace.png b/source/images/supported_brands/waterfurnace.png new file mode 100644 index 0000000000000000000000000000000000000000..0d2f560a1e52e5d1acc3d3d14187a06e789b9da6 GIT binary patch literal 6985 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 z Date: Sun, 21 Jan 2018 03:47:57 -0500 Subject: [PATCH 139/993] Grammar Updates (#4481) The grammar police came by and fixed some it. --- source/_docs/installation/hassbian/customization.markdown | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/_docs/installation/hassbian/customization.markdown b/source/_docs/installation/hassbian/customization.markdown index 68a544461d..dd33b47401 100644 --- a/source/_docs/installation/hassbian/customization.markdown +++ b/source/_docs/installation/hassbian/customization.markdown @@ -21,8 +21,8 @@ To view the available packages run `hassbian-config show` and `sudo hassbian-con - Install Libcec. Adds local [HDMI CEC support][cec]. *This scipt is currently brooken upstream since it currently doesn't build properly for Python >3.4* - Install Samba. Allows anyone on your network to edit your configuration from any computer. This share is unsecured and it's usage is not recommended if you share your network with others. - Install Tradfri. Installs dependencies for using IKEA Trådfri. - - Install Duck DNS auto renewal. This script adds an cron job to auto update you the WAN IP address for the defined domain. Before running this script you should already have an Duck DNS account, during the installation you will be asked to supply your domain name and the token for your account. - - Install an web terminal for easy access to ssh in an web browser. This script installs an web terminal called 'shellinabox' to you system that give you SSH access in you web browser. + - Install Duck DNS auto renewal. This script adds a cron job to auto update the WAN IP address for the defined domain. Before running this script you should already have an Duck DNS account. During the installation you will be asked to supply your domain name and the token for your account. + - Install a web terminal for easy access to ssh in any web browser. This script installs a web terminal called 'shellinabox' on your system that gives you SSH access in your web browser. #### Upgrade scripts To view the available packages run `hassbian-config show` and `sudo hassbian-config upgrade PACKAGENAME`. From 2c61569273414a21e3ea116d99f0c23c32dbfe04 Mon Sep 17 00:00:00 2001 From: DubhAd Date: Sun, 21 Jan 2018 08:51:59 +0000 Subject: [PATCH 140/993] Static IP allocation note (#4480) The guide forgets to call out that the IP for the system must be fixed, which has tripped up more than a few --- source/_addons/duckdns.markdown | 2 ++ 1 file changed, 2 insertions(+) diff --git a/source/_addons/duckdns.markdown b/source/_addons/duckdns.markdown index ed65a626c7..297cbb8fd9 100644 --- a/source/_addons/duckdns.markdown +++ b/source/_addons/duckdns.markdown @@ -47,3 +47,5 @@ If you use a port other than `8123` or an SSL proxy, change the port number acco ## {% linkable_title Router configuration %} You'll need to forward the port you listed in your configuration (8123 in the example above) on your router to your Home Assistant system. You can find guides on how to do this on [Port Forward](https://portforward.com/) - noting that you'll only need to forward the TCP port. + +Ensure that you allocate the Home Assistant system a fixed IP on your network before you configure port forwarding. You can do this either on the computer itself (see the [install guide](/hassio/installation/) or via a static lease on your router. From 9f359d5925af098031a1e651faaff34c8540f563 Mon Sep 17 00:00:00 2001 From: Ioan Loosley Date: Sun, 21 Jan 2018 16:33:37 +0000 Subject: [PATCH 141/993] Fixing Daikin docs (#4486) * Fixed Broken images, Added Sidebar and put them in the right catagorys * Forgot the image --- source/_components/climate.daikin.markdown | 4 +- source/_components/daikin.markdown | 6 +- source/_components/sensor.daikin.markdown | 6 +- source/images/daikin.svg | 95 ++++++++++++++++++++++ 4 files changed, 103 insertions(+), 8 deletions(-) create mode 100644 source/images/daikin.svg diff --git a/source/_components/climate.daikin.markdown b/source/_components/climate.daikin.markdown index 5b4c2182a9..0eebf31628 100644 --- a/source/_components/climate.daikin.markdown +++ b/source/_components/climate.daikin.markdown @@ -3,11 +3,11 @@ layout: page title: "Daikin AC" description: "Instructions on how to integrate Daikin AC(s) with Home Assistant." date: 2017-12-03 05:00 -sidebar: false +sidebar: true comments: false sharing: true footer: true -logo: N/A +logo: daikin.svg ha_category: Climate ha_release: 0.59 ha_iot_class: "Local Polling" diff --git a/source/_components/daikin.markdown b/source/_components/daikin.markdown index 548c05ec31..322e0b69ad 100644 --- a/source/_components/daikin.markdown +++ b/source/_components/daikin.markdown @@ -3,12 +3,12 @@ layout: page title: "Daikin AC" description: "Instructions on how to integrate Hive devices with Home Assistant." date: 2017-12-10 21:00 -sidebar: false +sidebar: true comments: false sharing: true footer: true -logo: N/A -ha_category: Climate +logo: daikin.svg +ha_category: Hub ha_release: 0.59 ha_iot_class: "Local Polling" --- diff --git a/source/_components/sensor.daikin.markdown b/source/_components/sensor.daikin.markdown index dfb6978640..b1d82211f3 100644 --- a/source/_components/sensor.daikin.markdown +++ b/source/_components/sensor.daikin.markdown @@ -3,12 +3,12 @@ layout: page title: "Daikin AC" description: "Instructions on how to integrate Daikin AC(s) with Home Assistant." date: 2017-12-03 05:00 -sidebar: false +sidebar: True comments: false sharing: true footer: true -logo: N/A -ha_category: Climate +logo: daikin.svg +ha_category: Sensor ha_release: 0.59 ha_iot_class: "Local Polling" --- diff --git a/source/images/daikin.svg b/source/images/daikin.svg new file mode 100644 index 0000000000..b6f36d9904 --- /dev/null +++ b/source/images/daikin.svg @@ -0,0 +1,95 @@ + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From a7a467065d1a2b2561b76a67f3072444bcf1b800 Mon Sep 17 00:00:00 2001 From: Frantz Date: Sun, 21 Jan 2018 18:34:19 +0200 Subject: [PATCH 142/993] Update climate.daikin.markdown (#4482) According to https://community.home-assistant.io/t/daikin-component-no-climate-entities-created-task-exception/39608/26 BRP069A42 does not support setting of fan speed or fan swing mode. --- source/_components/climate.daikin.markdown | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/source/_components/climate.daikin.markdown b/source/_components/climate.daikin.markdown index 116cf08034..52e3f5b525 100644 --- a/source/_components/climate.daikin.markdown +++ b/source/_components/climate.daikin.markdown @@ -17,14 +17,15 @@ ha_iot_class: "Local Polling" The climate component integrates Daikin air conditioning systems into Home Assistant, enabling control of setting the following parameters: - **mode** (cool, heat, dry, fan only or auto) -- **fan speed** +- **fan speed** (on supported models) - **target temperature** - **swing mode** (on supported models) Current temperature is displayed.

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

### Configuration ### From 1330075f566482cd7ead9ca8eeb43ddcec519b2c Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Sun, 21 Jan 2018 17:34:44 +0100 Subject: [PATCH 143/993] Extend and update API documentation (#4485) --- source/_components/api.markdown | 25 +++++++++++++++++++++++ source/_components/http.markdown | 4 ++-- source/_components/websocket_api.markdown | 25 +++++++++++++++++++++++ source/developers/api.markdown | 5 ++++- source/developers/python_api.markdown | 2 +- source/developers/rest_api.markdown | 2 ++ source/developers/websocket_api.markdown | 12 ++++++----- 7 files changed, 66 insertions(+), 9 deletions(-) create mode 100644 source/_components/api.markdown create mode 100644 source/_components/websocket_api.markdown diff --git a/source/_components/api.markdown b/source/_components/api.markdown new file mode 100644 index 0000000000..cdac55a1b4 --- /dev/null +++ b/source/_components/api.markdown @@ -0,0 +1,25 @@ +--- +layout: page +title: "API" +description: "Instructions how to setup the RESTful API within Home Assistant." +date: 2018-01-21 08:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: home-assistant.png +ha_category: "Other" +--- + +The `api` component exposes a RESTful API and allows one to interact with a Home Assistant instance that is running headless. This component depends on the [`http` component](/components/http/). + +

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

+ +```yaml +# Example configuration.yaml entry +api: +``` + +For details to use the API, please refer to the [REST API](/developers/rest_api/) or the [Python REST API documentation](/developers/python_api/) in the "Developer" section. diff --git a/source/_components/http.markdown b/source/_components/http.markdown index 91c25d7058..0a6d20b2cd 100644 --- a/source/_components/http.markdown +++ b/source/_components/http.markdown @@ -65,9 +65,9 @@ http: The [Set up encryption using Let's Encrypt](/blog/2015/12/13/setup-encryption-using-lets-encrypt/) blog post gives you details about the encryption of your traffic using free certificates from [Let's Encrypt](https://letsencrypt.org/). -Or use a self signed certificate following the instructions here [Self-signed certificate for SSL/TLS](/docs/ecosystem/certificates/tls_self_signed_certificate/) +Or use a self signed certificate following the instructions here [Self-signed certificate for SSL/TLS](/docs/ecosystem/certificates/tls_self_signed_certificate/). -On top of the `http` component is a [REST API](/developers/rest_api/) and a [Python API](/developers/python_api/) available. There is also support for [Server-sent events](/developers/server_sent_events/). +On top of the `http` component is a [REST API](/developers/rest_api/), [Python API](/developers/python_api/) and [WebSocket API](/developers/websocket_api/) available. There is also support for [Server-sent events](/developers/server_sent_events/). The `http` platforms are not real platforms within the meaning of the terminology used around Home Assistant. Home Assistant's [REST API](/developers/rest_api/) sends and receives messages over HTTP. diff --git a/source/_components/websocket_api.markdown b/source/_components/websocket_api.markdown new file mode 100644 index 0000000000..4eff8a8a3f --- /dev/null +++ b/source/_components/websocket_api.markdown @@ -0,0 +1,25 @@ +--- +layout: page +title: "Websocket API" +description: "Instructions how to setup the WebSocket API within Home Assistant." +date: 2018-01-21 08:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: home-assistant.png +ha_category: "Other" +--- + +The `websocket_api` component set up a WebSocket API and allows one to interact with a Home Assistant instance that is running headless. This component depends on the [`http` component](/components/http/). + +

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

+ +```yaml +# Example configuration.yaml entry +websocket_api: +``` + +For details to use the WebSocket API, please refer to the [WebSocket API documentation](/developers/websocket_api/) . diff --git a/source/developers/api.markdown b/source/developers/api.markdown index b46b1fdc4d..999647d038 100644 --- a/source/developers/api.markdown +++ b/source/developers/api.markdown @@ -12,7 +12,10 @@ footer: true Home Assistant provides various APIs. For detail please refer to [Home Assistant API](https://dev-docs.home-assistant.io/en/dev/) documentation. * [Python API](https://dev-docs.home-assistant.io/) - * [Websocket API](/developers/websocket_api/) + * [WebSocket API](/developers/websocket_api/) * [REST API](/developers/rest_api/) * [Python REST API](/developers/python_api/) * [Server-sent events](/developers/server_sent_events/) + +If you are not using the [`frontend`](/components/frontend/) in your setup then you need to enable the components by adding them to your `configuration.yaml` file. E.g., [`websocket_api:`](/components/websocket_api/) for the WebSocket API or [`api:`](/components/api/) for the [REST API](/developers/rest_api/) and the [Python REST API](/developers/python_api/). + diff --git a/source/developers/python_api.markdown b/source/developers/python_api.markdown index 2e752f80b4..818bb8d077 100644 --- a/source/developers/python_api.markdown +++ b/source/developers/python_api.markdown @@ -13,7 +13,7 @@ See the [developer documentation][devdocs] for a full overview of the documentat [devdocs]: https://dev-docs.home-assistant.io/en/master/api/homeassistant.html#module-homeassistant.remote -In the package [`homeassistant.remote`](https://github.com/home-assistant/home-assistant/blob/master/homeassistant/remote.py) a Python API on top of the [HTTP API](/developers/api/) can be found. +In the package [`homeassistant.remote`](https://github.com/home-assistant/home-assistant/blob/master/homeassistant/remote.py) a Python API on top of the [HTTP API](/developers/api/) can be found. If you are not using the [`frontend`](/components/frontend/) in your setup then you need to add the [`api` component](/components/api/) to your `configuration.yaml` file to use the Python Remote API. A simple way to get all current entities is to visit the "Set State" page in the "Developer Tools". For the examples below just choose one from the available entries. Here the sensor `sensor.office_temperature` and the switch `switch.livingroom_pin_2` are used. diff --git a/source/developers/rest_api.markdown b/source/developers/rest_api.markdown index cf850cfbec..bd9fc8f48c 100644 --- a/source/developers/rest_api.markdown +++ b/source/developers/rest_api.markdown @@ -16,6 +16,8 @@ Home Assistant runs a web server accessible on port 8123. The API accepts and returns only JSON encoded objects. All API calls have to be accompanied by the header `X-HA-Access: YOUR_PASSWORD` (YOUR_PASSWORD as specified in your `configuration.yaml` file in the [`http:` section](/components/http/)). +If you are not using the [`frontend`](/components/frontend/) in your setup then you need to add the [`api` component](/components/api/) to your `configuration.yaml` file. + There are multiple ways to consume the Home Assistant Rest API. One is with `curl`: ```bash diff --git a/source/developers/websocket_api.markdown b/source/developers/websocket_api.markdown index 3cf5796c1b..46361af809 100644 --- a/source/developers/websocket_api.markdown +++ b/source/developers/websocket_api.markdown @@ -17,16 +17,18 @@ Home Assistant contains a WebSocket API. This API can be used to stream informat Connect your websocket implementation to `ws://localhost:8123/api/websocket`. +If you are not using the [`frontend`](/components/frontend/) in your setup then you need to add the [`websocket_api` component](/components/websocket_api/) to your `configuration.yaml` file to use the WebSocket API. + ## {% linkable_title Server states %} - 1. Client connects + 1. Client connects. 2. Authentication phase starts - - If no further authentication necessary for the user: go to 3 - - Server sends `auth_required` message - - Client sends `auth` message + - If no further authentication necessary for the user: go to 3. + - Server sends `auth_required` message. + - Client sends `auth` message. - If `auth` message correct: go to 3. - Server sends `auth_invalid`. Go to 6. - 3. Send `auth_ok` message + 3. Send `auth_ok` message. 4. Authentication phase ends. 5. Command phase starts. 1. Client can send commands. From 4e8718b1234caef56b2c5fcb3bd2dda2ed4236fc Mon Sep 17 00:00:00 2001 From: Franck Nijhof Date: Sun, 21 Jan 2018 17:36:38 +0100 Subject: [PATCH 144/993] :white_check_mark: Various markdown, spelling, and grammar fixes (#4457) --- source/_addons/cec_scan.markdown | 2 +- source/_addons/check_config.markdown | 2 +- source/_addons/configurator.markdown | 14 ++++++------ source/_addons/dnsmasq.markdown | 6 ++--- source/_addons/git_pull.markdown | 2 +- source/_addons/google_assistant.markdown | 11 ++++----- source/_addons/homematic.markdown | 14 ++++++------ source/_addons/lets_encrypt.markdown | 4 ++-- source/_addons/mariadb.markdown | 2 +- source/_addons/mosquitto.markdown | 8 +++---- source/_addons/nginx_proxy.markdown | 5 ++-- source/_addons/rpc_shutdown.markdown | 10 ++++---- source/_addons/samba.markdown | 8 +++---- source/_addons/ssh.markdown | 8 +++---- source/_addons/tellstick.markdown | 29 ++++++++++++------------ 15 files changed, 61 insertions(+), 64 deletions(-) diff --git a/source/_addons/cec_scan.markdown b/source/_addons/cec_scan.markdown index 4c048eff15..a17d0ff09d 100644 --- a/source/_addons/cec_scan.markdown +++ b/source/_addons/cec_scan.markdown @@ -9,4 +9,4 @@ sharing: true footer: true --- -Help you to discover the HDMI CEC address. Start the add-on and look into log to see all connected device on HDMI. +Help you to discover the HDMI CEC address. Start the add-on and look into the log to see all connected device on HDMI. diff --git a/source/_addons/check_config.markdown b/source/_addons/check_config.markdown index 0b00f1b147..f10f69848f 100644 --- a/source/_addons/check_config.markdown +++ b/source/_addons/check_config.markdown @@ -9,7 +9,7 @@ sharing: true footer: true --- -You can use this addon to check whether your configuration files are valid against the new version of Home Assistant before you actually update your Home Assistant installation. This will help you avoid errors due to breaking changes, resulting in an smooth update. +You can use this addon to check whether your configuration files are valid against the new version of Home Assistant before you actually update your Home Assistant installation. This addon will help you avoid errors due to breaking changes, resulting in a smooth update. ```json { diff --git a/source/_addons/configurator.markdown b/source/_addons/configurator.markdown index 97640ebe20..4b91a46b66 100644 --- a/source/_addons/configurator.markdown +++ b/source/_addons/configurator.markdown @@ -11,7 +11,7 @@ featured: true og_image: /images/hassio/screenshots/addon-hass-configurator.png --- -As long as a fully featured configuration GUI for Home Assistant is still under development, you can use this add-on to add a browser based file-editor to your Hass.IO installation. By default it will listen on port `3218` of the host Hass.IO is running on. +As long as a fully featured configuration GUI for Home Assistant is still under development, you can use this add-on to add a browser-based file-editor to your Hass.IO installation. By default it will listen on port `3218` of the host Hass.IO is running on. More information and a standalone version for regular Home Assistant installations can be found in the [GitHub repository][code]. @@ -27,8 +27,8 @@ Screenshot of the HASS Configurator. - Web-Based editor to modify your files with syntax highlighting. - Upload and download files. - Stage and commit changes in Git repositories, create and switch between branches, push to remotes. -- Lists of available triggers, events, entities, conditions and services. Selected element gets inserted into the editor at the last cursor position. -- Restart Home Assistant directly with the click of a button. Reloading groups, automations etc. can be done as well. An API-password is required. +- Lists of available triggers, events, entities, conditions, and services. The selected element gets inserted into the editor at the last cursor position. +- Restart Home Assistant directly with the click of a button. Reloading groups, automations, etc. can be done as well. An API-password is required. - SSL support. - Optional authentication and IP filtering for added security. - Direct links to Home Assistant documentation and icons. @@ -55,15 +55,15 @@ Screenshot of the HASS Configurator. - **username** (*Optional*): Set a username to access your configuration is protected. - **password** (*Required*): Set a password for access. - **ssl** (*Optional*): Enable or Disable SSL for the editor. -- **allowed_networks** (*Optional*): Limit access to the configurator by adding allowed IP addresses / networks to the list. +- **allowed_networks** (*Optional*): Limit access to the configurator by adding allowed IP addresses/networks to the list. - **banned_ips** (*Optional*): List of statically banned IP addresses. - **banlimit** (*Optional*): Ban access from IPs after `banlimit` failed login attempts. The default value `0` disables this feature. Restart the add-on to clear the list of banned IP addresses. - **ignore_pattern** (*Optional*): Files and folders to ignore in the UI. -- **dirsfirst** (*Optional*): List directories before files in the filebrowser. +- **dirsfirst** (*Optional*): List directories before files in the file browser. ### {% linkable_title Embedding into Home-Assistant %} -Using the Home Assistant component [panel_iframe](https://home-assistant.io/components/panel_iframe/) it is possible to embed the configurator directly into Home Assistant, allowing you to modify your configuration within the Home Assistant frontend. +Using the Home Assistant component [panel_iframe](https://home-assistant.io/components/panel_iframe/) it is possible to embed the configurator directly into Home Assistant, allowing you to modify your configuration from within the Home Assistant frontend. An example configuration would look like this: @@ -76,5 +76,5 @@ panel_iframe: ```

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

diff --git a/source/_addons/dnsmasq.markdown b/source/_addons/dnsmasq.markdown index 586a035f8f..6ae42294f5 100644 --- a/source/_addons/dnsmasq.markdown +++ b/source/_addons/dnsmasq.markdown @@ -30,7 +30,7 @@ Setup and manage a [Dnsmasq](http://thekelleys.org.uk/dnsmasq/doc.html) DNS serv Configuration variables: -- **defaults** (*Required*): A list of dns server to forward default requests. +- **defaults** (*Required*): A list of DNS servers to forward default requests to. - **forwards** (*Optional*): A list of domains that will forward to a specific server. -- **hosts** (*Optional*): A list of hosts to resolve it static. -- **interface** (*Optional*): If a interface is set, it listen only on this interface. Need to set for resinos. Normally is `eth0` for ethernet wired connection and `wlan0` for wireless connection. +- **hosts** (*Optional*): A list of hosts to resolve statically. +- **interface** (*Optional*): If an interface is set, it listens only on this interface. Needs to be set for ResinOS. Normally is `eth0` for ethernet wired connection and `wlan0` for wireless connection. diff --git a/source/_addons/git_pull.markdown b/source/_addons/git_pull.markdown index e482db9509..8d42d8ab82 100644 --- a/source/_addons/git_pull.markdown +++ b/source/_addons/git_pull.markdown @@ -45,7 +45,7 @@ Load and update configuration files for Home Assistant from a GIT repository. * **rsa** The protocol is typically known by the suffix of the private key --e.g., a key file named `id_rsa` will be a private key using "rsa" protocol. - +

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

diff --git a/source/_addons/google_assistant.markdown b/source/_addons/google_assistant.markdown index 21c4c8b8af..ac0765bc51 100644 --- a/source/_addons/google_assistant.markdown +++ b/source/_addons/google_assistant.markdown @@ -11,7 +11,7 @@ featured: true ---

- If you are wanting to integrate your Google Home, or mobile phone running Google Assistant, with Home Assistant then you want the [Google Assistant component](https://home-assistant.io/components/google_assistant/). + If you want to integrate your Google Home, or mobile phone running Google Assistant, with Home Assistant, then you want the [Google Assistant component](https://home-assistant.io/components/google_assistant/).

[Google Assistant][GoogleAssistant] is an AI-powered voice assistant that runs on the Raspberry Pi and x86 platforms and interact via the [DialogFlow][comp] integration with Home-Assistant. You can also use [Google Actions][GoogleActions] to extend its functionality. @@ -19,8 +19,8 @@ featured: true To enable access to the Google Assistant API, do the following: 1. In the [Cloud Platform Console][project], go to the Projects page. Select an existing project or create a new project -2. Open the project. In the top of the page search for Google Assistant API or use [this link][API] and enable it. -3. Create an [OAuth Client ID][oauthclient], pick type "Other", click "Create" and download the JSON file by clicking the Download JSON button on the right side. +1. Open the project. In the top of the page search for Google Assistant API or use [this link][API] and enable it. +1. Create an [OAuth Client ID][oauthclient], pick type "Other", click "Create" and download the JSON file by clicking the Download JSON button on the right side. Now install and activate the [Samba] add-on so you can upload your credential file. Connect to the "share" Samba share and copy your credentials over. Name the file `google_assistant.json`. @@ -52,9 +52,9 @@ Find the microphone and speakers that you want to use and note down their device The next step is to authenticate your Google account with Google Assistant. Start the add-on and click on the "OPEN WEB UI" button to start authentication. -### Add-On configuration +### Add-on configuration -Configuration example that uses the USB microphone and use the built-in headset audio output on the Raspberry Pi. Note that card and device numbers can differ on your device. +Configuration example that uses the USB microphone and the built-in headset audio output on the Raspberry Pi. Note that card and device numbers can differ on your device. ```json { @@ -73,7 +73,6 @@ Configuration variables: Use the Home Assistant [DialogFlow component][comp] to integrate the add-on into Home Assistant. - [GoogleAssistant]: https://assistant.google.com/ [GoogleActions]: https://actions.google.com/ [Samba]: /addons/samba/ diff --git a/source/_addons/homematic.markdown b/source/_addons/homematic.markdown index aa1137abd0..8cf3c3b9b3 100644 --- a/source/_addons/homematic.markdown +++ b/source/_addons/homematic.markdown @@ -9,9 +9,9 @@ sharing: true footer: true --- -Set up a [HomeMatic](https://github.com/eq-3/occu) hardware layer. At the moment we don't support hmIP but that is in progress. For learning and handling devices use our internal homematic panel and services (in progress) or use [Homematic-Manager](https://github.com/hobbyquaker/homematic-manager) > 2.0. +Set up a [HomeMatic](https://github.com/eq-3/occu) hardware layer. At the moment we don't support hmIP, but that is in progress. For learning and handling devices use our internal HomeMatic panel and services (in progress) or use [Homematic-Manager](https://github.com/hobbyquaker/homematic-manager) > 2.0. -The logic layer will be Home-Assistant. There is no ReGa or other logic layer installed. You can't import exists configuration, you need new learn it into Home-Assistant. +The logic layer will be Home-Assistant. There is no ReGa or other logic layer installed. You can't import an existing configuration, you'll need re-learn it into Home-Assistant. Follow devices will be supported and tested: - [HM-MOD-RPI-PCB](https://www.elv.ch/homematic-funkmodul-fuer-raspberry-pi-bausatz.html) @@ -42,13 +42,13 @@ Configuration variables: - **wired_enable** (*Require*): Boolean. Enable or disable BidCoS-Wired. For RF devices -- **type** (*Require*): Device type for RFD service. Look into handbook of your device. -- **device** (*Require*): Device on host. +- **type** (*Require*): Device type for RFD service. Look into the manual of your device. +- **device** (*Require*): Device on the host. For RF devices -- **serial** (*Require*): Serial number of device. +- **serial** (*Require*): Serial number of the device. - **key** (*Require*): Encrypted key. -- **ip** (*Require*): IP address of lan gateway. +- **ip** (*Require*): IP address of LAN gateway. ## {% linkable_title Home Assistant configuration %} @@ -64,7 +64,7 @@ homematic: ## {% linkable_title Raspberry Pi3 %} -With HM-MOD-PRI-PCB you need add follow into your `config.txt` on boot partition: +With HM-MOD-PRI-PCB you need to add follow into your `config.txt` on boot partition: ``` dtoverlay=pi3-miniuart-bt ``` diff --git a/source/_addons/lets_encrypt.markdown b/source/_addons/lets_encrypt.markdown index bf6845005f..fe3894e6f8 100644 --- a/source/_addons/lets_encrypt.markdown +++ b/source/_addons/lets_encrypt.markdown @@ -14,7 +14,7 @@ featured: false You should not use this if you are also using the [DuckDNS add-on]. The DuckDNS add-on has integrated Let's Encrypt support.

-Setup and manage a [Let's Encrypt](https://letsencrypt.org/) certificate. This will create a certificate on the first run and will auto-renew if the certificate is within 30 days of expiration. +Setup and manage a [Let's Encrypt](https://letsencrypt.org/) certificate. This addon will create a certificate on the first run and will auto-renew if the certificate is within 30 days of expiration. ```json { @@ -39,6 +39,6 @@ http: ssl_key: /ssl/privkey.pem ``` -If you use another port such as `8123` or a SSL proxy, change the port number. +If you use another port such as `8123` or an SSL proxy, change the port number. [DuckDNS add-on]: /addons/duckdns/ diff --git a/source/_addons/mariadb.markdown b/source/_addons/mariadb.markdown index b7882dd2c6..673857de06 100644 --- a/source/_addons/mariadb.markdown +++ b/source/_addons/mariadb.markdown @@ -9,7 +9,7 @@ sharing: true footer: true --- -Set up a [mariadb](https://mariadb.org/) SQL server. It supports multiple databases, users and permission settings. If you want to only connect from inside home assistant use `core-mariadb` as the host address. +Set up a [mariadb](https://mariadb.org/) SQL server. It supports multiple databases, users, and permission settings. If you want to only connect from inside home assistant use `core-mariadb` as the host address. ```json { diff --git a/source/_addons/mosquitto.markdown b/source/_addons/mosquitto.markdown index 5512542ed2..de3df29894 100644 --- a/source/_addons/mosquitto.markdown +++ b/source/_addons/mosquitto.markdown @@ -35,10 +35,10 @@ Make sure you use logins and disable anonymous access if you want to secure the Configuration variables: -- **plain** (*Optional*): Listen to broker on port 1883 without SSL/TLS. Defaults to `true`. -- **ssl** (*Optional*): Listen to broker on port 8883 with SSL/TLS. This requires certificates. Defaults to `false`. -- **anonymous** (*Optional*): Allow anonymous connection. If *logins* is set, anonymous user can only read data. Defaults to `true`. -- **logins** (*Optional*): A list of user that will be created with *username* and *password*. +- **plain** (*Optional*): Listen on port 1883 without SSL/TLS. Defaults to `true`. +- **ssl** (*Optional*): Listen on port 8883 with SSL/TLS. This requires certificates. Defaults to `false`. +- **anonymous** (*Optional*): Allow anonymous connections. If *logins* is set, the anonymous user can only read data. Defaults to `true`. +- **logins** (*Optional*): A list of users that will be created with *username* and *password*. - **customize** (*Optional*): If you enable it, it reads additional configuration files (`*.conf`) from `/share/mosquitto`. ### {% linkable_title Home Assistant configuration %} diff --git a/source/_addons/nginx_proxy.markdown b/source/_addons/nginx_proxy.markdown index 318b9768d9..8fd22956e7 100644 --- a/source/_addons/nginx_proxy.markdown +++ b/source/_addons/nginx_proxy.markdown @@ -9,11 +9,10 @@ sharing: true footer: true --- -Setup a SSL proxy with NGINX and redirect port 80 to 443. Make sure you have generated a certificate before you start this add-on. +Setup an SSL proxy with NGINX and redirect port 80 to 443. Make sure you have generated a certificate before you start this add-on. In the `http` section of the `configuration.yaml` file remove `ssl_certificate` and `ssl_key` and don't enter the port in the `base_url` to avoid a HTTP 502 error. - ```json { "domain": "home.example.com" @@ -25,5 +24,5 @@ Configuration variables: - **domain** (*Required*): Domain they will proxy run with it.

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

diff --git a/source/_addons/rpc_shutdown.markdown b/source/_addons/rpc_shutdown.markdown index 10aba2dcf5..a4d2d6689a 100644 --- a/source/_addons/rpc_shutdown.markdown +++ b/source/_addons/rpc_shutdown.markdown @@ -9,7 +9,7 @@ sharing: true footer: true --- -Allow to shutdown a Windows computer with a service call from Home Assistant. +Allows you to shut down a Windows computer with a service call from Home Assistant. ```json { @@ -23,10 +23,10 @@ Allow to shutdown a Windows computer with a service call from Home Assistant. } ``` -- **computers** (*Required*): A list of computer object to shutdown from Home-Assistant. -- **computers/alias** (*Required*): Set a alias for this record and that is the name for the input. -- **computers/address** (*Required*): IP address or netbios name of the computer for shutdown. -- **computers/credentials** (*Required*): Credentials for logging into computer. Use a `%` as delimiter of username and password. +- **computers** (*Required*): A list of computer objects to shutdown from Home-Assistant. +- **computers/alias** (*Required*): Set an alias for this record which becomes the name for the input. +- **computers/address** (*Required*): IP address or NetBIOS name of the computer for the shutdown. +- **computers/credentials** (*Required*): Credentials for logging into computer. Use a `%` as the delimiter of username and password. ## {% linkable_title Home Assistant %} diff --git a/source/_addons/samba.markdown b/source/_addons/samba.markdown index f6aff2fd92..33e573ec37 100644 --- a/source/_addons/samba.markdown +++ b/source/_addons/samba.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Samba" -description: "Manage your Home Assistant and custom addons over Samba." +description: "Manage your Home Assistant and custom add-ons over Samba." date: 2017-04-30 13:28 sidebar: true comments: false @@ -10,7 +10,7 @@ footer: true featured: true --- -This allows you to set up a [Samba](https://samba.org/) server to access hass.io folders using Windows network shares. +This addon allows you to set up a [Samba](https://samba.org/) server to access hass.io folders using Windows network shares. ```json { @@ -32,10 +32,10 @@ This allows you to set up a [Samba](https://samba.org/) server to access hass.io Configuration variables: -- **name** (*Optional*): default `hassio`. Set netbios name of hassio device. +- **name** (*Optional*): default `hassio`. Set NetBIOS name of hassio device. - **workgroup** (*Optional*): default `WORKGROUP`. Set network workgroup. - **guest** (*Optional*): Allow login without a username or password. Defaults to `true`. -- **map** (*Optional*): Control which folder will be expose. `config` is for Home Assistant configuration folder. `addons` for local custom repositiory. `share` is a folder that can access from add-ons and Home Assistant too. `backup` for access to snapshot files. `ssl` for certificate storage, be careful with this option! Defaults all to `true`, except for `ssl`. +- **map** (*Optional*): Control which folder will be exposed. `config` is for Home Assistant configuration folder. `addons` for a local custom repository. `share` is a folder that can access from add-ons and Home Assistant too. `backup` for access to snapshot files. `ssl` for certificate storage, be careful with this option! Defaults all to `true`, except for `ssl`. - **username** (*Optional*): The username for logging in if guest login is not used. - **password** (*Optional*): Password for `username`. An empty password is not supported. - **interface** (*Optional*): Interface on that will start the share. Normally is `eth0` for ethernet wired connection and `wlan0` for wireless connection. diff --git a/source/_addons/ssh.markdown b/source/_addons/ssh.markdown index 2ee90db585..a21a019650 100644 --- a/source/_addons/ssh.markdown +++ b/source/_addons/ssh.markdown @@ -13,16 +13,16 @@ featured: true Setting up an [SSH](https://openssh.org/) server allows access to your Hass.io folders with any SSH client. It also includes a command-line tool to access the [Hass.io API](https://github.com/home-assistant/hassio/blob/dev/API.md). Try it out: ```bash -$ hassio help +hassio help ```

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

-To use this add-on, you must have a private/public key to log in. To generate them, follow the [instructions for Windows][win] and [these for other platforms][other]. It is possible to set a password for login since version 2.0 but for high security use private/public keys. You can not run both variant at same time. +To use this add-on, you must have a private/public key to log in. To generate them, follow the [instructions for Windows][win] and [these for other platforms][other]. It is possible to set a password for login since version 2.0 but for high security use private/public keys. You can not run both variants at the same time. -In order to start this add-on for the first time, you either need to include an ssh key (enclosed in quotation marks, on a single line without line breaks) or set a password in the options section. +To start this add-on for the first time, you either need to include an ssh key (enclosed in quotation marks, on a single line without line breaks) or set a password in the options section. ```json { @@ -39,7 +39,7 @@ After logging in, you will find yourself in this add-ons container. The Home Ass Configuration variables: -- **authorized_keys** (*Optional*): Your public keys for authorized keyfile. Every element will be a line inside that file. +- **authorized_keys** (*Optional*): Your public keys for the authorized key file. Every element will be a line inside that file. - **password** (*Optional*): Set a password for login. We do not recommend this variant. diff --git a/source/_addons/tellstick.markdown b/source/_addons/tellstick.markdown index d75100774c..407bb73dee 100644 --- a/source/_addons/tellstick.markdown +++ b/source/_addons/tellstick.markdown @@ -15,17 +15,17 @@ Setting up the [Tellstick](http://telldus.com) service and tools contained in th To use this add-on, you first install it from the list of Built-in add-ons in Hass.io. After installation you are presented with a default and example configuration, to alter this you must follow both the JSON format and also be aligned with the [valid parameters for Tellstick configuration file (tellstick.conf)](https://developer.telldus.com/wiki/TellStick_conf). -After any changes has been made to the configuration you need to restart the add-on for the changes to take effect. +After any changes have been made to the configuration, you need to restart the add-on for the changes to take effect. Configuration variables: -- **id** (*Required*): This is a number and must be unique for each device. +- **id** (*Required*): A number and must be unique for each device. - **name** (*Required*): A name for easy identification of the device. - **protocol** (*Required*): This is the protocol the device uses. More on the different protocols later down. -- **model** (*Optional*): The parameter model is only used by some protocols where there exists different types of devices using the same protocol. This can be dimmers versus non-dimmers, codeswitch versus selflearning etc. +- **model** (*Optional*): The model parameter is only used by some protocols where there exists different types of devices using the same protocol. This can be dimmers versus non-dimmers, codeswitch versus self-learning, etc. - **house** (*Optional*): Depending on protocol the values here can vary a lot to identify or group per house or type. -- **unit** (*Optional*): Unit identifier, in most cases a value between 1 to 16 and often used in combination with house. -- **fade** (*Optional*): Fade is either `true` or `false` and tells a dimmer if is should fade smooth or instant between values (only for IKEA protocol as it seems). +- **unit** (*Optional*): Unit identifier, in most cases a value between 1 to 16 and often used in combination with the house. +- **fade** (*Optional*): Fade is either `true` or `false` and tells a dimmer if it should fade smooth or instant between values (only for IKEA protocol as it seems). - **code** (*Optional*): A number series based on ones and zeroes often used for dip-switch based devices. You will need to add internal communication details to `configuration.yaml` to enable the integration from Hass.io and the add-on. @@ -42,11 +42,10 @@ tellstick: To add [lights](https://home-assistant.io/components/light.tellstick/), [sensors](https://home-assistant.io/components/sensor.tellstick/) and [switches](https://home-assistant.io/components/switch.tellstick/) you follow the guidelines for each type individually that is [described for Home Assistant](https://home-assistant.io/components/tellstick/) -The add-on will also enable you to interact with tdtool via a Home Assistant services call, see example below for selflearning device. +The add-on will also enable you to interact with the `tdtool` via a Home Assistant services call, see example below for self-learning device. ## {% linkable_title Examples %} - Example for adding more devices in the add-on configuration (note the comma separator between devices): ```json @@ -74,11 +73,11 @@ Example for adding more devices in the add-on configuration (note the comma sepa ## Service calls -If you wish to teach a selflearning device in your TellStick configuration: +If you wish to teach a selflearning device in your TellStick configuration: -Go to Home Assistant [service call](http://hassio.local:8123/dev-service) in Developer tools and select. -- Service: `hassio.addon_stdin` -- Enter service Data: +Go to Home Assistant [service call](http://hassio.local:8123/dev-service) in Developer tools and select. +- Service: `hassio.addon_stdin` +- Enter service Data: `{"addon":"core_tellstick","input":{"function":"learn","device":"1"}}` Replace `1` with the corresponding ID of the device in your TellStick configuration. @@ -90,14 +89,14 @@ You can also use this to list devices or sensors and read the output in the add- #### Supported service commands - `"function":"list"`: List currently configured devices with name and device id and all discovered sensors. - + - `"function":"list-sensors"` - `"function":"list-devices"`: Alternative devices/sensors listing: Shows devices and/or sensors using key=value format (with tabs as separators, one device/sensor per line, no header lines.) -- `"function":"on","device":"x"`: Turns on device. ’x’ could either be an integer of the device-id, or the name of the device. +- `"function":"on","device":"x"`: Turns on device. ’x’ could either be an integer of the device-id, or the name of the device. -- `"function":"off","device":"x"`: Turns off device. ’x’ could either be an integer of the device-id, or the name of the device. +- `"function":"off","device":"x"`: Turns off device. ’x’ could either be an integer of the device-id, or the name of the device. - `"function":"bell","device":"x"`: Sends bell command to devices supporting this. ’x’ could either be an integer of the device-id, or the name of the device. -- `"function":"learn","device":"x"`: Sends a special learn command to devices supporting this. This is normaly devices of ’selflearning’ type. ’x’ could either be an integer of the device-id, or the name of the device. +- `"function":"learn","device":"x"`: Sends a special learn command to devices supporting this. This is normally devices of ’selflearning’ type. ’x’ could either be an integer of the device-id, or the name of the device. From 7a946e9ca905d0e3f9903d7e1cf6189b1a463bc1 Mon Sep 17 00:00:00 2001 From: CV Date: Sun, 21 Jan 2018 18:07:11 +0100 Subject: [PATCH 145/993] Make a refer to autostart (#4460) * Make a refer to autostart For first time users it is not obvious to find autostart documentation. * Fix typos and link --- source/_docs/installation/raspberry-pi.markdown | 2 ++ 1 file changed, 2 insertions(+) diff --git a/source/_docs/installation/raspberry-pi.markdown b/source/_docs/installation/raspberry-pi.markdown index f78838ec5a..4667c7d9f0 100644 --- a/source/_docs/installation/raspberry-pi.markdown +++ b/source/_docs/installation/raspberry-pi.markdown @@ -77,3 +77,5 @@ You can now reach your installation on your Raspberry Pi over the web interface

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

+ +If you want setup `hass` as a daemon and autostart it on boot please refer to [Autostart Home Assistant](/docs/autostart/]. From bd773e9001e4aeb2d4aa16a61351b1bb709f8658 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Sun, 21 Jan 2018 20:36:31 +0100 Subject: [PATCH 146/993] Move logo to the right location --- source/images/{ => screenshots}/daikin.svg | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename source/images/{ => screenshots}/daikin.svg (100%) diff --git a/source/images/daikin.svg b/source/images/screenshots/daikin.svg similarity index 100% rename from source/images/daikin.svg rename to source/images/screenshots/daikin.svg From a47b7deb3dfc3be1cdad2b4df311a30888aa5a84 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Sun, 21 Jan 2018 22:45:15 +0100 Subject: [PATCH 147/993] Move again --- source/images/{screenshots => supported_brands}/daikin.svg | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename source/images/{screenshots => supported_brands}/daikin.svg (100%) diff --git a/source/images/screenshots/daikin.svg b/source/images/supported_brands/daikin.svg similarity index 100% rename from source/images/screenshots/daikin.svg rename to source/images/supported_brands/daikin.svg From 6984581175ad0a649f28f8b874f9c2ea4634ac57 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Mon, 22 Jan 2018 08:15:57 +0100 Subject: [PATCH 148/993] Update Daikin logo --- source/images/supported_brands/daikin.png | Bin 0 -> 39327 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 source/images/supported_brands/daikin.png diff --git a/source/images/supported_brands/daikin.png b/source/images/supported_brands/daikin.png new file mode 100644 index 0000000000000000000000000000000000000000..9a8cbff8bbd2ccfe463b975ba1ab90bca0c4cae6 GIT binary patch literal 39327 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 I;*I Date: Mon, 22 Jan 2018 08:23:47 +0100 Subject: [PATCH 149/993] Update Daikin docs (Typo, logo, etc.) --- source/_components/climate.daikin.markdown | 29 ++++--- source/_components/daikin.markdown | 21 ++--- source/_components/sensor.daikin.markdown | 24 +++--- source/images/supported_brands/daikin.svg | 95 ---------------------- 4 files changed, 33 insertions(+), 136 deletions(-) delete mode 100644 source/images/supported_brands/daikin.svg diff --git a/source/_components/climate.daikin.markdown b/source/_components/climate.daikin.markdown index 0eebf31628..d462629793 100644 --- a/source/_components/climate.daikin.markdown +++ b/source/_components/climate.daikin.markdown @@ -7,15 +7,15 @@ sidebar: true comments: false sharing: true footer: true -logo: daikin.svg +logo: daikin.png ha_category: Climate ha_release: 0.59 ha_iot_class: "Local Polling" --- -### Description ### -The climate component integrates Daikin air conditioning systems into Home Assistant, enabling control of setting the following parameters: +The `daikin` climate platform integrates Daikin air conditioning systems into Home Assistant, enabling control of setting the following parameters: + - **mode** (cool, heat, dry, fan only or auto) - **fan speed** - **target temperature** @@ -24,23 +24,26 @@ The climate component integrates Daikin air conditioning systems into Home Assis Current temperature is displayed.

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

-### Configuration ### - -Manual configuration and customization is possible by using the sample configuration from below: +To enable the platform, add the following lines to your `configuration.yaml` file: ```yaml # Example configuration.yaml entry climate: - platform: daikin - host: 10.0.0.1 - name: optional name + host: 10.0.0.1 ``` -Configuration variables: - -- **host** (*Required*): IP or hostname of the device -- **name** (*Optional*): If the device has a name previously set by the user than that name will be used +{% configuration %} +host: + description: IP or hostname of the device. + required: true + type: string +name: + description: If the device has a name previously set by the user than that name will be used. + required: false + type: string +{% endconfiguration %} diff --git a/source/_components/daikin.markdown b/source/_components/daikin.markdown index 322e0b69ad..4e9ff04e72 100644 --- a/source/_components/daikin.markdown +++ b/source/_components/daikin.markdown @@ -7,28 +7,26 @@ sidebar: true comments: false sharing: true footer: true -logo: daikin.svg +logo: daikin.png ha_category: Hub ha_release: 0.59 ha_iot_class: "Local Polling" --- -### Description ### -The component integrates Daikin air conditioning systems into Home Assistant. - -To automatically add all your Daikin devices (ACs and associated sensors) into your Home Assistant installation, add the following to your 'configuration.yaml' file: +The `daikin` component integrates Daikin air conditioning systems into Home Assistant.

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

+To automatically add all your Daikin devices (ACs and associated sensors) into your Home Assistant installation, add the following to your 'configuration.yaml' file: + ```yaml # Example configuration.yaml entry daikin: hosts: - 192.168.4.161 - monitored_conditions: - inside_temperature - outside_temperature @@ -43,7 +41,7 @@ hosts: monitored_conditions: description: List of items you want to monitor for each device. required: false - detault: All conditions + default: All conditions type: list keys: inside_temperature: @@ -53,11 +51,6 @@ monitored_conditions: {% endconfiguration %}

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

- -The Daikin Home Assistant platform currently supports the following Hive devices: - -- [Climate](/components/climate.daikin) -- [Sensor](/components/sensor.daikin) diff --git a/source/_components/sensor.daikin.markdown b/source/_components/sensor.daikin.markdown index b1d82211f3..bad490b9c1 100644 --- a/source/_components/sensor.daikin.markdown +++ b/source/_components/sensor.daikin.markdown @@ -7,36 +7,32 @@ sidebar: True comments: false sharing: true footer: true -logo: daikin.svg +logo: daikin.png ha_category: Sensor ha_release: 0.59 ha_iot_class: "Local Polling" --- -### Description ### -The sensor component integrates Daikin air conditioning systems into Home Assistant, enabling displaying the following parameters: +The `daikin` sensor platform integrates Daikin air conditioning systems into Home Assistant, enabling displaying the following parameters: + - **inside temperature** - **outside temperature**

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

-### Configuration ### - -Manual configuration and customization is possible by using the sample configuration from below: +To enable the platform, add the following lines to your `configuration.yaml` file: ```yaml # Example configuration.yaml entry sensor: - platform: daikin - host: 10.0.0.1 - name: optional name - monitored_conditions: - - inside_temperature - - outside_temperature - + host: 10.0.0.1 + monitored_conditions: + - inside_temperature + - outside_temperature ``` {% configuration %} @@ -47,7 +43,7 @@ host: monitored_conditions: description: List of items you want to monitor for each device. required: false - detault: All conditions + default: All conditions type: list keys: inside_temperature: diff --git a/source/images/supported_brands/daikin.svg b/source/images/supported_brands/daikin.svg deleted file mode 100644 index b6f36d9904..0000000000 --- a/source/images/supported_brands/daikin.svg +++ /dev/null @@ -1,95 +0,0 @@ - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - From 79b32c3151e9b4dbebca4e01782292405beb0df4 Mon Sep 17 00:00:00 2001 From: Ioan Loosley Date: Sun, 21 Jan 2018 16:33:37 +0000 Subject: [PATCH 150/993] Fixing Daikin docs (#4486) * Fixed Broken images, Added Sidebar and put them in the right catagorys * Forgot the image --- source/_components/climate.daikin.markdown | 4 +- source/_components/daikin.markdown | 6 +- source/_components/sensor.daikin.markdown | 6 +- source/images/daikin.svg | 95 ++++++++++++++++++++++ 4 files changed, 103 insertions(+), 8 deletions(-) create mode 100644 source/images/daikin.svg diff --git a/source/_components/climate.daikin.markdown b/source/_components/climate.daikin.markdown index 52e3f5b525..4c7b217687 100644 --- a/source/_components/climate.daikin.markdown +++ b/source/_components/climate.daikin.markdown @@ -3,11 +3,11 @@ layout: page title: "Daikin AC" description: "Instructions on how to integrate Daikin AC(s) with Home Assistant." date: 2017-12-03 05:00 -sidebar: false +sidebar: true comments: false sharing: true footer: true -logo: N/A +logo: daikin.svg ha_category: Climate ha_release: 0.59 ha_iot_class: "Local Polling" diff --git a/source/_components/daikin.markdown b/source/_components/daikin.markdown index 03a1d59814..c13983d65a 100644 --- a/source/_components/daikin.markdown +++ b/source/_components/daikin.markdown @@ -3,12 +3,12 @@ layout: page title: "Daikin AC" description: "Instructions on how to integrate Hive devices with Home Assistant." date: 2017-12-10 21:00 -sidebar: false +sidebar: true comments: false sharing: true footer: true -logo: N/A -ha_category: Climate +logo: daikin.svg +ha_category: Hub ha_release: 0.59 ha_iot_class: "Local Polling" --- diff --git a/source/_components/sensor.daikin.markdown b/source/_components/sensor.daikin.markdown index 5e8967f99b..74337e223f 100644 --- a/source/_components/sensor.daikin.markdown +++ b/source/_components/sensor.daikin.markdown @@ -3,12 +3,12 @@ layout: page title: "Daikin AC" description: "Instructions on how to integrate Daikin AC(s) with Home Assistant." date: 2017-12-03 05:00 -sidebar: false +sidebar: True comments: false sharing: true footer: true -logo: N/A -ha_category: Climate +logo: daikin.svg +ha_category: Sensor ha_release: 0.59 ha_iot_class: "Local Polling" --- diff --git a/source/images/daikin.svg b/source/images/daikin.svg new file mode 100644 index 0000000000..b6f36d9904 --- /dev/null +++ b/source/images/daikin.svg @@ -0,0 +1,95 @@ + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From 0b20689737b6874241d2236f3575a864ed8b0a36 Mon Sep 17 00:00:00 2001 From: Franck Nijhof Date: Sun, 21 Jan 2018 17:36:38 +0100 Subject: [PATCH 151/993] :white_check_mark: Various markdown, spelling, and grammar fixes (#4457) --- source/_addons/cec_scan.markdown | 2 +- source/_addons/check_config.markdown | 2 +- source/_addons/configurator.markdown | 14 ++++++------ source/_addons/dnsmasq.markdown | 6 ++--- source/_addons/git_pull.markdown | 2 +- source/_addons/google_assistant.markdown | 11 ++++----- source/_addons/homematic.markdown | 14 ++++++------ source/_addons/lets_encrypt.markdown | 4 ++-- source/_addons/mariadb.markdown | 2 +- source/_addons/mosquitto.markdown | 8 +++---- source/_addons/nginx_proxy.markdown | 5 ++-- source/_addons/rpc_shutdown.markdown | 10 ++++---- source/_addons/samba.markdown | 8 +++---- source/_addons/ssh.markdown | 8 +++---- source/_addons/tellstick.markdown | 29 ++++++++++++------------ 15 files changed, 61 insertions(+), 64 deletions(-) diff --git a/source/_addons/cec_scan.markdown b/source/_addons/cec_scan.markdown index 4c048eff15..a17d0ff09d 100644 --- a/source/_addons/cec_scan.markdown +++ b/source/_addons/cec_scan.markdown @@ -9,4 +9,4 @@ sharing: true footer: true --- -Help you to discover the HDMI CEC address. Start the add-on and look into log to see all connected device on HDMI. +Help you to discover the HDMI CEC address. Start the add-on and look into the log to see all connected device on HDMI. diff --git a/source/_addons/check_config.markdown b/source/_addons/check_config.markdown index 0b00f1b147..f10f69848f 100644 --- a/source/_addons/check_config.markdown +++ b/source/_addons/check_config.markdown @@ -9,7 +9,7 @@ sharing: true footer: true --- -You can use this addon to check whether your configuration files are valid against the new version of Home Assistant before you actually update your Home Assistant installation. This will help you avoid errors due to breaking changes, resulting in an smooth update. +You can use this addon to check whether your configuration files are valid against the new version of Home Assistant before you actually update your Home Assistant installation. This addon will help you avoid errors due to breaking changes, resulting in a smooth update. ```json { diff --git a/source/_addons/configurator.markdown b/source/_addons/configurator.markdown index 97640ebe20..4b91a46b66 100644 --- a/source/_addons/configurator.markdown +++ b/source/_addons/configurator.markdown @@ -11,7 +11,7 @@ featured: true og_image: /images/hassio/screenshots/addon-hass-configurator.png --- -As long as a fully featured configuration GUI for Home Assistant is still under development, you can use this add-on to add a browser based file-editor to your Hass.IO installation. By default it will listen on port `3218` of the host Hass.IO is running on. +As long as a fully featured configuration GUI for Home Assistant is still under development, you can use this add-on to add a browser-based file-editor to your Hass.IO installation. By default it will listen on port `3218` of the host Hass.IO is running on. More information and a standalone version for regular Home Assistant installations can be found in the [GitHub repository][code]. @@ -27,8 +27,8 @@ Screenshot of the HASS Configurator. - Web-Based editor to modify your files with syntax highlighting. - Upload and download files. - Stage and commit changes in Git repositories, create and switch between branches, push to remotes. -- Lists of available triggers, events, entities, conditions and services. Selected element gets inserted into the editor at the last cursor position. -- Restart Home Assistant directly with the click of a button. Reloading groups, automations etc. can be done as well. An API-password is required. +- Lists of available triggers, events, entities, conditions, and services. The selected element gets inserted into the editor at the last cursor position. +- Restart Home Assistant directly with the click of a button. Reloading groups, automations, etc. can be done as well. An API-password is required. - SSL support. - Optional authentication and IP filtering for added security. - Direct links to Home Assistant documentation and icons. @@ -55,15 +55,15 @@ Screenshot of the HASS Configurator. - **username** (*Optional*): Set a username to access your configuration is protected. - **password** (*Required*): Set a password for access. - **ssl** (*Optional*): Enable or Disable SSL for the editor. -- **allowed_networks** (*Optional*): Limit access to the configurator by adding allowed IP addresses / networks to the list. +- **allowed_networks** (*Optional*): Limit access to the configurator by adding allowed IP addresses/networks to the list. - **banned_ips** (*Optional*): List of statically banned IP addresses. - **banlimit** (*Optional*): Ban access from IPs after `banlimit` failed login attempts. The default value `0` disables this feature. Restart the add-on to clear the list of banned IP addresses. - **ignore_pattern** (*Optional*): Files and folders to ignore in the UI. -- **dirsfirst** (*Optional*): List directories before files in the filebrowser. +- **dirsfirst** (*Optional*): List directories before files in the file browser. ### {% linkable_title Embedding into Home-Assistant %} -Using the Home Assistant component [panel_iframe](https://home-assistant.io/components/panel_iframe/) it is possible to embed the configurator directly into Home Assistant, allowing you to modify your configuration within the Home Assistant frontend. +Using the Home Assistant component [panel_iframe](https://home-assistant.io/components/panel_iframe/) it is possible to embed the configurator directly into Home Assistant, allowing you to modify your configuration from within the Home Assistant frontend. An example configuration would look like this: @@ -76,5 +76,5 @@ panel_iframe: ```

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

diff --git a/source/_addons/dnsmasq.markdown b/source/_addons/dnsmasq.markdown index 586a035f8f..6ae42294f5 100644 --- a/source/_addons/dnsmasq.markdown +++ b/source/_addons/dnsmasq.markdown @@ -30,7 +30,7 @@ Setup and manage a [Dnsmasq](http://thekelleys.org.uk/dnsmasq/doc.html) DNS serv Configuration variables: -- **defaults** (*Required*): A list of dns server to forward default requests. +- **defaults** (*Required*): A list of DNS servers to forward default requests to. - **forwards** (*Optional*): A list of domains that will forward to a specific server. -- **hosts** (*Optional*): A list of hosts to resolve it static. -- **interface** (*Optional*): If a interface is set, it listen only on this interface. Need to set for resinos. Normally is `eth0` for ethernet wired connection and `wlan0` for wireless connection. +- **hosts** (*Optional*): A list of hosts to resolve statically. +- **interface** (*Optional*): If an interface is set, it listens only on this interface. Needs to be set for ResinOS. Normally is `eth0` for ethernet wired connection and `wlan0` for wireless connection. diff --git a/source/_addons/git_pull.markdown b/source/_addons/git_pull.markdown index e482db9509..8d42d8ab82 100644 --- a/source/_addons/git_pull.markdown +++ b/source/_addons/git_pull.markdown @@ -45,7 +45,7 @@ Load and update configuration files for Home Assistant from a GIT repository. * **rsa** The protocol is typically known by the suffix of the private key --e.g., a key file named `id_rsa` will be a private key using "rsa" protocol. - +

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

diff --git a/source/_addons/google_assistant.markdown b/source/_addons/google_assistant.markdown index 21c4c8b8af..ac0765bc51 100644 --- a/source/_addons/google_assistant.markdown +++ b/source/_addons/google_assistant.markdown @@ -11,7 +11,7 @@ featured: true ---

- If you are wanting to integrate your Google Home, or mobile phone running Google Assistant, with Home Assistant then you want the [Google Assistant component](https://home-assistant.io/components/google_assistant/). + If you want to integrate your Google Home, or mobile phone running Google Assistant, with Home Assistant, then you want the [Google Assistant component](https://home-assistant.io/components/google_assistant/).

[Google Assistant][GoogleAssistant] is an AI-powered voice assistant that runs on the Raspberry Pi and x86 platforms and interact via the [DialogFlow][comp] integration with Home-Assistant. You can also use [Google Actions][GoogleActions] to extend its functionality. @@ -19,8 +19,8 @@ featured: true To enable access to the Google Assistant API, do the following: 1. In the [Cloud Platform Console][project], go to the Projects page. Select an existing project or create a new project -2. Open the project. In the top of the page search for Google Assistant API or use [this link][API] and enable it. -3. Create an [OAuth Client ID][oauthclient], pick type "Other", click "Create" and download the JSON file by clicking the Download JSON button on the right side. +1. Open the project. In the top of the page search for Google Assistant API or use [this link][API] and enable it. +1. Create an [OAuth Client ID][oauthclient], pick type "Other", click "Create" and download the JSON file by clicking the Download JSON button on the right side. Now install and activate the [Samba] add-on so you can upload your credential file. Connect to the "share" Samba share and copy your credentials over. Name the file `google_assistant.json`. @@ -52,9 +52,9 @@ Find the microphone and speakers that you want to use and note down their device The next step is to authenticate your Google account with Google Assistant. Start the add-on and click on the "OPEN WEB UI" button to start authentication. -### Add-On configuration +### Add-on configuration -Configuration example that uses the USB microphone and use the built-in headset audio output on the Raspberry Pi. Note that card and device numbers can differ on your device. +Configuration example that uses the USB microphone and the built-in headset audio output on the Raspberry Pi. Note that card and device numbers can differ on your device. ```json { @@ -73,7 +73,6 @@ Configuration variables: Use the Home Assistant [DialogFlow component][comp] to integrate the add-on into Home Assistant. - [GoogleAssistant]: https://assistant.google.com/ [GoogleActions]: https://actions.google.com/ [Samba]: /addons/samba/ diff --git a/source/_addons/homematic.markdown b/source/_addons/homematic.markdown index aa1137abd0..8cf3c3b9b3 100644 --- a/source/_addons/homematic.markdown +++ b/source/_addons/homematic.markdown @@ -9,9 +9,9 @@ sharing: true footer: true --- -Set up a [HomeMatic](https://github.com/eq-3/occu) hardware layer. At the moment we don't support hmIP but that is in progress. For learning and handling devices use our internal homematic panel and services (in progress) or use [Homematic-Manager](https://github.com/hobbyquaker/homematic-manager) > 2.0. +Set up a [HomeMatic](https://github.com/eq-3/occu) hardware layer. At the moment we don't support hmIP, but that is in progress. For learning and handling devices use our internal HomeMatic panel and services (in progress) or use [Homematic-Manager](https://github.com/hobbyquaker/homematic-manager) > 2.0. -The logic layer will be Home-Assistant. There is no ReGa or other logic layer installed. You can't import exists configuration, you need new learn it into Home-Assistant. +The logic layer will be Home-Assistant. There is no ReGa or other logic layer installed. You can't import an existing configuration, you'll need re-learn it into Home-Assistant. Follow devices will be supported and tested: - [HM-MOD-RPI-PCB](https://www.elv.ch/homematic-funkmodul-fuer-raspberry-pi-bausatz.html) @@ -42,13 +42,13 @@ Configuration variables: - **wired_enable** (*Require*): Boolean. Enable or disable BidCoS-Wired. For RF devices -- **type** (*Require*): Device type for RFD service. Look into handbook of your device. -- **device** (*Require*): Device on host. +- **type** (*Require*): Device type for RFD service. Look into the manual of your device. +- **device** (*Require*): Device on the host. For RF devices -- **serial** (*Require*): Serial number of device. +- **serial** (*Require*): Serial number of the device. - **key** (*Require*): Encrypted key. -- **ip** (*Require*): IP address of lan gateway. +- **ip** (*Require*): IP address of LAN gateway. ## {% linkable_title Home Assistant configuration %} @@ -64,7 +64,7 @@ homematic: ## {% linkable_title Raspberry Pi3 %} -With HM-MOD-PRI-PCB you need add follow into your `config.txt` on boot partition: +With HM-MOD-PRI-PCB you need to add follow into your `config.txt` on boot partition: ``` dtoverlay=pi3-miniuart-bt ``` diff --git a/source/_addons/lets_encrypt.markdown b/source/_addons/lets_encrypt.markdown index bf6845005f..fe3894e6f8 100644 --- a/source/_addons/lets_encrypt.markdown +++ b/source/_addons/lets_encrypt.markdown @@ -14,7 +14,7 @@ featured: false You should not use this if you are also using the [DuckDNS add-on]. The DuckDNS add-on has integrated Let's Encrypt support.

-Setup and manage a [Let's Encrypt](https://letsencrypt.org/) certificate. This will create a certificate on the first run and will auto-renew if the certificate is within 30 days of expiration. +Setup and manage a [Let's Encrypt](https://letsencrypt.org/) certificate. This addon will create a certificate on the first run and will auto-renew if the certificate is within 30 days of expiration. ```json { @@ -39,6 +39,6 @@ http: ssl_key: /ssl/privkey.pem ``` -If you use another port such as `8123` or a SSL proxy, change the port number. +If you use another port such as `8123` or an SSL proxy, change the port number. [DuckDNS add-on]: /addons/duckdns/ diff --git a/source/_addons/mariadb.markdown b/source/_addons/mariadb.markdown index b7882dd2c6..673857de06 100644 --- a/source/_addons/mariadb.markdown +++ b/source/_addons/mariadb.markdown @@ -9,7 +9,7 @@ sharing: true footer: true --- -Set up a [mariadb](https://mariadb.org/) SQL server. It supports multiple databases, users and permission settings. If you want to only connect from inside home assistant use `core-mariadb` as the host address. +Set up a [mariadb](https://mariadb.org/) SQL server. It supports multiple databases, users, and permission settings. If you want to only connect from inside home assistant use `core-mariadb` as the host address. ```json { diff --git a/source/_addons/mosquitto.markdown b/source/_addons/mosquitto.markdown index 5512542ed2..de3df29894 100644 --- a/source/_addons/mosquitto.markdown +++ b/source/_addons/mosquitto.markdown @@ -35,10 +35,10 @@ Make sure you use logins and disable anonymous access if you want to secure the Configuration variables: -- **plain** (*Optional*): Listen to broker on port 1883 without SSL/TLS. Defaults to `true`. -- **ssl** (*Optional*): Listen to broker on port 8883 with SSL/TLS. This requires certificates. Defaults to `false`. -- **anonymous** (*Optional*): Allow anonymous connection. If *logins* is set, anonymous user can only read data. Defaults to `true`. -- **logins** (*Optional*): A list of user that will be created with *username* and *password*. +- **plain** (*Optional*): Listen on port 1883 without SSL/TLS. Defaults to `true`. +- **ssl** (*Optional*): Listen on port 8883 with SSL/TLS. This requires certificates. Defaults to `false`. +- **anonymous** (*Optional*): Allow anonymous connections. If *logins* is set, the anonymous user can only read data. Defaults to `true`. +- **logins** (*Optional*): A list of users that will be created with *username* and *password*. - **customize** (*Optional*): If you enable it, it reads additional configuration files (`*.conf`) from `/share/mosquitto`. ### {% linkable_title Home Assistant configuration %} diff --git a/source/_addons/nginx_proxy.markdown b/source/_addons/nginx_proxy.markdown index 318b9768d9..8fd22956e7 100644 --- a/source/_addons/nginx_proxy.markdown +++ b/source/_addons/nginx_proxy.markdown @@ -9,11 +9,10 @@ sharing: true footer: true --- -Setup a SSL proxy with NGINX and redirect port 80 to 443. Make sure you have generated a certificate before you start this add-on. +Setup an SSL proxy with NGINX and redirect port 80 to 443. Make sure you have generated a certificate before you start this add-on. In the `http` section of the `configuration.yaml` file remove `ssl_certificate` and `ssl_key` and don't enter the port in the `base_url` to avoid a HTTP 502 error. - ```json { "domain": "home.example.com" @@ -25,5 +24,5 @@ Configuration variables: - **domain** (*Required*): Domain they will proxy run with it.

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

diff --git a/source/_addons/rpc_shutdown.markdown b/source/_addons/rpc_shutdown.markdown index 10aba2dcf5..a4d2d6689a 100644 --- a/source/_addons/rpc_shutdown.markdown +++ b/source/_addons/rpc_shutdown.markdown @@ -9,7 +9,7 @@ sharing: true footer: true --- -Allow to shutdown a Windows computer with a service call from Home Assistant. +Allows you to shut down a Windows computer with a service call from Home Assistant. ```json { @@ -23,10 +23,10 @@ Allow to shutdown a Windows computer with a service call from Home Assistant. } ``` -- **computers** (*Required*): A list of computer object to shutdown from Home-Assistant. -- **computers/alias** (*Required*): Set a alias for this record and that is the name for the input. -- **computers/address** (*Required*): IP address or netbios name of the computer for shutdown. -- **computers/credentials** (*Required*): Credentials for logging into computer. Use a `%` as delimiter of username and password. +- **computers** (*Required*): A list of computer objects to shutdown from Home-Assistant. +- **computers/alias** (*Required*): Set an alias for this record which becomes the name for the input. +- **computers/address** (*Required*): IP address or NetBIOS name of the computer for the shutdown. +- **computers/credentials** (*Required*): Credentials for logging into computer. Use a `%` as the delimiter of username and password. ## {% linkable_title Home Assistant %} diff --git a/source/_addons/samba.markdown b/source/_addons/samba.markdown index f6aff2fd92..33e573ec37 100644 --- a/source/_addons/samba.markdown +++ b/source/_addons/samba.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Samba" -description: "Manage your Home Assistant and custom addons over Samba." +description: "Manage your Home Assistant and custom add-ons over Samba." date: 2017-04-30 13:28 sidebar: true comments: false @@ -10,7 +10,7 @@ footer: true featured: true --- -This allows you to set up a [Samba](https://samba.org/) server to access hass.io folders using Windows network shares. +This addon allows you to set up a [Samba](https://samba.org/) server to access hass.io folders using Windows network shares. ```json { @@ -32,10 +32,10 @@ This allows you to set up a [Samba](https://samba.org/) server to access hass.io Configuration variables: -- **name** (*Optional*): default `hassio`. Set netbios name of hassio device. +- **name** (*Optional*): default `hassio`. Set NetBIOS name of hassio device. - **workgroup** (*Optional*): default `WORKGROUP`. Set network workgroup. - **guest** (*Optional*): Allow login without a username or password. Defaults to `true`. -- **map** (*Optional*): Control which folder will be expose. `config` is for Home Assistant configuration folder. `addons` for local custom repositiory. `share` is a folder that can access from add-ons and Home Assistant too. `backup` for access to snapshot files. `ssl` for certificate storage, be careful with this option! Defaults all to `true`, except for `ssl`. +- **map** (*Optional*): Control which folder will be exposed. `config` is for Home Assistant configuration folder. `addons` for a local custom repository. `share` is a folder that can access from add-ons and Home Assistant too. `backup` for access to snapshot files. `ssl` for certificate storage, be careful with this option! Defaults all to `true`, except for `ssl`. - **username** (*Optional*): The username for logging in if guest login is not used. - **password** (*Optional*): Password for `username`. An empty password is not supported. - **interface** (*Optional*): Interface on that will start the share. Normally is `eth0` for ethernet wired connection and `wlan0` for wireless connection. diff --git a/source/_addons/ssh.markdown b/source/_addons/ssh.markdown index 2ee90db585..a21a019650 100644 --- a/source/_addons/ssh.markdown +++ b/source/_addons/ssh.markdown @@ -13,16 +13,16 @@ featured: true Setting up an [SSH](https://openssh.org/) server allows access to your Hass.io folders with any SSH client. It also includes a command-line tool to access the [Hass.io API](https://github.com/home-assistant/hassio/blob/dev/API.md). Try it out: ```bash -$ hassio help +hassio help ```

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

-To use this add-on, you must have a private/public key to log in. To generate them, follow the [instructions for Windows][win] and [these for other platforms][other]. It is possible to set a password for login since version 2.0 but for high security use private/public keys. You can not run both variant at same time. +To use this add-on, you must have a private/public key to log in. To generate them, follow the [instructions for Windows][win] and [these for other platforms][other]. It is possible to set a password for login since version 2.0 but for high security use private/public keys. You can not run both variants at the same time. -In order to start this add-on for the first time, you either need to include an ssh key (enclosed in quotation marks, on a single line without line breaks) or set a password in the options section. +To start this add-on for the first time, you either need to include an ssh key (enclosed in quotation marks, on a single line without line breaks) or set a password in the options section. ```json { @@ -39,7 +39,7 @@ After logging in, you will find yourself in this add-ons container. The Home Ass Configuration variables: -- **authorized_keys** (*Optional*): Your public keys for authorized keyfile. Every element will be a line inside that file. +- **authorized_keys** (*Optional*): Your public keys for the authorized key file. Every element will be a line inside that file. - **password** (*Optional*): Set a password for login. We do not recommend this variant. diff --git a/source/_addons/tellstick.markdown b/source/_addons/tellstick.markdown index d75100774c..407bb73dee 100644 --- a/source/_addons/tellstick.markdown +++ b/source/_addons/tellstick.markdown @@ -15,17 +15,17 @@ Setting up the [Tellstick](http://telldus.com) service and tools contained in th To use this add-on, you first install it from the list of Built-in add-ons in Hass.io. After installation you are presented with a default and example configuration, to alter this you must follow both the JSON format and also be aligned with the [valid parameters for Tellstick configuration file (tellstick.conf)](https://developer.telldus.com/wiki/TellStick_conf). -After any changes has been made to the configuration you need to restart the add-on for the changes to take effect. +After any changes have been made to the configuration, you need to restart the add-on for the changes to take effect. Configuration variables: -- **id** (*Required*): This is a number and must be unique for each device. +- **id** (*Required*): A number and must be unique for each device. - **name** (*Required*): A name for easy identification of the device. - **protocol** (*Required*): This is the protocol the device uses. More on the different protocols later down. -- **model** (*Optional*): The parameter model is only used by some protocols where there exists different types of devices using the same protocol. This can be dimmers versus non-dimmers, codeswitch versus selflearning etc. +- **model** (*Optional*): The model parameter is only used by some protocols where there exists different types of devices using the same protocol. This can be dimmers versus non-dimmers, codeswitch versus self-learning, etc. - **house** (*Optional*): Depending on protocol the values here can vary a lot to identify or group per house or type. -- **unit** (*Optional*): Unit identifier, in most cases a value between 1 to 16 and often used in combination with house. -- **fade** (*Optional*): Fade is either `true` or `false` and tells a dimmer if is should fade smooth or instant between values (only for IKEA protocol as it seems). +- **unit** (*Optional*): Unit identifier, in most cases a value between 1 to 16 and often used in combination with the house. +- **fade** (*Optional*): Fade is either `true` or `false` and tells a dimmer if it should fade smooth or instant between values (only for IKEA protocol as it seems). - **code** (*Optional*): A number series based on ones and zeroes often used for dip-switch based devices. You will need to add internal communication details to `configuration.yaml` to enable the integration from Hass.io and the add-on. @@ -42,11 +42,10 @@ tellstick: To add [lights](https://home-assistant.io/components/light.tellstick/), [sensors](https://home-assistant.io/components/sensor.tellstick/) and [switches](https://home-assistant.io/components/switch.tellstick/) you follow the guidelines for each type individually that is [described for Home Assistant](https://home-assistant.io/components/tellstick/) -The add-on will also enable you to interact with tdtool via a Home Assistant services call, see example below for selflearning device. +The add-on will also enable you to interact with the `tdtool` via a Home Assistant services call, see example below for self-learning device. ## {% linkable_title Examples %} - Example for adding more devices in the add-on configuration (note the comma separator between devices): ```json @@ -74,11 +73,11 @@ Example for adding more devices in the add-on configuration (note the comma sepa ## Service calls -If you wish to teach a selflearning device in your TellStick configuration: +If you wish to teach a selflearning device in your TellStick configuration: -Go to Home Assistant [service call](http://hassio.local:8123/dev-service) in Developer tools and select. -- Service: `hassio.addon_stdin` -- Enter service Data: +Go to Home Assistant [service call](http://hassio.local:8123/dev-service) in Developer tools and select. +- Service: `hassio.addon_stdin` +- Enter service Data: `{"addon":"core_tellstick","input":{"function":"learn","device":"1"}}` Replace `1` with the corresponding ID of the device in your TellStick configuration. @@ -90,14 +89,14 @@ You can also use this to list devices or sensors and read the output in the add- #### Supported service commands - `"function":"list"`: List currently configured devices with name and device id and all discovered sensors. - + - `"function":"list-sensors"` - `"function":"list-devices"`: Alternative devices/sensors listing: Shows devices and/or sensors using key=value format (with tabs as separators, one device/sensor per line, no header lines.) -- `"function":"on","device":"x"`: Turns on device. ’x’ could either be an integer of the device-id, or the name of the device. +- `"function":"on","device":"x"`: Turns on device. ’x’ could either be an integer of the device-id, or the name of the device. -- `"function":"off","device":"x"`: Turns off device. ’x’ could either be an integer of the device-id, or the name of the device. +- `"function":"off","device":"x"`: Turns off device. ’x’ could either be an integer of the device-id, or the name of the device. - `"function":"bell","device":"x"`: Sends bell command to devices supporting this. ’x’ could either be an integer of the device-id, or the name of the device. -- `"function":"learn","device":"x"`: Sends a special learn command to devices supporting this. This is normaly devices of ’selflearning’ type. ’x’ could either be an integer of the device-id, or the name of the device. +- `"function":"learn","device":"x"`: Sends a special learn command to devices supporting this. This is normally devices of ’selflearning’ type. ’x’ could either be an integer of the device-id, or the name of the device. From 44957c949923b1cd8e1b6d75159e25586fe2ba8b Mon Sep 17 00:00:00 2001 From: CV Date: Sun, 21 Jan 2018 18:07:11 +0100 Subject: [PATCH 152/993] Make a refer to autostart (#4460) * Make a refer to autostart For first time users it is not obvious to find autostart documentation. * Fix typos and link --- source/_docs/installation/raspberry-pi.markdown | 2 ++ 1 file changed, 2 insertions(+) diff --git a/source/_docs/installation/raspberry-pi.markdown b/source/_docs/installation/raspberry-pi.markdown index f78838ec5a..4667c7d9f0 100644 --- a/source/_docs/installation/raspberry-pi.markdown +++ b/source/_docs/installation/raspberry-pi.markdown @@ -77,3 +77,5 @@ You can now reach your installation on your Raspberry Pi over the web interface

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

+ +If you want setup `hass` as a daemon and autostart it on boot please refer to [Autostart Home Assistant](/docs/autostart/]. From 34039d6afc1bbd166f746ddeab16e7b36baf2be0 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Sun, 21 Jan 2018 20:36:31 +0100 Subject: [PATCH 153/993] Move logo to the right location --- source/images/{ => screenshots}/daikin.svg | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename source/images/{ => screenshots}/daikin.svg (100%) diff --git a/source/images/daikin.svg b/source/images/screenshots/daikin.svg similarity index 100% rename from source/images/daikin.svg rename to source/images/screenshots/daikin.svg From 1799ce06416af3be9b424fb45c2f15e01fab70df Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Sun, 21 Jan 2018 22:45:15 +0100 Subject: [PATCH 154/993] Move again --- source/images/{screenshots => supported_brands}/daikin.svg | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename source/images/{screenshots => supported_brands}/daikin.svg (100%) diff --git a/source/images/screenshots/daikin.svg b/source/images/supported_brands/daikin.svg similarity index 100% rename from source/images/screenshots/daikin.svg rename to source/images/supported_brands/daikin.svg From d4f87577ba47a5791003b88b3ece48b90e64ab33 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Mon, 22 Jan 2018 08:15:57 +0100 Subject: [PATCH 155/993] Update Daikin logo --- source/images/supported_brands/daikin.png | Bin 0 -> 39327 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 source/images/supported_brands/daikin.png diff --git a/source/images/supported_brands/daikin.png b/source/images/supported_brands/daikin.png new file mode 100644 index 0000000000000000000000000000000000000000..9a8cbff8bbd2ccfe463b975ba1ab90bca0c4cae6 GIT binary patch literal 39327 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 I;*I Date: Mon, 22 Jan 2018 08:23:47 +0100 Subject: [PATCH 156/993] Update Daikin docs (Typo, logo, etc.) --- source/_components/climate.daikin.markdown | 31 +++---- source/_components/daikin.markdown | 19 ++--- source/_components/sensor.daikin.markdown | 25 +++--- source/images/supported_brands/daikin.svg | 95 ---------------------- 4 files changed, 35 insertions(+), 135 deletions(-) delete mode 100644 source/images/supported_brands/daikin.svg diff --git a/source/_components/climate.daikin.markdown b/source/_components/climate.daikin.markdown index 4c7b217687..65ac8dba8b 100644 --- a/source/_components/climate.daikin.markdown +++ b/source/_components/climate.daikin.markdown @@ -7,15 +7,15 @@ sidebar: true comments: false sharing: true footer: true -logo: daikin.svg +logo: daikin.png ha_category: Climate ha_release: 0.59 ha_iot_class: "Local Polling" --- -### Description ### -The climate component integrates Daikin air conditioning systems into Home Assistant, enabling control of setting the following parameters: +The `daikin` climate platform integrates Daikin air conditioning systems into Home Assistant, enabling control of setting the following parameters: + - **mode** (cool, heat, dry, fan only or auto) - **fan speed** (on supported models) - **target temperature** @@ -24,25 +24,28 @@ The climate component integrates Daikin air conditioning systems into Home Assis Current temperature is displayed.

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

-### Configuration ### - The component has been integrated with discovery so all your Daikin AC's climate devices can be automatically discovered. -Manual configuration and customization is also possible by using the sample configuration from below: + +To enable the platform, add the following lines to your `configuration.yaml` file: ```yaml # Example configuration.yaml entry climate: - platform: daikin - host: 10.0.0.1 - name: optional name + host: 10.0.0.1 ``` -Configuration variables: - -- **host** (*Required*): IP or hostname of the device -- **name** (*Optional*): If the device has a name previously set by the user than that name will be used +{% configuration %} +host: + description: IP or hostname of the device. + required: true + type: string +name: + description: If the device has a name previously set by the user than that name will be used. + required: false + type: string +{% endconfiguration %} diff --git a/source/_components/daikin.markdown b/source/_components/daikin.markdown index c13983d65a..9e783ed1c1 100644 --- a/source/_components/daikin.markdown +++ b/source/_components/daikin.markdown @@ -7,34 +7,34 @@ sidebar: true comments: false sharing: true footer: true -logo: daikin.svg +logo: daikin.png ha_category: Hub ha_release: 0.59 ha_iot_class: "Local Polling" --- -### Description ### -The component integrates Daikin air conditioning systems into Home Assistant. +The `daikin` component integrates Daikin air conditioning systems into Home Assistant. To automatically add all your Daikin devices (ACs and associated sensors) into your Home Assistant installation, add the following to your 'configuration.yaml' file: + ```yaml # Example configuration.yaml entry daikin: ```

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

A full manual configuration example is give below: + ```yaml # Full manual example configuration.yaml entry daikin: hosts: - 192.168.4.161 - monitored_conditions: - inside_temperature - outside_temperature @@ -50,7 +50,7 @@ hosts: monitored_conditions: description: List of items you want to monitor for each device. required: false - detault: All conditions + default: All conditions type: list keys: inside_temperature: @@ -60,11 +60,6 @@ monitored_conditions: {% endconfiguration %}

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

- -The Daikin Home Assistant platform currently supports the following Hive devices: - -- [Climate](/components/climate.daikin) -- [Sensor](/components/sensor.daikin) diff --git a/source/_components/sensor.daikin.markdown b/source/_components/sensor.daikin.markdown index 74337e223f..986d882cb0 100644 --- a/source/_components/sensor.daikin.markdown +++ b/source/_components/sensor.daikin.markdown @@ -7,37 +7,34 @@ sidebar: True comments: false sharing: true footer: true -logo: daikin.svg +logo: daikin.png ha_category: Sensor ha_release: 0.59 ha_iot_class: "Local Polling" --- -### Description ### -The sensor component integrates Daikin air conditioning systems into Home Assistant, enabling displaying the following parameters: +The `daikin` sensor platform integrates Daikin air conditioning systems into Home Assistant, enabling displaying the following parameters: + - **inside temperature** - **outside temperature**

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

-### Configuration ### - The component has been integrated with discovery so all your Daikin AC's climate devices can be automatically discovered. -Manual configuration and customization is also possible by using the sample configuration from below: + +To enable the platform manually, add the following lines to your `configuration.yaml` file: ```yaml # Example configuration.yaml entry sensor: - platform: daikin - host: 10.0.0.1 - name: optional name - monitored_conditions: - - inside_temperature - - outside_temperature - + host: 10.0.0.1 + monitored_conditions: + - inside_temperature + - outside_temperature ``` {% configuration %} @@ -48,7 +45,7 @@ host: monitored_conditions: description: List of items you want to monitor for each device. required: false - detault: All conditions + default: All conditions type: list keys: inside_temperature: diff --git a/source/images/supported_brands/daikin.svg b/source/images/supported_brands/daikin.svg deleted file mode 100644 index b6f36d9904..0000000000 --- a/source/images/supported_brands/daikin.svg +++ /dev/null @@ -1,95 +0,0 @@ - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - From 0ff6a08adfd2c57caff0c77f1164864ecc4820c0 Mon Sep 17 00:00:00 2001 From: Joe McMonagle Date: Mon, 22 Jan 2018 04:01:30 -0500 Subject: [PATCH 157/993] Updating Google Assistant Docs for spelling and formatting (#4488) * Updating Google Assistant Docs for spelling and formatting No content updates. Just changes to the spelling and formatting * Update google_assistant.markdown --- source/_components/google_assistant.markdown | 21 ++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/source/_components/google_assistant.markdown b/source/_components/google_assistant.markdown index f8bbe65f3a..8fb83ac57d 100644 --- a/source/_components/google_assistant.markdown +++ b/source/_components/google_assistant.markdown @@ -18,7 +18,7 @@ The `google_assistant` component allows you to control things via Google Assista The Google Assistant component requires a bit more setup than most due to the way Google requires Assistant Apps to be set up.

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

To enable this, add the following lines to your `configuration.yaml` file: @@ -63,7 +63,7 @@ access_token: required: true type: string agent_user_id: - description: A string to identify the user, e.g., email address. If not provided, the component will generate one. + description: A string to identify the user, e.g. email address. If not provided, the component will generate one. required: false type: string api_key: @@ -102,7 +102,7 @@ entity_config: required: false type: list type: - description: Override the domain how Google Assistant has to interpretet the entity. For example, set to `light` for a switch entity to have it be handeld as a light. + description: Override how Google Assistant interprets the domain of the entity. For example, set to `light` for a switch entity to have it be handled as a light. required: false type: string {% endconfiguration %} @@ -117,7 +117,7 @@ If you're not using Linux, you can use sites such as [this one](https://www.brow ### {% linkable_title Setup %} -1. Download the [gactions CLI](https://developers.google.com/actions/tools/gactions-cli) (you'll use this later) - you can download and run this anywhere and on any machine, just remember where you put it for later (and don't forget to run `chmod +x gactions`to make it executable on mac or linux) +1. Download the [gactions CLI](https://developers.google.com/actions/tools/gactions-cli) to be used later. You can download and run this anywhere and on any machine. Just remember where you put it for later and don't forget to run `chmod +x gactions` to make it executable on Mac or Linux. 2. Create a new file named `project.json` (in the same directory you downloaded `gactions` to) and replace the `[YOUR HOME ASSISTANT URL]` below with the URL you use to access Home Assistant. Note: This must be an HTTPS URL to work. @@ -132,7 +132,7 @@ If you're not using Linux, you can use sites such as [this one](https://www.brow } }], "conversations": { - "automation" : + "automation": { "name": "automation", "url": "https://[YOUR HOME ASSISTANT URL]/api/google_assistant" @@ -142,10 +142,11 @@ If you're not using Linux, you can use sites such as [this one](https://www.brow ``` 3. Create a new project in the [developer console](https://console.actions.google.com/). - 1. Add/Import project - 2. Go to Build under the Actions SDK box - 3. Copy the command that looks like: - `gactions update --action_package PACKAGE_NAME --project doctest-2d0b8` + a. Add/Import project + b. Go to Build under the Actions SDK box + c. Copy the command that looks like: + + `gactions update --action_package PACKAGE_NAME --project doctest-2d0b8` 4. Replace `PACKAGE_NAME` with `project.json` and run that command in a console from the same directory you saved `project.json` in (you'll need to put `./` before `gactions` so that it reads `./gactions` if you're running it on Linux or Windows). It should output a URL like `https://console.actions.google.com/project/doctest-2d0b8/overview` - go there. 5. You'll need to fill out most of the information on that page, but none of it really matters since you won't be addressing the App directly, only through the Smart Home functionality built into Google Assistant. 6. The final item on that page `Account linking` is required for your app to interact with Home Assistant. @@ -179,4 +180,4 @@ The request_sync service may fail with a 404 if the project_id of the Homegraph 2. Add a new project to the [cloud console](https://console.cloud.google.com). Here you get a new project_id. 3. Enable Homegraph API to the new project. 4. Generate a new API key. - 5. Again create a new project in the [developer console](https://console.actions.google.com/). Described above. But at the step 'Build under the Actions SDK box' choose your newly created project. By this, they share the same project_id. + 5. Again, create a new project in the [developer console](https://console.actions.google.com/). Described above. But at the step 'Build under the Actions SDK box' choose your newly created project. By this, they share the same project_id. From 20c82d5d252e1c705e18f6e95e25837066025431 Mon Sep 17 00:00:00 2001 From: Marius Date: Mon, 22 Jan 2018 13:13:49 +0200 Subject: [PATCH 158/993] Updating documentation for #11805 (#4462) --- source/_components/climate.generic_thermostat.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/climate.generic_thermostat.markdown b/source/_components/climate.generic_thermostat.markdown index d816c7ac5f..19e1a1f1cd 100644 --- a/source/_components/climate.generic_thermostat.markdown +++ b/source/_components/climate.generic_thermostat.markdown @@ -39,7 +39,7 @@ Configuration variables: - **hot_tolerance** (*Optional*): Set a minimum amount of difference between the temperature read by the sensor specified in the *target_sensor* option and the target temperature that must change prior to being switched off. For example, if the target temperature is 25 and the tolerance is 0.5 the heater will stop when the sensor equals or goes above 25.5. - **keep_alive** (*Optional*): Set a keep-alive interval. If set, the switch specified in the *heater* option will be triggered every time the interval elapses. Use with heaters and A/C units that shut off if they don't receive a signal from their remote for a while. Use also with switches that might lose state. The keep-alive call is done with the current valid climate component state (either on or off). - **initial_operation_mode** (*Optional*): Set the initial operation mode. Valid values are `off` or `auto`. Value has to be double quoted. If this parameter is not set, it is preferable to set a *keep_alive* value. This is helpful to align any discrepancies between *generic_thermostat* and *heater* state. -- **away_temp** (*Optional*): Set the temperature used by "away_mode" (default: 16). Please specify when using `ac_mode: True` to a higher value. +- **away_temp** (*Optional*): Set the temperature used by "away_mode". If this is not specified, away_mode feature will not get activated. A full configuration example looks like the one below. `min_cycle_duration` and `keep_alive` must contain at least one of the following entries: `days:`, `hours:`, `minutes:`, `seconds:` or `milliseconds:`. From 412869ff9390c8b1e6eda500048cb045d5a8f8b2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jens=20=C3=98stergaard=20Nielsen?= Date: Mon, 22 Jan 2018 12:23:25 +0100 Subject: [PATCH 159/993] New IHC platform (#4129) * New IHC platform * autosetup -> auto_setup * Moved auto setup to the IHC component * Removed by LK in logo * Changes from review. * Defaults in configurations. manualy setup" changed to "manual setup" (Anchors adjusted) * Relative links changed to absolute links --- source/_components/binary_sensor.ihc.markdown | 69 ++++++++++++++ source/_components/ihc.markdown | 90 ++++++++++++++++++ source/_components/light.ihc.markdown | 65 +++++++++++++ source/_components/sensor.ihc.markdown | 59 ++++++++++++ source/_components/switch.ihc.markdown | 56 +++++++++++ source/images/supported_brands/ihc.png | Bin 0 -> 4702 bytes 6 files changed, 339 insertions(+) create mode 100644 source/_components/binary_sensor.ihc.markdown create mode 100644 source/_components/ihc.markdown create mode 100644 source/_components/light.ihc.markdown create mode 100644 source/_components/sensor.ihc.markdown create mode 100644 source/_components/switch.ihc.markdown create mode 100644 source/images/supported_brands/ihc.png diff --git a/source/_components/binary_sensor.ihc.markdown b/source/_components/binary_sensor.ihc.markdown new file mode 100644 index 0000000000..5a3d7769de --- /dev/null +++ b/source/_components/binary_sensor.ihc.markdown @@ -0,0 +1,69 @@ +--- +layout: page +title: "IHC Binary Sensor" +description: "Instructions how to integrate IHC Binary Sensors within Home Assistant." +date: 2017-11-27 13:35 +sidebar: true +comments: false +sharing: true +footer: true +logo: ihc.png +ha_category: Binary Sensor +ha_release: 0.62 +ha_iot_class: "Local Push" +--- + +Before you can use the IHC Binary Sensor platform, you must setup the [IHC Component](/components/ihc/) + +When auto setup is enabled the following products will be found in the IHC project and setup as binary sensors: + +* Dataline magnet contacts +* Dataline Pir sensors +* Dataline Pir sensors with twilight detection +* Dataline Pir alarm sensor +* Dataline smoke detector +* Dataline gas detector +* Dataline light sensor + +To manually configure IHC Binary Sensors insert this section in your configuration: + +```yaml +binary_sensor: + - platform: ihc + binary_sensors: + - id: 12345 + name: mysensor + type: opening + inverting: True + - id: 12346 + ... +``` + +{% configuration %} +binary_sensors: + description: List of binary sensors to setup manually. + required: false + type: map + keys: + id: + description: The IHC resource id. + required: true + type: int + inverting: + description: If True the sensor will be inverted. + required: false + type: bool + default: false + name: + description: The name of the component + required: false + type: string + type: + description: The binary sensor type. See [Home Assistant binary sensor](/components/binary_sensor/) for available types. + required: false + type: string +{% endconfiguration %} + +The resource id should be an id of a boolean IHC resource. +For more information about IHC resource ids see [Manual Setup](/components/ihc/#manual-setup) + diff --git a/source/_components/ihc.markdown b/source/_components/ihc.markdown new file mode 100644 index 0000000000..7bffc48415 --- /dev/null +++ b/source/_components/ihc.markdown @@ -0,0 +1,90 @@ +--- +layout: page +title: "IHC" +description: "Instructions on how to integrate the IHC components with Home Assistant" +date: 2017-11-11 22:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: ihc.png +ha_category: Hub +ha_release: "0.62" +ha_iot_class: "Local Push" +--- + +IHC Controller integration for Home Assistant allows you to connect the LK IHC controller to Home Assistant. +(The controller is sold under other names in different countries - "ELKO Living system" in Sweden and Norway) + +An `ihc` section must be present in the `configuration.yaml` file and contain the following options: + +```yaml +# Example configuration.yaml entry +ihc: + host: http://192.168.1.3 + username: admin + password: mysecret + auto_setup: True + info: True +``` + +{% configuration %} +auto_setup: + description: True to have IHC products auto setup. + required: false + type: bool +host: + description: The URL of the IHC Controller. + required: true + type: string +info: + description: If True additional IHC info will be shown on each component. + required: false + type: bool +password: + description: The password for the IHC Controller. + required: true + type: string +username: + description: The username for the IHC Controller. + required: true + type: string +{% endconfiguration %} + +The info option will show the IHC "name", "note" and "position" attributes. +This will make it easier to identify the IHC products within Home Assistant + +There is currently support for the following device types within Home Assistant: + +- [Binary Sensor](/components/binary_sensor.ihc/) +- [Sensor](/components/sensor.ihc/) +- [Light](/components/light.ihc/) +- [Switch](/components/switch.ihc/) + +### Auto setup of IHC products + +If auto setup is enabled, the `ihc` component will automatically find IHC products and insert these as devices in Home Assistant. +To disable this set auto_setup to False. (Auto setup is on by default) +See the individual device types for a list of IHC products to be recognized automatically. + +Components will get a default name that is a combination of the IHC group and IHC resource id. +If you want to change the display names use the [Customizing entities](/docs/configuration/customizing-devices/) + +### {% linkable_title Manual setup %} + +Each device is associated with an IHC resource id. +To manually setup components you specify resource ids from the IHC project. +(The IHC project is the file you edit/upload to the IHC Controller using LK IHC Visual - or similar program if your controller is not the LK brand). +The project file is an XML file and you can view it with any text/XML editor. +You can rename it to have the XML extension and use a browser like Chrome or Internet Explorer. +The resources are the \ or \ eleements. +Shown as inputs or outputs of products in the IHC application. +You can also use inputs and outputs from function blocks. +These are the \ and \ elements from the project file. + +The IHC resource id should be specified as an integer value. (In the project file the id will be specified as a hex number) + +If you want an easier way to get the IHC resource ids, you can download the [Alternative Service View application](https://www.dingus.dk/updated-ihc-alternative-service-view/). +The application will show the product tree. You can expand it, select inputs and outputs and when selected you can see the resource id. + +See each device type for the manual configuration options. diff --git a/source/_components/light.ihc.markdown b/source/_components/light.ihc.markdown new file mode 100644 index 0000000000..a289ea942f --- /dev/null +++ b/source/_components/light.ihc.markdown @@ -0,0 +1,65 @@ +--- +layout: page +title: "IHC Light" +description: "Instructions how to integrate IHC lights within Home Assistant." +date: 2017-11-27 13:35 +sidebar: true +comments: false +sharing: true +footer: true +logo: ihc.png +ha_category: Light +ha_release: 0.62 +ha_iot_class: "Local Push" +--- + +Before you can use the IHC Light platform, you must setup the [IHC Component](/components/ihc/) + +When auto setup is enabled the following products will be found in the IHC project and setup as light devices: + +* Wireless lamp outlet dimmer +* Wireless dimmer +* Wireless combi dimmer 4 buttons +* Wireless lamp outlet relay +* Wireless combi relay 4 buttons +* Wireless mobile dimmer +* Dataline lamp outlet + +To manually configure IHC lights insert this section in your configuration: + +```yaml +light: + - platform: ihc + lights: + - id: 12345 + name: tablelight + dimmable: True + - id: 12346 + name: anotherlight + ... +``` + +{% configuration %} +lights: + description: List of lights to setup manually + required: false + type: map + keys: + dimmable: + description: Set to True if the IHC resource is a light level + required: false + type: bool + default: false + id: + description: The IHC resource id. + required: true + type: int + name: + description: The name of the component + required: false + type: string +{% endconfiguration %} + +In the example above 12345 is ihc resource id and "tablelight" is the name. +The IHC resource id can be a light level for dimmers or an boolean output of a relay. +For more information about IHC resource ids see [Manual Setup](/components/ihc/#manual-setup) diff --git a/source/_components/sensor.ihc.markdown b/source/_components/sensor.ihc.markdown new file mode 100644 index 0000000000..70ec6c11e2 --- /dev/null +++ b/source/_components/sensor.ihc.markdown @@ -0,0 +1,59 @@ +--- +layout: page +title: "IHC Sensor" +description: "Instructions how to integrate IHC Sensors within Home Assistant." +date: 2017-11-27 13:35 +sidebar: true +comments: false +sharing: true +footer: true +logo: ihc.png +ha_category: Sensor +ha_release: 0.62 +ha_iot_class: "Local Push" +--- + +Before you can use the IHC Sensor platform, you must setup the [IHC Component](/components/ihc/) + +When auto setup is enabled the following products will be found in the IHC project and setup as sensors: + +* Dataline temperature sensor - Will insert 2 temperature sensors +* Dataline Humidity - Will insert 1 humidity and 2 temperature sensors (calculated dewpoint) +* Dataline Lux - will insert 1 light and 1 temperature sensor + +To manually configure IHC sensors insert this section: + +```yaml +sensor: + - platform: ihc + sensors: + - id: 12345 + name: 'mysensor' + unit_of_measurement: '°C' + - id: 12346 + ... +``` + +{% configuration %} +sensors: + description: List of sensors to setup manually + required: false + type: map + keys: + id: + description: The IHC resource id. + required: true + type: int + name: + description: The name of the component + required: false + type: string + unit_of_measurement: + description: Defines the unit of measurement of the sensor, if any. + required: false + type: string +{% endconfiguration %} + +The resource id should be a IHC float resource. +For more information about IHC resource ids see [Manual Setup](/components/ihc/#manual-setup) + diff --git a/source/_components/switch.ihc.markdown b/source/_components/switch.ihc.markdown new file mode 100644 index 0000000000..011ef33a02 --- /dev/null +++ b/source/_components/switch.ihc.markdown @@ -0,0 +1,56 @@ +--- +layout: page +title: "IHC Switch" +description: "Instructions how to integrate IHC switches within Home Assistant." +date: 2017-11-27 13:35 +sidebar: true +comments: false +sharing: true +footer: true +logo: ihc.png +ha_category: Switch +ha_release: 0.62 +ha_iot_class: "Local Push" +--- + +Before you can use the IHC Switch platform, you must setup the [IHC Component](/components/ihc/) + +When auto setup is enabled the following products will be found in the ihc project and setup as switch devices: + +* Wireless plug outlet +* Wireless relay +* Mobile wireless relay +* Dataline plug outlet + +To manually configure IHC switches insert this section in your configuration: + +```yaml +switch: + - platform: ihc + auto_setup: True + switches: + - id: 12345 + name: myswitch + - id: 12346 + .... +``` + +{% configuration %} +switches: + description: List of switches to setup manually + required: false + type: map + keys: + id: + description: The IHC resource id. + required: true + type: int + name: + description: The name of the component + required: false + type: string +{% endconfiguration %} + +The resource id should be a boolean resource. (On/Off) +For more information about IHC resource ids see [Manual Setup](/components/ihc/#manual-setup) + diff --git a/source/images/supported_brands/ihc.png b/source/images/supported_brands/ihc.png new file mode 100644 index 0000000000000000000000000000000000000000..36e60f58e106367b0719e361d6e3db0661d35e29 GIT binary patch literal 4702 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 Ixyv{I3yp6Cwg3PC literal 0 HcmV?d00001 From 33c0a60db2b3dc454da8a8ab5ec55470ac4f0b96 Mon Sep 17 00:00:00 2001 From: Kallb123 Date: Mon, 22 Jan 2018 16:52:29 +0000 Subject: [PATCH 160/993] Updated entity_picture_template key in configuration --- source/_components/sensor.template.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/sensor.template.markdown b/source/_components/sensor.template.markdown index 3c865a2ee2..2841dc027b 100644 --- a/source/_components/sensor.template.markdown +++ b/source/_components/sensor.template.markdown @@ -57,7 +57,7 @@ sensor: description: Defines a template for the icon of the sensor. required: false type: template - icon_template: + entity_picture_template: description: Defines a template for the entity picture of the sensor. required: false type: template From d7c032c1a2419d6416c38633fbee4c8df25d110b Mon Sep 17 00:00:00 2001 From: Otto Winter Date: Mon, 22 Jan 2018 19:14:22 +0100 Subject: [PATCH 161/993] Add esphomelib link (#4492) * Add esphomelib link * Small fix --- 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 d6ba5ad07d..996af07391 100644 --- a/source/_components/light.mqtt_json.markdown +++ b/source/_components/light.mqtt_json.markdown @@ -198,3 +198,5 @@ light: - There is also another implementation forked from the above repo, it supports all the same features but is made for addressable LED strips using FastLED on a NodeMCU V3 it can be found [here](https://github.com/JammyDodger231/nodemcu-mqtt-rgb-led). - [MQTT JSON Light](https://github.com/mertenats/Open-Home-Automation/tree/master/ha_mqtt_rgbw_light_with_discovery) is another implementation for ESP8266 including [MQTT discovery](/docs/mqtt/discovery/). + +- [esphomelib](https://github.com/OttoWinter/esphomelib) is a library for ESP32-based boards that has many of Home Assistant's MQTT features (like [discovery](/docs/mqtt/discovery/)) pre-implemented and provides high-level abstractions for components such as lights or sensors. From d262752e4e9c933ff1eff6f460fff659eb39e1e6 Mon Sep 17 00:00:00 2001 From: Adam Mills Date: Mon, 22 Jan 2018 13:15:07 -0500 Subject: [PATCH 162/993] Move placeholder info to separate section (#4490) --- source/developers/frontend_translation.markdown | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/source/developers/frontend_translation.markdown b/source/developers/frontend_translation.markdown index 1699e85da2..99a231941f 100644 --- a/source/developers/frontend_translation.markdown +++ b/source/developers/frontend_translation.markdown @@ -15,12 +15,14 @@ ha_release: 0.57 First time users may find it helpful to switch between multilanguage and single language view using the Multilanguage view button. For more information about the translation workflow, please see the [Lokalise translation workflow documents](https://docs.lokalise.co/category/iOzEuQPS53-for-team-leads-and-translators). -Some translation strings will contain special placeholders that will be replaced later. Placeholders shown in square brackets `[]` are [Lokalise key references](https://docs.lokalise.co/article/KO5SZWLLsy-key-referencing). These are primarily used to link translation strings that will be duplicated. Different languages may not have the same duplicates as English, and are welcome to link duplicate translations that are not linked in English. Placeholders shown in curly brackets `{}` are [translation arguments](https://formatjs.io/guides/message-syntax/) that will be replaced with a live value when Home Assistant is running. Any translation argument placeholders present in the original string must be included in the translated string. These may include special syntax for defining plurals or other replacement rules. The linked format.js guide explains the syntax for adding plural definitions and other rules. -

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

+## {% linkable_title Translation placeholders %} + +Some translation strings will contain special placeholders that will be replaced later. Placeholders shown in square brackets `[]` are [Lokalise key references](https://docs.lokalise.co/article/KO5SZWLLsy-key-referencing). These are primarily used to link translation strings that will be duplicated. Different languages may not have the same duplicates as English, and are welcome to link duplicate translations that are not linked in English. Placeholders shown in curly brackets `{}` are [translation arguments](https://formatjs.io/guides/message-syntax/) that will be replaced with a live value when Home Assistant is running. Any translation argument placeholders present in the original string must be included in the translated string. These may include special syntax for defining plurals or other replacement rules. The linked format.js guide explains the syntax for adding plural definitions and other rules. + ## {% linkable_title Rules %} 1. Only native speakers should submit translations. 2. Stick to [Material Design guidelines](https://material.io/guidelines/style/writing.html). From a8ecc882999f5860632e19ca6987ad9ac3929ae3 Mon Sep 17 00:00:00 2001 From: Sebastian Muszynski Date: Mon, 22 Jan 2018 23:01:02 +0100 Subject: [PATCH 163/993] Typo fixed: specfici -> specific. (#4495) --- source/_components/fan.xiaomi_miio.markdown | 48 ++++++++++----------- 1 file changed, 24 insertions(+), 24 deletions(-) diff --git a/source/_components/fan.xiaomi_miio.markdown b/source/_components/fan.xiaomi_miio.markdown index 23110f6302..4f59690ce9 100644 --- a/source/_components/fan.xiaomi_miio.markdown +++ b/source/_components/fan.xiaomi_miio.markdown @@ -68,62 +68,62 @@ Turn the buzzer on. | Service data attribute | Optional | Description | |---------------------------|----------|-------------------------------------------------------| -| `entity_id` | yes | Only act on a specfici air purifier. Else targets all. | +| `entity_id` | yes | Only act on a specific air purifier. Else targets all. | ### Service fan/xiaomi_miio_set_buzzer_off Turn the buzzer off. -| Service data attribute | Optional | Description | -|---------------------------|----------|-------------------------------------------------------| -| `entity_id` | yes | Only act on a specfici air purifier. Else targets all. | +| Service data attribute | Optional | Description | +|---------------------------|----------|---------------------------------------------------------| +| `entity_id` | yes | Only act on a specific air purifier. Else targets all. | ### Service fan/xiaomi_miio_set_led_on Turn the led on. -| Service data attribute | Optional | Description | -|---------------------------|----------|-------------------------------------------------------| -| `entity_id` | yes | Only act on a specfici air purifier. Else targets all. | +| Service data attribute | Optional | Description | +|---------------------------|----------|---------------------------------------------------------| +| `entity_id` | yes | Only act on a specific air purifier. Else targets all. | ### Service fan/xiaomi_miio_set_led_off Turn the led off. -| Service data attribute | Optional | Description | -|---------------------------|----------|-------------------------------------------------------| -| `entity_id` | yes | Only act on a specfici air purifier. Else targets all. | +| Service data attribute | Optional | Description | +|---------------------------|----------|---------------------------------------------------------| +| `entity_id` | yes | Only act on a specific air purifier. Else targets all. | ### Service fan/xiaomi_miio_set_child_lock_on Turn the child lock on. -| Service data attribute | Optional | Description | -|---------------------------|----------|-------------------------------------------------------| -| `entity_id` | yes | Only act on a specfici air purifier. Else targets all. | +| Service data attribute | Optional | Description | +|---------------------------|----------|---------------------------------------------------------| +| `entity_id` | yes | Only act on a specific air purifier. Else targets all. | ### Service fan/xiaomi_miio_set_child_lock_off Turn the child lock off. -| Service data attribute | Optional | Description | -|---------------------------|----------|-------------------------------------------------------| -| `entity_id` | yes | Only act on a specfici air purifier. Else targets all. | +| Service data attribute | Optional | Description | +|---------------------------|----------|---------------------------------------------------------| +| `entity_id` | yes | Only act on a specific air purifier. Else targets all. | ### Service fan/xiaomi_miio_set_led_brightness Set the led brightness. Supported values are 0 (Bright), 1 (Dim), 2 (Off). -| Service data attribute | Optional | Description | -|---------------------------|----------|-------------------------------------------------------| -| `entity_id` | yes | Only act on a specfici air purifier. Else targets all. | -| `brightness` | no | Brightness, between 0 and 2. | +| Service data attribute | Optional | Description | +|---------------------------|----------|---------------------------------------------------------| +| `entity_id` | yes | Only act on a specific air purifier. Else targets all. | +| `brightness` | no | Brightness, between 0 and 2. | ### Service fan/xiaomi_miio_set_favorite_level Set the favorite level of the operation mode "favorite". -| Service data attribute | Optional | Description | -|---------------------------|----------|-------------------------------------------------------| -| `entity_id` | yes | Only act on a specfici air purifier. Else targets all. | -| `level` | no | Level, between 0 and 16. | +| Service data attribute | Optional | Description | +|---------------------------|----------|---------------------------------------------------------| +| `entity_id` | yes | Only act on a specific air purifier. Else targets all. | +| `level` | no | Level, between 0 and 16. | From 84e29bbc8c4ae9ef18e819fa04adf99a1f7be56a Mon Sep 17 00:00:00 2001 From: Diogo Gomes Date: Mon, 22 Jan 2018 22:29:10 +0000 Subject: [PATCH 164/993] Added Mediaroom component Mediaroom is a media_player --- .../media_player.mediaroom.markdown | 51 ++++++++++++++++++ source/images/supported_brands/mediaroom.png | Bin 0 -> 36494 bytes 2 files changed, 51 insertions(+) create mode 100644 source/_components/media_player.mediaroom.markdown create mode 100644 source/images/supported_brands/mediaroom.png diff --git a/source/_components/media_player.mediaroom.markdown b/source/_components/media_player.mediaroom.markdown new file mode 100644 index 0000000000..8bb78405c9 --- /dev/null +++ b/source/_components/media_player.mediaroom.markdown @@ -0,0 +1,51 @@ +--- +layout: page +title: "MediaRoom" +description: "Instructions how to integrate Mediaroom Set-Top Boxes into Home Assistant." +date: 2018-01-22 22:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: mediaroom.png +ha_category: Media Player +ha_iot_class: "Local Polling" +ha_release: "0.62" +--- + +The `mediaroom` component allows you to control a [Mediaroom](https://en.wikipedia.org/wiki/Ericsson_Mediaroom) Set-Top Box from Home Assistant. + +To add a Mediaroom to your installation, add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +media_player: + - platform: mediaroom + host: 192.168.1.64 + name: TV Operator Box +``` + +{% configuration %} + host: + description: The hostname or address of the device. + required: false + type: string + name: + description: The name of the device used in the frontend. + required: false + type: string + optimistic: + description: In case the component can't determine the status of the box, consider the box always ON. + required: false + type: boolean +{% endconfiguration %} + +Notice that all parameters are optional, and discovery shoud configure everything for you. + +#### {% linkable_title Using the Mediaroom component %} + +The component has been developed for Portuguese TV operators using the Mediaroom platform but should also work in other deployments in which the Set-top box can be controlled remotely through a socket on port 8082. + +In most cases (1 Set-Top box) you just need to setup the *name* and discovery will do the rest. In case you have more than 1 Set-Top box you are required to set the *host* in each one of the entries. + +If the set-top box is in the same network segment as Home Assistant we can determine whether the device is turned on or off. Without this, the component will fail to determine the Set-top box status and you are required to add the *optimistic* configuration variable. diff --git a/source/images/supported_brands/mediaroom.png b/source/images/supported_brands/mediaroom.png new file mode 100644 index 0000000000000000000000000000000000000000..f8e13b72852287b3bd1457f30fafdab78c364ee6 GIT binary patch literal 36494 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 literal 0 HcmV?d00001 From 6e8966b611270587174fb1e1854e3468b37c903f Mon Sep 17 00:00:00 2001 From: Diogo Gomes Date: Mon, 22 Jan 2018 22:48:09 +0000 Subject: [PATCH 165/993] Fixes --- .../media_player.mediaroom.markdown | 12 ++++++------ source/images/supported_brands/mediaroom.png | Bin 36494 -> 18737 bytes 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/source/_components/media_player.mediaroom.markdown b/source/_components/media_player.mediaroom.markdown index 8bb78405c9..65ba033c8e 100644 --- a/source/_components/media_player.mediaroom.markdown +++ b/source/_components/media_player.mediaroom.markdown @@ -1,6 +1,6 @@ --- layout: page -title: "MediaRoom" +title: "Mediaroom" description: "Instructions how to integrate Mediaroom Set-Top Boxes into Home Assistant." date: 2018-01-22 22:00 sidebar: true @@ -13,9 +13,9 @@ ha_iot_class: "Local Polling" ha_release: "0.62" --- -The `mediaroom` component allows you to control a [Mediaroom](https://en.wikipedia.org/wiki/Ericsson_Mediaroom) Set-Top Box from Home Assistant. +The `mediaroom` component allows you to control a [Mediaroom](https://en.wikipedia.org/wiki/Ericsson_Mediaroom) Set-Top Box (STB) from Home Assistant. -To add a Mediaroom to your installation, add the following to your `configuration.yaml` file: +To add a Mediaroom STB to your installation, add the following to your `configuration.yaml` file: ```yaml # Example configuration.yaml entry @@ -44,8 +44,8 @@ Notice that all parameters are optional, and discovery shoud configure everythin #### {% linkable_title Using the Mediaroom component %} -The component has been developed for Portuguese TV operators using the Mediaroom platform but should also work in other deployments in which the Set-top box can be controlled remotely through a socket on port 8082. +The component has been developed for Portuguese TV operators currently using the Mediaroom platform, but should also work in other deployments in which the STB can be controlled remotely through a socket on port 8082. -In most cases (1 Set-Top box) you just need to setup the *name* and discovery will do the rest. In case you have more than 1 Set-Top box you are required to set the *host* in each one of the entries. +In most cases (single STB) you just need to setup the *name* and discovery will do the rest. In case you have more than one STB you are required to set the *host* in each one of the entries. -If the set-top box is in the same network segment as Home Assistant we can determine whether the device is turned on or off. Without this, the component will fail to determine the Set-top box status and you are required to add the *optimistic* configuration variable. +If the STB is in the same network segment as Home Assistant we can determine whether the device is turned on or off. Without this, the component will fail to determine the Set-top box status and you are required to add the *optimistic* configuration variable. diff --git a/source/images/supported_brands/mediaroom.png b/source/images/supported_brands/mediaroom.png index f8e13b72852287b3bd1457f30fafdab78c364ee6..775c90e54fc568513735d5e9722a6b3b55b245d2 100644 GIT binary patch literal 18737 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
7SR1@%(CEFpni# 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 From 8b1a3c80a1eb034d9931cfd6df84ef801c3cbad6 Mon Sep 17 00:00:00 2001 From: Adrian Campos Date: Mon, 22 Jan 2018 23:05:39 -0800 Subject: [PATCH 166/993] Fixed broken link to autostart docs (#4497) --- source/_docs/installation/raspberry-pi.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_docs/installation/raspberry-pi.markdown b/source/_docs/installation/raspberry-pi.markdown index 4667c7d9f0..178ad0abdf 100644 --- a/source/_docs/installation/raspberry-pi.markdown +++ b/source/_docs/installation/raspberry-pi.markdown @@ -78,4 +78,4 @@ You can now reach your installation on your Raspberry Pi over the web interface When you run the `hass` command for the first time, it will download, install and cache the necessary libraries/dependencies. This procedure may take anywhere between 5 to 10 minutes. During that time, you may get "site cannot be reached" error when accessing the web interface. This will only happen for the first time, and subsequent restarts will be much faster.

-If you want setup `hass` as a daemon and autostart it on boot please refer to [Autostart Home Assistant](/docs/autostart/]. +If you want setup `hass` as a daemon and autostart it on boot please refer to [Autostart Home Assistant](/docs/autostart/). From 65b833473a033e958006fd8b093e439e0210e007 Mon Sep 17 00:00:00 2001 From: arcsur Date: Tue, 23 Jan 2018 16:55:18 +0800 Subject: [PATCH 167/993] BME680 sensor component documentation (#4432) * Added documentation for BME680 sensor platform * Removed yr sensor from configuration.yaml example * Implemented pull request review comments. --- source/_components/sensor.bme680.markdown | 222 ++++++++++++++++++++++ 1 file changed, 222 insertions(+) create mode 100644 source/_components/sensor.bme680.markdown diff --git a/source/_components/sensor.bme680.markdown b/source/_components/sensor.bme680.markdown new file mode 100644 index 0000000000..e6978a3f0f --- /dev/null +++ b/source/_components/sensor.bme680.markdown @@ -0,0 +1,222 @@ +--- +layout: page +title: "BME680 Sensor" +description: "Instructions on how to integrate a BME680 sensor into Home Assistant." +date: 2018-01-16 00:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: raspberry-pi.png +ha_category: Sensor +ha_release: 0.62 +ha_iot_class: "Local Push" +--- + + +The `bme680` sensor platform allows you to read temperature, humidity, pressure and gas resistance values of a [Bosch BME680 Environmental sensor](https://cdn-shop.adafruit.com/product-files/3660/BME680.pdf) connected via an [I2C](https://en.wikipedia.org/wiki/I²C) bus (SDA, SCL pins). It allows you to use all the operation modes of the sensor described in its datasheet. In addition, it includes a basic air quality calculation that uses gas resistance and humidity measurements to calculate a percentage based air quality measurement. + +Tested devices: + +- [Raspberry Pi](https://www.raspberrypi.org/) + +To use your BME680 sensor in your installation, add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +sensor: + - platform: bme680 +``` + +{% configuration %} +name: + description: The name of the sensor + required: false + default: BME680 Sensor + type: string +i2c_bus: + description: I2C bus that the sensor is connected to. + required: false + default: 1 + type: int +i2c_address: + description: I2C address of the sensor. It is 0x76 or 0x77. + required: false + default: 0x77 + type: int +monitored_conditions: + description: Conditions to monitor. + required: false + default: + - temperature + - humidity + - pressure + - airquality + type: list + keys: + temperature: + description: Monitor temperature. + humidity: + description: Monitor relative humidity. + pressure: + description: Monitor pressure. + gas: + description: Monitor gas resistance values on the VOC sensor. + airquality: + description: Monitor air quality using the values of humidity and gas resistance and calculate a percentage based air quality measurement. +oversampling_temperature: + description: Oversampling multiplier as described in the sensor datasheet. Can be 0 (no sampling), 1, 2, 4, 8, or 16. + required: false + default: 8 + type: int +oversampling_pressure: + description: Oversampling multiplier as described in the sensor datasheet. Can be 0 (no sampling), 1, 2, 4, 8, or 16. + required: false + default: 2 + type: int +oversampling_humidity: + description: Oversampling multiplier as described in the sensor datasheet. Can be 0 (no sampling), 1, 2, 4, 8, or 16. + required: false + default: 4 + type: int +filter_size: + description: IIR filter size as described in the sensor datasheet. Can be 0 (off), 1, 3, 7, 15, 31, 63 or 127. + required: false + default: 3 + type: int +gas_heater_temperature: + description: The temperature to heat the hotplate to for gas resistance measurements as described in the sensor datasheet. Can be between 200-400°C. + required: false + default: 320 + type: int +gas_heater_duration: + description: The duration to heat the hotplate in milliseconds for gas resistance measurements as described in the sensor datasheet. Can be between 1-4032 ms. In reality, you will likely need between 80-100ms to reach a stable temperature. Using a duration greater than 1000ms is inadvisable as it will essentially result in the heater being continually on due to the 1-second update interval. + required: false + default: 150 + type: int +aq_burn_in_time: + description: The duration to perform gas resistance measurements to establish a stable baseline measurements for Air Quality calculations in seconds. The burn in time is only performed when the sensor component is first initialized. + required: false + default: 300 + type: int +aq_humidity_baseline: + description: The baseline *ideal* relative humidity value for the air quality calculations. + required: false + default: 40 + type: int +aq_humidity_bias: + description: The bias for humidity to the gas resistance measurement in the air quality calculations expressed as a percentage of the total calculation e.g. 25% hudidtity to 75% gas. + required: false + default: 25 + type: int +{% endconfiguration %} + +## {% linkable_title Full Examples %} + +If you want to specify the working mode of the digital sensor or need to change the default I2C address (which is 0x77), add more details to the `configuration.yaml` file: + +```yaml +# Example of customized configuration.yaml entry +sensor: + - platform: bme680 + name: BME680 Sensor + i2c_bus: 1 + i2c_address: 0x77 + monitored_conditions: + - temperature + - humidity + - pressure + - gas + - airquality + oversampling_temperature: 8 + oversampling_humidity: 2 + oversampling_pressure: 4 + filter_size: 3 + gas_heater_temperature: 320 + gas_heater_duration: 150 + aq_burn_in_time: 300 + aq_humidity_baseline: 40 + aq_humidity_bias: 25 +``` + +## {% linkable_title Customizing the sensor data %} + +Give the values friendly names and icons, add the following to your `customize:` section. + +```yaml +# Example configuration.yaml entry +customize: + sensor.bme680_sensor_temperature: + icon: mdi:thermometer + friendly_name: Temperature + sensor.bme680_sensor_humidity: + icon: mdi:water + friendly_name: Humidity + sensor.bme680_sensor_pressure: + icon: mdi:gauge + friendly_name: Pressure + sensor.bme680_sensor_air_quality: + icon: mdi:blur + friendly_name: Air Quality +``` + +To create a group, add the following to your `group` section. + +```yaml +# Example configuration.yaml entry +group: + climate: + name: Climate + entities: + - sensor.bme680_sensor_temperature + - sensor.bme680_sensor_humidity + - sensor.bme680_sensor_pressure + - sensor.bme680_sensor_air_quality +``` + +## {% linkable_title Directions for installing SMBus support on Raspberry Pi %} + +Enable I2C interface with the Raspberry Pi configuration utility: + +```bash +# pi user environment: Enable I2C interface +$ sudo raspi-config +``` + +Select `Interfacing options->I2C` choose `` and hit `Enter`, then go to `Finish` and you'll be prompted to reboot. + +Install dependencies to use the `smbus-cffi` module and add your _homeassistant_ user to the _i2c_ group: + +```bash +# pi user environment: Install I2C dependencies and utilities +$ sudo apt-get install build-essential libi2c-dev i2c-tools python-dev libffi-dev + +# pi user environment: Add homeassistant user to the I2C group +$ sudo addgroup homeassistant i2c + +# pi user environment: Reboot Raspberry Pi to apply changes +$ sudo reboot +``` + +### {% linkable_title Check the I2C address of the sensor %} + +After installing `i2c-tools`, a new utility is available to scan the addresses of the connected sensors: + +```bash +$ /usr/sbin/i2cdetect -y 1 +``` + +It will output a table like this: +```text + 0 1 2 3 4 5 6 7 8 9 a b c d e f +00: -- -- -- -- -- -- -- -- -- -- -- -- -- +10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- +20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- +30: -- -- -- -- -- -- -- -- -- -- -- -- 3c -- -- -- +40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- +50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- +60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- +70: -- -- -- -- -- -- -- 76 +``` + +So you can see the sensor address that you are looking for is **0x76** (there is another I2C device on that Raspberry Pi). From 026d747c4702cf4c64a63d916a06f9a7b02c9cd6 Mon Sep 17 00:00:00 2001 From: Phil Frost Date: Tue, 23 Jan 2018 18:46:10 +0000 Subject: [PATCH 168/993] Document new alexa smart_home option (#4493) --- source/_components/alexa.markdown | 45 +++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) diff --git a/source/_components/alexa.markdown b/source/_components/alexa.markdown index 6b1347a386..e39048053c 100644 --- a/source/_components/alexa.markdown +++ b/source/_components/alexa.markdown @@ -21,6 +21,7 @@ There are a few ways that you can use Amazon Echo and Home Assistant together. - [Build custom commands to use](#i-want-to-build-custom-commands-to-use-with-echo) - [Create a new Flash Briefing source](#flash-briefing-skills) +- [Use the Smart Home API to control lights, etc](#smart-home) - Alternative: use the [Emulated Hue component][emulated-hue-component] to trick Alexa to thinking Home Assistant is a Philips Hue hub. Amazon has released [Echosim], a website that simulates the Alexa service in your browser. That way it is easy to test your skills without having access to a physical Amazon Echo. @@ -332,6 +333,50 @@ Please refer to the [Amazon documentation][flash-briefing-api-docs] for more inf - Having passed all validations to reach this screen, you can now click on "< Back to All Skills" as your flash briefing is now available as in "Development" service. - To invoke your flash briefing, open the Alexa app on your phone or go to the [Alexa Settings Site][alexa-settings-site], open the "Skills" configuration section, select "Your Skills", scroll to the bottom, tap on the Flash Briefing Skill you just created, enable it, then manage Flash Briefing and adjust ordering as necessary. Finally ask your Echo for your "news","flash briefing", or "briefing". + +## {% linkable_title Smart Home %} + +While the Skills API described above allows for arbitrary intents, all +utterances must begin with "Alexa, tell $invocation_name ..." + +The [Emulated Hue component][emulated-hue-component] provides a simpler +interface such as, "Alexa, turn on the kitchen light". However it has some +limitations since everything looks like a light bulb. + +Amazon provides a Smart Home API for richer home automation control. It takes +considerable effort to configure. The easy solution is to use +[Home Assistant Cloud](/components/cloud/). + +If you don't want to use Home Assistant Cloud and are willing to do the +integration work yourself, Home Assistant can expose an HTTP API which makes +the integration work easier. Example configuration: + +```yaml +alexa: + smart_home: + filter: + include_entities: + - light.kitchen + - light.kitchen_left + include_domains: + - switch + exclude_entities: + - switch.outside + entity_config: + light.kitchen: + name: Custom Name for Alexa + description: The light in the kitchen + switch.stairs: + display_categories: LIGHT +``` + +This exposes an HTTP POST endpoint at `http://your_hass_ip/api/alexa/smart_home` +which accepts and returns messages conforming to the +[Smart Home v3 payload](https://developer.amazon.com/docs/smarthome/smart-home-skill-api-message-reference.html). +You must then create an Amazon developer account with an Alexa skill and Lambda +function to integrate this endpoint. See +[Haaska](https://github.com/auchter/haaska) for an example. + [amazon-dev-console]: https://developer.amazon.com [flash-briefing-api]: https://developer.amazon.com/alexa-skills-kit/flash-briefing [flash-briefing-api-docs]: https://developer.amazon.com/public/solutions/alexa/alexa-skills-kit/docs/flash-briefing-skill-api-feed-reference From 0ac0feadf511b7367000504ff073e663575ac7e2 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Tue, 23 Jan 2018 23:24:59 -0800 Subject: [PATCH 169/993] Update 2018-01-21-clarification-emulated-hue.markdown --- source/_posts/2018-01-21-clarification-emulated-hue.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_posts/2018-01-21-clarification-emulated-hue.markdown b/source/_posts/2018-01-21-clarification-emulated-hue.markdown index 11d57e37c5..5284113bc5 100644 --- a/source/_posts/2018-01-21-clarification-emulated-hue.markdown +++ b/source/_posts/2018-01-21-clarification-emulated-hue.markdown @@ -7,7 +7,7 @@ date_formatted: "January 21, 2018" author: Paulus Schoutsen author_twitter: balloob comments: true -categories: Public Service Announcement +categories: Public-Service-Announcement --- There are some misconceptions floating around about the future of the Emulated Hue component and I would like to set the record straight. **The Emulated Hue component is not going to be removed nor will we ever remove any functionality from Home Assistant to push you to support the Home Assistant project by subscribing to the Community Support Package.** From 483bc52dc0a03e7c44cf6ab1b5d1966f2b156bac Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=85skar=20Andersson?= Date: Wed, 24 Jan 2018 08:27:20 +0100 Subject: [PATCH 170/993] wheel install needed (#4499) --- source/_docs/installation/virtualenv.markdown | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/source/_docs/installation/virtualenv.markdown b/source/_docs/installation/virtualenv.markdown index e62966b26c..a851a8eb78 100644 --- a/source/_docs/installation/virtualenv.markdown +++ b/source/_docs/installation/virtualenv.markdown @@ -30,12 +30,16 @@ _(If you're on a Debian based system, you will need to install Python virtual en ``` $ source bin/activate ``` - 4. Install Home Assistant: + 4. Install wheel: + ``` + $ python3 -m pip install wheel + ``` + 5. Install Home Assistant: ``` $ python3 -m pip install homeassistant - ``` - 5. Configure it to [autostart](/docs/autostart/) - 6. Or run Home Assistant manually: + ``` + 6. Configure it to [autostart](/docs/autostart/) + 7. Or run Home Assistant manually: ``` $ hass --open-ui ``` From 49f53fd9881c2d9f017830934b623c5980517595 Mon Sep 17 00:00:00 2001 From: Franck Nijhof Date: Wed, 24 Jan 2018 08:28:39 +0100 Subject: [PATCH 171/993] :white_check_mark: Various markdown, spelling, and grammar fixes (#4503) --- .github/PULL_REQUEST_TEMPLATE.md | 4 +- CODE_OF_CONDUCT.md | 2 +- source/_components/abode.markdown | 2 +- source/_components/ads.markdown | 3 +- .../alarm_control_panel.abode.markdown | 1 - .../alarm_control_panel.alarmdecoder.markdown | 1 - .../alarm_control_panel.alarmdotcom.markdown | 1 - .../alarm_control_panel.arlo.markdown | 1 - .../alarm_control_panel.concord232.markdown | 3 +- .../alarm_control_panel.egardia.markdown | 38 +++++++------- source/developers/releasing.markdown | 50 +++++++++---------- source/developers/rest_api.markdown | 42 +++++++++++----- source/developers/websocket_api.markdown | 21 ++++---- source/docs/index.markdown | 1 - source/faq/index.markdown | 3 ++ source/getting-started/index.markdown | 30 +++++------ .../presence-detection.markdown | 4 +- source/hassio/external_storage.markdown | 1 - source/hassio/index.markdown | 20 ++++---- source/hassio/installation.markdown | 4 +- .../installing_third_party_addons.markdown | 2 +- source/hassio/run_local.markdown | 3 +- source/hassio/zwave.markdown | 4 +- source/help/index.markdown | 16 +++--- source/help/talking-points.markdown | 2 - source/help/trivia.markdown | 10 ++-- source/privacy/index.markdown | 20 ++++++-- source/tos/index.markdown | 19 ++++--- 28 files changed, 163 insertions(+), 145 deletions(-) diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index 30f074df14..bfbe7bd2c0 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -5,7 +5,7 @@ ## Checklist: - - [ ] Branch: Fixes, changes and adjustments should be created against `current`. New documentation for platforms/components and features should go to `next`. - - [ ] The documentation follow the [standards][standards]. +- [ ] Branch: Fixes, changes and adjustments should be created against `current`. New documentation for platforms/components and features should go to `next`. +- [ ] The documentation follow the [standards][standards]. [standards]: https://home-assistant.io/developers/documentation/standards/ diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md index 5d2149dce0..de2de6f6b5 100644 --- a/CODE_OF_CONDUCT.md +++ b/CODE_OF_CONDUCT.md @@ -23,7 +23,7 @@ include: Examples of unacceptable behavior by participants include: * The use of sexualized language or imagery and unwelcome sexual attention or -advances + advances * Trolling, insulting/derogatory comments, and personal or political attacks * Public or private harassment * Publishing others' private information, such as a physical or electronic diff --git a/source/_components/abode.markdown b/source/_components/abode.markdown index 3314bcc903..34ceaada84 100644 --- a/source/_components/abode.markdown +++ b/source/_components/abode.markdown @@ -13,7 +13,7 @@ ha_release: 0.52 ha_iot_class: "Cloud Push" --- -The `abode` component will allow users to integrate their Abode Home Security systems into Home Assistant and use its alarm system and sensors to automate their homes. +The `abode` component will allow users to integrate their Abode Home Security systems into Home Assistant and use its alarm system and sensors to automate their homes. Please visit the [Abode website](https://goabode.com/) for further information about Abode Security. diff --git a/source/_components/ads.markdown b/source/_components/ads.markdown index cea2088d32..9e8463add0 100644 --- a/source/_components/ads.markdown +++ b/source/_components/ads.markdown @@ -53,7 +53,6 @@ The ADS component will register the service `write_by_name` allowing you to writ Service parameters: -- **adsvar**: Name of the variable on the ADS device. To access global variables on *TwinCAT2* use a prepending dot `.myvariable`, for TwinCAT3 use -`GBL.myvariable`. +- **adsvar**: Name of the variable on the ADS device. To access global variables on *TwinCAT2* use a prepending dot `.myvariable`, for TwinCAT3 use `GBL.myvariable`. - **adstype**: Specify the type of the variable. Use one of the following: `int`, `byte`, `uint`, `bool` - **value**: The value that will be written in the variable. diff --git a/source/_components/alarm_control_panel.abode.markdown b/source/_components/alarm_control_panel.abode.markdown index 99889db76d..5df73f1c05 100644 --- a/source/_components/alarm_control_panel.abode.markdown +++ b/source/_components/alarm_control_panel.abode.markdown @@ -13,7 +13,6 @@ ha_release: 0.52 ha_iot_class: "Cloud Push" --- - The `abode` security control panel platform allows you to control your [Abode](https://goabode.com/) alarms. The requirement is that you have setup your [Abode hub](/components/abode/). diff --git a/source/_components/alarm_control_panel.alarmdecoder.markdown b/source/_components/alarm_control_panel.alarmdecoder.markdown index 991bdeb772..d677173ebb 100644 --- a/source/_components/alarm_control_panel.alarmdecoder.markdown +++ b/source/_components/alarm_control_panel.alarmdecoder.markdown @@ -13,7 +13,6 @@ ha_release: 0.43 ha_iot_class: "Local Push" --- - The `alarmdecoder` alarm control panel platform allows you to control your [AlarmDecoder](https://www.alarmdecoder.com) alarms. The requirement is that you have setup your [AlarmDecoder hub](/components/alarmdecoder/). diff --git a/source/_components/alarm_control_panel.alarmdotcom.markdown b/source/_components/alarm_control_panel.alarmdotcom.markdown index ebffcc5c0d..895cde8e35 100644 --- a/source/_components/alarm_control_panel.alarmdotcom.markdown +++ b/source/_components/alarm_control_panel.alarmdotcom.markdown @@ -30,4 +30,3 @@ Configuration variables: - **password** (*Required*): Password for Alarm.com account. - **name** (*Optional*): The name of the alarm. Default is 'Alarm.com'. - **code** (*Optional*): Specifies a code to enable or disable the alarm in the frontend. - diff --git a/source/_components/alarm_control_panel.arlo.markdown b/source/_components/alarm_control_panel.arlo.markdown index 19294db81b..6d66bef11b 100644 --- a/source/_components/alarm_control_panel.arlo.markdown +++ b/source/_components/alarm_control_panel.arlo.markdown @@ -13,7 +13,6 @@ ha_release: 0.56 ha_iot_class: "Cloud Polling" --- - The `arlo` alarm control panel allows you to control your [Arlo](https://arlo.netgear.com/) base stations. You can use it to switch modes and trigger alarms from Home Assistant. To get your [Arlo](https://arlo.netgear.com/) base stations working within Home Assistant, please follow the instructions for the general [Arlo component](/components/arlo). diff --git a/source/_components/alarm_control_panel.concord232.markdown b/source/_components/alarm_control_panel.concord232.markdown index 8a9c00b7b3..86be0b7517 100644 --- a/source/_components/alarm_control_panel.concord232.markdown +++ b/source/_components/alarm_control_panel.concord232.markdown @@ -14,7 +14,7 @@ ha_release: 0.31 The `concord232` platform provides integration with GE, Interlogix (and other brands) alarm panels that support the RS-232 Automation Control Panel interface module (or have it built in). Supported panels include Concord 4. -To use this platform, you will need to have the external concord232 client and server installed. The server must be running on the device which is connected to the automation module's serial port. The client must be installed on the machine running Home Assistant. These may often be the same machine, but do not have to be. For additional details in setting up and testing the client and server, see https://github.com/JasonCarter80/concord232. +To use this platform, you will need to have the external concord232 client and server installed. The server must be running on the device which is connected to the automation module's serial port. The client must be installed on the machine running Home Assistant. These may often be the same machine, but do not have to be. For additional details in setting up and testing the client and server, see To enable this platform in home assistant, add the following lines to your `configuration.yaml`: @@ -28,4 +28,3 @@ Configuration variables: - **host** (*Optional*): The host where the concord232 server process is running. Defaults to localhost. - **port** (*Optional*): The port where the Alarm panel is listening. Defaults to 5007. - diff --git a/source/_components/alarm_control_panel.egardia.markdown b/source/_components/alarm_control_panel.egardia.markdown index 20c555587e..3fdd4d5753 100644 --- a/source/_components/alarm_control_panel.egardia.markdown +++ b/source/_components/alarm_control_panel.egardia.markdown @@ -43,25 +43,25 @@ Note that this basic configuration will only enable you to read the armed/armed You can change this, however, using the following procedure. This is a more advanced configuration. 1. Log in into your alarm system's control panel. You will need to access http://[IP of your control panel]. You know this already since you need it in the basic configuration from above. Log in to the control panel with your Egardia/Woonveilig username and password. -2. Once logged in, go to *System Settings*, *Report* and change the Server Address for your primary server to the IP or hostname of your Home Assistant machine. You can leave the port number set to 52010 or change it to anything you like. **Make sure to change the settings of the primary server otherwise the messages will not come through. Note that this will limit (or fully stop) the number of alarm messages you will get through Egardia's / Woonveilig services.** Maybe, that is just what you want. Make sure to save your settings by selecting 'OK'. -3. On your Home Assistant machine run `$ sudo python3 egardiaserver.py`. Refer to the [python-egardia repository](https://github.com/jeroenterheerdt/python-egardia) for detailed documentation on parameters. This will receive status codes from your alarm control panel and display them. You will need the codes to include in your configuration.yaml. Make sure to change the status of your alarm to all states (disarm, arm, home) by all means possible (all users, remotes, web login, app) as well as trigger the alarm in all ways possible to get 100% coverage. **Before triggering the alarm it might be good to disable the siren temporarily (can be done in Panel Settings).** -4. Once you have the codes, update your `configuration.yaml`: -```yaml -# Example configuration.yaml entry -alarm_control_panel: -  - platform: egardia -   host: YOUR_HOST -   username: YOUR_USERNAME -   password: YOUR_PASSWORD - report_server_enabled: True - report_server_port: PORT_OF_EGARDIASERVER (optional, defaults to 52010) - report_server_codes: - arm: XXXXXXXXXXXXXXXX, XXXXXXXXXXXXXXXX - disarm: XXXXXXXXXXXXXXXX, XXXXXXXXXXXXXXXX - home: XXXXXXXXXXXXXXXX - triggered: XXXXXXXXXXXXXXXX, XXXXXXXXXXXXXXXX, XXXXXXXXXXXXXXXX - ignore: XXXXXXXXXXXXXXXX -``` +1. Once logged in, go to *System Settings*, *Report* and change the Server Address for your primary server to the IP or hostname of your Home Assistant machine. You can leave the port number set to 52010 or change it to anything you like. **Make sure to change the settings of the primary server otherwise the messages will not come through. Note that this will limit (or fully stop) the number of alarm messages you will get through Egardia's / Woonveilig services.** Maybe, that is just what you want. Make sure to save your settings by selecting 'OK'. +1. On your Home Assistant machine run `$ sudo python3 egardiaserver.py`. Refer to the [python-egardia repository](https://github.com/jeroenterheerdt/python-egardia) for detailed documentation on parameters. This will receive status codes from your alarm control panel and display them. You will need the codes to include in your configuration.yaml. Make sure to change the status of your alarm to all states (disarm, arm, home) by all means possible (all users, remotes, web login, app) as well as trigger the alarm in all ways possible to get 100% coverage. **Before triggering the alarm it might be good to disable the siren temporarily (can be done in Panel Settings).** +1. Once you have the codes, update your `configuration.yaml`: + ```yaml + # Example configuration.yaml entry + alarm_control_panel: +  - platform: egardia +   host: YOUR_HOST +   username: YOUR_USERNAME +   password: YOUR_PASSWORD + report_server_enabled: True + report_server_port: PORT_OF_EGARDIASERVER (optional, defaults to 52010) + report_server_codes: + arm: XXXXXXXXXXXXXXXX, XXXXXXXXXXXXXXXX + disarm: XXXXXXXXXXXXXXXX, XXXXXXXXXXXXXXXX + home: XXXXXXXXXXXXXXXX + triggered: XXXXXXXXXXXXXXXX, XXXXXXXXXXXXXXXX, XXXXXXXXXXXXXXXX + ignore: XXXXXXXXXXXXXXXX + ``` Note that for *triggered*, *arm* and *disarm* multiple codes can be entered since each sensor triggers with a different code and each user of the system has its own arm and disarm codes. Also note that your system will do regular system checks which will be reported as well. Since Home Assistant provides no way of handling them properly, you can enter those codes as *ignore* (again, multiple codes can be used here). The egardia component will ignore these codes and continue returning the old status if it receives any of the codes that are listed as ignore. This is useful for example when you have armed your alarm at night: normally a system check will occur at least once during the night and if that code is not specified anywhere Home Assistant will set the status of the alarm to its default, which is unarmed. This is in fact wrong. Listing the code as ignore changes this behavior and Home Assistant will continue to show the status the alarm is in (disarm, arm, home, triggered) even when system checks occur. diff --git a/source/developers/releasing.markdown b/source/developers/releasing.markdown index 55ef646a99..5ddce85418 100644 --- a/source/developers/releasing.markdown +++ b/source/developers/releasing.markdown @@ -9,22 +9,22 @@ sharing: true footer: true --- -This page describes the steps for publishing a new Home Assistant release. Those steps requires that you don't use forks but work with the repositories themself. The [hass-release](https://github.com/home-assistant/hass-release) script is a helper to do a release. +This page describes the steps for publishing a new Home Assistant release. Those steps requires that you don't use forks but work with the repositories themself. The [hass-release](https://github.com/home-assistant/hass-release) script is a helper to do a release. ### {% linkable_title Release preparation (3 days before release) %} ### {% linkable_title GitHub %} 1. Merge `master` into `dev` to make the PR mergeable. -2. Cut a release branch from `dev`. Example name `release-0-57`. -3. Create a pull request from the release branch to `master` with the upcoming release number as the title. -4. Update `homeassistant/const.py` with the correct version number (remove the `dev` tag) and push that commit to release branch. +1. Cut a release branch from `dev`. Example name `release-0-57`. +1. Create a pull request from the release branch to `master` with the upcoming release number as the title. +1. Update `homeassistant/const.py` with the correct version number (remove the `dev` tag) and push that commit to release branch. ### {% linkable_title Website %} 1. Merge `current` into `next` -2. Cut release branch of `next`. For example `release-0-57`. -3. Open a PR from release branch to `current` with the upcoming release number as the title. +1. Cut release branch of `next`. For example `release-0-57`. +1. Open a PR from release branch to `current` with the upcoming release number as the title. ## {% linkable_title Release day %} @@ -33,22 +33,22 @@ From creating the release branch till it has been merged, we tag bugfixes with t ### {% linkable_title GitHub %} 1. Cherry-pick the milestoned PRs that need to get into the release `python3 -m hassrelease milestone_cherry_pick 0.57` -2. Run `python3 -m hassrelease release_notes 0.56` for the release notes. -3. Once the release notes has been generated, issue `python3 -m hassrelease milestone_close 0.56` -4. Merge pull request (DO NOT SQUASH!). Use `Merge pull request`. -5. Go to [releases](https://github.com/home-assistant/home-assistant/releases), click `Draft a new release` and tag a new release on the `master` branch. "Tag version" and "Release title" are the version number (`O.x` for major version, `0.x.y` for minor and bug fix releases). Release description is the text from PR. Press "Publish release" to finish the process. -6. Merge `master` into `dev`. -7. Update `homeassistant/const.py` with the upcoming version number (including the `dev` tag) and push that commit to the `dev` branch. +1. Run `python3 -m hassrelease release_notes 0.56` for the release notes. +1. Once the release notes has been generated, issue `python3 -m hassrelease milestone_close 0.56` +1. Merge pull request (DO NOT SQUASH!). Use `Merge pull request`. +1. Go to [releases](https://github.com/home-assistant/home-assistant/releases), click `Draft a new release` and tag a new release on the `master` branch. "Tag version" and "Release title" are the version number (`O.x` for major version, `0.x.y` for minor and bug fix releases). Release description is the text from PR. Press "Publish release" to finish the process. +1. Merge `master` into `dev`. +1. Update `homeassistant/const.py` with the upcoming version number (including the `dev` tag) and push that commit to the `dev` branch. ### {% linkable_title Website %} 1. Create a blog post in the release branch and base it on the text of the PR in the main repository. Add images, additional text, links, etc. if it adds value. Tag each platform/component in a message to documentation. -2. Create missing documentation as stubs. -3. Run `credits_generator`. -4. Update `_config.yml` with a link to the new release blog post and version number (at the bottom of the file). -5. Merge `current` into release branch (`$ git checkout release-0-40 && git merge current`) to make the PR mergeable. -6. Merge pull request (blog post, updated frontpage, and all new documentation) to `current`. DO NOT SQUASH! -7. Merge `current` into `next`. +1. Create missing documentation as stubs. +1. Run `credits_generator`. +1. Update `_config.yml` with a link to the new release blog post and version number (at the bottom of the file). +1. Merge `current` into release branch (`$ git checkout release-0-40 && git merge current`) to make the PR mergeable. +1. Merge pull request (blog post, updated frontpage, and all new documentation) to `current`. DO NOT SQUASH! +1. Merge `current` into `next`. ### {% linkable_title Docker Hub %} @@ -65,10 +65,10 @@ Checkout the `master` branch and run `script/release` to publish the new release ## {% linkable_title Bugfix Release %} 1. Checkout `master` and update it. `git checkout master && git pull --rebase` -2. Create a new release branch from `master`. `git checkout -b release-0-56-2` -3. Cherry-pick the PRs which were milestoned. -4. Update `homeassistant/const.py` with the correct version number (increment `PATCH_VERSION`) and push that commit to release branch. -5. Create a pull request from the release branch to `master` with the upcoming release number as the title. -6. Merge pull request (DO NOT SQUASH!). Use `Merge pull request`. -7. Go to [releases](https://github.com/home-assistant/home-assistant/releases), click `Draft a new release` and tag a new release on the `master` branch. "Tag version" and "Release title" are the version number (`O.x` for major version, `0.x.y` for minor and bug fix releases). Release description is the text from PR. Press "Publish release" to finish the process. -8. [Publish](/developers/releasing/#python-package-index) the new release on PyPI. +1. Create a new release branch from `master`. `git checkout -b release-0-56-2` +1. Cherry-pick the PRs which were milestoned. +1. Update `homeassistant/const.py` with the correct version number (increment `PATCH_VERSION`) and push that commit to release branch. +1. Create a pull request from the release branch to `master` with the upcoming release number as the title. +1. Merge pull request (DO NOT SQUASH!). Use `Merge pull request`. +1. Go to [releases](https://github.com/home-assistant/home-assistant/releases), click `Draft a new release` and tag a new release on the `master` branch. "Tag version" and "Release title" are the version number (`O.x` for major version, `0.x.y` for minor and bug fix releases). Release description is the text from PR. Press "Publish release" to finish the process. +1. [Publish](/developers/releasing/#python-package-index) the new release on PyPI. diff --git a/source/developers/rest_api.markdown b/source/developers/rest_api.markdown index cf850cfbec..2395c1f6ea 100644 --- a/source/developers/rest_api.markdown +++ b/source/developers/rest_api.markdown @@ -11,8 +11,8 @@ footer: true Home Assistant runs a web server accessible on port 8123. - * http://IP_ADDRESS:8123/ is an interface to control Home Assistant. - * http://IP_ADDRESS:8123/api/ is a Rest API. +* http://IP_ADDRESS:8123/ is an interface to control Home Assistant. +* http://IP_ADDRESS:8123/api/ is a Rest API. The API accepts and returns only JSON encoded objects. All API calls have to be accompanied by the header `X-HA-Access: YOUR_PASSWORD` (YOUR_PASSWORD as specified in your `configuration.yaml` file in the [`http:` section](/components/http/)). @@ -25,7 +25,7 @@ curl -X GET \ http://IP_ADDRESS:8123/ENDPOINT ``` -Another option is to use Python and the [Requests](http://docs.python-requests.org/en/latest/) module. +Another option is to use Python and the [Requests](http://docs.python-requests.org/en/latest/) module. = ```python from requests import get @@ -44,16 +44,17 @@ You can append `?api_password=YOUR_PASSWORD` to any URL to log in automatically. Successful calls will return status code 200 or 201. Other status codes that can return are: - - 400 (Bad Request) - - 401 (Unauthorized) - - 404 (Not Found) - - 405 (Method not allowed) +- 400 (Bad Request) +- 401 (Unauthorized) +- 404 (Not Found) +- 405 (Method not allowed) ### {% linkable_title Actions %} The API supports the following actions: #### {% linkable_title GET /api/ %} + Returns a message if the API is up and running. ```json @@ -70,11 +71,12 @@ $ curl -X GET -H "x-ha-access: YOUR_PASSWORD" \ ``` #### {% linkable_title GET /api/config %} + Returns the current configuration as JSON. ```json -{ - "components":[ +{ + "components":[ "sensor.cpuspeed", "frontend", "config.core", @@ -106,7 +108,7 @@ Returns the current configuration as JSON. "volume":"L" }, "version":"0.56.2", - "whitelist_external_dirs":[ + "whitelist_external_dirs":[ "/home/ha/.homeassistant/www", "/home/ha/.homeassistant/" ] @@ -121,6 +123,7 @@ $ curl -X GET -H "x-ha-access: YOUR_PASSWORD" \ ``` #### {% linkable_title GET /api/discovery_info %} + Returns basic information about the Home Assistant instance as JSON. ```json @@ -140,6 +143,7 @@ $ curl -X GET -H "x-ha-access: YOUR_PASSWORD" \ ``` #### {% linkable_title GET /api/events %} + Returns an array of event objects. Each event object contains event name and listener count. ```json @@ -163,6 +167,7 @@ $ curl -X GET -H "x-ha-access: YOUR_PASSWORD" \ ``` #### {% linkable_title GET /api/services %} + Returns an array of service objects. Each object contains the domain and which services it contains. ```json @@ -191,13 +196,15 @@ $ curl -X GET -H "x-ha-access: YOUR_PASSWORD" \ ``` #### {% linkable_title GET /api/history/period/<timestamp> %} + Returns an array of state changes in the past. Each object contains further details for the entities. The `` (`YYYY-MM-DDThh:mm:ssTZD`) is optional and defaults to 1 day before the time of the request. It determines the beginning of the period. You can pass the following optional GET parameters: - - `filter_entity_id=` to filter on a single entity - - `end_time=` to choose the end of the period in URL encoded format (defaults to 1 day). + +- `filter_entity_id=` to filter on a single entity +- `end_time=` to choose the end of the period in URL encoded format (defaults to 1 day). ```json [ @@ -247,6 +254,7 @@ $ curl -X GET -H "x-ha-access: YOUR_PASSWORD" \ ``` #### {% linkable_title GET /api/states %} + Returns an array of state objects. Each state has the following attributes: entity_id, state, last_changed and attributes. ```json @@ -274,6 +282,7 @@ $ curl -X GET -H "x-ha-access: YOUR_PASSWORD" \ ``` #### {% linkable_title GET /api/states/<entity_id> %} + Returns a state object for specified entity_id. Returns 404 if not found. ```json @@ -301,6 +310,7 @@ $ curl -X GET -H "x-ha-access: YOUR_PASSWORD" \ ``` #### {% linkable_title GET /api/error_log %} + Retrieve all errors logged during the current session of Home Assistant as a plaintext response. ```text @@ -318,6 +328,7 @@ $ curl -X GET -H "x-ha-access: YOUR_PASSWORD" \ ``` #### {% linkable_title GET /api/camera_proxy/camera.<entity_id> %} + Returns the data (image) from the specified camera entity_id. Sample `curl` command: @@ -329,6 +340,7 @@ $ curl -X GET -H "x-ha-access: YOUR_PASSWORD" \ ``` #### {% linkable_title POST /api/states/<entity_id> %} + Updates or creates the current state of an entity. Expects a JSON object that has at least a state attribute: @@ -368,6 +380,7 @@ $ curl -X POST -H "x-ha-access: YOUR_PASSWORD" \ ``` #### {% linkable_title POST /api/events/<event_type> %} + Fires an event with event_type You can pass an optional JSON object to be used as `event_data`. @@ -387,6 +400,7 @@ Returns a message if successful. ``` #### {% linkable_title POST /api/services/<domain>/<service> %} + Calls a service within a specific domain. Will return when the service has been executed or after 10 seconds, whichever comes first. You can pass an optional JSON object to be used as `service_data`. @@ -442,6 +456,7 @@ The result will include any states that changed while the service was being exec

#### {% linkable_title POST /api/template %} + Render a Home Assistant template. [See template docs for more information.](/topics/templating/) ```json @@ -465,6 +480,7 @@ $ curl -X POST -H "x-ha-access: YOUR_PASSWORD" \ ``` #### {% linkable_title POST /api/event_forwarding %} + Set up event forwarding to another Home Assistant instance. Requires a JSON object that represents the API to forward to. @@ -486,6 +502,7 @@ It will return a message if event forwarding was set up successfully. ``` #### {% linkable_title DELETE /api/event_forwarding %} + Cancel event forwarding to another Home Assistant instance.
Requires a JSON object that represents the API to cancel forwarding to. @@ -509,4 +526,3 @@ It will return a message if event forwarding was cancelled successfully.

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

- diff --git a/source/developers/websocket_api.markdown b/source/developers/websocket_api.markdown index 3cf5796c1b..2927b9df48 100644 --- a/source/developers/websocket_api.markdown +++ b/source/developers/websocket_api.markdown @@ -11,27 +11,27 @@ footer: true Home Assistant contains a WebSocket API. This API can be used to stream information from a Home Assistant instance to any client that implements WebSocket. Implementations in different languages: - - [JavaScript](https://github.com/home-assistant/home-assistant-js-websocket) - powers the frontend - - [Python](https://raw.githubusercontent.com/home-assistant/home-assistant-dev-helper/master/ha-websocket-client.py) - CLI client using [`asyncws`](https://async-websockets.readthedocs.io/en/latest/) - - [JavaScript/HTML](https://raw.githubusercontent.com/home-assistant/home-assistant-dev-helper/master/ha-websocket.html) - WebSocket connection in your browser +- [JavaScript](https://github.com/home-assistant/home-assistant-js-websocket) - powers the frontend +- [Python](https://raw.githubusercontent.com/home-assistant/home-assistant-dev-helper/master/ha-websocket-client.py) - CLI client using [`asyncws`](https://async-websockets.readthedocs.io/en/latest/) +- [JavaScript/HTML](https://raw.githubusercontent.com/home-assistant/home-assistant-dev-helper/master/ha-websocket.html) - WebSocket connection in your browser Connect your websocket implementation to `ws://localhost:8123/api/websocket`. ## {% linkable_title Server states %} - 1. Client connects - 2. Authentication phase starts +1. Client connects +1. Authentication phase starts - If no further authentication necessary for the user: go to 3 - Server sends `auth_required` message - Client sends `auth` message - If `auth` message correct: go to 3. - Server sends `auth_invalid`. Go to 6. - 3. Send `auth_ok` message - 4. Authentication phase ends. - 5. Command phase starts. +1. Send `auth_ok` message +1. Authentication phase ends. +1. Command phase starts. 1. Client can send commands. - 2. Server can send results of previous commands. - 6. Client or server disconnects session. + 1. Server can send results of previous commands. +1. Client or server disconnects session. During the command phase, the client attaches a unique identifier to each message. The server will add this identifier to each message so that the client can link each message to it's origin. @@ -217,7 +217,6 @@ The server will respond with a result message to indicate that unsubscribing was } ``` - ### {% linkable_title Calling a service %} This will call a service in Home Assistant. Right now there is no return value. The client can listen to `state_changed` events if it is interested in changed entities as a result of a service call. diff --git a/source/docs/index.markdown b/source/docs/index.markdown index 65a6e87c6b..cbc6b8e364 100644 --- a/source/docs/index.markdown +++ b/source/docs/index.markdown @@ -52,5 +52,4 @@ The documentation covers from beginner to advanced topic around the installation
- To see what Home Assistant can do, take a look at the [demo page](/demo). diff --git a/source/faq/index.markdown b/source/faq/index.markdown index cdf865abf4..f3af719ffb 100644 --- a/source/faq/index.markdown +++ b/source/faq/index.markdown @@ -17,11 +17,14 @@ This is a community curated list of frequently asked questions (FAQ) about the i {% assign categories = faq | map: 'ha_category' | uniq | sort %} {% for category in categories %} + ## {% linkable_title {{ category }} %} {% for entry in faq %} {% if entry.ha_category == category %} + ### {% linkable_title {{ entry.title }} %} + {{entry.content}} {% endif %} {% endfor %} diff --git a/source/getting-started/index.markdown b/source/getting-started/index.markdown index 00af92bbd0..0c0150e1c0 100644 --- a/source/getting-started/index.markdown +++ b/source/getting-started/index.markdown @@ -17,30 +17,30 @@ Follow this guide if you want to easily get started with Home Assistant, or if y We will need a few things to get started with installing Home Assistant. Links below are linking to Amazon US. If you're not in the US, you should be able to find these items in web stores in your country. - - [Raspberry Pi 3 model B](http://a.co/gEfMqL4) + [Power Supply](http://a.co/cgKUgkt) (at least 2.5A) - - [Micro SD Card](http://a.co/gslOydD). Get one that is Class 10 as they are more reliable. Size 32GB or bigger recommended. - - SD Card reader. Part of most laptops, and also available as [standalone USB sticks](http://a.co/5FCyb0N) (the brand doesn't matter, just pick the cheapest) - - Ethernet cable (optional, Hass.io can work with WiFi too) +- [Raspberry Pi 3 model B](http://a.co/gEfMqL4) + [Power Supply](http://a.co/cgKUgkt) (at least 2.5A) +- [Micro SD Card](http://a.co/gslOydD). Get one that is Class 10 as they are more reliable. Size 32GB or bigger recommended. +- SD Card reader. Part of most laptops, and also available as [standalone USB sticks](http://a.co/5FCyb0N) (the brand doesn't matter, just pick the cheapest) +- Ethernet cable (optional, Hass.io can work with WiFi too) ### {% linkable_title Software requirements %} - - Download [Hass.io image for Raspberry Pi 3][pi3] - - Download [Etcher] to write the image to an SD card - - Text Editor like [Visual Studio Code](https://code.visualstudio.com/) +- Download [Hass.io image for Raspberry Pi 3][pi3] +- Download [Etcher] to write the image to an SD card +- Text Editor like [Visual Studio Code](https://code.visualstudio.com/) [Etcher]: https://etcher.io/ [pi3]: https://github.com/home-assistant/hassio-build/releases/download/1.1/resinos-hassio-1.1-raspberrypi3.img.bz2 ### Installing Hass.io - 1. Put the SD card in your SD card reader. - 2. Open Etcher, select the Hass.io image and flash it to the SD card. - 3. WiFi setup only: open the file `system-connections/resin-sample` with a text editor. Change `ssid` to be your network name and `psk` to be your password. - 4. Unmount the SD card and remove it from your SD card reader. - 5. Insert the SD card into your Raspberry Pi 3. If you are going to use an Ethernet cable, connect that too. - 6. Connect your Raspberry Pi to the power supply so it turns on. - 7. The Raspberry Pi will now boot up, connect to the Internet and download the latest version of Home Assistant. This will take about 20 minutes. - 8. Home Assistant will be available at [http://hassio.local:8123][local]. +1. Put the SD card in your SD card reader. +1. Open Etcher, select the Hass.io image and flash it to the SD card. +1. WiFi setup only: open the file `system-connections/resin-sample` with a text editor. Change `ssid` to be your network name and `psk` to be your password. +1. Unmount the SD card and remove it from your SD card reader. +1. Insert the SD card into your Raspberry Pi 3. If you are going to use an Ethernet cable, connect that too. +1. Connect your Raspberry Pi to the power supply so it turns on. +1. The Raspberry Pi will now boot up, connect to the Internet and download the latest version of Home Assistant. This will take about 20 minutes. +1. Home Assistant will be available at [http://hassio.local:8123][local]. [local]: http://hassio.local:8123 diff --git a/source/getting-started/presence-detection.markdown b/source/getting-started/presence-detection.markdown index 8fe44b35c7..6861f89e30 100644 --- a/source/getting-started/presence-detection.markdown +++ b/source/getting-started/presence-detection.markdown @@ -15,8 +15,8 @@ We care about privacy. Collected data is only stored in your instance of Presence detection detects if people are home, which is the most valuable input for automation. Knowing who is home or where they are, will open a whole range of other automation options: - - Send me a notification when my child arrives at school - - Turn on the AC when I leave work +- Send me a notification when my child arrives at school +- Turn on the AC when I leave work

diff --git a/source/hassio/external_storage.markdown b/source/hassio/external_storage.markdown index a69b7b8a78..b4a930bc19 100644 --- a/source/hassio/external_storage.markdown +++ b/source/hassio/external_storage.markdown @@ -9,7 +9,6 @@ sharing: true footer: true --- - ### {% linkable_title ResinOS / Generic %} Map the USB drive into add-on with `devices` options. If you need it on multiple add-ons, you can use the `/share` folder which is accessible from various add-ons. diff --git a/source/hassio/index.markdown b/source/hassio/index.markdown index 35eb09a523..21b11a2e05 100644 --- a/source/hassio/index.markdown +++ b/source/hassio/index.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Hass.io" -description: "Manage your Home Assistant and custom addons." +description: "Manage your Home Assistant and custom add-ons." date: 2017-04-30 13:28 sidebar: true comments: false @@ -15,14 +15,14 @@ Hass.io turns your Raspberry Pi (or another device) into the ultimate home autom The advantages of using Hass.io: - - Free and open source - - Optimized for embedded devices like Raspberry Pi - - 100% local home automation - - Easy installation and updates (powered by [ResinOS] and [Docker]) - - Management user interface integrated into Home Assistant - - Easily create and restore full backups of your whole configuration. - - Easily install many popular add-ons including [Google Assistant], encryption via [Let's Encrypt] and dynamic DNS via [Duck DNS].

[Browse available add-ons »][all]

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

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

+- Free and open source +- Optimized for embedded devices like Raspberry Pi +- 100% local home automation +- Easy installation and updates (powered by [ResinOS] and [Docker]) +- Management user interface integrated into Home Assistant +- Easily create and restore full backups of your whole configuration. +- Easily install many popular add-ons including [Google Assistant], encryption via [Let's Encrypt] and dynamic DNS via [Duck DNS].

[Browse available add-ons »][all]

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

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

diff --git a/source/_includes/javascripts/scripts.html b/source/_includes/javascripts/scripts.html index 32903641a2..71b49ae662 100644 --- a/source/_includes/javascripts/scripts.html +++ b/source/_includes/javascripts/scripts.html @@ -4,7 +4,11 @@ {% endcomment %} {% include javascripts/google_analytics.html %} + +{% if site.disqus_short_name and post.date < site.disqus_end_date and page.comments == true %} {% include javascripts/disqus.html %} +{% endif %} + {% include javascripts/algolia.html %} {% if page.sidebar != false %} diff --git a/source/_layouts/post.html b/source/_layouts/post.html index 9d5c8e41ad..3ba1b0b4e6 100644 --- a/source/_layouts/post.html +++ b/source/_layouts/post.html @@ -8,9 +8,26 @@ is_post: true {% include blog/post/article.html %} -{% if site.disqus_short_name and page.comments == true %} +
+ +{% if site.disqus_short_name and post.date < site.disqus_end_date and page.comments == true %}

Comments

{% include blog/post/disqus_thread.html %}
+{% endif %} + +{% if page.comments == true and post.date > site.disqus_end_date %} +
+ + {% endif %} \ No newline at end of file From b18f20e6f334c8e670129df1b5b79ed7da98cb4b Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Sat, 27 Jan 2018 00:42:37 -0800 Subject: [PATCH 211/993] Update breaking change --- source/_posts/2018-01-27-release-62.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_posts/2018-01-27-release-62.markdown b/source/_posts/2018-01-27-release-62.markdown index 60a7f00601..95815a3104 100644 --- a/source/_posts/2018-01-27-release-62.markdown +++ b/source/_posts/2018-01-27-release-62.markdown @@ -43,7 +43,7 @@ Experiencing issues introduced by this release? Please report them in our [issue - Tahoma platform will get new entity IDs ([@glpatcern] - [#11547]) ([tahoma docs]) ([cover.tahoma docs]) (breaking change) - Mold indicator: attribute names no longer include spaces or periods ([@olskar] - [#11694]) ([sensor.mold_indicator docs]) (breaking change) -- Custom component devs only: `EntityComponent.add_entity(entity)` and `EntityComponent.async_add_entity(entity)` have been removed. Use `EntityComponent.add_entities([entity])` and `EntityComponent.async_add_entities([entity])` instead. ([@balloob] - [#11691]) (breaking change) +- Custom component devs only: `EntityComponent.add_entity(entity)` and `EntityComponent.async_add_entity(entity)` have been removed. Use `EntityComponent.add_entities([entity])` and `EntityComponent.async_add_entities([entity])` instead. Also `EntityComponent.entities` is no longer a dictionary but instead an iterable. Use `EntityComponent.get_entity(entity_id)` to get entity by id. ([@balloob] - [#11691]) (breaking change) ## All changes From e66d5b81d2afcfb09bb16b63b3f059f98a59ce42 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Sat, 27 Jan 2018 01:01:24 -0800 Subject: [PATCH 212/993] Fix disqus comments --- source/_includes/javascripts/scripts.html | 5 ----- source/_layouts/post.html | 2 ++ 2 files changed, 2 insertions(+), 5 deletions(-) diff --git a/source/_includes/javascripts/scripts.html b/source/_includes/javascripts/scripts.html index 71b49ae662..dcb2fc520a 100644 --- a/source/_includes/javascripts/scripts.html +++ b/source/_includes/javascripts/scripts.html @@ -4,11 +4,6 @@ {% endcomment %} {% include javascripts/google_analytics.html %} - -{% if site.disqus_short_name and post.date < site.disqus_end_date and page.comments == true %} -{% include javascripts/disqus.html %} -{% endif %} - {% include javascripts/algolia.html %} {% if page.sidebar != false %} diff --git a/source/_layouts/post.html b/source/_layouts/post.html index 3ba1b0b4e6..2717179001 100644 --- a/source/_layouts/post.html +++ b/source/_layouts/post.html @@ -15,6 +15,8 @@ is_post: true

Comments

{% include blog/post/disqus_thread.html %}
+ +{% include javascripts/disqus.html %} {% endif %} {% if page.comments == true and post.date > site.disqus_end_date %} From 7a805853a3b6ff9939334a0f85fef2392988f849 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Sat, 27 Jan 2018 13:44:30 +0100 Subject: [PATCH 213/993] Replaced with local saved version --- source/_faq/release.markdown | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/source/_faq/release.markdown b/source/_faq/release.markdown index 5abcafcee5..f109e5468d 100644 --- a/source/_faq/release.markdown +++ b/source/_faq/release.markdown @@ -10,7 +10,5 @@ footer: true ha_category: Common --- -The usual release cycle is two weeks. - - -There will be no support for Python 2.x. Python 2 will be EOL in [2020](https://www.python.org/dev/peps/pep-0373/#id2) and it doesn't make any sense to support a release which was planned to be retired in 2015. +The usual release cycle is two weeks. Every other weekend will a new release of Home Assistant be available. There is no fix day or time when the release will happen because that depends on the person who is finishing the release. It can already be Monday at your location. If there was no announcement made in the previous release notes or on another communication channel then the release will happen. + From 4c45677ce13384f101282f055c994ee0845084d9 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Sat, 27 Jan 2018 14:34:38 +0100 Subject: [PATCH 214/993] Add section with firmware releases that supports discovery --- source/_docs/mqtt/discovery.markdown | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/source/_docs/mqtt/discovery.markdown b/source/_docs/mqtt/discovery.markdown index e9139095d7..26ddd658c3 100644 --- a/source/_docs/mqtt/discovery.markdown +++ b/source/_docs/mqtt/discovery.markdown @@ -51,6 +51,14 @@ The payload will be checked like an entry in your `configuration.yaml` file if a The `` level can be used by clients to only subscribe to their own (command) topics by using one wildcard topic like `/+//+/set`. +### {% linkable_title Support by third-party tools %} + +The following firmware for ESP8266, ESP32 and Sonoff unit has built-in support for MQTT discovery: + +- [Sonoff-Tasmota](https://github.com/arendst/Sonoff-Tasmota) (starting with 5.11.1e) +- [esphomelib](https://github.com/OttoWinter/esphomelib) +- [ESPurna](https://bitbucket.org/xoseperez/espurna) + ### {% linkable_title Examples %} A motion detection device which can be represented by a [binary sensor](/components/binary_sensor.mqtt/) for your garden would sent its configuration as JSON payload to the Configuration topic. After the first message to `config`, then the MQTT messages sent to the state topic will update the state in Home Assistant. @@ -93,3 +101,5 @@ Setting up a sensor with multiple measurement values requires multiple consecuti - Configuration topic no2: `homeassistant/sensor/sensorBedroomH/config` - Configuration payload no2: `{"device_class": "sensor", "name": "Humidity", "state_topic": "homeassistant/sensor/sensorBedroom/state", "unit_of_measurement": "%", "value_template": "{% raw %}{{ value_json.humidity}}{% endraw %}" }` - Common state payload: `{ "temperature": 23.20, "humidity": 43.70 }` + + From 2436d94e13cec951ad117019a2624339911d2a3f Mon Sep 17 00:00:00 2001 From: Diogo Gomes Date: Sat, 27 Jan 2018 16:55:56 +0000 Subject: [PATCH 215/993] Added examples --- .../media_player.panasonic_viera.markdown | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/source/_components/media_player.panasonic_viera.markdown b/source/_components/media_player.panasonic_viera.markdown index 38cf5f1f8b..920437f3c8 100644 --- a/source/_components/media_player.panasonic_viera.markdown +++ b/source/_components/media_player.panasonic_viera.markdown @@ -47,3 +47,29 @@ Configuration variables: - **port** (*Optional*): The port number of your Panasonic Viera TV. Defaults to `55000`. - **mac** (*Optional*): The MAC address of your Panasonic Viera TV, e.g. `AA:BB:CC:DD:99:1A`. - **name** (*Optional*): The name you would like to give to the Panasonic Viera TV. + +### {% linkable_title Example `play_media` script %} + +The `play_media` function can be used to open web pages and other media types (images, movies) in the TV web browser. + +```yaml +# Example play_media script that can be triggered when someone is detected at the door +# +script: + front_door_camera: + alias: "Show who's at the door" + sequence: + - service: media_player.turn_on + data: + entity_id: media_player.living_room_tv + - service: media_player.play_media + data: + entity_id: media_player.living_room_tv + media_content_type: "url" + media_content_id: "http://google.com" + - delay: + seconds: 5 + - service: media_player.media_stop + data: + entity_id: media_player.living_room_tv +``` From 50e4cec1fffdfee9e823e555a2c2da6c9616c067 Mon Sep 17 00:00:00 2001 From: Jerry Workman Date: Sat, 27 Jan 2018 12:18:16 -0500 Subject: [PATCH 216/993] Fix symbolic links, permissions and ownership (#4528) Fix symbolic links to python3 and homeassistant executable. Fix permissions and ownership to homeassistant directory to allow writing to home-assistant.log. --- source/_docs/installation/synology.markdown | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/source/_docs/installation/synology.markdown b/source/_docs/installation/synology.markdown index 34e228ebb5..9edf9fbb00 100644 --- a/source/_docs/installation/synology.markdown +++ b/source/_docs/installation/synology.markdown @@ -61,6 +61,8 @@ Create homeassistant config directory & switch to it ```bash # mkdir /volume1/homeassistant +# chown /volume1/homeassistant homeassistant +# chmod 755 /volume1/homeassistant # cd /volume1/homeassistant ``` Hint: alternatively you can also create a "Shared Folder" via Synology WebUI (e.g. via "File Station") - this has the advantage that the folder is visible via "File Station". @@ -175,8 +177,8 @@ esac Create links to python folders to make things easier in the future: ```bash -# ln -s /volume1/@appstore/py3k/usr/local/bin python3 -# ln -s /volume1/@appstore/py3k/usr/local/lib/python3.5/site-packages/homeassistant +# ln -s /volume1/@appstore/py3k/usr/local/bin/python3 python3 +# ln -s /volume1/@appstore/py3k/usr/local/lib/python3.5/site-packages/homeassistant homeassistant ``` Set the owner and permissions on your config folder From a964ae5ac813246ba319149d16adb45058dd94f7 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Sat, 27 Jan 2018 20:26:47 +0100 Subject: [PATCH 217/993] Add examples for ESPEasy (#4527) * Add sensor example * Small changes * Add ESPEasy example * Add ESPEasy example * Fixes * :pencil2: Minor improvements --- .../_components/binary_sensor.mqtt.markdown | 40 +++++++++++++++++-- source/_components/sensor.mqtt.markdown | 38 ++++++++++++++++-- source/_components/switch.mqtt.markdown | 28 ++++++++++++- 3 files changed, 98 insertions(+), 8 deletions(-) diff --git a/source/_components/binary_sensor.mqtt.markdown b/source/_components/binary_sensor.mqtt.markdown index 6505859838..b9b0b2ba55 100644 --- a/source/_components/binary_sensor.mqtt.markdown +++ b/source/_components/binary_sensor.mqtt.markdown @@ -13,12 +13,11 @@ ha_release: 0.9 ha_iot_class: "depends" --- - The `mqtt` binary sensor platform uses an MQTT message payload to set the binary sensor to one of two states: `on` or `off`. The binary sensor state will be updated only after a new message is published on `state_topic` matching `payload_on` or `payload_off`. If these messages are published with the `retain` flag set, the binary sensor will receive an instant state update after subscription and Home Assistant will display the correct state on startup. Otherwise, the initial state displayed in Home Assistant will be `unknown`. -The `mqtt` binary sensor platform optionally supports an `availability_topic` to receive online and offline messages (birth and LWT messages) from the MQTT device. During normal operation, if the MQTT cover device goes offline (i.e. publishes `payload_not_available` to `availability_topic`), Home Assistant will display the binary sensor as `unavailable`. If these messages are published with the `retain` flag set, the binary sensor will receive an instant update after subscription and Home Assistant will display the correct availability state of the binary sensor when Home Assistant starts up. If the `retain` flag is not set, Home Assistant will display the binary sensor as `unavailable` when Home Assistant starts up. If no `availability_topic` is defined, Home Assistant will consider the MQTT device to be available. +The `mqtt` binary sensor platform optionally supports an `availability_topic` to receive online and offline messages (birth and LWT messages) from the MQTT device. During normal operation, if the MQTT cover device goes offline (i.e., publishes `payload_not_available` to `availability_topic`), Home Assistant will display the binary sensor as `unavailable`. If these messages are published with the `retain` flag set, the binary sensor will receive an instant update after subscription and Home Assistant will display the correct availability state of the binary sensor when Home Assistant starts up. If the `retain` flag is not set, Home Assistant will display the binary sensor as `unavailable` when Home Assistant starts up. If no `availability_topic` is defined, Home Assistant will consider the MQTT device to be available. To use an MQTT binary sensor in your installation, add the following to your `configuration.yaml` file: @@ -78,6 +77,13 @@ value_template: type: string {% endconfiguration %} + +## {% linkable_title Examples %} + +In this section, you will find some real-life examples of how to use this sensor. + +### {% linkable_title Full configuration %} + To test, you can use the command line tool `mosquitto_pub` shipped with `mosquitto` or the `mosquitto-clients` package to send MQTT messages. To set the state of the binary sensor manually: ```bash @@ -86,6 +92,7 @@ $ mosquitto_pub -h 127.0.0.1 -t home-assistant/window/contact -m "OFF" The example below shows a full configuration for a binary sensor: +{% raw %} ```yaml # Example configuration.yaml entry binary_sensor: @@ -99,5 +106,32 @@ binary_sensor: payload_not_available: "offline" qos: 0 device_class: opening - value_template: '{% raw %}{{ value.x }}{% endraw %}' + value_template: '{{ value.x }}' ``` +{% endraw %} + +### {% linkable_title Get the state of a device with ESPEasy %} + +Assuming that you have flashed your ESP8266 unit with [ESPEasy](https://github.com/letscontrolit/ESPEasy). Under "Config" is a name ("Unit Name:") set for your device (here it's "bathroom"). A configuration for a "Controller" for MQTT with the protocol "OpenHAB MQTT" is present and the entries ("Controller Subscribe:" and "Controller Publish:") are adjusted to match your needs. In this example, the topics are prefixed with "home". Also, add a "Switch Input" in the "Devices" tap with the name "switch" and "button" as value. + +As soon as the unit is online, you will get the state of the attached button. + +```bash +home/bathroom/status Connected +... +home/bathroom/switch/button 1 +``` + +The configuration will look like the example below: + +{% raw %} +```yaml +# Example configuration.yml entry +binary_sensor: + - platform: mqtt + name: Bathroom + state_topic: "home/bathroom/switch/button" + payload_on: "1" + payload_off: "0" +``` +{% endraw %} diff --git a/source/_components/sensor.mqtt.markdown b/source/_components/sensor.mqtt.markdown index 2f80c563b1..e6b96b3bc1 100644 --- a/source/_components/sensor.mqtt.markdown +++ b/source/_components/sensor.mqtt.markdown @@ -90,8 +90,9 @@ If you are using the [Owntracks](/components/device_tracker.owntracks/) and enab owntracks/tablet/tablet {"_type":"location","lon":7.21,"t":"u","batt":92,"tst":144995643,"tid":"ta","acc":27,"lat":46.12} ``` -Thus the trick is extract the battery level from the payload. +Thus the trick is extracting the battery level from the payload. +{% raw %} ```yaml # Example configuration.yml entry sensor: @@ -99,8 +100,9 @@ sensor: state_topic: "owntracks/tablet/tablet" name: "Battery Tablet" unit_of_measurement: "%" - value_template: {% raw %}'{{ value_json.batt }}'{% endraw %} + value_template: '{{ value_json.batt }}' ``` +{% endraw %} ### {% linkable_title Get temperature and humidity %} @@ -116,6 +118,7 @@ office/sensor1 Then use this configuration example to extract the data from the payload: +{% raw %} ```yaml # Example configuration.yml entry sensor: @@ -123,10 +126,37 @@ sensor: state_topic: 'office/sensor1' name: 'Temperature' unit_of_measurement: '°C' - value_template: {% raw %}'{{ value_json.temperature }}'{% endraw %} + value_template: '{{ value_json.temperature }}' - platform: mqtt state_topic: 'office/sensor1' name: 'Humidity' unit_of_measurement: '%' - value_template: {% raw %}'{{ value_json.humidity }}'{% endraw %} + value_template: '{{ value_json.humidity }}' ``` +{% endraw %} + +### {% linkable_title Get sensor value from a device with ESPEasy %} + +Assuming that you have flashed your ESP8266 unit with [ESPEasy](https://github.com/letscontrolit/ESPEasy). Under "Config" set a name ("Unit Name:") for your device (here it's "bathroom"). A "Controller" for MQTT with the protocol "OpenHAB MQTT" is present and the entries ("Controller Subscribe:" and "Controller Publish:") are adjusted to match your needs. In this example the topics are prefixed with "home". Also, add a sensor in the "Devices" tap with the name "analog" and "brightness" as value. + +As soon as the unit is online, you will get the state of the sensor. + +```bash +home/bathroom/status Connected +... +home/bathroom/analog/brightness 290.00 +``` + +The configuration will look like the example below: + +{% raw %} +```yaml +# Example configuration.yml entry +sensor: + - platform: mqtt + state_topic: 'home/bathroom/analog/brightness' + name: Brightness +``` +{% endraw %} + + diff --git a/source/_components/switch.mqtt.markdown b/source/_components/switch.mqtt.markdown index 3804130cc6..17430c9c8f 100644 --- a/source/_components/switch.mqtt.markdown +++ b/source/_components/switch.mqtt.markdown @@ -119,5 +119,31 @@ switch: For a check you can use the command line tools `mosquitto_pub` shipped with `mosquitto` to send MQTT messages. This allows you to operate your switch manually: ```bash -$ mosquitto_pub -h 127.0.0.1 -t home/bedroom/switch1 -m "ON" +$ mosquitto_pub -h 127.0.0.1 -t home/bedroom/switch1 -m "ON" ``` + +### {% linkable_title Set the state of a device with ESPEasy %} + +Assuming that you have flashed your ESP8266 unit with [ESPEasy](https://github.com/letscontrolit/ESPEasy). Under "Config" is a name ("Unit Name:") set for your device (here it's "bathroom"). A configuration for a "Controller" for MQTT with the protocol "OpenHAB MQTT" is present and the entries ("Controller Subscribe:" and "Controller Publish:") are adjusted to match your needs. In this example the topics are prefixed with "home". There is no further configuration needed as the [GPIOs](https://www.letscontrolit.com/wiki/index.php/GPIO) can be controlled with MQTT directly. + +Manually you can set pin 13 to high with `mosquitto_pub` or another MQTT tool: + +```bash +$ mosquitto_pub -h 127.0.0.1 -t home/bathroom/gpio/13 -m "1" +``` + +The configuration will look like the example below: + +{% raw %} +```yaml +# Example configuration.yml entry +switch: + - platform: mqtt + name: bathroom + state_topic: "home/bathroom/gpio/13" + command_topic: "home/bathroom/gpio/13" + payload_on: "1" + payload_off: "0" +``` +{% endraw %} + From 9b8f0eacc5e27ab76d9afe31ed9c0f7fed35d222 Mon Sep 17 00:00:00 2001 From: Ronnie Garcia Date: Sat, 27 Jan 2018 20:57:53 +0100 Subject: [PATCH 218/993] Add UV data_type (#4531) --- source/_components/sensor.rfxtrx.markdown | 1 + 1 file changed, 1 insertion(+) diff --git a/source/_components/sensor.rfxtrx.markdown b/source/_components/sensor.rfxtrx.markdown index 6d9089e612..9df49ee684 100644 --- a/source/_components/sensor.rfxtrx.markdown +++ b/source/_components/sensor.rfxtrx.markdown @@ -66,6 +66,7 @@ Only these data_type are valid : - *Sound* - *Sensor Status* - *Counter value* +- *UV* Example configuration: From 757eb292f240bb48f25a8b751a132659e19cf400 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ville=20Skytt=C3=A4?= Date: Sun, 28 Jan 2018 10:10:52 +0200 Subject: [PATCH 219/993] Update ESPurna home page (#4535) --- source/_docs/mqtt/discovery.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_docs/mqtt/discovery.markdown b/source/_docs/mqtt/discovery.markdown index 26ddd658c3..0fa7a45c04 100644 --- a/source/_docs/mqtt/discovery.markdown +++ b/source/_docs/mqtt/discovery.markdown @@ -57,7 +57,7 @@ The following firmware for ESP8266, ESP32 and Sonoff unit has built-in support f - [Sonoff-Tasmota](https://github.com/arendst/Sonoff-Tasmota) (starting with 5.11.1e) - [esphomelib](https://github.com/OttoWinter/esphomelib) -- [ESPurna](https://bitbucket.org/xoseperez/espurna) +- [ESPurna](https://github.com/xoseperez/espurna) ### {% linkable_title Examples %} From 28a2b7ea5e1abec9fad16d501656d08890d10579 Mon Sep 17 00:00:00 2001 From: aquarium Date: Sun, 28 Jan 2018 03:12:00 -0500 Subject: [PATCH 220/993] Added KU7000 to supported models (#4539) --- 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 c743a69269..edaec8ca36 100644 --- a/source/_components/media_player.samsungtv.markdown +++ b/source/_components/media_player.samsungtv.markdown @@ -57,6 +57,7 @@ Currently known supported models: - K6500AF (port must be set to 8001) - KS8005 (port must be set to 8001, and `pip3 install websocket-client` must be executed) - KU6290 (port must be set to 8001) +- KU7000 (port must be set to 8001) - MU6170UXZG (port must be set to 8001, and `pip3 install websocket-client` must be executed) - KS7502 (port must be set to 8001, and `pip3 install websocket-client` must be executed, turn on doesn't work, turn off works fine) - K5600AK (partially supported, turn on works but state is not updated) From 72530aae812ca962a3844d77ff0db2c8cf2d6e6c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ville=20Skytt=C3=A4?= Date: Sun, 28 Jan 2018 10:12:56 +0200 Subject: [PATCH 221/993] Viera updates (#4536) * panasonic_viera: Add TX-P50GT30Y to known supported models * panasonic_viera: Sort list of known supported models * panasonic_viera: Point to actual source of page on GitHub --- .../media_player.panasonic_viera.markdown | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/source/_components/media_player.panasonic_viera.markdown b/source/_components/media_player.panasonic_viera.markdown index 38cf5f1f8b..0e58bcb390 100644 --- a/source/_components/media_player.panasonic_viera.markdown +++ b/source/_components/media_player.panasonic_viera.markdown @@ -18,17 +18,18 @@ The `panasonic_viera` platform allows you to control a Panasonic Viera TV. Currently known supported models: -- TX-P42STW50 - TC-P65VT30 -- TX-55CX700E +- TX-32AS520E - TX-49DX650B - TX-50DX700B -- TX-L42ET50 -- TX-P50GT60E +- TX-55CX700E - TX-65EXW784 -- TX-32AS520E +- TX-L42ET50 +- TX-P42STW50 +- TX-P50GT30Y +- TX-P50GT60E -If your model is not on the list then give it a test, if everything works correctly then add it to the list on [GitHub](https://github.com/home-assistant/home-assistant.io). +If your model is not on the list then give it a test, if everything works correctly then add it to the list on [GitHub](https://github.com/home-assistant/home-assistant.github.io/blob/next/source/_components/media_player.panasonic_viera.markdown). Some Panasonic Viera TVs allow Home Assistant to turn them on, if you specify the MAC address with `mac:`. From b62ba17d3ad26da3e472caefd02fff76af8e7b4a Mon Sep 17 00:00:00 2001 From: Rene Nulsch <33263735+ReneNulschDE@users.noreply.github.com> Date: Sun, 28 Jan 2018 09:55:17 +0100 Subject: [PATCH 222/993] Add absolute url config information (#4465) * Add absolute url config information * revert ha_release change, change url description * :hammer: Reverting "date" field --- source/_components/weblink.markdown | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/source/_components/weblink.markdown b/source/_components/weblink.markdown index 4d4d5b9cc8..b19f321955 100644 --- a/source/_components/weblink.markdown +++ b/source/_components/weblink.markdown @@ -24,11 +24,23 @@ weblink: url: http://192.168.1.1/ - name: Home Assistant url: https://home-assistant.io + - name: Grafana + url: /grafana ``` -Configuration variables: -- **name** (*Required*): Text for the link. -- **url** (*Required*): The URL for the link. -- **icon** (*Optional*): Icon for entry. +{% configuration %} +name: + description: Text for the link. + required: true + type: string +url: + description: The URL (absolute URL or absolute path) for the link. + required: true + type: string +icon: + description: Icon for entry. + required: false + type: string +{% endconfiguration %} Pick an icon that you can find on [materialdesignicons.com](https://materialdesignicons.com/) to use for your input and prefix the name with `mdi:`. For example `mdi:car`, `mdi:ambulance`, or `mdi:motorbike`. From c11484b983e2c30d5c118d64198620e4e557315a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ville=20Skytt=C3=A4?= Date: Sun, 28 Jan 2018 11:48:43 +0200 Subject: [PATCH 223/993] getting-started: Add some clarifications, notes and what (not) to expect Note volume where the resin-sample config is on the SD card, note RPI being a 2.4GHz WiFi device, state (non-)expectations about HDMI/keyboard/mouse, encourage browsing to landing page during download. --- source/getting-started/index.markdown | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/source/getting-started/index.markdown b/source/getting-started/index.markdown index 0c0150e1c0..766e76eef2 100644 --- a/source/getting-started/index.markdown +++ b/source/getting-started/index.markdown @@ -35,12 +35,12 @@ We will need a few things to get started with installing Home Assistant. Links b 1. Put the SD card in your SD card reader. 1. Open Etcher, select the Hass.io image and flash it to the SD card. -1. WiFi setup only: open the file `system-connections/resin-sample` with a text editor. Change `ssid` to be your network name and `psk` to be your password. +1. WiFi setup only: open the file `system-connections/resin-sample` (from the `resin-boot` volume on the SD card) with a text editor. Change `ssid` to be your network name and `psk` to be your password. Note that the Raspberry Pi 3 is a 2.4GHz WiFi device, so do not try to connect it to a 5GHz network. 1. Unmount the SD card and remove it from your SD card reader. 1. Insert the SD card into your Raspberry Pi 3. If you are going to use an Ethernet cable, connect that too. 1. Connect your Raspberry Pi to the power supply so it turns on. -1. The Raspberry Pi will now boot up, connect to the Internet and download the latest version of Home Assistant. This will take about 20 minutes. -1. Home Assistant will be available at [http://hassio.local:8123][local]. +1. The Raspberry Pi will now boot up, connect to the Internet and download the latest version of Home Assistant. This will take about 20 minutes. Do not expect anything but the Home Assistant logo on the HDMI display, or any use for a keyboard or mouse. +1. Home Assistant will be available at [http://hassio.local:8123][local]. Shortly after the download has started, a simple preparation status page will be available at this URL. Point your browser there. The page refreshes automatically, and Home Assistant will be shown when the download is complete. [local]: http://hassio.local:8123 From 631fe9f8781a80f008f79a9bc4f48b63e9944077 Mon Sep 17 00:00:00 2001 From: "Craig J. Ward" Date: Sun, 28 Jan 2018 06:27:38 -0600 Subject: [PATCH 224/993] Goalfeed (#4211) * add goalfeed docs * update date * Update email address * changes as per notes * Minor changes --- source/_components/goalfeed.markdown | 54 ++++++++++++++++++++ source/images/supported_brands/goalfeed.png | Bin 0 -> 149475 bytes 2 files changed, 54 insertions(+) create mode 100644 source/_components/goalfeed.markdown create mode 100644 source/images/supported_brands/goalfeed.png diff --git a/source/_components/goalfeed.markdown b/source/_components/goalfeed.markdown new file mode 100644 index 0000000000..0320a66d84 --- /dev/null +++ b/source/_components/goalfeed.markdown @@ -0,0 +1,54 @@ +--- +layout: page +title: "Goalfeed" +description: "Instructions on how to setup Goalfeed events within Home Assistant." +date: 2017-12-13 17:30 +sidebar: true +comments: false +sharing: true +footer: true +logo: goalfeed.png +ha_category: Other +ha_version: 0.63 +--- + +The `goalfeed` component lets you use your Goalfeed account to trigger events in Home Assistant whenever a NHL or MLB team scores. + +To use this component, enter your email address and password from your goalfeed.ca account in your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +goalfeed: + username: your_email@gmail.com + password: goalfeed_password +``` + +{% configuration %} +username: + required: true + description: The email address on your goalfeed.ca account. + type: string +password: + required: true + description: The password on your goalfeed.ca account. + type: string +{% endconfiguration %} + +Now you can use the goal event type in your automations: + +```yaml +- alias: 'Jets Goal' + trigger: + platform: event + event_type: goal + event_data: + team_name: "Winnipeg Jets" +``` + +Goal events have the following event data: + +- **team**: Three letter code representing the team. This is unique within the leagues, but not unique across the leagues (i.e. 'WPG' or 'TOR'). +- **team_name**: The team that scored (i.e. 'Winnipeg Jets' or 'Toronto Blue Jays'). +- **team_hash**: A unique hash for the team (you can find these values on https://goalfeed.ca/get-teams). +- **league_id**: A unique number for the league. +- **league_name**: A the short name of the league (i.e. 'NHL' or 'MLB'). diff --git a/source/images/supported_brands/goalfeed.png b/source/images/supported_brands/goalfeed.png new file mode 100644 index 0000000000000000000000000000000000000000..7c5605b4ad718b03f0339f4bb3add84b6d7b9c09 GIT binary patch literal 149475 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 HnuY#<)5j`? literal 0 HcmV?d00001 From b39bd81c6e7b70184dec07c5e4e47a97a428214b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ville=20Skytt=C3=A4?= Date: Sun, 28 Jan 2018 23:28:56 +0200 Subject: [PATCH 225/993] Spelling fixes (#4532) * Spelling fixes * "It's" -> "its" fixes * Fix capitalization of "Pi" in "Raspberry Pi" "Pi", not "PI" or "pi". --- source/_components/alarmdecoder.markdown | 2 +- .../_components/binary_sensor.arest.markdown | 2 +- .../_components/binary_sensor.gc100.markdown | 2 +- .../binary_sensor.raspihats.markdown | 4 ++-- .../binary_sensor.rpi_gpio.markdown | 4 ++-- source/_components/camera.generic.markdown | 2 +- source/_components/climate.mqtt.markdown | 2 +- source/_components/climate.oem.markdown | 2 +- source/_components/cover.mqtt.markdown | 2 +- source/_components/cover.rflink.markdown | 2 +- .../device_tracker.icloud.markdown | 2 +- .../device_tracker.owntracks.markdown | 2 +- .../_components/device_tracker.tado.markdown | 2 +- source/_components/envisalink.markdown | 2 +- source/_components/hue.markdown | 2 +- ..._processing.microsoft_face_detect.markdown | 2 +- ...rocessing.microsoft_face_identify.markdown | 2 +- source/_components/light.ihc.markdown | 2 +- source/_components/light.rflink.markdown | 4 ++-- source/_components/logbook.markdown | 2 +- source/_components/mailbox.markdown | 2 +- source/_components/media_player.cast.markdown | 2 +- .../media_player.gstreamer.markdown | 4 ++-- .../_components/media_player.yamaha.markdown | 2 +- source/_components/mycroft.markdown | 2 +- source/_components/notify.clickatell.markdown | 2 +- source/_components/notify.html5.markdown | 2 +- source/_components/notify.pushsafer.markdown | 2 +- source/_components/raspihats.markdown | 2 +- source/_components/rflink.markdown | 2 +- source/_components/rpi_gpio.markdown | 4 ++-- source/_components/satel_integra.markdown | 2 +- source/_components/sensor.arduino.markdown | 2 +- source/_components/sensor.buienradar.markdown | 2 +- source/_components/sensor.dsmr.markdown | 2 +- source/_components/sensor.miflora.markdown | 2 +- .../sensor.modem_callerid.markdown | 2 +- .../sensor.openweathermap.markdown | 2 +- .../_components/sensor.supervisord.markdown | 2 +- source/_components/sensor.vera.markdown | 2 +- source/_components/sensor.yr.markdown | 2 +- source/_components/sensor.yweather.markdown | 2 +- source/_components/switch.gc100.markdown | 2 +- source/_components/switch.raspihats.markdown | 4 ++-- source/_components/switch.rflink.markdown | 2 +- source/_components/switch.rpi_gpio.markdown | 4 ++-- source/_components/updater.markdown | 2 +- source/_components/waterfurnace.markdown | 2 +- ...n_using_timeinterval_inputboolean.markdown | 2 +- source/_cookbook/track_battery_level.markdown | 2 +- source/_docs/asterisk_mbox.markdown | 2 +- .../_docs/configuration/state_object.markdown | 2 +- source/_docs/ecosystem/appdaemon/api.markdown | 20 +++++++++---------- .../_docs/ecosystem/appdaemon/reboot.markdown | 2 +- .../ecosystem/appdaemon/tutorial.markdown | 4 ++-- .../ecosystem/backup/backup_usb.markdown | 2 +- .../certificates/lets_encrypt.markdown | 2 +- .../ecosystem/hass-configurator.markdown | 2 +- .../hassbian/integrations.markdown | 4 ++-- source/_docs/scripts.markdown | 2 +- source/_docs/z-wave/control-panel.markdown | 2 +- source/_docs/z-wave/entities.markdown | 2 +- source/_docs/z-wave/services.markdown | 2 +- ...rry-pi-squeezebox-asuswrt-support.markdown | 10 +++++----- ...ings-with-MQTT-and-Home-Assistant.markdown | 2 +- .../_posts/2016-04-07-static-website.markdown | 2 +- ...asonic-gtfs-and-config-validation.markdown | 2 +- ...luetooth-lg-webos-tvs-and-roombas.markdown | 2 +- ...hat-cant-track-themselves-part-ii.markdown | 2 +- ...anels--jupyter-notebooks--directv.markdown | 2 +- .../2016-08-16-we-have-apps-now.markdown | 4 ++-- ...10-08-hassbian-rest-digital-ocean.markdown | 2 +- .../2017-01-28-face-coffee-wink.markdown | 2 +- source/_posts/2017-02-04-babyphone.markdown | 6 +++--- ...onfig-panel-and-state-restoration.markdown | 4 ++-- source/_posts/2017-10-07-release-55.markdown | 2 +- .../_posts/2017-11-10-ttn-with-mqtt.markdown | 2 +- source/_posts/2017-11-12-tor.markdown | 2 +- .../developers/code_review_component.markdown | 2 +- .../hassio/addon_communication.markdown | 2 +- .../developers/hassio/addon_config.markdown | 2 +- .../hassio/addon_repository.markdown | 2 +- .../developers/hassio/addon_testing.markdown | 2 +- source/developers/websocket_api.markdown | 2 +- source/getting-started/index.markdown | 2 +- 85 files changed, 111 insertions(+), 111 deletions(-) diff --git a/source/_components/alarmdecoder.markdown b/source/_components/alarmdecoder.markdown index aa1109dbdf..8cfc24d215 100644 --- a/source/_components/alarmdecoder.markdown +++ b/source/_components/alarmdecoder.markdown @@ -20,7 +20,7 @@ Please visit the [AlarmDecoder website](https://www.alarmdecoder.com/) for furth There is currently support for the following device types within Home Assistant: - [Binary Sensor](/components/binary_sensor.alarmdecoder/): Reports on zone status -- [Sensor](/components/sensor.alarmdecoder/): Emulates an keypad display +- [Sensor](/components/sensor.alarmdecoder/): Emulates a keypad display - [Alarm Control Panel](/components/alarm_control_panel.alarmdecoder/): Reports on alarm status, and can be used to arm/disarm the system This is a fully event-based component. Any event sent by the AlarmDecoder device will be immediately reflected within Home Assistant. diff --git a/source/_components/binary_sensor.arest.markdown b/source/_components/binary_sensor.arest.markdown index a03c972e7b..8b359f464a 100644 --- a/source/_components/binary_sensor.arest.markdown +++ b/source/_components/binary_sensor.arest.markdown @@ -14,7 +14,7 @@ ha_release: 0.9 --- -The `arest` binary sensor platform allows you to get all data from your devices (like Arduinos with a ethernet/wifi connection, the ESP8266, and the Raspberry Pi) running the [aREST](http://arest.io/) RESTful framework. +The `arest` binary sensor platform allows you to get all data from your devices (like Arduinos with an ethernet/wifi connection, the ESP8266, and the Raspberry Pi) running the [aREST](http://arest.io/) RESTful framework. To use your aREST binary sensor in your installation, add the following to your `configuration.yaml` file: diff --git a/source/_components/binary_sensor.gc100.markdown b/source/_components/binary_sensor.gc100.markdown index 3be8c01304..80d828723b 100644 --- a/source/_components/binary_sensor.gc100.markdown +++ b/source/_components/binary_sensor.gc100.markdown @@ -1,7 +1,7 @@ --- layout: page title: gc100 Binary Sensor -description: "Instructions on how to set up an gc100 binary sensor within Home Assistant." +description: "Instructions on how to set up a gc100 binary sensor within Home Assistant." date: 2017-10-27 17:26 sidebar: true comments: false diff --git a/source/_components/binary_sensor.raspihats.markdown b/source/_components/binary_sensor.raspihats.markdown index 4815aa2de7..83f355aaf5 100644 --- a/source/_components/binary_sensor.raspihats.markdown +++ b/source/_components/binary_sensor.raspihats.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Raspihats Binary Sensor" -description: "Instructions how to integrate Raspihats add-on boards for Raspberry PI into Home Assistant as a binary_sensor." +description: "Instructions how to integrate Raspihats add-on boards for Raspberry Pi into Home Assistant as a binary_sensor." date: 2017-05-01 04:09 sidebar: true comments: false @@ -87,4 +87,4 @@ It will output a table like this: 70: -- -- -- -- -- -- -- 77 ``` -For more details about the `raspihats` add-on boards for Raspberry PI, visit [raspihats.com](http://www.raspihats.com/). +For more details about the `raspihats` add-on boards for Raspberry Pi, visit [raspihats.com](http://www.raspihats.com/). diff --git a/source/_components/binary_sensor.rpi_gpio.markdown b/source/_components/binary_sensor.rpi_gpio.markdown index 99a7eda5eb..dbae9b1b8d 100644 --- a/source/_components/binary_sensor.rpi_gpio.markdown +++ b/source/_components/binary_sensor.rpi_gpio.markdown @@ -1,7 +1,7 @@ --- layout: page -title: "Raspberry PI GPIO Binary Sensor" -description: "Instructions how to integrate the GPIO sensor capability of a Raspberry PI into Home Assistant." +title: "Raspberry Pi GPIO Binary Sensor" +description: "Instructions how to integrate the GPIO sensor capability of a Raspberry Pi into Home Assistant." date: 2015-08-30 19:00 sidebar: true comments: false diff --git a/source/_components/camera.generic.markdown b/source/_components/camera.generic.markdown index c6f41ac337..3f99910e1c 100644 --- a/source/_components/camera.generic.markdown +++ b/source/_components/camera.generic.markdown @@ -60,7 +60,7 @@ camera: ### {% linkable_title Local image with Hass.io %} -You can show an static image with this platform. Just place the image here: `/config/www/your_image.png` +You can show a static image with this platform. Just place the image here: `/config/www/your_image.png` ```yaml camera: diff --git a/source/_components/climate.mqtt.markdown b/source/_components/climate.mqtt.markdown index 85675df1f6..504610dea4 100644 --- a/source/_components/climate.mqtt.markdown +++ b/source/_components/climate.mqtt.markdown @@ -201,7 +201,7 @@ climate: ``` {% endraw %} -This will parse the incoming `"auto"` as JSON, resulting in `auto`. Obvisouly, in this case you could also just set `value_template: {% raw %}"{{ value_json }}"{% endraw %}`. +This will parse the incoming `"auto"` as JSON, resulting in `auto`. Obviously, in this case you could also just set `value_template: {% raw %}"{{ value_json }}"{% endraw %}`. ### {% linkable_title Example %} diff --git a/source/_components/climate.oem.markdown b/source/_components/climate.oem.markdown index c123b0e0f7..be9b8cda21 100644 --- a/source/_components/climate.oem.markdown +++ b/source/_components/climate.oem.markdown @@ -15,7 +15,7 @@ ha_iot_class: "Local Polling" This platform supports the ESP82666 based "WiFi MQTT Relay / Thermostat" sold by [OpenEnergyMonitor](https://shop.openenergymonitor.com/wifi-mqtt-relay-thermostat/). The underlying [library](http://oemthermostat.readthedocs.io/) only supports this single relay variant of the [original device](https://harizanov.com/2014/12/wifi-iot-3-channel-relay-board-with-mqtt-and-http-api-using-esp8266/). -This platform controls the setpoint of the thermostat in it's "manual" mode, therefore there is a configuration option the away setpoint. +This platform controls the setpoint of the thermostat in its "manual" mode, therefore there is a configuration option the away setpoint. To set it up, add the following information to your `configuration.yaml` file: diff --git a/source/_components/cover.mqtt.markdown b/source/_components/cover.mqtt.markdown index 94cc013f78..f06204cfaa 100755 --- a/source/_components/cover.mqtt.markdown +++ b/source/_components/cover.mqtt.markdown @@ -134,7 +134,7 @@ tilt_max: type: integer default: 100 tilt_closed_value: - description: The value that will be sent on an `close_cover_tilt` command. + description: The value that will be sent on a `close_cover_tilt` command. required: false type: integer default: 0 diff --git a/source/_components/cover.rflink.markdown b/source/_components/cover.rflink.markdown index 5bbe5e2f6e..1bd3a1a50c 100644 --- a/source/_components/cover.rflink.markdown +++ b/source/_components/cover.rflink.markdown @@ -85,7 +85,7 @@ Device configuration variables: - **name** (*Optional*): Name for the device, defaults to Rflink ID. - **aliases** (*Optional*): Alternative Rflink ID's this device is known by. -- **fire_event** (*Optional*): Fire an `button_pressed` event if this device is turned on or off (default: False). +- **fire_event** (*Optional*): Fire a `button_pressed` event if this device is turned on or off (default: False). - **signal_repetitions** (*Optional*): Repeat every Rflink command this number of times (default: 1). - **fire_event_** (*Optional*): Set default `fire_event` for RFLink switch devices (see below). - **signal_repetitions** (*Optional*): Set default `signal_repetitions` for RFLink switch devices (see below). diff --git a/source/_components/device_tracker.icloud.markdown b/source/_components/device_tracker.icloud.markdown index e98b827157..74f22f02f6 100644 --- a/source/_components/device_tracker.icloud.markdown +++ b/source/_components/device_tracker.icloud.markdown @@ -50,5 +50,5 @@ To disable the drainage of the battery, a dynamic interval is being used for eac 4 services are available for this component: - **icloud_update**: This service can be used to ask for an update of a certain iDevice. The `account_name` and `device_name` are optional. - **icloud_lost_iphone**: This service will play the Lost iPhone sound on a certain iDevice. The `account_name` and `device_name` are optional. -- **icloud_set_interval**: This service will change the dynamic interval of an iDevice. The `account_name` and `device_name` are optional. If `interval` is used in the service_data, the iDevice will be updated with that new interval. That interval will be fixed until the iDevice changes zone or if this service is called again. If `interval` isn't used in the service_data, the interval for that iDevice will revert back to it's default dynamic interval based on it's current zone, it's distance towards home and it's battery level. +- **icloud_set_interval**: This service will change the dynamic interval of an iDevice. The `account_name` and `device_name` are optional. If `interval` is used in the service_data, the iDevice will be updated with that new interval. That interval will be fixed until the iDevice changes zone or if this service is called again. If `interval` isn't used in the service_data, the interval for that iDevice will revert back to its default dynamic interval based on its current zone, its distance towards home and its battery level. - **icloud_reset_account**: This service can be used to reset an iCloud account. This is helpful when not all devices are being found by the component or if you have added a new iDevice to your account. The `account_name` is optional. diff --git a/source/_components/device_tracker.owntracks.markdown b/source/_components/device_tracker.owntracks.markdown index 0bd137c0ab..631d8dc669 100644 --- a/source/_components/device_tracker.owntracks.markdown +++ b/source/_components/device_tracker.owntracks.markdown @@ -96,7 +96,7 @@ iBeacons don't need to be stationary. You could put one on your key ring, or in When your phone sees a mobile iBeacon that it knows about, it will tell HA the location of that iBeacon. If your phone moves while you are connected to the iBeacon, HA will update the location of the iBeacon. But when your phone loses the connection, HA will stop updating the iBeacon location. -To use mobile iBeacons with HA, you just set up a region that doesn't match your Zone names. If HA sees an entry event for a iBeacon region that doesn't match a Zone name (say `keys`) - it will start tracking it, calling the device `device_tracker.beacon_keys`). +To use mobile iBeacons with HA, you just set up a region that doesn't match your Zone names. If HA sees an entry event for an iBeacon region that doesn't match a Zone name (say `keys`) - it will start tracking it, calling the device `device_tracker.beacon_keys`). This allows you to write zone automations for devices that can't track themselves (for example *alert me if I leave the house and my keys are still at home*). Another example would be *open the gates if my car arrives home*. diff --git a/source/_components/device_tracker.tado.markdown b/source/_components/device_tracker.tado.markdown index 446c79131d..bc1d91b37b 100644 --- a/source/_components/device_tracker.tado.markdown +++ b/source/_components/device_tracker.tado.markdown @@ -12,7 +12,7 @@ ha_category: Presence Detection ha_release: 0.37 --- -The `tado` device tracker is using the [Tado Smart Thermostat](https://www.tado.com/) and it's support for person presence detection based on smartphone location by geofencing. +The `tado` device tracker is using the [Tado Smart Thermostat](https://www.tado.com/) and its support for person presence detection based on smartphone location by geofencing. This tracker uses the Tado API to determine if a mobile device is at home. It tracks all devices in your home that Tado knows about. diff --git a/source/_components/envisalink.markdown b/source/_components/envisalink.markdown index 02d0746982..57deb9f53f 100644 --- a/source/_components/envisalink.markdown +++ b/source/_components/envisalink.markdown @@ -13,7 +13,7 @@ ha_release: 0.23 ha_iot_class: "Local Push" --- -The `envisalink` component will allow Home Assistant users who own either a DSC or Honeywell alarm panel to leverage their alarm system and it's sensors to provide Home Assistant with rich information about their homes. Connectivity between Home Assistant and the alarm panel is accomplished through a device produced by Eyez On, known as the Envisalink. The Envisalink evl3 and evl4 boards provide a TCP/IP interface to the alarm panel, where it emulates an alarm keypad. This board also exposes a raw TCP/IP based API, upon which this component is built. Currently, the Envisalink version 4 is the latest model. This component supports both the evl3 and the evl4. +The `envisalink` component will allow Home Assistant users who own either a DSC or Honeywell alarm panel to leverage their alarm system and its sensors to provide Home Assistant with rich information about their homes. Connectivity between Home Assistant and the alarm panel is accomplished through a device produced by Eyez On, known as the Envisalink. The Envisalink evl3 and evl4 boards provide a TCP/IP interface to the alarm panel, where it emulates an alarm keypad. This board also exposes a raw TCP/IP based API, upon which this component is built. Currently, the Envisalink version 4 is the latest model. This component supports both the evl3 and the evl4. Please visit the [eyezon website](http://www.eyezon.com/) for further information about the evl3 and evl4 boards. diff --git a/source/_components/hue.markdown b/source/_components/hue.markdown index 46d8f2cc9f..40623c9a95 100644 --- a/source/_components/hue.markdown +++ b/source/_components/hue.markdown @@ -103,7 +103,7 @@ More information can be found on the [Philips Hue API documentation](https://www ### {% linkable_title Using Hue Scenes in Home Assistant %} -The Hue platform has it's own concept of scenes for setting the colors of a group of lights at once. Hue Scenes are very cheap, get created by all kinds of apps (as it is the only way to have 2 or more lights change at the same time), and are rarely deleted. A typical Hue hub might have hundreds of scenes stored in them, many that you've never used, almost all very poorly named. +The Hue platform has its own concept of scenes for setting the colors of a group of lights at once. Hue Scenes are very cheap, get created by all kinds of apps (as it is the only way to have 2 or more lights change at the same time), and are rarely deleted. A typical Hue hub might have hundreds of scenes stored in them, many that you've never used, almost all very poorly named. To avoid user interface overload we don't expose scenes directly. Instead there is a hue.hue_activate_scene service which can be used by `automation` or `script` components. This will have all the bulbs transitioned at once, instead of one at a time using standard scenes in Home Assistant. diff --git a/source/_components/image_processing.microsoft_face_detect.markdown b/source/_components/image_processing.microsoft_face_detect.markdown index c15e5baab0..39aecb1534 100644 --- a/source/_components/image_processing.microsoft_face_detect.markdown +++ b/source/_components/image_processing.microsoft_face_detect.markdown @@ -13,7 +13,7 @@ featured: false ha_release: 0.38 --- -The `microsoft_face_detect` image processing platform allows you to use the [Microsoft Face Identify](https://www.microsoft.com/cognitive-services/en-us/) API through Home Assistant. This platform enables you do detect face on camera and fire a event with attributes. +The `microsoft_face_detect` image processing platform allows you to use the [Microsoft Face Identify](https://www.microsoft.com/cognitive-services/en-us/) API through Home Assistant. This platform enables you do detect face on camera and fire an event with attributes. Please refer to the [component](/components/microsoft_face/) configuration on how to setup the API key. diff --git a/source/_components/image_processing.microsoft_face_identify.markdown b/source/_components/image_processing.microsoft_face_identify.markdown index e600ae36a6..76fb2ad1be 100644 --- a/source/_components/image_processing.microsoft_face_identify.markdown +++ b/source/_components/image_processing.microsoft_face_identify.markdown @@ -13,7 +13,7 @@ featured: false ha_release: 0.37 --- -The `microsoft_face_identify` image processing platform lets you use [Microsoft Face identify](https://www.microsoft.com/cognitive-services/en-us/) API through Home Assistant. This platform allow you do identify persons on camera and fire a event with identify persons. +The `microsoft_face_identify` image processing platform lets you use [Microsoft Face identify](https://www.microsoft.com/cognitive-services/en-us/) API through Home Assistant. This platform allow you do identify persons on camera and fire an event with attributes. Please refer to the [component](/components/microsoft_face/) configuration on how to setup the API key. diff --git a/source/_components/light.ihc.markdown b/source/_components/light.ihc.markdown index a289ea942f..741d2168cd 100644 --- a/source/_components/light.ihc.markdown +++ b/source/_components/light.ihc.markdown @@ -61,5 +61,5 @@ lights: {% endconfiguration %} In the example above 12345 is ihc resource id and "tablelight" is the name. -The IHC resource id can be a light level for dimmers or an boolean output of a relay. +The IHC resource id can be a light level for dimmers or a boolean output of a relay. For more information about IHC resource ids see [Manual Setup](/components/ihc/#manual-setup) diff --git a/source/_components/light.rflink.markdown b/source/_components/light.rflink.markdown index 0bd73b588e..ebba128f88 100644 --- a/source/_components/light.rflink.markdown +++ b/source/_components/light.rflink.markdown @@ -50,7 +50,7 @@ Device configuration variables: - **name** (*Optional*): Name for the device, defaults to Rflink ID. - **type** (*Optional*): Override automatically detected type of the light device, can be: switchable, dimmable, hybrid or toggle. See 'Light Types' below. (default: Switchable) - **aliases** (*Optional*): Alternative Rflink ID's this device is known by. -- **fire_event** (*Optional*): Fire an `button_pressed` event if this device is turned on or off (default: False). +- **fire_event** (*Optional*): Fire a `button_pressed` event if this device is turned on or off (default: False). - **signal_repetitions** (*Optional*): Repeat every Rflink command this number of times (default: 1). - **fire_event_** (*Optional*): Set default `fire_event` for RFLink switch devices (see below). - **signal_repetitions** (*Optional*): Set default `signal_repetitions` for RFLink switch devices (see below). @@ -86,7 +86,7 @@ Any on/off command from any alias ID updates the current state of the light. How Light devices can come in different forms. Some only switch on and off, other support dimming. Dimmable devices might not always respond nicely to repeated `on` command as they turn into a pulsating state until `on` is pressed again (for example KlikAanKlikUit). The RFLink component support three types of lights to make things work in every situation: -- *Hybrid*: This type sends a `dim` followed by an a `on` command; and `off` commands. This will make dimmable devices turn on at the requested dim level and on/off devices on. One caveat is this type is not compatible with signal repetition as multiple `on` signals will cause dimmers to go into disco mode. +- *Hybrid*: This type sends a `dim` followed by an an `on` command; and `off` commands. This will make dimmable devices turn on at the requested dim level and on/off devices on. One caveat is this type is not compatible with signal repetition as multiple `on` signals will cause dimmers to go into disco mode. - *Switchable*: Device type that sends only `on` and `off` commands. It work for both on/off and dimmable type switches. However dimmables might have issues with signal repetition (see above). - *Dimmable*: Sends only `dim` and `off` commands. This does not work on on/off type devices as they don't understand the `dim` command. For dimmers this does not cause issues with signal repetitions. - *Toggle*: Device type that sends only `on` commands to turn on or off the device. Some switches like for example Livolo light switches use the same 'on' command to switch on and switch off the lights. If the light is on and 'on' gets sent, the light will turn off and if the light is off and 'on' gets sent, the light will turn on. If the device has an unknown state, it will assume it is off by default. diff --git a/source/_components/logbook.markdown b/source/_components/logbook.markdown index 74e493fc9b..adabef99d1 100644 --- a/source/_components/logbook.markdown +++ b/source/_components/logbook.markdown @@ -73,7 +73,7 @@ logbook: ### {% linkable_title Exclude Events %} -Entities customized as hidden are excluded from the logbook by default, but sometimes you want to show the entity in the UI and not in the logbook. For instance you use the `sensor.date`to show the current date in the UI, but you do not want an logbook entry for that sensor every day. +Entities customized as hidden are excluded from the logbook by default, but sometimes you want to show the entity in the UI and not in the logbook. For instance you use the `sensor.date`to show the current date in the UI, but you do not want a logbook entry for that sensor every day. To exclude these entities just add them to the `exclude` > `entities` list in the configuration of the logbook. To exclude all events from a whole domain add it to the `exclude` > `domain` list. For instance you use the `sun` domain only to trigger automations on the `azimuth attribute, then you possible are not interested in the logbook entries for sun rise and sun set. diff --git a/source/_components/mailbox.markdown b/source/_components/mailbox.markdown index 88ff203523..28f4d77f43 100644 --- a/source/_components/mailbox.markdown +++ b/source/_components/mailbox.markdown @@ -10,7 +10,7 @@ ha_version: 0.51 footer: true --- -Mailboxes provide an list of messages with short information about each. Mailbox messages appear on a separate panel in the frontend. +Mailboxes provide a list of messages with short information about each. Mailbox messages appear on a separate panel in the frontend. Home Assistant currently supports only the [Asterisk Voicemail](/component/mailbox.asterisk_mbox) mailbox. diff --git a/source/_components/media_player.cast.markdown b/source/_components/media_player.cast.markdown index 63271c1676..c97f391dab 100644 --- a/source/_components/media_player.cast.markdown +++ b/source/_components/media_player.cast.markdown @@ -15,7 +15,7 @@ ha_iot_class: "Local Polling" --- -Google Cast devices like Android TVs and Chromecasts will be automatically discovered if you enable [the discovery component]({{site_root}}/components/discovery/). There is a issue where Chromecasts can only be discovered if your device is connected to the same subnet as your Chromecast. +Google Cast devices like Android TVs and Chromecasts will be automatically discovered if you enable [the discovery component]({{site_root}}/components/discovery/). There is an issue where Chromecasts can only be discovered if your device is connected to the same subnet as your Chromecast. The Chromecast platform can also be forced to load by adding the following lines to your `configuration.yaml`: diff --git a/source/_components/media_player.gstreamer.markdown b/source/_components/media_player.gstreamer.markdown index c77e8c4049..288ef12120 100644 --- a/source/_components/media_player.gstreamer.markdown +++ b/source/_components/media_player.gstreamer.markdown @@ -58,7 +58,7 @@ If you're running Home Assistant in a virtual environment, you'll need to symlin ln -s /path/to/your/installation/of/gi /path/to/your/venv/lib/python3.4/site-packages ``` -On a Raspberry PI, you may need to add the Home Assistant user to the `audio` group: +On a Raspberry Pi, you may need to add the Home Assistant user to the `audio` group: ```bash sudo usermod -a -G audio @@ -68,7 +68,7 @@ sudo usermod -a -G audio ### {% linkable_title Using with TTS %} -To play TTS on your local computer (for example, if you have speakers attached to your Raspberry PI: +To play TTS on your local computer (for example, if you have speakers attached to your Raspberry Pi: ```yaml media_player: diff --git a/source/_components/media_player.yamaha.markdown b/source/_components/media_player.yamaha.markdown index bfe7c81c9c..c306b1d527 100644 --- a/source/_components/media_player.yamaha.markdown +++ b/source/_components/media_player.yamaha.markdown @@ -52,7 +52,7 @@ Configuration variables: have your receiver switched off. - In some cases, auto-discovery fails due to a known bug in the receiver's firmware. It is possible to manually specify the - receiver's IP address or via it's hostname (if it is discoverable by + receiver's IP address or via its hostname (if it is discoverable by your DNS) then. ### {% linkable_title Supported operations %} diff --git a/source/_components/mycroft.markdown b/source/_components/mycroft.markdown index 50241b7a2f..705800f6e3 100644 --- a/source/_components/mycroft.markdown +++ b/source/_components/mycroft.markdown @@ -12,7 +12,7 @@ ha_category: Voice ha_release: 0.53 --- -[Mycroft](https://mycroft.ai) is a open source voice assistant that allows you to send notifications and more to Mycroft from Home Assistant. +[Mycroft](https://mycroft.ai) is an open source voice assistant that allows you to send notifications and more to Mycroft from Home Assistant. ```yaml # Example configuration.yaml entry diff --git a/source/_components/notify.clickatell.markdown b/source/_components/notify.clickatell.markdown index 0c274c9a1b..783f3deb58 100644 --- a/source/_components/notify.clickatell.markdown +++ b/source/_components/notify.clickatell.markdown @@ -16,7 +16,7 @@ ha_release: 0.56 The `clickatell` platform uses [Clickatell](https://clickatell.com) to deliver SMS notifications from Home Assistant. ### Get your Clickatell API Credentials -Go to your [Clickatell SMS Platform Portal](https://portal.clickatell.com/#/) section and create a new SMS integration. There are three screens of information required to creater an integration. Please ensure the following: +Go to your [Clickatell SMS Platform Portal](https://portal.clickatell.com/#/) section and create a new SMS integration. There are three screens of information required to create an integration. Please ensure the following: 1. Give the new Integration an identification name. 2. Ensure it is set for 'production' use. diff --git a/source/_components/notify.html5.markdown b/source/_components/notify.html5.markdown index 1adf5f015e..04df895ccd 100644 --- a/source/_components/notify.html5.markdown +++ b/source/_components/notify.html5.markdown @@ -250,7 +250,7 @@ You will receive an event named `html5_notification.closed` when the notificatio ### {% linkable_title Making notifications work with NGINX proxy %} -If you use [NGINX](/ecosystem/nginx/) as an proxy with authentication in front of your Home Assistant instance, you may have trouble with receiving events back to Home Assistant. It's because of authentication token that cannot be passed through the proxy. +If you use [NGINX](/ecosystem/nginx/) as a proxy with authentication in front of your Home Assistant instance, you may have trouble with receiving events back to Home Assistant. It's because of authentication token that cannot be passed through the proxy. To solve the issue put additional location into your nginx site's configuration: diff --git a/source/_components/notify.pushsafer.markdown b/source/_components/notify.pushsafer.markdown index e766486649..61edbe9d8d 100644 --- a/source/_components/notify.pushsafer.markdown +++ b/source/_components/notify.pushsafer.markdown @@ -15,7 +15,7 @@ ha_release: 0.39 The [Pushsafer service](https://www.pushsafer.com/) is a platform for the notify component. This allows you to send messages to the user using Pushsafer. -In order to get an private or alias key you need to go to the [Pushsafer website](https://www.pushsafer.com) and register. +In order to get a private or alias key you need to go to the [Pushsafer website](https://www.pushsafer.com) and register. To use Pushsafer notifications, add the following to your `configuration.yaml` file: diff --git a/source/_components/raspihats.markdown b/source/_components/raspihats.markdown index 3c1d33ed1e..b20878e648 100644 --- a/source/_components/raspihats.markdown +++ b/source/_components/raspihats.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Raspihats" -description: "Instructions how to integrate Raspihats add-on boards for Raspberry PI into Home Assistant." +description: "Instructions how to integrate Raspihats add-on boards for Raspberry Pi into Home Assistant." date: 2017-05-01 04:06 sidebar: true comments: false diff --git a/source/_components/rflink.markdown b/source/_components/rflink.markdown index 26515b5f8c..33e2113215 100644 --- a/source/_components/rflink.markdown +++ b/source/_components/rflink.markdown @@ -135,7 +135,7 @@ If you find a device is recognized differently, with different protocols or the ### {% linkable_title Technical Overview %} -- The`rflink` Python module is a asyncio transport/protocol which is setup to fire a callback for every (valid/supported) packet received by the RFLink gateway. +- The`rflink` Python module is an asyncio transport/protocol which is setup to fire a callback for every (valid/supported) packet received by the RFLink gateway. - This component uses this callback to distribute 'rflink packet events' over [Home Assistant's event bus](https://home-assistant.io/docs/configuration/events/) which can be subscribed to by entities/platform implementations. - The platform implementation takes care of creating new devices (if enabled) for unseen incoming packet ID's. - Device entities take care of matching to the packet ID, interpreting and performing actions based on the packet contents. Common entity logic is maintained in this main component. diff --git a/source/_components/rpi_gpio.markdown b/source/_components/rpi_gpio.markdown index b0f2fdc370..642804ffff 100644 --- a/source/_components/rpi_gpio.markdown +++ b/source/_components/rpi_gpio.markdown @@ -1,7 +1,7 @@ --- layout: page -title: "Raspberry PI GPIO" -description: "Instructions how to integrate the GPIO capability of a Raspberry PI into Home Assistant." +title: "Raspberry Pi GPIO" +description: "Instructions how to integrate the GPIO capability of a Raspberry Pi into Home Assistant." date: 2016-08-30 19:00 sidebar: true comments: false diff --git a/source/_components/satel_integra.markdown b/source/_components/satel_integra.markdown index 4cbe5957bf..8e71d59e7f 100644 --- a/source/_components/satel_integra.markdown +++ b/source/_components/satel_integra.markdown @@ -56,7 +56,7 @@ Configuration variables: - **port** (*Optional*): The port on which the ETHM module listens for clients using integration protocol. Default: `7094` - **partition** (*Optional*): The partition to operate on. Integra can support multiple partitions, this platform only supports one. Default: `1` - **arm_home_mode** (*Optional*): The mode in which arm Satel Integra when 'arm home' is used. Possible options are `1`,`2` or `3`, default being `1`. For more information on what are the differences between them, please refer to Satel Integra manual. -- **zones** (*Optional*): This module does not discover currently which zones are actually in use, so it will only monitor the ones defined in the config. For each zone, a proper ID must be given as well as it's name (does not need to match the one specified in Satel Integra alarm). For more information on the available zone types, take a look at the [Binary Sensor](/components/binary_sensor.alarmdecoder/) docs. *Note: If no zones are specified, Home Assistant will not load any binary_sensor components.* +- **zones** (*Optional*): This module does not discover currently which zones are actually in use, so it will only monitor the ones defined in the config. For each zone, a proper ID must be given as well as its name (does not need to match the one specified in Satel Integra alarm). For more information on the available zone types, take a look at the [Binary Sensor](/components/binary_sensor.alarmdecoder/) docs. *Note: If no zones are specified, Home Assistant will not load any binary_sensor components.* List of all zone IDs can be taken from DloadX program. diff --git a/source/_components/sensor.arduino.markdown b/source/_components/sensor.arduino.markdown index 02fa7f6aaa..b7e4c1c6d7 100644 --- a/source/_components/sensor.arduino.markdown +++ b/source/_components/sensor.arduino.markdown @@ -14,7 +14,7 @@ ha_iot_class: "Local Polling" --- -The `arduino` sensor platform allows you to get an numerical values from an analog input pin of an [Arduino](https://www.arduino.cc/) board. Usually the value is between 0 and 1024. +The `arduino` sensor platform allows you to get numerical values from an analog input pin of an [Arduino](https://www.arduino.cc/) board. Usually the value is between 0 and 1024. To enable an Arduino sensor with Home Assistant, add the following section to your `configuration.yaml` file: diff --git a/source/_components/sensor.buienradar.markdown b/source/_components/sensor.buienradar.markdown index 1cdebf9290..cb1cd65660 100644 --- a/source/_components/sensor.buienradar.markdown +++ b/source/_components/sensor.buienradar.markdown @@ -14,7 +14,7 @@ ha_iot_class: "Cloud Polling" --- -The `buienradar` platform uses [buienradar.nl](http://buienradar.nl/) as an source for current meteorological data for your location. The weather forecast is delivered by Buienradar, who provides a web service that provides detailed weather information for users in The Netherlands. The relevant weather station used will be automatically selected based on the location specified in the Home Assistant configuration (or in the buienradar weather/sensor component). A map of all available weather stations can be found [here](https://www.google.com/maps/d/embed?mid=1NivHkTGQUOs0dwQTnTMZi8Uatj0). +The `buienradar` platform uses [buienradar.nl](http://buienradar.nl/) as a source for current meteorological data for your location. The weather forecast is delivered by Buienradar, who provides a web service that provides detailed weather information for users in The Netherlands. The relevant weather station used will be automatically selected based on the location specified in the Home Assistant configuration (or in the buienradar weather/sensor component). A map of all available weather stations can be found [here](https://www.google.com/maps/d/embed?mid=1NivHkTGQUOs0dwQTnTMZi8Uatj0). The selected weather station will provide all weather data, with the exception of the forecasted precipitation. The forecasted precipitation data will be retrieved from buienradar using your actual gps-location (and not the location of the nearest weather station). diff --git a/source/_components/sensor.dsmr.markdown b/source/_components/sensor.dsmr.markdown index a83d5a8ac0..b073aae82f 100644 --- a/source/_components/sensor.dsmr.markdown +++ b/source/_components/sensor.dsmr.markdown @@ -131,7 +131,7 @@ DSMR is a standard to which Dutch smartmeters must comply. It specifies that the The contents of this telegram differ between version but they generally consist of lines with 'obis' (Object Identification System, a numerical ID for a value) followed with the value and unit. -This module sets up a asynchronous reading loop using the `dsmr_parser` module which waits for a complete telegram, parser it and puts it on an async queue as a dictionary of `obis`/object mapping. The numeric value and unit of each value can be read from the objects attributes. Because the `obis` are know for each DSMR version the Entities for this component are create during bootstrap. +This module sets up an asynchronous reading loop using the `dsmr_parser` module which waits for a complete telegram, parser it and puts it on an async queue as a dictionary of `obis`/object mapping. The numeric value and unit of each value can be read from the objects attributes. Because the `obis` are know for each DSMR version the Entities for this component are create during bootstrap. Another loop (DSMR class) is setup which reads the telegram queue, stores/caches the latest telegram and notifies the Entities that the telegram has been updated. diff --git a/source/_components/sensor.miflora.markdown b/source/_components/sensor.miflora.markdown index 4d15463a1c..8fcfca3d09 100644 --- a/source/_components/sensor.miflora.markdown +++ b/source/_components/sensor.miflora.markdown @@ -20,7 +20,7 @@ Depending on the operating system you're running, you have to configure the prop - On [Hass.io](https://home-assistant.io/hassio/installation/): Miflora will work out of the box. - On other Linux systems: - - Prefered solution: Install the `bluepy` library (via pip). When using a virtual environment, make sure to use install the library in the right one. + - Preferred solution: Install the `bluepy` library (via pip). When using a virtual environment, make sure to use install the library in the right one.    - Fallback solution: Install `gatttool` via your package manager. Depending on the distribution, the package name might be: `bluez`, `bluetooth`, `bluez-deprecated` - Windows and MacOS are currently not supported by the [miflora library](https://github.com/open-homeautomation/miflora/). diff --git a/source/_components/sensor.modem_callerid.markdown b/source/_components/sensor.modem_callerid.markdown index 30f1c98f9e..d2d0340bb3 100644 --- a/source/_components/sensor.modem_callerid.markdown +++ b/source/_components/sensor.modem_callerid.markdown @@ -37,7 +37,7 @@ If Home Assistant (`hass`) runs with another user (e.g. `homeassistant` on Hassb Depending on what's plugged into your USB ports, the name found above may change. You can lock in a name, such as `/dev/modem`, by following [these instructions](http://hintshop.ludvig.co.nz/show/persistent-names-usb-serial-devices/). -When the sensor detects a new call, it's state changes to 'ring' for each ring and 'callerid' when caller id information is received. It returns to 'idle' once ringing stops. The state event includes an attribute payload that includes the time of the call, name and number. +When the sensor detects a new call, its state changes to 'ring' for each ring and 'callerid' when caller id information is received. It returns to 'idle' once ringing stops. The state event includes an attribute payload that includes the time of the call, name and number. Some example automations: ```yaml diff --git a/source/_components/sensor.openweathermap.markdown b/source/_components/sensor.openweathermap.markdown index f672ff0729..6f9186a6f6 100644 --- a/source/_components/sensor.openweathermap.markdown +++ b/source/_components/sensor.openweathermap.markdown @@ -14,7 +14,7 @@ ha_iot_class: "Cloud Polling" --- -The `openweathermap` platform uses [OpenWeatherMap](http://openweathermap.org/) as an source for current meteorological data for your location. The `forecast` will show you the condition in 3 h. +The `openweathermap` platform uses [OpenWeatherMap](http://openweathermap.org/) as a source for current meteorological data for your location. The `forecast` will show you the condition in 3 h. You need an API key which is free but requires a [registration](http://home.openweathermap.org/users/sign_up). diff --git a/source/_components/sensor.supervisord.markdown b/source/_components/sensor.supervisord.markdown index 4fcb8f2415..93a191fc9c 100644 --- a/source/_components/sensor.supervisord.markdown +++ b/source/_components/sensor.supervisord.markdown @@ -22,7 +22,7 @@ It required that you enable the HTTP feature in the `/etc/supervisord.conf` conf port=127.0.0.1:9001 ``` -After a restart of `supervisord` you should be able to access the web interface. If needed then this could be added as a [iFrame panel](/components/panel_iframe/). +After a restart of `supervisord` you should be able to access the web interface. If needed then this could be added as an [iFrame panel](/components/panel_iframe/).

diff --git a/source/_components/sensor.vera.markdown b/source/_components/sensor.vera.markdown index bd32fdd408..c1e7b16a37 100644 --- a/source/_components/sensor.vera.markdown +++ b/source/_components/sensor.vera.markdown @@ -17,7 +17,7 @@ The `vera` platform allows you to get data from your [Vera](http://getvera.com/) They will be automatically discovered if the vera component is loaded. -Please note that some vera sensors (such as _motion_ and _flood_ sensors) are _armable_ which means that vera will send alerts (email messages to txts) when they are _armed_ an change state. +Please note that some vera sensors (such as _motion_ and _flood_ sensors) are _armable_ which means that vera will send alerts (email messages to txts) when they are _armed_ and change state. Home Assistant will display the state of these sensors regardless of the _armed_ state. diff --git a/source/_components/sensor.yr.markdown b/source/_components/sensor.yr.markdown index 362c3aaedb..35813cb459 100644 --- a/source/_components/sensor.yr.markdown +++ b/source/_components/sensor.yr.markdown @@ -14,7 +14,7 @@ ha_iot_class: "Cloud Polling" --- -The `yr` platform uses [YR.no](http://www.yr.no/) as an source for current meteorological data for your location. The +The `yr` platform uses [YR.no](http://www.yr.no/) as a source for current meteorological data for your location. The weather forecast is delivered by the Norwegian Meteorological Institute and the NRK. To add YR to your installation, add the following to your `configuration.yaml` file: diff --git a/source/_components/sensor.yweather.markdown b/source/_components/sensor.yweather.markdown index 7ac041c1cb..0f9bcd7a85 100644 --- a/source/_components/sensor.yweather.markdown +++ b/source/_components/sensor.yweather.markdown @@ -14,7 +14,7 @@ ha_iot_class: "Cloud Polling" --- -The `yweather` platform uses [Yahoo Weather](https://www.yahoo.com/news/weather/) as an source for current meteorological data. The `forecast` will show you the condition for 5 days, 0 is the current day. You can use only `weather`, `temp_min`, and `temp_max` with forecast. It's important to note that a yweather sensor will only show ONE days forecast at a time so to show multiple days forecasts, you will need to use the 'name:' option and give each sensor a unique name. +The `yweather` platform uses [Yahoo Weather](https://www.yahoo.com/news/weather/) as a source for current meteorological data. The `forecast` will show you the condition for 5 days, 0 is the current day. You can use only `weather`, `temp_min`, and `temp_max` with forecast. It's important to note that a yweather sensor will only show ONE days forecast at a time so to show multiple days forecasts, you will need to use the 'name:' option and give each sensor a unique name.

Use of the Yahoo Weather API should not exceed reasonable request volume. Access is limited to 2000 signed calls per day. diff --git a/source/_components/switch.gc100.markdown b/source/_components/switch.gc100.markdown index 9fcf7217b6..59649d72d1 100644 --- a/source/_components/switch.gc100.markdown +++ b/source/_components/switch.gc100.markdown @@ -1,7 +1,7 @@ --- layout: page title: gc100 Switch -description: "Instructions on how to set up an gc100 switch within Home Assistant." +description: "Instructions on how to set up a gc100 switch within Home Assistant." date: 2017-10-27 17:26 sidebar: true comments: false diff --git a/source/_components/switch.raspihats.markdown b/source/_components/switch.raspihats.markdown index b2fa067e13..23f7afb96f 100644 --- a/source/_components/switch.raspihats.markdown +++ b/source/_components/switch.raspihats.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Raspihats Switch" -description: "Instructions how to integrate Raspihats add-on boards for Raspberry PI into Home Assistant as a switch." +description: "Instructions how to integrate Raspihats add-on boards for Raspberry Pi into Home Assistant as a switch." date: 2017-05-15 04:20 sidebar: true comments: false @@ -89,4 +89,4 @@ It will output a table like this: 70: -- -- -- -- -- -- -- 77 ``` -For more details about the Raspihats add-on boards for Raspberry PI, visit [raspihats.com](http://www.raspihats.com/). +For more details about the Raspihats add-on boards for Raspberry Pi, visit [raspihats.com](http://www.raspihats.com/). diff --git a/source/_components/switch.rflink.markdown b/source/_components/switch.rflink.markdown index fc7ab2b7a9..08b5e61458 100644 --- a/source/_components/switch.rflink.markdown +++ b/source/_components/switch.rflink.markdown @@ -50,7 +50,7 @@ Device configuration variables: - **name** (*Optional*): Name for the device, defaults to RFLink ID. - **aliases** (*Optional*): Alternative RFLink ID's this device is known by. -- **fire_event** (*Optional*): Fire an `button_pressed` event if this device is turned on or off (default: False). +- **fire_event** (*Optional*): Fire a `button_pressed` event if this device is turned on or off (default: False). - **signal_repetitions** (*Optional*): Repeat every RFLink command this number of times (default: 1) - **group** (*Optional*): Allow switch to respond to group commands (ALLON/ALLOFF). (default: yes) - **group_aliases** (*Optional*): `aliases` which only respond to group commands. diff --git a/source/_components/switch.rpi_gpio.markdown b/source/_components/switch.rpi_gpio.markdown index 2e1d74786d..192bb82544 100644 --- a/source/_components/switch.rpi_gpio.markdown +++ b/source/_components/switch.rpi_gpio.markdown @@ -1,7 +1,7 @@ --- layout: page -title: "Raspberry PI GPIO Switch" -description: "Instructions how to integrate the GPIO of a Raspberry PI into Home Assistant as a switch." +title: "Raspberry Pi GPIO Switch" +description: "Instructions how to integrate the GPIO of a Raspberry Pi into Home Assistant as a switch." date: 2015-08-07 14:00 sidebar: true comments: false diff --git a/source/_components/updater.markdown b/source/_components/updater.markdown index 4a5b9777b3..b87d554bb9 100644 --- a/source/_components/updater.markdown +++ b/source/_components/updater.markdown @@ -11,7 +11,7 @@ logo: home-assistant.png ha_category: Other --- -The `updater` component will check daily for new releases. It will show a badge in the frontend if a new version is found. As [Hass.io](/hassio/) has it's own schedule for release it doesn't make sense to use this component on Hass.io. +The `updater` component will check daily for new releases. It will show a badge in the frontend if a new version is found. As [Hass.io](/hassio/) has its own schedule for release it doesn't make sense to use this component on Hass.io. The updater component will also collect basic information about the running Home Assistant instance and its environment. The information includes the current Home Assistant version, the time zone, Python version and operating system information. No identifiable information (i.e., IP address, GPS coordinates, etc.) will ever be collected. If you are concerned about your privacy, you are welcome to scrutinize the Python [source code](https://github.com/home-assistant/home-assistant/blob/dev/homeassistant/components/updater.py#L91). For further information about the Updater's data, please check the [detailed overview](/docs/backend/updater/). diff --git a/source/_components/waterfurnace.markdown b/source/_components/waterfurnace.markdown index b747ff597a..9bf884e0c2 100644 --- a/source/_components/waterfurnace.markdown +++ b/source/_components/waterfurnace.markdown @@ -64,5 +64,5 @@ every polling cycle. While this is communicating with a thermostat, geothermal systems operate most efficiently when setbacks are not used, and the home is kept at a constant temperature. It remains useful to collect the data -from the system to understand it's performance, but a full climate +from the system to understand its performance, but a full climate interface won't be implemented. diff --git a/source/_cookbook/automation_using_timeinterval_inputboolean.markdown b/source/_cookbook/automation_using_timeinterval_inputboolean.markdown index 499bc7aa5b..d5edc5e961 100644 --- a/source/_cookbook/automation_using_timeinterval_inputboolean.markdown +++ b/source/_cookbook/automation_using_timeinterval_inputboolean.markdown @@ -10,7 +10,7 @@ footer: true ha_category: Automation Examples --- -#### {% linkable_title Change Hue light on interval to random color based on state of a input boolean %} +#### {% linkable_title Change Hue light on interval to random color based on state of an input boolean %} _Note, Philips Hue is currently the only light platform that support the random effect._ diff --git a/source/_cookbook/track_battery_level.markdown b/source/_cookbook/track_battery_level.markdown index 9de6b14cfb..b623f46b04 100644 --- a/source/_cookbook/track_battery_level.markdown +++ b/source/_cookbook/track_battery_level.markdown @@ -43,7 +43,7 @@ sensor: ``` {% endraw %} -The `else` part is used to have the sensor keep it's last state if the newest [iCloud](/components/device_tracker.icloud/) update doesn't have any battery state in it (which happens sometimes). Otherwise the sensor will be blank. +The `else` part is used to have the sensor keep its last state if the newest [iCloud](/components/device_tracker.icloud/) update doesn't have any battery state in it (which happens sometimes). Otherwise the sensor will be blank. ### {% linkable_title Android and iOS Devices %} diff --git a/source/_docs/asterisk_mbox.markdown b/source/_docs/asterisk_mbox.markdown index 65c570aab8..fae79de927 100644 --- a/source/_docs/asterisk_mbox.markdown +++ b/source/_docs/asterisk_mbox.markdown @@ -44,7 +44,7 @@ Before beginning make sure that you have the following: 3. Create a configuration file for the server - As the `asterisk` user create a `asterisk_mbox.ini` file (You can place this in any directory you choose, but the rommended location is `/etc/asterisk/asterisk_mbox.ini`) + As the `asterisk` user create an `asterisk_mbox.ini` file (You can place this in any directory you choose, but the rommended location is `/etc/asterisk/asterisk_mbox.ini`) ```ini [default] diff --git a/source/_docs/configuration/state_object.markdown b/source/_docs/configuration/state_object.markdown index 72e6232147..c9ee1f9403 100644 --- a/source/_docs/configuration/state_object.markdown +++ b/source/_docs/configuration/state_object.markdown @@ -27,7 +27,7 @@ Field | Description `state.last_changed` | Time the state changed. This is not updated when there are only updated attributes. Example: `2017-10-28 08:13:36.715874+00:00`. `state.attributes` | A dictionary with extra attributes related to the current state. -The attributes of an entity are optional. There are a few attributes that are used by Home Assistant for representing the entity in a specific way. Each component will also have it's own attributes to represent extra state data about the entity. For example, the light component has attributes for the current brightness and color of the light. When an attribute is not available, Home Assistant will not write it to the state. +The attributes of an entity are optional. There are a few attributes that are used by Home Assistant for representing the entity in a specific way. Each component will also have its own attributes to represent extra state data about the entity. For example, the light component has attributes for the current brightness and color of the light. When an attribute is not available, Home Assistant will not write it to the state. When using templates, attributes will be available by their name. For example `state.attributes.assumed_state`. diff --git a/source/_docs/ecosystem/appdaemon/api.markdown b/source/_docs/ecosystem/appdaemon/api.markdown index 384dab6d3a..48c8d994ba 100755 --- a/source/_docs/ecosystem/appdaemon/api.markdown +++ b/source/_docs/ecosystem/appdaemon/api.markdown @@ -22,13 +22,13 @@ import homeassistant.appapi as appapi class MotionLights(appapi.AppDaemon): ``` -When configured as an app in the config file (more on that later) the lifecycle of the App begins. It will be instantiated as an object by AppDaemon, and immediately, it will have a call made to it's `initialize()` function - this function must appear as part of every app: +When configured as an app in the config file (more on that later) the lifecycle of the App begins. It will be instantiated as an object by AppDaemon, and immediately, it will have a call made to its `initialize()` function - this function must appear as part of every app: ```python def initialize(self): ``` -The initialize function allows the app to register any callbacks it might need for responding to state changes, and also any setup activities. When the `initialize()` function returns, the App will be dormant until any of it's callbacks are activated. +The initialize function allows the app to register any callbacks it might need for responding to state changes, and also any setup activities. When the `initialize()` function returns, the App will be dormant until any of its callbacks are activated. There are several circumstances under which `initialize()` might be called: @@ -93,7 +93,7 @@ class = NewApp When AppDaemon sees the following configuration it will expect to find a class called `NewApp` defined in a module called `new.py` in the apps subdirectory. Apps can be placed at the root of the Apps directory or within a subdirectory, an arbitrary depth down - wherever the App is, as long as it is in some subdirectory of the Apps dir, or in the Apps dir itself, AppDaemon will find it. There is no need to include information about the path, just the name of the file itself (without the `.py`) is sufficient. If names in the subdirectories overlap, AppDir will pick one of them but the exact choice it will make is undefined. -When starting the system for the first time or when reloading an App or Module, the system will log the fact in it's main log. It is often the case that there is a problem with the class, maybe a syntax error or some other problem. If that is the case, details will be output to the error log allowing the user to remedy the problem and reload. +When starting the system for the first time or when reloading an App or Module, the system will log the fact in its main log. It is often the case that there is a problem with the class, maybe a syntax error or some other problem. If that is the case, details will be output to the error log allowing the user to remedy the problem and reload. ## {% linkable_title Steps to writing an App %} @@ -154,7 +154,7 @@ Callback constraints are a feature of AppDaemon that removes the need for repeti Put simply, callback constraints are one or more conditions on callback execution that can be applied to an individual App. An App's callbacks will only be executed if all of the constraints are met. If a constraint is absent it will not be checked for. -For example, the presence callback constraint can be added to an App by adding a parameter to it's configuration like this: +For example, the presence callback constraint can be added to an App by adding a parameter to its configuration like this: ```ini [some_app] @@ -565,7 +565,7 @@ self.cancel_listen_state(self.office_light_handle) ### {% linkable_title info_listen_state() %} -Get information on state a callback from it's handle. +Get information on state a callback from its handle. #### {% linkable_title Synopsis %} @@ -909,7 +909,7 @@ self.cancel_timer(handle) ### {% linkable_title info_timer() %} -Get information on a scheduler event from it's handle. +Get information on a scheduler event from its handle. #### {% linkable_title Synopsis %} @@ -944,7 +944,7 @@ All of the scheduler calls above support 2 additional optional arguments, `rando - `random_start` - start of range of the random time - `random_end` - end of range of the random time -`random_start` must always be numerically lower than `random_end`, they can be negative to denote a random offset before and event, or positive to denote a random offset after an event. The event would be a an absolute or relative time or sunrise/sunset depending on which scheduler call you use and these values affect the base time by the spcified amount. If not specified, they will default to `0`. +`random_start` must always be numerically lower than `random_end`, they can be negative to denote a random offset before and event, or positive to denote a random offset after an event. The event would be an absolute or relative time or sunrise/sunset depending on which scheduler call you use and these values affect the base time by the spcified amount. If not specified, they will default to `0`. For example: @@ -1463,7 +1463,7 @@ self.cancel_listen_event(handle) ### {% linkable_title info_listen_event() %} -Get information on an event callback from it's handle. +Get information on an event callback from its handle. #### {% linkable_title Synopsis %} @@ -1552,7 +1552,7 @@ The custom event `MODE_CHANGE` would be subscribed to with: self.listen_event(self.mode_event, "MODE_CHANGE") ``` -Home Assistant can send these events in a variety of other places - within automations, and also directly from Alexa intents. Home Assistant can also listen for custom events with it's automation component. This can be used to signal from AppDaemon code back to Home Assistant. Here is a sample automation: +Home Assistant can send these events in a variety of other places - within automations, and also directly from Alexa intents. Home Assistant can also listen for custom events with its automation component. This can be used to signal from AppDaemon code back to Home Assistant. Here is a sample automation: ```yaml automation: @@ -2058,7 +2058,7 @@ OK, time travel sadly isn't really possible but it can be very useful when testi ### {% linkable_title Choosing a Start Time %} -Internally, AppDaemon keeps track of it's own time relative to when it was started. This make is possible to start AppDaemon with a different start time and date to the current time. For instance to test that sunset App, start AppDaemon at a time just before sunset and see if it works as expected. To do this, simply use the "-s" argument on AppDaemon's command line. e,g,: +Internally, AppDaemon keeps track of its own time relative to when it was started. This make is possible to start AppDaemon with a different start time and date to the current time. For instance to test that sunset App, start AppDaemon at a time just before sunset and see if it works as expected. To do this, simply use the "-s" argument on AppDaemon's command line. e,g,: ```bash $ appdaemon -s "2016-06-06 19:16:00" diff --git a/source/_docs/ecosystem/appdaemon/reboot.markdown b/source/_docs/ecosystem/appdaemon/reboot.markdown index 1ccdd8773a..2eba9f75a6 100644 --- a/source/_docs/ecosystem/appdaemon/reboot.markdown +++ b/source/_docs/ecosystem/appdaemon/reboot.markdown @@ -10,4 +10,4 @@ footer: true redirect_from: /ecosystem/appdaemon/reboot/ --- -To run `AppDaemon` at reboot, I have provided a sample init script in the `./scripts` directory. These have been tested on a Raspberry PI - your mileage may vary on other systems. There is also a sample Systemd script. +To run `AppDaemon` at reboot, I have provided a sample init script in the `./scripts` directory. These have been tested on a Raspberry Pi - your mileage may vary on other systems. There is also a sample Systemd script. diff --git a/source/_docs/ecosystem/appdaemon/tutorial.markdown b/source/_docs/ecosystem/appdaemon/tutorial.markdown index 6eee88e98b..6a9998bced 100755 --- a/source/_docs/ecosystem/appdaemon/tutorial.markdown +++ b/source/_docs/ecosystem/appdaemon/tutorial.markdown @@ -23,14 +23,14 @@ So given the importance of Automation, what should Automation allow us to do? I - Is it open and expandable? - Does it run locally without any reliance on the cloud? -In my opinion, Home Assistant accomplishes the majority of these very well with a combination of Automations, Scripts and Templates, and it's Restful API. +In my opinion, Home Assistant accomplishes the majority of these very well with a combination of Automations, Scripts and Templates, and its Restful API. So why `AppDaemon`? AppDaemon is not meant to replace Home Assistant Automations and Scripts, rather complement them. For a lot of things, automations work well and can be very succinct. However, there is a class of more complex automations for which they become harder to use, and appdeamon then comes into its own. It brings quite a few things to the table: - New paradigm - some problems require a procedural and/or iterative approach, and `AppDaemon` Apps are a much more natural fit for this. Recent enhancements to Home Assistant scripts and templates have made huge strides, but for the most complex scenarios, Apps can do things that Automations can't - Ease of use - AppDaemon's API is full of helper functions that make programming as easy and natural as possible. The functions and their operation are as "Pythonic" as possible, experienced Python programmers should feel right at home. - Reuse - write a piece of code once and instantiate it as an app as many times as you need with different parameters e.g. a motion light program that you can use in 5 different places around your home. The code stays the same, you just dynamically add new instances of it in the config file -- Dynamic - AppDaemon has been designed from the start to enable the user to make changes without requiring a restart of Home Assistant, thanks to it's loose coupling. However, it is better than that - the user can make changes to code and AppDaemon will automatically reload the code, figure out which Apps were using it and restart them to use the new code with out the need to restart `AppDaemon` itself. It is also possible to change parameters for an individual or multiple apps and have them picked up dynamically, and for a final trick, removing or adding apps is also picked up dynamically. Testing cycles become a lot more efficient as a result. +- Dynamic - AppDaemon has been designed from the start to enable the user to make changes without requiring a restart of Home Assistant, thanks to its loose coupling. However, it is better than that - the user can make changes to code and AppDaemon will automatically reload the code, figure out which Apps were using it and restart them to use the new code with out the need to restart `AppDaemon` itself. It is also possible to change parameters for an individual or multiple apps and have them picked up dynamically, and for a final trick, removing or adding apps is also picked up dynamically. Testing cycles become a lot more efficient as a result. - Complex logic - Python's If/Else constructs are clearer and easier to code for arbitrarily complex nested logic - Durable variables and state - variables can be kept between events to keep track of things like the number of times a motion sensor has been activated, or how long it has been since a door opened - All the power of Python - use any of Python's libraries, create your own modules, share variables, refactor and re-use code, create a single app to do everything, or multiple apps for individual tasks - nothing is off limits! diff --git a/source/_docs/ecosystem/backup/backup_usb.markdown b/source/_docs/ecosystem/backup/backup_usb.markdown index 279c76c3bd..6bd6276883 100644 --- a/source/_docs/ecosystem/backup/backup_usb.markdown +++ b/source/_docs/ecosystem/backup/backup_usb.markdown @@ -103,7 +103,7 @@ Change below path to where you placed the `usb_backup.sh` and run the following This does not automatically mount your USB drive at boot. You need to do that manually or add a line to your `/etc/fstab` file. -If your drive is on `/dev/sda1`, you could add a entry to your `/etc/fstab` like so: +If your drive is on `/dev/sda1`, you could add an entry to your `/etc/fstab` like so: ```text /dev/sda1 /media ext4 defaults,noatime 0 1 diff --git a/source/_docs/ecosystem/certificates/lets_encrypt.markdown b/source/_docs/ecosystem/certificates/lets_encrypt.markdown index b2ca1f4bea..ee9cb80892 100644 --- a/source/_docs/ecosystem/certificates/lets_encrypt.markdown +++ b/source/_docs/ecosystem/certificates/lets_encrypt.markdown @@ -241,7 +241,7 @@ In cases where your ISP blocks port 80 you will need to change the port forward Now SSH in to the device your Home Assistant is running on.

-If you're running the 'standard' setup on a Raspberry Pi the chances are you just logged in as the 'pi' user. If not, you may have logged in as the Home Assistant user. There are commands below that require the Home Assistant user to be on the `sudoers` list. If you are not using the 'standard' pi setup it is presumed you will know how to get your Home Assistant user on the `sudoers` list before continuing. If you are running the 'standard' pi setup, from your 'pi' user issue the following command (where `hass` is the Home Assistant user): +If you're running the 'standard' setup on a Raspberry Pi the chances are you just logged in as the 'pi' user. If not, you may have logged in as the Home Assistant user. There are commands below that require the Home Assistant user to be on the `sudoers` list. If you are not using the 'standard' Pi setup it is presumed you will know how to get your Home Assistant user on the `sudoers` list before continuing. If you are running the 'standard' Pi setup, from your 'pi' user issue the following command (where `hass` is the Home Assistant user): ``` $ sudo adduser hass sudo diff --git a/source/_docs/ecosystem/hass-configurator.markdown b/source/_docs/ecosystem/hass-configurator.markdown index d88d4a2d7f..c9fac261ec 100644 --- a/source/_docs/ecosystem/hass-configurator.markdown +++ b/source/_docs/ecosystem/hass-configurator.markdown @@ -109,7 +109,7 @@ Since the configurator script on its own is no service, you will have to take so 1. Fork the process into the background with the command: `nohup sudo ./configurator.py &` -2. If your system is using systemd (that's usually what you'll find on a Raspberry PI), there's a [template file](https://github.com/danielperna84/hass-configurator/blob/master/hass-poc-configurator.systemd) you can use and then apply the same process to integrate it as mentioned in the [Home Assistant documentation](https://home-assistant.io/docs/autostart/systemd/). If you use this method you have to set the `BASEPATH` variable according to your environment. +2. If your system is using systemd (that's usually what you'll find on a Raspberry Pi), there's a [template file](https://github.com/danielperna84/hass-configurator/blob/master/hass-poc-configurator.systemd) you can use and then apply the same process to integrate it as mentioned in the [Home Assistant documentation](https://home-assistant.io/docs/autostart/systemd/). If you use this method you have to set the `BASEPATH` variable according to your environment. 3. If you have [supervisor](http://supervisord.org/) running on your system, [hass-poc-configurator.supervisor](https://github.com/danielperna84/hass-configurator/blob/master/hass-poc-configurator.supervisor) would be an example configuration you could use to control the configurator. 4. A tool called [tmux](https://tmux.github.io/), which should be pre-installed with [HASSbian](https://home-assistant.io/docs/hassbian/). 5. A tool called [screen](http://ss64.com/bash/screen.html) (alternative to tmux). If it's not already installed on your system, you can do `sudo apt-get install screen` or `sudo yum install screen` to get it. When it's installed, start a screen session by executing `screen`. Then navigate to your Home Assistant directory and start the configurator like described above. Put the screen session into the background by pressing `CTRL+A` and then `CTRL+D`. It is now safe to disconnect from your SSH session. diff --git a/source/_docs/installation/hassbian/integrations.markdown b/source/_docs/installation/hassbian/integrations.markdown index e48f9e3536..5658ce712e 100644 --- a/source/_docs/installation/hassbian/integrations.markdown +++ b/source/_docs/installation/hassbian/integrations.markdown @@ -28,8 +28,8 @@ Just follow the component pages for each on how to add them to your Home Assista - [DHT Sensor](/components/sensor.dht/). - [Raspberry Pi Cover](/components/cover.rpi_gpio/). - - [Raspberry PI GPIO Binary Sensor](/components/binary_sensor.rpi_gpio/). - - [Raspberry PI GPIO Switch](/components/switch.rpi_gpio/). + - [Raspberry Pi GPIO Binary Sensor](/components/binary_sensor.rpi_gpio/). + - [Raspberry Pi GPIO Switch](/components/switch.rpi_gpio/). - [Raspberry Pi RF Switch](/components/switch.rpi_rf/). ### {% linkable_title Raspberry Pi Camera %} diff --git a/source/_docs/scripts.markdown b/source/_docs/scripts.markdown index c0c23fe63c..f630d283d4 100644 --- a/source/_docs/scripts.markdown +++ b/source/_docs/scripts.markdown @@ -155,7 +155,7 @@ The following automation shows how to raise a custom event called `event_light_t ``` {% endraw %} -The following automation shows how to capture the custom event `event_light_turned_on`, and retrieve corresponsing `entity_id` that was passed as the event data. +The following automation shows how to capture the custom event `event_light_turned_on`, and retrieve corresponding `entity_id` that was passed as the event data. {% raw %} ```yaml diff --git a/source/_docs/z-wave/control-panel.markdown b/source/_docs/z-wave/control-panel.markdown index f204afed4f..06c9bd741b 100644 --- a/source/_docs/z-wave/control-panel.markdown +++ b/source/_docs/z-wave/control-panel.markdown @@ -52,7 +52,7 @@ Battery powered devices need to be awake before you can use the Z-Wave control p This is a dropdown where you can select all the entities of this node. Once selected you can then use: * **Refresh Entity** to refresh just that entity's values -* **Entity Attributes** to display the attributes of that entity (eg it's friendly name, the ID of the node, etc) +* **Entity Attributes** to display the attributes of that entity (eg its friendly name, the ID of the node, etc) Here you can mark a device as requiring polling so the controller is aware of changes because the device doesn't send updates itself. Do see the information on [polling here](/docs/z-wave/devices/#polling), since excessive polling can break your Z-Wave network. diff --git a/source/_docs/z-wave/entities.markdown b/source/_docs/z-wave/entities.markdown index b5a597b4eb..d3c856d835 100644 --- a/source/_docs/z-wave/entities.markdown +++ b/source/_docs/z-wave/entities.markdown @@ -147,7 +147,7 @@ binary_sensor: - **254**: Deep sleep - **255**: Case open -If your device has an `burglar` entity, but not a `binary_sensor` equivalent, you can use a [template binary sensor](/components/binary_sensor.template/) to create one: +If your device has a `burglar` entity, but not a `binary_sensor` equivalent, you can use a [template binary sensor](/components/binary_sensor.template/) to create one: ``` binary_sensor: diff --git a/source/_docs/z-wave/services.markdown b/source/_docs/z-wave/services.markdown index 61c2ff7a86..0a6499d2d4 100644 --- a/source/_docs/z-wave/services.markdown +++ b/source/_docs/z-wave/services.markdown @@ -15,7 +15,7 @@ The `zwave` component exposes multiple services to help maintain the network. Al | ---------------------- | -------------------------------------------------------------------------------------------------------------------------------------------- | | add_node | Put the Z-Wave controller in inclusion mode. Allows you to add a new device to the Z-Wave network. | | add_node_secure | Put the Z-Wave controller in secure inclusion mode. Allows you to add a new device with secure communications to the Z-Wave network. | -| cancel_command | Cancels a running Z-Wave command. If you have started a add_node or remove_node command, and decide you are not going to do it, then this must be used to stop the inclusion/exclusion command. | +| cancel_command | Cancels a running Z-Wave command. If you have started an add_node or remove_node command, and decide you are not going to do it, then this must be used to stop the inclusion/exclusion command. | | change_association | Add or remove an association in the Z-Wave network | | heal_network | Tells the controller to "heal" the Z-Wave network. Basically asks the nodes to tell the controller all of their neighbors so the controller can refigure out optimal routing. | | heal_node | Tells the controller to "heal" a specific node on the network. Requires `node_id` field. You can also force return route update with `return_routes` field. diff --git a/source/_posts/2015-08-09-mqtt-raspberry-pi-squeezebox-asuswrt-support.markdown b/source/_posts/2015-08-09-mqtt-raspberry-pi-squeezebox-asuswrt-support.markdown index 7c810aee00..14d83f6202 100644 --- a/source/_posts/2015-08-09-mqtt-raspberry-pi-squeezebox-asuswrt-support.markdown +++ b/source/_posts/2015-08-09-mqtt-raspberry-pi-squeezebox-asuswrt-support.markdown @@ -1,7 +1,7 @@ --- layout: post -title: "MQTT, Rasperry PI, Logitech Squeezebox and ASUSWRT routers now supported" -description: "New support for MQTT, Rasperry PI GPIO, Logitech Squeezebox and ASUSWRT routers" +title: "MQTT, Rasperry Pi, Logitech Squeezebox and ASUSWRT routers now supported" +description: "New support for MQTT, Rasperry Pi GPIO, Logitech Squeezebox and ASUSWRT routers" date: 2015-08-09 18:01 0000 date_formatted: "August 9, 2015" author: Paulus Schoutsen @@ -10,7 +10,7 @@ comments: true categories: Release-Notes --- -It's time for the August release and there is some serious good stuff this time. The core of Home Assistant has gone some serious clean up and a bump in test coverage thanks to [@balloob](https://github.com/balloob). If you're a developer, make sure you read up on [the deprecation notices](https://github.com/home-assistant/home-assistant/pull/251). [@fabaff](https://github.com/fabaff) did another great round of documentating all the various components. +It's time for the August release and there is some serious good stuff this time. The core of Home Assistant has gone some serious clean up and a bump in test coverage thanks to [@balloob](https://github.com/balloob). If you're a developer, make sure you read up on [the deprecation notices](https://github.com/home-assistant/home-assistant/pull/251). [@fabaff](https://github.com/fabaff) did another great round of documenting all the various components. __MQTT Support__ The big new addition in this release is the support for the MQTT protocol by [@fabaff](https://github.com/fabaff) with some help from [@balloob](https://github.com/balloob). It will now be possible to integrate any IoT device that talks via MQTT. For the initial release we support connecting Home Assistant to a broker (no TLS yet). Components can now subscribe and publish to MQTT topics ([see the example][mqtt-example]) and also support for the automation component [has been added][mqtt-automation]. For more information, see [the MQTT component page][mqtt-component]. @@ -33,8 +33,8 @@ mqtt: -__Raspberry PI GPIO Support__ - [@gbarba](https://github.com/gbarba) has contributed support to use the general purpose input and output pins on a Raspberry PI as switches inside Home Assistant. +__Raspberry Pi GPIO Support__ + [@gbarba](https://github.com/gbarba) has contributed support to use the general purpose input and output pins on a Raspberry Pi as switches inside Home Assistant. ```yaml # Example configuration.yaml entry diff --git a/source/_posts/2016-02-09-Smarter-Smart-Things-with-MQTT-and-Home-Assistant.markdown b/source/_posts/2016-02-09-Smarter-Smart-Things-with-MQTT-and-Home-Assistant.markdown index 33ada39515..2420da0399 100644 --- a/source/_posts/2016-02-09-Smarter-Smart-Things-with-MQTT-and-Home-Assistant.markdown +++ b/source/_posts/2016-02-09-Smarter-Smart-Things-with-MQTT-and-Home-Assistant.markdown @@ -198,7 +198,7 @@ Here is the final sequence of events: There are a lot of stops along the way for these events, but each piece is a simple translation layer to shuttle the events between systems. ### Future Improvements -- **Raspberry pi**: There is a lot of interest in getting this running on the Raspberry Pi. It only requires binaries compiled for ARM, so we plan to get ARM-compatible versions of the containers going at some point. +- **Raspberry Pi**: There is a lot of interest in getting this running on the Raspberry Pi. It only requires binaries compiled for ARM, so we plan to get ARM-compatible versions of the containers going at some point. - **Authentication for MQTT**: At the moment, the MQTT bridge doesn't understand how to authenticate to MQTT, so only unauthenticated MQTT is supported. This is mitigated to some degree if you use our Docker Compose config, because MQTT's port is not actually shared publicly. - **Authentication for MQTT Bridge**: Right now the bridge expects that anyone subscribing is the SmartThings hub. This could use proper authentication. diff --git a/source/_posts/2016-04-07-static-website.markdown b/source/_posts/2016-04-07-static-website.markdown index a4ec4f90b1..e7bb788ce9 100644 --- a/source/_posts/2016-04-07-static-website.markdown +++ b/source/_posts/2016-04-07-static-website.markdown @@ -25,7 +25,7 @@ In the past the buzz word "Smart mirror" was used a couple of times in our [chat There are plenty of ways to achieve this...[RESTful API](/developers/rest_api/), [Python API](/developers/python_api/), or one of the [history components](/components/#history). If it is to be a web page I'm using the [MQTT Eventstream component](/components/mqtt_eventstream/) and [mqttws31.js](http://git.eclipse.org/c/paho/org.eclipse.paho.mqtt.javascript.git/tree/src). -The [HBMQTT](https://pypi.python.org/pypi/hbmqtt) broker provides websockets support for MQTT and mqttws31.js included in web page gives you access to the MQTT messages. It's a matter of minutes. OK, it took a little longer because I'm not a Javascript guy to create the software part that will show details about your environment. The source is available at [https://github.com/fabaff/home-assistant-display](https://github.com/fabaff/home-assistant-display) and the screenshot above shows the result. I guess that every person who is familiar with Javascript would be able to reduce the amount of code and to make it more flexible. Well, it's a only prototype and showcase to include an image in this blog post. +The [HBMQTT](https://pypi.python.org/pypi/hbmqtt) broker provides websockets support for MQTT and mqttws31.js included in web page gives you access to the MQTT messages. It's a matter of minutes. OK, it took a little longer because I'm not a Javascript guy to create the software part that will show details about your environment. The source is available at [https://github.com/fabaff/home-assistant-display](https://github.com/fabaff/home-assistant-display) and the screenshot above shows the result. I guess that every person who is familiar with Javascript would be able to reduce the amount of code and to make it more flexible. Well, it's only a prototype and showcase to include an image in this blog post. I hope that this little article could give you an idea of extending Home Assistant in an unconventional way. diff --git a/source/_posts/2016-04-09-onkyo-panasonic-gtfs-and-config-validation.markdown b/source/_posts/2016-04-09-onkyo-panasonic-gtfs-and-config-validation.markdown index 33c8d3e97c..d2067b9be8 100644 --- a/source/_posts/2016-04-09-onkyo-panasonic-gtfs-and-config-validation.markdown +++ b/source/_posts/2016-04-09-onkyo-panasonic-gtfs-and-config-validation.markdown @@ -10,7 +10,7 @@ comments: true categories: Release-Notes --- -Another awesome release ready to hit your homes. YAML can be hard for beginners and more experienced automators. So to help catch those pesky errors that sneak into your files we've been hard at work to introduce config validation! Especially huge thanks to [@jaharkes] for his hard work on this. Config validation is still in it's early stages. More common platforms and components have been added but we didn't do everything yet. +Another awesome release ready to hit your homes. YAML can be hard for beginners and more experienced automators. So to help catch those pesky errors that sneak into your files we've been hard at work to introduce config validation! Especially huge thanks to [@jaharkes] for his hard work on this. Config validation is still in its early stages. More common platforms and components have been added but we didn't do everything yet. When we encounter an invalid config we will now write a warning to your logs. You can see those in the frontend by clicking on the last developer tool. We're looking into options to make it more clear - it is a work in progress. diff --git a/source/_posts/2016-04-21-bluetooth-lg-webos-tvs-and-roombas.markdown b/source/_posts/2016-04-21-bluetooth-lg-webos-tvs-and-roombas.markdown index 72b13a6c8a..af96dc1778 100644 --- a/source/_posts/2016-04-21-bluetooth-lg-webos-tvs-and-roombas.markdown +++ b/source/_posts/2016-04-21-bluetooth-lg-webos-tvs-and-roombas.markdown @@ -13,7 +13,7 @@ og_image: /images/blog/2016-04-release-18/social.png It's time for 0.18. This release cycle is 2 days shorter than usual as I'll be traveling to Europe. This also means that it can take some more time before you get feedback on PRs. -Since the last release we have moved all Home Assistant source code etc into it's own [organization on GitHub](https://github.com/home-assistant). We're growing up! This sadly did cause us to have to move all Docker images. Check the breaking changes section for more info. +Since the last release we have moved all Home Assistant source code etc into its own [organization on GitHub](https://github.com/home-assistant). We're growing up! This sadly did cause us to have to move all Docker images. Check the breaking changes section for more info. diff --git a/source/_posts/2016-05-26-ibeacons-how-to-track-things-that-cant-track-themselves-part-ii.markdown b/source/_posts/2016-05-26-ibeacons-how-to-track-things-that-cant-track-themselves-part-ii.markdown index 579cde5579..89a0a442cc 100644 --- a/source/_posts/2016-05-26-ibeacons-how-to-track-things-that-cant-track-themselves-part-ii.markdown +++ b/source/_posts/2016-05-26-ibeacons-how-to-track-things-that-cant-track-themselves-part-ii.markdown @@ -122,7 +122,7 @@ script: ### {% linkable_title Using both types of iBeacons at the same time %} -Of course you can use both fixed and mobile beacons at the same time. I want my gates to open when I arrive home in the car - so I use an iBeacon in the car so that I can track the car, and a iBeacon on my drive so that a location update is triggered when I arrive. I've been experimenting with a high power beacon in a waterproof box on my drive which seems to work well to notice when I get home. +Of course you can use both fixed and mobile beacons at the same time. I want my gates to open when I arrive home in the car - so I use an iBeacon in the car so that I can track the car, and an iBeacon on my drive so that a location update is triggered when I arrive. I've been experimenting with a high power beacon in a waterproof box on my drive which seems to work well to notice when I get home.

diff --git a/source/_posts/2016-07-30-custom-frontend-panels--jupyter-notebooks--directv.markdown b/source/_posts/2016-07-30-custom-frontend-panels--jupyter-notebooks--directv.markdown index 48a43201b7..93bec4b215 100644 --- a/source/_posts/2016-07-30-custom-frontend-panels--jupyter-notebooks--directv.markdown +++ b/source/_posts/2016-07-30-custom-frontend-panels--jupyter-notebooks--directv.markdown @@ -12,7 +12,7 @@ categories: Release-Notes When Home Assistant started the focus has always been on making a great developer experience. Allowing anyone to add support for their favorite devices to Home Assistant easily. This focus has been a great success since we now have 339 components and platforms! -Starting with this release, we are extending our extensibility to the frontend. Starting this release, any component can [add it's own page to the frontend][custom-panels]. Examples of this today are the map, logbook and history. We are looking forward to all the crazy panels you'll come up with! +Starting with this release, we are extending our extensibility to the frontend. Starting this release, any component can [add its own page to the frontend][custom-panels]. Examples of this today are the map, logbook and history. We are looking forward to all the crazy panels you'll come up with! We have also seen an exciting trend of people starting to visualize their Internet of Things data using [Jupyter] Notebooks, which are a great way to create and share documents that contain code, visualizations, and explanatory text. In case you missed it, the [blog] post by [@kireyeu] shows an advanced usecase while our [Notebooks][jupyter-notebooks] in the [Home Assistant Notebooks repository][jupyter-repo] cover the basics. diff --git a/source/_posts/2016-08-16-we-have-apps-now.markdown b/source/_posts/2016-08-16-we-have-apps-now.markdown index 535a88e036..6edf3f8f4b 100644 --- a/source/_posts/2016-08-16-we-have-apps-now.markdown +++ b/source/_posts/2016-08-16-we-have-apps-now.markdown @@ -26,14 +26,14 @@ So given the importance of Automation, what should Automation allow us to do? I - Is it open and expandable? - Does it run locally without any reliance on the cloud? -In my opinion, Home Assistant accomplishes the majority of these very well with a combination of Automations, Scripts and Templates, and it's Restful API. +In my opinion, Home Assistant accomplishes the majority of these very well with a combination of Automations, Scripts and Templates, and its Restful API. So why `AppDaemon`? `AppDaemon` is not meant to replace Home Assistant Automations and Scripts, rather complement them. For a lot of things, automations work well and can be very succinct. However, there is a class of more complex automations for which they become harder to use, and appdeamon then comes into its own. It brings quite a few things to the table: - New paradigm - some problems require a procedural and/or iterative approach, and `AppDaemon` Apps are a much more natural fit for this. Recent enhancements to Home Assistant scripts and templates have made huge strides, but for the most complex scenarios, Apps can do things that Automations can't - Ease of use - `AppDaemon`'s API is full of helper functions that make programming as easy and natural as possible. The functions and their operation are as "Pythonic" as possible, experienced Python programmers should feel right at home. - Reuse - write a piece of code once and instantiate it as an app as many times as you need with different parameters e.g. a motion light program that you can use in 5 different places around your home. The code stays the same, you just dynamically add new instances of it in the config file -- Dynamic - `AppDaemon` has been designed from the start to enable the user to make changes without requiring a restart of Home Assistant, thanks to it's loose coupling. However, it is better than that - the user can make changes to code and `AppDaemon` will automatically reload the code, figure out which Apps were using it and restart them to use the new code without the need to restart `AppDaemon` itself. It is also possible to change parameters for an individual or multiple apps and have them picked up dynamically, and for a final trick, removing or adding apps is also picked up dynamically. Testing cycles become a lot more efficient as a result. +- Dynamic - `AppDaemon` has been designed from the start to enable the user to make changes without requiring a restart of Home Assistant, thanks to its loose coupling. However, it is better than that - the user can make changes to code and `AppDaemon` will automatically reload the code, figure out which Apps were using it and restart them to use the new code without the need to restart `AppDaemon` itself. It is also possible to change parameters for an individual or multiple apps and have them picked up dynamically, and for a final trick, removing or adding apps is also picked up dynamically. Testing cycles become a lot more efficient as a result. - Complex logic - Python's If/Else constructs are clearer and easier to code for arbitrarily complex nested logic - Durable variables and state - variables can be kept between events to keep track of things like the number of times a motion sensor has been activated, or how long it has been since a door opened - All the power of Python - use any of Python's libraries, create your own modules, share variables, refactor and re-use code, create a single app to do everything, or multiple apps for individual tasks - nothing is off limits! diff --git a/source/_posts/2016-10-08-hassbian-rest-digital-ocean.markdown b/source/_posts/2016-10-08-hassbian-rest-digital-ocean.markdown index a7386785f1..1c4f4ea6a6 100644 --- a/source/_posts/2016-10-08-hassbian-rest-digital-ocean.markdown +++ b/source/_posts/2016-10-08-hassbian-rest-digital-ocean.markdown @@ -36,7 +36,7 @@ With the [statistics sensor][stats-sensor] we would like to introduce a new sens

-As the results are processed on-the-fly you still need to use the data from your database for a in-depth analysis of your stored information. Check the latest [notebook] for doing statistics with your Home Assistant database. +As the results are processed on-the-fly you still need to use the data from your database for an in-depth analysis of your stored information. Check the latest [notebook] for doing statistics with your Home Assistant database. ### {% linkable_title REST! We don't... %} diff --git a/source/_posts/2017-01-28-face-coffee-wink.markdown b/source/_posts/2017-01-28-face-coffee-wink.markdown index 6201e628ec..26d05a6d94 100644 --- a/source/_posts/2017-01-28-face-coffee-wink.markdown +++ b/source/_posts/2017-01-28-face-coffee-wink.markdown @@ -152,7 +152,7 @@ Bugfix: [@balloob], [@fabaff], [@freol35241], [@pvizeli], [@Danielhiversen], [@t - Due to massive improvements of the [Wink][wink] integration, the names of your binary sensors will change and new devices can show up. - The [MySensors][mysensors] component now requires all persistence file paths to be set if any is set by the user. This is to avoid name conflicts for the paths. If no path is set Home Assistant will set all paths for you. - The [Sonos][sonos] service `sonos_group_players` was removed. Use now `sonos_join` for this function. -- TTS cache have change for the last time. Files use now also a option hash as part of the name. If you want to use the cache, it need to be renamed or cleared, new created. E. g. `HASH_LANG_PLATFORM.xxx` -> `HASH_LANG_OPTIONS_PLATFORM.xxx`, replace *OPTIONS* with `-` on exiting platforms. +- TTS cache have change for the last time. Files use now also an option hash as part of the name. If you want to use the cache, it need to be renamed or cleared, new created. E. g. `HASH_LANG_PLATFORM.xxx` -> `HASH_LANG_OPTIONS_PLATFORM.xxx`, replace *OPTIONS* with `-` on exiting platforms. ### {% 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://discord.gg/c5DvZ4e). The release notes have comments enabled but it's preferred if you use the former communication channels. Thanks. diff --git a/source/_posts/2017-02-04-babyphone.markdown b/source/_posts/2017-02-04-babyphone.markdown index 3703bcd193..9da9d97c45 100644 --- a/source/_posts/2017-02-04-babyphone.markdown +++ b/source/_posts/2017-02-04-babyphone.markdown @@ -26,7 +26,7 @@ Next, we attach a `ffmpeg_noise` binary sensor to our IP camera. The sensor has We change the platform name for binary sensor in 0.38 from `ffmpeg` to `ffmpeg_noise`. Also all service going to component and was rename from `binary_sensor.ffmpeg_xy` to `ffmpeg.xy`.

-On Raspbian Jessie, you can setup [FFmpeg](/components/ffmpeg) and install a [icecast2](http://icecast.org/) server using: +On Raspbian Jessie, you can setup [FFmpeg](/components/ffmpeg) and install an [icecast2](http://icecast.org/) server using: ```bash $ sudo echo "deb http://ftp.debian.org/debian jessie-backports main" >> /etc/apt/sources.list @@ -35,7 +35,7 @@ $ sudo apt-get -t jessie-backports install ffmpeg $ sudo apt-get install icecast2 ``` -We setup a icecast mount point for our babyphone and update `/etc/icecast2/icecast.xml`: +We setup an icecast mount point for our babyphone and update `/etc/icecast2/icecast.xml`: ``` @@ -93,7 +93,7 @@ automation: entity_id: binary_sensor.ffmpeg_noise ``` -### {% linkable_title Trigger a alarm %} +### {% linkable_title Trigger an alarm %} Now we can make a lot stuff. Here is a simple example of an automation what should be possible with Sonos speakers. diff --git a/source/_posts/2017-02-25-config-panel-and-state-restoration.markdown b/source/_posts/2017-02-25-config-panel-and-state-restoration.markdown index ee59872448..e92643be51 100644 --- a/source/_posts/2017-02-25-config-panel-and-state-restoration.markdown +++ b/source/_posts/2017-02-25-config-panel-and-state-restoration.markdown @@ -71,9 +71,9 @@ So starting this release, we had to make some breaking changes to right the wron [**Update: the online tool can be found here.**](https://jsfiddle.net/balloob/d2e56q6f/74/) -#### Customize has been reverted to it's original config +#### Customize has been reverted to its original config -The old customize is back. The options to match by domain or using glob have been moved to it's own options. It will now look like this: +The old customize is back. The options to match by domain or using glob have been moved to its own options. It will now look like this: ```yaml homeassistant: diff --git a/source/_posts/2017-10-07-release-55.markdown b/source/_posts/2017-10-07-release-55.markdown index bbe1bc7738..6517546712 100644 --- a/source/_posts/2017-10-07-release-55.markdown +++ b/source/_posts/2017-10-07-release-55.markdown @@ -63,7 +63,7 @@ Experiencing issues introduced by this release? Please report them in our [issue ## {% linkable_title Breaking Changes %} -- history_graph component: If your component used `history.get_significant_states` function then you need to adjust the string `entitity_id` parameter has been changed to a list of strings `entity_ids` parameter. ([@andrey-git] - [#9472]) ([history_graph docs]) (breaking change) +- history_graph component: If your component used `history.get_significant_states` function then you need to adjust the string `entity_id` parameter has been changed to a list of strings `entity_ids` parameter. ([@andrey-git] - [#9472]) ([history_graph docs]) (breaking change) - UPNP component: The `external_port` configuration option was removed. ([@balloob] - [#9560]) ([upnp docs]) (breaking change) - New Wink services: pair new device, rename, delete and add new lock key code. All device attributes that are multi-words are now separated by "_" and no longer " ". ([@w1ll1am23] - [#9303]) ([wink docs]) ([binary_sensor.wink docs]) ([lock.wink docs]) (breaking change) - TP-Link Switch: Attribute names now uses underscores and unnecessary capitalization was removed. ([@djchen] - [#9607]) ([switch.tplink docs]) (breaking change) diff --git a/source/_posts/2017-11-10-ttn-with-mqtt.markdown b/source/_posts/2017-11-10-ttn-with-mqtt.markdown index d619623c02..38341bdc9f 100644 --- a/source/_posts/2017-11-10-ttn-with-mqtt.markdown +++ b/source/_posts/2017-11-10-ttn-with-mqtt.markdown @@ -195,4 +195,4 @@ sensor: state_topic: "home/ttn/garden_temp" ``` -This solution is not production-ready, scalable or stable but it could fill the gape till Home Assistant is able to connect to multiple MQTT brokers. If you have multiple devices relay all messages to your local broker and add an configuration variable to `mqtt_ttn` sensor which allows you to select the device. +This solution is not production-ready, scalable or stable but it could fill the gape till Home Assistant is able to connect to multiple MQTT brokers. If you have multiple devices relay all messages to your local broker and add a configuration variable to `mqtt_ttn` sensor which allows you to select the device. diff --git a/source/_posts/2017-11-12-tor.markdown b/source/_posts/2017-11-12-tor.markdown index 612faf1ffc..cd4e018f7a 100644 --- a/source/_posts/2017-11-12-tor.markdown +++ b/source/_posts/2017-11-12-tor.markdown @@ -27,7 +27,7 @@ The most amazing part? It is super easy to set up! ## {% linkable_title Setting up Tor %} -Our [documentation](/docs/ecosystem/tor/) provides an detailed guide about seting up a [Tor's Hidden Service](https://www.torproject.org/docs/hidden-services.html.en). The setup is straight-forward: +Our [documentation](/docs/ecosystem/tor/) provides a detailed guide about setting up a [Tor's Hidden Service](https://www.torproject.org/docs/hidden-services.html.en). The setup is straight-forward: 1. Install Tor. On a Debian-based system: `$ sudo apt-get install tor`. On Fedora: `$ sudo dnf install tor` 2. Modify Tor's main configuration file `/etc/tor/torrc` to include the following lines: diff --git a/source/developers/code_review_component.markdown b/source/developers/code_review_component.markdown index 9b7bdff460..bebe3dc784 100644 --- a/source/developers/code_review_component.markdown +++ b/source/developers/code_review_component.markdown @@ -33,4 +33,4 @@ Not all existing platforms follow the requirements in this checklist. This canno ### {% linkable_title 3. Component/platform communication %} 1. If you need to share global data with platforms, use the dictionary `hass.data`. `hass.data[DATA_XY]` while `XY` is the component is preferred over `hass.data[DOMAIN]`. - 2. If the component fetches data that causes it's related platform entities to update, you can notify them using the dispatcher code in `homeassistant.helpers.dispatcher`. + 2. If the component fetches data that causes its related platform entities to update, you can notify them using the dispatcher code in `homeassistant.helpers.dispatcher`. diff --git a/source/developers/hassio/addon_communication.markdown b/source/developers/hassio/addon_communication.markdown index 9b4d3fbdc1..c95be391a5 100644 --- a/source/developers/hassio/addon_communication.markdown +++ b/source/developers/hassio/addon_communication.markdown @@ -14,7 +14,7 @@ There are different ways to communication between add-ons inside Home Assistant. ## {% linkable_title Network %} -We use a internal network. That allow to speak with every add-on or from Home Assistant to add-on by name or alias. Only the add-ons which runs on the host network are a bit limited. They can speak with all internal add-ons over their name but all other add-on can't address the add-on in question with its name. But using an alias work well. Thus the name/alias is used to communicate inside Hass.io. The name have the following format `{REPO}-{SLUG}`, e.g. `local-xy` or `3283fh-myaddon`. +We use an internal network. That allow to speak with every add-on or from Home Assistant to add-on by name or alias. Only the add-ons which runs on the host network are a bit limited. They can speak with all internal add-ons over their name but all other add-on can't address the add-on in question with its name. But using an alias work well. Thus the name/alias is used to communicate inside Hass.io. The name have the following format `{REPO}-{SLUG}`, e.g. `local-xy` or `3283fh-myaddon`. Use `hassio` to speak with the internal API. diff --git a/source/developers/hassio/addon_config.markdown b/source/developers/hassio/addon_config.markdown index 005c8a0cd8..cf91e022b4 100644 --- a/source/developers/hassio/addon_config.markdown +++ b/source/developers/hassio/addon_config.markdown @@ -140,7 +140,7 @@ The config for an add-on is stored in `config.json`. ### {% linkable_title Options / Schema %} -The `options` dictionary contains all available options and their default value. Set the default value to `null` if the value is required to be given by the user before the add-on can start, and it show it inside default values. Only nested arrays and dictionaries are supported with a deep of two size. If you want make a option optional, put `?` to the end of data type, otherwise it will be a required value. +The `options` dictionary contains all available options and their default value. Set the default value to `null` if the value is required to be given by the user before the add-on can start, and it show it inside default values. Only nested arrays and dictionaries are supported with a deep of two size. If you want make an option optional, put `?` to the end of data type, otherwise it will be a required value. ```json { diff --git a/source/developers/hassio/addon_repository.markdown b/source/developers/hassio/addon_repository.markdown index 645fb1cf81..9a8373fa51 100644 --- a/source/developers/hassio/addon_repository.markdown +++ b/source/developers/hassio/addon_repository.markdown @@ -10,7 +10,7 @@ footer: true redirect_from: /hassio/addon_repository/ --- -An add-on repository can contain one or more add-ons. Each add-on is stored in it's own unique folder. To be indentified as a repository, the repository must contain a configuration file. +An add-on repository can contain one or more add-ons. Each add-on is stored in its own unique folder. To be indentified as a repository, the repository must contain a configuration file. Check the [Example add-on repository](https://github.com/home-assistant/hassio-addons-example) for further details. diff --git a/source/developers/hassio/addon_testing.markdown b/source/developers/hassio/addon_testing.markdown index d1a2dfc17f..f2f562f443 100644 --- a/source/developers/hassio/addon_testing.markdown +++ b/source/developers/hassio/addon_testing.markdown @@ -16,7 +16,7 @@ Right now add-ons will work with images that are stored on Docker Hub (using `im ## {% linkable_title Local build %} -You can build an try the addon on your developer machine also. Move all addon stuff into a temp folder. If you use `FROM $BUILD_FROM` you need set a base image with build args. Normally you can use follow base images: +You can build and try the addon on your developer machine also. Move all addon stuff into a temp folder. If you use `FROM $BUILD_FROM` you need set a base image with build args. Normally you can use follow base images: - armhf: `homeassistant/armhf-base:latest` - aarch64: `homeassistant/aarch64-base:latest` diff --git a/source/developers/websocket_api.markdown b/source/developers/websocket_api.markdown index 4f226bc668..76f7f0b0c7 100644 --- a/source/developers/websocket_api.markdown +++ b/source/developers/websocket_api.markdown @@ -35,7 +35,7 @@ If you are not using the [`frontend`](/components/frontend/) in your setup then 1. Server can send results of previous commands. 1. Client or server disconnects session. -During the command phase, the client attaches a unique identifier to each message. The server will add this identifier to each message so that the client can link each message to it's origin. +During the command phase, the client attaches a unique identifier to each message. The server will add this identifier to each message so that the client can link each message to its origin. ## {% linkable_title Message format %} diff --git a/source/getting-started/index.markdown b/source/getting-started/index.markdown index 766e76eef2..472503ae24 100644 --- a/source/getting-started/index.markdown +++ b/source/getting-started/index.markdown @@ -9,7 +9,7 @@ sharing: true footer: true --- -The goal of this getting started guide is to install Hass.io on a Raspberry Pi 3. Hass.io is our own all in one solution that turns your Raspberry PI into the ultimate home automation hub. +The goal of this getting started guide is to install Hass.io on a Raspberry Pi 3. Hass.io is our own all in one solution that turns your Raspberry Pi into the ultimate home automation hub. Follow this guide if you want to easily get started with Home Assistant, or if you have no or little Linux experience. For advanced users, check our [alternative installation methods](/docs/installation/). From 034e65aa1393e59e93bb2772b6a134d057019527 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Sun, 28 Jan 2018 10:01:06 +0100 Subject: [PATCH 226/993] Remove left-over from merge --- source/_components/coinbase.markdown | 1 - 1 file changed, 1 deletion(-) diff --git a/source/_components/coinbase.markdown b/source/_components/coinbase.markdown index d39e34e3a7..f5d657ab4f 100644 --- a/source/_components/coinbase.markdown +++ b/source/_components/coinbase.markdown @@ -28,7 +28,6 @@ coinbase: - BTC - ETH - LTC -======= ``` {% configuration %} From 5eba15c0e4f7a267a9afd22afdcc8c75df3b7763 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Sun, 28 Jan 2018 23:07:24 +0100 Subject: [PATCH 227/993] Add example --- source/_components/timer.markdown | 36 ++++++++++++++++++++++++++++--- 1 file changed, 33 insertions(+), 3 deletions(-) diff --git a/source/_components/timer.markdown b/source/_components/timer.markdown index 7cb9984ee8..61ff400aea 100644 --- a/source/_components/timer.markdown +++ b/source/_components/timer.markdown @@ -92,17 +92,19 @@ Select serv
 }
 ```
 
-### {% linkable_title Configuration example %}
+## {% linkable_title Examples %}
+
+Set a timer called `test` to a duration of 30 seconds. 
 
 ```yaml
 # Example configuration.yaml entry
-
-# Set a timer called test to a duration of 30 seconds: 
 timer:
   test:
     duration: Date: Mon, 29 Jan 2018 07:53:06 +0100 Subject: [PATCH 228/993] Buienradar (#4544) * Title in line with similar weather components * Title in line with similar weather components --- source/_components/sensor.buienradar.markdown | 2 +- source/_components/weather.buienradar.markdown | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/source/_components/sensor.buienradar.markdown b/source/_components/sensor.buienradar.markdown index 1cdebf9290..d8c29d6a5f 100644 --- a/source/_components/sensor.buienradar.markdown +++ b/source/_components/sensor.buienradar.markdown @@ -1,6 +1,6 @@ --- layout: page -title: "Buienradar" +title: "Buienradar Sensor" description: "Instructions how to integrate buienradar.nl sensor within Home Assistant." date: 2017-05-15 14:00 sidebar: true diff --git a/source/_components/weather.buienradar.markdown b/source/_components/weather.buienradar.markdown index 9cfb72d10c..0377e8bfe2 100644 --- a/source/_components/weather.buienradar.markdown +++ b/source/_components/weather.buienradar.markdown @@ -1,6 +1,6 @@ --- layout: page -title: "Buienradar Weather" +title: "Buienradar" description: "Instructions how to integrate buienradar.nl weather within Home Assistant." date: 2017-05-15 14:00 sidebar: true From c16a434566d1ec73f4e7fe79624654b0f174ac2c Mon Sep 17 00:00:00 2001 From: Franck Nijhof Date: Mon, 29 Jan 2018 07:59:55 +0100 Subject: [PATCH 229/993] :pencil2: Minor changes --- source/_components/media_player.mediaroom.markdown | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/source/_components/media_player.mediaroom.markdown b/source/_components/media_player.mediaroom.markdown index 65ba033c8e..d88d5673f4 100644 --- a/source/_components/media_player.mediaroom.markdown +++ b/source/_components/media_player.mediaroom.markdown @@ -10,7 +10,7 @@ footer: true logo: mediaroom.png ha_category: Media Player ha_iot_class: "Local Polling" -ha_release: "0.62" +ha_release: "0.63" --- The `mediaroom` component allows you to control a [Mediaroom](https://en.wikipedia.org/wiki/Ericsson_Mediaroom) Set-Top Box (STB) from Home Assistant. @@ -35,12 +35,12 @@ media_player: required: false type: string optimistic: - description: In case the component can't determine the status of the box, consider the box always ON. + description: In case the component cannot determine the status of the box, consider the box always ON. required: false type: boolean {% endconfiguration %} -Notice that all parameters are optional, and discovery shoud configure everything for you. +Notice that all parameters are optional, and discovery should configure everything for you. #### {% linkable_title Using the Mediaroom component %} @@ -48,4 +48,4 @@ The component has been developed for Portuguese TV operators currently using the In most cases (single STB) you just need to setup the *name* and discovery will do the rest. In case you have more than one STB you are required to set the *host* in each one of the entries. -If the STB is in the same network segment as Home Assistant we can determine whether the device is turned on or off. Without this, the component will fail to determine the Set-top box status and you are required to add the *optimistic* configuration variable. +If the STB is on the same network segment as Home Assistant, it can determine whether the device is turned on or off. Without this, the component will fail to determine the Set-top box status, and you are required to add the *optimistic* configuration variable. From 5d5dc9c0d6ffcad0de544aabe018f96444c6b15e Mon Sep 17 00:00:00 2001 From: David De Sloovere Date: Mon, 29 Jan 2018 08:14:19 +0100 Subject: [PATCH 230/993] Change hassio to Home Assistant --- source/_components/notify.html5.markdown | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/source/_components/notify.html5.markdown b/source/_components/notify.html5.markdown index 8bf9a4c528..4f96f0707c 100644 --- a/source/_components/notify.html5.markdown +++ b/source/_components/notify.html5.markdown @@ -35,17 +35,17 @@ Configuration variables: 1. Make sure you can access your Home Assistant installation from outside your network over https ([see docs](https://home-assistant.io/docs/configuration/remote/)). 2. Create a new project at [https://console.cloud.google.com/home/dashboard](https://console.cloud.google.com/home/dashboard). -3. Go to [https://console.cloud.google.com/apis/credentials/domainverification](https://console.cloud.google.com/apis/credentials/domainverification) and verify your domain via Google Webmaster Central / Search Console - [hass.io instructions](#verify-your-domain-with-hassio). +3. Go to [https://console.cloud.google.com/apis/credentials/domainverification](https://console.cloud.google.com/apis/credentials/domainverification) and verify your domain via Google Webmaster Central / Search Console - [hass.io instructions](#verify-your-domain-with-home-assistant). 4. With the domain verified, go to [https://console.firebase.google.com](https://console.firebase.google.com), select import Google project, and select the project you created. 5. Then, click the cogwheel on top left and select "Project settings". 6. Select 'Cloud Messaging' tab, listed beneath Project Credentials will be your 152 character 'Server Key' and 12 digit ID 'Sender ID' you need for configuring this component. -#### {% linkable_title Verify your domain with Hass.io %} +#### {% linkable_title Verify your domain with Home Assistant %} Follow these steps to verify domain ownership with Google Webmaster Central / Search Console: 1. Enter your domain and add **'/local'** at the end, ie. https://whitehouse.duckdns.org:8123/local 2. Select HTML file verification and download the google*.html file. -2. Create a directory named "www" in your Hass.io configuration directory (/config share from Samba add-on). +2. Create a directory named "www" in your Home Assistant configuration directory (/config share from Samba add-on). 3. Place the downloaded google*.html file in the "www" directory. 4. RESTART Home Assistant - this is important! 5. Verify the file can be accessed in the browser, ie. **https://whitehouse.duckdns.org:8123/local/goole123456789.html** (change filename) - you should a plain text message saying "google-site-verification: ..." - if you see "404: Not Found" or something else, retry the above steps. From a71800bcbaeba5a98b18ddfc726639532c4e168d Mon Sep 17 00:00:00 2001 From: David De Sloovere Date: Mon, 29 Jan 2018 08:15:04 +0100 Subject: [PATCH 231/993] Update notify.html5.markdown --- 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 4f96f0707c..f506eb1887 100644 --- a/source/_components/notify.html5.markdown +++ b/source/_components/notify.html5.markdown @@ -35,7 +35,7 @@ Configuration variables: 1. Make sure you can access your Home Assistant installation from outside your network over https ([see docs](https://home-assistant.io/docs/configuration/remote/)). 2. Create a new project at [https://console.cloud.google.com/home/dashboard](https://console.cloud.google.com/home/dashboard). -3. Go to [https://console.cloud.google.com/apis/credentials/domainverification](https://console.cloud.google.com/apis/credentials/domainverification) and verify your domain via Google Webmaster Central / Search Console - [hass.io instructions](#verify-your-domain-with-home-assistant). +3. Go to [https://console.cloud.google.com/apis/credentials/domainverification](https://console.cloud.google.com/apis/credentials/domainverification) and verify your domain via Google Webmaster Central / Search Console - [instructions](#verify-your-domain-with-home-assistant). 4. With the domain verified, go to [https://console.firebase.google.com](https://console.firebase.google.com), select import Google project, and select the project you created. 5. Then, click the cogwheel on top left and select "Project settings". 6. Select 'Cloud Messaging' tab, listed beneath Project Credentials will be your 152 character 'Server Key' and 12 digit ID 'Sender ID' you need for configuring this component. From 5da84711b4e746ffec5b53a44ca6a64214b9aa80 Mon Sep 17 00:00:00 2001 From: David De Sloovere Date: Mon, 29 Jan 2018 08:16:40 +0100 Subject: [PATCH 232/993] Update notify.html5.markdown --- source/_components/notify.html5.markdown | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/_components/notify.html5.markdown b/source/_components/notify.html5.markdown index f506eb1887..f53d7dc74a 100644 --- a/source/_components/notify.html5.markdown +++ b/source/_components/notify.html5.markdown @@ -35,12 +35,12 @@ Configuration variables: 1. Make sure you can access your Home Assistant installation from outside your network over https ([see docs](https://home-assistant.io/docs/configuration/remote/)). 2. Create a new project at [https://console.cloud.google.com/home/dashboard](https://console.cloud.google.com/home/dashboard). -3. Go to [https://console.cloud.google.com/apis/credentials/domainverification](https://console.cloud.google.com/apis/credentials/domainverification) and verify your domain via Google Webmaster Central / Search Console - [instructions](#verify-your-domain-with-home-assistant). +3. Go to [https://console.cloud.google.com/apis/credentials/domainverification](https://console.cloud.google.com/apis/credentials/domainverification) and verify your domain via Google Webmaster Central / Search Console - [instructions](#verify-your-domain). 4. With the domain verified, go to [https://console.firebase.google.com](https://console.firebase.google.com), select import Google project, and select the project you created. 5. Then, click the cogwheel on top left and select "Project settings". 6. Select 'Cloud Messaging' tab, listed beneath Project Credentials will be your 152 character 'Server Key' and 12 digit ID 'Sender ID' you need for configuring this component. -#### {% linkable_title Verify your domain with Home Assistant %} +#### {% linkable_title Verify your domain %} Follow these steps to verify domain ownership with Google Webmaster Central / Search Console: 1. Enter your domain and add **'/local'** at the end, ie. https://whitehouse.duckdns.org:8123/local From 4c0c19e49bd8114c2d158c40bd011e39f1365575 Mon Sep 17 00:00:00 2001 From: dtorner Date: Mon, 29 Jan 2018 19:40:22 +0100 Subject: [PATCH 233/993] Update camera.markdown (#4546) typo --- source/_components/camera.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/camera.markdown b/source/_components/camera.markdown index 21629b68d8..2d92253993 100644 --- a/source/_components/camera.markdown +++ b/source/_components/camera.markdown @@ -40,7 +40,7 @@ Take a snapshot from a camera. | Service data attribute | Optional | Description | | ---------------------- | -------- | ----------- | -| `entity_id` | no | Name(s) of entities to create a snopshot from, e.g., `camera.living_room_camera`. | +| `entity_id` | no | Name(s) of entities to create a snapshot from, e.g., `camera.living_room_camera`. | | `filename ` | no | Template of a file name. Variable is `entity_id`, e.g., {% raw %}`/tmp/snapshot_{{ entity_id }}`{% endraw %}. | The path part of `filename` must be an entry in the `whitelist_external_dirs` in your [`homeassistant:`](/docs/configuration/basic/) section of your `configuration.yaml` file. From 9b31e9c476231fcc3f50f6994e01f61385a5dfea Mon Sep 17 00:00:00 2001 From: cogneato Date: Mon, 29 Jan 2018 12:20:24 -0700 Subject: [PATCH 234/993] Add files via upload (#4547) --- .../hassio/screenshots/local_repository.png | Bin 5185 -> 7388 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/source/images/hassio/screenshots/local_repository.png b/source/images/hassio/screenshots/local_repository.png index 0c0af4fb4349354e90d9a8dc33bd06cc9024639c..06bc8e245def1120d6eec8ed219d2a6518bfac2f 100644 GIT binary patch literal 7388 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 literal 5185 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 TS8G!y{7pbrw3Mrrtls Date: Mon, 29 Jan 2018 21:30:04 +0000 Subject: [PATCH 235/993] emulated_hue: add documentation for new entities configuration (#4538) * emulated_hue: add documentation for new entities configuration * :pencil2: Minor improvements --- source/_components/emulated_hue.markdown | 47 +++++++++++------------- 1 file changed, 22 insertions(+), 25 deletions(-) diff --git a/source/_components/emulated_hue.markdown b/source/_components/emulated_hue.markdown index 0082534a2a..e679f31129 100644 --- a/source/_components/emulated_hue.markdown +++ b/source/_components/emulated_hue.markdown @@ -17,9 +17,9 @@ ha_iot_class: "Local Push" Be aware that `emulated_hue` doesn't work for new **Google Home** users. If you're a new user of Google Home, use the [Google Assistant component](https://home-assistant.io/components/google_assistant/).

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

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

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

### {% linkable_title Troubleshooting %} @@ -118,9 +115,9 @@ You can verify that the `emulated_hue` component has been loaded and is respondi - `http://:8300/description.xml` - This URL should return a descriptor file in the form of an XML file. - `http://:8300/api/pi/lights` - This will return a list of devices, lights, scenes, groups, etc.. that `emulated_hue` is exposing to Alexa. -For Google Home, verify that the URLs above are using port 80, rather than port 8300 (i.e. `http://:80/description.xml`). +For Google Home, verify that the URLs above are using port 80, rather than port 8300 (i.e. `http://:80/description.xml`). -An additional step is required to run Home Assistant as non-root user and use port 80 when using the AiO script. Execute the following command to allow `emulated_hue` to use port 80 as non-root user. +An additional step is required to run Home Assistant as a non-root user and use port 80 when using the AiO script. Execute the following command to allow `emulated_hue` to use port 80 as a non-root user. ```bash sudo setcap 'cap_net_bind_service=+ep' /srv/homeassistant/homeassistant_venv/bin/python3 From a3e449edb5cea71324cf8f5c97386497ad1e8ae5 Mon Sep 17 00:00:00 2001 From: akloeckner Date: Mon, 29 Jan 2018 23:29:39 +0100 Subject: [PATCH 236/993] add only_direct option to sensor.deutsche_bahn (#4542) * add only_direct option to sensor.deutsche_bahn goes along with https://github.com/home-assistant/home-assistant/pull/11999 * Update style --- .../_components/sensor.deutsche_bahn.markdown | 20 ++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/source/_components/sensor.deutsche_bahn.markdown b/source/_components/sensor.deutsche_bahn.markdown index 58fd420aeb..a2003e4c7d 100644 --- a/source/_components/sensor.deutsche_bahn.markdown +++ b/source/_components/sensor.deutsche_bahn.markdown @@ -25,11 +25,21 @@ sensor: from: NAME_OF_START_STATION to: NAME_OF_FINAL_STATION ``` - -Configuration variables: - -- **from** (*Required*): The name of the start station. -- **to** (*Required*): The name of the end/destination station. +{% configuration %} +from: + description: The name of the start station. + required: true + type: string +to: + description: The name of the end/destination station. + required: true + type: string +only_direct: + description: Only show direct connections. + required: false + type: boolean + default: false +{% endconfiguration %} This sensor stores a lot of attributes which can be accessed by other sensors eg. a [template sensor](/components/sensor.template/). From 0d7202fdc3f2224d19e63a1e5837776f38c5d6d9 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Mon, 29 Jan 2018 23:42:45 +0100 Subject: [PATCH 237/993] Update for 0.62 --- source/developers/credits.markdown | 202 +++++++++++++++-------------- 1 file changed, 106 insertions(+), 96 deletions(-) diff --git a/source/developers/credits.markdown b/source/developers/credits.markdown index 9e5a224e4b..3055c86bb3 100644 --- a/source/developers/credits.markdown +++ b/source/developers/credits.markdown @@ -2,7 +2,7 @@ layout: page title: "Credits" description: "Credits for the developers who contributed to Home Assistant." -date: 2018-01-13 18:07:58 +0000 +date: 2018-01-29 22:42:30 +0000 sidebar: true comments: false sharing: true @@ -13,22 +13,22 @@ This page contains a list of people who have contributed in one way or another t ### {% linkable_title Author %} -- [Paulus Schoutsen (@balloob)](https://github.com/balloob "6125 total commits to the home-assistant organization, 3619 commits to home-assistant, 1332 commits to home-assistant.github.io, 682 commits to home-assistant-polymer, 244 commits to home-assistant-js, 118 commits to netdisco, 44 commits to home-assistant-js-websocket, 26 commits to hass-release, 14 commits to home-assistant-assets, 10 commits to LabelBot, 8 commits to example-custom-config, 7 commits to micropython-home-assistant, 5 commits to hassio, 3 commits to hassio-addons, 2 commits to hassio-addons-example, 2 commits to hassio-build, 2 commits to python-hassbian, 2 commits to issue-bot, 2 commits to lambda-home-assistant-github, 1 commit to home-assistant-notebooks, 1 commit to warrant, 1 commit to home-assistant-iOS") +- [Paulus Schoutsen (@balloob)](https://github.com/balloob "6159 total commits to the home-assistant organization, 3630 commits to home-assistant, 1345 commits to home-assistant.github.io, 689 commits to home-assistant-polymer, 244 commits to home-assistant-js, 119 commits to netdisco, 44 commits to home-assistant-js-websocket, 26 commits to hass-release, 15 commits to home-assistant-assets, 11 commits to LabelBot, 8 commits to example-custom-config, 7 commits to micropython-home-assistant, 5 commits to hassio, 3 commits to hassio-addons, 2 commits to hassio-addons-example, 2 commits to hassio-build, 2 commits to python-hassbian, 2 commits to lambda-home-assistant-github, 2 commits to issue-bot, 1 commit to warrant, 1 commit to home-assistant-notebooks, 1 commit to home-assistant-iOS") ### {% linkable_title Contributors %} (in alphabetical order) - [7even (@hwikene)](https://github.com/hwikene "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") -- [Aaron Bach (@bachya)](https://github.com/bachya "36 total commits to the home-assistant organization, 23 commits to home-assistant, 13 commits to home-assistant.github.io") +- [Aaron Bach (@bachya)](https://github.com/bachya "40 total commits to the home-assistant organization, 24 commits to home-assistant, 16 commits to home-assistant.github.io") - [Aaron Linville (@linville)](https://github.com/linville "2 total commits to the home-assistant organization, 2 commits to appdaemon") -- [Abílio Costa (@abmantis)](https://github.com/abmantis "20 total commits to the home-assistant organization, 12 commits to home-assistant, 5 commits to home-assistant.github.io, 1 commit to netdisco, 1 commit to home-assistant-js-websocket, 1 commit to home-assistant-polymer") -- [Adam (@SilvrrGIT)](https://github.com/SilvrrGIT "8 total commits to the home-assistant organization, 8 commits to home-assistant.github.io") +- [Abílio Costa (@abmantis)](https://github.com/abmantis "20 total commits to the home-assistant organization, 12 commits to home-assistant, 5 commits to home-assistant.github.io, 1 commit to home-assistant-js-websocket, 1 commit to netdisco, 1 commit to home-assistant-polymer") +- [Adam (@SilvrrGIT)](https://github.com/SilvrrGIT "9 total commits to the home-assistant organization, 9 commits to home-assistant.github.io") - [Adam Baxter (@voltagex)](https://github.com/voltagex "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") - [Adam Cooper (@GenericStudent)](https://github.com/GenericStudent "11 total commits to the home-assistant organization, 8 commits to home-assistant, 3 commits to home-assistant.github.io") - [Adam Dullage (@Dullage)](https://github.com/Dullage "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") -- [Adam Mills (@armills)](https://github.com/armills "286 total commits to the home-assistant organization, 150 commits to home-assistant, 81 commits to home-assistant-polymer, 51 commits to home-assistant.github.io, 3 commits to home-assistant-js, 1 commit to homebridge-homeassistant") -- [Adrian Popa (@mad-ady)](https://github.com/mad-ady "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") +- [Adam Mills (@armills)](https://github.com/armills "289 total commits to the home-assistant organization, 151 commits to home-assistant, 82 commits to home-assistant-polymer, 52 commits to home-assistant.github.io, 3 commits to home-assistant-js, 1 commit to homebridge-homeassistant") +- [Adrian Popa (@mad-ady)](https://github.com/mad-ady "5 total commits to the home-assistant organization, 4 commits to appdaemon, 1 commit to home-assistant-polymer") - [Adrien Ball (@adrienball)](https://github.com/adrienball "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Adrien Brault (@adrienbrault)](https://github.com/adrienbrault "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Adrián López (@adrianlzt)](https://github.com/adrianlzt "8 total commits to the home-assistant organization, 6 commits to home-assistant.github.io, 2 commits to home-assistant") @@ -51,12 +51,12 @@ This page contains a list of people who have contributed in one way or another t - [Alexandre Perrin (@kAworu)](https://github.com/kAworu "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [Alexis Iglauer (@ax42)](https://github.com/ax42 "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [Alfie Day (@Azelphur)](https://github.com/Azelphur "12 total commits to the home-assistant organization, 12 commits to home-assistant") -- [Aliaksandr (@minchik)](https://github.com/minchik "7 total commits to the home-assistant organization, 3 commits to home-assistant.github.io, 2 commits to home-assistant, 2 commits to appdaemon") -- [Alok Saboo (@arsaboo)](https://github.com/arsaboo "125 total commits to the home-assistant organization, 75 commits to home-assistant.github.io, 45 commits to home-assistant, 3 commits to home-assistant-polymer, 1 commit to pi-gen, 1 commit to hassio-addons") +- [Aliaksandr (@minchik)](https://github.com/minchik "7 total commits to the home-assistant organization, 3 commits to home-assistant.github.io, 2 commits to appdaemon, 2 commits to home-assistant") +- [Alok Saboo (@arsaboo)](https://github.com/arsaboo "132 total commits to the home-assistant organization, 78 commits to home-assistant.github.io, 48 commits to home-assistant, 4 commits to home-assistant-polymer, 1 commit to pi-gen, 1 commit to hassio-addons") - [amigian74 (@amigian74)](https://github.com/amigian74 "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [amorsillo (@AndrewMorsillo)](https://github.com/AndrewMorsillo "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") - [Anders Fogh Eriksen (@Fogh)](https://github.com/Fogh "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") -- [Anders Melchiorsen (@amelchio)](https://github.com/amelchio "126 total commits to the home-assistant organization, 91 commits to home-assistant, 33 commits to home-assistant.github.io, 2 commits to home-assistant-polymer") +- [Anders Melchiorsen (@amelchio)](https://github.com/amelchio "131 total commits to the home-assistant organization, 95 commits to home-assistant, 34 commits to home-assistant.github.io, 2 commits to home-assistant-polymer") - [Andrea Campi (@andreacampi)](https://github.com/andreacampi "8 total commits to the home-assistant organization, 6 commits to home-assistant, 2 commits to home-assistant.github.io") - [Andrea Falcone (@asfalcone)](https://github.com/asfalcone "5 total commits to the home-assistant organization, 5 commits to issue-bot") - [Andreas Björshammar (@abjorshammar)](https://github.com/abjorshammar "2 total commits to the home-assistant organization, 2 commits to home-assistant") @@ -65,20 +65,18 @@ This page contains a list of people who have contributed in one way or another t - [Andreas Renberg (@IQAndreas)](https://github.com/IQAndreas "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [Andreea-Daniela Ene (@AndreeaEne)](https://github.com/AndreeaEne "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [Andrej Friesen (@ajfriesen)](https://github.com/ajfriesen "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") -- [Andrew (@aneisch)](https://github.com/aneisch "4 total commits to the home-assistant organization, 4 commits to home-assistant.github.io") - [Andrew (@aoakeson)](https://github.com/aoakeson "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") -- [Andrew Cockburn (@acockburn)](https://github.com/acockburn "692 total commits to the home-assistant organization, 560 commits to appdaemon, 88 commits to hadashboard, 25 commits to scenegen, 19 commits to home-assistant.github.io") +- [Andrew (@aneisch)](https://github.com/aneisch "5 total commits to the home-assistant organization, 5 commits to home-assistant.github.io") +- [Andrew Cockburn (@acockburn)](https://github.com/acockburn "734 total commits to the home-assistant organization, 602 commits to appdaemon, 88 commits to hadashboard, 25 commits to scenegen, 19 commits to home-assistant.github.io") - [Andrew Smith (@andrewmichaelsmith)](https://github.com/andrewmichaelsmith "2 total commits to the home-assistant organization, 2 commits to pi-gen") - [Andrew Stock (@watchforstock)](https://github.com/watchforstock "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Andrew Thigpen (@andythigpen)](https://github.com/andythigpen "33 total commits to the home-assistant organization, 32 commits to home-assistant, 1 commit to home-assistant-js") - [andrew-curtis (@andrew-curtis)](https://github.com/andrew-curtis "7 total commits to the home-assistant organization, 7 commits to home-assistant.github.io") -- [Andrey (@andrey-git)](https://github.com/andrey-git "264 total commits to the home-assistant organization, 116 commits to home-assistant-polymer, 111 commits to home-assistant, 37 commits to home-assistant.github.io") +- [Andrey (@andrey-git)](https://github.com/andrey-git "275 total commits to the home-assistant organization, 124 commits to home-assistant-polymer, 114 commits to home-assistant, 37 commits to home-assistant.github.io") - [Andrey Kupreychik (@foxel)](https://github.com/foxel "9 total commits to the home-assistant organization, 6 commits to home-assistant, 3 commits to home-assistant.github.io") - [Andrzej (@andriej)](https://github.com/andriej "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [Andréas Lundgren (@adevade)](https://github.com/adevade "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") -- [Andy Castille (@Klikini)](https://github.com/Klikini "11 total commits to the home-assistant organization, 7 commits to home-assistant, 4 commits to home-assistant.github.io") -- [Andy Loughran (@andylockran)](https://github.com/andylockran "2 total commits to the home-assistant organization, 2 commits to home-assistant") -- [andyat (@andyat)](https://github.com/andyat "2 total commits to the home-assistant organization, 2 commits to home-assistant") +- [Andy Castille (@Klikini)](https://github.com/Klikini "12 total commits to the home-assistant organization, 8 commits to home-assistant, 4 commits to home-assistant.github.io") - [anotherthomas (@anotherthomas)](https://github.com/anotherthomas "1 total commits to the home-assistant organization, 1 commit to hassio-addons") - [Anthony Hughes (@tony2nite)](https://github.com/tony2nite "1 total commits to the home-assistant organization, 1 commit to netdisco") - [Antoine Bertin (@Diaoul)](https://github.com/Diaoul "5 total commits to the home-assistant organization, 2 commits to home-assistant, 2 commits to home-assistant.github.io, 1 commit to home-assistant-polymer") @@ -86,6 +84,7 @@ This page contains a list of people who have contributed in one way or another t - [Anton Lundin (@glance-)](https://github.com/glance- "7 total commits to the home-assistant organization, 6 commits to home-assistant, 1 commit to netdisco") - [Anton Sarukhanov (@antsar)](https://github.com/antsar "6 total commits to the home-assistant organization, 3 commits to home-assistant, 2 commits to home-assistant.github.io, 1 commit to home-assistant-polymer") - [apo-mak (@apo-mak)](https://github.com/apo-mak "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") +- [arcsur (@arcsur)](https://github.com/arcsur "3 total commits to the home-assistant organization, 3 commits to home-assistant") - [Ardetus (@Ardetus)](https://github.com/Ardetus "4 total commits to the home-assistant organization, 2 commits to home-assistant, 2 commits to home-assistant.github.io") - [Ardi Mehist (@omgapuppy)](https://github.com/omgapuppy "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [Ari Lotter (@arilotter)](https://github.com/arilotter "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") @@ -98,7 +97,6 @@ This page contains a list of people who have contributed in one way or another t - [Assaf Inbal (@shmuelzon)](https://github.com/shmuelzon "11 total commits to the home-assistant organization, 9 commits to homebridge-homeassistant, 2 commits to home-assistant") - [Audric Schiltknecht (@chemicalstorm)](https://github.com/chemicalstorm "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [Audun Ytterdal (@auduny)](https://github.com/auduny "2 total commits to the home-assistant organization, 2 commits to home-assistant") -- [aufano (@aufano)](https://github.com/aufano "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Austin (@trainman419)](https://github.com/trainman419 "8 total commits to the home-assistant organization, 8 commits to home-assistant") - [Avraham David Gelbfish (@adgelbfish)](https://github.com/adgelbfish "2 total commits to the home-assistant organization, 1 commit to hadashboard, 1 commit to pi-gen") - [azeroth12 (@azeroth12)](https://github.com/azeroth12 "1 total commits to the home-assistant organization, 1 commit to appdaemon") @@ -107,7 +105,7 @@ This page contains a list of people who have contributed in one way or another t - [Baran Kaynak (@barankaynak)](https://github.com/barankaynak "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") - [Barry Williams (@bazwilliams)](https://github.com/bazwilliams "10 total commits to the home-assistant organization, 6 commits to home-assistant, 2 commits to netdisco, 2 commits to home-assistant.github.io") - [Bart274 (@Bart274)](https://github.com/Bart274 "26 total commits to the home-assistant organization, 17 commits to home-assistant, 8 commits to home-assistant.github.io, 1 commit to home-assistant-polymer") -- [Bas Schipper (@basschipper)](https://github.com/basschipper "5 total commits to the home-assistant organization, 3 commits to home-assistant, 2 commits to home-assistant.github.io") +- [Bas Schipper (@basschipper)](https://github.com/basschipper "6 total commits to the home-assistant organization, 4 commits to home-assistant, 2 commits to home-assistant.github.io") - [bastshoes (@bastshoes)](https://github.com/bastshoes "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") - [bcl1713 (@bcl1713)](https://github.com/bcl1713 "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [Beat (@bdurrer)](https://github.com/bdurrer "11 total commits to the home-assistant organization, 10 commits to home-assistant.github.io, 1 commit to home-assistant-polymer") @@ -127,11 +125,10 @@ This page contains a list of people who have contributed in one way or another t - [Björn Orri (@bjornorri)](https://github.com/bjornorri "1 total commits to the home-assistant organization, 1 commit to home-assistant-iOS") - [Björn Ramberg (@bjorne)](https://github.com/bjorne "1 total commits to the home-assistant organization, 1 commit to hassio-build") - [Blanyal D'Souza (@blanyal)](https://github.com/blanyal "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") -- [Bob Anderson (@rwa)](https://github.com/rwa "4 total commits to the home-assistant organization, 4 commits to home-assistant") +- [Bob Anderson (@rwa)](https://github.com/rwa "11 total commits to the home-assistant organization, 7 commits to home-assistant, 4 commits to home-assistant.github.io") - [Bob Igo (@Human)](https://github.com/Human "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [Boced66 (@boced66)](https://github.com/boced66 "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") -- [boltgolt (@Boltgolt)](https://github.com/Boltgolt "2 total commits to the home-assistant organization, 2 commits to home-assistant") -- [boojew (@boojew)](https://github.com/boojew "8 total commits to the home-assistant organization, 6 commits to home-assistant.github.io, 2 commits to home-assistant") +- [boojew (@boojew)](https://github.com/boojew "6 total commits to the home-assistant organization, 6 commits to home-assistant.github.io") - [Boris K (@bokub)](https://github.com/bokub "11 total commits to the home-assistant organization, 6 commits to home-assistant.github.io, 5 commits to home-assistant") - [Boyi C (@fanthos)](https://github.com/fanthos "11 total commits to the home-assistant organization, 6 commits to home-assistant-polymer, 3 commits to home-assistant, 2 commits to home-assistant.github.io") - [bpoirriez (@bpoirriez)](https://github.com/bpoirriez "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") @@ -156,11 +153,11 @@ This page contains a list of people who have contributed in one way or another t - [Bruno Adele (@badele)](https://github.com/badele "22 total commits to the home-assistant organization, 22 commits to home-assistant") - [Bruno Binet (@bbinet)](https://github.com/bbinet "1 total commits to the home-assistant organization, 1 commit to hassio-build") - [Bryce Edwards (@hoopty)](https://github.com/hoopty "5 total commits to the home-assistant organization, 3 commits to home-assistant, 2 commits to home-assistant.github.io") -- [c727 (@c727)](https://github.com/c727 "18 total commits to the home-assistant organization, 11 commits to home-assistant-polymer, 7 commits to home-assistant.github.io") +- [c727 (@c727)](https://github.com/c727 "21 total commits to the home-assistant organization, 14 commits to home-assistant-polymer, 7 commits to home-assistant.github.io") - [Caius Cioran (@caiuspb)](https://github.com/caiuspb "3 total commits to the home-assistant organization, 3 commits to home-assistant") - [Caleb (@finish06)](https://github.com/finish06 "7 total commits to the home-assistant organization, 7 commits to home-assistant") - [Cameron Bulock (@cbulock)](https://github.com/cbulock "5 total commits to the home-assistant organization, 2 commits to home-assistant, 2 commits to home-assistant.github.io, 1 commit to netdisco") -- [Carlo Costanzo (@CCOSTAN)](https://github.com/CCOSTAN "95 total commits to the home-assistant organization, 87 commits to home-assistant.github.io, 5 commits to home-assistant, 1 commit to fabric-home-assistant, 1 commit to homebridge-homeassistant, 1 commit to hassbian-scripts") +- [Carlo Costanzo (@CCOSTAN)](https://github.com/CCOSTAN "95 total commits to the home-assistant organization, 87 commits to home-assistant.github.io, 5 commits to home-assistant, 1 commit to fabric-home-assistant, 1 commit to hassbian-scripts, 1 commit to homebridge-homeassistant") - [carlosmgr (@carlosmgr)](https://github.com/carlosmgr "6 total commits to the home-assistant organization, 6 commits to home-assistant") - [Carter (@BluGeni)](https://github.com/BluGeni "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [cdce8p (@cdce8p)](https://github.com/cdce8p "21 total commits to the home-assistant organization, 12 commits to home-assistant.github.io, 7 commits to home-assistant, 2 commits to home-assistant-polymer") @@ -187,34 +184,35 @@ This page contains a list of people who have contributed in one way or another t - [Christian Brædstrup (@LinuxChristian)](https://github.com/LinuxChristian "8 total commits to the home-assistant organization, 8 commits to home-assistant") - [Christian Lasarczyk (@ChrisLasar)](https://github.com/ChrisLasar "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [Christian Studer (@cstuder)](https://github.com/cstuder "4 total commits to the home-assistant organization, 4 commits to home-assistant.github.io") -- [ChristianKuehnel (@ChristianKuehnel)](https://github.com/ChristianKuehnel "15 total commits to the home-assistant organization, 8 commits to home-assistant, 7 commits to home-assistant.github.io") +- [ChristianKuehnel (@ChristianKuehnel)](https://github.com/ChristianKuehnel "19 total commits to the home-assistant organization, 10 commits to home-assistant, 9 commits to home-assistant.github.io") - [Christoffer Kylvåg (@christoe)](https://github.com/christoe "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [Christoph Wagner (@Christoph-Wagner)](https://github.com/Christoph-Wagner "4 total commits to the home-assistant organization, 4 commits to home-assistant.github.io") - [Christopher Viel (@Chris-V)](https://github.com/Chris-V "5 total commits to the home-assistant organization, 3 commits to home-assistant, 2 commits to home-assistant.github.io") - [chrysn (@chrysn)](https://github.com/chrysn "65 total commits to the home-assistant organization, 65 commits to libcoap") - [chz^3 (@chzchzchz)](https://github.com/chzchzchz "1 total commits to the home-assistant organization, 1 commit to pi-gen") - [Ciquattro (@CiquattroFPV)](https://github.com/CiquattroFPV "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") -- [clach04 (@clach04)](https://github.com/clach04 "5 total commits to the home-assistant organization, 3 commits to home-assistant.github.io, 2 commits to home-assistant") +- [clach04 (@clach04)](https://github.com/clach04 "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [Claus F. Strasburger (@cfstras)](https://github.com/cfstras "1 total commits to the home-assistant organization, 1 commit to pi-gen") -- [cogneato (@cogneato)](https://github.com/cogneato "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") +- [cogneato (@cogneato)](https://github.com/cogneato "4 total commits to the home-assistant organization, 4 commits to home-assistant.github.io") - [Colin Dunn (@colindunn)](https://github.com/colindunn "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Colin O'Dell (@colinodell)](https://github.com/colinodell "24 total commits to the home-assistant organization, 13 commits to home-assistant, 11 commits to home-assistant.github.io") - [Colin Teubner (@netopiax)](https://github.com/netopiax "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") -- [Conrad Juhl Andersen (@cnrd)](https://github.com/cnrd "2 total commits to the home-assistant organization, 2 commits to home-assistant") +- [Conrad Juhl Andersen (@cnrd)](https://github.com/cnrd "5 total commits to the home-assistant organization, 3 commits to home-assistant, 2 commits to home-assistant.github.io") - [Constantine Grantcharov (@conz27)](https://github.com/conz27 "1 total commits to the home-assistant organization, 1 commit to libcoap") - [Constantine Poltyrev (@shprota)](https://github.com/shprota "1 total commits to the home-assistant organization, 1 commit to appdaemon") - [Corban Mailloux (@corbanmailloux)](https://github.com/corbanmailloux "18 total commits to the home-assistant organization, 18 commits to home-assistant.github.io") - [Corey Pauley (@devspacenine)](https://github.com/devspacenine "5 total commits to the home-assistant organization, 3 commits to home-assistant.github.io, 2 commits to home-assistant") -- [corneyl (@corneyl)](https://github.com/corneyl "2 total commits to the home-assistant organization, 2 commits to home-assistant") -- [Craig J. Ward (@wardcraigj)](https://github.com/wardcraigj "23 total commits to the home-assistant organization, 17 commits to home-assistant, 6 commits to home-assistant.github.io") +- [covrig (@covrig)](https://github.com/covrig "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") +- [Craig J. Ward (@wardcraigj)](https://github.com/wardcraigj "25 total commits to the home-assistant organization, 18 commits to home-assistant, 7 commits to home-assistant.github.io") - [CTLS (@CTLS)](https://github.com/CTLS "3 total commits to the home-assistant organization, 3 commits to home-assistant") +- [CV (@dagobert)](https://github.com/dagobert "4 total commits to the home-assistant organization, 4 commits to home-assistant.github.io") - [cxlwill (@cxlwill)](https://github.com/cxlwill "2 total commits to the home-assistant organization, 2 commits to home-assistant-polymer") - [Dale Higgs (@dale3h)](https://github.com/dale3h "33 total commits to the home-assistant organization, 21 commits to home-assistant.github.io, 10 commits to home-assistant, 1 commit to hassbot, 1 commit to homebridge-homeassistant") - [Dan (@danieljkemp)](https://github.com/danieljkemp "23 total commits to the home-assistant organization, 16 commits to home-assistant, 7 commits to home-assistant.github.io") - [Dan Chen (@djchen)](https://github.com/djchen "2 total commits to the home-assistant organization, 2 commits to home-assistant") -- [Dan Cinnamon (@Cinntax)](https://github.com/Cinntax "14 total commits to the home-assistant organization, 12 commits to home-assistant, 2 commits to home-assistant.github.io") +- [Dan Cinnamon (@Cinntax)](https://github.com/Cinntax "17 total commits to the home-assistant organization, 14 commits to home-assistant, 3 commits to home-assistant.github.io") - [Dan Faulknor (@danielfaulknor)](https://github.com/danielfaulknor "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") -- [Dan Nixon (@DanNixon)](https://github.com/DanNixon "17 total commits to the home-assistant organization, 12 commits to home-assistant, 5 commits to home-assistant.github.io") +- [Dan Nixon (@DanNixon)](https://github.com/DanNixon "19 total commits to the home-assistant organization, 14 commits to home-assistant, 5 commits to home-assistant.github.io") - [Dan Ports (@drkp)](https://github.com/drkp "4 total commits to the home-assistant organization, 4 commits to home-assistant") - [Dan Sarginson (@dansarginson)](https://github.com/dansarginson "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Dan Smith (@kk7ds)](https://github.com/kk7ds "84 total commits to the home-assistant organization, 68 commits to home-assistant, 14 commits to home-assistant.github.io, 2 commits to home-assistant-polymer") @@ -222,8 +220,8 @@ This page contains a list of people who have contributed in one way or another t - [Dani (@danichispa)](https://github.com/danichispa "9 total commits to the home-assistant organization, 9 commits to home-assistant.github.io") - [Daniel (@delneet)](https://github.com/delneet "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [Daniel Escoz (@Darkhogg)](https://github.com/Darkhogg "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") -- [Daniel Høyer Iversen (@Danielhiversen)](https://github.com/Danielhiversen "367 total commits to the home-assistant organization, 245 commits to home-assistant, 119 commits to home-assistant.github.io, 3 commits to home-assistant-polymer") -- [Daniel Perna (@danielperna84)](https://github.com/danielperna84 "77 total commits to the home-assistant organization, 38 commits to home-assistant.github.io, 35 commits to home-assistant, 4 commits to hassio-addons") +- [Daniel Høyer Iversen (@Danielhiversen)](https://github.com/Danielhiversen "374 total commits to the home-assistant organization, 252 commits to home-assistant, 119 commits to home-assistant.github.io, 3 commits to home-assistant-polymer") +- [Daniel Perna (@danielperna84)](https://github.com/danielperna84 "79 total commits to the home-assistant organization, 38 commits to home-assistant.github.io, 36 commits to home-assistant, 5 commits to hassio-addons") - [Daniel Peukert (@dpeukert)](https://github.com/dpeukert "3 total commits to the home-assistant organization, 2 commits to home-assistant.github.io, 1 commit to home-assistant-polymer") - [Daniel Schaal (@schaal)](https://github.com/schaal "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Daniel Stone (@daniel-stoneuk)](https://github.com/daniel-stoneuk "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") @@ -239,9 +237,10 @@ This page contains a list of people who have contributed in one way or another t - [Dave J (@kxtcd950)](https://github.com/kxtcd950 "3 total commits to the home-assistant organization, 3 commits to hassbian-scripts") - [DaveSergeant (@dethpickle)](https://github.com/dethpickle "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [David (@fanaticDavid)](https://github.com/fanaticDavid "13 total commits to the home-assistant organization, 10 commits to home-assistant.github.io, 2 commits to home-assistant, 1 commit to home-assistant-polymer") +- [David (Drew) Jackson (@David-Jackson)](https://github.com/David-Jackson "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [David De Sloovere (@DavidDeSloovere)](https://github.com/DavidDeSloovere "7 total commits to the home-assistant organization, 7 commits to home-assistant.github.io") +- [David Fiel (@dfiel)](https://github.com/dfiel "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [David Grant (@davegravy)](https://github.com/davegravy "6 total commits to the home-assistant organization, 4 commits to home-assistant.github.io, 2 commits to home-assistant") -- [David Jackson (@David-Jackson)](https://github.com/David-Jackson "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [David McNett (@nugget)](https://github.com/nugget "10 total commits to the home-assistant organization, 5 commits to home-assistant, 5 commits to home-assistant.github.io") - [David Ohayon (@ohayon)](https://github.com/ohayon "3 total commits to the home-assistant organization, 3 commits to issue-bot") - [David Straub (@DavidMStraub)](https://github.com/DavidMStraub "9 total commits to the home-assistant organization, 5 commits to home-assistant, 4 commits to home-assistant.github.io") @@ -259,16 +258,16 @@ This page contains a list of people who have contributed in one way or another t - [Dennis Sutch (@sutch)](https://github.com/sutch "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [Derek (@itchaboy)](https://github.com/itchaboy "5 total commits to the home-assistant organization, 5 commits to home-assistant.github.io") - [Derek Brooks (@broox)](https://github.com/broox "39 total commits to the home-assistant organization, 30 commits to home-assistant, 9 commits to home-assistant.github.io") -- [dersger (@dersger)](https://github.com/dersger "3 total commits to the home-assistant organization, 2 commits to home-assistant, 1 commit to home-assistant-polymer") +- [dersger (@dersger)](https://github.com/dersger "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") - [devdelay (@devdelay)](https://github.com/devdelay "16 total commits to the home-assistant organization, 7 commits to home-assistant.github.io, 5 commits to home-assistant, 4 commits to homebridge-homeassistant") - [Devon Peet (@dpeet)](https://github.com/dpeet "5 total commits to the home-assistant organization, 5 commits to home-assistant.github.io") - [Diogo Gomes (@dgomes)](https://github.com/dgomes "10 total commits to the home-assistant organization, 6 commits to home-assistant, 4 commits to home-assistant.github.io") - [DoloresHA (@DoloresHA)](https://github.com/DoloresHA "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [Domantas (@Dohxis)](https://github.com/Dohxis "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") - [Dougal Matthews (@d0ugal)](https://github.com/d0ugal "4 total commits to the home-assistant organization, 2 commits to home-assistant, 2 commits to home-assistant.github.io") -- [dramamoose (@dramamoose)](https://github.com/dramamoose "5 total commits to the home-assistant organization, 3 commits to home-assistant.github.io, 2 commits to home-assistant") +- [dramamoose (@dramamoose)](https://github.com/dramamoose "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [DrewSK (@dzsquared)](https://github.com/dzsquared "8 total commits to the home-assistant organization, 8 commits to home-assistant.github.io") -- [DubhAd (@DubhAd)](https://github.com/DubhAd "107 total commits to the home-assistant organization, 107 commits to home-assistant.github.io") +- [DubhAd (@DubhAd)](https://github.com/DubhAd "122 total commits to the home-assistant organization, 122 commits to home-assistant.github.io") - [Duoxilian (@Duoxilian)](https://github.com/Duoxilian "11 total commits to the home-assistant organization, 6 commits to home-assistant.github.io, 5 commits to home-assistant") - [ebpetway (@ebpetway)](https://github.com/ebpetway "55 total commits to the home-assistant organization, 55 commits to warrant") - [Edwin Smulders (@Dutchy-)](https://github.com/Dutchy- "4 total commits to the home-assistant organization, 2 commits to home-assistant, 2 commits to home-assistant.github.io") @@ -278,7 +277,6 @@ This page contains a list of people who have contributed in one way or another t - [Eleftherios Chamakiotis (@lexam79)](https://github.com/lexam79 "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [Ellis Percival (@flyte)](https://github.com/flyte "31 total commits to the home-assistant organization, 25 commits to home-assistant, 6 commits to home-assistant.github.io") - [Emil Horpen Hetty (@emilhetty)](https://github.com/emilhetty "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") -- [emlt (@emlt)](https://github.com/emlt "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [endor-force (@endor-force)](https://github.com/endor-force "9 total commits to the home-assistant organization, 4 commits to hassio-addons, 4 commits to home-assistant.github.io, 1 commit to hassio-build") - [engrbm87 (@engrbm87)](https://github.com/engrbm87 "3 total commits to the home-assistant organization, 3 commits to appdaemon") - [Eric Hagan (@ehagan)](https://github.com/ehagan "4 total commits to the home-assistant organization, 3 commits to home-assistant, 1 commit to home-assistant-polymer") @@ -286,12 +284,13 @@ This page contains a list of people who have contributed in one way or another t - [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 "111 total commits to the home-assistant organization, 97 commits to home-assistant, 11 commits to home-assistant.github.io, 3 commits to netdisco") -- [Erik-jan Riemers (@riemers)](https://github.com/riemers "13 total commits to the home-assistant organization, 13 commits to home-assistant.github.io") +- [Erik-jan Riemers (@riemers)](https://github.com/riemers "14 total commits to the home-assistant organization, 13 commits to home-assistant.github.io, 1 commit to hassbian-scripts") - [ettisan (@ettisan)](https://github.com/ettisan "8 total commits to the home-assistant organization, 8 commits to home-assistant") - [Eugenio Panadero (@azogue)](https://github.com/azogue "76 total commits to the home-assistant organization, 45 commits to home-assistant, 25 commits to home-assistant.github.io, 3 commits to homebridge-homeassistant, 3 commits to home-assistant-polymer") - [Ezra Bowden (@bn0)](https://github.com/bn0 "2 total commits to the home-assistant organization, 2 commits to warrant") -- [Fabian Affolter (@fabaff)](https://github.com/fabaff "4452 total commits to the home-assistant organization, 2870 commits to home-assistant.github.io, 1483 commits to home-assistant, 32 commits to home-assistant-assets, 30 commits to home-assistant-notebooks, 11 commits to hassio-build, 10 commits to home-assistant-polymer, 8 commits to netdisco, 5 commits to hassio-addons, 2 commits to hassio, 1 commit to home-assistant-js-websocket") +- [Fabian Affolter (@fabaff)](https://github.com/fabaff "4510 total commits to the home-assistant organization, 2903 commits to home-assistant.github.io, 1507 commits to home-assistant, 32 commits to home-assistant-assets, 30 commits to home-assistant-notebooks, 11 commits to hassio-build, 11 commits to home-assistant-polymer, 8 commits to netdisco, 5 commits to hassio-addons, 2 commits to hassio, 1 commit to home-assistant-js-websocket") - [Fabian Heredia Montiel (@fabianhjr)](https://github.com/fabianhjr "4 total commits to the home-assistant organization, 4 commits to home-assistant") +- [Fabien Piuzzi (@reefab)](https://github.com/reefab "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") - [Fabrizio Furnari (@fabfurnari)](https://github.com/fabfurnari "5 total commits to the home-assistant organization, 3 commits to home-assistant.github.io, 2 commits to home-assistant") - [fakezeta (@fakezeta)](https://github.com/fakezeta "7 total commits to the home-assistant organization, 7 commits to home-assistant") - [Fares Rihani (@anchepiece)](https://github.com/anchepiece "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") @@ -304,14 +303,12 @@ This page contains a list of people who have contributed in one way or another t - [florianj1 (@florianj1)](https://github.com/florianj1 "1 total commits to the home-assistant organization, 1 commit to hassio") - [florincosta (@florincosta)](https://github.com/florincosta "6 total commits to the home-assistant organization, 3 commits to home-assistant, 3 commits to home-assistant.github.io") - [Fonta (@f0nt4)](https://github.com/f0nt4 "4 total commits to the home-assistant organization, 4 commits to home-assistant.github.io") -- [Franck Nijhof (@frenck)](https://github.com/frenck "17 total commits to the home-assistant organization, 13 commits to home-assistant.github.io, 2 commits to hassio, 2 commits to home-assistant-polymer") +- [Franck Nijhof (@frenck)](https://github.com/frenck "28 total commits to the home-assistant organization, 19 commits to home-assistant.github.io, 5 commits to hassio, 2 commits to home-assistant-polymer, 1 commit to appdaemon, 1 commit to hassio-cli") - [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 "7 total commits to the home-assistant organization, 3 commits to home-assistant, 2 commits to netdisco, 2 commits to home-assistant.github.io") +- [Frantz (@rofrantz)](https://github.com/rofrantz "14 total commits to the home-assistant organization, 7 commits to home-assistant, 4 commits to home-assistant.github.io, 3 commits to netdisco") - [Frederic Hemberger (@fhemberger)](https://github.com/fhemberger "93 total commits to the home-assistant organization, 93 commits to home-assistant.github.io") - [Fredrik Fjeld (@fredrikfjeld)](https://github.com/fredrikfjeld "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") -- [Fredrik Lindqvist (@Landrash)](https://github.com/Landrash "176 total commits to the home-assistant organization, 74 commits to hassbian-scripts, 70 commits to home-assistant.github.io, 27 commits to pi-gen, 4 commits to home-assistant, 1 commit to home-assistant-polymer") -- [freol35241 (@freol35241)](https://github.com/freol35241 "2 total commits to the home-assistant organization, 2 commits to home-assistant") -- [froz (@froz)](https://github.com/froz "2 total commits to the home-assistant organization, 2 commits to home-assistant") +- [Fredrik Lindqvist (@Landrash)](https://github.com/Landrash "177 total commits to the home-assistant organization, 75 commits to hassbian-scripts, 70 commits to home-assistant.github.io, 27 commits to pi-gen, 4 commits to home-assistant, 1 commit to home-assistant-polymer") - [fuga2136 (@fuga2136)](https://github.com/fuga2136 "13 total commits to the home-assistant organization, 13 commits to home-assistant.github.io") - [Gabor SZOLLOSI (@szogi)](https://github.com/szogi "3 total commits to the home-assistant organization, 2 commits to home-assistant, 1 commit to appdaemon") - [GadgetReactor (@GadgetReactor)](https://github.com/GadgetReactor "2 total commits to the home-assistant organization, 2 commits to home-assistant") @@ -321,13 +318,14 @@ This page contains a list of people who have contributed in one way or another t - [Georgi Kirichkov (@kirichkov)](https://github.com/kirichkov "17 total commits to the home-assistant organization, 11 commits to home-assistant.github.io, 5 commits to home-assistant, 1 commit to appdaemon") - [Georgi Yanev (@jumpalottahigh)](https://github.com/jumpalottahigh "6 total commits to the home-assistant organization, 4 commits to home-assistant.github.io, 2 commits to home-assistant-polymer") - [Georgii Staroselskii (@staroselskii)](https://github.com/staroselskii "1 total commits to the home-assistant organization, 1 commit to pi-gen") -- [gerard33 (@gerard33)](https://github.com/gerard33 "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") +- [Gerard (@gerard33)](https://github.com/gerard33 "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [Gergely Imreh (@imrehg)](https://github.com/imrehg "16 total commits to the home-assistant organization, 11 commits to home-assistant, 5 commits to home-assistant.github.io") - [Gianluca Barbaro (@MrMep)](https://github.com/MrMep "24 total commits to the home-assistant organization, 16 commits to home-assistant, 8 commits to home-assistant.github.io") - [Gianpaolo Macario (@gmacario)](https://github.com/gmacario "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [Giel Janssens (@gieljnssns)](https://github.com/gieljnssns "6 total commits to the home-assistant organization, 4 commits to home-assistant, 2 commits to home-assistant.github.io") - [githubbuh (@githubbuh)](https://github.com/githubbuh "5 total commits to the home-assistant organization, 5 commits to home-assistant.github.io") - [gitmopp (@gitmopp)](https://github.com/gitmopp "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") +- [Giuseppe (@glpatcern)](https://github.com/glpatcern "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [GMFalka (@GMFalka)](https://github.com/GMFalka "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [Gopal Kildoliya (@gopalkildoliya)](https://github.com/gopalkildoliya "6 total commits to the home-assistant organization, 4 commits to home-assistant, 2 commits to home-assistant.github.io") - [Graeme Smith (@Instagraeme)](https://github.com/Instagraeme "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") @@ -339,10 +337,10 @@ This page contains a list of people who have contributed in one way or another t - [Greg Stengel (@theCMack)](https://github.com/theCMack "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [Greg Stevenson (@gstevenson)](https://github.com/gstevenson "5 total commits to the home-assistant organization, 5 commits to home-assistant.github.io") - [Greg. A. (@gautric)](https://github.com/gautric "2 total commits to the home-assistant organization, 2 commits to home-assistant") -- [groth-its (@groth-its)](https://github.com/groth-its "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [GTH (@gunnarhelgason)](https://github.com/gunnarhelgason "2 total commits to the home-assistant organization, 2 commits to appdaemon") - [Guillaume Rischard (@grischard)](https://github.com/grischard "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") - [Gustav Ahlberg (@Gyran)](https://github.com/Gyran "20 total commits to the home-assistant organization, 20 commits to home-assistant") +- [Guyanthalas (@Guyanthalas)](https://github.com/Guyanthalas "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [gwendalg (@gwendalg)](https://github.com/gwendalg "3 total commits to the home-assistant organization, 3 commits to home-assistant") - [Hamid (@hamid-elaosta)](https://github.com/hamid-elaosta "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [Hao Hu (@howiehu)](https://github.com/howiehu "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") @@ -353,6 +351,7 @@ This page contains a list of people who have contributed in one way or another t - [hawk259 (@hawk259)](https://github.com/hawk259 "10 total commits to the home-assistant organization, 5 commits to home-assistant, 4 commits to home-assistant.github.io, 1 commit to home-assistant-polymer") - [Heath Paddock (@heathbar)](https://github.com/heathbar "6 total commits to the home-assistant organization, 6 commits to home-assistant") - [Heiko Rothe (@mKeRix)](https://github.com/mKeRix "20 total commits to the home-assistant organization, 15 commits to home-assistant, 5 commits to home-assistant.github.io") +- [Heiko Thiery (@hthiery)](https://github.com/hthiery "4 total commits to the home-assistant organization, 2 commits to home-assistant, 2 commits to home-assistant.github.io") - [Hellowlol (@Hellowlol)](https://github.com/Hellowlol "4 total commits to the home-assistant organization, 3 commits to netdisco, 1 commit to appdaemon") - [Helmut Januschka (@hjanuschka)](https://github.com/hjanuschka "3 total commits to the home-assistant organization, 3 commits to issue-bot") - [Henning Dickten (@hensing)](https://github.com/hensing "2 total commits to the home-assistant organization, 2 commits to home-assistant") @@ -372,18 +371,20 @@ This page contains a list of people who have contributed in one way or another t - [ianj001 (@ianj001)](https://github.com/ianj001 "7 total commits to the home-assistant organization, 7 commits to home-assistant.github.io") - [icovada (@icovada)](https://github.com/icovada "6 total commits to the home-assistant organization, 3 commits to home-assistant, 3 commits to home-assistant.github.io") - [Igor Shults (@ishults)](https://github.com/ishults "12 total commits to the home-assistant organization, 6 commits to home-assistant, 5 commits to home-assistant.github.io, 1 commit to home-assistant-polymer") -- [Ioan Loosley (@ioangogo)](https://github.com/ioangogo "7 total commits to the home-assistant organization, 7 commits to home-assistant.github.io") +- [Ioan Loosley (@ioangogo)](https://github.com/ioangogo "9 total commits to the home-assistant organization, 9 commits to home-assistant.github.io") - [IoTmessenger (@IoTmessenger)](https://github.com/IoTmessenger "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [Issac Kelly (@issackelly)](https://github.com/issackelly "3 total commits to the home-assistant organization, 3 commits to home-assistant") - [J-CMartin (@J-CMartin)](https://github.com/J-CMartin "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [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") +- [Jack Fan (@JackWindows)](https://github.com/JackWindows "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Jack Minardi (@jminardi)](https://github.com/jminardi "8 total commits to the home-assistant organization, 8 commits to home-assistant") - [Jacob Mansfield (@cyberjacob)](https://github.com/cyberjacob "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Jacob Minnis (@jminn)](https://github.com/jminn "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Jacob Siverskog (@jsiverskog)](https://github.com/jsiverskog "1 total commits to the home-assistant organization, 1 commit to pi-gen") - [Jacob Tomlinson (@jacobtomlinson)](https://github.com/jacobtomlinson "8 total commits to the home-assistant organization, 6 commits to home-assistant.github.io, 2 commits to home-assistant") +- [Jaimyn Mayer (@jabelone)](https://github.com/jabelone "1 total commits to the home-assistant organization, 1 commit to hassbian-scripts") - [Jake McCrary (@jakemcc)](https://github.com/jakemcc "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [Jakub Bittner (@rexcze)](https://github.com/rexcze "2 total commits to the home-assistant organization, 2 commits to home-assistant-polymer") - [James Cole (@jamespcole)](https://github.com/jamespcole "94 total commits to the home-assistant organization, 93 commits to home-assistant, 1 commit to home-assistant-js") @@ -410,6 +411,7 @@ This page contains a list of people who have contributed in one way or another t - [Jeff Wilson (@jawilson)](https://github.com/jawilson "24 total commits to the home-assistant organization, 19 commits to home-assistant, 5 commits to home-assistant.github.io") - [Jeffrey Lin (@linjef)](https://github.com/linjef "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Jens (@jhoepken)](https://github.com/jhoepken "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") +- [Jens Østergaard Nielsen (@dingusdk)](https://github.com/dingusdk "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [Jeremiah Wuenschel (@jer)](https://github.com/jer "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [Jeremy (@Wutname1)](https://github.com/Wutname1 "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [Jeremy Williams (@jwillaz)](https://github.com/jwillaz "5 total commits to the home-assistant organization, 5 commits to home-assistant.github.io") @@ -417,37 +419,34 @@ This page contains a list of people who have contributed in one way or another t - [Jeroen ter Heerdt (@jeroenterheerdt)](https://github.com/jeroenterheerdt "29 total commits to the home-assistant organization, 16 commits to home-assistant, 13 commits to home-assistant.github.io") - [Jerold Albertson (@jeroldalbertson-wf)](https://github.com/jeroldalbertson-wf "5 total commits to the home-assistant organization, 5 commits to home-assistant.github.io") - [Jerry Workman (@JerryWorkman)](https://github.com/JerryWorkman "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") -- [Jesse Hills (@jesserockz)](https://github.com/jesserockz "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") +- [Jesse Hills (@jesserockz)](https://github.com/jesserockz "5 total commits to the home-assistant organization, 3 commits to home-assistant, 2 commits to home-assistant.github.io") - [Jesse Newland (@jnewland)](https://github.com/jnewland "14 total commits to the home-assistant organization, 11 commits to home-assistant, 3 commits to hubot-home-assistant") - [JesseWebDotCom (@JesseWebDotCom)](https://github.com/JesseWebDotCom "16 total commits to the home-assistant organization, 8 commits to home-assistant, 8 commits to home-assistant.github.io") - [jgrieger1 (@jgrieger1)](https://github.com/jgrieger1 "1 total commits to the home-assistant organization, 1 commit to appdaemon") -- [jgriff2 (@jgriff2)](https://github.com/jgriff2 "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Jim Rollenhagen (@jimrollenhagen)](https://github.com/jimrollenhagen "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [jimbob1001 (@jimbob1001)](https://github.com/jimbob1001 "4 total commits to the home-assistant organization, 4 commits to home-assistant.github.io") - [Joakim Nohlgård (@gebart)](https://github.com/gebart "2 total commits to the home-assistant organization, 2 commits to libcoap") -- [Joakim Sørensen (@ludeeus)](https://github.com/ludeeus "28 total commits to the home-assistant organization, 15 commits to hassbian-scripts, 13 commits to home-assistant.github.io") +- [Joakim Sørensen (@ludeeus)](https://github.com/ludeeus "38 total commits to the home-assistant organization, 25 commits to hassbian-scripts, 13 commits to home-assistant.github.io") - [Job (@jmvermeulen)](https://github.com/jmvermeulen "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [jodur (@jodur)](https://github.com/jodur "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [Joe Lee (@xnoodle)](https://github.com/xnoodle "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") -- [Joe Lu (@snjoetw)](https://github.com/snjoetw "12 total commits to the home-assistant organization, 9 commits to home-assistant, 3 commits to home-assistant.github.io") -- [Joe McMonagle (@joemcmonagle)](https://github.com/joemcmonagle "12 total commits to the home-assistant organization, 12 commits to home-assistant.github.io") +- [Joe Lu (@snjoetw)](https://github.com/snjoetw "13 total commits to the home-assistant organization, 10 commits to home-assistant, 3 commits to home-assistant.github.io") +- [Joe McMonagle (@joemcmonagle)](https://github.com/joemcmonagle "13 total commits to the home-assistant organization, 13 commits to home-assistant.github.io") - [joe248 (@joe248)](https://github.com/joe248 "3 total commits to the home-assistant organization, 3 commits to home-assistant") - [Joeboyc2 (@Joeboyc2)](https://github.com/Joeboyc2 "15 total commits to the home-assistant organization, 15 commits to home-assistant.github.io") - [Johan Bloemberg (@aequitas)](https://github.com/aequitas "43 total commits to the home-assistant organization, 35 commits to home-assistant, 7 commits to home-assistant.github.io, 1 commit to netdisco") - [Johan Haals (@jhaals)](https://github.com/jhaals "3 total commits to the home-assistant organization, 2 commits to home-assistant.github.io, 1 commit to appdaemon") -- [Johan Klintberg (@moogblob)](https://github.com/moogblob "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [Johan van der Kuijl (@Rubyan)](https://github.com/Rubyan "4 total commits to the home-assistant organization, 3 commits to home-assistant.github.io, 1 commit to appdaemon") - [Johann Kellerman (@kellerza)](https://github.com/kellerza "144 total commits to the home-assistant organization, 114 commits to home-assistant, 30 commits to home-assistant.github.io") - [Johannes K. (@roadrash2108)](https://github.com/roadrash2108 "4 total commits to the home-assistant organization, 4 commits to home-assistant.github.io") - [John (@J-C-B)](https://github.com/J-C-B "5 total commits to the home-assistant organization, 5 commits to home-assistant.github.io") - [John Arild Berentsen (@turbokongen)](https://github.com/turbokongen "200 total commits to the home-assistant organization, 148 commits to home-assistant, 37 commits to home-assistant.github.io, 15 commits to home-assistant-polymer") -- [John Coggeshall (@coogle)](https://github.com/coogle "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [John Lindley (@jwl17330536)](https://github.com/jwl17330536 "1 total commits to the home-assistant organization, 1 commit to appdaemon") - [John McLaughlin (@loghound)](https://github.com/loghound "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [John Mihalic (@mezz64)](https://github.com/mezz64 "45 total commits to the home-assistant organization, 31 commits to home-assistant, 12 commits to home-assistant.github.io, 1 commit to hadashboard, 1 commit to home-assistant-polymer") -- [Johnny Chadda (@joch)](https://github.com/joch "3 total commits to the home-assistant organization, 2 commits to home-assistant.github.io, 1 commit to home-assistant-polymer") +- [Johnny Chadda (@joch)](https://github.com/joch "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") - [Jon (@JonMurphy)](https://github.com/JonMurphy "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") -- [Jon Caruana (@joncar)](https://github.com/joncar "5 total commits to the home-assistant organization, 3 commits to home-assistant, 2 commits to home-assistant.github.io") +- [Jon Caruana (@joncar)](https://github.com/joncar "3 total commits to the home-assistant organization, 3 commits to home-assistant") - [Jon Griffith (@arretx)](https://github.com/arretx "11 total commits to the home-assistant organization, 10 commits to home-assistant.github.io, 1 commit to appdaemon") - [Jon Maddox (@maddox)](https://github.com/maddox "102 total commits to the home-assistant organization, 78 commits to home-assistant, 16 commits to homebridge-homeassistant, 8 commits to home-assistant.github.io") - [Jonas Pedersen (@JonasPed)](https://github.com/JonasPed "1 total commits to the home-assistant organization, 1 commit to appdaemon") @@ -472,22 +471,18 @@ This page contains a list of people who have contributed in one way or another t - [jumpkick (@jumpkick)](https://github.com/jumpkick "15 total commits to the home-assistant organization, 12 commits to home-assistant, 3 commits to home-assistant.github.io") - [Justin Dray (@justin8)](https://github.com/justin8 "9 total commits to the home-assistant organization, 7 commits to home-assistant.github.io, 2 commits to home-assistant") - [Justin Hayes (@GussyH)](https://github.com/GussyH "7 total commits to the home-assistant organization, 7 commits to hadashboard") -- [Justin Weberg (@justweb1)](https://github.com/justweb1 "28 total commits to the home-assistant organization, 13 commits to home-assistant-polymer, 7 commits to hassbot, 4 commits to home-assistant, 2 commits to home-assistant.github.io, 1 commit to home-assistant-js, 1 commit to hassio") +- [Justin Weberg (@justweb1)](https://github.com/justweb1 "26 total commits to the home-assistant organization, 13 commits to home-assistant-polymer, 7 commits to hassbot, 4 commits to home-assistant, 1 commit to home-assistant-js, 1 commit to hassio") - [Justyn Shull (@justyns)](https://github.com/justyns "5 total commits to the home-assistant organization, 5 commits to home-assistant") -- [Jürgen W (@jurgenweber)](https://github.com/jurgenweber "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") -- [Kai (@luxus)](https://github.com/luxus "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") -- [Kane610 (@Kane610)](https://github.com/Kane610 "18 total commits to the home-assistant organization, 8 commits to home-assistant, 8 commits to home-assistant.github.io, 1 commit to netdisco, 1 commit to home-assistant-polymer") +- [Kane610 (@Kane610)](https://github.com/Kane610 "22 total commits to the home-assistant organization, 11 commits to home-assistant, 9 commits to home-assistant.github.io, 1 commit to netdisco, 1 commit to home-assistant-polymer") - [Karen Goode (@kfgoode)](https://github.com/kfgoode "4 total commits to the home-assistant organization, 4 commits to home-assistant") -- [karlkar (@karlkar)](https://github.com/karlkar "2 total commits to the home-assistant organization, 2 commits to home-assistant") +- [karlkar (@karlkar)](https://github.com/karlkar "5 total commits to the home-assistant organization, 5 commits to home-assistant") - [Keaton Taylor (@keatontaylor)](https://github.com/keatontaylor "7 total commits to the home-assistant organization, 4 commits to home-assistant, 3 commits to home-assistant.github.io") -- [Keith (@seedzero)](https://github.com/seedzero "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [Keith Lamprecht (@Nixon506E)](https://github.com/Nixon506E "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Ken Bannister (@kb2ma)](https://github.com/kb2ma "1 total commits to the home-assistant organization, 1 commit to libcoap") - [Ken Davidson (@kwdavidson)](https://github.com/kwdavidson "13 total commits to the home-assistant organization, 11 commits to home-assistant.github.io, 2 commits to appdaemon") +- [kennedyshead (@kennedyshead)](https://github.com/kennedyshead "3 total commits to the home-assistant organization, 3 commits to home-assistant") - [Kenny Millington (@kmdm)](https://github.com/kmdm "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Kevin (@Mister-Espria)](https://github.com/Mister-Espria "2 total commits to the home-assistant organization, 2 commits to home-assistant") -- [Kevin Christensen (@nivekmai)](https://github.com/nivekmai "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") -- [Kevin Delaney (@kevindelaney)](https://github.com/kevindelaney "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [Kevin Fronczak (@fronzbot)](https://github.com/fronzbot "19 total commits to the home-assistant organization, 11 commits to home-assistant, 8 commits to home-assistant.github.io") - [Kevin Gisi (@gisikw)](https://github.com/gisikw "5 total commits to the home-assistant organization, 5 commits to home-assistant.github.io") - [Kevin Gottsman (@gottsman)](https://github.com/gottsman "6 total commits to the home-assistant organization, 6 commits to home-assistant.github.io") @@ -520,8 +515,8 @@ This page contains a list of people who have contributed in one way or another t - [Ludovic (@ldvc)](https://github.com/ldvc "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") - [Ludovico de Nittis (@RyuzakiKK)](https://github.com/RyuzakiKK "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [Lukas (@lukas-hetzenecker)](https://github.com/lukas-hetzenecker "14 total commits to the home-assistant organization, 10 commits to home-assistant, 4 commits to home-assistant.github.io") -- [Lukas Barth (@tinloaf)](https://github.com/tinloaf "27 total commits to the home-assistant organization, 15 commits to home-assistant, 10 commits to home-assistant.github.io, 2 commits to home-assistant-polymer") -- [Lukas Ecklmayr (@outrun0506)](https://github.com/outrun0506 "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") +- [Lukas Barth (@tinloaf)](https://github.com/tinloaf "32 total commits to the home-assistant organization, 19 commits to home-assistant, 11 commits to home-assistant.github.io, 2 commits to home-assistant-polymer") +- [Lukas Ecklmayr (@outrun0506)](https://github.com/outrun0506 "6 total commits to the home-assistant organization, 5 commits to home-assistant.github.io, 1 commit to home-assistant-polymer") - [Lukas Porubcan (@Luc3as)](https://github.com/Luc3as "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") - [Luke Armstrong (@lukearmstrong)](https://github.com/lukearmstrong "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [LvivEchoes (@LvivEchoes)](https://github.com/LvivEchoes "8 total commits to the home-assistant organization, 4 commits to home-assistant, 3 commits to home-assistant.github.io, 1 commit to home-assistant-polymer") @@ -532,7 +527,7 @@ This page contains a list of people who have contributed in one way or another t - [Magnus Ihse Bursie (@magicus)](https://github.com/magicus "16 total commits to the home-assistant organization, 9 commits to home-assistant, 4 commits to netdisco, 3 commits to home-assistant.github.io") - [Magnus Lyckå (@magnus-lycka)](https://github.com/magnus-lycka "1 total commits to the home-assistant organization, 1 commit to netdisco") - [MagnusKnutas (@MagnusKnutas)](https://github.com/MagnusKnutas "29 total commits to the home-assistant organization, 29 commits to home-assistant") -- [Mahasri Kalavala (@skalavala)](https://github.com/skalavala "10 total commits to the home-assistant organization, 10 commits to home-assistant.github.io") +- [Mahasri Kalavala (@skalavala)](https://github.com/skalavala "14 total commits to the home-assistant organization, 14 commits to home-assistant.github.io") - [Maikel Wever (@maikelwever)](https://github.com/maikelwever "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Marc Egli (@frog32)](https://github.com/frog32 "7 total commits to the home-assistant organization, 7 commits to home-assistant") - [Marc Forth (@mf-social)](https://github.com/mf-social "13 total commits to the home-assistant organization, 12 commits to home-assistant.github.io, 1 commit to fabric-home-assistant") @@ -541,12 +536,14 @@ This page contains a list of people who have contributed in one way or another t - [Marcel030nl (@Marcel030nl)](https://github.com/Marcel030nl "5 total commits to the home-assistant organization, 5 commits to home-assistant.github.io") - [Marcelo Moreira de Mello (@tchellomello)](https://github.com/tchellomello "140 total commits to the home-assistant organization, 77 commits to home-assistant, 61 commits to home-assistant.github.io, 1 commit to home-assistant-assets, 1 commit to home-assistant-polymer") - [Marcin Jaworski (@yawor)](https://github.com/yawor "12 total commits to the home-assistant organization, 12 commits to appdaemon") +- [Marco (@marconett)](https://github.com/marconett "3 total commits to the home-assistant organization, 3 commits to appdaemon") - [Marcus Schmidt (@mar-schmidt)](https://github.com/mar-schmidt "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Marijn Giesen (@marijngiesen)](https://github.com/marijngiesen "5 total commits to the home-assistant organization, 5 commits to hadashboard") -- [Marius (@ciotlosm)](https://github.com/ciotlosm "6 total commits to the home-assistant organization, 4 commits to home-assistant-polymer, 2 commits to home-assistant") +- [Marius (@ciotlosm)](https://github.com/ciotlosm "8 total commits to the home-assistant organization, 5 commits to home-assistant-polymer, 3 commits to home-assistant") - [Mark Coombes (@marthoc)](https://github.com/marthoc "3 total commits to the home-assistant organization, 3 commits to home-assistant") - [Mark Grosen (@mgsb)](https://github.com/mgsb "1 total commits to the home-assistant organization, 1 commit to netdisco") - [Mark Huson (@mehuman)](https://github.com/mehuman "11 total commits to the home-assistant organization, 11 commits to home-assistant.github.io") +- [markferry (@markferry)](https://github.com/markferry "3 total commits to the home-assistant organization, 3 commits to home-assistant") - [Markus (@iMarkus)](https://github.com/iMarkus "3 total commits to the home-assistant organization, 2 commits to home-assistant, 1 commit to hassio") - [Markus Becker (@markushx)](https://github.com/markushx "6 total commits to the home-assistant organization, 6 commits to libcoap") - [Markus Peter (@bimbar)](https://github.com/bimbar "3 total commits to the home-assistant organization, 3 commits to home-assistant") @@ -555,6 +552,7 @@ This page contains a list of people who have contributed in one way or another t - [Martin Donlon (@wickerwaka)](https://github.com/wickerwaka "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Martin Eberhardt (@DarkFox)](https://github.com/DarkFox "4 total commits to the home-assistant organization, 4 commits to home-assistant.github.io") - [Martin Hjelmare (@MartinHjelmare)](https://github.com/MartinHjelmare "143 total commits to the home-assistant organization, 114 commits to home-assistant, 29 commits to home-assistant.github.io") +- [Martin Rowan (@shortbloke)](https://github.com/shortbloke "3 total commits to the home-assistant organization, 3 commits to home-assistant") - [Martin Vacula (@MatoKafkac)](https://github.com/MatoKafkac "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Martin Weinelt (@mweinelt)](https://github.com/mweinelt "17 total commits to the home-assistant organization, 9 commits to home-assistant, 7 commits to home-assistant.github.io, 1 commit to home-assistant-polymer") - [Martokk (@martokk)](https://github.com/martokk "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") @@ -569,6 +567,7 @@ This page contains a list of people who have contributed in one way or another t - [Matthew Garrett (@mjg59)](https://github.com/mjg59 "10 total commits to the home-assistant organization, 7 commits to home-assistant, 3 commits to home-assistant.github.io") - [Matthew Schick (@mattsch)](https://github.com/mattsch "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Matthew Treinish (@mtreinish)](https://github.com/mtreinish "20 total commits to the home-assistant organization, 13 commits to home-assistant, 7 commits to home-assistant.github.io") +- [Matthias Dötsch (@brainexe)](https://github.com/brainexe "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") - [mattie47 (@mattie47)](https://github.com/mattie47 "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [mauriciobonani (@mauriciobonani)](https://github.com/mauriciobonani "7 total commits to the home-assistant organization, 7 commits to home-assistant.github.io") - [Max Rumpf (@Maxr1998)](https://github.com/Maxr1998 "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") @@ -588,10 +587,9 @@ This page contains a list of people who have contributed in one way or another t - [Michael Prokop (@mika)](https://github.com/mika "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Michael Requeny (@requenym)](https://github.com/requenym "14 total commits to the home-assistant organization, 14 commits to home-assistant.github.io") - [Michael Shim (@shimeez)](https://github.com/shimeez "1 total commits to the home-assistant organization, 1 commit to fabric-home-assistant") -- [Michaël Arnauts (@michaelarnauts)](https://github.com/michaelarnauts "61 total commits to the home-assistant organization, 31 commits to home-assistant, 26 commits to home-assistant.github.io, 3 commits to home-assistant-polymer, 1 commit to netdisco") +- [Michaël Arnauts (@michaelarnauts)](https://github.com/michaelarnauts "62 total commits to the home-assistant organization, 32 commits to home-assistant, 26 commits to home-assistant.github.io, 3 commits to home-assistant-polymer, 1 commit to netdisco") - [Michel Settembrino (@Michel-Settembrino)](https://github.com/Michel-Settembrino "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [micw (@micw)](https://github.com/micw "8 total commits to the home-assistant organization, 5 commits to home-assistant, 3 commits to home-assistant.github.io") -- [Mikael Bergemalm (@bergemalm)](https://github.com/bergemalm "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Mike Christianson (@MikeChristianson)](https://github.com/MikeChristianson "6 total commits to the home-assistant organization, 6 commits to home-assistant") - [Mike Megally (@cmsimike)](https://github.com/cmsimike "7 total commits to the home-assistant organization, 7 commits to home-assistant") - [Mike Nestor (@mnestor)](https://github.com/mnestor "6 total commits to the home-assistant organization, 5 commits to home-assistant, 1 commit to home-assistant-polymer") @@ -610,25 +608,28 @@ This page contains a list of people who have contributed in one way or another t - [moose51789 (@moose51789)](https://github.com/moose51789 "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") - [moskovskiy82 (@moskovskiy82)](https://github.com/moskovskiy82 "6 total commits to the home-assistant organization, 6 commits to home-assistant.github.io") - [motir (@motir)](https://github.com/motir "1 total commits to the home-assistant organization, 1 commit to appdaemon") +- [mukundv (@mukundv)](https://github.com/mukundv "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [Mārtiņš Grunskis (@grunskis)](https://github.com/grunskis "1 total commits to the home-assistant organization, 1 commit to netdisco") - [Nate (@BillyNate)](https://github.com/BillyNate "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Nathan Flynn (@eperdeme)](https://github.com/eperdeme "1 total commits to the home-assistant organization, 1 commit to hassio-addons") -- [Nathan Henrie (@n8henrie)](https://github.com/n8henrie "19 total commits to the home-assistant organization, 9 commits to home-assistant, 6 commits to home-assistant.github.io, 2 commits to homebridge-homeassistant, 1 commit to home-assistant-polymer, 1 commit to appdaemon") +- [Nathan Henrie (@n8henrie)](https://github.com/n8henrie "19 total commits to the home-assistant organization, 9 commits to home-assistant, 6 commits to home-assistant.github.io, 2 commits to homebridge-homeassistant, 1 commit to appdaemon, 1 commit to home-assistant-polymer") - [Neil Lathwood (@laf)](https://github.com/laf "5 total commits to the home-assistant organization, 3 commits to home-assistant.github.io, 2 commits to home-assistant") - [Nelis Willers (@NelisW)](https://github.com/NelisW "1 total commits to the home-assistant organization, 1 commit to fabric-home-assistant") - [NeLLyMerC (@NeLLyMerC)](https://github.com/NeLLyMerC "5 total commits to the home-assistant organization, 5 commits to home-assistant.github.io") - [neonbunny (@neonbunny)](https://github.com/neonbunny "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") +- [Nicholas Amadori (@namadori)](https://github.com/namadori "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [Nicholas Griffin (@nicholasgriffintn)](https://github.com/nicholasgriffintn "6 total commits to the home-assistant organization, 6 commits to home-assistant.github.io") - [Nicholas Sielicki (@sielicki)](https://github.com/sielicki "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Nick (@quadportnick)](https://github.com/quadportnick "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Nick Touran (@partofthething)](https://github.com/partofthething "38 total commits to the home-assistant organization, 25 commits to home-assistant, 13 commits to home-assistant.github.io") - [Nick Waring (@nickwaring)](https://github.com/nickwaring "2 total commits to the home-assistant organization, 2 commits to home-assistant") +- [Nicko van Someren (@nickovs)](https://github.com/nickovs "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Nicolas Graziano (@ngraziano)](https://github.com/ngraziano "3 total commits to the home-assistant organization, 3 commits to home-assistant") - [Nicolas Martignoni (@martignoni)](https://github.com/martignoni "1 total commits to the home-assistant organization, 1 commit to pi-gen") - [Nigel Rook (@NigelRook)](https://github.com/NigelRook "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") - [Niklas (@niklaswa)](https://github.com/niklaswa "4 total commits to the home-assistant organization, 4 commits to home-assistant.github.io") - [Nikolas Beutler (@biacz)](https://github.com/biacz "2 total commits to the home-assistant organization, 2 commits to home-assistant") -- [Nolan Gilley (@nkgilley)](https://github.com/nkgilley "119 total commits to the home-assistant organization, 93 commits to home-assistant, 26 commits to home-assistant.github.io") +- [Nolan Gilley (@nkgilley)](https://github.com/nkgilley "122 total commits to the home-assistant organization, 95 commits to home-assistant, 27 commits to home-assistant.github.io") - [NotoriousBDG (@notoriousbdg)](https://github.com/notoriousbdg "3 total commits to the home-assistant organization, 3 commits to hassio-addons") - [NovapaX (@NovapaX)](https://github.com/NovapaX "9 total commits to the home-assistant organization, 4 commits to home-assistant-polymer, 4 commits to home-assistant, 1 commit to home-assistant-assets") - [ntalekt (@ntalekt)](https://github.com/ntalekt "6 total commits to the home-assistant organization, 6 commits to home-assistant.github.io") @@ -636,7 +637,7 @@ This page contains a list of people who have contributed in one way or another t - [obgm (@obgm)](https://github.com/obgm "480 total commits to the home-assistant organization, 480 commits to libcoap") - [OLD PROFILE! Go to /dennisreimann (@dbloete)](https://github.com/dbloete "5 total commits to the home-assistant organization, 5 commits to home-assistant.github.io") - [Ole-Kenneth (@olekenneth)](https://github.com/olekenneth "1 total commits to the home-assistant organization, 1 commit to homebridge-homeassistant") -- [Oleksii Serdiuk (@leppa)](https://github.com/leppa "3 total commits to the home-assistant organization, 3 commits to home-assistant") +- [Oleksii Serdiuk (@leppa)](https://github.com/leppa "4 total commits to the home-assistant organization, 4 commits to home-assistant") - [Oliv3rDog (@Oliv3rDog)](https://github.com/Oliv3rDog "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [Oliver (@scarface-4711)](https://github.com/scarface-4711 "24 total commits to the home-assistant organization, 14 commits to home-assistant, 9 commits to home-assistant.github.io, 1 commit to netdisco") - [Oliver van Porten (@mcdeck)](https://github.com/mcdeck "10 total commits to the home-assistant organization, 10 commits to home-assistant") @@ -646,11 +647,13 @@ This page contains a list of people who have contributed in one way or another t - [Parker Moore (@parkr)](https://github.com/parkr "60 total commits to the home-assistant organization, 60 commits to home-assistant.github.io") - [pascal (@passie)](https://github.com/passie "4 total commits to the home-assistant organization, 3 commits to home-assistant, 1 commit to home-assistant-polymer") - [Pascal Bach (@bachp)](https://github.com/bachp "10 total commits to the home-assistant organization, 9 commits to home-assistant, 1 commit to netdisco") -- [Pascal Vizeli (@pvizeli)](https://github.com/pvizeli "2335 total commits to the home-assistant organization, 917 commits to hassio, 446 commits to home-assistant, 323 commits to hassio-build, 315 commits to hassio-addons, 305 commits to home-assistant.github.io, 16 commits to hassio-addons-example, 10 commits to hassio-cli, 1 commit to netdisco, 1 commit to home-assistant-js-websocket, 1 commit to hassio-os") +- [Pascal Vizeli (@pvizeli)](https://github.com/pvizeli "2393 total commits to the home-assistant organization, 939 commits to hassio, 451 commits to home-assistant, 343 commits to hassio-build, 324 commits to hassio-addons, 307 commits to home-assistant.github.io, 16 commits to hassio-addons-example, 10 commits to hassio-cli, 1 commit to home-assistant-js-websocket, 1 commit to hassio-os, 1 commit to netdisco") - [Patrick Aikens (@duckpuppy)](https://github.com/duckpuppy "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [Patrick Easters (@patrickeasters)](https://github.com/patrickeasters "5 total commits to the home-assistant organization, 5 commits to home-assistant.github.io") - [Patrik (@ggravlingen)](https://github.com/ggravlingen "8 total commits to the home-assistant organization, 5 commits to home-assistant, 3 commits to home-assistant.github.io") +- [Paul Annekov (@PaulAnnekov)](https://github.com/PaulAnnekov "3 total commits to the home-assistant organization, 3 commits to home-assistant") - [Paul Hendry (@pshendry)](https://github.com/pshendry "1 total commits to the home-assistant organization, 1 commit to warrant") +- [Paul Nicholls (@pauln)](https://github.com/pauln "1 total commits to the home-assistant organization, 1 commit to netdisco") - [Paul Sokolovsky (@pfalcon)](https://github.com/pfalcon "6 total commits to the home-assistant organization, 3 commits to netdisco, 3 commits to home-assistant") - [Pavel Ponomarev (@awsum)](https://github.com/awsum "2 total commits to the home-assistant organization, 2 commits to home-assistant-polymer") - [PawelWMS (@PawelWMS)](https://github.com/PawelWMS "12 total commits to the home-assistant organization, 12 commits to libcoap") @@ -659,29 +662,34 @@ This page contains a list of people who have contributed in one way or another t - [Per Osbäck (@perosb)](https://github.com/perosb "12 total commits to the home-assistant organization, 12 commits to home-assistant") - [Per Sandström (@persandstrom)](https://github.com/persandstrom "124 total commits to the home-assistant organization, 98 commits to home-assistant, 14 commits to home-assistant.github.io, 12 commits to home-assistant-polymer") - [Pete Peterson (@petey)](https://github.com/petey "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") -- [PeteBa (@PeteBa)](https://github.com/PeteBa "6 total commits to the home-assistant organization, 5 commits to home-assistant, 1 commit to home-assistant-polymer") +- [PeteBa (@PeteBa)](https://github.com/PeteBa "7 total commits to the home-assistant organization, 5 commits to home-assistant, 2 commits to home-assistant-polymer") - [Peter Epley (@epleypa)](https://github.com/epleypa "6 total commits to the home-assistant organization, 6 commits to home-assistant.github.io") - [Petr Vraník (@konikvranik)](https://github.com/konikvranik "11 total commits to the home-assistant organization, 6 commits to home-assistant, 5 commits to home-assistant.github.io") - [pezinek (@pezinek)](https://github.com/pezinek "8 total commits to the home-assistant organization, 8 commits to home-assistant") - [Phil (@godloth)](https://github.com/godloth "10 total commits to the home-assistant organization, 10 commits to home-assistant.github.io") - [Phil Cole (@filcole)](https://github.com/filcole "8 total commits to the home-assistant organization, 5 commits to home-assistant.github.io, 3 commits to home-assistant") +- [Phil Frost (@bitglue)](https://github.com/bitglue "6 total commits to the home-assistant organization, 6 commits to home-assistant") - [Phil Haack (@Haacked)](https://github.com/Haacked "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [Phil Hawthorne (@philhawthorne)](https://github.com/philhawthorne "24 total commits to the home-assistant organization, 18 commits to home-assistant.github.io, 6 commits to home-assistant") -- [Phil Kates (@philk)](https://github.com/philk "5 total commits to the home-assistant organization, 5 commits to home-assistant") +- [Phil Kates (@philk)](https://github.com/philk "6 total commits to the home-assistant organization, 6 commits to home-assistant") - [Philip Hofstetter (@pilif)](https://github.com/pilif "6 total commits to the home-assistant organization, 6 commits to home-assistant.github.io") +- [Philip Kleimeyer (@philklei)](https://github.com/philklei "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Philip Lundrigan (@philipbl)](https://github.com/philipbl "65 total commits to the home-assistant organization, 56 commits to home-assistant, 9 commits to home-assistant.github.io") -- [Philipp Schmitt (@pschmitt)](https://github.com/pschmitt "37 total commits to the home-assistant organization, 24 commits to home-assistant, 11 commits to home-assistant.github.io, 1 commit to hassio-build, 1 commit to appdaemon") +- [Philipp Hellmich (@runningman84)](https://github.com/runningman84 "4 total commits to the home-assistant organization, 4 commits to home-assistant.github.io") +- [Philipp Schmitt (@pschmitt)](https://github.com/pschmitt "37 total commits to the home-assistant organization, 24 commits to home-assistant, 11 commits to home-assistant.github.io, 1 commit to appdaemon, 1 commit to hassio-build") - [Phill Price (@phillprice)](https://github.com/phillprice "11 total commits to the home-assistant organization, 11 commits to home-assistant.github.io") - [PhracturedBlue (@PhracturedBlue)](https://github.com/PhracturedBlue "25 total commits to the home-assistant organization, 15 commits to home-assistant, 9 commits to home-assistant.github.io, 1 commit to home-assistant-polymer") -- [Pierre Ståhl (@postlund)](https://github.com/postlund "45 total commits to the home-assistant organization, 30 commits to home-assistant, 9 commits to home-assistant.github.io, 4 commits to netdisco, 2 commits to home-assistant-polymer") +- [Pierre Ståhl (@postlund)](https://github.com/postlund "47 total commits to the home-assistant organization, 31 commits to home-assistant, 10 commits to home-assistant.github.io, 4 commits to netdisco, 2 commits to home-assistant-polymer") - [Piratonym (@Piratonym)](https://github.com/Piratonym "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [pkonnekermetametrics (@pkonnekermetametrics)](https://github.com/pkonnekermetametrics "5 total commits to the home-assistant organization, 5 commits to warrant") - [PuckStar (@PuckStar)](https://github.com/PuckStar "7 total commits to the home-assistant organization, 7 commits to home-assistant.github.io") -- [R Huish (@Genestealer)](https://github.com/Genestealer "20 total commits to the home-assistant organization, 20 commits to home-assistant.github.io") +- [R Huish (@Genestealer)](https://github.com/Genestealer "22 total commits to the home-assistant organization, 22 commits to home-assistant.github.io") +- [Raiford (@raiford)](https://github.com/raiford "1 total commits to the home-assistant organization, 1 commit to hassio-addons") - [Rasmus (@rasmusbe)](https://github.com/rasmusbe "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [rbflurry (@rbflurry)](https://github.com/rbflurry "16 total commits to the home-assistant organization, 13 commits to home-assistant.github.io, 3 commits to home-assistant") - [Reed Riley (@reedriley)](https://github.com/reedriley "2 total commits to the home-assistant organization, 2 commits to home-assistant") -- [Rendili (@Rendili)](https://github.com/Rendili "2 total commits to the home-assistant organization, 2 commits to home-assistant") +- [Rendili (@Rendili)](https://github.com/Rendili "3 total commits to the home-assistant organization, 3 commits to home-assistant") +- [Rene Nulsch (@ReneNulschDE)](https://github.com/ReneNulschDE "4 total commits to the home-assistant organization, 4 commits to home-assistant") - [Rene Tode (@ReneTode)](https://github.com/ReneTode "38 total commits to the home-assistant organization, 38 commits to appdaemon") - [René Kliment (@renekliment)](https://github.com/renekliment "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Reza Moallemi (@moallemi)](https://github.com/moallemi "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") @@ -693,7 +701,7 @@ This page contains a list of people who have contributed in one way or another t - [rkabadi (@rkabadi)](https://github.com/rkabadi "17 total commits to the home-assistant organization, 17 commits to home-assistant") - [Rob Capellini (@capellini)](https://github.com/capellini "3 total commits to the home-assistant organization, 3 commits to home-assistant") - [Rob Slifka (@rslifka)](https://github.com/rslifka "5 total commits to the home-assistant organization, 5 commits to home-assistant.github.io") -- [Robbie Trencheny (@robbiet480)](https://github.com/robbiet480 "1315 total commits to the home-assistant organization, 646 commits to home-assistant-iOS, 259 commits to home-assistant, 248 commits to home-assistant.github.io, 91 commits to homebridge-homeassistant, 15 commits to home-assistant-polymer, 9 commits to hubot-home-assistant, 8 commits to Analytics-Receiver, 6 commits to netdisco, 3 commits to hassbot, 3 commits to hadashboard, 3 commits to home-assistant-js-websocket, 3 commits to appdaemon, 3 commits to home-assistant-js, 3 commits to scenegen, 3 commits to organization, 2 commits to LabelBot, 2 commits to home-assistant-assets, 2 commits to fabric-home-assistant, 2 commits to home-assistant-notebooks, 2 commits to micropython-home-assistant, 2 commits to lambda-home-assistant-github") +- [Robbie Trencheny (@robbiet480)](https://github.com/robbiet480 "1315 total commits to the home-assistant organization, 646 commits to home-assistant-iOS, 259 commits to home-assistant, 248 commits to home-assistant.github.io, 91 commits to homebridge-homeassistant, 15 commits to home-assistant-polymer, 9 commits to hubot-home-assistant, 8 commits to Analytics-Receiver, 6 commits to netdisco, 3 commits to home-assistant-js, 3 commits to organization, 3 commits to hassbot, 3 commits to appdaemon, 3 commits to scenegen, 3 commits to home-assistant-js-websocket, 3 commits to hadashboard, 2 commits to LabelBot, 2 commits to fabric-home-assistant, 2 commits to micropython-home-assistant, 2 commits to home-assistant-notebooks, 2 commits to home-assistant-assets, 2 commits to lambda-home-assistant-github") - [Robby Grossman (@freerobby)](https://github.com/freerobby "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Robin (@robmarkcole)](https://github.com/robmarkcole "16 total commits to the home-assistant organization, 9 commits to home-assistant.github.io, 6 commits to home-assistant, 1 commit to home-assistant-assets") - [Robin Laurén (@llauren)](https://github.com/llauren "1 total commits to the home-assistant organization, 1 commit to appdaemon") @@ -706,14 +714,13 @@ This page contains a list of people who have contributed in one way or another t - [Ross Schulman (@rschulman)](https://github.com/rschulman "1 total commits to the home-assistant organization, 1 commit to pi-gen") - [rpitera (@rpitera)](https://github.com/rpitera "5 total commits to the home-assistant organization, 5 commits to home-assistant.github.io") - [rubund (@rubund)](https://github.com/rubund "4 total commits to the home-assistant organization, 4 commits to home-assistant") -- [runningman84 (@runningman84)](https://github.com/runningman84 "4 total commits to the home-assistant organization, 4 commits to home-assistant.github.io") - [Ruslan Kiyanchuk (@zoresvit)](https://github.com/zoresvit "1 total commits to the home-assistant organization, 1 commit to pi-gen") -- [Russell Cloran (@rcloran)](https://github.com/rcloran "19 total commits to the home-assistant organization, 15 commits to home-assistant, 4 commits to homebridge-homeassistant") +- [Russell Cloran (@rcloran)](https://github.com/rcloran "21 total commits to the home-assistant organization, 17 commits to home-assistant, 4 commits to homebridge-homeassistant") - [Ryan Bahm (@rdbahm)](https://github.com/rdbahm "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [Ryan Borstelmann (@SlothCroissant)](https://github.com/SlothCroissant "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [Ryan Daigle (@rwdaigle)](https://github.com/rwdaigle "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [Ryan Kraus (@rmkraus)](https://github.com/rmkraus "193 total commits to the home-assistant organization, 163 commits to home-assistant, 15 commits to home-assistant.github.io, 14 commits to home-assistant-polymer, 1 commit to home-assistant-notebooks") -- [Ryan McLean (@ryanm101)](https://github.com/ryanm101 "47 total commits to the home-assistant organization, 35 commits to hassio-cli, 7 commits to home-assistant, 5 commits to home-assistant.github.io") +- [Ryan McLean (@ryanm101)](https://github.com/ryanm101 "65 total commits to the home-assistant organization, 53 commits to hassio-cli, 7 commits to home-assistant, 5 commits to home-assistant.github.io") - [Ryan Turner (@turnrye)](https://github.com/turnrye "6 total commits to the home-assistant organization, 6 commits to home-assistant") - [Sabesto (@Sabesto)](https://github.com/Sabesto "3 total commits to the home-assistant organization, 3 commits to home-assistant") - [Sam Birch (@hotplot)](https://github.com/hotplot "2 total commits to the home-assistant organization, 2 commits to home-assistant") @@ -724,15 +731,15 @@ This page contains a list of people who have contributed in one way or another t - [Scott Griffin (@scottocs11)](https://github.com/scottocs11 "7 total commits to the home-assistant organization, 7 commits to home-assistant.github.io") - [Scott O'Neil (@americanwookie)](https://github.com/americanwookie "7 total commits to the home-assistant organization, 4 commits to home-assistant, 3 commits to home-assistant.github.io") - [Scott Reston (@ih8gates)](https://github.com/ih8gates "9 total commits to the home-assistant organization, 8 commits to home-assistant.github.io, 1 commit to home-assistant-polymer") -- [Sean Dague (@sdague)](https://github.com/sdague "64 total commits to the home-assistant organization, 44 commits to home-assistant, 11 commits to home-assistant.github.io, 5 commits to home-assistant-polymer, 3 commits to netdisco, 1 commit to home-assistant-js") +- [Sean Dague (@sdague)](https://github.com/sdague "72 total commits to the home-assistant organization, 49 commits to home-assistant, 14 commits to home-assistant.github.io, 5 commits to home-assistant-polymer, 3 commits to netdisco, 1 commit to home-assistant-js") - [Sean Gollschewsky (@gollo)](https://github.com/gollo "17 total commits to the home-assistant organization, 10 commits to home-assistant, 4 commits to home-assistant.github.io, 3 commits to hassio-build") - [Sean Wilson (@swilson)](https://github.com/swilson "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Sebastian (@sebk-666)](https://github.com/sebk-666 "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [Sebastian (@sgso)](https://github.com/sgso "3 total commits to the home-assistant organization, 3 commits to libcoap") -- [Sebastian Muszynski (@syssi)](https://github.com/syssi "42 total commits to the home-assistant organization, 21 commits to home-assistant, 19 commits to home-assistant.github.io, 2 commits to home-assistant-polymer") +- [Sebastian Muszynski (@syssi)](https://github.com/syssi "49 total commits to the home-assistant organization, 24 commits to home-assistant, 23 commits to home-assistant.github.io, 2 commits to home-assistant-polymer") - [Sebastian von Minckwitz (@teodoc)](https://github.com/teodoc "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") - [Semir Patel (@analogue)](https://github.com/analogue "2 total commits to the home-assistant organization, 2 commits to appdaemon") -- [Sergey Isachenko (@zabuldon)](https://github.com/zabuldon "6 total commits to the home-assistant organization, 6 commits to home-assistant") +- [Sergey Isachenko (@zabuldon)](https://github.com/zabuldon "7 total commits to the home-assistant organization, 7 commits to home-assistant") - [Sergey Vishnikin (@armicron)](https://github.com/armicron "33 total commits to the home-assistant organization, 33 commits to warrant") - [sfam (@sfam)](https://github.com/sfam "65 total commits to the home-assistant organization, 58 commits to home-assistant, 5 commits to home-assistant.github.io, 1 commit to netdisco, 1 commit to home-assistant-polymer") - [sharukins (@sharukins)](https://github.com/sharukins "3 total commits to the home-assistant organization, 3 commits to hassio-build") @@ -752,6 +759,7 @@ This page contains a list of people who have contributed in one way or another t - [Steven Looman (@StevenLooman)](https://github.com/StevenLooman "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Stu Gott (@stu-gott)](https://github.com/stu-gott "9 total commits to the home-assistant organization, 5 commits to home-assistant.github.io, 4 commits to home-assistant") - [Stuart Mumford (@Cadair)](https://github.com/Cadair "2 total commits to the home-assistant organization, 2 commits to home-assistant") +- [Stuart Williams (@stuwil)](https://github.com/stuwil "1 total commits to the home-assistant organization, 1 commit to netdisco") - [swanwila (@swanwila)](https://github.com/swanwila "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") - [System Tester (@systemtester)](https://github.com/systemtester "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [Sytone (@sytone)](https://github.com/sytone "9 total commits to the home-assistant organization, 6 commits to home-assistant.github.io, 2 commits to home-assistant, 1 commit to hassio-build") @@ -763,7 +771,7 @@ This page contains a list of people who have contributed in one way or another t - [tedstriker (@tedstriker)](https://github.com/tedstriker "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [Teemu Mikkonen (@T3m3z)](https://github.com/T3m3z "3 total commits to the home-assistant organization, 3 commits to home-assistant") - [Teemu Patja (@tpatja)](https://github.com/tpatja "2 total commits to the home-assistant organization, 2 commits to home-assistant") -- [Teemu R. (@rytilahti)](https://github.com/rytilahti "44 total commits to the home-assistant organization, 35 commits to home-assistant, 7 commits to home-assistant.github.io, 2 commits to netdisco") +- [Teemu R. (@rytilahti)](https://github.com/rytilahti "45 total commits to the home-assistant organization, 36 commits to home-assistant, 7 commits to home-assistant.github.io, 2 commits to netdisco") - [Teguh Sobirin (@tjstyle)](https://github.com/tjstyle "2 total commits to the home-assistant organization, 2 commits to pi-gen") - [Tentoe (@Tentoe)](https://github.com/Tentoe "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") - [Theb-1 (@Theb-1)](https://github.com/Theb-1 "5 total commits to the home-assistant organization, 5 commits to home-assistant") @@ -772,9 +780,9 @@ This page contains a list of people who have contributed in one way or another t - [Thiago Oliveira (@chilicheech)](https://github.com/chilicheech "3 total commits to the home-assistant organization, 3 commits to home-assistant") - [Thibault Cohen (@titilambert)](https://github.com/titilambert "41 total commits to the home-assistant organization, 28 commits to home-assistant, 13 commits to home-assistant.github.io") - [Thibault Maekelbergh (@thibmaek)](https://github.com/thibmaek "4 total commits to the home-assistant organization, 3 commits to home-assistant.github.io, 1 commit to hassio-addons") -- [Thijs de Jong (@bakedraccoon)](https://github.com/bakedraccoon "5 total commits to the home-assistant organization, 5 commits to home-assistant") +- [Thijs de Jong (@bakedraccoon)](https://github.com/bakedraccoon "8 total commits to the home-assistant organization, 8 commits to home-assistant") - [ThinkPadNL (@ThinkPadNL)](https://github.com/ThinkPadNL "4 total commits to the home-assistant organization, 4 commits to home-assistant.github.io") -- [Thom Troy (@ttroy50)](https://github.com/ttroy50 "11 total commits to the home-assistant organization, 7 commits to home-assistant.github.io, 4 commits to home-assistant") +- [Thom Troy (@ttroy50)](https://github.com/ttroy50 "12 total commits to the home-assistant organization, 7 commits to home-assistant.github.io, 5 commits to home-assistant") - [Thomas Friedel (@tfriedel)](https://github.com/tfriedel "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Thomas Petazzoni (@tpetazzoni)](https://github.com/tpetazzoni "1 total commits to the home-assistant organization, 1 commit to libcoap") - [Thomas Phillips (@thomas-phillips-nz)](https://github.com/thomas-phillips-nz "2 total commits to the home-assistant organization, 2 commits to pi-gen") @@ -807,7 +815,7 @@ This page contains a list of people who have contributed in one way or another t - [Trevor (@tboyce021)](https://github.com/tboyce021 "15 total commits to the home-assistant organization, 10 commits to home-assistant, 5 commits to home-assistant.github.io") - [Trey Hunner (@treyhunner)](https://github.com/treyhunner "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [trollkarlen (@trollkarlen)](https://github.com/trollkarlen "5 total commits to the home-assistant organization, 5 commits to home-assistant") -- [tschmidty69 (@tschmidty69)](https://github.com/tschmidty69 "6 total commits to the home-assistant organization, 6 commits to home-assistant") +- [tschmidty69 (@tschmidty69)](https://github.com/tschmidty69 "16 total commits to the home-assistant organization, 13 commits to home-assistant, 3 commits to home-assistant.github.io") - [Tsvi Mostovicz (@tsvi)](https://github.com/tsvi "9 total commits to the home-assistant organization, 5 commits to home-assistant.github.io, 4 commits to home-assistant") - [Tyler Page (@iamtpage)](https://github.com/iamtpage "5 total commits to the home-assistant organization, 3 commits to home-assistant.github.io, 2 commits to home-assistant") - [Tõnis Tobre (@tobre6)](https://github.com/tobre6 "1 total commits to the home-assistant organization, 1 commit to homebridge-homeassistant") @@ -817,8 +825,10 @@ This page contains a list of people who have contributed in one way or another t - [upsert (@upsert)](https://github.com/upsert "1 total commits to the home-assistant organization, 1 commit to netdisco") - [User5981 (@User5981)](https://github.com/User5981 "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") - [Valentin Alexeev (@valentinalexeev)](https://github.com/valentinalexeev "11 total commits to the home-assistant organization, 8 commits to home-assistant, 3 commits to home-assistant.github.io") +- [Victor Cerutti (@victorcerutti)](https://github.com/victorcerutti "2 total commits to the home-assistant organization, 2 commits to home-assistant-polymer") - [Viet Dzung (@dzungpv)](https://github.com/dzungpv "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") - [Vignesh Venkat (@vickyg3)](https://github.com/vickyg3 "9 total commits to the home-assistant organization, 5 commits to home-assistant, 4 commits to home-assistant.github.io") +- [Ville Skyttä (@scop)](https://github.com/scop "13 total commits to the home-assistant organization, 9 commits to home-assistant, 3 commits to netdisco, 1 commit to hassio-build") - [viswa-swami (@viswa-swami)](https://github.com/viswa-swami "9 total commits to the home-assistant organization, 9 commits to home-assistant") - [Vlad Korniev (@vkorn)](https://github.com/vkorn "3 total commits to the home-assistant organization, 2 commits to home-assistant, 1 commit to hassio-build") - [vllungu (@vllungu)](https://github.com/vllungu "3 total commits to the home-assistant organization, 3 commits to libcoap") @@ -831,11 +841,11 @@ This page contains a list of people who have contributed in one way or another t - [Will W. (@tiktok7)](https://github.com/tiktok7 "4 total commits to the home-assistant organization, 4 commits to home-assistant") - [Willems Davy (@joyrider3774)](https://github.com/joyrider3774 "7 total commits to the home-assistant organization, 4 commits to home-assistant.github.io, 3 commits to home-assistant") - [William Johansson (@radhus)](https://github.com/radhus "1 total commits to the home-assistant organization, 1 commit to hassio") -- [William Scanlon (@w1ll1am23)](https://github.com/w1ll1am23 "106 total commits to the home-assistant organization, 71 commits to home-assistant, 33 commits to home-assistant.github.io, 2 commits to netdisco") +- [William Scanlon (@w1ll1am23)](https://github.com/w1ll1am23 "110 total commits to the home-assistant organization, 75 commits to home-assistant, 33 commits to home-assistant.github.io, 2 commits to netdisco") - [williamlehman (@williamlehman)](https://github.com/williamlehman "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") - [wind-rider (@wind-rider)](https://github.com/wind-rider "5 total commits to the home-assistant organization, 5 commits to home-assistant") - [wokar (@wokar)](https://github.com/wokar "12 total commits to the home-assistant organization, 8 commits to home-assistant, 4 commits to home-assistant.github.io") -- [Wolf-Bastian Pöttner (@BastianPoe)](https://github.com/BastianPoe "6 total commits to the home-assistant organization, 3 commits to home-assistant, 3 commits to home-assistant.github.io") +- [Wolf-Bastian Pöttner (@BastianPoe)](https://github.com/BastianPoe "7 total commits to the home-assistant organization, 4 commits to home-assistant, 3 commits to home-assistant.github.io") - [Wolfgang Malgadey (@wmalgadey)](https://github.com/wmalgadey "4 total commits to the home-assistant organization, 4 commits to home-assistant") - [XECDesign (@XECDesign)](https://github.com/XECDesign "97 total commits to the home-assistant organization, 97 commits to pi-gen") - [Xorso (@Xorso)](https://github.com/Xorso "22 total commits to the home-assistant organization, 21 commits to home-assistant, 1 commit to hassio-addons") @@ -848,9 +858,9 @@ This page contains a list of people who have contributed in one way or another t - [Zhao Lu (@zlu)](https://github.com/zlu "4 total commits to the home-assistant organization, 4 commits to home-assistant.github.io") - [Zio Tibia (@ziotibia81)](https://github.com/ziotibia81 "14 total commits to the home-assistant organization, 7 commits to home-assistant, 7 commits to home-assistant.github.io") - [Zorks (@Zorks)](https://github.com/Zorks "5 total commits to the home-assistant organization, 5 commits to home-assistant.github.io") -- [Åskar Andersson (@olskar)](https://github.com/olskar "5 total commits to the home-assistant organization, 4 commits to home-assistant.github.io, 1 commit to hassbian-scripts") +- [Åskar Andersson (@olskar)](https://github.com/olskar "6 total commits to the home-assistant organization, 5 commits to home-assistant.github.io, 1 commit to hassbian-scripts") This page is irregularly updated using the [`credits_generator` tool](https://github.com/home-assistant/home-assistant.github.io/tree/next/credits_generator). If you think that you are missing, please let us know. -This page was last updated Saturday, January 13th 2018, 6:07:58 pm UTC. +This page was last updated Monday, January 29th 2018, 10:42:30 pm UTC. From 6132263e2ba7707d326ad279aa39dd5ad591ff96 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Mon, 29 Jan 2018 16:41:05 -0800 Subject: [PATCH 238/993] Release 0.62.1 --- _config.yml | 6 ++-- source/_posts/2018-01-27-release-62.markdown | 33 +++++++++++++++++++- 2 files changed, 35 insertions(+), 4 deletions(-) diff --git a/_config.yml b/_config.yml index 732f3e5477..25bc8745bc 100644 --- a/_config.yml +++ b/_config.yml @@ -140,13 +140,13 @@ social: # Home Assistant release details current_major_version: 0 current_minor_version: 62 -current_patch_version: 0 -date_released: 2018-01-27 +current_patch_version: 1 +date_released: 2018-01-30 # Either # or the anchor link to latest release notes in the blog post. # Must be prefixed with a # and have double quotes around it. # Major release: -patch_version_notes: "#" +patch_version_notes: "#release-0621---january-30" # Minor release (Example #release-0431---april-25): # Date we moved to Discourse for comments diff --git a/source/_posts/2018-01-27-release-62.markdown b/source/_posts/2018-01-27-release-62.markdown index 95815a3104..8bb54a09f0 100644 --- a/source/_posts/2018-01-27-release-62.markdown +++ b/source/_posts/2018-01-27-release-62.markdown @@ -29,6 +29,16 @@ With this new integration by [@sdague] you are able to keep an eye on your Chevy - Ihc component and platforms ([@dingusdk] - [#10916]) ([ihc docs]) ([binary_sensor.ihc docs]) ([light.ihc docs]) ([sensor.ihc docs]) ([switch.ihc docs]) (new-platform) - Iota wallet ([@jinnerbichler] - [#11398]) ([iota docs]) ([sensor.iota docs]) (new-platform) +## {% linkable_title Release 0.62.1 - January 30 %} + +- Snips - (fix/change) remove response when intent not handled ([@tschmidty69] - [#11929]) ([snips docs]) +- Fix asuswrt AttributeError on neigh for unknown device ([@scop] - [#11960]) ([device_tracker.asuswrt docs]) +- Set default values for Daikin devices that don't support fan direction and fan speed features ([@rofrantz] - [#12000]) ([climate.daikin docs]) +- Fix parameter escaping ([@smoldaner] - [#12008]) ([media_player.squeezebox docs]) +- Error handling, in case no connections are available ([@ReneNulschDE] - [#12010]) ([sensor.deutsche_bahn docs]) +- Fix 404 for Hass.io panel using frontend dev ([@c727] - [#12039]) ([frontend docs]) +- Upgrade pyharmony to 1.0.20 ([@amelchio] - [#12043]) ([remote.harmony docs]) + ## {% linkable_title If you need help... %} ...don't hesitate to use our very active [forums](https://community.home-assistant.io/) or join us for a little [chat](https://discord.gg/c5DvZ4e). The release notes have comments enabled but it's preferred if you use the former communication channels. Thanks. @@ -477,4 +487,25 @@ Experiencing issues introduced by this release? Please report them in our [issue [xiaomi_aqara docs]: https://home-assistant.io/components/xiaomi_aqara/ [zwave docs]: https://home-assistant.io/components/zwave/ [@martinhjelmare]: https://github.com/martinhjelmare -[@frenck]: https://github.com/frenck \ No newline at end of file +[@frenck]: https://github.com/frenck +[#11929]: https://github.com/home-assistant/home-assistant/pull/11929 +[#11960]: https://github.com/home-assistant/home-assistant/pull/11960 +[#12000]: https://github.com/home-assistant/home-assistant/pull/12000 +[#12008]: https://github.com/home-assistant/home-assistant/pull/12008 +[#12010]: https://github.com/home-assistant/home-assistant/pull/12010 +[#12039]: https://github.com/home-assistant/home-assistant/pull/12039 +[#12043]: https://github.com/home-assistant/home-assistant/pull/12043 +[@ReneNulschDE]: https://github.com/ReneNulschDE +[@amelchio]: https://github.com/amelchio +[@c727]: https://github.com/c727 +[@rofrantz]: https://github.com/rofrantz +[@scop]: https://github.com/scop +[@smoldaner]: https://github.com/smoldaner +[@tschmidty69]: https://github.com/tschmidty69 +[climate.daikin docs]: https://home-assistant.io/components/climate.daikin/ +[device_tracker.asuswrt docs]: https://home-assistant.io/components/device_tracker.asuswrt/ +[frontend docs]: https://home-assistant.io/components/frontend/ +[media_player.squeezebox docs]: https://home-assistant.io/components/media_player.squeezebox/ +[remote.harmony docs]: https://home-assistant.io/components/remote.harmony/ +[sensor.deutsche_bahn docs]: https://home-assistant.io/components/sensor.deutsche_bahn/ +[snips docs]: https://home-assistant.io/components/snips/ From 6c9bacf74052e34bc910274f43033dcce6ac30cd Mon Sep 17 00:00:00 2001 From: David De Sloovere Date: Tue, 30 Jan 2018 08:06:53 +0100 Subject: [PATCH 239/993] Change domain Use an official IANA example domain: example.com - which nobody owns (except IANA) --- source/_components/notify.html5.markdown | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/_components/notify.html5.markdown b/source/_components/notify.html5.markdown index f53d7dc74a..e43d99aa34 100644 --- a/source/_components/notify.html5.markdown +++ b/source/_components/notify.html5.markdown @@ -43,12 +43,12 @@ Configuration variables: #### {% linkable_title Verify your domain %} Follow these steps to verify domain ownership with Google Webmaster Central / Search Console: -1. Enter your domain and add **'/local'** at the end, ie. https://whitehouse.duckdns.org:8123/local +1. Enter your domain and add **'/local'** at the end, ie. https://example.com:8123/local 2. Select HTML file verification and download the google*.html file. 2. Create a directory named "www" in your Home Assistant configuration directory (/config share from Samba add-on). 3. Place the downloaded google*.html file in the "www" directory. 4. RESTART Home Assistant - this is important! -5. Verify the file can be accessed in the browser, ie. **https://whitehouse.duckdns.org:8123/local/goole123456789.html** (change filename) - you should a plain text message saying "google-site-verification: ..." - if you see "404: Not Found" or something else, retry the above steps. +5. Verify the file can be accessed in the browser, ie. **https://example.com:8123/local/goole123456789.html** (change filename) - you should a plain text message saying "google-site-verification: ..." - if you see "404: Not Found" or something else, retry the above steps. 6. Go back to Google Webmaster Central / Search Console and proceed with the verification. ### {% linkable_title Requirements %} From 1c4f1dc13d031e9e10bb1df0b928b8a67d97af0f Mon Sep 17 00:00:00 2001 From: David De Sloovere Date: Tue, 30 Jan 2018 08:07:23 +0100 Subject: [PATCH 240/993] fix typo --- 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 e43d99aa34..5081ff2013 100644 --- a/source/_components/notify.html5.markdown +++ b/source/_components/notify.html5.markdown @@ -48,7 +48,7 @@ Follow these steps to verify domain ownership with Google Webmaster Central / Se 2. Create a directory named "www" in your Home Assistant configuration directory (/config share from Samba add-on). 3. Place the downloaded google*.html file in the "www" directory. 4. RESTART Home Assistant - this is important! -5. Verify the file can be accessed in the browser, ie. **https://example.com:8123/local/goole123456789.html** (change filename) - you should a plain text message saying "google-site-verification: ..." - if you see "404: Not Found" or something else, retry the above steps. +5. Verify the file can be accessed in the browser, ie. **https://example.com:8123/local/google123456789.html** (change filename) - you should a plain text message saying "google-site-verification: ..." - if you see "404: Not Found" or something else, retry the above steps. 6. Go back to Google Webmaster Central / Search Console and proceed with the verification. ### {% linkable_title Requirements %} From 5b6c51c1548d9f5647c0427396a05d05d76c6788 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Wed, 31 Jan 2018 09:43:05 +0100 Subject: [PATCH 241/993] Move all scripts to one location as one page per script (#4554) --- source/_components/influxdb.markdown | 116 +------------------ source/_docs/configuration/secrets.markdown | 58 +--------- source/_docs/tools/benchmark.markdown | 20 ++++ source/_docs/tools/check_config.markdown | 18 +++ source/_docs/tools/credstash.markdown | 33 ++++++ source/_docs/tools/db_migrator.markdown | 72 ++++++++++++ source/_docs/tools/ensure_config.markdown | 18 +++ source/_docs/tools/influxdb_import.markdown | 64 ++++++++++ source/_docs/tools/keyring.markdown | 42 +++++++ source/_docs/tools/scripts.markdown | 42 +------ source/_includes/asides/docs_navigation.html | 8 +- 11 files changed, 282 insertions(+), 209 deletions(-) create mode 100644 source/_docs/tools/benchmark.markdown create mode 100644 source/_docs/tools/check_config.markdown create mode 100644 source/_docs/tools/credstash.markdown create mode 100644 source/_docs/tools/db_migrator.markdown create mode 100644 source/_docs/tools/ensure_config.markdown create mode 100644 source/_docs/tools/influxdb_import.markdown create mode 100644 source/_docs/tools/keyring.markdown diff --git a/source/_components/influxdb.markdown b/source/_components/influxdb.markdown index f2291bda29..4252068c03 100644 --- a/source/_components/influxdb.markdown +++ b/source/_components/influxdb.markdown @@ -49,123 +49,13 @@ Configuration variables: - **tags** (*Optional*): Tags to mark the data. - **tags_attributes** (*Optional*): The list of attribute names which should be reported as tags and not fields to InfluxDB. For example, if set to `friendly_name`, it will be possible to group by entities' friendly names as well, in addition to their ids. -## {% linkable_title Data migration %} +## {% linkable_title Helper scripts %} -Starting with 0.36 the InfluxDB component has a new schema to store values in the InfluxDB databases. - -- There will no longer be any tags/fields named `time`. -- All numeric fields (int/float/bool) will be stored as float inside InfluxDB database. -- All string fields corresponding to state attributes will be renamed as `FIELDNAME_str`, where `FIELDNAME` is the state attribute, to avoid type conflicts. -- All string fields corresponding to a state will be renamed as `state` (former value). -- Fields named `value` will always be stored as float. -- Fields named `state` will always be stored as string. - -### {% linkable_title Migration script %} - -If you need to migrate your database, you may require to run the `influxdb_migrator` script. Run the script after upgrade to 0.36 but before the first regular start of `hass` version 0.36. - -These are the steps the script will perform: -1. Create a new database (called `DBNAME__old`) to store old data. -2. Copy data from `DBNAME` database to `DBNAME__old` database. -3. Empty `DBNAME` database (using `drop` then `create`). `DBNAME` database is now considered as the new database. -4. For each measurement of `DBNAME__old` database: - 1. Read all points from the current measurement (in groups of 1000 points by default) and convert them. - 2. Send group of points to `DBNAME` database. -5. Delete the `DBNAME__old` database if needed. - -Example to run the script: - -```bash -$ hass --script influxdb_migrator \ - -H IP_INFLUXDB_HOST -u INFLUXDB_USERNAME -p INFLUXDB_PASSWORD \ - -d INFLUXDB_DB_NAME -``` -Script arguments: - -``` -required arguments: - -d dbname, --dbname dbname InfluxDB database name - -optional arguments: - -h, --help show this help message and exit - -H host, --host host InfluxDB host address - -P port, --port port InfluxDB host port - -u username, --username username - InfluxDB username - -p password, --password password - InfluxDB password - -s step, --step step How many points to migrate at the same time - -o override_measurement, --override-measurement override_measurement - Store all your points in the same measurement - -D, --delete Delete old database -``` - -- If you run the script with only the `-h` option, you will get a help printout with a short explanation of the different options. -- The host option defaults to `'127.0.0.1'`. -- The port option defaults to `8086`. -- You should be able to omit username and password if InfluxDB authentication is disabled, which it is by default. -- The step option defaults to `1000`. - - -## {% linkable_title Data import script %} - -If you want to import all the recorded data from your recorder database you can use the data import script. -It will read all your state_change events from the database and add them as data-points to the InfluxDB. -You can specify the source database either by pointing the `--config` option to the config directory which includes the default SQLite database or by giving a sqlalchemy connection URI with `--uri`. -The writing to InfluxDB is done in batches that can be changed with `--step`. - -You can control, which data is imported by using the command line options `--exclude_entities` and `--exclude_domains`. -Both get a comma separated list of either entity-ids or domain names that are excluded from the import. - -To test what gets imported you can use the `--simulate` option, which disables the actual write to the InfluxDB instance. -This only writes the statistics how much points would be imported from which entity. - -Example to run the script: - -```bash -$ hass --script influxdb_import --config CONFIG_DIR \ - -H IP_INFLUXDB_HOST -u INFLUXDB_USERNAME -p INFLUXDB_PASSWORD \ - --dbname INFLUXDB_DB_NAME --exclude_domains automation,configurator -``` -Script arguments: - -``` -required arguments: - -d dbname, --dbname dbname - InfluxDB database name - -optional arguments: - -h, --help show this help message and exit - -c path_to_config_dir, --config path_to_config_dir - Directory that contains the Home Assistant - configuration - --uri URI Connect to URI and import (if other than default - sqlite) eg: mysql://localhost/homeassistant - - -H host, --host host InfluxDB host address - -P port, --port port InfluxDB host port - -u username, --username username - InfluxDB username - -p password, --password password - InfluxDB password - -s step, --step step How many points to import at the same time - -t tags, --tags tags Comma separated list of tags (key:value) for all - points - -D default_measurement, --default-measurement default_measurement - Store all your points in the same measurement - -o override_measurement, --override-measurement override_measurement - Store all your points in the same measurement - -e exclude_entities, --exclude_entities exclude_entities - Comma separated list of excluded entities - -E exclude_domains, --exclude_domains exclude_domains - Comma separated list of excluded domains - -S, --simulate Do not write points but simulate preprocessing - and print statistics -``` +- [Helper script `influxdb_import`](/docs/tools/influxdb_import/) +- [Helper script `db_migrator`](/docs/tools/db_migrator/) (only used for [Home Assistant 0.36](/blog/2017/01/14/iss-usps-images-packages/#influxdb-export)) ## {% linkable_title Examples %} - ### {% linkable_title Full configuration %} ```yaml diff --git a/source/_docs/configuration/secrets.markdown b/source/_docs/configuration/secrets.markdown index 523bba9c4c..906c40f536 100644 --- a/source/_docs/configuration/secrets.markdown +++ b/source/_docs/configuration/secrets.markdown @@ -53,65 +53,15 @@ logger: debug ``` This will not print the actual secret's value to the log. -*Option 2*: View where secrets are retrieved from and the contents of all `secrets.yaml` files used, you can use the `check_config` script from the command line: +*Option 2*: View where secrets are retrieved from and the contents of all `secrets.yaml` files used, you can use the [`check_config` script](/docs/tools/check_config/) from the command line: ```bash $ hass --script check_config --secrets ``` This will print all your secrets. -### {% linkable_title Storing passwords in a keyring managed by your OS %} +## {% linkable_title Alternatives to `secrets.yaml` %} -Using [Keyring](https://github.com/jaraco/keyring) is an alternative way to `secrets.yaml`. They can be managed from the command line via the `keyring` script. +- [Using a keyring that is managed by your OS to store secrets](/docs/tools/keyring/) +- [Storing passwords securely in AWS](/docs/tools/credstash/) -```bash -$ hass --script keyring --help -``` - -To store a password in keyring, replace your password or API key with `!secret` and an identifier in `configuration.yaml` file. - -```yaml -http: - api_password: !secret http_password -``` - -Create an entry in your keyring. - -```bash -$ hass --script keyring set http_password -``` - -If you launch Home Assistant now, you will be prompted for the keyring password to unlock your keyring. - -```bash -$ hass -Config directory: /home/homeassistant/.homeassistant -Please enter password for encrypted keyring: -``` - -

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

- -### {% linkable_title Storing passwords securely in AWS %} - -Using [Credstash](https://github.com/fugue/credstash) is an alternative way to `secrets.yaml`. They can be managed from the command line via the credstash script. - -Before using credstash, you need to set up AWS credentials either via the `aws` command line tool or using environment variables as explained in the [AWS CLI docs](http://docs.aws.amazon.com/cli/latest/userguide/cli-chap-getting-started.html) as well as creating a KMS key named `credstash` as explained in the [credstash Readme](https://github.com/fugue/credstash#setting-up-kms). After that is complete, you can use the provided script to add secrets to your Home Assistant secret store in credstash. - -```bash -$ hass --script credstash --help -``` - -To store a password in credstash, replace your password or API key with `!secret` and an identifier in `configuration.yaml` file. - -```yaml -http: - api_password: !secret http_password -``` - -Create an entry in your credstash store. - -```bash -$ hass --script credstash set http_password -``` diff --git a/source/_docs/tools/benchmark.markdown b/source/_docs/tools/benchmark.markdown new file mode 100644 index 0000000000..c95894489e --- /dev/null +++ b/source/_docs/tools/benchmark.markdown @@ -0,0 +1,20 @@ +--- +layout: page +title: "benchmark" +description: "Script to perform benchmarking of Home Assistant" +release_date: 2017-02-23 11:00:00 +sidebar: true +comments: false +sharing: true +footer: true +redirect_from: /docs/tools/scripts/#benchmark +--- + +For testing the performance of Home Assistant the Benchmark script runs until you exit using Control+C. + +Firing and handling of a million events. + +```bash +$ hass --script benchmark async_million_events +``` + diff --git a/source/_docs/tools/check_config.markdown b/source/_docs/tools/check_config.markdown new file mode 100644 index 0000000000..f3a926783e --- /dev/null +++ b/source/_docs/tools/check_config.markdown @@ -0,0 +1,18 @@ +--- +layout: page +title: "check_config" +description: "Script to perform a check of the current configuration" +release_date: 2017-02-23 11:00:00 +sidebar: true +comments: false +sharing: true +footer: true +redirect_from: /docs/tools/scripts/#configuration-check +--- + +Test any changes to your `configuration.yaml` file before launching Home Assistant. This script allows you to test changes without the need to restart Home Assistant. + +```bash +$ hass --script check_config +``` + diff --git a/source/_docs/tools/credstash.markdown b/source/_docs/tools/credstash.markdown new file mode 100644 index 0000000000..0d419a104f --- /dev/null +++ b/source/_docs/tools/credstash.markdown @@ -0,0 +1,33 @@ +--- +layout: page +title: "credstash" +description: "Script to store credentials securely in AWS" +release_date: 2017-02-23 11:00:00 +sidebar: true +comments: false +sharing: true +footer: true +redirect_from: /docs/configuration/secrets/#storing-passwords-securely-in-aws +--- + +Using [Credstash](https://github.com/fugue/credstash) is an alternative way to `secrets.yaml`. They can be managed from the command line via the credstash script. + +Before using credstash, you need to set up AWS credentials either via the `aws` command line tool or using environment variables as explained in the [AWS CLI docs](http://docs.aws.amazon.com/cli/latest/userguide/cli-chap-getting-started.html) as well as creating a KMS key named `credstash` as explained in the [credstash Readme](https://github.com/fugue/credstash#setting-up-kms). After that is complete, you can use the provided script to add secrets to your Home Assistant secret store in credstash. + +```bash +$ hass --script credstash --help +``` + +To store a password in credstash, replace your password or API key with `!secret` and an identifier in `configuration.yaml` file. + +```yaml +http: + api_password: !secret http_password +``` + +Create an entry in your credstash store. + +```bash +$ hass --script credstash set http_password +``` + diff --git a/source/_docs/tools/db_migrator.markdown b/source/_docs/tools/db_migrator.markdown new file mode 100644 index 0000000000..bdce8d1ab0 --- /dev/null +++ b/source/_docs/tools/db_migrator.markdown @@ -0,0 +1,72 @@ +--- +layout: page +title: "db_migrator" +description: "Script to migrate data in an InfluxDB database" +release_date: 2017-02-23 11:00:00 +sidebar: true +comments: false +sharing: true +footer: true +redirect_from: /components/influxdb/#data-migration +--- + +

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

+ +Starting with 0.36 the [InfluxDB](omponents/influxdb/) component has a new schema to store values in the InfluxDB databases. + +- There will no longer be any tags/fields named `time`. +- All numeric fields (int/float/bool) will be stored as float inside InfluxDB database. +- All string fields corresponding to state attributes will be renamed as `FIELDNAME_str`, where `FIELDNAME` is the state attribute, to avoid type conflicts. +- All string fields corresponding to a state will be renamed as `state` (former value). +- Fields named `value` will always be stored as float. +- Fields named `state` will always be stored as string. + +## {% linkable_title Migration script %} + +If you need to migrate your database, you may require to run the `influxdb_migrator` script. Run the script after upgrade to 0.36 but before the first regular start of `hass` version 0.36. + +These are the steps the script will perform: + +1. Create a new database (called `DBNAME__old`) to store old data. +2. Copy data from `DBNAME` database to `DBNAME__old` database. +3. Empty `DBNAME` database (using `drop` then `create`). `DBNAME` database is now considered as the new database. +4. For each measurement of `DBNAME__old` database: + 1. Read all points from the current measurement (in groups of 1000 points by default) and convert them. + 2. Send group of points to `DBNAME` database. +5. Delete the `DBNAME__old` database if needed. + +Example to run the script: + +```bash +$ hass --script influxdb_migrator \ + -H IP_INFLUXDB_HOST -u INFLUXDB_USERNAME -p INFLUXDB_PASSWORD \ + -d INFLUXDB_DB_NAME +``` +Script arguments: + +``` +required arguments: + -d dbname, --dbname dbname InfluxDB database name + +optional arguments: + -h, --help show this help message and exit + -H host, --host host InfluxDB host address + -P port, --port port InfluxDB host port + -u username, --username username + InfluxDB username + -p password, --password password + InfluxDB password + -s step, --step step How many points to migrate at the same time + -o override_measurement, --override-measurement override_measurement + Store all your points in the same measurement + -D, --delete Delete old database +``` + +- If you run the script with only the `-h` option, you will get a help printout with a short explanation of the different options. +- The host option defaults to `'127.0.0.1'`. +- The port option defaults to `8086`. +- You should be able to omit username and password if InfluxDB authentication is disabled, which it is by default. +- The step option defaults to `1000`. + diff --git a/source/_docs/tools/ensure_config.markdown b/source/_docs/tools/ensure_config.markdown new file mode 100644 index 0000000000..c953939856 --- /dev/null +++ b/source/_docs/tools/ensure_config.markdown @@ -0,0 +1,18 @@ +--- +layout: page +title: "ensure_config" +description: "Script to perform a check if the configuration file exists" +release_date: 2017-02-23 11:00:00 +sidebar: true +comments: false +sharing: true +footer: true +redirect_from: /docs/tools/scripts/#existence-of-configuration +--- + +This script checks if the `configuration.yaml` file exists. If the file is not available, one is created. + +```bash +$ hass --script ensure_config +``` + diff --git a/source/_docs/tools/influxdb_import.markdown b/source/_docs/tools/influxdb_import.markdown new file mode 100644 index 0000000000..b8bea1046c --- /dev/null +++ b/source/_docs/tools/influxdb_import.markdown @@ -0,0 +1,64 @@ +--- +layout: page +title: "influxdb_import" +description: "Script to import data into an InfluxDB database" +release_date: 2017-02-23 11:00:00 +sidebar: true +comments: false +sharing: true +footer: true +redirect_from: /components/influxdb/#data-import-script +--- + +If you want to import all the recorded data from your recorder database you can use the data import script. It will read all your state_change events from the database and add them as data-points to the InfluxDB. You can specify the source database either by pointing the `--config` option to the config directory which includes the default SQLite database or by giving a sqlalchemy connection URI with `--uri`. + +The writing to InfluxDB is done in batches that can be changed with `--step`. + +You can control, which data is imported by using the command line options `--exclude_entities` and `--exclude_domains`. Both get a comma separated list of either entity-ids or domain names that are excluded from the import. + +To test what gets imported you can use the `--simulate` option, which disables the actual write to the InfluxDB instance. This only writes the statistics how much points would be imported from which entity. + +Example to run the script: + +```bash +$ hass --script influxdb_import --config CONFIG_DIR \ + -H IP_INFLUXDB_HOST -u INFLUXDB_USERNAME -p INFLUXDB_PASSWORD \ + --dbname INFLUXDB_DB_NAME --exclude_domains automation,configurator +``` +Script arguments: + +``` +required arguments: + -d dbname, --dbname dbname + InfluxDB database name + +optional arguments: + -h, --help show this help message and exit + -c path_to_config_dir, --config path_to_config_dir + Directory that contains the Home Assistant + configuration + --uri URI Connect to URI and import (if other than default + sqlite) eg: mysql://localhost/homeassistant + + -H host, --host host InfluxDB host address + -P port, --port port InfluxDB host port + -u username, --username username + InfluxDB username + -p password, --password password + InfluxDB password + -s step, --step step How many points to import at the same time + -t tags, --tags tags Comma separated list of tags (key:value) for all + points + -D default_measurement, --default-measurement default_measurement + Store all your points in the same measurement + -o override_measurement, --override-measurement override_measurement + Store all your points in the same measurement + -e exclude_entities, --exclude_entities exclude_entities + Comma separated list of excluded entities + -E exclude_domains, --exclude_domains exclude_domains + Comma separated list of excluded domains + -S, --simulate Do not write points but simulate preprocessing + and print statistics +``` + + diff --git a/source/_docs/tools/keyring.markdown b/source/_docs/tools/keyring.markdown new file mode 100644 index 0000000000..6434337b39 --- /dev/null +++ b/source/_docs/tools/keyring.markdown @@ -0,0 +1,42 @@ +--- +layout: page +title: "keyring" +description: "Script to store secrets in a keyring" +release_date: 2017-02-23 11:00:00 +sidebar: true +comments: false +sharing: true +footer: true +redirect_from: /docs/configuration/secrets/#storing-passwords-in-a-keyring-managed-by-your-os +--- + +Using [Keyring](https://github.com/jaraco/keyring) is an alternative way to `secrets.yaml`. The secrets can be managed from the command line via the `keyring` script. + +```bash +$ hass --script keyring --help +``` + +To store a password in keyring, replace your password or API key with `!secret` and an identifier in `configuration.yaml` file. + +```yaml +http: + api_password: !secret http_password +``` + +Create an entry in your keyring. + +```bash +$ hass --script keyring set http_password +``` + +If you launch Home Assistant now, you will be prompted for the keyring password to unlock your keyring. + +```bash +$ hass +Config directory: /home/homeassistant/.homeassistant +Please enter password for encrypted keyring: +``` + +

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

diff --git a/source/_docs/tools/scripts.markdown b/source/_docs/tools/scripts.markdown index a0b96505e3..2b40ba28c5 100644 --- a/source/_docs/tools/scripts.markdown +++ b/source/_docs/tools/scripts.markdown @@ -7,47 +7,7 @@ sidebar: true comments: false sharing: true footer: true +redirect_from: /docs/tools/ --- -The command-line and the frontend which simplify common tasks, are helping with migrations, and ensure that Home Assistant runs properly. Please do not confuse those with Home Assistant's [script](/docs/scripts/) feature. -### {% linkable_title Configuration check %} - -Test any changes to your `configuration.yaml` file before launching Home Assistant. This script allows you to test changes without the need to restart Home Assistant. - -```bash -$ hass --script check_config -``` - -### {% linkable_title Existence of configuration %} - -This script checks if the `configuration.yaml` file exists. If the file is not available, one is created. - -```bash -$ hass --script ensure_config -``` - -### {% linkable_title Secrets %} - -There is a method to store secrets outside of your `configuration.yaml` file. For further details, please refer to the [Storing Secrets](/docs/configuration/secrets/) documentation. - -```bash -$ hass --script keyring -``` - -### {% linkable_title Benchmark %} - -For testing the performance of Home Assistant the Benchmark script runs until you exit using Control+C. - -Firing and handling of a million events. - -```bash -$ hass --script benchmark async_million_events -``` - -### {% linkable_title Old scripts %} - -Usually those scripts were only used when a massive update happened and was announced in the release notes. - -- `db_migrator`: Migrate an existing SQLite database to the new schema. -- `influxdb_migrator`: Convert an old InfluxDB to the new format. diff --git a/source/_includes/asides/docs_navigation.html b/source/_includes/asides/docs_navigation.html index 463f65313e..c697024aac 100644 --- a/source/_includes/asides/docs_navigation.html +++ b/source/_includes/asides/docs_navigation.html @@ -87,7 +87,13 @@
  • {% active_link /docs/tools/dev-tools/ Developer Tools %}
  • {% active_link /docs/tools/hass/ hass %}
  • -
  • {% active_link /docs/tools/scripts/ Scripts %}
  • +
  • {% active_link /docs/tools/benchmark/ benchmark %}
  • +
  • {% active_link /docs/tools/check_config/ check_config %}
  • +
  • {% active_link /docs/tools/credstash/ credstash %}
  • +
  • {% active_link /docs/tools/db_migrator/ db_migrator %}
  • +
  • {% active_link /docs/tools/ensure_config/ ensure_config %}
  • +
  • {% active_link /docs/tools/influxdb_import/ influxdb_import %}
  • +
  • {% active_link /docs/tools/keyring/ keyring %}
  • From 51f5cd59e99398841abb8eeca6a72ed3768c48df Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Wed, 31 Jan 2018 10:25:22 +0100 Subject: [PATCH 242/993] Add missing influxdb_migrator (#4555) * Add missing influxdb_migrator * remove redirect --- source/_docs/tools/influxdb_migrator.markdown | 39 +++++++++++++++++++ source/_includes/asides/docs_navigation.html | 1 + 2 files changed, 40 insertions(+) create mode 100644 source/_docs/tools/influxdb_migrator.markdown diff --git a/source/_docs/tools/influxdb_migrator.markdown b/source/_docs/tools/influxdb_migrator.markdown new file mode 100644 index 0000000000..df8e83e405 --- /dev/null +++ b/source/_docs/tools/influxdb_migrator.markdown @@ -0,0 +1,39 @@ +--- +layout: page +title: "influxdb_migrator" +description: "Script to convert an old-structure Influx database to a new one." +release_date: 2017-02-23 11:00:00 +sidebar: true +comments: false +sharing: true +footer: true +--- + +Script to convert an old-structure Influx database to a new one. + +Example to run the script: + +```bash +$ hass --script influxdb_migrator -H IP_INFLUXDB_HOST \ + -u INFLUXDB_USERNAME -p INFLUXDB_PASSWORD \ + --dbname INFLUXDB_DB_NAME +``` +Script arguments: + +``` +optional arguments: + -h, --help show this help message and exit + -d dbname, --dbname dbname + InfluxDB database name + -H host, --host host InfluxDB host address + -P port, --port port InfluxDB host port + -u username, --username username + InfluxDB username + -p password, --password password + InfluxDB password + -s step, --step step How many points to migrate at the same time + -o override_measurement, --override-measurement override_measurement + Store all your points in the same measurement + -D, --delete Delete old database +``` + diff --git a/source/_includes/asides/docs_navigation.html b/source/_includes/asides/docs_navigation.html index c697024aac..add2fd1bbc 100644 --- a/source/_includes/asides/docs_navigation.html +++ b/source/_includes/asides/docs_navigation.html @@ -93,6 +93,7 @@
  • {% active_link /docs/tools/db_migrator/ db_migrator %}
  • {% active_link /docs/tools/ensure_config/ ensure_config %}
  • {% active_link /docs/tools/influxdb_import/ influxdb_import %}
  • +
  • {% active_link /docs/tools/influxdb_migrator/ influxdb_migrator %}
  • {% active_link /docs/tools/keyring/ keyring %}
  • From bcdf76407a1929e6a28f609ef94d6d67b239e33a Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Wed, 31 Jan 2018 11:38:02 -0800 Subject: [PATCH 243/993] Fix ha_release --- source/_components/alarm_control_panel.manual_mqtt.markdown | 2 +- source/_components/camera.dispatcher.markdown | 2 +- source/_components/cloud.alexa.markdown | 2 +- source/_components/cloud.markdown | 2 +- source/_components/fan.insteon_hub.markdown | 2 +- source/_components/hue.markdown | 4 ++-- source/_components/sensor.darksky.markdown | 2 +- source/_components/sensor.kwb.markdown | 2 +- source/_components/sensor.ted5000.markdown | 2 +- 9 files changed, 10 insertions(+), 10 deletions(-) diff --git a/source/_components/alarm_control_panel.manual_mqtt.markdown b/source/_components/alarm_control_panel.manual_mqtt.markdown index 95fd3e09ff..be1508c676 100644 --- a/source/_components/alarm_control_panel.manual_mqtt.markdown +++ b/source/_components/alarm_control_panel.manual_mqtt.markdown @@ -9,7 +9,7 @@ sharing: true footer: true logo: home-assistant.png ha_category: Alarm -ha_release: 0.50 +ha_release: "0.50" --- This platform extends the [manual alarm](/components/alarm_control_panel.manual/) by adding support for MQTT control of the alarm by a remote device. It can be used to create external keypads which simply change the state of the manual alarm in Home Assistant. diff --git a/source/_components/camera.dispatcher.markdown b/source/_components/camera.dispatcher.markdown index 62395dc993..2672c6c48e 100644 --- a/source/_components/camera.dispatcher.markdown +++ b/source/_components/camera.dispatcher.markdown @@ -9,7 +9,7 @@ sharing: true footer: true ha_category: Camera logo: camcorder.png -ha_release: 0.40 +ha_release: "0.40" ha_iot_class: "depends" --- diff --git a/source/_components/cloud.alexa.markdown b/source/_components/cloud.alexa.markdown index 81a4b09eac..5f30f112a1 100644 --- a/source/_components/cloud.alexa.markdown +++ b/source/_components/cloud.alexa.markdown @@ -8,7 +8,7 @@ comments: false sharing: true footer: true logo: home-assistant.png -ha_release: 0.60 +ha_release: "0.60" ha_category: Cloud ha_iot_class: "Cloud Push" --- diff --git a/source/_components/cloud.markdown b/source/_components/cloud.markdown index 57717e6eab..d45e9aa15f 100644 --- a/source/_components/cloud.markdown +++ b/source/_components/cloud.markdown @@ -8,7 +8,7 @@ comments: false sharing: true footer: true logo: home-assistant.png -ha_release: 0.60 +ha_release: "0.60" ha_category: Voice ha_iot_class: "Cloud Push" --- diff --git a/source/_components/fan.insteon_hub.markdown b/source/_components/fan.insteon_hub.markdown index 364b94fa40..b5ce9adbc7 100644 --- a/source/_components/fan.insteon_hub.markdown +++ b/source/_components/fan.insteon_hub.markdown @@ -9,7 +9,7 @@ sharing: true footer: true logo: insteon.png ha_category: Fan -ha_release: 0.30 +ha_release: "0.30" --- The `insteon_hub` fan component lets you control your fans connected to an [Insteon Hub](http://www.insteon.com/insteon-hub/) with Home Assistant. diff --git a/source/_components/hue.markdown b/source/_components/hue.markdown index 40623c9a95..fb73a05824 100644 --- a/source/_components/hue.markdown +++ b/source/_components/hue.markdown @@ -11,7 +11,7 @@ logo: philips_hue.png ha_category: Hub ha_iot_class: "Local Polling" featured: true -ha_release: 0.60 +ha_release: "0.60" --- Philips Hue support is integrated into Home Assistant as a Hub that can drive the light platform. The preferred way to setup the Philips Hue platform is by enabling the [discovery component](/components/discovery/). @@ -54,7 +54,7 @@ You will need to convert each bridge into an entry in the new configuration styl ### {% linkable_title Multiple Hue bridges %} -Multiple Hue bridges work transparently with discovery, you don't have to do anything. If you prefer to configure them manually and use multiple Hue bridges then it's needed that you provide a configuration file for every bridge. The bridges can't share a single configuration file. +Multiple Hue bridges work transparently with discovery, you don't have to do anything. If you prefer to configure them manually and use multiple Hue bridges then it's needed that you provide a configuration file for every bridge. The bridges can't share a single configuration file. Add `filename` to your Hue configuration entry in your `configuration.yaml` file: diff --git a/source/_components/sensor.darksky.markdown b/source/_components/sensor.darksky.markdown index 427d5afb68..11edb0c1ce 100644 --- a/source/_components/sensor.darksky.markdown +++ b/source/_components/sensor.darksky.markdown @@ -10,7 +10,7 @@ footer: true logo: dark_sky.png ha_category: Weather featured: true -ha_release: 0.30 +ha_release: "0.30" redirect_from: /components/sensor.forecast/ ha_iot_class: "Cloud Polling" --- diff --git a/source/_components/sensor.kwb.markdown b/source/_components/sensor.kwb.markdown index c53b43e8c2..7148e016f2 100644 --- a/source/_components/sensor.kwb.markdown +++ b/source/_components/sensor.kwb.markdown @@ -10,7 +10,7 @@ footer: true logo: kwb.png ha_category: Sensor ha_iot_class: "Local Polling" -ha_release: 0.40 +ha_release: "0.40" --- The `kwb` component integrates the sensors of KWB Easyfire pellet central heating units with the Comfort3 controller (http://www.kwbheizung.de/de/produkte/kwb-comfort-3.html) into Home Assistant. diff --git a/source/_components/sensor.ted5000.markdown b/source/_components/sensor.ted5000.markdown index fd09ab7d2f..20e94ba3e8 100644 --- a/source/_components/sensor.ted5000.markdown +++ b/source/_components/sensor.ted5000.markdown @@ -9,7 +9,7 @@ sharing: true footer: true logo: ted.png ha_category: Sensor -ha_release: 0.30 +ha_release: "0.30" ha_iot_class: "Local Polling" --- From 5ba8fa279fca6d5bcc9d768549952a792670e9ef Mon Sep 17 00:00:00 2001 From: Alex Barcelo Date: Thu, 1 Feb 2018 20:54:42 +0100 Subject: [PATCH 244/993] Document approach to IPv6 through `server_host` (#4561) Simplest way to listen to IPv6 is use the `server_host` directive in the http component. That was undocumented (and may be considered a workaround) but works as expected and requires no changes on the codebase. It is worth documenting that here IMHO. --- source/_components/http.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/http.markdown b/source/_components/http.markdown index 0a6d20b2cd..98ec03f5a0 100644 --- a/source/_components/http.markdown +++ b/source/_components/http.markdown @@ -30,7 +30,7 @@ http: Configuration variables: - **api_password** (*Optional*): Protect Home Assistant with a password. -- **server_host** (*Optional*): Only listen to incoming requests on specific IP/host (default: accept all) +- **server_host** (*Optional*): Only listen to incoming requests on specific IP/host (default: bind to `0.0.0.0` which means accept all IPv4 connections). Use `server_host: "::0"` if you want to listen to (and only) IPv6. - **server_port** (*Optional*): Let you set a port to use. Defaults to 8123. - **base_url** (*Optional*): The URL that Home Assistant is available on the internet. For example: `hass-example.duckdns.org:8123`. Defaults to the local IP address. The iOS app finds local installations, if you have an outside URL use this so that you can auto-fill when discovered in the app. - **ssl_certificate** (*Optional*): Path to your TLS/SSL certificate to serve Home Assistant over a secure connection. From c9d67e8cd9bca0854e0cfef6d5609839f213894b Mon Sep 17 00:00:00 2001 From: Wopalecki <35042958+Wopalecki@users.noreply.github.com> Date: Thu, 1 Feb 2018 20:55:14 +0100 Subject: [PATCH 245/993] Adding quotes for the "login attempts" command (#4563) In hass.io installation, the command value must be quoted. --- source/_components/sensor.command_line.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/sensor.command_line.markdown b/source/_components/sensor.command_line.markdown index 3d5f533fbe..e27656e9a5 100644 --- a/source/_components/sensor.command_line.markdown +++ b/source/_components/sensor.command_line.markdown @@ -81,7 +81,7 @@ If you'd like to know how many failed login attempts are made to Home Assistant, sensor: - platform: command_line name: badlogin - command: grep -c 'Login attempt' /home/hass/.homeassistant/home-assistant.log + command: "grep -c 'Login attempt' /home/hass/.homeassistant/home-assistant.log" ``` Make sure to configure the [logger component](/components/logger) to monitor the [http component](https://home-assistant.io/components/http/) at least the `warning` level. From 5042e3b13fcc4b680d452da7590ac39f228d6955 Mon Sep 17 00:00:00 2001 From: Anders Melchiorsen Date: Fri, 2 Feb 2018 01:51:56 +0100 Subject: [PATCH 246/993] Default recorder purge_interval to 1 (#4534) * Default recorder purge_interval to 1 * Reflow * :pencil2: Minor improvements --- source/_components/recorder.markdown | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/source/_components/recorder.markdown b/source/_components/recorder.markdown index 48ada639fd..38b9239ba5 100644 --- a/source/_components/recorder.markdown +++ b/source/_components/recorder.markdown @@ -35,13 +35,14 @@ recorder: description: The URL which points to your database. required: false type: URL - purge_interval: - description: Enable scheduled purge of older events and states. The purge task runs every `purge_interval` days from when the `recorder component` is first enabled. If a scheduled purge is missed (e.g if Home Assistant was not running), the schedule will resume soon after Home Assistant restarts. You can use the [service](#service-purge) call `purge` when required without impacting the purge schedule. If `purge_interval` is set, `purge_keep_days` needs to be set as well. - required: Inclusive - type: int purge_keep_days: - description: Specify the number of history days to keep in recorder database after purge. If `purge_interval` is set, `purge_keep_days` needs to be set as well. - required: Inclusive + description: Specify the number of history days to keep in recorder database after a purge. + required: false + type: int + purge_interval: + description: How often (in days) the purge task runs. If a scheduled purge is missed (e.g., if Home Assistant was not running), the schedule will resume soon after Home Assistant restarts. You can use the [service](#service-purge) call `purge` when required without impacting the purge schedule. + required: false + default: 1 type: int exclude: description: Configure which components should be excluded @@ -76,7 +77,6 @@ Define domains and entities to `exclude` (aka. blacklist). This is convenient wh ```yaml # Example configuration.yaml entry with exclude recorder: - purge_interval: 2 purge_keep_days: 5 db_url: sqlite:///home/user/.homeassistant/test exclude: From d270587129fd868c62ea37346be17df7e0f20606 Mon Sep 17 00:00:00 2001 From: boojew Date: Fri, 2 Feb 2018 04:23:55 -0500 Subject: [PATCH 247/993] Update mailgun.markdown (#4560) * Update mailgun.markdown * Update mailgun.markdown * Remove tailing whitespace --- source/_components/mailgun.markdown | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/source/_components/mailgun.markdown b/source/_components/mailgun.markdown index 835464dfd0..78764d7507 100644 --- a/source/_components/mailgun.markdown +++ b/source/_components/mailgun.markdown @@ -12,7 +12,7 @@ ha_category: Notifications ha_release: 0.38 --- -The component supports push messages and generates events based on inbound data. To use, add a Route set to Store and Notify with a URL of the following form: `https:///api/mailgun?api_password=` +The component supports push messages and generates events based on inbound data. To use, add a Route set to Store and Notify with a URL of the following form: `https:///api/mailgun?api_password=` To send messages, use the [Mailgun notify platform][notify]. @@ -25,11 +25,10 @@ To send messages, use the [Mailgun notify platform][notify]. mailgun: domain: mg.example.com api_key: token-XXXXXXXXX - sandbox: False ``` Configuration variables: -- **domain** (*Optional*): This is the domain name to be used when sending out mail. Defaults to the first custom domain you have set up. -- **sandbox** (*Optional*): Whether to use the sandboxed domain for outgoing mail. The `domain` item takes precedence over this. Defaults to `False`. +- **domain** (*Required*): This is the domain name to be used when sending out mail. Defaults to the first custom domain you have set up. - **api_key** (*Required*): This is the API token that has been generated in your Mailgun account. +- **sandbox** (*Optional*): Whether to use the sandboxed domain for outgoing mail. The `domain` item takes precedence over this. Defaults to `False`. From ef66f7e2532e7b3874c4e1ebf3a899ac198928ab Mon Sep 17 00:00:00 2001 From: Andrew Cockburn Date: Fri, 2 Feb 2018 10:26:49 -0500 Subject: [PATCH 248/993] Update appdaemon.markdown --- source/_docs/ecosystem/appdaemon.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_docs/ecosystem/appdaemon.markdown b/source/_docs/ecosystem/appdaemon.markdown index ca2a59f65e..76edbc1dd5 100755 --- a/source/_docs/ecosystem/appdaemon.markdown +++ b/source/_docs/ecosystem/appdaemon.markdown @@ -107,4 +107,4 @@ Of course, if I wanted to make this App or its predecessor reusable, I would hav In addition, Apps can write to `AppDaemon`'s log files, and there is a system of constraints that allows you to control when and under what circumstances Apps and callbacks are active to keep the logic clean and simple. -For full installation instructions, see the [AppDaemon Project Documentation pages](http://appdaemon.readthedocs.io/en/latest/). +For full installation instructions, see the [AppDaemon Project Documentation pages](http://appdaemon.readthedocs.io/en/stable/). From 7f6f3cca865e050560ea34e2ecae6c3b174771cb Mon Sep 17 00:00:00 2001 From: Rene Nulsch <33263735+ReneNulschDE@users.noreply.github.com> Date: Fri, 2 Feb 2018 16:57:40 +0100 Subject: [PATCH 249/993] Documentation for new Mercedes me component (#4464) * Documentation for new Mercedes me component * set ha_release and date to next version --- .../binary_sensor.mercedesme.markdown | 20 ++++++++ .../device_tracker.mercedesme.markdown | 19 +++++++ source/_components/mercedesme.markdown | 48 ++++++++++++++++++ source/_components/sensor.mercedesme.markdown | 20 ++++++++ source/images/supported_brands/mercedesme.png | Bin 0 -> 5911 bytes 5 files changed, 107 insertions(+) create mode 100644 source/_components/binary_sensor.mercedesme.markdown create mode 100644 source/_components/device_tracker.mercedesme.markdown create mode 100644 source/_components/mercedesme.markdown create mode 100644 source/_components/sensor.mercedesme.markdown create mode 100644 source/images/supported_brands/mercedesme.png diff --git a/source/_components/binary_sensor.mercedesme.markdown b/source/_components/binary_sensor.mercedesme.markdown new file mode 100644 index 0000000000..932574774f --- /dev/null +++ b/source/_components/binary_sensor.mercedesme.markdown @@ -0,0 +1,20 @@ +--- +layout: page +title: "Mercedes me Binary Sensor" +description: "Instructions on how to integrate Mercedes me binary sensors into Home Assistant." +date: 2018-01-27 17:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: mercedesme.png +ha_category: Binary Sensor +ha_iot_class: "Cloud polling" +ha_release: 0.63 +--- + +The `Mercedes me` platform allows you to get data from your [Mercedes me connected car](https://www.mercedes-benz.com/en/mercedes-me/) sensors like windows, doors, lock, tire warnings from within Home Assistant. + +They will be automatically discovered if the Mercedes me component is loaded. + +For more configuration information see the [Mercedes me component](/components/mercedes me/) documentation. diff --git a/source/_components/device_tracker.mercedesme.markdown b/source/_components/device_tracker.mercedesme.markdown new file mode 100644 index 0000000000..ad59c95e0d --- /dev/null +++ b/source/_components/device_tracker.mercedesme.markdown @@ -0,0 +1,19 @@ +--- +layout: page +title: "Mercedes me" +description: "Instructions on for how to integrate Mercedes me into Home Assistant." +date: 2018-01-27 10:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: mercedesme.png +ha_category: Presence Detection +ha_release: 0.63 +--- + +The `Mercedes me` platform allows you to get data about the location of your [Mercedes me connected car](https://www.mercedes-benz.com/en/mercedes-me/) car within Home Assistant. + +The device tracker platform will be automatically configured if Mercedes me component is configured. + +For more configuration information see the [Mercedes me component](/components/mercedesme/) documentation. diff --git a/source/_components/mercedesme.markdown b/source/_components/mercedesme.markdown new file mode 100644 index 0000000000..0a2c0cd5c4 --- /dev/null +++ b/source/_components/mercedesme.markdown @@ -0,0 +1,48 @@ +--- +layout: page +title: "Mercedes me" +description: "Instructions on how to integrate Mercedes car with Mercedes me into Home Assistant." +date: 2018-01-27 17:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: mercedesme.png +ha_category: Hub +ha_release: 0.63 +ha_iot_class: "Cloud Polling" +--- + + +The `Mercedes me` component offers integration with the [Mercedes me](https://www.mercedes-benz.com/de/mercedes-me/) cloud service and provides presence detection as well as sensors such as doors, tires, windows, and service interval. + +This component provides the following platforms: + - Binary Sensors - such as windows, tires, doors, lock + - Sensors - such as fuel status, service interval, remaining km... + - Device tracker - to track location of your car + +To use Mercedes me in your installation, add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +mercedesme: + username: email + password: password +``` + + +{% configuration %} +username: + description: The email address associated with your Mercedes me account. + required: true + type: string +password: + description: The password for your given Mercedes me account. + required: true + type: string +scan_interval: + description: API polling interval. The minimal value can't be less then 30 seconds. + required: true + default: 30 + type: int +{% endconfiguration %} \ No newline at end of file diff --git a/source/_components/sensor.mercedesme.markdown b/source/_components/sensor.mercedesme.markdown new file mode 100644 index 0000000000..da5fd9ba45 --- /dev/null +++ b/source/_components/sensor.mercedesme.markdown @@ -0,0 +1,20 @@ +--- +layout: page +title: "Mercedes me Sensor" +description: "Instructions on how to integrate Mercedes me sensors into Home Assistant." +date: 2018-01-27 17:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: mercedesme.png +ha_category: Sensor +ha_iot_class: "Cloud Push" +ha_release: 0.63 +--- + +The `Mercedes me` platform allows you to get data from your [Mercedes me connected car](https://www.mercedes-benz.com/en/mercedes-me/) sensors from within Home Assistant. + +The sensor platform will be automatically configured if Mercedes me component is configured. + +For more configuration information see the [Mercedes me component](/components/mercedesme/) documentation. diff --git a/source/images/supported_brands/mercedesme.png b/source/images/supported_brands/mercedesme.png new file mode 100644 index 0000000000000000000000000000000000000000..34136a69fe89ce89efd0b63aeacd604b733be9b2 GIT binary patch literal 5911 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 literal 0 HcmV?d00001 From c2813d3739a4eab0bf795cc62acbccbfbe29c7ac Mon Sep 17 00:00:00 2001 From: kennedyshead Date: Sat, 3 Feb 2018 03:55:08 +0100 Subject: [PATCH 250/993] Adding melissa climate (#4377) * Adding docs for melissa component * Adding docs for melissa component * Changed to Configuration Variables * :ambulance: Fixing build * Updateing version of release --- source/_components/climate.melissa.markdown | 20 +++++++++++ source/_components/melissa.markdown | 37 ++++++++++++++++++++ source/_components/sensor.melissa.markdown | 20 +++++++++++ source/images/supported_brands/mclimate.png | Bin 0 -> 4855 bytes 4 files changed, 77 insertions(+) create mode 100644 source/_components/climate.melissa.markdown create mode 100644 source/_components/melissa.markdown create mode 100644 source/_components/sensor.melissa.markdown create mode 100644 source/images/supported_brands/mclimate.png diff --git a/source/_components/climate.melissa.markdown b/source/_components/climate.melissa.markdown new file mode 100644 index 0000000000..9d648a83b5 --- /dev/null +++ b/source/_components/climate.melissa.markdown @@ -0,0 +1,20 @@ +--- +layout: page +title: "Melissa Climate" +description: "Instructions on how to integrate Melissa climate system (HVAC) into Home Assistant." +date: 2018-01-08 20:21 +sidebar: true +comments: false +sharing: true +footer: true +logo: mclimate.png +ha_category: Climate +ha_iot_class: "Cloud Polling" +ha_release: 0.63 +--- + +The `Melissa` climate platform allows you to control your [Melissa Climate](http://seemelissa.com/) from within Home Assistant. + +The climate platform will be automatically configured if Melissa component is configured. + +For more configuration information see the [Melissa component](/components/melissa/) documentation. diff --git a/source/_components/melissa.markdown b/source/_components/melissa.markdown new file mode 100644 index 0000000000..ffc6364fc9 --- /dev/null +++ b/source/_components/melissa.markdown @@ -0,0 +1,37 @@ +--- +layout: page +title: "Melissa Climate" +description: "Instructions how to integrate Melissa Climate into Home Assistant." +date: 2017-01-05 17:30 +sidebar: true +comments: false +sharing: true +footer: true +logo: mclimate.png +ha_category: Hub +featured: false +ha_release: 0.63 +ha_iot_class: "Cloud Polling" +--- + +The `Melissa` component is the main component to connect to a [Melissa Climate](http://seemelissa.com/) A/C control. + +To set the Melissa component up, add the following information to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +melissa: + username: + password: ******** +``` + +{% configuration %} + username: + description: The username for accessing your Melissa account. + required: true + type: string + password: + description: The password for accessing your Melissa account. + required: true + type: string +{% endconfiguration %} diff --git a/source/_components/sensor.melissa.markdown b/source/_components/sensor.melissa.markdown new file mode 100644 index 0000000000..4b18248d52 --- /dev/null +++ b/source/_components/sensor.melissa.markdown @@ -0,0 +1,20 @@ +--- +layout: page +title: "Melissa Sensor" +description: "Instructions on how to integrate Melissa sensors into Home Assistant." +date: 2017-08-30 12:21 +sidebar: true +comments: false +sharing: true +footer: true +logo: mclimate.png +ha_category: Sensor +ha_iot_class: "Cloud Polling" +ha_release: 0.63 +--- + +The `Melissa` platform allows you to get data from your [Melissa](http://seemelissa.com/) sensors from within Home Assistant. + +The sensor platform will be automatically configured if Melissa component is configured. + +For more configuration information see the [Melissa component](/components/melissa/) documentation. diff --git a/source/images/supported_brands/mclimate.png b/source/images/supported_brands/mclimate.png new file mode 100644 index 0000000000000000000000000000000000000000..0f5e4ed3725958fce9a0e7426a439ec196075afa GIT binary patch literal 4855 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 Date: Sat, 3 Feb 2018 10:58:49 +0100 Subject: [PATCH 251/993] Re-add random sensor sample (it's referenced in automation) --- source/getting-started/configuration.markdown | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/source/getting-started/configuration.markdown b/source/getting-started/configuration.markdown index 4d0175ec8b..d9a23fcbcf 100644 --- a/source/getting-started/configuration.markdown +++ b/source/getting-started/configuration.markdown @@ -68,4 +68,11 @@ Now that you are able to edit the configuration, it's time to set up some of you

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

    +For a sensor that is showing [random values](/components/sensor.random/), the entry would look like the sample below: + +```yaml +sensor: + - platform: random +``` + ### [Next step: Automate Home Assistant »](/getting-started/automation/) From c78bc43ac19b16cd9d5a95e7d6931ffc7f602844 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Sat, 3 Feb 2018 14:52:57 +0100 Subject: [PATCH 252/993] Fix configuration variables --- source/_components/media_player.mediaroom.markdown | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/source/_components/media_player.mediaroom.markdown b/source/_components/media_player.mediaroom.markdown index d88d5673f4..44beff563e 100644 --- a/source/_components/media_player.mediaroom.markdown +++ b/source/_components/media_player.mediaroom.markdown @@ -22,22 +22,23 @@ To add a Mediaroom STB to your installation, add the following to your `configur media_player: - platform: mediaroom host: 192.168.1.64 - name: TV Operator Box ``` {% configuration %} host: - description: The hostname or address of the device. + description: The hostname or IP address of the device. required: false type: string name: description: The name of the device used in the frontend. required: false type: string + default: Mediaroom STB optimistic: description: In case the component cannot determine the status of the box, consider the box always ON. required: false type: boolean + default: false {% endconfiguration %} Notice that all parameters are optional, and discovery should configure everything for you. From a27acc87f277137449e132c041952d7465931d19 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Sat, 3 Feb 2018 14:57:43 +0100 Subject: [PATCH 253/993] Add missing default --- source/_components/media_player.mediaroom.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/media_player.mediaroom.markdown b/source/_components/media_player.mediaroom.markdown index 44beff563e..17724f0d76 100644 --- a/source/_components/media_player.mediaroom.markdown +++ b/source/_components/media_player.mediaroom.markdown @@ -21,7 +21,6 @@ To add a Mediaroom STB to your installation, add the following to your `configur # Example configuration.yaml entry media_player: - platform: mediaroom - host: 192.168.1.64 ``` {% configuration %} @@ -29,6 +28,7 @@ media_player: description: The hostname or IP address of the device. required: false type: string + default: Tries to discovery your device. name: description: The name of the device used in the frontend. required: false From 2d61ef7f074735b812d1bd94da3547512e5f4d34 Mon Sep 17 00:00:00 2001 From: DubhAd Date: Sat, 3 Feb 2018 17:21:07 +0000 Subject: [PATCH 254/993] Added links to the voice components Added links to the voice components it supports. --- source/_components/intent_script.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/intent_script.markdown b/source/_components/intent_script.markdown index 68336fd79d..eab43f4b93 100644 --- a/source/_components/intent_script.markdown +++ b/source/_components/intent_script.markdown @@ -12,7 +12,7 @@ ha_category: Intent ha_release: "0.50" --- -The intent_script component allows users to configure actions and responses to intents. Intents can be fired by any component that supports it. Examples are Alexa (Amazon Echo), API.ai (Google Assistant) and Snips. +The intent_script component allows users to configure actions and responses to intents. Intents can be fired by any component that supports it. Examples are [Alexa](/components/alexa/) (Amazon Echo), [API.ai](/components/dialogflow/) (Google Assistant) and [Snips](/components/snips/). ```yaml # Example configuration.yaml entry From 5ad2bf6428039659d4c48ca632330960d03e605d Mon Sep 17 00:00:00 2001 From: Rene Nulsch <33263735+ReneNulschDE@users.noreply.github.com> Date: Sat, 3 Feb 2018 19:28:27 +0100 Subject: [PATCH 255/993] Add market restriction note (#4571) --- source/_components/mercedesme.markdown | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/source/_components/mercedesme.markdown b/source/_components/mercedesme.markdown index 0a2c0cd5c4..85c78de53b 100644 --- a/source/_components/mercedesme.markdown +++ b/source/_components/mercedesme.markdown @@ -21,6 +21,10 @@ This component provides the following platforms: - Sensors - such as fuel status, service interval, remaining km... - Device tracker - to track location of your car +

    + The component can integrate cars out of the European and Africa markets only. +

    + To use Mercedes me in your installation, add the following to your `configuration.yaml` file: ```yaml @@ -30,7 +34,6 @@ mercedesme: password: password ``` - {% configuration %} username: description: The email address associated with your Mercedes me account. From f7679d10e93aaef44c6a5b071bf37bf79a3401de Mon Sep 17 00:00:00 2001 From: Andrew Cockburn Date: Sat, 3 Feb 2018 13:29:03 -0500 Subject: [PATCH 256/993] Update hadashboard.markdown (#4572) --- source/_docs/ecosystem/hadashboard.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_docs/ecosystem/hadashboard.markdown b/source/_docs/ecosystem/hadashboard.markdown index c73560401a..226b6906d9 100755 --- a/source/_docs/ecosystem/hadashboard.markdown +++ b/source/_docs/ecosystem/hadashboard.markdown @@ -39,4 +39,4 @@ HADashboard is a modular, skinnable dashboard for [Home Assistant](https://home- -For full installation instructions see the HADashboard section in the [AppDaemon Project Documentation](http://appdaemon.readthedocs.io/en/latest/DASHBOARD_INSTALL.html) +For full installation instructions see the HADashboard section in the [AppDaemon Project Documentation](http://appdaemon.readthedocs.io/en/stable/DASHBOARD_INSTALL.html) From 47822f61fdb30411353f0d81d47146a18a0b743d Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Sat, 3 Feb 2018 22:28:29 -0800 Subject: [PATCH 257/993] Update light.hue.markdown --- source/_components/light.hue.markdown | 1 - 1 file changed, 1 deletion(-) diff --git a/source/_components/light.hue.markdown b/source/_components/light.hue.markdown index d4d37548b6..8cd9aad47e 100644 --- a/source/_components/light.hue.markdown +++ b/source/_components/light.hue.markdown @@ -10,7 +10,6 @@ footer: true logo: philips_hue.png ha_category: Light ha_iot_class: "Local Polling" -featured: true ha_release: pre 0.7 --- From b1714a5bfc24f41f71b32cbe5f7e91c82a22c2bc Mon Sep 17 00:00:00 2001 From: Rene Nulsch <33263735+ReneNulschDE@users.noreply.github.com> Date: Sun, 4 Feb 2018 19:54:17 +0100 Subject: [PATCH 258/993] Fix Typo (#4577) --- source/_components/mercedesme.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/mercedesme.markdown b/source/_components/mercedesme.markdown index 85c78de53b..730d274094 100644 --- a/source/_components/mercedesme.markdown +++ b/source/_components/mercedesme.markdown @@ -22,7 +22,7 @@ This component provides the following platforms: - Device tracker - to track location of your car

    - The component can integrate cars out of the European and Africa markets only. + The component can integrate cars out of the European and African markets only.

    To use Mercedes me in your installation, add the following to your `configuration.yaml` file: From 590a7bc3459f2e2dd7ff8c3c4db86253ec79d4f2 Mon Sep 17 00:00:00 2001 From: Robert Date: Mon, 5 Feb 2018 08:20:15 +0100 Subject: [PATCH 259/993] Note for 2014 and 2015 models (#4581) * Note for 2014 and 2015 models * Remove marking --- source/_components/media_player.samsungtv.markdown | 2 ++ 1 file changed, 2 insertions(+) diff --git a/source/_components/media_player.samsungtv.markdown b/source/_components/media_player.samsungtv.markdown index edaec8ca36..744488bebe 100644 --- a/source/_components/media_player.samsungtv.markdown +++ b/source/_components/media_player.samsungtv.markdown @@ -74,6 +74,8 @@ Currently tested but not working models: - JS9500 - State is always "on" and unable to control (but port 8001 *is* open) - MU6300 - Port set to 8001, `pip3 install websocket-client` must be executed, turning on works, status not working reliably, turning off is not permanent (it comes back on) +None of the 2014 (H) and 2015 (J) model series (e.g. J5200) will work, since Samsung have used a different (encrypted) type of interface for these. + If your model is not on the list then give it a test, if everything works correctly then add it to the list on [GitHub](https://github.com/home-assistant/home-assistant.github.io/tree/current/source/_components/media_player.samsungtv.markdown). The first letter (U, P, L, H & K) represent the screen type, e.g. LED or Plasma. The second letter represents the region, E is Europe, N is North America and A is Asia & Australia. The two numbers following that represent the screen size. If you add your model remember to remove these before adding them to the list. From c20709e3d09c5270189a86a179cb6a9540a134af Mon Sep 17 00:00:00 2001 From: Mike O'Driscoll Date: Mon, 5 Feb 2018 02:21:19 -0500 Subject: [PATCH 260/993] Add troubleshooting for Unifi Controller (#4578) Added documentation regarding accurate time sync for presence detection between home assistant and unifi controller. --- source/_components/device_tracker.unifi.markdown | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/source/_components/device_tracker.unifi.markdown b/source/_components/device_tracker.unifi.markdown index f2b5e2a435..cfb630d1a1 100644 --- a/source/_components/device_tracker.unifi.markdown +++ b/source/_components/device_tracker.unifi.markdown @@ -79,4 +79,11 @@ well. It is recommended that you run the Unifi controller in a dedicate virtual machine to avoid that situation. +### {% linkable_title Troubleshooting and Time Synchronization %} + +Presence detection depends on accurate time configuration between Home Assistant and the Unifi controller. + +If Home Assistant and the Unifi controller are running on separate machines or VMs ensure that all clocks are syncronized. +Failing to have syncronized clocks will lead to Home Assistant failing to mark a device as home. + [Related Issue](https://github.com/home-assistant/home-assistant/issues/10507) From 280bac6515edaa39bacdaaa413004416c251c1db Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Mon, 5 Feb 2018 08:22:45 +0100 Subject: [PATCH 261/993] Remove line breaks --- source/_components/device_tracker.unifi.markdown | 16 ++++------------ 1 file changed, 4 insertions(+), 12 deletions(-) diff --git a/source/_components/device_tracker.unifi.markdown b/source/_components/device_tracker.unifi.markdown index cfb630d1a1..a71db05655 100644 --- a/source/_components/device_tracker.unifi.markdown +++ b/source/_components/device_tracker.unifi.markdown @@ -64,26 +64,18 @@ See the [device tracker component page](/components/device_tracker/) for instruc ### {% linkable_title Configuring Users %} -The Unifi controller allows you to create multiple users on it besides -the main administrator. It is recommended that you create a limited -user that has `read-only` permissions for the Unifi device tracker. +The Unifi controller allows you to create multiple users on it besides the main administrator. It is recommended that you create a limited user that has `read-only` permissions for the Unifi device tracker. ### {% linkable_title Conflicts with MQTT %} -The Unifi controller can either be a dedicated hardware device -(Unifi's cloud key), or as software any Linux system. If you run the -the Unifi controller on the same operating system as Home Assistant -there may be conflicts in ports if you have the MQTT component as -well. +The Unifi controller can either be a dedicated hardware device (Unifi's cloud key), or as software any Linux system. If you run the the Unifi controller on the same operating system as Home Assistant there may be conflicts in ports if you have the MQTT component as well. -It is recommended that you run the Unifi controller in a dedicate -virtual machine to avoid that situation. +It is recommended that you run the Unifi controller in a dedicate virtual machine to avoid that situation. ### {% linkable_title Troubleshooting and Time Synchronization %} Presence detection depends on accurate time configuration between Home Assistant and the Unifi controller. -If Home Assistant and the Unifi controller are running on separate machines or VMs ensure that all clocks are syncronized. -Failing to have syncronized clocks will lead to Home Assistant failing to mark a device as home. +If Home Assistant and the Unifi controller are running on separate machines or VMs ensure that all clocks are syncronized. Failing to have syncronized clocks will lead to Home Assistant failing to mark a device as home. [Related Issue](https://github.com/home-assistant/home-assistant/issues/10507) From 7c0ac4661f4c7caedb429fa6da4d56a197561f84 Mon Sep 17 00:00:00 2001 From: Julius Mittenzwei Date: Mon, 5 Feb 2018 08:24:20 +0100 Subject: [PATCH 262/993] Updated documentation for KNX platform (#4575) * Documentation for https://github.com/home-assistant/home-assistant/pull/11978 * typo --- source/_components/binary_sensor.knx.markdown | 2 ++ source/_components/knx.markdown | 23 ++++++++++++- source/_components/scene.knx.markdown | 34 +++++++++++++++++++ source/_components/sensor.knx.markdown | 2 +- 4 files changed, 59 insertions(+), 2 deletions(-) create mode 100644 source/_components/scene.knx.markdown diff --git a/source/_components/binary_sensor.knx.markdown b/source/_components/binary_sensor.knx.markdown index 73c747601a..902d59eded 100644 --- a/source/_components/binary_sensor.knx.markdown +++ b/source/_components/binary_sensor.knx.markdown @@ -25,6 +25,7 @@ binary_sensor: address: '6/0/2' device_class: 'motion' #significant_bit: 2 + #reset_after: 100 ``` Configuration variables: @@ -33,6 +34,7 @@ Configuration variables: - **address**: KNX group address of the binary sensor. - **device_class** (Optional): HASS device class e.g. "motion". - **significant_bit** (Optional): Specify which significant bit of the KNX value should be used. Default is 1. +- **reset_after** (Optional): Reset back to OFF state after specified milliseconds. You can also attach actions to binary sensors (e.g., to switch on a light when a switch was pressed). In this example, one light is switched on when the button was pressed once and two others when the button was pressed a second time. diff --git a/source/_components/knx.markdown b/source/_components/knx.markdown index 4fd471efeb..ee731d020d 100644 --- a/source/_components/knx.markdown +++ b/source/_components/knx.markdown @@ -31,6 +31,7 @@ There is currently support for the following device types within Home Assistant: - [Light](/components/light.knx) - [Thermostat](/components/climate.knx) - [Notify](/components/notify.knx) +- [Scene](/components/scene.knx) ### {% linkable_title Configuration %} @@ -83,7 +84,6 @@ knx: - **fire_event** (*Optional*): If set to True, platform will write all received KNX messages to event bus - **fire_event_filter** (*Optional*): If `fire_event` is set `fire_event_filter` has to be specified. `fire_event_filter` defines a list of patterns for filtering KNX addresses. Only telegrams which match this pattern are sent to the HOme Assistant event bus. - **state_updater** (*Optional*): The component will collect the current state of each configured device from the KNX bus to display it correctly within Home-Assistant. Set this option to False to prevent this behavior. -- **time_address** (*Optional*): Broadcast current local time to KNX bus with configured group address. ### {% linkable_title Services %} @@ -98,6 +98,27 @@ Service Data: {"address": "1/0/15", "payload": 0} * **address**: KNX group address * **payload**: Payload, either an integer or an array of integers +### {% linkable_title Exposing sensor values or time to knx bus %} + +KNX component is able to expose time or sensor values to KNX bus. The component will broadcast any change of the exposed value to the KNX bus and answer read requests to the specified group address: + +```yaml +# Example configuration.yaml entry +knx: + expose:: + - type: 'temperature' + entity_id: 'sensor.owm_temperature' + address: '0/0/2' + - type: 'time' + address: '0/0/1' + - type: 'datetime' + address: '0/0/23' +``` + +* **type**: Type of the exposed value. Either time or datetime or any supported type of [KNX Sensor](/components/sensor.knx/) (e.g. "temperature" or "humidity"). +* **entity_id**: Entity id of the HASS component to be exposed. Not necessarry for types time and datetime. +* **address**: KNX group address. + ### {% linkable_title Known issues %} diff --git a/source/_components/scene.knx.markdown b/source/_components/scene.knx.markdown new file mode 100644 index 0000000000..e77b657181 --- /dev/null +++ b/source/_components/scene.knx.markdown @@ -0,0 +1,34 @@ +--- +layout: page +title: "KNX Scene" +description: "Instructions on how to integrate KNX Scenes into Home Assistant." +date: 2018-02-03 20:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: knx.png +ha_category: Scene +ha_release: "0.63" +--- + +The `knx` scenes platform allows you to trigger [KNX](http://www.knx.org) scenes. + +The `knx` component must be configured correctly, see [KNX Component](/components/knx). + +```yaml +# Example configuration.yaml entry +scene: + - name: Romantic + platform: knx + address: 8/8/8 + scene_number: 23 +``` + +Configuration variables: + +- **name** (*Optional*): A name for this device used within Home Assistant. +- **address**: KNX group address of the binary sensor. +- **scene_number** KNX scene number to be activated. + + diff --git a/source/_components/sensor.knx.markdown b/source/_components/sensor.knx.markdown index d44e76e2e3..f7e7892022 100644 --- a/source/_components/sensor.knx.markdown +++ b/source/_components/sensor.knx.markdown @@ -34,5 +34,5 @@ sensor: - **name** (*Optional*): A name for this device used within Home Assistant. - **address**: KNX group address of the sensor. -- **type** (Optional): "percent", "temperature", "illuminance", "speed_ms", "current". +- **type** (Optional): "percent", "temperature", "humidity", "illuminance", "brightness", "speed_ms", "current", "power", "electric_current", "electric_potential", "energy", "frequency", "heatflowrate", "phaseanglerad", "phaseangledeg", "powerfactor" or "speed". From 99c835699b3d1db2c082b1332cda730942a9b12f Mon Sep 17 00:00:00 2001 From: nordlead2005 Date: Tue, 6 Feb 2018 15:43:35 -0500 Subject: [PATCH 263/993] Dark Sky Precip Accumulation (#4587) --- source/_components/sensor.darksky.markdown | 1 + 1 file changed, 1 insertion(+) diff --git a/source/_components/sensor.darksky.markdown b/source/_components/sensor.darksky.markdown index 427d5afb68..b6a9d1006c 100644 --- a/source/_components/sensor.darksky.markdown +++ b/source/_components/sensor.darksky.markdown @@ -48,6 +48,7 @@ Configuration variables: - **precip_type**: The type of precipitation occurring. - **precip_intensity**: The average expected intensity of precipitation occurring. - **precip_probability**: A value between 0 and 1 which is representing the probability of precipitation. + - **precip_accumulation**: Daily snow accumulation. Returns unknown if no snow accumulation available. - **temperature**: The current temperature. - **apparent_temperature**: A numerical value representing the apparent (or "feels like") temperature. - **dew_point**: The dew point. From 15cf8299f5a1a8c5faeaf3fa6e63a71e1efae5fc Mon Sep 17 00:00:00 2001 From: cogneato Date: Wed, 7 Feb 2018 16:35:50 -0700 Subject: [PATCH 264/993] adding supported domains ref: https://github.com/home-assistant/home-assistant.github.io/issues/4036 Adds supported domains and default mappings. --- source/_components/google_assistant.markdown | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/source/_components/google_assistant.markdown b/source/_components/google_assistant.markdown index 350f07f170..95ef0fff19 100644 --- a/source/_components/google_assistant.markdown +++ b/source/_components/google_assistant.markdown @@ -107,6 +107,19 @@ entity_config: type: string {% endconfiguration %} +### {% linkable_title Available domains %} +Currently, the following domains are available to be used with Google Assistant, listed with their default types: + +- group = switch (on/off) +- scene = scene (on) +- script = scene (on) +- switch = switch (on/off) +- fan = switch (on/off) +- light = light (on/off/brightness/rgb color/color temp) +- cover = switch (on/off/set position (brightness) ) +- media_player = switch (on/off/set volume (brightness) ) +- climate = thermostat (temperature setting) + It's very important that you use very long strings for `client_id` and `access_token`. Those are essentially the credentials to your Home Assistant instance. You can generate them with the following command: ```bash From 045422dad6c49da2dd1e738962c58fc2ff8380b9 Mon Sep 17 00:00:00 2001 From: Anders Melchiorsen Date: Thu, 8 Feb 2018 07:46:16 +0100 Subject: [PATCH 265/993] Return of entity_id in template platforms (#4600) --- source/_components/binary_sensor.template.markdown | 4 ++++ source/_components/cover.template.markdown | 7 +++++++ source/_components/light.template.markdown | 4 ++++ source/_components/sensor.template.markdown | 4 ++++ source/_components/switch.template.markdown | 4 ++++ 5 files changed, 23 insertions(+) diff --git a/source/_components/binary_sensor.template.markdown b/source/_components/binary_sensor.template.markdown index 290e3af9bc..35b1d3f91b 100644 --- a/source/_components/binary_sensor.template.markdown +++ b/source/_components/binary_sensor.template.markdown @@ -48,6 +48,10 @@ binary_sensor: description: Name to use in the frontend. required: false type: string + entity_id: + description: A list of entity IDs so the sensor only reacts to state changes of these entities. This can be used if the automatic analysis fails to find all relevant entities. + required: false + type: string, list device_class: description: The type/class of the sensor to set the icon in the frontend. required: false diff --git a/source/_components/cover.template.markdown b/source/_components/cover.template.markdown index 1450be2d50..25dd15b787 100644 --- a/source/_components/cover.template.markdown +++ b/source/_components/cover.template.markdown @@ -48,6 +48,10 @@ cover: description: Name to use in the frontend. required: false type: string + entity_id: + description: A list of entity IDs so the cover only reacts to state changes of these entities. This can be used if the automatic analysis fails to find all relevant entities. + required: false + type: [string, list] value_template: description: Defines a template to get the state of the cover. Valid values are `open`/`true` or `closed`/`false`. [`value_template`](#value_template) and [`position_template`](#position_template) cannot be specified concurrently. required: exclusive @@ -197,6 +201,9 @@ cover: {% else %} mdi:window-closed {% endif %} + entity_id: + - cover.bedroom + - cover.livingroom sensor: - platform: template diff --git a/source/_components/light.template.markdown b/source/_components/light.template.markdown index 58648b4735..a9f1b834e4 100755 --- a/source/_components/light.template.markdown +++ b/source/_components/light.template.markdown @@ -51,6 +51,10 @@ light: description: Name to use in the frontend. required: false type: string + entity_id: + description: A list of entity IDs so the light only reacts to state changes of these entities. This can be used if the automatic analysis fails to find all relevant entities. + required: false + type: [string, list] value_template: description: Defines a template to get the state of the light. required: false diff --git a/source/_components/sensor.template.markdown b/source/_components/sensor.template.markdown index 2841dc027b..c8d8e2cd0a 100644 --- a/source/_components/sensor.template.markdown +++ b/source/_components/sensor.template.markdown @@ -45,6 +45,10 @@ sensor: description: Name to use in the frontend. required: false type: string + entity_id: + description: A list of entity IDs so the sensor only reacts to state changes of these entities. This can be used if the automatic analysis fails to find all relevant entities. + required: false + type: string, list unit_of_measurement: description: Defines the units of measurement of the sensor, if any. required: false diff --git a/source/_components/switch.template.markdown b/source/_components/switch.template.markdown index 86d0e95e57..3568915ccc 100644 --- a/source/_components/switch.template.markdown +++ b/source/_components/switch.template.markdown @@ -55,6 +55,10 @@ switch: description: Name to use in the frontend. required: false type: string + entity_id: + description: A list of entity IDs so the switch only reacts to state changes of these entities. This can be used if the automatic analysis fails to find all relevant entities. + required: false + type: [string, list] value_template: description: Defines a template to set the state of the switch. required: true From 9e03a1e774daf78110776d168b0883d87b2cf5b9 Mon Sep 17 00:00:00 2001 From: Marc Egli Date: Thu, 8 Feb 2018 15:52:44 +0100 Subject: [PATCH 266/993] Document new turn_on_action for philips TV (#4599) This got added in home-assistant/home-assistant/pull/12065 --- source/_components/media_player.philips_js.markdown | 1 + 1 file changed, 1 insertion(+) diff --git a/source/_components/media_player.philips_js.markdown b/source/_components/media_player.philips_js.markdown index d7e663e8e5..2db2fe8ded 100644 --- a/source/_components/media_player.philips_js.markdown +++ b/source/_components/media_player.philips_js.markdown @@ -29,3 +29,4 @@ Configuration variables: - **host** (*Required*): IP address of TV. - **name** (*Optional*): The name you would like to give to the Philips TV. +- **turn_on_action** (*Optional*): A script that will be executed to turn on the TV (can be used with wol). From 9d918bd4c482b88c3abbe2709e574a0593e76555 Mon Sep 17 00:00:00 2001 From: Anders Melchiorsen Date: Thu, 8 Feb 2018 15:53:38 +0100 Subject: [PATCH 267/993] Remove influxdb retry_queue_limit (#4598) --- source/_components/influxdb.markdown | 1 - 1 file changed, 1 deletion(-) diff --git a/source/_components/influxdb.markdown b/source/_components/influxdb.markdown index f2291bda29..407ad76871 100644 --- a/source/_components/influxdb.markdown +++ b/source/_components/influxdb.markdown @@ -35,7 +35,6 @@ Configuration variables: - **ssl** (*Optional*): Use https instead of http to connect. Defaults to false. - **verify_ssl** (*Optional*): Verify SSL certificate for https request. Defaults to false. - **max_retries** (*Optional*): Allow the component to retry if there was a network error when transmitting data -- **retry_queue_limit** (*Optional*): If retry enabled, specify how much calls are allowed to be queued for retry. - **default_measurement** (*Optional*): Measurement name to use when an entity doesn't have a unit. Defaults to entity id. - **override_measurement** (*Optional*): Measurement name to use instead of unit or default measurement. This will store all data points in a single measurement. - **component_config**, **component_config_domain**, **component_config_glob** (*Optional*): These attributes contains component-specific override values. See [Customizing devices and services](https://home-assistant.io/getting-started/customizing-devices/) for format. From af74298fddefca6f78e729aa848fa16080241318 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Thu, 8 Feb 2018 11:07:00 -0800 Subject: [PATCH 268/993] Bye disqus --- _config.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/_config.yml b/_config.yml index 25bc8745bc..286ea08bab 100644 --- a/_config.yml +++ b/_config.yml @@ -150,4 +150,6 @@ patch_version_notes: "#release-0621---january-30" # Minor release (Example #release-0431---april-25): # Date we moved to Discourse for comments -disqus_end_date: 2018-01-26 0:00:00 +# disqus_end_date: 2018-01-26 0:00:00 +# Disqus is adding gross ads, move all comments to discourse. +disqus_end_date: 2010-01-26 0:00:00 From a7fb895c5a7feb853fece0537ebec3627446aba2 Mon Sep 17 00:00:00 2001 From: hawk259 Date: Thu, 8 Feb 2018 15:02:26 -0500 Subject: [PATCH 269/993] Binary Sensor Template: Add icon_template and entity_picture_template support (#4373) Sensor Template: fix entity_picture_template conf --- source/_components/binary_sensor.template.markdown | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/source/_components/binary_sensor.template.markdown b/source/_components/binary_sensor.template.markdown index 35b1d3f91b..8a28a6fbff 100644 --- a/source/_components/binary_sensor.template.markdown +++ b/source/_components/binary_sensor.template.markdown @@ -61,6 +61,14 @@ binary_sensor: description: Defines a template to set the state of the sensor. required: true type: template + icon_template: + description: Defines a template for the icon of the sensor. + required: false + type: template + entity_picture_template: + description: Defines a template for the entity picture of the sensor. + required: false + type: template delay_on: description: The amount of time the template state must be ***met*** before this sensor will switch to `on`. required: false From f9802d1c0dde7a627c500eef2fe0ee4f65bc39af Mon Sep 17 00:00:00 2001 From: Daniel Perna Date: Thu, 8 Feb 2018 21:24:10 +0100 Subject: [PATCH 270/993] Added information for new sesame-option (#4550) --- source/_addons/configurator.markdown | 2 ++ 1 file changed, 2 insertions(+) diff --git a/source/_addons/configurator.markdown b/source/_addons/configurator.markdown index 4b91a46b66..c601025a12 100644 --- a/source/_addons/configurator.markdown +++ b/source/_addons/configurator.markdown @@ -49,6 +49,7 @@ Screenshot of the HASS Configurator. "banlimit": 0, "ignore_pattern": ["__pycache__"], "dirsfirst": false, + "sesame": "somesecretnobodycanguess" } ``` @@ -60,6 +61,7 @@ Screenshot of the HASS Configurator. - **banlimit** (*Optional*): Ban access from IPs after `banlimit` failed login attempts. The default value `0` disables this feature. Restart the add-on to clear the list of banned IP addresses. - **ignore_pattern** (*Optional*): Files and folders to ignore in the UI. - **dirsfirst** (*Optional*): List directories before files in the file browser. +- **sesame** (*Optional*): Secret token to dynamically allow access from the IP the request originates from. Open your bookmark https://hassio.yourdomain.com:8123/somesecretnobodycanguess while `allowed_networks` is set to `[]` and boom! Open Sesame! You can use the _Network status_ menu to revoke IP addresses for which access has been granted. ### {% linkable_title Embedding into Home-Assistant %} From 83c51ebc775ba51105265d640cecb03c1750db0d Mon Sep 17 00:00:00 2001 From: Gerben Meijer Date: Thu, 8 Feb 2018 21:27:42 +0100 Subject: [PATCH 271/993] Update flux stop_time default. (#4553) --- 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 69d3e8671e..7ebd649bb4 100644 --- a/source/_components/switch.flux.markdown +++ b/source/_components/switch.flux.markdown @@ -36,7 +36,7 @@ Configuration variables: - **lights** (*Required*) array: List of light entities. - **name** (*Optional*): The name to use when displaying this switch. - **start_time** (*Optional*): The start time. Default to sunrise. -- **stop_time** (*Optional*): The stop time. Defaults to 22:00. +- **stop_time** (*Optional*): The stop time. Defaults to dusk. - **start_colortemp** (*Optional*): The color temperature at the start. Defaults to `4000`. - **sunset_colortemp** (*Optional*): The sun set color temperature. Defaults to `3000`. - **stop_colortemp** (*Optional*): The color temperature at the end. Defaults to `1900`. From 809034c8048a302b5001ba89c1d3a488b7804ef3 Mon Sep 17 00:00:00 2001 From: Conrad Juhl Andersen Date: Thu, 8 Feb 2018 21:32:06 +0100 Subject: [PATCH 272/993] added remote.xiaomi_miio component (#4513) * added remote.xiaomi_miio component * added changes * updated to explain different command types * Fixed cross-linking * :pencil2: Minor improvements --- .../_components/remote.xiaomi_miio.markdown | 148 ++++++++++++++++++ .../_components/vacuum.xiaomi_miio.markdown | 2 +- 2 files changed, 149 insertions(+), 1 deletion(-) create mode 100644 source/_components/remote.xiaomi_miio.markdown diff --git a/source/_components/remote.xiaomi_miio.markdown b/source/_components/remote.xiaomi_miio.markdown new file mode 100644 index 0000000000..8284a73868 --- /dev/null +++ b/source/_components/remote.xiaomi_miio.markdown @@ -0,0 +1,148 @@ +--- +layout: page +title: "Xiaomi IR Remote" +description: "Instructions for how to integrate the Xiaomi IR Remote within Home Assistant." +date: 2017-01-25 17:08 +sidebar: true +comments: false +sharing: true +footer: true +logo: xiaomi.png +ha_category: Remote +ha_release: 0.63 +ha_iot_class: "Local Polling" +--- + +The `xiaomi miio` remote platform allows you to send IR commands from your Xiaomi IR Remote (ChuangmiIr). + +Please follow the instructions on [Retrieving the Access Token](/components/vacuum.xiaomi_miio/#retrieving-the-access-token) to get the API token to use in the `configuration.yaml` file. + +## {% linkable_title Configuring the Platform %} + +To add a Xiaomi IR Remote to your installation, add the following to your configuration.yaml file: +```yaml +remote: + - platform: xiaomi_miio + host: 192.168.42.42 + token: YOUR_TOKEN +``` + +{% configuration %} +host: + description: The IP of your remote. + required: true + type: string +token: + description: The API token of your remote. + required: true + type: string +name: + description: The name of your remote. + required: false + type: string +slot: + description: The slot used to save learned command. + required: false + type: int + default: 1 +timeout: + description: Timeout for learning a new command. + required: false + type: int + default: 30 +hidden: + description: Hide the entity from UI. There is currently no reason to show the entity in UI as turning it off or on does nothing. + required: false + type: boolean + default: True +commands: + required: false + type: map + keys: + command: + description: A list of commands as [raw (learned command)](/components/remote.xiaomi_miio/#raw) or [pronto hex code](/components/remote.xiaomi_miio/#pronto-hex-code). + required: true + type: list + +{% endconfiguration %} + +## {% linkable_title Full Configuration %} + +```yaml +remote: + - platform: xiaomi_miio + name: "bathroom remote" + host: 192.168.42.42 + token: YOUR_TOKEN + slot: 1 + timeout: 30 + hidden: false + commands: + activate_towel_heater: + command: + - raw:base64:[optional_frequency] + read_bad_poem: + command: + - raw:base64:[optional_frequency] + - pronto:pronto_hex:[optional_repeat] +``` + +## {% linkable_title Use named commands to create UI buttons %} + +```yaml +script: + towel_heater: + sequence: + - service: remote.send_command + entity_id: 'remote.bathroom_remote' + data: + command: + - 'activate_towel_heater' + please_cover_your_ears: + sequence: + - service: remote.send_command + entity_id: 'remote.bathroom_remote' + data: + command: + - 'read_bad_poem' +``` + +## {% linkable_title Command Types %} + +The Xiaomi IR Remote Platform currently supports two different formats for IR codes. + +### {% linkable_title Raw %} + +A raw command is a command learned from [`remote.xiaomi_miio_learn_command`](/components/remote.xiaomi_miio/#remotexiaomi_miio_learn_command). + +A raw command is defined as in the following example: +`raw:Z6UFANEAAAAjAQAAAwkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQIAE=` +with an optional last parameter of frequency: +`raw:Z6UFANEAAAAjAQAAAwkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQIAE=:38400` + +### {% linkable_title Pronto Hex Code %} + +A pronto hex code is a hex code often supplied by the device manufacturer. + +A pronto hex code is defined as in the following example: +`pronto:0000 006C 0022 0002 015B 00AD 0016 0016 0016 0016 0016 0016 0016 0016 0016 0016 0016 0016 0016 0016 0016 0016 0016 0041 0016 0041 0016 0041 0016 0041 0016 0041 0016 0041 0016 0041 0016 0016 0016 0016 0016 0041 0016 0016 0016 0041 0016 0016 0016 0016 0016 0016 0016 0016 0016 0041 0016 0016 0016 0041 0016 0016 0016 0041 0016 0041 0016 0041 0016 0041 0016 0623 015B 0057 0016 0E6E` +with an optional last parameter of repeats (required by some devices): +`pronto:0000 006C 0022 0002 015B 00AD 0016 0016 0016 0016 0016 0016 0016 0016 0016 0016 0016 0016 0016 0016 0016 0016 0016 0041 0016 0041 0016 0041 0016 0041 0016 0041 0016 0041 0016 0041 0016 0016 0016 0016 0016 0041 0016 0016 0016 0041 0016 0016 0016 0016 0016 0016 0016 0016 0016 0041 0016 0016 0016 0041 0016 0016 0016 0041 0016 0041 0016 0041 0016 0041 0016 0623 015B 0057 0016 0E6E:2` + +## {% linkable_title Platform Services %} + +The Xiaomi IR Remote Platform registers two services. + +### {% linkable_title `remote.send_command` %} + +Allows sending either named commands using an identifier or sending commands as one of the two types defined in [Command Types](/components/remote.xiaomi_miio/#command-types). + +### {% linkable_title `remote.xiaomi_miio_learn_command` %} + +Used to learn new commands. + +Use the entity_id of the Xiaomi IR Remote to start a learning process. + +`slot` and `timeout` can be specified, but multiple commands learned to the same slot can still be sent using [`remote.send_command`](/components/remote.xiaomi_miio/#remotesend_command) even if they are overwritten. + +After learning the command the base64 string can be found as a notification in Overview, the string can be copied by left clicking on the string and choose the copy option. diff --git a/source/_components/vacuum.xiaomi_miio.markdown b/source/_components/vacuum.xiaomi_miio.markdown index 4abc27588c..b04cfe04f3 100644 --- a/source/_components/vacuum.xiaomi_miio.markdown +++ b/source/_components/vacuum.xiaomi_miio.markdown @@ -134,7 +134,7 @@ The following table shows the units of measurement for each attribute:

    This token (32 hexadecimal characters) is required for the Xiaomi Mi Robot -Vacuum and Xiaomi Philips Lights. The Xiaomi Gateway uses another security +Vacuum, Xiaomi Philips Lights and Xiaomi IR Remote. The Xiaomi Gateway uses another security method and requires a `key` (16 alphanumeric chars), which can be obtained easily via a hidden menu item at the Mi-Home app.

    From b6258f5326d76bbe639e2382c5924ca494e404fc Mon Sep 17 00:00:00 2001 From: DubhAd Date: Thu, 8 Feb 2018 20:33:10 +0000 Subject: [PATCH 273/993] Added note about display in Overview (#4597) It's come up quite a few times, with people asking why some scripts have a toggle, and some don't. This is to add a little clarity about it (I'm **assuming** that `wait` also results in a toggle - it'd be good to get that verified). --- source/_components/script.markdown | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/source/_components/script.markdown b/source/_components/script.markdown index 4b0fa016dc..52dd111053 100644 --- a/source/_components/script.markdown +++ b/source/_components/script.markdown @@ -112,3 +112,9 @@ script: title: "{% raw %}{{ title }}{% endraw %}" message: "{% raw %}{{ message }}{% endraw %}" ``` + +### {% linkable_title In the Overview %} + +Scripts in the Overview panel will be displayed with an **ACTIVATE** button if the device has no `delay:` or `wait:` statement, and as a toggle switch if it has either of those. + +This is to enable you to stop a running script. From d5404ed82e9868a209d7fc4420a23e16563ebc4f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pierre=20St=C3=A5hl?= Date: Thu, 8 Feb 2018 21:45:39 +0100 Subject: [PATCH 274/993] Add documentation for system_log_event (#4549) * Add documentation for system_log_event * :pencil2: Minor improvements --- source/_components/system_log.markdown | 65 +++++++++++++++++++++++++- 1 file changed, 64 insertions(+), 1 deletion(-) diff --git a/source/_components/system_log.markdown b/source/_components/system_log.markdown index fae6692223..ef3ba0f5ed 100644 --- a/source/_components/system_log.markdown +++ b/source/_components/system_log.markdown @@ -12,7 +12,7 @@ ha_category: Other ha_release: 0.58 --- -The `system_log` component stores information about all logged errors and warnings in Home Assistant. All collected information is accessible directly in the frontend, just navigate to the `Info` section under `Developer Tools`. In order to not overload Home Assistant with log data, only the 50 last errors and warnings will be stored. Older entries are automatically discarded from the log. It is possible to change the amount of stored log entries using the parameter `max_entries`. +The `system_log` component stores information about all logged errors and warnings in Home Assistant. All collected information is accessible directly in the frontend, just navigate to the `Info` section under `Developer Tools`. In order to not overload Home Assistant with log data, only the 50 last errors and warnings will be stored. Older entries are automatically discarded from the log. It is possible to change the number of stored log entries using the parameter `max_entries`. This component is automatically loaded by the `frontend` (so no need to do anything if you are using the frontend). If you are not doing so, or if you wish to change a parameter, add the following section to your `configuration.yaml` file: @@ -35,3 +35,66 @@ max_entries: To manually clear the system log, call this service. +## {% linkable_title Events %} + +Errors and warnings are posted as the event `system_log_event`, so it is possible to write automations that trigger whenever a warning or error occurs. The following information is included in each event: + +| Field | Description | +|------------------------------------------------------------------------------------------| +| `level` | Either `WARNING` or `ERROR` depending on severity. | +| `source` | File that triggered the error, e.g., `core.py` or `media_player/yamaha.py`. | +| `exception` | Full stack trace if available, otherwise empty string. | +| `message` | Descriptive message of the error, e.g., "Error handling request". | +| `timestamp` | Unix timestamp with as a double, e.g., 1517241010.237416. | + +Live examples of these events can be found in the Home Assistant log file or by just looking in the system log. An example could, for instance, look like this: + + + +The message ("Unable to find service..."), source (`core.py`) and level (`WARNING`) can easily be extracted from the image. Exact timestamp and stack trace is shown if the entry is selected. + +## {% linkable_title Examples %} + +Here are some examples using the events posted by `system_log`. + +### {% linkable_title Counting Number of Warnings %} + +This will create a `counter` that increases every time a warning is logged: + +```yaml +counter: + warning_counter: + name: Warnings + icon: mdi:alert + +automation: + - alias: Count warnings + trigger: + platform: event + event_type: system_log_event + event_data: + level: WARNING + action: + service: counter.increment + entity_id: counter.warning_counter +``` + +### {% linkable_title Conditional Messages %} + +This automation will create a persistent notification whenever an error or warning is logged that has the word "service" in the message: + +```yaml +automation: + - alias: Create notifications for "service" errors + trigger: + platform: event + event_type: system_log_event + condition: + condition: template + value_template: {% raw %}'{{ "service" in trigger.event.data.message }}'{% endraw %} + action: + service: persistent_notification.create + data_template: + title: Something bad happened + message: {% raw %}'{{ trigger.event.data.message }}'{% endraw %} +``` From 08b3fee9bc6242d56faacb4a1c6049af790491fc Mon Sep 17 00:00:00 2001 From: JonnyaiR Date: Thu, 8 Feb 2018 21:46:30 +0100 Subject: [PATCH 275/993] Update switch.pilight.markdown to add variables and update links (#4522) * Update switch.pilight.markdown to add variables and update links The variables unitcode and programcode are missing from the variables-list, unitcode is mentioned in the text below but they should be listed as optional variables if they are in fact optional variables. furthermore the wiki-links to pilight are outdated, so i replaced the wiki.pilight.org links with manual.pilight,org links to their respective updated pages. * Update switch.pilight.markdown delete programcode * :pencil2: Small improvements --- source/_components/switch.pilight.markdown | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/source/_components/switch.pilight.markdown b/source/_components/switch.pilight.markdown index 6bd48c3087..8c803184a4 100644 --- a/source/_components/switch.pilight.markdown +++ b/source/_components/switch.pilight.markdown @@ -13,10 +13,9 @@ ha_release: 0.26 ha_iot_class: "Local Polling" --- - The `pilight` switch platform is issuing 433 MHz commands using [pilight](https://www.pilight.org/) to turn a 433 MHz device on or off. The Pilight Home Assistant hub has to be set up. -Additionally RF commands can be defined that trigger this switch to turn on and off. This allows you to also use the remote shipped with your 433 MHz switch without mixing up the Home Assistant states. You can even define several on/off commands, thus several RF remotes to toggle this switch. +Additionally, RF commands can be defined that trigger this switch to turn on and off. This allows you to also use the remote shipped with your 433 MHz switch without mixing up the Home Assistant states. You can even define several on/off commands, thus several RF remotes to toggle this switch. To be really sure that Home Assistant knows the actual state of your device it is recommended to use the RF remote with codes unknown to any of your 433 MHz devices. Thus you use the remote to trigger this switch to send the correct RF code to the device. @@ -42,20 +41,21 @@ Configuration variables: - **[entry]** (*Required*): Name of the command switch. Multiple entries are possible. - **on_code** (*Required*): The code to turn the device on. - **off_code** (*Required*): The code to turn the device off. - - **on_code_receive** (*Optional*): If given, this command will turn the switch on if it is received by Pilight. - - **off_code_receive** (*Optional*): If given, this command will turn the switch off if it is received by Pilight. + - **on_code_receive** (*Optional*): If given, this command will turn the switch on if it is received by pilight. + - **off_code_receive** (*Optional*): If given, this command will turn the switch off if it is received by pilight. Variables for the different codes (`on_code` and `off_code`): - **protocol** (*Required*): Protocol to use, eg. `intertechno_old` or `daycom`. - **systemcode** (*Optional*): The systemcode of the device. -- **unit** (*Optional*): The unit to use. +- **unit** (*Optional*): The unit to use (is equivalent to `pilight-send --unit`). +- **unitcode** (*Optional*): The unitcode to use (is equivalent to `pilight-send --unitcode`). - **id** (*Optional*): ID of the device - **state** (*Optional*): `'on'` or `'off'` has to be in apostrophes to be parsed correctly. - **'off'** (*Optional*): `1` or `0` - **'on'** (*Optional*): `1` or `0` -For possible code entries look at the [pilight API](https://www.pilight.org/development/api/). All commands allowed by [pilight-send](https://wiki.pilight.org/doku.php/psend) can be used. Which means that if for a certain protocol there are different parameters used, you should be able to replace the variables above by the proper ones required by the specific protocol. When using the `elro_800_switch` or `mumbi` protocol for example, you will have to replace the variable `unit` with `unitcode` or there will be errors occurring. +For possible code entries, look at the [pilight API](https://manual.pilight.org/development/api.html). All commands allowed by [pilight-send](https://manual.pilight.org/programs/send.html) can be used. Which means that if, for a certain protocol, there are different parameters used, you should be able to replace the variables above by the proper ones required by the specific protocol. When using the `elro_800_switch` or `mumbi` protocol, for example, you will have to replace the variable `unit` with `unitcode` or there will be errors occurring. Variables for the different receive codes (`on_code_receive` and `off_code_receive`): From 34c5baefa3067ad9e31ce08a4db635fef341632c Mon Sep 17 00:00:00 2001 From: DubhAd Date: Thu, 8 Feb 2018 20:48:06 +0000 Subject: [PATCH 276/993] Added note about error (#4559) Adding a specific note about the error that indicates the library is missing --- source/_docs/z-wave/installation.markdown | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/source/_docs/z-wave/installation.markdown b/source/_docs/z-wave/installation.markdown index 1846468f82..63904021c4 100644 --- a/source/_docs/z-wave/installation.markdown +++ b/source/_docs/z-wave/installation.markdown @@ -232,3 +232,11 @@ sudo chmod g+rw /dev/ttyAMA0 ### {% linkable_title Device path changes %} If your device path changes when you restart, see [this guide](http://hintshop.ludvig.co.nz/show/persistent-names-usb-serial-devices/) on fixing it. + +### {% Unable to install python_openzwave %} + +If you're getting errors like: + + openzwave-embed/open-zwave-master/libopenzwave.a: No such file or directory + +Then the problem is that you're missing `libudev-dev`, please [install it](/docs/z-wave/installation/#linux-except-hassio). From f4ac7feb29711aa688df050f51cc118a7b473446 Mon Sep 17 00:00:00 2001 From: basst22778 Date: Thu, 8 Feb 2018 21:52:05 +0100 Subject: [PATCH 277/993] Added Hint to Unpack the file (#4584) Flashing will stop if you try to flash the .img.bz2 file directly on MacOS --- source/hassio/installation.markdown | 2 ++ 1 file changed, 2 insertions(+) diff --git a/source/hassio/installation.markdown b/source/hassio/installation.markdown index be34f95a30..1a3113dffc 100644 --- a/source/hassio/installation.markdown +++ b/source/hassio/installation.markdown @@ -16,6 +16,8 @@ Hass.io images are available for all available Raspberry Pi and Intel NUC platfo - [Raspberry Pi 2][pi2] - [Raspberry Pi 3][pi3] - [Intel NUC][nuc] + +- Unpack the .bz2 File - Flash the downloaded image to an SD card using [Etcher]. - Optional - Setup the WiFi or static IP: On the SD-card, edit the `system-connections/resin-sample` file and follow the [ResinOS howto][resinos-network]. - Insert SD card to Raspberry Pi and turn it on. On first boot, it downloads the latest version of Home Assistant which takes ~20 minutes (slower/faster depending on the platform). From 23d3db267b2ffe2df9fdc6777ceba6aaffe15412 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Thu, 8 Feb 2018 15:36:44 -0800 Subject: [PATCH 278/993] Update python_script.markdown --- source/_components/python_script.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/python_script.markdown b/source/_components/python_script.markdown index 48bd6a1a14..a470ec3960 100644 --- a/source/_components/python_script.markdown +++ b/source/_components/python_script.markdown @@ -44,4 +44,4 @@ hass.bus.fire(name, { "wow": "from a Python script!" }) } ``` -For [`python_script:` examples](/components/python_script/) visit the [Scripts section](https://community.home-assistant.io/c/projects/scripts) in our forum. +For examples, visit the [Scripts section](https://community.home-assistant.io/c/projects/scripts) in our forum. From 73b0e785fc91e89ce2f53bb61834b82a87eae158 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Thu, 8 Feb 2018 22:23:50 -0800 Subject: [PATCH 279/993] Add blog post disabling Disqus --- source/_docs/z-wave/installation.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_docs/z-wave/installation.markdown b/source/_docs/z-wave/installation.markdown index 63904021c4..4031738a7d 100644 --- a/source/_docs/z-wave/installation.markdown +++ b/source/_docs/z-wave/installation.markdown @@ -233,7 +233,7 @@ sudo chmod g+rw /dev/ttyAMA0 If your device path changes when you restart, see [this guide](http://hintshop.ludvig.co.nz/show/persistent-names-usb-serial-devices/) on fixing it. -### {% Unable to install python_openzwave %} +### {% linkable_title Unable to install python_openzwave %} If you're getting errors like: From 12d5f0486fd39f849c5ae4f96edbc191cbb0cbc2 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Thu, 8 Feb 2018 22:24:04 -0800 Subject: [PATCH 280/993] Add blog post disabling Disqus --- .../2018-02-09-disabling-disqus.markdown | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 source/_posts/2018-02-09-disabling-disqus.markdown diff --git a/source/_posts/2018-02-09-disabling-disqus.markdown b/source/_posts/2018-02-09-disabling-disqus.markdown new file mode 100644 index 0000000000..980c035521 --- /dev/null +++ b/source/_posts/2018-02-09-disabling-disqus.markdown @@ -0,0 +1,19 @@ +--- +layout: post +title: "Disabling Disqus comments" +description: "We have disabled Disqus comments on the site due to inappropriate advertisements." +date: 2018-02-09 01:00:00 +date_formatted: "February 9, 2018" +author: Paulus Schoutsen +author_twitter: balloob +comments: true +categories: Community +--- + +Last week, starting with the release of [Home Assistant 0.62](https://home-assistant.io/blog/2018/01/27/release-62/), we switched to using our [community forums](https://community.home-assistant.io) for comments on our blog posts. By doing so, people are able to use their existing Home Assistant community accounts to comment on our blog posts and engage with one another. It has been easier for our users to stay in the loop with one less channel to keep track off. + +Previously, we were using the free version of Disqus to power comments on our blog. After the switch, to preserve the old comments, we decided to keep Disqus active on the older blog post pages. However, today we decided to turn them off. + +Today Disqus changed their advertisement strategy and turned on irrelevant graphical advertisement above and below the comment thread ([screenshot](https://twitter.com/balloob/status/961677501725421568)). On a phone, it took so much screen real estate that it filled the whole page with an advertisement for weight loss milk. Previously, Disqus had advertisements in an unobtrusive way: showing suggested content a visitor might also be interesed in. + +Today we have switched all blog posts to the new commenting system and are no longer serving Disqus comments. We are exploring ways to restore the old comments. From f2dba1f614af51f84eadbdeab5ca2f566f334ad6 Mon Sep 17 00:00:00 2001 From: Tabakhase Date: Fri, 9 Feb 2018 11:05:22 +0100 Subject: [PATCH 281/993] add documentation for "shared_gpio" flag to component switch.rpi_gpio --- source/_components/switch.rpi_gpio.markdown | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/source/_components/switch.rpi_gpio.markdown b/source/_components/switch.rpi_gpio.markdown index 2e1d74786d..87f42df282 100644 --- a/source/_components/switch.rpi_gpio.markdown +++ b/source/_components/switch.rpi_gpio.markdown @@ -32,6 +32,7 @@ Configuration variables: - **ports** array (*Required*): Array of used ports. - **port: name** (*Required*): Port numbers and corresponding names (GPIO #). - **invert_logic** (*Optional*): If true, inverts the output logic to ACTIVE LOW. Default is false (ACTIVE HIGH). +- **shared_gpio** (*Optional*): If true, forces a GPIO.setup() before each write. Default is false. For more details about the GPIO layout, visit the Wikipedia [article](https://en.wikipedia.org/wiki/Raspberry_Pi#GPIO_connector) about the Raspberry Pi. @@ -46,4 +47,14 @@ switch: 17: Speaker Relay ``` +In case you have any other python scripts running that use RPi.GPIO no values will be written after the initial HASS-start. +Setting **shared_gpio** to true will reinit the pin before each write, working around this issue. +```yaml +# Example configuration.yaml entry +switch: + - platform: rpi_gpio + shared_gpio: true + ports: + 19: LED-Red +``` From b6e9abe95d6ee5d05a3a6f7a859a1fdf662eb039 Mon Sep 17 00:00:00 2001 From: Mahasri Kalavala Date: Fri, 9 Feb 2018 11:39:38 -0500 Subject: [PATCH 282/993] Added additional details to the Developer Tools. More documentation to help clarify how the Developer Tools is and how it should be used. --- source/_docs/tools/dev-tools.markdown | 76 +++++++++++++++++++++++++++ 1 file changed, 76 insertions(+) diff --git a/source/_docs/tools/dev-tools.markdown b/source/_docs/tools/dev-tools.markdown index 1fbbe59fa3..88e282683c 100644 --- a/source/_docs/tools/dev-tools.markdown +++ b/source/_docs/tools/dev-tools.markdown @@ -24,3 +24,79 @@ Screenshot of Home Assistant's Developer Tools. | Templates | service developer tool icon | Renders templates | | Info | service developer tool icon | Details about Home Assistant | +## What can I do with Developer Tools? +The Developer Tools is meant for **all** (not just for the developers) to quickly try out things - like calling services, update states, raising events, and publish messages in mqtt…etc.). It is also a necessary tool for those who write custom automations and scripts by hand. The following describes each of the section in detail. + +{% linkable_title Services %} + +This section is used to call Services that are available in the ServiceRegistry. + +The list of services in the “Service” drop down are automatically populated based on the components that are found in the configuration, automation and script files. If a desired service does not exist, it means either the component is not configured properly or not defined in the configuration, automation or script files. + +When a Service is selected, and if that service requires an `entity_id` to be passed, the “Entity” drop down will automatically be populated with corresponding entities. + +A Service may also require additional input to be passed. It is commonly referred to as “service data”. The service data is only accepted in the JSON format, and it may be optional depending on the service. + +When an entity is selected from the Entity drop down, it automatically populates service data with the corresponding `entity_id`. The service data JSON can then be modified to pass additional \[optional\] parameters. The following is an illustration on how to call a `light.turn_on` service. + +To turn on a light bulb, use the following steps: +1. Select `light.turn_on` from the Service drop down +2. Select the entity (typically the light bulb) from the Entity drop down (if no entity_id is selected, it turns on ALL lights) +3. If an entity is selected, the service data is populated with basic JSON that will be passed to the service. An additional data can also be passed by updating the JSON as below. + +```json +{ + "entity_id": "light.bedroom", + "brightness": 255, + "rgb_color": [255, 0, 0] +} +``` +{% linkable_title States %} + +This section shows all the available entities, their corresponding state and the attribute values. The state and the attribute information is what Home Assistant sees at run time. To update the entity with a new state, or a new attribute value, click on the entity, scroll to the top, and modify the values, and click on “SET STATE” button. + +Note that this is the state representation of a device within Home Assistant. That means, it is what Home Assistant sees, and it does not communicate with the actual device in any manner. The updated information can still be used to trigger events, and state changes. To communicate with the actual device, it is recommended to call services in the services section above, instead of updating state. + +For ex: Changing the `light.bedroom` state from `off` to `on` does not turn on the light. If there is an automation that triggers on the `state` change of the `light.bedroom`, it will be triggered – even though the actual bulb has not turned on. Also, when the bulb state changes – the state information will be overridden. In other words, the changes that are made through the “States” section are temporary, and is recommended to use for testing purposes only. + +{% linkable_title Events %} + +This Events section is as basic as it can get. It does only one thing – fires events on the event bus. +To fire an event, simply type the name of the event, and pass the event data in JSON format. +For ex: To fire a custom event, enter the `event_type` as `event_light_state_changed` and the event data JSON as + +```json +{ "state":"on" } +``` + +If there is an automation that handles that event, it will be automatically triggered. See below: +```yaml +- alias: Capture Event + trigger: + platform: event + event_type: event_light_state_changed + action: + - service: notify.notify + data_template: + message: "Light is turned {{ trigger.event.data.state }}" +``` + +{% linkable_title Template Editor %} + +The Template Editor provides a way to test the template code quickly. When the Template Editor page is loaded, it comes with a sample template code that illustrates how the code can be written and tested. + +It has two sections, code goes on the left hand side, and the output is shown on the right hand side. The code can be removed and replaced, and when the page is loaded/refreshed, the default sample code will be loaded back. + +It is a good practice to test the template code in the template editor prior to putting it in automations and scripts. + +For more information about jinja2, visit [jinja2 documentation](http://jinja.pocoo.org/docs/dev/templates/), and also read templating document [here](https://home-assistant.io/topics/templating/) + + +{% linkable_title mqtt %} + +This section is only visible if the MQTT is configured. To configure MQTT, add `mqtt:` to the `configuration.yaml` file. For more information, refer to [mqtt]( https://home-assistant.io/components/mqtt/) +Even though MQTT in general provides deeper functionality, the developer tools section of MQTT is limited to publishing messages to a given topic. It supports templates for the payload. To publish a message, simply specify the topic name and the payload and click “PUBLISH” button. + +{% linkable_title Info %} + +The Information tab simply provides information about the current installed version, additional links and credits. The tab also contains a section that shows `syslog` information, and the contents of `home-assistant.log` with an option to clear and refresh the logs. From de28af78b60003c48392ce9530afba8299210272 Mon Sep 17 00:00:00 2001 From: Marko Korhonen Date: Fri, 9 Feb 2018 21:40:55 +0200 Subject: [PATCH 283/993] Added single quotes around format value (#4609) The service wont work without these --- source/_components/tts.voicerss.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/tts.voicerss.markdown b/source/_components/tts.voicerss.markdown index a256b144dc..612ae41082 100644 --- a/source/_components/tts.voicerss.markdown +++ b/source/_components/tts.voicerss.markdown @@ -41,7 +41,7 @@ tts: api_key: 'XXXXX' language: 'de-de' codec: mp3 - format: 8khz_8bit_mono + format: '8khz_8bit_mono' ``` Please note, some media_players require a certain format. For example the Sonos requires a format of '44khz_16bit_stereo' From f5a18c25544421006db4272923885f97be61792d Mon Sep 17 00:00:00 2001 From: Robin Date: Fri, 9 Feb 2018 19:52:43 +0000 Subject: [PATCH 284/993] Add sharing images between HASS instances (#4607) * Add sharing images between HASS instances Adds description of how to share camera feeds between multiple home-assistant instances using the REST API. * Minor changes --- source/_components/camera.generic.markdown | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/source/_components/camera.generic.markdown b/source/_components/camera.generic.markdown index 3f99910e1c..71a16ba40e 100644 --- a/source/_components/camera.generic.markdown +++ b/source/_components/camera.generic.markdown @@ -68,3 +68,14 @@ camera: name: Some Image still_image_url: https://127.0.0.1:8123/local/your_image.png ``` + +### {% linkable_title Sharing a camera feed from one Home Assistant instance to another %} + +If you are running more than one Home Assistant instance (let's call them the 'host' and 'receiver' instances) you may wish to display the camera feed from the host instance on the receiver instance. You can use the [REST API](/developers/rest_api/#get-apicamera_proxycameraltentity_id) to access the camera feed on the host (IP address 127.0.0.5) and display it on the receiver instance by configuring the receiver with the the following: + +```yaml +camera: + - platform: generic + name: Host instance camera feed + still_image_url: https://127.0.0.5:8123/api/camera_proxy/camera.live_view +``` From 1247a72051b00dcc338805b49e5f2df85202ca62 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Fri, 9 Feb 2018 21:02:30 +0100 Subject: [PATCH 285/993] Minor updates --- source/_docs/z-wave/installation.markdown | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/source/_docs/z-wave/installation.markdown b/source/_docs/z-wave/installation.markdown index 4031738a7d..b110e34863 100644 --- a/source/_docs/z-wave/installation.markdown +++ b/source/_docs/z-wave/installation.markdown @@ -189,7 +189,7 @@ Security Z-Wave devices require a network key before being added to the network An easy script to generate a random key: ```bash -cat /dev/urandom | tr -dc '0-9A-F' | fold -w 32 | head -n 1 | sed -e 's/\(..\)/0x\1, /g' -e 's/, $//' +$ cat /dev/urandom | tr -dc '0-9A-F' | fold -w 32 | head -n 1 | sed -e 's/\(..\)/0x\1, /g' -e 's/, $//' ``` ```yaml @@ -213,7 +213,7 @@ The first run after adding a device is when the `zwave` component will take time Sometimes the device may not be accessible and you'll get an error message upon startup about not being able to set up Z-Wave. Run the following command for your device path: ```bash -ls -l /dev/ttyAMA0 +$ ls -l /dev/ttyAMA0 ``` You should then see something like this: @@ -225,15 +225,15 @@ crw-rw---- 1 root dialout 204, 64 Apr 1 12:34 /dev/ttyAMA0 The important pieces are the first piece `crw-rw----` and the group `dialout`. If those are different then, for your device path, run: ```bash -sudo chgrp dialout /dev/ttyAMA0 -sudo chmod g+rw /dev/ttyAMA0 +$ sudo chgrp dialout /dev/ttyAMA0 +$ sudo chmod g+rw /dev/ttyAMA0 ``` ### {% linkable_title Device path changes %} If your device path changes when you restart, see [this guide](http://hintshop.ludvig.co.nz/show/persistent-names-usb-serial-devices/) on fixing it. -### {% linkable_title Unable to install python_openzwave %} +### {% linkable_title Unable to install Python Openzwave %} If you're getting errors like: From fdfeb03ef1e6ae0901de140a56622b61e01dd1e4 Mon Sep 17 00:00:00 2001 From: Mahasri Kalavala Date: Fri, 9 Feb 2018 16:09:03 -0500 Subject: [PATCH 286/993] updated developer tools icon (#4611) The existing developer tools is an old image, and it does not contain mqtt icon. Updated with the new one. --- source/images/screenshots/developer-tools.png | Bin 1187 -> 2739 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/source/images/screenshots/developer-tools.png b/source/images/screenshots/developer-tools.png index 4883ce89c95d9f5d1d5d33ae0bb6a72a00d45313..37c6e1916769eec50c24e62bfdb2853841f9a616 100644 GIT binary patch literal 2739 zcmc&$X*(N;8jadwi;Soki54}ebz-ZkO6_{JR56x@h!ky!rBPZ-?4nfdyHTnwBc%3B zYb18sSlX)EYp2FuB_WAi^X>kC``r8Cyyu)x?{hw!_jw=Ru(c8smJtR30Ag3I&2OGC z_XIegz{w1FMTt8h9{f!!Qvi7gzII~xd`+&K008yrB5Vx*i5Cj8cEtk#pss(w(-&BE z8vqctzG`mb_|Rjsq&8c|MzUv?7S~yOivps6pv12Eg`fgSrQko)6jD?qvQx?>Oq^~e zT92l@_@YRP6AqY(iV^_*uuYmLMdUG#*wq1>*P^d6LKts22t{rISmCN7L0-aQ0jgmC zUl7Yk&EvxTdwQgO9}*8saz&-fizVssfVpphuV-sK z;8VjOx5XNmz7>OblLPDy&>1J=m#*GflA2%-mqi;Lr!3 zRPP)xQQ|sV(q^^me#lp`;w>s>mVJ`8)IMen2{OJ!bR#9WoyH-k!!&Z*_KH4D z*0rzMA?7T=ZJK3r zz1AD~?ipX)#a_F+_-%OEzi1`zqcj^rbm`%_W0~6{#hMkum?9^hyKp^do3jhMOm#f$#K$Y%So*}d(mMV^H~G1T!T#z0vFVYNzz-UQh=+*T^Am@df$ z220O((^_!I@2=zi#JtTg&|U|3H{Sxs2`EO%983urdgPi3$|X%V3ZMw#!QiQ^)JNyV0zJL65d@Z!M3% zRP+pZUz|2|vS9BskA_e4~uLM!#nH7r!gq7Mz4cJ$Cwa@^q440_SMoFIV+UM-O*xq|zVYS+=ko z8jI_o=W8_@^{eHTZHCsCfN6Fx;;AS%NAcP5e7jA+_x(v9J07Jg(Q(s0*6~gC$qgIC zpVLLn^QG7x%=dzp!A?uCgCmK*IYabImaB9 zI{XUNW2)v}-NH);qRw))G)EB2{q#{mqe&vZN{~=6didNT$>7CLFqKH)o&1MjyK;H7 zKbtz`Glzn=zu_rw{5_~G)okSKzZ`dI5e!WdGss}T+;;mUmptfhsj%okL&qC6W8Iyj zI}jj|ez^&nFzBste57;vll`6kvyhy6dNRBn`@yaRC|X}c# z@{X9L7>#?52?%ORhX?}yM_*`c0j0JiL+TVSTn<>_kZeK)S*+keAUQPBZFDCnVoKEG zH!U(CNKQKI+XB)maz0<|ebh)|jO>#(qnPCLkqN=S5zFe76RN;=^?Ranz27tHG~TPH zZv(vSTfzs%(p%D`IUAQ&aU0dn1TUaT$S&*I-uK>Ek6(zwZ&d}`H6$#CSUBF|eJ>-5 zsJE%XX(O&=Dt~F3-R;UweKD~Tz0!yj?8;J%Z=%9mrv1D&DGQqz=}$E)%U+V=8!JFu zY&82^u*NYNng9e9$2I1-%pF#`s599P@R-@Y^7%t4%H6)0zaColAJ<-ESLq69d&H&j zkc7k0Tq?KU#^KD6i@9ur%Vy`sLe;gDcAK2$!j+8*c(TWi+> zQw!J~MZU8k@}92n?vR|Ar?Fno+c~;VQeEwgkZ1wtv(()W5^55&i0azJK&sLPhuOew&W%oudx!5uk* zrm@<0EI={KP@%JV+TWB7-2Kut|sLm zMUxPjrz!)kE0}$e2wpaa(!dKwnao6M$;aqq^Z$oXM6jSorPP-lg<)5U>@$XwA!1!q zmD3v-blvpQ6nn(8ar+6RaE6QWe966(Y9;ngTqUnydm1JS*I}J~#BNY9G=|RMK(uEQmw@H)G4-UQ_-sKG!$CDrAT>~&Z3BQO;t`0V(R&MI2L

    Pquz^;UbQoxfxyoi-&u*-5hg*!Swb zs((%ANlo7luAHgU_#49rVzzeC)P3DR`5 zUm$KX5OXDKj==mj@_F2*>2~}}O=W`g&kKhbh%-W=R01;JQk@~qmE#?&R?yJU@%+aegTd=-r+L>&QEH zX86W?5xM_BDVD~ENPH+^|56O;X|ReMQ5bQuO#Wm+?BmahBPt)Nhy!tK*8)5b){q^V z49skp`cR0S429T%kE@!P2I5B6m&NPo^!vDroqU2q>}p16>#Jfn5MLtJla*juasibK zu(BYqYF4$YtWzS_r&cwfUDZpKRjns$!CaA;Jn4Xm^qFb+Hv$H7C+qKAz#HydLe_%i z(UF-E0x~n{6;G%BYXGjkef{aA6f4LVNnRQ->5)h-NC^wc1ka&(s;usRbF6;@3Dk>K z#MGg-IDyjiesQe4W8`eJA*r=#@e9E6x zb?(u*xS!-u9MOyReYH9ho7luAHnE9KY+@6e_&*xUZO}M`?HT|8002ovPDHLkV1n#v BN$&sv From d797d4dd48a556bc955532c04ece0ad32ec381af Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maido=20K=C3=A4=C3=A4ra?= Date: Fri, 9 Feb 2018 23:09:32 +0200 Subject: [PATCH 287/993] Incorrect event name (#4540) * Incorrect event name event_light_state_changed is the correct event in the configuration example * Put back typo fix --- source/_docs/scripts.markdown | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/_docs/scripts.markdown b/source/_docs/scripts.markdown index f630d283d4..5c39a604ab 100644 --- a/source/_docs/scripts.markdown +++ b/source/_docs/scripts.markdown @@ -139,7 +139,7 @@ event_data_template: ### {% linkable_title Raise and Consume Custom Events %} -The following automation shows how to raise a custom event called `event_light_turned_on` with `entity_id` as the event data. The action part could be inside a script or an automation. +The following automation shows how to raise a custom event called `event_light_state_changed` with `entity_id` as the event data. The action part could be inside a script or an automation. {% raw %} ```yaml @@ -155,7 +155,7 @@ The following automation shows how to raise a custom event called `event_light_t ``` {% endraw %} -The following automation shows how to capture the custom event `event_light_turned_on`, and retrieve corresponding `entity_id` that was passed as the event data. +The following automation shows how to capture the custom event `event_light_state_changed`, and retrieve corresponding `entity_id` that was passed as the event data. {% raw %} ```yaml From c6728980b9d8d2db1a8375322b8276b8dcf17a56 Mon Sep 17 00:00:00 2001 From: Mahasri Kalavala Date: Fri, 9 Feb 2018 16:09:39 -0500 Subject: [PATCH 288/993] added developer-tools-mqtt-icon.png (#4612) Added missing icon for developer-tools-mqtt-icon - made a new PNG image with EXACTLY same size as others (76 pixels x 76 pixels), and round in shape. --- .../screenshots/developer-tool-mqtt-icon.png | Bin 0 -> 4401 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 source/images/screenshots/developer-tool-mqtt-icon.png diff --git a/source/images/screenshots/developer-tool-mqtt-icon.png b/source/images/screenshots/developer-tool-mqtt-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..3ecfd4272feeb3023f4497ee5124f0bbe727549c GIT binary patch literal 4401 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 Date: Fri, 9 Feb 2018 21:22:14 +0000 Subject: [PATCH 289/993] SQL Sensor (#4569) * Initial Commit * Tks @arsaboo * Added Examples section * back to optional * :pencil2: Minor changes * Rewritten --- source/_components/sensor.sql.md | 95 +++++++++++++++++++++++++ source/images/supported_brands/sql.png | Bin 0 -> 181406 bytes 2 files changed, 95 insertions(+) create mode 100644 source/_components/sensor.sql.md create mode 100644 source/images/supported_brands/sql.png diff --git a/source/_components/sensor.sql.md b/source/_components/sensor.sql.md new file mode 100644 index 0000000000..a1a0c40fc1 --- /dev/null +++ b/source/_components/sensor.sql.md @@ -0,0 +1,95 @@ +--- +layout: page +title: "SQL Sensor" +description: "Instructions how to integrate SQL sensors into Home Assistant." +date: 2018-02-03 00:22 +sidebar: true +comments: false +sharing: true +footer: true +logo: sql.png +ha_category: Sensor +ha_release: 0.63 +--- + +The `SQL` sensor platform enables you to use values from an [SQL](https://en.wikipedia.org/wiki/SQL) database supported by the [sqlalchemy](https://www.sqlalchemy.org) library, to populate a sensor state (and attributes). +This can be used to present statistics about Home Assistant sensors if used with the recorder component database. It can also be used with an external data source. + +To configure this sensor, you need to define the sensor connection variables and a list of queries to your `configuration.yaml` file. A sensor will be created for each query: + +To enable it, add the following lines to your `configuration.yaml`: + +{% raw %} +```yaml +# Example configuration.yaml entry to monitor hass database size in MySQL +sensor: + - platform: sql + db_url: mysql://user:password@localhost/hass + queries: + - name: HASS DB size + query: 'SELECT table_schema "database", Round(Sum(data_length + index_length) / 1024, 1) "value" FROM information_schema.tables WHERE table_schema="hass" GROUP BY table_schema;' + column: 'value' + unit_of_measurement: kB +``` +{% endraw %} + +{% configuration %} +db_url: + description: The URL which points to your database. See [supported engines](/components/recorder/#custom-database-engines). + required: false + default: Defaults to the recorder db_url. + type: string +queries: + description: List of your queries. + required: true + type: map + keys: + name: + description: The name of the sensor. + required: true + type: string + query: + description: An SQL QUERY string, should return 1 result at most. + required: true + type: string + column: + description: The field name to select. + required: true + type: string + unit_of_measurement: + description: Defines the units of measurement of the sensor, if any. + required: false + type: string + value_template: + description: Defines a template to extract a value from the payload. + required: false + type: template +{% endconfiguration %} + +## {% linkable_title Examples %} + +In this section you find some real life examples of how to use this sensor. + +### {% linkable_title Current state of an entity %} + +This example shows the previously *recorded* state of sensor *abc123*. + +```sql +SELECT * FROM states WHERE entity_id = 'sensor.abc123' ORDER BY id DESC LIMIT 2 +``` + +Note that the SQL sensor state corresponds to the last row of the SQL resultset. + +### {% linkable_title Previous state of an entity %} + +This example only works with *binary_sensors*: + +```sql +SELECT * FROM states WHERE entity_id='binary_sensor.xyz789' GROUP BY state ORDER BY last_changed DESC LIMIT 1 +``` + +### {% linkable_title Database size in Postgres %} + +```sql +SELECT pg_size_pretty(pg_database_size('Database Name')); +``` diff --git a/source/images/supported_brands/sql.png b/source/images/supported_brands/sql.png new file mode 100644 index 0000000000000000000000000000000000000000..6f08cca3d7291dd91107caf45b71c6ef82054e3d GIT binary patch literal 181406 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

    7P` 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 z%0AT$A|A^+T(z`aUs$~8%qMhz=GS^*USY4jNn1yNlWh-Qf|N~rT)~HDbh12bJ9Vo* zj#QJqpIN&|rHzaBc{?-IrQ6P1yRl=IF_@3D2^-Fh$P(%Gt{EmVN4E9SQ3#kE-jca6 zS z!KakraMp&+U6-u5nkWSt_8InX-gw4SIeF^n0dZ7-G1zQrhrSF2P!qfCH|=UlGv#%U zatm-XIaTCOUIQRaQFPowjKQF9{Rfj$x+&w*4!1)!@e8fjhn}B_y+6*XU{n;&HGB;c zKCwn9InloDBo|c9*Rl80+xvOGgSeRGPYGSdsleCM)BzEJm-0V)5-iJ0an=2{Ud>~@ zdeaf`Sukzu@%8+Sb3ghhr*AIL4kSZ-zffQ=hpDvRfP7>sn=-~!o8b08&-U86)f9!Z z$-Ebr_133(XFBrPR1GS^Q4qhOCVuIk(fh(xn)%y>=SM}8FuV=b=KX7g^xGi|ke$R1 zCUMp&wHel{E{-k25Y2BYf`=L)-LjX~#2Wach&AwuGEJ80$bq9sY8D!(wdTKSeFe4n zz1jgN;JmtWEyn&tQ`Wo_oUcNvtZ(_xX12%2$n10#`#vAJsmwXT16dk$rZalw@gRjXR9rsX)!~ie`EW0JmU2DV_(4Yi0(zFTk;+1t9Q4@w|F42bIKykJ zpW$Xtt+4)IODPDB`majXFi#{pWEdldV19^_37o;g9rBMBciyXTdM&@fe$0y>q9~#1 zdVNub{G-66ap{VKcGdtUOQt~gdY-tPx4uhVkTO>+|MS4I{JpezxQ3*%1mYjl-Wo$e z*ICUcS;O64Qfw;f;n!R;Ot`8Dg^>F7pAVS}EH@%9uYYU11p0Wj@pm)7kK@^0NL{Jz_#~`l(VU;LKe^#`W-FLb_p>s83+P z0Qz)r+?nW(j4E0MnhQe5lEDE;-OBB`N?QWBlU}!P|9GR^Jaa@R>-|)X5+HNWWl?cG zeX+Kte@#gr@J8kyiPqO}Pt;Ty3V8sM5F(0w*_X^tL00MG7G##t*VDo_;5v(!P6aoA zA^6K44=A7952AV$w*IXJP`)AM12dgn8ccf|DuRzaM|Q2cKrFlPQ}6{WI4&8~F`xMo+seLZ}_L3H@G?FntB zHb35E^zB6|(`WL=WD}LLrL_{oox)dqpV`V;A&}0LrOwZ)Mm4b%d8a|>= zo_Q_b#Edw|{QMF#*sOplkgXBzG&!$2cKvjB&n*}xafFazkw*mgE#B(O&<$9Pll>Cup?3l9w%|w}Neq)swQPqSk zmgHOK5jq_zjp(m7V`s**XCC`C&#)464>3~<%tMGJ3VMXOwQ7Css%ceh)(}B>XjWu( zD_`_^(7LS=Rbxwt+oYz8L;Fbk=^@!xtZo2ieBD$^_s{ZAwd+JZEdOxw839F&(h?wg zYb%-0HDZ`{rf4RbCHD8q4m%ICK2NOUX&awoSH{Coaz~Bl zeY3bQW#7yB>T3}0=po~;Lo2=yVsJEAL&#{$frBbWx1R(5Q@w~gWD!DLP+d{Xl@+L_ zEpr(Ev%F|sz9xrU`}Q*6U3zAZgJ(n0*m4M5X$7+-gOvno`~#gOOB&oX=Ze~uUFso z_EjzAE26XL*v1Cw zw^x@bLBRlvS$h9Vu4LG8`B}amx};v~J9@XD`${2o<+#|NYBqfTXX?~V3T0~@Zs~So z0a!gWtjb)d+E~m$bZrOPeHt<@9F=p~plD1@{0w9#0W68kZ1S1a`D<8sA4pmcs%6SZ zA<4n~=lXr<+!>Q19-mAp-qBCx>KBAWwU5*fvIVU~J?-bt zln`!Ve3+ft!<~(O-jIlaaU*rF7v8@qylnF)Hv$=D2VOL89Nj-(!_f=18p|3nhNc;n z)Lc~*T(%)=Jw>;Wr&4r~4>nJe12=eSe#?lkxmOyWf0w_RQBxj3M;h#IsDF*5RCB7H zTuPGVuS(88l>X62!O`n6Cjp+n9@jy{@fh(Tk{%!oH0!hEmkr5UbDwl{sB+M8PF;jZ z-0n2c!1~M>1T2OcWh_tIo<9LnuGsG7(av`R-|N)BHo+r(k|HGMh3(!1|C4HSb$u0& zmv(nDi5Yy?-em4_t{cOf490=4@mTGfK}J1tbMNwoN`GR6j5=8|tc)W(%o?l9PShyw zb#79q-IN#jikNN(YfIx|E7QTRcX{Xiw3hYl2hb-cEr3ff2XL|+?R08O9X(BzZuB4{ zSQ4^&Hut=a(mAm7{)C1i9?aG$%J6@hl^&KYSj5HBOdJuirbTdu1A2V`i7c1$E*}ergWAUdLnaQ>)-2suZsu; zq?V)u1M7YNtM=p+5O7I&uXt$3ICXhA)q9FOaUL%lDNXK7TA+ZoOsB#`PC;Js-s74g zgS5Ijwht~tjbIIQ54Aa;o(y^k5xoD|QK#6jleqj;i-YXk{0m0K?y5C++T=+BDRZ$ckw0WNDT(<0c`HZ(LNT>&y7s%jYH0$2dY5kl-X^Xrj+> z72TPc{EYLER0tX9{B?hi5N6)!u7NbG=TH--QrZ&n0R!8e8&0t`=qO0+veECbHBlsd z__;Cq%H+=qJ7gQFgLH}E_hL3dEp~4B8ifYV9aCB{44m;C*3UUStB z8Y>$yVebN(XWE+$Q#u9lyL<`;QBX}vFIenpf`gm$M9hpIr%qE93G}8UYH@*y8g$zl z+?vzxu)afgeeL(bVi1U@`NeaarnQn@04%DV_E5+OyHee1gR;jZBaSC&bU=wwE(&n! z^uCSsbdAptJ1wBWSpfQWXGaPRc&w7T;9%G!m$M@Y-@p7zg5Z}q>p&+=%5WWSPJ3nS z6U_-R&Bm1mm8Jvbry*e~;J9|dDgg6q3k_vcrkDgNUbRkmf>ebBf?Y$zIGxwd2bHhM z>0_JdD_82zpGT4Rk3{qtjHWkE#^J`@nN2*fMg=ydx|PPq6PpM7`Ap{_5(+2t{8nNk zDHX6Dp_L6(Ej{91m7q~y+*d}H$M5<(@2Y+ESJ^XF2{lw`e%r;97NuP`|A)S*`6_w* zg`zHdDnBOOn$ZeA1vbU@Qc?Wmkkwm24uV;RDag#~QE*-iW*cE^9(QwISPgMo)4|8m zxQmj54^4MMhv#R9x9UG^)>pydaL!5JKO?Wcx<--y$sJ<{EC_RbR$+-n#AUwxZtl(~0(vEDl4rgY(CBr3W**_zm zqYaB+toKq$_N$S>7@%SLLK!bM?a|5e-Y4_bWCoJZ`sJ)*Q3i;SO%Y3Jdh|Ed%9j$a zEJhfcr;c>`tAQCOok#aChx+p#`tj%83mL-y8QD****pa|>TaCZCEJ^1Eoq`#J|WDf z8htGlrU%+6ke`g4HHTqp@Fvvon>RP_8FMD}4fw0^o{&KNm~Lxq#D9fxz7pN)oA~dT zjW?d(nX9j1ZlBWp?kpWs0*7+ZHQIG?(SZh2+1CIzj*5dyDqi}s&Us-TtIE##fiwTKS>+ zB~CO1bi1UY2q1TT7v`kMd*o{1Ep?pQdU8(EA<=U)Jf z7gsG^tgut2diELd2VF+ZEEzhXQwtsLnB+x?ircCNgZA*J;u*!Ge z2UQK`gOmami9=K+y_YMEQ~92|l@*1ig(NR%q;t;$cPbHWlh_MSLc{4YpXUFu!4eFg zKc|DV!bi ztj8S!5xWS)^+{y3$y@TI0*2o`$|=XAaIEb9mNo)I18S%x2Z;d+_NaPTi=PzXvr=>2dBq8M&0Ob zoWY$U8ObI^IatDT>eHGQY}4~bViDcNZ+m%C(6=(wxKkeRDxUv+j3tB`;XCC5HzzXt zl<`i~RGagc+B6{I=4qT-o@2bzlQMhl{5oxEVq32GX~2V;jj^>)%xJU}L5uLJ(IvObm0;x|PVP^P#z z`N?KKaPX8WtY5Zy5@6?S+-_p`LnJK`_`g?oA0=x1F+Pn5+BG&g2?m9E{D7%iYPCJU#T@ux$i7XCEe1`ivI}tf&ruhBN$yHdm6?rANP2 zJSQ_+p?qP$73Aw3LecAh>CqU_|S$}b5 zinv8~#65sWcT76%;E5-Bxx6m$0Cx%xl3RUwG6#T%67mO&gQsZEy)eZjEs7pX#^hBK zz++6<#qfx;JdV0W4*Ah{f}E|_`zgr&=(xuOj;Z*Et%l?S`U=2L*lNeSnA<%(*2$`4V;5!t;-G8dl`i}xBuwN+x&+fy(u^!5TRz_ zitW>kElP__MXe>v?BTp!Zu50=F8~_!T{)pipCLooZ^tva$E>N`>G2KLK|tu`yM`iP zKP=dsKk;7+_Ux=h7_EiBk8}_cZ_twc?m`#5@z+a*ti|sH=DjkmcDE|?Vmlx+>BH|* zCaX-xVt7xyVkl^@CZ`1a3kX#=!QZU899}9uQq#=(hJj~p0H}S­{WswwGPAGGPA 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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 KG*?9L_x}Slxiw<| literal 0 HcmV?d00001 From ac219395ded52b2a7eefcec23e15065c2e756638 Mon Sep 17 00:00:00 2001 From: Joe Lu Date: Fri, 9 Feb 2018 13:23:22 -0800 Subject: [PATCH 290/993] Updated Canary camera configuration (#4582) * Updated Canary camera configuration * :pencil2: TravisCI fix --- source/_components/camera.canary.markdown | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/source/_components/camera.canary.markdown b/source/_components/camera.canary.markdown index bf7c029bc7..3e7eac2e79 100644 --- a/source/_components/camera.canary.markdown +++ b/source/_components/camera.canary.markdown @@ -13,6 +13,20 @@ ha_release: "0.60" ha_iot_class: "Cloud Polling" --- -The `canary` camera platform allows you to view the latest camera image (triggered by motion) by your [Canary](https://canary.is) device in Home Assistant. +The `canary` camera platform allows you to watch the live stream of your [Canary](https://canary.is) camera in Home Assistant. This requires the [`ffmpeg` component](/components/ffmpeg/) to be already configured. -To add `canary` camera to your installation, follow instructions in [Canary component](/components/canary/). +To add `canary` camera to your installation, follow instructions in [Canary component](/components/canary/). Once you have [Canary component](/components/canary/) setup, your [Canary](https://canary.is) camera(s) should show up automatically. + +You can add the following to your `configuration.yaml` file to configure `canary` camera with optional settings: + +```yaml +camera: + - platform: canary +``` + +{% configuration %} + ffmpeg_arguments: + description: Extra options to pass to `ffmpeg`, e.g. image quality or video filter options. More details in [FFmpeg component](/components/ffmpeg). + required: false + type: string +{% endconfiguration %} From a854b89b599c29d890f703a76a18960ca7dfb361 Mon Sep 17 00:00:00 2001 From: mkfink Date: Fri, 9 Feb 2018 16:37:06 -0500 Subject: [PATCH 291/993] Added force_update flag (#4558) Related to https://github.com/home-assistant/home-assistant/pull/12092, based on https://home-assistant.io/components/sensor.mqtt/#force_update --- source/_components/binary_sensor.mqtt.markdown | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/source/_components/binary_sensor.mqtt.markdown b/source/_components/binary_sensor.mqtt.markdown index 6505859838..824f9bef2c 100644 --- a/source/_components/binary_sensor.mqtt.markdown +++ b/source/_components/binary_sensor.mqtt.markdown @@ -76,6 +76,11 @@ value_template: description: "Defines a [template](/docs/configuration/templating/#processing-incoming-data) to extract a value from the payload." required: false type: string +force_update: + description: Sends update events even if the value hasn't changed. Useful if you want to have meaningful value graphs in history. + reqired: false + type: boolean + default: False {% endconfiguration %} To test, you can use the command line tool `mosquitto_pub` shipped with `mosquitto` or the `mosquitto-clients` package to send MQTT messages. To set the state of the binary sensor manually: From 0b49ea80bf1657724141d44fa6f4c153fdbbafa6 Mon Sep 17 00:00:00 2001 From: Russell Cloran Date: Fri, 9 Feb 2018 13:55:13 -0800 Subject: [PATCH 292/993] Add zha radio_type (#4586) Adds support for XBee radios, which requires setting `radio_type` in the zha config. --- source/_components/zha.markdown | 3 +++ 1 file changed, 3 insertions(+) diff --git a/source/_components/zha.markdown b/source/_components/zha.markdown index 2e4a749b97..2a6b6355f2 100644 --- a/source/_components/zha.markdown +++ b/source/_components/zha.markdown @@ -26,6 +26,7 @@ There is currently support for the following device types within Home Assistant: Known working ZigBee radios: - Nortek/GoControl Z-Wave & Zigbee USB Adaptor - Model HUSBZB-1 +- XBee Series 2C To configure the component, a `zha` section must be present in the `configuration.yaml`, and the path to the serial device for the radio and path to the database which will persist your network data is required. @@ -39,7 +40,9 @@ zha: Configuration variables: + - **radio_type** (*Optional*): One of `ezsp` (default) or `xbee` - **usb_path** (*Required*): Path to the serial device for the radio. + - **baud_rate** (*Optional*): Baud rate of the serial device. - **database_path** (*Required*): Path to the database which will keep persistent network data. To add new devices to the network, call the `permit` service on the `zha` domain, and then follow the device instructions for doing a scan or factory reset. In case you want to add Philips Hue bulbs that have previously been added to another bridge, have a look at: [https://github.com/vanviegen/hue-thief/](https://github.com/vanviegen/hue-thief/) From 3dec0a3a585e511e2194e891aeabf3812b121ca6 Mon Sep 17 00:00:00 2001 From: Mahasri Kalavala Date: Fri, 9 Feb 2018 16:56:34 -0500 Subject: [PATCH 293/993] added service call example (#4606) * added service call example * Minor changes --- source/_components/python_script.markdown | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/source/_components/python_script.markdown b/source/_components/python_script.markdown index a470ec3960..5e03edc16c 100644 --- a/source/_components/python_script.markdown +++ b/source/_components/python_script.markdown @@ -44,4 +44,21 @@ hass.bus.fire(name, { "wow": "from a Python script!" }) } ``` -For examples, visit the [Scripts section](https://community.home-assistant.io/c/projects/scripts) in our forum. +## {% linkable_title Calling Services %} + +The following example shows how to call a service from `python_script`. This script takes two parameters: `entity_id` (required), `rgb_color` (optional) and calls `light.turn_on` service by setting the brightness value to `255`. + +```python +entity_id = data.get('entity_id') +rgb_color = data.get('rgb_color', [255, 255, 255]) +if entity_id is not None: + service_data = {'entity_id': entity_id, 'rgb_color': rgb_color, 'brightness': 255 } + hass.services.call('light', 'turn_on', service_data, False) +``` +The above `python_script` can be called using the following JSON as an input. + +```json +{"entity_id": "light.bedroom", "rgb_color": [255, 0, 0] } +``` + +For more examples, visit the [Scripts section](https://community.home-assistant.io/c/projects/scripts) in our forum. From ad18b599677365e978725007a53c879e809358d8 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Fri, 9 Feb 2018 15:25:38 -0800 Subject: [PATCH 294/993] Version bump to 0.63 --- _config.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/_config.yml b/_config.yml index 286ea08bab..173458ad06 100644 --- a/_config.yml +++ b/_config.yml @@ -139,14 +139,14 @@ social: # Home Assistant release details current_major_version: 0 -current_minor_version: 62 -current_patch_version: 1 -date_released: 2018-01-30 +current_minor_version: 63 +current_patch_version: 0 +date_released: 2018-02-10 # Either # or the anchor link to latest release notes in the blog post. # Must be prefixed with a # and have double quotes around it. # Major release: -patch_version_notes: "#release-0621---january-30" +patch_version_notes: "#" # Minor release (Example #release-0431---april-25): # Date we moved to Discourse for comments From 0b68b478d1a6bd2ec1aa2d2502c7fae96b9629ce Mon Sep 17 00:00:00 2001 From: Anders Melchiorsen Date: Sat, 10 Feb 2018 15:18:16 +0100 Subject: [PATCH 295/993] Allow zero purge_interval to disable recorder purge (#4591) * Allow zero purge_interval to disable recorder purge * Clarify that zero is a number --- source/_components/recorder.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/recorder.markdown b/source/_components/recorder.markdown index 38b9239ba5..78993f1113 100644 --- a/source/_components/recorder.markdown +++ b/source/_components/recorder.markdown @@ -40,7 +40,7 @@ recorder: required: false type: int purge_interval: - description: How often (in days) the purge task runs. If a scheduled purge is missed (e.g., if Home Assistant was not running), the schedule will resume soon after Home Assistant restarts. You can use the [service](#service-purge) call `purge` when required without impacting the purge schedule. + description: How often (in days) the purge task runs. If a scheduled purge is missed (e.g., if Home Assistant was not running), the schedule will resume soon after Home Assistant restarts. You can use the [service](#service-purge) call `purge` when required without impacting the purge schedule. If this is set to `0` (zero), purging is disabled. required: false default: 1 type: int From f9f6d140ef3b2e80d4650bc7bfcd6fbdb3b1069d Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Sat, 10 Feb 2018 17:03:57 +0100 Subject: [PATCH 296/993] Update 0.63 --- source/developers/credits.markdown | 189 +++++++++++++++-------------- 1 file changed, 100 insertions(+), 89 deletions(-) diff --git a/source/developers/credits.markdown b/source/developers/credits.markdown index 3055c86bb3..d5ae4f2a12 100644 --- a/source/developers/credits.markdown +++ b/source/developers/credits.markdown @@ -2,7 +2,7 @@ layout: page title: "Credits" description: "Credits for the developers who contributed to Home Assistant." -date: 2018-01-29 22:42:30 +0000 +date: 2018-02-10 16:03:45 +0000 sidebar: true comments: false sharing: true @@ -13,7 +13,7 @@ This page contains a list of people who have contributed in one way or another t ### {% linkable_title Author %} -- [Paulus Schoutsen (@balloob)](https://github.com/balloob "6159 total commits to the home-assistant organization, 3630 commits to home-assistant, 1345 commits to home-assistant.github.io, 689 commits to home-assistant-polymer, 244 commits to home-assistant-js, 119 commits to netdisco, 44 commits to home-assistant-js-websocket, 26 commits to hass-release, 15 commits to home-assistant-assets, 11 commits to LabelBot, 8 commits to example-custom-config, 7 commits to micropython-home-assistant, 5 commits to hassio, 3 commits to hassio-addons, 2 commits to hassio-addons-example, 2 commits to hassio-build, 2 commits to python-hassbian, 2 commits to lambda-home-assistant-github, 2 commits to issue-bot, 1 commit to warrant, 1 commit to home-assistant-notebooks, 1 commit to home-assistant-iOS") +- [Paulus Schoutsen (@balloob)](https://github.com/balloob "6191 total commits to the home-assistant organization, 3645 commits to home-assistant, 1356 commits to home-assistant.github.io, 693 commits to home-assistant-polymer, 244 commits to home-assistant-js, 119 commits to netdisco, 44 commits to home-assistant-js-websocket, 26 commits to hass-release, 15 commits to home-assistant-assets, 12 commits to LabelBot, 8 commits to example-custom-config, 7 commits to micropython-home-assistant, 5 commits to hassio, 3 commits to hassio-addons, 2 commits to lambda-home-assistant-github, 2 commits to hassio-build, 2 commits to python-hassbian, 2 commits to hassio-addons-example, 2 commits to issue-bot, 1 commit to architecture, 1 commit to home-assistant-notebooks, 1 commit to home-assistant-iOS, 1 commit to warrant") ### {% linkable_title Contributors %} @@ -22,7 +22,7 @@ This page contains a list of people who have contributed in one way or another t - [7even (@hwikene)](https://github.com/hwikene "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") - [Aaron Bach (@bachya)](https://github.com/bachya "40 total commits to the home-assistant organization, 24 commits to home-assistant, 16 commits to home-assistant.github.io") - [Aaron Linville (@linville)](https://github.com/linville "2 total commits to the home-assistant organization, 2 commits to appdaemon") -- [Abílio Costa (@abmantis)](https://github.com/abmantis "20 total commits to the home-assistant organization, 12 commits to home-assistant, 5 commits to home-assistant.github.io, 1 commit to home-assistant-js-websocket, 1 commit to netdisco, 1 commit to home-assistant-polymer") +- [Abílio Costa (@abmantis)](https://github.com/abmantis "21 total commits to the home-assistant organization, 12 commits to home-assistant, 5 commits to home-assistant.github.io, 2 commits to home-assistant-polymer, 1 commit to home-assistant-js-websocket, 1 commit to netdisco") - [Adam (@SilvrrGIT)](https://github.com/SilvrrGIT "9 total commits to the home-assistant organization, 9 commits to home-assistant.github.io") - [Adam Baxter (@voltagex)](https://github.com/voltagex "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") - [Adam Cooper (@GenericStudent)](https://github.com/GenericStudent "11 total commits to the home-assistant organization, 8 commits to home-assistant, 3 commits to home-assistant.github.io") @@ -32,31 +32,32 @@ This page contains a list of people who have contributed in one way or another t - [Adrien Ball (@adrienball)](https://github.com/adrienball "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Adrien Brault (@adrienbrault)](https://github.com/adrienbrault "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Adrián López (@adrianlzt)](https://github.com/adrianlzt "8 total commits to the home-assistant organization, 6 commits to home-assistant.github.io, 2 commits to home-assistant") -- [aetolus (@aetolus)](https://github.com/aetolus "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [AHS (@ahofelt)](https://github.com/ahofelt "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") +- [akloeckner (@akloeckner)](https://github.com/akloeckner "3 total commits to the home-assistant organization, 3 commits to home-assistant") - [Alan Bowman (@alanbowman)](https://github.com/alanbowman "4 total commits to the home-assistant organization, 4 commits to home-assistant") - [Alan Fischer (@alanfischer)](https://github.com/alanfischer "20 total commits to the home-assistant organization, 16 commits to home-assistant, 4 commits to home-assistant.github.io") - [Alasdair Nicol (@alasdairnicol)](https://github.com/alasdairnicol "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [Albatross (@DyingAlbatross)](https://github.com/DyingAlbatross "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") -- [Albert Lee (@trisk)](https://github.com/trisk "13 total commits to the home-assistant organization, 8 commits to home-assistant, 5 commits to home-assistant.github.io") +- [Albert Lee (@trisk)](https://github.com/trisk "14 total commits to the home-assistant organization, 9 commits to home-assistant, 5 commits to home-assistant.github.io") - [Alberto Arias Maestro (@albertoarias)](https://github.com/albertoarias "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Alessandro Mogavero (@alexmogavero)](https://github.com/alexmogavero "3 total commits to the home-assistant organization, 3 commits to home-assistant") - [Alex (@asbach)](https://github.com/asbach "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") -- [Alex Barcelo (@alexbarcelo)](https://github.com/alexbarcelo "3 total commits to the home-assistant organization, 3 commits to hassio-addons") +- [Alex Barcelo (@alexbarcelo)](https://github.com/alexbarcelo "5 total commits to the home-assistant organization, 3 commits to hassio-addons, 2 commits to home-assistant.github.io") - [Alex Harvey (@infamy)](https://github.com/infamy "29 total commits to the home-assistant organization, 14 commits to home-assistant, 11 commits to home-assistant.github.io, 4 commits to hassio-os") - [Alex Mekkering (@AlexMekkering)](https://github.com/AlexMekkering "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [Alex MF (@adsmf)](https://github.com/adsmf "1 total commits to the home-assistant organization, 1 commit to hassio-addons") +- [Alex Osadchyy (@aosadchyy)](https://github.com/aosadchyy "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Alex Tzonkov (@attzonko)](https://github.com/attzonko "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [Alexander Kratzer (@hexxter)](https://github.com/hexxter "8 total commits to the home-assistant organization, 8 commits to home-assistant") - [Alexandre Perrin (@kAworu)](https://github.com/kAworu "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [Alexis Iglauer (@ax42)](https://github.com/ax42 "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [Alfie Day (@Azelphur)](https://github.com/Azelphur "12 total commits to the home-assistant organization, 12 commits to home-assistant") - [Aliaksandr (@minchik)](https://github.com/minchik "7 total commits to the home-assistant organization, 3 commits to home-assistant.github.io, 2 commits to appdaemon, 2 commits to home-assistant") -- [Alok Saboo (@arsaboo)](https://github.com/arsaboo "132 total commits to the home-assistant organization, 78 commits to home-assistant.github.io, 48 commits to home-assistant, 4 commits to home-assistant-polymer, 1 commit to pi-gen, 1 commit to hassio-addons") -- [amigian74 (@amigian74)](https://github.com/amigian74 "2 total commits to the home-assistant organization, 2 commits to home-assistant") +- [Alok Saboo (@arsaboo)](https://github.com/arsaboo "136 total commits to the home-assistant organization, 81 commits to home-assistant.github.io, 49 commits to home-assistant, 4 commits to home-assistant-polymer, 1 commit to pi-gen, 1 commit to hassio-addons") - [amorsillo (@AndrewMorsillo)](https://github.com/AndrewMorsillo "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") - [Anders Fogh Eriksen (@Fogh)](https://github.com/Fogh "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") -- [Anders Melchiorsen (@amelchio)](https://github.com/amelchio "131 total commits to the home-assistant organization, 95 commits to home-assistant, 34 commits to home-assistant.github.io, 2 commits to home-assistant-polymer") +- [Anders Melchiorsen (@amelchio)](https://github.com/amelchio "143 total commits to the home-assistant organization, 103 commits to home-assistant, 38 commits to home-assistant.github.io, 2 commits to home-assistant-polymer") +- [andig (@andig)](https://github.com/andig "1 total commits to the home-assistant organization, 1 commit to pi-gen") - [Andrea Campi (@andreacampi)](https://github.com/andreacampi "8 total commits to the home-assistant organization, 6 commits to home-assistant, 2 commits to home-assistant.github.io") - [Andrea Falcone (@asfalcone)](https://github.com/asfalcone "5 total commits to the home-assistant organization, 5 commits to issue-bot") - [Andreas Björshammar (@abjorshammar)](https://github.com/abjorshammar "2 total commits to the home-assistant organization, 2 commits to home-assistant") @@ -65,23 +66,25 @@ This page contains a list of people who have contributed in one way or another t - [Andreas Renberg (@IQAndreas)](https://github.com/IQAndreas "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [Andreea-Daniela Ene (@AndreeaEne)](https://github.com/AndreeaEne "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [Andrej Friesen (@ajfriesen)](https://github.com/ajfriesen "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") -- [Andrew (@aoakeson)](https://github.com/aoakeson "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [Andrew (@aneisch)](https://github.com/aneisch "5 total commits to the home-assistant organization, 5 commits to home-assistant.github.io") -- [Andrew Cockburn (@acockburn)](https://github.com/acockburn "734 total commits to the home-assistant organization, 602 commits to appdaemon, 88 commits to hadashboard, 25 commits to scenegen, 19 commits to home-assistant.github.io") +- [Andrew (@aoakeson)](https://github.com/aoakeson "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") +- [Andrew Cockburn (@acockburn)](https://github.com/acockburn "749 total commits to the home-assistant organization, 615 commits to appdaemon, 88 commits to hadashboard, 25 commits to scenegen, 21 commits to home-assistant.github.io") - [Andrew Smith (@andrewmichaelsmith)](https://github.com/andrewmichaelsmith "2 total commits to the home-assistant organization, 2 commits to pi-gen") - [Andrew Stock (@watchforstock)](https://github.com/watchforstock "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Andrew Thigpen (@andythigpen)](https://github.com/andythigpen "33 total commits to the home-assistant organization, 32 commits to home-assistant, 1 commit to home-assistant-js") +- [Andrew Wedgbury (@sconemad)](https://github.com/sconemad "1 total commits to the home-assistant organization, 1 commit to pi-gen") - [andrew-curtis (@andrew-curtis)](https://github.com/andrew-curtis "7 total commits to the home-assistant organization, 7 commits to home-assistant.github.io") -- [Andrey (@andrey-git)](https://github.com/andrey-git "275 total commits to the home-assistant organization, 124 commits to home-assistant-polymer, 114 commits to home-assistant, 37 commits to home-assistant.github.io") +- [Andrey (@andrey-git)](https://github.com/andrey-git "279 total commits to the home-assistant organization, 126 commits to home-assistant-polymer, 116 commits to home-assistant, 37 commits to home-assistant.github.io") - [Andrey Kupreychik (@foxel)](https://github.com/foxel "9 total commits to the home-assistant organization, 6 commits to home-assistant, 3 commits to home-assistant.github.io") - [Andrzej (@andriej)](https://github.com/andriej "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [Andréas Lundgren (@adevade)](https://github.com/adevade "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [Andy Castille (@Klikini)](https://github.com/Klikini "12 total commits to the home-assistant organization, 8 commits to home-assistant, 4 commits to home-assistant.github.io") - [anotherthomas (@anotherthomas)](https://github.com/anotherthomas "1 total commits to the home-assistant organization, 1 commit to hassio-addons") +- [Anthony Arnaud (@aarnaud)](https://github.com/aarnaud "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Anthony Hughes (@tony2nite)](https://github.com/tony2nite "1 total commits to the home-assistant organization, 1 commit to netdisco") - [Antoine Bertin (@Diaoul)](https://github.com/Diaoul "5 total commits to the home-assistant organization, 2 commits to home-assistant, 2 commits to home-assistant.github.io, 1 commit to home-assistant-polymer") - [Anton Glukhov (@toxxin)](https://github.com/toxxin "1 total commits to the home-assistant organization, 1 commit to libcoap") -- [Anton Lundin (@glance-)](https://github.com/glance- "7 total commits to the home-assistant organization, 6 commits to home-assistant, 1 commit to netdisco") +- [Anton Lundin (@glance-)](https://github.com/glance- "8 total commits to the home-assistant organization, 7 commits to home-assistant, 1 commit to netdisco") - [Anton Sarukhanov (@antsar)](https://github.com/antsar "6 total commits to the home-assistant organization, 3 commits to home-assistant, 2 commits to home-assistant.github.io, 1 commit to home-assistant-polymer") - [apo-mak (@apo-mak)](https://github.com/apo-mak "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") - [arcsur (@arcsur)](https://github.com/arcsur "3 total commits to the home-assistant organization, 3 commits to home-assistant") @@ -105,7 +108,7 @@ This page contains a list of people who have contributed in one way or another t - [Baran Kaynak (@barankaynak)](https://github.com/barankaynak "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") - [Barry Williams (@bazwilliams)](https://github.com/bazwilliams "10 total commits to the home-assistant organization, 6 commits to home-assistant, 2 commits to netdisco, 2 commits to home-assistant.github.io") - [Bart274 (@Bart274)](https://github.com/Bart274 "26 total commits to the home-assistant organization, 17 commits to home-assistant, 8 commits to home-assistant.github.io, 1 commit to home-assistant-polymer") -- [Bas Schipper (@basschipper)](https://github.com/basschipper "6 total commits to the home-assistant organization, 4 commits to home-assistant, 2 commits to home-assistant.github.io") +- [Bas Schipper (@basschipper)](https://github.com/basschipper "7 total commits to the home-assistant organization, 5 commits to home-assistant, 2 commits to home-assistant.github.io") - [bastshoes (@bastshoes)](https://github.com/bastshoes "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") - [bcl1713 (@bcl1713)](https://github.com/bcl1713 "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [Beat (@bdurrer)](https://github.com/bdurrer "11 total commits to the home-assistant organization, 10 commits to home-assistant.github.io, 1 commit to home-assistant-polymer") @@ -114,6 +117,7 @@ This page contains a list of people who have contributed in one way or another t - [Ben Doerr (@bendoerr)](https://github.com/bendoerr "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [Ben Nuttall (@bennuttall)](https://github.com/bennuttall "1 total commits to the home-assistant organization, 1 commit to pi-gen") - [Ben Origas (@borigas)](https://github.com/borigas "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") +- [Ben Pirt (@bjpirt)](https://github.com/bjpirt "2 total commits to the home-assistant organization, 2 commits to pi-gen") - [Ben Randall (@veleek)](https://github.com/veleek "3 total commits to the home-assistant organization, 3 commits to home-assistant") - [Ben Thomas (@wazoo)](https://github.com/wazoo "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") - [Benjamin Parzella (@bparzella)](https://github.com/bparzella "1 total commits to the home-assistant organization, 1 commit to pi-gen") @@ -128,9 +132,9 @@ This page contains a list of people who have contributed in one way or another t - [Bob Anderson (@rwa)](https://github.com/rwa "11 total commits to the home-assistant organization, 7 commits to home-assistant, 4 commits to home-assistant.github.io") - [Bob Igo (@Human)](https://github.com/Human "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [Boced66 (@boced66)](https://github.com/boced66 "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") -- [boojew (@boojew)](https://github.com/boojew "6 total commits to the home-assistant organization, 6 commits to home-assistant.github.io") +- [boojew (@boojew)](https://github.com/boojew "7 total commits to the home-assistant organization, 7 commits to home-assistant.github.io") - [Boris K (@bokub)](https://github.com/bokub "11 total commits to the home-assistant organization, 6 commits to home-assistant.github.io, 5 commits to home-assistant") -- [Boyi C (@fanthos)](https://github.com/fanthos "11 total commits to the home-assistant organization, 6 commits to home-assistant-polymer, 3 commits to home-assistant, 2 commits to home-assistant.github.io") +- [Boyi C (@fanthos)](https://github.com/fanthos "14 total commits to the home-assistant organization, 8 commits to home-assistant-polymer, 4 commits to home-assistant, 2 commits to home-assistant.github.io") - [bpoirriez (@bpoirriez)](https://github.com/bpoirriez "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [Brad Dixon (@rbdixon)](https://github.com/rbdixon "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Brad Johnson (@bradsk88)](https://github.com/bradsk88 "2 total commits to the home-assistant organization, 2 commits to home-assistant") @@ -139,6 +143,7 @@ This page contains a list of people who have contributed in one way or another t - [Brandon Mathis (@imathis)](https://github.com/imathis "484 total commits to the home-assistant organization, 484 commits to home-assistant.github.io") - [Brandon Weeks (@brandonweeks)](https://github.com/brandonweeks "3 total commits to the home-assistant organization, 3 commits to home-assistant") - [brburns (@brburns)](https://github.com/brburns "2 total commits to the home-assistant organization, 2 commits to netdisco") +- [Brenda Wallace (@Br3nda)](https://github.com/Br3nda "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [Brendon Baumgartner (@bbrendon)](https://github.com/bbrendon "11 total commits to the home-assistant organization, 11 commits to home-assistant.github.io") - [Brent Hughes (@bah2830)](https://github.com/bah2830 "27 total commits to the home-assistant organization, 18 commits to home-assistant, 8 commits to home-assistant.github.io, 1 commit to netdisco") - [Brent Kerlin (@bkerlin)](https://github.com/bkerlin "1 total commits to the home-assistant organization, 1 commit to hassio-build") @@ -153,14 +158,14 @@ This page contains a list of people who have contributed in one way or another t - [Bruno Adele (@badele)](https://github.com/badele "22 total commits to the home-assistant organization, 22 commits to home-assistant") - [Bruno Binet (@bbinet)](https://github.com/bbinet "1 total commits to the home-assistant organization, 1 commit to hassio-build") - [Bryce Edwards (@hoopty)](https://github.com/hoopty "5 total commits to the home-assistant organization, 3 commits to home-assistant, 2 commits to home-assistant.github.io") -- [c727 (@c727)](https://github.com/c727 "21 total commits to the home-assistant organization, 14 commits to home-assistant-polymer, 7 commits to home-assistant.github.io") +- [c727 (@c727)](https://github.com/c727 "29 total commits to the home-assistant organization, 19 commits to home-assistant-polymer, 7 commits to home-assistant.github.io, 3 commits to home-assistant") - [Caius Cioran (@caiuspb)](https://github.com/caiuspb "3 total commits to the home-assistant organization, 3 commits to home-assistant") - [Caleb (@finish06)](https://github.com/finish06 "7 total commits to the home-assistant organization, 7 commits to home-assistant") - [Cameron Bulock (@cbulock)](https://github.com/cbulock "5 total commits to the home-assistant organization, 2 commits to home-assistant, 2 commits to home-assistant.github.io, 1 commit to netdisco") - [Carlo Costanzo (@CCOSTAN)](https://github.com/CCOSTAN "95 total commits to the home-assistant organization, 87 commits to home-assistant.github.io, 5 commits to home-assistant, 1 commit to fabric-home-assistant, 1 commit to hassbian-scripts, 1 commit to homebridge-homeassistant") - [carlosmgr (@carlosmgr)](https://github.com/carlosmgr "6 total commits to the home-assistant organization, 6 commits to home-assistant") - [Carter (@BluGeni)](https://github.com/BluGeni "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") -- [cdce8p (@cdce8p)](https://github.com/cdce8p "21 total commits to the home-assistant organization, 12 commits to home-assistant.github.io, 7 commits to home-assistant, 2 commits to home-assistant-polymer") +- [cdce8p (@cdce8p)](https://github.com/cdce8p "23 total commits to the home-assistant organization, 12 commits to home-assistant.github.io, 8 commits to home-assistant, 3 commits to home-assistant-polymer") - [Cecron (@Cecron)](https://github.com/Cecron "1 total commits to the home-assistant organization, 1 commit to appdaemon") - [Cenk Gündoğan (@cgundogan)](https://github.com/cgundogan "1 total commits to the home-assistant organization, 1 commit to libcoap") - [Cezar Sá Espinola (@cezarsa)](https://github.com/cezarsa "2 total commits to the home-assistant organization, 2 commits to home-assistant") @@ -184,7 +189,7 @@ This page contains a list of people who have contributed in one way or another t - [Christian Brædstrup (@LinuxChristian)](https://github.com/LinuxChristian "8 total commits to the home-assistant organization, 8 commits to home-assistant") - [Christian Lasarczyk (@ChrisLasar)](https://github.com/ChrisLasar "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [Christian Studer (@cstuder)](https://github.com/cstuder "4 total commits to the home-assistant organization, 4 commits to home-assistant.github.io") -- [ChristianKuehnel (@ChristianKuehnel)](https://github.com/ChristianKuehnel "19 total commits to the home-assistant organization, 10 commits to home-assistant, 9 commits to home-assistant.github.io") +- [ChristianKuehnel (@ChristianKuehnel)](https://github.com/ChristianKuehnel "21 total commits to the home-assistant organization, 12 commits to home-assistant, 9 commits to home-assistant.github.io") - [Christoffer Kylvåg (@christoe)](https://github.com/christoe "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [Christoph Wagner (@Christoph-Wagner)](https://github.com/Christoph-Wagner "4 total commits to the home-assistant organization, 4 commits to home-assistant.github.io") - [Christopher Viel (@Chris-V)](https://github.com/Chris-V "5 total commits to the home-assistant organization, 3 commits to home-assistant, 2 commits to home-assistant.github.io") @@ -192,18 +197,17 @@ This page contains a list of people who have contributed in one way or another t - [chz^3 (@chzchzchz)](https://github.com/chzchzchz "1 total commits to the home-assistant organization, 1 commit to pi-gen") - [Ciquattro (@CiquattroFPV)](https://github.com/CiquattroFPV "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [clach04 (@clach04)](https://github.com/clach04 "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") -- [Claus F. Strasburger (@cfstras)](https://github.com/cfstras "1 total commits to the home-assistant organization, 1 commit to pi-gen") -- [cogneato (@cogneato)](https://github.com/cogneato "4 total commits to the home-assistant organization, 4 commits to home-assistant.github.io") +- [Claus F. Strasburger (@cfstras)](https://github.com/cfstras "5 total commits to the home-assistant organization, 5 commits to pi-gen") +- [cogneato (@cogneato)](https://github.com/cogneato "7 total commits to the home-assistant organization, 7 commits to home-assistant.github.io") - [Colin Dunn (@colindunn)](https://github.com/colindunn "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Colin O'Dell (@colinodell)](https://github.com/colinodell "24 total commits to the home-assistant organization, 13 commits to home-assistant, 11 commits to home-assistant.github.io") - [Colin Teubner (@netopiax)](https://github.com/netopiax "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") -- [Conrad Juhl Andersen (@cnrd)](https://github.com/cnrd "5 total commits to the home-assistant organization, 3 commits to home-assistant, 2 commits to home-assistant.github.io") +- [Conrad Juhl Andersen (@cnrd)](https://github.com/cnrd "7 total commits to the home-assistant organization, 4 commits to home-assistant, 3 commits to home-assistant.github.io") - [Constantine Grantcharov (@conz27)](https://github.com/conz27 "1 total commits to the home-assistant organization, 1 commit to libcoap") - [Constantine Poltyrev (@shprota)](https://github.com/shprota "1 total commits to the home-assistant organization, 1 commit to appdaemon") - [Corban Mailloux (@corbanmailloux)](https://github.com/corbanmailloux "18 total commits to the home-assistant organization, 18 commits to home-assistant.github.io") - [Corey Pauley (@devspacenine)](https://github.com/devspacenine "5 total commits to the home-assistant organization, 3 commits to home-assistant.github.io, 2 commits to home-assistant") -- [covrig (@covrig)](https://github.com/covrig "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") -- [Craig J. Ward (@wardcraigj)](https://github.com/wardcraigj "25 total commits to the home-assistant organization, 18 commits to home-assistant, 7 commits to home-assistant.github.io") +- [Craig J. Ward (@wardcraigj)](https://github.com/wardcraigj "27 total commits to the home-assistant organization, 20 commits to home-assistant, 7 commits to home-assistant.github.io") - [CTLS (@CTLS)](https://github.com/CTLS "3 total commits to the home-assistant organization, 3 commits to home-assistant") - [CV (@dagobert)](https://github.com/dagobert "4 total commits to the home-assistant organization, 4 commits to home-assistant.github.io") - [cxlwill (@cxlwill)](https://github.com/cxlwill "2 total commits to the home-assistant organization, 2 commits to home-assistant-polymer") @@ -212,7 +216,7 @@ This page contains a list of people who have contributed in one way or another t - [Dan Chen (@djchen)](https://github.com/djchen "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Dan Cinnamon (@Cinntax)](https://github.com/Cinntax "17 total commits to the home-assistant organization, 14 commits to home-assistant, 3 commits to home-assistant.github.io") - [Dan Faulknor (@danielfaulknor)](https://github.com/danielfaulknor "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") -- [Dan Nixon (@DanNixon)](https://github.com/DanNixon "19 total commits to the home-assistant organization, 14 commits to home-assistant, 5 commits to home-assistant.github.io") +- [Dan Nixon (@DanNixon)](https://github.com/DanNixon "21 total commits to the home-assistant organization, 16 commits to home-assistant, 5 commits to home-assistant.github.io") - [Dan Ports (@drkp)](https://github.com/drkp "4 total commits to the home-assistant organization, 4 commits to home-assistant") - [Dan Sarginson (@dansarginson)](https://github.com/dansarginson "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Dan Smith (@kk7ds)](https://github.com/kk7ds "84 total commits to the home-assistant organization, 68 commits to home-assistant, 14 commits to home-assistant.github.io, 2 commits to home-assistant-polymer") @@ -220,8 +224,8 @@ This page contains a list of people who have contributed in one way or another t - [Dani (@danichispa)](https://github.com/danichispa "9 total commits to the home-assistant organization, 9 commits to home-assistant.github.io") - [Daniel (@delneet)](https://github.com/delneet "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [Daniel Escoz (@Darkhogg)](https://github.com/Darkhogg "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") -- [Daniel Høyer Iversen (@Danielhiversen)](https://github.com/Danielhiversen "374 total commits to the home-assistant organization, 252 commits to home-assistant, 119 commits to home-assistant.github.io, 3 commits to home-assistant-polymer") -- [Daniel Perna (@danielperna84)](https://github.com/danielperna84 "79 total commits to the home-assistant organization, 38 commits to home-assistant.github.io, 36 commits to home-assistant, 5 commits to hassio-addons") +- [Daniel Høyer Iversen (@Danielhiversen)](https://github.com/Danielhiversen "376 total commits to the home-assistant organization, 253 commits to home-assistant, 119 commits to home-assistant.github.io, 4 commits to home-assistant-polymer") +- [Daniel Perna (@danielperna84)](https://github.com/danielperna84 "83 total commits to the home-assistant organization, 39 commits to home-assistant.github.io, 38 commits to home-assistant, 6 commits to hassio-addons") - [Daniel Peukert (@dpeukert)](https://github.com/dpeukert "3 total commits to the home-assistant organization, 2 commits to home-assistant.github.io, 1 commit to home-assistant-polymer") - [Daniel Schaal (@schaal)](https://github.com/schaal "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Daniel Stone (@daniel-stoneuk)](https://github.com/daniel-stoneuk "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") @@ -236,9 +240,9 @@ This page contains a list of people who have contributed in one way or another t - [Dave Banks (@djbanks)](https://github.com/djbanks "2 total commits to the home-assistant organization, 2 commits to appdaemon") - [Dave J (@kxtcd950)](https://github.com/kxtcd950 "3 total commits to the home-assistant organization, 3 commits to hassbian-scripts") - [DaveSergeant (@dethpickle)](https://github.com/dethpickle "2 total commits to the home-assistant organization, 2 commits to home-assistant") -- [David (@fanaticDavid)](https://github.com/fanaticDavid "13 total commits to the home-assistant organization, 10 commits to home-assistant.github.io, 2 commits to home-assistant, 1 commit to home-assistant-polymer") +- [David (@fanaticDavid)](https://github.com/fanaticDavid "14 total commits to the home-assistant organization, 10 commits to home-assistant.github.io, 3 commits to home-assistant, 1 commit to home-assistant-polymer") - [David (Drew) Jackson (@David-Jackson)](https://github.com/David-Jackson "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") -- [David De Sloovere (@DavidDeSloovere)](https://github.com/DavidDeSloovere "7 total commits to the home-assistant organization, 7 commits to home-assistant.github.io") +- [David De Sloovere (@DavidDeSloovere)](https://github.com/DavidDeSloovere "16 total commits to the home-assistant organization, 16 commits to home-assistant.github.io") - [David Fiel (@dfiel)](https://github.com/dfiel "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [David Grant (@davegravy)](https://github.com/davegravy "6 total commits to the home-assistant organization, 4 commits to home-assistant.github.io, 2 commits to home-assistant") - [David McNett (@nugget)](https://github.com/nugget "10 total commits to the home-assistant organization, 5 commits to home-assistant, 5 commits to home-assistant.github.io") @@ -261,20 +265,20 @@ This page contains a list of people who have contributed in one way or another t - [dersger (@dersger)](https://github.com/dersger "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") - [devdelay (@devdelay)](https://github.com/devdelay "16 total commits to the home-assistant organization, 7 commits to home-assistant.github.io, 5 commits to home-assistant, 4 commits to homebridge-homeassistant") - [Devon Peet (@dpeet)](https://github.com/dpeet "5 total commits to the home-assistant organization, 5 commits to home-assistant.github.io") -- [Diogo Gomes (@dgomes)](https://github.com/dgomes "10 total commits to the home-assistant organization, 6 commits to home-assistant, 4 commits to home-assistant.github.io") +- [Diogo Gomes (@dgomes)](https://github.com/dgomes "22 total commits to the home-assistant organization, 11 commits to home-assistant, 11 commits to home-assistant.github.io") - [DoloresHA (@DoloresHA)](https://github.com/DoloresHA "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [Domantas (@Dohxis)](https://github.com/Dohxis "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") - [Dougal Matthews (@d0ugal)](https://github.com/d0ugal "4 total commits to the home-assistant organization, 2 commits to home-assistant, 2 commits to home-assistant.github.io") - [dramamoose (@dramamoose)](https://github.com/dramamoose "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [DrewSK (@dzsquared)](https://github.com/dzsquared "8 total commits to the home-assistant organization, 8 commits to home-assistant.github.io") -- [DubhAd (@DubhAd)](https://github.com/DubhAd "122 total commits to the home-assistant organization, 122 commits to home-assistant.github.io") +- [DubhAd (@DubhAd)](https://github.com/DubhAd "128 total commits to the home-assistant organization, 128 commits to home-assistant.github.io") - [Duoxilian (@Duoxilian)](https://github.com/Duoxilian "11 total commits to the home-assistant organization, 6 commits to home-assistant.github.io, 5 commits to home-assistant") - [ebpetway (@ebpetway)](https://github.com/ebpetway "55 total commits to the home-assistant organization, 55 commits to warrant") - [Edwin Smulders (@Dutchy-)](https://github.com/Dutchy- "4 total commits to the home-assistant organization, 2 commits to home-assistant, 2 commits to home-assistant.github.io") - [Egor Tsinko (@etsinko)](https://github.com/etsinko "12 total commits to the home-assistant organization, 9 commits to home-assistant, 3 commits to home-assistant.github.io") - [Eitan Mosenkis (@emosenkis)](https://github.com/emosenkis "6 total commits to the home-assistant organization, 3 commits to home-assistant, 2 commits to home-assistant.github.io, 1 commit to netdisco") - [eldanb (@eldanb)](https://github.com/eldanb "1 total commits to the home-assistant organization, 1 commit to homebridge-homeassistant") -- [Eleftherios Chamakiotis (@lexam79)](https://github.com/lexam79 "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") +- [Eleftherios Chamakiotis (@lexam79)](https://github.com/lexam79 "4 total commits to the home-assistant organization, 2 commits to home-assistant, 2 commits to home-assistant.github.io") - [Ellis Percival (@flyte)](https://github.com/flyte "31 total commits to the home-assistant organization, 25 commits to home-assistant, 6 commits to home-assistant.github.io") - [Emil Horpen Hetty (@emilhetty)](https://github.com/emilhetty "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [endor-force (@endor-force)](https://github.com/endor-force "9 total commits to the home-assistant organization, 4 commits to hassio-addons, 4 commits to home-assistant.github.io, 1 commit to hassio-build") @@ -285,10 +289,12 @@ This page contains a list of people who have contributed in one way or another t - [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 "111 total commits to the home-assistant organization, 97 commits to home-assistant, 11 commits to home-assistant.github.io, 3 commits to netdisco") - [Erik-jan Riemers (@riemers)](https://github.com/riemers "14 total commits to the home-assistant organization, 13 commits to home-assistant.github.io, 1 commit to hassbian-scripts") +- [escoand (@escoand)](https://github.com/escoand "3 total commits to the home-assistant organization, 3 commits to home-assistant") - [ettisan (@ettisan)](https://github.com/ettisan "8 total commits to the home-assistant organization, 8 commits to home-assistant") +- [Eu (@covrig)](https://github.com/covrig "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") - [Eugenio Panadero (@azogue)](https://github.com/azogue "76 total commits to the home-assistant organization, 45 commits to home-assistant, 25 commits to home-assistant.github.io, 3 commits to homebridge-homeassistant, 3 commits to home-assistant-polymer") - [Ezra Bowden (@bn0)](https://github.com/bn0 "2 total commits to the home-assistant organization, 2 commits to warrant") -- [Fabian Affolter (@fabaff)](https://github.com/fabaff "4510 total commits to the home-assistant organization, 2903 commits to home-assistant.github.io, 1507 commits to home-assistant, 32 commits to home-assistant-assets, 30 commits to home-assistant-notebooks, 11 commits to hassio-build, 11 commits to home-assistant-polymer, 8 commits to netdisco, 5 commits to hassio-addons, 2 commits to hassio, 1 commit to home-assistant-js-websocket") +- [Fabian Affolter (@fabaff)](https://github.com/fabaff "4534 total commits to the home-assistant organization, 2916 commits to home-assistant.github.io, 1515 commits to home-assistant, 32 commits to home-assistant-assets, 30 commits to home-assistant-notebooks, 11 commits to hassio-build, 11 commits to home-assistant-polymer, 8 commits to netdisco, 5 commits to hassio-addons, 3 commits to development-docs, 2 commits to hassio, 1 commit to home-assistant-js-websocket") - [Fabian Heredia Montiel (@fabianhjr)](https://github.com/fabianhjr "4 total commits to the home-assistant organization, 4 commits to home-assistant") - [Fabien Piuzzi (@reefab)](https://github.com/reefab "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") - [Fabrizio Furnari (@fabfurnari)](https://github.com/fabfurnari "5 total commits to the home-assistant organization, 3 commits to home-assistant.github.io, 2 commits to home-assistant") @@ -303,12 +309,13 @@ This page contains a list of people who have contributed in one way or another t - [florianj1 (@florianj1)](https://github.com/florianj1 "1 total commits to the home-assistant organization, 1 commit to hassio") - [florincosta (@florincosta)](https://github.com/florincosta "6 total commits to the home-assistant organization, 3 commits to home-assistant, 3 commits to home-assistant.github.io") - [Fonta (@f0nt4)](https://github.com/f0nt4 "4 total commits to the home-assistant organization, 4 commits to home-assistant.github.io") -- [Franck Nijhof (@frenck)](https://github.com/frenck "28 total commits to the home-assistant organization, 19 commits to home-assistant.github.io, 5 commits to hassio, 2 commits to home-assistant-polymer, 1 commit to appdaemon, 1 commit to hassio-cli") +- [Franck Nijhof (@frenck)](https://github.com/frenck "29 total commits to the home-assistant organization, 20 commits to home-assistant.github.io, 5 commits to hassio, 2 commits to home-assistant-polymer, 1 commit to hassio-cli, 1 commit to appdaemon") - [Frank (@syphernl)](https://github.com/syphernl "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") -- [Frantz (@rofrantz)](https://github.com/rofrantz "14 total commits to the home-assistant organization, 7 commits to home-assistant, 4 commits to home-assistant.github.io, 3 commits to netdisco") +- [Frantz (@rofrantz)](https://github.com/rofrantz "16 total commits to the home-assistant organization, 9 commits to home-assistant, 4 commits to home-assistant.github.io, 3 commits to netdisco") - [Frederic Hemberger (@fhemberger)](https://github.com/fhemberger "93 total commits to the home-assistant organization, 93 commits to home-assistant.github.io") - [Fredrik Fjeld (@fredrikfjeld)](https://github.com/fredrikfjeld "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") -- [Fredrik Lindqvist (@Landrash)](https://github.com/Landrash "177 total commits to the home-assistant organization, 75 commits to hassbian-scripts, 70 commits to home-assistant.github.io, 27 commits to pi-gen, 4 commits to home-assistant, 1 commit to home-assistant-polymer") +- [Fredrik Lindqvist (@Landrash)](https://github.com/Landrash "183 total commits to the home-assistant organization, 77 commits to hassbian-scripts, 70 commits to home-assistant.github.io, 31 commits to pi-gen, 4 commits to home-assistant, 1 commit to home-assistant-polymer") +- [freol35241 (@freol35241)](https://github.com/freol35241 "3 total commits to the home-assistant organization, 3 commits to home-assistant") - [fuga2136 (@fuga2136)](https://github.com/fuga2136 "13 total commits to the home-assistant organization, 13 commits to home-assistant.github.io") - [Gabor SZOLLOSI (@szogi)](https://github.com/szogi "3 total commits to the home-assistant organization, 2 commits to home-assistant, 1 commit to appdaemon") - [GadgetReactor (@GadgetReactor)](https://github.com/GadgetReactor "2 total commits to the home-assistant organization, 2 commits to home-assistant") @@ -348,7 +355,7 @@ This page contains a list of people who have contributed in one way or another t - [Harald Nagel (@haraldnagel)](https://github.com/haraldnagel "8 total commits to the home-assistant organization, 6 commits to home-assistant, 2 commits to home-assistant.github.io") - [Hari Menon (@floydpink)](https://github.com/floydpink "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [Harris Borawski (@hborawski)](https://github.com/hborawski "2 total commits to the home-assistant organization, 2 commits to home-assistant") -- [hawk259 (@hawk259)](https://github.com/hawk259 "10 total commits to the home-assistant organization, 5 commits to home-assistant, 4 commits to home-assistant.github.io, 1 commit to home-assistant-polymer") +- [hawk259 (@hawk259)](https://github.com/hawk259 "13 total commits to the home-assistant organization, 7 commits to home-assistant, 5 commits to home-assistant.github.io, 1 commit to home-assistant-polymer") - [Heath Paddock (@heathbar)](https://github.com/heathbar "6 total commits to the home-assistant organization, 6 commits to home-assistant") - [Heiko Rothe (@mKeRix)](https://github.com/mKeRix "20 total commits to the home-assistant organization, 15 commits to home-assistant, 5 commits to home-assistant.github.io") - [Heiko Thiery (@hthiery)](https://github.com/hthiery "4 total commits to the home-assistant organization, 2 commits to home-assistant, 2 commits to home-assistant.github.io") @@ -376,6 +383,7 @@ This page contains a list of people who have contributed in one way or another t - [Issac Kelly (@issackelly)](https://github.com/issackelly "3 total commits to the home-assistant organization, 3 commits to home-assistant") - [J-CMartin (@J-CMartin)](https://github.com/J-CMartin "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [J. B. Rainsberger (@jbrains)](https://github.com/jbrains "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") +- [Jacen (@jacen92)](https://github.com/jacen92 "2 total commits to the home-assistant organization, 2 commits to pi-gen") - [jack (@jackmakesthings)](https://github.com/jackmakesthings "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [Jack Chapple (@jchapple)](https://github.com/jchapple "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Jack Fan (@JackWindows)](https://github.com/JackWindows "2 total commits to the home-assistant organization, 2 commits to home-assistant") @@ -388,6 +396,7 @@ This page contains a list of people who have contributed in one way or another t - [Jake McCrary (@jakemcc)](https://github.com/jakemcc "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [Jakub Bittner (@rexcze)](https://github.com/rexcze "2 total commits to the home-assistant organization, 2 commits to home-assistant-polymer") - [James Cole (@jamespcole)](https://github.com/jamespcole "94 total commits to the home-assistant organization, 93 commits to home-assistant, 1 commit to home-assistant-js") +- [James Ruan (@jamesruan)](https://github.com/jamesruan "1 total commits to the home-assistant organization, 1 commit to pi-gen") - [Jamie van Dyke (@fearoffish)](https://github.com/fearoffish "3 total commits to the home-assistant organization, 2 commits to home-assistant.github.io, 1 commit to home-assistant-iOS") - [JammyDodger231 (@JammyDodger231)](https://github.com/JammyDodger231 "4 total commits to the home-assistant organization, 4 commits to home-assistant.github.io") - [Jan Almeroth (@jalmeroth)](https://github.com/jalmeroth "8 total commits to the home-assistant organization, 5 commits to home-assistant, 2 commits to home-assistant.github.io, 1 commit to home-assistant-polymer") @@ -411,31 +420,30 @@ This page contains a list of people who have contributed in one way or another t - [Jeff Wilson (@jawilson)](https://github.com/jawilson "24 total commits to the home-assistant organization, 19 commits to home-assistant, 5 commits to home-assistant.github.io") - [Jeffrey Lin (@linjef)](https://github.com/linjef "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Jens (@jhoepken)](https://github.com/jhoepken "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") -- [Jens Østergaard Nielsen (@dingusdk)](https://github.com/dingusdk "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") +- [Jens Østergaard Nielsen (@dingusdk)](https://github.com/dingusdk "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") +- [Jerad Meisner (@jeradM)](https://github.com/jeradM "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Jeremiah Wuenschel (@jer)](https://github.com/jer "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [Jeremy (@Wutname1)](https://github.com/Wutname1 "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [Jeremy Williams (@jwillaz)](https://github.com/jwillaz "5 total commits to the home-assistant organization, 5 commits to home-assistant.github.io") - [jeremysv (@jeremysv)](https://github.com/jeremysv "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [Jeroen ter Heerdt (@jeroenterheerdt)](https://github.com/jeroenterheerdt "29 total commits to the home-assistant organization, 16 commits to home-assistant, 13 commits to home-assistant.github.io") - [Jerold Albertson (@jeroldalbertson-wf)](https://github.com/jeroldalbertson-wf "5 total commits to the home-assistant organization, 5 commits to home-assistant.github.io") -- [Jerry Workman (@JerryWorkman)](https://github.com/JerryWorkman "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") -- [Jesse Hills (@jesserockz)](https://github.com/jesserockz "5 total commits to the home-assistant organization, 3 commits to home-assistant, 2 commits to home-assistant.github.io") +- [Jerry Workman (@JerryWorkman)](https://github.com/JerryWorkman "4 total commits to the home-assistant organization, 4 commits to home-assistant.github.io") +- [Jesse Hills (@jesserockz)](https://github.com/jesserockz "3 total commits to the home-assistant organization, 3 commits to home-assistant") - [Jesse Newland (@jnewland)](https://github.com/jnewland "14 total commits to the home-assistant organization, 11 commits to home-assistant, 3 commits to hubot-home-assistant") - [JesseWebDotCom (@JesseWebDotCom)](https://github.com/JesseWebDotCom "16 total commits to the home-assistant organization, 8 commits to home-assistant, 8 commits to home-assistant.github.io") - [jgrieger1 (@jgrieger1)](https://github.com/jgrieger1 "1 total commits to the home-assistant organization, 1 commit to appdaemon") -- [Jim Rollenhagen (@jimrollenhagen)](https://github.com/jimrollenhagen "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [jimbob1001 (@jimbob1001)](https://github.com/jimbob1001 "4 total commits to the home-assistant organization, 4 commits to home-assistant.github.io") - [Joakim Nohlgård (@gebart)](https://github.com/gebart "2 total commits to the home-assistant organization, 2 commits to libcoap") -- [Joakim Sørensen (@ludeeus)](https://github.com/ludeeus "38 total commits to the home-assistant organization, 25 commits to hassbian-scripts, 13 commits to home-assistant.github.io") +- [Joakim Sørensen (@ludeeus)](https://github.com/ludeeus "43 total commits to the home-assistant organization, 30 commits to hassbian-scripts, 13 commits to home-assistant.github.io") - [Job (@jmvermeulen)](https://github.com/jmvermeulen "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [jodur (@jodur)](https://github.com/jodur "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") -- [Joe Lee (@xnoodle)](https://github.com/xnoodle "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") -- [Joe Lu (@snjoetw)](https://github.com/snjoetw "13 total commits to the home-assistant organization, 10 commits to home-assistant, 3 commits to home-assistant.github.io") +- [Joe Lu (@snjoetw)](https://github.com/snjoetw "16 total commits to the home-assistant organization, 12 commits to home-assistant, 4 commits to home-assistant.github.io") - [Joe McMonagle (@joemcmonagle)](https://github.com/joemcmonagle "13 total commits to the home-assistant organization, 13 commits to home-assistant.github.io") - [joe248 (@joe248)](https://github.com/joe248 "3 total commits to the home-assistant organization, 3 commits to home-assistant") - [Joeboyc2 (@Joeboyc2)](https://github.com/Joeboyc2 "15 total commits to the home-assistant organization, 15 commits to home-assistant.github.io") - [Johan Bloemberg (@aequitas)](https://github.com/aequitas "43 total commits to the home-assistant organization, 35 commits to home-assistant, 7 commits to home-assistant.github.io, 1 commit to netdisco") -- [Johan Haals (@jhaals)](https://github.com/jhaals "3 total commits to the home-assistant organization, 2 commits to home-assistant.github.io, 1 commit to appdaemon") +- [Johan Haals (@jhaals)](https://github.com/jhaals "1 total commits to the home-assistant organization, 1 commit to appdaemon") - [Johan van der Kuijl (@Rubyan)](https://github.com/Rubyan "4 total commits to the home-assistant organization, 3 commits to home-assistant.github.io, 1 commit to appdaemon") - [Johann Kellerman (@kellerza)](https://github.com/kellerza "144 total commits to the home-assistant organization, 114 commits to home-assistant, 30 commits to home-assistant.github.io") - [Johannes K. (@roadrash2108)](https://github.com/roadrash2108 "4 total commits to the home-assistant organization, 4 commits to home-assistant.github.io") @@ -443,12 +451,12 @@ This page contains a list of people who have contributed in one way or another t - [John Arild Berentsen (@turbokongen)](https://github.com/turbokongen "200 total commits to the home-assistant organization, 148 commits to home-assistant, 37 commits to home-assistant.github.io, 15 commits to home-assistant-polymer") - [John Lindley (@jwl17330536)](https://github.com/jwl17330536 "1 total commits to the home-assistant organization, 1 commit to appdaemon") - [John McLaughlin (@loghound)](https://github.com/loghound "2 total commits to the home-assistant organization, 2 commits to home-assistant") -- [John Mihalic (@mezz64)](https://github.com/mezz64 "45 total commits to the home-assistant organization, 31 commits to home-assistant, 12 commits to home-assistant.github.io, 1 commit to hadashboard, 1 commit to home-assistant-polymer") +- [John Mihalic (@mezz64)](https://github.com/mezz64 "46 total commits to the home-assistant organization, 32 commits to home-assistant, 12 commits to home-assistant.github.io, 1 commit to hadashboard, 1 commit to home-assistant-polymer") - [Johnny Chadda (@joch)](https://github.com/joch "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") - [Jon (@JonMurphy)](https://github.com/JonMurphy "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [Jon Caruana (@joncar)](https://github.com/joncar "3 total commits to the home-assistant organization, 3 commits to home-assistant") - [Jon Griffith (@arretx)](https://github.com/arretx "11 total commits to the home-assistant organization, 10 commits to home-assistant.github.io, 1 commit to appdaemon") -- [Jon Maddox (@maddox)](https://github.com/maddox "102 total commits to the home-assistant organization, 78 commits to home-assistant, 16 commits to homebridge-homeassistant, 8 commits to home-assistant.github.io") +- [Jon Maddox (@maddox)](https://github.com/maddox "103 total commits to the home-assistant organization, 79 commits to home-assistant, 16 commits to homebridge-homeassistant, 8 commits to home-assistant.github.io") - [Jonas Pedersen (@JonasPed)](https://github.com/JonasPed "1 total commits to the home-assistant organization, 1 commit to appdaemon") - [Jonatan Castro (@jcastro)](https://github.com/jcastro "7 total commits to the home-assistant organization, 7 commits to home-assistant.github.io") - [Jonathan Baginski (@patchedsoul)](https://github.com/patchedsoul "115 total commits to the home-assistant organization, 87 commits to fabric-home-assistant, 28 commits to home-assistant.github.io") @@ -467,26 +475,26 @@ This page contains a list of people who have contributed in one way or another t - [Juggels (@Juggels)](https://github.com/Juggels "8 total commits to the home-assistant organization, 5 commits to home-assistant, 3 commits to home-assistant.github.io") - [Julian Kaffke (@jaykay)](https://github.com/jaykay "1 total commits to the home-assistant organization, 1 commit to hassio-addons") - [Julian Kahnert (@JulianKahnert)](https://github.com/JulianKahnert "5 total commits to the home-assistant organization, 3 commits to home-assistant.github.io, 2 commits to home-assistant") -- [Julius Mittenzwei (@Julius2342)](https://github.com/Julius2342 "18 total commits to the home-assistant organization, 12 commits to home-assistant, 6 commits to home-assistant.github.io") +- [Julius Mittenzwei (@Julius2342)](https://github.com/Julius2342 "19 total commits to the home-assistant organization, 12 commits to home-assistant, 7 commits to home-assistant.github.io") - [jumpkick (@jumpkick)](https://github.com/jumpkick "15 total commits to the home-assistant organization, 12 commits to home-assistant, 3 commits to home-assistant.github.io") - [Justin Dray (@justin8)](https://github.com/justin8 "9 total commits to the home-assistant organization, 7 commits to home-assistant.github.io, 2 commits to home-assistant") - [Justin Hayes (@GussyH)](https://github.com/GussyH "7 total commits to the home-assistant organization, 7 commits to hadashboard") - [Justin Weberg (@justweb1)](https://github.com/justweb1 "26 total commits to the home-assistant organization, 13 commits to home-assistant-polymer, 7 commits to hassbot, 4 commits to home-assistant, 1 commit to home-assistant-js, 1 commit to hassio") - [Justyn Shull (@justyns)](https://github.com/justyns "5 total commits to the home-assistant organization, 5 commits to home-assistant") -- [Kane610 (@Kane610)](https://github.com/Kane610 "22 total commits to the home-assistant organization, 11 commits to home-assistant, 9 commits to home-assistant.github.io, 1 commit to netdisco, 1 commit to home-assistant-polymer") +- [Kane610 (@Kane610)](https://github.com/Kane610 "23 total commits to the home-assistant organization, 12 commits to home-assistant, 9 commits to home-assistant.github.io, 1 commit to netdisco, 1 commit to home-assistant-polymer") - [Karen Goode (@kfgoode)](https://github.com/kfgoode "4 total commits to the home-assistant organization, 4 commits to home-assistant") - [karlkar (@karlkar)](https://github.com/karlkar "5 total commits to the home-assistant organization, 5 commits to home-assistant") - [Keaton Taylor (@keatontaylor)](https://github.com/keatontaylor "7 total commits to the home-assistant organization, 4 commits to home-assistant, 3 commits to home-assistant.github.io") - [Keith Lamprecht (@Nixon506E)](https://github.com/Nixon506E "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Ken Bannister (@kb2ma)](https://github.com/kb2ma "1 total commits to the home-assistant organization, 1 commit to libcoap") - [Ken Davidson (@kwdavidson)](https://github.com/kwdavidson "13 total commits to the home-assistant organization, 11 commits to home-assistant.github.io, 2 commits to appdaemon") -- [kennedyshead (@kennedyshead)](https://github.com/kennedyshead "3 total commits to the home-assistant organization, 3 commits to home-assistant") +- [kennedyshead (@kennedyshead)](https://github.com/kennedyshead "8 total commits to the home-assistant organization, 8 commits to home-assistant") - [Kenny Millington (@kmdm)](https://github.com/kmdm "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Kevin (@Mister-Espria)](https://github.com/Mister-Espria "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Kevin Fronczak (@fronzbot)](https://github.com/fronzbot "19 total commits to the home-assistant organization, 11 commits to home-assistant, 8 commits to home-assistant.github.io") - [Kevin Gisi (@gisikw)](https://github.com/gisikw "5 total commits to the home-assistant organization, 5 commits to home-assistant.github.io") - [Kevin Gottsman (@gottsman)](https://github.com/gottsman "6 total commits to the home-assistant organization, 6 commits to home-assistant.github.io") -- [Kevin Siml (@appzer)](https://github.com/appzer "2 total commits to the home-assistant organization, 2 commits to home-assistant") +- [Kevin Siml (@appzer)](https://github.com/appzer "3 total commits to the home-assistant organization, 3 commits to home-assistant") - [Keyasha Brothern (@KMBrothern)](https://github.com/KMBrothern "4 total commits to the home-assistant organization, 4 commits to home-assistant.github.io") - [kfcook (@kfcook)](https://github.com/kfcook "3 total commits to the home-assistant organization, 3 commits to home-assistant") - [kireyeu (@kireyeu)](https://github.com/kireyeu "4 total commits to the home-assistant organization, 4 commits to home-assistant-notebooks") @@ -527,9 +535,9 @@ This page contains a list of people who have contributed in one way or another t - [Magnus Ihse Bursie (@magicus)](https://github.com/magicus "16 total commits to the home-assistant organization, 9 commits to home-assistant, 4 commits to netdisco, 3 commits to home-assistant.github.io") - [Magnus Lyckå (@magnus-lycka)](https://github.com/magnus-lycka "1 total commits to the home-assistant organization, 1 commit to netdisco") - [MagnusKnutas (@MagnusKnutas)](https://github.com/MagnusKnutas "29 total commits to the home-assistant organization, 29 commits to home-assistant") -- [Mahasri Kalavala (@skalavala)](https://github.com/skalavala "14 total commits to the home-assistant organization, 14 commits to home-assistant.github.io") +- [Mahasri Kalavala (@skalavala)](https://github.com/skalavala "20 total commits to the home-assistant organization, 20 commits to home-assistant.github.io") - [Maikel Wever (@maikelwever)](https://github.com/maikelwever "2 total commits to the home-assistant organization, 2 commits to home-assistant") -- [Marc Egli (@frog32)](https://github.com/frog32 "7 total commits to the home-assistant organization, 7 commits to home-assistant") +- [Marc Egli (@frog32)](https://github.com/frog32 "11 total commits to the home-assistant organization, 8 commits to home-assistant, 3 commits to home-assistant.github.io") - [Marc Forth (@mf-social)](https://github.com/mf-social "13 total commits to the home-assistant organization, 12 commits to home-assistant.github.io, 1 commit to fabric-home-assistant") - [Marc Pabst (@mxtra)](https://github.com/mxtra "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") - [Marc Plano-Lesay (@Kernald)](https://github.com/Kernald "12 total commits to the home-assistant organization, 10 commits to home-assistant.github.io, 2 commits to home-assistant") @@ -539,7 +547,7 @@ This page contains a list of people who have contributed in one way or another t - [Marco (@marconett)](https://github.com/marconett "3 total commits to the home-assistant organization, 3 commits to appdaemon") - [Marcus Schmidt (@mar-schmidt)](https://github.com/mar-schmidt "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Marijn Giesen (@marijngiesen)](https://github.com/marijngiesen "5 total commits to the home-assistant organization, 5 commits to hadashboard") -- [Marius (@ciotlosm)](https://github.com/ciotlosm "8 total commits to the home-assistant organization, 5 commits to home-assistant-polymer, 3 commits to home-assistant") +- [Marius (@ciotlosm)](https://github.com/ciotlosm "12 total commits to the home-assistant organization, 7 commits to home-assistant-polymer, 5 commits to home-assistant") - [Mark Coombes (@marthoc)](https://github.com/marthoc "3 total commits to the home-assistant organization, 3 commits to home-assistant") - [Mark Grosen (@mgsb)](https://github.com/mgsb "1 total commits to the home-assistant organization, 1 commit to netdisco") - [Mark Huson (@mehuman)](https://github.com/mehuman "11 total commits to the home-assistant organization, 11 commits to home-assistant.github.io") @@ -629,7 +637,8 @@ This page contains a list of people who have contributed in one way or another t - [Nigel Rook (@NigelRook)](https://github.com/NigelRook "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") - [Niklas (@niklaswa)](https://github.com/niklaswa "4 total commits to the home-assistant organization, 4 commits to home-assistant.github.io") - [Nikolas Beutler (@biacz)](https://github.com/biacz "2 total commits to the home-assistant organization, 2 commits to home-assistant") -- [Nolan Gilley (@nkgilley)](https://github.com/nkgilley "122 total commits to the home-assistant organization, 95 commits to home-assistant, 27 commits to home-assistant.github.io") +- [Nolan Gilley (@nkgilley)](https://github.com/nkgilley "123 total commits to the home-assistant organization, 95 commits to home-assistant, 28 commits to home-assistant.github.io") +- [nordlead2005 (@nordlead2005)](https://github.com/nordlead2005 "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [NotoriousBDG (@notoriousbdg)](https://github.com/notoriousbdg "3 total commits to the home-assistant organization, 3 commits to hassio-addons") - [NovapaX (@NovapaX)](https://github.com/NovapaX "9 total commits to the home-assistant organization, 4 commits to home-assistant-polymer, 4 commits to home-assistant, 1 commit to home-assistant-assets") - [ntalekt (@ntalekt)](https://github.com/ntalekt "6 total commits to the home-assistant organization, 6 commits to home-assistant.github.io") @@ -642,24 +651,24 @@ This page contains a list of people who have contributed in one way or another t - [Oliver (@scarface-4711)](https://github.com/scarface-4711 "24 total commits to the home-assistant organization, 14 commits to home-assistant, 9 commits to home-assistant.github.io, 1 commit to netdisco") - [Oliver van Porten (@mcdeck)](https://github.com/mcdeck "10 total commits to the home-assistant organization, 10 commits to home-assistant") - [Open Home Automation (@open-homeautomation)](https://github.com/open-homeautomation "41 total commits to the home-assistant organization, 29 commits to home-assistant, 12 commits to home-assistant.github.io") -- [Otto Winter (@OttoWinter)](https://github.com/OttoWinter "3 total commits to the home-assistant organization, 3 commits to home-assistant") - [oznu (@oznu)](https://github.com/oznu "1 total commits to the home-assistant organization, 1 commit to homebridge-homeassistant") - [Parker Moore (@parkr)](https://github.com/parkr "60 total commits to the home-assistant organization, 60 commits to home-assistant.github.io") - [pascal (@passie)](https://github.com/passie "4 total commits to the home-assistant organization, 3 commits to home-assistant, 1 commit to home-assistant-polymer") - [Pascal Bach (@bachp)](https://github.com/bachp "10 total commits to the home-assistant organization, 9 commits to home-assistant, 1 commit to netdisco") -- [Pascal Vizeli (@pvizeli)](https://github.com/pvizeli "2393 total commits to the home-assistant organization, 939 commits to hassio, 451 commits to home-assistant, 343 commits to hassio-build, 324 commits to hassio-addons, 307 commits to home-assistant.github.io, 16 commits to hassio-addons-example, 10 commits to hassio-cli, 1 commit to home-assistant-js-websocket, 1 commit to hassio-os, 1 commit to netdisco") +- [Pascal Vizeli (@pvizeli)](https://github.com/pvizeli "2415 total commits to the home-assistant organization, 953 commits to hassio, 452 commits to home-assistant, 347 commits to hassio-build, 326 commits to hassio-addons, 307 commits to home-assistant.github.io, 16 commits to hassio-addons-example, 11 commits to hassio-cli, 1 commit to home-assistant-js-websocket, 1 commit to hassio-os, 1 commit to netdisco") +- [Pat Thoyts (@patthoyts)](https://github.com/patthoyts "2 total commits to the home-assistant organization, 2 commits to netdisco") - [Patrick Aikens (@duckpuppy)](https://github.com/duckpuppy "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [Patrick Easters (@patrickeasters)](https://github.com/patrickeasters "5 total commits to the home-assistant organization, 5 commits to home-assistant.github.io") - [Patrik (@ggravlingen)](https://github.com/ggravlingen "8 total commits to the home-assistant organization, 5 commits to home-assistant, 3 commits to home-assistant.github.io") -- [Paul Annekov (@PaulAnnekov)](https://github.com/PaulAnnekov "3 total commits to the home-assistant organization, 3 commits to home-assistant") +- [Paul Annekov (@PaulAnnekov)](https://github.com/PaulAnnekov "4 total commits to the home-assistant organization, 4 commits to home-assistant") - [Paul Hendry (@pshendry)](https://github.com/pshendry "1 total commits to the home-assistant organization, 1 commit to warrant") -- [Paul Nicholls (@pauln)](https://github.com/pauln "1 total commits to the home-assistant organization, 1 commit to netdisco") +- [Paul Nicholls (@pauln)](https://github.com/pauln "2 total commits to the home-assistant organization, 2 commits to netdisco") - [Paul Sokolovsky (@pfalcon)](https://github.com/pfalcon "6 total commits to the home-assistant organization, 3 commits to netdisco, 3 commits to home-assistant") - [Pavel Ponomarev (@awsum)](https://github.com/awsum "2 total commits to the home-assistant organization, 2 commits to home-assistant-polymer") - [PawelWMS (@PawelWMS)](https://github.com/PawelWMS "12 total commits to the home-assistant organization, 12 commits to libcoap") - [Pedro Navarro (@pedronavf)](https://github.com/pedronavf "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [Pedro Pombeiro (@PombeirP)](https://github.com/PombeirP "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") -- [Per Osbäck (@perosb)](https://github.com/perosb "12 total commits to the home-assistant organization, 12 commits to home-assistant") +- [Per Osbäck (@perosb)](https://github.com/perosb "13 total commits to the home-assistant organization, 13 commits to home-assistant") - [Per Sandström (@persandstrom)](https://github.com/persandstrom "124 total commits to the home-assistant organization, 98 commits to home-assistant, 14 commits to home-assistant.github.io, 12 commits to home-assistant-polymer") - [Pete Peterson (@petey)](https://github.com/petey "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") - [PeteBa (@PeteBa)](https://github.com/PeteBa "7 total commits to the home-assistant organization, 5 commits to home-assistant, 2 commits to home-assistant-polymer") @@ -668,18 +677,19 @@ This page contains a list of people who have contributed in one way or another t - [pezinek (@pezinek)](https://github.com/pezinek "8 total commits to the home-assistant organization, 8 commits to home-assistant") - [Phil (@godloth)](https://github.com/godloth "10 total commits to the home-assistant organization, 10 commits to home-assistant.github.io") - [Phil Cole (@filcole)](https://github.com/filcole "8 total commits to the home-assistant organization, 5 commits to home-assistant.github.io, 3 commits to home-assistant") -- [Phil Frost (@bitglue)](https://github.com/bitglue "6 total commits to the home-assistant organization, 6 commits to home-assistant") +- [Phil Elson (@pelson)](https://github.com/pelson "3 total commits to the home-assistant organization, 3 commits to home-assistant") +- [Phil Frost (@bitglue)](https://github.com/bitglue "8 total commits to the home-assistant organization, 8 commits to home-assistant") - [Phil Haack (@Haacked)](https://github.com/Haacked "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [Phil Hawthorne (@philhawthorne)](https://github.com/philhawthorne "24 total commits to the home-assistant organization, 18 commits to home-assistant.github.io, 6 commits to home-assistant") -- [Phil Kates (@philk)](https://github.com/philk "6 total commits to the home-assistant organization, 6 commits to home-assistant") +- [Phil Kates (@philk)](https://github.com/philk "7 total commits to the home-assistant organization, 7 commits to home-assistant") - [Philip Hofstetter (@pilif)](https://github.com/pilif "6 total commits to the home-assistant organization, 6 commits to home-assistant.github.io") -- [Philip Kleimeyer (@philklei)](https://github.com/philklei "2 total commits to the home-assistant organization, 2 commits to home-assistant") +- [Philip Kleimeyer (@philklei)](https://github.com/philklei "4 total commits to the home-assistant organization, 4 commits to home-assistant") - [Philip Lundrigan (@philipbl)](https://github.com/philipbl "65 total commits to the home-assistant organization, 56 commits to home-assistant, 9 commits to home-assistant.github.io") - [Philipp Hellmich (@runningman84)](https://github.com/runningman84 "4 total commits to the home-assistant organization, 4 commits to home-assistant.github.io") - [Philipp Schmitt (@pschmitt)](https://github.com/pschmitt "37 total commits to the home-assistant organization, 24 commits to home-assistant, 11 commits to home-assistant.github.io, 1 commit to appdaemon, 1 commit to hassio-build") - [Phill Price (@phillprice)](https://github.com/phillprice "11 total commits to the home-assistant organization, 11 commits to home-assistant.github.io") - [PhracturedBlue (@PhracturedBlue)](https://github.com/PhracturedBlue "25 total commits to the home-assistant organization, 15 commits to home-assistant, 9 commits to home-assistant.github.io, 1 commit to home-assistant-polymer") -- [Pierre Ståhl (@postlund)](https://github.com/postlund "47 total commits to the home-assistant organization, 31 commits to home-assistant, 10 commits to home-assistant.github.io, 4 commits to netdisco, 2 commits to home-assistant-polymer") +- [Pierre Ståhl (@postlund)](https://github.com/postlund "49 total commits to the home-assistant organization, 32 commits to home-assistant, 11 commits to home-assistant.github.io, 4 commits to netdisco, 2 commits to home-assistant-polymer") - [Piratonym (@Piratonym)](https://github.com/Piratonym "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [pkonnekermetametrics (@pkonnekermetametrics)](https://github.com/pkonnekermetametrics "5 total commits to the home-assistant organization, 5 commits to warrant") - [PuckStar (@PuckStar)](https://github.com/PuckStar "7 total commits to the home-assistant organization, 7 commits to home-assistant.github.io") @@ -689,7 +699,7 @@ This page contains a list of people who have contributed in one way or another t - [rbflurry (@rbflurry)](https://github.com/rbflurry "16 total commits to the home-assistant organization, 13 commits to home-assistant.github.io, 3 commits to home-assistant") - [Reed Riley (@reedriley)](https://github.com/reedriley "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Rendili (@Rendili)](https://github.com/Rendili "3 total commits to the home-assistant organization, 3 commits to home-assistant") -- [Rene Nulsch (@ReneNulschDE)](https://github.com/ReneNulschDE "4 total commits to the home-assistant organization, 4 commits to home-assistant") +- [Rene Nulsch (@ReneNulschDE)](https://github.com/ReneNulschDE "14 total commits to the home-assistant organization, 9 commits to home-assistant, 5 commits to home-assistant.github.io") - [Rene Tode (@ReneTode)](https://github.com/ReneTode "38 total commits to the home-assistant organization, 38 commits to appdaemon") - [René Kliment (@renekliment)](https://github.com/renekliment "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Reza Moallemi (@moallemi)](https://github.com/moallemi "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") @@ -698,12 +708,13 @@ This page contains a list of people who have contributed in one way or another t - [Richard Arends (@Mosibi)](https://github.com/Mosibi "8 total commits to the home-assistant organization, 8 commits to home-assistant") - [Richard Cox (@Khabi)](https://github.com/Khabi "15 total commits to the home-assistant organization, 9 commits to home-assistant, 6 commits to home-assistant.github.io") - [Richard Leurs (@R1chardTM)](https://github.com/R1chardTM "15 total commits to the home-assistant organization, 8 commits to home-assistant, 6 commits to home-assistant.github.io, 1 commit to home-assistant-polymer") +- [Rick (@rcuddy)](https://github.com/rcuddy "1 total commits to the home-assistant organization, 1 commit to pi-gen") - [rkabadi (@rkabadi)](https://github.com/rkabadi "17 total commits to the home-assistant organization, 17 commits to home-assistant") - [Rob Capellini (@capellini)](https://github.com/capellini "3 total commits to the home-assistant organization, 3 commits to home-assistant") - [Rob Slifka (@rslifka)](https://github.com/rslifka "5 total commits to the home-assistant organization, 5 commits to home-assistant.github.io") -- [Robbie Trencheny (@robbiet480)](https://github.com/robbiet480 "1315 total commits to the home-assistant organization, 646 commits to home-assistant-iOS, 259 commits to home-assistant, 248 commits to home-assistant.github.io, 91 commits to homebridge-homeassistant, 15 commits to home-assistant-polymer, 9 commits to hubot-home-assistant, 8 commits to Analytics-Receiver, 6 commits to netdisco, 3 commits to home-assistant-js, 3 commits to organization, 3 commits to hassbot, 3 commits to appdaemon, 3 commits to scenegen, 3 commits to home-assistant-js-websocket, 3 commits to hadashboard, 2 commits to LabelBot, 2 commits to fabric-home-assistant, 2 commits to micropython-home-assistant, 2 commits to home-assistant-notebooks, 2 commits to home-assistant-assets, 2 commits to lambda-home-assistant-github") +- [Robbie Trencheny (@robbiet480)](https://github.com/robbiet480 "1315 total commits to the home-assistant organization, 646 commits to home-assistant-iOS, 259 commits to home-assistant, 248 commits to home-assistant.github.io, 91 commits to homebridge-homeassistant, 15 commits to home-assistant-polymer, 9 commits to hubot-home-assistant, 8 commits to Analytics-Receiver, 6 commits to netdisco, 3 commits to home-assistant-js-websocket, 3 commits to scenegen, 3 commits to appdaemon, 3 commits to hassbot, 3 commits to organization, 3 commits to hadashboard, 3 commits to home-assistant-js, 2 commits to LabelBot, 2 commits to micropython-home-assistant, 2 commits to fabric-home-assistant, 2 commits to home-assistant-notebooks, 2 commits to lambda-home-assistant-github, 2 commits to home-assistant-assets") - [Robby Grossman (@freerobby)](https://github.com/freerobby "2 total commits to the home-assistant organization, 2 commits to home-assistant") -- [Robin (@robmarkcole)](https://github.com/robmarkcole "16 total commits to the home-assistant organization, 9 commits to home-assistant.github.io, 6 commits to home-assistant, 1 commit to home-assistant-assets") +- [Robin (@robmarkcole)](https://github.com/robmarkcole "17 total commits to the home-assistant organization, 10 commits to home-assistant.github.io, 6 commits to home-assistant, 1 commit to home-assistant-assets") - [Robin Laurén (@llauren)](https://github.com/llauren "1 total commits to the home-assistant organization, 1 commit to appdaemon") - [Roddie Hasan (@eiddor)](https://github.com/eiddor "6 total commits to the home-assistant organization, 6 commits to home-assistant.github.io") - [Roi Dayan (@roidayan)](https://github.com/roidayan "6 total commits to the home-assistant organization, 6 commits to home-assistant") @@ -713,14 +724,16 @@ This page contains a list of people who have contributed in one way or another t - [roqeer (@roqeer)](https://github.com/roqeer "3 total commits to the home-assistant organization, 3 commits to home-assistant") - [Ross Schulman (@rschulman)](https://github.com/rschulman "1 total commits to the home-assistant organization, 1 commit to pi-gen") - [rpitera (@rpitera)](https://github.com/rpitera "5 total commits to the home-assistant organization, 5 commits to home-assistant.github.io") +- [Rubens Panfili (@rpanfili)](https://github.com/rpanfili "1 total commits to the home-assistant organization, 1 commit to hassio-addons") - [rubund (@rubund)](https://github.com/rubund "4 total commits to the home-assistant organization, 4 commits to home-assistant") - [Ruslan Kiyanchuk (@zoresvit)](https://github.com/zoresvit "1 total commits to the home-assistant organization, 1 commit to pi-gen") -- [Russell Cloran (@rcloran)](https://github.com/rcloran "21 total commits to the home-assistant organization, 17 commits to home-assistant, 4 commits to homebridge-homeassistant") +- [Russ K (@rkubes)](https://github.com/rkubes "2 total commits to the home-assistant organization, 2 commits to pi-gen") +- [Russell Cloran (@rcloran)](https://github.com/rcloran "23 total commits to the home-assistant organization, 19 commits to home-assistant, 4 commits to homebridge-homeassistant") - [Ryan Bahm (@rdbahm)](https://github.com/rdbahm "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [Ryan Borstelmann (@SlothCroissant)](https://github.com/SlothCroissant "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [Ryan Daigle (@rwdaigle)](https://github.com/rwdaigle "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [Ryan Kraus (@rmkraus)](https://github.com/rmkraus "193 total commits to the home-assistant organization, 163 commits to home-assistant, 15 commits to home-assistant.github.io, 14 commits to home-assistant-polymer, 1 commit to home-assistant-notebooks") -- [Ryan McLean (@ryanm101)](https://github.com/ryanm101 "65 total commits to the home-assistant organization, 53 commits to hassio-cli, 7 commits to home-assistant, 5 commits to home-assistant.github.io") +- [Ryan McLean (@ryanm101)](https://github.com/ryanm101 "69 total commits to the home-assistant organization, 57 commits to hassio-cli, 7 commits to home-assistant, 5 commits to home-assistant.github.io") - [Ryan Turner (@turnrye)](https://github.com/turnrye "6 total commits to the home-assistant organization, 6 commits to home-assistant") - [Sabesto (@Sabesto)](https://github.com/Sabesto "3 total commits to the home-assistant organization, 3 commits to home-assistant") - [Sam Birch (@hotplot)](https://github.com/hotplot "2 total commits to the home-assistant organization, 2 commits to home-assistant") @@ -731,19 +744,18 @@ This page contains a list of people who have contributed in one way or another t - [Scott Griffin (@scottocs11)](https://github.com/scottocs11 "7 total commits to the home-assistant organization, 7 commits to home-assistant.github.io") - [Scott O'Neil (@americanwookie)](https://github.com/americanwookie "7 total commits to the home-assistant organization, 4 commits to home-assistant, 3 commits to home-assistant.github.io") - [Scott Reston (@ih8gates)](https://github.com/ih8gates "9 total commits to the home-assistant organization, 8 commits to home-assistant.github.io, 1 commit to home-assistant-polymer") -- [Sean Dague (@sdague)](https://github.com/sdague "72 total commits to the home-assistant organization, 49 commits to home-assistant, 14 commits to home-assistant.github.io, 5 commits to home-assistant-polymer, 3 commits to netdisco, 1 commit to home-assistant-js") +- [Sean Dague (@sdague)](https://github.com/sdague "73 total commits to the home-assistant organization, 50 commits to home-assistant, 14 commits to home-assistant.github.io, 5 commits to home-assistant-polymer, 3 commits to netdisco, 1 commit to home-assistant-js") - [Sean Gollschewsky (@gollo)](https://github.com/gollo "17 total commits to the home-assistant organization, 10 commits to home-assistant, 4 commits to home-assistant.github.io, 3 commits to hassio-build") - [Sean Wilson (@swilson)](https://github.com/swilson "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Sebastian (@sebk-666)](https://github.com/sebk-666 "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [Sebastian (@sgso)](https://github.com/sgso "3 total commits to the home-assistant organization, 3 commits to libcoap") -- [Sebastian Muszynski (@syssi)](https://github.com/syssi "49 total commits to the home-assistant organization, 24 commits to home-assistant, 23 commits to home-assistant.github.io, 2 commits to home-assistant-polymer") +- [Sebastian Muszynski (@syssi)](https://github.com/syssi "51 total commits to the home-assistant organization, 26 commits to home-assistant, 23 commits to home-assistant.github.io, 2 commits to home-assistant-polymer") - [Sebastian von Minckwitz (@teodoc)](https://github.com/teodoc "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") - [Semir Patel (@analogue)](https://github.com/analogue "2 total commits to the home-assistant organization, 2 commits to appdaemon") -- [Sergey Isachenko (@zabuldon)](https://github.com/zabuldon "7 total commits to the home-assistant organization, 7 commits to home-assistant") +- [Sergey Isachenko (@zabuldon)](https://github.com/zabuldon "9 total commits to the home-assistant organization, 9 commits to home-assistant") - [Sergey Vishnikin (@armicron)](https://github.com/armicron "33 total commits to the home-assistant organization, 33 commits to warrant") - [sfam (@sfam)](https://github.com/sfam "65 total commits to the home-assistant organization, 58 commits to home-assistant, 5 commits to home-assistant.github.io, 1 commit to netdisco, 1 commit to home-assistant-polymer") - [sharukins (@sharukins)](https://github.com/sharukins "3 total commits to the home-assistant organization, 3 commits to hassio-build") -- [Shiny (@Br3nda)](https://github.com/Br3nda "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [siebert (@siebert)](https://github.com/siebert "3 total commits to the home-assistant organization, 3 commits to home-assistant") - [Simon (@echox)](https://github.com/echox "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") - [Simon Szustkowski (@simonszu)](https://github.com/simonszu "7 total commits to the home-assistant organization, 4 commits to home-assistant.github.io, 3 commits to home-assistant") @@ -753,6 +765,7 @@ This page contains a list of people who have contributed in one way or another t - [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 "12 total commits to the home-assistant organization, 8 commits to home-assistant, 4 commits to home-assistant.github.io") - [Stefano Scipioni (@scipioni)](https://github.com/scipioni "3 total commits to the home-assistant organization, 3 commits to home-assistant") +- [Steltek (@Steltek)](https://github.com/Steltek "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") - [Stephen Edgar (@ntwb)](https://github.com/ntwb "1 total commits to the home-assistant organization, 1 commit to fabric-home-assistant") - [Stephen Hoekstra (@shoekstra)](https://github.com/shoekstra "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Stephen Yeargin (@stephenyeargin)](https://github.com/stephenyeargin "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") @@ -765,6 +778,7 @@ This page contains a list of people who have contributed in one way or another t - [Sytone (@sytone)](https://github.com/sytone "9 total commits to the home-assistant organization, 6 commits to home-assistant.github.io, 2 commits to home-assistant, 1 commit to hassio-build") - [Sébastien RAMAGE (@doudz)](https://github.com/doudz "3 total commits to the home-assistant organization, 3 commits to home-assistant") - [Sören Oldag (@soldag)](https://github.com/soldag "15 total commits to the home-assistant organization, 8 commits to home-assistant.github.io, 7 commits to home-assistant") +- [tango-foxtrot (@tango-foxtrot)](https://github.com/tango-foxtrot "1 total commits to the home-assistant organization, 1 commit to netdisco") - [Taylor Peet (@RePeet13)](https://github.com/RePeet13 "9 total commits to the home-assistant organization, 9 commits to home-assistant.github.io") - [Teagan Glenn (@Teagan42)](https://github.com/Teagan42 "59 total commits to the home-assistant organization, 49 commits to home-assistant, 9 commits to home-assistant.github.io, 1 commit to home-assistant-js") - [Ted Drain (@TD22057)](https://github.com/TD22057 "4 total commits to the home-assistant organization, 4 commits to home-assistant") @@ -778,9 +792,9 @@ This page contains a list of people who have contributed in one way or another t - [thecynic (@thecynic)](https://github.com/thecynic "4 total commits to the home-assistant organization, 4 commits to home-assistant") - [Theodor Lindquist (@theolind)](https://github.com/theolind "25 total commits to the home-assistant organization, 25 commits to home-assistant") - [Thiago Oliveira (@chilicheech)](https://github.com/chilicheech "3 total commits to the home-assistant organization, 3 commits to home-assistant") -- [Thibault Cohen (@titilambert)](https://github.com/titilambert "41 total commits to the home-assistant organization, 28 commits to home-assistant, 13 commits to home-assistant.github.io") +- [Thibault Cohen (@titilambert)](https://github.com/titilambert "44 total commits to the home-assistant organization, 31 commits to home-assistant, 13 commits to home-assistant.github.io") - [Thibault Maekelbergh (@thibmaek)](https://github.com/thibmaek "4 total commits to the home-assistant organization, 3 commits to home-assistant.github.io, 1 commit to hassio-addons") -- [Thijs de Jong (@bakedraccoon)](https://github.com/bakedraccoon "8 total commits to the home-assistant organization, 8 commits to home-assistant") +- [Thijs de Jong (@bakedraccoon)](https://github.com/bakedraccoon "9 total commits to the home-assistant organization, 9 commits to home-assistant") - [ThinkPadNL (@ThinkPadNL)](https://github.com/ThinkPadNL "4 total commits to the home-assistant organization, 4 commits to home-assistant.github.io") - [Thom Troy (@ttroy50)](https://github.com/ttroy50 "12 total commits to the home-assistant organization, 7 commits to home-assistant.github.io, 5 commits to home-assistant") - [Thomas Friedel (@tfriedel)](https://github.com/tfriedel "2 total commits to the home-assistant organization, 2 commits to home-assistant") @@ -794,9 +808,11 @@ This page contains a list of people who have contributed in one way or another t - [Tim Lyakhovetskiy (@tlyakhov)](https://github.com/tlyakhov "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Tim Wilbrink (@TWilb)](https://github.com/TWilb "15 total commits to the home-assistant organization, 15 commits to home-assistant-iOS") - [timstanley1985 (@timstanley1985)](https://github.com/timstanley1985 "4 total commits to the home-assistant organization, 4 commits to home-assistant.github.io") +- [TJ Rana (@tjrana)](https://github.com/tjrana "1 total commits to the home-assistant organization, 1 commit to pi-gen") - [tleegaard (@tleegaard)](https://github.com/tleegaard "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") - [Tobie Booth (@tobiebooth)](https://github.com/tobiebooth "4 total commits to the home-assistant organization, 3 commits to home-assistant, 1 commit to home-assistant-polymer") - [Toby Gray (@tobygray)](https://github.com/tobygray "3 total commits to the home-assistant organization, 3 commits to home-assistant") +- [Tod Schmidt (@tschmidty69)](https://github.com/tschmidty69 "19 total commits to the home-assistant organization, 15 commits to home-assistant, 3 commits to home-assistant.github.io, 1 commit to hassio-addons") - [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 "3 total commits to the home-assistant organization, 3 commits to home-assistant") - [Tom Duijf (@tomduijf)](https://github.com/tomduijf "70 total commits to the home-assistant organization, 53 commits to home-assistant, 9 commits to home-assistant.github.io, 6 commits to home-assistant-polymer, 2 commits to netdisco") @@ -808,16 +824,14 @@ This page contains a list of people who have contributed in one way or another t - [TopdRob (@TopdRob)](https://github.com/TopdRob "7 total commits to the home-assistant organization, 7 commits to home-assistant") - [Torkild Retvedt (@torkildr)](https://github.com/torkildr "2 total commits to the home-assistant organization, 2 commits to appdaemon") - [Toshik (@Toshik)](https://github.com/Toshik "1 total commits to the home-assistant organization, 1 commit to homebridge-homeassistant") -- [Touliloup (@RiRomain)](https://github.com/RiRomain "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [tradiuz (@tradiuz)](https://github.com/tradiuz "5 total commits to the home-assistant organization, 5 commits to home-assistant.github.io") - [travislreno (@travislreno)](https://github.com/travislreno "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [trbs (@trbs)](https://github.com/trbs "1 total commits to the home-assistant organization, 1 commit to netdisco") - [Trevor (@tboyce021)](https://github.com/tboyce021 "15 total commits to the home-assistant organization, 10 commits to home-assistant, 5 commits to home-assistant.github.io") - [Trey Hunner (@treyhunner)](https://github.com/treyhunner "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [trollkarlen (@trollkarlen)](https://github.com/trollkarlen "5 total commits to the home-assistant organization, 5 commits to home-assistant") -- [tschmidty69 (@tschmidty69)](https://github.com/tschmidty69 "16 total commits to the home-assistant organization, 13 commits to home-assistant, 3 commits to home-assistant.github.io") - [Tsvi Mostovicz (@tsvi)](https://github.com/tsvi "9 total commits to the home-assistant organization, 5 commits to home-assistant.github.io, 4 commits to home-assistant") -- [Tyler Page (@iamtpage)](https://github.com/iamtpage "5 total commits to the home-assistant organization, 3 commits to home-assistant.github.io, 2 commits to home-assistant") +- [Tyler Page (@iamtpage)](https://github.com/iamtpage "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [Tõnis Tobre (@tobre6)](https://github.com/tobre6 "1 total commits to the home-assistant organization, 1 commit to homebridge-homeassistant") - [uchagani (@uchagani)](https://github.com/uchagani "5 total commits to the home-assistant organization, 4 commits to home-assistant, 1 commit to home-assistant-polymer") - [Uli (@uehler)](https://github.com/uehler "5 total commits to the home-assistant organization, 5 commits to home-assistant.github.io") @@ -825,42 +839,39 @@ This page contains a list of people who have contributed in one way or another t - [upsert (@upsert)](https://github.com/upsert "1 total commits to the home-assistant organization, 1 commit to netdisco") - [User5981 (@User5981)](https://github.com/User5981 "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") - [Valentin Alexeev (@valentinalexeev)](https://github.com/valentinalexeev "11 total commits to the home-assistant organization, 8 commits to home-assistant, 3 commits to home-assistant.github.io") -- [Victor Cerutti (@victorcerutti)](https://github.com/victorcerutti "2 total commits to the home-assistant organization, 2 commits to home-assistant-polymer") +- [Victor Cerutti (@victorcerutti)](https://github.com/victorcerutti "3 total commits to the home-assistant organization, 3 commits to home-assistant-polymer") - [Viet Dzung (@dzungpv)](https://github.com/dzungpv "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") - [Vignesh Venkat (@vickyg3)](https://github.com/vickyg3 "9 total commits to the home-assistant organization, 5 commits to home-assistant, 4 commits to home-assistant.github.io") -- [Ville Skyttä (@scop)](https://github.com/scop "13 total commits to the home-assistant organization, 9 commits to home-assistant, 3 commits to netdisco, 1 commit to hassio-build") +- [Ville Skyttä (@scop)](https://github.com/scop "22 total commits to the home-assistant organization, 14 commits to home-assistant, 4 commits to home-assistant.github.io, 3 commits to netdisco, 1 commit to hassio-build") - [viswa-swami (@viswa-swami)](https://github.com/viswa-swami "9 total commits to the home-assistant organization, 9 commits to home-assistant") -- [Vlad Korniev (@vkorn)](https://github.com/vkorn "3 total commits to the home-assistant organization, 2 commits to home-assistant, 1 commit to hassio-build") +- [Vlad Korniev (@vkorn)](https://github.com/vkorn "1 total commits to the home-assistant organization, 1 commit to hassio-build") - [vllungu (@vllungu)](https://github.com/vllungu "3 total commits to the home-assistant organization, 3 commits to libcoap") - [vrs01 (@vrs01)](https://github.com/vrs01 "20 total commits to the home-assistant organization, 14 commits to home-assistant.github.io, 6 commits to appdaemon") - [Wagner Sartori Junior (@trunet)](https://github.com/trunet "1 total commits to the home-assistant organization, 1 commit to netdisco") - [Wesley Young (@wesdyoung)](https://github.com/wesdyoung "1 total commits to the home-assistant organization, 1 commit to warrant") - [Wilco Land (@Wilco89)](https://github.com/Wilco89 "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") -- [Will Boyce (@wrboyce)](https://github.com/wrboyce "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Will Heid (@bassclarinetl2)](https://github.com/bassclarinetl2 "20 total commits to the home-assistant organization, 19 commits to home-assistant.github.io, 1 commit to fabric-home-assistant") - [Will W. (@tiktok7)](https://github.com/tiktok7 "4 total commits to the home-assistant organization, 4 commits to home-assistant") -- [Willems Davy (@joyrider3774)](https://github.com/joyrider3774 "7 total commits to the home-assistant organization, 4 commits to home-assistant.github.io, 3 commits to home-assistant") +- [Willems Davy (@joyrider3774)](https://github.com/joyrider3774 "4 total commits to the home-assistant organization, 4 commits to home-assistant.github.io") - [William Johansson (@radhus)](https://github.com/radhus "1 total commits to the home-assistant organization, 1 commit to hassio") -- [William Scanlon (@w1ll1am23)](https://github.com/w1ll1am23 "110 total commits to the home-assistant organization, 75 commits to home-assistant, 33 commits to home-assistant.github.io, 2 commits to netdisco") +- [William Scanlon (@w1ll1am23)](https://github.com/w1ll1am23 "111 total commits to the home-assistant organization, 76 commits to home-assistant, 33 commits to home-assistant.github.io, 2 commits to netdisco") - [williamlehman (@williamlehman)](https://github.com/williamlehman "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") - [wind-rider (@wind-rider)](https://github.com/wind-rider "5 total commits to the home-assistant organization, 5 commits to home-assistant") - [wokar (@wokar)](https://github.com/wokar "12 total commits to the home-assistant organization, 8 commits to home-assistant, 4 commits to home-assistant.github.io") - [Wolf-Bastian Pöttner (@BastianPoe)](https://github.com/BastianPoe "7 total commits to the home-assistant organization, 4 commits to home-assistant, 3 commits to home-assistant.github.io") - [Wolfgang Malgadey (@wmalgadey)](https://github.com/wmalgadey "4 total commits to the home-assistant organization, 4 commits to home-assistant") -- [XECDesign (@XECDesign)](https://github.com/XECDesign "97 total commits to the home-assistant organization, 97 commits to pi-gen") +- [XECDesign (@XECDesign)](https://github.com/XECDesign "133 total commits to the home-assistant organization, 133 commits to pi-gen") - [Xorso (@Xorso)](https://github.com/Xorso "22 total commits to the home-assistant organization, 21 commits to home-assistant, 1 commit to hassio-addons") - [Yannick POLLART (@ypollart)](https://github.com/ypollart "8 total commits to the home-assistant organization, 4 commits to home-assistant, 4 commits to home-assistant.github.io") - [Yasin Soliman (@yasinS)](https://github.com/yasinS "4 total commits to the home-assistant organization, 4 commits to home-assistant.github.io") - [yingzong (@yingzong)](https://github.com/yingzong "1 total commits to the home-assistant organization, 1 commit to warrant") -- [Yum (@goofz)](https://github.com/goofz "2 total commits to the home-assistant organization, 2 commits to home-assistant") -- [Zac Hatfield Dodds (@Zac-HD)](https://github.com/Zac-HD "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Zen Tormey (@xehn)](https://github.com/xehn "4 total commits to the home-assistant organization, 4 commits to home-assistant.github.io") - [Zhao Lu (@zlu)](https://github.com/zlu "4 total commits to the home-assistant organization, 4 commits to home-assistant.github.io") -- [Zio Tibia (@ziotibia81)](https://github.com/ziotibia81 "14 total commits to the home-assistant organization, 7 commits to home-assistant, 7 commits to home-assistant.github.io") +- [Zio Tibia (@ziotibia81)](https://github.com/ziotibia81 "12 total commits to the home-assistant organization, 7 commits to home-assistant.github.io, 5 commits to home-assistant") - [Zorks (@Zorks)](https://github.com/Zorks "5 total commits to the home-assistant organization, 5 commits to home-assistant.github.io") - [Åskar Andersson (@olskar)](https://github.com/olskar "6 total commits to the home-assistant organization, 5 commits to home-assistant.github.io, 1 commit to hassbian-scripts") This page is irregularly updated using the [`credits_generator` tool](https://github.com/home-assistant/home-assistant.github.io/tree/next/credits_generator). If you think that you are missing, please let us know. -This page was last updated Monday, January 29th 2018, 10:42:30 pm UTC. +This page was last updated Saturday, February 10th 2018, 4:03:45 pm UTC. From 715e5e642ba58d134b62bfbc99cda37c11100f35 Mon Sep 17 00:00:00 2001 From: Diogo Gomes Date: Sat, 10 Feb 2018 16:14:19 +0000 Subject: [PATCH 297/993] Added example script (#4615) * Added example script * Update media_player.mediaroom.markdown * Minor cleanup --- .../_components/media_player.mediaroom.markdown | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/source/_components/media_player.mediaroom.markdown b/source/_components/media_player.mediaroom.markdown index 17724f0d76..047a79d80c 100644 --- a/source/_components/media_player.mediaroom.markdown +++ b/source/_components/media_player.mediaroom.markdown @@ -50,3 +50,19 @@ The component has been developed for Portuguese TV operators currently using the In most cases (single STB) you just need to setup the *name* and discovery will do the rest. In case you have more than one STB you are required to set the *host* in each one of the entries. If the STB is on the same network segment as Home Assistant, it can determine whether the device is turned on or off. Without this, the component will fail to determine the Set-top box status, and you are required to add the *optimistic* configuration variable. + +### {% linkable_title Example `press_button` script %} + +The `play_media` function can be used in scripts to change channels. + +```yaml +# Example play_media script +# +press_button: + sequence: + service: media_player.play_media + data_template: + entity_id: media_player.mediaroom_stb + media_content_id: "{{ value }}" + media_content_type: "channel" +``` From 883b0010d1bc4d6e23207f39d788d3f9269f8995 Mon Sep 17 00:00:00 2001 From: DubhAd Date: Sat, 10 Feb 2018 20:22:53 +0000 Subject: [PATCH 298/993] Add note about not working on iOS (#4620) --- source/_components/notify.html5.markdown | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/source/_components/notify.html5.markdown b/source/_components/notify.html5.markdown index 342a442971..2a5a95ef7b 100644 --- a/source/_components/notify.html5.markdown +++ b/source/_components/notify.html5.markdown @@ -14,6 +14,10 @@ ha_release: 0.27 The `html5` notification platform enables you to receive push notifications to Chrome or Firefox, no matter where you are in the world. `html5` also supports Chrome and Firefox on Android, which enables native-app-like integrations without actually needing a native app. +

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

    + To enable this platform, add the following lines to your `configuration.yaml` file: ```yaml From d7bf93730a8f8187b121f5ef7d87b7d8e508d08c Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Sat, 10 Feb 2018 14:00:19 -0800 Subject: [PATCH 299/993] Add blog post --- source/_components/mercedesme.markdown | 2 +- source/_posts/2018-02-10-release-63.markdown | 604 ++++++++++++++++++ .../images/blog/2018-02-0.63/components.png | Bin 0 -> 28372 bytes 3 files changed, 605 insertions(+), 1 deletion(-) create mode 100644 source/_posts/2018-02-10-release-63.markdown create mode 100644 source/images/blog/2018-02-0.63/components.png diff --git a/source/_components/mercedesme.markdown b/source/_components/mercedesme.markdown index 730d274094..e84e87c612 100644 --- a/source/_components/mercedesme.markdown +++ b/source/_components/mercedesme.markdown @@ -22,7 +22,7 @@ This component provides the following platforms: - Device tracker - to track location of your car

    - The component can integrate cars out of the European and African markets only. + The component can integrate cars from European and African markets only.

    To use Mercedes me in your installation, add the following to your `configuration.yaml` file: diff --git a/source/_posts/2018-02-10-release-63.markdown b/source/_posts/2018-02-10-release-63.markdown new file mode 100644 index 0000000000..e9fb47b45a --- /dev/null +++ b/source/_posts/2018-02-10-release-63.markdown @@ -0,0 +1,604 @@ +--- +layout: post +title: "0.63: Entity Registry, SQL Sensor, Mercedes cars" +description: "Reserve entity IDs for your devices with the new entity registry, show query results as a sensor and yet another car integrated." +date: 2018-02-10 01:00:00 +date_formatted: "February 10, 2018" +author: Paulus Schoutsen +author_twitter: balloob +comments: true +categories: Release-Notes +og_image: /images/blog/2018-02-0.63/components.png +--- + +
    + +## {% linkable_title Date set for dropping Python 3.4 support %} + +As [announced in October](https://home-assistant.io/blog/2017/10/06/deprecating-python-3.4-support/), we're going to drop Python 3.4 support in 2018. We've now decided that in two releases, 0.65, the minimum Python version that will be supported is bumped to 3.5.3. This won't impact most users. You are already fine if you're using Hass.io, the latest Debian stable (Stretch) or a derivative of that (Raspbian, Ubuntu). + +## {% linkable_title Entity Registry %} + +This release introduces the entity registry. The entity registry allows integrations to reserve entity IDs. This means that we'll automatically grant an entity ID to a device. It's reserved so that no other device will ever get that entity ID. It also means that as a user, you will be able to customize the entity IDs for these devices. + +For an integration to leverage the entity registry, it needs to define a unique ID for each of their entities. A unique ID is something that we can uniquely identify the device and that is not configurable. So a serial number and mac address are ok, IP addresses or names are not. + +Examples of integrations that have unique IDs defined in this release are Z-Wave, Hue, Nest, LIFX, Sonos, Apple TV. + +To update the entity ID that will be assigned to your device, update `/entity_registry.yaml` and restart Home Assistant (reloading on the fly is planned for a future release). + +The entity registry will assign an entity ID the first time that a device is seen. This should be the same entity ID as it always was before. If this is not the case, update the registration entity to change it back to the old entity ID. + +We're planning a lot of cool stuff around the entity registry. Stay tuned! + +## {% linkable_title New Platforms %} + +- Adds allergy/disease sensor platform from Pollen.com ([@bachya] - [#11573]) ([sensor.pollen docs]) (new-platform) +- Add Goalfeed platform ([@wardcraigj] - [#11098]) ([goalfeed docs]) (new-platform) +- Add Melissa (HVAC/climate) component ([@kennedyshead] - [#11503]) ([melissa docs]) ([sensor.melissa docs]) (new-platform) +- Mediaroom ([@dgomes] - [#11864]) ([media_player.mediaroom docs]) (new-platform) +- Add Xiaomi Universal IR Remote (Chuangmi IR) ([@cnrd] - [#11891]) ([remote.xiaomi_miio docs]) (new-platform) +- SQL sensor ([@dgomes] - [#12142]) ([sensor.sql docs]) (new-platform) +- Add Mercedes me component ([@ReneNulschDE] - [#11743]) (new-platform) + +## {% linkable_title If you need help... %} + +...don't hesitate to use our very active [forums](https://community.home-assistant.io/) or join us for a little [chat](https://discord.gg/c5DvZ4e). The release notes have comments enabled but it's preferred if you use the former communication channels. Thanks. + +## {% linkable_title Reporting Issues %} + +Experiencing issues introduced by this release? Please report them in our [issue tracker](https://github.com/home-assistant/home-assistant/issues). Make sure to fill in all fields of the issue template. + + + +## {% linkable_title Breaking Changes %} + +- updated sensor name ([@philklei] - [#12084]) ([sensor.tahoma docs]) (breaking change) +- Originally Canary camera is added per location and only displays an image that was captured due to motion. Now it is per device (each location can have multiple devices) with live stream support. ([@snjoetw] - [#11949]) ([canary docs]) ([camera.canary docs]) (breaking change) +- Avoid influxdb filling connection pool: The influxdb `retry_queue_limit` configuration variable no longer has any effect and can be removed. ([@amelchio] - [#12182]) ([influxdb docs]) (breaking change) +- Some spelling mistakes in default entity names have been fixed in ([@OttoWinter] - [#12041]). This is causing these `entity_id` changes: + - [Seven segments display](https://home-assistant.io/components/image_processing.seven_segments/): `image_processing.seven_segement_ocr_[...]` → `image_processing.seven_segment_ocr_[...]` + - [Rain Bird Switch](https://home-assistant.io/components/switch.rainbird/): `switch.sprinker_[...]` → `switch.sprinkler_[...]` + - [OpenEVSE Sensor](https://home-assistant.io/components/sensor.openevse/): `sensor.ambient_termperature` → `sensor.ambient_temperature` + - [Fido](https://home-assistant.io/components/sensor.fido/): `sensor.[...]_internaltional_remaining` → `sensor.[...]_international remaining` +- From version 0.64, Home Assistant will by default purge recorded state history that is older than 10 days. If you want to keep your recorded data for longer than that, you must configure the number of days to retain: + ```yaml + recorder: + purge_keep_days: 30 + ``` + + If you want to keep the previous default of never deleting history, use this configuration: + ```yaml + recorder: + purge_interval: 0 + ``` + ([@amelchio] - [#11976]) +- Fix duplicate entity_ids in System Monitor ([@fanaticDavid] - [#12124]) ([sensor.systemmonitor docs]) (breaking change) + + | Resource | Old Entity ID | New Entity ID | + | :------------------ | :------------------ |:-------------------------| + | disk_use | sensor.disk_used | sensor.disk_use | + | load_15m | sensor.average_load_15m | sensor.load_15m | + | load_1m | sensor.average_load_1m | sensor.load_1m | + | load_5m | sensor.average_load_5m | sensor.load_5m | + | memory_free | sensor.ram_available | sensor.memory_free | + | memory_use | sensor.ram_used | sensor.memory_use | + | network_in | sensor.received | sensor.network_in | + | network_out | sensor.sent | sensor.network_out | + | packets_in | sensor.packets_received | sensor.packets_in | + | packets_out | sensor.packets_sent | sensor.packets_out | + | processor_use | sensor.cpu_used | sensor.processor_use | + | swap_use | sensor.swap_used | sensor.swap_use | + +- Developers only: Following EntityComponent methods have been removed: `extract_from_service`, `async_update_group`, `async_reset`, `prepare_reload` ([@balloob] - [#12237]) (breaking change) + + +## {% linkable_title All changes %} + +- Map media_stop to idle state ([@akloeckner] - [#11819]) +- Adds allergy/disease sensor platform from Pollen.com ([@bachya] - [#11573]) ([sensor.pollen docs]) (new-platform) +- check_config.py: allow colorlog==3.1. ([@dotlambda] - [#11927]) +- Weblink - Allow relative urls in config ([@ReneNulschDE] - [#11808]) ([weblink docs]) +- Panel_Iframe - Allow relative urls in config ([@ReneNulschDE] - [#11832]) ([panel_iframe docs]) +- Python 3.6 invalid escape sequence deprecation fixes ([@scop] - [#11941]) +- tests: Use assertEqual instead of deprecated assertEquals ([@scop] - [#11943]) +- huawei_router: Fix documentation link ([@scop] - [#11961]) ([device_tracker.huawei_router docs]) +- Spelling fixes ([@scop] - [#11940]) +- Upgrade sqlalchemy to 1.2.2 ([@fabaff] - [#11956]) +- Upgrade youtube_dl to 2018.01.21 ([@fabaff] - [#11955]) ([media_extractor docs]) +- Upgrade sphinx-autodoc-typehints to 1.2.4 ([@fabaff] - [#11954]) +- Upgrade coinmarketcap to 4.2.1 ([@fabaff] - [#11953]) ([sensor.coinmarketcap docs]) +- Bump dev to 0.63.0.dev0 ([@fabaff] - [#11952]) +- Update xiaomi_aqara.py ([@MGWGIT] - [#11969]) ([sensor.xiaomi_aqara docs]) +- panasonic_viera: Set device name from discovery info ([@scop] - [#11990]) ([media_player.panasonic_viera docs]) +- Update panasonic_viera to 0.3 ([@scop] - [#11989]) ([media_player.panasonic_viera docs]) +- Fix 11982 - uvc don't handle null as username ([@bratanon] - [#11984]) ([camera.uvc docs]) +- Add Goalfeed platform ([@wardcraigj] - [#11098]) ([goalfeed docs]) (new-platform) +- Added support for hourly percent change in coinmarketcap component ([@kevindgoff] - [#11996]) ([sensor.coinmarketcap docs]) +- Upgrade coinbase to 2.0.7 ([@fabaff] - [#11992]) ([coinbase docs]) ([sensor.coinbase docs]) +- Upgrade pyota to 2.0.4 ([@fabaff] - [#11991]) ([iota docs]) +- Fixed Canary temperature sensor and remapped air quality value ([@snjoetw] - [#11355]) ([canary docs]) ([sensor.canary docs]) +- Refactor Alexa Smart Home API ([@bitglue] - [#12016]) ([alexa docs]) +- Report states ([@bitglue] - [#11973]) ([alexa docs]) +- alexa: Add media_player InputController support ([@philk] - [#11946]) ([alexa docs]) +- emulated_hue: allow customization within emulated_hue configuration ([@jackwilsdon] - [#11981]) ([emulated_hue docs]) +- Flake8 35 ([@scop] - [#11972]) ([feedreader docs]) ([spc docs]) ([media_player.bluesound docs]) ([media_player.clementine docs]) ([sensor.fritzbox_callmonitor docs]) ([sensor.qnap docs]) ([sensor.synologydsm docs]) +- Typing fixes ([@scop] - [#12015]) +- Fix DoorBird push notifications for installations with an API password ([@Klikini] - [#12020]) ([doorbird docs]) +- Bump upstream lib version. ([@Cinntax] - [#12021]) ([climate.venstar docs]) +- sensor.deutsche_bahn: add only_direct option ([@akloeckner] - [#11999]) ([sensor.deutsche_bahn docs]) +- Fix MQTT cover availability subscription ([@OttoWinter] - [#12036]) ([cover.mqtt docs]) +- Spelling fixes ([@OttoWinter] - [#12041]) (breaking change) +- Online state for samsungtv is jumping when TV is idle ([@kennedyshead] - [#11998]) ([media_player.samsungtv docs]) +- Upgrade astral to 1.5 ([@fabaff] - [#12042]) +- Refactor alexa smart_home tests ([@bitglue] - [#12044]) +- Handling of payload not for this entity. ([@freol35241] - [#11836]) ([binary_sensor.mqtt docs]) +- Refactor Google Assistant query_device ([@philk] - [#12022]) ([google_assistant docs]) +- Entity registry ([@balloob] - [#11979]) ([group docs]) ([climate.nest docs]) +- Return all attributes that are not None in base lock entity class ([@snjoetw] - [#12049]) ([lock docs]) +- Extract requirements ([@balloob] - [#12051]) +- Prepare for recorder purge to be active by default ([@amelchio] - [#11976]) (breaking change) +- Bumped up pymochad requirement to 0.2.0 as a fix for #11928 ([@aosadchyy] - [#12014]) ([mochad docs]) +- Publish errors on the event bus ([@postlund] - [#11964]) ([system_log docs]) +- Unique ID for LIFX lights ([@amelchio] - [#12064]) ([light.lifx docs]) +- Deconz use entity registry ([@Kane610] - [#12067]) ([deconz docs]) ([binary_sensor.deconz docs]) ([light.deconz docs]) ([sensor.deconz docs]) +- Flake8 bugbear fixes ([@scop] - [#12072]) ([plant docs]) ([rfxtrx docs]) ([zwave docs]) ([climate.heatmiser docs]) ([media_player.plex docs]) ([notify.kodi docs]) +- Fix demo platform support ([@ciotlosm] - [#12070]) +- fix event channel name ([@wardcraigj] - [#12077]) ([goalfeed docs]) +- fixed timestamp problem in firefox ([@escoand] - [#12073]) ([weather.openweathermap docs]) +- Handle more file closing using context manager ([@scop] - [#11942]) ([light.greenwave docs]) ([notify.gntp docs]) ([sensor.onewire docs]) +- Influx import improvements ([@RePeet13] - [#11988]) +- Set flux default stop time to dusk ([@infernix] - [#12062]) ([switch.flux docs]) +- Add conditions to forecast ([@escoand] - [#12074]) ([weather.openweathermap docs]) +- Squeezebox Fix duplicate server from discovery ([@mezz64] - [#12063]) ([media_player.squeezebox docs]) +- Upgrade keyring to 11.0.0 ([@fabaff] - [#12082]) +- Correct use of middleware async handling. ([@pelson] - [#12078]) ([http docs]) +- updated sensor name ([@philklei] - [#12084]) ([sensor.tahoma docs]) (breaking change) +- Fix detection of mobile browsers ([@c727] - [#12075]) ([frontend docs]) +- update tahoma api to version 0.0.11 ([@philklei] - [#12099]) ([tahoma docs]) +- added media_stop ([@jodur] - [#12100]) ([media_player.vlc docs]) +- Goalfeed channel ([@wardcraigj] - [#12086]) ([goalfeed docs]) +- Update jinja2 to 2.10 ([@arsaboo] - [#12118]) +- Downgrade Sonarr and Radarr 'Host is not avaliable' errors to warnings ([@timmo001] - [#12119]) ([sensor.radarr docs]) ([sensor.sonarr docs]) +- Fixes away_mode error on startup ([@ciotlosm] - [#12121]) ([climate.generic_thermostat docs]) +- except vol.MultipleInvalid in Broadlink #11795 ([@danielhiversen] - [#12107]) ([sensor.broadlink docs]) +- Adds SUPPORT_TARGET_TEMPERATURE_HIGH and SUPPORT_TARGET_TEMPERATURE_LOW support ([@hawk259] - [#12110]) ([climate.ecobee docs]) +- Dark sky precip accumulation ([@nordlead2005] - [#12127]) ([sensor.darksky docs]) +- fixed wrong check for valid range of 'rgb' values ([@PaulAnnekov] - [#12132]) ([light.xiaomi_aqara docs]) +- OpenALPR Cloud API - transfer image in body of POST request ([@ReneNulschDE] - [#12112]) ([image_processing.openalpr_cloud docs]) +- Add support for "off" function to iTunes ([@lexam79] - [#12109]) ([media_player.itunes docs]) +- Remove asyncio.test_utils to fix tests in Docker/Python 3.7 ([@ubnt-marc-khouri] - [#12102]) +- Add Mercedes me component ([@ReneNulschDE] - [#11743]) +- Spelling fixes ([@scop] - [#12138]) ([plant docs]) ([switch.pulseaudio_loopback docs]) +- Update volumio component ([@titilambert] - [#12045]) ([media_player.volumio docs]) +- Adding information about current TV channel to WebOS media player ([@led-spb] - [#11339]) ([media_player.webostv docs]) +- Fix #8475 device tracker ubus tracks unauthenticated and unassociated devices ([@aarnaud] - [#12140]) ([device_tracker.ubus docs]) +- Fix #11875 Ubus broken since upgrade to 0 57 ([@aarnaud] - [#12141]) ([device_tracker.ubus docs]) +- Update flake8-docstrings to 1.0.3 ([@scop] - [#12136]) +- Tado fixes ([@NigelRook] - [#11294]) ([tado docs]) ([climate.tado docs]) +- Add Melissa (HVAC/climate) component ([@kennedyshead] - [#11503]) ([melissa docs]) ([sensor.melissa docs]) (new-platform) +- Mediaroom ([@dgomes] - [#11864]) ([media_player.mediaroom docs]) (new-platform) +- Upgrade mutagen to 1.40.0 ([@fabaff] - [#12152]) ([tts docs]) +- Upgrade TwitterAPI to 2.4.8 ([@fabaff] - [#12148]) ([notify.twitter docs]) +- fix generic_thermostat bug when restore state from HA start up ([@crhan] - [#12134]) ([climate.generic_thermostat docs]) +- Adding xy_color attribute support to deconz lights ([@ErnstEeldert] - [#12106]) ([light.deconz docs]) +- update python-openzwave to 4.1.3 ([@perosb] - [#12057]) ([zwave docs]) +- Panasonic viera new services ([@dgomes] - [#11963]) ([media_player docs]) ([media_player.panasonic_viera docs]) +- [Mediaroom media_player] Follow up on PR #11864 ([@dgomes] - [#12155]) ([media_player.mediaroom docs]) +- Tests for samsungtv ([@kennedyshead] - [#11933]) +- Upgrade influxdb to 5.0.0 ([@fabaff] - [#12156]) ([influxdb docs]) +- add delay_arrival ([@akloeckner] - [#12169]) ([sensor.deutsche_bahn docs]) +- Move TP-Link socket LED state setting to update() ([@DanNixon] - [#12170]) ([switch.tplink docs]) +- Upgrade schiene to 0.21 ([@fabaff] - [#12176]) ([sensor.deutsche_bahn docs]) +- python-miio version bumped. Fixes all xiaomi_miio components. (Closes: #12017, Closes: #11948, Closes: #11200) ([@syssi] - [#12188]) ([fan.xiaomi_miio docs]) ([light.xiaomi_miio docs]) ([switch.xiaomi_miio docs]) ([vacuum.xiaomi_miio docs]) +- Services (small_pr)(fix): Added missing return on data template error ([@tschmidty69] - [#12184]) +- fix ecobee is_aux_heat_on property ([@titilambert] - [#12186]) ([climate.ecobee docs]) +- Upgrade pytouchline to 0.7 ([@tbergo] - [#12179]) ([climate.touchline docs]) +- Canary live stream ([@snjoetw] - [#11949]) ([canary docs]) ([camera.canary docs]) (breaking change) +- Replace Gitter with Discord ([@fabaff] - [#12199]) +- Upgrade Sphinx to 1.6.7 ([@fabaff] - [#12200]) +- Change attributes in new Mercedes Me component ([@ReneNulschDE] - [#12147]) ([mercedesme docs]) ([binary_sensor.mercedesme docs]) ([device_tracker.mercedesme docs]) ([sensor.mercedesme docs]) +- Binary Sensor Template: Add icon_template and entity_picture_template support ([@hawk259] - [#12158]) ([binary_sensor.template docs]) +- Bump pyeconet version to fix JSONDecodeError ([@w1ll1am23] - [#12204]) ([climate.econet docs]) +- Add support for Alexa.StepSpeaker ([@lucasweb78] - [#12183]) ([alexa docs]) +- Upgrade wakeonlan to 1.0.0 ([@Tadly] - [#12190]) ([wake_on_lan docs]) ([media_player.panasonic_viera docs]) ([media_player.samsungtv docs]) ([media_player.webostv docs]) ([switch.wake_on_lan docs]) +- zha: Update to bellows 0.5.0+zigpy ([@rcloran] - [#12187]) ([zha docs]) ([binary_sensor.zha docs]) ([light.zha docs]) ([sensor.zha docs]) +- Make waterfurnace recovery more robust ([@sdague] - [#12202]) ([waterfurnace docs]) +- Much nicer icon ([@lance36] - [#12212]) ([vacuum.xiaomi_miio docs]) +- Properly handle thresholds of zero ([@DanNixon] - [#12175]) ([binary_sensor.threshold docs]) +- zha: Add support for XBee radios ([@rcloran] - [#12205]) ([zha docs]) ([binary_sensor.zha docs]) +- Fix clear playlist in Volumio component ([@titilambert] - [#12173]) ([media_player.volumio docs]) +- Add Xiaomi Universal IR Remote (Chuangmi IR) ([@cnrd] - [#11891]) ([remote.xiaomi_miio docs]) (new-platform) +- Fix Xeoma camera platform to allow different admin/viewer credentials ([@jeradM] - [#12161]) ([camera.xeoma docs]) +- Xiaomi MiIO Light: Brightness mapping improved ([@syssi] - [#12203]) ([light.xiaomi_miio docs]) +- Fixes according to review from @MartinHjelmare Thank you. ([@kennedyshead] - [#12171]) ([climate.melissa docs]) ([sensor.melissa docs]) +- Fix logger bug on Windows: path contains '\'. ([@fanthos] - [#12197]) ([system_log docs]) +- Catch concurrent.futures.CancelledError in websocket code. ([@pelson] - [#12150]) ([websocket_api docs]) +- Update pushsafer.py ([@appzer] - [#11466]) ([notify.pushsafer docs]) +- Add wake on lan capability to philips TV ([@frog32] - [#12065]) ([media_player.philips_js docs]) +- Specify the minimum python version in the setup.py. ([@pelson] - [#12144]) +- Return of entity_id in template platforms ([@amelchio] - [#12234]) ([binary_sensor.template docs]) ([cover.template docs]) ([light.template docs]) ([sensor.template docs]) ([switch.template docs]) +- Allow zero purge_interval to disable recorder purge ([@amelchio] - [#12220]) +- Update min js=latest version ([@andrey-git] - [#12091]) ([frontend docs]) +- librouteros version bump ([@zabuldon] - [#12227]) ([device_tracker.mikrotik docs]) +- SQL sensor ([@dgomes] - [#12142]) ([sensor.sql docs]) (new-platform) +- Fixes for tesla. New sensors. ([@zabuldon] - [#12225]) ([tesla docs]) ([sensor.tesla docs]) +- Entity layer cleanup ([@balloob] - [#12237]) (breaking change) +- [SMALL PATCH] Sql sensor ([@dgomes] - [#12242]) ([sensor.sql docs]) +- Set tahoma cover update interval to default ([@bakedraccoon] - [#12232]) ([cover.tahoma docs]) +- Avoid influxdb filling connection pool ([@amelchio] - [#12182]) ([influxdb docs]) (breaking change) +- Force update support for mqtt binary sensor ([@mkfink] - [#12092]) ([binary_sensor.mqtt docs]) +- Added password mode to input_text (obscure content of text box) ([@covrig] - [#11849]) ([input_text docs]) ([sensor.xiaomi_aqara docs]) +- Fix cover service description ([@cdce8p] - [#12243]) +- Add explicit first-time config for new purge_keep_days default ([@amelchio] - [#12246]) +- added more debug logging for sensor.alpha_vantage ([@ChristianKuehnel] - [#12249]) ([sensor.alpha_vantage docs]) +- Add Service Schema to Broadlink Switch ([@maddox] - [#12253]) ([switch.broadlink docs]) +- Update aiohttp 2.3.10 / yarl 1.1.0 ([@pvizeli] - [#12244]) +- Fix source code using Windows newline ([@OttoWinter] - [#12248]) +- miflora - fix for exception handling bug ([@ChristianKuehnel] - [#12149]) ([sensor.miflora docs]) +- Update pyhomematic to 0.1.39 ([@danielperna84] - [#12265]) ([homematic docs]) +- Update owntracks.py ([@luca-angemi] - [#12260]) ([device_tracker.owntracks docs]) +- Fix for iTunes media player not updating artwork ([@lexam79] - [#12089]) ([media_player.itunes docs]) +- Fix duplicate entity_ids in System Monitor ([@fanaticDavid] - [#12124]) ([sensor.systemmonitor docs]) (breaking change) +- One bug fix and one improvement to the statistics sensor. ([@glance-] - [#12259]) ([sensor.statistics docs]) +- allow wildcards in subscription ([@escoand] - [#12247]) ([device_tracker.mqtt docs]) +- Retry keyset cloud ([@balloob] - [#12270]) ([cloud docs]) +- Update limitlessled requirement to v1.0.9 ([@vaceslav] - [#12275]) ([light.limitlessled docs]) + +[#11098]: https://github.com/home-assistant/home-assistant/pull/11098 +[#11294]: https://github.com/home-assistant/home-assistant/pull/11294 +[#11339]: https://github.com/home-assistant/home-assistant/pull/11339 +[#11355]: https://github.com/home-assistant/home-assistant/pull/11355 +[#11466]: https://github.com/home-assistant/home-assistant/pull/11466 +[#11503]: https://github.com/home-assistant/home-assistant/pull/11503 +[#11573]: https://github.com/home-assistant/home-assistant/pull/11573 +[#11743]: https://github.com/home-assistant/home-assistant/pull/11743 +[#11808]: https://github.com/home-assistant/home-assistant/pull/11808 +[#11819]: https://github.com/home-assistant/home-assistant/pull/11819 +[#11832]: https://github.com/home-assistant/home-assistant/pull/11832 +[#11836]: https://github.com/home-assistant/home-assistant/pull/11836 +[#11849]: https://github.com/home-assistant/home-assistant/pull/11849 +[#11864]: https://github.com/home-assistant/home-assistant/pull/11864 +[#11891]: https://github.com/home-assistant/home-assistant/pull/11891 +[#11927]: https://github.com/home-assistant/home-assistant/pull/11927 +[#11933]: https://github.com/home-assistant/home-assistant/pull/11933 +[#11940]: https://github.com/home-assistant/home-assistant/pull/11940 +[#11941]: https://github.com/home-assistant/home-assistant/pull/11941 +[#11942]: https://github.com/home-assistant/home-assistant/pull/11942 +[#11943]: https://github.com/home-assistant/home-assistant/pull/11943 +[#11946]: https://github.com/home-assistant/home-assistant/pull/11946 +[#11949]: https://github.com/home-assistant/home-assistant/pull/11949 +[#11952]: https://github.com/home-assistant/home-assistant/pull/11952 +[#11953]: https://github.com/home-assistant/home-assistant/pull/11953 +[#11954]: https://github.com/home-assistant/home-assistant/pull/11954 +[#11955]: https://github.com/home-assistant/home-assistant/pull/11955 +[#11956]: https://github.com/home-assistant/home-assistant/pull/11956 +[#11961]: https://github.com/home-assistant/home-assistant/pull/11961 +[#11963]: https://github.com/home-assistant/home-assistant/pull/11963 +[#11964]: https://github.com/home-assistant/home-assistant/pull/11964 +[#11969]: https://github.com/home-assistant/home-assistant/pull/11969 +[#11972]: https://github.com/home-assistant/home-assistant/pull/11972 +[#11973]: https://github.com/home-assistant/home-assistant/pull/11973 +[#11976]: https://github.com/home-assistant/home-assistant/pull/11976 +[#11979]: https://github.com/home-assistant/home-assistant/pull/11979 +[#11981]: https://github.com/home-assistant/home-assistant/pull/11981 +[#11984]: https://github.com/home-assistant/home-assistant/pull/11984 +[#11988]: https://github.com/home-assistant/home-assistant/pull/11988 +[#11989]: https://github.com/home-assistant/home-assistant/pull/11989 +[#11990]: https://github.com/home-assistant/home-assistant/pull/11990 +[#11991]: https://github.com/home-assistant/home-assistant/pull/11991 +[#11992]: https://github.com/home-assistant/home-assistant/pull/11992 +[#11996]: https://github.com/home-assistant/home-assistant/pull/11996 +[#11998]: https://github.com/home-assistant/home-assistant/pull/11998 +[#11999]: https://github.com/home-assistant/home-assistant/pull/11999 +[#12014]: https://github.com/home-assistant/home-assistant/pull/12014 +[#12015]: https://github.com/home-assistant/home-assistant/pull/12015 +[#12016]: https://github.com/home-assistant/home-assistant/pull/12016 +[#12020]: https://github.com/home-assistant/home-assistant/pull/12020 +[#12021]: https://github.com/home-assistant/home-assistant/pull/12021 +[#12022]: https://github.com/home-assistant/home-assistant/pull/12022 +[#12036]: https://github.com/home-assistant/home-assistant/pull/12036 +[#12041]: https://github.com/home-assistant/home-assistant/pull/12041 +[#12042]: https://github.com/home-assistant/home-assistant/pull/12042 +[#12044]: https://github.com/home-assistant/home-assistant/pull/12044 +[#12045]: https://github.com/home-assistant/home-assistant/pull/12045 +[#12049]: https://github.com/home-assistant/home-assistant/pull/12049 +[#12051]: https://github.com/home-assistant/home-assistant/pull/12051 +[#12057]: https://github.com/home-assistant/home-assistant/pull/12057 +[#12062]: https://github.com/home-assistant/home-assistant/pull/12062 +[#12063]: https://github.com/home-assistant/home-assistant/pull/12063 +[#12064]: https://github.com/home-assistant/home-assistant/pull/12064 +[#12065]: https://github.com/home-assistant/home-assistant/pull/12065 +[#12067]: https://github.com/home-assistant/home-assistant/pull/12067 +[#12070]: https://github.com/home-assistant/home-assistant/pull/12070 +[#12072]: https://github.com/home-assistant/home-assistant/pull/12072 +[#12073]: https://github.com/home-assistant/home-assistant/pull/12073 +[#12074]: https://github.com/home-assistant/home-assistant/pull/12074 +[#12075]: https://github.com/home-assistant/home-assistant/pull/12075 +[#12077]: https://github.com/home-assistant/home-assistant/pull/12077 +[#12078]: https://github.com/home-assistant/home-assistant/pull/12078 +[#12082]: https://github.com/home-assistant/home-assistant/pull/12082 +[#12084]: https://github.com/home-assistant/home-assistant/pull/12084 +[#12086]: https://github.com/home-assistant/home-assistant/pull/12086 +[#12089]: https://github.com/home-assistant/home-assistant/pull/12089 +[#12091]: https://github.com/home-assistant/home-assistant/pull/12091 +[#12092]: https://github.com/home-assistant/home-assistant/pull/12092 +[#12099]: https://github.com/home-assistant/home-assistant/pull/12099 +[#12100]: https://github.com/home-assistant/home-assistant/pull/12100 +[#12102]: https://github.com/home-assistant/home-assistant/pull/12102 +[#12106]: https://github.com/home-assistant/home-assistant/pull/12106 +[#12107]: https://github.com/home-assistant/home-assistant/pull/12107 +[#12109]: https://github.com/home-assistant/home-assistant/pull/12109 +[#12110]: https://github.com/home-assistant/home-assistant/pull/12110 +[#12112]: https://github.com/home-assistant/home-assistant/pull/12112 +[#12118]: https://github.com/home-assistant/home-assistant/pull/12118 +[#12119]: https://github.com/home-assistant/home-assistant/pull/12119 +[#12121]: https://github.com/home-assistant/home-assistant/pull/12121 +[#12124]: https://github.com/home-assistant/home-assistant/pull/12124 +[#12127]: https://github.com/home-assistant/home-assistant/pull/12127 +[#12132]: https://github.com/home-assistant/home-assistant/pull/12132 +[#12134]: https://github.com/home-assistant/home-assistant/pull/12134 +[#12136]: https://github.com/home-assistant/home-assistant/pull/12136 +[#12138]: https://github.com/home-assistant/home-assistant/pull/12138 +[#12140]: https://github.com/home-assistant/home-assistant/pull/12140 +[#12141]: https://github.com/home-assistant/home-assistant/pull/12141 +[#12142]: https://github.com/home-assistant/home-assistant/pull/12142 +[#12144]: https://github.com/home-assistant/home-assistant/pull/12144 +[#12147]: https://github.com/home-assistant/home-assistant/pull/12147 +[#12148]: https://github.com/home-assistant/home-assistant/pull/12148 +[#12149]: https://github.com/home-assistant/home-assistant/pull/12149 +[#12150]: https://github.com/home-assistant/home-assistant/pull/12150 +[#12152]: https://github.com/home-assistant/home-assistant/pull/12152 +[#12155]: https://github.com/home-assistant/home-assistant/pull/12155 +[#12156]: https://github.com/home-assistant/home-assistant/pull/12156 +[#12158]: https://github.com/home-assistant/home-assistant/pull/12158 +[#12161]: https://github.com/home-assistant/home-assistant/pull/12161 +[#12169]: https://github.com/home-assistant/home-assistant/pull/12169 +[#12170]: https://github.com/home-assistant/home-assistant/pull/12170 +[#12171]: https://github.com/home-assistant/home-assistant/pull/12171 +[#12173]: https://github.com/home-assistant/home-assistant/pull/12173 +[#12175]: https://github.com/home-assistant/home-assistant/pull/12175 +[#12176]: https://github.com/home-assistant/home-assistant/pull/12176 +[#12179]: https://github.com/home-assistant/home-assistant/pull/12179 +[#12182]: https://github.com/home-assistant/home-assistant/pull/12182 +[#12183]: https://github.com/home-assistant/home-assistant/pull/12183 +[#12184]: https://github.com/home-assistant/home-assistant/pull/12184 +[#12186]: https://github.com/home-assistant/home-assistant/pull/12186 +[#12187]: https://github.com/home-assistant/home-assistant/pull/12187 +[#12188]: https://github.com/home-assistant/home-assistant/pull/12188 +[#12190]: https://github.com/home-assistant/home-assistant/pull/12190 +[#12197]: https://github.com/home-assistant/home-assistant/pull/12197 +[#12199]: https://github.com/home-assistant/home-assistant/pull/12199 +[#12200]: https://github.com/home-assistant/home-assistant/pull/12200 +[#12202]: https://github.com/home-assistant/home-assistant/pull/12202 +[#12203]: https://github.com/home-assistant/home-assistant/pull/12203 +[#12204]: https://github.com/home-assistant/home-assistant/pull/12204 +[#12205]: https://github.com/home-assistant/home-assistant/pull/12205 +[#12212]: https://github.com/home-assistant/home-assistant/pull/12212 +[#12220]: https://github.com/home-assistant/home-assistant/pull/12220 +[#12225]: https://github.com/home-assistant/home-assistant/pull/12225 +[#12227]: https://github.com/home-assistant/home-assistant/pull/12227 +[#12232]: https://github.com/home-assistant/home-assistant/pull/12232 +[#12234]: https://github.com/home-assistant/home-assistant/pull/12234 +[#12237]: https://github.com/home-assistant/home-assistant/pull/12237 +[#12242]: https://github.com/home-assistant/home-assistant/pull/12242 +[#12243]: https://github.com/home-assistant/home-assistant/pull/12243 +[#12244]: https://github.com/home-assistant/home-assistant/pull/12244 +[#12246]: https://github.com/home-assistant/home-assistant/pull/12246 +[#12247]: https://github.com/home-assistant/home-assistant/pull/12247 +[#12248]: https://github.com/home-assistant/home-assistant/pull/12248 +[#12249]: https://github.com/home-assistant/home-assistant/pull/12249 +[#12253]: https://github.com/home-assistant/home-assistant/pull/12253 +[#12259]: https://github.com/home-assistant/home-assistant/pull/12259 +[#12260]: https://github.com/home-assistant/home-assistant/pull/12260 +[#12265]: https://github.com/home-assistant/home-assistant/pull/12265 +[#12270]: https://github.com/home-assistant/home-assistant/pull/12270 +[#12275]: https://github.com/home-assistant/home-assistant/pull/12275 +[@ChristianKuehnel]: https://github.com/ChristianKuehnel +[@Cinntax]: https://github.com/Cinntax +[@DanNixon]: https://github.com/DanNixon +[@ErnstEeldert]: https://github.com/ErnstEeldert +[@Kane610]: https://github.com/Kane610 +[@Klikini]: https://github.com/Klikini +[@MGWGIT]: https://github.com/MGWGIT +[@NigelRook]: https://github.com/NigelRook +[@OttoWinter]: https://github.com/OttoWinter +[@PaulAnnekov]: https://github.com/PaulAnnekov +[@RePeet13]: https://github.com/RePeet13 +[@ReneNulschDE]: https://github.com/ReneNulschDE +[@Tadly]: https://github.com/Tadly +[@aarnaud]: https://github.com/aarnaud +[@akloeckner]: https://github.com/akloeckner +[@amelchio]: https://github.com/amelchio +[@andrey-git]: https://github.com/andrey-git +[@aosadchyy]: https://github.com/aosadchyy +[@appzer]: https://github.com/appzer +[@arsaboo]: https://github.com/arsaboo +[@bachya]: https://github.com/bachya +[@bakedraccoon]: https://github.com/bakedraccoon +[@balloob]: https://github.com/balloob +[@bitglue]: https://github.com/bitglue +[@bratanon]: https://github.com/bratanon +[@c727]: https://github.com/c727 +[@cdce8p]: https://github.com/cdce8p +[@ciotlosm]: https://github.com/ciotlosm +[@cnrd]: https://github.com/cnrd +[@covrig]: https://github.com/covrig +[@crhan]: https://github.com/crhan +[@danielhiversen]: https://github.com/danielhiversen +[@danielperna84]: https://github.com/danielperna84 +[@dgomes]: https://github.com/dgomes +[@dotlambda]: https://github.com/dotlambda +[@escoand]: https://github.com/escoand +[@fabaff]: https://github.com/fabaff +[@fanaticDavid]: https://github.com/fanaticDavid +[@fanthos]: https://github.com/fanthos +[@freol35241]: https://github.com/freol35241 +[@frog32]: https://github.com/frog32 +[@glance-]: https://github.com/glance- +[@hawk259]: https://github.com/hawk259 +[@infernix]: https://github.com/infernix +[@jackwilsdon]: https://github.com/jackwilsdon +[@jeradM]: https://github.com/jeradM +[@jodur]: https://github.com/jodur +[@kennedyshead]: https://github.com/kennedyshead +[@kevindgoff]: https://github.com/kevindgoff +[@lance36]: https://github.com/lance36 +[@led-spb]: https://github.com/led-spb +[@lexam79]: https://github.com/lexam79 +[@luca-angemi]: https://github.com/luca-angemi +[@lucasweb78]: https://github.com/lucasweb78 +[@maddox]: https://github.com/maddox +[@mezz64]: https://github.com/mezz64 +[@mkfink]: https://github.com/mkfink +[@nordlead2005]: https://github.com/nordlead2005 +[@pelson]: https://github.com/pelson +[@perosb]: https://github.com/perosb +[@philk]: https://github.com/philk +[@philklei]: https://github.com/philklei +[@postlund]: https://github.com/postlund +[@pvizeli]: https://github.com/pvizeli +[@rcloran]: https://github.com/rcloran +[@scop]: https://github.com/scop +[@sdague]: https://github.com/sdague +[@snjoetw]: https://github.com/snjoetw +[@syssi]: https://github.com/syssi +[@tbergo]: https://github.com/tbergo +[@timmo001]: https://github.com/timmo001 +[@titilambert]: https://github.com/titilambert +[@tschmidty69]: https://github.com/tschmidty69 +[@ubnt-marc-khouri]: https://github.com/ubnt-marc-khouri +[@vaceslav]: https://github.com/vaceslav +[@w1ll1am23]: https://github.com/w1ll1am23 +[@wardcraigj]: https://github.com/wardcraigj +[@zabuldon]: https://github.com/zabuldon +[alexa docs]: https://home-assistant.io/components/alexa/ +[binary_sensor.deconz docs]: https://home-assistant.io/components/binary_sensor.deconz/ +[binary_sensor.mercedesme docs]: https://home-assistant.io/components/binary_sensor.mercedesme/ +[binary_sensor.mqtt docs]: https://home-assistant.io/components/binary_sensor.mqtt/ +[binary_sensor.template docs]: https://home-assistant.io/components/binary_sensor.template/ +[binary_sensor.threshold docs]: https://home-assistant.io/components/binary_sensor.threshold/ +[binary_sensor.zha docs]: https://home-assistant.io/components/binary_sensor.zha/ +[camera.canary docs]: https://home-assistant.io/components/camera.canary/ +[camera.uvc docs]: https://home-assistant.io/components/camera.uvc/ +[camera.xeoma docs]: https://home-assistant.io/components/camera.xeoma/ +[canary docs]: https://home-assistant.io/components/canary/ +[climate.demo docs]: https://home-assistant.io/components/climate.demo/ +[climate.ecobee docs]: https://home-assistant.io/components/climate.ecobee/ +[climate.econet docs]: https://home-assistant.io/components/climate.econet/ +[climate.generic_thermostat docs]: https://home-assistant.io/components/climate.generic_thermostat/ +[climate.heatmiser docs]: https://home-assistant.io/components/climate.heatmiser/ +[climate.melissa docs]: https://home-assistant.io/components/climate.melissa/ +[climate.nest docs]: https://home-assistant.io/components/climate.nest/ +[climate.tado docs]: https://home-assistant.io/components/climate.tado/ +[climate.touchline docs]: https://home-assistant.io/components/climate.touchline/ +[climate.venstar docs]: https://home-assistant.io/components/climate.venstar/ +[cloud docs]: https://home-assistant.io/components/cloud/ +[coinbase docs]: https://home-assistant.io/components/coinbase/ +[cover.mqtt docs]: https://home-assistant.io/components/cover.mqtt/ +[cover.tahoma docs]: https://home-assistant.io/components/cover.tahoma/ +[cover.template docs]: https://home-assistant.io/components/cover.template/ +[deconz docs]: https://home-assistant.io/components/deconz/ +[device_tracker.huawei_router docs]: https://home-assistant.io/components/device_tracker.huawei_router/ +[device_tracker.mercedesme docs]: https://home-assistant.io/components/device_tracker.mercedesme/ +[device_tracker.mikrotik docs]: https://home-assistant.io/components/device_tracker.mikrotik/ +[device_tracker.mqtt docs]: https://home-assistant.io/components/device_tracker.mqtt/ +[device_tracker.owntracks docs]: https://home-assistant.io/components/device_tracker.owntracks/ +[device_tracker.ubus docs]: https://home-assistant.io/components/device_tracker.ubus/ +[doorbird docs]: https://home-assistant.io/components/doorbird/ +[emulated_hue docs]: https://home-assistant.io/components/emulated_hue/ +[fan.xiaomi_miio docs]: https://home-assistant.io/components/fan.xiaomi_miio/ +[feedreader docs]: https://home-assistant.io/components/feedreader/ +[frontend docs]: https://home-assistant.io/components/frontend/ +[goalfeed docs]: https://home-assistant.io/components/goalfeed/ +[google_assistant docs]: https://home-assistant.io/components/google_assistant/ +[group docs]: https://home-assistant.io/components/group/ +[homematic docs]: https://home-assistant.io/components/homematic/ +[http docs]: https://home-assistant.io/components/http/ +[image_processing.openalpr_cloud docs]: https://home-assistant.io/components/image_processing.openalpr_cloud/ +[influxdb docs]: https://home-assistant.io/components/influxdb/ +[input_text docs]: https://home-assistant.io/components/input_text/ +[ios docs]: https://home-assistant.io/components/ios/ +[iota docs]: https://home-assistant.io/components/iota/ +[light.deconz docs]: https://home-assistant.io/components/light.deconz/ +[light.greenwave docs]: https://home-assistant.io/components/light.greenwave/ +[light.lifx docs]: https://home-assistant.io/components/light.lifx/ +[light.limitlessled docs]: https://home-assistant.io/components/light.limitlessled/ +[light.template docs]: https://home-assistant.io/components/light.template/ +[light.xiaomi_aqara docs]: https://home-assistant.io/components/light.xiaomi_aqara/ +[light.xiaomi_miio docs]: https://home-assistant.io/components/light.xiaomi_miio/ +[light.zha docs]: https://home-assistant.io/components/light.zha/ +[lock docs]: https://home-assistant.io/components/lock/ +[media_extractor docs]: https://home-assistant.io/components/media_extractor/ +[media_player docs]: https://home-assistant.io/components/media_player/ +[media_player.bluesound docs]: https://home-assistant.io/components/media_player.bluesound/ +[media_player.clementine docs]: https://home-assistant.io/components/media_player.clementine/ +[media_player.itunes docs]: https://home-assistant.io/components/media_player.itunes/ +[media_player.mediaroom docs]: https://home-assistant.io/components/media_player.mediaroom/ +[media_player.panasonic_viera docs]: https://home-assistant.io/components/media_player.panasonic_viera/ +[media_player.philips_js docs]: https://home-assistant.io/components/media_player.philips_js/ +[media_player.plex docs]: https://home-assistant.io/components/media_player.plex/ +[media_player.samsungtv docs]: https://home-assistant.io/components/media_player.samsungtv/ +[media_player.squeezebox docs]: https://home-assistant.io/components/media_player.squeezebox/ +[media_player.vlc docs]: https://home-assistant.io/components/media_player.vlc/ +[media_player.volumio docs]: https://home-assistant.io/components/media_player.volumio/ +[media_player.webostv docs]: https://home-assistant.io/components/media_player.webostv/ +[melissa docs]: https://home-assistant.io/components/melissa/ +[mercedesme docs]: https://home-assistant.io/components/mercedesme/ +[mochad docs]: https://home-assistant.io/components/mochad/ +[notify.gntp docs]: https://home-assistant.io/components/notify.gntp/ +[notify.kodi docs]: https://home-assistant.io/components/notify.kodi/ +[notify.pushsafer docs]: https://home-assistant.io/components/notify.pushsafer/ +[notify.twitter docs]: https://home-assistant.io/components/notify.twitter/ +[panel_iframe docs]: https://home-assistant.io/components/panel_iframe/ +[plant docs]: https://home-assistant.io/components/plant/ +[remote.xiaomi_miio docs]: https://home-assistant.io/components/remote.xiaomi_miio/ +[rfxtrx docs]: https://home-assistant.io/components/rfxtrx/ +[sensor.alpha_vantage docs]: https://home-assistant.io/components/sensor.alpha_vantage/ +[sensor.broadlink docs]: https://home-assistant.io/components/sensor.broadlink/ +[sensor.canary docs]: https://home-assistant.io/components/sensor.canary/ +[sensor.coinbase docs]: https://home-assistant.io/components/sensor.coinbase/ +[sensor.coinmarketcap docs]: https://home-assistant.io/components/sensor.coinmarketcap/ +[sensor.darksky docs]: https://home-assistant.io/components/sensor.darksky/ +[sensor.deconz docs]: https://home-assistant.io/components/sensor.deconz/ +[sensor.deutsche_bahn docs]: https://home-assistant.io/components/sensor.deutsche_bahn/ +[sensor.fritzbox_callmonitor docs]: https://home-assistant.io/components/sensor.fritzbox_callmonitor/ +[sensor.melissa docs]: https://home-assistant.io/components/sensor.melissa/ +[sensor.mercedesme docs]: https://home-assistant.io/components/sensor.mercedesme/ +[sensor.miflora docs]: https://home-assistant.io/components/sensor.miflora/ +[sensor.onewire docs]: https://home-assistant.io/components/sensor.onewire/ +[sensor.pollen docs]: https://home-assistant.io/components/sensor.pollen/ +[sensor.qnap docs]: https://home-assistant.io/components/sensor.qnap/ +[sensor.radarr docs]: https://home-assistant.io/components/sensor.radarr/ +[sensor.sonarr docs]: https://home-assistant.io/components/sensor.sonarr/ +[sensor.sql docs]: https://home-assistant.io/components/sensor.sql/ +[sensor.statistics docs]: https://home-assistant.io/components/sensor.statistics/ +[sensor.synologydsm docs]: https://home-assistant.io/components/sensor.synologydsm/ +[sensor.systemmonitor docs]: https://home-assistant.io/components/sensor.systemmonitor/ +[sensor.tahoma docs]: https://home-assistant.io/components/sensor.tahoma/ +[sensor.template docs]: https://home-assistant.io/components/sensor.template/ +[sensor.tesla docs]: https://home-assistant.io/components/sensor.tesla/ +[sensor.xiaomi_aqara docs]: https://home-assistant.io/components/sensor.xiaomi_aqara/ +[sensor.zha docs]: https://home-assistant.io/components/sensor.zha/ +[spc docs]: https://home-assistant.io/components/spc/ +[switch.broadlink docs]: https://home-assistant.io/components/switch.broadlink/ +[switch.flux docs]: https://home-assistant.io/components/switch.flux/ +[switch.pulseaudio_loopback docs]: https://home-assistant.io/components/switch.pulseaudio_loopback/ +[switch.template docs]: https://home-assistant.io/components/switch.template/ +[switch.tplink docs]: https://home-assistant.io/components/switch.tplink/ +[switch.wake_on_lan docs]: https://home-assistant.io/components/switch.wake_on_lan/ +[switch.xiaomi_miio docs]: https://home-assistant.io/components/switch.xiaomi_miio/ +[system_log docs]: https://home-assistant.io/components/system_log/ +[tado docs]: https://home-assistant.io/components/tado/ +[tahoma docs]: https://home-assistant.io/components/tahoma/ +[tesla docs]: https://home-assistant.io/components/tesla/ +[tts docs]: https://home-assistant.io/components/tts/ +[vacuum.xiaomi_miio docs]: https://home-assistant.io/components/vacuum.xiaomi_miio/ +[wake_on_lan docs]: https://home-assistant.io/components/wake_on_lan/ +[waterfurnace docs]: https://home-assistant.io/components/waterfurnace/ +[weather.openweathermap docs]: https://home-assistant.io/components/weather.openweathermap/ +[weblink docs]: https://home-assistant.io/components/weblink/ +[websocket_api docs]: https://home-assistant.io/components/websocket_api/ +[zha docs]: https://home-assistant.io/components/zha/ +[zha.const docs]: https://home-assistant.io/components/zha.const/ +[zwave docs]: https://home-assistant.io/components/zwave/ diff --git a/source/images/blog/2018-02-0.63/components.png b/source/images/blog/2018-02-0.63/components.png new file mode 100644 index 0000000000000000000000000000000000000000..1e0b666161b94ddbcbfea343a212726c89ccb359 GIT binary patch literal 28372 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 literal 0 HcmV?d00001 From cc28670203004d96e31b4ad7729431fe2b6bb8d6 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Sun, 11 Feb 2018 11:05:29 +0100 Subject: [PATCH 300/993] Add link --- source/getting-started/index.markdown | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/source/getting-started/index.markdown b/source/getting-started/index.markdown index 472503ae24..d70ee63662 100644 --- a/source/getting-started/index.markdown +++ b/source/getting-started/index.markdown @@ -9,9 +9,9 @@ sharing: true footer: true --- -The goal of this getting started guide is to install Hass.io on a Raspberry Pi 3. Hass.io is our own all in one solution that turns your Raspberry Pi into the ultimate home automation hub. +The goal of this getting started guide is to install [Hass.io](/hassio/) on a Raspberry Pi 3. Hass.io is our own all in one solution that turns your Raspberry Pi into the ultimate home automation hub. -Follow this guide if you want to easily get started with Home Assistant, or if you have no or little Linux experience. For advanced users, check our [alternative installation methods](/docs/installation/). +Follow this guide if you want to easily get started with Home Assistant, or if you have no or little Linux experience. For advanced users or if you have no Raspberry Pi at hand, check our [alternative installation methods](/docs/installation/). ### {% linkable_title Hardware requirements %} @@ -31,7 +31,7 @@ We will need a few things to get started with installing Home Assistant. Links b [Etcher]: https://etcher.io/ [pi3]: https://github.com/home-assistant/hassio-build/releases/download/1.1/resinos-hassio-1.1-raspberrypi3.img.bz2 -### Installing Hass.io +### {% linkable_title Installing Hass.io %} 1. Put the SD card in your SD card reader. 1. Open Etcher, select the Hass.io image and flash it to the SD card. From 3de6e038f1899fec56254504ba4b15a288c6c1c9 Mon Sep 17 00:00:00 2001 From: themanieldaniel Date: Sun, 11 Feb 2018 05:07:21 -0500 Subject: [PATCH 301/993] Update samba.markdown (#4631) --- source/_addons/samba.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_addons/samba.markdown b/source/_addons/samba.markdown index 33e573ec37..ee59111731 100644 --- a/source/_addons/samba.markdown +++ b/source/_addons/samba.markdown @@ -22,7 +22,7 @@ This addon allows you to set up a [Samba](https://samba.org/) server to access h "addons": true, "share": true, "backup": true, - "ssl": false, + "ssl": false }, "username": "", "password": "", From 4bd6d7c4b6983e9fc21bed776f11840ccf4a2c23 Mon Sep 17 00:00:00 2001 From: themanieldaniel Date: Sun, 11 Feb 2018 05:08:40 -0500 Subject: [PATCH 302/993] Update history.markdown (#4633) --- source/_components/history.markdown | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/source/_components/history.markdown b/source/_components/history.markdown index b252d3b205..76affbecc6 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. It depends on the `recorder` component for storing the data and uses the same database setting. If any entities are excluded from being recorded, no history will be available for these entities as well. +The `history` component will track everything that is going on within Home Assistant and allows the user to browse through it. It depends on the `recorder` component for storing the data and uses the same database setting. If any entities are excluded from being recorded, no history will be available for these entities. To enable the history option in your installation, add the following to your `configuration.yaml` file: @@ -42,9 +42,9 @@ Configuration variables: - **entities** (*Optional*): The list of entity ids to be included to the history. - **domains** (*Optional*): The list of domains to be included to the history. -Without any `include` or `exclude` configuration the history displays graphs for every entity (well that's not exactly true - for instance `hidden` entities or `scenes` are never shown) on a given date. If you are only interested in some of the entities you several options: +Without any `include` or `exclude` configuration the history displays graphs for every entity (well that's not exactly true - for instance `hidden` entities or `scenes` are never shown) on a given date. If you are only interested in some of the entities you have several options: -Define domains and entities to `exclude` (aka. blacklist). This is convenient when you are basically happy with the information displayed, but just want to remove some entities or domains. Usually these are entities/domains which do not change (like `weblink`) or rarely change (`updater` or `automation`). +Define domains and entities to `exclude` (aka. blacklist). This is convenient when you are basically happy with the information displayed, but just want to remove some entities or domains. Usually these are entities/domains which do not change (like `weblink`) or rarely change (like `updater` or `automation`). ```yaml # Example configuration.yaml entry with exclude @@ -59,7 +59,7 @@ history: - sensor.date ``` -Define domains and entities to display by using the `include` configuration (aka. whitelist). If you have a lot of entities in your system and your `exclude` lists possibly get very large, it might be better just to define the entities or domains to display. +Define domains and entities to display by using the `include` configuration (aka. whitelist). If you have a lot of entities in your system and your `exclude` list is getting too large, it might be better just to define the entities or domains to `include`. ```yaml # Example configuration.yaml entry with include @@ -104,7 +104,7 @@ history: #### {% linkable_title Implementation details %} -The history is stored in a SQLite database `home-assistant_v2.db` within your configuration directory if the `recorder` component is not set up differently. +The history is stored in a SQLite database `home-assistant_v2.db` within your configuration directory unless the `recorder` component is set up differently. - events table is all events except `time_changed` that happened while recorder component was running. - states table contains all the `new_state` values of `state_changed` events. @@ -129,4 +129,4 @@ datetime.fromtimestamp(1422830502) #### {% linkable_title API %} -The history information are also available through the [RESTful API](/developers/rest_api/#get-apihistory). +The history information is also available through the [RESTful API](/developers/rest_api/#get-apihistory). From 58eb051d55939e6f090f190e9552d0db7d4d2b89 Mon Sep 17 00:00:00 2001 From: themanieldaniel Date: Sun, 11 Feb 2018 05:18:28 -0500 Subject: [PATCH 303/993] Update sensor.steam_online.markdown (#4632) --- source/_components/sensor.steam_online.markdown | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/_components/sensor.steam_online.markdown b/source/_components/sensor.steam_online.markdown index 6cf4638877..e49bef70cb 100644 --- a/source/_components/sensor.steam_online.markdown +++ b/source/_components/sensor.steam_online.markdown @@ -16,9 +16,9 @@ ha_release: 0.14 The Steam component will allow you to track the online status of public [Steam](https://steamcommunity.com) accounts. -You need an API key which is [free](https://steamcommunity.com/dev/apikey) to use the component +You need a [free API key](https://steamcommunity.com/dev/apikey) to use the component -To find an account's 64-bit SteamID you can check the URL of the profile page, if it ends with a long string on numbers then that's the 64-bit SteamID. However, if the profile has a custom URL you will have to copy the it and enter it into [STEAMID I/O](https://steamid.io/) to find the 64-bit SteamID. +To find an account's 64-bit SteamID on profiles without a custom URL you can check the URL of the profile page, the long string of numbers at the end is the 64-bit SteamID. If the profile has a custom URL you will have to copy the URL into [STEAMID I/O](https://steamid.io/) to find the 64-bit SteamID. To use Steam in your installation, add the following to your `configuration.yaml` file: From 9d6e015466be4b66c98769711c5e1139c82457bb Mon Sep 17 00:00:00 2001 From: Touliloup Date: Sun, 11 Feb 2018 11:19:17 +0100 Subject: [PATCH 304/993] Fix URL in Mercedes me binary sensor documentation (#4625) Fix a broken link in the Mercedes Me binary sensor documentation. Link should redirect to the main Mercedes Me component. --- source/_components/binary_sensor.mercedesme.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/binary_sensor.mercedesme.markdown b/source/_components/binary_sensor.mercedesme.markdown index 932574774f..e1df898d49 100644 --- a/source/_components/binary_sensor.mercedesme.markdown +++ b/source/_components/binary_sensor.mercedesme.markdown @@ -17,4 +17,4 @@ The `Mercedes me` platform allows you to get data from your [Mercedes me connect They will be automatically discovered if the Mercedes me component is loaded. -For more configuration information see the [Mercedes me component](/components/mercedes me/) documentation. +For more configuration information see the [Mercedes me component](/components/mercedesme/) documentation. From 6f90763a26e82160420ed2e50010346a3cbfece5 Mon Sep 17 00:00:00 2001 From: themanieldaniel Date: Sun, 11 Feb 2018 06:07:48 -0500 Subject: [PATCH 305/993] Update samba.markdown (#4627) Cleaned up some of the grammar and formatting. --- source/_addons/samba.markdown | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/source/_addons/samba.markdown b/source/_addons/samba.markdown index ee59111731..a8cd931cbe 100644 --- a/source/_addons/samba.markdown +++ b/source/_addons/samba.markdown @@ -32,10 +32,10 @@ This addon allows you to set up a [Samba](https://samba.org/) server to access h Configuration variables: -- **name** (*Optional*): default `hassio`. Set NetBIOS name of hassio device. -- **workgroup** (*Optional*): default `WORKGROUP`. Set network workgroup. -- **guest** (*Optional*): Allow login without a username or password. Defaults to `true`. -- **map** (*Optional*): Control which folder will be exposed. `config` is for Home Assistant configuration folder. `addons` for a local custom repository. `share` is a folder that can access from add-ons and Home Assistant too. `backup` for access to snapshot files. `ssl` for certificate storage, be careful with this option! Defaults all to `true`, except for `ssl`. -- **username** (*Optional*): The username for logging in if guest login is not used. +- **name** (*Optional*): Set netbios name of Hass.io device. Default is `hassio`. +- **workgroup** (*Optional*): Set network workgroup name. Default is `WORKGROUP`. +- **guest** (*Optional*): Allow login without a username or password. Default is `true`. +- **map** (*Optional*): Control which folders will be exposed. `config` shares the Home Assistant configuration folder. `addons` shares the local custom repositiory. `share` shares a folder that can be accessed by add-ons and Home Assistant. `backup` shares access to snapshot files. `ssl` shares certificate storage. Be careful with the `ssl` option! Defaults are all set to `true`, except for `ssl`. +- **username** (*Optional*): Username for logging in if guest login is not used. - **password** (*Optional*): Password for `username`. An empty password is not supported. -- **interface** (*Optional*): Interface on that will start the share. Normally is `eth0` for ethernet wired connection and `wlan0` for wireless connection. +- **interface** (*Optional*): Interface that will start the share. Normally this is `eth0` for ethernet wired connection and `wlan0` for wireless connection. From 5eff43736b7c7e8e952eb481140babeaf5f47533 Mon Sep 17 00:00:00 2001 From: themanieldaniel Date: Sun, 11 Feb 2018 06:07:58 -0500 Subject: [PATCH 306/993] Update input_number.markdown (#4628) * Update input_number.markdown * Minor changes --- source/_components/input_number.markdown | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/source/_components/input_number.markdown b/source/_components/input_number.markdown index 348053d8ee..7afaaa255e 100644 --- a/source/_components/input_number.markdown +++ b/source/_components/input_number.markdown @@ -14,7 +14,7 @@ redirect_from: /components/input_slider/ ---

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

    The `input_number` component allows the user to define values that can be controlled via the frontend and can be used within conditions of automation. The frontend can display a slider, or a numeric input box. Changes to the slider or numeric input box generate state events. These state events can be utilized as `automation` triggers as well. @@ -39,7 +39,6 @@ input_number: mode: box ``` - {% configuration %} input_number: description: Alias for the input. Multiple entries are allowed. From 3ce0f0981a1ff268138a4d8439fe1da27b3a9e6a Mon Sep 17 00:00:00 2001 From: Eu Date: Sun, 11 Feb 2018 18:34:35 +0100 Subject: [PATCH 307/993] Added documentation for password mode in input_text (#4489) * Added password mode * Added password mode * Added password mode --- source/_components/input_text.markdown | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/source/_components/input_text.markdown b/source/_components/input_text.markdown index 2fa07711af..d0afd0ff09 100644 --- a/source/_components/input_text.markdown +++ b/source/_components/input_text.markdown @@ -12,7 +12,7 @@ ha_category: Automation ha_release: 0.53 --- -The `input_text` component allows the user to define values that can be controlled via the frontend and can be used within conditions of automation. Changes to the value stored in the text box generate state events. These state events can be utilized as `automation` triggers as well. +The `input_text` component allows the user to define values that can be controlled via the frontend and can be used within conditions of automation. Changes to the value stored in the text box generate state events. These state events can be utilized as `automation` triggers as well. It can also be configured in password mode (obscured text). ```yaml # Example configuration.yaml entries @@ -27,6 +27,9 @@ input_text: text3: name: Text 3 pattern: '[a-fA-F0-9]*' + text4: + name: Text 4 + mode: password ``` {% configuration %} @@ -59,6 +62,11 @@ input_text: required: false type: String default: empty + mode: + description: Can specify `text` or `password`. Elements of type "password" provide a way for the user to securely enter a value. + required: false + type: String + default: text {% endconfiguration %} ### {% linkable_title Restore State %} From ddf522bb7b01b4296e64a19e84a79f5abc957c07 Mon Sep 17 00:00:00 2001 From: Louis Laureys Date: Sun, 11 Feb 2018 19:57:40 +0100 Subject: [PATCH 308/993] Update dead links (#4637) Links were moved. --- source/_docs/ecosystem/hass-configurator.markdown | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/_docs/ecosystem/hass-configurator.markdown b/source/_docs/ecosystem/hass-configurator.markdown index c9fac261ec..1d07bf163d 100644 --- a/source/_docs/ecosystem/hass-configurator.markdown +++ b/source/_docs/ecosystem/hass-configurator.markdown @@ -109,8 +109,8 @@ Since the configurator script on its own is no service, you will have to take so 1. Fork the process into the background with the command: `nohup sudo ./configurator.py &` -2. If your system is using systemd (that's usually what you'll find on a Raspberry Pi), there's a [template file](https://github.com/danielperna84/hass-configurator/blob/master/hass-poc-configurator.systemd) you can use and then apply the same process to integrate it as mentioned in the [Home Assistant documentation](https://home-assistant.io/docs/autostart/systemd/). If you use this method you have to set the `BASEPATH` variable according to your environment. -3. If you have [supervisor](http://supervisord.org/) running on your system, [hass-poc-configurator.supervisor](https://github.com/danielperna84/hass-configurator/blob/master/hass-poc-configurator.supervisor) would be an example configuration you could use to control the configurator. +2. If your system is using systemd (that's usually what you'll find on a Raspberry Pi), there's a [template file](https://github.com/danielperna84/hass-configurator/blob/master/hass-configurator.systemd) you can use and then apply the same process to integrate it as mentioned in the [Home Assistant documentation](https://home-assistant.io/docs/autostart/systemd/). If you use this method you have to set the `BASEPATH` variable according to your environment. +3. If you have [supervisor](http://supervisord.org/) running on your system, [hass-poc-configurator.supervisor](https://github.com/danielperna84/hass-configurator/blob/master/hass-configurator.supervisor) would be an example configuration you could use to control the configurator. 4. A tool called [tmux](https://tmux.github.io/), which should be pre-installed with [HASSbian](https://home-assistant.io/docs/hassbian/). 5. A tool called [screen](http://ss64.com/bash/screen.html) (alternative to tmux). If it's not already installed on your system, you can do `sudo apt-get install screen` or `sudo yum install screen` to get it. When it's installed, start a screen session by executing `screen`. Then navigate to your Home Assistant directory and start the configurator like described above. Put the screen session into the background by pressing `CTRL+A` and then `CTRL+D`. It is now safe to disconnect from your SSH session. To resume the screen session, log in to your machine and execute `screen -r`. From 3bba87b2484bf590e024c19aae6727e94d4be994 Mon Sep 17 00:00:00 2001 From: themanieldaniel Date: Sun, 11 Feb 2018 14:40:32 -0500 Subject: [PATCH 309/993] Update logbook.markdown (#4629) --- source/_components/logbook.markdown | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/_components/logbook.markdown b/source/_components/logbook.markdown index adabef99d1..d1a76f3973 100644 --- a/source/_components/logbook.markdown +++ b/source/_components/logbook.markdown @@ -26,8 +26,8 @@ Configuration variables: - **entities** (*Optional*): The list of entity ids to be excluded from creating logbook entries. - **domains** (*Optional*): The list of domains to be excluded from creating logbook entries. - **include** (*Optional*): Configure which components should create logbook entries. - - **entities** (*Optional*): The list of entity ids to be included from creating logbook entries. - - **domains** (*Optional*): The list of domains to be included from creating logbook entries. + - **entities** (*Optional*): The list of entity ids to be included in creating logbook entries. + - **domains** (*Optional*): The list of domains to be included in creating logbook entries. If you want to exclude messages of some entities or domains from the logbook just add the `exclude` parameter like: From 9329aa74cc6f1f3066dbc57d23bd7bff06e3945e Mon Sep 17 00:00:00 2001 From: ChristianKuehnel Date: Sun, 11 Feb 2018 23:51:17 +0100 Subject: [PATCH 310/993] sensor.alpha_vantage: removed Google as default stock (#4618) * removed Google as default stock * extended config example * Add exchange rate --- source/_components/sensor.alpha_vantage.markdown | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/source/_components/sensor.alpha_vantage.markdown b/source/_components/sensor.alpha_vantage.markdown index 29712a8d0c..f984e74354 100644 --- a/source/_components/sensor.alpha_vantage.markdown +++ b/source/_components/sensor.alpha_vantage.markdown @@ -14,7 +14,7 @@ featured: false ha_release: "0.60" --- -The `alpha_vantage` sensor platform uses [Alpha Vantage](https://www.alphavantage.co) to monitor the stock market. +The `alpha_vantage` sensor platform uses [Alpha Vantage](https://www.alphavantage.co) to monitor the stock market. This platform also provides detail about exchange rates. To enable the `alpha_vantage` platform, add the following lines to your `configuration.yaml` file: @@ -23,8 +23,17 @@ To enable the `alpha_vantage` platform, add the following lines to your `configu sensor: - platform: alpha_vantage api_key: YOUR_API_KEY + symbols: + - symbol: GOOGL + name: Google + foreign_exchange: + - name: USD_EUR + from: USD + to: EUR ``` +Either a symbol or a foreign exchange must be configured, otherwise you will not get any data. + {% configuration %} api_key: description: "The API Key from [Alpha Vantage](https://www.alphavantage.co)." @@ -33,7 +42,6 @@ api_key: symbols: description: List of stock market symbols for given companies. required: false - default: GOOGL type: map keys: name: From f566a97641b0844d6a53b9196cdd38f5d2bec403 Mon Sep 17 00:00:00 2001 From: Anders Melchiorsen Date: Mon, 12 Feb 2018 00:21:20 +0100 Subject: [PATCH 311/993] Purge recorder data by default, allow repack (#4643) --- source/_components/recorder.markdown | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/source/_components/recorder.markdown b/source/_components/recorder.markdown index 78993f1113..039d94ceb2 100644 --- a/source/_components/recorder.markdown +++ b/source/_components/recorder.markdown @@ -38,9 +38,10 @@ recorder: purge_keep_days: description: Specify the number of history days to keep in recorder database after a purge. required: false + default: 10 type: int purge_interval: - description: How often (in days) the purge task runs. If a scheduled purge is missed (e.g., if Home Assistant was not running), the schedule will resume soon after Home Assistant restarts. You can use the [service](#service-purge) call `purge` when required without impacting the purge schedule. If this is set to `0` (zero), purging is disabled. + description: How often (in days) the purge task runs. If a scheduled purge is missed (e.g., if Home Assistant was not running), the schedule will resume soon after Home Assistant restarts. You can use the [service](#service-purge) call `purge` when required without impacting the purge schedule. If this is set to `0` (zero), automatic purging is disabled. required: false default: 1 type: int @@ -122,16 +123,12 @@ If you only want to hide events from e.g. your history, take a look at the [`his ### {% linkable_title Service `purge` %} -Call the service `recorder.purge` to start purge task, which deletes events and states older than x days, according to `keep_days` service data (*Required*) +Call the service `recorder.purge` to start a purge task which deletes events and states older than x days, according to `keep_days` service data. -Automation [action](https://home-assistant.io/getting-started/automation-action/) example: - -```yaml -action: - service: recorder.purge - data: - keep_days: 5 -``` +| Service data attribute | Optional | Description | +| ---------------------- | -------- | ----------- | +| `keep_days` | yes | The number of history days to keep in recorder database (defaults to the component `purge_keep_days` configuration) +| `repack` | yes | Rewrite the entire database, possibly saving some disk space (only supported for SQLite) ### {% linkable_title Restore State %} From cda6c8518660ca93476de0e79449267df9272d3c Mon Sep 17 00:00:00 2001 From: NovapaX Date: Mon, 12 Feb 2018 04:51:04 +0100 Subject: [PATCH 312/993] Update template_sensor with friendly_name_template attribute and example (#4644) * add documentation and example for friendly_name_template * standard fixes * another example + no whitespace around pipes * move the dot * little example fix * Minor changes --- source/_components/sensor.template.markdown | 46 +++++++++++++++++++++ 1 file changed, 46 insertions(+) diff --git a/source/_components/sensor.template.markdown b/source/_components/sensor.template.markdown index c8d8e2cd0a..534fe54e9f 100644 --- a/source/_components/sensor.template.markdown +++ b/source/_components/sensor.template.markdown @@ -45,6 +45,10 @@ sensor: description: Name to use in the frontend. required: false type: string + friendly_name_template: + description: Defines a template for the name to be used in the frontend (this overrides friendly_name). + required: false + type: template entity_id: description: A list of entity IDs so the sensor only reacts to state changes of these entities. This can be used if the automatic analysis fails to find all relevant entities. required: false @@ -244,3 +248,45 @@ sensor: {% endif %} ``` {% endraw %} + +### {% linkable_title Change the Friendly Name Used in the Frontend %} + +This example shows how to change the `friendly_name` based on a date. +Explanation: we add a multiple of 86400 seconds (= 1 day) to the current unix timestamp to get a future date. + +{% raw %} +```yaml +sensor: + - platform: template + sensors: + forecast_1_day_ahead: + friendly_name_template: >- + {%- set date = as_timestamp(now()) + (1 * 86400 ) -%} + {{ date|timestamp_custom("Tomorrow (%-m/%-d)") }} + value_template: "{{ sensor.darksky_weather_forecast_1 }}" + forecast_2_days_ahead: + friendly_name_template: >- + {%- set date = as_timestamp(now()) + (2 * 86400 ) -%} + {{ date|timestamp_custom("%A (%-m/%-d)") }} + value_template: "{{ sensor.darksky_weather_forecast_2 }}" +``` +{% endraw %} + +This example shows how to change the `friendly_name` based on a state. + +{% raw %} +```yaml +sensor: + - platform: template + sensors: + net_power: + friendly_name_template: >- + {% if states('sensor.power_consumption')|float < 0 %} + Power Consumption + {% else %} + Power Production + {% end %} + value_template: "{{ states('sensor.power_consumption') }}" + unit_of_measurement: 'kW' +``` +{% endraw %} From 5e77fc8d94769781fb023f533f791552add881be Mon Sep 17 00:00:00 2001 From: Mike O'Driscoll Date: Mon, 12 Feb 2018 02:31:34 -0500 Subject: [PATCH 313/993] Update TekSavvy sendor documentation. (#4645) Update the TekSavvy senor documentation for unlimited plans without a cap. --- source/_components/sensor.teksavvy.markdown | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/_components/sensor.teksavvy.markdown b/source/_components/sensor.teksavvy.markdown index 2181e4273d..dd62ca97d4 100644 --- a/source/_components/sensor.teksavvy.markdown +++ b/source/_components/sensor.teksavvy.markdown @@ -45,7 +45,7 @@ api_key: required: true type: string total_bandwidth: - description: Your bandwidth limit in gigabytes. + description: Your bandwidth limit in gigabytes. Set to `0` for unlimited plans without a cap. required: true type: string monitored_conditions: @@ -72,6 +72,6 @@ monitored_conditions: offpeak_total: description: Total bandwidth used during the unlimited period (gigabytes). onpeak_remaining: - description: Remaining bandwidth (gigabytes). + description: Remaining bandwidth (gigabytes). {% endconfiguration %} From 88d890aa465c89e4771432abf92f7579f99895d8 Mon Sep 17 00:00:00 2001 From: Nicholas Amadori Date: Mon, 12 Feb 2018 08:46:34 +0100 Subject: [PATCH 314/993] Update Postgresql example (#4642) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The query with pg_size_pretty returns the value as a string, that way you can’t have a nice chart or make value comparison. Inserted new query to return value as number. --- source/_components/sensor.sql.md | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/source/_components/sensor.sql.md b/source/_components/sensor.sql.md index a1a0c40fc1..28ec379788 100644 --- a/source/_components/sensor.sql.md +++ b/source/_components/sensor.sql.md @@ -90,6 +90,12 @@ SELECT * FROM states WHERE entity_id='binary_sensor.xyz789' GROUP BY state ORDER ### {% linkable_title Database size in Postgres %} -```sql -SELECT pg_size_pretty(pg_database_size('Database Name')); +```yaml +- platform: sql + db_url: postgresql://user:password@host/dbname + queries: + - name: db_size + query: "SELECT (pg_database_size('dsmrreader')/1024/1024) as db_size;" + column: "db_size" + unit_of_measurement: MB ``` From fffa4c48c7d008c710af529673b2f619e3b635ac Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Mon, 12 Feb 2018 08:58:18 -0800 Subject: [PATCH 315/993] Release 0.63.1 --- _config.yml | 6 ++--- source/_posts/2018-02-10-release-63.markdown | 23 ++++++++++++++++++++ 2 files changed, 26 insertions(+), 3 deletions(-) diff --git a/_config.yml b/_config.yml index 173458ad06..7b69f8bc2e 100644 --- a/_config.yml +++ b/_config.yml @@ -140,13 +140,13 @@ social: # Home Assistant release details current_major_version: 0 current_minor_version: 63 -current_patch_version: 0 -date_released: 2018-02-10 +current_patch_version: 1 +date_released: 2018-02-12 # Either # or the anchor link to latest release notes in the blog post. # Must be prefixed with a # and have double quotes around it. # Major release: -patch_version_notes: "#" +patch_version_notes: "#release-0631---february-12" # Minor release (Example #release-0431---april-25): # Date we moved to Discourse for comments diff --git a/source/_posts/2018-02-10-release-63.markdown b/source/_posts/2018-02-10-release-63.markdown index e9fb47b45a..2f91e77a44 100644 --- a/source/_posts/2018-02-10-release-63.markdown +++ b/source/_posts/2018-02-10-release-63.markdown @@ -41,6 +41,16 @@ We're planning a lot of cool stuff around the entity registry. Stay tuned! - SQL sensor ([@dgomes] - [#12142]) ([sensor.sql docs]) (new-platform) - Add Mercedes me component ([@ReneNulschDE] - [#11743]) (new-platform) +## {% linkable_title Release 0.63.1 - February 12 %} + +- Fix Alexa Step Volume ([@lucasweb78] - [#12314]) ([alexa docs]) +- Remove unique ID from netatmo ([@balloob] - [#12317]) ([binary_sensor.netatmo docs]) ([camera.netatmo docs]) ([sensor.netatmo docs]) +- Allow overriding name via entity registry ([@balloob] - [#12292]) +- Respect entity namespace for entity registry ([@balloob] - [#12313]) +- Fix Report State for Alexa Brightness Controller ([@lucasweb78] - [#12318]) ([alexa docs]) +- Always return lockState == LOCKED when handling Alexa.LockController ([@lucasweb78] - [#12328]) ([alexa docs]) +- Fix platform dependencies ([@balloob] - [#12330]) + ## {% linkable_title If you need help... %} ...don't hesitate to use our very active [forums](https://community.home-assistant.io/) or join us for a little [chat](https://discord.gg/c5DvZ4e). The release notes have comments enabled but it's preferred if you use the former communication channels. Thanks. @@ -602,3 +612,16 @@ Experiencing issues introduced by this release? Please report them in our [issue [zha docs]: https://home-assistant.io/components/zha/ [zha.const docs]: https://home-assistant.io/components/zha.const/ [zwave docs]: https://home-assistant.io/components/zwave/ +[#12292]: https://github.com/home-assistant/home-assistant/pull/12292 +[#12313]: https://github.com/home-assistant/home-assistant/pull/12313 +[#12314]: https://github.com/home-assistant/home-assistant/pull/12314 +[#12317]: https://github.com/home-assistant/home-assistant/pull/12317 +[#12318]: https://github.com/home-assistant/home-assistant/pull/12318 +[#12328]: https://github.com/home-assistant/home-assistant/pull/12328 +[#12330]: https://github.com/home-assistant/home-assistant/pull/12330 +[@balloob]: https://github.com/balloob +[@lucasweb78]: https://github.com/lucasweb78 +[alexa docs]: https://home-assistant.io/components/alexa/ +[binary_sensor.netatmo docs]: https://home-assistant.io/components/binary_sensor.netatmo/ +[camera.netatmo docs]: https://home-assistant.io/components/camera.netatmo/ +[sensor.netatmo docs]: https://home-assistant.io/components/sensor.netatmo/ From cee61653450c8056c23d801a775da68572b5cd90 Mon Sep 17 00:00:00 2001 From: Philip Rosenberg-Watt Date: Mon, 12 Feb 2018 14:47:50 -0700 Subject: [PATCH 316/993] Fix typo (#4655) --- source/_docs/scripts/conditions.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_docs/scripts/conditions.markdown b/source/_docs/scripts/conditions.markdown index 3314e0f427..167b273764 100644 --- a/source/_docs/scripts/conditions.markdown +++ b/source/_docs/scripts/conditions.markdown @@ -30,7 +30,7 @@ condition: ### {% linkable_title OR condition %} -Test multiple conditions in 1 condition statement. Passes if any embedded conditions is valid. +Test multiple conditions in 1 condition statement. Passes if any embedded condition is valid. ```yaml condition: From 178175fbf47c6fa03d7d2e3fe7901230cd2504eb Mon Sep 17 00:00:00 2001 From: Diogo Gomes Date: Mon, 12 Feb 2018 21:50:16 +0000 Subject: [PATCH 317/993] Added Example for 2 STB (#4649) --- .../_components/media_player.mediaroom.markdown | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/source/_components/media_player.mediaroom.markdown b/source/_components/media_player.mediaroom.markdown index 17724f0d76..828656b7e9 100644 --- a/source/_components/media_player.mediaroom.markdown +++ b/source/_components/media_player.mediaroom.markdown @@ -47,6 +47,19 @@ Notice that all parameters are optional, and discovery should configure everythi The component has been developed for Portuguese TV operators currently using the Mediaroom platform, but should also work in other deployments in which the STB can be controlled remotely through a socket on port 8082. -In most cases (single STB) you just need to setup the *name* and discovery will do the rest. In case you have more than one STB you are required to set the *host* in each one of the entries. +In most cases (single STB) you just need to setup the *platform* and discovery will do the rest. In case you have more than one STB you are required to set the *host* in each one of the entries. If the STB is on the same network segment as Home Assistant, it can determine whether the device is turned on or off. Without this, the component will fail to determine the Set-top box status, and you are required to add the *optimistic* configuration variable. + +### {% linkable_title Example configuration with 2 STB %} + +```yaml +# Example configuration.yaml entry for 2 STB +media_player: + - platform: mediaroom + host: 192.168.1.64 + name: Living Room STB + - platform: mediaroom + host: 192.168.1.65 + name: Bedroom STB +``` From ea164a47d8c97066aa6f60f7b647edd604067e07 Mon Sep 17 00:00:00 2001 From: Philip Rosenberg-Watt Date: Mon, 12 Feb 2018 14:50:56 -0700 Subject: [PATCH 318/993] Fix typo (#4656) --- source/_docs/ecosystem/appdaemon.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_docs/ecosystem/appdaemon.markdown b/source/_docs/ecosystem/appdaemon.markdown index 76edbc1dd5..f327433108 100755 --- a/source/_docs/ecosystem/appdaemon.markdown +++ b/source/_docs/ecosystem/appdaemon.markdown @@ -76,7 +76,7 @@ class FlashyMotionLights(appapi.AppDaemon): This is starting to get a little more complex in Home Assistant automations, requiring an automation rule and two separate scripts. -Now let's extend this with a somewhat artificial example to show something that is simple in AppDaemon but very difficult if not impossible using automations. Let's warn someone inside the house that there has been motion outside by flashing a lamp on and off ten times. We are reacting to the motion as before by turning on the light and setting a timer to turn it off again, but in addition, we set a 1-second timer to run `flash_warning()`, which, when called, toggles the inside light and sets another timer to call itself a second later. To avoid re-triggering forever, it keeps a count of how many times it has been activated and bales out after ten iterations. +Now let's extend this with a somewhat artificial example to show something that is simple in AppDaemon but very difficult if not impossible using automations. Let's warn someone inside the house that there has been motion outside by flashing a lamp on and off ten times. We are reacting to the motion as before by turning on the light and setting a timer to turn it off again, but in addition, we set a 1-second timer to run `flash_warning()`, which, when called, toggles the inside light and sets another timer to call itself a second later. To avoid re-triggering forever, it keeps a count of how many times it has been activated and bails out after ten iterations. ```python import appdaemon.appapi as appapi From c0b944d21d8064a016cce9b490a5ac27d8c366b0 Mon Sep 17 00:00:00 2001 From: David Date: Tue, 13 Feb 2018 02:49:56 +0100 Subject: [PATCH 319/993] Remove note about differing entity_ids for System Monitor component (#4564) * Update example entity_id for System Monitor component Required update if/when home-assistant/home-assistant#12124 gets merged. * Update entity_id Update entity_id to reflect changes in PR * Remove note Remove note about differing entity_ids: after home-assistant/home-assistant#12124 is merged, all entity_ids will match the resource name. --- source/_components/sensor.systemmonitor.markdown | 9 --------- 1 file changed, 9 deletions(-) diff --git a/source/_components/sensor.systemmonitor.markdown b/source/_components/sensor.systemmonitor.markdown index 0cc01b8ade..9ae17d80ba 100644 --- a/source/_components/sensor.systemmonitor.markdown +++ b/source/_components/sensor.systemmonitor.markdown @@ -60,15 +60,6 @@ The table contains types and their argument to use in your `configuration.yaml` | last_boot | | | since_last_boot | | -**Note**: Some `type:` names used in the `configuration.yaml` file differ from the entity names. - -| Sensor type | Entity ID | -| :------------------ |:-------------------------| -| memory_free | sensor.ram_available | -| memory_use_percent | sensor.ram_used | -| processor_use | sensor.cpu_used | -| disk_use | sensor.disk_used | - ## {% linkable_title Linux specific %} To retrieve all available network interfaces on a Linux System, execute the `ifconfig` command. From 76ab93af93a82762fcbfdce842fd0375f476050c Mon Sep 17 00:00:00 2001 From: Mike O'Driscoll Date: Mon, 12 Feb 2018 22:44:22 -0500 Subject: [PATCH 320/993] Add documentation for new Start.ca sensor (#4658) New sensor for ISP usage data for Start.ca --- source/_components/sensor.startca.markdown | 84 +++++++++++++++++++++ source/images/supported_brands/startca.png | Bin 0 -> 24554 bytes 2 files changed, 84 insertions(+) create mode 100644 source/_components/sensor.startca.markdown create mode 100644 source/images/supported_brands/startca.png diff --git a/source/_components/sensor.startca.markdown b/source/_components/sensor.startca.markdown new file mode 100644 index 0000000000..cd92fe272c --- /dev/null +++ b/source/_components/sensor.startca.markdown @@ -0,0 +1,84 @@ +--- +layout: page +title: "Start.ca" +description: "Instructions on how to integrate Start.ca data usage within Home Assistant." +date: 2018-02-12 00:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: startca.png +ha_category: Sensor +ha_release: 0.64 +ha_iot_class: "Cloud Polling" +--- + +Integrate your [Start.ca](https://www.start.ca/) account information into Home Assistant. + +You can get your API key from: + +[Start.ca Usage API](https://www.start.ca/support/usage/api) + +To use your Start.ca sensor in your installation, add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +sensor: + - platform: startca + api_key: API_KEY + total_bandwidth: 400 + monitored_variables: + - usage + - usage_gb + - limit + - used_download + - used_upload + - used_total + - grace_download + - grace_upload + - grace_total + - total_download + - total_upload + - used_remaining +``` + +{% configuration %} +api_key: + description: The Start.ca API key to access the service. + required: true + type: string +total_bandwidth: + description: Your bandwidth limit in gigabytes. Set to `0` for unlimited plans without a cap. + required: true + type: string +monitored_conditions: + description: Conditions to display in the frontend. + required: true + type: list + keys: + usage: + description: Bandwidth usage (percentage). + usage_gb: + description: Bandwidth usage (gigabytes). + limit: + description: Monthly bandwidth limit (gigabytes). + used_download: + description: Bandwidth used by download outside the grace period (gigabytes). + used_upload: + description: Bandwidth used by upload outside the grace period (gigabytes). + used_total: + description: Total bandwidth (download and upload sum calculation) used outside the grace period (gigabytes). + grace_download: + description: Bandwidth used by download during the grace period (gigabytes). + grace_upload: + description: Bandwidth used by upload during the grace period (gigabytes). + grace_total: + description: Total bandwidth (download and upload sum calculation) used during the unlimited period (gigabytes). + total_download: + description: Total bandwidth download (Grace + Used) (gigabytes). + total_download: + description: Total bandwidth upload (Grace + Used) (gigabytes). + used_remaining: + description: Remaining bandwidth calucated from used and supplied total bandwidth (gigabytes). +{% endconfiguration %} + diff --git a/source/images/supported_brands/startca.png b/source/images/supported_brands/startca.png new file mode 100644 index 0000000000000000000000000000000000000000..8b64a25c402ec04f669542afd8358c7f96c06b78 GIT binary patch literal 24554 zcmb4rg;yKh7wsejcPZ{tplG4EJA8PdNbzC?iWT=jDK5p`y|_~}K!H-+tw4a{?hY^g zz4iWpM_2@AWoAw;_ujM5-uon6Lrno2gB$|@0Bj{i*|z`yh9Z8SL_?I~D9K7`duARid--b5d5NEF3tf+Xlp+8J z&yO4-A9!|0QXXKDDiw4KW~lBRI44XiEjFm8cZ^iqq&Ml4x7n;$sHPV!930e6pd=@e zGJFb4A^r3PsP{Bez?3dX^T}SNA>i*P9q0Fu7hWAxF#b85srzATZdfC0;fNDObG$~;Ig zX5-&?+9rYIfHUQQbEalL6ZHQcD~M7CsQ!0Qo-73r{@=kU9!`)e;$@TrWR`~Do&TN9 z`@01){_k8$>qKYt-2Yu~lx5@p|AG%SNTj856vT27!Vzb{P4?wk6dyGptNMnZFzDCm zfEPa3jJeNS;MIy{jHk%J6 zo{O9uAOM+HTC2YAM*(oWW+^#UwvJV&2d+z#+ddvt0Uuv9Qottq_xcOgo?tN>QS$mp zK!5s&TYtEEG|GyXPCL-%OdW^`sGz=6sl}57NrGX6T66`wXeS?{1;f3OE)JM2cF^b_!^J-c_+;PD$xsa0>iK`ovUQ7k@?Df*~{4>Jm zP>88&N}ez+HME6ElVlaJ>(pv%cYm&Va6(M%5BVW?haijePFLz;)gBkXUJNxP^`597Pci9qWq= z9hPvN{Vbmev6CE0;@gBo8mq8yzd3g9VGu-tk>XhbR^STLRpi*xZRMqY2leRz8p)3L z@&0$UJ}Jxh!=?fKhKYzs9HRXig`oQ&ZM0OW8hD?=NutnoF5XuNCP)Qbi?_}%1Oe7dYd_h0NvluR;B!4pj3DT0mD*rDbhL%1n^eu6r`RlsP&%&sV_{GmSm z9fnD5VAR;kaUhs=KwKReOVapDufB&z@6%5g5OL@o^|7k>7LbaROOR~jB{osA?sj?) znl><}v8{0ULt+)yYrmPr*1=Guz8W=2%VuG?A z8}7Ohc?=V}iA}YG#_5Cl(#Qk2(UOBoX*HxybqGCiXQpQ#l0W#_=evg*%pYd57*piP z6;QCW8?PrZM$~OgZV`D~!?^h1ML{bY2InQRM!qj9ZdG-q=90IHMs{mtD0za)Y%AW6 z+bpdfqOPdY7F+k3M79WVcX!wHI#F7?l3hWZx{Hw~$l9z8C-Y)5q?S#8F3`4Dh|y)E zzs51;E8Um1N34N>(0(|{eLt1I>&7O9mRaa_a0%CG8+wlcoiW<@SdoX<>hSdkDcyv- zp&pB;W5Vbp32OA?!_8~<9Lj0bW>UBjFgB9j8;b{;7x^Eim581-R&®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 literal 0 HcmV?d00001 From 9a1489230e85d2a8d532c62bc7f22c24773c9c48 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Tue, 13 Feb 2018 09:46:16 +0100 Subject: [PATCH 321/993] Add Home Assistant vs. Hass.io entry (#4657) * Add link to glossary * Add ha vs. hass.io --- source/_faq/ha-vs-hassio.markdown | 16 ++++++++++++++++ source/faq/index.markdown | 2 +- 2 files changed, 17 insertions(+), 1 deletion(-) create mode 100644 source/_faq/ha-vs-hassio.markdown diff --git a/source/_faq/ha-vs-hassio.markdown b/source/_faq/ha-vs-hassio.markdown new file mode 100644 index 0000000000..a331e034aa --- /dev/null +++ b/source/_faq/ha-vs-hassio.markdown @@ -0,0 +1,16 @@ +--- +layout: page +title: "Home Assistant vs. Hass.io" +description: "Home Assistant vs. Hass.io" +date: 2018-02-12 09:00 +sidebar: true +comments: false +sharing: true +footer: true +ha_category: Installation +--- + +Home Assistant is a Python program, in simple words. It can be run various operating system and provide the ability to track, control and automate your devices. When people talking about Home Assistant they usually refer to a standalone [installation method](/docs/installation/). + +[Hass.io](/hassio/) is a combination of Home Assistant and tools which allows one to run it easily on a Raspberry Pi and other platforms without setting up an operating system first. Hass.io is an all-in one-solution and has a management user interface that can be used from the Home Assistant frontend. This interface is not present in a standalone setup of Home Assistant. + diff --git a/source/faq/index.markdown b/source/faq/index.markdown index f3af719ffb..9dc9352fcf 100644 --- a/source/faq/index.markdown +++ b/source/faq/index.markdown @@ -11,7 +11,7 @@ regenerate: true hide_github_edit: true --- -This is a community curated list of frequently asked questions (FAQ) about the installation, setup, and usage of Home Assistant. +This is a community curated list of frequently asked questions (FAQ) about the installation, setup, and usage of Home Assistant. If you want to get details about a term, please check the [glossary](/docs/glossary/). {% assign faq = site.faq | sort: 'title' %} {% assign categories = faq | map: 'ha_category' | uniq | sort %} From 347604383e9c5afce22089b1834eea002b7e14b9 Mon Sep 17 00:00:00 2001 From: xander2 <1768338+xander2@users.noreply.github.com> Date: Tue, 13 Feb 2018 17:03:29 +0100 Subject: [PATCH 322/993] Various spelling, wording and grammar fixes (#4659) Corrections to enhance readability of documentation. --- source/hassio/run_local.markdown | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/source/hassio/run_local.markdown b/source/hassio/run_local.markdown index 311098aa41..8085f77f1f 100644 --- a/source/hassio/run_local.markdown +++ b/source/hassio/run_local.markdown @@ -9,15 +9,15 @@ sharing: true footer: true --- -Hass.io is a managed environment, which means that you can't install applications that can be embedded into Home Assistant using the `command_line` sensor/switch. +Hass.io is a managed environment, which means you can't install applications that can be embedded into Home Assistant using the `command_line` sensor/switch. -There are three options if you need to run a script to read data from a sensor or send commands to other devices on Hass.io. +There are three options if you need to run a script which reads data from a sensor or sends commands to other devices on Hass.io. -The first option is to write a custom component for Home Assistant. Using Python, you can communicate with your device. For more information about developing a custom component, take a look at the [developer documentation][custom-component]. +The first option is to write a custom component for Home Assistant. This implies that you can communicate with your device using Python. For more information about developing a custom component, take a look at [custom-component development][custom-component]. -The second option is to use STDIN inside add-on and use the service `hassio.addon_stdin` to send data. More about this options look into [developer documentation][communication] for internal add-on communication. There is also describe how do you can easy access to Home-Assistant Rest API. +The second option is to use STDIN inside an add-on and use the service `hassio.addon_stdin` to send data. For more information, have a look at [internal add-on communication][communication]. Here you will also find how you can easily access the Home Assistant Rest API. -The third option is to make a local add-on for Hass.io that sends the data to Home Assistant via MQTT. Before we dive into this, read up on [Hass.io add-on development][addons-tutorial] first. +The third option is to create a local add-on for Hass.io that sends the data to Home Assistant via MQTT. Before we dive into this, read up on [Hass.io add-on development][addons-tutorial] first. For security and speed, Hass.io does not provide a way for containers to communicate directly. So the first step is to set up a communication channel. We're going to use MQTT for this using the [MQTT broker add-on][mqtt-addon]. @@ -25,7 +25,7 @@ For security and speed, Hass.io does not provide a way for containers to communi We loop in our script to fetch data and push it to MQTT and wait until the next process is ready. Here is a basic example and structure for that process. -Our Dockerfile need to install: +In our Dockerfile we need to install: ``` RUN apk --no-cache add jq mosquitto-clients @@ -65,7 +65,7 @@ done We wait for incoming data from the MQTT broker. We can also use an `input_boolean` that triggers an automation to publish a custom command to MQTT topic that can process multiple things in one add-on. -Our Dockerfile need to install: +In our Dockerfile we need to install: ``` RUN apk --no-cache add jq mosquitto-clients From fb2236f70e96bd03bfdb9f90c200edc9e7ab2539 Mon Sep 17 00:00:00 2001 From: CupricReki Date: Tue, 13 Feb 2018 09:04:25 -0700 Subject: [PATCH 323/993] Update installation.markdown (#4661) `raspbi-config` changed to `raspi-config` --- source/_docs/z-wave/installation.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_docs/z-wave/installation.markdown b/source/_docs/z-wave/installation.markdown index b110e34863..7b40c12bb4 100644 --- a/source/_docs/z-wave/installation.markdown +++ b/source/_docs/z-wave/installation.markdown @@ -36,7 +36,7 @@ $ sudo /Applications/Python\ x.x/Install\ Certificates.command ### {% linkable_title Raspberry Pi %} -On Raspberry Pi you will need to enable the serial interface in the `raspbi-config` tool before you can add Z-Wave to Home Assistant. +On Raspberry Pi you will need to enable the serial interface in the `raspi-config` tool before you can add Z-Wave to Home Assistant. ## {% linkable_title Configuration %} From 8226c05682aaab7b1d9d62bd97ac3c6a5c72581a Mon Sep 17 00:00:00 2001 From: Rene Nulsch <33263735+ReneNulschDE@users.noreply.github.com> Date: Tue, 13 Feb 2018 17:05:15 +0100 Subject: [PATCH 324/993] Add lxml requirement note (#4651) --- source/_components/mercedesme.markdown | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/source/_components/mercedesme.markdown b/source/_components/mercedesme.markdown index e84e87c612..c85b54cd78 100644 --- a/source/_components/mercedesme.markdown +++ b/source/_components/mercedesme.markdown @@ -48,4 +48,8 @@ scan_interval: required: true default: 30 type: int -{% endconfiguration %} \ No newline at end of file +{% endconfiguration %} + +

    +The requirement `lxml` has to be [installed](http://lxml.de/installation.html) manually `pip install lxml` on some devices. +

    From f97d5189e9c76f73761b881d1223a46f3b7fbcea Mon Sep 17 00:00:00 2001 From: Bob Igo Date: Tue, 13 Feb 2018 11:10:53 -0500 Subject: [PATCH 325/993] Provide an example of how to make a 'when dark' condition by ORing sunrise and sunset conditions. (#4652) See issue#12308 at https://github.com/home-assistant/home-assistant/issues/12308 --- source/_docs/scripts/conditions.markdown | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/source/_docs/scripts/conditions.markdown b/source/_docs/scripts/conditions.markdown index 167b273764..d2dc0638d8 100644 --- a/source/_docs/scripts/conditions.markdown +++ b/source/_docs/scripts/conditions.markdown @@ -114,6 +114,16 @@ condition: after_offset: "-1:00:00" ``` +```yaml +condition: + condition: or # 'when dark' condition: either after sunset or before sunrise + conditions: + - condition: sun + after: sunset + - condition: sun + before: sunrise +``` + Here is a truth table to clarify the parameters with and without offset: | command | night | at sunrise | daytime | at sunset | From 97c3b418f5f31cb6b61f452e216033d36750926d Mon Sep 17 00:00:00 2001 From: poldim Date: Tue, 13 Feb 2018 09:56:05 -0800 Subject: [PATCH 326/993] Update discovery.markdown (#4662) --- source/_docs/mqtt/discovery.markdown | 1 + 1 file changed, 1 insertion(+) diff --git a/source/_docs/mqtt/discovery.markdown b/source/_docs/mqtt/discovery.markdown index 0fa7a45c04..a0f3737cbc 100644 --- a/source/_docs/mqtt/discovery.markdown +++ b/source/_docs/mqtt/discovery.markdown @@ -58,6 +58,7 @@ The following firmware for ESP8266, ESP32 and Sonoff unit has built-in support f - [Sonoff-Tasmota](https://github.com/arendst/Sonoff-Tasmota) (starting with 5.11.1e) - [esphomelib](https://github.com/OttoWinter/esphomelib) - [ESPurna](https://github.com/xoseperez/espurna) +- [Arilux AL-LC0X LED controllers](https://github.com/mertenats/Arilux_AL-LC0X) ### {% linkable_title Examples %} From 9a4ddbed953c296cf053db52b016da089aec868a Mon Sep 17 00:00:00 2001 From: Christian Lahme Date: Tue, 13 Feb 2018 19:15:24 +0100 Subject: [PATCH 327/993] Update homematic.markdown Added some lines for KeyMatic usage --- source/_components/homematic.markdown | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/source/_components/homematic.markdown b/source/_components/homematic.markdown index 73287f7420..025b75a642 100644 --- a/source/_components/homematic.markdown +++ b/source/_components/homematic.markdown @@ -2,7 +2,7 @@ layout: page title: "Homematic" description: "Instructions for integrating Homematic into Home Assistant." -date: 2016-11-27 21:38 +date: 2018-02-13 19:10 sidebar: true comments: false sharing: true @@ -230,3 +230,19 @@ action: param: SET_TEMPERATURE value: 23.0 ``` + +Manually set lock on KeyMatic devices +```yaml +... +action: + service: lock.lock + entity_id: lock.leq1234567 +``` + +Manually set unlock on KeyMatic devices +```yaml +... +action: + service: lock.unlock + entity_id: lock.leq1234567 +``` From 653b4bae0330ce4b1404d6c033ead898faa25261 Mon Sep 17 00:00:00 2001 From: Tabakhase Date: Tue, 13 Feb 2018 19:40:34 +0100 Subject: [PATCH 328/993] clearify rpi_gpio sharing + revert #4608 (#4660) * Revert "add documentation for "shared_gpio" flag to component switch.rpi_gpio" This reverts commit f2dba1f614af51f84eadbdeab5ca2f566f334ad6. * clearify that rpi_gpio pins are exclusive to HASS-ussage when assigned --- source/_components/switch.rpi_gpio.markdown | 15 ++++----------- 1 file changed, 4 insertions(+), 11 deletions(-) diff --git a/source/_components/switch.rpi_gpio.markdown b/source/_components/switch.rpi_gpio.markdown index ad4079a433..9f50d12987 100644 --- a/source/_components/switch.rpi_gpio.markdown +++ b/source/_components/switch.rpi_gpio.markdown @@ -32,10 +32,13 @@ Configuration variables: - **ports** array (*Required*): Array of used ports. - **port: name** (*Required*): Port numbers and corresponding names (GPIO #). - **invert_logic** (*Optional*): If true, inverts the output logic to ACTIVE LOW. Default is false (ACTIVE HIGH). -- **shared_gpio** (*Optional*): If true, forces a GPIO.setup() before each write. Default is false. For more details about the GPIO layout, visit the Wikipedia [article](https://en.wikipedia.org/wiki/Raspberry_Pi#GPIO_connector) about the Raspberry Pi. +

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

    + A common question is what does Port refer to, this number is the actual GPIO # not the pin #. For example, if you have a relay connected to pin 11 its GPIO # is 17. @@ -47,14 +50,4 @@ switch: 17: Speaker Relay ``` -In case you have any other python scripts running that use RPi.GPIO no values will be written after the initial HASS-start. -Setting **shared_gpio** to true will reinit the pin before each write, working around this issue. -```yaml -# Example configuration.yaml entry -switch: - - platform: rpi_gpio - shared_gpio: true - ports: - 19: LED-Red -``` From db727639c829bfc75d02d24f5432cfe882145a5c Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Tue, 13 Feb 2018 23:02:39 -0800 Subject: [PATCH 329/993] Release 0.63.2 --- _config.yml | 6 ++--- source/_posts/2018-02-10-release-63.markdown | 26 ++++++++++++++++++++ 2 files changed, 29 insertions(+), 3 deletions(-) diff --git a/_config.yml b/_config.yml index 7b69f8bc2e..6ee6d3f537 100644 --- a/_config.yml +++ b/_config.yml @@ -140,13 +140,13 @@ social: # Home Assistant release details current_major_version: 0 current_minor_version: 63 -current_patch_version: 1 -date_released: 2018-02-12 +current_patch_version: 2 +date_released: 2018-02-14 # Either # or the anchor link to latest release notes in the blog post. # Must be prefixed with a # and have double quotes around it. # Major release: -patch_version_notes: "#release-0631---february-12" +patch_version_notes: "#release-0632---february-14" # Minor release (Example #release-0431---april-25): # Date we moved to Discourse for comments diff --git a/source/_posts/2018-02-10-release-63.markdown b/source/_posts/2018-02-10-release-63.markdown index 2f91e77a44..cd07acf26d 100644 --- a/source/_posts/2018-02-10-release-63.markdown +++ b/source/_posts/2018-02-10-release-63.markdown @@ -51,6 +51,14 @@ We're planning a lot of cool stuff around the entity registry. Stay tuned! - Always return lockState == LOCKED when handling Alexa.LockController ([@lucasweb78] - [#12328]) ([alexa docs]) - Fix platform dependencies ([@balloob] - [#12330]) +## {% linkable_title Release 0.63.2 - February 14 %} + +- Fix MercedesMe - add check for unsupported features ([@ReneNulschDE] - [#12342]) ([mercedesme docs]) ([binary_sensor.mercedesme docs]) ([device_tracker.mercedesme docs]) ([sensor.mercedesme docs]) +- Fix WUnderground names ([@OttoWinter] - [#12346]) ([sensor.wunderground docs]) +- Updated beacontools ([@citruz] - [#12368]) ([sensor.eddystone_temperature docs]) +- Introduce zone_id to identify player+zone ([@sdague] - [#12382]) ([media_player.yamaha docs]) +- Downgrade limitlessled to 1.0.8 ([@amelchio] - [#12403]) ([light.limitlessled docs]) + ## {% linkable_title If you need help... %} ...don't hesitate to use our very active [forums](https://community.home-assistant.io/) or join us for a little [chat](https://discord.gg/c5DvZ4e). The release notes have comments enabled but it's preferred if you use the former communication channels. Thanks. @@ -625,3 +633,21 @@ Experiencing issues introduced by this release? Please report them in our [issue [binary_sensor.netatmo docs]: https://home-assistant.io/components/binary_sensor.netatmo/ [camera.netatmo docs]: https://home-assistant.io/components/camera.netatmo/ [sensor.netatmo docs]: https://home-assistant.io/components/sensor.netatmo/ +[#12342]: https://github.com/home-assistant/home-assistant/pull/12342 +[#12346]: https://github.com/home-assistant/home-assistant/pull/12346 +[#12368]: https://github.com/home-assistant/home-assistant/pull/12368 +[#12382]: https://github.com/home-assistant/home-assistant/pull/12382 +[#12403]: https://github.com/home-assistant/home-assistant/pull/12403 +[@OttoWinter]: https://github.com/OttoWinter +[@ReneNulschDE]: https://github.com/ReneNulschDE +[@amelchio]: https://github.com/amelchio +[@citruz]: https://github.com/citruz +[@sdague]: https://github.com/sdague +[binary_sensor.mercedesme docs]: https://home-assistant.io/components/binary_sensor.mercedesme/ +[device_tracker.mercedesme docs]: https://home-assistant.io/components/device_tracker.mercedesme/ +[light.limitlessled docs]: https://home-assistant.io/components/light.limitlessled/ +[media_player.yamaha docs]: https://home-assistant.io/components/media_player.yamaha/ +[mercedesme docs]: https://home-assistant.io/components/mercedesme/ +[sensor.eddystone_temperature docs]: https://home-assistant.io/components/sensor.eddystone_temperature/ +[sensor.mercedesme docs]: https://home-assistant.io/components/sensor.mercedesme/ +[sensor.wunderground docs]: https://home-assistant.io/components/sensor.wunderground/ From 2d532d1147be4a9988d9207cba049c41d3a09157 Mon Sep 17 00:00:00 2001 From: David Date: Wed, 14 Feb 2018 08:22:18 +0100 Subject: [PATCH 330/993] Update 2018-02-10-release-63.markdown (#4667) Add the 3 original breaking changes from home-assistant/home-assistant#12124 --- source/_posts/2018-02-10-release-63.markdown | 3 +++ 1 file changed, 3 insertions(+) diff --git a/source/_posts/2018-02-10-release-63.markdown b/source/_posts/2018-02-10-release-63.markdown index cd07acf26d..b58560e3ad 100644 --- a/source/_posts/2018-02-10-release-63.markdown +++ b/source/_posts/2018-02-10-release-63.markdown @@ -96,17 +96,20 @@ Experiencing issues introduced by this release? Please report them in our [issue | Resource | Old Entity ID | New Entity ID | | :------------------ | :------------------ |:-------------------------| | disk_use | sensor.disk_used | sensor.disk_use | + | disk_use_percent | sensor.disk_used | sensor.disk_use_percent | | load_15m | sensor.average_load_15m | sensor.load_15m | | load_1m | sensor.average_load_1m | sensor.load_1m | | load_5m | sensor.average_load_5m | sensor.load_5m | | memory_free | sensor.ram_available | sensor.memory_free | | memory_use | sensor.ram_used | sensor.memory_use | + | memory_use_percent | sensor.ram_used | sensor.memory_use_percent | | network_in | sensor.received | sensor.network_in | | network_out | sensor.sent | sensor.network_out | | packets_in | sensor.packets_received | sensor.packets_in | | packets_out | sensor.packets_sent | sensor.packets_out | | processor_use | sensor.cpu_used | sensor.processor_use | | swap_use | sensor.swap_used | sensor.swap_use | + | swap_use_percent | sensor.swap_used | sensor.swap_use_percent | - Developers only: Following EntityComponent methods have been removed: `extract_from_service`, `async_update_group`, `async_reset`, `prepare_reload` ([@balloob] - [#12237]) (breaking change) From 6b61e4be310872a298ebaa98958573588c474337 Mon Sep 17 00:00:00 2001 From: Mike O'Driscoll Date: Wed, 14 Feb 2018 02:22:36 -0500 Subject: [PATCH 331/993] Make TekSavvy Sensor API a Link (#4664) * Make TekSavvy Sensor API a Link Make the URL to getting TekSavvy API an acutal link. * Remove line break --- source/_components/sensor.teksavvy.markdown | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/source/_components/sensor.teksavvy.markdown b/source/_components/sensor.teksavvy.markdown index dd62ca97d4..9f7a8e70fa 100644 --- a/source/_components/sensor.teksavvy.markdown +++ b/source/_components/sensor.teksavvy.markdown @@ -15,8 +15,7 @@ ha_iot_class: "Cloud Polling" Integrate your [TekSavvy](https://myaccount.teksavvy.com/) account information into Home Assistant. -You can get your API key from -https://myaccount.teksavvy.com/ApiKey/ApiKeyManagement +You can get your API key from [TekSavvy My Account](https://myaccount.teksavvy.com/ApiKey/ApiKeyManagement). To use your TekSavvy sensor in your installation, add the following to your `configuration.yaml` file: From 65c442f92a9bb2be8d98404a19c94eaa383eeeac Mon Sep 17 00:00:00 2001 From: drogfild <35920772+drogfild@users.noreply.github.com> Date: Wed, 14 Feb 2018 21:27:12 +0200 Subject: [PATCH 332/993] Update how to save proper authorized_keys Saving private key straight from puttygen didn't work. Text from text-box must be saved to SD. --- source/developers/hassio/debugging.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/developers/hassio/debugging.markdown b/source/developers/hassio/debugging.markdown index 01a92c98ea..3b5354e310 100644 --- a/source/developers/hassio/debugging.markdown +++ b/source/developers/hassio/debugging.markdown @@ -28,7 +28,7 @@ Alternative instructions, for Mac, Windows and Linux can be found [here](https:/ Follow steps 1-4 under 'Generating a new SSH key' (The other sections are not applicable to Hass.io and can be ignored.) -Step 3 in the link above, shows the path to the private key file `id_rsa` for your chosen operating system. Your public key, `id_rsa.pub`, is saved in the same folder. Next, copy your public key file to the root of your SD card as `authorized_keys`. +Step 3 in the link above, shows the path to the private key file `id_rsa` for your chosen operating system. Your public key, `id_rsa.pub`, is saved in the same folder. Next, select all text from text box "Public key for pasting into OpenSSH authorized_keys file" and save it to to the root of your SD card as `authorized_keys`.

    Make sure when you are copying the public key to the root of the /resin-boot partition of the SD card that you rename the file correctly to `authorized_keys` with no `.pub` file extension. From d08159983615020bd3e22f6eca7eb8669878745d Mon Sep 17 00:00:00 2001 From: drogfild <35920772+drogfild@users.noreply.github.com> Date: Thu, 15 Feb 2018 00:21:24 +0200 Subject: [PATCH 333/993] Removed extra word 'to' --- source/developers/hassio/debugging.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/developers/hassio/debugging.markdown b/source/developers/hassio/debugging.markdown index 3b5354e310..d9030069a8 100644 --- a/source/developers/hassio/debugging.markdown +++ b/source/developers/hassio/debugging.markdown @@ -28,7 +28,7 @@ Alternative instructions, for Mac, Windows and Linux can be found [here](https:/ Follow steps 1-4 under 'Generating a new SSH key' (The other sections are not applicable to Hass.io and can be ignored.) -Step 3 in the link above, shows the path to the private key file `id_rsa` for your chosen operating system. Your public key, `id_rsa.pub`, is saved in the same folder. Next, select all text from text box "Public key for pasting into OpenSSH authorized_keys file" and save it to to the root of your SD card as `authorized_keys`. +Step 3 in the link above, shows the path to the private key file `id_rsa` for your chosen operating system. Your public key, `id_rsa.pub`, is saved in the same folder. Next, select all text from text box "Public key for pasting into OpenSSH authorized_keys file" and save it to the root of your SD card as `authorized_keys`.

    Make sure when you are copying the public key to the root of the /resin-boot partition of the SD card that you rename the file correctly to `authorized_keys` with no `.pub` file extension. From 8b990582ddb3f8f4ad3a74a7ea35deeeb2cc78bb Mon Sep 17 00:00:00 2001 From: Robin Date: Thu, 15 Feb 2018 17:47:16 +0000 Subject: [PATCH 334/993] Clarify distribution of random values (#4614) Clarify that values drawn produce a discrete uniform distribution, and not for example a normal (or bell shaped) distribution. I intend to implement a random physics sensor which will return a bell distribution and this edit will avoid confusion. --- source/_components/sensor.random.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/sensor.random.markdown b/source/_components/sensor.random.markdown index d550d4b88d..c7f2bf07b1 100644 --- a/source/_components/sensor.random.markdown +++ b/source/_components/sensor.random.markdown @@ -14,7 +14,7 @@ ha_release: 0.32 --- -The `random` sensor platform is creating random sensor values (integers) out of a given range. This can be useful if you want to test automation rules. It generates a new value every time it is polled. +The `random` sensor platform is creating random sensor values (integers) out of a given range. Returned values form a [discrete uniform distribution](https://en.wikipedia.org/wiki/Discrete_uniform_distribution), meaning that each integer value in the range configured is equally likely to be drawn. This can be useful if you want to test automation rules. It generates a new value every time it is polled. To enable the random sensor, add the following lines to your `configuration.yaml`: From 132b1528419c3c87acba38844e3d56b3bef90810 Mon Sep 17 00:00:00 2001 From: George Vedamanickam Date: Thu, 15 Feb 2018 23:23:27 +0530 Subject: [PATCH 335/993] Update tls_self_signed_certificate.markdown (#4679) Minor typo in the word complain --- .../ecosystem/certificates/tls_self_signed_certificate.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_docs/ecosystem/certificates/tls_self_signed_certificate.markdown b/source/_docs/ecosystem/certificates/tls_self_signed_certificate.markdown index 53736e0693..d7c145fe8b 100644 --- a/source/_docs/ecosystem/certificates/tls_self_signed_certificate.markdown +++ b/source/_docs/ecosystem/certificates/tls_self_signed_certificate.markdown @@ -12,7 +12,7 @@ redirect_from: /cookbook/tls_self_signed_certificate/ If your Home Assistant instance is only accessible from your local network you can still protect the communication between your browsers and the frontend with SSL/TLS. [Let's encrypt]({{site_root}}/blog/2015/12/13/setup-encryption-using-lets-encrypt/) will only work if you have a DNS entry and remote access is allowed. -The solution is to use a self-signed certificate. As you most likely don't have a certification authority (CA) your browser will conplain about the security. If you have a CA then this will not be an issue. +The solution is to use a self-signed certificate. As you most likely don't have a certification authority (CA) your browser will complain about the security. If you have a CA then this will not be an issue. To create a certificate locally, you need the [OpenSSL](https://www.openssl.org/) command-line tool. From 8746192d160cfbd6798af247d49149a0512a6f9e Mon Sep 17 00:00:00 2001 From: DubhAd Date: Thu, 15 Feb 2018 17:55:36 +0000 Subject: [PATCH 336/993] Added note calling out Hass.io only (#4678) * Added note calling out Hass.io only Given the ongoing confusion that add-ons cause, adding a note box to call out that add-ons are Hass.io only. * Fix typo --- source/addons/index.html | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/source/addons/index.html b/source/addons/index.html index 5abc6504b7..413106dd86 100644 --- a/source/addons/index.html +++ b/source/addons/index.html @@ -16,6 +16,10 @@ regenerate: false Check the Hass.io forums for add-on repositories managed by the community.

    +

    +Add-ons are only available if you've used the Hass.io installer. If you installed Home Assistant using any other method then you cannot use add-ons (but you can achieve the same result manually). +

    + {% assign addons = site.addons | sort: 'title' %}

    {% linkable_title Featured add-ons %}

    From 648b83bad6cf6e661f16db4ba11bc4495442ced4 Mon Sep 17 00:00:00 2001 From: DubhAd Date: Thu, 15 Feb 2018 17:56:06 +0000 Subject: [PATCH 337/993] Added note about add-ons (#4677) Since this keeps causing confusion, adding a note to the FAQ --- source/_faq/ha-vs-hassio.markdown | 1 + 1 file changed, 1 insertion(+) diff --git a/source/_faq/ha-vs-hassio.markdown b/source/_faq/ha-vs-hassio.markdown index a331e034aa..41e373cfee 100644 --- a/source/_faq/ha-vs-hassio.markdown +++ b/source/_faq/ha-vs-hassio.markdown @@ -14,3 +14,4 @@ Home Assistant is a Python program, in simple words. It can be run various opera [Hass.io](/hassio/) is a combination of Home Assistant and tools which allows one to run it easily on a Raspberry Pi and other platforms without setting up an operating system first. Hass.io is an all-in one-solution and has a management user interface that can be used from the Home Assistant frontend. This interface is not present in a standalone setup of Home Assistant. +Be aware that add-ons are only available in Hass.io, due to the way Hass.io is installed. From 903b86402096caab9c69aaae7ed6d3619759d67a Mon Sep 17 00:00:00 2001 From: DubhAd Date: Thu, 15 Feb 2018 17:57:16 +0000 Subject: [PATCH 338/993] Added FAQ link (#4674) * Added FAQ link Added link to the FAQ article that (starts to) explain the difference between Hass.io and stock Home Assistant. * Update link --- source/getting-started/index.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/getting-started/index.markdown b/source/getting-started/index.markdown index d70ee63662..abb8cf7e72 100644 --- a/source/getting-started/index.markdown +++ b/source/getting-started/index.markdown @@ -11,7 +11,7 @@ footer: true The goal of this getting started guide is to install [Hass.io](/hassio/) on a Raspberry Pi 3. Hass.io is our own all in one solution that turns your Raspberry Pi into the ultimate home automation hub. -Follow this guide if you want to easily get started with Home Assistant, or if you have no or little Linux experience. For advanced users or if you have no Raspberry Pi at hand, check our [alternative installation methods](/docs/installation/). +Follow this guide if you want to easily get started with Home Assistant, or if you have no or little Linux experience. For advanced users or if you have no Raspberry Pi at hand, check our [alternative installation methods](/docs/installation/). The [FAQ](/faq/#home-assistant-vs-hassio) explains more about the differences. ### {% linkable_title Hardware requirements %} From a668d5b26fdbf037d089e04d2a5f13c9856840e8 Mon Sep 17 00:00:00 2001 From: Thijs de Jong Date: Thu, 15 Feb 2018 18:58:08 +0100 Subject: [PATCH 339/993] Fix Tahoma documentation (#4673) * remove sensor config example * Set sensor category to sensor was cover before * remove cover config example --- source/_components/cover.tahoma.markdown | 8 ++------ source/_components/sensor.tahoma.markdown | 10 +++------- 2 files changed, 5 insertions(+), 13 deletions(-) diff --git a/source/_components/cover.tahoma.markdown b/source/_components/cover.tahoma.markdown index 787b6fb126..1176153355 100644 --- a/source/_components/cover.tahoma.markdown +++ b/source/_components/cover.tahoma.markdown @@ -12,10 +12,6 @@ ha_category: Cover ha_release: 0.59 --- -To use your tahoma covers in your installation, add the following to your `configuration.yaml` file: +The `tahoma` cover platform lets you control covers added to your Tahoma Box in Home Assistant. -```yaml -# Example configuration.yml entry -cover: - platform: tahoma -``` +Covers will be added automatically. Please refer to the [component](/components/tahoma/) configuration on how to setup Tahoma. diff --git a/source/_components/sensor.tahoma.markdown b/source/_components/sensor.tahoma.markdown index 80cf6bc4eb..7a2b960de8 100644 --- a/source/_components/sensor.tahoma.markdown +++ b/source/_components/sensor.tahoma.markdown @@ -8,14 +8,10 @@ comments: false sharing: true footer: true logo: tahoma.png -ha_category: Cover +ha_category: Sensor ha_release: 0.59 --- -To use your tahoma sensors in your installation, add the following to your `configuration.yaml` file: +The `tahoma` sensor platform lets you see sensors added to your Tahoma Box in Home Assistant. -```yaml -# Example configuration.yml entry -sensor: - platform: tahoma -``` +Sensors will be added automatically. Please refer to the [component](/components/tahoma/) configuration on how to setup Tahoma. From 14048b15b0420050cd8bc8476d0d5b194ee2fbe2 Mon Sep 17 00:00:00 2001 From: DubhAd Date: Thu, 15 Feb 2018 18:00:45 +0000 Subject: [PATCH 340/993] Update to remove Python 3.4 reference (#4675) Making FAQ more relevant by referencing just Python 3 --- source/_faq/pip3.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_faq/pip3.markdown b/source/_faq/pip3.markdown index cb957a7cf4..9b4fe56e02 100644 --- a/source/_faq/pip3.markdown +++ b/source/_faq/pip3.markdown @@ -10,7 +10,7 @@ ha_category: Installation --- -This utility should have been installed as part of the Python 3.4 installation. Check if Python 3.4 is installed by running `python3 --version`. If it is not installed, [download it here](https://www.python.org/getit/). +This utility should have been installed as part of the Python 3 installation. Check if Python 3 is installed by running `python3 --version`. If it is not installed, [download it here](https://www.python.org/getit/). If you are able to successfully run `python3 --version` but not `pip3`, install Home Assistant by running the following command instead: From 4f6179e2ff679fe83580aac4bc64e2dca61a2b70 Mon Sep 17 00:00:00 2001 From: Otto Winter Date: Thu, 15 Feb 2018 19:04:37 +0100 Subject: [PATCH 341/993] Fix MQTT tls_version docs (#4666) * Fix MQTT tls_version docs * Quick fix for escaping issue * Remove space --- source/_docs/mqtt/broker.markdown | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/_docs/mqtt/broker.markdown b/source/_docs/mqtt/broker.markdown index a5f9e9ba70..74e45a91d0 100644 --- a/source/_docs/mqtt/broker.markdown +++ b/source/_docs/mqtt/broker.markdown @@ -99,14 +99,14 @@ tls_insecure: type: boolean tls_version: required: false - description: "TLS/SSL protocol version to use. Available options are: `auto`, `1.0`, `1.1`, `1.2`. Defaults to `auto`." + description: "TLS/SSL protocol version to use. Available options are: `'auto'`, `'1.0'`, `'1.1'`, `'1.2'`. Make sure to put quotes around the value. Defaults to `'auto'`." type: string {% endconfiguration %}

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

    From 43f4ef1121de08a5aaea819d61e2a58c699cbb7c Mon Sep 17 00:00:00 2001 From: themanieldaniel Date: Thu, 15 Feb 2018 13:09:38 -0500 Subject: [PATCH 342/993] Update trigger.markdown (#4630) --- source/_docs/automation/trigger.markdown | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/source/_docs/automation/trigger.markdown b/source/_docs/automation/trigger.markdown index 140fd421ae..b6a9a283a0 100644 --- a/source/_docs/automation/trigger.markdown +++ b/source/_docs/automation/trigger.markdown @@ -33,7 +33,7 @@ automation: ### {% linkable_title Home Assistant trigger %} -Use this platform to trigger when Home Assistant starts up and shuts down. +Triggers when Home Assistant starts up or shuts down. ```yaml automation: @@ -56,7 +56,7 @@ automation: ``` ### {% linkable_title Numeric state trigger %} -On state change of a specified entity, attempts to parse the state as a number and triggers once if value is changing from above to below a threshold, or from below to above the given threshold. +Triggers when numeric value of an entity's state crosses a given threshold. On state change of a specified entity, attempts to parse the state as a number and triggers once if value is changing from above to below or from below to above the given threshold. ```yaml automation: @@ -83,7 +83,7 @@ In the example above, a numeric_state that is 17.1-24.9 would fire this trigger. ### {% linkable_title State trigger %} -Triggers when the state of tracked entities change. If only entity_id given will match all state changes, even if only state attributes change. +Triggers when the state of a given entity changes. If only entity_id is given trigger will activate for all state changes, even if only state attributes change. ```yaml automation: @@ -107,7 +107,7 @@ automation:

    ### {% linkable_title Sun trigger %} -Trigger when the sun is setting or rising. An optional time offset can be given to have it trigger for example 45 minutes before sunset, when dusk is setting in. +Triggers when the sun is setting or rising. An optional time offset can be given to have it trigger a set time before or after the sun event (i.e. 45 minutes before sunset, when dusk is setting in). ```yaml automation: From 0a0a0a20a29ed76bfe38ce38310e83dbd65af9c7 Mon Sep 17 00:00:00 2001 From: Omen Wild Date: Thu, 15 Feb 2018 10:13:53 -0800 Subject: [PATCH 343/993] Add a Python program to print the correct code sequence for compliant devices (#4619) * Add a Python program to print the correct code sequence for compliant devices * Remove blank lines --- source/_docs/z-wave/control-panel.markdown | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/source/_docs/z-wave/control-panel.markdown b/source/_docs/z-wave/control-panel.markdown index 06c9bd741b..5d89b164ce 100644 --- a/source/_docs/z-wave/control-panel.markdown +++ b/source/_docs/z-wave/control-panel.markdown @@ -130,6 +130,20 @@ If your node has user codes, you can set and delete them. The format is raw hex Some non compliant device like tag readers, have implemented to use raw hex code. Please refer to a hex ascii table to set your code. Example: http://www.asciitable.com/ +Here is a small Python program than will take numbers on the command line and print the correct sequence for compliant devices: + +```python +#! /usr/bin/python3 +import sys + +translations = {} + +for x in range(0, 10): + translations["%s" % x] = "\\x3%s" % x + +for c in sys.argv[1]: + print(translations[c], end='') +``` ## {% linkable_title OZW Log %} From ee1a21c9d9db769d3f41b7a9ac15c733d63197d5 Mon Sep 17 00:00:00 2001 From: mweimerskirch <362092+mweimerskirch@users.noreply.github.com> Date: Thu, 15 Feb 2018 19:14:47 +0100 Subject: [PATCH 344/993] Updated Google calendar documentation (#4621) The documentation was missing the step to enable the calendar API. It this step is not completed, the following error appears in the log: Encountered 403 Forbidden with reason "accessNotConfigured" --- source/_components/calendar.google.markdown | 1 + 1 file changed, 1 insertion(+) diff --git a/source/_components/calendar.google.markdown b/source/_components/calendar.google.markdown index 3442a972a0..acad749e7c 100644 --- a/source/_components/calendar.google.markdown +++ b/source/_components/calendar.google.markdown @@ -28,6 +28,7 @@ Generate a Client ID and Client Secret on [Google Developers Console](https://co 1. Click 'Create credentials' -> OAuth client ID. 1. Set the Application type to 'Other' and give this credential set a name then click Create. 1. Save the client ID and secret as you will need to put these in your configuration.yaml file. +1. Click on "Library", search for "Google Calendar API" and enable it. ### {% linkable_title Basic Setup %} From ec57b0725dbac28789b73729dcfd5f177f0c8b17 Mon Sep 17 00:00:00 2001 From: honcheng Date: Fri, 16 Feb 2018 02:16:17 +0800 Subject: [PATCH 345/993] Update vacuum.xiaomi_miio.markdown (#4594) Added additional instruction to get adb backup working for certain phones. --- source/_components/vacuum.xiaomi_miio.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/vacuum.xiaomi_miio.markdown b/source/_components/vacuum.xiaomi_miio.markdown index b04cfe04f3..03a8b0ecec 100644 --- a/source/_components/vacuum.xiaomi_miio.markdown +++ b/source/_components/vacuum.xiaomi_miio.markdown @@ -174,7 +174,7 @@ To fetch the token follow these instructions depending on your mobile phone plat 2. Enable developer mode, USB debugging and plug the Android phone into the computer. 3. Get ADB e.g. `apt-get install android-tools-adb` or `apt-get install adb` 4. `adb devices` should list your device. Consult ADB manual if necessary. -5. Issue a backup command via adb: `adb backup -noapk com.xiaomi.smarthome -f backup.ab` (set a password if prompted on your phone) +5. Issue a backup command via adb: `adb backup -noapk com.xiaomi.smarthome -f backup.ab` (set a password if prompted on your phone). Some devices may required single quotes in the command `adb backup '-noapk com.xiaomi.smarthome -f backup.ab'` 6. Download the 'ADB Backup Extractor' from [here](https://sourceforge.net/projects/adbextractor/files/latest/download) 7. Extract the data from the backup: `java -jar Android\ Backup\ Utilities/Android\ Backup\ Extractor/android-backup-extractor-20171005-bin/abe.jar unpack backup.ab unpacked.tar` (enter the password, if prompted) 8. Untar the unpacked data: `tar -xvf unpacked.tar` From d069fb8a8f17624406a5b0ea174e040eefcc4ee4 Mon Sep 17 00:00:00 2001 From: KD4SIR Date: Thu, 15 Feb 2018 13:18:21 -0500 Subject: [PATCH 346/993] Update media_player.vlc.markdown (#4605) * Update media_player.vlc.markdown (My first submission) Updated the page to state this component is not compatible with Hassio at the moment. * Minor changes --- source/_components/media_player.vlc.markdown | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/source/_components/media_player.vlc.markdown b/source/_components/media_player.vlc.markdown index 21ed9cdf24..0925495764 100644 --- a/source/_components/media_player.vlc.markdown +++ b/source/_components/media_player.vlc.markdown @@ -60,3 +60,7 @@ You need to add the `homeassistant` user to the `audio` group: ```bash sudo usermod -a -G audio homeassistant ``` + +##### {% linkable_title VLC currently not supported with Hass.io %} + +According to the forum topic ["How to add VLC into my Hassio"](http://community.home-assistant.io/t/how-to-add-vlc-into-my-hassio/23000/5), it is not possible to install packages like VLC on Hass.io. From 61897efadef261d54cd535689523577effbb7662 Mon Sep 17 00:00:00 2001 From: Ledernacken6 Date: Thu, 15 Feb 2018 19:20:45 +0100 Subject: [PATCH 347/993] Update homematic.markdown (#4576) * Update homematic.markdown * Update homematic.markdown --- source/_components/homematic.markdown | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/source/_components/homematic.markdown b/source/_components/homematic.markdown index 73287f7420..90b1a7e816 100644 --- a/source/_components/homematic.markdown +++ b/source/_components/homematic.markdown @@ -161,6 +161,15 @@ automation: The channel parameter is equal to the channel of the button you are configuring the automation for. You can view the available channels in the UI you use to pair your devices. The name depends on if you chose to resolve names or not. If not, it will be the device ID (e.g. LEQ1234657). If you chose to resolve names (and that is successful), it will be the name you have set in your CCU or in the metadata (e.g. "Kitchen Switch"). +You can test whether your button works within HA if you look at the hass terminal. When pressing a button, lines similar to those should appear: +2018-01-27 11:51:32 INFO (Thread-12) [pyhomematic.devicetypes.generic] HMGeneric.event: address=MEQ1234567:6, interface_id=homeassistant-CCU2, key=PRESS_SHORT, value=True +2018-01-27 11:51:32 INFO (MainThread) [homeassistant.core] Bus:Handling +2018-01-27 11:51:32 INFO (Thread-12) [pyhomematic.devicetypes.generic] HMGeneric.event: address=MEQ1234567:6, interface_id=homeassistant-CCU2, key=INSTALL_TEST, value=True + +It may happen that "your_nice_name" is not resolved correctly; the according message (#2 in the above example) will be missing. This might be due to secure communication between your HM interface and the HM device. You can change the communication from "secure" to "standard" within your HM-interface to solve that issue (in "Einstellungen" - "Geräte" find your device and change "Übertragungsmodus" from secure to standard) - not recommended for devices that should have secure communication. + + + ### {% linkable_title Services %} * *homematic.virtualkey*: Simulate a keypress (or other valid action) on CCU/Homegear with device or virtual keys. From f07e4674456cb95dfe619524c95f3311865e3a4f Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Thu, 15 Feb 2018 19:25:04 +0100 Subject: [PATCH 348/993] Minor changes --- source/_components/homematic.markdown | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/source/_components/homematic.markdown b/source/_components/homematic.markdown index 90b1a7e816..84a19504b0 100644 --- a/source/_components/homematic.markdown +++ b/source/_components/homematic.markdown @@ -13,7 +13,6 @@ ha_iot_class: "Local Push" featured: false --- - The [Homematic](http://www.homematic.com/) component provides bi-directional communication with your CCU/Homegear. It uses a XML-RPC connection to set values on devices and subscribes to receive events the devices and the CCU emit. If you are using Homegear with paired [Intertechno](http://intertechno.at/) devices, uni-directional communication is possible as well. @@ -22,7 +21,7 @@ Device support is available for most of the wired and wireless devices, as well If you want to see if a specific device you have is supported, head over to the [pyhomematic](https://github.com/danielperna84/pyhomematic/tree/master/pyhomematic/devicetypes) repository and browse through the source code. A dictionary with the device identifiers (e.g. HM-Sec-SC-2) can be found within the relevant modules near the bottom. If your device is not supported, feel free to contribute. We automatically detect all devices we currently support and try to generate useful names. If you enable name-resolving, we try to fetch names from Metadata (Homegear), via JSON-RPC or the XML-API you may have installed on your CCU. Since this may fail this is disabled by default. -You can manually rename the created entities by using Home Assistants [Customizing](https://home-assistant.io/getting-started/customizing-devices/) feature. With it you are also able to hide entities you don't want to see in the UI. +You can manually rename the created entities by using Home Assistant's [Customizing](/docs/configuration/customizing-devices/) feature. With it you are also able to hide entities you don't want to see in the UI. To set up the component, add the following information to your `configuration.yaml` file: @@ -161,15 +160,16 @@ automation: The channel parameter is equal to the channel of the button you are configuring the automation for. You can view the available channels in the UI you use to pair your devices. The name depends on if you chose to resolve names or not. If not, it will be the device ID (e.g. LEQ1234657). If you chose to resolve names (and that is successful), it will be the name you have set in your CCU or in the metadata (e.g. "Kitchen Switch"). -You can test whether your button works within HA if you look at the hass terminal. When pressing a button, lines similar to those should appear: +You can test whether your button works within Home Assistant if you look at the terminal output. When pressing a button, lines similar to those should appear: + +```bash 2018-01-27 11:51:32 INFO (Thread-12) [pyhomematic.devicetypes.generic] HMGeneric.event: address=MEQ1234567:6, interface_id=homeassistant-CCU2, key=PRESS_SHORT, value=True 2018-01-27 11:51:32 INFO (MainThread) [homeassistant.core] Bus:Handling 2018-01-27 11:51:32 INFO (Thread-12) [pyhomematic.devicetypes.generic] HMGeneric.event: address=MEQ1234567:6, interface_id=homeassistant-CCU2, key=INSTALL_TEST, value=True +``` It may happen that "your_nice_name" is not resolved correctly; the according message (#2 in the above example) will be missing. This might be due to secure communication between your HM interface and the HM device. You can change the communication from "secure" to "standard" within your HM-interface to solve that issue (in "Einstellungen" - "Geräte" find your device and change "Übertragungsmodus" from secure to standard) - not recommended for devices that should have secure communication. - - ### {% linkable_title Services %} * *homematic.virtualkey*: Simulate a keypress (or other valid action) on CCU/Homegear with device or virtual keys. From 1e0fd94239dfb179516b1c1a6f687a6b332bfb5b Mon Sep 17 00:00:00 2001 From: Scott Date: Fri, 16 Feb 2018 11:03:34 -0600 Subject: [PATCH 349/993] Fix broken link --- source/_components/alarm_control_panel.manual_mqtt.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/alarm_control_panel.manual_mqtt.markdown b/source/_components/alarm_control_panel.manual_mqtt.markdown index be1508c676..5a1a7d139c 100644 --- a/source/_components/alarm_control_panel.manual_mqtt.markdown +++ b/source/_components/alarm_control_panel.manual_mqtt.markdown @@ -58,7 +58,7 @@ The following configuration variables from the base manual alarm platform are av - **pending_time** (*Optional*): State specific setting for **pending_time** (all states except **disarmed**) - **trigger_time** (*Optional*): State specific setting for **trigger_time** (all states except **triggered**) -See the documentation for the [manual alarm platform](/component/alarm_control_panel.manual/) for a description. +See the documentation for the [manual alarm platform](/components/alarm_control_panel.manual/) for a description. Additionally, the following MQTT configuration variables are also available: From 8e240240c5171fe4bd11b4e839e5a99a85f858dd Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Fri, 16 Feb 2018 09:30:10 -0800 Subject: [PATCH 350/993] Updat deprecation notice --- .../2017-10-06-deprecating-python-3.4-support.markdown | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/source/_posts/2017-10-06-deprecating-python-3.4-support.markdown b/source/_posts/2017-10-06-deprecating-python-3.4-support.markdown index 8d9364a143..7b053dd690 100644 --- a/source/_posts/2017-10-06-deprecating-python-3.4-support.markdown +++ b/source/_posts/2017-10-06-deprecating-python-3.4-support.markdown @@ -10,6 +10,11 @@ comments: true categories: Technology --- +**Update February 16, 2018**: +Home Assistant 0.64 will be the last release to support Python 3.4. Starting with release 0.65, Home Assistant will require a minimum version of Python 3.5.3. + +--- + Starting with our next release, 0.55, we will deprecate Python 3.4 support. The current plan is to remove support for Python 3.4 at the beginning of 2018. Python 3.5 was released on September 13th, 2015. It has since then become the default Python installation on the stable releases of Debian, Ubuntu, Raspbian and Hassbian. Our other own operating system, Hass.io, is more advanced and is already running the greatly improved Python 3.6. @@ -17,7 +22,7 @@ Python 3.5 was released on September 13th, 2015. It has since then become the de The jump to Python 3.5 as a minimum version is driven by the Home Assistant core, which is based on asyncio. Starting with Python 3.5, asyncio got improved support in the language with dedicated keywords `async` and `await`. As this is the proper way of doing async in Python, we're seeing a move by async libraries to either only support the new syntax from the beginning or dropping support for the Python 3.4 approach. Not moving along means an increased maintenance burden as we cannot use the latest releases of our libraries. Next to that it will prevent our users from being able to leverage the bug fixes and performance improvements that come with Python 3.5. #### Hass.io -If you're running Hass.io, you don't have to do anything. Your system will always stay up to date. +If you're running Hass.io, you don't have to do anything. Your system will always stay up to date. #### Hassbian If you're running Hassbian it's recommended that you make a backup of your configuration files and restore them on a fresh install. Upgrading an existing installation isn't recommended. From 5d7f8f3b174624915a228419886fbd12db6d2f23 Mon Sep 17 00:00:00 2001 From: Otto Winter Date: Fri, 16 Feb 2018 22:09:21 +0100 Subject: [PATCH 351/993] Fix demo links (#4686) --- source/demo/frontend.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/demo/frontend.html b/source/demo/frontend.html index 0cb5b14886..6cf41b7575 100644 --- a/source/demo/frontend.html +++ b/source/demo/frontend.html @@ -2,4 +2,4 @@ },_distributeDirtyRoots:function(){for(var e,t=this.shadyRoot._dirtyRoots,o=0,i=t.length;o0?~setTimeout(e,t):(this._twiddle.textContent=this._twiddleContent++,this._callbacks.push(e),this._currVal++)},cancel:function(e){if(e<0)clearTimeout(~e);else{var t=e-this._lastVal;if(t>=0){if(!this._callbacks[t])throw"invalid async handle: "+e;this._callbacks[t]=null}}},_atEndOfMicrotask:function(){for(var e=this._callbacks.length,t=0;t +}var r=window.requestAnimationFrame;window.requestAnimationFrame=function(t){return r(function(e){window.document.timeline._updateAnimationsPromises(),t(e),window.document.timeline._updateAnimationsPromises()})},e.AnimationTimeline=function(){this._animations=[],this.currentTime=void 0},e.AnimationTimeline.prototype={getAnimations:function(){return this._discardAnimations(),this._animations.slice()},_updateAnimationsPromises:function(){e.animationsWithPromises=e.animationsWithPromises.filter(function(t){return t._updatePromises()})},_discardAnimations:function(){this._updateAnimationsPromises(),this._animations=this._animations.filter(function(t){return"finished"!=t.playState&&"idle"!=t.playState})},_play:function(t){var i=new e.Animation(t,this);return this._animations.push(i),e.restartWebAnimationsNextTick(),i._updatePromises(),i._animation.play(),i._updatePromises(),i},play:function(t){return t&&t.remove(),this._play(t)}};var o=!1;e.restartWebAnimationsNextTick=function(){o||(o=!0,requestAnimationFrame(n))};var a=new e.AnimationTimeline;e.timeline=a;try{Object.defineProperty(window.document,"timeline",{configurable:!0,get:function(){return a}})}catch(t){}try{window.document.timeline=a}catch(t){}}(c,e,f),function(t,e,i){e.animationsWithPromises=[],e.Animation=function(e,i){if(this.id="",e&&e._id&&(this.id=e._id),this.effect=e,e&&(e._animation=this),!i)throw new Error("Animation with null timeline is not supported");this._timeline=i,this._sequenceNumber=t.sequenceNumber++,this._holdTime=0,this._paused=!1,this._isGroup=!1,this._animation=null,this._childAnimations=[],this._callback=null,this._oldPlayState="idle",this._rebuildUnderlyingAnimation(),this._animation.cancel(),this._updatePromises()},e.Animation.prototype={_updatePromises:function(){var t=this._oldPlayState,e=this.playState;return this._readyPromise&&e!==t&&("idle"==e?(this._rejectReadyPromise(),this._readyPromise=void 0):"pending"==t?this._resolveReadyPromise():"pending"==e&&(this._readyPromise=void 0)),this._finishedPromise&&e!==t&&("idle"==e?(this._rejectFinishedPromise(),this._finishedPromise=void 0):"finished"==e?this._resolveFinishedPromise():"finished"==t&&(this._finishedPromise=void 0)),this._oldPlayState=this.playState,this._readyPromise||this._finishedPromise},_rebuildUnderlyingAnimation:function(){this._updatePromises();var t,i,n,r,o=!!this._animation;o&&(t=this.playbackRate,i=this._paused,n=this.startTime,r=this.currentTime,this._animation.cancel(),this._animation._wrapper=null,this._animation=null),(!this.effect||this.effect instanceof window.KeyframeEffect)&&(this._animation=e.newUnderlyingAnimationForKeyframeEffect(this.effect),e.bindAnimationForKeyframeEffect(this)),(this.effect instanceof window.SequenceEffect||this.effect instanceof window.GroupEffect)&&(this._animation=e.newUnderlyingAnimationForGroup(this.effect),e.bindAnimationForGroup(this)),this.effect&&this.effect._onsample&&e.bindAnimationForCustomEffect(this),o&&(1!=t&&(this.playbackRate=t),null!==n?this.startTime=n:null!==r?this.currentTime=r:null!==this._holdTime&&(this.currentTime=this._holdTime),i&&this.pause()),this._updatePromises()},_updateChildren:function(){if(this.effect&&"idle"!=this.playState){var t=this.effect._timing.delay;this._childAnimations.forEach(function(i){this._arrangeChildren(i,t),this.effect instanceof window.SequenceEffect&&(t+=e.groupChildDuration(i.effect))}.bind(this))}},_setExternalAnimation:function(t){if(this.effect&&this._isGroup)for(var e=0;e From a2241a0ce1f24b0151f901fb42b648e5cc37aafa Mon Sep 17 00:00:00 2001 From: Nils Kristian Brekke Date: Fri, 16 Feb 2018 22:12:45 +0100 Subject: [PATCH 352/993] Specify color temperature ranges and type (#4672) * Specify color temperature ranges and type * Add further explanation --- source/_components/switch.flux.markdown | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/source/_components/switch.flux.markdown b/source/_components/switch.flux.markdown index 7ebd649bb4..cfe74efd20 100644 --- a/source/_components/switch.flux.markdown +++ b/source/_components/switch.flux.markdown @@ -16,7 +16,9 @@ The `flux` switch platform will change the temperature of your lights similar to The component will update your lights based on the time of day. It will only affect lights that are turned on and listed in the flux configuration. -During the day (in between `start time` and `sunset time`), it will fade the lights from the `start_colortemp` to the `sunset_colortemp`. After sunset (between `sunset_time` and `stop_time`), the lights will fade from the `sunset_colortemp` to the `stop_colortemp`. If the lights are still on after the `stop_time` it will continue to change the light to the `stop_colortemp` until the light is turned off. The fade effect is created by updating the lights every periodically. +During the day (in between `start time` and `sunset time`), it will fade the lights from the `start_colortemp` to the `sunset_colortemp`. After sunset (between `sunset_time` and `stop_time`), the lights will fade from the `sunset_colortemp` to the `stop_colortemp`. If the lights are still on after the `stop_time` it will continue to change the light to the `stop_colortemp` until the light is turned off. The fade effect is created by updating the lights periodically. + +The color temperature is specified kelvin, and accepted values are between 1000 and 40000 kelvin. Lower values will seem more red, while higher will look more white. If you want to update at variable intervals, you can leave the switch turned off and use automation rules that call the service `switch._update` whenever you want the lights updated, where `` equals the `name:` property in the switch configuration. From 89ea0154a3d3da5f8ce595366b2af7916d98e517 Mon Sep 17 00:00:00 2001 From: Otto Winter Date: Fri, 16 Feb 2018 22:13:17 +0100 Subject: [PATCH 353/993] Improve MQTT Light docs (#4681) * Improve MQTT Light docs * Small adjustment --- source/_components/light.mqtt.markdown | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/source/_components/light.mqtt.markdown b/source/_components/light.mqtt.markdown index 33f76eb5cc..7f55a2160d 100644 --- a/source/_components/light.mqtt.markdown +++ b/source/_components/light.mqtt.markdown @@ -120,7 +120,7 @@ rgb_command_topic: required: false type: string rgb_state_topic: - description: The MQTT topic subscribed to receive RGB state updates. + description: The MQTT topic subscribed to receive RGB state updates. The expected payload is the RGB values separated by commas, for example `255,0,127`. required: false type: string rgb_value_template: @@ -233,10 +233,10 @@ To enable a light with brightness (no RGB version) in your installation, add the light: - platform: mqtt name: "Office light" - state_topic: "office/rgb1/light/status" - command_topic: "office/rgb1/light/switch" - brightness_state_topic: 'office/rgb1/light/brightness' - brightness_command_topic: 'office/rgb1/light/brightness/set' + state_topic: "office/light/status" + command_topic: "office/light/switch" + brightness_state_topic: 'office/light/brightness' + brightness_command_topic: 'office/light/brightness/set' qos: 0 payload_on: "ON" payload_off: "OFF" @@ -255,8 +255,8 @@ light: state_topic: "office/light/status" command_topic: "office/light/switch" payload_off: "OFF" - brightness_state_topic: 'office/rgb1/light/brightness' - brightness_command_topic: 'office/rgb1/light/brightness/set' + brightness_state_topic: 'office/light/brightness' + brightness_command_topic: 'office/light/brightness/set' on_command_type: 'brightness' ``` From 34d31fc368f68f4c03c6ad718f1112acf4d11e12 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Fri, 16 Feb 2018 23:20:12 -0800 Subject: [PATCH 354/993] Alexa skill now in 4 regions --- source/_components/cloud.alexa.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/cloud.alexa.markdown b/source/_components/cloud.alexa.markdown index 5f30f112a1..b4604434e1 100644 --- a/source/_components/cloud.alexa.markdown +++ b/source/_components/cloud.alexa.markdown @@ -21,7 +21,7 @@ To use this integration, you need to have: - An Alexa enabled device like the Amazon Echo - Activated the [Home Assistant Smart Home skill for Alexa][alexa skill] -

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

    +

    Only Amazon US, UK, Canada and Germany are currently supported. Other regions are being certified.

    You can use `configuration.yaml` to configure the entities that are being shown to Alexa and how they are exposed. From 037ba1619c26658a8c04a0a57ff5d35647f2e65b Mon Sep 17 00:00:00 2001 From: Li-Wen Yip Date: Sat, 17 Feb 2018 18:49:04 +1100 Subject: [PATCH 355/993] Added hyphen Added hyphen so that this example config will still work if there are already other scenes defined in configuration.yaml --- source/_components/scene.lifx_cloud.markdown | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/_components/scene.lifx_cloud.markdown b/source/_components/scene.lifx_cloud.markdown index cddb7cafd2..7b6ac7a279 100644 --- a/source/_components/scene.lifx_cloud.markdown +++ b/source/_components/scene.lifx_cloud.markdown @@ -17,8 +17,8 @@ The `lifx_cloud` scene platform allows you to activate the scenes that LIFX smar ```yaml # Example configuration.yaml entry scene: - platform: lifx_cloud - token: YOUR_LIFX_TOKEN + - platform: lifx_cloud + token: YOUR_LIFX_TOKEN ``` Configuration variables: From c75af2b6151e294ed35edaa466f51e54ef0f0ee8 Mon Sep 17 00:00:00 2001 From: DubhAd Date: Sat, 17 Feb 2018 10:42:27 +0000 Subject: [PATCH 356/993] Note about rename node being broken Given https://github.com/home-assistant/home-assistant/issues/12430, adding a note that Rename Node is now broken, and pointing to the blog post on how to rename nodes. --- source/_docs/z-wave/control-panel.markdown | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/source/_docs/z-wave/control-panel.markdown b/source/_docs/z-wave/control-panel.markdown index 5d89b164ce..f5a76b39f1 100644 --- a/source/_docs/z-wave/control-panel.markdown +++ b/source/_docs/z-wave/control-panel.markdown @@ -43,6 +43,10 @@ Here is where you [include and exclude](/docs/z-wave/adding/) Z-Wave devices fro * **Test Node** sends no_op test messages to the node. This could in theory bring back a dead node. +

    +Since 0.63 and the new entity registry **Rename Node** no longer renames the entities. See [this blog post](https://home-assistant.io/blog/2018/02/10/release-63/#entity-registry) for information on the registry and [this issue](https://github.com/home-assistant/home-assistant/issues/12430). +

    +

    Battery powered devices need to be awake before you can use the Z-Wave control panel to update their settings. How to wake your device is device specific, and some devices will stay awake for only a couple of seconds. Please refer to the manual of your device for more details.

    From daa2d1449d3b22d6ff0a305c94e711cddd43895e Mon Sep 17 00:00:00 2001 From: DubhAd Date: Sat, 17 Feb 2018 12:58:32 +0000 Subject: [PATCH 357/993] Update Made it clearer that while it renames the entity (whatever that means) it now no longer changes the entity_id. --- source/_docs/z-wave/control-panel.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_docs/z-wave/control-panel.markdown b/source/_docs/z-wave/control-panel.markdown index f5a76b39f1..6d6bf8b290 100644 --- a/source/_docs/z-wave/control-panel.markdown +++ b/source/_docs/z-wave/control-panel.markdown @@ -44,7 +44,7 @@ Here is where you [include and exclude](/docs/z-wave/adding/) Z-Wave devices fro * **Test Node** sends no_op test messages to the node. This could in theory bring back a dead node.

    -Since 0.63 and the new entity registry **Rename Node** no longer renames the entities. See [this blog post](https://home-assistant.io/blog/2018/02/10/release-63/#entity-registry) for information on the registry and [this issue](https://github.com/home-assistant/home-assistant/issues/12430). +Since 0.63 and the new entity registry **Rename Node** no longer changes the entity id (just the default *friendly_name* and *old_entity_id* and *new_entity_id attributes). See [this blog post](https://home-assistant.io/blog/2018/02/10/release-63/#entity-registry) for information on the registry and [this issue](https://github.com/home-assistant/home-assistant/issues/12430).

    From ee6bb9eb96762f77abd9dbb058f54511a4cebdfd Mon Sep 17 00:00:00 2001 From: Phil Frost Date: Sat, 17 Feb 2018 13:25:37 +0000 Subject: [PATCH 358/993] Link to mike-grant fork of Haaska The owner of the original Haaska does not appear to be maintaining the repository. However, mike-grant has incorporated the v3 smart home API changes in his fork. --- source/_components/alexa.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/alexa.markdown b/source/_components/alexa.markdown index e39048053c..e7bfbfa746 100644 --- a/source/_components/alexa.markdown +++ b/source/_components/alexa.markdown @@ -375,7 +375,7 @@ which accepts and returns messages conforming to the [Smart Home v3 payload](https://developer.amazon.com/docs/smarthome/smart-home-skill-api-message-reference.html). You must then create an Amazon developer account with an Alexa skill and Lambda function to integrate this endpoint. See -[Haaska](https://github.com/auchter/haaska) for an example. +[Haaska](https://github.com/mike-grant/haaska) for an example. [amazon-dev-console]: https://developer.amazon.com [flash-briefing-api]: https://developer.amazon.com/alexa-skills-kit/flash-briefing From 10ab3fb8f95d8eb291229e12b6baac57686a05e1 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Sat, 17 Feb 2018 15:30:56 -0800 Subject: [PATCH 359/993] Release 0.63.3 --- _config.yml | 6 ++-- source/_posts/2018-02-10-release-63.markdown | 34 ++++++++++++++++++++ 2 files changed, 37 insertions(+), 3 deletions(-) diff --git a/_config.yml b/_config.yml index 6ee6d3f537..42fa468642 100644 --- a/_config.yml +++ b/_config.yml @@ -140,13 +140,13 @@ social: # Home Assistant release details current_major_version: 0 current_minor_version: 63 -current_patch_version: 2 -date_released: 2018-02-14 +current_patch_version: 3 +date_released: 2018-02-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. # Major release: -patch_version_notes: "#release-0632---february-14" +patch_version_notes: "#release-0633---february-17" # Minor release (Example #release-0431---april-25): # Date we moved to Discourse for comments diff --git a/source/_posts/2018-02-10-release-63.markdown b/source/_posts/2018-02-10-release-63.markdown index b58560e3ad..185b28ad13 100644 --- a/source/_posts/2018-02-10-release-63.markdown +++ b/source/_posts/2018-02-10-release-63.markdown @@ -59,6 +59,16 @@ We're planning a lot of cool stuff around the entity registry. Stay tuned! - Introduce zone_id to identify player+zone ([@sdague] - [#12382]) ([media_player.yamaha docs]) - Downgrade limitlessled to 1.0.8 ([@amelchio] - [#12403]) ([light.limitlessled docs]) +## {% linkable_title Release 0.63.3 - February 17 %} + +- python-miio version bumped. (Closes: #12389, Closes: #12298) ([@syssi] - [#12392]) ([fan.xiaomi_miio docs]) ([light.xiaomi_miio docs]) ([remote.xiaomi_miio docs]) ([switch.xiaomi_miio docs]) ([vacuum.xiaomi_miio docs]) +- Fixed 3 small issues in isy994 component ([@OverloadUT] - [#12421]) ([isy994 docs]) +- Reduce the load on met.no servers, yr.no sensor ([@danielhiversen] - [#12435]) ([sensor.yr docs]) +- Fix for contentRating error ([@ryanm101] - [#12445]) ([media_player.plex docs]) +- Fix light template to return brightness as int ([@andrey-git] - [#12447]) ([light.template docs]) +- Optimize recorder purge ([@amelchio] - [#12448]) +- [SQL Sensor] always close session ([@dgomes] - [#12452]) ([sensor.sql docs]) + ## {% linkable_title If you need help... %} ...don't hesitate to use our very active [forums](https://community.home-assistant.io/) or join us for a little [chat](https://discord.gg/c5DvZ4e). The release notes have comments enabled but it's preferred if you use the former communication channels. Thanks. @@ -654,3 +664,27 @@ Experiencing issues introduced by this release? Please report them in our [issue [sensor.eddystone_temperature docs]: https://home-assistant.io/components/sensor.eddystone_temperature/ [sensor.mercedesme docs]: https://home-assistant.io/components/sensor.mercedesme/ [sensor.wunderground docs]: https://home-assistant.io/components/sensor.wunderground/ +[#12392]: https://github.com/home-assistant/home-assistant/pull/12392 +[#12421]: https://github.com/home-assistant/home-assistant/pull/12421 +[#12435]: https://github.com/home-assistant/home-assistant/pull/12435 +[#12445]: https://github.com/home-assistant/home-assistant/pull/12445 +[#12447]: https://github.com/home-assistant/home-assistant/pull/12447 +[#12448]: https://github.com/home-assistant/home-assistant/pull/12448 +[#12452]: https://github.com/home-assistant/home-assistant/pull/12452 +[@OverloadUT]: https://github.com/OverloadUT +[@amelchio]: https://github.com/amelchio +[@andrey-git]: https://github.com/andrey-git +[@danielhiversen]: https://github.com/danielhiversen +[@dgomes]: https://github.com/dgomes +[@ryanm101]: https://github.com/ryanm101 +[@syssi]: https://github.com/syssi +[fan.xiaomi_miio docs]: https://home-assistant.io/components/fan.xiaomi_miio/ +[isy994 docs]: https://home-assistant.io/components/isy994/ +[light.template docs]: https://home-assistant.io/components/light.template/ +[light.xiaomi_miio docs]: https://home-assistant.io/components/light.xiaomi_miio/ +[media_player.plex docs]: https://home-assistant.io/components/media_player.plex/ +[remote.xiaomi_miio docs]: https://home-assistant.io/components/remote.xiaomi_miio/ +[sensor.sql docs]: https://home-assistant.io/components/sensor.sql/ +[sensor.yr docs]: https://home-assistant.io/components/sensor.yr/ +[switch.xiaomi_miio docs]: https://home-assistant.io/components/switch.xiaomi_miio/ +[vacuum.xiaomi_miio docs]: https://home-assistant.io/components/vacuum.xiaomi_miio/ From bbd245ec732e6e1895d4a72fb9a5a646c29c415d Mon Sep 17 00:00:00 2001 From: Henrik Nicolaisen Date: Sun, 18 Feb 2018 23:34:24 +0100 Subject: [PATCH 360/993] added smappee documentation (#4354) * added smappee documentation * update version and changed options to be optional --- source/_components/sensor.smappee.markdown | 19 +++++++ source/_components/smappee.markdown | 59 +++++++++++++++++++++ source/_components/switch.smappee.markdown | 20 +++++++ source/images/supported_brands/smappee.png | Bin 0 -> 84388 bytes 4 files changed, 98 insertions(+) create mode 100644 source/_components/sensor.smappee.markdown create mode 100644 source/_components/smappee.markdown create mode 100644 source/_components/switch.smappee.markdown create mode 100644 source/images/supported_brands/smappee.png diff --git a/source/_components/sensor.smappee.markdown b/source/_components/sensor.smappee.markdown new file mode 100644 index 0000000000..f9a3dcf456 --- /dev/null +++ b/source/_components/sensor.smappee.markdown @@ -0,0 +1,19 @@ +--- +layout: page +title: "Smappee Sensor" +description: "Instructions how to integrate Smappee energy monitor into Home Assistant." +date: 2018-01-06 16:15 +sidebar: true +comments: false +sharing: true +footer: true +logo: smappee.png +ha_release: "0.62" +ha_category: Sensor +--- + +[Smappee](https://www.smappee.com/) controller for energy monitoring and Comport plug switches. + +Energy monitor measurements will be automatically added when you connect to the Smappee controller. + +For more configuration information see the [Smappee component](/components/smappee/) documentation. diff --git a/source/_components/smappee.markdown b/source/_components/smappee.markdown new file mode 100644 index 0000000000..db3bd1ac65 --- /dev/null +++ b/source/_components/smappee.markdown @@ -0,0 +1,59 @@ +--- +layout: page +title: "Smappee" +description: "Instructions how to setup Smappee within Home Assistant." +date: 2018-01-06 16:15 +sidebar: true +comments: false +sharing: true +footer: true +logo: smappee.png +ha_release: "0.62" +ha_category: Hub +--- + +[Smappee](https://www.smappee.com/) controller for energy monitoring and Comport plug switches. + +Switches and Sensors are supported - and will be automatically added when you connect to the Smappee controller. + +The smappee component gets information from [Smappee API](https://smappee.atlassian.net/wiki/display/DEVAPI/API+Methods) using the [smappy](https://github.com/EnergieID/smappy) pypy module + +

    +Info on how to get api access is described in the [smappy wiki](https://github.com/EnergieID/smappy/wiki) +

    + +# Configuration + +```yaml +# Example configuration.yaml entry +smappee: + host: 10.0.0.5 + client_id: YOUR_CLIENT_ID + client_secret: YOUR_CLIENT_SECRET + username: YOUR_MYSMAPPEE_USERNAME + password: YOUR_MYSMAPPEE_PASSWORD +``` + +```yaml +# Minimal example configuration.yaml entry +smappee: + host: 10.0.0.5 +``` + +```yaml +# Cloud only example configuration.yaml entry +smappee: + client_id: YOUR_CLIENT_ID + client_secret: YOUR_CLIENT_SECRET + username: YOUR_MYSMAPPEE_USERNAME + password: YOUR_MYSMAPPEE_PASSWORD +``` + +Configuration variables: + +- **host** (*Optional*): Your Local Smappee unit IP. +- **host_password** (*Optional*): Your Local Smappee password. +- **client_id** (*Optional*): Your Smappee API client_id. +- **client_secret** (*Optional*): Your Smappee API client_secret. +- **username** (*Optional*): Your My Smappee username. +- **password** (*Optional*): Your My Smappee password. diff --git a/source/_components/switch.smappee.markdown b/source/_components/switch.smappee.markdown new file mode 100644 index 0000000000..a28cd69319 --- /dev/null +++ b/source/_components/switch.smappee.markdown @@ -0,0 +1,20 @@ +--- +layout: page +title: "Smappee Switch" +description: "Instructions how to integrate Smappee Comfort Plug into Home Assistant." +date: 2018-01-06 16:15 +sidebar: true +comments: false +sharing: true +footer: true +logo: smappee.png +ha_release: "0.62" +ha_category: Switch +ha_iot_class: "Local Push" +--- + +[Smappee](https://www.smappee.com/) controller for energy monitoring and Comport plug switches. + +Comport Plugs will be automatically added when you connect to the Smappee controller. + +For more configuration information see the [Smappee component](/components/smappee/) documentation. diff --git a/source/images/supported_brands/smappee.png b/source/images/supported_brands/smappee.png new file mode 100644 index 0000000000000000000000000000000000000000..f69c19d34f10600c287fad337017dd57bac6c8f9 GIT binary patch literal 84388 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
  • (dgXG#>IRZxSLs% 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 Date: Mon, 19 Feb 2018 08:46:59 +0000 Subject: [PATCH 361/993] Added port clarity (#4693) * Added port clarity Added notes to make it clear that if they're not using port 443, the port has to be specified (very common problem) * Add some other minor changes --- source/_components/google_assistant.markdown | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/source/_components/google_assistant.markdown b/source/_components/google_assistant.markdown index 95ef0fff19..02d57817cd 100644 --- a/source/_components/google_assistant.markdown +++ b/source/_components/google_assistant.markdown @@ -131,8 +131,8 @@ If you're not using Linux, you can use sites such as [this one](https://www.brow ### {% linkable_title Setup %} 1. Download the [gactions CLI](https://developers.google.com/actions/tools/gactions-cli) to be used later. You can download and run this anywhere and on any machine. Just remember where you put it for later and don't forget to run `chmod +x gactions` to make it executable on Mac or Linux. -2. Create a new file named `project.json` (in the same directory you downloaded `gactions` to) and replace the `[YOUR HOME ASSISTANT URL]` below with the URL you use to access Home Assistant. - Note: This must be an HTTPS URL to work. +2. Create a new file named `project.json` (in the same directory you downloaded `gactions` to) and replace the `[YOUR HOME ASSISTANT URL:PORT]` below with the URL you use to access Home Assistant. + Note: This must be an HTTPS URL to work. Don't forget to include the port number if you're not using port 443. ```json { @@ -148,7 +148,7 @@ If you're not using Linux, you can use sites such as [this one](https://www.brow "automation": { "name": "automation", - "url": "https://[YOUR HOME ASSISTANT URL]/api/google_assistant" + "url": "https://[YOUR HOME ASSISTANT URL:PORT]/api/google_assistant" } } } @@ -190,7 +190,7 @@ The request_sync service requires that the initial sync from Google includes the The request_sync service may fail with a 404 if the project_id of the Homegraph API differs from the project_id of the Actions SDK found in the preferences of your project on [developer console](https://console.actions.google.com). Resolve this by: 1. Removing your project from the [developer console](https://console.actions.google.com). - 2. Add a new project to the [cloud console](https://console.cloud.google.com). Here you get a new project_id. + 2. Add a new project to the [cloud console](https://console.cloud.google.com). Here you get a new `project_id`. 3. Enable Homegraph API to the new project. 4. Generate a new API key. - 5. Again, create a new project in the [developer console](https://console.actions.google.com/). Described above. But at the step 'Build under the Actions SDK box' choose your newly created project. By this, they share the same project_id. + 5. Again, create a new project in the [developer console](https://console.actions.google.com/). Described above. But at the step 'Build under the Actions SDK box' choose your newly created project. By this, they share the same `project_id`. From d3279215b19564829919370db56c8e938cb7fa74 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Mon, 19 Feb 2018 16:09:06 -0800 Subject: [PATCH 362/993] Add cloud update --- source/_components/cloud.markdown | 22 +-------- source/_includes/asides/cloud_navigation.html | 14 ++++++ source/_includes/site/sidebar.html | 2 + .../_posts/2018-02-20-cloud-update.markdown | 19 ++++++++ .../alexa.markdown} | 9 +--- .../google_assistant.markdown} | 6 +-- source/cloud/index.markdown | 47 +++++++++++++++++++ source/index.html | 2 +- 8 files changed, 87 insertions(+), 34 deletions(-) create mode 100644 source/_includes/asides/cloud_navigation.html create mode 100644 source/_posts/2018-02-20-cloud-update.markdown rename source/{_components/cloud.alexa.markdown => cloud/alexa.markdown} (93%) rename source/{_components/cloud.google_assistant.markdown => cloud/google_assistant.markdown} (96%) create mode 100644 source/cloud/index.markdown diff --git a/source/_components/cloud.markdown b/source/_components/cloud.markdown index d45e9aa15f..3008a52cac 100644 --- a/source/_components/cloud.markdown +++ b/source/_components/cloud.markdown @@ -13,27 +13,7 @@ ha_category: Voice ha_iot_class: "Cloud Push" --- -

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

    - -The Home Assistant Cloud allows you to quickly integrate your local Home Assistant with various cloud services like Amazon Alexa. - -The following integrations are currently available: - - - [Amazon Alexa (Amazon Echo)](/components/cloud.alexa/) - - - -### {% linkable_title How does it work? %} - -The Home Assistant Cloud has been designed with security in mind. When you activate the Cloud component, your instance will create a secure connection to the Home Assistant Cloud. There is no need for any further configuration or to expose your instance to the internet. - -Integrations like Alexa will deliver messages to our cloud which we will forward to your local instance for processing. We just forward the response back to Alexa. This means that we do not have to store the state of your house in our cloud, we’re just the messenger! - -You can find a list of frequently asked questions (and their answers) in [this blog post](/blog/2017/12/17/introducing-home-assistant-cloud/#faq). - -### {% linkable_title Enabling the cloud %} - -The Home Assistant Cloud is enabled by default. If not, add this to your configuration: +The Home Assistant Cloud allows you to quickly integrate your local Home Assistant with various cloud services like Amazon Alexa. [Learn more.](/cloud) ```yaml # Example configuration.yaml entry to enable the cloud component diff --git a/source/_includes/asides/cloud_navigation.html b/source/_includes/asides/cloud_navigation.html new file mode 100644 index 0000000000..93a7baf70e --- /dev/null +++ b/source/_includes/asides/cloud_navigation.html @@ -0,0 +1,14 @@ +
    +

    About Home Assistant

    +
      +
    • + The Home Assistant Cloud is a cloud-based service provided to supporters of the Home Assistant project. +
    • +
    • + {% active_link /cloud/ Introduction %} +
    • +
    • + {% active_link /cloud/ Amazon Alexa %} +
    • +
    + diff --git a/source/_includes/site/sidebar.html b/source/_includes/site/sidebar.html index 289411a118..9e2417d29a 100644 --- a/source/_includes/site/sidebar.html +++ b/source/_includes/site/sidebar.html @@ -14,6 +14,8 @@ {% include asides/faq_navigation.html | compact_newlines %} {% elsif url_parts[1] == 'hassio' or url_parts[1] == 'addons' %} {% include asides/hassio_navigation.html | compact_newlines %} + {% elsif url_parts[1] == 'cloud' %} + {% include asides/cloud_navigation.html | compact_newlines %} {% else %} {% include asides/about.html %} diff --git a/source/_posts/2018-02-20-cloud-update.markdown b/source/_posts/2018-02-20-cloud-update.markdown new file mode 100644 index 0000000000..80473619e5 --- /dev/null +++ b/source/_posts/2018-02-20-cloud-update.markdown @@ -0,0 +1,19 @@ +--- +layout: post +title: "Cloud Update" +description: "Alexa skill now live in Germany, UK, Canada, Australia and India." +date: 2018-02-19 01:00:00 +date_formatted: "February 19, 2018" +author: Paulus Schoutsen +author_twitter: balloob +comments: true +categories: Cloud +--- + +We're happy to announce that the Home Assistant skill is now available in Canada, UK, Germany, India and Australia! Check it out in the [Amazon Alexa Skill store][alexa skill]. + +In the meanwhile, we have also been working on the Google Assistant integration. We passed the first verification and are now working with Google to do the final verification. Stay tuned! + +In less than 2 weeks the open beta is about to expire. We're still working on setting up the company and payment system so we can start accepting payments. Until we do, Home Assistant Cloud will remain free. + +[alexa skill]: https://alexa.amazon.com/spa/index.html#skills/dp/B0772J1QKB/?ref=skill_dsk_skb_sr_2 diff --git a/source/_components/cloud.alexa.markdown b/source/cloud/alexa.markdown similarity index 93% rename from source/_components/cloud.alexa.markdown rename to source/cloud/alexa.markdown index b4604434e1..7e140825af 100644 --- a/source/_components/cloud.alexa.markdown +++ b/source/cloud/alexa.markdown @@ -7,10 +7,7 @@ sidebar: true comments: false sharing: true footer: true -logo: home-assistant.png -ha_release: "0.60" -ha_category: Cloud -ha_iot_class: "Cloud Push" +redirect_from: /components/cloud.alexa/ --- The Alexa integration allows users to control the entities via the [Home Assistant Smart Home skill for Alexa][alexa skill]. This means that you can say things like "Alexa, turn on the kitchen light" to control your local Home Assistant. @@ -21,8 +18,6 @@ To use this integration, you need to have: - An Alexa enabled device like the Amazon Echo - Activated the [Home Assistant Smart Home skill for Alexa][alexa skill] -

    Only Amazon US, UK, Canada and Germany are currently supported. Other regions are being certified.

    - You can use `configuration.yaml` to configure the entities that are being shown to Alexa and how they are exposed. ```yaml @@ -45,7 +40,7 @@ cloud: display_categories: LIGHT ``` -{% configuration %} +{% configuration cloud %} alexa: description: Configuration options for the Amazon Alexa integration. required: false diff --git a/source/_components/cloud.google_assistant.markdown b/source/cloud/google_assistant.markdown similarity index 96% rename from source/_components/cloud.google_assistant.markdown rename to source/cloud/google_assistant.markdown index 3dc3dde7cf..f76dd80d48 100644 --- a/source/_components/cloud.google_assistant.markdown +++ b/source/cloud/google_assistant.markdown @@ -7,10 +7,6 @@ sidebar: true comments: false sharing: true footer: true -logo: home-assistant.png -ha_release: 0.61 -ha_category: Cloud -ha_iot_class: "Cloud Push" published: false --- @@ -45,7 +41,7 @@ cloud: type: 'action.devices.types.LIGHT' ``` -{% configuration %} +{% configuration cloud %} google_actions: description: Configuration options for the Google Assistant integration. required: false diff --git a/source/cloud/index.markdown b/source/cloud/index.markdown new file mode 100644 index 0000000000..449294d890 --- /dev/null +++ b/source/cloud/index.markdown @@ -0,0 +1,47 @@ +--- +layout: page +title: "Home Assistant Cloud" +description: "Enable the Home Assistant Cloud integration." +date: 2017-11-17 20:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: home-assistant.png +ha_release: "0.60" +ha_category: Voice +ha_iot_class: "Cloud Push" +--- + +

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

    + +The Home Assistant Cloud allows you to quickly integrate your local Home Assistant with various cloud services like Amazon Alexa. + +The following integrations are currently available: + + - [Amazon Alexa (Amazon Echo)](/cloud/alexa/) + + + +### {% linkable_title How does it work? %} + +The Home Assistant Cloud has been designed with security in mind. When you activate the Cloud component, your instance will create a secure connection to the Home Assistant Cloud. There is no need for any further configuration or to expose your instance to the internet. + +Integrations like Alexa will deliver messages to our cloud which we will forward to your local instance for processing. We just forward the response back to Alexa. This means that we do not have to store the state of your house in our cloud, we’re just the messenger! + +You can find a list of frequently asked questions (and their answers) in [this blog post](/blog/2017/12/17/introducing-home-assistant-cloud/#faq). + +### {% linkable_title Enabling the cloud %} + +The Home Assistant Cloud is enabled by default. If not, add this to your configuration: + +```yaml +# Example configuration.yaml entry to enable the cloud component +cloud: +``` + +Once activated, go to the configuration panel in Home Assistant and create an account and log in. If you are not seeing the **Configuration** panel, make sure you have the following option enabled in your configuration.yaml` file. + +```yaml +config: +``` diff --git a/source/index.html b/source/index.html index a847b2632b..11729ac796 100644 --- a/source/index.html +++ b/source/index.html @@ -38,7 +38,7 @@ description: Open-source home automation platform running on Python 3. Track and Use Alexa to control Home Assistant.
    From e081ef352a842f4cba986add63f713d8cf8e925f Mon Sep 17 00:00:00 2001 From: Marc Forth Date: Tue, 20 Feb 2018 11:39:09 +0000 Subject: [PATCH 363/993] Update input_datetime.markdown Fixes #4259 --- source/_components/input_datetime.markdown | 43 ++++++++++++++++++++++ 1 file changed, 43 insertions(+) diff --git a/source/_components/input_datetime.markdown b/source/_components/input_datetime.markdown index 7337114357..19f3a8b5ef 100644 --- a/source/_components/input_datetime.markdown +++ b/source/_components/input_datetime.markdown @@ -75,3 +75,46 @@ A datetime input entity's state exports several attributes that can be useful in ### {% linkable_title Restore State %} This component supports the `restore_state` function which restores the state after Home Assistant has started to the value it has been before Home Assistant stopped. To use this feature please make sure that the [`recorder`](/components/recorder/) component is enabled and your entity does not have a value set for `initial`. Additional information can be found in the [Restore state](/components/recorder/#restore-state) section of the [`recorder`](/components/recorder/) component documentation. + +### {% linkable_title Services %} + +This component provides a service to modify the state of the `input_datetime`. + +| Service | Data | Description | +| ------- | ---- | ----------- | +| `set_datetime` | `time` | This can be used to dynamically set the time. +| `set_datetime` | `date` | This can be used to dynamically set the date. + +## {% linkable_title Automation Examples %} + +The following example shows the usage of the `input_datetime` as a trigger in an automation (note that you will need a [time sensor](https://home-assistant.io/components/sensor.time_date/) elsewhere in your configuration): + + +```yaml +# Example configuration.yaml entry +# Turns on bedroom light at the time specifiedateutomadate: + trigger: + platform: template + + value_template: '{{ states.sensor.time.state == (states.input_datetime.bedroom_alarm_clock_time.attributes.timestamp | int | timestamp_custom("%H:%M", False)) }}' + action: + - service: light.turn_on + entity_id: light.bedroom +``` + +To dynamically set the `input_datetime` you can call `input_datetime.set_datetime`. The following example can be used in an automation rule: + +```yaml +# Example configuration.yaml entry +# Sets input_datetime to '05:30' when an input_boolean is turned on. +automation: + trigger: + platform: state + entity_id: input_boolean.example + to: 'on' + action: + service: input_datetime.set_datetime + entity_id: input_datetime.bedroom_alarm_clock_time + data: + time: '05:30:00' +``` From a33ed1d11f51ff96ccc74402f9035d512f0f2aff Mon Sep 17 00:00:00 2001 From: Marc Forth Date: Tue, 20 Feb 2018 11:54:40 +0000 Subject: [PATCH 364/993] Update input_datetime.markdown --- source/_components/input_datetime.markdown | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/source/_components/input_datetime.markdown b/source/_components/input_datetime.markdown index 19f3a8b5ef..1b2098bd26 100644 --- a/source/_components/input_datetime.markdown +++ b/source/_components/input_datetime.markdown @@ -89,10 +89,10 @@ This component provides a service to modify the state of the `input_datetime`. The following example shows the usage of the `input_datetime` as a trigger in an automation (note that you will need a [time sensor](https://home-assistant.io/components/sensor.time_date/) elsewhere in your configuration): - +{% raw %} ```yaml # Example configuration.yaml entry -# Turns on bedroom light at the time specifiedateutomadate: +# Turns on bedroom light at the time specified. trigger: platform: template @@ -101,6 +101,7 @@ The following example shows the usage of the `input_datetime` as a trigger in an - service: light.turn_on entity_id: light.bedroom ``` +{% endraw %} To dynamically set the `input_datetime` you can call `input_datetime.set_datetime`. The following example can be used in an automation rule: From 289e1092f15dfbd59410cbdc81d6484ff8f07744 Mon Sep 17 00:00:00 2001 From: Marc Forth Date: Tue, 20 Feb 2018 11:55:35 +0000 Subject: [PATCH 365/993] Update input_datetime.markdown --- source/_components/input_datetime.markdown | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/_components/input_datetime.markdown b/source/_components/input_datetime.markdown index 1b2098bd26..50e20b8573 100644 --- a/source/_components/input_datetime.markdown +++ b/source/_components/input_datetime.markdown @@ -65,7 +65,7 @@ input_datetime: A datetime input entity's state exports several attributes that can be useful in automations and templates. | Attribute | Description | -| --------- | ----------- | +| ... | ... | | `has_time` | `true` if this entity has a time. | `has_date` | `true` if this entity has a date. | `year`
    `month`
    `day` | The year, month and day of the date.
    (only available if `has_date: true`) @@ -81,7 +81,7 @@ This component supports the `restore_state` function which restores the state af This component provides a service to modify the state of the `input_datetime`. | Service | Data | Description | -| ------- | ---- | ----------- | +| ... | ... | ... | | `set_datetime` | `time` | This can be used to dynamically set the time. | `set_datetime` | `date` | This can be used to dynamically set the date. From 262100de4558092efb3913301aaeb84f0834b2cb Mon Sep 17 00:00:00 2001 From: Marc Forth Date: Tue, 20 Feb 2018 11:58:24 +0000 Subject: [PATCH 366/993] Update input_datetime.markdown --- source/_components/input_datetime.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/input_datetime.markdown b/source/_components/input_datetime.markdown index 50e20b8573..3600633161 100644 --- a/source/_components/input_datetime.markdown +++ b/source/_components/input_datetime.markdown @@ -87,7 +87,7 @@ This component provides a service to modify the state of the `input_datetime`. ## {% linkable_title Automation Examples %} -The following example shows the usage of the `input_datetime` as a trigger in an automation (note that you will need a [time sensor](https://home-assistant.io/components/sensor.time_date/) elsewhere in your configuration): +The following example shows the usage of the `input_datetime` as a trigger in an automation (note that you will need a [time sensor](/components/sensor.time_date/) elsewhere in your configuration): {% raw %} ```yaml From c12f2e7e67291e52c01d0668703ad12ee43cee47 Mon Sep 17 00:00:00 2001 From: Marc Forth Date: Tue, 20 Feb 2018 12:01:21 +0000 Subject: [PATCH 367/993] Update input_datetime.markdown --- source/_components/input_datetime.markdown | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/_components/input_datetime.markdown b/source/_components/input_datetime.markdown index 3600633161..ccae9f30e7 100644 --- a/source/_components/input_datetime.markdown +++ b/source/_components/input_datetime.markdown @@ -65,7 +65,7 @@ input_datetime: A datetime input entity's state exports several attributes that can be useful in automations and templates. | Attribute | Description | -| ... | ... | +| ----- | ----- | | `has_time` | `true` if this entity has a time. | `has_date` | `true` if this entity has a date. | `year`
    `month`
    `day` | The year, month and day of the date.
    (only available if `has_date: true`) @@ -81,7 +81,7 @@ This component supports the `restore_state` function which restores the state af This component provides a service to modify the state of the `input_datetime`. | Service | Data | Description | -| ... | ... | ... | +| ----- | ----- | ----- | | `set_datetime` | `time` | This can be used to dynamically set the time. | `set_datetime` | `date` | This can be used to dynamically set the date. From be3c0f0f54f4323222b79d4a1c45e5d865c42260 Mon Sep 17 00:00:00 2001 From: Marc Forth Date: Tue, 20 Feb 2018 12:08:19 +0000 Subject: [PATCH 368/993] Update input_datetime.markdown --- source/_components/input_datetime.markdown | 1 - 1 file changed, 1 deletion(-) diff --git a/source/_components/input_datetime.markdown b/source/_components/input_datetime.markdown index ccae9f30e7..8cab8edf24 100644 --- a/source/_components/input_datetime.markdown +++ b/source/_components/input_datetime.markdown @@ -95,7 +95,6 @@ The following example shows the usage of the `input_datetime` as a trigger in an # Turns on bedroom light at the time specified. trigger: platform: template - value_template: '{{ states.sensor.time.state == (states.input_datetime.bedroom_alarm_clock_time.attributes.timestamp | int | timestamp_custom("%H:%M", False)) }}' action: - service: light.turn_on From 7374aa5aef6668f636191593281a1eadbb75cdcd Mon Sep 17 00:00:00 2001 From: Marc Forth Date: Tue, 20 Feb 2018 13:03:38 +0000 Subject: [PATCH 369/993] Update input_datetime.markdown --- source/_components/input_datetime.markdown | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/_components/input_datetime.markdown b/source/_components/input_datetime.markdown index 8cab8edf24..1ed907e183 100644 --- a/source/_components/input_datetime.markdown +++ b/source/_components/input_datetime.markdown @@ -95,8 +95,8 @@ The following example shows the usage of the `input_datetime` as a trigger in an # Turns on bedroom light at the time specified. trigger: platform: template - value_template: '{{ states.sensor.time.state == (states.input_datetime.bedroom_alarm_clock_time.attributes.timestamp | int | timestamp_custom("%H:%M", False)) }}' - action: +    value_template: "{{ states('sensor.time') == (states.input_datetime.bedroom_alarm_clock_time.attributes.timestamp | int | timestamp_custom("%H:%M", False)) }}" +  action: - service: light.turn_on entity_id: light.bedroom ``` From 0ad4f914a472cebe25a4dd70d57bad545e4a4630 Mon Sep 17 00:00:00 2001 From: Marc Forth Date: Tue, 20 Feb 2018 13:10:05 +0000 Subject: [PATCH 370/993] Update input_datetime.markdown --- source/_components/input_datetime.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/input_datetime.markdown b/source/_components/input_datetime.markdown index 1ed907e183..cd425a5473 100644 --- a/source/_components/input_datetime.markdown +++ b/source/_components/input_datetime.markdown @@ -95,7 +95,7 @@ The following example shows the usage of the `input_datetime` as a trigger in an # Turns on bedroom light at the time specified. trigger: platform: template -    value_template: "{{ states('sensor.time') == (states.input_datetime.bedroom_alarm_clock_time.attributes.timestamp | int | timestamp_custom("%H:%M", False)) }}" +    value_template: "{{ states('sensor.time') == (states.input_datetime.bedroom_alarm_clock_time.attributes.timestamp | int | timestamp_custom('%H:%M', False)) }}"  action: - service: light.turn_on entity_id: light.bedroom From 9d171ff59683ba4fdc28b11c6c3f7074292df307 Mon Sep 17 00:00:00 2001 From: Daniel Shokouhi Date: Tue, 20 Feb 2018 08:07:08 -0800 Subject: [PATCH 371/993] Small change to recommend adding a network key to the configuration We should consider recommending a network key for all z-wave installations. As users begin to add more and more devices they may not think about adding this later on as the network grows. Many users come to Discord or elsewhere and get confused as to why their Z-Wave device is not functioning correctly and come to find out they needed a network key and to add the device securely. As more and more Z-Wave Plus devices come out there are more security enabled devices as well. All locks and sensors are pretty much security devices. --- source/_docs/z-wave/installation.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_docs/z-wave/installation.markdown b/source/_docs/z-wave/installation.markdown index 7b40c12bb4..4a25268bdd 100644 --- a/source/_docs/z-wave/installation.markdown +++ b/source/_docs/z-wave/installation.markdown @@ -53,7 +53,7 @@ usb_path: type: string default: /zwaveusbstick network_key: - description: The 16-byte network key in the form `"0x01, 0x02..."` used in order to connect securely to compatible devices. + description: The 16-byte network key in the form `"0x01, 0x02..."` used in order to connect securely to compatible devices. It is recommended that a network key is configured as security enabled devices will not function correctly if they are not added securely. required: false type: string default: None From 58bc0b814cdf1b410b392138fb97c9b5f98ba2c3 Mon Sep 17 00:00:00 2001 From: Daniel Shokouhi Date: Tue, 20 Feb 2018 08:28:17 -0800 Subject: [PATCH 372/993] Wording change --- source/_docs/z-wave/installation.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_docs/z-wave/installation.markdown b/source/_docs/z-wave/installation.markdown index 4a25268bdd..d4aba93861 100644 --- a/source/_docs/z-wave/installation.markdown +++ b/source/_docs/z-wave/installation.markdown @@ -53,7 +53,7 @@ usb_path: type: string default: /zwaveusbstick network_key: - description: The 16-byte network key in the form `"0x01, 0x02..."` used in order to connect securely to compatible devices. It is recommended that a network key is configured as security enabled devices will not function correctly if they are not added securely. + description: The 16-byte network key in the form `"0x01, 0x02..."` used in order to connect securely to compatible devices. It is recommended that a network key is configured as security enabled devices may not function correctly if they are not added securely. required: false type: string default: None From 11d93eff1791c9857a1b877d1ffa3533f8d6845c Mon Sep 17 00:00:00 2001 From: Antoni K <31101842+Antoni-K@users.noreply.github.com> Date: Wed, 21 Feb 2018 06:01:02 +0800 Subject: [PATCH 373/993] Update Docker note (#4714) Added extra information about running HASS in a Docker container to the module pass-through note. --- source/_docs/z-wave/controllers.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_docs/z-wave/controllers.markdown b/source/_docs/z-wave/controllers.markdown index 941f8d1eea..7a0952abcc 100644 --- a/source/_docs/z-wave/controllers.markdown +++ b/source/_docs/z-wave/controllers.markdown @@ -27,7 +27,7 @@ You need to have a [supported Z-Wave USB stick or module](https://github.com/Ope | ZWave.me UZB1 | ✓ | | |

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

    ## {% linkable_title Stick Alternatives %} From b7fc3a148530495bb46bc906608b142345fd6261 Mon Sep 17 00:00:00 2001 From: Andrzej Date: Tue, 20 Feb 2018 23:02:03 +0100 Subject: [PATCH 374/993] Update light.mqtt (#4708) Bad name of a parameter (double 'value') --- source/_components/light.mqtt.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/light.mqtt.markdown b/source/_components/light.mqtt.markdown index 33f76eb5cc..898356c853 100644 --- a/source/_components/light.mqtt.markdown +++ b/source/_components/light.mqtt.markdown @@ -143,7 +143,7 @@ white_value_state_topic: description: The MQTT topic subscribed to receive white value updates. required: false type: string -white_value_value_template: +white_value_template: description: "Defines a [template](/docs/configuration/templating/#processing-incoming-data) to extract the white value." required: false type: string From 62a2626253514e4393dd1535d9a6f688177c463a Mon Sep 17 00:00:00 2001 From: Anders Melchiorsen Date: Tue, 20 Feb 2018 23:03:16 +0100 Subject: [PATCH 375/993] Use assumed state for LimitlessLED (#4701) --- source/_components/light.limitlessled.markdown | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/source/_components/light.limitlessled.markdown b/source/_components/light.limitlessled.markdown index bc0849cbca..c14388bc21 100644 --- a/source/_components/light.limitlessled.markdown +++ b/source/_components/light.limitlessled.markdown @@ -79,4 +79,8 @@ Refer to the [light]({{site_root}}/components/light/) documentation for general ### {% linkable_title Initialization & Synchronization %} -When starting Home Assistant, your LimitlessLED bulbs will be set to known default values. This ensures a consistent user interface and uninterrupted turning on/off. If you control your LimitlessLED lights via the MiLight mobile application or other means while Home Assistant is running, Home Assistant can not track those changes and you may observe unexpected behavior. This is due to a LimitlessLED limitation. +When starting Home Assistant, the last recorded state will be shown. This might no longer match the actual state of the bulbs. + +If you control your LimitlessLED lights via the MiLight mobile application or other means while Home Assistant is running, Home Assistant can not track those changes and you may observe obsolete information. + +This lack of synchronization is due to a LimitlessLED limitation. From 4a404d4b0de51395f02fae0a2c71558e2bc10e04 Mon Sep 17 00:00:00 2001 From: Kane610 Date: Wed, 21 Feb 2018 00:28:14 +0100 Subject: [PATCH 376/993] Add fire/smoke detector support to deconz (#4721) --- source/_components/binary_sensor.deconz.markdown | 1 + 1 file changed, 1 insertion(+) diff --git a/source/_components/binary_sensor.deconz.markdown b/source/_components/binary_sensor.deconz.markdown index f06c89241b..ecf234d1f4 100644 --- a/source/_components/binary_sensor.deconz.markdown +++ b/source/_components/binary_sensor.deconz.markdown @@ -17,6 +17,7 @@ See the [deCONZ main component](/components/deconz/) for configuration instructi The following sensor types are supported: + * Fire/Smoke detection * Open/Close detection * Presence detection From 51533006dbead6705f3b6d9e939da0b8393d368a Mon Sep 17 00:00:00 2001 From: c727 Date: Wed, 21 Feb 2018 01:02:11 +0100 Subject: [PATCH 377/993] Add files via upload --- source/images/supported_brands/apple-homekit.png | Bin 0 -> 9327 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 source/images/supported_brands/apple-homekit.png diff --git a/source/images/supported_brands/apple-homekit.png b/source/images/supported_brands/apple-homekit.png new file mode 100644 index 0000000000000000000000000000000000000000..f429493e53a2638a8680352ab98f6c3a8e119b05 GIT binary patch literal 9327 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%0DFA65p+TUx{pRO9(2$7(fZrsq1m&0 zVaHW|2UZh;6fcIC6f?((gDb7|?SZ6$w%AF|6Z^0AJ*2;lFctC%e&$Id4_0P`3x;|0 zeXk9qZZN>iN1daRiNb*A{r;E&9Hm-)n?;G2*2&wL{))>fePcks`#?}V*CQX*7GHD_ z)!g=QQG<-@q-NunzUY!dX&V@a%;v2z)jpf8-j``jXtyV&d6=k$Qe7I{n7sqkXRrQ8V)S7z+6$*yqsK zED+md1R1LT>p}*BaJNsug9Ip+5RI2SNx;Ljftr|&_wQw;XJwM9({@Ul9>^hFTAy2z zHnfN*>nGhr*01+ipFx6HP`ZB!S-HY%}C-uWQQN=^SxHzLyM R`8&}IH6<;@Du7w={{X$wQD^`F literal 0 HcmV?d00001 From 87d999f3ef05bdd05d3658a8e828d7f24057c676 Mon Sep 17 00:00:00 2001 From: Daniel Shokouhi Date: Tue, 20 Feb 2018 16:15:35 -0800 Subject: [PATCH 378/993] Add some emphasis about Breaking Changes We should provide proper guidance to the user about the importance of release notes and paying attention to breaking changes. A common error users face while updating home assistant is not paying attention to the breaking changes. If the user has not done an update in sometime they may also forget about previous breaking changes that still stand. --- source/_docs/installation/updating.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_docs/installation/updating.markdown b/source/_docs/installation/updating.markdown index a23aa31b27..4750a81291 100644 --- a/source/_docs/installation/updating.markdown +++ b/source/_docs/installation/updating.markdown @@ -14,7 +14,7 @@ redirect_from: /getting-started/updating/ The upgrade process differs depending on the installation you have, so please review the documentation that is specific to your install [Hass.io](/hassio/), [HASSbian](/docs/hassbian/common-tasks/#update-home-assistant), [Vagrant](/docs/installation/vagrant/), or [Virtualenv](/docs/installation/virtualenv/#upgrading-home-assistant).

    -View what's new in the latest version and potential impacts on your system [here](https://github.com/home-assistant/home-assistant/releases). +View what's new in the latest version and potential impacts on your system [here](https://github.com/home-assistant/home-assistant/releases). It is in good practice to review the release notes and pay close attention to the Breaking Changes that are listed there. If you have not done an update in sometime, you should also look at previous release notes as they can also have Breaking Changes that may impact your system. Breaking Changes may require configuration updates for your components, if not done before the update home assistant may not load or the component will not work. The default way to update Home Assistant to the latest release, when available, is: From 6a2c0478893fffc7abf8ae20b26fdf4d7cd2744f Mon Sep 17 00:00:00 2001 From: Daniel Shokouhi Date: Tue, 20 Feb 2018 16:20:44 -0800 Subject: [PATCH 379/993] Add capital letters for Home Assistant oops :) --- source/_docs/installation/updating.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_docs/installation/updating.markdown b/source/_docs/installation/updating.markdown index 4750a81291..d3a271544d 100644 --- a/source/_docs/installation/updating.markdown +++ b/source/_docs/installation/updating.markdown @@ -14,7 +14,7 @@ redirect_from: /getting-started/updating/ The upgrade process differs depending on the installation you have, so please review the documentation that is specific to your install [Hass.io](/hassio/), [HASSbian](/docs/hassbian/common-tasks/#update-home-assistant), [Vagrant](/docs/installation/vagrant/), or [Virtualenv](/docs/installation/virtualenv/#upgrading-home-assistant).

    -View what's new in the latest version and potential impacts on your system [here](https://github.com/home-assistant/home-assistant/releases). It is in good practice to review the release notes and pay close attention to the Breaking Changes that are listed there. If you have not done an update in sometime, you should also look at previous release notes as they can also have Breaking Changes that may impact your system. Breaking Changes may require configuration updates for your components, if not done before the update home assistant may not load or the component will not work. +View what's new in the latest version and potential impacts on your system [here](https://github.com/home-assistant/home-assistant/releases). It is in good practice to review the release notes and pay close attention to the Breaking Changes that are listed there. If you have not done an update in sometime, you should also look at previous release notes as they can also have Breaking Changes that may impact your system. Breaking Changes may require configuration updates for your components, if not done before the update Home Assistant may not load or the component will not work. The default way to update Home Assistant to the latest release, when available, is: From 479334e8692c24749a604d973f7325679b8ea6de Mon Sep 17 00:00:00 2001 From: Daniel Shokouhi Date: Tue, 20 Feb 2018 17:14:23 -0800 Subject: [PATCH 380/993] updates --- source/_docs/installation/updating.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_docs/installation/updating.markdown b/source/_docs/installation/updating.markdown index d3a271544d..2c3fd01c2e 100644 --- a/source/_docs/installation/updating.markdown +++ b/source/_docs/installation/updating.markdown @@ -14,7 +14,7 @@ redirect_from: /getting-started/updating/ The upgrade process differs depending on the installation you have, so please review the documentation that is specific to your install [Hass.io](/hassio/), [HASSbian](/docs/hassbian/common-tasks/#update-home-assistant), [Vagrant](/docs/installation/vagrant/), or [Virtualenv](/docs/installation/virtualenv/#upgrading-home-assistant).

    -View what's new in the latest version and potential impacts on your system [here](https://github.com/home-assistant/home-assistant/releases). It is in good practice to review the release notes and pay close attention to the Breaking Changes that are listed there. If you have not done an update in sometime, you should also look at previous release notes as they can also have Breaking Changes that may impact your system. Breaking Changes may require configuration updates for your components, if not done before the update Home Assistant may not load or the component will not work. +View what's new in the latest version and potential impacts on your system in [release notes](https://github.com/home-assistant/home-assistant/releases). It is in good practice to review the release notes and pay close attention to the **Breaking Changes** that are listed there. If you have not done an update in sometime, you should also look at previous release notes as they can also have **Breaking Changes** that may impact your system. **Breaking Changes** may require configuration updates for your components, if not done before the update Home Assistant may not load or the component will not work. The default way to update Home Assistant to the latest release, when available, is: From 6257827b24a49d6571ee0581c950d9d29008e47f Mon Sep 17 00:00:00 2001 From: c727 Date: Wed, 21 Feb 2018 02:42:08 +0100 Subject: [PATCH 381/993] Fix indents in lets_encrypt automation example --- .../ecosystem/certificates/lets_encrypt.markdown | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/source/_docs/ecosystem/certificates/lets_encrypt.markdown b/source/_docs/ecosystem/certificates/lets_encrypt.markdown index ee9cb80892..8194c2effb 100644 --- a/source/_docs/ecosystem/certificates/lets_encrypt.markdown +++ b/source/_docs/ecosystem/certificates/lets_encrypt.markdown @@ -538,13 +538,13 @@ In your `configuration.yaml` add the following automation, adding your preferred automation: - alias: 'SSL expiry notification' trigger: - platform: numeric_state - entity_id: sensor.ssl_cert_expiry - below: 21 - action: - service: notify.[your_notification_preference] - data: - message: 'Warning - SSL certificate expires in 21 days and has not been automatically renewed' + platform: numeric_state + entity_id: sensor.ssl_cert_expiry + below: 21 + action: + service: notify.[your_notification_preference] + data: + message: 'Warning - SSL certificate expires in 21 days and has not been automatically renewed' ``` If you receive this warning notification, follow the steps for a manual update from step 8. Any error messages received at that point can be googled and resolved. If the manual update goes without a hitch there may be something wrong with your chosen method for automatic updates, and you can start troubleshooting from there. From ec300739f9bfb6cd8d569d34182eba3b67f1cfd1 Mon Sep 17 00:00:00 2001 From: Thijs de Jong Date: Wed, 21 Feb 2018 03:27:59 +0100 Subject: [PATCH 382/993] Update scene.hunterdouglas_powerview.markdown (#4687) --- source/_components/scene.hunterdouglas_powerview.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/scene.hunterdouglas_powerview.markdown b/source/_components/scene.hunterdouglas_powerview.markdown index 5598971724..2f63ba6264 100644 --- a/source/_components/scene.hunterdouglas_powerview.markdown +++ b/source/_components/scene.hunterdouglas_powerview.markdown @@ -8,7 +8,7 @@ comments: false sharing: true footer: true logo: hunter-douglas-powerview.png -ha_category: Cover +ha_category: Scene ha_release: 0.15 --- From 5ba8c556efe046759a3363e8e68f0c5bc3c42055 Mon Sep 17 00:00:00 2001 From: Michael Fester Date: Wed, 21 Feb 2018 03:38:10 +0100 Subject: [PATCH 383/993] Adapt documentation to new API (#4421) --- source/_components/snips.markdown | 87 +++++++++++++++---------------- 1 file changed, 41 insertions(+), 46 deletions(-) diff --git a/source/_components/snips.markdown b/source/_components/snips.markdown index 1e8dae2e05..6f876effdd 100644 --- a/source/_components/snips.markdown +++ b/source/_components/snips.markdown @@ -27,55 +27,63 @@ Snips takes voice or text as input and produces *intents* as output, which are e ### {% linkable_title Installation %} -The Snips Voice Platform is installed as a Docker image on Raspberry Pi with the following command: - -```bash -(pi) $ curl https://install.snips.ai -sSf | sh -``` - -Snips can also be installed on a Debian/Ubuntu machine as well: +The Snips platform can be installed via the Snips APT/Debian repository. If you prefer to install the platform using the Docker distribution, check out our [Docker Installation Guide](https://github.com/snipsco/snips-platform-documentation/wiki/6.--Miscellaneous#using-docker). ```bash $ sudo apt-get update $ sudo apt-get install -y dirmngr -$ sudo bash -c 'echo "deb https://debian.snips.ai/$(lsb_release -cs) stable main" > /etc/apt/sources.list.d/snips.list' -$ sudo apt-key adv --keyserver pgp.mit.edu --recv-keys F727C778CCB0A455 - +$ sudo bash -c 'echo "deb https://raspbian.snips.ai/$(lsb_release -cs) stable main" > /etc/apt/sources.list.d/snips.list' +$ sudo apt-key adv --keyserver pgp.mit.edu --recv-keys D4F50CDCA10A2849 $ sudo apt-get update $ sudo apt-get install -y snips-platform-voice ``` +Note: if the keyserver pgp.mit.edu is down try to use another one in the 4th line , like pgp.surfnet.nl: + +```bash +sudo apt-key adv --keyserver pgp.surfnet.nl --recv-keys D4F50CDCA10A2849 +``` + ### {% linkable_title Creating an assistant %}
    -Snips assistants are created via the [Snips Console](https://console.snips.ai). Once trained, the assistant should be downloaded and copied to the Raspberry Pi: +Head over to the [Snips Console](https://console.snips.ai) to create your assistant. Launch the training and download by clicking on the "Download Assistant" button. + +The next step is to get the assistant to work on your device. Unzip and copy the assistant folder that you downloaded from the web console to the path. Assuming your downloaded assistant folder is on your desktop, just run: ```bash -$ scp assistantproj_XXX.zip pi@pi_hostname:/home/pi/assistant.zip +$ scp -r ~/Desktop/assistant pi@:/home/pi/. ``` -and installed locally via the `snips-install-assistant` helper script: +Now ssh into your Raspberry Pi: ```bash -(pi) $ sudo snips-install-assistant assistant.zip +$ ssh pi@ +``` + +By default, this command is `ssh pi@raspberrypi.local`, if you are using the default Raspberry Pi hostname. + +Then, move the assistant to the right folder: + +```bash +(pi) $ sudo mv /home/pi/assistant /usr/share/snips/assistant +``` + +Note: if you already have an assistant installed and wish to replace it, start by removing the previous one, and then move the new one in its place: + +```bash +(pi) $ sudo rm -r /usr/share/snips/assistant +(pi) $ sudo mv /home/pi/assistant /usr/share/snips/assistant ``` ### {% linkable_title Running Snips %} Make sure that a microphone is plugged to the Raspberry Pi. If you are having trouble setting up audio, we have written a guide on [Raspberry Pi Audio Configuration](https://github.com/snipsco/snips-platform-documentation/wiki/1.-Setup-the-Snips-Voice-Platform-on-your-Raspberry-Pi#configuring-the-audio). -Start the Snips Voice Platform using the `snips` command: - -Raspberry Pi: - -```bash -(pi) $ snips -``` - -Debian/Ubuntu: +Start the Snips Voice Platform by starting the `snips-*` services: ```bash $ sudo systemctl start "snips-*" @@ -89,32 +97,17 @@ followed by a command, e.g. > Set the lights to green in the living room -We should see the transcribed phrase in the logs, as well as a properly parsed intent. The intent is published on MQTT, on the `hermes/intent/` topic. The Snips Home Assistant component subscribes to this topic, and handles the intent according to the rules defined in `configuration.yaml`, as explained below. +As the Snips Platform parses this query into an intent, it will be published on MQTT, on the `hermes/intent/` topic. The Snips Home Assistant component subscribes to this topic, and handles the intent according to the rules defined in `configuration.yaml`, as explained below. #### {% linkable_title Optional: specifying an external MQTT broker %} -By default, Snips runs its own MQTT broker. But we can also tell Snips to use an external broker by specifying this when launching Snips. In this case, instead of running the `snips` command above (which assumes we are using the internal MQTT broker), we use the full launch command with explicitly specified parameters (replace `MQTT_BROKER_IP` and `MQTT_BROKER_PORT` with appropriate values): - -Raspberry Pi: - -```sh -$ docker run -t --rm --name snips --log-driver none \ - -v /home/pi/.asoundrc:/root/.asoundrc \ - -v /opt/snips/config:/opt/snips/config \ - --privileged -v /dev/snd:/dev/snd snipsdocker/platform \ - --mqtt MQTT_BROKER_IP:MQTT_BROKER_PORT -``` -Debian/Ubuntu: - -Edit the `/etc/snips.toml` file. See snips documentation for more information on configuring this - -For more details on launch options, check the documentation on [Snips Platform Commands](https://github.com/snipsco/snips-platform-documentation/wiki/6.--Learn-more:-Platform-Commands#using-a-custom-mqtt-bus). +By default, Snips runs its own MQTT broker. But we can also tell Snips to use an external broker by specifying this when launching Snips. In this case, we need to specify this in the `/etc/snips.toml` configuration file. For more information on configuring this, see the [Using an external MQTT broker](https://github.com/snipsco/snips-platform-documentation/wiki/6.--Miscellaneous#using-external-mqtt-broker) article. ## {% linkable_title Home Assistant configuration %} ### {% linkable_title Specifying the MQTT broker %} -Messages between Snips and Home Assistant are passed via MQTT. We must tell Home Assistant which [MQTT broker](/docs/mqtt/) to use by adding the following entry to the `configuration.yaml` file: +Messages between Snips and Home Assistant are passed via MQTT. We can either point Snips to the MQTT broker used by Home Assistant, as explained above, or tell Home Assistant which [MQTT broker](/docs/mqtt/) to use by adding the following entry to the `configuration.yaml` file: ```yaml mqtt: @@ -122,7 +115,7 @@ mqtt: port: MQTT_BROKER_PORT ``` -As explained above, Snips by default runs an MQTT broker on port 9898. So if we wish to use this broker, the entry will look as follows: +By default, Snips runs an MQTT broker on port 9898. So if we wish to use this broker, and if Snips and Home Assistant run on the same device, the entry will look as follows: ```yaml mqtt: @@ -130,11 +123,11 @@ mqtt: port: 9898 ``` -Alternatively, MQTT can be configured to bridge messages between servers if using a custom MQTT broker such as `mosquitto`. +Alternatively, MQTT can be configured to bridge messages between servers if using a custom MQTT broker such as [mosquitto](https://mosquitto.org/). ### {% linkable_title Triggering actions %} -In Home Assistant, we trigger actions based on intents produced by Snips using the [`intent_script`](/components/intent_script) component. For instance, the following block handles `ActivateLightColors` intents (included in the Snips IoT intent bundle) to change light colors: +In Home Assistant, we trigger actions based on intents produced by Snips using the [`intent_script`](/components/intent_script) component. For instance, the following block handles a `ActivateLightColor` intent to change light colors: {% raw %} ```yaml @@ -150,9 +143,11 @@ intent_script: ``` {% endraw %} -The variables that can be used in the template are of the form 'slotName = value'. +In the `data_template` block, we have access to special variables, corresponding to the slot names for the intent. In the present case, the `ActivateLightColor` has two slots, `objectLocation` and `objectColor`. -Snips intents that utilize builtin slot types will contain extended information along with the value and can be exposed using this format: +### {% linkable_title Special slots %} + +In the above example, the slots are plain strings. However, when more complex types are used, such as dates or time ranges, they will be transformed to rich Python objects, for example: {% raw %} ```yaml From 88746f2a6b2d2f3a4991613645897298f3e84985 Mon Sep 17 00:00:00 2001 From: pat <124277+ptc@users.noreply.github.com> Date: Wed, 21 Feb 2018 03:55:27 +0100 Subject: [PATCH 384/993] Update homematic.markdown (#4697) * Update homematic.markdown in order to get it running and hass.io to be able to add new homematic sensors, I had to change the configuration in this particular way. * Update homematic.markdown double checked. only changed interface name is needed --- source/_addons/homematic.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_addons/homematic.markdown b/source/_addons/homematic.markdown index 8cf3c3b9b3..6a92bbff81 100644 --- a/source/_addons/homematic.markdown +++ b/source/_addons/homematic.markdown @@ -57,7 +57,7 @@ Use the following configuration in Home Assistant to use it: ```yaml homematic: interfaces: - BidCoS-RF: + rf: host: core-homematic port: 2001 ``` From 0ab51b775e61edfe540de738aab1c17d929e6b9f Mon Sep 17 00:00:00 2001 From: Lars Kerick Date: Wed, 21 Feb 2018 04:19:20 +0100 Subject: [PATCH 385/993] Update lets_encrypt.markdown (#4719) --- source/_docs/ecosystem/certificates/lets_encrypt.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_docs/ecosystem/certificates/lets_encrypt.markdown b/source/_docs/ecosystem/certificates/lets_encrypt.markdown index ee9cb80892..654775a8ed 100644 --- a/source/_docs/ecosystem/certificates/lets_encrypt.markdown +++ b/source/_docs/ecosystem/certificates/lets_encrypt.markdown @@ -113,7 +113,7 @@ static routers=192.168.0.1 <---- Your router's IP address static domain_name_servers=192.168.0.1 <---- Your router's IP address ``` -It is important to note that the first three bits of your static IP address and your router's IP address should be the same, eg: +It is important to note that the first three bytes of your static IP address and your router's IP address should be the same, eg: ```text Router: 192.168.0.1 From 5f91c5a3b8a41953742ca5412a727186491ffef5 Mon Sep 17 00:00:00 2001 From: cdce8p <30130371+cdce8p@users.noreply.github.com> Date: Wed, 21 Feb 2018 04:32:50 +0100 Subject: [PATCH 386/993] Changed parameter name (#4641) * Added device_config_domain and device_config_glob --- source/_docs/z-wave/installation.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_docs/z-wave/installation.markdown b/source/_docs/z-wave/installation.markdown index d4aba93861..0319554707 100644 --- a/source/_docs/z-wave/installation.markdown +++ b/source/_docs/z-wave/installation.markdown @@ -82,7 +82,7 @@ new_entity_ids: required: false type: boolean default: True -device_config: +device_config / device_config_domain / device_config_glob: description: This attribute contains node-specific override values. (For releases prior to 0.39 this variable is called **customize**) See [Customizing devices and services](/docs/configuration/customizing-devices/) for the format. required: false type: string, list From 12221b5bbf6f1aef5738d30cffaa14df55ac156f Mon Sep 17 00:00:00 2001 From: cdce8p <30130371+cdce8p@users.noreply.github.com> Date: Wed, 21 Feb 2018 04:33:18 +0100 Subject: [PATCH 387/993] Added doc for homekit (#4720) * Added doc for homekit * Fixed typos * Fixed typos 2 * Removed iot_class * Add logo, some cleanup * Update homekit.markdown * Changed types to components --- source/_components/homekit.markdown | 63 +++++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 source/_components/homekit.markdown diff --git a/source/_components/homekit.markdown b/source/_components/homekit.markdown new file mode 100644 index 0000000000..98d75d971c --- /dev/null +++ b/source/_components/homekit.markdown @@ -0,0 +1,63 @@ +--- +layout: page +title: "HomeKit" +description: "Instructions how to setup the HomeKit component in Home Assistant." +date: 2018-02-20 17:30 +sidebar: true +comments: false +sharing: true +footer: true +ha_category: Voice +ha_release: 0.64 +logo: apple-homekit.png +--- + +The `HomeKit` component allows you to forward entities from Home Assistant to Apple `HomeKit`, so they could be controlled from Apple `Home` app and `Siri`. + +{% configuration %} + homekit: + description: HomeKit configuration. + required: true + type: map + keys: + pincode: + description: Pin code required during setup of HomeKit Home Assistant accessory. The format needs to be 'XXX-XX-XXX' where X is a number between 1 and 9. + required: false + type: string + default: '"123-45-678"' + port: + description: Port for the HomeKit extension. + required: false + type: int + default: 51826 +{% endconfiguration %} + +## {% linkable_title Setup %} + +To enable the `HomeKit` component in Home Assistant, add the following to your configuration file: + +```yaml +# Example for HomeKit setup +homekit: + pincode: '123-45-678' +``` + +

    It is not recommended to choose '123-45-678' as your pin code!

    + +After Home Assistant has started, all supported entities (see the [list](#supported-components) below which components are already integrated) will be exposed to `HomeKit`. To add them: +1. Open the `Home` App. +2. Choose `Add Accessory` and then `Don't Have a Code or Can't Scan?`. +3. The `Home Assistant` Bridge should be listed there. Select it and follow the instructions to complete setup. + +After the setup is completed you should be able to control your Home Assistant components through `Home` and `Siri`. + +## {% linkable_title Supported Components %} + +The following components are currently supported: + +| Component | Type Name | Description | +| --------- | --------- | ----------- | +| cover | Window | All covers that support `set_cover_position`. | +| sensor | TemperatureSensor | All sensors that have `Celsius` as their `unit_of_measurement`. | + +

    Currently only devices that are setup when Home Assistant is starting can be exposed to `HomeKit`. This means that especially `Z-Wave` components are currently not supported, since they will be setup afterwards. We are working on a solution for this problem.

    From 6f027086d0b10562bf23568a1cfee1c06c92688b Mon Sep 17 00:00:00 2001 From: Alan Tse Date: Tue, 20 Feb 2018 20:30:50 -0800 Subject: [PATCH 388/993] Clarifying hdmi_cec instructions to include _cec.so (#4595) * Clarifying instructions to include _cec.so * Removing deprecated AIO and manual install --- source/_components/hdmi_cec.markdown | 24 ++++++++---------------- 1 file changed, 8 insertions(+), 16 deletions(-) diff --git a/source/_components/hdmi_cec.markdown b/source/_components/hdmi_cec.markdown index 758f8d468e..694c1e3357 100644 --- a/source/_components/hdmi_cec.markdown +++ b/source/_components/hdmi_cec.markdown @@ -31,32 +31,24 @@ If you are using [Hass.io](/hassio/) then just move forward to the configuration #### {% linkable_title Symlinking into virtual environment %} -Create a symlink to the `cec` installation. Keep in mind different installation methods will result in different locations of cec. +Create a symlink to the `cec` installation including the _cec.so file. Keep in mind different installation methods will result in different locations of cec. ```bash -$ ln -s /path/to/your/installation/of/cec /path/to/your/venv/lib/python3.4/site-packages +$ ln -s /path/to/your/installation/of/cec /path/to/your/venv/lib/python*/site-packages +$ ln -s /path/to/your/installation/of/_cec.so /path/to/your/venv/lib/python*/site-packages + ``` + ##### {% linkable_title Symlinking examples: %} For the default virtual environment of a [HASSbian Image for Raspberry Pi](/getting-started/installation-raspberry-pi-image/) the command would be as follows. ```bash -$ ln -s /usr/local/lib/python3.4/dist-packages/cec /srv/homeassistant/lib/python3.4/site-packages +$ ln -s /usr/local/lib/python*/dist-packages/cec /srv/homeassistant/lib/python*/site-packages +$ ln -s /usr/local/lib/python*/dist-packages/_cec.so /srv/homeassistant/lib/python*/site-packages + ``` -For the default virtual environment of a [Raspberry Pi All-In-One installation](/getting-started/installation-raspberry-pi-all-in-one/) the command would be as follows. - -```bash -$ ln -s /usr/local/lib/python3.4/site-packages/cec /srv/homeassistant/homeassistant_venv/lib/python3.4/site-packages -``` - -For the default virtual environment of a [Manual installation](/getting-started/installation-raspberry-pi/) the command would be as follows. - -```bash -$ ln -s /usr/local/lib/python3.4/site-packages/cec /srv/hass/hass_venv/lib/python3.4/site-packages -``` - -

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

    From 4880ebda59a66471b50c56e4dca7cc4d2460be11 Mon Sep 17 00:00:00 2001 From: c727 Date: Wed, 21 Feb 2018 05:58:50 +0100 Subject: [PATCH 389/993] Update updating.markdown --- source/_docs/installation/updating.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_docs/installation/updating.markdown b/source/_docs/installation/updating.markdown index 2c3fd01c2e..dafb485e00 100644 --- a/source/_docs/installation/updating.markdown +++ b/source/_docs/installation/updating.markdown @@ -14,7 +14,7 @@ redirect_from: /getting-started/updating/ The upgrade process differs depending on the installation you have, so please review the documentation that is specific to your install [Hass.io](/hassio/), [HASSbian](/docs/hassbian/common-tasks/#update-home-assistant), [Vagrant](/docs/installation/vagrant/), or [Virtualenv](/docs/installation/virtualenv/#upgrading-home-assistant).

    -View what's new in the latest version and potential impacts on your system in [release notes](https://github.com/home-assistant/home-assistant/releases). It is in good practice to review the release notes and pay close attention to the **Breaking Changes** that are listed there. If you have not done an update in sometime, you should also look at previous release notes as they can also have **Breaking Changes** that may impact your system. **Breaking Changes** may require configuration updates for your components, if not done before the update Home Assistant may not load or the component will not work. +Check what's new in the latest version and potentially impacts your system in [Home Assistant release notes](https://github.com/home-assistant/home-assistant/releases). It is good practice to review these release notes and pay close attention to the **Breaking Changes** that are listed there. If you havn't done an update for a while, you should also check previous release notes as they can also contain relevant **Breaking Changes**. **Breaking Changes** may require configuration updates for your components. If you missed this and Home Assistant refuses to start, check `/home-assistant.log` for details about broken components. The default way to update Home Assistant to the latest release, when available, is: From 7356c83162040beefae09c51ad55c8e16b9bdaae Mon Sep 17 00:00:00 2001 From: DubhAd Date: Wed, 21 Feb 2018 07:58:26 +0000 Subject: [PATCH 390/993] Pushed towards SSL, and clarity wording (#4716) Some clarity edits, plus a push towards SSL --- source/_components/device_tracker.gpslogger.markdown | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/source/_components/device_tracker.gpslogger.markdown b/source/_components/device_tracker.gpslogger.markdown index 34465aec4f..1f1437dca2 100644 --- a/source/_components/device_tracker.gpslogger.markdown +++ b/source/_components/device_tracker.gpslogger.markdown @@ -56,7 +56,7 @@ Right after enabling, the app will take you to the **Log to custom URL** setting The relevant endpoint is: `/api/gpslogger` ```text -http://[IP address Home Assistant]:[Port]/api/gpslogger? +https://[IP address Home Assistant]:[Port]/api/gpslogger? latitude=%LAT&longitude=%LON&device=%SER&accuracy=%ACC &battery=%BATT&speed=%SPD&direction=%DIR &altitude=%ALT&provider=%PROV&activity=%ACT @@ -65,8 +65,8 @@ http://[IP address Home Assistant]:[Port]/api/gpslogger? Add the above URL after you modified it with your settings into the **URL** field. Remove the line breaks as they are only there to make the URL readable here. - It's HIGHLY recommended to use SSL/TLS. -- Use the domain that Home Assistant is available on the internet or the public IP address. Can be a local IP address if you are using a VPN setup. -- Only remove `[Port]` if your Home Assistant instance is using port 80. Otherwise set it to 8123. +- Use the domain that Home Assistant is available on the internet or the public IP address. This can be a local IP address if you are using an always on VPN from your mobile device to your home network. +- Only remove `[Port]` if your Home Assistant instance is using port 443. Otherwise set it to the port you're using. - For Home Assistant only the above URL, as written, will work - do not add or remove any parameters. - Make sure to include your [API password](/components/http/) if you have configured a password. Add `&api_password=[Your password]` to the end of the URL. - You can change the name of your device name by replacing `&device=%SER` with `&device=[Devicename]`. From d16fcb8e997678a57969aab559d510db0e4ee82d Mon Sep 17 00:00:00 2001 From: Daniel Welch Date: Wed, 21 Feb 2018 08:16:43 -0500 Subject: [PATCH 391/993] Update addon_communication.markdown (#4706) * Update addon_communication.markdown * Update addon_communication.markdown * Update addon_communication.markdown --- .../hassio/addon_communication.markdown | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/source/developers/hassio/addon_communication.markdown b/source/developers/hassio/addon_communication.markdown index c95be391a5..775008162a 100644 --- a/source/developers/hassio/addon_communication.markdown +++ b/source/developers/hassio/addon_communication.markdown @@ -10,23 +10,26 @@ footer: true redirect_from: /hassio/addon_config/ --- -There are different ways to communication between add-ons inside Home Assistant. +There are different ways for communication between add-ons inside Hass.io. ## {% linkable_title Network %} -We use an internal network. That allow to speak with every add-on or from Home Assistant to add-on by name or alias. Only the add-ons which runs on the host network are a bit limited. They can speak with all internal add-ons over their name but all other add-on can't address the add-on in question with its name. But using an alias work well. Thus the name/alias is used to communicate inside Hass.io. The name have the following format `{REPO}-{SLUG}`, e.g. `local-xy` or `3283fh-myaddon`. +We use an internal network that allows to communicate with every add-on, even to/from Home Assistant, by using his name or alias. Only the add-ons which run on the host network are a bit limited. These can talk with all internal add-ons by their name but all other add-on can't address these add-on by name - using an alias works for both! -Use `hassio` to speak with the internal API. +Name/alias are used for communication inside Hass.io. +The name is generated using the following format: `{REPO}_{SLUG}`, e.g. `local_xy` or `3283fh_myaddon`. In this example, `{SLUG}` is defined in an add-ons `config.json`. If an add-on is installed locally, `{REPO}` will be `local`. If the add-on is installed from a Github repository, `{REPO}` is a hashed identifier generated from the GitHub repository's URL (ex: https://github.com/xy/my_hassio_addons). See [here](https://github.com/home-assistant/hassio/blob/587047f9d648b8491dc8eef17dc6777f81938bfd/hassio/addons/utils.py#L17) to understand how this identifier is generated. Note that this identifier is required in certain service calls that use the [Hass.io add-on API](hassio-addon-api). You can view the repository identifiers for all currently installed add-ons via a GET request to the hassio API `addons` endpoint. + +Use `hassio` for communication with the internal API. ## {% linkable_title Home Assistant %} -An add-on can speak to the [Home Assistant API][hass-api] with our internal proxy. That makes it very easy to communicate with the API without knowing the password, port or any other information of the Home Assistant instance. Use this URL: `http://hassio/homeassistant/api` and internal communication is redirected to the right place. The next stept is to add `homeassistant_api: true` to `config.json` and read the environment variable `HASSIO_TOKEN` and use this as Home-Assistant password. +An add-on can talk to the [Home Assistant API][hass-api] using the internal proxy. That makes it very easy to communicate with the API without knowing the password, port or any other information of the Home Assistant instance. Use this URL: `http://hassio/homeassistant/api` and internal communication is redirected to the right place. The next stept is to add `homeassistant_api: true` to `config.json` and read the environment variable `HASSIO_TOKEN` and use this as Home-Assistant password. -We have also a proxy for [Websocket Home Assistant API][hass-websocket]. It work like the API proxy above and use `HASSIO_TOKEN` as password. Use this URL: `http://hassio/homeassistant/websocket`. +There is also a proxy for the [Home Assistant Websocket API][hass-websocket]. It works like the API proxy above and requires `HASSIO_TOKEN` as password. Use this URL: `http://hassio/homeassistant/websocket`. -It is also possible to speak direct to the Home Assistant instance which is named `homeassistant` over our internal network. But you need to know the configuration that is used by the running instance. +It is also possible to talk direct to the Home Assistant instance which is named `homeassistant` over the internal network. But you need to know the configuration that is used by the running instance. -We have severals services for Hass.io inside Home Assistant to execute tasks. To send data over STDIN to an add-on use the simply `hassio.addon_stdin` service. +We have severals services for Hass.io inside Home Assistant to run tasks. To send data over STDIN to an add-on use the `hassio.addon_stdin` service. ## {% linkable_title Hass.io API %} @@ -35,3 +38,4 @@ To enables calls to the [Hass.io API][hassio-api], add `hassio_api: true` to `co [hass-api]: https://home-assistant.io/developers/rest_api/ [hass-websocket]: https://home-assistant.io/developers/websocket_api/ [hassio-api]: https://github.com/home-assistant/hassio/blob/master/API.md +[hassio-addon-api]: https://github.com/home-assistant/hassio/blob/dev/API.md#restful-for-api-addons From a6213b6230e45daaab61a8842fc738df17b4967e Mon Sep 17 00:00:00 2001 From: Frederik Bolding Date: Wed, 21 Feb 2018 15:08:30 +0100 Subject: [PATCH 392/993] Small changes to RPi Camera documentation (#4650) * Updated RPiCamera documentation slightly * Updated RPi Camera file path default * Update camera.rpi_camera.markdown --- source/_components/camera.rpi_camera.markdown | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/_components/camera.rpi_camera.markdown b/source/_components/camera.rpi_camera.markdown index 6bfeb7696e..c649861be5 100644 --- a/source/_components/camera.rpi_camera.markdown +++ b/source/_components/camera.rpi_camera.markdown @@ -68,9 +68,9 @@ timelapse: file_path: description: Save the picture in a custom file path. required: false - default: The camera components folder. + default: A temporary file is used. type: string {% endconfiguration %} -The given **file_path** must be an existing file because the camera platform setup make a writeable check on it. +The given **file_path** must be an existing file because the camera platform setup performs a writeable check on it. Also, keep in mind that the path should be whitelisted. From eb459f50b51c381d55925b1682552d58d33b477b Mon Sep 17 00:00:00 2001 From: Mike O'Driscoll Date: Wed, 21 Feb 2018 09:29:53 -0500 Subject: [PATCH 393/993] Unifi device tracking SSID Filtering (#4622) * Unifi device tracking SSID Filtering Add documentation for configuration of unifi SSID filtering. * Update device_tracker.unifi.markdown --- source/_components/device_tracker.unifi.markdown | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/source/_components/device_tracker.unifi.markdown b/source/_components/device_tracker.unifi.markdown index a71db05655..bac8fe43be 100644 --- a/source/_components/device_tracker.unifi.markdown +++ b/source/_components/device_tracker.unifi.markdown @@ -20,8 +20,12 @@ To use this device tracker in your installation, add the following to your `conf # Example configuration.yaml entry device_tracker: - platform: unifi - username: USERNAME - password: PASSWORD + host: unifi + username: username + password: password + ssid_filter: + - 'HomeSSID' + - 'IoTSSID' ``` {% configuration %} @@ -56,8 +60,14 @@ verify_ssl: detection_time: description: How long since the last seen time before the device is marked away, specified in seconds. type: int - required: optional + required: false default: 300 +ssid_filter: + description: Filter the SSIDs that tracking will occur on. + type: list of strings + required: false + default: None + {% endconfiguration %} See the [device tracker component page](/components/device_tracker/) for instructions how to configure the people to be tracked. From 49ffad24f32208b0455fd014c604c439fd0c36db Mon Sep 17 00:00:00 2001 From: thrawnarn Date: Wed, 21 Feb 2018 15:41:48 +0100 Subject: [PATCH 394/993] New service methods for the Bluesound component (#4340) * New service methods * Spelling --- .../media_player.bluesound.markdown | 34 +++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/source/_components/media_player.bluesound.markdown b/source/_components/media_player.bluesound.markdown index f711cbe897..999d2cd929 100644 --- a/source/_components/media_player.bluesound.markdown +++ b/source/_components/media_player.bluesound.markdown @@ -46,3 +46,37 @@ media_player: port: 11000 - host: 192.168.1.131 ``` + +### {% linkable_title Service `bluesound_join` %} + +Group players together under a single master speaker. That will make a new group or join to exists group. + +| Service data attribute | Optional | Description | +| ---------------------- | -------- | ----------- | +| `master` | no | A single `entity_id` that will become/hold the master speaker. +| `entity_id` | no | String or list of a single `entity_id` that will group to master speaker. + +### {% linkable_title Service `bluesound_unjoin` %} + +Remove one or more speakers from a group of speakers. If no `entity_id` is provided, all speakers are unjoined. + +| Service data attribute | Optional | Description | +| ---------------------- | -------- | ----------- | +| `entity_id` | yes | String or list of `entity_id`s that will be separated from their master speaker. + +### {% linkable_title Service `bluesound_set_sleep_timer` %} + +Sets a timer that will turn off the speaker. For each time you call this it will increase the time by one step. The steps are (in minutes): 15, 30, 45, 60, 90, 0. +If you increase an ongoing timer of for example 13 minutes, it will increase it to 15. If the timer is set to 90, it will remove the time (hence the 0). + +| Service data attribute | Optional | Description | +| ---------------------- | -------- | ----------- | +| `entity_id` | no | String or list of `entity_id`s that will have their timers set. + +### {% linkable_title Service `bluesound_clear_sleep_timer` %} + +Clear the sleep timer on a speaker, if one is set. + +| Service data attribute | Optional | Description | +| ---------------------- | -------- | ----------- | +| `entity_id` | no | String or list of `entity_id`s that will have their timers cleared. From 53cc2ac0c90c9780628c28ccfe3dd2af616aaafa Mon Sep 17 00:00:00 2001 From: Daniel Welch Date: Wed, 21 Feb 2018 09:51:53 -0500 Subject: [PATCH 395/993] Proposed workaround for Docker for Mac error (#4669) --- source/developers/hassio/addon_publishing.markdown | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/source/developers/hassio/addon_publishing.markdown b/source/developers/hassio/addon_publishing.markdown index 4d77c53bc8..26020a6616 100644 --- a/source/developers/hassio/addon_publishing.markdown +++ b/source/developers/hassio/addon_publishing.markdown @@ -58,4 +58,8 @@ For a local repository: $ docker run --rm --privileged -v ~/.docker:/root/.docker -v /my_addon:/data homeassistant/amd64-builder --all -t /data ``` +

    +If you are developing on macOS and using Docker for Mac, you may encounter an error message similar to the following: error creating aufs mount to /var/lib/docker/aufs/mnt/-init: invalid argument. A proposed workaround is to add the following to the Advanced Daemon JSON configuration via Docker > Preferences > Daemon > Advanced: "storage-driver" : "aufs". +

    + [builder]: https://github.com/home-assistant/hassio-build/tree/master/builder From efa24e1cb1196b530481e9dafc3253da8bfc710f Mon Sep 17 00:00:00 2001 From: Robin Date: Wed, 21 Feb 2018 14:52:48 +0000 Subject: [PATCH 396/993] Adds file size sensor (#4589) * Adds file size sensor * Ammend Configuration variables Have amended [as per the docs](https://home-assistant.io/developers/documentation/create_page/#configuration), doesn't look correct in my markdown preview however. * Update sensor.filesize.markdown * :arrow_up: Bumped ha_release * Update sensor.filesize.markdown * Update sensor.filesize.markdown --- source/_components/sensor.filesize.markdown | 31 +++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 source/_components/sensor.filesize.markdown diff --git a/source/_components/sensor.filesize.markdown b/source/_components/sensor.filesize.markdown new file mode 100644 index 0000000000..91eb16037c --- /dev/null +++ b/source/_components/sensor.filesize.markdown @@ -0,0 +1,31 @@ +--- +layout: page +title: "File size sensor" +description: "Component for monitoring the size of a file." +date: 2018-02-06 14:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: file.png +ha_category: Sensor +ha_iot_class: "Local Polling" +ha_release: 0.64 +--- + +Component for displaying the size of a file. Note that paths must be added to [whitelist_external_dirs](https://home-assistant.io/docs/configuration/basic/). +Add to your config: + +```yaml +sensor: + - platform: filesize + file_paths: + - /config/home-assistant_v2.db + ``` + +{% configuration %} +file_paths: + description: The absolute path to the file. + required: true + type: list of strings +{% endconfiguration %} From 4d50a27bf511835e3c45eabd86b8f61957257995 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20N=C3=B8rager=20S=C3=B8rensen?= <6843486+simse@users.noreply.github.com> Date: Wed, 21 Feb 2018 16:00:08 +0100 Subject: [PATCH 397/993] Create media_player.xiaomi_tv.markdown (#4653) * Create media_player.xiaomi_tv.markdown * Updated documentation to comply with style guidelines. * Added default for value for name. * Added appropriate information and warnings. * Added release vesion. --- .../media_player.xiaomi_tv.markdown | 51 +++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 source/_components/media_player.xiaomi_tv.markdown diff --git a/source/_components/media_player.xiaomi_tv.markdown b/source/_components/media_player.xiaomi_tv.markdown new file mode 100644 index 0000000000..ffc2f1efc7 --- /dev/null +++ b/source/_components/media_player.xiaomi_tv.markdown @@ -0,0 +1,51 @@ +--- +layout: page +title: "Xiaomi TV" +description: "Instructions on how to integrate a Xiaomi TV into Home Assistant." +date: 2018-02-12 19:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: xiaomi.png +ha_category: Media Player +ha_release: 0.64 +ha_iot_class: "Assumed State" +--- + +The `xiaomi_tv` platform allows you to control a [Xiaomi TV](http://www.mi.com/en/mitv3s/65flat/). + +You need to make sure the TV is connected to the internet, and that your Home Assistant instance is on the same network. + +To add a TV to your installation, add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +media_player: + - platform: xiaomi_tv +``` + +

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

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

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

    From ebc20943476d8a83ca4b9b3a78df66970883d87d Mon Sep 17 00:00:00 2001 From: karlkar Date: Wed, 21 Feb 2018 16:06:39 +0100 Subject: [PATCH 398/993] Support for PTZ in Onvif cameras (#4409) * Service PTZ description * Changed attribute names --- source/_components/camera.onvif.markdown | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/source/_components/camera.onvif.markdown b/source/_components/camera.onvif.markdown index 0cfa7cf453..f4281405bc 100644 --- a/source/_components/camera.onvif.markdown +++ b/source/_components/camera.onvif.markdown @@ -33,4 +33,15 @@ Configuration variables: - **port** (*Optional*): The port for the camera. This defaults to 5000 - **extra_arguments** (*Optional*): Extra options to pass to `ffmpeg`, e.g. image quality or video filter options. More details in [FFmpeg component](/components/ffmpeg). +### {% linkable_title Service `camera.onvif_ptz` %} + +If your ONVIF camera supports PTZ, you will be able to pan, tilt or zoom your camera. + +| Service data attribute | Description | +| -----------------------| ----------- | +| `entity_id` | String or list of strings that point at `entity_id`s of cameras. Else targets all. +| `tilt` | Tilt direction. Allowed values: `UP`, `DOWN` +| `pan` | Pan direction. Allowed values: `RIGHT`, `LEFT` +| `zoom` | Zoom. Allowed values: `ZOOM_IN`, `ZOOM_OUT` + If you are running into trouble with this sensor, please refer to the [Troubleshooting section](/components/ffmpeg/#troubleshooting). From 1adb48b0a42ccdcefbd4697fd39cfaf42d92c0ce Mon Sep 17 00:00:00 2001 From: Kane610 Date: Wed, 21 Feb 2018 16:09:26 +0100 Subject: [PATCH 399/993] Update deconz.markdown (#4494) * Update deconz.markdown Added description and example of new service data attribute * Update deconz.markdown --- source/_components/deconz.markdown | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/source/_components/deconz.markdown b/source/_components/deconz.markdown index 6b65b08664..8f9c85f58e 100644 --- a/source/_components/deconz.markdown +++ b/source/_components/deconz.markdown @@ -75,10 +75,15 @@ Set attribute of device in Deconz using [Rest API](http://dresden-elektronik.git | Service data attribute | Optional | Description | |-----------|----------|-------------| | `field` | No | String representing a specific device in deCONZ. | +| `entity` | No | String representing a specific HASS entity of a device in deCONZ. | | `data` | No | Data is a JSON object with what data you want to alter. | +Field and entity are exclusive, i.e you can only use one in a request. + { "field": "/lights/1", "data": {"name": "light2"} } +{ "entity": "light.light1", "data": {"name": "light2"} } + { "field": "/config", "data": {"permitjoin": 60} } ## {% linkable_title Remote control devices%} From ce0b046bca84240a0b60145a296d0cbb81cb6eb1 Mon Sep 17 00:00:00 2001 From: Alex Barcelo Date: Wed, 21 Feb 2018 17:03:36 +0100 Subject: [PATCH 400/993] Consistent documentation for user_id / chat_id Using a more consistent usage regarding the interaction between `target`, `user_id` and `chat_id`. The `target` can be both a `user_id` or a `target_id`, leaving the `user_id` (which was the original one). But the `chat_id` parameters should be a `chat_id` identificator, for consistency. Also updated the description for `target` parameter on Telegram calls. --- source/_components/telegram_bot.markdown | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/source/_components/telegram_bot.markdown b/source/_components/telegram_bot.markdown index be2dcff5e5..0c5ef3e502 100644 --- a/source/_components/telegram_bot.markdown +++ b/source/_components/telegram_bot.markdown @@ -29,7 +29,7 @@ Send a notification. |---------------------------|----------|--------------------------------------------------| | `message` | no | Message body of the notification. | | `title` | yes | Optional title for your notification. Will be composed as '%title\n%message'. | -| `target` | yes | An array of pre-authorized chat_ids to send the notification to. Defaults to the first allowed chat_id. | +| `target` | yes | An array of pre-authorized chat_ids or user_ids to send the notification to. Defaults to the first allowed chat_id. | | `parse_mode` | yes | Parser for the message text: `html` or `markdown`. | | `disable_notification` | yes | True/false for send the message silently. iOS users and web users will not receive a notification, Android users will receive a notification with no sound. Defaults to False. | | `disable_web_page_preview`| yes | True/false for disable link previews for links in the message. | @@ -47,7 +47,7 @@ Send a photo. | `username` | yes | Username for a URL which require HTTP basic authentication. | | `password` | yes | Password for a URL which require HTTP basic authentication. | | `authentication` | yes | Define which authentication method to use. Set to `digest` to use HTTP digest authentication. Defaults to `basic`. | -| `target` | yes | An array of pre-authorized chat_ids to send the notification to. Defaults to the first allowed chat_id. | +| `target` | yes | An array of pre-authorized chat_ids or user_ids to send the notification to. Defaults to the first allowed chat_id. | | `disable_notification` | yes | True/false for send the message silently. iOS users and web users will not receive a notification, Android users will receive a notification with no sound. Defaults to False. | | `keyboard` | yes | List of rows of commands, comma-separated, to make a custom keyboard. Example: `["/command1, /command2", "/command3"]` | | `inline_keyboard` | yes | List of rows of commands, comma-separated, to make a custom inline keyboard with buttons with associated callback data. Example: `["/button1, /button2", "/button3"]` or `[[["Text btn1", "/button1"], ["Text btn2", "/button2"]], [["Text btn3", "/button3"]]]` | @@ -64,7 +64,7 @@ Send a video. | `username` | yes | Username for a URL which requires HTTP basic authentication. | | `password` | yes | Password for a URL which requires HTTP basic authentication. | | `authentication` | yes | Define which authentication method to use. Set to `digest` to use HTTP digest authentication. Defaults to `basic`. | -| `target` | yes | An array of pre-authorized chat_ids to send the notification to. Defaults to the first allowed chat_id. | +| `target` | yes | An array of pre-authorized chat_ids or user_ids to send the notification to. Defaults to the first allowed chat_id. | | `disable_notification` | yes | True/false to send the message silently. iOS users and web users will not receive a notification. Android users will receive a notification with no sound. Defaults to False. | | `keyboard` | yes | List of rows of commands, comma-separated, to make a custom keyboard. Example: `["/command1, /command2", "/command3"]` | | `inline_keyboard` | yes | List of rows of commands, comma-separated, to make a custom inline keyboard with buttons with associated callback data. Example: `["/button1, /button2", "/button3"]` or `[[["Text btn1", "/button1"], ["Text btn2", "/button2"]], [["Text btn3", "/button3"]]]` | @@ -80,7 +80,7 @@ Send a document. | `username` | yes | Username for a URL which require HTTP basic authentication. | | `password` | yes | Password for a URL which require HTTP basic authentication. | | `authentication` | yes | Define which authentication method to use. Set to `digest` to use HTTP digest authentication. Defaults to `basic`. | -| `target` | yes | An array of pre-authorized chat_ids to send the notification to. Defaults to the first allowed chat_id. | +| `target` | yes | An array of pre-authorized chat_ids or user_ids to send the notification to. Defaults to the first allowed chat_id. | | `disable_notification` | yes | True/false for send the message silently. iOS users and web users will not receive a notification, Android users will receive a notification with no sound. Defaults to False. | | `keyboard` | yes | List of rows of commands, comma-separated, to make a custom keyboard. Example: `["/command1, /command2", "/command3"]` | | `inline_keyboard` | yes | List of rows of commands, comma-separated, to make a custom inline keyboard with buttons with associated callback data. Example: `["/button1, /button2", "/button3"]` or `[[["Text btn1", "/button1"], ["Text btn2", "/button2"]], [["Text btn3", "/button3"]]]` | @@ -92,7 +92,7 @@ Send a location. |---------------------------|----------|--------------------------------------------------| | `latitude` | no | The latitude to send. | | `longitude` | no | The longitude to send. | -| `target` | yes | An array of pre-authorized chat_ids to send the notification to. Defaults to the first allowed chat_id. | +| `target` | yes | An array of pre-authorized chat_ids or user_ids to send the notification to. Defaults to the first allowed chat_id. | | `disable_notification` | yes | True/false for send the message silently. iOS users and web users will not receive a notification, Android users will receive a notification with no sound. Defaults to False. | | `keyboard` | yes | List of rows of commands, comma-separated, to make a custom keyboard. Example: `["/command1, /command2", "/command3"]` | | `inline_keyboard` | yes | List of rows of commands, comma-separated, to make a custom inline keyboard with buttons with associated callback data. Example: `["/button1, /button2", "/button3"]` or `[[["Text btn1", "/button1"], ["Text btn2", "/button2"]], [["Text btn3", "/button3"]]]` | @@ -316,7 +316,7 @@ Message editor: - service: telegram_bot.edit_message data_template: message_id: {% raw %}'{{ trigger.event.data.message.message_id }}'{% endraw %} - chat_id: {% raw %}'{{ trigger.event.data.user_id }}'{% endraw %} + chat_id: {% raw %}'{{ trigger.event.data.chat_id }}'{% endraw %} title: '*Message edit*' inline_keyboard: - "Edit message:/edit_msg, Don't:/do_nothing" @@ -344,7 +344,7 @@ Keyboard editor: - service: telegram_bot.edit_replymarkup data_template: message_id: 'last' - chat_id: {% raw %}'{{ trigger.event.data.user_id }}'{% endraw %} + chat_id: {% raw %}'{{ trigger.event.data.chat_id }}'{% endraw %} inline_keyboard: - "Edit message:/edit_msg, Don't:/do_nothing" ``` @@ -400,7 +400,7 @@ class TelegramBotEventListener(appapi.AppDaemon): assert event_id == 'telegram_callback' data_callback = payload_event['data'] callback_id = payload_event['id'] - user_id = payload_event['user_id'] + chat_id = payload_event['chat_id'] # keyboard = ["Edit message:/edit_msg, Don't:/do_nothing", # "Remove this button:/remove button"] keyboard = [[("Edit message", "/edit_msg"), @@ -420,7 +420,7 @@ class TelegramBotEventListener(appapi.AppDaemon): title = '*Message edit*' msg = 'Callback received from %s. Message id: %s. Data: ``` %s ```' self.call_service('telegram_bot/edit_message', - chat_id=user_id, + chat_id=chat_id, message_id=msg_id, title=title, message=msg % (user, msg_id, data_callback), @@ -436,7 +436,7 @@ class TelegramBotEventListener(appapi.AppDaemon): # Edit the keyboard new_keyboard = keyboard[:1] self.call_service('telegram_bot/edit_replymarkup', - chat_id=user_id, + chat_id=chat_id, message_id='last', inline_keyboard=new_keyboard) From 0e59f4548f7367985ca67e4536bb6641af6bf9a4 Mon Sep 17 00:00:00 2001 From: Spartan-II-117 Date: Wed, 21 Feb 2018 10:09:12 -0800 Subject: [PATCH 401/993] Update emulated_hue with info about initial device (#4624) * Update emulated_hue with info about initial device * Update emulated_hue.markdown * Update emulated_hue.markdown --- source/_components/emulated_hue.markdown | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/source/_components/emulated_hue.markdown b/source/_components/emulated_hue.markdown index e679f31129..44c7c76c38 100644 --- a/source/_components/emulated_hue.markdown +++ b/source/_components/emulated_hue.markdown @@ -29,6 +29,10 @@ A physical Hue Bridge is required for Philips Hue lights to function - this virt It is recommended to assign a static IP address to the computer running Home Assistant. This is because the Amazon Echo discovers devices by IP addresses, and if the IP changes, the Echo won't be able to control it. This is easiest done from your router, see your router's manual for details.

    +

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

    + ### {% linkable_title Configuration %} To enable the emulated Hue bridge, add one of the following configs to your `configuration.yaml` file: From 7bf56b0be9881baf03ebba7c4997e6cd1ca95309 Mon Sep 17 00:00:00 2001 From: Kane610 Date: Wed, 21 Feb 2018 21:52:02 +0100 Subject: [PATCH 402/993] Add support for water leakage sensor to deCONZ (#4728) --- source/_components/binary_sensor.deconz.markdown | 1 + 1 file changed, 1 insertion(+) diff --git a/source/_components/binary_sensor.deconz.markdown b/source/_components/binary_sensor.deconz.markdown index ecf234d1f4..f049948283 100644 --- a/source/_components/binary_sensor.deconz.markdown +++ b/source/_components/binary_sensor.deconz.markdown @@ -20,6 +20,7 @@ The following sensor types are supported: * Fire/Smoke detection * Open/Close detection * Presence detection + * Water leakage detection Entity ids will be binary_sensor.device_name, where device_name is defined in deCONZ. From b5dbc788a96eab5b9f7cd68a0ca0c9756c213573 Mon Sep 17 00:00:00 2001 From: rubenverhoef Date: Thu, 22 Feb 2018 00:16:16 +0100 Subject: [PATCH 403/993] Added 1ch MiLight dimmer support (#4718) * Added 1ch MiLight dimmer support. * There are now 16 groups possible, and the dimmer is only supported by V6 --- source/_components/light.limitlessled.markdown | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/source/_components/light.limitlessled.markdown b/source/_components/light.limitlessled.markdown index c14388bc21..5373e34b87 100644 --- a/source/_components/light.limitlessled.markdown +++ b/source/_components/light.limitlessled.markdown @@ -18,7 +18,7 @@ ha_release: pre 0.7 ### {% linkable_title Setup %} -Before configuring Home Assistant, make sure you can control your bulbs or LEDs with the MiLight mobile application. Discover your bridge(s) IP address. You can do this via your router or a mobile application like Fing ([android](https://play.google.com/store/apps/details?id=com.overlook.android.fing&hl=en) or [iTunes](https://itunes.apple.com/us/app/fing-network-scanner/id430921107?mt=8)). Keep in mind that LimitlessLED bulbs are controlled via groups. You can not control an individual bulb via the bridge, unless it is in a group by itself. Note that you can assign an `rgbw`, `rgbww` and `white` group to the same group number, effectively allowing 12 groups (4 `rgbww`, 4 `rgbw` and 4 `white`) per bridge. +Before configuring Home Assistant, make sure you can control your bulbs or LEDs with the MiLight mobile application. Discover your bridge(s) IP address. You can do this via your router or a mobile application like Fing ([android](https://play.google.com/store/apps/details?id=com.overlook.android.fing&hl=en) or [iTunes](https://itunes.apple.com/us/app/fing-network-scanner/id430921107?mt=8)). Keep in mind that LimitlessLED bulbs are controlled via groups. You can not control an individual bulb via the bridge, unless it is in a group by itself. Note that you can assign an `rgbw`, `rgbww`, `white` and `dimmer` group to the same group number, effectively allowing 16 groups (4 `rgbww`, 4 `rgbw`, 4 `white` and 4 `dimmer`) per bridge. To add `limitlessled` to your installation, add the following to your `configuration.yaml` file: @@ -38,6 +38,9 @@ light: type: rgbw name: Kitchen fade: on + - number: 4 + type: dimmer + name: Livingroom - host: 192.168.1.11 groups: - number: 1 @@ -56,7 +59,7 @@ Configuration variables: - **groups** array (*Required*): The list of available groups. - **number** (*Required*): Group number (`1`-`4`). Corresponds to the group number on the remote. These numbers may overlap only if the type is different. - **name** (*Required*): Any name you'd like. Must be unique among all configured groups. - - **type** (*Optional*): Type of group. Choose either `rgbww`, `rgbw`, `white`, or `bridge-led`. `rgbw` is the default if you don't specify this entry. Use `bridge-led` to control the built-in LED of newer WiFi bridges. + - **type** (*Optional*): Type of group. Choose either `rgbww`, `rgbw`, `white`, `bridge-led` or `dimmer`. `rgbw` is the default if you don't specify this entry. Use `bridge-led` to control the built-in LED of newer WiFi bridges. - **fade** (*Optional*): Fade behavior. Defaults to `off`. If turned on, the group is faded out before being turned off. This makes for a more pleasing transition at the expense of wall switch usability, since the light will turn back on at the lowest brightness if it is power cycled. ### {% linkable_title Properties %} @@ -74,6 +77,9 @@ Refer to the [light]({{site_root}}/components/light/) documentation for general - When using a legacy WiFi bridge (before v6), you can observe on the MiLight mobile application, you can not select a specific brightness or temperature - you can only step each property up or down. There is no indication of which step you are on. This restriction, combined with the unreliable nature of LimitlessLED transmissions, means that setting white bulb properties is done on a best-effort basis. The only very reliable settings are the minimum and maximum of each property. - *Temperature*: Wifi bridge v6 supports 101 temperature steps; older versions only 10. - *Brightness*: Wifi bridge v6 supports 101 brightness steps; older versions only 10. +- **Dimmer** (Only supported on v6 bridges) + - This type is for a single color LED dimmer like the 1CH MiLight dimmer module or similar. This type is only supported by the version 6 Wifi bridges. + - *Brightness*: Wifi bridge v6 supports 101 brightness steps. - **Transitions** - If a transition time is set, the group will transition between the current settings and the target settings for the duration specified. Transitions from or to white are not possible - the color will change immediately. From 7139ee18fd7714b574a54d4a92b147d4ca0d9921 Mon Sep 17 00:00:00 2001 From: Daniel Shokouhi Date: Wed, 21 Feb 2018 19:11:07 -0800 Subject: [PATCH 404/993] typo (#4731) --- source/_docs/installation/updating.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_docs/installation/updating.markdown b/source/_docs/installation/updating.markdown index dafb485e00..012a5a5c08 100644 --- a/source/_docs/installation/updating.markdown +++ b/source/_docs/installation/updating.markdown @@ -14,7 +14,7 @@ redirect_from: /getting-started/updating/ The upgrade process differs depending on the installation you have, so please review the documentation that is specific to your install [Hass.io](/hassio/), [HASSbian](/docs/hassbian/common-tasks/#update-home-assistant), [Vagrant](/docs/installation/vagrant/), or [Virtualenv](/docs/installation/virtualenv/#upgrading-home-assistant).

    -Check what's new in the latest version and potentially impacts your system in [Home Assistant release notes](https://github.com/home-assistant/home-assistant/releases). It is good practice to review these release notes and pay close attention to the **Breaking Changes** that are listed there. If you havn't done an update for a while, you should also check previous release notes as they can also contain relevant **Breaking Changes**. **Breaking Changes** may require configuration updates for your components. If you missed this and Home Assistant refuses to start, check `/home-assistant.log` for details about broken components. +Check what's new in the latest version and potentially impacts your system in [Home Assistant release notes](https://github.com/home-assistant/home-assistant/releases). It is good practice to review these release notes and pay close attention to the **Breaking Changes** that are listed there. If you haven't done an update for a while, you should also check previous release notes as they can also contain relevant **Breaking Changes**. **Breaking Changes** may require configuration updates for your components. If you missed this and Home Assistant refuses to start, check `/home-assistant.log` for details about broken components. The default way to update Home Assistant to the latest release, when available, is: From cce17bbd79a5fd65652ed1c5230cb232a0d49a52 Mon Sep 17 00:00:00 2001 From: Mark Grimes Date: Thu, 22 Feb 2018 09:13:26 -0500 Subject: [PATCH 405/993] Adds comment about deprecated homeassistant_start event The note in the documentation for triggers says that the homeassistant_start event has been deprecated. This PR just adds that note to the events page. It is unclear to me if homeassistant_stop has also been replaced by 'stop' on the 'homeassistant' platform. If so, the note should probably be expanded on both pages to indicate that. --- source/_docs/configuration/events.markdown | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/source/_docs/configuration/events.markdown b/source/_docs/configuration/events.markdown index 6ad5aa152d..7d4be04c87 100644 --- a/source/_docs/configuration/events.markdown +++ b/source/_docs/configuration/events.markdown @@ -17,6 +17,10 @@ Home Assistant contains a few built-in events that are used to coordinate betwee ### {% linkable_title Event `homeassistant_start` %} Event `homeassistant_start` is fired when all components from the configuration have been intitialized. This is the event that will start the timer firing off `time_changed` events. +

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

    + ### {% linkable_title Event `homeassistant_stop` %} Event `homeassistant_stop` is fired when Home Assistant is shutting down. It should be used to close any open connection or release any resources. From e15388f93aa113385b80ba24aad6b91055527c44 Mon Sep 17 00:00:00 2001 From: happyleavesaoc Date: Thu, 22 Feb 2018 11:45:45 -0500 Subject: [PATCH 406/993] update usps doc (#4729) * Update usps.markdown * Update usps.markdown note Chrome preference --- source/_components/usps.markdown | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/source/_components/usps.markdown b/source/_components/usps.markdown index 6f92cc8e77..3971db4ec6 100644 --- a/source/_components/usps.markdown +++ b/source/_components/usps.markdown @@ -16,6 +16,35 @@ ha_iot_class: "Cloud Polling" The `usps` platform allows one to track deliveries and inbound mail from the [US Postal Service (USPS)](https://www.usps.com/). In addition to having a USPS account, you will need to complete the "Opt-In" process for packages by clicking "Get Started Now" on [this page](https://my.usps.com/mobileWeb/pages/intro/start.action). You must also "Opt-In" to [Informed Delivery](https://informeddelivery.usps.com/box/pages/intro/start.action) to see inbound mail. +## Prerequisites + +This component requires that a headless-capable web browser is installed on your system - either PhantomJS or Google Chrome. Preferably use Chrome if your operating system supports it, since PhantomJS is deprecated. + +

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

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

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

    + + +### Chrome + +Install Chrome 59 or greater (preferably the most recent). Install the latest [Chromedriver](https://sites.google.com/a/chromium.org/chromedriver/downloads). Ensure both executables are on your `PATH`. `google-chrome --version` and `chromedriver --version` should work and report the correct version. + +OS-specific instructions: +- [Ubuntu 16](https://gist.github.com/ziadoz/3e8ab7e944d02fe872c3454d17af31a5) (Selenium server portion *not* necessary) +- [RHEL/Centos 7](https://stackoverflow.com/a/46686621) + +If you use the Chrome option, specify `driver: chrome` in your `usps` configuration. + +## Configuration + To enable this component, add the following lines to your `configuration.yaml`: ```yaml From 4144fb0974da7680267e968fd33b9e9b32ecb694 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Thu, 22 Feb 2018 14:32:42 -0800 Subject: [PATCH 407/993] Update Alexa skills in cloud FAQ --- .../2017-12-17-introducing-home-assistant-cloud.markdown | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/_posts/2017-12-17-introducing-home-assistant-cloud.markdown b/source/_posts/2017-12-17-introducing-home-assistant-cloud.markdown index b55eabb3e3..9577ea9b16 100644 --- a/source/_posts/2017-12-17-introducing-home-assistant-cloud.markdown +++ b/source/_posts/2017-12-17-introducing-home-assistant-cloud.markdown @@ -48,7 +48,7 @@ See the [Cloud component configuration](/components/cloud/) to learn how to filt ## {% linkable_title FAQ %} -_Last updated: December 26, 2017_ +_Last updated: February 22, 2018_ #### {% linkable_title I thought the Home Assistant crew didn't like the cloud? %} @@ -85,7 +85,7 @@ We have a lot of ideas! We are not going to make any promises but here are some #### {% linkable_title What countries are supported at launch? %} -Only US is currently supported. The reason for this limitation is that we need to do extra steps and certifications for each country's Alexa skill. This is in progress but the timeline depends on Amazon. +As of February 2018, we are live in all countries that have Alexa except for Japan (which is under certification). #### {% linkable_title How is the connection made to the cloud? %} From f6b1e6aa8c519b47fb15cce55928cb8ef1118f6d Mon Sep 17 00:00:00 2001 From: Oncleben31 Date: Fri, 23 Feb 2018 00:05:08 +0100 Subject: [PATCH 408/993] `automation` and `automation old` in the same time Additional comment and example to explain we can use the both sections in the same time. --- source/_docs/automation/editor.markdown | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/source/_docs/automation/editor.markdown b/source/_docs/automation/editor.markdown index b0f16e1445..d91f7c5562 100644 --- a/source/_docs/automation/editor.markdown +++ b/source/_docs/automation/editor.markdown @@ -65,6 +65,14 @@ automation old: platform: ... ``` +You can use the `automation:` and `automation old:` sections in the same time to keep yout manual designed automations and use the editor for next ones: + +```yaml +automation: !include automations.yaml +automation old: !include_dir_merge_list automations +``` + + ## {% linkable_title Migrating your automations to `automations.yaml` %} If you want to migrate your old automations to use the editor, you'll have to copy them to `automations.yaml`. Make sure that `automations.yaml` remains a list! For each automation that you copy over you'll have to add an `id`. This can be any string as long as it's unique. From 51e4cfae9cfdb5837fb55b1834010a25126e13e7 Mon Sep 17 00:00:00 2001 From: Marc Forth Date: Fri, 23 Feb 2018 00:08:17 +0000 Subject: [PATCH 409/993] Update input_datetime.markdown (#4735) Missed the word 'automation' out of the first automation when I submitted the most recent change! Fixed now. --- source/_components/input_datetime.markdown | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/source/_components/input_datetime.markdown b/source/_components/input_datetime.markdown index cd425a5473..19898029df 100644 --- a/source/_components/input_datetime.markdown +++ b/source/_components/input_datetime.markdown @@ -93,12 +93,13 @@ The following example shows the usage of the `input_datetime` as a trigger in an ```yaml # Example configuration.yaml entry # Turns on bedroom light at the time specified. +automation: trigger: platform: template    value_template: "{{ states('sensor.time') == (states.input_datetime.bedroom_alarm_clock_time.attributes.timestamp | int | timestamp_custom('%H:%M', False)) }}"  action: - - service: light.turn_on - entity_id: light.bedroom + service: light.turn_on + entity_id: light.bedroom ``` {% endraw %} From ad24a7f8af861cd4cfccc70194ca133884293c4d Mon Sep 17 00:00:00 2001 From: Jeremy Klein Date: Thu, 22 Feb 2018 21:04:21 -0800 Subject: [PATCH 410/993] Docs for 12598 (#4736) --- source/_components/google_assistant.markdown | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/source/_components/google_assistant.markdown b/source/_components/google_assistant.markdown index 95ef0fff19..5c1bf1b0b5 100644 --- a/source/_components/google_assistant.markdown +++ b/source/_components/google_assistant.markdown @@ -44,6 +44,7 @@ google_assistant: type: light light.living_room: expose: false + room: living room ``` Configuration variables: @@ -105,6 +106,10 @@ entity_config: description: Override how Google Assistant interprets the domain of the entity. For example, set to `light` for a switch entity to have it be handled as a light. required: false type: string + room: + description: Allows for associating this device to a Room in Google Assistant. This is currently non-functional, but will be enabled in the near future. + required: false + type: string {% endconfiguration %} ### {% linkable_title Available domains %} From 5200c5661970af991c3216d264731b85bbb4a9a2 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Thu, 22 Feb 2018 23:20:00 -0800 Subject: [PATCH 411/993] Add entity registry docs --- .../configuration/entity-registry.markdown | 54 +++++++++++++++++++ source/_includes/asides/docs_navigation.html | 3 +- 2 files changed, 56 insertions(+), 1 deletion(-) create mode 100644 source/_docs/configuration/entity-registry.markdown diff --git a/source/_docs/configuration/entity-registry.markdown b/source/_docs/configuration/entity-registry.markdown new file mode 100644 index 0000000000..7d9369c1f9 --- /dev/null +++ b/source/_docs/configuration/entity-registry.markdown @@ -0,0 +1,54 @@ +--- +layout: page +title: "Entity Registry" +description: "The entity registry contains." +date: 2016-04-20 06:00 +sidebar: true +comments: false +sharing: true +footer: true +--- + +

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

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

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

    + +The entity registry is stored in `/entity_registry.yaml`. As a user, +you are unable to add entries, only update them. Here is an example file: + +``` +climate.downstairs_virtual: + platform: nest + unique_id: EPoMyWkpNyoYu3pGlmGxabcdefghijkl + name: Downstairs thermostat +light.study_ceiling: + platform: hue + unique_id: f0:fe:6b:00:14:00:00:00-00 + disabled_by: user +``` + +As a user, you can change the `entity_id` and add the `name` and `disabled_by` +value to each entry. + + - The value of `name` will override the name of the entity as given by the + integration. + + _Added in Home Assistant 0.64._ + - The key `disabled_by` can either be `hass` or `user`. This functionality + is even more experimental than the whole entity registry itself and might + cause integrations to fail and might be removed in the future. + + _Added in Home Assistant 0.64._ diff --git a/source/_includes/asides/docs_navigation.html b/source/_includes/asides/docs_navigation.html index add2fd1bbc..b956865e7a 100644 --- a/source/_includes/asides/docs_navigation.html +++ b/source/_includes/asides/docs_navigation.html @@ -3,7 +3,7 @@

    Topics

    +
  • +
  • + {% active_link /developers/internationalization/ Internationalization %} +
      +
    • {% active_link /developers/internationalization/backend_localization/ Backend Localization %}
    • +
    • {% active_link /developers/internationalization/custom_component_localization/ Custom Component Localization %}
    • +
    • {% active_link /developers/internationalization/translation/ Translation %}
  • diff --git a/source/developers/internationalization/backend_localization.markdown b/source/developers/internationalization/backend_localization.markdown new file mode 100644 index 0000000000..6d395352b4 --- /dev/null +++ b/source/developers/internationalization/backend_localization.markdown @@ -0,0 +1,19 @@ +--- +layout: page +title: "Backend Localization" +description: "Translating platforms in Home Assistant" +date: 2018-03-01 18:00 +sidebar: true +comments: false +sharing: true +footer: true +ha_release: 0.64 +--- + +## {% linkable_title Translation Strings %} +Platform translation strings are stored as JSON in the [home-assistant](https://github.com/home-assistant/home-assistant) repository. These files must be located adjacent to the component/platform they belong to. They are named `strings..json`, unless the component being translated exists in its own directory, in which case the file is simply named `strings.json` in that directory. This file will contain the different strings that will be translatable. Currently only states are supported by the frontend. + +After the pull request with the strings file is merged into the `dev` branch, the strings will be automatically uploaded to Lokalise, where contributors can submit translations. The translated strings in Lokalise will be periodically pulled in to the home-assistant repository. + +## {% linkable_title States Localization %} +The first step when localizing platform states is to ensure that the states defined in the actual platform code are defined in `snake_case`. The states should not contain capital letters or spaces. Next, the strings file needs to be created. The states should exist under the `state` key, and map the backend state keys to their English translations. [The season sensor localization](https://github.com/home-assistant/home-assistant/pull/12453/commits/bb2f328ce10c3867990e34a88da64e2f8dc7a5c4) is a good example. diff --git a/source/developers/internationalization/custom_component_localization.markdown b/source/developers/internationalization/custom_component_localization.markdown new file mode 100644 index 0000000000..b7d12664d4 --- /dev/null +++ b/source/developers/internationalization/custom_component_localization.markdown @@ -0,0 +1,20 @@ +--- +layout: page +title: "Custom Component Localization" +description: "Translating custom components in Home Assistant" +date: 2018-03-01 18:00 +sidebar: true +comments: false +sharing: true +footer: true +ha_release: 0.64 +--- + +## {% linkable_title Translation Strings %} +Unlike localized strings merged in the home-assistant repository, custom components cannot take advantage of Lokalise for user submitted translations. However, custom component authors can still include translation with their components. These will be read from the `.translations` directory, adjacent to the component source file. They are named `..json`, unless the custom component exists in its own directory, in which case the file is simply named `.json` in the `.translations` directory. + +These files follow the same formatting as [backend translation string files](/developers/internationalization/backend_localization/), but a copy will exist for each translated language. + +The language codes follow the [BCP47](https://tools.ietf.org/html/bcp47) format. The [frontend translation files](https://github.com/home-assistant/home-assistant-polymer/tree/master/translations) can also be referred to if you are unsure of the correct language code to use. + +The frontend will serve these files after Home Assistant is restarted. diff --git a/source/developers/internationalization/index.markdown b/source/developers/internationalization/index.markdown new file mode 100644 index 0000000000..109502fe45 --- /dev/null +++ b/source/developers/internationalization/index.markdown @@ -0,0 +1,19 @@ +--- +layout: page +title: "Internationalization" +description: "Home Assistant internationalization summary" +date: 2018-03-01 18:00 +sidebar: true +comments: false +sharing: true +footer: true +ha_release: 0.64 +--- + +The Home Assistant internationalization project includes preparing platforms and the frontend for localization, as well as the actual translation of localized strings. + +Some compmonents and platforms will have strings that need to be localized specifically for that platform. These strings are managed in the core [home-assistant](https://github.com/home-assistant/home-assistant) repository. The Home Assistant backend will serve strings to the clients based on the loaded components in the running instance. + +There are also localizable strings that exist only on the frontend. These strings are managed in the [home-assistant-polymer](https://github.com/home-assistant/home-assistant-polymer) repository. These strings are stored with the frontend and don’t depend on the backend configuration. + +Our strings are translated by the community using the online translation tool [Lokalise](https://lokalise.co/). diff --git a/source/developers/frontend_translation.markdown b/source/developers/internationalization/translation.markdown similarity index 97% rename from source/developers/frontend_translation.markdown rename to source/developers/internationalization/translation.markdown index c91d80e36e..334a68e6aa 100644 --- a/source/developers/frontend_translation.markdown +++ b/source/developers/internationalization/translation.markdown @@ -1,13 +1,14 @@ --- layout: page -title: "Frontend Translation" -description: "How to translate the frontend for Home Assistant." +title: "Translation" +description: "How to translate Home Assistant." date: 2017-10-27 13:00 sidebar: true comments: false sharing: true footer: true ha_release: 0.57 +redirect_from: /developers/frontend_translation/ --- ## {% linkable_title How to start %} From 957ada3afa79d68c0f4ee2aa8055ade771f6a68a Mon Sep 17 00:00:00 2001 From: Pascal Vizeli Date: Sun, 4 Mar 2018 00:30:21 +0100 Subject: [PATCH 484/993] Update installation.markdown --- source/hassio/installation.markdown | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/source/hassio/installation.markdown b/source/hassio/installation.markdown index 465a6b0348..215850b814 100644 --- a/source/hassio/installation.markdown +++ b/source/hassio/installation.markdown @@ -50,10 +50,10 @@ A detailed guide about running Hass.io as a virtual machine is available in the [Etcher]: https://etcher.io/ [resinos-network]: https://docs.resin.io/deployment/network/2.0.0/ -[pi1]: https://github.com/home-assistant/hassio-build/releases/download/1.1/resinos-hassio-1.1-raspberrypi.img.bz2 -[pi2]: https://github.com/home-assistant/hassio-build/releases/download/1.1/resinos-hassio-1.1-raspberrypi2.img.bz2 -[pi3]: https://github.com/home-assistant/hassio-build/releases/download/1.1/resinos-hassio-1.1-raspberrypi3.img.bz2 -[nuc]: https://github.com/home-assistant/hassio-build/releases/download/1.1/resinos-hassio-1.1-intel-nuc.img.bz2 +[pi1]: https://github.com/home-assistant/hassio-build/releases/download/1.2/resinos-hassio-1.2-raspberrypi.img.bz2 +[pi2]: https://github.com/home-assistant/hassio-build/releases/download/1.2/resinos-hassio-1.2-raspberrypi2.img.bz2 +[pi3]: https://github.com/home-assistant/hassio-build/releases/download/1.2/resinos-hassio-1.2-raspberrypi3.img.bz2 +[nuc]: https://github.com/home-assistant/hassio-build/releases/download/1.2/resinos-hassio-1.2-intel-nuc.img.bz2 [linux]: https://github.com/home-assistant/hassio-build/tree/master/install#install-hassio [local]: http://hassio.local:8123 [samba]: /addons/samba/ From 5582dc788cfaec751100b8ed3566e1c56c7a474d Mon Sep 17 00:00:00 2001 From: Mahasri Kalavala Date: Sun, 4 Mar 2018 20:17:13 -0500 Subject: [PATCH 485/993] fixed a typo in the command --- source/_docs/installation/raspberry-pi.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_docs/installation/raspberry-pi.markdown b/source/_docs/installation/raspberry-pi.markdown index 00a77dd3f5..bb0bc595da 100644 --- a/source/_docs/installation/raspberry-pi.markdown +++ b/source/_docs/installation/raspberry-pi.markdown @@ -97,7 +97,7 @@ To update to the latest version of Home Assistant follow these simple steps: ```bash $ sudo su -s /bin/bash homeassistant $ source /srv/homeassistant/bin/activate -$ pip3 install --upgrade home assistant +$ pip3 install --upgrade homeassistant ``` Once the last command executes restart the Home Assistant service to apply the latest updates. Please keep in mind that some updates may take longer to boot up than others. If Home Assistant fails to start make sure you check the **Breaking Changes** from the [Release Notes](https://github.com/home-assistant/home-assistant/releases). From 2cac99159005f53e472050c57b1e205a51496df3 Mon Sep 17 00:00:00 2001 From: Robbie Trencheny Date: Sun, 4 Mar 2018 18:55:16 -0800 Subject: [PATCH 486/993] Remove space that breaks pip3 command --- source/_docs/installation/raspberry-pi.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_docs/installation/raspberry-pi.markdown b/source/_docs/installation/raspberry-pi.markdown index 00a77dd3f5..bb0bc595da 100644 --- a/source/_docs/installation/raspberry-pi.markdown +++ b/source/_docs/installation/raspberry-pi.markdown @@ -97,7 +97,7 @@ To update to the latest version of Home Assistant follow these simple steps: ```bash $ sudo su -s /bin/bash homeassistant $ source /srv/homeassistant/bin/activate -$ pip3 install --upgrade home assistant +$ pip3 install --upgrade homeassistant ``` Once the last command executes restart the Home Assistant service to apply the latest updates. Please keep in mind that some updates may take longer to boot up than others. If Home Assistant fails to start make sure you check the **Breaking Changes** from the [Release Notes](https://github.com/home-assistant/home-assistant/releases). From b0a2289db5a95a59c8a1850b35f3c0d32d9b5f71 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Mon, 5 Mar 2018 00:28:44 -0800 Subject: [PATCH 487/993] Add link to skill --- source/cloud/google_assistant.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/cloud/google_assistant.markdown b/source/cloud/google_assistant.markdown index f76dd80d48..155b2356a7 100644 --- a/source/cloud/google_assistant.markdown +++ b/source/cloud/google_assistant.markdown @@ -16,7 +16,7 @@ To use this integration, you need to have: - The cloud component set up. [Learn more](/components/cloud/) - A Google Assistant enabled device like the Google Home - - Activated the Home Assistant Smart Home skill for Google Assistant + - Activated the [Home Assistant Smart Home skill for Google Assistant](https://assistant.google.com/services/a/uid/00000091fd5fb875) You can use `configuration.yaml` to configure the entities that are being shown to Google Assistant and how they are exposed. From 7dfde5e84f49c8a92305b56fb70a54ce6347f97e Mon Sep 17 00:00:00 2001 From: Mason Garrison Date: Mon, 5 Mar 2018 15:35:41 -0500 Subject: [PATCH 488/993] updated dead link (#4839) --- source/_cookbook/configuration_yaml_by_greenturtwig.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_cookbook/configuration_yaml_by_greenturtwig.markdown b/source/_cookbook/configuration_yaml_by_greenturtwig.markdown index dcb11f8454..a5bc7c5b18 100644 --- a/source/_cookbook/configuration_yaml_by_greenturtwig.markdown +++ b/source/_cookbook/configuration_yaml_by_greenturtwig.markdown @@ -8,6 +8,6 @@ comments: false sharing: true footer: true ha_category: Example configuration.yaml -ha_external_link: https://github.com/GreenTurtwig/personal-home-automation/tree/master/Home%20Assistant +ha_external_link: https://github.com/GreenTurtwig/personal-home-automation/blob/master/configuration.yaml --- From 1546a557263756945ebc4013c4b231ee6868f5dc Mon Sep 17 00:00:00 2001 From: Pascal Vizeli Date: Mon, 5 Mar 2018 22:54:44 +0100 Subject: [PATCH 489/993] Update installation.markdown --- source/hassio/installation.markdown | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/source/hassio/installation.markdown b/source/hassio/installation.markdown index 215850b814..4a2ea0e5d9 100644 --- a/source/hassio/installation.markdown +++ b/source/hassio/installation.markdown @@ -50,10 +50,10 @@ A detailed guide about running Hass.io as a virtual machine is available in the [Etcher]: https://etcher.io/ [resinos-network]: https://docs.resin.io/deployment/network/2.0.0/ -[pi1]: https://github.com/home-assistant/hassio-build/releases/download/1.2/resinos-hassio-1.2-raspberrypi.img.bz2 -[pi2]: https://github.com/home-assistant/hassio-build/releases/download/1.2/resinos-hassio-1.2-raspberrypi2.img.bz2 -[pi3]: https://github.com/home-assistant/hassio-build/releases/download/1.2/resinos-hassio-1.2-raspberrypi3.img.bz2 -[nuc]: https://github.com/home-assistant/hassio-build/releases/download/1.2/resinos-hassio-1.2-intel-nuc.img.bz2 +[pi1]: https://github.com/home-assistant/hassio-build/releases/download/1.2/resinos-hassio-1.3-raspberrypi.img.bz2 +[pi2]: https://github.com/home-assistant/hassio-build/releases/download/1.2/resinos-hassio-1.3-raspberrypi2.img.bz2 +[pi3]: https://github.com/home-assistant/hassio-build/releases/download/1.2/resinos-hassio-1.3-raspberrypi3.img.bz2 +[nuc]: https://github.com/home-assistant/hassio-build/releases/download/1.2/resinos-hassio-1.3-intel-nuc.img.bz2 [linux]: https://github.com/home-assistant/hassio-build/tree/master/install#install-hassio [local]: http://hassio.local:8123 [samba]: /addons/samba/ From 4cd2e5e30c7cc4f2202d871232daa65d778cb5a5 Mon Sep 17 00:00:00 2001 From: Pascal Vizeli Date: Mon, 5 Mar 2018 22:55:05 +0100 Subject: [PATCH 490/993] Update installation.markdown --- source/hassio/installation.markdown | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/source/hassio/installation.markdown b/source/hassio/installation.markdown index 4a2ea0e5d9..2a26994493 100644 --- a/source/hassio/installation.markdown +++ b/source/hassio/installation.markdown @@ -50,10 +50,10 @@ A detailed guide about running Hass.io as a virtual machine is available in the [Etcher]: https://etcher.io/ [resinos-network]: https://docs.resin.io/deployment/network/2.0.0/ -[pi1]: https://github.com/home-assistant/hassio-build/releases/download/1.2/resinos-hassio-1.3-raspberrypi.img.bz2 -[pi2]: https://github.com/home-assistant/hassio-build/releases/download/1.2/resinos-hassio-1.3-raspberrypi2.img.bz2 -[pi3]: https://github.com/home-assistant/hassio-build/releases/download/1.2/resinos-hassio-1.3-raspberrypi3.img.bz2 -[nuc]: https://github.com/home-assistant/hassio-build/releases/download/1.2/resinos-hassio-1.3-intel-nuc.img.bz2 +[pi1]: https://github.com/home-assistant/hassio-build/releases/download/1.3/resinos-hassio-1.3-raspberrypi.img.bz2 +[pi2]: https://github.com/home-assistant/hassio-build/releases/download/1.3/resinos-hassio-1.3-raspberrypi2.img.bz2 +[pi3]: https://github.com/home-assistant/hassio-build/releases/download/1.3/resinos-hassio-1.3-raspberrypi3.img.bz2 +[nuc]: https://github.com/home-assistant/hassio-build/releases/download/1.3/resinos-hassio-1.3-intel-nuc.img.bz2 [linux]: https://github.com/home-assistant/hassio-build/tree/master/install#install-hassio [local]: http://hassio.local:8123 [samba]: /addons/samba/ From f7379745636d6f7f484334726ecd9fd056cd1fbc Mon Sep 17 00:00:00 2001 From: Andrew Cockburn Date: Mon, 5 Mar 2018 23:32:30 -0800 Subject: [PATCH 491/993] Update tutorial.markdown (#4841) --- .../ecosystem/appdaemon/tutorial.markdown | 38 +++++++++++++------ 1 file changed, 27 insertions(+), 11 deletions(-) diff --git a/source/_docs/ecosystem/appdaemon/tutorial.markdown b/source/_docs/ecosystem/appdaemon/tutorial.markdown index 6a9998bced..962be8ea9f 100755 --- a/source/_docs/ecosystem/appdaemon/tutorial.markdown +++ b/source/_docs/ecosystem/appdaemon/tutorial.markdown @@ -43,22 +43,38 @@ The best way to show what AppDaemon does is through a few simple examples. ### {% linkable_title Sunrise/Sunset Lighting %} -Lets start with a simple App to turn a light on every night at sunset and off every morning at sunrise. Every App when first started will have its `initialize()` function called which gives it a chance to register a callback for AppDaemons's scheduler for a specific time. In this case we are using `run_at_sunrise()` and `run_at_sunset()` to register 2 separate callbacks. The argument `0` is the number of seconds offset from sunrise or sunset and can be negative or positive. For complex intervals it can be convenient to use Python's `datetime.timedelta` class for calculations. When sunrise or sunset occurs, the appropriate callback function, `sunrise_cb()` or `sunset_cb()` is called which then makes a call to Home Assistant to turn the porch light on or off by activating a scene. The variables `args["on_scene"]` and `args["off_scene"]` are passed through from the configuration of this particular App, and the same code could be reused to activate completely different scenes in a different version of the App. +Lets start with a simple App to turn a light on every night fifteen +minutes (900 seconds) before sunset and off every morning at sunrise. +Every App when first started will have its ``initialize()`` function +called which gives it a chance to register a callback for AppDaemons's +scheduler for a specific time. In this case we are using +`run_at_sunrise()` and `run_at_sunset()` to register 2 separate +callbacks. The named argument `offset` is the number of seconds offset +from sunrise or sunset and can be negative or positive (it defaults to +zero). For complex intervals it can be convenient to use Python's +`datetime.timedelta` class for calculations. In the example below, +when sunrise or just before sunset occurs, the appropriate callback +function, `sunrise_cb()` or `before_sunset_cb()` is called which +then makes a call to Home Assistant to turn the porch light on or off by +activating a scene. The variables `args["on_scene"]` and +`args["off_scene"]` are passed through from the configuration of this +particular App, and the same code could be reused to activate completely +different scenes in a different version of the App. ```python -import homeassistant.appapi as appapi + import appdaemon.plugins.hass.hassapi as hass -class OutsideLights(appapi.AppDaemon): + class OutsideLights(hass.Hass): - def initialize(self): - self.run_at_sunrise(self.sunrise_cb, 0) - self.run_at_sunset(self.sunset_cb, 0) - - def sunrise_cb(self, kwargs): - self.turn_on(self.args["off_scene"]) + def initialize(self): + self.run_at_sunrise(self.sunrise_cb) + self.run_at_sunset(self.before_sunset_cb, offset=-900) + + def sunrise_cb(self, kwargs): + self.turn_on(self.args["off_scene"]) - def sunset_cb(self, kwargs): - self.turn_on(self.args["on_scene"]) + def before_sunset_cb(self, kwargs): + self.turn_on(self.args["on_scene"]) ``` From f180080f5e76a16274484e5b79a4acbc30cbfdad Mon Sep 17 00:00:00 2001 From: JC Connell Date: Tue, 6 Mar 2018 05:00:09 -0500 Subject: [PATCH 492/993] Change meters to miles line 32 (#4832) --- source/_components/sensor.spotcrime.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/sensor.spotcrime.markdown b/source/_components/sensor.spotcrime.markdown index 892a077a6e..98e2b7ee40 100644 --- a/source/_components/sensor.spotcrime.markdown +++ b/source/_components/sensor.spotcrime.markdown @@ -29,7 +29,7 @@ sensor: Configuration options for the Crime Reports Sensor: - **name** (*Required*): Name the sensor whatever you want. -- **radius** (*Required*): Radius in meters. +- **radius** (*Required*): Radius in miles. - **days** (*Optional*): Defaults to 1 day. - **latitude** (*Optional*): Defaults to your home zone latitude. - **longitude** (*Optional*): Defaults to your home zone longitude. From 6527716bcc8fdb409177bd60fe0e1b9dd38f7632 Mon Sep 17 00:00:00 2001 From: DubhAd Date: Tue, 6 Mar 2018 10:01:30 +0000 Subject: [PATCH 493/993] Changed the PSU link to be to the power reqs (#4821) --- source/getting-started/index.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/getting-started/index.markdown b/source/getting-started/index.markdown index abb8cf7e72..429c6b4cb8 100644 --- a/source/getting-started/index.markdown +++ b/source/getting-started/index.markdown @@ -17,7 +17,7 @@ Follow this guide if you want to easily get started with Home Assistant, or if y We will need a few things to get started with installing Home Assistant. Links below are linking to Amazon US. If you're not in the US, you should be able to find these items in web stores in your country. -- [Raspberry Pi 3 model B](http://a.co/gEfMqL4) + [Power Supply](http://a.co/cgKUgkt) (at least 2.5A) +- [Raspberry Pi 3 model B](http://a.co/gEfMqL4) + [Power Supply](https://www.raspberrypi.org/help/faqs/#powerReqs) (at least 2.5A) - [Micro SD Card](http://a.co/gslOydD). Get one that is Class 10 as they are more reliable. Size 32GB or bigger recommended. - SD Card reader. Part of most laptops, and also available as [standalone USB sticks](http://a.co/5FCyb0N) (the brand doesn't matter, just pick the cheapest) - Ethernet cable (optional, Hass.io can work with WiFi too) From d808f39a2158785982929a033c373c13bcbd684d Mon Sep 17 00:00:00 2001 From: DubhAd Date: Tue, 6 Mar 2018 10:03:19 +0000 Subject: [PATCH 494/993] Added PSU warning (#4820) --- source/_docs/installation/raspberry-pi.markdown | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/source/_docs/installation/raspberry-pi.markdown b/source/_docs/installation/raspberry-pi.markdown index bb0bc595da..d7f3c231ef 100644 --- a/source/_docs/installation/raspberry-pi.markdown +++ b/source/_docs/installation/raspberry-pi.markdown @@ -16,6 +16,10 @@ This installation of Home Assistant requires the Raspberry Pi to run [Raspbian L Although these installation steps specifically mention a Raspberry Pi, you can go ahead and proceed on any Linux install as well. This guide is also referred to as the "Advanced Guide" for a virtual environment install.

    +

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

    + Connect to the Raspberry Pi over SSH. Default password is `raspberry`. You will need to enable SSH access. The Raspberry Pi website has instructions [here](https://www.raspberrypi.org/documentation/remote-access/ssh/). From 66b39210b1746051e293f19e38753c0ea8c91cbb Mon Sep 17 00:00:00 2001 From: Henrik Nicolaisen Date: Tue, 6 Mar 2018 11:04:41 +0100 Subject: [PATCH 495/993] fixed version smappee component was added in (#4764) --- source/_components/sensor.smappee.markdown | 4 ++-- source/_components/smappee.markdown | 4 ++-- source/_components/switch.smappee.markdown | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/source/_components/sensor.smappee.markdown b/source/_components/sensor.smappee.markdown index f9a3dcf456..6a34cfb5c5 100644 --- a/source/_components/sensor.smappee.markdown +++ b/source/_components/sensor.smappee.markdown @@ -2,13 +2,13 @@ layout: page title: "Smappee Sensor" description: "Instructions how to integrate Smappee energy monitor into Home Assistant." -date: 2018-01-06 16:15 +date: 2018-02-26 08:37 sidebar: true comments: false sharing: true footer: true logo: smappee.png -ha_release: "0.62" +ha_release: "0.64" ha_category: Sensor --- diff --git a/source/_components/smappee.markdown b/source/_components/smappee.markdown index db3bd1ac65..4bd050ad22 100644 --- a/source/_components/smappee.markdown +++ b/source/_components/smappee.markdown @@ -2,13 +2,13 @@ layout: page title: "Smappee" description: "Instructions how to setup Smappee within Home Assistant." -date: 2018-01-06 16:15 +date: 2018-02-26 08:37 sidebar: true comments: false sharing: true footer: true logo: smappee.png -ha_release: "0.62" +ha_release: "0.64" ha_category: Hub --- diff --git a/source/_components/switch.smappee.markdown b/source/_components/switch.smappee.markdown index a28cd69319..58db20afac 100644 --- a/source/_components/switch.smappee.markdown +++ b/source/_components/switch.smappee.markdown @@ -2,13 +2,13 @@ layout: page title: "Smappee Switch" description: "Instructions how to integrate Smappee Comfort Plug into Home Assistant." -date: 2018-01-06 16:15 +date: 2018-02-26 08:37 sidebar: true comments: false sharing: true footer: true logo: smappee.png -ha_release: "0.62" +ha_release: "0.64" ha_category: Switch ha_iot_class: "Local Push" --- From 73af490160fff22d8793cd332687a616abd2f472 Mon Sep 17 00:00:00 2001 From: cogneato Date: Tue, 6 Mar 2018 03:06:07 -0700 Subject: [PATCH 496/993] re-adding that the add-on makes use of port 80 (#4760) I realized that the entire previous instruction should not have been removed and only the reference to port 443. --- source/_addons/lets_encrypt.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_addons/lets_encrypt.markdown b/source/_addons/lets_encrypt.markdown index fe3894e6f8..c0cbf10bbe 100644 --- a/source/_addons/lets_encrypt.markdown +++ b/source/_addons/lets_encrypt.markdown @@ -14,7 +14,7 @@ featured: false You should not use this if you are also using the [DuckDNS add-on]. The DuckDNS add-on has integrated Let's Encrypt support.

    -Setup and manage a [Let's Encrypt](https://letsencrypt.org/) certificate. This addon will create a certificate on the first run and will auto-renew if the certificate is within 30 days of expiration. +Setup and manage a [Let's Encrypt](https://letsencrypt.org/) certificate. This addon will create a certificate on the first run and will auto-renew if the certificate is within 30 days of expiration. This add-on uses port 80 to verify the certificate request. You will need to stop all other add-ons that also use this port. ```json { From 24e2021c21481934f4931e8bd91e4b02408f70e2 Mon Sep 17 00:00:00 2001 From: Ben Lebherz Date: Tue, 6 Mar 2018 20:37:06 +0100 Subject: [PATCH 497/993] Fixes link to submit page in states documentation (#4847) --- source/developers/development_states.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/developers/development_states.markdown b/source/developers/development_states.markdown index 369f87ea54..6da9e5fbc9 100644 --- a/source/developers/development_states.markdown +++ b/source/developers/development_states.markdown @@ -137,4 +137,4 @@ def device_state_attributes(self): Entities also have a similar property `state_attributes`, which normally doesn't need to be defined by new platforms. This property is used by base components to add standard sets of attributes to a state. Example: The light component uses `state_attributes` to add brightness to the state dictionary. If you are designing a new component, you should define `state_attributes` instead.

    -To get your component included in the Home Assistant releases, follow the steps described in the [Submitting improvements](https://home-assistant.io/developers/#submitting-improvements) section. Basically you only need to move your component in the `homeassistant/component/` directory of your fork and create a Pull Request. +To get your component included in the Home Assistant releases, follow the steps described in the [Submit your work](https://home-assistant.io/developers/development_submitting/) section. Basically you only need to move your component in the `homeassistant/component/` directory of your fork and create a Pull Request. From a303c393d9e6963d808622d7fcc435a23bf95422 Mon Sep 17 00:00:00 2001 From: Matt F Date: Tue, 6 Mar 2018 13:37:44 -0600 Subject: [PATCH 498/993] Update Synology installation instructions (#4845) The command to chown the directory was backwards --- source/_docs/installation/synology.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_docs/installation/synology.markdown b/source/_docs/installation/synology.markdown index 9edf9fbb00..8885d8e868 100644 --- a/source/_docs/installation/synology.markdown +++ b/source/_docs/installation/synology.markdown @@ -61,7 +61,7 @@ Create homeassistant config directory & switch to it ```bash # mkdir /volume1/homeassistant -# chown /volume1/homeassistant homeassistant +# chown homeassistant /volume1/homeassistant # chmod 755 /volume1/homeassistant # cd /volume1/homeassistant ``` From 7965cb8b072156dd33331dff56128636b3dd197c Mon Sep 17 00:00:00 2001 From: DubhAd Date: Tue, 6 Mar 2018 20:14:52 +0000 Subject: [PATCH 499/993] Changed example to ACM from USB (#4804) Most Z-Wave sticks identify as ttyACM rather than ttyUSB - changing the example in the docs to fit what'll work for most people --- source/_docs/z-wave/installation.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_docs/z-wave/installation.markdown b/source/_docs/z-wave/installation.markdown index 0319554707..5974c16a20 100644 --- a/source/_docs/z-wave/installation.markdown +++ b/source/_docs/z-wave/installation.markdown @@ -43,7 +43,7 @@ On Raspberry Pi you will need to enable the serial interface in the `raspi-confi ```yaml # Example configuration.yaml entry zwave: - usb_path: /dev/ttyUSB0 + usb_path: /dev/ttyACM0 ``` {% configuration zwave %} From 3217dfcc7ffce7e9b7ea0484b544065d2079770a Mon Sep 17 00:00:00 2001 From: cogneato Date: Tue, 6 Mar 2018 13:15:52 -0700 Subject: [PATCH 500/993] Change wording to locate logs (#4837) Changed description to match UI changes for system (supervisor) log. --- source/hassio/installing_third_party_addons.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/hassio/installing_third_party_addons.markdown b/source/hassio/installing_third_party_addons.markdown index f88860e1d8..828ed90e59 100644 --- a/source/hassio/installing_third_party_addons.markdown +++ b/source/hassio/installing_third_party_addons.markdown @@ -31,4 +31,4 @@ Add the URL of the repository and then press "Add". A new card for the repositor ### {% linkable_title Help: Repository is not showing up %} -If you have added a repository, but it's not showing up, it means that the repository contains invalid configuration. Go to the Hass.io panel -> Three dot menu -> Advanced Settings -> Supervisor card -> View logs and scroll to the bottom. It should tell you what went wrong. Report this information to the repository author. +If you have added a repository, but it's not showing up, it means that the repository contains invalid configuration. Go to the Hass.io panel and then the System tab to find the System log. It should tell you what went wrong. Report this information to the repository author. From ca946f274d9d4c6bce819c62ab77e1eb198de010 Mon Sep 17 00:00:00 2001 From: Scott Prive Date: Tue, 6 Mar 2018 15:17:04 -0500 Subject: [PATCH 501/993] Update docker.markdown (#4815) # add paragraph to explain how to update docker-compose.yml example for macOS # The TZ issue wasn't specific to `boot2docker` # Add details link for net:host vs port: conflict # Add details link for TZ issue --- source/_docs/installation/docker.markdown | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/source/_docs/installation/docker.markdown b/source/_docs/installation/docker.markdown index 63212564d6..0a531af754 100644 --- a/source/_docs/installation/docker.markdown +++ b/source/_docs/installation/docker.markdown @@ -20,14 +20,16 @@ $ docker run -d --name="home-assistant" -v /path/to/your/config:/config -v /etc/ ### {% linkable_title macOS %} -When using `boot2docker` on macOS you are unable to map the local time to your Docker container. Use `-e "TZ=America/Los_Angeles"` instead of `-v /etc/localtime:/etc/localtime:ro`. Replace "America/Los_Angeles" with [your timezone](http://en.wikipedia.org/wiki/List_of_tz_database_time_zones). +When using `docker-ce` (or `boot2docker`) on macOS, you are unable to map the local timezone to your Docker container (see Docker issue https://github.com/docker/for-mac/issues/44). Instead of `-v /etc/localtime:/etc/localtime:ro`, just pass in the timezone environment variable when you launch the container, ex: `-e "TZ=America/Los_Angeles"`. Replace "America/Los_Angeles" with [your timezone](http://en.wikipedia.org/wiki/List_of_tz_database_time_zones). -Additionally, if your expectation is that you will be able to browse directly to `http://localhost:8123` on your macOS host, then you will also need to replace the `--net=host` switch with `-p 8123:8123`. This is currently the only way to forward ports on to your actual host (macOS) machine instead of the virtual machine inside `xhyve`. More detail on this can be found in [the docker forums](https://forums.docker.com/t/should-docker-run-net-host-work/14215/10). +If you wish to browse directly to `http://localhost:8123` from your macOS host, meaning forward ports directly to the container, replace the `--net=host` switch with `-p 8123:8123`. More detail can be found in [the docker forums](https://forums.docker.com/t/should-docker-run-net-host-work/14215/10). ```bash $ docker run -d --name="home-assistant" -v /path/to/your/config:/config -e "TZ=America/Los_Angeles" -p 8123:8123 homeassistant/home-assistant ``` +Alternatively, `docker-compose` works with any recent release of `docker-ce` on macOS. Note that (further down this page) we provide an example `docker-compose.yml` however it differs from the `docker run` example above. To make the .yml directives match, you would need to make _two_ changes: first add the equivalent `ports:` directive, then _remove_ the `network_mode: host` section. This is because `Port mapping is incompatible with network_mode: host:`. More details can be found at [Docker networking docs] (https://docs.docker.com/engine/userguide/networking/#default-networks). Note also the `/dev/tty*` device name used by your Arduino etc. devices will differ from the Linux example, so the compose `mount:` may require updates. + ### {% linkable_title Windows %} When running Home Assistant in Docker on Windows, you may have some difficulty getting ports to map for routing (since the `--net=host` switch actually applies to the hypervisor's network interface). To get around this, you will need to add port proxy ipv4 rules to your local Windows machine, like so (Replacing '192.168.1.10' with whatever your Windows IP is, and '10.0.50.2' with whatever your Docker container's IP is): From 4ff8107c739bf161d5003c05675fbe59c433749d Mon Sep 17 00:00:00 2001 From: Otto Winter Date: Tue, 6 Mar 2018 21:18:27 +0100 Subject: [PATCH 502/993] Fix MQTT discovery object_id docs (#4761) * Fix MQTT discovery object_id docs * Update format --- source/_docs/mqtt/discovery.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_docs/mqtt/discovery.markdown b/source/_docs/mqtt/discovery.markdown index a0f3737cbc..51eae400c4 100644 --- a/source/_docs/mqtt/discovery.markdown +++ b/source/_docs/mqtt/discovery.markdown @@ -44,7 +44,7 @@ The discovery topic need to follow a specific format: - ``: One of the supported components, eg. `binary_sensor`. - ``: (*Optional*) id of the node providing the topic. -- ``: The ID of the device. This will become the `entity_id` in Home Assistant. +- ``: "The ID of the device. This is only to allow for separate topics for each device and is not used for the `entity_id`." - `<>`: The topic `config` or `state` which defines the current action. The payload will be checked like an entry in your `configuration.yaml` file if a new device is added. This means that missing variables will be filled with the platform's default values. All configuration variables which are *required* must be present in the initial payload send to `/config`. From 1b266b18a42d1e715c1c19a157caa16e0bb5728d Mon Sep 17 00:00:00 2001 From: Florian Klien Date: Tue, 6 Mar 2018 21:18:48 +0100 Subject: [PATCH 503/993] nginx rev proxy minimal version 1.3.13 (#4849) * nginx rev proxy minimal version 1.3.13 * Some other minor changes --- source/_docs/ecosystem/nginx.markdown | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/source/_docs/ecosystem/nginx.markdown b/source/_docs/ecosystem/nginx.markdown index 24e4c7e084..46ae6152d1 100644 --- a/source/_docs/ecosystem/nginx.markdown +++ b/source/_docs/ecosystem/nginx.markdown @@ -14,13 +14,17 @@ Using NGINX as a proxy for Home Assistant allows you to serve Home Assistant sec ### {% linkable_title 1. Get a domain name forwarded to your IP %} -Chances are, you have a dynamic IP Address (your ISP changes your address periodically). If this is true, you can use a Dynamic DNS service to obtain a domain and set it up to update with you IP. If you purchase your own domain name, you will be able to easily get a trusted SSL certificate later. +Chances are, you have a dynamic IP address (your ISP changes your address periodically). If this is true, you can use a Dynamic DNS service to obtain a domain and set it up to update with you IP. If you purchase your own domain name, you will be able to easily get a trusted SSL certificate later. ### {% linkable_title 2 Install nginx on your server %} This will vary depending on your OS. Check out Google for this. After installing, ensure that NGINX is not running. +

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

    + ### {% linkable_title 3. Obtain an SSL certificate %} There are two ways of obtaining an SSL certificate. @@ -28,7 +32,7 @@ There are two ways of obtaining an SSL certificate. #### {% linkable_title Using Let's Encrypt %} If you purchased your own domain, you can use https://letsencrypt.org/ to obtain a free, publicly trusted SSL certificate. This will allow you to work with services like IFTTT. Download and install per the instructions online and get a certificate using the following command. -``` +```bash $ sudo ./letsencrypt-auto certonly --standalone -d example.com -d www.example.com ``` @@ -75,14 +79,13 @@ $ sudo ln ../sites-available/hass default Double check this configuration to ensure all settings are correct and start nginx. - ### {% linkable_title 8. Port forwarding. %} Forward ports 443 and 80 to your server on your router. Do not forward port 8123. ### {% linkable_title NGINX Config %} -``` +```text map $http_upgrade $connection_upgrade { default upgrade; '' close; From f73376a4daa2a88af5f5bcb61f5eda52534c9255 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ville=20Skytt=C3=A4?= Date: Tue, 6 Mar 2018 22:21:18 +0200 Subject: [PATCH 504/993] nginx proxy config updates (#4828) * nginx_proxy: Document certfile and keyfile config vars * nginx_proxy: Document customize variables --- source/_addons/nginx_proxy.markdown | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/source/_addons/nginx_proxy.markdown b/source/_addons/nginx_proxy.markdown index 8fd22956e7..f306fccbe5 100644 --- a/source/_addons/nginx_proxy.markdown +++ b/source/_addons/nginx_proxy.markdown @@ -15,13 +15,23 @@ In the `http` section of the `configuration.yaml` file remove `ssl_certificate` ```json { - "domain": "home.example.com" + "domain": "home.example.com", + "certfile": "fullchain.pem", + "keyfile": "privkey.pem", + "customize": { + "active": false, + "default": "nginx_proxy_default*.conf", + "servers": "nginx_proxy/*.conf" + } } ``` Configuration variables: - **domain** (*Required*): Domain they will proxy run with it. +- **certfile** (*Required*): Certificate file to use in the /ssl dir. +- **keyfile** (*Required*): Private key file to use in the /ssl dir. +- **customize** (*Optional*): If true, additional NGINX configuration files for the default server and additional servers are read from files in the /share dir specified by the `default` and `servers` variables.

    It is possible to deactivate port 80 if you need this for things like `emulate_hue`. Remove the host port from Network option of this add-on. From 97b30a17f8ca600925cdf88b553e45344acbf6cf Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Tue, 6 Mar 2018 21:38:10 +0100 Subject: [PATCH 505/993] Fix link --- source/_docs/configuration/basic.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_docs/configuration/basic.markdown b/source/_docs/configuration/basic.markdown index 77e8359eba..3ac38b00a2 100644 --- a/source/_docs/configuration/basic.markdown +++ b/source/_docs/configuration/basic.markdown @@ -28,7 +28,7 @@ Configuration variables: - **longitude** (*Optional*): Longitude of your location required to calculate the time the sun rises and sets. - **elevation** (*Optional*): Altitude above sea level in meters. Impacts weather/sunrise data. - **unit_system** (*Optional*): `metric` for Metric, `imperial` for Imperial. -- **time_zone** (*Optional*): Pick yours from here: http://en.wikipedia.org/wiki/List_of_tz_database_time_zones +- **time_zone** (*Optional*): Pick yours from here: [http://en.wikipedia.org/wiki/List_of_tz_database_time_zones](http://en.wikipedia.org/wiki/List_of_tz_database_time_zones) - **name** (*Optional*): Name of the location where Home Assistant is running. - **customize** (*Optional*): [Customize](/docs/configuration/customizing-devices/) entities. - **customize_domain** (*Optional*): [Customize](/docs/configuration/customizing-devices/) all entities in a domain. From 8ad6597d2a367bb2804727f27d22bac268509b2c Mon Sep 17 00:00:00 2001 From: scaarup Date: Tue, 6 Mar 2018 21:50:06 +0100 Subject: [PATCH 506/993] Update index.markdown (#4851) --- source/hassio/index.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/hassio/index.markdown b/source/hassio/index.markdown index fdddad8dd3..d53336e89c 100644 --- a/source/hassio/index.markdown +++ b/source/hassio/index.markdown @@ -57,7 +57,7 @@ Hass.io upgrade process from the SSH command line ## {% linkable_title hassio command %} -On the SSH command line tyou can use the `hassio` command to retrieve logs, check the details of connected hardware, and more. +On the SSH command line you can use the `hassio` command to retrieve logs, check the details of connected hardware, and more. HomeAssistant: ``` $ hassio homeassistant logs From 69005f54a3b6aabda38bd96298e804ddf7d8fd3f Mon Sep 17 00:00:00 2001 From: Sebastian Muszynski Date: Tue, 6 Mar 2018 22:01:12 +0100 Subject: [PATCH 507/993] Format of the services updated. (#4781) --- source/_components/fan.xiaomi_miio.markdown | 16 ++++++++-------- source/_components/light.xiaomi_miio.markdown | 2 +- source/_components/vacuum.xiaomi_miio.markdown | 9 ++++----- 3 files changed, 13 insertions(+), 14 deletions(-) diff --git a/source/_components/fan.xiaomi_miio.markdown b/source/_components/fan.xiaomi_miio.markdown index 9ba659b87c..99adf8ff4e 100644 --- a/source/_components/fan.xiaomi_miio.markdown +++ b/source/_components/fan.xiaomi_miio.markdown @@ -71,7 +71,7 @@ name: ## {% linkable_title Platform Services %} -### {% linkable_title Service fan/xiaomi_miio_set_buzzer_on %} +### {% linkable_title Service `fan.xiaomi_miio_set_buzzer_on` %} Turn the buzzer on. @@ -79,7 +79,7 @@ Turn the buzzer on. |---------------------------|----------|-------------------------------------------------------| | `entity_id` | yes | Only act on a specific air purifier. Else targets all. | -### {% linkable_title Service fan/xiaomi_miio_set_buzzer_off %} +### {% linkable_title Service `fan.xiaomi_miio_set_buzzer_off` %} Turn the buzzer off. @@ -87,7 +87,7 @@ Turn the buzzer off. |---------------------------|----------|---------------------------------------------------------| | `entity_id` | yes | Only act on a specific air purifier. Else targets all. | -### {% linkable_title Service fan/xiaomi_miio_set_led_on %} +### {% linkable_title Service `fan.xiaomi_miio_set_led_on` %} Turn the led on. @@ -95,7 +95,7 @@ Turn the led on. |---------------------------|----------|---------------------------------------------------------| | `entity_id` | yes | Only act on a specific air purifier. Else targets all. | -### {% linkable_title Service fan/xiaomi_miio_set_led_off %} +### {% linkable_title Service `fan.xiaomi_miio_set_led_off` %} Turn the led off. @@ -103,7 +103,7 @@ Turn the led off. |---------------------------|----------|---------------------------------------------------------| | `entity_id` | yes | Only act on a specific air purifier. Else targets all. | -### {% linkable_title Service fan/xiaomi_miio_set_child_lock_on %} +### {% linkable_title Service `fan.xiaomi_miio_set_child_lock_on` %} Turn the child lock on. @@ -111,7 +111,7 @@ Turn the child lock on. |---------------------------|----------|---------------------------------------------------------| | `entity_id` | yes | Only act on a specific air purifier. Else targets all. | -### {% linkable_title Service fan/xiaomi_miio_set_child_lock_off %} +### {% linkable_title Service `fan.xiaomi_miio_set_child_lock_off` %} Turn the child lock off. @@ -119,7 +119,7 @@ Turn the child lock off. |---------------------------|----------|---------------------------------------------------------| | `entity_id` | yes | Only act on a specific air purifier. Else targets all. | -### {% linkable_title Service fan/xiaomi_miio_set_led_brightness %} +### {% linkable_title Service `fan.xiaomi_miio_set_led_brightness` %} Set the led brightness. Supported values are 0 (Bright), 1 (Dim), 2 (Off). @@ -128,7 +128,7 @@ Set the led brightness. Supported values are 0 (Bright), 1 (Dim), 2 (Off). | `entity_id` | yes | Only act on a specific air purifier. Else targets all. | | `brightness` | no | Brightness, between 0 and 2. | -### {% linkable_title Service fan/xiaomi_miio_set_favorite_level %} +### {% linkable_title Service `fan.xiaomi_miio_set_favorite_level` %} Set the favorite level of the operation mode "favorite". diff --git a/source/_components/light.xiaomi_miio.markdown b/source/_components/light.xiaomi_miio.markdown index 90e5d1359b..b1428017a5 100644 --- a/source/_components/light.xiaomi_miio.markdown +++ b/source/_components/light.xiaomi_miio.markdown @@ -37,7 +37,7 @@ Configuration variables: ## {% linkable_title Platform Services %} -### Service fan/xiaomi_miio_set_scene +### {% linkable_title Service `light.xiaomi_miio_set_scene` %} Set one of the 4 available fixed scenes. diff --git a/source/_components/vacuum.xiaomi_miio.markdown b/source/_components/vacuum.xiaomi_miio.markdown index 03a8b0ecec..c8aafb0de9 100644 --- a/source/_components/vacuum.xiaomi_miio.markdown +++ b/source/_components/vacuum.xiaomi_miio.markdown @@ -60,7 +60,7 @@ services to access the remote control mode of the robot. These are: - `xiaomi_remote_control_move` - `xiaomi_remote_control_move_step` -### {% linkable_title Service `vacuum/xiaomi_remote_control_start` %} +### {% linkable_title Service `vacuum.xiaomi_remote_control_start` %} Start the remote control mode of the robot. You can then move it with `remote_control_move`; when done, call `remote_control_stop`. @@ -69,7 +69,7 @@ Start the remote control mode of the robot. You can then move it with |---------------------------|----------|-------------------------------------------------------| | `entity_id` | yes | Only act on specific robot; default targets all | -### {% linkable_title Service `vacuum/xiaomi_remote_control_stop` %} +### {% linkable_title Service `vacuum.xiaomi_remote_control_stop` %} Exit the remote control mode of the robot. @@ -77,7 +77,7 @@ Exit the remote control mode of the robot. |---------------------------|----------|-------------------------------------------------------| | `entity_id` | yes | Only act on specific robot; default targets all | -### {% linkable_title Service `vacuum/xiaomi_remote_control_move` %} +### {% linkable_title Service `vacuum.xiaomi_remote_control_move` %} Remote control the robot. Please ensure you first set it in remote control mode with `remote_control_start`. @@ -89,8 +89,7 @@ mode with `remote_control_start`. | `rotation` | no | Rotation: between -179 degrees and 179 degrees | | `duration` | no | The number of seconds that the robot should move for | - -### {% linkable_title Service `vacuum/xiaomi_remote_control_move_step` %} +### {% linkable_title Service `vacuum.xiaomi_remote_control_move_step` %} Enter remote control mode, make one move, stop, and exit remote control mode. From 91972a262967b3f256f2f42d051df6f72cdfbe83 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Tue, 6 Mar 2018 13:02:17 -0800 Subject: [PATCH 508/993] Add docs for optional words in conversation utterances (#4779) --- source/_components/conversation.markdown | 81 +++++++++++++------ source/images/screenshots/voice-commands.png | Bin 30851 -> 14828 bytes 2 files changed, 57 insertions(+), 24 deletions(-) diff --git a/source/_components/conversation.markdown b/source/_components/conversation.markdown index 55b9fbb19a..c4ae729c0f 100644 --- a/source/_components/conversation.markdown +++ b/source/_components/conversation.markdown @@ -11,46 +11,79 @@ logo: home-assistant.png ha_category: "Voice" --- +The conversation component allows you to converse with Home Assistant. You can either converse by pressing the microphone in the frontend (supported browsers only (no iOS)) or by calling the `conversation/process` service with the transcribed text. -The `conversation` component can process sentences into commands for Home Assistant. It currently has built in functionality to recognize `turn `, but custom phrases can be added through configuration. - - -To enable the conversation option in your installation, add the following to your `configuration.yaml` file: +

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

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

    - -

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

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

    +The following configuration can handle the following sentences: + + - Change the lights to red + - Change the lights to green + - Change the lights to blue + - Change the lights to the color red + - Change the lights to the color green + - Change the lights to the color blue + +```yaml +# Example configuration.yaml entry +conversation: + intents: + ColorLight: + - Change the lights to [the color] {color} +{% raw %} +intent_script: + ColorLight: + speech: + text: Changed the lights to {{ color }}. + action: + service: light.turn_on + data_template: + rgb_color: + - "{% if color == 'red' %}255{% else %}0{% endif %}" + - "{% if color == 'green' %}255{% else %}0{% endif %}" + - "{% if color == 'blue' %}255{% else %}0{% endif %}" +{% endraw %} +``` diff --git a/source/images/screenshots/voice-commands.png b/source/images/screenshots/voice-commands.png index 5ff003a0fbf32d021f1db878ac744ea76c3402cd..39a98deef7ed7b3a44e3cb197fc628bfb7377183 100644 GIT binary patch literal 14828 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 CyeK#T From 4a88a5b148e2a36834da9a180545b025d891914f Mon Sep 17 00:00:00 2001 From: Jerry Workman Date: Tue, 6 Mar 2018 16:10:13 -0500 Subject: [PATCH 509/993] Add systemctl daemon-reload (#4835) * Add systemctl daemon-reload * Minor changes * Update format --- source/_components/recorder.markdown | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/source/_components/recorder.markdown b/source/_components/recorder.markdown index 0b777cdf36..b0d4227506 100644 --- a/source/_components/recorder.markdown +++ b/source/_components/recorder.markdown @@ -157,12 +157,26 @@ If the `recorder` component is activated then some components support `restore_s | MS SQL Server | `mssql+pymssql://user:pass@SERVER_IP/DB_NAME?charset=utf8` |

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

    ## {% linkable_title Installation notes %} From f50be7c5e831ed0d703eaf67e7f27a9e44ed4f4c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marco=20Nu=C3=B1ez?= Date: Tue, 6 Mar 2018 18:10:34 -0300 Subject: [PATCH 510/993] adding a method to Recovery the token (#4833) * adding a method to Recovery the token The access token also can be found with the Command Line tool from miio. I tested this and works. * Update format --- .../_components/vacuum.xiaomi_miio.markdown | 39 +++++++++++++++++-- 1 file changed, 35 insertions(+), 4 deletions(-) diff --git a/source/_components/vacuum.xiaomi_miio.markdown b/source/_components/vacuum.xiaomi_miio.markdown index 03a8b0ecec..403a0f4272 100644 --- a/source/_components/vacuum.xiaomi_miio.markdown +++ b/source/_components/vacuum.xiaomi_miio.markdown @@ -133,12 +133,43 @@ The following table shows the units of measurement for each attribute: ## {% linkable_title Retrieving the Access Token %}

    -This token (32 hexadecimal characters) is required for the Xiaomi Mi Robot -Vacuum, Xiaomi Philips Lights and Xiaomi IR Remote. The Xiaomi Gateway uses another security -method and requires a `key` (16 alphanumeric chars), which can be obtained -easily via a hidden menu item at the Mi-Home app. +This token (32 hexadecimal characters) is required for the Xiaomi Mi Robot Vacuum, Xiaomi Philips Lights and Xiaomi IR Remote. The Xiaomi Gateway uses another security method and requires a `key` (16 alphanumeric chars), which can be obtained +easily via a hidden menu item at the Mi-Home app or using the `miio` command line tool.

    +#### {% linkable_title Miio command line tool %} + +You can install the command line tool with: + +```bash +$ npm install -g miio +``` + +Discovering devices on current network + +```bash +$ miio discover +``` + +This will list devices that are connected to the same network as your computer. Let it run for a while so it has a chance to reach all devices, as it might take a minute or two for all devices to answer. + +The commands outputs each device on this format: + +```text +Device ID: 48765421 +Model info: zhimi.airpurifier.m1 +Address: 192.168.100.9 +Token: token-as-hex-here via auto-token +Support: At least basic +``` + +The information output is: + +* __Device ID__ - the unique identifier of the device, does not change if the device is reset. +* __Model ID__ - the model id if it could be determined, this indicates what type of device it is +* __Address__ - the IP that the device has on the network +* __Token__ - the token of the device or ??? if it could not be automatically determined + #### {% linkable_title Windows and Android %} To fetch the token follow these instructions depending on your mobile phone platform. From 23d791b0a1db2a9b0d889b8a2eeb0e1cee62472b Mon Sep 17 00:00:00 2001 From: JC Connell Date: Tue, 6 Mar 2018 16:27:22 -0500 Subject: [PATCH 511/993] Create sensor.zestimate.markdown (#4812) * Create sensor.zestimate.markdown Add documentation for the Zestimate sensor. * Incorporate MartinHjelmare changes * Remove unnecessary configuration header * Removed code block around the configuration tags * Minor changes --- source/_components/sensor.zestimate.markdown | 55 ++++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 source/_components/sensor.zestimate.markdown diff --git a/source/_components/sensor.zestimate.markdown b/source/_components/sensor.zestimate.markdown new file mode 100644 index 0000000000..c791cd7b73 --- /dev/null +++ b/source/_components/sensor.zestimate.markdown @@ -0,0 +1,55 @@ +--- +layout: page +title: "Zestimate" +description: "Instructions on how to integrate the Zestimate sensor into Home Assistant." +date: 2018-03-02 3:10 +sidebar: true +comments: false +sharing: true +footer: true +ha_category: Sensor +ha_release: 0.65 +ha_iot_class: "Cloud Polling" +--- + +The `zestimate` sensor allows one to track the Zestimate value of properties using the [Zillow API](https://www.zillow.com/howto/api/APIOverview.htm). + +You will need to sign up for the Zillow API at the following link [Zillow API](https://www.zillow.com/howto/api/APIOverview.htm). You will also need the Zillow property ID for each property you'd like to track. This information is available from the URL of a property you are interested in. + +For example, the White House zpid is 84074482 and can be found in it's Zillow URL: https://www.zillow.com/homedetails/1600-Pennsylvania-Ave-NW-Washington-DC-20006/84074482_zpid/ + +To enable this sensor, add the following lines to your `configuration.yaml`. + +```yaml +sensor: + - platform: zestimate + api_key: API_KEY + zpid: + - + - +``` + +{% configuration %} +api_key: + description: The API key to access the service. + required: true + type: string +zpid: + description: Property IDs to track in the front end. + required: true + type: list +{% endconfiguration %} + +### Additional Attributes + +The following additional attributes are also available via the sensor. + +These attributes are available: + +- Last update +- 30 Day change in value +- Valuation Range High +- Valuation Range Low +- Address +- Currency +- Amount From a3fae5655868a86ff618522f4d092e65063d6e4c Mon Sep 17 00:00:00 2001 From: Ryan Mounce Date: Wed, 7 Mar 2018 07:58:09 +1030 Subject: [PATCH 512/993] Update ubus documentation for optional DHCP name resolution (#4751) --- source/_components/device_tracker.ubus.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/device_tracker.ubus.markdown b/source/_components/device_tracker.ubus.markdown index d408fec544..646ae0b2c1 100644 --- a/source/_components/device_tracker.ubus.markdown +++ b/source/_components/device_tracker.ubus.markdown @@ -68,7 +68,7 @@ Configuration variables: - **host** (*Required*): The IP address of your router, eg. 192.168.1.1. - **username** (*Required*): The username of an user with administrative privileges, usually *root*. - **password** (*Required*): The password for your given account. -- **dhcp_software** (*Optional*): The DHCP software used in your router: `dnsmasq` or `dhcpd`. Defaults to `dnsmasq`. +- **dhcp_software** (*Optional*): The DHCP software used in your router: `dnsmasq`, `dhcpd`, or `none`. Defaults to `dnsmasq`. See the [device tracker component page](/components/device_tracker/) for instructions how to configure the people to be tracked. From 5cd3526d56ab9a2e216d242772efa270ac71e7ca Mon Sep 17 00:00:00 2001 From: Matt F Date: Tue, 6 Mar 2018 15:35:31 -0600 Subject: [PATCH 513/993] Update docker compose examples (#4816) The docker compose examples have you create a service called 'web', which will create web_1 docker container. Other references within the documents say to run `docker restart home-assistant`, yet this docker container does not exist when using the docker compose examples. Updated compose so they will have a standard name for the container that is created. --- source/_docs/installation/docker.markdown | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/source/_docs/installation/docker.markdown b/source/_docs/installation/docker.markdown index 0a531af754..79eef34969 100644 --- a/source/_docs/installation/docker.markdown +++ b/source/_docs/installation/docker.markdown @@ -92,7 +92,8 @@ As the docker command becomes more complex, switching to `docker-compose` can be ```yaml version: '3' services: - web: + homeassistant: + container_name: home-assistant image: homeassistant/home-assistant volumes: - /path/to/your/config:/config @@ -120,7 +121,8 @@ or in a `docker-compose.yml` file: ```yaml version: '3' services: - web: + homeassistant: + container_name: home-assistant image: homeassistant/home-assistant volumes: - /path/to/your/config:/config From 98da394a611394f6f19072667d16a4f6513d2de4 Mon Sep 17 00:00:00 2001 From: R Huish Date: Tue, 6 Mar 2018 21:37:16 +0000 Subject: [PATCH 514/993] MQTT Sensor - JSON attributes example (#4755) * MQTT Sensor - JSON attributes example As per discusstions https://community.home-assistant.io/t/how-to-use-json-attributes-e-g-mqtt-sensor/40790/16 * Corrected Typo * Escaping --- source/_components/sensor.mqtt.markdown | 26 +++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/source/_components/sensor.mqtt.markdown b/source/_components/sensor.mqtt.markdown index e6b96b3bc1..aebe44beb9 100644 --- a/source/_components/sensor.mqtt.markdown +++ b/source/_components/sensor.mqtt.markdown @@ -82,6 +82,32 @@ json_attributes: In this section you find some real life examples of how to use this sensor. +### {% linkable_title JSON attributes configuration %} + +The example sensor below shows a configuration example which uses JSON in the state topic to add extra attributes. It also makes use of the availability topic. Attributes can then be extracted in [Templates](configuration/templating/#attributes); Example to extract data from the sensor below {% raw %}'{{ states.sensor.bs_client_name.attributes.ClientName }}'{% endraw %}. + +{% raw %} +```yaml +# Example configuration.yml entry +sensor: + - platform: mqtt + state_topic: "HUISHS/BunnyShed/NodeHealthJSON" + name: "BS RSSI" + unit_of_measurement: "dBm" + value_template: '{{ value_json.RSSI }}' + availability_topic: "HUISHS/BunnyShed/status" + payload_available: "online" + payload_not_available: "offline" + json_attributes: + - ClientName + - IP + - MAC + - RSSI + - HostName + - ConnectedSSID +``` +{% endraw %} + ### {% linkable_title Get battery level %} If you are using the [Owntracks](/components/device_tracker.owntracks/) and enable the reporting of the battery level then you can use a MQTT sensor to keep track of your battery. A regular MQTT message from Owntracks looks like this: From 7ac437f5ac1dfacec70bda3180c219571a1b89f0 Mon Sep 17 00:00:00 2001 From: Christoph Gerneth Date: Tue, 6 Mar 2018 22:54:35 +0100 Subject: [PATCH 515/993] updated documentation: show on map (#4680) * updated documentation: show on map * Fix type * changed a copy-paste error --- source/_components/sensor.luftdaten.markdown | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/source/_components/sensor.luftdaten.markdown b/source/_components/sensor.luftdaten.markdown index 6417ee5e0a..a5d701feb5 100644 --- a/source/_components/sensor.luftdaten.markdown +++ b/source/_components/sensor.luftdaten.markdown @@ -60,8 +60,17 @@ sensor: description: Display the humidity from the sensor. pressure: description: Display the pressure from the sensor. + show_on_map: + description: Option to show the position of the sensor on the map. + required: optional + default: false + type: boolean {% endconfiguration %} +

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

    + Not all sensors provide all conditions. Also, it's possible that the sensor values are not available all the time. To check what a sensor is publishing use `curl`: ```bash From 3bf0390512236ae87784cb22b9e302e37a16d2e9 Mon Sep 17 00:00:00 2001 From: Sebastian Muszynski Date: Tue, 6 Mar 2018 22:55:36 +0100 Subject: [PATCH 516/993] Flag the device as unavailable if not reachable. (#4782) --- .../_components/switch.xiaomi_miio.markdown | 28 +++++++++++++++++-- 1 file changed, 25 insertions(+), 3 deletions(-) diff --git a/source/_components/switch.xiaomi_miio.markdown b/source/_components/switch.xiaomi_miio.markdown index f8d03291d0..7212a74287 100644 --- a/source/_components/switch.xiaomi_miio.markdown +++ b/source/_components/switch.xiaomi_miio.markdown @@ -28,9 +28,31 @@ switch: name: Original Xiaomi Mi Smart WiFi Socket host: 192.168.130.59 token: YOUR_TOKEN + model: chuangmi.plug.m1 ``` Configuration variables: -- **host** (*Required*): The IP of your plug. -- **token** (*Required*): The API token of your plug. -- **name** (*Optional*): The name of your plug. +- **host** (*Required*): The IP of your miio device. +- **token** (*Required*): The API token of your miio device. +- **name** (*Optional*): The name of your miio device. +- **model** (*Optional*): The model of your miio device. Valid values are chuangmi.plug.v1`, `qmi.powerstrip.v1`, `zimi.powerstrip.v2`, `chuangmi.plug.m1` and `chuangmi.plug.v2`. This setting can be used to bypass the device model detection and is recommended if your device isn't always available. + +{% configuration %} +host: + description: The IP address of your device. + required: true + type: string +token: + description: The API token of your device. + required: true + type: string +name: + description: The name of your device. + required: false + type: string + default: Xiaomi Miio Switch +model: + description: The model of your device. + required: false + type: string +{% endconfiguration %} From 6d228935013388556dbea5ab06addd6757751b45 Mon Sep 17 00:00:00 2001 From: James Marsh Date: Tue, 6 Mar 2018 21:56:17 +0000 Subject: [PATCH 517/993] Add header parameter to rest_command documentation. (#4747) --- source/_components/rest_command.markdown | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/source/_components/rest_command.markdown b/source/_components/rest_command.markdown index c01e8ce94a..e42610fef5 100644 --- a/source/_components/rest_command.markdown +++ b/source/_components/rest_command.markdown @@ -2,7 +2,7 @@ layout: page title: "RESTful Command" description: "Instructions how to integrate REST commands into Home Assistant." -date: 2016-12-27 00:00 +date: 2018-02-24 00:00 sidebar: true comments: false sharing: true @@ -32,6 +32,7 @@ Configuration variables: - **[service_name]** (*Required*): The name used to expose the service. E.g., in the above example, it would be `rest_command.example_request`. - **url** (*Required*): The URL (support template) for sending request. - **method** (*Optional*): HTTP method to use (`get`, `post`, `put`, or `delete`). Defaults to `get`. + - **headers** (*Optional*): The headers for the requests. - **payload** (*Optional*): A string/template to send with request. - **username** (*Optional*): The username for HTTP authentication. - **password** (*Optional*): The password for HTTP authentication. From d4dd8efbcab8082b7915bdce7ce33e10c6098a7e Mon Sep 17 00:00:00 2001 From: Alan Tse Date: Tue, 6 Mar 2018 14:08:04 -0800 Subject: [PATCH 518/993] Documenting additional sensors (#4602) --- source/_components/tesla.markdown | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/_components/tesla.markdown b/source/_components/tesla.markdown index 4cc5dbd85d..6580d26e31 100644 --- a/source/_components/tesla.markdown +++ b/source/_components/tesla.markdown @@ -18,11 +18,11 @@ The `Tesla` component offers integration with the [Tesla](https://auth.tesla.com This component provides the following platforms: - Binary sensors - such as parking and charger connection. - - Sensors - such as Battery level, Inside/Outside temperature. + - Sensors - such as Battery level, Inside/Outside temperature, odometer, and estimated range. - Device tracker - to track location of your car - Lock - Door lock. Enables you to control Tesla's door lock - Climate - HVAC control. Allow you to control (turn on/off, set target temperature) your Tesla's HVAC system. - - Switch - Charger switch. Allow you to start/stop charging. + - Switch - Charger and max range switch. Allow you to start/stop charging and set max range charging. To use Tesla in your installation, add the following to your `configuration.yaml` file: From f77c8fe85ed04e1864a717cbd1a469fa4754d920 Mon Sep 17 00:00:00 2001 From: Christopher Vella <1883514+chrisvella@users.noreply.github.com> Date: Wed, 7 Mar 2018 09:22:36 +1100 Subject: [PATCH 519/993] Added instructions for magisk based root (#4843) * Added instructions for magisk based root AFAIK Magisk does not integrate with Android to provide an option for shell over adb. However it does allow you to escalate privileges once in a shell. * Minor changes --- .../_components/vacuum.xiaomi_miio.markdown | 21 +++++++------------ 1 file changed, 7 insertions(+), 14 deletions(-) diff --git a/source/_components/vacuum.xiaomi_miio.markdown b/source/_components/vacuum.xiaomi_miio.markdown index 403a0f4272..3c3b624e8f 100644 --- a/source/_components/vacuum.xiaomi_miio.markdown +++ b/source/_components/vacuum.xiaomi_miio.markdown @@ -13,8 +13,7 @@ ha_release: 0.51 ha_iot_class: "Local Polling" --- -The `xiaomi miio` vacuum platform allows you to control the state of your -[Xiaomi Mi Robot Vacuum](http://www.mi.com/roomrobot/). +The `xiaomi miio` vacuum platform allows you to control the state of your [Xiaomi Mi Robot Vacuum](http://www.mi.com/roomrobot/). Currently supported features are: @@ -50,10 +49,7 @@ Configuration variables: ## {% linkable_title Platform Services %} -In addition to [all of the services provided by the `vacuum` component] -]) (`turn_on`, `turn_off`, `start_pause`, `stop`, `return_to_home`, `locate`, -`set_fan_speed` and `send_command`), the `xiaomi` platform introduces specific -services to access the remote control mode of the robot. These are: +In addition to all of the services provided by the `vacuum` component (`turn_on`, `turn_off`, `start_pause`, `stop`, `return_to_home`, `locate`, `set_fan_speed` and `send_command`), the `xiaomi` platform introduces specific services to access the remote control mode of the robot. These are: - `xiaomi_remote_control_start` - `xiaomi_remote_control_stop` @@ -62,8 +58,7 @@ services to access the remote control mode of the robot. These are: ### {% linkable_title Service `vacuum/xiaomi_remote_control_start` %} -Start the remote control mode of the robot. You can then move it with -`remote_control_move`; when done, call `remote_control_stop`. +Start the remote control mode of the robot. You can then move it with `remote_control_move`; when done, call `remote_control_stop`. | Service data attribute | Optional | Description | |---------------------------|----------|-------------------------------------------------------| @@ -79,8 +74,7 @@ Exit the remote control mode of the robot. ### {% linkable_title Service `vacuum/xiaomi_remote_control_move` %} -Remote control the robot. Please ensure you first set it in remote control -mode with `remote_control_start`. +Remote control the robot. Please ensure you first set it in remote control mode with `remote_control_start`. | Service data attribute | Optional | Description | |---------------------------|----------|-------------------------------------------------------| @@ -103,9 +97,8 @@ Enter remote control mode, make one move, stop, and exit remote control mode. ## {% linkable_title Attributes %} -In addition to [all of the attributes provided by the `vacuum` component](https://home-assistant.io/components/vacuum/#attributes), -(`battery_icon`, `cleaned_area`, `fan_speed`, `fan_speed_list`, `status`, and -`params`), the `xiaomi` platform introduces specific attributes. These are: +In addition to [all of the attributes provided by the `vacuum` component](/components/vacuum/#attributes), +(`battery_icon`, `cleaned_area`, `fan_speed`, `fan_speed_list`, `status`, and `params`), the `xiaomi` platform introduces specific attributes. These are: - `cleaning_time` - `do_not_disturb` @@ -236,7 +229,7 @@ To fetch the token follow these instructions depending on your mobile phone plat 3. Get ADB f.e. `apt-get install android-tools-adb` 4. `adb devices` should list your device 5. `adb root` (does work for development builds only: ones with `ro.debuggable=1`) -6. `adb shell` +6. `adb shell` (for those using Magisk based root the previous command won't work. After entering a shell, type `su` to enter the root shell) 7. `echo "select name,localIP,token from devicerecord;" | sqlite3 /data/data/com.xiaomi.smarthome/databases/miio2.db` returns a list of all registered devices including IP address and token. #### {% linkable_title iOS %} From 7f711ea1eacf27a0a87488e1aa54e20f5dee6223 Mon Sep 17 00:00:00 2001 From: Niklas V Date: Tue, 6 Mar 2018 23:30:39 +0100 Subject: [PATCH 520/993] Added port 3307 to Maira DB (#4743) Maria DB 10 have changed port from 3306 that Maria DB are using and is standard in this component. Maria DB is using port 3307 instead and that need to be added in the configuration to work. I have added a note in the description to add the port to the server_ip. --- source/_components/recorder.markdown | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/source/_components/recorder.markdown b/source/_components/recorder.markdown index b0d4227506..6e51c65382 100644 --- a/source/_components/recorder.markdown +++ b/source/_components/recorder.markdown @@ -157,6 +157,8 @@ If the `recorder` component is activated then some components support `restore_s | MS SQL Server | `mssql+pymssql://user:pass@SERVER_IP/DB_NAME?charset=utf8` |

    +If you use MariaDB 10 you need to add port 3307 to the SERVER_IP, e.g., `mysql://user:password@SERVER_IP:3307/DB_NAME?charset=utf8`. + +If you are running a database server instance on the same server as Home Assistant then you must ensure that this service starts before Home Assistant. For a Linux instance running Systemd (Raspberry Pi, Debian, Ubuntu and others) then you should edit the service file. ```bash @@ -176,7 +178,6 @@ Save the file then reload `systemctl`: ```bash $ sudo systemctl daemon-reload ``` -

    ## {% linkable_title Installation notes %} From 91a0bab2127c8e311e702cd5107536d7d96379da Mon Sep 17 00:00:00 2001 From: Christopher Vella <1883514+chrisvella@users.noreply.github.com> Date: Wed, 7 Mar 2018 09:31:04 +1100 Subject: [PATCH 521/993] Current Mi-Home app does not store the token with the db (#4844) Added some instructions for downgrading the apk to retrieve the token. The current root method does not work with the latest version of the app. I have not tested iOS but I assume the same would be true for all platforms/methods. I suggested apkmirror because they do signed builds and we want to avoid newbies grabbing malware. --- source/_components/vacuum.xiaomi_miio.markdown | 2 ++ 1 file changed, 2 insertions(+) diff --git a/source/_components/vacuum.xiaomi_miio.markdown b/source/_components/vacuum.xiaomi_miio.markdown index 3c3b624e8f..49b1c9b132 100644 --- a/source/_components/vacuum.xiaomi_miio.markdown +++ b/source/_components/vacuum.xiaomi_miio.markdown @@ -126,6 +126,8 @@ The following table shows the units of measurement for each attribute: ## {% linkable_title Retrieving the Access Token %}

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

    From 6bfd606ebaf66bc6857d3b6103a5bfac5ca8ed3e Mon Sep 17 00:00:00 2001 From: Luca Adrian Lindhorst Date: Wed, 7 Mar 2018 03:55:24 +0100 Subject: [PATCH 522/993] - Updated howto for google_assistant setup, the process is now easier, so some steps could be removed. --- source/_components/google_assistant.markdown | 76 +++++++------------- 1 file changed, 25 insertions(+), 51 deletions(-) diff --git a/source/_components/google_assistant.markdown b/source/_components/google_assistant.markdown index 50c311a624..910008678d 100644 --- a/source/_components/google_assistant.markdown +++ b/source/_components/google_assistant.markdown @@ -135,58 +135,32 @@ If you're not using Linux, you can use sites such as [this one](https://www.brow ### {% linkable_title Setup %} -1. Download the [gactions CLI](https://developers.google.com/actions/tools/gactions-cli) to be used later. You can download and run this anywhere and on any machine. Just remember where you put it for later and don't forget to run `chmod +x gactions` to make it executable on Mac or Linux. -2. Create a new file named `project.json` (in the same directory you downloaded `gactions` to) and replace the `[YOUR HOME ASSISTANT URL:PORT]` below with the URL you use to access Home Assistant. - Note: This must be an HTTPS URL to work. Don't forget to include the port number if you're not using port 443. - -```json -{ - "actions": [{ - "name": "actions.devices", - "deviceControl": { - }, - "fulfillment": { - "conversationName": "automation" - } - }], - "conversations": { - "automation": - { - "name": "automation", - "url": "https://[YOUR HOME ASSISTANT URL:PORT]/api/google_assistant" - } - } -} -``` - -3. Create a new project in the [developer console](https://console.actions.google.com/). +1. Create a new project in the [developer console](https://console.actions.google.com/). a. Add/Import project - b. Go to Build under the Actions SDK box - c. Copy the command that looks like: - - `gactions update --action_package PACKAGE_NAME --project doctest-2d0b8` -4. Replace `PACKAGE_NAME` with `project.json` and run that command in a console from the same directory you saved `project.json` in (you'll need to put `./` before `gactions` so that it reads `./gactions` if you're running it on Linux or Windows). It should output a URL like `https://console.actions.google.com/project/doctest-2d0b8/overview` - go there. -5. You'll need to fill out most of the information on that page, but none of it really matters since you won't be addressing the App directly, only through the Smart Home functionality built into Google Assistant. -6. The final item on that page `Account linking` is required for your app to interact with Home Assistant. - 1. Grant type: `Implicit` - 2. Client ID: The `client_id` from your Home Assistant configuration above - 3. Authorization URL (replace with your actual URL): `https://[YOUR HOME ASSISTANT URL]/api/google_assistant/auth`. If you have set `api_password:` add this password to the URL `https://[YOUR HOME ASSISTANT URL]/api/google_assistant/auth?api_password=[YOUR API PASSWORD]`) - 4. Configure your client. Add scopes for `email` and `name`. - 5. Testing instructions: Enter anything. It doesn't matter since you won't submit this app. -7. Back on the main app draft page. Click `Test Draft`. That will take you to the simulator (which won't work so just close that window). -8. If you haven't already added the component configuration to `configuration.yaml` and restarted Home Assistant, you'll be unable to continue until you have. -8. Open the Google Assistant app and go into `Settings > Home Control` -9. Click the `+` sign, and near the bottom, you should have `[test] your app name`. Selecting that should lead to you the screen where you can set rooms for your devices or nicknames for your devices. -10. If you want to allow other household users to control the devices: - 1. Go to the developer console using the address from point 4. - 2. Under the gear icon, click `Permissions` - 3. Click `Add`, type the new user's e-mail address and choose `Project -> Editor` role - 4. Have the new user go to [developer console](https://console.actions.google.com/) and repeat steps starting from point 7. -11. If you want to use the `google_assistant.request_sync` service, to update devices without unlinking and relinking, in Home Assistant, then enable Homegraph API for your project: - 1. Go to the [cloud console](https://console.cloud.google.com/apis/api/homegraph.googleapis.com/overview) - 2. Select your project and click Enable Homegraph API - 3. Go to Credentials and select API Key from Create Credentials - 4. Note down the generated API Key and use this in the configuration + b. Click on `BUILD` on the `Smart home` card + c. Type in your home assistant url: `https://[YOUR HOME ASSISTANT URL:PORT]/api/google_assistant`, replace the `[YOUR HOME ASSISTANT URL:PORT]` with the domain / ip address and the port under which your Home Assistant is reachable. + d. Click `Done` +2. You'll need to fill out most of the information on that page, but none of it really matters since you won't be addressing the App directly, only through the Smart Home functionality built into Google Assistant. +3. The final item on that page `Account linking` is required for your app to interact with Home Assistant. + a. Grant type: `Implicit` + b. Client ID: The `client_id` from your Home Assistant configuration above + c. Authorization URL (replace with your actual URL): `https://[YOUR HOME ASSISTANT URL]/api/google_assistant/auth`. If you have set `api_password:` add this password to the URL `https://[YOUR HOME ASSISTANT URL]/api/google_assistant/auth?api_password=[YOUR API PASSWORD]`) + d. Configure your client. Add scopes for `email` and `name`. + e. Testing instructions: Enter anything. It doesn't matter since you won't submit this app. +4. Back on the main app draft page. Click `Test Draft`. That will take you to the simulator (which won't work so just close that window). +5. If you haven't already added the component configuration to `configuration.yaml` and restarted Home Assistant, you'll be unable to continue until you have. +6. Open the Google Assistant app and go into `Settings > Home Control` +7. Click the `+` sign, and near the bottom, you should have `[test] your app name`. Selecting that should lead you the screen where you can set rooms for your devices or nicknames for your devices. +8. If you want to allow other household users to control the devices: + a. Go to the developer console using the address from point 4. + b. Under the gear icon, click `Permissions` + c. Click `Add`, type the new user's e-mail address and choose `Project -> Editor` role + d. Have the new user go to [developer console](https://console.actions.google.com/) and repeat steps starting from point +9. If you want to use the `google_assistant.request_sync` service, to update devices without unlinking and relinking, in Home Assistant, then enable Homegraph API for your project: + a. Go to the [cloud console](https://console.cloud.google.com/apis/api/homegraph.googleapis.com/overview) + b. Select your project and click Enable Homegraph API + c. Go to Credentials and select API Key from Create Credentials + d. Note down the generated API Key and use this in the configuration ### {% linkable_title Troubleshooting the request_sync service %} From 4d6836d84066889633dd27ee68fb054547548971 Mon Sep 17 00:00:00 2001 From: maxclaey Date: Wed, 7 Mar 2018 13:40:42 +0100 Subject: [PATCH 523/993] Added new supported devices (#4838) Add support for switches, remotes, alarm control panels and thermostats --- source/_components/homekit.markdown | 3 +++ 1 file changed, 3 insertions(+) diff --git a/source/_components/homekit.markdown b/source/_components/homekit.markdown index e67fcd744c..ebb4b6ccd4 100644 --- a/source/_components/homekit.markdown +++ b/source/_components/homekit.markdown @@ -57,7 +57,10 @@ The following components are currently supported: | Component | Type Name | Description | | --------- | --------- | ----------- | +| alarm_control_panel | SecuritySystem | All security systems. | +| climate | Thermostat | All climate devices. | | cover | Window | All covers that support `set_cover_position`. | | sensor | TemperatureSensor | All sensors that have `Celsius` and `Fahrenheit` as their `unit_of_measurement`. | +| switch/remote | Switch | All switches or remotes (represented as switches). |

    Currently only devices that are setup when Home Assistant is starting can be exposed to `HomeKit`. This means that especially `Z-Wave` components are currently not supported, since they will be setup afterwards. We are working on a solution for this problem.

    From b3d7794354dee75ccf9b39fba26bd8c40fce5157 Mon Sep 17 00:00:00 2001 From: Niklas Wagner Date: Wed, 7 Mar 2018 14:08:41 +0100 Subject: [PATCH 524/993] Update date; current state of OpenZWave and S2 Source: - https://groups.google.com/d/msg/openzwave/nK6Pw2vwoZQ/9rXQYix2AQAJ - https://github.com/OpenZWave/open-zwave/commits/master --- source/_docs/z-wave/devices.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_docs/z-wave/devices.markdown b/source/_docs/z-wave/devices.markdown index 13d2966b4f..92d43f0094 100644 --- a/source/_docs/z-wave/devices.markdown +++ b/source/_docs/z-wave/devices.markdown @@ -39,7 +39,7 @@ The key improvements are: ### {% linkable_title Z-Wave Security 2 %} -From 2 April 2017 all newly approved Z-Wave devices will have to support the Security 2 (S2) framework. At the time of writing this (September 2017) OpenZWave does not support the S2 framework. +From 2 April 2017 all newly approved Z-Wave devices will have to support the Security 2 (S2) framework. At the time of writing this (March 2018) OpenZWave does not support the S2 framework. ## {% linkable_title Device power %} From c7e78ce394a603a99e1e63b0d185c00d95272072 Mon Sep 17 00:00:00 2001 From: Philipp Wensauer Date: Wed, 7 Mar 2018 15:35:55 +0100 Subject: [PATCH 525/993] Current (#4854) * Using vectorized version. * Vectorized it. * Forgot to upload... --- source/developers/architecture.markdown | 2 +- .../images/architecture/ha_architecture.svg | 856 ++++++++++++++++++ 2 files changed, 857 insertions(+), 1 deletion(-) create mode 100644 source/images/architecture/ha_architecture.svg diff --git a/source/developers/architecture.markdown b/source/developers/architecture.markdown index c92361a4fc..afe8a21ef9 100644 --- a/source/developers/architecture.markdown +++ b/source/developers/architecture.markdown @@ -35,7 +35,7 @@ The Home Assistant core is responsible for Home Control. Home Assistant contains

    - + Overview of the Home Assistant core architecture

    diff --git a/source/images/architecture/ha_architecture.svg b/source/images/architecture/ha_architecture.svg new file mode 100644 index 0000000000..dbe41b93bc --- /dev/null +++ b/source/images/architecture/ha_architecture.svg @@ -0,0 +1,856 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + Home AssistantCore Architecture + + Timer + + Event Bus + + StateMachine + listen for events/fire event + + ServiceRegistry + + + + Light + + + + Many more... + Device Tracker + Switch + Components + set state + + + + + + + + call event listeners + publishservice + callservice + + + call_serviceevents + + service_calledevents + time_changedevents + state_changedevents + + From 5b8ec9986fb9ed148c8e2690e184af56d28faad6 Mon Sep 17 00:00:00 2001 From: Jon Maddox Date: Wed, 7 Mar 2018 12:41:56 -0500 Subject: [PATCH 526/993] add docs for Channels media player (#4842) * add docs for Channels media player * note about favorite channels * Minor cleanup --- .../media_player.channels.markdown | 61 ++++++++++++++++++ source/images/supported_brands/channels.png | Bin 0 -> 278334 bytes 2 files changed, 61 insertions(+) create mode 100644 source/_components/media_player.channels.markdown create mode 100644 source/images/supported_brands/channels.png diff --git a/source/_components/media_player.channels.markdown b/source/_components/media_player.channels.markdown new file mode 100644 index 0000000000..12138976e2 --- /dev/null +++ b/source/_components/media_player.channels.markdown @@ -0,0 +1,61 @@ +--- +layout: page +title: "Channels" +description: "Instructions on how to integrate Channels into Home Assistant." +date: 2018-03-06 11:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: channels.png +ha_category: Media Player +ha_release: 0.65.0 +ha_iot_class: "Local Polling" +--- + + +The Channels platform allows you to control [Channels](https://getchannels.com/) from Home Assistant. Play, pause, seek, or skip commercials on an instance of Channels that is running on your network. + +Your favorite channels will appear as sources in the Source List in Home Assistant. + +To add Channels to your installation, add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +media_player: + - platform: channels + name: Family Room Channels + host: 192.168.1.50 +``` + +Configuration variables: + +- **host** (*Required*): The IP of the device running Channels, e.g., 192.168.1.50 +- **port** (*Optional*): The port where Channels is accessible, defaults to 57000. +- **name** (*Optional*): The name of the Channels instance in Home Assistant, eg. Family Room Channels. Defaults to Channels. + +### {% linkable_title Service `channels_seek_forward` %} + +Seek forward by the number of seconds currently set in settings on the instance of Channels. + +| Service data attribute | Optional | Description | +| ---------------------- | -------- | ----------- | +| `entity_id` | no | String that points at `entity_id` of Channels app. + + +### {% linkable_title Service `channels_seek_backward` %} + +Seek backward by the number of seconds currently set in settings on the instance of Channels. + +| Service data attribute | Optional | Description | +| ---------------------- | -------- | ----------- | +| `entity_id` | no | String that points at `entity_id` of Channels app. + +### {% linkable_title Service `channels_seek_by` %} + +Seek forward or backward by a provided number of seconds. + +| Service data attribute | Optional | Description | +| ---------------------- | -------- | ----------- | +| `entity_id` | no | String that points at `entity_id` of Channels app. +| `seconds` | no | Number of seconds to seek in the timeline by. Negative seconds seeks backwards. diff --git a/source/images/supported_brands/channels.png b/source/images/supported_brands/channels.png new file mode 100644 index 0000000000000000000000000000000000000000..a0eb0435d7b616501a03ca172aca457e0321c56f GIT binary patch literal 278334 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
    E*a^=ghpduLFGnm(!y!yG{{F{#!MT;715 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%0DRy6PHPwb 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 literal 0 HcmV?d00001 From 7f13d4f50013e0d13651431b6e3c599180a1e528 Mon Sep 17 00:00:00 2001 From: Andy Shilton Date: Thu, 8 Mar 2018 00:21:14 +0000 Subject: [PATCH 527/993] Spelling mistake (#4858) "simple" to "simply" --- source/_components/sensor.worldclock.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/sensor.worldclock.markdown b/source/_components/sensor.worldclock.markdown index c195fe37ce..e9f4ac8f9b 100644 --- a/source/_components/sensor.worldclock.markdown +++ b/source/_components/sensor.worldclock.markdown @@ -14,7 +14,7 @@ ha_release: pre 0.7 --- -The `worldclock` sensor platform simple displays the current time in a different time zone +The `worldclock` sensor platform simply displays the current time in a different time zone To enable this sensor in your installation, add the following to your `configuration.yaml` file: From ada58a39cf5bfc75e875efcd610fce09ae2c506f Mon Sep 17 00:00:00 2001 From: Otto Winter Date: Fri, 9 Mar 2018 03:42:43 +0100 Subject: [PATCH 528/993] Add light.group platform docs (#4739) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Add Light Group platform docs * Group Light →Light Group * A picture tells a thousand words * Update for Light Group default name change. See https://github.com/home-assistant/home-assistant/pull/12962 --- source/_components/light.group.markdown | 48 +++++++++++++++++++++++ source/images/components/light/group.png | Bin 0 -> 18785 bytes 2 files changed, 48 insertions(+) create mode 100644 source/_components/light.group.markdown create mode 100644 source/images/components/light/group.png diff --git a/source/_components/light.group.markdown b/source/_components/light.group.markdown new file mode 100644 index 0000000000..2b4d303576 --- /dev/null +++ b/source/_components/light.group.markdown @@ -0,0 +1,48 @@ +--- +layout: page +title: "Light Group" +description: "Instructions for how to setup light groups within Home Assistant." +date: 2018-02-23 11:41 +sidebar: true +comments: false +sharing: true +footer: true +ha_category: Light +ha_release: 0.65 +ha_iot_class: "Local Push" +logo: home-assistant.png +--- + +The group light platform lets you combine multiple lights into one entity. All child lights of a light group can still be used as usual, but controlling the state of the grouped light will forward the command to each child light. + +To enable this platform in your installation, add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +light: + - platform: group + name: Kitchen Lights + entities: + - light.kitchen_ceiling_lights + - light.kitchen_under_cabinet_lights + - light.kitchen_spot_lights + - light.pendant_lights +``` + +{% configuration %} + name: + description: The name of the light group. Defaults to "Light Group". + required: false + type: string + entities: + description: A list of entities to be included in the light group. + required: true + type: string list +{% endconfiguration %} + +

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

    + +The supported features of all lights will be added together. For example, if you have one RGB light in a group of otherwise brightness-only lights, the light group will be shown with a color picker. diff --git a/source/images/components/light/group.png b/source/images/components/light/group.png new file mode 100644 index 0000000000000000000000000000000000000000..00abf866382652ad1ffb43cd01d6925a62ad032f GIT binary patch literal 18785 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 literal 0 HcmV?d00001 From df37e54e9e889344136e0e8fd40e3e6c98516242 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Fri, 9 Mar 2018 07:45:56 -0800 Subject: [PATCH 529/993] Update rack-protection --- Gemfile.lock | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index 4a9684644f..9b9a87a02c 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -68,8 +68,8 @@ GEM method_source (~> 0.8.1) slop (~> 3.4) public_suffix (3.0.0) - rack (1.6.8) - rack-protection (1.5.3) + rack (1.6.9) + rack-protection (1.5.5) rack rake (10.5.0) rb-fsevent (0.10.2) From fdcf17802dac8d047d28fbdff1f51a41b6bcae1f Mon Sep 17 00:00:00 2001 From: Sebastian Muszynski Date: Fri, 9 Mar 2018 19:05:29 +0100 Subject: [PATCH 530/993] Xiaomi MiIO Light: Flag the device as unavailable if not reachable (#4699) * Configuration key "model" and "xiaomi_miio_set_delayed_turn_off" service added. * Service parameter renamed. * New device model (philips.light.zyceiling) added. * Service parameter updated. * Format of the services updated. Configuration schema added. * Missing supported device added. --- source/_components/light.xiaomi_miio.markdown | 35 +++++++++++++++++-- 1 file changed, 33 insertions(+), 2 deletions(-) diff --git a/source/_components/light.xiaomi_miio.markdown b/source/_components/light.xiaomi_miio.markdown index b1428017a5..3af241a04e 100644 --- a/source/_components/light.xiaomi_miio.markdown +++ b/source/_components/light.xiaomi_miio.markdown @@ -13,7 +13,7 @@ ha_version: 0.53 ha_iot_class: "Local Polling" --- -The `xiaomi_miio` platform allows you to control the state of your Xiaomi Philips LED Ball Lamp and Xiaomi Philips LED Ceiling Lamp. +The `xiaomi_miio` platform allows you to control the state of your Xiaomi Philips LED Ball Lamp, Xiaomi Philips LED Ceiling Lamp and Xiaomi Philips Eyecare Lamp 2. Currently, the supported features are `on`, `off`, `set_cct` (colortemp) , `set_bright` (brightness). @@ -28,12 +28,34 @@ light: name: Xiaomi Philips Smart LED Ball host: 192.168.130.67 token: YOUR_TOKEN + model: philips.light.bulb ``` Configuration variables: - **host** (*Required*): The IP of your light. - **token** (*Required*): The API token of your light. - **name** (*Optional*): The name of your light. +- **model** (*Optional*): The model of your light. Valid values are `philips.light.bulb`, `philips.light.sread1`, `philips.light.ceiling` and `philips.light.zyceiling`. This setting can be used to bypass the device model detection and is recommended if your device isn't always available. + +{% configuration %} +host: + description: The IP address of your device. + required: true + type: string +token: + description: The API token of your device. + required: true + type: string +name: + description: The name of your device. + required: false + type: string + default: Xiaomi Philips Light +model: + description: The model of your device. + required: false + type: string +{% endconfiguration %} ## {% linkable_title Platform Services %} @@ -43,5 +65,14 @@ Set one of the 4 available fixed scenes. | Service data attribute | Optional | Description | |---------------------------|----------|-------------------------------------------------------| -| `entity_id` | yes | Only act on specific light. Else targets all. | +| `entity_id` | yes | Only act on a specific light. Else targets all. | | `scene` | no | Scene, between 1 and 4. | + +### {% linkable_title Service `light.xiaomi_miio_set_delayed_turn_off` %} + +Delayed turn off. + +| Service data attribute | Optional | Description | +|---------------------------|----------|-------------------------------------------------------| +| `entity_id` | yes | Only act on a specific light. Else targets all. | +| `time_period` | no | Time period for the delayed turn off. | From 82398a9bc9b75bc0207b441edb57962ba56fc1fe Mon Sep 17 00:00:00 2001 From: Bertbert <7685189+bertbert72@users.noreply.github.com> Date: Fri, 9 Mar 2018 18:07:09 +0000 Subject: [PATCH 531/993] =?UTF-8?q?Add=20=E2=80=98unit=5Fsystem=E2=80=99?= =?UTF-8?q?=20configuration=20variable=20(#4469)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Add ‘unit_system’ configuration variable * Update sensor.fitbit.markdown --- source/_components/sensor.fitbit.markdown | 1 + 1 file changed, 1 insertion(+) diff --git a/source/_components/sensor.fitbit.markdown b/source/_components/sensor.fitbit.markdown index 1da5a51836..4ea3e71cd4 100644 --- a/source/_components/sensor.fitbit.markdown +++ b/source/_components/sensor.fitbit.markdown @@ -36,6 +36,7 @@ Configuration variables: - **monitored_resources** (*Optional*): Resource to monitor. Defaults to `activities/steps`. - **clock_format** (*Optional*): Format to use for `sleep/startTime` resource. Accepts `12H` or `24H`. Defaults to `24H`. +- **unit_system** (*Optional*): Unit system to use for measurements. Accepts `default`, `metric`, `en_US` or `en_GB`. Defaults to `default`. Below is the list of resources that you can add to `monitored_resources`. One sensor is exposed for every resource. From 19001f9e242cc9982192e83ea483c4d89e40d863 Mon Sep 17 00:00:00 2001 From: karlkar Date: Fri, 9 Mar 2018 19:07:41 +0100 Subject: [PATCH 532/993] Added support for multiple onvif profiles (#4445) * Added support for multiple onvif profiles Related to pull request https://github.com/home-assistant/home-assistant/pull/11651 * :pencil2: Spelling & grammar fixes * Removed info about profile data in attribute Removed information about profile data in attributes, as it is not going to be implemented. --- source/_components/camera.onvif.markdown | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/source/_components/camera.onvif.markdown b/source/_components/camera.onvif.markdown index f4281405bc..6b772dfda6 100644 --- a/source/_components/camera.onvif.markdown +++ b/source/_components/camera.onvif.markdown @@ -30,9 +30,12 @@ Configuration variables: - **name** (*Optional*): Override the name of your camera. - **username** (*Optional*): The username for the camera. - **password** (*Optional*): The password for the camera. -- **port** (*Optional*): The port for the camera. This defaults to 5000 +- **port** (*Optional*): The port for the camera. This defaults to 5000. +- **profile** (*Optional*): Video profile that will be used to obtain the stream. This defaults to 0. More details below. - **extra_arguments** (*Optional*): Extra options to pass to `ffmpeg`, e.g. image quality or video filter options. More details in [FFmpeg component](/components/ffmpeg). +Most of the Onvif cameras support more than one audio/video Profile. Each profile provides different image quality. Usually, the first profile has the highest quality, and it is the profile used by default. However, you may want to use a lower quality image. One of the reasons may be that your hardware isn't able to render the highest quality image in real-time - especially when running on Raspberry Pi. Therefore you can choose which profile do you want to use by setting in config `profile` variable. + ### {% linkable_title Service `camera.onvif_ptz` %} If your ONVIF camera supports PTZ, you will be able to pan, tilt or zoom your camera. From 6536b74aa4b50de4c76a246c6139d051e67d7657 Mon Sep 17 00:00:00 2001 From: Jeroen ter Heerdt Date: Fri, 9 Mar 2018 19:09:31 +0100 Subject: [PATCH 533/993] Redesign of Egardia component and platform. (#4803) * Updating docs related to PR #11994. * Update binary_sensor.egardia.markdown * Update binary_sensor.egardia.markdown * Update egardia.markdown * Update egardia.markdown --- .../alarm_control_panel.egardia.markdown | 56 +--------------- .../binary_sensor.egardia.markdown | 19 ++++++ source/_components/egardia.markdown | 67 +++++++++++++++++++ 3 files changed, 88 insertions(+), 54 deletions(-) create mode 100644 source/_components/binary_sensor.egardia.markdown create mode 100644 source/_components/egardia.markdown diff --git a/source/_components/alarm_control_panel.egardia.markdown b/source/_components/alarm_control_panel.egardia.markdown index 3fdd4d5753..314a1fcd11 100644 --- a/source/_components/alarm_control_panel.egardia.markdown +++ b/source/_components/alarm_control_panel.egardia.markdown @@ -12,57 +12,5 @@ ha_release: 0.51 ha_category: Alarm --- -The `egardia` platform enables the ability to control an [Egardia](http://egardia.com/)/[Woonveilig](http://woonveilig.nl) control panel. These alarm panels are known under different brand names across the world, including Woonveilig in the Netherlands. This was tested on the GATE-01, GATE-02 and GATE-03 versions of the Egardia/Woonveilig platform. - -You will need to know the IP of your alarm panel on your local network. Test if you can login to the panel by browsing to the IP address and log in using your Egardia/Woonveilig account. - -To enable the integration with your alarm panel, add the following lines to your `configuration.yaml` file: - -```yaml -# Example configuration.yaml entry -alarm_control_panel: - - platform: egardia - host: YOUR_HOST - username: YOUR_USERNAME - password: YOUR_PASSWORD -``` - -Configuration variables: - -- **host** (*Required*): The local IP address of the Egardia/Woonveilig alarm panel. -- **username** (*Required*): Username for the Egardia/Woonveilig account. -- **password** (*Required*): Password for Egardia/Woonveilig account. -- **version** (*Optional*): The version of the Egardia system. `GATE-01`, `GATE-02` and `GATE-03` are currently supported. Defaults to `GATE-01`. -- **port** (*Optional*): The port of the alarm panel. Defaults to 80. -- **name** (*Optional*): Name to use for the alarm panel. Defaults to `Egardia`. -- **report_server_enabled** (*Optional*): Enable reporting by server. Defaults to `False`. -- **report_server_port** (*Optional*): Port of the Egardia server. Defaults to 52010. -- **report_server_codes** list (*Optional*): List of codes for the different states. - -Note that this basic configuration will only enable you to read the armed/armed away/disarmed status of your alarm and will **not** update the status if the alarm is triggered. This is because of how Egardia built their system. The alarm triggers normally go through their servers. -You can change this, however, using the following procedure. This is a more advanced configuration. - -1. Log in into your alarm system's control panel. You will need to access http://[IP of your control panel]. You know this already since you need it in the basic configuration from above. Log in to the control panel with your Egardia/Woonveilig username and password. -1. Once logged in, go to *System Settings*, *Report* and change the Server Address for your primary server to the IP or hostname of your Home Assistant machine. You can leave the port number set to 52010 or change it to anything you like. **Make sure to change the settings of the primary server otherwise the messages will not come through. Note that this will limit (or fully stop) the number of alarm messages you will get through Egardia's / Woonveilig services.** Maybe, that is just what you want. Make sure to save your settings by selecting 'OK'. -1. On your Home Assistant machine run `$ sudo python3 egardiaserver.py`. Refer to the [python-egardia repository](https://github.com/jeroenterheerdt/python-egardia) for detailed documentation on parameters. This will receive status codes from your alarm control panel and display them. You will need the codes to include in your configuration.yaml. Make sure to change the status of your alarm to all states (disarm, arm, home) by all means possible (all users, remotes, web login, app) as well as trigger the alarm in all ways possible to get 100% coverage. **Before triggering the alarm it might be good to disable the siren temporarily (can be done in Panel Settings).** -1. Once you have the codes, update your `configuration.yaml`: - ```yaml - # Example configuration.yaml entry - alarm_control_panel: -  - platform: egardia -   host: YOUR_HOST -   username: YOUR_USERNAME -   password: YOUR_PASSWORD - report_server_enabled: True - report_server_port: PORT_OF_EGARDIASERVER (optional, defaults to 52010) - report_server_codes: - arm: XXXXXXXXXXXXXXXX, XXXXXXXXXXXXXXXX - disarm: XXXXXXXXXXXXXXXX, XXXXXXXXXXXXXXXX - home: XXXXXXXXXXXXXXXX - triggered: XXXXXXXXXXXXXXXX, XXXXXXXXXXXXXXXX, XXXXXXXXXXXXXXXX - ignore: XXXXXXXXXXXXXXXX - ``` - -Note that for *triggered*, *arm* and *disarm* multiple codes can be entered since each sensor triggers with a different code and each user of the system has its own arm and disarm codes. Also note that your system will do regular system checks which will be reported as well. Since Home Assistant provides no way of handling them properly, you can enter those codes as *ignore* (again, multiple codes can be used here). The egardia component will ignore these codes and continue returning the old status if it receives any of the codes that are listed as ignore. This is useful for example when you have armed your alarm at night: normally a system check will occur at least once during the night and if that code is not specified anywhere Home Assistant will set the status of the alarm to its default, which is unarmed. This is in fact wrong. Listing the code as ignore changes this behavior and Home Assistant will continue to show the status the alarm is in (disarm, arm, home, triggered) even when system checks occur. - -5. Test your setup and enjoy. The component will update if the alarm status changes, including triggers. You can use this to build your own automations and send notifications as you wish. *Note*: previous versions required a separate egardiaserver to be set up. This is no longer necessary and corresponding system services can be removed (using systemctl). +The `egardia` platform allows you to integrate your [Egardia](http://www.egardia.com)/[Woonveilig](http://www.woonveilig.nl) alarm control panel in Home Assistant. +You will need to set up your [Egardia hub](/components/egardia/). diff --git a/source/_components/binary_sensor.egardia.markdown b/source/_components/binary_sensor.egardia.markdown new file mode 100644 index 0000000000..8df482bf5b --- /dev/null +++ b/source/_components/binary_sensor.egardia.markdown @@ -0,0 +1,19 @@ +--- +layout: page +title: "Egardia Binary Sensor" +description: "Instructions how to integrate Egardia / Woonveilig binary sensors into Home Assistant." +date: 2018-03-02 09:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: egardia.png +ha_release: 0.65 +ha_category: Binary Sensor +ha_iot_class: "Polling" +--- + +The `egardia` platform allows you to get data from your [Egardia](http://www.egardia.com)/[Woonveilig](http://www.woonveilig.nl) binary sensors from within Home Assistant. +Currently only door contacts are supported. IR sensors are not supported and will probably never be since their status cannot be read outside of the alarm control panel. Smoke sensors and others might be added but currently are not supported. + +You will need to set up your [Egardia hub](/components/egardia/). diff --git a/source/_components/egardia.markdown b/source/_components/egardia.markdown new file mode 100644 index 0000000000..068920b8ab --- /dev/null +++ b/source/_components/egardia.markdown @@ -0,0 +1,67 @@ +--- +layout: page +title: "Egardia" +description: "Instructions how to setup Egardia / Woonveilig within Home Assistant." +date: 2018-03-02 09:00 +sidebar: true +comments: false +sharing: true +footer: true +ha_category: Hub +ha_release: 0.65 +logo: egardia.png +--- + +The `egardia` platform enables the ability to control an [Egardia](http://egardia.com/)/[Woonveilig](http://woonveilig.nl) control panel. These alarm panels are known under different brand names across the world, including Woonveilig in the Netherlands. This was tested on the WL-1716, GATE-01, GATE-02 and GATE-03 versions of the Egardia/Woonveilig platform. Not only will you integrate your alarm control panel, supported sensors (door contacts at this moment) will be added automatically (hidden by default). + +You will need to know the IP of your alarm panel on your local network. Test if you can login to the panel by browsing to the IP address and log in using your Egardia/Woonveilig account. + +To enable the integration with your alarm panel, add the following lines to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +egardia: + host: YOUR_HOST + username: YOUR_USERNAME + password: YOUR_PASSWORD +``` + +Configuration variables: + +- **host** (*Required*): The local IP address of the Egardia/Woonveilig alarm panel. +- **username** (*Required*): Username for the Egardia/Woonveilig account. +- **password** (*Required*): Password for Egardia/Woonveilig account. +- **version** (*Optional*): The version of the Egardia system. `GATE-01`, `GATE-02` and `GATE-03` are currently supported. Defaults to `GATE-01`. +- **port** (*Optional*): The port of the alarm panel. Defaults to 80. +- **report_server_enabled** (*Optional*): Enable reporting by server. Defaults to `False`. +- **report_server_port** (*Optional*): Port of the Egardia server. Defaults to 52010. +- **report_server_codes** list (*Optional*): List of codes for the different states. + +Note that this basic configuration will only enable you to read the armed/armed away/disarmed status of your alarm and will **not** update the status if the alarm is triggered. This is because of how Egardia built their system. The alarm triggers normally go through their servers. +You can change this, however, using the following procedure. This is a more advanced configuration. + +1. Log in to your alarm system's control panel. You will need to access http://[IP of your control panel]. You know this already since you need it in the basic configuration from above. Log in to the control panel with your Egardia/Woonveilig username and password. +2. Once logged in, go to *System Settings*, *Report* and change the Server Address for your primary server to the IP or hostname of your Home Assistant machine. You can leave the port number set to 52010 or change it to anything you like. **Make sure to change the settings of the primary server otherwise the messages will not come through. Note that this will limit (or fully stop) the number of alarm messages you will get through Egardia's / Woonveilig services.** Maybe, that is just what you want. Make sure to save your settings by selecting 'OK'. +3. The Egardia component relies on capturing the status codes that your alarm emits when something happens (status change or trigger). These codes will be unique for every situation - i.e. the code emitted by the alarm when a sensor is triggered is unique to that sensor. Also, if you have multiple users or remotes, each remote has unique codes that are emitted by the alarm when status is changed using that remote or by that user. For the Egardia component to work correctly you will need to capture the codes. To do this, on your Home Assistant machine run `$ sudo python3 egardiaserver.py`. Refer to the [python-egardia repository](https://github.com/jeroenterheerdt/python-egardia) for detailed documentation on parameters. This will receive status codes from your alarm control panel and display them. Record the codes shown as well as the status they relate to (see step 4 below). Make sure to change the status of your alarm to all states (disarm, arm, home) by all means possible (all users, remotes, web login, app) as well as trigger the alarm in all ways possible to get 100% coverage of all the codes the alarm system generates. You will need to run this script once and stop it once you have captured all the possible codes. Also, if you ever add users, remotes or sensors to your alarm system, make sure to re-run the script to capture the extra codes so you can update your configuration (see step 4 below). **For comfort, before triggering the alarm it might be good to disable the siren temporarily (can be done in Panel Settings).** +4. Once you have the codes, update your `configuration.yaml`: + ```yaml + # Example configuration.yaml entry + egardia: +   host: YOUR_HOST +   username: YOUR_USERNAME +   password: YOUR_PASSWORD + report_server_enabled: True + report_server_port: PORT_OF_EGARDIASERVER (optional, defaults to 52010) + report_server_codes: + arm: XXXXXXXXXXXXXXXX, XXXXXXXXXXXXXXXX + disarm: XXXXXXXXXXXXXXXX, XXXXXXXXXXXXXXXX + armhome: XXXXXXXXXXXXXXXX + triggered: XXXXXXXXXXXXXXXX, XXXXXXXXXXXXXXXX, XXXXXXXXXXXXXXXX + ignore: XXXXXXXXXXXXXXXX + ``` + +Note that for all code groups (*arm*,*disarm*, etc) multiple codes can be entered since each sensor triggers with a different code and each user of the system has its own arm and disarm codes. Also note that your system will do regular system checks which will be reported as well. Since Home Assistant provides no way of handling them properly, you can enter those codes as *ignore* (again, multiple codes can be used here). The egardia component will ignore these codes and continue returning the old status if it receives any of the codes that are listed as ignore. This is useful for example when you have armed your alarm at night: normally a system check will occur at least once during the night and if that code is not specified anywhere Home Assistant will set the status of the alarm to its default, which is unarmed. This is in fact wrong. Listing the code as ignore changes this behavior and Home Assistant will continue to show the status the alarm is in (disarm, arm, home, triggered) even when system checks occur. + +5. Test your setup and enjoy. The component will update if the alarm status changes, including triggers. You can use this to build your own automations and send notifications as you wish. *Note*: previous versions required a separate egardiaserver to be set up. This is no longer necessary and corresponding system services can be removed (using systemctl). + + From 086811ddcf46ffb9ec2edac0ad46f544e2759059 Mon Sep 17 00:00:00 2001 From: Teemu R Date: Fri, 9 Mar 2018 19:28:40 +0100 Subject: [PATCH 534/993] Add sony songpal docs (#4570) * add sony songpal docs * use configuration, add a title for configuration section * remove oxford comma, add link to media_player's services * add entity_id desc for service * be more descriptive which devices are supported * Update songpal supported devices + bump version * discoverY * Update media_player.songpal.markdown * Fix invalid syntax --- .../_components/media_player.songpal.markdown | 68 ++++++++++++++++++ source/images/supported_brands/sony.png | Bin 0 -> 7152 bytes 2 files changed, 68 insertions(+) create mode 100644 source/_components/media_player.songpal.markdown create mode 100644 source/images/supported_brands/sony.png diff --git a/source/_components/media_player.songpal.markdown b/source/_components/media_player.songpal.markdown new file mode 100644 index 0000000000..65874f99b2 --- /dev/null +++ b/source/_components/media_player.songpal.markdown @@ -0,0 +1,68 @@ +--- +layout: page +title: "Sony SongPal compatible devices" +description: "Instructions how to integrate Sony Songpal devices into Home Assistant." +date: 2018-02-03 09:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: sony.png +ha_category: Media Player +ha_iot_class: "Local Polling" +ha_release: 0.65 +--- + +The `songpal` platform allows you to control Sony's Songpal ("[Audio Control API](https://developer.sony.com/develop/audio-control-api/)") compatible devices such as soundbars, AV receivers and wireless speakers from Home Assistant. + +Even when the API officially supports only a few devices (HT-ST5000, HT-MT500, HT-CT800, SRS-ZR5 and STR-DN1080), it has also been confirmed to work on others. [The list of supported devices](http://vssupport.sony.net/en_ww/device.html) from Sony's Songpal website lists devices which are likely to be compatible with this platform. + +If the platform works with your non-listed device, or you encounter bugs, please feel free to [report them upstream](https://github.com/rytilahti/python-songpal). + +A few notes: + +- The quick start-up mode has to be enabled in order to turn the device on. +- Supports currently only one output terminal, i.e. the volume control works only on the first volume controller as reported by the backend library. +- Some devices, e.g. HT-XT3, do not support decreasing the volume step-by-step correctly. +- Feel free to improve the available services! + +## {% linkable_title Configuration %} + +The platform will be loaded automatically by discovery component. If you want to manually configure it, add the following to your `configuration.yaml` file: + +```yaml +media_player: + - platform: songpal + name: my soundbar + endpoint: http://IP_ADDRESS:10000/sony +``` + +{% configuration %} +name: + description: The name to display for this device. + required: false + type: string +endpoint: + description: API endpoint of the device. + required: true + type: string +{% endconfiguration %} + +See [python-songpal's documentation](https://github.com/rytilahti/python-songpal#locating-the-endpoint) how to get your API endpoint. + +## {% linkable_title Services %} + +In addition to the general [media player services](https://home-assistant.io/components/media_player/#services), the following services are provided: + +### {% linkable_title Service `media_player/songpal_set_sound_setting` %} + +For a list of available settings and their values use [`songpal sound`](https://github.com/rytilahti/python-songpal#sound-settings) command. + +| Service data attribute | Optional | Description | +|------------------------|----------|--------------------------------------------------| +| `entity_id` | yes | Target entity, leave unset for all devices | +| `name` | no | Configuration variable, e.g. `nightmode` | +| `value` | no | New configuration value, e.g. `on` | + + + diff --git a/source/images/supported_brands/sony.png b/source/images/supported_brands/sony.png new file mode 100644 index 0000000000000000000000000000000000000000..78a8e8440b1a2c18c03bf7c2791ac9de0f673b1d GIT binary patch literal 7152 zcmV004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00002 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 mI4v+aR4_F Date: Fri, 9 Mar 2018 19:28:40 +0100 Subject: [PATCH 535/993] Add sony songpal docs (#4570) * add sony songpal docs * use configuration, add a title for configuration section * remove oxford comma, add link to media_player's services * add entity_id desc for service * be more descriptive which devices are supported * Update songpal supported devices + bump version * discoverY * Update media_player.songpal.markdown * Fix invalid syntax --- .../_components/media_player.songpal.markdown | 68 ++++++++++++++++++ source/images/supported_brands/sony.png | Bin 0 -> 7152 bytes 2 files changed, 68 insertions(+) create mode 100644 source/_components/media_player.songpal.markdown create mode 100644 source/images/supported_brands/sony.png diff --git a/source/_components/media_player.songpal.markdown b/source/_components/media_player.songpal.markdown new file mode 100644 index 0000000000..65874f99b2 --- /dev/null +++ b/source/_components/media_player.songpal.markdown @@ -0,0 +1,68 @@ +--- +layout: page +title: "Sony SongPal compatible devices" +description: "Instructions how to integrate Sony Songpal devices into Home Assistant." +date: 2018-02-03 09:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: sony.png +ha_category: Media Player +ha_iot_class: "Local Polling" +ha_release: 0.65 +--- + +The `songpal` platform allows you to control Sony's Songpal ("[Audio Control API](https://developer.sony.com/develop/audio-control-api/)") compatible devices such as soundbars, AV receivers and wireless speakers from Home Assistant. + +Even when the API officially supports only a few devices (HT-ST5000, HT-MT500, HT-CT800, SRS-ZR5 and STR-DN1080), it has also been confirmed to work on others. [The list of supported devices](http://vssupport.sony.net/en_ww/device.html) from Sony's Songpal website lists devices which are likely to be compatible with this platform. + +If the platform works with your non-listed device, or you encounter bugs, please feel free to [report them upstream](https://github.com/rytilahti/python-songpal). + +A few notes: + +- The quick start-up mode has to be enabled in order to turn the device on. +- Supports currently only one output terminal, i.e. the volume control works only on the first volume controller as reported by the backend library. +- Some devices, e.g. HT-XT3, do not support decreasing the volume step-by-step correctly. +- Feel free to improve the available services! + +## {% linkable_title Configuration %} + +The platform will be loaded automatically by discovery component. If you want to manually configure it, add the following to your `configuration.yaml` file: + +```yaml +media_player: + - platform: songpal + name: my soundbar + endpoint: http://IP_ADDRESS:10000/sony +``` + +{% configuration %} +name: + description: The name to display for this device. + required: false + type: string +endpoint: + description: API endpoint of the device. + required: true + type: string +{% endconfiguration %} + +See [python-songpal's documentation](https://github.com/rytilahti/python-songpal#locating-the-endpoint) how to get your API endpoint. + +## {% linkable_title Services %} + +In addition to the general [media player services](https://home-assistant.io/components/media_player/#services), the following services are provided: + +### {% linkable_title Service `media_player/songpal_set_sound_setting` %} + +For a list of available settings and their values use [`songpal sound`](https://github.com/rytilahti/python-songpal#sound-settings) command. + +| Service data attribute | Optional | Description | +|------------------------|----------|--------------------------------------------------| +| `entity_id` | yes | Target entity, leave unset for all devices | +| `name` | no | Configuration variable, e.g. `nightmode` | +| `value` | no | New configuration value, e.g. `on` | + + + diff --git a/source/images/supported_brands/sony.png b/source/images/supported_brands/sony.png new file mode 100644 index 0000000000000000000000000000000000000000..78a8e8440b1a2c18c03bf7c2791ac9de0f673b1d GIT binary patch literal 7152 zcmV004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00002 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 mI4v+aR4_F Date: Fri, 9 Mar 2018 19:09:31 +0100 Subject: [PATCH 536/993] Redesign of Egardia component and platform. (#4803) * Updating docs related to PR #11994. * Update binary_sensor.egardia.markdown * Update binary_sensor.egardia.markdown * Update egardia.markdown * Update egardia.markdown --- .../alarm_control_panel.egardia.markdown | 56 +--------------- .../binary_sensor.egardia.markdown | 19 ++++++ source/_components/egardia.markdown | 67 +++++++++++++++++++ 3 files changed, 88 insertions(+), 54 deletions(-) create mode 100644 source/_components/binary_sensor.egardia.markdown create mode 100644 source/_components/egardia.markdown diff --git a/source/_components/alarm_control_panel.egardia.markdown b/source/_components/alarm_control_panel.egardia.markdown index 3fdd4d5753..314a1fcd11 100644 --- a/source/_components/alarm_control_panel.egardia.markdown +++ b/source/_components/alarm_control_panel.egardia.markdown @@ -12,57 +12,5 @@ ha_release: 0.51 ha_category: Alarm --- -The `egardia` platform enables the ability to control an [Egardia](http://egardia.com/)/[Woonveilig](http://woonveilig.nl) control panel. These alarm panels are known under different brand names across the world, including Woonveilig in the Netherlands. This was tested on the GATE-01, GATE-02 and GATE-03 versions of the Egardia/Woonveilig platform. - -You will need to know the IP of your alarm panel on your local network. Test if you can login to the panel by browsing to the IP address and log in using your Egardia/Woonveilig account. - -To enable the integration with your alarm panel, add the following lines to your `configuration.yaml` file: - -```yaml -# Example configuration.yaml entry -alarm_control_panel: - - platform: egardia - host: YOUR_HOST - username: YOUR_USERNAME - password: YOUR_PASSWORD -``` - -Configuration variables: - -- **host** (*Required*): The local IP address of the Egardia/Woonveilig alarm panel. -- **username** (*Required*): Username for the Egardia/Woonveilig account. -- **password** (*Required*): Password for Egardia/Woonveilig account. -- **version** (*Optional*): The version of the Egardia system. `GATE-01`, `GATE-02` and `GATE-03` are currently supported. Defaults to `GATE-01`. -- **port** (*Optional*): The port of the alarm panel. Defaults to 80. -- **name** (*Optional*): Name to use for the alarm panel. Defaults to `Egardia`. -- **report_server_enabled** (*Optional*): Enable reporting by server. Defaults to `False`. -- **report_server_port** (*Optional*): Port of the Egardia server. Defaults to 52010. -- **report_server_codes** list (*Optional*): List of codes for the different states. - -Note that this basic configuration will only enable you to read the armed/armed away/disarmed status of your alarm and will **not** update the status if the alarm is triggered. This is because of how Egardia built their system. The alarm triggers normally go through their servers. -You can change this, however, using the following procedure. This is a more advanced configuration. - -1. Log in into your alarm system's control panel. You will need to access http://[IP of your control panel]. You know this already since you need it in the basic configuration from above. Log in to the control panel with your Egardia/Woonveilig username and password. -1. Once logged in, go to *System Settings*, *Report* and change the Server Address for your primary server to the IP or hostname of your Home Assistant machine. You can leave the port number set to 52010 or change it to anything you like. **Make sure to change the settings of the primary server otherwise the messages will not come through. Note that this will limit (or fully stop) the number of alarm messages you will get through Egardia's / Woonveilig services.** Maybe, that is just what you want. Make sure to save your settings by selecting 'OK'. -1. On your Home Assistant machine run `$ sudo python3 egardiaserver.py`. Refer to the [python-egardia repository](https://github.com/jeroenterheerdt/python-egardia) for detailed documentation on parameters. This will receive status codes from your alarm control panel and display them. You will need the codes to include in your configuration.yaml. Make sure to change the status of your alarm to all states (disarm, arm, home) by all means possible (all users, remotes, web login, app) as well as trigger the alarm in all ways possible to get 100% coverage. **Before triggering the alarm it might be good to disable the siren temporarily (can be done in Panel Settings).** -1. Once you have the codes, update your `configuration.yaml`: - ```yaml - # Example configuration.yaml entry - alarm_control_panel: -  - platform: egardia -   host: YOUR_HOST -   username: YOUR_USERNAME -   password: YOUR_PASSWORD - report_server_enabled: True - report_server_port: PORT_OF_EGARDIASERVER (optional, defaults to 52010) - report_server_codes: - arm: XXXXXXXXXXXXXXXX, XXXXXXXXXXXXXXXX - disarm: XXXXXXXXXXXXXXXX, XXXXXXXXXXXXXXXX - home: XXXXXXXXXXXXXXXX - triggered: XXXXXXXXXXXXXXXX, XXXXXXXXXXXXXXXX, XXXXXXXXXXXXXXXX - ignore: XXXXXXXXXXXXXXXX - ``` - -Note that for *triggered*, *arm* and *disarm* multiple codes can be entered since each sensor triggers with a different code and each user of the system has its own arm and disarm codes. Also note that your system will do regular system checks which will be reported as well. Since Home Assistant provides no way of handling them properly, you can enter those codes as *ignore* (again, multiple codes can be used here). The egardia component will ignore these codes and continue returning the old status if it receives any of the codes that are listed as ignore. This is useful for example when you have armed your alarm at night: normally a system check will occur at least once during the night and if that code is not specified anywhere Home Assistant will set the status of the alarm to its default, which is unarmed. This is in fact wrong. Listing the code as ignore changes this behavior and Home Assistant will continue to show the status the alarm is in (disarm, arm, home, triggered) even when system checks occur. - -5. Test your setup and enjoy. The component will update if the alarm status changes, including triggers. You can use this to build your own automations and send notifications as you wish. *Note*: previous versions required a separate egardiaserver to be set up. This is no longer necessary and corresponding system services can be removed (using systemctl). +The `egardia` platform allows you to integrate your [Egardia](http://www.egardia.com)/[Woonveilig](http://www.woonveilig.nl) alarm control panel in Home Assistant. +You will need to set up your [Egardia hub](/components/egardia/). diff --git a/source/_components/binary_sensor.egardia.markdown b/source/_components/binary_sensor.egardia.markdown new file mode 100644 index 0000000000..8df482bf5b --- /dev/null +++ b/source/_components/binary_sensor.egardia.markdown @@ -0,0 +1,19 @@ +--- +layout: page +title: "Egardia Binary Sensor" +description: "Instructions how to integrate Egardia / Woonveilig binary sensors into Home Assistant." +date: 2018-03-02 09:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: egardia.png +ha_release: 0.65 +ha_category: Binary Sensor +ha_iot_class: "Polling" +--- + +The `egardia` platform allows you to get data from your [Egardia](http://www.egardia.com)/[Woonveilig](http://www.woonveilig.nl) binary sensors from within Home Assistant. +Currently only door contacts are supported. IR sensors are not supported and will probably never be since their status cannot be read outside of the alarm control panel. Smoke sensors and others might be added but currently are not supported. + +You will need to set up your [Egardia hub](/components/egardia/). diff --git a/source/_components/egardia.markdown b/source/_components/egardia.markdown new file mode 100644 index 0000000000..068920b8ab --- /dev/null +++ b/source/_components/egardia.markdown @@ -0,0 +1,67 @@ +--- +layout: page +title: "Egardia" +description: "Instructions how to setup Egardia / Woonveilig within Home Assistant." +date: 2018-03-02 09:00 +sidebar: true +comments: false +sharing: true +footer: true +ha_category: Hub +ha_release: 0.65 +logo: egardia.png +--- + +The `egardia` platform enables the ability to control an [Egardia](http://egardia.com/)/[Woonveilig](http://woonveilig.nl) control panel. These alarm panels are known under different brand names across the world, including Woonveilig in the Netherlands. This was tested on the WL-1716, GATE-01, GATE-02 and GATE-03 versions of the Egardia/Woonveilig platform. Not only will you integrate your alarm control panel, supported sensors (door contacts at this moment) will be added automatically (hidden by default). + +You will need to know the IP of your alarm panel on your local network. Test if you can login to the panel by browsing to the IP address and log in using your Egardia/Woonveilig account. + +To enable the integration with your alarm panel, add the following lines to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +egardia: + host: YOUR_HOST + username: YOUR_USERNAME + password: YOUR_PASSWORD +``` + +Configuration variables: + +- **host** (*Required*): The local IP address of the Egardia/Woonveilig alarm panel. +- **username** (*Required*): Username for the Egardia/Woonveilig account. +- **password** (*Required*): Password for Egardia/Woonveilig account. +- **version** (*Optional*): The version of the Egardia system. `GATE-01`, `GATE-02` and `GATE-03` are currently supported. Defaults to `GATE-01`. +- **port** (*Optional*): The port of the alarm panel. Defaults to 80. +- **report_server_enabled** (*Optional*): Enable reporting by server. Defaults to `False`. +- **report_server_port** (*Optional*): Port of the Egardia server. Defaults to 52010. +- **report_server_codes** list (*Optional*): List of codes for the different states. + +Note that this basic configuration will only enable you to read the armed/armed away/disarmed status of your alarm and will **not** update the status if the alarm is triggered. This is because of how Egardia built their system. The alarm triggers normally go through their servers. +You can change this, however, using the following procedure. This is a more advanced configuration. + +1. Log in to your alarm system's control panel. You will need to access http://[IP of your control panel]. You know this already since you need it in the basic configuration from above. Log in to the control panel with your Egardia/Woonveilig username and password. +2. Once logged in, go to *System Settings*, *Report* and change the Server Address for your primary server to the IP or hostname of your Home Assistant machine. You can leave the port number set to 52010 or change it to anything you like. **Make sure to change the settings of the primary server otherwise the messages will not come through. Note that this will limit (or fully stop) the number of alarm messages you will get through Egardia's / Woonveilig services.** Maybe, that is just what you want. Make sure to save your settings by selecting 'OK'. +3. The Egardia component relies on capturing the status codes that your alarm emits when something happens (status change or trigger). These codes will be unique for every situation - i.e. the code emitted by the alarm when a sensor is triggered is unique to that sensor. Also, if you have multiple users or remotes, each remote has unique codes that are emitted by the alarm when status is changed using that remote or by that user. For the Egardia component to work correctly you will need to capture the codes. To do this, on your Home Assistant machine run `$ sudo python3 egardiaserver.py`. Refer to the [python-egardia repository](https://github.com/jeroenterheerdt/python-egardia) for detailed documentation on parameters. This will receive status codes from your alarm control panel and display them. Record the codes shown as well as the status they relate to (see step 4 below). Make sure to change the status of your alarm to all states (disarm, arm, home) by all means possible (all users, remotes, web login, app) as well as trigger the alarm in all ways possible to get 100% coverage of all the codes the alarm system generates. You will need to run this script once and stop it once you have captured all the possible codes. Also, if you ever add users, remotes or sensors to your alarm system, make sure to re-run the script to capture the extra codes so you can update your configuration (see step 4 below). **For comfort, before triggering the alarm it might be good to disable the siren temporarily (can be done in Panel Settings).** +4. Once you have the codes, update your `configuration.yaml`: + ```yaml + # Example configuration.yaml entry + egardia: +   host: YOUR_HOST +   username: YOUR_USERNAME +   password: YOUR_PASSWORD + report_server_enabled: True + report_server_port: PORT_OF_EGARDIASERVER (optional, defaults to 52010) + report_server_codes: + arm: XXXXXXXXXXXXXXXX, XXXXXXXXXXXXXXXX + disarm: XXXXXXXXXXXXXXXX, XXXXXXXXXXXXXXXX + armhome: XXXXXXXXXXXXXXXX + triggered: XXXXXXXXXXXXXXXX, XXXXXXXXXXXXXXXX, XXXXXXXXXXXXXXXX + ignore: XXXXXXXXXXXXXXXX + ``` + +Note that for all code groups (*arm*,*disarm*, etc) multiple codes can be entered since each sensor triggers with a different code and each user of the system has its own arm and disarm codes. Also note that your system will do regular system checks which will be reported as well. Since Home Assistant provides no way of handling them properly, you can enter those codes as *ignore* (again, multiple codes can be used here). The egardia component will ignore these codes and continue returning the old status if it receives any of the codes that are listed as ignore. This is useful for example when you have armed your alarm at night: normally a system check will occur at least once during the night and if that code is not specified anywhere Home Assistant will set the status of the alarm to its default, which is unarmed. This is in fact wrong. Listing the code as ignore changes this behavior and Home Assistant will continue to show the status the alarm is in (disarm, arm, home, triggered) even when system checks occur. + +5. Test your setup and enjoy. The component will update if the alarm status changes, including triggers. You can use this to build your own automations and send notifications as you wish. *Note*: previous versions required a separate egardiaserver to be set up. This is no longer necessary and corresponding system services can be removed (using systemctl). + + From 4a852f8c0482cc0736b0e8dab43669ad12e2d212 Mon Sep 17 00:00:00 2001 From: karlkar Date: Fri, 9 Mar 2018 19:07:41 +0100 Subject: [PATCH 537/993] Added support for multiple onvif profiles (#4445) * Added support for multiple onvif profiles Related to pull request https://github.com/home-assistant/home-assistant/pull/11651 * :pencil2: Spelling & grammar fixes * Removed info about profile data in attribute Removed information about profile data in attributes, as it is not going to be implemented. --- source/_components/camera.onvif.markdown | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/source/_components/camera.onvif.markdown b/source/_components/camera.onvif.markdown index f4281405bc..6b772dfda6 100644 --- a/source/_components/camera.onvif.markdown +++ b/source/_components/camera.onvif.markdown @@ -30,9 +30,12 @@ Configuration variables: - **name** (*Optional*): Override the name of your camera. - **username** (*Optional*): The username for the camera. - **password** (*Optional*): The password for the camera. -- **port** (*Optional*): The port for the camera. This defaults to 5000 +- **port** (*Optional*): The port for the camera. This defaults to 5000. +- **profile** (*Optional*): Video profile that will be used to obtain the stream. This defaults to 0. More details below. - **extra_arguments** (*Optional*): Extra options to pass to `ffmpeg`, e.g. image quality or video filter options. More details in [FFmpeg component](/components/ffmpeg). +Most of the Onvif cameras support more than one audio/video Profile. Each profile provides different image quality. Usually, the first profile has the highest quality, and it is the profile used by default. However, you may want to use a lower quality image. One of the reasons may be that your hardware isn't able to render the highest quality image in real-time - especially when running on Raspberry Pi. Therefore you can choose which profile do you want to use by setting in config `profile` variable. + ### {% linkable_title Service `camera.onvif_ptz` %} If your ONVIF camera supports PTZ, you will be able to pan, tilt or zoom your camera. From 1886934894c3d3f8384df600b41653c00e6349e7 Mon Sep 17 00:00:00 2001 From: Bertbert <7685189+bertbert72@users.noreply.github.com> Date: Fri, 9 Mar 2018 18:07:09 +0000 Subject: [PATCH 538/993] =?UTF-8?q?Add=20=E2=80=98unit=5Fsystem=E2=80=99?= =?UTF-8?q?=20configuration=20variable=20(#4469)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Add ‘unit_system’ configuration variable * Update sensor.fitbit.markdown --- source/_components/sensor.fitbit.markdown | 1 + 1 file changed, 1 insertion(+) diff --git a/source/_components/sensor.fitbit.markdown b/source/_components/sensor.fitbit.markdown index 1da5a51836..4ea3e71cd4 100644 --- a/source/_components/sensor.fitbit.markdown +++ b/source/_components/sensor.fitbit.markdown @@ -36,6 +36,7 @@ Configuration variables: - **monitored_resources** (*Optional*): Resource to monitor. Defaults to `activities/steps`. - **clock_format** (*Optional*): Format to use for `sleep/startTime` resource. Accepts `12H` or `24H`. Defaults to `24H`. +- **unit_system** (*Optional*): Unit system to use for measurements. Accepts `default`, `metric`, `en_US` or `en_GB`. Defaults to `default`. Below is the list of resources that you can add to `monitored_resources`. One sensor is exposed for every resource. From d799127e30f0c89cfddd7763f70fa9d191dd473f Mon Sep 17 00:00:00 2001 From: Sebastian Muszynski Date: Fri, 9 Mar 2018 19:05:29 +0100 Subject: [PATCH 539/993] Xiaomi MiIO Light: Flag the device as unavailable if not reachable (#4699) * Configuration key "model" and "xiaomi_miio_set_delayed_turn_off" service added. * Service parameter renamed. * New device model (philips.light.zyceiling) added. * Service parameter updated. * Format of the services updated. Configuration schema added. * Missing supported device added. --- source/_components/light.xiaomi_miio.markdown | 35 +++++++++++++++++-- 1 file changed, 33 insertions(+), 2 deletions(-) diff --git a/source/_components/light.xiaomi_miio.markdown b/source/_components/light.xiaomi_miio.markdown index b1428017a5..3af241a04e 100644 --- a/source/_components/light.xiaomi_miio.markdown +++ b/source/_components/light.xiaomi_miio.markdown @@ -13,7 +13,7 @@ ha_version: 0.53 ha_iot_class: "Local Polling" --- -The `xiaomi_miio` platform allows you to control the state of your Xiaomi Philips LED Ball Lamp and Xiaomi Philips LED Ceiling Lamp. +The `xiaomi_miio` platform allows you to control the state of your Xiaomi Philips LED Ball Lamp, Xiaomi Philips LED Ceiling Lamp and Xiaomi Philips Eyecare Lamp 2. Currently, the supported features are `on`, `off`, `set_cct` (colortemp) , `set_bright` (brightness). @@ -28,12 +28,34 @@ light: name: Xiaomi Philips Smart LED Ball host: 192.168.130.67 token: YOUR_TOKEN + model: philips.light.bulb ``` Configuration variables: - **host** (*Required*): The IP of your light. - **token** (*Required*): The API token of your light. - **name** (*Optional*): The name of your light. +- **model** (*Optional*): The model of your light. Valid values are `philips.light.bulb`, `philips.light.sread1`, `philips.light.ceiling` and `philips.light.zyceiling`. This setting can be used to bypass the device model detection and is recommended if your device isn't always available. + +{% configuration %} +host: + description: The IP address of your device. + required: true + type: string +token: + description: The API token of your device. + required: true + type: string +name: + description: The name of your device. + required: false + type: string + default: Xiaomi Philips Light +model: + description: The model of your device. + required: false + type: string +{% endconfiguration %} ## {% linkable_title Platform Services %} @@ -43,5 +65,14 @@ Set one of the 4 available fixed scenes. | Service data attribute | Optional | Description | |---------------------------|----------|-------------------------------------------------------| -| `entity_id` | yes | Only act on specific light. Else targets all. | +| `entity_id` | yes | Only act on a specific light. Else targets all. | | `scene` | no | Scene, between 1 and 4. | + +### {% linkable_title Service `light.xiaomi_miio_set_delayed_turn_off` %} + +Delayed turn off. + +| Service data attribute | Optional | Description | +|---------------------------|----------|-------------------------------------------------------| +| `entity_id` | yes | Only act on a specific light. Else targets all. | +| `time_period` | no | Time period for the delayed turn off. | From 4100074de8dbf7df094bf78bf5ebbdd0581edf0d Mon Sep 17 00:00:00 2001 From: Mike Megally Date: Thu, 1 Mar 2018 16:34:46 -0800 Subject: [PATCH 540/993] Release 0.65 --- _config.yml | 8 +- source/_posts/2018-03-09-release-65.markdown | 604 ++++++++++++++++++ .../2018-03-0.65/entity-registry-name.gif | Bin 0 -> 630894 bytes .../blog/2018-03-0.65/filter-example.png | Bin 0 -> 36260 bytes .../blog/2018-03-0.65/voice-commands.png | Bin 0 -> 14828 bytes 5 files changed, 608 insertions(+), 4 deletions(-) create mode 100644 source/_posts/2018-03-09-release-65.markdown create mode 100644 source/images/blog/2018-03-0.65/entity-registry-name.gif create mode 100644 source/images/blog/2018-03-0.65/filter-example.png create mode 100644 source/images/blog/2018-03-0.65/voice-commands.png diff --git a/_config.yml b/_config.yml index 081fb5711d..f63b8b9ceb 100644 --- a/_config.yml +++ b/_config.yml @@ -139,14 +139,14 @@ social: # Home Assistant release details current_major_version: 0 -current_minor_version: 64 -current_patch_version: 3 -date_released: 2018-03-02 +current_minor_version: 65 +current_patch_version: 0 +date_released: 2018-03-09 # Either # or the anchor link to latest release notes in the blog post. # Must be prefixed with a # and have double quotes around it. # Major release: -patch_version_notes: "#release-0643---march-2" +patch_version_notes: "#" # Minor release (Example #release-0431---april-25): # Date we moved to Discourse for comments diff --git a/source/_posts/2018-03-09-release-65.markdown b/source/_posts/2018-03-09-release-65.markdown new file mode 100644 index 0000000000..ae2e8dbda3 --- /dev/null +++ b/source/_posts/2018-03-09-release-65.markdown @@ -0,0 +1,604 @@ +--- +layout: post +title: "0.65: Rename entities, new filter sensor, UpCloud and Channels" +description: "A new Home Assistant release full of amazing new features. Rename entities without a restart, filter out anomalies or apply other filters to data, improved HomeKit support." +date: 2018-03-09 00:01:00 +date_formatted: "March 9, 2018" +author: Paulus Schoutsen +author_twitter: balloob +comments: true +categories: Release-Notes +og_image: /images/blog/2018-03-0.65/entity-registry-name.gif +--- + +
    + +Release 0.65 has arrived and oh boy, is it awesome. First off, in case you have missed the previous release notes and [announcements](https://home-assistant.io/blog/2017/10/06/deprecating-python-3.4-support/): **Starting with this release, Home Assistant has dropped support for Python 3.4. The minimum supported version is now Python 3.5.3.** If you are on Hass.io or Docker, you'll automatically be running the latest and greatest. If you're on an older Hassbian installation or did your own Linux setup you'll need to upgrade to at least Python 3.5.3. + +## {% linkable_title Naming entities %} + +With the introduction of the entity registry in 0.63, Home Assistant is making sure that the same devices always receive the same entity IDs. This release is taking it a step further by allowing users to change the name of a device from the frontend. Changing the name will be instantly applied and overrides whatever name the device is given by the integration. If you want to switch back to the name from the integration, set the name to blank. + +_This feature is, just like the entity registry, only available for integrations that provide unique IDs for their entities. Adding this to each integration is still a work in progress._ + +

    + Screencap of interaction with the UI to override the name of a light. + The new entity registry settings page in action. +

    + +## {% linkable_title Filter sensor %} + +The [filter sensor][sensor.filter docs] is a new 2nd order sensor by [@dgomes]: it will consume data from a sensor entity and apply filters to it. For the initial implementation it comes with Low-pass, Outlier and Throttle filters. Expect more to be added in the future. + +```yaml +sensor: + - platform: filter + name: "filtered realistic humidity" + entity_id: sensor.realistic_humidity + filters: + - filter: outlier + window_size: 4 + radius: 4.0 + - filter: lowpass + time_constant: 10 + precision: 2 +``` + +

    + Chart showing a humidity sensor with a lot of spikes and a smooth graph produced by the new filter sensor. + Graph showing both the input sensor and the output of the filter sensor. +

    + +## {% linkable_title Light Group %} + +We have had some discussion lately and realized that our current group component is very limiting. Extending it would probably lead to more confusion so we've decided to take a new approach: groups that are designed to be part of a specific component. The first one in this series comes at the hand of [@OttoWinter]: the group light ([docs][light.group docs]). + +The group light creates a single light inside Home Assistant that is representing a group of lights. All commands will be forwarded and the state is a combination of all the lights. + +```yaml +light: + - platform: group + name: Cool Light Group + entities: + - light.amazing_light + - light.foobar + - light.sun +``` + +## {% linkable_title HomeKit %} + +HomeKit got some more upgrades. We've added support for temperature sensors in Fahrenheit, alarm systems, switches and thermostats. Just a few releases more and we should be able to cover it all. + +## {% linkable_title Optional words for the Conversation component %} + +The [conversation component](/components/conversation/) has always been a great introduction to controlling your house by voice. There is no hotword detection or powerful language engine behind it, but it gives a great intro to what is possible. Starting with this release, it will get a little bit more powerful with the introduction of optional words. To mark a word optional, wrap it in square brackets: `Change the light to [the color] {color}`. + +```yaml +# Example configuration.yaml entry +conversation: + intents: + LivingRoomTemperature: + - What is the temperature in the living room + - What is [the] living room temperature + +intent_script: + LivingRoomTemperature: + speech: + text: It is currently {{ states.sensor.temperature }} degrees in the living room. +``` + +

    + Screenshot of the frontend with the conversation panel open. + Have conversations with Home Assistant via the conversation component. +

    + +## {% linkable_title New Platforms %} + +- Synology Chat as a notification platform ([@cmsimike] - [#12596]) ([notify.synology_chat docs]) (new-platform) +- KNX Component: Scene support and expose sensor values ([@Julius2342] - [#11978]) ([knx docs]) ([scene docs]) ([binary_sensor.knx docs]) (new-platform) +- Adds simulated sensor ([@robmarkcole] - [#12539]) ([sensor.simulated docs]) (new-platform) +- Add Songpal ("Sony Audio Control API") platform ([@rytilahti] - [#12143]) ([media_player.songpal docs]) (new-platform) +- Add UpCloud platform ([@scop] - [#12011]) ([upcloud docs]) ([binary_sensor.upcloud docs]) ([switch.upcloud docs]) (new-platform) +- Added Sense energy monitor sensor ([@kbickar] - [#11580]) ([sensor.sense docs]) (new-platform) +- Filter Sensor ([@dgomes] - [#12650]) ([sensor.filter docs]) (new-platform) +- Add light.group platform ([@OttoWinter] - [#12229]) ([light.group docs]) (new-platform) +- Egardia redesign - generic component and sensor support ([@jeroenterheerdt] - [#11994]) ([egardia docs]) ([alarm_control_panel.egardia docs]) ([binary_sensor.egardia docs]) (breaking change) (new-platform) +- Add support for Zillow Zestimate sensor ([@jcconnell] - [#12597]) ([sensor.zestimate docs]) (new-platform) +- Add a Media Player Component for Channels ([@maddox] - [#12937]) ([media_player.channels docs]) (new-platform) +- Add support for alarm system, switch and thermostat to homekit ([@maxclaey] - [#12819]) ([homekit docs]) (new-platform) +- Add camera proxy ([@PhracturedBlue] - [#12006]) ([camera.proxy docs]) (new-platform) + +## {% linkable_title If you need help... %} + +...don't hesitate to use our very active [forums](https://community.home-assistant.io/) or join us for a little [chat](https://discord.gg/c5DvZ4e). The release notes have comments enabled but it's preferred if you use the former communication channels. Thanks. + +## {% linkable_title Reporting Issues %} + +Experiencing issues introduced by this release? Please report them in our [issue tracker](https://github.com/home-assistant/home-assistant/issues). Make sure to fill in all fields of the issue template. + + +## {% linkable_title Breaking Changes %} + +- Insteon PLM: If you have created platform overrides in your configuration.yaml file to change a your INSTEON device to map to a different Home Assistant platform, that mapping will no longer be in effect. Please see the new device override capabilities in the [insteon_plm documentation](https://home-assistant.io/components/insteon_plm/). ([@teharris1] - [#12534]) ([insteon_plm docs]) ([binary_sensor.insteon_plm docs]) ([fan.insteon_plm docs]) ([light.insteon_plm docs]) ([sensor.insteon_plm docs]) ([switch.insteon_plm docs]) (breaking change) +- AirVisual's air index unit is AQI (Air Quality Index), not PSI (Pressure per Square Inch). ([@chilicheech] - [#12730]) ([sensor.airvisual docs]) (breaking change) +- TekSavvy Sensor: The sensor entity id for peak upload usage used to be `sensor.teksavvy_on_peak_upload_` this has been changed to `sensor.teksavvy_on_peak_upload`. The `usage` title was shared between and therefore indeterminate between GB and % usage. Therefore % usage entity ID has been changed to `sensor.teksavvy_usage_ratio` ([@mikeodr] - [#12325]) ([sensor.teksavvy docs]) (breaking change) +- Egardia redesign - generic component and sensor support ([@jeroenterheerdt] - [#11994]) ([egardia docs]) ([alarm_control_panel.egardia docs]) ([binary_sensor.egardia docs]) (breaking change) (new-platform) +- zip_code for the Pollen integration is now required to have quotes around it to prevent accidental errors: `zip_code: "00544"` ([@bachya] - [#12934]) ([sensor.pollen docs]) (breaking change) +- Google Assistant integration: It is no longer possible to override the domain that Home Assistant uses for an entity. This was bound to go wrong when we would test supported features for different domains. Also removed support for disguising temperature sensors as thermostats. We should follow the traits that Google offer us and not offer things that will only work half. ([@balloob] - [#12959]) ([google_assistant docs]) ([light docs]) (breaking change) +- The LimitlessLED white temperature range has been adjusted and should now match the Mi-Light smartphone app for identical Kelvin values. ([@amelchio] - [#12971]) ([light.limitlessled docs]) (breaking change) + +## {% linkable_title All changes %} + +- Hello Python 3.5 ([@balloob] - [#12610]) +- Fix CODEOWNERS permissions ([@OttoWinter] - [#12621]) +- Xiaomi Aqara Gateway: Service descriptions added ([@syssi] - [#12631]) +- Removing asyncio.coroutine syntax from some components ([@Julius2342] - [#12507]) +- Allow renaming entities in entity registry ([@balloob] - [#12636]) ([config docs]) ([light.demo docs]) +- Check if $files is empty, don't try to execute it ([@armills] - [#12651]) +- Removed py34 ([@cdce8p] - [#12648]) +- Improved Homekit tests ([@cdce8p] - [#12647]) ([homekit docs]) +- Removing asyncio.coroutine syntax from HASS core ([@Julius2342] - [#12509]) +- Synology Chat as a notification platform ([@cmsimike] - [#12596]) ([notify.synology_chat docs]) (new-platform) +- Enable pytradfri during build, and include in Docker ([@lwis] - [#12662]) +- Upgrade insteonplm to 0.8.2 (required refactoring) ([@teharris1] - [#12534]) ([insteon_plm docs]) ([binary_sensor.insteon_plm docs]) ([fan.insteon_plm docs]) ([light.insteon_plm docs]) ([sensor.insteon_plm docs]) ([switch.insteon_plm docs]) (breaking change) +- Homekit Update, Support for TempSensor (°F) ([@cdce8p] - [#12676]) ([homekit docs]) +- Fix formatting of minutes for sleep start in the fitbit sensor ([@awkwardDuck] - [#12664]) ([sensor.fitbit docs]) +- KNX Component: Scene support and expose sensor values ([@Julius2342] - [#11978]) ([knx docs]) ([scene docs]) ([binary_sensor.knx docs]) (new-platform) +- Added config validator for future group platforms ([@cdce8p] - [#12592]) +- Adds simulated sensor ([@robmarkcole] - [#12539]) ([sensor.simulated docs]) (new-platform) +- Add history_graph component to demo ([@balloob] - [#12681]) ([demo docs]) +- Next generation of Xiaomi Aqara devices added ([@syssi] - [#12659]) ([xiaomi_aqara docs]) ([switch.xiaomi_aqara docs]) +- Fix homekit: temperature calculation ([@cdce8p] - [#12720]) ([homekit docs]) +- AsusWRT log exceptions ([@kellerza] - [#12668]) ([device_tracker.asuswrt docs]) +- Homekit schema gracefully fail with integer ([@kellerza] - [#12725]) ([homekit docs]) +- Update core HSV color scaling to standard scales: ([@armills] - [#12649]) ([light.hue docs]) ([light.lifx docs]) +- correct air index unit ([@chilicheech] - [#12730]) ([sensor.airvisual docs]) (breaking change) +- Remove automatic sqlite vacuum ([@amelchio] - [#12728]) +- Disable asuswrt tests ([@armills] - [#12663]) +- Fix Citybikes naming ([@aronsky] - [#12661]) ([sensor.citybikes docs]) +- Xiaomi MiIO Light: Flag the device as unavailable if not reachable ([@syssi] - [#12449]) ([light.xiaomi_miio docs]) +- Check_config await error ([@kellerza] - [#12722]) +- Add Songpal ("Sony Audio Control API") platform ([@rytilahti] - [#12143]) ([media_player.songpal docs]) (new-platform) +- Quote services.yaml string ([@amelchio] - [#12763]) +- Intent: Set light color ([@balloob] - [#12633]) ([light docs]) +- Update Yi platform to make use of async/await ([@bachya] - [#12713]) ([camera.yi docs]) +- Add custom header support for rest_command ([@doctorjames] - [#12646]) ([rest_command docs]) +- Round humidity for display purposes ([@PhilRW] - [#12766]) ([climate docs]) ([weather docs]) ([climate.wink docs]) ([weather.darksky docs]) +- Xiaomi MiIO Vacuum: Use a unique data key per domain ([@syssi] - [#12743]) ([vacuum.xiaomi_miio docs]) +- Add UpCloud platform ([@scop] - [#12011]) ([upcloud docs]) ([binary_sensor.upcloud docs]) ([switch.upcloud docs]) (new-platform) +- Add Unit System Option For Fitbit ([@bertbert72] - [#11817]) ([sensor.fitbit docs]) +- Add 'lock' device class ([@swilson] - [#11640]) ([binary_sensor docs]) +- Bump frontend to 20180228.1 ([@balloob] - [#12786]) ([frontend docs]) +- Fix when 2 states match with same name ([@balloob] - [#12771]) +- MQTT Static Typing ([@OttoWinter] - [#12433]) ([mqtt docs]) +- Add "headers" config parameter to rest switch ([@mfrueh] - [#12706]) ([switch.rest docs]) +- Added Sense energy monitor sensor ([@kbickar] - [#11580]) ([sensor.sense docs]) (new-platform) +- TekSavvy Sensor unlimited bandwidth support ([@mikeodr] - [#12325]) ([sensor.teksavvy docs]) (breaking change) +- iCloud location tracking improvements ([@reedriley] - [#12399]) ([device_tracker.icloud docs]) +- Support serving of backend translations ([@armills] - [#12453]) ([frontend docs]) +- Translation cleanup ([@armills] - [#12804]) +- Take ownership of Emby, Eight Sleep, Hikvision ([@mezz64] - [#12803]) +- Bump pyHik version, digest auth, more device support ([@mezz64] - [#12801]) ([binary_sensor.hikvision docs]) +- Only run deploy from lint branch ([@armills] - [#12805]) +- Add optional words to conversation utterances ([@balloob] - [#12772]) ([conversation docs]) +- Changed default from `all` to `changed` ([@cdce8p] - [#12660]) +- Fix flakiness in tests ([@balloob] - [#12806]) +- Tibber: retry if we fail to connect at startup ([@danielhiversen] - [#12620]) ([sensor.tibber docs]) +- Cast Python Async Await Syntax ([@OttoWinter] - [#12816]) ([media_player.cast docs]) +- Filter Sensor ([@dgomes] - [#12650]) ([sensor.filter docs]) (new-platform) +- MQTT Python 3.5 Async Await Syntax ([@OttoWinter] - [#12815]) ([mqtt docs]) +- Improved Homekit tests ([@cdce8p] - [#12800]) ([homekit docs]) +- Add light.group platform ([@OttoWinter] - [#12229]) ([light.group docs]) (new-platform) +- Add icons to Xiaomi Aqara sensors ([@bakedraccoon] - [#12814]) ([sensor.xiaomi_aqara docs]) +- Egardia redesign - generic component and sensor support ([@jeroenterheerdt] - [#11994]) ([egardia docs]) ([alarm_control_panel.egardia docs]) ([binary_sensor.egardia docs]) (breaking change) (new-platform) +- Skip flaky light.group test [skipci] ([@balloob] - [#12847]) +- Update volvooncall.py ([@danielhiversen] - [#12834]) ([switch.volvooncall docs]) +- Address upcloud post-merge comments (#12011) ([@scop] - [#12835]) ([upcloud docs]) ([binary_sensor.upcloud docs]) ([switch.upcloud docs]) +- Keep auto groups during group reload ([@amelchio] - [#12841]) ([group docs]) +- PyXiaomiGateway version bumped. ([@syssi] - [#12828]) ([xiaomi_aqara docs]) +- Fix light group update before add ([@OttoWinter] - [#12844]) ([light.group docs]) +- IndexError (list index out of range) fixed. ([@syssi] - [#12858]) ([sensor.xiaomi_aqara docs]) +- Fix dead Sonos web interface even more ([@amelchio] - [#12851]) ([media_player.sonos docs]) +- Updated to use latest ihcsdk version ([@dingusdk] - [#12865]) ([ihc docs]) +- Add unique id for Tibber sensor ([@danielhiversen] - [#12864]) ([sensor.tibber docs]) +- Add support for Zillow Zestimate sensor ([@jcconnell] - [#12597]) ([sensor.zestimate docs]) (new-platform) +- Grammar fix 'an unique' ([@amelchio] - [#12870]) +- Add SQL index to states.event_id ([@amelchio] - [#12825]) +- Optimize logbook SQL query ([@amelchio] - [#12881]) ([logbook docs]) +- await syntax knx scene ([@Julius2342] - [#12879]) ([scene docs]) +- Fix 0 value when home-assistant restarts ([@bokub] - [#12874]) ([sensor.history_stats docs]) +- Fix aggressive scan intervals ([@balloob] - [#12885]) ([alarm_control_panel.concord232 docs]) ([binary_sensor.concord232 docs]) ([sensor.folder docs]) ([sensor.simulated docs]) +- Fix interaction with hyperion on NodeMCU ([@a-andre] - [#12872]) ([light.hyperion docs]) +- Add the Gamerscore and Tier of the account ([@kevintuhumury] - [#12867]) ([sensor.xbox_live docs]) +- Improve influxdb throughput ([@amelchio] - [#12882]) ([influxdb docs]) +- Add config flow for Hue ([@balloob] - [#12830]) ([config docs]) ([hue docs]) +- Fix issue with guest August lock being included ([@snjoetw] - [#12893]) ([august docs]) +- Upgrade to py-canary 0.4.1 ([@snjoetw] - [#12894]) ([canary docs]) +- update html5 to async/await ([@perosb] - [#12895]) ([notify.html5 docs]) +- Adding additional switches and sensors for Tesla ([@alandtse] - [#12241]) ([device_tracker.tesla docs]) ([sensor.tesla docs]) ([switch.tesla docs]) +- Additional radio schemes for sonos ([@amelchio] - [#12886]) ([media_player.sonos docs]) +- Fix Edimax new firmware auth error and move to pyedimax fork ([@andreipop2005] - [#12873]) ([switch.edimax docs]) +- InfluxDB cleanups ([@amelchio] - [#12903]) ([influxdb docs]) +- Fix for moisture sensors in isy994 ([@thejta] - [#12734]) ([binary_sensor.isy994 docs]) +- Apple TV should return all supported features ([@lucasweb78] - [#12167]) ([media_player.apple_tv docs]) +- Remove dynamic controls from sonos ([@amelchio] - [#12908]) ([media_player.sonos docs]) +- Fix async method call in sync context ([@balloob] - [#12890]) ([device_tracker.icloud docs]) +- update html5 to async/await tests ([@perosb] - [#12896]) +- Fixing small naming bug ([@ebfio] - [#12911]) ([sensor.serial_pm docs]) +- Tibber: Check if the current electricity price is available before we… ([@danielhiversen] - [#12905]) ([sensor.tibber docs]) +- Add empty unit to systemmonitor load averages ([@DanNixon] - [#12900]) ([sensor.systemmonitor docs]) +- update notify html5 dependencies ([@perosb] - [#12898]) ([notify.html5 docs]) +- Xiaomi MiIO Remote: Lazy discover disabled ([@syssi] - [#12710]) ([remote.xiaomi_miio docs]) +- Xiaomi MiIO Switch: Allow unavailable devices at startup by model setting ([@syssi] - [#12626]) ([switch.xiaomi_miio docs]) +- Update python-coinbase to 2.1.0 ([@balloob] - [#12925]) ([coinbase docs]) +- Remove unused cloud APIs ([@balloob] - [#12913]) ([cloud docs]) +- Upgrade to aiohttp 3 ([@balloob] - [#12921]) ([api docs]) ([http docs]) ([shopping_list docs]) +- Flaky tests ([@balloob] - [#12931]) +- Addresses issues with Pollen.com API troubles ([@bachya] - [#12930]) ([sensor.pollen docs]) +- Set supported features based on capabilities of device ([@maxclaey] - [#12922]) ([climate.nest docs]) +- Bumped (minor) version of xknx within knx-component. This fixes a bug with inverted percentage within sensors. ([@Julius2342] - [#12929]) ([knx docs]) ([light.knx docs]) +- Added checks for empty replies from REST calls and supporting tests ([@nickovs] - [#12904]) ([sensor.rest docs]) +- Reinstate our old virtual env check in favor of pip ([@balloob] - [#12932]) +- Support for queries with no results (fix for #12856) ([@dgomes] - [#12888]) ([sensor.sql docs]) +- Fix netatmo sensor warning from invalid Voluptuous default ([@amelchio] - [#12933]) ([sensor.netatmo docs]) +- Updated to enforce quoted ZIP codes for Pollen ([@bachya] - [#12934]) ([sensor.pollen docs]) (breaking change) +- Added support for multiple onvif profiles ([@karlkar] - [#11651]) ([camera.onvif docs]) +- Make ubus dhcp name resolution optional ([@rmounce] - [#12658]) ([device_tracker.ubus docs]) +- Add add_devices back to rpi_camera ([@feanor12] - [#12947]) ([camera.rpi_camera docs]) +- Remove weird tests ([@balloob] - [#12936]) +- optional displaying the sensors location on the map ([@c7h] - [#12375]) ([sensor.luftdaten docs]) +- [SQL Sensor] partial revert of #12452 ([@dgomes] - [#12956]) ([sensor.sql docs]) +- Fix LIFX color conversions ([@amelchio] - [#12957]) ([light.lifx docs]) +- BugFix Popp strike lock not discovered in homeassistant. ([@turbokongen] - [#12951]) ([zwave docs]) +- Add a Media Player Component for Channels ([@maddox] - [#12937]) ([media_player.channels docs]) (new-platform) +- Telegram_bot three platform support proxy_url and proxy_params ([@crhan] - [#12878]) ([telegram_bot.broadcast docs]) ([telegram_bot.polling docs]) ([telegram_bot.webhooks docs]) +- Add support for alarm system, switch and thermostat to homekit ([@maxclaey] - [#12819]) ([homekit docs]) (new-platform) +- Pin lokalise script to working version ([@armills] - [#12965]) +- Hue: Don't change brightness when changing just color ([@balloob] - [#12940]) ([light.hue docs]) +- LIFX async/await conversion ([@amelchio] - [#12973]) ([light.lifx docs]) +- IMAP sensor async/await conversion ([@amelchio] - [#12988]) ([sensor.imap docs]) +- Refactor Google Assistant ([@balloob] - [#12959]) ([google_assistant docs]) ([light docs]) (breaking change) +- Bump pyEmby version to support aiohttp => 3 ([@mezz64] - [#12986]) ([media_player.emby docs]) +- Update pyalarmdotcom version ([@koolsb] - [#12987]) ([alarm_control_panel.alarmdotcom docs]) +- Show the error message when Zabbix fails to log in ([@cyberjacob] - [#12985]) ([zabbix docs]) +- Script/gen_requirements: Ignore package families ([@cdce8p] - [#12963]) +- Fix Sonos group discovery ([@amelchio] - [#12970]) ([media_player.sonos docs]) +- Check color temp range for google assistant ([@balloob] - [#12994]) ([google_assistant docs]) +- Fix limitlessled color temperature ([@amelchio] - [#12971]) ([light.limitlessled docs]) (breaking change) +- Fixes notify.html5 for notifications on FireFox ([@corneyl] - [#12993]) ([notify.html5 docs]) +- Move HomeAssistantView to separate file. Convert http to async syntax. [skip ci] ([@fanthos] - [#12982]) ([http docs]) +- Get zha switch and binary_sensor state on startup ([@SteveEasley] - [#11672]) ([zha docs]) ([binary_sensor.zha docs]) ([light.zha docs]) ([switch.zha docs]) +- Add camera proxy ([@PhracturedBlue] - [#12006]) ([camera.proxy docs]) (new-platform) +- check_config script evolution ([@kellerza] - [#12792]) +- Plex mark devices unavailable if they 'vanish' and clear media ([@ryanm101] - [#12811]) ([media_player.plex docs]) +- Add consider_home and source_type to device_tracker.see service ([@mueslo] - [#12849]) ([device_tracker docs]) +- Clean up Light Groups ([@OttoWinter] - [#12962]) ([light.group docs]) +- Updated to plexapi 3.0.6 ([@ryanm101] - [#13005]) ([media_player.plex docs]) ([sensor.plex docs]) + +[#11580]: https://github.com/home-assistant/home-assistant/pull/11580 +[#11640]: https://github.com/home-assistant/home-assistant/pull/11640 +[#11651]: https://github.com/home-assistant/home-assistant/pull/11651 +[#11672]: https://github.com/home-assistant/home-assistant/pull/11672 +[#11817]: https://github.com/home-assistant/home-assistant/pull/11817 +[#11978]: https://github.com/home-assistant/home-assistant/pull/11978 +[#11994]: https://github.com/home-assistant/home-assistant/pull/11994 +[#12006]: https://github.com/home-assistant/home-assistant/pull/12006 +[#12011]: https://github.com/home-assistant/home-assistant/pull/12011 +[#12143]: https://github.com/home-assistant/home-assistant/pull/12143 +[#12167]: https://github.com/home-assistant/home-assistant/pull/12167 +[#12229]: https://github.com/home-assistant/home-assistant/pull/12229 +[#12241]: https://github.com/home-assistant/home-assistant/pull/12241 +[#12325]: https://github.com/home-assistant/home-assistant/pull/12325 +[#12375]: https://github.com/home-assistant/home-assistant/pull/12375 +[#12399]: https://github.com/home-assistant/home-assistant/pull/12399 +[#12433]: https://github.com/home-assistant/home-assistant/pull/12433 +[#12449]: https://github.com/home-assistant/home-assistant/pull/12449 +[#12453]: https://github.com/home-assistant/home-assistant/pull/12453 +[#12507]: https://github.com/home-assistant/home-assistant/pull/12507 +[#12509]: https://github.com/home-assistant/home-assistant/pull/12509 +[#12534]: https://github.com/home-assistant/home-assistant/pull/12534 +[#12539]: https://github.com/home-assistant/home-assistant/pull/12539 +[#12592]: https://github.com/home-assistant/home-assistant/pull/12592 +[#12596]: https://github.com/home-assistant/home-assistant/pull/12596 +[#12597]: https://github.com/home-assistant/home-assistant/pull/12597 +[#12610]: https://github.com/home-assistant/home-assistant/pull/12610 +[#12620]: https://github.com/home-assistant/home-assistant/pull/12620 +[#12621]: https://github.com/home-assistant/home-assistant/pull/12621 +[#12626]: https://github.com/home-assistant/home-assistant/pull/12626 +[#12631]: https://github.com/home-assistant/home-assistant/pull/12631 +[#12633]: https://github.com/home-assistant/home-assistant/pull/12633 +[#12636]: https://github.com/home-assistant/home-assistant/pull/12636 +[#12646]: https://github.com/home-assistant/home-assistant/pull/12646 +[#12647]: https://github.com/home-assistant/home-assistant/pull/12647 +[#12648]: https://github.com/home-assistant/home-assistant/pull/12648 +[#12649]: https://github.com/home-assistant/home-assistant/pull/12649 +[#12650]: https://github.com/home-assistant/home-assistant/pull/12650 +[#12651]: https://github.com/home-assistant/home-assistant/pull/12651 +[#12658]: https://github.com/home-assistant/home-assistant/pull/12658 +[#12659]: https://github.com/home-assistant/home-assistant/pull/12659 +[#12660]: https://github.com/home-assistant/home-assistant/pull/12660 +[#12661]: https://github.com/home-assistant/home-assistant/pull/12661 +[#12662]: https://github.com/home-assistant/home-assistant/pull/12662 +[#12663]: https://github.com/home-assistant/home-assistant/pull/12663 +[#12664]: https://github.com/home-assistant/home-assistant/pull/12664 +[#12668]: https://github.com/home-assistant/home-assistant/pull/12668 +[#12676]: https://github.com/home-assistant/home-assistant/pull/12676 +[#12681]: https://github.com/home-assistant/home-assistant/pull/12681 +[#12706]: https://github.com/home-assistant/home-assistant/pull/12706 +[#12710]: https://github.com/home-assistant/home-assistant/pull/12710 +[#12713]: https://github.com/home-assistant/home-assistant/pull/12713 +[#12720]: https://github.com/home-assistant/home-assistant/pull/12720 +[#12722]: https://github.com/home-assistant/home-assistant/pull/12722 +[#12725]: https://github.com/home-assistant/home-assistant/pull/12725 +[#12728]: https://github.com/home-assistant/home-assistant/pull/12728 +[#12730]: https://github.com/home-assistant/home-assistant/pull/12730 +[#12734]: https://github.com/home-assistant/home-assistant/pull/12734 +[#12743]: https://github.com/home-assistant/home-assistant/pull/12743 +[#12763]: https://github.com/home-assistant/home-assistant/pull/12763 +[#12766]: https://github.com/home-assistant/home-assistant/pull/12766 +[#12771]: https://github.com/home-assistant/home-assistant/pull/12771 +[#12772]: https://github.com/home-assistant/home-assistant/pull/12772 +[#12786]: https://github.com/home-assistant/home-assistant/pull/12786 +[#12792]: https://github.com/home-assistant/home-assistant/pull/12792 +[#12800]: https://github.com/home-assistant/home-assistant/pull/12800 +[#12801]: https://github.com/home-assistant/home-assistant/pull/12801 +[#12803]: https://github.com/home-assistant/home-assistant/pull/12803 +[#12804]: https://github.com/home-assistant/home-assistant/pull/12804 +[#12805]: https://github.com/home-assistant/home-assistant/pull/12805 +[#12806]: https://github.com/home-assistant/home-assistant/pull/12806 +[#12811]: https://github.com/home-assistant/home-assistant/pull/12811 +[#12814]: https://github.com/home-assistant/home-assistant/pull/12814 +[#12815]: https://github.com/home-assistant/home-assistant/pull/12815 +[#12816]: https://github.com/home-assistant/home-assistant/pull/12816 +[#12819]: https://github.com/home-assistant/home-assistant/pull/12819 +[#12825]: https://github.com/home-assistant/home-assistant/pull/12825 +[#12828]: https://github.com/home-assistant/home-assistant/pull/12828 +[#12830]: https://github.com/home-assistant/home-assistant/pull/12830 +[#12834]: https://github.com/home-assistant/home-assistant/pull/12834 +[#12835]: https://github.com/home-assistant/home-assistant/pull/12835 +[#12841]: https://github.com/home-assistant/home-assistant/pull/12841 +[#12844]: https://github.com/home-assistant/home-assistant/pull/12844 +[#12847]: https://github.com/home-assistant/home-assistant/pull/12847 +[#12849]: https://github.com/home-assistant/home-assistant/pull/12849 +[#12851]: https://github.com/home-assistant/home-assistant/pull/12851 +[#12858]: https://github.com/home-assistant/home-assistant/pull/12858 +[#12864]: https://github.com/home-assistant/home-assistant/pull/12864 +[#12865]: https://github.com/home-assistant/home-assistant/pull/12865 +[#12867]: https://github.com/home-assistant/home-assistant/pull/12867 +[#12870]: https://github.com/home-assistant/home-assistant/pull/12870 +[#12872]: https://github.com/home-assistant/home-assistant/pull/12872 +[#12873]: https://github.com/home-assistant/home-assistant/pull/12873 +[#12874]: https://github.com/home-assistant/home-assistant/pull/12874 +[#12878]: https://github.com/home-assistant/home-assistant/pull/12878 +[#12879]: https://github.com/home-assistant/home-assistant/pull/12879 +[#12881]: https://github.com/home-assistant/home-assistant/pull/12881 +[#12882]: https://github.com/home-assistant/home-assistant/pull/12882 +[#12885]: https://github.com/home-assistant/home-assistant/pull/12885 +[#12886]: https://github.com/home-assistant/home-assistant/pull/12886 +[#12888]: https://github.com/home-assistant/home-assistant/pull/12888 +[#12890]: https://github.com/home-assistant/home-assistant/pull/12890 +[#12893]: https://github.com/home-assistant/home-assistant/pull/12893 +[#12894]: https://github.com/home-assistant/home-assistant/pull/12894 +[#12895]: https://github.com/home-assistant/home-assistant/pull/12895 +[#12896]: https://github.com/home-assistant/home-assistant/pull/12896 +[#12898]: https://github.com/home-assistant/home-assistant/pull/12898 +[#12900]: https://github.com/home-assistant/home-assistant/pull/12900 +[#12903]: https://github.com/home-assistant/home-assistant/pull/12903 +[#12904]: https://github.com/home-assistant/home-assistant/pull/12904 +[#12905]: https://github.com/home-assistant/home-assistant/pull/12905 +[#12908]: https://github.com/home-assistant/home-assistant/pull/12908 +[#12911]: https://github.com/home-assistant/home-assistant/pull/12911 +[#12913]: https://github.com/home-assistant/home-assistant/pull/12913 +[#12921]: https://github.com/home-assistant/home-assistant/pull/12921 +[#12922]: https://github.com/home-assistant/home-assistant/pull/12922 +[#12925]: https://github.com/home-assistant/home-assistant/pull/12925 +[#12929]: https://github.com/home-assistant/home-assistant/pull/12929 +[#12930]: https://github.com/home-assistant/home-assistant/pull/12930 +[#12931]: https://github.com/home-assistant/home-assistant/pull/12931 +[#12932]: https://github.com/home-assistant/home-assistant/pull/12932 +[#12933]: https://github.com/home-assistant/home-assistant/pull/12933 +[#12934]: https://github.com/home-assistant/home-assistant/pull/12934 +[#12936]: https://github.com/home-assistant/home-assistant/pull/12936 +[#12937]: https://github.com/home-assistant/home-assistant/pull/12937 +[#12940]: https://github.com/home-assistant/home-assistant/pull/12940 +[#12947]: https://github.com/home-assistant/home-assistant/pull/12947 +[#12951]: https://github.com/home-assistant/home-assistant/pull/12951 +[#12956]: https://github.com/home-assistant/home-assistant/pull/12956 +[#12957]: https://github.com/home-assistant/home-assistant/pull/12957 +[#12959]: https://github.com/home-assistant/home-assistant/pull/12959 +[#12962]: https://github.com/home-assistant/home-assistant/pull/12962 +[#12963]: https://github.com/home-assistant/home-assistant/pull/12963 +[#12965]: https://github.com/home-assistant/home-assistant/pull/12965 +[#12970]: https://github.com/home-assistant/home-assistant/pull/12970 +[#12971]: https://github.com/home-assistant/home-assistant/pull/12971 +[#12973]: https://github.com/home-assistant/home-assistant/pull/12973 +[#12982]: https://github.com/home-assistant/home-assistant/pull/12982 +[#12985]: https://github.com/home-assistant/home-assistant/pull/12985 +[#12986]: https://github.com/home-assistant/home-assistant/pull/12986 +[#12987]: https://github.com/home-assistant/home-assistant/pull/12987 +[#12988]: https://github.com/home-assistant/home-assistant/pull/12988 +[#12993]: https://github.com/home-assistant/home-assistant/pull/12993 +[#12994]: https://github.com/home-assistant/home-assistant/pull/12994 +[#13005]: https://github.com/home-assistant/home-assistant/pull/13005 +[@DanNixon]: https://github.com/DanNixon +[@Julius2342]: https://github.com/Julius2342 +[@OttoWinter]: https://github.com/OttoWinter +[@PhilRW]: https://github.com/PhilRW +[@PhracturedBlue]: https://github.com/PhracturedBlue +[@SteveEasley]: https://github.com/SteveEasley +[@a-andre]: https://github.com/a-andre +[@alandtse]: https://github.com/alandtse +[@amelchio]: https://github.com/amelchio +[@andreipop2005]: https://github.com/andreipop2005 +[@armills]: https://github.com/armills +[@aronsky]: https://github.com/aronsky +[@awkwardDuck]: https://github.com/awkwardDuck +[@bachya]: https://github.com/bachya +[@bakedraccoon]: https://github.com/bakedraccoon +[@balloob]: https://github.com/balloob +[@bertbert72]: https://github.com/bertbert72 +[@bokub]: https://github.com/bokub +[@c7h]: https://github.com/c7h +[@cdce8p]: https://github.com/cdce8p +[@chilicheech]: https://github.com/chilicheech +[@cmsimike]: https://github.com/cmsimike +[@corneyl]: https://github.com/corneyl +[@crhan]: https://github.com/crhan +[@cyberjacob]: https://github.com/cyberjacob +[@danielhiversen]: https://github.com/danielhiversen +[@dgomes]: https://github.com/dgomes +[@dingusdk]: https://github.com/dingusdk +[@doctorjames]: https://github.com/doctorjames +[@ebfio]: https://github.com/ebfio +[@fanthos]: https://github.com/fanthos +[@feanor12]: https://github.com/feanor12 +[@jcconnell]: https://github.com/jcconnell +[@jeroenterheerdt]: https://github.com/jeroenterheerdt +[@karlkar]: https://github.com/karlkar +[@kbickar]: https://github.com/kbickar +[@kellerza]: https://github.com/kellerza +[@kevintuhumury]: https://github.com/kevintuhumury +[@koolsb]: https://github.com/koolsb +[@lucasweb78]: https://github.com/lucasweb78 +[@lwis]: https://github.com/lwis +[@maddox]: https://github.com/maddox +[@maxclaey]: https://github.com/maxclaey +[@mezz64]: https://github.com/mezz64 +[@mfrueh]: https://github.com/mfrueh +[@mikeodr]: https://github.com/mikeodr +[@mueslo]: https://github.com/mueslo +[@nickovs]: https://github.com/nickovs +[@perosb]: https://github.com/perosb +[@reedriley]: https://github.com/reedriley +[@rmounce]: https://github.com/rmounce +[@robmarkcole]: https://github.com/robmarkcole +[@ryanm101]: https://github.com/ryanm101 +[@rytilahti]: https://github.com/rytilahti +[@scop]: https://github.com/scop +[@snjoetw]: https://github.com/snjoetw +[@swilson]: https://github.com/swilson +[@syssi]: https://github.com/syssi +[@teharris1]: https://github.com/teharris1 +[@thejta]: https://github.com/thejta +[@turbokongen]: https://github.com/turbokongen +[alarm_control_panel.alarmdotcom docs]: https://home-assistant.io/components/alarm_control_panel.alarmdotcom/ +[alarm_control_panel.concord232 docs]: https://home-assistant.io/components/alarm_control_panel.concord232/ +[alarm_control_panel.egardia docs]: https://home-assistant.io/components/alarm_control_panel.egardia/ +[api docs]: https://home-assistant.io/components/api/ +[august docs]: https://home-assistant.io/components/august/ +[binary_sensor docs]: https://home-assistant.io/components/binary_sensor/ +[binary_sensor.concord232 docs]: https://home-assistant.io/components/binary_sensor.concord232/ +[binary_sensor.egardia docs]: https://home-assistant.io/components/binary_sensor.egardia/ +[binary_sensor.hikvision docs]: https://home-assistant.io/components/binary_sensor.hikvision/ +[binary_sensor.insteon_plm docs]: https://home-assistant.io/components/binary_sensor.insteon_plm/ +[binary_sensor.isy994 docs]: https://home-assistant.io/components/binary_sensor.isy994/ +[binary_sensor.knx docs]: https://home-assistant.io/components/binary_sensor.knx/ +[binary_sensor.upcloud docs]: https://home-assistant.io/components/binary_sensor.upcloud/ +[binary_sensor.zha docs]: https://home-assistant.io/components/binary_sensor.zha/ +[camera.onvif docs]: https://home-assistant.io/components/camera.onvif/ +[camera.proxy docs]: https://home-assistant.io/components/camera.proxy/ +[camera.rpi_camera docs]: https://home-assistant.io/components/camera.rpi_camera/ +[camera.yi docs]: https://home-assistant.io/components/camera.yi/ +[canary docs]: https://home-assistant.io/components/canary/ +[climate docs]: https://home-assistant.io/components/climate/ +[climate.nest docs]: https://home-assistant.io/components/climate.nest/ +[climate.wink docs]: https://home-assistant.io/components/climate.wink/ +[cloud docs]: https://home-assistant.io/components/cloud/ +[coinbase docs]: https://home-assistant.io/components/coinbase/ +[config docs]: https://home-assistant.io/components/config/ +[conversation docs]: https://home-assistant.io/components/conversation/ +[demo docs]: https://home-assistant.io/components/demo/ +[device_tracker docs]: https://home-assistant.io/components/device_tracker/ +[device_tracker.asuswrt docs]: https://home-assistant.io/components/device_tracker.asuswrt/ +[device_tracker.icloud docs]: https://home-assistant.io/components/device_tracker.icloud/ +[device_tracker.tesla docs]: https://home-assistant.io/components/device_tracker.tesla/ +[device_tracker.ubus docs]: https://home-assistant.io/components/device_tracker.ubus/ +[egardia docs]: https://home-assistant.io/components/egardia/ +[fan.insteon_plm docs]: https://home-assistant.io/components/fan.insteon_plm/ +[frontend docs]: https://home-assistant.io/components/frontend/ +[google_assistant docs]: https://home-assistant.io/components/google_assistant/ +[group docs]: https://home-assistant.io/components/group/ +[homekit docs]: https://home-assistant.io/components/homekit/ +[http docs]: https://home-assistant.io/components/http/ +[hue docs]: https://home-assistant.io/components/hue/ +[ihc docs]: https://home-assistant.io/components/ihc/ +[influxdb docs]: https://home-assistant.io/components/influxdb/ +[insteon_plm docs]: https://home-assistant.io/components/insteon_plm/ +[knx docs]: https://home-assistant.io/components/knx/ +[light docs]: https://home-assistant.io/components/light/ +[light.demo docs]: https://home-assistant.io/components/light.demo/ +[light.group docs]: https://home-assistant.io/components/light.group/ +[light.group docs]: https://home-assistant.io/components/light.group/ +[light.hue docs]: https://home-assistant.io/components/light.hue/ +[light.hyperion docs]: https://home-assistant.io/components/light.hyperion/ +[light.insteon_plm docs]: https://home-assistant.io/components/light.insteon_plm/ +[light.knx docs]: https://home-assistant.io/components/light.knx/ +[light.lifx docs]: https://home-assistant.io/components/light.lifx/ +[light.limitlessled docs]: https://home-assistant.io/components/light.limitlessled/ +[light.xiaomi_miio docs]: https://home-assistant.io/components/light.xiaomi_miio/ +[light.zha docs]: https://home-assistant.io/components/light.zha/ +[logbook docs]: https://home-assistant.io/components/logbook/ +[media_player.apple_tv docs]: https://home-assistant.io/components/media_player.apple_tv/ +[media_player.cast docs]: https://home-assistant.io/components/media_player.cast/ +[media_player.channels docs]: https://home-assistant.io/components/media_player.channels/ +[media_player.emby docs]: https://home-assistant.io/components/media_player.emby/ +[media_player.plex docs]: https://home-assistant.io/components/media_player.plex/ +[media_player.songpal docs]: https://home-assistant.io/components/media_player.songpal/ +[media_player.sonos docs]: https://home-assistant.io/components/media_player.sonos/ +[mqtt docs]: https://home-assistant.io/components/mqtt/ +[notify.html5 docs]: https://home-assistant.io/components/notify.html5/ +[notify.synology_chat docs]: https://home-assistant.io/components/notify.synology_chat/ +[remote.xiaomi_miio docs]: https://home-assistant.io/components/remote.xiaomi_miio/ +[rest_command docs]: https://home-assistant.io/components/rest_command/ +[scene docs]: https://home-assistant.io/components/scene/ +[sensor.airvisual docs]: https://home-assistant.io/components/sensor.airvisual/ +[sensor.citybikes docs]: https://home-assistant.io/components/sensor.citybikes/ +[sensor.filter docs]: https://home-assistant.io/components/sensor.filter/ +[sensor.fitbit docs]: https://home-assistant.io/components/sensor.fitbit/ +[sensor.folder docs]: https://home-assistant.io/components/sensor.folder/ +[sensor.history_stats docs]: https://home-assistant.io/components/sensor.history_stats/ +[sensor.imap docs]: https://home-assistant.io/components/sensor.imap/ +[sensor.insteon_plm docs]: https://home-assistant.io/components/sensor.insteon_plm/ +[sensor.luftdaten docs]: https://home-assistant.io/components/sensor.luftdaten/ +[sensor.netatmo docs]: https://home-assistant.io/components/sensor.netatmo/ +[sensor.plex docs]: https://home-assistant.io/components/sensor.plex/ +[sensor.pollen docs]: https://home-assistant.io/components/sensor.pollen/ +[sensor.rest docs]: https://home-assistant.io/components/sensor.rest/ +[sensor.sense docs]: https://home-assistant.io/components/sensor.sense/ +[sensor.serial_pm docs]: https://home-assistant.io/components/sensor.serial_pm/ +[sensor.simulated docs]: https://home-assistant.io/components/sensor.simulated/ +[sensor.sql docs]: https://home-assistant.io/components/sensor.sql/ +[sensor.systemmonitor docs]: https://home-assistant.io/components/sensor.systemmonitor/ +[sensor.teksavvy docs]: https://home-assistant.io/components/sensor.teksavvy/ +[sensor.tesla docs]: https://home-assistant.io/components/sensor.tesla/ +[sensor.tibber docs]: https://home-assistant.io/components/sensor.tibber/ +[sensor.xbox_live docs]: https://home-assistant.io/components/sensor.xbox_live/ +[sensor.xiaomi_aqara docs]: https://home-assistant.io/components/sensor.xiaomi_aqara/ +[sensor.zestimate docs]: https://home-assistant.io/components/sensor.zestimate/ +[shopping_list docs]: https://home-assistant.io/components/shopping_list/ +[switch.edimax docs]: https://home-assistant.io/components/switch.edimax/ +[switch.insteon_plm docs]: https://home-assistant.io/components/switch.insteon_plm/ +[switch.rest docs]: https://home-assistant.io/components/switch.rest/ +[switch.tesla docs]: https://home-assistant.io/components/switch.tesla/ +[switch.upcloud docs]: https://home-assistant.io/components/switch.upcloud/ +[switch.volvooncall docs]: https://home-assistant.io/components/switch.volvooncall/ +[switch.xiaomi_aqara docs]: https://home-assistant.io/components/switch.xiaomi_aqara/ +[switch.xiaomi_miio docs]: https://home-assistant.io/components/switch.xiaomi_miio/ +[switch.zha docs]: https://home-assistant.io/components/switch.zha/ +[telegram_bot.broadcast docs]: https://home-assistant.io/components/telegram_bot.broadcast/ +[telegram_bot.polling docs]: https://home-assistant.io/components/telegram_bot.polling/ +[telegram_bot.webhooks docs]: https://home-assistant.io/components/telegram_bot.webhooks/ +[upcloud docs]: https://home-assistant.io/components/upcloud/ +[vacuum.xiaomi_miio docs]: https://home-assistant.io/components/vacuum.xiaomi_miio/ +[weather docs]: https://home-assistant.io/components/weather/ +[weather.darksky docs]: https://home-assistant.io/components/weather.darksky/ +[xiaomi_aqara docs]: https://home-assistant.io/components/xiaomi_aqara/ +[zabbix docs]: https://home-assistant.io/components/zabbix/ +[zha docs]: https://home-assistant.io/components/zha/ +[zwave docs]: https://home-assistant.io/components/zwave/ diff --git a/source/images/blog/2018-03-0.65/entity-registry-name.gif b/source/images/blog/2018-03-0.65/entity-registry-name.gif new file mode 100644 index 0000000000000000000000000000000000000000..0af429f850a6838a975aede399b5a215f9b84e73 GIT binary patch literal 630894 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

    (mdve-#%(;w0lZ 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%0Aj-K1vf~dTLqD203JJHN?p;_12#2)g8P6=KDy92 z-{=xxptMT9x=yn6#Z>>s+kmy|M@O%J0+;l@U9>prQ~o|+`F-&I_u>5SBagn1zWF|W z{C$%B$F%Z~7nVO}@Bf&~|MBYh(T{~UKNgRFytQ00tp(*-0uOGjb=~^1il7<#w7!~f zG4K9QNaEKZrM0QiZ)6i+p@&~V1!(+f?1|^e0YdaVQJqmDdY;~@MKcIl^ko<x>Glg92f>7}43;?u6-c3t20-^k)P`qBh09>`UW(ChTWBwMC@RVwFww%I<> zbw8glv*@w6`Yiw4H)-9i?fJ682wrl90{@%zpFiwx$ z;A1VA1S&sYUuoc?IWy_TvC=`jb}}cZiEHts+cj#P%MTUT<|`|1)E21g6W0-HTWK8R zfwR!IV{_(cdM5nUjEdM6bLR_?|Pa03idBGB&vIkz$+*X}%K9A71`nER~W(WALQS}SSAHQZu?xk>aq-3WVd=jzS;FljT#vXWLa=c0RD z^BuLTt$MC)JJQ#0KjCS+?m4C|V}57mMw_|Mn=ly*zx9$fi@WdpWi0P~UTw3ye+-ee z!jkh6tU{< z?AvdoTZYToXWlGrx6i&cAa^s@XRZBa{(Ulehk}S&U$r7-d3i@jN~xw}S$gfpW?6Q) znXXfL)Xz*u_Np~A=cwvW@|^YUrT*L24PoHzzA8GxNT! zI+p&C&0j&^7g64S0ezdShf{HpdQ%t_7BPuKAHN_{PftMKI>?~DnC_Pz^~SI$ z>6$3#e&a9DcPld_C^(zXlQG95d?Zss=fVl_+50t*=EY%Tx!GbK8_a5Buo~GH4tI4u z0eycNM=_<8+Kp%XsKd>3PqIi9hIo7~1|Ki(be&|8$Z5QsyWN1H&aEmt$s+l{Q!XQY z8D~-u@C`(UvbsSfIj-*k5kroX?{aX{nM_ihh_ogzFJieV#_?b#I};*QE!;QF)V1OY z=PlN^q=}J&ts8{~+(|PpW35hyF2=~Nm2+u}O_moXKoki+(#W*W_WE6%@o(4nF*^T$zzhDzdQ_$@4jfYQ7xG?}B^(`iIN~}^Mk6HoP=hYzaN?sdmE@Er z`-*V zb!Vj~Oz$Er$3Kz(*n0@RJ4@})dbK=%k3K1w=P=>^?1u&kg0a_lY;OLT^5_P~gV zn#?13vZ+Gw##L@0e+#9O9NXk=CEJy_~xob_yv8wQ< zr8olp{q@Lkux1}p7#?|go2F(Zs(#6I^_xW~kl}otE^Lp#fEaA|4o|i#VC+ z`X4A{5DyHBMPOeU4Yij`zp_Z)%nqnN`+H&}`xZ3CiTM{X5=^P3sUjwxh*MnQteO}^ zs~;pKRRr+Z+-RLRg0vwmS!IA zGmuF7EBfitUMV7cP~A&!ll1!SR>V9jp57Q}%pA3|N1c-!cHm6Tnrbf1MOA3K4kRJl z*fgcO+Iek-4Uw1%omZ8{NF5 z!$_~crC6R(sYMa?H44&)A86Xnq=_ySKpFpE~5gRw@+!W7{W3KijZlxHnMn$r7~w5 zq`C!F#X#;<^mq3QXmUgwjSxj9;~KIKbKSwF7^LN1Z$ae1#Kie`EF!LC!f4FQrP=4T zMT-zAi@9l&eM~IOA*B6lbY2zXGCjWD+2(zgseb3%)608gn(9gV!^J7wGthUEz_+OW zg^x}6pfFPkX91#|)PR>w=LU_0wvA#4H&5=?&70q@8XWJbl=ktz7NtuytFCTU#9RzV zIq1CVOA2OL8r<3c&S>nq(c9FQTZ4+^Fmk#c(wzK5-}45|>y2PeChZns?PfhikRVsGwP25SJgLSC1J-}x`+&;_~{&0HC7+q3l?y7JF z{0LRv=TIGt5sS8yob3^s6tp?M_R2((=`m;HP5Ukb$}idkLb3jU4u;JJ()qc&$W$;w z83VIG-RTrO3tZ=kfg6r6)0ZuV>3d$cx`k?CzIG-IwV@3&98@{I1R^(z+AgFCS!NkJ zf(Thz!);K@EHb4YspJQS?tO`_|)jo!kR-?b9`2!f%w5@iyiK%B&gUYAI%KMy$`K;~N)cEAbgBJ`oVP_oAF!)cTzL?;oACJ&|UydNhR+e2Y z4pUm;pe|jLB%Kl^ze3DfW3-d1(m%5$H{v-hV)L=)_DQz#*O_iaYkkB;m%60_>L+P< z7MGea8y$z254^pD@Ip9+fM(-Bps+DhXvZz)CD8SO1JPy9t_%f7F7pxtaLG3`s^%59 ze>Od6aG3KU(QJ!sZS(Z1dLQ`h+Zzxyq5F5J8uSvOmuYk_T;cl?kU;1=cXr#$RPhY` z7-4|vMSOf)(Y!uXj$WDwRfFqNp^i;LhD=5e(jI(Y6-{U#`7>1QPX~tA*Btdh!wK=J z#UiyQJ>5mo`+(Q?3S^ypGqu`5 zX`$kVpa?LMuKfWP`rxez#DDm<#b!}ihgLljAmhiwl_m1_p>_WGc0C{KZ$8*{wEUJ! zDjFnrX7IJ&n{R2N^>9n{&)u+FHKMZ0N1jg|4;c0&Uc*;*ro=-|Kh(e1h_U48DYH!c zIA06ez9c|tzwvOUqxd*qk^*ai*tQ4o!0AZf#$Ycpi@rr5Iu_c+V3=05ja@nr1K zV15ktxGb2jCs_E1#*vtKpW&e+6T&hPEapqYCj+?dg_Nh$$jfs7nd>bJ5(BgS{gn1k zWgrsb`l5|?gMUz0pGfH&OSQ62*z~`lZ%yQxwY?mE#d4e|HI0JRW0Zbl)0@_4@MQfS z$5KOhzVRFSmbEz)+~)rBH}q|cS}b5t@ALlk3HtWRd};ks&k5Iigz#U)vHZ7VIsTJi zqJJ-rg*c_5-bQk#5z)7(Qlh$=IHkQMqHl?8ddU~WR0rae_CFTK@-I$lwV77IX#VY` z2=osToE0C<>_h6#qf6Au+Pp34qD;L{Z?!k8nD}M+k(lL_Si{5g( zx&Ojh1amMdaJ36Idsn0|2L_JpuJBlY-}9Z;tP-39lXUliUZ4~y$mT~vD;PX|;`(Te zMjR`!cGc!mte&y;4{?bn)*%J&i$em(^9MF!b&3);QrQ6?tmxJSKa67g=j+B)NQ9Ut z$XV}6PAUuhV46}_pkkh;)44a(W_<0(;kd5z8Lu&^yIsv=HVLktFEP}`o{t_-wWT^9h3 z-fI~{zyxPPi=OQ|p0bb=9Jp|a=m;`ekpE!Y{(+LO$o8o{nQIO*Nqq;{&W3!j;|9Awl{QQaOq2=J?`^Vpg1^X_bKR*LwDf*%n zc$publE%@O>4QkQOjEsd-LaINNIv@l48or$h@%sK>S83rAs_xUn0^VBwS-`5+~Z%B z?LSiUjrMTa3%@+Xerof{g@^3mME-;BFsK$bhT^Q4z^>>8Vc|%)=h0Z?B|B|-#8K?0 zp1S*bBb@X_N3oWI?u?IoHRQBW1B@`c;N6V;A8QT|Wm@<7rM#A?KQdP-p}G@bi>i-z zH&VG)FvtjQJ5z9jD3-04I@tImF-}XuHJUnueg!FTHC4yn&@Siix!%K9Iu26nPZHy_ zo|?@aq!C6+gnfpdT6{hD*AwI3J)yMUTT|`k(~H10vAe!JY8@rt^<6+k4purGJYB#+;yMBm~8Ot??i z7NH8BgO+BDtY+9Ijdgm!_*{}ahWYAri@4-r+ei5d>w6x@jz1s;sN zMKz3qDFpovB!_uh`Wd}k>qlIk?x3Ct`j;uJY!A6+mkq+~!ZuM7?+HUW-|{jyW>tiX zTk*?v{`MVo@j|cWXyYH0a^BSwoBZUbEw)y?EF8Pm5fU%czXyi%HSGn*%8)4x-OkM| z4H=bN!x@drZH#B)hD9~D>q^jXuN(YX#a$0_{Hu!FI8g;pC5{DC{L?P38g1K{{1fQuZxC}o|=3(DZjfr*W`2j zIbMNd7%j_?Br^7)^Xtd|i`>_L7B2|BssQiVurU{HwY80vSi3>&;%k~r3Frl8_Omb` zla9Ugc{v)VJ5X-tWj4)$ORN%eT#cWm;DoZv^I2(nmp%8rk$m24=0*lM&aWiFu|keF z+o8R^GiE-EX>S^MU>JU`C%bNLuyin6PrU_Vr0lnviXp|w` z%zrb^%l;iP5=5h;xVXSf-l?c44R%=`-cHN|*&RIQNV*7=_yVpg8`oeV?nt8Hc!K%MjQl=`@r3lnNsT)*esOlu$ zZg|#7D5@TP)sY8YYKI4 zoh}+T)SIp9^`{!*9rL(2;v(|VN#6IaDrL9*1w)-!nT=_4N!2x7RbAn_9I%dXpQ0z? zb+7_Y)VVT6){m&SdUs*xlGO65z`kXjKo#z;aI2b6cDz(IRY{JXLfwNXgTf}(yEHp( z^KLY|59nC_lwsEh!h_;}^PQrg-1>N83H-Zufx!mRgNUZU!rv_R?YIOjC2ph2>qE3F zS}8(*^_~88SpH>}_#gh6Rj1*)Wn&%R@eyv@J{jZ_xoK>*A-*<-U;cXfqQ93zQi)E! z#Ys-Yzm;J(7*3yK+$~06$A~<*d;FQMJODYh{4D=-K-XX6m6evfA@fT!36?#93*R9q ztNX1#h+z?6aO7fehtS5ND?-C`5lbVkc`b~#HjVgN2~8XkJH;U!!8NWKdh)wa?u5v* z@v@7K=lnI}rN`)vMkJo&Li8epcP}6v))gPah3bAi+r7zHx!uEZ4*3Ou3(jYJMQc@{ z&o@LbL0NdM0KBm05uIwsPZT08M9SJY?53!W@D<@`&!u`^@q>x25{_PmZzz6<&as=+ zDnZvNHmzpmCqCA}$0ikm_&Q^YO2hCaMR7uRq_xYyt=H+^hLnA&s7Uo>%;L!IkCo%k zy`5(mtC(Vwy%q`1>onA2xPU6ys_py)Q|GCP1P|5sA+9+_Z${2JN9l0+b&$*Qh^(F~r-iZgt6tuQ{;l&pp z++CMz_bZC2jLWN_a$8l=8p)5f$>b%pL55<4)X!=?6&cI$BrbvDRg2=rt{2(5pY?X| zz$kno+t>X4YqA|!HWOplTN~t@`1em zYQy_~Gv1`ZAg7Y555xv=FnU;yi=3?rBp4mI8@um0h%VClH!~N15)!~$up@`od)x`= z_Z=kG$Be#%3EuBErjjoXmUVsFX?^+NQq99Z$AL4OE5Mp<@n}+7hik#)jDw3VyRr_8 zCq8L2`ArngT7HMHj0j^hoHYxj@t)O_KRf(kDe7E!Io^qeQI}R`&hCIzdEw z4Iw`mxoNLfqhC}Q1CeJekf|eR4XZWbjS6lY;FDt$Z)tnMq>c|aGPsL!k|Jqw8vKcL zNzHF5xHD`j?d8`-4DAZw=5o=A8f%=?5dtq>n#$J1YV%iIjxTM;37++C&xly*KB%Y$ zq?~kWsFb|ph5h5(*Yl`yRdf{&GG<@O^>2UWZG$r^&*wbXrnGwwV?s`)F8wc6~^?QZH53_4-Zpo;p)A!x9-Q5)?-#vcecF^p0 z!1K)ZA0*k|nlOLh{ir1w5wt@n0tG>+BD3$44;KYtAr!ug&bx%_Yu|}OG{3kPOk|xt66rwFS_J2#$t~20f^~eN zOr*^fj|z3a)jQOVEWdn28N+a%>rzTA_CT9co6R7Rt1gmu$bM5%7M`dp+{YQO zJNcF!8&NVzDs{ZQ!ZLE^f!9W z-}Yet8?BwV2eTarqKASdPp{a>Q-`;NL*_a>(bpKneeLd;|=1yvW zlXC^vUWY3t_^A5W*h=$YcYkVXYL#mt;qE75sl1VOQmh#(ojjkF*3RPvQ$F$dd6=Br<+M^#ktMYv;~F-ZP#z?(kGYZ^?%o}Jp5n5NclUsyJgrj5P-VX0AzNzykQj84qHz(pV689?Y$Iq-Ve%#* zw(d1pp+NjaT@*fN*le$`Q~cFbeyUStBC&lf+WF>APSJ=!LHMwKd7UH)cl{Zbcc%3_ zzC};@CgVA4gclZJ)vf6*%Vi4d#zwKiHO)ynVl(*U?e>7KBLWnsVOVR=&c*Nk|DwOLM-$WNhmQ-$gdiHZuu{(YNx#p=?E)7%8@ zNo#>rGwklx9!9K z`j}Z;r4JyV@G%*YR-g;IpCk$J8Y4HB*GA}NLMRVU|9fxJ^YJ};HIwcqjayuPr1t4& zA{)C^1Bq&M_Dg|IDoPtw*L?0N-P=6)efw}Pd6ThY{*4}{sJ6iL!^@zv9N zjs^m}12*y-dmh?qMX{6GVmtH>i#D5zAGr7^`)9`m=8)yHK_uZMF=~4JXkyEx&%7#e zRlKiQwamDQJ!$e`zC2b|Yi!X}Hg1N}s5iL0BPBu8>-W5JPy6^&{zSj~t559Ra8kH(* zV|M=w#2Fzwr(bkYcKz_(o6P9bU*44LPS0&USo~UMs&KS$8d(oM4MnDY9sb1Unomah zH=$7^s1Xzk3ja?>MYTVTiifJS1;0vS@&AjGC|j8w><){eFAfqTmPB*@(j$Tuawu5< z21{x897SV~BG*XfKB$csX?aTjdtc@EL>-cXk6fy2x>mdAXLQnTwVugaIU;`L{3?mx zKA${4k;YtwZ)5M z6f#OB1wEOi05Q+N$t-3RjR$fuk}gKWGMI~EbGtOT?vpH>8@mVjGo+~=6ab3+y#)N@ z@ku=@f|1d<{$>I`=GP*fw($3LV`DLKk^a9vu9uulP0dHk*4TI^0q^g=JWtUmhAXWj ziMGAZ@FxkH9sf!R@O4v!;mTG>%yiCRhgIRUeHTi=s?is($&8-i&wm%#dtZ|J$N5g* zwby_6Kd_u1B~IxjQ=1oL9zFUsJ}na67p zgSWw2xWCb^i2sn82P^d0vkrf`$A-Xa`1Z#CdXJsL^0+ac@$KoE`VDP%xdMp|AT`_3 zJ|X8gOz{d@yZ4i|5P2NAI_YcCtzcFV^R?e7jskW9zf^Po|2=js!!FHnEz^NWyUKED z{X2?d#ec1uBhs!i{vpM&@?GWM-(%SpIL1u~y`NG6>yKYq>UsyfpTPThtF{|Qq)#Z0 zoD5J*pT^edx*!xN5*cVJz{0*rw&m)u6s@q^zEN7W+p+zBpA}wsLaZ6Mx+yl^I`0i{ zG~~Tm6~w`tPoy|*f8qErBK|ms{+Z-_^@mZ#&)Xly(Bwjg<7!Nj@hEtklq1_%erK=t17#F_$OEt-X#!$b7^NS(iEdfeQ&`&A26I29{+p*OWY9U@gVZw za+Zk{Z<*e(S*Pc@9>FIzs$(3g~H`Z)p{1fUS~nxa1= zx>@D`ti+0jqH+PMp-#=WLuX`zpr;PvaL^I&KV=2tDm;>+sck9 z56_&4YX4AYPeiqU{!Bfov;Tm6c*S8UjG35J9M1NO+VPuQW5bjkhA#)PzsMv!r}2Z* z7sXgWRC3V~M?IWziYMel3{T$^oM0=I`?3n{)rG{E5-xoOU3*9gcvmgzd5V$Q)yt`{ z!J?8YMjl^yjCW*DuVomt81bar6l$#{yAANI=XkvsqCwtG?#Dl~v);2eah#S4lUy#?xO+wKoQ7ONohc6aX8%Dts=K%S9k2(8G;rvz(Rq(D8 zxkjUn@m3Y(^Wn?#k%+X)O4rtRae@WmPL-+z{V!Xkm>#pMrBy#m97U$DIM=jHOxr|p zzVhCx;Vhk|)fJujO|Icw3+|#U*?mBS;l1yCu0a>4IHH}6U@$o(QagT3T1WAvDZYK& zBhD5eN_UMiAnK9v9(=El-o$0U|0iwO{s5Z~k=pT-zn7}6Q=`g+`;36i5YN04xQ|{5 z)C1v+PU$^(L=#di@r335NqPAE4ax+TGil;y z0>hJP{p`UnRKGhu$6tMbU*@j7AyUluu##n_yl%JqqPJ>3|K3dnmn~sehcdgE9q&aS zOVaAbuxo0*Z)*plw-#gIwZ1D!CdTax{>iTdZjM^OjMq2*II0*D!8i6`tADk_B2}gB z@OTUfmiJlm&D@XBtDbY6|LsK9&t7wr%*||ApMqt!DRe3@~?+~S3G@$ zUgp1CWqQf!%+uE2bm`9>(lAhnsEX*UC>kHsPEYtX z2b4e*hTRu1kyL2DU!#g+q4Im!+s9`3X*d;I%nh{RDF+BOR6Etbqm2l@IWLbYuu9lJ z@9QkUfDDpWT^~;+&)4hfxDytiz)m}xzD`EYNNRSx=l)BV&M^6t0t)mzLR??7Q`!qr zfBE26*&AZm_v}Y1U?z_}y9Q(#AfLPPh6oR3&Lp|K!-KQW=Bw|8uwL&D3Xr*cCmn1N zD;lh3fb`K1M4Tv|I3c3X$pldN3z*Z|{T!EIN@@$}KJ^yX7$W$lSiO%zvJe?a$_e<{ zq4bMQrJ%+nbR?^?E2*aTe)<%;x=WeVK1U5t?0Hs@~Vt$lydWWv*19f_P| zv)zVp2-CKHKG@lv9s+Wq_n=ASa=J4_z zBAf2ui3vuuPgb9*{RX`{NtnfP@hmze&1tLVXG`>WHEddbg0@4&ZWX=sr376_;H|1A z(x3ZE)eT6I28j-5L$@1e?OAi~LC#+@2<_tMwhVtu{4o*NI09FLZsvWf3170Au10^T zB=RIfr2urIfY-Ssmz1QfEVuU!e%TL>c&pt_KZcWv_QYUZ1mobupO7E*h3ft8W|qFq zeq=;|*#KMm^_x%VV~CvO!W#kePx!t$i9eN`5lnw7@gx=)ktTLn6WRRE4}E8kT@EL% zL!LDah{NOliw^se$VvV*=hC+GY2N*b(B}!}7v{^ae2rY&Ui*DMruw+x^G)bzEXY#f zzfHXQw%hrc2)_9*d6GXqz49S~Zx;Ur;??m&COB{-|5u0Q-GYNFaHn`aKMIy~$JX6l zL~}ziFAQ)J456s5}X(GkY1h^Pg@by>Sz<)5Pc+T5bq0 zKn$$uexm9TPkri@E@+DYC~sh?10+M)!LooHZ67t>?iuQW8~~mWfs)V!3*M{%p+c=S z%2QaAKu78j_aqJsutI9$2N=RaQ?xgFo&2@5uzO4CJJ+}|!RU)lFmC7t*|p(v6u?jp z;&>wn6%gWtGRoF-xaxPaG6#csB9o9X`d)sq%?O!t>%d84kRV+AIMn%5@{L!{MiCCQ7q4un3JG(t*1)r2=chlG$~pk7A?*HlXpYXSpV|yc2-4Fgj%o zywqgC1&1+{2l0I@1P9jZKxC~ePxS?>z$Z_kHaHSVGadC^-GTFVAN_AdzB|qEb{ZG# zQVG7ONm<)55x-HO;^=^vgxod?@BL7J83|=isw7n=G)uhHGq zJ~8hQ$r}VdEuE|p^1|?xEcz6^?7X&NX%jL)t;Ynyscm?i)`avICA}u*sPe94sgY@@ z+MSN2MFHi=Wt}qtkCh`~9a)4*41;e@wvS@Jd!+|wBr*&S8Dk}1h^MvTC^ zt?Y1-T6Su}xX|E~>e1Wt?2*vl~AM! zL1+^3yru$8n+b7%t+asoD$nfV20?D0OZCQ8FY#?o?sZ%~C1_Q_gDE9FA2106V|pm{ zw!v60`o|VRgOrLnuSo?KA!poG!gQ-a;iCm@n~yO*Ouci>G#N?4dW%l_R~KyGKF^dW ztPj1k8KJ<;nZI-GmP$D2DVK5EP;fF=5;doZzzF*IRIpl6&ef3O+76NIYp;nE5-T$6 z;K|#^svlHFuG&@C9*mz-TTLGO93}&$3yJ>mCTn#qVn>!PC0KYxb!#JHjx#H@GmPDR zIcMXtcygw)4pxi7ibS0BEn$z8OMUJ8!k3A!FIs+T8n)OwR>Fug521W2R1*& zKXl4TPwLZ0FUWAlR2Dh!Gdp%Jw?O=2G>LgKg#&1Anxv<;4~>P7Ad6Dqn1(nDjxw1u zY)O~Dj(HYKkdpTmU!L}#Nrr7OSKOPCtP5fh;of#>=~|oACkrvY3_r~MTtjXO58W`hd*}Fe^~R6V;)lxXB7~zvqy7Vll7qzkdm5AM z?NOI@o_jDVn=D@P!G5=4VZq#wZ@M6BB5@R<@wJVia|TJ{BR6Oe)XRjWmBkW;=#0Kt z<_s(g0n0Y~hp=zcV6lD2N&Dc`;NTePTQVk6f*Bs?BV17B!GvDJPd7r^dR^tpLs|{V zVW3bY2LUs8z+^^Z2k`m>;~~t|&JLPLqF}`fb0@JZg51No8WV2A7SDlilSoKv=>InQ%?8p!lnjRUVkL8&FkvIB+1dtTgm6krh~)zz#Wj?>;{ zG^jaLcI_sE?Lk^lQiom+O*87uFSTEv13dT0T-`5?-jt~GcAy}*@qCdIY1bBua+5fI zd4)7WvQqLASEjn0pJ_Q+5{K4}J;oH0{h;jRP^}FW&C~L_n<+KM@mCL0@~036FIBE= z%5CBhkckwo=G0tO2aC*9Yq`|YWW)|W4SXsM$(^P@q~hK#7y1Hmu!z_ULQr5+4}yq) zr{1ps-HSr(?xn)I)0nX75mBiT6`-AkYh1;|6UGlV(5k_ zRWp%};0`Nc@@_e;Sf44E#s}oMXS}=$r0h{-Y5{mWs7w@=r=JTJ%OMfV26IpYJz1pt zuwp!@NED#11TFGqRlHRAkST{l0*OKJNJjvaL21!m00Z(LZ$h7sBi2L#EhxoP$2?d; zI+Hd)!(RZ~gY_Y)u@t%2q~%%pshf}#)5uIx4vH;4U=3gNbcnK|0=|oS6}?HUh>EJUbpwy;TXn*q#Ghyt6P~22BjL7^3v^ zFQYnD6sVn9L|1;V9a!!5yI4_9!r^Nnm%STA3EP9`$pK$BfwqbgDzT~uAIj3WD$TVJ zr2YVFM`rnOc|<0nDKoSX2`u12Ie5zJ?|`%ppbQ5mR4R0s$rV@`5;oynNkZC4Ofy7s8+O)hU~7xbEva#JYY3{Za*G zV$Ozks(24rey(hHFFir7>iO4H()kKleIf7_=yR`!veF6nXCHUeF>#d8_oUc<1?V0$ zNLXj_J7+N$WV7?rj15&l_hC!*<#flU5LstjN@DhpIhy`2O%m_YXjlsT_<@|S_;^^e z=2Wfd?MC)Q%P%+Ra0IKM3kK&vkk+HS+h<1McN>t-LbRm1xT7-A_M$2AR_qYnQjcX<~ zpavUIn^I(!Ry6Q)^`5qFBIjtNpLht~f7tmrTNzGc!ur^$qD5N)czlg|+dbnkYx51q z77@h~N!`a+S^Ml1%G9p+jr;dW<@9O0wCW0G>VEk@?7fLU)O-K`&oGR^7_w#?``C$) zrN$CMvQ_phWyvmEk{H|A*O17*@7dR^8AA3H%D#mVg%;m8)pa`OI_F&He7>L0_jBET zzw2L^dB2{o=j-`=JRbLUCSO>~N{8Xw7J}9`utHl#W}61M^;3Ii`dp`e*khR7Qxn^# zpM0O*^m}ndBIx^;qB7m*2(f+d`2$M z;LrHP`@G~YK8V1($4oX8Ydlgd3Xn;>UW;-SG) z_)auLcv$q}D8A{aS_;AIuycBjV}^I(E>fc>WCqQQ&crH=o$eT8H|kmO7*+g2UDo)* zd7b<&z^9i|hJ7)iLvrJD83KhL02CjyHRRhmq1`0~uJtF3nb>=Z#+a z55DwRe|Zb{RfY_8#+{cd<1fMFud=5o2c_U4O);?6SJ@QspO^#xQ+WfF%S>P)TFT3g z>8)U28acl2PBtLP+;b=r;Y%7X1`!gP?Fs>LXDsx5pX*#+AzT}&y7hi_>X?6ZMckH_ zrA!q=!Ppcfn@3&tEzo#P8>fp5|LU}@T3yArya9;335<DB0}|{6SuI)B;pIn8HvNU!JNdhb@vw}0Ya{W@>pr_G7A0cn8#aBfz7PfT7$((i0e46JhsK}j>K zHo1y$-&bW%s2f)3v79zPHYbX_>y^N0biHca0^o!IqtW%6=|J9JJK5fTAC2z(At!{Z zXtRw(d~LHGuEe+XZ8S=2S@eB0iuf!1E50Nq(A|aiN1GFu98-wSi@^l}qo`puLXusS zw$i%8DAdGmw^`Sw>GTt$d!&xzX4mdUy}0p0)$NzL&ZNt)_*Wm__z(*0P5aZ>|MOhu z&T?dQI~8vZAX?3SpH1#T$J=pKUj*{u!!>(`4W?A^A z5EKL-jvhEkUA3G)&r!-@p*9DC6{ggXEYT zqWneKSuePTD;k?eM}-|Z*}7Hqw__4}vpB`OyRYHOg`~t$BIPgiXeDjO<*8-!T*Q62cnqtRI!sW@lBtH1^x0%Y&@b6-pD|Z%LO$#;fe>oo}8kc zJ8CLwA{u-Mg42&XRl{7gjh$+9QX7}g`z@!3%oe?%FY8pJHdIIuQMRla836k=Mr!%P zl_hAb4++H_RiaGr&8hD})WFAHf4QvqE9x&uW602y7@{}37jHklkd*1P^aMv!T}7sx zpY{uhNbpvecdLC|>;ck1PQNBrewjM(y&X%b7eag@(I8RMbFFnKxiy-^$g) z`(|Lb=Xk46=T9izyDRV5RA~IM=SB0uZmADxkqM!yt~KCV58^K}qoF^2t|+=Z>NJr| zIb84kjyCRYZyZaM`%@v<5X>QQIlD1N@%aIH#>4ta&3t{mH+f@uMZ0WD2B9gjhiC6s zXE<@&yFZ(FeNcU2-6}|Ga?4=4maVq)OSt1iwBZ{_LTz7oiA%2P)G7~t-B@3V8(!el zy64A+Y0^@UF4foDNgo9@lm&r*adPG)d+lZ)?Je?ChRYVcj4K)_@8Q-rUk}6?H%ZHU z@Vv_Qhpr;_M|FkJgP{acd#z1aT7Ry|P%B4y+_la7C&g^ru>+>WS0UvXrJ{23$V8|P zq@1-@Gm^xHq=Pe}{0bbmgf@t_lf@ffe0*j$j6boJGNR1iZ_R|bCbNq+mQXIy#w23o zW4DI4v(hRH+{K5tM>AgOj=04&kjMkXA?f>jglda>&iLJL+D^q$Ar{`(?;rL#MpPs( zsVzxP?Du>0S3LUIyL9%`{&OE#Wg6iZF)I7Sfy=@!LF7i1=S4huA|Ay&I!pHWWxzWh1_NQsCj031cH* zNm}5TU_bfh^)B>Q@v6(YB(~N?1Wqh<)AH`Y6i;_s)d~jmMYD_PTiZQ$r; zl6XSs>|h%(Gc&MgVDUubdDia3nW?AobiJG4&?o$}5Z@1t=}J*LcL0~Y`=-aM`WELX z=IgW4?6Ps&DxCZu%Im(EQ)Jrv3l1tNy4LQOD*ZdE zY@WwGEYxesCeSKt{lDu)*4}I1MZznATmDmpmeM>+)R2-m6{Z=)IIA>x@kqrXVBga< zcAh?b_mcjtrp*`simK8)m2)JdMoH1vnIH8c0<~f5aBsj%gL)Jp7a_mmu|W0Vv5qL4 zy7vs#Rpj|jj%=h4CMdVU&vaRf&o!6>B$LrX$*Pv#LLIN`9E=L7{AwbaXpmQjYDHf5 zk{!fvzb)ECa_-h9lw07-O!yI1C0td(LuMtf#78QM4F7KL95eoz56hO!TKnGrf~xZM zK`RN^5Q}>vFA97L&I0SW_T6Ip58?G~+<-q-8U7q+Cj8Aa{=0(obqr0^IU<*sDEHmH;XBHlM6Y9ZPjfHC>0Gfs zdS3iB=H%`3+GLNsoU1J*@2XIdO8KgDT$1~B6iOKmF^(1R4~O7TL4If$xh2>&WRIQF z+Z9T_%)U@wvG3ZN-vrkEL&JD6=~!u~9i{Fo<$BPOD6DZlK!HV0&7%T<)&WGEZx2ZB zE#$z>=tva5E55TGQW>5a3MKingZaRbTH!t0Y_}&?Vps|Vfqs$x9LZc|aqfMSSpLR* z>Q6|86NAJ)Zx5vv5u0z1j(i%45O&+4eVp|(2lKxqv4jv2g}v9gB#S~1=quE_Wq{;u zT66J)5@TL+-E6q`m9ROuT+PYlY?B!&nM4|8^hy3Gfz)YU9nlT zikDtj$v?xRNIxWcTeXlI5vY#KrKvVbBgF;R64-cCr)}sxP{l^(`pEIB+TCX|6>)%x zBQ`>cQY%jG7n&e*SE9yW!#pSx%Y}>P?pfHk}Xn-H>38Y zFSYSpN2uT{+?jifp2~C)gcAeG z#1(98*=7~2N9y+m%L$C7OD(i$Sx8xBlr4!OKg+QNm^k|(g~{DK)%`na&3Uo|zb1Yx z5W9@Ol|kX1Cc-8@DPc`@k3nEJHJI~}2yt2`Vw^MkzT&9qB_c&$J2VuoYMvu_u#J$? ztbcG>NPU-eqqfx_ts>MKR%kDnZ!{x7rBhpotj{>arj9Jb%ejxAyH-4&D zrK-Oa{BWZd>eC?55CGqg_khm+!{>eH<-g$wI^pt$&TbLe;U#$O0d85BQ6!i-X`JH&m9k7ORjkY6xwHQZ*LHV2K=V}DTHnPn7 z`2>;E>NXpWu^N)YMe)8ov$H2>V9`_;DBfHc;clZ|s1|{~LBdjidaF z7?Po_j-D8{tJTuNrd=p*D(8*K?TY2USpk}6HHC~gQpfdIAw>cPQHZm=RI~{pUQ%8= z?``*eKDHY-0Tp24n$i!QW$H@-_j^Dv%-$PY5P`0NFF{)%0$ofBG4Umn!~on9C}jHP z;pOqvfC6EwnIH=Nob*7(h+31IoL7(CbS$_dJj9D0ivtp*tO0TkcuvGKdv&eJJ zieRd%hAbM=#Z>rPHTQ zO}THr0ehZ{+?4)OFqyIPB0|8Z%mkXJ#3+Rqk*neM*0(d9J6j<(!gD!JOVtgW^&k>V9ea)GV2hkU6eCp z981E-WIiv!#dIP(x@+F@y6Bg>Td>%{Nu~Q3zX4$^|8g28glN+06j1nFC`iP+1_rPk zF4E*7oCzeSlw(`dD7Y9onmwrEOEk!#q0*w;ZNe`8&Z6U+rwq32CcY6{PfD z+eQ9(|5My#7cDF=i&{z#L0JtMv|(g*eWwF+}LUnr)m!30^kO?iiA zbLRDSUz7sjGF}$uQ`mxVsgFAXvBG)qi%932LzvDkL#+yFnanx$nj9a)&}2Vd+l(GL zsq>=Lf%x0)B*oV;Am2%=zL}8qQKL&T<2l1H$+@CRu17srSlU7S>)b7J!W)fKkH%hs zbvrM+>rKEhkImcaBK95rI&kWsfE@u&nQsYD1 z*vU;~f9`OP+AcGk+uuz@zt?s-u|5a@Q$>+e<{ihYXpyih<06hd|9^Ine^KWC+<+gk zXn!bk|L7)z0aVD!8up0@Ad_PLtynrpmVuP!%D8ZpS!2{O>HYD)I>;sCO0srfFMLAR zE-6L__esw~w_F6HZ!~JsgA5gINA1(NhqIAz_`x2a!ah#Ee}E zw{GxAWA#+Iy|$yEk39RWR73|q(~**j>Y^7;ba6musG=3kyH7A+4{x)H4^GmCvlbg~ zTj%*~KyC_kMZHiDjza4La%YeB@RUi0_V$$8o;=>-99@du`>l@Li%yNCZ%2x|9N$Mu zrPvC?#PbqQW^qpxgzaGFki?G-;`eKL+I2)XiTzeR1>)h`;Ny z`BUOowR51F<~o_Zd2X7BFi@q=iyq>Rtha&JuhNP-Du<@tJ%FKa+ySa z+kZ|@e#Gxu-QG)H_-|TFv+pzWhbNF0GH!PddIRv@q5hVI)6zj!5zhVCi z2h+k;8?J6B3*7`!RElT6Y69c!-{3_?P1gE?w)A?roF+QL=;_a@)&2Rwj2q7O!$zb? zx!<@kTpdoowm#u>@1s5MXL0e{u;E>%M`a(^@@rbtMbu#u?Ju9-zvW7^Mp0l=rD=T_ zbG6aS$z|TbCimo82>(9uu^X_6h1m!ncawG zM?V#0dRkk!RJdARFz<;#3N=wgUiZ5?vP|x)Q|q8# z!-Jt@mypw;ppp?e!hF5giUGXyTbm1IgCn!g>{R5a!a0C1_6>&_k7F=LP9jiJ;_*dN zIL_3|3rKe9nqA|`kzUHG;FWRnTyEM|%$#CTqbQ<9=H(!gSDi^usn6<)PeM;I$q7#m*kh3XWt#;p)E8Ziaoc5;^NXx!|1l{`Kj{^nYF6qwmlbP0w$2hkN1d$M+JP!}dW>P`p z={}x27jOkMF8n;hJi1^FaD2aCu)p`JiJnOZF4(n~Y~LRI7Pr6=u7f*Pc%=YxD-s*avx4F z8hF{cPtfTreQc<4aD!IY#J-9!;C7r`EtgtUW!l+!Q73XuYAuaz`p()wys^&ujx(6C zDOn8SHWRRPEr2?ZFvVk1VUF2BV^3344-sX zKcLSY}rMl z_!?uVk;|LH3a5lC&i8oni2_@Ml|;WWI8-Org+y0qp46a|FCB+i*-tmVp@zu+wU4Dy zmwvnTl!c?0O}eE+BedD%wB8iQ$6rNd9=#Uz|6q(71gBxr!NFu8&XFHGC|Ob?y(EE5 zv=|m_6vw}KE&i=D5YNxz>ol;+4N=xG3NzihqGJMan0RvS3xtU;kh$_oAmF41iHldW{kx(LPtiLZMCnePs(Fg_hkuN7(me2( zh&%_KpSz_;we%2V%*lS^YNz$ee4;)b7u-f2ot* z+I`Cac(l&-r+QMeg`C;0#Y5`uCXPXg=aN4lbyt#|A;cN;=>F_$-E6^Be9KNf=hECx z`+=6#PQsG&oo_6F3QOeZ-d;gg#;6y2cwZ(F?nXw1i4{M_QJ0MHrsBKhukOj0VXWs1 zFYid(3=tdf3_ycakdEq^Hf1K*Tr+Y{E6HsuZS`v7d^gVYoT&n;*npg|tVTV4LayjF z?;HBb@Lw;5kE*XVP<;=8{lf1(Z=zX#^}G@LAAH_S=%gc1?yB+Yd8l+$qvZ)6c!#E= zNdO}rUCy(=619GCiy2%>wYg>RL7B<7W|&}>cQY#WWwGBdkgvCA`^sP{`&JMv1?@r{ zOnFB!x>aZlsV_&_SSAX?+N3l-_l z9{!ZL^+7tzq!T9{#;6OoYQ-D+W!=Js2c|$ybNBi(%elEKlNTN(9RPF7_-sUp27Tp^ zxut%SBa1&ukWJAg>@gurXNc#wgJ_=OEH25YD<|vM9{Fu-V;OcDf6U~R(Du^t+_K53 zTb__d5W$J{@1;AX&G7hmq1LO3V<<#~PFq7?cR>!|0=eO2kGsA;0(_Xe`6ZSQCpUMe zuQtEsRtGo&cbv_`AWFeN;H^5ovWCjNlt4JbTu!26IRZyMdW zHL7ukpf#t3V1rOo(*`toLh zm35?+#^2F3Pt2O&in}!E7W>ERzvY6d5r3n3v98nDn|=7PXFuY)j7E{ z?i&F~2T|8z^fbfqJcZ>zUXg4?wddQC>ctR5X$t}GzZV}!^o8yFK8d9w zkzOyzd{_T*(m}d6%YcDGX&{q2QBcXbNpyv*X2<@kpiYYRb9 z5tSnjbhGtkMKo>$2I+5rPuii^sVlFJtE1r^^~-c0CQtY!&$sy500zJsIUuz?ZduyY z7)P9ihC+O=MKPaqNWJ+Hs+LN=znIx`R*^Fc(Y(9Ra8^l0PU7Gzid(l*$@G)R6n&dd z%;(cQJ|N9EvSyp-zoetXxjvLVo4V)nW=H`aCL>H1*MioV>@Z*#byn9A6Qk<;nG!INS#=`P z8XhTXDV>LG7lr6%nN?y~qrP%a-_r_Xr8vJph(n>^u7N*Ad;UhpBL6#I2swaYQEq0- z@W1WRG1tG1?K)d8tnXSm2dk3kGUzUk!l-4j(sW}LB_BJuW3u4PdOT9PF@bUHqa4By zE@)n!iyei~ut;@39f@|<$&_Bm)yn@Vd0zGQ{>-hakvPIz|CBt>R|g3C9M4_nRC&9n zL8)9lsUO)dCO=6GZ1&*lR3SR;s&HCWZv9GP&a0gQ-M)e=H9eyxp1Xx6q=mX&Dr1k6 zc8jbo7V2N5!lFv3&f68waXVO#Ug)IqjhnoYvr#Zq!?SFu=%0B_X8y`Hxl7r0z8{D( zRF}+p1~F<=gkJRtI=jO{=AnVIC?1OF_pGjf?5|mJJUhX^<6Fs9&v*0cvsYvFAF9fV z>7*>4!F&&UuOKpZ`RrasN4WTi0XwB)JDWnENjJBerZ4=CnsYFB+N`<;83Ctz6EN_k zTiv7l5>S$X(YpN$#zDI-I~moew`MdPck|XPGFi#M*!G5vO@4=k8Q4LyIAh;sl;ptR z>&3;7jmg3R;WiOg+CW=@pqtS!JIFi(2@~dw7w>HBb+-yM0PdwkfqhBjP7H1afaFZ0nRpRY z&}IK|R(-IBwQu>`VinOVd~hDMeMAyMSrqL%k#DVoYdpPduxbT43z;qB4^})wIRLpR ziatbKnr^)>Zf2S>l}>8Asbhi{ycoZ>he)Xn;Dxl^@Wc0mIkE<6gwP!fEKZ-td8 z1#GDrzr7;P*ic;Q*Ccg1#~$kHweeoX%GT%$PeMyoO0j!(@zkJMalz8+uA=jun_HOb zi5IxV)vXs97h)zP7te~<6SaX93me2YZ^&Za^gXn!NbBF}SLHQHC#E94-U|ClXg{Sn zMI`9a@Uh?BIK&st#2|}{O!NiqNtwF1yqN6=2Xs8&wrRYO3PEDC;P+e^T7&1@n>8)S(-9|VLT)oB&pi@;mHl$br zUX{pKLwlye1K!}l$8qCqs})~+txTsbUss+?w=&gW!!k9B4ic$x0MTSQdT;-UN}S-jBi~mpied z_1cVp-CFdHd5jSX)sFSQiHaP{@HgEIv%VEUWEulaix~-#hx4C_u|~ui#)457Vj-q6 z5*MPu<*}1mGBPj4&p!xNei_Xd9io*VlAISiG90BrL?OlvFOYzkPjlqj1(0y>9 zb?g2$y7-+vEjv`a#RCe}T7T$ZjNk}?%YOV>&3N+IAiB8>7-qvsd zqQsMf1Ys*$Xg&ELx_GDm*lGS_r}>Ya<|roRFSh3b`}1-CvD5s=PV?_?rzv}5&zzTTP(7N+NLI!&0ARqG;W@PyzSfZ>L@T$`ou^f4uViC=% zOotjiQYxVlE+d(UnDap%!){v3=)%f1WhE(#39XfK)yJ_nO1wWl1MD;(pWwjCdzaPOUC`n1=Df<2B3Qk!R`-^VJepK8)UnsLwsbhEoT zYozflq-)&P=Ls`j7=qtG??mY7y=F)t-(I*8aQm6j;*?#et3^-v{vqOq*cFmO8cVUv z(*7q&BDsvFhoBuEbMeili-W^^NrA;}L%O@Ajtd|Ce?J8{Zb z706@#?R^O$VjTZR@us?Kanh16+nAI~%c%ly8YDU7f02`k6|=RDJZWGd)J{|TrP_wA zW2i2WN%r+xu~4G#r1e{LW8d8<+xHq%Z@+%1awBzU&Tg0ho4QxXYzLs}4H1JDZlt*~ zj_4h!mw5SZRYZ^1XbXI2NX0Q79O_#)N)7sGpV!K^U38A5_kX6wZQtH`{t-ps+lLE` zPG@?_V*-;VygDwH)a6>1M3Iwak)pU<6^*}U`TS(Y4Z``40p>pj7+|>f^uH4;`R{9h zxi+aTMNl54{z{^_7-s^nt{n|>Xy+e(gw=e9OphpT3O;^lW*lIX31w3B=SBXwtp%u^O{mou8(!)+(|Jkh(Av@ zgb91ehk2h6i9ZB$r_6-TYs(3IC2WnXoMWDW1kDVXMmTwxJ1@UAQ382L4B!d`@Qh%m zdB!8KMEGuTp{9yF$jEzHes&KZGH+fT%57&osj1tP_YfWliLnwA<`~?ZJRvm{$}Z^? z!jex&U4!iu0N~#yB$>2b%1=)v0q}3N%#$y$PsQrDj^W=+y38Vpz7YiFY)r%%T{5t& zNHdaenW)E$giF98AsvVQd!QpF66K3WhzAbT&=5**2lSsR$;#y!$Icv4EBFkGnFU{T zQu){zp=zuwp*2nC%cKp!?<#Vha**lsB+mM!_W|&`oJs`SOu&7-8*%U>gl#Yrf%kYC zPDdcwB|tV-AFI|T1HG=Wpi<4(BTSSqzdSoyG*LsBpmC$c#AG7C@%`%MXew1v&!8{|cKo{Z0RlwdTeZZ)8glO3#8jJwb1ErYoNE zz%(a;>QV6G{l5~KtTi8qax_F@K#?F;OqPutG9Tru!;_BiWiK#5_-?ZBFsG?QR`asl zR#*NhGP!oK;E2k#`u5u*LErag4#F#p&h+uko7OjTEaQ37%LfZo)&S#w!%eAm_6|8o z3g<#p4YU?Gx6^W1{%>r@ zc8~xeFG9!}9@^|D8B&Ew_SHr`8#*s25e_eU>n}XztCDj+}GJK{%b!N5G zK@Grzo@E~&d<<#0igOa@0S?`d*wZ`{Kb+sN>oi;Gz$}!IagFcbkV+w;%;S`Nl6_p$ z@cV#GK&@`3tru9g!A8oj6ETCCT%e3R!?;}xq>S(*(DP63roSSt^!O2v@h$eWY^MEx z8T4#$ISX#(r72Z6jH_|xdU^T-*0%HK^6{>i^)7UF|MKoBCV zkcZ(SJyzznhg7s!G)~Xh9Qw}A-fXloXa0PQ+EF})hT?DiYuR=lNI0k8xz3#PjG*u{ z4-x3i!8A}H7BlhintoT%L+|<9OSbNd`IZk{33#kL)+^cI#8p%UD5(vEia~mynB>H{ z4dir0`bs0}q4bJNQvVr|UTW*?_zWQfUMSWtB7Iqc$Kd2L_A-C~h*7W4lg_U{X^>S> zEeY(<2Tm4A*Ec`CnZAP5ShLwEx|#PlL#z;4S(z=e{wD_ln=4>aQq{q+742_ zH8AA|j5OqI1kblGjsA|@Hy_>UyZ$ZTWV|$s8Ux@kbg}8tVwW1}M+|jICSOi3J~E^f zkVNa0z5$TpN|lJC2z%R1xZ)8?DbK`(FPOEgbq>(uKl3jv^G7{T0$2d+gR&RE$$ytR z_itX0|GHDsWAVQ;!oJ=F0U`yOHcUkqY7tBOH6 z?L3TO!oy|7w6;M%YqmY%F;Q-V0zoXM-a58UohReMD1X z?@^M+8P)$3Veg_6h%_kzwa%^uA$qRZRWbXzFhZUh-1*}A{8ED5hogYq>Vb8k4s`E& zWpR|0Ll?tGIhR<58ma9{0LCh{u{Y%=39STdaQ^SZB_v%#y(DIRJ{6;;?P})w=ZLb0 zJ+SeFkJKga_%YQ;L(|L;mO!}8x3L*WAO;ODWt&J60AzXyR2Txc%kcOk@otTgzA%tn z)a6>#Is=6Q{H8>!9PhT3`l%UEKzr}R!pPbE`QToZ+Rn|!t^HNjCsSddI!GLBrG(k6 z^Ub!;DZlmkJH2fa0?4#5P<`!LiS;0C+nWL55SqjiZ2a^=e z;`4QOp3Bn+GJegy_UOA2ZjfLDvdEe!8ucOvDFtK7ObndMLJecn{(!d{+sV(97HX)b z{j*L{54fvxf815bMAl6--al6m3=`D&yAzkq7^Tblt%B%iIQz9R@B)@LYv)LG7(}o( z>j-icWQ;%i`9dXfkPwgYlu%FQO1FqyutbW=>8!By%M~}Xm)Y>;1WBty7(=7NNWg4h zMZFBXFcj|fIrT4Th&8!Vs3LaCfU*Rg?XV98BD(+g@2b7`Z-I#JUuYtKG38#}3QYvc zFAHM!j#46!L-L>k5x!wG7z7kYYc}FI^#fuDapL4+UWoBwiskLP2-+ zm_nftIkqIrYF%@Lt^IMzJrL3T2Nfg_a~C;~2l9$K^BRcQ*IBvkJAxTt@m8o`&dn*u zcI8E@NIuHTdP;N*!6>-1o+TFB?^#}5@kk0fUSKS>p7wtAsG}>oG~FS+;a zage*GfiPh|=A|hh&5vyRXAU6Iz^9Z7=^nvXsa$>rh?%1_TZZ$7a~Z^ux;>PDIqXEP z$yCqijJiKgeMl2ed;56B)#pVdq1DCO6|_@5U(TR#{p$Yh+Md7uDW!vsJ9o#v2$=BOPpNqc=;&RzFd%K9qrWexZ<&qq zy&jx`@D=6O1v+|DPUhgYu~^N$XSau3zg;s;_x z{FdAM56TCSL~zE*Pc{%n8S}GF+d}yi9@V4dSvLQp7cG=gr7}-5T@%E|&L;2Mo%th) zAetKgL*sWNRCS|JSw5N!VuSf+=|#0ho$+&g-bQ+T<~YjkT2N3UQa59+^r%;VYnMim z9uyExrTR#%Zd-}?VkV9wZClX75zgIv8CRjRC=-DEefcOq%t0@P3PUGVtxwc8q0^+u z!y-5|@x`zg8*81CKm#!EO(DTH3Q#&T@S;6X#8m-9##<1l+T!q13;>|o|5xK<;;#G@ zW%ny-T+Z)A+5P54+d*x!R*wAz0`ylqs4H1=P|!=1BEq-h(@Pe-!NMb7P=><|@9~8o z)c&i}Kcej3VY@oK6x8TCsSNn&o}P42bNZtW>V5AIY25EafUe+X_#k{x{6fRL7fE-A zwY8flnhy!gt~TpCq&U7X3HsJS{Xi5PdJ@Wcb`%dz5{}x5D|(O}W_^53y~{uF#z&jI z7UWMOFgO#;3nQP4pjUUFKOw7rTOt11SB=Fa@s8U|#CJD>5Ltd-_fdrI-t{25!n6Bw zUZSvrwaORvpVn)aN`65UurWd5r9RBX6D7b?i>_2^#VgAmJNzV9;PYIDFlYsbV81t|(+C|CH81M*caV0T|d3X0t^~fBcx*e~6d<=JhLIn0qbR zy^WSs)OJ?SNU!fxkO3x(6dD!unX-k1MhA4S&P0|B z>kD%zo2FdB%shW28{>v;XLuo@e8RQ-$*soe6Cbou)G!t@N^F_s<{fh-5@9@lAwO`v zh7Z^X5kl6(M(XKENIWo8dtKTQ0qjT!uOUKwz0%F}`6jvNx1K8Sm_&zDV%a#5UA32I zXd2;cOoI71ijpy8dTZ>HL(?Fs2rWd;2s;nk?K=EdkA15fZ&1r7sN#R1xYw{|C5N07tH4Rnytz{eY!-(?FmTi^fz0EWbiUz!&{vBhqP1ntJ z+~CRmHnYHH^<_R6a4W-ae*kV}K+UWe`&FUfziSvF!2$^NPu^olB9Bt+CKorRv{DvX ze4dtlKzGs8WjQEYHT7@Nc2m8FqChcFfoC7sFxem0y+OgkWY;}EEN{)rX#Wn~`MAMT zsKPVRZvqI9zJxpjsz3KOM|PfkT%SMj%YGkx{uEfF^$!Q_ub_K)L|Qly;8*kdc__H*!S?8|10Cev*CS@} z@57*=uLj}FlxHnjhOqgqR6tMNk zJ)T-1@-D+w3p~=YDSXqDl$FlmuuqnC`^IR<>bp;vH+e{^DN2htNB4y zKowf4{SXV2T*(^NkSu(xpC|>2<|!-&rMKIZ)Wa+arJ=wU@^K50#t7=5rXLpsSr6Ns z8L4dR=37Sk6jlbjL=2F;K>EOhMIeIc4D{I%ZU!!QX!2&Fn%)WA(*;zktlJCpTF zKXsbm+V*E8oe&ooEY<5%X*rZOqXmg9Gb!(k*!$#Y@;HfQ0Qs3(o8(ldTISZ%d)>pu z74>BUDw5b3wt)uZ64-{;{j;AswM?>HIKS-XEUfSJ8x9-V{+wIk2*I*}cH|U=k*HBB zK{8+OO0s#eRJ(fL)s`!Se1$drZtGRXCRe|3m)btO>vqjd@Ot4y;BOhAk$>V)1$F>t z=YPcjRr?1np8Nj^F8&%2rbVmBtt@MfLL;6S+LAlBqGGw-DJhjJmL37-Rk}W|ou!cU z3ke%u^?wr=|1ez@I$J?5?w)|>YN;b`E%|XTW});K2B>9Xe+uXm*~FlI0xYH7<)DxA zk`(S)e`dSa(s3}yU>u1zex|a{)ApS>Oa189FPp@H@QuzH`vWSh0j9N1+vI!AIbODW zt2usuVj=vUnlt;uRQRi!^JPtQS}Cn9MdI(pprPm6<0D_y0DQ{J17quxz;N$oap4i4 zQgt8nzxgx|#pQiJ( zl;l1A$EPqP_pN5#kOEn=Aup?t1EE63T$v!zG2N-~GpiDek!N2in?;S`USM}sWa2i8 zQIYGq9@{Uo5`@r^3!aQ6-o2jfq&rl#;AFHtIG6A*_>=+xL7;ov*RQ6QS!)KNd?|S7 z?|WHUW4%IN<=i+1&^g%dr{^=<8ujSsJOoxOd0Fu{SM&373JNTao>v9gRdqZAg=G<( zg`mo@dOgVvY{fuv-D(IOP=_*oidvx03P7FI6A|SVJP%)r=6YoKNEOS47FH%U2?2XC z30AmdiE}7jDQG1Fr*1IGK<`vzOePL;y;i%VVM>zq(&IggK-iNn>Vf^|W}=>LRO2dr z@BjX;(HrtI^nE`={VV{W8_6+!%^HBaj|DZ?ZA?3#p`nw*t|Vi_sl55NS%OYCr>_JXUb=F^mr4 zw)WS5(C@q04@)nVWN(AL)Va>ZD4Bd(^i?62p6B|q_i2xi%j>4pzIXPQ1+Jr(q*hxJ zNU8$}r)AU0XeeUY{WK!lMz!#)pbl7M7t{iU0}r;{dTkOqPDA?Ktc_Nv1M}ft|!T z4<#k$qh%J;u7{l_$q-V`akS|1%Sn1B>|v3l$-|W^W!lD_j2;zbkCfifS?Leu#F5aIMwX(>83+Lq}%YMI-zpv#fajZdx z-xiLB<7K94t)w6d9$jqNZ`SfZb*IN`dBA9UW((bd7NU_%?0)PeXhKpV3Wgtfh5UsG z6`u-gnjVu0#D+YsB|T@dLGngO=oJ#Awd~WjK^N;7y+)c@fS5?Fzd2oZ ze6|irD6P`xqM1-gUG&F1`G!cwP{ia`jq!Z_(OQ106!C`RoR7pD7^j{1%3Ib$uAzbT zxBxZQNBRBDO@P0T4vLZSlGppxM&oJq1@3^^IpQaRY?LVz$VktZD=9qhTspcbXesTk z8+HwNUgz79g}mX0Kagju&2I4|UB`WDLpu0WgUISMawha>@}`{4U#kEUUrh6(xx*J9 zjUgTk7)8TI%QQ$=`0?k%ju(z3L^NO=MXIb8N{I6^+=8YK|EauMloJ8nk`Z_TAQ`V9 zOjUil;9BejiJIQTbfa)ONn{!x$!(sN_$xP${C(BuXL4dfx?hsZJvoy#knVqkDt%D5 z;1>_|D9=*J=~g-#V)W3^1JATL@+!w}zSYh=A2$XOm$ryb zsX6lZ@pOWjj3P`qP)-&Eo4$`-Wp>hohAEEo_+5&M;NfB#YMrOyK6=bUaq9rd*nr%H z#55rJR?J14t5vIGHl<~2il6KoVr1gpHQ^BQtv=cCJXzd&n+V9`Po=QsbR(2c7HX%w z8kW<3;?^g}OgaN#4FosqE$wh~l0Jn+=Jr0qlD8LbIq`Jy-LmI9SLD=9(*Ji!#_t$i z;N#Z~_}$cQBHX;5MQ<5Ur4kp*K**JJx)+O-icZL|BH#=w?K5t>UN$ z51f^xGL1kS+Y0mC^h1!OLzIq5#{NjPf5};7g&g9Q6SAHx$Hkz(C0S{>dwy|Z8@`Wr(v0>UHT&OD7+n7QW4&1I1GILk$Pp* z^lc_FH@Ax(mc%KOR9ma5T~SEvCRvnwg>xAFTC^;FedpzAUn24osC2oWO0M(%4^+WA zrtvC{Xpn}9I#~Jy+Im?ImFh-#F9P3NHZMzv{uCZPzG(#EyrqQeg(`%CCRwLw4u|D! zRoOh>c)t6u_;O!H$?=#ZE%v4|QMEizmg5f*5z3((wpO99b;yGvEH%TEs`Q|3a0>?R z%Wpm?&>gugQ7czkbCl0ojXHQ+WeHPFWBDR>jk))-LAEG@*G1$ZA2jjY3&sx`7*IM^;t>?YB zdwt~-+cy96IL_ld_I>}+y(_T{5+AP#&aEIPFSWj+HanK`p|C>7sIt3OymP%L z4?l3$4wZe+^t%pMuJ|82RYIow>;5W|y zm4JBqylZ7Aqua4r{3W-Jw5DfbRErBhr?n2Mg~4Fi&*sD-NnOz;!O~~hiEcs7x}eCj zkrt8FXU7jsCd@)P?bC#5KWBIP;yPXmoR^Z^J+#;V{%oFC<*VnEj?D_RPvKs^s&Jr zO4Em?S>~{al>G3x6RV9-zQPHEe5y?n72&oOzW zt5m!ou8X_8w=ht_cOy?Zu>?o#0*Tja-7E!BehLzNyd0*NAXv)L27bZAhxtgVt`1+v zu%JecwYk`1rJWH1arF=LHweRd+qpi39vX)GVeS^^b>J58`m;a5TpE7R!O$dq%q=Q; z`2tNxl#zkL88xe3)^Z$qOAu*9dX%f~&2oebJe?`Ym1ym`*3n6{hYc#TXqC&<-31Hj zVDWmm#z*%4xX$~nribjCbk0vRB1In<@E&hZ=6-sav#}-iQ8vzB;B#8;%3=JKE7I*5 z$QO#TOzj0yTNhq^3hGs4-bOb`kBmaz3~(IvXMR1Iy1?@J_2ZRK{-|0&sISy~&oBeX z#s^kT_Q6GzWi8z_^ytag_elkcMzzg>bc@$7UFH<>LoDcCFJTO=;|e87WQRXDMamK1LXQH0sroG zM{C@^RmV1z?tRoX_ClPnMF7P)zwRl@fs^%H7keSQ1?p*2{w9Su0+kR9%E4ukNJH{= zGXmU?_MLBltRlb*@Z0-vuq1@I{|boTA!v@!OW!4IYbsRQ573D4&P3z9M)(5JAdnwO z;Ly<|iHNx{49gb8pum$jwm??0{&qkU+7n&ry^X>T-gV^DB+=|~-y(cCzYZ410XDcH z8{H_MLwq;TclbttLuj1F5#M;ika$<$BTIGN7r1B3?YRb$_d=eJ_?H&o zs7!lE8c5xqhCN5AbM^xIPvG8b2=Jg;^buCnVCXXo4+Nf#0?EhVHG16{xzdCPdNl=J zMWBY({nvx3xG10XRqZ1bup)3&Caq@; z(U6SS)Q`7Fk`n2I?TK@U?#?>U2)I_cfY@Qi7bY(A&h?_k3g8`9`0Crj$zV)S9B?SRG@(hm>t9lIJB; z`&4|!UCD>sBL+{TGFGMHo4L|2NTsG&r2D+KKOgO4GamV+CuZVfI-QVjwqeGxjsI9d zTJM#Nbp4cs1Kd?AJOW!Zhz*Z7A5Aig1{b40YU5LQgj{1sQ<`T5C6m)_`ca)xm$GMZ_dD<{0U8B6w2YCi53`Wg)4WoG`Mhs^3`RPLW zmd$7Hc;qKX=iAcL-JQ+%-OG2FrFDcASZEcv(9^i36qr^Oc+FD#92X$y3;lVh1&s=C zsTPJFQ-z!WCC%G4 ziuc+o`W0oL9W6CIC{@rcu1gVrL9a9olbBO2uH7t?oK$+*T&N*r1?^V{wrd0hmaJ`3 zbI(FPc9yRkmz!p3?KML(jVeC$Q;!vAAIw5_Y$fk#R(`ZlAe_U0qm)BjKoFiHE=W&M zeSC2MNKW{;-0YGv;8UfI1%ZuV)qzF!c_Zu}E9oCsMd&EAL@1mu!I9mp{6bIt2v&nK zvJ$>QZ*3!3DO5s9TT%hms>GkuAz=%adR(J+rWQV@qrek;@m0mK=-95lHV2sN1)fAZgM1vUF|D-{C8Ni=cv ze&or_J$MA5BbojdZuauA;uj*=v|0H?fY!+}(>Ku&*_U0}4XUc|fQHW_pyXgb?(Z?c z!7LQztf@!Xx12(q@rme_bCCg3kuul6z2%%eD=Np)nS*IT+s4VCUVVfB9I~BNICg!KpvW5`jFe>00LzhE29apo= zpsgR5?wZGAmLmigde{x$#?xYz9^ugI;fTpXNPrXpcdnQ8uq0Ce9E=sX4nFPSh|-+x zU5(S7UCWJ@6^^rvzv;p~6K|-HyqaKw&66=RyL>d2WL3ZMkCYzY^JM7rCUP!_W9Lm` zc_4RQ(w*XsQ>Dkxr8$M~wMU24j^NNmMa`JQ@TjU>d9wA}- z;#{Y34a;0Huqu21;->5Nd+fga!iVX9#9TQctztnCGB>^|0oqG0F%WAME`@VsXs!4Q z%QdcK1MQU;{YKJi0DL<9MXO4@=j&F!5#A!yc2JlMk#B^z=;I~gWK@Uz9g>&FJ1rl< z+sw(Qgf~+13dn9NOEcj>!?i%K{Xl}{1SKrt4Oij$$Eapy`4;Xc3eTjKF0aiT$oA0A zdtUTb7!rBcd5Bd~%e}g18Qq%tii1i{k(-ar_w&JAD*YSUn4L5I;2h8IcsKZ4om0FU z=V80X&=MPw{T?K@c4;oU}I@g%Z?6WbA%PjG%MWitR&!non;S zD%vKsGxV!Kf^oX!PjJ|XviC+pe8Y|3pn9R_$}2fNLbIs~l)HJ1_QDMYv;Vf`gjfI| zb)LOA%04oOab39wHoJ$UOJ!%qe;6XyYX1nazru26qri@CpFZ$so(y)#{K0=~CW469 z=B5c3^=WwQ$D&E{pjW>0-$KVbnch^&>hi0^mzJuDf&G>B^YIhPYV%MIMQXQ=I}yZt zib7O^111_pNzZgCgkz=HEw%lVRd1aUDjY2_Qte8a4#yP@;8bGcS0a;|zf-r+UUI9N zmAxj-Ptq_in4fRe!-E~GDKNYuT`8|=$H`9aS$OjFCQmz%@W`KbM_1&&i9OQGU`3wM z;KJSVgG&Q4gHk>CME5s|opr)6X5lK4R)M@uX@iuPA7zi0`n}77UM*79?;lHO{%ii5 zZ36u8U4h(d8xI6#8SaNg3i#L7!s)LUebqgqU&iA`lZBA87L$2s z)+^gq%yakjZYoTw%O*H$O!n@hEh4C_*5{Umu2LsKMq>Qa4h>Qb#sx`cJ9w%3O1eRrwC zPF<>sY!R12TwDpXSLsV?PF<>ccG@ph?5ZNqm1E~k)5q1WYq{54S!pg{yPFk8f>yvz)td5d6pW7g8BSVv^e7r+~7=1ld0_2u>UV5!K&4vie@ zH0w)JB+|Di=DL~M+|JN2j^aWGtGoI0)g~D#-@?s!3ca_c!#rw8muLnh_(d>ST?;Qb%qI3!%9=N0I6_$ZnJvX>h$cz@krXx;?$X<7&5eW@La7=l6&mL^wtJlqWbP$HtV!8s3`dIIK4h+w*F3H+PGIk7=3mIeA-6 z`T^CR3`Qs^cr4Lm>a2k5CAmyDV~$+X%D0PlY#qnsf0-NjA203yAN_6rNapc3C9ICt zA#fW!Y*3!bldK+w(AjlD7B5kH7Aha*O$PgI zv#uDyTCYk{WkvCdKD3+m@AxVHks454V*A~=5N-6d#Ap6sM#VaY)ux-S(X6ZrN?O`qf&H!rI4&r{(dzBnoJ)`xuo@g?g`5e^~ znJk=eK^sM()~3ZIQ|79SrTnj0BmnzL&@MGBxN_SZL=HBoG4E<#!1h= zsv>GatC;*wAxN;)Tw^nAs+y8(|VhL|60!67+2uce>~<{riw0tVfod95}HO!it55owCg+ax!Cy)V?LS zs|7$!zj7Nd*z?e{RZ0!}D}JNvT2~ z*~yh&AF%vFFK#>YhZo&H_Oh?BisH}OFSzjcHk7?(RsEQYa;}_xeEd1~{m@TGg~p_Y z0v~j07(u~S2=|-9W{JW`nVwUy9 zv-v(2LsgDva@rrkgZRF?qyIg>{9iydl6hG1{c(b5W(>JDM$jsWFOqjHSQCKyHNhLO z`hR{SkJXZANHgQF-`H;|&qKDqo5m+zUeWer8+o~v`09BYnfFDUU!wEa zm{k&j7hpv`>yL{H^}r0qWKYBdW8q>d`C6u(75UFs$CI!=IzzjpR$vb*wQHo;&^2|7<)Rce*(9n1O}}-(oh$qv1Xd zNGL#d#XmtvgNqDyJ=-bg0<+^;rj#9-006&Wa~NX^(1Beugr_+9b&QL`6dO!jcRw<2 z#C`vEFjGEmKS&Y^DSW`mbMy$1sCQ&0xugtZ%JeiL%1S0}3dkyWexYeKQ7)x8J294q zFoZ3$M2_kgPw;6~X#U+S?C;L`OCeac;24%I*!{gKRC8v=dZ~WrI)p%VT2Gzx|Hf}) zUsVCHVsO5=fR$A~Q`UZs+am{{n0=+hWXLEhbE?v`;l)|$5C77)(c0o37)*uM9f^L- zA}=)e_#^b zA_7O<-Pk~{p_*ACta4Zs-WsQKKWM!ax)L&87mHLVsKn9W&44%|;oLkDxKuzow-rW? zTYi^l`8XXdP<_UoSsGyC%=&VZ29gt$^>Z)N23b;C(N=#^#?(TOt&w6J{Xr)(C!x0Nd(nAfPoBC?sgL&Vmg_hg{bXs=)S@ zkQMh^ol+bL>l(1to7M{g1&y)n&H_Z79G5fREwVe$DqAmIlG?$xneALB4is$oFil$h ztF;zN)&5FWaCajb4$D|%&2=fO)I`c)h~7m=8`?LeOI;2xf+uU;nR*?+KiGRd>_w2s z=p$zn>^9C#Pckc$_WzX80R_fEEgniokoVRLE-e6fVO81ill}WR+7sqWj`5x}lx)i=x~_j9v?p z8Enc6bndNN9vJEsFN5nPb@rk z?7o09ge3_`=TGkiID>uKBii4~WFg_1&cF&zty%oPM;7=@4J-0hHe@L>6;BO^kYrKb za^Gg<~G>+$@0&WVoJvMSz`asP|hQm^J`Rf{z$U#H^ zXV)&>nwum>Y) zPl?mf1l%Zbk>R9GS2>{YszoWL(ZeLQahV4t<8xkWt74~@k|XadjUAuA4WH#@y0_(Z8-JcGMjwMhan^5!Ku|ku|$5m`&Q?wgnDW3OMS&P zozH0ZXSMpF4UZ$`)+}o0@Ve-KXSVGv7wQDwwD*w(QTfyg`x$+^0f{SXOM|L#SOS46 z7!zqK_CRFNMjf^x?LgsK(oL0E6FFmk2-Z@mm4xKy;|y5#VB=}O6?`ruY1ut{*HI$^ zkQciWxyj_;Nj3r1%mJM1Z_IJumJ#XX+Rt6l2)#;ClnuDpjAhpWZXa2?%j#z1z)boN za+0>{#-5QhP1CKSEMgLerQ|u;m($MMhGmEYTUh%;yf%9?C^8Tm?CD$X0Z19PJE5BC zD_P0IQRLni*03dYsk6qUMJ~_uEJCd%E@D)9p~g zFYzbX?a&|a0gG=~>S7`Dc>u5ZkDOMg9+(7u9~x!vQ^@=`+CZ|kNfN|>Ab(~dNxyDm zEzSAG48ib_eG%XsZh6zz&Zbq% zK2lZS@rQ-2?H0_hFL&SMB(>H6rYmk_kFyMN>I&5EdK1jux8>m3eI;V|2B1# z-HWLu{=u3V;&%R?xf3<({GCk7q~csMRq;pAynp%8{So5FKkG{Qo=o*JC)MAfIU*|) zsx0r0Wr)9Gd@jd!?CFGhc=6es9(*Ae_1Mie`5aS611^5f-Myv-jM%gsqpy#-R02C z8czLPTitbhuj>7#@9t}E+n4m;fXcDRtKWdiY*QV7w^aOjzuI5tiJ3B@0P={%8p}sM za-TmQY~)-^5=LnR9dEDeU?=83m_G3@lnNDUW+1$Y(on+3H0aWng@t|{61BWl3ppI=}d{n7+x?`%V8pUKA%iN_HY*q_bjk*X>azx|C zBm+tMzQ0lsbF?xUP+d_AHcR9ez@iC#+93jrwB^_BD4*4=CVg^@TLo~>F5(i9!8-X+ z==O@X6Bu=61!=Sew<5-&dZYvc`HYfLHP|bbsTG~C=%wcBt_Bn|wwD9Kpa|S^MAzbm zL20|2$P1s!=c}&^MAlpYwcObD613YF2)}^aJ_)~MQq+g*-Crr9DFIKe4{E~pLvMAG$Z9Tkbh+Nh`=Bsu zW~9{%j8lw~&S=!sXtU?qxn4D`@h*aGqW55c40Eg8-LT_>Y=y-AMnN~)aV3ur8z$bf z#lyFBaw3FLk3~FPer?L%>*Mc|oBu1h@4H2S3428o)kd+Ppug0|RmIpxr#($ zlP#aJIH~Du-?p}5>*Ilh7f|oS^{c|sH@C>2andeZ6KRQZn`y@+9R0J_nfsHh+wW28f+x zvo;QoxJTzSvOe4QRMVHd4-Z3JpYHZ}2;uF+nmIbdGgS#@a(9U>4fGs3O0B zjwPa*iUfoUr`4y>fEmy2D?;u;vGGQw$F_RXx9QiNb%m163=AYg^ zDu0X{LA+FWp-+b2y*A|0gjULW9S~C!86}_i9DU})AIm(|A^k~BUkhurjs@<@v&1H! zE}HbU`wUt4iJe1Pv~9W9uphOGxq=y~b-tywN#0t@qhId;r(!bepJFn}#!5d{dHg>j zCWCU(Ga5K3ev1wIy%#RQvx0Dp_EX#-hHUXmKbi8~JaB||m}w{fOVw|8fN_s+B(u8j z4n*xf(NPcPsL=&8$un6jPg*KLKKM| zlb`|bF1%9U;O!z7P8KpdX?_G6?!nHC3$-Lc3v&aR*L-V&0zHeSP7|nJkdwqiUMU_Q zoz9FMfeYHW{Ht&r7G*qR1+aS3Vi4V(#!-KuXz$2v@byAeDE;Xjfa%_1yY7PVc|;IU z6rUp;>u}9c<2%2)93uV!!x1I9T)^Qa^VNDanus8b&QXCMk3B~7auJrjBfMcAsePyD zwWF?h*zJ(`d)Obb@FDhrTVGCPE#z$We=i;L?1=eC`hl9*gq#av+dNN0Fte3xWvL_Kc?zC;5@D* zVJSMHtN+i6$?OPEszY8OPKI2|{AlIeuK07x)no^qTsT}}*ke1I2oMKLu2vKHgszBu z^h#n&va*%BP0Cd7h9Rljd&cN02s>8H&sjh*0Wn!2TS(J#P2hRfxL`oR06*5eB)uh} zz*D%0+6NtFIqo5uE8uUbq{zH;UR<+O01o1w$XqYuMF&4~LUDGb&v3;lD0ylod|kL7 zC^UBD()tMUp0suZ^4W+DI#u3{fBUHS)A54Rw1w`~EqbSzs#T?c2|qrgt78NOHGb*n1VeMx%oH zIN2%B_FfX+M~QE&6kw4q5=Q$m4qn9PC6fE%94KO?k5M_3n^eNF$%W~}lnL^@YmIN< zL$*c-Dg1-P;thsF=?<}}3!l%6cXDgkg|C7!c()WbmCKxq$Jut~!=%?$p1aQGW*pX9 zUEMc4x#qs_l=1a*0et)j_2TJ+goUWL-QIwtA zJ9;9&LM2GbsFbl{CK;QB%9psSVTI0lksjRY?>XDUdY$uKi;I+|!*t|~bG%^QMAtl< zxgh=y1xjBiNupD9FETyMy}CWF!!f3Ek(0mJD1}D}MSQhXL8XL@tw=vBP@xb>eeHJM zrs1e6c~$wOvdzoQ8$ZNkk*7R1h;Ch9g@MQGt(!8%2-`PX6c^o567BWlv4XsyLAM+GV`o8-Jt0{NIv8`rt8S9H@b?rw6$osd$q zAsl$`HPz|fjMqEEk0MgOS2=elFN=g^=@xn(ftp!%20sy-Fvp3WaJ_Se%~-HA^UgD4 z`FZCMk7+Z7<;{ZgYZ@(=!|pwhwpid7C+E&Mr|!@#*4vN29Q9UK)$7dow5dAo&HMoN z%w2!ecQmgXZstTHrUrhYA1ncH9CpwRW9bKjOJL8#PFCjUbZrdFxKT-kdd8I*8tN0} zfbi~fa?$;vZas7Z2H{#0Wl=Lag!u2=dbq|E6tz7YoCk}+ZWu+DeFP!CsJp}EU}ZJx z$^a%!LpCY1IGSVD7U)GwunAl_zT^!G61XTAV&s^3!4Wsa^5{g41_uY#w(>fp^8CO( zdm@)Lz6_W|;NZPh`3&l1`anFyb7!P-d`;v!AJ-}YGC?FedBrMZf|anms2a`nBtw~Jb8Q{o= z(y4QgY{>>+5;di-LKWYBd1+2+Sm`gUa#zCb;0)r#KC_+Bhj3fGxbIqdm8Jr@uq*Cp zH;CKxY;mQug3VITxEzo=TRz$h%1XCQ=c=T63?U0PYz{ez&SpDgC1S#TO+oY^q>*}U zH@xr-_?}t7*?u#5`O&0sezI_0W<96yK|X=|2AvE(R~BTKg2In30LkRaLqp$X(<&8A zj_1)m%pO^!tAi6s*qRgLJIJsFGy=L7pF|%Ye_mIV0X9;PAW=0dJD{ddQkWgVdJE3> zz!=7n05Ii)h5)7=vyf+>eaP{zmF%z)8jeQ1%;?i;9p`BCdM$FI$05S3l6kRYeS^xQ zB0uNdWd(2DadP*u0}xYzK2GDDkdt$*BJ)1HXa2T;Q)|f0`6v1~Z*B|3+7u1~F(Xf8 z?jRxVyy%5L8_A;GU~J?@hbK7ny+fAI}%dmq-@@$SjV{uP=)jXo3?8py!E}{Q_xo~`zBY<7lig15>DG_(ys+LSZC3ynYT~~ zI0J$ET*70UmK??9^}@=N)Xk&RitB9y|KK`csnV-G2-11QyWooFLwze@+5n+xUqNy_ zp^x69>%PRjo&^%#&#{Ib6nMA?umW)uE%Yy?4In;)AU)$hx$eaP^(>vTSMNQ~(a0a& z13;re#N@8|L;6e!a`7RK+3tStqU%pII+fF9KsQO;&K_6f2<{pRJRyjiVHQX>3XVr1cNU3w zC%{IWk**3+>;8b|5pdaV6dPT5HCM1_A_P!~(}d$+n+Q2}@g%PDh01&0OaciM;#6V4 zvhBnTA)))bBv}U0uMwU}mq?;du6P5n&Zh@KLce)I)8fUDd>#%DZ5if}Ty$&hHAdK_&&R$zWIWcVZCRuX6=6tZFy!Cn}) zBkaAsC?8zubt@E?#of4|DDzu*9I0Fk`4SS6W)^)ng=+^QGTUupUu_*H?5Y@L_@HiB-fW z{X}(@0KAiwP%ycp2b^^I1@6^EF7;3aC-_xhmgZ*y{*x(>Xs!TN>oi%m0Ou<~sP!!L zagkJCF`_wtoAxFj0^hGX>R}3jEskCtuF6~gu*L?j9Qs1JJzplboYfgb2&T9{Jb!za zjDpPxgC=bn@rGi!wkwgKsw|*c0O`{*CvE&i)dvz;cy!CfPbu&e9Po(c%Ucyn?st|0 zS<8vC?$>1#e4y7CqLg@7jKjkNwb`vGm8AF>u5eO}vmaYwHx6F5#osaFy>h*X$lT#> zEcjD1gy<6w8Hk+Xu{hNhgm#PP>?a7roM4KG zoH_9n7qY9W)~*3PsJRnc0~D$$?5F`Q)!fFdC1$J5Rj4I4ueA)QCCaMJ>8K?ht+vLk z1G3g-D%6p0i5ryEWpvcZt=3U9)JjJ{Aky{s4(e(g75G3BcX@g3=OB8i;tv>jodzHe zJ?n0#*52clyZ=et6~ycQ7~&aGs9q_J+>dOoEGD|GtzWt96#BUcXCc#ud-rVjc@K` z;K|PMlL@;gW*jZV@~th)@-`*n1|t>EJ$c`3iH}KEkdU|43%9uiwAE#|-Osr{R)X_c zjrZ%EIB6DMIyr%ak*z~l<1GT4$}aYRb_gRm?WZmfd3X1|^mRsYc}4=$_HJXoZZXEQ z=9SOx&ez%AXl_h-mcCcjHrM&^hTa3do_zD3r7h{pa|G_CJ^5!UaTv%S%oAv-clvWh z(%VEli)c9;^|?1msPcnquX;f*jIS?clpsyU>% zFT~};xx%z3*$bo5Mj9?zRCV=sUG4~b6z-hM$)%#gFRvZE+#GOTqOVV*m7gnvm?Hq>VVnp<8ZWxSu^>yrXp6MpR#58$Ni8{vgQ( zbNfPfIPc-as@Sq#UGS)C*u!eZwxz z2kEJVP!yNQNj3fzikxKClEvZeicCj{pRc)ToE$(w>{pV;P0rXG$ zF-p!UWs)P#s+UEV72b_>X4-F&wy1K0*d0gD(mm9-#dIi?7jP*sb`>nwViQ#2FLSaB zh0?#l$d@{x1l*Q1#3(mkL;FG;fTBh+-o+>rkEA>#2%<1aiOE-(dYT(Y_nb(7?Q3$u z6Xv`MLx$3uv;))6U>~YbQKgn#YBT*tAF7jvO7BPv%nW;oYxxnCSu1{;If`_tT_5B! z*mE@+%ZROXvn{hzW5^sl$x5iNqb>tDN6a1aDV*`flzDBoqsoA^GDaBeOoqO>$Sfi2 z*52v#x^sTR=wtI~@JYjfvGi**LQs=Dsh*%eJ`VbErVZ)c_7W5WnpO-v@zgW1M)tk9 zQfqLBBFj5omEC?1o@ImK(o2!;qehn%1? zO${`{dhn2~fhhQqBEWJKD206@?iK=5L|F_rb`dqyRkQ5@{Q$!>4M)H5nfVt@@yD!-QH7GNm}I;5G1(fDH94>RVGv zys)Q{E~2-;MuVxboNFHY+FZ5(Fd;22)p}tq_U(X9J<}h5Q4=9^`RZn8ZzofMG9K`9 z7Rb3WrN;5Hs2isiJ}u`m6|nLB9Vey?@!q3}C3r~L1GP81jE7VLyTO1lw!1^(3^M(4 zL7;Z*l&kxAQs~S(^|4VPOjiT?@qD&c zF=*0!2lJr^h=F|XuQj2_<~Ws z);yLt{4QVm%ZBEo=7|E0_r*89Y#Kaoe$g=ezTET6mKmA!wONQ$)yKd$A`+e&Bjq2` zE1zsjnVS(T*;6)+GjX}JdA{VrrsG%%k~;O=n9+~_NKEk6K0x65(wXNCU9q-%Aq}Z3 zpEQp8Z!ia%_qOQ1%n$B8=_k2!*fE$er1-qZh4-$LmKc+m`FK_OIbrfaOR(kq7AKtO}T%y;Qkgi<6#tJ3xD%Twu<-duj= z($oLPQ-^tG`8_dYx#7WiI^1miG@D^TjtYIjGYhxbkE(e>l&Z zr4W`lpDWMciQmW~&a=j>{!pCIqSC+GrP!7*19yvgAG$)@d$33kwYyb4eS}sqdpcOEYKD3ie|L$HlomJ`SUgGz8 zK!3--HiBIyj&;yPit3yy)+Vl9r0#9UD%J>DH1to6`Oh1+M&DzJ07(k=#e*Vw2PIZ|K1@o`rd z7|b486MC}b5AX~483afBQFvq_sD@cvw7P^UN~X?tB4Vp{-A7xtl~CYc34(jm@U~Ue zHk8Hp@F2kS#Qy)(%O;+w|KqAP`@dGLMgFB~jq2XQX*m1n&-41nNO87rNdnax%8gMT zRI5);gBwFUK73_TPpV*g8brzaWB2(dN+s=19_m1lhX+*n+?r&{nxC>TD_nO?1tDHX zhf{?8*xjcuz8_vk55f!Y@Rj=+3WG%-!rzVf{qLUFF?@qqEb&C?+#N%p*i=H2p-rrx znaTM(S1l8Yu)EJc8l>^tdHqB52_c@X($nC^vfl~P;48B!th%c_BnQ&29rKvD`y(j& zH^FW6nV&Laz5>lJik4HE z7V3wL_4ftzzqvxF|AtJf_%CHz!D9EmGXB#AA=Q+_lD_qE62j5dE$@E-jS z1n)l;EWgF?GO2x6uwVu6^<{IXLG3?PtYecoh>C?a#L|LRI~SIrX8o1~OJNi;=tlmD zRXpN{3@Miy2&gsT^4Q~}hEnx@{c;!x#4GE%Zz|)H;I}*Vr~PQjW-LHKm1!?k6Bi|B zfY#Z(JAPeUSmxR8nb+~(Ze4`uyLysMd{pjO+{xx%Oo{yU>ip};`{~E}y8?3Uzi!34 zf7yyj|D{$e{Jj;wjQrV({lA^O>3`G7lW)$$I>K9yLj0+62{}W*j2x`Z(2~4k{^~C8 z_h#!=+eNIu3}=6d#dqXlZf6QtDJ}JHoaz6~E%nEl{vXm(#hY=h?qGu(G}3{+QUw-{%{g2dp6o72i3zBV zy6}XxlLk7t2^TEX)H?>`E*ta*2`w}_734?0hzG--uPOk!b0TedxSM2ZtYIE5Fny7V z$P=T@qWsp5NGzaXbMwYRi}q$|emDSFl-sgARQ{lkgACRPQL`;dBl7DYsX@koVEZ`X zca0jGbB4HU6KwH;(IjebxTjW|F5K9!)lsjTY{u!XnWVw`Ah(LeuJYF=dGc^MIgcpP zr=gCCS@hiek@ZIj?*Uu|Xh>jDp58JZkdH*G4;tfa)=56$KdzCkD5{>o>F&bV2d&8v z1_BKu9f43jMz#{J0?gUKKFgP3AfQ37Eze*cY)qarXLCQC4OrVLVkls#MNGv6-zzB< zd}Mo>u!craopw^@Y6Aa|W)2Ql#?7ldqq()Ceod2$%YlHya3(!o%)A|FV7N6U4ZkSf zxjm$AJ#-BJrAtWNfmpY4O#Q53;xR5LL#A_pwzhU03?`dQce@@|DHy=fL`At(6dlVB zq%n2y7cR*R2&xd@Zgd(JY1ZTuEqG8Rq3CLPON}&23`wwbwrfgI{ zmA==aUkZ!bPRF>3kP3IRDn>~}(7dXBKjjouk+yvtRP<)|v-m7z!DP(>1f zHmZX`v5U4f%W=S~Qk>D*?v!A$wn0ZAH#*X>pSNBRH&^1ic37UxhGwT4Z!St$HO+Zg zn?!1(w8b!)AI3Ia)OjPZx+rG`-R z$XGvjLHn%%fl0K8z%xjQ&Q+0aDv>Dh*XWx@usPUVs_!?0qHsigjiyt&8?>1Y>b@7XjqPe1kqrUE zBxuR4C{pBIjjLp+X(pc=d6^ctP%r)Bk6-h~@j;H}Jg)F%{MKfc8wLmfP30m!YB9Bl zqDRiPSCNXJ?#jme9*`D_;=jrh3`nDrm>hyr<*|2z3bkPFh>idjuL17Wr;;)@$h%y8 z)B*;AifZ0jKp`(RGCL|b>5X@bv~xVhFB~zY5{!P9t*Jp9{-HFAEeL#Bx}dzVXG+f2 z9ONQyeiSb*U8)}}rVk%To8>tNyPsPTdAEo@b3b3oU034_24TUdCehGxTUGBwGMRb& z7OzxBzosu=@4~VkN@fAdii5*;gopoIN=oz@uOCLB|BL_!nDLT-VFZwz6`L|}OBbJY zTgeKUwJu~7BgNJg$<;v0VM*R%OjPKgJFbT0ELE%;Z+6-(kkEu1B~s!nmRJ(mkz9C7 zC>OEc7n2F)?iY{)6v0tSUtOZaMaS5~W3CDlhjXD@gh?eAPzJXhcvZ0C(Tsj3QR!Rf8WiWV`R&3&(-&k-V==w@@nL1+eD^ID4i*ABKE@9R2I zT9-E!xKo4piGdfG_`{3t$+arj6nbW4<3trKoZMOEHmTk`2dzk0&Y~^Qz){lvp2Te$p<}$`N1)a8lA zoJ`z|RYSb^C_IltV&q=id-0iv1um|wm)0x1XBWCelnNdu6}&^ z@pgl0#;3RK-}fFD<0m#W?|rs$7I-wfHJo_oZNzBFoeJp@{fkC0Lc2EE52l_1Mjw`A z*FpiBaTjOvqYGK+M_xXDes+Yfw=EfjnSDMZ0En(=yX~Ahe!{;JHC}h&#~J>1<^O(% zaQuFTe>Xeif5X$~$v^+}S-2<$F&j*oy^QFNb%90{Xc$efD#qU4=wQI5V^1jTqGh zgCSmR)uYuU&5rDLNkdx|hD1&eN^laoi}+l!rpJDGs_pEvbAk30lj*ISdg z?%w4&J1mwB-OUB~U!H|ZU1r`i$`%h^;mQSs9dV(xXec#O5~>q0ViL>C)@kXN=?gC` zqE3u#ZIkp?*0|B7z@ic@e@9ix;NfQa{Kd#|YlW6!ZdFNrU<2TwTbEs z_ercoirT6Qyc`|{*7A`Jo29mh*{KP{)xEIl(W{y@Y>=Is1LRq_&N#MRcExJBZfs*8 zwh8$U7XxYS50^r@$`5UWdoRTT&R_6JVe!YKZd%2PetXya4ny2+Qk<|PtG@-Y!k_sf zww=-xAh8phbs#p^qP7Nx`4QrM>zTid*gv;M{~56l{^=3B_of(?UgwAyg@Qg?&@6N@ zN@B@t+B~?^un{80pyw1Nv4Y|lkz8u0V-I_lS9n!&(ONO`LP4aXDu1`N2sXiAJEuKV zbm#Jt*i<1=wnSU#J~1>?-S9QE8zq92P`{OwYfsIi86_^EanP@zqiuK&iXL&~h%xmq zVvk+2cFG6n0+sSobjAQ+$qBc!R`EP$ z7nj^+Sa2iFuS)>}xkZ>ksZmQe54IGZ3a{R+T2N-VQC&3_Q>NJI?{C+z&?;_I(WaDZ zoq~4rzg@mjoNz1ABKRN@>K1c@pBosc^VXJuXXIRL&WDoi?EjCw_YQ}<@ArLW7^Y!} zAc7#o=tdocjL~a`=+Q+dN^~M)v{5s9XOt*GqD4gX-g^s)AVQ?7Q6jP3_wzh!-)rx+ z_F3!fv#)cmv!4Iwueq+@w|(BP_p9J8B)0fYHfr1DD`-YnZma42m`tM}MGb)L5hiw^ zA})SJw*}c)vdeLFo9+H#|2-F1A&SHr~5ecJ0NK$GrRD z+knmLKeCfDfBW8Su0r6t3nBR8Kc)xB{3DmYPY=S5-v3P+my!y$ z{P)4#pC{0NQq2FPnE$8b&6CehTYmg+HAnxGV*bxi%Ja7RA3$P)q;d#3iYk{1bx6vnO0ZmE?sP6=|FE;6? zB!x(#ZglMJqC)F)GWo+er%Gy3A<=|sDR3vwy5X&Em%6G*Vr~508`oGm%ljm=_3oJ8 z7+l{_@0a;ja-Kwf!?s80m)}iF3_UGozlIpVZ0KF{Q_kR|%1Tk;A`;_ZcR6|Z)T{6A zm{`peT|Z16AR)c~RAOw-XaG~i%>C3K^BWIp(r%Qb)fjxxwY@xSI#rj}*z$p2sZ`5o zqb}oV4_MT`BE_b3H=}j^G4gxIh=c52mcOWjC=Zv8lUaS%RD-(YGv`q^qq{k8LQ19i z0ArrE)0xG8O(K`wIH#C{94hfY7|xX=YiH3tAEwoQ!UnIMnHJ;d|0RhWCA(h;A2pHK zgtrmuoQp0c3`;&O#JQNH3Nu$j)o#jW5R>;!XPvAu6pAol{C39ETLt(S-^^3T)&isR?t$$M%|RUdjx)|-qQ)pg9F)6D?}~)4u`_~P3D1m><|rxO z%I&^Q>&uL;Nr?mx0x-?iQ8!1wRO1PS3&p-=!0j@C$jGV#@(-a;Jv))!gu?n{tRzsqi~&e)+eP>tm7P!;g{c7 zQ-&8^`pWY)!u8_2M5D~M%Go{<)SDHWxFY5szFP$M`?kmTQlB?Ec?Fr~T3SYQzY;Ii zNpLq$m^FIO0KK>4YYK}sJw*+0v+qjAvL?C^Fc)rYcqPk(#PTX#mQ*VBNb2;udkaC< zYUZ#j&~p0WLUiES&_t^UVk~4?V&0Sqd9Oa_v3UY&k899(P9)B1#N3w?nRo`Nk2L-n zFHj)UPLn9X_esD;>8e@iseVJGX(cp5nPozQ5r}MAO(65XTU@UD{E5!bTN!=( zZ4wE#p4j3`KC1Wgas;Be+rd3lgZ2%AEM_!RipTYRbHm~!}w_S`AdWF*y-<|XJ=&Pmv8q6T>!B+ z8ROO_y+BSlZs~i_fGbp)@Q*l}ZydDWti2+P8Mt|A&*g*c(E;3QI9g_UMn`XmSJ>70 zu&*4n>Rw)Kn_fleb2VYWH3a=x#~;$_uQ(b=N4Odi$3~!OGV+!*p_fpP_=86#MF=`E zEMhH2M14VC_FPWBoW_xSNnubVxd{=}UW!vgGu)b`N#YQ{HXmeca*=U+9pObOlR0Rk9$TU6M@qNn?!Jf=-4*H9Ruj10_fRzy%Fdb5R!)A7>k^Q zT%V`0APY1B(Oo_wT-%9--~e3Ft}A5mjZJirCiuCI^BjMr{{etlhsjUC2TTYBne<(R zgmZ4Vju_858M}}P67B$iI3uev6A+wnZ<)O};R^VPh?OQf#X|yjnfJB+@Wadix`m5e zhmW|*s6U8??>W&Qp?ud+3?}F0e1mkUgkVPFI72$0+x`jE74gi*VH6sdIHhCgDq_uU z1G!9rOs2`#vyjfjWCs6a!Pm*cV7}I)*DtFQ;N; zQk6|pRRdGivr;u*rfR=V)jdwdUQW}ONmHz#&CEA5yr<5-}*ILq^5b_^fA4Ke#k zV7B;VCU{i=Qk$7Gm@Ueg6Pg8&)W{JlOy;l1X*jLMBO;Qdy8~4i? zx&9MD{HF`=Q+dfhU3iE8+P(f?%7yn&1o8iU1TjqkWuY#>I2Bnsq(W_BGH|f3Ob9>n zxx0wyW3yaMsI$E0ua_3bw!l#?!9^FN7?CN}L6_*6i@(^2RYf}J#TYLL?h%zxLBvLUFJt{-7wX-vZY;BRLc%jFJ!HuV1qob<>Dbn{>o0+gC#3k z*FYKbP|?)RkY)Ho%vtMAg+2EvL2LJTr7P8BDj1CR+eu;5vF9%l(UBqNeO2VF(@wp- z3?xTxa%t9wloIX~I$I1@b^}D=uSvm6i=Of1jmdq~kM*)0l%&&Hi1LvLv#>bZh09aS zLO$iZIxe!~{Taf?Un_uT6M&w7|ErorjVTg;}6*==TLSsYmFVQ=9 ze$JV)&o`7&*Sap5U3i_ZrSLws-Tn5frR9xXMN}31d$!7}0I|cD*V4aHy%M z^{DVYtvl}yEJ5vbYxmrR&N0$~h3E5cpUR3xR9|#elcVSI0&2fmqkneP+%OS+W4-V_ zh)F7J8%LF7{PF$uvvUOTkAwfK(+{7AI%yca!&$1VDWGIzBWcqt3nS*7(hGt9tmWi| z!;Zo79_o|Sk9VAGrVD6^+H?J@A@1w#|VD46>}s>`aHRwDyy`xraV5#uk8AN~t{x zbI}(jMNgIP(Zvr8-`$;h8iEbL#@VrQv-FGJSf=v^^NS`l%_jHXWLQaTE562dfCVi~ zD*nu~&)Dw!BqujjxKq_?Y-UaSYBOW}bVIIP>p9gcz{&5BH%-i$4z^ z$|nUZ`d=hh$I02?WRh@@%!@F>MVcdAHZqI>b(t|BEGa3B<%pS;SsV+;JI{x4o8S{C z1Ec$W^NJ`1KPtYe54t{Z`3)%q3A)@l5h!XBE=xd2G=(c1g`=4xFsKM+lL*y-2=&Ye z&87(Lg$UiF2rP4?J}T0{B+@7#(j+s|tSQpG>6Uv3-a`G7)knOI34@(Ul$uwRlL-SX zRnZl};C>XPOc(79ioR$N?U$+Oyb={a9#x5nzStA(|33OLfDk+&9ih%2g&_E)5CZNW z5s1t&qL(OBGY#(*Q^p?&I9O9!iHhH{i(w6m>8Gc3ScyST1It0NS2$yPljR;CNmU_Y zxOadJCUJE~^ra{hh+<4?K%7`-TuUZA=VP3BZA@RLTu)~FkP}DnLcH??-a3FVOrRGc zz}-C)*nF=4wcz)k=;zq~T%|qU*81~s``pQVtNqV{-+ySwC=o0Fr^u0WC$qNH*8jiI zPmge2ka7ZGwn|RKc^)JYeyss9@xAS_#dJKv93zjtpq5=3(AwQK<*gyWG53TGl?L*>NLF*@|eG)0+YDyErJGE`nNl^9KI4B>p}1?krWh2WpjAg#H2wY-{2z zCX(wO#pR7k3KGh`-}qXiP5aRHn4beF@-cjwH=yvvFTO{{&qIETfq zq{5iY`o;Q{Y$+~;;!A_~ZY|J$aot+@WS%Vx{pS^H1VPHPO30_(_01P`McA(j&&aA2 zX5>dIxvAstKGHp_RA; zL_ZEOfv!l^dJ?;X>6bVZ^E2h7ns*ZJovs;{9`!`2jM&^VX99jeD9GYHAF-}qyHkp& zsjp3n1Z1sI6*BinckCp&F>v2LDT9k>>Wf;*4Xks3HB^GUA7!}3a_y+76Fhg53bh~e zKa?2K%ic}(Fn?@pecX2|R6pIqIa=6%aM-euJfj0vDjKcvXBEbPcBxp#;GYlB6Y(24 zCnPc#h^yPw{t(?R2mGFcxL_D42Tij|rC`06^G6j%e*>RF({%2pIj`a3vF^y=UjETY znZn^#_T|9SGA#bZWoxQkUiW;rZ^>fKiMxsQ$N8*Yt9t0 z9F(i;Jkie>nkkh%sK6#XF(}iVePVX-#ANh|(Tkzkr$Gmm*3^}%v)hJsL9YxmwIqkhIGFKfVfKv6lxe!^qyB_WLtxS%>bY!zG#pVbxE9shXBw5a1m0J zddsr{=HcZqKA`EUI>shsD*RE=MA0&zmW(NuLr*g+D_~hi9EyP1tZFDa1fYgQR;>q8 zIl{`1O(l22l;RNu2r@@S68Dpi!~)zDL~;euQB*K{f!|pe5}=PL0$+MkTw20Vzg%(? zNDsPNzH7t(IQIf%OyU{$SSP~Ft=tfYlqGn(IAKTx zF|D93GvfrQ_Y&emg>j#p5RIOn7KTvEA1}N6%#*Q|S<@eR93_&fVj$745o9Tg|WfxxS?zvNwF~ zuo6Dq8Q^^uV*2u?LCenY{Er)(lg1vu4i+4r{rd67|NF1Qm1vRQN9!3LzmGqbJ^Ouf zPU`>ux!o^vc50Gk_9p{=)AblCIsdz=wm`=S*f9&LxlSQS0x%79P|9wH!Q)93yy~40 zvu!-{2#Hd9ppzzOJDdYn2vSo&pBHXNAhZi1#sgi9&D)Wp@r5u)^=_8M?I_fF>#_g9 zznEtA{}-m&omi8RBE}a3y~07~^FmlLbHDnZ%|%Yy#Vqp!eSa+1o;^A&Gw}Z0k=jJm z%WLfRV*R+k1!Mn>kk5a$V5~$X_(rdm+>h@fY~ZshztLcp?T;EmvKY-AyzAEcaP5-O zoCkU(9j_lcC@In&lbQMGumourlSz)>m>!Xs39uVxqlD0{M9?|k*5*kx5YrSWc2ge~ zNy}ZMMv5#5Ji*ZtOF0 z=LdL0#EQAs^7L>B4iLw~x{?j&#g(qdN)|YLH0?llcP@M8voF2r6l+i#WOEX6_P{0r7ZuBgixJdypH^rW)buviDx9*>!f z&kqqB5;?gLY!SE|(H)2A_v3?zteS7R`F?OFPfWS=0P`Nvv)(N9qARF-gfF4764wOr z9Q;rQK<+KSoOaImCQ%QPcwhLtS?-$9jB<>KuTju#x4L~P&F^Ii{M&J8K6aQzV2!?= zR?mevfp6`N5>7il^Qr!$HKQ$E$krVQx2C`Vu9z(F+D+pRBU?eYM+Ev#f}fy^2lV3~ zeA_Y;zrUPhd=;gbkBLPjBw~j6nz1R>Qo-!h7HNiyo1+pvAH{|Rn;G`B8@_iM*Um}h zm|LMd`>9_@n>gwqm&UxR^P~M&U2KHJfKzI3;vQEHi|Kh^@5 zblg~B%!au(>%-{R@wQ2L|&u=Y< z-~J^S>+$C@bGkbs{rz-rLQUk?{*1B6MRtgF`$gNi`ajaP&hH+${#~ZCws}-rIR3{n z^X|&k&7U?mf9)2iw*NZ3UvTF1*ZbUGdF1~pO#oFh49WVQ)r)(dh4T=X0h&3|9*Yf= zXZj@770E9j^|*fi)=IASdfyRw?Xe@}f$Qe<=W(a-ln|Gm7P`Lk+_Zi?cQcwR7BKg9 z(^_TGpleXPg?N6=V2%aEvfpG7*Wy{efml;s<{%%W#d7Zs#tPtfyWk})^kC#-yi>8# zs`h{EH7a~%<=Bp}NfC#4k?Yk8jFJDVQCgOXmt zqn<@5l~-q6bVlVIusCQ!GO8X zxBDjdV!oR%YKoh=x`zcB8_(&044NRza2e@&ui@2*_d32p!S5TSSb5(*YhQi9dlj`( zJG3&dey5tXLCcPfebz8TsBz5Rzon6IkGElW=~vwie~^Zd_~u%u|=laK!@4lBF)x9n`Im;o*TlxoC z><=hE9f^qbFOB(X;FLa6l0}Tni5a?tr=3xaqlQq!x;F#HB)tC*j6ZJ;~tpsPf>tN5rFx2oJ7t)!7^HKZ zuWY*;GrHvY@NhrA-+6OX{O?=r`%e)&l)|XtF54FtsLbf%^XB|MUYYUmTQCbh^S=3m z&FM&CDQ`$|+w!#ak1r>2Pj1V;%II4D5A2u!>tnf<*;Po#GqS6Ym)~F01%guBf02M< z&(P7^=BNXGGAk06ZfZ?_o3e9|;xA$MKXy~M|AZcriHo7UpSJU_ z`m@-5rQ83|uV3UD&6W>`u>Gfdb^cn>@^3mx|6`^o*OGb5;Xc#q>@L?vsO6IUtHYtU zFIxklyr&@?! z(}dT{pHV-d_>^)@sVBGK*7!TlL?%+acmkjxL?2EAnW564@|!5qK`k20zl(qvh(mem zTaqVefrbE0MZpn{SfOuvC>zOn+%*XI!R7J}Hpu0L3%tb)7ZU}qTV~_{W}L{!#INFa zS20Tb)|7}c^J|*SGDXtl+${lnP-P*0vK2&&y0>P^z=sVmLr{P%i3kJltn%JRpuvcI z12K+_fvjV790k&zYu$=>N?a7f z8a_R7RveiC^2TaL03qD$WkilJSg@IUBj0qq^f*BuTL-;#G?)(8l*=jH*rDfFE|^g_ zm;9rU>{UpEfUwJR`SOIQH`kTl5!S!V3%Bg3$~|*x>5VFqT4>Z?$K>PII8cjUP@b+c zG-abA#c*{iygDN}O$5EJwpZ(@-t=4l)l2tvQ1EC$G1r;7bX%XXq>F5igxjmk?#&hs zIAb<<8twdKUoqB?Gz%H~1kG%mcR-#4st5l!Bts#G!v7jBVR|ck-m+q&zZNX>I|a?F z_;h~l=Ai5GhfW9K?TvuH7UcY~H3t5tTE<5H;RagVV<(=KL z*?UIu%p#UAJzsaFY0Zn+zAC#=@Y~m{*6O9(_CPHcJ7K)G|tPHe8|l$a*Zvljiq%G~&~q7J@U0{n8ah^YwAsGx&=!>5lXZ-j~oOZ36~D#T@-J?3=0++cn|Ro zE^-jr2aC2bT*VBBu>kypel@Rnk!ga|lI`nw;blIeYJAW6v7#SP(H+pD^z3}OYYn**ZeyFS@pu2m2e{WXJx7wiZDPI1Qo`IEHFXZJL^BVLb#!qO8;Wp!vtoIKYiSI(UB@}6k77C1-sm~iIU}t5 z%GG)AL;~)kxMBcEqo3gybq&IRB6se$+9D13&!}PnM)50OrNR|NdTPwZWg~VaZTA$1 zXJ@Uluea4dWn9BYaZ~Vw4a8thsB-2!`BdL-nInCY#P+j14WdAd$kf|KA=Mjrnb+Mw znFU24gPqd2OE35q2psdeLN2A)CgMzWTAuninz?6j_2W~TF;a!tH7V=LtV&?dNSrM+oz^%VB$+aytOS@F&XLC@+Y~ zX%VW~1dDG|f{~5tp;g{sLq7JX%MCi&P0QVlC|~XQm02z`-b|B4vGth#1K@J710mDiQ_l);VZr>6MQ-lZ5SGvYP#-R~EL_ z&nWfjf5dhh!=SGkN*P0PSp;ZeW5>mFk4HGCR4?BhO61C$hB*$^=KTIiV0cXUd)M~g z67GwCA219$jEA1=6_8Pv{|{Z;|JHy(lkq(LTP(Xut|m|%DGQ<~xmF#|5&Poe;iSOh zEN4D#$MXS$cNA^NcDU{@-0d6%$}+hR73vR$GXMUH_a|KR$LS^FKi&!m{x@0yE&tjI zxH*T>1E9oB5GG^Qf;$|FW}R^7@(8$VHzvVTdxww_<63zZaDuBMdCuEkNi@6 z^9%ivaqrI12d|oT-q-l*?2X>o61S+1xmKVnAGB|k6)63#Erq4_Qv)0R?CQ633(2>S zfl?{of|>z$&S$%i&hlHm=Bm=l-aXv=`Q?~wOid3*QRk?IT-+(M)*N3EW5?7YmE!;x zb=7Tr8`taJ;8}xwMkQxXZLPf6Uprh4?IAjtMGKlyyg3)Fo8(0a%>^X+i_TpqMlub) zD0VxV^&=%H>q;beVxnHqJ-DRr2o+IL-I|abH^_iLy7amT?kl0W#e+FtYd>h}<{y5@ zn%>6bshPD=t@<=tXRKsNDWtr2V+fsbP;B^+Iqc-K*kqddm94)FonK-wSd_Nz1Qi~k zIQOV8n>xNJWHlu`2B7vQ$V0AY^YO)n#}ZgE?)i0&s+G-*@7x!VXLL_13(qE#P$r&_V%=*x*O*37(P4wrddCzhzcz8e+k49vf3a6W*T78j^lY}usoFB2L? zSU;aNDR9`VCP_6^sCI8aon9}^ei3oI&>cM?NPkmVLvadnHse4%QjBAJ^D)NsUNGbs zl~fv{@5sLT(ePzyJ-JeYb8z&lSDfpkI^tsUY2vB=ksg%JtRk!4x|a#JUO-FIP3V~> zBWidpYKTe>rLy;j?%w;Bc4jog`>O84l=i1rw;0#LJ)R1&hxNQq=h_|An$u1uC6`rB z(%M_)hMgF`GbgmYcb*J*sv{D5pPJE}BkUmZ+x4FB36A|DlR1jmiCWJ&jo0+T~x_cNk1;Lef2b?TAZ-thR>kU zI-J3#KYQll_4Pa&3(ziddUaGS%u04d&$?T66dw}Q0&2J&mM0o^|MT+bs}~-TcoM0m zyPr0Wvr@_O1L65jZ`MVg@LW?dMBLT1ix8LTPFTUXsj|RXhuFL|^DJblVb!kO_4exq zs$H+C)z$Ck&gakXtVH7yXf#6#DInqoic@U56m*mt?ubcBGx%{Kl{bWZVVj8kH&9 zhEv0jwKg4KGsApIadR}xj*)Y8wTI5xfYXRpxP(*rlK*yC??d*ro_FVV^@{6ynoT4$ ztu^0v7aUR^27rqDtWaDv^1`Y@TCsTH48NHb$6<+E`+Aeyg*)w+m zD)oj>J%?={?iA=M_4!Nv2^dqL98%L!&LKWxO}MH^@}y#9qj-|bp+q@3^K|ckW3mBn zojv`?5EOx@zeMAx&cs%7;kNo7qz4c6N8mi11Y1aI${c(hdHw~!Rjg~2@}L@(5w-{8 z)TIBUA11}D-|H#%iBFvtk;(WNU^p|+&~R>6t-BYB*0U;B!p(%0>Yh$?vOQQ+zO75r z*bfJUzVV92#a@rX!(Hts6;<#pI3*5|8dA?J8@l#;k8TxDUCT|7t-CIT*NYXR1#zDo z8j?F7wXoM`KONZfl|{XgywH;=L`UyzBzlCp`gHf4s284jC;k~Ja`irJ7}@W>ui>ud zWF;YSRd!jn1+J!@8?{&@U{gZ-&A5fd^c@UI#OhXL=3F;&aqKFl=4e*rNt>dxnf71N6wQ zC`XaQ43EFY?Gb21G@|;U(n=FlWB=|I{Hi&cUvY&DXtJ$zNtW`dd(17&`d;^YUaTY3gi>5Yv(SKXs4jvB*namuu^$lKcc*3sq4cdd-UrAicZ1hgoScT`W^mZmfL zB|=qBzLV#6=^#V$wwN}=3;gm+#|`_Zk*3dKWvCR}%xyYqDI-oZQTa8h7$pqPI;Fln9+b+ z;`OG9+0=DFOr(5WDjP;kbE-hSJdd|pQ+aW3_#@hfOCk$=yU}+nvSy%2+K`~#N}tR# z$er_=uL65!3%CeU1_pbMVE>4OP)5PXkxu{vXzj8;A|X6O6qm>dRey_wnDlGT)ny-4 zIq6iI%@55rHXl@bCRCdL-K-igT4{MWG~ae|@C-*?Wlg2E(8cnjhM-er`==eHQTk;_ z)!oS;YGAonU8c}yd+}k@+C`iCJnCv=a!Rww?DP_knr;`t;KjN02I~8SuZ|X4cOuTl zR;lZ%s|^L@P|J`K76_TJ=d{Ed7nn5X{B||nCDG`nk8>4i2SN?yit*+vUCj%vPyOnL z-+m2x@oMGQ(|~TR<*yrf<{2!rVs53;7S~+s_>+5qn{vx1Q-^IoehDLIhTr|52e$d@ ze6LTgj5}RB?4Z=$eo$Qr{oTkZRB0iAd%*P;{9=b?`bY&y)Hl5#K0bE-~jK|^_6lA-XPLnB*y8vA0In zc`}T91*JYq;ydvCcV5$8q4848R*b()8^LTUrJii{1H!nEyI96tkLftIXQY6gwM_?v zQU7?qetqfX7$5sUtg*ile?ifuvK0zOlNAb)ixh47o}B`qT>x)D0Edg8DVK>Sq*dai zdmdD$`zAQyRy=;ppGGqOc_ofQDQn!}ab3o=mc1E6Ajej96|c!etgDj}hp=ZuHLxgQ zeetLtxb++zqILI;3QzXMTkP^7)NGhU18oEJ21UBowUUPQGoLlyeO)ubD~WZsa_bZ6mQGYuh1aG6-Lg80?;?Bi%7b4 z#z?5!G7kOr6y{2byS*KD5x7dhZEhW|jspzb(~aU?CPi!h%%(3;Zw7cz?kcldNEcIz zwC-7Ygs=!0&ly{_@MskXSPniD_REX+Xwc7MYDdG$CMb0e?V7g%CLPc$DW{htxB5BA zK$M#x8L)SQN|+2XElOS70T4=mAc%$xic(8&*hE=7w2;VZ{KGaH!-%4Gy){zpM9Ys% z;BgXl%LKWhk>@lSgeS$kmxDq|6go2ji&;4zU|5X*018gPT7VF7B1n7==8Se;I27S1 zzt`OdP_uT;GO|x2hBRVDFPBk^phXY}$19Y(@naXtV#FoNvj`~)mhBF5AhHtz**Aw_5-;PN=~JvHhPQF3{rdCEuE z@9B~LdZzIxw|P+~zC(Z-2RxqHwFeC@nTQJJj9&D$n6vkIZJ#jTbl20wYO43aZ#CyK zPY8(!6yByB<$z;E$?MV3uL!81ryMN`J}XMDx#C9R1vgkje`bOZqR{#6P&JTSzahRw zG$e%J#ykhB_k+t%fh@OGq z7GGD2a#->JfG!$7k9NArc-N1^U-m5G?mQ{}g(@{U0Nem~P5a0+)AVp2h_jA@^`c?z zSZkzF^et8R%7WuhKf6vK_$&$^>|`&O>a_{-~>OjwKr6XyaMv<_f;15#1E;4 zx+qhp5{0BlNuqp7+1~CYo=LNF=L;ce%>=jk+^fWpD} zWqs1=4e{YFv;wJaykVwVebTM8j&(kbDksfhVNC#-?{0T63Jb zd{79I%6V>T)Xjr$GNrbsO#Dp9r9e{CI>iq1`I0uli=H{XjQP_V)O{-OK6_%zrMvze z#cHG*i=HK~r6GO3aW@%>Az=5d3bKSO=t2~n*EFt%fF$RnD5c1P*hqFuvv#PGu9n6x ztHK(Iuw_4L{D9?y3+6kFmQ5rw5;nLD2Q4*)J%fW$`pCo;&K?4u5q_6BTK7^>g0jv!}I1l!qZ9#=Sp7;HfUgiWpIT$wj5e) zeUHTCHR~KBNWzT_0Q@@glyG^=eJ~@>up2>f?;MhnG^knl;Pop22M&CJBeYIEu0=9( zbRBZv$o|~Q3)zN}w##V3 z0jAqNi7NuOlZ8#BKzSn6aWKt&~ z#Er)ZSd50)l7qK>AGaJpH^Uv0iLP5s<)T^eMQgq^tm`^22^LmI8RR++r=V1VoIhrs z-*pp*5)6weQaM0A7zl|BoQReU-_N?mOA%T`rs)jr&j7uw2{t8y0&+n4aF=f?HMYLg z7&1A-sNmcQSd*!#@)2O0ieOjKREEoGBm;`To75H|1{;7y{qULXC!NpJZ^~A_G^LiR zpq>?_wu|QVz&hCA@=HtHocU5&H15u9gL9?H6-lA)hz6_Dz`N1*Ek<=ziqJsjCMmGn zTNhH=W9p#}s(wd@V(jDKu&2-;7DdGHJyl35k@DduP!p05(Lv>O=E@>x2OX$!N}a>G z4){L^Hk#!#&vP|zG0f}PhRH+BZ^%;j;(VGasC!p}x}yRuD6QpB?tEQp`+g^HTC|-i z#7+K_t4V-UtLpg=l4pNh1Pd}KF2bha@z;|qdx`B+AEWNOIM!h8gV0dk0jN`4WA>Ds zDLEK|ON#^e6;F^WSzEm72j35HWKXAbUU^|_*im@Lw97DWyrXy<+K$XHpWU*ojdfNq zGY7hL+|Dgh3+gqxY|$GP!8&s9sIa$-()qhoUk_zGt&3w57T==}ZpM1wDr@vWiwJL* z5m&ebNsrP<6iJ>IHPhs}+x<449^|XtXjUV`FKyqo9vz&yx^49J%xQEy((WLh-idMR z7)mdqVC_=4(E5_jS5{umjv`SdlPIHcja+L!v3n9uKZl|`{YN7Wy9&C%L}l0^ z%~;uWqry7Id7x@wl67QQyLWhG1ej;++XwdN05_4K1EP@7HPA&n_=osL?|AZCaTYb* z;F`gQ!JXrjk}sQNsGnhBWEQ;^3V#Tl|TlB)Cd6VZ!w#A!MPW z+rivCJ%lm=e&9L?sh%Fv9t_}V^}7x=U<^vc1}l0#V-uzDxZ&qf*LtsrqG%gB50X<) zATMKe0n=T*qNg29oCVg-t~R9Tl9`Ws`rb01m^lEvfV5LQppKb?NRG})KUj=unX9Na z_DQfEdCd1B1@tBwpxe;3pA`Erh{;_PicNstTN8my@NhqXv(wRqdD4Z!UxO82ug*9{ z$GLU8ncv9HY5f5eS)t;S?cH;lkZXP2btX8s!Zv!}kUB5}`ZWgD!U1-U8(SJ)c3KLC zU}4SZ=;o0G&?;Sn*PBq{n`9mMh=tZzo^$d9gxn2!-5A_H0ZF!Q%8r6nPW#2GLzA$; zmdjuu|45!|UG&IErTbu@%JKoF-TXnPKBRjocx`Fv>H6pFea50=HQVeE_-X5#MjLFp z5WJ1LJ53T|NFE{D1?WXv810dZlY#|Fq17Y`oq2LKcy;O5V%N7*Seg&)p~f6z{tOnd zouOq!KIoPjMAOuI9%k=~nmk0_gQq`b%(Q%+ zVdRpl%S0^qK7WHrQV)IT-%_Fbh^zBc!lj&-@Iv%;Xh{c{`3YGA8a9H3B?)iMIBg6i zY}_-`%C`LSz7w#=3opudro3MVJo$oS|GJiEQX6Q2p?*O#mR-J;eQPk`SmoO?|U7#UZAABQG1!?Ulb!n9vo6oV~WE#d77uR9aJb+>Jy zwWv+NkfRD}m+fuEGe#Q-E~r8F(N6FVrQ+8E-so$$;5^^o@!rw`i@H}^pWySMEu=cIJTW3#=>}n65 z?pa;gz0SCOB>gST@>@peH)Yx%c~8kktyzJ$!Ol3qq|BZ!Z8KmMl&IC?`Dn-cmhDpc z!xmwN-iTXLljb_TcgAs+GoA`JMd0J`^@R34JK?p`hbQF)Cr{c>s@|PcwI?X)9Se9J z2i?*yXtqi-bhvble&LH*Z_Ps^kwb;AYf+9HeG)$@!j84mU@Uy#ViHxS^oc5`_3pvZ z+#{=I>}j9J@!*-&Pf(iqKnI^8B~bSsy}95oomgjO)dS(~&ZS4E3HC~v=&&mGqOVT3K|cjW>?O{u41C7*%TO<5%8-D00Ej@JE}F+L^gT)mLGcS>d8Dh z`N~=PABH07`OLU8lRjvt&SR!}vTkqc=F59&HU#Vxp|cbc*j2I(w)9KI!}tThlBIp6 zhSiq6*@muzWqQ&4h-SktCUy3spT6+>d@^lxf7=$Rg(Y59w4Cqj%`yINnU4o3K95V{ zx9W|2>_TfF8n4`F2>^a65V!jF^fcsTv!Kja#De4J(XXwuvZpV77My9?d?sw3 z=55BN-0IvS-hRa9Lsqga?c-1wmFM$@uQYRGF{!L+`-f|P9@YEzPcfJ7D^by7^R?8{ zO&9MwcF|wzxh20re?zo&%ZMVmk%eu{*I&zFftQ(K6(AE`}YrxBlzp`6)Nr$ zsXX+iZ#W~F0#g-@3^uYKNG%%aa`v;?b|leS#d&@5BY7AmA#ODD(5lq zZQ0nPo$kHdw|1&c0ncjivrk`s!2Jh2!x|kzcz+zlnRE7!SKX+1SwDJ88s_{Sa(!zb z+Uiq}l9u`dLi$h?>XP0f0T-2Y70mvNGlvC5{=se zqci;#P9jJdZ9(|CMunf7&o|pRKfUt*9lYI7wXM86&g<@TFz?v@;P74a&Cuh`vi8uQ z-}`Sq{B^k5{_x=Do)sAog$6KA;HZ?X0b7Tc)g>mvXd|pCcu93pv8hbkz0{zQ~M;k$S#GweirkSf=Thtr(FQv&GO0l^M#PPohU+GSEy8G{r zj93oJu@|AEH=A(54gRWCy1hWxnRiu~fXbz|T z%NQ2UZCSn=bGT*J>!MpYcxK+Gkxp*;+u{5ES zok-bOLAI1kk@icDFR{Hb%4l-jQ^rDYFqL_?s&EK&vjX3EqMs~rs2@{3m|0))#EYCm z^QDIF#1|R+BP&hsiRMXyoZhn6Kziry>&G>&1uq^rJ71jGWvs#FErsIVmTZMVIP{m_ z!Z2woP2JbWK1J6KV%iuLwN{kmakX`xnqOqPA^Ex(CW!gF0E+!c(AD5FZ~=VPPfNy( zZ%k-z=JBh>D+XS+$snVtA*(!naMm|C;& zt|8!2aY5%duAPc#JvppGtcN9UifBxAE0&7iY5)N}>I?7c8`KVE)HBBkWr-0z=ti^( z3Sh@!x65T^?w5qS$H?R5bi*7J`TUo-@z1*Iq@u(#-%vVXEeB;*R|AOoFeq>+0Devu z3XVni_|bInGJngH-s2a8IemCRSNPRW_J^5IqC3gzrLjOf%2`MQy#{1d-QBb{wvw}1~cCN$$H zv!Ktz{7|7v;65Ehr5txZJNh2)Fom!!+A;Itl@6~U0|E*NcSufzsixnPiEANO_L5}o zI9s_x$ghA^1B%&LgN;m!3Hq0X>Ll`27}6I5xtL@+d_UwseR3WWAbrEvl>KCw&wRm` z4vz`a#CV0~G?&Pd__JAW5Ey4_`jG5q`v{AIy`!~2EGC392iVM1A?d4e?;3y-=bd4(TTVgwFA~l6*nw9UiwX9yA}IzrpxfaWFa6~pp`5CDS0T{eV-=``PbTyqChR;B~PEkK!~da3FQ5$mre4Z1-!m; zgKSHFVR+B*ine(hi8->pW2xh5tr%YeRI56!jj;^is-cI~#4>fGw~+v$D_svv->uvF7og;(_`L8RG@E#@T_~GI8jA1Y_SPo>~Bb&49F$w8j}6m)ux5g z!O+EbA~Ut#C9>|xOfD8Fo`S~F-4=N^Ox>v4jG>v|YqMgrJCR{zudA<6rU|pcHC#`L z&Fe}0f1Y0xI9l&}*&cMA z+omPV0R>ltRHt-X5e398kJU^K^J6H!{zz#q2v@%Qc=iF&JWU4&tm>LgO4)Y*j41y5 zA|VVQvlYhBucs#%HDwzWm8$>v=68`y))DXb{f2@uAy2ac)uW5tXWw7S>bX@(MhX{c zWvkA9e?xw@=zNgdehi49F8azHlLkJliyt?PMpif%s($=zc-%NMRN?Yw;Nz~xanmBn zE4Loig@e@N=1uii9@7I0->LGh?*I@_iP$LTdJ(b1yQr5uWeT;YzRhrA7D)YVq%Z_%eca zWE5HY!ceIN)N)#uWu-pTrrW-WT|2om*LDjm^pOna^~38Mfjyjke6o$V8=q0j_bE`p z6fMWmO8{OUM+2YCpbU^nl-I7s4Wkd}NDX)(#aQ!K4aO4#kITSAsM z$J^$!{V!wF&vOLxyj~@C=V_X4IE>u3*vsoe+Z24p4b) zYI4fBVfduidgei(MtNPD3C_BnngG^~sfO(?D>=Rl!nf6hruVMi3o6e~UKW(l$VCZo z^HVeHT;0t#<(oLM3I}5ly#1UF2rOLu<_)VAbb|^Pu%cI+=LzWAC{b49E+7w_S}dS4p-H0H-i2r-Ji+2L*0gvuB~+mV{y`~ zE}|tC!>r4CY#t19frl_@uq@}~j|sIwi63L3dpW9nBY;lmtN5AhHh>3GYsCuljg81s zsa2pytln15a3T50KY)paG{vC=MoZ0U<_$jKo zC=U^0(~Akp9+hFrO}0^OOEf8|d}>(N&B7ALOVa@f}lVmq_YkAT7$%Y8cIv56bR;1)9h*mm7_%rmJhg4$=9EUJS7g?O52OpoqIw=-Xw~W)dJ(J5p>`?iGAe5^Te|^z+Ge-2yE{5aLYh&e!nkv4VdBA## zwFaGI!`^{fQo<-_^WHnvgV6X0LZbPpj(y=KjTeJa5*CeDgN+1+0%$+)1#y@7d>vf; zzI~K)_ws{aU(pul@sZwm7r?46X;;fJckMZ`pRh#LBQ;++#kIM3V(yoas3 z1>>vomWjSnbQ@+T5WAs%A|BAr-X}+(2wBbd5bhw%1N@uy%-8pO6;awIKJqg(cov1! zgGw>{=rJZzzE{RvgYyBMmhb2+o&?u4EV*5Jp2#u0RR|GfS$=F})ycxK|8m;O%-``) zen2;umLYyQrbIu56Dl9hSw?@AEH3qJ|#guDhi`6pr&&X9okdM;uf`{k%$M6T4k$pPL- zusA*I1eYf|pT2-*D1^%?e)|DLd=zKUGLbcPB9D!}3>ohN=}ceP9uS&PPJLdjBe?6y zZnccOGcsC}ncl!IC6o&t@iHsOx?oZJvkvW-d^Hm1$?wPGKPS78{|E9_zdy@Y3-1K} zZ$Yj9o8}vOllk<9nqiylEXHe*W%}0Rx$31-EgnLjrz;Hxo_LAZ?Tq(lx-Uf5q}WYX zJnbk@Z?4;$?uxt0`99*!Vd4}ei>g$U__r_bYaTt#h&Vd@%K66jlAh=7t<%qo6aIoD z7oKO|Kd(4>etj$DwSREH< z50yE33Que(>bvp8qW}&mCv~BrRjm3y6U`6f8S&{JbeVWq&l0ywW;w@Ghye9-b*ae> z3D&t`P*+WLwTakcH)T}#CU4bz;KKOGs%823F{yAKBTw^vE;IaaVUSRT{&YpesP7FY zJ*F)>17V%PtI%^zVp#;Fv&WI}Mk<4MCj>8$Jqp1P3eI!5WU`cz?(GXD2fwbiD5;=2 z1Vb(4$wOIUBbM`vaa@#)IKgY$v^B1}9)z;7y{RF2q37BpH^H+9NEjwh>GO*qCQf?q zMu;dxT_NQ1GA_C{1fAs^Xb5{c%eXHXjb=h~Py7ti1Xg}*?Dt4e z9fpBp5WE5D!U${-@C3)Ae7*nz-K7jI`tAqLIyd{qBUUqwX29Etpz+3F4flNgcx5P7 zBzvb{xd9}=A6%KvhHm9e)i3!arB#$+a=-MV@y1eW&b80%vTtDI4c#ZG1 z=?8YUEUy9o($^}#wCw)Ga{|Rv9#zq8-yE;j8$TkgcEs4crD_C9#uOyX8r-H(>e?Hb z`@zI~L39-$_7qpNQhvJ92bp~PLSNOW0rd>@jW=1A!e5(C-=_1o0!~9s<-yU-?Fk_V z#6tbeRP1RT zvQp>s%CT>&#l4>-HdZTExhHO#dHKGOiEe$*R-_CNu)<4a)9z3bFUj<+aFr)!s|ql; z4T?B8BDScF4iRd`SeJx!(z_Q4Q!=f5>YQoi9kUQV&cVc}G#D+NC?MqVFc?hz9& zh%%~9v!!0`>C^4-es2EAJzlG~Z&Nu2ZGMOEXiBM9vqPk(FON;6PkAXhh$bN-Lik5= z!jKhnd=WO9=w4sHUgJSRWkfy~R)=OdcaT^=nEzWe(T{`wG@7VDuuyr(#_%w8X0U)S z5HkdMM!~kQ$!6?#j{@J}3FD`LP_a&$tI`lA#D+Y(gamFIYDNISHCGaUIIa&jK;Xsa zrL*7r>^|bzPr<%Rohi$8o5XkcaTbrYqWD~nPXN>$L;1YOh~YE2Yi;iJ?NKWeQ4Z}5 zbZuUf7*a(dcRazYAfNj+vDzbSCe64mzi`Wz=^w#De@guL%Pjiuf%W-|=oc6EyMsA| zg7ZIjFlUu3G^VzRILVhr88rTF7PSp}s`rJ>x(T}xYJ143nagmzyF%~(Ya{g9Pp~sa zbz`Qv@%ij@wdpkz&qmjX>5lMA*Nf(%<3q}xQp=a+g0BxYSLBTD(2EL<&*2p)Gq*~2 z`~ZOq+pb<*L1_9w=7h6-@!2-B?O^;fpZqBo6tV*j$_uYs@4UX38VrY;69nx~CH*4f zQD}%Rx~)V8Gk_6Hp_|tF>S3Jg$&bPjL845NpT;&wL>D!Gr~E*9y7Fes`~<*T8P5mX z4*C#{y1Bn7KiZ+R_MS{^?4jxHYFHj#0SuXUt7ARQZf@KtUYlu}PN)X4*e;uHB{0O9 z=?M-*1$km&TwK|E-9k%NIwan5$#nqCgRT98tn_<#Bd3wUY!DSjX&H~Tywdmz~N&T$R}htm%s$DiN&@ONuiF*NQ=WJ1w%I*UesHCS((Qz+ueb+uCZP z4V$L}LN7A4hrHg8oqn+yy21>w4E-{1=7wzbkwURfE~hNKMs~_PD<>#i1C2fY=1h)v zoTs#y0C+Y-hiY{?Bp%``jQ4|x3fjyNRuA>8E=S4eKg6f& zuLYqRMO6$(h_A<<$r2$MdR0E+(tA2he<)NFSjdKju?Mr+T2&8D&s(|Bx4Vgag;r52 zoh;uG&J1tWPdNK9{Z>nD;M#EtT`*-)_JuFotth56VUu^wI3)v`b^2O9bSG{5$zNy+ zsuxR8GB5>$S5kE6gC5O%aPClyUn$dVzHYu&l7dQsFF8TNhWaFCqsx>S(c9dYse)0@ zto(hK8yMkJ6E~^@b3?>A%u>uI|pev z;}wJ|_GRpw2d^zr_v{am$vm%JxvrJ0co~x~==HD6q9T2L8XgC~fk+gU`?ay*Z~t)E zUY#JspVY?j^a<&+AWCIkm0@V5RN}r~t!m=J2DIw5F`o0Pnb8VJb$J%JVvy=vnl-73 z$`JaxKEewzinNq5Hj$QDw5^|$(E6=HtMOuu(aM^POn3HMV$37%HU*jAJBg(ZtqD`S z4s>|`d{6&Bkf#3wY5IR0(!`tc65*gPOGLlTE9*)3KJdm%!Sl)vD$d1VMjF#|2NO>> z&%O4i4n|eo!GUzu44%$h2Q4qTA~f5BAZGhRJR1Xwy}*0~`U>=M3@{=#f4>TlY-&ai z-kz5TkVA?5{5rv<>q#hU3fvTGyVywCt-X)*Zy!uTqg-^QM}9h{BSG^PP0Jne%u}D$~AhX%l3F3AI9&BrRQ1&jKS{oIGp1_B7;jd;rxqo z=yfxTO4`<;_y+b$&;Fa&8V^&+M6D-Fn#wLA5|` zyXX@D1HK~K84R;#RJ%Oq4dzK#2dtAj25mNh{3QnqG4m1l6_9Kg)J~9E1bTvtjmX5K43buaxdPV*OsTYqaFO zHM%%{mDffTA&7lRNsY)8}FoQQkIfXxYi}&!yH~dpKZ6Zmw?fu2tj0h?Se6m^Ij4l{r>@;+|(IsHwJu zT?P)8re(xS)aWbX_18t*T&3aUyglDwzE|I?{)E64^I`o)Qp2!4w{vdVhb`^nhB=NW zKer2kvn3t21?;xG^;+D1YEm<=*jG1KjLClWo0bK8c2@y%Q}d~$bgeFk=hyJKpTi>T z7ei0IanDUIhXYz^8F#ACP5SrwX51kKU%hXOEfL^yv{MaN29>v)5})nV z=#x&y1)?ymvgIpr^2|qMRb)t{0wkO9kymNyx4^d|c{v-Qx?n zi7}U8IPKGX=@^$%wu-n<)2CCR6!*$=jZ4RTz$mIZi5FoCuf@UfkK;BoZO3;xhOAqn?mA!x=IfT1{)g$ch| zP~~)jxp}oxC?3}Xp9;O|4*d9(s74h$CikA_p`P<-Di;vyOo2kCsRC*hi1P5X zNUu;tA*^#jp%rY;nq5c+grr;l-762qAh1Yvi@g8g+7Kw{Hvr9!>+{Zscmc-dM{+ zvjT~)B1xb;tnLA9Z^n0$&3YI@KDr5*LZ~sLP`lvB&Y8$hR%E3(xQr;?JB2SHWCX(& zqE^B7gD21?JrbU5ytq2sEOay?$vV%6obbdEeQ6asg@%j-IgJpYA^T`1KF5$`pgs}8 zwP-(4bY*DI2O1Lzsj|tejE0O6FKSYt*~ygOfOE)rM^7MNe1y~_lJn~umN8uQQcTP+pK=~d~ zHiP1=tz^U~jw^uexPip)Lg-@>=BjY>i<}v(qlj>1R*r0k_5`uH;05JZ<5K10Y98aT9r6r(IsOjRA6an2Qx}OBx z>jMmk$kE3s^M!!eUJ6KuHhM6xVh_*havB#EQs?Kb8EP&5l&YGcJhuxqF%n zPP_sm^hXE)TT4DG2AJw?r$WdqvI%mFKu;CIN__$5QNJ)SVX?1oVzMhWBst}~O=5~Y z57Lp5FXFPnnrFjBcRFAB$MuA4AXG7dgv>P&Jkm{BSMZE&_j)0|ZC^&c;C&)4fvG=@E znfR50N(42YR0-LmN+2M}G={SD1;8ISEeIUvH*ML3hhVaxi$q!!cq4hB z>upq7qXh_b@F%vX1TY&Q*D%bH+Q&gOV?S?1*xp66a&p~ngaO%C={ZeFBneXF8pVO) zKnZ6m;a~8;ms^0~eTt|REsazlm057woWO*a@S8Zhe;03>uWjWi5F7@ugy-HSLQcHL zfA*$=C`QEo2hmWN4pb}eX9BQO1K92n*tEUAs$1*CWI$)GrSPnZ4U0@uB#scZ2N@Jc z@Y@bLR69YS`_q7R`oRv&6&5_m5FQ5XX!(LEENRUS{kX7m_e=5M+gCH5NX28e%S2Q!E zWE#`_QQFVzkIkh^Z7CB~DbAFLD-~3FB#;Y>BOe~B++E2l+SHBZEqoq2?%k^XbeS8FOn>2X6%;2))nCMn-1kKD8AV8 z?!w6SzPxtxK%Sn29>d@(4v|Zhk<;&Mr|vi63$($PzCZz;4)^|~kU@)0ARXM-|`ttFkVLD$K7F96S+a$WvvLq<<05M$mg*_vbk7FG zp@fOY20tARHfxK#-C$Pb&`LFYzt+p`f)_Kd{QrC%CQ{K|H*HxPA2^kA$&N-7fJpq z9DZ!%(vuFiH=fcYnIe^((p8@_GA6TKLmiL6!|5OJp1Y|Ggi4UV#hfoI_pqi*S%an+hc{fqE9 zz`Kluw@>|H5(Yo()?~aLMR7!F==8vnrf0Ahe22Gf3pKZLc{Wl@UdLe$kr>dUmzje) zz#(J7TPXNd10R>;_big1aApMuB9XSY?Bsf5!pgB5yB5n0g!8e7Dy^wA)a;3Hl zcIBXj2QxY9BCw?vAOT(wE#^S>B3^-LmSK)gRls0Dq2U`W&1|Rj|NQbOTvZ0pz{BQa;S{3XZHA z-qZrG7dw85j{TAbXVo`Z%w7Hx1>R14`-MnmJIid_lVmHGo3&%%OB?@MX$4@hhks_i z{)$D`=uEleuBq<@dszDRr;cs64b;-Gu`3-?Fwy*Jvd!Zr$*7&3;vl;lLCAGFGND_N zTWAf~SfyARaK_Dc*I{oUpa)>YlLH0GmFIzct-$!=|f-bL-y#y0LK$4?wz17j}`NQc+*oYv)Q;$oT7oQL*mYpxih3O_%yFLvrNBZ zyd_l@@iaB@kIa9(js0=2^~W5=0fg}^^A#xj6{s#+GSd5X;VaIrM1amzGKU3E5fr4D zpqt{&*+nl~NG$oY^IWe|bL1)K*vQ$$CB3A^-cQ)GpHW{q=e^HA`0q=pUR*nu+?mFH zpR;vo&iRoGqNNLF>;8{lISwx+uaI7XViex}y&)oiT5DN8>KUzH~GPX8j2_O`jwSSk4qCOM36>*Bp-f-;==_B0N5iSK>-s zwJSFKzU>={&F3ljWrzqipv9_yc!i%XhnouEn;4xsPQ^0LX^5tuIv3gSb6A}U5?kY^ z8R!twUkF%la&~3W+ek7G_>PaY27mpw?zy?W^6AdgkJ&HIfBpPWKn7w^?AL zFH*h;Dom^i(kq>)NBONlUFdLoz`qk6zNP%#;mYL_=`o{y89~xY@UWj zP>Q)D7Z-=PFrCq9eefNu9xL^J+4NK=>i>X7|K9}~l^!4*xY_h2*o;qvu3JWM+K!7} z^so#yES{AnFe;NI;XJl^Bl4(Tg-89#ghn{*`Q)O8`nM^4%kppUja+xWO+N^}`F+Mb z$^QGSRblz}IlDJI-{&2AZvF#k6f5Kp9pb8A^r;a)SqgL#6wL|d$*fn1g3XC8MMsO* zGx`zw)yRguGiu0-qliSCVZ5WzwD!#p30LAI6=_kwrdRqs;V9J!U_ThFQmW$W}oAK4q`@E4bcQ+B3Jt-#4>Qk^c3 z=}bfJy!}QbGcroL$yrHw{y3=B=9)qMSBq1KvWc8_Wx&}iskaHa{1z%d=pxYE)2F%v z{J5R43+3REfk^>)H;aiJ0i7G?424#O!Cympb!u~s=c2NGc#|~^Vg&Bv|J0PA*4_=E z)Rx(2AP>2=?4T`~ZlHLntuGfx78BCMw9rpW-U*1~g-UP7G7#g0_=9A9)s7xg{>1BQ zq}vZyoFt;|(eF$}lSP=_dPMDn=@zmm4M!j!5>YVqT%F7NB{I8ii|LWtjbVE^nX3U# z>5(C?jv|v`Q83fzx_zTFhDwZuK!fA$`5PRM+Hn!7BG58ylU}51s`gt;K^5F9*{_WD3;8G3R-Ae z>lb(<2BCago&?`YH^HN~-~w_tGP+&2Ah=|ULeI;#W z_ets33OHgjzS^YPe)#fL#V-xpWo%G)%BZfG3G?S^~%a&!2vO7mUF1@gy zq8nUr(3_%L#(K*9iG-%#XWdW%>`9_krW5+c#zr**L_-XcdNbcqmFD;HFI~x~r|TiG z%^Sd^7;Zf>aLY$mk9$}f4@}Nh;F#6m+kezjDHR%`5q$mTe))`%#N6EF-1oZrq4FpB z&!O*kzbmMmlsiz|mB@i#Rp^p@5*1te;TqqYhThvD&vGO%8`^K=-?uz@o?mMG18*6d z=Ce!DFmHSsAkw@d+3Q@$t~q+~wRzcI$wm6a@YXw#x5Oz=-6uNk?cE5dBO3eqven<@ zC`_Xb_hOidax^%=sv-oUvFG@Cu`y6yzrB7;mi_=8Od>$tLC}tS1Lc_mk2~o^XjFyW z8(gOP%2}dP{tl{82?Et8i`@w<(Y;bVdCgmqP-@{$6b;y1ZYhUU(Ij8j_ZAp`W~Q5@ zlCNP-X3Zr#qI9REIzfU;|Lu)D5@VnCY&&1_BxO{55;;T}KAC1l%qM`zOGLk`>Rt=G?_yye;u#3>{UQ$F9Dma(_xV`<|qt%$& zmRbJ8YT_Wl74SRyym@xbkT=Pn)W3SrtC5`O`L`SoeSLX$_6bB<-$tmh=XdRV5pt)# z{p#>uki_{C5MAHNuCX6>|9qKxq`q5Zct7gJ`3eJRL$4y7Phb!JMDIXJj4JB!LH$D< z7+g?qz&I1X6>htZxQ7~4esab0@D@Vq^7M`$_faO$vdLo5FiblBHf=x3)f&~PR$b{- z$O-za9jts=J^J=z#yNx5h`5T`!t+vQmTfcXQ1#Zmu{7hK+dniU6zqo4S;AhfM9Oj> z)}&&%Pcn941}|Xyna3@MUM#NOO|nNXPog}R_R-QIv+rI4LfI|*WX~jI8>7&?ZYGCe z_ds(uqff&9pz^%|pn$Xl?c2-$iZg5mE%4MjnG;FEuJy#1$RkO03XZ?*ZK9dEzJ zpy~qU)ZZO%zs8_@;?ye6R-?H}aU90|wZ%Gqx5K6W7=y|cSW{pB=6DM$ubhFWjFpmOQmf2nW!U2BgWgGx0Gz>dl-Vb4tiOV z?64}Y!m@*YY^dSE0B;W$)`c)_cQ_=vQFb_d>v;Qc1VwoBXjJ~H{n3~bd->6L`nMdP z3FzLtS{=nzM)VX|S@N~EFIQO`<4dcSZ`d*D`bvRk-VkB81#Vy+b{6{681zQN?u$y5 ztA^KQq|Tz>h`iep-}R^y)i9m~?Ukrkc8#NDL#zGQsNw$)ffBG*mNmUcqD>EWX6g;}=7*YGcjg=X zozi!jL>-oTg=kGPn@{C6iC*1pVr!vBYEQaIHw~*c`q>V52wa-y_ylHJj+biXcKUUd zZclk6-|@Z~adL)_9CBj}Jr+D&-|t=^p3n^b@G#kwN166r#iaQ0IJJ-k0zHD~)tPfFd4Can1THQ#)2oJ2U#br(~)-)v>*@r34bWZ4}$L-DXg#ao9t z0t2yph7mn{Jx0W@Mdr^lh9%ED`9{%vsj6eTmZhq>jchyDCR2T9Ri<>`@JERdS+{)a zH&P^6N6h>E+($gp{&0UtxzLLyIj{b@0CL6WQjYJV$QPS8j~@)n*3Q>NV26#t*>yJy z@7$6h(N;S6cb-Z3TiV=-w$GspSVE)vdTQxa z4Gn?Xj`VW&nY#9f<%U-Ue4-PpVB0~=Dt}~B%+=^Q^oo^^8g~tv35u-T)F#d~SN)n= za$Dmtf`3FamqT<;p69L2G|(q5dUVx#@vO4T+x%>I=28`9bOXNJlz0EGR23jksF9|9my|3d(X zKU{AAwDW$jcpcIc&S|P2YId;JRjf5h;MKqtJWXq2d$;9SAPf_wdTHvGe%p0ZZ+N1j z`)$jMkoD_Q_oU}rety69YUth`7RPr6(sK&)ZpDWzBDgB|R9%>GFg^@EW%3Lb1mNTd zihW-e#sCp@rH6sXk}JKWjI06L3}VPt#>Wg`rAXmzWLyOJ?4h}t#*5_oW%HYjy$exa zzENkRh{0Q_XdG=z7CR+)!>X;i_$iC67FhJL?cF(7)52KVHCs}0D zJWjO{?z2d{`IhK$wBtorwy>K=E_>$Wl~e8X=W|5EqDuhna89tt3cH#%LI1SS99;>B zuRfirA6ZA4ixOQxY!z8gyE$3$<@#V1$OV}kDtw{c&PI`02bWj2gkGip=qs;ZfQE6! zcu;U!F9zsvmNZbo`Z-q+C2g2i8!9fo!Z|~`s!kSFlA0ltf+5lA5T>2lMhr*4(9(mn z^2Zoi*luH1<>xOAX`wa)Z?>1iV1;{6TsD!#@6)~@`_@Yh#IgD2P-Grm#9lkG09Ulc zCL}#YqDIiJs;fq+IYpw?X!}`vYrR}$ce3PRRnJI0Gk;%VgWNEZoyT(zxe5{FABZK} zj_M=oQR^4js`o#9Ou8|C*acm|9E{$CnMaMWuV_b&s+m&N-WtLF{|Ave#@{+OZXFJA z6%HN@2&^F(YNt&ft-tQKd(%>ddRj_X`+=hL=E0oX@vYw&DsSm-K!J+5#YAhZU{nx& zRJ}PC@z0|#3l<1J$xFdcAVY+C=Gw(GKmww|AxPM{=!FUME?f zp4L94m$qE}amxNTWP7$^9$x*Tt;Q|HQUIl%)lwj}1s0(q-dBhcVhEyM4yLPSUk+tX z3`q&0$IM`YIkbb8BiOqU%#ot)Rx6Lh)|Hl{BEBJ5(BVY0%rUN8$C>`ktmb*qO3Q1R z!V9_v`NDG$%EdTQ1^2573qBOX$&dUVStLT9Dd#4+HaKYrb#3y8-|Q5WgNyI7Oh$os zjz!@=zr=F9KXrRJe#y z&rdWfvB^rMGK|1vcV9w3BWnXzG{lPtQin^t>wdf!stKVjDeDNMMdo{c?k`38|42=g z*v-cBx!TD&Z8;~iJ1nc42|jb(ch@`Is(jzCq9#`CGXLd`%^H$api=MtliY@gxQ*=3 z)&0AM2^X^E&4;mISnA+<)6@IAGvt-83pbN1vgd_g@EY#!$?mjQy_Kz$9r__wbwBQH z*t4>Fp9$bCsp>hO!DgNSNf~pT<8I%F-Qt6O%Y2=vcIIfuenGe8!F%E(ZAKN9tpUun zrkf|>`&`#}TCR#w5#EB0zEK&vS344+x{GObo2brlx5>C#u_TBst>|@aHKBEsL=q!( zG!Nu%0Sn*|-%RHd&=A|GEd$N^C$%Kf`<(~4E)dB`6r+N!?NWL9>fY$}ieQ#^5sw|Y z-GGJtUEKTg#QLi(+5NRG{VRqSb0v$1GWh0r_do@Thp;``}l^1M1b??-)^9mu-V`u68vE`&=P7x)Nl6={F- zgWr%qwT7R3KM^;fi2XQW{&Il)UZ%ZMEgb-tYM2S`O#bh zfC=qhgNrw$gW1!7*RmwyQWmNAB&N!g!_u;4<<-PAQrE(gZVhhFJ}w2;_%-6Hm)C}Q z3d?NBxaQ*LY>f|Q+S#+NWN1fL^$fF;^1NH79pmgWq`hh6K4(M5y@+bEH=1y}KUP{5 z#hE15&o42CoZv0qHPV%ORQmcU^hi~7Zg^fVY75k4CtqXE$!+9?Kv#l2dsX1Cabb9$ zx%RbBSKrxQj|oOygH1XV$V%Z3R7V}S_wy`d`&&gh;*)2hf=~9Jy;}TL1clA9s(e$) z9nA4pkH36148iyhi><^vMfJn>dk;okw2*AIy0SaA3I2NJ_hdbthZH^aHo9J8m*e(- z`RD)kBJ|5w`UtH-#+``1zvu=cya4=$q$@iI&$$m8|Art=>F-(@r%>Lsp(Ju zomGhKw2{uJ&=loyj(JyTGCGW1svr`)z-4Y09?`%YeG7j{X~k@paxxb@0{FwYh9#Xe zB=Ga&hNA-V{a3ITCr2m}KLgXoIZ{8t9IFOh*AQ#fHvke~`;NoW#$dKP63yxSDl$(w zc%dm!bo)RomZFT#wC-OU7BG9i1td&thFWI1XBU_=37!X%;o9L6e zC#>gKdfaT-YV1b54q6Oa8P5LBmgbzoYwo)hSL)8&e13H<`um*yj{iuMga7s9{wJ{+ ziXp*NRJxUx(b>^|oqwo*Zfh+nX1AyCI(`1|Z+CK2p}{gf8VAFiboFhi9s6u7G*$)e ztFB2SA8P3SA-t-L{?6Ox)5Fb)Qqz&QEoaAAtkIuOZhHye%Wv!nx4`+#*}ARCxjw#x zDuHlc64~ed0=x2vyJA!pA=F6PAG$eU?D4JZ!x&~|_K5M~U@24y*@4ksZBC~2=cm20 zDC>qmGph@M^RY$R9JM-*m=SGIuh6K?TaiFcL=gHH9s@hP5P* z{iQs5^Dv?U4YODSHhRl;%HPw+{<ngm1)yww=Ce5hW8LMyNLCvo1Qfp{GKOQ~>YCzhrDk)vL~Vf=?W$owdwmQ;5_B&vQR9E z%Ta~1)dxGlZ#kTpX>Z;V7>LY;#IGVm#}A0br8V$Y(GqunBHC3&cgvEOg26aQixi&6AsT#zEXrfZuI#wsVCUsN9nl6Z11;`F zJA`IV(1KtQc#_V2jB5&jTIUIql&Ep$p3sn`l_P49g`y;egOQX~#VEdK3m-#m3aQy1 zt=ukWU>+%xFi0L2tO*ex!vcaS*k9f9^;b>1uM*F~jf8S=R&(b&!THMcPnDJslq{H$vDlZAdxI-%tzVqCn-W4r1aYiG}tr#|8HJ9>|> zdI9l2|Kop+LezhpME_(I;$xQe^*9H%m41n1ezlU~@o3cmu0O;v@jMR~{!LoR%g>6V zcJH1*+m(wB>rChCaEQovU-0fP2jk<*4mZ0`pnOl1HgG?RnQl%L^St?IIf%bq0(cJR z+HEiRbcbZ8h?6ya&RGMq!7%b7v@g+(=h)S==B9e!97KOH=$b-Eyu?B83Os~4s$Nq9 zQBZ^lmTAcK3ExeZQ|GI1`|YbSV`O*Yi!;SQ5Ph;GWsX$NDxwE; zHe7kViRQ4%cN`#C)kL*nxpL~xoTyDv9fB->zObIh2892SX0{^KOA$&Exy{$(m*lX;V-KOy?K$6vR6gz z37VjJwOqNkg3H?FZy-p$$RJK72B- zJg`_6wiMRV{iEXVSh|0~G@B5|4D#IVIg(`!(np7~Ni}jNQu*%0&OBld5RR~|E2)(K zv(fq2of!YG4dB0?tRD5q!C)LSHHzrJZkALd{>UL4O#0g+>Hi?^`p-85LR@VI2)gfs zllL)|62<>w?>)SlY}ajX2!xUVhTf$^=p6z!2ps`KZ_=grUd7N`fY6JS0HOC@L8*gT$0L*>nr*f=g_qUbyysDA1 z-CEV}^WEOha;P3aA&$9zv;36>R>ylOfIWyW&toL+L(B658SIt>^43%;IGHg*F&-{{ zd)VMjQ~rq0*bEBk)*lyD`K^eInSxAC`3i;ot}-pblyDb&!Ld(Q!MfF%OacxCr{!Gt z#EV<@oy3p(G(I+UZE65i~xp=ujZm)y3#C*3J)HPRCi>q)*X?-;wTAgvc$HdcN>L6e9e7&fLM}9)R z+MyQPJ4+^SK0YoykT~lqDl(ovTO+b&64ulkH0$c{bk9JaOr*XSSC6|;kWoGQv(#0h zhVJFo)D)nbTIiL_7%|;)8l2gFQ*3uj7RsT^ETcK7Iwul-Duoz0>0Aou|(`1)jE=s6}p8Y770w2-Po2GPrTVc zqM2B>9%&UwORK(>Ce0gXCqZ4Yyp>VL9c87iZsg4Fy%b$G$$u|kWs4u?V6c;`fon^L z4gJ_l$hm!Hg34w{bLR2h$ClxVW4Eh!i$cxRLE;?kTzi;kI{7NV0hwdv&9=jRr(*2# zX3C8K&CI>>SO-lf?|rS+#NyQV&Lze5eu)$+xh^#>r9<5(<5eZ9M^(GfMlCaE<+_F* zfy&Q&RD#&x51jW3srOynYC$w7AInCy%+i{BX7^KMD}@9F_^mAo4;lu#xghdEzd!=w zl`c=*D_(R*O<{MY0WNhNnPs2rhl*UG-kBi32EfgfBi(TP6PVvn8_oij31t2tf(jVqQDnvd%dvI>zKW#MiGO0h)Py6%xSvid5@*s7 zu))YKapa%1Ufco5B8-3&LnqLqe3)JzZP;`Fn8+1=P-@)mG0rk> zj&FMv$dwh%$5|~wi4Vgada5ynAVM|~j1dSVf-So86R3%_Fx9H^NI7{e-FuurQ`h!u z;d*vyTTLYt)aOjq)PJ0na${fUl#GAg$hE$`OsWid6VR=scjEwx_ql63+x)Zj^zB*& z5iClt{>g#a<0QaZ!1wyD_wQ>xyO6<;Q*Q3813Y^Vdmi7Fn-(!>RQ)dFCeriuwy$RI zV$m_#Q}CQ?`U@5?oqOkJ^xT9fjs^Wv^i?L;y#cUe0p$oQb#}vzJul|^8!*RD$Lbpc zb)GgbK{rw58rUAPP-N|Ju(adu z=qkzj=`-@9qHuQZduj3)dza@Eh*!F@gdO(&?{3$2x<5SWMXWUfr^GaHYuzr~S~quw zGMI#>TOs*|r7n9VzgIk4migz4T})IKgbjP5XubzYw!GZ0lKty8b3xw1P`0Xnd2rr$4SLM z#f^#c4K~003NJvgOL9fW!0&JoN=%)7=pTWQWKD=ED^a^QLMVU-ZO;);tXr;=_Z zmq(e-qc+nH3Q27nKi&sEixX;!U~Y~AoFe2@4m>&d#qi;?7(61|!)T~hN#AH3 zgtn@WL-c<9lmSeDPCy}=CXa($viwDSE;~?M$Y%3u)Bs32>_WkPWL6kbg``n_a4plO z6!Z=fn+8qO(Hpc;vc*%$+7Z3$S(U|f#+xoURUN137Eg*%h<))URVU(nvuajh7@eDj z2pmn)K~*4cd~Pzjdt-pj-+n-Gwgw$LxbSW}SKUBSD{)RKpApqn_l;vVSTf3#=iQPz zv>Y!U)P&E7>yW-1K&9`d7*9=$H&mb3!j;Oh`O%i~u8OKI2dNMbpQPSP{YwqItU0Au zG+lSC%xZFcH!u=8V_FoSv3b)5?Xd#(pvC2tWu6k;vQ;#&g5HfrOLL()l|@NM%vmBJ_TLQY1zb9jO2`?s-^Qp zth^NT!eCd4Pje;_AXrMon$0RRK9dq+5G8+6r7qW#k%seX^ZtZt>aWghHqVy@##d`O zYR=v0Z7Zkk=2vqa*U$UlS4MYH%^I?*UqbY?QhBFZ*Eew} z>{&~co^a6ZG{}=H0Sr^Nf4n=bL~_9=B*$}}TDK8N^4CUDR3s5G7PO(}z{9L)*_kN{ zAH4g90QR~UKU27A`T**%ZKkk#WhgDexDa8CFN=1?X<=Bj*j7i6`lxgO__et7i|#P( zI(QuhsmqRKQbZ_l*HHoRgh3R~eF?)4E>Uq_rB7FEO^9g$@evit!cWK#mBMY33dp4G zx*piW7ZLAfky0E#4Dp2BN^CAUqk($030kyXargCjb3mh!ShEU7mu(}iiNZ{%+YRf4 z3Hs8AC-0(ZcZj0dO`P(*k5nUt_~{{0&+cTCM6+?)+p-ej){m|>*(gc@rNkDJ882Vj zCW~l9_Z1U=?C7;zLvhsDthoF8_&iqomF|TOjz>Q|;T`2aR3`##d!LJCeVQn!b@G!t^Zv>PG!}XrKk?r3>$Ot$Vc5V%@`F3rx1T#^ zqu>T;(Zc(P8v+z$!%`Ngu5>nC{cT zD9IH^>=5}jxfi5tORO{SX;OrTJwZXE1ES9+st-VC5VrGuzXR}|^&~f`^tBAVpLG64 zT+wq3m4mgSxHY+7nIF3C&c2K|%so}ZrBM*Kv>`?C%8A)1TONg{dfmC%M*HY8 zw77J&ruddeqb|yM-tgT0`O^howoJ#@rQb+9frpHdVH>aLdl!s<>B2=Xy=h*YCSA#2 zVQQZT9>22uuCfun_`;i9*X_q?sT1t$Wa`5cKDM7?B|BVfrN4>}zpf0i`?45^5JG*W zcFFHJ+~4jDKHCjG-=(}H)*zXAbi0In&cVyyIE0Ou!n6XpFoHaj6?0R8QbO<2Km$KH zdad*MHYs>ncRHLdA=~K1yns-i(MJ=qG>2yozXW<-$WW|Ld$LvqvO%N1eM3S^#F!+t z=&=yKuJBK4WL@kY+Z8_SogStg9<6aP=2bB`^U?SQlH&YE`>CwNuwl*uc}be093SN z@=RCKGxcOC+vLurq+wVhXe0S$JjWafY8#favz%NDO9rQyiU=1{62925}ZVpP?Izk`9EyOT*C6wq^ ze7sggk#ZO{1EVNawFnnKHIK7Mu&*6SGm$C8F}_seLv#9;4>8%5z8&dCdYWERXON?T zO+ur7RC*~e#3@a|Ih7P}C-nh|R9U8UOLX%C8|CH%L@-?t<=xJJEL=55YFn1Gv`eJV z9es@~a~@Yuo~%3?<7dNJ9v9hOj5$7XIew-&0o^Hp`M5x5_TYrr&=t0ad5{NZImeW_ z)atoEY;u_m=!@cWVI{dyd34G9xia{9DCfjX(>(U~Ilkg~c?qFu3Ec36M<&$yYMhxy z)nVmwyj2O|wfwyG7r_a3`gLFPK8h>1F$Q+j8+sKOA_~U4 z3t}^grbsO&7z=0R3g=A=7lR9z^9onH3*W31u3Z$aGZt-L$rWvz7QGKH+RH2Y&|UOt zrReiT(II2;v0U+~Y4KTbao!5WK05zgjzJAWs54y*$TylwxP?zgsKl;L8UZA$u^ZOI zEcwF7Y=A}(yFoz7av3304}|suW+<}c-HD{X6eb0~lv{wFH>A`ntyCbNPH43hzJYnr zCR?Dd!i^;otD&_JE0wOnlg%$PX_mc_53%twA&DqcFr)QXR=t%EQP0O3l$cr|ROEKc zbU=lOMC$98kP?-0E-b_aS#By%ZHlNc{{YF~DK`RD*veNZl~lMhRd`%dtC&^BW%-&U zVsj-cWsc0`J0T8`D#OciwR}kEcqNRZDzXM5q;!dO_o|9dq<(c#0HLgatrBH3RjVCg z$!99^KTsEpLy9h|c}j>XLTWNX%1S_#Wtug-Gek`vuoX3Uxtf&qE}Vb0N&a{6d93%z zw=e6o5?9bCkh+-R4V+EjicxuB{}aw8@OIHOZwg zG+`jhXiFtaj``V$-!@5AQV|ASCkQDX3!K0Lx*5;yvt42hefDj`%_eJaGf8Z1gwym( z7X4N-ED>s$h+L?GM9C5HW5aGt!C0ekWQ* zvP|K5+u4>lGncis>cvv7W5@pc$6mwyy9IuW&bx&{?{N#eu(LmGk^;XMb}oA*@w_#A zr6{KI`7&V{fqg8gB8a~{*P&*=q9EYIekCSW;QwF2=RXoZ`i#Shi9`3@CP5o+zFqQM z^Cwelzv__F3Z8;eGb+BJezWT$lYY}=96$Zqb?&+U*MraG&1^{G>s{|^K_0LTW>TH1 zjYO^@-K|K8+g)3wAP@ERi0Oh>fRMgO^|rDgZ~K-@+fgiQ(%sMKy&_4!I6&B8+T{jm z9(q90f$Z%i?p;N3a6M1ZI+B!}vJrCljID?GW#_%5QK05PzJ4)Q^;nW=mnuzs3RHgsJ4L>R0t{ipotayxv7Tpfw~C;BX@nFrWap zSM+eBK8^a6`*nbdNgX&4rOwXlsHAxS@nV(RAiL7#Rp$6C5G3e2dhJdXgzK#7Zlo9? zI|YD*P#`Vt-j59Gk9vb5bh><&WLpqVPF2y!W|Y+gDbrkTJr0o=&80=cV(ye7hiljH zt0TSsEmtl7kTO;NVvCi4e^gF&5Y14{(F_TOsG4EXDRo@jTe%q;dQ^PbpSH9l_%qab zsgg{|%Aw51aFvulh{lgKNj0tCZv26dx5~*dU8TyF@7@vit$t~G+>+BQ#3W|#9B0dP zk~`Y=LM%!n&3-^4Z(6EC(#kZ=d5t4~rp-aRGC|wPr8V!(Ctiu?7ver^g9S2*j@t7Y z)B!ceg@^wn_-qS=D4aSL0R*NauYbVR4aO=S7?1-GOH0668E`9PRQ#+)30-n3ymBT6 zHKjpy>kwMdFax3uAuQ#jrIe;Y>Kc65$Uo;Yke2_TmwVl%qB_i3+*5N-|ASOT)PS?* zJMQ^&%qjGD@L9$5-vys<{w?^-ey^@ZjZP^`pJ!Gg5&{vRu<@UxsqBK>Vn2Fthkcy2 z>)Yal|7UXNLM>)DMH<*_YII(x>%D6{@tt(#<;rq3JtF&(j7*6TVntV~2wMVmr>&M8 zl{$E1#BvcdTepyQOfy4eKtN)Khy3ZV;4Fq%FM6we{V-Oxt$AhoDx^bqR6#>M$566^ zNQJp&a){$Sg47a1z&LlP>Sj7_S`v0v5hS157}busu~32IIg+{wsbwYs&3AY zmzeR5nFoVnpf_h?DR7-T#dtAL2VJri7bREZ;emo-C-ukUNSfmKFMO+*SUh3|no8&} zY}B=Vg3|9fYAeAl1K%3KusnbnZ9e*27D4JJ6wSr($2@lt!d|=UcIVWk=PKv~tsM?7 z(_2fq2ZFaZ60Uy>8rnEi%^Gpr7K~G4-azz0dq3GD+BmN!?08%AUKPC8mCBpsyA6~Z zWZ4yXxlJQe)M~0)mn^&`H`IpoE&fSH%|j9*V!9YB@;Ph|DjGC{3YRjEB{4|5Psbu3 zeq8dX4$s{>e>^`MTzStYnX>k*FZ1?cgm(#^7yIeFk(qcunxTD+? zC-=(o748+c>VEtbhrLbO%BI#p$NnUWSJ~qqRXYmay3+-u%AQqRuS4 zzw;)bVS?bPI8vumOXiLoF751I^r`p3wPF2f{WWx!Ywsp`zs!X5uZ%vB1wMs`?Nngt zivQjF>tcKo3$7xkkFO^7Rj-8>kBDTdKrz=y$KEj5bo!T}^LE`DHCT;0A#HPmtjNF- zIN`gL02b_Ftg*r-W#swL?k!%kJ*Df%>=&JPir_(gFLu?aG-`kE_Ob{ujez~(j8t1 z5PohKOa4i5bs7jI8*i3DZC%Gp^54xsHFt^TU2#~)!3AUQ+zO#Ay?C{Ge)5jc3wp2T z`xAnzjF(nf7ln61S$_EbEaUz7iyjGpAqh>8L_tWBTqLrEURqMgw-Q;=k0jneLaLak z)B_nzA}YNjXsRNZ8Ejci=wosyuE$fdz#;<0BYA=-`En!tN+JbKD230FZun8+FiOc$ zo&!f+ITN0wI10vvD1+lDMUqJ9UK9y_w2ic?sK2)CD5LLEw92>WxEZ9+siwYqOl+DW zXhXrfJmwBQ(AMdpwMneQvX~1x*2OE6c>~m7t$3Mwj39J z9*1OzkA%fXo5aTk#mDEyCw9f7mg7^d&g0Px3F)we%w>58^bL1AV17Js#3#Wc3TV=& zFua*ioC}PS7Q*HxfY=kW;%S|i6P1nQ<*V z?Mr-Kh1U;5Ni^RvZMxkRl|ama8b7Bh-9wGULuO&gB8vJ})4GyTsO7HM)hf!$QOK>G zq^=BzGkeOG38lqh%1#&LO&5H>D&^C13Qt7JdKKhjd@9=!5RVZ}?43Ll1aUzp|AJAz zi-%0bLu?Mw;OrGdOt z1xTrc@*pA?={$KvGR_$;jOU3m8kCY68RR9gBr`^hQK=LJFPjcE?hVW^k`IP^qIVsH;mCNYPr5)rzEQ8*fUOv*AP*@OG<4aJ~lK|j1h5QgyQ7#{{guF2!94j`ofbYoiW$*7garwyVw6Zur4eAF4TP!j0g z)zOb%<`RNikNH*g>(8b!uyl2vqWdr0pP$;^kX^a$Er9Fx@VZLWgRM^MeO*5V0S$i1b|u&H7zPrLCftO487EY|K_<|3#%(+`y!I-U5%1=N5$0tn^by!H z%#DeFEBD-FS#|y?W&E!1@{4)(rt7y4Q?*ZR`$0zHO4q5nJygL`Joiy~teNXR*JQEy;9_O?rf!JYFZOgpFwEw4EyA?;7B-jjv?= zZV>rGGb+F0oTXr*gCBSJ;^zKX2o4j}s`+>`O5p<0`$(P#Lm*tGNIyOuD}P!7Nv=}n z6L=i?A)-{R8LAppI+OehTXy|`R9y-87b4xjKU2R?<(}DWW0RWLaLy^Q?1@+oB!5J{xIF4aF+8#J1=O5}>NV!aWVi)O zySf+prUAZI!=RfZ_jV*EjW_JyQS`^WlpgQ$-YiZ@9jDdl=cf~*lD>+Ynr4=>Ur435 zdUU^^?_L@D$c3P&S7~n5%--tx+Qa^PKz_aia-l8+1Z;=H7id**L=}eM2@Dnkh7LEC zgTOWcSZF)$2OH(6+c_pkT>L&Q4ee^RYCSPmiCTCA-0SeGF!N^J?~}l zXj{dyo01d--ucxKyPl@NYWM*^=C0jCT_y6uGebKw>H46%VS0el~973<*A zN_lsr-HwKa;bC=fhHJge%31y_M6b?$A98V;)BV&hhaEe ziRJ-eJz^SuO&f!>HFFkS+BLCpQZjT27(qtG|^GLO)VR) z3xK#M*>~qFmoTg5T?>74C1^^!x6p7_&16 z9nDmc3r-X1D2nX&(T87^iX2K;uco!Tf{iDntBxt+p3laWuj`wxz}d7} z5ceG?VhZUNb=e}NpINfFW>y6ohQL>7PF5sXWZudR6mOd(Vxgs;BGGcO1c5f9PS8G@ ze-H-39#F?%rC_>l9q3_zfy4k5ttlB2#U3mxAT}-vXdX3yvj8L0;j;K=7O}hn3Lwc# zjUjH$P%*}GzyT%y4BttFWS$NBA>aFi`9k^>S7IB%u|li(R<3N7Fs>Q5CRlP(wAF7>Q)Ebr*wm*=FP6D7 zF|CZjuERd1$Em=#qz7u9V^d-Epu;7^*z&2&c#h1&^8A_rG9a^13*}^uQ2m(1AIu)t zgZ5>ITKD?bnuPA1?>v}A>_>P_Jv#R)zb+AHO{RzFC6o z<1eqpWt=GQA9mm}`NZhhUK3F?o^b&^+qLf{;=}v4IB-uGhWQ^{q5n3g|9KYw2m?@{ z2VRtn{yC>X+e+!Ff6VFV|D$sn*f^HOO#fN4$B)+O^~=D9w>iFzr1S45&AYs|Dd-o^ zjCnT(=FpULDs{_J?i*(Um_-=RhSyxsn7lM-zDmEvN1A|G=kfX!ORb^4*!R^f+g9a= zt52Ed`4Elq&aOY1ItEwT8-w)`by=S8o`+uX4kd{?ZqeA=6}`V7;)hs&m~rJ|bWU>? zKU!-+usfLzjp%(kl2fi=oO-fnZw3BVcj_7aD&m`kV46bOsQUSxdG?H>HKh?cyc>Z__QXtM)r+p zDGjM@GS%Yw>ugp9xQX!}?V5CHrtiIeT8u$FeKF`^{+Hh6YKllF8vVS5o3Tm7AdOuO zoCc&yNHui#)73`FfXoE(=(a0@#`k82z`B}a(5#^XPTQ(E!&keL{6g4#L}llW(RLaK zks5=Y#RbQwrh)PKYWG;}GF*HYUE1f|R8@hL?IXJTsY#OciLuSRx@w;N3t9n4#hnUb zuDDcIRUBWVsS;`3x-yQa6!UmZ-+fH?K;-EMZ>agRy_w<0aJ&&2uU;VYgp(0Ev!%U`s}?=hV6_c8phJfE~1QM*);22C@FY(-fQ!@-_Cs6Id^jU0C;7k9Z$^tijCc=SAp+ zrD?T@!S{Io2Dz?vqN!9IRE1=^1aiEA_C~+3hgW#0CY3M?Fl<6_)?`zxJ`Wbj&c;}qflSp_ zx|_94N<1DZY0$D}G#p72-y%l}-3xf$1~AVl8yrsHNQab>OFxoVuEA*Q>Hp5gMdGqt zK^ZTFZgdD%c+}h?N&&1#+j(W^eAp4qOxW)z#f(s@ej50kUbFd#W_Qs}iQ2LE&G7Zt zgc62aj)p#?oP{U}bJ4D*fA)?42Xq=vi?rb~_>gu$*lC#Zb%2d9VnLqRrxuqm>;F23 zBgmS-=j)E}#rWq_Ra)NxHlloxv2Rvf@s`1?8WL z{BP8i|MgQ~7_(4gq5oS_*K0qqd|6{%YXn^Dav^w`S+~?|)*gI9MDganyX%Vp;U^2s zYp!!e(xIvct8Xh!cVg#M$(985N_8e@4Yd@z+U!#uey;j|mNYL_h!8l}IE7lwf8u?6 zGr*%+znCuaQki+a)-lI;X&PDUH`sOVF1121fa)r?+$O*tV1t zq^t0lrrj&Q{qkx7IG(W=S6W6*P^k_5IJs6c3A$deu{VqH*$J=;xRBOkOy)Hc+_F}k z_nAkPQo0uxz*8cW>Ye5liJ|L=1SZw~%4A`>QY3&T-2@+(Qr+X;xc~fzsySTK z>stb!L`phYXkNE2goTs?Yb(8ql$_-6;&K{;bK2l~E&SU&|=!XOjeFixJiNpmPPM4+YFgYR)8BL5~0YjA# z^NoIl0KM5Giv>tsM`Hee4iNlPj2v{lxP6(%9(Jy7*u_H{oo2X}t-NozAKunr_>YQL z_wS?jpD5nF!|8!Y(Ag(SsDr5#+*cLdfz1?|G`RNf^Ryh* zY*+nYGX3i!Zk_@$43Y9*lgzfNONK%O1I9Bdf=6gdQFVLOyOMkeb=n>Vj zBh2!)a)CiVbY~3a9qXBx!FeVtU}IZ(BmBz6aME+GEtqfa@|2%56!=Mv7F?O^>=fZy zS?O`ld%kf^8=u|+_6l{Z>)kfZx9F=uzKn{%yiuiuwxC|nM`=1Mt@8skpt{6R77mSv zh#lf2e`^0eI78a`dm7W#J=;Pi0BbYk5vHyJCA*6EZPR=l9m(VpfWat0$eQ^;!YG?6 zJa!NXfJ99tp?p$wqhDQXzBkWrSjiC zvNr)A4?5Rl1%KP?T}AHUa{D40eJ(i8)W?>OS-7;mcLj&8K+@y%ht&DcPc`syce?V=o=@)l?_5^Qw{cvV>#5L|YbovZ zE5%%M1JBQj-2n>%vTsgjNEQ3p3LocmE-Jn2c^YtM$^8a6D}c$R%_+(%9MJuBMerDC zg77FV7+?vxc<9f_UtTgDLACvss02Fi_N^dhqjxqI0A-(7OoR$d_a{>7EEh(u@A#q$(9Hsgc_{|MYO;otw~N z4{Y)=$_=ou3t^|jSK&&>^eSGD#zwR-<SN*_jM`X;|7>gjtC*P%xUo4vqo2^-M?>^55I=gLH1s->ZmX|771u^JB zO?4bR4q_8EmMviV$-kY>;@ewCC&TIwF@})?0#Do`U2gs5)pgME@4ms$-Fp>(C8c)6 zLJ!jb?jj%K*m-wq8`&ZVSw^d0r3)PP1&jRkUG-aY>i>NZ{u9kfk~V=Ggrg*&KL;W3 zk9g5P;(A;EOKCgT`QINQuofw_=wb_ue5zV6xa#_#o&S)|qXFRV^}^^O*r*}02Q&<% z*d_mB=(5lj0j{jiZ7?d;nYmO+Zs_dQtK~RTm0jUSfNnm##I9#REmlbcr@tFE%iJ#` z3Lj{8W6o3Zv(rd`AJSIp4VAW|(x(ZJX#309`ryiT}GLGVw^Bc)+ zXbu_>=_bXi8&)1b?nc&4yyad4tcIvX6lfTjc;(USNXVOwZn~8orsvB#sSK@#p*XlS zxyyb(dFl>g9#~VvoUob2ICPj*ghxoyBQ3>goU2@tH9u5WRn&Z_srxe&p(^mPu5Hof zBQ6;9kGNj98eHtA4iJV8!6`XKK}4$s5MGYsB`F>>zoB>xVOu}8aWsAxd*idwU+>u8 zng4tLTF8m~MaVVdgdE9@L>4)!2mibC?e`ta)Na=A1?uHtQ4tU{u_wLbJ;?*gG;22< zDFr1Zl3*5!f8iALhai9T+!5}h-pRq#NiY<=ZBvde3b7*qD#-y7BeF6 z1u*vTlkjb5U{d$5;TK}9~qwSYZb7fa}sh;XJH$JzeMgPyJA^q zQ!OqibB@D9MJL=U3lMIYcb(59PZ2tAupSt%N~j<2YPM^iERxnYx|D35&Mwxw`~ITg zwc}jT{#1Rw_=bbQ<2;J{bt`QTdLATf5`M_6x9v#_4rlfkdC))VcS5C7{UlH`%i8{m z{&v^$M&)cAz42LM2KHMfw||bP#(bmWEP*8TfuEV(^s8RIvCwqu8G?vYUCzV@&ldbG z^=vFMid@HV7)ic#vgH^B(+M?po<^E)^j=yq3+wUYD1a3`D`q+>j?HJ_r6f7si+6gj z$kepF>Bl=u0HU1d9Pwk*bjwm%!sVupL9}W~p{6ABFOWy17uWfRn&=o3AOeV0|LH=# zF?u~CJsuQc_yD`*b3FRTx>hnoto*tHhf#TsMx@2u1#gxx65568ZzQwC=52|u`HNxl zrHEp+Fj|X1Rw#M96BGo(Ks0zvnE0I&yg^1RqJhxq{!I7>jdj6sY#cqtlkST4L-qu! zg#!eu5_rIqHL+~=xJ;NZ9uSE)tBaV}>)Mj+4b$VJFycJdl-MR!Wo-t~3QlX>G0e8Z z`twU_hx%V`H=WdDXNt@KF=jyh<@I5VI1(}DBE0eD0kxh1B7m! zTZa4oaDIyR?d43LxlT1Q5p2g(O)D+fnQ!mnn32`78j_^P9rzAOEONdc zP498O5zp6fzKN3ke7=QN6S>&VH1@c_u?QP3-m7esAa{8g8*mH9i0hZ@zZZ_3vDUS) z&VrF=G;FosZEhUI&f%J}!)UJm!@|+zU#T+)^>tkOyp;V8)?jafv_4P4HVX!)fQP zBU=0C-vlWhoSEOfN+zZ^QydGhvIhx`=t`v5t7?TSJd9jEu zY?VEAD{-5{`&fNHM*l-4SK!YDGF6(3Hs<6zobxdN=rZ1Y_dx{`nxHzK%1ZdHQ<5d* zZHw085E8}n3a5{0ySO+?`YMIF-Vgk~MT<_A2&?_X>4#5umiaxFoH7hteh$%_HP=#| z*+ zcgoRM5jQ`Gmnje@JBaV|fr2gPf z{U0K6e%mU19yqbeh-;{_xxsKvkhdVHd2=|0Tq$MZoYQ_RThzFtD%f{uDvHnQvpHqc z{#=E4sU^9I^v8t;tKt;lCtrtFTRpcr+`VPL%swOdct$QMy}vd3#mL-Jxcg-HH;MB< z;K2UPdQvH4+;sB~p4*7$Gs|Z`znp%QeD|*C*UziPBR=*=fD2i@P`0m*i{YXRyXXi! z)tGf84Hc9s257d8F{2A;YCGpNo!C38!yishrvZdcvmc{1;j#yil1czcxkY;&~i-%l!30qN> zQ=!It*sivwW!Yr;`UB8Zxi+B2?s2qyqGL%|%{gBgQr@&C)4W08eOZ0v)#?Wbwt#|{ z8kl(D(3i(D$`v+V0Qk+KFKCALI7#X>elps2tf3zG{-y51<-2Q^QxVH{KTp}svVq9q z*VvM8GV@{?*YxLo5v5J*0I(49SkjW$r&e2}EG)8lm?>%&B-t4|!4)5vekmfYP1V~{ z@PoodpkT~wa!q>fhaOqWNu;}dgzURop|S`WqE&E?R#XE4#HPLCBZj_=yx+u#A^5 z*X=|=u`7BHSL-m|x=t)!B0o>|o{Umo>sjMwuh$D~U_xvEAsh3T*W^!26|NP*RM4^9 zl;0SkV$bAX`&9G;nA^a*U~vLaW(m@1m5h$WF$!$@PV$l{jY3xtYyksG zQt95N&jpTr6u%aAF5ULZ#dRb%B>6@s(Rsvn^7{hlVr~pfi)G?==7t zLJUZ`(D4F;;P~|l2$~~Rf&Bgyq-~PLFC&${IBwen0!h=S>^{lDYsq14u2a%dO9l5( zo2tR)>I^0dioj(`PvpEQF{M&#TyP|?o_(Xur%g@|ni{qfg;h|GQ0`DBV;NTfQ$H*%xVQQsWvJd0)C=8Pq@;4b+LJWUVdfe&P@EWV&g- zgaF>|5+BrCfZ3-}jj}}iob|9lC`hCeKI^)5qNU4X;%j2vJ9$eVXBf#(JIh7I7Wz0+ z>|0w01xzUMN~BVG&%VzWk5cPEq+i*o^2jM)arg#r(U+|cf@%6RDoOp~3MX=fDip^L zH6D&i^r;zohxpHt`mwof5$T9(g;NaKy+f^?xTbsdjKkD$RJej0)6W&jjEVkpx^6gPV>hmZQ8j7@mDn2y|##Jm5_L0ZhRGK z^-X%tlN^8?r3TFp1*!trfN+B9v!1K)1!10JBA6Qoi2WIcKxCcJm9hqwoVLkG?$4}j zA_tGrjmoN`9TkiZAS^YsP0;DX2Zvw?%^xU|!u2Ds6P=-iq!3T;u*VLtkgCurQ=^w) zgy8M(Q6(Gefs{{`2$aSF>grz~$sh*EO!fzq&a8=)UJk+IZ3yTHONuN;--w%gM~6@- zlD0xfxS2?Rgle`NpLp^af7LdL7<>b6)~ga{A>Lhw93+C2j^L__Qhf7sq_5C+*C+c% z7}yl^qyi4f+z=MF_sgPm_9DRHhnubioKIdKc(_y=@ad6h2PdHIq*)kY$GWpx(sgJL ztE0AiQ|q0;m{mUIG?bT9*;OtBB>)_xh_WiMrGTmruK64R1W8gE-WxX2QkoXi!|>4o z))CMOadI^Z9sK*eF%lK(wm^nRAPll5d5VyVoLQ#S7b5b@*|IIN+@dFUh`6fo9+f3g zW>jqI7pf{DQ=@TLs?@TSJSIw{=Z6QW_ zqwggE_yb8_K3JdIuL#zKQiKwy^!F?jG;j4VPSJB5W|^*kh`E1BoBx6n#KHjybeSQw z_=urR+$N-BSV_ye%H2{T+W;7Y2~7Sxf_*&ryi##Czl+T^a3#-U?V+gq94_vz+dc&D}`^dx+YyHco0`R?FE z5-Ckg=e+u0v92}<4Ug0gwHdCU;d!7`TbyhsA0+b-ARzpaI2yv+e1!m-CCUnE$c@Re+AG%L8_+?QU;WDQYwY% zV38{f5#OQhoLF#k>_wb<2$kxO4fR$Pr@{gIpQ^V9i5%c1kVrI= z6iOLN!ZpPuzK$l#S4I>d#fh^VFlg}7;VmX8}ID;h<)s-NDJDbOxqlcA4= zkvV=KwQva@hyy~J3jtT*kyoYCmP$Dz0nvL(FANd&hh$sG_=Hj3q*0c+K0E&*vjTQ8 zBLlL0YANixiVVB|OIeD=sNr+y^P87dJSW~>B7(J1` zpKRq}$Tf}(P@ml*6jI|zLYR>Ou_3slAbB<-dF&tKy8A#}O{{kv!1W$tg9K=h27uT@ zteUJ>V`AB`c&<>$E?ufVuS_U`KUY^uTREO0<{pJTwG%&yP#R?ODlglWpZgjKC>=ti zyQT5mo}hA?Y#lFndtGm+^W+{-u*8$LVE4;HP0n;!Uv}}O`uuRNYsL#7P zAsQUz5*-A}S_kMLtr$K)%uPru0v`ixViYvQuJ!?8>=En!xdUSWskj(WlbVGXD9g)p zqFeD*H6HQ*$KG89wHf$tqQ^o)fRNx`+$FeE+$A`)P^5UV;}E zU4j)Ul;BXLc&T#u{dec=&N(wXdvz|(>}4)<@n$CP^L?IA6;bgiQji07Vja6vT%r|~ zB@6>?CS*Y|uXb%X2K=;X0>lvgBuZHDN~Ah&E-$TIQ5r{dM9V$t0IG`7uVXVxMHsil zTH?5gM$O6VZdDwl9YA_+E=z8Slc8_G66Az81i^5-UjEp39cjIL+LhOYR)LaLHZOM< zR3c8ZSL%z&9Z46siL{3Zf_seAsxk-)$tMbc0ZW9%ev*B(ah`25(>P#Nzq+4QDQRyq zDL%;+wKX>eV1oru_NeUyfF`hD8+5LZ4)xZXGS4t}nN201YvCF;k!FMlHa%)316}x7 z{=FL6PbFctkF5Ep(reS!YCHhDYyZLbZrWT$iMsRB>$3E;J88moWpl$ z#E9Wm?Eb#F4n53((F3NW0K5OVA&kpfUSBPd2n?>mgUk5K6RJUO>Iv{=qX-jNpHs6P zLOB!~xyFV04-Gn-UV1v;=i`*NY)Ej&$V}G9q`|?@3gp|d%^EPtD2Yn5r!C}|mIn#~ zgiVd$XxKkB7YQb5p>b-9a+tdr%_t7I5)@PuW}xHPYVO!Z7S+bDruDm`?Hxxuq)+;1 zOgY{xd=P63F=;7b?;us}FisN>ExFqR<@)TzUNgs86~x839ar*&u1pYGaR__%rIXo2 zKGnb6S5|b%AJ+DPuH!x4hu;GiR|X zaDyR;SZ?U4w$MA zXypzVMh)n#4(Qz7#xM_>Dh`_44qAo}TIUWv=o++L9eng>(1Cf#NpZ;8cE~k+$US$+ zvukK{1_H)HeEtj(Yz+A^4+nKYLnel-!-oUChM%rN{i=uUY=l#^`x!X+`1>X&qv_P+(e1y-86bX$MuMTH=!A|ZL5+Wh{XvjVe zLXCldBO!Wis6h)^Rkphn?ICpBfT^-m+1Qu8uL>zL+`4of)#7pq(7w z4WFqr7zZ9t)>Y5YMnO`D!DN$IN(`g}k5o?>YAg)xQX~cMjv>~d`+kt5>seCR#NcW_ z>+vWX3svc#>1D6k7s;?@xHBQo-9tX6_hNjqfV}RAd{AW$@?sn$JS8a%ZDgKkRm932 zkA)hJlL$lCtH(fwbB$i(J8;5iEO^jhd^C4V!+RoGYdjY&+g3exfCgotXT*i4wvT|B zILJs3!NMs;6WMsD7ewfkwDJghQb4wXo_g_uHpP3{8TNU$3;N5J5+yWSlKeT<7S@C# zn1+*goC4I@mZdFt+`WuieEZzy(aR#$7|M>Gis(}l$Nt5*GO3A z4vM2~RVV*imIv8JlU938Wc?l6cJLpa zSes{=@q#T_VW8oD8{uf^$L@m1EMxu#!=VPV5!ECAl3|T-La7>3Ar&0{S;{2<%! zAuUoNTNk33?$MZYSf(>1OMsV;p~vKn%IPLer?D8)Gq5WjpvD1`3kObPxA)Lfosm2H za7bqexr`w$6AgK(17VmXEoLKC+JTVY{v&OKgQszjuUN1w8sz(d_IP5<=EcFD!@=uG zYTDEd#)xSr@>NO4VSn3iY!Tm}PiJY^Nk!q<0xV&TE%|*Yv9~_y0)j*uN=%vKo{1$p zzyq&P5!pCE_8kC9xWc;Cv0OjLR49=hdMf|)fv*GMR~)1rPG|!qL12+KXppp@=1Bpm z1R7-LK=^5Ex#<)j?O+ojd7^qsIKoEJeoCN*1z3yB7qFDeFqmu2cT-?8uNK?6kEniC zb&!o>2M+XhI2KhQ(-kH`v5n`$i5Bw7_*CHJqF_tEne4#@a1XFt*k=U?F@l4ukG?;$ zH>no_rNJZ0(O;ZlxcJGjZJcYD26=%!dAk~94}BogePFP0&hn2^)^{Dka(>+nt@#e) zRVGbJ1%xB6Gfu(I*92`Zh+d0Q=opU|V+p&~!A1y@K}Zf_lEf7|wud9=quOf51CNSQ zw89A`*8uNsv10>|7ik86C*X+wc3;;kUY@OiYf?#t;MnyS>tWv^xp)Z-!kOgLZn>wV zgGaOR-ywJ=N61z;k(|f zZX&BK9`jX5b%t8T7LS#_Om&n9=U|%Bi+`(pI-K`XpUF<)=VTNqlo=GiQ5)b+;4oYD zmkuhw+^VMIoly#?NYTvEaG^5PFW)x*Y$Gjh`E6rFh(E+qBWycED@rj?D6lkUyJVJM z5WT(pEDG{C+n6`0;Z!RL$=;NPeX1D5^`ulM<$F!y^pCMNFA@JbQzA3Ie zP0K0sHsTL<2V!Rl2p8y}svv(&nhT~Ld!lpHr~&X0&HBt}_iQ$OZzSxkv@r8!%67iV zMVuM$^udlk_}K2U;wQ#>jsN*T>F6IGH`bp{of%42DJNYGkpLDZtpm~Wz*KAf{8n*} zL1KTt6>=6qtq!l^z;jPS{7*Sg3$s6yHF!1eQjct=@3LN$(bL5{j!8^pICxSsP4$8@ z*s1GX;<~ptU>x(%&4J|c*)zdby;=5MhBa9mzE58xs79Eat=WhREuSGGnFS=ArsMzu z&Y}ilZ`JoY-D+p}IKSq2rt)}?jCu@+-Bpj2iloIoIZO8E<5_|qJg%bsg;psdQN!Sh zZnM^)=S_;W&AMVRCTtZK=n-~CGtHkG9zzuy%AgbF;dMH|ppX9!7}ZjJ2T#dSE0zxeRm z@0R5Jc{Z~6ni(dnaW@-g&iuQ~a)6UjqpM5mC1aJ*jp!tGZIMfupY@Xz7HxY6d?YJk zfiG9bD_b>Tbvw+3n0HkUn8e_P(SFVDTF(y4>!b%b20rkvsr&SRBpNAn0#d)lx2065 zw8~?h8_IK=5ABT;DO0sxrhWO;DUMav~tYSl|(GQWF)^y zcY^1R(I3;J$nueLOLd*D_e7WWG~X3inJIaRn@eqja3rbFHsK*dDJJh zXX&S}2wcaEeL~s8wtu4ekW!hG3M54@>*RHrq{6yL*a6LF6D;2De?mmjIV+>Ssnmx$ z<<;989=U!w>!9N9;0LT6L9hG1>HGe3N$33NPk<`UThgeQ2+XSEO0pUb0RH~G&F+>f zY6Zky(if4t=GO6^WNUG&sLIb}rZVDF>mEv`@unOl7&kly%CKT$SC)-#saJJ|PsW<4 zSTp0aw`SITuKRL6IEo7X{7u=o`Wj<(=C1uSCf>(r_8rWQ=e~UJqpR@6ev1R>L#|c! zR%(e7@WJl0A@z}8ac)2a^%k{kJ4nm+<|ExVVD$TOUD*l@8Dkok;DPMmKBIM~W%gE* z@(dwB>~m`Hh>!9T`=*bZcMR3YcDUUE6Jk#y*2h|IovMZ~53Cv+r5 zb`}%m#l<1vF{<+@4TGuX;$q_0F=U+0NXX46sK6)Tw%)MzjdjsMY?8Z}lQ?oUAPHDn zwc^A0vN#jAzU{jYf7xkJUPYsL6@Ka%L^!7vDsFSjc#I&Fn{pCvg|_*Ga?m&6> zMOE4c;&#SCK|W-TZRaEN45NiZ&$rL@yd&mnql0{c?4K+J({9lnFzIS(sZKwyJ)@@m zBH{~>HppyoFECQ9)q41QqL3q`UQOw-xtOkw^bCgofWAawBq|BG7StIjd>pROxt3iN z8`+_f?zHxUOnaZQZO);dV4exCC0>eXRVOg}He#C~Le+l22IMuu*9l2hrz>(N=8aO= z!n>ezIfnZL5HH)@{-WxUy{6#mI@`Ku6*6>I>Uekb$*fDeXxx zt)W}Yaz@{sM~_C-=FZ|zPR-m8bFiw@7u142!xCA*1Vsf(mI*9C>U<93eHu;2+y7KH zzA)17#>%|&W>6NdlH3WsMK@z9E?SdCA>yf<0EY6I{DN}TnX9*nbb#bg-?83Q} zZ87KbX$ktJYz3VDDgxKL3ChlZ(hY5*wax~?3JoBXSS%Tgv0eZ_D$)$lgK?yD${HmF@&BONsRv-{+!8`zOdJL!oh#_3HGpQyM zYMgbr!OI8u#(?lm(H1!=S-xJ<5ZrAv6$OVjx1Xbh(FcZy+L=;IkKbhGW+%{hgd)qz zRU!V_l63W0&9p9jUJ^lj&Vah-cpXuoHjZc}CRm{-r>7C~V`J9o(5$E6+pWR5k1QWa zhaCjUV7}_V={z)mx(*o8N@C9qq7)UNQ+({(q}UXCzylSa&J8jd8>jIEW!neXI4C+| zC$>F}weka|C~z9pcbc%tCAtF$@Oi^YN%$|6K~<@T*~HHEjW(f3D|e(-Ho#p!&SU9g z!2U-%qWd4_m{&|ApWW0X>wKamEC2ljW-JSEVv93@0(KCJiXXUq>jB0Uv3~5tavxgE zLXm!vL}USJR%}R^2eCFE@HUsU2*?F|^qW(Iij_+aP%}p?r&>%g4?u(h0C<3h?qH)E zWbjSw#uM^~cmU31k!}AnI`i^xe5lN9Vpl$5ryBsj5V1>k+>`c%wwM9*4Sq^b8s4*e zLS}s*{cG-z6+UG{TIF{1>a^kd`ZTNJJPL}P{9-+Cy0qm}R^5UAh*aBx*xYs%V+39< zAv`3sCvaa4cTTLW!s;9f4Zz;nMsea^E zy(*QG8vvt7A`>=%iEM&RJdq9?vZ^2Ss32B{ZJ^G74B?gIE7v}1J2u>GQ0hm?Xqsnc zUiqPeDL_SZs{xYO6Q8UzQl$o>)k_zWYnP0Q-^6P#<)fOrp*+L`>hQ(UImQ12^^J$u zTpk$Su2WC#kyIw>%3`VneyAF~Gid)K%QXTycY^riXqRdSU*J%FzyPW6KKpVRcO=IP%9(|??6T?MB9%@1!k3sjA1 z-!dD~abXE*^l0^XPt~yBC9%ZZBnfH)@0N_ghPCf1u=!|7CMsjMP6R27Fmyo_W+y;- zRsAH5OD`Hr<1#}VG((4+q0gLQD4k(!nPD27VP2SF*_mOznz;vIR)W&(uQ+9$FqVvb1F3EQdb~pnt638Gqq!odS1HU z5-Ur0DujkaX>cyIXkJOFK;H#%;b*RFVV>$RFLoC9bcEu2^2}3uabXsV@`3r0U-Ky- z3o(WTQ*t9B&4mZ#vliZCmcrFm3-Q)26t_$Ix-VuPS}b&j8#r0;+FRf`NKrUSrQipd zJf1YQYcX*7%k3KU`CJy|hycDALHW@vKILBYms$+aTnw~W402fv4q6OBE{0|je{AQ)^Hn7sk!@~S9DEbw{HVywjy(q$F=`IL>#yuss$tYdUX<2?dXoIn^ z$y%$G!M)b}8=rs$3D!pojBu6iTccZmLGU;~3skwwO8J77-{f*t%gXz~2RU}j=kCDb zmgp4dgMuB96aw%5U(h=Xyhgx6!5XMY>cPKoy}+kI&e{(@F{*n+fZWmzfmZYt4P=~@7W_r%5QEIzlkal2V9 zD}B%>wKk_|S1q-AP(e@x_#$--YLt5TD&Dr?IKDpUA^O?aM5*=EmF;af-dY#}=!Qdu zWCNeyEX`Yd-Enz@v0K|$u}yVY9SvGtK8|1UUj5?zrD%}vzNz6WKj7E3)hU+;I4R)@kYi&vsUQ^Bg0f zb{C~zn94Q)%w~g1#ioB0TdFqCxUj6j3ogD|7%)W5E8j2?nKkhk2oM=n0dAo1luD1?yo<@J>dmYmD@E z<5YAL&x7Axhh45-e=`n;;*Lfhl?-MbjTwp58tr{z^;{A5?Bh8sj@a+ldNPD$i{$LkSC>$E;sm&Y5eUK7`c z4PTEAkB>e{AFZ_-`?*VRMI8IlH*&Rl8G3`i1#=w?`JC`L{L%1H%lD38I9g%#+MDuj zVmNyKAUS&PeJl@hP4!$zL8n0=iSe+wTO6zIeut z#Ky#~h*Qw(Q_zpN?vp3ymM50VzPqj7(-9}vT3g?VzmI8IbovZa`3^5=ozc8(=X}8R z{j<+=vnqPJr%8R_?vK-F(lO^oU&!e;cUcc9jJ>YCnql{kDS5>h?Y+5&rvuSGoW`|` zKRiCN?oUklU9cvMSP+g{_?EbSXGfjG+xWQXF2w7GZ^eDRSoY3@r~NN>&)MvKXNUtN z%LByA132$rDAYZX`gG3fd%^lLVD;KxZqHjuG(bTn@Y~dd#>*$lbe`n57s3>m)2xB} zu9tA_Oa0s9yPxEkz_6(?KYrUba()rZYrp?ekB4Qz8y#8FV-Ct-Fc5=fSe5Ml%TGctWFK+%+fAt{(Y_Gb}I^ zX{Zl$aYsJEt9Ryzv!n-NTCcV?8KTsQQ>?_-pt7zvV!k~9yHjFDCN6(>q^o;k@|V=D zO{68?O}cT|z1z)4>*ra#q1oDxnVFC(mqclTKPAt5ETM2+cYqDFC)~I!n2%TwN2E3f zPz?pJc6`!<$Ie53+&*A5wU$@49SU@(e^@|dtAiSDQq`?E<@$`QoA_ZR8@uYBl1fEX z))v%k{8Ps*EQsQ`4fXqys6GH5+ge7f4H~+2lLh+f#I}BpTNfoZc2BXTNAf+$Fku@R zD9SQM69wRjG#e0wR^E7(G&!AS)OZ4i#uA1}S?qd1%=4bf0kJhQiU_ud&uqj9ofqlD zL1Z%9%^`myQGZLa_LsGdKjVmY(8v;ekaOG+&DM6UU8mk;m+q{VQHHSZ2~Q^{u#&mj z>|o`9QL2hwKBPR5`@FS*Wh_I$s?qDc$+#)~b@@Tcv@;H>+^YxPqg|K}{)Rs9} zp@`A`ilLW`A*H-&(`xDSt18MCbWtcn&cT)7QoZnd>xMLL{nsM)ec58^yWWga{(Axy zPkz)!%LMIBA>WpHXN!7FXVq|A!#8gS679?MUnd(EY0S+Q&Sjmvt_TDw(df&JqYL%6 zpsnePQ?!+V^URq6O;SckA~i2YGsV7l`q_Z1V?T|Q|6R$& zN?=E1w1GU^Gr9e{x0>gh8f->^IE@`qAo`539^0yEi*89`1$+)NUFQlE@y|ZpF)NKpz{)p}Eo_Vwi#${n&jd z;hM%lE&-{>S1z?lVR4KNm>6?>4D~ALym=#$4R{TrNL9Y1F?Zn zK6(xfLyj%$g{h`@?dk&UF=gMJpP4lN5U74W3buOjz~2Tw=-{0J5lIW>Ac-3Ui9;IE z=9Hr*yJ!v)UhwE#w%qM;(Y!S>)N^Q5FoonnLwp(gC73H$M=e>QOP119gv07QS#c|z zAc3o{AiY3gflCcyX8trS$s$9wX#C~IhR|m3zG}zUKC-Rp8WhvQkT{oD&- zGd>dJR9nhufRU_FP8oyQ`Jc7yHwU0hN?+fkkh{^!NOeZFG7=i2wG7N-h(#=?Gmmd_ zNbOC$V_g;8-t`^JdcUux?cqSdoj7lnf}e_ZO_^a0^`JJHH%blijX)pOzM>QM6)Kvi zb{TpX$dsJn{So8Q#=o9%+L4eCUoL&i@?-`2xTCek+v>jZ3q~zQmWSgyzbynnL-WutX1pDa`#X2#eZnWgi8(xu?Jf=Fn(I8Aci;Ga? z;#dTZh=9+NI42&nCuNW5nx1t6(v`|SNsXQ8qgJmRv*7W_ zC}no0HaXC(x14RvN_^_Vvpk|J!#JDu@z0KxAIZS{vFWRBA|CPd4ob&bO!oWq9kEP) zLkICDOlP>OKzXI1z2${ceXKtHH@c7BX-!$Ym+N%(M7{FQ%+e!t)n$7ZJN;)b()Y|W zJmpLIDX5k44wF3#qu5jdASwad zk@~`Z6qHjhSEr$9FzG+7;s0^O|6h_WFC(+HpZeJU3WkF-z*Y85dkK+DMbesjEmi;3 zTpturi8M{H?-yCqYrQL`xX(RPEO8jbYw_C}%hPZ3nNf*?g3%vdSDJr_BqU`uur6Zj z<`<=YG|}F$HH_xfTHZo@n;*%Rc=C1PO(77;O)Xi!+R=P4SK+&h#cv|+V>Fa4LQDAbU+DTFWrrVTrazq*Ici7wH;r7 z@f#NYu^PDO{bMb3uja?sC&1fA)OzIYWJpaEopPvlG?#Ky5%N~}W`pUB{pWm)G(>j0 zkvJlLOX5d(HhZ?4r<@BpOKa#pS0^RQ*a5tNTZ zgzpKE7NPD%L_U%qOB0M#G!b}jYjQCKtifFN6eo8RgcH@FfAm>#gU%!PY8BN-n9{<3 z;4Ut^2pp{gtuO9Z^kUf779-^US@IR4$1+IQHU7l?7e@uO9r-QI0ixx@1F#@epvkUX zaOgB&97qiq0ll9H+JxAtj2z4Q1C{UY%0|`g$0!?>@I7NA!TT(lv?D6(ZyZ5jzi9PK z1YoZ+86ZmyzITg&5+!%ByR?yRXk9uGOD&~71L3cc)xVbIYlm}6#>SJFqE&D$aL%^h zQ3PaS11pu)q^el<>kKU5mcIZ6mUV)exPFoZ^(Nn#sU1>diMQ8`NYvpm*VX7ap>1fO zHX@n@9g-~&KSMzmn9oGz1mq=RC*4wbd`n45%uL%5WQS${0e1ok1#Scf%c{X@_(06E zrzrzXeLq&LD&^4Islj7TV2(!Mn6ntCghKM)@FhaPk^>Sf=c*R>li&?^$(yy`9H$XK z2$%}+fJ@JN$>`M-0FqSfO7!={V?M`$SgC-V&g@*e1f5PNV(dl;1~3AR{_3N4 z*j207*iUV`zXkPx`QG-D&5kNj%RYw*Eh4p7fy{L|_U15&~<7n7k?|yB9PiPQJ+oh@}x zk{s~9EW*FhpiqtS*QX2;0>HoD#hOuWpg-Iv@nX+;E%eLrs8@Q3oi%hcY0!ui*Io+w zdA_RI0(11u+#M;VuLHS=Icbn&m(K2m-C+AQ49xLqlr{xZmWgfB&XQ0J?+N4`V(#50 zOGQeM)`+>-7$5TEGBDL1|IpeWBz5XY8>EWVm@9x=HCRA-`d1e7;E#f=rA>-dkFP5h z@zs<4K(Z3~$Cr`Fqu$o~mJ3$^4ICH~k)GTud;ma3-hT)F0Y5a4WN?kMy?o?c#&=ov zFQ3Wo(8(os%|M3cuj;?uryVh8=QkpX^LSuz zAHDPmU&96l;~>iVW{w}y!>`r}{kq}f`)c&B@7_(pj`vV{!%WK?nt_hTH519Vm^WQ^ zq@z|{KXn7xqYAi>y2eo-)ij_BI}8yXo=Wme57>v(b2q6`2FfK=rPN*h3SX*eS#Dp2 zD}IpBQBJ~aKyn5lm`9uE$5a^2J%lsVS^?)_ZTN#(4;?5zEDal7H@^LQyfJ2V&*(?zm%k^W z(|5?$)Q^w9|9+38=)wVwZ~B=2oyKeb(V`Rz(y`k*TZC?qF}_@OMVUxLIU@goI*vOtn}TB-_WdUtB*O(=ysY!NT& zZPZH^SwT+gXpe?SitK3mnP@m4ol+<@IVeVs9;O%%y&unbCo%ozjRxt^brs;X7eLi? zVA}Nbfk^84Q-Bbf4D3hVT7Wn27flWe6RHm@FC>&g5a30_C5mGx+o97~q`z#Oe?^Se zK8!9K8XON@IfXj8N5N)L;4{>7SxUzqf;-ya!RKhvY^c)hK0)wl+*`32Fh1cEclZvs zUO;<7E`8J@j=*w0{@H$}>%iurdD-O-*5ZI2EKMPaOBVY2Zb_Y*(dX;n{S z)%cReEAYnHkZ+e_KHen4@nhz3DY;81(olsF>*VAHqHiIDSLILzyhs8Gm*e)Nv;w?h zbQ0+`xQ$QWlZ~XShXjq61csulhe#%|DP&K{S59LvXeb#nS?NZh2Acv0VP?&uG79j} zJ)|erWK-!NhkYo1WeUxRc4~XFD8EvgES2poeL7f`6jSdoaEbv(Jxg)a*N=qWxW8m> zC%gf|NoC1LK`~Yp(0>8Q^kyiwIk`*9@>5UBuZ83f6^bNRhW0y`8?UF5Voq!cMvy7p5KdBOCgb}-8eY}H z2)Loii3GqrF_%v&WZ?q@sizs81$a9&VTadHlBMw2t}SaxwG5?+CnGI%nNuO} zVtXk620DR@pTMHY@n6Gl^q?cp$ECm%aPrQI^cD}wmj{OG=;UN>SSIu>#xd>!7y)K~ z6CW*31q2nKXhXIM-n;0Nj-+kfwp(m^L}@QY4kF$j?5m81lGhdBr4~TP{F1;bU<`^- zf-SpcE=CAvd{mi;p_9m4ir>+}gy_5@*&s0T%Z;mmt_PBPEIW;70%Sqj$usiOgrLYs zx*bCICD)ig{@@QC&?XhqMjVuWKlSeV9e0x=K@yW*M%E0~l&EweeVPlUe+Pz>g2ajw z-$2Ehas+Hp3vBVD2&C^)q!Bum4R(L@jXK2$5E6*_FoF=tf##7g+#M)J`Y8;=D5mmc z{G*Hm6}~kXgVK!Tk~cg6tAd5tz*{yj8d*ZyOlUD4tSB-iNDjt7@|L9V?Qmrxct&1$ zgqE)oMX{f=&Xpg1TLCqyDx+a9%bQX2KoC=?CcoGu2C2TO>@5SIBCR}QZ{sT-EFZ16V}S5f~u!%M1`)TcIJ+UT|UxF_%1_b{gltfpz_VR z9I*wcXUGLCSxA9_7O4J(+`C1rK?wt_?E;m9-%-#CZB^$B74unlW&CB+w!B0Z$52jt zYlGR;X)32r(hAM@uPCDeg_XOb)W5a*C{&3m6wra9XWhU=Vc!>uSk7+HUN7(AR9FZsUD<@8sIDJ2kON-c!Ul#=npff;}WYbeLDPPZaA=GIQ+rTOXk{{+aw9Z zs#GjlA5-sed{<&(E<^N$Z+K)6saQ?$V~OP4r*FJENP0(uwnkNwM{}y7B?dBO%pDm7 zx|ND!*>hua3jFm#W1xny0QK>daK5%9Xs3`&*PUsSJKl8kutkXf(<-!=S*CxL@5=J& z;KZZhT;tKB@tHr$bE^}67ZYH~@W`~umE`exGP$o_Prr=vYzirTv7LN(#D_;zX2K@_vQtdQj7=P;)83^9$G8+-SeFQ@>I@VLHbYdVGyyP7@~S_Gg#K|zx;U}5b4Ei5wB z;HCF~K7WJOl*`m)5w4dhc(i22*O7%2pyCJ5h*er#|z#yc)GF#>MZ<0*jcy9mrBtZ&KO}Q{IL{N4DH z2jNzx6II@l=Gf4o2DM25eX+z7d%Vng%FJNgs3Emtr-?w*=6D{2I2A%1@s_O?Z=`;c z?F1s853#Jp<2->_)Z(2(cLZzkEJY}YMK<+)aMrbW`==X3J~+!0$bP{NQ7VnS5e{L5 zGs$N#h!9pyRaBpv(=?(EdEczYM)5Qi5`UWtu}g&#M;JVr+FqO7Vb6yorb3_OL&YEM zafnb{2yYtvJMjFsk^6BC<+Jnj5lwzRE+Bs=hyB22V}(9{W0-tDu($Z6=YR|XQG7sl zjE!tAAY}*x&;6(F0REHT&Itr1%5}H%A^Fz{%^ds1g-iXHRXY zQ7-b!fz{LM@fYAhXHuv#FQEZnJIj*+_3ajsU7`~b&<14wKQ#c51e|n0j?mSw+_&D) z7F2%b0ocJpY)%Qa(ODd;;oWup1{xxAct4@uC)e+=>y+SlfNURe z^t9Gb>&%Ak;|YfS*c#T4y%qW%=x82%N;o_Z+4oc6$cL7TY$ZR+ewYo}^D{U&wI;#r zspH6zKM63eK?5oWR~|Sa_|Z-Qo(=Zmfe!?d3JJ!6tfzLuPR`XFaj1g#$sch~VOw;t zJ?`3TzNoFt#*JN;eKj#s$Ut!y%^t(F_18$qKf=ogJ~*d&a2=aI_~myeQHuNmV)=E5 zPywmY$Ks*_q71)pe)*6auB|~8<5CemCxN18>8qK*2bey4|dR?X@^9aE7I5dn$_{kmOUO8Vb(dKnGqaoy$fz_XTqr z=4-q$-O zA4K0#k1&yF;y1+>Tl$fZPD$`e(%eMbJH^b@c#^{0+{z{Mqw9#5 zl%Jf8rXk5qLQ)Gn*azj=EG2&;4_UGj2m`PWHEUFI=}hSFQzNL^P<596UoYCuqMPY& zJs)26{3=mE=y4{CI+GtT>qU09aZB;mT1Dm8wyX@li7<7@Y2B-xepTHv)ml;;Z$rXj z%O^pS_KGsc#i{!MV#=3LLqp2#0!96)`ulNV3!?Bfv^YiDYi&##^)P3&0rMv@wyy8+ zxN3Ri@0ZcKSXO(b>+)zcIWM!5A%k}&m#Xfm|JsJqk5w05Lqi5lBX`D*gx9U$z4sN< z2}Vdtfr?PoU+z2~HLC`$Vk5?oq6uFxHp&3mH#$)|W2G+Tu9W`UIl+pK^2cdhGdsLr z-|&+Ar2lzMbxRbQ-s!MmI{)EwH;9-z7VGpfTs?kYLpt58+L&5Jclb9YK@u-Z$*mXX z0Y-Pkv9OV3$DJ@R5h>8vCtZj|a_Xv+%{ipO`EXD2!Fq38DeDf|h*-AqW?Y&xSOa5s zIjfpTvkN4}?hWxO9h@dz9f=PTeIp7J)ktfqj~#qC>K9jhR-`*o5Xop{9M86a)>j;n zCN6vbjG;HbTT8NB$PSev7Y-#3YZ<-<0T{q+NP>yp!7(;8`u&$&0?IHQE$LZ|s@^uo zy@NN(Mzd+Jsdc%;4j8z6X46sg+q^aY(k5A^k%bxw3`6dEmaXS$6^aQ0c5?a;C@Hg? zY+ZzdI`o&<{J9#pUEs)NX?w_A_V9#_7^cI(l~VuBWUQ;C%awtL3wR5mp}<2Ca<8>iC!6r*Scgk~e=(l3AhsBHIMhY3{+F zS!qn3WmYI}@lZFj>h2-5Xy{xp@yL8{KbT?FEB{$LA+y>|Gs9-4^Rr52W{vMc`oj%* zE1m0%+K}!{+q2Ha-}{+$FO^=|<0~x9g0kvSSILgB57y;;Sq-lY6K@~0E7;`fWHr9_ zPH++XV3XmV)%33AJ%<=6@1ZcX`33p0t7>q~MjowHzMTh``%D={=XFbE=@Fkldy5%* zwzVeeSodI$$9Vp_t&F5r_Z?45KXaS%Xi#Nv?zqwFqgH04+>_@8f~Gd{sEFkSpCI-_ zI$gx3$47v#;^6qw_|0kPf#%6G1_gGqV3Lo>%_5I}mqXT|_W)Hyi zFbbAz2@uV$CJ%;Nvokx^8fEucx11s?a~#RlGy7RwzoAr<&0(*yE4Zb_5GJ{sd9~St zGC^laZj6r^7MF%(hMuMd-9eN;mWJ;WSJ5rNou%B30%XMe(=w@Zow-DpN3~l=)8DN+ z^9wQ*XhA^#V@LhJvCNPETTp1b1g|fMj``mS3SlJjd^*t5{{`w|l0hKN9PWqUR|6tg znDhR7Q0Rp0jN;d*085i0@GRf|Cn&74`||V^0X^B$e}cl=wGZllLGnuuwevA1x0@_? zYhN4v6n{^Z4ygYV6msh4|G|>JiHqXD3ko}$_TuhQ*0R0**>o2an$68)wz!jH@Oz7Co9io57?dPCH+rO81cc^EVcU`Sh>Aiij1X>CKmC3SY}4mSg-oV zTY#WDE=bR#{)@~2VI%g-=sC~>BypJ_N=?vY5m3=N2aBPx4Un{8NC z0txkFNXP?QSgY{>d|k-p90>#)`)D_HpmBHus(9?6qER>(S2KI^tta1r2CRYWnNAVq z>yZH-`LhH>auId8&Y-}9vqbBOBHFf*L6K)?Ne*Pi08z>TjwzqGF8Lycl#xEE&a)Ih z$vMg`oniSqmN|5ynDxiVu=207SCM2TY(U)+HO6zFNRf`Ev|9xrB>XcU12V zn#Gq53d{Fuf$B$)tDAEk9=rQ-NhG7ypbb0VQWl78L+!sSI`*gCl3u~@(( zR#&RdBBDVd>bxR5eog$n*^J=>v!+yt+T_)$ID@LGIvuV5t&$RKlWjeBS|n2v`*SIZ zJerY{A}oGrWnMyyg8Y?WjUQSxbi+tWVsB^34EyJ37NEM>Pfsx$SEL!3PxpUU1o>Y?m?+)BEP2VxA!^Uyx%Y_a~qo^G8P0o-*tpiOfYZEzY7I%>UdX~ zQczmNnp;$v?YL^yCR$7rnQ_`43%Gskv}nk=s&+Sg|6p+TpuwHu?ohN)oIr7R_u}rwgBMz?6licL+Cs5Xin~Lx z;ts`~w!q2zzFW`iz0cg4d*}ReXEON*o>}YpuJwG^_tP~$k$qKPrds8sKeRA|de_x5 z5!3wQ{W15jaMi$d-Uad)`tfR)5c*YhM4GsE>=`-0_u~eYIk5vmIBi-z(9rVHEbF8c zdUAC*7rEHvM6z$%&lax{?tw{Zv*U&6;*Jrxc>lZPmTB+iJqftqR5;%CzM4hNIXvJ8 zTb-SGf)xW+g%*i?ytiPJAkE zNRW8&0<*ISo$6{Q>Z`P6R;v^i#DPy!!I_1?9tRs<7AH(Jjz|8ehg$0DV-888kY9>^ zzjTLtOy=+=v-s_RM)Ie$QYztl`nQ9Ad^JfQgEOxP-VXVp_xOHWG-i6YHRzii0~k#G zOjC;SXGBt|FPYlPj6af`?r8T&R8o^joTX^g&lR5c10SzGOSn=+3=!-Fj8>4fR1&Ki zU~8b-eI*B=3(eCB!7p%-XQ=LRFVRUM&T%v;Uz>I^crCv9@eK{4WwJK;bEUoNPop2d zW|~GnSNo0pH2eK)wjEEX1g`3=rC&7H&wVNL+VsF$;Ky8NaznkuxwC_M(SltDRs-T{lL*Q`t61tyous2DG2(yLU@uEPF|@(FakAD4*bq+>6FuTn8aMFy%tl&1qX-7pLwSD- zf+nw@%OhVJQF+sm(8p@6O{W|EC_ymV`hSZ5oT@M%Yx_I?bLhSLxBs6!+fDM~e-Z>n zda8||L!f^%FaDDtQ0p(J4I6*w)S8|C0j(79J>l5y9Xl;nIr>9|VS6!1tG0vDtm}Vt z4xt1AYiZ@*&Y}MrFQj>uA2tp->EIcEPMwO7dd_gDL;DNj9s5{8{4dnuP!ro@6Uq?p z87Y^g%T9~`(K!?>D=U`-*g{6Ct+1zh;jP8Kf9k)^(ma*Ck@%m3qjUU@Zg-Ff?q9n_ znXbR~%1Wz$?N>G)wMbvx{6}opUpe>A=n;R%>i#zf(f{PgBc&%Q>wDCZ@*g-J@fWh% z|B6r`WE#nqh=fop*O&cQ9FKov$)M_r`uRVOybq>B4OKrH|8eA@gtq_r{?brm&B|YO zMf11N{(rHq9(GG;bGABwY$dIPkXMz#yG4s+5$*X7B-mhP|Zrurhg@ooymfh$iaX%T^k?OSC!aSv4)XlNX$ksV07iL;4>w zz!9jxWLNZpe+f+fucG$Aie?d0ec@QR|tgtpn5BzEhIXC#7j*6D)*no{w`p_;(6f)F9JaIJj$~Yi#6a zY-E1{hhhsk$a{f({=+iD)4}NGgJb)&Dht#m8Pi=32%S z==ov2Wm|TY%LuTnor4hclZ$ItNtoMx(h*}+a5u1mjcc~;MUMAQ!1?pKr3kAvk)ZuA zHGsSA#`mmMn_4Piy6n6q9VZd8ydC?*Dj$6o-tL_GQGR2|{X%Ch>hXW*m{MS_i*Y$p z7Ze$ z5*hK|t}_&4z{F?-Z2e<>Z~nc@5}&;tVENZBd(QZOx68g5`c9#jaM$8HjH<nMh~Y^@KdOpOM!;*o9>CthA*x5bUu79@BtE=~#S zbOMxpS4NPv?tr@{x67Lv;#Q%&Xu!!`2r0Ga4RM+Ile>vNoB(CksdpZjBxQLa&{0L2 zkcFqQRDlGp_K#m4jPwo1Q2I8R`hV9EdC$-Kx-2)YrK68FNIB8pEDDPp%zz($(E zz-ED!AxGCw>%UIySSW;o+~5jy&z(WIz7ctiWNCb8HX`Mmj-^WFv`J-rJJOG0&KCsJ z53&~3YpLWdleJ`Xk5St{jxgLUz|C&W0SvNKeENl5QMCFXgPWcAX{)cQX*n>>qri!5 zseJ8(U%8@&I(PLYQveg8%6r@Q+X3o*H)uWLGb z@;p^LAv`!HA|E7iPFW%2MyHN#ar5!Lur~!#BEzB1MtRL)GN0P&R^NUaEOHdU;{(bL zS8=P2s(3jl$H?Nc@jU+Wfpwtucb(%j@7@Sc1<43IcPV#BcIb=~M#7NT%SrCRdn4-X zP(sA{Fb88zAcTJ?-X+_^KSCg>_ECb>kbn!~P{_eO;h`Ltzh$_9ovjAdBKq$3oBSMG z^WvGGjPafi3;K&GH7qBbS4pj?W;8p;#M>_~ycs@=Z{Gb|z39Dl4NPwR^#7<9SJLPp z<3&6b$2I{wY$RmRQ!!>>C~T z80VkG=igj41eyU_Il9PynsXqSY(!Boy7&M6g@jT(?my&?=RlT!XZvjj|25}Civ8PL z`z8C`Tg_KfrE00l|I9g5nNFsTgdb*W0>vVzDKi)hYpuotRV%L8el*w$clx~Wbu~%y zJr?@>&YNSZCE$P8W1q?H?sIRN{%y`VU9KT!`dvBq_k{#%&dC+7cgQH3kg@rfIcF;O zrp3~E>F+t`>BpbTAO@1Z<{Ymb{8WtGyVjP=pL3#$nUX2|I+FIsvHyxW_^;-iZ&MWX zesLD3*F?d-L=NC^5OWza9E*E*HT+oO#v+n{8EzR3G>grTA@*d=M-VE+=0_i2UXQ;V z3}HfQZzj#H$Ku3eF+?4WWaTIFM(iS!p=V{tSBx_b3@LmN(ZaZ3xIQpU!!W-c=eykh ztjFTEo;aInC(&?3Y`?b&Wh`%hZN0>ok{x`txAQ&>#J-D+A{i|9w>fPfejJLWBcFSZ zTNWi1qvy0&oMrc6uOysaETh0E*T0k;({@b<#)G6yd6)BV7ZO>1L^tJfp>csQlE68s z@yd1($3bm3z^RYQcd;c`&j(LXmNZa@5BAbm zAWpwZYR>oP(U+56%3Vq~8~>S4%Ja>evVlc(8WcdIAJwgYFFy4q6Ar@TM&H)tYTTUa zPy(VgE84OCLIwY5IPGn`ibnLte=R;67h?JzPx=4UBKWC!HV{}; zDMiMiO>vHTYai|myVai_`U`VhPLHbJ;#^R2QvNmP1jW_&t;Rgh)KimA`ZTBm&Aps= zu>bnxD@^Ea>e1@q@Cvn)&VdJsT`B59f~WK$zjsA|r&SNd!s>>p`|f57ECGD@>b}jM zaoui$f8#byHiRlRl_9=$*A%j>teum(luanWxU^Ao&XSR<*!F-E9?g!#7ANf6^rX1g zo}+iiuj6*;&%o8UUp_bI<~F9$CwwL;3!-!^!dEz%)?e8toxm6s>e^m@Lg6z^Dgypm zqWJ9Vs7`S7601ub^X(vkukpW700a8=wE-XS6F^8RFGb;B6u=~)lGfj6c^Je z-|lXY!(l{(XsV50iE}H%1~DGrLF&ap%46Z=*1DKuj50!+<*M`tT9D%UPWJTL=!^(D zWSd3I0o`H9wrAFkU~D^H_M@mXe!7YWn|?9+*C)y@lf9V>n=;(w6Iulp;ZTEifX35Q z6~X%aK6n4t)WZ~W45z$D&thwd%rrfxZshp@ww-Kznkrn*g&CW%Y{H+z<8_>6k)L)O zDe-s_8~n77di=jVrb#4ig4=M%^5Omru!v#vxhkP4Pzaq>p_Q*4Y>Sr(eav4 zB?U>x$i`;d5B!0@jU}-gO_kFyAqtx6T@mYe$^JkEdvt7$CR*Io8+j&r6zfAuhKM8= z#7S@pQWxBKH{Bl1=sp3FaFmwdWKW%Rvy`Aiq{$+B zrnBUkCeh+l)yf~p3dd#X6*M*2=Vb^aEW#NUIG0RxtnkvZdeS`U;!JX6&~r|lp7;&} zsNjHpJlhzS1&dg1SR=*jlWt^{GnUrV4P{E)ttb2vrp73)Mfyz-2W_gV6>=4CAgdmr zMmHjE91e6$!3-O*>Di)9hgML#xu+K)C>4OJ^X*CS^%sqmuE$om~YAt^@tGCK!9E0d$ zl~kEA8v21(UO;C6#tDytMx< zQSDAs^Dr_hEQcDl=6pi1Kg+}I<Bu)<4MM+PVM0mO9>jA29?lgKdzOW??`$X^KsT z(V(qJ5T9!<)KBt^*d`a<`v?3Zp9>Lrr zEN5ct#c#olj3v^zW~*pG?vztOk#K;7m=Bf^Opu>Svxnqt{ms`u%&Y|WL-vcOM4DD# zAAWujTXHh_nw#z|%~YZWC7QFKP&NrnV|0pim6S!dYt;Ha^6K&hk##}y>T@KoyoI8C z4zEwcxb?~hfvOtrIfqXC&N0eWa^s2sEQ5$XtNY@7L>#6sg0HiJSTT#ao?K-nz z7(ywknguulyy4%&qJSAP)2P_}bVHtTpm7;)V}>nHyEn8)`9cmSjaEbV)63|GIi(>c z$b}rPvq4zZ=JQ$J*l&UsRbl$p1!~_{UvSc5U+bu*h6Qt`IIQR~Q_e|}Tp5{TM92gE zQ70Zf7nWTOI+LH{?PYK~eIV^O*r?Zri@VKiyF1DiU(XA@uYYE_1+WIHN`X~Hu&{@+ z5)tiydMVsOpv?}W43>V7tCkXfEZ2+zw1^jS(`V%tivip6E|fAQLvZmwfi&FC3 zpVg+Pf!ysn>1kL;jHDKibBkB{3{Ws6blVYbwtj1OeddE8HE@lb@yScgX{x?I+~ z1p8w~Zn?DjGk3~|W^DtKE^)LjUTAj4gtG9fR<4gpxsqdAGf+jO>!-PU{UPz> z)Wa1S$Dqf2bp`a)1OSVo<6p=zy_k#9oP=?<<$p} zU||GCayzuASQBaEqvD6F+YWedCqpOtS|%;&9is&<>l;-a+!mOpPL$72Vx~C-d7+d5 ziYz~Bhc~t9mM;~JpDIPXJkyCoM8ttv6-Akv+5v7FxKr%_MGI&XZBAz#^r+rsgeggC z_xTVI(r}W~#Dq zSIlVE%Nk(D02#?EF;_M!oA)v=&ZYUwL2{Is1e>!-XR<$)y{R1#ml$A?Dv!v;v})O6 zX=Y=(Cjx!zc89acX&9<9KNXQuKVe$NbQo5^@8rUv*gsiws1*MBNhUDH?ol zw?>XzrHgtqD&=$5D$UkL+77CY@=qFn$gkL60&$kblP?m1CKvEo;E3Z;>%{q1f`x2mn}$$^Hs zNqy;aaa^6nS+gfNjU;)R6inKIxK2vAwe0{qcgNCkU-yBSZ?+&F3ut9TWK27AAhxU! zZ;WPvp>k6Rx)E;G3BdC@k0%A>`&rZ1DU^!sy`hH2w-Z<3O>}P5TjlzYq$dUF3W(VF zGC?Lxrr!7uqU9_`<>EvU;j>Z=vCO--<(P&Bv?L!LB8>l{Q;c)8zg0z{R%A{9s8g4M zu)KN&+;1r^h2tvU!(OKIR;VE`khHc!4;sMvi>eg^Ttpb)vv4&lFW6NkT}A`@wUjO^ z3|lh-Lqx-3MaiBH=vf)zuE&eQSp=mCn|((rf4hVV@M7eI>FW3C1RAE{lhz@!a@#Od z+q|pCPB6^isGNM4I^_Z%3Z^k8HRl^(p$4{XW(^lfvhx{KN*MAbgPBrU9!Jk8eh5IH zolR9%TT4d#@w;;!-1yOt0>@9!2hrlSCvgl<>ZVCBcYIx+`-K&k;eeFom1(WFS+TK6 zlIp|!t;^(UVBtdT;1OO`K<0aK4sCoTB_3YzHXNJPUP*)ulr)V&`$TPV7hpZW{A|4b z8WVyf$ILE?v0Mez=o@sezLIz-0lNj@+WwGfXwQh!RdQQZouUmYV+*{P#))B*m#{F@ zv5#`~^f}pi7Z~O#P-{o;Xu!=|x?7)~i;2zC9~-=`Rn?9&4>yWK;#8#ot1xS|>C0=H zoYSF{nGlwGR{wX|%qi)qUX;F zS49EZEQ;F~a=&fVdn~$iCL?qAG)Ob~f; z`BpS#vg$iUbkM{WWbD^|-VM93>3EKr|4q)6CcEp_&N)EdoY6<7O-F4- zL@Qpw91Jv=k~4KoHsZMgL zilR}E*ZrAb=bGetFr5lIpA0-DrE?e}bD5INeIjy4jPv!))$rJ}kZG#ODa?Epo_rYZ z#IPLoq(aiPP6+Q34&90j-%D*_$wC4gODx-uQ}Rh;x~4OqJil)ges|&pub*;p<-;h5 zMrlKaY+Po1m)Mtb1aAev5SWkz9hQg0xYyE@pXuD$;gv(eX-KcAbt~2{3=bIZyl4#m8m7=x(gmM9gv==!-;CS(TOPfiv65l0pqJST8>5T9(mQA_YxR%L`moHq{{4*tL2tj%& zpwFM?pQ8h9U|1(yvjVwzhwiIbd8?4NRUA}w|NSbAW{p5{jmT_`By~ zbH7HA++iLDd@-{8+yfj=%bu$G1D3D~!dvI1+2EJl5H#Bm3f&ON+rX{Ov@{kA*Jj_3W_;1W

    }VUS5R*{(tL;gUiYHejgZ`pqS+zK z0hvEo05vSu^E+ijxn07{c3(^GrJ3ysBzMH+0yV;b;7Q6gm$6jWy#mSoBC~x+^1PD; z$Y2%IP-^S-=^h>Reu?DIdb6J~p$p?v8yc&a+?D`lS{VE4QV{LxxytItc_8XSq@nF# zc=LmlKVc7oQ|tTemM51qE7y2O)bG#OpY1`QUp- z@$F3L<+<1LSs?z{k?Sdz`H9?>yLy6m#m#dCR=mxVT3F7!hdDmgJ-wS0t5UDBNT}fId+YL9t!ZZ)S-$G1A~S3lwH?pR<1jzd!KuUw9AgVk}zXdmshW4pCq@q}WfJ%pX%9)VHt zi~d!>RM^>V9^PgP`S?rw4Dj1!N~b zKi|R2@AN%N%MlZS_H{-cQqVhRja$k4K}1WQ&!y7!B~v`g77!I91h;o zB0jVkO#d+w=%GoP;6(CufI_!2w^3VyU}BQVQK7;SoRAc#iv_HXa*tc3$PbYZqJT0(T)2ZX=lRQPa z+=hQfU&6assXZ-7@I-lGF-Ws6v5^50ZEi=mMeYX|7$F%Vv8k1=u#;iw#2S-E$Y4i$ zx^sM<^MrCY@A40Gf4#Y>=xzg0R`Pbiv~j9?X%dDjaqNq5>LMpkix6c*H*`>0v#jWB zW#?V1H0^Eo{MS~C__iQ;M6J~`&QP)l!ekL_Ks?JAw7oYp?3!I5xABi#Ku&s(PLN_H zyc?uOG-(?n+fpn2HfixKQzAM0Z4b4E37j#O=3uxdnzl1m{egugstl7_EzsR+C=!!T znUeCt-6qCRtaB{a%H$@Qh-9)!Rs+q@y|bFs8~=5`W`6;no}sOiVyD+In?03jA6p+4 zbRyMx2KPrGM|JZ)#6ylyRW6lRQpUz3xpC1Ghd-VDLn5_>rBfNR+EfQFXF~mmI|<2A z76TS#hVxFcoD{_tIEp5|ACwU5(V^z$?7&3Lanlq}NZ0BJCMT(u?n}Ly%x_e|82i`} zA8B-(-$|}k?wBk$EG8cp^xkuaN_@cqOqx>lx*L`YLSepr1H<9TrtWlm4Dp&fY-_jZtvzTDSslDQ~SX>K>@q-hrXEzOD1WpE}LyG zvtrpCF>n6iF4(c>sTufZ)cwZ^*2Mb1R_}1cDES=6ekuFkB%$YATAqw4F z)H+=F3?z-E5aIjb1(?ZwHrc#e!`I-WskjJwr|&MF-65?4lRFG^XhhCmybcJZPfOlx zW{?_l1hXO)dEV)aC73tUh_>=2*~7pboBp6D_0p0UzAjwdXX78|b|i0l)OklE^zP>L zs{Tw=^MiGI8Jfm1WrWsnUY+!y<2#T8led92QV3iHzSjZLo9-2L;i4seut(L5)Ur14 zt+b8^E0uUJf${zwDSENsbOHw93j=WlzQ{5gO{~Kk%SI8~FX|0+X&I5^e0hBJiiTTp z3%q0`=6tCf%yJ2ekyuM@BC3_Fj4~S!C%pnh<2`P=Q50*|8y7awZ6YyAJk|^ozxVq| zZXpuQ9vq(qkdpx0Hhb@tmzTv80yL+>6p|0q{=9v}F~fldO|m39{W1wf=-zuUQ}H}Y5XmqSIt9<|!$W1Q)wZi@ z4lvQW1SMTMbjRLKU^t9OC4SKOV7nq6Ly$8BrZPBXBf*y^fzd-LyU!|*b>ptfELrMf zI|-3w@+N!A`ZESGHT&mK%b^A}AkGZWNfC+Firw2}&J4=d6lWXkxG1gZDC!(fn5?@~}?%T`xe_+>Wb3`eRO68;vo|B3ipON{>JA;$x;Bog1sQ zrG+b#R;~iI5k|vS#@-Mkg z2F^cjuQM0l2zAY9RT8+o5#FWRL~SU0HOa>cT7GzaW^6LeZR3}v8aa9A-}61>)U+{3 zdXcrK?|eQ=3ucVuLj3wDO8rK%;?JgLDgNK2jw}!UCw<2wKU;PxMgH&{|8AZKXugod zx@(uSZ|q%LO!dUkTK)^#L7#MKn3{XMZ7eu@FUe5l6(X7@9mD9%?Q19)yt8$|VX3r< z7~qhCW$KInSZcHTZQ1$?cl|Lt?F)NuWI=bNqQsMdQMZgz8m?WkKEc=y=wOjGNjxgc z=G)iVzUzm}oXwI}z#m#HzzfMGH~Vu-f#qM-({&8HVYRs%8(g#cFC8mNiO;LP5g(Wq zl7*a!$4v4;q7r1*e!Dbmh<1B|mCPYcr-%69K-(0-K>l+qFYTWI5_~1uWvQhX7^KQV92QLAS7| z<611d=X`1}VzJ`lxas*7jNA7UQmTGOn>4k&*rQi#|9ajf>Xaf?H3w^eM+)R%G_OV? zI2s=aq%jDh9uw-I5$Q;`zktd6cQ9*2slQ9za|FW6r2XJYr~rQI;dmn>8F$0Z0Q!pJ z-FkVQSk?!S~J0sadg|jo329Wu1o!Fi)uxlO~~O@AAsZ;ngwzm|>Bn)D3+dWN5L6;zEObZIwts`Rq8PS3sfLLHi zz989ojj$G))!WFnadcpRxGAQB1(AZ4paRgVcfnX;X9Lym9$EQEOQrRDHT72Te$y|D z(nrI#O^MQmMJv}n0@k)`mqp2aj7DBys!3H_rC@4`05!@mJ>3!ZDN*VopBcRoHf2$I zv_R$dPwC?g`n2CX;0TWsOu}DL%E+%?w9m5fqgM>z98VFRv@}+=(S}W+pr2SkBrrA@ zZ`XZy1`=gIp`A8VRUoWEcQxJN)nMP}v3vX0kI00AE4aJ43_lEdQ-b87YUN;wLi{*yus2$? zHf_voyPyTRDpVEwFGffTCKn?}Dku3bMu}?~s@e!cIz+RGx2*3?ZX}<>rp* zQig3M5?!VvQ{oU!`yDkrGiqqStO_JF+M_?#0+CKyEIo}eoCx>vJiDw(^PA|WwlR)P zF{ihEyt!k&DUnb5djxkx2&d>FwDsR);5(5f?*oIE1?bsU2# z72b!qg+z73XfaAzEbn$==Ys6=a?mLq_yKxK&!>tZsu5`|KO>+!U~4MP6F*>3uH;5e z0jCxDnG&_i2~zH-_`|Ph3Wpe=MccC?I>>RAvZ6i06pYcTv*WP0oDupbQFcv+im`w3 zLCna3?{(w6QZP+XXqS|z`6y*8UIg)FS@-W~6evUq$rG(A@yY@2HAifEtA(vZVR?w^ z$iq+iBa(sRub9S#ic3<9@!M8;$(fpbs<4faQI&sy^iv?su&6Rdvh4UMI1EUTprc+U zWr#*n)*9=N3zkWX(x21uYXWJcU=p5*C9M8~2#M~OMi?5HXsx~}Ta8u@!&E9^x8DI&2Daxe-OGl8`--TG#Mx>b5ZkXF26c`E^3UOJh0*^|NSOK!=A zZFbkD%%_&6sJU!7!w$FZud{DM7^}^h6f76giCG%fm9*Gyu4daRL#?u*V!)R+!l4T=8Oew6* zn+j{|?hOfrO}U1)wvz}xv^4>0oVA}&X;)csNgMgzO_dli1>a3k$pNn~t)DACD+_J5 z8Ca_-Z0VHHFiJLdz-%q*ZM5~a3`@4I3#@IDY}-V(jJCJTuHuca=Co#P&6&5YTwxY@ z#+J*>)+i*wy{(PpfQgx%eaW_y9=1cWo$a#ii|uW>UOR)CZC8>Vt9v^wHETnfo%HAS zs@(R!ad&*oYF%RNFJ0^bZ|nlLx1`_MOH}X3NbXqrrntv`QXydop0Nq<-3)Em5#6@p zf+E~;q)Z7&AI5YTLt>Jd1%#Z>){U-WFub+wp4vrMGxUzH@%bVUc-T1Fj3hdYA06t6 z1suQ=yL_XY$$ADUcCb_$#~2|;cNkwv=s;%u$9(2}hZlPig!|f(`-MmGZ_V~I^1hTN z??$}YFTaofkhfb^>sUGJ#I>=1Y~$4I0n3ef{Mu|i?|!cox^K(5-yq~v)*D}RUs&Vn zMEcu_-BqI{RQqd*Q}tDR)%MSdtDj%Z96#bYe!7Pe$!*lR!d{Yrd^Awh6L3hZb4cyM zP{u*<_`%5b!RVFqNUw9yICvt)*;)fUCFIht2M$7W34*x{$GFVhAI#?+%r&?Sl^l+> z9sU?~c^F%E`EhhOdVe^F=Q>K`I?wGoE_pPh=DKBeG<@X}!W-j*Xnw31wG{6>%Bi3_H~(Ic6(?$m|O;5wSk@Iz_|8q&RJmVegq1C zfX#ABAbd)wc#7f!5Zj-UtT+z|x#yU{faWKni${D{M-wy76Eq&Aea=4cyaKEb?ed)Q#D=*Z~+C2t!XZVceQcL(!`~8{JSc>$Hr#;^V z$R5_$;5^$4c6LA9YXf8WflP!!f;HX?Z9Z4a(W=MZqC96R$a9UC$5@J&c79j(h^sNZ z%a1c>dMgRJF+M{n2&&8zqsK1R?Ff@^UjLw3@LAj@e2+~PudESX)>6LyFa55CK-90U zg8Ht5SI!-uIomKx$~IluTDteTYGk~*bnT0o3`LmifbH8sq3wtVxZfd+)Whz0eF z0J|FhgyVzf`iLNlYt>o*q#bXD6|g<>Adcm>6!EKU#re&94*+nR$TA?j@zi-mIspw4 zn>6PS1C=%g?DgLI&t2w$f33D%Tr3BuKf6+UbzNi+yw*Eh?sX}j{r&a9>qBGWAf}x_ zdmzuVj;d=YR?Pb-UP?nS>T@;1xGx|Vd@a6mYR=;BgS@ty4fYcb)OhcGD(TurdN+~j ziBWnwg?KMl^9R9mW*Up|%KYPQ5A<$4e2@Bkm+9C1EbzhV+MCHdXcBzC`tr;|@ot?5 zzt7c0uL*M>yozUXGm=Z8n&@G67)8T}+GYUe=@4S0L*Bwj1 zqE+cIkuMR{d&IW8d&?lvb z`mKR2!C?HZMvRpc6ZJJ5H!5C5Sy~ z5aHb&FHn3VByz*MKmB1VU!cN`1iO-zW+4z^p+2$ZV zWU+tLw8i^FskY)%m7Sfwz{f8dLxSvwM}0#mzd{8|tv7~d>)ak@=f0$W-VMV>H=R;y{CNh^;Wz6UkbHBbzAtAc{pBb{Q?0Ec{2wpDxBMfKV-lI`C%An=*oo zR(!i#R)zcH+-p^Vji+R^u{4?vmWfZySPPOw_nR1!X<8T_i9@8Ykm5()I%CO@;Vi~C z<(G4eX__CdY!C{8-N{d>d@7aVtYlQM#`!JJ(~e+rMZE> z*vj(b#n{Vp)glx5i$AomR|M%9lqM-C2y;|@4wd^^Rkz);rQC8gSdq~Nf>r{WN@kcU zZL+b|K3z%ARwnOC1sSA%H!|jmo>cp7E4JF*?DEm(D!;u6a2wEkkg_M5K@Rw!5VmGPy`8RCJ!?GOJjbp=(8KEIz$ZT~M{!8*8D%~OKG6ET%f zV_Ywx0+V~A6?L7eJX{z3DzaZMzUmaJtaWPWqmD3Sd0L;q*`QxPPr-)%cz?GkRK1%0 z-u!26{OK{L-z241i14zJaB#zn)fg^;=tBKQ@``wcsqYV+v80tMH_ z*jgpdS9^-R!TzHGOKfo?KAQm*UmM#38Y4e{FXyRlnXZ*J3*4(BRn6VX9IC$E&V8Be zy8B4+>zDn~71J-R6Zq=C&U!MFZg)p&OmiDlgdPWnm^CiDZ^ZCD1YeYVd+smBK)9@S zyZioC=OhEw>HubL>8F^TDxjr19o;WDb*W0Y&m(L2REQ`QxcO41Oc4x$WxL zDIU`)a9q?$#DcMhpFYybfUQPaip z8jija_AmY{ita^>XDz*J(k#?Dv>-7%zIb1vF4zWbFH4$!oL!hK!7QsHYc2_%Vv03M zsnlaGMa{%txiX|b>sJ;OGQTOcO}Rxwl~N}?lHpG`s7kRIcnI>tOi~IMb`9)h#XF&D zIOFgs7%Q9IM5=!4Ljl1wtd!N?5^MV66XR^5v7#o6)~opX7yd6C=?VC78JsYvzrlcF z1zmAg_0}W^5jm#U*l@qO2%^0*1^PigH7%HRaRXx?UF(|uSK_*w+892+IPJ*c0upc@!4vS>DuHJwWS zD(n1pvM{Y?q8F?Sf14}^5Q-k}!ks~uUIr2~LWkTCR}d6hR51ASjcOt>2-Z-L$%T)j z7l%BBtI&62LV*jFxD$++AqImkxkRMs;*^K23MM@eTq_(yR!xyr%e*XH zX6Sg&HqR^`8eedq=0TTUmDoj=PC2Y77#GDyG!pc$GV`<3J?fOUqG;Ehq$3Ebv6G`G zRgmnFt7Chmw+SF(UF2D}6V{qknD^D1c?VO9fP($H@fTQWdF1e^J!#LWc3Ht<{(SMT z{uB_j@Sd@%;SY(&ceZ{got9L3BP=f(~&Eh8s$7!7SRzPzrL!8$G&h8iNK(p@|Z$3NIVXMO< zNFh=WF?1qwIB*@AFA9wEj3SzG?!Hk}`5C%m%R}F-JOCs;3vO>{{j+wx$p~^%F!?r9 zb@w(q@n55rig#+NDb>puDRdr)+-%^fZ35;Srla4c8D|ATYQ|VHd>7{os$RV;hmXtk z0kC87dZC-*XZx4HWz70V!arHm?)x`7p(eFe4tY|9 z;;R1bQNMncjo=yGAr9bE&GEvf5}?34j)v?Y_%&w>?fPA6`10?{UwAjY>abI*v-5$6 zYQ=zQ>T38StD|jMbF!hS&(*${BD<9Dg~!DEk9nr%3FOruTc^{UPpN%8p#CN}(5RZ| zT=$i!t5@RgW7YL7`~9p=%+^Qzs-tFM>qkM)gr>hpUZ}qbzI>s#G_5{*labQ~EH)2r zQGI#98Y+457IgUK*@~GbqoDXFbN(m~lbSz6U+#Cux=xgy`L4Zr_KQhHtIGTie{Qp! z<}2%?Kj;?Qx9_J^4S5b9V|u3bO{k&i_1*27p_`2Z+wi^xETMBR=Y{KN52#awygG!f zz@B`^@-Uh5v1rR8!7y9(iPKgJc#ozqwm!G=VE8uS_WLn0l0w%ItJ7jcE)zcw$FS_d z0<=ZV#AXhYpHKLjbS0bQN&CCUvhA(vBYtAW`L$EtNBa|MVI6eT0J0;XRhrZ*iuE-Z2$!Ooj(}jj_YiMS z)GF~r^(-lsf_M&(AdB|w)kx9sT(L!llGXYMl64`L7uS5DY}4byI@I^dMGNN`<|YchAs@(nwO-I&uW@Oa*~gmL0~fR`m2S2LZP4mtnU}Jg?vPBSW9i;2XplhAA{Rxiabd7VC#H z8N?Lh7$q>rW9y76R#h%d<;X4%1NdllQ)7!wMwv`!icOb`_0&vnLk0}>z}zC}7Ix?& zJu8zo=-jobv^fARUDTem*jkd=Mxn&U)%GA&$=nl%n@T$GPXt|2$FlB&EngG{a8IfZgWe*)+f@PSHV^Q(U0+`a# zaxzS4OKidD&#^m1>Sg)i+I*PO{63ES#r6pqxkz(45>qLf6?x{Cp@L{4G^OwJoiD<>@;Az4j3IlKn&OP#v6f%%*%*PlEh%7n- z7`F}S=CPIfIt7)K2ggJu@>7qmmXw^aLHKrV|FDQ+b{L!Kz5n1Oj_G8@=Xe_nU_{!( z{zM34hBN2@YV{&kbuifK(TTcK`BOXp7j0+Z74_Es?P2HvhM_|`XXtJa2Bf+okAec*u?sEq3h zn*+sf)Y}hABYoR%CAzdHBm{>*k(g1Cnp3SI470p}oe($Vis<)!u>s6bKYU*scodun z+WBZ6I3DFsV8`C*Uo@OpzHmh}5?(s8zi`wK5l)xp@P+kB;Ed~p7Ct9&N=Fv5u=;+$ zew#hEl3BhAKAMWc^a^H?k7SYKP-A_tk8Ju=ssn$BMFC4yf26DF>M}0ibL_a>SL}ri ztf{i1alF@#dH8^lpojpRN%j;D9FM~HLd{3Z9vp|0Zx)%37Hi6NSjIk?ZmmL%kAa*A zT}PX<6{ikIhu(qfpEpkhD$mznZoSG*3VhRXwt4=X^UC|>h34u-m&Ik_i>u(u8}I3> zed=A0w`pPN7R)Umqy zAg7v?cLRgInjUs~Bt*rnNl)?Nlut7wdh;Z?se1R&9v)0fGuKax9>pSF(A z`xX_p@&rG4B4fGEiH=c|~CF*kydN^{ezLZ+)(|J+<88Ch5+7vsm=Rmw4`!x=?) zIHO1nd;3~~jzeWUG7RA_Ty?g^uEQorE#`dojW+i}Vr}PXzA(a{*$oJb?`{aK@nKxI zd`a6GsZD)Ubs@{Z`M8$Z4hTa8=(8m=cdB42;)5KHxkYDuGgf(U?-_)~c*VzR^*WYn z0ksS-94((X2z<$6xjLsBOm{-?o3qx--=TA_0&&uP(aZ&K$0a#J5oMUe*pX#fwy1dfv~-X%froks6tL7(GmzNKrQ$I`yILcZ6He$+z#^g@1EZhpLO z{*Q$MshcFMwRt?a#k{Y@zBPE&8M;aH3V%W8-1YagmIU@(d(F897Bz)e3Pm(FMYIbA zeshSXa1kPa$)CuHtP1d1-$ZGpa*P9Tm3=+wJ1`;lg5@er#2SK=y`iy6u2Foqu|rKE z#!V0ZnY(A8TwY_Xy7WurMo%RGt{4&r_Uv4Ni_w>`lq~nM{99{9VTEVgPGuRwfwj!@ zLTv2G(Q)UKKhX=;{GYP=6GGvz4rh^*=Cm~WbUir{-*Xkw2Dt+#xX-e=X9DLcT!Vn0 zgQ4DsLL_&rQufIFU6ZuzTRvei=^#ocwK%G8584w*0LLznTU$EEjHjq5uPBb8c#KLs z&qL+>yUY{QoX36WvNM{7&gEuixq9euS0VAKmfE{?MCfI8oLP-lUl6QAFs~(%c{v>e zfj|k%S8FYwGCLX#5#@7y!;IJ>YZ(i2&Iz+>719;8Fzk1I?+BM7Qm7J*a?70QY!w_7 zeF{gH`$63Jqm={M>s<%Mr+~W7Ec&h~^lDD86h5z_xF2zb7!@?l)mmaTUqzIULM7gc z^}X2W?vw9-FIMmARUtSqkmuF*!K=A%u&1?+9}VR{Fk7Jj13(TE`@cLt|M#E@DB^wJ zdm3>E3WYxeeSbbb|1Y?kvIyBfFUoMm`*ptseLi#}gTFCb{I|ZpaX+KiTbJKBAgz5eeZk*2Aj+dd(%;-owOhL9!}CYRsP7&rWny1(uZ3$qa5rtH zc+5w$rI{}&3?49BLJE1$M?`iuCd4E{TE9IEytz8A&EUGH*2igcA6IY7dV%|0Rr~5><6kga_dQmC zMAr#^;P=PXMyH2ly7=CypuU>Ml}g!?Gj>=ZElwct7BsqiOT8hNxDGwQWD?;eE6 zv;h($ChK7rI*vH}25j>25nPjUIP3_E9#i$K{Fpp1>e1B=gnWzB2>%O)J#!5dm($Jo z$9VeB*Y!cy4+2A29!@rJ1dkw7*mqe%)dBc;&bG1wW!?^#ONcDk9R zqYAIWPxT@#kFykW_uvBt`o!RE{S{haOCcQMs4k4P2qDV=%YsA}u3}{Z@4-D;+hPqw zaURE$LCUWQ9#*A#wDw9R*G}pVLF#8;c|sZ%U05NFD^^%Czjqtp(JB;_($N+MuFLspGD1=472C zhUy=$o?_XycmBfSDg)w*S#_fQCFtXFIuv_m+k;Q9WZ&EQJd(SN{OyuOAC(@+p+7iU z`7E6&D?P8IkT||(a88OFe+ca(Hm`$Y-7^Gr7OaDJ40qz-Y-DwTyH85;ybQe+f~kTS zk)d`Cp_ET!jhRB0qO5n>1}@hDMP7frMCfDXU(WwXDDPOX*eMeDGSYy29sjoRo$0cR zUTEXTUFbd6NVR7zDwxOpHPMafUOv6+nkZ$oeoq_MiqJfN-{ohlSi_lMNw{vNyH6VH z`0e<9p>#B`Cp!)dtqPX-J_UOcFi#uHz^FER6soyVTtUs(2sft6SN_VJ7yzvK=ozg^ zfZUu15T$TGcQ+h}tI!}ACYVMc5!P7RzEIM^6;+g{iO~`PD%^|S@P}~ zGS+;I=Bn%yaFmwOe(9G(%G)y8UjOs0S5R1%9;m535{XL%TUoz{d^a28*L(lF)~qvt zfYgfRiQm;eP0=)@1t*t*@<{T9wRUmG&qz3-9xW}LtBEqa1R}CUn)u8-v^`<`gzIs- zGUVP&9}Y=0x3578+7F&jbFd2vVd4uDd*g=JOj{jt`3*!EB_HddK0$XVZ-UjF{G`YR z&kuH+Bf9Al9mrK3DImP@W3pJbIjB3z&dU^U!Y!6{TZ7l(B1`e^rf&dc(l@}%jCROD z{>kicOazJ&{X2{Sd5@Q|VRiYm*Ftjf5Y4!dP6kRTvQ))b9*#E<3|Yb1D~|b&j%VW9_mSdR;RX4}q8Xv1~omQ#s#49J~;wKVV-cp0;Z1`s&b2ynO)NbytWGR&NWlHx!OpK zI4nxRsRVf<{3VL@p);u|kizxN68#Z5ZB`x~E4rRi!GV3PM#Y#47L+mpSgG2a6>cnt z3^fnq2g%{5GpT2%%vLY0)f`J9O@q!AVpxTGxc;-Lp)(~w`)@Buy7$#xM77oitj}I6eObKkA}Y-l z4;8l=GHmZkgmGM2zV-B+ULrSd>@Gii`_}YXNY!jH#PZ0&ola|yXS4aqyAtU#(dBe~ z-4Bq?H!d#*myf_(t$28EH9M7_XQy7X4%C-F_axU^ES0AGtRBKUUH$&&_Vp+Bca<9J zhF@+QrW>x8L;R1canV@as4j@?beM$3L5BJ?X9#qWHmN9cNC4T)NwDy$0WPY1T@Z6- zabSq)+QT(X$`u+}j#m>P%{o)!CYs<2-Ma*L(~Fn8Zn7NmQsEkq+y4CVUS93KjS7q5 zYyn3(-sdKp^m@1bl^B_lnoH(Q9XCYsVBXjl)f?9S-92b&!KwEG2!6GIdvd!K?er~W zoVOOz#F_oInb&1IYHo1i#nqGaow5utE|<>@Um6iXl8`^w_Xwt0w3te^Z3O~@M~xe2 z!bA`-(c37u-r~CC%4gWObq_w^lZ*K!ZgY(Ya+1bxHAyPiuk`f36G4@Wc!Fvv3Kc%P z9~IY^cSl<5-17(-eM@KZop7j^W; z5&`yRDC&~WLQf;Dy+9NM$P^%(8_Us*ksbx7?rHUhOU)WPj&AX$VfW!9-N#1K7UXnz z2bec>mG;qk>CE`2uY^q%aR&J{HlKWF2v1y0Rtr`iCNQ*>V|+z>Ua#I&3&9lG*sPZA zIB44AB$gk=S^!502AXP;46gTB)bOuQeG~aZ(0A3)`t#84ee2SHE$CBgTPGR2`7HYD z6!E@olUeO{(D2t;@|c&m$h>nMHG?+-{NwA+UR#2+jD6}({}jJ}(e&GV?9e-rX`^<$ z3mhb-`@)Z^EY&ZUHv)q`jVVC<)w~J;Z8v;j`j2DA?zTnmZ^z$%x+qfnxo>#?eSYlI zRpZ#tBhULEtGMmXH+^cq&eHDhcGcRy&yD@MYQ6t?BIlY(Ms@%F0fut*I24V6#_x_~ z6NSRp=Vy{nQ#L>h0RZ{|n7J^1>4Czt0eX@UeL?RYE=Yzk2q*=n*zradgiO=Oo@)Dy z21xAI%AT0}5TK}=@cC^r3$pBLSU=GF{-YBM0r&z8kjDSQ_x-29QzBihD(<|8PE0!d z&rS?<2+aGg)QwVAv2$~TsNgBdRs%AY2E^hH+s=%OM;{14!1XIJ$9FW~7gizdc>ofMNg&Eu~T z)a20TotfewlmhA_bO{esza^~2IG;}sz$P^4sxJz$#i}0$Q?W68udX)x?UB&UY9N{{ zDQytxtKzj_Dg`&<5Sr-CQOU!6GkHeZ7N#{${KDPEP>#Vwu<&!(xM`%&k&AvbOIQEK zdr36dCPIeTax+Grsbn)&S%7RwSoJrUF|!~KAhN0cpMV){@KNNwd@=A}r`ZjlzxHyO zY)*7PLIu9?@hI(O_PRqN-^~eSD&5VE6xiR*L&&o1<;VXM1eETQS|WbsMov_mn`pIP zQd}6WApt^^?rW5_+<#}0I)-+XDraw#TYYHRE`48eIxnJC*@};~Us?M(eykjueF#=7 zBK!qWH}I*Bt#0Pb$+ltoD1WSRH8{;$>hlrEvQZ@HLxn^QSi2%m7e9WqO|;(Z_~XsG zb>2smy|hEQTQskYb||LJ0|q_9sjB1WN}62=7VjOG{FJuMX)mdo^vGw54LHVPUZ7Y{OHf{MwfrX_^!$DvtEJG zMrveaez;PB`lL65x7%x-q}^5Fo;LX4W_%nE2v!L}e!05o%PZ&_ z!d!7PtUbgI;r4j(#(gU;3$DD1O!Uis=1e=!b*r?}`xb^cWgY)QfX7Y=Nh|)$?WS-n5_#sgYf0fi#e{6x>)c}YrbS;oj*JAC@l1kySyB0zd3|$XpNVHfFgBBLAhqE>8u19d4 z#j8nhy9k&?r7xJ_MyKulyOIji5K$-JVR+`Ukf54?M4k&!0VT^&B!0i8?N@uQimB)0 zmrsV_TRrh43HYXkY%Adfj4xW!H7KMo)uwBkDcwnjY$xqCrW14eE8Ul~*?tXi(P9w; z^aVL9{aO~e>g+5<1v_HrLu^IEXG6Rpvn3t*$rAPYMrDdjW4uMsdp-~>KYdbJ$^}NF zR;t+?2Ig*Hn2Hu|hDw5@Yr}a!+>35o;LT3S3gx`OyRRo(-ZiKA{~UmXqZKTxOrQ^ z-o;tr)ex+%SYsR)XlVq2<<+eP5~(8`<~}t-Hmh|4qQ=r(nwn)l(x|UxE$hVc8Qf~2e=$?B#dmI5oEK|WaG@*y z!B@29DTKI^Z_>Ha%C@i{|nRW^_(m=HQG|7Uz4|^FS5rj~@zp=HF;>fiI>xO|FIxYiS;Lnx1O5N6Y1WpZyr@W;%V&IJF}$c1 zF3VGDR#H4>Q!AE+`TZ-c|3{Sg^LKI{k z8ct2j-dzzTeGNZKpBm<@O+QoQ7>lQ;x58b)NVmIb4p0?6^6Je679n`T6ZA8AqJUHq za=CtNsc{iN{X}8Kgyx>)b$d2{eQXh9{*+PP-gJ1OB!Zy}6Xs$kL0Z3&$VqZ%L;OW8hH{*|CUI zKYNIx*C!`4wX;6{~ z$Mk4iI!)XQekt&`Kxz21!7zM;d~75~Khuti$c#{KlweQC%^(z8xJ#XAIMy_TCU2Nd zO?c=@R~SQEot84)+OQ>$A#fxoP%@oQbP$q-IExU=Am71B*C_0E;?2hPVwB!Vyv3em zSP7x^wjb1w&R`InK4>mNY?w^;km+ZOjT4dPb>pfe^2dC{*O}$*3V*@&_7Ql zvd;!I|3?c7QIvPLJNr7~w$GL_I~8S8#n ztw&h3zD%mQN?{8eqI0vZ%ZGp2k_a9B@ijQg%HwrZrbn8M)TQsWkV+PyJzg&hx*XzExXtnsm??3; z3dxILAKT5ySlDfYW3QqYNrRvbc4r`wEp3NEwpd7j+ib6V*TC=!16)+K!{FS^Zj{MAJjh23e!keMRwgGK0p)yb#H?r)-8d%FRI7xMC6^FATV}=yr)oNRjA`Z-7?n0-I}7Cysqs z_=klr4gF8pGovDmr*jEANo6x*CTtbW(w0Y|{0&6;QPwtjkG?|tggFA;1Tg=Fe_RC^ z0XY4&ga5-?aEtf9@8DKT{S#}n!Kg$B3we_2|0JbLKV~3d!C=rFr%L7cr|0Fr*}?zv zyik4_HxjKi|3{Aw`GV;L{4IX__dW{cc}laM-N|Mp<^_9^;3JC14W7c3Esm>g8t25L z6w>ZVg0(8_$Q=wZP&igtXrcKz?$eF(N6d+;nZV0$3jvpCAkBhr zxiY{3<^*5OC1}>&!|uAfS@cymV_+(r$UEO82$~=2k4orjZ1RMmw*;vdR+H{P?SyNU zU?7_11~(!`L~4c+5vQ zI=-eusi0@!FrDq;dk3R9f$&@u=Dq>^QG@H|@1@#j+Kz*M?_X(zF}sZGFTtk!^QhAF zeu?P3>k86Sc%(mXvI-q2m{PTZDk>$IZ9~q(op&{_LEJIi&?DXG0cjkL$~qo4Sb3YN z5Y~c#>d3bFKfqjMdY0(9>3ha zm{ONx=kHO@;(Op9YZ>v&-Z~v#&KZZWBjyc@2(K1ivm(?ML~^1UB)T0M=nCFujM6WmEic0(!EFcYPr^GH zo^SAWQz9hr_HxoV@b=9=P~m;^YyBj$?>OWwa$x;MLiAgUn$yLDwcu;3OegZYy6o;3 z409gxoLOzM^5{`s7h}Jz1vDEuzE=-%4*C_jrACP4Qb1)4jsFR494%vtPptA$AE%Fw zSMhP*&&#nF8b7Z$?mzx2-AK5|W`w+GR^zc}iFgOVh|%p2!k3C5Mn=_)4t2Bkrzly4 zG3b9BD(mC+m+z6e(UCe2gUeIIhhmUmNbU_2DJ%+bn!6Px@?52Ca`A&n^Z7nX`+ITWfZmdsbmQ;eE-%GM~>s1c>G6A3IO- zsyS~4YyEIJTJ4Uwf4$6MB;tCsnWL8VT&m@iav6qreMDAmQ1t3lQT9m8EBZ|390Wtb z7XrbG2m?la$m_LK7%fTlSN%{H*Kq>y>*=#ZcZIl7s0kG12OsnUrmF6T*bFah4=tML z6pl0Gu&@}S^|PZ0SZcGq;z=F8c($ZpWQz8h`}tEPL}KJnWk>FYQD^2Og$w?|bQ<(0 zC5{ItKF$UNG2}T-bVAs&5ey8JRld@UAePku$sKcp@!+15PM}|c6Jitk_(D>V!Go%Q zNSJfbavaexyax2MYBQ#xhK2$$LHu2C)tunbk`7kaHai+ZZ~V|gXta~@25ikZwM0^S zJvRi4Vf0>V&+i4>K1Kn`sHST82dff5j7x{&AT!h)Ns)mqP)e}`75x2qC0a9Y6t!zK z#sHS(E2;HzLY98kI+S{|QD4DK;Go}brXpig>fre>jJA-~G_ADeTQtYXV(8JQ{CT*= z$E(=xp(qr+U7W-NDu(wD@8yQxvVwF|s-$);pku;UBakARjjX})z5zjOd%iX9B4=)AN}^etU3I{QehD0gsbsl9*1ZnT z=lkvb(%Hegk!RLJ!KoptLJ7NYFn8=T%wL=Bk~OZ}v3I6m&RB-HDzCk}E=&fM@Ge2N zSQ)q?V_STm5@XB>3inEYxHLO9<(XuNu*EE$lMsSp)mMglGOpv-NvZFLt`xCCq;S)= z2!gFu#H4ARKoM-jyq$CwR@{?wNjUn7Dd|`Svui?W&Sx8Xa!g$cD z#BS=uKnO4_0FTj>a37E>qVz1(IiDUPt<3%4hBQ^a>*(ch(1<`k%_ZrS|ICwm8fl@N zM?Tm8S>U%DGBS^1=f7}6B0`n(=}6ousV(J@)W!0sQPwi#6(@21`ps!Rh01bRImGGl znf+b!@>{ty0CHQ_nL*o|GQ1=#9nCQYt6sX_uUhp00mswEwD6X))H-=2PSy7P)KC}IdUbpttivs z5vjn2z1K1#Ejv-{RI#ztb_kepgy3P>?M|K^X8beJO~URZ@3suhVPOT!dFK3Vj%ldg z3QgWa)Y#F5#j}>(t&?XEe9!VhGKww;EV6?j7!}@L3V#+|i^f_SeAusLqxYF*#;B|- zSkWd=L3oR*jG5<)O;vwEUU~hT%LhR9%5!US-Bk8`+d75dFNIpJ{HVGOe*O5CmAZBeWtstUp&J&t@nxF?aqVdMZ{0_e63}#sPahtTcr}asLbC3 z{NGk+3!u-Rx6_20s{ClAQ2+hyv_E(Lf20pkW^xLBJL$nBuK$pu?EfW!{Kw&di;PQh zSF;m2=uxh~lfSIcR=q5ezM5e#x;d5=|CH5vh~*pi0)Ed#A9nsX6Ow)q5TZ4yM7#A5 zS)G0^%|{p~;a?I+X4!=e_5JDoKO~STIp{%*gnU&?f5=hZZjU3?qIHog;|s|DAxC*6 z7^%b6+t-H$Cg-7b3?3#d{B4DfHspS|J}(6oD@I^jQ*!CEo=8@4o*)0-`9l_GOm4A8 z`yM2aD|OgGD_V#MSd1mZ)b59gcJ&r@P!+FTD2xZ0(U z5?U{!_Y(VMu^EGb7Dnm-=Rl#0RhKQH3KizrGl|rEkkvV83xvH4Nw9@&Cl@<6ZzkzU zC~T+N@VsJ5)(u|RPIsEM+{tj;E_smE{Y{Qy^`Fc{YhJ4>p}yL;%uD+%FU)pW#4jmk zBHu45`KKJEtZvroTlxPZD|GZ;--8ue^ljS>sJHLa-BH?cyTIj_x7GfHUZfo^GZ80U zTzhL(RM>KNF&%{GIpZBTCT$-+Zjg9}0}X7>^Svl$gQ%`GwNb|+Zp%7Gq6ZH`XqD+RQYJOzQj;d}4619VeKo}Q zI^RmZtE3Jwun~ZZ1{_oZUG3PDCJm((8{kZj=t74$eqf`{zL~m56&zPYFRvj2y{xVS z+F#qweT^MuMS=T2b`tF8<%)muCA_HjCSO`erU|ZUY}@@X?~6fDCcpNcp)3(ZahM5n z8SQFI_URPF0)1RXP?o;#{VrW8w|G0rGZ%@#5tTkYfjeFtiJm-`7HOlA*jPoM{pD}d zyYM#ssO@RzV-LqI%sq{(ODw-75xAU}+6+b8`_i)m@6~Mek-4EV3F*Vu7uwgL(62?t zu0nOf!!Lgr%HQ7!#tZV{>Im{agM;ZY*d(LvziD*<$w&#&CDgsUBPbRLjWJsGaO^QG zk)yl>e;U_P7fQyu_uocPMM7v*)#btN`h?W6 zgRgg6Ux1kPK8fBa>SJ(Y|1vvkLHf^UONv_qVZtcC5b7P!bS|x^g(5xSz{ccC^?uC z8&kLPycY1(!zZDxH@zH~$jXM8aT<%opZQuO6-pT#Qvxhsm1i~=Tg}7qX-XJ);?^+5 z7oVint#9Y5<^Yy;2;M)@D9SDE#NzGX#ae_kPNl#p~{e zUjYn~4zFda+(dnhBSI25D1*t-0fL5ECWflU=h|0WD5qAde}JwbtWKfwtl!7dEdt2& zFoAMoxswUObp@C#42Ir33TcB+@-JcLbY8hi9>JYOc1WdO9w|dv${RWI;t`rVTJpu~ zJvpFVOYO!<&NrpBI9S#D4YEi)&y3>&jCxCepU7w5G9p_yAk3bU;R`mf$dt{WZShvv z&k~LDzr(7whM#zp7oH_lef{wPz7LvheZy}U&i=yqk?4G%DQk_Ka;Pz$zy1&pRxMP! z|CRKfff=ePZjlPR74K)xO3lRDf)Pxl`~1bl`x=)Q6}Hwk$c4p=xi0nCNbF|LtzV39 z1?n3|Ql83vSy+!{2nf_Xr1kdXD$_W5GxUz#G9!XO>-%0)yd{PU7KZ+WRb%s#xWf9U zABHoE74gl^HXhcK0*+^UO;`$knE3b@`@M}d=NVz``XHRWV*tX7$ew4R{tuWgNSWMY)qE<=nL3Fu|nYIBSA1_Os% zhQMSlKASPoCav9+lZ8YTM0V4U7m=JJ?+CNgq7biZMQ9f)#_EZD53P&3DGx?x8s1Yr zi*g#p4qYL5uH3-Mk@bjnuMoFw!amvo5kRpegf0T4Vl~DGW34g?%2pIDNgcMvi-BFr zapJ)aVgaNL7Ef4hq#`X5$dpa@JXbr5h_`YDG^orCNMxijyvOV6NVb8l?^xbNTW$Ii z=FtR=`+0+EbIq0)!K>7dtWl>7q;O8+rd5f2xAgJ^!ktt?L5?fbj)WUT(zrjyUua-E zYK!gxwbw}4ihUX0RB3o;M-Ka1JC<*x(~5j;W)Grrsz%NrELZ>BHQ_A+Q(}2dL!a6U z^t(J;$@unTBA7jR<+=*}9bsNokN{~k%ahNzj=oN7Pces~L9~IV&T4DRB(c}G=>eoZ z*RAsbs*#S+Y|5swccO2yJXc<@B;t*Ue4f+w@HlNeCI2e2LjOKuerV;a=>#pub?nEo zAvNuEBjJhGHFr1Zf%n(<9QS8}WnQz#ugPnR@6KV5BP^f2xIStBbfre}DuL|a*XLHB zTy@S@tX8bbelS${-b?r8!M?E|aB7?g4_4!fW_?_qxP~E&y*Yvk~34`vs5hg>3 z=c%T-usHi&^SQ8QXacC@13*y!LoR>$+yGc8Og!1^gPz}yHJrzKfpC&{dk=;Y07$vm zli$RXcZ*(g*G*f~Zh?T0Iwi57dvkpwBqYIbpjgW0zELO zo01^q#-4?{;>G>JM%%%s4Wy0;4X6n!0)iH12SOmwpvI_hbWBPb6aimgCKuM2FZj?H z>yW5dfUa zg$xV@x~Tgq5P~J$K#IPeJsm)RJJ@9$?a&vC1{RPDC0IxT@6uqzpU@X!u$Iif#1gjn z!40CizrlXc36^sq$I?8AA3)h1k1ox<8mfL||xr18K-|iX5A4)#p<6zY=&$(bHZoCA)Fgn)- z7Wd{P>)s@2C+cn?0LLBgX%Hc*f#2MAvfQ}eoH25G_JcqL#ndh3BS}ISG>Rt$;US!g z9g|Azhaz7Eksn8qkg_n!j^d7ST_6r`d>v19gC+N%rfIfoNlD2lfo7$!>g6(EuNu^`*1dlWk5L@K@s?N&8&$;8t$u-E4=nAAQCU|5; zF0zxvy_SP7CBWkZrBU>HB%1^3%prODZkE}HTrszxGmUF47hftblqb(3FrjNN?=d`B z12bPBCYO&cKLtOBlsQ+yBToY!ESZyNag$vRFOX4;qYp1I5FvcFNUteUKw@67p+GO{ zk?XvWCuBuq=>hYxla(V+w+*M`pHKdjl;f~ifR4#(A&KWW4hKtR)A-q{-lvkic6B-O z1@Cr5Hj;#gCVNi0)08*k<#K^|xy>-Ek+EWs6M*PJEO;R;)@5#VYHklNb^)QGp_Ti7 z@g6QIJm?jLfZWm#Z7mR52=ID>C3F!I{vEG(ku;yF1S2N~6G`#R7u-Lt2rWuM#G*Zw zDHW|k7DSX|OO;-mAOW~|@wm%alktVz$n6s#T6>vACzv>;fO3E;%$=rH&yHLQ%xzK* z%0bR8EnjMZ%;T|cT6uFyl~Z(P;M$joaKD4jVPocCo#o5!=foG^@!S5tOuLaAFXEc45c=P$a6$M@_bX$jjPQ?-10PQ zKvJb#fHKfYL)Y70TU4X9)bR^hvnzNt&>^;?zBe1tV+_VP#X9uG#;^ysX9EVu ziz6MZEL)KkBkIaxfJhxpwm+cSsm`&F8l58Wb_U62Ng6=v>Wv}bhs)ELrfm>`-K z2P{}-BN`~1vgLbAPB?^7vbFvjv=K|cIjxv$qBZT_%1J+>Vt>ZEPU{hQ>wSYqya4zW;iV1W&DH~`LmlB z`o(O+>tU!#=>rqp1{X;;JYUYF6f&ZPhJCN$99hWx#uvg*@ytE7p$OKGBh~-G0?!tL z);tKYnPU#gF)0gbee`+&D+Vpe`~}2>$Djx8RdzpqKH$pS&DnvgLF~EC;Ku@+K}^5F z(hxlK^B(IHv`=M#RfoVKN-#CT-WE*7V ziQau7v)crx;L`A7+t6})!dEZu;2Z!dfsvo_==@!u;`Q*iGK0f(1w1J-?iT1(+emTB zSZ=|f6W_po+h|cRD^kYza@%<0Qx@8s|+bFRENb>za2Jaz(mW++6N za>n7+iwzqXcgBF=2t@U8T7B8?mCB6S;f!9!oJZ8Gxe=bX_>5;%&P(z621Pu}a)5Qz zoGrWg^UWy-75wk&3yDSxqA|Fs9~aV>7jBL5GAS3+Y;p6A77O1kUK!)(vM&}dFBW`U z%)wc#T3)C)T&!JQsCoA#^>7hpGEH7IsUW^UZ@-X~vCvY!&|Lnd{^QcH$|CW^(m3UE z{m-RJ@x_^sUnXsF`!aABJ}xiaFE4&a)QcR>qEjy2_faqZTp);9o~B$r#93zQT!EP^ z_S@or61S8uA5vVV-^YPo8sT57Sg)IL>JrcGsF2=ga3FzgW8kZ(91G|Yq?pkhSifck z2*v`|S9#1w(0dcKMd1@Y#|!Z?2YYivR@M-wYcv|`0#Y0NCL4VA z>&!9h30-f`O}SCe`6xJ6oM|_3{5E*~HhFS3xjQ#SJ2#@Ny&iiDPV;WEVUfy?LR5d@ z8%lhg{77IFO`xs{bIu05^j>@XYh6Z_$Ov7gLNkUdy#{Q*F11ARJO+L#FXC;LfRMm0`PaS*Y+*ToN6V;dHj}7`1-Ky>u}b}L4b;wSae9v zuG!!&Gv3O6HefMYZfTTU_8SDr6XxwZLf<1g2d*RcTlR?Nbiu)=Zav8Ls1sa01g(){ zoYp1aTj!@Ab9Wy9WaqyBg$HLndGY~3{{ceQUKj8GFq1r951W9lEm`6nba@|iK0j!u zT4ti&haP`pIo{*E$KA)5nx>9vz)LSjy@$D<4B+@2)k&NoqKVlnak+iY*uI|09iJ(@ zJyUvn!TWU&pY{W9PC42!d3XfNws*lUcp8hg2ivTQrn3cmt>xu=%9@Ce(R4cx@ zFWTUru}-*WGeabTmfy^xd%D<&yL8kE=;^`CD!f&!CRkzW6Af2b38cx9l0e^J>Zyq zqA~zm*;SFxXp7D5EZk!CWG1Hb5W3l0`N}!o9^LFtI84(%w(>{Kr|;jR$;>dW*J8k{ z5O4=B+0ygAANQI)Zg;&N2hf1$yTfR`B3_diF(RzdkT5SkObuuMT-4W8w=)%;)>Kqa z$$#Qp-)@uw0BcV=CH+xxsAQ7W*Wkf8loElY8tXlw{wT1MxCscglo#>7hOwMfnjq$~ zhD?g)mSW-tVZIre*0ypgzwJt7aUo8pDC8%!X(~7>g~!N_>Pf2hp0os6#`m>;NWOe5 zQ_}NZ7Q9!#5g;JUt#(_59M!7hQ_wel_3R?YN2-(t_-g}A@8}y0=T+@m z?LdGZPtx`6RjMN>AESvj9vPI-o<9w`yRnl_GUW9^!)ZQM6sM8SLK`V6(VB5(*ISNw zdb%B)c5gZKIpfieMLY@nKH7@j<<;`f5!1hyID@k;M+3w zMo`95t4hbwqJp5<$)#HYI1PqP=Fhhw0N2QV$)qg!XJuq zntf+=p(st^dN9;I@8*Reeq>4^pXLuXm>}qOcnI8Gm*}@h6hcwX6lj_!PZil~&otWD zN$3#SF5w!+6s8h>m{qSjG*(j`2&)*o{3r}ghsugIXp|xDwY6&bEfnKwftzBXaHs4I zhWn4wV2$k2n_|KXs3F=J6F${#B;QmrfL&fqg_gD-&k+O+`sf!*hLNEwS$)=~D4W8o zreb~eN=f;3uQQ!0=GnBG>rH88hT?MvTr$*6_c5BJ9ttQ4lVkZ_r&4u5!(!+O`Gb{G zLOVM-ps`CY^Cc_{kI6sH>;1AH3L1}6WD=9SnJu!4Rn;CmAm$#v zmrfYT=@kEns0B-9B(CQI<-F|Ez3TUb2Ijl~7{%`MH-ZODxEomW@kNvomLG}iQa8f# zmBY{g;So9ztve@oFscp>5QCdDpfW=AZmX&AoeW z+exbLZufEyA6dPx-1!8bXl>;6+-*c}_d5P0c&~UWD#6meJQZ@!cd^lD|8B}L1mXR2 ztJ3WrCxSOr9&8%SNs8*a8Af>>zw;PP076Tp5eoSE`O}ilm>)?`_Af;(gy?+dJ=oDA zpn=Iv^6uq$AoD>cBrqF6P1A#R%}NV;Db#(c-5IO{h`=Y+6eGVH58>(Y2bN_+sD6!y zf(=&jUKgM-sh(hgxK`iC3q4_(h2rR$D`}<*b#g&h!>CJ5NqdV0KSpxVJ)tlopJ^)K zDMg904m6_>oc@12X0yt z8z5xKd18}#%uSgT5Q_fXaakxYbp{0%eL^|{vjz1C|H>J}@Te21F770V#WdL-!WKd{KfNdzRY9!^}Ae7HZBskX}n z38L4kBs$G$@GLMvs}i5Z@j;sGM)W zo^XN`1*?JPTBky zy*a(&+B6i1ehcaqjZ#4t6yj^(>yW36=Z~lsXnPa*SkA#&fyv=iqB%;L~dN5#R2!ZAKOexr-o1p&G(CDq~dL^00j-kzQYLO36 zL=~@s_GBX7AUWPtdDHpIb~szGfmEeR?UhYk!$uw}sOOepx{Jfo@pKffPnBr@mdqS> z>}h-#xf`Xc3yZQ@RAvTOlE=trDJa}?BEd8&M3*1Pe}9=fqRF7K(u$){*))-p?V1jn zXJ)?5x7I@ZstRg^rr2cnesJuk@7dgbmxB*Mu-b7xLW#d|+>6Qnh-A($qfKxEmS2okz6ad} zCxdcZ=Xz?5s;hS5cgET80@{T5Ys5LQNjR})VAN8!ej?Z;AS~>@b;ml|ZX~6|eQb)w zPD(`87{X4K#tRlqW!JtJ?Q<#mmNlAJRut~Bm@$7Pac(`M>m2rq!}&nSp`FE3#-RWvwt7ANMKU zwoOjT?coKO~|PWDF{_1^|7bkhJ*jDc=2UI;#n ziSf^1g>^(*2(L;hP>L9aWmGX+e;u9ru-O3ey~U_b_IG(RvGbr zX}sdW6}?K=)-Hw%@@}@<<@oeu=gafPo-Q)<-EfxYm^3OYltcnS6$m5`w^X)dn-~kZ zj!vl(3eo90kP%`rLU1guqf;KM1y-Q9=SwaR)32jb3w`XS2kEpc3E)_eVQlbZDOs4z z4PIoR+z6N{Opz3mMjh(x<4Azbp;yxk=GKwP3Sw!t>E=GXv+1Ugtkn$5499gVE7kAQ znf6Uv>p5=kc{l#6%_~FkM3JBrCXGs{1mrEwv@72#$@SUZLLnmgwo8!|;JGqjywP^K zJA+cVOKsg1-%iex38$UP|Bp7W@A+%80wmcs{q;wTK@#hlvj6kq#+ zf@d|0ch9_w#=W2C{nvmOqn~7NP1lRwVYa0|sAP|hZOTvC6u54a(0nhN_#)p&=}ION z3^3@pbYXA7W3L6d!onbo-#YB>V)C91Q+Sk+PGUaiFoG=vellLyeuA4Bm%$=oaXN&& z8g3#OxHOJXRb~j_j1)UHAo2B6CiD=AlASLgxsnT2W_=8eR$f&nPsl7|Ucbw54HeYlz|1^a*=-$q&)8y94i9Eyh?OD_+3jW;6tT zUkJ&B)*=w|ju~tdp_JSQ_elgL#~EYrt*xx@C58&1QJ5v{ph1T?${QCiTQ31MqMDaWr)j1!voT2=2g(#Y|yc2=mdyX!OrP0i`05(yhwx#PjvJZG&v&; z$up_Jcr&yi202l{?~M=EA=ghDNTph8S<}|c9?v1@A`1o+u;PaFM*WZ|8dbRgNn+6V zOAMuNkVose&rRfL#j_hz^E!=%+_R+mTGj4`uiXcos+(G^ylsf3IvJ2{IDkVV{LC5h zKxx2h6a!Ix2{r3&Gtz5<)QWn~^I>*hJv!Poe0%)7GQipJ5lC9v8tPF+or!zlSn*43 zkf=jU;^^5psK3F*QJat6_ezVSz`R!wQig3d{obcREvw3DH6+m#x2XcZxK~Dfi}cHH zG%a_@AKQFZA}NIUP@xd2Cg=Y8-9}TOp4>tgivNE}O$BB+9&-8CDkL3j z5*#MBXwszIj#3ZjBn^nw4~9@QnN$Nx*@%jh3+cBOdqGB;OO9zR3}ili*Q8}5gm1Uv zR_()uLqLoHgt^J3k6#`e2%AwNXH|Rg+hoUCD|165S~0`s-J-p-OH^wvOZq>VWvXLf7D~Gr7snb-*sVKGO&SkSz zM-rUS6%t$L-6hEz!V~YwCheuGFDZG14Tf68CqvpmYl@u?H465r5(Sw+D>e0Y@~xkv zpT?LSyWUWa;R>DFrq1p(yZ)BooWhDts8GiHuD!F{+;&R|XOS15%&HH%nYwC2E#~-brB_`*e3S6yCli|9LFE9dz^NqHCn_F#U4zPr)leKe`?z3Q>Q~t#tEwNWe4BWgB#-0n7g6BCr z>|aq>`jUo*cgX?ZU}_4axCCENJQh9VbeT%J;hu~jRc1OX zHg!H0hY*XDP(BkbftgVK<4}@$Gl8y_U-)W-FF8Sk?o7BoogYi`P4k%ubH4}^v~%7Dx#ebr6_{PeFVa0F z(rJ@Dp(MinNYm_7SUJA+^vsG%rg<=1Ou?(1e{o)k9l62?*c855&mc}-hueDDc=idì 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

    NB1kv5rcp- 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 z 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 literal 0 HcmV?d00001 diff --git a/source/images/blog/2018-03-0.65/filter-example.png b/source/images/blog/2018-03-0.65/filter-example.png new file mode 100644 index 0000000000000000000000000000000000000000..eab04040b32297edc4785d76f13555f4c4a64b95 GIT binary patch literal 36260 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 P0smwqpyH*XhA;mY={K@k literal 0 HcmV?d00001 diff --git a/source/images/blog/2018-03-0.65/voice-commands.png b/source/images/blog/2018-03-0.65/voice-commands.png new file mode 100644 index 0000000000000000000000000000000000000000..39a98deef7ed7b3a44e3cb197fc628bfb7377183 GIT binary patch literal 14828 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 Date: Fri, 9 Mar 2018 10:33:56 -0800 Subject: [PATCH 541/993] Add Camera Proxy documentation (#4863) * Add Camera Proxy documentation * Minor typos * Update camera.proxy.markdown --- source/_components/camera.proxy.markdown | 61 ++++++++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 source/_components/camera.proxy.markdown diff --git a/source/_components/camera.proxy.markdown b/source/_components/camera.proxy.markdown new file mode 100644 index 0000000000..41719935d3 --- /dev/null +++ b/source/_components/camera.proxy.markdown @@ -0,0 +1,61 @@ +--- +layout: page +title: "Camera Proxy" +description: "Instructions how to integrate a camera proxy within Home Assistant." +date: 2018-03-08 19:00 +sidebar: true +comments: false +sharing: true +footer: true +ha_category: Camera +ha_release: 0.65 +--- + + +The `proxy` camera platform allows you to pass another camera's output through post-processing routines and generate a new camera with the post-processed output. + +The current post-processing supports resizing the image/MJPEG as well as limiting the maximum refresh rate. + +The current proxy capabilities are intended to reduce the camera bandwidth for slower internet connections. + +To enable this camera in your installation, you must first have an existing working camera configured in Home Assistant. Next, add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +camera: + - platform: proxy + entity_id: camera. + max_stream_width: 360 + max_image_width: 720 +``` + +Configuration variables: + +- **entity_id** (*Required*): The ID of another Home Assistant camera to post-process. +- **name** (*Optional*): This parameter allows you to override the name of your camera. +- **max_image_width** (*Optional*): The maximum width of single images taken from the camera (aspect ratio will be maintained). +- **max_stream_width** (*Optional*): The maximum width of the MJPEG stream from the camera (aspect ratio will be maintained). +- **image_quality** (*Optional*): The quality level used for resulting JPEG for snapshots (default: 75). +- **stream_quality** (*Optional*): The quality level used for resulting MJPEG streams (default: 75). +- **image_refresh_rate** (*Optional*): The minimum time in seconds between generating successive image snapshots. +- **force_resize** (*Optional*): Resize the image even if the resulting image would take up more bandwidth than the original. +- **cache_images** (*Optional*): Preserve the last image and re-send in the case the camera is not responding. + + +## {% linkable_title Examples %} + +Example of using a Camera proxy along with a Foscam camera: + +```yaml +camera: + - platform: foscam + ip: 192.168.1.10 + username: foscam_camera + password: camera_password + name: mycamera + - platform: proxy + entity_id: camera.mycamera + max_stream_width: 360 + max_image_width: 480 + image_refresh_rate: 5.0 +``` From 93907d9f5ce8a241da01809478836d49728a2527 Mon Sep 17 00:00:00 2001 From: PhracturedBlue Date: Fri, 9 Mar 2018 10:33:56 -0800 Subject: [PATCH 542/993] Add Camera Proxy documentation (#4863) * Add Camera Proxy documentation * Minor typos * Update camera.proxy.markdown --- source/_components/camera.proxy.markdown | 61 ++++++++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 source/_components/camera.proxy.markdown diff --git a/source/_components/camera.proxy.markdown b/source/_components/camera.proxy.markdown new file mode 100644 index 0000000000..41719935d3 --- /dev/null +++ b/source/_components/camera.proxy.markdown @@ -0,0 +1,61 @@ +--- +layout: page +title: "Camera Proxy" +description: "Instructions how to integrate a camera proxy within Home Assistant." +date: 2018-03-08 19:00 +sidebar: true +comments: false +sharing: true +footer: true +ha_category: Camera +ha_release: 0.65 +--- + + +The `proxy` camera platform allows you to pass another camera's output through post-processing routines and generate a new camera with the post-processed output. + +The current post-processing supports resizing the image/MJPEG as well as limiting the maximum refresh rate. + +The current proxy capabilities are intended to reduce the camera bandwidth for slower internet connections. + +To enable this camera in your installation, you must first have an existing working camera configured in Home Assistant. Next, add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +camera: + - platform: proxy + entity_id: camera. + max_stream_width: 360 + max_image_width: 720 +``` + +Configuration variables: + +- **entity_id** (*Required*): The ID of another Home Assistant camera to post-process. +- **name** (*Optional*): This parameter allows you to override the name of your camera. +- **max_image_width** (*Optional*): The maximum width of single images taken from the camera (aspect ratio will be maintained). +- **max_stream_width** (*Optional*): The maximum width of the MJPEG stream from the camera (aspect ratio will be maintained). +- **image_quality** (*Optional*): The quality level used for resulting JPEG for snapshots (default: 75). +- **stream_quality** (*Optional*): The quality level used for resulting MJPEG streams (default: 75). +- **image_refresh_rate** (*Optional*): The minimum time in seconds between generating successive image snapshots. +- **force_resize** (*Optional*): Resize the image even if the resulting image would take up more bandwidth than the original. +- **cache_images** (*Optional*): Preserve the last image and re-send in the case the camera is not responding. + + +## {% linkable_title Examples %} + +Example of using a Camera proxy along with a Foscam camera: + +```yaml +camera: + - platform: foscam + ip: 192.168.1.10 + username: foscam_camera + password: camera_password + name: mycamera + - platform: proxy + entity_id: camera.mycamera + max_stream_width: 360 + max_image_width: 480 + image_refresh_rate: 5.0 +``` From f04a1162be522b016f4cd70102ed557fc8d7e886 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Fri, 9 Mar 2018 10:36:00 -0800 Subject: [PATCH 543/993] fix broken links --- source/_components/switch.volvooncall.markdown | 16 ++++++++++++++++ source/_posts/2018-03-09-release-65.markdown | 2 +- 2 files changed, 17 insertions(+), 1 deletion(-) create mode 100644 source/_components/switch.volvooncall.markdown diff --git a/source/_components/switch.volvooncall.markdown b/source/_components/switch.volvooncall.markdown new file mode 100644 index 0000000000..f4de42f501 --- /dev/null +++ b/source/_components/switch.volvooncall.markdown @@ -0,0 +1,16 @@ +--- +layout: page +title: "Volvo On Call" +description: "Instructions for how to integrate Volvo On Call into Home Assistant." +date: 2016-10-02 17:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: volvo.png +ha_category: Presence Detection +ha_release: "0.30" +--- + + +Integrates Volvo on Call into Home Assistant. See the [main component](/components/volvooncall/) for configuration instructions. diff --git a/source/_posts/2018-03-09-release-65.markdown b/source/_posts/2018-03-09-release-65.markdown index ae2e8dbda3..39aec0f301 100644 --- a/source/_posts/2018-03-09-release-65.markdown +++ b/source/_posts/2018-03-09-release-65.markdown @@ -139,7 +139,7 @@ Experiencing issues introduced by this release? Please report them in our [issue - Fix CODEOWNERS permissions ([@OttoWinter] - [#12621]) - Xiaomi Aqara Gateway: Service descriptions added ([@syssi] - [#12631]) - Removing asyncio.coroutine syntax from some components ([@Julius2342] - [#12507]) -- Allow renaming entities in entity registry ([@balloob] - [#12636]) ([config docs]) ([light.demo docs]) +- Allow renaming entities in entity registry ([@balloob] - [#12636]) ([config docs]) - Check if $files is empty, don't try to execute it ([@armills] - [#12651]) - Removed py34 ([@cdce8p] - [#12648]) - Improved Homekit tests ([@cdce8p] - [#12647]) ([homekit docs]) From d65f547d3585eda3abac7f781eb6ce6fca120076 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Fri, 9 Mar 2018 10:57:18 -0800 Subject: [PATCH 544/993] Add component pic to 0.65 --- source/images/blog/2018-03-0.65/components.png | Bin 0 -> 61389 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 source/images/blog/2018-03-0.65/components.png diff --git a/source/images/blog/2018-03-0.65/components.png b/source/images/blog/2018-03-0.65/components.png new file mode 100644 index 0000000000000000000000000000000000000000..74ef70193302928fb975ad3420c239fdebeb9a8a GIT binary patch literal 61389 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

    5Ynq(6AUPq0Oma6; z^e(w|9SxBx=pUS|ihGbvgivvqGoqwRr7U!NKYysQW^wrS^Ti(82fywUeW(1@BN&6F z`HY{@s+Tb2&n69T_yzFNOM0Xer?%=0Bi-tPmtY;_kO{$m-L!PM`g7lv1&vMhD5{r2 zY*LNjg0cEks&HA@Hv!cR!{{i)-6Td5spu@`qiB;BZx`6SNm6TFBns9>G720Ky(Fhh z5J*Fo(F&RVkYcje@pDuNxl@YfH;xu7iE@*J=mn>$xXz0o6S+~nXY)kb_=`pG73Ys| zDZ3V2=2w*u6oOfGB?q}o#ey$VC``{b-&0W6$;h@C<8(J zlRpKjydN5dc)5Zh+?Nf=)_`{%iD=Y4&7#!!dkkfM&SFn79JJY7fu(_?U9^9f)?6=x zqZd=n=x7rD28Hvin4(cuP)#rSX{@1aX@TnR%20XhE^v5*ftQFHb?ia1_mWS2#$QlB zevtTF<4~c&_14NXS>83aDYng5=QSiHtR>Sv1Vf0H-f!}@t68`!FAj>-Y)zpFS=|{p3KO(CF0GcRN zk6GYG9h<>PI0yf3EAb>8aGTq1A4?Q_u$Qa=cLm76&cz@GNxYi$4X1uQ^9>1YM7lVW zYnDxj^5Zzl`YvxT8;gZx{5-3qMdT%m484Y%#>)a{-%hvlvXFg)>hu=0eAKm}92GO3 zh?^cc#lX}A-QZk8?K(stB0H}?M~#h?5;dp~JixhTea@KJ6f+|16-n_}K^=f4nxM=B z8Xth=RyITdD+i!lmNKT7?*TXDjRAKyXKZps`l~e}C5a z0jbhYt*(5ifWDiDYCvKJN{jYTsqn`&b}n7s--M+R=c@egBkC#ck5|O}_3{ z6?ZyqaYhfDq^~tYkJh&KTWkW-zPe@_>hJ$+Gs0UtgwokGUVH*vOI1~A*vUNry z_%=$oQ&se)DJG|0JGaj$ykvO?UbqxtP+{7l(?dQoCn+>k+RU`*-Vp7^8gYL8z9}(! z)9U-@*lSb8R&iIneV zAl`77u)()y$dIzV@~7;s3V0=hk4DhQ$YRSI4*NvO30 zQjC@=ZO)X#Og;Q^hDDHz-C&*mL-r`}L**W_Tbu^#>LZ`qtUk?eS=kEzcUxT?-bhCo zrDV?b|K^1}e)yZ84u`DB>O=tn5jO6Zg>#5z)%l?br|y|y>fJhw2;2i=2a(xF@+93d z-J+9$12t`JRSh0Ko~bvd+AQR_5`J^7I#qZWV0`!Yy7d(%Hekbja2R@l(xAUihe*Z5 zkW^K9H6gjLmf~!5aTcFk%RZ|tI+xl}-Bez?Zzn9BLHuE4y;4R)CEb<=uVN~I3wH^3 zu4olUtQU-3hj@GmtywvAz322P%Al&B`5Y6|V6QcsgbH!F#aX@G-cGryrkw42Ihp)B zR|yY(mD_TFSZ>Jsoet)Pb8EevsYTSos}^-oPnSb~E{QnxuqRyxlMXUS$vfg)M*Dq;!klrHKA3arTw(3ZXWBJC1V*-N zhOaz_`yEC@J^Z@jWmOl227jkK4o?8ZBrT%dpR6_`deV}+vrCJ8zxRF3DB0VzII^;F zRzkMdxuP%Y%RH&{cqghWesaX}hK@h(E#?MS>%WeFx!lW~3eWH!fIFJtVu}tTO!S4f6^pym_ zrk-DXyFDZ-)gLJq*2X^f)(6?mPPgw`IA+B(#_9Qsq1way+bk5J_8pKZ3P@=NQ~ff_ zkBnnQ9_}A?KVO5%fdo^!8bD)ZSAzS8C)BAX=-}!U5Unt`NYa3oExsF^{umIbMqG7| zwr%Oz2%oY=K>Wl4oeA9@xRch_Z}QLyV9)@Gpd~4904?)Zp00%M0(yoa`@@ec+FAkT zi;HfG3cbiEQDEQNU1f$$x)_z)VxedE^sZcR2RucJQWLa6&OW*ix8fGkvoq*}ZyVj} z{(`>uU|naSO4NVZU{IikwXBYfwoiPkx;hkhE8$@=Ct?inn=Jj;ddgcyN;s8isyjmb z_x1K7f@3k1xKVat_^%p|iV@o5G~0{aLlYh=;zbO%8ObDd&?Ifb6D94U56=qp7zSL0DyP z!aZ?;>EUJ6&(y93+I>fJ%d=NXf?U3=4gmrXkl@Cbkz+0RKdz8*3FVDxIqFRYmDWEP zi%6Id5cP1Tt~MrYX$=W$Wb@Aas?y}G=4?y*^A|tsH(GqO z(7(p@nPNU>e-f)=-s`{@5;qTuU@@N8vVH_nd0que&$a{0|PfN3(U(0a~ z9zrUB=(_bdcn77gG|RI{DPj0j(MJ2RLjBD_By{tQauY|JtJ;C9@I~RKaCb70Vib9h z&|^8vFbq0H{|Fl};36^dZ^Z0>t49X$9{=XNXT5!nid2?*jCeGD>T3&6MGnSxnmiXU!4PJeCsqQhQAkbb*nrZbx+-} z9qP}$*RT=D(SP)NPK)78Ls3|2O!Ir4^E>U|uuD~xw8}RJ^jqF`xFo$P7l~^kvUF6e zE$yoXGWjaw(9oySEI(qB84&h!uwx_*JYrX(|_toKtApiB6=&5Wp%)4Cla?oOd zXe~q1skJ{$Dw9pS=NuWj>NU?h)C;>>=tD1r?TP{z<*i#xUpqmbJJRIf#-Vg{S{22~ zJ6h0ae`YDx)j&VAm<}C;Cw9n3C5>9Sb`QuDwT5+Vs;ZWmUx&n&aNgTV(|4Zpca&xH zt)$_6I-}(}qg48*P0GRMN0(Ub3!JM4qLdRM9TqBB@~hQ4!enmcRYgqLi~_!xZ`01l zR;Vc5yI1c$MKkVLom*E)UoQ|aNs_K5es5jxX8?mXM&9X-FS;9oNH%OEWKb5$&{jL1 zeY}zmYSUy1af~*{jNbVHcO4oa^j)#V^zJF0iE^#qdsowmIj>Y$l`I}531ojGxp`8D z2JSWrr-qKMf!jP!=xSQ6JRQ|gq|`7HPYZuuwUHwa24ZY|9RGHU_gpnLD4bsJ&%+wl z)9FnL89V58OApKnBXVNsB!met9m1$ z=B6H(QGscB9{N||w{qZMSJ)h+_b**1O(o#@E7)#@!w+u0;} z1C+R=+Dzc~ZJaBmzFN{`4LINE)2d6MVOjNV^o*Byj-%_YPDY{LE>7|MkFCoCoBqE$ z4Pj>6d+*6E5+opx6+pUc)~Si*~L9|Ev?|ExtU*2?T{>E>9Y07?^#OrZarj^4lfU#5V z;6BYZM9F@o*wX#E4UO;RV?{tVaS-djF<*(87)zShVY`bBSVdQJ+#$5ra;SYVLl?^Z zm#avP*Tqmdd5ve&Al%Ssn~&FvYPpE!>FRD6ghDIkXt6h@O^`DD?t^>;JbgOE7uYse zfEc3C{GhFEZEZ!@O4R$5a&uWVpc&3X_&Pfp#ZctfrBgNe1N=|>8Sb?N`DsX%Z8v)Q ztZBI$V(1OY@`vOb5`g$z6aJ}e?;EZ(i9In{!s_#rb(00aSWq0%5!RtR<!3!PXwppMxLOQ+1MY%=JEl)CXaVLwx%6*rp<XvwlO6 zPC`!hjRF@%DGsg6`qfV<1B1Y(2y7hYWpHLeq?^;um!*P_{SJmPPsn1zi_h?`Z>vhR zWfJk{IOABcIWq-}3EdfZ9jm1c6nD5Vt#hKiHn;-PDFX$bvtaDZVk@+W(n;VMun`{&vt0 z?nIz-mJ=~|!sWJ)0z)ex!||)QD}~Vyy$a^M_2)>+=D9zvzfxTF3{%wVy({<}WATG6 z>n}^&Eor|aIpSXR;gsCBztup^bCYu+N0 zJct_ZbOKJ;D||C?;35EZ+nw}C(l@3Z>RruLCmR(XAL37aE0dknj{UH>&YF*Tpeqd^ z!a@l(3QU#+Q!c3kmKgto91qPm1oIOADW+IldH;fi#P0JgA!Y; z-Mgrr>1zmnL61hiFa`gIhOFUh0yxMQCk%8oYPu5-SFCrf8yfStg1C?2X6DXE`<;n0 zN&jaceH^r%1}=vJ+alE%6DYU~r-qAu1a3pYRQLty*7Bg0xIMZ+@HrN2i(JE3Iu4rs zXjP1Zf`EWPf_AIFV$K;3UMkw712{C@GJx3si&oSB&nU^gttT=X--N98_}kO=N!C}@ z>acRf+h}3XCZfrFSY)6Lr^VNof#G52<;o|x;`gyn6@EWMe`8-IaT>aQx_#5@Bw+Ds zbivMv0(bv>UmM-MdUzJV{4DSvdE95+m!aQMWmQ~dYHvMEynY|?Py zp>97NJ3eepH|9S|Umcfx zWy-y3XvxHJELlFNRi#l_2;4hLZGyHMcNHJ1)Zo~v7d<36>*9v^+pM(r$nNpx37_jp zwKF@1y>VMb|KoHlhK$(e8xRd=%$qN%$`#ht2~*Kk(|WtCYEC@qjPp6kNVP;Nz8)FA z7mNzx`{!Hx?8SXeS;4C`tMp7&L zX8co?gV2iqhC=NLJU?@x_QqBsh@XJ^sGO;gt4Pr!S*_OS&IDH{AhqDed3Rw4M)}Jr6(? zhcVOX7QJ#4DSe6lGu^>@4C`8AvEM3%L;bPKYK6D|t{no~3tSX#tClyM8jem6NKD%m zSh1gBh-v-vy`)(E*3}();-!W?Ok3Y>r(*Go3hqiYA`{x|x0?~U$4!ND=@#xQ`h5@g z1IV6VB;+%ytvvYKuere{^^(A_{vVN-`(JJ^xDKhfu*^>~KyVEqxCeK4-^JYmiv$Sn65Jt#;10`R!7T)L2oe@2SQ21y zSzPYs{eItn_f}2SOwCkv_w;$X&(xgL{Y)_#uxewQJ-aL2HP2L;108viB<1prJ5{gZHX_c zMEtPFbFDl|Zq~5P%ZJg28p(eTgm52m48q8}E8mR&#M4TJk`QdcYnWE^?YkPg$^ne#settH;~W!QT|<2;zv_U_GcgpIyG ztIE85*l2sCI(h44LCHe^BRotWADSBQ#)Ao=xZ6r8l^7S*CdO0#t*pgK*Z7*mjeFEl z8d_OyuaNtonZpAS$cFh!jSqxO-AtoTDeNpyr9ug4dqv;Dz8sfi52>4#nmdoY#(Yxi z_zFk}QN4c`1OF41lId9z4s|4%NuIopjA)SHlfZ>%cM$e|Veseu%u&++s{NShX&{*A zqa0{Y-(G^CKWcWB1+?XCaUk-M_=seKE##Unpz*i9NUy{wb7wdowlsH!jMgE;sQff) zs3wE?g8t4Gt-q9Nkq9P?1aEg_>`DwnTRBv!(8y$zUb`~~G(=lD2d1;zPhQ=(jotb%3O@{=^rPSWIlXbI{i|Yfe`~fhH6Z z!2KJQE-9w1y3taERC198)E8a2G+Fx8C)PXe_@%|pQz57V5ch2V-8U7*1x1QDxw%_e;kTWNu7E zPeNt*HAlzUEDm#(K(z*i+AvEAr5Oc_zxtI{R@hx@pR;}Dw_a-G7YGMw?nIghzT+oo zERmVojP>tf5NyyiG%2w@{#eKjbfD^38%m8owmg$}azxUEuN6BDn#3iuO! z_xTA3-?3hQ7yDMJ_$$sgQv1b>2=?PdWX_5R8D_WpR?{;*b=Gtkq;B*Ah7MGxN@65< z&5p!>Es>(rt~Pq$1+{*HnwdrQnAw!-;c8G*eKhLgnx3UDo$Q!V3{{xn<_tydnYpfy z6wc-Bug;XsV5fGuV|foN`~<;Nh}5nJ;${-x8IY?AZc7#hio2R+Nd__RZ^ zyEoPK=Yh!#X`6kq-$U9@d))B_CZd~>5G{@)&DL68!y`iNRorU-MKtDVRk{~XLgf%a z_GY&&a){HJvs|t8X5TdSx55is$n7{$2m&u7U%`sQ1lkA3kb*NxOGQQ?d6;-MoapTh z*#7CA@JD!SpxU`*sW?km@hoQ%h0dh8p_DgEh(QasdEI>)7Uv^_p2(=g43su!edQyO z0SQb_DrCkXI2UzZs_14?Tby9hmo&Aqu*-m_Q`6x76+!Bfsye))q$vaWeW%uh5vLHE0Ea%`}3)GmZ_I`*`!nahD3%}QxD*R*-}-ns1Egs`J?OY02!)tRIH+~2G#Z4h8W2h>F`?+=@7 zV&IZ;o>$)RUirSsUea`8qz9ZGr+kke z2ppbd=tHm$+Yk6_>y#^Cpjd>dh@zbS@T%+jk5>nKT*MTKqG(Tn=EtYcq|HeNlt3Rm z7b_no`rG8ML`>h>_2}c!@8_v4C{kj4Ff-w@(?1u96aKQh1r-n45}nI+v~`ivrDXUu-Vh1PpOzF2ruTDh2lV-h8&zcE3h z@}O38Jx-HjRxg;s+rtXwwc`5$XMP$^ES0i)Yv_;0<%6;((tqkMa9nVp4-IR@)(`Z7iQM9aB}r^ZS0ZFj{*n$~J>z-L;~tg4LO5%H5` z)>g)Xo5?}Ip;+o@9cOjHTXLn}i7&5Q7iUEuZ`Ibe{+EhBe*CKj6m$TOBoWMD!9m$C z4_X8d0oy*jn5I9Ip=RLAl+m3uLMG3Ma;^jjenV!t8-sC_P#oi7lj2L6NveiUDGm~C z4he#q*p4jygstiF{??N9&pVFpnAn!I4#babPd_-#3>{iXVpy6d)2A0yYKF=Fl0>>Z zF2-`DFIm5s<)brOQH9K29Mcvf#uFVM5*M`7ZFw9qaU~E}DT|#ePHxHbwH-C3^w-)6 zmabKAH_g`H89(8t*df%$*5(Vwq};x-egzEm>@zrT4h;34*(89Jq9(KTd=(D^AIX?2U;&f{H{838&xG|2iKOq$p&kBR#*z} zm+Hp!K+_WY;(q7Lli>@i#GOYGbulAux;6PibNq zg!frbWe$>tVilt%J6F~dFAA%uHpQNT$0g-E0S`yGLA4TcLK(=XB{A=Lg*{&#s2*P4 zK48A8T6`mP5Nd`r#^9*td{{jA01fAXs; zAQIM=fAVMq9S{R2s3U`{u9@DgcxgLGKRx_aXLKd(x#t`^meyP^3&l(*{M#lo2)eW*>0454mA{JhX~}ca z&3s_kuR>1IXF7{K41qn zl85A2tnFq4()|a;74gl3ZP&28vM|D#mi8UVb$1CeNfk#zxrg#{otaI85IOVHR)j`x zn!Fjj=Zwv~^5yy6mwV|Ebf~Z_$4KTaZDt#Vmomi^5cU#ukfWMbL#r$_l7R%~hAP*h zWG=tOJ|US|pCk~guj^M@|EB*{aILubtHFLQt&Cf6TJLj0H%Eu}T@bd^Qcf46#2Y|L zhc5ayzNItGe|+AmSGvegxRjE;Bv${9&VGfcAkP8$MRoW)jQKtK70&p)P7L#7nD-U?3cr# ze%9A53tc`xo=JWms=TD6d;V0PEzi)+E{w+ad@eSb7<)6VQ14PR4?`>{wHp2hEMl1_ zqDw87$rX4xT^U-eZ7~j@M>Z4PzVKBcb{(b$uOL%1Qdy$L!cgZCOQvBWW1>lu#!&ki=OY=Pm%d8?Wv&ubq<|m5!$KG6HFb4}W+2F%3kX z8L88V=`v%$-6}TnDmhPM%`B{&4566Zd-Gi8oJX2i4$(^Dv3rKpZ1}1WV=eq-3KNNgqb`#Swccu*Oe2?%wdkaB zi;9%#8>0NvD!KU+8kdf@;ia4O%N(ABct4U#&;C5v4Qb;i=l*~YHe~Fzqtcz1>>t{L zMx{Uleh<5U+AkS1BKxJD5t7JdU%Dew?7GVwe`?)xvKoA`sgpQJ$IR5y8+j%XE?`TT zjNT$K2xV|ObV-q500MEKpO-K|l3RW;O*rpT4$&&?DOcYw`GAOAsu!8>ahFexU&p`? z<^+n2{`h-TtCw29@2L9_g!$5xF_7MBPfD13{Y8t?zyATwvQ1tYWBT)}O%osZJYwga}B>|B2%YM5h5&r1cdv@!(_FG!&txa~tuHL29 zjv!Ug`?h9$*zHqT7y>f&?mNYs00L(!0Hv6D=?B}5zU|_ zUTl)6Swlio(C&mIUrq~kv91IgWAJum7*Jb^4J?`0aCDWgCsa`P3WIl ztI$tC(C54`hW9-(LsH=qJZx&zGeE91r1&x}yG+ah<}D zBKGGm+;MQDLz&fH>VCo?7g*^R#xjCSZ*wtR>6Nl0Cesz$Jbm0;cxessk zHA5|dgn`tF4Pc+0mur@Yd{y^#_Lq|j5w~lbMVo&EFp>cr9e!;KaFouNO7d+9M8`9f z9!#1Y1{nQ3{TW;gXVT$MK?+C)NZAli-g}k|#Hs%RT!g$2yzaZhh%b(dRu4t#HgW_}3Qpbc8VBfmDa{+XFqfCe#oFE3 zMB0g6tj}r!Pj-Ie75gw#buAu-+m;-kNMtKu& zpG);^nSftGofPyN0Xpuo7J?eH!ywAyar0}k z#=4%iJys%~*R;`mq%RcW>nf_yao(u8zCf{3lKkZD9jNwCqb;L8xaG%}%?2&fu6MC~ ziUdqQZs7aWzbsSh_G2!;Y<8R$C=BZY7tYi7SqwWsb7JFYGrg>HhO&!-3T#^FYbHO{P6>~rN6zN}2!)`I_yl9$oQhURT6QGOUhIvtIu z!Ab)>C8o=D9Z~5=?6eJskIG8_dlN6Nt&Fx7U#^_&Ui>X(jhC#(idjI*J@azJz=`Wh zwPay#)Aufdq8A97W>=wwr2Pol<>Wl?BK_OX`ZyP4k*|>$g6pIf19fYws3kLTztao= z!)b}tNo{2Iz-qi`%c1_tl2_>GIxQ4cV=tObm2A!LB^2{_W=RGA19~aE{o*v8xXwzI zb}Rl9z@&{sSvR3r^pWl+kn+`3OBAIaBcEsZ6oR3Ha>l#q@PXv`Bmu4PvXn!e>JYmkbXr(S&)W zsX$Fy2gXV}vCJ*J6awpLovFgO27?IlJ$}71#j)GKX!5mHnB)KSoa!RZbj;ztX8QwN zRIeG%ZK|g0%HZ57b9FWFq~s7*CjqIbBkl$yShQf9-$ay1nC&81O)F@&e&|fp_>*gj zvQFRP$EIH%i&Uo?`td0Cor%f%-98<wRG)l_F6$@%2}RS$ z;M?a2R{6qp|1IL+14YUqN;y@Lrf`DI>HHFU@R!S>m zc4{ghf$Nq`MtL`CmU>OXGO7X>mBamO%Pt2QNTxlMVdxd@@xROAf-G#- zL(BYCD2BSQeUjIRR%*$i1Kv4v{c1&SBzr8Io(DIW|9*e-v(iiU>g{f#?+U42lEeHy z^{MxuH{Zt$Y9UIs2Lta+x8REZB^QS4iknvm59%Wewiwf62cW^W#j)~cNj*XTP2If$ zYt%nfvdZGYa{V0Lr21l29!t0i23w2J!Qla1A_;HkP=8spr>24E3I3Yq28F&yGeZ5Y z{$D~w#@NU#Ru=>C{S0uk!6CF1G zGnU^x!;hAq9VX(RY6)V*su+61q#Y!Cqj*oY#`teY>QnOp%MuQCmkkY4Wxl1x*+lYv zj;dNnaDj8q^j2N2KiGLIUUsYiqKlrsA*0*oUz_wE#KPWh(;CegX zrrZY2pH!h0&s}>9--{v2NVRI4_UA!sizgrHCZ2;ZfAuM%MNzIG+Z8IZ&X$EN=fUQ^ z=RO$pLyb=$WO_d~v7VB1R#KE%#Ys*suMFjsoeMm?nN?H-h`1fNaUQ9VL^0SEG!0=;dmUvI9eI>0mx#+{yii}6eR@QujS-uzZ4 zoJ)+7{y1I3S9EuV7V}-K+;ZtBPHs)}$t#8~hOY^Wm+Jcwn&rO+1!qT(jdVVJ!bG(~V;a7%?>G%)sW z1@Zsk!}^Tevr9Lk$jz%b_q*tGs@{Irr(d~wtDUmQ+V@mJ2yG_#&hYs zL=U6y-SD3mUq9SS1aFd+X9EXzx`@~XkTc)^^>Q!>+~Bn%7Sc*qb8LHP>W%66RTFmU zB818W{1oey5q&BVfWe9<`qdO>C^);X{^bta*f12(?Z*oVkCq5XC*VPG{Hg#O7roWI zZXL$)nG?JslK8PL-fcjlXVC!=Mq8qH^%XKW*&^LWzlrl*rLMv+u`zl=S0X_Vf$@N% zm-2I{{_B%va4y~7{9{oskB`+=DzJw#h$u+CZdf#7ymhgIXY5f6HoDv4tk+2_0IrpT zxsLKSS1j>@gKaVyBKA-t_8V%6G14O#$Fj2lK`>YLZq%ka%nRBszi%l+_3Chg4HQlI zH4a$~=T`}LuJ$9yi4_U0n(X_gjIvNYde%60jFw}Hm~&zc+-dU6at0-mEV zZS|B?I{Y(_g0G8+=;+;)?abMx%dIlm{!lFGE+VtZ$%1=P1vss9Ty#%eP;@=_O@Wa; zgSJ&@Ict2D&>*+!Tmj@WK3IZeutICmbg!2Purs@47zDh!1wNO+(X7^r3S4D~O(J;x zKdspKFjrKTQ`2?eDspoDUBgg$A^>iR!lgB+k+ips_7QBCq{HOgTq*mFteVoijt-kb zO-uto5)Q+-y-NEiyIStnZBOYqwRH}v&=s?QU*RKdXuys8SS@}tEg~^V?~5Z zIvyhryxbY8?BFELBLG;veXc1Vtd6hDh@ z-29|5)?5CCflUzgudO6h;U1h7%;!nHUkvFJu=q1_Lvo+##{dR3=`4_gN)ns8RAxzd>NMLLhgRN|2?8e&$V!STGsXoIJa~jN|H-&y_a-+3ES46Tn@XcQ0;7i5NP!*UR?N6gC1qC4%&-^joFXqjA zT8Kt&vq}+^us4qWUt=OFMB+axvAh=7qwEhk5aMZp2ER$iy{iD|W99HP*l4_Hyro|~ zsYU&iCc5}dVvO*7`;U~y5~tl|@;duv7>5Gvb_69}HXWCR-=`8XH}%?R{YJuHV-?w@ zFY1AgpMt*Z<;)(te#Lw-{N5OxFP%K`0lP*K#+xPA=}+QrBJQ?P(N1U4rq_ghLNRr6 z?kc#b(XEsFmaPKs&&OfMF%xs$_87x2ijwh%yXv-)#_gYr;N_@0(FN!j!KVqpZZlRw zN_!!sfv`!Y$V@9P%)O@FEEG7KYyp0$H!qoYzo`N@QbBbomFG2na1pwg-q(sB{0F1l3(zOf@iCm=7#IOR_^@Q8N= z&Ml9<%NuUd*M)Jo0|f{_zpFX)u*B&U38k*XjIt@UA!-YcU3^- z)XFFl9^_z(Q)CsCfWWO!A;dyC<5kL!X;?PkE!L(E<6ECc_Uzj$@4`i}J46}5tlkZU zPG>57B5wU&3l7{a=A)#QNHCVXc;_c=cZoCv_5|B>Ft8Tl_bHk)ssDcl7eYp&NY~Z$ zr3Jy7k4GF>g5XE2U(hTU-8U0d=olZE*7Vvn!PV41fDFJzN{SjbtlPyGELHm8)`oMeB z#l=Zaf=XYvODdSTVTz)G;4X>T;dDEM7-oDV@Y7g!4tYI`6$@{vl-v`hpiPT|FLB^p z|8*4O8m~?6m_SK@&JpSIHp%8yEtl7L#!Gx3-hj5(Rlc*0EV_|#W)iF{r3GhWzrX9L zO}^-Nn-$j#32>1AaS-?2sUs;^S_yG}izE_OGTS;KH@rLrnBUIy10@f86i>E*4Rdo@on&Ju)3qowPW);wPgA9bKC!s|O{zfyU-9 zzD16EWv}%PF6nae!ze*cc3cFZ?c30Ynb`OxjU^uMS|79vpnO@|nWi>=X!A1yEx_~b zq+H-SG$_p3cH5eNE-plk6S-;qjHI!hBC1|ec>+6QOoI{7B|BP&(o_wG;j*zVS}#j7 ze$(WQhu=Z?9{SyrM9WtKBRaT-d^c9;ik1v7+98H9ieaPNlZK2c-mnwgeSeICk9CJzNfnY(Q+6yQa?DtoK!=e(BwDJdI9_$5~Vb zCKx#{4uec!>z@4a@WqyI{#kJIK8YW%U7wXU-d-?yNB^fdGa9MbIFXk!)|N3eoTKZ& zNYuzkveyjlx9wHDT8N=dps!iDuOmHgkA{1>D5-xUe>18 z)Daj52YZ|{bW8Iq@;e9t4j+O+;y-Q!gBa~Gl+K?gTK?*&_RtoW?)c53&Z61qH=_HC z8k~VHsnprGwZ(h$%&k+kufsoZqu4LjD@ON9C(jP?qMZ3C38>&;$bTD?gk;f3?ElQG z&!wCyS`0TV66g@Jiq_f}V9m^gVs`k`c%>9Bgqt$k)|mMrn}QWBEtpmKwSc!ID#Neo zWSqU5j7&}TpmrUN$6gWZ@Y1NuI7OK2(^9y{vR(S!^~1wMF3zX8Z~673OU_1>!ozkQ z9#Tk#3>M5FZBWPL%e}y}0O;JF=MVHTd2>%67q6!5eX9-+vL)ND#_pgKs1dC!$7tYB z8clMdx8>H$`(qIjVKYdY4VIdJOdNDwoB(~L^u?W(f5Ywc+chK;M;2|z!~kLispnH` z^H@*?&pG8~u~9H#Gf@+CkJt7|dDUKoieJ;X7mk~);336rY2Vb5D~MXMJ5N|!h2u-N zwhH4{eJ||^uidEz$_8`4r@*{CKi$3u!YSxv0(}x95yc22X;zK-zUor)vcX(NsB6hd zk(jXI#o?3UL+V4rM@rnm4Nw*pMd1E^@t0HYbL)_w=oVz3;sn^I{RO(SOH(%lPxFIT0+6 zb1d_Cm%ZLJi>$+>Q%*XF9^iQl%?Z_f66@GA`O?PSL UZ*U(VH!-3p%WKHh$XJB^AK^!-PXGV_ literal 0 HcmV?d00001 From c94c226ec1d9e9f0a629a3da878b594667ce6142 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Fri, 9 Mar 2018 12:19:02 -0800 Subject: [PATCH 545/993] Remove type from google assistant --- source/_components/google_assistant.markdown | 27 ++++++++------------ 1 file changed, 11 insertions(+), 16 deletions(-) diff --git a/source/_components/google_assistant.markdown b/source/_components/google_assistant.markdown index afd653b7dc..70b3937a32 100644 --- a/source/_components/google_assistant.markdown +++ b/source/_components/google_assistant.markdown @@ -41,7 +41,6 @@ google_assistant: aliases: - bright lights - entry lights - type: light light.living_room: expose: false room: living room @@ -102,10 +101,6 @@ entity_config: description: Aliases that can also be used to refer to this entity required: false type: list - type: - description: Override how Google Assistant interprets the domain of the entity. For example, set to `light` for a switch entity to have it be handled as a light. - required: false - type: string room: description: Allows for associating this device to a Room in Google Assistant. This is currently non-functional, but will be enabled in the near future. required: false @@ -115,15 +110,15 @@ entity_config: ### {% linkable_title Available domains %} Currently, the following domains are available to be used with Google Assistant, listed with their default types: -- group = switch (on/off) -- scene = scene (on) -- script = scene (on) -- switch = switch (on/off) -- fan = switch (on/off) -- light = light (on/off/brightness/rgb color/color temp) -- cover = switch (on/off/set position (brightness) ) -- media_player = switch (on/off/set volume (brightness) ) -- climate = thermostat (temperature setting) +- group (on/off) +- scene (on) +- script (on) +- switch (on/off) +- fan (on/off) +- light (on/off/brightness/rgb color/color temp) +- cover (on/off/set position (via set brightness)) +- media_player (on/off/set volume (via set brightness)) +- climate (temperature setting) It's very important that you use very long strings for `client_id` and `access_token`. Those are essentially the credentials to your Home Assistant instance. You can generate them with the following command: @@ -162,8 +157,8 @@ If you're not using Linux, you can use sites such as [this one](https://www.brow 3. Create a new project in the [developer console](https://console.actions.google.com/). a. Add/Import project b. Go to Build under the Actions SDK box - c. Copy the command that looks like: - + c. Copy the command that looks like: + `gactions update --action_package PACKAGE_NAME --project doctest-2d0b8` 4. Replace `PACKAGE_NAME` with `project.json` and run that command in a console from the same directory you saved `project.json` in (you'll need to put `./` before `gactions` so that it reads `./gactions` if you're running it on Linux or Windows). It should output a URL like `https://console.actions.google.com/project/doctest-2d0b8/overview` - go there. 5. You'll need to fill out most of the information on that page, but none of it really matters since you won't be addressing the App directly, only through the Smart Home functionality built into Google Assistant. From 7b50670f2399caa02df7d777dea9803d8d403337 Mon Sep 17 00:00:00 2001 From: Jonathan Weinberg Date: Fri, 9 Mar 2018 15:39:40 -0500 Subject: [PATCH 546/993] Case Change (#4870) "Home" in "Home Assistant" should be capitalized. --- source/_components/panel_iframe.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/panel_iframe.markdown b/source/_components/panel_iframe.markdown index e80d661707..71ba4b2aec 100644 --- a/source/_components/panel_iframe.markdown +++ b/source/_components/panel_iframe.markdown @@ -15,7 +15,7 @@ ha_release: 0.25 The `panel_iframe` support allows you to add additional panels to your Home Assistant frontend. The panels are listed in the sidebar and can contain external resources like the web frontend of your router, your monitoring system, or your media server. -

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

    +

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

    To enable Panel iFrames in your installation, add the following to your `configuration.yaml` file: From cbf2d2e412b6a8d3858193593af21182fb208605 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Fri, 9 Mar 2018 19:45:37 -0800 Subject: [PATCH 547/993] Release 0.65.1 --- _config.yml | 6 +++--- source/_posts/2018-03-09-release-65.markdown | 19 +++++++++++++++++++ 2 files changed, 22 insertions(+), 3 deletions(-) diff --git a/_config.yml b/_config.yml index f63b8b9ceb..b12b8d00c1 100644 --- a/_config.yml +++ b/_config.yml @@ -140,13 +140,13 @@ social: # Home Assistant release details current_major_version: 0 current_minor_version: 65 -current_patch_version: 0 -date_released: 2018-03-09 +current_patch_version: 1 +date_released: 2018-03-10 # Either # or the anchor link to latest release notes in the blog post. # Must be prefixed with a # and have double quotes around it. # Major release: -patch_version_notes: "#" +patch_version_notes: "#release-0651---march-10" # Minor release (Example #release-0431---april-25): # Date we moved to Discourse for comments diff --git a/source/_posts/2018-03-09-release-65.markdown b/source/_posts/2018-03-09-release-65.markdown index 39aec0f301..ab0851e79c 100644 --- a/source/_posts/2018-03-09-release-65.markdown +++ b/source/_posts/2018-03-09-release-65.markdown @@ -114,6 +114,14 @@ intent_script: - Add support for alarm system, switch and thermostat to homekit ([@maxclaey] - [#12819]) ([homekit docs]) (new-platform) - Add camera proxy ([@PhracturedBlue] - [#12006]) ([camera.proxy docs]) (new-platform) +## {% linkable_title Release 0.65.1 - March 10 %} + +- allow ios device tracker see calls to go through ([@balloob] - [#13020]) ([device_tracker docs]) +- Fix config component loading YAML ([@kellerza] - [#13024]) +- Make Throttle async aware ([@balloob] - [#13027]) +- Add support for input boolean to Google Assistant ([@balloob] - [#13030]) ([google_assistant docs]) +- HomeKit Bugfix: names ([@cdce8p] - [#13031]) ([homekit docs]) + ## {% linkable_title If you need help... %} ...don't hesitate to use our very active [forums](https://community.home-assistant.io/) or join us for a little [chat](https://discord.gg/c5DvZ4e). The release notes have comments enabled but it's preferred if you use the former communication channels. Thanks. @@ -602,3 +610,14 @@ Experiencing issues introduced by this release? Please report them in our [issue [zabbix docs]: https://home-assistant.io/components/zabbix/ [zha docs]: https://home-assistant.io/components/zha/ [zwave docs]: https://home-assistant.io/components/zwave/ +[#13020]: https://github.com/home-assistant/home-assistant/pull/13020 +[#13024]: https://github.com/home-assistant/home-assistant/pull/13024 +[#13027]: https://github.com/home-assistant/home-assistant/pull/13027 +[#13030]: https://github.com/home-assistant/home-assistant/pull/13030 +[#13031]: https://github.com/home-assistant/home-assistant/pull/13031 +[@balloob]: https://github.com/balloob +[@cdce8p]: https://github.com/cdce8p +[@kellerza]: https://github.com/kellerza +[device_tracker docs]: https://home-assistant.io/components/device_tracker/ +[google_assistant docs]: https://home-assistant.io/components/google_assistant/ +[homekit docs]: https://home-assistant.io/components/homekit/ From f0d0848baa57dfbc10b371a94809be3b4acff712 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Fri, 9 Mar 2018 19:54:03 -0800 Subject: [PATCH 548/993] Add input boolean to available domains --- source/_components/google_assistant.markdown | 1 + 1 file changed, 1 insertion(+) diff --git a/source/_components/google_assistant.markdown b/source/_components/google_assistant.markdown index 70b3937a32..2430428efe 100644 --- a/source/_components/google_assistant.markdown +++ b/source/_components/google_assistant.markdown @@ -111,6 +111,7 @@ entity_config: Currently, the following domains are available to be used with Google Assistant, listed with their default types: - group (on/off) +- input boolean (on/off) - scene (on) - script (on) - switch (on/off) From 34a77610e03c74241e049a2f48cc490d67218d60 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Fri, 9 Mar 2018 23:57:50 -0800 Subject: [PATCH 549/993] Update docker.markdown --- source/_docs/installation/docker.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_docs/installation/docker.markdown b/source/_docs/installation/docker.markdown index bc7b0998cb..ba89ccbf46 100644 --- a/source/_docs/installation/docker.markdown +++ b/source/_docs/installation/docker.markdown @@ -20,7 +20,7 @@ $ docker run -d --name="home-assistant" -v /path/to/your/config:/config -v /etc/ ### {% linkable_title macOS %} -When using `docker-ce` (or `boot2docker`) on macOS, you are unable to map the local timezone to your Docker container (see Docker issue https://github.com/docker/for-mac/issues/44). Instead of `-v /etc/localtime:/etc/localtime:ro`, just pass in the timezone environment variable when you launch the container, ex: `-e "TZ=America/Los_Angeles"`. Replace "America/Los_Angeles" with [your timezone](http://en.wikipedia.org/wiki/List_of_tz_database_time_zones). +When using `docker-ce` (or `boot2docker`) on macOS, you are unable to map the local timezone to your Docker container ([Docker issue](https://github.com/docker/for-mac/issues/44)). Instead of `-v /etc/localtime:/etc/localtime:ro`, just pass in the timezone environment variable when you launch the container, ex: `-e "TZ=America/Los_Angeles"`. Replace "America/Los_Angeles" with [your timezone](http://en.wikipedia.org/wiki/List_of_tz_database_time_zones). If you wish to browse directly to `http://localhost:8123` from your macOS host, meaning forward ports directly to the container, replace the `--net=host` switch with `-p 8123:8123`. More detail can be found in [the docker forums](https://forums.docker.com/t/should-docker-run-net-host-work/14215/10). From 074bc50664aaf2e344989472f6fda24a38179e7b Mon Sep 17 00:00:00 2001 From: Timmo <28114703+timmo001@users.noreply.github.com> Date: Sat, 10 Mar 2018 17:12:36 +0000 Subject: [PATCH 550/993] Added three new sensors (#4873) New sensor documentation for https://github.com/home-assistant/home-assistant/pull/13026 --- source/_components/sensor.glances.markdown | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/source/_components/sensor.glances.markdown b/source/_components/sensor.glances.markdown index 03b25369a7..77b8701146 100644 --- a/source/_components/sensor.glances.markdown +++ b/source/_components/sensor.glances.markdown @@ -58,6 +58,9 @@ sensor: - 'process_thread' - 'process_sleeping' - 'cpu_temp' + - 'docker_active' + - 'docker_cpu_use' + - 'docker_memory_use' ``` Configuration variables: @@ -81,5 +84,8 @@ Configuration variables: - **process_thread**: Number of threads - **process_sleeping**: Number of sleeping processes - **cpu_temp**: CPU Temperature (may not available on all platforms) + - **docker_active**: Count of active Docker containers + - **docker_cpu_use**: Total CPU usage in percent of Docker containers + - **docker_memory_use**: Total memory used of Docker containers Not all platforms are able to provide all metrics. For instance `cpu_temp` is requires installing and configuring `lmsensors` in Ubuntu, and may not be available at all in other platforms. From 12c19480ecdd675c48d5c4c6f11a465723c490c3 Mon Sep 17 00:00:00 2001 From: lizaoreo Date: Sat, 10 Mar 2018 12:13:34 -0500 Subject: [PATCH 551/993] Added icon property to one of the examples (#4861) --- source/_components/weblink.markdown | 1 + 1 file changed, 1 insertion(+) diff --git a/source/_components/weblink.markdown b/source/_components/weblink.markdown index b19f321955..a816180fd1 100644 --- a/source/_components/weblink.markdown +++ b/source/_components/weblink.markdown @@ -22,6 +22,7 @@ weblink: entities: - name: Router url: http://192.168.1.1/ + icon: mdi:router-wireless - name: Home Assistant url: https://home-assistant.io - name: Grafana From dc8c5ee19d508c285d32b0b358ff31bfcf053235 Mon Sep 17 00:00:00 2001 From: cdce8p <30130371+cdce8p@users.noreply.github.com> Date: Sat, 10 Mar 2018 18:14:23 +0100 Subject: [PATCH 552/993] Updated git diff statement (#4877) --- source/developers/development_testing.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/developers/development_testing.markdown b/source/developers/development_testing.markdown index 9884120e0b..14dcf03c57 100644 --- a/source/developers/development_testing.markdown +++ b/source/developers/development_testing.markdown @@ -54,7 +54,7 @@ $ pydocstyle homeassistant/core.py $ py.test tests/test_core.py ``` -You can also run linting tests against all changed files, as reported by `git diff upstream/dev... --name-only`, using the `lint` script: +You can also run linting tests against all changed files, as reported by `git diff upstream/dev... --diff-filter=d --name-only`, using the `lint` script: ```bash $ script/lint From 071af99b2bd27fb74b7a470b5b0794e098a0d376 Mon Sep 17 00:00:00 2001 From: Marc Forth Date: Sat, 10 Mar 2018 17:15:21 +0000 Subject: [PATCH 553/993] Update persistent_notification.markdown (#4875) Removed the note as it is inaccurate. --- source/_components/persistent_notification.markdown | 2 -- 1 file changed, 2 deletions(-) diff --git a/source/_components/persistent_notification.markdown b/source/_components/persistent_notification.markdown index 2f96756ea9..fbf07e6deb 100644 --- a/source/_components/persistent_notification.markdown +++ b/source/_components/persistent_notification.markdown @@ -67,5 +67,3 @@ Choose serv
 }
 ```
 This will create the notification entry shown above.
-
-NOTE: if you have defined a ```default_view:``` in your ```Groups:``` configuration you will need to include ```persistent_notification.<notification_id>``` e.g. ```persistent_notification.1234``` as per the example above, to your Groups configuration, in order to see the notification after creating it. 

From 91128098c548c6e78d5ee7295daae6d7a5145d10 Mon Sep 17 00:00:00 2001
From: Paulus Schoutsen <paulus@paulusschoutsen.nl>
Date: Sat, 10 Mar 2018 11:05:09 -0800
Subject: [PATCH 554/993] Release 0.65.2

---
 _config.yml                                  |  6 ++--
 source/_posts/2018-03-09-release-65.markdown | 35 ++++++++++++++++++++
 2 files changed, 38 insertions(+), 3 deletions(-)

diff --git a/_config.yml b/_config.yml
index b12b8d00c1..eba059a977 100644
--- a/_config.yml
+++ b/_config.yml
@@ -140,13 +140,13 @@ social:
 # Home Assistant release details
 current_major_version: 0
 current_minor_version: 65
-current_patch_version: 1
-date_released: 2018-03-10
+current_patch_version: 2
+date_released: 2018-03-11
 
 # Either # or the anchor link to latest release notes in the blog post.
 # Must be prefixed with a # and have double quotes around it.
 # Major release:
-patch_version_notes: "#release-0651---march-10"
+patch_version_notes: "#release-0652---march-11"
 # Minor release (Example #release-0431---april-25):
 
 # Date we moved to Discourse for comments
diff --git a/source/_posts/2018-03-09-release-65.markdown b/source/_posts/2018-03-09-release-65.markdown
index ab0851e79c..a5da8e3b6d 100644
--- a/source/_posts/2018-03-09-release-65.markdown
+++ b/source/_posts/2018-03-09-release-65.markdown
@@ -122,6 +122,18 @@ intent_script:
 - Add support for input boolean to Google Assistant ([@balloob] - [#13030]) ([google_assistant docs])
 - HomeKit Bugfix: names ([@cdce8p] - [#13031]) ([homekit docs])
 
+## {% linkable_title Release 0.65.2 - March 11 %}
+
+- Fix translations sometimes not loading in the frontend ([@armills])
+- Fix sensibo Date: Sun, 11 Mar 2018 06:43:29 +0000 Subject: [PATCH 555/993] Correct linked page on wildcards --- source/_components/sensor.folder.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/sensor.folder.markdown b/source/_components/sensor.folder.markdown index c2b7ae330f..dc6951c531 100644 --- a/source/_components/sensor.folder.markdown +++ b/source/_components/sensor.folder.markdown @@ -13,7 +13,7 @@ ha_iot_class: "Local Polling" ha_release: 0.64 --- -Sensor for monitoring the contents of a folder. Note that folder paths must be added to [whitelist_external_dirs](https://home-assistant.io/docs/configuration/basic/). Optionally a [wildcard filter]((http://tldp.org/LDP/GNU-Linux-Tools-Summary/html/x11655.htm)) can be applied to the files considered within the folder. The state of the sensor is the size in MB of files within the folder that meet the filter criteria. The number of filtered files in the folder and total size in bytes of those files are exposed as attributes. +Sensor for monitoring the contents of a folder. Note that folder paths must be added to [whitelist_external_dirs](https://home-assistant.io/docs/configuration/basic/). Optionally a [wildcard filter]((https://docs.python.org/3.6/library/fnmatch.html)) can be applied to the files considered within the folder. The state of the sensor is the size in MB of files within the folder that meet the filter criteria. The number of filtered files in the folder and total size in bytes of those files are exposed as attributes. To enable the `folder` sensor in your installation, add the following to your `configuration.yaml` file: From 9863a765678fec62b22f3e90f4d88bbd64624bc2 Mon Sep 17 00:00:00 2001 From: bottomquark Date: Sun, 11 Mar 2018 14:29:44 +0100 Subject: [PATCH 556/993] add more examples and clarify calendar.caldav --- source/_components/calendar.caldav.markdown | 69 ++++++++++++++++++--- 1 file changed, 62 insertions(+), 7 deletions(-) diff --git a/source/_components/calendar.caldav.markdown b/source/_components/calendar.caldav.markdown index 6ae9f8c36a..205e9933f8 100644 --- a/source/_components/calendar.caldav.markdown +++ b/source/_components/calendar.caldav.markdown @@ -13,11 +13,11 @@ ha_release: "0.60" --- -The `caldav` platform allows you to connect to your WebDav calendar and generate binary sensors. A different sensor will be created for each individual calendar, or you can specify custom calendars which match a criteria you define (more on that below). These sensors will be `on` if you have an on going event in that calendar or `off` if the event is later in time, or if there is no event at all. The WebDav calendar get updated roughly every 10 minutes. +The `caldav` platform allows you to connect to your WebDav calendar and generate binary sensors. A different sensor will be created for each individual calendar, or you can specify custom calendars which match a criteria you define (more on that below). These sensors will be `on` if you have an on going event in that calendar or `off` if the event is later in time, or if there is no event at all. The WebDav calendar get updated roughly every 15 minutes. ### {% linkable_title Prerequisites %} -You need to have a CalDav server and eventually credentials for it. This component was tested against [Baikal](http://sabre.io/baikal/) but any component complying with the RFC4791 should work. +You need to have a CalDav server and credentials for it. This component was tested against [Baikal](http://sabre.io/baikal/) but any component complying with the RFC4791 should work. [Nextcloud](https://nextcloud.com/) and [Owncloud](https://owncloud.org/) work fine. You might need some additional system packages to compile the Python caldav library. On a Debian based system, install them by: @@ -30,12 +30,21 @@ $ sudo apt-get install libxml2-dev libxslt1-dev zlib1g-dev To integrate a WebDav calendar in Home Assistant, add the following section to your `configuration.yaml` file: ```yaml -# Example configuration.yaml entry +# Example configuration.yaml entry for baikal calendar: - platform: caldav url: https://baikal.my-server.net/cal.php/calendars/john.doe@test.com/default ``` +```yaml +# Example configuration.yaml entry for nextcloud, calendars will be found automatically +calendar: + - platform: caldav + url: https://nextcloud.example.com/remote.php/dav +``` + +Note that all day events only work for custom calendars. + {% configuration %} url: required: true @@ -51,7 +60,7 @@ password: type: string calendars: required: false - description: List of the calendars to filter. Empty or absent means no filtering. + description: List of the calendars to filter. Empty or absent means no filtering, i.e. all calendars will be added. type: list custom_calendars: required: false @@ -68,7 +77,7 @@ custom_calendars: type: string search: required: true - pending_charges: Regular expression for filtering the events + description: Regular expression for filtering the events. If this matches the description, summary, or location then the event will be included in this custom calendar. type: string {% endconfiguration %} @@ -83,10 +92,11 @@ custom_calendars: - **start_time**: Start time of event. - **end_time**: End time of event. -### {% linkable_title Sensor attributes %} +### {% linkable_title Examples %} +Example entry for creating one custom calendar containing all events from the calendar "Agenda" which contain "HomeOffice" in the description, location, or summary. ```yaml -# Example configuration.yaml entry +# Example configuration.yaml entry for baikal calendar: - platform: caldav url: https://baikal.my-server.net/cal.php/calendars/john.doe@test.com/default @@ -97,3 +107,48 @@ calendar: calendar: 'Agenda' search: 'HomeOffice' ``` + +All events of the calendars "private" and "holidays". Note that all day events are not included. +```yaml +# Example configuration.yaml entry for nextcloud +calendar: + - platform: caldav + url: https://nextcloud.example.com/remote.php/dav + username: 'me' + password: !secret caldav + calendars: + - private + - holidays +``` + +Full example with automation to wake up to music if not holiday. Prerequisite: you have a calendar named "work" where you create calendar entries containing "Holiday". + +Custom calendar names are built from the main calendar + name of the custom calendar. + +```yaml +# configuration.yaml +calendar: + - platform: caldav + url: https://nextcloud.example.com/remote.php/dav + username: 'me' + password: !secret caldav + custom_calendars: + - name: holiday + calendar: work + search: 'Holiday' + +# automations.yaml +- id: wakeup + alias: worktime wakeup + trigger: + platform: time + at: 06:40:00 + action: + - service: media_player.media_play + entity_id: media_player.bedroom + condition: + - condition: state + entity_id: calendar.work_holiday + state: 'off' + +``` From 88a83d782323531aea2fc35325e4f2ca12abaf4d Mon Sep 17 00:00:00 2001 From: Robin Date: Sun, 11 Mar 2018 13:46:12 +0000 Subject: [PATCH 557/993] Fix typo The extra () resulted in a 404 error --- source/_components/sensor.folder.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/sensor.folder.markdown b/source/_components/sensor.folder.markdown index dc6951c531..2555b7a0ad 100644 --- a/source/_components/sensor.folder.markdown +++ b/source/_components/sensor.folder.markdown @@ -13,7 +13,7 @@ ha_iot_class: "Local Polling" ha_release: 0.64 --- -Sensor for monitoring the contents of a folder. Note that folder paths must be added to [whitelist_external_dirs](https://home-assistant.io/docs/configuration/basic/). Optionally a [wildcard filter]((https://docs.python.org/3.6/library/fnmatch.html)) can be applied to the files considered within the folder. The state of the sensor is the size in MB of files within the folder that meet the filter criteria. The number of filtered files in the folder and total size in bytes of those files are exposed as attributes. +Sensor for monitoring the contents of a folder. Note that folder paths must be added to [whitelist_external_dirs](https://home-assistant.io/docs/configuration/basic/). Optionally a [wildcard filter](https://docs.python.org/3.6/library/fnmatch.html) can be applied to the files considered within the folder. The state of the sensor is the size in MB of files within the folder that meet the filter criteria. The number of filtered files in the folder and total size in bytes of those files are exposed as attributes. To enable the `folder` sensor in your installation, add the following to your `configuration.yaml` file: From ca952b41cc2f68fb64fd9f6eb18bd90b69a2bf5d Mon Sep 17 00:00:00 2001 From: IainPHay Date: Sun, 11 Mar 2018 18:08:05 +0000 Subject: [PATCH 558/993] Change upgrade homeassistant to upgrade home-assistant Line 40 Change: You can also use `hassbian-config` to automate the process by running `sudo hassbian-config upgrade homeassistant` to You can also use `hassbian-config` to automate the process by running `sudo hassbian-config upgrade home-assistant` as this was incorrect --- source/_docs/installation/hassbian/common-tasks.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_docs/installation/hassbian/common-tasks.markdown b/source/_docs/installation/hassbian/common-tasks.markdown index 73e96a0787..6fddcd360b 100644 --- a/source/_docs/installation/hassbian/common-tasks.markdown +++ b/source/_docs/installation/hassbian/common-tasks.markdown @@ -37,7 +37,7 @@ To get the current state of the `homeassistant.service` replace `stop` with `sta ### {% linkable_title Update Home Assistant %}

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

    Log in as the `pi` account and execute the following commands: From 90cf4205cc0b7420fc9a3d957604a1b5e7e542fe Mon Sep 17 00:00:00 2001 From: Max Laverse Date: Sun, 11 Mar 2018 20:06:26 +0100 Subject: [PATCH 559/993] Improve caldav documentation --- source/_components/calendar.caldav.markdown | 46 ++++++++++++++------- 1 file changed, 30 insertions(+), 16 deletions(-) diff --git a/source/_components/calendar.caldav.markdown b/source/_components/calendar.caldav.markdown index 6ae9f8c36a..ca93537fec 100644 --- a/source/_components/calendar.caldav.markdown +++ b/source/_components/calendar.caldav.markdown @@ -33,9 +33,38 @@ To integrate a WebDav calendar in Home Assistant, add the following section to y # Example configuration.yaml entry calendar: - platform: caldav + username: john.doe@test.com + password: !secret caldav url: https://baikal.my-server.net/cal.php/calendars/john.doe@test.com/default ``` +This example will generate default binary sensors for each calendar you have in your account. Those calendars will be `on` when there is an ongoing event and `off` if not. Events that last a whole day are ignored in those calendars. You have to setup custom calendars in order to take them into account or for advanced event filtering. + + +### {% linkable_title Custom calendars %} + +You have the possibility to create multiple binary sensors for events that match certain conditions. + +```yaml +# Example configuration.yaml entry +calendar: + - platform: caldav + username: john.doe@test.com + password: !secret caldav + url: https://baikal.my-server.net/cal.php/calendars/john.doe@test.com/default + custom_calendars: + - name: 'HomeOffice' + calendar: 'Agenda' + search: 'HomeOffice' + - name: 'WarmupFlat' + calendar: 'Agenda' + search: 'Warmup' +``` + +This will create two binary sensors for the calendar name Agenda: "HomeOffice" and "WarmupFlat". Those sensors will be `on` if there is an ongoing event matching the regular expression specified in `search`. In custom calendars, events that last a whole day are taken into account. + +Please note that when you configure custom calendars, the default ones are not created anymore. + {% configuration %} url: required: true @@ -68,7 +97,7 @@ custom_calendars: type: string search: required: true - pending_charges: Regular expression for filtering the events + pending_charges: Regular expression for filtering the events based on the content of their summary, description or location. type: string {% endconfiguration %} @@ -82,18 +111,3 @@ custom_calendars: - **location**: The event Location. - **start_time**: Start time of event. - **end_time**: End time of event. - -### {% linkable_title Sensor attributes %} - -```yaml -# Example configuration.yaml entry -calendar: - - platform: caldav - url: https://baikal.my-server.net/cal.php/calendars/john.doe@test.com/default - username: john.doe@test.com - password: !secret caldav - custom_calendars: - - name: 'HomeOffice' - calendar: 'Agenda' - search: 'HomeOffice' -``` From 2111cf50f51083c7848abb15dc183d7eeece8f12 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Sun, 11 Mar 2018 13:06:14 -0700 Subject: [PATCH 560/993] Update virtualenv.markdown --- source/_docs/installation/virtualenv.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_docs/installation/virtualenv.markdown b/source/_docs/installation/virtualenv.markdown index 54af7e09d8..386adbc7bf 100644 --- a/source/_docs/installation/virtualenv.markdown +++ b/source/_docs/installation/virtualenv.markdown @@ -10,7 +10,7 @@ footer: true redirect_from: /getting-started/installation-virtualenv/ --- -If you already have Python 3.5 or later installed, you can easily give Home Assistant a spin. +If you already have Python 3.5.3 or later installed, you can easily give Home Assistant a spin. It's recommended when installing Python packages that you use a [virtual environment](https://docs.python.org/3.5/library/venv.html#module-venv). This will make sure that your Python installation and Home Assistant installation won't impact one another. The following steps will work on most unix like systems. From 4887c9c993adbb4fcc641f507599c14b394cadf1 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Sun, 11 Mar 2018 13:14:28 -0700 Subject: [PATCH 561/993] release 0.65.3 --- _config.yml | 2 +- source/_posts/2018-03-09-release-65.markdown | 40 +++++++++++++++++++- 2 files changed, 40 insertions(+), 2 deletions(-) diff --git a/_config.yml b/_config.yml index eba059a977..40a6c96ad2 100644 --- a/_config.yml +++ b/_config.yml @@ -140,7 +140,7 @@ social: # Home Assistant release details current_major_version: 0 current_minor_version: 65 -current_patch_version: 2 +current_patch_version: 3 date_released: 2018-03-11 # Either # or the anchor link to latest release notes in the blog post. diff --git a/source/_posts/2018-03-09-release-65.markdown b/source/_posts/2018-03-09-release-65.markdown index a5da8e3b6d..09d9433543 100644 --- a/source/_posts/2018-03-09-release-65.markdown +++ b/source/_posts/2018-03-09-release-65.markdown @@ -122,7 +122,7 @@ intent_script: - Add support for input boolean to Google Assistant ([@balloob] - [#13030]) ([google_assistant docs]) - HomeKit Bugfix: names ([@cdce8p] - [#13031]) ([homekit docs]) -## {% linkable_title Release 0.65.2 - March 11 %} +## {% linkable_title Release 0.65.2 - March 10 %} - Fix translations sometimes not loading in the frontend ([@armills]) - Fix sensibo's min/max_temp properties ([@jra3] - [#12996]) ([climate.sensibo docs]) @@ -134,6 +134,18 @@ intent_script: - Don't call async from sync ([@balloob] - [#13057]) ([xiaomi_aqara docs]) - Convert decimals from SQL results ([@balloob] - [#13059]) ([sensor.sql docs]) +## {% linkable_title Release 0.65.3 - March 11 %} + +- Implement Hue available property ([@balloob] - [#12939]) ([light.hue docs]) +- Catch async from sync context by running asyncio event loop in debug mode during tests ([@balloob] - [#13058]) ([camera.arlo docs]) ([climate.generic_thermostat docs]) +- Fixes KNX fire event problem, issue https://github.com/home-assistant/home-assistant/issues/13049 ([@Julius2342] - [#13062]) ([knx docs]) +- Bump iGlo Version ([@jesserockz] - [#13063]) ([light.iglo docs]) +- Fix Tado doing async wrong ([@balloob] - [#13078]) ([device_tracker.tado docs]) +- Synology Camera: auto-renew session when it's expired ([@snjoetw] - [#13079]) ([camera.synology docs]) +- Revert "Cast automatically drop connection (#12635)" ([@OttoWinter] - [#13094]) ([media_player.cast docs]) +- Bump pyvera to 0.2.42. Improve event loop robustness. ([@pavoni] - [#13095]) ([vera docs]) +- Fix Kodi by updateding jsonrpc-websocket to 0.6 ([@Tadly] - [#13096]) ([media_player.kodi docs]) + ## {% linkable_title If you need help... %} ...don't hesitate to use our very active [forums](https://community.home-assistant.io/) or join us for a little [chat](https://discord.gg/c5DvZ4e). The release notes have comments enabled but it's preferred if you use the former communication channels. Thanks. @@ -656,3 +668,29 @@ Experiencing issues introduced by this release? Please report them in our [issue [sensor.sql docs]: https://home-assistant.io/components/sensor.sql/ [wink docs]: https://home-assistant.io/components/wink/ [xiaomi_aqara docs]: https://home-assistant.io/components/xiaomi_aqara/ +[#12939]: https://github.com/home-assistant/home-assistant/pull/12939 +[#13058]: https://github.com/home-assistant/home-assistant/pull/13058 +[#13062]: https://github.com/home-assistant/home-assistant/pull/13062 +[#13063]: https://github.com/home-assistant/home-assistant/pull/13063 +[#13078]: https://github.com/home-assistant/home-assistant/pull/13078 +[#13079]: https://github.com/home-assistant/home-assistant/pull/13079 +[#13094]: https://github.com/home-assistant/home-assistant/pull/13094 +[#13095]: https://github.com/home-assistant/home-assistant/pull/13095 +[#13096]: https://github.com/home-assistant/home-assistant/pull/13096 +[@Julius2342]: https://github.com/Julius2342 +[@OttoWinter]: https://github.com/OttoWinter +[@Tadly]: https://github.com/Tadly +[@balloob]: https://github.com/balloob +[@jesserockz]: https://github.com/jesserockz +[@pavoni]: https://github.com/pavoni +[@snjoetw]: https://github.com/snjoetw +[camera.arlo docs]: https://home-assistant.io/components/camera.arlo/ +[camera.synology docs]: https://home-assistant.io/components/camera.synology/ +[climate.generic_thermostat docs]: https://home-assistant.io/components/climate.generic_thermostat/ +[device_tracker.tado docs]: https://home-assistant.io/components/device_tracker.tado/ +[knx docs]: https://home-assistant.io/components/knx/ +[light.hue docs]: https://home-assistant.io/components/light.hue/ +[light.iglo docs]: https://home-assistant.io/components/light.iglo/ +[media_player.cast docs]: https://home-assistant.io/components/media_player.cast/ +[media_player.kodi docs]: https://home-assistant.io/components/media_player.kodi/ +[vera docs]: https://home-assistant.io/components/vera/ From ad3f1c3fe763bed07e6f987b1e6819b31872ef1a Mon Sep 17 00:00:00 2001 From: bottomquark Date: Sun, 11 Mar 2018 21:27:21 +0100 Subject: [PATCH 562/993] fixes for the previous merge for #4896 removed duplicate example and duplicate text --- source/_components/calendar.caldav.markdown | 20 +++----------------- 1 file changed, 3 insertions(+), 17 deletions(-) diff --git a/source/_components/calendar.caldav.markdown b/source/_components/calendar.caldav.markdown index b1ef811021..8ea6b6ad08 100644 --- a/source/_components/calendar.caldav.markdown +++ b/source/_components/calendar.caldav.markdown @@ -42,11 +42,11 @@ calendar: # Example configuration.yaml entry for nextcloud, calendars will be found automatically calendar: - platform: caldav + username: john.doe + password: !secret caldav url: https://nextcloud.example.com/remote.php/dav ``` -Note that all day events only work for custom calendars. - This example will generate default binary sensors for each calendar you have in your account. Those calendars will be `on` when there is an ongoing event and `off` if not. Events that last a whole day are ignored in those calendars. You have to setup custom calendars in order to take them into account or for advanced event filtering. @@ -123,20 +123,6 @@ custom_calendars: ### {% linkable_title Examples %} -Example entry for creating one custom calendar containing all events from the calendar "Agenda" which contain "HomeOffice" in the description, location, or summary. -```yaml -# Example configuration.yaml entry for baikal -calendar: - - platform: caldav - url: https://baikal.my-server.net/cal.php/calendars/john.doe@test.com/default - username: john.doe@test.com - password: !secret caldav - custom_calendars: - - name: 'HomeOffice' - calendar: 'Agenda' - search: 'HomeOffice' -``` - All events of the calendars "private" and "holidays". Note that all day events are not included. ```yaml # Example configuration.yaml entry for nextcloud @@ -180,4 +166,4 @@ calendar: entity_id: calendar.work_holiday state: 'off' -``` \ No newline at end of file +``` From 13464e509e0cff7891c8deb71bf56a72fafcaf55 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Sun, 11 Mar 2018 15:04:50 -0700 Subject: [PATCH 563/993] Remove broken redirect from (#4901) --- source/_docs/configuration/remote.markdown | 1 - source/_docs/mqtt/broker.markdown | 1 - source/_docs/mqtt/discovery.markdown | 1 - source/_docs/mqtt/logging.markdown | 1 - source/_docs/mqtt/processing_json.markdown | 1 - source/_docs/mqtt/service.markdown | 1 - source/_docs/mqtt/testing.markdown | 1 - source/_docs/tools/benchmark.markdown | 1 - source/_docs/tools/check_config.markdown | 1 - source/_docs/tools/credstash.markdown | 1 - source/_docs/tools/db_migrator.markdown | 1 - source/_docs/tools/ensure_config.markdown | 1 - source/_docs/tools/influxdb_import.markdown | 1 - source/_docs/tools/keyring.markdown | 1 - 14 files changed, 14 deletions(-) diff --git a/source/_docs/configuration/remote.markdown b/source/_docs/configuration/remote.markdown index bd0d0ba60b..77bacfd35f 100644 --- a/source/_docs/configuration/remote.markdown +++ b/source/_docs/configuration/remote.markdown @@ -7,7 +7,6 @@ sidebar: true comments: false sharing: true footer: true -redirect_from: /getting-started/basic/#remote-access --- If you're interested in logging in to Home Assistant while away, you'll have to make your instance remotely accessible. Remember to follow the [securing checklist](/docs/configuration/securing/) before doing this. diff --git a/source/_docs/mqtt/broker.markdown b/source/_docs/mqtt/broker.markdown index 4421d209be..47ea1bb73e 100644 --- a/source/_docs/mqtt/broker.markdown +++ b/source/_docs/mqtt/broker.markdown @@ -8,7 +8,6 @@ comments: false sharing: true footer: true logo: mqtt.png -redirect_from: /components/mqtt/#picking-a-broker --- The MQTT component needs you to run an MQTT broker for Home Assistant to connect to. There are four options, each with various degrees of ease of setup and privacy. diff --git a/source/_docs/mqtt/discovery.markdown b/source/_docs/mqtt/discovery.markdown index 51eae400c4..3242a5f86d 100644 --- a/source/_docs/mqtt/discovery.markdown +++ b/source/_docs/mqtt/discovery.markdown @@ -8,7 +8,6 @@ comments: false sharing: true footer: true logo: mqtt.png -redirect_from: /components/mqtt/#discovery --- The discovery of MQTT devices will enable one to use MQTT devices with only minimal configuration effort on the side of Home Assistant. The configuration is done on the device itself and the topic used by the device. Similar to the [HTTP binary sensor](/components/binary_sensor.http/) and the [HTTP sensor](/components/sensor.http/). The basic idea is that the device itself adds its configuration into your `configuration.yaml` automatically. To prevent multiple identical entries if a device reconnects a unique identifier is necessary. Two parts are required on the device side: The configuration topic which contains the necessary device type and unique identifier and the remaining device configuration without the device type. diff --git a/source/_docs/mqtt/logging.markdown b/source/_docs/mqtt/logging.markdown index 08b84f5277..999e24988f 100644 --- a/source/_docs/mqtt/logging.markdown +++ b/source/_docs/mqtt/logging.markdown @@ -8,7 +8,6 @@ comments: false sharing: true footer: true logo: mqtt.png -redirect_from: /components/mqtt/#logging --- The [logger](/components/logger/) component allow the logging of received MQTT messages. diff --git a/source/_docs/mqtt/processing_json.markdown b/source/_docs/mqtt/processing_json.markdown index b10558655c..552dd08167 100644 --- a/source/_docs/mqtt/processing_json.markdown +++ b/source/_docs/mqtt/processing_json.markdown @@ -8,7 +8,6 @@ comments: false sharing: true footer: true logo: mqtt.png -redirect_from: /components/mqtt/#processing-json --- The MQTT [switch](/components/switch.mqtt/) and [sensor](/components/sensor.mqtt/) platforms support processing JSON over MQTT messages and parsing them using JSONPath. JSONPath allows you to specify where in the JSON the value resides that you want to use. The following examples will always return the value `100`. diff --git a/source/_docs/mqtt/service.markdown b/source/_docs/mqtt/service.markdown index 0b3e778fdf..d751856fe4 100644 --- a/source/_docs/mqtt/service.markdown +++ b/source/_docs/mqtt/service.markdown @@ -8,7 +8,6 @@ comments: false sharing: true footer: true logo: mqtt.png -redirect_from: /components/mqtt/#publish-service --- The MQTT component will register the service `publish` which allows publishing messages to MQTT topics. There are two ways of specifying your payload. You can either use `payload` to hard-code a payload or use `payload_template` to specify a [template](/topics/templating/) that will be rendered to generate the payload. diff --git a/source/_docs/mqtt/testing.markdown b/source/_docs/mqtt/testing.markdown index 3cc565d051..f71ac52e2f 100644 --- a/source/_docs/mqtt/testing.markdown +++ b/source/_docs/mqtt/testing.markdown @@ -8,7 +8,6 @@ comments: false sharing: true footer: true logo: mqtt.png -redirect_from: /components/mqtt/#testing-your-setup --- The `mosquitto` broker package ships commandline tools (often as `*-clients` package) to send and receive MQTT messages. As an alternative have a look at [hbmqtt_pub](http://hbmqtt.readthedocs.org/en/latest/references/hbmqtt_pub.html) and [hbmqtt_sub](http://hbmqtt.readthedocs.org/en/latest/references/hbmqtt_sub.html) which are provided by HBMQTT. For sending test messages to a broker running on localhost check the example below: diff --git a/source/_docs/tools/benchmark.markdown b/source/_docs/tools/benchmark.markdown index c95894489e..04ac884068 100644 --- a/source/_docs/tools/benchmark.markdown +++ b/source/_docs/tools/benchmark.markdown @@ -7,7 +7,6 @@ sidebar: true comments: false sharing: true footer: true -redirect_from: /docs/tools/scripts/#benchmark --- For testing the performance of Home Assistant the Benchmark script runs until you exit using Control+C. diff --git a/source/_docs/tools/check_config.markdown b/source/_docs/tools/check_config.markdown index f3a926783e..f9a31e0374 100644 --- a/source/_docs/tools/check_config.markdown +++ b/source/_docs/tools/check_config.markdown @@ -7,7 +7,6 @@ sidebar: true comments: false sharing: true footer: true -redirect_from: /docs/tools/scripts/#configuration-check --- Test any changes to your `configuration.yaml` file before launching Home Assistant. This script allows you to test changes without the need to restart Home Assistant. diff --git a/source/_docs/tools/credstash.markdown b/source/_docs/tools/credstash.markdown index 0d419a104f..023ee23998 100644 --- a/source/_docs/tools/credstash.markdown +++ b/source/_docs/tools/credstash.markdown @@ -7,7 +7,6 @@ sidebar: true comments: false sharing: true footer: true -redirect_from: /docs/configuration/secrets/#storing-passwords-securely-in-aws --- Using [Credstash](https://github.com/fugue/credstash) is an alternative way to `secrets.yaml`. They can be managed from the command line via the credstash script. diff --git a/source/_docs/tools/db_migrator.markdown b/source/_docs/tools/db_migrator.markdown index bdce8d1ab0..68127935ae 100644 --- a/source/_docs/tools/db_migrator.markdown +++ b/source/_docs/tools/db_migrator.markdown @@ -7,7 +7,6 @@ sidebar: true comments: false sharing: true footer: true -redirect_from: /components/influxdb/#data-migration ---

    diff --git a/source/_docs/tools/ensure_config.markdown b/source/_docs/tools/ensure_config.markdown index c953939856..596c44d571 100644 --- a/source/_docs/tools/ensure_config.markdown +++ b/source/_docs/tools/ensure_config.markdown @@ -7,7 +7,6 @@ sidebar: true comments: false sharing: true footer: true -redirect_from: /docs/tools/scripts/#existence-of-configuration --- This script checks if the `configuration.yaml` file exists. If the file is not available, one is created. diff --git a/source/_docs/tools/influxdb_import.markdown b/source/_docs/tools/influxdb_import.markdown index b8bea1046c..8ff3d85e7b 100644 --- a/source/_docs/tools/influxdb_import.markdown +++ b/source/_docs/tools/influxdb_import.markdown @@ -7,7 +7,6 @@ sidebar: true comments: false sharing: true footer: true -redirect_from: /components/influxdb/#data-import-script --- If you want to import all the recorded data from your recorder database you can use the data import script. It will read all your state_change events from the database and add them as data-points to the InfluxDB. You can specify the source database either by pointing the `--config` option to the config directory which includes the default SQLite database or by giving a sqlalchemy connection URI with `--uri`. diff --git a/source/_docs/tools/keyring.markdown b/source/_docs/tools/keyring.markdown index 6434337b39..be4f2634a0 100644 --- a/source/_docs/tools/keyring.markdown +++ b/source/_docs/tools/keyring.markdown @@ -7,7 +7,6 @@ sidebar: true comments: false sharing: true footer: true -redirect_from: /docs/configuration/secrets/#storing-passwords-in-a-keyring-managed-by-your-os --- Using [Keyring](https://github.com/jaraco/keyring) is an alternative way to `secrets.yaml`. The secrets can be managed from the command line via the `keyring` script. From 80a42eb899c60f2a458de51f4b98e66a6e62c561 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Sun, 11 Mar 2018 15:37:02 -0700 Subject: [PATCH 564/993] Update the used Ruby version --- .ruby-version | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.ruby-version b/.ruby-version index 58073ef8d7..35cee72dcb 100644 --- a/.ruby-version +++ b/.ruby-version @@ -1 +1 @@ -2.4.1 \ No newline at end of file +2.4.3 From 7cee0970ac77010ee6a1b84852c4ae27a248e792 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Sun, 11 Mar 2018 15:37:02 -0700 Subject: [PATCH 565/993] Update the used Ruby version --- .ruby-version | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.ruby-version b/.ruby-version index 58073ef8d7..35cee72dcb 100644 --- a/.ruby-version +++ b/.ruby-version @@ -1 +1 @@ -2.4.1 \ No newline at end of file +2.4.3 From cd2c69dbaed446b1b5532ea0fae18d250ad97a54 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Sun, 11 Mar 2018 16:28:17 -0700 Subject: [PATCH 566/993] Update footer to mention Netlify --- source/_includes/custom/footer.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_includes/custom/footer.html b/source/_includes/custom/footer.html index 886bd8a640..b07ee5bcf8 100644 --- a/source/_includes/custom/footer.html +++ b/source/_includes/custom/footer.html @@ -7,7 +7,7 @@

    Creative Commons License
    home-assistant.io is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. From ec79394148a6b290d7b08829f42ea46486c36635 Mon Sep 17 00:00:00 2001 From: Adam Mills Date: Sun, 11 Mar 2018 23:14:02 -0400 Subject: [PATCH 567/993] Configuration Flow Translations (#4880) * translation_develop and config flow info * Components must store strings in their own dir --- .../backend_localization.markdown | 34 ++++++++++++++++++- 1 file changed, 33 insertions(+), 1 deletion(-) diff --git a/source/developers/internationalization/backend_localization.markdown b/source/developers/internationalization/backend_localization.markdown index 6d395352b4..f50d797045 100644 --- a/source/developers/internationalization/backend_localization.markdown +++ b/source/developers/internationalization/backend_localization.markdown @@ -11,9 +11,41 @@ ha_release: 0.64 --- ## {% linkable_title Translation Strings %} -Platform translation strings are stored as JSON in the [home-assistant](https://github.com/home-assistant/home-assistant) repository. These files must be located adjacent to the component/platform they belong to. They are named `strings..json`, unless the component being translated exists in its own directory, in which case the file is simply named `strings.json` in that directory. This file will contain the different strings that will be translatable. Currently only states are supported by the frontend. +Platform translation strings are stored as JSON in the [home-assistant](https://github.com/home-assistant/home-assistant) repository. These files must be located adjacent to the component/platform they belong to. Components must have their own directory, and the file is simply named `strings.json` in that directory. For platforms, they are named `strings..json` in the platform directory. This file will contain the different strings that will be translatable. + +In order to test changes to translation files, the translation strings must be compiled into Home Assistant’s translation directories by running the following script: + +```bash +$ script/translations_develop +``` After the pull request with the strings file is merged into the `dev` branch, the strings will be automatically uploaded to Lokalise, where contributors can submit translations. The translated strings in Lokalise will be periodically pulled in to the home-assistant repository. ## {% linkable_title States Localization %} The first step when localizing platform states is to ensure that the states defined in the actual platform code are defined in `snake_case`. The states should not contain capital letters or spaces. Next, the strings file needs to be created. The states should exist under the `state` key, and map the backend state keys to their English translations. [The season sensor localization](https://github.com/home-assistant/home-assistant/pull/12453/commits/bb2f328ce10c3867990e34a88da64e2f8dc7a5c4) is a good example. + +## {% linkable_title Configuration Flow Localization %} +The translation strings for the configuration flow handler are defined under the `config` key. An example strings file below describes the different supported keys: + +```json +{ + "config": { + "title": "This title is shown in the integrations list", + "step": { + "init": { + "title": "The user visible title of the `init` step.", + "description": "Markdown that is shown with the step.", + "data": { + "api_key": "The label for the `api_key` input field" + } + } + }, + "error": { + "invalid_api_key": "This message will be displayed if `invalid_api_key` is returned as a flow error." + }, + "abort": { + "stale_api_key": "This message will be displayed if `stale_api_key` is returned as the abort reason." + } + } +} +``` From 545c583fdaa2cc79fc574cf32abeff865f692c77 Mon Sep 17 00:00:00 2001 From: DubhAd Date: Mon, 12 Mar 2018 10:46:26 +0000 Subject: [PATCH 568/993] Added version note (#4900) Since Synology offer an outdated Python, providing a note about how to install 0.64.x --- source/_docs/installation/synology.markdown | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/source/_docs/installation/synology.markdown b/source/_docs/installation/synology.markdown index 8885d8e868..33aa79a0e1 100644 --- a/source/_docs/installation/synology.markdown +++ b/source/_docs/installation/synology.markdown @@ -57,6 +57,10 @@ Use PIP to install Homeassistant package # ./python3 -m pip install homeassistant ``` +

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

    + Create homeassistant config directory & switch to it ```bash From ff51c36b43b2a6f19fbd5e6943c1d37dfb0ab2ef Mon Sep 17 00:00:00 2001 From: DubhAd Date: Mon, 12 Mar 2018 10:47:03 +0000 Subject: [PATCH 569/993] Bumped version to be explicitly 3.5.3 (#4888) --- source/_docs/installation.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_docs/installation.markdown b/source/_docs/installation.markdown index 4b54abe2d3..bb51e93863 100644 --- a/source/_docs/installation.markdown +++ b/source/_docs/installation.markdown @@ -14,7 +14,7 @@ redirect_from: /getting-started/installation/ Beginners should check our [Getting started guide](/getting-started/) first. This is for users that require advanced installations.

    -Home Assistant provides multiple ways to be installed. A requirement is that you have [Python 3.5+](https://www.python.org/downloads/) installed. +Home Assistant provides multiple ways to be installed. A requirement is that you have [Python 3.5.3 or later](https://www.python.org/downloads/) installed.
    From d7a43b773572e11328612dacdbcef031f51d413a Mon Sep 17 00:00:00 2001 From: DubhAd Date: Mon, 12 Mar 2018 10:48:08 +0000 Subject: [PATCH 570/993] Bumped version to be explicitly 3.5.3 (#4889) From 2d37b3aa0f19a91848ab673575d4da65e9b032cd Mon Sep 17 00:00:00 2001 From: DubhAd Date: Mon, 12 Mar 2018 10:48:36 +0000 Subject: [PATCH 571/993] Bumped version to be explicitly 3.5.3 (#4890) --- source/_docs/installation/macos.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_docs/installation/macos.markdown b/source/_docs/installation/macos.markdown index 25b3706db7..51292c43ab 100644 --- a/source/_docs/installation/macos.markdown +++ b/source/_docs/installation/macos.markdown @@ -11,7 +11,7 @@ footer: true [macOS](http://www.apple.com/macos/) is available by default on Apple computer. If you run a different operating system, please refer to the other section of the documentation. -To run Home Assistant on macOS you need to install Python first. Download Python from https://www.python.org/downloads/mac-osx/ and follow the instructions of the installer. +To run Home Assistant on macOS you need to install Python first. Download Python 3.5.3 or later from https://www.python.org/downloads/mac-osx/ and follow the instructions of the installer. Open a terminal and install Home Assistant. From c2073378ff230a551e9b397e2ef3804357c9901b Mon Sep 17 00:00:00 2001 From: DubhAd Date: Mon, 12 Mar 2018 10:49:40 +0000 Subject: [PATCH 572/993] Bumped to Python 3.6 from 3.4 (#4891) Skipped 3.5 because it provides 3.5.1. --- source/_docs/installation/centos.markdown | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/source/_docs/installation/centos.markdown b/source/_docs/installation/centos.markdown index b427d83d39..91d0bffd5b 100644 --- a/source/_docs/installation/centos.markdown +++ b/source/_docs/installation/centos.markdown @@ -9,9 +9,9 @@ sharing: true footer: true --- -To run Python 3.x on [CentOS](https://www.centos.org/) or RHEL (Red Hat Enterprise Linux), [Software Collections](https://www.softwarecollections.org/en/scls/rhscl/rh-python34/) needs to be activated first. +To run Python 3.x on [CentOS](https://www.centos.org/) or RHEL (Red Hat Enterprise Linux), [Software Collections](https://www.softwarecollections.org/en/scls/rhscl/rh-python36/) needs to be activated first. -There are effort in progress to bring Python 3.4 to [Extra Packages for Enterprise Linux (EPEL)](https://fedoraproject.org/wiki/EPEL) which will allow you to follow the [Fedora Instructions](/docs/installation/fedora/). +You must install Python 3.5.3 or later. Software Collections version of Python 3.5 is 3.5.1 so this guide uses Python 3.6. ### {% linkable_title Using Software Collections %} @@ -21,10 +21,10 @@ First of all install the software collection repository as root. For example, on $ yum install centos-release-scl ``` -Then install the Python 3.5 package: +Then install the Python 3.6 package: ```bash -$ yum install rh-python35 +$ yum install rh-python36 ``` Once installed, switch to your `homeassistant` user (if you've set one up), enable the software collection and check that it has set up the new version of Python: @@ -32,10 +32,10 @@ Once installed, switch to your `homeassistant` user (if you've set one up), enab ```bash $ scl enable rh-python35 bash $ python --version -Python 3.5.1 +Python 3.6.3 ``` -You will be in a command shell set up with Python 3.5 as your default version. The virtualenv and pip commands will be correct for this version, so you can now create a virtual environment and install Home Assistant following the main [instructions](https://home-assistant.io/docs/installation/virtualenv/#step-4-set-up-the-virtualenv). +You will be in a command shell set up with Python 3.6 as your default version. The virtualenv and pip commands will be correct for this version, so you can now create a virtual environment and install Home Assistant following the main [instructions](https://home-assistant.io/docs/installation/virtualenv/#step-4-set-up-the-virtualenv). You will need to enable the software collection each time you log on before you activate your virtual environment. From 21e9034e265765c7b0ce5bc5ecf4c0e8d1dcb5bd Mon Sep 17 00:00:00 2001 From: DubhAd Date: Mon, 12 Mar 2018 10:50:12 +0000 Subject: [PATCH 573/993] Minimum Python version requirements (#4887) --- source/_docs/installation/raspberry-pi.markdown | 2 ++ 1 file changed, 2 insertions(+) diff --git a/source/_docs/installation/raspberry-pi.markdown b/source/_docs/installation/raspberry-pi.markdown index d7f3c231ef..b0cb1b8a4a 100644 --- a/source/_docs/installation/raspberry-pi.markdown +++ b/source/_docs/installation/raspberry-pi.markdown @@ -12,6 +12,8 @@ redirect_from: /getting-started/installation-raspberry-pi/ This installation of Home Assistant requires the Raspberry Pi to run [Raspbian Lite](https://www.raspberrypi.org/downloads/raspbian/). The installation will be installed in a [Virtual Environment](/docs/installation/virtualenv) with minimal overhead. Instructions assume this is a new installation of Raspbian Lite. +You must have Python 3.5.3 or later installed, which is the case for Raspbian Stretch. +

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

    From bdfc3248434d1401fe760a0030b14916208e3125 Mon Sep 17 00:00:00 2001 From: DubhAd Date: Mon, 12 Mar 2018 10:50:47 +0000 Subject: [PATCH 574/993] Provided note about python versions (#4892) Synology Package Center provides only 3.5.1, nothing newer :( --- source/_docs/installation/synology.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_docs/installation/synology.markdown b/source/_docs/installation/synology.markdown index 33aa79a0e1..fee65366be 100644 --- a/source/_docs/installation/synology.markdown +++ b/source/_docs/installation/synology.markdown @@ -26,7 +26,7 @@ Running these commands will: Using the Synology webadmin: - - Install python3 using the Synology Package Center + - Install python3 using the Synology Package Center (be aware, this provides 3.5.1, which is not compatible with Home Assistant 0.65.0 or later) - Create homeassistant user and add to the "users" group SSH onto your synology & login as admin or root From 2bf27770277830a375d119c18991bfc97c063125 Mon Sep 17 00:00:00 2001 From: DubhAd Date: Mon, 12 Mar 2018 10:52:37 +0000 Subject: [PATCH 575/993] Added python version note (#4893) --- source/_docs/installation/armbian.markdown | 2 ++ 1 file changed, 2 insertions(+) diff --git a/source/_docs/installation/armbian.markdown b/source/_docs/installation/armbian.markdown index e54d67acb8..5f16fc5bc0 100644 --- a/source/_docs/installation/armbian.markdown +++ b/source/_docs/installation/armbian.markdown @@ -11,6 +11,8 @@ footer: true [armbian](https://www.armbian.com) runs on a wide-variety of [ARM development boards](https://www.armbian.com/download/). Currently there are around 50 boards supported inclusive the OrangePi family, Cubieboard, Pine64, and Odroid. +Python 3.5.3 or later is required. + Setup Python and `pip` ```bash From 67b5fb4b7f132ee5d0a5e3229158e87ba739580f Mon Sep 17 00:00:00 2001 From: DubhAd Date: Mon, 12 Mar 2018 10:53:13 +0000 Subject: [PATCH 576/993] Bumped version to be explicitly 3.5.3 (#4886) From 91b5ca95119e48e74566ecddf78c6a20675850fb Mon Sep 17 00:00:00 2001 From: c727 Date: Mon, 12 Mar 2018 11:54:41 +0100 Subject: [PATCH 577/993] Added instructions for custom UIs to show up in the HA dev info panel (#4903) * Update frontend_creating_custom_ui.markdown Added instructions for custom UIs to show up in the HA dev info panel https://github.com/home-assistant/home-assistant-polymer/pull/981 * Use note class * Update frontend_creating_custom_ui.markdown --- .../frontend_creating_custom_ui.markdown | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/source/developers/frontend_creating_custom_ui.markdown b/source/developers/frontend_creating_custom_ui.markdown index c9da0cf1e2..d28623e8da 100644 --- a/source/developers/frontend_creating_custom_ui.markdown +++ b/source/developers/frontend_creating_custom_ui.markdown @@ -53,6 +53,20 @@ frontend: ``` +

    +Some browsers don't support latest ECMAScript standards, these require a separate ES5 compatible file (`extra_html_url_es5`). +

    For more possibilities, see the [Custom UI section](/cookbook/#user-interface) on our Examples page. From 95236076932da474ed4e0231383194236bfb9563 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Mon, 12 Mar 2018 12:20:11 +0100 Subject: [PATCH 578/993] Update (fixes #4868) (#4905) --- source/_docs/installation/archlinux.markdown | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/_docs/installation/archlinux.markdown b/source/_docs/installation/archlinux.markdown index 09ae89b4dd..3e13bd2691 100644 --- a/source/_docs/installation/archlinux.markdown +++ b/source/_docs/installation/archlinux.markdown @@ -21,10 +21,10 @@ $ sudo pacman -S python-pip and Home Assistant itself. ```bash -$ pip3 install homeassistant +$ pip3 install --user homeassistant ``` -Home Assistant is part of the [AUR](https://aur.archlinux.org/packages/home-assistant/). This means that it can be installed with `pacaur`: +Home Assistant is part of the [AUR](https://aur.archlinux.org/packages/home-assistant/). This means that it can be installed with `pacaur`. This package is often broken or outdated: ```bash $ pacaur -S home-assistant From cc59a4192ebe90968267140396cfa8dad3b1e159 Mon Sep 17 00:00:00 2001 From: corneyl Date: Mon, 12 Mar 2018 14:02:33 +0100 Subject: [PATCH 579/993] Added info on AND condition (#4867) --- source/_docs/scripts/conditions.markdown | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/source/_docs/scripts/conditions.markdown b/source/_docs/scripts/conditions.markdown index d2dc0638d8..a9e0b8c564 100644 --- a/source/_docs/scripts/conditions.markdown +++ b/source/_docs/scripts/conditions.markdown @@ -28,6 +28,21 @@ condition: below: '20' ``` +If you do not want to combine AND and OR conditions, you can also just list them sequentially, by default all conditions have to be true. +The following configuration works the same as the one listed above: + +```yaml +condition: + - condition: state + entity_id: 'device_tracker.paulus' + state: 'home' + - condition: numeric_state + entity_id: 'sensor.temperature' + below: '20' +``` + +Currently you need to format your conditions like this to be able to edit them using the [automations editor](/docs/automation/editor/). + ### {% linkable_title OR condition %} Test multiple conditions in 1 condition statement. Passes if any embedded condition is valid. From 0dbbfb785dfa5b773bfbdff89abb9f12344cc35c Mon Sep 17 00:00:00 2001 From: Federico Zivolo Date: Mon, 12 Mar 2018 20:33:13 +0100 Subject: [PATCH 580/993] docs: Added api_version doc for philips_js (#4904) * docs: Added api_version doc for philips_js * Update media_player.philips_js.markdown --- source/_components/media_player.philips_js.markdown | 1 + 1 file changed, 1 insertion(+) diff --git a/source/_components/media_player.philips_js.markdown b/source/_components/media_player.philips_js.markdown index 2db2fe8ded..e776db61a3 100644 --- a/source/_components/media_player.philips_js.markdown +++ b/source/_components/media_player.philips_js.markdown @@ -30,3 +30,4 @@ Configuration variables: - **host** (*Required*): IP address of TV. - **name** (*Optional*): The name you would like to give to the Philips TV. - **turn_on_action** (*Optional*): A script that will be executed to turn on the TV (can be used with wol). +- **api_version** (*Optional*): The JointSpace API version of your Philips TV, defaults to `1`. This is an experimental option and not all the functionalities are guaranteed to work with API versions different from `1`. From d02ad5f7a63af3c67a804b70e6fe872cf831db2e Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Mon, 12 Mar 2018 15:38:29 -0700 Subject: [PATCH 581/993] release 0.65.4 --- _config.yml | 6 +++--- source/_posts/2018-03-09-release-65.markdown | 19 +++++++++++++++++++ 2 files changed, 22 insertions(+), 3 deletions(-) diff --git a/_config.yml b/_config.yml index 40a6c96ad2..d4558554a3 100644 --- a/_config.yml +++ b/_config.yml @@ -140,13 +140,13 @@ social: # Home Assistant release details current_major_version: 0 current_minor_version: 65 -current_patch_version: 3 -date_released: 2018-03-11 +current_patch_version: 4 +date_released: 2018-03-12 # Either # or the anchor link to latest release notes in the blog post. # Must be prefixed with a # and have double quotes around it. # Major release: -patch_version_notes: "#release-0652---march-11" +patch_version_notes: "#release-0654---march-12" # Minor release (Example #release-0431---april-25): # Date we moved to Discourse for comments diff --git a/source/_posts/2018-03-09-release-65.markdown b/source/_posts/2018-03-09-release-65.markdown index 09d9433543..ca318ae135 100644 --- a/source/_posts/2018-03-09-release-65.markdown +++ b/source/_posts/2018-03-09-release-65.markdown @@ -146,6 +146,13 @@ intent_script: - Bump pyvera to 0.2.42. Improve event loop robustness. ([@pavoni] - [#13095]) ([vera docs]) - Fix Kodi by updateding jsonrpc-websocket to 0.6 ([@Tadly] - [#13096]) ([media_player.kodi docs]) +## {% linkable_title Release 0.65.3 - March 12 %} + +- Fix unavailable property for wemo switch ([@balloob] - [#13106]) ([switch.wemo docs]) +- Hue: Catch if bridge goes unavailable ([@balloob] - [#13109]) ([hue docs]) ([light.hue docs]) +- Adding check for empty discovery info in alarm control panel Egardia. ([@jeroenterheerdt] - [#13114]) ([alarm_control_panel.egardia docs]) +- Throttle Arlo api calls ([@arsaboo] - [#13143]) ([arlo docs]) + ## {% linkable_title If you need help... %} ...don't hesitate to use our very active [forums](https://community.home-assistant.io/) or join us for a little [chat](https://discord.gg/c5DvZ4e). The release notes have comments enabled but it's preferred if you use the former communication channels. Thanks. @@ -694,3 +701,15 @@ Experiencing issues introduced by this release? Please report them in our [issue [media_player.cast docs]: https://home-assistant.io/components/media_player.cast/ [media_player.kodi docs]: https://home-assistant.io/components/media_player.kodi/ [vera docs]: https://home-assistant.io/components/vera/ +[#13106]: https://github.com/home-assistant/home-assistant/pull/13106 +[#13109]: https://github.com/home-assistant/home-assistant/pull/13109 +[#13114]: https://github.com/home-assistant/home-assistant/pull/13114 +[#13143]: https://github.com/home-assistant/home-assistant/pull/13143 +[@arsaboo]: https://github.com/arsaboo +[@balloob]: https://github.com/balloob +[@jeroenterheerdt]: https://github.com/jeroenterheerdt +[alarm_control_panel.egardia docs]: https://home-assistant.io/components/alarm_control_panel.egardia/ +[arlo docs]: https://home-assistant.io/components/arlo/ +[hue docs]: https://home-assistant.io/components/hue/ +[light.hue docs]: https://home-assistant.io/components/light.hue/ +[switch.wemo docs]: https://home-assistant.io/components/switch.wemo/ From c20754700c235b1e8ee0a2d50bbd241e029f47a6 Mon Sep 17 00:00:00 2001 From: Daniel Shokouhi Date: Mon, 12 Mar 2018 18:22:18 -0700 Subject: [PATCH 582/993] Add songpal to ignore list (#4906) After updating 0.65.4 I kept seeing errors about a component I am not using or even have. This change is to make sure the discovery docs are kept to upto date with devices added to the discovery component. --- source/_components/discovery.markdown | 1 + 1 file changed, 1 insertion(+) diff --git a/source/_components/discovery.markdown b/source/_components/discovery.markdown index f6629e3159..f08c530620 100644 --- a/source/_components/discovery.markdown +++ b/source/_components/discovery.markdown @@ -79,6 +79,7 @@ Valid values for ignore are: * `sabnzbd`: SABnzbd downloader * `samsung_tv`: Samsung TVs * `sonos`: Sonos speakers + * `songpal` : Songpal * `tellduslive`: Telldus Live * `wink`: Wink Hub * `yamaha`: Yamaha media player From 6670c5382a76afaaa42093e8ed36b834b8da5787 Mon Sep 17 00:00:00 2001 From: c727 Date: Tue, 13 Mar 2018 14:57:05 +0100 Subject: [PATCH 583/993] Typo in 0.65.4 release notes (#4908) --- source/_posts/2018-03-09-release-65.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_posts/2018-03-09-release-65.markdown b/source/_posts/2018-03-09-release-65.markdown index ca318ae135..ce3e803fcf 100644 --- a/source/_posts/2018-03-09-release-65.markdown +++ b/source/_posts/2018-03-09-release-65.markdown @@ -146,7 +146,7 @@ intent_script: - Bump pyvera to 0.2.42. Improve event loop robustness. ([@pavoni] - [#13095]) ([vera docs]) - Fix Kodi by updateding jsonrpc-websocket to 0.6 ([@Tadly] - [#13096]) ([media_player.kodi docs]) -## {% linkable_title Release 0.65.3 - March 12 %} +## {% linkable_title Release 0.65.4 - March 12 %} - Fix unavailable property for wemo switch ([@balloob] - [#13106]) ([switch.wemo docs]) - Hue: Catch if bridge goes unavailable ([@balloob] - [#13109]) ([hue docs]) ([light.hue docs]) From 3d1ce032bcb81f40c507a116a2181c5da6ffefd4 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Tue, 13 Mar 2018 16:30:28 +0100 Subject: [PATCH 584/993] Add a sensor with a numerical value --- source/_components/binary_sensor.trend.markdown | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/_components/binary_sensor.trend.markdown b/source/_components/binary_sensor.trend.markdown index 41ac39437e..5cad94a3b6 100644 --- a/source/_components/binary_sensor.trend.markdown +++ b/source/_components/binary_sensor.trend.markdown @@ -23,7 +23,7 @@ binary_sensor: - platform: trend sensors: solar_angle: - entity_id: sun.sun + entity_id: sensor.cpu_speed ``` Configuration variables: @@ -59,7 +59,7 @@ binary_sensor: - platform: trend sensors: sun_rising: - entity_id: sun.sun + entity_id: sensor.cpu_speed ``` This example creates two sensors to indicate whether the temperature is rising or falling at a rate of at least 3 degrees an hour, and collects samples over a two hour period: From ebac258f4f20cb2e6e440254f4c66c71d6b4357e Mon Sep 17 00:00:00 2001 From: Josh McCarty Date: Tue, 13 Mar 2018 09:21:59 -0700 Subject: [PATCH 585/993] Update the hassbian image file size (#4902) * Update the hassbian image file size The file size should match the current version of the image * Remove hassbian image file size --- source/_docs/installation/hassbian/installation.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_docs/installation/hassbian/installation.markdown b/source/_docs/installation/hassbian/installation.markdown index 3c4acb26e9..8ed803699e 100644 --- a/source/_docs/installation/hassbian/installation.markdown +++ b/source/_docs/installation/hassbian/installation.markdown @@ -12,7 +12,7 @@ redirect_from: /docs/hassbian/installation/ The easiest way to install Home Assistant on your Raspberry Pi is by using HASSbian: a Raspberry Pi image with Home Assistant built-in. The image will install the latest version of Home Assistant on initial boot (~10 minutes). - 1. [Download the Hassbian image][image-download] (364 MB) + 1. [Download the Hassbian image][image-download] 2. Use [Etcher][etcher] to flash the image to your SD card 3. Ensure your Raspberry Pi has wired access to the internet for the entire process or configure your wireless network settings **before proceeding to step 4**. 4. Insert SD card to Raspberry Pi and turn it on. Initial installation of Home Assistant will take about 5 minutes. From a537bde049d6b4f85cdaf1a697296fbc8cc5ebcc Mon Sep 17 00:00:00 2001 From: Jeroen ter Heerdt Date: Tue, 13 Mar 2018 18:54:52 +0100 Subject: [PATCH 586/993] Egardia: Adding configuration tag according to new docs (#4910) * Updating egardia.markdown with configuration tag * Updating egardia.markdown with linkable titles. * Fixing typo. --- source/_components/egardia.markdown | 98 ++++++++++++++++++++++------- 1 file changed, 74 insertions(+), 24 deletions(-) diff --git a/source/_components/egardia.markdown b/source/_components/egardia.markdown index 068920b8ab..1f0396bde7 100644 --- a/source/_components/egardia.markdown +++ b/source/_components/egardia.markdown @@ -2,7 +2,7 @@ layout: page title: "Egardia" description: "Instructions how to setup Egardia / Woonveilig within Home Assistant." -date: 2018-03-02 09:00 +date: 2018-03-13 09:00 sidebar: true comments: false sharing: true @@ -16,29 +16,81 @@ The `egardia` platform enables the ability to control an [Egardia](http://egardi You will need to know the IP of your alarm panel on your local network. Test if you can login to the panel by browsing to the IP address and log in using your Egardia/Woonveilig account. -To enable the integration with your alarm panel, add the following lines to your `configuration.yaml` file: +## {% linkable_title Basic configuration %} -```yaml -# Example configuration.yaml entry -egardia: - host: YOUR_HOST - username: YOUR_USERNAME - password: YOUR_PASSWORD +To enable the integration with your alarm panel, add the following lines to your `configuration.yaml` file: + ```yaml + # Example configuration.yaml entry + egardia: + host: YOUR_HOST + username: YOUR_USERNAME + password: YOUR_PASSWORD ``` -Configuration variables: - -- **host** (*Required*): The local IP address of the Egardia/Woonveilig alarm panel. -- **username** (*Required*): Username for the Egardia/Woonveilig account. -- **password** (*Required*): Password for Egardia/Woonveilig account. -- **version** (*Optional*): The version of the Egardia system. `GATE-01`, `GATE-02` and `GATE-03` are currently supported. Defaults to `GATE-01`. -- **port** (*Optional*): The port of the alarm panel. Defaults to 80. -- **report_server_enabled** (*Optional*): Enable reporting by server. Defaults to `False`. -- **report_server_port** (*Optional*): Port of the Egardia server. Defaults to 52010. -- **report_server_codes** list (*Optional*): List of codes for the different states. +{% configuration %} +host: + description: The local IP address of the Egardia/Woonveilig alarm panel. + required: true + type: string +username: + description: Username for the Egardia/Woonveilig account. + required: true + type: string +password: + description: Password for Egardia/Woonveilig account. + required: true + type: string +version: + description: The version of the Egardia system. `GATE-01`, `GATE-02` and `GATE-03` are currently supported. + required: false + type: string + default: 'GATE-01' +port: + description: The port of the alarm panel. + required: false + type: int + default: 80 +report_server_enabled: + description: Enable reporting by server. + required: false + type: string + default: false +report_server_port: + description: Port of the Egardia server. + required: false + type: int + default: 52010 +report_server_codes: + description: Map of list of codes for the different states. + required: false + type: map + keys: + arm: + description: List of codes for the 'arm' state. + required: false + type: list + disarm: + description: List of codes for the 'disarm' state. + required: false + type: list + armhome: + description: List of codes for the 'armhome' state. + required: false + type: list + triggered: + description: List of codes for the 'triggered' state. + required: false + type: list + ignore: + description: List of codes that will be ignored. + required: false + type: list +{% endconfiguration %} Note that this basic configuration will only enable you to read the armed/armed away/disarmed status of your alarm and will **not** update the status if the alarm is triggered. This is because of how Egardia built their system. The alarm triggers normally go through their servers. -You can change this, however, using the following procedure. This is a more advanced configuration. +You can change this, however, using the following procedure. This is a more advanced (and more useful) configuration. + +## {% linkable_title Advanced configuration %} 1. Log in to your alarm system's control panel. You will need to access http://[IP of your control panel]. You know this already since you need it in the basic configuration from above. Log in to the control panel with your Egardia/Woonveilig username and password. 2. Once logged in, go to *System Settings*, *Report* and change the Server Address for your primary server to the IP or hostname of your Home Assistant machine. You can leave the port number set to 52010 or change it to anything you like. **Make sure to change the settings of the primary server otherwise the messages will not come through. Note that this will limit (or fully stop) the number of alarm messages you will get through Egardia's / Woonveilig services.** Maybe, that is just what you want. Make sure to save your settings by selecting 'OK'. @@ -47,9 +99,9 @@ You can change this, however, using the following procedure. This is a more adva ```yaml # Example configuration.yaml entry egardia: -   host: YOUR_HOST -   username: YOUR_USERNAME -   password: YOUR_PASSWORD + host: YOUR_HOST + username: YOUR_USERNAME + password: YOUR_PASSWORD report_server_enabled: True report_server_port: PORT_OF_EGARDIASERVER (optional, defaults to 52010) report_server_codes: @@ -63,5 +115,3 @@ You can change this, however, using the following procedure. This is a more adva Note that for all code groups (*arm*,*disarm*, etc) multiple codes can be entered since each sensor triggers with a different code and each user of the system has its own arm and disarm codes. Also note that your system will do regular system checks which will be reported as well. Since Home Assistant provides no way of handling them properly, you can enter those codes as *ignore* (again, multiple codes can be used here). The egardia component will ignore these codes and continue returning the old status if it receives any of the codes that are listed as ignore. This is useful for example when you have armed your alarm at night: normally a system check will occur at least once during the night and if that code is not specified anywhere Home Assistant will set the status of the alarm to its default, which is unarmed. This is in fact wrong. Listing the code as ignore changes this behavior and Home Assistant will continue to show the status the alarm is in (disarm, arm, home, triggered) even when system checks occur. 5. Test your setup and enjoy. The component will update if the alarm status changes, including triggers. You can use this to build your own automations and send notifications as you wish. *Note*: previous versions required a separate egardiaserver to be set up. This is no longer necessary and corresponding system services can be removed (using systemctl). - - From 0cee1f200b63c3b3742a31620141ae11ff60543a Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Tue, 13 Mar 2018 11:19:46 -0700 Subject: [PATCH 587/993] Change featured of dark sky weather --- source/_components/weather.darksky.markdown | 1 + 1 file changed, 1 insertion(+) diff --git a/source/_components/weather.darksky.markdown b/source/_components/weather.darksky.markdown index 0352ef6074..0130a933d0 100644 --- a/source/_components/weather.darksky.markdown +++ b/source/_components/weather.darksky.markdown @@ -7,6 +7,7 @@ sidebar: true comments: false sharing: true footer: true +featured: true logo: dark_sky.png ha_category: Weather ha_release: 0.61 From a9a26f759077d8e9cfea2d6592562ec745bc2e00 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Tue, 13 Mar 2018 11:19:51 -0700 Subject: [PATCH 588/993] Change featured of dark sky sensor --- source/_components/sensor.darksky.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/sensor.darksky.markdown b/source/_components/sensor.darksky.markdown index 6e3a6ced6b..aebe2326e4 100644 --- a/source/_components/sensor.darksky.markdown +++ b/source/_components/sensor.darksky.markdown @@ -9,7 +9,7 @@ sharing: true footer: true logo: dark_sky.png ha_category: Weather -featured: true +featured: false ha_release: "0.30" redirect_from: /components/sensor.forecast/ ha_iot_class: "Cloud Polling" From fec18d3a8f43dbb0908982609842a1b09c794006 Mon Sep 17 00:00:00 2001 From: themanieldaniel Date: Tue, 13 Mar 2018 16:38:31 -0400 Subject: [PATCH 589/993] Update backup_usb.markdown (#4634) * Update backup_usb.markdown * :pencil2: Minor improvements --- .../ecosystem/backup/backup_usb.markdown | 50 ++++++++++--------- 1 file changed, 26 insertions(+), 24 deletions(-) diff --git a/source/_docs/ecosystem/backup/backup_usb.markdown b/source/_docs/ecosystem/backup/backup_usb.markdown index 6bd6276883..182c5b44c4 100644 --- a/source/_docs/ecosystem/backup/backup_usb.markdown +++ b/source/_docs/ecosystem/backup/backup_usb.markdown @@ -9,11 +9,12 @@ sharing: true footer: true --- -Backing up your Home Assistant configuration to USB drive. A good plus side is that you don't need to mask all your passwords since the backup is locally at your home/residence. +This will step you through the process of setting up a backup of your Home Assistant configuration to a USB device. This is a good method if you don't want to mask all of your passwords since the backup is kept locally at your home/residence. ### {% linkable_title Requirements %} -First you need a USB drive. Once you have one you need to prepare it to be used on your device. -Once connected you want to format/work with the drive. To know what path it is in, you can check with `dmesg`. + +First, you need a USB drive. It should be formatted properly for your device and connected to your device before beginning. Any type of partition will work, but Linux filesystems are preferred so that you can set permissions. +Once connected you want to mount the drive. To find the path where it is located, you can use the `dmesg` command. ```bash # dmesg | grep sd @@ -32,16 +33,17 @@ Once connected you want to format/work with the drive. To know what path it is i [726259.209004] sd 0:0:0:0: [sda] Attached SCSI removable disk ``` -Here we see we have a drive on `/dev/sda1`. We assume you created a partition on the drive to start with. This can be any type of partition. Preferred is a Linux filesystem type so you can set permissions! +The device here is `sda` and our partition is `sda1`. So our partition is located here `/dev/sda1`. Mount the drive (as root) to `/media` ```bash -# mount /dev/sda1 /media/ +# sudo mount /dev/sda1 /media/ ``` -### {% linkable_title Prepare USB Stick %} -Change into it and create a folder called `hassbackup` and change the ownership to the user that runs Home Assistant. In my case group and user are both `homeassistant`. +### {% linkable_title Prepare the USB Device %} + +Change to the `/media` directory and create a folder called `hassbackup`. Change the ownership to the user that runs Home Assistant. In this example case, the user and group are both `homeassistant`. ```bash # cd /media/ @@ -54,11 +56,10 @@ drwxr-xr-x 22 root root 4096 Mar 22 18:37 .. drwxr-xr-x 2 homeassistant homeassistant 4096 Apr 29 10:36 hassbackup drwx------ 2 root root 16384 Apr 29 10:18 lost+found ``` -You can ignore 'lost+found'. ### {% linkable_title Install Dependency %} -In order to preserve space on your drive we use zip. Install that too. +The script in the next section uses zip to preserve space on your drive. So we will install zip next. ```bash /media# apt-get install zip @@ -68,9 +69,9 @@ Building dependency tree Setting up zip (3.0-8) ... ``` -### {% linkable_title Install and run script %} +### {% linkable_title Download and Run Script %} -Become the `homeassistant` user and place the following [script](https://gist.github.com/riemers/041c6a386a2eab95c55ba3ccaa10e7b0) to a place of your liking. +Become the `homeassistant` user (or whatever user runs Home Assistant). Change to whatever directory you would like the [script](https://gist.github.com/riemers/041c6a386a2eab95c55ba3ccaa10e7b0) placed into and run the following command. ```bash # wget https://gist.githubusercontent.com/riemers/041c6a386a2eab95c55ba3ccaa10e7b0/raw/86727d4e72e9757da4f68f1c9d784720e72d0e99/usb_backup.sh @@ -82,7 +83,7 @@ Make the downloaded script executable. # chmod +x usb_backup.sh ``` -Open up the file and change the paths you want to use, then simply run the `./usb_backup.sh`. +Edit the script file using your preferred text editor (use nano if you are not advanced). Change the paths to reflect your configuration, then simply run `./usb_backup.sh`. ```bash $ .homeassistant/extraconfig/shell_code/usb_backup.sh @@ -91,26 +92,27 @@ $ .homeassistant/extraconfig/shell_code/usb_backup.sh [i] Keeping all files no prunning set ``` -### {% linkable_title Crontab %} -In order for this to automatically make a backup every night at 3 am, you can add a crontab for it as the `homeassistant` user. -Change below path to where you placed the `usb_backup.sh` and run the following line. +### {% linkable_title Set Up Crontab %} + +To automatically backup your configuration on a schedule, you can add a crontab for it as the `homeassistant` user. +Change the path below to the directory where you placed the `usb_backup.sh` and run the following line. This will backup every night at 3 am. ```bash (crontab -l 2>/dev/null; echo "0 3 * * * /home/homeassistant/.homeassistant/extraconfig/shell_code/usb_backup.sh") | crontab - ``` -### {% linkable_title Auto mount %} +### {% linkable_title Auto Mount the USB Device %} -This does not automatically mount your USB drive at boot. You need to do that manually or add a line to your `/etc/fstab` file. +NOTE: This does not automatically mount your USB drive at boot. You will need to manually mount your drive after each boot or add a line to your `/etc/fstab` file. -If your drive is on `/dev/sda1`, you could add an entry to your `/etc/fstab` like so: - -```text -/dev/sda1 /media ext4 defaults,noatime 0 1 -``` - -Manual step to mount the USB drive: +To manually mount a USB drive located at `/dev/sda1`, run the following line: ```bash # mount /dev/sda1 /media ``` + +Alternatively, auto-mount the drive by adding the following entry to your `/etc/fstab`: + +```text +/dev/sda1 /media ext4 defaults,noatime 0 1 +``` From 5a5d9c8d4e99178f8990915df895bfabc86792a3 Mon Sep 17 00:00:00 2001 From: Adam Mills Date: Tue, 13 Mar 2018 17:24:17 -0400 Subject: [PATCH 590/993] Remove Z-Wave old entity IDs (#4749) --- source/_docs/z-wave/control-panel.markdown | 2 -- source/_docs/z-wave/installation.markdown | 5 ----- 2 files changed, 7 deletions(-) diff --git a/source/_docs/z-wave/control-panel.markdown b/source/_docs/z-wave/control-panel.markdown index 400a6b6d4c..8550f12679 100644 --- a/source/_docs/z-wave/control-panel.markdown +++ b/source/_docs/z-wave/control-panel.markdown @@ -82,10 +82,8 @@ This will display the Z-Wave related information about the node: * **lastResponseRTT** The Round Trip Time of the response to the last request * **manufacturer_name** The name of the manufacturer, as supplied by OpenZWave * **max_baud_rate** The maximum bandwidth the device supports, most modern devices will support 40,000 or higher -* **new_entity_id** In 0.47, Home Assistant introduced a new naming convention for entities, this shows the new naming convention * **node_id** The unique node ID of this node * **node_name** The base name of this node, this is used to build the entity ID of all entities of this node -* **old_entity_id** If `new_entity_ids: false` has been configured, then this is the entity_id that will be used. Support for this will be removed in the future * **product_name** The product name of the device, as supplied by OpenZWave * **query_stage** The query stage for this device (see [here](/docs/z-wave/query-stage/) for details) * **receivedCnt** The number of messages received from the device diff --git a/source/_docs/z-wave/installation.markdown b/source/_docs/z-wave/installation.markdown index 5974c16a20..3223208b9f 100644 --- a/source/_docs/z-wave/installation.markdown +++ b/source/_docs/z-wave/installation.markdown @@ -77,11 +77,6 @@ debug: required: false type: boolean default: False -new_entity_ids: - description: Switch to new entity_id generation. - required: false - type: boolean - default: True device_config / device_config_domain / device_config_glob: description: This attribute contains node-specific override values. (For releases prior to 0.39 this variable is called **customize**) See [Customizing devices and services](/docs/configuration/customizing-devices/) for the format. required: false From e5b56699afc838d0bd55b4c501d76f38dea9c700 Mon Sep 17 00:00:00 2001 From: Dale Higgs Date: Tue, 13 Mar 2018 17:07:47 -0500 Subject: [PATCH 591/993] Update documentation for Speedtest Sensor (#4914) * Update documentation for Speedtest Sensor * Fixed configuration variables * Fixed automation example * Fixed example format * Fix netlify errors for raw/endraw tags * :pencil2: Minor improvements --- source/_components/sensor.speedtest.markdown | 96 ++++++++++++++------ 1 file changed, 67 insertions(+), 29 deletions(-) diff --git a/source/_components/sensor.speedtest.markdown b/source/_components/sensor.speedtest.markdown index bc1e8bf988..f3fe80903d 100644 --- a/source/_components/sensor.speedtest.markdown +++ b/source/_components/sensor.speedtest.markdown @@ -16,12 +16,13 @@ ha_iot_class: "Cloud Polling" The `speedtest` sensor component uses the [Speedtest.net](https://speedtest.net/) web service to measure network bandwidth performance. -By default, it will run every hour. The user can change the update frequency in the configuration by defining the minute, hour, and day for a speedtest to run. For the `server_id` check the list of [available servers](https://www.speedtest.net/speedtest-servers.php). +By default, it will run every hour. The user can change the update frequency in the configuration by defining the minute, hour, and day for a speed test to run. For the `server_id` check the list of [available servers](https://www.speedtest.net/speedtest-servers.php). To add a Speedtest.net sensor to your installation, add the following to your `configuration.yaml` file: Once per hour, on the hour (default): +{% raw %} ```yaml # Example configuration.yaml entry sensor: @@ -31,32 +32,63 @@ sensor: - download - upload ``` +{% endraw %} -Configuration variables: - -- **monitored_conditions** array (*Required*): Sensors to display in the frontend. - - **ping**: Reaction time in ms of your connection (how fast you get a response after you've sent out a request). - - **download**: Download speed in Mbps. - - **upload**: Upload speed in Mbps. -- **server_id** (*Optional*): Specify the speedtest server to perform test against. -- **minute** (*Optional*): Specify the minute(s) of the hour to schedule the speedtest. Use a list for multiple entries. Default is 0. -- **hour** (*Optional*): Specify the hour(s) of the day to schedule the speedtest. Use a list for multiple entries. Default is None. -- **day** (*Optional*): Specify the day(s) of the month to schedule the speedtest. Use a list for multiple entries. Default is None. -- **manual** (*Optional*): True or False to turn manual mode on or off. Manual mode will disable scheduled speedtests. +{% configuration %} + monitored_conditions: + description: Sensors to display in the frontend. + required: true + type: list + keys: + ping: + description: Reaction time in ms of your connection (how fast you get a response after you've sent out a request). + download: + description: Download speed (Mbit/s) + upload: + description: Upload speed (Mbit/s) + server_id: + description: Specify the speed test server to perform the test against. + required: false + type: int + day: + description: Specify the day(s) of the month to schedule the speed test. Use a list for multiple entries. + required: false + type: [int, list] + hour: + description: Specify the hour(s) of the day to schedule the speed test. Use a list for multiple entries. + required: false + type: [int, list] + minute: + description: Specify the minute(s) of the hour to schedule the speed test. Use a list for multiple entries. + required: false + type: [int, list] + default: 0 + second: + description: Specify the second(s) of the minute to schedule the speed test. Use a list for multiple entries. + required: false + type: [int, list] + default: 0 + manual: + description: True or False to turn manual mode on or off. Manual mode will disable scheduled speed tests. + required: false + type: bool + default: false +{% endconfiguration %} This component uses [speedtest-cli](https://github.com/sivel/speedtest-cli) to gather network performance data from Speedtest.net. Please be aware of the potential [inconsistencies](https://github.com/sivel/speedtest-cli#inconsistency) that this component may display. -When Home Assistant first starts up, the values of the speedtest will show as `Unknown`. You can use the service `sensor.update_speedtest` to run a manual speedtest and populate the data or just wait for the next regularly scheduled test. You can turn on manual mode to disable the scheduled speedtests. +When Home Assistant first starts up, the values of the speed test will show as `Unknown`. You can use the service `sensor.update_speedtest` to run a manual speed test and populate the data or just wait for the next regularly scheduled test. You can turn on manual mode to disable the scheduled speed tests. ## {% linkable_title Examples %} -In this section you find some real life examples of how to use this sensor. +In this section, you find some real-life examples of how to use this sensor. ### {% linkable_title Run periodically %} Every half hour of every day: +{% raw %} ```yaml # Example configuration.yaml entry sensor: @@ -69,11 +101,13 @@ sensor: - download - upload ``` +{% endraw %} ### {% linkable_title Run at a specific time %} Everyday at 12:30AM, 6:30AM, 12:30PM, 6:30PM: +{% raw %} ```yaml # Example configuration.yaml entry sensor: @@ -89,29 +123,33 @@ sensor: - download - upload ``` +{% endraw %} ### {% linkable_title Using as a trigger in an automation %} +{% raw %} ```yaml # Example configuration.yaml entry automation: - - alias: 'Internet Speed Glow Connect Great' - trigger: - platform: template - value_template: '{% raw %}{{ states.sensor.speedtest_download.state|float > 10}}{% endraw %}' - action: - service: shell_command.green - - alias: 'Internet Speed Glow Connect Poor' - trigger: - platform: template - value_template: '{% raw %}{{ states.sensor.speedtest_download.state| float < 10 }}{% endraw %}' - action: - service: shell_command.red + - alias: "Internet Speed Glow Connect Great" + trigger: + - platform: template + value_template: "{{ states('sensor.speedtest_download')|float > 10 }}" + action: + - service: shell_command.green + + - alias: "Internet Speed Glow Connect Poor" + trigger: + - platform: template + value_template: "{{ states('sensor.speedtest_download')|float < 10 }}" + action: + - service: shell_command.red ``` +{% endraw %} ## {% linkable_title Notes %} - When running on Raspberry Pi, just note that the maximum speed is limited by its 100 Mbit/s LAN adapter. -- Entries under `monitored_conditions` only control what entities are available under home-assistant, it does not disable the condition from running. -- If ran frequently, this component has the capability of using a very large amount of data. Frequent updates should be avoided on bandwidth capped connections. -- While running, network usage is fully utilized. This may have a negative affect on other devices in use the network such as gaming consoles or streaming boxes. +- Entries under `monitored_conditions` only control what entities are available in Home Assistant, it does not disable the condition from running. +- If ran frequently, this component has the ability to use a considerable amount of data. Frequent updates should be avoided on bandwidth-capped connections. +- While running, your network capacity is fully utilized. This may have a negative effect on other devices in use the network such as gaming consoles or streaming boxes. From 1c723cc7f7ec8862a4ba775fc207159e776f4b34 Mon Sep 17 00:00:00 2001 From: Brian J King Date: Wed, 14 Mar 2018 00:45:12 -0500 Subject: [PATCH 592/993] Update USPS docs to include required driver declaration (#4766) With the changes to the USPS component in #12465 we're now required to specify the `driver` regardless if using `phantomjs` or `chrome`. Updating docs to reflect the required `driver: phantomjs` if using it. Re: * https://github.com/happyleavesaoc/python-myusps/issues/11 * https://github.com/home-assistant/home-assistant/pull/12465 --- source/_components/usps.markdown | 3 +++ 1 file changed, 3 insertions(+) diff --git a/source/_components/usps.markdown b/source/_components/usps.markdown index 3971db4ec6..3a7c9a06ab 100644 --- a/source/_components/usps.markdown +++ b/source/_components/usps.markdown @@ -32,6 +32,8 @@ Install the latest version of [PhantomJS]( http://phantomjs.org/download.html). Don't use apt-get to install PhantomJS. This version is not compatible.

    +If you use the PhantomJS option, specify `driver: phantomjs` in your `usps` configuration. + ### Chrome @@ -60,6 +62,7 @@ Configuration options for the USPS component: - **username** (*Required*): The username to access the MyUSPS service. - **password** (*Required*): The password for the given username. +- **driver** (*Required*): Specify if you're using `phantomjs` or `chrome`. - **name** (*Optional*): Prefix for sensor names (defaults to "USPS")

    From 07c6bd5a56dec04fa3bb0c4b27ba948a5ca86394 Mon Sep 17 00:00:00 2001 From: Ioan Loosley Date: Wed, 14 Mar 2018 06:02:53 +0000 Subject: [PATCH 593/993] Added theme colour (#4811) Most mobile browsers and now discord use this to set appropriate colours in their interface, in discords case it is setting the colour of the line on the side of the content preview of links --- .themes/classic/source/_includes/head.html | 1 + 1 file changed, 1 insertion(+) diff --git a/.themes/classic/source/_includes/head.html b/.themes/classic/source/_includes/head.html index 6b5412ca64..48d1018fca 100644 --- a/.themes/classic/source/_includes/head.html +++ b/.themes/classic/source/_includes/head.html @@ -15,6 +15,7 @@ + {% capture canonical %}{{ site.url }}{% if site.permalink contains '.html' %}{{ page.url }}{% else %}{{ page.url | remove:'index.html' | strip_slash }}{% endif %}{% endcapture %} From f7b3b06d30264fffb988c2eb26550d35327c7109 Mon Sep 17 00:00:00 2001 From: spinside Date: Wed, 14 Mar 2018 08:02:21 +0100 Subject: [PATCH 594/993] Updated SCL command to Python 3.6 instead of 3.5 (#4912) * Updated SCL command to Python 3.6 instead of 3.5 Instructions are for installing Python 3.6 but the scl command given assumes you have Python 3.5 * Updated autostart systemd template to use Python 3.6 --- source/_docs/installation/centos.markdown | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/_docs/installation/centos.markdown b/source/_docs/installation/centos.markdown index 91d0bffd5b..d1d29402a3 100644 --- a/source/_docs/installation/centos.markdown +++ b/source/_docs/installation/centos.markdown @@ -30,7 +30,7 @@ $ yum install rh-python36 Once installed, switch to your `homeassistant` user (if you've set one up), enable the software collection and check that it has set up the new version of Python: ```bash -$ scl enable rh-python35 bash +$ scl enable rh-python36 bash $ python --version Python 3.6.3 ``` @@ -55,7 +55,7 @@ User=homeassistant Environment=VIRTUAL_ENV="/srv/homeassistant" Environment=PATH="$VIRTUAL_ENV/bin:$PATH" # ExecStart using software collection: -ExecStart=/usr/bin/scl enable rh-python35 -- /srv/homeassistant/bin/hass -c "/home/homeassistant/.homeassistant" +ExecStart=/usr/bin/scl enable rh-python36 -- /srv/homeassistant/bin/hass -c "/home/homeassistant/.homeassistant" [Install] WantedBy=multi-user.target From 6ee7e31359a9bc9f4d6f0a782194c10b0baa7753 Mon Sep 17 00:00:00 2001 From: JC Connell Date: Wed, 14 Mar 2018 03:18:08 -0400 Subject: [PATCH 595/993] Update sensor.spotcrime.markdown (#4840) * Update sensor.spotcrime.markdown Changes the documentation to reflect the user supplied API key requirement. * Change description and sample Added optional keys to description and removed optional keys from sample --- source/_components/sensor.spotcrime.markdown | 48 +++++++++++++------- 1 file changed, 32 insertions(+), 16 deletions(-) diff --git a/source/_components/sensor.spotcrime.markdown b/source/_components/sensor.spotcrime.markdown index 98e2b7ee40..b36d01b4b4 100644 --- a/source/_components/sensor.spotcrime.markdown +++ b/source/_components/sensor.spotcrime.markdown @@ -8,13 +8,13 @@ comments: false sharing: true footer: true ha_category: Sensor -ha_release: 0.64 +ha_release: 0.65 ha_iot_class: "Cloud Polling" --- The `spotcrime` sensor allows one to track reported incidents occurring in a given area. Incidents include anything reported to [Spot Crime](http://spotcrime.com). Your regional emergency services may or may not report data. The sensor defaults to counting incidents within one day, but can be customized via configuration.yaml. -## Configuration +You will need to request an API key from [Spotcrime](mailto:pyrrhus@spotcrime.com). To enable this sensor, add the following lines to your `configuration.yaml`. Your `radius` should be of sufficient size to capture incidents in your area. 0.01 = 1 mile. @@ -23,23 +23,39 @@ sensor: - platform: spotcrime name: radius: - days: + api_key: <"your_api_key_here"> ``` -Configuration options for the Crime Reports Sensor: +{% configuration %} +name: + description: Name the sensor what you'd like. + required: true + type: string +radius: + description: Radius you'd like to search within. 0.01 = 1 mile. + required: true + type: float +api_key: + description: The API key to access the service. + required: true + type: string +days: + description: Number of days you'd like see to crime statistics for. + required: false + type: int +include: + description: Event types you want statistics for. + required: false + type: list +exclude: + description: Event types to ignore statistics for. + required: false + type: list +{% endconfiguration %} -- **name** (*Required*): Name the sensor whatever you want. -- **radius** (*Required*): Radius in miles. -- **days** (*Optional*): Defaults to 1 day. -- **latitude** (*Optional*): Defaults to your home zone latitude. -- **longitude** (*Optional*): Defaults to your home zone longitude. -- **include** (*Optional*): List of incident types to include. -- **exclude** (*Optional*): List of incident types to exclude. +## {% linkable_title Notes %} - -## Notes - -### Incident Types +### {% linkable_title Incident Types %} You can explicitly include or exclude incident types. Specifying `include`s restricts the incidents to those types. Specifying `exclude`s will return all incident types except those specified. @@ -55,6 +71,6 @@ These incident types are available: - Vandalism - Other -### Events +### {% linkable_title Events %} The `crimealerts` sensor fires a `crimealerts_incident` event when a new incident is detected, including the type, time, and location of the incident. From 706f8b9ed43604103ac3785e529ab3f13543a1d6 Mon Sep 17 00:00:00 2001 From: Philipp Wensauer Date: Wed, 14 Mar 2018 08:44:09 +0100 Subject: [PATCH 596/993] Vectorize architecture #2 (#4859) * Vectorize other picture. * Update path for .svg pictures. --- source/developers/architecture.markdown | 8 +- .../home_automation_landscape.svg | 904 ++++++++++++++++++ 2 files changed, 908 insertions(+), 4 deletions(-) create mode 100644 source/images/architecture/home_automation_landscape.svg diff --git a/source/developers/architecture.markdown b/source/developers/architecture.markdown index afe8a21ef9..191ed65f7b 100644 --- a/source/developers/architecture.markdown +++ b/source/developers/architecture.markdown @@ -7,7 +7,7 @@ sidebar: true comments: false sharing: true footer: true -og_image: /images/architecture/ha_architecture.png +og_image: /images/architecture/ha_architecture.svg --- Before we dive into the Home Assistant architecture, let's get a clear overview of the home automation landscape as a whole. This way, we can show how the different parts of Home Assistant fit into the picture. @@ -19,9 +19,9 @@ For more information about each part in this overview, - + Home Automation landscape + src='{{site_root}}/images/architecture/home_automation_landscape.svg' /> Overview of the home automation landscape

    @@ -34,7 +34,7 @@ The Home Assistant core is responsible for Home Control. Home Assistant contains * **Timer**: sends a `time_changed` event every 1 second on the event bus.

    - + Overview of the Home Assistant core architecture diff --git a/source/images/architecture/home_automation_landscape.svg b/source/images/architecture/home_automation_landscape.svg new file mode 100644 index 0000000000..c0fbca2818 --- /dev/null +++ b/source/images/architecture/home_automation_landscape.svg @@ -0,0 +1,904 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + Lights + + + + Smart Home + + HomeAutomation + User + + Configuration + + Home Control + Commands + Information + + + + Switches + Many more... + Internet of Things + + + + + Commands + Information + Information + Commands + Information(ie. light is on) + Commands(ie. turn light on) + Graphic by Paulus Schoutsen 2014, CC BY 4.0 + + From 05add9774351c49e18d415677523fb759e627bf8 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Wed, 14 Mar 2018 09:14:56 +0100 Subject: [PATCH 597/993] Update integrations --- source/help/talking-points.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/help/talking-points.markdown b/source/help/talking-points.markdown index 040bd3ad0b..44c106d2de 100644 --- a/source/help/talking-points.markdown +++ b/source/help/talking-points.markdown @@ -12,7 +12,7 @@ footer: true People are starting to present Home Assistant at meetings and get-togethers. Below you find a couple of bullet points for your presentation. - [Numbers, numbers, numbers](/help/trivia/) and other details -- Over 750 implementations +- Over 1000 implementations - Not depending on cloud services. We like to keep your privacy private - Control all your devices from a single, mobile-friendly interface - Written in Python3 with 94% test coverage From ad10b7ba14c17695a9180d81279abd2b34b49b6b Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Wed, 14 Mar 2018 09:15:17 +0100 Subject: [PATCH 598/993] Add Thomas Krenn award 2018 --- source/help/index.markdown | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/source/help/index.markdown b/source/help/index.markdown index 4ad053d851..12e1dfde02 100644 --- a/source/help/index.markdown +++ b/source/help/index.markdown @@ -48,6 +48,7 @@ Looking for [talking points](/help/talking-points/) or [trivia](/help/trivia)? Don't miss the regular [Home Assistant podcasts](https://hasspodcast.io/). +- [The winners of the Thomas-Krenn-Awards 2018](https://www.thomas-krenn.com/de/tkmag/allgemein/die-gewinner-des-thomas-krenn-awards-2018-stehen-fest/) - March 2018 - [Hausautomations-Schaltzentrale Home Assistant auf Python-Basis](https://www.heise.de/ct/ausgabe/2017-26-Hausautomations-Schaltzentrale-Home-Assistant-3909532.html) - December 2017 - [Using Home Assistant the ARTIK Cloud](https://developer.artik.io/documentation/developer-guide/wireless-iot/hass.html) - September 2017 - [Control home automation hardware with Home Assistant](http://www.linux-magazine.com/Issues/2017/203/Home-Assistant) - August 2017 @@ -61,7 +62,7 @@ Don't miss the regular [Home Assistant podcasts](https://hasspodcast.io/). - [Monitor IoT devices with Home Assistant and Datadog](https://www.datadoghq.com/blog/monitor-home-assistant/) - June 2017 - [Castálio Podcast - Episódio 102: Marcelo Mello - Red Hat e Automação Residencial com Home Assistant](https://youtu.be/hZq8ucpzjCs) - May 2017 - [Paulus Schoutsen and Home Assistant - Episode 8](http://codepop.com/open-sourcecraft/episodes/paulus-schoutsen/) - March 2017 -- [Zammad, Home Assistant und Freifunk - are the winner of the Thomas-Krenn-Awards 2017](https://www.thomas-krenn.com/de/tkmag/allgemein/zammad-home-assistant-und-freifunk-das-sind-die-gewinner-des-thomas-krenn-awards-2017/) - March 2017 +- [Zammad, Home Assistant and Freifunk - are the winner of the Thomas-Krenn-Awards 2017](https://www.thomas-krenn.com/de/tkmag/allgemein/zammad-home-assistant-und-freifunk-das-sind-die-gewinner-des-thomas-krenn-awards-2017/) - March 2017 - [10 open source software tools for developing IoT applications](http://www.cbronline.com/news/internet-of-things/10-open-source-software-tools-developing-iot-applications/) - March 2017 - [A Look at HASSbian: Raspberry Pi for Home Automation](http://www.piboards.com/2017/03/07/a-look-at-hassbian-raspberry-pi-for-home-automation/)- March 2017 - [Home Assistant with Paulus Schoutsen - Episode 94](https://www.podcastinit.com/episode-94-home-assistant-with-paulus-schoutsen/) - January 2017 From 3ddfa61ad5fcca01bf5879c8182304245395f9ae Mon Sep 17 00:00:00 2001 From: Mark Perdue Date: Wed, 14 Mar 2018 07:36:12 -0400 Subject: [PATCH 599/993] Add VeSync documentation and image (#4864) * Add VeSync documentation and image * Adds fix for TravisCI error endconfiguration * :pencil2: Tiny updates --- source/_components/switch.vesync.markdown | 36 ++++++++++++++++++++++ source/images/supported_brands/vesync.png | Bin 0 -> 52019 bytes 2 files changed, 36 insertions(+) create mode 100644 source/_components/switch.vesync.markdown create mode 100644 source/images/supported_brands/vesync.png diff --git a/source/_components/switch.vesync.markdown b/source/_components/switch.vesync.markdown new file mode 100644 index 0000000000..d3b5971636 --- /dev/null +++ b/source/_components/switch.vesync.markdown @@ -0,0 +1,36 @@ +--- +layout: page +title: "VeSync Switch" +description: "Instructions on how to set up Etekcity VeSync switches within Home Assistant." +date: 2018-03-09 02:11 +sidebar: true +comments: false +sharing: true +footer: true +logo: vesync.png +ha_category: Switch +ha_release: 0.66 +--- + +The `vesync` switch platform enabled integration with Etekcity VeSync smart switches. + +To use your VeSync switches, you must first register your switches with the VeSync app. Once registration is complete you must add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +switch: + - platform: vesync + username: username + password: password +``` + +{% configuration %} +username: + description: Username needed to log in to VeSync. + required: true + type: string +password: + description: Password needed to log in to VeSync. + required: true + type: string +{% endconfiguration %} diff --git a/source/images/supported_brands/vesync.png b/source/images/supported_brands/vesync.png new file mode 100644 index 0000000000000000000000000000000000000000..72aba904138e7c78967e93f0dfaefd5b9de896e6 GIT binary patch literal 52019 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 Date: Wed, 14 Mar 2018 21:39:30 +0100 Subject: [PATCH 600/993] Explain workaround for limitlessled assumed_state (#4856) * Explain workaround for limitlessled assumed_state * :pencil2: Tiny grammar change --- source/_components/light.limitlessled.markdown | 13 +++++++++++++ .../screenshots/limitlessled_assumed_state.png | Bin 0 -> 8406 bytes 2 files changed, 13 insertions(+) create mode 100644 source/images/screenshots/limitlessled_assumed_state.png diff --git a/source/_components/light.limitlessled.markdown b/source/_components/light.limitlessled.markdown index 5373e34b87..2dcf4d9c7a 100644 --- a/source/_components/light.limitlessled.markdown +++ b/source/_components/light.limitlessled.markdown @@ -90,3 +90,16 @@ When starting Home Assistant, the last recorded state will be shown. This might If you control your LimitlessLED lights via the MiLight mobile application or other means while Home Assistant is running, Home Assistant can not track those changes and you may observe obsolete information. This lack of synchronization is due to a LimitlessLED limitation. + +

    + +

    + +Because LimitlessLED lights may have an obsolete state, Home Assistant shows the power switch as two buttons rather than a toggle. This ensures that the power can be set with a single click even if the assumed state is wrong. You can change to use the power toggle with [Customize](/docs/configuration/customizing-devices/): + +```yaml +homeassistant: + customize_domain: + light: + assumed_state: false +``` diff --git a/source/images/screenshots/limitlessled_assumed_state.png b/source/images/screenshots/limitlessled_assumed_state.png new file mode 100644 index 0000000000000000000000000000000000000000..ea1b99c36686b918099fc5619a55610e1c934c55 GIT binary patch literal 8406 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 literal 0 HcmV?d00001 From c6983a9df12021560d664c366cd1b08a0481444d Mon Sep 17 00:00:00 2001 From: Pascal Vizeli Date: Wed, 14 Mar 2018 21:54:25 +0100 Subject: [PATCH 601/993] Update dnsmasq.markdown --- source/_addons/dnsmasq.markdown | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/source/_addons/dnsmasq.markdown b/source/_addons/dnsmasq.markdown index 6ae42294f5..d894320ab0 100644 --- a/source/_addons/dnsmasq.markdown +++ b/source/_addons/dnsmasq.markdown @@ -11,10 +11,6 @@ footer: true Setup and manage a [Dnsmasq](http://thekelleys.org.uk/dnsmasq/doc.html) DNS server. This allows you to manipulate DNS requests. For example, you can have your Home Assistant domain resolve with an internal address inside your network. -

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

    - ```json { "defaults": ["8.8.8.8", "8.8.4.4"], @@ -23,8 +19,7 @@ Setup and manage a [Dnsmasq](http://thekelleys.org.uk/dnsmasq/doc.html) DNS serv ], "hosts": [ {"host": "home.mydomain.io", "ip": "192.168.1.10"} - ], - "interface": "eth1" + ] } ``` @@ -33,4 +28,3 @@ Configuration variables: - **defaults** (*Required*): A list of DNS servers to forward default requests to. - **forwards** (*Optional*): A list of domains that will forward to a specific server. - **hosts** (*Optional*): A list of hosts to resolve statically. -- **interface** (*Optional*): If an interface is set, it listens only on this interface. Needs to be set for ResinOS. Normally is `eth0` for ethernet wired connection and `wlan0` for wireless connection. From 39488b09198d4f5bf587e1dbbf5a2d2096d34c46 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Wed, 14 Mar 2018 15:57:37 -0700 Subject: [PATCH 602/993] release 0.65.5 --- _config.yml | 6 +++--- source/_posts/2018-03-09-release-65.markdown | 21 ++++++++++++++++++++ 2 files changed, 24 insertions(+), 3 deletions(-) diff --git a/_config.yml b/_config.yml index d4558554a3..4a90ed5885 100644 --- a/_config.yml +++ b/_config.yml @@ -140,13 +140,13 @@ social: # Home Assistant release details current_major_version: 0 current_minor_version: 65 -current_patch_version: 4 -date_released: 2018-03-12 +current_patch_version: 5 +date_released: 2018-03-14 # Either # or the anchor link to latest release notes in the blog post. # Must be prefixed with a # and have double quotes around it. # Major release: -patch_version_notes: "#release-0654---march-12" +patch_version_notes: "#release-0655---march-14" # Minor release (Example #release-0431---april-25): # Date we moved to Discourse for comments diff --git a/source/_posts/2018-03-09-release-65.markdown b/source/_posts/2018-03-09-release-65.markdown index ce3e803fcf..c198e403ad 100644 --- a/source/_posts/2018-03-09-release-65.markdown +++ b/source/_posts/2018-03-09-release-65.markdown @@ -153,6 +153,14 @@ intent_script: - Adding check for empty discovery info in alarm control panel Egardia. ([@jeroenterheerdt] - [#13114]) ([alarm_control_panel.egardia docs]) - Throttle Arlo api calls ([@arsaboo] - [#13143]) ([arlo docs]) +## {% linkable_title Release Notes 0.65.5 - March 14 %} + +- Bugfix HomeKit: Error string values for temperature ([@cdce8p] - [#13162]) ([homekit docs]) +- Revert throttle Arlo api calls ([@arsaboo] - [#13174]) ([arlo docs]) +- Ignore unsupported Sonos favorites ([@amelchio] - [#13195]) ([media_player.sonos docs]) +- Avoid Sonos error when joining with self ([@amelchio] - [#13196]) ([media_player.sonos docs]) +- Fix input_boolean Google Assistant serialize error ([@balloob] - [#13220]) ([google_assistant docs]) + ## {% linkable_title If you need help... %} ...don't hesitate to use our very active [forums](https://community.home-assistant.io/) or join us for a little [chat](https://discord.gg/c5DvZ4e). The release notes have comments enabled but it's preferred if you use the former communication channels. Thanks. @@ -713,3 +721,16 @@ Experiencing issues introduced by this release? Please report them in our [issue [hue docs]: https://home-assistant.io/components/hue/ [light.hue docs]: https://home-assistant.io/components/light.hue/ [switch.wemo docs]: https://home-assistant.io/components/switch.wemo/ +[#13162]: https://github.com/home-assistant/home-assistant/pull/13162 +[#13174]: https://github.com/home-assistant/home-assistant/pull/13174 +[#13195]: https://github.com/home-assistant/home-assistant/pull/13195 +[#13196]: https://github.com/home-assistant/home-assistant/pull/13196 +[#13220]: https://github.com/home-assistant/home-assistant/pull/13220 +[@amelchio]: https://github.com/amelchio +[@arsaboo]: https://github.com/arsaboo +[@balloob]: https://github.com/balloob +[@cdce8p]: https://github.com/cdce8p +[arlo docs]: https://home-assistant.io/components/arlo/ +[google_assistant docs]: https://home-assistant.io/components/google_assistant/ +[homekit docs]: https://home-assistant.io/components/homekit/ +[media_player.sonos docs]: https://home-assistant.io/components/media_player.sonos/ From 25148ef299d56c10aa37054c46c9c87be9f9c0eb Mon Sep 17 00:00:00 2001 From: engrbm87 Date: Thu, 15 Mar 2018 01:04:01 +0200 Subject: [PATCH 603/993] Update downloader.markdown (#4916) * Update downloader.markdown Add description for new events that are emitted when download is requested. * :pencil2: Small fixes --- source/_components/downloader.markdown | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/source/_components/downloader.markdown b/source/_components/downloader.markdown index 53063587d6..469c13d2b7 100644 --- a/source/_components/downloader.markdown +++ b/source/_components/downloader.markdown @@ -42,3 +42,29 @@ This will download the file from the given URL. | `subdir` | yes | Download into subdirectory of **download_dir** | | `filename` | yes | Determine the filename. | | `overwrite` | yes | Whether to overwrite the file or not, defaults to `false`. | + +### {% linkable_title Download Status Events %} + +When a download finished successfully, Home Assistant will emit a 'downloader_download_completed' event to the event bus which you can use to write automations against. +In case download failed another event 'downloader_download_failed' is emitted to indicate that the download did not complete successfully. + +Along with the event the following payload parameters are available: + +| Parameter | Description | +|-----------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| `url` | The `url` that was requested.| +| `filename` | The `name` of the file that was being downloaded.| + +#### Example Automation: + +```yaml +- alias: Download Failed Notification + trigger: + platform: event + event_type: downloader_download_failed + action: + service: persistent_notification.create + data_template: + message: "{{trigger.event.data.filename}} download failed" + title: "Download Failed" + ``` From 06d3f4d0b31f355ab5e4875150f13ecaa6ce2e85 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Wed, 14 Mar 2018 16:57:55 -0700 Subject: [PATCH 604/993] generate a robots.txt file that blocks search engines if not prod site (#4919) --- Rakefile | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/Rakefile b/Rakefile index e44380c49d..c56c918561 100644 --- a/Rakefile +++ b/Rakefile @@ -60,6 +60,13 @@ task :generate do abort("Generating CSS failed") unless success success = system "jekyll build" abort("Generating site failed") unless success + if ENV["CONTEXT"] != 'production' + File.open("#{public_dir}robots.txt", 'w') do |f| + f.write "User-agent: *\n" + f.write "Disallow: /\n" + end + end + public_dir end desc "Watch the site and regenerate when it changes" From 9c20af02fac6aa5cf795507d80a2b6ae60efbfe9 Mon Sep 17 00:00:00 2001 From: cdce8p <30130371+cdce8p@users.noreply.github.com> Date: Thu, 15 Mar 2018 03:16:30 +0100 Subject: [PATCH 605/993] Homekit: Updated docs for Restructure PR (#4915) * Homekit: Updated docs for Restructure PR * Added considerations * Removed QR Code --- source/_components/homekit.markdown | 147 +++++++++++++++++++++++++--- 1 file changed, 131 insertions(+), 16 deletions(-) diff --git a/source/_components/homekit.markdown b/source/_components/homekit.markdown index ebb4b6ccd4..4ed321f4bb 100644 --- a/source/_components/homekit.markdown +++ b/source/_components/homekit.markdown @@ -12,7 +12,7 @@ ha_release: 0.64 logo: apple-homekit.png --- -The `HomeKit` component allows you to forward entities from Home Assistant to Apple `HomeKit`, so they could be controlled from Apple `Home` app and `Siri`. +The `HomeKit` component allows you to forward entities from Home Assistant to Apple `HomeKit`, so they could be controlled from Apple `Home` app and `Siri`. Please make sure that you have read the [considerations](#considerations) listed below to save you some trouble later. {% configuration %} homekit: @@ -20,18 +20,55 @@ The `HomeKit` component allows you to forward entities from Home Assistant to Ap required: true type: map keys: - pincode: - description: Pin code required during setup of HomeKit Home Assistant accessory. The format needs to be 'XXX-XX-XXX' where X is a number between 0 and 9. + auto_start: + description: Flag if the HomeKit Server should start automatically after the Home Assistant Core Setup is done. ([Disable Auto Start](#disable-auto-start)) required: false - type: string - default: '"123-45-678"' + type: boolean + default: true port: description: Port for the HomeKit extension. required: false type: int - default: 51826 + default: 51827 + filter: + description: Filter entities to available in the `Home` app. ([Configure Filter](#configure-filter)) + required: false + type: map + keys: + include_domains: + description: Domains to be included. + required: false + type: list + include_entities: + description: Entities to be included. + required: false + type: list + exclude_domains: + description: Domains to be excluded. + required: false + type: list + exclude_entities: + description: Entities to be excluded. + required: false + type: list + entity_config: + description: Configuration for specific entities. All subordinate keys are the corresponding entity ids to the domains, e.g. `alarm_control_panel.alarm`. + required: false + type: map + keys: + alarm_control_panel: + description: Additional options for `alarm_control_panel` entities. + required: false + type: map + keys: + code: + description: Code to arm or disarm the alarm in the frontend. + required: false + type: string + default: '' {% endconfiguration %} + ## {% linkable_title Setup %} To enable the `HomeKit` component in Home Assistant, add the following to your configuration file: @@ -39,18 +76,78 @@ To enable the `HomeKit` component in Home Assistant, add the following to your c ```yaml # Example for HomeKit setup homekit: - pincode: '123-45-678' ``` -

    It is not recommended to choose '123-45-678' as your pin code!

    - -After Home Assistant has started, all supported entities (see the [list](#supported-components) below which components are already integrated) will be exposed to `HomeKit`. To add them: -1. Open the `Home` App. -2. Choose `Add Accessory` and then `Don't Have a Code or Can't Scan?`. -3. The `Home Assistant` Bridge should be listed there. Select it and follow the instructions to complete setup. +After Home Assistant has started, the entities specified by the filter are exposed to `HomeKit` if the are [supported](#supported-components). To add them: +1. Open the Home Assistant frontend. A new card will display the `pin code`. +1. Open the `Home` app. +2. Choose `Add Accessory`, than select `Don't Have a Code or Can't Scan?` and enter the `pin code`. +4. Confirm the you are adding an `Uncertified Accessory` by clicking on `Add Anyway`. +5. Follow the setup be clicking on `Next` and lastly `Done` in the top right hand corner. +6. The `Home Assistant` Bridge and the Accessories should now be listed in the `Home` app. After the setup is completed you should be able to control your Home Assistant components through `Home` and `Siri`. + +## {% linkable_title Considerations %} + + +### {% linkable_title Accessory ID %} + +Currently this component uses the `entity_id` to generate a unique `accessory id (aid)` for `HomeKit`. The `aid` is used to identify a device and save all configurations made for it. This however means that if you decide to change an `entity_id` all configurations for this accessory made in the `Home` app will be lost. + +### {% linkable_title Persistence Storage %} + +Unfortunately `HomeKit` doesn't support any kind of persistence storage, only the configuration for accessories that are added to the `Home Assistant Bridge` are kept. To avoid problems it is recommended to use an automation to always start `HomeKit` with at least the same entities setup. If for some reason some entities are not setup, their config will be deleted. (State unknown or similar will not cause any issues.) + +A common situation might be if you decide to disable parts of the configuration for testing. Please make sure to disable `auto start` and `turn off` the `Start HomeKit` automation (if you have one). + + +## {% linkable_title Disable Auto Start %} + +Depending on your individual setup, it might be necessary to disable `Auto Start` for all accessories to be available for `HomeKit`. Only those entities that are fully setup when the `HomeKit` component is started, can be added. To start `HomeKit` when `auto_start: False`, you can call the service `homekit.start`. + +This can be automated using an `automation`. + +{% raw %} +```yaml +# Example for Z-Wave +homekit: + auto_start: False + +automation: + - alias: 'Start HomeKit' + trigger: + - platform: event + event_type: zwave.network_ready + action: + - service: homekit.start +``` +{% endraw %} + +{% raw %} +```yaml +# Example using a delay after start of Home Assistant +homekit: + auto_start: False + +automation: + - alias: 'Start HomeKit' + trigger: + - platform: homeassistant + event: start + action: + - delay: 00:05 # Waits 5 minutes + - service: homekit.start +``` +{% endraw %} + + +## {% linkable_title Configure Filter %} + +To limit which entities are being exposed to `HomeKit`, you can use the `filter` parameter. By default no entity will be excluded. Keep in mind though that only supported components can be added. + + ## {% linkable_title Supported Components %} The following components are currently supported: @@ -59,8 +156,26 @@ The following components are currently supported: | --------- | --------- | ----------- | | alarm_control_panel | SecuritySystem | All security systems. | | climate | Thermostat | All climate devices. | -| cover | Window | All covers that support `set_cover_position`. | +| cover | WindowCovering | All covers that support `set_cover_position`. | | sensor | TemperatureSensor | All sensors that have `Celsius` and `Fahrenheit` as their `unit_of_measurement`. | -| switch/remote | Switch | All switches or remotes (represented as switches). | +| switch / remote | Switch | All switches or remotes (represented as switches). | -

    Currently only devices that are setup when Home Assistant is starting can be exposed to `HomeKit`. This means that especially `Z-Wave` components are currently not supported, since they will be setup afterwards. We are working on a solution for this problem.

    + +## {% linkable_title Error reporting %} + +If you encounter any issues or bug and want to report them on `GitHub`, please follow these steps to make it easier for others to help and get your issue solved. + +1. Enable debugging mode: +```yaml +logger: + default: warning + logs: + homeassistant.components.homekit: debug +``` +2. Reproduce the bug / problem you have encountered. +3. Stop Home Assistant and copy the log from the log file. That is necessary since some errors only get logged, when Home Assistant is being shutdown. +4. Follow this link: [home-assistant/issues/new](https://github.com/home-assistant/home-assistant/issues/new?labels=component: homekit) and open a new issue. +5. Fill out all fields and especially include the following information: + - The configuration entries for `homekit` and the `component` that is causing the issue. + - The log / traceback you have generated before. + - Screenshots of the failing entity in the `states` panel. From e050bcaa61844388b570f9e4ceff32860ca4015a Mon Sep 17 00:00:00 2001 From: Kane610 Date: Thu, 15 Mar 2018 04:07:56 +0100 Subject: [PATCH 606/993] Document support for consumption and power sensors (#4917) --- source/_components/deconz.markdown | 2 ++ 1 file changed, 2 insertions(+) diff --git a/source/_components/deconz.markdown b/source/_components/deconz.markdown index abebcec803..184e553f19 100644 --- a/source/_components/deconz.markdown +++ b/source/_components/deconz.markdown @@ -32,9 +32,11 @@ deconz: #### {% linkable_title Supported Device types %} - [Zigbee Lights](/components/light.deconz/) +- [Consumption Sensors](/components/sensor.deconz/) - [Humidity Sensors](/components/sensor.deconz/) - [Light Level Sensors](/components/sensor.deconz/) - [OpenClose Detectors](/components/binary_sensor.deconz/) +- [Power Sensors](/components/sensor.deconz/) - [Presence Detectors](/components/binary_sensor.deconz/) - [Pressure Sensors](/components/sensor.deconz/) - [Switches (Remote Controls)](/components/sensor.deconz/) From fd27ef1749b3fef072db6d77cc7909a62edf033f Mon Sep 17 00:00:00 2001 From: PhracturedBlue Date: Wed, 14 Mar 2018 20:41:03 -0700 Subject: [PATCH 607/993] Use configuration template (#4920) --- source/_components/camera.proxy.markdown | 51 +++++++++++++++++++----- 1 file changed, 40 insertions(+), 11 deletions(-) diff --git a/source/_components/camera.proxy.markdown b/source/_components/camera.proxy.markdown index 41719935d3..c5e92bc3d2 100644 --- a/source/_components/camera.proxy.markdown +++ b/source/_components/camera.proxy.markdown @@ -29,17 +29,46 @@ camera: max_image_width: 720 ``` -Configuration variables: - -- **entity_id** (*Required*): The ID of another Home Assistant camera to post-process. -- **name** (*Optional*): This parameter allows you to override the name of your camera. -- **max_image_width** (*Optional*): The maximum width of single images taken from the camera (aspect ratio will be maintained). -- **max_stream_width** (*Optional*): The maximum width of the MJPEG stream from the camera (aspect ratio will be maintained). -- **image_quality** (*Optional*): The quality level used for resulting JPEG for snapshots (default: 75). -- **stream_quality** (*Optional*): The quality level used for resulting MJPEG streams (default: 75). -- **image_refresh_rate** (*Optional*): The minimum time in seconds between generating successive image snapshots. -- **force_resize** (*Optional*): Resize the image even if the resulting image would take up more bandwidth than the original. -- **cache_images** (*Optional*): Preserve the last image and re-send in the case the camera is not responding. +{% configuration %} + entity_id: + description: The ID of another Home Assistant camera to post-process. + required: true + type: string + name: + description: This parameter allows you to override the name of your camera. + required: false + type: string + max_image_width: + description: The maximum width of single images taken from the camera (aspect ratio will be maintained). + required: false + type: integer + max_stream_width: + description: The maximum width of the MJPEG stream from the camera (aspect ratio will be maintained). + required: false + type: integer + image_quality: + description: The quality level used for resulting JPEG for snapshots. + required: false + type: integer + default: 75 + stream_quality: + description: The quality level used for resulting MJPEG streams. + required: false + type: integer + default: 75 + image_refresh_rate: + description: The minimum time in seconds between generating successive image snapshots. + required: false + type: float + force_resize: + description: Resize the image even if the resulting image would take up more bandwidth than the original. + required: false + type: boolean + cache_images: + description: Preserve the last image and re-send in the case the camera is not responding. + required: false + type: boolean +{% endconfiguration %} ## {% linkable_title Examples %} From be5a6ff8d8a5f999334c83dce4b12ab96867942a Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Wed, 14 Mar 2018 20:54:41 -0700 Subject: [PATCH 608/993] Update 2018-03-09-release-65.markdown --- source/_posts/2018-03-09-release-65.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_posts/2018-03-09-release-65.markdown b/source/_posts/2018-03-09-release-65.markdown index c198e403ad..213ecb8b92 100644 --- a/source/_posts/2018-03-09-release-65.markdown +++ b/source/_posts/2018-03-09-release-65.markdown @@ -153,7 +153,7 @@ intent_script: - Adding check for empty discovery info in alarm control panel Egardia. ([@jeroenterheerdt] - [#13114]) ([alarm_control_panel.egardia docs]) - Throttle Arlo api calls ([@arsaboo] - [#13143]) ([arlo docs]) -## {% linkable_title Release Notes 0.65.5 - March 14 %} +## {% linkable_title Release 0.65.5 - March 14 %} - Bugfix HomeKit: Error string values for temperature ([@cdce8p] - [#13162]) ([homekit docs]) - Revert throttle Arlo api calls ([@arsaboo] - [#13174]) ([arlo docs]) From 33e7be6bc313d99f6dd925bc08284cbb2fc7bdcb Mon Sep 17 00:00:00 2001 From: cdce8p <30130371+cdce8p@users.noreply.github.com> Date: Thu, 15 Mar 2018 21:57:38 +0100 Subject: [PATCH 609/993] Added cover group platform (#4638) * Added doc for MultiCover * Added parameter description * entity_id_regex * Removed winter protection * Changed to 'group' platform * Changed 'Group Cover' to 'Cover Group' * :pencil2: Small grammar fix * :arrow_up: Updated ha_release. --- source/_components/cover.group.markdown | 43 +++++++++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 source/_components/cover.group.markdown diff --git a/source/_components/cover.group.markdown b/source/_components/cover.group.markdown new file mode 100644 index 0000000000..c29b4b46a1 --- /dev/null +++ b/source/_components/cover.group.markdown @@ -0,0 +1,43 @@ +--- +layout: page +title: "Cover Group" +description: "Instructions how to setup grouped covers in Home Assistant." +date: 2018-02-11 10:00 +sidebar: true +comments: false +sharing: true +footer: true +ha_category: Cover +ha_release: 0.66 +ha_iot_class: "Local Push" +logo: home-assistant.png +--- + +The `group` platform can create a cover that combines several cover entities into one. + +To enable `Cover Groups` in your installation, add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +cover: + - platform: group + entities: + - cover.hall_window + - cover.living_room_window +``` + +{% configuration %} + name: + description: Name to use in the frontend. + required: false + type: string + default: "Cover Group" + entities: + description: List of all cover entities you want to control. + required: true + type: [string | list] +{% endconfiguration %} + +## {% linkable_title Functionality %} + +It works best if you group covers with the same supported features together (like support for `open`/`close`/`stop`/`position`/`tilt controls`), but is not limited to it. In case you have bundled covers with different features together, the controls will only affect those covers that support the actions. From e62bb85ba0dbae38337ceb08be6babcf8a8af0fd Mon Sep 17 00:00:00 2001 From: JammyDodger231 Date: Thu, 15 Mar 2018 21:00:08 +0000 Subject: [PATCH 610/993] Changed note about base url (#4557) * Changed note about base url Changed the location to be above the fold * :pencil2: Updating the note + some minors --- source/_components/tts.markdown | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/source/_components/tts.markdown b/source/_components/tts.markdown index 7a2733ebbc..c32de7d20c 100644 --- a/source/_components/tts.markdown +++ b/source/_components/tts.markdown @@ -22,13 +22,17 @@ tts: - platform: google ``` -The following optional parameters can be used with any platform. However the TTS component will only look for global settings under the configuration of the first configured platform: +

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

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

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

    - ## {% linkable_title Service say %} -The `say` service support `language` and on some platforms also `options` for set i.e. *voice, motion, speed, etc*. The text for speech is set with `message`. +The `say` service support `language` and on some platforms also `options` for set, i.e., *voice, motion, speed, etc*. The text for speech is set with `message`. Say to all `media_player` device entities: From 23d593c0f4ce6b3078dd3984ff85189a765f8501 Mon Sep 17 00:00:00 2001 From: Franck Nijhof Date: Thu, 15 Mar 2018 22:21:57 +0100 Subject: [PATCH 611/993] Adds rel nofollow to external links (#4918) * :sparkles: Adds rel nofollow to external links Fixes #4583 Signed-off-by: Franck Nijhof * :ribbon: Adds support for appending nofollow to existing external links --- Gemfile | 1 + Gemfile.lock | 6 +++++- plugins/no_follow.rb | 33 +++++++++++++++++++++++++++++++++ source/_layouts/default.html | 2 +- 4 files changed, 40 insertions(+), 2 deletions(-) create mode 100644 plugins/no_follow.rb diff --git a/Gemfile b/Gemfile index d7b8fe661d..1b5ab49ea5 100644 --- a/Gemfile +++ b/Gemfile @@ -24,3 +24,4 @@ group :jekyll_plugins do end gem 'sinatra', '~> 1.4.2' +gem 'nokogiri' diff --git a/Gemfile.lock b/Gemfile.lock index 9b9a87a02c..051fb09fdb 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -42,6 +42,9 @@ GEM rb-inotify (~> 0.9, >= 0.9.7) mercenary (0.3.6) method_source (0.8.2) + mini_portile2 (2.3.0) + nokogiri (1.8.2) + mini_portile2 (~> 2.3.0) octopress (3.0.11) jekyll (>= 2.0) mercenary (~> 0.3.2) @@ -100,6 +103,7 @@ DEPENDENCIES jekyll-redirect-from jekyll-sitemap jekyll-time-to-read + nokogiri octopress (~> 3.0) octopress-include-tag pry @@ -113,4 +117,4 @@ RUBY VERSION ruby 2.4.1p111 BUNDLED WITH - 1.15.4 + 1.16.1 diff --git a/plugins/no_follow.rb b/plugins/no_follow.rb new file mode 100644 index 0000000000..27da6c90f2 --- /dev/null +++ b/plugins/no_follow.rb @@ -0,0 +1,33 @@ +# Jekyll Auto Nofollow Plugin +# Automatically adds rel='external nofollow' to outgoing links. + +require 'jekyll' +require 'nokogiri' + +module Jekyll + module NoFollow + def nofollow(content) + dom = Nokogiri::HTML.fragment(content) + + # Find all links + dom.css('a').each do |link| + rel = ['external', 'nofollow'] + + # All external links start with 'http', skip when this one does not + next unless link.get_attribute('href') =~ /\Ahttp/i + + # Play nice with our own links + next if link.get_attribute('href') =~ /\Ahttps?:\/\/\w*.?home-assistant.io/i + + # Play nice with links that already have a rel attribute set + rel.unshift(link.get_attribute('rel')) + + # Add rel attribute to link + link.set_attribute('rel', rel.join(' ').strip) + end + dom.to_s + end + end +end + +Liquid::Template.register_filter(Jekyll::NoFollow) diff --git a/source/_layouts/default.html b/source/_layouts/default.html index 5c8e47d068..ca7e0199c2 100644 --- a/source/_layouts/default.html +++ b/source/_layouts/default.html @@ -24,7 +24,7 @@ layout: compress
    {% endif %} - {{ content }} + {{ content | nofollow }}
    From e23f5de59017a29738eecd710d5a84c38890f132 Mon Sep 17 00:00:00 2001 From: Gerard Date: Thu, 15 Mar 2018 23:24:57 +0100 Subject: [PATCH 612/993] Documentation for extra sensors BMW Connected Drive (#4733) * Documentation for extra sensors BMW Connected Drive * Updates to logo, category and HA release * :arrow_up: ha_release * :arrow_up: ha_release --- ...binary_sensor.bmw_connected_drive.markdown | 20 +++++++++++++++++++ .../lock.bmw_connected_drive.markdown | 20 +++++++++++++++++++ 2 files changed, 40 insertions(+) create mode 100755 source/_components/binary_sensor.bmw_connected_drive.markdown create mode 100755 source/_components/lock.bmw_connected_drive.markdown diff --git a/source/_components/binary_sensor.bmw_connected_drive.markdown b/source/_components/binary_sensor.bmw_connected_drive.markdown new file mode 100755 index 0000000000..6c38dc813e --- /dev/null +++ b/source/_components/binary_sensor.bmw_connected_drive.markdown @@ -0,0 +1,20 @@ +--- +layout: page +title: "BMW connected drive" +description: "Instructions on how to setup your BMW connected drive account with Home Assistant." +date: 2018-02-22 23:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: bmw.png +ha_category: Binary Sensor +ha_release: 0.66 +--- + + +The `bmw_connected_drive` platform allows you to import data on your BMW into Home Assistant. + +The binary sensors will be automatically configured if 'bmw_connected_drive' component is configured. + +For more configuration information see the [bmw_connected_drive component](/components/bmw_connected_drive/) documentation. diff --git a/source/_components/lock.bmw_connected_drive.markdown b/source/_components/lock.bmw_connected_drive.markdown new file mode 100755 index 0000000000..2a7f670812 --- /dev/null +++ b/source/_components/lock.bmw_connected_drive.markdown @@ -0,0 +1,20 @@ +--- +layout: page +title: "BMW connected drive" +description: "Instructions on how to setup your BMW connected drive account with Home Assistant." +date: 2018-02-22 23:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: bmw.png +ha_category: Lock +ha_release: 0.66 +--- + + +The `bmw_connected_drive` platform allows you to import data on your BMW into Home Assistant. + +The lock will be automatically configured if 'bmw_connected_drive' component is configured. + +For more configuration information see the [bmw_connected_drive component](/components/bmw_connected_drive/) documentation. From f8cdbdf880f55e9bb56ec11c0b1a91c6ebb6a83d Mon Sep 17 00:00:00 2001 From: Fabien Piuzzi Date: Fri, 16 Mar 2018 03:51:29 +0100 Subject: [PATCH 613/993] Foobot (#4670) * Foobot sensor device documentation * Tweaked documentation * :pencil2: Minor changes --- source/_components/sensor.foobot.markdown | 51 ++++++++++++++++++++++ source/images/supported_brands/foobot.png | Bin 0 -> 48418 bytes 2 files changed, 51 insertions(+) create mode 100644 source/_components/sensor.foobot.markdown create mode 100644 source/images/supported_brands/foobot.png diff --git a/source/_components/sensor.foobot.markdown b/source/_components/sensor.foobot.markdown new file mode 100644 index 0000000000..cf300fa7ac --- /dev/null +++ b/source/_components/sensor.foobot.markdown @@ -0,0 +1,51 @@ +--- +layout: page +title: "Foobot Air Quality Monitor" +description: "Instructions on how to setup Foobot Air Quality sensor in Home Assistant." +date: 2018-02-14 06:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: foobot.png +ha_category: Health +ha_release: 0.66 +ha_iot_class: "Cloud Polling" +--- + +The `foobot` sensor platform will fetch air quality data from your or yours [Foobot device(s)](https://foobot.io/features/). + +This sensor requires an API token. Please obtain one at [Foobot API site](https://api.foobot.io/apidoc/index.html). + +## {% linkable_title Configuring the Platform %} + +To enable this sensor, add the following lines to your `configuration.yaml` file: + +```yaml +sensor: + - platform: foobot + token: FOOBOT_SECRET_KEY + username: FOOBOT_USERNAME +``` + +{% configuration %} + token: + description: The token for the Foobot API. + required: true + type: string + username: + description: Your Foobot username, used to fetch devices associated with an account. + required: true + type: string +{% endconfiguration %} + +## {% linkable_title Available Metrics %} + +Every ten minutes, it'll fetch the last ten minutes average of the following measurements: + + * Temperature + * Humidity + * Co2 + * VOC + * PM2.5 + * [Index](https://help.foobot.io/hc/en-us/articles/204814371-What-does-central-number-mean-) diff --git a/source/images/supported_brands/foobot.png b/source/images/supported_brands/foobot.png new file mode 100644 index 0000000000000000000000000000000000000000..2d502c2cdac4a110bdbaa30a0a1b7f023c33a241 GIT binary patch literal 48418 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 nw*UL$|8d~|I}W^VBhlW|{PWR1Z|n Date: Fri, 16 Mar 2018 05:56:05 -0500 Subject: [PATCH 614/993] Added Stride notification component (#4921) * Added Stride notification component * :pencil2: Implement configuration tags --- source/_components/notify.stride.markdown | 63 ++++++++++++++++++++++ source/images/supported_brands/stride.png | Bin 0 -> 8776 bytes 2 files changed, 63 insertions(+) create mode 100644 source/_components/notify.stride.markdown create mode 100644 source/images/supported_brands/stride.png diff --git a/source/_components/notify.stride.markdown b/source/_components/notify.stride.markdown new file mode 100644 index 0000000000..0c79c44667 --- /dev/null +++ b/source/_components/notify.stride.markdown @@ -0,0 +1,63 @@ +--- +layout: page +title: "Stride" +description: "Instructions how to add Stride notifications to Home Assistant." +date: 2018-03-14 15:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: stride.png +ha_category: Notifications +ha_release: 0.66 +--- + +The `stride` platform allows you to send notifications from Home Assistant to [Stride](https://stride.com/). + +You need to obtain a [Stride API token](https://developer.atlassian.com/cloud/stride/security/authentication/#using-room-tokens) to be able to send notifications. When creating the token, you'll see a section labeled "Use this conversation URL to post messages" - it will look something like "https://api.atlassian.com/site/55872e9f-047e-a619-b32c-19d37fbc6038/conversation/26c98c26-0ffd-a11e-3a55-1b397cb71fe0/message". The first set of numbers and letters (`55872e9f-047e-a619-b32c-19d37fbc6038`) is the Cloud ID, and the second set (`26c98c26-0ffd-a11e-3a55-1b397cb71fe0`) is the Room ID. + +To enable the Stride notification in your installation, add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +notify: + - platform: stride + cloudid: CLOUD-ID + token: TOKEN + room: ROOM-ID +``` + +{% configuration %} +name: + description: Setting the optional parameter `name` allows multiple notifiers to be created. The notifier will bind to the service `notify.NOTIFIER_NAME`. + required: false + default: notify + type: string +cloudid: + description: The Stride Cloud ID to use for sending Stride notification. + required: true + type: string +token: + description: The Stride API token to use for sending Stride notifications. + required: true + type: string +room: + description: The default room to post to if no room is explicitly specified when sending the notification. + required: true + type: string +panel: + description: Setting panel will override the default panel type (`None`) for the notification. By default not setting this will post to Stride without using a panel type. Valid options are 'None', 'info', 'note', 'tip', 'warning'. + required: false + type: string +{% endconfiguration %} + +### {% linkable_title Stride service data %} + +The following attributes can be placed `data` for extended functionality. + +| Service data attribute | Optional | Description | +| ---------------------- | -------- | ----------- | +| `room` | yes | (int) Same usage as in configuration.yaml. Overrides any setting set in configuration.yaml. +| `panel` | yes | (str) Same usage as in configuration.yaml. Overrides any setting set in configuration.yaml. + +To use notifications, please see the [getting started with automation page](/getting-started/automation/). diff --git a/source/images/supported_brands/stride.png b/source/images/supported_brands/stride.png new file mode 100644 index 0000000000000000000000000000000000000000..ec9825c808c58e63a594a22cf6d03b21f0ea644c GIT binary patch literal 8776 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 literal 0 HcmV?d00001 From 9b8feb64b5d90b88436b15b8f666e26ec7cb9771 Mon Sep 17 00:00:00 2001 From: cdce8p <30130371+cdce8p@users.noreply.github.com> Date: Fri, 16 Mar 2018 12:09:12 +0100 Subject: [PATCH 615/993] Added additional supported devices (#4925) --- source/_components/homekit.markdown | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/source/_components/homekit.markdown b/source/_components/homekit.markdown index 4ed321f4bb..f9e8e84b9e 100644 --- a/source/_components/homekit.markdown +++ b/source/_components/homekit.markdown @@ -157,8 +157,10 @@ The following components are currently supported: | alarm_control_panel | SecuritySystem | All security systems. | | climate | Thermostat | All climate devices. | | cover | WindowCovering | All covers that support `set_cover_position`. | +| light | Light | Support for `on / off`, `brightness` and `rgb_color`. | | sensor | TemperatureSensor | All sensors that have `Celsius` and `Fahrenheit` as their `unit_of_measurement`. | -| switch / remote | Switch | All switches or remotes (represented as switches). | +| sensor | HumiditySensor | All sensors that have `%` as their `unit_of_measurement` | +| switch / remote / input_boolean / script | Switch | All represented as switches. | ## {% linkable_title Error reporting %} From 880c33198777e93e41d01c297aed890e0f1697ca Mon Sep 17 00:00:00 2001 From: Tom Date: Fri, 16 Mar 2018 11:55:53 +0000 Subject: [PATCH 616/993] Update configuration.markdown's addon store image (#4929) main_panel_store_icon.png appears to be removed or doesn't exist and maybe been replaced with main_panel_addon_store.png. https://home-assistant.io/images/hassio/screenshots/main_panel_store_icon.png returns 404 and isn't displaying any image on https://home-assistant.io/getting-started/configuration/ --- source/getting-started/configuration.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/getting-started/configuration.markdown b/source/getting-started/configuration.markdown index d9a23fcbcf..cbe0953026 100644 --- a/source/getting-started/configuration.markdown +++ b/source/getting-started/configuration.markdown @@ -30,7 +30,7 @@ Hass.io add-ons are installed from the add-on store embedded in the Hass.io pane [local]: http://hassio.local:8123

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

    From 3b5e4795c31ae0be9a2b9b4a342ecd8c4b3c774c Mon Sep 17 00:00:00 2001 From: mcfrojd Date: Fri, 16 Mar 2018 14:45:27 +0100 Subject: [PATCH 617/993] Changed link for Raspberry Pi 3 image --- source/getting-started/index.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/getting-started/index.markdown b/source/getting-started/index.markdown index 429c6b4cb8..c4e7b6995b 100644 --- a/source/getting-started/index.markdown +++ b/source/getting-started/index.markdown @@ -29,7 +29,7 @@ We will need a few things to get started with installing Home Assistant. Links b - Text Editor like [Visual Studio Code](https://code.visualstudio.com/) [Etcher]: https://etcher.io/ -[pi3]: https://github.com/home-assistant/hassio-build/releases/download/1.1/resinos-hassio-1.1-raspberrypi3.img.bz2 +[pi3]: https://github.com/home-assistant/hassio-build/releases/download/1.3/resinos-hassio-1.3-raspberrypi3.img.bz2 ### {% linkable_title Installing Hass.io %} From 44250c39014df23420814f5496db34b96ec45a58 Mon Sep 17 00:00:00 2001 From: Tom Date: Fri, 16 Mar 2018 14:50:32 +0000 Subject: [PATCH 618/993] Update addon_tutorial.markdown's addon store image (#4930) Same as #4929 main_panel_store_icon.png appears to be removed or doesn't exist and maybe been replaced with main_panel_addon_store.png. https://home-assistant.io/images/hassio/screenshots/main_panel_store_icon.png returns 404 and isn't displaying any image on https://home-assistant.io/developers/hassio/addon_tutorial/ --- source/developers/hassio/addon_tutorial.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/developers/hassio/addon_tutorial.markdown b/source/developers/hassio/addon_tutorial.markdown index ebd8dd646b..0a30b2a60d 100644 --- a/source/developers/hassio/addon_tutorial.markdown +++ b/source/developers/hassio/addon_tutorial.markdown @@ -81,7 +81,7 @@ Now comes the fun part, time to open the Hass.io UI and install and run your add - On the top right click the shopping basket to go to the add-on store.

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

    From 434f6f25107e0b0de041f304283fba254b87b3e7 Mon Sep 17 00:00:00 2001 From: Sebastian Muszynski Date: Fri, 16 Mar 2018 15:50:56 +0100 Subject: [PATCH 619/993] Xiaomi Miio Fan: Undocumented service (fan.set_speed) added (#4928) * Undocumented service (fan.set_speed) added. * :pencil2: Micro change --- source/_components/fan.xiaomi_miio.markdown | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/source/_components/fan.xiaomi_miio.markdown b/source/_components/fan.xiaomi_miio.markdown index 99adf8ff4e..20cc457350 100644 --- a/source/_components/fan.xiaomi_miio.markdown +++ b/source/_components/fan.xiaomi_miio.markdown @@ -71,6 +71,15 @@ name: ## {% linkable_title Platform Services %} +### {% linkable_title Service `fan.set_speed` %} + +Set the fan speed/operation mode. + +| Service data attribute | Optional | Description | +|---------------------------|----------|---------------------------------------------------------------------| +| `entity_id` | yes | Only act on a specific air purifier. Else targets all. | +| `speed` | no | Fan speed. Valid values are 'Auto', 'Silent', 'Favorite' and 'Idle' | + ### {% linkable_title Service `fan.xiaomi_miio_set_buzzer_on` %} Turn the buzzer on. From f73acb0ea2a0489d37586e88b33795b045a462ff Mon Sep 17 00:00:00 2001 From: mcfrojd Date: Fri, 16 Mar 2018 16:02:05 +0100 Subject: [PATCH 620/993] Raspberry Pi 3 B+ note (#4935) * Raspberry Pi 3 B+ note Added note that pi 3 image does not work with pi 3 b+ yet * :pencil2: Improves the warning message * :ambulance: Removes old warning message --- source/hassio/installation.markdown | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/source/hassio/installation.markdown b/source/hassio/installation.markdown index 2a26994493..b29e39251d 100644 --- a/source/hassio/installation.markdown +++ b/source/hassio/installation.markdown @@ -11,6 +11,10 @@ footer: true Hass.io images are available for all available Raspberry Pi and Intel NUC platforms. +

    + The recently released Raspberry Pi 3 model B+ is not yet supported. +

    + - Download the appropriate image for your Raspberry Pi / Intel NUC: - [Raspberry Pi / Zero][pi1] - [Raspberry Pi 2][pi2] From 698b8e2aa02a1688e1d4d7c7f23eedc6a14cccaa Mon Sep 17 00:00:00 2001 From: mcfrojd Date: Fri, 16 Mar 2018 16:02:42 +0100 Subject: [PATCH 621/993] Raspberry Pi 3 B+ note (#4934) * Raspberry Pi 3 B+ note Added note that Raspberry Pi 3 B+ is not yet supported * :pencil2: Improves the warning message --- source/getting-started/index.markdown | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/source/getting-started/index.markdown b/source/getting-started/index.markdown index c4e7b6995b..36cc853d35 100644 --- a/source/getting-started/index.markdown +++ b/source/getting-started/index.markdown @@ -22,6 +22,10 @@ We will need a few things to get started with installing Home Assistant. Links b - SD Card reader. Part of most laptops, and also available as [standalone USB sticks](http://a.co/5FCyb0N) (the brand doesn't matter, just pick the cheapest) - Ethernet cable (optional, Hass.io can work with WiFi too) +

    + The recently released Raspberry Pi 3 model B+ is not yet supported. +

    + ### {% linkable_title Software requirements %} - Download [Hass.io image for Raspberry Pi 3][pi3] From d1510bdfb8d0c348db4467c73db6894687bcb615 Mon Sep 17 00:00:00 2001 From: DubhAd Date: Fri, 16 Mar 2018 18:05:04 +0000 Subject: [PATCH 622/993] sun trigger - Link fix, wording tweak (#4937) Fixed the link to the actual sun trigger. Tried to add some clarity to the wording over offsets, but I think that needs expansion. --- source/_docs/scripts/conditions.markdown | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/_docs/scripts/conditions.markdown b/source/_docs/scripts/conditions.markdown index a9e0b8c564..5ca5b9c756 100644 --- a/source/_docs/scripts/conditions.markdown +++ b/source/_docs/scripts/conditions.markdown @@ -119,13 +119,13 @@ condition: The sun condition can test if the sun has already set or risen when a trigger occurs. The `before` and `after` keys can only be set to `sunset` or `sunrise`. They have a corresponding optional offset value (`before_offset`, `after_offset`) that can be added, similar to the [sun trigger][sun_trigger]. -[sun_trigger]: /getting-started/automation-trigger/#sun-trigger +[sun_trigger]: /docs/automation/trigger/#sun-trigger ```yaml condition: condition: sun after: sunset - # Optional offset value + # Optional offset value - in this case it must from -1 hours relative to sunset, or after after_offset: "-1:00:00" ``` From 40ebccaf230aae8b52ee3a67925fcfa61747cfc1 Mon Sep 17 00:00:00 2001 From: Fredrik Lindqvist Date: Fri, 16 Mar 2018 19:58:02 +0100 Subject: [PATCH 623/993] Update about 3b+ hassbian --- source/getting-started/index.markdown | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/source/getting-started/index.markdown b/source/getting-started/index.markdown index 36cc853d35..6781f28ab5 100644 --- a/source/getting-started/index.markdown +++ b/source/getting-started/index.markdown @@ -23,7 +23,9 @@ We will need a few things to get started with installing Home Assistant. Links b - Ethernet cable (optional, Hass.io can work with WiFi too)

    - The recently released Raspberry Pi 3 model B+ is not yet supported. + Support for the Raspberry Pi 3 model B+ is available in the alternative installation method [Hassbian](/docs/hassbian/installation/). + + The recently released Raspberry Pi 3 model B+ is not yet supported by Hass.io

    ### {% linkable_title Software requirements %} From 164bc60992b5041bfdc3d8210d122a9426702bf2 Mon Sep 17 00:00:00 2001 From: Fredrik Lindqvist Date: Fri, 16 Mar 2018 20:00:42 +0100 Subject: [PATCH 624/993] Update hassbian.markdown --- source/_docs/installation/hassbian.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_docs/installation/hassbian.markdown b/source/_docs/installation/hassbian.markdown index a9177f3ab1..9559359870 100644 --- a/source/_docs/installation/hassbian.markdown +++ b/source/_docs/installation/hassbian.markdown @@ -10,7 +10,7 @@ footer: true redirect_from: /getting-started/hassbian/ --- -Hassbian is our customized operating system for the Raspberry Pi 3. It is the easiest way of installing Home Assistant. +Hassbian is our customized operating system for the Raspberry Pi Zero, 2,3 and 3B+. It is one of the easiest ways of installing Home Assistant. - [Install Hassbian][install] - [Customize your installation][customize] From 09388761917f23f84a179f921004114c1d15cbd0 Mon Sep 17 00:00:00 2001 From: Dale Higgs Date: Fri, 16 Mar 2018 14:00:59 -0500 Subject: [PATCH 625/993] Update Hass.io command cheatsheet --- source/hassio/index.markdown | 34 ++++++++++++++++++++-------------- 1 file changed, 20 insertions(+), 14 deletions(-) diff --git a/source/hassio/index.markdown b/source/hassio/index.markdown index d53336e89c..16dca59792 100644 --- a/source/hassio/index.markdown +++ b/source/hassio/index.markdown @@ -60,21 +60,27 @@ Hass.io upgrade process from the SSH command line On the SSH command line you can use the `hassio` command to retrieve logs, check the details of connected hardware, and more. HomeAssistant: -``` $ hassio homeassistant logs - $ hassio homeassistant restart - $ hassio homeassistant stop - $ hassio homeassistant start - $ hassio homeassistant update - $ hassio homeassistant check``` +```shell +$ hassio homeassistant logs +$ hassio homeassistant restart +$ hassio homeassistant stop +$ hassio homeassistant start +$ hassio homeassistant update +$ hassio homeassistant check +``` Host: -``` $ hassio host hardware - $ hassio host reboot - $ hassio host shutdown - $ hassio host update``` +```shell +$ hassio host hardware +$ hassio host reboot +$ hassio host shutdown +$ hassio host update +``` Supervisor -``` $ hassio supervisor logs - $ hassio supervisor info - $ hassio supervisor reload - $ hassio supervisor update``` +```shell +$ hassio supervisor logs +$ hassio supervisor info +$ hassio supervisor reload +$ hassio supervisor update +``` From 4a3d71bd401e0cc18f93e72cf06c5630a23a76de Mon Sep 17 00:00:00 2001 From: Fredrik Lindqvist Date: Fri, 16 Mar 2018 20:02:10 +0100 Subject: [PATCH 626/993] Update installation.markdown --- source/_docs/installation/hassbian/installation.markdown | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/_docs/installation/hassbian/installation.markdown b/source/_docs/installation/hassbian/installation.markdown index 8ed803699e..96af9485be 100644 --- a/source/_docs/installation/hassbian/installation.markdown +++ b/source/_docs/installation/hassbian/installation.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Installing Hassbian" -description: "Instructions to flash the Home Assistant HASSbian image on a Raspberry Pi." +description: "Instructions to flash the Home Assistant Hassbian image on a Raspberry Pi." date: 2016-09-26 21:00 sidebar: true comments: false @@ -10,7 +10,7 @@ footer: true redirect_from: /docs/hassbian/installation/ --- -The easiest way to install Home Assistant on your Raspberry Pi is by using HASSbian: a Raspberry Pi image with Home Assistant built-in. The image will install the latest version of Home Assistant on initial boot (~10 minutes). +One of the easiest ways to install Home Assistant on your Raspberry Pi Zero, 2 ,3 and 3B+ is by using Hassbian: a Raspberry Pi image with Home Assistant built-in. The image will install the latest version of Home Assistant on initial boot (~10 minutes). 1. [Download the Hassbian image][image-download] 2. Use [Etcher][etcher] to flash the image to your SD card From 3fd5cd5f94766784db93db630e21ac65c024bc8b Mon Sep 17 00:00:00 2001 From: Flavio Barisi Date: Fri, 16 Mar 2018 21:28:18 +0100 Subject: [PATCH 627/993] Update sensor.miflora.markdown (#4941) Corrected default polling time --- source/_components/sensor.miflora.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/sensor.miflora.markdown b/source/_components/sensor.miflora.markdown index 8fcfca3d09..b837c27ff4 100644 --- a/source/_components/sensor.miflora.markdown +++ b/source/_components/sensor.miflora.markdown @@ -74,7 +74,7 @@ sensor: - **cache_value** (*Optional*): Define cache expiration value in seconds (defaults to 1200 if not defined) - **adapter** (*Optional*): Define the Bluetooth adapter to use (defaults to hci0). Run `hciconfig` to get a list of available adapters. -Note that by default the sensor is only polled once every 15 minutes. This means with the `median: 3` setting will take as least 30 minutes before the sensor will report a value after a Home Assistant restart. As the values usually change very slowly, this isn't a big problem. +Note that by default the sensor is only polled once every 20 minutes. This means with the `median: 3` setting will take as least 40 minutes before the sensor will report a value after a Home Assistant restart. As the values usually change very slowly, this isn't a big problem. Reducing polling intervals will have a negative effect on the battery life. A full configuration example could look like the one below: From 041553ed86bd74a9628db71fa77ec2f099064381 Mon Sep 17 00:00:00 2001 From: Sebastian Muszynski Date: Fri, 16 Mar 2018 21:47:45 +0100 Subject: [PATCH 628/993] Xiaomi Power Strip services added. (#4931) --- .../_components/switch.xiaomi_miio.markdown | 70 +++++++++++++++++-- 1 file changed, 66 insertions(+), 4 deletions(-) diff --git a/source/_components/switch.xiaomi_miio.markdown b/source/_components/switch.xiaomi_miio.markdown index 7212a74287..21cd7d4eba 100644 --- a/source/_components/switch.xiaomi_miio.markdown +++ b/source/_components/switch.xiaomi_miio.markdown @@ -13,12 +13,38 @@ ha_version: 0.56 ha_iot_class: "Local Polling" --- -The `xiaomi_miio` switch platform allows you to control the state of your Xiaomi Smart WiFi Socket aka Plug or Xiaomi Smart Power Strip. - -Currently, the supported features are `on`, `off`. If the device provides the current load, it will be reported. +The `xiaomi_miio` switch platform allows you to control the state of your Xiaomi Smart WiFi Socket aka Plug, Xiaomi Smart Power Strip and Xiaomi Chuangmi Plug V1. Please follow the instructions on [Retrieving the Access Token](/components/vacuum.xiaomi_miio/#retrieving-the-access-token) to get the API token to use in the `configuration.yaml` file. +## Features + +### Xiaomi Smart WiFi Socket + +* Power (on, off) +* Attributes + - Temperature + +### Xiaomi Chuangmi Plug V1 + +* Power (on, off) +* USB (on, off) +* Attributes + - Temperature + +### Xiaomi Smart Power Strip + +* Power (on, off) +* Wifi LED (on, off) +* Power Price (0...999) +* Power Mode (green, normal) (Power Strip V1 only) +* Attributes + - Temperature + - Current + - Load power + - Wifi LED + - Mode (Power Strip V1 only) + To add a plug to your installation, add the following to your `configuration.yaml` file: ```yaml @@ -35,7 +61,7 @@ Configuration variables: - **host** (*Required*): The IP of your miio device. - **token** (*Required*): The API token of your miio device. - **name** (*Optional*): The name of your miio device. -- **model** (*Optional*): The model of your miio device. Valid values are chuangmi.plug.v1`, `qmi.powerstrip.v1`, `zimi.powerstrip.v2`, `chuangmi.plug.m1` and `chuangmi.plug.v2`. This setting can be used to bypass the device model detection and is recommended if your device isn't always available. +- **model** (*Optional*): The model of your miio device. Valid values are `chuangmi.plug.v1`, `qmi.powerstrip.v1`, `zimi.powerstrip.v2`, `chuangmi.plug.m1` and `chuangmi.plug.v2`. This setting can be used to bypass the device model detection and is recommended if your device isn't always available. {% configuration %} host: @@ -56,3 +82,39 @@ model: required: false type: string {% endconfiguration %} + +## {% linkable_title Platform Services %} + +### {% linkable_title Service `switch.xiaomi_miio_set_wifi_led_on` %} (Power Strip only) + +Turn the wifi led on. + +| Service data attribute | Optional | Description | +|---------------------------|----------|---------------------------------------------------------| +| `entity_id` | yes | Only act on a specific air purifier. Else targets all. | + +### {% linkable_title Service `switch.xiaomi_miio_set_wifi_led_off` %} (Power Strip only) + +Turn the wifi led off. + +| Service data attribute | Optional | Description | +|---------------------------|----------|---------------------------------------------------------| +| `entity_id` | yes | Only act on a specific air purifier. Else targets all. | + +### {% linkable_title Service `switch.xiaomi_miio_set_power_price` %} (Power Strip) + +Set the power price. + +| Service data attribute | Optional | Description | +|---------------------------|----------|---------------------------------------------------------| +| `entity_id` | yes | Only act on a specific air purifier. Else targets all. | +| `price` | no | Power price, between 0 and 999. | + +### {% linkable_title Service `switch.xiaomi_miio_set_power_mode` %} (Power Strip V1 only) + +Set the power mode. + +| Service data attribute | Optional | Description | +|---------------------------|----------|---------------------------------------------------------------| +| `entity_id` | yes | Only act on a specific xiaomi miio entity. Else targets all. | +| `mode` | no | Power mode, valid values are 'normal' and 'green' | From bc95183753df95030496c9129c3029601bc11eca Mon Sep 17 00:00:00 2001 From: Sebastian Muszynski Date: Fri, 16 Mar 2018 22:14:40 +0100 Subject: [PATCH 629/993] Xiaomi MiIO Sensor: Xiaomi Air Quality Monitor (PM2.5) integration (#4780) * Xiaomi MiIO Sensor: Xiaomi Air Quality Monitor (PM2.5) integration. * Turn on/off service removed. * :arrow_up: Updates ha_release --- .../_components/sensor.xiaomi_miio.markdown | 55 +++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 source/_components/sensor.xiaomi_miio.markdown diff --git a/source/_components/sensor.xiaomi_miio.markdown b/source/_components/sensor.xiaomi_miio.markdown new file mode 100644 index 0000000000..3e30131fff --- /dev/null +++ b/source/_components/sensor.xiaomi_miio.markdown @@ -0,0 +1,55 @@ +--- +layout: page +title: "Xiaomi Air Quality Monitor" +description: "Instructions how to integrate your Xiaomi Mi Air Quality Monitor within Home Assistant." +date: 2018-02-28 08:35 +sidebar: true +comments: false +sharing: true +footer: true +logo: xiaomi.png +ha_category: Sensor +ha_version: 0.66 +ha_iot_class: "Local Polling" +--- + +The `xiaomi_miio` sensor platform is observing your Xiaomi Mi Air Quality Monitor (PM2.5) and reporting the air quality index. + +Currently, the supported features are: + +* Air Quality Index (AQI) +* Attributes + - power + - charging + - battery + - time_stat + +Please follow the instructions on [Retrieving the Access Token](/components/vacuum.xiaomi_miio/#retrieving-the-access-token) to get the API token. + +To add a Xiaomi Mi Air Quality Monitor to your installation, add the following to your `configuration.yaml` file: + +```yaml +sensor: +# Example configuration.yaml entry +sensor: + - platform: xiaomi_miio + name: Xiaomi Air Quality Monitor + host: 192.168.130.73 + token: YOUR_TOKEN +``` + +{% configuration %} +host: + description: The IP address of your miio device. + required: true + type: string +token: + description: The API token of your miio device. + required: true + type: string +name: + description: The name of your miio device. + required: false + type: string + default: Xiaomi Miio Sensor +{% endconfiguration %} From 1aca7b08cfccf1da5b200f0163a31ce8b89fa898 Mon Sep 17 00:00:00 2001 From: Alok Saboo Date: Sat, 17 Mar 2018 15:20:37 -0400 Subject: [PATCH 630/993] Misc fixes: e.g. -> e.g., and proper case for Home Assistant (#4942) * e.g. to e.g., and proper case for Home Assistant * Instructions how to -> Instructions on how to --- source/_addons/mariadb.markdown | 2 +- .../alarm_control_panel.abode.markdown | 2 +- .../alarm_control_panel.alarmdecoder.markdown | 2 +- .../alarm_control_panel.alarmdotcom.markdown | 2 +- .../alarm_control_panel.arlo.markdown | 7 ++- .../alarm_control_panel.concord232.markdown | 4 +- .../alarm_control_panel.egardia.markdown | 2 +- .../alarm_control_panel.envisalink.markdown | 2 +- .../alarm_control_panel.ialarm.markdown | 2 +- .../alarm_control_panel.manual.markdown | 2 +- .../alarm_control_panel.manual_mqtt.markdown | 2 +- .../_components/alarm_control_panel.markdown | 2 +- .../alarm_control_panel.mqtt.markdown | 2 +- .../alarm_control_panel.nx584.markdown | 2 +- ...alarm_control_panel.satel_integra.markdown | 2 +- .../alarm_control_panel.simplisafe.markdown | 2 +- .../alarm_control_panel.spc.markdown | 2 +- .../alarm_control_panel.totalconnect.markdown | 2 +- .../alarm_control_panel.verisure.markdown | 2 +- .../alarm_control_panel.wink.markdown | 2 +- source/_components/alert.markdown | 2 +- source/_components/alexa.markdown | 4 +- source/_components/amcrest.markdown | 4 +- source/_components/api.markdown | 2 +- source/_components/apple_tv.markdown | 7 ++- source/_components/arduino.markdown | 4 +- source/_components/asterisk_mbox.markdown | 2 +- source/_components/automation.markdown | 4 +- source/_components/bbb_gpio.markdown | 2 +- .../_components/binary_sensor.abode.markdown | 2 +- .../binary_sensor.alarmdecoder.markdown | 2 +- .../binary_sensor.android_ip_webcam.markdown | 2 +- .../_components/binary_sensor.arest.markdown | 4 +- .../_components/binary_sensor.axis.markdown | 2 +- .../binary_sensor.bayesian.markdown | 2 +- .../binary_sensor.bbb_gpio.markdown | 2 +- .../binary_sensor.command_line.markdown | 2 +- .../binary_sensor.concord232.markdown | 2 +- .../_components/binary_sensor.ecobee.markdown | 2 +- .../binary_sensor.egardia.markdown | 2 +- .../binary_sensor.eight_sleep.markdown | 2 +- .../binary_sensor.envisalink.markdown | 2 +- .../binary_sensor.ffmpeg_motion.markdown | 2 +- .../binary_sensor.ffmpeg_noise.markdown | 2 +- .../_components/binary_sensor.flic.markdown | 2 +- .../binary_sensor.homematic.markdown | 2 +- .../_components/binary_sensor.http.markdown | 2 +- source/_components/binary_sensor.ihc.markdown | 2 +- .../binary_sensor.insteon_plm.markdown | 2 +- .../_components/binary_sensor.isy994.markdown | 2 +- source/_components/binary_sensor.knx.markdown | 4 +- .../_components/binary_sensor.mqtt.markdown | 2 +- .../binary_sensor.mysensors.markdown | 2 +- .../binary_sensor.mystrom.markdown | 2 +- .../_components/binary_sensor.nest.markdown | 2 +- .../binary_sensor.netatmo.markdown | 2 +- .../binary_sensor.octoprint.markdown | 2 +- .../binary_sensor.pilight.markdown | 2 +- .../_components/binary_sensor.ping.markdown | 2 +- .../_components/binary_sensor.random.markdown | 2 +- .../binary_sensor.raspihats.markdown | 2 +- .../_components/binary_sensor.rest.markdown | 2 +- .../_components/binary_sensor.rfxtrx.markdown | 2 +- .../binary_sensor.rpi_gpio.markdown | 2 +- .../binary_sensor.rpi_pfio.markdown | 2 +- .../binary_sensor.satel_integra.markdown | 2 +- source/_components/binary_sensor.spc.markdown | 2 +- .../binary_sensor.tapsaff.markdown | 2 +- .../binary_sensor.tellduslive.markdown | 2 +- .../binary_sensor.template.markdown | 2 +- .../binary_sensor.threshold.markdown | 2 +- .../_components/binary_sensor.trend.markdown | 2 +- .../_components/binary_sensor.vera.markdown | 2 +- .../binary_sensor.verisure.markdown | 2 +- .../_components/binary_sensor.wink.markdown | 2 +- .../binary_sensor.xiaomi_aqara.markdown | 2 +- source/_components/binary_sensor.zha.markdown | 2 +- .../_components/binary_sensor.zwave.markdown | 2 +- source/_components/bloomsky.markdown | 2 +- source/_components/browser.markdown | 2 +- source/_components/calendar.google.markdown | 2 +- source/_components/calendar.markdown | 2 +- source/_components/camera.abode.markdown | 2 +- source/_components/camera.amcrest.markdown | 2 +- .../camera.android_ip_webcam.markdown | 2 +- source/_components/camera.arlo.markdown | 2 +- source/_components/camera.axis.markdown | 2 +- source/_components/camera.bloomsky.markdown | 2 +- source/_components/camera.canary.markdown | 2 +- source/_components/camera.dispatcher.markdown | 2 +- source/_components/camera.doorbird.markdown | 2 +- source/_components/camera.ffmpeg.markdown | 2 +- source/_components/camera.foscam.markdown | 2 +- source/_components/camera.generic.markdown | 2 +- source/_components/camera.local_file.markdown | 2 +- source/_components/camera.markdown | 2 +- source/_components/camera.mjpeg.markdown | 2 +- source/_components/camera.mqtt.markdown | 2 +- source/_components/camera.neato.markdown | 2 +- source/_components/camera.nest.markdown | 2 +- source/_components/camera.netatmo.markdown | 2 +- source/_components/camera.onvif.markdown | 2 +- source/_components/camera.proxy.markdown | 2 +- source/_components/camera.rpi_camera.markdown | 2 +- source/_components/camera.synology.markdown | 2 +- source/_components/camera.uvc.markdown | 2 +- source/_components/camera.verisure.markdown | 2 +- source/_components/camera.yi.markdown | 2 +- source/_components/climate.ecobee.markdown | 2 +- source/_components/climate.econet.markdown | 2 +- .../_components/climate.eq3btsmart.markdown | 2 +- source/_components/climate.flexit.markdown | 2 +- source/_components/climate.heatmiser.markdown | 2 +- source/_components/climate.homematic.markdown | 2 +- source/_components/climate.honeywell.markdown | 2 +- source/_components/climate.markdown | 2 +- source/_components/climate.mqtt.markdown | 6 +-- source/_components/climate.mysensors.markdown | 2 +- source/_components/climate.nest.markdown | 2 +- source/_components/climate.netatmo.markdown | 2 +- source/_components/climate.nuheat.markdown | 2 +- source/_components/climate.oem.markdown | 2 +- source/_components/climate.proliphix.markdown | 2 +- .../_components/climate.radiotherm.markdown | 2 +- source/_components/climate.sensibo.markdown | 2 +- source/_components/climate.toon.markdown | 2 +- source/_components/climate.touchline.markdown | 2 +- source/_components/climate.vera.markdown | 2 +- source/_components/climate.wink.markdown | 2 +- source/_components/climate.zwave.markdown | 2 +- source/_components/comfoconnect.markdown | 2 +- source/_components/config.markdown | 2 +- source/_components/configurator.markdown | 2 +- source/_components/conversation.markdown | 2 +- source/_components/counter.markdown | 2 +- source/_components/cover.abode.markdown | 2 +- source/_components/cover.garadget.markdown | 2 +- source/_components/cover.homematic.markdown | 2 +- source/_components/cover.isy994.markdown | 2 +- source/_components/cover.lutron.markdown | 2 +- .../_components/cover.lutron_caseta.markdown | 2 +- source/_components/cover.markdown | 2 +- source/_components/cover.mqtt.markdown | 2 +- source/_components/cover.myq.markdown | 2 +- source/_components/cover.mysensors.markdown | 2 +- source/_components/cover.opengarage.markdown | 2 +- source/_components/cover.rflink.markdown | 2 +- source/_components/cover.rfxtrx.markdown | 2 +- source/_components/cover.rpi_gpio.markdown | 2 +- source/_components/cover.scsgate.markdown | 2 +- source/_components/cover.tahoma.markdown | 2 +- source/_components/cover.tellstick.markdown | 2 +- source/_components/cover.template.markdown | 2 +- source/_components/cover.vera.markdown | 2 +- source/_components/cover.wink.markdown | 2 +- .../_components/cover.xiaomi_aqara.markdown | 2 +- source/_components/cover.zwave.markdown | 2 +- source/_components/datadog.markdown | 2 +- source/_components/demo.markdown | 2 +- .../device_sun_light_trigger.markdown | 2 +- .../device_tracker.actiontec.markdown | 2 +- .../_components/device_tracker.aruba.markdown | 4 +- .../device_tracker.asuswrt.markdown | 2 +- .../_components/device_tracker.bbox.markdown | 2 +- ...vice_tracker.bluetooth_le_tracker.markdown | 2 +- .../device_tracker.bt_home_hub_5.markdown | 4 +- .../device_tracker.cisco_ios.markdown | 4 +- .../_components/device_tracker.ddwrt.markdown | 4 +- .../_components/device_tracker.fritz.markdown | 2 +- .../device_tracker.gpslogger.markdown | 2 +- .../device_tracker.huawei_router.markdown | 4 +- .../device_tracker.icloud.markdown | 2 +- .../device_tracker.keenetic_ndms2.markdown | 4 +- .../device_tracker.linksys_ap.markdown | 2 +- .../device_tracker.linksys_smart.markdown | 2 +- .../device_tracker.locative.markdown | 2 +- .../_components/device_tracker.luci.markdown | 4 +- source/_components/device_tracker.markdown | 4 +- .../device_tracker.mikrotik.markdown | 2 +- .../_components/device_tracker.mqtt.markdown | 4 +- .../device_tracker.mqtt_json.markdown | 2 +- .../device_tracker.mysensors.markdown | 2 +- .../device_tracker.netgear.markdown | 4 +- .../device_tracker.nmap_tracker.markdown | 2 +- .../device_tracker.owntracks.markdown | 4 +- .../device_tracker.owntracks_http.markdown | 2 +- .../_components/device_tracker.ping.markdown | 2 +- .../device_tracker.sky_hub.markdown | 2 +- .../_components/device_tracker.snmp.markdown | 2 +- .../device_tracker.swisscom.markdown | 2 +- .../_components/device_tracker.tado.markdown | 2 +- .../device_tracker.thomson.markdown | 2 +- .../_components/device_tracker.tile.markdown | 2 +- .../device_tracker.tomato.markdown | 8 +-- .../device_tracker.tplink.markdown | 4 +- .../device_tracker.trackr.markdown | 2 +- .../_components/device_tracker.ubus.markdown | 2 +- .../_components/device_tracker.unifi.markdown | 2 +- .../device_tracker.unifi_direct.markdown | 2 +- .../device_tracker.upc_connect.markdown | 2 +- .../device_tracker.xiaomi.markdown | 2 +- source/_components/dialogflow.markdown | 6 +-- source/_components/digital_ocean.markdown | 2 +- source/_components/discoverable.markdown | 2 +- source/_components/discovery.markdown | 2 +- source/_components/downloader.markdown | 2 +- source/_components/dyson.markdown | 2 +- source/_components/egardia.markdown | 2 +- source/_components/emulated_hue.markdown | 2 +- source/_components/fan.comfoconnect.markdown | 2 +- source/_components/fan.dyson.markdown | 2 +- source/_components/fan.insteon_hub.markdown | 2 +- source/_components/fan.insteon_local.markdown | 2 +- source/_components/fan.insteon_plm.markdown | 2 +- source/_components/fan.isy994.markdown | 2 +- source/_components/fan.markdown | 2 +- source/_components/fan.mqtt.markdown | 2 +- source/_components/fan.wink.markdown | 2 +- source/_components/fan.xiaomi_miio.markdown | 2 +- source/_components/fan.zwave.markdown | 2 +- source/_components/feedreader.markdown | 2 +- source/_components/foursquare.markdown | 2 +- source/_components/google_assistant.markdown | 2 +- source/_components/group.markdown | 2 +- source/_components/hdmi_cec.markdown | 2 +- source/_components/history.markdown | 2 +- source/_components/homekit.markdown | 2 +- source/_components/homematic.markdown | 8 +-- source/_components/ifttt.manything.markdown | 2 +- source/_components/ifttt.markdown | 4 +- ...image_processing.dlib_face_detect.markdown | 2 +- ...age_processing.dlib_face_identify.markdown | 2 +- source/_components/image_processing.markdown | 2 +- ..._processing.microsoft_face_detect.markdown | 2 +- ...rocessing.microsoft_face_identify.markdown | 2 +- .../image_processing.openalpr_cloud.markdown | 2 +- .../image_processing.openalpr_local.markdown | 2 +- .../image_processing.opencv.markdown | 2 +- .../image_processing.seven_segments.markdown | 2 +- source/_components/influxdb.markdown | 2 +- source/_components/input_boolean.markdown | 2 +- source/_components/input_datetime.markdown | 2 +- source/_components/input_number.markdown | 2 +- source/_components/input_select.markdown | 2 +- source/_components/input_text.markdown | 2 +- source/_components/insteon_hub.markdown | 4 +- source/_components/insteon_local.markdown | 2 +- source/_components/insteon_plm.markdown | 6 +-- source/_components/isy994.markdown | 2 +- source/_components/juicenet.markdown | 2 +- source/_components/keyboard.markdown | 2 +- source/_components/keyboard_remote.markdown | 2 +- source/_components/kira.markdown | 4 +- source/_components/knx.markdown | 2 +- source/_components/light.abode.markdown | 2 +- source/_components/light.ads.markdown | 2 +- .../light.blinksticklight.markdown | 2 +- source/_components/light.blinkt.markdown | 2 +- source/_components/light.flux_led.markdown | 2 +- source/_components/light.greenwave.markdown | 2 +- source/_components/light.homematic.markdown | 2 +- source/_components/light.hue.markdown | 2 +- source/_components/light.hyperion.markdown | 2 +- source/_components/light.ihc.markdown | 2 +- source/_components/light.insteon_hub.markdown | 2 +- .../_components/light.insteon_local.markdown | 2 +- source/_components/light.insteon_plm.markdown | 2 +- source/_components/light.isy994.markdown | 2 +- source/_components/light.lifx.markdown | 2 +- source/_components/light.litejet.markdown | 2 +- source/_components/light.lutron.markdown | 2 +- .../_components/light.lutron_caseta.markdown | 2 +- source/_components/light.markdown | 2 +- source/_components/light.mochad.markdown | 2 +- source/_components/light.mqtt.markdown | 2 +- .../_components/light.mqtt_template.markdown | 2 +- source/_components/light.mysensors.markdown | 2 +- source/_components/light.mystrom.markdown | 2 +- .../_components/light.osramlightify.markdown | 2 +- source/_components/light.piglow.markdown | 2 +- source/_components/light.qwikswitch.markdown | 2 +- source/_components/light.rflink.markdown | 2 +- source/_components/light.rfxtrx.markdown | 2 +- source/_components/light.scsgate.markdown | 2 +- source/_components/light.sensehat.markdown | 2 +- source/_components/light.tellstick.markdown | 2 +- source/_components/light.template.markdown | 2 +- source/_components/light.tplink.markdown | 2 +- source/_components/light.vera.markdown | 2 +- source/_components/light.wemo.markdown | 2 +- source/_components/light.wink.markdown | 2 +- source/_components/light.x10.markdown | 2 +- .../_components/light.xiaomi_aqara.markdown | 2 +- source/_components/light.xiaomi_miio.markdown | 2 +- source/_components/light.yeelight.markdown | 2 +- .../light.yeelightsunflower.markdown | 2 +- source/_components/light.zengge.markdown | 2 +- source/_components/light.zha.markdown | 2 +- source/_components/light.zwave.markdown | 2 +- source/_components/lirc.markdown | 6 +-- source/_components/litejet.markdown | 2 +- source/_components/lock.abode.markdown | 2 +- source/_components/lock.isy994.markdown | 2 +- source/_components/lock.lockitron.markdown | 2 +- source/_components/lock.markdown | 2 +- source/_components/lock.mqtt.markdown | 2 +- source/_components/lock.vera.markdown | 2 +- source/_components/lock.verisure.markdown | 2 +- source/_components/lock.wink.markdown | 2 +- source/_components/lock.zwave.markdown | 2 +- source/_components/logbook.markdown | 4 +- source/_components/logger.markdown | 2 +- source/_components/lutron.markdown | 2 +- source/_components/lutron_caseta.markdown | 4 +- .../mailbox.asterisk_mbox.markdown | 2 +- source/_components/mailbox.markdown | 2 +- source/_components/mailgun.markdown | 2 +- source/_components/media_extractor.markdown | 2 +- .../media_player.anthemav.markdown | 2 +- .../media_player.apple_tv.markdown | 2 +- .../media_player.bluesound.markdown | 2 +- source/_components/media_player.cast.markdown | 2 +- .../media_player.clementine.markdown | 2 +- source/_components/media_player.cmus.markdown | 2 +- .../_components/media_player.denon.markdown | 2 +- .../media_player.denonavr.markdown | 2 +- .../_components/media_player.directv.markdown | 2 +- .../_components/media_player.dunehd.markdown | 2 +- source/_components/media_player.emby.markdown | 2 +- .../_components/media_player.firetv.markdown | 2 +- .../media_player.frontier_silicon.markdown | 2 +- .../_components/media_player.gpmdp.markdown | 2 +- .../_components/media_player.itunes.markdown | 2 +- source/_components/media_player.kodi.markdown | 2 +- .../media_player.lg_netcast.markdown | 2 +- source/_components/media_player.markdown | 2 +- .../media_player.mediaroom.markdown | 2 +- .../_components/media_player.mpchc.markdown | 2 +- source/_components/media_player.mpd.markdown | 2 +- source/_components/media_player.nad.markdown | 2 +- .../_components/media_player.nadtcp.markdown | 2 +- .../_components/media_player.onkyo.markdown | 2 +- .../media_player.openhome.markdown | 2 +- .../media_player.panasonic_viera.markdown | 4 +- .../_components/media_player.pandora.markdown | 2 +- .../_components/media_player.pioneer.markdown | 2 +- source/_components/media_player.plex.markdown | 2 +- source/_components/media_player.roku.markdown | 2 +- .../media_player.samsungtv.markdown | 4 +- .../_components/media_player.songpal.markdown | 8 +-- .../_components/media_player.sonos.markdown | 2 +- .../media_player.soundtouch.markdown | 2 +- .../media_player.universal.markdown | 2 +- .../_components/media_player.vizio.markdown | 2 +- .../_components/media_player.webostv.markdown | 4 +- .../_components/media_player.yamaha.markdown | 8 +-- .../media_player.ziggo_mediabox_xl.markdown | 2 +- source/_components/melissa.markdown | 2 +- source/_components/mochad.markdown | 2 +- source/_components/modbus.markdown | 2 +- source/_components/mqtt.markdown | 2 +- source/_components/mqtt_eventstream.markdown | 2 +- source/_components/mqtt_statestream.markdown | 2 +- source/_components/mycroft.markdown | 2 +- source/_components/mysensors.markdown | 2 +- source/_components/neato.markdown | 2 +- source/_components/nest.markdown | 2 +- source/_components/netatmo.markdown | 2 +- source/_components/notify.apns.markdown | 2 +- source/_components/notify.aws_lambda.markdown | 2 +- source/_components/notify.aws_sns.markdown | 2 +- source/_components/notify.aws_sqs.markdown | 2 +- source/_components/notify.ciscospark.markdown | 2 +- source/_components/notify.clickatell.markdown | 2 +- .../_components/notify.command_line.markdown | 2 +- source/_components/notify.discord.markdown | 2 +- source/_components/notify.ecobee.markdown | 2 +- source/_components/notify.facebook.markdown | 2 +- source/_components/notify.file.markdown | 2 +- .../_components/notify.free_mobile.markdown | 2 +- source/_components/notify.group.markdown | 2 +- source/_components/notify.hipchat.markdown | 2 +- source/_components/notify.html5.markdown | 2 +- source/_components/notify.instapush.markdown | 2 +- .../_components/notify.joaoapps_join.markdown | 2 +- source/_components/notify.kodi.markdown | 2 +- source/_components/notify.lannouncer.markdown | 2 +- .../notify.llamalab_automate.markdown | 2 +- source/_components/notify.mailgun.markdown | 2 +- source/_components/notify.markdown | 2 +- source/_components/notify.matrix.markdown | 4 +- .../_components/notify.message_bird.markdown | 4 +- source/_components/notify.mqtt.markdown | 2 +- source/_components/notify.mycroft.markdown | 2 +- source/_components/notify.mysensors.markdown | 2 +- .../_components/notify.nfandroidtv.markdown | 2 +- source/_components/notify.nma.markdown | 2 +- source/_components/notify.prowl.markdown | 2 +- source/_components/notify.pushbullet.markdown | 2 +- source/_components/notify.pushetta.markdown | 2 +- source/_components/notify.pushover.markdown | 2 +- source/_components/notify.pushsafer.markdown | 2 +- source/_components/notify.rest.markdown | 2 +- source/_components/notify.sendgrid.markdown | 2 +- source/_components/notify.simplepush.markdown | 2 +- source/_components/notify.slack.markdown | 2 +- source/_components/notify.smtp.markdown | 2 +- .../_components/notify.synology_chat.markdown | 2 +- source/_components/notify.syslog.markdown | 2 +- source/_components/notify.telegram.markdown | 2 +- .../_components/notify.twilio_call.markdown | 2 +- source/_components/notify.twilio_sms.markdown | 2 +- source/_components/notify.twitter.markdown | 2 +- source/_components/notify.webostv.markdown | 4 +- source/_components/notify.xmpp.markdown | 2 +- source/_components/notify.yessssms.markdown | 2 +- source/_components/nuheat.markdown | 2 +- source/_components/nuimo_controller.markdown | 2 +- source/_components/octoprint.markdown | 2 +- source/_components/panel_custom.markdown | 2 +- source/_components/panel_iframe.markdown | 2 +- source/_components/pilight.markdown | 8 +-- source/_components/proximity.markdown | 4 +- source/_components/python_script.markdown | 2 +- source/_components/qwikswitch.markdown | 2 +- source/_components/raspihats.markdown | 2 +- source/_components/recorder.markdown | 4 +- source/_components/remember_the_milk.markdown | 2 +- source/_components/remote.apple_tv.markdown | 2 +- source/_components/remote.harmony.markdown | 4 +- source/_components/remote.kira.markdown | 2 +- source/_components/remote.markdown | 2 +- source/_components/rest_command.markdown | 2 +- source/_components/rflink.markdown | 2 +- source/_components/rfxtrx.markdown | 4 +- source/_components/rpi_gpio.markdown | 2 +- source/_components/rpi_pfio.markdown | 2 +- .../scene.hunterdouglas_powerview.markdown | 2 +- source/_components/scene.litejet.markdown | 2 +- .../_components/scene.lutron_caseta.markdown | 2 +- source/_components/scene.markdown | 2 +- source/_components/scene.tahoma.markdown | 2 +- source/_components/scene.wink.markdown | 2 +- source/_components/script.markdown | 4 +- source/_components/scsgate.markdown | 4 +- source/_components/sensor.abode.markdown | 2 +- source/_components/sensor.ads.markdown | 2 +- .../_components/sensor.alarmdecoder.markdown | 2 +- .../_components/sensor.alpha_vantage.markdown | 2 +- source/_components/sensor.amcrest.markdown | 2 +- .../sensor.android_ip_webcam.markdown | 2 +- source/_components/sensor.api_stream.markdown | 2 +- source/_components/sensor.arduino.markdown | 2 +- source/_components/sensor.arest.markdown | 4 +- source/_components/sensor.arwn.markdown | 2 +- source/_components/sensor.bh1750.markdown | 2 +- source/_components/sensor.bitcoin.markdown | 2 +- source/_components/sensor.blockchain.markdown | 2 +- source/_components/sensor.bloomsky.markdown | 2 +- source/_components/sensor.bme280.markdown | 2 +- source/_components/sensor.bme680.markdown | 2 +- source/_components/sensor.broadlink.markdown | 4 +- source/_components/sensor.buienradar.markdown | 2 +- source/_components/sensor.coinbase.markdown | 2 +- .../_components/sensor.coinmarketcap.markdown | 2 +- .../sensor.comed_hourly_pricing.markdown | 2 +- .../_components/sensor.comfoconnect.markdown | 2 +- .../_components/sensor.command_line.markdown | 2 +- source/_components/sensor.cpuspeed.markdown | 2 +- source/_components/sensor.cups.markdown | 2 +- source/_components/sensor.deluge.markdown | 2 +- .../_components/sensor.deutsche_bahn.markdown | 2 +- source/_components/sensor.dht.markdown | 2 +- source/_components/sensor.dovado.markdown | 4 +- source/_components/sensor.dsmr.markdown | 2 +- .../sensor.dte_energy_bridge.markdown | 2 +- .../sensor.dublin_bus_transport.markdown | 4 +- source/_components/sensor.dweet.markdown | 2 +- source/_components/sensor.dyson.markdown | 2 +- source/_components/sensor.ebox.markdown | 2 +- source/_components/sensor.ecobee.markdown | 2 +- source/_components/sensor.efergy.markdown | 2 +- .../_components/sensor.eight_sleep.markdown | 2 +- source/_components/sensor.eliqonline.markdown | 2 +- source/_components/sensor.emoncms.markdown | 4 +- source/_components/sensor.enocean.markdown | 2 +- source/_components/sensor.envirophat.markdown | 2 +- source/_components/sensor.envisalink.markdown | 2 +- source/_components/sensor.etherscan.markdown | 2 +- source/_components/sensor.fail2ban.markdown | 2 +- source/_components/sensor.fido.markdown | 2 +- source/_components/sensor.file.markdown | 2 +- source/_components/sensor.filter.markdown | 2 +- source/_components/sensor.fitbit.markdown | 2 +- source/_components/sensor.fixer.markdown | 2 +- .../sensor.fritzbox_callmonitor.markdown | 2 +- .../sensor.fritzbox_netmonitor.markdown | 2 +- source/_components/sensor.geizhals.markdown | 4 +- source/_components/sensor.gitter.markdown | 2 +- source/_components/sensor.glances.markdown | 2 +- .../_components/sensor.google_wifi.markdown | 2 +- source/_components/sensor.gpsd.markdown | 2 +- .../sensor.haveibeenpwned.markdown | 2 +- source/_components/sensor.hddtemp.markdown | 2 +- source/_components/sensor.homematic.markdown | 2 +- source/_components/sensor.hp_ilo.markdown | 2 +- source/_components/sensor.http.markdown | 2 +- source/_components/sensor.htu21d.markdown | 2 +- .../_components/sensor.hydroquebec.markdown | 2 +- source/_components/sensor.ihc.markdown | 2 +- source/_components/sensor.imap.markdown | 2 +- .../sensor.imap_email_content.markdown | 2 +- source/_components/sensor.influxdb.markdown | 2 +- .../_components/sensor.insteon_plm.markdown | 2 +- source/_components/sensor.isy994.markdown | 2 +- source/_components/sensor.juicenet.markdown | 2 +- source/_components/sensor.kira.markdown | 2 +- source/_components/sensor.kwb.markdown | 2 +- source/_components/sensor.lacrosse.markdown | 2 +- source/_components/sensor.lastfm.markdown | 2 +- .../_components/sensor.linux_battery.markdown | 2 +- .../_components/sensor.loop_energy.markdown | 2 +- source/_components/sensor.luftdaten.markdown | 2 +- source/_components/sensor.markdown | 4 +- source/_components/sensor.mfi.markdown | 2 +- source/_components/sensor.min_max.markdown | 2 +- source/_components/sensor.modbus.markdown | 2 +- .../sensor.modem_callerid.markdown | 4 +- .../sensor.mold_indicator.markdown | 2 +- source/_components/sensor.moon.markdown | 2 +- source/_components/sensor.mqtt.markdown | 2 +- source/_components/sensor.mvglive.markdown | 6 +-- source/_components/sensor.mysensors.markdown | 2 +- .../sensor.nederlandse_spoorwegen.markdown | 2 +- source/_components/sensor.nest.markdown | 2 +- .../_components/sensor.nest_weather.markdown | 2 +- source/_components/sensor.netatmo.markdown | 2 +- source/_components/sensor.netdata.markdown | 2 +- .../_components/sensor.neurio_energy.markdown | 2 +- source/_components/sensor.nzbget.markdown | 2 +- source/_components/sensor.octoprint.markdown | 2 +- source/_components/sensor.onewire.markdown | 2 +- source/_components/sensor.openevse.markdown | 2 +- .../sensor.openhardwaremonitor.markdown | 2 +- .../sensor.openweathermap.markdown | 2 +- source/_components/sensor.otp.markdown | 6 +-- source/_components/sensor.pi_hole.markdown | 2 +- source/_components/sensor.pilight.markdown | 4 +- source/_components/sensor.pushbullet.markdown | 2 +- source/_components/sensor.pvoutput.markdown | 2 +- source/_components/sensor.pyload.markdown | 2 +- source/_components/sensor.qnap.markdown | 2 +- source/_components/sensor.radarr.markdown | 2 +- source/_components/sensor.random.markdown | 2 +- source/_components/sensor.rest.markdown | 2 +- source/_components/sensor.rflink.markdown | 2 +- source/_components/sensor.rfxtrx.markdown | 2 +- source/_components/sensor.ripple.markdown | 2 +- source/_components/sensor.sabnzbd.markdown | 2 +- source/_components/sensor.scrape.markdown | 2 +- source/_components/sensor.season.markdown | 2 +- source/_components/sensor.sense.markdown | 2 +- source/_components/sensor.sensehat.markdown | 2 +- source/_components/sensor.serial.markdown | 2 +- source/_components/sensor.shodan.markdown | 2 +- source/_components/sensor.smappee.markdown | 2 +- source/_components/sensor.snmp.markdown | 2 +- source/_components/sensor.sochain.markdown | 2 +- source/_components/sensor.sonarr.markdown | 2 +- source/_components/sensor.statistics.markdown | 2 +- .../_components/sensor.supervisord.markdown | 2 +- .../sensor.swiss_hydrological_data.markdown | 2 +- .../sensor.swiss_public_transport.markdown | 2 +- .../_components/sensor.synologydsm.markdown | 2 +- .../_components/sensor.systemmonitor.markdown | 4 +- source/_components/sensor.sytadin.markdown | 2 +- source/_components/sensor.tahoma.markdown | 2 +- .../_components/sensor.tellduslive.markdown | 2 +- source/_components/sensor.tellstick.markdown | 2 +- source/_components/sensor.temper.markdown | 2 +- source/_components/sensor.template.markdown | 2 +- .../sensor.thethingsnetwork.markdown | 2 +- .../sensor.thinkingcleaner.markdown | 2 +- source/_components/sensor.tibber.markdown | 2 +- source/_components/sensor.time_date.markdown | 2 +- source/_components/sensor.toon.markdown | 2 +- source/_components/sensor.torque.markdown | 2 +- .../_components/sensor.transmission.markdown | 2 +- source/_components/sensor.twitch.markdown | 2 +- .../_components/sensor.uk_transport.markdown | 2 +- source/_components/sensor.uptime.markdown | 2 +- source/_components/sensor.vasttrafik.markdown | 2 +- source/_components/sensor.vera.markdown | 2 +- source/_components/sensor.verisure.markdown | 2 +- source/_components/sensor.version.markdown | 2 +- source/_components/sensor.waqi.markdown | 2 +- source/_components/sensor.wink.markdown | 2 +- source/_components/sensor.worldclock.markdown | 2 +- .../sensor.worldtidesinfo.markdown | 2 +- .../_components/sensor.worxlandroid.markdown | 2 +- .../_components/sensor.wunderground.markdown | 8 +-- .../_components/sensor.xiaomi_aqara.markdown | 2 +- .../_components/sensor.yahoo_finance.markdown | 2 +- source/_components/sensor.yr.markdown | 2 +- source/_components/sensor.yweather.markdown | 2 +- source/_components/sensor.zabbix.markdown | 2 +- source/_components/sensor.zamg.markdown | 2 +- source/_components/sensor.zwave.markdown | 2 +- source/_components/shell_command.markdown | 2 +- source/_components/smappee.markdown | 2 +- source/_components/snips.markdown | 2 +- source/_components/spc.markdown | 6 +-- source/_components/sun.markdown | 2 +- source/_components/switch.abode.markdown | 2 +- .../switch.acer_projector.markdown | 2 +- .../switch.android_ip_webcam.markdown | 2 +- .../_components/switch.anel_pwrctrl.markdown | 2 +- source/_components/switch.arduino.markdown | 2 +- source/_components/switch.arest.markdown | 2 +- source/_components/switch.bbb_gpio.markdown | 2 +- source/_components/switch.broadlink.markdown | 2 +- .../_components/switch.command_line.markdown | 4 +- source/_components/switch.deluge.markdown | 2 +- .../switch.digitalloggers.markdown | 2 +- source/_components/switch.dlink.markdown | 2 +- source/_components/switch.doorbird.markdown | 2 +- source/_components/switch.edimax.markdown | 2 +- source/_components/switch.flux.markdown | 2 +- source/_components/switch.fritzdect.markdown | 2 +- .../_components/switch.hikvisioncam.markdown | 2 +- source/_components/switch.homematic.markdown | 2 +- source/_components/switch.ihc.markdown | 2 +- .../_components/switch.insteon_local.markdown | 2 +- .../_components/switch.insteon_plm.markdown | 2 +- source/_components/switch.isy994.markdown | 2 +- source/_components/switch.litejet.markdown | 2 +- .../_components/switch.lutron_caseta.markdown | 2 +- source/_components/switch.markdown | 2 +- source/_components/switch.mfi.markdown | 2 +- source/_components/switch.mochad.markdown | 2 +- source/_components/switch.modbus.markdown | 2 +- source/_components/switch.mqtt.markdown | 2 +- source/_components/switch.mysensors.markdown | 2 +- source/_components/switch.mystrom.markdown | 2 +- source/_components/switch.neato.markdown | 2 +- source/_components/switch.netio.markdown | 2 +- source/_components/switch.orvibo.markdown | 2 +- source/_components/switch.pilight.markdown | 2 +- .../switch.pulseaudio_loopback.markdown | 2 +- source/_components/switch.qwikswitch.markdown | 2 +- source/_components/switch.rachio.markdown | 2 +- source/_components/switch.raspihats.markdown | 2 +- source/_components/switch.rest.markdown | 2 +- source/_components/switch.rflink.markdown | 2 +- source/_components/switch.rfxtrx.markdown | 2 +- source/_components/switch.rpi_gpio.markdown | 2 +- source/_components/switch.rpi_pfio.markdown | 2 +- source/_components/switch.rpi_rf.markdown | 2 +- source/_components/switch.scsgate.markdown | 2 +- source/_components/switch.smappee.markdown | 2 +- .../_components/switch.tellduslive.markdown | 2 +- source/_components/switch.tellstick.markdown | 2 +- source/_components/switch.telnet.markdown | 2 +- source/_components/switch.template.markdown | 2 +- .../switch.thinkingcleaner.markdown | 2 +- source/_components/switch.toon.markdown | 2 +- source/_components/switch.tplink.markdown | 2 +- .../_components/switch.transmission.markdown | 2 +- source/_components/switch.vera.markdown | 2 +- source/_components/switch.verisure.markdown | 2 +- .../_components/switch.wake_on_lan.markdown | 2 +- source/_components/switch.wemo.markdown | 2 +- source/_components/switch.wink.markdown | 2 +- .../_components/switch.xiaomi_aqara.markdown | 2 +- .../_components/switch.xiaomi_miio.markdown | 2 +- source/_components/switch.zwave.markdown | 2 +- source/_components/tellduslive.markdown | 4 +- source/_components/tellstick.markdown | 2 +- source/_components/timer.markdown | 2 +- source/_components/toon.markdown | 2 +- source/_components/tts.amazon_polly.markdown | 2 +- source/_components/tts.baidu.markdown | 2 +- source/_components/tts.google.markdown | 2 +- source/_components/tts.markdown | 2 +- source/_components/tts.marytts.markdown | 2 +- source/_components/tts.microsoft.markdown | 2 +- source/_components/tts.picotts.markdown | 2 +- source/_components/tts.voicerss.markdown | 2 +- source/_components/tts.yandextts.markdown | 2 +- source/_components/twilio.markdown | 2 +- source/_components/upcloud.markdown | 2 +- source/_components/vacuum.dyson.markdown | 2 +- source/_components/vacuum.markdown | 2 +- source/_components/vacuum.mqtt.markdown | 2 +- source/_components/vacuum.neato.markdown | 2 +- source/_components/vacuum.roomba.markdown | 2 +- .../_components/vacuum.xiaomi_miio.markdown | 2 +- source/_components/vera.markdown | 2 +- source/_components/verisure.markdown | 2 +- source/_components/wake_on_lan.markdown | 2 +- .../_components/weather.buienradar.markdown | 2 +- source/_components/weather.darksky.markdown | 2 +- source/_components/weather.ecobee.markdown | 2 +- source/_components/weather.markdown | 2 +- .../weather.openweathermap.markdown | 2 +- source/_components/weather.yweather.markdown | 2 +- source/_components/weather.zamg.markdown | 2 +- source/_components/weblink.markdown | 2 +- source/_components/websocket_api.markdown | 2 +- source/_components/wemo.markdown | 2 +- source/_components/wink.markdown | 2 +- source/_components/zabbix.markdown | 2 +- source/_components/zha.markdown | 6 +-- source/_components/zone.markdown | 2 +- source/_components/zwave.markdown | 2 +- source/_docs/asterisk_mbox.markdown | 2 +- source/_docs/autostart.markdown | 2 +- source/_docs/autostart/macos.markdown | 2 +- source/_docs/autostart/synology.markdown | 2 +- source/_docs/autostart/systemd.markdown | 2 +- source/_docs/autostart/upstart.markdown | 2 +- .../configuration/group_visibility.markdown | 2 +- source/_docs/configuration/packages.markdown | 2 +- source/_docs/configuration/securing.markdown | 2 +- .../_docs/configuration/templating.markdown | 2 +- source/_docs/ecosystem/appdaemon/api.markdown | 54 +++++++++---------- .../ecosystem/appdaemon/tutorial.markdown | 2 +- .../ecosystem/backup/backup_dropbox.markdown | 2 +- .../ecosystem/backup/backup_github.markdown | 2 +- .../ecosystem/backup/backup_usb.markdown | 2 +- .../ecosystem/hass-configurator.markdown | 8 +-- source/_docs/ecosystem/synology.markdown | 2 +- source/_docs/installation.markdown | 2 +- source/_docs/installation/docker.markdown | 2 +- .../hassbian/common-tasks.markdown | 2 +- .../installation/hassbian/upgrading.markdown | 2 +- source/_docs/installation/synology.markdown | 2 +- source/_docs/mqtt/birth_will.markdown | 2 +- source/_docs/mqtt/broker.markdown | 6 +-- source/_docs/mqtt/certificate.markdown | 2 +- source/_docs/mqtt/discovery.markdown | 2 +- source/_docs/mqtt/logging.markdown | 2 +- source/_docs/mqtt/processing_json.markdown | 2 +- source/_docs/mqtt/service.markdown | 2 +- source/_docs/mqtt/testing.markdown | 2 +- source/_docs/scripts.markdown | 2 +- source/_docs/scripts/service-calls.markdown | 2 +- source/_docs/z-wave/installation.markdown | 2 +- source/_docs/z-wave/services.markdown | 2 +- ...rry-pi-squeezebox-asuswrt-support.markdown | 2 +- ...ings-with-MQTT-and-Home-Assistant.markdown | 2 +- ...ng-presence-detection-work-better.markdown | 4 +- .../2016-08-16-we-have-apps-now.markdown | 2 +- source/_posts/2017-11-04-release-57.markdown | 2 +- .../developers/code_review_platform.markdown | 4 +- .../component_deps_and_reqs.markdown | 2 +- source/developers/component_events.markdown | 2 +- source/developers/component_loading.markdown | 2 +- source/developers/component_states.markdown | 2 +- .../developers/component_visibility.markdown | 2 +- .../documentation/standards.markdown | 2 +- .../hassio/addon_communication.markdown | 2 +- .../presence-detection.markdown | 2 +- .../installing_third_party_addons.markdown | 2 +- 764 files changed, 883 insertions(+), 885 deletions(-) diff --git a/source/_addons/mariadb.markdown b/source/_addons/mariadb.markdown index 673857de06..66df1440c6 100644 --- a/source/_addons/mariadb.markdown +++ b/source/_addons/mariadb.markdown @@ -9,7 +9,7 @@ sharing: true footer: true --- -Set up a [mariadb](https://mariadb.org/) SQL server. It supports multiple databases, users, and permission settings. If you want to only connect from inside home assistant use `core-mariadb` as the host address. +Set up a [mariadb](https://mariadb.org/) SQL server. It supports multiple databases, users, and permission settings. If you want to only connect from inside Home Assistant use `core-mariadb` as the host address. ```json { diff --git a/source/_components/alarm_control_panel.abode.markdown b/source/_components/alarm_control_panel.abode.markdown index 5df73f1c05..588eb46f40 100644 --- a/source/_components/alarm_control_panel.abode.markdown +++ b/source/_components/alarm_control_panel.abode.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Abode Alarm Control Panel" -description: "Instructions how to setup the Abode Alarm control panel within Home Assistant." +description: "Instructions on how to setup the Abode Alarm control panel within Home Assistant." date: 2017-08-26 0:28 sidebar: true comments: false diff --git a/source/_components/alarm_control_panel.alarmdecoder.markdown b/source/_components/alarm_control_panel.alarmdecoder.markdown index d677173ebb..476773df3e 100644 --- a/source/_components/alarm_control_panel.alarmdecoder.markdown +++ b/source/_components/alarm_control_panel.alarmdecoder.markdown @@ -1,7 +1,7 @@ --- layout: page title: "AlarmDecoder Alarm Control Panel" -description: "Instructions how to setup the AlarmDecoder Alarm control panel within Home Assistant." +description: "Instructions on how to setup the AlarmDecoder Alarm control panel within Home Assistant." date: 2017-04-02 13:28 sidebar: true comments: false diff --git a/source/_components/alarm_control_panel.alarmdotcom.markdown b/source/_components/alarm_control_panel.alarmdotcom.markdown index 895cde8e35..82e1a7774e 100644 --- a/source/_components/alarm_control_panel.alarmdotcom.markdown +++ b/source/_components/alarm_control_panel.alarmdotcom.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Alarm.com Alarm Control Panel" -description: "Instructions how to integrate Alarm.com into Home Assistant." +description: "Instructions on how to integrate Alarm.com into Home Assistant." date: 2016-01-14 22:00 sidebar: true comments: false diff --git a/source/_components/alarm_control_panel.arlo.markdown b/source/_components/alarm_control_panel.arlo.markdown index 6d66bef11b..e47a6322d6 100644 --- a/source/_components/alarm_control_panel.arlo.markdown +++ b/source/_components/alarm_control_panel.arlo.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Arlo Control Panel" -description: "Instructions how to setup the Netgear Arlo Base Stations as a control panel within Home Assistant." +description: "Instructions on how to setup the Netgear Arlo Base Stations as a control panel within Home Assistant." date: 2017-10-05 17:45 sidebar: true comments: false @@ -27,11 +27,11 @@ alarm_control_panel: {% configuration %} home_mode_name: - description: "Arlo base station does not have a built-in home mode. You can map one of your custom modes to home assistant's home mode by setting the name of the custom mode in this configuration variable. The name of the custom mode should match exactly as you set it up in the Arlo app." + description: "Arlo base station does not have a built-in home mode. You can map one of your custom modes to Home Assistant's home mode by setting the name of the custom mode in this configuration variable. The name of the custom mode should match exactly as you set it up in the Arlo app." required: false type: string away_mode_name: - description: "Arlo base station does not have a built-in away mode. You can map one of your custom modes to home assistant's away mode by setting the name of the custom mode in this configuration variable. The name of the custom mode should match eactly as you set it up in the Arlo app." + description: "Arlo base station does not have a built-in away mode. You can map one of your custom modes to Home Assistant's away mode by setting the name of the custom mode in this configuration variable. The name of the custom mode should match eactly as you set it up in the Arlo app." required: false type: string default: "`Armed` mode in Arlo" @@ -74,4 +74,3 @@ Setting Arlo to a custom mode (mapped to `home_mode_name` in `configuration.yaml You can also completely disarm the Arlo base station by calling the `alarm_control_panel.alarm_disarm` service, and trigger the alarm by calling the `alarm_control_panel.alarm_trigger` service. More examples and configuration options can be found on the [Manual Alarm Control page](/components/alarm_control_panel.manual/#examples). - diff --git a/source/_components/alarm_control_panel.concord232.markdown b/source/_components/alarm_control_panel.concord232.markdown index 86be0b7517..36f897e21e 100644 --- a/source/_components/alarm_control_panel.concord232.markdown +++ b/source/_components/alarm_control_panel.concord232.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Concord232 Alarm Control Panel" -description: "Instructions how to integrate Interlogix/GE Concord4 with RS-232 Automation Control Module into Home Assistant." +description: "Instructions on how to integrate Interlogix/GE Concord4 with RS-232 Automation Control Module into Home Assistant." date: 2016-10-11 10:00 sidebar: true comments: false @@ -16,7 +16,7 @@ The `concord232` platform provides integration with GE, Interlogix (and other br To use this platform, you will need to have the external concord232 client and server installed. The server must be running on the device which is connected to the automation module's serial port. The client must be installed on the machine running Home Assistant. These may often be the same machine, but do not have to be. For additional details in setting up and testing the client and server, see -To enable this platform in home assistant, add the following lines to your `configuration.yaml`: +To enable this platform in Home Assistant, add the following lines to your `configuration.yaml`: ```yaml # Example configuration.yaml entry diff --git a/source/_components/alarm_control_panel.egardia.markdown b/source/_components/alarm_control_panel.egardia.markdown index 314a1fcd11..bef700af16 100644 --- a/source/_components/alarm_control_panel.egardia.markdown +++ b/source/_components/alarm_control_panel.egardia.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Egardia / Woonveilig Alarm Control Panel" -description: "Instructions how to integrate Egardia / Woonveilig into Home Assistant." +description: "Instructions on how to integrate Egardia / Woonveilig into Home Assistant." date: 2016-07-02 22:00 sidebar: true comments: false diff --git a/source/_components/alarm_control_panel.envisalink.markdown b/source/_components/alarm_control_panel.envisalink.markdown index b5b6b3d593..fe58c6fb4d 100644 --- a/source/_components/alarm_control_panel.envisalink.markdown +++ b/source/_components/alarm_control_panel.envisalink.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Envisalink Alarm" -description: "Instructions how to setup the Envisalink Alarm control panel within Home Assistant." +description: "Instructions on how to setup the Envisalink Alarm control panel within Home Assistant." date: 2016-07-01 08:00 sidebar: true comments: false diff --git a/source/_components/alarm_control_panel.ialarm.markdown b/source/_components/alarm_control_panel.ialarm.markdown index db0288b47f..d72261c908 100644 --- a/source/_components/alarm_control_panel.ialarm.markdown +++ b/source/_components/alarm_control_panel.ialarm.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Antifurto365 iAlarm Control Panel" -description: "Instructions how to integrate iAlarms alarms into Home Assistant." +description: "Instructions on how to integrate iAlarms alarms into Home Assistant." date: 2017-11-30 20:00 sidebar: true comments: false diff --git a/source/_components/alarm_control_panel.manual.markdown b/source/_components/alarm_control_panel.manual.markdown index 86509ebe62..feeda4b768 100644 --- a/source/_components/alarm_control_panel.manual.markdown +++ b/source/_components/alarm_control_panel.manual.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Manual Alarm Control Panel" -description: "Instructions how to integrate manual alarms into Home Assistant." +description: "Instructions on how to integrate manual alarms into Home Assistant." date: 2015-10-13 19:10 sidebar: true comments: false diff --git a/source/_components/alarm_control_panel.manual_mqtt.markdown b/source/_components/alarm_control_panel.manual_mqtt.markdown index 5a1a7d139c..5ceaa64e3a 100644 --- a/source/_components/alarm_control_panel.manual_mqtt.markdown +++ b/source/_components/alarm_control_panel.manual_mqtt.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Manual Alarm Control Panel with MQTT Support" -description: "Instructions how to integrate manual alarms into Home Assistant with MQTT support." +description: "Instructions on how to integrate manual alarms into Home Assistant with MQTT support." date: 2017-07-02 9:10 sidebar: true comments: false diff --git a/source/_components/alarm_control_panel.markdown b/source/_components/alarm_control_panel.markdown index ba5f469915..bdc1adf398 100644 --- a/source/_components/alarm_control_panel.markdown +++ b/source/_components/alarm_control_panel.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Alarm Control Panels" -description: "Instructions how to integrate Alarm Control Panels into Home Assistant." +description: "Instructions on how to integrate Alarm Control Panels into Home Assistant." date: 2015-10-13 19:10 sidebar: true comments: false diff --git a/source/_components/alarm_control_panel.mqtt.markdown b/source/_components/alarm_control_panel.mqtt.markdown index 199ebacaee..cb93a1b595 100644 --- a/source/_components/alarm_control_panel.mqtt.markdown +++ b/source/_components/alarm_control_panel.mqtt.markdown @@ -1,7 +1,7 @@ --- layout: page title: "MQTT Alarm Control Panel" -description: "Instructions how to integrate MQTT capable Alarm Panels into Home Assistant." +description: "Instructions on how to integrate MQTT capable Alarm Panels into Home Assistant." date: 2015-09-14 19:10 sidebar: true comments: false diff --git a/source/_components/alarm_control_panel.nx584.markdown b/source/_components/alarm_control_panel.nx584.markdown index 0a14c880db..a98ad9050a 100644 --- a/source/_components/alarm_control_panel.nx584.markdown +++ b/source/_components/alarm_control_panel.nx584.markdown @@ -1,7 +1,7 @@ --- layout: page title: "NX584 Alarm Control Panel" -description: "Instructions how to integrate NX584 into Home Assistant." +description: "Instructions on how to integrate NX584 into Home Assistant." date: 2016-02-07 10:00 sidebar: true comments: false diff --git a/source/_components/alarm_control_panel.satel_integra.markdown b/source/_components/alarm_control_panel.satel_integra.markdown index 77752ae7d0..a5f8915d08 100644 --- a/source/_components/alarm_control_panel.satel_integra.markdown +++ b/source/_components/alarm_control_panel.satel_integra.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Satel Integra Alarm Control Panel" -description: "Instructions how to setup the Satel Integra control panel within Home Assistant." +description: "Instructions on how to setup the Satel Integra control panel within Home Assistant." date: 2017-09-07 13:28 sidebar: true comments: false diff --git a/source/_components/alarm_control_panel.simplisafe.markdown b/source/_components/alarm_control_panel.simplisafe.markdown index af38f6ad37..ac5c14183a 100644 --- a/source/_components/alarm_control_panel.simplisafe.markdown +++ b/source/_components/alarm_control_panel.simplisafe.markdown @@ -1,7 +1,7 @@ --- layout: page title: "SimpliSafe Alarm Control Panel" -description: "Instructions how to integrate SimpliSafe into Home Assistant." +description: "Instructions on how to integrate SimpliSafe into Home Assistant." date: 2016-07-02 22:00 sidebar: true comments: false diff --git a/source/_components/alarm_control_panel.spc.markdown b/source/_components/alarm_control_panel.spc.markdown index 78e7066f00..5cc4025f00 100644 --- a/source/_components/alarm_control_panel.spc.markdown +++ b/source/_components/alarm_control_panel.spc.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Vanderbilt SPC Alarm" -description: "Instructions how to setup the Vanderbilt SPC Alarm control panel within Home Assistant." +description: "Instructions on how to setup the Vanderbilt SPC Alarm control panel within Home Assistant." date: 2017-05-18 22:01 sidebar: true comments: false diff --git a/source/_components/alarm_control_panel.totalconnect.markdown b/source/_components/alarm_control_panel.totalconnect.markdown index 668b749205..821d38075e 100644 --- a/source/_components/alarm_control_panel.totalconnect.markdown +++ b/source/_components/alarm_control_panel.totalconnect.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Honeywell TotalConnect Alarm Control Panel" -description: "Instructions how to integrate TotalConnect alarms into Home Assistant." +description: "Instructions on how to integrate TotalConnect alarms into Home Assistant." date: 2017-04-02 22:00 sidebar: true comments: false diff --git a/source/_components/alarm_control_panel.verisure.markdown b/source/_components/alarm_control_panel.verisure.markdown index 0c06294c3e..669de86761 100644 --- a/source/_components/alarm_control_panel.verisure.markdown +++ b/source/_components/alarm_control_panel.verisure.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Verisure Alarm" -description: "Instructions how to setup the Verisure Alarm control panel within Home Assistant." +description: "Instructions on how to setup the Verisure Alarm control panel within Home Assistant." date: 2016-02-15 22:00 sidebar: true comments: false diff --git a/source/_components/alarm_control_panel.wink.markdown b/source/_components/alarm_control_panel.wink.markdown index 032bbd3cb3..e6fee5cdb5 100644 --- a/source/_components/alarm_control_panel.wink.markdown +++ b/source/_components/alarm_control_panel.wink.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Wink Alarm" -description: "Instructions how to setup the Wink alarms within Home Assistant." +description: "Instructions on how to setup the Wink alarms within Home Assistant." date: 2017-01-14 12:00 sidebar: true comments: false diff --git a/source/_components/alert.markdown b/source/_components/alert.markdown index acdf983305..4c59259cde 100644 --- a/source/_components/alert.markdown +++ b/source/_components/alert.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Alert" -description: "Instructions how to setup automatic alerts within Home Assistant." +description: "Instructions on how to setup automatic alerts within Home Assistant." date: 2017-01-15 20:00 sidebar: true comments: false diff --git a/source/_components/alexa.markdown b/source/_components/alexa.markdown index e7bfbfa746..538c065bfb 100644 --- a/source/_components/alexa.markdown +++ b/source/_components/alexa.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Alexa / Amazon Echo" -description: "Instructions how to connect Alexa/Amazon Echo to Home Assistant." +description: "Instructions on how to connect Alexa/Amazon Echo to Home Assistant." date: 2015-12-13 13:02 sidebar: true comments: false @@ -167,7 +167,7 @@ intent_script: text: OK ``` -Here we are using [templates] to take the name we gave to Alexa e.g. `downstairs on` and replace the space with an underscore so it becomes `downstairs_on` as Home Assistant expects. +Here we are using [templates] to take the name we gave to Alexa e.g., `downstairs on` and replace the space with an underscore so it becomes `downstairs_on` as Home Assistant expects. Now say `Alexa ask Home Assistant to activate ` and Alexa will activate that scene for you. diff --git a/source/_components/amcrest.markdown b/source/_components/amcrest.markdown index c910e10647..962a56ea11 100644 --- a/source/_components/amcrest.markdown +++ b/source/_components/amcrest.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Amcrest IP Camera" -description: "Instructions how to integrate Amcrest IP cameras within Home Assistant." +description: "Instructions on how to integrate Amcrest IP cameras within Home Assistant." date: 2017-06-24 10:00 sidebar: true comments: false @@ -45,7 +45,7 @@ Configuration variables: - **port** (*Optional*): The port that the camera is running on. The default is 80. - **resolution** (*Optional*): This parameter allows you to specify the camera resolution. For a high resolution (1080/720p), specify the option `high`. For VGA resolution (640x480p), specify the option `low`. If omitted, it defaults to *high*. - **stream_source** (*Optional*): The data source for the live stream. `mjpeg` will use the camera's native MJPEG stream, whereas `snapshot` will use the camera's snapshot API to create a stream from still images. You can also set the `rtsp` option to generate the streaming via RTSP protocol. If omitted, it defaults to *snapshot*. -- **ffmpeg_arguments**: (*Optional*): Extra options to pass to ffmpeg, e.g. image quality or video filter options. +- **ffmpeg_arguments**: (*Optional*): Extra options to pass to ffmpeg, e.g., image quality or video filter options. - **authentication**: (*Optional*): Defines which authentication method to use only when **stream_source** is **mjpeg**. Currently, *aiohttp* only support *basic*. It defaults to *basic*. - **scan_interval** (*Optional*): Defines the update interval of the sensor in seconds. The default is 10 seconds. - **sensors** array (*Optional*): Conditions to display in the frontend. By default, *none* of the conditions are enabled. The following conditions can be monitored. diff --git a/source/_components/api.markdown b/source/_components/api.markdown index cdac55a1b4..ba1097738e 100644 --- a/source/_components/api.markdown +++ b/source/_components/api.markdown @@ -1,7 +1,7 @@ --- layout: page title: "API" -description: "Instructions how to setup the RESTful API within Home Assistant." +description: "Instructions on how to setup the RESTful API within Home Assistant." date: 2018-01-21 08:00 sidebar: true comments: false diff --git a/source/_components/apple_tv.markdown b/source/_components/apple_tv.markdown index bba7b7ac78..93d192a00c 100644 --- a/source/_components/apple_tv.markdown +++ b/source/_components/apple_tv.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Apple TV" -description: "Instructions how to integrate Apple TV devices into Home Assistant." +description: "Instructions on how to integrate Apple TV devices into Home Assistant." date: 2017-06-26 20:47 sidebar: true comments: false @@ -13,7 +13,7 @@ ha_iot_class: "Local Push" ha_release: 0.49 --- -The `apple_tv` platform allows you to control an Apple TV (3rd and 4th generation). See the [remote platform](/components/remote.apple_tv/) if you want to send remote control buttons, e.g. arrow keys. +The `apple_tv` platform allows you to control an Apple TV (3rd and 4th generation). See the [remote platform](/components/remote.apple_tv/) if you want to send remote control buttons, e.g., arrow keys.

    Currently, you must have Home Sharing enabled for this to work. Support for pairing Home Assistant with your device will be supported in a later release. @@ -92,7 +92,7 @@ then device authentication is required. Press the icon in the upper left corner -Select `apple_tv` as domain, `apple_tv_authenticate` as service and enter `{"entity_id": "XXX"}` into "Service Data", but replace XXX with the entity id of your device (e.g. `media_player.apple_tv`). Press the button and hopefully you are presented with an input dialog asking for a pin code: +Select `apple_tv` as domain, `apple_tv_authenticate` as service and enter `{"entity_id": "XXX"}` into "Service Data", but replace XXX with the entity id of your device (e.g., `media_player.apple_tv`). Press the button and hopefully you are presented with an input dialog asking for a pin code: @@ -143,4 +143,3 @@ To play media on an Apple TV with device authentication enabled (e.g., ATV4 with ### {% linkable_title Service `apple_tv_scan` %} Scans the local network for Apple TVs. All found devices are presented as a persistent notification. - diff --git a/source/_components/arduino.markdown b/source/_components/arduino.markdown index 5105f19c4c..ca16dd32b7 100644 --- a/source/_components/arduino.markdown +++ b/source/_components/arduino.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Arduino" -description: "Instructions how to setup an Arduino boards within Home Assistant." +description: "Instructions on how to setup an Arduino boards within Home Assistant." date: 2015-06-27 10:28 sidebar: true comments: false @@ -43,7 +43,7 @@ The exact number can be determined with the command shown below. $ ls /dev/ttyACM* ``` -If that's not working, check your `dmesg` or `journalctl -f` output. Keep in mind that Arduino clones are often using a different name for the port (e.g. `/dev/ttyUSB*`). +If that's not working, check your `dmesg` or `journalctl -f` output. Keep in mind that Arduino clones are often using a different name for the port (e.g., `/dev/ttyUSB*`).

    A word of caution: The Arduino boards are not storing states. This means that with every initialization the pins are set to off/low. diff --git a/source/_components/asterisk_mbox.markdown b/source/_components/asterisk_mbox.markdown index d0d7ba72fe..bfc30400f6 100644 --- a/source/_components/asterisk_mbox.markdown +++ b/source/_components/asterisk_mbox.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Asterisk Voicemail" -description: "Instructions how to integrate your existing Asterisk voicemail within Home Assistant." +description: "Instructions on how to integrate your existing Asterisk voicemail within Home Assistant." date: 2017-06-30 18:30 sidebar: true comments: false diff --git a/source/_components/automation.markdown b/source/_components/automation.markdown index 181d28ba12..658c0ebc63 100644 --- a/source/_components/automation.markdown +++ b/source/_components/automation.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Automation" -description: "Instructions how to setup automation within Home Assistant." +description: "Instructions on how to setup automation within Home Assistant." date: 2015-01-20 22:36 sidebar: true comments: false @@ -19,7 +19,7 @@ Starting with 0.28 your automation rules can be controlled with the frontend.

    -This allows one to reload the automation without restarting Home Assistant itself. If you don't want to see the automation rule in your frontend use `hide_entity: True` to hide it. You can also use `initial_state: 'off'` so that the automation is not automatically turned on after a Home assistant reboot. +This allows one to reload the automation without restarting Home Assistant itself. If you don't want to see the automation rule in your frontend use `hide_entity: True` to hide it. You can also use `initial_state: 'off'` so that the automation is not automatically turned on after a Home Assistant reboot. ```yaml automation: diff --git a/source/_components/bbb_gpio.markdown b/source/_components/bbb_gpio.markdown index ab6a13d94e..785aec4f2d 100644 --- a/source/_components/bbb_gpio.markdown +++ b/source/_components/bbb_gpio.markdown @@ -1,7 +1,7 @@ --- layout: page title: "BeagleBone Black GPIO" -description: "Instructions how to integrate the GPIO capability of a BeagleBone Black into Home Assistant." +description: "Instructions on how to integrate the GPIO capability of a BeagleBone Black into Home Assistant." date: 2017-01-14 10:00 sidebar: true comments: false diff --git a/source/_components/binary_sensor.abode.markdown b/source/_components/binary_sensor.abode.markdown index 14e8e14533..def5cabb19 100644 --- a/source/_components/binary_sensor.abode.markdown +++ b/source/_components/binary_sensor.abode.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Abode Binary Sensor" -description: "Instructions how to integrate Abode binary sensors into Home Assistant." +description: "Instructions on how to integrate Abode binary sensors into Home Assistant." date: 2017-08-26 0:28 sidebar: true comments: false diff --git a/source/_components/binary_sensor.alarmdecoder.markdown b/source/_components/binary_sensor.alarmdecoder.markdown index 1bfbd1be9f..92cfa7fa4e 100644 --- a/source/_components/binary_sensor.alarmdecoder.markdown +++ b/source/_components/binary_sensor.alarmdecoder.markdown @@ -1,7 +1,7 @@ --- layout: page title: "AlarmDecoder Binary Sensor" -description: "Instructions how to integrate AlarmDecoder binary sensors into Home Assistant." +description: "Instructions on how to integrate AlarmDecoder binary sensors into Home Assistant." date: 2017-04-02 13:28 sidebar: true comments: false diff --git a/source/_components/binary_sensor.android_ip_webcam.markdown b/source/_components/binary_sensor.android_ip_webcam.markdown index 80775c3b2e..0c5c2abbe8 100644 --- a/source/_components/binary_sensor.android_ip_webcam.markdown +++ b/source/_components/binary_sensor.android_ip_webcam.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Android IP Webcam Binary Sensor" -description: "Instructions how to integrate binary motion sensors for Android IP webcam within Home Assistant." +description: "Instructions on how to integrate binary motion sensors for Android IP webcam within Home Assistant." date: 2017-03-10 00:00 sidebar: true comments: false diff --git a/source/_components/binary_sensor.arest.markdown b/source/_components/binary_sensor.arest.markdown index 8b359f464a..d18a2d321a 100644 --- a/source/_components/binary_sensor.arest.markdown +++ b/source/_components/binary_sensor.arest.markdown @@ -1,7 +1,7 @@ --- layout: page title: "aREST Binary Sensor" -description: "Instructions how to integrate aREST binary sensors within Home Assistant." +description: "Instructions on how to integrate aREST binary sensors within Home Assistant." date: 2015-11-20 18:15 sidebar: true comments: false @@ -28,7 +28,7 @@ binary_sensor: Configuration variables: -- **resource** (*Required*): IP address and schema of the device that is exposing an aREST API, e.g. http://192.168.1.10. +- **resource** (*Required*): IP address and schema of the device that is exposing an aREST API, e.g., http://192.168.1.10. - **pin** (*Required*): Number of the pin to monitor. - **name** (*Optional*): Let you overwrite the name of the device. By default *name* from the device is used. diff --git a/source/_components/binary_sensor.axis.markdown b/source/_components/binary_sensor.axis.markdown index 77ece6d147..939cc8f76d 100644 --- a/source/_components/binary_sensor.axis.markdown +++ b/source/_components/binary_sensor.axis.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Axis Binary Sensor" -description: "Instructions how to integrate Axis binary sensors into Home Assistant." +description: "Instructions on how to integrate Axis binary sensors into Home Assistant." date: 2017-04-01 19:00 sidebar: true comments: false diff --git a/source/_components/binary_sensor.bayesian.markdown b/source/_components/binary_sensor.bayesian.markdown index 0d2858e982..ad52a8e85f 100644 --- a/source/_components/binary_sensor.bayesian.markdown +++ b/source/_components/binary_sensor.bayesian.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Bayesian Binary Sensor" -description: "Instructions how to integrate threshold Bayesian sensors into Home Assistant." +description: "Instructions on how to integrate threshold Bayesian sensors into Home Assistant." date: 2017-08-27 20:05 sidebar: true comments: false diff --git a/source/_components/binary_sensor.bbb_gpio.markdown b/source/_components/binary_sensor.bbb_gpio.markdown index b7236d5468..be2a9bd9fb 100644 --- a/source/_components/binary_sensor.bbb_gpio.markdown +++ b/source/_components/binary_sensor.bbb_gpio.markdown @@ -1,7 +1,7 @@ --- layout: page title: "BeagleBone Black GPIO Binary Sensor" -description: "Instructions how to integrate the GPIO sensor capability of a BeagleBone Black into Home Assistant." +description: "Instructions on how to integrate the GPIO sensor capability of a BeagleBone Black into Home Assistant." date: 2017-01-14 10:00 sidebar: true comments: false diff --git a/source/_components/binary_sensor.command_line.markdown b/source/_components/binary_sensor.command_line.markdown index f966144470..b37d6e40bb 100644 --- a/source/_components/binary_sensor.command_line.markdown +++ b/source/_components/binary_sensor.command_line.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Command line Binary Sensor" -description: "Instructions how to integrate Command binary sensors within Home Assistant." +description: "Instructions on how to integrate Command binary sensors within Home Assistant." date: 2016-01-13 12:15 sidebar: true comments: false diff --git a/source/_components/binary_sensor.concord232.markdown b/source/_components/binary_sensor.concord232.markdown index 4378b5fb14..39320bb672 100644 --- a/source/_components/binary_sensor.concord232.markdown +++ b/source/_components/binary_sensor.concord232.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Concord232 Binary Sensor" -description: "Instructions how to integrate Interlogix/GE Concord4 binary sensors into Home Assistant." +description: "Instructions on how to integrate Interlogix/GE Concord4 binary sensors into Home Assistant." date: 2016-10-11 10:00 sidebar: true comments: false diff --git a/source/_components/binary_sensor.ecobee.markdown b/source/_components/binary_sensor.ecobee.markdown index 189c943bf9..25f58c42cb 100644 --- a/source/_components/binary_sensor.ecobee.markdown +++ b/source/_components/binary_sensor.ecobee.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Ecobee Binary Sensor" -description: "Instructions how to setup the Ecobee sensors within Home Assistant." +description: "Instructions on how to setup the Ecobee sensors within Home Assistant." date: 2015-11-30 18:00 sidebar: true comments: false diff --git a/source/_components/binary_sensor.egardia.markdown b/source/_components/binary_sensor.egardia.markdown index 8df482bf5b..d418559f8e 100644 --- a/source/_components/binary_sensor.egardia.markdown +++ b/source/_components/binary_sensor.egardia.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Egardia Binary Sensor" -description: "Instructions how to integrate Egardia / Woonveilig binary sensors into Home Assistant." +description: "Instructions on how to integrate Egardia / Woonveilig binary sensors into Home Assistant." date: 2018-03-02 09:00 sidebar: true comments: false diff --git a/source/_components/binary_sensor.eight_sleep.markdown b/source/_components/binary_sensor.eight_sleep.markdown index fa949ae66e..cf9f2c52bf 100644 --- a/source/_components/binary_sensor.eight_sleep.markdown +++ b/source/_components/binary_sensor.eight_sleep.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Eight Sleep Binary Sensor" -description: "Instructions how to integrate binary motion sensors for Eight Sleep within Home Assistant." +description: "Instructions on how to integrate binary motion sensors for Eight Sleep within Home Assistant." date: 2017-04-24 00:00 sidebar: true comments: false diff --git a/source/_components/binary_sensor.envisalink.markdown b/source/_components/binary_sensor.envisalink.markdown index 6e56da0b94..52735a8dbf 100644 --- a/source/_components/binary_sensor.envisalink.markdown +++ b/source/_components/binary_sensor.envisalink.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Envisalink Binary Sensor" -description: "Instructions how to integrate Envisalink binary sensors into Home Assistant." +description: "Instructions on how to integrate Envisalink binary sensors into Home Assistant." date: 2016-07-01 08:00 sidebar: true comments: false diff --git a/source/_components/binary_sensor.ffmpeg_motion.markdown b/source/_components/binary_sensor.ffmpeg_motion.markdown index 453c76d7e0..6635bae9e6 100644 --- a/source/_components/binary_sensor.ffmpeg_motion.markdown +++ b/source/_components/binary_sensor.ffmpeg_motion.markdown @@ -42,7 +42,7 @@ Configuration variables: - **reset** (*Optional*): The time to reset the state after no new motion is detected. Defaults to 20 seconds. - **repeat** (*Optional*): How many events need to be detected in *repeat_time* in order to trigger a motion. Defaults to 0 repeats (deactivated). - **repeat_time** (*Optional*): The span of time *repeat* events need to occur in before triggering a motion. Defaults to 0 seconds (deactivated). -- **extra_arguments** (*Optional*): Extra options to pass to `ffmpeg`, e.g. video denoise filtering. +- **extra_arguments** (*Optional*): Extra options to pass to `ffmpeg`, e.g., video denoise filtering. To experiment with values (changes/100 is the scene value in `ffmpeg`): diff --git a/source/_components/binary_sensor.ffmpeg_noise.markdown b/source/_components/binary_sensor.ffmpeg_noise.markdown index 16b1876143..d68ec7d163 100644 --- a/source/_components/binary_sensor.ffmpeg_noise.markdown +++ b/source/_components/binary_sensor.ffmpeg_noise.markdown @@ -39,7 +39,7 @@ Configuration variables: - **duration** (*Optional*): Default 1 second. How long the noise needs to be over the peak to trigger the state. - **reset** (*Optional*): Default 20 seconds. The time to reset the state after no new noise is over the peak. - **extra_arguments** (*Optional*): Extra options to pass to `ffmpeg`, like audio frequency filtering. -- **output** (*Optional*): Allows you to send the audio output of this sensor to an Icecast server or other FFmpeg-supported output, e.g. to stream with Sonos after a state is triggered. +- **output** (*Optional*): Allows you to send the audio output of this sensor to an Icecast server or other FFmpeg-supported output, e.g., to stream with Sonos after a state is triggered. To experiment with values: diff --git a/source/_components/binary_sensor.flic.markdown b/source/_components/binary_sensor.flic.markdown index 558c30b3a0..3767ed7476 100644 --- a/source/_components/binary_sensor.flic.markdown +++ b/source/_components/binary_sensor.flic.markdown @@ -1,7 +1,7 @@ --- layout: page title: Flic Smart Button -description: "Instructions how to integrate flic buttons within Home Assistant." +description: "Instructions on how to integrate flic buttons within Home Assistant." date: 2016-12-02 22:03 sidebar: true comments: false diff --git a/source/_components/binary_sensor.homematic.markdown b/source/_components/binary_sensor.homematic.markdown index 37140c8433..5155aedeea 100644 --- a/source/_components/binary_sensor.homematic.markdown +++ b/source/_components/binary_sensor.homematic.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Homematic Binary Sensor" -description: "Instructions how to integrate binary Homematic sensors within Home Assistant." +description: "Instructions on how to integrate binary Homematic sensors within Home Assistant." date: 2016-06-28 08:30 sidebar: true comments: false diff --git a/source/_components/binary_sensor.http.markdown b/source/_components/binary_sensor.http.markdown index aaddf8a725..c2442aa881 100644 --- a/source/_components/binary_sensor.http.markdown +++ b/source/_components/binary_sensor.http.markdown @@ -1,7 +1,7 @@ --- layout: page title: "HTTP Binary Sensor" -description: "Instructions how to integrate HTTP binary sensors within Home Assistant." +description: "Instructions on how to integrate HTTP binary sensors within Home Assistant." date: 2016-02-05 12:15 sidebar: true comments: false diff --git a/source/_components/binary_sensor.ihc.markdown b/source/_components/binary_sensor.ihc.markdown index 5a3d7769de..da5aac7615 100644 --- a/source/_components/binary_sensor.ihc.markdown +++ b/source/_components/binary_sensor.ihc.markdown @@ -1,7 +1,7 @@ --- layout: page title: "IHC Binary Sensor" -description: "Instructions how to integrate IHC Binary Sensors within Home Assistant." +description: "Instructions on how to integrate IHC Binary Sensors within Home Assistant." date: 2017-11-27 13:35 sidebar: true comments: false diff --git a/source/_components/binary_sensor.insteon_plm.markdown b/source/_components/binary_sensor.insteon_plm.markdown index e2930b02dc..d06c324a44 100644 --- a/source/_components/binary_sensor.insteon_plm.markdown +++ b/source/_components/binary_sensor.insteon_plm.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Insteon PLM Binary Sensor" -description: "Instructions how to setup the Insteon PLM binary sensors locally within Home Assistant." +description: "Instructions on how to setup the Insteon PLM binary sensors locally within Home Assistant." date: 2017-02-19 17:00 sidebar: true comments: false diff --git a/source/_components/binary_sensor.isy994.markdown b/source/_components/binary_sensor.isy994.markdown index 1318ef67d1..2cb7345d0e 100644 --- a/source/_components/binary_sensor.isy994.markdown +++ b/source/_components/binary_sensor.isy994.markdown @@ -1,7 +1,7 @@ --- layout: page title: "ISY994 Binary Sensor" -description: "Instructions how to integrate ISY994 binary sensors into Home Assistant." +description: "Instructions on how to integrate ISY994 binary sensors into Home Assistant." date: 2016-09-03 23:00 sidebar: true comments: false diff --git a/source/_components/binary_sensor.knx.markdown b/source/_components/binary_sensor.knx.markdown index 902d59eded..d51c9effbb 100644 --- a/source/_components/binary_sensor.knx.markdown +++ b/source/_components/binary_sensor.knx.markdown @@ -1,7 +1,7 @@ --- layout: page title: "KNX Binary Sensor" -description: "Instructions how to setup the KNX binary sensors within Home Assistant." +description: "Instructions on how to setup the KNX binary sensors within Home Assistant." date: 2016-07-13 07:00 sidebar: true comments: false @@ -32,7 +32,7 @@ Configuration variables: - **name** (*Optional*): A name for this device used within Home Assistant. - **address**: KNX group address of the binary sensor. -- **device_class** (Optional): HASS device class e.g. "motion". +- **device_class** (Optional): HASS device class e.g., "motion". - **significant_bit** (Optional): Specify which significant bit of the KNX value should be used. Default is 1. - **reset_after** (Optional): Reset back to OFF state after specified milliseconds. diff --git a/source/_components/binary_sensor.mqtt.markdown b/source/_components/binary_sensor.mqtt.markdown index 60b6477ea0..b49b21b365 100644 --- a/source/_components/binary_sensor.mqtt.markdown +++ b/source/_components/binary_sensor.mqtt.markdown @@ -1,7 +1,7 @@ --- layout: page title: "MQTT Binary Sensor" -description: "Instructions how to integrate MQTT binary sensors within Home Assistant." +description: "Instructions on how to integrate MQTT binary sensors within Home Assistant." date: 2015-05-30 23:21 sidebar: true comments: false diff --git a/source/_components/binary_sensor.mysensors.markdown b/source/_components/binary_sensor.mysensors.markdown index 488bb713f6..6138b927af 100644 --- a/source/_components/binary_sensor.mysensors.markdown +++ b/source/_components/binary_sensor.mysensors.markdown @@ -1,7 +1,7 @@ --- layout: page title: "MySensors Binary Sensor" -description: "Instructions how to integrate MySensors binary sensors into Home Assistant." +description: "Instructions on how to integrate MySensors binary sensors into Home Assistant." date: 2016-04-13 14:20 +0100 sidebar: true comments: false diff --git a/source/_components/binary_sensor.mystrom.markdown b/source/_components/binary_sensor.mystrom.markdown index 6d093a2f25..f46df4afc1 100644 --- a/source/_components/binary_sensor.mystrom.markdown +++ b/source/_components/binary_sensor.mystrom.markdown @@ -1,7 +1,7 @@ --- layout: page title: "myStrom Binary Sensor" -description: "Instructions how to integrate myStrom buttons into Home Assistant." +description: "Instructions on how to integrate myStrom buttons into Home Assistant." date: 2017-04-14 08:15 sidebar: true comments: false diff --git a/source/_components/binary_sensor.nest.markdown b/source/_components/binary_sensor.nest.markdown index fa0a264474..4cb47776c6 100644 --- a/source/_components/binary_sensor.nest.markdown +++ b/source/_components/binary_sensor.nest.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Nest Binary Sensor" -description: "Instructions how to integrate Nest binary sensors within Home Assistant." +description: "Instructions on how to integrate Nest binary sensors within Home Assistant." date: 2016-01-26 08:00 sidebar: true comments: false diff --git a/source/_components/binary_sensor.netatmo.markdown b/source/_components/binary_sensor.netatmo.markdown index 57d01bbd08..da2f8ab1fe 100644 --- a/source/_components/binary_sensor.netatmo.markdown +++ b/source/_components/binary_sensor.netatmo.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Netatmo Binary Sensor" -description: "Instructions how to integrate Netatmo binary sensor into Home Assistant." +description: "Instructions on how to integrate Netatmo binary sensor into Home Assistant." date: 2016-09-19 15:10 sidebar: true comments: false diff --git a/source/_components/binary_sensor.octoprint.markdown b/source/_components/binary_sensor.octoprint.markdown index c4bf736c3b..369205ad94 100644 --- a/source/_components/binary_sensor.octoprint.markdown +++ b/source/_components/binary_sensor.octoprint.markdown @@ -1,7 +1,7 @@ --- layout: page title: "OctoPrint Binary Sensor" -description: "Instructions how to integrate OctoPrint binary sensors within Home Assistant." +description: "Instructions on how to integrate OctoPrint binary sensors within Home Assistant." date: 2016-05-05 08:00 sidebar: true comments: false diff --git a/source/_components/binary_sensor.pilight.markdown b/source/_components/binary_sensor.pilight.markdown index 4ccf527392..7d2ccf976b 100644 --- a/source/_components/binary_sensor.pilight.markdown +++ b/source/_components/binary_sensor.pilight.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Pilight Binary Sensor" -description: "Instructions how to integrate Pilight binary sensors within Home Assistant." +description: "Instructions on how to integrate Pilight binary sensors within Home Assistant." date: 2017-03-24 20:41 sidebar: true comments: false diff --git a/source/_components/binary_sensor.ping.markdown b/source/_components/binary_sensor.ping.markdown index d8d8ec310b..b0be627136 100644 --- a/source/_components/binary_sensor.ping.markdown +++ b/source/_components/binary_sensor.ping.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Ping (ICMP) Binary sensor" -description: "Instructions how to integrate Ping (ICMP)-based binary sensors into Home Assistant." +description: "Instructions on how to integrate Ping (ICMP)-based binary sensors into Home Assistant." date: 2017-04-11 08:00 sidebar: true comments: false diff --git a/source/_components/binary_sensor.random.markdown b/source/_components/binary_sensor.random.markdown index ea8de4b90c..d8a0129120 100644 --- a/source/_components/binary_sensor.random.markdown +++ b/source/_components/binary_sensor.random.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Random Binary Sensor" -description: "Instructions how to integrate random state sensors into Home Assistant." +description: "Instructions on how to integrate random state sensors into Home Assistant." date: 2017-10-27 08:00 sidebar: true comments: false diff --git a/source/_components/binary_sensor.raspihats.markdown b/source/_components/binary_sensor.raspihats.markdown index 83f355aaf5..50d031c457 100644 --- a/source/_components/binary_sensor.raspihats.markdown +++ b/source/_components/binary_sensor.raspihats.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Raspihats Binary Sensor" -description: "Instructions how to integrate Raspihats add-on boards for Raspberry Pi into Home Assistant as a binary_sensor." +description: "Instructions on how to integrate Raspihats add-on boards for Raspberry Pi into Home Assistant as a binary_sensor." date: 2017-05-01 04:09 sidebar: true comments: false diff --git a/source/_components/binary_sensor.rest.markdown b/source/_components/binary_sensor.rest.markdown index 4739781d2f..d882e5b406 100644 --- a/source/_components/binary_sensor.rest.markdown +++ b/source/_components/binary_sensor.rest.markdown @@ -1,7 +1,7 @@ --- layout: page title: "RESTful Binary Sensor" -description: "Instructions how to integrate REST binary sensors into Home Assistant." +description: "Instructions on how to integrate REST binary sensors into Home Assistant." date: 2015-12-17 19:10 sidebar: true comments: false diff --git a/source/_components/binary_sensor.rfxtrx.markdown b/source/_components/binary_sensor.rfxtrx.markdown index c676c46cec..296af16317 100644 --- a/source/_components/binary_sensor.rfxtrx.markdown +++ b/source/_components/binary_sensor.rfxtrx.markdown @@ -1,7 +1,7 @@ --- layout: page title: "RFXtrx Binary Sensor" -description: "Instructions how to integrate RFXtrx binary sensors into Home Assistant." +description: "Instructions on how to integrate RFXtrx binary sensors into Home Assistant." date: 2017-03-26 12:45 sidebar: true comments: false diff --git a/source/_components/binary_sensor.rpi_gpio.markdown b/source/_components/binary_sensor.rpi_gpio.markdown index dbae9b1b8d..a59333d82c 100644 --- a/source/_components/binary_sensor.rpi_gpio.markdown +++ b/source/_components/binary_sensor.rpi_gpio.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Raspberry Pi GPIO Binary Sensor" -description: "Instructions how to integrate the GPIO sensor capability of a Raspberry Pi into Home Assistant." +description: "Instructions on how to integrate the GPIO sensor capability of a Raspberry Pi into Home Assistant." date: 2015-08-30 19:00 sidebar: true comments: false diff --git a/source/_components/binary_sensor.rpi_pfio.markdown b/source/_components/binary_sensor.rpi_pfio.markdown index 84404f4d78..d02cfaf2da 100644 --- a/source/_components/binary_sensor.rpi_pfio.markdown +++ b/source/_components/binary_sensor.rpi_pfio.markdown @@ -1,7 +1,7 @@ --- layout: page title: "PiFace Digital I/O Binary Sensor" -description: "Instructions how to integrate the PiFace Digital I/O module into Home Assistant as a binary sensor." +description: "Instructions on how to integrate the PiFace Digital I/O module into Home Assistant as a binary sensor." date: 2016-05-08 15:00 sidebar: true comments: false diff --git a/source/_components/binary_sensor.satel_integra.markdown b/source/_components/binary_sensor.satel_integra.markdown index 84744aaa9e..5d879e4966 100644 --- a/source/_components/binary_sensor.satel_integra.markdown +++ b/source/_components/binary_sensor.satel_integra.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Satel Integra Binary Sensor" -description: "Instructions how to integrate Satel Integra binary sensors into Home Assistant." +description: "Instructions on how to integrate Satel Integra binary sensors into Home Assistant." date: 2017-09-07 13:28 sidebar: true comments: false diff --git a/source/_components/binary_sensor.spc.markdown b/source/_components/binary_sensor.spc.markdown index 507f568dd9..624bebfff2 100644 --- a/source/_components/binary_sensor.spc.markdown +++ b/source/_components/binary_sensor.spc.markdown @@ -1,7 +1,7 @@ --- layout: page title: "SPC Binary Sensor" -description: "Instructions how to integrate Vanderbilt SPC binary sensors into Home Assistant." +description: "Instructions on how to integrate Vanderbilt SPC binary sensors into Home Assistant." date: 2017-05-18 22:05 sidebar: true comments: false diff --git a/source/_components/binary_sensor.tapsaff.markdown b/source/_components/binary_sensor.tapsaff.markdown index b8e8636af6..233596e6bd 100644 --- a/source/_components/binary_sensor.tapsaff.markdown +++ b/source/_components/binary_sensor.tapsaff.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Taps Aff" -description: "Instructions how to use the Taps Aff binary sensor in Home Assistant." +description: "Instructions on how to use the Taps Aff binary sensor in Home Assistant." date: 2017-05-28 18:00 sidebar: true comments: false diff --git a/source/_components/binary_sensor.tellduslive.markdown b/source/_components/binary_sensor.tellduslive.markdown index 2a73bea7f4..fc0b988bbf 100644 --- a/source/_components/binary_sensor.tellduslive.markdown +++ b/source/_components/binary_sensor.tellduslive.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Telldus Binary Sensor" -description: "Instructions how to integrate Telldus Live binary sensors into Home Assistant." +description: "Instructions on how to integrate Telldus Live binary sensors into Home Assistant." date: 2017-10-24 10:09 sidebar: true comments: false diff --git a/source/_components/binary_sensor.template.markdown b/source/_components/binary_sensor.template.markdown index 8a28a6fbff..7cc7af6285 100644 --- a/source/_components/binary_sensor.template.markdown +++ b/source/_components/binary_sensor.template.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Template Binary Sensor" -description: "Instructions how to integrate Template Binary Sensors into Home Assistant." +description: "Instructions on how to integrate Template Binary Sensors into Home Assistant." date: 2016-02-25 15:00 sidebar: true comments: false diff --git a/source/_components/binary_sensor.threshold.markdown b/source/_components/binary_sensor.threshold.markdown index aa12fad99f..21cc02b9fd 100644 --- a/source/_components/binary_sensor.threshold.markdown +++ b/source/_components/binary_sensor.threshold.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Threshold Binary Sensor" -description: "Instructions how to integrate threshold binary sensors into Home Assistant." +description: "Instructions on how to integrate threshold binary sensors into Home Assistant." date: 2016-11-26 12:10 sidebar: true comments: false diff --git a/source/_components/binary_sensor.trend.markdown b/source/_components/binary_sensor.trend.markdown index 5cad94a3b6..ae8e37c55a 100644 --- a/source/_components/binary_sensor.trend.markdown +++ b/source/_components/binary_sensor.trend.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Trend Binary Sensor" -description: "Instructions how to integrate Trend binary sensors into Home Assistant." +description: "Instructions on how to integrate Trend binary sensors into Home Assistant." date: 2016-09-05 10:00 sidebar: true comments: false diff --git a/source/_components/binary_sensor.vera.markdown b/source/_components/binary_sensor.vera.markdown index f28c1978fa..d5e5d9fb14 100644 --- a/source/_components/binary_sensor.vera.markdown +++ b/source/_components/binary_sensor.vera.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Vera Binary Sensor" -description: "Instructions how to integrate Vera binary sensors into Home Assistant." +description: "Instructions on how to integrate Vera binary sensors into Home Assistant." date: 2016-03-26 23:00 sidebar: true comments: false diff --git a/source/_components/binary_sensor.verisure.markdown b/source/_components/binary_sensor.verisure.markdown index 026ad16ab4..1f9b9f0f4e 100644 --- a/source/_components/binary_sensor.verisure.markdown +++ b/source/_components/binary_sensor.verisure.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Verisure Binary Sensor" -description: "Instructions how to integrate Verisure binary sensors into Home Assistant." +description: "Instructions on how to integrate Verisure binary sensors into Home Assistant." date: 2016-02-23 21:31 +0100 sidebar: true comments: false diff --git a/source/_components/binary_sensor.wink.markdown b/source/_components/binary_sensor.wink.markdown index 862a6b258e..1d23f5bf7c 100644 --- a/source/_components/binary_sensor.wink.markdown +++ b/source/_components/binary_sensor.wink.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Wink Binary Sensor" -description: "Instructions how to setup the Wink binary sensors within Home Assistant." +description: "Instructions on how to setup the Wink binary sensors within Home Assistant." date: 2015-01-20 22:36 sidebar: true comments: false diff --git a/source/_components/binary_sensor.xiaomi_aqara.markdown b/source/_components/binary_sensor.xiaomi_aqara.markdown index a43874ff55..6f33659f78 100644 --- a/source/_components/binary_sensor.xiaomi_aqara.markdown +++ b/source/_components/binary_sensor.xiaomi_aqara.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Xiaomi Binary Sensor" -description: "Instructions how to setup the Xiaomi binary sensors within Home Assistant." +description: "Instructions on how to setup the Xiaomi binary sensors within Home Assistant." date: 2017-07-21 16:34 sidebar: true comments: false diff --git a/source/_components/binary_sensor.zha.markdown b/source/_components/binary_sensor.zha.markdown index 755e4396ed..df5853d670 100644 --- a/source/_components/binary_sensor.zha.markdown +++ b/source/_components/binary_sensor.zha.markdown @@ -1,7 +1,7 @@ --- layout: page title: "ZigBee Home Automation Binary Sensor" -description: "Instructions how to setup ZigBee Home Automation binary sensors within Home Assistant." +description: "Instructions on how to setup ZigBee Home Automation binary sensors within Home Assistant." date: 2017-02-22 00:00 sidebar: true comments: false diff --git a/source/_components/binary_sensor.zwave.markdown b/source/_components/binary_sensor.zwave.markdown index 233411d4f2..85c4cc30bb 100644 --- a/source/_components/binary_sensor.zwave.markdown +++ b/source/_components/binary_sensor.zwave.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Z-Wave Binary Sensor" -description: "Instructions how to setup the Z-Wave binary sensors within Home Assistant." +description: "Instructions on how to setup the Z-Wave binary sensors within Home Assistant." date: 2016-02-22 07:00 sidebar: true comments: false diff --git a/source/_components/bloomsky.markdown b/source/_components/bloomsky.markdown index 25ab683a22..90ebd17355 100644 --- a/source/_components/bloomsky.markdown +++ b/source/_components/bloomsky.markdown @@ -1,7 +1,7 @@ --- layout: page title: "BloomSky" -description: "Instructions how to integrate the BloomSky within Home Assistant." +description: "Instructions on how to integrate the BloomSky within Home Assistant." date: 2016-02-03 20:00 sidebar: true comments: false diff --git a/source/_components/browser.markdown b/source/_components/browser.markdown index c5fa4b424e..6325fef367 100644 --- a/source/_components/browser.markdown +++ b/source/_components/browser.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Browser" -description: "Instructions how to setup the browser component with Home Assistant." +description: "Instructions on how to setup the browser component with Home Assistant." date: 2015-01-24 14:39 sidebar: true comments: false diff --git a/source/_components/calendar.google.markdown b/source/_components/calendar.google.markdown index acad749e7c..4e7ea750b8 100644 --- a/source/_components/calendar.google.markdown +++ b/source/_components/calendar.google.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Google Calendar Event" -description: "Instructions how to use Google Calendars in Home Assistant." +description: "Instructions on how to use Google Calendars in Home Assistant." date: 2015-05-08 17:15 sidebar: true comments: false diff --git a/source/_components/calendar.markdown b/source/_components/calendar.markdown index f18e94902c..4b69b5e6fe 100644 --- a/source/_components/calendar.markdown +++ b/source/_components/calendar.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Calendar" -description: "Instructions how to integrate calendars within Home Assistant." +description: "Instructions on how to integrate calendars within Home Assistant." date: 2016-11-19 08:36 sidebar: true comments: false diff --git a/source/_components/camera.abode.markdown b/source/_components/camera.abode.markdown index a95b6d2fcf..2aa3da2313 100644 --- a/source/_components/camera.abode.markdown +++ b/source/_components/camera.abode.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Abode Camera" -description: "Instructions how to integrate Abode cameras into Home Assistant." +description: "Instructions on how to integrate Abode cameras into Home Assistant." date: 2017-08-26 13:28 sidebar: true comments: false diff --git a/source/_components/camera.amcrest.markdown b/source/_components/camera.amcrest.markdown index 2c1a042c87..73a6ca444f 100644 --- a/source/_components/camera.amcrest.markdown +++ b/source/_components/camera.amcrest.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Amcrest IP Camera" -description: "Instructions how to integrate Amcrest IP cameras within Home Assistant." +description: "Instructions on how to integrate Amcrest IP cameras within Home Assistant." date: 2016-11-24 10:00 sidebar: true comments: false diff --git a/source/_components/camera.android_ip_webcam.markdown b/source/_components/camera.android_ip_webcam.markdown index 04c6e41d8e..8aa3455faa 100644 --- a/source/_components/camera.android_ip_webcam.markdown +++ b/source/_components/camera.android_ip_webcam.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Android IP Webcam Camera" -description: "Instructions how to integrate Android IP Webcam cameras within Home Assistant." +description: "Instructions on how to integrate Android IP Webcam cameras within Home Assistant." date: 2015-07-11 0:36 sidebar: true comments: false diff --git a/source/_components/camera.arlo.markdown b/source/_components/camera.arlo.markdown index 1d66a90bbf..ac53cd009a 100644 --- a/source/_components/camera.arlo.markdown +++ b/source/_components/camera.arlo.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Arlo Camera" -description: "Instructions how to integrate your Netgear Arlo cameras within Home Assistant." +description: "Instructions on how to integrate your Netgear Arlo cameras within Home Assistant." date: 2016-05-30 10:00 sidebar: true comments: false diff --git a/source/_components/camera.axis.markdown b/source/_components/camera.axis.markdown index 23695c7905..ec725b06ec 100644 --- a/source/_components/camera.axis.markdown +++ b/source/_components/camera.axis.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Axis Camera" -description: "Instructions how to setup Axis cameras within Home Assistant." +description: "Instructions on how to setup Axis cameras within Home Assistant." date: 2017-05-01 19:09 sidebar: true comments: false diff --git a/source/_components/camera.bloomsky.markdown b/source/_components/camera.bloomsky.markdown index 8661690eb6..bd6f8a58b9 100644 --- a/source/_components/camera.bloomsky.markdown +++ b/source/_components/camera.bloomsky.markdown @@ -1,7 +1,7 @@ --- layout: page title: "BloomSky Camera" -description: "Instructions how to integrate the BloomSky camera within Home Assistant." +description: "Instructions on how to integrate the BloomSky camera within Home Assistant." date: 2016-02-03 20:00 sidebar: true comments: false diff --git a/source/_components/camera.canary.markdown b/source/_components/camera.canary.markdown index 3e7eac2e79..8e5f07f461 100644 --- a/source/_components/camera.canary.markdown +++ b/source/_components/camera.canary.markdown @@ -26,7 +26,7 @@ camera: {% configuration %} ffmpeg_arguments: - description: Extra options to pass to `ffmpeg`, e.g. image quality or video filter options. More details in [FFmpeg component](/components/ffmpeg). + description: Extra options to pass to `ffmpeg`, e.g., image quality or video filter options. More details in [FFmpeg component](/components/ffmpeg). required: false type: string {% endconfiguration %} diff --git a/source/_components/camera.dispatcher.markdown b/source/_components/camera.dispatcher.markdown index 2672c6c48e..26eb74febc 100644 --- a/source/_components/camera.dispatcher.markdown +++ b/source/_components/camera.dispatcher.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Dispatcher IP Camera" -description: "Instructions how to integrate internal dispatcher cameras within Home Assistant." +description: "Instructions on how to integrate internal dispatcher cameras within Home Assistant." date: 2017-03-08 00:00 sidebar: true comments: false diff --git a/source/_components/camera.doorbird.markdown b/source/_components/camera.doorbird.markdown index d96a1ebe9b..ce23d94672 100644 --- a/source/_components/camera.doorbird.markdown +++ b/source/_components/camera.doorbird.markdown @@ -1,7 +1,7 @@ --- layout: page title: "DoorBird Camera" -description: "Instructions how to integrate DoorBird video doorbell images into Home Assistant." +description: "Instructions on how to integrate DoorBird video doorbell images into Home Assistant." date: 2017-08-06 11:30 sidebar: true comments: false diff --git a/source/_components/camera.ffmpeg.markdown b/source/_components/camera.ffmpeg.markdown index 86e6355c8d..481c835a15 100644 --- a/source/_components/camera.ffmpeg.markdown +++ b/source/_components/camera.ffmpeg.markdown @@ -29,7 +29,7 @@ Configuration variables: - **input** (*Required*): An FFmpeg-compatible input file, stream, or feed. - **name** (*Optional*): Override the name of your camera. -- **extra_arguments** (*Optional*): Extra options to pass to `ffmpeg`, e.g. image quality or video filter options. +- **extra_arguments** (*Optional*): Extra options to pass to `ffmpeg`, e.g., image quality or video filter options. ### {% linkable_title Image quality %} diff --git a/source/_components/camera.foscam.markdown b/source/_components/camera.foscam.markdown index ea90a82984..2003ecaa25 100644 --- a/source/_components/camera.foscam.markdown +++ b/source/_components/camera.foscam.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Foscam IP Camera" -description: "Instructions how to integrate Foscam IP cameras within Home Assistant." +description: "Instructions on how to integrate Foscam IP cameras within Home Assistant." date: 2015-09-17 08:01 sidebar: true comments: false diff --git a/source/_components/camera.generic.markdown b/source/_components/camera.generic.markdown index 71a16ba40e..bec1ec5ffe 100644 --- a/source/_components/camera.generic.markdown +++ b/source/_components/camera.generic.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Generic IP Camera" -description: "Instructions how to integrate IP cameras within Home Assistant." +description: "Instructions on how to integrate IP cameras within Home Assistant." date: 2015-07-11 0:36 sidebar: true comments: false diff --git a/source/_components/camera.local_file.markdown b/source/_components/camera.local_file.markdown index 6dade4b4c5..8175ee35db 100644 --- a/source/_components/camera.local_file.markdown +++ b/source/_components/camera.local_file.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Local File" -description: "Instructions how to use Local File as a Camera within Home Assistant." +description: "Instructions on how to use Local File as a Camera within Home Assistant." date: 2016-06-12 17:00 sidebar: true comments: false diff --git a/source/_components/camera.markdown b/source/_components/camera.markdown index 2d92253993..8d3c12c7e6 100644 --- a/source/_components/camera.markdown +++ b/source/_components/camera.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Camera" -description: "Instructions how to integrate cameras within Home Assistant." +description: "Instructions on how to integrate cameras within Home Assistant." date: 2015-11-09 08:36 sidebar: true comments: false diff --git a/source/_components/camera.mjpeg.markdown b/source/_components/camera.mjpeg.markdown index 6a01c70872..de03528200 100644 --- a/source/_components/camera.mjpeg.markdown +++ b/source/_components/camera.mjpeg.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Generic MJPEG IP Camera" -description: "Instructions how to integrate IP cameras within Home Assistant." +description: "Instructions on how to integrate IP cameras within Home Assistant." date: 2015-11-09 08:36 sidebar: true comments: false diff --git a/source/_components/camera.mqtt.markdown b/source/_components/camera.mqtt.markdown index 852140ddf9..f0e903a37a 100644 --- a/source/_components/camera.mqtt.markdown +++ b/source/_components/camera.mqtt.markdown @@ -1,7 +1,7 @@ --- layout: page title: "MQTT Camera" -description: "Instructions how to use an MQTT image message as a Camera within Home Assistant." +description: "Instructions on how to use an MQTT image message as a Camera within Home Assistant." date: 2017-04-14 00:45 sidebar: true comments: false diff --git a/source/_components/camera.neato.markdown b/source/_components/camera.neato.markdown index 4fccb0b413..3b959c0bc3 100644 --- a/source/_components/camera.neato.markdown +++ b/source/_components/camera.neato.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Neato Camera" -description: "Instructions how to setup the Neato cleaning maps within Home Assistant." +description: "Instructions on how to setup the Neato cleaning maps within Home Assistant." date: 2017-04-05 13:10 sidebar: true comments: false diff --git a/source/_components/camera.nest.markdown b/source/_components/camera.nest.markdown index e597fcb19d..607a88c516 100644 --- a/source/_components/camera.nest.markdown +++ b/source/_components/camera.nest.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Nest Camera" -description: "Instructions how to integrate Nest cameras into Home Assistant." +description: "Instructions on how to integrate Nest cameras into Home Assistant." date: 2016-12-03 08:10 sidebar: true comments: false diff --git a/source/_components/camera.netatmo.markdown b/source/_components/camera.netatmo.markdown index 5ad8ebe38e..e452d26b41 100644 --- a/source/_components/camera.netatmo.markdown +++ b/source/_components/camera.netatmo.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Netatmo Camera" -description: "Instructions how to integrate Netatmo cameras into Home Assistant." +description: "Instructions on how to integrate Netatmo cameras into Home Assistant." date: 2016-06-02 08:10 sidebar: true comments: false diff --git a/source/_components/camera.onvif.markdown b/source/_components/camera.onvif.markdown index 6b772dfda6..ed01e31d37 100644 --- a/source/_components/camera.onvif.markdown +++ b/source/_components/camera.onvif.markdown @@ -32,7 +32,7 @@ Configuration variables: - **password** (*Optional*): The password for the camera. - **port** (*Optional*): The port for the camera. This defaults to 5000. - **profile** (*Optional*): Video profile that will be used to obtain the stream. This defaults to 0. More details below. -- **extra_arguments** (*Optional*): Extra options to pass to `ffmpeg`, e.g. image quality or video filter options. More details in [FFmpeg component](/components/ffmpeg). +- **extra_arguments** (*Optional*): Extra options to pass to `ffmpeg`, e.g., image quality or video filter options. More details in [FFmpeg component](/components/ffmpeg). Most of the Onvif cameras support more than one audio/video Profile. Each profile provides different image quality. Usually, the first profile has the highest quality, and it is the profile used by default. However, you may want to use a lower quality image. One of the reasons may be that your hardware isn't able to render the highest quality image in real-time - especially when running on Raspberry Pi. Therefore you can choose which profile do you want to use by setting in config `profile` variable. diff --git a/source/_components/camera.proxy.markdown b/source/_components/camera.proxy.markdown index 41719935d3..f8e51fc132 100644 --- a/source/_components/camera.proxy.markdown +++ b/source/_components/camera.proxy.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Camera Proxy" -description: "Instructions how to integrate a camera proxy within Home Assistant." +description: "Instructions on how to integrate a camera proxy within Home Assistant." date: 2018-03-08 19:00 sidebar: true comments: false diff --git a/source/_components/camera.rpi_camera.markdown b/source/_components/camera.rpi_camera.markdown index 7dd981077f..2033dc5d28 100644 --- a/source/_components/camera.rpi_camera.markdown +++ b/source/_components/camera.rpi_camera.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Raspberry Pi Camera" -description: "Instructions how to integrate Raspberry Pi within Home Assistant." +description: "Instructions on how to integrate Raspberry Pi within Home Assistant." date: 2016-04-08 10:00 sidebar: true comments: false diff --git a/source/_components/camera.synology.markdown b/source/_components/camera.synology.markdown index 258bc1e832..d831435832 100644 --- a/source/_components/camera.synology.markdown +++ b/source/_components/camera.synology.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Synology Camera" -description: "Instructions how to integrate Synology Surveillance Station cameras within Home Assistant." +description: "Instructions on how to integrate Synology Surveillance Station cameras within Home Assistant." date: 2016-10-13 08:01 sidebar: true comments: false diff --git a/source/_components/camera.uvc.markdown b/source/_components/camera.uvc.markdown index 367f4472ca..02743bda45 100644 --- a/source/_components/camera.uvc.markdown +++ b/source/_components/camera.uvc.markdown @@ -1,7 +1,7 @@ --- layout: page title: "UniFi Video Camera" -description: "Instructions how to integrate UVC cameras within Home Assistant." +description: "Instructions on how to integrate UVC cameras within Home Assistant." date: 2016-02-07 10:00 sidebar: true comments: false diff --git a/source/_components/camera.verisure.markdown b/source/_components/camera.verisure.markdown index e96a8725f7..35b4c25e4e 100644 --- a/source/_components/camera.verisure.markdown +++ b/source/_components/camera.verisure.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Verisure Camera" -description: "Instructions how to setup the Verisure cameras within Home Assistant." +description: "Instructions on how to setup the Verisure cameras within Home Assistant." date: 2016-10-22 09:00 sidebar: true comments: false diff --git a/source/_components/camera.yi.markdown b/source/_components/camera.yi.markdown index 052e3b26d6..61576a4772 100644 --- a/source/_components/camera.yi.markdown +++ b/source/_components/camera.yi.markdown @@ -68,7 +68,7 @@ Configuration variables: - **password** (*Required*): The password to the FTP server on the camera (from above). - **path** (*Optional*): The path to the raw MP4 files. Defaults to `/tmp/sd/record`. - **username** (*Optional*): The user that can access the FTP server. Defaults to `root`. -- **ffmpeg_arguments** (*Optional*): Extra options to pass to `ffmpeg` (e.g. image quality or video filter options). +- **ffmpeg_arguments** (*Optional*): Extra options to pass to `ffmpeg` (e.g., image quality or video filter options). ## {% linkable_title Image quality %} diff --git a/source/_components/climate.ecobee.markdown b/source/_components/climate.ecobee.markdown index e8711168e7..b92b001f37 100644 --- a/source/_components/climate.ecobee.markdown +++ b/source/_components/climate.ecobee.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Ecobee Thermostat" -description: "Instructions how to setup the Ecobee thermostats within Home Assistant." +description: "Instructions on how to setup the Ecobee thermostats within Home Assistant." date: 2016-08-26 18:00 sidebar: true comments: false diff --git a/source/_components/climate.econet.markdown b/source/_components/climate.econet.markdown index 3feb4aa643..704c6ebf0e 100644 --- a/source/_components/climate.econet.markdown +++ b/source/_components/climate.econet.markdown @@ -1,7 +1,7 @@ --- layout: page title: "EcoNet water heater" -description: "Instructions how to integrate Rheem EcoNet water heaters into Home Assistant." +description: "Instructions on how to integrate Rheem EcoNet water heaters into Home Assistant." date: 2017-12-28 14:51 sidebar: true comments: false diff --git a/source/_components/climate.eq3btsmart.markdown b/source/_components/climate.eq3btsmart.markdown index 5cfa52ae40..ce833566ff 100644 --- a/source/_components/climate.eq3btsmart.markdown +++ b/source/_components/climate.eq3btsmart.markdown @@ -1,7 +1,7 @@ --- layout: page title: "EQ3 Bluetooth Smart Thermostats" -description: "Instructions how to integrate EQ3 Bluetooth Smart Thermostats into Home Assistant." +description: "Instructions on how to integrate EQ3 Bluetooth Smart Thermostats into Home Assistant." date: 2016-04-18 22:00 sidebar: true comments: false diff --git a/source/_components/climate.flexit.markdown b/source/_components/climate.flexit.markdown index 078b840985..0281b50756 100644 --- a/source/_components/climate.flexit.markdown +++ b/source/_components/climate.flexit.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Flexit A/C controller" -description: "Instructions how to integrate Flexit A/C unit into Home Assistant." +description: "Instructions on how to integrate Flexit A/C unit into Home Assistant." date: 2017-06-02 16:30 +0200 sidebar: true comments: false diff --git a/source/_components/climate.heatmiser.markdown b/source/_components/climate.heatmiser.markdown index b772e9923b..b1478034e9 100644 --- a/source/_components/climate.heatmiser.markdown +++ b/source/_components/climate.heatmiser.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Heatmiser Thermostat" -description: "Instructions how to integrate Heatmiser thermostats within Home Assistant." +description: "Instructions on how to integrate Heatmiser thermostats within Home Assistant." date: 2015-12-11 12:35 sidebar: true comments: false diff --git a/source/_components/climate.homematic.markdown b/source/_components/climate.homematic.markdown index ac5458d592..86e38fdb49 100644 --- a/source/_components/climate.homematic.markdown +++ b/source/_components/climate.homematic.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Homematic Thermostats" -description: "Instructions how to integrate Homematic thermostats within Home Assistant." +description: "Instructions on how to integrate Homematic thermostats within Home Assistant." date: 2016-06-28 08:30 sidebar: true comments: false diff --git a/source/_components/climate.honeywell.markdown b/source/_components/climate.honeywell.markdown index 8104a6a77f..855d009cda 100644 --- a/source/_components/climate.honeywell.markdown +++ b/source/_components/climate.honeywell.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Honeywell Thermostat" -description: "Instructions how to integrate Honeywell thermostats within Home Assistant." +description: "Instructions on how to integrate Honeywell thermostats within Home Assistant." date: 2016-02-07 22:01 sidebar: true comments: false diff --git a/source/_components/climate.markdown b/source/_components/climate.markdown index 53cfc08013..fd41b437cd 100644 --- a/source/_components/climate.markdown +++ b/source/_components/climate.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Climate" -description: "Instructions how to setup climate control devices within Home Assistant." +description: "Instructions on how to setup climate control devices within Home Assistant." date: 2016-08-26 19:00 sidebar: true comments: false diff --git a/source/_components/climate.mqtt.markdown b/source/_components/climate.mqtt.markdown index 504610dea4..958974869a 100644 --- a/source/_components/climate.mqtt.markdown +++ b/source/_components/climate.mqtt.markdown @@ -1,7 +1,7 @@ --- layout: page title: "MQTT HVAC" -description: "Instructions how to integrate MQTT HVAC into Home Assistant." +description: "Instructions on how to integrate MQTT HVAC into Home Assistant." date: 2017-07-31 19:59 sidebar: true comments: false @@ -178,11 +178,11 @@ aux_state_template: #### {% linkable_title Optimistic mode %} -If a property works in *optimistic mode* (when the corresponding state topic is not set), home assistant will assume that any state changes published to the command topics did work and change the internal state of the entity immediately after publishing to the command topic. If it does not work in optimistic mode, the internal state of the entity is only updated when the requested update is confirmed by the device through the state topic. +If a property works in *optimistic mode* (when the corresponding state topic is not set), Home Assistant will assume that any state changes published to the command topics did work and change the internal state of the entity immediately after publishing to the command topic. If it does not work in optimistic mode, the internal state of the entity is only updated when the requested update is confirmed by the device through the state topic. #### {% linkable_title Using Templates %} -For all `*_state_topic`s, a template can be specified that will be used to render the incoming payloads on these topics. Also, a default template that applies to all state topis can be specified as `value_template`. This can be useful if you received payloads are e.g. in JSON format. Since in JSON, a quoted string (e.g. `"foo"`) is just a string, this can also be used for unquoting. +For all `*_state_topic`s, a template can be specified that will be used to render the incoming payloads on these topics. Also, a default template that applies to all state topis can be specified as `value_template`. This can be useful if you received payloads are e.g., in JSON format. Since in JSON, a quoted string (e.g., `"foo"`) is just a string, this can also be used for unquoting. Say you receive the operation mode `"auto"` via your `mode_state_topic`, but the mode is actually called just `auto`, here's what you could do: diff --git a/source/_components/climate.mysensors.markdown b/source/_components/climate.mysensors.markdown index a61fae33f9..6f5379449b 100644 --- a/source/_components/climate.mysensors.markdown +++ b/source/_components/climate.mysensors.markdown @@ -1,7 +1,7 @@ --- layout: page title: "MySensors HVAC" -description: "Instructions how to integrate MySensors climate into Home Assistant." +description: "Instructions on how to integrate MySensors climate into Home Assistant." date: 2016-10-01 15:00 +0200 sidebar: true comments: false diff --git a/source/_components/climate.nest.markdown b/source/_components/climate.nest.markdown index be9adf6d41..4d99423734 100644 --- a/source/_components/climate.nest.markdown +++ b/source/_components/climate.nest.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Nest Thermostat" -description: "Instructions how to integrate Nest thermostats within Home Assistant." +description: "Instructions on how to integrate Nest thermostats within Home Assistant." date: 2015-03-23 19:59 sidebar: true comments: false diff --git a/source/_components/climate.netatmo.markdown b/source/_components/climate.netatmo.markdown index 72c4f0de00..a90a1f4353 100644 --- a/source/_components/climate.netatmo.markdown +++ b/source/_components/climate.netatmo.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Netatmo Thermostat" -description: "Instructions how to integrate Netatmo thermostat into Home Assistant." +description: "Instructions on how to integrate Netatmo thermostat into Home Assistant." date: 2016-10-11 08:10 sidebar: true comments: false diff --git a/source/_components/climate.nuheat.markdown b/source/_components/climate.nuheat.markdown index 51ffd6fee4..46a8e84c5a 100644 --- a/source/_components/climate.nuheat.markdown +++ b/source/_components/climate.nuheat.markdown @@ -1,7 +1,7 @@ --- layout: page title: "NuHeat Thermostat" -description: "Instructions how to integrate your NuHeat Signature thermostats within Home Assistant." +description: "Instructions on how to integrate your NuHeat Signature thermostats within Home Assistant." date: 2017-11-11 18:00 sidebar: true comments: false diff --git a/source/_components/climate.oem.markdown b/source/_components/climate.oem.markdown index be9b8cda21..2b7b401229 100644 --- a/source/_components/climate.oem.markdown +++ b/source/_components/climate.oem.markdown @@ -1,7 +1,7 @@ --- layout: page title: "OpenEnergyMonitor WiFi Thermostat" -description: "Instructions how to integrate an OpenEnergyMonitor thermostat with Home Assistant." +description: "Instructions on how to integrate an OpenEnergyMonitor thermostat with Home Assistant." date: 2017-01-27 11:15 sidebar: true comments: false diff --git a/source/_components/climate.proliphix.markdown b/source/_components/climate.proliphix.markdown index 74227c0a98..b089ef586d 100644 --- a/source/_components/climate.proliphix.markdown +++ b/source/_components/climate.proliphix.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Proliphix Thermostat" -description: "Instructions how to integrate Proliphix thermostats within Home Assistant." +description: "Instructions on how to integrate Proliphix thermostats within Home Assistant." date: 2016-01-15 08:00 sidebar: true comments: false diff --git a/source/_components/climate.radiotherm.markdown b/source/_components/climate.radiotherm.markdown index f3cf3bd919..f4d08db107 100644 --- a/source/_components/climate.radiotherm.markdown +++ b/source/_components/climate.radiotherm.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Radio Thermostat (3M Filtrete) Thermostat" -description: "Instructions how to integrate Radio Thermostat (3M Filtrete) thermostats within Home Assistant." +description: "Instructions on how to integrate Radio Thermostat (3M Filtrete) thermostats within Home Assistant." date: 2015-10-18 17:15 sidebar: true comments: false diff --git a/source/_components/climate.sensibo.markdown b/source/_components/climate.sensibo.markdown index 9b9771bc42..02003d4aa6 100644 --- a/source/_components/climate.sensibo.markdown +++ b/source/_components/climate.sensibo.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Sensibo A/C controller" -description: "Instructions how to integrate Sensibo A/C controller into Home Assistant." +description: "Instructions on how to integrate Sensibo A/C controller into Home Assistant." date: 2017-04-01 15:00 +0200 sidebar: true comments: false diff --git a/source/_components/climate.toon.markdown b/source/_components/climate.toon.markdown index 57d8708aa3..61e4258847 100644 --- a/source/_components/climate.toon.markdown +++ b/source/_components/climate.toon.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Toon Thermostat" -description: "Instructions how to integrate Toon thermostats within Home Assistant." +description: "Instructions on how to integrate Toon thermostats within Home Assistant." date: 2017-10-22 12:00 sidebar: true comments: false diff --git a/source/_components/climate.touchline.markdown b/source/_components/climate.touchline.markdown index ebc48a9df8..0f7f271946 100644 --- a/source/_components/climate.touchline.markdown +++ b/source/_components/climate.touchline.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Roth Touchline" -description: "Instructions how to integrate Roth Touchline within Home Assistant." +description: "Instructions on how to integrate Roth Touchline within Home Assistant." date: 2018-01-03 12:35 sidebar: true comments: false diff --git a/source/_components/climate.vera.markdown b/source/_components/climate.vera.markdown index bc8a9fdc58..c46b8fdff9 100644 --- a/source/_components/climate.vera.markdown +++ b/source/_components/climate.vera.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Vera Thermostat" -description: "Instructions how to integrate Vera thermostats into Home Assistant." +description: "Instructions on how to integrate Vera thermostats into Home Assistant." date: 2016-09-19 21:00 sidebar: true comments: false diff --git a/source/_components/climate.wink.markdown b/source/_components/climate.wink.markdown index 3a41d2c81d..be8623cb08 100644 --- a/source/_components/climate.wink.markdown +++ b/source/_components/climate.wink.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Wink Climate" -description: "Instructions how to setup the Wink climate devices within Home Assistant." +description: "Instructions on how to setup the Wink climate devices within Home Assistant." date: 2016-11-01 22:36 sidebar: true comments: false diff --git a/source/_components/climate.zwave.markdown b/source/_components/climate.zwave.markdown index 0669e0dfc6..e1b20babc6 100644 --- a/source/_components/climate.zwave.markdown +++ b/source/_components/climate.zwave.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Z-Wave Climate" -description: "Instructions how to setup the Z-Wave thermostat or HVAC within Home Assistant." +description: "Instructions on how to setup the Z-Wave thermostat or HVAC within Home Assistant." date: 2016-04-03 9:52 sidebar: true comments: false diff --git a/source/_components/comfoconnect.markdown b/source/_components/comfoconnect.markdown index fcce2b619f..7394042b84 100644 --- a/source/_components/comfoconnect.markdown +++ b/source/_components/comfoconnect.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Zehnder ComfoAir Q Ventilation" -description: "Instructions how to integrate Zehnder ComfoAir Q350/450/600 ventilation systems into Home Assistant." +description: "Instructions on how to integrate Zehnder ComfoAir Q350/450/600 ventilation systems into Home Assistant." date: 2017-06-28 18:00 sidebar: true comments: false diff --git a/source/_components/config.markdown b/source/_components/config.markdown index 514840e7f7..29aa9ce2ae 100644 --- a/source/_components/config.markdown +++ b/source/_components/config.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Config" -description: "Instructions how to setup the configuration panel for Home Assistant." +description: "Instructions on how to setup the configuration panel for Home Assistant." date: 2017-02-24 20:00 sidebar: true comments: false diff --git a/source/_components/configurator.markdown b/source/_components/configurator.markdown index 3d9661d50b..9cabdccbb3 100644 --- a/source/_components/configurator.markdown +++ b/source/_components/configurator.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Configurator" -description: "Instructions how to integrate the configurator in your components." +description: "Instructions on how to integrate the configurator in your components." date: 2015-03-15 00:51 sidebar: true comments: false diff --git a/source/_components/conversation.markdown b/source/_components/conversation.markdown index c4ae729c0f..d9dff87aa5 100644 --- a/source/_components/conversation.markdown +++ b/source/_components/conversation.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Conversation" -description: "Instructions how to have conversations with your Home Assistant." +description: "Instructions on how to have conversations with your Home Assistant." date: 2015-03-15 00:39 sidebar: true comments: false diff --git a/source/_components/counter.markdown b/source/_components/counter.markdown index b54dcc4385..f181d4755a 100644 --- a/source/_components/counter.markdown +++ b/source/_components/counter.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Counter" -description: "Instructions how to integrate counters into Home Assistant." +description: "Instructions on how to integrate counters into Home Assistant." date: 2017-08-26 06:00 sidebar: true comments: false diff --git a/source/_components/cover.abode.markdown b/source/_components/cover.abode.markdown index e67998bf0b..a80303a756 100644 --- a/source/_components/cover.abode.markdown +++ b/source/_components/cover.abode.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Abode Cover" -description: "Instructions how to integrate Abode covers into Home Assistant." +description: "Instructions on how to integrate Abode covers into Home Assistant." date: 2017-08-26 13:28 sidebar: true comments: false diff --git a/source/_components/cover.garadget.markdown b/source/_components/cover.garadget.markdown index 6ae25d44e8..04a8fcaa6c 100644 --- a/source/_components/cover.garadget.markdown +++ b/source/_components/cover.garadget.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Garadget Cover" -description: "Instructions how to integrate Garadget covers within Home Assistant." +description: "Instructions on how to integrate Garadget covers within Home Assistant." date: 2016-10-24 14:25 sidebar: true comments: false diff --git a/source/_components/cover.homematic.markdown b/source/_components/cover.homematic.markdown index 9ac3fa4aca..e5f3a8930e 100644 --- a/source/_components/cover.homematic.markdown +++ b/source/_components/cover.homematic.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Homematic Cover" -description: "Instructions how to integrate Homematic covers within Home Assistant." +description: "Instructions on how to integrate Homematic covers within Home Assistant." date: 2016-08-24 14:25 sidebar: true comments: false diff --git a/source/_components/cover.isy994.markdown b/source/_components/cover.isy994.markdown index 95aed3d3ba..929afac31d 100644 --- a/source/_components/cover.isy994.markdown +++ b/source/_components/cover.isy994.markdown @@ -1,7 +1,7 @@ --- layout: page title: "ISY994 Cover" -description: "Instructions how to integrate ISY994 covers into Home Assistant." +description: "Instructions on how to integrate ISY994 covers into Home Assistant." date: 2016-09-03 23:00 sidebar: true comments: false diff --git a/source/_components/cover.lutron.markdown b/source/_components/cover.lutron.markdown index 50cb5b1ef9..ffd2c100b2 100644 --- a/source/_components/cover.lutron.markdown +++ b/source/_components/cover.lutron.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Lutron Cover" -description: "Instructions how to setup the Lutron shades within Home Assistant." +description: "Instructions on how to setup the Lutron shades within Home Assistant." date: 2018-01-11 20:00 sidebar: true comments: false diff --git a/source/_components/cover.lutron_caseta.markdown b/source/_components/cover.lutron_caseta.markdown index 713c454472..ee64257f1a 100644 --- a/source/_components/cover.lutron_caseta.markdown +++ b/source/_components/cover.lutron_caseta.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Lutron Caseta Cover" -description: "Instructions how to setup the Lutron Caseta covers within Home Assistant." +description: "Instructions on how to setup the Lutron Caseta covers within Home Assistant." date: 2017-05-20 09:00 sidebar: true comments: false diff --git a/source/_components/cover.markdown b/source/_components/cover.markdown index 8024b67a3b..a530768096 100644 --- a/source/_components/cover.markdown +++ b/source/_components/cover.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Covers" -description: "Instructions how to integrate covers into Home Assistant." +description: "Instructions on how to integrate covers into Home Assistant." date: 2016-06-28 17:30 sidebar: true comments: false diff --git a/source/_components/cover.mqtt.markdown b/source/_components/cover.mqtt.markdown index f06204cfaa..8af2d728aa 100755 --- a/source/_components/cover.mqtt.markdown +++ b/source/_components/cover.mqtt.markdown @@ -1,7 +1,7 @@ --- layout: page title: "MQTT Cover" -description: "Instructions how to integrate MQTT covers into Home Assistant." +description: "Instructions on how to integrate MQTT covers into Home Assistant." date: 2016-09-28 17:30 sidebar: true comments: false diff --git a/source/_components/cover.myq.markdown b/source/_components/cover.myq.markdown index 405065d88a..84335655d9 100644 --- a/source/_components/cover.myq.markdown +++ b/source/_components/cover.myq.markdown @@ -1,7 +1,7 @@ --- layout: page title: "MyQ Cover" -description: "Instructions how to integrate MyQ-Enabled garage door covers into Home Assistant." +description: "Instructions on how to integrate MyQ-Enabled garage door covers into Home Assistant." date: 2017-02-14 14:21 sidebar: true comments: false diff --git a/source/_components/cover.mysensors.markdown b/source/_components/cover.mysensors.markdown index c94ec4f57f..b4ded3e1b4 100644 --- a/source/_components/cover.mysensors.markdown +++ b/source/_components/cover.mysensors.markdown @@ -1,7 +1,7 @@ --- layout: page title: "MySensors Cover" -description: "Instructions how to integrate MySensors covers into Home Assistant." +description: "Instructions on how to integrate MySensors covers into Home Assistant." date: 2016-10-01 15:00 +0200 sidebar: true comments: false diff --git a/source/_components/cover.opengarage.markdown b/source/_components/cover.opengarage.markdown index 7ee7fccb49..815b1e1e64 100644 --- a/source/_components/cover.opengarage.markdown +++ b/source/_components/cover.opengarage.markdown @@ -1,7 +1,7 @@ --- layout: page title: "OpenGarage Cover" -description: "Instructions how to integrate OpenGarage.io covers within Home Assistant." +description: "Instructions on how to integrate OpenGarage.io covers within Home Assistant." date: 2017-04-07 14:25 sidebar: true comments: false diff --git a/source/_components/cover.rflink.markdown b/source/_components/cover.rflink.markdown index 1bd3a1a50c..bc4d18538d 100644 --- a/source/_components/cover.rflink.markdown +++ b/source/_components/cover.rflink.markdown @@ -1,7 +1,7 @@ --- layout: page title: "RFLink Cover" -description: "Instructions how to integrate RFLink Somfy RTS Cover into Home Assistant." +description: "Instructions on how to integrate RFLink Somfy RTS Cover into Home Assistant." date: 2017-08-08 sidebar: true comments: false diff --git a/source/_components/cover.rfxtrx.markdown b/source/_components/cover.rfxtrx.markdown index 115332a8e0..dd31090f86 100644 --- a/source/_components/cover.rfxtrx.markdown +++ b/source/_components/cover.rfxtrx.markdown @@ -1,7 +1,7 @@ --- layout: page title: "RFXtrx Cover" -description: "Instructions how to integrate RFXtrx covers into Home Assistant." +description: "Instructions on how to integrate RFXtrx covers into Home Assistant." date: 2016-08-24 14:30 sidebar: true comments: false diff --git a/source/_components/cover.rpi_gpio.markdown b/source/_components/cover.rpi_gpio.markdown index 581c6f3698..ac953405f0 100644 --- a/source/_components/cover.rpi_gpio.markdown +++ b/source/_components/cover.rpi_gpio.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Raspberry Pi Cover" -description: "Instructions how to setup the Raspberry Pi covers within Home Assistant." +description: "Instructions on how to setup the Raspberry Pi covers within Home Assistant." date: 2016-08-24 14:28 sidebar: true comments: false diff --git a/source/_components/cover.scsgate.markdown b/source/_components/cover.scsgate.markdown index 52f198b7ed..96b49a7158 100644 --- a/source/_components/cover.scsgate.markdown +++ b/source/_components/cover.scsgate.markdown @@ -1,7 +1,7 @@ --- layout: page title: "SCSGate Cover" -description: "Instructions how to integrate SCSGate motorized devices into Home Assistant." +description: "Instructions on how to integrate SCSGate motorized devices into Home Assistant." date: 2016-06-28 17:30 sidebar: true comments: false diff --git a/source/_components/cover.tahoma.markdown b/source/_components/cover.tahoma.markdown index 1176153355..a67537ca11 100644 --- a/source/_components/cover.tahoma.markdown +++ b/source/_components/cover.tahoma.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Tahoma Cover" -description: "Instructions how to integrate Tahoma covers into Home Assistant." +description: "Instructions on how to integrate Tahoma covers into Home Assistant." date: 2017-07-18 12:00 sidebar: true comments: false diff --git a/source/_components/cover.tellstick.markdown b/source/_components/cover.tellstick.markdown index 2008ef2a73..1d2660cda5 100644 --- a/source/_components/cover.tellstick.markdown +++ b/source/_components/cover.tellstick.markdown @@ -1,7 +1,7 @@ --- layout: page title: "TellStick Cover" -description: "Instructions how to integrate TellStick covers into Home Assistant." +description: "Instructions on how to integrate TellStick covers into Home Assistant." date: 2017-11-29 16:23 sidebar: true comments: false diff --git a/source/_components/cover.template.markdown b/source/_components/cover.template.markdown index 25dd15b787..06a4c09d9c 100644 --- a/source/_components/cover.template.markdown +++ b/source/_components/cover.template.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Template Cover" -description: "Instructions how to integrate Template Covers into Home Assistant." +description: "Instructions on how to integrate Template Covers into Home Assistant." date: 2017-06-19 20:32 sidebar: true comments: false diff --git a/source/_components/cover.vera.markdown b/source/_components/cover.vera.markdown index 32eee4bcae..a982c83a41 100644 --- a/source/_components/cover.vera.markdown +++ b/source/_components/cover.vera.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Vera Cover" -description: "Instructions how to integrate Vera covers into Home Assistant." +description: "Instructions on how to integrate Vera covers into Home Assistant." date: 2016-09-19 21:00 sidebar: true comments: false diff --git a/source/_components/cover.wink.markdown b/source/_components/cover.wink.markdown index 758f01b844..8e81d8ac79 100644 --- a/source/_components/cover.wink.markdown +++ b/source/_components/cover.wink.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Wink Cover" -description: "Instructions how to setup the Wink garage doors within Home Assistant." +description: "Instructions on how to setup the Wink garage doors within Home Assistant." date: 2016-06-28 17:30 sidebar: true comments: false diff --git a/source/_components/cover.xiaomi_aqara.markdown b/source/_components/cover.xiaomi_aqara.markdown index d2bbdf5fa9..6f5353b9c8 100644 --- a/source/_components/cover.xiaomi_aqara.markdown +++ b/source/_components/cover.xiaomi_aqara.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Xiaomi Cover" -description: "Instructions how to setup the Xiaomi cover within Home Assistant." +description: "Instructions on how to setup the Xiaomi cover within Home Assistant." date: 2017-07-21 16:34 sidebar: true comments: false diff --git a/source/_components/cover.zwave.markdown b/source/_components/cover.zwave.markdown index 90547584ce..53477e1e00 100644 --- a/source/_components/cover.zwave.markdown +++ b/source/_components/cover.zwave.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Z-Wave Cover" -description: "Instructions how to setup the Z-Wave covers within Home Assistant." +description: "Instructions on how to setup the Z-Wave covers within Home Assistant." date: 2016-12-18 19:41 sidebar: true comments: false diff --git a/source/_components/datadog.markdown b/source/_components/datadog.markdown index 511d51608a..7a3ec052c7 100644 --- a/source/_components/datadog.markdown +++ b/source/_components/datadog.markdown @@ -35,7 +35,7 @@ datadog: Configuration variables: -- **host** (*Optional*): The IP address or hostname of your Datadog host, e.g. 192.168.1.23. Defaults to `localhost`. +- **host** (*Optional*): The IP address or hostname of your Datadog host, e.g., 192.168.1.23. Defaults to `localhost`. - **port** (*Optional*): Port to use. Defaults to 8125. - **prefix** (*Optional*): Prefix to use. Defaults to `hass`. - **rate** (*Optional*): The sample rate of UDP packets sent to Datadog. Defaults to 1. diff --git a/source/_components/demo.markdown b/source/_components/demo.markdown index b399c9485c..c9b958aa98 100644 --- a/source/_components/demo.markdown +++ b/source/_components/demo.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Demo platforms" -description: "Instructions how to use the Platform demos with Home Assistant." +description: "Instructions on how to use the Platform demos with Home Assistant." date: 2016-02-24 07:00 sidebar: true comments: false diff --git a/source/_components/device_sun_light_trigger.markdown b/source/_components/device_sun_light_trigger.markdown index e0a75a093c..d49c4e1565 100644 --- a/source/_components/device_sun_light_trigger.markdown +++ b/source/_components/device_sun_light_trigger.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Presence based lights" -description: "Instructions how to automate your lights with Home Assistant." +description: "Instructions on how to automate your lights with Home Assistant." date: 2015-01-20 22:36 sidebar: true comments: false diff --git a/source/_components/device_tracker.actiontec.markdown b/source/_components/device_tracker.actiontec.markdown index b292353585..fbf2119650 100644 --- a/source/_components/device_tracker.actiontec.markdown +++ b/source/_components/device_tracker.actiontec.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Actiontec" -description: "Instructions how to integrate Actiontec routers into Home Assistant." +description: "Instructions on how to integrate Actiontec routers into Home Assistant." date: 2015-08-30 19:00 sidebar: true comments: false diff --git a/source/_components/device_tracker.aruba.markdown b/source/_components/device_tracker.aruba.markdown index 0dd6102555..e84c37954b 100644 --- a/source/_components/device_tracker.aruba.markdown +++ b/source/_components/device_tracker.aruba.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Aruba" -description: "Instructions how to integrate Aruba routers into Home Assistant." +description: "Instructions on how to integrate Aruba routers into Home Assistant." date: 2015-08-31 08:45 sidebar: true comments: false @@ -36,7 +36,7 @@ device_tracker: Configuration variables: -- **host** (*Required*): The IP address of your router, e.g. `192.168.1.1`. +- **host** (*Required*): The IP address of your router, e.g., `192.168.1.1`. - **username** (*Required*): The username of an user with administrative privileges, usually `admin`. - **password** (*Required*): The password for your given admin account. diff --git a/source/_components/device_tracker.asuswrt.markdown b/source/_components/device_tracker.asuswrt.markdown index a49a066309..4d809108e9 100644 --- a/source/_components/device_tracker.asuswrt.markdown +++ b/source/_components/device_tracker.asuswrt.markdown @@ -1,7 +1,7 @@ --- layout: page title: "ASUSWRT" -description: "Instructions how to integrate ASUSWRT based routers into Home Assistant." +description: "Instructions on how to integrate ASUSWRT based routers into Home Assistant." date: 2015-08-06 19:00 sidebar: true comments: false diff --git a/source/_components/device_tracker.bbox.markdown b/source/_components/device_tracker.bbox.markdown index 7a5cc91649..35bae013f0 100644 --- a/source/_components/device_tracker.bbox.markdown +++ b/source/_components/device_tracker.bbox.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Bbox" -description: "Instructions how to integrate Bouygues Bbox routers into Home Assistant." +description: "Instructions on how to integrate Bouygues Bbox routers into Home Assistant." date: 2016-10-13 23:00 sidebar: true comments: false diff --git a/source/_components/device_tracker.bluetooth_le_tracker.markdown b/source/_components/device_tracker.bluetooth_le_tracker.markdown index 03b844f667..ce1dab5000 100644 --- a/source/_components/device_tracker.bluetooth_le_tracker.markdown +++ b/source/_components/device_tracker.bluetooth_le_tracker.markdown @@ -48,7 +48,7 @@ Configuration variables: - **interval_seconds** (*Optional*): Seconds between each scan for new devices. Defaults to `12` seconds. As some BT LE devices change their MAC address regularly, a new device is only discovered when it has been seen 5 times. -Some BTLE devices (e.g. fitness trackers) are only visible to the devices that they are paired with. In this case, the BTLE tracker won't see this device. +Some BTLE devices (e.g., fitness trackers) are only visible to the devices that they are paired with. In this case, the BTLE tracker won't see this device. ## {% linkable_title Rootless Setup %} diff --git a/source/_components/device_tracker.bt_home_hub_5.markdown b/source/_components/device_tracker.bt_home_hub_5.markdown index 9fd185eadd..106ba06083 100644 --- a/source/_components/device_tracker.bt_home_hub_5.markdown +++ b/source/_components/device_tracker.bt_home_hub_5.markdown @@ -1,7 +1,7 @@ --- layout: page title: "BT Home Hub 5" -description: "Instructions how to integrate BT Home Hub 5 router into Home Assistant." +description: "Instructions on how to integrate BT Home Hub 5 router into Home Assistant." date: 2016-06-13 13:00 sidebar: true comments: false @@ -25,6 +25,6 @@ device_tracker: Configuration variables: -- **host** (*Required*): The IP address of your router, e.g. 192.168.1.254. +- **host** (*Required*): The IP address of your router, e.g., 192.168.1.254. See the [device tracker component page](/components/device_tracker/) for instructions how to configure the people to be tracked. diff --git a/source/_components/device_tracker.cisco_ios.markdown b/source/_components/device_tracker.cisco_ios.markdown index 1402e84064..589241b8eb 100644 --- a/source/_components/device_tracker.cisco_ios.markdown +++ b/source/_components/device_tracker.cisco_ios.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Cisco IOS" -description: "Instructions how to integrate Cisco IOS routers into Home Assistant." +description: "Instructions on how to integrate Cisco IOS routers into Home Assistant." date: 2016-11-07 19:59 sidebar: true comments: false @@ -59,7 +59,7 @@ device_tracker: Configuration variables: -- **host** (*Required*): The IP address of your router, e.g. 192.168.1.1. +- **host** (*Required*): The IP address of your router, e.g., 192.168.1.1. - **username** (*Required*): The username of an user with administrative privileges. - **password** (*Required*): The password for your given admin account. diff --git a/source/_components/device_tracker.ddwrt.markdown b/source/_components/device_tracker.ddwrt.markdown index 4fa4fe0af4..826046d029 100644 --- a/source/_components/device_tracker.ddwrt.markdown +++ b/source/_components/device_tracker.ddwrt.markdown @@ -1,7 +1,7 @@ --- layout: page title: "DD-WRT" -description: "Instructions how to integrate DD-WRT based routers into Home Assistant." +description: "Instructions on how to integrate DD-WRT based routers into Home Assistant." date: 2015-05-11 09:00 sidebar: true comments: false @@ -27,7 +27,7 @@ device_tracker: Configuration variables: -- **host** (*Required*): The IP address of your router, e.g. `192.168.1.1`. +- **host** (*Required*): The IP address of your router, e.g., `192.168.1.1`. - **username** (*Required*: The username of an user with administrative privileges, usually `admin`. - **password** (*Required*): The password for your given admin account. diff --git a/source/_components/device_tracker.fritz.markdown b/source/_components/device_tracker.fritz.markdown index 40d7bfa985..66ed60a157 100644 --- a/source/_components/device_tracker.fritz.markdown +++ b/source/_components/device_tracker.fritz.markdown @@ -1,7 +1,7 @@ --- layout: page title: "FRITZ!Box" -description: "Instructions how to integrate AVM FRITZ!Box based routers into Home Assistant." +description: "Instructions on how to integrate AVM FRITZ!Box based routers into Home Assistant." date: 2015-12-13 19:00 sidebar: true comments: false diff --git a/source/_components/device_tracker.gpslogger.markdown b/source/_components/device_tracker.gpslogger.markdown index 3b1bbb3320..4c2889a94b 100644 --- a/source/_components/device_tracker.gpslogger.markdown +++ b/source/_components/device_tracker.gpslogger.markdown @@ -1,7 +1,7 @@ --- layout: page title: "GPSLogger" -description: "Instructions how to use GPSLogger to track devices in Home Assistant." +description: "Instructions on how to use GPSLogger to track devices in Home Assistant." date: 2016-11-25 15:00 sidebar: true comments: false diff --git a/source/_components/device_tracker.huawei_router.markdown b/source/_components/device_tracker.huawei_router.markdown index 6c9647ac3c..7ff3bc8e0b 100644 --- a/source/_components/device_tracker.huawei_router.markdown +++ b/source/_components/device_tracker.huawei_router.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Huawei Router" -description: "Instructions how to integrate Huawei Routers into Home Assistant." +description: "Instructions on how to integrate Huawei Routers into Home Assistant." date: 2017-07-16 01:40 sidebar: true comments: false @@ -28,7 +28,7 @@ device_tracker: Configuration variables: -- **host** (*Required*): The IP address of your router, e.g. 192.168.1.1. +- **host** (*Required*): The IP address of your router, e.g., 192.168.1.1. - **username** (*Required*): The username to login into the router (the same used trough the router's web interface). - **password** (*Required*): The password for the specified username. diff --git a/source/_components/device_tracker.icloud.markdown b/source/_components/device_tracker.icloud.markdown index 74f22f02f6..f2f902bd30 100644 --- a/source/_components/device_tracker.icloud.markdown +++ b/source/_components/device_tracker.icloud.markdown @@ -1,7 +1,7 @@ --- layout: page title: "iCloud" -description: "Instructions how to use iCloud to track devices in Home Assistant." +description: "Instructions on how to use iCloud to track devices in Home Assistant." date: 2015-12-15 1000 sidebar: true comments: false diff --git a/source/_components/device_tracker.keenetic_ndms2.markdown b/source/_components/device_tracker.keenetic_ndms2.markdown index 3dbd197b77..aec5ac8a52 100644 --- a/source/_components/device_tracker.keenetic_ndms2.markdown +++ b/source/_components/device_tracker.keenetic_ndms2.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Keenetic NDMS2 Routers" -description: "Instructions how to integrate Keenetic NDMS2 Routers into Home Assistant." +description: "Instructions on how to integrate Keenetic NDMS2 Routers into Home Assistant." date: 2017-09-15 15:40 sidebar: true comments: false @@ -28,7 +28,7 @@ device_tracker: Configuration variables: -- **host** (*Required*): The IP address of your router, e.g. 192.168.1.1. +- **host** (*Required*): The IP address of your router, e.g., 192.168.1.1. - **username** (*Required*): The username to login into the router (user should have read access to web interface of the router). - **password** (*Required*): The password for the specified username. - **interface** (*Optional*): Ihe internal name of the interface to get devices connected to. Default is 'Home'. For expert users only. diff --git a/source/_components/device_tracker.linksys_ap.markdown b/source/_components/device_tracker.linksys_ap.markdown index b9821eb522..6cdc3984b2 100644 --- a/source/_components/device_tracker.linksys_ap.markdown +++ b/source/_components/device_tracker.linksys_ap.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Linksys Access Points" -description: "Instructions how to integrate Linksys Access Points into Home Assistant." +description: "Instructions on how to integrate Linksys Access Points into Home Assistant." date: 2016-12-16 01:40 sidebar: true comments: false diff --git a/source/_components/device_tracker.linksys_smart.markdown b/source/_components/device_tracker.linksys_smart.markdown index 0e1827c680..4cf0ca7e5a 100644 --- a/source/_components/device_tracker.linksys_smart.markdown +++ b/source/_components/device_tracker.linksys_smart.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Linksys Smart Wifi Router" -description: "Instructions how to integrate Linksys Smart Wifi Router into Home Assistant." +description: "Instructions on how to integrate Linksys Smart Wifi Router into Home Assistant." date: 2017-06-22 01:40 sidebar: true comments: false diff --git a/source/_components/device_tracker.locative.markdown b/source/_components/device_tracker.locative.markdown index 2a185c924e..02d932a7a4 100644 --- a/source/_components/device_tracker.locative.markdown +++ b/source/_components/device_tracker.locative.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Locative" -description: "Instructions how to use Locative to track devices in Home Assistant." +description: "Instructions on how to use Locative to track devices in Home Assistant." date: 2015-10-13 19:00 sidebar: true comments: false diff --git a/source/_components/device_tracker.luci.markdown b/source/_components/device_tracker.luci.markdown index 32d0cde87b..621f70a905 100644 --- a/source/_components/device_tracker.luci.markdown +++ b/source/_components/device_tracker.luci.markdown @@ -1,7 +1,7 @@ --- layout: page title: "OpenWRT (luci)" -description: "Instructions how to integrate OpenWRT routers into Home Assistant." +description: "Instructions on how to integrate OpenWRT routers into Home Assistant." date: 2015-03-23 19:59 sidebar: true comments: false @@ -39,7 +39,7 @@ device_tracker: Configuration variables: -- **host** (*Required*): The IP address of your router, e.g. `192.168.1.1`. +- **host** (*Required*): The IP address of your router, e.g., `192.168.1.1`. - **username** (*Required*): The username of an user with administrative privileges, usually `admin`. - **password** (*Required*): The password for your given admin account. diff --git a/source/_components/device_tracker.markdown b/source/_components/device_tracker.markdown index 25e2961498..6524f9c5ab 100644 --- a/source/_components/device_tracker.markdown +++ b/source/_components/device_tracker.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Device Tracker" -description: "Instructions how to setup device tracking within Home Assistant." +description: "Instructions on how to setup device tracking within Home Assistant." date: 2015-01-20 22:36 sidebar: true comments: false @@ -37,7 +37,7 @@ The following optional parameters can be used with any platform. However device | Parameter | Default | Description | |----------------------|---------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | `interval_seconds` | 12 | Seconds between each scan for new devices | -| `consider_home` | 180 | Seconds to wait till marking someone as not home after not being seen. This parameter is most useful for households with Apple iOS devices that go into sleep mode while still at home to conserve battery life. iPhones will occasionally drop off the network and then re-appear. `consider_home` helps prevent false alarms in presence detection when using IP scanners such as Nmap. `consider_home` accepts various time representations, (E.g. the following all represents 3 minutes: `180`, `0:03`, `0:03:00`) | +| `consider_home` | 180 | Seconds to wait till marking someone as not home after not being seen. This parameter is most useful for households with Apple iOS devices that go into sleep mode while still at home to conserve battery life. iPhones will occasionally drop off the network and then re-appear. `consider_home` helps prevent false alarms in presence detection when using IP scanners such as Nmap. `consider_home` accepts various time representations, (e.g., the following all represents 3 minutes: `180`, `0:03`, `0:03:00`) | | `new_device_defaults`| | Default values for new discovered devices. Available options `track_new_devices` (default: `True`), `hide_if_away` (default: `False`) | The extended example from above would look like the following sample: diff --git a/source/_components/device_tracker.mikrotik.markdown b/source/_components/device_tracker.mikrotik.markdown index e3e49c4846..da1dceee4d 100644 --- a/source/_components/device_tracker.mikrotik.markdown +++ b/source/_components/device_tracker.mikrotik.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Mikrotik" -description: "Instructions how to integrate Mikrotik/Routerboard based routers into Home Assistant." +description: "Instructions on how to integrate Mikrotik/Routerboard based routers into Home Assistant." date: 2017-04-28 16:03 sidebar: true comments: false diff --git a/source/_components/device_tracker.mqtt.markdown b/source/_components/device_tracker.mqtt.markdown index d60b895c50..3640b8ad5a 100644 --- a/source/_components/device_tracker.mqtt.markdown +++ b/source/_components/device_tracker.mqtt.markdown @@ -1,7 +1,7 @@ --- layout: page title: "MQTT Device Tracker" -description: "Instructions how to use MQTT to track devices in Home Assistant." +description: "Instructions on how to use MQTT to track devices in Home Assistant." date: 2015-09-19 20:41 sidebar: true comments: false @@ -32,7 +32,7 @@ Configuration variables: - **qos** (*Optional*): The QoS level of the topic. -Example JSON you can publish to the topic (e.g. via mqtt.publish service): +Example JSON you can publish to the topic (e.g., via mqtt.publish service): ```json { diff --git a/source/_components/device_tracker.mqtt_json.markdown b/source/_components/device_tracker.mqtt_json.markdown index d7a515588c..a6cbc50b87 100644 --- a/source/_components/device_tracker.mqtt_json.markdown +++ b/source/_components/device_tracker.mqtt_json.markdown @@ -1,7 +1,7 @@ --- layout: page title: "JSON MQTT Device Tracker" -description: "Instructions how to use JSON MQTT to track devices in Home Assistant." +description: "Instructions on how to use JSON MQTT to track devices in Home Assistant." date: 2017-04-12 20:41 sidebar: true comments: false diff --git a/source/_components/device_tracker.mysensors.markdown b/source/_components/device_tracker.mysensors.markdown index 14db68931a..5366c68ea7 100644 --- a/source/_components/device_tracker.mysensors.markdown +++ b/source/_components/device_tracker.mysensors.markdown @@ -1,7 +1,7 @@ --- layout: page title: "MySensors Device Tracker" -description: "Instructions how to use MySensors to track devices in Home Assistant." +description: "Instructions on how to use MySensors to track devices in Home Assistant." date: 2017-02-06 15:00 +0100 sidebar: true comments: false diff --git a/source/_components/device_tracker.netgear.markdown b/source/_components/device_tracker.netgear.markdown index 70dbbce102..f8dace0e12 100644 --- a/source/_components/device_tracker.netgear.markdown +++ b/source/_components/device_tracker.netgear.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Netgear" -description: "Instructions how to integrate Netgear routers into Home Assistant." +description: "Instructions on how to integrate Netgear routers into Home Assistant." date: 2015-03-23 19:59 sidebar: true comments: false @@ -29,7 +29,7 @@ device_tracker: Configuration variables: -- **host** (*Optional*): The IP address of your router, e.g. `192.168.1.1`. If not provided `routerlogin.net` will be used. +- **host** (*Optional*): The IP address of your router, e.g., `192.168.1.1`. If not provided `routerlogin.net` will be used. - **username** (*Optional*): The username of an user with administrative privileges. If not provided `admin` will be used. - **port** (*Optional*): The port your router communicates with (defaults to `5000`, but `80` is also known to be used on some models). - **password** (*Required*): The password for your given admin account. diff --git a/source/_components/device_tracker.nmap_tracker.markdown b/source/_components/device_tracker.nmap_tracker.markdown index 0ce79dfc3a..74ace37e23 100644 --- a/source/_components/device_tracker.nmap_tracker.markdown +++ b/source/_components/device_tracker.nmap_tracker.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Nmap" -description: "Instructions how to integrate Nmap into Home Assistant." +description: "Instructions on how to integrate Nmap into Home Assistant." date: 2015-03-23 19:59 sidebar: true comments: false diff --git a/source/_components/device_tracker.owntracks.markdown b/source/_components/device_tracker.owntracks.markdown index 631d8dc669..1b945522aa 100644 --- a/source/_components/device_tracker.owntracks.markdown +++ b/source/_components/device_tracker.owntracks.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Owntracks" -description: "Instructions how to use Owntracks to track devices in Home Assistant." +description: "Instructions on how to use Owntracks to track devices in Home Assistant." date: 2015-09-22 07:00 sidebar: true comments: false @@ -34,7 +34,7 @@ Configuration variables: - **max_gps_accuracy** (*Optional*): Sometimes Owntracks can report GPS location with a very low accuracy (few kilometers). That can trigger false zoning in your Home Assistant installation. With the parameter, you can filter these GPS reports. The number has to be in meter. For example, if you put 200 only GPS report with an accuracy under 200 will be take in account. - **waypoints** (*Optional*): Owntracks users can define [waypoints](http://owntracks.org/booklet/features/waypoints/) (a.k.a regions) which are similar in spirit to Home Assistant zones. If this configuration variable is `True`, the Owntracks users who are in `waypoint_whitelist` can export waypoints from the device and Home Assistant will import them as zone definitions. Defaults to `True`. -- **waypoint_whitelist** (*Optional*): A list of user names (as defined for [Owntracks](/components/device_tracker.owntracks/)) who can export their waypoints from Owntracks to Home Assistant. This would be the `username` portion of the Base Topic Name, (e.g. owntracks/**username**/iPhone). Defaults to all users who are connected to Home Assistant via Owntracks. +- **waypoint_whitelist** (*Optional*): A list of user names (as defined for [Owntracks](/components/device_tracker.owntracks/)) who can export their waypoints from Owntracks to Home Assistant. This would be the `username` portion of the Base Topic Name, (e.g., owntracks/**username**/iPhone). Defaults to all users who are connected to Home Assistant via Owntracks. - **secret** (*Optional*): [Payload encryption key](http://owntracks.org/booklet/features/encrypt/). This is usable when communicating with a third-party untrusted server or a public server (where anybody can subscribe to any topic). By default the payload is assumed to be unencrypted (although the communication between Home Assistant and the server might still be encrypted). This feature requires the `libsodium` library to be present. - **mqtt_topic** (*Optional*): The topic to subscribe for Owntracks updates on your MQTT instance (defaults to `owntracks/#`). - **events_only** (*Optional*): Home Assistant will ignore all location updates and rely solely on geofence enter/leave events. diff --git a/source/_components/device_tracker.owntracks_http.markdown b/source/_components/device_tracker.owntracks_http.markdown index 7e91746e55..a4aa847712 100644 --- a/source/_components/device_tracker.owntracks_http.markdown +++ b/source/_components/device_tracker.owntracks_http.markdown @@ -1,7 +1,7 @@ --- layout: page title: "OwnTracks (via HTTP)" -description: "Instructions how to use Owntracks via HTTP to track devices in Home Assistant." +description: "Instructions on how to use Owntracks via HTTP to track devices in Home Assistant." date: 2017-09-28 07:00 sidebar: true comments: false diff --git a/source/_components/device_tracker.ping.markdown b/source/_components/device_tracker.ping.markdown index 7979881198..1f34368012 100644 --- a/source/_components/device_tracker.ping.markdown +++ b/source/_components/device_tracker.ping.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Ping (ICMP)" -description: "Instructions how to integrate Ping (ICMP)-based presence detection into Home Assistant." +description: "Instructions on how to integrate Ping (ICMP)-based presence detection into Home Assistant." date: 2017-01-06 08:00 sidebar: true comments: false diff --git a/source/_components/device_tracker.sky_hub.markdown b/source/_components/device_tracker.sky_hub.markdown index e5a1271894..792aece8a8 100644 --- a/source/_components/device_tracker.sky_hub.markdown +++ b/source/_components/device_tracker.sky_hub.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Sky Hub" -description: "Instructions how to integrate Sky Hub routers into Home Assistant." +description: "Instructions on how to integrate Sky Hub routers into Home Assistant." date: 2017-01-28 09:00 sidebar: true comments: false diff --git a/source/_components/device_tracker.snmp.markdown b/source/_components/device_tracker.snmp.markdown index 60c14a1f87..8193abfee8 100644 --- a/source/_components/device_tracker.snmp.markdown +++ b/source/_components/device_tracker.snmp.markdown @@ -1,7 +1,7 @@ --- layout: page title: "SNMP" -description: "Instructions how to integrate SNMP into Home Assistant." +description: "Instructions on how to integrate SNMP into Home Assistant." date: 2015-10-08 12:00 sidebar: true comments: false diff --git a/source/_components/device_tracker.swisscom.markdown b/source/_components/device_tracker.swisscom.markdown index bee21be205..49c4f72ba9 100644 --- a/source/_components/device_tracker.swisscom.markdown +++ b/source/_components/device_tracker.swisscom.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Swisscom Internet-Box" -description: "Instructions how to integrate Swisscom Internet-Box into Home Assistant." +description: "Instructions on how to integrate Swisscom Internet-Box into Home Assistant." date: 2016-10-29 23:30 sidebar: true comments: false diff --git a/source/_components/device_tracker.tado.markdown b/source/_components/device_tracker.tado.markdown index bc1d91b37b..70f130c7e0 100644 --- a/source/_components/device_tracker.tado.markdown +++ b/source/_components/device_tracker.tado.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Tado" -description: "Instructions how to integrate Tado into Home Assistant." +description: "Instructions on how to integrate Tado into Home Assistant." date: 2017-01-17 12:00 sidebar: true comments: false diff --git a/source/_components/device_tracker.thomson.markdown b/source/_components/device_tracker.thomson.markdown index f9d39eb6d7..810d586d27 100644 --- a/source/_components/device_tracker.thomson.markdown +++ b/source/_components/device_tracker.thomson.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Thomson" -description: "Instructions how to integrate Thomson routers into Home Assistant." +description: "Instructions on how to integrate Thomson routers into Home Assistant." date: 2015-08-30 19:00 sidebar: true comments: false diff --git a/source/_components/device_tracker.tile.markdown b/source/_components/device_tracker.tile.markdown index 63ba3d693c..8abb07a676 100644 --- a/source/_components/device_tracker.tile.markdown +++ b/source/_components/device_tracker.tile.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Tile" -description: "Instructions how to use Tile to track devices in Home Assistant." +description: "Instructions on how to use Tile to track devices in Home Assistant." date: 2017-11-08 20:40:00 sidebar: true comments: false diff --git a/source/_components/device_tracker.tomato.markdown b/source/_components/device_tracker.tomato.markdown index 3c5eca66ca..279cd63b68 100644 --- a/source/_components/device_tracker.tomato.markdown +++ b/source/_components/device_tracker.tomato.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Tomato" -description: "Instructions how to integrate Tomato routers into Home Assistant." +description: "Instructions on how to integrate Tomato routers into Home Assistant." date: 2015-03-23 19:59 sidebar: true comments: false @@ -31,11 +31,11 @@ device_tracker: {% configuration %} host: - description: "The IP address or hostname of your router, e.g. `192.168.1.1` or `rt-ac68u`." + description: "The IP address or hostname of your router, e.g., `192.168.1.1` or `rt-ac68u`." required: false type: string port: - description: "The port number of your router, e.g. `443`." + description: "The port number of your router, e.g., `443`." required: false type: int default: 80/443 (automatically detected) @@ -45,7 +45,7 @@ ssl: type: bool default: false verify_ssl: - description: "If SSL verification for https resources needs to be turned off (for self-signed certs, etc.) this can take on boolean values `False` or `True` or you can pass a location on the device where a certificate can be used for verification e.g. `/mnt/NAS/router_cert.pem`." + description: "If SSL verification for https resources needs to be turned off (for self-signed certs, etc.) this can take on boolean values `False` or `True` or you can pass a location on the device where a certificate can be used for verification e.g., `/mnt/NAS/router_cert.pem`." required: false type: [string, bool] default: true diff --git a/source/_components/device_tracker.tplink.markdown b/source/_components/device_tracker.tplink.markdown index 89897bb1e0..80e957a2ae 100644 --- a/source/_components/device_tracker.tplink.markdown +++ b/source/_components/device_tracker.tplink.markdown @@ -1,7 +1,7 @@ --- layout: page title: "TP-Link" -description: "Instructions how to integrate TP-Link routers into Home Assistant." +description: "Instructions on how to integrate TP-Link routers into Home Assistant." date: 2015-06-22 10:30 sidebar: true comments: false @@ -31,7 +31,7 @@ device_tracker: Configuration variables: -- **host** (*Required*): The IP address of your router, e.g. 192.168.1.1. +- **host** (*Required*): The IP address of your router, e.g., 192.168.1.1. - **username** (*Required*: The username of an user with administrative privileges, usually *admin*. - **password** (*Required*): The password for your given admin account. diff --git a/source/_components/device_tracker.trackr.markdown b/source/_components/device_tracker.trackr.markdown index 6337b8f787..198203404b 100644 --- a/source/_components/device_tracker.trackr.markdown +++ b/source/_components/device_tracker.trackr.markdown @@ -1,7 +1,7 @@ --- layout: page title: "TrackR" -description: "Instructions how to use TrackR to track devices in Home Assistant." +description: "Instructions on how to use TrackR to track devices in Home Assistant." date: 2016-12-22 1000 sidebar: true comments: false diff --git a/source/_components/device_tracker.ubus.markdown b/source/_components/device_tracker.ubus.markdown index 646ae0b2c1..3df045db24 100644 --- a/source/_components/device_tracker.ubus.markdown +++ b/source/_components/device_tracker.ubus.markdown @@ -1,7 +1,7 @@ --- layout: page title: "OpenWRT (ubus)" -description: "Instructions how to integrate OpenWRT routers into Home Assistant." +description: "Instructions on how to integrate OpenWRT routers into Home Assistant." date: 2015-03-23 19:59 sidebar: true comments: false diff --git a/source/_components/device_tracker.unifi.markdown b/source/_components/device_tracker.unifi.markdown index bac8fe43be..5ef8d4edc7 100644 --- a/source/_components/device_tracker.unifi.markdown +++ b/source/_components/device_tracker.unifi.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Ubiquiti Unifi WAP" -description: "Instructions how to use a Unifi WAP controller as a device tracker module." +description: "Instructions on how to use a Unifi WAP controller as a device tracker module." date: 2016-02-19 20:59 sidebar: true comments: false diff --git a/source/_components/device_tracker.unifi_direct.markdown b/source/_components/device_tracker.unifi_direct.markdown index 8c0bda46b8..3f2584c322 100644 --- a/source/_components/device_tracker.unifi_direct.markdown +++ b/source/_components/device_tracker.unifi_direct.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Ubiquiti Unifi direct AP" -description: "Instructions how to use a Unifi WAP as a device tracker." +description: "Instructions on how to use a Unifi WAP as a device tracker." date: 2017-11-17 14:59 sidebar: true comments: false diff --git a/source/_components/device_tracker.upc_connect.markdown b/source/_components/device_tracker.upc_connect.markdown index ca0a7e57b2..1f77bc8d86 100644 --- a/source/_components/device_tracker.upc_connect.markdown +++ b/source/_components/device_tracker.upc_connect.markdown @@ -1,7 +1,7 @@ --- layout: page title: "UPC ConnectBox" -description: "Instructions how to integrate UPC ConnectBox into Home Assistant." +description: "Instructions on how to integrate UPC ConnectBox into Home Assistant." date: 2016-12-30 00:00 sidebar: true comments: false diff --git a/source/_components/device_tracker.xiaomi.markdown b/source/_components/device_tracker.xiaomi.markdown index 9a8f6a43fd..d38571007c 100644 --- a/source/_components/device_tracker.xiaomi.markdown +++ b/source/_components/device_tracker.xiaomi.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Xiaomi Router" -description: "Instructions how to integrate Xiaomi routers into Home Assistant." +description: "Instructions on how to integrate Xiaomi routers into Home Assistant." date: 2017-01-12 12:04 sidebar: true comments: false diff --git a/source/_components/dialogflow.markdown b/source/_components/dialogflow.markdown index a034f72e28..bf2cc4b4e6 100644 --- a/source/_components/dialogflow.markdown +++ b/source/_components/dialogflow.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Dialogflow" -description: "Instructions how integrate Dialogflow with Home Assistant." +description: "Instructions on how integrate Dialogflow with Home Assistant." date: 2017-01-27 11:28 sidebar: true comments: false @@ -47,10 +47,10 @@ To use this integration, you should define a conversation (intent) in Dialogflow - Select name, language (if you are planning to use Google Actions check their [supported languages](https://support.google.com/assistant/answer/7108196?hl=en)) and time zone - Click "Save" - Go to "Fulfillment" (in the left menu) -- Enable Webhook and set your Home Assistant URL with the Dialogflow endpoint, e.g. `https://myhome.duckdns.org/api/dialogflow?api_password=HA_PASSWORD` +- Enable Webhook and set your Home Assistant URL with the Dialogflow endpoint, e.g., `https://myhome.duckdns.org/api/dialogflow?api_password=HA_PASSWORD` - Click "Save" - Create a new intent -- Below "User says" write one phrase that you, the user, will tell Dialogflow, e.g. `What is the temperature at home?` +- Below "User says" write one phrase that you, the user, will tell Dialogflow, e.g., `What is the temperature at home?` - In "Action" set some key (this will be the bind with Home Assistant configuration), eg.: GetTemperature - In "Response" set "Cannot connect to Home Assistant or it is taking to long" (fall back response) - At the end of the page, click on "Fulfillment" and check "Use webhook" diff --git a/source/_components/digital_ocean.markdown b/source/_components/digital_ocean.markdown index c2e26b9aa3..4554819ee2 100644 --- a/source/_components/digital_ocean.markdown +++ b/source/_components/digital_ocean.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Digital Ocean" -description: "Instructions how to integrate the Digital Ocean within Home Assistant." +description: "Instructions on how to integrate the Digital Ocean within Home Assistant." date: 2016-09-24 20:00 sidebar: true comments: false diff --git a/source/_components/discoverable.markdown b/source/_components/discoverable.markdown index 19c16ce0ac..49e9f82111 100644 --- a/source/_components/discoverable.markdown +++ b/source/_components/discoverable.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Discoverable" -description: "Instructions how to setup the discoverable component with Home Assistant." +description: "Instructions on how to setup the discoverable component with Home Assistant." date: 2016-03-01 07:00 sidebar: true comments: false diff --git a/source/_components/discovery.markdown b/source/_components/discovery.markdown index f08c530620..24c7b2b940 100644 --- a/source/_components/discovery.markdown +++ b/source/_components/discovery.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Discovery" -description: "Instructions how to setup Home Assistant to discover new devices." +description: "Instructions on how to setup Home Assistant to discover new devices." date: 2015-01-24 14:39 sidebar: true comments: false diff --git a/source/_components/downloader.markdown b/source/_components/downloader.markdown index 53063587d6..caf266cb01 100644 --- a/source/_components/downloader.markdown +++ b/source/_components/downloader.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Downloader" -description: "Instructions how to setup the downloader component with Home Assistant." +description: "Instructions on how to setup the downloader component with Home Assistant." date: 2015-01-24 14:39 sidebar: true comments: false diff --git a/source/_components/dyson.markdown b/source/_components/dyson.markdown index a3d015001c..a217158276 100644 --- a/source/_components/dyson.markdown +++ b/source/_components/dyson.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Dyson" -description: "Instructions how to integrate Dyson into Home Assistant." +description: "Instructions on how to integrate Dyson into Home Assistant." date: 2017-05-27 10:00 sidebar: true comments: false diff --git a/source/_components/egardia.markdown b/source/_components/egardia.markdown index 1f0396bde7..a19c76738b 100644 --- a/source/_components/egardia.markdown +++ b/source/_components/egardia.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Egardia" -description: "Instructions how to setup Egardia / Woonveilig within Home Assistant." +description: "Instructions on how to setup Egardia / Woonveilig within Home Assistant." date: 2018-03-13 09:00 sidebar: true comments: false diff --git a/source/_components/emulated_hue.markdown b/source/_components/emulated_hue.markdown index 44c7c76c38..d5d9e55d88 100644 --- a/source/_components/emulated_hue.markdown +++ b/source/_components/emulated_hue.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Emulated Hue Bridge" -description: "Instructions how to emulated Hue Bridge within Home Assistant." +description: "Instructions on how to emulated Hue Bridge within Home Assistant." date: 2016-08-26 08:00 sidebar: true comments: false diff --git a/source/_components/fan.comfoconnect.markdown b/source/_components/fan.comfoconnect.markdown index d24d4eb184..f1ac6f944f 100644 --- a/source/_components/fan.comfoconnect.markdown +++ b/source/_components/fan.comfoconnect.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Zehnder ComfoAir Q Ventilation fans" -description: "Instructions how to integrate Zehnder ComfoAir Q350/450/600 fans into Home Assistant." +description: "Instructions on how to integrate Zehnder ComfoAir Q350/450/600 fans into Home Assistant." date: 2017-06-28 18:00 sidebar: true comments: false diff --git a/source/_components/fan.dyson.markdown b/source/_components/fan.dyson.markdown index e827c7ab2c..d1ae60c638 100644 --- a/source/_components/fan.dyson.markdown +++ b/source/_components/fan.dyson.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Dyson Purifier Fan" -description: "Instructions how to setup the Dyson Purifier fans within Home Assistant." +description: "Instructions on how to setup the Dyson Purifier fans within Home Assistant." date: 2017-05-27 10:00 sidebar: true comments: false diff --git a/source/_components/fan.insteon_hub.markdown b/source/_components/fan.insteon_hub.markdown index b5ce9adbc7..0436d4bdde 100644 --- a/source/_components/fan.insteon_hub.markdown +++ b/source/_components/fan.insteon_hub.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Insteon Hub Fan" -description: "Instructions how to setup the Insteon Hub Fans within Home Assistant." +description: "Instructions on how to setup the Insteon Hub Fans within Home Assistant." date: 2017-08-26 08:00 sidebar: true comments: false diff --git a/source/_components/fan.insteon_local.markdown b/source/_components/fan.insteon_local.markdown index 359f099477..d9738043c9 100644 --- a/source/_components/fan.insteon_local.markdown +++ b/source/_components/fan.insteon_local.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Insteon (Local) Fan" -description: "Instructions how to setup the Insteon Hub Fans locally within Home Assistant." +description: "Instructions on how to setup the Insteon Hub Fans locally within Home Assistant." date: 2017-04-06 11:00 sidebar: true comments: false diff --git a/source/_components/fan.insteon_plm.markdown b/source/_components/fan.insteon_plm.markdown index 23c0cbac84..3f2323e16e 100644 --- a/source/_components/fan.insteon_plm.markdown +++ b/source/_components/fan.insteon_plm.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Insteon PLM Fan" -description: "Instructions how to setup the Insteon PLM fan locally within Home Assistant." +description: "Instructions on how to setup the Insteon PLM fan locally within Home Assistant." date: 2017-02-19 17:00 sidebar: true comments: false diff --git a/source/_components/fan.isy994.markdown b/source/_components/fan.isy994.markdown index 6b9e55f289..4c47e76fc4 100644 --- a/source/_components/fan.isy994.markdown +++ b/source/_components/fan.isy994.markdown @@ -1,7 +1,7 @@ --- layout: page title: "ISY994 Fan" -description: "Instructions how to integrate ISY994 fans into Home Assistant." +description: "Instructions on how to integrate ISY994 fans into Home Assistant." date: 2016-09-03 23:00 sidebar: true comments: false diff --git a/source/_components/fan.markdown b/source/_components/fan.markdown index c196d9f770..aac9c8c763 100644 --- a/source/_components/fan.markdown +++ b/source/_components/fan.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Fan" -description: "Instructions how to setup Fan devices within Home Assistant." +description: "Instructions on how to setup Fan devices within Home Assistant." date: 2016-08-26 19:00 sidebar: true comments: false diff --git a/source/_components/fan.mqtt.markdown b/source/_components/fan.mqtt.markdown index 1a0329404f..94a02b1a9e 100644 --- a/source/_components/fan.mqtt.markdown +++ b/source/_components/fan.mqtt.markdown @@ -1,7 +1,7 @@ --- layout: page title: "MQTT Fan" -description: "Instructions how to integrate MQTT fans into Home Assistant." +description: "Instructions on how to integrate MQTT fans into Home Assistant." date: 2016-08-27 09:00 sidebar: true comments: false diff --git a/source/_components/fan.wink.markdown b/source/_components/fan.wink.markdown index 23369dfad2..129db4b469 100644 --- a/source/_components/fan.wink.markdown +++ b/source/_components/fan.wink.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Wink Fan" -description: "Instructions how to setup the Wink fans within Home Assistant." +description: "Instructions on how to setup the Wink fans within Home Assistant." date: 2017-01-14 12:00 sidebar: true comments: false diff --git a/source/_components/fan.xiaomi_miio.markdown b/source/_components/fan.xiaomi_miio.markdown index 99adf8ff4e..28deacf2f7 100644 --- a/source/_components/fan.xiaomi_miio.markdown +++ b/source/_components/fan.xiaomi_miio.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Xiaomi Air Purifier" -description: "Instructions how to integrate your Xiaomi Air Purifier within Home Assistant." +description: "Instructions on how to integrate your Xiaomi Air Purifier within Home Assistant." date: 2017-10-13 12:35 sidebar: true comments: false diff --git a/source/_components/fan.zwave.markdown b/source/_components/fan.zwave.markdown index 953620ed3b..4e83a0b8a5 100644 --- a/source/_components/fan.zwave.markdown +++ b/source/_components/fan.zwave.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Z-Wave Fan" -description: "Instructions how to setup the Z-Wave Fans within Home Assistant." +description: "Instructions on how to setup the Z-Wave Fans within Home Assistant." date: 2017-05-25 17:00 sidebar: true comments: false diff --git a/source/_components/feedreader.markdown b/source/_components/feedreader.markdown index 15b7212965..01a4874e64 100644 --- a/source/_components/feedreader.markdown +++ b/source/_components/feedreader.markdown @@ -1,7 +1,7 @@ --- layout: page title: Feedreader -description: "Instructions how to integrate RSS feeds into Home Assistant." +description: "Instructions on how to integrate RSS feeds into Home Assistant." date: 2016-04-18 22:00 sidebar: true comments: false diff --git a/source/_components/foursquare.markdown b/source/_components/foursquare.markdown index 10b5d6ebe6..de70d05661 100644 --- a/source/_components/foursquare.markdown +++ b/source/_components/foursquare.markdown @@ -1,7 +1,7 @@ --- layout: page title: Foursquare -description: "Instructions how to the Foursquare API into Home Assistant." +description: "Instructions on how to the Foursquare API into Home Assistant." date: 2016-08-08 17:20 sidebar: true comments: false diff --git a/source/_components/google_assistant.markdown b/source/_components/google_assistant.markdown index 2430428efe..1e1b405b6f 100644 --- a/source/_components/google_assistant.markdown +++ b/source/_components/google_assistant.markdown @@ -63,7 +63,7 @@ access_token: required: true type: string agent_user_id: - description: A string to identify the user, e.g. email address. If not provided, the component will generate one. + description: A string to identify the user, e.g., email address. If not provided, the component will generate one. required: false type: string api_key: diff --git a/source/_components/group.markdown b/source/_components/group.markdown index 8f781722d2..924c55e24a 100644 --- a/source/_components/group.markdown +++ b/source/_components/group.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Group" -description: "Instructions how to setup groups within Home Assistant." +description: "Instructions on how to setup groups within Home Assistant." date: 2015-03-23 19:59 sidebar: true comments: false diff --git a/source/_components/hdmi_cec.markdown b/source/_components/hdmi_cec.markdown index 694c1e3357..ceafd717c6 100644 --- a/source/_components/hdmi_cec.markdown +++ b/source/_components/hdmi_cec.markdown @@ -1,7 +1,7 @@ --- layout: page title: "HDMI CEC" -description: "Instructions how to interact with HDMI CEC via Home Assistant." +description: "Instructions on how to interact with HDMI CEC via Home Assistant." date: 2016-06-24 19:59 sidebar: true comments: false diff --git a/source/_components/history.markdown b/source/_components/history.markdown index 76affbecc6..459ac4b2a8 100644 --- a/source/_components/history.markdown +++ b/source/_components/history.markdown @@ -1,7 +1,7 @@ --- layout: page title: "History" -description: "Instructions how to enable history support for Home Assistant." +description: "Instructions on how to enable history support for Home Assistant." date: 2015-03-23 19:59 sidebar: true comments: false diff --git a/source/_components/homekit.markdown b/source/_components/homekit.markdown index ebb4b6ccd4..02538de034 100644 --- a/source/_components/homekit.markdown +++ b/source/_components/homekit.markdown @@ -1,7 +1,7 @@ --- layout: page title: "HomeKit" -description: "Instructions how to setup the HomeKit component in Home Assistant." +description: "Instructions on how to setup the HomeKit component in Home Assistant." date: 2018-02-20 17:30 sidebar: true comments: false diff --git a/source/_components/homematic.markdown b/source/_components/homematic.markdown index 622457fe7f..9ad767b2b2 100644 --- a/source/_components/homematic.markdown +++ b/source/_components/homematic.markdown @@ -18,7 +18,7 @@ If you are using Homegear with paired [Intertechno](http://intertechno.at/) devi Device support is available for most of the wired and wireless devices, as well as a few IP devices. If you have a setup with mixed protocols, you have to configure additional hosts with the appropriate ports. The default is using port 2001, which are wireless devices. Wired devices usually are available through port 2000 and IP devices through port 2010. The virtual thermostatgroups the CCU provides use port 9292 **and** require you to set the `path` setting to `/groups`. -If you want to see if a specific device you have is supported, head over to the [pyhomematic](https://github.com/danielperna84/pyhomematic/tree/master/pyhomematic/devicetypes) repository and browse through the source code. A dictionary with the device identifiers (e.g. HM-Sec-SC-2) can be found within the relevant modules near the bottom. If your device is not supported, feel free to contribute. +If you want to see if a specific device you have is supported, head over to the [pyhomematic](https://github.com/danielperna84/pyhomematic/tree/master/pyhomematic/devicetypes) repository and browse through the source code. A dictionary with the device identifiers (e.g., HM-Sec-SC-2) can be found within the relevant modules near the bottom. If your device is not supported, feel free to contribute. We automatically detect all devices we currently support and try to generate useful names. If you enable name-resolving, we try to fetch names from Metadata (Homegear), via JSON-RPC or the XML-API you may have installed on your CCU. Since this may fail this is disabled by default. You can manually rename the created entities by using Home Assistant's [Customizing](/docs/configuration/customizing-devices/) feature. With it you are also able to hide entities you don't want to see in the UI. @@ -125,7 +125,7 @@ sensor: ### {% linkable_title Variables %} It is possible to read and set values of system variables you have setup on the CCU/Homegear. The supported types for setting values are float- and bool-variables. -The states of the variables are available through the attributes of your hub entity (e.g. `homematic.ccu2`). Use templates (as mentioned above) to make your variables available to automations or as entities. +The states of the variables are available through the attributes of your hub entity (e.g., `homematic.ccu2`). Use templates (as mentioned above) to make your variables available to automations or as entities. The values of variables are polled from the CCU/Homegear in an interval of 30 seconds. Setting the value of a variable happens instantly and is directly pushed. ### {% linkable_title Events %} @@ -137,7 +137,7 @@ When HomeMatic devices change their state or some other internal value, the CCU/ #### {% linkable_title Devices with buttons %} -Devices with buttons (e.g. HM-Sen-MDIR-WM55, remote controls) may not be fully visible in the UI. This is intended, as buttons don't serve any value here and all they do is trigger events. +Devices with buttons (e.g., HM-Sen-MDIR-WM55, remote controls) may not be fully visible in the UI. This is intended, as buttons don't serve any value here and all they do is trigger events. As an example: The HM-Sen-MDIR-WM55 motion detector will be displayed as 2 entities. A motion sensor and a brightness sensor. On top of that we have 2 sets (one set per button) of 4 events: PRESS_SHORT, PRESS_LONG, PRESS_CONT, PRESS_LONG_RELEASE. Be aware, that there are devices which don't provide all of these events. But in general: if you can press it, it usually at least has PRESS_SHORT. @@ -158,7 +158,7 @@ automation: ``` The channel parameter is equal to the channel of the button you are configuring the automation for. You can view the available channels in the UI you use to pair your devices. -The name depends on if you chose to resolve names or not. If not, it will be the device ID (e.g. LEQ1234657). If you chose to resolve names (and that is successful), it will be the name you have set in your CCU or in the metadata (e.g. "Kitchen Switch"). +The name depends on if you chose to resolve names or not. If not, it will be the device ID (e.g., LEQ1234657). If you chose to resolve names (and that is successful), it will be the name you have set in your CCU or in the metadata (e.g., "Kitchen Switch"). You can test whether your button works within Home Assistant if you look at the terminal output. When pressing a button, lines similar to those should appear: diff --git a/source/_components/ifttt.manything.markdown b/source/_components/ifttt.manything.markdown index 7288afb90b..84d0228bc1 100644 --- a/source/_components/ifttt.manything.markdown +++ b/source/_components/ifttt.manything.markdown @@ -1,7 +1,7 @@ --- layout: page title: "ManyThing" -description: "Instructions how to setup ManyThing support with IFTTT." +description: "Instructions on how to setup ManyThing support with IFTTT." date: 2015-09-07 18:00 sidebar: true comments: false diff --git a/source/_components/ifttt.markdown b/source/_components/ifttt.markdown index 764138d272..9f48303946 100644 --- a/source/_components/ifttt.markdown +++ b/source/_components/ifttt.markdown @@ -1,7 +1,7 @@ --- layout: page title: "IFTTT" -description: "Instructions how to setup IFTTT within Home Assistant." +description: "Instructions on how to setup IFTTT within Home Assistant." date: 2015-09-07 18:00 sidebar: true comments: false @@ -21,7 +21,7 @@ ifttt: key: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ``` -`key` is your API key which can be obtained by viewing the **Settings** of the [Webhooks applet](https://ifttt.com/services/maker_webhooks/settings). It's the last part of the URL (e.g. https://maker.ifttt.com/use/MYAPIKEY) you will find under **My Applets** > **Webhooks** > **Settings**. +`key` is your API key which can be obtained by viewing the **Settings** of the [Webhooks applet](https://ifttt.com/services/maker_webhooks/settings). It's the last part of the URL (e.g., https://maker.ifttt.com/use/MYAPIKEY) you will find under **My Applets** > **Webhooks** > **Settings**.

    diff --git a/source/_components/image_processing.dlib_face_detect.markdown b/source/_components/image_processing.dlib_face_detect.markdown index 6673146847..f427590256 100644 --- a/source/_components/image_processing.dlib_face_detect.markdown +++ b/source/_components/image_processing.dlib_face_detect.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Dlib Face Detect" -description: "Instructions how to integrate Dlib Face Detect into Home Assistant." +description: "Instructions on how to integrate Dlib Face Detect into Home Assistant." date: 2017-05-05 00:00 sidebar: true comments: false diff --git a/source/_components/image_processing.dlib_face_identify.markdown b/source/_components/image_processing.dlib_face_identify.markdown index 4f3d267f53..5cac74b560 100644 --- a/source/_components/image_processing.dlib_face_identify.markdown +++ b/source/_components/image_processing.dlib_face_identify.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Dlib Face Identify" -description: "Instructions how to integrate Dlib Face Identify into Home Assistant." +description: "Instructions on how to integrate Dlib Face Identify into Home Assistant." date: 2017-01-25 00:00 sidebar: true comments: false diff --git a/source/_components/image_processing.markdown b/source/_components/image_processing.markdown index 6f010ebad2..1f1507bf28 100644 --- a/source/_components/image_processing.markdown +++ b/source/_components/image_processing.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Image Processing" -description: "Instructions how to setup image processing with Home Assistant." +description: "Instructions on how to setup image processing with Home Assistant." date: 2017-01-09 00:00 sidebar: true comments: false diff --git a/source/_components/image_processing.microsoft_face_detect.markdown b/source/_components/image_processing.microsoft_face_detect.markdown index 39aecb1534..06cca72d26 100644 --- a/source/_components/image_processing.microsoft_face_detect.markdown +++ b/source/_components/image_processing.microsoft_face_detect.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Microsoft Face Detect" -description: "Instructions how to integrate Microsoft Face Detect into Home Assistant." +description: "Instructions on how to integrate Microsoft Face Detect into Home Assistant." date: 2017-01-25 00:00 sidebar: true comments: false diff --git a/source/_components/image_processing.microsoft_face_identify.markdown b/source/_components/image_processing.microsoft_face_identify.markdown index 76fb2ad1be..eb6d0a110f 100644 --- a/source/_components/image_processing.microsoft_face_identify.markdown +++ b/source/_components/image_processing.microsoft_face_identify.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Microsoft Face Identify" -description: "Instructions how to integrate Microsoft Face Identify into Home Assistant." +description: "Instructions on how to integrate Microsoft Face Identify into Home Assistant." date: 2017-01-25 00:00 sidebar: true comments: false diff --git a/source/_components/image_processing.openalpr_cloud.markdown b/source/_components/image_processing.openalpr_cloud.markdown index 3a13097c87..8829782ebd 100644 --- a/source/_components/image_processing.openalpr_cloud.markdown +++ b/source/_components/image_processing.openalpr_cloud.markdown @@ -1,7 +1,7 @@ --- layout: page title: "OpenALPR Cloud" -description: "Instructions how to integrate licences plates with OpenALPR cloud into Home Assistant." +description: "Instructions on how to integrate licences plates with OpenALPR cloud into Home Assistant." date: 2017-01-09 00:00 sidebar: true comments: false diff --git a/source/_components/image_processing.openalpr_local.markdown b/source/_components/image_processing.openalpr_local.markdown index 593a921261..c8fe13152c 100644 --- a/source/_components/image_processing.openalpr_local.markdown +++ b/source/_components/image_processing.openalpr_local.markdown @@ -1,7 +1,7 @@ --- layout: page title: "OpenALPR Local" -description: "Instructions how to integrate licences plates with OpenALPR local into Home Assistant." +description: "Instructions on how to integrate licences plates with OpenALPR local into Home Assistant." date: 2017-01-09 00:00 sidebar: true comments: false diff --git a/source/_components/image_processing.opencv.markdown b/source/_components/image_processing.opencv.markdown index db6bfd2d5c..9e485ec6c3 100644 --- a/source/_components/image_processing.opencv.markdown +++ b/source/_components/image_processing.opencv.markdown @@ -1,7 +1,7 @@ --- layout: page title: "OpenCV" -description: "Instructions how to integrate OpenCV image processing into Home Assistant." +description: "Instructions on how to integrate OpenCV image processing into Home Assistant." date: 2017-01-25 00:00 sidebar: true comments: false diff --git a/source/_components/image_processing.seven_segments.markdown b/source/_components/image_processing.seven_segments.markdown index 13249bc52b..a5944d821b 100644 --- a/source/_components/image_processing.seven_segments.markdown +++ b/source/_components/image_processing.seven_segments.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Seven segments display" -description: "Instructions how to use OCR for seven segments displays into Home Assistant." +description: "Instructions on how to use OCR for seven segments displays into Home Assistant." date: 2017-05-18 08:00 sidebar: true comments: false diff --git a/source/_components/influxdb.markdown b/source/_components/influxdb.markdown index 3f606caf03..b33bd30d88 100644 --- a/source/_components/influxdb.markdown +++ b/source/_components/influxdb.markdown @@ -27,7 +27,7 @@ You will still need to create a database named `home_assistant` via InfluxDB's c Configuration variables: -- **host** (*Optional*): IP address of your database host, e.g. 192.168.1.10. Defaults to `localhost`. +- **host** (*Optional*): IP address of your database host, e.g., 192.168.1.10. Defaults to `localhost`. - **port** (*Optional*): Port to use. Defaults to 8086. - **username** (*Optional*): The username of the database user. The user needs read/write privileges on the database. - **password** (*Optional*): The password for the database user account. diff --git a/source/_components/input_boolean.markdown b/source/_components/input_boolean.markdown index ff2aa46ca8..b2b23aeeff 100644 --- a/source/_components/input_boolean.markdown +++ b/source/_components/input_boolean.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Input Boolean" -description: "Instructions how to integrate the Input Boolean component into Home Assistant." +description: "Instructions on how to integrate the Input Boolean component into Home Assistant." date: 2016-01-17 16:58 sidebar: true comments: false diff --git a/source/_components/input_datetime.markdown b/source/_components/input_datetime.markdown index 19898029df..462b309e7e 100644 --- a/source/_components/input_datetime.markdown +++ b/source/_components/input_datetime.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Input Datetime" -description: "Instructions how to integrate the Input Datetime component into Home Assistant." +description: "Instructions on how to integrate the Input Datetime component into Home Assistant." date: 2017-09-14 16:01 sidebar: true comments: false diff --git a/source/_components/input_number.markdown b/source/_components/input_number.markdown index 7afaaa255e..44d819c39c 100644 --- a/source/_components/input_number.markdown +++ b/source/_components/input_number.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Input Number" -description: "Instructions how to integrate the Input Number component into Home Assistant." +description: "Instructions on how to integrate the Input Number component into Home Assistant." date: 2017-09-19 03:30 sidebar: true comments: false diff --git a/source/_components/input_select.markdown b/source/_components/input_select.markdown index bf25b89d5f..8e59002ccf 100644 --- a/source/_components/input_select.markdown +++ b/source/_components/input_select.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Input Select" -description: "Instructions how to integrate the Input Select component into Home Assistant." +description: "Instructions on how to integrate the Input Select component into Home Assistant." date: 2016-02-02 17:00 sidebar: true comments: false diff --git a/source/_components/input_text.markdown b/source/_components/input_text.markdown index d0afd0ff09..284ab5ea36 100644 --- a/source/_components/input_text.markdown +++ b/source/_components/input_text.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Input Text" -description: "Instructions how to integrate the Input Text component into Home Assistant." +description: "Instructions on how to integrate the Input Text component into Home Assistant." date: 2016-03-15 06:00 sidebar: true comments: false diff --git a/source/_components/insteon_hub.markdown b/source/_components/insteon_hub.markdown index 03bf4b8a6e..5c9813bc5c 100644 --- a/source/_components/insteon_hub.markdown +++ b/source/_components/insteon_hub.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Insteon Hub" -description: "Instructions how to setup the Insteon Hub within Home Assistant." +description: "Instructions on how to setup the Insteon Hub within Home Assistant." date: 2016-01-27 08:00 sidebar: true comments: false @@ -32,6 +32,6 @@ insteon_hub: Configuration variables: -- **username** (*Required*): The username used to access the Insteon interface (e.g. the [connect.insteon.com](http://connect.insteon.com/) site). +- **username** (*Required*): The username used to access the Insteon interface (e.g., the [connect.insteon.com](http://connect.insteon.com/) site). - **password** (*Required*): The password used to access the Insteon interface. - **api_key** (*Required*): The Insteon REST API key emailed to you once you are approved in the Insteon Developer program. diff --git a/source/_components/insteon_local.markdown b/source/_components/insteon_local.markdown index fba1087171..40ed93c1d5 100644 --- a/source/_components/insteon_local.markdown +++ b/source/_components/insteon_local.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Insteon (local)" -description: "Instructions how to setup the Insteon Hub locally within Home Assistant." +description: "Instructions on how to setup the Insteon Hub locally within Home Assistant." date: 2016-12-18 08:00 sidebar: true comments: false diff --git a/source/_components/insteon_plm.markdown b/source/_components/insteon_plm.markdown index e3fb65bcc9..58a1bad12c 100644 --- a/source/_components/insteon_plm.markdown +++ b/source/_components/insteon_plm.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Insteon PLM" -description: "Instructions how to setup an Insteon USB PLM locally within Home Assistant." +description: "Instructions on how to setup an Insteon USB PLM locally within Home Assistant." date: 2017-02-19 16:00 sidebar: true comments: false @@ -39,7 +39,7 @@ insteon_plm: product_key: PRODUCT_KEY ``` Configuration variables: -- **port** (*Required*): The port for your device, e.g. `/dev/ttyUSB0` +- **port** (*Required*): The port for your device, e.g., `/dev/ttyUSB0` - **device_override** (*Optional*): Override the default device definition - *ADDRESS* is found on the device itself in the form 1A.2B.3C or 1a2b3c - *CATEGORY* is found in the back of the device's User Guide in the form of @@ -80,7 +80,7 @@ disclaimers carefully, they are important. The only configuration item that is absolutely necessary is the port so that Home Assistant can connect to the PLM. This will expose all the supported INSTEON devices which exist in the modem's ALL-Link database. However, devices will -only be shown by their INSTEON hex address (e.g. "1A.2B.3C") which can be a bit +only be shown by their INSTEON hex address (e.g., "1A.2B.3C") which can be a bit unwieldy. As you link and unlink devices using the 'Set' buttons, they'll be added and removed from Home Assistant automatically. diff --git a/source/_components/isy994.markdown b/source/_components/isy994.markdown index 558765a764..ecf2716825 100644 --- a/source/_components/isy994.markdown +++ b/source/_components/isy994.markdown @@ -1,7 +1,7 @@ --- layout: page title: "ISY994 Controller" -description: "Instructions how to setup the ISY994 controller within Home Assistant." +description: "Instructions on how to setup the ISY994 controller within Home Assistant." date: 2015-01-20 22:36 sidebar: true comments: false diff --git a/source/_components/juicenet.markdown b/source/_components/juicenet.markdown index 5015022c55..5df8b274e6 100644 --- a/source/_components/juicenet.markdown +++ b/source/_components/juicenet.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Juicenet" -description: "Instructions how to setup WiFi-equipped Juicenet charging stations with Home Assistant." +description: "Instructions on how to setup WiFi-equipped Juicenet charging stations with Home Assistant." date: 2017-05-20 22:00 sidebar: true comments: false diff --git a/source/_components/keyboard.markdown b/source/_components/keyboard.markdown index 07b3e2db26..00dad71931 100644 --- a/source/_components/keyboard.markdown +++ b/source/_components/keyboard.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Keyboard" -description: "Instructions how to simulate key presses with Home Assistant." +description: "Instructions on how to simulate key presses with Home Assistant." date: 2015-01-24 14:39 sidebar: true comments: false diff --git a/source/_components/keyboard_remote.markdown b/source/_components/keyboard_remote.markdown index f1d80bfa97..aeefd01e63 100644 --- a/source/_components/keyboard_remote.markdown +++ b/source/_components/keyboard_remote.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Keyboard Remote" -description: "Instructions how to use a keyboard to remote control Home Assistant." +description: "Instructions on how to use a keyboard to remote control Home Assistant." date: 2016-09-28 14:39 sidebar: true comments: false diff --git a/source/_components/kira.markdown b/source/_components/kira.markdown index d2c2594834..b32ae95eac 100644 --- a/source/_components/kira.markdown +++ b/source/_components/kira.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Kira" -description: "Instructions how to integrate Keene Electronics IR over IP modules (Kira) into Home Assistant." +description: "Instructions on how to integrate Keene Electronics IR over IP modules (Kira) into Home Assistant." date: 2017-05-07 00:00 sidebar: true comments: false @@ -76,7 +76,7 @@ Configuration variables: - **type** (*Optional*): The type of this code. If this field is omitted, the type will be autodetected if possible. - **repeat** (*Optional*): The number of times to repeat this code (on transmit). Default is 1. -Some manufacturers (e.g. Samsung) require an IR code to be sent a number of times in a row in rapid succession (usually 3). This doesn't apply to the vast majority of devices, but it can be helpful if needed. +Some manufacturers (e.g., Samsung) require an IR code to be sent a number of times in a row in rapid succession (usually 3). This doesn't apply to the vast majority of devices, but it can be helpful if needed. ### {% linkable_title Code Types %} diff --git a/source/_components/knx.markdown b/source/_components/knx.markdown index ee731d020d..f27048d4e7 100644 --- a/source/_components/knx.markdown +++ b/source/_components/knx.markdown @@ -115,7 +115,7 @@ knx: address: '0/0/23' ``` -* **type**: Type of the exposed value. Either time or datetime or any supported type of [KNX Sensor](/components/sensor.knx/) (e.g. "temperature" or "humidity"). +* **type**: Type of the exposed value. Either time or datetime or any supported type of [KNX Sensor](/components/sensor.knx/) (e.g., "temperature" or "humidity"). * **entity_id**: Entity id of the HASS component to be exposed. Not necessarry for types time and datetime. * **address**: KNX group address. diff --git a/source/_components/light.abode.markdown b/source/_components/light.abode.markdown index bb6d597dee..f362107791 100644 --- a/source/_components/light.abode.markdown +++ b/source/_components/light.abode.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Abode Light" -description: "Instructions how to integrate Abode lights into Home Assistant." +description: "Instructions on how to integrate Abode lights into Home Assistant." date: 2017-08-26 13:28 sidebar: true comments: false diff --git a/source/_components/light.ads.markdown b/source/_components/light.ads.markdown index b5188cf33e..aaedc1c12f 100644 --- a/source/_components/light.ads.markdown +++ b/source/_components/light.ads.markdown @@ -1,7 +1,7 @@ --- layout: page title: "ADS Light" -description: Instructions how to set up ADS lights within Home Assistant +description: Instructions on how to set up ADS lights within Home Assistant date: 2017-10-25 10:00 sidebar: true comments: false diff --git a/source/_components/light.blinksticklight.markdown b/source/_components/light.blinksticklight.markdown index 9deab2be84..c11da280ac 100644 --- a/source/_components/light.blinksticklight.markdown +++ b/source/_components/light.blinksticklight.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Blinkstick" -description: "Instructions how to setup Blinkstick lights within Home Assistant." +description: "Instructions on how to setup Blinkstick lights within Home Assistant." date: 2015-10-08 10:00 sidebar: true comments: false diff --git a/source/_components/light.blinkt.markdown b/source/_components/light.blinkt.markdown index 617e81cac2..ad2d6200f8 100644 --- a/source/_components/light.blinkt.markdown +++ b/source/_components/light.blinkt.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Blinkt!" -description: "Instructions how to setup Blinkt! RGB LED lights within Home Assistant." +description: "Instructions on how to setup Blinkt! RGB LED lights within Home Assistant." date: 2017-04-30 9:00 sidebar: true comments: false diff --git a/source/_components/light.flux_led.markdown b/source/_components/light.flux_led.markdown index e74e6942d9..871ba222e2 100644 --- a/source/_components/light.flux_led.markdown +++ b/source/_components/light.flux_led.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Flux Led/MagicLight" -description: "Instructions how to setup Flux led/MagicLight within Home Assistant." +description: "Instructions on how to setup Flux led/MagicLight within Home Assistant." date: 2015-07-17 20:09 sidebar: true comments: false diff --git a/source/_components/light.greenwave.markdown b/source/_components/light.greenwave.markdown index a0cba942d4..16f8e16099 100644 --- a/source/_components/light.greenwave.markdown +++ b/source/_components/light.greenwave.markdown @@ -27,7 +27,7 @@ light: host: XXX.XXX.XXX.XXX version: 3 ``` -The version option is the major revision of your firmware, which should be 2 or 3. If you are running Version 2, there are no extra steps. If you are running Version 3, you must press the Sync button on the gateway prior to the first launch of Home Assistant, so a token can be grabbed. Once home assistant has started, you can either press the Sync button again or wait for it to time out manually. +The version option is the major revision of your firmware, which should be 2 or 3. If you are running Version 2, there are no extra steps. If you are running Version 3, you must press the Sync button on the gateway prior to the first launch of Home Assistant, so a token can be grabbed. Once Home Assistant has started, you can either press the Sync button again or wait for it to time out manually. {% configuration %} host: diff --git a/source/_components/light.homematic.markdown b/source/_components/light.homematic.markdown index b2223ae9e4..86249ce98e 100644 --- a/source/_components/light.homematic.markdown +++ b/source/_components/light.homematic.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Homematic Light" -description: "Instructions how to integrate Homematic lights within Home Assistant." +description: "Instructions on how to integrate Homematic lights within Home Assistant." date: 2016-06-28 08:30 sidebar: true comments: false diff --git a/source/_components/light.hue.markdown b/source/_components/light.hue.markdown index 8cd9aad47e..59e8b8e970 100644 --- a/source/_components/light.hue.markdown +++ b/source/_components/light.hue.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Philips Hue Light" -description: "Instructions how to integrate Philips Hue lights into Home Assistant." +description: "Instructions on how to integrate Philips Hue lights into Home Assistant." date: 2015-03-23 20:09 sidebar: true comments: false diff --git a/source/_components/light.hyperion.markdown b/source/_components/light.hyperion.markdown index 7f3b23ad6c..7cba5e18f4 100644 --- a/source/_components/light.hyperion.markdown +++ b/source/_components/light.hyperion.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Hyperion" -description: "Instructions how to integrate Hyperion into Home Assistant." +description: "Instructions on how to integrate Hyperion into Home Assistant." date: 2015-10-25 22:43 sidebar: true comments: false diff --git a/source/_components/light.ihc.markdown b/source/_components/light.ihc.markdown index 741d2168cd..214f19564b 100644 --- a/source/_components/light.ihc.markdown +++ b/source/_components/light.ihc.markdown @@ -1,7 +1,7 @@ --- layout: page title: "IHC Light" -description: "Instructions how to integrate IHC lights within Home Assistant." +description: "Instructions on how to integrate IHC lights within Home Assistant." date: 2017-11-27 13:35 sidebar: true comments: false diff --git a/source/_components/light.insteon_hub.markdown b/source/_components/light.insteon_hub.markdown index 82c4df9aa5..f581706b92 100644 --- a/source/_components/light.insteon_hub.markdown +++ b/source/_components/light.insteon_hub.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Insteon Hub Light" -description: "Instructions how to setup the Insteon Hub Lights within Home Assistant." +description: "Instructions on how to setup the Insteon Hub Lights within Home Assistant." date: 2016-09-10 08:00 sidebar: true comments: false diff --git a/source/_components/light.insteon_local.markdown b/source/_components/light.insteon_local.markdown index 06af902dfd..b9aacb3250 100644 --- a/source/_components/light.insteon_local.markdown +++ b/source/_components/light.insteon_local.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Insteon (Local) Light" -description: "Instructions how to setup the Insteon Hub Lights locally within Home Assistant." +description: "Instructions on how to setup the Insteon Hub Lights locally within Home Assistant." date: 2016-12-18 08:00 sidebar: true comments: false diff --git a/source/_components/light.insteon_plm.markdown b/source/_components/light.insteon_plm.markdown index 04ab92bdee..65026cf576 100644 --- a/source/_components/light.insteon_plm.markdown +++ b/source/_components/light.insteon_plm.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Insteon PLM Light" -description: "Instructions how to setup Insteon PLM lights locally within Home Assistant." +description: "Instructions on how to setup Insteon PLM lights locally within Home Assistant." date: 2017-02-19 17:00 sidebar: true comments: false diff --git a/source/_components/light.isy994.markdown b/source/_components/light.isy994.markdown index 8ae450edfc..6c03413c8b 100644 --- a/source/_components/light.isy994.markdown +++ b/source/_components/light.isy994.markdown @@ -1,7 +1,7 @@ --- layout: page title: "ISY994 Light" -description: "Instructions how to integrate ISY994 lights into Home Assistant." +description: "Instructions on how to integrate ISY994 lights into Home Assistant." date: 2016-09-03 23:00 sidebar: true comments: false diff --git a/source/_components/light.lifx.markdown b/source/_components/light.lifx.markdown index 805cb67e68..04f444540f 100644 --- a/source/_components/light.lifx.markdown +++ b/source/_components/light.lifx.markdown @@ -1,7 +1,7 @@ --- layout: page title: "LIFX" -description: "Instructions how to integrate LIFX into Home Assistant." +description: "Instructions on how to integrate LIFX into Home Assistant." date: 2016-01-27 08:00 sidebar: true comments: false diff --git a/source/_components/light.litejet.markdown b/source/_components/light.litejet.markdown index d51cfd70c7..fedc9fa2be 100644 --- a/source/_components/light.litejet.markdown +++ b/source/_components/light.litejet.markdown @@ -1,7 +1,7 @@ --- layout: page title: "LiteJet Light" -description: "Instructions how to setup the LiteJet lights within Home Assistant." +description: "Instructions on how to setup the LiteJet lights within Home Assistant." date: 2016-10-26 13:00 sidebar: true comments: false diff --git a/source/_components/light.lutron.markdown b/source/_components/light.lutron.markdown index 3872b5373b..9e380e8d7c 100644 --- a/source/_components/light.lutron.markdown +++ b/source/_components/light.lutron.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Lutron Light" -description: "Instructions how to setup the Lutron lights within Home Assistant." +description: "Instructions on how to setup the Lutron lights within Home Assistant." date: 2017-04-30 09:00 sidebar: true comments: false diff --git a/source/_components/light.lutron_caseta.markdown b/source/_components/light.lutron_caseta.markdown index 02e15710d6..4c61accdc6 100644 --- a/source/_components/light.lutron_caseta.markdown +++ b/source/_components/light.lutron_caseta.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Lutron Caseta Light" -description: "Instructions how to setup the Lutron Caseta lights within Home Assistant." +description: "Instructions on how to setup the Lutron Caseta lights within Home Assistant." date: 2017-04-30 09:00 sidebar: true comments: false diff --git a/source/_components/light.markdown b/source/_components/light.markdown index 4370674890..54cd5adbc4 100644 --- a/source/_components/light.markdown +++ b/source/_components/light.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Lights" -description: "Instructions how to setup your lights with Home Assistant." +description: "Instructions on how to setup your lights with Home Assistant." date: 2015-01-24 14:39 sidebar: true comments: false diff --git a/source/_components/light.mochad.markdown b/source/_components/light.mochad.markdown index 2902cb71be..fdd288113f 100644 --- a/source/_components/light.mochad.markdown +++ b/source/_components/light.mochad.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Mochad Light" -description: "Instructions how to integrate X10 Mochad lights into Home Assistant." +description: "Instructions on how to integrate X10 Mochad lights into Home Assistant." date: 2017-07-14 11:29 sidebar: true comments: false diff --git a/source/_components/light.mqtt.markdown b/source/_components/light.mqtt.markdown index ec582bfb0f..902255eeb4 100644 --- a/source/_components/light.mqtt.markdown +++ b/source/_components/light.mqtt.markdown @@ -1,7 +1,7 @@ --- layout: page title: "MQTT Light" -description: "Instructions how to setup MQTT lights within Home Assistant." +description: "Instructions on how to setup MQTT lights within Home Assistant." date: 2015-11-13 08:30 sidebar: true comments: false diff --git a/source/_components/light.mqtt_template.markdown b/source/_components/light.mqtt_template.markdown index 5a13ea9dfb..1838835017 100644 --- a/source/_components/light.mqtt_template.markdown +++ b/source/_components/light.mqtt_template.markdown @@ -140,7 +140,7 @@ In this section you find some real life examples of how to use this light. ### {% linkable_title Simple string payload %} -For a simple string payload with the format `state,brightness,r-g-b` (e.g. `on,255,255-255-255`), add the following to your `configuration.yaml` file: +For a simple string payload with the format `state,brightness,r-g-b` (e.g., `on,255,255-255-255`), add the following to your `configuration.yaml` file: ```yaml # Example configuration.yaml entry diff --git a/source/_components/light.mysensors.markdown b/source/_components/light.mysensors.markdown index 4bf9a9d28a..5f91aa43fe 100644 --- a/source/_components/light.mysensors.markdown +++ b/source/_components/light.mysensors.markdown @@ -1,7 +1,7 @@ --- layout: page title: "MySensors Light" -description: "Instructions how to integrate MySensors lights into Home Assistant." +description: "Instructions on how to integrate MySensors lights into Home Assistant." date: 2016-10-01 15:00 +0200 sidebar: true comments: false diff --git a/source/_components/light.mystrom.markdown b/source/_components/light.mystrom.markdown index f9ceacdb22..9cc2555fb1 100644 --- a/source/_components/light.mystrom.markdown +++ b/source/_components/light.mystrom.markdown @@ -1,7 +1,7 @@ --- layout: page title: "myStrom WiFi Bulb" -description: "Instructions how to integrate myStrom WiFi Bulbs into Home Assistant." +description: "Instructions on how to integrate myStrom WiFi Bulbs into Home Assistant." date: 2017-04-18 06:00 sidebar: true comments: false diff --git a/source/_components/light.osramlightify.markdown b/source/_components/light.osramlightify.markdown index 86fa342c9b..df1abeece9 100644 --- a/source/_components/light.osramlightify.markdown +++ b/source/_components/light.osramlightify.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Osram Lightify" -description: "Instructions how to integrate Osram Lightify into Home Assistant." +description: "Instructions on how to integrate Osram Lightify into Home Assistant." date: 2016-05-29 08:00 sidebar: true comments: false diff --git a/source/_components/light.piglow.markdown b/source/_components/light.piglow.markdown index d261a81648..c2664af84c 100644 --- a/source/_components/light.piglow.markdown +++ b/source/_components/light.piglow.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Piglow" -description: "Instructions how to setup Piglow LED's within Home Assistant." +description: "Instructions on how to setup Piglow LED's within Home Assistant." date: 2017-01-13 18:00 sidebar: true comments: false diff --git a/source/_components/light.qwikswitch.markdown b/source/_components/light.qwikswitch.markdown index e1f600c98f..13f61413f6 100644 --- a/source/_components/light.qwikswitch.markdown +++ b/source/_components/light.qwikswitch.markdown @@ -1,7 +1,7 @@ --- layout: page title: "QwikSwitch Light" -description: "Instructions how to integrate Qwikswitch dimmers and relays as lights into Home Assistant." +description: "Instructions on how to integrate Qwikswitch dimmers and relays as lights into Home Assistant." date: 2016-05-04 00:00 sidebar: true comments: false diff --git a/source/_components/light.rflink.markdown b/source/_components/light.rflink.markdown index ebba128f88..cc56e6de3e 100644 --- a/source/_components/light.rflink.markdown +++ b/source/_components/light.rflink.markdown @@ -1,7 +1,7 @@ --- layout: page title: "RFLink Light" -description: "Instructions how to integrate RFLink lights into Home Assistant." +description: "Instructions on how to integrate RFLink lights into Home Assistant." date: 2016-01-04 sidebar: true comments: false diff --git a/source/_components/light.rfxtrx.markdown b/source/_components/light.rfxtrx.markdown index ee5c513fe8..b6a1b707cf 100644 --- a/source/_components/light.rfxtrx.markdown +++ b/source/_components/light.rfxtrx.markdown @@ -1,7 +1,7 @@ --- layout: page title: "RFXtrx Light" -description: "Instructions how to integrate RFXtrx lights into Home Assistant." +description: "Instructions on how to integrate RFXtrx lights into Home Assistant." date: 2015-10-08 10:15 sidebar: true comments: false diff --git a/source/_components/light.scsgate.markdown b/source/_components/light.scsgate.markdown index 5625b43cfb..07df0ca0f7 100644 --- a/source/_components/light.scsgate.markdown +++ b/source/_components/light.scsgate.markdown @@ -1,7 +1,7 @@ --- layout: page title: "SCSGate Light" -description: "Instructions how to integrate SCSGate lights into Home Assistant." +description: "Instructions on how to integrate SCSGate lights into Home Assistant." date: 2016-01-31 19:30 sidebar: true comments: false diff --git a/source/_components/light.sensehat.markdown b/source/_components/light.sensehat.markdown index b2bb9dbce5..55e09b1219 100644 --- a/source/_components/light.sensehat.markdown +++ b/source/_components/light.sensehat.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Sense HAT Light" -description: "Instructions how to setup Sense HAT LED lights within Home Assistant." +description: "Instructions on how to setup Sense HAT LED lights within Home Assistant." date: 2017-04-29 16:00 sidebar: true comments: false diff --git a/source/_components/light.tellstick.markdown b/source/_components/light.tellstick.markdown index a81d238464..b4b71bc4e1 100644 --- a/source/_components/light.tellstick.markdown +++ b/source/_components/light.tellstick.markdown @@ -1,7 +1,7 @@ --- layout: page title: "TellStick Light" -description: "Instructions how to integrate TellStick lights into Home Assistant." +description: "Instructions on how to integrate TellStick lights into Home Assistant." date: 2015-08-06 19:00 sidebar: true comments: false diff --git a/source/_components/light.template.markdown b/source/_components/light.template.markdown index a9f1b834e4..9d1315b310 100755 --- a/source/_components/light.template.markdown +++ b/source/_components/light.template.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Template Light" -description: "Instructions how to integrate Template Lights into Home Assistant." +description: "Instructions on how to integrate Template Lights into Home Assistant." date: 2016-05-18 20:32 sidebar: true comments: false diff --git a/source/_components/light.tplink.markdown b/source/_components/light.tplink.markdown index 71fc4e9717..158504bcae 100644 --- a/source/_components/light.tplink.markdown +++ b/source/_components/light.tplink.markdown @@ -1,7 +1,7 @@ --- layout: page title: "TP-Link Bulb" -description: "Instructions how to integrate TP-Link bulbs into Home Assistant." +description: "Instructions on how to integrate TP-Link bulbs into Home Assistant." date: 2017-07-25 08:00 sidebar: true comments: false diff --git a/source/_components/light.vera.markdown b/source/_components/light.vera.markdown index da0fc42fff..dba42ffcaf 100644 --- a/source/_components/light.vera.markdown +++ b/source/_components/light.vera.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Vera Light" -description: "Instructions how to integrate Vera lights into Home Assistant." +description: "Instructions on how to integrate Vera lights into Home Assistant." date: 2015-10-20 21:00 sidebar: true comments: false diff --git a/source/_components/light.wemo.markdown b/source/_components/light.wemo.markdown index df44818d04..1ae147ef86 100644 --- a/source/_components/light.wemo.markdown +++ b/source/_components/light.wemo.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Belkin WeMo Lights" -description: "Instructions how to integrate Belkin WeMo LED lights and WeMo Dimmer Switch into Home Assistant." +description: "Instructions on how to integrate Belkin WeMo LED lights and WeMo Dimmer Switch into Home Assistant." date: 2016-02-20 00:45 sidebar: true comments: false diff --git a/source/_components/light.wink.markdown b/source/_components/light.wink.markdown index 5e7b74771e..e537c11601 100644 --- a/source/_components/light.wink.markdown +++ b/source/_components/light.wink.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Wink Light" -description: "Instructions how to setup the Wink lights within Home Assistant." +description: "Instructions on how to setup the Wink lights within Home Assistant." date: 2015-01-20 22:36 sidebar: true comments: false diff --git a/source/_components/light.x10.markdown b/source/_components/light.x10.markdown index b79a881441..45df065a49 100644 --- a/source/_components/light.x10.markdown +++ b/source/_components/light.x10.markdown @@ -1,7 +1,7 @@ --- layout: page title: "X10" -description: "Instructions how to setup X10 devices within Home Assistant." +description: "Instructions on how to setup X10 devices within Home Assistant." date: 2016-07-27 sidebar: true comments: false diff --git a/source/_components/light.xiaomi_aqara.markdown b/source/_components/light.xiaomi_aqara.markdown index 25e01ba22c..48bf4fb135 100644 --- a/source/_components/light.xiaomi_aqara.markdown +++ b/source/_components/light.xiaomi_aqara.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Xiaomi Light" -description: "Instructions how to setup the Xiaomi light within Home Assistant." +description: "Instructions on how to setup the Xiaomi light within Home Assistant." date: 2017-07-21 16:34 sidebar: true comments: false diff --git a/source/_components/light.xiaomi_miio.markdown b/source/_components/light.xiaomi_miio.markdown index 3af241a04e..fab4ca5401 100644 --- a/source/_components/light.xiaomi_miio.markdown +++ b/source/_components/light.xiaomi_miio.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Xiaomi Philips Light" -description: "Instructions how to integrate your Xiaomi Philips Lights within Home Assistant." +description: "Instructions on how to integrate your Xiaomi Philips Lights within Home Assistant." date: 2017-08-26 08:45 sidebar: true comments: false diff --git a/source/_components/light.yeelight.markdown b/source/_components/light.yeelight.markdown index b098d007d5..8cd203eb4c 100644 --- a/source/_components/light.yeelight.markdown +++ b/source/_components/light.yeelight.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Yeelight Wifi Bulb" -description: "Instructions how to setup Yeelight Wifi devices within Home Assistant." +description: "Instructions on how to setup Yeelight Wifi devices within Home Assistant." date: 2016-10-29 sidebar: true comments: false diff --git a/source/_components/light.yeelightsunflower.markdown b/source/_components/light.yeelightsunflower.markdown index 1b0e441970..0583084626 100644 --- a/source/_components/light.yeelightsunflower.markdown +++ b/source/_components/light.yeelightsunflower.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Yeelight Sunflower Bulb" -description: "Instructions how to setup Yeelight Sunflower hub and bulbs within Home Assistant." +description: "Instructions on how to setup Yeelight Sunflower hub and bulbs within Home Assistant." date: 2017-02-11 sidebar: true comments: false diff --git a/source/_components/light.zengge.markdown b/source/_components/light.zengge.markdown index ed15a92752..b2f46b065d 100644 --- a/source/_components/light.zengge.markdown +++ b/source/_components/light.zengge.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Zengge" -description: "Instructions how to integrate Zengge Bluetooth bulbs into Home Assistant." +description: "Instructions on how to integrate Zengge Bluetooth bulbs into Home Assistant." date: 2017-01-14 08:00 sidebar: true comments: false diff --git a/source/_components/light.zha.markdown b/source/_components/light.zha.markdown index c3b0cc2d8b..904c1e59de 100644 --- a/source/_components/light.zha.markdown +++ b/source/_components/light.zha.markdown @@ -1,7 +1,7 @@ --- layout: page title: "ZigBee Home Automation Light" -description: "Instructions how to setup ZigBee Home Automation lights within Home Assistant." +description: "Instructions on how to setup ZigBee Home Automation lights within Home Assistant." date: 2017-02-22 00:00 sidebar: true comments: false diff --git a/source/_components/light.zwave.markdown b/source/_components/light.zwave.markdown index 4053e61f1d..891f63e886 100644 --- a/source/_components/light.zwave.markdown +++ b/source/_components/light.zwave.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Z-Wave Light" -description: "Instructions how to setup the Z-Wave lights within Home Assistant." +description: "Instructions on how to setup the Z-Wave lights within Home Assistant." date: 2015-11-11 13:00 sidebar: true comments: false diff --git a/source/_components/lirc.markdown b/source/_components/lirc.markdown index 6d379e04ca..68782e6c23 100644 --- a/source/_components/lirc.markdown +++ b/source/_components/lirc.markdown @@ -1,7 +1,7 @@ --- layout: page title: "LIRC" -description: "Instructions how to integrate IR remotes with LIRC into Home Assistant." +description: "Instructions on how to integrate IR remotes with LIRC into Home Assistant." date: 2016-05-22 19:59 sidebar: true comments: false @@ -39,7 +39,7 @@ For more information have a look at `/usr/share/doc/lirc/README.Debian.gz` where ### {% linkable_title Configuring LIRC %} -Now teach LIRC about your particular remote control by preparing a lircd configuration file (`/etc/lirc/lircd.conf`). Search the [LIRC remote database](http://lirc.sourceforge.net/remotes/) for your model. If you can't find it, then you can always use the `irrecord` program to learn your remote. This will create a valid configuration file. Add as many remotes as you want by pasting them into the file. If `irrecord` doesn't work (e.g. for some air conditioner remotes), then the `mode2` program is capable of reading the codes in raw mode, followed by `irrecord -a` to extract hex codes. +Now teach LIRC about your particular remote control by preparing a lircd configuration file (`/etc/lirc/lircd.conf`). Search the [LIRC remote database](http://lirc.sourceforge.net/remotes/) for your model. If you can't find it, then you can always use the `irrecord` program to learn your remote. This will create a valid configuration file. Add as many remotes as you want by pasting them into the file. If `irrecord` doesn't work (e.g., for some air conditioner remotes), then the `mode2` program is capable of reading the codes in raw mode, followed by `irrecord -a` to extract hex codes. Next, you have to make a `~/.lircrc` file that maps keypresses to system actions. [The configuration](http://www.lirc.org/html/configure.html) is a bit tedious but it must be done. Use the `prog = home-assistant` for all keys you want to be recognized by Home Assistant. The values you set for `button` must be the same as in the `lircd.conf` file and the values you put for `config` entry will be the sensor value in Home Assistant when you press the button. An example may look like this: @@ -98,4 +98,4 @@ automation: entity_id: group.a_lights ``` -The `button_name` data values (e.g. `KEY_0`) are set by you in the `.lircrc` file. +The `button_name` data values (e.g., `KEY_0`) are set by you in the `.lircrc` file. diff --git a/source/_components/litejet.markdown b/source/_components/litejet.markdown index 3770bb024b..fb33408953 100644 --- a/source/_components/litejet.markdown +++ b/source/_components/litejet.markdown @@ -1,7 +1,7 @@ --- layout: page title: "LiteJet" -description: "Instructions how to setup the LiteJet hub within Home Assistant." +description: "Instructions on how to setup the LiteJet hub within Home Assistant." date: 2015-10-26 09:37 sidebar: true comments: false diff --git a/source/_components/lock.abode.markdown b/source/_components/lock.abode.markdown index c1e2860370..9dcc3cff90 100644 --- a/source/_components/lock.abode.markdown +++ b/source/_components/lock.abode.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Abode Lock" -description: "Instructions how to integrate Abode locks into Home Assistant." +description: "Instructions on how to integrate Abode locks into Home Assistant." date: 2017-08-26 13:28 sidebar: true comments: false diff --git a/source/_components/lock.isy994.markdown b/source/_components/lock.isy994.markdown index 04109b9cd6..b019662a68 100644 --- a/source/_components/lock.isy994.markdown +++ b/source/_components/lock.isy994.markdown @@ -1,7 +1,7 @@ --- layout: page title: "ISY994 Lock" -description: "Instructions how to integrate ISY994 locks into Home Assistant." +description: "Instructions on how to integrate ISY994 locks into Home Assistant." date: 2016-09-03 23:00 sidebar: true comments: false diff --git a/source/_components/lock.lockitron.markdown b/source/_components/lock.lockitron.markdown index 418881c169..6b320e7108 100644 --- a/source/_components/lock.lockitron.markdown +++ b/source/_components/lock.lockitron.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Lockitron Lock" -description: "Instructions how to integrate Lockitron locks into Home Assistant." +description: "Instructions on how to integrate Lockitron locks into Home Assistant." date: 2017-03-24 00:00 sidebar: true comments: false diff --git a/source/_components/lock.markdown b/source/_components/lock.markdown index c2c3cc5530..67d5b6509a 100644 --- a/source/_components/lock.markdown +++ b/source/_components/lock.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Locks" -description: "Instructions how to setup your locks with Home Assistant." +description: "Instructions on how to setup your locks with Home Assistant." date: 2015-11-21 08:10 sidebar: true comments: false diff --git a/source/_components/lock.mqtt.markdown b/source/_components/lock.mqtt.markdown index 8ed47ccf4a..b0669cfb7f 100644 --- a/source/_components/lock.mqtt.markdown +++ b/source/_components/lock.mqtt.markdown @@ -1,7 +1,7 @@ --- layout: page title: "MQTT Lock" -description: "Instructions how to integrate MQTT locks into Home Assistant." +description: "Instructions on how to integrate MQTT locks into Home Assistant." date: 2016-02-28 15:00 sidebar: true comments: false diff --git a/source/_components/lock.vera.markdown b/source/_components/lock.vera.markdown index 8baf864dfd..a305038987 100644 --- a/source/_components/lock.vera.markdown +++ b/source/_components/lock.vera.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Vera Lock" -description: "Instructions how to integrate Vera locks into Home Assistant." +description: "Instructions on how to integrate Vera locks into Home Assistant." date: 2016-06-29 15:00 sidebar: true comments: false diff --git a/source/_components/lock.verisure.markdown b/source/_components/lock.verisure.markdown index 2e72677179..e3c2d31e85 100644 --- a/source/_components/lock.verisure.markdown +++ b/source/_components/lock.verisure.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Verisure Lock" -description: "Instructions how to setup the Verisure locks within Home Assistant." +description: "Instructions on how to setup the Verisure locks within Home Assistant." date: 2016-02-12 06:00 sidebar: true comments: false diff --git a/source/_components/lock.wink.markdown b/source/_components/lock.wink.markdown index 1f51751b3f..a792e130a8 100644 --- a/source/_components/lock.wink.markdown +++ b/source/_components/lock.wink.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Wink Lock" -description: "Instructions how to setup the Wink locks within Home Assistant." +description: "Instructions on how to setup the Wink locks within Home Assistant." date: 2015-11-20 12:00 sidebar: true comments: false diff --git a/source/_components/lock.zwave.markdown b/source/_components/lock.zwave.markdown index e1d6fd7b33..ba25eacd6c 100644 --- a/source/_components/lock.zwave.markdown +++ b/source/_components/lock.zwave.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Z-Wave Lock" -description: "Instructions how to setup the Z-Wave Locks within Home Assistant." +description: "Instructions on how to setup the Z-Wave Locks within Home Assistant." date: 2016-05-07 08:00 sidebar: true comments: false diff --git a/source/_components/logbook.markdown b/source/_components/logbook.markdown index d1a76f3973..438e747430 100644 --- a/source/_components/logbook.markdown +++ b/source/_components/logbook.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Logbook" -description: "Instructions how to enable the logbook component for Home Assistant." +description: "Instructions on how to enable the logbook component for Home Assistant." date: 2015-04-25 9:23 sidebar: true comments: false @@ -11,7 +11,7 @@ logo: logbook.png ha_category: "History" --- - The logbook component provides a different perspective on the history of your house by showing all the changes that happened to your house in reverse chronological order. [See the demo for a live example](/demo/). It depends on the `recorder` component for storing the data. This means that if the [`recorder`](/components/recorder/) component is set up to use e.g. MySQL or PostgreSQL as data store, the `logbook` component does not use the default SQLite database to store data. + The logbook component provides a different perspective on the history of your house by showing all the changes that happened to your house in reverse chronological order. [See the demo for a live example](/demo/). It depends on the `recorder` component for storing the data. This means that if the [`recorder`](/components/recorder/) component is set up to use e.g., MySQL or PostgreSQL as data store, the `logbook` component does not use the default SQLite database to store data. To enable the logbook in your installation, add the following to your `configuration.yaml` file: diff --git a/source/_components/logger.markdown b/source/_components/logger.markdown index 70168cf440..2f89e09096 100644 --- a/source/_components/logger.markdown +++ b/source/_components/logger.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Logger" -description: "Instructions how to enable the logger component for Home Assistant." +description: "Instructions on how to enable the logger component for Home Assistant." date: 2015-11-12 17:00 sidebar: true comments: false diff --git a/source/_components/lutron.markdown b/source/_components/lutron.markdown index c946160db1..67bdb19dd9 100644 --- a/source/_components/lutron.markdown +++ b/source/_components/lutron.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Lutron" -description: "Instructions how to use Lutron devices with Home Assistant." +description: "Instructions on how to use Lutron devices with Home Assistant." date: 2017-01-28 13:00 sidebar: true comments: false diff --git a/source/_components/lutron_caseta.markdown b/source/_components/lutron_caseta.markdown index 912bd82dc4..9783766c89 100644 --- a/source/_components/lutron_caseta.markdown +++ b/source/_components/lutron_caseta.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Lutron Caseta" -description: "Instructions how to use Lutron Caseta devices with Home Assistant." +description: "Instructions on how to use Lutron Caseta devices with Home Assistant." date: 2017-01-28 13:00 sidebar: true comments: false @@ -25,7 +25,7 @@ The currently supported Caseta devices are: - Scenes as Home Assistant [scenes](/components/scene.lutron_caseta/) - Lutron shades as Home Assistant [covers](/components/cover.lutron_caseta/) -When configured, the `lutron_caseta` component will automatically discover the currently supported devices as setup in the Lutron Smart Bridge. The name assigned in the Lutron mobile app will be used to form the `entity_id` used in Home Assistant. e.g. a dimmer called 'Bedroom Lamp' becomes `light.bedroom_lamp` in Home Assistant. +When configured, the `lutron_caseta` component will automatically discover the currently supported devices as setup in the Lutron Smart Bridge. The name assigned in the Lutron mobile app will be used to form the `entity_id` used in Home Assistant. e.g., a dimmer called 'Bedroom Lamp' becomes `light.bedroom_lamp` in Home Assistant. To use Lutron Caseta devices in your installation, you must first log in to your Lutron account and generate a certificate that allows Home Assistant to connect to your bridge. This can be accomplished by downloading and executing [this script](/assets/get_lutron_cert.zip), which will generate three files: caseta.key, caseta.crt, caseta-bridge.crt when you run it. See the instructions at the top of the script for more information. diff --git a/source/_components/mailbox.asterisk_mbox.markdown b/source/_components/mailbox.asterisk_mbox.markdown index 25a0859aa9..bc25b5b10b 100644 --- a/source/_components/mailbox.asterisk_mbox.markdown +++ b/source/_components/mailbox.asterisk_mbox.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Asterisk Voicemail Mailbox" -description: "Instructions how to integrate an Asterisk Voicemail within Home Assistant." +description: "Instructions on how to integrate an Asterisk Voicemail within Home Assistant." date: 2017-06-30 18:30 sidebar: true comments: false diff --git a/source/_components/mailbox.markdown b/source/_components/mailbox.markdown index 28f4d77f43..16bfa603b8 100644 --- a/source/_components/mailbox.markdown +++ b/source/_components/mailbox.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Mailbox" -description: "Instructions how to setup your mailboxes with Home Assistant." +description: "Instructions on how to setup your mailboxes with Home Assistant." date: 2017-06-30 18:30 sidebar: true comments: false diff --git a/source/_components/mailgun.markdown b/source/_components/mailgun.markdown index 78764d7507..2f13d2c062 100644 --- a/source/_components/mailgun.markdown +++ b/source/_components/mailgun.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Mailgun" -description: "Instructions how to add Mailgun mail notifications to Home Assistant." +description: "Instructions on how to add Mailgun mail notifications to Home Assistant." date: 2017-02-06 16:52 sidebar: true comments: false diff --git a/source/_components/media_extractor.markdown b/source/_components/media_extractor.markdown index 114d70f3fe..8386b0390a 100644 --- a/source/_components/media_extractor.markdown +++ b/source/_components/media_extractor.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Media Extractor" -description: "Instructions how to integrate the Media Extractor into Home Assistant." +description: "Instructions on how to integrate the Media Extractor into Home Assistant." date: 2017-07-12 07:00 sidebar: true comments: false diff --git a/source/_components/media_player.anthemav.markdown b/source/_components/media_player.anthemav.markdown index 945fdc0c64..8e59296db9 100644 --- a/source/_components/media_player.anthemav.markdown +++ b/source/_components/media_player.anthemav.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Anthem A/V Receivers" -description: "Instructions how to integrate Anthem A/V Receivers into Home Assistant." +description: "Instructions on how to integrate Anthem A/V Receivers into Home Assistant." date: 2016-12-31 23:11 sidebar: true comments: false diff --git a/source/_components/media_player.apple_tv.markdown b/source/_components/media_player.apple_tv.markdown index 383afdae98..7b16307760 100644 --- a/source/_components/media_player.apple_tv.markdown +++ b/source/_components/media_player.apple_tv.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Apple TV Media Player" -description: "Instructions how to integrate Apple TV devices into Home Assistant." +description: "Instructions on how to integrate Apple TV devices into Home Assistant." date: 2017-02-08 07:11 sidebar: true comments: false diff --git a/source/_components/media_player.bluesound.markdown b/source/_components/media_player.bluesound.markdown index 999d2cd929..69372c8c33 100644 --- a/source/_components/media_player.bluesound.markdown +++ b/source/_components/media_player.bluesound.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Bluesound" -description: "Instructions how to integrate Bluesound devices into Home Assistant." +description: "Instructions on how to integrate Bluesound devices into Home Assistant." date: 2017-04-21 19:00 sidebar: true comments: false diff --git a/source/_components/media_player.cast.markdown b/source/_components/media_player.cast.markdown index c97f391dab..13d18534ba 100644 --- a/source/_components/media_player.cast.markdown +++ b/source/_components/media_player.cast.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Google Cast" -description: "Instructions how to integrate Google Cast into Home Assistant." +description: "Instructions on how to integrate Google Cast into Home Assistant." date: 2015-03-23 19:59 sidebar: true comments: false diff --git a/source/_components/media_player.clementine.markdown b/source/_components/media_player.clementine.markdown index c730daf5d9..781ac147a5 100644 --- a/source/_components/media_player.clementine.markdown +++ b/source/_components/media_player.clementine.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Clementine Music Player" -description: "Instructions how to integrate Clementine Music Player within Home Assistant." +description: "Instructions on how to integrate Clementine Music Player within Home Assistant." date: 2017-02-11 17:15 sidebar: true comments: false diff --git a/source/_components/media_player.cmus.markdown b/source/_components/media_player.cmus.markdown index e798889686..6754b57c87 100644 --- a/source/_components/media_player.cmus.markdown +++ b/source/_components/media_player.cmus.markdown @@ -1,7 +1,7 @@ --- layout: page title: "cmus" -description: "Instructions how to integrate cmus Music Player into Home +description: "Instructions on how to integrate cmus Music Player into Home Assistant." date: 2016-06-17 18:45 sidebar: true diff --git a/source/_components/media_player.denon.markdown b/source/_components/media_player.denon.markdown index b8c0e38013..ebfe0177ba 100644 --- a/source/_components/media_player.denon.markdown +++ b/source/_components/media_player.denon.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Denon Network Receivers" -description: "Instructions how to integrate Denon Network Receivers into Home Assistant." +description: "Instructions on how to integrate Denon Network Receivers into Home Assistant." date: 2015-09-08 09:00 sidebar: true comments: false diff --git a/source/_components/media_player.denonavr.markdown b/source/_components/media_player.denonavr.markdown index 31ad2b0160..ee1c434ff4 100644 --- a/source/_components/media_player.denonavr.markdown +++ b/source/_components/media_player.denonavr.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Denon AVR Network Receivers" -description: "Instructions how to integrate Denon AVR Network Receivers into Home Assistant." +description: "Instructions on how to integrate Denon AVR Network Receivers into Home Assistant." date: 2015-09-08 09:00 sidebar: true comments: false diff --git a/source/_components/media_player.directv.markdown b/source/_components/media_player.directv.markdown index 2cd2c7f44d..f7f6559619 100644 --- a/source/_components/media_player.directv.markdown +++ b/source/_components/media_player.directv.markdown @@ -1,7 +1,7 @@ --- layout: page title: "DirecTV" -description: "Instructions how to integrate DirecTV receivers into Home Assistant." +description: "Instructions on how to integrate DirecTV receivers into Home Assistant." date: 2016-07-19 01:0+0000 sidebar: true comments: false diff --git a/source/_components/media_player.dunehd.markdown b/source/_components/media_player.dunehd.markdown index 76c084bcf4..bbf646f0fb 100644 --- a/source/_components/media_player.dunehd.markdown +++ b/source/_components/media_player.dunehd.markdown @@ -1,7 +1,7 @@ --- layout: page title: "DuneHD media players" -description: "Instructions how to integrate DuneHD media players into Home Assistant." +description: "Instructions on how to integrate DuneHD media players into Home Assistant." date: 2016-11-26 09:00 sidebar: true comments: false diff --git a/source/_components/media_player.emby.markdown b/source/_components/media_player.emby.markdown index ca77cbde1a..2f12bc1d80 100644 --- a/source/_components/media_player.emby.markdown +++ b/source/_components/media_player.emby.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Emby" -description: "Instructions how to integrate Emby into Home Assistant." +description: "Instructions on how to integrate Emby into Home Assistant." date: 2016-10-13 22:00 sidebar: true comments: false diff --git a/source/_components/media_player.firetv.markdown b/source/_components/media_player.firetv.markdown index 855333def8..96d9c48c0e 100644 --- a/source/_components/media_player.firetv.markdown +++ b/source/_components/media_player.firetv.markdown @@ -1,7 +1,7 @@ --- layout: page title: "FireTV" -description: "Instructions how to integrate Fire-TV into Home Assistant." +description: "Instructions on how to integrate Fire-TV into Home Assistant." date: 2015-10-23 18:00 sidebar: true comments: false diff --git a/source/_components/media_player.frontier_silicon.markdown b/source/_components/media_player.frontier_silicon.markdown index 0c6a5843fa..c7887e9c8b 100644 --- a/source/_components/media_player.frontier_silicon.markdown +++ b/source/_components/media_player.frontier_silicon.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Frontier Silicon Internet Radios" -description: "Instructions how to integrate Frontier Silicon Internet Radios into Home Assistant." +description: "Instructions on how to integrate Frontier Silicon Internet Radios into Home Assistant." date: 2017-02-04 00:01 sidebar: true comments: false diff --git a/source/_components/media_player.gpmdp.markdown b/source/_components/media_player.gpmdp.markdown index 7207e0e092..c65ed0dff0 100644 --- a/source/_components/media_player.gpmdp.markdown +++ b/source/_components/media_player.gpmdp.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Google Play Music Desktop Player" -description: "Instructions how to integrate GPMDP into Home Assistant." +description: "Instructions on how to integrate GPMDP into Home Assistant." date: 2016-05-09 08:00 sidebar: true comments: false diff --git a/source/_components/media_player.itunes.markdown b/source/_components/media_player.itunes.markdown index fd357eb8ec..6885a33385 100644 --- a/source/_components/media_player.itunes.markdown +++ b/source/_components/media_player.itunes.markdown @@ -1,7 +1,7 @@ --- layout: page title: "iTunes" -description: "Instructions how to integrate iTunes into Home Assistant." +description: "Instructions on how to integrate iTunes into Home Assistant." date: 2015-06-22 11:00 sidebar: true comments: false diff --git a/source/_components/media_player.kodi.markdown b/source/_components/media_player.kodi.markdown index 556812292c..a59d19fe34 100644 --- a/source/_components/media_player.kodi.markdown +++ b/source/_components/media_player.kodi.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Kodi" -description: "Instructions how to integrate Kodi into Home Assistant." +description: "Instructions on how to integrate Kodi into Home Assistant." date: 2015-06-22 11:00 sidebar: true comments: false diff --git a/source/_components/media_player.lg_netcast.markdown b/source/_components/media_player.lg_netcast.markdown index 138eaec8bd..7a60e23578 100644 --- a/source/_components/media_player.lg_netcast.markdown +++ b/source/_components/media_player.lg_netcast.markdown @@ -1,7 +1,7 @@ --- layout: page title: "LG Netcast TV" -description: "Instructions how to integrate a LG TV (Netcast 3.0 & 4.0) within Home Assistant." +description: "Instructions on how to integrate a LG TV (Netcast 3.0 & 4.0) within Home Assistant." date: 2016-05-12 23:22 sidebar: true comments: false diff --git a/source/_components/media_player.markdown b/source/_components/media_player.markdown index 90507d40e5..dfbe48ccc9 100644 --- a/source/_components/media_player.markdown +++ b/source/_components/media_player.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Media Player" -description: "Instructions how to setup your media players with Home Assistant." +description: "Instructions on how to setup your media players with Home Assistant." date: 2015-01-24 14:39 sidebar: true comments: false diff --git a/source/_components/media_player.mediaroom.markdown b/source/_components/media_player.mediaroom.markdown index a2eece639d..47e79b74ba 100644 --- a/source/_components/media_player.mediaroom.markdown +++ b/source/_components/media_player.mediaroom.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Mediaroom" -description: "Instructions how to integrate Mediaroom Set-Top Boxes into Home Assistant." +description: "Instructions on how to integrate Mediaroom Set-Top Boxes into Home Assistant." date: 2018-01-22 22:00 sidebar: true comments: false diff --git a/source/_components/media_player.mpchc.markdown b/source/_components/media_player.mpchc.markdown index 4e4c187d0f..98f6846f3a 100644 --- a/source/_components/media_player.mpchc.markdown +++ b/source/_components/media_player.mpchc.markdown @@ -1,7 +1,7 @@ --- layout: page title: "MPC-HC" -description: "Instructions how to integrate MPC-HC into Home Assistant." +description: "Instructions on how to integrate MPC-HC into Home Assistant." date: 2016-07-27 21:21 sidebar: true comments: false diff --git a/source/_components/media_player.mpd.markdown b/source/_components/media_player.mpd.markdown index b561797aac..51888be2b2 100644 --- a/source/_components/media_player.mpd.markdown +++ b/source/_components/media_player.mpd.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Music Player Daemon (MPD)" -description: "Instructions how to integrate Music Player Daemon into Home Assistant." +description: "Instructions on how to integrate Music Player Daemon into Home Assistant." date: 2016-09-30 23:06 sidebar: true comments: false diff --git a/source/_components/media_player.nad.markdown b/source/_components/media_player.nad.markdown index b35a5ea99b..41684f7212 100644 --- a/source/_components/media_player.nad.markdown +++ b/source/_components/media_player.nad.markdown @@ -1,7 +1,7 @@ --- layout: page title: "NAD" -description: "Instructions how to integrate NAD receivers into Home Assistant." +description: "Instructions on how to integrate NAD receivers into Home Assistant." date: 2016-01-05 20:00 sidebar: true comments: false diff --git a/source/_components/media_player.nadtcp.markdown b/source/_components/media_player.nadtcp.markdown index 98a160f76b..e673e4472d 100644 --- a/source/_components/media_player.nadtcp.markdown +++ b/source/_components/media_player.nadtcp.markdown @@ -1,7 +1,7 @@ --- layout: page title: "NAD tcp" -description: "Instructions how to integrate the NAD D 7050 or C338 digital amplifiers into Home Assistant." +description: "Instructions on how to integrate the NAD D 7050 or C338 digital amplifiers into Home Assistant." date: 2017-06-07 20:00 sidebar: true comments: false diff --git a/source/_components/media_player.onkyo.markdown b/source/_components/media_player.onkyo.markdown index e78075c01a..ca277f7706 100644 --- a/source/_components/media_player.onkyo.markdown +++ b/source/_components/media_player.onkyo.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Onkyo" -description: "Instructions how to integrate Onkyo and some Pioneer receivers into Home Assistant." +description: "Instructions on how to integrate Onkyo and some Pioneer receivers into Home Assistant." date: 2016-03-30 08:00 sidebar: true comments: false diff --git a/source/_components/media_player.openhome.markdown b/source/_components/media_player.openhome.markdown index e174968827..ae10d32d3c 100644 --- a/source/_components/media_player.openhome.markdown +++ b/source/_components/media_player.openhome.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Linn / Openhome" -description: "Instructions how to integrate Linn Ds and Openhome renderers into Home Assistant." +description: "Instructions on how to integrate Linn Ds and Openhome renderers into Home Assistant." date: 2017-02-21 22:40 sidebar: true comments: false diff --git a/source/_components/media_player.panasonic_viera.markdown b/source/_components/media_player.panasonic_viera.markdown index fbbe820c34..2877848601 100644 --- a/source/_components/media_player.panasonic_viera.markdown +++ b/source/_components/media_player.panasonic_viera.markdown @@ -44,9 +44,9 @@ media_player: Configuration variables: -- **host** (*Required*): The IP of the Panasonic Viera TV, e.g. `192.168.0.10`. +- **host** (*Required*): The IP of the Panasonic Viera TV, e.g., `192.168.0.10`. - **port** (*Optional*): The port number of your Panasonic Viera TV. Defaults to `55000`. -- **mac** (*Optional*): The MAC address of your Panasonic Viera TV, e.g. `AA:BB:CC:DD:99:1A`. +- **mac** (*Optional*): The MAC address of your Panasonic Viera TV, e.g., `AA:BB:CC:DD:99:1A`. - **name** (*Optional*): The name you would like to give to the Panasonic Viera TV. ### {% linkable_title Example `play_media` script %} diff --git a/source/_components/media_player.pandora.markdown b/source/_components/media_player.pandora.markdown index 5f0098cff8..d9f7b999f4 100644 --- a/source/_components/media_player.pandora.markdown +++ b/source/_components/media_player.pandora.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Pandora" -description: "Instructions how to integrate Pandora radio into Home Assistant." +description: "Instructions on how to integrate Pandora radio into Home Assistant." date: 2016-06-10 19:59 sidebar: true comments: false diff --git a/source/_components/media_player.pioneer.markdown b/source/_components/media_player.pioneer.markdown index 66086c5ded..6bc6d1a5b0 100644 --- a/source/_components/media_player.pioneer.markdown +++ b/source/_components/media_player.pioneer.markdown @@ -29,7 +29,7 @@ Configuration variables: - **host** (*Required*): The IP of the Pioneer device, eg. `192.168.0.10` - **name** (*Optional*): The name you would like to give to the receiver. -- **port** (*Optional*): The port on which the Pioneer device listens, e.g. `23` (default) or `8102` +- **port** (*Optional*): The port on which the Pioneer device listens, e.g., `23` (default) or `8102` - **timeout** (*Optional*): Number of seconds (float) to wait for blocking operations like connect, write, and read. Notes: diff --git a/source/_components/media_player.plex.markdown b/source/_components/media_player.plex.markdown index ddaf3a611b..45ad9698cb 100644 --- a/source/_components/media_player.plex.markdown +++ b/source/_components/media_player.plex.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Plex" -description: "Instructions how to integrate Plex into Home Assistant." +description: "Instructions on how to integrate Plex into Home Assistant." date: 2015-10-05 21:21 sidebar: true comments: false diff --git a/source/_components/media_player.roku.markdown b/source/_components/media_player.roku.markdown index 5c889727de..c7771e0f40 100644 --- a/source/_components/media_player.roku.markdown +++ b/source/_components/media_player.roku.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Roku" -description: "Instructions how to integrate Roku into Home Assistant." +description: "Instructions on how to integrate Roku into Home Assistant." date: 2016-05-16 20:0+0000 sidebar: true comments: false diff --git a/source/_components/media_player.samsungtv.markdown b/source/_components/media_player.samsungtv.markdown index 3cabb0f43d..53954f6693 100644 --- a/source/_components/media_player.samsungtv.markdown +++ b/source/_components/media_player.samsungtv.markdown @@ -76,10 +76,10 @@ Currently tested but not working models: - JS9500 - State is always "on" and unable to control (but port 8001 *is* open) - MU6300 - Port set to 8001, `pip3 install websocket-client` must be executed, turning on works, status not working reliably, turning off is not permanent (it comes back on) -None of the 2014 (H) and 2015 (J) model series (e.g. J5200) will work, since Samsung have used a different (encrypted) type of interface for these. +None of the 2014 (H) and 2015 (J) model series (e.g., J5200) will work, since Samsung have used a different (encrypted) type of interface for these. If your model is not on the list then give it a test, if everything works correctly then add it to the list on [GitHub](https://github.com/home-assistant/home-assistant.github.io/tree/current/source/_components/media_player.samsungtv.markdown). -The first letter (U, P, L, H & K) represent the screen type, e.g. LED or Plasma. The second letter represents the region, E is Europe, N is North America and A is Asia & Australia. The two numbers following that represent the screen size. +The first letter (U, P, L, H & K) represent the screen type, e.g., LED or Plasma. The second letter represents the region, E is Europe, N is North America and A is Asia & Australia. The two numbers following that represent the screen size. If you add your model remember to remove these before adding them to the list. Currently the ability to select a source is not implemented. diff --git a/source/_components/media_player.songpal.markdown b/source/_components/media_player.songpal.markdown index 65874f99b2..2e83636b9e 100644 --- a/source/_components/media_player.songpal.markdown +++ b/source/_components/media_player.songpal.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Sony SongPal compatible devices" -description: "Instructions how to integrate Sony Songpal devices into Home Assistant." +description: "Instructions on how to integrate Sony Songpal devices into Home Assistant." date: 2018-02-03 09:00 sidebar: true comments: false @@ -23,7 +23,7 @@ A few notes: - The quick start-up mode has to be enabled in order to turn the device on. - Supports currently only one output terminal, i.e. the volume control works only on the first volume controller as reported by the backend library. -- Some devices, e.g. HT-XT3, do not support decreasing the volume step-by-step correctly. +- Some devices, e.g., HT-XT3, do not support decreasing the volume step-by-step correctly. - Feel free to improve the available services! ## {% linkable_title Configuration %} @@ -61,8 +61,8 @@ For a list of available settings and their values use [`songpal sound`](https:// | Service data attribute | Optional | Description | |------------------------|----------|--------------------------------------------------| | `entity_id` | yes | Target entity, leave unset for all devices | -| `name` | no | Configuration variable, e.g. `nightmode` | -| `value` | no | New configuration value, e.g. `on` | +| `name` | no | Configuration variable, e.g., `nightmode` | +| `value` | no | New configuration value, e.g., `on` | diff --git a/source/_components/media_player.sonos.markdown b/source/_components/media_player.sonos.markdown index 3afe420ff4..862cd822f8 100644 --- a/source/_components/media_player.sonos.markdown +++ b/source/_components/media_player.sonos.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Sonos" -description: "Instructions how to integrate Sonos devices into Home Assistant." +description: "Instructions on how to integrate Sonos devices into Home Assistant." date: 2015-09-12 13:00 sidebar: true comments: false diff --git a/source/_components/media_player.soundtouch.markdown b/source/_components/media_player.soundtouch.markdown index fa2a550b02..463914f236 100644 --- a/source/_components/media_player.soundtouch.markdown +++ b/source/_components/media_player.soundtouch.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Soundtouch" -description: "Instructions how to integrate Bose Soundtouch devices into Home Assistant." +description: "Instructions on how to integrate Bose Soundtouch devices into Home Assistant." date: 2016-11-06 13:00 sidebar: true comments: false diff --git a/source/_components/media_player.universal.markdown b/source/_components/media_player.universal.markdown index 106f114f78..76cbc4a4ba 100644 --- a/source/_components/media_player.universal.markdown +++ b/source/_components/media_player.universal.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Universal" -description: "Instructions how to create a universal media player in Home Assistant." +description: "Instructions on how to create a universal media player in Home Assistant." date: 2016-01-12 22:00 sidebar: true comments: false diff --git a/source/_components/media_player.vizio.markdown b/source/_components/media_player.vizio.markdown index 7c8cfa363b..5b8d7eb35f 100644 --- a/source/_components/media_player.vizio.markdown +++ b/source/_components/media_player.vizio.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Vizio SmartCast TV" -description: "Instructions how to integrate Vizio SmartCast TV into Home Assistant." +description: "Instructions on how to integrate Vizio SmartCast TV into Home Assistant." date: 2017-07-10 19:00 sidebar: true comments: false diff --git a/source/_components/media_player.webostv.markdown b/source/_components/media_player.webostv.markdown index 3775ae8260..707ef55a90 100644 --- a/source/_components/media_player.webostv.markdown +++ b/source/_components/media_player.webostv.markdown @@ -1,7 +1,7 @@ --- layout: page title: "LG webOS Smart TV" -description: "Instructions how to integrate a LG webOS Smart TV within Home Assistant." +description: "Instructions on how to integrate a LG webOS Smart TV within Home Assistant." date: 2016-04-18 23:24 sidebar: true comments: false @@ -36,7 +36,7 @@ media_player: Configuration variables: -- **host** (*Optional*): The IP of the LG webOS Smart TV, e.g. `192.168.0.10`. +- **host** (*Optional*): The IP of the LG webOS Smart TV, e.g., `192.168.0.10`. - **turn_on_action** (*Optional*): Defines an [action](/docs/automation/action/) to turn the TV on. - **name** (*Optional*): The name you would like to give to the LG webOS Smart TV. - **timeout** (*Optional*): The timeout for connections to the TV in seconds. diff --git a/source/_components/media_player.yamaha.markdown b/source/_components/media_player.yamaha.markdown index c306b1d527..b996e642a4 100644 --- a/source/_components/media_player.yamaha.markdown +++ b/source/_components/media_player.yamaha.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Yamaha Network Receivers" -description: "Instructions how to integrate Yamaha Network Receivers into Home Assistant." +description: "Instructions on how to integrate Yamaha Network Receivers into Home Assistant." date: 2016-03-26 0:58 -0700 sidebar: true comments: false @@ -36,9 +36,9 @@ Configuration variables: default name (often model number) that is returned by the device. - **host** (*Optional*): IP address or hostname of the device - **source_ignore** (*Optional*): List of sources to hide in the front-end -- **source_names** (*Optional*): Mapping of internal AVR source names to custom ones, allowing one to rename e.g. `HDMI1` to `ChromeCast` +- **source_names** (*Optional*): Mapping of internal AVR source names to custom ones, allowing one to rename e.g., `HDMI1` to `ChromeCast` - **zone_ignore** (*Optional*): List of zones to hide in the front-end -- **zone_names** (*Optional*): Mapping of zone names to custom ones, allowing one to rename e.g. `Main_Zone` to `Family Room` +- **zone_names** (*Optional*): Mapping of zone names to custom ones, allowing one to rename e.g., `Main_Zone` to `Family Room` ### {% linkable_title Discovery notes %} @@ -121,5 +121,5 @@ Enable or disable an output port (HDMI) on the receiver. | Service data attribute | Optional | Description | | ---------------------- | -------- | ----------- | | `entity_id` | yes | String or list of strings that point at `entity_id`s of Yamaha receivers. -| `port` | no | Port to enable or disable, e.g. `hdmi1`. +| `port` | no | Port to enable or disable, e.g., `hdmi1`. | `enabled` | no | To enable set true, otherwise set to false. diff --git a/source/_components/media_player.ziggo_mediabox_xl.markdown b/source/_components/media_player.ziggo_mediabox_xl.markdown index 5919b19b50..0581b320a2 100644 --- a/source/_components/media_player.ziggo_mediabox_xl.markdown +++ b/source/_components/media_player.ziggo_mediabox_xl.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Ziggo Mediabox XL" -description: "Instructions how to integrate the Ziggo Mediabox XL into Home Assistant." +description: "Instructions on how to integrate the Ziggo Mediabox XL into Home Assistant." date: 2017-11-10 20:00 sidebar: true comments: false diff --git a/source/_components/melissa.markdown b/source/_components/melissa.markdown index ffc6364fc9..ed696574cc 100644 --- a/source/_components/melissa.markdown +++ b/source/_components/melissa.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Melissa Climate" -description: "Instructions how to integrate Melissa Climate into Home Assistant." +description: "Instructions on how to integrate Melissa Climate into Home Assistant." date: 2017-01-05 17:30 sidebar: true comments: false diff --git a/source/_components/mochad.markdown b/source/_components/mochad.markdown index f27367f0da..df42020a21 100644 --- a/source/_components/mochad.markdown +++ b/source/_components/mochad.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Mochad" -description: "Instructions how to integrate Mochad into Home Assistant." +description: "Instructions on how to integrate Mochad into Home Assistant." date: 2016-10-20 17:09 sidebar: true comments: false diff --git a/source/_components/modbus.markdown b/source/_components/modbus.markdown index 9d56005829..30a2b62382 100644 --- a/source/_components/modbus.markdown +++ b/source/_components/modbus.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Modbus" -description: "Instructions how to integrate Modbus within Home Assistant." +description: "Instructions on how to integrate Modbus within Home Assistant." date: 2015-04-25 9:16 sidebar: true comments: false diff --git a/source/_components/mqtt.markdown b/source/_components/mqtt.markdown index 5514b98c36..c3f4149342 100644 --- a/source/_components/mqtt.markdown +++ b/source/_components/mqtt.markdown @@ -1,7 +1,7 @@ --- layout: page title: "MQTT" -description: "Instructions how to setup MQTT within Home Assistant." +description: "Instructions on how to setup MQTT within Home Assistant." date: 2015-08-07 18:00 sidebar: true comments: false diff --git a/source/_components/mqtt_eventstream.markdown b/source/_components/mqtt_eventstream.markdown index da0f6fe3c3..11644dc5b3 100644 --- a/source/_components/mqtt_eventstream.markdown +++ b/source/_components/mqtt_eventstream.markdown @@ -1,7 +1,7 @@ --- layout: page title: "MQTT Eventstream" -description: "Instructions how to setup MQTT eventstream within Home Assistant." +description: "Instructions on how to setup MQTT eventstream within Home Assistant." date: 2016-01-13 08:00 sidebar: true comments: false diff --git a/source/_components/mqtt_statestream.markdown b/source/_components/mqtt_statestream.markdown index 5b7b832fe9..1a607624d3 100644 --- a/source/_components/mqtt_statestream.markdown +++ b/source/_components/mqtt_statestream.markdown @@ -1,7 +1,7 @@ --- layout: page title: "MQTT Statestream" -description: "Instructions how to setup MQTT Statestream within Home Assistant." +description: "Instructions on how to setup MQTT Statestream within Home Assistant." date: 2017-10-01 20:00 sidebar: true comments: false diff --git a/source/_components/mycroft.markdown b/source/_components/mycroft.markdown index 705800f6e3..9754096be0 100644 --- a/source/_components/mycroft.markdown +++ b/source/_components/mycroft.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Mycroft" -description: "Instructions how to setup Mycroft AI within Home Assistant." +description: "Instructions on how to setup Mycroft AI within Home Assistant." date: 2017-08-26 17:00 sidebar: true comments: false diff --git a/source/_components/mysensors.markdown b/source/_components/mysensors.markdown index c91f5a123e..f9e9388c67 100644 --- a/source/_components/mysensors.markdown +++ b/source/_components/mysensors.markdown @@ -1,7 +1,7 @@ --- layout: page title: "MySensors" -description: "Instructions how to integrate MySensors sensors into Home Assistant." +description: "Instructions on how to integrate MySensors sensors into Home Assistant." date: 2016-10-01 15:00 +0200 sidebar: true comments: false diff --git a/source/_components/neato.markdown b/source/_components/neato.markdown index 8c5b205e98..316769ff7c 100644 --- a/source/_components/neato.markdown +++ b/source/_components/neato.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Neato Robotics" -description: "Instructions how to integrate your Neato within Home Assistant." +description: "Instructions on how to integrate your Neato within Home Assistant." date: 2016-10-09 20:15 sidebar: true comments: false diff --git a/source/_components/nest.markdown b/source/_components/nest.markdown index 7aa5adfb9c..718bddc253 100644 --- a/source/_components/nest.markdown +++ b/source/_components/nest.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Nest" -description: "Instructions how to integrate Nest into Home Assistant." +description: "Instructions on how to integrate Nest into Home Assistant." date: 2016-01-29 21:57 sidebar: true comments: false diff --git a/source/_components/netatmo.markdown b/source/_components/netatmo.markdown index ebb254a310..0efe4ac968 100644 --- a/source/_components/netatmo.markdown +++ b/source/_components/netatmo.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Netatmo" -description: "Instructions how to integrate Netatmo component into Home Assistant." +description: "Instructions on how to integrate Netatmo component into Home Assistant." date: 2016-06-02 08:10 sidebar: true comments: false diff --git a/source/_components/notify.apns.markdown b/source/_components/notify.apns.markdown index 30737d617e..dcad472dbb 100644 --- a/source/_components/notify.apns.markdown +++ b/source/_components/notify.apns.markdown @@ -1,7 +1,7 @@ --- layout: page title: "APNS" -description: "Instructions how to add APNS notifications to Home Assistant." +description: "Instructions on how to add APNS notifications to Home Assistant." date: 2016-09-05 23:00 sidebar: true comments: false diff --git a/source/_components/notify.aws_lambda.markdown b/source/_components/notify.aws_lambda.markdown index 21ef850da9..be5a5494ca 100644 --- a/source/_components/notify.aws_lambda.markdown +++ b/source/_components/notify.aws_lambda.markdown @@ -1,7 +1,7 @@ --- layout: page title: "AWS Lambda" -description: "Instructions how to invoke AWS Lambda functions from Home Assistant." +description: "Instructions on how to invoke AWS Lambda functions from Home Assistant." date: 2016-05-14 16:35 sidebar: true comments: false diff --git a/source/_components/notify.aws_sns.markdown b/source/_components/notify.aws_sns.markdown index 21a6b48cc5..cfa69e0084 100644 --- a/source/_components/notify.aws_sns.markdown +++ b/source/_components/notify.aws_sns.markdown @@ -1,7 +1,7 @@ --- layout: page title: "AWS SNS" -description: "Instructions how to publish messages to AWS SNS from Home Assistant." +description: "Instructions on how to publish messages to AWS SNS from Home Assistant." date: 2016-05-14 16:35 sidebar: true comments: false diff --git a/source/_components/notify.aws_sqs.markdown b/source/_components/notify.aws_sqs.markdown index e40e81050b..a1e8a33f8b 100644 --- a/source/_components/notify.aws_sqs.markdown +++ b/source/_components/notify.aws_sqs.markdown @@ -1,7 +1,7 @@ --- layout: page title: "AWS SQS" -description: "Instructions how to publish messages to AWS SQS from Home Assistant." +description: "Instructions on how to publish messages to AWS SQS from Home Assistant." date: 2016-05-14 16:35 sidebar: true comments: false diff --git a/source/_components/notify.ciscospark.markdown b/source/_components/notify.ciscospark.markdown index cf2449fac4..fb55b90a6f 100644 --- a/source/_components/notify.ciscospark.markdown +++ b/source/_components/notify.ciscospark.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Cisco Spark" -description: "Instructions how to add CiscoSpark notifications to Home Assistant." +description: "Instructions on how to add CiscoSpark notifications to Home Assistant." date: 2017-02-20 15:00 sidebar: true comments: false diff --git a/source/_components/notify.clickatell.markdown b/source/_components/notify.clickatell.markdown index 783f3deb58..8a26160d4f 100644 --- a/source/_components/notify.clickatell.markdown +++ b/source/_components/notify.clickatell.markdown @@ -40,7 +40,7 @@ Configuration variables: * **name** (Optional): Setting the optional parameter name allows multiple notifiers to be created. The default value is `clickatell`. The notifier will bind to the service notify.NOTIFIER_NAME. * **api_key** (Required): Your API key. -* **recipient** (Required): Your phone number. This is where you want to send your notification SMS messages. e.g. `61444333444`. +* **recipient** (Required): Your phone number. This is where you want to send your notification SMS messages. e.g., `61444333444`. To use notifications, please see the [getting started with automation page](https://home-assistant.io/getting-started/automation/). diff --git a/source/_components/notify.command_line.markdown b/source/_components/notify.command_line.markdown index a5d3b6a594..4f82febe40 100644 --- a/source/_components/notify.command_line.markdown +++ b/source/_components/notify.command_line.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Command line Notify" -description: "Instructions how to add command line notifications to Home Assistant." +description: "Instructions on how to add command line notifications to Home Assistant." date: 2016-02-22 20:00 sidebar: true comments: false diff --git a/source/_components/notify.discord.markdown b/source/_components/notify.discord.markdown index 657b94e84e..9f28960267 100644 --- a/source/_components/notify.discord.markdown +++ b/source/_components/notify.discord.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Discord" -description: "Instructions how to add Discord notifications to Home Assistant." +description: "Instructions on how to add Discord notifications to Home Assistant." date: 2016-01-14 15:15 sidebar: true comments: false diff --git a/source/_components/notify.ecobee.markdown b/source/_components/notify.ecobee.markdown index 18ba15b94b..53f97f69d1 100644 --- a/source/_components/notify.ecobee.markdown +++ b/source/_components/notify.ecobee.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Ecobee Notify" -description: "Instructions how to setup the Ecobee notification component within Home Assistant." +description: "Instructions on how to setup the Ecobee notification component within Home Assistant." date: 2016-05-12 09:00 sidebar: true comments: false diff --git a/source/_components/notify.facebook.markdown b/source/_components/notify.facebook.markdown index 0bdb62c8a7..beb539c559 100644 --- a/source/_components/notify.facebook.markdown +++ b/source/_components/notify.facebook.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Facebook Messenger" -description: "Instructions how to add Facebook user notifications to Home Assistant." +description: "Instructions on how to add Facebook user notifications to Home Assistant." date: 2016-12-31 14:14 sidebar: true comments: false diff --git a/source/_components/notify.file.markdown b/source/_components/notify.file.markdown index 0061b31f00..9a94b1177e 100644 --- a/source/_components/notify.file.markdown +++ b/source/_components/notify.file.markdown @@ -1,7 +1,7 @@ --- layout: page title: "File" -description: "Instructions how to add file notifications to Home Assistant." +description: "Instructions on how to add file notifications to Home Assistant." date: 2015-06-22 10:00 sidebar: true comments: false diff --git a/source/_components/notify.free_mobile.markdown b/source/_components/notify.free_mobile.markdown index 0123c7fec5..f02c52ea30 100644 --- a/source/_components/notify.free_mobile.markdown +++ b/source/_components/notify.free_mobile.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Free Mobile" -description: "Instructions how to add user notifications to Home Assistant." +description: "Instructions on how to add user notifications to Home Assistant." date: 2016-01-12 08:36 sidebar: true comments: false diff --git a/source/_components/notify.group.markdown b/source/_components/notify.group.markdown index e68b76112e..928de178e7 100644 --- a/source/_components/notify.group.markdown +++ b/source/_components/notify.group.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Notify Group" -description: "Instructions how to setup the notify group platform." +description: "Instructions on how to setup the notify group platform." date: 2016-08-18 00:12 sidebar: true comments: false diff --git a/source/_components/notify.hipchat.markdown b/source/_components/notify.hipchat.markdown index d36905f38e..877bcd8cd8 100644 --- a/source/_components/notify.hipchat.markdown +++ b/source/_components/notify.hipchat.markdown @@ -1,7 +1,7 @@ --- layout: page title: "HipChat" -description: "Instructions how to add HipChat notifications to Home Assistant." +description: "Instructions on how to add HipChat notifications to Home Assistant." date: 2017-08-10 15:00 sidebar: true comments: false diff --git a/source/_components/notify.html5.markdown b/source/_components/notify.html5.markdown index 2a5a95ef7b..4520143f89 100644 --- a/source/_components/notify.html5.markdown +++ b/source/_components/notify.html5.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Push Notifications" -description: "Instructions how to use the HTML5 push notifications platform from Home Assistant." +description: "Instructions on how to use the HTML5 push notifications platform from Home Assistant." date: 2016-08-17 21:58 sidebar: true comments: false diff --git a/source/_components/notify.instapush.markdown b/source/_components/notify.instapush.markdown index 427991e60d..020f535c10 100644 --- a/source/_components/notify.instapush.markdown +++ b/source/_components/notify.instapush.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Instapush" -description: "Instructions how to add Instapush notifications to Home Assistant." +description: "Instructions on how to add Instapush notifications to Home Assistant." date: 2015-05-01 18:00 sidebar: true comments: false diff --git a/source/_components/notify.joaoapps_join.markdown b/source/_components/notify.joaoapps_join.markdown index 3f64711ff7..2143480d0e 100644 --- a/source/_components/notify.joaoapps_join.markdown +++ b/source/_components/notify.joaoapps_join.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Join Notify" -description: "Instructions how to setup the Join notification platform within Home Assistant." +description: "Instructions on how to setup the Join notification platform within Home Assistant." date: 2016-07-12 09:00 sidebar: true comments: false diff --git a/source/_components/notify.kodi.markdown b/source/_components/notify.kodi.markdown index 6949a92722..7d350005a8 100644 --- a/source/_components/notify.kodi.markdown +++ b/source/_components/notify.kodi.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Kodi" -description: "Instructions how to add Kodi notifications to Home Assistant." +description: "Instructions on how to add Kodi notifications to Home Assistant." date: 2016-09-12 16:00 sidebar: true comments: false diff --git a/source/_components/notify.lannouncer.markdown b/source/_components/notify.lannouncer.markdown index 2f411679c9..5aba4e41f9 100644 --- a/source/_components/notify.lannouncer.markdown +++ b/source/_components/notify.lannouncer.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Lannouncer" -description: "Instructions how to add Lannouncer notifications to Home Assistant." +description: "Instructions on how to add Lannouncer notifications to Home Assistant." date: 2017-01-06 10:00 sidebar: true comments: false diff --git a/source/_components/notify.llamalab_automate.markdown b/source/_components/notify.llamalab_automate.markdown index 3b5d5d2dd5..40becc0eb5 100644 --- a/source/_components/notify.llamalab_automate.markdown +++ b/source/_components/notify.llamalab_automate.markdown @@ -1,7 +1,7 @@ --- layout: page title: "LlamaLab Automate" -description: "Instructions how to add user notifications to Home Assistant." +description: "Instructions on how to add user notifications to Home Assistant." date: 2016-08-21 13:00 sidebar: true comments: false diff --git a/source/_components/notify.mailgun.markdown b/source/_components/notify.mailgun.markdown index be571eb2c1..9e98d18052 100644 --- a/source/_components/notify.mailgun.markdown +++ b/source/_components/notify.mailgun.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Mailgun Notify" -description: "Instructions how to add Mailgun mail notifications to Home Assistant." +description: "Instructions on how to add Mailgun mail notifications to Home Assistant." date: 2017-02-06 16:52 sidebar: true comments: false diff --git a/source/_components/notify.markdown b/source/_components/notify.markdown index 6ef8c7c50d..5237224f46 100644 --- a/source/_components/notify.markdown +++ b/source/_components/notify.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Notifications" -description: "Instructions how to add user notifications to Home Assistant." +description: "Instructions on how to add user notifications to Home Assistant." date: 2015-01-20 22:36 sidebar: true comments: false diff --git a/source/_components/notify.matrix.markdown b/source/_components/notify.matrix.markdown index fe5d7fc3a4..c74b962e34 100644 --- a/source/_components/notify.matrix.markdown +++ b/source/_components/notify.matrix.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Matrix" -description: "Instructions how to add Matrix notifications to Home Assistant." +description: "Instructions on how to add Matrix notifications to Home Assistant." date: 2016-10-11 23:51 sidebar: true comments: false @@ -31,7 +31,7 @@ notify: Configuration variables: - **name** (*Optional*): Setting the optional parameter `name` allows multiple notifiers to be created. The default value is `notify`. The notifier will bind to the service `notify.NOTIFIER_NAME`. -- **homeserver** (*Required*): The base URL of the homeserver, where the notifier account is registered (e.g. `https://matrix.org`). +- **homeserver** (*Required*): The base URL of the homeserver, where the notifier account is registered (e.g., `https://matrix.org`). - **username** (*Required*): The username of the notifying Matrix account. - **password** (*Required*): The password for the given Matrix account. - **default_room** (*Required*): The room all messages will be sent to, when no other target is given. diff --git a/source/_components/notify.message_bird.markdown b/source/_components/notify.message_bird.markdown index d8baf5fa0d..2234a86310 100644 --- a/source/_components/notify.message_bird.markdown +++ b/source/_components/notify.message_bird.markdown @@ -1,7 +1,7 @@ --- layout: page title: "MessageBird" -description: "Instructions how to add user notifications to Home Assistant." +description: "Instructions on how to add user notifications to Home Assistant." date: 2016-03-15 17:00 sidebar: true comments: false @@ -28,7 +28,7 @@ Configuration variables: - **api_key** (*Required*): Enter the API key for MessageBird. Go to https://www.messagebird.com/ to retrieve your API key. - **name** (*Optional*): Setting the optional parameter `name` allows multiple notifiers to be created. The default value is `notify`. The notifier will bind to the service `notify.NOTIFIER_NAME`. -- **sender** (*Optional*): Setting the optional parameter `sender`. This will be the sender of the SMS. It may be either a telephone number (e.g. `+4915112345678`) or a text with a maximum length of 11 characters. Defaults to `HA`. +- **sender** (*Optional*): Setting the optional parameter `sender`. This will be the sender of the SMS. It may be either a telephone number (e.g., `+4915112345678`) or a text with a maximum length of 11 characters. Defaults to `HA`. ### {% linkable_title Usage %} diff --git a/source/_components/notify.mqtt.markdown b/source/_components/notify.mqtt.markdown index 7aefb8743f..3f2cb633a9 100644 --- a/source/_components/notify.mqtt.markdown +++ b/source/_components/notify.mqtt.markdown @@ -1,7 +1,7 @@ --- layout: page title: "MQTT Notifications" -description: "Instructions how to add MQTT notifications to Home Assistant." +description: "Instructions on how to add MQTT notifications to Home Assistant." date: 2016-02-01 08:00 sidebar: true comments: false diff --git a/source/_components/notify.mycroft.markdown b/source/_components/notify.mycroft.markdown index f2e7680098..8191788499 100644 --- a/source/_components/notify.mycroft.markdown +++ b/source/_components/notify.mycroft.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Mycroft AI" -description: "Instructions how to add Mycroft AI notifications to Home Assistant." +description: "Instructions on how to add Mycroft AI notifications to Home Assistant." date: 2017-08-26 17:00 UTC sidebar: true comments: false diff --git a/source/_components/notify.mysensors.markdown b/source/_components/notify.mysensors.markdown index e465afe63d..3dab5bc10d 100644 --- a/source/_components/notify.mysensors.markdown +++ b/source/_components/notify.mysensors.markdown @@ -1,7 +1,7 @@ --- layout: page title: "MySensors Notify" -description: "Instructions how to integrate MySensors notifications into Home Assistant." +description: "Instructions on how to integrate MySensors notifications into Home Assistant." date: 2017-01-07 15:00 +0100 sidebar: true comments: false diff --git a/source/_components/notify.nfandroidtv.markdown b/source/_components/notify.nfandroidtv.markdown index cebd644707..e1bf8659ba 100644 --- a/source/_components/notify.nfandroidtv.markdown +++ b/source/_components/notify.nfandroidtv.markdown @@ -38,7 +38,7 @@ Configuration variables: - **position** (*Optional*): Has to be one of: bottom-right (default), bottom-left, top-right, top-left, center - **color** (*Optional*): Has to be one of: grey (default), black, indigo, green, red, cyan, teal, amber, pink - **transparency** (*Optional*): Has to be one of: 0%, 25% (default), 50%, 75%, 100% -- **interrupt** (*Optional*): If set to true, 1, on etc., the notification is interactive and can be dismissed or selected to display more details. Depending on the running app (e.g. Netflix), this may stop playback. +- **interrupt** (*Optional*): If set to true, 1, on etc., the notification is interactive and can be dismissed or selected to display more details. Depending on the running app (e.g., Netflix), this may stop playback. The configuration will be used to configure the default values for the notification for the host specified by the IP. However, you can override most of the settings by passing them with the data-attribute when calling the service. This is a fully customized JSON you can use to test how the final notification will look like: diff --git a/source/_components/notify.nma.markdown b/source/_components/notify.nma.markdown index bbe4e87110..c6165bb898 100644 --- a/source/_components/notify.nma.markdown +++ b/source/_components/notify.nma.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Notify My Android" -description: "Instructions how to add NMA notifications to Home Assistant." +description: "Instructions on how to add NMA notifications to Home Assistant." date: 2015-05-01 18:00 sidebar: true comments: false diff --git a/source/_components/notify.prowl.markdown b/source/_components/notify.prowl.markdown index 2bfeb97fc4..4fbe377bb6 100644 --- a/source/_components/notify.prowl.markdown +++ b/source/_components/notify.prowl.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Prowl" -description: "Instructions how to add Prowl notifications to Home Assistant." +description: "Instructions on how to add Prowl notifications to Home Assistant." date: 2017-08-17 18:00 sidebar: true comments: false diff --git a/source/_components/notify.pushbullet.markdown b/source/_components/notify.pushbullet.markdown index 0ba8c606f3..cadfd99cf9 100644 --- a/source/_components/notify.pushbullet.markdown +++ b/source/_components/notify.pushbullet.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Pushbullet" -description: "Instructions how to add user notifications to Home Assistant." +description: "Instructions on how to add user notifications to Home Assistant." date: 2015-01-20 22:36 sidebar: true comments: false diff --git a/source/_components/notify.pushetta.markdown b/source/_components/notify.pushetta.markdown index 6209d6bcd1..bf31900c34 100644 --- a/source/_components/notify.pushetta.markdown +++ b/source/_components/notify.pushetta.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Pushetta" -description: "Instructions how to add Pushetta notifications to Home Assistant." +description: "Instructions on how to add Pushetta notifications to Home Assistant." date: 2015-11-10 18:00 sidebar: true comments: false diff --git a/source/_components/notify.pushover.markdown b/source/_components/notify.pushover.markdown index 67e7db1098..244c01b58d 100644 --- a/source/_components/notify.pushover.markdown +++ b/source/_components/notify.pushover.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Pushover" -description: "Instructions how to add Pushover notifications to Home Assistant." +description: "Instructions on how to add Pushover notifications to Home Assistant." date: 2015-01-20 22:36 sidebar: true comments: false diff --git a/source/_components/notify.pushsafer.markdown b/source/_components/notify.pushsafer.markdown index 61edbe9d8d..dc7eb19057 100644 --- a/source/_components/notify.pushsafer.markdown +++ b/source/_components/notify.pushsafer.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Pushsafer" -description: "Instructions how to add Pushsafer notifications to Home Assistant." +description: "Instructions on how to add Pushsafer notifications to Home Assistant." date: 2018-01-05 11:15 sidebar: true comments: false diff --git a/source/_components/notify.rest.markdown b/source/_components/notify.rest.markdown index 370f26be8c..c20e4bc2f5 100644 --- a/source/_components/notify.rest.markdown +++ b/source/_components/notify.rest.markdown @@ -1,7 +1,7 @@ --- layout: page title: "REST" -description: "Instructions how to add RESTful notifications to Home Assistant." +description: "Instructions on how to add RESTful notifications to Home Assistant." date: 2016-02-12 07:00 sidebar: true comments: false diff --git a/source/_components/notify.sendgrid.markdown b/source/_components/notify.sendgrid.markdown index 16bf7e992a..2491bac32e 100644 --- a/source/_components/notify.sendgrid.markdown +++ b/source/_components/notify.sendgrid.markdown @@ -1,7 +1,7 @@ --- layout: page title: "SendGrid" -description: "Instructions how to add email notifications via SendGrid to Home Assistant." +description: "Instructions on how to add email notifications via SendGrid to Home Assistant." date: 2016-02-27 18:00 sidebar: true comments: false diff --git a/source/_components/notify.simplepush.markdown b/source/_components/notify.simplepush.markdown index 4747d9a5f4..2556c82037 100644 --- a/source/_components/notify.simplepush.markdown +++ b/source/_components/notify.simplepush.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Simplepush" -description: "Instructions how to add Simplepush notifications to Home Assistant." +description: "Instructions on how to add Simplepush notifications to Home Assistant." date: 2016-09-11 18:00 sidebar: true comments: false diff --git a/source/_components/notify.slack.markdown b/source/_components/notify.slack.markdown index 75b5419f59..3e38499010 100644 --- a/source/_components/notify.slack.markdown +++ b/source/_components/notify.slack.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Slack" -description: "Instructions how to add Slack notifications to Home Assistant." +description: "Instructions on how to add Slack notifications to Home Assistant." date: 2015-08-06 18:00 sidebar: true comments: false diff --git a/source/_components/notify.smtp.markdown b/source/_components/notify.smtp.markdown index 533129e36c..c0d51f21b8 100644 --- a/source/_components/notify.smtp.markdown +++ b/source/_components/notify.smtp.markdown @@ -1,7 +1,7 @@ --- layout: page title: "SMTP" -description: "Instructions how to add e-mail notifications to Home Assistant." +description: "Instructions on how to add e-mail notifications to Home Assistant." date: 2015-06-03 18:00 sidebar: true comments: false diff --git a/source/_components/notify.synology_chat.markdown b/source/_components/notify.synology_chat.markdown index 2ea2dd577d..5fbbae6a04 100644 --- a/source/_components/notify.synology_chat.markdown +++ b/source/_components/notify.synology_chat.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Synology Chat" -description: "Instructions how to add a Synology Chat Bot notifications to Home Assistant." +description: "Instructions on how to add a Synology Chat Bot notifications to Home Assistant." date: 2018-02-15 07:00 sidebar: true comments: false diff --git a/source/_components/notify.syslog.markdown b/source/_components/notify.syslog.markdown index 5e905e73e5..13683e8a8a 100644 --- a/source/_components/notify.syslog.markdown +++ b/source/_components/notify.syslog.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Syslog" -description: "Instructions how to add syslog notifications to Home Assistant." +description: "Instructions on how to add syslog notifications to Home Assistant." date: 2015-06-09 16:00 sidebar: true comments: false diff --git a/source/_components/notify.telegram.markdown b/source/_components/notify.telegram.markdown index ac89f6f23c..534924105d 100644 --- a/source/_components/notify.telegram.markdown +++ b/source/_components/notify.telegram.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Telegram" -description: "Instructions how to add Telegram notifications to Home Assistant." +description: "Instructions on how to add Telegram notifications to Home Assistant." date: 2015-10-09 18:00 sidebar: true comments: false diff --git a/source/_components/notify.twilio_call.markdown b/source/_components/notify.twilio_call.markdown index 9caf251d04..7f0fa2a989 100644 --- a/source/_components/notify.twilio_call.markdown +++ b/source/_components/notify.twilio_call.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Twilio Call" -description: "Instructions how to add user notifications to Home Assistant." +description: "Instructions on how to add user notifications to Home Assistant." date: 2017-01-27 00:09 sidebar: true comments: false diff --git a/source/_components/notify.twilio_sms.markdown b/source/_components/notify.twilio_sms.markdown index ec5002258c..7cec94cf33 100644 --- a/source/_components/notify.twilio_sms.markdown +++ b/source/_components/notify.twilio_sms.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Twilio SMS" -description: "Instructions how to add user notifications to Home Assistant." +description: "Instructions on how to add user notifications to Home Assistant." date: 2016-05-14 14:14 sidebar: true comments: false diff --git a/source/_components/notify.twitter.markdown b/source/_components/notify.twitter.markdown index f63810e68e..6bf8867709 100644 --- a/source/_components/notify.twitter.markdown +++ b/source/_components/notify.twitter.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Twitter" -description: "Instructions how to add Twitter notifications to Home Assistant." +description: "Instructions on how to add Twitter notifications to Home Assistant." date: 2016-01-27 07:00 sidebar: true comments: false diff --git a/source/_components/notify.webostv.markdown b/source/_components/notify.webostv.markdown index 8064c8fbf8..c3dbadfbe4 100644 --- a/source/_components/notify.webostv.markdown +++ b/source/_components/notify.webostv.markdown @@ -1,7 +1,7 @@ --- layout: page title: "LG WebOS TV notifications" -description: "Instructions how to integrate a LG WebOS TV within Home Assistant." +description: "Instructions on how to integrate a LG WebOS TV within Home Assistant." date: 2016-04-18 23:24 sidebar: true comments: false @@ -30,7 +30,7 @@ notify: Configuration variables: -- **host** (*Required*): The IP of the LG WebOS Smart TV, e.g. 192.168.0.10 +- **host** (*Required*): The IP of the LG WebOS Smart TV, e.g., 192.168.0.10 - **name** (*Required*): The name you would like to give to the LG WebOS Smart TV. - **filename** (*Optional*): The filename where the pairing key with the TV should be stored. This path is relative to Home Assistant's config directory. It defaults to `webostv.conf`. - **icon** (*Optional*): The path to an image file to use as the icon in notifications. diff --git a/source/_components/notify.xmpp.markdown b/source/_components/notify.xmpp.markdown index db062932d0..930aa496ac 100644 --- a/source/_components/notify.xmpp.markdown +++ b/source/_components/notify.xmpp.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Jabber (XMPP)" -description: "Instructions how to add Jabber (XMPP) notifications to Home Assistant." +description: "Instructions on how to add Jabber (XMPP) notifications to Home Assistant." date: 2015-05-08 18:00 sidebar: true comments: false diff --git a/source/_components/notify.yessssms.markdown b/source/_components/notify.yessssms.markdown index e320de496a..040acd518b 100644 --- a/source/_components/notify.yessssms.markdown +++ b/source/_components/notify.yessssms.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Yesss SMS" -description: "Instructions how to add user notifications to Home Assistant." +description: "Instructions on how to add user notifications to Home Assistant." date: 2017-10-27 16:00 sidebar: true comments: false diff --git a/source/_components/nuheat.markdown b/source/_components/nuheat.markdown index a261aececb..9169a5091e 100644 --- a/source/_components/nuheat.markdown +++ b/source/_components/nuheat.markdown @@ -1,7 +1,7 @@ --- layout: page title: "NuHeat" -description: "Instructions how to integrate your NuHeat Signature thermostats within Home Assistant." +description: "Instructions on how to integrate your NuHeat Signature thermostats within Home Assistant." date: 2017-11-11 18:00 sidebar: true comments: false diff --git a/source/_components/nuimo_controller.markdown b/source/_components/nuimo_controller.markdown index e2ed36fba8..92b1bbd618 100644 --- a/source/_components/nuimo_controller.markdown +++ b/source/_components/nuimo_controller.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Nuimo controller" -description: "Instructions how to setup and use a Nuimo device in Home Assistant." +description: "Instructions on how to setup and use a Nuimo device in Home Assistant." date: 2016-08-30 12:00 sidebar: true comments: false diff --git a/source/_components/octoprint.markdown b/source/_components/octoprint.markdown index 192d5d9d9a..03f0fae06d 100644 --- a/source/_components/octoprint.markdown +++ b/source/_components/octoprint.markdown @@ -1,7 +1,7 @@ --- layout: page title: "OctoPrint" -description: "Instructions how to setup the OctoPrint in Home Assistant." +description: "Instructions on how to setup the OctoPrint in Home Assistant." date: 2015-01-20 22:36 sidebar: true comments: false diff --git a/source/_components/panel_custom.markdown b/source/_components/panel_custom.markdown index 49775f2855..0415c561a7 100644 --- a/source/_components/panel_custom.markdown +++ b/source/_components/panel_custom.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Panel Custom" -description: "Instructions how to add customized panels to the frontend of Home Assistant." +description: "Instructions on how to add customized panels to the frontend of Home Assistant." date: 2015-08-08 11:00 sidebar: true comments: false diff --git a/source/_components/panel_iframe.markdown b/source/_components/panel_iframe.markdown index 71ba4b2aec..8aa5514f0c 100644 --- a/source/_components/panel_iframe.markdown +++ b/source/_components/panel_iframe.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Panel iFrame" -description: "Instructions how to add iFrames in the frontend of Home Assistant." +description: "Instructions on how to add iFrames in the frontend of Home Assistant." date: 2015-07-17 18:00 sidebar: true comments: false diff --git a/source/_components/pilight.markdown b/source/_components/pilight.markdown index a08f4cd935..ab841bbe83 100644 --- a/source/_components/pilight.markdown +++ b/source/_components/pilight.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Pilight" -description: "Instructions how to setup Pilight within Home Assistant." +description: "Instructions on how to setup Pilight within Home Assistant." date: 2015-08-07 18:00 sidebar: true comments: false @@ -17,7 +17,7 @@ ha_iot_class: "Local Push" This pilight hub connects to the [pilight-daemon](https://manual.pilight.org/programs/daemon.html) via a socket connection to receive and send codes. Thus Home Assistant does not have to run on the computer in charge of the RF communication. -The received and supported RF codes are put on the event bus of Home Assistant and are therefore directly usable by other components (e.g. automation). Additionally a send service is provided to send RF codes. +The received and supported RF codes are put on the event bus of Home Assistant and are therefore directly usable by other components (e.g., automation). Additionally a send service is provided to send RF codes. To integrate pilight into Home Assistant, add the following section to your `configuration.yaml` file: @@ -30,10 +30,10 @@ pilight: Configuration variables: -- **host** (*Required*): The IP address of the computer running the pilight-daemon, e.g. 192.168.1.32. +- **host** (*Required*): The IP address of the computer running the pilight-daemon, e.g., 192.168.1.32. - **port** (*Required*): The network port to connect to. The usual port is [5000](https://manual.pilight.org/development/api.html). - **send_delay** (*Optional*): You can define a send delay as a fraction of seconds if you experience transmission problems when you try to switch multiple switches at once. This can happen when you use a [pilight USB Nano](https://github.com/pilight/pilight-usb-nano) as hardware and switches a whole group of multiple switches on or off. Tested values are between 0.3 and 0.8 seconds depending on the hardware. -- **whitelist** (*Optional*): You can define a whitelist to prevent that too many unwanted RF codes (e.g. the neighbors weather station) are put on your HA event bus. All defined subsections have to be matched. A subsection is matched if one of the items are true. +- **whitelist** (*Optional*): You can define a whitelist to prevent that too many unwanted RF codes (e.g., the neighbors weather station) are put on your HA event bus. All defined subsections have to be matched. A subsection is matched if one of the items are true. In this example only received RF codes using a daycom or Intertechno protocol are put on the event bus and only when the device id is 42. For more possible settings please look at the receiver section of the pilight [API](https://manual.pilight.org/development/api.html). diff --git a/source/_components/proximity.markdown b/source/_components/proximity.markdown index 3d8c45b736..ba8882accd 100644 --- a/source/_components/proximity.markdown +++ b/source/_components/proximity.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Proximity" -description: "Instructions how to setup Proximity monitoring within Home Assistant." +description: "Instructions on how to setup Proximity monitoring within Home Assistant." date: 2016-02-07 10:00 sidebar: true comments: false @@ -50,7 +50,7 @@ proximity: Configuration variables: - **zone** (*Optional*): The zone to which this component is measuring the distance to. Default is the home zone. -- **ignored_zones** array (*Optional*): Where proximity is not calculated for a device (either the device being monitored or ones being compared (e.g. work or school). +- **ignored_zones** array (*Optional*): Where proximity is not calculated for a device (either the device being monitored or ones being compared (e.g., work or school). - **devices** array (*Optional*): A list of devices to compare location against to check closeness to the configured zone. - **tolerance** (*Optional*): The tolerance used to calculate the direction of travel in meters (m) to filter out small GPS coordinate changes. - **unit_of_measurement** (*Optional*): The unit of measurement for distance. Valid values are (km, m, mi, ft) [kilometers, meters, miles and feet respectively]. The default value is kilometers. diff --git a/source/_components/python_script.markdown b/source/_components/python_script.markdown index 5e03edc16c..8d01f2b7c4 100644 --- a/source/_components/python_script.markdown +++ b/source/_components/python_script.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Python Scripts" -description: "Instructions how to setup Python scripts within Home Assistant." +description: "Instructions on how to setup Python scripts within Home Assistant." date: 2017-06-15 19:59 sidebar: true comments: false diff --git a/source/_components/qwikswitch.markdown b/source/_components/qwikswitch.markdown index b7958abeda..cb4d6f3695 100644 --- a/source/_components/qwikswitch.markdown +++ b/source/_components/qwikswitch.markdown @@ -1,7 +1,7 @@ --- layout: page title: "QwikSwitch QSUSB Hub" -description: "Instructions how to integrate the QwikSwitch QSUSB Hub into Home Assistant." +description: "Instructions on how to integrate the QwikSwitch QSUSB Hub into Home Assistant." date: 2016-05-04 00:00 sidebar: true comments: false diff --git a/source/_components/raspihats.markdown b/source/_components/raspihats.markdown index b20878e648..fbe53d3d90 100644 --- a/source/_components/raspihats.markdown +++ b/source/_components/raspihats.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Raspihats" -description: "Instructions how to integrate Raspihats add-on boards for Raspberry Pi into Home Assistant." +description: "Instructions on how to integrate Raspihats add-on boards for Raspberry Pi into Home Assistant." date: 2017-05-01 04:06 sidebar: true comments: false diff --git a/source/_components/recorder.markdown b/source/_components/recorder.markdown index 6e51c65382..b7410f68ea 100644 --- a/source/_components/recorder.markdown +++ b/source/_components/recorder.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Recorder" -description: "Instructions how to configure the data recorder for Home Assistant." +description: "Instructions on how to configure the data recorder for Home Assistant." date: 2017-09-24 09:00 sidebar: true comments: false @@ -119,7 +119,7 @@ recorder: - sensor.date ``` -If you only want to hide events from e.g. your history, take a look at the [`history` component](/components/history/). Same goes for logbook. But if you have privacy concerns about certain events or neither want them in history or logbook, you should use the `exclude`/`include` options of the `recorder` component, that they aren't even in your database. That way you can save storage and keep the database small by excluding certain often-logged events (like `sensor.last_boot`). +If you only want to hide events from e.g., your history, take a look at the [`history` component](/components/history/). Same goes for logbook. But if you have privacy concerns about certain events or neither want them in history or logbook, you should use the `exclude`/`include` options of the `recorder` component, that they aren't even in your database. That way you can save storage and keep the database small by excluding certain often-logged events (like `sensor.last_boot`). ### {% linkable_title Service `purge` %} diff --git a/source/_components/remember_the_milk.markdown b/source/_components/remember_the_milk.markdown index c7244b2f0b..62d7deab2a 100644 --- a/source/_components/remember_the_milk.markdown +++ b/source/_components/remember_the_milk.markdown @@ -12,7 +12,7 @@ ha_category: Calendar ha_release: 0.57 --- -The `Remember The Milk` (RTM) component allows you to create tasks in [remember_the_milk](https://www.rememberthemilk.com) from Home Assistant. You can use this if you want Home Assistant to send you a task that you should not forget, e.g. water the plants. The component allows you to have several RTM accounts in parallel. +The `Remember The Milk` (RTM) component allows you to create tasks in [remember_the_milk](https://www.rememberthemilk.com) from Home Assistant. You can use this if you want Home Assistant to send you a task that you should not forget, e.g., water the plants. The component allows you to have several RTM accounts in parallel. ## {% linkable_title Setup %} diff --git a/source/_components/remote.apple_tv.markdown b/source/_components/remote.apple_tv.markdown index 692de767fc..7fe3bc7f9a 100644 --- a/source/_components/remote.apple_tv.markdown +++ b/source/_components/remote.apple_tv.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Apple TV Remote" -description: "Instructions how to integrate Apple TV remote into Home Assistant." +description: "Instructions on how to integrate Apple TV remote into Home Assistant." date: 2017-06-26 20:50 sidebar: true comments: false diff --git a/source/_components/remote.harmony.markdown b/source/_components/remote.harmony.markdown index cc2eba65cc..c6178d048c 100755 --- a/source/_components/remote.harmony.markdown +++ b/source/_components/remote.harmony.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Harmony Hub Remote" -description: "Instructions how to integrate Harmony Hub remotes into Home Assistant." +description: "Instructions on how to integrate Harmony Hub remotes into Home Assistant." date: 2016-11-05 17:00 sidebar: true comments: false @@ -35,7 +35,7 @@ remote: host: 10.168.1.13 ``` -You can override some default configuration values on a discovered hub (e.g. the `port` or `activity`) by adding a `configuration.yaml` setting. In this case leave the `host` setting empty so the platform will discover the host IP automatically, but set the `name` in the config to match exactly the name you have set for your Hub so the platform knows what Hub you are trying to configure. +You can override some default configuration values on a discovered hub (e.g., the `port` or `activity`) by adding a `configuration.yaml` setting. In this case leave the `host` setting empty so the platform will discover the host IP automatically, but set the `name` in the config to match exactly the name you have set for your Hub so the platform knows what Hub you are trying to configure. ```yaml # Example configuration.yaml entry with discovery diff --git a/source/_components/remote.kira.markdown b/source/_components/remote.kira.markdown index 7924da8fe7..376d29837a 100644 --- a/source/_components/remote.kira.markdown +++ b/source/_components/remote.kira.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Kira Remote" -description: "Instructions how to integrate Kira modules into Home Assistant." +description: "Instructions on how to integrate Kira modules into Home Assistant." date: 2017-05-07 17:00 sidebar: true comments: false diff --git a/source/_components/remote.markdown b/source/_components/remote.markdown index fada23fde3..7359fae9d2 100755 --- a/source/_components/remote.markdown +++ b/source/_components/remote.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Remotes" -description: "Instructions how to setup your remotes with Home Assistant." +description: "Instructions on how to setup your remotes with Home Assistant." date: 2016-11-05 19:39 sidebar: true comments: false diff --git a/source/_components/rest_command.markdown b/source/_components/rest_command.markdown index e42610fef5..4475396730 100644 --- a/source/_components/rest_command.markdown +++ b/source/_components/rest_command.markdown @@ -1,7 +1,7 @@ --- layout: page title: "RESTful Command" -description: "Instructions how to integrate REST commands into Home Assistant." +description: "Instructions on how to integrate REST commands into Home Assistant." date: 2018-02-24 00:00 sidebar: true comments: false diff --git a/source/_components/rflink.markdown b/source/_components/rflink.markdown index 33e2113215..9940451bd4 100644 --- a/source/_components/rflink.markdown +++ b/source/_components/rflink.markdown @@ -1,7 +1,7 @@ --- layout: page title: "RFLink" -description: "Instructions how to integrate RFLink gateway into Home Assistant." +description: "Instructions on how to integrate RFLink gateway into Home Assistant." date: 2016-01-04 sidebar: true comments: false diff --git a/source/_components/rfxtrx.markdown b/source/_components/rfxtrx.markdown index 64c0e1dee4..046e27ac02 100644 --- a/source/_components/rfxtrx.markdown +++ b/source/_components/rfxtrx.markdown @@ -1,7 +1,7 @@ --- layout: page title: "RFXtrx" -description: "Instructions how to integrate RFXtrx into Home Assistant." +description: "Instructions on how to integrate RFXtrx into Home Assistant." date: 2015-10-08 10:15 sidebar: true comments: false @@ -24,7 +24,7 @@ rfxtrx: Configuration variables: -- **device** (*Required*): The path to your device, e.g. `/dev/serial/by-id/usb-RFXCOM_RFXtrx433_A1Y0NJGR-if00-port0` +- **device** (*Required*): The path to your device, e.g., `/dev/serial/by-id/usb-RFXCOM_RFXtrx433_A1Y0NJGR-if00-port0` - **debug** (*Optional*): If you want to receive debug output. - **dummy** (*Optional*): Then you have need a connected drive to test your settings. Can be useful for debugging and testing. diff --git a/source/_components/rpi_gpio.markdown b/source/_components/rpi_gpio.markdown index 642804ffff..31a1befde2 100644 --- a/source/_components/rpi_gpio.markdown +++ b/source/_components/rpi_gpio.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Raspberry Pi GPIO" -description: "Instructions how to integrate the GPIO capability of a Raspberry Pi into Home Assistant." +description: "Instructions on how to integrate the GPIO capability of a Raspberry Pi into Home Assistant." date: 2016-08-30 19:00 sidebar: true comments: false diff --git a/source/_components/rpi_pfio.markdown b/source/_components/rpi_pfio.markdown index 51feb22b70..1b3c4785e5 100644 --- a/source/_components/rpi_pfio.markdown +++ b/source/_components/rpi_pfio.markdown @@ -1,7 +1,7 @@ --- layout: page title: "PiFace Digital I/O" -description: "Instructions how to integrate the PiFace Digital I/O module into Home Assistant." +description: "Instructions on how to integrate the PiFace Digital I/O module into Home Assistant." date: 2016-05-08 15:00 sidebar: true comments: false diff --git a/source/_components/scene.hunterdouglas_powerview.markdown b/source/_components/scene.hunterdouglas_powerview.markdown index 2f63ba6264..2ef810a113 100644 --- a/source/_components/scene.hunterdouglas_powerview.markdown +++ b/source/_components/scene.hunterdouglas_powerview.markdown @@ -1,7 +1,7 @@ --- layout: page title: "PowerView Scenes" -description: "Instructions how to setup Hunter Douglas PowerView scenes within Home Assistant." +description: "Instructions on how to setup Hunter Douglas PowerView scenes within Home Assistant." date: 2016-03-11 16:00 sidebar: true comments: false diff --git a/source/_components/scene.litejet.markdown b/source/_components/scene.litejet.markdown index fca7954e1b..511c1cb6fa 100644 --- a/source/_components/scene.litejet.markdown +++ b/source/_components/scene.litejet.markdown @@ -1,7 +1,7 @@ --- layout: page title: "LiteJet Scenes" -description: "Instructions how to setup LiteJet scenes within Home Assistant." +description: "Instructions on how to setup LiteJet scenes within Home Assistant." date: 2016-10-26 16:00 sidebar: true comments: false diff --git a/source/_components/scene.lutron_caseta.markdown b/source/_components/scene.lutron_caseta.markdown index 2d10556edf..7e07ed485e 100644 --- a/source/_components/scene.lutron_caseta.markdown +++ b/source/_components/scene.lutron_caseta.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Lutron Caseta Scene" -description: "Instructions how to setup Lutron Caseta Scenes within Home Assistant." +description: "Instructions on how to setup Lutron Caseta Scenes within Home Assistant." date: 2017-07-28 16:00 sidebar: true comments: false diff --git a/source/_components/scene.markdown b/source/_components/scene.markdown index 90c816cb1c..4bf9f168f7 100644 --- a/source/_components/scene.markdown +++ b/source/_components/scene.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Scenes" -description: "Instructions how to setup scenes within Home Assistant." +description: "Instructions on how to setup scenes within Home Assistant." date: 2015-03-23 19:59 sidebar: true comments: false diff --git a/source/_components/scene.tahoma.markdown b/source/_components/scene.tahoma.markdown index 1cb708486c..b5cd1c4294 100644 --- a/source/_components/scene.tahoma.markdown +++ b/source/_components/scene.tahoma.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Tahoma Scene" -description: "Instructions how to integrate Tahoma scenes into Home Assistant." +description: "Instructions on how to integrate Tahoma scenes into Home Assistant." date: 2018-02-18 12:00 sidebar: true comments: false diff --git a/source/_components/scene.wink.markdown b/source/_components/scene.wink.markdown index 50ef56848f..cf8e79cf4c 100644 --- a/source/_components/scene.wink.markdown +++ b/source/_components/scene.wink.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Wink Scene" -description: "Instructions how to setup the Wink scenes(shortcuts) within Home Assistant." +description: "Instructions on how to setup the Wink scenes(shortcuts) within Home Assistant." date: 2017-04-01 16:45 sidebar: true comments: false diff --git a/source/_components/script.markdown b/source/_components/script.markdown index 52dd111053..856b758aab 100644 --- a/source/_components/script.markdown +++ b/source/_components/script.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Scripts" -description: "Instructions how to setup scripts within Home Assistant." +description: "Instructions on how to setup scripts within Home Assistant." date: 2015-03-23 19:59 sidebar: true comments: false @@ -26,7 +26,7 @@ script:          message: Current temperature is {% raw %}{{ states.sensor.temperature.state }}{% endraw %} ```

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

    diff --git a/source/_components/scsgate.markdown b/source/_components/scsgate.markdown index c70238554c..30fa3c975f 100644 --- a/source/_components/scsgate.markdown +++ b/source/_components/scsgate.markdown @@ -1,7 +1,7 @@ --- layout: page title: "SCSGate" -description: "Instructions how to integrate SCSGate into Home Assistant." +description: "Instructions on how to integrate SCSGate into Home Assistant." date: 2016-01-31 19:20 sidebar: true comments: false @@ -25,7 +25,7 @@ scsgate: Configuration variables: -- **device** (*Required*): The path to your device, e.g. `/dev/ttyACM0` +- **device** (*Required*): The path to your device, e.g., `/dev/ttyACM0` ### {% linkable_title How to find the scs_id for your devices %} diff --git a/source/_components/sensor.abode.markdown b/source/_components/sensor.abode.markdown index b886d385ab..f2076b85f9 100644 --- a/source/_components/sensor.abode.markdown +++ b/source/_components/sensor.abode.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Abode Sensor" -description: "Instructions how to integrate Abode sensors into Home Assistant." +description: "Instructions on how to integrate Abode sensors into Home Assistant." date: 2017-10-05 14:00 sidebar: true comments: false diff --git a/source/_components/sensor.ads.markdown b/source/_components/sensor.ads.markdown index 0e65a67bb6..2360ac70c3 100644 --- a/source/_components/sensor.ads.markdown +++ b/source/_components/sensor.ads.markdown @@ -1,7 +1,7 @@ --- layout: page title: "ADS Sensor" -description: "Instructions how to integrate ADS numeric values into Home Assistant." +description: "Instructions on how to integrate ADS numeric values into Home Assistant." date: 2017-10-25 10:00 sidebar: true comments: false diff --git a/source/_components/sensor.alarmdecoder.markdown b/source/_components/sensor.alarmdecoder.markdown index d7b0483f9a..770e94f1b7 100644 --- a/source/_components/sensor.alarmdecoder.markdown +++ b/source/_components/sensor.alarmdecoder.markdown @@ -1,7 +1,7 @@ --- layout: page title: "AlarmDecoder Sensor" -description: "Instructions how to integrate AlarmDecoder sensors into Home Assistant." +description: "Instructions on how to integrate AlarmDecoder sensors into Home Assistant." date: 2017-04-02 13:28 sidebar: true comments: false diff --git a/source/_components/sensor.alpha_vantage.markdown b/source/_components/sensor.alpha_vantage.markdown index f984e74354..25714dd5cc 100644 --- a/source/_components/sensor.alpha_vantage.markdown +++ b/source/_components/sensor.alpha_vantage.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Alpha Vantage" -description: "Instructions how to setup Alpha Vantage within Home Assistant." +description: "Instructions on how to setup Alpha Vantage within Home Assistant." date: 2017-12-02 12:00 sidebar: true comments: false diff --git a/source/_components/sensor.amcrest.markdown b/source/_components/sensor.amcrest.markdown index 538369de5a..127021a1e2 100644 --- a/source/_components/sensor.amcrest.markdown +++ b/source/_components/sensor.amcrest.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Amcrest IP Camera" -description: "Instructions how to integrate Amcrest IP cameras sensors within Home Assistant." +description: "Instructions on how to integrate Amcrest IP cameras sensors within Home Assistant." date: 2017-01-13 10:00 sidebar: true comments: false diff --git a/source/_components/sensor.android_ip_webcam.markdown b/source/_components/sensor.android_ip_webcam.markdown index 87f6f0d783..35d4eefb7a 100644 --- a/source/_components/sensor.android_ip_webcam.markdown +++ b/source/_components/sensor.android_ip_webcam.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Android IP Webcam Sensor" -description: "Instructions how to integrate sensors for Android IP webcam within Home Assistant." +description: "Instructions on how to integrate sensors for Android IP webcam within Home Assistant." date: 2017-03-10 00:00 sidebar: true comments: false diff --git a/source/_components/sensor.api_stream.markdown b/source/_components/sensor.api_stream.markdown index 4b2c2a26ec..c363e88533 100644 --- a/source/_components/sensor.api_stream.markdown +++ b/source/_components/sensor.api_stream.markdown @@ -1,7 +1,7 @@ --- layout: page title: "API Stream Sensor" -description: "Instructions how to count clients using the API stream within Home Assistant." +description: "Instructions on how to count clients using the API stream within Home Assistant." date: 2016-11-19 10:00 sidebar: true comments: false diff --git a/source/_components/sensor.arduino.markdown b/source/_components/sensor.arduino.markdown index b7e4c1c6d7..f7f686370a 100644 --- a/source/_components/sensor.arduino.markdown +++ b/source/_components/sensor.arduino.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Arduino Sensor" -description: "Instructions how to integrate Arduino boards pins as sensors within Home Assistant." +description: "Instructions on how to integrate Arduino boards pins as sensors within Home Assistant." date: 2015-09-14 18:28 sidebar: true comments: false diff --git a/source/_components/sensor.arest.markdown b/source/_components/sensor.arest.markdown index bf5c31651c..4f7c68732f 100644 --- a/source/_components/sensor.arest.markdown +++ b/source/_components/sensor.arest.markdown @@ -1,7 +1,7 @@ --- layout: page title: "aREST Sensor" -description: "Instructions how to integrate aREST sensors within Home Assistant." +description: "Instructions on how to integrate aREST sensors within Home Assistant." date: 2015-09-07 18:15 sidebar: true comments: false @@ -33,7 +33,7 @@ sensor: Configuration variables: -- **resource** (*Required*): IP address and schema of the device that is exposing an aREST API, e.g. http://192.168.1.10. +- **resource** (*Required*): IP address and schema of the device that is exposing an aREST API, e.g., http://192.168.1.10. - **name** (*Optional*): Let you overwrite the name of the device. By default *name* from the device is used. - **monitored_variables** array (*Optional*): List of exposed variables. - **[variable]** (*Required*): Name of the variable to monitor. diff --git a/source/_components/sensor.arwn.markdown b/source/_components/sensor.arwn.markdown index fb66cc50bd..8a9eea544a 100644 --- a/source/_components/sensor.arwn.markdown +++ b/source/_components/sensor.arwn.markdown @@ -1,7 +1,7 @@ --- layout: page title: "ARWN Sensor" -description: "Instructions how to integrate ARWN within Home Assistant." +description: "Instructions on how to integrate ARWN within Home Assistant." date: 2016-10-20 15:15 sidebar: true comments: false diff --git a/source/_components/sensor.bh1750.markdown b/source/_components/sensor.bh1750.markdown index 8b07a84482..4910cdfba0 100644 --- a/source/_components/sensor.bh1750.markdown +++ b/source/_components/sensor.bh1750.markdown @@ -1,7 +1,7 @@ --- layout: page title: "BH1750 Light sensor" -description: "Instructions how to integrate a BH1750 light sensor into Home Assistant." +description: "Instructions on how to integrate a BH1750 light sensor into Home Assistant." date: 2017-06-10 00:00 sidebar: true comments: false diff --git a/source/_components/sensor.bitcoin.markdown b/source/_components/sensor.bitcoin.markdown index 85173adc72..ba47bf8d9e 100644 --- a/source/_components/sensor.bitcoin.markdown +++ b/source/_components/sensor.bitcoin.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Bitcoin" -description: "Instructions how to integrate Bitcoin data within Home Assistant." +description: "Instructions on how to integrate Bitcoin data within Home Assistant." date: 2015-05-08 17:15 sidebar: true comments: false diff --git a/source/_components/sensor.blockchain.markdown b/source/_components/sensor.blockchain.markdown index 21da288337..8c441ff88b 100644 --- a/source/_components/sensor.blockchain.markdown +++ b/source/_components/sensor.blockchain.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Blockchain.info" -description: "Instructions how to integrate Blockchain.info data within Home Assistant." +description: "Instructions on how to integrate Blockchain.info data within Home Assistant." date: 2017-06-01 16:20 sidebar: true comments: false diff --git a/source/_components/sensor.bloomsky.markdown b/source/_components/sensor.bloomsky.markdown index a975a0300c..61b850de1e 100644 --- a/source/_components/sensor.bloomsky.markdown +++ b/source/_components/sensor.bloomsky.markdown @@ -1,7 +1,7 @@ --- layout: page title: "BloomSky Sensor" -description: "Instructions how to integrate the BloomSky sensors within Home Assistant." +description: "Instructions on how to integrate the BloomSky sensors within Home Assistant." date: 2016-02-03 20:00 sidebar: true comments: false diff --git a/source/_components/sensor.bme280.markdown b/source/_components/sensor.bme280.markdown index 8da831b067..7dd524405a 100644 --- a/source/_components/sensor.bme280.markdown +++ b/source/_components/sensor.bme280.markdown @@ -1,7 +1,7 @@ --- layout: page title: "BME280 Sensor" -description: "Instructions how to integrate a BME280 sensor into Home Assistant." +description: "Instructions on how to integrate a BME280 sensor into Home Assistant." date: 2017-06-10 00:00 sidebar: true comments: false diff --git a/source/_components/sensor.bme680.markdown b/source/_components/sensor.bme680.markdown index e6978a3f0f..05d42769c1 100644 --- a/source/_components/sensor.bme680.markdown +++ b/source/_components/sensor.bme680.markdown @@ -105,7 +105,7 @@ aq_humidity_baseline: default: 40 type: int aq_humidity_bias: - description: The bias for humidity to the gas resistance measurement in the air quality calculations expressed as a percentage of the total calculation e.g. 25% hudidtity to 75% gas. + description: The bias for humidity to the gas resistance measurement in the air quality calculations expressed as a percentage of the total calculation e.g., 25% hudidtity to 75% gas. required: false default: 25 type: int diff --git a/source/_components/sensor.broadlink.markdown b/source/_components/sensor.broadlink.markdown index 70e82936ad..4688cf2aa0 100644 --- a/source/_components/sensor.broadlink.markdown +++ b/source/_components/sensor.broadlink.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Broadlink RM2 and A1 sensor" -description: "Instructions how to integrate Broadlink RM2 and/or A1 E-air sensors within Home Assistant." +description: "Instructions on how to integrate Broadlink RM2 and/or A1 E-air sensors within Home Assistant." date: 2016-12-03 21:59 sidebar: true comments: false @@ -78,7 +78,7 @@ sensor: The pycrypto library needs to be available on your platform. On a typical windows sysytem `pip install pycrypto` will fail, as a compiler needs to be installed first.

    -The quickest way around this is to use a pre-built binary, e.g. from [https://github.com/sfbahr/PyCrypto-Wheels](https://github.com/sfbahr/PyCrypto-Wheels) +The quickest way around this is to use a pre-built binary, e.g., from [https://github.com/sfbahr/PyCrypto-Wheels](https://github.com/sfbahr/PyCrypto-Wheels) Be sure to get the correct 64 or 32-bit binary for your system, the full command line will look something like the sample below for a 64-bit system: diff --git a/source/_components/sensor.buienradar.markdown b/source/_components/sensor.buienradar.markdown index 2ddce39ce7..63e1f88b46 100644 --- a/source/_components/sensor.buienradar.markdown +++ b/source/_components/sensor.buienradar.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Buienradar Sensor" -description: "Instructions how to integrate buienradar.nl sensor within Home Assistant." +description: "Instructions on how to integrate buienradar.nl sensor within Home Assistant." date: 2017-05-15 14:00 sidebar: true comments: false diff --git a/source/_components/sensor.coinbase.markdown b/source/_components/sensor.coinbase.markdown index 89c06fc6f3..c506d82341 100644 --- a/source/_components/sensor.coinbase.markdown +++ b/source/_components/sensor.coinbase.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Coinbase Sensor" -description: "Instructions how to setup Coinbase sensors within Home Assistant." +description: "Instructions on how to setup Coinbase sensors within Home Assistant." date: 2017-12-08 18:00 sidebar: true comments: false diff --git a/source/_components/sensor.coinmarketcap.markdown b/source/_components/sensor.coinmarketcap.markdown index 63fde6b5ea..1fc1300ab5 100644 --- a/source/_components/sensor.coinmarketcap.markdown +++ b/source/_components/sensor.coinmarketcap.markdown @@ -1,7 +1,7 @@ --- layout: page title: "CoinMarketCap" -description: "Instructions how to integrate CoinMarketCap data within Home Assistant." +description: "Instructions on how to integrate CoinMarketCap data within Home Assistant." date: 2016-08-31 08:15 sidebar: true comments: false diff --git a/source/_components/sensor.comed_hourly_pricing.markdown b/source/_components/sensor.comed_hourly_pricing.markdown index d278c8a713..b371c8c197 100644 --- a/source/_components/sensor.comed_hourly_pricing.markdown +++ b/source/_components/sensor.comed_hourly_pricing.markdown @@ -1,7 +1,7 @@ --- layout: page title: "ComEd Hourly Pricing" -description: "Instructions how to set up the ComEd Hourly Pricing sensor in Home Assistant." +description: "Instructions on how to set up the ComEd Hourly Pricing sensor in Home Assistant." date: 2017-03-02 0:15 sidebar: true comments: false diff --git a/source/_components/sensor.comfoconnect.markdown b/source/_components/sensor.comfoconnect.markdown index 78d22454b9..0d9400f5ce 100644 --- a/source/_components/sensor.comfoconnect.markdown +++ b/source/_components/sensor.comfoconnect.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Zehnder ComfoAir Q Ventilation sensors" -description: "Instructions how to integrate Zehnder ComfoAir Q350/450/600 sensors into Home Assistant." +description: "Instructions on how to integrate Zehnder ComfoAir Q350/450/600 sensors into Home Assistant." date: 2017-06-28 18:00 sidebar: true comments: false diff --git a/source/_components/sensor.command_line.markdown b/source/_components/sensor.command_line.markdown index e27656e9a5..e006ba2b6f 100644 --- a/source/_components/sensor.command_line.markdown +++ b/source/_components/sensor.command_line.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Command line Sensor" -description: "Instructions how to integrate command line sensors into Home Assistant." +description: "Instructions on how to integrate command line sensors into Home Assistant." date: 2015-09-13 10:10 sidebar: true comments: false diff --git a/source/_components/sensor.cpuspeed.markdown b/source/_components/sensor.cpuspeed.markdown index c997ae5a2f..f69f014967 100644 --- a/source/_components/sensor.cpuspeed.markdown +++ b/source/_components/sensor.cpuspeed.markdown @@ -1,7 +1,7 @@ --- layout: page title: "CPU speed" -description: "Instructions how to integrate CPU speed within Home Assistant." +description: "Instructions on how to integrate CPU speed within Home Assistant." date: 2015-10-15 11:00 sidebar: true comments: false diff --git a/source/_components/sensor.cups.markdown b/source/_components/sensor.cups.markdown index eb9f43e9dd..2e32f5aa0f 100644 --- a/source/_components/sensor.cups.markdown +++ b/source/_components/sensor.cups.markdown @@ -1,7 +1,7 @@ --- layout: page title: "CUPS Sensor" -description: "Instructions how to integrate CUPS sensors into Home Assistant." +description: "Instructions on how to integrate CUPS sensors into Home Assistant." date: 2016-10-30 12:10 sidebar: true comments: false diff --git a/source/_components/sensor.deluge.markdown b/source/_components/sensor.deluge.markdown index 2f495a8d04..d80cedf2f8 100644 --- a/source/_components/sensor.deluge.markdown +++ b/source/_components/sensor.deluge.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Deluge Sensor" -description: "Instructions how to integrate Deluge sensors within Home Assistant." +description: "Instructions on how to integrate Deluge sensors within Home Assistant." date: 2017-10-24 17:06 sidebar: true comments: false diff --git a/source/_components/sensor.deutsche_bahn.markdown b/source/_components/sensor.deutsche_bahn.markdown index a2003e4c7d..6586e49452 100644 --- a/source/_components/sensor.deutsche_bahn.markdown +++ b/source/_components/sensor.deutsche_bahn.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Deutsche Bahn" -description: "Instructions how to integrate timetable data for traveling in Germany within Home Assistant." +description: "Instructions on how to integrate timetable data for traveling in Germany within Home Assistant." date: 2015-06-02 21:45 sidebar: true comments: false diff --git a/source/_components/sensor.dht.markdown b/source/_components/sensor.dht.markdown index fd187c6794..1898ab35d4 100644 --- a/source/_components/sensor.dht.markdown +++ b/source/_components/sensor.dht.markdown @@ -1,7 +1,7 @@ --- layout: page title: "DHT Sensor" -description: "Instructions how to integrate DHTxx sensors within Home Assistant." +description: "Instructions on how to integrate DHTxx sensors within Home Assistant." date: 2015-08-30 19:15 sidebar: true comments: false diff --git a/source/_components/sensor.dovado.markdown b/source/_components/sensor.dovado.markdown index f300a90fcb..bbbd0bae3c 100644 --- a/source/_components/sensor.dovado.markdown +++ b/source/_components/sensor.dovado.markdown @@ -33,8 +33,8 @@ Configuration variables: - **username** (*Required*): Your username. - **password** (*Required*): Your password. -- **host** (*Optional*): The IP address of your router, e.g. `192.168.1.1`. If no host is provided, the gateway for the same network as Home Assistant will automatically be used. -- **port** (*Optional*): The port number of your router, e.g. `999`. If no port is provided, the default API port (6435) will be used. +- **host** (*Optional*): The IP address of your router, e.g., `192.168.1.1`. If no host is provided, the gateway for the same network as Home Assistant will automatically be used. +- **port** (*Optional*): The port number of your router, e.g., `999`. If no port is provided, the default API port (6435) will be used. - **sensors** array (*Required*): Conditions to display in the frontend. - **network**: Network state (3G, 4G, etc). - **signal**: The signal strength (%). diff --git a/source/_components/sensor.dsmr.markdown b/source/_components/sensor.dsmr.markdown index b073aae82f..9980021de1 100644 --- a/source/_components/sensor.dsmr.markdown +++ b/source/_components/sensor.dsmr.markdown @@ -1,7 +1,7 @@ --- layout: page title: "DSMR or Slimme meter" -description: "Instructions how to integrate DSMR Smartmeter within Home Assistant." +description: "Instructions on how to integrate DSMR Smartmeter within Home Assistant." date: 2016-11-12 12:00 sidebar: true comments: false diff --git a/source/_components/sensor.dte_energy_bridge.markdown b/source/_components/sensor.dte_energy_bridge.markdown index c79c4b73a0..80028de606 100644 --- a/source/_components/sensor.dte_energy_bridge.markdown +++ b/source/_components/sensor.dte_energy_bridge.markdown @@ -1,7 +1,7 @@ --- layout: page title: "DTE Energy Bridge" -description: "Instructions how to setup DTE Energy Bridge with Home Assistant." +description: "Instructions on how to setup DTE Energy Bridge with Home Assistant." date: 2016-06-07 08:10 sidebar: true comments: false diff --git a/source/_components/sensor.dublin_bus_transport.markdown b/source/_components/sensor.dublin_bus_transport.markdown index 4a25dc5990..6c32206895 100644 --- a/source/_components/sensor.dublin_bus_transport.markdown +++ b/source/_components/sensor.dublin_bus_transport.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Dublin Bus Transport" -description: "Instructions how to integrate timetable data for traveling on Dublin Bus within Home Assistant." +description: "Instructions on how to integrate timetable data for traveling on Dublin Bus within Home Assistant." date: 2017-01-09 21:45 sidebar: true comments: false @@ -32,7 +32,7 @@ sensor: Configuration variables: - **stopid** (*Required*): The ID of the bus stop to get the information for. -- **route** (*Optional*): Only show a single bus route at the stop. This is the same as the bus number, e.g. `83`. +- **route** (*Optional*): Only show a single bus route at the stop. This is the same as the bus number, e.g., `83`. - **name** (*Optional*): A friendly name for this sensor. The public RTPI information is coming from [Dub Linked](https://data.dublinked.ie/). diff --git a/source/_components/sensor.dweet.markdown b/source/_components/sensor.dweet.markdown index bc3c710f53..1bc81d27e6 100644 --- a/source/_components/sensor.dweet.markdown +++ b/source/_components/sensor.dweet.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Dweet.io" -description: "Instructions how to integrate Dweet.io sensors within Home Assistant." +description: "Instructions on how to integrate Dweet.io sensors within Home Assistant." date: 2015-12-10 10:15 sidebar: true comments: false diff --git a/source/_components/sensor.dyson.markdown b/source/_components/sensor.dyson.markdown index 39ac3c5510..022d778ceb 100644 --- a/source/_components/sensor.dyson.markdown +++ b/source/_components/sensor.dyson.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Dyson Purifier Sensor" -description: "Instructions how to setup the Dyson Purifier fans within Home Assistant." +description: "Instructions on how to setup the Dyson Purifier fans within Home Assistant." date: 2017-05-27 10:00 sidebar: true comments: false diff --git a/source/_components/sensor.ebox.markdown b/source/_components/sensor.ebox.markdown index a76f9feacc..d2ad1a9cb5 100644 --- a/source/_components/sensor.ebox.markdown +++ b/source/_components/sensor.ebox.markdown @@ -1,7 +1,7 @@ --- layout: page title: "EBox" -description: "Instructions how to integrate EBox data usage within Home Assistant." +description: "Instructions on how to integrate EBox data usage within Home Assistant." date: 2017-02-15 17:17 sidebar: true comments: false diff --git a/source/_components/sensor.ecobee.markdown b/source/_components/sensor.ecobee.markdown index 0ae2be049b..19491a566e 100644 --- a/source/_components/sensor.ecobee.markdown +++ b/source/_components/sensor.ecobee.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Ecobee Sensor" -description: "Instructions how to setup the Ecobee sensors within Home Assistant." +description: "Instructions on how to setup the Ecobee sensors within Home Assistant." date: 2015-11-30 18:00 sidebar: true comments: false diff --git a/source/_components/sensor.efergy.markdown b/source/_components/sensor.efergy.markdown index b1bde92188..3fed31f58d 100644 --- a/source/_components/sensor.efergy.markdown +++ b/source/_components/sensor.efergy.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Efergy" -description: "Instructions how to integrate Efergy devices within Home Assistant." +description: "Instructions on how to integrate Efergy devices within Home Assistant." date: 2015-07-11 0:15 sidebar: true comments: false diff --git a/source/_components/sensor.eight_sleep.markdown b/source/_components/sensor.eight_sleep.markdown index 635587b25a..2d78d94f70 100644 --- a/source/_components/sensor.eight_sleep.markdown +++ b/source/_components/sensor.eight_sleep.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Eight Sleep Sensor" -description: "Instructions how to integrate sensors for Eight Sleep within Home Assistant." +description: "Instructions on how to integrate sensors for Eight Sleep within Home Assistant." date: 2017-04-24 00:00 sidebar: true comments: false diff --git a/source/_components/sensor.eliqonline.markdown b/source/_components/sensor.eliqonline.markdown index 87dd5ac8fd..b87f019f0e 100644 --- a/source/_components/sensor.eliqonline.markdown +++ b/source/_components/sensor.eliqonline.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Eliqonline" -description: "Instructions how to integrate Eliqonline devices within Home Assistant." +description: "Instructions on how to integrate Eliqonline devices within Home Assistant." date: 2015-07-11 0:15 sidebar: true comments: false diff --git a/source/_components/sensor.emoncms.markdown b/source/_components/sensor.emoncms.markdown index 3fb5f1aeab..a15c508199 100644 --- a/source/_components/sensor.emoncms.markdown +++ b/source/_components/sensor.emoncms.markdown @@ -42,8 +42,8 @@ sensor: ## {% linkable_title Default naming scheme %} The names of the sensors created by this component will use the feed names defined in EmonCMS if available, -or the feed ID otherwise, and will be prefixed with "EmonCMS", e.g. "EmonCMS Total Power" or "EmonCMS Feed 5". -If the `id` property is anything but `1`, the ID will be shown as well, e.g. "EmonCMS 2 Feed 5". +or the feed ID otherwise, and will be prefixed with "EmonCMS", e.g., "EmonCMS Total Power" or "EmonCMS Feed 5". +If the `id` property is anything but `1`, the ID will be shown as well, e.g., "EmonCMS 2 Feed 5". If `sensor_names` is used, any feeds with defined names will get those names exactly, with no prefix. diff --git a/source/_components/sensor.enocean.markdown b/source/_components/sensor.enocean.markdown index 6b627361f1..669c07825a 100644 --- a/source/_components/sensor.enocean.markdown +++ b/source/_components/sensor.enocean.markdown @@ -1,7 +1,7 @@ --- layout: page title: "EnOcean Sensor" -description: "Instructions how to integrate TellStick sensors into Home Assistant." +description: "Instructions on how to integrate TellStick sensors into Home Assistant." date: 2016-05-26 01:00 sidebar: true comments: false diff --git a/source/_components/sensor.envirophat.markdown b/source/_components/sensor.envirophat.markdown index 84d87d55c1..9863a4ab3b 100644 --- a/source/_components/sensor.envirophat.markdown +++ b/source/_components/sensor.envirophat.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Enviro pHAT" -description: "Instructions how to integrate the Enviro pHAT within Home Assistant." +description: "Instructions on how to integrate the Enviro pHAT within Home Assistant." date: 2017-05-03 17:00 sidebar: true comments: false diff --git a/source/_components/sensor.envisalink.markdown b/source/_components/sensor.envisalink.markdown index 24f6474f14..94235f48b8 100644 --- a/source/_components/sensor.envisalink.markdown +++ b/source/_components/sensor.envisalink.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Envisalink Sensor" -description: "Instructions how to integrate Envisalink sensors into Home Assistant." +description: "Instructions on how to integrate Envisalink sensors into Home Assistant." date: 2016-07-01 10:00 sidebar: true comments: false diff --git a/source/_components/sensor.etherscan.markdown b/source/_components/sensor.etherscan.markdown index a94f0689a2..785ed42492 100644 --- a/source/_components/sensor.etherscan.markdown +++ b/source/_components/sensor.etherscan.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Etherscan" -description: "Instructions how to integrate Etherscan.io data within Home Assistant." +description: "Instructions on how to integrate Etherscan.io data within Home Assistant." date: 2017-06-01 16:20 sidebar: true comments: false diff --git a/source/_components/sensor.fail2ban.markdown b/source/_components/sensor.fail2ban.markdown index 5fb8c141f4..06083f815b 100644 --- a/source/_components/sensor.fail2ban.markdown +++ b/source/_components/sensor.fail2ban.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Fail2Ban Sensor" -description: "Instructions how to integrate a fail2ban sensor into Home Assistant." +description: "Instructions on how to integrate a fail2ban sensor into Home Assistant." date: 2017-10-19 10:30 sidebar: true comments: false diff --git a/source/_components/sensor.fido.markdown b/source/_components/sensor.fido.markdown index 165f52bbf0..edb59195a3 100644 --- a/source/_components/sensor.fido.markdown +++ b/source/_components/sensor.fido.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Fido" -description: "Instructions how to integrate Fido data usage within Home Assistant." +description: "Instructions on how to integrate Fido data usage within Home Assistant." date: 2017-01-01 17:17 sidebar: true comments: false diff --git a/source/_components/sensor.file.markdown b/source/_components/sensor.file.markdown index 741d297c41..2b541830ad 100644 --- a/source/_components/sensor.file.markdown +++ b/source/_components/sensor.file.markdown @@ -1,7 +1,7 @@ --- layout: page title: "File Sensor" -description: "Instructions how to integrate sensors which read from files into Home Assistant." +description: "Instructions on how to integrate sensors which read from files into Home Assistant." date: 2017-05-13 12:10 sidebar: true comments: false diff --git a/source/_components/sensor.filter.markdown b/source/_components/sensor.filter.markdown index 07f5b33e3a..e659df06fd 100644 --- a/source/_components/sensor.filter.markdown +++ b/source/_components/sensor.filter.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Filter Sensor" -description: "Instructions how to integrate Data Filter Sensors into Home Assistant." +description: "Instructions on how to integrate Data Filter Sensors into Home Assistant." date: 2018-02-20 sidebar: true comments: false diff --git a/source/_components/sensor.fitbit.markdown b/source/_components/sensor.fitbit.markdown index 4ea3e71cd4..a273f3d8af 100644 --- a/source/_components/sensor.fitbit.markdown +++ b/source/_components/sensor.fitbit.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Fitbit" -description: "Instructions how to integrate Fitbit devices within Home Assistant." +description: "Instructions on how to integrate Fitbit devices within Home Assistant." date: 2016-05-09 15:01 sidebar: true comments: false diff --git a/source/_components/sensor.fixer.markdown b/source/_components/sensor.fixer.markdown index 220619cf30..397d3b5b71 100644 --- a/source/_components/sensor.fixer.markdown +++ b/source/_components/sensor.fixer.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Fixer.io" -description: "Instructions how to integrate exchange rates from Fixer.io within Home Assistant." +description: "Instructions on how to integrate exchange rates from Fixer.io within Home Assistant." date: 2016-06-20 10:00 sidebar: true comments: false diff --git a/source/_components/sensor.fritzbox_callmonitor.markdown b/source/_components/sensor.fritzbox_callmonitor.markdown index 157e338e43..85643e2dff 100644 --- a/source/_components/sensor.fritzbox_callmonitor.markdown +++ b/source/_components/sensor.fritzbox_callmonitor.markdown @@ -1,7 +1,7 @@ --- layout: page title: "FRITZ!Box Call Monitor" -description: "Instructions how to integrate a phone call monitor for AVM FRITZ!Box routers into Home Assistant." +description: "Instructions on how to integrate a phone call monitor for AVM FRITZ!Box routers into Home Assistant." date: 2016-08-13 15:00 sidebar: true comments: false diff --git a/source/_components/sensor.fritzbox_netmonitor.markdown b/source/_components/sensor.fritzbox_netmonitor.markdown index 9842499a1a..58eea96a16 100644 --- a/source/_components/sensor.fritzbox_netmonitor.markdown +++ b/source/_components/sensor.fritzbox_netmonitor.markdown @@ -1,7 +1,7 @@ --- layout: page title: "FRITZ!Box Net Monitor" -description: "Instructions how to integrate an AVM FRITZ!Box monitor into Home Assistant." +description: "Instructions on how to integrate an AVM FRITZ!Box monitor into Home Assistant." date: 2017-01-17 22:00 sidebar: true comments: false diff --git a/source/_components/sensor.geizhals.markdown b/source/_components/sensor.geizhals.markdown index 13f02fc7a1..c978074056 100644 --- a/source/_components/sensor.geizhals.markdown +++ b/source/_components/sensor.geizhals.markdown @@ -14,7 +14,7 @@ ha_release: "0.51" --- -The `geizhals` sensor will give you the best price of a product from [Geizhals](https://geizhals.de) or related site. With this information can be used in e.g. automations to notify you when a price drops. +The `geizhals` sensor will give you the best price of a product from [Geizhals](https://geizhals.de) or related site. With this information can be used in e.g., automations to notify you when a price drops. To enable this sensor, add the following lines to your `configuration.yaml` file: @@ -29,7 +29,7 @@ sensor: Configuration variables: - **name** (*Required*): The internal name of the product in Home Assistant. -- **product_id** (*Required*): ID of the product. Get the ID from the geizhals website of your chosen product by clicking on the *Price History* tab, e.g. [here](https://geizhals.de/?phist=1453021). The URL of this site reveals the ID, e.g. with `product_id: 1453021`. +- **product_id** (*Required*): ID of the product. Get the ID from the geizhals website of your chosen product by clicking on the *Price History* tab, e.g., [here](https://geizhals.de/?phist=1453021). The URL of this site reveals the ID, e.g., with `product_id: 1453021`. - **description** (*Optional*): The name of the product in the front end. - **domain** (*Optional*): Domain which should be used for the request. Set this to `geizhals.at`, `geizhals.eu`, `geizhals.de`, `skinflint.co.uk` or `cenowarka.pl`. Defaults to `geizhals.de`. - **regex** (*Optional*): Regular expression to parse the price. Default: `\D\s(\d*)[\,|\.](\d*)`. diff --git a/source/_components/sensor.gitter.markdown b/source/_components/sensor.gitter.markdown index 55b8d29fe4..a114887f97 100644 --- a/source/_components/sensor.gitter.markdown +++ b/source/_components/sensor.gitter.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Gitter Sensor" -description: "Instructions how to integrate a Gitter room sensor with Home Assistant" +description: "Instructions on how to integrate a Gitter room sensor with Home Assistant" date: 2017-06-11 09:00 sidebar: true comments: false diff --git a/source/_components/sensor.glances.markdown b/source/_components/sensor.glances.markdown index 03b25369a7..907d57801d 100644 --- a/source/_components/sensor.glances.markdown +++ b/source/_components/sensor.glances.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Glances" -description: "Instructions how to integrate Glances sensors into Home Assistant." +description: "Instructions on how to integrate Glances sensors into Home Assistant." date: 2015-09-14 19:10 sidebar: true comments: false diff --git a/source/_components/sensor.google_wifi.markdown b/source/_components/sensor.google_wifi.markdown index 76bb37400a..303c89ed0a 100644 --- a/source/_components/sensor.google_wifi.markdown +++ b/source/_components/sensor.google_wifi.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Google Wifi" -description: "Instructions how to integrate Google Wifi/OnHub routers into Home Assistant." +description: "Instructions on how to integrate Google Wifi/OnHub routers into Home Assistant." date: 2017-07-15 21:22 sidebar: true comments: false diff --git a/source/_components/sensor.gpsd.markdown b/source/_components/sensor.gpsd.markdown index 0436c5f3d1..82448cd970 100644 --- a/source/_components/sensor.gpsd.markdown +++ b/source/_components/sensor.gpsd.markdown @@ -1,7 +1,7 @@ --- layout: page title: "GPSD" -description: "Instructions how to integrate GPSD into Home Assistant." +description: "Instructions on how to integrate GPSD into Home Assistant." date: 2016-07-18 07:00 sidebar: true comments: false diff --git a/source/_components/sensor.haveibeenpwned.markdown b/source/_components/sensor.haveibeenpwned.markdown index d58401931b..7a6b7bc1b3 100644 --- a/source/_components/sensor.haveibeenpwned.markdown +++ b/source/_components/sensor.haveibeenpwned.markdown @@ -1,7 +1,7 @@ --- layout: page title: "HaveIBeenPwned Sensor" -description: "Instructions how to integrate HaveIBeenPwned sensor into Home Assistant." +description: "Instructions on how to integrate HaveIBeenPwned sensor into Home Assistant." date: 2016-09-29 18:00 sidebar: true comments: false diff --git a/source/_components/sensor.hddtemp.markdown b/source/_components/sensor.hddtemp.markdown index 73c84fd8a1..0116bedde1 100644 --- a/source/_components/sensor.hddtemp.markdown +++ b/source/_components/sensor.hddtemp.markdown @@ -1,7 +1,7 @@ --- layout: page title: "HDDTemp" -description: "Instructions how to integrate hard drive temperature information into Home Assistant." +description: "Instructions on how to integrate hard drive temperature information into Home Assistant." date: 2016-10-28 07:00 sidebar: true comments: false diff --git a/source/_components/sensor.homematic.markdown b/source/_components/sensor.homematic.markdown index aea1b6d5ef..005011cea6 100644 --- a/source/_components/sensor.homematic.markdown +++ b/source/_components/sensor.homematic.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Homematic Sensor" -description: "Instructions how to integrate Homematic sensors within Home Assistant." +description: "Instructions on how to integrate Homematic sensors within Home Assistant." date: 2016-06-28 08:30 sidebar: true comments: false diff --git a/source/_components/sensor.hp_ilo.markdown b/source/_components/sensor.hp_ilo.markdown index 1f51f2052c..25d6ccb5e5 100644 --- a/source/_components/sensor.hp_ilo.markdown +++ b/source/_components/sensor.hp_ilo.markdown @@ -15,7 +15,7 @@ ha_iot_class: "Local Polling" The `hp_ilo` platform allows you to do an API call to the HP ILO (Integrated Lights-Out) sensor of your server, and use this data in Home Assistant sensors. -If the ILO or specified jsonpath query returns only a single value (e.g. a temperature or state), it will be put in the state field. If a data structure is returned, it will be placed in the `ilo_data` attribute. +If the ILO or specified jsonpath query returns only a single value (e.g., a temperature or state), it will be put in the state field. If a data structure is returned, it will be placed in the `ilo_data` attribute. Some more details about what can be retrieved from these sensors is available in the [python-hpilo documentation](http://pythonhosted.org/python-hpilo/). diff --git a/source/_components/sensor.http.markdown b/source/_components/sensor.http.markdown index c119330eb4..9b0ec80fe1 100644 --- a/source/_components/sensor.http.markdown +++ b/source/_components/sensor.http.markdown @@ -1,7 +1,7 @@ --- layout: page title: "HTTP Sensor" -description: "Instructions how to integrate HTTP sensors within Home Assistant." +description: "Instructions on how to integrate HTTP sensors within Home Assistant." date: 2016-02-05 12:15 sidebar: true comments: false diff --git a/source/_components/sensor.htu21d.markdown b/source/_components/sensor.htu21d.markdown index f81b0f6c71..a485fb0c38 100644 --- a/source/_components/sensor.htu21d.markdown +++ b/source/_components/sensor.htu21d.markdown @@ -1,7 +1,7 @@ --- layout: page title: "HTU21D Temperature and humidity sensor" -description: "Instructions how to integrate a HTU21D Temperature and humidity sensor into Home Assistant." +description: "Instructions on how to integrate a HTU21D Temperature and humidity sensor into Home Assistant." date: 2017-06-10 00:00 sidebar: true comments: false diff --git a/source/_components/sensor.hydroquebec.markdown b/source/_components/sensor.hydroquebec.markdown index 18de06c9c7..891f74ae21 100644 --- a/source/_components/sensor.hydroquebec.markdown +++ b/source/_components/sensor.hydroquebec.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Hydro-Québec" -description: "Instructions how to integrate Hydro-Québec consumption profile within Home Assistant." +description: "Instructions on how to integrate Hydro-Québec consumption profile within Home Assistant." date: 2016-12-10 0:15 sidebar: true comments: false diff --git a/source/_components/sensor.ihc.markdown b/source/_components/sensor.ihc.markdown index 70ec6c11e2..b3e91ed982 100644 --- a/source/_components/sensor.ihc.markdown +++ b/source/_components/sensor.ihc.markdown @@ -1,7 +1,7 @@ --- layout: page title: "IHC Sensor" -description: "Instructions how to integrate IHC Sensors within Home Assistant." +description: "Instructions on how to integrate IHC Sensors within Home Assistant." date: 2017-11-27 13:35 sidebar: true comments: false diff --git a/source/_components/sensor.imap.markdown b/source/_components/sensor.imap.markdown index 34fd3df923..f6e192bdda 100644 --- a/source/_components/sensor.imap.markdown +++ b/source/_components/sensor.imap.markdown @@ -1,7 +1,7 @@ --- layout: page title: "IMAP Unread E-mail" -description: "Instructions how to integrate IMAP unread email into Home Assistant." +description: "Instructions on how to integrate IMAP unread email into Home Assistant." date: 2016-07-11 06:00 sidebar: true comments: false diff --git a/source/_components/sensor.imap_email_content.markdown b/source/_components/sensor.imap_email_content.markdown index 35f9d2d694..22212426f6 100644 --- a/source/_components/sensor.imap_email_content.markdown +++ b/source/_components/sensor.imap_email_content.markdown @@ -1,7 +1,7 @@ --- layout: page title: "IMAP Email Content" -description: "Instructions how to integrate IMAP email content sensor into Home Assistant." +description: "Instructions on how to integrate IMAP email content sensor into Home Assistant." date: 2016-09-09 12:30 sidebar: true comments: false diff --git a/source/_components/sensor.influxdb.markdown b/source/_components/sensor.influxdb.markdown index 32f18814a2..66680379f7 100644 --- a/source/_components/sensor.influxdb.markdown +++ b/source/_components/sensor.influxdb.markdown @@ -1,7 +1,7 @@ --- layout: page title: "InfluxDB Sensor" -description: "Instructions how to integrate InfluxDB sensors within Home Assistant." +description: "Instructions on how to integrate InfluxDB sensors within Home Assistant." date: 2016-10-26 23:15 sidebar: true comments: false diff --git a/source/_components/sensor.insteon_plm.markdown b/source/_components/sensor.insteon_plm.markdown index db9125f33a..1974ea9540 100644 --- a/source/_components/sensor.insteon_plm.markdown +++ b/source/_components/sensor.insteon_plm.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Insteon PLM Sensor" -description: "Instructions how to setup the Insteon PLM sensors locally within Home Assistant." +description: "Instructions on how to setup the Insteon PLM sensors locally within Home Assistant." date: 2017-02-19 17:00 sidebar: true comments: false diff --git a/source/_components/sensor.isy994.markdown b/source/_components/sensor.isy994.markdown index 60913660ef..0be49fb0e1 100644 --- a/source/_components/sensor.isy994.markdown +++ b/source/_components/sensor.isy994.markdown @@ -1,7 +1,7 @@ --- layout: page title: "ISY994 Sensor" -description: "Instructions how to integrate ISY994 sensors into Home Assistant." +description: "Instructions on how to integrate ISY994 sensors into Home Assistant." date: 2016-09-03 23:00 sidebar: true comments: false diff --git a/source/_components/sensor.juicenet.markdown b/source/_components/sensor.juicenet.markdown index b65740d15e..03bad7fccc 100644 --- a/source/_components/sensor.juicenet.markdown +++ b/source/_components/sensor.juicenet.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Juicenet Sensor" -description: "Instructions how to setup WiFi-equipped Juicenet charging stations with Home Assistant." +description: "Instructions on how to setup WiFi-equipped Juicenet charging stations with Home Assistant." date: 2015-01-20 22:36 sidebar: true comments: false diff --git a/source/_components/sensor.kira.markdown b/source/_components/sensor.kira.markdown index 3f4d30443b..1306cf161b 100644 --- a/source/_components/sensor.kira.markdown +++ b/source/_components/sensor.kira.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Kira Sensor" -description: "Instructions how to integrate Kira modules into Home Assistant." +description: "Instructions on how to integrate Kira modules into Home Assistant." date: 2017-05-07 17:00 sidebar: true comments: false diff --git a/source/_components/sensor.kwb.markdown b/source/_components/sensor.kwb.markdown index 7148e016f2..8c93feb4dd 100644 --- a/source/_components/sensor.kwb.markdown +++ b/source/_components/sensor.kwb.markdown @@ -1,7 +1,7 @@ --- layout: page title: "KWB Easyfire Sensor" -description: "Instructions how to integrate the KWB Easyfire sensor into Home Assistant." +description: "Instructions on how to integrate the KWB Easyfire sensor into Home Assistant." date: 2017-03-06 14:10 sidebar: true comments: false diff --git a/source/_components/sensor.lacrosse.markdown b/source/_components/sensor.lacrosse.markdown index f5abbb4a05..5218a2b710 100644 --- a/source/_components/sensor.lacrosse.markdown +++ b/source/_components/sensor.lacrosse.markdown @@ -1,7 +1,7 @@ --- layout: page title: "LaCrosse Sensor" -description: "Instructions how to integrate LaCrosse sensor data received from Jeelink into Home Assistant." +description: "Instructions on how to integrate LaCrosse sensor data received from Jeelink into Home Assistant." date: 2017-10-29 15:00 sidebar: true comments: false diff --git a/source/_components/sensor.lastfm.markdown b/source/_components/sensor.lastfm.markdown index 218e2f2a8e..8a78726e38 100644 --- a/source/_components/sensor.lastfm.markdown +++ b/source/_components/sensor.lastfm.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Last.fm" -description: "Instructions how to integrate Last.fm sensors into Home Assistant." +description: "Instructions on how to integrate Last.fm sensors into Home Assistant." date: 2016-05-18 09:00 sidebar: true comments: false diff --git a/source/_components/sensor.linux_battery.markdown b/source/_components/sensor.linux_battery.markdown index 13fc3d3e2f..4bc3ea6b7c 100644 --- a/source/_components/sensor.linux_battery.markdown +++ b/source/_components/sensor.linux_battery.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Linux Battery" -description: "Instructions how to integrate Linux Battery information into Home Assistant." +description: "Instructions on how to integrate Linux Battery information into Home Assistant." date: 2016-09-06 07:00 sidebar: true comments: false diff --git a/source/_components/sensor.loop_energy.markdown b/source/_components/sensor.loop_energy.markdown index 55f8770b82..fc38aed98e 100644 --- a/source/_components/sensor.loop_energy.markdown +++ b/source/_components/sensor.loop_energy.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Loop Energy" -description: "Instructions how to integrate Loop Energy devices within Home Assistant." +description: "Instructions on how to integrate Loop Energy devices within Home Assistant." date: 2016-04-02 22:00 sidebar: true comments: false diff --git a/source/_components/sensor.luftdaten.markdown b/source/_components/sensor.luftdaten.markdown index a5d701feb5..8e4a41cdef 100644 --- a/source/_components/sensor.luftdaten.markdown +++ b/source/_components/sensor.luftdaten.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Luftdaten Sensor" -description: "Instructions how to setup Luftdaten sensor in Home Assistant." +description: "Instructions on how to setup Luftdaten sensor in Home Assistant." date: 2017-11-01 00:00 sidebar: true comments: false diff --git a/source/_components/sensor.markdown b/source/_components/sensor.markdown index 9f446e5266..57ee8300bb 100644 --- a/source/_components/sensor.markdown +++ b/source/_components/sensor.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Sensor" -description: "Instructions how to setup your sensors with Home Assistant." +description: "Instructions on how to setup your sensors with Home Assistant." date: 2015-01-24 14:39 sidebar: true comments: false @@ -11,6 +11,6 @@ footer: true Sensors are gathering information about states and conditions. -Home Assistant currently supports a wide range of sensors. They are able to display information which are provides by Home assistant directly, are gathered from web services, and, of course, physical devices. Please check the sidebar for a full list of supported sensor platforms. +Home Assistant currently supports a wide range of sensors. They are able to display information which are provides by Home Assistant directly, are gathered from web services, and, of course, physical devices. Please check the sidebar for a full list of supported sensor platforms. diff --git a/source/_components/sensor.mfi.markdown b/source/_components/sensor.mfi.markdown index bcf44344df..e7cc678749 100644 --- a/source/_components/sensor.mfi.markdown +++ b/source/_components/sensor.mfi.markdown @@ -1,7 +1,7 @@ --- layout: page title: "mFi Sensor" -description: "Instructions how to integrate mFi sensors within Home Assistant." +description: "Instructions on how to integrate mFi sensors within Home Assistant." date: 2016-02-07 10:00 sidebar: true comments: false diff --git a/source/_components/sensor.min_max.markdown b/source/_components/sensor.min_max.markdown index a71e0650e2..428e848566 100644 --- a/source/_components/sensor.min_max.markdown +++ b/source/_components/sensor.min_max.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Min/max Sensor" -description: "Instructions how to integrate min/max sensors into Home Assistant." +description: "Instructions on how to integrate min/max sensors into Home Assistant." date: 2016-10-13 12:00 sidebar: true comments: false diff --git a/source/_components/sensor.modbus.markdown b/source/_components/sensor.modbus.markdown index 70cbfb494c..a94d711fda 100644 --- a/source/_components/sensor.modbus.markdown +++ b/source/_components/sensor.modbus.markdown @@ -1,7 +1,7 @@ --- layout: page title: Modbus Sensor -description: "Instructions how to integrate Modbus sensors into Home Assistant." +description: "Instructions on how to integrate Modbus sensors into Home Assistant." date: 2015-08-30 23:38 sidebar: true comments: false diff --git a/source/_components/sensor.modem_callerid.markdown b/source/_components/sensor.modem_callerid.markdown index d2d0340bb3..6fa1ed1919 100644 --- a/source/_components/sensor.modem_callerid.markdown +++ b/source/_components/sensor.modem_callerid.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Caller ID Sensor" -description: "Instructions how to integrate the Caller ID sensor into Home Assistant." +description: "Instructions on how to integrate the Caller ID sensor into Home Assistant." date: 2017-02-20 22:10 sidebar: true comments: false @@ -31,7 +31,7 @@ To find the path of your USB modem, run: `$ ls /dev/ttyACM*` -If Home Assistant (`hass`) runs with another user (e.g. `homeassistant` on Hassbian) give access to the stick with: +If Home Assistant (`hass`) runs with another user (e.g., `homeassistant` on Hassbian) give access to the stick with: `$ sudo usermod -a -G dialout homeassistant` diff --git a/source/_components/sensor.mold_indicator.markdown b/source/_components/sensor.mold_indicator.markdown index 74d91d671d..b14f077a19 100644 --- a/source/_components/sensor.mold_indicator.markdown +++ b/source/_components/sensor.mold_indicator.markdown @@ -15,7 +15,7 @@ ha_iot_class: "Local Polling" The Mold Indicator sensor component consumes information of two temperature sensors and a humidity sensor to give an indication for possible mold growth in your home. In case of bad ventilation and insulation, the indoor humidity may lead to condensation on cold surfaces as the windows or even walls. Condensation or a high relative humidity near those cold surfaces leads to a higher risk for mold growth. This sensor component estimates the temperature at a pre-calibrated critical point in the room (the coldest surface) and calculates the relative humidity of the air at that point. If the sensor value rises above approximately 70 percent, mold growth might occur and the room should be ventilated. At 100%, the air humidity condensates at the critical point. -The sensor data may be used e.g. to signal bad air quality (too high air humidity) or to automate operation of indoor air humidifiers to keep the indoor humidity at an optimum. To use the Mold Indicator sensor in your installation, add the following to your `configuration.yaml` file: +The sensor data may be used e.g., to signal bad air quality (too high air humidity) or to automate operation of indoor air humidifiers to keep the indoor humidity at an optimum. To use the Mold Indicator sensor in your installation, add the following to your `configuration.yaml` file: ```yaml # Example configuration.yaml entry diff --git a/source/_components/sensor.moon.markdown b/source/_components/sensor.moon.markdown index 327d221431..8b90dc0a44 100644 --- a/source/_components/sensor.moon.markdown +++ b/source/_components/sensor.moon.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Moon Sensor" -description: "Instructions how to integrate the moon sensor into Home Assistant." +description: "Instructions on how to integrate the moon sensor into Home Assistant." date: 2017-02-03 07:10 sidebar: true comments: false diff --git a/source/_components/sensor.mqtt.markdown b/source/_components/sensor.mqtt.markdown index aebe44beb9..174c27ee8b 100644 --- a/source/_components/sensor.mqtt.markdown +++ b/source/_components/sensor.mqtt.markdown @@ -1,7 +1,7 @@ --- layout: page title: "MQTT Sensor" -description: "Instructions how to integrate MQTT sensors within Home Assistant." +description: "Instructions on how to integrate MQTT sensors within Home Assistant." date: 2015-05-30 23:21 sidebar: true comments: false diff --git a/source/_components/sensor.mvglive.markdown b/source/_components/sensor.mvglive.markdown index d3b10f1882..16ee5f4a5e 100644 --- a/source/_components/sensor.mvglive.markdown +++ b/source/_components/sensor.mvglive.markdown @@ -1,7 +1,7 @@ --- layout: page title: "MVG" -description: "Instructions how to integrate Munich public transport departure times into Home Assistant." +description: "Instructions on how to integrate Munich public transport departure times into Home Assistant." date: 2017-03-21 20:00 sidebar: true comments: false @@ -29,9 +29,9 @@ sensor: Configuration variables: - **station** (*Required*): Name of the stop or station. Visit [the MVG live web site](http://www.mvg-live.de) to find valid names. - - **destinations** (*Optional*): One or multiple final stop names, e.g. 'Feldmoching' or ['Feldmoching','Harthof']. This can be used to only consider a particular direction of travel + - **destinations** (*Optional*): One or multiple final stop names, e.g., 'Feldmoching' or ['Feldmoching','Harthof']. This can be used to only consider a particular direction of travel - **directions** (*Optional*): Filter by direction of the departure. For Tram, Bus, SEV, and S-Bahn, direction = direction. For U-Bahn trains, directions are more general. For U1, U2, U3 and U6, direction='1' indicates south-bound trains, direction='2' indicates northbound trains. For U4 and U5, direction='1' indicates east-bound trains, direction='2' indicates west-bound trains. For example, setting directions: '1' can be used to get all south-bound trains at Scheidplatz. - - **lines** (*Optional*): One or more line numbers, e.g. 'U2' or ['U2','U8','N41'] + - **lines** (*Optional*): One or more line numbers, e.g., 'U2' or ['U2','U8','N41'] - **products** (*Optional*): One or more modes of transport, defaults to all 4 modes ['U-Bahn', 'Tram', 'Bus', 'S-Bahn']. - **timeoffset** (*Optional*): Do not display departures leaving sooner than this number of minutes (defaults to 0). Useful if you are a couple of minutes away from the stop. - **name** (*Optional*): You can customize the name of the sensor, which defaults to the station name. diff --git a/source/_components/sensor.mysensors.markdown b/source/_components/sensor.mysensors.markdown index 06d90e74f8..a6e8657014 100644 --- a/source/_components/sensor.mysensors.markdown +++ b/source/_components/sensor.mysensors.markdown @@ -1,7 +1,7 @@ --- layout: page title: "MySensors Sensor" -description: "Instructions how to integrate MySensors sensors into Home Assistant." +description: "Instructions on how to integrate MySensors sensors into Home Assistant." date: 2016-10-01 15:00 +0200 sidebar: true comments: false diff --git a/source/_components/sensor.nederlandse_spoorwegen.markdown b/source/_components/sensor.nederlandse_spoorwegen.markdown index b9a14e6605..9fe16b0ab6 100644 --- a/source/_components/sensor.nederlandse_spoorwegen.markdown +++ b/source/_components/sensor.nederlandse_spoorwegen.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Nederlandse Spoorwegen" -description: "Instructions how to integrate timetable data for traveling by train in the Netherlands within Home Assistant." +description: "Instructions on how to integrate timetable data for traveling by train in the Netherlands within Home Assistant." date: 2017-10-25 13:35 sidebar: true comments: false diff --git a/source/_components/sensor.nest.markdown b/source/_components/sensor.nest.markdown index 37e5d83d5a..73c15de3d2 100644 --- a/source/_components/sensor.nest.markdown +++ b/source/_components/sensor.nest.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Nest Sensor" -description: "Instructions how to integrate Nest sensors within Home Assistant." +description: "Instructions on how to integrate Nest sensors within Home Assistant." date: 2016-01-13 19:59 sidebar: true comments: false diff --git a/source/_components/sensor.nest_weather.markdown b/source/_components/sensor.nest_weather.markdown index f2d7823055..971e72cb16 100644 --- a/source/_components/sensor.nest_weather.markdown +++ b/source/_components/sensor.nest_weather.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Nest Weather Sensor" -description: "Instructions how to integrate Nest sensors within Home Assistant." +description: "Instructions on how to integrate Nest sensors within Home Assistant." date: 2016-01-13 19:59 sidebar: true comments: false diff --git a/source/_components/sensor.netatmo.markdown b/source/_components/sensor.netatmo.markdown index 14e71e985f..856ccc0ec4 100644 --- a/source/_components/sensor.netatmo.markdown +++ b/source/_components/sensor.netatmo.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Netatmo Sensor" -description: "Instructions how to integrate Netatmo sensors into Home Assistant." +description: "Instructions on how to integrate Netatmo sensors into Home Assistant." date: 2016-06-23 11:10 sidebar: true comments: false diff --git a/source/_components/sensor.netdata.markdown b/source/_components/sensor.netdata.markdown index 70df53e9c5..4cd3157c19 100644 --- a/source/_components/sensor.netdata.markdown +++ b/source/_components/sensor.netdata.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Netdata" -description: "Instructions how to integrate Netdata within Home Assistant." +description: "Instructions on how to integrate Netdata within Home Assistant." date: 2016-12-05 07:00 sidebar: true comments: false diff --git a/source/_components/sensor.neurio_energy.markdown b/source/_components/sensor.neurio_energy.markdown index dd6cac4ca7..03f9c22b58 100644 --- a/source/_components/sensor.neurio_energy.markdown +++ b/source/_components/sensor.neurio_energy.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Neurio" -description: "Instructions how to integrate Neurio within Home Assistant." +description: "Instructions on how to integrate Neurio within Home Assistant." date: 2016-02-15 21:50 sidebar: true comments: false diff --git a/source/_components/sensor.nzbget.markdown b/source/_components/sensor.nzbget.markdown index ad05e14fd0..cb3b45fc5a 100644 --- a/source/_components/sensor.nzbget.markdown +++ b/source/_components/sensor.nzbget.markdown @@ -1,7 +1,7 @@ --- layout: page title: "NZBGet" -description: "Instructions how to integrate NZBGet within Home Assistant." +description: "Instructions on how to integrate NZBGet within Home Assistant." date: 2016-04-08 19:59 sidebar: true comments: false diff --git a/source/_components/sensor.octoprint.markdown b/source/_components/sensor.octoprint.markdown index 129660a2f8..f16fc83ffb 100644 --- a/source/_components/sensor.octoprint.markdown +++ b/source/_components/sensor.octoprint.markdown @@ -1,7 +1,7 @@ --- layout: page title: "OctoPrint Sensor" -description: "Instructions how to integrate OctoPrint sensors within Home Assistant." +description: "Instructions on how to integrate OctoPrint sensors within Home Assistant." date: 2016-05-05 08:00 sidebar: true comments: false diff --git a/source/_components/sensor.onewire.markdown b/source/_components/sensor.onewire.markdown index 045c7e2280..ebb0a35ef2 100644 --- a/source/_components/sensor.onewire.markdown +++ b/source/_components/sensor.onewire.markdown @@ -1,7 +1,7 @@ --- layout: page title: "One wire Sensor" -description: "Instructions how to integrate One wire (1-wire) sensors into Home Assistant." +description: "Instructions on how to integrate One wire (1-wire) sensors into Home Assistant." date: 2017-09-15 10:10 sidebar: true comments: false diff --git a/source/_components/sensor.openevse.markdown b/source/_components/sensor.openevse.markdown index a117ef20f4..04568f0459 100644 --- a/source/_components/sensor.openevse.markdown +++ b/source/_components/sensor.openevse.markdown @@ -1,7 +1,7 @@ --- layout: page title: "OpenEVSE Sensor" -description: "Instructions how to integrate a WiFi-equipped OpenEVSE Charging station with Home Assistant" +description: "Instructions on how to integrate a WiFi-equipped OpenEVSE Charging station with Home Assistant" date: 2017-02-02 22:09 sidebar: true comments: false diff --git a/source/_components/sensor.openhardwaremonitor.markdown b/source/_components/sensor.openhardwaremonitor.markdown index 680a5f20d6..6479aa9c9d 100644 --- a/source/_components/sensor.openhardwaremonitor.markdown +++ b/source/_components/sensor.openhardwaremonitor.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Open Hardware Monitor Sensor" -description: "Instructions how to integrate Open Hardware Monitor within Home Assistant." +description: "Instructions on how to integrate Open Hardware Monitor within Home Assistant." date: 2017-06-16 00:00:00 sidebar: true comments: false diff --git a/source/_components/sensor.openweathermap.markdown b/source/_components/sensor.openweathermap.markdown index 6f9186a6f6..48d141ddfe 100644 --- a/source/_components/sensor.openweathermap.markdown +++ b/source/_components/sensor.openweathermap.markdown @@ -1,7 +1,7 @@ --- layout: page title: "OpenWeatherMap Sensor" -description: "Instructions how to integrate OpenWeatherMap within Home Assistant." +description: "Instructions on how to integrate OpenWeatherMap within Home Assistant." date: 2015-04-25 9:06 sidebar: true comments: false diff --git a/source/_components/sensor.otp.markdown b/source/_components/sensor.otp.markdown index 2381fa180d..849f216718 100644 --- a/source/_components/sensor.otp.markdown +++ b/source/_components/sensor.otp.markdown @@ -1,7 +1,7 @@ --- layout: page title: "OTP Sensor" -description: "Instructions how to add One-Time Password (OTP) sensors into Home Assistant." +description: "Instructions on how to add One-Time Password (OTP) sensors into Home Assistant." date: 2017-07-04 07:00:00 sidebar: true comments: false @@ -27,7 +27,7 @@ sensor: Configuration variables: - **name** (*Optional*): Name of the sensor to use in the frontend. Defaults to `OTP Sensor`. -- **token** (*Required*): The shared secret you use in your OTP generator (e.g. Google Authenticator on your phone) +- **token** (*Required*): The shared secret you use in your OTP generator (e.g., Google Authenticator on your phone) ## Generating a token @@ -48,5 +48,5 @@ Token: IHEDPEBEVA2WVHB7 Copy and paste the token into your Home Assistant configuration and add it to your OTP generator. Verify that they generate the same code.

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

    diff --git a/source/_components/sensor.pi_hole.markdown b/source/_components/sensor.pi_hole.markdown index 809cee76ca..f0b5dedbdb 100644 --- a/source/_components/sensor.pi_hole.markdown +++ b/source/_components/sensor.pi_hole.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Pi-Hole Sensor" -description: "Instructions how to integrate REST sensors into Home Assistant." +description: "Instructions on how to integrate REST sensors into Home Assistant." date: 2016-09-03 16:30 sidebar: true comments: false diff --git a/source/_components/sensor.pilight.markdown b/source/_components/sensor.pilight.markdown index 276586c98c..cae336b6d8 100644 --- a/source/_components/sensor.pilight.markdown +++ b/source/_components/sensor.pilight.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Pilight Sensor" -description: "Instructions how to integrate pilight sensors within Home Assistant." +description: "Instructions on how to integrate pilight sensors within Home Assistant." date: 2016-10-08 23:21 sidebar: true comments: false @@ -14,7 +14,7 @@ ha_iot_class: depends --- -This `pilight` sensor platform for 433 MHz devices uses a value in the message payload as the sensor value. Unique identifiers (e.g. _uuid_) can be set to distinguish between multiple pilight devices. To use a pilight sensor the pilight Home Assistant hub has to be set up. +This `pilight` sensor platform for 433 MHz devices uses a value in the message payload as the sensor value. Unique identifiers (e.g., _uuid_) can be set to distinguish between multiple pilight devices. To use a pilight sensor the pilight Home Assistant hub has to be set up. To use your sensor via pilight, make sure it is [supported](https://wiki.pilight.org/doku.php/protocols) and add the following to your `configuration.yaml` file: diff --git a/source/_components/sensor.pushbullet.markdown b/source/_components/sensor.pushbullet.markdown index df04990f68..bd8ee0eda5 100644 --- a/source/_components/sensor.pushbullet.markdown +++ b/source/_components/sensor.pushbullet.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Pushbullet Mirrors" -description: "Instructions how to read user pushes in Home Assistant" +description: "Instructions on how to read user pushes in Home Assistant" date: 2017-04-20 16:44 sidebar: true comments: false diff --git a/source/_components/sensor.pvoutput.markdown b/source/_components/sensor.pvoutput.markdown index b36ded0c28..a61f661459 100644 --- a/source/_components/sensor.pvoutput.markdown +++ b/source/_components/sensor.pvoutput.markdown @@ -1,7 +1,7 @@ --- layout: page title: "PVOutput Sensor" -description: "Instructions how to use PVOutput within Home Assistant." +description: "Instructions on how to use PVOutput within Home Assistant." date: 2016-11-06 10:00 sidebar: true comments: false diff --git a/source/_components/sensor.pyload.markdown b/source/_components/sensor.pyload.markdown index c4d7611edb..0c5886b637 100644 --- a/source/_components/sensor.pyload.markdown +++ b/source/_components/sensor.pyload.markdown @@ -1,7 +1,7 @@ --- layout: page title: "pyLoad Sensor" -description: "Instructions how to integrate pyLoad download sensor within Home Assistant." +description: "Instructions on how to integrate pyLoad download sensor within Home Assistant." date: 2017-10-23 09:00 sidebar: true comments: false diff --git a/source/_components/sensor.qnap.markdown b/source/_components/sensor.qnap.markdown index 38dd16ca98..66dd99404b 100644 --- a/source/_components/sensor.qnap.markdown +++ b/source/_components/sensor.qnap.markdown @@ -1,7 +1,7 @@ --- layout: page title: "QNAP Sensor" -description: "Instructions how to integrate the QNAP sensor within Home Assistant." +description: "Instructions on how to integrate the QNAP sensor within Home Assistant." date: 2017-02-02 06:39 sidebar: true comments: false diff --git a/source/_components/sensor.radarr.markdown b/source/_components/sensor.radarr.markdown index 78ca33d041..42294c8628 100644 --- a/source/_components/sensor.radarr.markdown +++ b/source/_components/sensor.radarr.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Radarr Sensor" -description: "Instructions how to integrate Radarr sensors with Home Assistant" +description: "Instructions on how to integrate Radarr sensors with Home Assistant" date: 2017-05-04 00:00 sidebar: true comments: false diff --git a/source/_components/sensor.random.markdown b/source/_components/sensor.random.markdown index c7f2bf07b1..35a52d3422 100644 --- a/source/_components/sensor.random.markdown +++ b/source/_components/sensor.random.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Random Sensor" -description: "Instructions how to integrate random number sensors into Home Assistant." +description: "Instructions on how to integrate random number sensors into Home Assistant." date: 2016-10-30 12:10 sidebar: true comments: false diff --git a/source/_components/sensor.rest.markdown b/source/_components/sensor.rest.markdown index 7d8c751313..a41ec48ab9 100644 --- a/source/_components/sensor.rest.markdown +++ b/source/_components/sensor.rest.markdown @@ -1,7 +1,7 @@ --- layout: page title: "RESTful Sensor" -description: "Instructions how to integrate REST sensors into Home Assistant." +description: "Instructions on how to integrate REST sensors into Home Assistant." date: 2015-09-14 19:10 sidebar: true comments: false diff --git a/source/_components/sensor.rflink.markdown b/source/_components/sensor.rflink.markdown index 38b529af80..7efee12d68 100644 --- a/source/_components/sensor.rflink.markdown +++ b/source/_components/sensor.rflink.markdown @@ -1,7 +1,7 @@ --- layout: page title: "RFLink Sensor" -description: "Instructions how to integrate RFLink sensors into Home Assistant." +description: "Instructions on how to integrate RFLink sensors into Home Assistant." date: 2016-01-04 sidebar: true comments: false diff --git a/source/_components/sensor.rfxtrx.markdown b/source/_components/sensor.rfxtrx.markdown index 9df49ee684..91a2dd5cf1 100644 --- a/source/_components/sensor.rfxtrx.markdown +++ b/source/_components/sensor.rfxtrx.markdown @@ -1,7 +1,7 @@ --- layout: page title: "RFXtrx Sensor" -description: "Instructions how to integrate RFXtrx sensors into Home Assistant." +description: "Instructions on how to integrate RFXtrx sensors into Home Assistant." date: 2015-08-06 17:15 sidebar: true comments: false diff --git a/source/_components/sensor.ripple.markdown b/source/_components/sensor.ripple.markdown index ad960c30e5..2eda541505 100644 --- a/source/_components/sensor.ripple.markdown +++ b/source/_components/sensor.ripple.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Ripple" -description: "Instructions how to integrate ripple.com data within Home Assistant." +description: "Instructions on how to integrate ripple.com data within Home Assistant." date: 2017-06-06 16:20 sidebar: true comments: false diff --git a/source/_components/sensor.sabnzbd.markdown b/source/_components/sensor.sabnzbd.markdown index 47680c4e1a..840eb5cd08 100644 --- a/source/_components/sensor.sabnzbd.markdown +++ b/source/_components/sensor.sabnzbd.markdown @@ -1,7 +1,7 @@ --- layout: page title: "SABnzbd" -description: "Instructions how to integrate SABnzbd within Home Assistant." +description: "Instructions on how to integrate SABnzbd within Home Assistant." date: 2015-03-23 19:59 sidebar: true comments: false diff --git a/source/_components/sensor.scrape.markdown b/source/_components/sensor.scrape.markdown index cbbaf5553e..fc23677a88 100644 --- a/source/_components/sensor.scrape.markdown +++ b/source/_components/sensor.scrape.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Scrape Sensor" -description: "Instructions how to integrate Web scrape sensors into Home Assistant." +description: "Instructions on how to integrate Web scrape sensors into Home Assistant." date: 2016-10-12 09:10 sidebar: true comments: false diff --git a/source/_components/sensor.season.markdown b/source/_components/sensor.season.markdown index 6297420cd1..875636fb7c 100644 --- a/source/_components/sensor.season.markdown +++ b/source/_components/sensor.season.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Season Sensor" -description: "Instructions how to add season sensors into Home Assistant." +description: "Instructions on how to add season sensors into Home Assistant." date: 2017-07-04 07:00:00 sidebar: true comments: false diff --git a/source/_components/sensor.sense.markdown b/source/_components/sensor.sense.markdown index cefa2adcbb..e13e45dd93 100644 --- a/source/_components/sensor.sense.markdown +++ b/source/_components/sensor.sense.markdown @@ -1,7 +1,7 @@ --- layout: page title: Sense -description: "Instructions how to integrate Sense within Home Assistant." +description: "Instructions on how to integrate Sense within Home Assistant." date: 2018-01-11 13:50 sidebar: true comments: false diff --git a/source/_components/sensor.sensehat.markdown b/source/_components/sensor.sensehat.markdown index ae270f052f..c441b4c1e6 100644 --- a/source/_components/sensor.sensehat.markdown +++ b/source/_components/sensor.sensehat.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Sense HAT" -description: "Instructions how to integrate Sense HAT within Home Assistant." +description: "Instructions on how to integrate Sense HAT within Home Assistant." date: 2017-06-03 04:00 sidebar: true comments: false diff --git a/source/_components/sensor.serial.markdown b/source/_components/sensor.serial.markdown index ea1ad91a0b..356ced350f 100644 --- a/source/_components/sensor.serial.markdown +++ b/source/_components/sensor.serial.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Serial Sensor" -description: "Instructions how to integrate data from serial connected sensors into Home Assistant." +description: "Instructions on how to integrate data from serial connected sensors into Home Assistant." date: 2017-10-13 07:00 sidebar: true comments: false diff --git a/source/_components/sensor.shodan.markdown b/source/_components/sensor.shodan.markdown index e4ca7947a2..6a98ad3042 100644 --- a/source/_components/sensor.shodan.markdown +++ b/source/_components/sensor.shodan.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Shodan Sensor" -description: "Instructions how to integrate Shodan sensors into Home Assistant." +description: "Instructions on how to integrate Shodan sensors into Home Assistant." date: 2017-08-09 10:30 sidebar: true comments: false diff --git a/source/_components/sensor.smappee.markdown b/source/_components/sensor.smappee.markdown index 6a34cfb5c5..2886f2b434 100644 --- a/source/_components/sensor.smappee.markdown +++ b/source/_components/sensor.smappee.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Smappee Sensor" -description: "Instructions how to integrate Smappee energy monitor into Home Assistant." +description: "Instructions on how to integrate Smappee energy monitor into Home Assistant." date: 2018-02-26 08:37 sidebar: true comments: false diff --git a/source/_components/sensor.snmp.markdown b/source/_components/sensor.snmp.markdown index 95429545db..f492d5ef3a 100644 --- a/source/_components/sensor.snmp.markdown +++ b/source/_components/sensor.snmp.markdown @@ -1,7 +1,7 @@ --- layout: page title: "SNMP" -description: "Instructions how to integrate SNMP sensors within Home Assistant." +description: "Instructions on how to integrate SNMP sensors within Home Assistant." date: 2016-06-05 20:00 sidebar: true comments: false diff --git a/source/_components/sensor.sochain.markdown b/source/_components/sensor.sochain.markdown index 77bf1c7836..26ff8d5fd1 100644 --- a/source/_components/sensor.sochain.markdown +++ b/source/_components/sensor.sochain.markdown @@ -1,7 +1,7 @@ --- layout: page title: "SoChain" -description: "Instructions how to integrate chain.so data within Home Assistant." +description: "Instructions on how to integrate chain.so data within Home Assistant." date: 2017-06-01 16:20 sidebar: true comments: false diff --git a/source/_components/sensor.sonarr.markdown b/source/_components/sensor.sonarr.markdown index 5f4d437c02..0257c70b55 100644 --- a/source/_components/sensor.sonarr.markdown +++ b/source/_components/sensor.sonarr.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Sonarr Sensor" -description: "Instructions how to integrate Sonarr sensors with Home Assistant" +description: "Instructions on how to integrate Sonarr sensors with Home Assistant" date: 2016-11-19 13:35 sidebar: true comments: false diff --git a/source/_components/sensor.statistics.markdown b/source/_components/sensor.statistics.markdown index a5b126fac4..9bfd40dd39 100644 --- a/source/_components/sensor.statistics.markdown +++ b/source/_components/sensor.statistics.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Statistics Sensor" -description: "Instructions how to integrate statistical sensors into Home Assistant." +description: "Instructions on how to integrate statistical sensors into Home Assistant." date: 2016-09-28 12:10 sidebar: true comments: false diff --git a/source/_components/sensor.supervisord.markdown b/source/_components/sensor.supervisord.markdown index 93a191fc9c..fc978f2f2d 100644 --- a/source/_components/sensor.supervisord.markdown +++ b/source/_components/sensor.supervisord.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Supervisord" -description: "Instructions how to integrate Supervisord within Home Assistant." +description: "Instructions on how to integrate Supervisord within Home Assistant." date: 2016-05-13 22:00 sidebar: true comments: false diff --git a/source/_components/sensor.swiss_hydrological_data.markdown b/source/_components/sensor.swiss_hydrological_data.markdown index 59f81644e2..44f4d6100b 100644 --- a/source/_components/sensor.swiss_hydrological_data.markdown +++ b/source/_components/sensor.swiss_hydrological_data.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Swiss Hydrological Data" -description: "Instructions how to integrate hydrological data of Swiss waters within Home Assistant." +description: "Instructions on how to integrate hydrological data of Swiss waters within Home Assistant." date: 2016-06-17 17:00 sidebar: true comments: false diff --git a/source/_components/sensor.swiss_public_transport.markdown b/source/_components/sensor.swiss_public_transport.markdown index 8b3ac28b09..c1063e4d4a 100644 --- a/source/_components/sensor.swiss_public_transport.markdown +++ b/source/_components/sensor.swiss_public_transport.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Swiss Public Transport" -description: "Instructions how to integrate timetable data for traveling in Switzerland within Home Assistant." +description: "Instructions on how to integrate timetable data for traveling in Switzerland within Home Assistant." date: 2015-06-02 21:45 sidebar: true comments: false diff --git a/source/_components/sensor.synologydsm.markdown b/source/_components/sensor.synologydsm.markdown index bf7a0af0d0..a15727f86d 100644 --- a/source/_components/sensor.synologydsm.markdown +++ b/source/_components/sensor.synologydsm.markdown @@ -1,7 +1,7 @@ --- layout: page title: "SynologyDSM Sensor" -description: "Instructions how to integrate the SynologyDSM sensor within Home Assistant." +description: "Instructions on how to integrate the SynologyDSM sensor within Home Assistant." date: 2016-10-30 23:21 sidebar: true comments: false diff --git a/source/_components/sensor.systemmonitor.markdown b/source/_components/sensor.systemmonitor.markdown index 9ae17d80ba..855dca71c0 100644 --- a/source/_components/sensor.systemmonitor.markdown +++ b/source/_components/sensor.systemmonitor.markdown @@ -1,7 +1,7 @@ --- layout: page title: "System Monitor" -description: "Instructions how to monitor the Home Assistant host." +description: "Instructions on how to monitor the Home Assistant host." date: 2015-03-23 19:59 sidebar: true comments: false @@ -56,7 +56,7 @@ The table contains types and their argument to use in your `configuration.yaml` | ipv4_address | Interface, eg. `eth0` | | ipv6_address | Interface, eg. `eth0` | | processor_use | | -| process | Binary, e.g. `octave-cli` | +| process | Binary, e.g., `octave-cli` | | last_boot | | | since_last_boot | | diff --git a/source/_components/sensor.sytadin.markdown b/source/_components/sensor.sytadin.markdown index 9f23c8df3f..1c44a9bdd3 100644 --- a/source/_components/sensor.sytadin.markdown +++ b/source/_components/sensor.sytadin.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Sytadin Sensor" -description: "Instructions how to integrate Sytadin sensors into Home Assistant." +description: "Instructions on how to integrate Sytadin sensors into Home Assistant." date: 2017-10-05 14:00 sidebar: true comments: false diff --git a/source/_components/sensor.tahoma.markdown b/source/_components/sensor.tahoma.markdown index 7a2b960de8..d5dbf0530e 100644 --- a/source/_components/sensor.tahoma.markdown +++ b/source/_components/sensor.tahoma.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Tahoma Sensor" -description: "Instructions how to integrate Tahoma sensors into Home Assistant." +description: "Instructions on how to integrate Tahoma sensors into Home Assistant." date: 2017-07-18 12:00 sidebar: true comments: false diff --git a/source/_components/sensor.tellduslive.markdown b/source/_components/sensor.tellduslive.markdown index 356ba316b5..4e136af476 100644 --- a/source/_components/sensor.tellduslive.markdown +++ b/source/_components/sensor.tellduslive.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Telldus Live sensor" -description: "Instructions how to integrate Telldus Live sensors into Home Assistant." +description: "Instructions on how to integrate Telldus Live sensors into Home Assistant." date: 2016-01-17 15:49 sidebar: true comments: false diff --git a/source/_components/sensor.tellstick.markdown b/source/_components/sensor.tellstick.markdown index dc4cf5be79..789f43c37d 100644 --- a/source/_components/sensor.tellstick.markdown +++ b/source/_components/sensor.tellstick.markdown @@ -1,7 +1,7 @@ --- layout: page title: "TellStick Sensor" -description: "Instructions how to integrate TellStick sensors into Home Assistant." +description: "Instructions on how to integrate TellStick sensors into Home Assistant." date: 2015-08-06 19:00 sidebar: true comments: false diff --git a/source/_components/sensor.temper.markdown b/source/_components/sensor.temper.markdown index 227cc42f80..09626f0984 100644 --- a/source/_components/sensor.temper.markdown +++ b/source/_components/sensor.temper.markdown @@ -1,7 +1,7 @@ --- layout: page title: "TEMPer Sensor" -description: "Instructions how to integrate TEMPer sensors into Home Assistant." +description: "Instructions on how to integrate TEMPer sensors into Home Assistant." date: 2015-08-06 19:00 sidebar: true comments: false diff --git a/source/_components/sensor.template.markdown b/source/_components/sensor.template.markdown index 534fe54e9f..9d1ec23a0c 100644 --- a/source/_components/sensor.template.markdown +++ b/source/_components/sensor.template.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Template Sensor" -description: "Instructions how to integrate Template Sensors into Home Assistant." +description: "Instructions on how to integrate Template Sensors into Home Assistant." date: 2016-01-27 07:00 sidebar: true comments: false diff --git a/source/_components/sensor.thethingsnetwork.markdown b/source/_components/sensor.thethingsnetwork.markdown index 6dac17958f..cce7aad569 100644 --- a/source/_components/sensor.thethingsnetwork.markdown +++ b/source/_components/sensor.thethingsnetwork.markdown @@ -1,7 +1,7 @@ --- layout: page title: "The Things Network Sensor" -description: "Instructions how to integrate The Things Network sensors into Home Assistant." +description: "Instructions on how to integrate The Things Network sensors into Home Assistant." date: 2017-09-30 08:00 sidebar: true comments: false diff --git a/source/_components/sensor.thinkingcleaner.markdown b/source/_components/sensor.thinkingcleaner.markdown index d5c681ff73..af6979bed2 100644 --- a/source/_components/sensor.thinkingcleaner.markdown +++ b/source/_components/sensor.thinkingcleaner.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Thinking Cleaner sensor" -description: "Instructions how to integrate a ThinkingCleaner sensor within Home Assistant." +description: "Instructions on how to integrate a ThinkingCleaner sensor within Home Assistant." date: 2016-04-10 17:24 sidebar: true comments: false diff --git a/source/_components/sensor.tibber.markdown b/source/_components/sensor.tibber.markdown index 6ebcc84bcf..883c4c7669 100644 --- a/source/_components/sensor.tibber.markdown +++ b/source/_components/sensor.tibber.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Tibber" -description: "Instructions how to integrate Tibber within Home Assistant." +description: "Instructions on how to integrate Tibber within Home Assistant." date: 2017-10-03 17:00 sidebar: true comments: false diff --git a/source/_components/sensor.time_date.markdown b/source/_components/sensor.time_date.markdown index a37980565e..ce9547358e 100644 --- a/source/_components/sensor.time_date.markdown +++ b/source/_components/sensor.time_date.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Time & Date" -description: "Instructions how to integrate the time and the date within Home Assistant." +description: "Instructions on how to integrate the time and the date within Home Assistant." date: 2015-05-08 17:15 sidebar: true comments: false diff --git a/source/_components/sensor.toon.markdown b/source/_components/sensor.toon.markdown index fabf565aeb..7a82ab95e9 100644 --- a/source/_components/sensor.toon.markdown +++ b/source/_components/sensor.toon.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Toon Sensor" -description: "Instructions how to integrate Toon climate devices within Home Assistant." +description: "Instructions on how to integrate Toon climate devices within Home Assistant." date: 2017-10-22 12:00 sidebar: true comments: false diff --git a/source/_components/sensor.torque.markdown b/source/_components/sensor.torque.markdown index 87ff9e0eca..38379ccd67 100644 --- a/source/_components/sensor.torque.markdown +++ b/source/_components/sensor.torque.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Torque (OBD2)" -description: "Instructions how to integrate Torque sensors into Home Assistant." +description: "Instructions on how to integrate Torque sensors into Home Assistant." date: 2015-12-20 18:00 sidebar: true comments: false diff --git a/source/_components/sensor.transmission.markdown b/source/_components/sensor.transmission.markdown index 4e54096833..e76da08026 100644 --- a/source/_components/sensor.transmission.markdown +++ b/source/_components/sensor.transmission.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Transmission Sensor" -description: "Instructions how to integrate Transmission sensors within Home Assistant." +description: "Instructions on how to integrate Transmission sensors within Home Assistant." date: 2015-04-25 9:06 sidebar: true comments: false diff --git a/source/_components/sensor.twitch.markdown b/source/_components/sensor.twitch.markdown index ce0b0d051b..6ed513ca90 100644 --- a/source/_components/sensor.twitch.markdown +++ b/source/_components/sensor.twitch.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Twitch" -description: "Instructions how to integrate Twitch sensors into Home Assistant." +description: "Instructions on how to integrate Twitch sensors into Home Assistant." date: 2015-12-19 09:00 sidebar: true comments: false diff --git a/source/_components/sensor.uk_transport.markdown b/source/_components/sensor.uk_transport.markdown index 759f37f982..868bad19fd 100644 --- a/source/_components/sensor.uk_transport.markdown +++ b/source/_components/sensor.uk_transport.markdown @@ -22,7 +22,7 @@ Additional sensors can be added but at the expense of a reduced refresh rate. 2 Queries are entered as a list, with the two transport modes available being `bus` and `train`. -Train departure sensors require three character long `origin` and `destination` station codes which are searchable on the [National Rail enquiries](http://www.nationalrail.co.uk/times_fares/ldb.aspx) website (e.g. `WAT` is London Waterloo). The validity of a route can be checked by performing a GET request to `/uk/train/station/{station_code}/live.json` in the [API reference webpage](https://developer.transportapi.com/docs?raml=https://transportapi.com/v3/raml/transportapi.raml##request_uk_train_station_station_code_live_json). +Train departure sensors require three character long `origin` and `destination` station codes which are searchable on the [National Rail enquiries](http://www.nationalrail.co.uk/times_fares/ldb.aspx) website (e.g., `WAT` is London Waterloo). The validity of a route can be checked by performing a GET request to `/uk/train/station/{station_code}/live.json` in the [API reference webpage](https://developer.transportapi.com/docs?raml=https://transportapi.com/v3/raml/transportapi.raml##request_uk_train_station_station_code_live_json). To add a single train departure sensor add the following to your `configuration.yaml` file: diff --git a/source/_components/sensor.uptime.markdown b/source/_components/sensor.uptime.markdown index b17f985797..f67feb188e 100644 --- a/source/_components/sensor.uptime.markdown +++ b/source/_components/sensor.uptime.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Uptime Sensor" -description: "Instructions how to integrate an uptime sensor into Home Assistant." +description: "Instructions on how to integrate an uptime sensor into Home Assistant." date: 2017-10-13 10:30 sidebar: true comments: false diff --git a/source/_components/sensor.vasttrafik.markdown b/source/_components/sensor.vasttrafik.markdown index a5aad007bd..0217a91c6a 100644 --- a/source/_components/sensor.vasttrafik.markdown +++ b/source/_components/sensor.vasttrafik.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Västtrafik Public Transport" -description: "Instructions how to integrate timetable data for traveling in Sweden within Home Assistant." +description: "Instructions on how to integrate timetable data for traveling in Sweden within Home Assistant." date: 2016-10-05 08:45 sidebar: true comments: false diff --git a/source/_components/sensor.vera.markdown b/source/_components/sensor.vera.markdown index c1e7b16a37..0fbdf0ff31 100644 --- a/source/_components/sensor.vera.markdown +++ b/source/_components/sensor.vera.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Vera Sensor" -description: "Instructions how to integrate Vera sensors into Home Assistant." +description: "Instructions on how to integrate Vera sensors into Home Assistant." date: 2015-10-20 21:00 sidebar: true comments: false diff --git a/source/_components/sensor.verisure.markdown b/source/_components/sensor.verisure.markdown index 75a4676365..8ee60938a9 100644 --- a/source/_components/sensor.verisure.markdown +++ b/source/_components/sensor.verisure.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Verisure Sensor" -description: "Instructions how to integrate Verisure sensors into Home Assistant." +description: "Instructions on how to integrate Verisure sensors into Home Assistant." date: 2016-02-23 21:31 +0100 sidebar: true comments: false diff --git a/source/_components/sensor.version.markdown b/source/_components/sensor.version.markdown index 3f8eaa196e..a84c05f7a2 100644 --- a/source/_components/sensor.version.markdown +++ b/source/_components/sensor.version.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Version Sensor" -description: "Instructions how to integrate a version sensor into Home Assistant." +description: "Instructions on how to integrate a version sensor into Home Assistant." date: 2017-08-10 10:30 sidebar: true comments: false diff --git a/source/_components/sensor.waqi.markdown b/source/_components/sensor.waqi.markdown index ce920cfeff..a3fd05aab8 100644 --- a/source/_components/sensor.waqi.markdown +++ b/source/_components/sensor.waqi.markdown @@ -1,7 +1,7 @@ --- layout: page title: "World Air Quality Index" -description: "Instructions how to setup World Air Quality Index sensor in Home Assistant." +description: "Instructions on how to setup World Air Quality Index sensor in Home Assistant." date: 2016-11-17 06:00 sidebar: true comments: false diff --git a/source/_components/sensor.wink.markdown b/source/_components/sensor.wink.markdown index 5a54a70424..7300fd8d65 100644 --- a/source/_components/sensor.wink.markdown +++ b/source/_components/sensor.wink.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Wink Sensor" -description: "Instructions how to setup the Wink sensors within Home Assistant." +description: "Instructions on how to setup the Wink sensors within Home Assistant." date: 2015-01-20 22:36 sidebar: true comments: false diff --git a/source/_components/sensor.worldclock.markdown b/source/_components/sensor.worldclock.markdown index e9f4ac8f9b..c35d652f10 100644 --- a/source/_components/sensor.worldclock.markdown +++ b/source/_components/sensor.worldclock.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Worldclock" -description: "Instructions how to integrate a Worldclock within Home Assistant." +description: "Instructions on how to integrate a Worldclock within Home Assistant." date: 2015-10-02 11:15 sidebar: true comments: false diff --git a/source/_components/sensor.worldtidesinfo.markdown b/source/_components/sensor.worldtidesinfo.markdown index 955f380d4a..1b5dca3185 100644 --- a/source/_components/sensor.worldtidesinfo.markdown +++ b/source/_components/sensor.worldtidesinfo.markdown @@ -1,7 +1,7 @@ --- layout: page title: "World Tides" -description: "Instructions how to add Tides information to Home Assistant." +description: "Instructions on how to add Tides information to Home Assistant." date: 2017-08-23 08:00 sidebar: true comments: false diff --git a/source/_components/sensor.worxlandroid.markdown b/source/_components/sensor.worxlandroid.markdown index 5f52ac95d9..5497ae7005 100644 --- a/source/_components/sensor.worxlandroid.markdown +++ b/source/_components/sensor.worxlandroid.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Worx Landroid" -description: "Instructions how to integrate Worx Landroid WG796E.1 or WG797E as sensors within Home Assistant." +description: "Instructions on how to integrate Worx Landroid WG796E.1 or WG797E as sensors within Home Assistant." date: 2017-09-12 13:23 sidebar: true comments: false diff --git a/source/_components/sensor.wunderground.markdown b/source/_components/sensor.wunderground.markdown index 4183dfa0b0..d86dd62935 100644 --- a/source/_components/sensor.wunderground.markdown +++ b/source/_components/sensor.wunderground.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Weather Underground (WUnderground)" -description: "Instructions how to integrate Weather Underground (WUnderground) Weather within Home Assistant." +description: "Instructions on how to integrate Weather Underground (WUnderground) Weather within Home Assistant." date: 2016-08-18 sidebar: true comments: false @@ -86,7 +86,7 @@ Configuration variables: - **weather**: A human-readable text summary with picture from Wunderground. - **weather_1d** [[12h]](#12h): A human-readable weather forecast using imperial units. - **weather_1d_metric** [[12h]](#12h): A human-readable weather forecast using metric units. - - **weather_1h** [[1h]](#1h): Weather conditions in 1 hour. (e.g. "Thunderstorm" etc.) + - **weather_1h** [[1h]](#1h): Weather conditions in 1 hour. (e.g., "Thunderstorm" etc.) - **wind_degrees**: Wind degrees - **wind_dir**: Wind direction - **wind_gust_kph**: Wind gusts speed in kph @@ -105,7 +105,7 @@ All the conditions listed above will be updated every 5 minutes. _12 hour forecasts_ -Monitored conditions marked above with
    [12h] are 12 hour forecasts. To get a forecast for different period/daytime replace the `_1d_` part of the sensor name. e.g. `weather_2n` will give you forecast for tomorrow night. Valid values for day are `1` to `4` and valid values for daytime are `d` or `n`. +Monitored conditions marked above with [12h] are 12 hour forecasts. To get a forecast for different period/daytime replace the `_1d_` part of the sensor name. e.g., `weather_2n` will give you forecast for tomorrow night. Valid values for day are `1` to `4` and valid values for daytime are `d` or `n`. _Daily forecasts_ @@ -115,7 +115,7 @@ in `_1d_` part of the sensor name. Valid values are from `1` to `4`. _Hourly forecasts_ Conditions marked with [1h] are hourly forecasts. To get forecast for different hour, replace the number -in the `_1h_` part of the sensor name with `1` to `36`. E.g. `weather_24h` will give you weather in 24 hours. +in the `_1h_` part of the sensor name with `1` to `36`. e.g., `weather_24h` will give you weather in 24 hours. ### {% linkable_title Additional examples %} diff --git a/source/_components/sensor.xiaomi_aqara.markdown b/source/_components/sensor.xiaomi_aqara.markdown index 247a9a94c9..a69c4f685a 100644 --- a/source/_components/sensor.xiaomi_aqara.markdown +++ b/source/_components/sensor.xiaomi_aqara.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Xiaomi Sensor" -description: "Instructions how to setup the Xiaomi sensor within Home Assistant." +description: "Instructions on how to setup the Xiaomi sensor within Home Assistant." date: 2017-07-21 16:34 sidebar: true comments: false diff --git a/source/_components/sensor.yahoo_finance.markdown b/source/_components/sensor.yahoo_finance.markdown index 8a55a78dda..0e8d12c0fb 100644 --- a/source/_components/sensor.yahoo_finance.markdown +++ b/source/_components/sensor.yahoo_finance.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Yahoo Finance" -description: "Instructions how to setup Yahoo Finance within Home Assistant." +description: "Instructions on how to setup Yahoo Finance within Home Assistant." date: 2016-09-18 21:00 sidebar: true comments: false diff --git a/source/_components/sensor.yr.markdown b/source/_components/sensor.yr.markdown index 35813cb459..772fa6560e 100644 --- a/source/_components/sensor.yr.markdown +++ b/source/_components/sensor.yr.markdown @@ -1,7 +1,7 @@ --- layout: page title: "YR" -description: "Instructions how to integrate Yr.no within Home Assistant." +description: "Instructions on how to integrate Yr.no within Home Assistant." date: 2016-01-04 14:00 sidebar: true comments: false diff --git a/source/_components/sensor.yweather.markdown b/source/_components/sensor.yweather.markdown index 0f9bcd7a85..fdd5a38b80 100644 --- a/source/_components/sensor.yweather.markdown +++ b/source/_components/sensor.yweather.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Yahoo Weather Sensor" -description: "Instructions how to integrate Yahoo Weather within Home Assistant." +description: "Instructions on how to integrate Yahoo Weather within Home Assistant." date: 2016-07-06 9:06 sidebar: true comments: false diff --git a/source/_components/sensor.zabbix.markdown b/source/_components/sensor.zabbix.markdown index daf65e1a78..64e960ed61 100644 --- a/source/_components/sensor.zabbix.markdown +++ b/source/_components/sensor.zabbix.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Zabbix Sensor" -description: "Instructions how to integrate Zabbix Triggers sensors within Home Assistant." +description: "Instructions on how to integrate Zabbix Triggers sensors within Home Assistant." date: 2016-12-13 22:57 sidebar: true comments: false diff --git a/source/_components/sensor.zamg.markdown b/source/_components/sensor.zamg.markdown index 9c6558a569..014752a66e 100644 --- a/source/_components/sensor.zamg.markdown +++ b/source/_components/sensor.zamg.markdown @@ -1,7 +1,7 @@ --- layout: page title: "ZAMG Sensor" -description: "Instructions how to integrate ZAMG sensors within Home Assistant." +description: "Instructions on how to integrate ZAMG sensors within Home Assistant." date: 2016-12-06 08:00 sidebar: true comments: false diff --git a/source/_components/sensor.zwave.markdown b/source/_components/sensor.zwave.markdown index 2b22c7cce9..70fba841c5 100644 --- a/source/_components/sensor.zwave.markdown +++ b/source/_components/sensor.zwave.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Z-Wave Sensor" -description: "Instructions how to setup the Z-Wave sensors within Home Assistant." +description: "Instructions on how to setup the Z-Wave sensors within Home Assistant." date: 2015-11-15 13:00 sidebar: true comments: false diff --git a/source/_components/shell_command.markdown b/source/_components/shell_command.markdown index d9f64f8a07..8c03c7c7af 100644 --- a/source/_components/shell_command.markdown +++ b/source/_components/shell_command.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Shell command" -description: "Instructions how to integrate Shell commands into Home Assistant." +description: "Instructions on how to integrate Shell commands into Home Assistant." date: 2015-10-13 19:10 sidebar: true comments: false diff --git a/source/_components/smappee.markdown b/source/_components/smappee.markdown index 4bd050ad22..5e35f4866f 100644 --- a/source/_components/smappee.markdown +++ b/source/_components/smappee.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Smappee" -description: "Instructions how to setup Smappee within Home Assistant." +description: "Instructions on how to setup Smappee within Home Assistant." date: 2018-02-26 08:37 sidebar: true comments: false diff --git a/source/_components/snips.markdown b/source/_components/snips.markdown index 6f876effdd..da7ed21417 100644 --- a/source/_components/snips.markdown +++ b/source/_components/snips.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Snips" -description: "Instructions how to integrate Snips within Home Assistant." +description: "Instructions on how to integrate Snips within Home Assistant." date: 2017-06-22 12:00 sidebar: true comments: false diff --git a/source/_components/spc.markdown b/source/_components/spc.markdown index 1573174329..0e8819fb85 100644 --- a/source/_components/spc.markdown +++ b/source/_components/spc.markdown @@ -1,7 +1,7 @@ --- layout: page title: "SPC" -description: "Instructions how to setup Vanderbilt SPC devices within Home Assistant." +description: "Instructions on how to setup Vanderbilt SPC devices within Home Assistant." date: 2017-05-18 08:00 sidebar: true comments: false @@ -27,8 +27,8 @@ spc: Configuration variables: -- **api_url** (*Required*): URL of the SPC Web Gateway command REST API, e.g. `http://:8088`. -- **ws_url** (*Required*): URL of the SPC Web Gateway websocket, e.g. `ws://:8088`. +- **api_url** (*Required*): URL of the SPC Web Gateway command REST API, e.g., `http://:8088`. +- **ws_url** (*Required*): URL of the SPC Web Gateway websocket, e.g., `ws://:8088`. Supported sensors will be automatically discovered and added, however they will be hidden by default. diff --git a/source/_components/sun.markdown b/source/_components/sun.markdown index 8de87f43be..91d1f7903e 100644 --- a/source/_components/sun.markdown +++ b/source/_components/sun.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Sun" -description: "Instructions how to track the sun within Home Assistant." +description: "Instructions on how to track the sun within Home Assistant." date: 2015-01-24 14:39 sidebar: true comments: false diff --git a/source/_components/switch.abode.markdown b/source/_components/switch.abode.markdown index 8979b0e286..2cc7d2e977 100644 --- a/source/_components/switch.abode.markdown +++ b/source/_components/switch.abode.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Abode Switch" -description: "Instructions how to integrate Abode switches into Home Assistant." +description: "Instructions on how to integrate Abode switches into Home Assistant." date: 2017-08-26 13:28 sidebar: true comments: false diff --git a/source/_components/switch.acer_projector.markdown b/source/_components/switch.acer_projector.markdown index d9158b3152..70e1ae5499 100644 --- a/source/_components/switch.acer_projector.markdown +++ b/source/_components/switch.acer_projector.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Acer Projector Switch" -description: "Instructions how to integrate Acer Projector switches into Home Assistant." +description: "Instructions on how to integrate Acer Projector switches into Home Assistant." date: 2016-05-07 07:00 sidebar: true comments: false diff --git a/source/_components/switch.android_ip_webcam.markdown b/source/_components/switch.android_ip_webcam.markdown index 980d363adc..bb32b0c9f5 100644 --- a/source/_components/switch.android_ip_webcam.markdown +++ b/source/_components/switch.android_ip_webcam.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Android IP Webcam Settings" -description: "Instructions how to integrate settings for Android IP webcam as switch within Home Assistant." +description: "Instructions on how to integrate settings for Android IP webcam as switch within Home Assistant." date: 2017-03-10 00:00 sidebar: true comments: false diff --git a/source/_components/switch.anel_pwrctrl.markdown b/source/_components/switch.anel_pwrctrl.markdown index fbd3023d3f..c753805477 100644 --- a/source/_components/switch.anel_pwrctrl.markdown +++ b/source/_components/switch.anel_pwrctrl.markdown @@ -1,7 +1,7 @@ --- layout: page title: "ANEL PwrCtrl Switch" -description: "Instructions how to integrate ANEL PwrCtrl switches within Home Assistant." +description: "Instructions on how to integrate ANEL PwrCtrl switches within Home Assistant." date: 2016-10-02 19:04 sidebar: true comments: false diff --git a/source/_components/switch.arduino.markdown b/source/_components/switch.arduino.markdown index bc4f76b19e..a27907103a 100644 --- a/source/_components/switch.arduino.markdown +++ b/source/_components/switch.arduino.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Arduino Switch" -description: "Instructions how to integrate Arduino boards pins as switches within Home Assistant." +description: "Instructions on how to integrate Arduino boards pins as switches within Home Assistant." date: 2015-09-14 18:28 sidebar: true comments: false diff --git a/source/_components/switch.arest.markdown b/source/_components/switch.arest.markdown index bca17d23c5..603949d5c1 100644 --- a/source/_components/switch.arest.markdown +++ b/source/_components/switch.arest.markdown @@ -1,7 +1,7 @@ --- layout: page title: "aREST Switch" -description: "Instructions how to integrate aREST switches within Home Assistant." +description: "Instructions on how to integrate aREST switches within Home Assistant." date: 2015-09-11 23:15 sidebar: true comments: false diff --git a/source/_components/switch.bbb_gpio.markdown b/source/_components/switch.bbb_gpio.markdown index 22feef16a6..7b02e6a927 100644 --- a/source/_components/switch.bbb_gpio.markdown +++ b/source/_components/switch.bbb_gpio.markdown @@ -1,7 +1,7 @@ --- layout: page title: "BeagleBone Black GPIO Switch" -description: "Instructions how to integrate the GPIO of a BeagleBone Black into Home Assistant as a switch." +description: "Instructions on how to integrate the GPIO of a BeagleBone Black into Home Assistant as a switch." date: 2017-01-14 10:00 sidebar: true comments: false diff --git a/source/_components/switch.broadlink.markdown b/source/_components/switch.broadlink.markdown index f63297eed5..acd83c63f2 100644 --- a/source/_components/switch.broadlink.markdown +++ b/source/_components/switch.broadlink.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Broadlink RM Switch" -description: "Instructions how to have Broadlink RM switches." +description: "Instructions on how to have Broadlink RM switches." date: 2016-11-22 22:41 sidebar: true comments: false diff --git a/source/_components/switch.command_line.markdown b/source/_components/switch.command_line.markdown index 0c70ae6afc..d1daa4e779 100644 --- a/source/_components/switch.command_line.markdown +++ b/source/_components/switch.command_line.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Command line Switch" -description: "Instructions how to have switches call command line commands." +description: "Instructions on how to have switches call command line commands." date: 2015-06-10 22:41 sidebar: true comments: false @@ -40,7 +40,7 @@ Configuration variables: A note on `friendly_name`: -When set, the `friendly_name` had been previously used for API calls and backend configuration instead of the `object_id` ("identifier"), but [this behavior is changing](https://github.com/home-assistant/home-assistant/pull/4343) to make the `friendly_name` for display purposes only. This allows users to set an `identifier` that emphasizes uniqueness and predictability for API and config purposes but have a prettier `friendly_name` still show up in the UI. As an additional benefit, if a user wanted to change the `friendly_name` / display name (e.g. from "Kitchen Lightswitch" to "Kitchen Switch" or "Living Room Light", or remove the `friendly_name` altogether), he or she could do so without needing to change existing automations or API calls. See aREST device below for an example. +When set, the `friendly_name` had been previously used for API calls and backend configuration instead of the `object_id` ("identifier"), but [this behavior is changing](https://github.com/home-assistant/home-assistant/pull/4343) to make the `friendly_name` for display purposes only. This allows users to set an `identifier` that emphasizes uniqueness and predictability for API and config purposes but have a prettier `friendly_name` still show up in the UI. As an additional benefit, if a user wanted to change the `friendly_name` / display name (e.g., from "Kitchen Lightswitch" to "Kitchen Switch" or "Living Room Light", or remove the `friendly_name` altogether), he or she could do so without needing to change existing automations or API calls. See aREST device below for an example. ## {% linkable_title Examples %} diff --git a/source/_components/switch.deluge.markdown b/source/_components/switch.deluge.markdown index 738732d27c..b9673415c3 100644 --- a/source/_components/switch.deluge.markdown +++ b/source/_components/switch.deluge.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Deluge Switch" -description: "Instructions how to integrate Deluge within Home Assistant." +description: "Instructions on how to integrate Deluge within Home Assistant." date: 2017-10-19 09:00 sidebar: true comments: false diff --git a/source/_components/switch.digitalloggers.markdown b/source/_components/switch.digitalloggers.markdown index f3142a6bbc..c0c2272d17 100755 --- a/source/_components/switch.digitalloggers.markdown +++ b/source/_components/switch.digitalloggers.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Digital Loggers Switch" -description: "Instructions how to integrate Digital Loggers DIN III relays into Home Assistant." +description: "Instructions on how to integrate Digital Loggers DIN III relays into Home Assistant." date: 2016-10-02 10:00 sidebar: true comments: false diff --git a/source/_components/switch.dlink.markdown b/source/_components/switch.dlink.markdown index 708ba90e39..50da6cf4a7 100644 --- a/source/_components/switch.dlink.markdown +++ b/source/_components/switch.dlink.markdown @@ -1,7 +1,7 @@ --- layout: page title: "D-Link Switch" -description: "Instructions how to integrate D-Link switches into Home Assistant." +description: "Instructions on how to integrate D-Link switches into Home Assistant." date: 2016-02-21 09:00 sidebar: true comments: false diff --git a/source/_components/switch.doorbird.markdown b/source/_components/switch.doorbird.markdown index fc2497f917..cb5b66db17 100644 --- a/source/_components/switch.doorbird.markdown +++ b/source/_components/switch.doorbird.markdown @@ -1,7 +1,7 @@ --- layout: page title: "DoorBird Switch" -description: "Instructions how to integrate DoorBird video doorbell relays into Home Assistant." +description: "Instructions on how to integrate DoorBird video doorbell relays into Home Assistant." date: 2017-08-06 11:30 sidebar: true comments: false diff --git a/source/_components/switch.edimax.markdown b/source/_components/switch.edimax.markdown index 028b64d61a..06f58328a4 100644 --- a/source/_components/switch.edimax.markdown +++ b/source/_components/switch.edimax.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Edimax Switch" -description: "Instructions how to integrate Edimax switches into Home Assistant." +description: "Instructions on how to integrate Edimax switches into Home Assistant." date: 2015-06-10 22:54 sidebar: true comments: false diff --git a/source/_components/switch.flux.markdown b/source/_components/switch.flux.markdown index cfe74efd20..41df410065 100644 --- a/source/_components/switch.flux.markdown +++ b/source/_components/switch.flux.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Flux Light Adjustment" -description: "Instructions how to have switches call command line commands." +description: "Instructions on how to have switches call command line commands." date: 2016-06-01 17:41 sidebar: true comments: false diff --git a/source/_components/switch.fritzdect.markdown b/source/_components/switch.fritzdect.markdown index 96c46f29e8..49b5f3161a 100644 --- a/source/_components/switch.fritzdect.markdown +++ b/source/_components/switch.fritzdect.markdown @@ -1,7 +1,7 @@ --- layout: page title: "AVM FRITZ!DECT Switch" -description: "Instructions how to integrate your AVM FRITZ!DECT switches into Home Assistant." +description: "Instructions on how to integrate your AVM FRITZ!DECT switches into Home Assistant." date: 2017-01-24 21:00 sidebar: true comments: false diff --git a/source/_components/switch.hikvisioncam.markdown b/source/_components/switch.hikvisioncam.markdown index 85249cd681..64fc873989 100644 --- a/source/_components/switch.hikvisioncam.markdown +++ b/source/_components/switch.hikvisioncam.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Hikvision Camera Switch" -description: "Instructions how to integrate Hikvision camera switches into Home Assistant." +description: "Instructions on how to integrate Hikvision camera switches into Home Assistant." date: 2015-06-10 22:54 sidebar: true comments: false diff --git a/source/_components/switch.homematic.markdown b/source/_components/switch.homematic.markdown index 3e3fd7e878..7902ae4974 100644 --- a/source/_components/switch.homematic.markdown +++ b/source/_components/switch.homematic.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Homematic Switch" -description: "Instructions how to integrate Homematic switches within Home Assistant." +description: "Instructions on how to integrate Homematic switches within Home Assistant." date: 2016-06-28 08:30 sidebar: true comments: false diff --git a/source/_components/switch.ihc.markdown b/source/_components/switch.ihc.markdown index 011ef33a02..67abf63932 100644 --- a/source/_components/switch.ihc.markdown +++ b/source/_components/switch.ihc.markdown @@ -1,7 +1,7 @@ --- layout: page title: "IHC Switch" -description: "Instructions how to integrate IHC switches within Home Assistant." +description: "Instructions on how to integrate IHC switches within Home Assistant." date: 2017-11-27 13:35 sidebar: true comments: false diff --git a/source/_components/switch.insteon_local.markdown b/source/_components/switch.insteon_local.markdown index 0d8c71aa8d..8a3c3f9360 100644 --- a/source/_components/switch.insteon_local.markdown +++ b/source/_components/switch.insteon_local.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Insteon (Local) Switch" -description: "Instructions how to setup the Insteon Hub switches locally within Home Assistant." +description: "Instructions on how to setup the Insteon Hub switches locally within Home Assistant." date: 2016-12-18 08:00 sidebar: true comments: false diff --git a/source/_components/switch.insteon_plm.markdown b/source/_components/switch.insteon_plm.markdown index 0db0d143cc..8843679bb0 100644 --- a/source/_components/switch.insteon_plm.markdown +++ b/source/_components/switch.insteon_plm.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Insteon PLM Switch" -description: "Instructions how to setup the Insteon PLM switches locally within Home Assistant." +description: "Instructions on how to setup the Insteon PLM switches locally within Home Assistant." date: 2017-02-19 17:00 sidebar: true comments: false diff --git a/source/_components/switch.isy994.markdown b/source/_components/switch.isy994.markdown index e5b4249dd6..eacf1a002d 100644 --- a/source/_components/switch.isy994.markdown +++ b/source/_components/switch.isy994.markdown @@ -1,7 +1,7 @@ --- layout: page title: "ISY994 Switch" -description: "Instructions how to integrate ISY994 switch into Home Assistant." +description: "Instructions on how to integrate ISY994 switch into Home Assistant." date: 2016-09-03 23:00 sidebar: true comments: false diff --git a/source/_components/switch.litejet.markdown b/source/_components/switch.litejet.markdown index 22c4d9d65f..34f90d9bad 100644 --- a/source/_components/switch.litejet.markdown +++ b/source/_components/switch.litejet.markdown @@ -1,7 +1,7 @@ --- layout: page title: "LiteJet Switch" -description: "Instructions how to setup the LiteJet switches within Home Assistant." +description: "Instructions on how to setup the LiteJet switches within Home Assistant." date: 2016-10-26 13:00 sidebar: true comments: false diff --git a/source/_components/switch.lutron_caseta.markdown b/source/_components/switch.lutron_caseta.markdown index 428006a56f..100e044b1b 100644 --- a/source/_components/switch.lutron_caseta.markdown +++ b/source/_components/switch.lutron_caseta.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Lutron Caseta Switch" -description: "Instructions how to setup the Lutron Caseta switches within Home Assistant." +description: "Instructions on how to setup the Lutron Caseta switches within Home Assistant." date: 2017-04-30 09:00 sidebar: true comments: false diff --git a/source/_components/switch.markdown b/source/_components/switch.markdown index 73a98c47c1..54fb891d5c 100644 --- a/source/_components/switch.markdown +++ b/source/_components/switch.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Switches" -description: "Instructions how to setup your switches with Home Assistant." +description: "Instructions on how to setup your switches with Home Assistant." date: 2015-01-24 14:39 sidebar: true comments: false diff --git a/source/_components/switch.mfi.markdown b/source/_components/switch.mfi.markdown index 62f6ed84d2..6d00c42a4b 100644 --- a/source/_components/switch.mfi.markdown +++ b/source/_components/switch.mfi.markdown @@ -1,7 +1,7 @@ --- layout: page title: "mFi Switch" -description: "Instructions how to integrate mFi switches within Home Assistant." +description: "Instructions on how to integrate mFi switches within Home Assistant." date: 2016-02-07 10:00 sidebar: true comments: false diff --git a/source/_components/switch.mochad.markdown b/source/_components/switch.mochad.markdown index 383e91bacd..5ffbdb3bf2 100644 --- a/source/_components/switch.mochad.markdown +++ b/source/_components/switch.mochad.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Mochad Switch" -description: "Instructions how to integrate X10 Mochad switches into Home Assistant." +description: "Instructions on how to integrate X10 Mochad switches into Home Assistant." date: 2016-10-20 21:13 sidebar: true comments: false diff --git a/source/_components/switch.modbus.markdown b/source/_components/switch.modbus.markdown index bac21bbd81..201e7b5daa 100644 --- a/source/_components/switch.modbus.markdown +++ b/source/_components/switch.modbus.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Modbus Switch" -description: "Instructions how to integrate Modbus switches into Home Assistant." +description: "Instructions on how to integrate Modbus switches into Home Assistant." date: 2015-08-30 23:38 sidebar: true comments: false diff --git a/source/_components/switch.mqtt.markdown b/source/_components/switch.mqtt.markdown index 17430c9c8f..c06e491ea6 100644 --- a/source/_components/switch.mqtt.markdown +++ b/source/_components/switch.mqtt.markdown @@ -1,7 +1,7 @@ --- layout: page title: "MQTT Switch" -description: "Instructions how to integrate MQTT switches into Home Assistant." +description: "Instructions on how to integrate MQTT switches into Home Assistant." date: 2015-08-30 23:38 sidebar: true comments: false diff --git a/source/_components/switch.mysensors.markdown b/source/_components/switch.mysensors.markdown index d383e68b7d..a0fffa84e3 100644 --- a/source/_components/switch.mysensors.markdown +++ b/source/_components/switch.mysensors.markdown @@ -1,7 +1,7 @@ --- layout: page title: "MySensors Switch" -description: "Instructions how to integrate MySensors switches into Home Assistant." +description: "Instructions on how to integrate MySensors switches into Home Assistant." date: 2016-10-01 15:00 +0200 sidebar: true comments: false diff --git a/source/_components/switch.mystrom.markdown b/source/_components/switch.mystrom.markdown index 6fafcbbb78..924087adcd 100644 --- a/source/_components/switch.mystrom.markdown +++ b/source/_components/switch.mystrom.markdown @@ -1,7 +1,7 @@ --- layout: page title: "myStrom Switch" -description: "Instructions how to integrate myStrom switches into Home Assistant." +description: "Instructions on how to integrate myStrom switches into Home Assistant." date: 2015-11-25 22:00 sidebar: true comments: false diff --git a/source/_components/switch.neato.markdown b/source/_components/switch.neato.markdown index b45fa7f5f2..2f0e1e8d1e 100644 --- a/source/_components/switch.neato.markdown +++ b/source/_components/switch.neato.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Neato Robotics Switch" -description: "Instructions how to integrate a Neato Botvac Connected switch within Home Assistant." +description: "Instructions on how to integrate a Neato Botvac Connected switch within Home Assistant." date: 2016-10-19 17:10 sidebar: true comments: false diff --git a/source/_components/switch.netio.markdown b/source/_components/switch.netio.markdown index 57f5a5abdb..f5c4a9742f 100644 --- a/source/_components/switch.netio.markdown +++ b/source/_components/switch.netio.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Netio Switch" -description: "Instructions how to integrate Netio switches into Home Assistant." +description: "Instructions on how to integrate Netio switches into Home Assistant." date: 2016-09-02 19:00 sidebar: true comments: false diff --git a/source/_components/switch.orvibo.markdown b/source/_components/switch.orvibo.markdown index 30516626df..656bcd4a22 100644 --- a/source/_components/switch.orvibo.markdown +++ b/source/_components/switch.orvibo.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Orvibo Switch" -description: "Instructions how to integrate Orvibo sockets within Home Assistant." +description: "Instructions on how to integrate Orvibo sockets within Home Assistant." date: 2015-11-15 18:15 sidebar: true comments: false diff --git a/source/_components/switch.pilight.markdown b/source/_components/switch.pilight.markdown index 8c803184a4..ffeeb1a947 100644 --- a/source/_components/switch.pilight.markdown +++ b/source/_components/switch.pilight.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Pilight Switch" -description: "Instructions how to have switches using 433 MHz connected to a computer running pilight." +description: "Instructions on how to have switches using 433 MHz connected to a computer running pilight." date: 2015-06-10 22:41 sidebar: true comments: false diff --git a/source/_components/switch.pulseaudio_loopback.markdown b/source/_components/switch.pulseaudio_loopback.markdown index 138dd949bc..6248f9910e 100644 --- a/source/_components/switch.pulseaudio_loopback.markdown +++ b/source/_components/switch.pulseaudio_loopback.markdown @@ -1,7 +1,7 @@ --- layout: page title: "PulseAudio Loopback Switch" -description: "Instructions how to use Pulseaudio loopback modules to build a flexible whole-home audio system." +description: "Instructions on how to use Pulseaudio loopback modules to build a flexible whole-home audio system." date: 2016-03-22 21:00:00 sidebar: true comments: false diff --git a/source/_components/switch.qwikswitch.markdown b/source/_components/switch.qwikswitch.markdown index 9b07aa24d0..805e47d5fe 100644 --- a/source/_components/switch.qwikswitch.markdown +++ b/source/_components/switch.qwikswitch.markdown @@ -1,7 +1,7 @@ --- layout: page title: "QwikSwitch Switch" -description: "Instructions how to integrate QwikSwitch relays into Home Assistant." +description: "Instructions on how to integrate QwikSwitch relays into Home Assistant." date: 2016-05-04 00:00 sidebar: true comments: false diff --git a/source/_components/switch.rachio.markdown b/source/_components/switch.rachio.markdown index e04bb7da70..9208a2d475 100644 --- a/source/_components/switch.rachio.markdown +++ b/source/_components/switch.rachio.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Rachio Switch" -description: "Instructions how to use Rachio switches with Home Assistant." +description: "Instructions on how to use Rachio switches with Home Assistant." date: 2017-05-29 09:00 sidebar: true comments: false diff --git a/source/_components/switch.raspihats.markdown b/source/_components/switch.raspihats.markdown index 23f7afb96f..f31a33edaa 100644 --- a/source/_components/switch.raspihats.markdown +++ b/source/_components/switch.raspihats.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Raspihats Switch" -description: "Instructions how to integrate Raspihats add-on boards for Raspberry Pi into Home Assistant as a switch." +description: "Instructions on how to integrate Raspihats add-on boards for Raspberry Pi into Home Assistant as a switch." date: 2017-05-15 04:20 sidebar: true comments: false diff --git a/source/_components/switch.rest.markdown b/source/_components/switch.rest.markdown index 776882cd54..534e27da4c 100644 --- a/source/_components/switch.rest.markdown +++ b/source/_components/switch.rest.markdown @@ -1,7 +1,7 @@ --- layout: page title: "RESTful Switch" -description: "Instructions how to integrate REST switches into Home Assistant." +description: "Instructions on how to integrate REST switches into Home Assistant." date: 2015-09-14 19:10 sidebar: true comments: false diff --git a/source/_components/switch.rflink.markdown b/source/_components/switch.rflink.markdown index 08b5e61458..ee42e8bbd7 100644 --- a/source/_components/switch.rflink.markdown +++ b/source/_components/switch.rflink.markdown @@ -1,7 +1,7 @@ --- layout: page title: "RFLink Switch" -description: "Instructions how to integrate RFLink switches into Home Assistant." +description: "Instructions on how to integrate RFLink switches into Home Assistant." date: 2016-01-04 sidebar: true comments: false diff --git a/source/_components/switch.rfxtrx.markdown b/source/_components/switch.rfxtrx.markdown index 434a4c4563..52b58ab4a6 100644 --- a/source/_components/switch.rfxtrx.markdown +++ b/source/_components/switch.rfxtrx.markdown @@ -1,7 +1,7 @@ --- layout: page title: "RFXtrx Switch" -description: "Instructions how to integrate RFXtrx switches into Home Assistant." +description: "Instructions on how to integrate RFXtrx switches into Home Assistant." date: 2015-10-08 10:15 sidebar: true comments: false diff --git a/source/_components/switch.rpi_gpio.markdown b/source/_components/switch.rpi_gpio.markdown index 9f50d12987..5b3a888e24 100644 --- a/source/_components/switch.rpi_gpio.markdown +++ b/source/_components/switch.rpi_gpio.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Raspberry Pi GPIO Switch" -description: "Instructions how to integrate the GPIO of a Raspberry Pi into Home Assistant as a switch." +description: "Instructions on how to integrate the GPIO of a Raspberry Pi into Home Assistant as a switch." date: 2015-08-07 14:00 sidebar: true comments: false diff --git a/source/_components/switch.rpi_pfio.markdown b/source/_components/switch.rpi_pfio.markdown index d8e77e79fa..30498f7d99 100644 --- a/source/_components/switch.rpi_pfio.markdown +++ b/source/_components/switch.rpi_pfio.markdown @@ -1,7 +1,7 @@ --- layout: page title: "PiFace Digital I/O Switch" -description: "Instructions how to integrate the PiFace Digital I/O module into Home Assistant as a switch." +description: "Instructions on how to integrate the PiFace Digital I/O module into Home Assistant as a switch." date: 2016-05-08 15:00 sidebar: true comments: false diff --git a/source/_components/switch.rpi_rf.markdown b/source/_components/switch.rpi_rf.markdown index 2d412034f5..b9813ceb56 100644 --- a/source/_components/switch.rpi_rf.markdown +++ b/source/_components/switch.rpi_rf.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Raspberry Pi RF Switch" -description: "Instructions how to integrate devices controlled via codes sent with low-cost GPIO RF modules on a Raspberry Pi into Home Assistant as a switch." +description: "Instructions on how to integrate devices controlled via codes sent with low-cost GPIO RF modules on a Raspberry Pi into Home Assistant as a switch." date: 2016-05-10 09:00 sidebar: true comments: false diff --git a/source/_components/switch.scsgate.markdown b/source/_components/switch.scsgate.markdown index 07ff2d6005..35e1f6b7f8 100644 --- a/source/_components/switch.scsgate.markdown +++ b/source/_components/switch.scsgate.markdown @@ -1,7 +1,7 @@ --- layout: page title: "SCSGate Switch" -description: "Instructions how to integrate SCSGate switches into Home Assistant." +description: "Instructions on how to integrate SCSGate switches into Home Assistant." date: 2016-01-31 22:15 sidebar: true comments: false diff --git a/source/_components/switch.smappee.markdown b/source/_components/switch.smappee.markdown index 58db20afac..0576738e51 100644 --- a/source/_components/switch.smappee.markdown +++ b/source/_components/switch.smappee.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Smappee Switch" -description: "Instructions how to integrate Smappee Comfort Plug into Home Assistant." +description: "Instructions on how to integrate Smappee Comfort Plug into Home Assistant." date: 2018-02-26 08:37 sidebar: true comments: false diff --git a/source/_components/switch.tellduslive.markdown b/source/_components/switch.tellduslive.markdown index 4477289a87..1cfa2c6fc8 100644 --- a/source/_components/switch.tellduslive.markdown +++ b/source/_components/switch.tellduslive.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Telldus Live Switch" -description: "Instructions how to integrate Telldus Live switches into Home Assistant." +description: "Instructions on how to integrate Telldus Live switches into Home Assistant." date: 2016-01-17 15:49 sidebar: true comments: false diff --git a/source/_components/switch.tellstick.markdown b/source/_components/switch.tellstick.markdown index 9c1ed88d73..7ab5643386 100644 --- a/source/_components/switch.tellstick.markdown +++ b/source/_components/switch.tellstick.markdown @@ -1,7 +1,7 @@ --- layout: page title: "TellStick Switch" -description: "Instructions how to integrate TellStick switches into Home Assistant." +description: "Instructions on how to integrate TellStick switches into Home Assistant." date: 2015-08-06 19:00 sidebar: true comments: false diff --git a/source/_components/switch.telnet.markdown b/source/_components/switch.telnet.markdown index bffd8e78fb..858a0b21b6 100644 --- a/source/_components/switch.telnet.markdown +++ b/source/_components/switch.telnet.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Telnet Switch" -description: "Instructions how to integrate telnet switches into Home Assistant." +description: "Instructions on how to integrate telnet switches into Home Assistant." date: 2017-08-10 19:19 sidebar: true comments: false diff --git a/source/_components/switch.template.markdown b/source/_components/switch.template.markdown index 3568915ccc..747364d080 100644 --- a/source/_components/switch.template.markdown +++ b/source/_components/switch.template.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Template Switch" -description: "Instructions how to integrate Template Switches into Home Assistant." +description: "Instructions on how to integrate Template Switches into Home Assistant." date: 2016-02-07 07:00 sidebar: true comments: false diff --git a/source/_components/switch.thinkingcleaner.markdown b/source/_components/switch.thinkingcleaner.markdown index 8be94f7992..30a937f212 100644 --- a/source/_components/switch.thinkingcleaner.markdown +++ b/source/_components/switch.thinkingcleaner.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Thinking Cleaner Switch" -description: "Instructions how to integrate a ThinkingCleaner switches within Home Assistant." +description: "Instructions on how to integrate a ThinkingCleaner switches within Home Assistant." date: 2016-04-10 17:24 sidebar: true comments: false diff --git a/source/_components/switch.toon.markdown b/source/_components/switch.toon.markdown index af4e197850..744622da78 100644 --- a/source/_components/switch.toon.markdown +++ b/source/_components/switch.toon.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Toon Smart Plugs" -description: "Instructions how to integrate Toon smart plugs within Home Assistant." +description: "Instructions on how to integrate Toon smart plugs within Home Assistant." date: 2017-10-22 12:00 sidebar: true comments: false diff --git a/source/_components/switch.tplink.markdown b/source/_components/switch.tplink.markdown index 5839ff2cef..da0083120b 100644 --- a/source/_components/switch.tplink.markdown +++ b/source/_components/switch.tplink.markdown @@ -1,7 +1,7 @@ --- layout: page title: "TP-Link Switch" -description: "Instructions how to integrate TP-Link switches into Home Assistant." +description: "Instructions on how to integrate TP-Link switches into Home Assistant." date: 2016-07-13 08:00 sidebar: true comments: false diff --git a/source/_components/switch.transmission.markdown b/source/_components/switch.transmission.markdown index 3c9ef39bfa..888f1470a0 100644 --- a/source/_components/switch.transmission.markdown +++ b/source/_components/switch.transmission.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Transmission Switch" -description: "Instructions how to integrate Transmission within Home Assistant." +description: "Instructions on how to integrate Transmission within Home Assistant." date: 2015-06-02 09:00 sidebar: true comments: false diff --git a/source/_components/switch.vera.markdown b/source/_components/switch.vera.markdown index 09dc61b109..e515a8d74c 100644 --- a/source/_components/switch.vera.markdown +++ b/source/_components/switch.vera.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Vera Switch" -description: "Instructions how to integrate Vera switches into Home Assistant." +description: "Instructions on how to integrate Vera switches into Home Assistant." date: 2015-10-20 21:00 sidebar: true comments: false diff --git a/source/_components/switch.verisure.markdown b/source/_components/switch.verisure.markdown index 4169abe98d..c84b3739f8 100644 --- a/source/_components/switch.verisure.markdown +++ b/source/_components/switch.verisure.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Verisure SmartPlug" -description: "Instructions how to setup the Verisure SmartPlug within Home Assistant." +description: "Instructions on how to setup the Verisure SmartPlug within Home Assistant." date: 2016-02-15 22:00 sidebar: true comments: false diff --git a/source/_components/switch.wake_on_lan.markdown b/source/_components/switch.wake_on_lan.markdown index 6fc7699fa7..f30f120134 100644 --- a/source/_components/switch.wake_on_lan.markdown +++ b/source/_components/switch.wake_on_lan.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Wake on LAN Switch" -description: "Instructions how to integrate a wake on lan switch." +description: "Instructions on how to integrate a wake on lan switch." date: 2016-03-18 18:00 sidebar: true comments: false diff --git a/source/_components/switch.wemo.markdown b/source/_components/switch.wemo.markdown index 7b6a4ae901..6bca30af1a 100644 --- a/source/_components/switch.wemo.markdown +++ b/source/_components/switch.wemo.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Belkin WeMo Switch" -description: "Instructions how to integrate Belkin WeMo switches into Home Assistant." +description: "Instructions on how to integrate Belkin WeMo switches into Home Assistant." date: 2016-02-20 00:47 sidebar: true comments: false diff --git a/source/_components/switch.wink.markdown b/source/_components/switch.wink.markdown index 085aba3a38..9a02607792 100644 --- a/source/_components/switch.wink.markdown +++ b/source/_components/switch.wink.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Wink Switch" -description: "Instructions how to setup the Wink switches within Home Assistant." +description: "Instructions on how to setup the Wink switches within Home Assistant." date: 2015-01-20 22:36 sidebar: true comments: false diff --git a/source/_components/switch.xiaomi_aqara.markdown b/source/_components/switch.xiaomi_aqara.markdown index f207229bee..0306ba2921 100644 --- a/source/_components/switch.xiaomi_aqara.markdown +++ b/source/_components/switch.xiaomi_aqara.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Xiaomi Switch" -description: "Instructions how to setup the Xiaomi switch within Home Assistant." +description: "Instructions on how to setup the Xiaomi switch within Home Assistant." date: 2017-07-21 16:34 sidebar: true comments: false diff --git a/source/_components/switch.xiaomi_miio.markdown b/source/_components/switch.xiaomi_miio.markdown index 7212a74287..02b8a68fe9 100644 --- a/source/_components/switch.xiaomi_miio.markdown +++ b/source/_components/switch.xiaomi_miio.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Xiaomi Smart WiFi Socket and Smart Power Strip" -description: "Instructions how to integrate your Xiaomi Smart WiFi Socket aka Plug or Xiaomi Smart Power Strip within Home Assistant." +description: "Instructions on how to integrate your Xiaomi Smart WiFi Socket aka Plug or Xiaomi Smart Power Strip within Home Assistant." date: 2017-08-26 10:18 sidebar: true comments: false diff --git a/source/_components/switch.zwave.markdown b/source/_components/switch.zwave.markdown index 2ae97b2180..9525daed35 100644 --- a/source/_components/switch.zwave.markdown +++ b/source/_components/switch.zwave.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Z-Wave Switch" -description: "Instructions how to setup the Z-Wave switches within Home Assistant." +description: "Instructions on how to setup the Z-Wave switches within Home Assistant." date: 2015-11-15 13:00 sidebar: true comments: false diff --git a/source/_components/tellduslive.markdown b/source/_components/tellduslive.markdown index 735593a0b1..42968880ba 100644 --- a/source/_components/tellduslive.markdown +++ b/source/_components/tellduslive.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Telldus Live" -description: "Instructions how to integrate Telldus Live into Home Assistant." +description: "Instructions on how to integrate Telldus Live into Home Assistant." date: 2016-01-17 16:00 sidebar: true comments: false @@ -21,7 +21,7 @@ If you are upgrading from 0.58 or older, you need to remove all Telldus configur Home Assistant will automatically discover the presence of a Tellstick Net or Tellstick ZNet on your local network if the [discovery]({{site_root}}/components/discovery/) component is enabled. When discovery and the key exchange with Telldus Live have been completed, you will be presented with an option to integrate with the cloud or local API for direct communication with your hardware in your LAN. Local API supports only one device at this stage. Local API is only supported with the Znet Lite products, the older hardware (such as Tellstick Net) does not support local API. -To manually integrate your Telldus Live with Home Assistant, e.g. if your device is on another network or in another location, add the following section to your `configuration.yaml` file: +To manually integrate your Telldus Live with Home Assistant, e.g., if your device is on another network or in another location, add the following section to your `configuration.yaml` file: ```yaml # Example configuration.yaml entry diff --git a/source/_components/tellstick.markdown b/source/_components/tellstick.markdown index de69aaffc3..15431df445 100644 --- a/source/_components/tellstick.markdown +++ b/source/_components/tellstick.markdown @@ -1,7 +1,7 @@ --- layout: page title: "TellStick" -description: "Instructions how to integrate your TellStick into Home Assistant." +description: "Instructions on how to integrate your TellStick into Home Assistant." date: 2015-03-28 13:06 sidebar: true comments: false diff --git a/source/_components/timer.markdown b/source/_components/timer.markdown index 61ff400aea..9f28b2ec7a 100644 --- a/source/_components/timer.markdown +++ b/source/_components/timer.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Timer" -description: "Instructions how to integrate timers into Home Assistant." +description: "Instructions on how to integrate timers into Home Assistant." date: 2017-10-23 06:00 sidebar: true comments: false diff --git a/source/_components/toon.markdown b/source/_components/toon.markdown index 08c38f9ace..e516db9ce8 100644 --- a/source/_components/toon.markdown +++ b/source/_components/toon.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Toon" -description: "Instructions how to integrate Toon within Home Assistant." +description: "Instructions on how to integrate Toon within Home Assistant." date: 2017-10-22 12:00 sidebar: true comments: false diff --git a/source/_components/tts.amazon_polly.markdown b/source/_components/tts.amazon_polly.markdown index 465a5abea1..267d0c52b4 100644 --- a/source/_components/tts.amazon_polly.markdown +++ b/source/_components/tts.amazon_polly.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Amazon Polly" -description: "Instructions how to setup Amazon Polly with Home Assistant." +description: "Instructions on how to setup Amazon Polly with Home Assistant." date: 2017-01-28 09:00 sidebar: true comments: false diff --git a/source/_components/tts.baidu.markdown b/source/_components/tts.baidu.markdown index e8499742fd..47ba6f0ad8 100644 --- a/source/_components/tts.baidu.markdown +++ b/source/_components/tts.baidu.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Baidu Text-to-Speech" -description: "Instructions how to setup Baidu TTS with Home Assistant." +description: "Instructions on how to setup Baidu TTS with Home Assistant." date: 2017-11-21 09:00 sidebar: true comments: false diff --git a/source/_components/tts.google.markdown b/source/_components/tts.google.markdown index cbed90dada..1b0468c87d 100644 --- a/source/_components/tts.google.markdown +++ b/source/_components/tts.google.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Google Text-to-Speech" -description: "Instructions how to setup Google Text-to-Speech with Home Assistant." +description: "Instructions on how to setup Google Text-to-Speech with Home Assistant." date: 2016-12-13 07:00 sidebar: true comments: false diff --git a/source/_components/tts.markdown b/source/_components/tts.markdown index c32de7d20c..b1d1899135 100644 --- a/source/_components/tts.markdown +++ b/source/_components/tts.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Text-to-Speech (TTS)" -description: "Instructions how to setup Text-to-Speech (TTS) with Home Assistant." +description: "Instructions on how to setup Text-to-Speech (TTS) with Home Assistant." date: 2016-12-13 07:00 sidebar: true comments: false diff --git a/source/_components/tts.marytts.markdown b/source/_components/tts.marytts.markdown index 42fff710e1..7b13da9906 100644 --- a/source/_components/tts.marytts.markdown +++ b/source/_components/tts.marytts.markdown @@ -1,7 +1,7 @@ --- layout: page title: "MaryTTS" -description: "Instructions how to setup MaryTTS with Home Assistant." +description: "Instructions on how to setup MaryTTS with Home Assistant." date: 2017-04-08 16:49 sidebar: true comments: false diff --git a/source/_components/tts.microsoft.markdown b/source/_components/tts.microsoft.markdown index 036dfed524..bb68917616 100644 --- a/source/_components/tts.microsoft.markdown +++ b/source/_components/tts.microsoft.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Microsoft Text-to-Speech" -description: "Instructions how to setup Microsoft Text-to-Speech with Home Assistant." +description: "Instructions on how to setup Microsoft Text-to-Speech with Home Assistant." date: 2017-11-07 12:00 sidebar: true comments: false diff --git a/source/_components/tts.picotts.markdown b/source/_components/tts.picotts.markdown index 411cc11c4c..5525c0b8ec 100644 --- a/source/_components/tts.picotts.markdown +++ b/source/_components/tts.picotts.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Pico Text-to-Speech" -description: "Instructions how to setup Pico Text-to-Speech with Home Assistant." +description: "Instructions on how to setup Pico Text-to-Speech with Home Assistant." date: 2017-01-03 16:00 sidebar: true comments: false diff --git a/source/_components/tts.voicerss.markdown b/source/_components/tts.voicerss.markdown index 612ae41082..99e6b5d685 100644 --- a/source/_components/tts.voicerss.markdown +++ b/source/_components/tts.voicerss.markdown @@ -1,7 +1,7 @@ --- layout: page title: "VoiceRSS" -description: "Instructions how to setup VoiceRSS TTS with Home Assistant." +description: "Instructions on how to setup VoiceRSS TTS with Home Assistant." date: 2016-12-13 07:00 sidebar: true comments: false diff --git a/source/_components/tts.yandextts.markdown b/source/_components/tts.yandextts.markdown index 18693965e7..af30eacea7 100644 --- a/source/_components/tts.yandextts.markdown +++ b/source/_components/tts.yandextts.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Yandex TTS" -description: "Instructions how to setup Yandex SpeechKit TTS with Home Assistant." +description: "Instructions on how to setup Yandex SpeechKit TTS with Home Assistant." date: 2017-01-17 03:04 sidebar: true comments: false diff --git a/source/_components/twilio.markdown b/source/_components/twilio.markdown index 299a91f019..a5dc897eee 100644 --- a/source/_components/twilio.markdown +++ b/source/_components/twilio.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Twilio" -description: "Instructions how to add Twilio notifications to Home Assistant." +description: "Instructions on how to add Twilio notifications to Home Assistant." date: 2016-05-14 14:14 sidebar: true comments: false diff --git a/source/_components/upcloud.markdown b/source/_components/upcloud.markdown index 726c776fa2..dcb15e41fc 100644 --- a/source/_components/upcloud.markdown +++ b/source/_components/upcloud.markdown @@ -1,7 +1,7 @@ --- layout: page title: UpCloud -description: Instructions how to integrate UpCloud within Home Assistant. +description: Instructions on how to integrate UpCloud within Home Assistant. date: 2018-01-28 20:00 sidebar: true comments: false diff --git a/source/_components/vacuum.dyson.markdown b/source/_components/vacuum.dyson.markdown index 4ac3d49e5e..b482899130 100644 --- a/source/_components/vacuum.dyson.markdown +++ b/source/_components/vacuum.dyson.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Dyson 360 Eye" -description: "Instructions how to integrate your Dyson Eye 360 vacuum robot within Home Assistant." +description: "Instructions on how to integrate your Dyson Eye 360 vacuum robot within Home Assistant." date: 2017-08-06 10:30 sidebar: true comments: false diff --git a/source/_components/vacuum.markdown b/source/_components/vacuum.markdown index 51b0adc667..8ec0a442ac 100644 --- a/source/_components/vacuum.markdown +++ b/source/_components/vacuum.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Vacuum cleaner robots" -description: "Instructions how to setup a botvac in Home Assistant." +description: "Instructions on how to setup a botvac in Home Assistant." date: 2017-07-28 15:00 sidebar: true comments: false diff --git a/source/_components/vacuum.mqtt.markdown b/source/_components/vacuum.mqtt.markdown index 65ed9679ce..1777c7cd89 100644 --- a/source/_components/vacuum.mqtt.markdown +++ b/source/_components/vacuum.mqtt.markdown @@ -1,7 +1,7 @@ --- layout: page title: "MQTT Vacuum" -description: "Instructions how to integrate your MQTT enabled Vacuum within Home Assistant." +description: "Instructions on how to integrate your MQTT enabled Vacuum within Home Assistant." date: 2017-09-11 20:26 sidebar: true comments: false diff --git a/source/_components/vacuum.neato.markdown b/source/_components/vacuum.neato.markdown index 2c0ed93464..b670457369 100644 --- a/source/_components/vacuum.neato.markdown +++ b/source/_components/vacuum.neato.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Neato Robotics Vacuum" -description: "Instructions how to integrate a Neato Botvac Connected Vacuum within Home Assistant." +description: "Instructions on how to integrate a Neato Botvac Connected Vacuum within Home Assistant." date: 2017-10-18 16:11 sidebar: true comments: false diff --git a/source/_components/vacuum.roomba.markdown b/source/_components/vacuum.roomba.markdown index 32c1393eb2..bf28b11035 100644 --- a/source/_components/vacuum.roomba.markdown +++ b/source/_components/vacuum.roomba.markdown @@ -1,7 +1,7 @@ --- layout: page title: "iRobot Roomba" -description: "Instructions how to integrate your Wi-Fi enabled Roomba within Home Assistant." +description: "Instructions on how to integrate your Wi-Fi enabled Roomba within Home Assistant." date: 2017-08-04 20:43 sidebar: true comments: false diff --git a/source/_components/vacuum.xiaomi_miio.markdown b/source/_components/vacuum.xiaomi_miio.markdown index 3d6a7908b8..51fd5dd9c8 100644 --- a/source/_components/vacuum.xiaomi_miio.markdown +++ b/source/_components/vacuum.xiaomi_miio.markdown @@ -197,7 +197,7 @@ To fetch the token follow these instructions depending on your mobile phone plat 1. Configure the robot with the Mi-Home app. 2. Enable developer mode, USB debugging and plug the Android phone into the computer. -3. Get ADB e.g. `apt-get install android-tools-adb` or `apt-get install adb` +3. Get ADB e.g., `apt-get install android-tools-adb` or `apt-get install adb` 4. `adb devices` should list your device. Consult ADB manual if necessary. 5. Issue a backup command via adb: `adb backup -noapk com.xiaomi.smarthome -f backup.ab` (set a password if prompted on your phone). Some devices may required single quotes in the command `adb backup '-noapk com.xiaomi.smarthome -f backup.ab'` 6. Download the 'ADB Backup Extractor' from [here](https://sourceforge.net/projects/adbextractor/files/latest/download) diff --git a/source/_components/vera.markdown b/source/_components/vera.markdown index 264f39157f..1dfa965fb4 100644 --- a/source/_components/vera.markdown +++ b/source/_components/vera.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Vera" -description: "Instructions how to setup Vera Z-Wave hubs and configure devices within Home Assistant." +description: "Instructions on how to setup Vera Z-Wave hubs and configure devices within Home Assistant." date: 2015-03-23 20:04 sidebar: true comments: false diff --git a/source/_components/verisure.markdown b/source/_components/verisure.markdown index 3f41ed18a5..7eac9bad58 100644 --- a/source/_components/verisure.markdown +++ b/source/_components/verisure.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Verisure" -description: "Instructions how to setup Verisure devices within Home Assistant." +description: "Instructions on how to setup Verisure devices within Home Assistant." date: 2015-08-17 20:28 sidebar: true comments: false diff --git a/source/_components/wake_on_lan.markdown b/source/_components/wake_on_lan.markdown index a6bd3291ac..2f7b1d4532 100644 --- a/source/_components/wake_on_lan.markdown +++ b/source/_components/wake_on_lan.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Wake on LAN" -description: "Instructions how to setup the Wake on LAN component in Home Assistant." +description: "Instructions on how to setup the Wake on LAN component in Home Assistant." date: 2017-07-8 15:00 sidebar: true comments: false diff --git a/source/_components/weather.buienradar.markdown b/source/_components/weather.buienradar.markdown index 0377e8bfe2..b2a42e7661 100644 --- a/source/_components/weather.buienradar.markdown +++ b/source/_components/weather.buienradar.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Buienradar" -description: "Instructions how to integrate buienradar.nl weather within Home Assistant." +description: "Instructions on how to integrate buienradar.nl weather within Home Assistant." date: 2017-05-15 14:00 sidebar: true comments: false diff --git a/source/_components/weather.darksky.markdown b/source/_components/weather.darksky.markdown index 0130a933d0..1d7c843b35 100644 --- a/source/_components/weather.darksky.markdown +++ b/source/_components/weather.darksky.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Dark Sky" -description: "Instructions how to integrate Dark Sky within Home Assistant." +description: "Instructions on how to integrate Dark Sky within Home Assistant." date: 2016-09-29 09:00 sidebar: true comments: false diff --git a/source/_components/weather.ecobee.markdown b/source/_components/weather.ecobee.markdown index 0f32830963..33f1983ecd 100644 --- a/source/_components/weather.ecobee.markdown +++ b/source/_components/weather.ecobee.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Ecobee Weather" -description: "Instructions how to setup the Ecobee weather within Home Assistant." +description: "Instructions on how to setup the Ecobee weather within Home Assistant." date: 2017-11-29 21:00 sidebar: true comments: false diff --git a/source/_components/weather.markdown b/source/_components/weather.markdown index f082409139..7babb6f8e9 100644 --- a/source/_components/weather.markdown +++ b/source/_components/weather.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Weather" -description: "Instructions how to setup your Weather platforms with Home Assistant." +description: "Instructions on how to setup your Weather platforms with Home Assistant." date: 2016-09-28 14:00 sidebar: true comments: false diff --git a/source/_components/weather.openweathermap.markdown b/source/_components/weather.openweathermap.markdown index 9c0a24f447..0bb8d2bf9e 100644 --- a/source/_components/weather.openweathermap.markdown +++ b/source/_components/weather.openweathermap.markdown @@ -1,7 +1,7 @@ --- layout: page title: "OpenWeatherMap" -description: "Instructions how to integrate OpenWeatherMap within Home Assistant." +description: "Instructions on how to integrate OpenWeatherMap within Home Assistant." date: 2016-09-29 09:00 sidebar: true comments: false diff --git a/source/_components/weather.yweather.markdown b/source/_components/weather.yweather.markdown index e087503679..af311a0030 100644 --- a/source/_components/weather.yweather.markdown +++ b/source/_components/weather.yweather.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Yahoo Weather" -description: "Instructions how to integrate Yahoo Weather within Home Assistant." +description: "Instructions on how to integrate Yahoo Weather within Home Assistant." date: 2016-07-06 9:06 sidebar: true comments: false diff --git a/source/_components/weather.zamg.markdown b/source/_components/weather.zamg.markdown index 89cc25bca8..cf805fd3a4 100644 --- a/source/_components/weather.zamg.markdown +++ b/source/_components/weather.zamg.markdown @@ -1,7 +1,7 @@ --- layout: page title: "ZAMG Weather" -description: "Instructions how to integrate ZAMG sensors within Home Assistant." +description: "Instructions on how to integrate ZAMG sensors within Home Assistant." date: 2016-12-06 08:00 sidebar: true comments: false diff --git a/source/_components/weblink.markdown b/source/_components/weblink.markdown index a816180fd1..a866717711 100644 --- a/source/_components/weblink.markdown +++ b/source/_components/weblink.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Weblink" -description: "Instructions how to setup Links within Home Assistant." +description: "Instructions on how to setup Links within Home Assistant." date: 2016-02-02 20:00 sidebar: true comments: false diff --git a/source/_components/websocket_api.markdown b/source/_components/websocket_api.markdown index 4eff8a8a3f..5cb8e926d0 100644 --- a/source/_components/websocket_api.markdown +++ b/source/_components/websocket_api.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Websocket API" -description: "Instructions how to setup the WebSocket API within Home Assistant." +description: "Instructions on how to setup the WebSocket API within Home Assistant." date: 2018-01-21 08:00 sidebar: true comments: false diff --git a/source/_components/wemo.markdown b/source/_components/wemo.markdown index 96821a0032..ab0f345bf7 100644 --- a/source/_components/wemo.markdown +++ b/source/_components/wemo.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Belkin WeMo" -description: "Instructions how to integrate Belkin WeMo devices into Home Assistant." +description: "Instructions on how to integrate Belkin WeMo devices into Home Assistant." date: 2016-02-20 00:41 sidebar: true comments: false diff --git a/source/_components/wink.markdown b/source/_components/wink.markdown index e1d617a9e3..cf62b8d380 100644 --- a/source/_components/wink.markdown +++ b/source/_components/wink.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Wink" -description: "Instructions how to setup the Wink hub within Home Assistant." +description: "Instructions on how to setup the Wink hub within Home Assistant." date: 2015-01-20 22:36 sidebar: true comments: false diff --git a/source/_components/zabbix.markdown b/source/_components/zabbix.markdown index 0bc2fe72cb..e463083999 100644 --- a/source/_components/zabbix.markdown +++ b/source/_components/zabbix.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Zabbix" -description: "Instructions how to integrate Zabbix into Home Assistant." +description: "Instructions on how to integrate Zabbix into Home Assistant." date: 2016-12-13 22:57 sidebar: true comments: false diff --git a/source/_components/zha.markdown b/source/_components/zha.markdown index 2a6b6355f2..23702551e5 100644 --- a/source/_components/zha.markdown +++ b/source/_components/zha.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Zigbee Home Automation" -description: "Instructions how to integrate your Zigbee Home Automation within Home Assistant." +description: "Instructions on how to integrate your Zigbee Home Automation within Home Assistant." date: 2017-02-22 19:59 sidebar: true comments: false @@ -18,8 +18,8 @@ integration for Home Assistant allows you to connect many off-the-shelf ZigBee d There is currently support for the following device types within Home Assistant: -- [Binary Sensor](../binary_sensor.zha) (e.g. motion and door sensors) -- [Sensor](../sensor.zha) (e.g. temperature sensors) +- [Binary Sensor](../binary_sensor.zha) (e.g., motion and door sensors) +- [Sensor](../sensor.zha) (e.g., temperature sensors) - [Light](../light.zha) - [Switch](../switch.zha) diff --git a/source/_components/zone.markdown b/source/_components/zone.markdown index 00d4f7e664..c97d06657f 100644 --- a/source/_components/zone.markdown +++ b/source/_components/zone.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Zone" -description: "Instructions how to setup zones within Home Assistant." +description: "Instructions on how to setup zones within Home Assistant." date: 2015-10-04 09:23 sidebar: true comments: false diff --git a/source/_components/zwave.markdown b/source/_components/zwave.markdown index 316c2d3bd1..9dd4811b3e 100644 --- a/source/_components/zwave.markdown +++ b/source/_components/zwave.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Z-Wave" -description: "Instructions how to integrate your existing Z-Wave within Home Assistant." +description: "Instructions on how to integrate your existing Z-Wave within Home Assistant." date: 2016-02-27 19:59 sidebar: true comments: false diff --git a/source/_docs/asterisk_mbox.markdown b/source/_docs/asterisk_mbox.markdown index fae79de927..c5f3d7cbd7 100644 --- a/source/_docs/asterisk_mbox.markdown +++ b/source/_docs/asterisk_mbox.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Asterisk Voicemail Server Installation" -description: "Instructions how to integrate your existing Asterisk voicemail within Home Assistant." +description: "Instructions on how to integrate your existing Asterisk voicemail within Home Assistant." date: 2017-06-30 18:30 sidebar: true comments: false diff --git a/source/_docs/autostart.markdown b/source/_docs/autostart.markdown index 95e9608adc..48ca9fb411 100644 --- a/source/_docs/autostart.markdown +++ b/source/_docs/autostart.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Autostart Home Assistant" -description: "Instructions how to setup Home Assistant to launch on start." +description: "Instructions on how to setup Home Assistant to launch on start." date: 2015-9-1 22:57 sidebar: true comments: false diff --git a/source/_docs/autostart/macos.markdown b/source/_docs/autostart/macos.markdown index 0a1b6ea134..56e6b27c3f 100644 --- a/source/_docs/autostart/macos.markdown +++ b/source/_docs/autostart/macos.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Autostart on macOS" -description: "Instructions how to setup Home Assistant to launch on Apple macOS." +description: "Instructions on how to setup Home Assistant to launch on Apple macOS." date: 2015-9-1 22:57 sidebar: true comments: false diff --git a/source/_docs/autostart/synology.markdown b/source/_docs/autostart/synology.markdown index 2d97b91e57..f19f15ab73 100644 --- a/source/_docs/autostart/synology.markdown +++ b/source/_docs/autostart/synology.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Autostart on Synology NAS boot" -description: "Instructions how to setup Home Assistant to launch on boot on Synology NAS." +description: "Instructions on how to setup Home Assistant to launch on boot on Synology NAS." date: 2015-9-1 22:57 sidebar: true comments: false diff --git a/source/_docs/autostart/systemd.markdown b/source/_docs/autostart/systemd.markdown index e1e1b6b466..921b13a74a 100644 --- a/source/_docs/autostart/systemd.markdown +++ b/source/_docs/autostart/systemd.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Autostart using systemd" -description: "Instructions how to setup Home Assistant to launch on boot using systemd." +description: "Instructions on how to setup Home Assistant to launch on boot using systemd." date: 2015-9-1 22:57 sidebar: true comments: false diff --git a/source/_docs/autostart/upstart.markdown b/source/_docs/autostart/upstart.markdown index b627ab3806..c77660a84d 100644 --- a/source/_docs/autostart/upstart.markdown +++ b/source/_docs/autostart/upstart.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Autostart using Upstart" -description: "Instructions how to setup Home Assistant to launch on boot using Upstart." +description: "Instructions on how to setup Home Assistant to launch on boot using Upstart." date: 2015-9-1 22:57 sidebar: true comments: false diff --git a/source/_docs/configuration/group_visibility.markdown b/source/_docs/configuration/group_visibility.markdown index acd352a07d..0ea062deb9 100644 --- a/source/_docs/configuration/group_visibility.markdown +++ b/source/_docs/configuration/group_visibility.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Group Visibility" -description: "Instructions how to change group visibility using automations." +description: "Instructions on how to change group visibility using automations." date: 2016-10-29 13:00 sidebar: true comments: false diff --git a/source/_docs/configuration/packages.markdown b/source/_docs/configuration/packages.markdown index 7e5016be99..bb66ed8230 100644 --- a/source/_docs/configuration/packages.markdown +++ b/source/_docs/configuration/packages.markdown @@ -63,7 +63,7 @@ light: There are some rules for packages that will be merged: -1. Component names may only use the basic form (e.g. `switch`, but not `switch 1` or `switch aa`). +1. Component names may only use the basic form (e.g., `switch`, but not `switch 1` or `switch aa`). 2. Platform based components (`light`, `switch`, etc) can always be merged. 3. Components where entities are identified by a key that will represent the entity_id (`{key: config}`) need to have unique 'keys' between packages and the main configuration file. diff --git a/source/_docs/configuration/securing.markdown b/source/_docs/configuration/securing.markdown index 24ec0aa4f0..9d7f43524a 100644 --- a/source/_docs/configuration/securing.markdown +++ b/source/_docs/configuration/securing.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Securing" -description: "Instructions how to secure your Home Assistant installation." +description: "Instructions on how to secure your Home Assistant installation." date: 2016-10-06 06:00 sidebar: true comments: false diff --git a/source/_docs/configuration/templating.markdown b/source/_docs/configuration/templating.markdown index 1e26ff126c..d00a879b7b 100644 --- a/source/_docs/configuration/templating.markdown +++ b/source/_docs/configuration/templating.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Templating" -description: "Instructions how to use the templating feature of Home Assistant." +description: "Instructions on how to use the templating feature of Home Assistant." date: 2015-12-12 12:00 sidebar: true comments: false diff --git a/source/_docs/ecosystem/appdaemon/api.markdown b/source/_docs/ecosystem/appdaemon/api.markdown index 48c8d994ba..2f8e38c162 100755 --- a/source/_docs/ecosystem/appdaemon/api.markdown +++ b/source/_docs/ecosystem/appdaemon/api.markdown @@ -39,7 +39,7 @@ There are several circumstances under which `initialize()` might be called: - Following a change in the status of Daylight Savings Time - Following a restart of Home Assistant -In every case, the App is responsible for recreating any state it might need as if it were the first time it was ever started. If `initialize()` is called, the app can safely assume that it is either being loaded for the first time, or that all callbacks and timers have been canceled. In either case, the APP will need to recreate them. Depending upon the application it may be desirable for the App to establish state such as whether or not a particular light is on, within the `initialize()` function to ensure that everything is as expected or to make immediate remedial action (e.g. turn off a light that might have been left on by mistake when the app was restarted). +In every case, the App is responsible for recreating any state it might need as if it were the first time it was ever started. If `initialize()` is called, the app can safely assume that it is either being loaded for the first time, or that all callbacks and timers have been canceled. In either case, the APP will need to recreate them. Depending upon the application it may be desirable for the App to establish state such as whether or not a particular light is on, within the `initialize()` function to ensure that everything is as expected or to make immediate remedial action (e.g., turn off a light that might have been left on by mistake when the app was restarted). After the `initialize()` function is in place, the rest of the app consists of functions that are called by the various callback mechanisms, and any additional functions the user wants to add as part of the program logic. Apps are able to subscribe to 2 main classes of events: @@ -150,7 +150,7 @@ light = light.garage ## {% linkable_title Callback Constraints %} -Callback constraints are a feature of AppDaemon that removes the need for repetition of some common coding checks. Many Apps will wish to process their callbacks only when certain conditions are met, e.g. someone is home, and it's after sunset. These kinds of conditions crop up a lot, and use of callback constraints can significantly simplify the logic required within callbacks. +Callback constraints are a feature of AppDaemon that removes the need for repetition of some common coding checks. Many Apps will wish to process their callbacks only when certain conditions are met, e.g., someone is home, and it's after sunset. These kinds of conditions crop up a lot, and use of callback constraints can significantly simplify the logic required within callbacks. Put simply, callback constraints are one or more conditions on callback execution that can be applied to an individual App. An App's callbacks will only be executed if all of the constraints are met. If a constraint is absent it will not be checked for. @@ -194,7 +194,7 @@ constrain_input_boolean = input_boolean.enable_motion_detection,off ``` ### {% linkable_title input_select %} -The input_select constraint prevents callbacks unless the specified input_select is set to one or more of the nominated (comma separated) values. This is useful to allow certain Apps to be turned on and off according to some flag, e.g. a house mode flag. +The input_select constraint prevents callbacks unless the specified input_select is set to one or more of the nominated (comma separated) values. This is useful to allow certain Apps to be turned on and off according to some flag, e.g., a house mode flag. ```ini # Single value @@ -272,7 +272,7 @@ Any other attributes such as brightness for a lamp will only be present if the e Also bear in mind that some attributes such as brightness for a light, will not be present when the light is off. -In most cases, the attribute `state` has the most important value in it, e.g. for a light or switch this will be `on` or `off`, for a sensor it will be the value of that sensor. Many of the AppDaemon API calls and callbacks will implicitly return the value of state unless told to do otherwise. +In most cases, the attribute `state` has the most important value in it, e.g., for a light or switch this will be `on` or `off`, for a sensor it will be the value of that sensor. Many of the AppDaemon API calls and callbacks will implicitly return the value of state unless told to do otherwise. ### {% linkable_title get_state() %} @@ -294,9 +294,9 @@ All parameters are optional, and if `get_state()` is called with no parameters i ##### {% linkable_title entity %} -This is the name of an entity or device type. If just a device type is provided, e.g. `light` or `binary_sensor`, `get_state()` will return a dictionary of all devices of that type, indexed by the entity_id, containing all the state for each entity. +This is the name of an entity or device type. If just a device type is provided, e.g., `light` or `binary_sensor`, `get_state()` will return a dictionary of all devices of that type, indexed by the entity_id, containing all the state for each entity. -If a fully qualified `entity_id` is provided, `get_state()` will return the state attribute for that entity, e.g. `on` or `off` for a light. +If a fully qualified `entity_id` is provided, `get_state()` will return the state attribute for that entity, e.g., `on` or `off` for a light. ##### {% linkable_title attribute %} @@ -345,11 +345,11 @@ set_state(entity_id, **kwargs) ##### {% linkable_title entity_id %} -Entity id for which the state is to be set, e.g. `light.office_1`. +Entity id for which the state is to be set, e.g., `light.office_1`. ##### {% linkable_title values %} -A list of keyword values to be changed or added to the entities state. e.g. `state = "off"`. Note that any optional attributes such as colors for bulbs etc, need to reside in a dictionary called `attributes`; see the example. +A list of keyword values to be changed or added to the entities state. e.g., `state = "off"`. Note that any optional attributes such as colors for bulbs etc, need to reside in a dictionary called `attributes`; see the example. #### {% linkable_title Examples %} @@ -461,7 +461,7 @@ handle = listen_state(callback, entity = None, **kwargs) #### {% linkable_title Returns %} -A unique identifier that can be used to cancel the callback if required. Since variables created within object methods are local to the function they are created in, and in all likelihood the cancellation will be invoked later in a different function, it is recommended that handles are stored in the object namespace, e.g. `self.handle`. +A unique identifier that can be used to cancel the callback if required. Since variables created within object methods are local to the function they are created in, and in all likelihood the cancellation will be invoked later in a different function, it is recommended that handles are stored in the object namespace, e.g., `self.handle`. #### {% linkable_title Parameters %} @@ -473,9 +473,9 @@ Function to be invoked when the requested state change occurs. It must conform t ##### {% linkable_title entity %} -This is the name of an entity or device type. If just a device type is provided, e.g. `light` or `binary_sensor`, `listen_state()` will subscribe to state changes of all devices of that type. If a fully qualified `entity_id` is provided, `listen_state()` will listen for state changes for just that entity. +This is the name of an entity or device type. If just a device type is provided, e.g., `light` or `binary_sensor`, `listen_state()` will subscribe to state changes of all devices of that type. If a fully qualified `entity_id` is provided, `listen_state()` will listen for state changes for just that entity. -When called, AppDaemon will supply the callback function, in old and new, with the state attribute for that entity, e.g. `on` or `off` for a light. +When called, AppDaemon will supply the callback function, in old and new, with the state attribute for that entity, e.g., `on` or `off` for a light. ##### {% linkable_title attribute (optional) %} @@ -949,11 +949,11 @@ All of the scheduler calls above support 2 additional optional arguments, `rando For example: ```python -# Run a callback in 2 minutes minus a random number of seconds between 0 and 60, e.g. run between 60 and 120 seconds from now +# Run a callback in 2 minutes minus a random number of seconds between 0 and 60, e.g., run between 60 and 120 seconds from now self.handle = self.run_in(callback, 120, random_start = -60, **kwargs) -# Run a callback in 2 minutes plus a random number of seconds between 0 and 60, e.g. run between 120 and 180 seconds from now +# Run a callback in 2 minutes plus a random number of seconds between 0 and 60, e.g., run between 120 and 180 seconds from now self.handle = self.run_in(callback, 120, random_end = 60, **kwargs) -# Run a callback in 2 minutes plus or minus a random number of seconds between 0 and 60, e.g. run between 60 and 180 seconds from now +# Run a callback in 2 minutes plus or minus a random number of seconds between 0 and 60, e.g., run between 60 and 180 seconds from now self.handle = self.run_in(callback, 120, random_start = -60, random_end = 60, **kwargs) ``` @@ -1150,11 +1150,11 @@ None ##### {% linkable_title service %} -The service name, e.g. `light.turn_on`. +The service name, e.g., `light.turn_on`. ##### {% linkable_title \*\*kwargs %} -Each service has different parameter requirements. This argument allows you to specify a comma separated list of keyword value pairs, e.g. `entity_id = light.office_1`. These parameters will be different for every service and can be discovered using the developer tools. Most if not all service calls require an `entity_id` however, so use of the above example is very common with this call. +Each service has different parameter requirements. This argument allows you to specify a comma separated list of keyword value pairs, e.g., `entity_id = light.office_1`. These parameters will be different for every service and can be discovered using the developer tools. Most if not all service calls require an `entity_id` however, so use of the above example is very common with this call. #### {% linkable_title Examples %} @@ -1187,7 +1187,7 @@ None ##### {% linkable_title entity_id %} -Fully qualified entity_id of the thing to be turned on, e.g. `light.office_lamp` or ```scene.downstairs_on``` +Fully qualified entity_id of the thing to be turned on, e.g., `light.office_lamp` or ```scene.downstairs_on``` ##### {% linkable_title \*\*kwargs %} @@ -1219,7 +1219,7 @@ None ##### {% linkable_title entity_id %} -Fully qualified entity_id of the thing to be turned off, e.g. `light.office_lamp` or `scene.downstairs_on`. +Fully qualified entity_id of the thing to be turned off, e.g., `light.office_lamp` or `scene.downstairs_on`. #### {% linkable_title Examples %} @@ -1246,7 +1246,7 @@ None ##### {% linkable_title entity_id %} -Fully qualified entity_id of the thing to be toggled, e.g. `light.office_lamp` or `scene.downstairs_on`. +Fully qualified entity_id of the thing to be toggled, e.g., `light.office_lamp` or `scene.downstairs_on`. #### {% linkable_title Examples %} @@ -1273,7 +1273,7 @@ None ##### {% linkable_title entity_id %} -Fully qualified entity_id of the input_number to be changed, e.g. `input_number.alarm_hour`. +Fully qualified entity_id of the input_number to be changed, e.g., `input_number.alarm_hour`. ##### {% linkable_title value %} @@ -1303,7 +1303,7 @@ None ##### {% linkable_title entity_id %} -Fully qualified entity_id of the input_select to be changed, e.g. `input_select.mode`. +Fully qualified entity_id of the input_select to be changed, e.g., `input_select.mode`. ##### {% linkable_title value %} @@ -1385,7 +1385,7 @@ A standard Python object reference. #### {% linkable_title event_name %} -Name of the event that was called, e.g. `call_service`. +Name of the event that was called, e.g., `call_service`. #### {% linkable_title data %} @@ -1528,7 +1528,7 @@ def service(self, event_name, data): #### {% linkable_title event_name %} -The name of the event that caused the callback, e.g. `"MODE_CHANGE"` or `call_service`. +The name of the event that caused the callback, e.g., `"MODE_CHANGE"` or `call_service`. #### {% linkable_title data %} @@ -1617,7 +1617,7 @@ A string representing the location of the tracker. ##### {% linkable_title tracker_id %} -Fully qualified entity_id of the device tracker to query, e.g. `device_tracker.andrew`. +Fully qualified entity_id of the device tracker to query, e.g., `device_tracker.andrew`. #### {% linkable_title Examples %} @@ -1871,7 +1871,7 @@ self.log("{} ({}) is {}".format(tracker, self.friendly_name(tracker), self.get_ ### {% linkable_title split_entity() %} -`split_entity()` will take a fully qualified entity id of the form `light.hall_light` and split it into 2 values, the device and the entity, e.g. `light` and `hall_light`. +`split_entity()` will take a fully qualified entity id of the form `light.hall_light` and split it into 2 values, the device and the entity, e.g., `light` and `hall_light`. #### {% linkable_title Synopsis %} @@ -1925,7 +1925,7 @@ MyApp.turn_light_on() ### {% linkable_title split_device_list() %} -`split_device_list()` will take a comma separated list of device types (or anything else for that matter) and return them as an iterable list. This is intended to assist in use cases where the App takes a list of entities from an argument, e.g. a list of sensors to monitor. If only one entry is provided, an iterable list will still be returned to avoid the need for special processing. +`split_device_list()` will take a comma separated list of device types (or anything else for that matter) and return them as an iterable list. This is intended to assist in use cases where the App takes a list of entities from an argument, e.g., a list of sensors to monitor. If only one entry is provided, an iterable list will still be returned to avoid the need for special processing. #### {% linkable_title Synopsis %} @@ -1941,7 +1941,7 @@ A list of split devices with 1 or more entries. ```python for sensor in self.split_device_list(self.args["sensors"]): - do something for each sensor, e.g. make a state subscription + do something for each sensor, e.g., make a state subscription ``` diff --git a/source/_docs/ecosystem/appdaemon/tutorial.markdown b/source/_docs/ecosystem/appdaemon/tutorial.markdown index 962be8ea9f..e764db160a 100755 --- a/source/_docs/ecosystem/appdaemon/tutorial.markdown +++ b/source/_docs/ecosystem/appdaemon/tutorial.markdown @@ -29,7 +29,7 @@ So why `AppDaemon`? AppDaemon is not meant to replace Home Assistant Automations - New paradigm - some problems require a procedural and/or iterative approach, and `AppDaemon` Apps are a much more natural fit for this. Recent enhancements to Home Assistant scripts and templates have made huge strides, but for the most complex scenarios, Apps can do things that Automations can't - Ease of use - AppDaemon's API is full of helper functions that make programming as easy and natural as possible. The functions and their operation are as "Pythonic" as possible, experienced Python programmers should feel right at home. -- Reuse - write a piece of code once and instantiate it as an app as many times as you need with different parameters e.g. a motion light program that you can use in 5 different places around your home. The code stays the same, you just dynamically add new instances of it in the config file +- Reuse - write a piece of code once and instantiate it as an app as many times as you need with different parameters e.g., a motion light program that you can use in 5 different places around your home. The code stays the same, you just dynamically add new instances of it in the config file - Dynamic - AppDaemon has been designed from the start to enable the user to make changes without requiring a restart of Home Assistant, thanks to its loose coupling. However, it is better than that - the user can make changes to code and AppDaemon will automatically reload the code, figure out which Apps were using it and restart them to use the new code with out the need to restart `AppDaemon` itself. It is also possible to change parameters for an individual or multiple apps and have them picked up dynamically, and for a final trick, removing or adding apps is also picked up dynamically. Testing cycles become a lot more efficient as a result. - Complex logic - Python's If/Else constructs are clearer and easier to code for arbitrarily complex nested logic - Durable variables and state - variables can be kept between events to keep track of things like the number of times a motion sensor has been activated, or how long it has been since a door opened diff --git a/source/_docs/ecosystem/backup/backup_dropbox.markdown b/source/_docs/ecosystem/backup/backup_dropbox.markdown index e0d7336899..6d5b5300cd 100644 --- a/source/_docs/ecosystem/backup/backup_dropbox.markdown +++ b/source/_docs/ecosystem/backup/backup_dropbox.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Configuration Backup to Dropbox" -description: "Instructions how backup your Home Assistant configuration to Dropbox" +description: "Instructions on how backup your Home Assistant configuration to Dropbox" date: 2017-04-24 18:00 sidebar: true comments: false diff --git a/source/_docs/ecosystem/backup/backup_github.markdown b/source/_docs/ecosystem/backup/backup_github.markdown index db4ab29626..e1842f4721 100644 --- a/source/_docs/ecosystem/backup/backup_github.markdown +++ b/source/_docs/ecosystem/backup/backup_github.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Configuration Backup to GitHub" -description: "Instructions how backup your Home Assistant configuration to GitHub" +description: "Instructions on how backup your Home Assistant configuration to GitHub" date: 2017-01-05 18:00 sidebar: true comments: false diff --git a/source/_docs/ecosystem/backup/backup_usb.markdown b/source/_docs/ecosystem/backup/backup_usb.markdown index 6bd6276883..19286e05d0 100644 --- a/source/_docs/ecosystem/backup/backup_usb.markdown +++ b/source/_docs/ecosystem/backup/backup_usb.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Configuration Backup to USB drive" -description: "Instructions how backup your Home Assistant configuration to USB drive" +description: "Instructions on how backup your Home Assistant configuration to USB drive" date: 2017-04-29 08:00 sidebar: true comments: false diff --git a/source/_docs/ecosystem/hass-configurator.markdown b/source/_docs/ecosystem/hass-configurator.markdown index 1d07bf163d..7b042080c5 100644 --- a/source/_docs/ecosystem/hass-configurator.markdown +++ b/source/_docs/ecosystem/hass-configurator.markdown @@ -47,7 +47,7 @@ There are no dependencies on Python modules that are not part of the standard li ### {% linkable_title Configuration %} Near the top of the `configurator.py`-file you will find some global variables you can change to customize the configurator. If you are unfamiliar with Python: when setting variables of the type _string_, you have to write that within quotation marks. The default settings are fine for just checking out the configurator quickly. With more customized setups you should change some settings though. -To keep your settings across updates it is also possible to save settings in an external file. In that case copy [settings.conf](https://github.com/danielperna84/hass-configurator/blob/master/settings.conf) wherever you like and append the full path to the file to the command when starting the configurator. E.g. `sudo .configurator.py /home/homeassistant/.homeassistant/mysettings.conf`. This file is in JSON format. So make sure it has a valid syntax (you can set the editor to JSON to get syntax highlighting for the settings). The major difference to the settings in the py-file is, that `None` becomes `null`. +To keep your settings across updates it is also possible to save settings in an external file. In that case copy [settings.conf](https://github.com/danielperna84/hass-configurator/blob/master/settings.conf) wherever you like and append the full path to the file to the command when starting the configurator. e.g., `sudo .configurator.py /home/homeassistant/.homeassistant/mysettings.conf`. This file is in JSON format. So make sure it has a valid syntax (you can set the editor to JSON to get syntax highlighting for the settings). The major difference to the settings in the py-file is, that `None` becomes `null`. #### LISTENIP (string) The IP the service is listening on. By default it is binding to `0.0.0.0`, which is every interface on the system. @@ -66,11 +66,11 @@ Set credentials in the form of `"username:password"` if authentication should be #### ALLOWED_NETWORKS (list) Limit access to the configurator by adding allowed IP addresses / networks to the list, e.g `ALLOWED_NETWORKS = ["192.168.0.0/24", "172.16.47.23"]` #### BANNED_IPS (list) -List of statically banned IP addresses, e.g. `BANNED_IPS = ["1.1.1.1", "2.2.2.2"]` +List of statically banned IP addresses, e.g., `BANNED_IPS = ["1.1.1.1", "2.2.2.2"]` #### BANLIMIT (integer) Ban IPs after `n` failed login attempts. Restart the service to reset banning. The default of `0` disables this feature. `CREDENTIALS` has to be set for this to work. #### IGNORE_PATTERN (list) -Files and folders to ignore in the UI, e.g. `IGNORE_PATTERN = [".*", "*.log", "__pycache__"]`. +Files and folders to ignore in the UI, e.g., `IGNORE_PATTERN = [".*", "*.log", "__pycache__"]`. #### DIRSFIRST (bool) If set to `True`, directories will be displayed at the top of the filebrowser. #### GIT (bool) @@ -81,7 +81,7 @@ __Note regarding `ALLOWED_NETWORKS`, `BANNED_IPS` and `BANLIMIT`__: The way this is implemented works in the following order: 1. (Only if `CREDENTIALS` is set) Check credentials - - Failure: Retry `BANLIMIT` times, after that return error 420 (unless you try again without any authentication headers set, e.g. private tab of your browser) + - Failure: Retry `BANLIMIT` times, after that return error 420 (unless you try again without any authentication headers set, e.g., private tab of your browser) - Success: Continue 2. Check if client IP address is in `BANNED_IPS` - Yes: Return error 420 diff --git a/source/_docs/ecosystem/synology.markdown b/source/_docs/ecosystem/synology.markdown index 099ea41ef0..c5c436da58 100644 --- a/source/_docs/ecosystem/synology.markdown +++ b/source/_docs/ecosystem/synology.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Synology" -description: "Instructions how to get Home Assistant up and running on Synology" +description: "Instructions on how to get Home Assistant up and running on Synology" release_date: 2016-12-07 15:00:00 -0500 sidebar: true comments: false diff --git a/source/_docs/installation.markdown b/source/_docs/installation.markdown index bb51e93863..16380e6837 100644 --- a/source/_docs/installation.markdown +++ b/source/_docs/installation.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Installation of Home Assistant" -description: "Instructions how to install Home Assistant to launch on start." +description: "Instructions on how to install Home Assistant to launch on start." date: 2017-02-15 08:00 sidebar: true comments: false diff --git a/source/_docs/installation/docker.markdown b/source/_docs/installation/docker.markdown index ba89ccbf46..afd31d7e5f 100644 --- a/source/_docs/installation/docker.markdown +++ b/source/_docs/installation/docker.markdown @@ -51,7 +51,7 @@ The steps would be: * Wait for some time until your NAS has pulled the image * Move to the "Image"-section of the Docker-app * Click on "Launch" -* Choose a container-name you want (e.g. "homeassistant") +* Choose a container-name you want (e.g., "homeassistant") * Click on "Advanced Settings" * Set "Enable auto-restart" if you like * Within "Volume" click on "Add Folder" and choose either an existing folder or add a new folder. The "mount point" has to be "/config", so that Home Assistant will use it for the configs and logs. diff --git a/source/_docs/installation/hassbian/common-tasks.markdown b/source/_docs/installation/hassbian/common-tasks.markdown index 6fddcd360b..26d91a2abc 100644 --- a/source/_docs/installation/hassbian/common-tasks.markdown +++ b/source/_docs/installation/hassbian/common-tasks.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Common tasks on Hassbian" -description: "Instructions how to do common tasks on Hassbian." +description: "Instructions on how to do common tasks on Hassbian." date: 2016-09-26 21:00 sidebar: true comments: false diff --git a/source/_docs/installation/hassbian/upgrading.markdown b/source/_docs/installation/hassbian/upgrading.markdown index 7ef479edcb..33b10c5028 100644 --- a/source/_docs/installation/hassbian/upgrading.markdown +++ b/source/_docs/installation/hassbian/upgrading.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Upgrading Hassbian" -description: "Instructions how to upgrade Hassbian to the latest version." +description: "Instructions on how to upgrade Hassbian to the latest version." date: 2016-09-26 21:00 sidebar: true comments: false diff --git a/source/_docs/installation/synology.markdown b/source/_docs/installation/synology.markdown index fee65366be..808a4e77de 100644 --- a/source/_docs/installation/synology.markdown +++ b/source/_docs/installation/synology.markdown @@ -69,7 +69,7 @@ Create homeassistant config directory & switch to it # chmod 755 /volume1/homeassistant # cd /volume1/homeassistant ``` -Hint: alternatively you can also create a "Shared Folder" via Synology WebUI (e.g. via "File Station") - this has the advantage that the folder is visible via "File Station". +Hint: alternatively you can also create a "Shared Folder" via Synology WebUI (e.g., via "File Station") - this has the advantage that the folder is visible via "File Station". Create hass-daemon file using the following code (edit the variables in uppercase if necessary) diff --git a/source/_docs/mqtt/birth_will.markdown b/source/_docs/mqtt/birth_will.markdown index afce8a592f..8ba1aa593a 100644 --- a/source/_docs/mqtt/birth_will.markdown +++ b/source/_docs/mqtt/birth_will.markdown @@ -1,7 +1,7 @@ --- layout: page title: "MQTT Birth and Last will" -description: "Instructions how to setup MQTT birth and last will messages within Home Assistant." +description: "Instructions on how to setup MQTT birth and last will messages within Home Assistant." date: 2015-08-07 18:00 sidebar: true comments: false diff --git a/source/_docs/mqtt/broker.markdown b/source/_docs/mqtt/broker.markdown index 47ea1bb73e..87406a5873 100644 --- a/source/_docs/mqtt/broker.markdown +++ b/source/_docs/mqtt/broker.markdown @@ -1,7 +1,7 @@ --- layout: page title: "MQTT Brokers" -description: "Instructions how to setup MQTT brokers for Home Assistant." +description: "Instructions on how to setup MQTT brokers for Home Assistant." date: 2015-08-07 18:00 sidebar: true comments: false @@ -62,7 +62,7 @@ mqtt: {% configuration %} broker: required: false - description: The IP address or hostname of your MQTT broker, e.g. 192.168.1.32. + description: The IP address or hostname of your MQTT broker, e.g., 192.168.1.32. type: string port: required: false @@ -109,7 +109,7 @@ If you get this error `AttributeError: module 'ssl' has no attribute 'PROTOCOL_T

    -If you are running a Mosquitto instance on the same server as Home Assistant then you must ensure that the Mosquitto service starts before Home Assistant. For a Linux instance running Systemd (Raspberry Pi, Debian, Ubuntu and others) then you should edit the file /etc/systemd/system/home-assistant@homeassistant.service as root (e.g. sudo nano /etc/systemd/system/home-assistant@homeassistant.service) and add the mosquitto service: +If you are running a Mosquitto instance on the same server as Home Assistant then you must ensure that the Mosquitto service starts before Home Assistant. For a Linux instance running Systemd (Raspberry Pi, Debian, Ubuntu and others) then you should edit the file /etc/systemd/system/home-assistant@homeassistant.service as root (e.g., sudo nano /etc/systemd/system/home-assistant@homeassistant.service) and add the mosquitto service: ``` [Unit] Description=Home Assistant diff --git a/source/_docs/mqtt/certificate.markdown b/source/_docs/mqtt/certificate.markdown index bf410b916a..252e0a5160 100644 --- a/source/_docs/mqtt/certificate.markdown +++ b/source/_docs/mqtt/certificate.markdown @@ -1,7 +1,7 @@ --- layout: page title: "MQTT Certificate" -description: "Instructions how to setup MQTT with a certificate in Home Assistant." +description: "Instructions on how to setup MQTT with a certificate in Home Assistant." date: 2015-08-07 18:00 sidebar: true comments: false diff --git a/source/_docs/mqtt/discovery.markdown b/source/_docs/mqtt/discovery.markdown index 3242a5f86d..60974c428b 100644 --- a/source/_docs/mqtt/discovery.markdown +++ b/source/_docs/mqtt/discovery.markdown @@ -1,7 +1,7 @@ --- layout: page title: "MQTT Discovery" -description: "Instructions how to setup MQTT Discovery within Home Assistant." +description: "Instructions on how to setup MQTT Discovery within Home Assistant." date: 2015-08-07 18:00 sidebar: true comments: false diff --git a/source/_docs/mqtt/logging.markdown b/source/_docs/mqtt/logging.markdown index 999e24988f..d4deaf4f48 100644 --- a/source/_docs/mqtt/logging.markdown +++ b/source/_docs/mqtt/logging.markdown @@ -1,7 +1,7 @@ --- layout: page title: "MQTT Logging" -description: "Instructions how to setup MQTT Logging within Home Assistant." +description: "Instructions on how to setup MQTT Logging within Home Assistant." date: 2015-08-07 18:00 sidebar: true comments: false diff --git a/source/_docs/mqtt/processing_json.markdown b/source/_docs/mqtt/processing_json.markdown index 552dd08167..8afb951f8e 100644 --- a/source/_docs/mqtt/processing_json.markdown +++ b/source/_docs/mqtt/processing_json.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Processing JSON" -description: "Instructions how to process the MQTT payload." +description: "Instructions on how to process the MQTT payload." date: 2015-08-07 18:00 sidebar: true comments: false diff --git a/source/_docs/mqtt/service.markdown b/source/_docs/mqtt/service.markdown index d751856fe4..941d79e7b7 100644 --- a/source/_docs/mqtt/service.markdown +++ b/source/_docs/mqtt/service.markdown @@ -1,7 +1,7 @@ --- layout: page title: "MQTT Publish service" -description: "Instructions how to setup the MQTT Publish service within Home Assistant." +description: "Instructions on how to setup the MQTT Publish service within Home Assistant." date: 2015-08-07 18:00 sidebar: true comments: false diff --git a/source/_docs/mqtt/testing.markdown b/source/_docs/mqtt/testing.markdown index f71ac52e2f..e6c87bdbfc 100644 --- a/source/_docs/mqtt/testing.markdown +++ b/source/_docs/mqtt/testing.markdown @@ -1,7 +1,7 @@ --- layout: page title: "MQTT Testing" -description: "Instructions how to test your MQTT setup." +description: "Instructions on how to test your MQTT setup." date: 2015-08-07 18:00 sidebar: true comments: false diff --git a/source/_docs/scripts.markdown b/source/_docs/scripts.markdown index 5c39a604ab..37d13d8507 100644 --- a/source/_docs/scripts.markdown +++ b/source/_docs/scripts.markdown @@ -102,7 +102,7 @@ It is also possible to use dummy variables, e.g., in scripts, when using `wait_t {% raw %} ```yaml -# Service call, e.g. from an automation. +# Service call, e.g., from an automation. service: script.do_something data_template: dummy: "{{ input_boolean.switch }}" diff --git a/source/_docs/scripts/service-calls.markdown b/source/_docs/scripts/service-calls.markdown index b1b1833340..ab73aad529 100644 --- a/source/_docs/scripts/service-calls.markdown +++ b/source/_docs/scripts/service-calls.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Service Calls" -description: "Instructions how to call services in Home Assistant." +description: "Instructions on how to call services in Home Assistant." date: 2016-03-12 12:00 -0800 sidebar: true comments: false diff --git a/source/_docs/z-wave/installation.markdown b/source/_docs/z-wave/installation.markdown index 5974c16a20..da8848899a 100644 --- a/source/_docs/z-wave/installation.markdown +++ b/source/_docs/z-wave/installation.markdown @@ -140,7 +140,7 @@ Or, if there is no result, try to find detailed USB connection info with: $ dmesg | grep USB ``` -If Home Assistant (`hass`) runs with another user (e.g. *homeassistant* on Hassbian) give access to the stick with: +If Home Assistant (`hass`) runs with another user (e.g., *homeassistant* on Hassbian) give access to the stick with: ```bash $ sudo usermod -a -G dialout homeassistant diff --git a/source/_docs/z-wave/services.markdown b/source/_docs/z-wave/services.markdown index 0a6499d2d4..b6c420a91b 100644 --- a/source/_docs/z-wave/services.markdown +++ b/source/_docs/z-wave/services.markdown @@ -29,7 +29,7 @@ The `zwave` component exposes multiple services to help maintain the network. Al | remove_failed_node | Remove a failed node from the network. The Node should be on the controller's Failed Node List, otherwise this command will fail. | | replace_failed_node | Replace a failed device with another. If the node is not in the controller's Failed Node List, or the node responds, this command will fail. | | reset_node_meters | Reset a node's meter values. Only works if the node supports this. | -| set_config_parameter | Lets the user set a config parameter to a node. NOTE: Use the parameter option's `label` string as the `value` for list parameters (e.g. `"value": "Off"`). For all other parameters use the relevant integer `value` (e.g. `"value": 1`). | +| set_config_parameter | Lets the user set a config parameter to a node. NOTE: Use the parameter option's `label` string as the `value` for list parameters (e.g., `"value": "Off"`). For all other parameters use the relevant integer `value` (e.g., `"value": 1`). | | soft_reset | Tells the controller to do a "soft reset." This is not supposed to lose any data, but different controllers can behave differently to a "soft reset" command. | | start_network | Starts the Z-Wave network. | | stop_network | Stops the Z-Wave network. | diff --git a/source/_posts/2015-08-09-mqtt-raspberry-pi-squeezebox-asuswrt-support.markdown b/source/_posts/2015-08-09-mqtt-raspberry-pi-squeezebox-asuswrt-support.markdown index 14d83f6202..2707b3e7f0 100644 --- a/source/_posts/2015-08-09-mqtt-raspberry-pi-squeezebox-asuswrt-support.markdown +++ b/source/_posts/2015-08-09-mqtt-raspberry-pi-squeezebox-asuswrt-support.markdown @@ -104,7 +104,7 @@ sensor: device: PATH_TO_DEVICE ``` -The path to your device, e.g. `/dev/serial/by-id/usb-RFXCOM_RFXtrx433_A1Y0NJGR-if00-port0` +The path to your device, e.g., `/dev/serial/by-id/usb-RFXCOM_RFXtrx433_A1Y0NJGR-if00-port0` __TEMPer temperature sensor support__ Support for Temper temperature sensors has been contributed by [@rkabadi](https://github.com/rkabadi). diff --git a/source/_posts/2016-02-09-Smarter-Smart-Things-with-MQTT-and-Home-Assistant.markdown b/source/_posts/2016-02-09-Smarter-Smart-Things-with-MQTT-and-Home-Assistant.markdown index 2420da0399..a9deb4a4d1 100644 --- a/source/_posts/2016-02-09-Smarter-Smart-Things-with-MQTT-and-Home-Assistant.markdown +++ b/source/_posts/2016-02-09-Smarter-Smart-Things-with-MQTT-and-Home-Assistant.markdown @@ -169,7 +169,7 @@ homeassistant: - mqtt ``` -This will start home-assistant, MQTT, and the Bridge, in dependency order. All config can reference the name of the docker container instead of using IP addresses (e.g. mqtt for the broker host in Home Assistant). +This will start home-assistant, MQTT, and the Bridge, in dependency order. All config can reference the name of the docker container instead of using IP addresses (e.g., mqtt for the broker host in Home Assistant). ### How it works diff --git a/source/_posts/2016-04-30-ibeacons-part-1-making-presence-detection-work-better.markdown b/source/_posts/2016-04-30-ibeacons-part-1-making-presence-detection-work-better.markdown index 465e5278a2..ad68eb66fb 100644 --- a/source/_posts/2016-04-30-ibeacons-part-1-making-presence-detection-work-better.markdown +++ b/source/_posts/2016-04-30-ibeacons-part-1-making-presence-detection-work-better.markdown @@ -26,7 +26,7 @@ Luckily, OwnTracks supports iBeacons so I could use them to make presence detect ### {% linkable_title Getting Started %} -To do this you first need to set up [MQTT] and [OwnTracks] in Home assistant - and make sure that HA can track your phone. +To do this you first need to set up [MQTT] and [OwnTracks] in Home Assistant - and make sure that HA can track your phone. [MQTT]: /components/mqtt/#picking-a-broker [OwnTracks]: /components/device_tracker.owntracks/ @@ -57,7 +57,7 @@ Once you’ve created the zone - you need to restart HA. The next step is:- 1. Go to the OwnTracks app on your phone 2. Touch the `Regions` menu at the bottom of the screen 3. Touch the `+` symbol at the top right of the screen -4. Give the beacon a name e.g. `-drive` ’(start the name with a `-` see below for the reason) +4. Give the beacon a name e.g., `-drive` ’(start the name with a `-` see below for the reason) 5. Turn Share to `On` 6. Skip the `Circular Region` section 7. Enter the `UUID` of your beacon - this may be written on your beacon - or you can copy it from the management app that came with your iBeacon device. It’s a long number – so it’s easier to copy if you can! diff --git a/source/_posts/2016-08-16-we-have-apps-now.markdown b/source/_posts/2016-08-16-we-have-apps-now.markdown index 6edf3f8f4b..e970b9a17e 100644 --- a/source/_posts/2016-08-16-we-have-apps-now.markdown +++ b/source/_posts/2016-08-16-we-have-apps-now.markdown @@ -32,7 +32,7 @@ So why `AppDaemon`? `AppDaemon` is not meant to replace Home Assistant Automatio - New paradigm - some problems require a procedural and/or iterative approach, and `AppDaemon` Apps are a much more natural fit for this. Recent enhancements to Home Assistant scripts and templates have made huge strides, but for the most complex scenarios, Apps can do things that Automations can't - Ease of use - `AppDaemon`'s API is full of helper functions that make programming as easy and natural as possible. The functions and their operation are as "Pythonic" as possible, experienced Python programmers should feel right at home. -- Reuse - write a piece of code once and instantiate it as an app as many times as you need with different parameters e.g. a motion light program that you can use in 5 different places around your home. The code stays the same, you just dynamically add new instances of it in the config file +- Reuse - write a piece of code once and instantiate it as an app as many times as you need with different parameters e.g., a motion light program that you can use in 5 different places around your home. The code stays the same, you just dynamically add new instances of it in the config file - Dynamic - `AppDaemon` has been designed from the start to enable the user to make changes without requiring a restart of Home Assistant, thanks to its loose coupling. However, it is better than that - the user can make changes to code and `AppDaemon` will automatically reload the code, figure out which Apps were using it and restart them to use the new code without the need to restart `AppDaemon` itself. It is also possible to change parameters for an individual or multiple apps and have them picked up dynamically, and for a final trick, removing or adding apps is also picked up dynamically. Testing cycles become a lot more efficient as a result. - Complex logic - Python's If/Else constructs are clearer and easier to code for arbitrarily complex nested logic - Durable variables and state - variables can be kept between events to keep track of things like the number of times a motion sensor has been activated, or how long it has been since a door opened diff --git a/source/_posts/2017-11-04-release-57.markdown b/source/_posts/2017-11-04-release-57.markdown index dc054b035c..f360981135 100644 --- a/source/_posts/2017-11-04-release-57.markdown +++ b/source/_posts/2017-11-04-release-57.markdown @@ -120,7 +120,7 @@ Experiencing issues introduced by this release? Please report them in our [issue This fixes errors when an entity has an attribute that is not "a string, bytearray, int, float or None" and mqtt_statestream is used. As of now, the attribute is just handed over to paho, and paho can only send the aforementioned types. This patch fixes the issue by just casting everything to string before handing it over to paho. - There are a number of components / entities which have "other" attributes, e.g. light that have an RGB attribute which is a list. ([@tinloaf] - [#9872]) ([mqtt_statestream docs]) (breaking change) + There are a number of components / entities which have "other" attributes, e.g., light that have an RGB attribute which is a list. ([@tinloaf] - [#9872]) ([mqtt_statestream docs]) (breaking change) - Generic thermostat: the configuration option `tolerance` has been removed and has been replaced by `cold_tolerance` and `hot_tolerance`. This allows on and off states to have different error bands. ([@biggms] - [#9843]) ([climate.generic_thermostat docs]) (breaking change) - Developers only: frontend has been refactored. The method `register_panel` has been turned into a coroutine function called `async_register_panel`. The parameter `url_path` has been renamed to `frontend_url_path`. For frontend, development, you no longer pass `development: 1` to the http component but instead configure the frontend component to be in development mode by pointing it at a local checkout of the Polymer repo: ([@balloob] - [#9915]) (breaking change) diff --git a/source/developers/code_review_platform.markdown b/source/developers/code_review_platform.markdown index 96f78c60a0..00ab599c1b 100644 --- a/source/developers/code_review_platform.markdown +++ b/source/developers/code_review_platform.markdown @@ -28,7 +28,7 @@ Not all existing platforms follow the requirements in this checklist. This canno ### {% linkable_title 3. Configuration %} 1. Voluptuous schema present for config validation - 2. Voluptuous schema extends schema from component
    (e.g. `light.hue.PLATFORM_SCHEMA` extends `light.PLATFORM_SCHEMA`) + 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. Your `PLATFORM_SCHEMA` should use as many generic config keys as possible from `homeassistant.const` ```python @@ -58,7 +58,7 @@ Not all existing platforms follow the requirements in this checklist. This canno ### {% linkable_title 5. Entity %} - 1. Extend entity from component, e.g. `class HueLight(Light)` + 1. Extend entity from component, e.g., `class HueLight(Light)` 2. Do not call `update()` in constructor, use `add_devices(devices, True)` instead. 3. Do not do any I/O inside properties. Cache values inside `update()` instead. 4. The state and/or attributes should not contain relative time since something happened. Instead it should store UTC timestamps. diff --git a/source/developers/component_deps_and_reqs.markdown b/source/developers/component_deps_and_reqs.markdown index 750f6b6c85..2a6ae27d0e 100644 --- a/source/developers/component_deps_and_reqs.markdown +++ b/source/developers/component_deps_and_reqs.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Requirements & Dependencies" -description: "Instructions how to define requirements and dependencies." +description: "Instructions on how to define requirements and dependencies." date: 2016-04-16 13:32 sidebar: true comments: false diff --git a/source/developers/component_events.markdown b/source/developers/component_events.markdown index 485bc2863c..ee2e281b1f 100644 --- a/source/developers/component_events.markdown +++ b/source/developers/component_events.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Handling events" -description: "Instructions how to handle events with your component." +description: "Instructions on how to handle events with your component." date: 2016-04-16 13:32 sidebar: true comments: false diff --git a/source/developers/component_loading.markdown b/source/developers/component_loading.markdown index 342aa60b7e..b817fadf38 100644 --- a/source/developers/component_loading.markdown +++ b/source/developers/component_loading.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Loading your components" -description: "Instructions how to get your component loaded by Home Assistant." +description: "Instructions on how to get your component loaded by Home Assistant." date: 2016-04-16 13:32 sidebar: true comments: false diff --git a/source/developers/component_states.markdown b/source/developers/component_states.markdown index 5e3217de26..f89803699a 100644 --- a/source/developers/component_states.markdown +++ b/source/developers/component_states.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Handling states" -description: "Instructions how to handle states with your component." +description: "Instructions on how to handle states with your component." date: 2016-07-01 20:00 sidebar: true comments: false diff --git a/source/developers/component_visibility.markdown b/source/developers/component_visibility.markdown index 846d6b98b3..333c627cf5 100644 --- a/source/developers/component_visibility.markdown +++ b/source/developers/component_visibility.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Handling visibility" -description: "Instructions how to handle visibility with your component." +description: "Instructions on how to handle visibility with your component." date: 2016-07-01 20:00 sidebar: true comments: false diff --git a/source/developers/documentation/standards.markdown b/source/developers/documentation/standards.markdown index 47ae4eab73..0a6d2fa7ad 100644 --- a/source/developers/documentation/standards.markdown +++ b/source/developers/documentation/standards.markdown @@ -16,7 +16,7 @@ To ensure that the documentation for Home Assistant is consistent and easy to fo * The language of the documentation should be American-English. * Don't put two spaces after a period and avoid the "Oxford comma". * Be objective and not gender favoring, polarizing, race related or religion inconsiderate. -* The case of brand names, services, protocols, components, and platforms must match its respective counterpart. E.g. "Z-Wave" **not** "Zwave", "Z-wave", "Z Wave" or "ZWave". Also, "Input Select" **not** "input select" or "Input select". +* The case of brand names, services, protocols, components, and platforms must match its respective counterpart. e.g., "Z-Wave" **not** "Zwave", "Z-wave", "Z Wave" or "ZWave". Also, "Input Select" **not** "input select" or "Input select". * All headings should use the {% raw %}`{% linkable_title %}`{% endraw %} tag. ## {% linkable_title Component and Platform Pages %} diff --git a/source/developers/hassio/addon_communication.markdown b/source/developers/hassio/addon_communication.markdown index 775008162a..be4f04dc08 100644 --- a/source/developers/hassio/addon_communication.markdown +++ b/source/developers/hassio/addon_communication.markdown @@ -17,7 +17,7 @@ There are different ways for communication between add-ons inside Hass.io. We use an internal network that allows to communicate with every add-on, even to/from Home Assistant, by using his name or alias. Only the add-ons which run on the host network are a bit limited. These can talk with all internal add-ons by their name but all other add-on can't address these add-on by name - using an alias works for both! Name/alias are used for communication inside Hass.io. -The name is generated using the following format: `{REPO}_{SLUG}`, e.g. `local_xy` or `3283fh_myaddon`. In this example, `{SLUG}` is defined in an add-ons `config.json`. If an add-on is installed locally, `{REPO}` will be `local`. If the add-on is installed from a Github repository, `{REPO}` is a hashed identifier generated from the GitHub repository's URL (ex: https://github.com/xy/my_hassio_addons). See [here](https://github.com/home-assistant/hassio/blob/587047f9d648b8491dc8eef17dc6777f81938bfd/hassio/addons/utils.py#L17) to understand how this identifier is generated. Note that this identifier is required in certain service calls that use the [Hass.io add-on API](hassio-addon-api). You can view the repository identifiers for all currently installed add-ons via a GET request to the hassio API `addons` endpoint. +The name is generated using the following format: `{REPO}_{SLUG}`, e.g., `local_xy` or `3283fh_myaddon`. In this example, `{SLUG}` is defined in an add-ons `config.json`. If an add-on is installed locally, `{REPO}` will be `local`. If the add-on is installed from a Github repository, `{REPO}` is a hashed identifier generated from the GitHub repository's URL (ex: https://github.com/xy/my_hassio_addons). See [here](https://github.com/home-assistant/hassio/blob/587047f9d648b8491dc8eef17dc6777f81938bfd/hassio/addons/utils.py#L17) to understand how this identifier is generated. Note that this identifier is required in certain service calls that use the [Hass.io add-on API](hassio-addon-api). You can view the repository identifiers for all currently installed add-ons via a GET request to the hassio API `addons` endpoint. Use `hassio` for communication with the internal API. diff --git a/source/getting-started/presence-detection.markdown b/source/getting-started/presence-detection.markdown index 6861f89e30..acdd5a30b8 100644 --- a/source/getting-started/presence-detection.markdown +++ b/source/getting-started/presence-detection.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Setting up presence detection" -description: "Instructions how to setup presence detection within Home Assistant." +description: "Instructions on how to setup presence detection within Home Assistant." date: 2015-10-04 12:08 sidebar: true comments: false diff --git a/source/hassio/installing_third_party_addons.markdown b/source/hassio/installing_third_party_addons.markdown index 828ed90e59..0840aa4a69 100644 --- a/source/hassio/installing_third_party_addons.markdown +++ b/source/hassio/installing_third_party_addons.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Installing third-party add-ons" -description: "Instructions how to get started using third-party add-ons." +description: "Instructions on how to get started using third-party add-ons." date: 2017-05-14 13:28 sidebar: true comments: false From cdbdfea05d061e3ac53ecd664224b7371db8f782 Mon Sep 17 00:00:00 2001 From: Sebastian Muszynski Date: Sat, 17 Mar 2018 20:30:05 +0100 Subject: [PATCH 631/993] Xiaomi MiIO light: Philips Eyecare Smart Lamp 2 integration (#4825) * Xiaomi Philips Eyecare Smart Lamp 2 features added. * New device added. * Marker removed --- source/_components/light.xiaomi_miio.markdown | 99 ++++++++++++++++++- 1 file changed, 96 insertions(+), 3 deletions(-) diff --git a/source/_components/light.xiaomi_miio.markdown b/source/_components/light.xiaomi_miio.markdown index 3af241a04e..d73600c868 100644 --- a/source/_components/light.xiaomi_miio.markdown +++ b/source/_components/light.xiaomi_miio.markdown @@ -13,9 +13,54 @@ ha_version: 0.53 ha_iot_class: "Local Polling" --- -The `xiaomi_miio` platform allows you to control the state of your Xiaomi Philips LED Ball Lamp, Xiaomi Philips LED Ceiling Lamp and Xiaomi Philips Eyecare Lamp 2. +The `xiaomi_miio` platform allows you to control the state of your Xiaomi Philips LED Ball Lamp, Xiaomi Philips Zhirui LED Bulb E14 Candle Lamp, Xiaomi Philips LED Ceiling Lamp and Xiaomi Philips Eyecare Lamp 2. -Currently, the supported features are `on`, `off`, `set_cct` (colortemp) , `set_bright` (brightness). +## Features + +### Philips LED Ball Lamp and Philips Zhirui LED Candle Lamp + +* Power (on, off) +* Brightness +* Color temperature (175...333 mireds) +* Scene (1, 2, 3, 4) +* Delayed turn off (Resolution in seconds) +* Attributes + - model + - scene + - delayed_turn_off + +### Philips LED Ceiling Lamp + +* Power (on, off) +* Brightness +* Color temperature (175...370 mireds) +* Scene (1, 2, 3, 4) +* Night light mode (on, off) +* Delayed turn off (Resolution in seconds) +* Attributes + - model + - scene + - delayed_turn_off + - night_light_mode + - automatic_color_temperature + +### Philips Eyecare Smart Lamp 2 + +* Eyecare light (on, off) +* Ambient light (on, off) +* Brightness (of each light) +* Scene (1, 2, 3, 4) +* Night light mode (on, off) +* Delayed turn off (Resolution in seconds) +* Eye fatigue reminder / notification (on, off) +* Eyecare mode (on, off) +* Attributes + - model + - scene + - delayed_turn_off + - night_light_mode + - reminder + - eyecare_mode Please follow the instructions on [Retrieving the Access Token](/components/vacuum.xiaomi_miio/#retrieving-the-access-token) to get the API token to use in the `configuration.yaml` file. @@ -35,7 +80,7 @@ Configuration variables: - **host** (*Required*): The IP of your light. - **token** (*Required*): The API token of your light. - **name** (*Optional*): The name of your light. -- **model** (*Optional*): The model of your light. Valid values are `philips.light.bulb`, `philips.light.sread1`, `philips.light.ceiling` and `philips.light.zyceiling`. This setting can be used to bypass the device model detection and is recommended if your device isn't always available. +- **model** (*Optional*): The model of your light. Valid values are `philips.light.bulb`, `philips.light.candle2`, `philips.light.sread1`, `philips.light.ceiling` and `philips.light.zyceiling`. This setting can be used to bypass the device model detection and is recommended if your device isn't always available. {% configuration %} host: @@ -76,3 +121,51 @@ Delayed turn off. |---------------------------|----------|-------------------------------------------------------| | `entity_id` | yes | Only act on a specific light. Else targets all. | | `time_period` | no | Time period for the delayed turn off. | + +### {% linkable_title Service `light.xiaomi_miio_reminder_on` %} (Eyecare Smart Lamp 2 only) + +Enable the eye fatigue reminder/notification. + +| Service data attribute | Optional | Description | +|---------------------------|----------|-------------------------------------------------------| +| `entity_id` | yes | Only act on a specific light. Else targets all. | + +### {% linkable_title Service `light.xiaomi_miio_reminder_off` %} (Eyecare Smart Lamp 2 only) + +Disable the eye fatigue reminder/notification. + +| Service data attribute | Optional | Description | +|---------------------------|----------|-------------------------------------------------------| +| `entity_id` | yes | Only act on a specific light. Else targets all. | + +### {% linkable_title Service `light.xiaomi_miio_night_light_mode_on` %} (Eyecare Smart Lamp 2 only) + +Turn the smart night light mode on. + +| Service data attribute | Optional | Description | +|---------------------------|----------|-------------------------------------------------------| +| `entity_id` | yes | Only act on a specific light. Else targets all. | + +### {% linkable_title Service `light.xiaomi_miio_night_light_mode_off` %} (Eyecare Smart Lamp 2 only) + +Turn the smart night light mode off. + +| Service data attribute | Optional | Description | +|---------------------------|----------|-------------------------------------------------------| +| `entity_id` | yes | Only act on a specific light. Else targets all. | + +### {% linkable_title Service `light.xiaomi_miio_eyecare_mode_on` %} (Eyecare Smart Lamp 2 only) + +Turn the eyecare mode on. + +| Service data attribute | Optional | Description | +|---------------------------|----------|-------------------------------------------------------| +| `entity_id` | yes | Only act on a specific light. Else targets all. | + +### {% linkable_title Service `light.xiaomi_miio_eyecare_mode_off` %} (Eyecare Smart Lamp 2 only) + +Turn the eyecare mode off. + +| Service data attribute | Optional | Description | +|---------------------------|----------|-------------------------------------------------------| +| `entity_id` | yes | Only act on a specific light. Else targets all. | From 2a440b16b4a0f9543bdadbaaca94b5cd252b680b Mon Sep 17 00:00:00 2001 From: Igor Bernstein Date: Sun, 18 Mar 2018 12:18:19 -0400 Subject: [PATCH 632/993] add doc for zha fans (#4626) * add doc for zha fans * add ha_release --- source/_components/fan.zha.markdown | 16 ++++++++++++++++ source/_components/zha.markdown | 1 + 2 files changed, 17 insertions(+) create mode 100644 source/_components/fan.zha.markdown diff --git a/source/_components/fan.zha.markdown b/source/_components/fan.zha.markdown new file mode 100644 index 0000000000..536d9c78bd --- /dev/null +++ b/source/_components/fan.zha.markdown @@ -0,0 +1,16 @@ +--- +layout: page +title: "ZigBee Home Automation Fan" +description: "Instructions how to setup ZigBee Home Automation fans within Home Assistant." +date: 2018-02-10 00:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: zigbee.png +ha_category: Fan +ha_iot_class: "Local Polling" +ha_release: 0.66 +--- + +To get your ZigBee fans working with Home Assistant, follow the instructions for the general [ZigBee Home Automation component](/components/zha/). diff --git a/source/_components/zha.markdown b/source/_components/zha.markdown index 2a6b6355f2..11667fc8d7 100644 --- a/source/_components/zha.markdown +++ b/source/_components/zha.markdown @@ -22,6 +22,7 @@ There is currently support for the following device types within Home Assistant: - [Sensor](../sensor.zha) (e.g. temperature sensors) - [Light](../light.zha) - [Switch](../switch.zha) +- [Fan](../fan.zha) Known working ZigBee radios: From d44266b2bb9c8cfb4fdd1532c9a956b9191a7761 Mon Sep 17 00:00:00 2001 From: maxclaey Date: Sun, 18 Mar 2018 18:30:29 +0100 Subject: [PATCH 633/993] Documentation for IFTTT alarm control panel (#4878) * Documentation for IFTTT alarm control panel * Update alarm_control_panel.ifttt.markdown * Call service instead of direct state change * Update alarm_control_panel.ifttt.markdown * HAS -> HASS * Update alarm_control_panel.ifttt.markdown * :ambulance: Adds ha_release tag * :pencil2: Minor changes --- .../alarm_control_panel.ifttt.markdown | 64 +++++++++++++++++++ 1 file changed, 64 insertions(+) create mode 100644 source/_components/alarm_control_panel.ifttt.markdown diff --git a/source/_components/alarm_control_panel.ifttt.markdown b/source/_components/alarm_control_panel.ifttt.markdown new file mode 100644 index 0000000000..13f67bafc5 --- /dev/null +++ b/source/_components/alarm_control_panel.ifttt.markdown @@ -0,0 +1,64 @@ +--- +layout: page +title: "IFTTT Alarm Control Panel" +description: "Instructions on how to integrate IFTTT-controlled security systems into Home Assistant." +date: 2018-03-10 21:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: ifttt.png +ha_category: Alarm +ha_release: 0.66 +--- + +The `ifttt` platform allows you to integrate security systems that have no open API but can be controlled through [IFTTT](https://ifttt.com/discover). + +This platform depends on the [IFTTT](https://home-assistant.io/components/ifttt/) Home Assistant component. See the component's documentation to set it up. + +

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

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

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

    + +{% linkable_title Required IFTTT applets %} + +This platform supports the services `alarm_disarm`, `alarm_arm_away`, `alarm_arm_home` and `alarm_arm_night`. For each of these services, an IFTTT webhook will be triggered. + +For this system to operate correctly, the following IFTTT applets have to be setup. Obviously, if your alarm device does not support some states, no applets have to be provided for those. +* **IF** Webhook event `alarm_disarm` is called, **THEN** disarm the alarm system. +* **IF** Webhook event `alarm_arm_home` is called, **THEN** set the alarm system to armed home. +* **IF** Webhook event `alarm_arm_away` is called, **THEN** set the alarm system to armed away. +* **IF** Webhook event `alarm_arm_night` is called, **THEN** set the alarm system to armed night. +* **IF** the alarm system was disarmed, **THEN** perform a Webhook `POST` web request to url `https://HASS_URL/api/services/alarm_control_panel/ifttt_push_alarm_state?api_password=API_PASSWORD` with content type `application/json` and body `{"entity_id": "alarm_control_panel.DEVICE_NAME", "state": "disarmed"}`. +* **IF** the alarm system state changed to armed home, **THEN** perform a Webhook `POST` web request to url `https://HASS_URL/api/services/alarm_control_panel/ifttt_push_alarm_state?api_password=API_PASSWORD` with content type `application/json` and body `{"entity_id": "alarm_control_panel.DEVICE_NAME", "state": "armed_home"}`. +* **IF** the alarm system state changed to armed away, **THEN** perform a Webhook `POST` web request to url `https://HASS_URL/api/services/alarm_control_panel/ifttt_push_alarm_state?api_password=API_PASSWORD` with content type `application/json` and body `{"entity_id": "alarm_control_panel.DEVICE_NAME", "state": "armed_away"}`. +* **IF** the alarm system state changed to armed night, **THEN** perform a Webhook `POST` web request to url `https://HASS_URL/api/services/alarm_control_panel/ifttt_push_alarm_state?api_password=API_PASSWORD` with content type `application/json` and body `{"entity_id": "alarm_control_panel.DEVICE_NAME", "state": "armed_night"}`. + + +{% configuration %} + name: + description: The name of your Home Assistant alarm control panel. + required: false + type: string + code: + description: The code for the alarm control panel. + required: false + type: string +{% endconfiguration %} From 084d69cd98cc312c364833c361a90eb251474a84 Mon Sep 17 00:00:00 2001 From: Mattias Welponer Date: Sun, 18 Mar 2018 18:42:00 +0100 Subject: [PATCH 634/993] Add initial support fo HomematicIP components (#4850) * Add initial support fo HomematicIP components * :pencil2: Spelling updates --- source/_components/homematicip.markdown | 43 +++++++++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 source/_components/homematicip.markdown diff --git a/source/_components/homematicip.markdown b/source/_components/homematicip.markdown new file mode 100644 index 0000000000..c6e374ee09 --- /dev/null +++ b/source/_components/homematicip.markdown @@ -0,0 +1,43 @@ +--- +layout: page +title: "HomematicIP" +description: "Instructions for integrating HomematicIP into Home Assistant." +date: 2018-03-06 20:40 +sidebar: true +comments: false +sharing: true +footer: true +logo: homematicip.png +ha_category: Hub +ha_iot_class: "Cloud Polling" +ha_release: 0.66 +featured: false +--- + +The [HomematicIP](http://www.homematicip.com/) component platform is used as an interface to the cloud server. +For for communication [homematicip-rest-api](https://github.com/coreGreenberet/homematicip-rest-api) is used. + +To set up the component: + +- **generate the authentication token**: +```yaml +generate_auth_token.py +``` + +- ** add the information to your `configuration.yaml` file: + +```yaml +homematicip: + - name: NAME + accesspoint: IDENTIFIER + authtoken: AUTHTOKEN +``` + +Configuration variables (global): + +- **name** (*Required*): Name to identify your access point, this will be + used to prefix your device names. +- **accesspoint** (*Required*): This is the access point id (SGTIN) +- **authtoken** (*Required*): Authentification token generated with +`generate_auth_token.py`. + From 9cb25206d969c07040407ca24d5d6f94acd52d6e Mon Sep 17 00:00:00 2001 From: lolouk44 Date: Sun, 18 Mar 2018 17:53:39 +0000 Subject: [PATCH 635/993] Small comment added to expose_by_default (#4936) * Small comment added to expose_by_default It's not entirely clear that listing specific entities in entity_config is not enough to expose an entity if expose_by_default is set to false. (This is my first PR so I hope I've done it correctly) * :pencil2: Rewording in order to fix the build --- source/_components/google_assistant.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/google_assistant.markdown b/source/_components/google_assistant.markdown index 1e1b405b6f..b19e182e2e 100644 --- a/source/_components/google_assistant.markdown +++ b/source/_components/google_assistant.markdown @@ -71,7 +71,7 @@ api_key: required: false type: string expose_by_default: - description: Expose devices in all supported domains by default. + description: Expose devices in all supported domains by default. If set to false, you need to either expose domains or add the expose configuration option to each entity in entity_config and set it to true. required: false default: True type: boolean From df4739885a98911b3ff7d2bb6fe6a7c26c5a8219 Mon Sep 17 00:00:00 2001 From: Diogo Gomes Date: Sun, 18 Mar 2018 17:54:38 +0000 Subject: [PATCH 636/993] Added Time SMA (#4926) * Added Time SMA * bump version * update * :pencil2: Minor tweaks * :ambulance: Fixes/Restores ha_release tag * :ambulance: Corrected type --- source/_components/sensor.filter.markdown | 31 +++++++++++++++++------ 1 file changed, 23 insertions(+), 8 deletions(-) diff --git a/source/_components/sensor.filter.markdown b/source/_components/sensor.filter.markdown index 07f5b33e3a..5ce3132af1 100644 --- a/source/_components/sensor.filter.markdown +++ b/source/_components/sensor.filter.markdown @@ -15,7 +15,7 @@ logo: home-assistant.png The `filter` platform enables sensors that process the states of other entities. -`filter` applies a signal processing algorithm to a sensor, previous and current states, and generates a `new state` given the chosen algorithm. +`filter` applies a signal processing algorithm to a sensor, previous and current states, and generates a `new state` given the chosen algorithm. The next image depicts an original sensor and the filter sensor of that same sensor using the [History Graph]({{site_roor}}/components/history_graph/) component.

    @@ -37,6 +37,9 @@ sensor: - filter: lowpass time_constant: 10 precision: 2 + - filter: time_simple_moving_average + window_size: 00:05 + precision: 2 ``` Filters can be chained and are applied according to the order present in the configuration file. @@ -53,17 +56,17 @@ name: filters: description: Filters to be used. required: true - type: map + type: list keys: filter: - description: Algorithm to be used to filter data. Available filters are `lowpass`, `outlier` and `throttle`. + description: Algorithm to be used to filter data. Available filters are `lowpass`, `outlier`, `throttle` and `time_simple_moving_average`. required: true type: string window_size: - description: Size of the window of previous states. + description: Size of the window of previous states. Time based filters such as `time_simple_moving_average` will require a time period (size in time), while other filters such as `outlier` will require an integer (size in number of states) required: false - type: int - default: 5 + type: [int, time] + default: 1 precision: description: See [_lowpass_](#low-pass) filter. Defines the precision of the filtered state, through the argument of round(). required: false @@ -78,14 +81,19 @@ filters: description: See [_outlier_](#outlier) filter. Band radius from median of previous states. required: false type: float - default: 2.0 + default: 2.0 + type: + description: See [_time_simple_moving_average_](#time-simple-moving-average) filter. Defines the type of Simple Moving Average. + required: false + type: string + default: last {% endconfiguration %} ## {% linkable_title Filters %} ### {% linkable_title Low-pass %} -The Low-pass filter (`lowpass`) is one of signal processing most common filters, as it smooths data by shortcuting peaks and valleys. +The Low-pass filter (`lowpass`) is one of signal processing most common filters, as it smooths data by shortcutting peaks and valleys. The included Low-pass filter is very basic and is based on a moving average, in which the previous data point is weighted with the new data point. @@ -120,3 +128,10 @@ To adjust the rate you need to set the window_size. To throttle a sensor down to This filter is relevant when you have a sensor which produces states at a very high-rate, which you might want to throttle down for storing or visualization purposes. +### {% linkable_title Time Simple Moving Average %} + +The Time SMA filter (`time_simple_moving_average`) is based on the paper [Algorithms for Unevenly Spaced Time Series: Moving Averages and Other Rolling Operators](http://www.eckner.com/papers/Algorithms%20for%20Unevenly%20Spaced%20Time%20Series.pdf) by Andreas Eckner. + +The paper defines three types/versions of the Simple Moving Average (SMA): *last*, *next* and *linear*. Currently only *last* is implemented. + +Theta, as described in the paper, is the `window_size` parameter, and can be expressed using time notation (e.g., 00:05 for a five minutes time window). From 75ac42524467013b0091a22e93f23dacc5e376d6 Mon Sep 17 00:00:00 2001 From: Igor Motov Date: Sun, 18 Mar 2018 14:06:36 -0400 Subject: [PATCH 637/993] Fix Duck DNS configuration example (#4946) Adds certfile and keyfile to the lets_encrypt configuration example. Without these parameters hassio doesn't allow to save configuration. --- source/_addons/duckdns.markdown | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/source/_addons/duckdns.markdown b/source/_addons/duckdns.markdown index 297cbb8fd9..7994d84de0 100644 --- a/source/_addons/duckdns.markdown +++ b/source/_addons/duckdns.markdown @@ -15,7 +15,9 @@ featured: true ```json { "lets_encrypt": { - "accept_terms": true + "accept_terms": true, + "certfile": "fullchain.pem", + "keyfile": "privkey.pem" }, "token": "sdfj-2131023-dslfjsd-12321", "domains": ["my-domain.duckdns.org"] From 95d25a04acd39c9b08160a3af96dabd9cf319241 Mon Sep 17 00:00:00 2001 From: Siim Talvik Date: Sun, 18 Mar 2018 20:12:04 +0200 Subject: [PATCH 638/993] Added note to Owntracks about mqtt_topic parameter requirement for Zanzito usage (#4949) * Added note about mqtt_topic parameter change requirement for Zanzito usage * :pencil2: Minor updates --- .../_components/device_tracker.owntracks.markdown | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/source/_components/device_tracker.owntracks.markdown b/source/_components/device_tracker.owntracks.markdown index 1b945522aa..bda08ae2fc 100644 --- a/source/_components/device_tracker.owntracks.markdown +++ b/source/_components/device_tracker.owntracks.markdown @@ -13,11 +13,11 @@ featured: false ha_release: 0.7.4 --- - This platform allows you to detect presence using [Owntracks](http://owntracks.org/). OwnTracks allows users to track their location on iOS phones and publish it to an MQTT broker. This platform will connect to the broker and monitor for new locations.

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

    This component requires [the MQTT component](/components/mqtt/) to be set up and works very well together with [the zone component](/components/zone/). @@ -59,6 +59,7 @@ device_tracker: ``` ### {% linkable_title Using Owntracks with other device trackers %} + Owntracks can also be used with other device trackers, such as [Nmap](/components/device_tracker.nmap_tracker/) or [Netgear](/components/device_tracker.netgear/). To do this, fill in the `mac` field to the Owntracks entry in `known_devices.yaml` with the MAC address of the device you want to track. This way the state of the device will be determined by the source that reported last. The naming convention for known device list is `_` and could be set in app configuration. More details about this config can found in [device tracker](/components/device_tracker/). An example showing the inclusion of the `mac` field for multiple component tracking. The `mac` field will need to be added to the `owntracks` device and will enable tracking by all components that track via the `mac` address. @@ -73,7 +74,12 @@ USERNAME_DEVICE_ID: hide_if_away: no ``` +### {% linkable_title Using Owntracks with Zanzito %} + +To use the Owntracks component with Zanzito set the `mqtt_topic` parameter to `"zanzito/#"` + ### {% linkable_title Using Owntracks regions %} + Owntracks can track regions, and send region entry and exit information to Home Assistant (HA). You set up a region in the Owntracks app which you should name the same as your HA Zone, and then make sure to turn on the `share` option for the region in the owntracks app. Please see the [owntracks documentation](http://owntracks.org/booklet/guide/waypoints/). Home Assistant will use the enter and leave messages to set your zone location. Your location will be set to the center of zone when you enter. Location updates from OwnTracks will be ignored while you are inside a zone. @@ -81,6 +87,7 @@ Home Assistant will use the enter and leave messages to set your zone location. When you exit a zone, Home Assistant will start using location updates to track you again. To make sure that Home Assistant correctly exits a zone (which it calculates based on your GPS coordinates), you may want to set your Zone radius in HA to be slightly smaller that the Owntracks region radius. ### {% linkable_title Using Owntracks regions - forcing Owntracks to update using %}iBeacons + When run in the usual *significant changes mode* (which is kind to your phone battery), Owntracks sometimes doesn't update your location as quickly as you'd like when you arrive at a zone. This can be annoying if you want to trigger an automation when you get home. You can improve the situation using iBeacons. iBeacons are simple Bluetooth devices that send out an "I'm here" message. They are supported by IOS and some Android devices. Owntracks explain more [here](http://owntracks.org/booklet/guide/beacons/). @@ -92,6 +99,7 @@ When you exit an iBeacon region HA will switch back to using GPS to determine yo Sometimes Owntracks will lose connection with an iBeacon for a few seconds. If you name your beacon starting with `-` Owntracks will wait longer before deciding it has exited the beacon zone. HA will ignore the `-` when it matches the Owntracks region with Zones. So if you call your Owntracks region `-home` then HA will recognize it as `home`, but you will have a more stable iBeacon connection. ### {% linkable_title Using Owntracks iBeacons to track devices %} + iBeacons don't need to be stationary. You could put one on your key ring, or in your car. When your phone sees a mobile iBeacon that it knows about, it will tell HA the location of that iBeacon. If your phone moves while you are connected to the iBeacon, HA will update the location of the iBeacon. But when your phone loses the connection, HA will stop updating the iBeacon location. @@ -101,9 +109,11 @@ To use mobile iBeacons with HA, you just set up a region that doesn't match your This allows you to write zone automations for devices that can't track themselves (for example *alert me if I leave the house and my keys are still at home*). Another example would be *open the gates if my car arrives home*. ### {% linkable_title Using mobile and fixed iBeacons together %} + You can use iBeacons of both types together, so if you have a Zone `drive` with an iBeacon region called `-drive` and you arrive home with a mobile iBeacon called `-car`, then `device_tracker.beacon_car` will be set to a state of `drive`. ### {% linkable_title Importing Owntracks waypoints as zones %} + By default, any Owntracks user connected to Home Assistant can export their waypoint definitions (from the *Export - Export to Endpoint* menu item) which will then be translated to zone definitions in Home Assistant. The zones will be named `- - `. This functionality can be controlled in 2 ways: 1. The configuration variable `waypoints` can be set to `False` which will disable importing waypoints for all users. From 6f1c191baf4115cb54a5a501b0944e3fdffd23a6 Mon Sep 17 00:00:00 2001 From: Carlo Costanzo Date: Mon, 19 Mar 2018 07:10:15 -0400 Subject: [PATCH 639/993] Updated with new path. (#4957) --- source/_components/feedreader.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/feedreader.markdown b/source/_components/feedreader.markdown index 01a4874e64..de2dd64576 100644 --- a/source/_components/feedreader.markdown +++ b/source/_components/feedreader.markdown @@ -67,4 +67,4 @@ hass.bus.listen(EVENT_FEEDREADER, event_listener) To get started developing custom components, please refer to the [developers](/developers) documentation -For a drop in packaged complete example of Feedreader, you can use the [PodCast notifier](https://github.com/CCOSTAN/Home-AssistantConfig/blob/master/packages/hasspodcast.yaml). +For a drop in packaged complete example of Feedreader, you can use the [PodCast notifier](https://github.com/CCOSTAN/Home-AssistantConfig/blob/master/config/packages/hasspodcast.yaml). From bdf356794e8c4539ae5f24ae50fd271e5e05d196 Mon Sep 17 00:00:00 2001 From: Michael Wheeler Date: Mon, 19 Mar 2018 22:11:07 +1100 Subject: [PATCH 640/993] Updated addon_communication.markdown to remove gender (#4956) I don't think addons are gendered so I've replaced "his" with "its" --- source/developers/hassio/addon_communication.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/developers/hassio/addon_communication.markdown b/source/developers/hassio/addon_communication.markdown index be4f04dc08..254b0eb2e3 100644 --- a/source/developers/hassio/addon_communication.markdown +++ b/source/developers/hassio/addon_communication.markdown @@ -14,7 +14,7 @@ There are different ways for communication between add-ons inside Hass.io. ## {% linkable_title Network %} -We use an internal network that allows to communicate with every add-on, even to/from Home Assistant, by using his name or alias. Only the add-ons which run on the host network are a bit limited. These can talk with all internal add-ons by their name but all other add-on can't address these add-on by name - using an alias works for both! +We use an internal network that allows to communicate with every add-on, even to/from Home Assistant, by using its name or alias. Only the add-ons which run on the host network are a bit limited. These can talk with all internal add-ons by their name but all other add-on can't address these add-on by name - using an alias works for both! Name/alias are used for communication inside Hass.io. The name is generated using the following format: `{REPO}_{SLUG}`, e.g., `local_xy` or `3283fh_myaddon`. In this example, `{SLUG}` is defined in an add-ons `config.json`. If an add-on is installed locally, `{REPO}` will be `local`. If the add-on is installed from a Github repository, `{REPO}` is a hashed identifier generated from the GitHub repository's URL (ex: https://github.com/xy/my_hassio_addons). See [here](https://github.com/home-assistant/hassio/blob/587047f9d648b8491dc8eef17dc6777f81938bfd/hassio/addons/utils.py#L17) to understand how this identifier is generated. Note that this identifier is required in certain service calls that use the [Hass.io add-on API](hassio-addon-api). You can view the repository identifiers for all currently installed add-ons via a GET request to the hassio API `addons` endpoint. From 459f6a21a283027e7e510dc73f30e4726911dd1f Mon Sep 17 00:00:00 2001 From: DubhAd Date: Mon, 19 Mar 2018 11:13:04 +0000 Subject: [PATCH 641/993] Tweaked automation (#4954) Tweaked last automation - removed `-` for consistency with other examples --- source/_docs/scripts.markdown | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/source/_docs/scripts.markdown b/source/_docs/scripts.markdown index 37d13d8507..06836372ad 100644 --- a/source/_docs/scripts.markdown +++ b/source/_docs/scripts.markdown @@ -164,9 +164,9 @@ The following automation shows how to capture the custom event `event_light_stat platform: event event_type: event_light_state_changed action: - - service: notify.notify - data_template: - message: "kitchen light is turned {{ trigger.event.data.state }}" + service: notify.notify + data_template: + message: "kitchen light is turned {{ trigger.event.data.state }}" ``` {% endraw %} From 17e85edf3673903bf8387a4c4499f79c2346ad7c Mon Sep 17 00:00:00 2001 From: DubhAd Date: Mon, 19 Mar 2018 11:13:35 +0000 Subject: [PATCH 642/993] Tweaked automation (#4953) Added automation: at the start, for consistency with our other examples --- source/_docs/automation/condition.markdown | 1 + 1 file changed, 1 insertion(+) diff --git a/source/_docs/automation/condition.markdown b/source/_docs/automation/condition.markdown index 78f396fa67..cae9f96a97 100644 --- a/source/_docs/automation/condition.markdown +++ b/source/_docs/automation/condition.markdown @@ -17,6 +17,7 @@ The available conditions for an automation are the same as for the script syntax Example of using condition: ```yaml +automation: - alias: 'Enciende Despacho' trigger: platform: state From 491cee2892a9e0af0e7798dbe853ca7252963131 Mon Sep 17 00:00:00 2001 From: DubhAd Date: Mon, 19 Mar 2018 11:14:14 +0000 Subject: [PATCH 643/993] Tweaked automations (#4951) Added comment about why we don't use `-` before the first `service:` line. Removed the `-` from the last example's service_template --- source/_docs/automation/examples.markdown | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/source/_docs/automation/examples.markdown b/source/_docs/automation/examples.markdown index 9e28e0b3e7..2e2ade256f 100644 --- a/source/_docs/automation/examples.markdown +++ b/source/_docs/automation/examples.markdown @@ -38,6 +38,7 @@ automation: after: '16:00:00' before: '23:00:00' action: + # With a single service call, we don't need a '-' before service - though you can if you want to service: homeassistant.turn_on entity_id: group.living_room @@ -76,9 +77,9 @@ automation: event_data: entity_id: binary_sensor.cube_158d000103a3de action: - - service_template: notify.pushover - data_template: - title: "Cube event detected" - message: "Cube has triggered this event: {{ trigger.event }}" + service_template: notify.pushover + data_template: + title: "Cube event detected" + message: "Cube has triggered this event: {{ trigger.event }}" ``` {% endraw %} From 07aec2ca9dcfcca581496d61ec9ec7f7c75d3cac Mon Sep 17 00:00:00 2001 From: DubhAd Date: Mon, 19 Mar 2018 11:23:10 +0000 Subject: [PATCH 644/993] Updated GPS tracker list (#4952) Reworded, and included GPS Logger in the list of zone trigger related components --- source/_docs/automation/trigger.markdown | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/source/_docs/automation/trigger.markdown b/source/_docs/automation/trigger.markdown index b6a9a283a0..748ff6313d 100644 --- a/source/_docs/automation/trigger.markdown +++ b/source/_docs/automation/trigger.markdown @@ -78,7 +78,8 @@ automation:

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

    ### {% linkable_title State trigger %} @@ -182,7 +183,7 @@ automation 3: ### {% linkable_title Zone trigger %} -Zone triggers can trigger when an entity is entering or leaving the zone. For zone automation to work, you need to have setup a device tracker platform that supports reporting GPS coordinates. Currently this is limited to the [OwnTracks platform](/components/device_tracker.owntracks/) as well as the [iCloud platform](/components/device_tracker.icloud/). +Zone triggers can trigger when an entity is entering or leaving the zone. For zone automation to work, you need to have setup a device tracker platform that supports reporting GPS coordinates. This includes [GPS Logger](/components/device_tracker.gpslogger/), the [OwnTracks platform](/components/device_tracker.owntracks/), and the [iCloud platform](/components/device_tracker.icloud/). ```yaml automation: From 1103c07589fc320f133b43abea376af7ce28fead Mon Sep 17 00:00:00 2001 From: DubhAd Date: Mon, 19 Mar 2018 11:25:19 +0000 Subject: [PATCH 645/993] Updated the note about initial_state (#4950) In the note box, the formatting was lost. Tweaked wording slightly too. --- source/_docs/automation.markdown | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/source/_docs/automation.markdown b/source/_docs/automation.markdown index 8eb4124183..e50db5d9bf 100644 --- a/source/_docs/automation.markdown +++ b/source/_docs/automation.markdown @@ -47,14 +47,12 @@ State changes can be used as the source of triggers and the current state can be Actions are all about calling services. To explore the available services open the Services developer tool. Services allow to change anything. For example turn on a light, run a script or enable a scene. Each service has a domain and a name. For example the service `light.turn_on` is capable of turning on any light in your system. Services can be passed parameters to for example tell which device to turn on or what color to use. -

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

    From 40602962f4f5aab59c5c6b6c44f33b2d2b0d071b Mon Sep 17 00:00:00 2001 From: Adam Mills Date: Mon, 19 Mar 2018 08:14:44 -0400 Subject: [PATCH 646/993] New hue/sat field on light.turn_on schema (#4881) * New hue/sat field on light.turn_on schema * :pencil2: Small language corrections --- source/_components/light.markdown | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/source/_components/light.markdown b/source/_components/light.markdown index 4370674890..39ace8da60 100644 --- a/source/_components/light.markdown +++ b/source/_components/light.markdown @@ -19,26 +19,27 @@ The light component supports multiple entries in configuration.yaml Turns one light on or multiple lights on using [groups]({{site_root}}/components/group/). -Most lights do not support all attributes. You can check the platform documentation of your particular light for hints but in general you will have to try things out and see what works. +Most lights do not support all attributes. You can check the platform documentation of your particular light for hints, but in general, you will have to try things out and see what works. | Service data attribute | Optional | Description | | ---------------------- | -------- | ----------- | | `entity_id` | no | String or list of strings that point at `entity_id`s of lights. Else targets all. | `transition` | yes | Number that represents the time (in seconds) the light should take to transition to the new state. -| `profile` | yes | String with the name of one of the [built-in profiles](https://github.com/home-assistant/home-assistant/blob/master/homeassistant/components/light/light_profiles.csv) (relax, energize, concentrate, reading) or one of the custom profiles defined in `light_profiles.csv` in the current working directory. Light profiles define a xy color and a brightness. If a profile is given and a brightness then the profile brightness will be overwritten. -| `xy_color` | yes | A list containing two floats representing the xy color you want the light to be. Two comma separated floats that represent the color in XY. -| `rgb_color` | yes | A list containing three integers representing the rgb color you want the light to be. Three comma separated integers that represent the color in RGB. You can find a great chart here: [Hue Color Chart](http://www.developers.meethue.com/documentation/hue-xy-values) +| `profile` | yes | String with the name of one of the [built-in profiles](https://github.com/home-assistant/home-assistant/blob/master/homeassistant/components/light/light_profiles.csv) (relax, energize, concentrate, reading) or one of the custom profiles defined in `light_profiles.csv` in the current working directory. Light profiles define an xy color and a brightness. If a profile is given and a brightness then the profile brightness will be overwritten. +| `hs_color` | yes | A list containing two floats representing the hue and saturation of the color you want the light to be. Hue is scaled 0-360, and saturation is scaled 0-100. +| `xy_color` | yes | A list containing two floats representing the xy color you want the light to be. Two comma-separated floats that represent the color in XY. You can find a great chart here: [Hue Color Chart](https://developers.meethue.com/documentation/core-concepts#color_gets_more_complicated). +| `rgb_color` | yes | A list containing three integers between 0 and 255 representing the RGB color you want the light to be. Three comma-separated integers that represent the color in RGB. Note that the specified RGB value will not change the light brightness, only the color. | `white_value` | yes | Integer between 0 and 255 for how bright a dedicated white LED should be. | `color_temp` | yes | An integer in mireds representing the color temperature you want the light to be. | `kelvin` | yes | Alternatively, you can specify the color temperature in Kelvin. -| `color_name` | yes | A human readable string of a color name, such as `blue` or `goldenrod`. All [CSS3 color names](https://www.w3.org/TR/2010/PR-css3-color-20101028/#svg-color) are supported. +| `color_name` | yes | A human-readable string of a color name, such as `blue` or `goldenrod`. All [CSS3 color names](https://www.w3.org/TR/2010/PR-css3-color-20101028/#svg-color) are supported. | `brightness` | yes | Integer between 0 and 255 for how bright the color should be. | `brightness_pct`| yes | Alternatively, you can specify brightness in percent (a number between 0 and 100). | `flash` | yes | Tell light to flash, can be either value `short` or `long`. | `effect`| yes | Applies an effect such as `colorloop` or `random`.

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

    ```yaml From 13ac22cb087c230fd5a449ed54cf3bfb2a32372e Mon Sep 17 00:00:00 2001 From: nielstron Date: Mon, 19 Mar 2018 13:25:51 +0100 Subject: [PATCH 647/993] Syncthru Printer description (#4707) * Added syncthru platform description * Spelling * Cleaned up the code * Clarified configuration entry * Updated version, removed logo * :art: Added existing logo * :pencil2: Small fixes * :arrow_up: Sets ha_release * Add description for every single key * :ambulance: Removed duplicate endconfiguration tag --- source/_components/sensor.syncthru.markdown | 89 +++++++++++++++++++++ 1 file changed, 89 insertions(+) create mode 100644 source/_components/sensor.syncthru.markdown diff --git a/source/_components/sensor.syncthru.markdown b/source/_components/sensor.syncthru.markdown new file mode 100644 index 0000000000..19b2e5d139 --- /dev/null +++ b/source/_components/sensor.syncthru.markdown @@ -0,0 +1,89 @@ +--- +layout: page +title: "Samsung SyncThru Printer" +description: "Instructions on how to integrate a Samsung printer providing SyncThru within Home Assistant." +date: 2018-02-19 23:33 +sidebar: true +comments: false +sharing: true +footer: true +logo: samsung.png +ha_category: Sensor +ha_iot_class: "Local Polling" +ha_release: 0.66 +--- + +The Samsung SyncThru Printer platform allows you to read current data from your local Samsung printer. + +It usually provides information about the device's state, the left amount of ink or toner and the state of paper trays. +The platform automatically monitors every supported part. + +If you wish not to include certain monitored values specify the values that you would like to see in the front-end via the `monitored_conditions` setting. + +```yaml +# Example configuration.yaml entry +sensor: + - platform: syncthru + resource: http://my-printer.address + name: My Awesome Printer + monitored_conditions: + - toner_black + - output_tray_0 +``` + +{% configuration %} + resource: + description: The address for connecting to the printer. Equal to the SyncThru Webservice address. + required: true + default: false + type: url + name: + description: A user specified name for the printer. Defaults to "Samsung Printer" and the friendly name will be the name of the printer model. + required: false + default: Samsung Printer + type: string + monitored_conditions: + description: Conditions to display in the frontend. + required: false + default: all values + type: list + keys: + toner_black: + description: Black toner fill level + toner_cyan: + description: Cyan toner fill level + toner_magenta: + description: Magenta toner fill level + toner_yellow: + description: Yellow toner fill level + drum_black: + description: Black drum state + drum_cyan: + description: Cyan drum state + drum_magenta: + description: Magenta drum state + drum_yellow: + description: Yellow drum state + tray_1: + description: First paper input tray state + tray_2: + description: Second paper input tray state + tray_3: + description: Third paper input tray state + tray_4: + description: Fourth paper input tray state + tray_5: + description: Fifth paper input tray state + output_tray_0: + description: First paper output tray state + output_tray_1: + description: Second paper output tray state + output_tray_2: + description: Third paper output tray state + output_tray_3: + description: Fourth paper output tray state + output_tray_4: + description: Fifth paper output tray state + output_tray_5: + description: Sixth paper output tray state +{% endconfiguration %} From 8919dea6c822c3eb7020364898d6fd73250119c5 Mon Sep 17 00:00:00 2001 From: Robin Date: Mon, 19 Mar 2018 14:50:04 +0000 Subject: [PATCH 648/993] Update py34 to py36 Since py34 is no longer supported --- source/developers/development_testing.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/developers/development_testing.markdown b/source/developers/development_testing.markdown index 14dcf03c57..a4f462690d 100644 --- a/source/developers/development_testing.markdown +++ b/source/developers/development_testing.markdown @@ -16,7 +16,7 @@ $ tox ``` **Important:** Run `tox` before you create your pull request to avoid annoying fixes. -Running Tox will run unit tests against the locally available Pythons, as well as validate the code and document style using `pycodestyle`, `pydocstyle` and `pylint`. You can run tests on only one tox target -- just use `-e` to select an environment. For example, `tox -e lint` runs the linters only, and `tox -e py34` runs unit tests only on Python 3.4. +Running Tox will run unit tests against the locally available Pythons, as well as validate the code and document style using `pycodestyle`, `pydocstyle` and `pylint`. You can run tests on only one tox target -- just use `-e` to select an environment. For example, `tox -e lint` runs the linters only, and `tox -e py36` runs unit tests only on Python 3.6. Tox uses virtual environments under the hood to create isolated testing environments. The tox virtual environments will get out-of-date when requirements change, causing test errors. Run `tox -r` to tell Tox to recreate the virtual environments. From 7259f09e874626d3c1a1554b6bb6527eaa603231 Mon Sep 17 00:00:00 2001 From: Shaun McCloud Date: Mon, 19 Mar 2018 12:41:25 -0500 Subject: [PATCH 649/993] Update device_tracker.owntracks.markdown --- source/_components/device_tracker.owntracks.markdown | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/source/_components/device_tracker.owntracks.markdown b/source/_components/device_tracker.owntracks.markdown index bda08ae2fc..2fcc141c29 100644 --- a/source/_components/device_tracker.owntracks.markdown +++ b/source/_components/device_tracker.owntracks.markdown @@ -16,8 +16,9 @@ ha_release: 0.7.4 This platform allows you to detect presence using [Owntracks](http://owntracks.org/). OwnTracks allows users to track their location on iOS phones and publish it to an MQTT broker. This platform will connect to the broker and monitor for new locations.

    -The Android app for OwnTracks is no longer developed or supported, Zanzito is a drop in replacement for OwnTracks MQTT. -See Instructions +The Android app for OwnTracks is no longer developed or supported, Zanzito is a drop in replacement for OwnTracks MQTT. + See Instructions +As of February 2018 it appears that development of the Android app for OwnTracks is being done again. It is currently in beta status and a direct play store link is https://play.google.com/apps/testing/org.owntracks.android

    This component requires [the MQTT component](/components/mqtt/) to be set up and works very well together with [the zone component](/components/zone/). From c5f2f5770f52e34cdfddecf00ee0ecfd402ab3fc Mon Sep 17 00:00:00 2001 From: Qxlkdr <33372537+Qxlkdr@users.noreply.github.com> Date: Mon, 19 Mar 2018 22:08:38 +0100 Subject: [PATCH 650/993] Add Trafikverket WeatherStation documentation (#4562) * Create sensor.trafikverket_weatherstation.markdown.markdown * Add trafikverket.png trafikverket.png used for trafikverket_weatherstation sensor platform. * api_key Updated from api to api_key due to CONF_API_KEY. * Removed text Removed text which I used on GitHub for the custom component. Now needed to have for the official release. * Example picture Added an example picture to better understand how to get the weather station. * Added example picture Added an example picture to better understand how to get the weather station. What the user needs to copy and add to the YAML file. * Added usage information Added examples of the usage (why needing the data). * linkable_title Changed from normal titles to linkable_title in order to follow the documentation standards. * Updated based on feedback Done - Rewrote "Usage" into "Potential use cases" - Linked to Trafikverket homepage - Description instead of static links * Configuration variables Updated to use "{% configuration %}" instead of "Configuration variables" as plain text. * HA release 0.64.0 Updated ha_release to 0.64.0 instead. * HA release 0.65.0 Updated ha_release to 0.65.0 since it wasn't merged in 0.64.0 release. * :pencil2: Tiny improvements * ha_release and note Updated ha_release to 0.66.0 and removed a note about using secrets.yaml for all your API keys, usernames and passwords. --- ...ensor.trafikverket_weatherstation.markdown | 86 ++++++++++++++++++ ...t_trafikverket_weather_station_example.png | Bin 0 -> 159671 bytes .../images/supported_brands/trafikverket.png | Bin 0 -> 30431 bytes 3 files changed, 86 insertions(+) create mode 100644 source/_components/sensor.trafikverket_weatherstation.markdown create mode 100644 source/images/screenshots/get_trafikverket_weather_station_example.png create mode 100644 source/images/supported_brands/trafikverket.png diff --git a/source/_components/sensor.trafikverket_weatherstation.markdown b/source/_components/sensor.trafikverket_weatherstation.markdown new file mode 100644 index 0000000000..76885964f3 --- /dev/null +++ b/source/_components/sensor.trafikverket_weatherstation.markdown @@ -0,0 +1,86 @@ +--- +layout: page +title: "Trafikverket WeatherStation" +description: "Instructions how to integrate Trafikverket WeatherStation within Home Assistant." +date: 2018-02-01 12:06 +sidebar: true +comments: false +sharing: true +footer: true +logo: trafikverket.png +ha_category: Sensor +ha_release: 0.66.0 +--- + +Showing weather information for air and road temperature provided by [Trafikverket](https://www.trafikverket.se/) in Sweden. + +Potential use cases: +- Get weather data in general +- You live near a weather station and want to know the current temperature at home +- Setup automations for your car heating system. If the road is frozen along the way to work, you might want the car heating system to start earlier. + +##### {% linkable_title Configuration %} + +To enable this sensor, add the following lines to your `configuration.yaml`. + +```yaml +sensor: + - platform: trafikverket_weatherstations + name: Trafikverket Road WeatherStation Kungälv + api_key: eXXcbXXXacXXXXc39XX3aXXX4aXX46XX + station: Kungälv + type: road +``` + +{% configuration %} +name: + description: Unique name of the device in the frontend. + required: true + type: string +api_key: + description: API key from Trafikverket. + required: true + type: string +station: + description: Name of the weather station. + required: true + type: string +type: + description: Defines which temperature you want (`air` or `road`). + required: true + type: string +scan_interval: + description: How frequently to query for new data (in seconds). + required: false + type: int + default: 300 +{% endconfiguration %} + +##### {% linkable_title Obtaining API key %} + +Please click [here](https://api.trafikinfo.trafikverket.se/) and register to obtain the API key. + +##### {% linkable_title Weather stations %} + +Click [here](https://www.trafikverket.se/trafikinformation/vag/?TrafficType=personalTraffic&map=1/606442.17/6886316.22/&Layers=RoadWeather%2b) to get a map of valid weather stations. Once a station is found, copy the name according to the below picture and paste it in your `configuration.yaml` file as the `station` variable. + +

    + +

    + +##### {% linkable_title Examples %} + +```yaml +sensor: + - platform: trafikverket_weatherstations + name: Trafikverket Road WeatherStation Kungälv + api_key: eXXcbXXXacXXXXc39XX3aXXX4aXX46XX + station: Kungälv + type: road + - platform: trafikverket_weatherstations + name: Trafikverket Air WeatherStation Lanna + api_key: eXXcbXXXacXXXXc39XX3aXXX4aXX46XX + station: Lanna + type: air + scan_interval: 600 +``` diff --git a/source/images/screenshots/get_trafikverket_weather_station_example.png b/source/images/screenshots/get_trafikverket_weather_station_example.png new file mode 100644 index 0000000000000000000000000000000000000000..fd0d7535fe13afd5f1286efaf4d6c2bab31d1d71 GIT binary patch literal 159671 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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⪻zrGky4lRqjEo4^O=_CV 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 _bacQtbhc~-PGV(3oHGy876 zmj>D~^7d0~6v{JYkML~dNeFa7^CM>WmGo9slLMurZmiS62N4@7NI!q$ zqhnlscNDBfdkRPD)vK5??~_#Dz%!KI)Ymn&F|jz2>jxth6g)p|Ipix8<$yr7L>%2o2lTDs4JPYI#;Dex*W?N&dKi@Nk{ zW0XZm7K7*t&1Gp19t@8 z3P$-~i%om4dOGgO*Tqz%6u*#Q;xeHXaLK|Z7}*d|L}Fhxv>w&qQVt6(_jaVu`IDyK zh_PiXq@a^syHhGKuj;r#Oqmya;;Cm{3E0V3p6!{O{1*I*QafuR2*eR~=9=iRL7MmU zGGc*Tw$ZpDNyj;c;?S2A!UQ;Wftco6K6>y7tYRix+bC!T(2bjv zhKM%6Mx}J(j~*xWZd7jcyMRYxBDdcTR5w1{M-k85LS61KeYf2f-EN~xy;`=KbSn7t zEBNZ9%FTMzSA^vr#PrEhbF}jFSGAHQ^H=J`pBM{u@ZS1UQzr)oG84mK>77v-oni5{ zFC60<_=@zJJPf~j=N6qp%Qid~$0k>g8eX!aDknX5n_8~s+!4)ISsRdz^rF&wd-bZD ze+gH}+sXV}BW6e#%XBP+Qr$SLwD#I=eD};gEeg6E)JLi%VUgv6w96N3*|^H*acXqA z^!LBq$lHzHOTOA~wpz8zHBJA=&ig9Oi>*<>M%i(8XIi@#uiE-NLza92HT%zu2z7yR z>7WYB`w+oBvlfiq=Sm*ob%ITIK}(sQlQZ#og-^61qmFDZEl2 z5>vL-rIX&5_{+Di$7N@sXA&%97cdct8>W$_YF23Pv(x?Q{r7ic?sv$LCiVRxnnm@Q z_wfGV#JZ(-DOvDFQ-=ME_vtOlY<{a`gpWon3tD_9j0CGEwUkJpAAPoj#8mnnUr}Y% z*)Gm-?xwg-uYw}ozwq_n)h8zwv`{ECu~)=O3+xhjvsTg!%bdMAs>ykM)|hl)oOnBh z4x&^~y=~9BTE5Ud_;vCxI}dc(21-T%hX1ZXDa3F8yKvC$_&CUWzh*>fp@U&Dp^<&f zufhCU#jAzUvuEpLeC-Wg1=R3BgPf81nC(m1XUSaeh&7a!de+HJ;x5fbvt_-@-FRL@ zri@p;zgq#qeBCF}%92z~%aP;UJ&Xd<$4m0#1IE5>uDc@dcG0zgYgp9> zth!a@4wYar-_Ez_OZEr~op24ys-g%5DbolzFZqmUsiu^9W$kF_C>}+&IqK0eoKi9R>T#ovOtwJzYLY}WL_?{ARr>vFT)!qI2oFL#=n!x0Z-jSZXQp}2#J=rI|MS$|Kh!q>mXss|E@ z-;md(+n_+F%!Dq;@Io)x4`;Q#(^Glx!*|I)=c%%YPUichC^uot2Be#$~s==xol}R4y9gc{aiNOuEq0i$_vk@ zpdM`dF}LNHJK9dgu%^>EW2G8|@FGQae93sVq=bMs=F?1y66#2>{%gMgH9PJLo-QXy zD4%=eR1-W*-!Lng&4JUu#>R&six|BgXWZN?w{4zz&Nx-zWhe5(O>gA_ou(mR&mr}G zCqG`M*>mXiYCmJ$dcBD8C9{*`VEjpiyC-VMP6L$#owY8l_&#iJeg!?28V9%R zzstO^LWCK5b5k+;ePD&|o*gvRNbk}~sSl}hHEHrLckaG;R=z(Z7VIu_h&nDWa%W%p z%f{f*8F+-BHRlcyVDLX)9>=^Y5lsSbLdxO(JIf4oAZqpK{q)-%tE`Nr7W9(SAl+~` z|98>sYT_RYpF?MNF2A;!C?W`_@N5rPSU>bdFjbb~RJfXCG}%u+VNHo8z2GHhrHVYY zru?~W7cmo2)ia&AX6bwG`aQft^buh*;$3~{f_!!2<|E2bEeaY+CHEgp?!Ta8RFsBG z@?%cvW-M>L-m#dTJ-7Y_?Viv{D{`wMNjprc&R%hhK)HupU@`af_F03X@EiAEZqEd=T*=Kk(Gh!e0N-<}UdOIb^Lyp(zucG+f_ zm5Ow`lP`L=!!UmOH#o|%>8x!t6Q412Z{f7JYPCGF>{*B#CGh}3rH<&=aBY_IW&7JW zI+Xq-_ETKr1n z4ghKwo3>`aI49|1Gvzq$GheFamdy2VuFFZbpHx$n3!oFxe-#;Xgigy=zsJQ+U%1q} zFGu93N7l{OQa3n{I~2n{Obja?iiz1LOSy672~?MpmIqD+rw$<&-kvHWo9WqUf?R=z z;%h%L8ixc8oD;jFmr0~x?dBg~C2YeZ1$Fw!(VHFFnmWh3KOH0Z1>o<|^OD8!A>EHE zK*ysFG72+WW)l4o)f24LQ`{Nv=`Dux1yj~%!@qkh`h|@~=Y)-v*<21t?wbs@bgIb| zY=F8iCG97{B)#tC>@79ykH(R`>tezlr@b{zYd`*`@67ehh0XTOd|%P<+4tD1s6Rv@ z(WNi*onjJ98JvO)u7B%;GWQUk8&wugaphVyAlk*bPGa`GUk*1RrQSh(5#3>X$N5z{ zqNzBO(sj>>2y+)dGl)5eZb$1)TRkz0dFhQsBN?-6;akOLng5!==HfwGc^FM^iInN; zX7(raqUXOPd%C%bpx7iwFZ)yt$p7XVY|Ng4cD!*0|3{Xu;QKeWU;@y&WxT)H$x*rA z>fCe>mAGWw7ZA(Q`S;Et5Xc;zvAE?OZs9X(Nqu$EH&qZG;lP_MZ8||?nyGges%i%s z@p&=p+UR|F)OM@Zm*tWy4>j94I~XeRo{KxPR`j)xE^t!1(AN}AbP)dGeyU(i$5T9x zE4VsuVPz2R=F$MJwfT(?_FNlq|1HXh6=-owuQ7fj?-qME7STbhkfzv^Q#vt zY9nKObBzA#D|j_(nWTC+@iwM0IV`$MGXZfgse~dbR#|?Hcf%}S+}LkLpFZBfISF;> z>mXEhI?Ql25T}T{J$xCq|Jo={QGFwhrn%gM9B*|iQNB7g8Xo^PDuMpTltF_C%j>hw z(0s*%*ZN_T9UQp;V$irxA-jhr89G{yc~J`?Ht5G#=Fo z2Mm$$SUYtEh7Vx8bBYG|2Hlz+4JWS|LANddVHmA$o^+8Y9j&=Rm7QL9#2T9%v;1=( zf7f#Px2|e<;i;+J#G7YlNFC#l_tQi(#qPY6ot0$*n_R>EUT|5;arwyeeq_5PCknN97%0SW#m z`R_&998Q&+hxE;;d$dxBewO6yW1S`_jJ&8EsL@fLG)rf<{P3P;gJ!zh%0B|LTqV0rEGTynl<<}Ubl=+ex*8x)H=IfH-F-2 zt^3yR8GB@V!8<5|y;EgTuTFY}wBm+YOm|;zp5rhdWR%m?fiC@Gbkyh99BHbG{MwaU zECWyqAK%p)sl*h`>+8Ko9gTbOPN6QAhUXkJql_53=POA(=KTh)xlY0Z1zPq_Yt+`Y z&alt+PbY}g=ME}X#WIy3D@$)GW-G{xwJyZ=bek6R{%$Dg^UZg2%r`?`K`V-42iv=j0rB;sMvL7eo|#gJ~fTzw5YD<>XY?) zt>mRDcixo(od_-&w!9&4rl8%g06m^+B;ncW{2R`^xWe5%3(Fwxo%$!lyGnXp!EJgb zXEFRwRCGdU6*V+!Ew%Jm|7N@Y!55JTU*(&=Uy+?L1{LPV?BQ8Hg4;2X=HGu4b;aDc zP7JAe#~Hb#HNF3hzwqQRpFxJKrrI&^1ePD9CTh%Tp#`)*C(vAU=`=N;p9IgU=wFbW zIB*DE2F|KPNSZ-T7mpCLDAH#aW5>Z@Klo*X|CN)B%eL9V&E7`1L>96kWRAlz;_CTR z=w*|X_#1B#&t03Mnwk&>ey!(GQJG+6^8u}eT5C0fG{!2$e{=|y3-&FLiuM>SbJVjc z6kjP}S7CX+Ld0{HII^!M_Ho*0zrKb#_A$l|l$9TaOczFN(OnF^(T1Xbylts9=*^sv zZL;97n(x+b?DaedCzz&D=>Z5}I2AbkLFr-PnK~x)`rGpOzb#c} z-XZ2AD zpHRaRqJ(sq^Olr3OFl(8tQ?Y<<$T(qq$G1bH;0O%oDZ4fR$|E6oHmEadCp^IW}Dx> zzkl!lcJFcD_xp9duIqZT06jZBrb3hX*&~e43f@`^@$Qgbhp>%Rx)|;I*!cA88NCh^ zS5(LXp|x4y4n7uu2^-D*{q4yOxyrr4Wb0|VtC$R)&d>QAOgRbpv`!hS``(`LsmoKNE| zE;&DT$;LYpa;eLe8&S^ zbmr`~G$AClKwp2#{Z-cwg%yb?aAvYjeGZE~@^EX_X0`8uJ$?2Yg09_n2 zmg{^SWkx!O#B#@u3gx3v)EQea+n%h>?cbfN<>&1Eg=C6Upw;pqR>2zU2_0*c`}Q%O z84Zp1g5$?du=K~(=&q=NU-nvE&X-RnMHT!rFYiar4*W6PjJ})udL_iC&lVK zt6O@tLY6Eg?rIBeD43HFB0lo?LZY+!dghe>s)1SE7U7_`|p*XQ;U#0w_l` zv?%3UZKM?GDlThD}Au!bj& zFhvX}&|PUl3O6$R$}&_QtF3VDPespDJwoza518p{i7`^$sZpFdY~7UlGhyckn0_8z z2wlk``Mtg%bxnxpS(>=^|%sb8B>~_-wb)PlW zSY7T%`ieSDCo80hG&~olSGSW=MY%8%Uy9lHpu%*LkA1zpnFdIjTnWgWRxIg)QN}c zWlXb@8Xv3o8O|l4mkNtcx_BL3JlMcu)TBXo#u?cnsewa-Pm1D3u#i|!#9t++zgv>t z+~Lw3X`iF$aeX{! z3C{0C7Oiz$P&1!Cb~_#F2zA?1tiYEPouu3}151q(rmp4e{o#h6;l}6KUr@g=mK}&Y zn~nSXV5FS)$??b50(d+6)xozow(a;%+v0ViPxOxh`;d~i>^BZXIG9{~?Cpu-g6_D_a zEN*M%js@Oal&nvW57mhE`z3*U*T`*sEiei;e-)AIN^y_cm3|3y@vB%Bk!mO_gIk&^ zc!6M?Q`u<0OZ0_#%>rn=p!UW*FxMK7c8PK?n&$o|!gw?)O5O2@-Kf3ogXR55(C!2i zYPSx59d4Mr;nxq+oM?0q1VT5Xrvx71Yo(36$1?O-&N)_qj}SU-x4dFU%Ee3VRDIvG z93=l!C^EUx>lXicT-%ymzs$7M)<$i84eJQFh?(3Dpsl~%`E44~?|2-tuPIo)R2JF{=8Z|%tcPb8GPQSGP zh|ku3pkxycw=q#x`}{83)$ZPH=0}Sjf*mE{XXdTG^tN_2b+KNOmG?y&{2dz6{3cpt z>QoPV>T36!^t-HqO-GsLn-})P3MEz5y)3DXDjGme8z3iQrMNz+T8kq7x~6T0SbozF z`k=_VL2=}pt8oAQ5^_7DuFP_E=cCj|Es{nAH;!Rz^?C8U3rGiY;);WO`5t{(|C9zUzn*Z<&9u7zt1rMuNQxJQU`lJeeGujQXy zWCQAzdUU`BEB7Ay((aeGFTBcb&4;WGjMEK};d}K%`9LD$52INPg7#SdWs$8ct<-pI z?Ur{%tFObmqdlbOuc?<4WAZY({5R&4mG|$I<%d-<7ivxos5a!~T2-tz7iUAN%*U8n z@4}ko!;opm2d%mOEiy6fr_1NT)w?(s=gSgq>K9Dm*PXoLY0A6S8_uV6)795ZJ5wUg zdu+OZ*?}9Ivmz!fBVD3=DcHXQxcaGSOs0GTlO(JWkKk8`4$yl~8$Qb{tHNs)=#Qfq2}!D4W+ z0s3W*qMP3#;!a6KIRURc#KkJ^{q%M*FoRHc7e^s;Y~R=%|HJvKs8^Zw4<}l-&*Vm$ z7-b+#Cn9C5|01ukRaYh7+Y3fSD!-XbZlTp+IE%$17O>jcUvxf{u#T{5Gz|6+Sp!f0nMMhBTI)?=sscIxP&nWLg? zeXp>=c170nR@j!j(uH!?d7CMKy~6}S_gLMX zsY6;M@9a~%T`eQ-mXwDjL4E?JL=ok-VuG~*@0(NX)J9f$J0Fe2+HF)tf8rSTN>#OI z2%C&*o*y4(8Gm3aE(ucdOPj*EM89i2>=<~JcB&UhXr(w|(aK$0{Rb|nJa#jUrbwq@ zA3wwpCJQS#6OUorFYPbDcKheQ4mZw)J7%7^ycU%9QPFwt)|`ia-s)ZMR-x@$`h%4j zBX+}7VH!-AW*d1hX9T>mCxY2fLO=H|zWJ9B=AC1y_ZNpTl+fb+=^73Ek*)L~DVW9@ zB-z1Zp|W8}DnC8?MQ&rcM|L{ccdc^!?nJ}phY*_)2eFe_+{eIYf9W4xy_(9FpyuMG~Jw$N!_J5NulT4puVU3hWn>1BpWwIazqN(8$j?MhF+b7Rz0A5{$Llfy%prR3LA-eo z&2J59w-My__gf08eOPY&(@LC$(3kN<}sfn(2dy}w)sjT4qFHc zrf#kdFt@Z|KjHt^pY%=1N=T-R=D)%#eBI5?#LujVNOHO;ir}ynR2WZdQY)m8w8;&PnJ+=lzGJFlyOe%u>(@PF%Om!OF6Ed9Rzx*dGmnw9 z;{0sSd*{Xi0yM*vIxxd40Z*R}+8RoieGjbIKf|_@#DlbXI~{S_gG$~4g}kspsi!L8BQe0D=1L`86Le-9R1QHWw

    @@ -42,10 +46,10 @@ It is strongly discouraged to use this platform when you don't use encryption; o This platform supports the services `alarm_disarm`, `alarm_arm_away`, `alarm_arm_home` and `alarm_arm_night`. For each of these services, an IFTTT webhook will be triggered. For this system to operate correctly, the following IFTTT applets have to be setup. Obviously, if your alarm device does not support some states, no applets have to be provided for those. -* **IF** Webhook event `alarm_disarm` is called, **THEN** disarm the alarm system. -* **IF** Webhook event `alarm_arm_home` is called, **THEN** set the alarm system to armed home. -* **IF** Webhook event `alarm_arm_away` is called, **THEN** set the alarm system to armed away. -* **IF** Webhook event `alarm_arm_night` is called, **THEN** set the alarm system to armed night. +* **IF** Webhook event `YOUR_DISARM_EVENT` is called, **THEN** disarm the alarm system. +* **IF** Webhook event `YOUR_ARM_HOME_EVENT` is called, **THEN** set the alarm system to armed home. +* **IF** Webhook event `YOUR_ARM_NIGHT_EVENT` is called, **THEN** set the alarm system to armed away. +* **IF** Webhook event `YOUR_DISARM_EVENT` is called, **THEN** set the alarm system to armed night. * **IF** the alarm system was disarmed, **THEN** perform a Webhook `POST` web request to url `https://HASS_URL/api/services/alarm_control_panel/ifttt_push_alarm_state?api_password=API_PASSWORD` with content type `application/json` and body `{"entity_id": "alarm_control_panel.DEVICE_NAME", "state": "disarmed"}`. * **IF** the alarm system state changed to armed home, **THEN** perform a Webhook `POST` web request to url `https://HASS_URL/api/services/alarm_control_panel/ifttt_push_alarm_state?api_password=API_PASSWORD` with content type `application/json` and body `{"entity_id": "alarm_control_panel.DEVICE_NAME", "state": "armed_home"}`. * **IF** the alarm system state changed to armed away, **THEN** perform a Webhook `POST` web request to url `https://HASS_URL/api/services/alarm_control_panel/ifttt_push_alarm_state?api_password=API_PASSWORD` with content type `application/json` and body `{"entity_id": "alarm_control_panel.DEVICE_NAME", "state": "armed_away"}`. @@ -61,4 +65,29 @@ For this system to operate correctly, the following IFTTT applets have to be set description: The code for the alarm control panel. required: false type: string + event_arm_away: + description: IFTTT webhook event to call when the state is set to armed away. + required: false + type: string + default: alarm_arm_away + event_arm_home: + description: IFTTT webhook event to call when the state is set to armed home. + required: false + type: string + default: alarm_arm_home + event_arm_night: + description: IFTTT webhook event to call when the state is set to armed night. + required: false + type: string + default: alarm_arm_night + event_disarm: + description: IFTTT webhook event to call when the state is set to disarmed. + required: false + type: string + default: alarm_disarm + optimistic: + description: Specify if the state will be updated by a ifttt_push_alarm_state call (false) or can be set immediately (true). + required: false + type: boolean + default: false {% endconfiguration %} From a34c07d182c4f17ecfda02fa5beb013a010ff872 Mon Sep 17 00:00:00 2001 From: davidm84 Date: Thu, 22 Mar 2018 08:34:01 +0100 Subject: [PATCH 657/993] Link to DuckDNS not working. (#4980) --- source/_addons/duckdns.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_addons/duckdns.markdown b/source/_addons/duckdns.markdown index 7994d84de0..9c9049a066 100644 --- a/source/_addons/duckdns.markdown +++ b/source/_addons/duckdns.markdown @@ -10,7 +10,7 @@ footer: true featured: true --- -[Duck DNS](https://duckdns.org/) is a free service which will point a DNS (sub domains of duckdns.org) to an IP of your choice. This add-on includes support for Let's Encrypt and will automatically create and renew your certificates. +[Duck DNS](https://www.duckdns.org/) is a free service which will point a DNS (sub domains of duckdns.org) to an IP of your choice. This add-on includes support for Let's Encrypt and will automatically create and renew your certificates. ```json { From 5e73866af081e60b9e737bf38d4b3737f8712cc7 Mon Sep 17 00:00:00 2001 From: Sebastian Muszynski Date: Thu, 22 Mar 2018 08:35:11 +0100 Subject: [PATCH 658/993] Typo fixed (#4975) --- source/_components/switch.xiaomi_miio.markdown | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/source/_components/switch.xiaomi_miio.markdown b/source/_components/switch.xiaomi_miio.markdown index 21cd7d4eba..6334c41d2b 100644 --- a/source/_components/switch.xiaomi_miio.markdown +++ b/source/_components/switch.xiaomi_miio.markdown @@ -91,7 +91,7 @@ Turn the wifi led on. | Service data attribute | Optional | Description | |---------------------------|----------|---------------------------------------------------------| -| `entity_id` | yes | Only act on a specific air purifier. Else targets all. | +| `entity_id` | yes | Only act on a specific xiaomi miio switch entity. Else targets all. | ### {% linkable_title Service `switch.xiaomi_miio_set_wifi_led_off` %} (Power Strip only) @@ -99,7 +99,7 @@ Turn the wifi led off. | Service data attribute | Optional | Description | |---------------------------|----------|---------------------------------------------------------| -| `entity_id` | yes | Only act on a specific air purifier. Else targets all. | +| `entity_id` | yes | Only act on a specific xiaomi miio switch entity. Else targets all. | ### {% linkable_title Service `switch.xiaomi_miio_set_power_price` %} (Power Strip) @@ -107,7 +107,7 @@ Set the power price. | Service data attribute | Optional | Description | |---------------------------|----------|---------------------------------------------------------| -| `entity_id` | yes | Only act on a specific air purifier. Else targets all. | +| `entity_id` | yes | Only act on a specific xiaomi miio switch entity. Else targets all. | | `price` | no | Power price, between 0 and 999. | ### {% linkable_title Service `switch.xiaomi_miio_set_power_mode` %} (Power Strip V1 only) @@ -116,5 +116,5 @@ Set the power mode. | Service data attribute | Optional | Description | |---------------------------|----------|---------------------------------------------------------------| -| `entity_id` | yes | Only act on a specific xiaomi miio entity. Else targets all. | +| `entity_id` | yes | Only act on a specific xiaomi miio switch entity. Else targets all. | | `mode` | no | Power mode, valid values are 'normal' and 'green' | From ffd9ae12ccb4ed7173cd381677598f60903a22d8 Mon Sep 17 00:00:00 2001 From: Otto Winter Date: Thu, 22 Mar 2018 08:36:09 +0100 Subject: [PATCH 659/993] =?UTF-8?q?esphomelib=20now=20supports=20ESP8266?= =?UTF-8?q?=20=F0=9F=8E=89=20(#4971)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- source/_components/light.mqtt_json.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/light.mqtt_json.markdown b/source/_components/light.mqtt_json.markdown index bdcfaaab11..d2e863f4f9 100644 --- a/source/_components/light.mqtt_json.markdown +++ b/source/_components/light.mqtt_json.markdown @@ -227,4 +227,4 @@ Home Assistant will then convert its 8bit value in the message to and from the d - [MQTT JSON Light](https://github.com/mertenats/Open-Home-Automation/tree/master/ha_mqtt_rgbw_light_with_discovery) is another implementation for ESP8266 including [MQTT discovery](/docs/mqtt/discovery/). -- [esphomelib](https://github.com/OttoWinter/esphomelib) is a library for ESP32-based boards that has many of Home Assistant's MQTT features (like [discovery](/docs/mqtt/discovery/)) pre-implemented and provides high-level abstractions for components such as lights or sensors. +- [esphomelib](https://github.com/OttoWinter/esphomelib) is a library for ESP8266 and ESP32 boards that has many of Home Assistant's MQTT features (like [discovery](/docs/mqtt/discovery/)) pre-implemented and provides high-level abstractions for components such as lights or sensors. From 3cdfe49eafb71abf17cb72900c709f2bcb93d71e Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Thu, 22 Mar 2018 08:56:22 +0100 Subject: [PATCH 660/993] Update --- source/developers/credits.markdown | 314 +++++++++++++++-------------- 1 file changed, 166 insertions(+), 148 deletions(-) diff --git a/source/developers/credits.markdown b/source/developers/credits.markdown index d5ae4f2a12..b598247cb4 100644 --- a/source/developers/credits.markdown +++ b/source/developers/credits.markdown @@ -2,7 +2,7 @@ layout: page title: "Credits" description: "Credits for the developers who contributed to Home Assistant." -date: 2018-02-10 16:03:45 +0000 +date: 2018-03-22 07:54:30 +0000 sidebar: true comments: false sharing: true @@ -13,21 +13,21 @@ This page contains a list of people who have contributed in one way or another t ### {% linkable_title Author %} -- [Paulus Schoutsen (@balloob)](https://github.com/balloob "6191 total commits to the home-assistant organization, 3645 commits to home-assistant, 1356 commits to home-assistant.github.io, 693 commits to home-assistant-polymer, 244 commits to home-assistant-js, 119 commits to netdisco, 44 commits to home-assistant-js-websocket, 26 commits to hass-release, 15 commits to home-assistant-assets, 12 commits to LabelBot, 8 commits to example-custom-config, 7 commits to micropython-home-assistant, 5 commits to hassio, 3 commits to hassio-addons, 2 commits to lambda-home-assistant-github, 2 commits to hassio-build, 2 commits to python-hassbian, 2 commits to hassio-addons-example, 2 commits to issue-bot, 1 commit to architecture, 1 commit to home-assistant-notebooks, 1 commit to home-assistant-iOS, 1 commit to warrant") +- [Paulus Schoutsen (@balloob)](https://github.com/balloob "6452 total commits to the home-assistant organization, 3798 commits to home-assistant, 1404 commits to home-assistant.github.io, 742 commits to home-assistant-polymer, 244 commits to home-assistant-js, 122 commits to netdisco, 46 commits to home-assistant-js-websocket, 28 commits to hass-release, 17 commits to LabelBot, 15 commits to home-assistant-assets, 8 commits to example-custom-config, 7 commits to micropython-home-assistant, 5 commits to hassio, 3 commits to hassio-addons, 2 commits to lambda-home-assistant-github, 2 commits to issue-bot, 2 commits to hassio-addons-example, 2 commits to hassio-build, 2 commits to home-assistant-iOS, 1 commit to warrant, 1 commit to home-assistant-notebooks, 1 commit to architecture") ### {% linkable_title Contributors %} (in alphabetical order) - [7even (@hwikene)](https://github.com/hwikene "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") -- [Aaron Bach (@bachya)](https://github.com/bachya "40 total commits to the home-assistant organization, 24 commits to home-assistant, 16 commits to home-assistant.github.io") +- [Aaron Bach (@bachya)](https://github.com/bachya "49 total commits to the home-assistant organization, 32 commits to home-assistant, 17 commits to home-assistant.github.io") - [Aaron Linville (@linville)](https://github.com/linville "2 total commits to the home-assistant organization, 2 commits to appdaemon") -- [Abílio Costa (@abmantis)](https://github.com/abmantis "21 total commits to the home-assistant organization, 12 commits to home-assistant, 5 commits to home-assistant.github.io, 2 commits to home-assistant-polymer, 1 commit to home-assistant-js-websocket, 1 commit to netdisco") +- [Abílio Costa (@abmantis)](https://github.com/abmantis "22 total commits to the home-assistant organization, 13 commits to home-assistant, 5 commits to home-assistant.github.io, 2 commits to home-assistant-polymer, 1 commit to home-assistant-js-websocket, 1 commit to netdisco") - [Adam (@SilvrrGIT)](https://github.com/SilvrrGIT "9 total commits to the home-assistant organization, 9 commits to home-assistant.github.io") - [Adam Baxter (@voltagex)](https://github.com/voltagex "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") - [Adam Cooper (@GenericStudent)](https://github.com/GenericStudent "11 total commits to the home-assistant organization, 8 commits to home-assistant, 3 commits to home-assistant.github.io") - [Adam Dullage (@Dullage)](https://github.com/Dullage "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") -- [Adam Mills (@armills)](https://github.com/armills "289 total commits to the home-assistant organization, 151 commits to home-assistant, 82 commits to home-assistant-polymer, 52 commits to home-assistant.github.io, 3 commits to home-assistant-js, 1 commit to homebridge-homeassistant") +- [Adam Mills (@armills)](https://github.com/armills "314 total commits to the home-assistant organization, 163 commits to home-assistant, 90 commits to home-assistant-polymer, 57 commits to home-assistant.github.io, 3 commits to home-assistant-js, 1 commit to homebridge-homeassistant") - [Adrian Popa (@mad-ady)](https://github.com/mad-ady "5 total commits to the home-assistant organization, 4 commits to appdaemon, 1 commit to home-assistant-polymer") - [Adrien Ball (@adrienball)](https://github.com/adrienball "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Adrien Brault (@adrienbrault)](https://github.com/adrienbrault "2 total commits to the home-assistant organization, 2 commits to home-assistant") @@ -36,13 +36,14 @@ This page contains a list of people who have contributed in one way or another t - [akloeckner (@akloeckner)](https://github.com/akloeckner "3 total commits to the home-assistant organization, 3 commits to home-assistant") - [Alan Bowman (@alanbowman)](https://github.com/alanbowman "4 total commits to the home-assistant organization, 4 commits to home-assistant") - [Alan Fischer (@alanfischer)](https://github.com/alanfischer "20 total commits to the home-assistant organization, 16 commits to home-assistant, 4 commits to home-assistant.github.io") +- [Alan Tse (@alandtse)](https://github.com/alandtse "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [Alasdair Nicol (@alasdairnicol)](https://github.com/alasdairnicol "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [Albatross (@DyingAlbatross)](https://github.com/DyingAlbatross "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") -- [Albert Lee (@trisk)](https://github.com/trisk "14 total commits to the home-assistant organization, 9 commits to home-assistant, 5 commits to home-assistant.github.io") +- [Albert Lee (@trisk)](https://github.com/trisk "15 total commits to the home-assistant organization, 10 commits to home-assistant, 5 commits to home-assistant.github.io") - [Alberto Arias Maestro (@albertoarias)](https://github.com/albertoarias "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Alessandro Mogavero (@alexmogavero)](https://github.com/alexmogavero "3 total commits to the home-assistant organization, 3 commits to home-assistant") - [Alex (@asbach)](https://github.com/asbach "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") -- [Alex Barcelo (@alexbarcelo)](https://github.com/alexbarcelo "5 total commits to the home-assistant organization, 3 commits to hassio-addons, 2 commits to home-assistant.github.io") +- [Alex Barcelo (@alexbarcelo)](https://github.com/alexbarcelo "6 total commits to the home-assistant organization, 3 commits to hassio-addons, 3 commits to home-assistant.github.io") - [Alex Harvey (@infamy)](https://github.com/infamy "29 total commits to the home-assistant organization, 14 commits to home-assistant, 11 commits to home-assistant.github.io, 4 commits to hassio-os") - [Alex Mekkering (@AlexMekkering)](https://github.com/AlexMekkering "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [Alex MF (@adsmf)](https://github.com/adsmf "1 total commits to the home-assistant organization, 1 commit to hassio-addons") @@ -53,10 +54,10 @@ This page contains a list of people who have contributed in one way or another t - [Alexis Iglauer (@ax42)](https://github.com/ax42 "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [Alfie Day (@Azelphur)](https://github.com/Azelphur "12 total commits to the home-assistant organization, 12 commits to home-assistant") - [Aliaksandr (@minchik)](https://github.com/minchik "7 total commits to the home-assistant organization, 3 commits to home-assistant.github.io, 2 commits to appdaemon, 2 commits to home-assistant") -- [Alok Saboo (@arsaboo)](https://github.com/arsaboo "136 total commits to the home-assistant organization, 81 commits to home-assistant.github.io, 49 commits to home-assistant, 4 commits to home-assistant-polymer, 1 commit to pi-gen, 1 commit to hassio-addons") +- [Alok Saboo (@arsaboo)](https://github.com/arsaboo "140 total commits to the home-assistant organization, 81 commits to home-assistant.github.io, 53 commits to home-assistant, 4 commits to home-assistant-polymer, 1 commit to pi-gen, 1 commit to hassio-addons") - [amorsillo (@AndrewMorsillo)](https://github.com/AndrewMorsillo "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") - [Anders Fogh Eriksen (@Fogh)](https://github.com/Fogh "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") -- [Anders Melchiorsen (@amelchio)](https://github.com/amelchio "143 total commits to the home-assistant organization, 103 commits to home-assistant, 38 commits to home-assistant.github.io, 2 commits to home-assistant-polymer") +- [Anders Melchiorsen (@amelchio)](https://github.com/amelchio "198 total commits to the home-assistant organization, 155 commits to home-assistant, 41 commits to home-assistant.github.io, 2 commits to home-assistant-polymer") - [andig (@andig)](https://github.com/andig "1 total commits to the home-assistant organization, 1 commit to pi-gen") - [Andrea Campi (@andreacampi)](https://github.com/andreacampi "8 total commits to the home-assistant organization, 6 commits to home-assistant, 2 commits to home-assistant.github.io") - [Andrea Falcone (@asfalcone)](https://github.com/asfalcone "5 total commits to the home-assistant organization, 5 commits to issue-bot") @@ -65,18 +66,19 @@ This page contains a list of people who have contributed in one way or another t - [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") +- [Andrei Pop (@andreipop2005)](https://github.com/andreipop2005 "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Andrej Friesen (@ajfriesen)](https://github.com/ajfriesen "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [Andrew (@aneisch)](https://github.com/aneisch "5 total commits to the home-assistant organization, 5 commits to home-assistant.github.io") - [Andrew (@aoakeson)](https://github.com/aoakeson "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") -- [Andrew Cockburn (@acockburn)](https://github.com/acockburn "749 total commits to the home-assistant organization, 615 commits to appdaemon, 88 commits to hadashboard, 25 commits to scenegen, 21 commits to home-assistant.github.io") +- [Andrew Cockburn (@acockburn)](https://github.com/acockburn "795 total commits to the home-assistant organization, 660 commits to appdaemon, 88 commits to hadashboard, 25 commits to scenegen, 22 commits to home-assistant.github.io") - [Andrew Smith (@andrewmichaelsmith)](https://github.com/andrewmichaelsmith "2 total commits to the home-assistant organization, 2 commits to pi-gen") - [Andrew Stock (@watchforstock)](https://github.com/watchforstock "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Andrew Thigpen (@andythigpen)](https://github.com/andythigpen "33 total commits to the home-assistant organization, 32 commits to home-assistant, 1 commit to home-assistant-js") - [Andrew Wedgbury (@sconemad)](https://github.com/sconemad "1 total commits to the home-assistant organization, 1 commit to pi-gen") - [andrew-curtis (@andrew-curtis)](https://github.com/andrew-curtis "7 total commits to the home-assistant organization, 7 commits to home-assistant.github.io") -- [Andrey (@andrey-git)](https://github.com/andrey-git "279 total commits to the home-assistant organization, 126 commits to home-assistant-polymer, 116 commits to home-assistant, 37 commits to home-assistant.github.io") +- [Andrey (@andrey-git)](https://github.com/andrey-git "293 total commits to the home-assistant organization, 134 commits to home-assistant-polymer, 121 commits to home-assistant, 37 commits to home-assistant.github.io, 1 commit to home-assistant-js-websocket") - [Andrey Kupreychik (@foxel)](https://github.com/foxel "9 total commits to the home-assistant organization, 6 commits to home-assistant, 3 commits to home-assistant.github.io") -- [Andrzej (@andriej)](https://github.com/andriej "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") +- [Andrzej (@andriej)](https://github.com/andriej "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [Andréas Lundgren (@adevade)](https://github.com/adevade "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [Andy Castille (@Klikini)](https://github.com/Klikini "12 total commits to the home-assistant organization, 8 commits to home-assistant, 4 commits to home-assistant.github.io") - [anotherthomas (@anotherthomas)](https://github.com/anotherthomas "1 total commits to the home-assistant organization, 1 commit to hassio-addons") @@ -86,6 +88,7 @@ This page contains a list of people who have contributed in one way or another t - [Anton Glukhov (@toxxin)](https://github.com/toxxin "1 total commits to the home-assistant organization, 1 commit to libcoap") - [Anton Lundin (@glance-)](https://github.com/glance- "8 total commits to the home-assistant organization, 7 commits to home-assistant, 1 commit to netdisco") - [Anton Sarukhanov (@antsar)](https://github.com/antsar "6 total commits to the home-assistant organization, 3 commits to home-assistant, 2 commits to home-assistant.github.io, 1 commit to home-assistant-polymer") +- [Antoni K (@Antoni-K)](https://github.com/Antoni-K "1 total commits to the home-assistant organization, 1 commit to hassbian-scripts") - [apo-mak (@apo-mak)](https://github.com/apo-mak "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") - [arcsur (@arcsur)](https://github.com/arcsur "3 total commits to the home-assistant organization, 3 commits to home-assistant") - [Ardetus (@Ardetus)](https://github.com/Ardetus "4 total commits to the home-assistant organization, 2 commits to home-assistant, 2 commits to home-assistant.github.io") @@ -108,8 +111,9 @@ This page contains a list of people who have contributed in one way or another t - [Baran Kaynak (@barankaynak)](https://github.com/barankaynak "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") - [Barry Williams (@bazwilliams)](https://github.com/bazwilliams "10 total commits to the home-assistant organization, 6 commits to home-assistant, 2 commits to netdisco, 2 commits to home-assistant.github.io") - [Bart274 (@Bart274)](https://github.com/Bart274 "26 total commits to the home-assistant organization, 17 commits to home-assistant, 8 commits to home-assistant.github.io, 1 commit to home-assistant-polymer") -- [Bas Schipper (@basschipper)](https://github.com/basschipper "7 total commits to the home-assistant organization, 5 commits to home-assistant, 2 commits to home-assistant.github.io") +- [Bas Schipper (@basschipper)](https://github.com/basschipper "9 total commits to the home-assistant organization, 7 commits to home-assistant, 2 commits to home-assistant.github.io") - [bastshoes (@bastshoes)](https://github.com/bastshoes "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") +- [battistaar (@battistaar)](https://github.com/battistaar "1 total commits to the home-assistant organization, 1 commit to homebridge-homeassistant") - [bcl1713 (@bcl1713)](https://github.com/bcl1713 "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [Beat (@bdurrer)](https://github.com/bdurrer "11 total commits to the home-assistant organization, 10 commits to home-assistant.github.io, 1 commit to home-assistant-polymer") - [Ben (@unixben)](https://github.com/unixben "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") @@ -122,19 +126,21 @@ This page contains a list of people who have contributed in one way or another t - [Ben Thomas (@wazoo)](https://github.com/wazoo "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") - [Benjamin Parzella (@bparzella)](https://github.com/bparzella "1 total commits to the home-assistant organization, 1 commit to pi-gen") - [Benji (@bbbenji)](https://github.com/bbbenji "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") +- [Bertbert (@bertbert72)](https://github.com/bertbert72 "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [bestlibre (@bestlibre)](https://github.com/bestlibre "16 total commits to the home-assistant organization, 8 commits to home-assistant, 5 commits to home-assistant.github.io, 1 commit to hassio, 1 commit to hassio-build, 1 commit to home-assistant-polymer") - [BigMoby (@bigmoby)](https://github.com/bigmoby "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") -- [BioSehnsucht (@BioSehnsucht)](https://github.com/BioSehnsucht "12 total commits to the home-assistant organization, 7 commits to home-assistant.github.io, 3 commits to home-assistant, 2 commits to home-assistant-polymer") +- [BioSehnsucht (@BioSehnsucht)](https://github.com/BioSehnsucht "14 total commits to the home-assistant organization, 8 commits to home-assistant.github.io, 4 commits to home-assistant, 2 commits to home-assistant-polymer") - [Bjarni Ivarsson (@bjarniivarsson)](https://github.com/bjarniivarsson "8 total commits to the home-assistant organization, 5 commits to home-assistant, 3 commits to home-assistant-polymer") - [Björn Orri (@bjornorri)](https://github.com/bjornorri "1 total commits to the home-assistant organization, 1 commit to home-assistant-iOS") - [Björn Ramberg (@bjorne)](https://github.com/bjorne "1 total commits to the home-assistant organization, 1 commit to hassio-build") - [Blanyal D'Souza (@blanyal)](https://github.com/blanyal "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [Bob Anderson (@rwa)](https://github.com/rwa "11 total commits to the home-assistant organization, 7 commits to home-assistant, 4 commits to home-assistant.github.io") -- [Bob Igo (@Human)](https://github.com/Human "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") +- [Bob Igo (@Human)](https://github.com/Human "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [Boced66 (@boced66)](https://github.com/boced66 "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [boojew (@boojew)](https://github.com/boojew "7 total commits to the home-assistant organization, 7 commits to home-assistant.github.io") -- [Boris K (@bokub)](https://github.com/bokub "11 total commits to the home-assistant organization, 6 commits to home-assistant.github.io, 5 commits to home-assistant") -- [Boyi C (@fanthos)](https://github.com/fanthos "14 total commits to the home-assistant organization, 8 commits to home-assistant-polymer, 4 commits to home-assistant, 2 commits to home-assistant.github.io") +- [Boris K (@bokub)](https://github.com/bokub "12 total commits to the home-assistant organization, 6 commits to home-assistant, 6 commits to home-assistant.github.io") +- [bottomquark (@bottomquark)](https://github.com/bottomquark "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") +- [Boyi C (@fanthos)](https://github.com/fanthos "18 total commits to the home-assistant organization, 11 commits to home-assistant-polymer, 5 commits to home-assistant, 2 commits to home-assistant.github.io") - [bpoirriez (@bpoirriez)](https://github.com/bpoirriez "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [Brad Dixon (@rbdixon)](https://github.com/rbdixon "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Brad Johnson (@bradsk88)](https://github.com/bradsk88 "2 total commits to the home-assistant organization, 2 commits to home-assistant") @@ -151,25 +157,26 @@ This page contains a list of people who have contributed in one way or another t - [Brian Cribbs (@cribbstechnologies)](https://github.com/cribbstechnologies "43 total commits to the home-assistant organization, 26 commits to home-assistant, 15 commits to home-assistant.github.io, 2 commits to home-assistant-polymer") - [Brian Fitzgerald (@Brianfit)](https://github.com/Brianfit "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [Brian Hopkins (@btotharye)](https://github.com/btotharye "6 total commits to the home-assistant organization, 4 commits to home-assistant.github.io, 2 commits to home-assistant") -- [Brian J King (@brianjking)](https://github.com/brianjking "9 total commits to the home-assistant organization, 9 commits to home-assistant.github.io") +- [Brian J King (@brianjking)](https://github.com/brianjking "10 total commits to the home-assistant organization, 10 commits to home-assistant.github.io") - [Brian Jinwright (@bjinwright)](https://github.com/bjinwright "159 total commits to the home-assistant organization, 159 commits to warrant") - [Britton Clapp (@britton-clapp)](https://github.com/britton-clapp "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [BRUH Automation (@bruhautomation)](https://github.com/bruhautomation "3 total commits to the home-assistant organization, 3 commits to hassbian-scripts") - [Bruno Adele (@badele)](https://github.com/badele "22 total commits to the home-assistant organization, 22 commits to home-assistant") - [Bruno Binet (@bbinet)](https://github.com/bbinet "1 total commits to the home-assistant organization, 1 commit to hassio-build") - [Bryce Edwards (@hoopty)](https://github.com/hoopty "5 total commits to the home-assistant organization, 3 commits to home-assistant, 2 commits to home-assistant.github.io") -- [c727 (@c727)](https://github.com/c727 "29 total commits to the home-assistant organization, 19 commits to home-assistant-polymer, 7 commits to home-assistant.github.io, 3 commits to home-assistant") +- [c727 (@c727)](https://github.com/c727 "57 total commits to the home-assistant organization, 39 commits to home-assistant-polymer, 12 commits to home-assistant.github.io, 4 commits to home-assistant, 2 commits to hassio") - [Caius Cioran (@caiuspb)](https://github.com/caiuspb "3 total commits to the home-assistant organization, 3 commits to home-assistant") - [Caleb (@finish06)](https://github.com/finish06 "7 total commits to the home-assistant organization, 7 commits to home-assistant") - [Cameron Bulock (@cbulock)](https://github.com/cbulock "5 total commits to the home-assistant organization, 2 commits to home-assistant, 2 commits to home-assistant.github.io, 1 commit to netdisco") -- [Carlo Costanzo (@CCOSTAN)](https://github.com/CCOSTAN "95 total commits to the home-assistant organization, 87 commits to home-assistant.github.io, 5 commits to home-assistant, 1 commit to fabric-home-assistant, 1 commit to hassbian-scripts, 1 commit to homebridge-homeassistant") +- [Cameron Moore (@moorereason)](https://github.com/moorereason "3 total commits to the home-assistant organization, 3 commits to hassio-cli") +- [Carlo Costanzo (@CCOSTAN)](https://github.com/CCOSTAN "95 total commits to the home-assistant organization, 87 commits to home-assistant.github.io, 5 commits to home-assistant, 1 commit to hassbian-scripts, 1 commit to homebridge-homeassistant, 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 "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") -- [cdce8p (@cdce8p)](https://github.com/cdce8p "23 total commits to the home-assistant organization, 12 commits to home-assistant.github.io, 8 commits to home-assistant, 3 commits to home-assistant-polymer") +- [cdce8p (@cdce8p)](https://github.com/cdce8p "56 total commits to the home-assistant organization, 31 commits to home-assistant, 21 commits to home-assistant.github.io, 4 commits to home-assistant-polymer") - [Cecron (@Cecron)](https://github.com/Cecron "1 total commits to the home-assistant organization, 1 commit to appdaemon") - [Cenk Gündoğan (@cgundogan)](https://github.com/cgundogan "1 total commits to the home-assistant organization, 1 commit to libcoap") - [Cezar Sá Espinola (@cezarsa)](https://github.com/cezarsa "2 total commits to the home-assistant organization, 2 commits to home-assistant") -- [cgtobi (@cgtobi)](https://github.com/cgtobi "22 total commits to the home-assistant organization, 13 commits to home-assistant, 9 commits to home-assistant.github.io") +- [cgtobi (@cgtobi)](https://github.com/cgtobi "23 total commits to the home-assistant organization, 14 commits to home-assistant, 9 commits to home-assistant.github.io") - [chanders (@chanders)](https://github.com/chanders "2 total commits to the home-assistant organization, 2 commits to hadashboard") - [Charles Blonde (@CharlesBlonde)](https://github.com/CharlesBlonde "19 total commits to the home-assistant organization, 12 commits to home-assistant, 7 commits to home-assistant.github.io") - [Charles Garwood (@cgarwood)](https://github.com/cgarwood "17 total commits to the home-assistant organization, 11 commits to home-assistant.github.io, 6 commits to home-assistant") @@ -179,6 +186,7 @@ This page contains a list of people who have contributed in one way or another t - [Chia-liang Kao (@clkao)](https://github.com/clkao "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Chris (@chennin)](https://github.com/chennin "15 total commits to the home-assistant organization, 11 commits to home-assistant.github.io, 4 commits to home-assistant") - [Chris Aloi (@ctaloi)](https://github.com/ctaloi "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") +- [Chris Crowe (@chriscrowe)](https://github.com/chriscrowe "3 total commits to the home-assistant organization, 3 commits to homebridge-homeassistant") - [Chris Huegle (@chuegle)](https://github.com/chuegle "1 total commits to the home-assistant organization, 1 commit to netdisco") - [Chris Monteiro (@cmonteiro128)](https://github.com/cmonteiro128 "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [Chris Mulder (@chrisvis)](https://github.com/chrisvis "2 total commits to the home-assistant organization, 2 commits to home-assistant") @@ -189,16 +197,19 @@ This page contains a list of people who have contributed in one way or another t - [Christian Brædstrup (@LinuxChristian)](https://github.com/LinuxChristian "8 total commits to the home-assistant organization, 8 commits to home-assistant") - [Christian Lasarczyk (@ChrisLasar)](https://github.com/ChrisLasar "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [Christian Studer (@cstuder)](https://github.com/cstuder "4 total commits to the home-assistant organization, 4 commits to home-assistant.github.io") -- [ChristianKuehnel (@ChristianKuehnel)](https://github.com/ChristianKuehnel "21 total commits to the home-assistant organization, 12 commits to home-assistant, 9 commits to home-assistant.github.io") +- [ChristianKuehnel (@ChristianKuehnel)](https://github.com/ChristianKuehnel "30 total commits to the home-assistant organization, 18 commits to home-assistant, 12 commits to home-assistant.github.io") - [Christoffer Kylvåg (@christoe)](https://github.com/christoe "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [Christoph Wagner (@Christoph-Wagner)](https://github.com/Christoph-Wagner "4 total commits to the home-assistant organization, 4 commits to home-assistant.github.io") +- [Christopher Vella (@chrisvella)](https://github.com/chrisvella "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [Christopher Viel (@Chris-V)](https://github.com/Chris-V "5 total commits to the home-assistant organization, 3 commits to home-assistant, 2 commits to home-assistant.github.io") +- [ChristopherLMiller (@ChristopherLMiller)](https://github.com/ChristopherLMiller "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") - [chrysn (@chrysn)](https://github.com/chrysn "65 total commits to the home-assistant organization, 65 commits to libcoap") - [chz^3 (@chzchzchz)](https://github.com/chzchzchz "1 total commits to the home-assistant organization, 1 commit to pi-gen") - [Ciquattro (@CiquattroFPV)](https://github.com/CiquattroFPV "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") +- [citruz (@citruz)](https://github.com/citruz "3 total commits to the home-assistant organization, 3 commits to home-assistant") - [clach04 (@clach04)](https://github.com/clach04 "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [Claus F. Strasburger (@cfstras)](https://github.com/cfstras "5 total commits to the home-assistant organization, 5 commits to pi-gen") -- [cogneato (@cogneato)](https://github.com/cogneato "7 total commits to the home-assistant organization, 7 commits to home-assistant.github.io") +- [cogneato (@cogneato)](https://github.com/cogneato "15 total commits to the home-assistant organization, 15 commits to home-assistant.github.io") - [Colin Dunn (@colindunn)](https://github.com/colindunn "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Colin O'Dell (@colinodell)](https://github.com/colinodell "24 total commits to the home-assistant organization, 13 commits to home-assistant, 11 commits to home-assistant.github.io") - [Colin Teubner (@netopiax)](https://github.com/netopiax "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") @@ -207,16 +218,17 @@ This page contains a list of people who have contributed in one way or another t - [Constantine Poltyrev (@shprota)](https://github.com/shprota "1 total commits to the home-assistant organization, 1 commit to appdaemon") - [Corban Mailloux (@corbanmailloux)](https://github.com/corbanmailloux "18 total commits to the home-assistant organization, 18 commits to home-assistant.github.io") - [Corey Pauley (@devspacenine)](https://github.com/devspacenine "5 total commits to the home-assistant organization, 3 commits to home-assistant.github.io, 2 commits to home-assistant") +- [corneyl (@corneyl)](https://github.com/corneyl "3 total commits to the home-assistant organization, 3 commits to home-assistant") - [Craig J. Ward (@wardcraigj)](https://github.com/wardcraigj "27 total commits to the home-assistant organization, 20 commits to home-assistant, 7 commits to home-assistant.github.io") - [CTLS (@CTLS)](https://github.com/CTLS "3 total commits to the home-assistant organization, 3 commits to home-assistant") - [CV (@dagobert)](https://github.com/dagobert "4 total commits to the home-assistant organization, 4 commits to home-assistant.github.io") - [cxlwill (@cxlwill)](https://github.com/cxlwill "2 total commits to the home-assistant organization, 2 commits to home-assistant-polymer") -- [Dale Higgs (@dale3h)](https://github.com/dale3h "33 total commits to the home-assistant organization, 21 commits to home-assistant.github.io, 10 commits to home-assistant, 1 commit to hassbot, 1 commit to homebridge-homeassistant") +- [Dale Higgs (@dale3h)](https://github.com/dale3h "34 total commits to the home-assistant organization, 22 commits to home-assistant.github.io, 10 commits to home-assistant, 1 commit to hassbot, 1 commit to homebridge-homeassistant") - [Dan (@danieljkemp)](https://github.com/danieljkemp "23 total commits to the home-assistant organization, 16 commits to home-assistant, 7 commits to home-assistant.github.io") - [Dan Chen (@djchen)](https://github.com/djchen "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Dan Cinnamon (@Cinntax)](https://github.com/Cinntax "17 total commits to the home-assistant organization, 14 commits to home-assistant, 3 commits to home-assistant.github.io") - [Dan Faulknor (@danielfaulknor)](https://github.com/danielfaulknor "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") -- [Dan Nixon (@DanNixon)](https://github.com/DanNixon "21 total commits to the home-assistant organization, 16 commits to home-assistant, 5 commits to home-assistant.github.io") +- [Dan Nixon (@DanNixon)](https://github.com/DanNixon "23 total commits to the home-assistant organization, 18 commits to home-assistant, 5 commits to home-assistant.github.io") - [Dan Ports (@drkp)](https://github.com/drkp "4 total commits to the home-assistant organization, 4 commits to home-assistant") - [Dan Sarginson (@dansarginson)](https://github.com/dansarginson "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Dan Smith (@kk7ds)](https://github.com/kk7ds "84 total commits to the home-assistant organization, 68 commits to home-assistant, 14 commits to home-assistant.github.io, 2 commits to home-assistant-polymer") @@ -224,14 +236,15 @@ This page contains a list of people who have contributed in one way or another t - [Dani (@danichispa)](https://github.com/danichispa "9 total commits to the home-assistant organization, 9 commits to home-assistant.github.io") - [Daniel (@delneet)](https://github.com/delneet "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [Daniel Escoz (@Darkhogg)](https://github.com/Darkhogg "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") -- [Daniel Høyer Iversen (@Danielhiversen)](https://github.com/Danielhiversen "376 total commits to the home-assistant organization, 253 commits to home-assistant, 119 commits to home-assistant.github.io, 4 commits to home-assistant-polymer") -- [Daniel Perna (@danielperna84)](https://github.com/danielperna84 "83 total commits to the home-assistant organization, 39 commits to home-assistant.github.io, 38 commits to home-assistant, 6 commits to hassio-addons") +- [Daniel Høyer Iversen (@Danielhiversen)](https://github.com/Danielhiversen "294 total commits to the home-assistant organization, 180 commits to home-assistant, 111 commits to home-assistant.github.io, 3 commits to home-assistant-polymer") +- [Daniel Perna (@danielperna84)](https://github.com/danielperna84 "84 total commits to the home-assistant organization, 39 commits to home-assistant, 39 commits to home-assistant.github.io, 6 commits to hassio-addons") - [Daniel Peukert (@dpeukert)](https://github.com/dpeukert "3 total commits to the home-assistant organization, 2 commits to home-assistant.github.io, 1 commit to home-assistant-polymer") - [Daniel Schaal (@schaal)](https://github.com/schaal "2 total commits to the home-assistant organization, 2 commits to home-assistant") +- [Daniel Shokouhi (@dshokouhi)](https://github.com/dshokouhi "12 total commits to the home-assistant organization, 12 commits to home-assistant.github.io") - [Daniel Stone (@daniel-stoneuk)](https://github.com/daniel-stoneuk "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [Daniel Trnka (@trnila)](https://github.com/trnila "2 total commits to the home-assistant organization, 2 commits to appdaemon") - [Daniel Watkins (@OddBloke)](https://github.com/OddBloke "3 total commits to the home-assistant organization, 3 commits to home-assistant") -- [Daniel Welch (@danielwelch)](https://github.com/danielwelch "2 total commits to the home-assistant organization, 2 commits to homebridge-homeassistant") +- [Daniel Welch (@danielwelch)](https://github.com/danielwelch "5 total commits to the home-assistant organization, 3 commits to home-assistant.github.io, 2 commits to homebridge-homeassistant") - [DanielXYZ2000 (@DanielXYZ2000)](https://github.com/DanielXYZ2000 "3 total commits to the home-assistant organization, 2 commits to home-assistant.github.io, 1 commit to hassio-addons") - [Daniyar Yeralin (@yeralin)](https://github.com/yeralin "1 total commits to the home-assistant organization, 1 commit to homebridge-homeassistant") - [dasos (@dasos)](https://github.com/dasos "11 total commits to the home-assistant organization, 7 commits to home-assistant, 3 commits to home-assistant.github.io, 1 commit to netdisco") @@ -240,7 +253,7 @@ This page contains a list of people who have contributed in one way or another t - [Dave Banks (@djbanks)](https://github.com/djbanks "2 total commits to the home-assistant organization, 2 commits to appdaemon") - [Dave J (@kxtcd950)](https://github.com/kxtcd950 "3 total commits to the home-assistant organization, 3 commits to hassbian-scripts") - [DaveSergeant (@dethpickle)](https://github.com/dethpickle "2 total commits to the home-assistant organization, 2 commits to home-assistant") -- [David (@fanaticDavid)](https://github.com/fanaticDavid "14 total commits to the home-assistant organization, 10 commits to home-assistant.github.io, 3 commits to home-assistant, 1 commit to home-assistant-polymer") +- [David (@fanaticDavid)](https://github.com/fanaticDavid "16 total commits to the home-assistant organization, 12 commits to home-assistant.github.io, 3 commits to home-assistant, 1 commit to home-assistant-polymer") - [David (Drew) Jackson (@David-Jackson)](https://github.com/David-Jackson "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [David De Sloovere (@DavidDeSloovere)](https://github.com/DavidDeSloovere "16 total commits to the home-assistant organization, 16 commits to home-assistant.github.io") - [David Fiel (@dfiel)](https://github.com/dfiel "2 total commits to the home-assistant organization, 2 commits to home-assistant") @@ -265,13 +278,13 @@ This page contains a list of people who have contributed in one way or another t - [dersger (@dersger)](https://github.com/dersger "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") - [devdelay (@devdelay)](https://github.com/devdelay "16 total commits to the home-assistant organization, 7 commits to home-assistant.github.io, 5 commits to home-assistant, 4 commits to homebridge-homeassistant") - [Devon Peet (@dpeet)](https://github.com/dpeet "5 total commits to the home-assistant organization, 5 commits to home-assistant.github.io") -- [Diogo Gomes (@dgomes)](https://github.com/dgomes "22 total commits to the home-assistant organization, 11 commits to home-assistant, 11 commits to home-assistant.github.io") +- [Diogo Gomes (@dgomes)](https://github.com/dgomes "38 total commits to the home-assistant organization, 23 commits to home-assistant, 15 commits to home-assistant.github.io") - [DoloresHA (@DoloresHA)](https://github.com/DoloresHA "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [Domantas (@Dohxis)](https://github.com/Dohxis "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") -- [Dougal Matthews (@d0ugal)](https://github.com/d0ugal "4 total commits to the home-assistant organization, 2 commits to home-assistant, 2 commits to home-assistant.github.io") +- [Dougal Matthews (@d0ugal)](https://github.com/d0ugal "5 total commits to the home-assistant organization, 3 commits to home-assistant, 2 commits to home-assistant.github.io") - [dramamoose (@dramamoose)](https://github.com/dramamoose "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [DrewSK (@dzsquared)](https://github.com/dzsquared "8 total commits to the home-assistant organization, 8 commits to home-assistant.github.io") -- [DubhAd (@DubhAd)](https://github.com/DubhAd "128 total commits to the home-assistant organization, 128 commits to home-assistant.github.io") +- [DubhAd (@DubhAd)](https://github.com/DubhAd "195 total commits to the home-assistant organization, 195 commits to home-assistant.github.io") - [Duoxilian (@Duoxilian)](https://github.com/Duoxilian "11 total commits to the home-assistant organization, 6 commits to home-assistant.github.io, 5 commits to home-assistant") - [ebpetway (@ebpetway)](https://github.com/ebpetway "55 total commits to the home-assistant organization, 55 commits to warrant") - [Edwin Smulders (@Dutchy-)](https://github.com/Dutchy- "4 total commits to the home-assistant organization, 2 commits to home-assistant, 2 commits to home-assistant.github.io") @@ -287,34 +300,36 @@ This page contains a list of people who have contributed in one way or another t - [Eric Oosting (@eoosting)](https://github.com/eoosting "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [Eric Rolf (@xrolfex)](https://github.com/xrolfex "13 total commits to the home-assistant organization, 13 commits to home-assistant") - [Eric Thompson (@er0ck)](https://github.com/er0ck "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") -- [Erik Eriksson (@molobrakos)](https://github.com/molobrakos "111 total commits to the home-assistant organization, 97 commits to home-assistant, 11 commits to home-assistant.github.io, 3 commits to netdisco") +- [Erik Eriksson (@molobrakos)](https://github.com/molobrakos "112 total commits to the home-assistant organization, 98 commits to home-assistant, 11 commits to home-assistant.github.io, 3 commits to netdisco") - [Erik-jan Riemers (@riemers)](https://github.com/riemers "14 total commits to the home-assistant organization, 13 commits to home-assistant.github.io, 1 commit to hassbian-scripts") -- [escoand (@escoand)](https://github.com/escoand "3 total commits to the home-assistant organization, 3 commits to home-assistant") +- [escoand (@escoand)](https://github.com/escoand "4 total commits to the home-assistant organization, 4 commits to home-assistant") - [ettisan (@ettisan)](https://github.com/ettisan "8 total commits to the home-assistant organization, 8 commits to home-assistant") - [Eu (@covrig)](https://github.com/covrig "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") -- [Eugenio Panadero (@azogue)](https://github.com/azogue "76 total commits to the home-assistant organization, 45 commits to home-assistant, 25 commits to home-assistant.github.io, 3 commits to homebridge-homeassistant, 3 commits to home-assistant-polymer") +- [Eugenio Panadero (@azogue)](https://github.com/azogue "76 total commits to the home-assistant organization, 45 commits to home-assistant, 25 commits to home-assistant.github.io, 3 commits to home-assistant-polymer, 3 commits to homebridge-homeassistant") - [Ezra Bowden (@bn0)](https://github.com/bn0 "2 total commits to the home-assistant organization, 2 commits to warrant") -- [Fabian Affolter (@fabaff)](https://github.com/fabaff "4534 total commits to the home-assistant organization, 2916 commits to home-assistant.github.io, 1515 commits to home-assistant, 32 commits to home-assistant-assets, 30 commits to home-assistant-notebooks, 11 commits to hassio-build, 11 commits to home-assistant-polymer, 8 commits to netdisco, 5 commits to hassio-addons, 3 commits to development-docs, 2 commits to hassio, 1 commit to home-assistant-js-websocket") +- [Fabian Affolter (@fabaff)](https://github.com/fabaff "4570 total commits to the home-assistant organization, 2927 commits to home-assistant.github.io, 1536 commits to home-assistant, 32 commits to home-assistant-assets, 31 commits to home-assistant-notebooks, 11 commits to home-assistant-polymer, 11 commits to hassio-build, 8 commits to netdisco, 5 commits to hassio-addons, 4 commits to hassio, 3 commits to development-docs, 1 commit to home-assistant-js-websocket, 1 commit to example-custom-config") - [Fabian Heredia Montiel (@fabianhjr)](https://github.com/fabianhjr "4 total commits to the home-assistant organization, 4 commits to home-assistant") - [Fabien Piuzzi (@reefab)](https://github.com/reefab "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") - [Fabrizio Furnari (@fabfurnari)](https://github.com/fabfurnari "5 total commits to the home-assistant organization, 3 commits to home-assistant.github.io, 2 commits to home-assistant") - [fakezeta (@fakezeta)](https://github.com/fakezeta "7 total commits to the home-assistant organization, 7 commits to home-assistant") - [Fares Rihani (@anchepiece)](https://github.com/anchepiece "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") +- [Federico Zivolo (@FezVrasta)](https://github.com/FezVrasta "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [Felix (@xifle)](https://github.com/xifle "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Felix Krause (@KrauseFx)](https://github.com/KrauseFx "27 total commits to the home-assistant organization, 27 commits to issue-bot") - [Ferry van Zeelst (@StaticCube)](https://github.com/StaticCube "6 total commits to the home-assistant organization, 4 commits to home-assistant.github.io, 2 commits to home-assistant") - [Finbarr Brady (@fbradyirl)](https://github.com/fbradyirl "8 total commits to the home-assistant organization, 8 commits to home-assistant") - [Florian Holzapfel (@florianholzapfel)](https://github.com/florianholzapfel "11 total commits to the home-assistant organization, 4 commits to home-assistant, 4 commits to home-assistant.github.io, 3 commits to netdisco") -- [Florian Klien (@flowolf)](https://github.com/flowolf "16 total commits to the home-assistant organization, 13 commits to home-assistant.github.io, 3 commits to home-assistant") +- [Florian Klien (@flowolf)](https://github.com/flowolf "17 total commits to the home-assistant organization, 14 commits to home-assistant.github.io, 3 commits to home-assistant") - [florianj1 (@florianj1)](https://github.com/florianj1 "1 total commits to the home-assistant organization, 1 commit to hassio") - [florincosta (@florincosta)](https://github.com/florincosta "6 total commits to the home-assistant organization, 3 commits to home-assistant, 3 commits to home-assistant.github.io") - [Fonta (@f0nt4)](https://github.com/f0nt4 "4 total commits to the home-assistant organization, 4 commits to home-assistant.github.io") -- [Franck Nijhof (@frenck)](https://github.com/frenck "29 total commits to the home-assistant organization, 20 commits to home-assistant.github.io, 5 commits to hassio, 2 commits to home-assistant-polymer, 1 commit to hassio-cli, 1 commit to appdaemon") +- [Franck Nijhof (@frenck)](https://github.com/frenck "29 total commits to the home-assistant organization, 20 commits to home-assistant.github.io, 5 commits to hassio, 2 commits to home-assistant-polymer, 1 commit to appdaemon, 1 commit to hassio-cli") - [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 "16 total commits to the home-assistant organization, 9 commits to home-assistant, 4 commits to home-assistant.github.io, 3 commits to netdisco") - [Frederic Hemberger (@fhemberger)](https://github.com/fhemberger "93 total commits to the home-assistant organization, 93 commits to home-assistant.github.io") +- [Frederik Bolding (@FrederikBolding)](https://github.com/FrederikBolding "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Fredrik Fjeld (@fredrikfjeld)](https://github.com/fredrikfjeld "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") -- [Fredrik Lindqvist (@Landrash)](https://github.com/Landrash "183 total commits to the home-assistant organization, 77 commits to hassbian-scripts, 70 commits to home-assistant.github.io, 31 commits to pi-gen, 4 commits to home-assistant, 1 commit to home-assistant-polymer") +- [Fredrik Lindqvist (@Landrash)](https://github.com/Landrash "190 total commits to the home-assistant organization, 81 commits to hassbian-scripts, 70 commits to home-assistant.github.io, 34 commits to pi-gen, 4 commits to home-assistant, 1 commit to home-assistant-polymer") - [freol35241 (@freol35241)](https://github.com/freol35241 "3 total commits to the home-assistant organization, 3 commits to home-assistant") - [fuga2136 (@fuga2136)](https://github.com/fuga2136 "13 total commits to the home-assistant organization, 13 commits to home-assistant.github.io") - [Gabor SZOLLOSI (@szogi)](https://github.com/szogi "3 total commits to the home-assistant organization, 2 commits to home-assistant, 1 commit to appdaemon") @@ -325,7 +340,7 @@ This page contains a list of people who have contributed in one way or another t - [Georgi Kirichkov (@kirichkov)](https://github.com/kirichkov "17 total commits to the home-assistant organization, 11 commits to home-assistant.github.io, 5 commits to home-assistant, 1 commit to appdaemon") - [Georgi Yanev (@jumpalottahigh)](https://github.com/jumpalottahigh "6 total commits to the home-assistant organization, 4 commits to home-assistant.github.io, 2 commits to home-assistant-polymer") - [Georgii Staroselskii (@staroselskii)](https://github.com/staroselskii "1 total commits to the home-assistant organization, 1 commit to pi-gen") -- [Gerard (@gerard33)](https://github.com/gerard33 "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") +- [Gerard (@gerard33)](https://github.com/gerard33 "6 total commits to the home-assistant organization, 4 commits to home-assistant.github.io, 2 commits to home-assistant") - [Gergely Imreh (@imrehg)](https://github.com/imrehg "16 total commits to the home-assistant organization, 11 commits to home-assistant, 5 commits to home-assistant.github.io") - [Gianluca Barbaro (@MrMep)](https://github.com/MrMep "24 total commits to the home-assistant organization, 16 commits to home-assistant, 8 commits to home-assistant.github.io") - [Gianpaolo Macario (@gmacario)](https://github.com/gmacario "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") @@ -337,32 +352,28 @@ This page contains a list of people who have contributed in one way or another t - [Gopal Kildoliya (@gopalkildoliya)](https://github.com/gopalkildoliya "6 total commits to the home-assistant organization, 4 commits to home-assistant, 2 commits to home-assistant.github.io") - [Graeme Smith (@Instagraeme)](https://github.com/Instagraeme "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [Grant McConnaughey (@grantmcconnaughey)](https://github.com/grantmcconnaughey "8 total commits to the home-assistant organization, 8 commits to warrant") -- [GreenTurtwig (@GreenTurtwig)](https://github.com/GreenTurtwig "83 total commits to the home-assistant organization, 75 commits to home-assistant.github.io, 8 commits to home-assistant") -- [Greg Dowling (@pavoni)](https://github.com/pavoni "251 total commits to the home-assistant organization, 224 commits to home-assistant, 25 commits to home-assistant.github.io, 2 commits to netdisco") -- [Greg Laabs (@OverloadUT)](https://github.com/OverloadUT "11 total commits to the home-assistant organization, 8 commits to home-assistant, 3 commits to home-assistant.github.io") +- [GreenTurtwig (@GreenTurtwig)](https://github.com/GreenTurtwig "80 total commits to the home-assistant organization, 75 commits to home-assistant.github.io, 5 commits to home-assistant") +- [Greg Dowling (@pavoni)](https://github.com/pavoni "255 total commits to the home-assistant organization, 228 commits to home-assistant, 25 commits to home-assistant.github.io, 2 commits to netdisco") +- [Greg Laabs (@OverloadUT)](https://github.com/OverloadUT "14 total commits to the home-assistant organization, 11 commits to home-assistant, 3 commits to home-assistant.github.io") - [Greg MacLellan (@gregmac)](https://github.com/gregmac "1 total commits to the home-assistant organization, 1 commit to pi-gen") - [Greg Stengel (@theCMack)](https://github.com/theCMack "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") -- [Greg Stevenson (@gstevenson)](https://github.com/gstevenson "5 total commits to the home-assistant organization, 5 commits to home-assistant.github.io") +- [Greg Stevenson (@gstevenson)](https://github.com/gstevenson "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [Greg. A. (@gautric)](https://github.com/gautric "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [GTH (@gunnarhelgason)](https://github.com/gunnarhelgason "2 total commits to the home-assistant organization, 2 commits to appdaemon") - [Guillaume Rischard (@grischard)](https://github.com/grischard "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") - [Gustav Ahlberg (@Gyran)](https://github.com/Gyran "20 total commits to the home-assistant organization, 20 commits to home-assistant") -- [Guyanthalas (@Guyanthalas)](https://github.com/Guyanthalas "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [gwendalg (@gwendalg)](https://github.com/gwendalg "3 total commits to the home-assistant organization, 3 commits to home-assistant") -- [Hamid (@hamid-elaosta)](https://github.com/hamid-elaosta "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") -- [Hao Hu (@howiehu)](https://github.com/howiehu "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") -- [happyleavesaoc (@happyleavesaoc)](https://github.com/happyleavesaoc "109 total commits to the home-assistant organization, 86 commits to home-assistant, 22 commits to home-assistant.github.io, 1 commit to home-assistant-polymer") -- [Harald Nagel (@haraldnagel)](https://github.com/haraldnagel "8 total commits to the home-assistant organization, 6 commits to home-assistant, 2 commits to home-assistant.github.io") +- [happyleavesaoc (@happyleavesaoc)](https://github.com/happyleavesaoc "114 total commits to the home-assistant organization, 90 commits to home-assistant, 23 commits to home-assistant.github.io, 1 commit to home-assistant-polymer") +- [Harald Nagel (@haraldnagel)](https://github.com/haraldnagel "6 total commits to the home-assistant organization, 6 commits to home-assistant") - [Hari Menon (@floydpink)](https://github.com/floydpink "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [Harris Borawski (@hborawski)](https://github.com/hborawski "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [hawk259 (@hawk259)](https://github.com/hawk259 "13 total commits to the home-assistant organization, 7 commits to home-assistant, 5 commits to home-assistant.github.io, 1 commit to home-assistant-polymer") - [Heath Paddock (@heathbar)](https://github.com/heathbar "6 total commits to the home-assistant organization, 6 commits to home-assistant") - [Heiko Rothe (@mKeRix)](https://github.com/mKeRix "20 total commits to the home-assistant organization, 15 commits to home-assistant, 5 commits to home-assistant.github.io") -- [Heiko Thiery (@hthiery)](https://github.com/hthiery "4 total commits to the home-assistant organization, 2 commits to home-assistant, 2 commits to home-assistant.github.io") +- [Heiko Thiery (@hthiery)](https://github.com/hthiery "3 total commits to the home-assistant organization, 3 commits to home-assistant") - [Hellowlol (@Hellowlol)](https://github.com/Hellowlol "4 total commits to the home-assistant organization, 3 commits to netdisco, 1 commit to appdaemon") - [Helmut Januschka (@hjanuschka)](https://github.com/hjanuschka "3 total commits to the home-assistant organization, 3 commits to issue-bot") - [Henning Dickten (@hensing)](https://github.com/hensing "2 total commits to the home-assistant organization, 2 commits to home-assistant") -- [Henrik Aronsson (@heennkkee)](https://github.com/heennkkee "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [Henrik Nicolaisen (@hmn)](https://github.com/hmn "6 total commits to the home-assistant organization, 6 commits to home-assistant") - [Hernán Rossetto (@hmronline)](https://github.com/hmronline "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [heytcass (@heytcass)](https://github.com/heytcass "5 total commits to the home-assistant organization, 5 commits to home-assistant.github.io") @@ -371,47 +382,44 @@ This page contains a list of people who have contributed in one way or another t - [Hugo Dupras (@jabesq)](https://github.com/jabesq "28 total commits to the home-assistant organization, 20 commits to home-assistant, 8 commits to home-assistant.github.io") - [Hugo Gresse (@HugoGresse)](https://github.com/HugoGresse "8 total commits to the home-assistant organization, 8 commits to home-assistant.github.io") - [Hung Le (@hungle)](https://github.com/hungle "1 total commits to the home-assistant organization, 1 commit to libcoap") -- [Huw Davies (@beardedgeek)](https://github.com/beardedgeek "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [Hydreliox (@HydrelioxGitHub)](https://github.com/HydrelioxGitHub "46 total commits to the home-assistant organization, 34 commits to home-assistant, 12 commits to home-assistant.github.io") -- [Iain Matchett (@matchett808)](https://github.com/matchett808 "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [Ian Copp (@icopp)](https://github.com/icopp "3 total commits to the home-assistant organization, 3 commits to home-assistant") - [ianj001 (@ianj001)](https://github.com/ianj001 "7 total commits to the home-assistant organization, 7 commits to home-assistant.github.io") - [icovada (@icovada)](https://github.com/icovada "6 total commits to the home-assistant organization, 3 commits to home-assistant, 3 commits to home-assistant.github.io") +- [Igor Bernstein (@igorbernstein2)](https://github.com/igorbernstein2 "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Igor Shults (@ishults)](https://github.com/ishults "12 total commits to the home-assistant organization, 6 commits to home-assistant, 5 commits to home-assistant.github.io, 1 commit to home-assistant-polymer") -- [Ioan Loosley (@ioangogo)](https://github.com/ioangogo "9 total commits to the home-assistant organization, 9 commits to home-assistant.github.io") -- [IoTmessenger (@IoTmessenger)](https://github.com/IoTmessenger "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") +- [Ioan Loosley (@ioangogo)](https://github.com/ioangogo "10 total commits to the home-assistant organization, 10 commits to home-assistant.github.io") - [Issac Kelly (@issackelly)](https://github.com/issackelly "3 total commits to the home-assistant organization, 3 commits to home-assistant") -- [J-CMartin (@J-CMartin)](https://github.com/J-CMartin "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") -- [J. B. Rainsberger (@jbrains)](https://github.com/jbrains "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [Jacen (@jacen92)](https://github.com/jacen92 "2 total commits to the home-assistant organization, 2 commits to pi-gen") - [jack (@jackmakesthings)](https://github.com/jackmakesthings "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [Jack Chapple (@jchapple)](https://github.com/jchapple "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Jack Fan (@JackWindows)](https://github.com/JackWindows "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Jack Minardi (@jminardi)](https://github.com/jminardi "8 total commits to the home-assistant organization, 8 commits to home-assistant") -- [Jacob Mansfield (@cyberjacob)](https://github.com/cyberjacob "2 total commits to the home-assistant organization, 2 commits to home-assistant") +- [Jacob Mansfield (@cyberjacob)](https://github.com/cyberjacob "3 total commits to the home-assistant organization, 3 commits to home-assistant") - [Jacob Minnis (@jminn)](https://github.com/jminn "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Jacob Siverskog (@jsiverskog)](https://github.com/jsiverskog "1 total commits to the home-assistant organization, 1 commit to pi-gen") -- [Jacob Tomlinson (@jacobtomlinson)](https://github.com/jacobtomlinson "8 total commits to the home-assistant organization, 6 commits to home-assistant.github.io, 2 commits to home-assistant") +- [Jacob Tomlinson (@jacobtomlinson)](https://github.com/jacobtomlinson "6 total commits to the home-assistant organization, 4 commits to home-assistant.github.io, 2 commits to home-assistant") - [Jaimyn Mayer (@jabelone)](https://github.com/jabelone "1 total commits to the home-assistant organization, 1 commit to hassbian-scripts") -- [Jake McCrary (@jakemcc)](https://github.com/jakemcc "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [Jakub Bittner (@rexcze)](https://github.com/rexcze "2 total commits to the home-assistant organization, 2 commits to home-assistant-polymer") - [James Cole (@jamespcole)](https://github.com/jamespcole "94 total commits to the home-assistant organization, 93 commits to home-assistant, 1 commit to home-assistant-js") -- [James Ruan (@jamesruan)](https://github.com/jamesruan "1 total commits to the home-assistant organization, 1 commit to pi-gen") -- [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") +- [James Marsh (@doctorjames)](https://github.com/doctorjames "2 total commits to the home-assistant organization, 2 commits to home-assistant") +- [James Ruan (@jamesruan)](https://github.com/jamesruan "2 total commits to the home-assistant organization, 2 commits to pi-gen") +- [Jamie van Dyke (@fearoffish)](https://github.com/fearoffish "1 total commits to the home-assistant organization, 1 commit to home-assistant-iOS") - [JammyDodger231 (@JammyDodger231)](https://github.com/JammyDodger231 "4 total commits to the home-assistant organization, 4 commits to home-assistant.github.io") -- [Jan Almeroth (@jalmeroth)](https://github.com/jalmeroth "8 total commits to the home-assistant organization, 5 commits to home-assistant, 2 commits to home-assistant.github.io, 1 commit to home-assistant-polymer") +- [Jan Almeroth (@jalmeroth)](https://github.com/jalmeroth "6 total commits to the home-assistant organization, 5 commits to home-assistant, 1 commit to home-assistant-polymer") - [Jan Harkes (@jaharkes)](https://github.com/jaharkes "110 total commits to the home-assistant organization, 100 commits to home-assistant, 10 commits to netdisco") - [Jan Losinski (@janLo)](https://github.com/janLo "21 total commits to the home-assistant organization, 16 commits to home-assistant, 5 commits to home-assistant.github.io") - [Jan Pobořil (@iBobik)](https://github.com/iBobik "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [Jan Willhaus (@janwh)](https://github.com/janwh "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") -- [Janne Grunau (@jannau)](https://github.com/jannau "5 total commits to the home-assistant organization, 3 commits to home-assistant, 2 commits to home-assistant.github.io") -- [Jared Beckham (@jtbeckha)](https://github.com/jtbeckha "4 total commits to the home-assistant organization, 2 commits to home-assistant, 2 commits to home-assistant.github.io") +- [Janne Grunau (@jannau)](https://github.com/jannau "3 total commits to the home-assistant organization, 3 commits to home-assistant") +- [Jared Beckham (@jtbeckha)](https://github.com/jtbeckha "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Jared J. (@jjensn)](https://github.com/jjensn "1 total commits to the home-assistant organization, 1 commit to netdisco") - [Jason Carter (@JasonCarter80)](https://github.com/JasonCarter80 "7 total commits to the home-assistant organization, 4 commits to home-assistant, 3 commits to home-assistant.github.io") - [Jason Hite (@jasonmhite)](https://github.com/jasonmhite "6 total commits to the home-assistant organization, 6 commits to appdaemon") - [Javier González Calleja (@gonzalezcalleja)](https://github.com/gonzalezcalleja "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Jay Stevens (@Jay2645)](https://github.com/Jay2645 "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [JAYMAN-ATX (@JAYMAN-ATX)](https://github.com/JAYMAN-ATX "2 total commits to the home-assistant organization, 2 commits to homebridge-homeassistant") +- [JC Connell (@jcconnell)](https://github.com/jcconnell "7 total commits to the home-assistant organization, 4 commits to home-assistant.github.io, 3 commits to home-assistant") - [Jean Regisser (@jeanregisser)](https://github.com/jeanregisser "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Jean-Michel Julien (@KurdyMalloy)](https://github.com/KurdyMalloy "1 total commits to the home-assistant organization, 1 commit to libcoap") - [Jean-Philippe Bouillot (@Jypy)](https://github.com/Jypy "2 total commits to the home-assistant organization, 2 commits to home-assistant") @@ -420,43 +428,44 @@ This page contains a list of people who have contributed in one way or another t - [Jeff Wilson (@jawilson)](https://github.com/jawilson "24 total commits to the home-assistant organization, 19 commits to home-assistant, 5 commits to home-assistant.github.io") - [Jeffrey Lin (@linjef)](https://github.com/linjef "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Jens (@jhoepken)](https://github.com/jhoepken "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") -- [Jens Østergaard Nielsen (@dingusdk)](https://github.com/dingusdk "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") -- [Jerad Meisner (@jeradM)](https://github.com/jeradM "2 total commits to the home-assistant organization, 2 commits to home-assistant") +- [Jens Østergaard Nielsen (@dingusdk)](https://github.com/dingusdk "5 total commits to the home-assistant organization, 3 commits to home-assistant.github.io, 2 commits to home-assistant") +- [Jerad Meisner (@jeradM)](https://github.com/jeradM "5 total commits to the home-assistant organization, 5 commits to home-assistant") - [Jeremiah Wuenschel (@jer)](https://github.com/jer "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") -- [Jeremy (@Wutname1)](https://github.com/Wutname1 "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [Jeremy Williams (@jwillaz)](https://github.com/jwillaz "5 total commits to the home-assistant organization, 5 commits to home-assistant.github.io") - [jeremysv (@jeremysv)](https://github.com/jeremysv "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") -- [Jeroen ter Heerdt (@jeroenterheerdt)](https://github.com/jeroenterheerdt "29 total commits to the home-assistant organization, 16 commits to home-assistant, 13 commits to home-assistant.github.io") +- [Jeroen ter Heerdt (@jeroenterheerdt)](https://github.com/jeroenterheerdt "35 total commits to the home-assistant organization, 19 commits to home-assistant, 16 commits to home-assistant.github.io") - [Jerold Albertson (@jeroldalbertson-wf)](https://github.com/jeroldalbertson-wf "5 total commits to the home-assistant organization, 5 commits to home-assistant.github.io") -- [Jerry Workman (@JerryWorkman)](https://github.com/JerryWorkman "4 total commits to the home-assistant organization, 4 commits to home-assistant.github.io") -- [Jesse Hills (@jesserockz)](https://github.com/jesserockz "3 total commits to the home-assistant organization, 3 commits to home-assistant") +- [Jerry Workman (@JerryWorkman)](https://github.com/JerryWorkman "7 total commits to the home-assistant organization, 7 commits to home-assistant.github.io") +- [Jesse Hills (@jesserockz)](https://github.com/jesserockz "9 total commits to the home-assistant organization, 9 commits to home-assistant") - [Jesse Newland (@jnewland)](https://github.com/jnewland "14 total commits to the home-assistant organization, 11 commits to home-assistant, 3 commits to hubot-home-assistant") - [JesseWebDotCom (@JesseWebDotCom)](https://github.com/JesseWebDotCom "16 total commits to the home-assistant organization, 8 commits to home-assistant, 8 commits to home-assistant.github.io") - [jgrieger1 (@jgrieger1)](https://github.com/jgrieger1 "1 total commits to the home-assistant organization, 1 commit to appdaemon") +- [jiafengwang (@jiafengwang)](https://github.com/jiafengwang "1 total commits to the home-assistant organization, 1 commit to appdaemon") - [jimbob1001 (@jimbob1001)](https://github.com/jimbob1001 "4 total commits to the home-assistant organization, 4 commits to home-assistant.github.io") - [Joakim Nohlgård (@gebart)](https://github.com/gebart "2 total commits to the home-assistant organization, 2 commits to libcoap") -- [Joakim Sørensen (@ludeeus)](https://github.com/ludeeus "43 total commits to the home-assistant organization, 30 commits to hassbian-scripts, 13 commits to home-assistant.github.io") +- [Joakim Sørensen (@ludeeus)](https://github.com/ludeeus "71 total commits to the home-assistant organization, 56 commits to hassbian-scripts, 15 commits to home-assistant.github.io") - [Job (@jmvermeulen)](https://github.com/jmvermeulen "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [jodur (@jodur)](https://github.com/jodur "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") -- [Joe Lu (@snjoetw)](https://github.com/snjoetw "16 total commits to the home-assistant organization, 12 commits to home-assistant, 4 commits to home-assistant.github.io") +- [Joe Lu (@snjoetw)](https://github.com/snjoetw "22 total commits to the home-assistant organization, 17 commits to home-assistant, 5 commits to home-assistant.github.io") - [Joe McMonagle (@joemcmonagle)](https://github.com/joemcmonagle "13 total commits to the home-assistant organization, 13 commits to home-assistant.github.io") - [joe248 (@joe248)](https://github.com/joe248 "3 total commits to the home-assistant organization, 3 commits to home-assistant") - [Joeboyc2 (@Joeboyc2)](https://github.com/Joeboyc2 "15 total commits to the home-assistant organization, 15 commits to home-assistant.github.io") - [Johan Bloemberg (@aequitas)](https://github.com/aequitas "43 total commits to the home-assistant organization, 35 commits to home-assistant, 7 commits to home-assistant.github.io, 1 commit to netdisco") - [Johan Haals (@jhaals)](https://github.com/jhaals "1 total commits to the home-assistant organization, 1 commit to appdaemon") - [Johan van der Kuijl (@Rubyan)](https://github.com/Rubyan "4 total commits to the home-assistant organization, 3 commits to home-assistant.github.io, 1 commit to appdaemon") -- [Johann Kellerman (@kellerza)](https://github.com/kellerza "144 total commits to the home-assistant organization, 114 commits to home-assistant, 30 commits to home-assistant.github.io") +- [Johann Kellerman (@kellerza)](https://github.com/kellerza "163 total commits to the home-assistant organization, 133 commits to home-assistant, 30 commits to home-assistant.github.io") - [Johannes K. (@roadrash2108)](https://github.com/roadrash2108 "4 total commits to the home-assistant organization, 4 commits to home-assistant.github.io") - [John (@J-C-B)](https://github.com/J-C-B "5 total commits to the home-assistant organization, 5 commits to home-assistant.github.io") -- [John Arild Berentsen (@turbokongen)](https://github.com/turbokongen "200 total commits to the home-assistant organization, 148 commits to home-assistant, 37 commits to home-assistant.github.io, 15 commits to home-assistant-polymer") +- [John Allen (@jra3)](https://github.com/jra3 "2 total commits to the home-assistant organization, 2 commits to home-assistant") +- [John Arild Berentsen (@turbokongen)](https://github.com/turbokongen "202 total commits to the home-assistant organization, 150 commits to home-assistant, 37 commits to home-assistant.github.io, 15 commits to home-assistant-polymer") - [John Lindley (@jwl17330536)](https://github.com/jwl17330536 "1 total commits to the home-assistant organization, 1 commit to appdaemon") - [John McLaughlin (@loghound)](https://github.com/loghound "2 total commits to the home-assistant organization, 2 commits to home-assistant") -- [John Mihalic (@mezz64)](https://github.com/mezz64 "46 total commits to the home-assistant organization, 32 commits to home-assistant, 12 commits to home-assistant.github.io, 1 commit to hadashboard, 1 commit to home-assistant-polymer") +- [John Mihalic (@mezz64)](https://github.com/mezz64 "49 total commits to the home-assistant organization, 35 commits to home-assistant, 12 commits to home-assistant.github.io, 1 commit to hadashboard, 1 commit to home-assistant-polymer") - [Johnny Chadda (@joch)](https://github.com/joch "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") - [Jon (@JonMurphy)](https://github.com/JonMurphy "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [Jon Caruana (@joncar)](https://github.com/joncar "3 total commits to the home-assistant organization, 3 commits to home-assistant") -- [Jon Griffith (@arretx)](https://github.com/arretx "11 total commits to the home-assistant organization, 10 commits to home-assistant.github.io, 1 commit to appdaemon") -- [Jon Maddox (@maddox)](https://github.com/maddox "103 total commits to the home-assistant organization, 79 commits to home-assistant, 16 commits to homebridge-homeassistant, 8 commits to home-assistant.github.io") +- [Jon Griffith (@arretx)](https://github.com/arretx "12 total commits to the home-assistant organization, 11 commits to home-assistant.github.io, 1 commit to appdaemon") +- [Jon Maddox (@maddox)](https://github.com/maddox "106 total commits to the home-assistant organization, 81 commits to home-assistant, 16 commits to homebridge-homeassistant, 9 commits to home-assistant.github.io") - [Jonas Pedersen (@JonasPed)](https://github.com/JonasPed "1 total commits to the home-assistant organization, 1 commit to appdaemon") - [Jonatan Castro (@jcastro)](https://github.com/jcastro "7 total commits to the home-assistant organization, 7 commits to home-assistant.github.io") - [Jonathan Baginski (@patchedsoul)](https://github.com/patchedsoul "115 total commits to the home-assistant organization, 87 commits to fabric-home-assistant, 28 commits to home-assistant.github.io") @@ -472,23 +481,23 @@ This page contains a list of people who have contributed in one way or another t - [Josh Wright (@JshWright)](https://github.com/JshWright "28 total commits to the home-assistant organization, 20 commits to home-assistant, 8 commits to home-assistant.github.io") - [jpcomtois (@jpcomtois)](https://github.com/jpcomtois "1 total commits to the home-assistant organization, 1 commit to libcoap") - [JudgeDredd (@JudgeDreddKLC)](https://github.com/JudgeDreddKLC "10 total commits to the home-assistant organization, 10 commits to home-assistant.github.io") -- [Juggels (@Juggels)](https://github.com/Juggels "8 total commits to the home-assistant organization, 5 commits to home-assistant, 3 commits to home-assistant.github.io") +- [Juggels (@Juggels)](https://github.com/Juggels "9 total commits to the home-assistant organization, 6 commits to home-assistant, 3 commits to home-assistant.github.io") - [Julian Kaffke (@jaykay)](https://github.com/jaykay "1 total commits to the home-assistant organization, 1 commit to hassio-addons") - [Julian Kahnert (@JulianKahnert)](https://github.com/JulianKahnert "5 total commits to the home-assistant organization, 3 commits to home-assistant.github.io, 2 commits to home-assistant") -- [Julius Mittenzwei (@Julius2342)](https://github.com/Julius2342 "19 total commits to the home-assistant organization, 12 commits to home-assistant, 7 commits to home-assistant.github.io") +- [Julius Mittenzwei (@Julius2342)](https://github.com/Julius2342 "31 total commits to the home-assistant organization, 24 commits to home-assistant, 7 commits to home-assistant.github.io") - [jumpkick (@jumpkick)](https://github.com/jumpkick "15 total commits to the home-assistant organization, 12 commits to home-assistant, 3 commits to home-assistant.github.io") - [Justin Dray (@justin8)](https://github.com/justin8 "9 total commits to the home-assistant organization, 7 commits to home-assistant.github.io, 2 commits to home-assistant") - [Justin Hayes (@GussyH)](https://github.com/GussyH "7 total commits to the home-assistant organization, 7 commits to hadashboard") - [Justin Weberg (@justweb1)](https://github.com/justweb1 "26 total commits to the home-assistant organization, 13 commits to home-assistant-polymer, 7 commits to hassbot, 4 commits to home-assistant, 1 commit to home-assistant-js, 1 commit to hassio") - [Justyn Shull (@justyns)](https://github.com/justyns "5 total commits to the home-assistant organization, 5 commits to home-assistant") -- [Kane610 (@Kane610)](https://github.com/Kane610 "23 total commits to the home-assistant organization, 12 commits to home-assistant, 9 commits to home-assistant.github.io, 1 commit to netdisco, 1 commit to home-assistant-polymer") +- [Kane610 (@Kane610)](https://github.com/Kane610 "32 total commits to the home-assistant organization, 17 commits to home-assistant, 13 commits to home-assistant.github.io, 1 commit to netdisco, 1 commit to home-assistant-polymer") - [Karen Goode (@kfgoode)](https://github.com/kfgoode "4 total commits to the home-assistant organization, 4 commits to home-assistant") -- [karlkar (@karlkar)](https://github.com/karlkar "5 total commits to the home-assistant organization, 5 commits to home-assistant") +- [karlkar (@karlkar)](https://github.com/karlkar "14 total commits to the home-assistant organization, 9 commits to home-assistant, 5 commits to home-assistant.github.io") - [Keaton Taylor (@keatontaylor)](https://github.com/keatontaylor "7 total commits to the home-assistant organization, 4 commits to home-assistant, 3 commits to home-assistant.github.io") - [Keith Lamprecht (@Nixon506E)](https://github.com/Nixon506E "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Ken Bannister (@kb2ma)](https://github.com/kb2ma "1 total commits to the home-assistant organization, 1 commit to libcoap") - [Ken Davidson (@kwdavidson)](https://github.com/kwdavidson "13 total commits to the home-assistant organization, 11 commits to home-assistant.github.io, 2 commits to appdaemon") -- [kennedyshead (@kennedyshead)](https://github.com/kennedyshead "8 total commits to the home-assistant organization, 8 commits to home-assistant") +- [kennedyshead (@kennedyshead)](https://github.com/kennedyshead "10 total commits to the home-assistant organization, 10 commits to home-assistant") - [Kenny Millington (@kmdm)](https://github.com/kmdm "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Kevin (@Mister-Espria)](https://github.com/Mister-Espria "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Kevin Fronczak (@fronzbot)](https://github.com/fronzbot "19 total commits to the home-assistant organization, 11 commits to home-assistant, 8 commits to home-assistant.github.io") @@ -498,10 +507,10 @@ This page contains a list of people who have contributed in one way or another t - [Keyasha Brothern (@KMBrothern)](https://github.com/KMBrothern "4 total commits to the home-assistant organization, 4 commits to home-assistant.github.io") - [kfcook (@kfcook)](https://github.com/kfcook "3 total commits to the home-assistant organization, 3 commits to home-assistant") - [kireyeu (@kireyeu)](https://github.com/kireyeu "4 total commits to the home-assistant organization, 4 commits to home-assistant-notebooks") -- [Klaas Hoekema (@KlaasH)](https://github.com/KlaasH "12 total commits to the home-assistant organization, 5 commits to home-assistant, 5 commits to home-assistant.github.io, 2 commits to home-assistant-polymer") +- [Klaas Hoekema (@KlaasH)](https://github.com/KlaasH "12 total commits to the home-assistant organization, 5 commits to home-assistant.github.io, 5 commits to home-assistant, 2 commits to home-assistant-polymer") - [Klaus (@k-laus)](https://github.com/k-laus "1 total commits to the home-assistant organization, 1 commit to appdaemon") - [Krasimir Chariyski (@Chariyski)](https://github.com/Chariyski "4 total commits to the home-assistant organization, 4 commits to home-assistant.github.io") -- [Krasimir Zhelev (@zhelev)](https://github.com/zhelev "1 total commits to the home-assistant organization, 1 commit to netdisco") +- [Krasimir Zhelev (@zhelev)](https://github.com/zhelev "3 total commits to the home-assistant organization, 2 commits to home-assistant, 1 commit to netdisco") - [kroimon (@kroimon)](https://github.com/kroimon "1 total commits to the home-assistant organization, 1 commit to netdisco") - [Kyle Hendricks (@kylehendricks)](https://github.com/kylehendricks "6 total commits to the home-assistant organization, 6 commits to home-assistant") - [lamiskin (@lamiskin)](https://github.com/lamiskin "4 total commits to the home-assistant organization, 4 commits to home-assistant.github.io") @@ -509,21 +518,22 @@ This page contains a list of people who have contributed in one way or another t - [lee-js (@lee-js)](https://github.com/lee-js "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [Leon99 (@Leon99)](https://github.com/Leon99 "1 total commits to the home-assistant organization, 1 commit to appdaemon") - [Leonardo Saraiva (@vyper)](https://github.com/vyper "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") -- [Lev Aronsky (@aronsky)](https://github.com/aronsky "11 total commits to the home-assistant organization, 8 commits to home-assistant, 3 commits to home-assistant.github.io") -- [Lewis Juggins (@lwis)](https://github.com/lwis "64 total commits to the home-assistant organization, 51 commits to home-assistant, 12 commits to home-assistant.github.io, 1 commit to home-assistant-polymer") +- [Lev Aronsky (@aronsky)](https://github.com/aronsky "14 total commits to the home-assistant organization, 11 commits to home-assistant, 3 commits to home-assistant.github.io") +- [Lewis Juggins (@lwis)](https://github.com/lwis "65 total commits to the home-assistant organization, 52 commits to home-assistant, 12 commits to home-assistant.github.io, 1 commit to home-assistant-polymer") - [lichtteil (@lichtteil)](https://github.com/lichtteil "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [Lindsay Ward (@lindsaymarkward)](https://github.com/lindsaymarkward "17 total commits to the home-assistant organization, 13 commits to home-assistant.github.io, 4 commits to home-assistant") - [linuxlurak (@linuxlurak)](https://github.com/linuxlurak "5 total commits to the home-assistant organization, 3 commits to home-assistant.github.io, 2 commits to hadashboard") - [linvinus (@linvinus)](https://github.com/linvinus "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") - [lrmate (@lrmate)](https://github.com/lrmate "3 total commits to the home-assistant organization, 3 commits to home-assistant") - [Luar Roji (@cyberplant)](https://github.com/cyberplant "6 total commits to the home-assistant organization, 4 commits to home-assistant.github.io, 2 commits to home-assistant") -- [luca-angemi (@luca-angemi)](https://github.com/luca-angemi "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") +- [Luc Touraille (@stilllman)](https://github.com/stilllman "1 total commits to the home-assistant organization, 1 commit to netdisco") +- [Luca Angemi (@luca-angemi)](https://github.com/luca-angemi "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") - [LucaSoldi (@LucaSoldi)](https://github.com/LucaSoldi "6 total commits to the home-assistant organization, 6 commits to home-assistant") - [Lucien Guimier (@guimier)](https://github.com/guimier "1 total commits to the home-assistant organization, 1 commit to libcoap") - [Ludovic (@ldvc)](https://github.com/ldvc "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") - [Ludovico de Nittis (@RyuzakiKK)](https://github.com/RyuzakiKK "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [Lukas (@lukas-hetzenecker)](https://github.com/lukas-hetzenecker "14 total commits to the home-assistant organization, 10 commits to home-assistant, 4 commits to home-assistant.github.io") -- [Lukas Barth (@tinloaf)](https://github.com/tinloaf "32 total commits to the home-assistant organization, 19 commits to home-assistant, 11 commits to home-assistant.github.io, 2 commits to home-assistant-polymer") +- [Lukas Barth (@tinloaf)](https://github.com/tinloaf "33 total commits to the home-assistant organization, 20 commits to home-assistant, 11 commits to home-assistant.github.io, 2 commits to home-assistant-polymer") - [Lukas Ecklmayr (@outrun0506)](https://github.com/outrun0506 "6 total commits to the home-assistant organization, 5 commits to home-assistant.github.io, 1 commit to home-assistant-polymer") - [Lukas Porubcan (@Luc3as)](https://github.com/Luc3as "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") - [Luke Armstrong (@lukearmstrong)](https://github.com/lukearmstrong "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") @@ -535,10 +545,11 @@ This page contains a list of people who have contributed in one way or another t - [Magnus Ihse Bursie (@magicus)](https://github.com/magicus "16 total commits to the home-assistant organization, 9 commits to home-assistant, 4 commits to netdisco, 3 commits to home-assistant.github.io") - [Magnus Lyckå (@magnus-lycka)](https://github.com/magnus-lycka "1 total commits to the home-assistant organization, 1 commit to netdisco") - [MagnusKnutas (@MagnusKnutas)](https://github.com/MagnusKnutas "29 total commits to the home-assistant organization, 29 commits to home-assistant") -- [Mahasri Kalavala (@skalavala)](https://github.com/skalavala "20 total commits to the home-assistant organization, 20 commits to home-assistant.github.io") +- [Mahasri Kalavala (@skalavala)](https://github.com/skalavala "28 total commits to the home-assistant organization, 28 commits to home-assistant.github.io") - [Maikel Wever (@maikelwever)](https://github.com/maikelwever "2 total commits to the home-assistant organization, 2 commits to home-assistant") +- [makemeasandwich (@makemeasandwich)](https://github.com/makemeasandwich "12 total commits to the home-assistant organization, 12 commits to home-assistant") - [Marc Egli (@frog32)](https://github.com/frog32 "11 total commits to the home-assistant organization, 8 commits to home-assistant, 3 commits to home-assistant.github.io") -- [Marc Forth (@mf-social)](https://github.com/mf-social "13 total commits to the home-assistant organization, 12 commits to home-assistant.github.io, 1 commit to fabric-home-assistant") +- [Marc Forth (@mf-social)](https://github.com/mf-social "23 total commits to the home-assistant organization, 22 commits to home-assistant.github.io, 1 commit to fabric-home-assistant") - [Marc Pabst (@mxtra)](https://github.com/mxtra "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") - [Marc Plano-Lesay (@Kernald)](https://github.com/Kernald "12 total commits to the home-assistant organization, 10 commits to home-assistant.github.io, 2 commits to home-assistant") - [Marcel030nl (@Marcel030nl)](https://github.com/Marcel030nl "5 total commits to the home-assistant organization, 5 commits to home-assistant.github.io") @@ -547,10 +558,11 @@ This page contains a list of people who have contributed in one way or another t - [Marco (@marconett)](https://github.com/marconett "3 total commits to the home-assistant organization, 3 commits to appdaemon") - [Marcus Schmidt (@mar-schmidt)](https://github.com/mar-schmidt "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Marijn Giesen (@marijngiesen)](https://github.com/marijngiesen "5 total commits to the home-assistant organization, 5 commits to hadashboard") -- [Marius (@ciotlosm)](https://github.com/ciotlosm "12 total commits to the home-assistant organization, 7 commits to home-assistant-polymer, 5 commits to home-assistant") +- [Marius (@ciotlosm)](https://github.com/ciotlosm "13 total commits to the home-assistant organization, 8 commits to home-assistant-polymer, 5 commits to home-assistant") - [Mark Coombes (@marthoc)](https://github.com/marthoc "3 total commits to the home-assistant organization, 3 commits to home-assistant") - [Mark Grosen (@mgsb)](https://github.com/mgsb "1 total commits to the home-assistant organization, 1 commit to netdisco") - [Mark Huson (@mehuman)](https://github.com/mehuman "11 total commits to the home-assistant organization, 11 commits to home-assistant.github.io") +- [mark9white (@mark9white)](https://github.com/mark9white "1 total commits to the home-assistant organization, 1 commit to hassio") - [markferry (@markferry)](https://github.com/markferry "3 total commits to the home-assistant organization, 3 commits to home-assistant") - [Markus (@iMarkus)](https://github.com/iMarkus "3 total commits to the home-assistant organization, 2 commits to home-assistant, 1 commit to hassio") - [Markus Becker (@markushx)](https://github.com/markushx "6 total commits to the home-assistant organization, 6 commits to libcoap") @@ -559,17 +571,17 @@ This page contains a list of people who have contributed in one way or another t - [Martin Berg (@mbrrg)](https://github.com/mbrrg "7 total commits to the home-assistant organization, 4 commits to home-assistant, 3 commits to home-assistant.github.io") - [Martin Donlon (@wickerwaka)](https://github.com/wickerwaka "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Martin Eberhardt (@DarkFox)](https://github.com/DarkFox "4 total commits to the home-assistant organization, 4 commits to home-assistant.github.io") -- [Martin Hjelmare (@MartinHjelmare)](https://github.com/MartinHjelmare "143 total commits to the home-assistant organization, 114 commits to home-assistant, 29 commits to home-assistant.github.io") +- [Martin Hjelmare (@MartinHjelmare)](https://github.com/MartinHjelmare "146 total commits to the home-assistant organization, 117 commits to home-assistant, 29 commits to home-assistant.github.io") - [Martin Rowan (@shortbloke)](https://github.com/shortbloke "3 total commits to the home-assistant organization, 3 commits to home-assistant") - [Martin Vacula (@MatoKafkac)](https://github.com/MatoKafkac "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Martin Weinelt (@mweinelt)](https://github.com/mweinelt "17 total commits to the home-assistant organization, 9 commits to home-assistant, 7 commits to home-assistant.github.io, 1 commit to home-assistant-polymer") - [Martokk (@martokk)](https://github.com/martokk "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [Mateusz Drab (@mateuszdrab)](https://github.com/mateuszdrab "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Mathew Peterson (@mathewpeterson)](https://github.com/mathewpeterson "1 total commits to the home-assistant organization, 1 commit to homebridge-homeassistant") -- [Matt N. (@mnoorenberghe)](https://github.com/mnoorenberghe "52 total commits to the home-assistant organization, 24 commits to home-assistant-iOS, 17 commits to home-assistant.github.io, 9 commits to home-assistant, 1 commit to homebridge-homeassistant, 1 commit to home-assistant-polymer") +- [Matt N. (@mnoorenberghe)](https://github.com/mnoorenberghe "53 total commits to the home-assistant organization, 25 commits to home-assistant-iOS, 17 commits to home-assistant.github.io, 9 commits to home-assistant, 1 commit to home-assistant-polymer, 1 commit to homebridge-homeassistant") - [Matt Rogers (@rogersmj)](https://github.com/rogersmj "20 total commits to the home-assistant organization, 20 commits to hadashboard") -- [Matt Schmitt (@schmittx)](https://github.com/schmittx "37 total commits to the home-assistant organization, 23 commits to homebridge-homeassistant, 7 commits to home-assistant, 4 commits to home-assistant.github.io, 3 commits to home-assistant-polymer") -- [Matt White (@mw-white)](https://github.com/mw-white "10 total commits to the home-assistant organization, 5 commits to home-assistant, 5 commits to home-assistant.github.io") +- [Matt Schmitt (@schmittx)](https://github.com/schmittx "66 total commits to the home-assistant organization, 52 commits to homebridge-homeassistant, 7 commits to home-assistant, 4 commits to home-assistant.github.io, 3 commits to home-assistant-polymer") +- [Matt White (@mw-white)](https://github.com/mw-white "10 total commits to the home-assistant organization, 5 commits to home-assistant.github.io, 5 commits to home-assistant") - [Matteo Lampugnani (@t30)](https://github.com/t30 "7 total commits to the home-assistant organization, 7 commits to home-assistant.github.io") - [Matthew Bowen (@mgbowen)](https://github.com/mgbowen "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [Matthew Garrett (@mjg59)](https://github.com/mjg59 "10 total commits to the home-assistant organization, 7 commits to home-assistant, 3 commits to home-assistant.github.io") @@ -578,15 +590,17 @@ This page contains a list of people who have contributed in one way or another t - [Matthias Dötsch (@brainexe)](https://github.com/brainexe "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") - [mattie47 (@mattie47)](https://github.com/mattie47 "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [mauriciobonani (@mauriciobonani)](https://github.com/mauriciobonani "7 total commits to the home-assistant organization, 7 commits to home-assistant.github.io") +- [Max Prokhorov (@mcspr)](https://github.com/mcspr "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") - [Max Rumpf (@Maxr1998)](https://github.com/Maxr1998 "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") -- [maxlaverse (@maxlaverse)](https://github.com/maxlaverse "5 total commits to the home-assistant organization, 5 commits to home-assistant") +- [maxclaey (@maxclaey)](https://github.com/maxclaey "8 total commits to the home-assistant organization, 5 commits to home-assistant, 3 commits to home-assistant.github.io") +- [maxlaverse (@maxlaverse)](https://github.com/maxlaverse "6 total commits to the home-assistant organization, 6 commits to home-assistant") - [mboeru (@mboeru)](https://github.com/mboeru "1 total commits to the home-assistant organization, 1 commit to home-assistant-iOS") - [Menno Blom (@b10m)](https://github.com/b10m "6 total commits to the home-assistant organization, 3 commits to home-assistant.github.io, 2 commits to home-assistant, 1 commit to netdisco") - [mertenats (@mertenats)](https://github.com/mertenats "4 total commits to the home-assistant organization, 4 commits to home-assistant.github.io") - [Micha LaQua (@milaq)](https://github.com/milaq "3 total commits to the home-assistant organization, 3 commits to home-assistant") - [Michael (@hartmms)](https://github.com/hartmms "6 total commits to the home-assistant organization, 4 commits to home-assistant.github.io, 2 commits to home-assistant") - [Michael Auchter (@auchter)](https://github.com/auchter "13 total commits to the home-assistant organization, 13 commits to home-assistant") -- [Michael Fester (@michaelfester)](https://github.com/michaelfester "5 total commits to the home-assistant organization, 3 commits to home-assistant.github.io, 2 commits to home-assistant") +- [Michael Fester (@michaelfester)](https://github.com/michaelfester "6 total commits to the home-assistant organization, 4 commits to home-assistant.github.io, 2 commits to home-assistant") - [Michael Furtak (@mfurtak)](https://github.com/mfurtak "5 total commits to the home-assistant organization, 5 commits to issue-bot") - [Michael Gilbert (@Zyell)](https://github.com/Zyell "8 total commits to the home-assistant organization, 8 commits to home-assistant") - [Michael Heinemann (@heinemml)](https://github.com/heinemml "2 total commits to the home-assistant organization, 2 commits to home-assistant") @@ -599,8 +613,9 @@ This page contains a list of people who have contributed in one way or another t - [Michel Settembrino (@Michel-Settembrino)](https://github.com/Michel-Settembrino "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [micw (@micw)](https://github.com/micw "8 total commits to the home-assistant organization, 5 commits to home-assistant, 3 commits to home-assistant.github.io") - [Mike Christianson (@MikeChristianson)](https://github.com/MikeChristianson "6 total commits to the home-assistant organization, 6 commits to home-assistant") -- [Mike Megally (@cmsimike)](https://github.com/cmsimike "7 total commits to the home-assistant organization, 7 commits to home-assistant") +- [Mike Megally (@cmsimike)](https://github.com/cmsimike "14 total commits to the home-assistant organization, 9 commits to home-assistant, 5 commits to home-assistant.github.io") - [Mike Nestor (@mnestor)](https://github.com/mnestor "6 total commits to the home-assistant organization, 5 commits to home-assistant, 1 commit to home-assistant-polymer") +- [Mike O'Driscoll (@mikeodr)](https://github.com/mikeodr "8 total commits to the home-assistant organization, 5 commits to home-assistant.github.io, 3 commits to home-assistant") - [Mike Roberts (@m-roberts)](https://github.com/m-roberts "1 total commits to the home-assistant organization, 1 commit to pi-gen") - [Mikkel Høgh (@mikl)](https://github.com/mikl "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [Milan V. (@milanvo)](https://github.com/milanvo "18 total commits to the home-assistant organization, 10 commits to home-assistant, 7 commits to home-assistant.github.io, 1 commit to home-assistant-polymer") @@ -609,15 +624,16 @@ This page contains a list of people who have contributed in one way or another t - [Mister Wil (@MisterWil)](https://github.com/MisterWil "17 total commits to the home-assistant organization, 11 commits to home-assistant, 6 commits to home-assistant.github.io") - [Mitesh Patel (@gurumitts)](https://github.com/gurumitts "9 total commits to the home-assistant organization, 5 commits to home-assistant, 4 commits to home-assistant.github.io") - [Mitko Masarliev (@masarliev)](https://github.com/masarliev "10 total commits to the home-assistant organization, 7 commits to home-assistant, 3 commits to home-assistant.github.io") -- [mjj4791 (@mjj4791)](https://github.com/mjj4791 "22 total commits to the home-assistant organization, 15 commits to home-assistant.github.io, 7 commits to home-assistant") +- [mjj4791 (@mjj4791)](https://github.com/mjj4791 "23 total commits to the home-assistant organization, 15 commits to home-assistant.github.io, 8 commits to home-assistant") - [mmmmmtasty (@mmmmmtasty)](https://github.com/mmmmmtasty "8 total commits to the home-assistant organization, 8 commits to appdaemon") - [Molodax (@Molodax)](https://github.com/Molodax "7 total commits to the home-assistant organization, 7 commits to home-assistant.github.io") - [Moon Shot (@moonshot)](https://github.com/moonshot "2 total commits to the home-assistant organization, 2 commits to home-assistant") -- [moose51789 (@moose51789)](https://github.com/moose51789 "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") - [moskovskiy82 (@moskovskiy82)](https://github.com/moskovskiy82 "6 total commits to the home-assistant organization, 6 commits to home-assistant.github.io") - [motir (@motir)](https://github.com/motir "1 total commits to the home-assistant organization, 1 commit to appdaemon") +- [mradziwo (@mradziwo)](https://github.com/mradziwo "1 total commits to the home-assistant organization, 1 commit to appdaemon") - [mukundv (@mukundv)](https://github.com/mukundv "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [Mārtiņš Grunskis (@grunskis)](https://github.com/grunskis "1 total commits to the home-assistant organization, 1 commit to netdisco") +- [Nash Kaminski (@nkaminski)](https://github.com/nkaminski "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") - [Nate (@BillyNate)](https://github.com/BillyNate "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Nathan Flynn (@eperdeme)](https://github.com/eperdeme "1 total commits to the home-assistant organization, 1 commit to hassio-addons") - [Nathan Henrie (@n8henrie)](https://github.com/n8henrie "19 total commits to the home-assistant organization, 9 commits to home-assistant, 6 commits to home-assistant.github.io, 2 commits to homebridge-homeassistant, 1 commit to appdaemon, 1 commit to home-assistant-polymer") @@ -625,22 +641,21 @@ This page contains a list of people who have contributed in one way or another t - [Nelis Willers (@NelisW)](https://github.com/NelisW "1 total commits to the home-assistant organization, 1 commit to fabric-home-assistant") - [NeLLyMerC (@NeLLyMerC)](https://github.com/NeLLyMerC "5 total commits to the home-assistant organization, 5 commits to home-assistant.github.io") - [neonbunny (@neonbunny)](https://github.com/neonbunny "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") -- [Nicholas Amadori (@namadori)](https://github.com/namadori "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") +- [Nicholas Amadori (@namadori)](https://github.com/namadori "4 total commits to the home-assistant organization, 4 commits to home-assistant.github.io") - [Nicholas Griffin (@nicholasgriffintn)](https://github.com/nicholasgriffintn "6 total commits to the home-assistant organization, 6 commits to home-assistant.github.io") - [Nicholas Sielicki (@sielicki)](https://github.com/sielicki "2 total commits to the home-assistant organization, 2 commits to home-assistant") -- [Nick (@quadportnick)](https://github.com/quadportnick "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Nick Touran (@partofthething)](https://github.com/partofthething "38 total commits to the home-assistant organization, 25 commits to home-assistant, 13 commits to home-assistant.github.io") -- [Nick Waring (@nickwaring)](https://github.com/nickwaring "2 total commits to the home-assistant organization, 2 commits to home-assistant") -- [Nicko van Someren (@nickovs)](https://github.com/nickovs "2 total commits to the home-assistant organization, 2 commits to home-assistant") +- [Nicko van Someren (@nickovs)](https://github.com/nickovs "3 total commits to the home-assistant organization, 3 commits to home-assistant") - [Nicolas Graziano (@ngraziano)](https://github.com/ngraziano "3 total commits to the home-assistant organization, 3 commits to home-assistant") - [Nicolas Martignoni (@martignoni)](https://github.com/martignoni "1 total commits to the home-assistant organization, 1 commit to pi-gen") +- [nielstron (@nielstron)](https://github.com/nielstron "1 total commits to the home-assistant organization, 1 commit to netdisco") - [Nigel Rook (@NigelRook)](https://github.com/NigelRook "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") - [Niklas (@niklaswa)](https://github.com/niklaswa "4 total commits to the home-assistant organization, 4 commits to home-assistant.github.io") -- [Nikolas Beutler (@biacz)](https://github.com/biacz "2 total commits to the home-assistant organization, 2 commits to home-assistant") +- [Niklas Wagner (@Skaronator)](https://github.com/Skaronator "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [Nolan Gilley (@nkgilley)](https://github.com/nkgilley "123 total commits to the home-assistant organization, 95 commits to home-assistant, 28 commits to home-assistant.github.io") - [nordlead2005 (@nordlead2005)](https://github.com/nordlead2005 "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [NotoriousBDG (@notoriousbdg)](https://github.com/notoriousbdg "3 total commits to the home-assistant organization, 3 commits to hassio-addons") -- [NovapaX (@NovapaX)](https://github.com/NovapaX "9 total commits to the home-assistant organization, 4 commits to home-assistant-polymer, 4 commits to home-assistant, 1 commit to home-assistant-assets") +- [NovapaX (@NovapaX)](https://github.com/NovapaX "27 total commits to the home-assistant organization, 21 commits to home-assistant-polymer, 5 commits to home-assistant, 1 commit to home-assistant-assets") - [ntalekt (@ntalekt)](https://github.com/ntalekt "6 total commits to the home-assistant organization, 6 commits to home-assistant.github.io") - [Nuno Sousa (@nunofgs)](https://github.com/nunofgs "5 total commits to the home-assistant organization, 4 commits to home-assistant, 1 commit to homebridge-homeassistant") - [obgm (@obgm)](https://github.com/obgm "480 total commits to the home-assistant organization, 480 commits to libcoap") @@ -648,27 +663,29 @@ This page contains a list of people who have contributed in one way or another t - [Ole-Kenneth (@olekenneth)](https://github.com/olekenneth "1 total commits to the home-assistant organization, 1 commit to homebridge-homeassistant") - [Oleksii Serdiuk (@leppa)](https://github.com/leppa "4 total commits to the home-assistant organization, 4 commits to home-assistant") - [Oliv3rDog (@Oliv3rDog)](https://github.com/Oliv3rDog "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") -- [Oliver (@scarface-4711)](https://github.com/scarface-4711 "24 total commits to the home-assistant organization, 14 commits to home-assistant, 9 commits to home-assistant.github.io, 1 commit to netdisco") +- [Oliver (@scarface-4711)](https://github.com/scarface-4711 "27 total commits to the home-assistant organization, 17 commits to home-assistant, 9 commits to home-assistant.github.io, 1 commit to netdisco") - [Oliver van Porten (@mcdeck)](https://github.com/mcdeck "10 total commits to the home-assistant organization, 10 commits to home-assistant") - [Open Home Automation (@open-homeautomation)](https://github.com/open-homeautomation "41 total commits to the home-assistant organization, 29 commits to home-assistant, 12 commits to home-assistant.github.io") +- [Otto Winter (@OttoWinter)](https://github.com/OttoWinter "45 total commits to the home-assistant organization, 39 commits to home-assistant, 5 commits to home-assistant.github.io, 1 commit to home-assistant-polymer") - [oznu (@oznu)](https://github.com/oznu "1 total commits to the home-assistant organization, 1 commit to homebridge-homeassistant") - [Parker Moore (@parkr)](https://github.com/parkr "60 total commits to the home-assistant organization, 60 commits to home-assistant.github.io") - [pascal (@passie)](https://github.com/passie "4 total commits to the home-assistant organization, 3 commits to home-assistant, 1 commit to home-assistant-polymer") - [Pascal Bach (@bachp)](https://github.com/bachp "10 total commits to the home-assistant organization, 9 commits to home-assistant, 1 commit to netdisco") -- [Pascal Vizeli (@pvizeli)](https://github.com/pvizeli "2415 total commits to the home-assistant organization, 953 commits to hassio, 452 commits to home-assistant, 347 commits to hassio-build, 326 commits to hassio-addons, 307 commits to home-assistant.github.io, 16 commits to hassio-addons-example, 11 commits to hassio-cli, 1 commit to home-assistant-js-websocket, 1 commit to hassio-os, 1 commit to netdisco") +- [Pascal Vizeli (@pvizeli)](https://github.com/pvizeli "2606 total commits to the home-assistant organization, 1041 commits to hassio, 461 commits to home-assistant, 364 commits to hassio-build, 331 commits to hassio-addons, 311 commits to home-assistant.github.io, 67 commits to hassio-os, 16 commits to hassio-addons-example, 13 commits to hassio-cli, 1 commit to home-assistant-js-websocket, 1 commit to netdisco") - [Pat Thoyts (@patthoyts)](https://github.com/patthoyts "2 total commits to the home-assistant organization, 2 commits to netdisco") - [Patrick Aikens (@duckpuppy)](https://github.com/duckpuppy "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [Patrick Easters (@patrickeasters)](https://github.com/patrickeasters "5 total commits to the home-assistant organization, 5 commits to home-assistant.github.io") - [Patrik (@ggravlingen)](https://github.com/ggravlingen "8 total commits to the home-assistant organization, 5 commits to home-assistant, 3 commits to home-assistant.github.io") - [Paul Annekov (@PaulAnnekov)](https://github.com/PaulAnnekov "4 total commits to the home-assistant organization, 4 commits to home-assistant") - [Paul Hendry (@pshendry)](https://github.com/pshendry "1 total commits to the home-assistant organization, 1 commit to warrant") +- [Paul Jimenez (@pjz)](https://github.com/pjz "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [Paul Nicholls (@pauln)](https://github.com/pauln "2 total commits to the home-assistant organization, 2 commits to netdisco") - [Paul Sokolovsky (@pfalcon)](https://github.com/pfalcon "6 total commits to the home-assistant organization, 3 commits to netdisco, 3 commits to home-assistant") - [Pavel Ponomarev (@awsum)](https://github.com/awsum "2 total commits to the home-assistant organization, 2 commits to home-assistant-polymer") - [PawelWMS (@PawelWMS)](https://github.com/PawelWMS "12 total commits to the home-assistant organization, 12 commits to libcoap") - [Pedro Navarro (@pedronavf)](https://github.com/pedronavf "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [Pedro Pombeiro (@PombeirP)](https://github.com/PombeirP "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") -- [Per Osbäck (@perosb)](https://github.com/perosb "13 total commits to the home-assistant organization, 13 commits to home-assistant") +- [Per Osbäck (@perosb)](https://github.com/perosb "18 total commits to the home-assistant organization, 18 commits to home-assistant") - [Per Sandström (@persandstrom)](https://github.com/persandstrom "124 total commits to the home-assistant organization, 98 commits to home-assistant, 14 commits to home-assistant.github.io, 12 commits to home-assistant-polymer") - [Pete Peterson (@petey)](https://github.com/petey "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") - [PeteBa (@PeteBa)](https://github.com/PeteBa "7 total commits to the home-assistant organization, 5 commits to home-assistant, 2 commits to home-assistant-polymer") @@ -679,47 +696,48 @@ This page contains a list of people who have contributed in one way or another t - [Phil Cole (@filcole)](https://github.com/filcole "8 total commits to the home-assistant organization, 5 commits to home-assistant.github.io, 3 commits to home-assistant") - [Phil Elson (@pelson)](https://github.com/pelson "3 total commits to the home-assistant organization, 3 commits to home-assistant") - [Phil Frost (@bitglue)](https://github.com/bitglue "8 total commits to the home-assistant organization, 8 commits to home-assistant") -- [Phil Haack (@Haacked)](https://github.com/Haacked "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [Phil Hawthorne (@philhawthorne)](https://github.com/philhawthorne "24 total commits to the home-assistant organization, 18 commits to home-assistant.github.io, 6 commits to home-assistant") - [Phil Kates (@philk)](https://github.com/philk "7 total commits to the home-assistant organization, 7 commits to home-assistant") - [Philip Hofstetter (@pilif)](https://github.com/pilif "6 total commits to the home-assistant organization, 6 commits to home-assistant.github.io") +- [Philip Howard (@Gadgetoid)](https://github.com/Gadgetoid "1 total commits to the home-assistant organization, 1 commit to pi-gen") - [Philip Kleimeyer (@philklei)](https://github.com/philklei "4 total commits to the home-assistant organization, 4 commits to home-assistant") - [Philip Lundrigan (@philipbl)](https://github.com/philipbl "65 total commits to the home-assistant organization, 56 commits to home-assistant, 9 commits to home-assistant.github.io") +- [Philip Rosenberg-Watt (@PhilRW)](https://github.com/PhilRW "4 total commits to the home-assistant organization, 4 commits to home-assistant") - [Philipp Hellmich (@runningman84)](https://github.com/runningman84 "4 total commits to the home-assistant organization, 4 commits to home-assistant.github.io") - [Philipp Schmitt (@pschmitt)](https://github.com/pschmitt "37 total commits to the home-assistant organization, 24 commits to home-assistant, 11 commits to home-assistant.github.io, 1 commit to appdaemon, 1 commit to hassio-build") - [Phill Price (@phillprice)](https://github.com/phillprice "11 total commits to the home-assistant organization, 11 commits to home-assistant.github.io") -- [PhracturedBlue (@PhracturedBlue)](https://github.com/PhracturedBlue "25 total commits to the home-assistant organization, 15 commits to home-assistant, 9 commits to home-assistant.github.io, 1 commit to home-assistant-polymer") +- [PhracturedBlue (@PhracturedBlue)](https://github.com/PhracturedBlue "31 total commits to the home-assistant organization, 18 commits to home-assistant, 12 commits to home-assistant.github.io, 1 commit to home-assistant-polymer") - [Pierre Ståhl (@postlund)](https://github.com/postlund "49 total commits to the home-assistant organization, 32 commits to home-assistant, 11 commits to home-assistant.github.io, 4 commits to netdisco, 2 commits to home-assistant-polymer") - [Piratonym (@Piratonym)](https://github.com/Piratonym "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [pkonnekermetametrics (@pkonnekermetametrics)](https://github.com/pkonnekermetametrics "5 total commits to the home-assistant organization, 5 commits to warrant") - [PuckStar (@PuckStar)](https://github.com/PuckStar "7 total commits to the home-assistant organization, 7 commits to home-assistant.github.io") -- [R Huish (@Genestealer)](https://github.com/Genestealer "22 total commits to the home-assistant organization, 22 commits to home-assistant.github.io") +- [R Huish (@Genestealer)](https://github.com/Genestealer "23 total commits to the home-assistant organization, 23 commits to home-assistant.github.io") - [Raiford (@raiford)](https://github.com/raiford "1 total commits to the home-assistant organization, 1 commit to hassio-addons") -- [Rasmus (@rasmusbe)](https://github.com/rasmusbe "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [rbflurry (@rbflurry)](https://github.com/rbflurry "16 total commits to the home-assistant organization, 13 commits to home-assistant.github.io, 3 commits to home-assistant") -- [Reed Riley (@reedriley)](https://github.com/reedriley "2 total commits to the home-assistant organization, 2 commits to home-assistant") +- [Reed Riley (@reedriley)](https://github.com/reedriley "3 total commits to the home-assistant organization, 3 commits to home-assistant") - [Rendili (@Rendili)](https://github.com/Rendili "3 total commits to the home-assistant organization, 3 commits to home-assistant") -- [Rene Nulsch (@ReneNulschDE)](https://github.com/ReneNulschDE "14 total commits to the home-assistant organization, 9 commits to home-assistant, 5 commits to home-assistant.github.io") +- [Rene Nulsch (@ReneNulschDE)](https://github.com/ReneNulschDE "19 total commits to the home-assistant organization, 13 commits to home-assistant, 6 commits to home-assistant.github.io") - [Rene Tode (@ReneTode)](https://github.com/ReneTode "38 total commits to the home-assistant organization, 38 commits to appdaemon") -- [René Kliment (@renekliment)](https://github.com/renekliment "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Reza Moallemi (@moallemi)](https://github.com/moallemi "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") - [rhooper (@rhooper)](https://github.com/rhooper "27 total commits to the home-assistant organization, 25 commits to home-assistant, 2 commits to hadashboard") - [Riccardo Canta (@commento)](https://github.com/commento "3 total commits to the home-assistant organization, 3 commits to home-assistant") - [Richard Arends (@Mosibi)](https://github.com/Mosibi "8 total commits to the home-assistant organization, 8 commits to home-assistant") - [Richard Cox (@Khabi)](https://github.com/Khabi "15 total commits to the home-assistant organization, 9 commits to home-assistant, 6 commits to home-assistant.github.io") -- [Richard Leurs (@R1chardTM)](https://github.com/R1chardTM "15 total commits to the home-assistant organization, 8 commits to home-assistant, 6 commits to home-assistant.github.io, 1 commit to home-assistant-polymer") +- [Richard Leurs (@R1chardTM)](https://github.com/R1chardTM "13 total commits to the home-assistant organization, 6 commits to home-assistant, 6 commits to home-assistant.github.io, 1 commit to home-assistant-polymer") +- [Richard Lucas (@lucasweb78)](https://github.com/lucasweb78 "9 total commits to the home-assistant organization, 9 commits to home-assistant") +- [Richard Niemand (@rniemand)](https://github.com/rniemand "1 total commits to the home-assistant organization, 1 commit to example-custom-config") - [Rick (@rcuddy)](https://github.com/rcuddy "1 total commits to the home-assistant organization, 1 commit to pi-gen") - [rkabadi (@rkabadi)](https://github.com/rkabadi "17 total commits to the home-assistant organization, 17 commits to home-assistant") - [Rob Capellini (@capellini)](https://github.com/capellini "3 total commits to the home-assistant organization, 3 commits to home-assistant") - [Rob Slifka (@rslifka)](https://github.com/rslifka "5 total commits to the home-assistant organization, 5 commits to home-assistant.github.io") -- [Robbie Trencheny (@robbiet480)](https://github.com/robbiet480 "1315 total commits to the home-assistant organization, 646 commits to home-assistant-iOS, 259 commits to home-assistant, 248 commits to home-assistant.github.io, 91 commits to homebridge-homeassistant, 15 commits to home-assistant-polymer, 9 commits to hubot-home-assistant, 8 commits to Analytics-Receiver, 6 commits to netdisco, 3 commits to home-assistant-js-websocket, 3 commits to scenegen, 3 commits to appdaemon, 3 commits to hassbot, 3 commits to organization, 3 commits to hadashboard, 3 commits to home-assistant-js, 2 commits to LabelBot, 2 commits to micropython-home-assistant, 2 commits to fabric-home-assistant, 2 commits to home-assistant-notebooks, 2 commits to lambda-home-assistant-github, 2 commits to home-assistant-assets") -- [Robby Grossman (@freerobby)](https://github.com/freerobby "2 total commits to the home-assistant organization, 2 commits to home-assistant") -- [Robin (@robmarkcole)](https://github.com/robmarkcole "17 total commits to the home-assistant organization, 10 commits to home-assistant.github.io, 6 commits to home-assistant, 1 commit to home-assistant-assets") +- [Robbie Trencheny (@robbiet480)](https://github.com/robbiet480 "1317 total commits to the home-assistant organization, 646 commits to home-assistant-iOS, 259 commits to home-assistant, 249 commits to home-assistant.github.io, 92 commits to homebridge-homeassistant, 15 commits to home-assistant-polymer, 9 commits to hubot-home-assistant, 8 commits to Analytics-Receiver, 6 commits to netdisco, 3 commits to organization, 3 commits to hassbot, 3 commits to scenegen, 3 commits to hadashboard, 3 commits to appdaemon, 3 commits to home-assistant-js-websocket, 3 commits to home-assistant-js, 2 commits to lambda-home-assistant-github, 2 commits to LabelBot, 2 commits to home-assistant-notebooks, 2 commits to fabric-home-assistant, 2 commits to micropython-home-assistant, 2 commits to home-assistant-assets") +- [Robert Schütz (@dotlambda)](https://github.com/dotlambda "2 total commits to the home-assistant organization, 1 commit to netdisco, 1 commit to appdaemon") +- [Robin (@robmarkcole)](https://github.com/robmarkcole "29 total commits to the home-assistant organization, 19 commits to home-assistant.github.io, 9 commits to home-assistant, 1 commit to home-assistant-assets") - [Robin Laurén (@llauren)](https://github.com/llauren "1 total commits to the home-assistant organization, 1 commit to appdaemon") - [Roddie Hasan (@eiddor)](https://github.com/eiddor "6 total commits to the home-assistant organization, 6 commits to home-assistant.github.io") - [Roi Dayan (@roidayan)](https://github.com/roidayan "6 total commits to the home-assistant organization, 6 commits to home-assistant") - [roiff (@roiff)](https://github.com/roiff "1 total commits to the home-assistant organization, 1 commit to homebridge-homeassistant") -- [Ron Klinkien (@cyberjunky)](https://github.com/cyberjunky "5 total commits to the home-assistant organization, 3 commits to home-assistant.github.io, 2 commits to home-assistant") +- [Ron Klinkien (@cyberjunky)](https://github.com/cyberjunky "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [Ron Miller (@brainyron)](https://github.com/brainyron "1 total commits to the home-assistant organization, 1 commit to hassio-addons") - [roqeer (@roqeer)](https://github.com/roqeer "3 total commits to the home-assistant organization, 3 commits to home-assistant") - [Ross Schulman (@rschulman)](https://github.com/rschulman "1 total commits to the home-assistant organization, 1 commit to pi-gen") @@ -728,32 +746,33 @@ This page contains a list of people who have contributed in one way or another t - [rubund (@rubund)](https://github.com/rubund "4 total commits to the home-assistant organization, 4 commits to home-assistant") - [Ruslan Kiyanchuk (@zoresvit)](https://github.com/zoresvit "1 total commits to the home-assistant organization, 1 commit to pi-gen") - [Russ K (@rkubes)](https://github.com/rkubes "2 total commits to the home-assistant organization, 2 commits to pi-gen") -- [Russell Cloran (@rcloran)](https://github.com/rcloran "23 total commits to the home-assistant organization, 19 commits to home-assistant, 4 commits to homebridge-homeassistant") +- [Russell Cloran (@rcloran)](https://github.com/rcloran "30 total commits to the home-assistant organization, 26 commits to home-assistant, 4 commits to homebridge-homeassistant") - [Ryan Bahm (@rdbahm)](https://github.com/rdbahm "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [Ryan Borstelmann (@SlothCroissant)](https://github.com/SlothCroissant "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [Ryan Daigle (@rwdaigle)](https://github.com/rwdaigle "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") +- [Ryan Jarvis (@Cabalist)](https://github.com/Cabalist "1 total commits to the home-assistant organization, 1 commit to hassbian-scripts") - [Ryan Kraus (@rmkraus)](https://github.com/rmkraus "193 total commits to the home-assistant organization, 163 commits to home-assistant, 15 commits to home-assistant.github.io, 14 commits to home-assistant-polymer, 1 commit to home-assistant-notebooks") -- [Ryan McLean (@ryanm101)](https://github.com/ryanm101 "69 total commits to the home-assistant organization, 57 commits to hassio-cli, 7 commits to home-assistant, 5 commits to home-assistant.github.io") +- [Ryan McLean (@ryanm101)](https://github.com/ryanm101 "92 total commits to the home-assistant organization, 70 commits to hassio-cli, 16 commits to home-assistant, 6 commits to home-assistant.github.io") - [Ryan Turner (@turnrye)](https://github.com/turnrye "6 total commits to the home-assistant organization, 6 commits to home-assistant") - [Sabesto (@Sabesto)](https://github.com/Sabesto "3 total commits to the home-assistant organization, 3 commits to home-assistant") -- [Sam Birch (@hotplot)](https://github.com/hotplot "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Sam Holmes (@sam3d)](https://github.com/sam3d "4 total commits to the home-assistant organization, 4 commits to pi-gen") - [sam-io (@sam-io)](https://github.com/sam-io "3 total commits to the home-assistant organization, 3 commits to home-assistant") - [sander76 (@sander76)](https://github.com/sander76 "41 total commits to the home-assistant organization, 37 commits to home-assistant, 4 commits to home-assistant.github.io") -- [Scott Bradshaw (@swbradshaw)](https://github.com/swbradshaw "2 total commits to the home-assistant organization, 2 commits to home-assistant") +- [Scott Bradshaw (@swbradshaw)](https://github.com/swbradshaw "4 total commits to the home-assistant organization, 4 commits to home-assistant") - [Scott Griffin (@scottocs11)](https://github.com/scottocs11 "7 total commits to the home-assistant organization, 7 commits to home-assistant.github.io") - [Scott O'Neil (@americanwookie)](https://github.com/americanwookie "7 total commits to the home-assistant organization, 4 commits to home-assistant, 3 commits to home-assistant.github.io") - [Scott Reston (@ih8gates)](https://github.com/ih8gates "9 total commits to the home-assistant organization, 8 commits to home-assistant.github.io, 1 commit to home-assistant-polymer") -- [Sean Dague (@sdague)](https://github.com/sdague "73 total commits to the home-assistant organization, 50 commits to home-assistant, 14 commits to home-assistant.github.io, 5 commits to home-assistant-polymer, 3 commits to netdisco, 1 commit to home-assistant-js") +- [Sean Dague (@sdague)](https://github.com/sdague "75 total commits to the home-assistant organization, 52 commits to home-assistant, 14 commits to home-assistant.github.io, 5 commits to home-assistant-polymer, 3 commits to netdisco, 1 commit to home-assistant-js") - [Sean Gollschewsky (@gollo)](https://github.com/gollo "17 total commits to the home-assistant organization, 10 commits to home-assistant, 4 commits to home-assistant.github.io, 3 commits to hassio-build") -- [Sean Wilson (@swilson)](https://github.com/swilson "2 total commits to the home-assistant organization, 2 commits to home-assistant") +- [Sean Wilson (@swilson)](https://github.com/swilson "4 total commits to the home-assistant organization, 3 commits to home-assistant, 1 commit to home-assistant-polymer") - [Sebastian (@sebk-666)](https://github.com/sebk-666 "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [Sebastian (@sgso)](https://github.com/sgso "3 total commits to the home-assistant organization, 3 commits to libcoap") -- [Sebastian Muszynski (@syssi)](https://github.com/syssi "51 total commits to the home-assistant organization, 26 commits to home-assistant, 23 commits to home-assistant.github.io, 2 commits to home-assistant-polymer") +- [Sebastian Muszynski (@syssi)](https://github.com/syssi "84 total commits to the home-assistant organization, 50 commits to home-assistant, 32 commits to home-assistant.github.io, 2 commits to home-assistant-polymer") - [Sebastian von Minckwitz (@teodoc)](https://github.com/teodoc "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") - [Semir Patel (@analogue)](https://github.com/analogue "2 total commits to the home-assistant organization, 2 commits to appdaemon") - [Sergey Isachenko (@zabuldon)](https://github.com/zabuldon "9 total commits to the home-assistant organization, 9 commits to home-assistant") - [Sergey Vishnikin (@armicron)](https://github.com/armicron "33 total commits to the home-assistant organization, 33 commits to warrant") +- [Sergio Viudes (@sjvc)](https://github.com/sjvc "3 total commits to the home-assistant organization, 3 commits to home-assistant") - [sfam (@sfam)](https://github.com/sfam "65 total commits to the home-assistant organization, 58 commits to home-assistant, 5 commits to home-assistant.github.io, 1 commit to netdisco, 1 commit to home-assistant-polymer") - [sharukins (@sharukins)](https://github.com/sharukins "3 total commits to the home-assistant organization, 3 commits to hassio-build") - [siebert (@siebert)](https://github.com/siebert "3 total commits to the home-assistant organization, 3 commits to home-assistant") @@ -767,52 +786,50 @@ This page contains a list of people who have contributed in one way or another t - [Stefano Scipioni (@scipioni)](https://github.com/scipioni "3 total commits to the home-assistant organization, 3 commits to home-assistant") - [Steltek (@Steltek)](https://github.com/Steltek "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") - [Stephen Edgar (@ntwb)](https://github.com/ntwb "1 total commits to the home-assistant organization, 1 commit to fabric-home-assistant") -- [Stephen Hoekstra (@shoekstra)](https://github.com/shoekstra "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Stephen Yeargin (@stephenyeargin)](https://github.com/stephenyeargin "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") -- [Steven Looman (@StevenLooman)](https://github.com/StevenLooman "2 total commits to the home-assistant organization, 2 commits to home-assistant") +- [Steve Easley (@SteveEasley)](https://github.com/SteveEasley "3 total commits to the home-assistant organization, 3 commits to home-assistant") - [Stu Gott (@stu-gott)](https://github.com/stu-gott "9 total commits to the home-assistant organization, 5 commits to home-assistant.github.io, 4 commits to home-assistant") -- [Stuart Mumford (@Cadair)](https://github.com/Cadair "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Stuart Williams (@stuwil)](https://github.com/stuwil "1 total commits to the home-assistant organization, 1 commit to netdisco") - [swanwila (@swanwila)](https://github.com/swanwila "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") - [System Tester (@systemtester)](https://github.com/systemtester "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") -- [Sytone (@sytone)](https://github.com/sytone "9 total commits to the home-assistant organization, 6 commits to home-assistant.github.io, 2 commits to home-assistant, 1 commit to hassio-build") -- [Sébastien RAMAGE (@doudz)](https://github.com/doudz "3 total commits to the home-assistant organization, 3 commits to home-assistant") +- [Sytone (@sytone)](https://github.com/sytone "7 total commits to the home-assistant organization, 6 commits to home-assistant.github.io, 1 commit to hassio-build") - [Sören Oldag (@soldag)](https://github.com/soldag "15 total commits to the home-assistant organization, 8 commits to home-assistant.github.io, 7 commits to home-assistant") +- [Tabakhase (@tabakhase)](https://github.com/tabakhase "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") +- [tadly (@tadly)](https://github.com/tadly "3 total commits to the home-assistant organization, 3 commits to home-assistant") - [tango-foxtrot (@tango-foxtrot)](https://github.com/tango-foxtrot "1 total commits to the home-assistant organization, 1 commit to netdisco") - [Taylor Peet (@RePeet13)](https://github.com/RePeet13 "9 total commits to the home-assistant organization, 9 commits to home-assistant.github.io") - [Teagan Glenn (@Teagan42)](https://github.com/Teagan42 "59 total commits to the home-assistant organization, 49 commits to home-assistant, 9 commits to home-assistant.github.io, 1 commit to home-assistant-js") - [Ted Drain (@TD22057)](https://github.com/TD22057 "4 total commits to the home-assistant organization, 4 commits to home-assistant") - [tedstriker (@tedstriker)](https://github.com/tedstriker "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [Teemu Mikkonen (@T3m3z)](https://github.com/T3m3z "3 total commits to the home-assistant organization, 3 commits to home-assistant") -- [Teemu Patja (@tpatja)](https://github.com/tpatja "2 total commits to the home-assistant organization, 2 commits to home-assistant") -- [Teemu R. (@rytilahti)](https://github.com/rytilahti "45 total commits to the home-assistant organization, 36 commits to home-assistant, 7 commits to home-assistant.github.io, 2 commits to netdisco") +- [Teemu R. (@rytilahti)](https://github.com/rytilahti "52 total commits to the home-assistant organization, 39 commits to home-assistant, 9 commits to home-assistant.github.io, 4 commits to netdisco") - [Teguh Sobirin (@tjstyle)](https://github.com/tjstyle "2 total commits to the home-assistant organization, 2 commits to pi-gen") - [Tentoe (@Tentoe)](https://github.com/Tentoe "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") - [Theb-1 (@Theb-1)](https://github.com/Theb-1 "5 total commits to the home-assistant organization, 5 commits to home-assistant") - [thecynic (@thecynic)](https://github.com/thecynic "4 total commits to the home-assistant organization, 4 commits to home-assistant") +- [themanieldaniel (@themanieldaniel)](https://github.com/themanieldaniel "8 total commits to the home-assistant organization, 8 commits to home-assistant.github.io") - [Theodor Lindquist (@theolind)](https://github.com/theolind "25 total commits to the home-assistant organization, 25 commits to home-assistant") -- [Thiago Oliveira (@chilicheech)](https://github.com/chilicheech "3 total commits to the home-assistant organization, 3 commits to home-assistant") +- [Thiago Oliveira (@chilicheech)](https://github.com/chilicheech "4 total commits to the home-assistant organization, 4 commits to home-assistant") - [Thibault Cohen (@titilambert)](https://github.com/titilambert "44 total commits to the home-assistant organization, 31 commits to home-assistant, 13 commits to home-assistant.github.io") - [Thibault Maekelbergh (@thibmaek)](https://github.com/thibmaek "4 total commits to the home-assistant organization, 3 commits to home-assistant.github.io, 1 commit to hassio-addons") -- [Thijs de Jong (@bakedraccoon)](https://github.com/bakedraccoon "9 total commits to the home-assistant organization, 9 commits to home-assistant") +- [Thijs de Jong (@bakedraccoon)](https://github.com/bakedraccoon "19 total commits to the home-assistant organization, 15 commits to home-assistant, 4 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 "12 total commits to the home-assistant organization, 7 commits to home-assistant.github.io, 5 commits to home-assistant") -- [Thomas Friedel (@tfriedel)](https://github.com/tfriedel "2 total commits to the home-assistant organization, 2 commits to home-assistant") +- [Thom Troy (@ttroy50)](https://github.com/ttroy50 "13 total commits to the home-assistant organization, 7 commits to home-assistant.github.io, 6 commits to home-assistant") - [Thomas Petazzoni (@tpetazzoni)](https://github.com/tpetazzoni "1 total commits to the home-assistant organization, 1 commit to libcoap") - [Thomas Phillips (@thomas-phillips-nz)](https://github.com/thomas-phillips-nz "2 total commits to the home-assistant organization, 2 commits to pi-gen") - [Thomas Purchas (@thomaspurchas)](https://github.com/thomaspurchas "1 total commits to the home-assistant organization, 1 commit to homebridge-homeassistant") - [Thomas Pötsch (@thp-comnets)](https://github.com/thp-comnets "7 total commits to the home-assistant organization, 7 commits to libcoap") -- [thrawnarn (@thrawnarn)](https://github.com/thrawnarn "1 total commits to the home-assistant organization, 1 commit to netdisco") +- [thrawnarn (@thrawnarn)](https://github.com/thrawnarn "8 total commits to the home-assistant organization, 4 commits to home-assistant, 3 commits to home-assistant.github.io, 1 commit to netdisco") - [ThUnD3r|Gr33n (@thundergreen)](https://github.com/thundergreen "4 total commits to the home-assistant organization, 4 commits to home-assistant.github.io") - [tijuca (@tijuca)](https://github.com/tijuca "106 total commits to the home-assistant organization, 106 commits to libcoap") -- [Tim Lyakhovetskiy (@tlyakhov)](https://github.com/tlyakhov "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Tim Wilbrink (@TWilb)](https://github.com/TWilb "15 total commits to the home-assistant organization, 15 commits to home-assistant-iOS") +- [Timo (@timotk)](https://github.com/timotk "1 total commits to the home-assistant organization, 1 commit to netdisco") - [timstanley1985 (@timstanley1985)](https://github.com/timstanley1985 "4 total commits to the home-assistant organization, 4 commits to home-assistant.github.io") - [TJ Rana (@tjrana)](https://github.com/tjrana "1 total commits to the home-assistant organization, 1 commit to pi-gen") - [tleegaard (@tleegaard)](https://github.com/tleegaard "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") - [Tobie Booth (@tobiebooth)](https://github.com/tobiebooth "4 total commits to the home-assistant organization, 3 commits to home-assistant, 1 commit to home-assistant-polymer") - [Toby Gray (@tobygray)](https://github.com/tobygray "3 total commits to the home-assistant organization, 3 commits to home-assistant") -- [Tod Schmidt (@tschmidty69)](https://github.com/tschmidty69 "19 total commits to the home-assistant organization, 15 commits to home-assistant, 3 commits to home-assistant.github.io, 1 commit to hassio-addons") +- [Tod Schmidt (@tschmidty69)](https://github.com/tschmidty69 "20 total commits to the home-assistant organization, 16 commits to home-assistant, 3 commits to home-assistant.github.io, 1 commit to hassio-addons") - [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 "3 total commits to the home-assistant organization, 3 commits to home-assistant") - [Tom Duijf (@tomduijf)](https://github.com/tomduijf "70 total commits to the home-assistant organization, 53 commits to home-assistant, 9 commits to home-assistant.github.io, 6 commits to home-assistant-polymer, 2 commits to netdisco") @@ -824,6 +841,7 @@ This page contains a list of people who have contributed in one way or another t - [TopdRob (@TopdRob)](https://github.com/TopdRob "7 total commits to the home-assistant organization, 7 commits to home-assistant") - [Torkild Retvedt (@torkildr)](https://github.com/torkildr "2 total commits to the home-assistant organization, 2 commits to appdaemon") - [Toshik (@Toshik)](https://github.com/Toshik "1 total commits to the home-assistant organization, 1 commit to homebridge-homeassistant") +- [Touliloup (@RiRomain)](https://github.com/RiRomain "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [tradiuz (@tradiuz)](https://github.com/tradiuz "5 total commits to the home-assistant organization, 5 commits to home-assistant.github.io") - [travislreno (@travislreno)](https://github.com/travislreno "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [trbs (@trbs)](https://github.com/trbs "1 total commits to the home-assistant organization, 1 commit to netdisco") @@ -833,7 +851,7 @@ This page contains a list of people who have contributed in one way or another t - [Tsvi Mostovicz (@tsvi)](https://github.com/tsvi "9 total commits to the home-assistant organization, 5 commits to home-assistant.github.io, 4 commits to home-assistant") - [Tyler Page (@iamtpage)](https://github.com/iamtpage "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [Tõnis Tobre (@tobre6)](https://github.com/tobre6 "1 total commits to the home-assistant organization, 1 commit to homebridge-homeassistant") -- [uchagani (@uchagani)](https://github.com/uchagani "5 total commits to the home-assistant organization, 4 commits to home-assistant, 1 commit to home-assistant-polymer") +- [uchagani (@uchagani)](https://github.com/uchagani "8 total commits to the home-assistant organization, 7 commits to home-assistant, 1 commit to home-assistant-polymer") - [Uli (@uehler)](https://github.com/uehler "5 total commits to the home-assistant organization, 5 commits to home-assistant.github.io") - [UnrealKazu (@UnrealKazu)](https://github.com/UnrealKazu "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") - [upsert (@upsert)](https://github.com/upsert "1 total commits to the home-assistant organization, 1 commit to netdisco") @@ -842,7 +860,7 @@ This page contains a list of people who have contributed in one way or another t - [Victor Cerutti (@victorcerutti)](https://github.com/victorcerutti "3 total commits to the home-assistant organization, 3 commits to home-assistant-polymer") - [Viet Dzung (@dzungpv)](https://github.com/dzungpv "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") - [Vignesh Venkat (@vickyg3)](https://github.com/vickyg3 "9 total commits to the home-assistant organization, 5 commits to home-assistant, 4 commits to home-assistant.github.io") -- [Ville Skyttä (@scop)](https://github.com/scop "22 total commits to the home-assistant organization, 14 commits to home-assistant, 4 commits to home-assistant.github.io, 3 commits to netdisco, 1 commit to hassio-build") +- [Ville Skyttä (@scop)](https://github.com/scop "32 total commits to the home-assistant organization, 17 commits to home-assistant, 6 commits to home-assistant.github.io, 4 commits to netdisco, 2 commits to home-assistant-polymer, 2 commits to hassio-build, 1 commit to hassio-addons") - [viswa-swami (@viswa-swami)](https://github.com/viswa-swami "9 total commits to the home-assistant organization, 9 commits to home-assistant") - [Vlad Korniev (@vkorn)](https://github.com/vkorn "1 total commits to the home-assistant organization, 1 commit to hassio-build") - [vllungu (@vllungu)](https://github.com/vllungu "3 total commits to the home-assistant organization, 3 commits to libcoap") @@ -860,7 +878,7 @@ This page contains a list of people who have contributed in one way or another t - [wokar (@wokar)](https://github.com/wokar "12 total commits to the home-assistant organization, 8 commits to home-assistant, 4 commits to home-assistant.github.io") - [Wolf-Bastian Pöttner (@BastianPoe)](https://github.com/BastianPoe "7 total commits to the home-assistant organization, 4 commits to home-assistant, 3 commits to home-assistant.github.io") - [Wolfgang Malgadey (@wmalgadey)](https://github.com/wmalgadey "4 total commits to the home-assistant organization, 4 commits to home-assistant") -- [XECDesign (@XECDesign)](https://github.com/XECDesign "133 total commits to the home-assistant organization, 133 commits to pi-gen") +- [XECDesign (@XECDesign)](https://github.com/XECDesign "138 total commits to the home-assistant organization, 138 commits to pi-gen") - [Xorso (@Xorso)](https://github.com/Xorso "22 total commits to the home-assistant organization, 21 commits to home-assistant, 1 commit to hassio-addons") - [Yannick POLLART (@ypollart)](https://github.com/ypollart "8 total commits to the home-assistant organization, 4 commits to home-assistant, 4 commits to home-assistant.github.io") - [Yasin Soliman (@yasinS)](https://github.com/yasinS "4 total commits to the home-assistant organization, 4 commits to home-assistant.github.io") @@ -874,4 +892,4 @@ This page contains a list of people who have contributed in one way or another t This page is irregularly updated using the [`credits_generator` tool](https://github.com/home-assistant/home-assistant.github.io/tree/next/credits_generator). If you think that you are missing, please let us know. -This page was last updated Saturday, February 10th 2018, 4:03:45 pm UTC. +This page was last updated Thursday, March 22nd 2018, 7:54:30 am UTC. From c61a59fb39d72808d0a86404d6ff36463ae6a053 Mon Sep 17 00:00:00 2001 From: nielstron Date: Thu, 22 Mar 2018 09:21:56 +0100 Subject: [PATCH 661/993] Fixed outlier description Outlier filter is actually a band-pass filter, not a band-stop filter --- source/_components/sensor.filter.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/sensor.filter.markdown b/source/_components/sensor.filter.markdown index e659df06fd..6633b8fae2 100644 --- a/source/_components/sensor.filter.markdown +++ b/source/_components/sensor.filter.markdown @@ -99,7 +99,7 @@ The returned value is rounded to the number of decimals defined in (`precision`) ### {% linkable_title Outlier %} -The Outlier filter (`outlier`) is a basic Band-stop filter, as it cuts out any value outside a specific range. +The Outlier filter (`outlier`) is a basic Band-pass filter, as it cuts out any value outside a specific range. The included Outlier filter will discard any value beyond a band centered on the median of the previous values, replacing it with the median value of the previous values. If inside the band, the From 2781c1f89aa5e5f86d4099b42b781041c485e970 Mon Sep 17 00:00:00 2001 From: cgtobi Date: Thu, 22 Mar 2018 20:01:43 +0100 Subject: [PATCH 662/993] Add language parameter to darksky sensor. (#4955) * Add language parameter to darksky sensor. * Add language codes rather than link to the API docs. This is a shameless copy of @syssi's PR #4982. --- source/_components/sensor.darksky.markdown | 40 ++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/source/_components/sensor.darksky.markdown b/source/_components/sensor.darksky.markdown index aebe2326e4..6b110a6c72 100644 --- a/source/_components/sensor.darksky.markdown +++ b/source/_components/sensor.darksky.markdown @@ -41,6 +41,46 @@ Configuration variables: - **api_key** (*Required*): Your API key. - **name** (*Optional*): Additional name for the sensors. Default to platform name. - **forecast** array (*Optional*): List of days in the 7 day forecast you would like to receive data on, starting with tomorrow as day 1. Any `monitored_condition` with a daily forecast by DarkSky will generate a sensor tagged with `_`. +- **language** (*Optional*): The desired language of the summary properties. Valid options are + - `ar`: Arabic + - `az`: Azerbaijani + - `be`: Belarusian + - `bg`: Bulgarian + - `bs`: Bosnian + - `ca`: Catalan + - `cs`: Czech + - `da`: Danish + - `de`: German + - `el`: Greek + - `en`: English (which is the default) + - `es`: Spanish + - `et`: Estonian + - `fi`: Finnish + - `fr`: French + - `hr`: Croatian + - `hu`: Hungarian + - `id`: Indonesian + - `is`: Icelandic + - `it`: Italian + - `ja`: Japanese + - `ka`: Georgian + - `kw`: Cornish + - `nb`: Norwegian Bokmål + - `nl`: Dutch + - `pl`: Polish + - `pt`: Portuguese + - `ro`: Romanian + - `ru`: Russian + - `sk`: Slovak + - `sl`: Slovenian + - `sr`: Serbian + - `sv`: Swedish + - `tet`: Tetum + - `tr`: Turkish + - `uk`: Ukrainian + - `x-pig-latin`: Igpay Atinlay + - `zh`: simplified Chinese + - `zh-tw`: traditional Chinese - **latitude** (*Optional*): Latitude coordinate to monitor weather of (required if **longitude** is specified), defaults to coordinates defined in your `configuration.yaml` - **longitude** (*Optional*): Longitude coordinate to monitor weather of (required if **latitude** is specified), defaults to coordinates defined in your `configuration.yaml` - **monitored_conditions** array (*Required*): Conditions to display in the frontend. From cdda3de320b96da960526f0249c79ef136fbfb51 Mon Sep 17 00:00:00 2001 From: DubhAd Date: Thu, 22 Mar 2018 22:12:05 +0000 Subject: [PATCH 663/993] Template corrections (#4990) * Template corrections Updated the templates to be standards compliant. * Fixes ;) * More changes to comply with standards --- source/_docs/scripts.markdown | 98 +++++++++++++++++++---------------- 1 file changed, 53 insertions(+), 45 deletions(-) diff --git a/source/_docs/scripts.markdown b/source/_docs/scripts.markdown index 06836372ad..2acea20bbe 100644 --- a/source/_docs/scripts.markdown +++ b/source/_docs/scripts.markdown @@ -21,7 +21,8 @@ script: sequence: # This is written using the Script Syntax - service: light.turn_on - entity_id: light.ceiling + data: + entity_id: light.ceiling - service: notify.notify data: message: 'Turned on the ceiling light!' @@ -32,11 +33,11 @@ script: The most important one is the action to call a service. This can be done in various ways. For all the different possibilities, have a look at the [service calls page]. ```yaml -alias: Bedroom lights on -service: light.turn_on -data: - entity_id: group.bedroom - brightness: 100 +- alias: Bedroom lights on + service: light.turn_on + data: + entity_id: group.bedroom + brightness: 100 ``` ### {% linkable_title Test a Condition %} @@ -44,9 +45,9 @@ data: While executing a script you can add a condition to stop further execution. When a condition does not return `true`, the script will finish. There are many different conditions which are documented at the [conditions page]. ```yaml -condition: state -entity_id: device_tracker.paulus -state: 'home' +- condition: state + entity_id: device_tracker.paulus + state: 'home' ``` ### {% linkable_title Delay %} @@ -55,46 +56,53 @@ Delays are useful for temporarily suspending your script and start it at a later ```yaml # Waits 1 hour -delay: 01:00 +- delay: '01:00' ``` ```yaml # Waits 1 minute, 30 seconds -delay: 00:01:30 +- delay: '00:01:30' ``` ```yaml # Waits 1 minute -delay: - # supports milliseconds, seconds, minutes, hours, days - minutes: 1 +- delay: + # supports milliseconds, seconds, minutes, hours, days + minutes: 1 ``` +{% raw %} ```yaml # Waits however many minutes input_number.minute_delay is set to # Valid formats include HH:MM and HH:MM:SS -delay: {% raw %}'00:{{ states.input_number.minute_delay.state | int }}:00'{% endraw %} +- delay: "00:{{ states('input_number.minute_delay')|int }}:00" ``` +{% endraw %} + ### {% linkable_title Wait %} Wait until some things are complete. We support at the moment `wait_template` for waiting until a condition is `true`, see also on [Template-Trigger](/docs/automation/trigger/#template-trigger). It is possible to set a timeout after which the script will abort its execution if the condition is not satisfied. Timeout has the same syntax as `delay`. +{% raw %} ```yaml # wait until media player have stop the playing -wait_template: {% raw %}"{{ states.media_player.floor.state == 'stop' }}"{% endraw %} +- wait_template: "{{ is_state('media_player.floor', 'stop') }}" ``` +{% endraw %} +{% raw %} ```yaml -# wait until a valve is < 10 or abort after 1 minutes. -wait_template: {% raw %}"{{ states.climate.kitchen.attributes.valve < 10 }}"{% endraw %} -timeout: 00:01:00 +# wait until a valve is < 10 or abort after 1 minute. +- wait_template: "{{ states.climate.kitchen.attributes.valve|int < 10 }}" + timeout: '00:01:00' ``` +{% endraw %} When using `wait_template` within an automation `trigger.entity_id` is supported for `state`, `numeric_state` and `template` triggers, see also [Available-Trigger-Data](/docs/automation/templating/#available-trigger-data). {% raw %} ```yaml -wait_template: "{{ is_state(trigger.entity_id, 'on') }}" +- wait_template: "{{ is_state(trigger.entity_id, 'on') }}" ``` {% endraw %} @@ -103,12 +111,12 @@ It is also possible to use dummy variables, e.g., in scripts, when using `wait_t {% raw %} ```yaml # Service call, e.g., from an automation. -service: script.do_something -data_template: - dummy: "{{ input_boolean.switch }}" +- service: script.do_something + data_template: + dummy: input_boolean.switch # Inside the script -wait_template: "{{ is_state(dummy, 'off') }}" +- wait_template: "{{ is_state(dummy, 'off') }}" ``` {% endraw %} @@ -117,12 +125,12 @@ wait_template: "{{ is_state(dummy, 'off') }}" This action allows you to fire an event. Events can be used for many things. It could trigger an automation or indicate to another component that something is happening. For instance, in the below example it is used to create an entry in the logbook. ```yaml -event: LOGBOOK_ENTRY -event_data: - name: Paulus - message: is waking up - entity_id: device_tracker.paulus - domain: light +- event: LOGBOOK_ENTRY + event_data: + name: Paulus + message: is waking up + entity_id: device_tracker.paulus + domain: light ``` You can also use event_data_template to fire an event with custom data. This could be used to pass data to another script awaiting @@ -130,10 +138,10 @@ an event trigger. {% raw %} ```yaml -event: MY_EVENT -event_data_template: - name: myEvent - customData: "{{ myCustomVariable }}" +- event: MY_EVENT + event_data_template: + name: myEvent + customData: "{{ myCustomVariable }}" ``` {% endraw %} @@ -145,13 +153,13 @@ The following automation shows how to raise a custom event called `event_light_s ```yaml - alias: Fire Event trigger: - platform: state - entity_id: switch.kitchen - to: 'on' + - platform: state + entity_id: switch.kitchen + to: 'on' action: - event: event_light_state_changed - event_data: - state: "on" + - event: event_light_state_changed + event_data: + state: 'on' ``` {% endraw %} @@ -161,12 +169,12 @@ The following automation shows how to capture the custom event `event_light_stat ```yaml - alias: Capture Event trigger: - platform: event - event_type: event_light_state_changed + - platform: event + event_type: event_light_state_changed action: - service: notify.notify - data_template: - message: "kitchen light is turned {{ trigger.event.data.state }}" + - service: notify.notify + data_template: + message: "kitchen light is turned {{ trigger.event.data.state }}" ``` {% endraw %} From 8c71e26851944ce84cddef76c05d61a868eb0d60 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Joakim=20S=C3=B8rensen?= Date: Fri, 23 Mar 2018 10:20:37 +0100 Subject: [PATCH 664/993] Changes to Hassbian documentation (#4992) * Changes to Hassbian documentation * Added info about suite to Let's Encrypt docs --- .../certificates/lets_encrypt.markdown | 118 +++++++++--------- .../hassbian/common-tasks.markdown | 12 +- .../hassbian/customization.markdown | 44 ++++--- .../hassbian/installation.markdown | 14 +-- .../installation/hassbian/upgrading.markdown | 5 +- 5 files changed, 100 insertions(+), 93 deletions(-) diff --git a/source/_docs/ecosystem/certificates/lets_encrypt.markdown b/source/_docs/ecosystem/certificates/lets_encrypt.markdown index e428509c77..d239394d25 100644 --- a/source/_docs/ecosystem/certificates/lets_encrypt.markdown +++ b/source/_docs/ecosystem/certificates/lets_encrypt.markdown @@ -10,7 +10,7 @@ footer: true ---

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

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

    - + Make a note of the interface name and the IP address you are currently on. In the picture it is the wireless connection that is highlighted, but with your setup it may be the wired one (eth0 or similar), make sure you get the correct information. - + Then type the following command to open the text file that controls your network connection: -```bash +```bash $ sudo nano /etc/dhcpcd.conf ``` At the bottom of the file add the following lines: - + ```text interface wlan0 <----- or the interface you just wrote down. @@ -255,7 +255,7 @@ $ sudo adduser hass sudo If you did not already log in as the user that currently runs Home Assistant, change to that user (usually `hass` or `homeassistant` - you may have used a command similar to this in the past): ```bash -$ sudo su -s /bin/bash hass +$ sudo su -s /bin/bash hass ``` Make sure you are in the home directory for the Home Assistant user: @@ -276,7 +276,7 @@ $ chmod a+x certbot-auto You might need to stop Home Assistant before continuing with the next step. You can do this via the Web-UI or use the following command if you are running on Hassbian: ```text -$ sudo systemctl stop home-assistant@homeassistant.service +$ sudo systemctl stop home-assistant@homeassistant.service ``` You can restart Home Assistant after the next step using the same command and replacing `stop` with `start`. @@ -340,7 +340,7 @@ http: ssl_key: /etc/letsencrypt/live/examplehome.duckdns.org/privkey.pem base_url: examplehome.duckdns.org ``` - + You may wish to set up other options for the [http](https://home-assistant.io/components/http/) component at this point, these extra options are beyond the scope of this guide. Save the changes to configuration.yaml. Restart Home Assistant. @@ -367,7 +367,7 @@ https://YOUR-HA-IP:8123 Some cases such as this are where your router does not allow 'loopback' or where there is a problem with incoming connections due to technical failure. In these cases you can still use your internal connection and safely ignore the warnings. -If you were previously using a webapp on your phone/tablet to access your Home Assistant you should delete the old one and create a new one with the new address. The old one will no longer work as it is not keyed to your new, secure URL. Instructions for creating your new webapp can be found here: +If you were previously using a webapp on your phone/tablet to access your Home Assistant you should delete the old one and create a new one with the new address. The old one will no longer work as it is not keyed to your new, secure URL. Instructions for creating your new webapp can be found here: ```text https://home-assistant.io/docs/frontend/mobile/ @@ -391,11 +391,11 @@ You are now part of one of two groups: * If you have BOTH rules you are able to set up auto renewals of your certificates using port 80 and the standard http challenge, as performed above. * If you only have one, you are still able to set up auto renewals of your certificates, but will have to specify additional options when renewing that will temporarily stop Home Assistant and use port 8123 for certificate renewal. - + Please remember whether you are a ONE-RULE person or a BOTH-RULE person for step 8! - + Let's Encrypt certificates only last for 90 days. When they have less than 30 days left they can be renewed. Renewal is a simple process. - + Move on to step 7 to see how to monitor your certificates expiry date, and be ready to renew your certificate when the time comes. ### {% linkable_title 7 - Set up a sensor to monitor the expiry date of the certificate %} @@ -406,9 +406,9 @@ Setting a sensor to read the number of days left on your TLS/SSL certificate bef * You can set automations based on the number of days left * You can set alerts to notify you if your certificate has not been renewed and is coming close to expiry. * If you cannot set up automatic renewals due to your ISP blocking port 80, you will have timely reminders to complete the process manually. - + If you do not wish to set up a sensor you can skip straight to step 8 to learn how to update your certificates. - + The sensor will rely on a command line program that needs to be installed on your device running Home Assistant. SSH in to the device and run the following commands: ```bash @@ -446,33 +446,33 @@ If you are a ONE-RULE person (from step 6), you can automatically renew your cer If you are a TWO-RULE person (from step 6), you can automatically renew your certificate using a `http-01` challenge and port 80. There are a number of options for automating the renewal process: - + #### Option 1: Your certificate can be renewed as a 'cron job' - cron jobs are background tasks run by the computer at specified intervals (and are totally independent of Home Assistant). Defining cron is outside of the scope of this guide but you will have had dealings with `crontab` when setting up DuckDNS in step 3 - + To set a cron job to run the script at regular intervals: - + * SSH in to your device running Home Assistant. * Change to your Home Assistant user (command similar to): - + ```bash $ sudo su -s /bin/bash hass ``` - + * Open the crontab: - + ```bash $ crontab -e ``` - + * If you are a TWO-RULE Person: Scroll to the bottom of the file and paste in the following line - + ```text 30 2 * * 1 ~/certbot/certbot-auto renew --quiet --no-self-upgrade --standalone --preferred-challenges http-01 ``` * If you are a ONE-RULE Person: Scroll to the bottom of the file and paste in the following line - + ```text 30 2 * * 1 ~/certbot/certbot-auto renew --quiet --no-self-upgrade --standalone --preferred-challenges tls-sni-01 --tls-sni-01-port 8123 --pre-hook "sudo systemctl stop home-assistant@homeassistant.service" --post-hook "sudo systemctl start home-assistant@homeassistant.service" ``` @@ -482,17 +482,17 @@ $ crontab -e 3. We define pre-hooks and post-hooks that stop our Home Assistant service before certbot runs, freeing port 8123 for certificate renewal, and restart Home Assistant after renewal is complete. * Save the file and exit - - + + #### Option 2: You can set an automation in Home Assistant to run the certbot renewal script. - + Add the following sections to your configuration.yaml if you are a TWO-RULE person -```yaml -shell_command: +```yaml +shell_command: renew_ssl: ~/certbot/certbot-auto renew --quiet --no-self-upgrade --standalone --preferred-challenges http-01 - + automation: - alias: 'Auto Renew SSL Cert' trigger: @@ -506,34 +506,34 @@ If you are a ONE-RULE person, replace the `certbot-auto` command above with `~/c #### Option 3: You can manually update the certificate when your certificate is less than 30 days to expiry. - -To manually update: - + +To manually update: + * SSH in to your device running Home Assistant. * Change to your Home Assistant user (command similar to): - + ```bash $ su - s /bin/bash hass ``` - + * Change to your certbot folder - + ```bash $ cd ~/certbot/ ``` * Run the renewal command - + ```bash $ ./certbot-auto renew --quiet --no-self-upgrade --standalone --preferred-challenges http-01 ``` * If you are a ONE-RULE person, replace the `certbot-auto` command above with `~/certbot/certbot-auto renew --quiet --no-self-upgrade --standalone --preferred-challenges tls-sni-01 --tls-sni-01-port 8123 --pre-hook "sudo systemctl stop home-assistant@homeassistant.service" --post-hook "sudo systemctl start home-assistant@homeassistant.service"` - + So, now were all set up. We have our secured, remotely accessible Home Assistant instance and we're on track for keeping our certificates up to date. But what if something goes wrong? What if the automation didn't fire? What if the cron job forgot to run? What if the dog ate my homework? Read on to set up an alert so you can be notified in plenty of time if you need to step in and sort out any failures. - + ### {% linkable_title 9 - Set up an alert to warn us if something went wrong. %} - + We set up our automatic renewal of our certificates and whatever method we used the certificate should be renewed on or around 30 days before it expires. But what if a week later it still hasn't been? This alert will go off if the expiry time on the certificate gets down to 21 days. This will give you 3 weeks to fix the problem, get your new certificate installed and get another 90 days of secure Home Assistant connections in play. In your `configuration.yaml` add the following automation, adding your preferred notification platform where appropriate: @@ -550,7 +550,7 @@ automation: data: message: 'Warning - SSL certificate expires in 21 days and has not been automatically renewed' ``` - + If you receive this warning notification, follow the steps for a manual update from step 8. Any error messages received at that point can be googled and resolved. If the manual update goes without a hitch there may be something wrong with your chosen method for automatic updates, and you can start troubleshooting from there. So, that's it. We've taken a Home Assistant instance that was only reachable on the local network, made it accessible from the internet, secured it, and set up a system to ensure that it always stays secure. Well done, go and treat yourself to a cookie! diff --git a/source/_docs/installation/hassbian/common-tasks.markdown b/source/_docs/installation/hassbian/common-tasks.markdown index 26d91a2abc..3016df41e0 100644 --- a/source/_docs/installation/hassbian/common-tasks.markdown +++ b/source/_docs/installation/hassbian/common-tasks.markdown @@ -11,7 +11,7 @@ redirect_from: /docs/hassbian/common-tasks/ --- ### {% linkable_title Login to the Raspberry Pi %} -To login to your Raspberry Pi running HASSbian you're going to be using a ssh client. Depending on your platform there are several alternatives for doing this. Linux and Max OS generally have a ssh client installed. Windows users are recommended to download and install the ssh client [Putty][ssh-putty]. +To login to your Raspberry Pi running Hassbian you're going to be using a ssh client. Depending on your platform there are several alternatives for doing this. Linux and Max OS generally have a ssh client installed. Windows users are recommended to download and install the ssh client [Putty][ssh-putty]. Connect to the Raspberry Pi over ssh. Default user name is `pi` and password is `raspberry`. Linux and Mac OS users execute the following command in a terminal. @@ -28,11 +28,11 @@ Optionally, starting with Windows 10 anniversary update, you can use the built-i Log in as the `pi` account and execute the following commands: ```bash -$ sudo systemctl stop home-assistant@homeassistant.service +$ sudo systemctl stop home-assistant@homeassistant.service ``` Replace `stop` with `start` or `restart` to get the desired functionality. -To get the current state of the `homeassistant.service` replace `stop` with `status`. +To get the current state of the `homeassistant.service` replace `stop` with `status`. ### {% linkable_title Update Home Assistant %} @@ -43,7 +43,7 @@ You can also use `hassbian-config` to automate the process by running `sudo hass Log in as the `pi` account and execute the following commands: ```bash -$ sudo systemctl stop home-assistant@homeassistant.service +$ sudo systemctl stop home-assistant@homeassistant.service $ sudo su -s /bin/bash homeassistant $ source /srv/homeassistant/bin/activate $ pip3 install --upgrade homeassistant @@ -53,12 +53,12 @@ $ sudo systemctl start home-assistant@homeassistant.service This will in order do the following: -- Stop the Home Assistant service running on HASSbian +- Stop the Home Assistant service running on Hassbian - Open a shell as the `homeassistant` user running the Homeassistant service and that has ownership over the Home Assistant installation. - Change into the virtual Python environment at `/srv/homeassistant/` containing the Home Assistant installation. - Upgrade the Home Assistant installation to the latest release. - Exit the shell and return to the `pi` user. -- Restart the Home Assistant service. +- Start the Home Assistant service. ### {% linkable_title Manually launch Home Assistant %} Log in as the `pi` account and execute the following commands: diff --git a/source/_docs/installation/hassbian/customization.markdown b/source/_docs/installation/hassbian/customization.markdown index adc479f6d4..e1c968a0c4 100644 --- a/source/_docs/installation/hassbian/customization.markdown +++ b/source/_docs/installation/hassbian/customization.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Customization" -description: "Instructions to flash the Home Assistant HASSbian image on a Raspberry Pi." +description: "Instructions to flash the Home Assistant Hassbian image on a Raspberry Pi." date: 2016-09-26 21:00 sidebar: true comments: false @@ -10,26 +10,34 @@ footer: true redirect_from: /docs/hassbian/customization/ --- -To allow you to customize your installation further, we have included a tool called `hassbian-config`. This tool comes with a set of packages that can easily be installed or upgraded for easier customization of your Home Assistant installation. -The tool is available by running `hassbian-config`. +To allow you to customize your installation further, we have included a tool called `hassbian-config`. This tool comes with a set of suites that can easily be installed or upgraded for easier customization of your Home Assistant installation. +The tool is available by running `hassbian-config`. ### Install scripts -To view the available packages run `hassbian-config show` and `sudo hassbian-config install PACKAGENAME`. - - Install Hue. Configures the Python executable to allow usage of low numbered ports for use with Emulated Hue component that's used with Amazon Echo, Google Home and Mycroft.ai. - - Install MariaDB. This script installs MariaDB and it's dependencies for use with the recorder component in Home Assistant. No database or database user is created during this setup and will need to be created manually. - - Install Mosquitto MQTT server. Installs the latest Mosquitto package and client tools from the Mosquitto projects official repository. Now includes websocket support. - - Install Libcec. Adds local [HDMI CEC support][cec]. *This scipt is currently brooken upstream since it currently doesn't build properly for Python >3.4* - - Install Samba. Allows anyone on your network to edit your configuration from any computer. This share is unsecured and it's usage is not recommended if you share your network with others. - - Install Tradfri. Installs dependencies for using IKEA Trådfri. - - Install Duck DNS auto renewal. This script adds a cron job to auto update the WAN IP address for the defined domain. Before running this script you should already have an Duck DNS account. During the installation you will be asked to supply your domain name and the token for your account. - - Install a web terminal for easy access to ssh in any web browser. This script installs a web terminal called 'shellinabox' on your system that gives you SSH access in your web browser. +To view the available suites run `hassbian-config show` or have a look at the [hassbian-scripts repository][hassbian-repo]. +These are some of the available suites: + - [AppDaemon](https://github.com/home-assistant/hassbian-scripts/blob/master/docs/appdaemon.md) + - [Duck DNS](https://github.com/home-assistant/hassbian-scripts/blob/master/docs/duckdns.md) _This can also be configured to generate Let's Encrypt SSL certificates_ + - [Homebridge](https://github.com/home-assistant/hassbian-scripts/blob/master/docs/homebridge.md) + - [Mosquitto](https://github.com/home-assistant/hassbian-scripts/blob/master/docs/mosquitto.md) + - [Samba](https://github.com/home-assistant/hassbian-scripts/blob/master/docs/samba.md) + - [Webterminal](https://github.com/home-assistant/hassbian-scripts/blob/master/docs/webterminal.md) + - Various database engines. + - [MariaDB](https://github.com/home-assistant/hassbian-scripts/blob/master/docs/mariadb.md) + - [PostgreSQL](https://github.com/home-assistant/hassbian-scripts/blob/master/docs/postgresql.md) + - [MS SQL](https://github.com/home-assistant/hassbian-scripts/blob/master/docs/mssql.md) -#### Upgrade scripts -To view the available packages run `hassbian-config show` and `sudo hassbian-config upgrade PACKAGENAME`. -- Upgrade your Home Assistant installation. -- Upgrade your HASSbian installation. -- Upgrade HASSbian-scripts. -- Upgrade HASSbian-scripts from dev branch. + To install any of them simply run `sudo hassbian-config install SUITE`. + +### Upgrade scripts +To view the available suites run `hassbian-config show` or have a look at the [hassbian-scripts repository][hassbian-repo]. +These are some of the available suites: +- [AppDaemon](https://github.com/home-assistant/hassbian-scripts/blob/master/docs/appdaemon.md) +- [Hassbian](https://github.com/home-assistant/hassbian-scripts/blob/master/docs/hassbian.md) +- [Home Assistant](https://github.com/home-assistant/hassbian-scripts/blob/master/docs/homeassistant.md) +- [hassbian-config (hassbian-sctipts)](https://github.com/home-assistant/hassbian-scripts/blob/master/docs/hassbian_config.md) + +To upgrade any of them simply run `sudo hassbian-config upgrade SUITE`. For more information about this tool have a look at the [hassbian-scripts repository][hassbian-repo]. diff --git a/source/_docs/installation/hassbian/installation.markdown b/source/_docs/installation/hassbian/installation.markdown index 96af9485be..c6e73879ef 100644 --- a/source/_docs/installation/hassbian/installation.markdown +++ b/source/_docs/installation/hassbian/installation.markdown @@ -14,18 +14,19 @@ One of the easiest ways to install Home Assistant on your Raspberry Pi Zero, 2 , 1. [Download the Hassbian image][image-download] 2. Use [Etcher][etcher] to flash the image to your SD card - 3. Ensure your Raspberry Pi has wired access to the internet for the entire process or configure your wireless network settings **before proceeding to step 4**. - 4. Insert SD card to Raspberry Pi and turn it on. Initial installation of Home Assistant will take about 5 minutes. + 3. Ensure your Raspberry Pi has wired access to the internet for the entire process or configure your [wireless network settings](#wireless-network) **before proceeding to step 4**. + 4. Insert SD card to Raspberry Pi and turn it on. Initial installation of Home Assistant will take about 10 minutes.

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

    -These instructions are also available as a [video](https://www.youtube.com/watch?v=iIz6XqDwHEk). Additional information is available in this [video](https://www.youtube.com/watch?v=tCGlQSsQ-Mc). +These instructions are also available as a [video](https://www.youtube.com/watch?v=iIz6XqDwHEk). +Additional information is available in this [video](https://www.youtube.com/watch?v=tCGlQSsQ-Mc). -After initial boot an installer will run in the background and takes around 15 minutes to complete, after it has finished, you will be prompted to login: `hassbian login:`. Installation is complete at this point. The default username is `pi` and the password is `raspberry`. +After initial boot an installer will run in the background, this will download and install the newest version of [hassbian-config](https://github.com/home-assistant/hassbian-scripts) and Home-Assistant, this takes around 10 minutes to complete, after it has finished, you will be prompted to login: `hassbian login:`. Installation is complete at this point. The default username is `pi` and the password is `raspberry`. -Open a browser on a device that's connected to the same WiFi network as your Raspberry Pi and point it to Home Assistant at [http://hassbian.local:8123]. If you want to login via SSH, the default username is `pi` and password is `raspberry` (please change this by running `passwd`). The Home Assistant configuration is located at `/home/homeassistant/.homeassistant/`. +Open a browser on a device that's connected to the same network as your Raspberry Pi and point it to Home Assistant at [http://hassbian.local:8123]. If you want to login via SSH, the default username is `pi` and password is `raspberry` (please change this by running `passwd`). The Home Assistant configuration is located at `/home/homeassistant/.homeassistant/`. If you find that the web page is not reachable after 30 minutes or so, check that you have files in `/home/homeassistant/.homeassistant/`, if there are no files in this location then run the installer manually using this command: `sudo systemctl start install_homeassistant.service`. @@ -35,7 +36,7 @@ The following extras are included on the image: - GPIO pins are ready to use. - Bluetooth is ready to use (supported models only, no Bluetooth LE). - SSH server is enabled. - - A tool called [`hassbian-config`](https://github.com/home-assistant/hassbian-scripts#hassbian-config-hassbian-config). + - A tool called [`hassbian-config`](https://github.com/home-assistant/hassbian-scripts#hassbian-scripts). ### {% linkable_title Wireless Network %} @@ -63,4 +64,3 @@ You may need to adjust the country code depending upon where you are. A list of [etcher]: https://etcher.io/ [http://hassbian.local:8123]: http://hassbian.local:8123 [wifi-setup]: https://www.raspberrypi.org/documentation/configuration/wireless/wireless-cli.md - diff --git a/source/_docs/installation/hassbian/upgrading.markdown b/source/_docs/installation/hassbian/upgrading.markdown index 33b10c5028..d7e094c16a 100644 --- a/source/_docs/installation/hassbian/upgrading.markdown +++ b/source/_docs/installation/hassbian/upgrading.markdown @@ -10,7 +10,7 @@ footer: true redirect_from: /docs/hassbian/upgrading/ --- -HASSbian is based on Raspbian and uses the same repositories. Any changes to Raspbian will be reflected in HASSbian. To update and upgrade system packages and installed software (excluding Home Assistant) do the following. +Hassbian is based on Raspbian and uses the same repositories. Any changes to Raspbian will be reflected in Hassbian. To update and upgrade system packages and installed software (excluding Home Assistant) do the following. Log in as the `pi` account and execute the following commands: ```bash @@ -18,10 +18,9 @@ $ sudo apt-get update $ sudo apt-get -y upgrade ``` - #### {% linkable_title Updating Home Assistant %}

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

    To update the Home Assistant installation execute the following command as the `pi` user. From c4edb9a6e165e913bf574a24dd013ec7ea1dd2f1 Mon Sep 17 00:00:00 2001 From: jackjohnsonuk <32000001+jackjohnsonuk@users.noreply.github.com> Date: Fri, 23 Mar 2018 09:23:53 +0000 Subject: [PATCH 665/993] Update backup_github.markdown (#4988) Added a not re: Hass.io steps --- source/_docs/ecosystem/backup/backup_github.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_docs/ecosystem/backup/backup_github.markdown b/source/_docs/ecosystem/backup/backup_github.markdown index e1842f4721..e56833a2dc 100644 --- a/source/_docs/ecosystem/backup/backup_github.markdown +++ b/source/_docs/ecosystem/backup/backup_github.markdown @@ -35,7 +35,7 @@ Some best practices to consider before putting your configuration on GitHub: ### {% linkable_title Step 1: Installing and Initializing Git %} -In order to put your configuration on GitHub, you must install the git package on your Home Assistant server (instructions below will work on Raspberry Pi, Ubunutu, or any Debian-based system): +In order to put your configuration on GitHub, you must install the git package on your Home Assistant server (instructions below will work on Raspberry Pi, Ubunutu, or any Debian-based system) *note: this isn't required in Hass.io, it's included as default so proceed to step 2*: ```bash $ sudo apt-get update From 6a35c3515d8552dce58f5426586ae11098d57586 Mon Sep 17 00:00:00 2001 From: Robert Date: Fri, 23 Mar 2018 10:30:34 +0100 Subject: [PATCH 666/993] Automations file has fixed name and location (#4993) * automations file has fixed name and location The name and path of the automations file are fixed. Clarification for #13411 * :pencil2: Grammar --- source/_docs/automation/editor.markdown | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/source/_docs/automation/editor.markdown b/source/_docs/automation/editor.markdown index 3788800fd1..31bced2ddb 100644 --- a/source/_docs/automation/editor.markdown +++ b/source/_docs/automation/editor.markdown @@ -9,7 +9,7 @@ sharing: true footer: true --- -In Home Assistant 0.45 we introduced the first version of our automation editor. If you just created a new configuration with Home Assistant then you're all set! Go to the UI and enjoy. +In Home Assistant 0.45 we introduced the first version of our automation editor. If you just created a new configuration with Home Assistant, then you're all set! Go to the UI and enjoy. From the UI choose **Configuration** which is located in the sidebar, then click on **Automation** to go to the automation editor. Press the **+** sign in the lower right corner to get started. This example is based on the manual steps described in the [Getting started section](/getting-started/automation/) for a [`random` sensor](/components/sensor.random/). @@ -19,7 +19,7 @@ Choose a meaningful name for your automation rules.

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

    @@ -39,18 +39,20 @@ As "Service Data" we want a simple text that is shown as part of the notificatio } ``` -Don't forget to save your new automation rule. In order for your saved automation rule to come into effect you will need to go to the **Configuration** page and click on **Reload Automation**. +Don't forget to save your new automation rule. For your saved automation rule to come into effect, you will need to go to the **Configuration** page and click on **Reload Automation**. ## {% linkable_title Updating your configuration to use the editor %} -First check that you have activated the configuration editor. +First, check that you have activated the configuration editor. ```yaml # Activate the configuration editor config: ``` -The automation editor reads and writes to the file `automations.yaml` in your [configuration](/docs/configuration/) folder. Make sure that you have set up the automation component to read from it: +The automation editor reads and writes to the file `automations.yaml` in the root of your [configuration](/docs/configuration/) folder. +Currently, both the name of this file and its location are fixed. +Make sure that you have set up the automation component to read from it: ```yaml # Configuration.yaml example @@ -65,7 +67,7 @@ automation old: platform: ... ``` -You can use the `automation:` and `automation old:` sections in the same time: +You can use the `automation:` and `automation old:` sections at the same time: - `automation old:` to keep your manual designed automations - `automation:` to save the automation created by the online editor @@ -77,7 +79,7 @@ automation old: !include_dir_merge_list automations ## {% linkable_title Migrating your automations to `automations.yaml` %} -If you want to migrate your old automations to use the editor, you'll have to copy them to `automations.yaml`. Make sure that `automations.yaml` remains a list! For each automation that you copy over you'll have to add an `id`. This can be any string as long as it's unique. +If you want to migrate your old automations to use the editor, you'll have to copy them to `automations.yaml`. Make sure that `automations.yaml` remains a list! For each automation that you copy over, you'll have to add an `id`. This can be any string as long as it's unique. For example, the below automation will be triggered when the sun goes from below the horizon to above the horizon. Then, if the temperature is between 17 and 25 degrees, a light will be turned on. From 62985bd21ebe8f7f59bff3f7b769fcd2f850029f Mon Sep 17 00:00:00 2001 From: Gummientchen Date: Fri, 23 Mar 2018 11:27:04 +0100 Subject: [PATCH 667/993] Add example configuration to cookbook (#4991) --- .../configuration_yaml_by_gummientchen.markdown | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 source/_cookbook/configuration_yaml_by_gummientchen.markdown diff --git a/source/_cookbook/configuration_yaml_by_gummientchen.markdown b/source/_cookbook/configuration_yaml_by_gummientchen.markdown new file mode 100644 index 0000000000..3205562886 --- /dev/null +++ b/source/_cookbook/configuration_yaml_by_gummientchen.markdown @@ -0,0 +1,12 @@ +--- +layout: page +title: "Configuration.yaml by Gummientchen" +description: "" +date: 2018-03-23 09:13 +sidebar: true +comments: false +sharing: true +footer: true +ha_category: Example configuration.yaml +ha_external_link: https://github.com/Gummientchen/Home-AssistantConfig +--- From 77c282d62f1e6e1692f7373c41fd330d1f898f2f Mon Sep 17 00:00:00 2001 From: Erik Eriksson Date: Fri, 23 Mar 2018 11:31:35 +0100 Subject: [PATCH 668/993] Update sensor.mqtt.markdown (#4968) --- source/_components/sensor.mqtt.markdown | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/source/_components/sensor.mqtt.markdown b/source/_components/sensor.mqtt.markdown index 174c27ee8b..dc835ac9d7 100644 --- a/source/_components/sensor.mqtt.markdown +++ b/source/_components/sensor.mqtt.markdown @@ -44,6 +44,10 @@ unit_of_measurement: description: Defines the units of measurement of the sensor, if any. required: false type: string +icon: + description: Icon for the sensor (e.g. `mdi:gauge`). + required: false + type: string expire_after: description: Defines the number of seconds after the value expires if it's not updated. required: false From 6800f2090870d87f7f60747381b565b111cffa32 Mon Sep 17 00:00:00 2001 From: Erik Eriksson Date: Fri, 23 Mar 2018 11:32:07 +0100 Subject: [PATCH 669/993] Update switch.mqtt.markdown (#4969) --- source/_components/switch.mqtt.markdown | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/source/_components/switch.mqtt.markdown b/source/_components/switch.mqtt.markdown index c06e491ea6..d440902e7e 100644 --- a/source/_components/switch.mqtt.markdown +++ b/source/_components/switch.mqtt.markdown @@ -36,6 +36,10 @@ name: required: false type: string default: MQTT Switch +icon: + description: Icon for the switch (e.g. `mdi:radiator`). + required: false + type: string state_topic: description: The MQTT topic subscribed to receive state updates. required: false From 6ea9c2d7a82c47b85457d1cde670879a0a9419e3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Joakim=20S=C3=B8rensen?= Date: Fri, 23 Mar 2018 18:00:56 +0100 Subject: [PATCH 670/993] More hassbian docs (#4994) --- source/_docs/installation/hassbian.markdown | 2 +- source/_docs/installation/hassbian/common-tasks.markdown | 2 +- source/_docs/installation/updating.markdown | 6 +++--- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/source/_docs/installation/hassbian.markdown b/source/_docs/installation/hassbian.markdown index 9559359870..bc20ad6359 100644 --- a/source/_docs/installation/hassbian.markdown +++ b/source/_docs/installation/hassbian.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Hassbian" -description: "Instructions to flash the Home Assistant HASSbian image on a Raspberry Pi." +description: "Instructions to flash the Home Assistant Hassbian image on a Raspberry Pi." date: 2016-09-26 21:00 sidebar: true comments: false diff --git a/source/_docs/installation/hassbian/common-tasks.markdown b/source/_docs/installation/hassbian/common-tasks.markdown index 3016df41e0..edf92d8ace 100644 --- a/source/_docs/installation/hassbian/common-tasks.markdown +++ b/source/_docs/installation/hassbian/common-tasks.markdown @@ -37,7 +37,7 @@ To get the current state of the `homeassistant.service` replace `stop` with `sta ### {% linkable_title Update Home Assistant %}

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

    Log in as the `pi` account and execute the following commands: diff --git a/source/_docs/installation/updating.markdown b/source/_docs/installation/updating.markdown index 012a5a5c08..b3c7040b9a 100644 --- a/source/_docs/installation/updating.markdown +++ b/source/_docs/installation/updating.markdown @@ -11,7 +11,7 @@ redirect_from: /getting-started/updating/ ---

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

    Check what's new in the latest version and potentially impacts your system in [Home Assistant release notes](https://github.com/home-assistant/home-assistant/releases). It is good practice to review these release notes and pay close attention to the **Breaking Changes** that are listed there. If you haven't done an update for a while, you should also check previous release notes as they can also contain relevant **Breaking Changes**. **Breaking Changes** may require configuration updates for your components. If you missed this and Home Assistant refuses to start, check `/home-assistant.log` for details about broken components. @@ -25,7 +25,7 @@ $ pip3 install --upgrade homeassistant After updating, you must restart Home Assistant for the changes to take effect. This means that you will have to restart `hass` itself or the [autostarting](/docs/autostart/) daemon (if applicable). Startup can take considerable amount of time (i.e. minutes) depending on your device. This is because all requirements are updated as well.

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

    [BRUH automation](http://www.bruhautomation.com) has created [a tutorial video](https://www.youtube.com/watch?v=tuG2rs1Cl2Y) explaining how to upgrade Home Assistant. @@ -40,7 +40,7 @@ $ pip3 install homeassistant==0.XX.X #### {% linkable_title Run the development version %} -If you want to stay on the bleeding-edge Home Assistant development branch, you can upgrade to `dev`. +If you want to stay on the bleeding-edge Home Assistant development branch, you can upgrade to `dev`.

    The "dev" branch is likely to be unstable. Potential consequences include loss of data and instance corruption. From b4c71a2f549cdd90212a42ac5bc269278f649445 Mon Sep 17 00:00:00 2001 From: Philip Rosenberg-Watt Date: Fri, 23 Mar 2018 11:29:38 -0600 Subject: [PATCH 671/993] Fix incorrect syntax (#4995) Without quotes the example would not work. --- source/_docs/scripts.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_docs/scripts.markdown b/source/_docs/scripts.markdown index 2acea20bbe..ef490f4de2 100644 --- a/source/_docs/scripts.markdown +++ b/source/_docs/scripts.markdown @@ -102,7 +102,7 @@ When using `wait_template` within an automation `trigger.entity_id` is supported {% raw %} ```yaml -- wait_template: "{{ is_state(trigger.entity_id, 'on') }}" +- wait_template: "{{ is_state('trigger.entity_id', 'on') }}" ``` {% endraw %} From 6f63554f8cba39e7887504c5563c622728e77668 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Fri, 23 Mar 2018 20:07:18 +0100 Subject: [PATCH 672/993] Add send_sticker and update the existing content (#4996) * Add send_sticker and update the existing content * :pencil2: Minor fixes --- source/_components/telegram_bot.markdown | 98 +++++++++++++++--------- 1 file changed, 60 insertions(+), 38 deletions(-) diff --git a/source/_components/telegram_bot.markdown b/source/_components/telegram_bot.markdown index 0c5ef3e502..32397d0fbe 100644 --- a/source/_components/telegram_bot.markdown +++ b/source/_components/telegram_bot.markdown @@ -19,10 +19,12 @@ This component creates notification services to send, or edit previously sent, m If you don't need to receive messages, you can use the [broadcast](/components/telegram_bot.broadcast/) platform instead. -### {% linkable_title Notification services %} -Available services: `send_message`, `send_photo`, `send_document`, `send_location`, `edit_message`, `edit_replymarkup`, `edit_caption`, `answer_callback_query`. +## {% linkable_title Notification services %} + +Available services: `send_message`, `send_photo`, `send_document`, `send_location`, `send_sticker`, `edit_message`, `edit_replymarkup`, `edit_caption` and `answer_callback_query`. + +### {% linkable_title Service `telegram_bot.send_message` %} -#### {% linkable_title Service `telegram_bot/send_message` %} Send a notification. | Service data attribute | Optional | Description | @@ -36,7 +38,8 @@ Send a notification. | `keyboard` | yes | List of rows of commands, comma-separated, to make a custom keyboard. Example: `["/command1, /command2", "/command3"]` | | `inline_keyboard` | yes | List of rows of commands, comma-separated, to make a custom inline keyboard with buttons with associated callback data. Example: `["/button1, /button2", "/button3"]` or `[[["Text btn1", "/button1"], ["Text btn2", "/button2"]], [["Text btn3", "/button3"]]]` | -#### {% linkable_title Service `telegram_bot/send_photo` %} +### {% linkable_title Service `telegram_bot.send_photo` and `telegram_bot.send_sticker` %} + Send a photo. | Service data attribute | Optional | Description | @@ -44,16 +47,16 @@ Send a photo. | `url` | no | Remote path to an image. | | `file` | no | Local path to an image. | | `caption` | yes | The title of the image. | -| `username` | yes | Username for a URL which require HTTP basic authentication. | -| `password` | yes | Password for a URL which require HTTP basic authentication. | +| `username` | yes | Username for a URL which requires HTTP basic authentication. | +| `password` | yes | Password for a URL which requires HTTP basic authentication. | | `authentication` | yes | Define which authentication method to use. Set to `digest` to use HTTP digest authentication. Defaults to `basic`. | | `target` | yes | An array of pre-authorized chat_ids or user_ids to send the notification to. Defaults to the first allowed chat_id. | | `disable_notification` | yes | True/false for send the message silently. iOS users and web users will not receive a notification, Android users will receive a notification with no sound. Defaults to False. | | `keyboard` | yes | List of rows of commands, comma-separated, to make a custom keyboard. Example: `["/command1, /command2", "/command3"]` | | `inline_keyboard` | yes | List of rows of commands, comma-separated, to make a custom inline keyboard with buttons with associated callback data. Example: `["/button1, /button2", "/button3"]` or `[[["Text btn1", "/button1"], ["Text btn2", "/button2"]], [["Text btn3", "/button3"]]]` | +### {% linkable_title Service `telegram_bot.send_video` %} -#### {% linkable_title Service `telegram_bot/send_video` %} Send a video. | Service data attribute | Optional | Description | @@ -69,7 +72,8 @@ Send a video. | `keyboard` | yes | List of rows of commands, comma-separated, to make a custom keyboard. Example: `["/command1, /command2", "/command3"]` | | `inline_keyboard` | yes | List of rows of commands, comma-separated, to make a custom inline keyboard with buttons with associated callback data. Example: `["/button1, /button2", "/button3"]` or `[[["Text btn1", "/button1"], ["Text btn2", "/button2"]], [["Text btn3", "/button3"]]]` | -#### {% linkable_title Service `telegram_bot/send_document` %} +### {% linkable_title Service `telegram_bot.send_document` %} + Send a document. | Service data attribute | Optional | Description | @@ -77,15 +81,16 @@ Send a document. | `url` | no | Remote path to a document. | | `file` | no | Local path to a document. | | `caption` | yes | The title of the document. | -| `username` | yes | Username for a URL which require HTTP basic authentication. | -| `password` | yes | Password for a URL which require HTTP basic authentication. | +| `username` | yes | Username for a URL which requires HTTP basic authentication. | +| `password` | yes | Password for a URL which requires HTTP basic authentication. | | `authentication` | yes | Define which authentication method to use. Set to `digest` to use HTTP digest authentication. Defaults to `basic`. | | `target` | yes | An array of pre-authorized chat_ids or user_ids to send the notification to. Defaults to the first allowed chat_id. | | `disable_notification` | yes | True/false for send the message silently. iOS users and web users will not receive a notification, Android users will receive a notification with no sound. Defaults to False. | | `keyboard` | yes | List of rows of commands, comma-separated, to make a custom keyboard. Example: `["/command1, /command2", "/command3"]` | | `inline_keyboard` | yes | List of rows of commands, comma-separated, to make a custom inline keyboard with buttons with associated callback data. Example: `["/button1, /button2", "/button3"]` or `[[["Text btn1", "/button1"], ["Text btn2", "/button2"]], [["Text btn3", "/button3"]]]` | -#### {% linkable_title Service `telegram_bot/send_location` %} +### {% linkable_title Service `telegram_bot.send_location` %} + Send a location. | Service data attribute | Optional | Description | @@ -97,7 +102,8 @@ Send a location. | `keyboard` | yes | List of rows of commands, comma-separated, to make a custom keyboard. Example: `["/command1, /command2", "/command3"]` | | `inline_keyboard` | yes | List of rows of commands, comma-separated, to make a custom inline keyboard with buttons with associated callback data. Example: `["/button1, /button2", "/button3"]` or `[[["Text btn1", "/button1"], ["Text btn2", "/button2"]], [["Text btn3", "/button3"]]]` | -#### {% linkable_title Service `telegram_bot/edit_message` %} +### {% linkable_title Service `telegram_bot.edit_message` %} + Edit a previously sent message in a conversation. | Service data attribute | Optional | Description | @@ -110,7 +116,8 @@ Edit a previously sent message in a conversation. | `disable_web_page_preview`| yes | True/false for disable link previews for links in the message. | | `inline_keyboard` | yes | List of rows of commands, comma-separated, to make a custom inline keyboard with buttons with associated callback data. Example: `["/button1, /button2", "/button3"]` or `[[["Text btn1", "/button1"], ["Text btn2", "/button2"]], [["Text btn3", "/button3"]]]` | -#### {% linkable_title Service `telegram_bot/edit_caption` %} +### {% linkable_title Service `telegram_bot.edit_caption` %} + Edit the caption of a previously sent message. | Service data attribute | Optional | Description | @@ -121,8 +128,9 @@ Edit the caption of a previously sent message. | `disable_web_page_preview`| yes | True/false for disable link previews for links in the message. | | `inline_keyboard` | yes | List of rows of commands, comma-separated, to make a custom inline keyboard with buttons with associated callback data. Example: `["/button1, /button2", "/button3"]` or `[[["Text btn1", "/button1"], ["Text btn2", "/button2"]], [["Text btn3", "/button3"]]]` | -#### {% linkable_title Service `telegram_bot/edit_replymarkup` %} -Edit the inline keyboard of a previusly sent message. +### {% linkable_title Service `telegram_bot.edit_replymarkup` %} + +Edit the inline keyboard of a previously sent message. | Service data attribute | Optional | Description | |---------------------------|----------|--------------------------------------------------| @@ -131,7 +139,8 @@ Edit the inline keyboard of a previusly sent message. | `disable_web_page_preview`| yes | True/false for disable link previews for links in the message. | | `inline_keyboard` | yes | List of rows of commands, comma-separated, to make a custom inline keyboard with buttons with associated callback data. Example: `["/button1, /button2", "/button3"]` or `[[["Text btn1", "/button1"], ["Text btn2", "/button2"]], [["Text btn3", "/button3"]]]` | -#### {% linkable_title Service `telegram_bot/answer_callback_query` %} +### {% linkable_title Service `telegram_bot.answer_callback_query` %} + Respond to a callback query originated by clicking on an online keyboard button. The answer will be displayed to the user as a notification at the top of the chat screen or as an alert. | Service data attribute | Optional | Description | @@ -140,7 +149,7 @@ Respond to a callback query originated by clicking on an online keyboard button. | `callback_query_id` | no | Unique id of the callback response. In the `telegram_callback` event data: `{{ trigger.event.data.id }}` | | `show_alert` | yes | True/false for show a permanent notification. Defaults to False. | -#### {% linkable_title Service `telegram_bot/delete_message` %} +### {% linkable_title Service `telegram_bot.delete_message` %} Delete a previously sent message in a conversation. | Service data attribute | Optional | Description | @@ -148,12 +157,12 @@ Delete a previously sent message in a conversation. | `message_id` | no | Id of the message to delete. When answering a callback from a pressed button, the id of the origin message is in: `{{ trigger.event.data.message.message_id }}`. You can use `"last"` to refer to the last message sent to `chat_id`. | | `chat_id` | no | The chat_id where to delete the message. | -### {% linkable_title `Telegram` notification platform %} +## {% linkable_title `telegram` notification platform %} - -The [Telegram notification platform](/components/notify.telegram/) requires the `telegram_bot` component to work with, and it's designed to generate a customized shortcut (`notify.USERNAME`) to send notifications (messages, photos, documents and locations) to a particular `chat_id` with the old syntax, allowing backward compatibility. +The [`telegram` notification platform](/components/notify.telegram/) requires the `telegram_bot` component to work with, and it's designed to generate a customized shortcut (`notify.USERNAME`) to send notifications (messages, photos, documents and locations) to a particular `chat_id` with the old syntax, allowing backward compatibility. The required yaml configuration now reduces to: + ```yaml notify: - name: NOTIFIER_NAME @@ -161,8 +170,7 @@ notify: chat_id: USER_CHAT_ID ``` -### {% linkable_title Event triggering %} - +## {% linkable_title Event triggering %} A command looks like `/thecommand`, or `/othercommand with some args`. @@ -189,7 +197,7 @@ chat_id: "" chat: "" ``` -if the message is sent from a [press from an inline button](https://core.telegram.org/bots#inline-keyboards-and-on-the-fly-updating), for example, a callback query is received, and Home Assistant will fire a `telegram_callback` event with: +If the message is sent from a [press from an inline button](https://core.telegram.org/bots#inline-keyboards-and-on-the-fly-updating), for example, a callback query is received, and Home Assistant will fire a `telegram_callback` event with: ```yaml data: "" @@ -204,7 +212,6 @@ chat_id: "" ### {% linkable_title Configuration samples %} - Simple ping pong example. ```yaml @@ -221,7 +228,7 @@ action: message: 'pong' ``` -Example that show keyboard interaction with `notify.telegram` +An example that shows keyboard interaction with `notify.telegram` ```yaml trigger: @@ -256,8 +263,9 @@ action: entity_id: switch.vision_zm1601eu5_battery_operated_siren_switch_9_0 ``` -An example to show the use of event_data in the action: +An example to show the use of event_data in action: +{% raw %} ```yaml - alias: 'Kitchen Telegram Speak' trigger: @@ -269,17 +277,21 @@ An example to show the use of event_data in the action: - service: notify.kitchen_echo data_template: message: > - Message from {% raw %}{{ trigger.event.data["from_first"] }}. {% for state in trigger.event.data["args"] %} {{ state }} {% endfor %}{% endraw %} + Message from {{ trigger.event.data["from_first"] }}. {% for state in trigger.event.data["args"] %} {{ state }} {% endfor %} ``` +{% endraw %} ### {% linkable_title Sample automations with callback queries and inline keyboards %} -Quick example to show some of the callback capabilities of inline keyboards with a dumb automation consisting in a simple repeater of normal text that presents an inline keyboard with 3 buttons: 'EDIT', 'NO' and 'REMOVE BUTTON': +A quick example to show some of the callback capabilities of inline keyboards with a dumb automation consisting in a simple repeater of normal text that presents an inline keyboard with 3 buttons: 'EDIT', 'NO' and 'REMOVE BUTTON': + - Pressing 'EDIT' changes the sent message. - Pressing 'NO' only shows a brief notification (answering the callback query). - Pressing 'REMOVE BUTTON' changes the inline keyboard removing that button. Text repeater: + +{% raw %} ```yaml - alias: 'Telegram bot that repeats text' hide_entity: true @@ -290,15 +302,18 @@ Text repeater: - service: telegram_bot.send_message data_template: title: '*Dumb automation*' - target: {% raw %}'{{ trigger.event.data.user_id }}'{% endraw %} - message: 'You said: {% raw %}{{ trigger.event.data.text }}{% endraw %}' + target: '{{ trigger.event.data.user_id }}' + message: 'You said: {{ trigger.event.data.text }}' disable_notification: true inline_keyboard: - "Edit message:/edit_msg, Don't:/do_nothing" - "Remove this button:/remove button" ``` +{% endraw %} Message editor: + +{% raw %} ```yaml - alias: 'Telegram bot that edits the last sent message' hide_entity: true @@ -315,19 +330,22 @@ Message editor: show_alert: true - service: telegram_bot.edit_message data_template: - message_id: {% raw %}'{{ trigger.event.data.message.message_id }}'{% endraw %} - chat_id: {% raw %}'{{ trigger.event.data.chat_id }}'{% endraw %} + message_id: '{{ trigger.event.data.message.message_id }}' + chat_id: '{{ trigger.event.data.chat_id }}' title: '*Message edit*' inline_keyboard: - "Edit message:/edit_msg, Don't:/do_nothing" - "Remove this button:/remove button" message: > - {% raw %}Callback received from {% raw %}{{ trigger.event.data.from_first }}{% endraw %}. - Message id: {% raw %}{{ trigger.event.data.message.message_id }}{% endraw %}. - Data: {% raw %}{{ trigger.event.data.data }}{% endraw %} + Callback received from {{ trigger.event.data.from_first }}. + Message id: {{ trigger.event.data.message.message_id }}. + Data: {{ trigger.event.data.data }} ``` +{% endraw %} Keyboard editor: + +{% raw %} ```yaml - alias: 'Telegram bot that edits the keyboard' hide_entity: true @@ -339,17 +357,20 @@ Keyboard editor: action: - service: telegram_bot.answer_callback_query data_template: - callback_query_id: {% raw %}'{{ trigger.event.data.id }}'{% endraw %} + callback_query_id: '{{ trigger.event.data.id }}' message: 'Callback received for editing the inline keyboard!' - service: telegram_bot.edit_replymarkup data_template: message_id: 'last' - chat_id: {% raw %}'{{ trigger.event.data.chat_id }}'{% endraw %} + chat_id: '{{ trigger.event.data.chat_id }}' inline_keyboard: - "Edit message:/edit_msg, Don't:/do_nothing" ``` +{% endraw %} Only acknowledges the 'NO' answer: + +{% raw %} ```yaml - alias: 'Telegram bot that simply acknowledges' hide_entity: true @@ -361,9 +382,10 @@ Only acknowledges the 'NO' answer: action: - service: telegram_bot.answer_callback_query data_template: - callback_query_id: {% raw %}'{{ trigger.event.data.id }}'{% endraw %} + callback_query_id: '{{ trigger.event.data.id }}' message: 'OK, you said no!' ``` +{% endraw %} For a more complex usage of the `telegram_bot` capabilities, using [AppDaemon](/docs/ecosystem/appdaemon/tutorial/) is advised. From 3c45088ac3b2f7ba4a58fe12867180914bee3593 Mon Sep 17 00:00:00 2001 From: c727 Date: Fri, 23 Mar 2018 20:34:10 +0100 Subject: [PATCH 673/993] Fix code for custom UI version (#4945) * Fix code for custom UI version if you don't put the code in `{ }` `const`s are global * Update frontend_creating_custom_ui.markdown * Update frontend_creating_custom_ui.markdown * Update frontend_creating_custom_ui.markdown --- .../frontend_creating_custom_ui.markdown | 33 ++++++++++--------- 1 file changed, 17 insertions(+), 16 deletions(-) diff --git a/source/developers/frontend_creating_custom_ui.markdown b/source/developers/frontend_creating_custom_ui.markdown index d28623e8da..3012f43e60 100644 --- a/source/developers/frontend_creating_custom_ui.markdown +++ b/source/developers/frontend_creating_custom_ui.markdown @@ -42,7 +42,22 @@ frontend: `www/custom_ui/state-card-my-custom-light.html`: -```javascript +```html + \ No newline at end of file diff --git a/source/demo/panels/ha-panel-dev-template.html b/source/demo/panels/ha-panel-dev-template.html index 22e214a759..5c7678632c 100644 --- a/source/demo/panels/ha-panel-dev-template.html +++ b/source/demo/panels/ha-panel-dev-template.html @@ -1,2 +1,2 @@

    \ No newline at end of file + clear: both;white-space:pre-wrap}.rendered.error{color:red}
    Templates
    \ No newline at end of file diff --git a/source/developers/asyncio.markdown b/source/developers/asyncio.markdown index 3cbee37c1b..2a456794d6 100644 --- a/source/developers/asyncio.markdown +++ b/source/developers/asyncio.markdown @@ -23,5 +23,5 @@ The backwards compatible API works by scheduling a task from a different thread ### [Next step: asyncio 101 »](/developers/asyncio_101/) -[0.29]: https://home-assistant.io/blog/2016/09/29/async-sleepiq-emoncms-stocks/ +[0.29]: /blog/2016/09/29/async-sleepiq-emoncms-stocks/ [ben]: https://github.com/bbangert/ diff --git a/source/developers/cla.markdown b/source/developers/cla.markdown index f48588f5e1..731c5360d6 100644 --- a/source/developers/cla.markdown +++ b/source/developers/cla.markdown @@ -30,7 +30,7 @@ By making a contribution to this project, I certify that: (d) I understand and agree that this project and the contribution are public and that a record of the contribution (including all personal information I submit with it) is maintained indefinitely - and may be redistributed consistent with this project or the open + and may be redistributed consistent with this project or the open source license(s) involved. ``` @@ -47,4 +47,4 @@ If you have not signed the CLA and you submit a pull request to a repository und This Contributor License Agreement (CLA) was first announced on January 21st, 2017 in [this][cla-blog] blog post and adopted January 28th, 2017. -[cla-blog]: https://home-assistant.io/blog/2017/01/21/home-assistant-governance/ +[cla-blog]: /blog/2017/01/21/home-assistant-governance/ diff --git a/source/developers/development_checklist.markdown b/source/developers/development_checklist.markdown index 1a1fdb3def..3fe199b8ea 100644 --- a/source/developers/development_checklist.markdown +++ b/source/developers/development_checklist.markdown @@ -15,6 +15,6 @@ Before you commit any changes, check your work against these requirements: - All dependencies from [pypi](https://pypi.python.org/pypi) are included via the `REQUIREMENTS` variable in your platform or component and only imported inside functions that use them - New dependencies are added to `requirements_all.txt` (if applicable), using `script/gen_requirements_all.py` - The `.coveragerc` file is updated to exclude your platform if there are no tests available or your new code uses a third-party library for communication with the device, service, or sensor -- Documentation is developed for [home-assistant.io](https://home-assistant.io/) +- Documentation is developed for [home-assistant.io](/) * It's OK to start with adding a docstring with configuration details (for example, sample entry for `configuration.yaml` file) to the file header. Visit the [website documentation](/developers/documentation/) for more information about contributing to [home-assistant.io](https://github.com/home-assistant/home-assistant.github.io). diff --git a/source/developers/development_environment.markdown b/source/developers/development_environment.markdown index 46017c7f80..b198bebbbb 100644 --- a/source/developers/development_environment.markdown +++ b/source/developers/development_environment.markdown @@ -31,7 +31,7 @@ $ sudo apt-get install libssl-dev libxml2-dev libxslt1-dev libjpeg-dev libffi-de Different distributions have different package installation mechanisms and sometimes packages names as well. For example Centos would use: `sudo yum install epel-release && sudo yum install python34 python34-devel mysql-devel`

    -Additional dependencies exist if you plan to perform Frontend Development, please read the [Frontend](https://home-assistant.io/developers/frontend/) section to learn more. +Additional dependencies exist if you plan to perform Frontend Development, please read the [Frontend](/developers/frontend/) section to learn more. #### {% linkable_title Developing on Windows %} @@ -83,7 +83,7 @@ $ cd home-assistant $ git remote add upstream https://github.com/home-assistant/home-assistant.git ``` -### {% linkable_title Setting up virtual environment %} +### {% linkable_title Setting up virtual environment %} To isolate your environment from the rest of the system, set up a [`venv`](https://docs.python.org/3/library/venv.html). Within the `home-assistant` directory, create and activate your virtual environment. diff --git a/source/developers/development_guidelines.markdown b/source/developers/development_guidelines.markdown index c8b384eb3e..edfabb9b26 100644 --- a/source/developers/development_guidelines.markdown +++ b/source/developers/development_guidelines.markdown @@ -27,7 +27,7 @@ Those points may require that you adjust your IDE or editor settings. ## {% linkable_title Our recommendations %} -For some cases [PEPs](https://www.python.org/dev/peps/) don't make a statement. This section covers our recommendations about the code style. Those points were collected from the existing code and based on what contributors and developers were using the most. This is basically a majority decision, thus you may not agree with it. But we would like to encourage you follow those recommendations to keep the code unified. +For some cases [PEPs](https://www.python.org/dev/peps/) don't make a statement. This section covers our recommendations about the code style. Those points were collected from the existing code and based on what contributors and developers were using the most. This is basically a majority decision, thus you may not agree with it. But we would like to encourage you follow those recommendations to keep the code unified. ### {% linkable_title Quotes %} @@ -43,7 +43,7 @@ SENSOR_TYPES = { ### {% linkable_title File headers %} -The docstring in the file header should contain a link to the documentation to make it easy to find further information, especially about the configuration or details which are not mentioned in the code. +The docstring in the file header should contain a link to the documentation to make it easy to find further information, especially about the configuration or details which are not mentioned in the code. ```python """ @@ -56,7 +56,7 @@ https://home-assistant.io/components/light.mqtt/ ### {% linkable_title Requirements %} -Please place [Platform requirements](/developers/code_review_platform/#1-requirements) right after the imports. +Please place [Platform requirements](/developers/code_review_platform/#1-requirements) right after the imports. ```python [...] diff --git a/source/developers/development_states.markdown b/source/developers/development_states.markdown index 6da9e5fbc9..e1161ffcca 100644 --- a/source/developers/development_states.markdown +++ b/source/developers/development_states.markdown @@ -137,4 +137,4 @@ def device_state_attributes(self): Entities also have a similar property `state_attributes`, which normally doesn't need to be defined by new platforms. This property is used by base components to add standard sets of attributes to a state. Example: The light component uses `state_attributes` to add brightness to the state dictionary. If you are designing a new component, you should define `state_attributes` instead.

    -To get your component included in the Home Assistant releases, follow the steps described in the [Submit your work](https://home-assistant.io/developers/development_submitting/) section. Basically you only need to move your component in the `homeassistant/component/` directory of your fork and create a Pull Request. +To get your component included in the Home Assistant releases, follow the steps described in the [Submit your work](/developers/development_submitting/) section. Basically you only need to move your component in the `homeassistant/component/` directory of your fork and create a Pull Request. diff --git a/source/developers/documentation/index.markdown b/source/developers/documentation/index.markdown index 33dd22d859..50370c7802 100644 --- a/source/developers/documentation/index.markdown +++ b/source/developers/documentation/index.markdown @@ -10,7 +10,7 @@ footer: true redirect_from: /developers/website/ --- -The website you are reading now is the home of Home Assistant: [https://home-assistant.io](https://home-assistant.io). This is the place where we provide documentation and additional details about Home Assistant for end users and developers. +The website you are reading now is the home of Home Assistant: [https://www.home-assistant.io](/). This is the place where we provide documentation and additional details about Home Assistant for end users and developers. home-assistant.io is built using [Jekyll](http://github.com/mojombo/jekyll) and [these available dependencies](https://pages.github.com/versions/). The pages are written in [markdown](http://daringfireball.net/projects/markdown/). To add a page, you don't need to know about HTML. diff --git a/source/developers/hassio/addon_communication.markdown b/source/developers/hassio/addon_communication.markdown index e7ec413029..3a4f57fb8b 100644 --- a/source/developers/hassio/addon_communication.markdown +++ b/source/developers/hassio/addon_communication.markdown @@ -35,7 +35,7 @@ We have severals services for Hass.io inside Home Assistant to run tasks. To sen To enables calls to the [Hass.io API][hassio-api], add `hassio_api: true` to `config.json` and read the environment variable `HASSIO_TOKEN`. Now you can use the API over the URL: `http://hassio/`. Use the `HASSIO_TOKEN` with header `X-HASSIO-KEY`. -[hass-api]: https://home-assistant.io/developers/rest_api/ -[hass-websocket]: https://home-assistant.io/developers/websocket_api/ +[hass-api]: /developers/rest_api/ +[hass-websocket]: /developers/websocket_api/ [hassio-api]: https://github.com/home-assistant/hassio/blob/master/API.md [hassio-addon-api]: https://github.com/home-assistant/hassio/blob/dev/API.md#restful-for-api-addons diff --git a/source/help/trivia.markdown b/source/help/trivia.markdown index 6d033a243d..f4a91f4a66 100644 --- a/source/help/trivia.markdown +++ b/source/help/trivia.markdown @@ -17,7 +17,7 @@ Isn't it obvious? Home Assistant is the good soul that is assisting you in your ### {% linkable_title Website %} -The website [https://home-assistant.io](https://home-assistant.io) was launched on December 18, 2014 and contains documentation about the setup process, the platforms and components, and for the developers. +The website [https://www.home-assistant.io](/) was launched on December 18, 2014 and contains documentation about the setup process, the platforms and components, and for the developers. ### {% linkable_title Logo %} @@ -38,7 +38,7 @@ This sections just contains some random numbers of the Home Assistant eco-system | [Forum members](https://community.home-assistant.io/) | 92 | 3931 | 16663 | | [Github stars](https://github.com/home-assistant/home-assistant/stargazers) | 2519 | 5239 | 12074 | | [Github forks](https://github.com/home-assistant/home-assistant/network) | 374 | 1424 | 3474 | -| Page views [ha.io](https://home-assistant.io) | 600,372 | 6,614,343 | 23,727,481 | +| Page views [ha.io](/) | 600,372 | 6,614,343 | 23,727,481 | ### {% linkable_title Commit per year %} From 4bb87848f9befa992ff4b171a9c47e64897a3858 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Sat, 24 Mar 2018 22:25:22 -0700 Subject: [PATCH 696/993] clarify MQTT dev tool text --- source/_docs/tools/dev-tools.markdown | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/source/_docs/tools/dev-tools.markdown b/source/_docs/tools/dev-tools.markdown index c9cc6a4c28..99ce3e7cf7 100644 --- a/source/_docs/tools/dev-tools.markdown +++ b/source/_docs/tools/dev-tools.markdown @@ -94,7 +94,8 @@ For more information about jinja2, visit [jinja2 documentation](http://jinja.poc {% linkable_title mqtt %} -This section is only visible if the MQTT is configured. To configure MQTT, add `mqtt:` to the `configuration.yaml` file. For more information, refer to [mqtt](/components/mqtt/) +This section is only visible if the MQTT component is configured. To configure MQTT, add `mqtt:` to the `configuration.yaml` file. For more information, refer to the [mqtt](/components/mqtt/) component. + Even though MQTT in general provides deeper functionality, the developer tools section of MQTT is limited to publishing messages to a given topic. It supports templates for the payload. To publish a message, simply specify the topic name and the payload and click “PUBLISH” button. {% linkable_title Info %} From 330808127df8a577e1886d4105ab29df5e5c6f18 Mon Sep 17 00:00:00 2001 From: Patrick Hofmann Date: Sun, 25 Mar 2018 22:22:17 +0200 Subject: [PATCH 697/993] Documentation of new HomeMatic lock section. (#4537) * Documentation of new HomeMatic lock section. * :pencil2: Minor updates --- source/_components/lock.homematic.markdown | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 source/_components/lock.homematic.markdown diff --git a/source/_components/lock.homematic.markdown b/source/_components/lock.homematic.markdown new file mode 100644 index 0000000000..d536312e2e --- /dev/null +++ b/source/_components/lock.homematic.markdown @@ -0,0 +1,18 @@ +--- +layout: page +title: "Homematic Lock (KeyMatic)" +description: "Instructions how to integrate Homematic locks (KeyMatic) within Home Assistant." +date: 2018-01-28 03:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: homematic.png +ha_category: Lock +ha_release: 0.66 +ha_iot_class: "Local Push" +--- + +The `homematic` lock platform lets you observe and control the state of the HomeMatic [Homematic](http://www.homematic.com/) KeyMatic lock through Home Assistant. + +Devices will be configured automatically. Please refer to the [component](/components/homematic/) configuration on how to setup Homematic. From 5146a3febcdbcf29727916dea58648a5d8327893 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ville=20Skytt=C3=A4?= Date: Mon, 26 Mar 2018 00:57:33 +0300 Subject: [PATCH 698/993] nginx_proxy: Document hsts config variable (#5000) * nginx_proxy: Document hsts config variable * :rocket: Trigger rebuild --- source/_addons/nginx_proxy.markdown | 2 ++ 1 file changed, 2 insertions(+) diff --git a/source/_addons/nginx_proxy.markdown b/source/_addons/nginx_proxy.markdown index f306fccbe5..bc3be8cc44 100644 --- a/source/_addons/nginx_proxy.markdown +++ b/source/_addons/nginx_proxy.markdown @@ -18,6 +18,7 @@ In the `http` section of the `configuration.yaml` file remove `ssl_certificate` "domain": "home.example.com", "certfile": "fullchain.pem", "keyfile": "privkey.pem", + "hsts": "max-age=31536000; includeSubDomains", "customize": { "active": false, "default": "nginx_proxy_default*.conf", @@ -31,6 +32,7 @@ Configuration variables: - **domain** (*Required*): Domain they will proxy run with it. - **certfile** (*Required*): Certificate file to use in the /ssl dir. - **keyfile** (*Required*): Private key file to use in the /ssl dir. +- **hsts** (*Optional*): Value for the [`Strict-Transport-Security`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Strict-Transport-Security) HTTP header to send. If empty or `null`, the header is not sent. - **customize** (*Optional*): If true, additional NGINX configuration files for the default server and additional servers are read from files in the /share dir specified by the `default` and `servers` variables.

    From 0687a6a3ea26406fa6daac21e428b65699d77fac Mon Sep 17 00:00:00 2001 From: DubhAd Date: Mon, 26 Mar 2018 07:15:52 +0100 Subject: [PATCH 699/993] Clarity updates (#5017) Added that you can reload some pieces without a restart. Added reference to ensuring you run the check config as the user you run Home Assistant as (so that the right configuration is found) --- source/_docs/configuration.markdown | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/_docs/configuration.markdown b/source/_docs/configuration.markdown index ae5349fe90..2d0dc0f027 100644 --- a/source/_docs/configuration.markdown +++ b/source/_docs/configuration.markdown @@ -26,12 +26,12 @@ If you want to use a different folder for configuration, use the config command Inside your configuration folder is the file `configuration.yaml`. This is the main file that contains components to be loaded with their configurations. Throughout the documentation you will find snippets that you can add to your configuration file to enable functionality.

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

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

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

    From 0f78e11a86b6351c10ef7f123ab59adb317dda4f Mon Sep 17 00:00:00 2001 From: DubhAd Date: Mon, 26 Mar 2018 07:16:45 +0100 Subject: [PATCH 700/993] Highlighting the hosting of files (#5015) The use of `www/` is hidden in the middle of the page, it's impossible to direct people to it, and trivial to overlook. It's also wrong for Hass.io ;) Updating to make it possible to link to it, and adding details on where to find it on Hass.io. Also adding a note about needing to restart after creating the folder (there's been lots and lots of feedback about needing to do so) --- source/_components/http.markdown | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/source/_components/http.markdown b/source/_components/http.markdown index 88da4c6738..458e10794e 100644 --- a/source/_components/http.markdown +++ b/source/_components/http.markdown @@ -75,8 +75,6 @@ To use those kind of [sensors](/components/sensor.http/) or [binary sensors](com All [requests](/developers/rest_api/#post-apistatesltentity_id) need to be sent to the endpoint of the device and must be **POST**. -If you want to use Home Assistant to host or serve static files then create a directory called `www` under the `.homeassistant` configuration path. The static files in `.homeassistant/www/` can be accessed by the following URL `http://your.domain:8123/local/`. - If you want to apply additional IP filtering, and automatically ban brute force attempts, set `ip_ban_enabled` to `True` and the maximum number of attempts. After the first ban, an `ip_bans.yaml` file will be created in the root configuration folder. It will have the banned IP address and time in UTC when it was added: ```yaml @@ -89,3 +87,11 @@ After a ban is added a Persistent Notification is populated to the Home Assistan

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

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

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

    From da03b58a3aad56355aa588a9001d75730eb59a78 Mon Sep 17 00:00:00 2001 From: Diogo Gomes Date: Mon, 26 Mar 2018 16:50:12 +0100 Subject: [PATCH 701/993] Improve documentation about Mediaroom (#5022) * Improve documentation * Add raw --- source/_components/media_player.mediaroom.markdown | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/source/_components/media_player.mediaroom.markdown b/source/_components/media_player.mediaroom.markdown index 47e79b74ba..39a417a5f3 100644 --- a/source/_components/media_player.mediaroom.markdown +++ b/source/_components/media_player.mediaroom.markdown @@ -47,7 +47,7 @@ Notice that all parameters are optional, and discovery should configure everythi The component has been developed for Portuguese TV operators currently using the Mediaroom platform, but should also work in other deployments in which the STB can be controlled remotely through a socket on port 8082. -In most cases (single STB) you just need to setup the *platform* and discovery will do the rest. In case you have more than one STB you are required to set the *host* in each one of the entries. +In most cases (single STB) you just need to setup the *platform* and discovery will do the rest. If the STB is on the same network segment as Home Assistant, it can determine whether the device is turned on or off. Without this, the component will fail to determine the Set-top box status, and you are required to add the *optimistic* configuration variable. @@ -55,8 +55,9 @@ If the STB is on the same network segment as Home Assistant, it can determine wh ### {% linkable_title Example `press_button` script %} -The `play_media` function can be used in scripts to change channels. +The `play_media` function can be used in scripts to change channels and emulate button pressing from a remote control. +{% raw %} ```yaml # Example play_media script # @@ -67,6 +68,8 @@ press_button: entity_id: media_player.mediaroom_stb media_content_id: "{{ value }}" media_content_type: "channel" +``` +{% endraw %} ### {% linkable_title Example configuration with 2 STB %} From 45617ed8680f0acb1f4203d9f0952c4c001d5683 Mon Sep 17 00:00:00 2001 From: Sacha Telgenhof Date: Tue, 27 Mar 2018 00:53:00 +0900 Subject: [PATCH 702/993] Added another implementation of MQTT JSON Lights: AiLight (#5024) * Added AiLight implementation of a MQTT JSON Light * Removed empty lines. --- 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 6313b71e3d..9455777285 100644 --- a/source/_components/light.mqtt_json.markdown +++ b/source/_components/light.mqtt_json.markdown @@ -228,3 +228,5 @@ Home Assistant will then convert its 8bit value in the message to and from the d - [MQTT JSON Light](https://github.com/mertenats/Open-Home-Automation/tree/master/ha_mqtt_rgbw_light_with_discovery) is another implementation for ESP8266 including [MQTT discovery](/docs/mqtt/discovery/). - [esphomelib](https://github.com/OttoWinter/esphomelib) is a library for ESP8266 and ESP32 boards that has many of Home Assistant's MQTT features (like [discovery](/docs/mqtt/discovery/)) pre-implemented and provides high-level abstractions for components such as lights or sensors. + +- [AiLight](https://github.com/stelgenhof/AiLight) is a custom firmware for the Ai-Thinker (and equivalent) RGBW WiFi light bulbs that has an ESP8266 onboard and controlled by the MY9291 LED driver. It implements the [MQTT JSON light](/components/light.mqtt_json/) platform and supports ON/OFF, RGBW colours, brightness, colour temperature, flashing and transitions. Also it includes [MQTT Auto Discovery](/docs/mqtt/discovery/)) and the MQTT Last Will and Testament is enabled as well. \ No newline at end of file From e54751230761acc544b1cdce2e8251a62fa1fe2d Mon Sep 17 00:00:00 2001 From: Dan Nixon Date: Mon, 26 Mar 2018 17:24:00 +0100 Subject: [PATCH 703/993] Update optionality of Telnet Switch config (#5007) State command and value template are optional parameters. --- source/_components/switch.telnet.markdown | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/_components/switch.telnet.markdown b/source/_components/switch.telnet.markdown index 858a0b21b6..ef1345cd5b 100644 --- a/source/_components/switch.telnet.markdown +++ b/source/_components/switch.telnet.markdown @@ -39,6 +39,6 @@ Configuration variables: - **port** (*Optional*): Port to connect to. Default is 23 if not defined. - **command_on** (*Required*): Command to turn device on. - **command_off** (*Required*): Command to turn device off. - - **command_state** (*Required*): Command to determine the state of the switch. If not defined the switch will assume successful state changes. - - **value_template** (*Required*): The template evaluating to `true` will indicate that the switch is on. + - **command_state** (*Optional*): Command to determine the state of the switch. If not defined the switch will assume successful state changes. + - **value_template** (*Optional*): The template evaluating to `true` will indicate that the switch is on. - **name** (*Optional*): The name used to display the switch in the frontend. From 50b20f06da39c44ef71fad232633b20efa9197d7 Mon Sep 17 00:00:00 2001 From: Sebastian Muszynski Date: Tue, 27 Mar 2018 20:30:16 +0200 Subject: [PATCH 704/993] yeelight: Operation mode service added (#4964) --- source/_components/light.yeelight.markdown | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/source/_components/light.yeelight.markdown b/source/_components/light.yeelight.markdown index e3fc28821f..b9808e7760 100644 --- a/source/_components/light.yeelight.markdown +++ b/source/_components/light.yeelight.markdown @@ -63,3 +63,14 @@ This component is tested to work with the following models. If you have a differ - **YLDD02YL**: Lightstrip (Color) - **MJCTD01YL**: Xiaomi Mijia Bedside Lamp - WIFI Version! - **MJTD01YL**: Xiaomi Mijia Smart LED Desk Lamp (autodiscovery isn't possible because the device doesn't support mDNS due to the small amount of RAM) + +## {% linkable_title Platform Services %} + +### {% linkable_title Service `light.yeelight_set_mode` %} + +Set a operation mode. + +| Service data attribute | Optional | Description | +|---------------------------|----------|---------------------------------------------------------------------------------------------| +| `entity_id` | yes | Only act on a specific yeelight. Else targets all. | +| `mode` | no | Operation mode. Valid values are 'last', 'normal', 'rgb', 'hsv', 'color_flow', 'moonlight'. | From 88c8cc2ff102f0ddc7823bde8a34016fd633786d Mon Sep 17 00:00:00 2001 From: Mikael Svensson Date: Wed, 28 Mar 2018 09:04:48 +0200 Subject: [PATCH 705/993] Template function state_attr to get attribute from a state (#4981) * Adds docs for https://github.com/home-assistant/home-assistant/pull/13378 * :ambulance: Fixes build error --- source/_docs/configuration/templating.markdown | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/source/_docs/configuration/templating.markdown b/source/_docs/configuration/templating.markdown index d00a879b7b..5bd5d45789 100644 --- a/source/_docs/configuration/templating.markdown +++ b/source/_docs/configuration/templating.markdown @@ -68,6 +68,7 @@ Home Assistant adds extensions to allow templates to access all of the current s - `states.sensor.temperature` returns the state object for `sensor.temperature`. - `states('device_tracker.paulus')` will return the state string (not the object) of the given entity or `unknown` if it doesn't exist. - `is_state('device_tracker.paulus', 'home')` will test if the given entity is specified state. +- `state_attr('device_tracker.paulus', 'battery')` will return the value of the attribute or None if it doesn't exist. - `is_state_attr('device_tracker.paulus', 'battery', 40)` will test if the given entity is specified state. - `now()` will be rendered as current time in your time zone. - For specific values: `now().second`, `now().minute`, `now().hour`, `now().day`, `now().month`, `now().year`, `now().weekday()` and `now().isoweekday()` @@ -114,7 +115,7 @@ The next two statements result in same value if state exists. The second one wil ### {% linkable_title Attributes %} -Print an attribute if state is defined +Print an attribute if state is defined. Both will return the same thing but the last one you can specify entity_id from a variable. ```text {% raw %}{% if states.device_tracker.paulus %} @@ -124,6 +125,18 @@ Print an attribute if state is defined {% endif %}{% endraw %} ``` +With strings + +```text +{% raw %}{% set tracker_name = "paulus"%} + +{% if states("device_tracker." + tracker_name) != "unknown" %} + {{ state_attr("device_tracker." + tracker_name, "battery")}} +{% else %} + ?? +{% endif %}{% endraw %} +``` + ### {% linkable_title Sensor states %} Print out a list of all the sensor states. From 9cc2bce7614cb67c999f5372f1172b7d67d9ab21 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Wed, 28 Mar 2018 00:18:38 -0700 Subject: [PATCH 706/993] Make edit links GitHub aware (#5038) * Make edit links GitHub aware * Fix repo url * don't mutate existing string * Move comment * Fix url --- plugins/environment_variables.rb | 17 +++++++++++++++++ source/_includes/edit_github.html | 2 +- 2 files changed, 18 insertions(+), 1 deletion(-) create mode 100644 plugins/environment_variables.rb diff --git a/plugins/environment_variables.rb b/plugins/environment_variables.rb new file mode 100644 index 0000000000..7d9203f164 --- /dev/null +++ b/plugins/environment_variables.rb @@ -0,0 +1,17 @@ +module Jekyll + class EnvironmentVariablesGenerator < Generator + def generate(site) + # https://www.netlify.com/docs/continuous-deployment/#build-environment-variables + repo_url = ENV['REPOSITORY_URL'] || 'https://github.com/home-assistant/home-assistant.github.io' + + # Rewrite urls if repo url is the ssh format. + if repo_url.start_with? 'git@github.com:' + repo_url = repo_url.sub 'git@github.com:', 'https://github.com/' + end + + # These values will be available as {{ site.NLY_REPOSITORY_URL }} + site.config['NLY_REPOSITORY_URL'] = repo_url + site.config['NLY_HEAD'] = ENV['HEAD'] || 'current' + end + end +end diff --git a/source/_includes/edit_github.html b/source/_includes/edit_github.html index f599869c81..b5fa2329b8 100644 --- a/source/_includes/edit_github.html +++ b/source/_includes/edit_github.html @@ -1,4 +1,4 @@ {% assign url_parts = page.url | split: '/' %} {% if page.hide_github_edit != true %} - + {% endif %} From 2707746624c1513f704de5c08373ee830692dd88 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Wed, 28 Mar 2018 11:28:55 +0200 Subject: [PATCH 707/993] Add details for values if the user should replace it (fixes #4999) --- source/developers/documentation/standards.markdown | 2 ++ 1 file changed, 2 insertions(+) diff --git a/source/developers/documentation/standards.markdown b/source/developers/documentation/standards.markdown index 0a6d2fa7ad..adcc3bd521 100644 --- a/source/developers/documentation/standards.markdown +++ b/source/developers/documentation/standards.markdown @@ -28,6 +28,8 @@ To ensure that the documentation for Home Assistant is consistent and easy to fo * Use `[string, int]` for configuration variables that accept multiple types. * Use YAML sequence syntax in the sample code if it is supported. * All examples should be formatted to be included in `configuration.yaml` unless explicitly stated. + * Use capital letters and `_` to indicate that the value needs to be replaced. E.g., `api_key: YOUR_API_KEY` or `api_key: REPLACE_ME`. + * If you know that the API key or value contains [control characters](https://en.wikipedia.org/wiki/YAML#Syntax), e.g., `#`, `[`, `?`, etc., wrap it in quotes and add a note. * Component and platform names should be a link to their respective documentation pages. ## {% linkable_title Templates %} From c74ec2dd24541d2872589dc44dda478c1503bdea Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Thu, 29 Mar 2018 09:05:24 +0200 Subject: [PATCH 708/993] Add details for reporting issues (#5025) * Add details for reporting issues * Fixes --- source/help/index.markdown | 6 ++- source/help/reporting_issues.markdown | 72 +++++++++++++++++++++++++++ 2 files changed, 76 insertions(+), 2 deletions(-) create mode 100644 source/help/reporting_issues.markdown diff --git a/source/help/index.markdown b/source/help/index.markdown index 12e1dfde02..ab661f2508 100644 --- a/source/help/index.markdown +++ b/source/help/index.markdown @@ -21,11 +21,13 @@ There are various ways to get in touch with the Home Assistant community. It doe ### {% linkable_title Bugs, Feature requests, and alike %} -Have you found an issue in your Home Assistant installation? Please report it. Reporting it makes it easy to track and ensures that it gets fixed. +Have you found an issue in your Home Assistant installation? Please report it. Reporting it makes it easy to track and ensures that it gets fixed. For more details please refer to [Reporting issues](help/reporting_issues/) page. - [Issue tracker Home Assistant](https://github.com/home-assistant/home-assistant/issues) - [Issue tracker home-assistant.io](https://github.com/home-assistant/home-assistant.io/issues) (Website and documentation) -- [Feature requests Home Assistant](https://community.home-assistant.io/c/feature-requests) +- [Issue tracker Frontend](https://github.com/home-assistant/home-assistant-polymer/issues) (Frontend) +- [Issue tracker Hass.io](https://github.com/home-assistant/hassio) +- [Feature requests Home Assistant](https://community.home-assistant.io/c/feature-requests) (Don't post feature requests in the issue trackers. Thanks.) ### {% linkable_title Videos, talks, workshops and alike %} diff --git a/source/help/reporting_issues.markdown b/source/help/reporting_issues.markdown new file mode 100644 index 0000000000..f3764c3d08 --- /dev/null +++ b/source/help/reporting_issues.markdown @@ -0,0 +1,72 @@ +--- +layout: page +title: "Reporting issues" +description: "Reporting issues about Home Assistant" +date: 2018-03-26 09:00 +sidebar: false +comments: false +sharing: true +footer: true +--- + +If you have an installation, a setup or a configuration issue please use our [Forum](https://community.home-assistant.io/) to get help. We have a big community which will help you if they can. + +If you found a bug then please report it in one of our [trackers](help/#bugs-feature-requests-and-alike). To help you and our developers to identify the issue quickly, please fill out the provided template. The "weird" content you will see is there to render your entry in a nice format after submitting. It's just [markddown](https://guides.github.com/features/mastering-markdown/). + +Use the command below to get the Home Assistant release you are running from a command-line. + +```bash +$ hass --version +``` + +Otherwise check the **About** page which is accessible in the **Developer tools** of the Home Assistant frontend. + +### {% linkable_title First Home Assistant release with the issue %} + +Please provide the release which contains the issue. + +### {% linkable_title Last working Home Assistant release (if known) %} + +If possible, provide the latest release of which you know that the component or platform was working. Home Assistant is evolving very fast and issues may already be addressed or be introduced by a recent change. + +### {% linkable_title Operating environment (Hass.io/Docker/Windows/etc.) %} + +There are many different ways to run Home Assistant. In this section please mention which you are using, e.g. manual installation, [Hass.io](/hassio/), Hasbian or as container (Docker). It can help if you mention which operating system you are using because not all are supported on the same level. + +### {% linkable_title Component/platform %} + +Please add the link to the documention of the component/platform in question. E.g., + +- issue with the `random` sensor: [https://www.home-assistant.io/components/sensor.random/](/components/sensor.random/) +- issue with the `hue` component: [https://www.home-assistant.io/components/hue/](/components/hue/) + +### {% linkable_title Description of problem %} + +Provide a summary of your issue and tell us what's wrong. + +There are components and platform which require additional steps (installing third-party tools, compilers, etc.) to get your setup working. Please describe the steps you took and the ones to reproduce the issue if needed. + +### {% linkable_title Problem-relevant `configuration.yaml` entries %} + +To exclude configuration issues and allow the developers to quickly test, and perhaps reproduce, your issue, add the relevant part of your `configuration.yaml` file. This file is located in your [configuration folder](/docs/configuration/). + +```yaml +sensor: + - platform: random +``` + +Make sure that you don't post your username, password, API key, access token or other [secrets](/docs/configuration/secrets/). + +### {% linkable_title Traceback (if applicable) %} + +If things go wrong there will be a so-called traceback or an error message in other words in your log. Please include this. It starts with **Traceback** and can contain informations where the error was triggered in the code. + +```bash +Traceback (most recent call last): +... +``` + +### {% linkable_title Additional information %} + +This section can contain additional details or other observation. Often the little things can help as well. + From f0bff4278eb37274e654fa150278412c98fc304b Mon Sep 17 00:00:00 2001 From: Sebastian Muszynski Date: Thu, 29 Mar 2018 09:05:42 +0200 Subject: [PATCH 709/993] Yeelight Smart LED Ceiling Light added to the list of supported devices (#5029) --- source/_components/light.yeelight.markdown | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/source/_components/light.yeelight.markdown b/source/_components/light.yeelight.markdown index b9808e7760..002e20ff1f 100644 --- a/source/_components/light.yeelight.markdown +++ b/source/_components/light.yeelight.markdown @@ -35,7 +35,7 @@ light: Configuration variables: -- **ip** (*Required*): IP(s) of your wifi bulbs +- **ip** (*Required*): IP(s) of your Wifi bulbs - **name** (*Optional*): A friendly name for the device. - **transition** (*Optional*, default 350): Smooth transitions over time (in ms). - **use_music_mode** (*Optional*, default False): Enable music mode. @@ -63,6 +63,8 @@ This component is tested to work with the following models. If you have a differ - **YLDD02YL**: Lightstrip (Color) - **MJCTD01YL**: Xiaomi Mijia Bedside Lamp - WIFI Version! - **MJTD01YL**: Xiaomi Mijia Smart LED Desk Lamp (autodiscovery isn't possible because the device doesn't support mDNS due to the small amount of RAM) +- **YLXD01YL**: Yeelight Smart LED Ceiling Light - Youth Version + ## {% linkable_title Platform Services %} From 069a9f570ed670ec05c11366f5073a3fd7d96751 Mon Sep 17 00:00:00 2001 From: Marco Bakera Date: Thu, 29 Mar 2018 09:05:59 +0200 Subject: [PATCH 710/993] Fixed minor typo in the description of 'max'. (#5043) * Fixed minor typo in the description of 'max'. * Update link --- source/_docs/configuration/templating.markdown | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/_docs/configuration/templating.markdown b/source/_docs/configuration/templating.markdown index d00a879b7b..b8752c54ac 100644 --- a/source/_docs/configuration/templating.markdown +++ b/source/_docs/configuration/templating.markdown @@ -83,10 +83,10 @@ Home Assistant adds extensions to allow templates to access all of the current s - Filter `timestamp_local` will convert an UNIX timestamp to local time/data. - Filter `timestamp_utc` will convert an UNIX timestamp to UTC time/data. - Filter `timestamp_custom(format_string, local_boolean)` will convert an UNIX timestamp to a custom format, the use of a local timestamp is default, supporting [Python format options](https://docs.python.org/3/library/time.html#time.strftime). -- Filter `max` will obtain the larget item in a sequence. +- Filter `max` will obtain the largest item in a sequence. - Filter `min` will obtain the smallest item in a sequence. -[strp-format]: https://docs.python.org/3.4/library/datetime.html#strftime-and-strptime-behavior +[strp-format]: https://docs.python.org/3.6/library/datetime.html#strftime-and-strptime-behavior

    If your template uses an `entity_id` that begins with a number (example: `states.device_tracker.2008_gmc`) you must use a bracket syntax to avoid errors caused by rendering the `entity_id` improperly. In the example given, the correct syntax for the device tracker would be: `states.device_tracker['2008_gmc']` From cb0398bee5f34b13a3e376c661e292b891dab745 Mon Sep 17 00:00:00 2001 From: Diogo Gomes Date: Thu, 29 Mar 2018 08:06:18 +0100 Subject: [PATCH 711/993] clarify default db_url (#5021) * clarify default db_url * Update format --- source/_components/sensor.sql.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/sensor.sql.md b/source/_components/sensor.sql.md index 28ec379788..e676ca9d43 100644 --- a/source/_components/sensor.sql.md +++ b/source/_components/sensor.sql.md @@ -37,7 +37,7 @@ sensor: db_url: description: The URL which points to your database. See [supported engines](/components/recorder/#custom-database-engines). required: false - default: Defaults to the recorder db_url. + default: "Defaults to the default recorder `db_url` (not the current `db_url` of recorder)." type: string queries: description: List of your queries. From 55871908661d8ceab9cc9b8f7cfff906c985fcc3 Mon Sep 17 00:00:00 2001 From: DubhAd Date: Thu, 29 Mar 2018 08:23:20 +0100 Subject: [PATCH 712/993] Added note about venv upgrade (#5030) * Added note about venv upgrade Added a note that if you've upgraded Python you'll need to rebuild the venv. * Minor changes * Replace short version --- source/_docs/installation/virtualenv.markdown | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/source/_docs/installation/virtualenv.markdown b/source/_docs/installation/virtualenv.markdown index 386adbc7bf..7c56772af7 100644 --- a/source/_docs/installation/virtualenv.markdown +++ b/source/_docs/installation/virtualenv.markdown @@ -17,7 +17,7 @@ It's recommended when installing Python packages that you use a [virtual environ _(If you're on a Debian based system, you will need to install Python virtual environment support using `apt-get install python3-pip python3-venv`.)_

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

    ### {% linkable_title Install %} @@ -74,3 +74,12 @@ It is recommended to use the [advanced guide](/docs/installation/raspberry-pi/)

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

    + +### {% linkable_title After upgrading Python %} + +If you've upgraded Python (for example, you were running 3.5.2 and now you've installed 3.5.4) then you'll need to build a new virtual environment. Simply rename your existing virtual environment directory: + +```bash +$ mv homeassistant homeassistant.old +``` +Then follow the [Install](/docs/installation/virtualenv/#install) steps again, being sure to use the newly installed version of Python. From 338eeb2295c1a8344fae3012d9f3152b9ae5b65d Mon Sep 17 00:00:00 2001 From: Nick Horvath Date: Thu, 29 Mar 2018 03:23:31 -0400 Subject: [PATCH 713/993] Add instructions on running MQTT ssl/nonssl simultaneously (#5027) * Add instructions on running MQTT ssl/nonssl simultaneously I wanted to be able to recieve MQTT from my cell phone over SSL, but wanted local things that have limited RAM to be able to connect without the burden of SSL code. * Tweaking * Add comma --- source/_addons/mosquitto.markdown | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/source/_addons/mosquitto.markdown b/source/_addons/mosquitto.markdown index de3df29894..f143d9ac34 100644 --- a/source/_addons/mosquitto.markdown +++ b/source/_addons/mosquitto.markdown @@ -43,7 +43,7 @@ Configuration variables: ### {% linkable_title Home Assistant configuration %} -To use the Mosquitto as [broker](/docs/mqtt/broker/#run-your-own) add the following entry to the `configuration.yaml` file. +To use the Mosquitto as [broker](/docs/mqtt/broker/#run-your-own), add the following entry to the `configuration.yaml` file. ```yaml # Example configuration.yaml entry @@ -59,3 +59,20 @@ mqtt: username: YOUR_USERNAME password: YOUR_PASSWORD ``` + +### {% linkable_title Listening simultaneously on SSL/TLS (8883) and insecure (1883) ports %} + +1. Configure SSL/TLS as normal. +2. Set `customize` flag to `true` in your configuration. +3. Create a file in `/share/mosquitto` named `insecure.conf` with the following contents: + +```text +listener 1883 +protocol mqtt +``` + +4. Restart MQTT + +

    +It's recommened that you only open your firewall to the SSL/TLS port (8883) and only use the insecure port (1883) for local devices. +

    From f8393f0659298ae9de76e4002493dd0ded46114b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ville=20Skytt=C3=A4?= Date: Thu, 29 Mar 2018 10:23:42 +0300 Subject: [PATCH 714/993] sensor.command_line: Round example CPU temperature value (#5032) * sensor.command_line: Round example CPU temperature value multiply returns a float, which is inexact and sometimes gets rendered with a lot of decimal places. Round additionally to get cleaner result. * Move raw --- source/_components/sensor.command_line.markdown | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/source/_components/sensor.command_line.markdown b/source/_components/sensor.command_line.markdown index 7b3662b1e1..5cc0b4d9ea 100644 --- a/source/_components/sensor.command_line.markdown +++ b/source/_components/sensor.command_line.markdown @@ -61,6 +61,7 @@ sensor: Thanks to the [`proc`](https://en.wikipedia.org/wiki/Procfs) file system, various details about a system can be retrieved. Here the CPU temperature is of interest. Add something similar to your `configuration.yaml` file: +{% raw %} ```yaml # Example configuration.yaml entry sensor: @@ -69,8 +70,9 @@ sensor: command: "cat /sys/class/thermal/thermal_zone0/temp" # If errors occur, remove degree symbol below unit_of_measurement: "°C" - value_template: '{% raw %}{{ value | multiply(0.001) }}{% endraw %}' + value_template: '{{ value | multiply(0.001) | round(1) }}' ``` +{% endraw %} ### {% linkable_title Monitoring failed login attempts on Home Assistant %} @@ -149,11 +151,13 @@ sensor: [Templates](/docs/configuration/templating/) are supported in the `command:` configuration variable. This could be used if you want to include the state of a specific sensor as an argument to your external script. +{% raw %} ```yaml # Example configuration.yaml entry sensor: - platform: command_line name: wind direction - command: 'sh /home/pi/.homeassistant/scripts/wind_direction.sh {% raw %}{{ states.sensor.wind_direction.state }}{% endraw %}' + command: 'sh /home/pi/.homeassistant/scripts/wind_direction.sh {{ states.sensor.wind_direction.state }}' unit_of_measurement: "Direction" ``` +{% endraw %} From ddbd6705479e98b4e8595cbc9fcc1757ee58ecff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ville=20Skytt=C3=A4?= Date: Thu, 29 Mar 2018 10:24:18 +0300 Subject: [PATCH 715/993] Spelling and grammar fixes (#5031) * Spelling and grammar fixes * Minor changes --- source/_addons/nginx_proxy.markdown | 2 +- source/_addons/samba.markdown | 2 +- .../binary_sensor.hikvision.markdown | 73 ++++++++++--------- source/_components/foursquare.markdown | 4 +- source/_components/frontend.markdown | 2 +- source/_components/google_assistant.markdown | 2 +- ...age_processing.dlib_face_identify.markdown | 2 +- source/_components/knx.markdown | 2 +- .../_components/media_player.firetv.markdown | 2 +- source/_components/melissa.markdown | 2 +- source/_components/notify.gntp.markdown | 2 +- source/_components/sensor.rest.markdown | 2 +- source/_components/switch.fritzdect.markdown | 2 +- source/_components/switch.kankun.markdown | 2 +- source/_components/tellstick.markdown | 2 +- .../custom_panel_using_react.markdown | 2 +- source/_docs/installation/docker.markdown | 2 +- .../2018-03-24-new-release-schedule.markdown | 2 +- 18 files changed, 55 insertions(+), 54 deletions(-) diff --git a/source/_addons/nginx_proxy.markdown b/source/_addons/nginx_proxy.markdown index bc3be8cc44..e1d8a5f01c 100644 --- a/source/_addons/nginx_proxy.markdown +++ b/source/_addons/nginx_proxy.markdown @@ -11,7 +11,7 @@ footer: true Setup an SSL proxy with NGINX and redirect port 80 to 443. Make sure you have generated a certificate before you start this add-on. -In the `http` section of the `configuration.yaml` file remove `ssl_certificate` and `ssl_key` and don't enter the port in the `base_url` to avoid a HTTP 502 error. +In the `http` section of the `configuration.yaml` file remove `ssl_certificate` and `ssl_key` and don't enter the port in the `base_url` to avoid an HTTP 502 error. ```json { diff --git a/source/_addons/samba.markdown b/source/_addons/samba.markdown index a8cd931cbe..9d0f18923f 100644 --- a/source/_addons/samba.markdown +++ b/source/_addons/samba.markdown @@ -35,7 +35,7 @@ Configuration variables: - **name** (*Optional*): Set netbios name of Hass.io device. Default is `hassio`. - **workgroup** (*Optional*): Set network workgroup name. Default is `WORKGROUP`. - **guest** (*Optional*): Allow login without a username or password. Default is `true`. -- **map** (*Optional*): Control which folders will be exposed. `config` shares the Home Assistant configuration folder. `addons` shares the local custom repositiory. `share` shares a folder that can be accessed by add-ons and Home Assistant. `backup` shares access to snapshot files. `ssl` shares certificate storage. Be careful with the `ssl` option! Defaults are all set to `true`, except for `ssl`. +- **map** (*Optional*): Control which folders will be exposed. `config` shares the Home Assistant configuration folder. `addons` shares the local custom repository. `share` shares a folder that can be accessed by add-ons and Home Assistant. `backup` shares access to snapshot files. `ssl` shares certificate storage. Be careful with the `ssl` option! Defaults are all set to `true`, except for `ssl`. - **username** (*Optional*): Username for logging in if guest login is not used. - **password** (*Optional*): Password for `username`. An empty password is not supported. - **interface** (*Optional*): Interface that will start the share. Normally this is `eth0` for ethernet wired connection and `wlan0` for wireless connection. diff --git a/source/_components/binary_sensor.hikvision.markdown b/source/_components/binary_sensor.hikvision.markdown index 803e8b40a2..7e93130271 100644 --- a/source/_components/binary_sensor.hikvision.markdown +++ b/source/_components/binary_sensor.hikvision.markdown @@ -15,22 +15,22 @@ ha_iot_class: "Local Push" The Hikvision Binary Sensor is a platform that parses the event stream of a [Hikvision IP Camera or NVR](http://www.hikvision.com/) and presents the camera/nvr events to Home Assistant as binary sensors with either an "off" or "on" state. -The platform will automatically add all sensors to Home Assistant that are configured within the camera/nvr interface to "Notify the surveillance center" as a trigger. If you would like to hide a sensor type you can do so by either unchecking "Notify the surveillance center" in the camera configuration or by using the "ignored" customize option detailed below. +The platform will automatically add all sensors to Home Assistant that are configured within the camera/nvr interface to "Notify the surveillance center" as a trigger. If you would like to hide a sensor type you can do so by either unchecking "Notify the surveillance center" in the camera configuration or by using the "ignored" customize option detailed below.

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

    For example, if you configure a camera with the name "Front Porch" that has motion detection and line crossing events enabled to notify the surveillance center the following binary sensors will be added to Home Assistant: -``` +```text binary_sensor.front_porch_motion binary_sensor.front_port_line_crossing ``` -When used with a NVR device the sensors will be appended with the channel number they represent. For example, if you configure an NVR with the name "Home" that supports 2 cameras with motion detection and line crossing events enabled to notify the surveillance center the following binary sensors will be added to Home Assistant: +When used with a NVR device the sensors will be appended with the channel number they represent. For example, if you configure an NVR with the name "Home" that supports 2 cameras with motion detection and line crossing events enabled to notify the surveillance center the following binary sensors will be added to Home Assistant: -``` +```text binary_sensor.home_motion_1 binary_sensor.home_motion_2 binary_sensor.home_line_crossing_1 @@ -38,35 +38,37 @@ binary_sensor.home_line_crossing_2 ``` This platform should work with all Hikvision cameras and nvrs, and has been confirmed to work with the following models: + - DS-2CD3132-I - DS-2CD2232-I5 - DS-2CD2032-I - DS-2CD2042WD-I - DS-2CD2142FWD-I -To enable this sensor, the following lines are required in your `configuration.yaml`: +To enable this sensor, the following lines are required in your `configuration.yaml` file: ```yaml binary_sensor: - platform: hikvision - host: IP_ADDRESS - username: user - password: pass + - platform: hikvision + host: IP_ADDRESS + username: user + password: pass ``` Configuration options for a Hikvision Sensor: -- **name** (*Optional*): The name you'd like to give the camera in Home Assistant, defaults to name defined in the camera. - **host** (*Required*): The IP address of the camera you would like to connect to. -- **port** (*Optional*): The port to connect to the camera on, defaults to 80. -- **ssl** (*Optional*): True if you want to connect with https. Be sure to set the port also. - **username** (*Required*): The username to authenticate with. - **password** (*Required*): The password to authenticate with. +- **name** (*Optional*): The name you'd like to give the camera in Home Assistant, defaults to name defined in the camera. +- **port** (*Optional*): The port to connect to the camera on, defaults to 80. +- **ssl** (*Optional*): True if you want to connect with https. Be sure to set the port also. - **customize** (*Optional*): This attribute contains sensor-specific override values. Only sensor name needs defined: - **ignored** (*Optional*): Ignore this sensor completely. It won't be shown in the Web Interface and no events are generated for it. - **delay** (*Optional*): Specify the delay to wait after a sensor event ends before notifying Home Assistant. This is useful to catch multiple quick trips in one window without the state toggling on and off. The default delay is 5 seconds. Supported sensor/event types are: + - Motion - Line Crossing - Field Detection @@ -84,37 +86,36 @@ Supported sensor/event types are: - Face Detection - Scene Change Detection - Example of a configuration in your `configuration.yaml` that utilizes the customize options for a camera: ```yaml binary_sensor: - platform: hikvision - host: 192.168.X.X - port: 80 - ssl: False - username: user - password: pass - customize: - motion: - delay: 30 - line_crossing: - ignored: True + - platform: hikvision + host: 192.168.X.X + port: 80 + ssl: False + username: user + password: pass + customize: + motion: + delay: 30 + line_crossing: + ignored: True ``` Example of a configuration in your `configuration.yaml` that utilizes the customize options for a nvr: ```yaml binary_sensor: - platform: hikvision - host: 192.168.X.X - port: 80 - ssl: False - username: user - password: pass - customize: - motion_1: - delay: 30 - field_detection_2: - ignored: True + - platform: hikvision + host: 192.168.X.X + port: 80 + ssl: False + username: user + password: pass + customize: + motion_1: + delay: 30 + field_detection_2: + ignored: True ``` diff --git a/source/_components/foursquare.markdown b/source/_components/foursquare.markdown index de70d05661..5ec302887e 100644 --- a/source/_components/foursquare.markdown +++ b/source/_components/foursquare.markdown @@ -31,7 +31,7 @@ Configuration variables: #### Getting the access token #### After you have registered your APP on your [My Apps Page](https://foursquare.com/developers/apps) you get a `CLIENT_ID` and you have specified a -`REDIRECT_URL` which can be any URL you like, but since it will get your access token via a HTTP GET request, it should be a URL which will ignore the `access_token` HTTP GET variable. A good idea is to choose the URL of your Home Assistant. +`REDIRECT_URL` which can be any URL you like, but since it will get your access token via an HTTP GET request, it should be a URL which will ignore the `access_token` HTTP GET variable. A good idea is to choose the URL of your Home Assistant. Visit the following URL in your browser: ``` @@ -40,7 +40,7 @@ https://foursquare.com/oauth2/authenticate?client_id=CLIENT_ID&response_type=tok and change the `CLIENT_ID` and `YOUR_REGISTERED_REDIRECT_URL` to your actual values. You will receive an OAuth request landing page, asking you if you want to connect your Foursquare account to your newly created app. Say "Yes". -After that, you will get redirected to your `REDIRECT_URL` with the `access_token` as a HTTP GET variable. Copy everything after the = and paste it in your configuration.yaml as the `access_token`. +After that, you will get redirected to your `REDIRECT_URL` with the `access_token` as an HTTP GET variable. Copy everything after the = and paste it in your configuration.yaml as the `access_token`. ### {% linkable_title Real-Time API %} diff --git a/source/_components/frontend.markdown b/source/_components/frontend.markdown index 4ba9e004cd..871db22f68 100644 --- a/source/_components/frontend.markdown +++ b/source/_components/frontend.markdown @@ -135,7 +135,7 @@ Those will be loaded via `` on a ### {% linkable_title Manual Language Selection %} -The browser language is automatically detected. To use a different language, go to **General** in the Configuration panel and select a one from "Choose a Language". It will be applied immediately. +The browser language is automatically detected. To use a different language, go to **General** in the Configuration panel and select one from "Choose a Language". It will be applied immediately.

    diff --git a/source/_components/google_assistant.markdown b/source/_components/google_assistant.markdown index b19e182e2e..6fe9d5ff87 100644 --- a/source/_components/google_assistant.markdown +++ b/source/_components/google_assistant.markdown @@ -67,7 +67,7 @@ agent_user_id: required: false type: string api_key: - description: An API Key generated for the project from [Google Console](https://console.cloud.google.com/apis/api/homegraph.googleapis.com/overview) which allows you to update devices without unlinking and relinking an account (see step 9 below). If not provided then the `google_assistant.request_sync` service is not exposed. It is recommended to set up this configuration key as it also allows the usage of the following command, "Ok Google, sync my devices". Once you have setup this componenet you will need to call this service (or command) each time you add a new device that you wish to control via the Google Assistant integration. + description: An API Key generated for the project from [Google Console](https://console.cloud.google.com/apis/api/homegraph.googleapis.com/overview) which allows you to update devices without unlinking and relinking an account (see step 9 below). If not provided then the `google_assistant.request_sync` service is not exposed. It is recommended to set up this configuration key as it also allows the usage of the following command, "Ok Google, sync my devices". Once you have setup this component you will need to call this service (or command) each time you add a new device that you wish to control via the Google Assistant integration. required: false type: string expose_by_default: diff --git a/source/_components/image_processing.dlib_face_identify.markdown b/source/_components/image_processing.dlib_face_identify.markdown index 5cac74b560..34690d6b8f 100644 --- a/source/_components/image_processing.dlib_face_identify.markdown +++ b/source/_components/image_processing.dlib_face_identify.markdown @@ -13,7 +13,7 @@ featured: false ha_release: 0.44 --- -The `dlib_face_identify` image processing platform allows you to use the [Dlib](http://www.dlib.net/) through Home Assistant. This platform allow you to identify persons on camera and fire a event with identify persons. +The `dlib_face_identify` image processing platform allows you to use the [Dlib](http://www.dlib.net/) through Home Assistant. This platform allow you to identify persons on camera and fire an event with identify persons. For using the result inside an automation rule, take a look at the [component](/components/image_processing/) page. diff --git a/source/_components/knx.markdown b/source/_components/knx.markdown index f27048d4e7..7acfae7676 100644 --- a/source/_components/knx.markdown +++ b/source/_components/knx.markdown @@ -116,7 +116,7 @@ knx: ``` * **type**: Type of the exposed value. Either time or datetime or any supported type of [KNX Sensor](/components/sensor.knx/) (e.g., "temperature" or "humidity"). -* **entity_id**: Entity id of the HASS component to be exposed. Not necessarry for types time and datetime. +* **entity_id**: Entity id of the HASS component to be exposed. Not necessary for types time and datetime. * **address**: KNX group address. diff --git a/source/_components/media_player.firetv.markdown b/source/_components/media_player.firetv.markdown index 96d9c48c0e..0abf2b3dad 100644 --- a/source/_components/media_player.firetv.markdown +++ b/source/_components/media_player.firetv.markdown @@ -16,7 +16,7 @@ ha_iot_class: "Local Polling" The `firetv` platform allows you to control a [Amazon Fire TV/stick](http://www.amazon.com/Amazon-DV83YW-Fire-TV/dp/B00U3FPN4U). -The python-firetv Python 2.x module with its helper script that exposes a HTTP server to fetch state and perform actions is used. +The python-firetv Python 2.x module with its helper script that exposes an HTTP server to fetch state and perform actions is used. Steps to configure your Amazon Fire TV stick with Home Assistant: diff --git a/source/_components/melissa.markdown b/source/_components/melissa.markdown index ed696574cc..6c1017fdfd 100644 --- a/source/_components/melissa.markdown +++ b/source/_components/melissa.markdown @@ -21,7 +21,7 @@ To set the Melissa component up, add the following information to your `configur ```yaml # Example configuration.yaml entry melissa: - username: + username: password: ******** ``` diff --git a/source/_components/notify.gntp.markdown b/source/_components/notify.gntp.markdown index 29bda0c15a..da4f718eb2 100644 --- a/source/_components/notify.gntp.markdown +++ b/source/_components/notify.gntp.markdown @@ -30,7 +30,7 @@ Configuration variables: - **name** (*Optional*): Setting the optional parameter `name` allows multiple notifiers to be created. The default value is `notify`. The notifier will bind to the service `notify.NOTIFIER_NAME`. - **app_name** (*Optional*): The application name that will be displayed on every notification and will be registered with the server. -- **app_icon** (*Optional*): The icon that will be displayed on every notification. You can provide a HTTP URL or a `file://` URL. File URLs only work if Home Assistant and the GNTP server are running on the same machine. If no `app_icon` is set a local copy of the Home Assistant logo will be used. If you choose to use a HTTP URL please make the maximum image size 150 px by 150 px as Growl for Mac will sometimes timeout when registering. +- **app_icon** (*Optional*): The icon that will be displayed on every notification. You can provide an HTTP URL or a `file://` URL. File URLs only work if Home Assistant and the GNTP server are running on the same machine. If no `app_icon` is set a local copy of the Home Assistant logo will be used. If you choose to use an HTTP URL please make the maximum image size 150 px by 150 px as Growl for Mac will sometimes timeout when registering. - **hostname** (*Optional*): The hostname or IP address of the GNTP server to contact. - **password** (*Optional*): The password to authenticate to the GNTP server with. - **port** (*Optional*): The port that the GNTP server runs on. The specification states that servers should not allow users to use any port other than 23053 but `port` is provided here just in case. diff --git a/source/_components/sensor.rest.markdown b/source/_components/sensor.rest.markdown index a41ec48ab9..0c0cc9a7ab 100644 --- a/source/_components/sensor.rest.markdown +++ b/source/_components/sensor.rest.markdown @@ -151,7 +151,7 @@ sensor: unit_of_measurement: "°C" ``` -### {% linkable_title Accessing a HTTP authentication protected endpoint %} +### {% linkable_title Accessing an HTTP authentication protected endpoint %} The REST sensor supports HTTP authentication and customized headers. diff --git a/source/_components/switch.fritzdect.markdown b/source/_components/switch.fritzdect.markdown index 49b5f3161a..cceeffaef3 100644 --- a/source/_components/switch.fritzdect.markdown +++ b/source/_components/switch.fritzdect.markdown @@ -41,7 +41,7 @@ Configuration variables: - **password** (*Required*): The password for your Fritz!Box. - **host** (*Optional*): The IP address/hostname of your Fritz!Box. Defaults to `fritz.box`. -It is recommened to create a dedicated user for Home Assistant and only allow access to "Smart Home". +It is recommended to create a dedicated user for Home Assistant and only allow access to "Smart Home".

    If this component throws an error when starting home-assistant you should check if all actors are plugged in and connected to the FritzBox. Inactive actors that are not deleted from FritzBox configuration might lead to errors. diff --git a/source/_components/switch.kankun.markdown b/source/_components/switch.kankun.markdown index 03c5a217ed..919b798f9d 100644 --- a/source/_components/switch.kankun.markdown +++ b/source/_components/switch.kankun.markdown @@ -15,7 +15,7 @@ ha_iot_class: "Local Polling" The `kankun` switch platform allows you to toggle customized Kankun SP3 Wifi switches. Switches are modified to include the [json.cgi](https://github.com/homedash/kankun-json/blob/master/cgi-bin/json.cgi) -script to provide a HTTP API. Details of the necessary modifications can be found +script to provide an HTTP API. Details of the necessary modifications can be found [here](http://www.homeautomationforgeeks.com/openhab_http.shtml#kankun) (be sure to install the JSON version of the script as linked above). diff --git a/source/_components/tellstick.markdown b/source/_components/tellstick.markdown index 15431df445..4f9e03870d 100644 --- a/source/_components/tellstick.markdown +++ b/source/_components/tellstick.markdown @@ -30,6 +30,6 @@ tellstick: Configuration variables: - **signal_repetitions** (*Optional*): Because the tellstick sends its actions via radio and from most receivers it's impossible to know if the signal was received or not. Therefore you can configure the switch and light to try to send each signal repeatedly. -- **host** (*Optional*): If you run tellstick on a other server or with a hass.io add-on. +- **host** (*Optional*): If you run tellstick on another server or with a hass.io add-on. - **port** (*Optional*): If needed with host config option. Must be port pair, for example `[50800, 50801]`. diff --git a/source/_cookbook/custom_panel_using_react.markdown b/source/_cookbook/custom_panel_using_react.markdown index 800f2f3378..e526487b0c 100644 --- a/source/_cookbook/custom_panel_using_react.markdown +++ b/source/_cookbook/custom_panel_using_react.markdown @@ -20,7 +20,7 @@ This is a [React](https://facebook.github.io/react/) implementation of [TodoMVC] Download the source [here](https://github.com/home-assistant/example-custom-config/blob/master/panels/react.html). Copy the file to `/panels/` (you might have to create the directory if it doesn't exist). -Create a entry for the panel in your `configuration.yaml` file to enable it. +Create an entry for the panel in your `configuration.yaml` file to enable it. ```yaml panel_custom: diff --git a/source/_docs/installation/docker.markdown b/source/_docs/installation/docker.markdown index afd31d7e5f..53ee103784 100644 --- a/source/_docs/installation/docker.markdown +++ b/source/_docs/installation/docker.markdown @@ -80,7 +80,7 @@ If you want to use a USB Bluetooth adapter or Z-Wave USB Stick with Home Assista ### {% linkable_title QNAP NAS %} -As QNAP within QTS now supports Docker (with a neat UI), you can simply install Home Assistant using docker without the need for command-line. For details about the package (including compatability-information, if your NAS is supported), see https://www.qnap.com/solution/container_station/en/index.php +As QNAP within QTS now supports Docker (with a neat UI), you can simply install Home Assistant using docker without the need for command-line. For details about the package (including compatibility-information, if your NAS is supported), see https://www.qnap.com/solution/container_station/en/index.php The steps would be: diff --git a/source/_posts/2018-03-24-new-release-schedule.markdown b/source/_posts/2018-03-24-new-release-schedule.markdown index cf55f91c3a..d39d8d3633 100644 --- a/source/_posts/2018-03-24-new-release-schedule.markdown +++ b/source/_posts/2018-03-24-new-release-schedule.markdown @@ -21,7 +21,7 @@ So this weekend we're going to shake things a little up. Instead of releasing a Diagram of the new release schedule

    -The goal is to create a more stable first release without the need for a quick follow up hot fix. So if you want to be able to access the new features faster but don't mind the risk of running into the occassional bug, get yourself on the beta channel today: +The goal is to create a more stable first release without the need for a quick follow up hot fix. So if you want to be able to access the new features faster but don't mind the risk of running into the occasional bug, get yourself on the beta channel today: - Hass.io users will be able to enable the dev channel in the system settings. - For Docker users, the beta's will be published under the `rc` tag. From 6b61e2242300e3953096a86b161851ecdde1e6f0 Mon Sep 17 00:00:00 2001 From: DubhAd Date: Thu, 29 Mar 2018 08:24:41 +0100 Subject: [PATCH 716/993] Fixing service name pt2 (#5036) * Fixing service name pt2 Missed one the first time around apparently * Add location --- source/_components/media_player.markdown | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/_components/media_player.markdown b/source/_components/media_player.markdown index dfbe48ccc9..40b642dc0c 100644 --- a/source/_components/media_player.markdown +++ b/source/_components/media_player.markdown @@ -9,7 +9,7 @@ sharing: true footer: true --- -Interacts with media players on your network. Please check the sidebar for a full list of supported devices. +Interacts with media players on your network. Please check the right sidebar for a full list of supported devices. ## {% linkable_title Services %} @@ -27,7 +27,7 @@ Available services: `turn_on`, `turn_off`, `toggle`, `volume_up`, `volume_down`, | `entity_id` | yes | Target a specific media player. Defaults to all. | | `is_volume_muted` | no | True/false for mute/unmute | -#### {% linkable_title Service `media_player/volume_set` %} +#### {% linkable_title Service `media_player.volume_set` %} | Service data attribute | Optional | Description | |------------------------|----------|--------------------------------------------------| From 3f6f8c4048c02ca777b7f216b327cd6de7a073f7 Mon Sep 17 00:00:00 2001 From: Martin Eberhardt Date: Thu, 29 Mar 2018 09:29:18 +0200 Subject: [PATCH 717/993] Fix ON/OFF being interpreted in binary_sensor.mqtt (#5042) * Fix ON/OFF being interpreted in binary_sensor.mqtt YAML interprets `ON` and `OFF` to `true` and `false`. This causes the site to show that instead of the actual default payloads. * Add header --- source/_components/binary_sensor.mqtt.markdown | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/source/_components/binary_sensor.mqtt.markdown b/source/_components/binary_sensor.mqtt.markdown index b49b21b365..1c6a6d87ef 100644 --- a/source/_components/binary_sensor.mqtt.markdown +++ b/source/_components/binary_sensor.mqtt.markdown @@ -17,6 +17,8 @@ The `mqtt` binary sensor platform uses an MQTT message payload to set the binary The binary sensor state will be updated only after a new message is published on `state_topic` matching `payload_on` or `payload_off`. If these messages are published with the `retain` flag set, the binary sensor will receive an instant state update after subscription and Home Assistant will display the correct state on startup. Otherwise, the initial state displayed in Home Assistant will be `unknown`. +## {% linkable_title Configuration %} + The `mqtt` binary sensor platform optionally supports an `availability_topic` to receive online and offline messages (birth and LWT messages) from the MQTT device. During normal operation, if the MQTT cover device goes offline (i.e., publishes `payload_not_available` to `availability_topic`), Home Assistant will display the binary sensor as `unavailable`. If these messages are published with the `retain` flag set, the binary sensor will receive an instant update after subscription and Home Assistant will display the correct availability state of the binary sensor when Home Assistant starts up. If the `retain` flag is not set, Home Assistant will display the binary sensor as `unavailable` when Home Assistant starts up. If no `availability_topic` is defined, Home Assistant will consider the MQTT device to be available. To use an MQTT binary sensor in your installation, add the following to your `configuration.yaml` file: @@ -42,12 +44,12 @@ payload_on: description: The payload that represents the on state. required: false type: string - default: ON + default: "ON" payload_off: description: The payload that represents the off state. required: false type: string - default: OFF + default: "OFF" availability_topic: description: "The MQTT topic subscribed to receive birth and LWT messages from the MQTT device. If `availability_topic` is not defined, the binary sensor availability state will always be `available`. If `availability_topic` is defined, the binary sensor availability state will be `unavailable` by default." required: false From a1e51cc46bd696056d98e3e3e8dac14d8881345c Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Thu, 29 Mar 2018 09:48:51 +0200 Subject: [PATCH 718/993] Update style and fix formatting (#5040) * Update style and fix formatting * Add platform * Be more precise --- source/_components/calendar.google.markdown | 53 ++++++++++----------- 1 file changed, 26 insertions(+), 27 deletions(-) diff --git a/source/_components/calendar.google.markdown b/source/_components/calendar.google.markdown index 4e7ea750b8..d046396835 100644 --- a/source/_components/calendar.google.markdown +++ b/source/_components/calendar.google.markdown @@ -14,7 +14,7 @@ ha_release: 0.33 --- -This platform allows you to connect to your [Google Calendars](https://calendar.google.com) and generate binary sensors. The sensors created can trigger based on any event on the calendar or only for matching events. When you first setup this component it will generate a new configuration file *google_calendars.yaml* that will contain information about all of the calendars you can see. +The `google` calendar platform allows you to connect to your [Google Calendars](https://calendar.google.com) and generate binary sensors. The sensors created can trigger based on any event on the calendar or only for matching events. When you first setup this component it will generate a new configuration file `google_calendars.yaml` that will contain information about all of the calendars you can see. ### {% linkable_title Prerequisites %} @@ -27,7 +27,7 @@ Generate a Client ID and Client Secret on [Google Developers Console](https://co 1. Save this page. You don't have to fill out anything else there. 1. Click 'Create credentials' -> OAuth client ID. 1. Set the Application type to 'Other' and give this credential set a name then click Create. -1. Save the client ID and secret as you will need to put these in your configuration.yaml file. +1. Save the client ID and secret as you will need to put these in your `configuration.yaml` file. 1. Click on "Library", search for "Google Calendar API" and enable it. ### {% linkable_title Basic Setup %} @@ -37,33 +37,43 @@ To integrate Google Calendar in Home Assistant, add the following section to you ```yaml # Example configuration.yaml entry google: - client_id: *Value_created_from_steps_above* - client_secret: *Value_created_from_steps_above* + client_id: YOUR_CLIENT_ID + client_secret: YOUR_CLIENT_SECRET ``` -Configuration variables: - -- **client_id** (*Required*): Use the value you generated in the Prerequisites stage. -- **client_secret** (*Required*): Use the value you generated in the Prerequisites stage. -- **track_new_calendar** (*Optional*): Will automatically generate a binary sensor when a new calendar is detected. The system scans for new calendars on startup. By default this is set to `True`. +{% configuration %} +client_id: + description: Use the value you generated in the Prerequisites stage. + required: true + type: string +minimum: + description: Use the value you generated in the Prerequisites stage. + required: true + type: string +track_new_calendar: + description: Will automatically generate a binary sensor when a new calendar is detected. The system scans for new calendars only on startup. + required: false + type: boolean + default: true +{% endconfiguration %} The next steps will require you to have Home Assistant running. After you have it running complete the Google authentication that pops up. It will give you a URL and a code to enter. This will grant your Home Assistant service access to all the Google Calendars that the account you authenticate with can read. This is a Read-Only view of these calendars. - ### {% linkable_title Calendar Configuration %} -Editing `google_calendars.yaml` + +Editing the `google_calendars.yaml` file. A basic entry for a single calendar looks like: ```yaml -- cal_id: "***************************@group.calendar.google.com" +- cal_id: "*****@group.calendar.google.com" entities: - device_id: test_everything name: Give me everything track: true -- cal_id: "***************************@group.calendar.google.com" +- cal_id: "*****@group.calendar.google.com" entities: - device_id: test_important name: Important Stuff @@ -79,38 +89,27 @@ A basic entry for a single calendar looks like: Variables: - **cal_id**: The Google generated unique id for this calendar. **DO NOT CHANGE** - - **entities**: Yes, you can have multiple sensors for a calendar! - - **device_id**: (*Required*): The name that all your automations/scripts will use to reference this device. - - **name**: (*Required*): What is the name of your sensor that you'll see in the frontend. - - **track**: (*Required*): Should we create a sensor `True` or ignore it `False`? - - **search**: (*Optional*): If set will only trigger for matched events. - - **offset**: (*Optional*): A set of characters that precede a number in the event title for designating a pre-trigger state change on the sensor. (Default: `!!`) From this we will end up with the binary sensors `calendar.test_unimportant` and `calendar.test_important` which will toggle themselves on/off based on events on the same calendar that match the search value set for each. You'll also have a sensor `calendar.test_everything` that will not filter events out and always show the next event available. But what if you only wanted it to toggle based on all events? Just leave out the *search* parameter. -**Note**: If you use a `#` sign for `search` then wrap the whole search term in quotes. Otherwise everything following the hash sign would be considered a YAML comment. - +

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

    ### {% linkable_title Sensor attributes %} - **offset_reached**: If set in the event title and parsed out will be `on`/`off` once the offset in the title in minutes is reached. So the title `Very important meeting #Important !!-10` would trigger this attribute to be `on` 10 minutes before the event starts. - - **all_day**: `True`/`False` if this is an all day event. Will be `False` if there is no event found. - - **message**: The event title with the `search` and `offset` values extracted. So in the above example for **offset_reached** the **message** would be set to `Very important meeting` - - **description**: The event description. - - **location**: The event Location. - - **start_time**: Start time of event. - - **end_time**: End time of event. From 41a1a06af13c76d960e6d8745939f27ba042ee2b Mon Sep 17 00:00:00 2001 From: Kane610 Date: Thu, 29 Mar 2018 09:49:03 +0200 Subject: [PATCH 719/993] deCONZ debug information (#5026) * Debug information * Minor changes --- source/_components/deconz.markdown | 56 ++++++++++++++++++++---------- 1 file changed, 37 insertions(+), 19 deletions(-) diff --git a/source/_components/deconz.markdown b/source/_components/deconz.markdown index abebcec803..0be523adb5 100644 --- a/source/_components/deconz.markdown +++ b/source/_components/deconz.markdown @@ -17,19 +17,7 @@ ha_iot_class: "Local Push" [deCONZ REST API](http://dresden-elektronik.github.io/deconz-rest-doc/). -Home Assistant will automatically discover deCONZ presence on your network, if `discovery:` is present in your `configuration.yaml` file. - -If you don't have the API key, you can generate an API key for deCONZ by using the one-click functionality similar to Philips Hue. Go to Menu->Settings->Unlock Gateway in deCONZ and then use the deCONZ configurator in Home Assistant GUI to create an API key. When you've generated the API key from Home Assistant, the API key will be stored in deconz.conf inside the home-assistant folder. - -You can add the following to your configuration.yaml file if you are not using the `discovery:` component: - -```yaml -# Example configuration.yaml entry -deconz: - host: IP ADDRESS -``` - -#### {% linkable_title Supported Device types %} +### {% linkable_title Supported device types %} - [Zigbee Lights](/components/light.deconz/) - [Humidity Sensors](/components/sensor.deconz/) @@ -40,6 +28,20 @@ deconz: - [Switches (Remote Controls)](/components/sensor.deconz/) - [Temperature Sensors](/components/sensor.deconz/) +## {% linkable_title Configuration %} + +Home Assistant will automatically discover deCONZ presence on your network, if `discovery:` is present in your `configuration.yaml` file. + +If you don't have the API key, you can generate an API key for deCONZ by using the one-click functionality similar to Philips Hue. Go to **Menu** -> **Settings** -> **Unlock Gateway** in deCONZ and then use the deCONZ configurator in Home Assistant frontend to create an API key. When you've generated the API key from Home Assistant, the API key will be stored in `deconz.conf` inside the `.homeassistant` folder. + +You can add the following to your configuration.yaml file if you are not using the `discovery:` component: + +```yaml +# Example configuration.yaml entry +deconz: + host: IP_ADDRESS +``` + {% configuration %} host: description: The IP address of your deCONZ web server. @@ -66,10 +68,24 @@ deconz: port: 80 ``` +## {% linkable_title Debugging component %} + +If you have problems with deCONZ or the component you can add debug prints to the log. + +```yaml +logger: + default: info + logs: + pydeconz: debug +    homeassistant.components.deconz: debug +``` + ## {% linkable_title Device services %} + Available services: `configure`. -#### {% linkable_title Service `deconz/configure` %} +#### {% linkable_title Service `deconz.configure` %} + Set attribute of device in Deconz using [Rest API](http://dresden-elektronik.github.io/deconz-rest-doc/rest/). | Service data attribute | Optional | Description | @@ -86,7 +102,7 @@ Field and entity are exclusive, i.e you can only use one in a request. { "field": "/config", "data": {"permitjoin": 60} } -## {% linkable_title Remote control devices%} +## {% linkable_title Remote control devices %} Remote controls (ZHASwitch category) will be not be exposed as a regular entity, but as events named 'deconz_event' with a payload of 'id' and 'event'. Id will be the device name from deCONZ and Event will be the momentary state of the switch. However, a sensor entity will be created that shows the battery level of the switch as reported by deCONZ, named sensor.device_name_battery_level. @@ -107,6 +123,7 @@ For the IKEA Tradfri remote, 1 is the middle button, 2 is up, 3 is down, 4 is le ### {% linkable_title Step up and step down input number with wireless dimmer %} +{% raw %} ```yaml automation: - alias: 'Toggle lamp from dimmer' @@ -133,9 +150,9 @@ automation: - service: light.turn_on data_template: entity_id: light.lamp - brightness: {% raw %}> + brightness: > {% set bri = states.light.lamp.attributes.brightness | int %} - {{ [bri+30, 249] | min }}{% endraw %} + {{ [bri+30, 249] | min }} - alias: 'Decrease brightness of lamp from dimmer' initial_state: 'on' @@ -149,7 +166,8 @@ automation: - service: light.turn_on data_template: entity_id: light.lamp - brightness: {% raw %}> + brightness: > {% set bri = states.light.lamp.attributes.brightness | int %} - {{ [bri-30, 0] | max }}{% endraw %} + {{ [bri-30, 0] | max }} ``` +{% endraw %} From 2851b2a606598cffd87895eb3ad3216ffabb93cb Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Thu, 29 Mar 2018 10:02:47 +0200 Subject: [PATCH 720/993] Update configuration samples (#5041) * Update configuration samples * Minor changes --- source/_components/amcrest.markdown | 16 +++-- source/_components/arlo.markdown | 20 ++++-- source/_components/august.markdown | 38 +++++----- source/_components/camera.foscam.markdown | 7 +- source/_components/camera.synology.markdown | 12 ++-- source/_components/canary.markdown | 8 +-- source/_components/cover.garadget.markdown | 16 +++-- source/_components/cover.myq.markdown | 22 ++++-- .../device_tracker.huawei_router.markdown | 29 +++++--- .../device_tracker.trackr.markdown | 17 +++-- source/_components/doorbird.markdown | 4 +- source/_components/dyson.markdown | 28 ++++---- source/_components/eight_sleep.markdown | 26 +++++-- source/_components/goalfeed.markdown | 4 +- source/_components/light.avion.markdown | 2 - source/_components/light.decora_wifi.markdown | 19 +++-- source/_components/lock.nello.markdown | 21 ++++-- source/_components/lock.sesame.markdown | 20 ++++-- source/_components/lutron.markdown | 2 + source/_components/media_player.cmus.markdown | 8 +-- .../media_player.ue_smart_radio.markdown | 4 +- source/_components/melissa.markdown | 6 +- source/_components/mercedesme.markdown | 18 ++--- source/_components/mqtt_eventstream.markdown | 2 + source/_components/mqtt_statestream.markdown | 2 + source/_components/mychevy.markdown | 46 +++++-------- source/_components/neato.markdown | 20 ++++-- source/_components/notify.matrix.markdown | 6 +- source/_components/notify.rocketchat.markdown | 13 ++-- source/_components/nuheat.markdown | 8 +-- source/_components/rainbird.markdown | 19 +++-- source/_components/raincloud.markdown | 20 +++--- source/_components/ring.markdown | 18 +++-- source/_components/sensor.hp_ilo.markdown | 11 +-- source/_components/sensor.imap.markdown | 4 +- source/_components/sensor.mfi.markdown | 8 ++- source/_components/sensor.mopar.markdown | 26 ++++--- source/_components/sensor.random.markdown | 2 + source/_components/sensor.sma.markdown | 6 +- .../_components/sensor.synologydsm.markdown | 6 +- source/_components/shiftr.markdown | 20 ++++-- source/_components/skybell.markdown | 6 +- source/_components/sleepiq.markdown | 17 +++-- source/_components/switch.hook.markdown | 31 +++++++-- source/_components/switch.mfi.markdown | 8 ++- .../_components/switch.rainmachine.markdown | 69 ++++++++++--------- source/_components/tesla.markdown | 4 +- source/_components/volvooncall.markdown | 19 ++--- source/_components/waterfurnace.markdown | 43 +++++------- source/_components/zoneminder.markdown | 4 +- 50 files changed, 473 insertions(+), 312 deletions(-) diff --git a/source/_components/amcrest.markdown b/source/_components/amcrest.markdown index 379d601f21..fc62783afa 100644 --- a/source/_components/amcrest.markdown +++ b/source/_components/amcrest.markdown @@ -13,23 +13,25 @@ ha_iot_class: "Local Polling" ha_release: 0.49 --- -The `amcrest` platform allows you to integrate your [Amcrest](https://amcrest.com/) IP camera in Home Assistant. +The `amcrest` camera platform allows you to integrate your [Amcrest](https://amcrest.com/) IP camera in Home Assistant. + +## {% linkable_title Configuration %} To enable your camera in your installation, add the following to your `configuration.yaml` file: ```yaml # Example configuration.yaml entry amcrest: - - host: IP_ADDRESS - username: USERNAME - password: PASSWORD + - host: IP_ADDRESS_CAMERA_1 + username: YOUR_USERNAME + password: YOUR_PASSWORD sensors: - motion_detector - sdcard - - host: IP_ADDRESS - username: USERNAME - password: PASSWORD + - host: IP_ADDRESS_CAMERA_2 + username: YOUR_USERNAME + password: YOUR_PASSWORD resolution: low stream_source: snapshot sensors: diff --git a/source/_components/arlo.markdown b/source/_components/arlo.markdown index 479a771329..e82ade68d1 100644 --- a/source/_components/arlo.markdown +++ b/source/_components/arlo.markdown @@ -15,19 +15,27 @@ ha_iot_class: "Cloud Polling" The `arlo` implementation allows you to integrate your [Arlo](https://arlo.netgear.com/) devices in Home Assistant. +## {% linkable_title Configuration %} + To enable device linked in your [Arlo](https://arlo.netgear.com/) account, add the following to your `configuration.yaml` file: ```yaml # Example configuration.yaml entry arlo: - username: you@example.com - password: secret + username: YOUR_USERNAME + password: YOUR_PASSWORD ``` -Configuration variables: - -- **username** (*Required*): The username for accessing your Arlo account. -- **password** (*Required*): The password for accessing your Arlo account. +{% configuration %} +username: + description: The username for accessing your Arlo account. + required: true + type: string +password: + description: The password for accessing your Arlo account. + required: true + type: string +{% endconfiguration %} It is recommended to create a dedicated user on Arlo website to be used within Home Assistant and then share your Arlo cameras. diff --git a/source/_components/august.markdown b/source/_components/august.markdown index cbac63c935..a4df212e8b 100644 --- a/source/_components/august.markdown +++ b/source/_components/august.markdown @@ -15,6 +15,8 @@ ha_iot_class: "Cloud Polling" The `august` component allows you to integrate your [August](http://august.com) devices in Home Assistant. Currently this component supports August Lock and Doorbell. +## {% linkable_title Configuration %} + You will need your August login information (username (either phone# or email), and password) to use this module. To set it up, add the following to your `configuration.yaml` file: @@ -24,27 +26,27 @@ To set it up, add the following to your `configuration.yaml` file: august: login_method: phone username: "+16041234567" - password: secret + password: YOUR_PASSWORD ``` {% configuration %} - login_method: - description: Method to login to your August account, either "email" or "phone". A verification code will be sent to your email or phone during setup. - required: true - type: string - username: - description: The username for accessing your August account. This depends on your login_method, if login_method is email, this will be your email of the account. Otherwise, this will be your phone number. - required: true - type: string - password: - description: The password for accessing your August account. - required: true - type: string - timeout: - description: Timeout to wait for connections. - required: false - type: int - default: 10 +login_method: + description: Method to login to your August account, either "email" or "phone". A verification code will be sent to your email or phone during setup. + required: true + type: string +username: + description: The username for accessing your August account. This depends on your login_method, if login_method is email, this will be your email of the account. Otherwise, this will be your phone number. + required: true + type: string +password: + description: The password for accessing your August account. + required: true + type: string +timeout: + description: Timeout to wait for connections. + required: false + type: int + default: 10 {% endconfiguration %} Once Home Assistant is started, a configurator will pop up asking you to enter verification code that is sent to your phone number or email. diff --git a/source/_components/camera.foscam.markdown b/source/_components/camera.foscam.markdown index 2003ecaa25..c9d1aabd50 100644 --- a/source/_components/camera.foscam.markdown +++ b/source/_components/camera.foscam.markdown @@ -15,6 +15,8 @@ ha_iot_class: "Local Polling" The `foscam` platform allows you to watch the live stream of your [Foscam](http://www.foscam.com/) IP camera in Home Assistant. +## {% linkable_title Configuration %} + To enable your Foscam IP camera in your installation, add the following to your `configuration.yaml` file: ```yaml @@ -22,8 +24,8 @@ To enable your Foscam IP camera in your installation, add the following to your camera: - platform: foscam ip: IP_ADDRESS - username: USERNAME - password: PASSWORD + username: YOUR_USERNAME + password: YOUR_PASSWORD ``` Configuration variables: @@ -39,4 +41,5 @@ There seems to be some issues within Foscam with lengthy passwords and passwords

    ### {% linkable_title Control Foscam PTZ (Pan/Tilt/Zoom) - Home/Away %} + Foscam Webcams which support CGI Commands can be controlled by Home Assistant ([Source](http://www.ipcamcontrol.net/files/Foscam%20IPCamera%20CGI%20User%20Guide-V1.0.4.pdf)). For an example of how this can be done, see the [Foscam IP Camera Pan, Tilt, Zoom Control](/cookbook/foscam_away_mode_PTZ/) Cookbook entry. diff --git a/source/_components/camera.synology.markdown b/source/_components/camera.synology.markdown index d831435832..93a2e78ff3 100644 --- a/source/_components/camera.synology.markdown +++ b/source/_components/camera.synology.markdown @@ -14,7 +14,7 @@ ha_iot_class: "Local Polling" ---   -The `synology` platform allows you to watch the live streams of your [Synology](https://www.synology.com/) Surveillance Station based IP cameras in Home Assistant. +The `synology` camera platform allows you to watch the live streams of your [Synology](https://www.synology.com/) Surveillance Station based IP cameras in Home Assistant. To enable your Surveillance Station cameras in your installation, add the following to your `configuration.yaml` file: @@ -22,9 +22,9 @@ To enable your Surveillance Station cameras in your installation, add the follow # Minimum configuration.yaml entry camera: - platform: synology - url: SYNOLOGY_URL - username: USERNAME - password: PASSWORD + url: IP_ADDRESS_OF_SYNOLOGY_NAS + username: YOUR_USERNAME + password: YOUR_PASSWORD ``` Configuration variables: @@ -43,8 +43,8 @@ A full sample configuration for the `synology` platform is shown below: camera: - platform: synology url: https://192.168.1.120:5001 - username: USERNAME - password: PASSWORD + username: YOUR_USERNAME + password: YOUR_PASSWORD timeout: 15 verify_ssl: False ``` diff --git a/source/_components/canary.markdown b/source/_components/canary.markdown index 425055f48a..186d704e17 100644 --- a/source/_components/canary.markdown +++ b/source/_components/canary.markdown @@ -15,6 +15,8 @@ ha_iot_class: "Cloud Polling" The `canary` component allows you to integrate your [Canary](https://canary.is) devices in Home Assistant. +## {% linkable_title Configuration %} + You will need your Canary login information (username, usually your email address, and password) to use this module. To set it up, add the following to your `configuration.yaml` file: @@ -22,8 +24,8 @@ To set it up, add the following to your `configuration.yaml` file: ```yaml # Example configuration.yaml entry canary: - username: you@example.com - password: secret + username: YOUR_USERNAME + password: YOUR_PASSWORD ``` {% configuration %} @@ -42,8 +44,6 @@ canary: default: 10 {% endconfiguration %} - - Once loaded, your front end will have the following components: * A camera image triggered by motion for each camera. diff --git a/source/_components/cover.garadget.markdown b/source/_components/cover.garadget.markdown index 04a8fcaa6c..0a3b5de358 100644 --- a/source/_components/cover.garadget.markdown +++ b/source/_components/cover.garadget.markdown @@ -16,6 +16,8 @@ ha_iot_class: "Cloud Polling" The `garadget` cover platform lets you control [Garadget](http://www.garadget.com/) garage door futurizers through Home Assistant. +## {% linkable_title Configuration %} + To enable Garadget Covers in your installation, add the following to your `configuration.yaml` file: ```yaml @@ -24,8 +26,8 @@ cover: - platform: garadget covers: 190028001947343412342341: - username: UseYourLogin@garadget.com - password: abc123 + username: YOUR_USERNAME + password: YOUR_PASSWORD 4c003f001151353432134214: access_token: df4cc785ff818f2b01396c44142342fccdef ``` @@ -44,12 +46,13 @@ Configuration variables: If provided, the **access_token** will be used, otherwise the **username** and **password** will be used to automatically generate an access token at start time. +## {% linkable_title Example %} -**Example with more detail:**

    +{% raw %} ```yaml # Related configuration.yaml entry cover: @@ -64,13 +67,13 @@ sensor: sensors: garage_door_status: friendly_name: 'State of the door' - value_template: {% raw %}'{{ states.cover.garage_door.state }}'{% endraw %} + value_template: '{{ states.cover.garage_door.state }}' garage_door_time_in_state: friendly_name: 'Since' - value_template: {% raw %}'{{ states.cover.garage_door.attributes.time_in_state }}'{% endraw %} + value_template: '{{ states.cover.garage_door.attributes.time_in_state }}' garage_door_wifi_signal_strength: friendly_name: 'WiFi strength' - value_template: {% raw %}'{{ states.cover.garage_door.attributes.wifi_signal_strength }}'{% endraw %} + value_template: '{{ states.cover.garage_door.attributes.wifi_signal_strength }}' unit_of_measurement: 'dB' group: @@ -88,6 +91,7 @@ customize: sensor.garage_door_wifi_signal_strength: icon: mdi:wifi ``` +{% endraw %} Some of the Garadget sensors can create a lot of clutter in the logbook. Use this section of code in your `configuration.yaml` to exclude those entries. diff --git a/source/_components/cover.myq.markdown b/source/_components/cover.myq.markdown index 84335655d9..160b4f75f7 100644 --- a/source/_components/cover.myq.markdown +++ b/source/_components/cover.myq.markdown @@ -21,13 +21,23 @@ To use your MyQ cover in your installation, add the following to your `configura # Example configuration.yml entry cover: - platform: myq - username: email@email.com - password: password + username: YOUR_USERNAME + password: YOUR_PASSWORD type: chamberlain ``` -Configuration variables: +{% configuration %} +username: + description: Your MyQ account username. + required: true + type: string +password: + description: Your MyQ account password. + required: true + type: string +password: + description: "Your device type/brand. Supported types are `chamberlain`, `liftmaster`, `craftsman` and `merlin`." + required: true + type: string +{% endconfiguration %} -- **username** (*Required*): Your MyQ account username. -- **password** (*Required*): Your MyQ account password. -- **type** (*Required*): Your device type/brand. Supported types are `chamberlain`, `liftmaster`, `craftsman` and `merlin`. diff --git a/source/_components/device_tracker.huawei_router.markdown b/source/_components/device_tracker.huawei_router.markdown index 7ff3bc8e0b..92ee5c62d4 100644 --- a/source/_components/device_tracker.huawei_router.markdown +++ b/source/_components/device_tracker.huawei_router.markdown @@ -12,9 +12,12 @@ ha_category: Presence Detection ha_release: 0.51 --- -This component offers presence detection by looking at connected devices to a [Huawei router](http://m.huawei.com/enmobile/enterprise/products/network/access/pon-one/hw-371813.htm). +The `huawei` device trakcer platform offers presence detection by looking at connected devices to a [Huawei router](http://m.huawei.com/enmobile/enterprise/products/network/access/pon-one/hw-371813.htm). + Currently, this was only tested with the Huawei HG8247H and HG8247Q Smart Router (used by Vodafone Portugal). +## {% linkable_title Configuration %} + To use a Huawei router in your installation, add the following to your `configuration.yaml` file: ```yaml @@ -22,15 +25,23 @@ To use a Huawei router in your installation, add the following to your `configur device_tracker: - platform: huawei_router host: 192.168.1.1 - username: user - password: pass + username: YOUR_USERNAME + password: YOUR_PASSWORD ``` -Configuration variables: - -- **host** (*Required*): The IP address of your router, e.g., 192.168.1.1. -- **username** (*Required*): The username to login into the router (the same used trough the router's web interface). -- **password** (*Required*): The password for the specified username. - +{% configuration %} +host: + description: The IP address of your router, e.g., 192.168.1.1. + required: true + type: string +username: + description: The username to login into the router (the same used trough the router's web interface). + required: true + type: string +password: + description: The password for the specified username. + required: true + type: string +{% endconfiguration %} See the [device tracker component page](/components/device_tracker/) for instructions how to configure the people to be tracked. diff --git a/source/_components/device_tracker.trackr.markdown b/source/_components/device_tracker.trackr.markdown index 198203404b..962300ed1e 100644 --- a/source/_components/device_tracker.trackr.markdown +++ b/source/_components/device_tracker.trackr.markdown @@ -24,11 +24,18 @@ To integrate TrackR in Home Assistant, add the following section to your `config # Example configuration.yaml entry device_tracker: platform: trackr - username: USERNAME - password: PASSWORD + username: YOUR_USERNAME + password: YOUR_PASSWORD ``` -Configuration variables: +{% configuration %} +username: + description: The email address for the TrackR account. + required: true + type: string +password: + description: The password for your given username. + required: true + type: string +{% endconfiguration %} -- **username** (*Required*): The email address for the TrackR account. -- **password** (*Required*): The password for your given username. diff --git a/source/_components/doorbird.markdown b/source/_components/doorbird.markdown index 4ce686ec64..bda3a36a7a 100644 --- a/source/_components/doorbird.markdown +++ b/source/_components/doorbird.markdown @@ -21,8 +21,8 @@ To connect your device, add the following to your `configuration.yaml` file: # Example configuration.yaml entry doorbird: host: IP_OR_HOSTNAME - username: abcdef0001 - password: xxxxxxxxxx + username: YOUR_USERNAME + password: YOUR_PASSWORD ``` Configuration variables: diff --git a/source/_components/dyson.markdown b/source/_components/dyson.markdown index a217158276..c090862421 100644 --- a/source/_components/dyson.markdown +++ b/source/_components/dyson.markdown @@ -15,29 +15,31 @@ ha_release: 0.47 The `dyson` component is the main component to integrate all [Dyson](https://dyson.com) related platforms: [Fans](/components/fan/dyson/) and [Robot vacuum](/components/vacuum/dyson/). +## {% linkable_title Configuration %} + To enable this component, add the following lines to your `configuration.yaml`: ```yaml +# Example configuration.yaml entry dyson: - username: - password: - language: + username: YOUR_DYSON_USERNAME + password: YOUR_DYSON_PASSWORD + language: YOUR_DYSON_ACCOUNT_LANGUGAGE devices: - - device_id: # eg: Pure Cool Link device - device_ip: - - device_id: # eg: Eye 360 robot vacuum - device_ip: - ... + - device_id: DEVICE_ID_1 # eg: Pure Cool Link device + device_ip: DEVICE_ID_1 + - device_id: DEVICE_ID_2 # eg: Eye 360 robot vacuum + device_ip: DEVICE_ID_2 ``` Configuration variables: -- **username** (*Required*): Dyson account username (email address) -- **password** (*Required*): Dyson account password +- **username** (*Required*): Dyson account username (email address). +- **password** (*Required*): Dyson account password. - **language** (*Required*): Dyson account language country code. Known working codes: `FR`, `NL`, `GB`, `AU`. But others codes should work. -- **devices** (*Optional*): List of devices - - **device_id** (*Required*): Device ID. Available in the mobiles applications (*Settings* page) - - **device_ip** (*Required*): Device IP address +- **devices** (*Optional*): List of devices. + - **device_id** (*Required*): Device ID. Available in the mobiles applications (*Settings* page). + - **device_ip** (*Required*): Device IP address. `devices` list is optional but you'll have to provide them if discovery is not working (warnings in the logs and the devices are not available in Home Assistant web interface). *If your are using a robot vacuum (Dyson 360 Eye), discovery is not yet supported so you have to provide `devices` list.* diff --git a/source/_components/eight_sleep.markdown b/source/_components/eight_sleep.markdown index 0d730e2f7a..3a455d4ab5 100644 --- a/source/_components/eight_sleep.markdown +++ b/source/_components/eight_sleep.markdown @@ -15,6 +15,8 @@ ha_iot_class: "Cloud Polling" The `eight_sleep` component allows Home Assistant to fetch data from your [Eight Sleep](https://eightsleep.com/) smart cover or mattress. +## {% linkable_title Configuration %} + It's setup utilizing 'Sensor' components to convey the current state of your bed and results of your sleep sessions and a 'Binary Sensor' component to indicate your presence in the bed. A service is also provided to set the heating level and duration of the bed. You must have at least two sleep sessions recorded in the Eight Sleep app prior to setting up the Home Assistant component. @@ -24,15 +26,25 @@ To get started add the following information to your `configuration.yaml` file: ```yaml # Example configuration.yaml entry eight_sleep: - username: "user@email.com" - password: "password" + username: YOUR_E_MAIL_ADDRESS + password: YOUR_PASSWORD ``` -Configuration variables: - -- **username** (*Required*): The email address associated with your Eight Sleep account. -- **password** (*Required*): The password associated with your Eight Sleep account. -- **partner** (*Optional*): Default is False. Defines if you'd like to fetch data for both sides of the bed. +{% configuration %} +username: + description: The email address associated with your Eight Sleep account. + required: true + type: string +password: + description: The password associated with your Eight Sleep account. + required: true + type: string +password: + description: Defines if you'd like to fetch data for both sides of the bed. + required: false + type: string + default: False +{% endconfiguration %} ### {% linkable_title Supported features %} diff --git a/source/_components/goalfeed.markdown b/source/_components/goalfeed.markdown index 0320a66d84..5632a8847d 100644 --- a/source/_components/goalfeed.markdown +++ b/source/_components/goalfeed.markdown @@ -19,8 +19,8 @@ To use this component, enter your email address and password from your goalfeed. ```yaml # Example configuration.yaml entry goalfeed: - username: your_email@gmail.com - password: goalfeed_password + username: YOUR_E_MAIL_ADDRESS + password: YOUR_PASSWORD ``` {% configuration %} diff --git a/source/_components/light.avion.markdown b/source/_components/light.avion.markdown index 74260e9395..68c40b1aac 100644 --- a/source/_components/light.avion.markdown +++ b/source/_components/light.avion.markdown @@ -21,8 +21,6 @@ To enable these lights, add the following lines to your `configuration.yaml` fil # Example configuration.yaml entry light: - platform: avion - username: testuser@fakedomain.com - password: foobar ``` Configuration variables: diff --git a/source/_components/light.decora_wifi.markdown b/source/_components/light.decora_wifi.markdown index cf2c555626..7fc68d0dcf 100644 --- a/source/_components/light.decora_wifi.markdown +++ b/source/_components/light.decora_wifi.markdown @@ -26,13 +26,18 @@ To enable these lights, add the following lines to your `configuration.yaml` fil # Example configuration.yaml entry light: - platform: decora_wifi - username: my_leviton_user_email@email.com - password: my_leviton_password + username: YOUR_USERNAME + password: YOUR_PASSWORD ``` -Configuration variables: - -- **username** (*Required*): Your "My Leviton" app email address/user name. -- **password** (*Required*): Your "My Leviton" app password. - +{% configuration %} +username: + description: Your "My Leviton" app email address/user name. + required: true + type: string +password: + description: Your "My Leviton" app password. + required: true + type: string +{% endconfiguration %} diff --git a/source/_components/lock.nello.markdown b/source/_components/lock.nello.markdown index 53f2e26e79..558f9098b9 100644 --- a/source/_components/lock.nello.markdown +++ b/source/_components/lock.nello.markdown @@ -16,6 +16,7 @@ ha_iot_class: "Cloud Polling" --- The `nello` platform allows you to control [Nello](https://nello.io) intercoms. + To get started you need to create a secondary Nello account and authorize it to access your lock(s).

    @@ -24,18 +25,26 @@ Be aware that if you use your main account for Home Assistant you may not be abl ## {% linkable_title Configuration %} +To add your Nello locks to your installation, add the following to your `configuration.yaml` file: + ```yaml # Example configuration.yaml entry lock: - platform: nello - username: mail@example.com - password: mySecretPassword + username: YOUR_USERNAME + password: YOUR_PASSWORD ``` -Configuration variables: - -- **username** (*Required*): The username of your Nello account. -- **password** (*Required*): The password of your Nello account. +{% configuration %} +username: + description: The username of your Nello account. + required: true + type: string +password: + description: The password of your Nello account. + required: true + type: string +{% endconfiguration %} ## {% linkable_title Events %} diff --git a/source/_components/lock.sesame.markdown b/source/_components/lock.sesame.markdown index 01d9910fda..affd029f63 100644 --- a/source/_components/lock.sesame.markdown +++ b/source/_components/lock.sesame.markdown @@ -15,18 +15,28 @@ ha_release: "0.47" The `sesame` platform allows you to control your [Sesame](https://candyhouse.co/) smart locks made by CANDY HOUSE, Inc. +## {% linkable_title Configuration %} + Your Sesame needs to be paired with a mobile device running the app in *virtual station* mode, or a standalone [Wi-Fi Access Point](https://candyhouse.co/collections/frontpage/products/wi-fi-access-point). Once you have remote access enabled using one of the above AND the Integration - cloud option enabled on the Sesame app for that lock settings, add the following to your `configuration.yaml` file: + ```yaml # Example configuration.yaml entry lock: - platform: sesame - email: abc@i-lovecandyhouse.co - password: super-strong-password + email: YOUR_E_MAIL_ADDRESS + password: YOUR_PASSWORD ``` -Configuration variables: +{% configuration %} +email: + description: The email address for your Sesame account. + required: true + type: string +password: + description: The password for your Sesame account. + required: true + type: string +{% endconfiguration %} -- **email** (*Required*): The email address for your Sesame account. -- **password** (*Required*): The password for your Sesame account. diff --git a/source/_components/lutron.markdown b/source/_components/lutron.markdown index 67bdb19dd9..6799e1feb5 100644 --- a/source/_components/lutron.markdown +++ b/source/_components/lutron.markdown @@ -18,6 +18,8 @@ ha_iot_class: "Local Polling" Presently, there's only support for communicating with the [RadioRA 2](http://www.lutron.com/en-US/Products/Pages/WholeHomeSystems/RadioRA2/Overview.aspx) Main Repeater and only handle light switches and dimmers. +## {% linkable_title Configuration %} + When configured, the `lutron` component will automatically discover the rooms and their associated switches/dimmers as configured by the RadioRA 2 software from Lutron. Each room will be treated as a separate group. To use Lutron RadioRA 2 devices in your installation, add the following to your `configuration.yaml` file using the IP address of your RadioRA 2 main repeater: diff --git a/source/_components/media_player.cmus.markdown b/source/_components/media_player.cmus.markdown index 6754b57c87..1415de1e54 100644 --- a/source/_components/media_player.cmus.markdown +++ b/source/_components/media_player.cmus.markdown @@ -23,19 +23,19 @@ media_player: - platform: cmus ``` -if cmus is running on a remote server: +If cmus is running on a remote server: ```yaml # Example configuration.yaml entry media_player: - platform: cmus - host: IP_ADDRESS - password: PASSWORD + host: IP_ADDRESS_OF_CMUS_PLAYER + password: YOUR_PASSWORD ``` Configuration variables: -- **host** (*Optional*): Hostname or IP address of the machine running cmus. Note if a remote cmus is configured that instance must be configured to listen to remote connections, which also requires a password to be set. +- **host** (*Optional*): Hostname or IP address of the machine running cmus. Note if a remote cmus is configured that instance must be configured to listen to remote connections, which also requires a password to be set. - **password** (*Required if host is set*): Password for your cmus player. - **port** (*Optional*): Port of the cmus socket, defaults to 3000. - **name** (*Optional*): The name you'd like to give the cmus player in Home Assistant diff --git a/source/_components/media_player.ue_smart_radio.markdown b/source/_components/media_player.ue_smart_radio.markdown index 217b625b8d..0a250b6b86 100644 --- a/source/_components/media_player.ue_smart_radio.markdown +++ b/source/_components/media_player.ue_smart_radio.markdown @@ -22,8 +22,8 @@ To add your UE Smart Radio player to your installation, add the following to you # Example configuration.yaml entry media_player: - platform: ue_smart_radio - username: USERNAME - password: PASSWORD + username: YOUR_USERNAME + password: YOUR_PASSWORD ``` {% configuration %} diff --git a/source/_components/melissa.markdown b/source/_components/melissa.markdown index 6c1017fdfd..46be358b61 100644 --- a/source/_components/melissa.markdown +++ b/source/_components/melissa.markdown @@ -16,13 +16,15 @@ ha_iot_class: "Cloud Polling" The `Melissa` component is the main component to connect to a [Melissa Climate](http://seemelissa.com/) A/C control. +## {% linkable_title Configuration %} + To set the Melissa component up, add the following information to your `configuration.yaml` file: ```yaml # Example configuration.yaml entry melissa: - username: - password: ******** + username: YOUR_MELISSA_USERNAME + password: YOUR_PASSWORD ``` {% configuration %} diff --git a/source/_components/mercedesme.markdown b/source/_components/mercedesme.markdown index c85b54cd78..82f8679f45 100644 --- a/source/_components/mercedesme.markdown +++ b/source/_components/mercedesme.markdown @@ -14,12 +14,13 @@ ha_iot_class: "Cloud Polling" --- -The `Mercedes me` component offers integration with the [Mercedes me](https://www.mercedes-benz.com/de/mercedes-me/) cloud service and provides presence detection as well as sensors such as doors, tires, windows, and service interval. +The `mercedesme` component offers integration with the [Mercedes me](https://www.mercedes-benz.com/de/mercedes-me/) cloud service and provides presence detection as well as sensors such as doors, tires, windows, and service interval. This component provides the following platforms: - - Binary Sensors - such as windows, tires, doors, lock - - Sensors - such as fuel status, service interval, remaining km... - - Device tracker - to track location of your car + + - Binary Sensors: Windows, tires, doors and lock. + - Sensors:Fuel status, service interval, remaining km, etc. + - Device tracker: To track location of your car.

    The component can integrate cars from European and African markets only. @@ -30,8 +31,8 @@ To use Mercedes me in your installation, add the following to your `configuratio ```yaml # Example configuration.yaml entry mercedesme: - username: email - password: password + username: YOUR_E_MAIL_ADDRESS + password: YOUR_PASSWORD ``` {% configuration %} @@ -43,11 +44,6 @@ password: description: The password for your given Mercedes me account. required: true type: string -scan_interval: - description: API polling interval. The minimal value can't be less then 30 seconds. - required: true - default: 30 - type: int {% endconfiguration %}

    diff --git a/source/_components/mqtt_eventstream.markdown b/source/_components/mqtt_eventstream.markdown index 11644dc5b3..4946433e63 100644 --- a/source/_components/mqtt_eventstream.markdown +++ b/source/_components/mqtt_eventstream.markdown @@ -15,6 +15,8 @@ ha_iot_class: depends The `mqtt_eventstream` component connects two Home Assistant instances via MQTT. +## {% linkable_title Configuration %} + To integrate MQTT Eventstream into Home Assistant, add the following section to your `configuration.yaml` file: ```yaml diff --git a/source/_components/mqtt_statestream.markdown b/source/_components/mqtt_statestream.markdown index 1a607624d3..8b1afaa89d 100644 --- a/source/_components/mqtt_statestream.markdown +++ b/source/_components/mqtt_statestream.markdown @@ -15,6 +15,8 @@ ha_iot_class: depends The `mqtt_statestream` component publishes state changes in Home Assistant to individual MQTT topics. +## {% linkable_title Configuration %} + To enable MQTT Statestream in Home Assistant, add the following section to your `configuration.yaml` file: ```yaml diff --git a/source/_components/mychevy.markdown b/source/_components/mychevy.markdown index 64584db11d..15a6b88ff1 100644 --- a/source/_components/mychevy.markdown +++ b/source/_components/mychevy.markdown @@ -13,33 +13,31 @@ ha_release: 0.62 ha_iot_class: "Cloud Polling" --- -The `MyChevy` component communicates with the -[my.chevrolet](https://my.chevrolet.com) website using selenium to log -in as your user, and screen scrape the data provided. GM does not -make it easy to sign up for any official development program, so this -provides a workaround to get access to your data. +The `MyChevy` component communicates with the [my.chevrolet](https://my.chevrolet.com) website using selenium to log in as your user, and screen scrape the data provided. GM does not make it easy to sign up for any official development program, so this provides a workaround to get access to your data. This component provides the following platforms: - - Binary sensors - if the car is plugged in - - Sensors - such as Battery Level, Charge Mode, EST Range, Total - Distance Traveled + + - Binary sensors: if the car is plugged in + - Sensors: Battery Level, Charge Mode, EST Range, Total Distance Traveled + +## {% linkable_title Configuration %} To use MyChevy in your installation, add the following to your `configuration.yaml` file: ```yaml # Example configuration.yaml entry mychevy: - username: email - password: password + username: YOUR_E_MAIL_ADDRESS + password: YOUR_PASSWORD ``` {% configuration %} username: - description: The email address associated with your my.chevrolet account + description: The email address associated with your my.chevrolet account. required: true type: string password: - description: The password for your given my.chevrolet account + description: The password for your given my.chevrolet account. required: true type: string {% endconfiguration %} @@ -47,27 +45,15 @@ password: #### {% linkable_title Installation %} -Because this uses selenium behind the scenes, installation is more -complicated than merely pip install. See the installation instructions -at https://github.com/sdague/mychevy. +Because this uses selenium behind the scenes, installation is more complicated than merely pip install. See the [installation instructions](https://github.com/sdague/mychevy). #### {% linkable_title Limitations %} -The architecture of the GM automotive networking imposes some -limitations on the functionality of the component. +The architecture of the GM automotive networking imposes some limitations on the functionality of the component. -The OnStar network link is very slow, and takes 1 - 3 minutes to get -information back from the car. As such the mychevy component only -polls every 30 minutes to not overwhelms that connection. +The OnStar network link is very slow, and takes 1 - 3 minutes to get information back from the car. As such the mychevy component only polls every 30 minutes to not overwhelms that connection. -The OnStar network (or more specifically the gateway used by the -my.chevrolet website) appears to suffer more than most networks when -the car is a) in a garage, and b) it's cold outside (like < 15 degrees -F). One of the provided sensors is a status sensor which indicates if -we got connectivity with the car on the last polling cycle or not. +The OnStar network (or more specifically the gateway used by the my.chevrolet website) appears to suffer more than most networks when the car is a) in a garage, and b) it's cold outside (like < 15 degrees F). One of the provided sensors is a status sensor which indicates if we got connectivity with the car on the last polling cycle or not. + +The "API" for this is written by web scraping. As such, it only currently is known to work if you have a Chevy Bolt EV, and only 1 Chevy car connected to OnStar. Patches for extended support should go to the https://github.com/sdague/mychevy project first, then Home Assistant can be extended. -The "API" for this is written by web scraping. As such, it only -currently is known to work if you have a Chevy Bolt EV, and only 1 -Chevy car connected to OnStar. Patches for extended support should go -to the https://github.com/sdague/mychevy project first, then -Home Assistant can be extended. diff --git a/source/_components/neato.markdown b/source/_components/neato.markdown index 316769ff7c..82c36d9dfa 100644 --- a/source/_components/neato.markdown +++ b/source/_components/neato.markdown @@ -19,15 +19,21 @@ To enable `neato` in your installation, add the following to your `configuration ```yaml # Example configuration.yaml entry neato: - username: USERNAME - password: PASSWORD + username: YOUR_USERNAME + password: YOUR_PASSWORD ``` -Configuration variables: - -- **username** (*Required*): Username for the Neato account. -- **password** (*Required*): Password for the Neato account. +{% configuration %} +username: + description: Username for the Neato account. + required: true + type: string +password: + description: v + required: true + type: string +{% endconfiguration %}

    -After the update to firmware 4.0 (which adds cleaning maps) there is also support for displaying the maps of the Botvac D3 Connected and Botvac D5 Connected robots. The start/stop functionality does not work. More information on how to update here: https://support.neatorobotics.com/hc/en-us/articles/115004320694-Software-Update-4-0-for-Neato-Botvac-Connected-D3-D5- +After the update to firmware 4.0 (which adds cleaning maps) there is also support for displaying the maps of the Botvac D3 Connected and Botvac D5 Connected robots. The start/stop functionality does not work. More information on how to update can be found [here](https://support.neatorobotics.com/hc/en-us/articles/115004320694-Software-Update-4-0-for-Neato-Botvac-Connected-D3-D5-).

    diff --git a/source/_components/notify.matrix.markdown b/source/_components/notify.matrix.markdown index c74b962e34..2d9aff6a04 100644 --- a/source/_components/notify.matrix.markdown +++ b/source/_components/notify.matrix.markdown @@ -15,6 +15,8 @@ ha_release: 0.32 The `matrix` platform allows you to deliver notifications from Home Assistant to a [Matrix](http://matrix.org) room. Rooms can be both direct as well as group chats. +## {% linkable_title Configuration %} + To enable Matrix notifications in your installation, add the following to your `configuration.yaml` file: ```yaml @@ -23,8 +25,8 @@ notify: - name: NOTIFIER_NAME platform: matrix homeserver: HOMESERVER - username: USERNAME - password: PASSWORD + username: YOUR_USERNAME + password: YOUR_PASSWORD default_room: ROOM_ID_OR_ALIAS ``` diff --git a/source/_components/notify.rocketchat.markdown b/source/_components/notify.rocketchat.markdown index 2c014c3054..19d9c876d9 100644 --- a/source/_components/notify.rocketchat.markdown +++ b/source/_components/notify.rocketchat.markdown @@ -13,7 +13,9 @@ ha_release: 0.56 --- -The `rocketchat` platform allows you to send messages to your [Rocket.Chat](https://rocket.chat/) instance from Home Assistant. +The `rocketchat` notify platform allows you to send messages to your [Rocket.Chat](https://rocket.chat/) instance from Home Assistant. + +## {% linkable_title Configuration %} To add Rocket.Chat to your installation, add the following to your `configuration.yaml` file: @@ -23,9 +25,9 @@ notify: - platform: rocketchat name: NOTIFIER_NAME url: https://rocketchat.example.com - username: USERNAME - password: PASSWORD - room: my-awesome-room + username: YOUR_USERNAME + password: YOUR_PASSWORD + room: YOUR_ROOM_NAME ``` - **name** (*Optional*): Name displayed in the frontend. The notifier will bind to the service `notify.NOTIFIER_NAME`. @@ -49,8 +51,7 @@ rocketchat_notification: #### {% linkable_title Message variables %} - **message** (*Required*): Message to be displayed. -- **data** (*Optional*): Dictionary containing any of the variables defined in the - [Rocket.Chat docs](https://rocket.chat/docs/developer-guides/rest-api/chat/postmessage#message-object-example) +- **data** (*Optional*): Dictionary containing any of the variables defined in the [Rocket.Chat docs](https://rocket.chat/docs/developer-guides/rest-api/chat/postmessage#message-object-example) To use notifications, please see the [getting started with automation page](/getting-started/automation/). diff --git a/source/_components/nuheat.markdown b/source/_components/nuheat.markdown index 9169a5091e..b3654ebbae 100644 --- a/source/_components/nuheat.markdown +++ b/source/_components/nuheat.markdown @@ -22,14 +22,14 @@ Once you have the Thermostat ID(s), add the following information to your `confi ```yaml # Example configuration.yaml entry nuheat: - username: you@example.com - password: very-secure-password + username: YOUR_USERNAME + password: YOUR_PASSWORD devices: 12345 # Example configuration.yaml entry with multiple thermostats nuheat: - username: you@example.com - password: very-secure-password + username: YOUR_USERNAME + password: YOUR_PASSWORD devices: - 12345 - 67890 diff --git a/source/_components/rainbird.markdown b/source/_components/rainbird.markdown index 4257826b7d..95c7b9b0d9 100644 --- a/source/_components/rainbird.markdown +++ b/source/_components/rainbird.markdown @@ -18,15 +18,22 @@ This `rainbird` component allows interacting with [LNK WiFi](http://www.rainbird To enable it, add the following to your `configuration.yaml` file: ```yaml +# Example configuration.yaml entry rainbird: - host: '1.1.1.1' - password: 'XXXXXXX' + host: IP_ADDRESS_OF_MODULE + password: YOUR_PASSWORD ``` -Configuration variables: - -- **host** (*Required*): The IP address of your LNK WiFi Module. -- **password** (*Required*): The password for accessing the module. +{% configuration %} +host: + description: v + required: true + type: string +password: + description: The password for accessing the module. + required: true + type: string +{% endconfiguration %} Finish its configuration by visiting the [Rain Bird sensor](/components/sensor.rainbird/) and [Rain Bird switch](/components/switch.rainbird/) documentation. diff --git a/source/_components/raincloud.markdown b/source/_components/raincloud.markdown index 6e4e3919a0..3eb377e046 100644 --- a/source/_components/raincloud.markdown +++ b/source/_components/raincloud.markdown @@ -18,16 +18,20 @@ To enable it, add the following to your `configuration.yaml` file: ```yaml # Example configuration.yaml entry - raincloud: - username: you@example.com - password: secret + username: YOUR_USERNAME + password: YOUR_PASSWORD ``` -Configuration variables: - -- **username** (*Required*): The username for accessing your Melnor RainCloud account. -- **password** (*Required*): The password for accessing your Melnor RainCloud account. -- **scan_interval** (*Optional*): Defines the update interval of the sensor in seconds. Defaults to 20seconds. +{% configuration %} +username: + description: The username for accessing your Melnor RainCloud account. + required: true + type: string +password: + description: The password for accessing your Melnor RainCloud account. + required: true + type: string +{% endconfiguration %} Finish its configuration by visiting the [Raincloud binary sensor](/components/binary_sensor.raincloud/), [Raincloud sensor](/components/sensor.raincloud/) and [Raincloud switch](/components/switch.raincloud/) documentation. diff --git a/source/_components/ring.markdown b/source/_components/ring.markdown index 762810d6a7..4daf012653 100644 --- a/source/_components/ring.markdown +++ b/source/_components/ring.markdown @@ -21,13 +21,19 @@ To enable device linked in your [Ring.com](https://ring.com/) account, add the f ```yaml # Example configuration.yaml entry ring: - username: you@example.com - password: secret + username: YOUR_USERNAME + password: YOUR_PASSWORD ``` -Configuration variables: - -- **username** (*Required*): The username for accessing your Ring account. -- **password** (*Required*): The password for accessing your Ring account. +{% configuration %} +username: + description: The username for accessing your Ring account. + required: true + type: string +password: + description: The password for accessing your Ring account. + required: true + type: string +{% endconfiguration %} Finish its configuration by visiting the [Ring binary sensor](/components/binary_sensor.ring/) or [Ring sensor](/components/sensor.ring/) documentation. diff --git a/source/_components/sensor.hp_ilo.markdown b/source/_components/sensor.hp_ilo.markdown index 25d6ccb5e5..f242584b9d 100644 --- a/source/_components/sensor.hp_ilo.markdown +++ b/source/_components/sensor.hp_ilo.markdown @@ -23,6 +23,7 @@ Some more details about what can be retrieved from these sensors is available in

    +## {% linkable_title Configuration %} To use this component in your installation, add the following to your `configuration.yaml` file: @@ -31,8 +32,8 @@ To use this component in your installation, add the following to your `configura sensor: - platform: hp_ilo host: IP_ADDRESS or HOSTNAME - username: USERNAME - password: PASSWORD + username: YOUR_USERNAME + password: YOUR_PASSWORD monitored_variables: - name: SENSOR NAME sensor_type: SENSOR TYPE @@ -63,7 +64,7 @@ Valid sensor_types: - **server_health**: Get server health information. - **network_settings**: Get the iLO network settings. -### Example +## {% linkable_title Example %} In order to get two sensors reporting CPU fan speed and Ambient Inlet Temperature, as well as a dump of `server_health` on a HP Microserver Gen8, you could use the following in your `configuration.yaml` file @@ -71,8 +72,8 @@ In order to get two sensors reporting CPU fan speed and Ambient Inlet Temperatur sensor: - platform: hp_ilo host: IP_ADDRESS or HOSTNAME - username: USERNAME - password: PASSWORD + username: YOUR_USERNAME + password: YOUR_PASSWORD monitored_variables: - name: CPU fanspeed sensor_type: server_health diff --git a/source/_components/sensor.imap.markdown b/source/_components/sensor.imap.markdown index f6e192bdda..a3b9af23b2 100644 --- a/source/_components/sensor.imap.markdown +++ b/source/_components/sensor.imap.markdown @@ -24,8 +24,8 @@ sensor: - platform: imap server: imap.gmail.com port: 993 - username: USERNAME - password: PASSWORD + username: YOUR_USERNAME + password: YOUR_PASSWORD ``` Configuration variables: diff --git a/source/_components/sensor.mfi.markdown b/source/_components/sensor.mfi.markdown index e7cc678749..4498c4d328 100644 --- a/source/_components/sensor.mfi.markdown +++ b/source/_components/sensor.mfi.markdown @@ -16,15 +16,17 @@ ha_release: 0.32 The `mfi` sensor platform to allow you to monitor [mFi mPort interface and sensors](https://www.ubnt.com/mfi/mport/). +## {% linkable_title Configuration %} + To add this platform to your installation, add the following to your `configuration.yaml` file: ```yaml # Example configuration.yaml entry sensor: - platform: mfi - host: IP_ADDRESS - username: USERNAME - password: PASSWORD + host: IP_ADDRESS_OF_SENSOR + username: YOUR_USERNAME + password: YOUR_PASSWORD ``` Configuration variables: diff --git a/source/_components/sensor.mopar.markdown b/source/_components/sensor.mopar.markdown index 3357ae9193..6514684183 100644 --- a/source/_components/sensor.mopar.markdown +++ b/source/_components/sensor.mopar.markdown @@ -24,18 +24,28 @@ Be sure you have a [mopar.com](http://mopar.com) account with your vehicle(s) re To enable this sensor, add the following lines to your `configuration.yaml`. ```yaml +# Example configuration.yaml entry sensor: - platform: mopar - username: - password: - pin: + username: YOUR_USERNAME + password: YOUR_PASSWORD + pin: YOUR_UCONNECT_PIN ``` -Configuration options for the Mopar sensor: - -- **username** (*Required*): Your mopar.com username. -- **password** (*Required*): Your mopar.com password. -- **pin** (*Required*): Your uConnect pin. +{% configuration %} +username: + description: Your mopar.com username. + required: true + type: string +password: + description: Your mopar.com password. + required: true + type: string +pin: + description: v + required: true + type: string +{% endconfiguration %} ## {% linkable_title Service %} diff --git a/source/_components/sensor.random.markdown b/source/_components/sensor.random.markdown index e4fd1ec447..cbe6049cf3 100644 --- a/source/_components/sensor.random.markdown +++ b/source/_components/sensor.random.markdown @@ -16,6 +16,8 @@ ha_release: 0.32 The `random` sensor platform is creating random sensor values (integers) out of a given range. Returned values form a [discrete uniform distribution](https://en.wikipedia.org/wiki/Discrete_uniform_distribution), meaning that each integer value in the range configured is equally likely to be drawn. This can be useful if you want to test automation rules. It generates a new value every time it is polled. +## {% linkable_title Configuration %} + To enable the random sensor, add the following lines to your `configuration.yaml`: ```yaml diff --git a/source/_components/sensor.sma.markdown b/source/_components/sensor.sma.markdown index b2c9bfdcd1..f3eb166564 100644 --- a/source/_components/sensor.sma.markdown +++ b/source/_components/sensor.sma.markdown @@ -16,14 +16,16 @@ ha_release: 0.36 The `sma` sensor will poll a [SMA](http://www.sma-solar.com/) [(US)](http://www.sma-america.com/) solar inverter and present the values as sensors (or attributes of sensors) in Home Assistant. +## {% linkable_title Configuration %} + To enable this sensor, add the following lines to your `configuration.yaml` file: ```yaml # Example configuration.yaml entry sensor sma: - platform: sma - host: 192.168.88.199 - password: !secret sma_password + host: IP_ADDRESS_OF_DEVICE + password: YOUR_SMA_PASSWORD sensors: current_consumption: [total_consumption] current_power: diff --git a/source/_components/sensor.synologydsm.markdown b/source/_components/sensor.synologydsm.markdown index a15727f86d..d9f4dddf51 100644 --- a/source/_components/sensor.synologydsm.markdown +++ b/source/_components/sensor.synologydsm.markdown @@ -14,7 +14,7 @@ ha_iot_class: "Local Polling" --- -This `synologydsm` sensor allows getting various statistics from your [Synology NAS](https://www.synology.com). +The `synologydsm` sensor platform allows getting various statistics from your [Synology NAS](https://www.synology.com). To use the `synologydsm` sensor in your installation, add the following to your `configuration.yaml` file: @@ -23,8 +23,8 @@ To use the `synologydsm` sensor in your installation, add the following to your sensor: - platform: synologydsm host: IP_ADDRESS_OF_SYNOLOGY_NAS - username: USERNAME - password: PASSWORD + username: YOUR_USERNAME + password: YOUR_PASSWORD monitored_conditions: - cpu_total_load - memory_real_usage diff --git a/source/_components/shiftr.markdown b/source/_components/shiftr.markdown index 16ae6a53f0..a383534704 100644 --- a/source/_components/shiftr.markdown +++ b/source/_components/shiftr.markdown @@ -15,6 +15,8 @@ ha_release: 0.48 The `shiftr` component makes it possible to transfer details collected with Home Assistant to [Shiftr.io](https://shiftr.io) and visualize the flow of the information. Keep in mind that your details will be public! +## {% linkable_title Configuration %} + Create a new [namespace](https://shiftr.io/new) and generate a new token. You will need to use `Key (Username)` and `Secret (Password)` to setup the component. To use the `shiftr` component in your installation, add the following to your `configuration.yaml` file: @@ -22,12 +24,18 @@ To use the `shiftr` component in your installation, add the following to your `c ```yaml # Example configuration.yaml entry shiftr: - username: 63d8187f - password: 32fd92de6a59c3e2 + username: YOUR_NAMESPACE_USERNAME + password: YOUR_NAMESPACE_PASSWORD ``` -Configuration variables: - -- **username** (*Required*): Username for the namespace. -- **password** (*Required*): Password for the namespace. +{% configuration %} +username: + description: Username for the Shiftr namespace. + required: true + type: string +password: + description: Password for the Shiftr namespace. + required: true + type: string +{% endconfiguration %} diff --git a/source/_components/skybell.markdown b/source/_components/skybell.markdown index 4a7a2cfdac..189f3a1b99 100644 --- a/source/_components/skybell.markdown +++ b/source/_components/skybell.markdown @@ -17,13 +17,15 @@ The `skybell` implementation allows you to integrate your [Skybell.com](http://w Currently only the Skybell HD is supported by this platform. +## {% linkable_title Configuration %} + To enable devices set up with your [Skybell.com](http://www.skybell.com/) account, add the following to your `configuration.yaml` file: ```yaml # Example configuration.yaml entry skybell: - username: you@example.com - password: secret + username: YOUR_USERNAME + password: YOUR_PASSWORD ``` {% configuration %} diff --git a/source/_components/sleepiq.markdown b/source/_components/sleepiq.markdown index 6527c803f0..a3efeaa0a0 100644 --- a/source/_components/sleepiq.markdown +++ b/source/_components/sleepiq.markdown @@ -22,11 +22,18 @@ To set it up, add the following information to your `configuration.yaml` file: ```yaml # Example configuration.yaml entry sleepiq: - username: you@example.com - password: omgsecure + username: YOUR_USERNAME + password: YOUR_PASSWORD ``` -Configuration variables: +{% configuration %} +username: + description: Your SleepIQ username (usually an e-mail address). + required: true + type: string +password: + description: Your SleepIQ password. + required: true + type: string +{% endconfiguration %} -- **username** (*Required*): Your SleepIQ username (usually an email address). -- **password** (*Required*): Your SleepIQ password. diff --git a/source/_components/switch.hook.markdown b/source/_components/switch.hook.markdown index 3ba23b8c19..fbfeef75b4 100644 --- a/source/_components/switch.hook.markdown +++ b/source/_components/switch.hook.markdown @@ -20,23 +20,44 @@ In short, Hook is an RF to Wi-Fi bridge, controlling devices that receive comman Hook provides a simple [REST API](https://app.swaggerhub.com/api/rahilj/GetHook_RestAPI/v1). This Home Assistant component reads in devices that have been set up in the official app. +## {% linkable_title Configuration %} + Configure with either your username/password or your API token for the official app. +To enable this platform in your installation, add the following to your `configuration.yaml` file: + ```yaml # Example configuration.yaml entry switch: - - platform: hook - username: - password: !secret hook + - platform: hook + username: YOUR_E_MAIL_ADDRESS + password: YOUR_HOOK ``` + Or + ```yaml # Example configuration.yaml entry switch: - - platform: hook - token: + - platform: hook + token: YOUR_API_TOKEN ``` +{% configuration %} +username: + description: The email address associated with your Hook Smart Home Hub. + required: true + type: string +password: + description: The password for your Hook Smart Home Hub. + required: true + type: string +token: + description: The API token for your Hook Smart Home Hub. + required: true + type: string +{% endconfiguration %} + Extra debug logging is available, if you need it. ```yaml diff --git a/source/_components/switch.mfi.markdown b/source/_components/switch.mfi.markdown index 6d00c42a4b..f82e580257 100644 --- a/source/_components/switch.mfi.markdown +++ b/source/_components/switch.mfi.markdown @@ -15,15 +15,17 @@ ha_iot_class: "Local Polling" The `mfi` switch platform to allow you to control [mFi Controllable Power Outlets](https://www.ubnt.com/mfi/mpower/). +## {% linkable_title Configuration %} + To add this platform to your installation, add the following to your `configuration.yaml` file: ```yaml # Example configuration.yaml entry switch: - platform: mfi - host: IP_ADDRESS - username: USERNAME - password: PASSWORD + host: IP_ADDRESS_OF_SWITCH + username: YOUR_USERNAME + password: YOUR_PASSWORD ``` Configuration variables: diff --git a/source/_components/switch.rainmachine.markdown b/source/_components/switch.rainmachine.markdown index 1b85b03aa4..26b73e0aa8 100644 --- a/source/_components/switch.rainmachine.markdown +++ b/source/_components/switch.rainmachine.markdown @@ -13,23 +13,19 @@ ha_iot_class: "Cloud Polling" ha_release: 0.51 --- -The `rainmachine` switch platform allows you to control programs and zones within -a [RainMachine smart Wi-Fi sprinkler controller](http://www.rainmachine.com/). +The `rainmachine` switch platform allows you to control programs and zones within a [RainMachine smart Wi-Fi sprinkler controller](http://www.rainmachine.com/). ## {% linkable_title Configuring the Platform %} -The platform allows for either local (i.e., directly across the LAN) or remote -(i.e., through RainMachine's cloud API) access; the route you choose will -dictate what your configuration should look like. +The platform allows for either local (i.e., directly across the LAN) or remote (i.e., through RainMachine's cloud API) access; the route you choose will dictate what your configuration should look like. -For local access, specify the IP address/hostname of your RainMachine unit -, your RainMachine password, and optionally, the device's HTTP port: +For local access, specify the IP address/hostname of your RainMachine unit, your RainMachine password, and optionally, the device's HTTP port: ```yaml switch: platform: rainmachine ip_address: 192.168.1.100 - password: my_password_123 + password: YOUR_PASSWORD ``` For remote access, specify your RainMachine username/email and password: @@ -38,34 +34,48 @@ For remote access, specify your RainMachine username/email and password: switch: platform: rainmachine email: user@host.com - password: my_password_123 + password: YOUR_PASSWORD ``` -Configuration Variables: +{% configuration %} +password: + description: Your RainMachine password. + required: true + type: string +email: + description: "Your RainMachine username/email. Cannot be used with the `ip_address` parameter." + required: false + type: string +ip_address: + description: "The IP address of your RainMachine unit; cannot be used with the `email` parameter." + required: optional + type: string +port: + description: The TCP port used by your unit for the REST API. + required: false + type: int + default: 8080 +ssl: + description: Whether communication with the local device should occur over HTTPS. + required: false + type: boolean + default: true +zone_run_time: + description: The number of seconds that a zone should run when turned on. + required: false + type: int + default: 600 +{% endconfiguration %} -- **ip_address** (*Optional*): the IP address of your RainMachine unit; cannot be -used with the `email` parameter -- **email** (*Optional*): your RainMachine username/email; cannot be used with the -`ip_address` parameter -- **password** (*Required*): your RainMachine password -- **port** (*Optional*): the TCP port used by your unit for the REST API (default: 8080) -- **ssl** (*Optional*): whether communication with the local device should occur -over HTTPS (default: true) -- **zone_run_time** (*Optional*): the number of seconds that a zone should run when -turned on (default: 600) ## {% linkable_title Controlling Your Device %} -After Home Assistant loads, you will see new switches for every enabled program -and zone. These work as expected: +After Home Assistant loads, you will see new switches for every enabled program and zone. These work as expected: - Program On/Off: starts/stops a program -- Zone On/Off: starts/stops a zone (using the `zone_run_time` parameter to -determine how long to run for) +- Zone On/Off: starts/stops a zone (using the `zone_run_time` parameter to determine how long to run for) -Programs and zones are linked. If a program is running its final zone, you will -see both the program and zone switches turned on; turning either one off will -turn the other one off (just like in the web app). +Programs and zones are linked. If a program is running its final zone, you will see both the program and zone switches turned on; turning either one off will turn the other one off (just like in the web app). ## {% linkable_title Weblink %} @@ -83,7 +93,4 @@ You can find `` by logging into [https://my.rainmachine.com](htt ## {% linkable_title For Awareness %} -The remote RainMachine API currently has two broken operations (i.e., they return -error codes): starting a program and stopping a program. Please note that -starting/stopping programs with the remote API is disabled until RainMachine -can fix the issue. +The remote RainMachine API currently has two broken operations (i.e., they return error codes): starting a program and stopping a program. Please note that starting/stopping programs with the remote API is disabled until RainMachine can fix the issue. diff --git a/source/_components/tesla.markdown b/source/_components/tesla.markdown index 6580d26e31..8673396fc6 100644 --- a/source/_components/tesla.markdown +++ b/source/_components/tesla.markdown @@ -29,8 +29,8 @@ To use Tesla in your installation, add the following to your `configuration.yaml ```yaml # Example configuration.yaml entry tesla: - username: email - password: password + username: YOUR_E_MAIL_ADDRESS + password: YOUR_PASSWORD ``` Configuration variables: diff --git a/source/_components/volvooncall.markdown b/source/_components/volvooncall.markdown index 09664ef231..6482d372cc 100644 --- a/source/_components/volvooncall.markdown +++ b/source/_components/volvooncall.markdown @@ -21,8 +21,8 @@ To use Volvo On Call in your installation, add the following to your `configurat ```yaml # Example configuration.yaml entry volvooncall: - username: username - password: password + username: YOUR_USERNAME + password: YOUR_PASSWORD ``` Users registered with Volvo in North America or China will need to specify a region: @@ -30,15 +30,18 @@ Users registered with Volvo in North America or China will need to specify a reg ```yaml # North America volvooncall: - username: username - password: password + username: YOUR_USERNAME + password: YOUR_PASSWORD region: na ``` + +or + ```yaml # China volvooncall: - username: username - password: password + username: YOUR_USERNAME + password: YOUR_PASSWORD region: cn ``` @@ -47,8 +50,8 @@ A more advanced example for setting the vehicle name and selecting what resource ```yaml # Example configuration.yaml entry volvooncall: - username: username - password: password + username: YOUR_USERNAME + password: YOUR_PASSWORD name: abc123: 'Batmobile' resources: diff --git a/source/_components/waterfurnace.markdown b/source/_components/waterfurnace.markdown index 9bf884e0c2..2555b1fb80 100644 --- a/source/_components/waterfurnace.markdown +++ b/source/_components/waterfurnace.markdown @@ -13,12 +13,11 @@ ha_release: 0.62 ha_iot_class: "Cloud Polling" --- -The `waterfurnace` component communicates with the WaterFurnace -Symphony website's WebSocket to show you many of the sensors in your -system. While not an official API, this is the same backend the -Symphony website is based on, and should be reasonably stable. +The `waterfurnace` component communicates with the WaterFurnace Symphony website's WebSocket to show you many of the sensors in your +system. While not an official API, this is the same backend the Symphony website is based on, and should be reasonably stable. The sensors provided include: + - Thermostat Setpoint - Thermostat Current Temp - Leaving Air Temp @@ -28,41 +27,37 @@ The sensors provided include: - Total system power (in Watts) - Furnace Mode +## {% linkable_title Configuration %} + To use Waterfurnace in your installation, add the following to your `configuration.yaml` file: ```yaml # Example configuration.yaml entry waterfurnace: - username: you@example.com - password: secr3tpassword + username: YOUR_USERNAME + password: YOUR_PASSWORD unit: 0123456789AB ``` {% configuration %} username: - description: The email address for your Symphony WaterFurnace account - required: true - type: string + description: The email address for your Symphony WaterFurnace account + required: true + type: string password: - description: The password for your Symphony WaterFurnace account - required: true - type: string + description: The password for your Symphony WaterFurnace account + required: true + type: string unit: - description: The unit serial number for your WaterFurnace - required: true - type: string + description: The unit serial number for your WaterFurnace + required: true + type: string {% endconfiguration %} #### {% linkable_title Limitations %} -The WebSocket interface used by this module requires active polling, -otherwise the server side shuts down the connection. By default, this -polling is happening every 10 seconds. All sensors are updated during -every polling cycle. +The WebSocket interface used by this module requires active polling, otherwise the server side shuts down the connection. By default, this polling is happening every 10 seconds. All sensors are updated during every polling cycle. + +While this is communicating with a thermostat, geothermal systems operate most efficiently when setbacks are not used, and the home is kept at a constant temperature. It remains useful to collect the data from the system to understand its performance, but a full climate interface won't be implemented. -While this is communicating with a thermostat, geothermal systems -operate most efficiently when setbacks are not used, and the home is -kept at a constant temperature. It remains useful to collect the data -from the system to understand its performance, but a full climate -interface won't be implemented. diff --git a/source/_components/zoneminder.markdown b/source/_components/zoneminder.markdown index 0f3bccbb94..0ebf5fbafc 100644 --- a/source/_components/zoneminder.markdown +++ b/source/_components/zoneminder.markdown @@ -39,6 +39,6 @@ zoneminder: path: ZM_PATH path_zms: ZM_PATH_ZMS ssl: False - username: USERNAME - password: PASSWORD + username: YOUR_USERNAME + password: YOUR_PASSWORD ``` From 80500b0d1cae71e0c5ab1e56bfdb96355ea7261e Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Thu, 29 Mar 2018 10:06:53 +0200 Subject: [PATCH 721/993] Fix service name --- source/_docs/configuration/customizing-devices.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_docs/configuration/customizing-devices.markdown b/source/_docs/configuration/customizing-devices.markdown index 71b8a2f561..c3cc8cc441 100644 --- a/source/_docs/configuration/customizing-devices.markdown +++ b/source/_docs/configuration/customizing-devices.markdown @@ -78,7 +78,7 @@ Device class is currently supported by the following platforms: ### {% linkable_title Reloading customize %} -Home Assistant offers a service to reload the core configuration while Home Assistant is running called `homeassistant/reload_core_config`. This allows you to change your customize section and see it being applied without having to restart Home Assistant. To call this service, go to the service developer tool icon service developer tools, select the service `homeassistant/reload_core_config` and click "Call Service". +Home Assistant offers a service to reload the core configuration while Home Assistant is running called `homeassistant.reload_core_config`. This allows you to change your customize section and see it being applied without having to restart Home Assistant. To call this service, go to the service developer tool icon service developer tools, select the service `homeassistant.reload_core_config` and click "CALL SERVICE".

    New customize information will be applied the next time the state of the entity gets updated. From 8dfd433f0628391db4c8974b7b08599c8946f161 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Thu, 29 Mar 2018 10:12:24 +0200 Subject: [PATCH 722/993] Fix link --- source/help/index.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/help/index.markdown b/source/help/index.markdown index ab661f2508..2f39b725d7 100644 --- a/source/help/index.markdown +++ b/source/help/index.markdown @@ -21,7 +21,7 @@ There are various ways to get in touch with the Home Assistant community. It doe ### {% linkable_title Bugs, Feature requests, and alike %} -Have you found an issue in your Home Assistant installation? Please report it. Reporting it makes it easy to track and ensures that it gets fixed. For more details please refer to [Reporting issues](help/reporting_issues/) page. +Have you found an issue in your Home Assistant installation? Please report it. Reporting it makes it easy to track and ensures that it gets fixed. For more details please refer to [Reporting issues](/help/reporting_issues/) page. - [Issue tracker Home Assistant](https://github.com/home-assistant/home-assistant/issues) - [Issue tracker home-assistant.io](https://github.com/home-assistant/home-assistant.io/issues) (Website and documentation) From efe4e284e801ee2632145a088f0ebb783937f948 Mon Sep 17 00:00:00 2001 From: Marc Forth Date: Thu, 29 Mar 2018 22:53:24 +0100 Subject: [PATCH 723/993] Fixed link to hassio issue tracker (#5049) --- source/help/index.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/help/index.markdown b/source/help/index.markdown index 2f39b725d7..9852420f82 100644 --- a/source/help/index.markdown +++ b/source/help/index.markdown @@ -26,7 +26,7 @@ Have you found an issue in your Home Assistant installation? Please report it. R - [Issue tracker Home Assistant](https://github.com/home-assistant/home-assistant/issues) - [Issue tracker home-assistant.io](https://github.com/home-assistant/home-assistant.io/issues) (Website and documentation) - [Issue tracker Frontend](https://github.com/home-assistant/home-assistant-polymer/issues) (Frontend) -- [Issue tracker Hass.io](https://github.com/home-assistant/hassio) +- [Issue tracker Hass.io](https://github.com/home-assistant/hassio/issues) - [Feature requests Home Assistant](https://community.home-assistant.io/c/feature-requests) (Don't post feature requests in the issue trackers. Thanks.) ### {% linkable_title Videos, talks, workshops and alike %} From a90513b18843aa5fc3b88590399a6e1c34bbba4d Mon Sep 17 00:00:00 2001 From: Thomas Svedberg <36861881+ThomasSvedberg@users.noreply.github.com> Date: Fri, 23 Mar 2018 22:54:17 +0100 Subject: [PATCH 724/993] Update sensor.vasttrafik.markdown (#4986) * Update sensor.vasttrafik.markdown Add new config option "lines" and extend full example. * :pencil2: Tweaks --- source/_components/sensor.vasttrafik.markdown | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/source/_components/sensor.vasttrafik.markdown b/source/_components/sensor.vasttrafik.markdown index 0217a91c6a..8f3862fdd8 100644 --- a/source/_components/sensor.vasttrafik.markdown +++ b/source/_components/sensor.vasttrafik.markdown @@ -13,7 +13,6 @@ ha_iot_class: "Cloud Polling" ha_release: "0.30" --- - The `vasttrafik` sensor will provide you traveling details for the larger Göteborg area in Sweden from the [Västtrafik](https://vasttrafik.se/) public transportation service. You must create an application [here](https://developer.vasttrafik.se/portal/#/applications) to obtain a `key` and a `secret`. @@ -34,10 +33,11 @@ Configuration variables: - **key** (*Required*): The API key to access your Västtrafik account. - **secret** (*Required*): The API secret to access your Västtrafik account. -- **departures** array (*Required*): List of traveling routes. +- **departures** array (*Required*): List of travel routes. - **name** (*Optional*): Name of the route. - **from** (*Required*): The start station. - **heading** (*Optional*): Direction of the traveling. + - **lines** (*Optional*): Only consider these lines. - **delay** (*Optional*): Delay in minutes. Defaults to 0. The data are coming from [Västtrafik](https://vasttrafik.se/). @@ -54,5 +54,8 @@ sensor: - name: Mot järntorget from: Musikvägen heading: Järntorget + lines: + - 7 + - GRÖN delay: 10 ``` From 0724d9f456b90313e5ddcf07404ce98c57c21cb3 Mon Sep 17 00:00:00 2001 From: Andy Castille Date: Thu, 29 Mar 2018 22:00:54 -0500 Subject: [PATCH 725/993] Add new Doorbird config option (#5047) --- source/_components/doorbird.markdown | 1 + 1 file changed, 1 insertion(+) diff --git a/source/_components/doorbird.markdown b/source/_components/doorbird.markdown index 4ce686ec64..31b42ef729 100644 --- a/source/_components/doorbird.markdown +++ b/source/_components/doorbird.markdown @@ -31,6 +31,7 @@ Configuration variables: - **username** (*Required*): The username of a non-administrator user account on the device. - **password** (*Required*): The password for the user specified. - **doorbell_events** (*Optional*): Setting this to `true` this will register a callback URL with the device so that events can be published to the event bus when the doorbell rings. +- **hass_url_override** (*Optional*): If your DoorBird cannot connect to the machine running Home Assistant because you are using dynamic DNS or some other HTTP configuration, specify the LAN IP of the machine here to force a LAN connection.

    Enabling `doorbell_events` will delete all other registered push notification services with the device every time Home Assistant starts. This will not affect notifications delivered by the DoorBird mobile app. From 7ccd3b98ef9444d473cb597d034bfc05ea5668b5 Mon Sep 17 00:00:00 2001 From: Brian Low Date: Fri, 30 Mar 2018 04:52:46 -0600 Subject: [PATCH 726/993] Arlo Q not supported (#5052) * Arlo Q not supported * It's a platform --- source/_components/sensor.arlo.markdown | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/source/_components/sensor.arlo.markdown b/source/_components/sensor.arlo.markdown index 309795f795..e5184d2ed0 100644 --- a/source/_components/sensor.arlo.markdown +++ b/source/_components/sensor.arlo.markdown @@ -15,6 +15,10 @@ ha_iot_class: "Cloud Polling" To get your [Arlo](https://arlo.netgear.com/) sensors working within Home Assistant, please follow the instructions for the general [Arlo component](/components/arlo). +This platform does not support Arlo Q. + +## {% linkable_title Configuration %} + Once you have enabled the [Arlo component](/components/arlo), add the following to your `configuration.yaml` file: ```yaml From a2f5a076533425d59b0c9b6d630cb01996971954 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Fri, 30 Mar 2018 13:20:03 +0200 Subject: [PATCH 727/993] Add blog post about using HA on a Fedora Atomic host (#5051) --- .../_posts/2018-03-29-fedora-atomic.markdown | 143 ++++++++++++++++++ .../blog/2018-03-fedora-atomic/social.png | Bin 0 -> 84461 bytes 2 files changed, 143 insertions(+) create mode 100644 source/_posts/2018-03-29-fedora-atomic.markdown create mode 100644 source/images/blog/2018-03-fedora-atomic/social.png diff --git a/source/_posts/2018-03-29-fedora-atomic.markdown b/source/_posts/2018-03-29-fedora-atomic.markdown new file mode 100644 index 0000000000..c1f1e2c9ba --- /dev/null +++ b/source/_posts/2018-03-29-fedora-atomic.markdown @@ -0,0 +1,143 @@ +--- +layout: post +title: "Using Fedora Atomic" +description: "Running Home Assistant on a Fedora Atomic host." +date: 2018-03-29 22:00:00 +date_formatted: "March 29, 2018" +author: Fabian Affolter +author_twitter: fabaff +comments: true +categories: Announcements +og_image: /images/blog/2018-03-fedora-atomic/social.png +--- + + +The Hackerspace [Eastermundigen](http://www.eastermundigen.ch/) is often my real-world playground for Home Assistant-related topics which sometimes more belong in the industrial automation area than in a home. Also, it gives me access to devices which I don't have like 3D printers, laser cutters, connected power strips and a like. In the past the local Home Assistant instance there was running on an old [CubieBoard2](http://cubieboard.org/) with [Fedora ARM](https://arm.fedoraproject.org/). It was one of several systems which were running 24/7. To reduce the electricity costs we decided to consolidate the physical systems to only two. One for storage and one for all other services. + + + +This blog post contains the details of the setup. They may be useful for others as well. Our new system is running Fedora 27 from [Project Atomic](http://www.projectatomic.io). We will not cover the setup of an Atomic host and the details of Project Atomic itself. For more details, have a look at [Benjamin Affolter](https://twitter.com/bliemli)'s [blog post](https://www.puzzle.ch/blog/articles/2017/09/28/atomic-host-basic-setup-and-usage) which also covers some of the basics. + +The installation process of an Atomic host is pretty much the same as for Fedora Server or Fedora Workstation. Either create a Live USB device or use PXE to get the installation going. E.g., lauch iPXE and chainload [netboot.yxz](https://netboot.xyz/) with `chain --autofree https://boot.netboot.xyz`. Then let `anaconda` guide you through the setup. + +After the first boot, copy the SSH keys, use `visudo` to add users and perform the usual steps you do for a new system. We only allow SSH with keys, are enforcing the usage of `sudo`, need special network settings and a couple of other things. But those configuration settings are irrelevant for a setup in a local network. + +If the system is up and running then check if you are using the latest release. + +```bash +$ sudo atomic host status +State: idle; auto updates disabled +Deployments: +● ostree://fedora-atomic:fedora/27/x86_64/atomic-host + Version: 27.100 (2018-03-13 17:19:44) + Commit: 326f62b93a5cc836c97d31e73a71b6b6b6955c0f225f7651b52a693718e6aa91 + GPGSignature: Valid signature by 860E19B0AFA800A1751881A6F55E7430F5282EE4 +``` + +The release is 27.100. The latest is 27.105. So, let's update the host and reboot it. + +```bash +$ sudo atomic host upgrade +$ sudo systemctl reboot +``` + +You can also see that Docker is already running. No installation needed. + +```bash +$ sudo systemctl status docker +● docker.service - Docker Application Container Engine + Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled; vendor preset: disabled) + Active: active (running) since Thu 2018-03-28 15:44:04 CEST; 35min ago +... +``` + +Further we will cover how it works for Home Assistant and [Mosquitto](https://mosquitto.org/). For a small setup using [kubernetes](https://kubernetes.io) seems a bit overkill. Thus, we decided to stick to `systemd`. + +Instead of `docker` we can use the command-line tool [`atomic`](http://www.projectatomic.io/docs/usr-bin-atomic/) to perform a lot of tasks. Download the images for the containers. We are pulling the images from [Docker Hub](https://hub.docker.com/). + +```bash +$ sudo atomic install docker.io/​homeassistant/home-assistant +$ sudo atomic install docker.io/eclipse-mosquitto +``` + +Both containers need additional directories for persistent storage. + +```bash +$ sudo mkdir -p /opt/home-assistant +$ sudo mkdir -p /opt/mosquitto/{config,data,log} +``` + +We need a copy of `mosquitto.conf`: + +```bash +$ sudo curl -o /opt/mosquitto/config/mosquitto.conf \ + https://raw.githubusercontent.com/eclipse/mosquitto/master/mosquitto.conf +``` + +To handle the containers we created service unit files for the [Home Assistant](https://hub.docker.com/r/homeassistant/home-assistant/) and the [Mosquitto](https://hub.docker.com/_/eclipse-mosquitto/) container. For Home Assistant the file can looks like the sample below. Further details about the `ExecStart` line can be found in the documentation about a [Docker](/docs/installation/docker/) setup. For Home Assistant + +```bash +$ su +# cat <<'EOF' >> /etc/systemd/system/home-assistant.service +[Unit] +Description=Home Assistant +Requires=docker.service +Wants=docker.service +After=docker.service + +[Service] +Restart=on-failure +RestartSec=10 +ExecStart=/usr/bin/docker run --rm --name %p -v /opt/home-assistant:/config:Z -v /etc/localtime:/etc/localtime:ro --network host homeassistant/home-assistant +ExecStop=-/usr/bin/docker stop -t 30 %p + +[Install] +WantedBy=multi-user.target +EOF +``` + +and for Mosquitto. + +```bash +# cat <<'EOF' >> /etc/systemd/system/mosquitto.service +[Unit] +Description=Mosquitto MQTT docker container +Requires=docker.service +Wants=docker.service +After=docker.service + +[Service] +Restart=on-failure +RestartSec=10 +ExecStart=/usr/bin/docker run --name %p -v mosquitto.conf:/opt/mosquitto/config/mosquitto.conf -v /opt/mosquitto/data:/opt/mosquitto/data -v /opt/mosquitto/log:/mosquitto/log -p 1883:1883 -p 9001:9001 eclipse-mosquitto +ExecStop=/usr/bin/docker stop -t 2 %p +ExecStopPost=/usr/bin/docker rm -f %p + +[Install] +WantedBy=multi-user.target +EOF +``` + +Exit to be not longer `root`. + +```bash +# exit +``` + +Reload `systemd` to make it aware of the new configurations. + +```bash +$ sudo systemctl daemon-reload +``` + +Now, both container can be controlled by `systemctl`. + +```bash +$ sudo systemctl enable home-assistant.service --now +$ sudo systemctl enable mosquitto.service --now +``` + +Check with `$ sudo systemctl status [name].service` if there are error or the services are running. + +The deployment of [NGINX](https://nginx.org/en/) as webserver for static content, [grafana](https://grafana.com/) and [InfluxBD](https://www.influxdata.com/) works the same way as for Home Assistant and Mosquitto. To get a proper [traefik](https://traefik.io/) setup additional reading and work is required. + diff --git a/source/images/blog/2018-03-fedora-atomic/social.png b/source/images/blog/2018-03-fedora-atomic/social.png new file mode 100644 index 0000000000000000000000000000000000000000..c6bf2a202b3f6a074834042b7a0506ffa6f66b1b GIT binary patch literal 84461 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 z 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 literal 0 HcmV?d00001 From a8bca0d0f875ffe7d6a49e9afdad5d842921302f Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Fri, 30 Mar 2018 14:34:50 +0200 Subject: [PATCH 728/993] Minor update --- source/_posts/2018-03-29-fedora-atomic.markdown | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/_posts/2018-03-29-fedora-atomic.markdown b/source/_posts/2018-03-29-fedora-atomic.markdown index c1f1e2c9ba..76b3731514 100644 --- a/source/_posts/2018-03-29-fedora-atomic.markdown +++ b/source/_posts/2018-03-29-fedora-atomic.markdown @@ -1,6 +1,6 @@ --- layout: post -title: "Using Fedora Atomic" +title: "Using Fedora Atomic with Home Assistant" description: "Running Home Assistant on a Fedora Atomic host." date: 2018-03-29 22:00:00 date_formatted: "March 29, 2018" @@ -53,7 +53,7 @@ $ sudo systemctl status docker Further we will cover how it works for Home Assistant and [Mosquitto](https://mosquitto.org/). For a small setup using [kubernetes](https://kubernetes.io) seems a bit overkill. Thus, we decided to stick to `systemd`. -Instead of `docker` we can use the command-line tool [`atomic`](http://www.projectatomic.io/docs/usr-bin-atomic/) to perform a lot of tasks. Download the images for the containers. We are pulling the images from [Docker Hub](https://hub.docker.com/). +Instead of `docker` we can use the command-line tool [`atomic`](http://www.projectatomic.io/docs/usr-bin-atomic/) to perform a lot of tasks. Download the images for the containers. We are pulling the images from [Docker Hub](https://hub.docker.com/), thus we need to add the registry to use. ```bash $ sudo atomic install docker.io/​homeassistant/home-assistant From 58c5eb81a5d09eae0fc9c0f62f060fa72032b0f3 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Fri, 30 Mar 2018 14:36:42 +0200 Subject: [PATCH 729/993] Add missing service --- source/_posts/2018-03-29-fedora-atomic.markdown | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/_posts/2018-03-29-fedora-atomic.markdown b/source/_posts/2018-03-29-fedora-atomic.markdown index 76b3731514..30750c6342 100644 --- a/source/_posts/2018-03-29-fedora-atomic.markdown +++ b/source/_posts/2018-03-29-fedora-atomic.markdown @@ -67,14 +67,14 @@ $ sudo mkdir -p /opt/home-assistant $ sudo mkdir -p /opt/mosquitto/{config,data,log} ``` -We need a copy of `mosquitto.conf`: +We need a copy of `mosquitto.conf` to run Mosquitto later: ```bash $ sudo curl -o /opt/mosquitto/config/mosquitto.conf \ https://raw.githubusercontent.com/eclipse/mosquitto/master/mosquitto.conf ``` -To handle the containers we created service unit files for the [Home Assistant](https://hub.docker.com/r/homeassistant/home-assistant/) and the [Mosquitto](https://hub.docker.com/_/eclipse-mosquitto/) container. For Home Assistant the file can looks like the sample below. Further details about the `ExecStart` line can be found in the documentation about a [Docker](/docs/installation/docker/) setup. For Home Assistant +To handle the containers we created service unit files for the [Home Assistant](https://hub.docker.com/r/homeassistant/home-assistant/) and the [Mosquitto](https://hub.docker.com/_/eclipse-mosquitto/) container. For Home Assistant and Mosquitto the file can looks like the sample below. Further details about the `ExecStart` line can be found in the documentation about a [Docker](/docs/installation/docker/) setup. For Home Assistant ```bash $ su From 8fcb7944a3202104727938036e49a68280e94f57 Mon Sep 17 00:00:00 2001 From: Aaron Bach Date: Fri, 30 Mar 2018 09:08:10 -0600 Subject: [PATCH 730/993] Added documentation around entity_picture_template for template switch --- source/_components/switch.template.markdown | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/source/_components/switch.template.markdown b/source/_components/switch.template.markdown index 747364d080..cfcb54d092 100644 --- a/source/_components/switch.template.markdown +++ b/source/_components/switch.template.markdown @@ -75,6 +75,10 @@ switch: description: Defines a template for the icon of the switch. required: false type: template + entity_picture_template: + description: Defines a template for the picture of the switch. + required: false + type: template {% endconfiguration %} ## {% linkable_title Considerations %} From e4d63479f128eae1060e8e3601b9657aed27cd27 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Fri, 30 Mar 2018 15:14:07 -0700 Subject: [PATCH 731/993] Add release 66 blog post --- _config.yml | 2 +- source/_components/homematicip.markdown | 3 +- source/_components/lock.homematic.markdown | 19 ++ .../_components/sensor.homematicip.markdown | 18 ++ ...arkdown => 2018-03-30-release-66.markdown} | 305 +++++++++++------- .../images/blog/2018-03-0.66/components.png | Bin 0 -> 30754 bytes 6 files changed, 229 insertions(+), 118 deletions(-) create mode 100644 source/_components/lock.homematic.markdown create mode 100644 source/_components/sensor.homematicip.markdown rename source/_posts/{2018-03-31-release-66.markdown => 2018-03-30-release-66.markdown} (64%) create mode 100644 source/images/blog/2018-03-0.66/components.png diff --git a/_config.yml b/_config.yml index 24306a1745..a4af2a187d 100644 --- a/_config.yml +++ b/_config.yml @@ -141,7 +141,7 @@ social: current_major_version: 0 current_minor_version: 66 current_patch_version: 0 -date_released: 2018-03-31 +date_released: 2018-03-30 # Either # or the anchor link to latest release notes in the blog post. # Must be prefixed with a # and have double quotes around it. diff --git a/source/_components/homematicip.markdown b/source/_components/homematicip.markdown index c6e374ee09..631720114c 100644 --- a/source/_components/homematicip.markdown +++ b/source/_components/homematicip.markdown @@ -7,14 +7,13 @@ sidebar: true comments: false sharing: true footer: true -logo: homematicip.png ha_category: Hub ha_iot_class: "Cloud Polling" ha_release: 0.66 featured: false --- -The [HomematicIP](http://www.homematicip.com/) component platform is used as an interface to the cloud server. +The [HomematicIP](http://www.homematicip.com/) component platform is used as an interface to the cloud server. For for communication [homematicip-rest-api](https://github.com/coreGreenberet/homematicip-rest-api) is used. To set up the component: diff --git a/source/_components/lock.homematic.markdown b/source/_components/lock.homematic.markdown new file mode 100644 index 0000000000..cf51b17848 --- /dev/null +++ b/source/_components/lock.homematic.markdown @@ -0,0 +1,19 @@ +--- +layout: page +title: "Homematic Lock" +description: "Instructions on how to integrate Homematic locks within Home Assistant." +date: 2016-06-28 08:30 +sidebar: true +comments: false +sharing: true +footer: true +logo: homematic.png +ha_category: Lock +ha_release: 0.66 +ha_iot_class: "Local Push" +--- + + +The `homematic` lock platform lets you control [Homematic](http://www.homematic.com/) locks through Home Assistant. + +Devices will be configured automatically. Please refer to the [component](/components/homematic/) configuration on how to setup Homematic. \ No newline at end of file diff --git a/source/_components/sensor.homematicip.markdown b/source/_components/sensor.homematicip.markdown new file mode 100644 index 0000000000..65350fc602 --- /dev/null +++ b/source/_components/sensor.homematicip.markdown @@ -0,0 +1,18 @@ +--- +layout: page +title: "HomematicIP Sensor" +description: "Instructions on how to integrate Homematic sensors within Home Assistant." +date: 2016-06-28 08:30 +sidebar: true +comments: false +sharing: true +footer: true +logo: homematic.png +ha_category: Sensor +ha_release: 0.66 +ha_iot_class: "Local Push" +--- + +The `homematicip` sensor platform lets you control [Homematic](http://www.homematic.com/) sensors through Home Assistant. + +Devices will be configured automatically. Please refer to the [component](/components/homematicip/) configuration on how to setup Homematic. diff --git a/source/_posts/2018-03-31-release-66.markdown b/source/_posts/2018-03-30-release-66.markdown similarity index 64% rename from source/_posts/2018-03-31-release-66.markdown rename to source/_posts/2018-03-30-release-66.markdown index ebcabd3abd..3f75c8cf6e 100644 --- a/source/_posts/2018-03-31-release-66.markdown +++ b/source/_posts/2018-03-30-release-66.markdown @@ -1,9 +1,9 @@ --- layout: post -title: "0.66: TBD - also update date attribute!" -description: "TBD" -date: 2018-03-09 00:01:00 -date_formatted: "March 31, 2018" +title: "0.66: ...." +description: "...." +date: 2018-03-30 00:01:00 +date_formatted: "March 30, 2018" author: Paulus Schoutsen author_twitter: balloob comments: true @@ -13,6 +13,12 @@ og_image: /images/blog/2018-03-0.66/components.png +This is the first release with our new release schedule. During the extra week we had a total of 4 beta releases with a total of [26 fixes](https://github.com/home-assistant/home-assistant/milestone/128?closed=1). So this should be the most stable release yet! + +It's also a release that is full of goodies. 80 people contributed over 223 fixes, improvements and new integrations during the last 2 weeks of this release 😎 I want to highlight the work of two people who are doing an amazing job: [@NovapaX] has been doing a great job triaging and fixing weird quirks and bugs in the frontend. And I want to give a shout out to [@armills] who has enabled backend translations. This means that a bunch of things that did not have translations yet, will now soon be translatable. We're planning some cool things with this! + +A quick note if you are using Philips Hue and a Hue custom component: it will no longer work due to the internal changes to the Hue platform. Remove the custom component to ensure that your Hue lights keep working. + ## New Platforms - Add new platform for VeSync switches ([@markperdue] - [#13000]) ([switch.vesync docs]) (new-platform) @@ -28,17 +34,7 @@ og_image: /images/blog/2018-03-0.66/components.png - Zigbee fan ([@igorbernstein2] - [#12289]) ([zha docs]) ([fan.zha docs]) (new-platform) - Adding a discoverable Samsung Syncthru Printer sensor platform ([@nielstron] - [#13134]) ([sensor.syncthru docs]) (new-platform) - Add trafikverket_weatherstation sensor platform ([@Qxlkdr] - [#12115]) ([sensor.trafikverket_weatherstation docs]) (new-platform) - -## Breaking Changes - -- Remove Z-Wave old/new entity_id attributes ([@armills] - [#12652]) ([zwave docs]) (breaking change) -- Python Spotcrime sensor requires API key, fixes include/exclude ([@jcconnell] - [#12926]) ([sensor.spotcrime docs]) (breaking change) -- Fixed SI units for current consumption ([@vandenberghev] - [#13190]) ([sensor.smappee docs]) (breaking change) -- Report swap in MiB ([@DanNixon] - [#13148]) ([sensor.systemmonitor docs]) (breaking change) -- HomeKit Restructure (new config options) ([@cdce8p] - [#12997]) ([homekit docs]) (breaking change) (new-platform) -- Tibber use appNickname as name ([@clementhk] - [#13231]) ([sensor.tibber docs]) (breaking change) -- Refactor Hue: phue -> aiohue ([@balloob] - [#13043]) ([hue docs]) ([light.hue docs]) (breaking change) -- Fix incorrect unit of measurement for precip_intensity. ([@cgtobi] - [#13415]) ([sensor.darksky docs]) (breaking change) +- Security fix & lock for HomeMatic ([@PH89] - [#11980]) ([homematic docs]) ([lock docs]) ([lock.homematic docs]) (breaking change) (new-platform) ## {% linkable_title If you need help... %} @@ -49,6 +45,18 @@ og_image: /images/blog/2018-03-0.66/components.png 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. +## Breaking Changes + +- Refactor Hue: If you specify a bridge in your config, the `host` key is now required and needs to be a valid ip address. Option `allow_in_emulated_hue` has been removed. Exclude the lights via the emulated hue config. Due to the internal changes of how the Hue integration works, any Hue custom component will no longer work. ([@balloob] - [#13043]) ([hue docs]) ([light.hue docs]) (breaking change) +- Z-Wave: In version 0.47, the opt-in `new_entity_ids` configuration was added to Z-Wave to smooth the transition through the change. Support for old entity IDs is now removed, and the configuration is no longer necessary. If you are migrating from 0.63 or higher, your entity IDs will already be stored in the Entity Registry and no changes are required. If not, [entity IDs can now be manually configured using the Entity Registry](/docs/configuration/entity-registry/) if necessary. ([@armills] - [#12652]) ([zwave docs]) (breaking change) +- Spotcrime sensor: This update changes the sensor to require a user supplied API key as a configuration entry. The default key has been removed from the Spotcrime package and has also been modified to accept a user supplied API key.([@jcconnell] - [#12926]) ([sensor.spotcrime docs]) (breaking change) +- Smappee sensor: Fixed SI units for current consumption. Total consumption should be in kWh. not kW. ([@vandenberghev] - [#13190]) ([sensor.smappee docs]) (breaking change) +- System monitor sensor: Used and available swap space reported by the system monitor component is now measured in MiB instead of GiB. ([@DanNixon] - [#13148]) ([sensor.systemmonitor docs]) (breaking change) +- HomeKit: The `pincode` parameter is deprecated, since the `HomeKit` component will now generate one for you and display it as a persistence notification during setup. Additionally the default `port` changed to `51827` to avoid potential conflicts with `homebridge`. Lastly to fix a major bug, we needed to change the way accessory ids are generated. This means that in turn all previous accessory settings will need to be repeated. To avoid future conflicts, it is highly recommended to remove the `Home Assistant Bridge` from the `Home` app and repeat the setup process. ([HomeKit Setup](/components/homekit/#setup)) ([@cdce8p] - [#12997]) ([homekit docs]) (breaking change) (new-platform) +- Tibber: The name and the entity id for the Tibber sensor will now be the same as the nickname from the app. Default nick name is the address. So if you have not changed the nickname in the app, everything should be as before. ([@clementhk] - [#13231]) ([sensor.tibber docs]) (breaking change) +- Darsky sensor: Fix the incorrect unit of measurement for the 'Precip Intensity' and 'Daily Max Precip Intensity' for IS units according to the dark sky api documentation.([@cgtobi] - [#13415]) ([sensor.darksky docs]) (breaking change) +- HomeMatic: Locks are now under the lock component ([@PH89] - [#11980]) ([homematic docs]) ([lock docs]) ([lock.homematic docs]) (breaking change) (new-platform) + ## All changes - New lazytox.py script ([@kellerza] - [#12862]) @@ -183,8 +191,34 @@ Experiencing issues introduced by this release? Please report them in our [issue - Fix current_cover_position ([@cdce8p] - [#13135]) ([cover.template docs]) - Switched values to downcase. ([@diminishedprime] - [#13406]) - Cast Integration Cleanup ([@OttoWinter] - [#13275]) ([media_player.cast docs]) +- Security fix & lock for HomeMatic ([@PH89] - [#11980]) ([homematic docs]) ([lock docs]) ([lock.homematic docs]) (breaking change) (new-platform) +- Log invalid templates in script delays ([@amelchio] - [#13423]) +- LimitlessLED hs_color fixes ([@amelchio] - [#13425]) ([light.limitlessled docs]) +- Hyperion: fix typo ([@a-andre] - [#13429]) ([light.hyperion docs]) +- HomeKit: Bugfix & improved logging ([@cdce8p] - [#13431]) ([homekit docs]) +- Improve detection of entity names in templates ([@amelchio] - [#13432]) +- Add version bump script ([@balloob] - [#13447]) +- Add extra check for ESSID field in case there's a wired connection ([@Zepheus] - [#13459]) ([device_tracker docs]) +- Fix encoding errors in mikrotik device tracker ([@bdurrer] - [#13464]) ([device_tracker docs]) +- Hue: Convert XY to HS color if HS not present ([@balloob] - [#13465]) ([light.hue docs]) +- Fix ID (fixes #13444) ([@fabaff] - [#13471]) ([media_player.mpchc docs]) +- Upgrade aiohue and fix race condition ([@balloob] - [#13475]) ([hue docs]) +- version should contain just 'b' not 'beta' ([@balloob] - [#13476]) +- Fix Google Calendar caching when offline ([@PhilRW] - [#13375]) ([calendar.google docs]) +- Homekit: Bugfix Thermostat Fahrenheit support ([@cdce8p] - [#13477]) ([homekit docs]) +- Validate basic customize entries ([@cdce8p] - [#13478]) +- Homekit: Fix security systems ([@cdce8p] - [#13499]) ([homekit docs]) +- python-miio version bumped (Closes: 13449) ([@syssi] - [#13511]) ([fan.xiaomi_miio docs]) ([light.xiaomi_miio docs]) ([remote.xiaomi_miio docs]) ([sensor.xiaomi_miio docs]) ([switch.xiaomi_miio docs]) ([vacuum.xiaomi_miio docs]) +- Fix mysensors light supported features ([@MartinHjelmare] - [#13512]) ([light.mysensors docs]) +- Fix Insteon Leak Sensor ([@teharris1] - [#13515]) +- HomeKit: Fix setting light brightness ([@cdce8p] - [#13518]) ([homekit docs]) +- Construct version pinned ([@syssi] - [#13528]) ([climate.eq3btsmart docs]) ([fan.xiaomi_miio docs]) ([light.xiaomi_miio docs]) ([remote.xiaomi_miio docs]) ([sensor.eddystone_temperature docs]) ([sensor.xiaomi_miio docs]) ([switch.xiaomi_miio docs]) ([vacuum.xiaomi_miio docs]) +- Don't add Falsy items to list #13412 ([@kellerza] - [#13536]) +- Check whitelisted paths #13107 ([@kellerza] - [#13154]) +- Fix FLUX_LED error when no color is set ([@dramamoose] - [#13527]) ([light.flux_led docs]) [#11288]: https://github.com/home-assistant/home-assistant/pull/11288 +[#11980]: https://github.com/home-assistant/home-assistant/pull/11980 [#12115]: https://github.com/home-assistant/home-assistant/pull/12115 [#12157]: https://github.com/home-assistant/home-assistant/pull/12157 [#12289]: https://github.com/home-assistant/home-assistant/pull/12289 @@ -238,6 +272,7 @@ Experiencing issues introduced by this release? Please report them in our [issue [#13148]: https://github.com/home-assistant/home-assistant/pull/13148 [#13150]: https://github.com/home-assistant/home-assistant/pull/13150 [#13151]: https://github.com/home-assistant/home-assistant/pull/13151 +[#13154]: https://github.com/home-assistant/home-assistant/pull/13154 [#13156]: https://github.com/home-assistant/home-assistant/pull/13156 [#13163]: https://github.com/home-assistant/home-assistant/pull/13163 [#13164]: https://github.com/home-assistant/home-assistant/pull/13164 @@ -305,6 +340,7 @@ Experiencing issues introduced by this release? Please report them in our [issue [#13365]: https://github.com/home-assistant/home-assistant/pull/13365 [#13367]: https://github.com/home-assistant/home-assistant/pull/13367 [#13370]: https://github.com/home-assistant/home-assistant/pull/13370 +[#13375]: https://github.com/home-assistant/home-assistant/pull/13375 [#13376]: https://github.com/home-assistant/home-assistant/pull/13376 [#13379]: https://github.com/home-assistant/home-assistant/pull/13379 [#13380]: https://github.com/home-assistant/home-assistant/pull/13380 @@ -316,6 +352,28 @@ Experiencing issues introduced by this release? Please report them in our [issue [#13404]: https://github.com/home-assistant/home-assistant/pull/13404 [#13406]: https://github.com/home-assistant/home-assistant/pull/13406 [#13415]: https://github.com/home-assistant/home-assistant/pull/13415 +[#13423]: https://github.com/home-assistant/home-assistant/pull/13423 +[#13425]: https://github.com/home-assistant/home-assistant/pull/13425 +[#13429]: https://github.com/home-assistant/home-assistant/pull/13429 +[#13431]: https://github.com/home-assistant/home-assistant/pull/13431 +[#13432]: https://github.com/home-assistant/home-assistant/pull/13432 +[#13447]: https://github.com/home-assistant/home-assistant/pull/13447 +[#13459]: https://github.com/home-assistant/home-assistant/pull/13459 +[#13464]: https://github.com/home-assistant/home-assistant/pull/13464 +[#13465]: https://github.com/home-assistant/home-assistant/pull/13465 +[#13471]: https://github.com/home-assistant/home-assistant/pull/13471 +[#13475]: https://github.com/home-assistant/home-assistant/pull/13475 +[#13476]: https://github.com/home-assistant/home-assistant/pull/13476 +[#13477]: https://github.com/home-assistant/home-assistant/pull/13477 +[#13478]: https://github.com/home-assistant/home-assistant/pull/13478 +[#13499]: https://github.com/home-assistant/home-assistant/pull/13499 +[#13511]: https://github.com/home-assistant/home-assistant/pull/13511 +[#13512]: https://github.com/home-assistant/home-assistant/pull/13512 +[#13515]: https://github.com/home-assistant/home-assistant/pull/13515 +[#13518]: https://github.com/home-assistant/home-assistant/pull/13518 +[#13527]: https://github.com/home-assistant/home-assistant/pull/13527 +[#13528]: https://github.com/home-assistant/home-assistant/pull/13528 +[#13536]: https://github.com/home-assistant/home-assistant/pull/13536 [@BioSehnsucht]: https://github.com/BioSehnsucht [@DanNixon]: https://github.com/DanNixon [@FezVrasta]: https://github.com/FezVrasta @@ -324,15 +382,19 @@ Experiencing issues introduced by this release? Please report them in our [issue [@Kane610]: https://github.com/Kane610 [@MartinHjelmare]: https://github.com/MartinHjelmare [@OttoWinter]: https://github.com/OttoWinter +[@PH89]: https://github.com/PH89 [@PhilRW]: https://github.com/PhilRW [@Qxlkdr]: https://github.com/Qxlkdr [@ThomasSvedberg]: https://github.com/ThomasSvedberg +[@Zepheus]: https://github.com/Zepheus +[@a-andre]: https://github.com/a-andre [@a-wolter]: https://github.com/a-wolter [@amelchio]: https://github.com/amelchio [@andreipop2005]: https://github.com/andreipop2005 [@andrey-git]: https://github.com/andrey-git [@armills]: https://github.com/armills [@balloob]: https://github.com/balloob +[@bdurrer]: https://github.com/bdurrer [@c727]: https://github.com/c727 [@cburgess]: https://github.com/cburgess [@cdce8p]: https://github.com/cdce8p @@ -343,6 +405,7 @@ Experiencing issues introduced by this release? Please report them in our [issue [@danielperna84]: https://github.com/danielperna84 [@dgomes]: https://github.com/dgomes [@diminishedprime]: https://github.com/diminishedprime +[@dramamoose]: https://github.com/dramamoose [@engrbm87]: https://github.com/engrbm87 [@fabaff]: https://github.com/fabaff [@gerard33]: https://github.com/gerard33 @@ -372,109 +435,121 @@ Experiencing issues introduced by this release? Please report them in our [issue [@sjvc]: https://github.com/sjvc [@smurfix]: https://github.com/smurfix [@syssi]: https://github.com/syssi +[@teharris1]: https://github.com/teharris1 [@the-glu]: https://github.com/the-glu [@thrawnarn]: https://github.com/thrawnarn [@timmo001]: https://github.com/timmo001 [@turbokongen]: https://github.com/turbokongen [@uchagani]: https://github.com/uchagani [@vandenberghev]: https://github.com/vandenberghev -[alarm_control_panel.ifttt docs]: https://rc.home-assistant.io/components/alarm_control_panel.ifttt/ -[binary_sensor.bmw_connected_drive docs]: https://rc.home-assistant.io/components/binary_sensor.bmw_connected_drive/ -[binary_sensor.deconz docs]: https://rc.home-assistant.io/components/binary_sensor.deconz/ -[binary_sensor.mysensors docs]: https://rc.home-assistant.io/components/binary_sensor.mysensors/ -[binary_sensor.trend docs]: https://rc.home-assistant.io/components/binary_sensor.trend/ -[binary_sensor.workday docs]: https://rc.home-assistant.io/components/binary_sensor.workday/ -[bmw_connected_drive docs]: https://rc.home-assistant.io/components/bmw_connected_drive/ -[calendar.caldav docs]: https://rc.home-assistant.io/components/calendar.caldav/ -[calendar.todoist docs]: https://rc.home-assistant.io/components/calendar.todoist/ -[camera.onvif docs]: https://rc.home-assistant.io/components/camera.onvif/ -[camera.xeoma docs]: https://rc.home-assistant.io/components/camera.xeoma/ -[climate.ecobee docs]: https://rc.home-assistant.io/components/climate.ecobee/ -[climate.sensibo docs]: https://rc.home-assistant.io/components/climate.sensibo/ -[cloud docs]: https://rc.home-assistant.io/components/cloud/ -[cover.group docs]: https://rc.home-assistant.io/components/cover.group/ -[cover.template docs]: https://rc.home-assistant.io/components/cover.template/ -[deconz docs]: https://rc.home-assistant.io/components/deconz/ -[doorbird docs]: https://rc.home-assistant.io/components/doorbird/ -[downloader docs]: https://rc.home-assistant.io/components/downloader/ -[ecobee docs]: https://rc.home-assistant.io/components/ecobee/ -[fan.xiaomi_miio docs]: https://rc.home-assistant.io/components/fan.xiaomi_miio/ -[fan.zha docs]: https://rc.home-assistant.io/components/fan.zha/ -[hassio docs]: https://rc.home-assistant.io/components/hassio/ -[history docs]: https://rc.home-assistant.io/components/history/ -[homekit docs]: https://rc.home-assistant.io/components/homekit/ -[homematic docs]: https://rc.home-assistant.io/components/homematic/ -[homematicip docs]: https://rc.home-assistant.io/components/homematicip/ -[homematicip_cloud docs]: https://rc.home-assistant.io/components/homematicip_cloud/ -[http docs]: https://rc.home-assistant.io/components/http/ -[hue docs]: https://rc.home-assistant.io/components/hue/ -[image_processing.opencv docs]: https://rc.home-assistant.io/components/image_processing.opencv/ -[light docs]: https://rc.home-assistant.io/components/light/ -[light.deconz docs]: https://rc.home-assistant.io/components/light.deconz/ -[light.hue docs]: https://rc.home-assistant.io/components/light.hue/ -[light.iglo docs]: https://rc.home-assistant.io/components/light.iglo/ -[light.mysensors docs]: https://rc.home-assistant.io/components/light.mysensors/ -[light.mystrom docs]: https://rc.home-assistant.io/components/light.mystrom/ -[light.xiaomi_miio docs]: https://rc.home-assistant.io/components/light.xiaomi_miio/ -[light.zha docs]: https://rc.home-assistant.io/components/light.zha/ -[lock.bmw_connected_drive docs]: https://rc.home-assistant.io/components/lock.bmw_connected_drive/ -[lock.mqtt docs]: https://rc.home-assistant.io/components/lock.mqtt/ -[logbook docs]: https://rc.home-assistant.io/components/logbook/ -[media_extractor docs]: https://rc.home-assistant.io/components/media_extractor/ -[media_player.bluesound docs]: https://rc.home-assistant.io/components/media_player.bluesound/ -[media_player.cast docs]: https://rc.home-assistant.io/components/media_player.cast/ -[media_player.channels docs]: https://rc.home-assistant.io/components/media_player.channels/ -[media_player.kodi docs]: https://rc.home-assistant.io/components/media_player.kodi/ -[media_player.mediaroom docs]: https://rc.home-assistant.io/components/media_player.mediaroom/ -[media_player.philips_js docs]: https://rc.home-assistant.io/components/media_player.philips_js/ -[media_player.plex docs]: https://rc.home-assistant.io/components/media_player.plex/ -[media_player.songpal docs]: https://rc.home-assistant.io/components/media_player.songpal/ -[media_player.sonos docs]: https://rc.home-assistant.io/components/media_player.sonos/ -[media_player.spotify docs]: https://rc.home-assistant.io/components/media_player.spotify/ -[mqtt docs]: https://rc.home-assistant.io/components/mqtt/ -[mysensors docs]: https://rc.home-assistant.io/components/mysensors/ -[nest docs]: https://rc.home-assistant.io/components/nest/ -[notify docs]: https://rc.home-assistant.io/components/notify/ -[remote.xiaomi_miio docs]: https://rc.home-assistant.io/components/remote.xiaomi_miio/ -[scene.deconz docs]: https://rc.home-assistant.io/components/scene.deconz/ -[sensor.bmw_connected_drive docs]: https://rc.home-assistant.io/components/sensor.bmw_connected_drive/ -[sensor.crimereports docs]: https://rc.home-assistant.io/components/sensor.crimereports/ -[sensor.darksky docs]: https://rc.home-assistant.io/components/sensor.darksky/ -[sensor.deconz docs]: https://rc.home-assistant.io/components/sensor.deconz/ -[sensor.deutsche_bahn docs]: https://rc.home-assistant.io/components/sensor.deutsche_bahn/ -[sensor.filter docs]: https://rc.home-assistant.io/components/sensor.filter/ -[sensor.foobot docs]: https://rc.home-assistant.io/components/sensor.foobot/ -[sensor.glances docs]: https://rc.home-assistant.io/components/sensor.glances/ -[sensor.homematic docs]: https://rc.home-assistant.io/components/sensor.homematic/ -[sensor.homematicip docs]: https://rc.home-assistant.io/components/sensor.homematicip/ -[sensor.homematicip_cloud docs]: https://rc.home-assistant.io/components/sensor.homematicip_cloud/ -[sensor.lacrosse docs]: https://rc.home-assistant.io/components/sensor.lacrosse/ -[sensor.mqtt docs]: https://rc.home-assistant.io/components/sensor.mqtt/ -[sensor.mysensors docs]: https://rc.home-assistant.io/components/sensor.mysensors/ -[sensor.plex docs]: https://rc.home-assistant.io/components/sensor.plex/ -[sensor.smappee docs]: https://rc.home-assistant.io/components/sensor.smappee/ -[sensor.spotcrime docs]: https://rc.home-assistant.io/components/sensor.spotcrime/ -[sensor.sql docs]: https://rc.home-assistant.io/components/sensor.sql/ -[sensor.syncthru docs]: https://rc.home-assistant.io/components/sensor.syncthru/ -[sensor.systemmonitor docs]: https://rc.home-assistant.io/components/sensor.systemmonitor/ -[sensor.template docs]: https://rc.home-assistant.io/components/sensor.template/ -[sensor.tibber docs]: https://rc.home-assistant.io/components/sensor.tibber/ -[sensor.trafikverket_weatherstation docs]: https://rc.home-assistant.io/components/sensor.trafikverket_weatherstation/ -[sensor.vasttrafik docs]: https://rc.home-assistant.io/components/sensor.vasttrafik/ -[sensor.wunderground docs]: https://rc.home-assistant.io/components/sensor.wunderground/ -[sensor.xiaomi_miio docs]: https://rc.home-assistant.io/components/sensor.xiaomi_miio/ -[spc docs]: https://rc.home-assistant.io/components/spc/ -[switch.doorbird docs]: https://rc.home-assistant.io/components/switch.doorbird/ -[switch.edimax docs]: https://rc.home-assistant.io/components/switch.edimax/ -[switch.mqtt docs]: https://rc.home-assistant.io/components/switch.mqtt/ -[switch.vesync docs]: https://rc.home-assistant.io/components/switch.vesync/ -[switch.xiaomi_miio docs]: https://rc.home-assistant.io/components/switch.xiaomi_miio/ -[switch.zha docs]: https://rc.home-assistant.io/components/switch.zha/ -[telegram_bot docs]: https://rc.home-assistant.io/components/telegram_bot/ -[upcloud docs]: https://rc.home-assistant.io/components/upcloud/ -[vacuum.xiaomi_miio docs]: https://rc.home-assistant.io/components/vacuum.xiaomi_miio/ -[weather.darksky docs]: https://rc.home-assistant.io/components/weather.darksky/ -[websocket_api docs]: https://rc.home-assistant.io/components/websocket_api/ -[zeroconf docs]: https://rc.home-assistant.io/components/zeroconf/ -[zha docs]: https://rc.home-assistant.io/components/zha/ -[zwave docs]: https://rc.home-assistant.io/components/zwave/ +[alarm_control_panel.ifttt docs]: /components/alarm_control_panel.ifttt/ +[binary_sensor.bmw_connected_drive docs]: /components/binary_sensor.bmw_connected_drive/ +[binary_sensor.deconz docs]: /components/binary_sensor.deconz/ +[binary_sensor.mysensors docs]: /components/binary_sensor.mysensors/ +[binary_sensor.trend docs]: /components/binary_sensor.trend/ +[binary_sensor.workday docs]: /components/binary_sensor.workday/ +[bmw_connected_drive docs]: /components/bmw_connected_drive/ +[calendar.caldav docs]: /components/calendar.caldav/ +[calendar.google docs]: /components/calendar.google/ +[calendar.todoist docs]: /components/calendar.todoist/ +[camera.onvif docs]: /components/camera.onvif/ +[camera.xeoma docs]: /components/camera.xeoma/ +[climate.ecobee docs]: /components/climate.ecobee/ +[climate.eq3btsmart docs]: /components/climate.eq3btsmart/ +[climate.sensibo docs]: /components/climate.sensibo/ +[cloud docs]: /components/cloud/ +[cover.group docs]: /components/cover.group/ +[cover.template docs]: /components/cover.template/ +[deconz docs]: /components/deconz/ +[device_tracker docs]: /components/device_tracker/ +[doorbird docs]: /components/doorbird/ +[downloader docs]: /components/downloader/ +[ecobee docs]: /components/ecobee/ +[fan.xiaomi_miio docs]: /components/fan.xiaomi_miio/ +[fan.zha docs]: /components/fan.zha/ +[hassio docs]: /components/hassio/ +[history docs]: /components/history/ +[homekit docs]: /components/homekit/ +[homematic docs]: /components/homematic/ +[homematicip docs]: /components/homematicip/ +[homematicip_cloud docs]: /components/homematicip_cloud/ +[http docs]: /components/http/ +[hue docs]: /components/hue/ +[image_processing.opencv docs]: /components/image_processing.opencv/ +[light docs]: /components/light/ +[light.deconz docs]: /components/light.deconz/ +[light.flux_led docs]: /components/light.flux_led/ +[light.hue docs]: /components/light.hue/ +[light.hyperion docs]: /components/light.hyperion/ +[light.iglo docs]: /components/light.iglo/ +[light.limitlessled docs]: /components/light.limitlessled/ +[light.mysensors docs]: /components/light.mysensors/ +[light.mystrom docs]: /components/light.mystrom/ +[light.xiaomi_miio docs]: /components/light.xiaomi_miio/ +[light.zha docs]: /components/light.zha/ +[lock docs]: /components/lock/ +[lock.bmw_connected_drive docs]: /components/lock.bmw_connected_drive/ +[lock.homematic docs]: /components/lock.homematic/ +[lock.mqtt docs]: /components/lock.mqtt/ +[logbook docs]: /components/logbook/ +[media_extractor docs]: /components/media_extractor/ +[media_player.bluesound docs]: /components/media_player.bluesound/ +[media_player.cast docs]: /components/media_player.cast/ +[media_player.channels docs]: /components/media_player.channels/ +[media_player.kodi docs]: /components/media_player.kodi/ +[@NovapaX]: https://github.com/NovapaX +[media_player.mediaroom docs]: /components/media_player.mediaroom/ +[media_player.mpchc docs]: /components/media_player.mpchc/ +[media_player.philips_js docs]: /components/media_player.philips_js/ +[media_player.plex docs]: /components/media_player.plex/ +[media_player.songpal docs]: /components/media_player.songpal/ +[media_player.sonos docs]: /components/media_player.sonos/ +[media_player.spotify docs]: /components/media_player.spotify/ +[mqtt docs]: /components/mqtt/ +[mysensors docs]: /components/mysensors/ +[nest docs]: /components/nest/ +[notify docs]: /components/notify/ +[remote.xiaomi_miio docs]: /components/remote.xiaomi_miio/ +[scene.deconz docs]: /components/scene.deconz/ +[sensor.bmw_connected_drive docs]: /components/sensor.bmw_connected_drive/ +[sensor.crimereports docs]: /components/sensor.crimereports/ +[sensor.darksky docs]: /components/sensor.darksky/ +[sensor.deconz docs]: /components/sensor.deconz/ +[sensor.deutsche_bahn docs]: /components/sensor.deutsche_bahn/ +[sensor.eddystone_temperature docs]: /components/sensor.eddystone_temperature/ +[sensor.filter docs]: /components/sensor.filter/ +[sensor.foobot docs]: /components/sensor.foobot/ +[sensor.glances docs]: /components/sensor.glances/ +[sensor.homematic docs]: /components/sensor.homematic/ +[sensor.homematicip docs]: /components/sensor.homematicip/ +[sensor.homematicip_cloud docs]: /components/sensor.homematicip_cloud/ +[sensor.lacrosse docs]: /components/sensor.lacrosse/ +[sensor.mqtt docs]: /components/sensor.mqtt/ +[sensor.mysensors docs]: /components/sensor.mysensors/ +[sensor.plex docs]: /components/sensor.plex/ +[sensor.smappee docs]: /components/sensor.smappee/ +[sensor.spotcrime docs]: /components/sensor.spotcrime/ +[sensor.sql docs]: /components/sensor.sql/ +[sensor.syncthru docs]: /components/sensor.syncthru/ +[sensor.systemmonitor docs]: /components/sensor.systemmonitor/ +[sensor.template docs]: /components/sensor.template/ +[sensor.tibber docs]: /components/sensor.tibber/ +[sensor.trafikverket_weatherstation docs]: /components/sensor.trafikverket_weatherstation/ +[sensor.vasttrafik docs]: /components/sensor.vasttrafik/ +[sensor.wunderground docs]: /components/sensor.wunderground/ +[sensor.xiaomi_miio docs]: /components/sensor.xiaomi_miio/ +[spc docs]: /components/spc/ +[switch.doorbird docs]: /components/switch.doorbird/ +[switch.edimax docs]: /components/switch.edimax/ +[switch.mqtt docs]: /components/switch.mqtt/ +[switch.vesync docs]: /components/switch.vesync/ +[switch.xiaomi_miio docs]: /components/switch.xiaomi_miio/ +[switch.zha docs]: /components/switch.zha/ +[telegram_bot docs]: /components/telegram_bot/ +[upcloud docs]: /components/upcloud/ +[vacuum.xiaomi_miio docs]: /components/vacuum.xiaomi_miio/ +[weather.darksky docs]: /components/weather.darksky/ +[websocket_api docs]: /components/websocket_api/ +[zeroconf docs]: /components/zeroconf/ +[zha docs]: /components/zha/ +[zwave docs]: /components/zwave/ diff --git a/source/images/blog/2018-03-0.66/components.png b/source/images/blog/2018-03-0.66/components.png new file mode 100644 index 0000000000000000000000000000000000000000..890a4b8512f8d0ddf9d4cb1e69c61ef999cbdec5 GIT binary patch literal 30754 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

    sAS~wy95#987Yuf3~J~q6E8^I?f(pN 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 Y;jGN+&IC`srsM!9%WKG0$yfyce?DTV!~g&Q literal 0 HcmV?d00001 From 88772ebf1c28c85f048a9c06ac51ae6fcde9aa8e Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Fri, 30 Mar 2018 15:22:05 -0700 Subject: [PATCH 732/993] Update title --- source/_posts/2018-03-30-release-66.markdown | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/_posts/2018-03-30-release-66.markdown b/source/_posts/2018-03-30-release-66.markdown index 3f75c8cf6e..787e60b074 100644 --- a/source/_posts/2018-03-30-release-66.markdown +++ b/source/_posts/2018-03-30-release-66.markdown @@ -1,7 +1,7 @@ --- layout: post -title: "0.66: ...." -description: "...." +title: "0.66: VeSync switches, HomematicIP, and a group cover." +description: "Fabulous release 0.66 has landed! Tons of fixes, improvements and joy." date: 2018-03-30 00:01:00 date_formatted: "March 30, 2018" author: Paulus Schoutsen From 2dd0fee2356f8a73c114fcbdafc7fd0895e9fd29 Mon Sep 17 00:00:00 2001 From: Carlo Costanzo Date: Fri, 30 Mar 2018 20:03:05 -0400 Subject: [PATCH 733/993] Updated with 0.66 changes. allow_in_emulated_hue has been removed. --- source/_components/hue.markdown | 1 - 1 file changed, 1 deletion(-) diff --git a/source/_components/hue.markdown b/source/_components/hue.markdown index fb73a05824..c0bda3fa14 100644 --- a/source/_components/hue.markdown +++ b/source/_components/hue.markdown @@ -36,7 +36,6 @@ Configuration variables: - **host** (*Optional*): IP address of the device, eg. 192.168.1.10. Required if not using the `discovery` component to discover Hue bridges. - **allow_unreachable** (*Optional*): (true/false) This will allow unreachable bulbs to report their state correctly. - **filename** (*Optional*): Make this unique if specifying multiple Hue hubs. -- **allow_in_emulated_hue** (*Optional*): (true/false) Enable this to block all Hue entities from being added to the `emulated_hue` component. - **allow_hue_groups** (*Optional*): (true/false) Enable this to stop Home Assistant from importing the groups defined on the Hue bridge. ### {% linkable_title Migrating from older configuration %} From 477e77dfa15137d795603453d73794b4090b2216 Mon Sep 17 00:00:00 2001 From: eltoro81 <34924009+eltoro81@users.noreply.github.com> Date: Sat, 31 Mar 2018 09:52:53 +0200 Subject: [PATCH 734/993] Update sensor.trafikverket_weatherstation.markdown Sensor name incorrect. Should be singul not plural --- .../_components/sensor.trafikverket_weatherstation.markdown | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/source/_components/sensor.trafikverket_weatherstation.markdown b/source/_components/sensor.trafikverket_weatherstation.markdown index 76885964f3..272c4e0994 100644 --- a/source/_components/sensor.trafikverket_weatherstation.markdown +++ b/source/_components/sensor.trafikverket_weatherstation.markdown @@ -25,7 +25,7 @@ To enable this sensor, add the following lines to your `configuration.yaml`. ```yaml sensor: - - platform: trafikverket_weatherstations + - platform: trafikverket_weatherstation name: Trafikverket Road WeatherStation Kungälv api_key: eXXcbXXXacXXXXc39XX3aXXX4aXX46XX station: Kungälv @@ -72,12 +72,12 @@ Click [here](https://www.trafikverket.se/trafikinformation/vag/?TrafficType=pers ```yaml sensor: - - platform: trafikverket_weatherstations + - platform: trafikverket_weatherstation name: Trafikverket Road WeatherStation Kungälv api_key: eXXcbXXXacXXXXc39XX3aXXX4aXX46XX station: Kungälv type: road - - platform: trafikverket_weatherstations + - platform: trafikverket_weatherstation name: Trafikverket Air WeatherStation Lanna api_key: eXXcbXXXacXXXXc39XX3aXXX4aXX46XX station: Lanna From 690bd22f8abb48d7e569bfbadaaa0fe4ff656b71 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Sat, 31 Mar 2018 11:04:59 +0200 Subject: [PATCH 735/993] Update --- source/_docs/frontend/browsers.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_docs/frontend/browsers.markdown b/source/_docs/frontend/browsers.markdown index 611b8586ae..2454f5989a 100644 --- a/source/_docs/frontend/browsers.markdown +++ b/source/_docs/frontend/browsers.markdown @@ -37,7 +37,7 @@ We would appreciate if you help to keep this page up-to-date and add feedback. | Browser | Release | State | Comments | | :-------------------- |:---------------|:-----------|:-------------------------| -| [Firefox] | 57.0 | works | | +| [Firefox] | 59.0 | works | | | [Midori] | 0.5.11 | works | | | [Chromium] | 63.0.3239.108 | works | | | [Conkeror] | 1.0.2 | works | | From e2b5ee1364f5a6458c10693d1bedd64047a70568 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Sat, 31 Mar 2018 11:06:35 +0200 Subject: [PATCH 736/993] Update for 0.66 --- source/developers/credits.markdown | 156 +++++++++++++++-------------- 1 file changed, 79 insertions(+), 77 deletions(-) diff --git a/source/developers/credits.markdown b/source/developers/credits.markdown index b598247cb4..43a2ec0dea 100644 --- a/source/developers/credits.markdown +++ b/source/developers/credits.markdown @@ -2,7 +2,7 @@ layout: page title: "Credits" description: "Credits for the developers who contributed to Home Assistant." -date: 2018-03-22 07:54:30 +0000 +date: 2018-03-31 09:06:17 +0000 sidebar: true comments: false sharing: true @@ -13,13 +13,14 @@ This page contains a list of people who have contributed in one way or another t ### {% linkable_title Author %} -- [Paulus Schoutsen (@balloob)](https://github.com/balloob "6452 total commits to the home-assistant organization, 3798 commits to home-assistant, 1404 commits to home-assistant.github.io, 742 commits to home-assistant-polymer, 244 commits to home-assistant-js, 122 commits to netdisco, 46 commits to home-assistant-js-websocket, 28 commits to hass-release, 17 commits to LabelBot, 15 commits to home-assistant-assets, 8 commits to example-custom-config, 7 commits to micropython-home-assistant, 5 commits to hassio, 3 commits to hassio-addons, 2 commits to lambda-home-assistant-github, 2 commits to issue-bot, 2 commits to hassio-addons-example, 2 commits to hassio-build, 2 commits to home-assistant-iOS, 1 commit to warrant, 1 commit to home-assistant-notebooks, 1 commit to architecture") +- [Paulus Schoutsen (@balloob)](https://github.com/balloob "6522 total commits to the home-assistant organization, 3835 commits to home-assistant, 1426 commits to home-assistant.github.io, 750 commits to home-assistant-polymer, 244 commits to home-assistant-js, 122 commits to netdisco, 46 commits to home-assistant-js-websocket, 31 commits to hass-release, 17 commits to LabelBot, 15 commits to home-assistant-assets, 8 commits to example-custom-config, 7 commits to micropython-home-assistant, 5 commits to hassio, 3 commits to hassio-addons, 2 commits to issue-bot, 2 commits to hassio-build, 2 commits to hassio-addons-example, 2 commits to home-assistant-iOS, 2 commits to lambda-home-assistant-github, 1 commit to home-assistant-notebooks, 1 commit to warrant, 1 commit to architecture") ### {% linkable_title Contributors %} (in alphabetical order) - [7even (@hwikene)](https://github.com/hwikene "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") +- [a-andre (@a-andre)](https://github.com/a-andre "3 total commits to the home-assistant organization, 3 commits to home-assistant") - [Aaron Bach (@bachya)](https://github.com/bachya "49 total commits to the home-assistant organization, 32 commits to home-assistant, 17 commits to home-assistant.github.io") - [Aaron Linville (@linville)](https://github.com/linville "2 total commits to the home-assistant organization, 2 commits to appdaemon") - [Abílio Costa (@abmantis)](https://github.com/abmantis "22 total commits to the home-assistant organization, 13 commits to home-assistant, 5 commits to home-assistant.github.io, 2 commits to home-assistant-polymer, 1 commit to home-assistant-js-websocket, 1 commit to netdisco") @@ -27,7 +28,7 @@ This page contains a list of people who have contributed in one way or another t - [Adam Baxter (@voltagex)](https://github.com/voltagex "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") - [Adam Cooper (@GenericStudent)](https://github.com/GenericStudent "11 total commits to the home-assistant organization, 8 commits to home-assistant, 3 commits to home-assistant.github.io") - [Adam Dullage (@Dullage)](https://github.com/Dullage "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") -- [Adam Mills (@armills)](https://github.com/armills "314 total commits to the home-assistant organization, 163 commits to home-assistant, 90 commits to home-assistant-polymer, 57 commits to home-assistant.github.io, 3 commits to home-assistant-js, 1 commit to homebridge-homeassistant") +- [Adam Mills (@armills)](https://github.com/armills "315 total commits to the home-assistant organization, 164 commits to home-assistant, 90 commits to home-assistant-polymer, 57 commits to home-assistant.github.io, 3 commits to home-assistant-js, 1 commit to homebridge-homeassistant") - [Adrian Popa (@mad-ady)](https://github.com/mad-ady "5 total commits to the home-assistant organization, 4 commits to appdaemon, 1 commit to home-assistant-polymer") - [Adrien Ball (@adrienball)](https://github.com/adrienball "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Adrien Brault (@adrienbrault)](https://github.com/adrienbrault "2 total commits to the home-assistant organization, 2 commits to home-assistant") @@ -36,10 +37,10 @@ This page contains a list of people who have contributed in one way or another t - [akloeckner (@akloeckner)](https://github.com/akloeckner "3 total commits to the home-assistant organization, 3 commits to home-assistant") - [Alan Bowman (@alanbowman)](https://github.com/alanbowman "4 total commits to the home-assistant organization, 4 commits to home-assistant") - [Alan Fischer (@alanfischer)](https://github.com/alanfischer "20 total commits to the home-assistant organization, 16 commits to home-assistant, 4 commits to home-assistant.github.io") -- [Alan Tse (@alandtse)](https://github.com/alandtse "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") +- [Alan Tse (@alandtse)](https://github.com/alandtse "4 total commits to the home-assistant organization, 2 commits to home-assistant, 2 commits to home-assistant.github.io") - [Alasdair Nicol (@alasdairnicol)](https://github.com/alasdairnicol "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [Albatross (@DyingAlbatross)](https://github.com/DyingAlbatross "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") -- [Albert Lee (@trisk)](https://github.com/trisk "15 total commits to the home-assistant organization, 10 commits to home-assistant, 5 commits to home-assistant.github.io") +- [Albert Lee (@trisk)](https://github.com/trisk "16 total commits to the home-assistant organization, 11 commits to home-assistant, 5 commits to home-assistant.github.io") - [Alberto Arias Maestro (@albertoarias)](https://github.com/albertoarias "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Alessandro Mogavero (@alexmogavero)](https://github.com/alexmogavero "3 total commits to the home-assistant organization, 3 commits to home-assistant") - [Alex (@asbach)](https://github.com/asbach "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") @@ -54,10 +55,10 @@ This page contains a list of people who have contributed in one way or another t - [Alexis Iglauer (@ax42)](https://github.com/ax42 "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [Alfie Day (@Azelphur)](https://github.com/Azelphur "12 total commits to the home-assistant organization, 12 commits to home-assistant") - [Aliaksandr (@minchik)](https://github.com/minchik "7 total commits to the home-assistant organization, 3 commits to home-assistant.github.io, 2 commits to appdaemon, 2 commits to home-assistant") -- [Alok Saboo (@arsaboo)](https://github.com/arsaboo "140 total commits to the home-assistant organization, 81 commits to home-assistant.github.io, 53 commits to home-assistant, 4 commits to home-assistant-polymer, 1 commit to pi-gen, 1 commit to hassio-addons") +- [Alok Saboo (@arsaboo)](https://github.com/arsaboo "141 total commits to the home-assistant organization, 82 commits to home-assistant.github.io, 53 commits to home-assistant, 4 commits to home-assistant-polymer, 1 commit to pi-gen, 1 commit to hassio-addons") - [amorsillo (@AndrewMorsillo)](https://github.com/AndrewMorsillo "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") - [Anders Fogh Eriksen (@Fogh)](https://github.com/Fogh "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") -- [Anders Melchiorsen (@amelchio)](https://github.com/amelchio "198 total commits to the home-assistant organization, 155 commits to home-assistant, 41 commits to home-assistant.github.io, 2 commits to home-assistant-polymer") +- [Anders Melchiorsen (@amelchio)](https://github.com/amelchio "208 total commits to the home-assistant organization, 165 commits to home-assistant, 41 commits to home-assistant.github.io, 2 commits to home-assistant-polymer") - [andig (@andig)](https://github.com/andig "1 total commits to the home-assistant organization, 1 commit to pi-gen") - [Andrea Campi (@andreacampi)](https://github.com/andreacampi "8 total commits to the home-assistant organization, 6 commits to home-assistant, 2 commits to home-assistant.github.io") - [Andrea Falcone (@asfalcone)](https://github.com/asfalcone "5 total commits to the home-assistant organization, 5 commits to issue-bot") @@ -70,17 +71,17 @@ This page contains a list of people who have contributed in one way or another t - [Andrej Friesen (@ajfriesen)](https://github.com/ajfriesen "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [Andrew (@aneisch)](https://github.com/aneisch "5 total commits to the home-assistant organization, 5 commits to home-assistant.github.io") - [Andrew (@aoakeson)](https://github.com/aoakeson "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") -- [Andrew Cockburn (@acockburn)](https://github.com/acockburn "795 total commits to the home-assistant organization, 660 commits to appdaemon, 88 commits to hadashboard, 25 commits to scenegen, 22 commits to home-assistant.github.io") +- [Andrew Cockburn (@acockburn)](https://github.com/acockburn "802 total commits to the home-assistant organization, 667 commits to appdaemon, 88 commits to hadashboard, 25 commits to scenegen, 22 commits to home-assistant.github.io") - [Andrew Smith (@andrewmichaelsmith)](https://github.com/andrewmichaelsmith "2 total commits to the home-assistant organization, 2 commits to pi-gen") - [Andrew Stock (@watchforstock)](https://github.com/watchforstock "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Andrew Thigpen (@andythigpen)](https://github.com/andythigpen "33 total commits to the home-assistant organization, 32 commits to home-assistant, 1 commit to home-assistant-js") - [Andrew Wedgbury (@sconemad)](https://github.com/sconemad "1 total commits to the home-assistant organization, 1 commit to pi-gen") - [andrew-curtis (@andrew-curtis)](https://github.com/andrew-curtis "7 total commits to the home-assistant organization, 7 commits to home-assistant.github.io") -- [Andrey (@andrey-git)](https://github.com/andrey-git "293 total commits to the home-assistant organization, 134 commits to home-assistant-polymer, 121 commits to home-assistant, 37 commits to home-assistant.github.io, 1 commit to home-assistant-js-websocket") +- [Andrey (@andrey-git)](https://github.com/andrey-git "294 total commits to the home-assistant organization, 134 commits to home-assistant-polymer, 122 commits to home-assistant, 37 commits to home-assistant.github.io, 1 commit to home-assistant-js-websocket") - [Andrey Kupreychik (@foxel)](https://github.com/foxel "9 total commits to the home-assistant organization, 6 commits to home-assistant, 3 commits to home-assistant.github.io") - [Andrzej (@andriej)](https://github.com/andriej "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [Andréas Lundgren (@adevade)](https://github.com/adevade "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") -- [Andy Castille (@Klikini)](https://github.com/Klikini "12 total commits to the home-assistant organization, 8 commits to home-assistant, 4 commits to home-assistant.github.io") +- [Andy Castille (@Klikini)](https://github.com/Klikini "14 total commits to the home-assistant organization, 9 commits to home-assistant, 5 commits to home-assistant.github.io") - [anotherthomas (@anotherthomas)](https://github.com/anotherthomas "1 total commits to the home-assistant organization, 1 commit to hassio-addons") - [Anthony Arnaud (@aarnaud)](https://github.com/aarnaud "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Anthony Hughes (@tony2nite)](https://github.com/tony2nite "1 total commits to the home-assistant organization, 1 commit to netdisco") @@ -115,7 +116,7 @@ This page contains a list of people who have contributed in one way or another t - [bastshoes (@bastshoes)](https://github.com/bastshoes "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") - [battistaar (@battistaar)](https://github.com/battistaar "1 total commits to the home-assistant organization, 1 commit to homebridge-homeassistant") - [bcl1713 (@bcl1713)](https://github.com/bcl1713 "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") -- [Beat (@bdurrer)](https://github.com/bdurrer "11 total commits to the home-assistant organization, 10 commits to home-assistant.github.io, 1 commit to home-assistant-polymer") +- [Beat (@bdurrer)](https://github.com/bdurrer "14 total commits to the home-assistant organization, 10 commits to home-assistant.github.io, 3 commits to home-assistant, 1 commit to home-assistant-polymer") - [Ben (@unixben)](https://github.com/unixben "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [Ben Bangert (@bbangert)](https://github.com/bbangert "4 total commits to the home-assistant organization, 4 commits to home-assistant") - [Ben Doerr (@bendoerr)](https://github.com/bendoerr "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") @@ -164,19 +165,21 @@ This page contains a list of people who have contributed in one way or another t - [Bruno Adele (@badele)](https://github.com/badele "22 total commits to the home-assistant organization, 22 commits to home-assistant") - [Bruno Binet (@bbinet)](https://github.com/bbinet "1 total commits to the home-assistant organization, 1 commit to hassio-build") - [Bryce Edwards (@hoopty)](https://github.com/hoopty "5 total commits to the home-assistant organization, 3 commits to home-assistant, 2 commits to home-assistant.github.io") -- [c727 (@c727)](https://github.com/c727 "57 total commits to the home-assistant organization, 39 commits to home-assistant-polymer, 12 commits to home-assistant.github.io, 4 commits to home-assistant, 2 commits to hassio") +- [bvansambeek (@bvansambeek)](https://github.com/bvansambeek "1 total commits to the home-assistant organization, 1 commit to hassio-build") +- [c727 (@c727)](https://github.com/c727 "61 total commits to the home-assistant organization, 41 commits to home-assistant-polymer, 13 commits to home-assistant.github.io, 5 commits to home-assistant, 2 commits to hassio") - [Caius Cioran (@caiuspb)](https://github.com/caiuspb "3 total commits to the home-assistant organization, 3 commits to home-assistant") - [Caleb (@finish06)](https://github.com/finish06 "7 total commits to the home-assistant organization, 7 commits to home-assistant") - [Cameron Bulock (@cbulock)](https://github.com/cbulock "5 total commits to the home-assistant organization, 2 commits to home-assistant, 2 commits to home-assistant.github.io, 1 commit to netdisco") - [Cameron Moore (@moorereason)](https://github.com/moorereason "3 total commits to the home-assistant organization, 3 commits to hassio-cli") -- [Carlo Costanzo (@CCOSTAN)](https://github.com/CCOSTAN "95 total commits to the home-assistant organization, 87 commits to home-assistant.github.io, 5 commits to home-assistant, 1 commit to hassbian-scripts, 1 commit to homebridge-homeassistant, 1 commit to fabric-home-assistant") +- [Carlo Costanzo (@CCOSTAN)](https://github.com/CCOSTAN "96 total commits to the home-assistant organization, 88 commits to home-assistant.github.io, 5 commits to home-assistant, 1 commit to fabric-home-assistant, 1 commit to homebridge-homeassistant, 1 commit to hassbian-scripts") - [carlosmgr (@carlosmgr)](https://github.com/carlosmgr "6 total commits to the home-assistant organization, 6 commits to home-assistant") - [Carter (@BluGeni)](https://github.com/BluGeni "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") -- [cdce8p (@cdce8p)](https://github.com/cdce8p "56 total commits to the home-assistant organization, 31 commits to home-assistant, 21 commits to home-assistant.github.io, 4 commits to home-assistant-polymer") +- [cdce8p (@cdce8p)](https://github.com/cdce8p "69 total commits to the home-assistant organization, 43 commits to home-assistant, 22 commits to home-assistant.github.io, 4 commits to home-assistant-polymer") - [Cecron (@Cecron)](https://github.com/Cecron "1 total commits to the home-assistant organization, 1 commit to appdaemon") +- [Cedric Van Goethem (@Zepheus)](https://github.com/Zepheus "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Cenk Gündoğan (@cgundogan)](https://github.com/cgundogan "1 total commits to the home-assistant organization, 1 commit to libcoap") - [Cezar Sá Espinola (@cezarsa)](https://github.com/cezarsa "2 total commits to the home-assistant organization, 2 commits to home-assistant") -- [cgtobi (@cgtobi)](https://github.com/cgtobi "23 total commits to the home-assistant organization, 14 commits to home-assistant, 9 commits to home-assistant.github.io") +- [cgtobi (@cgtobi)](https://github.com/cgtobi "26 total commits to the home-assistant organization, 16 commits to home-assistant, 10 commits to home-assistant.github.io") - [chanders (@chanders)](https://github.com/chanders "2 total commits to the home-assistant organization, 2 commits to hadashboard") - [Charles Blonde (@CharlesBlonde)](https://github.com/CharlesBlonde "19 total commits to the home-assistant organization, 12 commits to home-assistant, 7 commits to home-assistant.github.io") - [Charles Garwood (@cgarwood)](https://github.com/cgarwood "17 total commits to the home-assistant organization, 11 commits to home-assistant.github.io, 6 commits to home-assistant") @@ -197,7 +200,7 @@ This page contains a list of people who have contributed in one way or another t - [Christian Brædstrup (@LinuxChristian)](https://github.com/LinuxChristian "8 total commits to the home-assistant organization, 8 commits to home-assistant") - [Christian Lasarczyk (@ChrisLasar)](https://github.com/ChrisLasar "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [Christian Studer (@cstuder)](https://github.com/cstuder "4 total commits to the home-assistant organization, 4 commits to home-assistant.github.io") -- [ChristianKuehnel (@ChristianKuehnel)](https://github.com/ChristianKuehnel "30 total commits to the home-assistant organization, 18 commits to home-assistant, 12 commits to home-assistant.github.io") +- [ChristianKuehnel (@ChristianKuehnel)](https://github.com/ChristianKuehnel "33 total commits to the home-assistant organization, 20 commits to home-assistant, 13 commits to home-assistant.github.io") - [Christoffer Kylvåg (@christoe)](https://github.com/christoe "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [Christoph Wagner (@Christoph-Wagner)](https://github.com/Christoph-Wagner "4 total commits to the home-assistant organization, 4 commits to home-assistant.github.io") - [Christopher Vella (@chrisvella)](https://github.com/chrisvella "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") @@ -211,7 +214,7 @@ This page contains a list of people who have contributed in one way or another t - [Claus F. Strasburger (@cfstras)](https://github.com/cfstras "5 total commits to the home-assistant organization, 5 commits to pi-gen") - [cogneato (@cogneato)](https://github.com/cogneato "15 total commits to the home-assistant organization, 15 commits to home-assistant.github.io") - [Colin Dunn (@colindunn)](https://github.com/colindunn "2 total commits to the home-assistant organization, 2 commits to home-assistant") -- [Colin O'Dell (@colinodell)](https://github.com/colinodell "24 total commits to the home-assistant organization, 13 commits to home-assistant, 11 commits to home-assistant.github.io") +- [Colin O'Dell (@colinodell)](https://github.com/colinodell "26 total commits to the home-assistant organization, 15 commits to home-assistant, 11 commits to home-assistant.github.io") - [Colin Teubner (@netopiax)](https://github.com/netopiax "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [Conrad Juhl Andersen (@cnrd)](https://github.com/cnrd "7 total commits to the home-assistant organization, 4 commits to home-assistant, 3 commits to home-assistant.github.io") - [Constantine Grantcharov (@conz27)](https://github.com/conz27 "1 total commits to the home-assistant organization, 1 commit to libcoap") @@ -222,13 +225,13 @@ This page contains a list of people who have contributed in one way or another t - [Craig J. Ward (@wardcraigj)](https://github.com/wardcraigj "27 total commits to the home-assistant organization, 20 commits to home-assistant, 7 commits to home-assistant.github.io") - [CTLS (@CTLS)](https://github.com/CTLS "3 total commits to the home-assistant organization, 3 commits to home-assistant") - [CV (@dagobert)](https://github.com/dagobert "4 total commits to the home-assistant organization, 4 commits to home-assistant.github.io") -- [cxlwill (@cxlwill)](https://github.com/cxlwill "2 total commits to the home-assistant organization, 2 commits to home-assistant-polymer") -- [Dale Higgs (@dale3h)](https://github.com/dale3h "34 total commits to the home-assistant organization, 22 commits to home-assistant.github.io, 10 commits to home-assistant, 1 commit to hassbot, 1 commit to homebridge-homeassistant") +- [cxlwill (@cxlwill)](https://github.com/cxlwill "3 total commits to the home-assistant organization, 2 commits to home-assistant-polymer, 1 commit to hassbian-scripts") +- [Dale Higgs (@dale3h)](https://github.com/dale3h "35 total commits to the home-assistant organization, 23 commits to home-assistant.github.io, 10 commits to home-assistant, 1 commit to hassbot, 1 commit to homebridge-homeassistant") - [Dan (@danieljkemp)](https://github.com/danieljkemp "23 total commits to the home-assistant organization, 16 commits to home-assistant, 7 commits to home-assistant.github.io") - [Dan Chen (@djchen)](https://github.com/djchen "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Dan Cinnamon (@Cinntax)](https://github.com/Cinntax "17 total commits to the home-assistant organization, 14 commits to home-assistant, 3 commits to home-assistant.github.io") - [Dan Faulknor (@danielfaulknor)](https://github.com/danielfaulknor "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") -- [Dan Nixon (@DanNixon)](https://github.com/DanNixon "23 total commits to the home-assistant organization, 18 commits to home-assistant, 5 commits to home-assistant.github.io") +- [Dan Nixon (@DanNixon)](https://github.com/DanNixon "25 total commits to the home-assistant organization, 19 commits to home-assistant, 6 commits to home-assistant.github.io") - [Dan Ports (@drkp)](https://github.com/drkp "4 total commits to the home-assistant organization, 4 commits to home-assistant") - [Dan Sarginson (@dansarginson)](https://github.com/dansarginson "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Dan Smith (@kk7ds)](https://github.com/kk7ds "84 total commits to the home-assistant organization, 68 commits to home-assistant, 14 commits to home-assistant.github.io, 2 commits to home-assistant-polymer") @@ -258,7 +261,7 @@ This page contains a list of people who have contributed in one way or another t - [David De Sloovere (@DavidDeSloovere)](https://github.com/DavidDeSloovere "16 total commits to the home-assistant organization, 16 commits to home-assistant.github.io") - [David Fiel (@dfiel)](https://github.com/dfiel "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [David Grant (@davegravy)](https://github.com/davegravy "6 total commits to the home-assistant organization, 4 commits to home-assistant.github.io, 2 commits to home-assistant") -- [David McNett (@nugget)](https://github.com/nugget "10 total commits to the home-assistant organization, 5 commits to home-assistant, 5 commits to home-assistant.github.io") +- [David McNett (@nugget)](https://github.com/nugget "10 total commits to the home-assistant organization, 5 commits to home-assistant.github.io, 5 commits to home-assistant") - [David Ohayon (@ohayon)](https://github.com/ohayon "3 total commits to the home-assistant organization, 3 commits to issue-bot") - [David Straub (@DavidMStraub)](https://github.com/DavidMStraub "9 total commits to the home-assistant organization, 5 commits to home-assistant, 4 commits to home-assistant.github.io") - [David Wang (@dcwangmit01)](https://github.com/dcwangmit01 "2 total commits to the home-assistant organization, 2 commits to pi-gen") @@ -278,13 +281,13 @@ This page contains a list of people who have contributed in one way or another t - [dersger (@dersger)](https://github.com/dersger "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") - [devdelay (@devdelay)](https://github.com/devdelay "16 total commits to the home-assistant organization, 7 commits to home-assistant.github.io, 5 commits to home-assistant, 4 commits to homebridge-homeassistant") - [Devon Peet (@dpeet)](https://github.com/dpeet "5 total commits to the home-assistant organization, 5 commits to home-assistant.github.io") -- [Diogo Gomes (@dgomes)](https://github.com/dgomes "38 total commits to the home-assistant organization, 23 commits to home-assistant, 15 commits to home-assistant.github.io") +- [Diogo Gomes (@dgomes)](https://github.com/dgomes "41 total commits to the home-assistant organization, 23 commits to home-assistant, 18 commits to home-assistant.github.io") - [DoloresHA (@DoloresHA)](https://github.com/DoloresHA "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [Domantas (@Dohxis)](https://github.com/Dohxis "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") - [Dougal Matthews (@d0ugal)](https://github.com/d0ugal "5 total commits to the home-assistant organization, 3 commits to home-assistant, 2 commits to home-assistant.github.io") -- [dramamoose (@dramamoose)](https://github.com/dramamoose "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") +- [dramamoose (@dramamoose)](https://github.com/dramamoose "7 total commits to the home-assistant organization, 4 commits to home-assistant, 3 commits to home-assistant.github.io") - [DrewSK (@dzsquared)](https://github.com/dzsquared "8 total commits to the home-assistant organization, 8 commits to home-assistant.github.io") -- [DubhAd (@DubhAd)](https://github.com/DubhAd "195 total commits to the home-assistant organization, 195 commits to home-assistant.github.io") +- [DubhAd (@DubhAd)](https://github.com/DubhAd "217 total commits to the home-assistant organization, 217 commits to home-assistant.github.io") - [Duoxilian (@Duoxilian)](https://github.com/Duoxilian "11 total commits to the home-assistant organization, 6 commits to home-assistant.github.io, 5 commits to home-assistant") - [ebpetway (@ebpetway)](https://github.com/ebpetway "55 total commits to the home-assistant organization, 55 commits to warrant") - [Edwin Smulders (@Dutchy-)](https://github.com/Dutchy- "4 total commits to the home-assistant organization, 2 commits to home-assistant, 2 commits to home-assistant.github.io") @@ -300,14 +303,15 @@ This page contains a list of people who have contributed in one way or another t - [Eric Oosting (@eoosting)](https://github.com/eoosting "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [Eric Rolf (@xrolfex)](https://github.com/xrolfex "13 total commits to the home-assistant organization, 13 commits to home-assistant") - [Eric Thompson (@er0ck)](https://github.com/er0ck "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") -- [Erik Eriksson (@molobrakos)](https://github.com/molobrakos "112 total commits to the home-assistant organization, 98 commits to home-assistant, 11 commits to home-assistant.github.io, 3 commits to netdisco") +- [Erik Eriksson (@molobrakos)](https://github.com/molobrakos "115 total commits to the home-assistant organization, 99 commits to home-assistant, 13 commits to home-assistant.github.io, 3 commits to netdisco") - [Erik-jan Riemers (@riemers)](https://github.com/riemers "14 total commits to the home-assistant organization, 13 commits to home-assistant.github.io, 1 commit to hassbian-scripts") - [escoand (@escoand)](https://github.com/escoand "4 total commits to the home-assistant organization, 4 commits to home-assistant") +- [Ettienne Gous (@ettiennegous)](https://github.com/ettiennegous "2 total commits to the home-assistant organization, 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") - [Eu (@covrig)](https://github.com/covrig "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") -- [Eugenio Panadero (@azogue)](https://github.com/azogue "76 total commits to the home-assistant organization, 45 commits to home-assistant, 25 commits to home-assistant.github.io, 3 commits to home-assistant-polymer, 3 commits to homebridge-homeassistant") +- [Eugenio Panadero (@azogue)](https://github.com/azogue "76 total commits to the home-assistant organization, 45 commits to home-assistant, 25 commits to home-assistant.github.io, 3 commits to homebridge-homeassistant, 3 commits to home-assistant-polymer") - [Ezra Bowden (@bn0)](https://github.com/bn0 "2 total commits to the home-assistant organization, 2 commits to warrant") -- [Fabian Affolter (@fabaff)](https://github.com/fabaff "4570 total commits to the home-assistant organization, 2927 commits to home-assistant.github.io, 1536 commits to home-assistant, 32 commits to home-assistant-assets, 31 commits to home-assistant-notebooks, 11 commits to home-assistant-polymer, 11 commits to hassio-build, 8 commits to netdisco, 5 commits to hassio-addons, 4 commits to hassio, 3 commits to development-docs, 1 commit to home-assistant-js-websocket, 1 commit to example-custom-config") +- [Fabian Affolter (@fabaff)](https://github.com/fabaff "4590 total commits to the home-assistant organization, 2938 commits to home-assistant.github.io, 1545 commits to home-assistant, 32 commits to home-assistant-assets, 31 commits to home-assistant-notebooks, 11 commits to hassio-build, 11 commits to home-assistant-polymer, 8 commits to netdisco, 5 commits to hassio-addons, 4 commits to hassio, 3 commits to development-docs, 1 commit to example-custom-config, 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") - [Fabien Piuzzi (@reefab)](https://github.com/reefab "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") - [Fabrizio Furnari (@fabfurnari)](https://github.com/fabfurnari "5 total commits to the home-assistant organization, 3 commits to home-assistant.github.io, 2 commits to home-assistant") @@ -317,46 +321,43 @@ This page contains a list of people who have contributed in one way or another t - [Felix (@xifle)](https://github.com/xifle "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Felix Krause (@KrauseFx)](https://github.com/KrauseFx "27 total commits to the home-assistant organization, 27 commits to issue-bot") - [Ferry van Zeelst (@StaticCube)](https://github.com/StaticCube "6 total commits to the home-assistant organization, 4 commits to home-assistant.github.io, 2 commits to home-assistant") +- [Filip Bednárik (@drndos)](https://github.com/drndos "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [Finbarr Brady (@fbradyirl)](https://github.com/fbradyirl "8 total commits to the home-assistant organization, 8 commits to home-assistant") - [Florian Holzapfel (@florianholzapfel)](https://github.com/florianholzapfel "11 total commits to the home-assistant organization, 4 commits to home-assistant, 4 commits to home-assistant.github.io, 3 commits to netdisco") - [Florian Klien (@flowolf)](https://github.com/flowolf "17 total commits to the home-assistant organization, 14 commits to home-assistant.github.io, 3 commits to home-assistant") - [florianj1 (@florianj1)](https://github.com/florianj1 "1 total commits to the home-assistant organization, 1 commit to hassio") - [florincosta (@florincosta)](https://github.com/florincosta "6 total commits to the home-assistant organization, 3 commits to home-assistant, 3 commits to home-assistant.github.io") - [Fonta (@f0nt4)](https://github.com/f0nt4 "4 total commits to the home-assistant organization, 4 commits to home-assistant.github.io") -- [Franck Nijhof (@frenck)](https://github.com/frenck "29 total commits to the home-assistant organization, 20 commits to home-assistant.github.io, 5 commits to hassio, 2 commits to home-assistant-polymer, 1 commit to appdaemon, 1 commit to hassio-cli") +- [Franck Nijhof (@frenck)](https://github.com/frenck "30 total commits to the home-assistant organization, 21 commits to home-assistant.github.io, 5 commits to hassio, 2 commits to home-assistant-polymer, 1 commit to appdaemon, 1 commit to hassio-cli") - [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 "16 total commits to the home-assistant organization, 9 commits to home-assistant, 4 commits to home-assistant.github.io, 3 commits to netdisco") - [Frederic Hemberger (@fhemberger)](https://github.com/fhemberger "93 total commits to the home-assistant organization, 93 commits to home-assistant.github.io") -- [Frederik Bolding (@FrederikBolding)](https://github.com/FrederikBolding "2 total commits to the home-assistant organization, 2 commits to home-assistant") +- [Frederik Bolding (@FrederikBolding)](https://github.com/FrederikBolding "3 total commits to the home-assistant organization, 3 commits to home-assistant") - [Fredrik Fjeld (@fredrikfjeld)](https://github.com/fredrikfjeld "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") -- [Fredrik Lindqvist (@Landrash)](https://github.com/Landrash "190 total commits to the home-assistant organization, 81 commits to hassbian-scripts, 70 commits to home-assistant.github.io, 34 commits to pi-gen, 4 commits to home-assistant, 1 commit to home-assistant-polymer") +- [Fredrik Lindqvist (@Landrash)](https://github.com/Landrash "207 total commits to the home-assistant organization, 95 commits to hassbian-scripts, 73 commits to home-assistant.github.io, 34 commits to pi-gen, 4 commits to home-assistant, 1 commit to home-assistant-polymer") - [freol35241 (@freol35241)](https://github.com/freol35241 "3 total commits to the home-assistant organization, 3 commits to home-assistant") - [fuga2136 (@fuga2136)](https://github.com/fuga2136 "13 total commits to the home-assistant organization, 13 commits to home-assistant.github.io") - [Gabor SZOLLOSI (@szogi)](https://github.com/szogi "3 total commits to the home-assistant organization, 2 commits to home-assistant, 1 commit to appdaemon") - [GadgetReactor (@GadgetReactor)](https://github.com/GadgetReactor "2 total commits to the home-assistant organization, 2 commits to home-assistant") -- [Gavin Mogan (@halkeye)](https://github.com/halkeye "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [Geoff Norton (@kangaroo)](https://github.com/kangaroo "14 total commits to the home-assistant organization, 14 commits to home-assistant") - [George.M (@nodinosaur)](https://github.com/nodinosaur "8 total commits to the home-assistant organization, 6 commits to home-assistant.github.io, 2 commits to home-assistant") - [Georgi Kirichkov (@kirichkov)](https://github.com/kirichkov "17 total commits to the home-assistant organization, 11 commits to home-assistant.github.io, 5 commits to home-assistant, 1 commit to appdaemon") - [Georgi Yanev (@jumpalottahigh)](https://github.com/jumpalottahigh "6 total commits to the home-assistant organization, 4 commits to home-assistant.github.io, 2 commits to home-assistant-polymer") - [Georgii Staroselskii (@staroselskii)](https://github.com/staroselskii "1 total commits to the home-assistant organization, 1 commit to pi-gen") -- [Gerard (@gerard33)](https://github.com/gerard33 "6 total commits to the home-assistant organization, 4 commits to home-assistant.github.io, 2 commits to home-assistant") +- [Gerard (@gerard33)](https://github.com/gerard33 "7 total commits to the home-assistant organization, 4 commits to home-assistant.github.io, 3 commits to home-assistant") - [Gergely Imreh (@imrehg)](https://github.com/imrehg "16 total commits to the home-assistant organization, 11 commits to home-assistant, 5 commits to home-assistant.github.io") - [Gianluca Barbaro (@MrMep)](https://github.com/MrMep "24 total commits to the home-assistant organization, 16 commits to home-assistant, 8 commits to home-assistant.github.io") -- [Gianpaolo Macario (@gmacario)](https://github.com/gmacario "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") -- [Giel Janssens (@gieljnssns)](https://github.com/gieljnssns "6 total commits to the home-assistant organization, 4 commits to home-assistant, 2 commits to home-assistant.github.io") +- [Giel Janssens (@gieljnssns)](https://github.com/gieljnssns "4 total commits to the home-assistant organization, 4 commits to home-assistant") - [githubbuh (@githubbuh)](https://github.com/githubbuh "5 total commits to the home-assistant organization, 5 commits to home-assistant.github.io") - [gitmopp (@gitmopp)](https://github.com/gitmopp "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [Giuseppe (@glpatcern)](https://github.com/glpatcern "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [GMFalka (@GMFalka)](https://github.com/GMFalka "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") -- [Gopal Kildoliya (@gopalkildoliya)](https://github.com/gopalkildoliya "6 total commits to the home-assistant organization, 4 commits to home-assistant, 2 commits to home-assistant.github.io") -- [Graeme Smith (@Instagraeme)](https://github.com/Instagraeme "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") +- [Gopal Kildoliya (@gopalkildoliya)](https://github.com/gopalkildoliya "4 total commits to the home-assistant organization, 4 commits to home-assistant") - [Grant McConnaughey (@grantmcconnaughey)](https://github.com/grantmcconnaughey "8 total commits to the home-assistant organization, 8 commits to warrant") - [GreenTurtwig (@GreenTurtwig)](https://github.com/GreenTurtwig "80 total commits to the home-assistant organization, 75 commits to home-assistant.github.io, 5 commits to home-assistant") - [Greg Dowling (@pavoni)](https://github.com/pavoni "255 total commits to the home-assistant organization, 228 commits to home-assistant, 25 commits to home-assistant.github.io, 2 commits to netdisco") - [Greg Laabs (@OverloadUT)](https://github.com/OverloadUT "14 total commits to the home-assistant organization, 11 commits to home-assistant, 3 commits to home-assistant.github.io") - [Greg MacLellan (@gregmac)](https://github.com/gregmac "1 total commits to the home-assistant organization, 1 commit to pi-gen") -- [Greg Stengel (@theCMack)](https://github.com/theCMack "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [Greg Stevenson (@gstevenson)](https://github.com/gstevenson "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [Greg. A. (@gautric)](https://github.com/gautric "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [GTH (@gunnarhelgason)](https://github.com/gunnarhelgason "2 total commits to the home-assistant organization, 2 commits to appdaemon") @@ -405,7 +406,7 @@ This page contains a list of people who have contributed in one way or another t - [James Marsh (@doctorjames)](https://github.com/doctorjames "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [James Ruan (@jamesruan)](https://github.com/jamesruan "2 total commits to the home-assistant organization, 2 commits to pi-gen") - [Jamie van Dyke (@fearoffish)](https://github.com/fearoffish "1 total commits to the home-assistant organization, 1 commit to home-assistant-iOS") -- [JammyDodger231 (@JammyDodger231)](https://github.com/JammyDodger231 "4 total commits to the home-assistant organization, 4 commits to home-assistant.github.io") +- [JammyDodger231 (@JammyDodger231)](https://github.com/JammyDodger231 "5 total commits to the home-assistant organization, 5 commits to home-assistant.github.io") - [Jan Almeroth (@jalmeroth)](https://github.com/jalmeroth "6 total commits to the home-assistant organization, 5 commits to home-assistant, 1 commit to home-assistant-polymer") - [Jan Harkes (@jaharkes)](https://github.com/jaharkes "110 total commits to the home-assistant organization, 100 commits to home-assistant, 10 commits to netdisco") - [Jan Losinski (@janLo)](https://github.com/janLo "21 total commits to the home-assistant organization, 16 commits to home-assistant, 5 commits to home-assistant.github.io") @@ -429,11 +430,11 @@ This page contains a list of people who have contributed in one way or another t - [Jeffrey Lin (@linjef)](https://github.com/linjef "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Jens (@jhoepken)](https://github.com/jhoepken "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [Jens Østergaard Nielsen (@dingusdk)](https://github.com/dingusdk "5 total commits to the home-assistant organization, 3 commits to home-assistant.github.io, 2 commits to home-assistant") -- [Jerad Meisner (@jeradM)](https://github.com/jeradM "5 total commits to the home-assistant organization, 5 commits to home-assistant") +- [Jerad Meisner (@jeradM)](https://github.com/jeradM "6 total commits to the home-assistant organization, 6 commits to home-assistant") - [Jeremiah Wuenschel (@jer)](https://github.com/jer "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [Jeremy Williams (@jwillaz)](https://github.com/jwillaz "5 total commits to the home-assistant organization, 5 commits to home-assistant.github.io") - [jeremysv (@jeremysv)](https://github.com/jeremysv "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") -- [Jeroen ter Heerdt (@jeroenterheerdt)](https://github.com/jeroenterheerdt "35 total commits to the home-assistant organization, 19 commits to home-assistant, 16 commits to home-assistant.github.io") +- [Jeroen ter Heerdt (@jeroenterheerdt)](https://github.com/jeroenterheerdt "36 total commits to the home-assistant organization, 20 commits to home-assistant, 16 commits to home-assistant.github.io") - [Jerold Albertson (@jeroldalbertson-wf)](https://github.com/jeroldalbertson-wf "5 total commits to the home-assistant organization, 5 commits to home-assistant.github.io") - [Jerry Workman (@JerryWorkman)](https://github.com/JerryWorkman "7 total commits to the home-assistant organization, 7 commits to home-assistant.github.io") - [Jesse Hills (@jesserockz)](https://github.com/jesserockz "9 total commits to the home-assistant organization, 9 commits to home-assistant") @@ -443,17 +444,17 @@ This page contains a list of people who have contributed in one way or another t - [jiafengwang (@jiafengwang)](https://github.com/jiafengwang "1 total commits to the home-assistant organization, 1 commit to appdaemon") - [jimbob1001 (@jimbob1001)](https://github.com/jimbob1001 "4 total commits to the home-assistant organization, 4 commits to home-assistant.github.io") - [Joakim Nohlgård (@gebart)](https://github.com/gebart "2 total commits to the home-assistant organization, 2 commits to libcoap") -- [Joakim Sørensen (@ludeeus)](https://github.com/ludeeus "71 total commits to the home-assistant organization, 56 commits to hassbian-scripts, 15 commits to home-assistant.github.io") +- [Joakim Sørensen (@ludeeus)](https://github.com/ludeeus "103 total commits to the home-assistant organization, 85 commits to hassbian-scripts, 18 commits to home-assistant.github.io") - [Job (@jmvermeulen)](https://github.com/jmvermeulen "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [jodur (@jodur)](https://github.com/jodur "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") -- [Joe Lu (@snjoetw)](https://github.com/snjoetw "22 total commits to the home-assistant organization, 17 commits to home-assistant, 5 commits to home-assistant.github.io") +- [Joe Lu (@snjoetw)](https://github.com/snjoetw "24 total commits to the home-assistant organization, 18 commits to home-assistant, 5 commits to home-assistant.github.io, 1 commit to appdaemon") - [Joe McMonagle (@joemcmonagle)](https://github.com/joemcmonagle "13 total commits to the home-assistant organization, 13 commits to home-assistant.github.io") - [joe248 (@joe248)](https://github.com/joe248 "3 total commits to the home-assistant organization, 3 commits to home-assistant") - [Joeboyc2 (@Joeboyc2)](https://github.com/Joeboyc2 "15 total commits to the home-assistant organization, 15 commits to home-assistant.github.io") - [Johan Bloemberg (@aequitas)](https://github.com/aequitas "43 total commits to the home-assistant organization, 35 commits to home-assistant, 7 commits to home-assistant.github.io, 1 commit to netdisco") - [Johan Haals (@jhaals)](https://github.com/jhaals "1 total commits to the home-assistant organization, 1 commit to appdaemon") - [Johan van der Kuijl (@Rubyan)](https://github.com/Rubyan "4 total commits to the home-assistant organization, 3 commits to home-assistant.github.io, 1 commit to appdaemon") -- [Johann Kellerman (@kellerza)](https://github.com/kellerza "163 total commits to the home-assistant organization, 133 commits to home-assistant, 30 commits to home-assistant.github.io") +- [Johann Kellerman (@kellerza)](https://github.com/kellerza "169 total commits to the home-assistant organization, 139 commits to home-assistant, 30 commits to home-assistant.github.io") - [Johannes K. (@roadrash2108)](https://github.com/roadrash2108 "4 total commits to the home-assistant organization, 4 commits to home-assistant.github.io") - [John (@J-C-B)](https://github.com/J-C-B "5 total commits to the home-assistant organization, 5 commits to home-assistant.github.io") - [John Allen (@jra3)](https://github.com/jra3 "2 total commits to the home-assistant organization, 2 commits to home-assistant") @@ -487,10 +488,10 @@ This page contains a list of people who have contributed in one way or another t - [Julius Mittenzwei (@Julius2342)](https://github.com/Julius2342 "31 total commits to the home-assistant organization, 24 commits to home-assistant, 7 commits to home-assistant.github.io") - [jumpkick (@jumpkick)](https://github.com/jumpkick "15 total commits to the home-assistant organization, 12 commits to home-assistant, 3 commits to home-assistant.github.io") - [Justin Dray (@justin8)](https://github.com/justin8 "9 total commits to the home-assistant organization, 7 commits to home-assistant.github.io, 2 commits to home-assistant") -- [Justin Hayes (@GussyH)](https://github.com/GussyH "7 total commits to the home-assistant organization, 7 commits to hadashboard") +- [Justin Hayes (@GussyH)](https://github.com/GussyH "8 total commits to the home-assistant organization, 7 commits to hadashboard, 1 commit to appdaemon") - [Justin Weberg (@justweb1)](https://github.com/justweb1 "26 total commits to the home-assistant organization, 13 commits to home-assistant-polymer, 7 commits to hassbot, 4 commits to home-assistant, 1 commit to home-assistant-js, 1 commit to hassio") - [Justyn Shull (@justyns)](https://github.com/justyns "5 total commits to the home-assistant organization, 5 commits to home-assistant") -- [Kane610 (@Kane610)](https://github.com/Kane610 "32 total commits to the home-assistant organization, 17 commits to home-assistant, 13 commits to home-assistant.github.io, 1 commit to netdisco, 1 commit to home-assistant-polymer") +- [Kane610 (@Kane610)](https://github.com/Kane610 "34 total commits to the home-assistant organization, 18 commits to home-assistant, 14 commits to home-assistant.github.io, 1 commit to netdisco, 1 commit to home-assistant-polymer") - [Karen Goode (@kfgoode)](https://github.com/kfgoode "4 total commits to the home-assistant organization, 4 commits to home-assistant") - [karlkar (@karlkar)](https://github.com/karlkar "14 total commits to the home-assistant organization, 9 commits to home-assistant, 5 commits to home-assistant.github.io") - [Keaton Taylor (@keatontaylor)](https://github.com/keatontaylor "7 total commits to the home-assistant organization, 4 commits to home-assistant, 3 commits to home-assistant.github.io") @@ -509,6 +510,7 @@ This page contains a list of people who have contributed in one way or another t - [kireyeu (@kireyeu)](https://github.com/kireyeu "4 total commits to the home-assistant organization, 4 commits to home-assistant-notebooks") - [Klaas Hoekema (@KlaasH)](https://github.com/KlaasH "12 total commits to the home-assistant organization, 5 commits to home-assistant.github.io, 5 commits to home-assistant, 2 commits to home-assistant-polymer") - [Klaus (@k-laus)](https://github.com/k-laus "1 total commits to the home-assistant organization, 1 commit to appdaemon") +- [Kory Prince (@korylprince)](https://github.com/korylprince "4 total commits to the home-assistant organization, 4 commits to home-assistant-polymer") - [Krasimir Chariyski (@Chariyski)](https://github.com/Chariyski "4 total commits to the home-assistant organization, 4 commits to home-assistant.github.io") - [Krasimir Zhelev (@zhelev)](https://github.com/zhelev "3 total commits to the home-assistant organization, 2 commits to home-assistant, 1 commit to netdisco") - [kroimon (@kroimon)](https://github.com/kroimon "1 total commits to the home-assistant organization, 1 commit to netdisco") @@ -519,9 +521,9 @@ This page contains a list of people who have contributed in one way or another t - [Leon99 (@Leon99)](https://github.com/Leon99 "1 total commits to the home-assistant organization, 1 commit to appdaemon") - [Leonardo Saraiva (@vyper)](https://github.com/vyper "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [Lev Aronsky (@aronsky)](https://github.com/aronsky "14 total commits to the home-assistant organization, 11 commits to home-assistant, 3 commits to home-assistant.github.io") -- [Lewis Juggins (@lwis)](https://github.com/lwis "65 total commits to the home-assistant organization, 52 commits to home-assistant, 12 commits to home-assistant.github.io, 1 commit to home-assistant-polymer") +- [Lewis Juggins (@lwis)](https://github.com/lwis "66 total commits to the home-assistant organization, 53 commits to home-assistant, 12 commits to home-assistant.github.io, 1 commit to home-assistant-polymer") - [lichtteil (@lichtteil)](https://github.com/lichtteil "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") -- [Lindsay Ward (@lindsaymarkward)](https://github.com/lindsaymarkward "17 total commits to the home-assistant organization, 13 commits to home-assistant.github.io, 4 commits to home-assistant") +- [Lindsay Ward (@lindsaymarkward)](https://github.com/lindsaymarkward "18 total commits to the home-assistant organization, 13 commits to home-assistant.github.io, 5 commits to home-assistant") - [linuxlurak (@linuxlurak)](https://github.com/linuxlurak "5 total commits to the home-assistant organization, 3 commits to home-assistant.github.io, 2 commits to hadashboard") - [linvinus (@linvinus)](https://github.com/linvinus "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") - [lrmate (@lrmate)](https://github.com/lrmate "3 total commits to the home-assistant organization, 3 commits to home-assistant") @@ -549,7 +551,8 @@ This page contains a list of people who have contributed in one way or another t - [Maikel Wever (@maikelwever)](https://github.com/maikelwever "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [makemeasandwich (@makemeasandwich)](https://github.com/makemeasandwich "12 total commits to the home-assistant organization, 12 commits to home-assistant") - [Marc Egli (@frog32)](https://github.com/frog32 "11 total commits to the home-assistant organization, 8 commits to home-assistant, 3 commits to home-assistant.github.io") -- [Marc Forth (@mf-social)](https://github.com/mf-social "23 total commits to the home-assistant organization, 22 commits to home-assistant.github.io, 1 commit to fabric-home-assistant") +- [Marc Forth (@mf-social)](https://github.com/mf-social "25 total commits to the home-assistant organization, 24 commits to home-assistant.github.io, 1 commit to fabric-home-assistant") +- [Marc Khouri (@ubnt-marc-khouri)](https://github.com/ubnt-marc-khouri "2 total commits to the home-assistant organization, 2 commits to home-assistant-polymer") - [Marc Pabst (@mxtra)](https://github.com/mxtra "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") - [Marc Plano-Lesay (@Kernald)](https://github.com/Kernald "12 total commits to the home-assistant organization, 10 commits to home-assistant.github.io, 2 commits to home-assistant") - [Marcel030nl (@Marcel030nl)](https://github.com/Marcel030nl "5 total commits to the home-assistant organization, 5 commits to home-assistant.github.io") @@ -570,15 +573,15 @@ This page contains a list of people who have contributed in one way or another t - [Markus Stenberg (@fingon)](https://github.com/fingon "6 total commits to the home-assistant organization, 6 commits to home-assistant") - [Martin Berg (@mbrrg)](https://github.com/mbrrg "7 total commits to the home-assistant organization, 4 commits to home-assistant, 3 commits to home-assistant.github.io") - [Martin Donlon (@wickerwaka)](https://github.com/wickerwaka "2 total commits to the home-assistant organization, 2 commits to home-assistant") -- [Martin Eberhardt (@DarkFox)](https://github.com/DarkFox "4 total commits to the home-assistant organization, 4 commits to home-assistant.github.io") -- [Martin Hjelmare (@MartinHjelmare)](https://github.com/MartinHjelmare "146 total commits to the home-assistant organization, 117 commits to home-assistant, 29 commits to home-assistant.github.io") +- [Martin Eberhardt (@DarkFox)](https://github.com/DarkFox "5 total commits to the home-assistant organization, 5 commits to home-assistant.github.io") +- [Martin Hjelmare (@MartinHjelmare)](https://github.com/MartinHjelmare "150 total commits to the home-assistant organization, 121 commits to home-assistant, 29 commits to home-assistant.github.io") - [Martin Rowan (@shortbloke)](https://github.com/shortbloke "3 total commits to the home-assistant organization, 3 commits to home-assistant") - [Martin Vacula (@MatoKafkac)](https://github.com/MatoKafkac "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Martin Weinelt (@mweinelt)](https://github.com/mweinelt "17 total commits to the home-assistant organization, 9 commits to home-assistant, 7 commits to home-assistant.github.io, 1 commit to home-assistant-polymer") - [Martokk (@martokk)](https://github.com/martokk "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [Mateusz Drab (@mateuszdrab)](https://github.com/mateuszdrab "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Mathew Peterson (@mathewpeterson)](https://github.com/mathewpeterson "1 total commits to the home-assistant organization, 1 commit to homebridge-homeassistant") -- [Matt N. (@mnoorenberghe)](https://github.com/mnoorenberghe "53 total commits to the home-assistant organization, 25 commits to home-assistant-iOS, 17 commits to home-assistant.github.io, 9 commits to home-assistant, 1 commit to home-assistant-polymer, 1 commit to homebridge-homeassistant") +- [Matt N. (@mnoorenberghe)](https://github.com/mnoorenberghe "53 total commits to the home-assistant organization, 25 commits to home-assistant-iOS, 17 commits to home-assistant.github.io, 9 commits to home-assistant, 1 commit to homebridge-homeassistant, 1 commit to home-assistant-polymer") - [Matt Rogers (@rogersmj)](https://github.com/rogersmj "20 total commits to the home-assistant organization, 20 commits to hadashboard") - [Matt Schmitt (@schmittx)](https://github.com/schmittx "66 total commits to the home-assistant organization, 52 commits to homebridge-homeassistant, 7 commits to home-assistant, 4 commits to home-assistant.github.io, 3 commits to home-assistant-polymer") - [Matt White (@mw-white)](https://github.com/mw-white "10 total commits to the home-assistant organization, 5 commits to home-assistant.github.io, 5 commits to home-assistant") @@ -588,6 +591,7 @@ This page contains a list of people who have contributed in one way or another t - [Matthew Schick (@mattsch)](https://github.com/mattsch "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Matthew Treinish (@mtreinish)](https://github.com/mtreinish "20 total commits to the home-assistant organization, 13 commits to home-assistant, 7 commits to home-assistant.github.io") - [Matthias Dötsch (@brainexe)](https://github.com/brainexe "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") +- [Mattias Welponer (@mxworm)](https://github.com/mxworm "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [mattie47 (@mattie47)](https://github.com/mattie47 "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [mauriciobonani (@mauriciobonani)](https://github.com/mauriciobonani "7 total commits to the home-assistant organization, 7 commits to home-assistant.github.io") - [Max Prokhorov (@mcspr)](https://github.com/mcspr "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") @@ -595,21 +599,19 @@ This page contains a list of people who have contributed in one way or another t - [maxclaey (@maxclaey)](https://github.com/maxclaey "8 total commits to the home-assistant organization, 5 commits to home-assistant, 3 commits to home-assistant.github.io") - [maxlaverse (@maxlaverse)](https://github.com/maxlaverse "6 total commits to the home-assistant organization, 6 commits to home-assistant") - [mboeru (@mboeru)](https://github.com/mboeru "1 total commits to the home-assistant organization, 1 commit to home-assistant-iOS") +- [mcfrojd (@mcfrojd)](https://github.com/mcfrojd "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [Menno Blom (@b10m)](https://github.com/b10m "6 total commits to the home-assistant organization, 3 commits to home-assistant.github.io, 2 commits to home-assistant, 1 commit to netdisco") - [mertenats (@mertenats)](https://github.com/mertenats "4 total commits to the home-assistant organization, 4 commits to home-assistant.github.io") - [Micha LaQua (@milaq)](https://github.com/milaq "3 total commits to the home-assistant organization, 3 commits to home-assistant") -- [Michael (@hartmms)](https://github.com/hartmms "6 total commits to the home-assistant organization, 4 commits to home-assistant.github.io, 2 commits to home-assistant") +- [Michael (@hartmms)](https://github.com/hartmms "4 total commits to the home-assistant organization, 4 commits to home-assistant.github.io") - [Michael Auchter (@auchter)](https://github.com/auchter "13 total commits to the home-assistant organization, 13 commits to home-assistant") -- [Michael Fester (@michaelfester)](https://github.com/michaelfester "6 total commits to the home-assistant organization, 4 commits to home-assistant.github.io, 2 commits to home-assistant") +- [Michael Fester (@michaelfester)](https://github.com/michaelfester "4 total commits to the home-assistant organization, 4 commits to home-assistant.github.io") - [Michael Furtak (@mfurtak)](https://github.com/mfurtak "5 total commits to the home-assistant organization, 5 commits to issue-bot") - [Michael Gilbert (@Zyell)](https://github.com/Zyell "8 total commits to the home-assistant organization, 8 commits to home-assistant") -- [Michael Heinemann (@heinemml)](https://github.com/heinemml "2 total commits to the home-assistant organization, 2 commits to home-assistant") -- [Michael Kutý (@michaelkuty)](https://github.com/michaelkuty "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Michael Luggen (@l00mi)](https://github.com/l00mi "4 total commits to the home-assistant organization, 4 commits to home-assistant.github.io") -- [Michael Prokop (@mika)](https://github.com/mika "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Michael Requeny (@requenym)](https://github.com/requenym "14 total commits to the home-assistant organization, 14 commits to home-assistant.github.io") - [Michael Shim (@shimeez)](https://github.com/shimeez "1 total commits to the home-assistant organization, 1 commit to fabric-home-assistant") -- [Michaël Arnauts (@michaelarnauts)](https://github.com/michaelarnauts "62 total commits to the home-assistant organization, 32 commits to home-assistant, 26 commits to home-assistant.github.io, 3 commits to home-assistant-polymer, 1 commit to netdisco") +- [Michaël Arnauts (@michaelarnauts)](https://github.com/michaelarnauts "63 total commits to the home-assistant organization, 33 commits to home-assistant, 26 commits to home-assistant.github.io, 3 commits to home-assistant-polymer, 1 commit to netdisco") - [Michel Settembrino (@Michel-Settembrino)](https://github.com/Michel-Settembrino "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [micw (@micw)](https://github.com/micw "8 total commits to the home-assistant organization, 5 commits to home-assistant, 3 commits to home-assistant.github.io") - [Mike Christianson (@MikeChristianson)](https://github.com/MikeChristianson "6 total commits to the home-assistant organization, 6 commits to home-assistant") @@ -627,35 +629,32 @@ This page contains a list of people who have contributed in one way or another t - [mjj4791 (@mjj4791)](https://github.com/mjj4791 "23 total commits to the home-assistant organization, 15 commits to home-assistant.github.io, 8 commits to home-assistant") - [mmmmmtasty (@mmmmmtasty)](https://github.com/mmmmmtasty "8 total commits to the home-assistant organization, 8 commits to appdaemon") - [Molodax (@Molodax)](https://github.com/Molodax "7 total commits to the home-assistant organization, 7 commits to home-assistant.github.io") -- [Moon Shot (@moonshot)](https://github.com/moonshot "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [moskovskiy82 (@moskovskiy82)](https://github.com/moskovskiy82 "6 total commits to the home-assistant organization, 6 commits to home-assistant.github.io") - [motir (@motir)](https://github.com/motir "1 total commits to the home-assistant organization, 1 commit to appdaemon") - [mradziwo (@mradziwo)](https://github.com/mradziwo "1 total commits to the home-assistant organization, 1 commit to appdaemon") - [mukundv (@mukundv)](https://github.com/mukundv "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [Mārtiņš Grunskis (@grunskis)](https://github.com/grunskis "1 total commits to the home-assistant organization, 1 commit to netdisco") - [Nash Kaminski (@nkaminski)](https://github.com/nkaminski "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") -- [Nate (@BillyNate)](https://github.com/BillyNate "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Nathan Flynn (@eperdeme)](https://github.com/eperdeme "1 total commits to the home-assistant organization, 1 commit to hassio-addons") - [Nathan Henrie (@n8henrie)](https://github.com/n8henrie "19 total commits to the home-assistant organization, 9 commits to home-assistant, 6 commits to home-assistant.github.io, 2 commits to homebridge-homeassistant, 1 commit to appdaemon, 1 commit to home-assistant-polymer") -- [Neil Lathwood (@laf)](https://github.com/laf "5 total commits to the home-assistant organization, 3 commits to home-assistant.github.io, 2 commits to home-assistant") +- [Neil Lathwood (@laf)](https://github.com/laf "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [Nelis Willers (@NelisW)](https://github.com/NelisW "1 total commits to the home-assistant organization, 1 commit to fabric-home-assistant") - [NeLLyMerC (@NeLLyMerC)](https://github.com/NeLLyMerC "5 total commits to the home-assistant organization, 5 commits to home-assistant.github.io") - [neonbunny (@neonbunny)](https://github.com/neonbunny "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [Nicholas Amadori (@namadori)](https://github.com/namadori "4 total commits to the home-assistant organization, 4 commits to home-assistant.github.io") - [Nicholas Griffin (@nicholasgriffintn)](https://github.com/nicholasgriffintn "6 total commits to the home-assistant organization, 6 commits to home-assistant.github.io") -- [Nicholas Sielicki (@sielicki)](https://github.com/sielicki "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Nick Touran (@partofthething)](https://github.com/partofthething "38 total commits to the home-assistant organization, 25 commits to home-assistant, 13 commits to home-assistant.github.io") - [Nicko van Someren (@nickovs)](https://github.com/nickovs "3 total commits to the home-assistant organization, 3 commits to home-assistant") - [Nicolas Graziano (@ngraziano)](https://github.com/ngraziano "3 total commits to the home-assistant organization, 3 commits to home-assistant") - [Nicolas Martignoni (@martignoni)](https://github.com/martignoni "1 total commits to the home-assistant organization, 1 commit to pi-gen") -- [nielstron (@nielstron)](https://github.com/nielstron "1 total commits to the home-assistant organization, 1 commit to netdisco") +- [nielstron (@nielstron)](https://github.com/nielstron "2 total commits to the home-assistant organization, 2 commits to netdisco") - [Nigel Rook (@NigelRook)](https://github.com/NigelRook "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") - [Niklas (@niklaswa)](https://github.com/niklaswa "4 total commits to the home-assistant organization, 4 commits to home-assistant.github.io") - [Niklas Wagner (@Skaronator)](https://github.com/Skaronator "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [Nolan Gilley (@nkgilley)](https://github.com/nkgilley "123 total commits to the home-assistant organization, 95 commits to home-assistant, 28 commits to home-assistant.github.io") - [nordlead2005 (@nordlead2005)](https://github.com/nordlead2005 "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [NotoriousBDG (@notoriousbdg)](https://github.com/notoriousbdg "3 total commits to the home-assistant organization, 3 commits to hassio-addons") -- [NovapaX (@NovapaX)](https://github.com/NovapaX "27 total commits to the home-assistant organization, 21 commits to home-assistant-polymer, 5 commits to home-assistant, 1 commit to home-assistant-assets") +- [NovapaX (@NovapaX)](https://github.com/NovapaX "35 total commits to the home-assistant organization, 29 commits to home-assistant-polymer, 5 commits to home-assistant, 1 commit to home-assistant-assets") - [ntalekt (@ntalekt)](https://github.com/ntalekt "6 total commits to the home-assistant organization, 6 commits to home-assistant.github.io") - [Nuno Sousa (@nunofgs)](https://github.com/nunofgs "5 total commits to the home-assistant organization, 4 commits to home-assistant, 1 commit to homebridge-homeassistant") - [obgm (@obgm)](https://github.com/obgm "480 total commits to the home-assistant organization, 480 commits to libcoap") @@ -666,12 +665,12 @@ This page contains a list of people who have contributed in one way or another t - [Oliver (@scarface-4711)](https://github.com/scarface-4711 "27 total commits to the home-assistant organization, 17 commits to home-assistant, 9 commits to home-assistant.github.io, 1 commit to netdisco") - [Oliver van Porten (@mcdeck)](https://github.com/mcdeck "10 total commits to the home-assistant organization, 10 commits to home-assistant") - [Open Home Automation (@open-homeautomation)](https://github.com/open-homeautomation "41 total commits to the home-assistant organization, 29 commits to home-assistant, 12 commits to home-assistant.github.io") -- [Otto Winter (@OttoWinter)](https://github.com/OttoWinter "45 total commits to the home-assistant organization, 39 commits to home-assistant, 5 commits to home-assistant.github.io, 1 commit to home-assistant-polymer") +- [Otto Winter (@OttoWinter)](https://github.com/OttoWinter "47 total commits to the home-assistant organization, 40 commits to home-assistant, 6 commits to home-assistant.github.io, 1 commit to home-assistant-polymer") - [oznu (@oznu)](https://github.com/oznu "1 total commits to the home-assistant organization, 1 commit to homebridge-homeassistant") - [Parker Moore (@parkr)](https://github.com/parkr "60 total commits to the home-assistant organization, 60 commits to home-assistant.github.io") - [pascal (@passie)](https://github.com/passie "4 total commits to the home-assistant organization, 3 commits to home-assistant, 1 commit to home-assistant-polymer") - [Pascal Bach (@bachp)](https://github.com/bachp "10 total commits to the home-assistant organization, 9 commits to home-assistant, 1 commit to netdisco") -- [Pascal Vizeli (@pvizeli)](https://github.com/pvizeli "2606 total commits to the home-assistant organization, 1041 commits to hassio, 461 commits to home-assistant, 364 commits to hassio-build, 331 commits to hassio-addons, 311 commits to home-assistant.github.io, 67 commits to hassio-os, 16 commits to hassio-addons-example, 13 commits to hassio-cli, 1 commit to home-assistant-js-websocket, 1 commit to netdisco") +- [Pascal Vizeli (@pvizeli)](https://github.com/pvizeli "2684 total commits to the home-assistant organization, 1055 commits to hassio, 461 commits to home-assistant, 369 commits to hassio-build, 338 commits to hassio-addons, 312 commits to home-assistant.github.io, 118 commits to hassio-os, 16 commits to hassio-addons-example, 13 commits to hassio-cli, 1 commit to home-assistant-js-websocket, 1 commit to netdisco") - [Pat Thoyts (@patthoyts)](https://github.com/patthoyts "2 total commits to the home-assistant organization, 2 commits to netdisco") - [Patrick Aikens (@duckpuppy)](https://github.com/duckpuppy "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [Patrick Easters (@patrickeasters)](https://github.com/patrickeasters "5 total commits to the home-assistant organization, 5 commits to home-assistant.github.io") @@ -688,7 +687,7 @@ This page contains a list of people who have contributed in one way or another t - [Per Osbäck (@perosb)](https://github.com/perosb "18 total commits to the home-assistant organization, 18 commits to home-assistant") - [Per Sandström (@persandstrom)](https://github.com/persandstrom "124 total commits to the home-assistant organization, 98 commits to home-assistant, 14 commits to home-assistant.github.io, 12 commits to home-assistant-polymer") - [Pete Peterson (@petey)](https://github.com/petey "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") -- [PeteBa (@PeteBa)](https://github.com/PeteBa "7 total commits to the home-assistant organization, 5 commits to home-assistant, 2 commits to home-assistant-polymer") +- [PeteBa (@PeteBa)](https://github.com/PeteBa "8 total commits to the home-assistant organization, 5 commits to home-assistant, 3 commits to home-assistant-polymer") - [Peter Epley (@epleypa)](https://github.com/epleypa "6 total commits to the home-assistant organization, 6 commits to home-assistant.github.io") - [Petr Vraník (@konikvranik)](https://github.com/konikvranik "11 total commits to the home-assistant organization, 6 commits to home-assistant, 5 commits to home-assistant.github.io") - [pezinek (@pezinek)](https://github.com/pezinek "8 total commits to the home-assistant organization, 8 commits to home-assistant") @@ -702,11 +701,11 @@ This page contains a list of people who have contributed in one way or another t - [Philip Howard (@Gadgetoid)](https://github.com/Gadgetoid "1 total commits to the home-assistant organization, 1 commit to pi-gen") - [Philip Kleimeyer (@philklei)](https://github.com/philklei "4 total commits to the home-assistant organization, 4 commits to home-assistant") - [Philip Lundrigan (@philipbl)](https://github.com/philipbl "65 total commits to the home-assistant organization, 56 commits to home-assistant, 9 commits to home-assistant.github.io") -- [Philip Rosenberg-Watt (@PhilRW)](https://github.com/PhilRW "4 total commits to the home-assistant organization, 4 commits to home-assistant") +- [Philip Rosenberg-Watt (@PhilRW)](https://github.com/PhilRW "10 total commits to the home-assistant organization, 7 commits to home-assistant, 3 commits to home-assistant.github.io") - [Philipp Hellmich (@runningman84)](https://github.com/runningman84 "4 total commits to the home-assistant organization, 4 commits to home-assistant.github.io") - [Philipp Schmitt (@pschmitt)](https://github.com/pschmitt "37 total commits to the home-assistant organization, 24 commits to home-assistant, 11 commits to home-assistant.github.io, 1 commit to appdaemon, 1 commit to hassio-build") - [Phill Price (@phillprice)](https://github.com/phillprice "11 total commits to the home-assistant organization, 11 commits to home-assistant.github.io") -- [PhracturedBlue (@PhracturedBlue)](https://github.com/PhracturedBlue "31 total commits to the home-assistant organization, 18 commits to home-assistant, 12 commits to home-assistant.github.io, 1 commit to home-assistant-polymer") +- [PhracturedBlue (@PhracturedBlue)](https://github.com/PhracturedBlue "33 total commits to the home-assistant organization, 20 commits to home-assistant, 12 commits to home-assistant.github.io, 1 commit to home-assistant-polymer") - [Pierre Ståhl (@postlund)](https://github.com/postlund "49 total commits to the home-assistant organization, 32 commits to home-assistant, 11 commits to home-assistant.github.io, 4 commits to netdisco, 2 commits to home-assistant-polymer") - [Piratonym (@Piratonym)](https://github.com/Piratonym "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [pkonnekermetametrics (@pkonnekermetametrics)](https://github.com/pkonnekermetametrics "5 total commits to the home-assistant organization, 5 commits to warrant") @@ -730,9 +729,10 @@ This page contains a list of people who have contributed in one way or another t - [rkabadi (@rkabadi)](https://github.com/rkabadi "17 total commits to the home-assistant organization, 17 commits to home-assistant") - [Rob Capellini (@capellini)](https://github.com/capellini "3 total commits to the home-assistant organization, 3 commits to home-assistant") - [Rob Slifka (@rslifka)](https://github.com/rslifka "5 total commits to the home-assistant organization, 5 commits to home-assistant.github.io") -- [Robbie Trencheny (@robbiet480)](https://github.com/robbiet480 "1317 total commits to the home-assistant organization, 646 commits to home-assistant-iOS, 259 commits to home-assistant, 249 commits to home-assistant.github.io, 92 commits to homebridge-homeassistant, 15 commits to home-assistant-polymer, 9 commits to hubot-home-assistant, 8 commits to Analytics-Receiver, 6 commits to netdisco, 3 commits to organization, 3 commits to hassbot, 3 commits to scenegen, 3 commits to hadashboard, 3 commits to appdaemon, 3 commits to home-assistant-js-websocket, 3 commits to home-assistant-js, 2 commits to lambda-home-assistant-github, 2 commits to LabelBot, 2 commits to home-assistant-notebooks, 2 commits to fabric-home-assistant, 2 commits to micropython-home-assistant, 2 commits to home-assistant-assets") -- [Robert Schütz (@dotlambda)](https://github.com/dotlambda "2 total commits to the home-assistant organization, 1 commit to netdisco, 1 commit to appdaemon") -- [Robin (@robmarkcole)](https://github.com/robmarkcole "29 total commits to the home-assistant organization, 19 commits to home-assistant.github.io, 9 commits to home-assistant, 1 commit to home-assistant-assets") +- [Robbie Trencheny (@robbiet480)](https://github.com/robbiet480 "1317 total commits to the home-assistant organization, 646 commits to home-assistant-iOS, 259 commits to home-assistant, 249 commits to home-assistant.github.io, 92 commits to homebridge-homeassistant, 15 commits to home-assistant-polymer, 9 commits to hubot-home-assistant, 8 commits to Analytics-Receiver, 6 commits to netdisco, 3 commits to home-assistant-js, 3 commits to organization, 3 commits to hassbot, 3 commits to appdaemon, 3 commits to hadashboard, 3 commits to scenegen, 3 commits to home-assistant-js-websocket, 2 commits to LabelBot, 2 commits to fabric-home-assistant, 2 commits to home-assistant-notebooks, 2 commits to lambda-home-assistant-github, 2 commits to home-assistant-assets, 2 commits to micropython-home-assistant") +- [Robert (@metbril)](https://github.com/metbril "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") +- [Robert Schütz (@dotlambda)](https://github.com/dotlambda "2 total commits to the home-assistant organization, 1 commit to appdaemon, 1 commit to netdisco") +- [Robin (@robmarkcole)](https://github.com/robmarkcole "30 total commits to the home-assistant organization, 20 commits to home-assistant.github.io, 9 commits to home-assistant, 1 commit to home-assistant-assets") - [Robin Laurén (@llauren)](https://github.com/llauren "1 total commits to the home-assistant organization, 1 commit to appdaemon") - [Roddie Hasan (@eiddor)](https://github.com/eiddor "6 total commits to the home-assistant organization, 6 commits to home-assistant.github.io") - [Roi Dayan (@roidayan)](https://github.com/roidayan "6 total commits to the home-assistant organization, 6 commits to home-assistant") @@ -755,6 +755,7 @@ This page contains a list of people who have contributed in one way or another t - [Ryan McLean (@ryanm101)](https://github.com/ryanm101 "92 total commits to the home-assistant organization, 70 commits to hassio-cli, 16 commits to home-assistant, 6 commits to home-assistant.github.io") - [Ryan Turner (@turnrye)](https://github.com/turnrye "6 total commits to the home-assistant organization, 6 commits to home-assistant") - [Sabesto (@Sabesto)](https://github.com/Sabesto "3 total commits to the home-assistant organization, 3 commits to home-assistant") +- [Sacha Telgenhof (@stelgenhof)](https://github.com/stelgenhof "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [Sam Holmes (@sam3d)](https://github.com/sam3d "4 total commits to the home-assistant organization, 4 commits to pi-gen") - [sam-io (@sam-io)](https://github.com/sam-io "3 total commits to the home-assistant organization, 3 commits to home-assistant") - [sander76 (@sander76)](https://github.com/sander76 "41 total commits to the home-assistant organization, 37 commits to home-assistant, 4 commits to home-assistant.github.io") @@ -767,7 +768,7 @@ This page contains a list of people who have contributed in one way or another t - [Sean Wilson (@swilson)](https://github.com/swilson "4 total commits to the home-assistant organization, 3 commits to home-assistant, 1 commit to home-assistant-polymer") - [Sebastian (@sebk-666)](https://github.com/sebk-666 "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [Sebastian (@sgso)](https://github.com/sgso "3 total commits to the home-assistant organization, 3 commits to libcoap") -- [Sebastian Muszynski (@syssi)](https://github.com/syssi "84 total commits to the home-assistant organization, 50 commits to home-assistant, 32 commits to home-assistant.github.io, 2 commits to home-assistant-polymer") +- [Sebastian Muszynski (@syssi)](https://github.com/syssi "97 total commits to the home-assistant organization, 58 commits to home-assistant, 36 commits to home-assistant.github.io, 2 commits to home-assistant-polymer, 1 commit to netdisco") - [Sebastian von Minckwitz (@teodoc)](https://github.com/teodoc "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") - [Semir Patel (@analogue)](https://github.com/analogue "2 total commits to the home-assistant organization, 2 commits to appdaemon") - [Sergey Isachenko (@zabuldon)](https://github.com/zabuldon "9 total commits to the home-assistant organization, 9 commits to home-assistant") @@ -802,7 +803,7 @@ This page contains a list of people who have contributed in one way or another t - [Ted Drain (@TD22057)](https://github.com/TD22057 "4 total commits to the home-assistant organization, 4 commits to home-assistant") - [tedstriker (@tedstriker)](https://github.com/tedstriker "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [Teemu Mikkonen (@T3m3z)](https://github.com/T3m3z "3 total commits to the home-assistant organization, 3 commits to home-assistant") -- [Teemu R. (@rytilahti)](https://github.com/rytilahti "52 total commits to the home-assistant organization, 39 commits to home-assistant, 9 commits to home-assistant.github.io, 4 commits to netdisco") +- [Teemu R. (@rytilahti)](https://github.com/rytilahti "53 total commits to the home-assistant organization, 40 commits to home-assistant, 9 commits to home-assistant.github.io, 4 commits to netdisco") - [Teguh Sobirin (@tjstyle)](https://github.com/tjstyle "2 total commits to the home-assistant organization, 2 commits to pi-gen") - [Tentoe (@Tentoe)](https://github.com/Tentoe "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") - [Theb-1 (@Theb-1)](https://github.com/Theb-1 "5 total commits to the home-assistant organization, 5 commits to home-assistant") @@ -829,10 +830,11 @@ This page contains a list of people who have contributed in one way or another t - [tleegaard (@tleegaard)](https://github.com/tleegaard "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") - [Tobie Booth (@tobiebooth)](https://github.com/tobiebooth "4 total commits to the home-assistant organization, 3 commits to home-assistant, 1 commit to home-assistant-polymer") - [Toby Gray (@tobygray)](https://github.com/tobygray "3 total commits to the home-assistant organization, 3 commits to home-assistant") -- [Tod Schmidt (@tschmidty69)](https://github.com/tschmidty69 "20 total commits to the home-assistant organization, 16 commits to home-assistant, 3 commits to home-assistant.github.io, 1 commit to hassio-addons") +- [Tod Schmidt (@tschmidty69)](https://github.com/tschmidty69 "22 total commits to the home-assistant organization, 17 commits to home-assistant, 4 commits to home-assistant.github.io, 1 commit to hassio-addons") - [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 "3 total commits to the home-assistant organization, 3 commits to home-assistant") - [Tom Duijf (@tomduijf)](https://github.com/tomduijf "70 total commits to the home-assistant organization, 53 commits to home-assistant, 9 commits to home-assistant.github.io, 6 commits to home-assistant-polymer, 2 commits to netdisco") +- [Tom Harris (@teharris1)](https://github.com/teharris1 "4 total commits to the home-assistant organization, 4 commits to home-assistant") - [Tom Hoover (@tomhoover)](https://github.com/tomhoover "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [Tom Matheussen (@Tommatheussen)](https://github.com/Tommatheussen "13 total commits to the home-assistant organization, 6 commits to home-assistant, 4 commits to home-assistant-polymer, 3 commits to home-assistant.github.io") - [Tom Usher (@tomusher)](https://github.com/tomusher "1 total commits to the home-assistant organization, 1 commit to netdisco") @@ -860,7 +862,7 @@ This page contains a list of people who have contributed in one way or another t - [Victor Cerutti (@victorcerutti)](https://github.com/victorcerutti "3 total commits to the home-assistant organization, 3 commits to home-assistant-polymer") - [Viet Dzung (@dzungpv)](https://github.com/dzungpv "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") - [Vignesh Venkat (@vickyg3)](https://github.com/vickyg3 "9 total commits to the home-assistant organization, 5 commits to home-assistant, 4 commits to home-assistant.github.io") -- [Ville Skyttä (@scop)](https://github.com/scop "32 total commits to the home-assistant organization, 17 commits to home-assistant, 6 commits to home-assistant.github.io, 4 commits to netdisco, 2 commits to home-assistant-polymer, 2 commits to hassio-build, 1 commit to hassio-addons") +- [Ville Skyttä (@scop)](https://github.com/scop "38 total commits to the home-assistant organization, 18 commits to home-assistant, 9 commits to home-assistant.github.io, 4 commits to netdisco, 3 commits to hassio-addons, 2 commits to home-assistant-polymer, 2 commits to hassio-build") - [viswa-swami (@viswa-swami)](https://github.com/viswa-swami "9 total commits to the home-assistant organization, 9 commits to home-assistant") - [Vlad Korniev (@vkorn)](https://github.com/vkorn "1 total commits to the home-assistant organization, 1 commit to hassio-build") - [vllungu (@vllungu)](https://github.com/vllungu "3 total commits to the home-assistant organization, 3 commits to libcoap") @@ -887,9 +889,9 @@ This page contains a list of people who have contributed in one way or another t - [Zhao Lu (@zlu)](https://github.com/zlu "4 total commits to the home-assistant organization, 4 commits to home-assistant.github.io") - [Zio Tibia (@ziotibia81)](https://github.com/ziotibia81 "12 total commits to the home-assistant organization, 7 commits to home-assistant.github.io, 5 commits to home-assistant") - [Zorks (@Zorks)](https://github.com/Zorks "5 total commits to the home-assistant organization, 5 commits to home-assistant.github.io") -- [Åskar Andersson (@olskar)](https://github.com/olskar "6 total commits to the home-assistant organization, 5 commits to home-assistant.github.io, 1 commit to hassbian-scripts") +- [Åskar Andersson (@olskar)](https://github.com/olskar "9 total commits to the home-assistant organization, 5 commits to home-assistant.github.io, 3 commits to home-assistant, 1 commit to hassbian-scripts") This page is irregularly updated using the [`credits_generator` tool](https://github.com/home-assistant/home-assistant.github.io/tree/next/credits_generator). If you think that you are missing, please let us know. -This page was last updated Thursday, March 22nd 2018, 7:54:30 am UTC. +This page was last updated Saturday, March 31st 2018, 9:06:17 am UTC. From 3a94dc98c47ebd2af88e882bf74f35433fa9a5a4 Mon Sep 17 00:00:00 2001 From: Albert Lee Date: Sat, 31 Mar 2018 04:08:15 -0500 Subject: [PATCH 737/993] Escape special characters in credits (#5064) --- credits_generator/update_credits.js | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/credits_generator/update_credits.js b/credits_generator/update_credits.js index d850ccaee9..3cfab7a9e2 100644 --- a/credits_generator/update_credits.js +++ b/credits_generator/update_credits.js @@ -58,7 +58,12 @@ github.repos.getForOrg({ cb(err); return; } - if(userInfo.login == 'RubenKelevra') userInfo.name = 'RubenKelevra'; // ugh, because his name is `@RubenKelevra` + if (userInfo.name) { + userInfo.name = userInfo.name.replace(/^@/, '') + .replace(//g, '>') + .replace(/[\\`*_{}[\]()#+-.!~|]/g, '\\$&'); + } usersMap[login].info.name = userInfo.name || userInfo.login; usersMap[login].info.username = userInfo.login; cb(); From 0bdaf10a387eda2753cd0c993ac08edd0b918608 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Sat, 31 Mar 2018 12:09:14 +0200 Subject: [PATCH 738/993] Update --- source/developers/credits.markdown | 78 +++++++++++++++--------------- 1 file changed, 39 insertions(+), 39 deletions(-) diff --git a/source/developers/credits.markdown b/source/developers/credits.markdown index 43a2ec0dea..0fa372b00f 100644 --- a/source/developers/credits.markdown +++ b/source/developers/credits.markdown @@ -2,7 +2,7 @@ layout: page title: "Credits" description: "Credits for the developers who contributed to Home Assistant." -date: 2018-03-31 09:06:17 +0000 +date: 2018-03-31 09:09:02 +0000 sidebar: true comments: false sharing: true @@ -13,7 +13,7 @@ This page contains a list of people who have contributed in one way or another t ### {% linkable_title Author %} -- [Paulus Schoutsen (@balloob)](https://github.com/balloob "6522 total commits to the home-assistant organization, 3835 commits to home-assistant, 1426 commits to home-assistant.github.io, 750 commits to home-assistant-polymer, 244 commits to home-assistant-js, 122 commits to netdisco, 46 commits to home-assistant-js-websocket, 31 commits to hass-release, 17 commits to LabelBot, 15 commits to home-assistant-assets, 8 commits to example-custom-config, 7 commits to micropython-home-assistant, 5 commits to hassio, 3 commits to hassio-addons, 2 commits to issue-bot, 2 commits to hassio-build, 2 commits to hassio-addons-example, 2 commits to home-assistant-iOS, 2 commits to lambda-home-assistant-github, 1 commit to home-assistant-notebooks, 1 commit to warrant, 1 commit to architecture") +- [Paulus Schoutsen (@balloob)](https://github.com/balloob "6522 total commits to the home-assistant organization, 3835 commits to home-assistant, 1426 commits to home-assistant.github.io, 750 commits to home-assistant-polymer, 244 commits to home-assistant-js, 122 commits to netdisco, 46 commits to home-assistant-js-websocket, 31 commits to hass-release, 17 commits to LabelBot, 15 commits to home-assistant-assets, 8 commits to example-custom-config, 7 commits to micropython-home-assistant, 5 commits to hassio, 3 commits to hassio-addons, 2 commits to hassio-addons-example, 2 commits to hassio-build, 2 commits to issue-bot, 2 commits to lambda-home-assistant-github, 2 commits to home-assistant-iOS, 1 commit to architecture, 1 commit to home-assistant-notebooks, 1 commit to warrant") ### {% linkable_title Contributors %} @@ -37,7 +37,7 @@ This page contains a list of people who have contributed in one way or another t - [akloeckner (@akloeckner)](https://github.com/akloeckner "3 total commits to the home-assistant organization, 3 commits to home-assistant") - [Alan Bowman (@alanbowman)](https://github.com/alanbowman "4 total commits to the home-assistant organization, 4 commits to home-assistant") - [Alan Fischer (@alanfischer)](https://github.com/alanfischer "20 total commits to the home-assistant organization, 16 commits to home-assistant, 4 commits to home-assistant.github.io") -- [Alan Tse (@alandtse)](https://github.com/alandtse "4 total commits to the home-assistant organization, 2 commits to home-assistant, 2 commits to home-assistant.github.io") +- [Alan Tse (@alandtse)](https://github.com/alandtse "4 total commits to the home-assistant organization, 2 commits to home-assistant.github.io, 2 commits to home-assistant") - [Alasdair Nicol (@alasdairnicol)](https://github.com/alasdairnicol "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [Albatross (@DyingAlbatross)](https://github.com/DyingAlbatross "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [Albert Lee (@trisk)](https://github.com/trisk "16 total commits to the home-assistant organization, 11 commits to home-assistant, 5 commits to home-assistant.github.io") @@ -66,7 +66,7 @@ This page contains a list of people who have contributed in one way or another t - [Andreas Jacobsen (@andreasjacobsen93)](https://github.com/andreasjacobsen93 "8 total commits to the home-assistant organization, 6 commits to home-assistant.github.io, 2 commits to hassio-addons") - [Andreas Rammhold (@andir)](https://github.com/andir "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") - [Andreas Renberg (@IQAndreas)](https://github.com/IQAndreas "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") -- [Andreea-Daniela Ene (@AndreeaEne)](https://github.com/AndreeaEne "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") +- [Andreea\-Daniela Ene (@AndreeaEne)](https://github.com/AndreeaEne "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [Andrei Pop (@andreipop2005)](https://github.com/andreipop2005 "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Andrej Friesen (@ajfriesen)](https://github.com/ajfriesen "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [Andrew (@aneisch)](https://github.com/aneisch "5 total commits to the home-assistant organization, 5 commits to home-assistant.github.io") @@ -85,14 +85,14 @@ This page contains a list of people who have contributed in one way or another t - [anotherthomas (@anotherthomas)](https://github.com/anotherthomas "1 total commits to the home-assistant organization, 1 commit to hassio-addons") - [Anthony Arnaud (@aarnaud)](https://github.com/aarnaud "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Anthony Hughes (@tony2nite)](https://github.com/tony2nite "1 total commits to the home-assistant organization, 1 commit to netdisco") -- [Antoine Bertin (@Diaoul)](https://github.com/Diaoul "5 total commits to the home-assistant organization, 2 commits to home-assistant, 2 commits to home-assistant.github.io, 1 commit to home-assistant-polymer") +- [Antoine Bertin (@Diaoul)](https://github.com/Diaoul "5 total commits to the home-assistant organization, 2 commits to home-assistant.github.io, 2 commits to home-assistant, 1 commit to home-assistant-polymer") - [Anton Glukhov (@toxxin)](https://github.com/toxxin "1 total commits to the home-assistant organization, 1 commit to libcoap") - [Anton Lundin (@glance-)](https://github.com/glance- "8 total commits to the home-assistant organization, 7 commits to home-assistant, 1 commit to netdisco") - [Anton Sarukhanov (@antsar)](https://github.com/antsar "6 total commits to the home-assistant organization, 3 commits to home-assistant, 2 commits to home-assistant.github.io, 1 commit to home-assistant-polymer") - [Antoni K (@Antoni-K)](https://github.com/Antoni-K "1 total commits to the home-assistant organization, 1 commit to hassbian-scripts") - [apo-mak (@apo-mak)](https://github.com/apo-mak "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") - [arcsur (@arcsur)](https://github.com/arcsur "3 total commits to the home-assistant organization, 3 commits to home-assistant") -- [Ardetus (@Ardetus)](https://github.com/Ardetus "4 total commits to the home-assistant organization, 2 commits to home-assistant, 2 commits to home-assistant.github.io") +- [Ardetus (@Ardetus)](https://github.com/Ardetus "4 total commits to the home-assistant organization, 2 commits to home-assistant.github.io, 2 commits to home-assistant") - [Ardi Mehist (@omgapuppy)](https://github.com/omgapuppy "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [Ari Lotter (@arilotter)](https://github.com/arilotter "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [arjenfvellinga (@arjenfvellinga)](https://github.com/arjenfvellinga "5 total commits to the home-assistant organization, 5 commits to home-assistant.github.io") @@ -171,7 +171,7 @@ This page contains a list of people who have contributed in one way or another t - [Caleb (@finish06)](https://github.com/finish06 "7 total commits to the home-assistant organization, 7 commits to home-assistant") - [Cameron Bulock (@cbulock)](https://github.com/cbulock "5 total commits to the home-assistant organization, 2 commits to home-assistant, 2 commits to home-assistant.github.io, 1 commit to netdisco") - [Cameron Moore (@moorereason)](https://github.com/moorereason "3 total commits to the home-assistant organization, 3 commits to hassio-cli") -- [Carlo Costanzo (@CCOSTAN)](https://github.com/CCOSTAN "96 total commits to the home-assistant organization, 88 commits to home-assistant.github.io, 5 commits to home-assistant, 1 commit to fabric-home-assistant, 1 commit to homebridge-homeassistant, 1 commit to hassbian-scripts") +- [Carlo Costanzo (@CCOSTAN)](https://github.com/CCOSTAN "96 total commits to the home-assistant organization, 88 commits to home-assistant.github.io, 5 commits to home-assistant, 1 commit to fabric-home-assistant, 1 commit to hassbian-scripts, 1 commit to homebridge-homeassistant") - [carlosmgr (@carlosmgr)](https://github.com/carlosmgr "6 total commits to the home-assistant organization, 6 commits to home-assistant") - [Carter (@BluGeni)](https://github.com/BluGeni "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [cdce8p (@cdce8p)](https://github.com/cdce8p "69 total commits to the home-assistant organization, 43 commits to home-assistant, 22 commits to home-assistant.github.io, 4 commits to home-assistant-polymer") @@ -185,8 +185,8 @@ This page contains a list of people who have contributed in one way or another t - [Charles Garwood (@cgarwood)](https://github.com/cgarwood "17 total commits to the home-assistant organization, 11 commits to home-assistant.github.io, 6 commits to home-assistant") - [Charles Spirakis (@srcLurker)](https://github.com/srcLurker "8 total commits to the home-assistant organization, 5 commits to home-assistant, 3 commits to home-assistant.github.io") - [Chayoung You (@yous)](https://github.com/yous "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") -- [Check your git settings! (@invalid-email-address)](https://github.com/invalid-email-address "1 total commits to the home-assistant organization, 1 commit to libcoap") -- [Chia-liang Kao (@clkao)](https://github.com/clkao "2 total commits to the home-assistant organization, 2 commits to home-assistant") +- [Check your git settings\! (@invalid-email-address)](https://github.com/invalid-email-address "1 total commits to the home-assistant organization, 1 commit to libcoap") +- [Chia\-liang Kao (@clkao)](https://github.com/clkao "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Chris (@chennin)](https://github.com/chennin "15 total commits to the home-assistant organization, 11 commits to home-assistant.github.io, 4 commits to home-assistant") - [Chris Aloi (@ctaloi)](https://github.com/ctaloi "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [Chris Crowe (@chriscrowe)](https://github.com/chriscrowe "3 total commits to the home-assistant organization, 3 commits to homebridge-homeassistant") @@ -211,7 +211,7 @@ This page contains a list of people who have contributed in one way or another t - [Ciquattro (@CiquattroFPV)](https://github.com/CiquattroFPV "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [citruz (@citruz)](https://github.com/citruz "3 total commits to the home-assistant organization, 3 commits to home-assistant") - [clach04 (@clach04)](https://github.com/clach04 "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") -- [Claus F. Strasburger (@cfstras)](https://github.com/cfstras "5 total commits to the home-assistant organization, 5 commits to pi-gen") +- [Claus F\. Strasburger (@cfstras)](https://github.com/cfstras "5 total commits to the home-assistant organization, 5 commits to pi-gen") - [cogneato (@cogneato)](https://github.com/cogneato "15 total commits to the home-assistant organization, 15 commits to home-assistant.github.io") - [Colin Dunn (@colindunn)](https://github.com/colindunn "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Colin O'Dell (@colinodell)](https://github.com/colinodell "26 total commits to the home-assistant organization, 15 commits to home-assistant, 11 commits to home-assistant.github.io") @@ -222,7 +222,7 @@ This page contains a list of people who have contributed in one way or another t - [Corban Mailloux (@corbanmailloux)](https://github.com/corbanmailloux "18 total commits to the home-assistant organization, 18 commits to home-assistant.github.io") - [Corey Pauley (@devspacenine)](https://github.com/devspacenine "5 total commits to the home-assistant organization, 3 commits to home-assistant.github.io, 2 commits to home-assistant") - [corneyl (@corneyl)](https://github.com/corneyl "3 total commits to the home-assistant organization, 3 commits to home-assistant") -- [Craig J. Ward (@wardcraigj)](https://github.com/wardcraigj "27 total commits to the home-assistant organization, 20 commits to home-assistant, 7 commits to home-assistant.github.io") +- [Craig J\. Ward (@wardcraigj)](https://github.com/wardcraigj "27 total commits to the home-assistant organization, 20 commits to home-assistant, 7 commits to home-assistant.github.io") - [CTLS (@CTLS)](https://github.com/CTLS "3 total commits to the home-assistant organization, 3 commits to home-assistant") - [CV (@dagobert)](https://github.com/dagobert "4 total commits to the home-assistant organization, 4 commits to home-assistant.github.io") - [cxlwill (@cxlwill)](https://github.com/cxlwill "3 total commits to the home-assistant organization, 2 commits to home-assistant-polymer, 1 commit to hassbian-scripts") @@ -257,7 +257,7 @@ This page contains a list of people who have contributed in one way or another t - [Dave J (@kxtcd950)](https://github.com/kxtcd950 "3 total commits to the home-assistant organization, 3 commits to hassbian-scripts") - [DaveSergeant (@dethpickle)](https://github.com/dethpickle "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [David (@fanaticDavid)](https://github.com/fanaticDavid "16 total commits to the home-assistant organization, 12 commits to home-assistant.github.io, 3 commits to home-assistant, 1 commit to home-assistant-polymer") -- [David (Drew) Jackson (@David-Jackson)](https://github.com/David-Jackson "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") +- [David \(Drew\) Jackson (@David-Jackson)](https://github.com/David-Jackson "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [David De Sloovere (@DavidDeSloovere)](https://github.com/DavidDeSloovere "16 total commits to the home-assistant organization, 16 commits to home-assistant.github.io") - [David Fiel (@dfiel)](https://github.com/dfiel "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [David Grant (@davegravy)](https://github.com/davegravy "6 total commits to the home-assistant organization, 4 commits to home-assistant.github.io, 2 commits to home-assistant") @@ -265,7 +265,7 @@ This page contains a list of people who have contributed in one way or another t - [David Ohayon (@ohayon)](https://github.com/ohayon "3 total commits to the home-assistant organization, 3 commits to issue-bot") - [David Straub (@DavidMStraub)](https://github.com/DavidMStraub "9 total commits to the home-assistant organization, 5 commits to home-assistant, 4 commits to home-assistant.github.io") - [David Wang (@dcwangmit01)](https://github.com/dcwangmit01 "2 total commits to the home-assistant organization, 2 commits to pi-gen") -- [David-Leon Pohl (@DavidLP)](https://github.com/DavidLP "15 total commits to the home-assistant organization, 13 commits to home-assistant, 2 commits to home-assistant.github.io") +- [David\-Leon Pohl (@DavidLP)](https://github.com/DavidLP "15 total commits to the home-assistant organization, 13 commits to home-assistant, 2 commits to home-assistant.github.io") - [davidedmundson (@davidedmundson)](https://github.com/davidedmundson "7 total commits to the home-assistant organization, 4 commits to home-assistant, 3 commits to home-assistant.github.io") - [Dawid Wróbel (@wrobelda)](https://github.com/wrobelda "5 total commits to the home-assistant organization, 5 commits to home-assistant.github.io") - [Dean Camera (@abcminiuser)](https://github.com/abcminiuser "4 total commits to the home-assistant organization, 2 commits to home-assistant, 2 commits to home-assistant.github.io") @@ -304,7 +304,7 @@ This page contains a list of people who have contributed in one way or another t - [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 "115 total commits to the home-assistant organization, 99 commits to home-assistant, 13 commits to home-assistant.github.io, 3 commits to netdisco") -- [Erik-jan Riemers (@riemers)](https://github.com/riemers "14 total commits to the home-assistant organization, 13 commits to home-assistant.github.io, 1 commit to hassbian-scripts") +- [Erik\-jan Riemers (@riemers)](https://github.com/riemers "14 total commits to the home-assistant organization, 13 commits to home-assistant.github.io, 1 commit to hassbian-scripts") - [escoand (@escoand)](https://github.com/escoand "4 total commits to the home-assistant organization, 4 commits to home-assistant") - [Ettienne Gous (@ettiennegous)](https://github.com/ettiennegous "2 total commits to the home-assistant organization, 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") @@ -323,12 +323,12 @@ This page contains a list of people who have contributed in one way or another t - [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") - [Filip Bednárik (@drndos)](https://github.com/drndos "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [Finbarr Brady (@fbradyirl)](https://github.com/fbradyirl "8 total commits to the home-assistant organization, 8 commits to home-assistant") -- [Florian Holzapfel (@florianholzapfel)](https://github.com/florianholzapfel "11 total commits to the home-assistant organization, 4 commits to home-assistant, 4 commits to home-assistant.github.io, 3 commits to netdisco") +- [Florian Holzapfel (@florianholzapfel)](https://github.com/florianholzapfel "11 total commits to the home-assistant organization, 4 commits to home-assistant.github.io, 4 commits to home-assistant, 3 commits to netdisco") - [Florian Klien (@flowolf)](https://github.com/flowolf "17 total commits to the home-assistant organization, 14 commits to home-assistant.github.io, 3 commits to home-assistant") - [florianj1 (@florianj1)](https://github.com/florianj1 "1 total commits to the home-assistant organization, 1 commit to hassio") -- [florincosta (@florincosta)](https://github.com/florincosta "6 total commits to the home-assistant organization, 3 commits to home-assistant, 3 commits to home-assistant.github.io") +- [florincosta (@florincosta)](https://github.com/florincosta "6 total commits to the home-assistant organization, 3 commits to home-assistant.github.io, 3 commits to home-assistant") - [Fonta (@f0nt4)](https://github.com/f0nt4 "4 total commits to the home-assistant organization, 4 commits to home-assistant.github.io") -- [Franck Nijhof (@frenck)](https://github.com/frenck "30 total commits to the home-assistant organization, 21 commits to home-assistant.github.io, 5 commits to hassio, 2 commits to home-assistant-polymer, 1 commit to appdaemon, 1 commit to hassio-cli") +- [Franck Nijhof (@frenck)](https://github.com/frenck "30 total commits to the home-assistant organization, 21 commits to home-assistant.github.io, 5 commits to hassio, 2 commits to home-assistant-polymer, 1 commit to hassio-cli, 1 commit to appdaemon") - [Frank (@syphernl)](https://github.com/syphernl "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") - [Frantz (@rofrantz)](https://github.com/rofrantz "16 total commits to the home-assistant organization, 9 commits to home-assistant, 4 commits to home-assistant.github.io, 3 commits to netdisco") - [Frederic Hemberger (@fhemberger)](https://github.com/fhemberger "93 total commits to the home-assistant organization, 93 commits to home-assistant.github.io") @@ -340,7 +340,7 @@ This page contains a list of people who have contributed in one way or another t - [Gabor SZOLLOSI (@szogi)](https://github.com/szogi "3 total commits to the home-assistant organization, 2 commits to home-assistant, 1 commit to appdaemon") - [GadgetReactor (@GadgetReactor)](https://github.com/GadgetReactor "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Geoff Norton (@kangaroo)](https://github.com/kangaroo "14 total commits to the home-assistant organization, 14 commits to home-assistant") -- [George.M (@nodinosaur)](https://github.com/nodinosaur "8 total commits to the home-assistant organization, 6 commits to home-assistant.github.io, 2 commits to home-assistant") +- [George\.M (@nodinosaur)](https://github.com/nodinosaur "8 total commits to the home-assistant organization, 6 commits to home-assistant.github.io, 2 commits to home-assistant") - [Georgi Kirichkov (@kirichkov)](https://github.com/kirichkov "17 total commits to the home-assistant organization, 11 commits to home-assistant.github.io, 5 commits to home-assistant, 1 commit to appdaemon") - [Georgi Yanev (@jumpalottahigh)](https://github.com/jumpalottahigh "6 total commits to the home-assistant organization, 4 commits to home-assistant.github.io, 2 commits to home-assistant-polymer") - [Georgii Staroselskii (@staroselskii)](https://github.com/staroselskii "1 total commits to the home-assistant organization, 1 commit to pi-gen") @@ -359,7 +359,7 @@ This page contains a list of people who have contributed in one way or another t - [Greg Laabs (@OverloadUT)](https://github.com/OverloadUT "14 total commits to the home-assistant organization, 11 commits to home-assistant, 3 commits to home-assistant.github.io") - [Greg MacLellan (@gregmac)](https://github.com/gregmac "1 total commits to the home-assistant organization, 1 commit to pi-gen") - [Greg Stevenson (@gstevenson)](https://github.com/gstevenson "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") -- [Greg. A. (@gautric)](https://github.com/gautric "2 total commits to the home-assistant organization, 2 commits to home-assistant") +- [Greg\. A\. (@gautric)](https://github.com/gautric "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [GTH (@gunnarhelgason)](https://github.com/gunnarhelgason "2 total commits to the home-assistant organization, 2 commits to appdaemon") - [Guillaume Rischard (@grischard)](https://github.com/grischard "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") - [Gustav Ahlberg (@Gyran)](https://github.com/Gyran "20 total commits to the home-assistant organization, 20 commits to home-assistant") @@ -386,7 +386,7 @@ This page contains a list of people who have contributed in one way or another t - [Hydreliox (@HydrelioxGitHub)](https://github.com/HydrelioxGitHub "46 total commits to the home-assistant organization, 34 commits to home-assistant, 12 commits to home-assistant.github.io") - [Ian Copp (@icopp)](https://github.com/icopp "3 total commits to the home-assistant organization, 3 commits to home-assistant") - [ianj001 (@ianj001)](https://github.com/ianj001 "7 total commits to the home-assistant organization, 7 commits to home-assistant.github.io") -- [icovada (@icovada)](https://github.com/icovada "6 total commits to the home-assistant organization, 3 commits to home-assistant, 3 commits to home-assistant.github.io") +- [icovada (@icovada)](https://github.com/icovada "6 total commits to the home-assistant organization, 3 commits to home-assistant.github.io, 3 commits to home-assistant") - [Igor Bernstein (@igorbernstein2)](https://github.com/igorbernstein2 "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Igor Shults (@ishults)](https://github.com/ishults "12 total commits to the home-assistant organization, 6 commits to home-assistant, 5 commits to home-assistant.github.io, 1 commit to home-assistant-polymer") - [Ioan Loosley (@ioangogo)](https://github.com/ioangogo "10 total commits to the home-assistant organization, 10 commits to home-assistant.github.io") @@ -414,7 +414,7 @@ This page contains a list of people who have contributed in one way or another t - [Jan Willhaus (@janwh)](https://github.com/janwh "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [Janne Grunau (@jannau)](https://github.com/jannau "3 total commits to the home-assistant organization, 3 commits to home-assistant") - [Jared Beckham (@jtbeckha)](https://github.com/jtbeckha "2 total commits to the home-assistant organization, 2 commits to home-assistant") -- [Jared J. (@jjensn)](https://github.com/jjensn "1 total commits to the home-assistant organization, 1 commit to netdisco") +- [Jared J\. (@jjensn)](https://github.com/jjensn "1 total commits to the home-assistant organization, 1 commit to netdisco") - [Jason Carter (@JasonCarter80)](https://github.com/JasonCarter80 "7 total commits to the home-assistant organization, 4 commits to home-assistant, 3 commits to home-assistant.github.io") - [Jason Hite (@jasonmhite)](https://github.com/jasonmhite "6 total commits to the home-assistant organization, 6 commits to appdaemon") - [Javier González Calleja (@gonzalezcalleja)](https://github.com/gonzalezcalleja "2 total commits to the home-assistant organization, 2 commits to home-assistant") @@ -422,8 +422,8 @@ This page contains a list of people who have contributed in one way or another t - [JAYMAN-ATX (@JAYMAN-ATX)](https://github.com/JAYMAN-ATX "2 total commits to the home-assistant organization, 2 commits to homebridge-homeassistant") - [JC Connell (@jcconnell)](https://github.com/jcconnell "7 total commits to the home-assistant organization, 4 commits to home-assistant.github.io, 3 commits to home-assistant") - [Jean Regisser (@jeanregisser)](https://github.com/jeanregisser "2 total commits to the home-assistant organization, 2 commits to home-assistant") -- [Jean-Michel Julien (@KurdyMalloy)](https://github.com/KurdyMalloy "1 total commits to the home-assistant organization, 1 commit to libcoap") -- [Jean-Philippe Bouillot (@Jypy)](https://github.com/Jypy "2 total commits to the home-assistant organization, 2 commits to home-assistant") +- [Jean\-Michel Julien (@KurdyMalloy)](https://github.com/KurdyMalloy "1 total commits to the home-assistant organization, 1 commit to libcoap") +- [Jean\-Philippe Bouillot (@Jypy)](https://github.com/Jypy "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Jeff McGehee (@jlmcgehee21)](https://github.com/jlmcgehee21 "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Jeff Schroeder (@SEJeff)](https://github.com/SEJeff "17 total commits to the home-assistant organization, 17 commits to home-assistant") - [Jeff Wilson (@jawilson)](https://github.com/jawilson "24 total commits to the home-assistant organization, 19 commits to home-assistant, 5 commits to home-assistant.github.io") @@ -455,7 +455,7 @@ This page contains a list of people who have contributed in one way or another t - [Johan Haals (@jhaals)](https://github.com/jhaals "1 total commits to the home-assistant organization, 1 commit to appdaemon") - [Johan van der Kuijl (@Rubyan)](https://github.com/Rubyan "4 total commits to the home-assistant organization, 3 commits to home-assistant.github.io, 1 commit to appdaemon") - [Johann Kellerman (@kellerza)](https://github.com/kellerza "169 total commits to the home-assistant organization, 139 commits to home-assistant, 30 commits to home-assistant.github.io") -- [Johannes K. (@roadrash2108)](https://github.com/roadrash2108 "4 total commits to the home-assistant organization, 4 commits to home-assistant.github.io") +- [Johannes K\. (@roadrash2108)](https://github.com/roadrash2108 "4 total commits to the home-assistant organization, 4 commits to home-assistant.github.io") - [John (@J-C-B)](https://github.com/J-C-B "5 total commits to the home-assistant organization, 5 commits to home-assistant.github.io") - [John Allen (@jra3)](https://github.com/jra3 "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [John Arild Berentsen (@turbokongen)](https://github.com/turbokongen "202 total commits to the home-assistant organization, 150 commits to home-assistant, 37 commits to home-assistant.github.io, 15 commits to home-assistant-polymer") @@ -554,7 +554,7 @@ This page contains a list of people who have contributed in one way or another t - [Marc Forth (@mf-social)](https://github.com/mf-social "25 total commits to the home-assistant organization, 24 commits to home-assistant.github.io, 1 commit to fabric-home-assistant") - [Marc Khouri (@ubnt-marc-khouri)](https://github.com/ubnt-marc-khouri "2 total commits to the home-assistant organization, 2 commits to home-assistant-polymer") - [Marc Pabst (@mxtra)](https://github.com/mxtra "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") -- [Marc Plano-Lesay (@Kernald)](https://github.com/Kernald "12 total commits to the home-assistant organization, 10 commits to home-assistant.github.io, 2 commits to home-assistant") +- [Marc Plano\-Lesay (@Kernald)](https://github.com/Kernald "12 total commits to the home-assistant organization, 10 commits to home-assistant.github.io, 2 commits to home-assistant") - [Marcel030nl (@Marcel030nl)](https://github.com/Marcel030nl "5 total commits to the home-assistant organization, 5 commits to home-assistant.github.io") - [Marcelo Moreira de Mello (@tchellomello)](https://github.com/tchellomello "140 total commits to the home-assistant organization, 77 commits to home-assistant, 61 commits to home-assistant.github.io, 1 commit to home-assistant-assets, 1 commit to home-assistant-polymer") - [Marcin Jaworski (@yawor)](https://github.com/yawor "12 total commits to the home-assistant organization, 12 commits to appdaemon") @@ -581,7 +581,7 @@ This page contains a list of people who have contributed in one way or another t - [Martokk (@martokk)](https://github.com/martokk "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [Mateusz Drab (@mateuszdrab)](https://github.com/mateuszdrab "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Mathew Peterson (@mathewpeterson)](https://github.com/mathewpeterson "1 total commits to the home-assistant organization, 1 commit to homebridge-homeassistant") -- [Matt N. (@mnoorenberghe)](https://github.com/mnoorenberghe "53 total commits to the home-assistant organization, 25 commits to home-assistant-iOS, 17 commits to home-assistant.github.io, 9 commits to home-assistant, 1 commit to homebridge-homeassistant, 1 commit to home-assistant-polymer") +- [Matt N\. (@mnoorenberghe)](https://github.com/mnoorenberghe "53 total commits to the home-assistant organization, 25 commits to home-assistant-iOS, 17 commits to home-assistant.github.io, 9 commits to home-assistant, 1 commit to homebridge-homeassistant, 1 commit to home-assistant-polymer") - [Matt Rogers (@rogersmj)](https://github.com/rogersmj "20 total commits to the home-assistant organization, 20 commits to hadashboard") - [Matt Schmitt (@schmittx)](https://github.com/schmittx "66 total commits to the home-assistant organization, 52 commits to homebridge-homeassistant, 7 commits to home-assistant, 4 commits to home-assistant.github.io, 3 commits to home-assistant-polymer") - [Matt White (@mw-white)](https://github.com/mw-white "10 total commits to the home-assistant organization, 5 commits to home-assistant.github.io, 5 commits to home-assistant") @@ -620,7 +620,7 @@ This page contains a list of people who have contributed in one way or another t - [Mike O'Driscoll (@mikeodr)](https://github.com/mikeodr "8 total commits to the home-assistant organization, 5 commits to home-assistant.github.io, 3 commits to home-assistant") - [Mike Roberts (@m-roberts)](https://github.com/m-roberts "1 total commits to the home-assistant organization, 1 commit to pi-gen") - [Mikkel Høgh (@mikl)](https://github.com/mikl "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") -- [Milan V. (@milanvo)](https://github.com/milanvo "18 total commits to the home-assistant organization, 10 commits to home-assistant, 7 commits to home-assistant.github.io, 1 commit to home-assistant-polymer") +- [Milan V\. (@milanvo)](https://github.com/milanvo "18 total commits to the home-assistant organization, 10 commits to home-assistant, 7 commits to home-assistant.github.io, 1 commit to home-assistant-polymer") - [miniconfig (@miniconfig)](https://github.com/miniconfig "27 total commits to the home-assistant organization, 20 commits to home-assistant, 7 commits to home-assistant.github.io") - [Minims (@Minims)](https://github.com/Minims "3 total commits to the home-assistant organization, 3 commits to homebridge-homeassistant") - [Mister Wil (@MisterWil)](https://github.com/MisterWil "17 total commits to the home-assistant organization, 11 commits to home-assistant, 6 commits to home-assistant.github.io") @@ -658,8 +658,8 @@ This page contains a list of people who have contributed in one way or another t - [ntalekt (@ntalekt)](https://github.com/ntalekt "6 total commits to the home-assistant organization, 6 commits to home-assistant.github.io") - [Nuno Sousa (@nunofgs)](https://github.com/nunofgs "5 total commits to the home-assistant organization, 4 commits to home-assistant, 1 commit to homebridge-homeassistant") - [obgm (@obgm)](https://github.com/obgm "480 total commits to the home-assistant organization, 480 commits to libcoap") -- [OLD PROFILE! Go to /dennisreimann (@dbloete)](https://github.com/dbloete "5 total commits to the home-assistant organization, 5 commits to home-assistant.github.io") -- [Ole-Kenneth (@olekenneth)](https://github.com/olekenneth "1 total commits to the home-assistant organization, 1 commit to homebridge-homeassistant") +- [OLD PROFILE\! Go to /dennisreimann (@dbloete)](https://github.com/dbloete "5 total commits to the home-assistant organization, 5 commits to home-assistant.github.io") +- [Ole\-Kenneth (@olekenneth)](https://github.com/olekenneth "1 total commits to the home-assistant organization, 1 commit to homebridge-homeassistant") - [Oleksii Serdiuk (@leppa)](https://github.com/leppa "4 total commits to the home-assistant organization, 4 commits to home-assistant") - [Oliv3rDog (@Oliv3rDog)](https://github.com/Oliv3rDog "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [Oliver (@scarface-4711)](https://github.com/scarface-4711 "27 total commits to the home-assistant organization, 17 commits to home-assistant, 9 commits to home-assistant.github.io, 1 commit to netdisco") @@ -701,7 +701,7 @@ This page contains a list of people who have contributed in one way or another t - [Philip Howard (@Gadgetoid)](https://github.com/Gadgetoid "1 total commits to the home-assistant organization, 1 commit to pi-gen") - [Philip Kleimeyer (@philklei)](https://github.com/philklei "4 total commits to the home-assistant organization, 4 commits to home-assistant") - [Philip Lundrigan (@philipbl)](https://github.com/philipbl "65 total commits to the home-assistant organization, 56 commits to home-assistant, 9 commits to home-assistant.github.io") -- [Philip Rosenberg-Watt (@PhilRW)](https://github.com/PhilRW "10 total commits to the home-assistant organization, 7 commits to home-assistant, 3 commits to home-assistant.github.io") +- [Philip Rosenberg\-Watt (@PhilRW)](https://github.com/PhilRW "10 total commits to the home-assistant organization, 7 commits to home-assistant, 3 commits to home-assistant.github.io") - [Philipp Hellmich (@runningman84)](https://github.com/runningman84 "4 total commits to the home-assistant organization, 4 commits to home-assistant.github.io") - [Philipp Schmitt (@pschmitt)](https://github.com/pschmitt "37 total commits to the home-assistant organization, 24 commits to home-assistant, 11 commits to home-assistant.github.io, 1 commit to appdaemon, 1 commit to hassio-build") - [Phill Price (@phillprice)](https://github.com/phillprice "11 total commits to the home-assistant organization, 11 commits to home-assistant.github.io") @@ -729,7 +729,7 @@ This page contains a list of people who have contributed in one way or another t - [rkabadi (@rkabadi)](https://github.com/rkabadi "17 total commits to the home-assistant organization, 17 commits to home-assistant") - [Rob Capellini (@capellini)](https://github.com/capellini "3 total commits to the home-assistant organization, 3 commits to home-assistant") - [Rob Slifka (@rslifka)](https://github.com/rslifka "5 total commits to the home-assistant organization, 5 commits to home-assistant.github.io") -- [Robbie Trencheny (@robbiet480)](https://github.com/robbiet480 "1317 total commits to the home-assistant organization, 646 commits to home-assistant-iOS, 259 commits to home-assistant, 249 commits to home-assistant.github.io, 92 commits to homebridge-homeassistant, 15 commits to home-assistant-polymer, 9 commits to hubot-home-assistant, 8 commits to Analytics-Receiver, 6 commits to netdisco, 3 commits to home-assistant-js, 3 commits to organization, 3 commits to hassbot, 3 commits to appdaemon, 3 commits to hadashboard, 3 commits to scenegen, 3 commits to home-assistant-js-websocket, 2 commits to LabelBot, 2 commits to fabric-home-assistant, 2 commits to home-assistant-notebooks, 2 commits to lambda-home-assistant-github, 2 commits to home-assistant-assets, 2 commits to micropython-home-assistant") +- [Robbie Trencheny (@robbiet480)](https://github.com/robbiet480 "1317 total commits to the home-assistant organization, 646 commits to home-assistant-iOS, 259 commits to home-assistant, 249 commits to home-assistant.github.io, 92 commits to homebridge-homeassistant, 15 commits to home-assistant-polymer, 9 commits to hubot-home-assistant, 8 commits to Analytics-Receiver, 6 commits to netdisco, 3 commits to scenegen, 3 commits to hadashboard, 3 commits to appdaemon, 3 commits to home-assistant-js, 3 commits to organization, 3 commits to home-assistant-js-websocket, 3 commits to hassbot, 2 commits to LabelBot, 2 commits to micropython-home-assistant, 2 commits to fabric-home-assistant, 2 commits to home-assistant-notebooks, 2 commits to lambda-home-assistant-github, 2 commits to home-assistant-assets") - [Robert (@metbril)](https://github.com/metbril "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [Robert Schütz (@dotlambda)](https://github.com/dotlambda "2 total commits to the home-assistant organization, 1 commit to appdaemon, 1 commit to netdisco") - [Robin (@robmarkcole)](https://github.com/robmarkcole "30 total commits to the home-assistant organization, 20 commits to home-assistant.github.io, 9 commits to home-assistant, 1 commit to home-assistant-assets") @@ -782,7 +782,7 @@ This page contains a list of people who have contributed in one way or another t - [Sjors Spoorendonk (@sjorsjes)](https://github.com/sjorsjes "4 total commits to the home-assistant organization, 4 commits to home-assistant.github.io") - [sjoshi10 (@sjoshi10)](https://github.com/sjoshi10 "1 total commits to the home-assistant organization, 1 commit to warrant") - [snizzleorg (@snizzleorg)](https://github.com/snizzleorg "5 total commits to the home-assistant organization, 5 commits to hadashboard") -- [St. John Johnson (@stjohnjohnson)](https://github.com/stjohnjohnson "9 total commits to the home-assistant organization, 5 commits to home-assistant, 4 commits to home-assistant.github.io") +- [St\. John Johnson (@stjohnjohnson)](https://github.com/stjohnjohnson "9 total commits to the home-assistant organization, 5 commits to home-assistant, 4 commits to home-assistant.github.io") - [Stefan Jonasson (@stefan-jonasson)](https://github.com/stefan-jonasson "12 total commits to the home-assistant organization, 8 commits to home-assistant, 4 commits to home-assistant.github.io") - [Stefano Scipioni (@scipioni)](https://github.com/scipioni "3 total commits to the home-assistant organization, 3 commits to home-assistant") - [Steltek (@Steltek)](https://github.com/Steltek "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") @@ -803,7 +803,7 @@ This page contains a list of people who have contributed in one way or another t - [Ted Drain (@TD22057)](https://github.com/TD22057 "4 total commits to the home-assistant organization, 4 commits to home-assistant") - [tedstriker (@tedstriker)](https://github.com/tedstriker "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [Teemu Mikkonen (@T3m3z)](https://github.com/T3m3z "3 total commits to the home-assistant organization, 3 commits to home-assistant") -- [Teemu R. (@rytilahti)](https://github.com/rytilahti "53 total commits to the home-assistant organization, 40 commits to home-assistant, 9 commits to home-assistant.github.io, 4 commits to netdisco") +- [Teemu R\. (@rytilahti)](https://github.com/rytilahti "53 total commits to the home-assistant organization, 40 commits to home-assistant, 9 commits to home-assistant.github.io, 4 commits to netdisco") - [Teguh Sobirin (@tjstyle)](https://github.com/tjstyle "2 total commits to the home-assistant organization, 2 commits to pi-gen") - [Tentoe (@Tentoe)](https://github.com/Tentoe "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") - [Theb-1 (@Theb-1)](https://github.com/Theb-1 "5 total commits to the home-assistant organization, 5 commits to home-assistant") @@ -821,7 +821,7 @@ This page contains a list of people who have contributed in one way or another t - [Thomas Purchas (@thomaspurchas)](https://github.com/thomaspurchas "1 total commits to the home-assistant organization, 1 commit to homebridge-homeassistant") - [Thomas Pötsch (@thp-comnets)](https://github.com/thp-comnets "7 total commits to the home-assistant organization, 7 commits to libcoap") - [thrawnarn (@thrawnarn)](https://github.com/thrawnarn "8 total commits to the home-assistant organization, 4 commits to home-assistant, 3 commits to home-assistant.github.io, 1 commit to netdisco") -- [ThUnD3r|Gr33n (@thundergreen)](https://github.com/thundergreen "4 total commits to the home-assistant organization, 4 commits to home-assistant.github.io") +- [ThUnD3r\|Gr33n (@thundergreen)](https://github.com/thundergreen "4 total commits to the home-assistant organization, 4 commits to home-assistant.github.io") - [tijuca (@tijuca)](https://github.com/tijuca "106 total commits to the home-assistant organization, 106 commits to libcoap") - [Tim Wilbrink (@TWilb)](https://github.com/TWilb "15 total commits to the home-assistant organization, 15 commits to home-assistant-iOS") - [Timo (@timotk)](https://github.com/timotk "1 total commits to the home-assistant organization, 1 commit to netdisco") @@ -862,7 +862,7 @@ This page contains a list of people who have contributed in one way or another t - [Victor Cerutti (@victorcerutti)](https://github.com/victorcerutti "3 total commits to the home-assistant organization, 3 commits to home-assistant-polymer") - [Viet Dzung (@dzungpv)](https://github.com/dzungpv "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") - [Vignesh Venkat (@vickyg3)](https://github.com/vickyg3 "9 total commits to the home-assistant organization, 5 commits to home-assistant, 4 commits to home-assistant.github.io") -- [Ville Skyttä (@scop)](https://github.com/scop "38 total commits to the home-assistant organization, 18 commits to home-assistant, 9 commits to home-assistant.github.io, 4 commits to netdisco, 3 commits to hassio-addons, 2 commits to home-assistant-polymer, 2 commits to hassio-build") +- [Ville Skyttä (@scop)](https://github.com/scop "38 total commits to the home-assistant organization, 18 commits to home-assistant, 9 commits to home-assistant.github.io, 4 commits to netdisco, 3 commits to hassio-addons, 2 commits to hassio-build, 2 commits to home-assistant-polymer") - [viswa-swami (@viswa-swami)](https://github.com/viswa-swami "9 total commits to the home-assistant organization, 9 commits to home-assistant") - [Vlad Korniev (@vkorn)](https://github.com/vkorn "1 total commits to the home-assistant organization, 1 commit to hassio-build") - [vllungu (@vllungu)](https://github.com/vllungu "3 total commits to the home-assistant organization, 3 commits to libcoap") @@ -871,18 +871,18 @@ This page contains a list of people who have contributed in one way or another t - [Wesley Young (@wesdyoung)](https://github.com/wesdyoung "1 total commits to the home-assistant organization, 1 commit to warrant") - [Wilco Land (@Wilco89)](https://github.com/Wilco89 "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [Will Heid (@bassclarinetl2)](https://github.com/bassclarinetl2 "20 total commits to the home-assistant organization, 19 commits to home-assistant.github.io, 1 commit to fabric-home-assistant") -- [Will W. (@tiktok7)](https://github.com/tiktok7 "4 total commits to the home-assistant organization, 4 commits to home-assistant") +- [Will W\. (@tiktok7)](https://github.com/tiktok7 "4 total commits to the home-assistant organization, 4 commits to home-assistant") - [Willems Davy (@joyrider3774)](https://github.com/joyrider3774 "4 total commits to the home-assistant organization, 4 commits to home-assistant.github.io") - [William Johansson (@radhus)](https://github.com/radhus "1 total commits to the home-assistant organization, 1 commit to hassio") - [William Scanlon (@w1ll1am23)](https://github.com/w1ll1am23 "111 total commits to the home-assistant organization, 76 commits to home-assistant, 33 commits to home-assistant.github.io, 2 commits to netdisco") - [williamlehman (@williamlehman)](https://github.com/williamlehman "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") - [wind-rider (@wind-rider)](https://github.com/wind-rider "5 total commits to the home-assistant organization, 5 commits to home-assistant") - [wokar (@wokar)](https://github.com/wokar "12 total commits to the home-assistant organization, 8 commits to home-assistant, 4 commits to home-assistant.github.io") -- [Wolf-Bastian Pöttner (@BastianPoe)](https://github.com/BastianPoe "7 total commits to the home-assistant organization, 4 commits to home-assistant, 3 commits to home-assistant.github.io") +- [Wolf\-Bastian Pöttner (@BastianPoe)](https://github.com/BastianPoe "7 total commits to the home-assistant organization, 4 commits to home-assistant, 3 commits to home-assistant.github.io") - [Wolfgang Malgadey (@wmalgadey)](https://github.com/wmalgadey "4 total commits to the home-assistant organization, 4 commits to home-assistant") - [XECDesign (@XECDesign)](https://github.com/XECDesign "138 total commits to the home-assistant organization, 138 commits to pi-gen") - [Xorso (@Xorso)](https://github.com/Xorso "22 total commits to the home-assistant organization, 21 commits to home-assistant, 1 commit to hassio-addons") -- [Yannick POLLART (@ypollart)](https://github.com/ypollart "8 total commits to the home-assistant organization, 4 commits to home-assistant, 4 commits to home-assistant.github.io") +- [Yannick POLLART (@ypollart)](https://github.com/ypollart "8 total commits to the home-assistant organization, 4 commits to home-assistant.github.io, 4 commits to home-assistant") - [Yasin Soliman (@yasinS)](https://github.com/yasinS "4 total commits to the home-assistant organization, 4 commits to home-assistant.github.io") - [yingzong (@yingzong)](https://github.com/yingzong "1 total commits to the home-assistant organization, 1 commit to warrant") - [Zen Tormey (@xehn)](https://github.com/xehn "4 total commits to the home-assistant organization, 4 commits to home-assistant.github.io") @@ -894,4 +894,4 @@ This page contains a list of people who have contributed in one way or another t This page is irregularly updated using the [`credits_generator` tool](https://github.com/home-assistant/home-assistant.github.io/tree/next/credits_generator). If you think that you are missing, please let us know. -This page was last updated Saturday, March 31st 2018, 9:06:17 am UTC. +This page was last updated Saturday, March 31st 2018, 9:09:02 am UTC. From 1987571074bf544ca0ee47388fdbc23068aad6fb Mon Sep 17 00:00:00 2001 From: Beat <508289+bdurrer@users.noreply.github.com> Date: Sat, 31 Mar 2018 13:07:31 +0200 Subject: [PATCH 739/993] Add FreeDNS component (#5046) * Add FreeDNS component * Move the instructions up --- source/_components/freedns.markdown | 49 +++++++++++++++++++ .../development_guidelines.markdown | 2 +- 2 files changed, 50 insertions(+), 1 deletion(-) create mode 100644 source/_components/freedns.markdown diff --git a/source/_components/freedns.markdown b/source/_components/freedns.markdown new file mode 100644 index 0000000000..960d1411d9 --- /dev/null +++ b/source/_components/freedns.markdown @@ -0,0 +1,49 @@ +--- +layout: page +title: "freedns.afraid.org" +description: "Keep your DNS record up to date with FreeDNS." +date: 2018-03-27 21:30 +sidebar: true +comments: false +sharing: true +footer: true +ha_category: Utility +ha_release: 0.67 +--- + +With the `freedns` component you can keep your [FreeDNS](https://freedns.afraid.org) record up to date. + +## {% linkable_title Configuration %} + +You need to determine your update URL or your access token. + +1. Head over to the [FreeDNS](https://freedns.afraid.org) website and login to your account. +2. Select the menu "Dynamic DNS" +3. You should now see your update candiates in a table at the bottom of the page. +4. Copy the link target of the "Direct URL". +5. The access token is the part at the end of the link: `https://freedns.afraid.org/dynamic/update.php?YOUR_UPDATE_TOKEN` +6. Either put the token as `access_token` _or_ the whole URL into the `url` attribute. + +To use the component in your installation, add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +freedns: + access_token: YOUR_TOKEN +``` + +{% configuration %} + access_token: + description: Your access token. This is exclusive to `url`. + required: false + type: string + url: + description: The full update URL. This is exclusive to `access_token`. + required: false + type: string + update_interval: + description: How often to call the update service. + required: false + type: time period + default: 10 minutes +{% endconfiguration %} diff --git a/source/developers/development_guidelines.markdown b/source/developers/development_guidelines.markdown index edfabb9b26..7e4088249c 100644 --- a/source/developers/development_guidelines.markdown +++ b/source/developers/development_guidelines.markdown @@ -78,4 +78,4 @@ _LOGGER.error("No route to device: %s", self._resource) ``` Don't print out wrong API keys, tokens, usernames, or passwords. - +Also note that `_LOGGER.info` is reserved for the core, use `_LOGGER.debug` in anything else. From 17bae0c2718b712869574ad79d31ac90bae2996b Mon Sep 17 00:00:00 2001 From: Albert Lee Date: Sat, 31 Mar 2018 06:09:15 -0500 Subject: [PATCH 740/993] Update README.md for credits_generator (#5065) --- credits_generator/README.md | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/credits_generator/README.md b/credits_generator/README.md index ee89f67817..986f0b4785 100644 --- a/credits_generator/README.md +++ b/credits_generator/README.md @@ -1,11 +1,12 @@ credits_generator ================= -This tool can be used to update the [Home Assistant's Credits page](https://home-assistant.io/developers/credits/). +This tool can be used to update the [Credits page for Home Assistant](https://home-assistant.io/developers/credits/). Setup ----- +Fetch the dependencies with `npm`. ```bash $ cd credits_generator $ npm install @@ -13,8 +14,11 @@ $ npm install Usage ----- +Go to https://github.com/settings/tokens/new and generate a new GitHub personal access token. +Give the token any name and select the `public_repo` and `read:user` scopes. -Set your personal GitHub access token as environmental variable. + +Set the environment variable `GITHUB_TOKEN` to the new token. ```bash $ export GITHUB_TOKEN= @@ -23,7 +27,6 @@ $ export GITHUB_TOKEN= Run the script. ```bash -$ cd credits_generator $ node update_credits.js ``` From 308fe9eea19bea8a2e49eca9963c94ea88ed1f1c Mon Sep 17 00:00:00 2001 From: Jonas Pedersen Date: Sat, 31 Mar 2018 13:10:00 +0200 Subject: [PATCH 741/993] Minor syntax correction. (#5066) --- source/_docs/ecosystem/appdaemon/api.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_docs/ecosystem/appdaemon/api.markdown b/source/_docs/ecosystem/appdaemon/api.markdown index 2f8e38c162..923505b262 100755 --- a/source/_docs/ecosystem/appdaemon/api.markdown +++ b/source/_docs/ecosystem/appdaemon/api.markdown @@ -1422,7 +1422,7 @@ Name of the event to subscribe to. Can be a standard Home Assistant event such a One or more keyword value pairs representing App specific parameters to supply to the callback. If the keywords match values within the event data, they will act as filters, meaning that if they don't match the values, the callback will not fire. -As an example of this, a Minimote controller when activated will generate an event called `zwave.scene_activated`, along with 2 pieces of data that are specific to the event - `entity_id` and `scene`. If you include keyword values for either of those, the values supplied to the `listen_event()1 call must match the values in the event or it will not fire. If the keywords do not match any of the data in the event they are simply ignored. +As an example of this, a Minimote controller when activated will generate an event called `zwave.scene_activated`, along with 2 pieces of data that are specific to the event - `entity_id` and `scene`. If you include keyword values for either of those, the values supplied to the `listen_event()` call must match the values in the event or it will not fire. If the keywords do not match any of the data in the event they are simply ignored. Filtering will work with any event type, but it will be necessary to figure out the data associated with the event to understand what values can be filtered on. This can be achieved by examining Home Assistant's logfiles when the event fires. From 69f0361c999591f21f84fa4af189d64d75cebae4 Mon Sep 17 00:00:00 2001 From: Rene Nulsch <33263735+ReneNulschDE@users.noreply.github.com> Date: Sat, 31 Mar 2018 15:23:13 +0200 Subject: [PATCH 742/993] Add removal note (#5053) --- source/_components/mercedesme.markdown | 26 +------------------------- 1 file changed, 1 insertion(+), 25 deletions(-) diff --git a/source/_components/mercedesme.markdown b/source/_components/mercedesme.markdown index 82f8679f45..db5774c518 100644 --- a/source/_components/mercedesme.markdown +++ b/source/_components/mercedesme.markdown @@ -23,29 +23,5 @@ This component provides the following platforms: - Device tracker: To track location of your car.

    - The component can integrate cars from European and African markets only. -

    - -To use Mercedes me in your installation, add the following to your `configuration.yaml` file: - -```yaml -# Example configuration.yaml entry -mercedesme: - username: YOUR_E_MAIL_ADDRESS - password: YOUR_PASSWORD -``` - -{% configuration %} -username: - description: The email address associated with your Mercedes me account. - required: true - type: string -password: - description: The password for your given Mercedes me account. - required: true - type: string -{% endconfiguration %} - -

    -The requirement `lxml` has to be [installed](http://lxml.de/installation.html) manually `pip install lxml` on some devices. + The component was removed. The vendor disabled the API endpoint and a new API is not available currently.

    From a835ff4172f6d365e1f9c10009f4a4ff2099d737 Mon Sep 17 00:00:00 2001 From: brubaked <37672083+brubaked@users.noreply.github.com> Date: Sat, 31 Mar 2018 13:48:56 -0500 Subject: [PATCH 743/993] Added a link to the text 'this site' (#5069) This text: SQLite databases do not support native dates. That's why all the dates are saved in seconds since the UNIX epoch. Convert them manually using this site or in Python: should have a link where it says "this text" It now reads: SQLite databases do not support native dates. That's why all the dates are saved in seconds since the UNIX epoch. Convert them manually using [this site](https://www.epochconverter.com/) or in Python: --- source/_components/history.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/history.markdown b/source/_components/history.markdown index 459ac4b2a8..206678c510 100644 --- a/source/_components/history.markdown +++ b/source/_components/history.markdown @@ -120,7 +120,7 @@ When the `history` component queries the states table it only selects states whe #### {% linkable_title On dates %} -SQLite databases do not support native dates. That's why all the dates are saved in seconds since the UNIX epoch. Convert them manually using this site or in Python: +SQLite databases do not support native dates. That's why all the dates are saved in seconds since the UNIX epoch. Convert them manually using [this site](https://www.epochconverter.com/) or in Python: ```python from datetime import datetime From cf6818f0d77dd7282a8eca09d3d0ff95326d0bb7 Mon Sep 17 00:00:00 2001 From: Niklas Wagner Date: Sat, 31 Mar 2018 20:49:38 +0200 Subject: [PATCH 744/993] Update Link to w3.org (#5070) --- source/_components/light.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/light.markdown b/source/_components/light.markdown index a7db18e98e..5eb3083f2d 100644 --- a/source/_components/light.markdown +++ b/source/_components/light.markdown @@ -32,7 +32,7 @@ Most lights do not support all attributes. You can check the platform documentat | `white_value` | yes | Integer between 0 and 255 for how bright a dedicated white LED should be. | `color_temp` | yes | An integer in mireds representing the color temperature you want the light to be. | `kelvin` | yes | Alternatively, you can specify the color temperature in Kelvin. -| `color_name` | yes | A human-readable string of a color name, such as `blue` or `goldenrod`. All [CSS3 color names](https://www.w3.org/TR/2010/PR-css3-color-20101028/#svg-color) are supported. +| `color_name` | yes | A human-readable string of a color name, such as `blue` or `goldenrod`. All [CSS3 color names](https://www.w3.org/TR/css-color-3/#svg-color) are supported. | `brightness` | yes | Integer between 0 and 255 for how bright the color should be. | `brightness_pct`| yes | Alternatively, you can specify brightness in percent (a number between 0 and 100). | `flash` | yes | Tell light to flash, can be either value `short` or `long`. From e0540d27dc45a2bff7b64238d32353a0d51c42cc Mon Sep 17 00:00:00 2001 From: Myrddyn Date: Sat, 31 Mar 2018 17:01:15 -0400 Subject: [PATCH 745/993] Added "Waze travel time" sensor documentation (#4498) * Added Waze Travel Time documentation * Added Waze Travel Time documentation * Added Waze Travel Time documentation Fixed commit remarks from frenck * * Added Waze Travel Time documentation Fixed commit remarks from frenck * :pencil2: Tweaks * Multiple fixes * Update --- .../sensor.waze_travel_time.markdown | 51 ++++++++++++++++++ source/images/supported_brands/waze.png | Bin 0 -> 21843 bytes 2 files changed, 51 insertions(+) create mode 100644 source/_components/sensor.waze_travel_time.markdown create mode 100755 source/images/supported_brands/waze.png diff --git a/source/_components/sensor.waze_travel_time.markdown b/source/_components/sensor.waze_travel_time.markdown new file mode 100644 index 0000000000..2440930b9f --- /dev/null +++ b/source/_components/sensor.waze_travel_time.markdown @@ -0,0 +1,51 @@ +--- +layout: page +title: "Waze Travel Time" +description: "Instructions on how to add Waze travel time to Home Assistant." +date: 2018-01-23 00:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: waze.png +ha_category: Transport +ha_iot_class: "Cloud Polling" +ha_release: 0.67 +--- + +The `waze_travel_time` sensor provides travel time from the [Waze](https://www.waze.com/). + +Unit system is set to metric system. + +## {% linkable_title Configuration %} + +To use this sensor in your installation, add the following `abode` section to your `configuration.yaml` file: + +```yaml +# Example entry for configuration.yaml +sensor: + - platform: waze_travel_time + origin: Montréal, QC + destination: Québec, QC + region: 'US' +``` + +{% configuration %} +origin: + description: Enter the starting address or the GPS coordinates of the location (GPS coordinates has to be separated by a comma). + required: true + type: string +destination: + description: Enter the destination address or the GPS coordinates of the location (GPS coordinates has to be separated by a comma). + required: true + type: string +region: + description: Choose one of the available regions from 'EU', 'US', 'NA' (equivalent to 'US') or 'IL'. + required: true + type: string +name: + description: A name to display on the sensor. + required: false + default: "Waze Travel Time" + type: string +{% endconfiguration %} diff --git a/source/images/supported_brands/waze.png b/source/images/supported_brands/waze.png new file mode 100755 index 0000000000000000000000000000000000000000..927614e0c880fb95f819095acb379d531e1e7879 GIT binary patch literal 21843 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 Geg8jp{X)?I literal 0 HcmV?d00001 From 69635dc1c87b782b9dc58f3436aedbf568a00dd6 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Sat, 31 Mar 2018 23:14:26 +0200 Subject: [PATCH 746/993] Update zestimate docs --- source/_components/sensor.zestimate.markdown | 13 ++++++++----- source/images/supported_brands/zillow.png | Bin 0 -> 9212 bytes 2 files changed, 8 insertions(+), 5 deletions(-) create mode 100644 source/images/supported_brands/zillow.png diff --git a/source/_components/sensor.zestimate.markdown b/source/_components/sensor.zestimate.markdown index c791cd7b73..ca9547e404 100644 --- a/source/_components/sensor.zestimate.markdown +++ b/source/_components/sensor.zestimate.markdown @@ -8,25 +8,28 @@ comments: false sharing: true footer: true ha_category: Sensor +logo: zillow.png ha_release: 0.65 ha_iot_class: "Cloud Polling" --- The `zestimate` sensor allows one to track the Zestimate value of properties using the [Zillow API](https://www.zillow.com/howto/api/APIOverview.htm). +## {% linkable_title Configuration %} + You will need to sign up for the Zillow API at the following link [Zillow API](https://www.zillow.com/howto/api/APIOverview.htm). You will also need the Zillow property ID for each property you'd like to track. This information is available from the URL of a property you are interested in. -For example, the White House zpid is 84074482 and can be found in it's Zillow URL: https://www.zillow.com/homedetails/1600-Pennsylvania-Ave-NW-Washington-DC-20006/84074482_zpid/ +For example, the White House zpid is 84074482 and can be found in it's Zillow URL: [https://www.zillow.com/homedetails/1600-Pennsylvania-Ave-NW-Washington-DC-20006/84074482_zpid/](https://www.zillow.com/homedetails/1600-Pennsylvania-Ave-NW-Washington-DC-20006/84074482_zpid/) To enable this sensor, add the following lines to your `configuration.yaml`. ```yaml sensor: - platform: zestimate - api_key: API_KEY + api_key: YOUR_API_KEY zpid: - - - - + - YOUR_ZPID_1 + - YOUR_ZPID_2 ``` {% configuration %} @@ -40,7 +43,7 @@ zpid: type: list {% endconfiguration %} -### Additional Attributes +### {% linkable_title Additional Attributes %} The following additional attributes are also available via the sensor. diff --git a/source/images/supported_brands/zillow.png b/source/images/supported_brands/zillow.png new file mode 100644 index 0000000000000000000000000000000000000000..49a3147b78a34bc431160eee6a4a640bb23ad917 GIT binary patch literal 9212 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 literal 0 HcmV?d00001 From ce94c3bc6d8f4b554c004c5fb57e3f90f299d687 Mon Sep 17 00:00:00 2001 From: Andrew Date: Sat, 31 Mar 2018 23:15:32 +0200 Subject: [PATCH 747/993] Updated Amcrest component documentation to include support for switches (#4862) * Updated Amcrest component documentation to include support for switches * :pencil2: Tweaks * Update release --- source/_components/amcrest.markdown | 6 ++++++ source/_components/switch.amcrest.markdown | 18 ++++++++++++++++++ 2 files changed, 24 insertions(+) create mode 100644 source/_components/switch.amcrest.markdown diff --git a/source/_components/amcrest.markdown b/source/_components/amcrest.markdown index fc62783afa..74c76e70dd 100644 --- a/source/_components/amcrest.markdown +++ b/source/_components/amcrest.markdown @@ -28,6 +28,9 @@ amcrest: sensors: - motion_detector - sdcard + switches: + - motion_detection + - motion_recording - host: IP_ADDRESS_CAMERA_2 username: YOUR_USERNAME @@ -54,6 +57,9 @@ Configuration variables: - **motion_detector**: Return True/False when a motion is detected - **sdcard**: Return the SD card usage by reporting the total and used space - **ptz_preset**: Return the number of PTZ preset positions configured for the given camera +- **switches** array (*Optional*): Switches to display in the frontend. By default, *none* of the switches are shown. The following switches can be monitored. + - **motion_detection**: Enable/disable motion detection setting + - **motion_recording**: Enable/disable recording on motion detection setting **Note:** Amcrest cameras with newer firmware no longer have the ability to stream `high` definition video with MJPEG encoding. You may need to use `low` resolution stream or the `snapshot` stream source instead. If the quality seems too poor, lower the `Frame Rate (FPS)` and max out the `Bit Rate` settings in your camera's configuration manager. If you defined the *stream_source* to **mjpeg**, make sure your camera supports *Basic* HTTP authentication. Newer Amcrest firmware may not work, then **rtsp** is recommended instead. diff --git a/source/_components/switch.amcrest.markdown b/source/_components/switch.amcrest.markdown new file mode 100644 index 0000000000..d9ed4564b2 --- /dev/null +++ b/source/_components/switch.amcrest.markdown @@ -0,0 +1,18 @@ +--- +layout: page +title: "Amcrest IP Camera Settings" +description: "Instructions on how to integrate settings for Amcrest IP Camera as switches within Home Assistant." +date: 2018-03-08 00:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: amcrest.png +ha_category: Switch +ha_release: 0.67 +ha_iot_class: "Local Polling" +--- + +The `amcrest` switch platform lets you control settings of [Amcrest IP Camera](https://home-assistant.io/components/camera.amcrest/) through Home Assistant. + +Switches will be configured automatically. Please refer to the [component](/components/amcrest/) configuration on how to setup. From 3f1357125198e4815951303a07636810bdc4e551 Mon Sep 17 00:00:00 2001 From: Niklas Wagner Date: Sat, 31 Mar 2018 23:19:30 +0200 Subject: [PATCH 748/993] Properly quote things so ON/OFF don't become True/False (#5072) --- source/_components/light.mqtt.markdown | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/_components/light.mqtt.markdown b/source/_components/light.mqtt.markdown index 0034abc209..ed1536ecef 100644 --- a/source/_components/light.mqtt.markdown +++ b/source/_components/light.mqtt.markdown @@ -95,12 +95,12 @@ payload_on: description: The payload that represents enabled state. required: false type: string - default: ON + default: "ON" payload_off: description: The payload that represents disabled state. required: false type: string - default: OFF + default: "OFF" qos: description: The maximum QoS level of the state topic. required: false From 9caa6eb53f9ca646e0545bfe9d575b5e2de50535 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Sat, 31 Mar 2018 23:21:15 +0200 Subject: [PATCH 749/993] Add mastodon docs (#5010) --- source/_components/notify.mastodon.markdown | 52 ++++++++++++++++++++ source/images/supported_brands/mastodon.png | Bin 0 -> 7492 bytes 2 files changed, 52 insertions(+) create mode 100644 source/_components/notify.mastodon.markdown create mode 100644 source/images/supported_brands/mastodon.png diff --git a/source/_components/notify.mastodon.markdown b/source/_components/notify.mastodon.markdown new file mode 100644 index 0000000000..2e8327f4c2 --- /dev/null +++ b/source/_components/notify.mastodon.markdown @@ -0,0 +1,52 @@ +--- +layout: page +title: "Mastodon" +description: "Instructions on how to add Instapush notifications to Home Assistant." +date: 2018-03-25 18:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: mastodon.png +ha_category: Notifications +ha_release: 0.67 +--- + + +The `mastodon` platform uses [MAstodon](https://joinmastodon.org/) to delivery notifications from Home Assistant. + +Go to **Preferences** in the Mastodon web interface, then to **Development** and create a new application. + +To add Mastodon to your installation, add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +notify: + - name: NOTIFIER_NAME + platform: mastodon + access_token: !secret mastodon_access_token + client_id: !secret mastodon_client_id + client_secret: !secret mastodon_client_secret +``` + +{% configuration %} +access_token: + description: Your Mastodon access token. + required: true + type: string +client_id: + description: Your Mastodon client ID + required: true + type: string +client_secret: + description: Your Mastodon client secret. + required: true + type: string +base_url: + description: URL of the Mastodon instance to use. + required: false + type: string + default: https://mastodon.social +{% endconfiguration %} + +To use notifications, please see the [getting started with automation page](/getting-started/automation/). diff --git a/source/images/supported_brands/mastodon.png b/source/images/supported_brands/mastodon.png new file mode 100644 index 0000000000000000000000000000000000000000..7a156e5b817ac0cf4008accf5d232a73405bbc47 GIT binary patch literal 7492 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 Date: Sat, 31 Mar 2018 23:23:26 +0200 Subject: [PATCH 750/993] Added request_rssi configuration variable to docs (#4684) * Added request_rssi configuration variable to docs * Used configuration tags * Removed extra configuration variable header --- .../_components/device_tracker.bluetooth_tracker.markdown | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/source/_components/device_tracker.bluetooth_tracker.markdown b/source/_components/device_tracker.bluetooth_tracker.markdown index 0a2a2d0632..45bd09eae3 100644 --- a/source/_components/device_tracker.bluetooth_tracker.markdown +++ b/source/_components/device_tracker.bluetooth_tracker.markdown @@ -27,6 +27,14 @@ device_tracker: - platform: bluetooth_tracker ``` +{% configuration %} +request_rssi: + description: Performs a request for the "Received signal strength indication" (RSSI) of each tracked device + required: false + type: boolean + default: False +{% endconfiguration %} + In some cases it can be that your device is not discovered. In that case let your phone scan for Bluetooth devices while you restart Home Assistant. Just hit `Scan` on your phone all the time until Home Assistant is fully restarted and the device should appear in `known_devices.yaml`. For additional configuration variables check the [Device tracker page](/components/device_tracker/). From 76a5c07b04e7e0dfb578e250a73e770c508ca764 Mon Sep 17 00:00:00 2001 From: Niklas Wagner Date: Sun, 1 Apr 2018 00:44:51 +0200 Subject: [PATCH 751/993] Match current code --- source/_components/light.mqtt.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/light.mqtt.markdown b/source/_components/light.mqtt.markdown index ed1536ecef..42ed49b457 100644 --- a/source/_components/light.mqtt.markdown +++ b/source/_components/light.mqtt.markdown @@ -55,7 +55,7 @@ brightness_value_template: required: false type: string color_temp_command_topic: - description: The MQTT topic to publish commands to change the light’s color temperature state. The color temperature command slider has a range of 157 to 500 mireds (micro reciprocal degrees). + description: The MQTT topic to publish commands to change the light’s color temperature state. The color temperature command slider has a range of 154 to 500 mireds (micro reciprocal degrees). required: false type: string color_temp_state_topic: From f79c3ed719c60fa0e21c7097bf0bd85d5b978835 Mon Sep 17 00:00:00 2001 From: Chris Jones Date: Sun, 1 Apr 2018 19:30:21 +1000 Subject: [PATCH 752/993] Confusing as it uses a non-default TTS platform --- source/_cookbook/sonos_say.markdown | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/source/_cookbook/sonos_say.markdown b/source/_cookbook/sonos_say.markdown index cfc7a76b3f..e17db1e4a7 100644 --- a/source/_cookbook/sonos_say.markdown +++ b/source/_cookbook/sonos_say.markdown @@ -54,3 +54,14 @@ automation: message: 'Your husband coming home!' delay: '00:00:05' ``` +Note that this example uses the `voicerss` text-to-speech platform. There are many platforms that can be used. The one installed by default with Home Assistant is Google TTS. This appears in your `configuration.yaml` file as: + +``` + tts: + - platform: google +``` + +If you want to use this TTS engine, change the line above to +``` +- service: tts.google_say +``` From 7a22ffe8a50c728bd80f3b20b3aca0d5f0d6a59c Mon Sep 17 00:00:00 2001 From: Chris Jones Date: Sun, 1 Apr 2018 19:36:24 +1000 Subject: [PATCH 753/993] Update sonos_say.markdown --- source/_cookbook/sonos_say.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_cookbook/sonos_say.markdown b/source/_cookbook/sonos_say.markdown index e17db1e4a7..fd4b04b402 100644 --- a/source/_cookbook/sonos_say.markdown +++ b/source/_cookbook/sonos_say.markdown @@ -61,7 +61,7 @@ Note that this example uses the `voicerss` text-to-speech platform. There are ma - platform: google ``` -If you want to use this TTS engine, change the line above to +If you want to use this TTS engine, change the line in the example provided to: ``` - service: tts.google_say ``` From f2a22d38a042495f315d5fba22401a75a5fa6a39 Mon Sep 17 00:00:00 2001 From: sveip Date: Sun, 1 Apr 2018 18:41:16 +0200 Subject: [PATCH 754/993] Update debugging.markdown Hassio supervisor container name corrected. --- source/developers/hassio/debugging.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/developers/hassio/debugging.markdown b/source/developers/hassio/debugging.markdown index d9030069a8..8dde1fbaa8 100644 --- a/source/developers/hassio/debugging.markdown +++ b/source/developers/hassio/debugging.markdown @@ -46,7 +46,7 @@ ssh root@hassio.local -p 22222 journalctl -f -u resin-supervisor.service # Hass.io supervisor logs -docker logs hassio_supervisor +docker logs resin_supervisor # Home Assistant logs docker logs homeassistant From 882aa7b4350783a0652b9d89a3efd4b7d453506c Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Sun, 1 Apr 2018 11:47:24 -0700 Subject: [PATCH 755/993] Release 0.66.1 --- _config.yml | 6 +++--- source/_posts/2018-03-30-release-66.markdown | 16 ++++++++++++++++ 2 files changed, 19 insertions(+), 3 deletions(-) diff --git a/_config.yml b/_config.yml index a4af2a187d..a7b16a6bf6 100644 --- a/_config.yml +++ b/_config.yml @@ -140,13 +140,13 @@ social: # Home Assistant release details current_major_version: 0 current_minor_version: 66 -current_patch_version: 0 -date_released: 2018-03-30 +current_patch_version: 1 +date_released: 2018-04-01 # Either # or the anchor link to latest release notes in the blog post. # Must be prefixed with a # and have double quotes around it. # Major release: -patch_version_notes: "#" +patch_version_notes: "#release-0661---april-1" # Minor release (Example #release-0431---april-25): # Date we moved to Discourse for comments diff --git a/source/_posts/2018-03-30-release-66.markdown b/source/_posts/2018-03-30-release-66.markdown index 787e60b074..3cb379af26 100644 --- a/source/_posts/2018-03-30-release-66.markdown +++ b/source/_posts/2018-03-30-release-66.markdown @@ -36,6 +36,13 @@ A quick note if you are using Philips Hue and a Hue custom component: it will no - Add trafikverket_weatherstation sensor platform ([@Qxlkdr] - [#12115]) ([sensor.trafikverket_weatherstation docs]) (new-platform) - Security fix & lock for HomeMatic ([@PH89] - [#11980]) ([homematic docs]) ([lock docs]) ([lock.homematic docs]) (breaking change) (new-platform) +## {% linkable_title Release 0.66.1 - April 1 %} + +- Update frontend to fix climate and chart issues ([@NovapaX] & [@c727]) +- Fix mqtt_json color commands ([@armills] - [#13617]) ([light.mqtt_json docs]) +- Add pincode fallback ([@cdce8p] - [#13587]) ([homekit docs]) +- Fix mysensors sensor type lookup ([@MartinHjelmare] - [#13574]) ([sensor.mysensors docs]) + ## {% linkable_title If you need help... %} ...don't hesitate to use our very active [forums](https://community.home-assistant.io/) or join us for a little [chat](https://discord.gg/c5DvZ4e). The release notes have comments enabled but it's preferred if you use the former communication channels. Thanks. @@ -553,3 +560,12 @@ Experiencing issues introduced by this release? Please report them in our [issue [zeroconf docs]: /components/zeroconf/ [zha docs]: /components/zha/ [zwave docs]: /components/zwave/ +[#13574]: https://github.com/home-assistant/home-assistant/pull/13574 +[#13587]: https://github.com/home-assistant/home-assistant/pull/13587 +[#13617]: https://github.com/home-assistant/home-assistant/pull/13617 +[@MartinHjelmare]: https://github.com/MartinHjelmare +[@armills]: https://github.com/armills +[@cdce8p]: https://github.com/cdce8p +[homekit docs]: https://www.home-assistant.io/components/homekit/ +[light.mqtt_json docs]: https://www.home-assistant.io/components/light.mqtt_json/ +[sensor.mysensors docs]: https://www.home-assistant.io/components/sensor.mysensors/ From bc9e59bb967f4d9ec3365451df5b15ce330b3b18 Mon Sep 17 00:00:00 2001 From: Sebastian Muszynski Date: Sun, 1 Apr 2018 21:19:45 +0200 Subject: [PATCH 756/993] Duplicate configuration line removed --- source/_components/sensor.xiaomi_miio.markdown | 1 - 1 file changed, 1 deletion(-) diff --git a/source/_components/sensor.xiaomi_miio.markdown b/source/_components/sensor.xiaomi_miio.markdown index 3e30131fff..65d1f3780f 100644 --- a/source/_components/sensor.xiaomi_miio.markdown +++ b/source/_components/sensor.xiaomi_miio.markdown @@ -29,7 +29,6 @@ Please follow the instructions on [Retrieving the Access Token](/components/vacu To add a Xiaomi Mi Air Quality Monitor to your installation, add the following to your `configuration.yaml` file: ```yaml -sensor: # Example configuration.yaml entry sensor: - platform: xiaomi_miio From b42f23d438fae301f7edac1523ff23679eadf28e Mon Sep 17 00:00:00 2001 From: Dale Higgs Date: Sun, 1 Apr 2018 16:37:06 -0500 Subject: [PATCH 757/993] Add quote explanation and examples --- .../documentation/standards.markdown | 58 +++++++++++++++++-- 1 file changed, 54 insertions(+), 4 deletions(-) diff --git a/source/developers/documentation/standards.markdown b/source/developers/documentation/standards.markdown index adcc3bd521..05b1223cc6 100644 --- a/source/developers/documentation/standards.markdown +++ b/source/developers/documentation/standards.markdown @@ -25,25 +25,25 @@ To ensure that the documentation for Home Assistant is consistent and easy to fo * Configuration variables must document the requirement status. * Configuration variables must document the default value, if any. * Configuration variables must document the accepted value types. - * Use `[string, int]` for configuration variables that accept multiple types. + * For configuration variables that accept multiple types, separate the types with a comma (i.e. `string, int`). * Use YAML sequence syntax in the sample code if it is supported. * All examples should be formatted to be included in `configuration.yaml` unless explicitly stated. * Use capital letters and `_` to indicate that the value needs to be replaced. E.g., `api_key: YOUR_API_KEY` or `api_key: REPLACE_ME`. - * If you know that the API key or value contains [control characters](https://en.wikipedia.org/wiki/YAML#Syntax), e.g., `#`, `[`, `?`, etc., wrap it in quotes and add a note. + * If you know that the API key or value contains [control characters](https://en.wikipedia.org/wiki/YAML#Syntax), e.g., `#`, `[`, `?`, etc., wrap it in quotes and add a note. * Component and platform names should be a link to their respective documentation pages. ## {% linkable_title Templates %} * All examples containing Jinja2 templates should be wrapped **outside** of the code markdown with the {% raw %}`{% raw %}`{% endraw %} tag. * Do not use `states.switch.source.state` in templates. Instead use `states()` and `is_state()`. -* Use double quotes (`"`) for: +* Use double quotes (`"`) for ([more information](#single-vs-double-quotation-marks)): * `friendly_name` * Single-line templates: * `value_template` * `level_template` * `icon_template` * Children of `data_template` -* Use single quotes (`'`) for: +* Use single quotes (`'`) for ([more information](#single-vs-double-quotation-marks): * Strings inside of templates: * States * Entity IDs @@ -69,3 +69,53 @@ redirect_from: /getting-started/android/ ``` Adding a redirect also applies if you move content around in the [documentation](/docs/). + +## {% linkable_title Single vs. Double Quotation Marks %} + +Use single quotes (`'`) for strings inside of a template. It is more obvious to escape a single quote when necessary (i.e. `name` is a possessive noun), because the single quotes that wrap the string are closer in position to the apostrophe inside the string. Use double quotes (`"`) outside of a template (unless it is a multi-line template, in which case outside quotes are not required). + +### {% linkable_title Examples %} + +#### {% linkable_title Double Quotes Outside, Single Quotes Inside (Valid) %} + +{% raw %} +```yaml +automation: + ... + action: + - service: notify.notify + data_template: + message: "{% if trigger.to_state.name == 'Dale\'s Bedroom' %}Someone's in your base, killing your noobs!{% else %}It's just another door.{% endif %}" +``` +{% endraw %} + +#### {% linkable_title Single Quotes Outside, Double Quotes Inside (Invalid) %} + +{% raw %} +```yaml +automation: + ... + action: + - service: notify.notify + data_template: + message: '{% if trigger.to_state.name == "Dale's Bedroom" %}Someone's in your base, killing your noobs!{% else %}It's just another door.{% endif %}' +``` +{% endraw %} + +#### {% linkable_title Multi-Line Template (Valid) %} + +{% raw %} +```yaml +automation: + ... + action: + - service: notify.notify + data_template: + message: >- + {% if trigger.to_state.name == 'Dale\'s Bedroom' %} + Someone's in your base, killing your noobs! + {% else %} + It's just another door. + {% endif %} +``` +{% endraw %} From d599de84c2e91d08ca28c249e2acde289c782636 Mon Sep 17 00:00:00 2001 From: JohnnyCAPSLOCK <23089193+JohnnyCAPSLOCK@users.noreply.github.com> Date: Sun, 1 Apr 2018 19:18:55 -0700 Subject: [PATCH 758/993] Update google_assistant.markdown Proposing changes to steps 8a and 8d. I looked back at previous versions and I don't think these steps were updated when the other steps it was originally referencing were moved/changed. --- source/_components/google_assistant.markdown | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/_components/google_assistant.markdown b/source/_components/google_assistant.markdown index b30eee33f4..d1096fd88c 100644 --- a/source/_components/google_assistant.markdown +++ b/source/_components/google_assistant.markdown @@ -148,10 +148,10 @@ If you're not using Linux, you can use sites such as [this one](https://www.brow 6. Open the Google Assistant app and go into `Settings > Home Control` 7. Click the `+` sign, and near the bottom, you should have `[test] your app name`. Selecting that should lead you the screen where you can set rooms for your devices or nicknames for your devices. 8. If you want to allow other household users to control the devices: - a. Go to the developer console using the address from point 4. + a. Go to the settings for the project you created in point 1 in the developer console. b. Under the gear icon, click `Permissions` c. Click `Add`, type the new user's e-mail address and choose `Project -> Editor` role - d. Have the new user go to [developer console](https://console.actions.google.com/) and repeat steps starting from point + d. Have the new user go to [developer console](https://console.actions.google.com/) and repeat steps starting from point 4 9. If you want to use the `google_assistant.request_sync` service, to update devices without unlinking and relinking, in Home Assistant, then enable Homegraph API for your project: a. Go to the [cloud console](https://console.cloud.google.com/apis/api/homegraph.googleapis.com/overview) b. Select your project and click Enable Homegraph API From d707f1a2cd4aa89e3a6c483610c7be3d5cdbae7a Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Mon, 2 Apr 2018 10:48:06 +0200 Subject: [PATCH 759/993] Remove not needed raw's --- source/_components/sensor.speedtest.markdown | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/source/_components/sensor.speedtest.markdown b/source/_components/sensor.speedtest.markdown index f3fe80903d..fb95a0cdff 100644 --- a/source/_components/sensor.speedtest.markdown +++ b/source/_components/sensor.speedtest.markdown @@ -16,13 +16,14 @@ ha_iot_class: "Cloud Polling" The `speedtest` sensor component uses the [Speedtest.net](https://speedtest.net/) web service to measure network bandwidth performance. +## {% linkable_title Configuration %} + By default, it will run every hour. The user can change the update frequency in the configuration by defining the minute, hour, and day for a speed test to run. For the `server_id` check the list of [available servers](https://www.speedtest.net/speedtest-servers.php). To add a Speedtest.net sensor to your installation, add the following to your `configuration.yaml` file: Once per hour, on the hour (default): -{% raw %} ```yaml # Example configuration.yaml entry sensor: @@ -32,7 +33,6 @@ sensor: - download - upload ``` -{% endraw %} {% configuration %} monitored_conditions: @@ -79,7 +79,6 @@ This component uses [speedtest-cli](https://github.com/sivel/speedtest-cli) to g When Home Assistant first starts up, the values of the speed test will show as `Unknown`. You can use the service `sensor.update_speedtest` to run a manual speed test and populate the data or just wait for the next regularly scheduled test. You can turn on manual mode to disable the scheduled speed tests. - ## {% linkable_title Examples %} In this section, you find some real-life examples of how to use this sensor. @@ -88,7 +87,6 @@ In this section, you find some real-life examples of how to use this sensor. Every half hour of every day: -{% raw %} ```yaml # Example configuration.yaml entry sensor: @@ -101,13 +99,11 @@ sensor: - download - upload ``` -{% endraw %} ### {% linkable_title Run at a specific time %} Everyday at 12:30AM, 6:30AM, 12:30PM, 6:30PM: -{% raw %} ```yaml # Example configuration.yaml entry sensor: @@ -123,7 +119,6 @@ sensor: - download - upload ``` -{% endraw %} ### {% linkable_title Using as a trigger in an automation %} @@ -150,6 +145,7 @@ automation: ## {% linkable_title Notes %} - When running on Raspberry Pi, just note that the maximum speed is limited by its 100 Mbit/s LAN adapter. +- Running this platform can have negative effects on the system's performance as it requires a fair amount of memory. - Entries under `monitored_conditions` only control what entities are available in Home Assistant, it does not disable the condition from running. - If ran frequently, this component has the ability to use a considerable amount of data. Frequent updates should be avoided on bandwidth-capped connections. - While running, your network capacity is fully utilized. This may have a negative effect on other devices in use the network such as gaming consoles or streaming boxes. From d6b487434317b69c3cd58d3a2aef0ba140793f08 Mon Sep 17 00:00:00 2001 From: VdkaShaker <26205899+VdkaShaker@users.noreply.github.com> Date: Mon, 2 Apr 2018 04:59:54 -0700 Subject: [PATCH 760/993] Update configure filter section (#5071) Adding detail to Configure Filter section. --- source/_components/homekit.markdown | 32 ++++++++++++++++++++++++++++- 1 file changed, 31 insertions(+), 1 deletion(-) diff --git a/source/_components/homekit.markdown b/source/_components/homekit.markdown index 6a24a49a09..88a0691aec 100644 --- a/source/_components/homekit.markdown +++ b/source/_components/homekit.markdown @@ -150,7 +150,37 @@ automation: ## {% linkable_title Configure Filter %} -To limit which entities are being exposed to `HomeKit`, you can use the `filter` parameter. By default no entity will be excluded. Keep in mind though that only supported components can be added. +By default no entity will be excluded. To limit which entities are being exposed to `HomeKit`, you can use the `filter` parameter. Keep in mind only [supported components](#supported-components) can be added. + +{% raw %} +```yaml +# Example filter to include specified domains and exclude specified entities +homekit: + filter: + include_domains: + - alarm_control_panel + - light + exclude_entities: + - light.kitchen_light +``` +{% endraw %} + +Filters are applied as follows: + +1. No includes or excludes - pass all entities +2. Includes, no excludes - only include specified entities +3. Excludes, no includes - only exclude specified entities +4. Both includes and excludes: + * Include domain specified + - if domain is included, and entity not excluded, pass + - if domain is not included, and entity not included, fail + * Exclude domain specified + - if domain is excluded, and entity not included, fail + - if domain is not excluded, and entity not excluded, pass + - if both include and exclude domains specified, the exclude domains are ignored + * Neither include or exclude domain specified + - if entity is included, pass (as #2 above) + - if entity include and exclude, the entity exclude is ignored ## {% linkable_title Supported Components %} From 481fb147c7ae8f83a76646cd7cfc7fc3b622870d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C3=ABl=20Arnauts?= Date: Mon, 2 Apr 2018 16:36:28 +0200 Subject: [PATCH 761/993] New Component: Add docs for Google Maps Location Sharing (#4646) * Add docs for Google Maps Location Sharing * Typo * :pencil2: Small updates * :pencil2: Migrated to configuration tags and ups HA version --- .../device_tracker.google_maps.markdown | 46 +++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 source/_components/device_tracker.google_maps.markdown diff --git a/source/_components/device_tracker.google_maps.markdown b/source/_components/device_tracker.google_maps.markdown new file mode 100644 index 0000000000..6f2175a604 --- /dev/null +++ b/source/_components/device_tracker.google_maps.markdown @@ -0,0 +1,46 @@ +--- +layout: page +title: "Google Maps Location Sharing" +description: "Instructions how to use Google Maps Location Sharing to track devices in Home Assistant." +date: 2017-02-12 10:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: google_maps.png +ha_release: 0.67 +ha_category: Presence Detection +ha_iot_class: "Cloud Polling" +--- + +The `google_maps` platform allows you to detect presence using the unofficial API of [Google Maps Location Sharing](https://myaccount.google.com/locationsharing). + +You first need to create an additional Google account and share your location with that account. This platform will use that account to fetch the location of your device(s). You have to setup sharing through the Google Maps app on your mobile phone. You can find more information [here](https://support.google.com/accounts?p=location_sharing). + +This platform will create a file named `google_maps_location_sharing.conf` where it caches your login session. + +

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

    + +To integrate Google Maps Location Sharing in Home Assistant, add the following section to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +device_tracker: + platform: google_maps + username: example@gmail.com + password: password +``` + +{% configuration %} +username: + description: The email address for the Google account that has access to your shared location. + required: true + type: string +password: + description: The password for your given username. + required: true + type: string +{% endconfiguration %} From 7dbed031cba045313aff5756bce6db0b0fa3dc97 Mon Sep 17 00:00:00 2001 From: Robin Date: Mon, 2 Apr 2018 15:37:58 +0100 Subject: [PATCH 762/993] Adds docs for folder_watcher component (#4885) * Create folder_watcher.markdown * Adds posting file * Update folder_watcher.markdown * :pencil2: Markdownlint fixes * :pencil2: Escapes jinja code in example * :pencil2: Build fix part 2 * :ambulance: Fixes build * :arrow_up: Ups ha_release to 0.67 --- source/_components/folder_watcher.markdown | 77 ++++++++++++++++++++++ 1 file changed, 77 insertions(+) create mode 100644 source/_components/folder_watcher.markdown diff --git a/source/_components/folder_watcher.markdown b/source/_components/folder_watcher.markdown new file mode 100644 index 0000000000..2e842114f7 --- /dev/null +++ b/source/_components/folder_watcher.markdown @@ -0,0 +1,77 @@ +--- +layout: page +title: "folder watcher" +description: "Component for monitoring changes within the filesystem." +date: 2018-03-11 14:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: home-assistant.png +ha_category: System Monitor +ha_iot_class: "Local Polling" +ha_release: 0.67 +--- + +This component adds [Watchdog](https://pythonhosted.org/watchdog/) file system monitoring, publishing events on the Home-Assistant bus on the creation/deletion/modification of files. + +To configure the `folder_watcher` component add to you `configuration.yaml` file: + +```yaml +{% raw %} +folder_watcher: + watchers: + - folder: /config +{% endraw %} +``` + +{% configuration %} +folder: + description: The folder path + required: true + type: string +patterns: + description: Pattern matching to apply + required: false + default: "*" + type: string +{% endconfiguration %} + +## Patterns + +Pattern matching using [fnmatch](https://docs.python.org/3.6/library/fnmatch.html) can be used to limit filesystem monitoring to only files which match the configured patterns. The following example shows the configuration required to only monitor filetypes `.yaml` and `.txt`. + +```yaml +{% raw %} +folder_watcher: + watchers: + - folder: /config + patterns: + - '*.yaml' + - '*.txt' +{% raw %} +``` + +## Automations + +Automations can be triggered on filesystem event data using a data_template. The following automation will send a notification with the name and folder of new files added to that folder: + +```yaml +{% raw %} +- action: + - data_template: + message: 'Created {{trigger.event.data.file}} in {{trigger.event.data.folder}}' + title: New image captured! + data: + file: "{{trigger.event.data.path}}" + service: notify.pushbullet + alias: New file alert + condition: [] + id: '1520092824697' + trigger: + - event_data: {"event_type":"created"} + event_type: folder_watcher + platform: event +{% endraw %} +``` + From 3aa3be14397a3b11de455db4c36151c711ca3b11 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Mon, 2 Apr 2018 17:22:12 +0200 Subject: [PATCH 763/993] Minor changes (#5084) --- source/_components/binary_sensor.workday.markdown | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/source/_components/binary_sensor.workday.markdown b/source/_components/binary_sensor.workday.markdown index 0d4782bc12..edc34b5a37 100644 --- a/source/_components/binary_sensor.workday.markdown +++ b/source/_components/binary_sensor.workday.markdown @@ -15,6 +15,10 @@ ha_release: 0.41 The `workday` binary sensor indicates, whether the current day is a workday or not. It allows specifying, which days of the week counts as workdays and also uses the python module [holidays](https://pypi.python.org/pypi/holidays) to incorporate information about region-specific public holidays. +## {% linkable_title Configuration %} + +Check the [country list](https://github.com/dr-prodigy/python-holidays#available-countries) for available province. + To enable the `workday` sensor in your installation, add the following to your `configuration.yaml` file: ```yaml From c5743e462164dea887b4a99a3df219782009583c Mon Sep 17 00:00:00 2001 From: cdce8p <30130371+cdce8p@users.noreply.github.com> Date: Mon, 2 Apr 2018 17:35:11 +0200 Subject: [PATCH 764/993] Added upgrade note (#5087) * Added upgrade note * Minor changes --- source/_components/homekit.markdown | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/source/_components/homekit.markdown b/source/_components/homekit.markdown index 88a0691aec..079849af30 100644 --- a/source/_components/homekit.markdown +++ b/source/_components/homekit.markdown @@ -19,6 +19,10 @@ The `HomeKit` component allows you to forward entities from Home Assistant to Ap `$ sudo apt-get install libavahi-compat-libdnssd-dev`

    +

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

    + {% configuration %} homekit: description: HomeKit configuration. From e2e349c30d10e317d400e37fad4fc1de6a1847a6 Mon Sep 17 00:00:00 2001 From: Johann Kellerman Date: Mon, 2 Apr 2018 17:35:46 +0200 Subject: [PATCH 765/993] Qwikswitch refactor & sensors (#5045) * Qwikswitch refactor & sensors PR: https://github.com/home-assistant/home-assistant/pull/13509 * :pencil2: Some minor tweaks --- source/_components/qwikswitch.markdown | 38 ++++++++++++++++++-------- 1 file changed, 26 insertions(+), 12 deletions(-) diff --git a/source/_components/qwikswitch.markdown b/source/_components/qwikswitch.markdown index cb4d6f3695..516658404a 100644 --- a/source/_components/qwikswitch.markdown +++ b/source/_components/qwikswitch.markdown @@ -13,12 +13,9 @@ featured: false ha_release: "0.20" --- +The `qwikswitch` component is the main component to integrate various [QwikSwitch](http://www.qwikswitch.co.za/) devices with Home Assistant. The integration requires the QSUSB Modem device and connects to the QS Mobile application. -The `qwikswitch` component is the main component to integrate various [QwikSwitch](http://www.qwikswitch.co.za/) devices with Home Assistant. - -Loading the `qwikswitch` component automatically adds all devices from the QS Mobile application. QS Mobile controls the QSUSB Modem device. - -Currently QwikSwitch relays and LED dimmers are supported (tested). QwikSwitch relay devices can be [switches](/components/switch.qwikswitch/) or [lights](/components/light.qwikswitch/) in Home-Assistant. If the device name in the QSUSB app ends with ` Switch` it will be created as a switch, otherwise as a light. +The `qwikswitch` component discovers all devices from QS Mobile. Currently, Relays and LED dimmers are discovered in Home Assistant. Relay devices are [lights](/components/light.qwikswitch/) by default, and can be configured as [switches](/components/switch.qwikswitch/). Example configuration: @@ -31,28 +28,45 @@ qwikswitch: Configuration variables: - **url** (*Required*): The URL including the port of your QwikSwitch hub. -- **dimmer_adjust** (*Optional*): A decimal value to adjust the brightness of the dimmer exponentially. Increasing this value allows dimmers that reaches full brightness with low values in QS Mobile to appear more linear in Home Assistant. Recommended values between 1 and 2 and the default is 1. -- **button_events** (*Optional*): A comma separated list of button types that will generate events. Details below. +- **dimmer_adjust** (*Optional*): A decimal value to adjust the brightness of the dimmer exponentially. Increasing this value allows dimmers that reach full brightness with low values in QS Mobile to appear more linear in Home Assistant. Recommended values between 1 and 2 and the default is 1. +- **button_events** (*Optional*): A comma-separated list of button types that will generate events. See [QwikSwitch Events] for detail. +- **switches** (*Optional*): A list of device QS_id's that should be switches, and not lights (i.e. `['@0dev01', '@0dev02']`) +- **sensors** (*Optional*): A dictionary of sensors. In the format of {entity_id: QS_id}. (i.e. `{door_sensor: '@0dev03'}`) -### {% linkable_title QwikSwitch Buttons %} +### {% linkable_title QwikSwitch Events %} -QwikSwitch devices (i.e. transmitter buttons) will fire events on the Home Assistant bus. These events can then be used as triggers for any `automation` action, as follows: +QwikSwitch devices (i.e., transmitter buttons) will fire events on the Home Assistant bus. These events can then be used as triggers for any `automation` action, as follows: ```yaml automation: - - alias: Action - Respond to button press + - alias: Action - Respond to A button press trigger: platform: event event_type: qwikswitch.button.@12df34 ``` -`event_type` names should be in the format **qwikswitch.button.@__ID__**. where **@__ID__** will be captured in the Home Assistant log when pressing the button. Alternatively, you can also get the device ID from the QS Mobile application or using the listen API call by browsing to `http://127.0.0.1:2020/&listen` and then pressing the button. +`event_type` names should be in the format **qwikswitch.button.@_QS_id_**. where **@_QS_id_** will be captured in the Home Assistant log when pressing the button. Alternatively, you can also get the device ID from the QS Mobile application or by using the listen API call by browsing to `http://127.0.0.1:2020/&listen` and then pressing the button. + +The full packet from the QSUSB API will be passed as `data` By default events will be fired if the value in the command (cmd) field of the listen packet equals: - `TOGGLE` - Normal QwikSwitch Transmitter button - `SCENE EXE` - QwikSwitch Scene Transmitter buttons - `LEVEL` - QwikSwitch OFF Transmitter buttons -The list of recognized commands can be extended for Keyfobs, door sensors, and PIR transmitters with the **button_events** configuration option. **button_events** contain a comma separated list of commands that will fire Home Assistant events. By default it is: TOGGLE,SCENE EXE,LEVEL. +The list of recognized commands can be extended for Keyfobs, door sensors, and PIR transmitters with the **button_events** configuration option. **button_events** can be a list or comma separated list of additional commands that will fire Home Assistant events. By default, it is: TOGGLE,SCENE EXE,LEVEL. On some QS Mobile servers button events are only generated for switches added to the QS Mobile application, so it might be best to test button presses through the `/&listen` API + +### {% linkable_title Qwikswitch Sensors %} + +Some Qwikswith devices might support more than one channel per device (i.e. ipmod). The channel can be specified by appending a number to the QS_id. Example sensors configuration: + +```yaml +qwikswitch: + ... + sensors: + door_sensor: '@0dev01' + door2_sensor: '@0dev02.1' + door3_sensor: '@0dev02.2' +``` From f6954ccb79197991630d87de2cb30c3b89e7291b Mon Sep 17 00:00:00 2001 From: DubhAd Date: Mon, 2 Apr 2018 16:44:36 +0100 Subject: [PATCH 766/993] Added note about broadcast group (#5080) Thanks to turbokongen commenting in https://github.com/home-assistant/home-assistant/issues/11823 Added a note about how to remove the broadcast group association --- source/_docs/z-wave/control-panel.markdown | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/source/_docs/z-wave/control-panel.markdown b/source/_docs/z-wave/control-panel.markdown index cb90f5f52e..601137c2cb 100644 --- a/source/_docs/z-wave/control-panel.markdown +++ b/source/_docs/z-wave/control-panel.markdown @@ -108,6 +108,16 @@ You can use this to enable one device to directly control another. This is prima There may be multiple groups, that are used for different purposes. The manual of your device will explain what each group is for. +#### {% linkable_title Broadcast group %} + +Some Z-Wave devices may associate themselves with the broadcast group (group 255). You'll be able to tell if this has happened if opening a door (or triggering a motion sensor) causes lights to come on, and closing the door (or the motion sensor going clear) causes lights to run off. There's no way to clear this from the control panel, but you can use the `zwave.change_association` service: + +```json +{"association": "remove", "node_id": 3, "group": 1, "target_node_id": 255} +``` + +That would remove the broadcast group from association group 1 of the device with node_id 3. + ### {% linkable_title Node config options %} You can set the *wakeup* interval (in seconds) of the device, this is shown for all devices that can be battery powered, even if they are currently mains powered. The wakeup interval only applies when those devices are battery powered. From c16b6e2ef5a7a2258990c2482dba17878e0c4ce8 Mon Sep 17 00:00:00 2001 From: Sebastian Date: Mon, 2 Apr 2018 18:29:59 +0200 Subject: [PATCH 767/993] Update hue.markdown - Removed the "(Optional)" tag from the host-Parameter, because it is mandatory now - Added another configuration example to clarify how to specify multiple configuration variables; the examples in the "multiple bridges..." section do show this already, but this section might be skipped by the majority of users owning only a single bridge. --- source/_components/hue.markdown | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/source/_components/hue.markdown b/source/_components/hue.markdown index c0bda3fa14..f172c6b0ff 100644 --- a/source/_components/hue.markdown +++ b/source/_components/hue.markdown @@ -33,11 +33,20 @@ hue: Configuration variables: -- **host** (*Optional*): IP address of the device, eg. 192.168.1.10. Required if not using the `discovery` component to discover Hue bridges. +- **host**: IP address of the device, eg. 192.168.1.10. Required if not using the `discovery` component to discover Hue bridges. - **allow_unreachable** (*Optional*): (true/false) This will allow unreachable bulbs to report their state correctly. - **filename** (*Optional*): Make this unique if specifying multiple Hue hubs. - **allow_hue_groups** (*Optional*): (true/false) Enable this to stop Home Assistant from importing the groups defined on the Hue bridge. +```yaml +# Example configuration.yaml entry specifying optional parameters +hue: + bridges: + - host: DEVICE_IP_ADDRESS + allow_unreachable: true + allow_hue_groups: true +``` + ### {% linkable_title Migrating from older configuration %} In previous versions of the Hue component the configuration looked different: From 5869b00342653c30fb29b3a870c275f0608161bd Mon Sep 17 00:00:00 2001 From: Sebastian Muszynski Date: Mon, 2 Apr 2018 19:45:36 +0200 Subject: [PATCH 768/993] Xiaomi Mi WiFi Repeater 2 integration as device tracker (#5077) --- .../device_tracker.xiaomi_miio.markdown | 38 +++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 source/_components/device_tracker.xiaomi_miio.markdown diff --git a/source/_components/device_tracker.xiaomi_miio.markdown b/source/_components/device_tracker.xiaomi_miio.markdown new file mode 100644 index 0000000000..dad5feef5d --- /dev/null +++ b/source/_components/device_tracker.xiaomi_miio.markdown @@ -0,0 +1,38 @@ +--- +layout: page +title: "Xiaomi Mi WiFi Repeater 2" +description: "Instructions how to integrate your Xiaomi Mi WiFi Repeater 2 within Home Assistant." +date: 2018-04-01 21:06 +sidebar: true +comments: false +sharing: true +footer: true +logo: xiaomi.png +ha_category: Sensor +ha_version: 0.67 +ha_iot_class: "Local Polling" +--- + +The `xiaomi_miio` device tracker platform is observing your Xiaomi Mi WiFi Repeater 2 and reporting all associated WiFi clients. + +Please follow the instructions on [Retrieving the Access Token](/components/vacuum.xiaomi_miio/#retrieving-the-access-token) to get the API token. + +To add a Xiaomi Mi Air Quality Monitor to your installation, add the following to your `configuration.yaml` file: + +```yaml +device_tracker: + - platform: xiaomi_miio + host: 192.168.130.73 + token: YOUR_TOKEN +``` + +{% configuration %} +host: + description: The IP address of your miio device. + required: true + type: string +token: + description: The API token of your miio device. + required: true + type: string +{% endconfiguration %} From 59be0ec41b66ed6f97afa616bb75a3c3b442ea0c Mon Sep 17 00:00:00 2001 From: ChristianKuehnel Date: Mon, 2 Apr 2018 19:47:59 +0200 Subject: [PATCH 769/993] bmw_connected_drive - updated repo url (#5044) * updated repo url * :ambulance: Fixes incorrect Markdown linking --- source/_components/bmw_connected_drive.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/bmw_connected_drive.markdown b/source/_components/bmw_connected_drive.markdown index 21e7e04ecf..e560ced3c6 100644 --- a/source/_components/bmw_connected_drive.markdown +++ b/source/_components/bmw_connected_drive.markdown @@ -14,7 +14,7 @@ ha_release: 0.64 This component lets you retrieve data on your BMW vehicle from the BMW Connected Drive portal. You need to have a working BMW Connected Drive account and a Connected Drive enabled vehicle for this to work. -For compatibility with your BMW vehicle check the (bimmer_connected page)[https://github.com/ChristianKuehnel/bimmer_connected] on github. +For compatibility with your BMW vehicle check the [bimmer_connected page](https://github.com/m1n3rva/bimmer_connected) on github. To enable this component in your installation, add the following to your `configuration.yaml` file: From d42f6dfacff2c8ccba728cc1f29952c9bf8ad7bb Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Mon, 2 Apr 2018 22:57:57 +0200 Subject: [PATCH 770/993] Some fixes (#5091) * Some fixes (missing logo and links) * Add header --- .../alarm_control_panel.ifttt.markdown | 2 +- source/_components/asterisk_mbox.markdown | 11 ++++++----- source/_components/dominos.markdown | 5 ++++- .../_components/mailbox.asterisk_mbox.markdown | 3 ++- source/images/supported_brands/asterisk.png | Bin 0 -> 15406 bytes 5 files changed, 13 insertions(+), 8 deletions(-) create mode 100644 source/images/supported_brands/asterisk.png diff --git a/source/_components/alarm_control_panel.ifttt.markdown b/source/_components/alarm_control_panel.ifttt.markdown index 9fcd58e2d3..9dcf52521f 100644 --- a/source/_components/alarm_control_panel.ifttt.markdown +++ b/source/_components/alarm_control_panel.ifttt.markdown @@ -14,7 +14,7 @@ ha_release: 0.66 The `ifttt` platform allows you to integrate security systems that have no open API but can be controlled through [IFTTT](https://ifttt.com/discover). -This platform depends on the [IFTTT](https://home-assistant.io/components/ifttt/) Home Assistant component. See the component's documentation to set it up. +This platform depends on the [IFTTT](/components/ifttt/) Home Assistant component. See the component's documentation to set it up.

    It is important to note that this platform fully relies on IFTTT to receive updates when the security system's state changes. Therefore, this platform shows an assumed state. diff --git a/source/_components/asterisk_mbox.markdown b/source/_components/asterisk_mbox.markdown index bfc30400f6..2361dfe0c9 100644 --- a/source/_components/asterisk_mbox.markdown +++ b/source/_components/asterisk_mbox.markdown @@ -7,25 +7,26 @@ sidebar: true comments: false sharing: true footer: true +logo: asterisk.png ha_category: Other ha_version: 0.51 ha_iot_class: "Local Push" --- -The Asterisk Voicemail integration for Home Assistant allows you to view, listen to, and delete voicemails from an Asterisk voicemail mailbox. The component includes a panel on the frontend that provides caller-id and speech-to-text transcription (using Google's API) of messages in addition to playback and message deletion. There is also an included sensor that indicates of the number of available messages. There is no requirement that the Asterisk PBX and Home Assistant are running on the same machine. +The `asterisk_mbox `Asterisk Voicemail integration for Home Assistant allows you to view, listen to, and delete voicemails from an Asterisk voicemail mailbox. The component includes a panel on the frontend that provides caller-id and speech-to-text transcription (using Google's API) of messages in addition to playback and message deletion. There is also an included sensor that indicates of the number of available messages. There is no requirement that the Asterisk PBX and Home Assistant are running on the same machine. To enable the component, a configuration is required in both Home Assistant as well as on the Asterisk server. -First follow the [Asterisk PBX configuration guide](/docs/asterisk_mbox) to setup the necessary server on the Asterisk PBX server (this is needed even if Asterisk and Home Assistant are running on the same server) +First follow the [Asterisk PBX configuration guide](/docs/asterisk_mbox/) to setup the necessary server on the Asterisk PBX server (this is needed even if Asterisk and Home Assistant are running on the same server) Once that is complete, add the following entry `configuration.yaml` file: ```yaml # Example configuration.yaml entry asterisk_mbox: - password: ASTERISK_PBX_PASSWORD - host: ASTERISK_PBX_SERVER_IP_ADDRESS - port: ASTERISK_PBX_SERVER_PORT + password: ASTERISK_PBX_PASSWORD + host: ASTERISK_PBX_SERVER_IP_ADDRESS + port: ASTERISK_PBX_SERVER_PORT ``` This will add a new 'Mailbox' side-panel, as well as a sensor to indicate # of messages available. diff --git a/source/_components/dominos.markdown b/source/_components/dominos.markdown index 062c0fbfea..d6849d738f 100644 --- a/source/_components/dominos.markdown +++ b/source/_components/dominos.markdown @@ -10,12 +10,15 @@ footer: true logo: dominos.png ha_category: Other ha_version: 0.59 +ha_iot_class: "Cloud Polling" --- -The `Dominos` component allows you to order Dominos Pizza from within your Home Assistant scripts and automations. +The `dominos` component allows you to order Dominos Pizza from within your Home Assistant scripts and automations. At present, this component only supports ordering within Canada and the US. +## {% linkable_title Configuration %} + To enable the component, you need to set up your customer information and define some orders. Orders are a group of product codes. You can get these product codes by inspecting an order request from the Dominos web app, or you can [add this custom panel by following this readme](https://github.com/wardcraigj/hass-dominos-panel) to see the available product codes in a separate panel in your install. diff --git a/source/_components/mailbox.asterisk_mbox.markdown b/source/_components/mailbox.asterisk_mbox.markdown index bc25b5b10b..15d5ec455f 100644 --- a/source/_components/mailbox.asterisk_mbox.markdown +++ b/source/_components/mailbox.asterisk_mbox.markdown @@ -7,9 +7,10 @@ sidebar: true comments: false sharing: true footer: true +logo: asterisk.png ha_category: Mailbox ha_version: 0.51 --- -The Asterisk Voicemail Mailbox provides visual and audio access to voicemail on the Asterisk PBX server. This mailbox is enabled automatically through the [Asterisk Voicemail component](/components/asterisk_mbox) configuration. +The Asterisk Voicemail Mailbox provides visual and audio access to voicemail on the Asterisk PBX server. This mailbox is enabled automatically through the [Asterisk Voicemail component](/components/asterisk_mbox/) configuration. diff --git a/source/images/supported_brands/asterisk.png b/source/images/supported_brands/asterisk.png new file mode 100644 index 0000000000000000000000000000000000000000..b8d8a1a123e7e7634c303bca0574ec5fd43223b3 GIT binary patch literal 15406 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 Yg}0w9j;TKK0x+QR;uZ9pqD9#M0EAYwlK=n! literal 0 HcmV?d00001 From 81ad15e9beb84bd64ff67ea536aed8b4fa2569be Mon Sep 17 00:00:00 2001 From: JudgeDredd <5932122+JudgeDreddKLC@users.noreply.github.com> Date: Tue, 3 Apr 2018 02:02:51 -0400 Subject: [PATCH 771/993] minor grammar changes to improve readability (#5092) minor grammar changes to improve readability --- source/_docs/configuration/packages.markdown | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/source/_docs/configuration/packages.markdown b/source/_docs/configuration/packages.markdown index bb66ed8230..7c95fa719e 100644 --- a/source/_docs/configuration/packages.markdown +++ b/source/_docs/configuration/packages.markdown @@ -10,9 +10,9 @@ footer: true redirect_from: /topics/packages/ --- -Packages in Home Assistant provides a way to bundle different component's configuration together. We were already introduced to the two configuration styles (specifying platforms entries together or individually) on the [adding devices](/docs/configuration/devices/) page. Both of these configuration methods require you to create the component key in the main `configuration.yaml` file. With packages we have a way to include different components, or parts of configuration using any of the `!include` directives introduced in [splitting the configuration](/docs/configuration/splitting_configuration). +Packages in Home Assistant provides a way to bundle different component's configuration together. We already learned about the two configuration styles (specifying platforms entries together or individually) on the [adding devices](/docs/configuration/devices/) page. Both of these configuration methods require you to create the component key in the main `configuration.yaml` file. With packages we have a way to include different components, or different configuration parts using any of the `!include` directives introduced in [splitting the configuration](/docs/configuration/splitting_configuration). -Packages are configured under the core `homeassistant/packages` in the configuration and take the format of a packages name (no spaces, all lower case) followed by a dictionary with the package config. For example, package `pack_1` would be created as: +Packages are configured under the core `homeassistant/packages` in the configuration and take the format of a package name (no spaces, all lower case) followed by a dictionary with the package config. For example, package `pack_1` would be created as: ```yaml homeassistant: @@ -22,7 +22,7 @@ homeassistant: ...package configuration here... ``` -The package configuration can include: `switch`, `light`, `automation`, `groups` or the majority of the Home Assistant components. +The package configuration can include: `switch`, `light`, `automation`, `groups`, or most other Home Assistant components. It can be specified inline or in a separate YAML file using `!include`. @@ -81,7 +81,7 @@ Components inside packages can only specify platform entries using configuration ### {% linkable_title Create a packages folder %} -One way to organize packages would be to create a folder named "packages" in your Home Assistant configuration directory. In the packages directory you can store any number of packages in a YAML file. This entry in your `configuration.yaml` will load all packages: +One way to organize packages is to create a folder named "packages" in your Home Assistant configuration directory. In the packages directory you can store any number of packages in a YAML file. This entry in your `configuration.yaml` will load all packages: ```yaml homeassistant: From 796ef7a3fbb4581816de5198b9f41c8a333bb267 Mon Sep 17 00:00:00 2001 From: Mattias Welponer Date: Tue, 3 Apr 2018 09:51:36 +0200 Subject: [PATCH 772/993] Rename and fix naming in homematicip_cloud (#5088) * Rename homematicip to homematicip_cloud * Fix homematicip_cloud naming * Update link and formating --- ...ip.markdown => homematicip_cloud.markdown} | 14 ++++++------- .../_components/sensor.homematicip.markdown | 18 ---------------- .../sensor.homematicip_cloud.markdown | 21 +++++++++++++++++++ 3 files changed, 28 insertions(+), 25 deletions(-) rename source/_components/{homematicip.markdown => homematicip_cloud.markdown} (72%) delete mode 100644 source/_components/sensor.homematicip.markdown create mode 100644 source/_components/sensor.homematicip_cloud.markdown diff --git a/source/_components/homematicip.markdown b/source/_components/homematicip_cloud.markdown similarity index 72% rename from source/_components/homematicip.markdown rename to source/_components/homematicip_cloud.markdown index 631720114c..c2f5320aa7 100644 --- a/source/_components/homematicip.markdown +++ b/source/_components/homematicip_cloud.markdown @@ -1,8 +1,8 @@ --- layout: page -title: "HomematicIP" +title: "HomematicIP Cloud" description: "Instructions for integrating HomematicIP into Home Assistant." -date: 2018-03-06 20:40 +date: 2018-04-02 13:40 sidebar: true comments: false sharing: true @@ -13,20 +13,20 @@ ha_release: 0.66 featured: false --- -The [HomematicIP](http://www.homematicip.com/) component platform is used as an interface to the cloud server. +The [HomematicIP](http://www.homematic-ip.com) component platform is used as an interface to the cloud server. For for communication [homematicip-rest-api](https://github.com/coreGreenberet/homematicip-rest-api) is used. To set up the component: -- **generate the authentication token**: +- generate the authentication token: ```yaml generate_auth_token.py ``` -- ** add the information to your `configuration.yaml` file: +- add the information to your `configuration.yaml` file: ```yaml -homematicip: +homematicip_cloud: - name: NAME accesspoint: IDENTIFIER authtoken: AUTHTOKEN @@ -34,7 +34,7 @@ homematicip: Configuration variables (global): -- **name** (*Required*): Name to identify your access point, this will be +- **name** (*Optional*): Name to identify your access point, this will be used to prefix your device names. - **accesspoint** (*Required*): This is the access point id (SGTIN) - **authtoken** (*Required*): Authentification token generated with diff --git a/source/_components/sensor.homematicip.markdown b/source/_components/sensor.homematicip.markdown deleted file mode 100644 index 65350fc602..0000000000 --- a/source/_components/sensor.homematicip.markdown +++ /dev/null @@ -1,18 +0,0 @@ ---- -layout: page -title: "HomematicIP Sensor" -description: "Instructions on how to integrate Homematic sensors within Home Assistant." -date: 2016-06-28 08:30 -sidebar: true -comments: false -sharing: true -footer: true -logo: homematic.png -ha_category: Sensor -ha_release: 0.66 -ha_iot_class: "Local Push" ---- - -The `homematicip` sensor platform lets you control [Homematic](http://www.homematic.com/) sensors through Home Assistant. - -Devices will be configured automatically. Please refer to the [component](/components/homematicip/) configuration on how to setup Homematic. diff --git a/source/_components/sensor.homematicip_cloud.markdown b/source/_components/sensor.homematicip_cloud.markdown new file mode 100644 index 0000000000..bfb8449890 --- /dev/null +++ b/source/_components/sensor.homematicip_cloud.markdown @@ -0,0 +1,21 @@ +--- +layout: page +title: "HomematicIP Cloud Sensor" +description: "Instructions on how to integrate HomematIP sensors within Home Assistant." +date: 2018-04-02 13:40 +sidebar: true +comments: false +sharing: true +footer: true +logo: homematic.png +ha_category: Sensor +ha_release: 0.66 +ha_iot_class: "Local Push" +--- + +The `homematicip_cloud` sensor platform allows you to control +[HomematicIP](http://www.homematicip.de) sensors through Home Assistant. + +Devices will be configured automatically. Please refer to the +[component](/components/homematicip_cloud/) configuration on how to setup +HomematicIP Cloud. From d31e48d4c045bd1334340e2e1ba2fe53e4efccef Mon Sep 17 00:00:00 2001 From: Carlo Costanzo Date: Tue, 3 Apr 2018 14:10:26 -0400 Subject: [PATCH 773/993] Added title field into example (#5095) Added based on feedback from @Stringyb92 in Chat. Examples were unclear/inconsistent. --- source/_docs/ecosystem/ios/notifications/basic.markdown | 2 ++ 1 file changed, 2 insertions(+) diff --git a/source/_docs/ecosystem/ios/notifications/basic.markdown b/source/_docs/ecosystem/ios/notifications/basic.markdown index 3a2c534407..7e0a5e9288 100644 --- a/source/_docs/ecosystem/ios/notifications/basic.markdown +++ b/source/_docs/ecosystem/ios/notifications/basic.markdown @@ -36,6 +36,7 @@ automation: action: service: notify.ios_ data: + title: "Smart Home Alerts" message: "Something happened at home!" data: push: @@ -53,6 +54,7 @@ automation action: service: notify.ios_ data: + title: "Smart Home Alerts" message: "Something happened at home!" data: subtitle: "Subtitle goes here" From 0413edeaa918d55031d62adba1806f68d6ae2709 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Wed, 4 Apr 2018 08:27:33 +0200 Subject: [PATCH 774/993] Add more details --- source/_docs/tools/check_config.markdown | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/source/_docs/tools/check_config.markdown b/source/_docs/tools/check_config.markdown index f9a31e0374..b09ea5b17c 100644 --- a/source/_docs/tools/check_config.markdown +++ b/source/_docs/tools/check_config.markdown @@ -15,3 +15,23 @@ Test any changes to your `configuration.yaml` file before launching Home Assista $ hass --script check_config ``` +The script has further options like checking configuration files which are not located in the default directory or showing your secrets for debugging. + +```bash +$ hass --script check_config -h +usage: hass [-h] [--script {check_config}] [-c CONFIG] [-i [INFO]] [-f] [-s] + +Check Home Assistant configuration. + +optional arguments: + -h, --help show this help message and exit + --script {check_config} + -c CONFIG, --config CONFIG + Directory that contains the Home Assistant + configuration + -i [INFO], --info [INFO] + Show a portion of the config + -f, --files Show used configuration files + -s, --secrets Show secret information +``` + From 211467de37a3523f0b05205957bf5f371c3f1e49 Mon Sep 17 00:00:00 2001 From: Max von Webel Date: Wed, 4 Apr 2018 00:19:51 -0700 Subject: [PATCH 775/993] Update troubleshooting.markdown (#5097) * Update troubleshooting.markdown By default the check_config script only search `~/.homeassistent` for a configuration. * Fix typo * Add link --- source/_docs/configuration/troubleshooting.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_docs/configuration/troubleshooting.markdown b/source/_docs/configuration/troubleshooting.markdown index f1b88fe876..0d867a2622 100644 --- a/source/_docs/configuration/troubleshooting.markdown +++ b/source/_docs/configuration/troubleshooting.markdown @@ -20,7 +20,7 @@ Whenever a component or configuration option results in a warning, it will be st When a component does not show up, many different things can be the case. Before you try any of these steps, make sure to look at the `home-assistant.log` file and see if there are any errors related to your component you are trying to set up. -If you have incorrect entries in your configuration files you can use the `check_config` script to assist in identifying them: `hass --script check_config`. +If you have incorrect entries in your configuration files you can use the [`check_config`](/docs/tools/check_config/) script to assist in identifying them: `hass --script check_config`. If you need to provide the path for your configuration you can do this using the `-c` argument like this: `hass --script check_config -c /path/to/your/config/dir`. #### {% linkable_title Problems with the configuration %} From 9e5c5c827cf2ef67c76bdc2a02019cb286c768e2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Patryk=20Ga=C5=82czy=C5=84ski?= Date: Wed, 4 Apr 2018 09:21:02 +0200 Subject: [PATCH 776/993] Extend development 101 (#5099) * extend development 101 with configuration.yaml entry and runtime example. * being more descriptive, change quote marks to follow standards * Minor changes --- source/developers/development_101.markdown | 19 ++++++++++++++++++ .../screenshots/hello-world-state-card.png | Bin 0 -> 22208 bytes 2 files changed, 19 insertions(+) create mode 100644 source/images/screenshots/hello-world-state-card.png diff --git a/source/developers/development_101.markdown b/source/developers/development_101.markdown index 851888479f..5db0cdf128 100644 --- a/source/developers/development_101.markdown +++ b/source/developers/development_101.markdown @@ -35,4 +35,23 @@ def setup(hass, config): return True ``` +Last step is to add `hello_world:` entry to your `configuration.yaml` file. + +```yaml +# Hello World component +hello_world: +``` + +After running `hass`, we should see log entries stating that `hello_world` component was loaded. What is more, additional state card shall appear within main panel. + +```log +2018-04-03 21:44:20 INFO (MainThread) [homeassistant.loader] Loaded hello_world from custom_components.hello_world +2018-04-03 21:44:20 INFO (MainThread) [homeassistant.setup] Setting up hello_world +``` + +

    + +State card showing that Hello World component is working as intended. +

    + [architecture]: /developers/architecture/ diff --git a/source/images/screenshots/hello-world-state-card.png b/source/images/screenshots/hello-world-state-card.png new file mode 100644 index 0000000000000000000000000000000000000000..9b1f5cbc0ab4830d57d502a38dba68b1c43adc7e GIT binary patch literal 22208 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 literal 0 HcmV?d00001 From 74c9fb5155a851aff90d3c5fb30cba7fccf40b0c Mon Sep 17 00:00:00 2001 From: Niklas Wagner Date: Wed, 4 Apr 2018 16:30:00 +0200 Subject: [PATCH 777/993] Match code (again) (#5106) --- source/_components/light.mqtt.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/light.mqtt.markdown b/source/_components/light.mqtt.markdown index 42ed49b457..eae91d0553 100644 --- a/source/_components/light.mqtt.markdown +++ b/source/_components/light.mqtt.markdown @@ -55,7 +55,7 @@ brightness_value_template: required: false type: string color_temp_command_topic: - description: The MQTT topic to publish commands to change the light’s color temperature state. The color temperature command slider has a range of 154 to 500 mireds (micro reciprocal degrees). + description: The MQTT topic to publish commands to change the light’s color temperature state. The color temperature command slider has a range of 153 to 500 mireds (micro reciprocal degrees). required: false type: string color_temp_state_topic: From 9f2e1b3343cf97640406172b2b8f9dd62b6fa35c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=B8ren=20Dam=20Pedersen?= Date: Wed, 4 Apr 2018 16:30:49 +0200 Subject: [PATCH 778/993] Fixed link to target sensor.mqtt (#5104) --- source/_components/plant.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/plant.markdown b/source/_components/plant.markdown index 80fccc281d..6beaa00557 100644 --- a/source/_components/plant.markdown +++ b/source/_components/plant.markdown @@ -59,7 +59,7 @@ If the sensor data is within the min/max values the status will be `ok`, if not ## Data Source -The main sources of the data will usually be a [MiFlora sensor](/components/sensor.miflora/) or a [MQTT sensor](/components/sensor.miflora/) receiving the data from a [PlantGateway](https://github.com/ChristianKuehnel/plantgateway). +The main sources of the data will usually be a [MiFlora sensor](/components/sensor.miflora/) or a [MQTT sensor](/components/sensor.mqtt/) receiving the data from a [PlantGateway](https://github.com/ChristianKuehnel/plantgateway). If you want to get the date via a PlantGateway, this is a typical configuration for the MQTT sensors: From 66714881d7efdea6edb6279a56196f1890cb280e Mon Sep 17 00:00:00 2001 From: Robin Date: Wed, 4 Apr 2018 18:49:40 +0100 Subject: [PATCH 779/993] Remove ref to watchers (#5108) `watchers` is not required, was in an earlier version --- source/_components/folder_watcher.markdown | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/source/_components/folder_watcher.markdown b/source/_components/folder_watcher.markdown index 2e842114f7..ba97e44c63 100644 --- a/source/_components/folder_watcher.markdown +++ b/source/_components/folder_watcher.markdown @@ -20,8 +20,7 @@ To configure the `folder_watcher` component add to you `configuration.yaml` file ```yaml {% raw %} folder_watcher: - watchers: - - folder: /config + - folder: /config {% endraw %} ``` @@ -44,11 +43,10 @@ Pattern matching using [fnmatch](https://docs.python.org/3.6/library/fnmatch.htm ```yaml {% raw %} folder_watcher: - watchers: - - folder: /config - patterns: - - '*.yaml' - - '*.txt' + - folder: /config + patterns: + - '*.yaml' + - '*.txt' {% raw %} ``` From 460fce6a1030b27d963fdb5ed5e4c465f75d4428 Mon Sep 17 00:00:00 2001 From: Charles Garwood Date: Wed, 4 Apr 2018 14:42:56 -0400 Subject: [PATCH 780/993] Remove reference to old_entity_id and new_entity_id attributes (#5110) Remove references to old_entity_id and new_entity_id attributes as they were removed in https://github.com/home-assistant/home-assistant/pull/12652 --- source/_docs/z-wave/control-panel.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_docs/z-wave/control-panel.markdown b/source/_docs/z-wave/control-panel.markdown index 601137c2cb..ee08d772d8 100644 --- a/source/_docs/z-wave/control-panel.markdown +++ b/source/_docs/z-wave/control-panel.markdown @@ -33,7 +33,7 @@ Here is where you [include and exclude](/docs/z-wave/adding/) Z-Wave devices fro ## {% linkable_title Z-Wave Node Management %}

    -Since 0.63 and the new experimental [entity registry](/docs/configuration/entity-registry/) **Rename Node** no longer changes the entity id for anything other than the `zwave.` entity for the node (it does change, the default *friendly_name* and *old_entity_id* and *new_entity_id* attributes for all the entities). See [this issue](https://github.com/home-assistant/home-assistant/issues/12430). +Since 0.63 and the new experimental [entity registry](/docs/configuration/entity-registry/) **Rename Node** no longer changes the entity id for anything other than the `zwave.` entity for the node (it does change the default *friendly_name* attribute for all the entities). See [this issue](https://github.com/home-assistant/home-assistant/issues/12430).

    * **Refresh Node** refreshes the information on the node and its entities. If used on a battery powered device, the device will first need to wake for this to work. From 4a1255889f73409e821ce886ebbaf3cc9f7e7036 Mon Sep 17 00:00:00 2001 From: mountainsandcode Date: Wed, 4 Apr 2018 20:53:54 +0200 Subject: [PATCH 781/993] Update templating.markdown (#5085) --- source/_docs/configuration/templating.markdown | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/source/_docs/configuration/templating.markdown b/source/_docs/configuration/templating.markdown index 631804b6ae..6b3c34b0a0 100644 --- a/source/_docs/configuration/templating.markdown +++ b/source/_docs/configuration/templating.markdown @@ -86,6 +86,10 @@ Home Assistant adds extensions to allow templates to access all of the current s - Filter `timestamp_custom(format_string, local_boolean)` will convert an UNIX timestamp to a custom format, the use of a local timestamp is default, supporting [Python format options](https://docs.python.org/3/library/time.html#time.strftime). - Filter `max` will obtain the largest item in a sequence. - Filter `min` will obtain the smallest item in a sequence. +- Filter `regex_match(string, find, ignorecase=FALSE)` will match the find expression at the beginning of the string using regex. +- Filter `regex_search(string, find, ignorecase=FALSE)` will match the find expression anywhere in the string using regex. +- Filter `regex_replace(string, find='', replace='', ignorecase=False)` will replace the find expression with the replace string using regex. +- Filter `regex_findall_index(string, find='', index=0, ignorecase=False)` will find all regex matches of find in string and return the match at index (findall returns an array of matches). [strp-format]: https://docs.python.org/3.6/library/datetime.html#strftime-and-strptime-behavior From 1c1025546efc991fa2553a9004b2db215516149f Mon Sep 17 00:00:00 2001 From: Oleg Date: Wed, 4 Apr 2018 21:54:33 +0300 Subject: [PATCH 782/993] Added headers configuration variable to notify.rest component (#5103) --- source/_components/notify.rest.markdown | 1 + 1 file changed, 1 insertion(+) diff --git a/source/_components/notify.rest.markdown b/source/_components/notify.rest.markdown index c20e4bc2f5..4d1d83c581 100644 --- a/source/_components/notify.rest.markdown +++ b/source/_components/notify.rest.markdown @@ -30,6 +30,7 @@ Configuration variables: - **name** (*Optional*): Setting the optional parameter `name` allows multiple notifiers to be created. The default value is `notify`. The notifier will bind to the service `notify.NOTIFIER_NAME`. - **resource** (*Required*): The resource or endpoint that will receive the value. - **method** (*Optional*): The method of the request. Default is GET. +- **headers** (*Optional*): The headers for the request. - **message_param_name** (*Optional*): Parameter name for the message. Defaults to `message`. - **title_param_name** (*Optional*): Parameter name for the title. Defaults to none. - **target_param_name** (*Optional*): Parameter name for the target. Defaults to none. From f4220b5c10ebf2989dee704e53272d0cfaada0e5 Mon Sep 17 00:00:00 2001 From: Phil Cole Date: Wed, 4 Apr 2018 21:12:30 +0100 Subject: [PATCH 783/993] Update Debian Stabel python version --- source/developers/asyncio_misc.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/developers/asyncio_misc.markdown b/source/developers/asyncio_misc.markdown index 695b26e3e0..3fbc923c6f 100644 --- a/source/developers/asyncio_misc.markdown +++ b/source/developers/asyncio_misc.markdown @@ -10,7 +10,7 @@ footer: true --- ## {% linkable_title What about ‘async’ and ‘await’ syntax? %} -Python 3.5 introduced new syntax to formalize the asynchronous pattern. This is however not compatible with Python 3.4. The minimum required Python version for Home Assistant is based on the Python version shipped with Debian stable, which is currently 3.4.2. +Python 3.5 introduced new syntax to formalize the asynchronous pattern. This is however not compatible with Python 3.4. The minimum required Python version for Home Assistant is based on the Python version shipped with Debian stable, which is currently 3.5.3. For more information, Brett Cannon wrote [an excellent breakdown][brett] on 'async' and 'await' syntax and how asynchronous programming works. From a94c49d0ded6eeabe74165e96e5be84d32889e4f Mon Sep 17 00:00:00 2001 From: Leandro Date: Thu, 5 Apr 2018 07:18:46 -0300 Subject: [PATCH 784/993] Update camera.yi.markdown (#5098) * Update camera.yi.markdown Added a session specifying for Hassbian users. * Update camera.yi.markdown * :rocket: Trigger build --- source/_components/camera.yi.markdown | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/source/_components/camera.yi.markdown b/source/_components/camera.yi.markdown index 61576a4772..cb8975a86c 100644 --- a/source/_components/camera.yi.markdown +++ b/source/_components/camera.yi.markdown @@ -34,6 +34,10 @@ Once installed, please ensure that you have enabled FTP and Telnet on your devic Currently, version 0.1.4-beta2 of the custom firmware is the highest supported. Firmwares higher than this version use [Pure-FTPd](https://www.pureftpd.org/project/pure-ftpd), which has a bug that prevents FFmpeg from correctly rendering video files.

    +

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

    +

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

    From 4a1cae880641b28040c47acad72033446751d91f Mon Sep 17 00:00:00 2001 From: joshua stein Date: Thu, 5 Apr 2018 11:41:46 -0500 Subject: [PATCH 785/993] Pushover: update webpage with clone URL (#5116) * Pushover: update webpage with clone URL Hi, Pushover developer here. I was notified that your app has a Pushover plugins, so I've listed it on our [apps page](https://pushover.net/apps) and enabled cloning for it. Instead of users having to upload an icon and fill in all the fields, users can be directed to https://pushover.net/apps/clone/home_assistant which pre-fills those fields and copies the icon. I'm not sure if the `date` field in this markdown page needs to be bumped when it's updated, or if it's a creation date. * Add some other minor changes --- source/_components/notify.pushover.markdown | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/source/_components/notify.pushover.markdown b/source/_components/notify.pushover.markdown index df11cea4ea..7e7680db7e 100644 --- a/source/_components/notify.pushover.markdown +++ b/source/_components/notify.pushover.markdown @@ -15,7 +15,9 @@ ha_release: pre 0.7 The [Pushover service](https://pushover.net/) is a platform for the notify component. This allows components to send messages to the user using Pushover. -In order to get an API key you need to go to the [Pushover website](https://pushover.net) and register a new application. From the website you can also retrieve your user key. +## {% linkable_title Configuration %} + +In order to get an API key you need to [register an application](https://pushover.net/apps/clone/home_assistant) on the Pushover website. Your Pushover user key can be found on the [Pushover dashboard](https://pushover.net/dashboard). To use Pushover notifications, add the following to your `configuration.yaml` file: @@ -35,6 +37,7 @@ Configuration variables: - **user_key** (*Required*): Your user key for Pushover. Example Automation: + ```yaml - service: notify.entity_id data: @@ -45,22 +48,16 @@ Example Automation: sound: pianobar priority: 0 ``` + Component specific values in the nested `data` section are optional. -This is a quote from the Pushover website regarding free/open source apps: - -
    - If you are creating a client-side library, application, or open source project that will be redistributed and installed by end-users, you may want to require each of your users to register their own application rather than including your own API token with the software. -
    - -When setting up the application you can use this [icon](/images/favicon-192x192.png). - To use notifications, please see the [getting started with automation page](/getting-started/automation/). When sending a notification, optional parameters can also be set as per the pushover [API documentation](https://pushover.net/api). Example notification triggered from the Alexa component for an intents is shown below which also uses [Automation Templating](/getting-started/automation-templating/) for the message: +{% raw %} ```yaml # Example configuration.yaml entries alexa: @@ -69,7 +66,7 @@ alexa: action: service: notify.notify data_template: - message: "The location of {% raw %}{{ User }}{% endraw %} has been queried via Alexa." + message: "The location of {{ User }} has been queried via Alexa." data: title: "Home Assistant" data: @@ -77,3 +74,4 @@ alexa: device: pixel url: "https://www.home-assistant.io/" ``` +{% endraw %} From a6ade458c70b8c05aa65e3c5dbf8fe14258735cb Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Thu, 5 Apr 2018 18:45:20 +0200 Subject: [PATCH 786/993] Add new configuration variable (#5117) --- .../device_tracker.asuswrt.markdown | 49 +++++++++++++++---- 1 file changed, 40 insertions(+), 9 deletions(-) diff --git a/source/_components/device_tracker.asuswrt.markdown b/source/_components/device_tracker.asuswrt.markdown index 4d809108e9..7889253ce9 100644 --- a/source/_components/device_tracker.asuswrt.markdown +++ b/source/_components/device_tracker.asuswrt.markdown @@ -19,6 +19,8 @@ The `asuswrt` platform offers presence detection by looking at connected devices This platform is **NOT** available for [Microsoft Windows installations](http://pexpect.readthedocs.io/en/stable/overview.html#pexpect-on-windows).

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

    You need to [enable telnet](https://www.asus.com/support/faq/1005449/) on your router if you choose to use `protocol: telnet`. From a620408dbd1789805bcaad218fda5f6d276280d2 Mon Sep 17 00:00:00 2001 From: cpgifford <37760961+cpgifford@users.noreply.github.com> Date: Thu, 5 Apr 2018 11:46:11 -0500 Subject: [PATCH 787/993] add supporting info for 2nd gen august lock (#5115) * add supporting info for 2nd gen august lock 2nd Gen August Lock needs to have the August Connect Module to be able to talk to home-assistant. If you have Doorbell then you don't need to have Connect. Just trying to help people troubleshoot in case they don't know whats going wrong. * Update syntax --- source/_components/august.markdown | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/source/_components/august.markdown b/source/_components/august.markdown index a4df212e8b..818002e14c 100644 --- a/source/_components/august.markdown +++ b/source/_components/august.markdown @@ -15,6 +15,10 @@ ha_iot_class: "Cloud Polling" The `august` component allows you to integrate your [August](http://august.com) devices in Home Assistant. Currently this component supports August Lock and Doorbell. +

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

    + ## {% linkable_title Configuration %} You will need your August login information (username (either phone# or email), and password) to use this module. From b0e5093b02d45859e1b4f895e5811465774c4736 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Thu, 5 Apr 2018 20:39:21 +0200 Subject: [PATCH 788/993] Add Tahoma switches docs (#5118) --- source/_components/switch.tahoma.markdown | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 source/_components/switch.tahoma.markdown diff --git a/source/_components/switch.tahoma.markdown b/source/_components/switch.tahoma.markdown new file mode 100644 index 0000000000..a7c3338fee --- /dev/null +++ b/source/_components/switch.tahoma.markdown @@ -0,0 +1,17 @@ +--- +layout: page +title: "Tahoma Switch" +description: "Instructions on how to integrate Tahoma switches into Home Assistant." +date: 2017-07-18 12:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: tahoma.png +ha_category: Sensor +ha_release: 0.59 +--- + +The `tahoma` switch platform lets you see switches added to your Tahoma Box in Home Assistant. + +Switches will be added automatically. Please refer to the [component](/components/tahoma/) configuration on how to setup Tahoma. From 4eecf3fc877710ebe7020c8c88180ecbd19302ea Mon Sep 17 00:00:00 2001 From: Sebastian Muszynski Date: Thu, 5 Apr 2018 22:21:51 +0200 Subject: [PATCH 789/993] Ceiling Light 4 (Jiaoyue 650) added to the list of supported devices (#5119) --- source/_components/light.yeelight.markdown | 1 + 1 file changed, 1 insertion(+) diff --git a/source/_components/light.yeelight.markdown b/source/_components/light.yeelight.markdown index e3fc28821f..b217309753 100644 --- a/source/_components/light.yeelight.markdown +++ b/source/_components/light.yeelight.markdown @@ -63,3 +63,4 @@ This component is tested to work with the following models. If you have a differ - **YLDD02YL**: Lightstrip (Color) - **MJCTD01YL**: Xiaomi Mijia Bedside Lamp - WIFI Version! - **MJTD01YL**: Xiaomi Mijia Smart LED Desk Lamp (autodiscovery isn't possible because the device doesn't support mDNS due to the small amount of RAM) +- **YLXD02YL**: Yeelight Ceiling Light 4 (Jiaoyue 650) From 0814d5c531daf1316dc7848c0b70dc567dcedee9 Mon Sep 17 00:00:00 2001 From: jmtatsch Date: Fri, 6 Apr 2018 06:11:42 +0200 Subject: [PATCH 790/993] Harmonised topic name and mention enabled autodiscovery (#5120) * Harmonised topic name and mention enabled autodiscovery * image shall not be the state of entity --- source/_docs/mqtt/discovery.markdown | 1 + 1 file changed, 1 insertion(+) diff --git a/source/_docs/mqtt/discovery.markdown b/source/_docs/mqtt/discovery.markdown index 60974c428b..aaa295dc4b 100644 --- a/source/_docs/mqtt/discovery.markdown +++ b/source/_docs/mqtt/discovery.markdown @@ -15,6 +15,7 @@ The discovery of MQTT devices will enable one to use MQTT devices with only mini Supported by MQTT discovery: - [Binary sensors](/components/binary_sensor.mqtt/) +- [Cameras](/components/camera.mqtt/) - [Covers](/components/cover.mqtt/) - [Fans](/components/fan.mqtt/) - [Lights](/components/light.mqtt/) From 572f001f5bd085d5abe31ae798ce4f9cccc05537 Mon Sep 17 00:00:00 2001 From: cdce8p <30130371+cdce8p@users.noreply.github.com> Date: Fri, 6 Apr 2018 09:16:35 +0200 Subject: [PATCH 791/993] Added description for markdown in persistent notifications (#5124) * Added markdown description for persistent_notification * Minor change --- .../persistent_notification.markdown | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/source/_components/persistent_notification.markdown b/source/_components/persistent_notification.markdown index 6e84078f3d..9fac3ddc0c 100644 --- a/source/_components/persistent_notification.markdown +++ b/source/_components/persistent_notification.markdown @@ -55,6 +55,26 @@ action: notification_id: "1234" ``` + +### {% linkable_title Markdown support %} + +The message attribute supports the [Markdown formatting syntax](https://daringfireball.net/projects/markdown/syntax). Some examples are: + +| Type | Message | +| ---- | ------- | +| Headline 1 | `# Headline` | +| Headline 2 | `## Headline` | +| Newline | `\n` | +| Bold | `**My bold text**` | +| Cursive | `*My cursive text*` | +| Link | `[Link](https://home-assistant.io/)` | +| Image | `![image](/local/my_image.jpg)` | + +

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

    + + ### {% linkable_title Create a persistent notification %} Choose service developer tool icon **Services** from the **Developer Tools** to call the `persistent_notification` service. Select `persistent_notification/create` from the list of **Available services:** and enter something like the sample below into the **Service Data** field and hit **CALL SERVICE**. From 6ff1b3be2dcbbd92459ffe82ce80bc54eb80cf7e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ville=20Skytt=C3=A4?= Date: Fri, 6 Apr 2018 11:38:46 +0300 Subject: [PATCH 792/993] getting-started: Soften note about Pi 3 being 2.4GHz WiFi only (#5125) * getting-started: Soften note about Pi 3 being 2.4GHz WiFi only The (currently unsupported) B+ has 5GHz support. * Add space --- source/getting-started/index.markdown | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/source/getting-started/index.markdown b/source/getting-started/index.markdown index 6781f28ab5..41382d7f35 100644 --- a/source/getting-started/index.markdown +++ b/source/getting-started/index.markdown @@ -18,14 +18,14 @@ Follow this guide if you want to easily get started with Home Assistant, or if y We will need a few things to get started with installing Home Assistant. Links below are linking to Amazon US. If you're not in the US, you should be able to find these items in web stores in your country. - [Raspberry Pi 3 model B](http://a.co/gEfMqL4) + [Power Supply](https://www.raspberrypi.org/help/faqs/#powerReqs) (at least 2.5A) -- [Micro SD Card](http://a.co/gslOydD). Get one that is Class 10 as they are more reliable. Size 32GB or bigger recommended. +- [Micro SD Card](http://a.co/gslOydD). Get one that is Class 10 as they are more reliable. Size 32 GB or bigger recommended. - SD Card reader. Part of most laptops, and also available as [standalone USB sticks](http://a.co/5FCyb0N) (the brand doesn't matter, just pick the cheapest) - Ethernet cable (optional, Hass.io can work with WiFi too)

    Support for the Raspberry Pi 3 model B+ is available in the alternative installation method [Hassbian](/docs/hassbian/installation/). - The recently released Raspberry Pi 3 model B+ is not yet supported by Hass.io + The recently released Raspberry Pi 3 model B+ is not yet supported by Hass.io.

    ### {% linkable_title Software requirements %} @@ -41,7 +41,7 @@ We will need a few things to get started with installing Home Assistant. Links b 1. Put the SD card in your SD card reader. 1. Open Etcher, select the Hass.io image and flash it to the SD card. -1. WiFi setup only: open the file `system-connections/resin-sample` (from the `resin-boot` volume on the SD card) with a text editor. Change `ssid` to be your network name and `psk` to be your password. Note that the Raspberry Pi 3 is a 2.4GHz WiFi device, so do not try to connect it to a 5GHz network. +1. WiFi setup only: open the file `system-connections/resin-sample` (from the `resin-boot` volume on the SD card) with a text editor. Change `ssid` to be your network name and `psk` to be your password. Note: When connecting to a 5 GHz-only network, make sure your device supports that. If you don't know what that means, then you probably have nothing to worry about. 1. Unmount the SD card and remove it from your SD card reader. 1. Insert the SD card into your Raspberry Pi 3. If you are going to use an Ethernet cable, connect that too. 1. Connect your Raspberry Pi to the power supply so it turns on. From 6347774428d606d8b35b35902b1319535bd7e9dc Mon Sep 17 00:00:00 2001 From: cdce8p <30130371+cdce8p@users.noreply.github.com> Date: Fri, 6 Apr 2018 11:02:04 +0200 Subject: [PATCH 793/993] Added additional log settings (#5123) --- source/_components/homekit.markdown | 1 + 1 file changed, 1 insertion(+) diff --git a/source/_components/homekit.markdown b/source/_components/homekit.markdown index 079849af30..5313a8428a 100644 --- a/source/_components/homekit.markdown +++ b/source/_components/homekit.markdown @@ -212,6 +212,7 @@ logger: default: warning logs: homeassistant.components.homekit: debug + pyhap: debug ``` 2. Reproduce the bug / problem you have encountered. 3. Stop Home Assistant and copy the log from the log file. That is necessary since some errors only get logged, when Home Assistant is being shutdown. From ccba1ffd3367159a17e92fecc92526c04e468ba5 Mon Sep 17 00:00:00 2001 From: Marco Orovecchia Date: Fri, 6 Apr 2018 15:35:27 +0200 Subject: [PATCH 794/993] Added Nanoleaf Aurora Light documentation (#5018) * Added Nanoleaf Aurora Light documentation * :pencil2: Tweaks --- .../light.nanoleaf_aurora.markdown | 52 ++++++++++++++++++ .../nanoleaf_aurora_light.png | Bin 0 -> 70366 bytes 2 files changed, 52 insertions(+) create mode 100644 source/_components/light.nanoleaf_aurora.markdown create mode 100644 source/images/supported_brands/nanoleaf_aurora_light.png diff --git a/source/_components/light.nanoleaf_aurora.markdown b/source/_components/light.nanoleaf_aurora.markdown new file mode 100644 index 0000000000..074bd1c77f --- /dev/null +++ b/source/_components/light.nanoleaf_aurora.markdown @@ -0,0 +1,52 @@ +--- +layout: page +title: "Nanoleaf Aurora Light Panel" +description: "Instructions how to integrate Nanoleaf Aurora Light Panels into Home Assistant." +date: 2018-01-04 20:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: nanoleaf_aurora_light.png +ha_category: Light +ha_iot_class: "Local Polling" +featured: false +ha_release: 0.67 +--- + +### {% linkable_title Configuration Sample %} + +To enable the Aurora lights, add the following lines to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +light: + - platform: aurora + host: 192.168.1.10 + token: xxxxxxxxxxxxxxxxxxxxx +``` + +{% configuration %} +host: + description: IP address or host-name of the device, e.g., 192.168.1.10. + required: true + type: string +token: + description: The *auth* token that you get via *POST* to */api/v1/new* + required: true + type: string +name: + description: Name of the component, make this unique if you have multiple Light Panels + required: false + type: string + default: Aurora +{% endconfiguration %} + +### {% linkable_title Getting The Auth Token %} + +1. Make sure that your Nanoleaf Aurora Panel is fully patched (as of the time of writing the latest version was 2.2.0) +2. Hold down the *ON* button on the Panel for 5 seconds; the LED will start flashing +3. Issue a *POST* request to the API endpoint, e.g., via `$ curl -i -X POST http://192.168.1.155:16021/api/v1/new` +4. The output should include the auth token like *{"auth_token":"xxxxxxxxxxxxxxxxxxxxx"}*, copy the resulting token into your configuration + +If you get a 403 Forbidden message, you probably did not press the *ON* button long enough. The time-frame to get a valid token is only 30 seconds, so you have to be quick to issue the curl request. diff --git a/source/images/supported_brands/nanoleaf_aurora_light.png b/source/images/supported_brands/nanoleaf_aurora_light.png new file mode 100644 index 0000000000000000000000000000000000000000..fb14d4752f1fe396210b8289f0d113d2f9b28584 GIT binary patch literal 70366 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 literal 0 HcmV?d00001 From 8aaf1547d265cf566d4088ae8c518795c47181b1 Mon Sep 17 00:00:00 2001 From: David Broadfoot Date: Fri, 6 Apr 2018 23:53:31 +1000 Subject: [PATCH 795/993] Added documentation for gogogate2 (#5023) * Add gogogate2 image * Added gogogate2 documentation * PR Feedback * Remove blank line * Add period --- source/_components/cover.gogogate2.markdown | 49 +++++++++++++++++++ source/images/supported_brands/gogogate2.png | Bin 0 -> 11962 bytes 2 files changed, 49 insertions(+) create mode 100644 source/_components/cover.gogogate2.markdown create mode 100644 source/images/supported_brands/gogogate2.png diff --git a/source/_components/cover.gogogate2.markdown b/source/_components/cover.gogogate2.markdown new file mode 100644 index 0000000000..bf6d62d37b --- /dev/null +++ b/source/_components/cover.gogogate2.markdown @@ -0,0 +1,49 @@ +--- +layout: page +title: "Gogogate2 Cover" +description: "Instructions on how to integrate Gogogate2-Enabled garage door covers into Home Assistant." +date: 2018-03-26 20:02 +sidebar: true +comments: false +sharing: true +footer: true +logo: gogogate2.png +ha_category: Cover +ha_release: 0.67 +ha_iot_class: Local Polling +--- + +The `gogogate2` cover platform lets you control Gogogate2-Enabled garage doors through Home Assistant. Device names in Home Assistant are generated based on the names defined in your Gogogate2 mobile app. + +## {% linkable_title Configuration %} + +To use your Gogogate2 cover in your installation, add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yml entry +cover: + - platform: gogogate2 + username: email@email.com + password: password + ip_address: 192.168.1.200 +``` + +{% configuration %} +username: + description: Your Gogogate2 account username. + required: true + type: string +password: + description: Your Gogogate2 account password. + required: true + type: string +ip_address: + description: The IP Address of your Gogogate2 device. + required: true + type: string +name: + description: Allows you to override the default name. + default: gogogate2 + required: false + type: string +{% endconfiguration %} diff --git a/source/images/supported_brands/gogogate2.png b/source/images/supported_brands/gogogate2.png new file mode 100644 index 0000000000000000000000000000000000000000..551043f64a53cec259a53fb71382fff754c4f348 GIT binary patch literal 11962 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 M07*qoM6N<$f^0pk4FCWD literal 0 HcmV?d00001 From 18881f59c3e7d609e6bf96299687d5f07486c223 Mon Sep 17 00:00:00 2001 From: phithor Date: Fri, 6 Apr 2018 15:54:14 +0200 Subject: [PATCH 796/993] Added max range switch note (#5126) --- source/_components/switch.tesla.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/switch.tesla.markdown b/source/_components/switch.tesla.markdown index a8c63ede4e..2ded4d7d10 100644 --- a/source/_components/switch.tesla.markdown +++ b/source/_components/switch.tesla.markdown @@ -13,7 +13,7 @@ ha_iot_class: "Cloud Push" ha_release: 0.54 --- -The `Tesla` platform allows you to control your [Tesla](https://www.tesla.com/) charger (enable/disable charging) from within Home Assistant. +The `Tesla` platform allows you to control your [Tesla](https://www.tesla.com/) charger (enable/disable charging, max range switch) from within Home Assistant. The switch platform will be automatically configured if Tesla component is configured. From 8255351d694103382705e899f52d2d3ede703f87 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Fri, 6 Apr 2018 10:29:01 -0400 Subject: [PATCH 797/993] Bump version to 0.67.0b0 --- _config.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/_config.yml b/_config.yml index a7b16a6bf6..401cd89fce 100644 --- a/_config.yml +++ b/_config.yml @@ -139,14 +139,14 @@ social: # Home Assistant release details current_major_version: 0 -current_minor_version: 66 -current_patch_version: 1 -date_released: 2018-04-01 +current_minor_version: 67 +current_patch_version: 0 +date_released: 2018-04-14 # Either # or the anchor link to latest release notes in the blog post. # Must be prefixed with a # and have double quotes around it. # Major release: -patch_version_notes: "#release-0661---april-1" +patch_version_notes: "#" # Minor release (Example #release-0431---april-25): # Date we moved to Discourse for comments From 4974ac5990994e0584f1e912c6f3ce4b51fe525b Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Fri, 6 Apr 2018 10:33:47 -0400 Subject: [PATCH 798/993] Add blog post for release 67 --- source/_posts/2018-04-14-release-67.markdown | 378 +++++++++++++++++++ 1 file changed, 378 insertions(+) create mode 100644 source/_posts/2018-04-14-release-67.markdown diff --git a/source/_posts/2018-04-14-release-67.markdown b/source/_posts/2018-04-14-release-67.markdown new file mode 100644 index 0000000000..ee6134e9da --- /dev/null +++ b/source/_posts/2018-04-14-release-67.markdown @@ -0,0 +1,378 @@ +--- +layout: post +title: "0.67: TBD - ALSO UPDATE DATE" +description: "TBD" +date: 2018-04-06 00:01:00 +date_formatted: "April 14, 2018" +author: Paulus Schoutsen +author_twitter: balloob +comments: true +categories: Release-Notes +og_image: /images/blog/2018-04-0.67/components.png +--- + + + +## {% linkable_title New Platforms %} + +- Qwikswitch async refactor & sensor ([@kellerza] - [#13509]) ([qwikswitch docs]) ([light.qwikswitch docs]) ([sensor.qwikswitch docs]) ([switch.qwikswitch docs]) (new-platform) +- Adds folder_watcher component ([@robmarkcole] - [#12918]) ([watchdog_file_watcher docs]) (new-platform) +- Add FreeDNS component ([@bdurrer] - [#13526]) ([freedns docs]) (new-platform) +- Google Maps location sharing device tracker ([@michaelarnauts] - [#12301]) ([device_tracker.google_maps docs]) (new-platform) +- Added Waze travel time sensor ([@Myrddyn1] - [#12387]) ([sensor.waze_travel_time docs]) (new-platform) +- Added switch component to Amcrest IP Camera. ([@adpriebe] - [#12992]) ([amcrest docs]) ([switch.amcrest docs]) (new-platform) +- Add mastodon ([@fabaff] - [#13441]) ([notify docs]) (new-platform) +- Tahoma switches ([@ikucuze] - [#13636]) ([tahoma docs]) ([switch.tahoma docs]) (new-platform) +- Add support for Nanoleaf Aurora Light Panels ([@Oro] - [#13456]) ([light.aurora docs]) (new-platform) + +## {% linkable_title If you need help... %} + +...don't hesitate to use our very active [forums](https://community.home-assistant.io/) or join us for a little [chat](https://discord.gg/c5DvZ4e). The release notes have comments enabled but it's preferred if you use the former communication channels. Thanks. + +## {% linkable_title Reporting Issues %} + +Experiencing issues introduced by this release? Please report them in our [issue tracker](https://github.com/home-assistant/home-assistant/issues). Make sure to fill in all fields of the issue template. + + +## {% linkable_title Breaking Changes %} + +- Updates default Pilight port number ([@frenck] - [#13419]) ([pilight docs]) (breaking change) +- Update to new "b2vapi" of BMW ConnectedDrive ([@ChristianKuehnel] - [#13305]) ([bmw_connected_drive docs]) ([binary_sensor.bmw_connected_drive docs]) ([lock.bmw_connected_drive docs]) ([sensor.bmw_connected_drive docs]) (breaking change) +- Remove MercedesME component ([@ReneNulschDE] - [#13538]) ([device_tracker docs]) ([mercedesme docs]) ([binary_sensor.mercedesme docs]) ([sensor.mercedesme docs]) (breaking change) +- Channel up and down for webostv ([@stephanerosi] - [#13624]) ([media_player.webostv docs]) (breaking change) +- Add media type separation for video/movie ([@Tadly] - [#13612]) (breaking change) +- Added ENTITY_ID_FORMAT import and set entity_id in __init__ ([@timmo001] - [#13642]) ([switch.broadlink docs]) (breaking change) + +## {% linkable_title All changes %} + +- Updates default Pilight port number ([@frenck] - [#13419]) ([pilight docs]) (breaking change) +- Upgrade mypy to 0.580 ([@fabaff] - [#13420]) +- Update to new "b2vapi" of BMW ConnectedDrive ([@ChristianKuehnel] - [#13305]) ([bmw_connected_drive docs]) ([binary_sensor.bmw_connected_drive docs]) ([lock.bmw_connected_drive docs]) ([sensor.bmw_connected_drive docs]) (breaking change) +- Add code owner for Manual Alarm with MQTT Control ([@colinodell] - [#13438]) +- QNAP updates ([@colinodell] - [#13435]) ([sensor.qnap docs]) +- Xiaomi MiIO Fan: Xiaomi Air Humidifier integration ([@syssi] - [#12627]) ([fan.xiaomi_miio docs]) +- Bump songpal version, fixes lots of issues mentioned in #13022 ([@rytilahti] - [#13440]) ([media_player.songpal docs]) +- Removed the google home warning from emulated_hue ([@mf-social] - [#13436]) +- Fixing odometer to display km ([@alandtse] - [#13427]) ([sensor.tesla docs]) +- Upgrade keyring to 12.0.0 and keyrings.alt to 3.0 ([@fabaff] - [#13452]) +- Upgrade aiohttp to 3.1.0 ([@fabaff] - [#13451]) +- Qwikswitch async & updates ([@kellerza] - [#12641]) ([qwikswitch docs]) ([light.qwikswitch docs]) ([switch.qwikswitch docs]) +- Make Telnet Switch value template optional ([@DanNixon] - [#13433]) ([switch.telnet docs]) +- Update yeelightsunflower to 0.0.10 ([@lindsaymarkwawrd] - [#13448]) +- Add more info to issue template ([@c727] - [#12955]) +- [RFC] Update issue template ([@amelchio] - [#12989]) +- Update total_connect_client to 0.17 for Honeywell L5100-WiFi Support ([@phileaton] - [#13473]) ([alarm_control_panel.totalconnect docs]) +- Upgrade python-mystrom to 0.4.2 ([@fabaff] - [#13485]) ([light.mystrom docs]) ([switch.mystrom docs]) +- New service added to control the power mode of the yeelight ([@syssi] - [#13267]) ([light.yeelight docs]) +- Upgrade slacker to 0.9.65 ([@fabaff] - [#13496]) ([notify docs]) +- Adds template function state_attr to get attribute from a state ([@Nossnevs] - [#13378]) +- Upgrade aiohttp to 3.1.1 ([@fabaff] - [#13510]) +- Update tradfri v5 ([@lwis] - [#11187]) ([tradfri docs]) ([light.tradfri docs]) ([sensor.tradfri docs]) +- Fix typos and update link (fixes #13520) ([@fabaff] - [#13529]) +- Tradfri - unique_id's and color_temp support for rgb-bulbs ([@NovapaX] - [#13531]) ([light.tradfri docs]) +- Qwikswitch async refactor & sensor ([@kellerza] - [#13509]) ([qwikswitch docs]) ([light.qwikswitch docs]) ([sensor.qwikswitch docs]) ([switch.qwikswitch docs]) (new-platform) +- Adds folder_watcher component ([@robmarkcole] - [#12918]) ([watchdog_file_watcher docs]) (new-platform) +- Update rflink to 0.0.37 ([@olskar] - [#12603]) ([rflink docs]) +- Added file path validity checks to file sensor ([@FrederikBolding] - [#12505]) ([sensor.file docs]) +- Allow for overriding the DoorBird push notification URL in configuration ([@Klikini] - [#13268]) ([doorbird docs]) +- Convert Hue to always use config entries ([@balloob] - [#13034]) ([hue docs]) +- Implement thermostat support for Alexa ([@trisk] - [#13340]) ([alexa docs]) +- deCONZ config entry ([@Kane610] - [#13402]) ([deconz docs]) +- Remove andrey-git from requirements monitoring ([@andrey-git] - [#13547]) +- Fix BMW device tracker toggling state if vehicle tracking is disabled ([@ChristianKuehnel] - [#12999]) ([device_tracker.bmw_connected_drive docs]) +- Xiaomi MiIO Switch: Support for the Xiaomi Chuangmi Plug V3 ([@syssi] - [#13271]) ([switch.xiaomi_miio docs]) +- Add FreeDNS component ([@bdurrer] - [#13526]) ([freedns docs]) (new-platform) +- Update pylint to 1.8.3 ([@scop] - [#13544]) +- Google Maps location sharing device tracker ([@michaelarnauts] - [#12301]) ([device_tracker.google_maps docs]) (new-platform) +- Check_config: Handle numbers correctly when printing config ([@hAmpzter] - [#13377]) +- Add support for Canary Flex ([@snjoetw] - [#13280]) ([canary docs]) ([sensor.canary docs]) +- Fixes #12758. Try other cameras even if one fails to initialize ([@PhracturedBlue] - [#13276]) ([amcrest docs]) +- Added HassOpenCover and HassCloseCover intents ([@tschmidty69] - [#13372]) ([conversation docs]) ([cover docs]) +- rfxtrx lib 0.22.0 ([@danielhiversen] - [#13576]) ([rfxtrx docs]) +- xiaomi lib upgrade ([@danielhiversen] - [#13577]) ([xiaomi_aqara docs]) +- Remove MercedesME component ([@ReneNulschDE] - [#13538]) ([device_tracker docs]) ([mercedesme docs]) ([binary_sensor.mercedesme docs]) ([sensor.mercedesme docs]) (breaking change) +- Added Waze travel time sensor ([@Myrddyn1] - [#12387]) ([sensor.waze_travel_time docs]) (new-platform) +- Added switch component to Amcrest IP Camera. ([@adpriebe] - [#12992]) ([amcrest docs]) ([switch.amcrest docs]) (new-platform) +- Upgrade pyhydroquebec 2.2.1 ([@titilambert] - [#13586]) ([sensor.hydroquebec docs]) +- Add mastodon ([@fabaff] - [#13441]) ([notify docs]) (new-platform) +- Added support for requesting RSSI values from Bluetooth devices ([@FrederikBolding] - [#12458]) ([device_tracker.bluetooth_tracker docs]) +- Fix mysensors update callback ([@MartinHjelmare] - [#13602]) ([mysensors docs]) +- Broadlink ([@danielhiversen] - [#13585]) ([sensor.broadlink docs]) ([switch.broadlink docs]) +- Fix IMAP email message_data ([@zhaokoh] - [#13606]) ([sensor.imap_email_content docs]) +- Re-add group polling as a fallback for observation ([@lwis] - [#13613]) ([light.tradfri docs]) +- Unflake folder watcher test ([@balloob] - [#13569]) +- Make mysensors updates and platform setup async ([@MartinHjelmare] - [#13603]) +- Use 0/1 for raspberry pi cover GPIO writes rather than true/false ([@fezfox] - [#13610]) ([cover.rpi_gpio docs]) +- Fix Hue error logging ([@balloob] - [#13616]) ([hue docs]) +- Bugfix for tradfri to correctly execute Command. ([@lwis] - [#13618]) ([light.tradfri docs]) +- Hue mireds value is actually 153 not 154 ([@Skaronator] - [#13601]) ([light docs]) +- changed PyTado version ([@wmalgadey] - [#13626]) ([tado docs]) +- Upgrade py-cpuinfo to 4.0.0 ([@fabaff] - [#13629]) ([sensor.cpuspeed docs]) +- Add Switzerland ([@fabaff] - [#13630]) ([binary_sensor.workday docs]) +- Xiaomi Mi WiFi Repeater 2 integration as device tracker ([@syssi] - [#13521]) +- Upgrade youtube_dl to 2018.04.03 ([@fabaff] - [#13647]) ([media_extractor docs]) +- Update plex.py ([@chronm] - [#13659]) ([sensor.plex docs]) +- Always enable config entries & remove config_entry_example ([@balloob] - [#13663]) ([config docs]) ([config_entry_example docs]) +- Add missing service docs for hs_color ([@armills] - [#13667]) +- Add regex functions as templating helpers ([@mountainsandcode] - [#13631]) +- Channel up and down for webostv ([@stephanerosi] - [#13624]) ([media_player.webostv docs]) (breaking change) +- Added headers configuration variable to notify.rest component ([@5LICK] - [#13674]) ([notify docs]) +- Spelling fixes ([@scop] - [#13681]) ([device_tracker docs]) ([smappee docs]) ([alarm_control_panel.ifttt docs]) ([climate.nest docs]) ([remote.xiaomi_miio docs]) +- Xiaomi MiIO Light: White Philips Candle Light support ([@syssi] - [#13682]) ([light.xiaomi_miio docs]) +- Bugfixes HomeKit covers, lights ([@cdce8p] - [#13689]) ([homekit docs]) +- Minor style changes, cleanup ([@cdce8p] - [#13654]) ([homekit docs]) +- Bugfix: Zwave Print_node to logfile instead of console ([@turbokongen] - [#13302]) ([zwave docs]) +- Update HAP-python to 1.1.8 ([@cdce8p] - [#13563]) ([homekit docs]) +- Update ha-philips_js to 0.0.3 ([@danielperna84] - [#13702]) ([media_player.philips_js docs]) +- Coverage & Codeowners ([@kellerza] - [#13700]) +- Bump insteonplm to 0.8.6 to fix sensor message handling ([@teharris1] - [#13691]) ([insteon_plm docs]) +- Fix asuswrt ap mode failure ([@shuaiger] - [#13693]) ([device_tracker docs]) +- Support color temperature in Homekit ([@morberg] - [#13658]) ([homekit docs]) +- Remove unused CONF_WATCHERS ([@robmarkcole] - [#13678]) ([folder_watcher docs]) +- Add media type separation for video/movie ([@Tadly] - [#13612]) (breaking change) +- Adding configration to disable ip address as a requirement Fixes: #13399 ([@PlanetJ] - [#13692]) ([device_tracker docs]) +- Tahoma switches ([@ikucuze] - [#13636]) ([tahoma docs]) ([switch.tahoma docs]) (new-platform) +- Send XY color for non-osram hue bulbs ([@armills] - [#13665]) ([light.hue docs]) +- Update AbodePy version to 0.12.3 ([@MisterWil] - [#13709]) ([abode docs]) +- Enable autodiscovery for mqtt cameras ([@jmtatsch] - [#13697]) ([mqtt docs]) ([camera.mqtt docs]) +- Added ENTITY_ID_FORMAT import and set entity_id in __init__ ([@timmo001] - [#13642]) ([switch.broadlink docs]) (breaking change) +- Fix #10175 ([@pschmitt] - [#13713]) ([media_player.liveboxplaytv docs]) +- Add support for Nanoleaf Aurora Light Panels ([@Oro] - [#13456]) ([light.aurora docs]) (new-platform) +- Added gogogate2 cover ([@dlbroadfoot] - [#13467]) + +[#11187]: https://github.com/home-assistant/home-assistant/pull/11187 +[#12301]: https://github.com/home-assistant/home-assistant/pull/12301 +[#12387]: https://github.com/home-assistant/home-assistant/pull/12387 +[#12458]: https://github.com/home-assistant/home-assistant/pull/12458 +[#12505]: https://github.com/home-assistant/home-assistant/pull/12505 +[#12603]: https://github.com/home-assistant/home-assistant/pull/12603 +[#12627]: https://github.com/home-assistant/home-assistant/pull/12627 +[#12641]: https://github.com/home-assistant/home-assistant/pull/12641 +[#12918]: https://github.com/home-assistant/home-assistant/pull/12918 +[#12955]: https://github.com/home-assistant/home-assistant/pull/12955 +[#12989]: https://github.com/home-assistant/home-assistant/pull/12989 +[#12992]: https://github.com/home-assistant/home-assistant/pull/12992 +[#12999]: https://github.com/home-assistant/home-assistant/pull/12999 +[#13034]: https://github.com/home-assistant/home-assistant/pull/13034 +[#13267]: https://github.com/home-assistant/home-assistant/pull/13267 +[#13268]: https://github.com/home-assistant/home-assistant/pull/13268 +[#13271]: https://github.com/home-assistant/home-assistant/pull/13271 +[#13276]: https://github.com/home-assistant/home-assistant/pull/13276 +[#13280]: https://github.com/home-assistant/home-assistant/pull/13280 +[#13302]: https://github.com/home-assistant/home-assistant/pull/13302 +[#13305]: https://github.com/home-assistant/home-assistant/pull/13305 +[#13340]: https://github.com/home-assistant/home-assistant/pull/13340 +[#13372]: https://github.com/home-assistant/home-assistant/pull/13372 +[#13377]: https://github.com/home-assistant/home-assistant/pull/13377 +[#13378]: https://github.com/home-assistant/home-assistant/pull/13378 +[#13402]: https://github.com/home-assistant/home-assistant/pull/13402 +[#13419]: https://github.com/home-assistant/home-assistant/pull/13419 +[#13420]: https://github.com/home-assistant/home-assistant/pull/13420 +[#13427]: https://github.com/home-assistant/home-assistant/pull/13427 +[#13433]: https://github.com/home-assistant/home-assistant/pull/13433 +[#13435]: https://github.com/home-assistant/home-assistant/pull/13435 +[#13436]: https://github.com/home-assistant/home-assistant/pull/13436 +[#13438]: https://github.com/home-assistant/home-assistant/pull/13438 +[#13440]: https://github.com/home-assistant/home-assistant/pull/13440 +[#13441]: https://github.com/home-assistant/home-assistant/pull/13441 +[#13448]: https://github.com/home-assistant/home-assistant/pull/13448 +[#13451]: https://github.com/home-assistant/home-assistant/pull/13451 +[#13452]: https://github.com/home-assistant/home-assistant/pull/13452 +[#13456]: https://github.com/home-assistant/home-assistant/pull/13456 +[#13467]: https://github.com/home-assistant/home-assistant/pull/13467 +[#13473]: https://github.com/home-assistant/home-assistant/pull/13473 +[#13485]: https://github.com/home-assistant/home-assistant/pull/13485 +[#13496]: https://github.com/home-assistant/home-assistant/pull/13496 +[#13509]: https://github.com/home-assistant/home-assistant/pull/13509 +[#13510]: https://github.com/home-assistant/home-assistant/pull/13510 +[#13521]: https://github.com/home-assistant/home-assistant/pull/13521 +[#13526]: https://github.com/home-assistant/home-assistant/pull/13526 +[#13529]: https://github.com/home-assistant/home-assistant/pull/13529 +[#13531]: https://github.com/home-assistant/home-assistant/pull/13531 +[#13538]: https://github.com/home-assistant/home-assistant/pull/13538 +[#13544]: https://github.com/home-assistant/home-assistant/pull/13544 +[#13547]: https://github.com/home-assistant/home-assistant/pull/13547 +[#13563]: https://github.com/home-assistant/home-assistant/pull/13563 +[#13569]: https://github.com/home-assistant/home-assistant/pull/13569 +[#13576]: https://github.com/home-assistant/home-assistant/pull/13576 +[#13577]: https://github.com/home-assistant/home-assistant/pull/13577 +[#13585]: https://github.com/home-assistant/home-assistant/pull/13585 +[#13586]: https://github.com/home-assistant/home-assistant/pull/13586 +[#13601]: https://github.com/home-assistant/home-assistant/pull/13601 +[#13602]: https://github.com/home-assistant/home-assistant/pull/13602 +[#13603]: https://github.com/home-assistant/home-assistant/pull/13603 +[#13606]: https://github.com/home-assistant/home-assistant/pull/13606 +[#13610]: https://github.com/home-assistant/home-assistant/pull/13610 +[#13612]: https://github.com/home-assistant/home-assistant/pull/13612 +[#13613]: https://github.com/home-assistant/home-assistant/pull/13613 +[#13616]: https://github.com/home-assistant/home-assistant/pull/13616 +[#13618]: https://github.com/home-assistant/home-assistant/pull/13618 +[#13624]: https://github.com/home-assistant/home-assistant/pull/13624 +[#13626]: https://github.com/home-assistant/home-assistant/pull/13626 +[#13629]: https://github.com/home-assistant/home-assistant/pull/13629 +[#13630]: https://github.com/home-assistant/home-assistant/pull/13630 +[#13631]: https://github.com/home-assistant/home-assistant/pull/13631 +[#13636]: https://github.com/home-assistant/home-assistant/pull/13636 +[#13642]: https://github.com/home-assistant/home-assistant/pull/13642 +[#13647]: https://github.com/home-assistant/home-assistant/pull/13647 +[#13654]: https://github.com/home-assistant/home-assistant/pull/13654 +[#13658]: https://github.com/home-assistant/home-assistant/pull/13658 +[#13659]: https://github.com/home-assistant/home-assistant/pull/13659 +[#13663]: https://github.com/home-assistant/home-assistant/pull/13663 +[#13665]: https://github.com/home-assistant/home-assistant/pull/13665 +[#13667]: https://github.com/home-assistant/home-assistant/pull/13667 +[#13674]: https://github.com/home-assistant/home-assistant/pull/13674 +[#13678]: https://github.com/home-assistant/home-assistant/pull/13678 +[#13681]: https://github.com/home-assistant/home-assistant/pull/13681 +[#13682]: https://github.com/home-assistant/home-assistant/pull/13682 +[#13689]: https://github.com/home-assistant/home-assistant/pull/13689 +[#13691]: https://github.com/home-assistant/home-assistant/pull/13691 +[#13692]: https://github.com/home-assistant/home-assistant/pull/13692 +[#13693]: https://github.com/home-assistant/home-assistant/pull/13693 +[#13697]: https://github.com/home-assistant/home-assistant/pull/13697 +[#13700]: https://github.com/home-assistant/home-assistant/pull/13700 +[#13702]: https://github.com/home-assistant/home-assistant/pull/13702 +[#13709]: https://github.com/home-assistant/home-assistant/pull/13709 +[#13713]: https://github.com/home-assistant/home-assistant/pull/13713 +[@5LICK]: https://github.com/5LICK +[@ChristianKuehnel]: https://github.com/ChristianKuehnel +[@DanNixon]: https://github.com/DanNixon +[@FrederikBolding]: https://github.com/FrederikBolding +[@Kane610]: https://github.com/Kane610 +[@Klikini]: https://github.com/Klikini +[@MartinHjelmare]: https://github.com/MartinHjelmare +[@MisterWil]: https://github.com/MisterWil +[@Myrddyn1]: https://github.com/Myrddyn1 +[@Nossnevs]: https://github.com/Nossnevs +[@NovapaX]: https://github.com/NovapaX +[@Oro]: https://github.com/Oro +[@PhracturedBlue]: https://github.com/PhracturedBlue +[@PlanetJ]: https://github.com/PlanetJ +[@ReneNulschDE]: https://github.com/ReneNulschDE +[@Skaronator]: https://github.com/Skaronator +[@Tadly]: https://github.com/Tadly +[@adpriebe]: https://github.com/adpriebe +[@alandtse]: https://github.com/alandtse +[@amelchio]: https://github.com/amelchio +[@andrey-git]: https://github.com/andrey-git +[@armills]: https://github.com/armills +[@balloob]: https://github.com/balloob +[@bdurrer]: https://github.com/bdurrer +[@c727]: https://github.com/c727 +[@cdce8p]: https://github.com/cdce8p +[@chronm]: https://github.com/chronm +[@colinodell]: https://github.com/colinodell +[@danielhiversen]: https://github.com/danielhiversen +[@danielperna84]: https://github.com/danielperna84 +[@dlbroadfoot]: https://github.com/dlbroadfoot +[@fabaff]: https://github.com/fabaff +[@fezfox]: https://github.com/fezfox +[@frenck]: https://github.com/frenck +[@hAmpzter]: https://github.com/hAmpzter +[@ikucuze]: https://github.com/ikucuze +[@jmtatsch]: https://github.com/jmtatsch +[@kellerza]: https://github.com/kellerza +[@lindsaymarkwawrd]: https://github.com/lindsaymarkwawrd +[@lwis]: https://github.com/lwis +[@mf-social]: https://github.com/mf-social +[@michaelarnauts]: https://github.com/michaelarnauts +[@morberg]: https://github.com/morberg +[@mountainsandcode]: https://github.com/mountainsandcode +[@olskar]: https://github.com/olskar +[@phileaton]: https://github.com/phileaton +[@pschmitt]: https://github.com/pschmitt +[@robmarkcole]: https://github.com/robmarkcole +[@rytilahti]: https://github.com/rytilahti +[@scop]: https://github.com/scop +[@shuaiger]: https://github.com/shuaiger +[@snjoetw]: https://github.com/snjoetw +[@stephanerosi]: https://github.com/stephanerosi +[@syssi]: https://github.com/syssi +[@teharris1]: https://github.com/teharris1 +[@timmo001]: https://github.com/timmo001 +[@titilambert]: https://github.com/titilambert +[@trisk]: https://github.com/trisk +[@tschmidty69]: https://github.com/tschmidty69 +[@turbokongen]: https://github.com/turbokongen +[@wmalgadey]: https://github.com/wmalgadey +[@zhaokoh]: https://github.com/zhaokoh +[abode docs]: https://www.home-assistant.io/components/abode/ +[alarm_control_panel.ifttt docs]: https://www.home-assistant.io/components/alarm_control_panel.ifttt/ +[alarm_control_panel.totalconnect docs]: https://www.home-assistant.io/components/alarm_control_panel.totalconnect/ +[alexa docs]: https://www.home-assistant.io/components/alexa/ +[amcrest docs]: https://www.home-assistant.io/components/amcrest/ +[binary_sensor.bmw_connected_drive docs]: https://www.home-assistant.io/components/binary_sensor.bmw_connected_drive/ +[binary_sensor.mercedesme docs]: https://www.home-assistant.io/components/binary_sensor.mercedesme/ +[binary_sensor.workday docs]: https://www.home-assistant.io/components/binary_sensor.workday/ +[bmw_connected_drive docs]: https://www.home-assistant.io/components/bmw_connected_drive/ +[camera.mqtt docs]: https://www.home-assistant.io/components/camera.mqtt/ +[canary docs]: https://www.home-assistant.io/components/canary/ +[climate.nest docs]: https://www.home-assistant.io/components/climate.nest/ +[config docs]: https://www.home-assistant.io/components/config/ +[config_entry_example docs]: https://www.home-assistant.io/components/config_entry_example/ +[conversation docs]: https://www.home-assistant.io/components/conversation/ +[cover docs]: https://www.home-assistant.io/components/cover/ +[cover.rpi_gpio docs]: https://www.home-assistant.io/components/cover.rpi_gpio/ +[deconz docs]: https://www.home-assistant.io/components/deconz/ +[device_tracker docs]: https://www.home-assistant.io/components/device_tracker/ +[device_tracker.bluetooth_tracker docs]: https://www.home-assistant.io/components/device_tracker.bluetooth_tracker/ +[device_tracker.bmw_connected_drive docs]: https://www.home-assistant.io/components/device_tracker.bmw_connected_drive/ +[device_tracker.google_maps docs]: https://www.home-assistant.io/components/device_tracker.google_maps/ +[doorbird docs]: https://www.home-assistant.io/components/doorbird/ +[fan.xiaomi_miio docs]: https://www.home-assistant.io/components/fan.xiaomi_miio/ +[folder_watcher docs]: https://www.home-assistant.io/components/folder_watcher/ +[freedns docs]: https://www.home-assistant.io/components/freedns/ +[homekit docs]: https://www.home-assistant.io/components/homekit/ +[hue docs]: https://www.home-assistant.io/components/hue/ +[insteon_plm docs]: https://www.home-assistant.io/components/insteon_plm/ +[light docs]: https://www.home-assistant.io/components/light/ +[light.aurora docs]: https://www.home-assistant.io/components/light.aurora/ +[light.hue docs]: https://www.home-assistant.io/components/light.hue/ +[light.mystrom docs]: https://www.home-assistant.io/components/light.mystrom/ +[light.qwikswitch docs]: https://www.home-assistant.io/components/light.qwikswitch/ +[light.tradfri docs]: https://www.home-assistant.io/components/light.tradfri/ +[light.xiaomi_miio docs]: https://www.home-assistant.io/components/light.xiaomi_miio/ +[light.yeelight docs]: https://www.home-assistant.io/components/light.yeelight/ +[lock.bmw_connected_drive docs]: https://www.home-assistant.io/components/lock.bmw_connected_drive/ +[media_extractor docs]: https://www.home-assistant.io/components/media_extractor/ +[media_player.liveboxplaytv docs]: https://www.home-assistant.io/components/media_player.liveboxplaytv/ +[media_player.philips_js docs]: https://www.home-assistant.io/components/media_player.philips_js/ +[media_player.songpal docs]: https://www.home-assistant.io/components/media_player.songpal/ +[media_player.webostv docs]: https://www.home-assistant.io/components/media_player.webostv/ +[mercedesme docs]: https://www.home-assistant.io/components/mercedesme/ +[mqtt docs]: https://www.home-assistant.io/components/mqtt/ +[mysensors docs]: https://www.home-assistant.io/components/mysensors/ +[notify docs]: https://www.home-assistant.io/components/notify/ +[pilight docs]: https://www.home-assistant.io/components/pilight/ +[qwikswitch docs]: https://www.home-assistant.io/components/qwikswitch/ +[remote.xiaomi_miio docs]: https://www.home-assistant.io/components/remote.xiaomi_miio/ +[rflink docs]: https://www.home-assistant.io/components/rflink/ +[rfxtrx docs]: https://www.home-assistant.io/components/rfxtrx/ +[sensor.bmw_connected_drive docs]: https://www.home-assistant.io/components/sensor.bmw_connected_drive/ +[sensor.broadlink docs]: https://www.home-assistant.io/components/sensor.broadlink/ +[sensor.canary docs]: https://www.home-assistant.io/components/sensor.canary/ +[sensor.cpuspeed docs]: https://www.home-assistant.io/components/sensor.cpuspeed/ +[sensor.file docs]: https://www.home-assistant.io/components/sensor.file/ +[sensor.hydroquebec docs]: https://www.home-assistant.io/components/sensor.hydroquebec/ +[sensor.imap_email_content docs]: https://www.home-assistant.io/components/sensor.imap_email_content/ +[sensor.mercedesme docs]: https://www.home-assistant.io/components/sensor.mercedesme/ +[sensor.plex docs]: https://www.home-assistant.io/components/sensor.plex/ +[sensor.qnap docs]: https://www.home-assistant.io/components/sensor.qnap/ +[sensor.qwikswitch docs]: https://www.home-assistant.io/components/sensor.qwikswitch/ +[sensor.tesla docs]: https://www.home-assistant.io/components/sensor.tesla/ +[sensor.tradfri docs]: https://www.home-assistant.io/components/sensor.tradfri/ +[sensor.waze_travel_time docs]: https://www.home-assistant.io/components/sensor.waze_travel_time/ +[smappee docs]: https://www.home-assistant.io/components/smappee/ +[switch.amcrest docs]: https://www.home-assistant.io/components/switch.amcrest/ +[switch.broadlink docs]: https://www.home-assistant.io/components/switch.broadlink/ +[switch.mystrom docs]: https://www.home-assistant.io/components/switch.mystrom/ +[switch.qwikswitch docs]: https://www.home-assistant.io/components/switch.qwikswitch/ +[switch.tahoma docs]: https://www.home-assistant.io/components/switch.tahoma/ +[switch.telnet docs]: https://www.home-assistant.io/components/switch.telnet/ +[switch.xiaomi_miio docs]: https://www.home-assistant.io/components/switch.xiaomi_miio/ +[tado docs]: https://www.home-assistant.io/components/tado/ +[tahoma docs]: https://www.home-assistant.io/components/tahoma/ +[tradfri docs]: https://www.home-assistant.io/components/tradfri/ +[watchdog_file_watcher docs]: https://www.home-assistant.io/components/watchdog_file_watcher/ +[xiaomi_aqara docs]: https://www.home-assistant.io/components/xiaomi_aqara/ +[zwave docs]: https://www.home-assistant.io/components/zwave/ From e4deae0cd2262d19d8699281a2e5258b0e44f3ae Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Fri, 6 Apr 2018 18:33:27 +0200 Subject: [PATCH 799/993] Fix list --- source/_docs/mqtt/discovery.markdown | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/_docs/mqtt/discovery.markdown b/source/_docs/mqtt/discovery.markdown index 60974c428b..1e7f28c627 100644 --- a/source/_docs/mqtt/discovery.markdown +++ b/source/_docs/mqtt/discovery.markdown @@ -42,8 +42,8 @@ The discovery topic need to follow a specific format: ``` - ``: One of the supported components, eg. `binary_sensor`. -- ``: (*Optional*) id of the node providing the topic. -- ``: "The ID of the device. This is only to allow for separate topics for each device and is not used for the `entity_id`." +- `` (*Optional*): ID of the node providing the topic. +- ``: The ID of the device. This is only to allow for separate topics for each device and is not used for the `entity_id`. - `<>`: The topic `config` or `state` which defines the current action. The payload will be checked like an entry in your `configuration.yaml` file if a new device is added. This means that missing variables will be filled with the platform's default values. All configuration variables which are *required* must be present in the initial payload send to `/config`. From 38ee7392c490a5ff86d6c55405fbaef5ea8e30ce Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Fri, 6 Apr 2018 18:44:40 +0200 Subject: [PATCH 800/993] Add iOS page (fixes #4972) (#5127) --- source/_components/ios.markdown | 17 +++++++++++++++++ source/_docs/ecosystem/ios.markdown | 7 +++---- 2 files changed, 20 insertions(+), 4 deletions(-) create mode 100644 source/_components/ios.markdown diff --git a/source/_components/ios.markdown b/source/_components/ios.markdown new file mode 100644 index 0000000000..3c734ea302 --- /dev/null +++ b/source/_components/ios.markdown @@ -0,0 +1,17 @@ +--- +layout: page +title: "iOS" +description: "Instructions on how to use the iOS companion app with Home Assistant." +date: 2018-04-06 08:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: apple.png +ha_category: Hub +featured: true +ha_release: 0.31 +ha_iot_class: depends +--- + +The `ios` component is the Home Assistant part for using the iOS companion app. For further details please check the [iOS section](/docs/ecosystem/ios/) in the documentation for further details. diff --git a/source/_docs/ecosystem/ios.markdown b/source/_docs/ecosystem/ios.markdown index 82ba667eec..027fe50323 100644 --- a/source/_docs/ecosystem/ios.markdown +++ b/source/_docs/ecosystem/ios.markdown @@ -8,7 +8,6 @@ comments: false sharing: true footer: true redirect_from: /ecosystem/ios/ -redirect_from: /components/ios/ --- The Home Assistant for iOS app offers a companion app for iOS which is deeply integrated into both Home Assistant and iOS. Its basic features include: @@ -22,7 +21,7 @@ The app is available on the iOS App Store in every country that Apple supports.

    -## Basic requirements +## {% linkable_title Basic requirements %} * iOS device running at least iOS 9, but iOS 10 is greatly preferred. * Home Assistant 0.42.4 or higher for push notification support. @@ -34,7 +33,7 @@ Loading the `ios` component will also load the [`device_tracker`][device-tracker ## {% linkable_title Setup %} -### Automated Setup +### {% linkable_title Automated Setup %} The `ios` component will automatically be loaded under the following circumstances: @@ -45,7 +44,7 @@ Automated discovery and component loading only happens at first install of the a After the first automated setup you need to add `ios:` to your configuration so that the component loads by default even after restarting Home Assistant. -### Manual Setup +### {% linkable_title Manual Setup %} You may also manually load the `ios` component by adding the following to your configuration: From d2c7a2fe772c5209cac8b446fc02cdb5d35ed010 Mon Sep 17 00:00:00 2001 From: Alexis Iglauer Date: Fri, 6 Apr 2018 19:50:23 +0200 Subject: [PATCH 801/993] Update sensor.mqtt.markdown to add initial slashes for ESPEasy (#4757) * Update sensor.mqtt.markdown The sensors topic required the initial slashes to function in my installation. * Make it more clear * Remove tab --- source/_components/sensor.mqtt.markdown | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/source/_components/sensor.mqtt.markdown b/source/_components/sensor.mqtt.markdown index dc835ac9d7..f84296bd86 100644 --- a/source/_components/sensor.mqtt.markdown +++ b/source/_components/sensor.mqtt.markdown @@ -167,7 +167,12 @@ sensor: ### {% linkable_title Get sensor value from a device with ESPEasy %} -Assuming that you have flashed your ESP8266 unit with [ESPEasy](https://github.com/letscontrolit/ESPEasy). Under "Config" set a name ("Unit Name:") for your device (here it's "bathroom"). A "Controller" for MQTT with the protocol "OpenHAB MQTT" is present and the entries ("Controller Subscribe:" and "Controller Publish:") are adjusted to match your needs. In this example the topics are prefixed with "home". Also, add a sensor in the "Devices" tap with the name "analog" and "brightness" as value. +Assuming that you have flashed your ESP8266 unit with [ESPEasy](https://github.com/letscontrolit/ESPEasy). Under "Config" set a name ("Unit Name:") for your device (here it's "bathroom"). A "Controller" for MQTT with the protocol "OpenHAB MQTT" is present and the entries ("Controller Subscribe:" and "Controller Publish:") are adjusted to match your needs. In this example the topics are prefixed with "home". Please keep in mind that the ESPEasy default topics start with a `/` and only contain the name when writing your entry for the `configuration.yaml` file. + +- **Controller Subscribe**: `home/%sysname%/#` (instead of `/%sysname%/#`) +- **Controller Publish**: `home/%sysname%/%tskname%/%valname%` (instead of `/%sysname%/%tskname%/%valname%`) + +Also, add a sensor in the "Devices" tap with the name "analog" and "brightness" as value. As soon as the unit is online, you will get the state of the sensor. @@ -188,5 +193,3 @@ sensor: name: Brightness ``` {% endraw %} - - From 243f02dc3eb25b58bd329b59cb74a3911dc76c10 Mon Sep 17 00:00:00 2001 From: Jerry Workman Date: Fri, 6 Apr 2018 14:07:52 -0400 Subject: [PATCH 802/993] HA version 0.64.0 voluptuous config check. (#4773) * HA version 0.64.0 voluptuous config check. * Update --- source/developers/development_validation.markdown | 1 + 1 file changed, 1 insertion(+) diff --git a/source/developers/development_validation.markdown b/source/developers/development_validation.markdown index 51fef2d39b..b629dcbe64 100644 --- a/source/developers/development_validation.markdown +++ b/source/developers/development_validation.markdown @@ -28,6 +28,7 @@ Some things to keep in mind: - Use the constants defined in `const.py` - Import `PLATFORM_SCHEMA` from the parent component and extend it - Preferred order is `required` first and `optional` second +- Starting with Home Assistant 0.64 `voluptuous` requires default values for optional configuration keys to be valid values. Don't use a default which is `None` like `vol.Optional(CONF_SOMETHING, default=None): cv.string`, set the default to `default=""` if required. ### {% linkable_title Snippets %} From 086960a502281d2b3ddfe25574adeb610bcd81bd Mon Sep 17 00:00:00 2001 From: cgtobi Date: Fri, 6 Apr 2018 21:49:47 +0200 Subject: [PATCH 803/993] Docs for transparency feature google calendar component (#5101) * Add transparency feature to google calendar component * Set default behaviour to ignore the availability. This reflects the old behaviour and does not break current workflows. --- source/_components/calendar.google.markdown | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/source/_components/calendar.google.markdown b/source/_components/calendar.google.markdown index d046396835..5999dc48ac 100644 --- a/source/_components/calendar.google.markdown +++ b/source/_components/calendar.google.markdown @@ -95,7 +95,8 @@ Variables: - **track**: (*Required*): Should we create a sensor `True` or ignore it `False`? - **search**: (*Optional*): If set will only trigger for matched events. - **offset**: (*Optional*): A set of characters that precede a number in the event title for designating a pre-trigger state change on the sensor. (Default: `!!`) - +  - **ignore_availablilty**: (*Optional*): Should we respect `free`/`busy` flags? (Defaults to `true`) +   From this we will end up with the binary sensors `calendar.test_unimportant` and `calendar.test_important` which will toggle themselves on/off based on events on the same calendar that match the search value set for each. You'll also have a sensor `calendar.test_everything` that will not filter events out and always show the next event available. But what if you only wanted it to toggle based on all events? Just leave out the *search* parameter. From 5c47c159a9f0653cf988cf421f0f4c6eed6d4d5a Mon Sep 17 00:00:00 2001 From: Juggels Date: Fri, 6 Apr 2018 22:24:10 +0200 Subject: [PATCH 804/993] Allow TodoistAPI date_string in service call (#4923) * Update docs to reflect changes * Match docs to latest component update * Missed renamed parameters in example --- source/_components/calendar.todoist.markdown | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/source/_components/calendar.todoist.markdown b/source/_components/calendar.todoist.markdown index d3ad45c8c4..c416ddb50d 100644 --- a/source/_components/calendar.todoist.markdown +++ b/source/_components/calendar.todoist.markdown @@ -111,7 +111,7 @@ Home Assistant does its best to determine what task in each project is "most" im Todoist also comes with access to a service, `calendar.todoist_new_task`. This service can be used to create a new Todoist task. You can specify labels and a project, or you can leave them blank, and the task will go to your "Inbox" project. -Here's an example JSON payload: +Here are two example JSON payloads resulting in the same task: ```json { @@ -123,6 +123,17 @@ Here's an example JSON payload: } ``` +```json +{ + "content": "Pick up the mail", + "project": "Errands", + "labels":"Homework,School", + "priority":3, + "due_date_string":"tomorrow at 14:00", + "due_date_lang":"en" +} +``` + - **content** (*Required*): The name of the task you want to create. - **project** (*Optional*): The project to put the task in. @@ -131,6 +142,11 @@ Here's an example JSON payload: - **priority** (*Optional*): The priority of the task, from 1-4. Again, 1 means least important, and 4 means most important. -- **due_date** (*Optional*): When the task should be due, in either YYYY-MM-DD format or YYYY-MM-DD HH:MM format. +- **due_date_string** (*Optional*): When the task should be due, in [natural language](https://support.todoist.com/hc/en-us/articles/205325931-Dates-and-Times). Mutually exclusive with `due_date` + +- **due_date_lang** (*Optional*): When `due_date_string` is set, it is posisble to set the language. + Valid languages are: `en`, `da`, `pl`, `zh`, `ko`, `de`, `pt`, `ja`, `it`, `fr`, `sv`, `ru`, `es`, `nl` + +- **due_date** (*Optional*): When the task should be due, in either YYYY-MM-DD format or YYYY-MM-DD HH:MM format. Mutually exclusive with `due_date_string`. Note that there's (currently) no way to mark tasks as done through Home Assistant; task names do not necessarily have to be unique, so you could find yourself in a situation where you close the wrong task. From 5d0eb6b5a61a2de83b67b0298195f4f01d0209b2 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Fri, 6 Apr 2018 23:05:55 +0200 Subject: [PATCH 805/993] Remove periods --- .../_docs/installation/hassbian/integrations.markdown | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/source/_docs/installation/hassbian/integrations.markdown b/source/_docs/installation/hassbian/integrations.markdown index 5658ce712e..d6f7a3fd0c 100644 --- a/source/_docs/installation/hassbian/integrations.markdown +++ b/source/_docs/installation/hassbian/integrations.markdown @@ -26,11 +26,11 @@ For more details about the GPIO layout, visit the [documentation](https://www.ra Permission have been given to the `homeassistant` user to use the GPIO pins and all of the following components should require no underlying changes to work. Just follow the component pages for each on how to add them to your Home Assistant installation. - - [DHT Sensor](/components/sensor.dht/). - - [Raspberry Pi Cover](/components/cover.rpi_gpio/). - - [Raspberry Pi GPIO Binary Sensor](/components/binary_sensor.rpi_gpio/). - - [Raspberry Pi GPIO Switch](/components/switch.rpi_gpio/). - - [Raspberry Pi RF Switch](/components/switch.rpi_rf/). + - [DHT Sensor](/components/sensor.dht/) + - [Raspberry Pi Cover](/components/cover.rpi_gpio/) + - [Raspberry Pi GPIO Binary Sensor](/components/binary_sensor.rpi_gpio/) + - [Raspberry Pi GPIO Switch](/components/switch.rpi_gpio/) + - [Raspberry Pi RF Switch](/components/switch.rpi_rf/) ### {% linkable_title Raspberry Pi Camera %} From 690fa13130c8995ad7046c54a28dde6aaa0129a3 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Fri, 6 Apr 2018 23:13:40 +0200 Subject: [PATCH 806/993] Update layout --- source/_components/smappee.markdown | 33 +++++++++++++++-------------- 1 file changed, 17 insertions(+), 16 deletions(-) diff --git a/source/_components/smappee.markdown b/source/_components/smappee.markdown index 5e35f4866f..ce56987f72 100644 --- a/source/_components/smappee.markdown +++ b/source/_components/smappee.markdown @@ -12,41 +12,42 @@ ha_release: "0.64" ha_category: Hub --- -[Smappee](https://www.smappee.com/) controller for energy monitoring and Comport plug switches. +The `smappee` component adds support for the [Smappee](https://www.smappee.com/) controller for energy monitoring and Comport plug switches. Switches and Sensors are supported - and will be automatically added when you connect to the Smappee controller. -The smappee component gets information from [Smappee API](https://smappee.atlassian.net/wiki/display/DEVAPI/API+Methods) using the [smappy](https://github.com/EnergieID/smappy) pypy module +The smappee component gets information from [Smappee API](https://smappee.atlassian.net/wiki/display/DEVAPI/API+Methods). -

    -Info on how to get api access is described in the [smappy wiki](https://github.com/EnergieID/smappy/wiki) -

    +## {% linkable_title Configuration %} + +Info on how to get API access is described in the [smappy wiki](https://github.com/EnergieID/smappy/wiki). + +To use the `smappee` component in your installation, add the following to your `configuration.yaml` file: -# Configuration ```yaml # Example configuration.yaml entry smappee: - host: 10.0.0.5 - client_id: YOUR_CLIENT_ID - client_secret: YOUR_CLIENT_SECRET - username: YOUR_MYSMAPPEE_USERNAME - password: YOUR_MYSMAPPEE_PASSWORD + host: 10.0.0.5 + client_id: YOUR_CLIENT_ID + client_secret: YOUR_CLIENT_SECRET + username: YOUR_MYSMAPPEE_USERNAME + password: YOUR_MYSMAPPEE_PASSWORD ``` ```yaml # Minimal example configuration.yaml entry smappee: - host: 10.0.0.5 + host: 10.0.0.5 ``` ```yaml # Cloud only example configuration.yaml entry smappee: - client_id: YOUR_CLIENT_ID - client_secret: YOUR_CLIENT_SECRET - username: YOUR_MYSMAPPEE_USERNAME - password: YOUR_MYSMAPPEE_PASSWORD + client_id: YOUR_CLIENT_ID + client_secret: YOUR_CLIENT_SECRET + username: YOUR_MYSMAPPEE_USERNAME + password: YOUR_MYSMAPPEE_PASSWORD ``` Configuration variables: From 42e0e4f477ffce814f236aad982078076a5edf36 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Sat, 7 Apr 2018 10:20:34 +0200 Subject: [PATCH 807/993] Fix link --- source/help/reporting_issues.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/help/reporting_issues.markdown b/source/help/reporting_issues.markdown index f3764c3d08..d2290788c5 100644 --- a/source/help/reporting_issues.markdown +++ b/source/help/reporting_issues.markdown @@ -11,7 +11,7 @@ footer: true If you have an installation, a setup or a configuration issue please use our [Forum](https://community.home-assistant.io/) to get help. We have a big community which will help you if they can. -If you found a bug then please report it in one of our [trackers](help/#bugs-feature-requests-and-alike). To help you and our developers to identify the issue quickly, please fill out the provided template. The "weird" content you will see is there to render your entry in a nice format after submitting. It's just [markddown](https://guides.github.com/features/mastering-markdown/). +If you found a bug then please report it in one of our [trackers](/help/#bugs-feature-requests-and-alike). To help you and our developers to identify the issue quickly, please fill out the provided template. The "weird" content you will see is there to render your entry in a nice format after submitting. It's just [markddown](https://guides.github.com/features/mastering-markdown/). Use the command below to get the Home Assistant release you are running from a command-line. From 0c7780681bdfe73b07184b79bdcd5adf38fd24a7 Mon Sep 17 00:00:00 2001 From: Otto Winter Date: Sun, 8 Apr 2018 04:32:01 +0200 Subject: [PATCH 808/993] MQTT Sensor Unique ID feature (#5131) --- source/_components/sensor.mqtt.markdown | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/source/_components/sensor.mqtt.markdown b/source/_components/sensor.mqtt.markdown index dc835ac9d7..7076fc9b56 100644 --- a/source/_components/sensor.mqtt.markdown +++ b/source/_components/sensor.mqtt.markdown @@ -80,6 +80,10 @@ json_attributes: description: A list of keys to extract values from a JSON dictionary payload and then set as sensor attributes. reqired: false type: list, string +unique_id: + description: "An id that uniquely identifies this sensor. If 2 sensors have the same unique id, Home Assistant will raise an exception.**" + required: false + type: string {% endconfiguration %} ## {% linkable_title Examples %} From c427325a9ccb90c0d6e0ee0a3163da810ce754b1 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Sun, 8 Apr 2018 10:03:01 -0400 Subject: [PATCH 809/993] Remove domain prefix --- source/_posts/2018-04-14-release-67.markdown | 160 +++++++++---------- 1 file changed, 80 insertions(+), 80 deletions(-) diff --git a/source/_posts/2018-04-14-release-67.markdown b/source/_posts/2018-04-14-release-67.markdown index ee6134e9da..f6d3c285a6 100644 --- a/source/_posts/2018-04-14-release-67.markdown +++ b/source/_posts/2018-04-14-release-67.markdown @@ -296,83 +296,83 @@ Experiencing issues introduced by this release? Please report them in our [issue [@turbokongen]: https://github.com/turbokongen [@wmalgadey]: https://github.com/wmalgadey [@zhaokoh]: https://github.com/zhaokoh -[abode docs]: https://www.home-assistant.io/components/abode/ -[alarm_control_panel.ifttt docs]: https://www.home-assistant.io/components/alarm_control_panel.ifttt/ -[alarm_control_panel.totalconnect docs]: https://www.home-assistant.io/components/alarm_control_panel.totalconnect/ -[alexa docs]: https://www.home-assistant.io/components/alexa/ -[amcrest docs]: https://www.home-assistant.io/components/amcrest/ -[binary_sensor.bmw_connected_drive docs]: https://www.home-assistant.io/components/binary_sensor.bmw_connected_drive/ -[binary_sensor.mercedesme docs]: https://www.home-assistant.io/components/binary_sensor.mercedesme/ -[binary_sensor.workday docs]: https://www.home-assistant.io/components/binary_sensor.workday/ -[bmw_connected_drive docs]: https://www.home-assistant.io/components/bmw_connected_drive/ -[camera.mqtt docs]: https://www.home-assistant.io/components/camera.mqtt/ -[canary docs]: https://www.home-assistant.io/components/canary/ -[climate.nest docs]: https://www.home-assistant.io/components/climate.nest/ -[config docs]: https://www.home-assistant.io/components/config/ -[config_entry_example docs]: https://www.home-assistant.io/components/config_entry_example/ -[conversation docs]: https://www.home-assistant.io/components/conversation/ -[cover docs]: https://www.home-assistant.io/components/cover/ -[cover.rpi_gpio docs]: https://www.home-assistant.io/components/cover.rpi_gpio/ -[deconz docs]: https://www.home-assistant.io/components/deconz/ -[device_tracker docs]: https://www.home-assistant.io/components/device_tracker/ -[device_tracker.bluetooth_tracker docs]: https://www.home-assistant.io/components/device_tracker.bluetooth_tracker/ -[device_tracker.bmw_connected_drive docs]: https://www.home-assistant.io/components/device_tracker.bmw_connected_drive/ -[device_tracker.google_maps docs]: https://www.home-assistant.io/components/device_tracker.google_maps/ -[doorbird docs]: https://www.home-assistant.io/components/doorbird/ -[fan.xiaomi_miio docs]: https://www.home-assistant.io/components/fan.xiaomi_miio/ -[folder_watcher docs]: https://www.home-assistant.io/components/folder_watcher/ -[freedns docs]: https://www.home-assistant.io/components/freedns/ -[homekit docs]: https://www.home-assistant.io/components/homekit/ -[hue docs]: https://www.home-assistant.io/components/hue/ -[insteon_plm docs]: https://www.home-assistant.io/components/insteon_plm/ -[light docs]: https://www.home-assistant.io/components/light/ -[light.aurora docs]: https://www.home-assistant.io/components/light.aurora/ -[light.hue docs]: https://www.home-assistant.io/components/light.hue/ -[light.mystrom docs]: https://www.home-assistant.io/components/light.mystrom/ -[light.qwikswitch docs]: https://www.home-assistant.io/components/light.qwikswitch/ -[light.tradfri docs]: https://www.home-assistant.io/components/light.tradfri/ -[light.xiaomi_miio docs]: https://www.home-assistant.io/components/light.xiaomi_miio/ -[light.yeelight docs]: https://www.home-assistant.io/components/light.yeelight/ -[lock.bmw_connected_drive docs]: https://www.home-assistant.io/components/lock.bmw_connected_drive/ -[media_extractor docs]: https://www.home-assistant.io/components/media_extractor/ -[media_player.liveboxplaytv docs]: https://www.home-assistant.io/components/media_player.liveboxplaytv/ -[media_player.philips_js docs]: https://www.home-assistant.io/components/media_player.philips_js/ -[media_player.songpal docs]: https://www.home-assistant.io/components/media_player.songpal/ -[media_player.webostv docs]: https://www.home-assistant.io/components/media_player.webostv/ -[mercedesme docs]: https://www.home-assistant.io/components/mercedesme/ -[mqtt docs]: https://www.home-assistant.io/components/mqtt/ -[mysensors docs]: https://www.home-assistant.io/components/mysensors/ -[notify docs]: https://www.home-assistant.io/components/notify/ -[pilight docs]: https://www.home-assistant.io/components/pilight/ -[qwikswitch docs]: https://www.home-assistant.io/components/qwikswitch/ -[remote.xiaomi_miio docs]: https://www.home-assistant.io/components/remote.xiaomi_miio/ -[rflink docs]: https://www.home-assistant.io/components/rflink/ -[rfxtrx docs]: https://www.home-assistant.io/components/rfxtrx/ -[sensor.bmw_connected_drive docs]: https://www.home-assistant.io/components/sensor.bmw_connected_drive/ -[sensor.broadlink docs]: https://www.home-assistant.io/components/sensor.broadlink/ -[sensor.canary docs]: https://www.home-assistant.io/components/sensor.canary/ -[sensor.cpuspeed docs]: https://www.home-assistant.io/components/sensor.cpuspeed/ -[sensor.file docs]: https://www.home-assistant.io/components/sensor.file/ -[sensor.hydroquebec docs]: https://www.home-assistant.io/components/sensor.hydroquebec/ -[sensor.imap_email_content docs]: https://www.home-assistant.io/components/sensor.imap_email_content/ -[sensor.mercedesme docs]: https://www.home-assistant.io/components/sensor.mercedesme/ -[sensor.plex docs]: https://www.home-assistant.io/components/sensor.plex/ -[sensor.qnap docs]: https://www.home-assistant.io/components/sensor.qnap/ -[sensor.qwikswitch docs]: https://www.home-assistant.io/components/sensor.qwikswitch/ -[sensor.tesla docs]: https://www.home-assistant.io/components/sensor.tesla/ -[sensor.tradfri docs]: https://www.home-assistant.io/components/sensor.tradfri/ -[sensor.waze_travel_time docs]: https://www.home-assistant.io/components/sensor.waze_travel_time/ -[smappee docs]: https://www.home-assistant.io/components/smappee/ -[switch.amcrest docs]: https://www.home-assistant.io/components/switch.amcrest/ -[switch.broadlink docs]: https://www.home-assistant.io/components/switch.broadlink/ -[switch.mystrom docs]: https://www.home-assistant.io/components/switch.mystrom/ -[switch.qwikswitch docs]: https://www.home-assistant.io/components/switch.qwikswitch/ -[switch.tahoma docs]: https://www.home-assistant.io/components/switch.tahoma/ -[switch.telnet docs]: https://www.home-assistant.io/components/switch.telnet/ -[switch.xiaomi_miio docs]: https://www.home-assistant.io/components/switch.xiaomi_miio/ -[tado docs]: https://www.home-assistant.io/components/tado/ -[tahoma docs]: https://www.home-assistant.io/components/tahoma/ -[tradfri docs]: https://www.home-assistant.io/components/tradfri/ -[watchdog_file_watcher docs]: https://www.home-assistant.io/components/watchdog_file_watcher/ -[xiaomi_aqara docs]: https://www.home-assistant.io/components/xiaomi_aqara/ -[zwave docs]: https://www.home-assistant.io/components/zwave/ +[abode docs]: /components/abode/ +[alarm_control_panel.ifttt docs]: /components/alarm_control_panel.ifttt/ +[alarm_control_panel.totalconnect docs]: /components/alarm_control_panel.totalconnect/ +[alexa docs]: /components/alexa/ +[amcrest docs]: /components/amcrest/ +[binary_sensor.bmw_connected_drive docs]: /components/binary_sensor.bmw_connected_drive/ +[binary_sensor.mercedesme docs]: /components/binary_sensor.mercedesme/ +[binary_sensor.workday docs]: /components/binary_sensor.workday/ +[bmw_connected_drive docs]: /components/bmw_connected_drive/ +[camera.mqtt docs]: /components/camera.mqtt/ +[canary docs]: /components/canary/ +[climate.nest docs]: /components/climate.nest/ +[config docs]: /components/config/ +[config_entry_example docs]: /components/config_entry_example/ +[conversation docs]: /components/conversation/ +[cover docs]: /components/cover/ +[cover.rpi_gpio docs]: /components/cover.rpi_gpio/ +[deconz docs]: /components/deconz/ +[device_tracker docs]: /components/device_tracker/ +[device_tracker.bluetooth_tracker docs]: /components/device_tracker.bluetooth_tracker/ +[device_tracker.bmw_connected_drive docs]: /components/device_tracker.bmw_connected_drive/ +[device_tracker.google_maps docs]: /components/device_tracker.google_maps/ +[doorbird docs]: /components/doorbird/ +[fan.xiaomi_miio docs]: /components/fan.xiaomi_miio/ +[folder_watcher docs]: /components/folder_watcher/ +[freedns docs]: /components/freedns/ +[homekit docs]: /components/homekit/ +[hue docs]: /components/hue/ +[insteon_plm docs]: /components/insteon_plm/ +[light docs]: /components/light/ +[light.aurora docs]: /components/light.aurora/ +[light.hue docs]: /components/light.hue/ +[light.mystrom docs]: /components/light.mystrom/ +[light.qwikswitch docs]: /components/light.qwikswitch/ +[light.tradfri docs]: /components/light.tradfri/ +[light.xiaomi_miio docs]: /components/light.xiaomi_miio/ +[light.yeelight docs]: /components/light.yeelight/ +[lock.bmw_connected_drive docs]: /components/lock.bmw_connected_drive/ +[media_extractor docs]: /components/media_extractor/ +[media_player.liveboxplaytv docs]: /components/media_player.liveboxplaytv/ +[media_player.philips_js docs]: /components/media_player.philips_js/ +[media_player.songpal docs]: /components/media_player.songpal/ +[media_player.webostv docs]: /components/media_player.webostv/ +[mercedesme docs]: /components/mercedesme/ +[mqtt docs]: /components/mqtt/ +[mysensors docs]: /components/mysensors/ +[notify docs]: /components/notify/ +[pilight docs]: /components/pilight/ +[qwikswitch docs]: /components/qwikswitch/ +[remote.xiaomi_miio docs]: /components/remote.xiaomi_miio/ +[rflink docs]: /components/rflink/ +[rfxtrx docs]: /components/rfxtrx/ +[sensor.bmw_connected_drive docs]: /components/sensor.bmw_connected_drive/ +[sensor.broadlink docs]: /components/sensor.broadlink/ +[sensor.canary docs]: /components/sensor.canary/ +[sensor.cpuspeed docs]: /components/sensor.cpuspeed/ +[sensor.file docs]: /components/sensor.file/ +[sensor.hydroquebec docs]: /components/sensor.hydroquebec/ +[sensor.imap_email_content docs]: /components/sensor.imap_email_content/ +[sensor.mercedesme docs]: /components/sensor.mercedesme/ +[sensor.plex docs]: /components/sensor.plex/ +[sensor.qnap docs]: /components/sensor.qnap/ +[sensor.qwikswitch docs]: /components/sensor.qwikswitch/ +[sensor.tesla docs]: /components/sensor.tesla/ +[sensor.tradfri docs]: /components/sensor.tradfri/ +[sensor.waze_travel_time docs]: /components/sensor.waze_travel_time/ +[smappee docs]: /components/smappee/ +[switch.amcrest docs]: /components/switch.amcrest/ +[switch.broadlink docs]: /components/switch.broadlink/ +[switch.mystrom docs]: /components/switch.mystrom/ +[switch.qwikswitch docs]: /components/switch.qwikswitch/ +[switch.tahoma docs]: /components/switch.tahoma/ +[switch.telnet docs]: /components/switch.telnet/ +[switch.xiaomi_miio docs]: /components/switch.xiaomi_miio/ +[tado docs]: /components/tado/ +[tahoma docs]: /components/tahoma/ +[tradfri docs]: /components/tradfri/ +[watchdog_file_watcher docs]: /components/watchdog_file_watcher/ +[xiaomi_aqara docs]: /components/xiaomi_aqara/ +[zwave docs]: /components/zwave/ From 2abdd0d46550f05737bd918ef7921fcce7fa55cc Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Sun, 8 Apr 2018 10:09:41 -0400 Subject: [PATCH 810/993] remove some absolute urls in favor of relative --- source/_posts/2018-03-30-release-66.markdown | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/source/_posts/2018-03-30-release-66.markdown b/source/_posts/2018-03-30-release-66.markdown index 3cb379af26..26aba182be 100644 --- a/source/_posts/2018-03-30-release-66.markdown +++ b/source/_posts/2018-03-30-release-66.markdown @@ -566,6 +566,6 @@ Experiencing issues introduced by this release? Please report them in our [issue [@MartinHjelmare]: https://github.com/MartinHjelmare [@armills]: https://github.com/armills [@cdce8p]: https://github.com/cdce8p -[homekit docs]: https://www.home-assistant.io/components/homekit/ -[light.mqtt_json docs]: https://www.home-assistant.io/components/light.mqtt_json/ -[sensor.mysensors docs]: https://www.home-assistant.io/components/sensor.mysensors/ +[homekit docs]: /components/homekit/ +[light.mqtt_json docs]: /components/light.mqtt_json/ +[sensor.mysensors docs]: /components/sensor.mysensors/ From a151bb7ff22768b241268eb24ae9f37dafbf9c02 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Sun, 8 Apr 2018 17:42:40 +0200 Subject: [PATCH 811/993] It's ASL 2.0 and no longer MIT --- source/developers/development.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/developers/development.markdown b/source/developers/development.markdown index f2f79b70c4..8bc614295d 100644 --- a/source/developers/development.markdown +++ b/source/developers/development.markdown @@ -11,7 +11,7 @@ footer: true Home Assistant is built from the ground up to be easily extensible using components. Home Assistant uses [Python 3](https://www.python.org/) for the backend and [Polymer (Web components)](https://www.polymer-project.org/) for the frontend. -Home Assistant is open-source and MIT-licensed. Here are links to the source: +Home Assistant is open-source and licensed under [Apache 2.0](http://www.apache.org/licenses/LICENSE-2.0). Here are links to the source: - [home-assistant](https://github.com/home-assistant/home-assistant): Python server backend. - [home-assistant-polymer](https://github.com/home-assistant/home-assistant-polymer): Polymer UI. From 2667e63bab3292e04a411914c815985b725a787e Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Sun, 8 Apr 2018 17:44:11 +0200 Subject: [PATCH 812/993] Fix typo --- source/_components/http.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/http.markdown b/source/_components/http.markdown index 458e10794e..8fddcfd5d9 100644 --- a/source/_components/http.markdown +++ b/source/_components/http.markdown @@ -90,7 +90,7 @@ Please note, that sources from `trusted_networks` won't be banned automatically. ## {% linkable_title Hosting files %} -If you want to use Home Assistant to host or serve static files then create a directory called `www` under the configuration path (`/config` on Hass.io, `.homeassistant` elswhere). The static files in `www/` can be accessed by the following URL `http://your.domain:8123/local/`, for example `audio.mp3` would be accessed as `http://your.domain:8123/local/audio.mp3`. +If you want to use Home Assistant to host or serve static files then create a directory called `www` under the configuration path (`/config` on Hass.io, `.homeassistant` elsewhere). The static files in `www/` can be accessed by the following URL `http://your.domain:8123/local/`, for example `audio.mp3` would be accessed as `http://your.domain:8123/local/audio.mp3`.

    If you've had to create the `www/` folder for the first time, you'll need to restart Home Assistant. From 3ca5ab88cea13f4c0664ad055132f46be9d46ef1 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Sun, 8 Apr 2018 21:31:54 +0200 Subject: [PATCH 813/993] Remove feature --- source/_components/ios.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/ios.markdown b/source/_components/ios.markdown index 3c734ea302..44ac2fa88e 100644 --- a/source/_components/ios.markdown +++ b/source/_components/ios.markdown @@ -9,7 +9,7 @@ sharing: true footer: true logo: apple.png ha_category: Hub -featured: true +featured: false ha_release: 0.31 ha_iot_class: depends --- From 0691f3253d6800cc58907c3121830c1e0ee9f5fd Mon Sep 17 00:00:00 2001 From: cdce8p <30130371+cdce8p@users.noreply.github.com> Date: Sun, 8 Apr 2018 22:33:52 +0200 Subject: [PATCH 814/993] Added light color_temp HomeKit (#5122) * Added light color_temp support --- source/_components/homekit.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/homekit.markdown b/source/_components/homekit.markdown index 5313a8428a..5ca13b0f2b 100644 --- a/source/_components/homekit.markdown +++ b/source/_components/homekit.markdown @@ -196,7 +196,7 @@ The following components are currently supported: | alarm_control_panel | SecuritySystem | All security systems. | | climate | Thermostat | All climate devices. | | cover | WindowCovering | All covers that support `set_cover_position`. | -| light | Light | Support for `on / off`, `brightness` and `rgb_color`. | +| light | Light | Support for `on / off`, `brightness`, `color_temp` and `rgb_color`. | | sensor | TemperatureSensor | All sensors that have `Celsius` and `Fahrenheit` as their `unit_of_measurement`. | | sensor | HumiditySensor | All sensors that have `%` as their `unit_of_measurement` | | switch / remote / input_boolean / script | Switch | All represented as switches. | From 46f89afa140075da462dabd710bce07cfe4113ea Mon Sep 17 00:00:00 2001 From: Tim Hordern Date: Mon, 9 Apr 2018 17:38:28 +1000 Subject: [PATCH 815/993] Fix markdown link in Docker Installation docs (#5140) --- source/_docs/installation/docker.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_docs/installation/docker.markdown b/source/_docs/installation/docker.markdown index 53ee103784..20ccb53943 100644 --- a/source/_docs/installation/docker.markdown +++ b/source/_docs/installation/docker.markdown @@ -28,7 +28,7 @@ If you wish to browse directly to `http://localhost:8123` from your macOS host, $ docker run -d --name="home-assistant" -v /path/to/your/config:/config -e "TZ=America/Los_Angeles" -p 8123:8123 homeassistant/home-assistant ``` -Alternatively, `docker-compose` works with any recent release of `docker-ce` on macOS. Note that (further down this page) we provide an example `docker-compose.yml` however it differs from the `docker run` example above. To make the .yml directives match, you would need to make _two_ changes: first add the equivalent `ports:` directive, then _remove_ the `network_mode: host` section. This is because `Port mapping is incompatible with network_mode: host:`. More details can be found at [Docker networking docs] (https://docs.docker.com/engine/userguide/networking/#default-networks). Note also the `/dev/tty*` device name used by your Arduino etc. devices will differ from the Linux example, so the compose `mount:` may require updates. +Alternatively, `docker-compose` works with any recent release of `docker-ce` on macOS. Note that (further down this page) we provide an example `docker-compose.yml` however it differs from the `docker run` example above. To make the .yml directives match, you would need to make _two_ changes: first add the equivalent `ports:` directive, then _remove_ the `network_mode: host` section. This is because `Port mapping is incompatible with network_mode: host:`. More details can be found at [Docker networking docs](https://docs.docker.com/engine/userguide/networking/#default-networks). Note also the `/dev/tty*` device name used by your Arduino etc. devices will differ from the Linux example, so the compose `mount:` may require updates. ### {% linkable_title Windows %} From 17ccbcce243cd901af6e6cd61a0ade1dee8d5300 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Mon, 9 Apr 2018 16:04:39 +0200 Subject: [PATCH 816/993] Various fixes --- source/_docs/installation/docker.markdown | 51 ++++++++++------------- 1 file changed, 23 insertions(+), 28 deletions(-) diff --git a/source/_docs/installation/docker.markdown b/source/_docs/installation/docker.markdown index 20ccb53943..d8e6ed3ff4 100644 --- a/source/_docs/installation/docker.markdown +++ b/source/_docs/installation/docker.markdown @@ -10,7 +10,7 @@ footer: true redirect_from: /getting-started/installation-docker/ --- -Installation with Docker is straightforward. Adjust the following command so that `/path/to/your/config/` points at the folder where you want to store your config and run it: +Installation with Docker is straightforward. Adjust the following command so that `/path/to/your/config/` points at the folder where you want to store your configuration and run it: ### {% linkable_title Linux %} @@ -20,7 +20,7 @@ $ docker run -d --name="home-assistant" -v /path/to/your/config:/config -v /etc/ ### {% linkable_title macOS %} -When using `docker-ce` (or `boot2docker`) on macOS, you are unable to map the local timezone to your Docker container ([Docker issue](https://github.com/docker/for-mac/issues/44)). Instead of `-v /etc/localtime:/etc/localtime:ro`, just pass in the timezone environment variable when you launch the container, ex: `-e "TZ=America/Los_Angeles"`. Replace "America/Los_Angeles" with [your timezone](http://en.wikipedia.org/wiki/List_of_tz_database_time_zones). +When using `docker-ce` (or `boot2docker`) on macOS, you are unable to map the local timezone to your Docker container ([Docker issue](https://github.com/docker/for-mac/issues/44)). Instead of `-v /etc/localtime:/etc/localtime:ro`, just pass in the timezone environment variable when you launch the container, e.g, `-e "TZ=America/Los_Angeles"`. Replace "America/Los_Angeles" with [your timezone](http://en.wikipedia.org/wiki/List_of_tz_database_time_zones). If you wish to browse directly to `http://localhost:8123` from your macOS host, meaning forward ports directly to the container, replace the `--net=host` switch with `-p 8123:8123`. More detail can be found in [the docker forums](https://forums.docker.com/t/should-docker-run-net-host-work/14215/10). @@ -84,31 +84,24 @@ As QNAP within QTS now supports Docker (with a neat UI), you can simply install The steps would be: - - Install “Container Station” package on your Qnap NAS - - Launch Container Station and move to “Create Container”-section - - Search image “homeassistant/home-assistant” with - docker hub and click on “Install” + - Install "Container Station" package on your Qnap NAS + - Launch Container Station and move to "Create Container"-section + - Search image "homeassistant/home-assistant" with Docker hub and click on "Install" - Choose "latest" version and click next - - Choose a container-name you want (e.g. - “homeassistant”) - - Click on “Advanced Settings” - - Within “Shared Folders” click on "Volume from host" > "Add" and - choose either an existing folder or add a new folder. The “mount - point” has to be “/config”, so that Home Assistant will use it for - the configs and logs. - - Within “Network” and select Network Mode to “Host” - - To ensure that Home Assistant displays the correct - timezone go to the “Environment” tab and click the plus sign then add - `variable` = `TZ` & `value` = `Europe/London` choosing [your correct timezone](http://en.wikipedia.org/wiki/List_of_tz_database_time_zones) - - Click on “Create” + - Choose a container-name you want (e.g., "homeassistant") + - Click on "Advanced Settings" + - Within "Shared Folders" click on "Volume from host" > "Add" and choose either an existing folder or add a new folder. The "mount point has to be `/config`, so that Home Assistant will use it for the configuration and logs. + - Within "Network" and select Network Mode to "Host" + - To ensure that Home Assistant displays the correct timezone go to the "Environment" tab and click the plus sign then add `variable` = `TZ` & `value` = `Europe/London` choosing [your correct timezone](http://en.wikipedia.org/wiki/List_of_tz_database_time_zones) + - Click on "Create" - Wait for some time until your NAS has created the container - Your Home Assistant within Docker should now run and will serve the web interface from port 8123 on your Docker host (this will be your Qnap NAS IP address - for example `http://192.xxx.xxx.xxx:8123`) -Remark: to update your Home Assistant on your Docker within Qnap NAS, you just remove container and image and do steps again (Don't remove "config" folder) +Remark: To update your Home Assistant on your Docker within Qnap NAS, you just remove container and image and do steps again (Don't remove "config" folder). -If you want to use a USB Bluetooth adapter or Z-Wave USB Stick with Home Assistant on Qnap Docker, Fallow this step: +If you want to use a USB Bluetooth adapter or Z-Wave USB stick with Home Assistant on Qnap Docker, follow those steps: -**Z-wave:** +#### {% linkable_title Z-Wave %} - Connect to your NAS over SSH - Load cdc-acm kernel module(when nas restart need to run this command) @@ -123,16 +116,16 @@ If you want to use a USB Bluetooth adapter or Z-Wave USB Stick with Home Assista `-v` is your config path `-e` is set timezone - - Edit configuration.yaml + - Edit `configuration.yaml` -``` +```yaml zwave: usb_path: /dev/ttyACM0 ``` That will tell Home Assistant where to look for our Z-wave radio. -**Bluetooth:** +#### {% linkable_title Bluetooth %} - Connect to your NAS over SSH - Run Docker command: @@ -141,9 +134,9 @@ That will tell Home Assistant where to look for our Z-wave radio. First `-v` is your config path `-e` is set timezone - - Edit configuration.yaml + - Edit the `configuration.yaml` file -``` +```yaml device_tracker: - platform: bluetooth_tracker ``` @@ -180,10 +173,12 @@ $ docker-compose up -d ### {% linkable_title Exposing Devices %} -In order to use z-wave, zigbee or other components that require access to devices, you need to map the appropriate device into the container. Ensure the user that is running the container has the correct privileges to access the `/dev/tty*` file, then add the device mapping to your docker command: +In order to use Z-Wave, ZigBbee or other components that require access to devices, you need to map the appropriate device into the container. Ensure the user that is running the container has the correct privileges to access the `/dev/tty*` file, then add the device mapping to your docker command: ```bash -$ docker run -d --name="home-assistant" -v /path/to/your/config:/config -v /etc/localtime:/etc/localtime:ro --device /dev/ttyUSB0:/dev/ttyUSB0 --net=host homeassistant/home-assistant +$ docker run -d --name="home-assistant" -v /path/to/your/config:/config \ + -v /etc/localtime:/etc/localtime:ro --device /dev/ttyUSB0:/dev/ttyUSB0 \ + --net=host homeassistant/home-assistant ``` or in a `docker-compose.yml` file: From 9f70138ffcc8f077bd70014d746a512d5cf1e897 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Mon, 9 Apr 2018 16:04:53 +0200 Subject: [PATCH 817/993] Add container update --- source/_docs/installation/updating.markdown | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/source/_docs/installation/updating.markdown b/source/_docs/installation/updating.markdown index b3c7040b9a..dd5d6dc3ab 100644 --- a/source/_docs/installation/updating.markdown +++ b/source/_docs/installation/updating.markdown @@ -14,7 +14,7 @@ redirect_from: /getting-started/updating/ The upgrade process differs depending on the installation you have, so please review the documentation that is specific to your install [Hass.io](/hassio/), [Hassbian](/docs/installation/hassbian/common-tasks/#update-home-assistant), [Vagrant](/docs/installation/vagrant/), or [Virtualenv](/docs/installation/virtualenv/#upgrading-home-assistant).

    -Check what's new in the latest version and potentially impacts your system in [Home Assistant release notes](https://github.com/home-assistant/home-assistant/releases). It is good practice to review these release notes and pay close attention to the **Breaking Changes** that are listed there. If you haven't done an update for a while, you should also check previous release notes as they can also contain relevant **Breaking Changes**. **Breaking Changes** may require configuration updates for your components. If you missed this and Home Assistant refuses to start, check `/home-assistant.log` for details about broken components. +Check what's new in the latest version and potentially impacts your system in [Home Assistant release notes](https://github.com/home-assistant/home-assistant/releases). It is good practice to review these release notes and pay close attention to the **Breaking Changes** that are listed there. If you haven't done an update for a while, you should also check previous release notes as they can also contain relevant **Breaking Changes**. **Breaking Changes** may require configuration updates for your components. If you missed this and Home Assistant refuses to start, check the log file in the [configuration](/docs/configuration/) directory, e.g., `.homeassistant/home-assistant.log`, for details about broken components. The default way to update Home Assistant to the latest release, when available, is: @@ -22,7 +22,13 @@ The default way to update Home Assistant to the latest release, when available, $ pip3 install --upgrade homeassistant ``` -After updating, you must restart Home Assistant for the changes to take effect. This means that you will have to restart `hass` itself or the [autostarting](/docs/autostart/) daemon (if applicable). Startup can take considerable amount of time (i.e. minutes) depending on your device. This is because all requirements are updated as well. +For a Docker container, simply pull the latest one: + +```bash +$ sudo docker pull homeassistant/home-assistant:latest +``` + +After updating, you must start/restart Home Assistant for the changes to take effect. This means that you will have to restart `hass` itself or the [autostarting](/docs/autostart/) daemon (if applicable). Startup can take considerable amount of time (i.e. minutes) depending on your device. This is because all requirements are updated as well.

    To avoid permission errors, the upgrade must be run as the same user as the installation was completed, again review the documentation specific to your install [Hass.io](/hassio/), [Hassbian](/docs/hassbian/installation/), [Vagrant](/docs/installation/vagrant/), or [Virtualenv](/docs/installation/virtualenv). From 07203297935648138e6b040dbbbdc39d842ee8ee Mon Sep 17 00:00:00 2001 From: cdce8p <30130371+cdce8p@users.noreply.github.com> Date: Mon, 9 Apr 2018 16:11:20 +0200 Subject: [PATCH 818/993] Added binary_sensor to supported types (#5143) --- source/_components/homekit.markdown | 1 + 1 file changed, 1 insertion(+) diff --git a/source/_components/homekit.markdown b/source/_components/homekit.markdown index 5313a8428a..90bddcb515 100644 --- a/source/_components/homekit.markdown +++ b/source/_components/homekit.markdown @@ -194,6 +194,7 @@ The following components are currently supported: | Component | Type Name | Description | | --------- | --------- | ----------- | | alarm_control_panel | SecuritySystem | All security systems. | +| binary_sensor | Sensor | Support for `CO2`, `Gas`, `Moisture`, `Motion`, `Occupancy`, `Opening` and `Smoke` device classes. Defaults to the `Occupancy` device class for everything else. | | climate | Thermostat | All climate devices. | | cover | WindowCovering | All covers that support `set_cover_position`. | | light | Light | Support for `on / off`, `brightness` and `rgb_color`. | From 89f64dfbd82617b39545f6c7f12777653f53a300 Mon Sep 17 00:00:00 2001 From: Phil Kates Date: Mon, 9 Apr 2018 07:23:59 -0700 Subject: [PATCH 819/993] homekit/locks: Add locks (#5093) --- source/_components/homekit.markdown | 1 + 1 file changed, 1 insertion(+) diff --git a/source/_components/homekit.markdown b/source/_components/homekit.markdown index 90bddcb515..d3ee4c773f 100644 --- a/source/_components/homekit.markdown +++ b/source/_components/homekit.markdown @@ -198,6 +198,7 @@ The following components are currently supported: | climate | Thermostat | All climate devices. | | cover | WindowCovering | All covers that support `set_cover_position`. | | light | Light | Support for `on / off`, `brightness` and `rgb_color`. | +| lock | DoorLock | Support for `lock / unlock`. | | sensor | TemperatureSensor | All sensors that have `Celsius` and `Fahrenheit` as their `unit_of_measurement`. | | sensor | HumiditySensor | All sensors that have `%` as their `unit_of_measurement` | | switch / remote / input_boolean / script | Switch | All represented as switches. | From bba777df3f6aece9c0e4ef33918de35e38a5c429 Mon Sep 17 00:00:00 2001 From: Elelabs-maintainer <37191432+Elelabs-maintainer@users.noreply.github.com> Date: Mon, 9 Apr 2018 20:37:27 +0300 Subject: [PATCH 820/993] Add 2 new supported hardware platforms (#5135) Raspberry Pi Shield and USB adapter, compatible with Home Assistant and `bellows` python library. Based on Silabs EM35X MCU, compatible with ezsp protocol. --- source/_components/zha.markdown | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/source/_components/zha.markdown b/source/_components/zha.markdown index f751532e70..0e769fc6a4 100644 --- a/source/_components/zha.markdown +++ b/source/_components/zha.markdown @@ -26,8 +26,10 @@ There is currently support for the following device types within Home Assistant: Known working ZigBee radios: -- Nortek/GoControl Z-Wave & Zigbee USB Adaptor - Model HUSBZB-1 +- Nortek/GoControl Z-Wave & Zigbee USB Adapter - Model HUSBZB-1 - XBee Series 2C +- [Elelabs ZigBee USB Adapter](https://elelabs.com/products/elelabs_usb_adapter.html) +- [Elelabs ZigBee Raspberry Pi Shield](https://elelabs.com/products/elelabs_zigbee_shield.html) To configure the component, a `zha` section must be present in the `configuration.yaml`, and the path to the serial device for the radio and path to the database which will persist your network data is required. From 85be6ed99c896c16b970c686dc05610a63154151 Mon Sep 17 00:00:00 2001 From: Johann Kellerman Date: Mon, 9 Apr 2018 20:02:21 +0200 Subject: [PATCH 821/993] New Qwikswitch sensors (#5128) New config according to: home-assistant/pull/13622 --- source/_components/qwikswitch.markdown | 27 ++++++++++++++++++++++---- 1 file changed, 23 insertions(+), 4 deletions(-) diff --git a/source/_components/qwikswitch.markdown b/source/_components/qwikswitch.markdown index 516658404a..8889e29fbc 100644 --- a/source/_components/qwikswitch.markdown +++ b/source/_components/qwikswitch.markdown @@ -60,13 +60,32 @@ On some QS Mobile servers button events are only generated for switches added to ### {% linkable_title Qwikswitch Sensors %} -Some Qwikswith devices might support more than one channel per device (i.e. ipmod). The channel can be specified by appending a number to the QS_id. Example sensors configuration: +The sensor configuration is a list of sensors. Each sensor is configured with the following parameters: + +- **name** (*Required*): The sensor name from which the entity_id will be derived. +- **id** (*Required*): A QS_Id +- **type** (*Required*): The Qwikswitch sensor type. These could include: + - imod (up to 6 channels) + - door (single channel) + - qwikcord (Channel1 = CTavg, Channel 2 = CTsum) +- **channel** (*Optional, default=1*): The channel of interest. Refer to type above. + + +Example sensor configuration: ```yaml qwikswitch: ... sensors: - door_sensor: '@0dev01' - door2_sensor: '@0dev02.1' - door3_sensor: '@0dev02.2' + - name: door sensor + id: "@id03" + type: door + - name: Imod 1 sensor + id: "@id02" + channel: 1 + type: imod + - name: Imod 2 sensor + id: "@id02" + channel: 2 + type: imod ``` From e3c6e65f19633b3292d64e1f80c4902fe3ee8d32 Mon Sep 17 00:00:00 2001 From: brkr19 Date: Mon, 9 Apr 2018 13:14:49 -0500 Subject: [PATCH 822/993] Add example file attachment parameters (#5134) --- source/_components/notify.pushover.markdown | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/source/_components/notify.pushover.markdown b/source/_components/notify.pushover.markdown index 7e7680db7e..0b4bc520bb 100644 --- a/source/_components/notify.pushover.markdown +++ b/source/_components/notify.pushover.markdown @@ -47,6 +47,11 @@ Example Automation: url: "https://www.home-assistant.io/" sound: pianobar priority: 0 + file: + url: !secret camera_still_image + auth: basic + username: !secret camera_username + password: !secret camera_password ``` Component specific values in the nested `data` section are optional. From 89406e3ea043d6862db0f7222f5f6baf2bb2459c Mon Sep 17 00:00:00 2001 From: DubhAd Date: Mon, 9 Apr 2018 19:15:34 +0100 Subject: [PATCH 823/993] Consistency update (#5136) It was pointed out that everywhere else `entity_id:` is in the `data:` section for `light.turn_on`. Updating the example here to be consistent with that. --- source/_docs/automation/action.markdown | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/source/_docs/automation/action.markdown b/source/_docs/automation/action.markdown index ce9d7c9e05..0df212be7c 100644 --- a/source/_docs/automation/action.markdown +++ b/source/_docs/automation/action.markdown @@ -22,13 +22,12 @@ automation: event: sunset action: service: light.turn_on - entity_id: - - light.kitchen - - light.living_room data: brightness: 150 rgb_color: [255, 0, 0] - + entity_id: + - light.kitchen + - light.living_room automation 2: # Notify me on my mobile phone of an event trigger: From bbb4af9c7b2af3f3deb8a29265f3fb83e477f0e1 Mon Sep 17 00:00:00 2001 From: Franck Nijhof Date: Tue, 10 Apr 2018 20:06:45 +0200 Subject: [PATCH 824/993] Revert "Consistency update (#5136)" This reverts commit 89406e3ea043d6862db0f7222f5f6baf2bb2459c. From a9569af0a42d64329d3eb92f3c236cfca9fb1ab4 Mon Sep 17 00:00:00 2001 From: Franck Nijhof Date: Tue, 10 Apr 2018 20:06:45 +0200 Subject: [PATCH 825/993] Revert "Add example file attachment parameters (#5134)" This reverts commit e3c6e65f19633b3292d64e1f80c4902fe3ee8d32. --- source/_components/notify.pushover.markdown | 5 ----- 1 file changed, 5 deletions(-) diff --git a/source/_components/notify.pushover.markdown b/source/_components/notify.pushover.markdown index 0b4bc520bb..7e7680db7e 100644 --- a/source/_components/notify.pushover.markdown +++ b/source/_components/notify.pushover.markdown @@ -47,11 +47,6 @@ Example Automation: url: "https://www.home-assistant.io/" sound: pianobar priority: 0 - file: - url: !secret camera_still_image - auth: basic - username: !secret camera_username - password: !secret camera_password ``` Component specific values in the nested `data` section are optional. From f147350ab457a8405dc4d7b5c5daf6080dacea79 Mon Sep 17 00:00:00 2001 From: Pascal Vizeli Date: Tue, 10 Apr 2018 20:56:57 +0200 Subject: [PATCH 826/993] Update addon_config.markdown --- .../developers/hassio/addon_config.markdown | 62 ++++++++++--------- 1 file changed, 32 insertions(+), 30 deletions(-) diff --git a/source/developers/hassio/addon_config.markdown b/source/developers/hassio/addon_config.markdown index cf91e022b4..d249de967e 100644 --- a/source/developers/hassio/addon_config.markdown +++ b/source/developers/hassio/addon_config.markdown @@ -106,37 +106,39 @@ The config for an add-on is stored in `config.json`. } ``` -| Key | Required | Description | -| --- | -------- | ----------- | -| name | yes | Name of the add-on -| version | yes | Version of the add-on -| slug | yes | Slug of the add-on -| description | yes | Description of the add-on -| arch | no | List of supported arch: `armhf`, `aarch64`, `amd64`, `i386`. Default all. -| url | no | Homepage of the addon. Here you can explain the add-ons and options. -| startup | yes | `initialize` will start addon on setup of Hass.io. `system` is for things like databases and not dependent on other things. `services` will start before Home Assistant, while `application` is started afterwards. Finally `once` is for applications that don't run as a daemon. -| webui | no | A URL for web interface of this add-on. Like `http://[HOST]:[PORT:2839]/dashboard`, the port needs the internal port, which will be replaced with the effective port. It is also possible to bind the proto part to a config options with: `[PROTO:option_name]://[HOST]:[PORT:2839]/dashboard` and he lookup if they is True and going to `https`. -| boot | yes | `auto` by system and manual or only `manual` +| Key | Type | Required | Description | +| --- | ---- | -------- | ----------- | +| name | string | yes | Name of the add-on +| version | string | yes | Version of the add-on +| slug | string | yes | Slug of the add-on +| description | string | yes | Description of the add-on +| arch | array | no | List of supported arch: `armhf`, `aarch64`, `amd64`, `i386`. Default all. +| url | url | no | Homepage of the addon. Here you can explain the add-ons and options. +| startup | bool | yes | `initialize` will start addon on setup of Hass.io. `system` is for things like databases and not dependent on other things. `services` will start before Home Assistant, while `application` is started afterwards. Finally `once` is for applications that don't run as a daemon. +| webui | string | no | A URL for web interface of this add-on. Like `http://[HOST]:[PORT:2839]/dashboard`, the port needs the internal port, which will be replaced with the effective port. It is also possible to bind the proto part to a config options with: `[PROTO:option_name]://[HOST]:[PORT:2839]/dashboard` and he lookup if they is True and going to `https`. +| boot | string | yes | `auto` by system and manual or only `manual` | ports | no | Network ports to expose from the container. Format is `"container-port/type": host-port`. -| host_network | no | If that is True, the add-on run on host network. -| host_ipc | no | Default False. Allow to share the IPC namespace with others. -| host_dbus | no | Default False. Map Host dbus service into add-on. -| devices | no | Device list to map into the add-on. Format is: `::`. i.e. `/dev/ttyAMA0:/dev/ttyAMA0:rwm` -| auto_uart | no | Default False. Auto mapping all UART/Serial device from host into add-on. -| hassio_api | no | This add-on can access to Hass.io REST API. It set the host alias `hassio`. -| homeassistant_api | no | This add-on can access to Hass.io Home-Assistant REST API proxy. Use `http://hassio/homeassistant/api`. -| privileged | no | Privilege for access to hardware/system. Available access: `NET_ADMIN`, `SYS_ADMIN`, `SYS_RAWIO`, `SYS_TIME`, `SYS_NICE` -| map | no | List of maps for additional Hass.io folders. Possible values: `config`, `ssl`, `addons`, `backup`, `share`. Defaults to `ro`, which you can change by adding `:rw` to the end of the name. -| environment | no | A dict of environment variable to run add-on. -| audio | no | Boolean. Mark this add-on to use internal an audio system. The available environment variables are `ALSA_INPUT` and `ALSA_OUTPUT` which provide internal information to access alsa. -| gpio | no | Boolean. If this is set to True, `/sys/class/gpio` will map into add-on for access to GPIO interface from kernel. Some library need also `/dev/mem` and `SYS_RAWIO` for read/write access to this device. -| stdin | no | Boolean. If that is enable, you can use the STDIN with Hass.io API. -| legacy | no | Boolean. If the docker image have no hass.io labels, you can enable the legacy mode to use the config data. -| options | yes | Default options value of the add-on -| schema | yes | Schema for options value of the add-on. It can be `False` to disable schema validation and use custom options. -| image | no | For use with Docker Hub. -| timeout | no | Default 10 (second). The timeout to wait until the docker is done or will be killed. -| tmpfs | no | Mount a tmpfs file system in `/tmpfs`. Valide format for this option is : `size=XXXu,uid=N,rw`. Size is mandatory, valid units (`u`) are `k`, `m` and `g` and `XXX` has to be replaced by a number. `uid=N` (with `N` the uid number) and `rw` are optional. +| host_network | bool | no | If that is True, the add-on run on host network. +| host_ipc | bool | no | Default False. Allow to share the IPC namespace with others. +| host_dbus | bool | no | Default False. Map Host dbus service into add-on. +| devices | list | no | Device list to map into the add-on. Format is: `::`. i.e. `/dev/ttyAMA0:/dev/ttyAMA0:rwm` +| auto_uart | bool | no | Default False. Auto mapping all UART/Serial device from host into add-on. +| hassio_api | bool | no | This add-on can access to Hass.io REST API. It set the host alias `hassio`. +| homeassistant_api | bool | no | This add-on can access to Hass.io Home-Assistant REST API proxy. Use `http://hassio/homeassistant/api`. +| privileged | array | no | Privilege for access to hardware/system. Available access: `NET_ADMIN`, `SYS_ADMIN`, `SYS_RAWIO`, `SYS_TIME`, `SYS_NICE` +| apparmor | bool | no | Enable or disable AppArmor support. If it is enable, you can also use custom profiles. +| seccomp | bool | no | Enable or disable Seccomp support. If it is enable, you can also use custom profiles. +| map | list | no | List of maps for additional Hass.io folders. Possible values: `config`, `ssl`, `addons`, `backup`, `share`. Defaults to `ro`, which you can change by adding `:rw` to the end of the name. +| environment | dict | no | A dict of environment variable to run add-on. +| audio | bool | no | Boolean. Mark this add-on to use internal an audio system. The available environment variables are `ALSA_INPUT` and `ALSA_OUTPUT` which provide internal information to access alsa. +| gpio | bool | no | Boolean. If this is set to True, `/sys/class/gpio` will map into add-on for access to GPIO interface from kernel. Some library need also `/dev/mem` and `SYS_RAWIO` for read/write access to this device. +| stdin | bool | no | Boolean. If that is enable, you can use the STDIN with Hass.io API. +| legacy | bool | no | Boolean. If the docker image have no hass.io labels, you can enable the legacy mode to use the config data. +| options | dict | yes | Default options value of the add-on +| schema | dict | yes | Schema for options value of the add-on. It can be `False` to disable schema validation and use custom options. +| image | string | no | For use with Docker Hub. +| timeout | integer | no | Default 10 (second). The timeout to wait until the docker is done or will be killed. +| tmpfs | string | no | Mount a tmpfs file system in `/tmpfs`. Valide format for this option is : `size=XXXu,uid=N,rw`. Size is mandatory, valid units (`u`) are `k`, `m` and `g` and `XXX` has to be replaced by a number. `uid=N` (with `N` the uid number) and `rw` are optional. ### {% linkable_title Options / Schema %} From ffb528dbd64f0f80d03a4044ed44e078aa643d0e Mon Sep 17 00:00:00 2001 From: Pascal Vizeli Date: Tue, 10 Apr 2018 20:57:30 +0200 Subject: [PATCH 827/993] Update addon_config.markdown --- source/developers/hassio/addon_config.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/developers/hassio/addon_config.markdown b/source/developers/hassio/addon_config.markdown index d249de967e..7cf813b63d 100644 --- a/source/developers/hassio/addon_config.markdown +++ b/source/developers/hassio/addon_config.markdown @@ -112,7 +112,7 @@ The config for an add-on is stored in `config.json`. | version | string | yes | Version of the add-on | slug | string | yes | Slug of the add-on | description | string | yes | Description of the add-on -| arch | array | no | List of supported arch: `armhf`, `aarch64`, `amd64`, `i386`. Default all. +| arch | list | no | List of supported arch: `armhf`, `aarch64`, `amd64`, `i386`. Default all. | url | url | no | Homepage of the addon. Here you can explain the add-ons and options. | startup | bool | yes | `initialize` will start addon on setup of Hass.io. `system` is for things like databases and not dependent on other things. `services` will start before Home Assistant, while `application` is started afterwards. Finally `once` is for applications that don't run as a daemon. | webui | string | no | A URL for web interface of this add-on. Like `http://[HOST]:[PORT:2839]/dashboard`, the port needs the internal port, which will be replaced with the effective port. It is also possible to bind the proto part to a config options with: `[PROTO:option_name]://[HOST]:[PORT:2839]/dashboard` and he lookup if they is True and going to `https`. From 061c9bdfa143f67b14eed589d984a5854dbbeebf Mon Sep 17 00:00:00 2001 From: Pascal Vizeli Date: Tue, 10 Apr 2018 20:58:36 +0200 Subject: [PATCH 828/993] Update addon_config.markdown --- source/developers/hassio/addon_config.markdown | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/developers/hassio/addon_config.markdown b/source/developers/hassio/addon_config.markdown index 7cf813b63d..47dc50ce43 100644 --- a/source/developers/hassio/addon_config.markdown +++ b/source/developers/hassio/addon_config.markdown @@ -117,7 +117,7 @@ The config for an add-on is stored in `config.json`. | startup | bool | yes | `initialize` will start addon on setup of Hass.io. `system` is for things like databases and not dependent on other things. `services` will start before Home Assistant, while `application` is started afterwards. Finally `once` is for applications that don't run as a daemon. | webui | string | no | A URL for web interface of this add-on. Like `http://[HOST]:[PORT:2839]/dashboard`, the port needs the internal port, which will be replaced with the effective port. It is also possible to bind the proto part to a config options with: `[PROTO:option_name]://[HOST]:[PORT:2839]/dashboard` and he lookup if they is True and going to `https`. | boot | string | yes | `auto` by system and manual or only `manual` -| ports | no | Network ports to expose from the container. Format is `"container-port/type": host-port`. +| ports | dict | no | Network ports to expose from the container. Format is `"container-port/type": host-port`. | host_network | bool | no | If that is True, the add-on run on host network. | host_ipc | bool | no | Default False. Allow to share the IPC namespace with others. | host_dbus | bool | no | Default False. Map Host dbus service into add-on. @@ -125,7 +125,7 @@ The config for an add-on is stored in `config.json`. | auto_uart | bool | no | Default False. Auto mapping all UART/Serial device from host into add-on. | hassio_api | bool | no | This add-on can access to Hass.io REST API. It set the host alias `hassio`. | homeassistant_api | bool | no | This add-on can access to Hass.io Home-Assistant REST API proxy. Use `http://hassio/homeassistant/api`. -| privileged | array | no | Privilege for access to hardware/system. Available access: `NET_ADMIN`, `SYS_ADMIN`, `SYS_RAWIO`, `SYS_TIME`, `SYS_NICE` +| privileged | list | no | Privilege for access to hardware/system. Available access: `NET_ADMIN`, `SYS_ADMIN`, `SYS_RAWIO`, `SYS_TIME`, `SYS_NICE` | apparmor | bool | no | Enable or disable AppArmor support. If it is enable, you can also use custom profiles. | seccomp | bool | no | Enable or disable Seccomp support. If it is enable, you can also use custom profiles. | map | list | no | List of maps for additional Hass.io folders. Possible values: `config`, `ssl`, `addons`, `backup`, `share`. Defaults to `ro`, which you can change by adding `:rw` to the end of the name. From 342b99221d6360e5625dd0018011c2526e06bef0 Mon Sep 17 00:00:00 2001 From: Pascal Vizeli Date: Tue, 10 Apr 2018 21:04:35 +0200 Subject: [PATCH 829/993] Add security infos --- source/developers/hassio/addon_presentation.markdown | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/source/developers/hassio/addon_presentation.markdown b/source/developers/hassio/addon_presentation.markdown index 413dd0489d..e57270040a 100644 --- a/source/developers/hassio/addon_presentation.markdown +++ b/source/developers/hassio/addon_presentation.markdown @@ -47,3 +47,7 @@ A changelog is a file which contains a curated, chronologically ordered list of If you are in need of a guide on keeping a changelog, we would recommend checking the [keep a changelog](http://keepachangelog.com) website. They have developed a standard that is used by many opensource projects around the world. In future versions of Hass.io, the `CHANGELOG.md` file will be displayed in the Home Assistant frontend. + +## {% linkable_title Extended Security %} + +You can use own security profile for you Add-on with Seccomp or AppArmor. Default it is enabled and use the docker default profile. Put `apparmor` or `seccomp.json` file into your Add-on folder and it will load this file as primary profile. From b356bfcc451ff4ed6509da12e1e17ed73cea1a19 Mon Sep 17 00:00:00 2001 From: Matthew Garrett Date: Tue, 10 Apr 2018 19:24:31 -0700 Subject: [PATCH 830/993] Add docs for the Eufy component (#5145) * Add docs for the Eufy component * Update version * Update version * Update version --- source/_components/eufy.markdown | 54 ++++++++++++++++++++++++ source/_components/light.eufy.markdown | 19 +++++++++ source/_components/switch.eufy.markdown | 19 +++++++++ source/images/supported_brands/eufy.png | Bin 0 -> 9536 bytes 4 files changed, 92 insertions(+) create mode 100644 source/_components/eufy.markdown create mode 100644 source/_components/light.eufy.markdown create mode 100644 source/_components/switch.eufy.markdown create mode 100644 source/images/supported_brands/eufy.png diff --git a/source/_components/eufy.markdown b/source/_components/eufy.markdown new file mode 100644 index 0000000000..c11870e401 --- /dev/null +++ b/source/_components/eufy.markdown @@ -0,0 +1,54 @@ +--- +layout: page +title: "Eufy" +description: "Instructions on how to integrate Eufy devices into Home Assistant." +date: 2018-05-09 19:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: eufy.png +ha_category: Hub +ha_release: 0.68 +--- + +The `eufy` component is the main component to integrate various [eufy](http://https://www.eufylife.com/) devices with Home Assistant. + +Supported devices will be discovered after the `eufy` component is configured: + +```yaml +# Example configuration.yaml entry +eufy: + username: testuser@domain + password: p4ssw0rd +``` + +where username and password are the ones configured in the EufyHome app. Alternately, Eufy devices that are not discoverable can be statically configured. + +```yaml +eufy: + devices: + - address: 192.168.1.10 + access_token: 1234567890abcdef + type: T1012 + name: Smart Light + - address: 192.168.1.11 + access_token: abcdef1234567890 + type: T1201 + name: Smart Switch +``` + +access_token can be obtained by running: + +``` +curl -H "Content-Type: application/json" -d '{"client_id":"eufyhome-app", "client_Secret":"GQCpr9dSp3uQpsOMgJ4xQ", "email":"USERNAME", "password":"PASSWORD"}' https://home-api.eufylife.com/v1/user/email/login | jq +``` + +replacing USERNAME and PASSWORD with the Eufy username and password. This will give an access_token. Then run: + +``` +curl -H token:TOKEN -H category:Home https://home-api.eufylife.com/v1/device/list/devices-and-groups | jq +``` + +replacing TOKEN with the access_token from the previous command. This will provide the local_code for each device. + diff --git a/source/_components/light.eufy.markdown b/source/_components/light.eufy.markdown new file mode 100644 index 0000000000..773d99f4aa --- /dev/null +++ b/source/_components/light.eufy.markdown @@ -0,0 +1,19 @@ +--- +layout: page +title: "EufyLights" +description: "Instructions on how to integrate Eufy LED lights into Home Assistant." +date: 2018-05-09 19:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: eufy.png +ha_category: Light +ha_iot_class: "Local Polling" +ha_release: 0.68 +--- + +The `eufy` platform allows you to control your [Eufy](http://www.eufylife.com) lights from within Home Assistant. + +They will be automatically discovered if the [Eufy](/components/eufy/) component is enabled. + diff --git a/source/_components/switch.eufy.markdown b/source/_components/switch.eufy.markdown new file mode 100644 index 0000000000..22e56ae38b --- /dev/null +++ b/source/_components/switch.eufy.markdown @@ -0,0 +1,19 @@ +--- +layout: page +title: "EufySwitch" +description: "Instructions on how to integrate Eufy switches into Home Assistant." +date: 2018-05-09 19:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: eufy.png +ha_category: Switch +ha_iot_class: "Local Polling" +ha_release: 0.68 +--- + +The `eufy` platform allows you to control your [Eufy](http://www.eufylife.com) switches from within Home Assistant. + +They will be automatically discovered if the [Eufy](/components/eufy/) component is enabled. + diff --git a/source/images/supported_brands/eufy.png b/source/images/supported_brands/eufy.png new file mode 100644 index 0000000000000000000000000000000000000000..98d647b056864213ec35a89bd7619d1a7a829805 GIT binary patch literal 9536 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 Date: Wed, 11 Apr 2018 06:06:53 -0400 Subject: [PATCH 831/993] Adds attributes table to VeSync wiki (#5151) --- source/_components/switch.vesync.markdown | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/source/_components/switch.vesync.markdown b/source/_components/switch.vesync.markdown index d3b5971636..83041ca78b 100644 --- a/source/_components/switch.vesync.markdown +++ b/source/_components/switch.vesync.markdown @@ -12,7 +12,9 @@ ha_category: Switch ha_release: 0.66 --- -The `vesync` switch platform enabled integration with Etekcity VeSync smart switches. +The `vesync` switch platform enables integration with Etekcity VeSync smart switches. + +VeSync switches are low-cost wifi smart plugs that offer energy monitoring and work with popular voice assistants. To use your VeSync switches, you must first register your switches with the VeSync app. Once registration is complete you must add the following to your `configuration.yaml` file: @@ -20,8 +22,8 @@ To use your VeSync switches, you must first register your switches with the VeSy # Example configuration.yaml entry switch: - platform: vesync - username: username - password: password + username: YOUR_USERNAME + password: YOUR_PASSWORD ``` {% configuration %} @@ -34,3 +36,16 @@ password: required: true type: string {% endconfiguration %} + +### {% linkable_title Exposed Attributes %} + +VeSync switches will expose the following details. + +| Attribute | Description | Example | +| ------------------- | ------------------------------------------------------------------- | --------------- | +| `current_power_w` | The present power consumption of the switch in watts. | 100 | +| `today_energy_kwh` | The kilowatt hours used by the switch during the previous 24 hours. | 0.12 | +| `connection_status` | The connection status of the switch. | online | +| `connection_type` | The connection type of the switch. | wifi | +| `device_type` | The device type of the switch. | wifi-switch-1.3 | +| `model` | The model of the switch. | wifi-switch | From bc0b6a3f43cc2e2eb6664d9d78fcd9959e5eef1c Mon Sep 17 00:00:00 2001 From: Marco Orovecchia Date: Thu, 12 Apr 2018 09:27:08 +0200 Subject: [PATCH 832/993] Rename light platform from aurora to nanoleaf_aurora (#5158) --- source/_components/light.nanoleaf_aurora.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/light.nanoleaf_aurora.markdown b/source/_components/light.nanoleaf_aurora.markdown index 074bd1c77f..4f066dc7b2 100644 --- a/source/_components/light.nanoleaf_aurora.markdown +++ b/source/_components/light.nanoleaf_aurora.markdown @@ -21,7 +21,7 @@ To enable the Aurora lights, add the following lines to your `configuration.yaml ```yaml # Example configuration.yaml entry light: - - platform: aurora + - platform: nanoleaf_aurora host: 192.168.1.10 token: xxxxxxxxxxxxxxxxxxxxx ``` From 97525ba3eba6cb08d3478a12792bd346962205ae Mon Sep 17 00:00:00 2001 From: DubhAd Date: Thu, 12 Apr 2018 12:38:03 +0100 Subject: [PATCH 833/993] Moved the Python warning (#5157) Moved the Python version warning to the top of the page, and made it a warning --- source/_docs/installation/synology.markdown | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/source/_docs/installation/synology.markdown b/source/_docs/installation/synology.markdown index 808a4e77de..454dcd8858 100644 --- a/source/_docs/installation/synology.markdown +++ b/source/_docs/installation/synology.markdown @@ -10,6 +10,10 @@ footer: true redirect_from: /getting-started/installation-synology/ --- +

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

    + There are 2 alternatives, when using Home Assistant on Synology NAS: 1. using Docker 2. directly running on DSM @@ -26,7 +30,7 @@ Running these commands will: Using the Synology webadmin: - - Install python3 using the Synology Package Center (be aware, this provides 3.5.1, which is not compatible with Home Assistant 0.65.0 or later) + - Install python3 using the Synology Package Center - Create homeassistant user and add to the "users" group SSH onto your synology & login as admin or root @@ -51,16 +55,12 @@ Install PIP (Python's package management system) # ./python3 -m ensurepip ``` -Use PIP to install Homeassistant package +Use PIP to install Homeassistant package 0.64.3 ```bash -# ./python3 -m pip install homeassistant +# ./python3 -m pip install homeassistant==0.64.3 ``` -

    -Until Synology offer an updated version of Python, Home Assistant 0.64 is the most recent version that will be able to be installed. You can manually specify the version of Home Assistant to install, for example to install version 0.64.3 you would do `./python3 -m pip install homeassistant==0.64.3` -

    - Create homeassistant config directory & switch to it ```bash From fe1ce5a19b92443c621619e14e6853c6631380d1 Mon Sep 17 00:00:00 2001 From: bvansambeek <35294853+bvansambeek@users.noreply.github.com> Date: Thu, 12 Apr 2018 13:38:42 +0200 Subject: [PATCH 834/993] Tip to use external broker for more stability (#5159) An external broker is more stable, this is something I did not know as a beginner. Especially because the embedded broker has a memory leak. It would have saved me a bunch of time and WAF trust issues if I would have had this piece of knowledge. Issue on memory leak: https://github.com/home-assistant/home-assistant/issues/11594 --- source/_components/mqtt.markdown | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/source/_components/mqtt.markdown b/source/_components/mqtt.markdown index c3f4149342..275cac866e 100644 --- a/source/_components/mqtt.markdown +++ b/source/_components/mqtt.markdown @@ -33,6 +33,10 @@ mqtt: broker: IP_ADDRESS_BROKER ``` +

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

    + ## {% linkable_title Additional features %} - [Certificate](/docs/mqtt/certificate/) From 15aabd066cbf9e0edf85a8d657361c736aac36be Mon Sep 17 00:00:00 2001 From: Yonsm Date: Thu, 12 Apr 2018 21:02:03 +0800 Subject: [PATCH 835/993] Add CO2/PM2.5/Light sensors in HomeKit (#5146) * Add CO2/PM2.5/Light sensors in HomeKit * Added temperature and humidity device classes --- source/_components/homekit.markdown | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/source/_components/homekit.markdown b/source/_components/homekit.markdown index d3ee4c773f..b752f52622 100644 --- a/source/_components/homekit.markdown +++ b/source/_components/homekit.markdown @@ -199,8 +199,11 @@ The following components are currently supported: | cover | WindowCovering | All covers that support `set_cover_position`. | | light | Light | Support for `on / off`, `brightness` and `rgb_color`. | | lock | DoorLock | Support for `lock / unlock`. | -| sensor | TemperatureSensor | All sensors that have `Celsius` and `Fahrenheit` as their `unit_of_measurement`. | -| sensor | HumiditySensor | All sensors that have `%` as their `unit_of_measurement` | +| sensor | TemperatureSensor | All sensors that have `Celsius` and `Fahrenheit` as their `unit_of_measurement` or `temperature` as their `device_class`. | +| sensor | HumiditySensor | All sensors that have `%` as their `unit_of_measurement` or `humidity` as their `device_class`. | +| sensor | AirQualitySensor | All sensors that have `pm25` as part of their `entity_id` or `pm25` as their `device_class` | +| sensor | CarbonDioxideSensor | All sensors that have `co2` as part of their `entity_id` or `co2` as their `device_class` | +| sensor | LightSensor | All sensors that have `lm`/`lux` as their `unit_of_measurement` or `light` as their `device_class` | | switch / remote / input_boolean / script | Switch | All represented as switches. | From ee8090a9e178c0cfea1a2ee73468a8ef49c7f070 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Thu, 12 Apr 2018 09:53:42 -0400 Subject: [PATCH 836/993] Add blog post about Ubiquiti --- ...04-12-ubiquiti-and-home-assistant.markdown | 37 ++++++++++++++++++ .../paulus.jpg | Bin 0 -> 73854 bytes 2 files changed, 37 insertions(+) create mode 100644 source/_posts/2018-04-12-ubiquiti-and-home-assistant.markdown create mode 100644 source/images/blog/2018-04-ubiquiti-and-home-assistant/paulus.jpg diff --git a/source/_posts/2018-04-12-ubiquiti-and-home-assistant.markdown b/source/_posts/2018-04-12-ubiquiti-and-home-assistant.markdown new file mode 100644 index 0000000000..045f30c196 --- /dev/null +++ b/source/_posts/2018-04-12-ubiquiti-and-home-assistant.markdown @@ -0,0 +1,37 @@ +--- +layout: post +title: "Home Assistant 🤝 Ubiquiti Networks" +description: "Ubiquiti Networks has hired Paulus Schoutsen, the founder of Home Assistant, to support Home Assistant’s goals of making Home Assistant easier to configure for users, improving the integration with device makers and making it easier to create, maintain and evolve integrations." +date: 2018-04-12 00:01:00 +date_formatted: "April 12, 2018" +author: Paulus Schoutsen +author_twitter: balloob +comments: true +categories: Announcements +og_image: /images/blog/2018-04-ubiquiti-and-home-assistant/paulus.jpg +--- + +TL;DR: Ubiquiti Networks has hired Paulus Schoutsen, the founder of Home Assistant, to support Home Assistant’s goals of making Home Assistant easier to configure for users, improving the integration with device makers and making it easier to create, maintain and evolve integrations. + +Home Assistant is an open source project that thus far has been run by people in their spare time. In the last four and a half years it has grown from just me building a tiny framework with a handful of integrations to having our own operating system, over a 1000 integrations, superb performance, contributions by over 900 people, and our main Docker image has been pulled over 10 million times! + +Observing this growth and passionate community, Ubiquiti Networks approached us. + +Ubiquiti Networks currently focuses on 3 main technologies: high-capacity distributed Internet access, unified information technology, and next-gen consumer electronics for home and personal use. Their enterprise quality combined with their affordability has made them very popular among our users. They also share another passion of ours: trying to avoid clouds. Take for example their [UniFi Video] IP surveillance solution: it is a completely local hosted solution. + +They recognize great potential in Home Assistant becoming the defacto platform for the home: fast, open source and local. They also want to deepen the integration of Ubiquiti Networks products in Home Assistant and may even support hosting Home Assistant instances on their hardware. + +And so we have agreed that I (Paulus, founder Home Assistant) will join Ubiquiti Networks as a full time employee to focus on growing Home Assistant. I’ll now be able to devote my full energy to making Home Assistant easier to configure for users, improving the integration with device makers and making it easier to create, maintain and evolve integrations. + +Ubiquiti Networks will not acquire any ownership of Home Assistant. We will remain an independent and open source project, just improving faster than ever with the support of Ubiquiti Networks. + +I’m very excited about this opportunity and 2018 will be a really really great year for Home Assistant! + +

    + Photo of Paulus, the founder of Home Assistant, standing in front of a Ubiquiti Networks logo wearing a Home Assistant t-shirt. + Paulus Schoutsen, founder of Home Assistant, at the NYC Ubiquiti office. +

    + +[UniFi Video]: https://www.ubnt.com/unifi-video/unifi-video-camera-g3/#unifi-video-camera-hybrid-technology diff --git a/source/images/blog/2018-04-ubiquiti-and-home-assistant/paulus.jpg b/source/images/blog/2018-04-ubiquiti-and-home-assistant/paulus.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2a4e3d885f8c8cf7b70981ad5ec259f9f34d17a1 GIT binary patch literal 73854 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 Date: Thu, 12 Apr 2018 10:59:10 -0400 Subject: [PATCH 837/993] Updated spelling dedicate to dedicated Spelling mistake. --- source/_components/device_tracker.unifi.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/device_tracker.unifi.markdown b/source/_components/device_tracker.unifi.markdown index 5ef8d4edc7..e941066770 100644 --- a/source/_components/device_tracker.unifi.markdown +++ b/source/_components/device_tracker.unifi.markdown @@ -80,7 +80,7 @@ The Unifi controller allows you to create multiple users on it besides the main The Unifi controller can either be a dedicated hardware device (Unifi's cloud key), or as software any Linux system. If you run the the Unifi controller on the same operating system as Home Assistant there may be conflicts in ports if you have the MQTT component as well. -It is recommended that you run the Unifi controller in a dedicate virtual machine to avoid that situation. +It is recommended that you run the Unifi controller in a dedicated virtual machine to avoid that situation. ### {% linkable_title Troubleshooting and Time Synchronization %} From e4c97ce3226c3d94a924daf5bf7677ddeeb272db Mon Sep 17 00:00:00 2001 From: Pascal Vizeli Date: Thu, 12 Apr 2018 17:01:11 +0200 Subject: [PATCH 838/993] Update addon_config.markdown --- source/developers/hassio/addon_config.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/developers/hassio/addon_config.markdown b/source/developers/hassio/addon_config.markdown index 47dc50ce43..bc4870f862 100644 --- a/source/developers/hassio/addon_config.markdown +++ b/source/developers/hassio/addon_config.markdown @@ -130,7 +130,7 @@ The config for an add-on is stored in `config.json`. | seccomp | bool | no | Enable or disable Seccomp support. If it is enable, you can also use custom profiles. | map | list | no | List of maps for additional Hass.io folders. Possible values: `config`, `ssl`, `addons`, `backup`, `share`. Defaults to `ro`, which you can change by adding `:rw` to the end of the name. | environment | dict | no | A dict of environment variable to run add-on. -| audio | bool | no | Boolean. Mark this add-on to use internal an audio system. The available environment variables are `ALSA_INPUT` and `ALSA_OUTPUT` which provide internal information to access alsa. +| audio | bool | no | Boolean. Mark this add-on to use internal an audio system. The ALSA configuration for this add-on will be mount automatic. | gpio | bool | no | Boolean. If this is set to True, `/sys/class/gpio` will map into add-on for access to GPIO interface from kernel. Some library need also `/dev/mem` and `SYS_RAWIO` for read/write access to this device. | stdin | bool | no | Boolean. If that is enable, you can use the STDIN with Hass.io API. | legacy | bool | no | Boolean. If the docker image have no hass.io labels, you can enable the legacy mode to use the config data. From 3876353d689cff79d1c81d8225272d5d23ade879 Mon Sep 17 00:00:00 2001 From: Matthew Rollings Date: Thu, 12 Apr 2018 17:07:56 +0100 Subject: [PATCH 839/993] Seconds should be milliseconds The documentation said seconds instead of milliseconds --- source/_components/vacuum.xiaomi_miio.markdown | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/_components/vacuum.xiaomi_miio.markdown b/source/_components/vacuum.xiaomi_miio.markdown index 51fd5dd9c8..c8f9f7c872 100644 --- a/source/_components/vacuum.xiaomi_miio.markdown +++ b/source/_components/vacuum.xiaomi_miio.markdown @@ -81,7 +81,7 @@ Remote control the robot. Please ensure you first set it in remote control mode | `entity_id` | yes | Only act on specific robot; default targets all | | `velocity` | no | Speed: between -0.29 and 0.29 | | `rotation` | no | Rotation: between -179 degrees and 179 degrees | -| `duration` | no | The number of seconds that the robot should move for | +| `duration` | no | The number of milliseconds that the robot should move for | ### {% linkable_title Service `vacuum.xiaomi_remote_control_move_step` %} @@ -92,7 +92,7 @@ Enter remote control mode, make one move, stop, and exit remote control mode. | `entity_id` | yes | Only act on specific robot; default targets all | | `velocity` | no | Speed: between -0.29 and 0.29. | | `rotation` | no | Rotation: between -179 degrees and 179 degrees. | -| `duration` | no | The number of seconds that the robot should move for | +| `duration` | no | The number of milliseconds that the robot should move for | ## {% linkable_title Attributes %} From 96c997b7e19f1246192d2ad2b8f13a8f7fcaeece Mon Sep 17 00:00:00 2001 From: Mark Coombes Date: Thu, 12 Apr 2018 12:25:35 -0400 Subject: [PATCH 840/993] Add support for Garage Doors in HomeKit (#5155) --- source/_components/homekit.markdown | 1 + 1 file changed, 1 insertion(+) diff --git a/source/_components/homekit.markdown b/source/_components/homekit.markdown index b752f52622..42b3180a00 100644 --- a/source/_components/homekit.markdown +++ b/source/_components/homekit.markdown @@ -196,6 +196,7 @@ The following components are currently supported: | alarm_control_panel | SecuritySystem | All security systems. | | binary_sensor | Sensor | Support for `CO2`, `Gas`, `Moisture`, `Motion`, `Occupancy`, `Opening` and `Smoke` device classes. Defaults to the `Occupancy` device class for everything else. | | climate | Thermostat | All climate devices. | +| cover | GarageDoorOpener | All covers that support `open` and `close` and have `garage` as their `device_class`. | | cover | WindowCovering | All covers that support `set_cover_position`. | | light | Light | Support for `on / off`, `brightness` and `rgb_color`. | | lock | DoorLock | Support for `lock / unlock`. | From b8870424cd425799e9c6c0a34754f982324cd2a0 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Thu, 12 Apr 2018 20:20:23 +0200 Subject: [PATCH 841/993] Update titles --- source/_components/vacuum.markdown | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/source/_components/vacuum.markdown b/source/_components/vacuum.markdown index 8ec0a442ac..c626a39934 100644 --- a/source/_components/vacuum.markdown +++ b/source/_components/vacuum.markdown @@ -27,7 +27,7 @@ Available services: `turn_on`, `turn_off`, `start_pause`, `stop`, `return_to_hom Before calling one of these services, make sure your botvac platform supports it. -#### {% linkable_title Service `vacuum/turn_on` %} +#### {% linkable_title Service `vacuum.turn_on` %} Start a new cleaning task. @@ -35,7 +35,7 @@ Start a new cleaning task. |---------------------------|----------|-------------------------------------------------------| | `entity_id` | yes | Only act on specific botvac. Else targets all. | -#### {% linkable_title Service `vacuum/turn_off` %} +#### {% linkable_title Service `vacuum.turn_off` %} Stop the current cleaning task and return to the dock. @@ -43,7 +43,7 @@ Stop the current cleaning task and return to the dock. |---------------------------|----------|-------------------------------------------------------| | `entity_id` | yes | Only act on specific botvac. Else targets all. | -#### {% linkable_title Service `vacuum/start_pause` %} +#### {% linkable_title Service `vacuum.start_pause` %} Start, pause or resume a cleaning task. @@ -51,7 +51,7 @@ Start, pause or resume a cleaning task. |---------------------------|----------|-------------------------------------------------------| | `entity_id` | yes | Only act on specific botvac. Else targets all. | -#### {% linkable_title Service `vacuum/stop` %} +#### {% linkable_title Service `vacuum.stop` %} Stop the current activity of the botvac. @@ -59,7 +59,7 @@ Stop the current activity of the botvac. |---------------------------|----------|-------------------------------------------------------| | `entity_id` | yes | Only act on specific botvac. Else targets all. | -#### {% linkable_title Service `vacuum/return_to_home` %} +#### {% linkable_title Service `vacuum.return_to_home` %} Tell the botvac to return home. @@ -67,7 +67,7 @@ Tell the botvac to return home. |---------------------------|----------|-------------------------------------------------------| | `entity_id` | yes | Only act on specific botvac. Else targets all. | -#### {% linkable_title Service `vacuum/locate` %} +#### {% linkable_title Service `vacuum.locate` %} Locate the vacuum cleaner robot. @@ -75,7 +75,7 @@ Locate the vacuum cleaner robot. |---------------------------|----------|-------------------------------------------------------| | `entity_id` | yes | Only act on specific botvac. Else targets all. | -#### {% linkable_title Service `vacuum/clean_spot` %} +#### {% linkable_title Service `vacuum.clean_spot` %} Tell the vacuum cleaner to do a spot clean-up. @@ -83,7 +83,7 @@ Tell the vacuum cleaner to do a spot clean-up. |---------------------------|----------|-------------------------------------------------------| | `entity_id` | yes | Only act on specific botvac. Else targets all. | -#### {% linkable_title Service `vacuum/set_fanspeed` %} +#### {% linkable_title Service `vacuum.set_fanspeed` %} Set the fan speed of the botvac. The `fanspeed` can be a label, as `balanced` or `turbo`, or be a number; it depends on the `vacuum` platform. @@ -92,7 +92,7 @@ Set the fan speed of the botvac. The `fanspeed` can be a label, as `balanced` or | `entity_id` | yes | Only act on specific botvac. Else targets all. | | `fanspeed` | no | Platform dependent vacuum cleaner fan speed, with speed steps, like 'medium', or by percentage, between 0 and 100. | -#### {% linkable_title Service `vacuum/send_command` %} +#### {% linkable_title Service `vacuum.send_command` %} Send a platform-specific command to the vacuum cleaner. From c962dee84d80da22715abaf2e9367e7ab2ff5fe1 Mon Sep 17 00:00:00 2001 From: DubhAd Date: Thu, 12 Apr 2018 21:06:56 +0100 Subject: [PATCH 842/993] Added further notes about dialout group (#5163) Added note about checking the account is in the dialout group, and how to add it if not Added note about the device path being an example --- source/_docs/z-wave/installation.markdown | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/source/_docs/z-wave/installation.markdown b/source/_docs/z-wave/installation.markdown index b637ba981f..b3fc38d817 100644 --- a/source/_docs/z-wave/installation.markdown +++ b/source/_docs/z-wave/installation.markdown @@ -205,7 +205,7 @@ The first run after adding a device is when the `zwave` component will take time ### {% linkable_title Component could not be set up %} -Sometimes the device may not be accessible and you'll get an error message upon startup about not being able to set up Z-Wave. Run the following command for your device path: +Sometimes the device may not be accessible and you'll get an error message upon startup about not being able to set up Z-Wave. Run the following command for your device path (here we're using `/dev/ttyAMA0` for our Razberry board): ```bash $ ls -l /dev/ttyAMA0 @@ -224,6 +224,18 @@ $ sudo chgrp dialout /dev/ttyAMA0 $ sudo chmod g+rw /dev/ttyAMA0 ``` +Check too that the account you're running Home Assistant as is in the `dialout` group. For instance, if you're using `homeassistant`: + +```bash +$ groups homeassistant +``` + +That should include `dialout`, if it doesn't then: + +```bash +$ sudo usermod -G dialout homeassistant +``` + ### {% linkable_title Device path changes %} If your device path changes when you restart, see [this guide](http://hintshop.ludvig.co.nz/show/persistent-names-usb-serial-devices/) on fixing it. From 34a0ade3f7f2ef9014dc4d7d6fdb58c3381b509c Mon Sep 17 00:00:00 2001 From: Mark Coombes Date: Fri, 13 Apr 2018 03:02:59 -0400 Subject: [PATCH 843/993] Add deCONZ daylight sensor (#5028) * Add deCONZ daylight sensor * :pencil2: Minor changes * :ambulance: Fixes build issue * :ambulance: Fixes incorrect tag --- source/_components/sensor.deconz.markdown | 25 +++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/source/_components/sensor.deconz.markdown b/source/_components/sensor.deconz.markdown index 6844c88d83..46dad20c0e 100644 --- a/source/_components/sensor.deconz.markdown +++ b/source/_components/sensor.deconz.markdown @@ -43,3 +43,28 @@ Entity ids will be sensor.device_name, where device_name is defined in deCONZ. S - Xiaomi Smart Home Wireless Switch - Temperature Sensor - Xiaomi Temperature/Humidity Sensor + +#### {% linkable_title deCONZ Daylight Sensor %} + +The deCONZ Daylight sensor is a special sensor built into the deCONZ software since version 2.05.12. It is represented in Home Assistant as a sensor called sensor.daylight. The sensor's state value is a string corresponding to the phase of daylight (descriptions below taken from https://github.com/mourner/suncalc, on which the deCONZ implementation is based): + +| Sensor State | Description | +|--------------|-------------| +| sunrise_start | sunrise (top edge of the sun appears on the horizon) | +| sunrise_end | sunrise ends (bottom edge of the sun touches the horizon) | +| golden_hour_1 | morning golden hour (soft light, the best time for photography) | +| solar_noon | solar noon (sun is in the highest position) | +| golden_hour_2 | evening golden hour | +| sunset_start | sunset starts (bottom edge of the sun touches the horizon) | +| sunset_end | sunset (sun disappears below the horizon, evening civil twilight starts) | +| dusk | dusk (evening nautical twilight starts) | +| nautical_dusk | nautical dusk (evening astronomical twilight starts) | +| night_start | night starts (dark enough for astronomical observations) | +| nadir | nadir (darkest moment of the night, the sun is in the lowest position) | +| night_end | night ends (morning astronomical twilight starts) | +| nautical_dawn | nautical dawn (morning nautical twilight starts) | +| dawn | dawn (morning nautical twilight ends, morning civil twilight starts) | + +The sensor also has an attribute called "daylight" that has the value `true` when the sensor's state is `golden_hour_1`, `solar_noon`, or `golden_hour_2`, and `false` otherwise. + +These states can be used in automations as a trigger (e.g., trigger when a certain phase of daylight starts or ends) or condition (e.g., trigger only if in a certain phase of daylight). From ed630d4b84f7cdc8df4f0733c04dcaf928cfe2fd Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Fri, 13 Apr 2018 17:58:21 -0400 Subject: [PATCH 844/993] Release blog post for 0.67 --- source/_components/folder_watcher.markdown | 4 +- source/_components/sensor.qwikswitch.markdown | 18 +++++ source/_components/sensor.tradfri.markdown | 16 +++++ source/_posts/2018-04-14-release-67.markdown | 63 ++++++++++++------ .../images/blog/2018-04-0.67/components.png | Bin 0 -> 37575 bytes 5 files changed, 77 insertions(+), 24 deletions(-) create mode 100644 source/_components/sensor.qwikswitch.markdown create mode 100644 source/_components/sensor.tradfri.markdown create mode 100644 source/images/blog/2018-04-0.67/components.png diff --git a/source/_components/folder_watcher.markdown b/source/_components/folder_watcher.markdown index ba97e44c63..e7489514e8 100644 --- a/source/_components/folder_watcher.markdown +++ b/source/_components/folder_watcher.markdown @@ -1,6 +1,6 @@ --- layout: page -title: "folder watcher" +title: "Folder Watcher" description: "Component for monitoring changes within the filesystem." date: 2018-03-11 14:00 sidebar: true @@ -32,7 +32,7 @@ folder: patterns: description: Pattern matching to apply required: false - default: "*" + default: "*" type: string {% endconfiguration %} diff --git a/source/_components/sensor.qwikswitch.markdown b/source/_components/sensor.qwikswitch.markdown new file mode 100644 index 0000000000..b2574cdb1d --- /dev/null +++ b/source/_components/sensor.qwikswitch.markdown @@ -0,0 +1,18 @@ +--- +layout: page +title: "QwikSwitch Sensor" +description: "Instructions on how to integrate Qwikswitch dimmers and relays as sensors into Home Assistant." +date: 2016-05-04 00:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: qwikswitch.png +ha_category: Sensor +ha_iot_class: "Local Push" +ha_release: "0.67" +--- + +The `qwikswitch` sensor platform allows you to control your [QwikSwitch](http://www.qwikswitch.co.za/) relays and dimmers as sensors from within Home Assistant. + +The platform is configured through the [QwikSwitch component](/components/qwikswitch/). diff --git a/source/_components/sensor.tradfri.markdown b/source/_components/sensor.tradfri.markdown new file mode 100644 index 0000000000..fb78480fb1 --- /dev/null +++ b/source/_components/sensor.tradfri.markdown @@ -0,0 +1,16 @@ +--- +layout: page +title: "IKEA Trådfri sensors" +description: "Access and control your ZigBee-based IKEA Trådfri (Tradfri) Sensors." +date: 2017-04-12 22.04 +sidebar: true +comments: false +sharing: true +footer: true +logo: ikea.svg +ha_category: Sensor +ha_iot_class: "Local Polling" +ha_release: 0.67 +--- + +For installation instructions, see [the Trådfri component](/components/tradfri/). diff --git a/source/_posts/2018-04-14-release-67.markdown b/source/_posts/2018-04-14-release-67.markdown index f6d3c285a6..ec16c1d115 100644 --- a/source/_posts/2018-04-14-release-67.markdown +++ b/source/_posts/2018-04-14-release-67.markdown @@ -1,9 +1,9 @@ --- layout: post -title: "0.67: TBD - ALSO UPDATE DATE" -description: "TBD" -date: 2018-04-06 00:01:00 -date_formatted: "April 14, 2018" +title: "0.67: Mastodon, Tahoma switches, Nanoleaf Aurora Light Panels" +description: "Security fixes and performance improvements 😅" +date: 2018-04-13 00:01:00 +date_formatted: "April 13, 2018" author: Paulus Schoutsen author_twitter: balloob comments: true @@ -11,19 +11,22 @@ categories: Release-Notes og_image: /images/blog/2018-04-0.67/components.png --- - + + +Release 0.67 is here! In case you missed [the announcement from yesterday][ann-ubiquiti], Ubiquiti is paying me to write these release notes. Ooooooh yeah. With more time on my hands I'm going to be focusing on major improvements that we have been postponing for a while, first up will be a user system. + +This release includes a security fix. The error log was accessible via the API without requiring authentication in previous releases. Although not a leak on it's own, combined with a faulty component that would log sensitive information to the error log could lead to that being exposed (we don't know of any component that does this). Thanks to [Matt Hamilton](https://github.com/Eriner) for disclosing this issue to us. ## {% linkable_title New Platforms %} -- Qwikswitch async refactor & sensor ([@kellerza] - [#13509]) ([qwikswitch docs]) ([light.qwikswitch docs]) ([sensor.qwikswitch docs]) ([switch.qwikswitch docs]) (new-platform) -- Adds folder_watcher component ([@robmarkcole] - [#12918]) ([watchdog_file_watcher docs]) (new-platform) +- Adds folder_watcher component ([@robmarkcole] - [#12918]) ([folder_watcher docs]) (new-platform) - Add FreeDNS component ([@bdurrer] - [#13526]) ([freedns docs]) (new-platform) - Google Maps location sharing device tracker ([@michaelarnauts] - [#12301]) ([device_tracker.google_maps docs]) (new-platform) - Added Waze travel time sensor ([@Myrddyn1] - [#12387]) ([sensor.waze_travel_time docs]) (new-platform) - Added switch component to Amcrest IP Camera. ([@adpriebe] - [#12992]) ([amcrest docs]) ([switch.amcrest docs]) (new-platform) - Add mastodon ([@fabaff] - [#13441]) ([notify docs]) (new-platform) - Tahoma switches ([@ikucuze] - [#13636]) ([tahoma docs]) ([switch.tahoma docs]) (new-platform) -- Add support for Nanoleaf Aurora Light Panels ([@Oro] - [#13456]) ([light.aurora docs]) (new-platform) +- Add support for Nanoleaf Aurora Light Panels ([@Oro] - [#13456]) ([light.nanoleaf_aurora docs]) (new-platform) ## {% linkable_title If you need help... %} @@ -40,7 +43,7 @@ Experiencing issues introduced by this release? Please report them in our [issue - Update to new "b2vapi" of BMW ConnectedDrive ([@ChristianKuehnel] - [#13305]) ([bmw_connected_drive docs]) ([binary_sensor.bmw_connected_drive docs]) ([lock.bmw_connected_drive docs]) ([sensor.bmw_connected_drive docs]) (breaking change) - Remove MercedesME component ([@ReneNulschDE] - [#13538]) ([device_tracker docs]) ([mercedesme docs]) ([binary_sensor.mercedesme docs]) ([sensor.mercedesme docs]) (breaking change) - Channel up and down for webostv ([@stephanerosi] - [#13624]) ([media_player.webostv docs]) (breaking change) -- Add media type separation for video/movie ([@Tadly] - [#13612]) (breaking change) +- Add media type separation for video/movie ([@tadly] - [#13612]) (breaking change) - Added ENTITY_ID_FORMAT import and set entity_id in __init__ ([@timmo001] - [#13642]) ([switch.broadlink docs]) (breaking change) ## {% linkable_title All changes %} @@ -58,7 +61,7 @@ Experiencing issues introduced by this release? Please report them in our [issue - Upgrade aiohttp to 3.1.0 ([@fabaff] - [#13451]) - Qwikswitch async & updates ([@kellerza] - [#12641]) ([qwikswitch docs]) ([light.qwikswitch docs]) ([switch.qwikswitch docs]) - Make Telnet Switch value template optional ([@DanNixon] - [#13433]) ([switch.telnet docs]) -- Update yeelightsunflower to 0.0.10 ([@lindsaymarkwawrd] - [#13448]) +- Update yeelightsunflower to 0.0.10 ([@lindsaymarkward] - [#13448]) - Add more info to issue template ([@c727] - [#12955]) - [RFC] Update issue template ([@amelchio] - [#12989]) - Update total_connect_client to 0.17 for Honeywell L5100-WiFi Support ([@phileaton] - [#13473]) ([alarm_control_panel.totalconnect docs]) @@ -71,7 +74,7 @@ Experiencing issues introduced by this release? Please report them in our [issue - Fix typos and update link (fixes #13520) ([@fabaff] - [#13529]) - Tradfri - unique_id's and color_temp support for rgb-bulbs ([@NovapaX] - [#13531]) ([light.tradfri docs]) - Qwikswitch async refactor & sensor ([@kellerza] - [#13509]) ([qwikswitch docs]) ([light.qwikswitch docs]) ([sensor.qwikswitch docs]) ([switch.qwikswitch docs]) (new-platform) -- Adds folder_watcher component ([@robmarkcole] - [#12918]) ([watchdog_file_watcher docs]) (new-platform) +- Adds folder_watcher component ([@robmarkcole] - [#12918]) ([folder_watcher docs]) (new-platform) - Update rflink to 0.0.37 ([@olskar] - [#12603]) ([rflink docs]) - Added file path validity checks to file sensor ([@FrederikBolding] - [#12505]) ([sensor.file docs]) - Allow for overriding the DoorBird push notification URL in configuration ([@Klikini] - [#13268]) ([doorbird docs]) @@ -88,8 +91,8 @@ Experiencing issues introduced by this release? Please report them in our [issue - Add support for Canary Flex ([@snjoetw] - [#13280]) ([canary docs]) ([sensor.canary docs]) - Fixes #12758. Try other cameras even if one fails to initialize ([@PhracturedBlue] - [#13276]) ([amcrest docs]) - Added HassOpenCover and HassCloseCover intents ([@tschmidty69] - [#13372]) ([conversation docs]) ([cover docs]) -- rfxtrx lib 0.22.0 ([@danielhiversen] - [#13576]) ([rfxtrx docs]) -- xiaomi lib upgrade ([@danielhiversen] - [#13577]) ([xiaomi_aqara docs]) +- rfxtrx lib 0.22.0 ([@Danielhiversen] - [#13576]) ([rfxtrx docs]) +- xiaomi lib upgrade ([@Danielhiversen] - [#13577]) ([xiaomi_aqara docs]) - Remove MercedesME component ([@ReneNulschDE] - [#13538]) ([device_tracker docs]) ([mercedesme docs]) ([binary_sensor.mercedesme docs]) ([sensor.mercedesme docs]) (breaking change) - Added Waze travel time sensor ([@Myrddyn1] - [#12387]) ([sensor.waze_travel_time docs]) (new-platform) - Added switch component to Amcrest IP Camera. ([@adpriebe] - [#12992]) ([amcrest docs]) ([switch.amcrest docs]) (new-platform) @@ -97,7 +100,7 @@ Experiencing issues introduced by this release? Please report them in our [issue - Add mastodon ([@fabaff] - [#13441]) ([notify docs]) (new-platform) - Added support for requesting RSSI values from Bluetooth devices ([@FrederikBolding] - [#12458]) ([device_tracker.bluetooth_tracker docs]) - Fix mysensors update callback ([@MartinHjelmare] - [#13602]) ([mysensors docs]) -- Broadlink ([@danielhiversen] - [#13585]) ([sensor.broadlink docs]) ([switch.broadlink docs]) +- Broadlink ([@Danielhiversen] - [#13585]) ([sensor.broadlink docs]) ([switch.broadlink docs]) - Fix IMAP email message_data ([@zhaokoh] - [#13606]) ([sensor.imap_email_content docs]) - Re-add group polling as a fallback for observation ([@lwis] - [#13613]) ([light.tradfri docs]) - Unflake folder watcher test ([@balloob] - [#13569]) @@ -112,7 +115,7 @@ Experiencing issues introduced by this release? Please report them in our [issue - Xiaomi Mi WiFi Repeater 2 integration as device tracker ([@syssi] - [#13521]) - Upgrade youtube_dl to 2018.04.03 ([@fabaff] - [#13647]) ([media_extractor docs]) - Update plex.py ([@chronm] - [#13659]) ([sensor.plex docs]) -- Always enable config entries & remove config_entry_example ([@balloob] - [#13663]) ([config docs]) ([config_entry_example docs]) +- Always enable config entries & remove config_entry_example ([@balloob] - [#13663]) ([config docs]) - Add missing service docs for hs_color ([@armills] - [#13667]) - Add regex functions as templating helpers ([@mountainsandcode] - [#13631]) - Channel up and down for webostv ([@stephanerosi] - [#13624]) ([media_player.webostv docs]) (breaking change) @@ -129,7 +132,7 @@ Experiencing issues introduced by this release? Please report them in our [issue - Fix asuswrt ap mode failure ([@shuaiger] - [#13693]) ([device_tracker docs]) - Support color temperature in Homekit ([@morberg] - [#13658]) ([homekit docs]) - Remove unused CONF_WATCHERS ([@robmarkcole] - [#13678]) ([folder_watcher docs]) -- Add media type separation for video/movie ([@Tadly] - [#13612]) (breaking change) +- Add media type separation for video/movie ([@tadly] - [#13612]) (breaking change) - Adding configration to disable ip address as a requirement Fixes: #13399 ([@PlanetJ] - [#13692]) ([device_tracker docs]) - Tahoma switches ([@ikucuze] - [#13636]) ([tahoma docs]) ([switch.tahoma docs]) (new-platform) - Send XY color for non-osram hue bulbs ([@armills] - [#13665]) ([light.hue docs]) @@ -137,8 +140,14 @@ Experiencing issues introduced by this release? Please report them in our [issue - Enable autodiscovery for mqtt cameras ([@jmtatsch] - [#13697]) ([mqtt docs]) ([camera.mqtt docs]) - Added ENTITY_ID_FORMAT import and set entity_id in __init__ ([@timmo001] - [#13642]) ([switch.broadlink docs]) (breaking change) - Fix #10175 ([@pschmitt] - [#13713]) ([media_player.liveboxplaytv docs]) -- Add support for Nanoleaf Aurora Light Panels ([@Oro] - [#13456]) ([light.aurora docs]) (new-platform) +- Add support for Nanoleaf Aurora Light Panels ([@Oro] - [#13456]) ([light.nanoleaf_aurora docs]) (new-platform) - Added gogogate2 cover ([@dlbroadfoot] - [#13467]) +- Remove vendor lookup for mac addresses ([@balloob] - [#13788]) ([device_tracker docs]) +- iglo hs color fix ([@armills] - [#13808]) ([light.iglo docs]) +- Fix too green color conversion ([@amelchio] - [#13828]) +- Rename from aurora light to nanoleaf_aurora ([@Oro] - [#13831]) ([light.nanoleaf_aurora docs]) +- Channel up/down for LiveTV and next/previous for other apps ([@stephanerosi] - [#13829]) ([media_player.webostv docs]) +- Add authentication to error log endpoint ([@balloob] - [#13836]) ([api docs]) [#11187]: https://github.com/home-assistant/home-assistant/pull/11187 [#12301]: https://github.com/home-assistant/home-assistant/pull/12301 @@ -234,9 +243,16 @@ Experiencing issues introduced by this release? Please report them in our [issue [#13702]: https://github.com/home-assistant/home-assistant/pull/13702 [#13709]: https://github.com/home-assistant/home-assistant/pull/13709 [#13713]: https://github.com/home-assistant/home-assistant/pull/13713 +[#13788]: https://github.com/home-assistant/home-assistant/pull/13788 +[#13808]: https://github.com/home-assistant/home-assistant/pull/13808 +[#13828]: https://github.com/home-assistant/home-assistant/pull/13828 +[#13829]: https://github.com/home-assistant/home-assistant/pull/13829 +[#13831]: https://github.com/home-assistant/home-assistant/pull/13831 +[#13836]: https://github.com/home-assistant/home-assistant/pull/13836 [@5LICK]: https://github.com/5LICK [@ChristianKuehnel]: https://github.com/ChristianKuehnel [@DanNixon]: https://github.com/DanNixon +[@Danielhiversen]: https://github.com/Danielhiversen [@FrederikBolding]: https://github.com/FrederikBolding [@Kane610]: https://github.com/Kane610 [@Klikini]: https://github.com/Klikini @@ -250,7 +266,6 @@ Experiencing issues introduced by this release? Please report them in our [issue [@PlanetJ]: https://github.com/PlanetJ [@ReneNulschDE]: https://github.com/ReneNulschDE [@Skaronator]: https://github.com/Skaronator -[@Tadly]: https://github.com/Tadly [@adpriebe]: https://github.com/adpriebe [@alandtse]: https://github.com/alandtse [@amelchio]: https://github.com/amelchio @@ -262,7 +277,6 @@ Experiencing issues introduced by this release? Please report them in our [issue [@cdce8p]: https://github.com/cdce8p [@chronm]: https://github.com/chronm [@colinodell]: https://github.com/colinodell -[@danielhiversen]: https://github.com/danielhiversen [@danielperna84]: https://github.com/danielperna84 [@dlbroadfoot]: https://github.com/dlbroadfoot [@fabaff]: https://github.com/fabaff @@ -272,7 +286,7 @@ Experiencing issues introduced by this release? Please report them in our [issue [@ikucuze]: https://github.com/ikucuze [@jmtatsch]: https://github.com/jmtatsch [@kellerza]: https://github.com/kellerza -[@lindsaymarkwawrd]: https://github.com/lindsaymarkwawrd +[@lindsaymarkward]: https://github.com/lindsaymarkward [@lwis]: https://github.com/lwis [@mf-social]: https://github.com/mf-social [@michaelarnauts]: https://github.com/michaelarnauts @@ -288,6 +302,7 @@ Experiencing issues introduced by this release? Please report them in our [issue [@snjoetw]: https://github.com/snjoetw [@stephanerosi]: https://github.com/stephanerosi [@syssi]: https://github.com/syssi +[@tadly]: https://github.com/tadly [@teharris1]: https://github.com/teharris1 [@timmo001]: https://github.com/timmo001 [@titilambert]: https://github.com/titilambert @@ -301,6 +316,7 @@ Experiencing issues introduced by this release? Please report them in our [issue [alarm_control_panel.totalconnect docs]: /components/alarm_control_panel.totalconnect/ [alexa docs]: /components/alexa/ [amcrest docs]: /components/amcrest/ +[api docs]: /components/api/ [binary_sensor.bmw_connected_drive docs]: /components/binary_sensor.bmw_connected_drive/ [binary_sensor.mercedesme docs]: /components/binary_sensor.mercedesme/ [binary_sensor.workday docs]: /components/binary_sensor.workday/ @@ -326,9 +342,11 @@ Experiencing issues introduced by this release? Please report them in our [issue [hue docs]: /components/hue/ [insteon_plm docs]: /components/insteon_plm/ [light docs]: /components/light/ -[light.aurora docs]: /components/light.aurora/ +[light.nanoleaf_aurora docs]: /components/light.nanoleaf_aurora/ [light.hue docs]: /components/light.hue/ +[light.iglo docs]: /components/light.iglo/ [light.mystrom docs]: /components/light.mystrom/ +[light.nanoleaf_aurora docs]: /components/light.nanoleaf_aurora/ [light.qwikswitch docs]: /components/light.qwikswitch/ [light.tradfri docs]: /components/light.tradfri/ [light.xiaomi_miio docs]: /components/light.xiaomi_miio/ @@ -373,6 +391,7 @@ Experiencing issues introduced by this release? Please report them in our [issue [tado docs]: /components/tado/ [tahoma docs]: /components/tahoma/ [tradfri docs]: /components/tradfri/ -[watchdog_file_watcher docs]: /components/watchdog_file_watcher/ +[folder_watcher docs]: /components/folder_watcher/ [xiaomi_aqara docs]: /components/xiaomi_aqara/ [zwave docs]: /components/zwave/ +[ann-ubiquiti]: /blog/2018/04/12/ubiquiti-and-home-assistant/ diff --git a/source/images/blog/2018-04-0.67/components.png b/source/images/blog/2018-04-0.67/components.png new file mode 100644 index 0000000000000000000000000000000000000000..798602b5c1c6536026f88526e17ba566c2ab6ce5 GIT binary patch literal 37575 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 Date: Fri, 13 Apr 2018 17:58:38 -0400 Subject: [PATCH 845/993] Fix release date --- _config.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_config.yml b/_config.yml index 401cd89fce..38d26c045e 100644 --- a/_config.yml +++ b/_config.yml @@ -141,7 +141,7 @@ social: current_major_version: 0 current_minor_version: 67 current_patch_version: 0 -date_released: 2018-04-14 +date_released: 2018-04-13 # Either # or the anchor link to latest release notes in the blog post. # Must be prefixed with a # and have double quotes around it. From 4a9bd5e72020b3dc8efabada9b199622669315ac Mon Sep 17 00:00:00 2001 From: Mohamad Tarbin Date: Fri, 13 Apr 2018 22:03:57 -0400 Subject: [PATCH 846/993] Adding markdown and imagie for USCIS sensor (#5138) * Adding markdown and imagie for USCIS sensor * Update the markdown * Update sensor.uscis.markdown * Update sensor.uscis.markdown * Update sensor.uscis.markdown * Minor changes --- source/_components/sensor.uscis.markdown | 39 +++++++++++++++++++++++ source/images/supported_brands/uscis.png | Bin 0 -> 7836 bytes 2 files changed, 39 insertions(+) create mode 100644 source/_components/sensor.uscis.markdown create mode 100644 source/images/supported_brands/uscis.png diff --git a/source/_components/sensor.uscis.markdown b/source/_components/sensor.uscis.markdown new file mode 100644 index 0000000000..49d55b0416 --- /dev/null +++ b/source/_components/sensor.uscis.markdown @@ -0,0 +1,39 @@ +--- +layout: page +title: USCIS Sensor +description: "Instructions on how to set up USCIS within Home Assistant." +date: 2018-03-21 08:00 +sidebar: false +comments: false +sharing: true +footer: true +logo: uscis.jpg +ha_category: Sensor +ha_release: 0.68 +ha_iot_class: "Cloud Polling" +--- + +The `uscis` sensor component allows you get updates on your USCIS case using your case/receipt number. The sensor gets the case information from [USCIS Website]( https://egov.uscis.gov/casestatus/landing.do) + +## Example for `configuration.yaml` : + +```yaml +sensor: + - platform: uscis + case_id: YOUR_CASE_NUMBER + name: OPTIONAL_NAME +``` + +{% configuration %} +friendly_name: + description: Name of the sensor in Home Assistant. + required: false + default: USCIS + type: string +case_id: + description: Case/receipt number used to get the case details from USCIS web client. + required: true + type: string +{% endconfiguration %} + +All the data will be fetch from [USCIS](https://egov.uscis.gov/casestatus/mycasestatus.do). diff --git a/source/images/supported_brands/uscis.png b/source/images/supported_brands/uscis.png new file mode 100644 index 0000000000000000000000000000000000000000..2268fb48b11951cd12e73c43eba00c1981484bc2 GIT binary patch literal 7836 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 m7r Date: Sat, 14 Apr 2018 08:31:40 +0100 Subject: [PATCH 847/993] Moved the note up (#5166) It's easy for people to fail to notice the note, since it comes after the default upgrade instructions. Moved it up to make it harder to miss --- source/_docs/installation/updating.markdown | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/source/_docs/installation/updating.markdown b/source/_docs/installation/updating.markdown index dd5d6dc3ab..a9884322b6 100644 --- a/source/_docs/installation/updating.markdown +++ b/source/_docs/installation/updating.markdown @@ -16,6 +16,10 @@ The upgrade process differs depending on the installation you have, so please re Check what's new in the latest version and potentially impacts your system in [Home Assistant release notes](https://github.com/home-assistant/home-assistant/releases). It is good practice to review these release notes and pay close attention to the **Breaking Changes** that are listed there. If you haven't done an update for a while, you should also check previous release notes as they can also contain relevant **Breaking Changes**. **Breaking Changes** may require configuration updates for your components. If you missed this and Home Assistant refuses to start, check the log file in the [configuration](/docs/configuration/) directory, e.g., `.homeassistant/home-assistant.log`, for details about broken components. +

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

    + The default way to update Home Assistant to the latest release, when available, is: ```bash @@ -30,10 +34,6 @@ $ sudo docker pull homeassistant/home-assistant:latest After updating, you must start/restart Home Assistant for the changes to take effect. This means that you will have to restart `hass` itself or the [autostarting](/docs/autostart/) daemon (if applicable). Startup can take considerable amount of time (i.e. minutes) depending on your device. This is because all requirements are updated as well. -

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

    - [BRUH automation](http://www.bruhautomation.com) has created [a tutorial video](https://www.youtube.com/watch?v=tuG2rs1Cl2Y) explaining how to upgrade Home Assistant. #### {% linkable_title Run a specific version %} From d6b1ac22628e368d65c449466aa2909da77fcd6a Mon Sep 17 00:00:00 2001 From: DubhAd Date: Sat, 14 Apr 2018 08:38:26 +0100 Subject: [PATCH 848/993] Added dialout group (#5162) * Added dialout group Membership of the dialout group is required for Z-Wave and Zigbee sticks * Minor change --- source/_docs/installation/raspberry-pi.markdown | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/_docs/installation/raspberry-pi.markdown b/source/_docs/installation/raspberry-pi.markdown index b0cb1b8a4a..c272e97dbf 100644 --- a/source/_docs/installation/raspberry-pi.markdown +++ b/source/_docs/installation/raspberry-pi.markdown @@ -49,10 +49,10 @@ $ sudo apt-get install python3 python3-venv python3-pip ``` Add an account for Home Assistant called `homeassistant`. -Since this account is only for running Home Assistant the extra arguments of `-rm` is added to create a system account and create a home directory. +Since this account is only for running Home Assistant the extra arguments of `-rm` is added to create a system account and create a home directory. The arguments `-G dialout` adds the user to the `dialout` group. This is required for using Z-Wave and Zigbee controllers. ```bash -$ sudo useradd -rm homeassistant +$ sudo useradd -rm homeassistant -G dialout ``` Next we will create a directory for the installation of Home Assistant and change the owner to the `homeassistant` account. From 3f43547c0e464ca004ebf9805d6ea663e2689ec7 Mon Sep 17 00:00:00 2001 From: Robin Date: Sat, 14 Apr 2018 08:52:36 +0100 Subject: [PATCH 849/993] Correct errors in folder_watcher doc (#5168) * Correct errors Corrects errors identified by @dale3h in https://github.com/home-assistant/home-assistant.github.io/pull/4885 * Adds event_type info * Add info on recursive monitoring --- source/_components/folder_watcher.markdown | 41 +++++++++++++--------- 1 file changed, 24 insertions(+), 17 deletions(-) diff --git a/source/_components/folder_watcher.markdown b/source/_components/folder_watcher.markdown index e7489514e8..ccd934c1ad 100644 --- a/source/_components/folder_watcher.markdown +++ b/source/_components/folder_watcher.markdown @@ -13,16 +13,23 @@ ha_iot_class: "Local Polling" ha_release: 0.67 --- -This component adds [Watchdog](https://pythonhosted.org/watchdog/) file system monitoring, publishing events on the Home-Assistant bus on the creation/deletion/modification of files. +This component adds [Watchdog](https://pythonhosted.org/watchdog/) file system monitoring, publishing events on the Home Assistant bus on the creation/deletion/modification of files. The monitored `event_type` are: +* `created` +* `deleted` +* `modified` +* `moved` -To configure the `folder_watcher` component add to you `configuration.yaml` file: +Note that by default folder monitoring is recursive, meaning that the contents of sub-folders are also monitored. + +To enable the Folder Watcher component in your installation, add the following to your `configuration.yaml` file: -```yaml {% raw %} +```yaml folder_watcher: - - folder: /config -{% endraw %} + watchers: + - folder: /config ``` +{% endraw %} {% configuration %} folder: @@ -40,28 +47,29 @@ patterns: Pattern matching using [fnmatch](https://docs.python.org/3.6/library/fnmatch.html) can be used to limit filesystem monitoring to only files which match the configured patterns. The following example shows the configuration required to only monitor filetypes `.yaml` and `.txt`. +{% raw %} ```yaml -{% raw %} folder_watcher: - - folder: /config - patterns: - - '*.yaml' - - '*.txt' -{% raw %} + watchers: + - folder: /config + patterns: + - '*.yaml' + - '*.txt' ``` +{% endraw %} ## Automations -Automations can be triggered on filesystem event data using a data_template. The following automation will send a notification with the name and folder of new files added to that folder: +Automations can be triggered on filesystem event data using a `data_template`. The following automation will send a notification with the name and folder of new files added to that folder: -```yaml {% raw %} +```yaml - action: - data_template: - message: 'Created {{trigger.event.data.file}} in {{trigger.event.data.folder}}' + message: 'Created {{ trigger.event.data.file }} in {{ trigger.event.data.folder }}' title: New image captured! data: - file: "{{trigger.event.data.path}}" + file: " {{ trigger.event.data.path }} " service: notify.pushbullet alias: New file alert condition: [] @@ -70,6 +78,5 @@ Automations can be triggered on filesystem event data using a data_template. The - event_data: {"event_type":"created"} event_type: folder_watcher platform: event -{% endraw %} ``` - +{% endraw %} From c396e08e500ffc3241b3594300b252e0fce48bb1 Mon Sep 17 00:00:00 2001 From: xTCx Date: Sat, 14 Apr 2018 11:05:32 +0300 Subject: [PATCH 850/993] Clicksend multiple recipients (#5149) Updated doc to reflect new multiple-recipients feature. --- source/_components/notify.clicksend.markdown | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/source/_components/notify.clicksend.markdown b/source/_components/notify.clicksend.markdown index f334009e9a..a5f9d587fd 100644 --- a/source/_components/notify.clicksend.markdown +++ b/source/_components/notify.clicksend.markdown @@ -28,6 +28,14 @@ notify: username: CLICKSEND_USERNAME api_key: CLICKSEND_API_KEY recipient: PHONE_NO + +# Multiple recipients +notify: + - platform: clicksend + name: ClickSend + username: CLICKSEND_USERNAME + api_key: CLICKSEND_API_KEY + recipient: [PHONE_NO1, PHONE_NO2] ``` {% configuration %} @@ -44,9 +52,9 @@ api_key: required: true type: string recipient: - description: "Your phone number. This is where you want to send your notification SMS messages, e.g., `09171234567`." + description: "A single or multiple phone numbers. This is where you want to send your SMS notification messages, e.g., `09171234567` or `[09171234567, 09177654321]`." required: true - type: string + type: string or list sender: description: The name or number of the sender. required: false From 0d603c0a6ef4bc0000f39a64c0f3fdda5f0432f8 Mon Sep 17 00:00:00 2001 From: DubhAd Date: Sat, 14 Apr 2018 09:08:43 +0100 Subject: [PATCH 851/993] More words (#5164) * More words Added an explanation of what's going on, and that devices will function normally. * :pencil2: Language tweaks --- source/_docs/z-wave/query-stage.markdown | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/source/_docs/z-wave/query-stage.markdown b/source/_docs/z-wave/query-stage.markdown index 2037963e45..7112cd055b 100644 --- a/source/_docs/z-wave/query-stage.markdown +++ b/source/_docs/z-wave/query-stage.markdown @@ -9,6 +9,10 @@ sharing: true footer: true --- +When the Z-Wave mesh is first started, the controller will go through all the following stages for every device on the mesh. This is a slow process, and to complete requires that the devices be awake. While devices that are mains or USB powered are always awake, battery-powered devices spend most of their time asleep. Because of this, you can expect that after startup your battery powered devices will spend time in `Initializing (CacheLoad)` - how long depends on the device. + +Your devices will still function normally while marked as `Initializing`. + | Stage | Description | |------------------------|--------------------------------------------------------------------| | None | Query process hasn't started for this node | @@ -17,7 +21,7 @@ footer: true | WakeUp | Start wake up process if a sleeping node | | ManufacturerSpecific1 | Retrieve manufacturer name and product ids if ProtocolInfo lets us | | NodeInfo | Retrieve info about supported, controlled command classes | -| NodePlusInfo | Retrieve ZWave+ info and update device classes | +| NodePlusInfo | Retrieve Z-Wave+ info and update device classes | | SecurityReport | Retrieve a list of Command Classes that require Security | | ManufacturerSpecific2 | Retrieve manufacturer name and product ids | | Versions | Retrieve version information | From f3ad3f8ea28ba01df6f71f769ca6818894500ca8 Mon Sep 17 00:00:00 2001 From: Matthew Garrett Date: Sat, 14 Apr 2018 02:43:18 -0700 Subject: [PATCH 852/993] Add documentation for homekit controller component (#4966) * Add documentation for homekit controller component * Update docs to match the implementation * :arrow_up: ha_release * :pencil2: Language tweak * :arrow_up: ha_release * :arrow_up: ha_release --- source/_components/discovery.markdown | 9 ++++++ .../_components/homekit_controller.markdown | 31 +++++++++++++++++++ .../light.homekit_controller.markdown | 16 ++++++++++ .../switch.homekit_controller.markdown | 16 ++++++++++ 4 files changed, 72 insertions(+) create mode 100644 source/_components/homekit_controller.markdown create mode 100644 source/_components/light.homekit_controller.markdown create mode 100644 source/_components/switch.homekit_controller.markdown diff --git a/source/_components/discovery.markdown b/source/_components/discovery.markdown index 61ea8046b9..f369ce67c1 100644 --- a/source/_components/discovery.markdown +++ b/source/_components/discovery.markdown @@ -23,6 +23,7 @@ Home Assistant can discover and automatically configure [zeroconf](https://en.wi * [DirecTV receivers](/components/media_player.directv/) * [Frontier Silicon internet radios](/components/media_player.frontier_silicon/) * [Google Cast](/components/media_player.cast/) + * [HomeKit](/components/homekit_controller/) * [IKEA Trådfri (Tradfri)](/components/tradfri/) * [Linn / Openhome](/components/media_player.openhome/) * [Logitech Harmony Hub](/components/remote.harmony/) @@ -50,6 +51,8 @@ discovery: ignore: - sonos - samsung_tv + enable: + - homekit ``` Configuration variables: @@ -85,6 +88,12 @@ Valid values for ignore are: * `yamaha`: Yamaha media player * `yeelight`: Yeelight Sunflower bulb +- **enable** (*Optional*): A list of platforms not enabled by default that `discovery` should discover. + +Valid values for enable are: + + * `homekit`: HomeKit accessories +

    Home Assistant must be on the same network as the devices for uPnP discovery to work. If running Home Assistant in a [Docker container](/docs/installation/docker/) use switch `--net=host` to put it on the host's network. diff --git a/source/_components/homekit_controller.markdown b/source/_components/homekit_controller.markdown new file mode 100644 index 0000000000..319f505ef1 --- /dev/null +++ b/source/_components/homekit_controller.markdown @@ -0,0 +1,31 @@ +--- +layout: page +title: "HomeKit controller support" +description: "Instructions how to integrate your HomeKit devices within Home Assistant." +date: 2018-03-19 21:04 +sidebar: true +comments: false +sharing: true +footer: true +logo: apple-homekit.png +ha_category: Hub +ha_release: 0.68 +ha_iot_class: "Local Polling" +--- + +[HomeKit](https://developer.apple.com/homekit/) controller integration for Home Assistant allows you to connect HomeKit accessories to Home Assistant. This component should not be confused with the [HomeKit](homekit) component, which allows you to control Home Assistant devices via HomeKit. + +There is currently support for the following device types within Home Assistant: + +- [Light](../light.homekit_controller) +- [Switch](../switch.homekit_controller) + +The component will be automatically configured if the [`discovery:`](components/discovery/) component is enabled and an enable entry added for HomeKit: + +```yaml +discovery: + enable: + - homekit +``` + +For each detected HomeKit accessory, a configuration prompt will appear in the web front end. Use this to provide the HomeKit PIN. diff --git a/source/_components/light.homekit_controller.markdown b/source/_components/light.homekit_controller.markdown new file mode 100644 index 0000000000..f3f7243a10 --- /dev/null +++ b/source/_components/light.homekit_controller.markdown @@ -0,0 +1,16 @@ +--- +layout: page +title: "HomeKit Light" +description: "Instructions how to setup HomeKit lights within Home Assistant." +date: 2017-03-19 21:08 +sidebar: true +comments: false +sharing: true +footer: true +logo: apple-homekit.png +ha_category: Light +ha_iot_class: "Local Polling" +ha_release: 0.68 +--- + +To get your HomeKit lights working with Home Assistant, follow the instructions for the general [HomeKit controller component](/components/homekit_controller/). diff --git a/source/_components/switch.homekit_controller.markdown b/source/_components/switch.homekit_controller.markdown new file mode 100644 index 0000000000..205316bdf2 --- /dev/null +++ b/source/_components/switch.homekit_controller.markdown @@ -0,0 +1,16 @@ +--- +layout: page +title: "HomeKit Light" +description: "Instructions how to setup HomeKit switches within Home Assistant." +date: 2017-03-19 21:08 +sidebar: true +comments: false +sharing: true +footer: true +logo: apple-homekit.png +ha_category: Light +ha_iot_class: "Local Polling" +ha_release: 0.68 +--- + +To get your HomeKit switches working with Home Assistant, follow the instructions for the general [HomeKit controller component](/components/homekit_controller/). From 17285ba293166cc09add20cf6471ace14ce8191e Mon Sep 17 00:00:00 2001 From: Robin Date: Sat, 14 Apr 2018 19:37:06 +0100 Subject: [PATCH 853/993] Remove refs to watcher (#5169) I accidentally reintroduced an old reference to `watchers`, removed in this PR --- source/_components/folder_watcher.markdown | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/source/_components/folder_watcher.markdown b/source/_components/folder_watcher.markdown index ccd934c1ad..88b19937e0 100644 --- a/source/_components/folder_watcher.markdown +++ b/source/_components/folder_watcher.markdown @@ -26,8 +26,7 @@ To enable the Folder Watcher component in your installation, add the following t {% raw %} ```yaml folder_watcher: - watchers: - - folder: /config + - folder: /config ``` {% endraw %} @@ -50,11 +49,10 @@ Pattern matching using [fnmatch](https://docs.python.org/3.6/library/fnmatch.htm {% raw %} ```yaml folder_watcher: - watchers: - - folder: /config - patterns: - - '*.yaml' - - '*.txt' + - folder: /config + patterns: + - '*.yaml' + - '*.txt' ``` {% endraw %} From 36a385b5b7b980e5fe20abd895b17926873a7029 Mon Sep 17 00:00:00 2001 From: Sebastian Date: Sun, 15 Apr 2018 13:09:30 +0200 Subject: [PATCH 854/993] Added screenshot for binary_sensor device classes icons (#5182) * added screenshot Screenshot of binary_sensors device classes icons added * Added screenshot to docs Screenshot showing icons for binary_sensor device classes added. --- source/_components/binary_sensor.markdown | 5 +++++ .../screenshots/binary_sensor_classes_icons.png | Bin 0 -> 75176 bytes 2 files changed, 5 insertions(+) create mode 100644 source/images/screenshots/binary_sensor_classes_icons.png diff --git a/source/_components/binary_sensor.markdown b/source/_components/binary_sensor.markdown index 588b4df27f..5826f9c147 100644 --- a/source/_components/binary_sensor.markdown +++ b/source/_components/binary_sensor.markdown @@ -39,3 +39,8 @@ The way these sensors are displayed in the frontend can be modified in the [cust - **window**: `On` means open, `Off` means closed For analog sensors please check the [component overview](/components/#sensor). + +

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

    diff --git a/source/images/screenshots/binary_sensor_classes_icons.png b/source/images/screenshots/binary_sensor_classes_icons.png new file mode 100644 index 0000000000000000000000000000000000000000..53363bcb9906877803ee5ce4afe0cb47cd13aaf6 GIT binary patch literal 75176 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

    iwe5xt{z@R*ltliv%V5X>(b;U7h~q5n0is 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 X4=(s1w3=AF4gM)yRh7-WY~uTWr3_w2 literal 0 HcmV?d00001 From fdef560c1ad994a87c5b84c3697b40daeddd57a0 Mon Sep 17 00:00:00 2001 From: ionred Date: Sun, 15 Apr 2018 06:17:29 -0500 Subject: [PATCH 855/993] config example update (#5179) The configuration didn't work as listed. Required addition of platform and switches lines, along with indent fixes. --- source/_components/switch.rainbird.markdown | 22 +++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/source/_components/switch.rainbird.markdown b/source/_components/switch.rainbird.markdown index eee1d471b9..6fba9a2f99 100644 --- a/source/_components/switch.rainbird.markdown +++ b/source/_components/switch.rainbird.markdown @@ -19,16 +19,18 @@ Once you have enabled the [Rain Bird component](/components/rainbird), add the f ```yaml switch: - sprinkler_1: - zone: 1 - friendly_name: "Front sprinklers" - trigger_time: 20 - scan_interval: 10 - sprinkler_2: - friendly_name: "Back sprinklers" - zone: 2 - trigger_time: 20 - scan_interval: 10 + - platform: rainbird + switches: + sprinkler_1: + zone: 1 + friendly_name: "Front sprinklers" + trigger_time: 10 + scan_interval: 10 + sprinkler_2: + friendly_name: "Back sprinklers" + zone: 2 + trigger_time: 20 + scan_interval: 10 ``` Configuration variables: From e2e44aeb337f5dbe62b265817f0eef9bcffb4f3a Mon Sep 17 00:00:00 2001 From: Gerard Date: Sun, 15 Apr 2018 13:18:12 +0200 Subject: [PATCH 856/993] Clarify titles of BMW Connected Drive components (#5178) * Update binary_sensor.bmw_connected_drive.markdown * Update bmw_connected_drive.markdown * Update device_tracker.bmw_connected_drive.markdown * Update lock.bmw_connected_drive.markdown * Update sensor.bmw_connected_drive.markdown * Update binary_sensor.bmw_connected_drive.markdown * Update bmw_connected_drive.markdown * Update device_tracker.bmw_connected_drive.markdown * Update lock.bmw_connected_drive.markdown * Update sensor.bmw_connected_drive.markdown * Update binary_sensor.bmw_connected_drive.markdown * Update lock.bmw_connected_drive.markdown --- .../binary_sensor.bmw_connected_drive.markdown | 8 ++++---- source/_components/bmw_connected_drive.markdown | 4 ++-- .../device_tracker.bmw_connected_drive.markdown | 4 ++-- source/_components/lock.bmw_connected_drive.markdown | 8 ++++---- source/_components/sensor.bmw_connected_drive.markdown | 4 ++-- 5 files changed, 14 insertions(+), 14 deletions(-) diff --git a/source/_components/binary_sensor.bmw_connected_drive.markdown b/source/_components/binary_sensor.bmw_connected_drive.markdown index 6c38dc813e..74330ec563 100755 --- a/source/_components/binary_sensor.bmw_connected_drive.markdown +++ b/source/_components/binary_sensor.bmw_connected_drive.markdown @@ -1,7 +1,7 @@ --- layout: page -title: "BMW connected drive" -description: "Instructions on how to setup your BMW connected drive account with Home Assistant." +title: "BMW Connected Drive Binary Sensor" +description: "Instructions on how to setup your BMW Connected Drive account with Home Assistant." date: 2018-02-22 23:00 sidebar: true comments: false @@ -15,6 +15,6 @@ ha_release: 0.66 The `bmw_connected_drive` platform allows you to import data on your BMW into Home Assistant. -The binary sensors will be automatically configured if 'bmw_connected_drive' component is configured. +The binary sensors will be automatically configured if `bmw_connected_drive` component is configured. -For more configuration information see the [bmw_connected_drive component](/components/bmw_connected_drive/) documentation. +For more configuration information see the [`bmw_connected_drive` component](/components/bmw_connected_drive/) documentation. diff --git a/source/_components/bmw_connected_drive.markdown b/source/_components/bmw_connected_drive.markdown index fe8cabc71a..52d223a9c2 100644 --- a/source/_components/bmw_connected_drive.markdown +++ b/source/_components/bmw_connected_drive.markdown @@ -1,7 +1,7 @@ --- layout: page -title: "BMW connected drive" -description: "Instructions on how to setup your BMW connected drive account with Home Assistant." +title: "BMW Connected Drive" +description: "Instructions on how to setup your BMW Connected Drive account with Home Assistant." date: 2018-01-10 23:00 sidebar: true comments: false diff --git a/source/_components/device_tracker.bmw_connected_drive.markdown b/source/_components/device_tracker.bmw_connected_drive.markdown index d00d588b35..4f390c5fa3 100644 --- a/source/_components/device_tracker.bmw_connected_drive.markdown +++ b/source/_components/device_tracker.bmw_connected_drive.markdown @@ -1,7 +1,7 @@ --- layout: page -title: "BMW connected drive" -description: "Instructions on how to setup your BMW connected drive account with Home Assistant." +title: "BMW Connected Drive Device Tracker" +description: "Instructions on how to setup your BMW Connected Drive account with Home Assistant." date: 2018-01-10 23:00 sidebar: true comments: false diff --git a/source/_components/lock.bmw_connected_drive.markdown b/source/_components/lock.bmw_connected_drive.markdown index 2a7f670812..4c6c7a2edc 100755 --- a/source/_components/lock.bmw_connected_drive.markdown +++ b/source/_components/lock.bmw_connected_drive.markdown @@ -1,7 +1,7 @@ --- layout: page -title: "BMW connected drive" -description: "Instructions on how to setup your BMW connected drive account with Home Assistant." +title: "BMW Connected Drive Lock" +description: "Instructions on how to setup your BMW Connected Drive account with Home Assistant." date: 2018-02-22 23:00 sidebar: true comments: false @@ -15,6 +15,6 @@ ha_release: 0.66 The `bmw_connected_drive` platform allows you to import data on your BMW into Home Assistant. -The lock will be automatically configured if 'bmw_connected_drive' component is configured. +The lock will be automatically configured if `bmw_connected_drive` component is configured. -For more configuration information see the [bmw_connected_drive component](/components/bmw_connected_drive/) documentation. +For more configuration information see the [`bmw_connected_drive` component](/components/bmw_connected_drive/) documentation. diff --git a/source/_components/sensor.bmw_connected_drive.markdown b/source/_components/sensor.bmw_connected_drive.markdown index 394fd2c31e..083e5124a6 100644 --- a/source/_components/sensor.bmw_connected_drive.markdown +++ b/source/_components/sensor.bmw_connected_drive.markdown @@ -1,7 +1,7 @@ --- layout: page -title: "BMW connected drive" -description: "Instructions on how to setup your BMW connected drive account with Home Assistant." +title: "BMW Connected Drive Sensor" +description: "Instructions on how to setup your BMW Connected Drive account with Home Assistant." date: 2018-01-10 23:00 sidebar: true comments: false From d0268f1e053fe456a31f88a2b0361b924f842ddd Mon Sep 17 00:00:00 2001 From: Norien Date: Sun, 15 Apr 2018 07:20:16 -0400 Subject: [PATCH 857/993] Update light.nanoleaf_aurora.markdown (#5175) in current build `- platform: aurora` is not found however `- platform: nanoleaf_aurora` works ok! --- source/_components/light.nanoleaf_aurora.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/light.nanoleaf_aurora.markdown b/source/_components/light.nanoleaf_aurora.markdown index 074bd1c77f..4f066dc7b2 100644 --- a/source/_components/light.nanoleaf_aurora.markdown +++ b/source/_components/light.nanoleaf_aurora.markdown @@ -21,7 +21,7 @@ To enable the Aurora lights, add the following lines to your `configuration.yaml ```yaml # Example configuration.yaml entry light: - - platform: aurora + - platform: nanoleaf_aurora host: 192.168.1.10 token: xxxxxxxxxxxxxxxxxxxxx ``` From 75520f8d642fa7342fd3aa2dd3b41d8b2d413ba1 Mon Sep 17 00:00:00 2001 From: stephanerosi Date: Sun, 15 Apr 2018 14:06:27 +0200 Subject: [PATCH 858/993] Media player webostv next/previous buttons (#5183) * Media player webostv next/previous buttons Description of the change visibles in https://github.com/home-assistant/home-assistant/pull/13829 * Fix formatting --- .../_components/media_player.webostv.markdown | 23 +++++++++++++------ 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/source/_components/media_player.webostv.markdown b/source/_components/media_player.webostv.markdown index 707ef55a90..cb4fe0c757 100644 --- a/source/_components/media_player.webostv.markdown +++ b/source/_components/media_player.webostv.markdown @@ -19,7 +19,7 @@ The `webostv` platform allows you to control a [LG](http://www.lg.com/) webOS Sm To begin with enable *LG Connect Apps* feature in *Network* settings of the TV [instructions](http://www.lg.com/uk/support/product-help/CT00008334-1437131798537-others). -Once basic configuration is added to your `configuration.yaml` *Configuration* card should prompt on your HA's States. Follow the instructions and accept pairing request on your TV. +Once basic configuration is added to your `configuration.yaml` *Configuration* card should prompt on your Home Assistants's states. Follow the instructions and accept pairing request on your TV. Pairing information will be saved to the `filename:` provided in configuration; this process is IP sensitive, in case the IP address of your TV would change in future. @@ -42,10 +42,12 @@ Configuration variables: - **timeout** (*Optional*): The timeout for connections to the TV in seconds. - **filename** (*Optional*): The filename where the pairing key with the TV should be stored. This path is relative to Home Assistant's config directory. It defaults to `webostv.conf`. - **customize** array (*Optional*): List of options to customize. - - ***sources** array (*Optional*): List of hardware and webOS App inputs. + - **sources** array (*Optional*): List of hardware and webOS App inputs. If you do not specify `host:`, all LG webOS Smart TVs within your network will be auto-discovered. +### {% linkable_title Example %} + A full configuration example will look like the sample below: ```yaml @@ -67,15 +69,15 @@ media_player: - makotv - netflix ``` -** avoid using `[ ]` in the `name:` of your device. +Avoid using `[ ]` in the `name:` of your device. -*Turn On Action* +### {% linkable_title Turn on action %} Home Assistant is able to turn on a LG webOS Smart TV if you specify an action, like HDMI-CEC or WakeOnLan. Common for webOS 3.0 and higher would be to use WakeOnLan feature. -To use this feature your TV should be connected to your network via Ethernet rather than Wireless and you should enable *LG Connect Apps* feature in *Network* settings of the TV [instructions](http://www.lg.com/uk/support/product-help/CT00008334-1437131798537-others) (or *Mobile App* in *General* settings for older models) (*may vary by version). +To use this feature your TV should be connected to your network via Ethernet rather than Wireless and you should enable *LG Connect Apps* feature in *Network* settings of the TV [instructions](http://www.lg.com/uk/support/product-help/CT00008334-1437131798537-others) (or *Mobile App* in *General* settings for older models). ```yaml # Example configuration.yaml entry @@ -90,9 +92,16 @@ media_player: data: mac: B4:E6:2A:1E:11:0F ``` + Any other [actions](/docs/automation/action/) to power on the device can be configured. - -*Sources* +### {% linkable_title Sources %} To obtain complete list of available sources currently configured on the TV, once the webOS TV is configured and linked, while its powered on head to the **Developer Tools** > **States**, find your `media_player.` and use the sources listed in `source_list:` remembering to split them per line into your `sources:` configuration. + +### {% linkable_title Next/Previous buttons %} + +The behaviour of the next and previsous buttons is different depending on the active source: + + - if the source is 'LiveTV' (television): next/previous buttons act as channel up/down + - otherwise: next/previsous buttons act as next/previous track From 26c45c852b22c7e9ad3d9f5dab4f493fc2a19952 Mon Sep 17 00:00:00 2001 From: Darren Reynolds Date: Sun, 15 Apr 2018 22:06:40 +1000 Subject: [PATCH 859/993] Add Doorbell ring examples (#5180) * Add Doorbell ring examples Add Doorbell ring examples for SONOS media players and hass_url_override option explanation. * Fix typos --- source/_components/doorbird.markdown | 74 +++++++++++++++++++++++++++- 1 file changed, 72 insertions(+), 2 deletions(-) diff --git a/source/_components/doorbird.markdown b/source/_components/doorbird.markdown index 30cd891c00..9db3c71d86 100644 --- a/source/_components/doorbird.markdown +++ b/source/_components/doorbird.markdown @@ -20,9 +20,10 @@ To connect your device, add the following to your `configuration.yaml` file: ```yaml # Example configuration.yaml entry doorbird: - host: IP_OR_HOSTNAME + host: DOORBIRD_IP_OR_HOSTNAME username: YOUR_USERNAME password: YOUR_PASSWORD + hass_url_override: HASS_IP ``` Configuration variables: @@ -31,8 +32,77 @@ Configuration variables: - **username** (*Required*): The username of a non-administrator user account on the device. - **password** (*Required*): The password for the user specified. - **doorbell_events** (*Optional*): Setting this to `true` this will register a callback URL with the device so that events can be published to the event bus when the doorbell rings. -- **hass_url_override** (*Optional*): If your DoorBird cannot connect to the machine running Home Assistant because you are using dynamic DNS or some other HTTP configuration, specify the LAN IP of the machine here to force a LAN connection. +- **hass_url_override** (*Optional*): If your DoorBird cannot connect to the machine running Home Assistant because you are using dynamic DNS or some other HTTP configuration (such as HTTPS), specify the LAN IP of the machine here to force a LAN connection.

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

    + +### Doorbell Sound Examples + +You can create an automation that triggers on event `doorbird_doorbell` to play a doorbell sound when the Doorbird button is pressed. This should work with any media player. + +#### Example using SONOS + +[`SONOS`](http://www.sonos.com) players have features allowing for "snapshotting" the current state of some or all players so those state(s) can be "restored" at a later time. This feature is perfect for implementing a doorbell sound (from Doorbird or any other Doorbell setup for that matter). The [`media_player.sonos`](/components/media_player.sonos/) platform includes the [`SONOS_SNAPSHOT`](/components/media_player.sonos/#service-sonos_snapshot) and [`SONOS_RESTORE`](/components/media_player.sonos/#service-sonos_restore) features. The result of not using these features is any currently playing songs or media will not continue playing after the doorbell sound has played and you will be left with the doorbell sound queued as the last played song. This setup allows for seamless ringing of the doorbell and all SONOS devices continuing nicely on as if nothing had happened. + +The example script below takes a snapshot of three SONOS players that are not currently grouped together, joins the three players in a group (so the sound plays at the same time on all players), plays the doorbell MP3 sound, unjoins the players from the group and finally restores the players to their original state. When the players are grouped they are controlled by refering to the `master`. + +Automation file: + +```yaml +- alias: Doorbird ring + trigger: + platform: event + event_type: doorbird_doorbell + action: + service: script.turn_on + entity_id: script.doorbell +``` + +Script file: + +```yaml +doorbell: + alias: Ring Doorbell + sequence: + - service: media_player.sonos_snapshot + data: + entity_id: + - media_player.kitchen + - media_player.master_bedroom + - media_player.study + - service: media_player.sonos_join + data: + master: media_player.study + entity_id: + - media_player.kitchen + - media_player.master_bedroom + - media_player.study + - service: media_player.play_media + data: + entity_id: media_player.study # the group master + media_content_id: http://10.1.1.10/sounds/doorbell.mp3 # this is on a NAS but could be HASS local + media_content_type: music + - service: media_player.volume_set + data: + entity_id: # can still control the volume of grouped players indivdually + - media_player.study + - media_player.kitchen + - media_player.master_bedrom + volume_level: 0.50 + - delay: + seconds: 4 # wait while the sound plays + - service: media_player.sonos_unjoin + data: + entity_id: + - media_player.kitchen + - media_player.master_bedroom + - media_player.study + - service: media_player.sonos_restore + data: + entity_id: + - media_player.kitchen + - media_player.master_bedroom + - media_player.study +``` From 8bacd6162f7ef4c16ad8bfe53f9fbbd99571c699 Mon Sep 17 00:00:00 2001 From: Colin Frei Date: Sun, 15 Apr 2018 15:17:54 +0200 Subject: [PATCH 860/993] Link to correct holidays version (#5184) --- source/_components/binary_sensor.workday.markdown | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/_components/binary_sensor.workday.markdown b/source/_components/binary_sensor.workday.markdown index edc34b5a37..b63d8f778d 100644 --- a/source/_components/binary_sensor.workday.markdown +++ b/source/_components/binary_sensor.workday.markdown @@ -32,8 +32,8 @@ binary_sensor: Configuration variables: - **name** (*Optional*): A name for this sensor. Defaults to *Workday Sensor* -- **country** (*Required*): Country code according to [holidays](https://pypi.python.org/pypi/holidays/0.9.3) notation. -- **province** (*Optional*): Province code according to [holidays](https://pypi.python.org/pypi/holidays/0.9.3) notation. Defaults to None. +- **country** (*Required*): Country code according to [holidays](https://pypi.python.org/pypi/holidays/0.9.4) notation. +- **province** (*Optional*): Province code according to [holidays](https://pypi.python.org/pypi/holidays/0.9.4) notation. Defaults to None. - **workdays** (*Optional*): List of workdays. Defaults to `mon`, `tue`, `wed`, `thu`, `fri`. - **excludes** (*Optional*): List of workday excludes. Defaults to `sat`, `sun`, `holiday`. - **days_offset** (*Optional*): Set days offset. Defaults to `0`. From 9d71a518737ed8744d2588413cee60d233d804c4 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Sun, 15 Apr 2018 17:16:18 +0200 Subject: [PATCH 861/993] Add details about conditions --- source/_components/weather.markdown | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/source/_components/weather.markdown b/source/_components/weather.markdown index 7babb6f8e9..dd9d634990 100644 --- a/source/_components/weather.markdown +++ b/source/_components/weather.markdown @@ -13,4 +13,22 @@ The `weather` platforms are gathering meteorological information from web servic Home Assistant currently supports free web services and such which require a registration. Please check the sidebar for a full list of supported `weather` platforms. +## {% linkable_title Condition mapping %} + +The `weather` platform only knows the below listed conditions. The reason for this is that for these conditions is an icon from [Material Design Icons](https://materialdesignicons.com/) available. + +- 'cloudy' +- 'fog' +- 'hail' +- 'lightning' +- 'lightning-rainy' +- 'partlycloudy' +- 'pouring' +- 'rainy' +- 'snowy' +- 'snowy-rainy' +- 'sunny' +- 'windy' +- 'windy-variant' +- 'exceptional': From a6795e584c0e1baa31972113140c250100fee69f Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Sun, 15 Apr 2018 17:24:14 +0200 Subject: [PATCH 862/993] Add link --- source/_components/weather.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/weather.markdown b/source/_components/weather.markdown index dd9d634990..c256cae2a8 100644 --- a/source/_components/weather.markdown +++ b/source/_components/weather.markdown @@ -15,7 +15,7 @@ Home Assistant currently supports free web services and such which require a reg ## {% linkable_title Condition mapping %} -The `weather` platform only knows the below listed conditions. The reason for this is that for these conditions is an icon from [Material Design Icons](https://materialdesignicons.com/) available. +The `weather` platform only knows the below listed conditions. The reason for this is that for these conditions is an icon from [Material Design Icons](https://materialdesignicons.com/) available and mapped in the [frontend](https://github.com/home-assistant/home-assistant-polymer/blob/master/src/cards/ha-weather-card.html#L77). - 'cloudy' - 'fog' From 424dc3013c3c74a76208b2349446fb86eb503d2e Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Sun, 15 Apr 2018 17:28:56 +0200 Subject: [PATCH 863/993] Minor updates --- source/_components/weather.bom.markdown | 3 +++ source/_components/weather.buienradar.markdown | 5 ++++- source/_components/weather.darksky.markdown | 13 +++++-------- source/_components/weather.metoffice.markdown | 3 +++ source/_components/weather.openweathermap.markdown | 2 ++ source/_components/weather.yweather.markdown | 2 ++ source/_components/weather.zamg.markdown | 2 ++ 7 files changed, 21 insertions(+), 9 deletions(-) diff --git a/source/_components/weather.bom.markdown b/source/_components/weather.bom.markdown index 3a9d64c81a..fe26c58337 100644 --- a/source/_components/weather.bom.markdown +++ b/source/_components/weather.bom.markdown @@ -15,9 +15,12 @@ ha_iot_class: "Cloud Polling" The `bom` weather platform uses the [Australian Bureau of Meteorology (BOM)](http://www.bom.gov.au) as a source for current (half-hourly) meteorological data. +## {% linkable_title Configuration %} + To add the BOM weather platform to your installation, add the following to your `configuration.yaml` file: ```yaml +# Example configuration.yaml entry weather: - platform: bom ``` diff --git a/source/_components/weather.buienradar.markdown b/source/_components/weather.buienradar.markdown index b2a42e7661..0b4ef3f0db 100644 --- a/source/_components/weather.buienradar.markdown +++ b/source/_components/weather.buienradar.markdown @@ -14,8 +14,11 @@ ha_iot_class: "Cloud Polling" --- The `buienradar` platform uses [buienradar.nl](http://buienradar.nl/) as a source for current meteorological data for your location. The weather forecast is delivered by Buienradar, who provides a web service that provides detailed weather information for users in The Netherlands. + The relevant weather station used will be automatically selected based on the location specified in the Home Assistant configuration (or in the Buienradar weather/sensor component). A map of all available weather stations can be found [here](https://www.google.com/maps/d/embed?mid=1NivHkTGQUOs0dwQTnTMZi8Uatj0). +## {% linkable_title Configuration %} + To add the Buienradar weather to your installation, add the following to your `configuration.yaml` file: ```yaml @@ -26,7 +29,7 @@ weather: Configuration variables: -- **name** (*Optional*): You can specify a name of the component, but do not have to. If you specify a name, the weather component will get an entity name of 'weather.[name]'; if no name is specified, it will try to set its name to 'weather.BR_[stationname]'. However at the moment in time, the entity is created, no data has been retrieved yet, so the entity will get named 'weather.BR_unknown_station'. Later the station name will be known and get updated, but the entity name remains. +- **name** (*Optional*): You can specify a name of the component, but do not have to. If you specify a name, the weather component will get an entity name of `weather.[name]`; if no name is specified, it will try to set its name to `weather.BR_[stationname]`. However at the moment in time, the entity is created, no data has been retrieved yet, so the entity will get named `weather.BR_unknown_station`. Later the station name will be known and get updated, but the entity name remains. - **latitude** (*Optional*): Latitude to use for selection of data source location. Longitude and latitude will be taken from Home Assistant configuration but can be overridden/changed in this component to select a different location for Buienradar. - **longitude**(*Optional*): Longitude to use for selection of data source location. Longitude and latitude will be taken from Home Assistant configuration but can be overridden/changed in this component to select a different location for Buienradar. - **forecast** (*Optional*): 'True' to add a temperature forecast, 'False' to suppress it. diff --git a/source/_components/weather.darksky.markdown b/source/_components/weather.darksky.markdown index 1d7c843b35..6a3b1ad138 100644 --- a/source/_components/weather.darksky.markdown +++ b/source/_components/weather.darksky.markdown @@ -14,17 +14,14 @@ ha_release: 0.61 ha_iot_class: "Cloud Polling" --- -The `darksky` platform uses the [Dark Sky](https://darksky.net/) web service as -a source for meteorological data for your location. +The `darksky` platform uses the [Dark Sky](https://darksky.net/) web service as a source for meteorological data for your location. -You need an API key which is free but requires -[registration](https://darksky.net/dev/register). The free tier allows up to -1000 calls per day, this platform updates at most every 3 minutes, using up to -480 of those calls. +## {% linkable_title Configuration %} + +You need an API key which is free but requires [registration](https://darksky.net/dev/register). The free tier allows up to 1000 calls per day, this platform updates at most every 3 minutes, using up to 480 of those calls.

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

    To add Dark Sky to your installation, add the following to your `configuration.yaml` file: diff --git a/source/_components/weather.metoffice.markdown b/source/_components/weather.metoffice.markdown index 5875121806..df624d2a9c 100644 --- a/source/_components/weather.metoffice.markdown +++ b/source/_components/weather.metoffice.markdown @@ -15,9 +15,12 @@ ha_iot_class: "Cloud Polling" The `metoffice` weather platform uses the Met Office's [DataPoint API][datapoint] for weather data. +## {% linkable_title Configuration %} + To add the Met Office weather platform to your installation, you'll need to register for a free API key at the link above and then add the following to your `configuration.yaml` file: ```yaml +# Example configuration.yaml entry weather: - platform: metoffice api_key: YOUR_API_KEY diff --git a/source/_components/weather.openweathermap.markdown b/source/_components/weather.openweathermap.markdown index 0bb8d2bf9e..53f7e9a348 100644 --- a/source/_components/weather.openweathermap.markdown +++ b/source/_components/weather.openweathermap.markdown @@ -15,6 +15,8 @@ ha_iot_class: "Cloud Polling" The `openweathermap` weather platform uses [OpenWeatherMap](http://openweathermap.org/) as a source for current meteorological data for your location. +## {% linkable_title Configuration %} + You need an API key which is free but requires a [registration](http://home.openweathermap.org/users/sign_up). To add OpenWeatherMap to your installation, add the following to your `configuration.yaml` file: diff --git a/source/_components/weather.yweather.markdown b/source/_components/weather.yweather.markdown index af311a0030..27bbda8214 100644 --- a/source/_components/weather.yweather.markdown +++ b/source/_components/weather.yweather.markdown @@ -19,6 +19,8 @@ The `yweather` platform uses [Yahoo Weather](https://www.yahoo.com/news/weather/ Use of the Yahoo Weather API should not exceed reasonable request volume. Access is limited to 2000 signed calls per day.

    +## {% linkable_title Configuration %} + The `woeid` (Where On Earth ID) for your location, as shown in the example below. You can find your WOEID by copying the numeric digits at the end of the URL for your location at [Yahoo Weather](https://www.yahoo.com/news/weather/). If you don't add a WOEID, it will be generated from Home Assistant's latitude and longitude. To add Yahoo Weather to your installation, add the following to your `configuration.yaml` file: diff --git a/source/_components/weather.zamg.markdown b/source/_components/weather.zamg.markdown index cf805fd3a4..b3112d97ea 100644 --- a/source/_components/weather.zamg.markdown +++ b/source/_components/weather.zamg.markdown @@ -17,6 +17,8 @@ The `zamg` platform uses meteorological details published by the Austrian weathe Only observations for capital cities are publicly available. You can check the list of stations in [CSV format](http://www.zamg.ac.at/ogd). +## {% linkable_title Configuration %} + To add ZAMG to your installation, add the following to your `configuration.yaml` file: ```yaml From 429040954a30d017d86efc47bb6329994da6d62a Mon Sep 17 00:00:00 2001 From: apastuszak Date: Sun, 15 Apr 2018 12:48:05 -0400 Subject: [PATCH 864/993] Change order or ProxyPass in first example (#5185) I was not able to login to Home Assistant till I change he Home Assistant config to place the Websocket reverse proxy info BEFORE the web UI info. In the other order it loads, but never lets me log in. If I reverse them, then I login just fine. --- source/_docs/ecosystem/apache.markdown | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/_docs/ecosystem/apache.markdown b/source/_docs/ecosystem/apache.markdown index ae0c192511..92c27eb51a 100644 --- a/source/_docs/ecosystem/apache.markdown +++ b/source/_docs/ecosystem/apache.markdown @@ -35,10 +35,10 @@ To be able to access to your Home Assistant instance by using https://home.examp ServerName home.example.org ProxyPreserveHost On ProxyRequests off - ProxyPass / http://localhost:8123/ - ProxyPassReverse / http://localhost:8123/ ProxyPass /api/websocket ws://localhost:8123/api/websocket ProxyPassReverse /api/websocket ws://localhost:8123/api/websocket + ProxyPass / http://localhost:8123/ + ProxyPassReverse / http://localhost:8123/ RewriteEngine on RewriteCond %{HTTP:Upgrade} =websocket [NC] From ce53c0e9f0e02d02ec827e3e83c1b9c03a3fe372 Mon Sep 17 00:00:00 2001 From: Benedict Aas Date: Sun, 15 Apr 2018 17:52:21 +0100 Subject: [PATCH 865/993] Add more math functions to templates (#5186) Document usage of `sin`, `cos`, `tan`, and `sqrt`, and the `e`, `pi`, and `tau` constants. --- source/_docs/configuration/templating.markdown | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/source/_docs/configuration/templating.markdown b/source/_docs/configuration/templating.markdown index 6b3c34b0a0..9eafdece87 100644 --- a/source/_docs/configuration/templating.markdown +++ b/source/_docs/configuration/templating.markdown @@ -80,6 +80,13 @@ Home Assistant adds extensions to allow templates to access all of the current s - `float` will format the output as float. - `strptime(string, format)` will parse a string to a datetime based on a [format][strp-format]. - `log(value, base)` will take the logarithm of the input. When the base is omitted, it defaults to `e` - the natural logarithm. Can also be used as a filter. +- `sin(value)` will return the sine of the input. Can be used as a filter. +- `cos(value)` will return the cosine of the input. Can be used as a filter. +- `tan(value)` will return the tangent of the input. Can be used as a filter. +- `sqrt(value)` will return the square root of the input. Can be used as a filter. +- `e` mathematical constant, approximately 2.71828. +- `pi` mathematical constant, approximately 3.14159. +- `tau` mathematical constant, approximately 6.28318. - Filter `round(x)` will convert the input to a number and round it to `x` decimals. - Filter `timestamp_local` will convert an UNIX timestamp to local time/data. - Filter `timestamp_utc` will convert an UNIX timestamp to UTC time/data. @@ -274,6 +281,10 @@ The following overview contains a couple of options to get the needed values: {% raw %}{{ float(value_json) * (2**10) }}{% endraw %} {% raw %}{{ value_json | log }}{% endraw %} {% raw %}{{ log(1000, 10) }}{% endraw %} +{% raw %}{{ sin(pi / 2) }}{% endraw %} +{% raw %}{{ cos(tau) }}{% endraw %} +{% raw %}{{ tan(pi) }}{% endraw %} +{% raw %}{{ sqrt(e) }}{% endraw %} # Timestamps {% raw %}{{ value_json.tst | timestamp_local }}{% endraw %} From 0b5ee4d0c404e3f1f1d60fc945d878669eb88f18 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Sun, 15 Apr 2018 19:02:38 +0200 Subject: [PATCH 866/993] Move raw --- source/_components/light.mqtt.markdown | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/source/_components/light.mqtt.markdown b/source/_components/light.mqtt.markdown index eae91d0553..13e1cd9f86 100644 --- a/source/_components/light.mqtt.markdown +++ b/source/_components/light.mqtt.markdown @@ -204,6 +204,7 @@ In this section you will find some real life examples of how to use this sensor. To enable a light with brightness and RGB support in your installation, add the following to your `configuration.yaml` file: +{% raw %} ```yaml # Example configuration.yml entry light: @@ -215,14 +216,15 @@ light: brightness_command_topic: "office/rgb1/brightness/set" rgb_state_topic: "office/rgb1/rgb/status" rgb_command_topic: "office/rgb1/rgb/set" - state_value_template: "{% raw %}{{ value_json.state }}{% endraw %}" - brightness_value_template: "{% raw %}{{ value_json.brightness }}{% endraw %}" - rgb_value_template: "{% raw %}{{ value_json.rgb | join(',') }}{% endraw %}" + state_value_template: "{{ value_json.state }}" + brightness_value_template: "{{ value_json.brightness }}" + rgb_value_template: "{{ value_json.rgb | join(',') }}" qos: 0 payload_on: "ON" payload_off: "OFF" optimistic: false ``` +{% endraw %} ### {% linkable_title Brightness and no RGB support %} @@ -260,7 +262,6 @@ light: on_command_type: 'brightness' ``` - ### {% linkable_title Implementations %} - A [basic example](https://github.com/mertenats/open-home-automation/tree/master/ha_mqtt_light) using a nodeMCU board (ESP8266) to control its built-in LED (on/off). From 124a41c3bb84440ef7bb830211e6c6abe9861427 Mon Sep 17 00:00:00 2001 From: GaryOkie <37629938+GaryOkie@users.noreply.github.com> Date: Sun, 15 Apr 2018 13:34:29 -0500 Subject: [PATCH 867/993] Update cover.wink.markdown (#5187) * Update cover.wink.markdown I made a suggestion to W1ll1am to improving the doc to mention availability of the MyQ Cover. He said good call - go for it and edit it. * Remove whitespaces and empty lines --- source/_components/cover.wink.markdown | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/source/_components/cover.wink.markdown b/source/_components/cover.wink.markdown index 8e81d8ac79..8c82634187 100644 --- a/source/_components/cover.wink.markdown +++ b/source/_components/cover.wink.markdown @@ -13,24 +13,20 @@ ha_release: 0.13 ha_iot_class: "Cloud Polling" --- -Wink cover/garage door functionality depends on the product you're using. With GoControl/Linear Home Assistant can open, close, and view state. Chamberlain is currently limited to view only. Meaning Home Assistant will only show the current state of the door and control has been disabled (by Chamberlain). If you have a Chamberlain garage door, and would like to control it via Home Assistant, please contact Chamberlain and request that they re-enabled third-party control. +Wink Cover garage door functionality varies on the product. Home Assistant can open, close, and view state of GoControl/Linear openers. For Chamberlain MyQ-enabled openers, Home Assistant is limited to show current state (open or closed) only using this Wink cover. This restriction was imposed by Chamberlain for third party control. Wink suggests that MyQ customers should contact Chamberlain directly to inquire about expanding permissions. -The following quote is from Wink. - -> As part of our agreement with Chamberlain, third-party access to control Chamberlain garage doors has been restricted. Please contact Chamberlain directly to inquire about permissions. +The [MyQ Cover](/components/cover.myq/) does provide full functionality for opening and closing Chamberlain MyQ-enabled garage doors. If installed along with the Wink Component, a duplicate garage door entity may exist. In that case, the semi-functional Wink garage door entity can be hidden via customize.yaml. The requirement is that you have setup [Wink](/components/wink/). - ### {% linkable_title Supported cover devices %} - Bali window treatments - Lutron shades - Pella motorized blinds and shades - GoControl garage door opener -- Chamberlain (Limited functionality) (No Wink hub required) +- Chamberlain MyQ (Limited functionality) (No Wink hub required)

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

    - From 9465ec0c1a9c50cc2651ca93df960a1c7da18d77 Mon Sep 17 00:00:00 2001 From: DubhAd Date: Mon, 16 Apr 2018 07:39:23 +0100 Subject: [PATCH 868/993] Adding list of supported components (#5191) Only the blog post says what components are supported, making it confusing for people. Adding that information to the docs. --- source/_docs/configuration/entity-registry.markdown | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/source/_docs/configuration/entity-registry.markdown b/source/_docs/configuration/entity-registry.markdown index e31e014c32..6c75ad8dfe 100644 --- a/source/_docs/configuration/entity-registry.markdown +++ b/source/_docs/configuration/entity-registry.markdown @@ -52,3 +52,7 @@ value to each entry. cause integrations to fail and might be removed in the future. _Added in Home Assistant 0.64._ + +{% linkable_title Supported Components %} + +At the moment, only the following components are supported: Z-Wave, Hue, Nest, LIFX, Sonos, Apple TV From 65d8d892e6e3f9e50e9256ff1b35c2e08d3eee3e Mon Sep 17 00:00:00 2001 From: shred86 <32663154+shred86@users.noreply.github.com> Date: Mon, 16 Apr 2018 01:40:23 -0500 Subject: [PATCH 869/993] Update to lights (#5190) You cannot currently change the light color with this component. The dimmer functionality is currently in the dev branch and will hopefully be in the next HA update, so I left that in for now. --- source/_components/abode.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/abode.markdown b/source/_components/abode.markdown index 34ceaada84..87b689230b 100644 --- a/source/_components/abode.markdown +++ b/source/_components/abode.markdown @@ -24,7 +24,7 @@ There is currently support for the following device types within Home Assistant: - [Camera](/components/camera.abode/): Reports on `Camera` devices and will download and show the latest captured still image. - [Cover](/components/cover.abode/): Reports on `Secure Barriers` and can be used to open and close the cover. - [Lock](/components/cover.abode/): Reports on `Door Locks` and can be used to lock and unlock the door. -- [Light](/components/light.abode/): Reports on `Dimmer` lights and can be used to dim, change color, or turn the light on and off. +- [Light](/components/light.abode/): Reports on `Dimmer` lights and can be used to dim or turn the light on and off. - [Switch](/components/switch.abode/): Reports on `Power Switch` devices and can be used to turn the power switch on and off. Also reports on `Automations` set up in the Abode system and allows you to activate or deactivate them. - [Sensor](/components/sensor.abode/): Reports on `Temperature`, `Humidity`, and `Light` sensors. From 64df5f785a76db9eaa952c8eac252801a9dd2171 Mon Sep 17 00:00:00 2001 From: Robin Date: Mon, 16 Apr 2018 08:50:03 +0100 Subject: [PATCH 870/993] Propose edits to DuckDNS docs (#5181) * Propose reorder of config variables I've found this docs horribly confusing. `lets_encrypt.accept_terms` should appear at the top of the list as it's the first entered variable. Also this should become `required` as typically `optional` config variables are not displayed in the example config, but it is here. * Update duckdns.markdown * Minor changes --- source/_addons/duckdns.markdown | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/source/_addons/duckdns.markdown b/source/_addons/duckdns.markdown index 9c9049a066..13c8991667 100644 --- a/source/_addons/duckdns.markdown +++ b/source/_addons/duckdns.markdown @@ -26,10 +26,10 @@ featured: true Configuration variables: +- **lets_encrypt.accept_terms** (*Optional*): If you accept the [Let's Encrypt Subscriber Agreement][le], it will generate and update Let's Enrypt certificates for your DuckDNS domain. - **token** (*Required*): Your Duck DNS API key. - **domains** (*Required*): A list of domains to update DNS. -- **seconds** (*Optional*): Seconds between updates to Duck DNS. -- **lets_encrypt.accept_terms** (*Optional*): If you accept the [Let's Encrypt Subscriber Agreement][le], it will generate & update Let's Enrypt certificates for your DuckDNS domain. +- **seconds** (*Required*): Seconds between updates to Duck DNS. [le]: https://letsencrypt.org/repository/ @@ -51,3 +51,5 @@ If you use a port other than `8123` or an SSL proxy, change the port number acco You'll need to forward the port you listed in your configuration (8123 in the example above) on your router to your Home Assistant system. You can find guides on how to do this on [Port Forward](https://portforward.com/) - noting that you'll only need to forward the TCP port. Ensure that you allocate the Home Assistant system a fixed IP on your network before you configure port forwarding. You can do this either on the computer itself (see the [install guide](/hassio/installation/) or via a static lease on your router. + +Restart Home Assistant for the configured changes to take effect. When you access the Home Assistant frontend you will now need to use `https`, even when accessing local instances, for example at `https://192.168.0.1:8123`. From e607d1bf398628643c56dc0dc6c549a7d039b352 Mon Sep 17 00:00:00 2001 From: Sebastian Muszynski Date: Mon, 16 Apr 2018 09:50:43 +0200 Subject: [PATCH 871/993] HA category updated (#5194) --- source/_components/device_tracker.xiaomi_miio.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/device_tracker.xiaomi_miio.markdown b/source/_components/device_tracker.xiaomi_miio.markdown index dad5feef5d..ae60404393 100644 --- a/source/_components/device_tracker.xiaomi_miio.markdown +++ b/source/_components/device_tracker.xiaomi_miio.markdown @@ -8,7 +8,7 @@ comments: false sharing: true footer: true logo: xiaomi.png -ha_category: Sensor +ha_category: Presence Detection ha_version: 0.67 ha_iot_class: "Local Polling" --- From 8fc39cb9db9dfbd67a8fd677c9640b376b79e297 Mon Sep 17 00:00:00 2001 From: Flavio Barisi Date: Mon, 16 Apr 2018 09:51:27 +0200 Subject: [PATCH 872/993] Update device_tracker.owntracks_http.markdown (#5172) * Update device_tracker.owntracks_http.markdown Show battery value reported by owntracks * Update device_tracker.owntracks_http.markdown Fix * Fix configuration sample --- .../device_tracker.owntracks_http.markdown | 27 +++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/source/_components/device_tracker.owntracks_http.markdown b/source/_components/device_tracker.owntracks_http.markdown index a4aa847712..cadf1f4589 100644 --- a/source/_components/device_tracker.owntracks_http.markdown +++ b/source/_components/device_tracker.owntracks_http.markdown @@ -34,3 +34,30 @@ Open OwnTracks and go to Connection preferences: - Identification: Turn **Authentication** on, username `homeassistant` and password is your API password that you use to login to Home Assistant. Host example: If I host my Home Assistant at `https://example.duckdns.org`, my name is Paulus and my phone is a Pixel I would set the host to be `https://example.duckdns.org/api/owntracks/paulus/pixel`. This will result in an entity with an ID of `device_tracker.paulus_pixel`. You can pick any name for the user and the device. + +Since the battery data is available as an attribute of the device tracker entity, it can be tracked with a [`template` sensor](/components/sensor.template/). + +{% raw %} +```yaml +# Example configuration.yaml entry +sensor: + - platform: template + sensors: + pixel_battery: + friendly_name: Pixel of Paulus + unit_of_measurement: "%" + value_template: '{{ states.device_tracker.paulus_pixel.attributes.battery|int }}' + icon_template: >- + {% set battery_level = states.device_tracker.paulus_pixel.attributes.battery|default(0)|int %} + {% set battery_round = (battery_level / 10) |int * 10 %} + {% if battery_round >= 100 %} + mdi:battery + {% elif battery_round > 0 %} + mdi:battery-{{ battery_round }} + {% else %} + mdi:battery-alert + {% endif %} + entity_id: + - device_tracker.paulus_pixel +``` +{% endraw %} From cae7305fda3fb3db1d7a0b23a102061873276dfa Mon Sep 17 00:00:00 2001 From: Robin Date: Mon, 16 Apr 2018 14:27:36 +0100 Subject: [PATCH 873/993] Add info on whitelisting (#5197) Needs to be added as causing issues for users https://community.home-assistant.io/t/0-67-whitelisted-dir-issues/50305/5 --- source/_components/sensor.file.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/sensor.file.markdown b/source/_components/sensor.file.markdown index 2b541830ad..8ae7216a7d 100644 --- a/source/_components/sensor.file.markdown +++ b/source/_components/sensor.file.markdown @@ -14,7 +14,7 @@ ha_release: 0.45 --- -The `file` sensor platform reads the entries from a plain-text file and shows the found value. Only the last line of the file is used. This is similar to do `$ tail -n 1 sensor.txt` on the command-line. +The `file` sensor platform reads the entries from a plain-text file and shows the found value. Only the last line of the file is used. This is similar to do `$ tail -n 1 sensor.txt` on the command-line. Note that file paths must be added to [whitelist_external_dirs](/docs/configuration/basic/). To enable the `file` sensor, add the following lines to your `configuration.yaml`: From 6f7e6f5cdeb4f99ea4b5951a52e5f4397ed491b2 Mon Sep 17 00:00:00 2001 From: Kyle Niewiada Date: Mon, 16 Apr 2018 13:41:07 -0400 Subject: [PATCH 874/993] correct possible typo (#5176) --- source/_components/device_tracker.google_maps.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/device_tracker.google_maps.markdown b/source/_components/device_tracker.google_maps.markdown index 6f2175a604..5b16f3c785 100644 --- a/source/_components/device_tracker.google_maps.markdown +++ b/source/_components/device_tracker.google_maps.markdown @@ -20,7 +20,7 @@ You first need to create an additional Google account and share your location wi This platform will create a file named `google_maps_location_sharing.conf` where it caches your login session.

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

    From 70af38b086588e2b4e1309de0241be3b2401ea34 Mon Sep 17 00:00:00 2001 From: Lincoln Kirchoff Date: Mon, 16 Apr 2018 13:34:50 -0500 Subject: [PATCH 875/993] Add climate.modbus module documentation (#4593) * Added climate.modbus module documentation * Update climate.modbus.markdown Updated IOT class Local Push to Local Polling. * Reviewed comments for changes Added configuration tags, removed optional configuration values, and set the correct release version. * Fixed formatting with the configuration settings * :arrow_up: ha_release -> 0.68 --- source/_components/climate.modbus.markdown | 70 ++++++++++++++++++++++ 1 file changed, 70 insertions(+) create mode 100644 source/_components/climate.modbus.markdown diff --git a/source/_components/climate.modbus.markdown b/source/_components/climate.modbus.markdown new file mode 100644 index 0000000000..f489d27a4b --- /dev/null +++ b/source/_components/climate.modbus.markdown @@ -0,0 +1,70 @@ +--- +layout: page +title: "Modbus" +description: "Instructions how to integrate a Modbus thermostat within Home Assistant." +date: 2018-01-29 9:35 +sidebar: true +comments: false +sharing: true +footer: true +logo: modbus.png +ha_category: Thermostat +ha_release: 0.68 +ha_iot_class: "Local Polling" +--- + + +The `modbus` thermostat allows you to use a sensor value (current temperature) +and target value (target temperature) from [Modbus](http://www.modbus.org/) +registers. + +To use your Modbus thermostat in your installation, add the following to your `configuration.yaml` file: + +```yaml +climate: + - platform: modbus + name: Watlow F4T + slave: 1 + target_temp_register: 2782 + current_temp_register: 27586 + +``` + +{% configuration %} +name: + description: Name of the device + required: true + type: string +slave: + description: The number of the slave (Optional for tcp and upd Modbus, use 1). + required: true + type: int +target_temp_register: + description: Register number for target temperature (Setpoint). + required: true + type: int +current_temp_register: + description: Register number for current temperature (Process value). + required: true + type: int +data_type: + description: Response representation (int, uint, float, custom). If float selected, value will converted to IEEE 754 floating point format. + Default float. + required: false + type: string +count: + description: Number of registers to read. + required: false + type: int +precision: + description: Number of valid decimals, default 0. + required: false + type: int +{% endconfiguration %} + + +### {% linkable_title Services %} + +| Service | Description | +| ------- | ----------- | +| set_temperature | Set Temperature. Requires `value` to be passed in, which is the desired target temperature. `value` should be in the same type as `data_type` | From 560108c659bbc1d89c28892ab1180c38917a947b Mon Sep 17 00:00:00 2001 From: Khole Date: Mon, 16 Apr 2018 20:01:43 +0100 Subject: [PATCH 876/993] Hive R3 update (#4974) * R3-Dev * R3 - Sensor Update --- source/_components/binary_sensor.hive.markdown | 2 +- source/_components/sensor.hive.markdown | 5 ++++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/source/_components/binary_sensor.hive.markdown b/source/_components/binary_sensor.hive.markdown index ef695f4601..ffba6e29d1 100644 --- a/source/_components/binary_sensor.hive.markdown +++ b/source/_components/binary_sensor.hive.markdown @@ -16,7 +16,7 @@ ha_iot_class: "Cloud Polling" The 'hive' binary sensor component integrates your Hive sensors into Home Assistant. -The Hive sensor component supports the following Hive products: +The Hive binary sensor component supports the following Hive products: - **Hive Window or Door Sensor** - **Hive Motion Sensor** diff --git a/source/_components/sensor.hive.markdown b/source/_components/sensor.hive.markdown index 3e7350e147..4fa0221f31 100644 --- a/source/_components/sensor.hive.markdown +++ b/source/_components/sensor.hive.markdown @@ -14,8 +14,11 @@ ha_iot_class: "Cloud Polling" --- -The 'hive' sensor component can expose as a sensor the current online status of your Hive Hub. +The 'hive' sensor component exposes hive data as a sensor. +The Hive sensor component exposes the following sensors: +- **Hive Hub Online Status** +- **Hive Outside Temperature**

    Full configuration details can be found on the main [Hive component](/components/hive/) page. From d434247c54ea96678b3cc63a05bec5ed9b626121 Mon Sep 17 00:00:00 2001 From: Jonathan Weinberg Date: Mon, 16 Apr 2018 16:33:49 -0400 Subject: [PATCH 877/993] Spelling fix (#5198) `c` was missing. --- source/_addons/duckdns.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_addons/duckdns.markdown b/source/_addons/duckdns.markdown index 13c8991667..123e975e97 100644 --- a/source/_addons/duckdns.markdown +++ b/source/_addons/duckdns.markdown @@ -26,7 +26,7 @@ featured: true Configuration variables: -- **lets_encrypt.accept_terms** (*Optional*): If you accept the [Let's Encrypt Subscriber Agreement][le], it will generate and update Let's Enrypt certificates for your DuckDNS domain. +- **lets_encrypt.accept_terms** (*Optional*): If you accept the [Let's Encrypt Subscriber Agreement][le], it will generate and update Let's Encrypt certificates for your DuckDNS domain. - **token** (*Required*): Your Duck DNS API key. - **domains** (*Required*): A list of domains to update DNS. - **seconds** (*Required*): Seconds between updates to Duck DNS. From 078167bb033d76addaf27b8f406474604c07af6f Mon Sep 17 00:00:00 2001 From: Heiko Thiery Date: Tue, 17 Apr 2018 19:06:39 +0200 Subject: [PATCH 878/993] Add documentation for AVM fritzbox smarthome component (#4076) * Add documentation for fritzhome Signed-off-by: Heiko Thiery * change component name and configuration Signed-off-by: Heiko Thiery * followed review comments Signed-off-by: Heiko Thiery * another rename Signed-off-by: Heiko Thiery * remove default from host Signed-off-by: Heiko Thiery * add documentation for device attributes Signed-off-by: Heiko Thiery * bump to ha_release 0.65 Signed-off-by: Heiko Thiery * :pencil2: Some spelling and grammar fixes * :pencil2: Grammar and spelling updates * :pencil2: Small grammar & spelling changes * :arrow_up: ha_release -> 0.68 --- source/_components/climate.fritzbox.markdown | 28 ++++++++++ source/_components/fritzbox.markdown | 54 ++++++++++++++++++++ source/_components/switch.fritzbox.markdown | 31 +++++++++++ 3 files changed, 113 insertions(+) create mode 100644 source/_components/climate.fritzbox.markdown create mode 100644 source/_components/fritzbox.markdown create mode 100644 source/_components/switch.fritzbox.markdown diff --git a/source/_components/climate.fritzbox.markdown b/source/_components/climate.fritzbox.markdown new file mode 100644 index 0000000000..65975ca77c --- /dev/null +++ b/source/_components/climate.fritzbox.markdown @@ -0,0 +1,28 @@ +--- +layout: page +title: "Fritzbox Thermostat" +description: "Instructions on how to integrate the AVM Fritzbox thermostat." +date: 2017-11-12 17:10 +sidebar: true +comments: false +sharing: true +footer: true +logo: avm.png +ha_category: Climate +ha_release: 0.68 +ha_iot_class: "Local Polling" +--- + +

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

    + +### {% linkable_title Attributes %} + +The are several attributes that can be useful for automations and templates. + +| Attribute | Description | +| --------- | ----------- | +| `device_locked` | The state of the key lock at the device. +| `locked` | The state of the lock for configuring the device via the app or the Fritzbox web interface. +| `low_battery` | The low battery state indication. diff --git a/source/_components/fritzbox.markdown b/source/_components/fritzbox.markdown new file mode 100644 index 0000000000..8d601368eb --- /dev/null +++ b/source/_components/fritzbox.markdown @@ -0,0 +1,54 @@ +--- +layout: page +title: "Fritzbox" +description: "Instructions on how to integrate the AVM Fritzbox Smart Home components." +date: 2018-02-18 17:10 +sidebar: true +comments: false +sharing: true +footer: true +logo: avm.png +ha_category: Hub +ha_release: 0.68 +ha_iot_class: "Local Polling" +--- + +The [AVM](www.avm.de) Fritzbox component for Home Assistant allows you to integrate the switch and climate devices. + +#### {% linkable_title Tested Devices %} + +- [FRITZ!Box 6490 Cable](https://avm.de/produkte/fritzbox/fritzbox-6490-cable/) +- [FRITZ!DECT 200](https://avm.de/produkte/fritzdect/fritzdect-200/) +- [Eurotronic Comet DECT](https://www.eurotronic.org/produkte/comet-dect.html) + + +## {% linkable_title Setup %} + +```yaml +# Example configuration.yaml entry +fritzbox: + devices: + - host: fritz.box + username: YOUR_USERNAME + password: YOUR_PASSWORD +``` + +{% configuration %} + devices: + description: A list of Fritzbox devices. + required: true + type: map + keys: + host: + description: The hostname or IP address of the Fritzbox. + required: true + type: optional + username: + description: The username for Smart Home access. + required: true + type: string + password: + description: The password of the user. + required: true + type: string +{% endconfiguration %} diff --git a/source/_components/switch.fritzbox.markdown b/source/_components/switch.fritzbox.markdown new file mode 100644 index 0000000000..83657be0c8 --- /dev/null +++ b/source/_components/switch.fritzbox.markdown @@ -0,0 +1,31 @@ +--- +layout: page +title: "Fritzbox Switch" +description: "Instructions on how to integrate the AVM Fritzbox switch." +date: 2017-11-12 17:10 +sidebar: true +comments: false +sharing: true +footer: true +logo: avm.png +ha_category: Switch +ha_release: 0.68 +ha_iot_class: "Local Polling" +--- + +

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

    + +### {% linkable_title Attributes %} + +The are several attributes that can be useful for automations and templates. + +| Attribute | Description | +| --------- | ----------- | +| `device_locked` | The state of the key lock at the device. +| `locked` | The state of the lock for configuring the device via the app or the Fritzbox web interface. +| `temperature_unit` | The unit of the temperature sensor (only available if the device support temperature sensor). +| `temperature` | The current temperature sensor reading (only available if the device supports temperature sensor). +| `total_consumption` | The total power consumption since the beginning of operation (only available if the device supports power meter function). +| `total_consumption_unit` | The unit of the total_consumption (only available if the device supports power meter function). From e1747451fce0a1fe71a49dc7200677087c6be2d8 Mon Sep 17 00:00:00 2001 From: ChristianKuehnel Date: Tue, 17 Apr 2018 19:10:16 +0200 Subject: [PATCH 879/993] bmw_connected_drive: added documentation for new services (#5055) * added documentation for the newly implemented services * added documentation for update_state service * improved documentation * :pencil2: Several improvements. --- .../_components/bmw_connected_drive.markdown | 34 ++++++++++++++++++- 1 file changed, 33 insertions(+), 1 deletion(-) diff --git a/source/_components/bmw_connected_drive.markdown b/source/_components/bmw_connected_drive.markdown index fe8cabc71a..fe2d698b94 100644 --- a/source/_components/bmw_connected_drive.markdown +++ b/source/_components/bmw_connected_drive.markdown @@ -12,7 +12,7 @@ ha_category: Hub ha_release: 0.64 --- -This component lets you retrieve data on your BMW vehicle from the BMW Connected Drive portal. You need to have a working BMW Connected Drive account and a Connected Drive enabled vehicle for this to work. +This component lets you retrieve data on your BMW vehicle from the BMW Connected Drive portal. You need to have a working BMW Connected Drive account, and a Connected Drive enabled vehicle for this to work. For compatibility with your BMW vehicle check the [bimmer_connected page](https://github.com/m1n3rva/bimmer_connected) on github. @@ -52,6 +52,38 @@ bmw_connected_drive: type: string {% endconfiguration %} +## {% linkable_title Services %} + +The `bmw_connected_drive` component offers several services. In case you need to provide the vehicle identification number (VIN) as a parameter, you can see the VIN in the attributes of the device tracker for the vehicle. The VIN is a 17 digit alphanumeric string, e.g., `WBANXXXXXX1234567`. + +Using these services will impact the state of your vehicle. So use these services with care! + +### {% linkable_title Locking and unlocking %} + +The vehicle can be locked and unlocked via the lock component that is created automatically for each vehicle. Before invoking these services, make sure it's safe to lock/unlock the vehicle in the current situation. + +### {% linkable_title Air condition %} + +The air condition of the vehicle can be activated with the service `bmw_connected_drive.activate_air_conditioning`. + +What exactly is started here depends on the type of vehicle. It might range from just ventilation over auxiliary heating to real air conditioning. If your vehicle is equipped with auxiliary heating, only trigger this service if the vehicle is parked in a location where it is safe to use it (e.g., not in an underground parking or closed garage). + +The vehicle is identified via the parameter `vin`. + +### {% linkable_title Sound the horn %} + +The service `bmw_connected_drive.sound_horn` sounds the horn of the vehicle. Use this feature responsibly, as it might annoy your neighbors. The vehicle is identified via the parameter `vin`. + +### {% linkable_title Flash the lights %} + +The service `bmw_connected_drive.light_flash' flashes the lights of the vehicle. The vehicle is identified via the parameter `vin`. + +### {% linkable_title Update the state %} + +The service `bmw_connected_drive.update_state`fetches the last state of the vehicles of all your accounts from the BMW server. This does *not* trigger an update from the vehicle; it gets the data from the BMW servers. So this service does *not* interact with your vehicles. + +This service does not require any attributes. + ## {% linkable_title Disclaimer %} This software is not affiliated with or endorsed by BMW Group. From 04560310f95a80d0d060192120ba914bf56902ea Mon Sep 17 00:00:00 2001 From: Robin Date: Tue, 17 Apr 2018 18:11:44 +0100 Subject: [PATCH 880/993] Adds Sigfox sensor docs (#5130) * Create sensor.sigfox.markdown * Adds name * Address reviewer comments * Update logo * Add files via upload * :pencil2: Markdown tweak --- source/_components/sensor.sigfox.markdown | 47 ++++++++++++++++++++++ source/images/supported_brands/sigfox.png | Bin 0 -> 334112 bytes 2 files changed, 47 insertions(+) create mode 100644 source/_components/sensor.sigfox.markdown create mode 100644 source/images/supported_brands/sigfox.png diff --git a/source/_components/sensor.sigfox.markdown b/source/_components/sensor.sigfox.markdown new file mode 100644 index 0000000000..f3f0bbb0ea --- /dev/null +++ b/source/_components/sensor.sigfox.markdown @@ -0,0 +1,47 @@ +--- +layout: page +title: "Sigfox Sensor" +description: "Display messages from Sigfox devices in Home Assistant." +date: 2018-04-07 12:10 +sidebar: true +comments: false +sharing: true +footer: true +logo: sigfox.png +ha_category: Sensor +ha_iot_class: "Local Polling" +ha_release: 0.68 +--- + +[SigFox](https://www.sigfox.com/en) component adding a sensor for each Sigfox device registered with your account. The default name of sensors is `sigfox_{DEVICE_ID}` where `DEVICE_ID` is the devices Sigfox ID. The state of an added Sigfox sensor is the payload of the last message published by that device. Additionally, there are attributes for the latitude and longitude coordinates of the device, as well as the signal-to-noise ratio ( [snr](https://en.wikipedia.org/wiki/Signal-to-noise_ratio)). + +```yaml +# Example configuration.yaml entry +sensor: + - platform: sigfox + api_login: your_api_login + api_password: your_api_password +``` + +{% configuration %} +api_login: + description: Your Sigfox API login. + required: true + type: string +api_password: + description: Your Sigfox API password. + required: true + type: string +name: + description: The name to prepend to the device ID. + required: false + default: "sigfox" + type: string +{% endconfiguration %} + +Note that `your_api_login` and `your_api_password` are your **API access credentials** which can be accessed by following: + +1. Log into [Sigfox backend](https://backend.sigfox.com) +1. Select `GROUP` +1. Select `API ACCESS` +1. Click on `new` and create new access entry diff --git a/source/images/supported_brands/sigfox.png b/source/images/supported_brands/sigfox.png new file mode 100644 index 0000000000000000000000000000000000000000..fdc7200ec810d5e80b21bfe53a70846eeb8b97f3 GIT binary patch literal 334112 zcmeFZcUV(d)ab1d1{4KsfQo>qAkw8KR7FL)f+9#&q)CT_Ud%X(4hSkp4MhGzxv|1l(|tiAU7t+n>r<<416^g4Fph7GhAtk3Hq^)%EGW)5~j zm#;cpF&A>Ta|Ev1utC-x0erMGM_%S~x3jf(LAc9tldnJkpTVz%xw*)fAZ_Hh^)$|M zDLFWsb4dt^3yE;cZ{gzNl6AgnfzUpA`rGZmUvk`5NTee|SlG?YO~_45$idlCSQHM2 z3yT~RK6XqHxI)my!yb9rUC`d;;L1Z*pL5dO#mw2-5ozsU&jmjB@)ZXZQjVJ&e9`xR zD{@{n`~DtBl(Q}QEmzHi&27!?%yF%8$8C|+--6eJ>bA88dl6xK+1^r)+gjQZ@*bk=z3aYkL>uWqUJom6P%)l=W4_W%yS%bm5xiFIxZq{N=a1W*s<@=UAvXyr7Q1LSyL6*9&4aI-yVDNXOE@0 z^&gMba<;a#w!dt9a_!aRo{%_sOhg)fOdKwD;`GTAqM~q7@#E4GaFLT@q7ov~O46$$ z|KNU#cYqKefJ=aWxD0v%c~M#6e|$%AJa4igO*&xNK%^k92Uc;v#C`-bcr4I{2|v3(Xy_Q( zr5$^*=uOZENC}W7Komd}Komd}Komd}Komd}Komd}Komd}Komd}Komd}Komd}Komd} zKomd}Komd}Komd}Komd}Komd}Komd}Komd}Komd}Komd}Komd}Komd}Komd}Komd} zKomd}Komd}Komd}{0~zw*?HD?^(+8L`TxVphZGJe9P;@P1rP-g1rP-g1rP-g1rP-g z1rP-g1^*XOuyLdTO+FXs-m=ZXL;n{E2Axd=9nb`wQUy@}Q23EjGV&t7fVuxz9CX`^u9rHf)w{ zY5!t)XiSWD$H$B}5I*nrra%5USMSMojY0IK_6pPI8ZS631eYTfUls`-Idlc#yNQ3^ zB)Oz@Zs3||o5DsI4LviL;`I&C2S^E!B|sEF6hIU}6hIU}6hIU}6hIU}6hIU}6hIU} z6hIU}6hIU}6hIU}6hIU}6hIU}6hIU}6hIU}6hIU}6hIU}6hIU}6hIU}6s(tmBX?NU zR?h-}w6|XEK^lWJ26cdMkZz$Rr*;bqo!be8DzLG6aR(WJNz`xp{ zW{xu}_qI@iN>h31-m=>Eq%38)3-7$b+g$CS3U)>os#8#~)~sy8KH2B5OkR2YN_$@p zfkoA)^wh93w^8e&inSt|)jgR1qSL_0)E?jzq zl^T8c^owg4!?~f;rTHEQLgsAyM|jHw5bDfL88dw!`~1P?a@6f>Sw>77GZw)4B}}C6 zj&-Q3XUA*~$?dyRAcslUq_T@(hUc-f?&hLH(IM?=ZfQXV7b`r346D!KUQT=+)G_F& zedyEr*bdKxHOWB~8mbm??|GlHSSk=mCE0%?^Eqxy|1xHdS_A0iJ6M9b4skuA1#6Wy`{eBkb3+kF=_0S9=I8yc{kR z&UKqfKj|$Qc_Xb2wk~rNr2)+Gx7d`m(}9+*jvM!m6jz=2nBi7`$nH}7yF;f2B_huc zo@1mvcW%1@4eh0V#<)-C{@~F${%3rAoMUNl@Af)gOv0I*#<1vJL5*8><9oN+?e-D~ zm9axNGK6Xig=L3!N4E_d6g_$;#{aHnZGsW?Q?nfnqoYMgFFILtz8DDDn50xwW3h+ zJ)NEc1EQM5pqC@~ly`BO1*8=5X!(a@;quX%R-WOzW+~4-!k%GZcY0lOAaz`I*@N3n z>#c_8$*S7Tcts}RxS4-g07yijv_?WNo9=L#^>oEasv&z(2lXIjtsN$A|o`N*es z4xJv9n23zQSO?xsV!QDtx{{NdWYgGZ21__R#tzE{l+joFm6q6~2?AJ*IjznyMWs)Lk!M@wWutzy}Mv=Cvn6J;CpmC#S^ILSu=w*1O(96)%?RYyx&3f zW9BOu+^vzd`jk?^yc(Yr{^g_WvF;$2QY%ZhJ}3J?xB3rzn$1Lmzi2lLW^1x%%mkC0 zm0syea0`D?AId4eXjO1~@Kg3dBaEhP>80>$Dpegp`#)c9K4?h_imOQ>nZZ$|TzDkWu1i!Qqi;QJy2Rhx_^74Sla7~?H#U01*kCn{ znTy)Eg>dI6GeUu^WqtWrsh%Z4ug1*qV#|-(bA_WX2G#oT_W+%t1p}33iN%wJ#b3wa zHUz_E6$;g&H|_Y4{qZJ~M%TN_Bn)SVIPrz~3k|yL_)n*{gfdvV_`1bLEN0m_c+a!4 z>R;WvE{1Q@=Oe978iz_!s!*}l3kH`W1`zMy{W<+gWIY<$!{>&g5y2tDFCr?XTP8n& z&=@}}yxDT6Z)!<2*y%a(%@oki;+evI)qQ>{DFsI)h}_}K&1ak`Y=3V1hkW0GuM?~h zT2{{TDNR#Cdpu1QrUrxpu>Lys-N;%E77fH%?KBL!pZwHtx5hK$oDMJE$G; zv_WsGhen}9%q9D`@RH|W?vOT_xp_9Utf)N_Z|uhxD_?|bzNjfX4`t~i(cRoHc=@c>DYa$u%df1-mR^{j+pH%R_74D z$eCS93xAO^_d5n*GSYeZS%BQkr^`cWV}}Qd`h>%hmLD0OnEdFx`Tb4&j>qFI$`2^G zZ{R>D1bNOz-LNm3dSb7tH6~8nj1Oj9PLWII3=SCxE$ezxH#{ca-;ihMx5(Ko%8~56 zg`yYN;HC~@t39JwL}Q3(N}n0crevONKbnDb6>+TO2!7$2^ZU9Rt`ep5$D)mbU1_KE zV#cHNeg{n|NTMVk?40mt_K#4X+)Mmw%-C%_o#a?ZY@F_0UFLU!pENCuH>q$QWo3TI zaL1cM0>DEu!AEZ5X4ExfJNvzz;lq7ZgunWH2V612ehG#m^F=oHg+#mXWRjO(H|hA# zOp3CVBHS>c{d@1TCTdWsAzQUKVD=rJ2cvMrQhur1r82ME37rb174W z4QSO~((D0i?y`af)1jS&z}G-SWG%H-hF&0oNk0R=7}X~%;qkAfh6pudsW{&7^-vijh?<(!ZxR+F4XOm(=WPwI|! z1(t_kU{P&EP#PIm<}w&2k>}@XLrFH(+;oD~how<&Q|1UDn5ec2X8W;c%mWz!5F^R# zA8#7%G*h0%ALNr@eNu#*Z>*P;YBHdVCVC#|1gYZBx0|y<6k6>HwH&lbxWt5J{+@@7 zx_Z5_JOrs4j@-VP(gnO*cfqTY53y@aU*+N7zcJ+m?5dqEu#&0`B3x*G(!r`UDF^N91@Fr zvQYDKI5=F(uSZ&X>3&;^_c?EQH$<6t?OjVB@2gQQM}FRd?-a$Kf-N2HWht>$rW`t8 z&u;FYFne|}F+36DS2me*P19lOloZexn8y!(2^3}&!}ynXq1Ch}`C{TYdJK)I5}3?M z*vH3@2%*iKC6h9GPU^H4(M`qEL!(k9r3>5bUDfLc^{6!a10udR05H}2yBvuPXG$eC zD14=&>1*232&pGLWm%X{p(U|TN(XrcMAHF`f6fNb6~5C}jfs2`;~Fwmv?mpCKp3f_ z=!*}2E1AmpyRJ9~ZP)h=OJdIiU>YGy=E}H*R~PMN=Z6)4LNtZ^KyTer0wPEG7Y-z) zdqYptdy6hx4LzAj#sqf~97YQU?OR8kKMh` z)7-xz@3(7c0I6xW9-vabzzxN^o%mOe+#WuRld?pGGmZ}EjhsT1{5d;7PH@L!+)jge z;5U6&6pzUyJM1cU(HSZhlY3Oat+{)REvo?RF zJfeeX=}l_m9=C1gZc*zIIz?nOC`P1d`ssUqEs&c7Ft>jIWKLZN zy-t&A)4(jyvl%3TsaUVZI(UquaX<64VNNU`9Uw39s)wM_=5}$9Hq-* z+la33SHc}2I;bWGci7|s;i7hj@awik zHFm+Z_3RH?GaeDHv&>5$XXU8J|=@(zRnf#tL z-&Xo~#bTUFT*2gy>}Q4wM9I5-oM+JsS}Wz>%OwX{IQ6Q=Co{&9PV#{{iL zT}kyV$-CW~k)7J;;4TkGQvN=B>G|of*q#>@K6dTqA1EE9coQpN4%l~gXDES6Nm0W^;w>yUjdS7WF{N?0s;SoHkNX26?6y$a z?@!c!9lLQ$K5}rw#)oTk0qs^~ev4N&%+T~Z7b`o{olG(wJ63Nhw~NH)pEgt2vsAY~ zsqkhUTjg*mMP|y3S{yl7f7heSjhuOZ>3rdki0KLAK{#k=S*52WQ-rVQPq0Zj$sEy$ z7(u-7yz$vNY3IXUFQm|icjWg*jY=u-CXy_}t>miz+wLi}4z_p%j9~NEzpNQ7Xt~o$ zy+aFh_{OmC@n;w>bai^=%x@mCe|a7m5REOm;&Zts)&pabv2$$%r*@2mZyV*1CMH>#{Fk%WikJNR4+={;GEkojReeKk*!1-NKsx z`Z!=`EfGJrGa!8}6)Qb}_tuOW#KidK7CaK7DDCJmqWi{XelIUd)s49%v=5Q?yvzwc zoymi~yxl5lvN5&Hr*2PqW3c?1a6j*)z9YaG+sQk%?j%K*p^q~dM*1B^HTqZQrViNd z7q*QQJG%pD1IsV4LQcU$U7zq6-Lr^RP~nwY))qdvR#eH{1&eNtnTzNo7C&8(pMsm0 zG^@Qxk^stlic%6WaU}yCmWw$0$!Dji!s>tXjy(f_Vs*$QI*HOnh@6DA4$vjGO{O%y zzcD>{ZS1h1i@y;fyTeRAxhu1Y-_efXfX=YF7SS;LP+A3%&Xo1U~RlV zsMY&4!MN0-c{Fb+d?MUknC~Iect*P|%xjlSIQ+=3Ap%er06(H~z^Z@9~ncunE*+P$_`IoQ~fH!wbI@hI`K64=y=k*YW-q32|^8 z{>=0q*t{pXC6x9FMBR({hg2AKWwM2YgbiF`5@27|e#SYr2&f=w^=sI6i$9_!Q&%5cn zbI5E08g%K}x#2at;8Khi1guUu*}gE}F#Y8?=bte%55hct19RE@-1N#J*}4ocF^@TAI7Lm)yUUzU$}iMjZCs_^ZtQ9GTJ#y+B`p-= zd)C;mwVr@6(WT*duSuKClX(PfKRfg6HE1b*dB% z4F?)_qxz;&oKQVSVdY^#r%%P<*)?K%Oh9eTDFdjnH3RM%EVR9_cqA8=VE<^b?^~%y z_metG7{xK43by~QlbrBcZ_TH4z-KzlzvMmXob5xZlI|87ey^A`FrxiC{Vd9ZF3i43 zQ4!`Vn~^QvpX{m%qdRgBcLB)BH1j{+%5qS^J`7#+@IP%F4ZXJ(5RFQAQJSG*ydOH1 zG#>uAr!X%wE-rbp~6Fc1X|Pko{oQZbCaU`H{Ga(*lPWbLqg=9NPFU?QhW04m(W z9%}`nPOYxaf|)0n9wQ;nxf?*T`LaOi*ecg(r`_bzuU+9zVPS%o@2sr5VLj21CQK{d z11Hf@Kep)hmTnzrUB~VK3%;9~1*wLJx|Ocq%V1CY8p^aGKd#WHe$hWPYWcpVCa0!`SkKVZmhU*Bw*z%w z*Wo)ccP9Uwn6J@MtzI&=KiM5E>8~B%K@?YTZoX^j=X|6Hw`&~@F?~(5P+fa)`c*dN zSPZ>;_uB%M)+fQC92{Ax!L#YAk#4pti9&bt>zUsvI_O^uja0elYNg0`h$YrbzW_P7 zjX2+E@`TfVEG2oZPIOwW_er+hL?NnGA$fsgTuO})yfxwq+KmafH4_n02$5q(xbjr zF#f55)$(dx`=PW>ms(8a5?DcUF*B@RnI|F#V4!6(c`7CvT>~1#Af&6Oy^DcMiWhynp||wgVVeZhIHd z@EfHLZW)tH^}IeW46B?cF~;)+w-2)vBCYZ&yl)j*js^}y8-V_TA#D$#!u>}vYDTBE zzB9(F6XPr|hOdjp;i4Q`@M{+MafkHK#$?U3*pcEx$qS7<62tzfGF{AUGU$wqNWH0h z)ysYAtT{nlsVJ^r?;;>f#T>V{5T?3=?J{~lak6o-lfnP=SLsWVY=9p|@l-EPk^@w`SI54`Z z6;Z|wiu8+8h2Nc2g;xBYvV-vLR6hz7U~@d|s)$1`$Ij29#*||!-+NRJ?0N1FgqZw` zKsEGxyvb_ds6Ln10L&(?WY7FgNrmBv;KgRpx+?NxS=X}c#il7Sw{fqUu!`;&3mJzq zS`O(?!`E`?t-8JWDLCKw=)w$vqNOXdh7upTMo(W?+@5bf5oP8a`WAj=!Lf*tu=VR-2s%s*z=~F zl{6)q zU_z6R#%x;q&Tv=r)a_i38(?{(5izoJh2slE4Z6%*+Ek|d-vLq4h8B?~S8#(WfMP$< zFscX(?Q}Di&d%SGMbE6~i%t&R_h3nG5j9gzbeK@7E{oZ}YMP@vKNMdcaEfkqD0v!P zxLkQtY1C_3Q+5*OucfP37@x z$qU(|m|#Tk4N_3;|91K@Y-z9H^%~_;cqnlohnPYf*TL1~sXpKFT_GcU4YtO4Qz`{2 z8GK5?-7X(?0u@2Y>155)4=N21EADgH`B(eIfD15Za69-?%o=-u1DsusLD zbd$kf_sQny9bB38Xik19o<+O4;e~gA!PjI9&d1hsH>j@;PHE5e^}5xtm77Orb4r>LQ5t~heE0h?kB=+&AZO2xNmGGL59+PoMZ){4W`BpB^;N*%*nmC<3`)J{o=!f~ zqI}#>MxS`I6vv+udJlLBh7X4En`f2?#^KBTZVcXDzPecpGk zRM_p+Xe`J&Xe2qAjUn0mc_ZM~rKLB$UlRlykP}QMK79rXqV35Iaz9ZcWeZI+VKIN% zTS`%BfNc-DZSwJb;)MjDFrwD`M^isTBi#gVH9==a;+@O4OBDlXJj1ui`FLI%<^^(Y z)=-xs$ET-+d(KtraJlX4DPya@IDDRp5lU-yb*P6WqH z+A5d)DJAMV)Syu&ty$^B0#v)02aV(>wTO#d0gbe?PvlO^t$OA_G`1qgK&!LZclZ<> zwVcaNP_FDf6Qp<@TT0_xIU_o4-uFEOP(J-%#4{C!)f&foP!@DH!t7Y`4{$yhQ|&oQ z<3D!gZPDY&s0(sSMTnYeILb|6H}Ngd>^Oizy22?_zoc%bGnt9huIs1XQ5bJ2qh% zMMthiw`E*A^)D^>Q7(iI+l;*AYFtS%s{>5#-J}^)*W%N0HIdG4@a_W^i`~HXX@@M! z88s{xO_nYw^*M4`ep7QhZ>Duun7;#@4a|!ax{;eope#t?v1c&p?g{5mI5*_w^8}O{}cx8wB4!#&s9e`@Y@Je z@x)}1Sbr{eFu$)CxuD{q>u9N=3?4qLlD+j2qHx3$r-yLmDZR zG_OpQd|x&Lrh|ELa-Rwpo8AIu;d{MN>9FI-tw=g8B*{iq z$DoSv`m99q9vF@8iQWO5+@9hCK;`)26&J6yDXvuj{$2B@Re+&-!es8GDuoizc$R#` zvg6PbwV4k*#_Buzx?dxL-%un2>vvl7DFH5K?5)FZiYo1e-$iRDlPV?y2L?Q&Ru?^p zSfTIQ_?g=!>rWW~wFrK%j6IV}(+3qz-D#ckTt4MU#Z6_DcRZ^5^^V&JD?iY%CrFZN zR(B&z=|F=DFViW`C@w|Q2p|nh@wgCGdoh_r;&1e5W142db-ZUFTcXu{>^bEU@7e*B zfpHu0d0~>F^rQ@a(AT8#@yz&B8kU0%>NWBnqNJMDgyG+{ye4$E5uk6oiBlp(8T zw|isfdBA?rMlhX}cMj??-sW@F3$KuuV>>0dS9?()0jpx&(VvtODVXX|Hl|DS2|XNjyWdUfu74ZS6S`K%!0!r>CA{I28h82Fz#+@Q%$4bYwooo4 zRnExSuBZO27|+|=c))~?$}4B;#H%Qve+Rl?{=nzKrv8A&*)FEAYJXo-g`tP5ZFJqN z>7e6JC95=~yz-$z!noNYPaq8hQcUc$HbvfEb(gOgqM>0cF)|!_jW`ls4D|)0j~5 z$hm{rfcB-)mQUKo@TdCpPXZQ}Sq9U% z=IiZe)4ZMmcRP1OHa@eFG7>T~W6Bvi=s}4*lsjK>E9q1K2EUO;lXZx*M=rx)a zz8E8;j$()r4FYCu!D8rvyyLA?I0HGU0aOoVeb7k3WxnlTdWV(~W?x^v@#<*ZdCvY? z)Ut7lyADvaQO0~<|9x_0dEW&$?-{&?y>F4MpCUVGZKeve_C*%+wf>3D2ZwxH_z(Wg z$o>nlz!F8v5v{@N)IFYwz1UcB%zB)aQP9v1Ea+TA&nII{Ozef`P9TI8GF}Unrr%tt zK*vwPIuOyV^|F3bqj|n5fD0;o_3_oC7C(&*T$xv4{v1*{(_ar8)SjSv!+%SN76n)A zu$7)yrX0N}_P}B$}t%RX+}*Pg~}f61@B z(xq-(fFSpBo2Bb%7|n0|_jG(en7U=}`*r`LXqpYqfL|I{%cGQEj{}_!tWu+Ec}7Fu z2?Tnk@M?eg2X(`x8HVym_HUCnK<*jMq%f6FOi3FbM>d|)s0+4D{#|D$mk2X@WS)JK zQ|{(p7ewSGICau?G1-X{34s)Bc^Fb60I+IP2N+x~3wZr0&+!pX0MDdp$v0vv7n?57 zNTx47%mLP8FGpI+Tnxp@nJs7zo}{7Q8V$_3mDY>e3ZGJ-Y~ZR#U&Wi+gn;E=Kne4y zvA+f7_nB8PhW}gIWs?NB%$Z+wP zcd1qP{Sv&xdg#6auf$F;h--L$ofyADN7>3B3-LW904pEF6FLg(sGX<^4LGvdMw|}C z^~<+bUp`b(QihSC&k-RR3+RJnLRZ{O}wx?Qe50W69}p1&brwTSt?H zfXNH$ifmg+Wizl8w?|!}$2*=Q?3?pX;1?;e9|&#gUp}YlxG)%df&gTunTn-$%`r2} z15))Rc7N0ZT3Uz7Uv5T**_ks?1sALpJ$r1B(A}~5SC8IH-xS)+%w~kH#otOOQ}uhl zIFB@5Lcf>0^-VG8SZu|VSfxW$`$QhF(uXOm>84Vt08rWCLl5}6Wprn2M|XsOSL)9{ zh>U<1IW6@>fwCC_d5W6*!o3)VLBF&erVwpGvcxS%`RI5m8yDT4P5RcCN{2xGWD-*% z6-N3O3V0;6_C9XOK5<=9jn;X{)|U8wfAr5K`0hk9p<4pP^fig;W^V4Fu515832GHiBB(>}!RbmzrLno@YyuKPB${qu(Z`~nn zk>CD)+pi-EWP&scy)B=M8Dc0c)-(}-uc=}h7`9;LX&ANOaSu776k@xhIkSS{9N+qr zUjQ7MRBCGZjP8U>SSDf^O+LEXY5|T84lA&htn=VnPY%cY;c)M=oh$22ij;XHOmMeV zqbQ#44vPSe zdZ=2BDMK*MM)xJF7iim}Fu24%7O{GEO6#ZW_aCT7aUU&Dhr5;K+LALcl)+)cgsVG% z$862RCWVsbabAVXp-}^^I8szMp6=V&3T?hadMq=tw(HKqK$8Yley;?# zY9U9I{PPjff|2+(&EI{=ya! zz~@{;AJncQB+eieFs|Zdz}h!MeXV=noCO1et)YU8H!ne~s)koUwqq-3J7w7Z5!>;` zM;T0h$p}g-r+PKz8^6)9RX1Mj!{`XLa)5!nR@B~SzT&`y33}5`_Y+ZXE`0~NHh zwA_>h9>r9esDAAr-4aLt!wp-|&0wL)f1nyyFq@Jl{X&UcNkDI6mbPCEOWyBox#V3% z%&R_@%4o`$2=pEs0EiZkEau)6zw`zb+fp2t*V`!37~C(ENn$n zKhqO8H-(78S~Z-oRI3olH*95g^&n6LxojY*p)PKTbU~Ou+1m=1HRqVE5JEb`H>%J7 zy2Ah#-^Z}TG@qlg^>~)I#Q3@UU|GV9=W}S&yNgd|`j?~RLl?yyYK+tSK&cg%VU>wE zruJ;#fo34qSF7bP_|Ng4KYkrczZt1hx=f#wdg0f_xQ@kwNwCPZeUzgoQ+nDcCpV*}> zp=Dd+KJ;8d{Y&il5!7fWmI!u2Ih;C$7vQ>wd)6c%QVEh%q1>DAJloKd>{8?x$rIgk zrmVpm z3vn`YEAHf5BhW2dkd2!zdAS0+2;*yE^_nshyNO1#=EP#z_ZIY)poO5FSUNLqCt>?`k#-{hdwMU0Sttr*VriQkkAiR3v{etn-bu2f{Sh)65Ir8F? z6+&vcfqNkO1i4M8Rl#LYOmVSu?aL|}b0LlS)u)w*My59Cybv|5x^(pex@@U%wYvjF8A*A9ORX6&BUJLz#Il?#(-+yDg=At-X z*-Lh-D*}vo=6^QeC*NfD!$Qn%nO{3IFo7_AsC2=Y9&i!RG@NHM3Q5g=fbeg^!-S^s#z^u(!%}8x`i9nFK$YZwS+~}+ZwwKl}iFy?k64~ zdLd>M?&UO5cHhsCBgd~FZ$w-%ip9+fC$CK;<76!Tgi8)`cABKLt*Dzw8>E)ZnQeWo zdVC;>l!9pt7F=Z11sxIF=KeY(Gvr?7^`zJWk>ED9z{V4lea3bi&C_-4cO#of0Hhl% z5$Y)(C?K75A;!#pxzXL}OTM;O9<4E)E1N5WYPF1NT2R32&-U})0lGd&htEX6fSAMXld@F#ElR8)W&^~?Ss zh#(?0fy$T^1sk3i3@MYB3+aVoKk^Y~lH8DS;XKi-i6+-dOP?MMAuAWlO&ioDLh8L^ zzZ8POiLvNkAuH!R?5>*s(e3LR?<6bI(NM++`fNSZV_hwua5CVgk+2iJ*4D~P-kx5* z#|!>=s{bc#8o7(oSgj;A?BF>-^=y`#Ts?zt;8N^Wq$z~=cydi$qf+Tl80iD|Ogs5x z)t#ca5dCIzXKB8*1?VWSvM~Qdo-(--vE{|T#^3HEL|U%Y*K7D!5*J`Sfj^IggWyi4 zXt$Tg!9LJCYkEwo$H?))X0mlrJeaDj6lMu}S{7hU_S2ifUH2))&r~y2o|{hBBl{7$ zqo2iOoJ(z+J4kA{+>v>Ex@RfiPRq0%A6nXqeFqYE?yMzLy@+dgmO!2x4m%f*)9BH! zzzhEE+?W4kgiRl9aaE>Ono3rIyV!7&o%tgr?O4kKX_h`?m6%HNf&I}dtB?DPy@t*G z2#h*iCoBW|R;sr8Z|xdTi<7!*yC}%3sL3nTe5Y>@PwTJ}Dx}j}srC>SDL+qZ4FqPDn_0XBu6UcNUGB~ZnYoKcIwj+53+8ESS)cK(EZY%LHtm~>?300)<;Z&1 zU^bGggzQfhXQD<4>g@icLlU!P$r#3KMgAmk5Duq_3N0;RAHEc_j?6`b5iDH!=M8S9G-hdLbOqDL{q%8{ z0Hp|===Il@GVy%dVPO*9jWH5{vKds#Ya43W0q+x1S{RsW5C!(u^kJaxAEtIh2;Og(m7!*dzc3#)KvrR3EHezn%v7*0{wWEXI?YxY@iA|yE9`Y13fH(^uth1cLr?_03bwg97I zLxo*;t-wjW|JKBs0g3zpV)H8eF*x4)ZbniFrL(+ zTAW#Ny!XT8UFSfrijPM?6{EMaMySIbys+nHAD|p+nf86jvI2K^0MRAezPj8YstTA8 zarQ7&6$-X#?r_rsR`u!j%Fr1pWS3a4Cj|pey#cKDBde(wrDmSzE8_Ya%UgAenYMxI z!ur61hXxkzl-Iq>P$l5+%yZ0<&v>|X4%j=08_rwO#EAm~LgXtE*Qa0^Hv4?9!No+e zv1`P(|NUaPAhT5?N>DoSAdnxKhSKOJhnl#35S;xqWr^=oPH`#$z6Q3f;QZsJ7jZf^ z!kX}sQcS^uO9y!i!q#BLX`i5v9(xe$$dGTH1=bNLebvsUT!n;2GxQ^yu`}7^-Nypp z5K$*Yq2%Mp!k<7@-njeK6${YaFvDsGro@CbvbyR+YdPd@ZyP0NNsC*=OY7eYN6u2% z-*-d&@du!Mv=FbIYMfV2nHU1+Gr)bUIS-Pn@7O8^_D~()zFP+;%Gj5}78dz?f*1jl zZ7?Pm!EJ%nLUAs2e&=_!WM6y*9u^}q3A@PXvzLn> zdFC>GmI>#VBKHrikRT!Fvr2)=W~CoCDfJkt<{(=jlKi1OCQJqZc3VHyV8f^DP^ z?GZG|5$D&xxgLsRL5k~VhNzYf4r-Zl`=pe?vcS~B^d?P9D1&fa=jWD%N82p%bQx!v za)Fv0pi4=PrB8GZ8T{q-7#DLVJeGC$cV7lI@)!oU>>;qdcT2XTMBvALvMQ~q2q;Qm zmeHCw0Uk91ySUBk#vE8ZLU+O7$-HWMW2hZZ*vZ~@ZzFxeU`hJJava+XN2^B!V)=vY z&8f4%=GmEc1L1iYw}>GYgxR-KM`};l-$)-$&im)?8Q+2FEM>#IxI$oqjZ+Eb4ymLb zxhr-h7T|8&v4B4J!0~-$(TBbhT!PIv-T_hat zFlq194kn*jWV%cf6pdKim^E7`7R9qTv6L21P9t>Bn$80|i1f>TpYI??DoXwS-H}ps z5n$IbkH*j5pfph~kt1l~ZPyOYgV$lTw}_XCdz@YByp=_|qgL=N2gF1dSQeER`$5Ca zx86d&d!i{I5jz=e1bT<&6FjP;Pv7Wm^-f6w{k)kGX;()E1 z8dbCYLk*zeJpz|UcRIS+(e`)TgT}EB5dHMnu<0dO5xdj(G|dH zAj=PsVEjBq-#_`e>0P+|XTjOs)&|pyWvA{%0u!mx;Jl`WozE$pcsL6!Yi0hoRItfX8`W1~-rcOV8kN}RYqtX~d3DpMG!&f}%z z2j?dg6ut(NUd%`JgXvH^Fts_F0!(ch`CSfa+!vrUOGqLgoCoBN19e_P`}|#`H?7A= z;GmIU3R}L-7?G_Tdt~#1sf&&EO#8WO`Wa+#t}BLU)`ZMvF?p&j;b|@Q0+$0GEUC3t zHiL+ikJcvXq#^Rbuwc4CTk6rAHvTpEi$c;)$~f^ORZvRGsBSuet-3&2c)5;^*c{4P ztQlP~q8txddCNTazoqya8QcOMDgwm%HfC8kqXZ0^U?*|p?@it$~r(v0_GGvkxLZXQ7S1n7}7M{tym zreOzKE2ke51f<<)-7Wp09GK_@Cgo!D>1_(`#>QQ$G(a^LSOEbJrzA5vCcJ>u$B)ln zAs4lQQ60F2Wph79q3v-W;wYuUDPQmdiv=by0YQ3@TPQ<-$SqhFvCqu?D0wjvx&Wq8 zSIh5EDr(}~&q?sFA@AunEvAv=^c`{n22=qqxZ*-gP0yXc)?w6MP;&?F$?WfG{h;(_ z(|YiR*q3eA{4w24*aly(c4q@m$Bm)#w8lU?Ir+ozi@E(HLO9W~v}s!LU%lc~Udp z41BS)DSBZ!%T3tPRTuy0b8EZU=09wX?L4{hraE`LyUmwdxw-~&c6QA}qH=Z$qbc|H zJm=`p3bxbInqnJ&+U%L~^!n38;~+h|G{M|Twfv`V-*oWGJw5cA;V5kL(bhv*t$D6* z?>%&T5IOQLHga)nMqx2=Uf(OtGL0}>miT26pXViQN}s($g~@H<~PvgDwZN|y#-1d_4{7%zv%+=rRd_W1&@KZh46 znar@&R6geiZmBuS-0`JKpH=?{Jg)Wr-wicW2P@SxPe-+2hh}=0-flmPpXofESE)65 z*r2iF%mG;*#>5P{-jPWR&s5q)7|jr`NbZ$SOs-qE`AA$`ikQ2QaRroo@DVm_*w?eJ zf@91QlYT8&ZS$XBnEr^6kC=yFVfJh!hcfo-id#)&uiK{lx*QwO72x@>PQixc zXu7J+4@^J?FiQ6TSZB;^bxU!}ml?N_GbS=iF+``@LA`Jq`pF{fhbl2n4?@tW$z9Qf z%Vn+4{9J-%A)edZ-L1k7~i!kni5yraN0I?bxI)#h5q%~v30rt&mG(ZL#{>ngpRM@v7w zOQiBxG>nQ|c!tB0{&55Q8M_M9j!qx#tLtcXdVw4$*s~*52cI8Uoi(jnZP+@k(`_pk zMrtmscG?pT&ngf^8cXF|XbtPT)&*XK(KL+VuQcz}FqX0@f+uw5MHf5U?FpYpeHt=E z8K!5{J?uLsIgYtN~vhRJA)x>lmZb zYldGdz1h=D(CwBsZfSgHv)cnVfMA&Za-Sq09`>5xJyY{F!AIbWBmknPQ09>Qa8QuU zCt8obe$_<>pFkpEDT@2U$7~%jxx*u>!Vq3I~{xd zInh^G#|JdQ%p_5N}HLjFxY4JQCja<8GYoW#$G+Dkn`CF<{z%; zU5(8`>``6s)^#>0xEn@W35eVj9;b*_`|GPQ^vdMI$N|Ums>Gg(Zh4QEovq0q{rB(lyet2C+tPbb{9*(rtmZ}ibqzinR z~tKNTeq8(-ul(g~0?7rzH)#?Qm?x#a#nAx6;!^D$}31REo;bFhXq zx2|*~zH>o`tYdy!96aasuJ1w=WvIq(g}L1l# zC_8w1ixEf!@pW^7vtdP7KPoFXTCB>a=pBD+m{WlXZ+hK@O8nfAAzY~MSaOG0Rp(GF z8M%~vjBsDdY)UKnro1!IbJ?@QUG zXPI(xis9dccDHRwTlVdWdtEehe+;ZGjOdtZxW7L>y4$S`ZX!MT%17uJSxrFj_&S#) zNRYo$pBG5!$yXiezXnQ+ok#q}ta5V(DDwivcxzbN=h>v3=iqW5@Jv58lMg|}3D9Ub zutM4ZKkkI!O-QC^5LIyL=k_yV3 zGC5&<-mVI|`YTH|RMEsa;qf)fsBY^v7 zFy25-Oz~t;N5b4Jxg|9ric2yB zmIKx{9ltWnY!h!AUp)(8)tr7a27Jq=<=Ya#*#En7(3^JM{)_3$ey&I4t=RN*{-NC^ z1EV3FaC{6=goB1&T&Fj`&$!su_Ub}0TOX}{Z-d3rL2_-#^YFb(N^#@O#_KxrOk4wy zLc{CR9Mw|2JQ(jE{4P~#T}k@D%4I;hXE4z>%P;Me3$IOeG%7uFsQ~85auvwXgGndrr5v9H6`GP6m88B6EEW~v2#o&wB$SG&I~Pr6_1 zAX|zHt>(3xlX$u%jk$z@9fKIfEE?T3y%~(I>cyMAuU=Tld2|6iVron)pXWiEACGF? zX}hi|G*eKD&*jZ4iz>dM@5yuTRkBxZ_+2vbiuC?}M0C4-GT^P3856YL!wk%$Qg=&1 zxe{HLnh|*>$ z#`jt*ET<9AFz>J{g(C7}2M4L*(p>=TvxnH zqkC8V`P~CCacc6AtkL^`q!5VC!g(Slw>U$TCyUlfET{YCAs06|T9o5=%f2MP0LVWh;s#s15MEIHR>{~n2I zQn8+99Z!vZ0zV=LR&;lRu}J18uxx?#@*yCK~0R7=jASqL`^vvj0a}|C%=&d z9aZ&;CWG!D>)&ggA~&!pm#@6j3f{_O#gu$OH1UNi zedQbG@sNxuIKqSm+2a~SB4m!Uj;U6kuyJnHoLRVZx2{&f!+yMo&~alzex`2Juw&0a zytg0Wcdzio1sN&Cc)yWbdJ!+>`Gn%J%31CNPW+eP ziBqR~Vle8_{swdoh4$4lzAf*jS5gNuo@?HeZ0&=I*b6lg&?BOAgK~ifdZ5auSDS%wa7+;&KwQA3}JE<-}QpC!g5iR!2rrIfI z3`nKSHG$j-fMJX$BRZ!Gb8f6d!x*sj>P3VTDjgxzdXYdj`mWe>1G+N;ASUW>@ZNj0 zYPCvq!Jo9!dZrMDk<~qZ-s6=Iyb_3ise3dRT$?`Ybb6|wiI+PK z6=L{@akiLTOQ-I-(LbH^Ete{W_-`p0dez2NjPI@lYG;Ek=ohqgJ z#cg_~Ry#ylzu16&!<^3}xUKq?;OvQj@@eVPeDN#6Gcq^6JDGG2y%@mjOp)`}@5;W= zZ95-IY9^5fiYpGq{lG*aJfSd`{o=3?sOE1yXg^V?-%+~?Z)(zMWI1OD`-Y0fC4nc?@U05?O#`M-{`C;JfGwixKh z$P+r2<(6y?SKr%!mfxi(=RDw$UEbeA=oyf0_s8?y0WI-26|P%FijR}-a0I*u5BEZ5tIf60R;&W5Ro$I7{x?FK>=w&q(i#L5dj4WC8d#; zl#y6857H`(pD_eXH?#7SWmY$`zhVd#;kwJ4D%lL3o3J< zJI2~74Kejr@nb^y?0As#H(WtE%U~oJuqT#v1Bv+h@+SvUD6Ku5vF^t{14lvksx}}? z-09r64y9KCui2tQdBy0-<+qiTJp9(P*BC77V+#=y`5p91CT`R7GVKrfo()NhrT;e_ zf^|`Y2zRKVK{18e`+a+>I7nnW3xHRtoLZr8Nyl8uhfg+&2!DNI_Yq*JwW|He2oQ(Q zvX`Isr$lAP=|MkqXQ1&UPZ;S2o-2%;@!uxndn@BY&ve5{j`XW+mpQZHDqe-&&v-VtTXL)yikO z4n==of&=EZ9A;B=i_*Tcj>H33RZXik>7bLt}nIxR2;E~ z&PQ)zJ{CNvHE_eJZ;hHRyZ@nFQ5P_3@v5`^bgSf$aG~hJDU7@CLk}A)f5g3qe0?@mY&pC<&lvHeA`8beRb#-#VssL@gQQ$kp6ho|9oy+j zMyF|H#Q0PTTzg_=93J+ToEtGjDWWqJ%6Sk25s0gE-4dJk<)*#t&CDt1Hs`vpF7^2d zS8j8aS(oGE2#RC9PVu{ibtx|yVxlzMWzjZfGU^LOLgHc6S}_>+Lbd`gsbQ&|d498@ z9rTWa@BxQ%zdr#mIKVE6DcH>HKO|YbHd30;20J{GJy7-#eFyI5zK^{}{&(4%SqEV6 z;%Ft;9|im*hMsDJZW|>)XTi^htp0v)5F)XQH9Lkz+KRbgH(WSpU>2Y%%5TZL^fQ7x ztdbzku#C>x@$xQEpMH%Ri>pN*R%n8$tZl{Z_?b$}32H}653W!4QquGHm#+Dke(~&g zcJto_u>=2h;(Hjq6syh?%rDJvmsVn%hk0EwTVqo1rc-LI9Nf=^dDBWW%Iq}SX%uQ6 z`{Ehxd*CvhgSzVQg%Mw&!#h^Lrw(E%19v*s8?OCs!)>L)rNs(WlYjT_ynOvt^uzDl zJE>TwJImtU|C&7nLTL)63cA#Xc04tigT@=zCpC{PsIM#bdylhdZ*VOcc3lQaD?b%S z5<^m0Dk~&y-KFAJJlMcPkX0|psu{E^mqKlH@!s+2f$I8>S+_1+cDRWx@Sv+5CB;m~lVbL2M2sc}bvtY57ndC=0MGCsx`P2H&k zZAdi2d)GyFS|{|Ek=s_kv^4Ukb4WI}BXlqRKJbSw3}F6zY1!@r-&R?`XWJuoT#h1a z78pDDJ&GMn`jR-x43|AQ|9_#7elE4gH?s|s$Sgg=Y$%QkJH(y?w0k9?Ka18z+$b%E z4TC@&ZR$CRJ+TZ}#ypZl``KeX!&@=gErrbzps8#PfokSi4`wIUIXe4{z877|$;w4K zEEQ6ZBPJ~^#4+e1rj;~`$GiS0$>w>y*uY8OWQL1eguPwbSlOVF;9ppqIy|W8K1^&| zDducIy!64IoZh^0GMp*fazoyZ^beQk9}@h$0OXoQJMQfF0-+v6LdmAq8&pHw0(kXb z2arZXpY!Wr`uyvs>KeGnuRjI|6t!QKTQsL;@z&z21pn`&$@IJ4_8yHZNixwM7M7mH z^ATay0l%akUVjeFCfW-SH|A1UBjQFBc%Td(Z%aQ?w0F?A{e@cL#j*o? zyDZ{VF{8_V#$lnsA-JKfa$aSsgEUR~h1mGpu~4$1z@VJk35Z#=H2l-;_W69zgq;R6 z=6=4h9=2GnFEG%Y?*SqoAcU{P1@4X0>u)X=l^SBb7Q^#=$OcCf_n89RGfj50RDpum zkw*Yr*V0!m=sEX)_6B0knM(MFxoj*TznD1R0Rx(3e))~8`E)ytj-GnUk4vi{6CFj93zix$q zb&Df6M<%}Nh?JT;ZabpIn%Dtod0Fmp9i>W z{~!5uL}j*9G3@+gLC@x{z?gS)e$3xuJtJTUrvb3zrV-RH9U;6qDQbBJJVU;Ek2Pua zT!eC{pjoLcq{sEvjP~!y{a2eJBDUnY>vz8h_f*ZT9C1OzP0C z5m?dfyg9PjW=B=8L*;UZbV;;i%EMH-_!|ASkrdRdN32<`?dLTO|7|nk*?zKTsh1Au z)P2r4yaZdCowvWZAKR^FaKGuYlOqHje4N}5pB9I+18a&p(atWC$oiq<`d3_HLuD7C5yR;F^`m%d2{) zHiK4>#zQgENo#QgX6v`Oy%5FdP#cWYhR|2Txg$9?yx1JzAvh78n&d@vG3_|!yABdF z=bFDDt)q)M#q1!1PMKKHPj?%ti5zm#qL@{^_!s#$dik7x>++bO>AU?g&I)UeV1?+y z*1MAkKUlKmlEZZCy!XYRj`@ch*Dqy)rB3q}pfbvTU0c}j!T)6W6z3AtjRF>ERD9X8 z1U4^N`&ahpd#=;G4Y4*zrEpKD*YBlS zF5gYdtB`tf*@KP^PO+xtgoplO+*=JHnNsPuME7e;)_e4DmEs(}BrvUaid`T|&v};H zGG?ds>rgPIxm?dF4y)&oTP(W+GAov8=wZ~C_@aqSO%dDYG3_`9zZUXoa)nBgvjDd@ z^2(~26XS>y^SZ%dv+tfV(MPu?PRqy)t6jM$CAF!j>WzE3?qeX!7_&6>>BM-fY0)@R zOC(?5=V90S>}31dw!;Il-G7lEs5z0IIgjce$DXpFXgjaR%9|FqN736C&d%9zV&t~T zgSygy3`W=70VNGq`YP%p&10=Ao!$4vnE&&9@&B-_E~u=Hs;e<}p+n9Mlrn_bDMa#g zKfHV1^hd*huy^0mBc1J)&FGmZ;P&k@AX>GniMTAf`g#Ym$&$OR1s-ypqJcA5^w~CK zZjgnjr5+9rRrWY9vM zA?=RS(=8C=G#yl$MB+(q2ykXPvi;Il+PMPiDK1>N7{aNc3QQ4?jqy>((j1umMk@uB z?j^5dOX)!MQHn@`$qoI<;SEzs{3t!8oomdGQ|i`TfNEkcRJ=d~0#tPwev}DS%Tsf+ zX83sDXe3bUuNn6{OjEql$}7EF4>xD~>*$?uY%@xe_eaSC3Yiwpfd0gtIfF}en{Zn_ zc{R<#vYcGkld%i*hZr37;S`Vt+C#oqH>_aXc5H^+Q9DeJ!En)P1R|L4Iy72!at?@@%K%>+YFKl)ecH#xg0D9kYmp^nec zd5KGB4mn>4taOwww$ca?2BqtOQ;t`Et%rdftQ~5j+fN*$jH-`|o&(zfr}`1N8f+XL z1m)d`p6Odi@>OuxI+c0jv(H(903em2ZCl+tRV|$qs2vjUdc`p~6NiZ^IH{RdC5PKO zRQN4e`8uMdyEe6XNv6#04qCB%o6=tSHm^y`d-Rk z9oXCyM!$7RRzGIvg|PGVi`XgXUsMxR7lDmCbmV{}*M8?in@G0ta=`@C8h8Vq$z-PO≷!sBkgW~`dmOAH#o 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 Z1LL6VkX_UjMC_$|MN;;+ Date: Wed, 18 Apr 2018 01:21:57 +0800 Subject: [PATCH 881/993] Enable broadcast of Facebook bot messages (#4688) * enable broadcast of FB bot messages this should go together with PR https://github.com/home-assistant/home-assistant/pull/12459 it enables FB messenger broadcast ability to send messages to all people who interacted with the bot previously and have the chat open. * fixes as per request from reviewer. fixes as per request from reviewer. FB -> Facebook fixed indents. (not sure what 2x for each level was), but I fixed it as per sample above. * Update notify.facebook.markdown * :pencil2: Tiny fixes * Update notify.facebook.markdown * Update notify.facebook.markdown * :rocket: Trigger rebuild --- source/_components/notify.facebook.markdown | 24 ++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/source/_components/notify.facebook.markdown b/source/_components/notify.facebook.markdown index beb539c559..5b4e497947 100644 --- a/source/_components/notify.facebook.markdown +++ b/source/_components/notify.facebook.markdown @@ -50,7 +50,7 @@ automation: - '+919784516314' ``` -You can also send messages to users that do not have stored their phone number with Facebook, but this requires a bit more work. The Messenger platform uses page specific user IDs instead of a global user ID. You will need to enable a webhook for the "messages" event in Facebook's developer console. Once a user writes a message to a page, that webhook will then receive the user's page specific ID as part of the webhook's payload. Below is a simple PHP script that reacts to the message "get my id" and sends a reply containing the user's ID: +You can also send messages to users that do not have stored their phone number on Facebook, but this requires a bit more work. The Messenger platform uses page-specific user IDs instead of a global user ID. You will need to enable a webhook for the "messages" event in Facebook's developer console. Once a user writes a message to a page, that webhook will then receive the user's page specific ID as part of the webhook's payload. Below is a simple PHP script that reacts to the message "get my id" and sends a reply containing the user's ID: ```php Date: Tue, 17 Apr 2018 19:39:59 +0200 Subject: [PATCH 882/993] Adds documentation for Kodi discovery (#5144) * describe discovery * :pencil2: Language tweaks --- source/_components/media_player.kodi.markdown | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/source/_components/media_player.kodi.markdown b/source/_components/media_player.kodi.markdown index a59d19fe34..83689d4c1a 100644 --- a/source/_components/media_player.kodi.markdown +++ b/source/_components/media_player.kodi.markdown @@ -17,7 +17,9 @@ ha_iot_class: "Local Push" The `kodi` platform allows you to control a [Kodi](http://kodi.tv/) multimedia system from Home Assistant. -To add Kodi to your installation, add the following to your `configuration.yaml` file: +The preferred way to set up the Kodi platform is by enabling the [discovery component](https://www.home-assistant.io/components/discovery/) which requires enabled [web interface](https://kodi.wiki/view/Web_interface) on your Kodi installation. + +In case the discovery does not work, or you need specific configuration variables, you can add the following to your `configuration.yaml` file: ```yaml # Example configuration.yaml entry From 56f0a1a3c367fb955c271c679b68f1a026efbc97 Mon Sep 17 00:00:00 2001 From: Tod Schmidt Date: Tue, 17 Apr 2018 13:40:16 -0400 Subject: [PATCH 883/993] Added REST API for tts_get_url (#5173) * Added REST API for tts_get_url * :pencil2: Language tweaks --- source/_components/tts.markdown | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/source/_components/tts.markdown b/source/_components/tts.markdown index b1d1899135..5fc0d8de47 100644 --- a/source/_components/tts.markdown +++ b/source/_components/tts.markdown @@ -88,3 +88,33 @@ data_template: ## {% linkable_title Cache %} The component has two caches. Both caches can be controlled with the `cache` option in the platform configuration or the service call `say`. A long time cache will be located on the file system. The in-memory cache for fast responses to media players will be auto-cleaned after a short period. + +## {% linkable_title REST Api %} + +#### {% linkable_title POST /api/tts_get_url %} + +Returns an URL to the generated TTS file. Platform and message are required. + +```json +{ + "plaform": "amazon_polly", + "message": "I am speaking now" +} +``` + +The return code is 200 if the file is generated. The message body will contain a JSON object with the URL. + +```json +{ + "url": "http://127.0.0.1:8123/api/tts_proxy/265944c108cbb00b2a621be5930513e03a0bb2cd_en_-_demo.mp3" +} +``` + +Sample `curl` command: + +```bash +$ curl -X POST -H "x-ha-access: YOUR_PASSWORD" \ + -H "Content-Type: application/json" \ + -d '{"message": "I am speaking now", "platform": "amazon_polly"}' \ + http://localhost:8123/api/tts_get_url +``` From b794665e79cf7b9fb2d03ca879743ef39b899047 Mon Sep 17 00:00:00 2001 From: Jaydev Shiroya Date: Tue, 17 Apr 2018 23:10:53 +0530 Subject: [PATCH 884/993] Update development_validation.markdown (#5201) Spelling Mistake --- source/developers/development_validation.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/developers/development_validation.markdown b/source/developers/development_validation.markdown index b629dcbe64..30b3dc77a8 100644 --- a/source/developers/development_validation.markdown +++ b/source/developers/development_validation.markdown @@ -21,7 +21,7 @@ Besides [voluptuous](https://pypi.python.org/pypi/voluptuous) default types, man - Time: `time`, `time_zone` - Misc: `template`, `slug`, `temperature_unit`, `latitude`, `longitude`, `isfile`, `sun_event`, `ensure_list`, `port`, `url`, and `icon` -To validate plaforms using [MQTT](/components/mqtt/), `valid_subscribe_topic` and `valid_publish_topic` are available. +To validate platforms using [MQTT](/components/mqtt/), `valid_subscribe_topic` and `valid_publish_topic` are available. Some things to keep in mind: From 26a9b298544e0d6c9398c2d40cfdaef0d806667c Mon Sep 17 00:00:00 2001 From: jcrowegitHu8 Date: Tue, 17 Apr 2018 12:54:29 -0500 Subject: [PATCH 885/993] Update media_player.samsungtv.markdown (#5202) --- 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 53954f6693..d944b2b3a7 100644 --- a/source/_components/media_player.samsungtv.markdown +++ b/source/_components/media_player.samsungtv.markdown @@ -50,6 +50,7 @@ Currently known supported models: - EH5600 - F6400AF - F6400 +- F8000BF - D6505 - D6300SF - U6000 (port must be set to 8001) From 8f52412ebe00d25b3d024d6e69dc43d37b573f12 Mon Sep 17 00:00:00 2001 From: stephanerosi Date: Tue, 17 Apr 2018 19:55:51 +0200 Subject: [PATCH 886/993] Add examples on changing channel through play_media service (#5200) * Add examples on changing channel service As per following merge request https://github.com/home-assistant/home-assistant/pull/13934 * :pencil2: Language tweak --- .../_components/media_player.webostv.markdown | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/source/_components/media_player.webostv.markdown b/source/_components/media_player.webostv.markdown index 707ef55a90..0b1823db00 100644 --- a/source/_components/media_player.webostv.markdown +++ b/source/_components/media_player.webostv.markdown @@ -96,3 +96,27 @@ Any other [actions](/docs/automation/action/) to power on the device can be conf *Sources* To obtain complete list of available sources currently configured on the TV, once the webOS TV is configured and linked, while its powered on head to the **Developer Tools** > **States**, find your `media_player.` and use the sources listed in `source_list:` remembering to split them per line into your `sources:` configuration. + +### {% linkable_title Change channel through play_media service %} + +The `play_media` service can be used in a script to switch to the specified tv channel. +It selects the best matching cannel according to the `media_content_id` parameter: + 1. Channel number *(i.e. '1' or '6')* + 2. Exact channel name *(i.e. 'France 2' or 'CNN')* + 3. Substring in channel name *(i.e. 'BFM' in 'BFM TV')* + +```yaml +# Example action entry in script to switch to channel number 1 +service: media_player.play_media +data: + entity_id: media_player.lg_webos_smart_tv + media_content_id: 1 + media_content_type: "channel" + +# Example action entry in script to switch to channel including 'TF1' in its name +service: media_player.play_media +data: + entity_id: media_player.lg_webos_smart_tv + media_content_id: "TF1" + media_content_type: "channel" +``` From b2104a977069fa1368b9af289571109252b909e8 Mon Sep 17 00:00:00 2001 From: Nick Whyte Date: Wed, 18 Apr 2018 22:40:53 +1000 Subject: [PATCH 887/993] Doc for covers that only support `open_cover` and `close_cover` HomeKit (#5203) * Documentation for covers that only support `open_cover` and `close_cover` --- source/_components/homekit.markdown | 2 ++ 1 file changed, 2 insertions(+) diff --git a/source/_components/homekit.markdown b/source/_components/homekit.markdown index 3b9fb899d5..0d04e5cb23 100644 --- a/source/_components/homekit.markdown +++ b/source/_components/homekit.markdown @@ -198,6 +198,8 @@ The following components are currently supported: | climate | Thermostat | All climate devices. | | cover | GarageDoorOpener | All covers that support `open` and `close` and have `garage` as their `device_class`. | | cover | WindowCovering | All covers that support `set_cover_position`. | +| cover | WindowCovering | All covers that support `open_cover` and `close_cover` through value mapping. (`open` -> `>=50`; `close` -> `<50`) | +| cover | WindowCovering | All covers that support `open_cover`, `stop_cover` and `close_cover` through value mapping. (`open` -> `>70`; `close` -> `<30`; `stop` -> every value in between) | | light | Light | Support for `on / off`, `brightness` and `rgb_color`. | | lock | DoorLock | Support for `lock / unlock`. | | sensor | TemperatureSensor | All sensors that have `Celsius` and `Fahrenheit` as their `unit_of_measurement` or `temperature` as their `device_class`. | From 444030d09fa7d505fbc2057868c070e2b5234df5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maximilian=20Fr=C3=BCh?= Date: Wed, 18 Apr 2018 19:35:03 +0200 Subject: [PATCH 888/993] Document the `headers` configuration parameter of the RESTful switch (#5196) * Document the `headers` configuration parameter of the RESTful switch * Fix indent --- source/_components/switch.rest.markdown | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/source/_components/switch.rest.markdown b/source/_components/switch.rest.markdown index db7b6e6e98..79388ff24b 100644 --- a/source/_components/switch.rest.markdown +++ b/source/_components/switch.rest.markdown @@ -66,6 +66,10 @@ password: description: The password for accessing the REST endpoint. required: false type: string +headers: + description: The headers for the request. + required: false + type: list, string {% endconfiguration %}

    @@ -82,13 +86,17 @@ This example shows a switch that uses a [template](/topics/templating/) to allow {"is_active": "true"} ``` +{% raw %} ```yaml switch: - platform: rest resource: http://IP_ADDRESS/led_endpoint body_on: '{"active": "true"}' body_off: '{"active": "false"}' - is_on_template: '{% raw %}{{value_json.is_active}}{% endraw %}' + is_on_template: '{{value_json.is_active}}' + headers: + Content-Type: application/json ``` +{% endraw %} `body_on` and `body_off` can also depend on the state of the system. For example, to enable a remote temperature sensor tracking on a radio thermostat, one has to send the current value of the remote temperature sensor. This can be achieved by using the template `{% raw %}'{"rem_temp":{{states.sensor.bedroom_temp.state}}}'{% endraw %}`. From 12906f47afdb7954f82c2700330d6ab5522cc505 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Wed, 18 Apr 2018 22:30:17 -0400 Subject: [PATCH 889/993] Set published:true for Google Assistant docs --- source/cloud/google_assistant.markdown | 5 ----- 1 file changed, 5 deletions(-) diff --git a/source/cloud/google_assistant.markdown b/source/cloud/google_assistant.markdown index 155b2356a7..2e8661479c 100644 --- a/source/cloud/google_assistant.markdown +++ b/source/cloud/google_assistant.markdown @@ -7,7 +7,6 @@ sidebar: true comments: false sharing: true footer: true -published: false --- The Google Assistant integration allows users to control the entities via the Home Assistant Smart Home skill for Google Assistant. This means that you can say things like "Ok Google, turn on the kitchen light" to control your local Home Assistant. @@ -86,9 +85,5 @@ google_actions: description: Aliases that can also be used to refer to this entity required: false type: list - type: - description: Override the type of the entity in Google Assistant. [List of available types](https://developers.google.com/actions/smarthome/guides/) - required: false - type: string {% endconfiguration %} From 557867f26e44fdadc94f2eab92bedec465827f28 Mon Sep 17 00:00:00 2001 From: Sebastian Muszynski Date: Thu, 19 Apr 2018 09:11:52 +0200 Subject: [PATCH 890/993] Support for multiple MAX!Cube LAN gateways (#5078) --- source/_components/maxcube.markdown | 32 +++++++++++++++++++++++++---- 1 file changed, 28 insertions(+), 4 deletions(-) diff --git a/source/_components/maxcube.markdown b/source/_components/maxcube.markdown index c9645e9fc5..69713a6469 100644 --- a/source/_components/maxcube.markdown +++ b/source/_components/maxcube.markdown @@ -25,13 +25,37 @@ Supported Devices: - MAX! Window Sensor (tested) - MAX! Wall Thermostat (tested) +### {% linkable_title One Gateway %} + A `maxcube` section must be present in the `configuration.yaml` file and contain the following options as required: ```yaml # Example configuration.yaml entry maxcube: - host: 192.168.0.20 + gateways: + - host: 192.168.0.20 ``` -Configuration variables: -- **host** (*Required*): The IP address of the eQ-3 MAX! Cube to use. -- **port** (*Optional*): The UDP port number. Defaults to `62910`. + +### {% linkable_title Multiple Gateways %} + +```yaml +# Example configuration.yaml entry +maxcube: + gateways: + - host: 192.168.0.20 + port: 62910 + - host: 192.168.0.21 + port: 62910 +``` + +{% configuration %} + host: + description: The IP address of the eQ-3 MAX! Cube to use. + required: true + type: string + port: + description: The UDP port number. + required: false + type: int + default: 62910 +{% endconfiguration %} From 7fd2f7da460ab5d3380c2e9b9393d44f3474de0f Mon Sep 17 00:00:00 2001 From: koolsb <14332595+koolsb@users.noreply.github.com> Date: Thu, 19 Apr 2018 04:32:07 -0500 Subject: [PATCH 891/993] Update onkyo media player (#5058) --- .../_components/media_player.onkyo.markdown | 23 +++++++++++++++---- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/source/_components/media_player.onkyo.markdown b/source/_components/media_player.onkyo.markdown index ca277f7706..0c6dc4d2d3 100644 --- a/source/_components/media_player.onkyo.markdown +++ b/source/_components/media_player.onkyo.markdown @@ -28,11 +28,24 @@ media_player: pc: 'HTPC' ``` -Configuration variables: - -- **host** (*Optional*): IP address of the device. Example:`192.168.1.2`. If not specified, the platform will load any discovered receivers. -- **name** (*Required if host is specified*): Name of the device. -- **sources** (*Optional*): A list of mappings from source to source name. Valid sources can be found below. A default list will be used if no source mapping is specified. +{% configuration %} +host: + description: IP address of the device. Example:`192.168.1.2`. If not specified, the platform will load any discovered receivers. + required: false + type: string +name: + description: Name of the device. (*Required if host is specified*) + required: false + type: string +sources: + description: A list of mappings from source to source name. Valid sources can be found below. A default list will be used if no source mapping is specified. + required: false + type: list +zone2: + description: Enables control for the receiver's second zone. + required: false + type: bool +{% endconfiguration %} List of source names: From 574e2213ba439fa360163d60c777a6d7a1c520d9 Mon Sep 17 00:00:00 2001 From: koolsb <14332595+koolsb@users.noreply.github.com> Date: Thu, 19 Apr 2018 04:35:48 -0500 Subject: [PATCH 892/993] Add blackbird media player component (#5056) --- .../media_player.blackbird.markdown | 70 +++++++++++++++++++ 1 file changed, 70 insertions(+) create mode 100644 source/_components/media_player.blackbird.markdown diff --git a/source/_components/media_player.blackbird.markdown b/source/_components/media_player.blackbird.markdown new file mode 100644 index 0000000000..99873f1cc0 --- /dev/null +++ b/source/_components/media_player.blackbird.markdown @@ -0,0 +1,70 @@ +--- +layout: page +title: "Blackbird 8x8 HDMI Matrix Switch" +description: "Instructions on how to integrate Monoprice Blackbird 4k 8x8 HDBaseT Matrix Switch into Home Assistant." +date: 2018-03-29 16:35 +sidebar: true +comments: false +sharing: true +footer: true +logo: monoprice.svg +ha_category: Media Player +ha_release: 0.68 +ha_iot_class: "Local Polling" +--- + +The `blackbird` platform allows you to control [Monoprice Blackbird Matrix Switch](https://www.monoprice.com/product?p_id=21819) using a serial connection. + +To add a Blackbird device to your installation, add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +media_player: + - platform: blackbird + type: serial + port: /dev/ttyUSB0 + zones: + 1: + name: Living Room + sources: + 3: + name: BluRay +``` + +{% configuration %} +type: + description: The type of device connection - serial or socket + required: true + type: string +port: + description: The serial port to which Blackbird matrix switch is connected. Either port or host must be defined. + required: optional + type: string +host: + description: The IP address of the Blackbird matrix switch. Either port or host must be defined. + required: optional + type: string +zones: + description: This is the list of zones available. Valid zones are 1,2,3,4,5,6,7,8. Each zone must have a name assigned to it. + required: true + type: int + keys: + name: + description: The name of the zone. +sources: + description: The list of sources available. Valid source numbers are 1,2,3,4,5,6,7,8. Each source number corresponds to the input number on the Blackbird matrix switch. Similar to zones, each source must have a name assigned to it. + required: true + type: int + keys: + name: + description: The name of the source. +{% endconfiguration%} + +### {% linkable_title Service `BLACKBIRD_SETALLZONES` %} + +Set all zones to the same input source. This service allows you to immediately synchronize all the TVs in your home. Regardless of `entity_id` provided, all zones will be updated. + +| Service data attribute | Optional | Description | +| ---------------------- | -------- | ----------- | +| `entity_id` | yes | String that points at an `entity_id` of a zone. +| `source` | no | String of source name to activate. From 945fb9b69e0336d39cd5fe97771a2bee7ef958e3 Mon Sep 17 00:00:00 2001 From: Viorel Stirbu Date: Thu, 19 Apr 2018 12:38:02 +0300 Subject: [PATCH 893/993] Add docs for Sensirion SHT31 sensor (#4848) --- source/_components/sensor.sht31.markdown | 52 +++++++++++++++++++ source/images/supported_brands/sensirion.png | Bin 0 -> 6578 bytes 2 files changed, 52 insertions(+) create mode 100644 source/_components/sensor.sht31.markdown create mode 100644 source/images/supported_brands/sensirion.png diff --git a/source/_components/sensor.sht31.markdown b/source/_components/sensor.sht31.markdown new file mode 100644 index 0000000000..73660bbbdc --- /dev/null +++ b/source/_components/sensor.sht31.markdown @@ -0,0 +1,52 @@ +--- +layout: page +title: "Sensirion SHT31 Sensor" +description: "Instructions on how to integrate SHT31 sensors within Home Assistant." +date: 2018-03-06 19:15 +sidebar: true +comments: false +sharing: true +footer: true +ha_category: DIY +ha_release: 0.68 +logo: sensirion.png +ha_iot_class: "Local Polling" +--- + +The `sht31` sensor platform allows you to get the current temperature and humidity from a Sensirion SHT31 device. + +To use your SHT31 sensor in your installation, add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +sensor: + platform: sht31 + name: Bedroom + i2c_address: 0x44 + monitored_conditions: + - temperature + - humidity +``` + +{% configuration %} + name: + description: The name of the sensor. Temperature and Humidity will be added to the name for the sensor name. + required: false + default: SHT31 + type: string + i2c_address: + description: I2C address of the sensor. + required: false + default: "`0x44`" + type: int + monitored_conditions: + description: Conditions to monitor. + required: false + default: All conditions + type: list + keys: + temperature: + description: The current temperature of the SHT31. + humidity: + description: The current humidity of the SHT31. +{% endconfiguration %} diff --git a/source/images/supported_brands/sensirion.png b/source/images/supported_brands/sensirion.png new file mode 100644 index 0000000000000000000000000000000000000000..4c0576cacdaad8b024683c2433ee5216762a8908 GIT binary patch literal 6578 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 Date: Thu, 19 Apr 2018 10:00:24 -0700 Subject: [PATCH 894/993] Update hass.markdown (#5193) --- source/_docs/tools/hass.markdown | 1 + 1 file changed, 1 insertion(+) diff --git a/source/_docs/tools/hass.markdown b/source/_docs/tools/hass.markdown index 3ba0896f35..73e0bd68cd 100644 --- a/source/_docs/tools/hass.markdown +++ b/source/_docs/tools/hass.markdown @@ -39,6 +39,7 @@ optional arguments: specified days --log-file LOG_FILE Log file to write to. If not set, CONFIG/home- assistant.log is used + --log-no-color Disable color logs --runner On restart exit with code 100 --script ... Run one of the embedded scripts --daemon Run Home Assistant as daemon From b8627d6285213f43ab45498319721407432947bc Mon Sep 17 00:00:00 2001 From: Mark Perdue Date: Fri, 20 Apr 2018 08:16:37 -0400 Subject: [PATCH 895/993] Update attributes table to reflect closed PR (#5206) The PR https://github.com/home-assistant/home-assistant/pull/13816 has been withdrawn since it exposed static attributes which are not supported. Updating wiki to reflect current state --- source/_components/switch.vesync.markdown | 4 ---- 1 file changed, 4 deletions(-) diff --git a/source/_components/switch.vesync.markdown b/source/_components/switch.vesync.markdown index 83041ca78b..b02f476e93 100644 --- a/source/_components/switch.vesync.markdown +++ b/source/_components/switch.vesync.markdown @@ -45,7 +45,3 @@ VeSync switches will expose the following details. | ------------------- | ------------------------------------------------------------------- | --------------- | | `current_power_w` | The present power consumption of the switch in watts. | 100 | | `today_energy_kwh` | The kilowatt hours used by the switch during the previous 24 hours. | 0.12 | -| `connection_status` | The connection status of the switch. | online | -| `connection_type` | The connection type of the switch. | wifi | -| `device_type` | The device type of the switch. | wifi-switch-1.3 | -| `model` | The model of the switch. | wifi-switch | From 952aaf8aa0389e5bbfa540dd0f86a27484695c19 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Fri, 20 Apr 2018 14:36:47 -0400 Subject: [PATCH 896/993] Add release blog post --- source/_posts/2018-04-27-release-68.markdown | 489 +++++++++++++++++++ 1 file changed, 489 insertions(+) create mode 100644 source/_posts/2018-04-27-release-68.markdown diff --git a/source/_posts/2018-04-27-release-68.markdown b/source/_posts/2018-04-27-release-68.markdown new file mode 100644 index 0000000000..788e068c7e --- /dev/null +++ b/source/_posts/2018-04-27-release-68.markdown @@ -0,0 +1,489 @@ +--- +layout: post +title: "0.68: UPDATE DATE" +description: "UPDATE DATE" +date: 2018-04-20 00:01:00 +date_formatted: "April 27, 2018" +author: Paulus Schoutsen +author_twitter: balloob +comments: true +categories: Release-Notes +og_image: /images/blog/2018-04-0.68/components.png +--- + + + +Highlights: + +- Ability to _control_ HomeKit +- Eufy bulbs + +## New Platforms + +- Add support for Eufy bulbs and switches ([@mjg59] - [#13773]) ([eufy docs]) ([light.eufy docs]) ([switch.eufy docs]) (new-platform) +- Add support for controlling homekit lights and switches ([@mjg59] - [#13346]) ([homekit_controller docs]) ([light.homekit_controller docs]) (new-platform) +- Adding USCIS component ([@meauxt] - [#13764]) ([sensor.uscis docs]) (new-platform) +- Add support for new platform: climate.modbus ([@Kirchoff] - [#12224]) ([climate.modbus docs]) (new-platform) +- Add AVM fritzbox smarthome component ([@hthiery] - [#10688]) ([fritzbox docs]) ([climate.fritzbox docs]) ([switch.fritzbox docs]) (new-platform) +- Adds SigFox sensor ([@robmarkcole] - [#13731]) ([sensor.sigfox docs]) (new-platform) +- Add blackbird media player component ([@koolsb] - [#13549]) ([media_player.blackbird docs]) (new-platform) +- Add support for Sensirion SHT31 temperature/humidity sensor ([@viorels] - [#12952]) ([sensor.sht31 docs]) (new-platform) +- Upgraded miflora library to version 0.4.0 ([@ChristianKuehnel] - [#14005]) ([sensor.lmsensor docs]) ([sensor.miflora docs]) (new-platform) + +## New Features + +- Support binary_sensor and device_tracker in HomeKit ([@Yonsm] - [#13735]) ([homekit docs]) (new-feature) +- Add Homekit locks support ([@philk] - [#13625]) ([homekit docs]) (new-feature) +- Support CO2/PM2.5/Light sensors in HomeKit ([@Yonsm] - [#13804]) ([homekit docs]) (new-feature) +- Support Garage Doors in HomeKit ([@marthoc] - [#13796]) ([homekit docs]) (new-feature) +- Support basic covers with open/close/stop services HomeKit ([@nickw444] - [#13819]) ([homekit docs]) (new-feature) + +## {% linkable_title If you need help... %} + +...don't hesitate to use our very active [forums](https://community.home-assistant.io/) or join us for a little [chat](https://discord.gg/c5DvZ4e). The release notes have comments enabled but it's preferred if you use the former communication channels. Thanks. + +## {% linkable_title Reporting Issues %} + +Experiencing issues introduced by this release? Please report them in our [issue tracker](https://github.com/home-assistant/home-assistant/issues). Make sure to fill in all fields of the issue template. + + +## Breaking Changes + +- Support for multiple MAX!Cube LAN gateways added ([@syssi] - [#13517]) ([maxcube docs]) ([binary_sensor.maxcube docs]) ([climate.maxcube docs]) (breaking change) +- Disable ebox requirement ([@balloob] - [#14003]) ([sensor.ebox docs]) (breaking change) + +## Beta Fixes + +- Fix Gogogate2 'available' attribute ([@dlbroadfoot] - [#13728]) (beta fix) +- Fix so it is possible to ignore discovered config entry handlers ([@Kane610] - [#13741]) (beta fix) +- Prevent vesync doing I/O in event loop ([@balloob] - [#13862]) ([switch.vesync docs]) (beta fix) +- Missing property decorator added ([@syssi] - [#13889]) ([fan.xiaomi_miio docs]) (beta fix) +- Fix race condition for component loaded before listening ([@balloob] - [#13887]) ([config docs]) (beta fix) +- Fix #13846 Double underscore in bluetooth address ([@aav7fl] - [#13884]) ([device_tracker docs]) (beta fix) +- Import operation modes from air humidifier ([@syssi] - [#13908]) ([fan.xiaomi_miio docs]) (beta fix) +- Update pyhydroquebec to 2.2.2 ([@titilambert] - [#13946]) ([sensor.hydroquebec docs]) (beta fix) +- Upgrade somecomfort to 0.5.2 ([@balloob] - [#13940]) ([climate.honeywell docs]) (beta fix) +- Fix call to parent broadlink switch ([@Danielhiversen] - [#13906]) ([switch.broadlink docs]) (beta fix) +- Fix Gogogate2 'available' attribute ([@dlbroadfoot] - [#13728]) (beta fix) +- Fix so it is possible to ignore discovered config entry handlers ([@Kane610] - [#13741]) (beta fix) +- Prevent vesync doing I/O in event loop ([@balloob] - [#13862]) ([switch.vesync docs]) (beta fix) +- Fix #13846 Double underscore in bluetooth address ([@aav7fl] - [#13884]) ([device_tracker docs]) (beta fix) +- Fix race condition for component loaded before listening ([@balloob] - [#13887]) ([config docs]) (beta fix) +- Missing property decorator added ([@syssi] - [#13889]) ([fan.xiaomi_miio docs]) (beta fix) +- Fix call to parent broadlink switch ([@Danielhiversen] - [#13906]) ([switch.broadlink docs]) (beta fix) +- Import operation modes from air humidifier ([@syssi] - [#13908]) ([fan.xiaomi_miio docs]) (beta fix) +- Upgrade somecomfort to 0.5.2 ([@balloob] - [#13940]) ([climate.honeywell docs]) (beta fix) +- Update pyhydroquebec to 2.2.2 ([@titilambert] - [#13946]) ([sensor.hydroquebec docs]) (beta fix) + +## All changes + +- Update Homekit to 1.1.9 ([@cdce8p] - [#13716]) ([homekit docs]) +- Update docstrings ([@fabaff] - [#13720]) ([ihc docs]) ([cover.opengarage docs]) ([cover.tahoma docs]) ([light.aurora docs]) ([sensor.trafikverket_weatherstation docs]) +- Add option to ignore availability in google calendar events ([@cgtobi] - [#13714]) ([google docs]) ([calendar.google docs]) +- Allow use of date_string in service call ([@Juggels] - [#13256]) ([calendar.todoist docs]) +- Add timeout / debounce (for brightness and others) ([@cdce8p] - [#13534]) ([homekit docs]) +- added support for smappee water sensors ([@hmn] - [#12831]) ([smappee docs]) ([sensor.smappee docs]) +- Initialise filter_sensor with historical values ([@dgomes] - [#13075]) ([sensor.filter docs]) +- Fix Gogogate2 'available' attribute ([@dlbroadfoot] - [#13728]) (beta fix) +- Bluesound bugfix status 595 and await ([@thrawnarn] - [#13727]) ([media_player.bluesound docs]) +- Upgrade aiohttp to 3.1.2 ([@fabaff] - [#13732]) +- Upgrade sqlalchemy to 1.2.6 ([@fabaff] - [#13733]) ([sensor.sql docs]) +- Brightness conversion for Abode dimmers ([@shred86] - [#13711]) ([light.abode docs]) +- Update CODEOWNERS (sensor.filter, sensor.upnp) ([@dgomes] - [#13736]) +- Reset permission ([@fabaff] - [#13743]) ([light.abode docs]) +- Throw an error when invalid device_mode is given ([@dangyuluo] - [#13739]) +- Fix so it is possible to ignore discovered config entry handlers ([@Kane610] - [#13741]) (beta fix) +- Upgrade netdisco to 1.3.1 ([@fabaff] - [#13744]) +- Add MQTT Sensor unique_id ([@OttoWinter] - [#13318]) ([sensor.mqtt docs]) +- Prepare entity component for config entries ([@balloob] - [#13730]) +- Check valid file on get_size ([@robmarkcole] - [#13756]) ([sensor.folder docs]) +- Qwikswitch sensors ([@kellerza] - [#13622]) ([sensor.qwikswitch docs]) +- Device type mapping introduced to avoid breaking change ([@syssi] - [#13765]) ([light.yeelight docs]) +- Only flag media position as updated when it really has ([@molobrakos] - [#13737]) ([media_player.squeezebox docs]) +- Support binary_sensor and device_tracker in HomeKit ([@Yonsm] - [#13735]) ([homekit docs]) (new-feature) +- Use config entry to setup platforms ([@balloob] - [#13752]) ([hue docs]) ([light docs]) ([light.hue docs]) +- Add Homekit locks support ([@philk] - [#13625]) ([homekit docs]) (new-feature) +- Snips sounds ([@tschmidty69] - [#13746]) ([snips docs]) +- Add missing DISCHRG state ([@swilson] - [#13787]) ([sensor.nut docs]) +- Improved upgradeability HomeKit security_systems ([@cdce8p] - [#13783]) ([homekit docs]) +- Qwikswitch Entity Register ([@kellerza] - [#13791]) ([qwikswitch docs]) ([sensor.qwikswitch docs]) +- Updated beacontools to 1.2.3 ([@citruz] - [#13792]) ([sensor.eddystone_temperature docs]) +- script/lazytox: Ensure Flake8 passes for tests/ ([@kellerza] - [#13794]) +- Fix bad metrics format for short metrics. ([@michaelkuty] - [#13778]) ([prometheus docs]) +- Update bellows to 0.5.2 ([@rcloran] - [#13800]) ([zha docs]) +- device_tracker.ubus: Handle devices not running DHCP ([@tobygray] - [#13579]) ([device_tracker docs]) +- Update yweather.py ([@wiuwiu] - [#13802]) ([weather.yweather docs]) +- Tibber lib update ([@Danielhiversen] - [#13811]) ([sensor.tibber docs]) +- Update pyhomematic to 0.1.41 ([@danielperna84] - [#13814]) ([homematic docs]) +- Add support for Eufy bulbs and switches ([@mjg59] - [#13773]) ([eufy docs]) ([light.eufy docs]) ([switch.eufy docs]) (new-platform) +- Homekit refactor ([@cdce8p] - [#13707]) ([homekit docs]) +- HomeKit type_cover fix ([@cdce8p] - [#13832]) ([homekit docs]) +- Allow platform unloading ([@balloob] - [#13784]) ([hue docs]) ([light docs]) +- Support CO2/PM2.5/Light sensors in HomeKit ([@Yonsm] - [#13804]) ([homekit docs]) (new-feature) +- Clicksend: Added support for multiple recipients ([@xTCx] - [#13812]) ([notify docs]) +- Support Garage Doors in HomeKit ([@marthoc] - [#13796]) ([homekit docs]) (new-feature) +- Abode better events ([@MisterWil] - [#13809]) ([abode docs]) +- UPnP async ([@dgomes] - [#13666]) ([upnp docs]) ([sensor.upnp docs]) +- Update example (fixes #13834) ([@fabaff] - [#13839]) +- Add support for deCONZ daylight sensor ([@marthoc] - [#13479]) ([deconz docs]) ([sensor.deconz docs]) +- initialize queue before filtering ([@dgomes] - [#13842]) ([sensor.filter docs]) +- Extract config flow to own module ([@balloob] - [#13840]) ([config docs]) ([deconz docs]) ([hue docs]) +- Add support for controlling homekit lights and switches ([@mjg59] - [#13346]) ([homekit_controller docs]) ([light.homekit_controller docs]) (new-platform) +- bump python-ecobee-api version to 0.0.18 ([@geekofweek] - [#13854]) ([ecobee docs]) +- Adding USCIS component ([@meauxt] - [#13764]) ([sensor.uscis docs]) (new-platform) +- Avoid unnecessary cast state updates ([@dersger] - [#13770]) ([media_player.cast docs]) +- Prevent vesync doing I/O in event loop ([@balloob] - [#13862]) ([switch.vesync docs]) (beta fix) +- Update yweather.py ([@TheCellMC] - [#13851]) ([weather.yweather docs]) +- add support for Kodi discovery ([@escoand] - [#13790]) ([media_player.kodi docs]) +- Further untangle data entry flow ([@balloob] - [#13855]) +- Missing property decorator added ([@syssi] - [#13889]) ([fan.xiaomi_miio docs]) (beta fix) +- Fix race condition for component loaded before listening ([@balloob] - [#13887]) ([config docs]) (beta fix) +- Added snips service descriptions ([@tschmidty69] - [#13883]) +- Add unique_id for BMW ConnectedDrive ([@gerard33] - [#13888]) ([binary_sensor.bmw_connected_drive docs]) ([lock.bmw_connected_drive docs]) ([sensor.bmw_connected_drive docs]) +- Revert "Update yweather.py" ([@pvizeli] - [#13900]) ([weather.yweather docs]) +- Eufy colour bulb updates ([@mjg59] - [#13895]) ([eufy docs]) ([light.eufy docs]) +- Fix #13846 Double underscore in bluetooth address ([@aav7fl] - [#13884]) ([device_tracker docs]) (beta fix) +- Import operation modes from air humidifier ([@syssi] - [#13908]) ([fan.xiaomi_miio docs]) (beta fix) +- Fritzbox netmonitor name ([@escoand] - [#13903]) ([sensor.fritzbox_netmonitor docs]) +- Restore typeerror check for units sans energy tracking ([@andersonshatch] - [#13824]) ([switch.edimax docs]) +- Add more math functions to templates ([@Shou] - [#13915]) +- Upgrade pyqwikswitch to 0.71 ([@kellerza] - [#13920]) ([qwikswitch docs]) +- Add extra attributes for device scanner, Nmap and Unifi (IP, SSID, etc.) ([@stephanerosi] - [#13673]) ([device_tracker docs]) +- Fixed Capsman data not being used ([@Marco98] - [#13917]) ([device_tracker docs]) +- Broadlink Sensor - switch to connection-less mode ([@Paxy] - [#13761]) ([sensor.broadlink docs]) +- Add support for new platform: climate.modbus ([@Kirchoff] - [#12224]) ([climate.modbus docs]) (new-platform) +- Hive R3 update ([@KJonline] - [#13357]) ([hive docs]) ([binary_sensor.hive docs]) ([climate.hive docs]) ([light.hive docs]) ([sensor.hive docs]) ([switch.hive docs]) +- Updated foobot_async package version ([@reefab] - [#13942]) ([sensor.foobot docs]) +- Update pyhydroquebec to 2.2.2 ([@titilambert] - [#13946]) ([sensor.hydroquebec docs]) (beta fix) +- Upgrade alpha_vantage to 2.0.0 ([@fabaff] - [#13943]) ([sensor.alpha_vantage docs]) +- Cleanup on exit ([@dgomes] - [#13918]) ([media_player.mediaroom docs]) +- Upgrade somecomfort to 0.5.2 ([@balloob] - [#13940]) ([climate.honeywell docs]) (beta fix) +- Add data entry flow helper ([@balloob] - [#13935]) ([config docs]) +- Xiaomi MiIO Device Tracker: Unused variable removed ([@syssi] - [#13948]) ([device_tracker docs]) +- Implement play media to set a channel based on (by priority): ([@stephanerosi] - [#13934]) ([media_player.webostv docs]) +- Update of python-mpd2 ([@karlkar] - [#13921]) ([media_player.mpd docs]) +- Add AVM fritzbox smarthome component ([@hthiery] - [#10688]) ([fritzbox docs]) ([climate.fritzbox docs]) ([switch.fritzbox docs]) (new-platform) +- Adds SigFox sensor ([@robmarkcole] - [#13731]) ([sensor.sigfox docs]) (new-platform) +- Upgrade aiohttp to 3.1.3 ([@fabaff] - [#13938]) +- Upgrade youtube_dl to 2018.04.16 ([@fabaff] - [#13937]) ([media_extractor docs]) +- Added FB messenger broadcast api to notify.facebook component ([@B1tMaster] - [#12459]) ([notify.facebook docs]) +- Added web view for TTS to get url ([@tschmidty69] - [#13882]) ([tts docs]) +- Add services for bmw_connected_drive ([@ChristianKuehnel] - [#13497]) ([bmw_connected_drive docs]) ([device_tracker docs]) +- Fix call to parent broadlink switch ([@Danielhiversen] - [#13906]) ([switch.broadlink docs]) (beta fix) +- Bump deCONZ requirement to v36 ([@Kane610] - [#13960]) ([deconz docs]) +- Fix Gogogate2 'available' attribute ([@dlbroadfoot] - [#13728]) (beta fix) +- Fix so it is possible to ignore discovered config entry handlers ([@Kane610] - [#13741]) (beta fix) +- Prevent vesync doing I/O in event loop ([@balloob] - [#13862]) ([switch.vesync docs]) (beta fix) +- Fix #13846 Double underscore in bluetooth address ([@aav7fl] - [#13884]) ([device_tracker docs]) (beta fix) +- Fix race condition for component loaded before listening ([@balloob] - [#13887]) ([config docs]) (beta fix) +- Missing property decorator added ([@syssi] - [#13889]) ([fan.xiaomi_miio docs]) (beta fix) +- Fix call to parent broadlink switch ([@Danielhiversen] - [#13906]) ([switch.broadlink docs]) (beta fix) +- Import operation modes from air humidifier ([@syssi] - [#13908]) ([fan.xiaomi_miio docs]) (beta fix) +- Upgrade pyqwikswitch to 0.71 ([@kellerza] - [#13920]) ([qwikswitch docs]) +- Upgrade somecomfort to 0.5.2 ([@balloob] - [#13940]) ([climate.honeywell docs]) (beta fix) +- Update pyhydroquebec to 2.2.2 ([@titilambert] - [#13946]) ([sensor.hydroquebec docs]) (beta fix) +- Revert "Upgrade pyqwikswitch to 0.71 ([@balloob] - [#13920]) ([qwikswitch docs]) +- Bump skybellpy version to 0.1.2 ([@MisterWil] - [#13974]) ([skybell docs]) +- Fix typo an coding style ([@stephanerosi] - [#13970]) ([device_tracker docs]) +- Params of the send command can be a list now ([@syssi] - [#13905]) ([vacuum docs]) +- Support basic covers with open/close/stop services HomeKit ([@nickw444] - [#13819]) ([homekit docs]) (new-feature) +- Colorlog windows fix ([@veleek] - [#13929]) ([notify docs]) +- deCONZ migrate setup fully to config entry ([@Kane610] - [#13679]) ([deconz docs]) +- Alexa thermostat fails to properly parse 'value' field for climate ([@no2chem] - [#13958]) ([alexa docs]) +- renaming icons ([@NovapaX] - [#13982]) ([hdmi_cec docs]) ([vacuum docs]) ([vacuum.dyson docs]) ([vacuum.neato docs]) ([vacuum.roomba docs]) ([vacuum.xiaomi_miio docs]) +- Fix for Lokalise backend misinterpretation of keys ([@armills] - [#13986]) +- Bump locationsharinglib to 1.2.1 ([@thelittlefireman] - [#13980]) ([device_tracker docs]) +- Support for multiple MAX!Cube LAN gateways added ([@syssi] - [#13517]) ([maxcube docs]) ([binary_sensor.maxcube docs]) ([climate.maxcube docs]) (breaking change) +- Add additional receiver for Onkyo zone 2 ([@koolsb] - [#13551]) ([media_player.onkyo docs]) +- Add blackbird media player component ([@koolsb] - [#13549]) ([media_player.blackbird docs]) (new-platform) +- Add support for Sensirion SHT31 temperature/humidity sensor ([@viorels] - [#12952]) ([sensor.sht31 docs]) (new-platform) +- Useless code removed ([@syssi] - [#13996]) ([maxcube docs]) +- Add Homematic HmIP-SWO-PR weather sensor support ([@pascalhahn] - [#13904]) ([homematic docs]) +- Disable ebox requirement ([@balloob] - [#14003]) ([sensor.ebox docs]) (breaking change) +- Upgraded miflora library to version 0.4.0 ([@ChristianKuehnel] - [#14005]) ([sensor.lmsensor docs]) ([sensor.miflora docs]) (new-platform) +- Log an error instead of raising an exception ([@syssi] - [#14006]) ([sensor.sht31 docs]) +- Tibber available ([@Danielhiversen] - [#13865]) ([sensor.tibber docs]) +- Upgrade pylutron-caseta to 0.5.0 to reestablish connections ([@rohankapoorcom] - [#14013]) ([lutron_caseta docs]) +- Add sensor device classes ([@balloob] - [#14010]) ([sensor docs]) ([sensor.ecobee docs]) ([sensor.linux_battery docs]) ([sensor.nest docs]) + +[#10688]: https://github.com/home-assistant/home-assistant/pull/10688 +[#12224]: https://github.com/home-assistant/home-assistant/pull/12224 +[#12459]: https://github.com/home-assistant/home-assistant/pull/12459 +[#12831]: https://github.com/home-assistant/home-assistant/pull/12831 +[#12952]: https://github.com/home-assistant/home-assistant/pull/12952 +[#13075]: https://github.com/home-assistant/home-assistant/pull/13075 +[#13256]: https://github.com/home-assistant/home-assistant/pull/13256 +[#13318]: https://github.com/home-assistant/home-assistant/pull/13318 +[#13346]: https://github.com/home-assistant/home-assistant/pull/13346 +[#13357]: https://github.com/home-assistant/home-assistant/pull/13357 +[#13479]: https://github.com/home-assistant/home-assistant/pull/13479 +[#13497]: https://github.com/home-assistant/home-assistant/pull/13497 +[#13517]: https://github.com/home-assistant/home-assistant/pull/13517 +[#13534]: https://github.com/home-assistant/home-assistant/pull/13534 +[#13549]: https://github.com/home-assistant/home-assistant/pull/13549 +[#13551]: https://github.com/home-assistant/home-assistant/pull/13551 +[#13579]: https://github.com/home-assistant/home-assistant/pull/13579 +[#13622]: https://github.com/home-assistant/home-assistant/pull/13622 +[#13625]: https://github.com/home-assistant/home-assistant/pull/13625 +[#13666]: https://github.com/home-assistant/home-assistant/pull/13666 +[#13673]: https://github.com/home-assistant/home-assistant/pull/13673 +[#13679]: https://github.com/home-assistant/home-assistant/pull/13679 +[#13707]: https://github.com/home-assistant/home-assistant/pull/13707 +[#13711]: https://github.com/home-assistant/home-assistant/pull/13711 +[#13714]: https://github.com/home-assistant/home-assistant/pull/13714 +[#13716]: https://github.com/home-assistant/home-assistant/pull/13716 +[#13720]: https://github.com/home-assistant/home-assistant/pull/13720 +[#13727]: https://github.com/home-assistant/home-assistant/pull/13727 +[#13728]: https://github.com/home-assistant/home-assistant/pull/13728 +[#13730]: https://github.com/home-assistant/home-assistant/pull/13730 +[#13731]: https://github.com/home-assistant/home-assistant/pull/13731 +[#13732]: https://github.com/home-assistant/home-assistant/pull/13732 +[#13733]: https://github.com/home-assistant/home-assistant/pull/13733 +[#13735]: https://github.com/home-assistant/home-assistant/pull/13735 +[#13736]: https://github.com/home-assistant/home-assistant/pull/13736 +[#13737]: https://github.com/home-assistant/home-assistant/pull/13737 +[#13739]: https://github.com/home-assistant/home-assistant/pull/13739 +[#13741]: https://github.com/home-assistant/home-assistant/pull/13741 +[#13743]: https://github.com/home-assistant/home-assistant/pull/13743 +[#13744]: https://github.com/home-assistant/home-assistant/pull/13744 +[#13746]: https://github.com/home-assistant/home-assistant/pull/13746 +[#13752]: https://github.com/home-assistant/home-assistant/pull/13752 +[#13756]: https://github.com/home-assistant/home-assistant/pull/13756 +[#13761]: https://github.com/home-assistant/home-assistant/pull/13761 +[#13764]: https://github.com/home-assistant/home-assistant/pull/13764 +[#13765]: https://github.com/home-assistant/home-assistant/pull/13765 +[#13770]: https://github.com/home-assistant/home-assistant/pull/13770 +[#13773]: https://github.com/home-assistant/home-assistant/pull/13773 +[#13778]: https://github.com/home-assistant/home-assistant/pull/13778 +[#13783]: https://github.com/home-assistant/home-assistant/pull/13783 +[#13784]: https://github.com/home-assistant/home-assistant/pull/13784 +[#13787]: https://github.com/home-assistant/home-assistant/pull/13787 +[#13790]: https://github.com/home-assistant/home-assistant/pull/13790 +[#13791]: https://github.com/home-assistant/home-assistant/pull/13791 +[#13792]: https://github.com/home-assistant/home-assistant/pull/13792 +[#13794]: https://github.com/home-assistant/home-assistant/pull/13794 +[#13796]: https://github.com/home-assistant/home-assistant/pull/13796 +[#13800]: https://github.com/home-assistant/home-assistant/pull/13800 +[#13802]: https://github.com/home-assistant/home-assistant/pull/13802 +[#13804]: https://github.com/home-assistant/home-assistant/pull/13804 +[#13809]: https://github.com/home-assistant/home-assistant/pull/13809 +[#13811]: https://github.com/home-assistant/home-assistant/pull/13811 +[#13812]: https://github.com/home-assistant/home-assistant/pull/13812 +[#13814]: https://github.com/home-assistant/home-assistant/pull/13814 +[#13819]: https://github.com/home-assistant/home-assistant/pull/13819 +[#13824]: https://github.com/home-assistant/home-assistant/pull/13824 +[#13832]: https://github.com/home-assistant/home-assistant/pull/13832 +[#13839]: https://github.com/home-assistant/home-assistant/pull/13839 +[#13840]: https://github.com/home-assistant/home-assistant/pull/13840 +[#13842]: https://github.com/home-assistant/home-assistant/pull/13842 +[#13851]: https://github.com/home-assistant/home-assistant/pull/13851 +[#13854]: https://github.com/home-assistant/home-assistant/pull/13854 +[#13855]: https://github.com/home-assistant/home-assistant/pull/13855 +[#13862]: https://github.com/home-assistant/home-assistant/pull/13862 +[#13865]: https://github.com/home-assistant/home-assistant/pull/13865 +[#13882]: https://github.com/home-assistant/home-assistant/pull/13882 +[#13883]: https://github.com/home-assistant/home-assistant/pull/13883 +[#13884]: https://github.com/home-assistant/home-assistant/pull/13884 +[#13887]: https://github.com/home-assistant/home-assistant/pull/13887 +[#13888]: https://github.com/home-assistant/home-assistant/pull/13888 +[#13889]: https://github.com/home-assistant/home-assistant/pull/13889 +[#13895]: https://github.com/home-assistant/home-assistant/pull/13895 +[#13900]: https://github.com/home-assistant/home-assistant/pull/13900 +[#13903]: https://github.com/home-assistant/home-assistant/pull/13903 +[#13904]: https://github.com/home-assistant/home-assistant/pull/13904 +[#13905]: https://github.com/home-assistant/home-assistant/pull/13905 +[#13906]: https://github.com/home-assistant/home-assistant/pull/13906 +[#13908]: https://github.com/home-assistant/home-assistant/pull/13908 +[#13915]: https://github.com/home-assistant/home-assistant/pull/13915 +[#13917]: https://github.com/home-assistant/home-assistant/pull/13917 +[#13918]: https://github.com/home-assistant/home-assistant/pull/13918 +[#13920]: https://github.com/home-assistant/home-assistant/pull/13920 +[#13921]: https://github.com/home-assistant/home-assistant/pull/13921 +[#13929]: https://github.com/home-assistant/home-assistant/pull/13929 +[#13934]: https://github.com/home-assistant/home-assistant/pull/13934 +[#13935]: https://github.com/home-assistant/home-assistant/pull/13935 +[#13937]: https://github.com/home-assistant/home-assistant/pull/13937 +[#13938]: https://github.com/home-assistant/home-assistant/pull/13938 +[#13940]: https://github.com/home-assistant/home-assistant/pull/13940 +[#13942]: https://github.com/home-assistant/home-assistant/pull/13942 +[#13943]: https://github.com/home-assistant/home-assistant/pull/13943 +[#13946]: https://github.com/home-assistant/home-assistant/pull/13946 +[#13948]: https://github.com/home-assistant/home-assistant/pull/13948 +[#13958]: https://github.com/home-assistant/home-assistant/pull/13958 +[#13960]: https://github.com/home-assistant/home-assistant/pull/13960 +[#13970]: https://github.com/home-assistant/home-assistant/pull/13970 +[#13974]: https://github.com/home-assistant/home-assistant/pull/13974 +[#13980]: https://github.com/home-assistant/home-assistant/pull/13980 +[#13982]: https://github.com/home-assistant/home-assistant/pull/13982 +[#13986]: https://github.com/home-assistant/home-assistant/pull/13986 +[#13996]: https://github.com/home-assistant/home-assistant/pull/13996 +[#14003]: https://github.com/home-assistant/home-assistant/pull/14003 +[#14005]: https://github.com/home-assistant/home-assistant/pull/14005 +[#14006]: https://github.com/home-assistant/home-assistant/pull/14006 +[#14010]: https://github.com/home-assistant/home-assistant/pull/14010 +[#14013]: https://github.com/home-assistant/home-assistant/pull/14013 +[@B1tMaster]: https://github.com/B1tMaster +[@ChristianKuehnel]: https://github.com/ChristianKuehnel +[@Danielhiversen]: https://github.com/Danielhiversen +[@Juggels]: https://github.com/Juggels +[@KJonline]: https://github.com/KJonline +[@Kane610]: https://github.com/Kane610 +[@Kirchoff]: https://github.com/Kirchoff +[@Marco98]: https://github.com/Marco98 +[@MisterWil]: https://github.com/MisterWil +[@NovapaX]: https://github.com/NovapaX +[@OttoWinter]: https://github.com/OttoWinter +[@Paxy]: https://github.com/Paxy +[@Shou]: https://github.com/Shou +[@TheCellMC]: https://github.com/TheCellMC +[@Yonsm]: https://github.com/Yonsm +[@aav7fl]: https://github.com/aav7fl +[@andersonshatch]: https://github.com/andersonshatch +[@armills]: https://github.com/armills +[@balloob]: https://github.com/balloob +[@cdce8p]: https://github.com/cdce8p +[@cgtobi]: https://github.com/cgtobi +[@citruz]: https://github.com/citruz +[@dangyuluo]: https://github.com/dangyuluo +[@danielperna84]: https://github.com/danielperna84 +[@dersger]: https://github.com/dersger +[@dgomes]: https://github.com/dgomes +[@dlbroadfoot]: https://github.com/dlbroadfoot +[@escoand]: https://github.com/escoand +[@fabaff]: https://github.com/fabaff +[@geekofweek]: https://github.com/geekofweek +[@gerard33]: https://github.com/gerard33 +[@hmn]: https://github.com/hmn +[@hthiery]: https://github.com/hthiery +[@karlkar]: https://github.com/karlkar +[@kellerza]: https://github.com/kellerza +[@koolsb]: https://github.com/koolsb +[@marthoc]: https://github.com/marthoc +[@meauxt]: https://github.com/meauxt +[@michaelkuty]: https://github.com/michaelkuty +[@mjg59]: https://github.com/mjg59 +[@molobrakos]: https://github.com/molobrakos +[@nickw444]: https://github.com/nickw444 +[@no2chem]: https://github.com/no2chem +[@pascalhahn]: https://github.com/pascalhahn +[@philk]: https://github.com/philk +[@pvizeli]: https://github.com/pvizeli +[@rcloran]: https://github.com/rcloran +[@reefab]: https://github.com/reefab +[@robmarkcole]: https://github.com/robmarkcole +[@rohankapoorcom]: https://github.com/rohankapoorcom +[@shred86]: https://github.com/shred86 +[@stephanerosi]: https://github.com/stephanerosi +[@swilson]: https://github.com/swilson +[@syssi]: https://github.com/syssi +[@thelittlefireman]: https://github.com/thelittlefireman +[@thrawnarn]: https://github.com/thrawnarn +[@titilambert]: https://github.com/titilambert +[@tobygray]: https://github.com/tobygray +[@tschmidty69]: https://github.com/tschmidty69 +[@veleek]: https://github.com/veleek +[@viorels]: https://github.com/viorels +[@wiuwiu]: https://github.com/wiuwiu +[@xTCx]: https://github.com/xTCx +[abode docs]: /components/abode/ +[alexa docs]: /components/alexa/ +[binary_sensor.bmw_connected_drive docs]: /components/binary_sensor.bmw_connected_drive/ +[binary_sensor.hive docs]: /components/binary_sensor.hive/ +[binary_sensor.maxcube docs]: /components/binary_sensor.maxcube/ +[bmw_connected_drive docs]: /components/bmw_connected_drive/ +[calendar.google docs]: /components/calendar.google/ +[calendar.todoist docs]: /components/calendar.todoist/ +[climate.fritzbox docs]: /components/climate.fritzbox/ +[climate.hive docs]: /components/climate.hive/ +[climate.honeywell docs]: /components/climate.honeywell/ +[climate.maxcube docs]: /components/climate.maxcube/ +[climate.modbus docs]: /components/climate.modbus/ +[config docs]: /components/config/ +[cover.opengarage docs]: /components/cover.opengarage/ +[cover.tahoma docs]: /components/cover.tahoma/ +[deconz docs]: /components/deconz/ +[device_tracker docs]: /components/device_tracker/ +[ecobee docs]: /components/ecobee/ +[eufy docs]: /components/eufy/ +[fan.xiaomi_miio docs]: /components/fan.xiaomi_miio/ +[fritzbox docs]: /components/fritzbox/ +[google docs]: /components/google/ +[hdmi_cec docs]: /components/hdmi_cec/ +[hive docs]: /components/hive/ +[homekit docs]: /components/homekit/ +[homekit_controller docs]: /components/homekit_controller/ +[homematic docs]: /components/homematic/ +[hue docs]: /components/hue/ +[ihc docs]: /components/ihc/ +[light docs]: /components/light/ +[light.abode docs]: /components/light.abode/ +[light.aurora docs]: /components/light.aurora/ +[light.eufy docs]: /components/light.eufy/ +[light.hive docs]: /components/light.hive/ +[light.homekit_controller docs]: /components/light.homekit_controller/ +[light.hue docs]: /components/light.hue/ +[light.yeelight docs]: /components/light.yeelight/ +[lock.bmw_connected_drive docs]: /components/lock.bmw_connected_drive/ +[lutron_caseta docs]: /components/lutron_caseta/ +[maxcube docs]: /components/maxcube/ +[media_extractor docs]: /components/media_extractor/ +[media_player.blackbird docs]: /components/media_player.blackbird/ +[media_player.bluesound docs]: /components/media_player.bluesound/ +[media_player.cast docs]: /components/media_player.cast/ +[media_player.kodi docs]: /components/media_player.kodi/ +[media_player.mediaroom docs]: /components/media_player.mediaroom/ +[media_player.mpd docs]: /components/media_player.mpd/ +[media_player.onkyo docs]: /components/media_player.onkyo/ +[media_player.squeezebox docs]: /components/media_player.squeezebox/ +[media_player.webostv docs]: /components/media_player.webostv/ +[notify docs]: /components/notify/ +[notify.facebook docs]: /components/notify.facebook/ +[prometheus docs]: /components/prometheus/ +[qwikswitch docs]: /components/qwikswitch/ +[sensor docs]: /components/sensor/ +[sensor.alpha_vantage docs]: /components/sensor.alpha_vantage/ +[sensor.bmw_connected_drive docs]: /components/sensor.bmw_connected_drive/ +[sensor.broadlink docs]: /components/sensor.broadlink/ +[sensor.deconz docs]: /components/sensor.deconz/ +[sensor.ebox docs]: /components/sensor.ebox/ +[sensor.ecobee docs]: /components/sensor.ecobee/ +[sensor.eddystone_temperature docs]: /components/sensor.eddystone_temperature/ +[sensor.filter docs]: /components/sensor.filter/ +[sensor.folder docs]: /components/sensor.folder/ +[sensor.foobot docs]: /components/sensor.foobot/ +[sensor.fritzbox_netmonitor docs]: /components/sensor.fritzbox_netmonitor/ +[sensor.hive docs]: /components/sensor.hive/ +[sensor.hydroquebec docs]: /components/sensor.hydroquebec/ +[sensor.linux_battery docs]: /components/sensor.linux_battery/ +[sensor.lmsensor docs]: /components/sensor.lmsensor/ +[sensor.miflora docs]: /components/sensor.miflora/ +[sensor.mqtt docs]: /components/sensor.mqtt/ +[sensor.nest docs]: /components/sensor.nest/ +[sensor.nut docs]: /components/sensor.nut/ +[sensor.qwikswitch docs]: /components/sensor.qwikswitch/ +[sensor.sht31 docs]: /components/sensor.sht31/ +[sensor.sigfox docs]: /components/sensor.sigfox/ +[sensor.smappee docs]: /components/sensor.smappee/ +[sensor.sql docs]: /components/sensor.sql/ +[sensor.tibber docs]: /components/sensor.tibber/ +[sensor.trafikverket_weatherstation docs]: /components/sensor.trafikverket_weatherstation/ +[sensor.upnp docs]: /components/sensor.upnp/ +[sensor.uscis docs]: /components/sensor.uscis/ +[skybell docs]: /components/skybell/ +[smappee docs]: /components/smappee/ +[snips docs]: /components/snips/ +[switch.broadlink docs]: /components/switch.broadlink/ +[switch.edimax docs]: /components/switch.edimax/ +[switch.eufy docs]: /components/switch.eufy/ +[switch.fritzbox docs]: /components/switch.fritzbox/ +[switch.hive docs]: /components/switch.hive/ +[switch.vesync docs]: /components/switch.vesync/ +[tts docs]: /components/tts/ +[upnp docs]: /components/upnp/ +[vacuum docs]: /components/vacuum/ +[vacuum.dyson docs]: /components/vacuum.dyson/ +[vacuum.neato docs]: /components/vacuum.neato/ +[vacuum.roomba docs]: /components/vacuum.roomba/ +[vacuum.xiaomi_miio docs]: /components/vacuum.xiaomi_miio/ +[weather.yweather docs]: /components/weather.yweather/ +[zha docs]: /components/zha/ From 329393788f24ece40c83a027653fb3d488fd4392 Mon Sep 17 00:00:00 2001 From: Rob Cranfill Date: Fri, 20 Apr 2018 14:28:16 -0700 Subject: [PATCH 897/993] Fix typo homekit.markdown (#5209) Fixed very minor typo ("if the are supported"' -> "if they are supported"). --- source/_components/homekit.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/homekit.markdown b/source/_components/homekit.markdown index 5ca13b0f2b..fe0ff4c05e 100644 --- a/source/_components/homekit.markdown +++ b/source/_components/homekit.markdown @@ -87,7 +87,7 @@ To enable the `HomeKit` component in Home Assistant, add the following to your c homekit: ``` -After Home Assistant has started, the entities specified by the filter are exposed to `HomeKit` if the are [supported](#supported-components). To add them: +After Home Assistant has started, the entities specified by the filter are exposed to `HomeKit` if they are [supported](#supported-components). To add them: 1. Open the Home Assistant frontend. A new card will display the `pin code`. 1. Open the `Home` app. 2. Choose `Add Accessory`, than select `Don't Have a Code or Can't Scan?` and enter the `pin code`. From 6c90dedce57b873c4387a3c5613af1b98cd01047 Mon Sep 17 00:00:00 2001 From: Rob Cranfill Date: Fri, 20 Apr 2018 14:30:06 -0700 Subject: [PATCH 898/993] Update homekit.markdown (#5207) Minor grammar fixes. (Thanks for a great product!) --- source/_components/homekit.markdown | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/_components/homekit.markdown b/source/_components/homekit.markdown index fe0ff4c05e..68ac4cb460 100644 --- a/source/_components/homekit.markdown +++ b/source/_components/homekit.markdown @@ -12,7 +12,7 @@ ha_release: 0.64 logo: apple-homekit.png --- -The `HomeKit` component allows you to forward entities from Home Assistant to Apple `HomeKit`, so they could be controlled from Apple `Home` app and `Siri`. Please make sure that you have read the [considerations](#considerations) listed below to save you some trouble later. +The `HomeKit` component allows you to forward entities from Home Assistant to Apple `HomeKit`, so they can be controlled from Apple's `Home` app and `Siri`. Please make sure that you have read the [considerations](#considerations) listed below to save you some trouble later.

    It might be necessary to install an additional package: @@ -107,7 +107,7 @@ Currently this component uses the `entity_id` to generate a unique `accessory id ### {% linkable_title Persistence Storage %} -Unfortunately `HomeKit` doesn't support any kind of persistence storage, only the configuration for accessories that are added to the `Home Assistant Bridge` are kept. To avoid problems it is recommended to use an automation to always start `HomeKit` with at least the same entities setup. If for some reason some entities are not setup, their config will be deleted. (State unknown or similar will not cause any issues.) +Unfortunately `HomeKit` doesn't support any kind of persistent storage - only the configuration for accessories that are added to the `Home Assistant Bridge` are kept. To avoid problems it is recommended to use an automation to always start `HomeKit` with at least the same entities setup. If for some reason some entities are not setup, their config will be deleted. (State unknown or similar will not cause any issues.) A common situation might be if you decide to disable parts of the configuration for testing. Please make sure to disable `auto start` and `turn off` the `Start HomeKit` automation (if you have one). From 21ed92fb92b7b298c08a139842771032b133d46c Mon Sep 17 00:00:00 2001 From: Brian Hanifin Date: Sat, 21 Apr 2018 17:06:31 -0700 Subject: [PATCH 899/993] Change Page Title to "Homekit Switch" (#5222) * Change Page Title to "Homekit Switch" It was left titled "Homekit Light" when first published. * Minor cleanup --- source/_components/switch.homekit_controller.markdown | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/_components/switch.homekit_controller.markdown b/source/_components/switch.homekit_controller.markdown index 205316bdf2..43bf3be57b 100644 --- a/source/_components/switch.homekit_controller.markdown +++ b/source/_components/switch.homekit_controller.markdown @@ -1,7 +1,7 @@ --- layout: page -title: "HomeKit Light" -description: "Instructions how to setup HomeKit switches within Home Assistant." +title: "HomeKit Switch" +description: "Instructions on how to setup HomeKit switches within Home Assistant." date: 2017-03-19 21:08 sidebar: true comments: false From 8eae78cb349ee3a71a739f73f242ff3c07baf6fc Mon Sep 17 00:00:00 2001 From: Ben Lebherz Date: Sun, 22 Apr 2018 21:42:21 +0200 Subject: [PATCH 900/993] fix link to the TTN sensor page (#5218) --- source/_components/thethingsnetwork.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/thethingsnetwork.markdown b/source/_components/thethingsnetwork.markdown index 65211c241d..328022f6cc 100644 --- a/source/_components/thethingsnetwork.markdown +++ b/source/_components/thethingsnetwork.markdown @@ -20,7 +20,7 @@ The Things network support various integrations to make the data available: | The Things Network Integration | Home Assistant platform | |---|---| | [MQTT](https://www.thethingsnetwork.org/docs/applications/mqtt/) | | -| [Storage](https://www.thethingsnetwork.org/docs/applications/storage/) | [`thethingsnetwork`](/component/sensor.thethingsnetwork/) | +| [Storage](https://www.thethingsnetwork.org/docs/applications/storage/) | [`thethingsnetwork`](/components/sensor.thethingsnetwork/) | | [HTTP](https://www.thethingsnetwork.org/docs/applications/http/) | | ### {% linkable_title Setup %} From 00d950773e8a8c5ba365f9f7c599df5c21e9e9f2 Mon Sep 17 00:00:00 2001 From: Marcelo Moreira de Mello Date: Sun, 22 Apr 2018 15:49:27 -0400 Subject: [PATCH 901/993] Updated watering_minutes with the allowed values (#5225) --- source/_components/switch.raincloud.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/switch.raincloud.markdown b/source/_components/switch.raincloud.markdown index e5cbc2d070..2e2af72de8 100644 --- a/source/_components/switch.raincloud.markdown +++ b/source/_components/switch.raincloud.markdown @@ -25,7 +25,7 @@ switch: Configuration variables: -- **watering_minutes** (*Optional*): Value in minutes to watering your garden via frontend. Defaults to 15. +- **watering_minutes** (*Optional*): Value in minutes to watering your garden via frontend. Defaults to 15. The values allowed are: 5, 10, 15, 30, 45, 60. - **monitored_conditions** array (*Optional*): Conditions to display in the frontend. If not specified, all conditions below will be enabled by default. The following conditions can be monitored. - **auto_watering**: Toggle the watering scheduled per zone. - **manual_watering**: Toggle manually the watering per zone. It will inherent the value in minutes specified on the RainCloud hub component. From 10db3b3f9e7348af37776d67ff4f8ce9c9a0b84e Mon Sep 17 00:00:00 2001 From: Pascal Vizeli Date: Sun, 22 Apr 2018 22:26:58 +0200 Subject: [PATCH 902/993] Blogpost Hass.io 2018 (#5233) * Create 2018-04-22-hassio-2018.markdown * Update 2018-04-22-hassio-2018.markdown * Update 2018-04-22-hassio-2018.markdown * Create test * Add files via upload * Delete test * Update 2018-04-22-hassio-2018.markdown * Delete blogpost.png * Create test * Add files via upload * Delete test * Update 2018-04-22-hassio-2018.markdown * Update 2018-04-22-hassio-2018.markdown * Update 2018-04-22-hassio-2018.markdown * Update 2018-04-22-hassio-2018.markdown * Update 2018-04-22-hassio-2018.markdown --- source/_posts/2018-04-22-hassio-2018.markdown | 64 ++++++++++++++++++ .../blog/2018-04-hassio-2018/blogpost.png | Bin 0 -> 42047 bytes 2 files changed, 64 insertions(+) create mode 100644 source/_posts/2018-04-22-hassio-2018.markdown create mode 100644 source/images/blog/2018-04-hassio-2018/blogpost.png diff --git a/source/_posts/2018-04-22-hassio-2018.markdown b/source/_posts/2018-04-22-hassio-2018.markdown new file mode 100644 index 0000000000..2562d41772 --- /dev/null +++ b/source/_posts/2018-04-22-hassio-2018.markdown @@ -0,0 +1,64 @@ +--- +layout: post +title: "Hass.io 2018" +description: "We want to clarify how Hass.io relates to Home Assistant and talk about the roadmap for Hass.io in 2018." +date: 2018-04-22 00:00:00 +date_formatted: "April 22, 2018" +author: Pascal Vizeli +author_twitter: pvizeli +comments: true +categories: Announcements +og_image: /images/blog/2018-04-hassio-2018/blogpost.png +--- + +We noticed that there is some confusion in the community about how Hass.io relates to Home Assistant and what impact the upcoming Hass.io changes will have. We will try to clarify it all in this blog post. + +## {% linkable_title What is Hass.io %} +Hass.io is a complete solution to run Home Assistant, by the authors of Home Assistant. The goal of Hass.io is to provide an easy to use and secure system, entirely managed from within the Home Assistant user interface. + +Hass.io is a complete solution, which means that it comes with its own highly secure and optimized operating system, a supervisor application to maintain and configure that system, and of course Home Assistant itself. + +When using Hass.io, you'll see a new Hass.io panel inside the Home Assistant UI. From here users can configure the system and install Home Assistant updates with a simple click of a button. Users are also able to make snapshots of their system, making it easy to migrate all their configuration to a new system or restore their system to a previous state. + +We wanted to be able to provide the convenience of seamless updates and configuration via the UI to other applications too, and so we introduced Hass.io add-ons. Any application can be packaged up as a Hass.io add-on, allowing any user to install and manage it easily. Since the introduction, we’ve seen an amazing growth in users sharing their add-ons with the community. It’s now possible to install an adblocker for your network, an MQTT broker or Tor with a single click. + +## {% linkable_title Upcoming changes to Hass.io %} +We’ve introduced Hass.io [last July]. Since then, we’ve noticed some room for improvements in making Hass.io easier to use, lighter to maintain and easier to integrate with other host systems. + +Note that the descriptions of upcoming improvements can get quite technical. Feel free to jump to [the conclusion]. + +### {% linkable_title Automatic add-on configuration %} +Home Assistant has recently introduced configuration entries. We’re going to hook into this new functionality and allow add-ons to configure their related integration in Home Assistant automatically. For example, if a user installs the MQTT broker add-on, we will automatically set up Home Assistant to connect to it. + +### {% linkable_title Host management %} +To control the host system, we currently use a custom service called HostControl. This allows the user to manage here host and restart/shutdown the computer from within Home Assistant. Instead of relying on our own system, we’re going to change to use D-Bus. D-Bus is a standardized mechanism for services and applications to communicate. Using a defined standard means that all parts of the host can now be remotely configured: sound, network, etc, etc. We will be extending the Hass.io panel in Home Assistant with controls to configure various parts of the host. + +### {% linkable_title Hass.io OS %} +Hass.io is currently using a forked version of ResinOS as our operating system. ResinOS has been designed to run a minimal environment for Docker, simple over the air updates and connect to the ResinIO cloud. Our fork removed the ResinIO logic. Over time, ResinOS has been evolving but not in a direction that is aligned with our goals, resulting in the maintenance of our fork to take up a lot of time. + +The ResinOS build system is based on the Yocto Project. This is a very powerful system, but also requires specific support for each hardware platform need to be specifically added and maintained (like each version of Raspberry Pi), which caused long build and development times for Hass.io. + +All these factors made us decide to build our own, custom, operating system. We’re obviously not starting from scratch, but instead, are basing it off [Buildroot] as the foundation and use [RAUC] for over the air updates. + +Some things that the new operating system will be able to do: +- Adding support for new hardware will be easy. Creating new builds for, e.g., a new Raspberry Pi model should be a matter of days, not months. +- Updating will be atomic and has a Fail-safe. If a system fails to boot after an OS upgrade, it will fallback, by booting the previous working version. +- Updates are required to be securely signed by the Home Assistant team, adding a whole new level of security. +- Compressing the root file system, making it faster on SD cards and slow IO-Interfaces. +- Compressing parts of the memory so that we can store more information. + +## {% linkable_title What Hass.io users should do to prepare for these updates %} +At this moment: Nothing. + +The new Hass.io supervisor still supports the old ResinOS builds (our official downloads for Raspberry Pi and Intel NUC) and generic Linux installations. If you’re using a generic Linux installation on SUSE Linux or Ubuntu, you have to update your local AppArmor profile if you want to use the new functionality (instructions will be provided upon release). + +Once our new installation images with HassioOS are released, you have to reflash your device once. You can do this without losing any configuration by using our Snapshot feature: +- Create a snapshot of your current installation and download it to your PC. +- Flash the SD card with the new Hass.io OS image. +- Restore your snapshot. +- Enjoy a new and improved Hass.io + +[last July]: https://www.home-assistant.io/blog/2017/07/25/introducing-hassio/ +[the conclusion]: #what-hassio-users-should-do-to-prepare-for-these-updates +[Buildroot]: https://buildroot.org/ +[RAUC]: https://www.rauc.io/ diff --git a/source/images/blog/2018-04-hassio-2018/blogpost.png b/source/images/blog/2018-04-hassio-2018/blogpost.png new file mode 100644 index 0000000000000000000000000000000000000000..443fb8a540b6d7572ef2a63e4177cd5224b842ac GIT binary patch literal 42047 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°A%*{k7-z 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 literal 0 HcmV?d00001 From e6adf8ca0b4c380e785210dbe157ccf66864ba2e Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Sun, 22 Apr 2018 18:08:03 -0400 Subject: [PATCH 903/993] remove confusion about build times to support new hardware --- source/_posts/2018-04-22-hassio-2018.markdown | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/source/_posts/2018-04-22-hassio-2018.markdown b/source/_posts/2018-04-22-hassio-2018.markdown index 2562d41772..9050605355 100644 --- a/source/_posts/2018-04-22-hassio-2018.markdown +++ b/source/_posts/2018-04-22-hassio-2018.markdown @@ -14,7 +14,7 @@ og_image: /images/blog/2018-04-hassio-2018/blogpost.png We noticed that there is some confusion in the community about how Hass.io relates to Home Assistant and what impact the upcoming Hass.io changes will have. We will try to clarify it all in this blog post. ## {% linkable_title What is Hass.io %} -Hass.io is a complete solution to run Home Assistant, by the authors of Home Assistant. The goal of Hass.io is to provide an easy to use and secure system, entirely managed from within the Home Assistant user interface. +Hass.io is a complete solution to run Home Assistant, by the authors of Home Assistant. The goal of Hass.io is to provide an easy to use and secure system, entirely managed from within the Home Assistant user interface. Hass.io is a complete solution, which means that it comes with its own highly secure and optimized operating system, a supervisor application to maintain and configure that system, and of course Home Assistant itself. @@ -34,14 +34,14 @@ Home Assistant has recently introduced configuration entries. We’re going to h To control the host system, we currently use a custom service called HostControl. This allows the user to manage here host and restart/shutdown the computer from within Home Assistant. Instead of relying on our own system, we’re going to change to use D-Bus. D-Bus is a standardized mechanism for services and applications to communicate. Using a defined standard means that all parts of the host can now be remotely configured: sound, network, etc, etc. We will be extending the Hass.io panel in Home Assistant with controls to configure various parts of the host. ### {% linkable_title Hass.io OS %} -Hass.io is currently using a forked version of ResinOS as our operating system. ResinOS has been designed to run a minimal environment for Docker, simple over the air updates and connect to the ResinIO cloud. Our fork removed the ResinIO logic. Over time, ResinOS has been evolving but not in a direction that is aligned with our goals, resulting in the maintenance of our fork to take up a lot of time. +Hass.io is currently using a forked version of ResinOS as our operating system. ResinOS has been designed to run a minimal environment for Docker, simple over the air updates and connect to the ResinIO cloud. Our fork removed the ResinIO logic. Over time, ResinOS has been evolving but not in a direction that is aligned with our goals, resulting in the maintenance of our fork to take up a lot of time. The ResinOS build system is based on the Yocto Project. This is a very powerful system, but also requires specific support for each hardware platform need to be specifically added and maintained (like each version of Raspberry Pi), which caused long build and development times for Hass.io. All these factors made us decide to build our own, custom, operating system. We’re obviously not starting from scratch, but instead, are basing it off [Buildroot] as the foundation and use [RAUC] for over the air updates. Some things that the new operating system will be able to do: -- Adding support for new hardware will be easy. Creating new builds for, e.g., a new Raspberry Pi model should be a matter of days, not months. +- Easier to add support for new hardware. - Updating will be atomic and has a Fail-safe. If a system fails to boot after an OS upgrade, it will fallback, by booting the previous working version. - Updates are required to be securely signed by the Home Assistant team, adding a whole new level of security. - Compressing the root file system, making it faster on SD cards and slow IO-Interfaces. From c66272aa851b6e10cde38dd5514b1a677c3f9100 Mon Sep 17 00:00:00 2001 From: cdce8p <30130371+cdce8p@users.noreply.github.com> Date: Mon, 23 Apr 2018 17:34:20 +0200 Subject: [PATCH 904/993] Fix release notes 0.68.0b0 (#5212) --- source/_posts/2018-04-27-release-68.markdown | 53 ++------------------ 1 file changed, 4 insertions(+), 49 deletions(-) diff --git a/source/_posts/2018-04-27-release-68.markdown b/source/_posts/2018-04-27-release-68.markdown index 788e068c7e..167a264a2a 100644 --- a/source/_posts/2018-04-27-release-68.markdown +++ b/source/_posts/2018-04-27-release-68.markdown @@ -18,7 +18,7 @@ Highlights: - Ability to _control_ HomeKit - Eufy bulbs -## New Platforms +## {% linkable_title New Platforms %} - Add support for Eufy bulbs and switches ([@mjg59] - [#13773]) ([eufy docs]) ([light.eufy docs]) ([switch.eufy docs]) (new-platform) - Add support for controlling homekit lights and switches ([@mjg59] - [#13346]) ([homekit_controller docs]) ([light.homekit_controller docs]) (new-platform) @@ -30,7 +30,7 @@ Highlights: - Add support for Sensirion SHT31 temperature/humidity sensor ([@viorels] - [#12952]) ([sensor.sht31 docs]) (new-platform) - Upgraded miflora library to version 0.4.0 ([@ChristianKuehnel] - [#14005]) ([sensor.lmsensor docs]) ([sensor.miflora docs]) (new-platform) -## New Features +## {% linkable_title New Features %} - Support binary_sensor and device_tracker in HomeKit ([@Yonsm] - [#13735]) ([homekit docs]) (new-feature) - Add Homekit locks support ([@philk] - [#13625]) ([homekit docs]) (new-feature) @@ -47,35 +47,12 @@ Highlights: 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. -## Breaking Changes +## {% linkable_title Breaking Changes %} - Support for multiple MAX!Cube LAN gateways added ([@syssi] - [#13517]) ([maxcube docs]) ([binary_sensor.maxcube docs]) ([climate.maxcube docs]) (breaking change) - Disable ebox requirement ([@balloob] - [#14003]) ([sensor.ebox docs]) (breaking change) -## Beta Fixes - -- Fix Gogogate2 'available' attribute ([@dlbroadfoot] - [#13728]) (beta fix) -- Fix so it is possible to ignore discovered config entry handlers ([@Kane610] - [#13741]) (beta fix) -- Prevent vesync doing I/O in event loop ([@balloob] - [#13862]) ([switch.vesync docs]) (beta fix) -- Missing property decorator added ([@syssi] - [#13889]) ([fan.xiaomi_miio docs]) (beta fix) -- Fix race condition for component loaded before listening ([@balloob] - [#13887]) ([config docs]) (beta fix) -- Fix #13846 Double underscore in bluetooth address ([@aav7fl] - [#13884]) ([device_tracker docs]) (beta fix) -- Import operation modes from air humidifier ([@syssi] - [#13908]) ([fan.xiaomi_miio docs]) (beta fix) -- Update pyhydroquebec to 2.2.2 ([@titilambert] - [#13946]) ([sensor.hydroquebec docs]) (beta fix) -- Upgrade somecomfort to 0.5.2 ([@balloob] - [#13940]) ([climate.honeywell docs]) (beta fix) -- Fix call to parent broadlink switch ([@Danielhiversen] - [#13906]) ([switch.broadlink docs]) (beta fix) -- Fix Gogogate2 'available' attribute ([@dlbroadfoot] - [#13728]) (beta fix) -- Fix so it is possible to ignore discovered config entry handlers ([@Kane610] - [#13741]) (beta fix) -- Prevent vesync doing I/O in event loop ([@balloob] - [#13862]) ([switch.vesync docs]) (beta fix) -- Fix #13846 Double underscore in bluetooth address ([@aav7fl] - [#13884]) ([device_tracker docs]) (beta fix) -- Fix race condition for component loaded before listening ([@balloob] - [#13887]) ([config docs]) (beta fix) -- Missing property decorator added ([@syssi] - [#13889]) ([fan.xiaomi_miio docs]) (beta fix) -- Fix call to parent broadlink switch ([@Danielhiversen] - [#13906]) ([switch.broadlink docs]) (beta fix) -- Import operation modes from air humidifier ([@syssi] - [#13908]) ([fan.xiaomi_miio docs]) (beta fix) -- Upgrade somecomfort to 0.5.2 ([@balloob] - [#13940]) ([climate.honeywell docs]) (beta fix) -- Update pyhydroquebec to 2.2.2 ([@titilambert] - [#13946]) ([sensor.hydroquebec docs]) (beta fix) - -## All changes +## {% linkable_title All changes %} - Update Homekit to 1.1.9 ([@cdce8p] - [#13716]) ([homekit docs]) - Update docstrings ([@fabaff] - [#13720]) ([ihc docs]) ([cover.opengarage docs]) ([cover.tahoma docs]) ([light.aurora docs]) ([sensor.trafikverket_weatherstation docs]) @@ -84,7 +61,6 @@ Experiencing issues introduced by this release? Please report them in our [issue - Add timeout / debounce (for brightness and others) ([@cdce8p] - [#13534]) ([homekit docs]) - added support for smappee water sensors ([@hmn] - [#12831]) ([smappee docs]) ([sensor.smappee docs]) - Initialise filter_sensor with historical values ([@dgomes] - [#13075]) ([sensor.filter docs]) -- Fix Gogogate2 'available' attribute ([@dlbroadfoot] - [#13728]) (beta fix) - Bluesound bugfix status 595 and await ([@thrawnarn] - [#13727]) ([media_player.bluesound docs]) - Upgrade aiohttp to 3.1.2 ([@fabaff] - [#13732]) - Upgrade sqlalchemy to 1.2.6 ([@fabaff] - [#13733]) ([sensor.sql docs]) @@ -92,7 +68,6 @@ Experiencing issues introduced by this release? Please report them in our [issue - Update CODEOWNERS (sensor.filter, sensor.upnp) ([@dgomes] - [#13736]) - Reset permission ([@fabaff] - [#13743]) ([light.abode docs]) - Throw an error when invalid device_mode is given ([@dangyuluo] - [#13739]) -- Fix so it is possible to ignore discovered config entry handlers ([@Kane610] - [#13741]) (beta fix) - Upgrade netdisco to 1.3.1 ([@fabaff] - [#13744]) - Add MQTT Sensor unique_id ([@OttoWinter] - [#13318]) ([sensor.mqtt docs]) - Prepare entity component for config entries ([@balloob] - [#13730]) @@ -132,18 +107,13 @@ Experiencing issues introduced by this release? Please report them in our [issue - bump python-ecobee-api version to 0.0.18 ([@geekofweek] - [#13854]) ([ecobee docs]) - Adding USCIS component ([@meauxt] - [#13764]) ([sensor.uscis docs]) (new-platform) - Avoid unnecessary cast state updates ([@dersger] - [#13770]) ([media_player.cast docs]) -- Prevent vesync doing I/O in event loop ([@balloob] - [#13862]) ([switch.vesync docs]) (beta fix) - Update yweather.py ([@TheCellMC] - [#13851]) ([weather.yweather docs]) - add support for Kodi discovery ([@escoand] - [#13790]) ([media_player.kodi docs]) - Further untangle data entry flow ([@balloob] - [#13855]) -- Missing property decorator added ([@syssi] - [#13889]) ([fan.xiaomi_miio docs]) (beta fix) -- Fix race condition for component loaded before listening ([@balloob] - [#13887]) ([config docs]) (beta fix) - Added snips service descriptions ([@tschmidty69] - [#13883]) - Add unique_id for BMW ConnectedDrive ([@gerard33] - [#13888]) ([binary_sensor.bmw_connected_drive docs]) ([lock.bmw_connected_drive docs]) ([sensor.bmw_connected_drive docs]) - Revert "Update yweather.py" ([@pvizeli] - [#13900]) ([weather.yweather docs]) - Eufy colour bulb updates ([@mjg59] - [#13895]) ([eufy docs]) ([light.eufy docs]) -- Fix #13846 Double underscore in bluetooth address ([@aav7fl] - [#13884]) ([device_tracker docs]) (beta fix) -- Import operation modes from air humidifier ([@syssi] - [#13908]) ([fan.xiaomi_miio docs]) (beta fix) - Fritzbox netmonitor name ([@escoand] - [#13903]) ([sensor.fritzbox_netmonitor docs]) - Restore typeerror check for units sans energy tracking ([@andersonshatch] - [#13824]) ([switch.edimax docs]) - Add more math functions to templates ([@Shou] - [#13915]) @@ -154,10 +124,8 @@ Experiencing issues introduced by this release? Please report them in our [issue - Add support for new platform: climate.modbus ([@Kirchoff] - [#12224]) ([climate.modbus docs]) (new-platform) - Hive R3 update ([@KJonline] - [#13357]) ([hive docs]) ([binary_sensor.hive docs]) ([climate.hive docs]) ([light.hive docs]) ([sensor.hive docs]) ([switch.hive docs]) - Updated foobot_async package version ([@reefab] - [#13942]) ([sensor.foobot docs]) -- Update pyhydroquebec to 2.2.2 ([@titilambert] - [#13946]) ([sensor.hydroquebec docs]) (beta fix) - Upgrade alpha_vantage to 2.0.0 ([@fabaff] - [#13943]) ([sensor.alpha_vantage docs]) - Cleanup on exit ([@dgomes] - [#13918]) ([media_player.mediaroom docs]) -- Upgrade somecomfort to 0.5.2 ([@balloob] - [#13940]) ([climate.honeywell docs]) (beta fix) - Add data entry flow helper ([@balloob] - [#13935]) ([config docs]) - Xiaomi MiIO Device Tracker: Unused variable removed ([@syssi] - [#13948]) ([device_tracker docs]) - Implement play media to set a channel based on (by priority): ([@stephanerosi] - [#13934]) ([media_player.webostv docs]) @@ -169,20 +137,7 @@ Experiencing issues introduced by this release? Please report them in our [issue - Added FB messenger broadcast api to notify.facebook component ([@B1tMaster] - [#12459]) ([notify.facebook docs]) - Added web view for TTS to get url ([@tschmidty69] - [#13882]) ([tts docs]) - Add services for bmw_connected_drive ([@ChristianKuehnel] - [#13497]) ([bmw_connected_drive docs]) ([device_tracker docs]) -- Fix call to parent broadlink switch ([@Danielhiversen] - [#13906]) ([switch.broadlink docs]) (beta fix) - Bump deCONZ requirement to v36 ([@Kane610] - [#13960]) ([deconz docs]) -- Fix Gogogate2 'available' attribute ([@dlbroadfoot] - [#13728]) (beta fix) -- Fix so it is possible to ignore discovered config entry handlers ([@Kane610] - [#13741]) (beta fix) -- Prevent vesync doing I/O in event loop ([@balloob] - [#13862]) ([switch.vesync docs]) (beta fix) -- Fix #13846 Double underscore in bluetooth address ([@aav7fl] - [#13884]) ([device_tracker docs]) (beta fix) -- Fix race condition for component loaded before listening ([@balloob] - [#13887]) ([config docs]) (beta fix) -- Missing property decorator added ([@syssi] - [#13889]) ([fan.xiaomi_miio docs]) (beta fix) -- Fix call to parent broadlink switch ([@Danielhiversen] - [#13906]) ([switch.broadlink docs]) (beta fix) -- Import operation modes from air humidifier ([@syssi] - [#13908]) ([fan.xiaomi_miio docs]) (beta fix) -- Upgrade pyqwikswitch to 0.71 ([@kellerza] - [#13920]) ([qwikswitch docs]) -- Upgrade somecomfort to 0.5.2 ([@balloob] - [#13940]) ([climate.honeywell docs]) (beta fix) -- Update pyhydroquebec to 2.2.2 ([@titilambert] - [#13946]) ([sensor.hydroquebec docs]) (beta fix) -- Revert "Upgrade pyqwikswitch to 0.71 ([@balloob] - [#13920]) ([qwikswitch docs]) - Bump skybellpy version to 0.1.2 ([@MisterWil] - [#13974]) ([skybell docs]) - Fix typo an coding style ([@stephanerosi] - [#13970]) ([device_tracker docs]) - Params of the send command can be a list now ([@syssi] - [#13905]) ([vacuum docs]) From 0cfcbf254b4a741ea9d140e3cf29f73fcc433326 Mon Sep 17 00:00:00 2001 From: cdce8p <30130371+cdce8p@users.noreply.github.com> Date: Mon, 23 Apr 2018 17:58:46 +0200 Subject: [PATCH 905/993] Added release notes for 0.67.1 (#5211) * Added notes for 0.67.1 * Updated _config.yml --- _config.yml | 4 +- source/_posts/2018-04-14-release-67.markdown | 49 ++++++++++++++++++++ 2 files changed, 51 insertions(+), 2 deletions(-) diff --git a/_config.yml b/_config.yml index 38d26c045e..292d32752f 100644 --- a/_config.yml +++ b/_config.yml @@ -140,8 +140,8 @@ social: # Home Assistant release details current_major_version: 0 current_minor_version: 67 -current_patch_version: 0 -date_released: 2018-04-13 +current_patch_version: 1 +date_released: 2018-04-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. diff --git a/source/_posts/2018-04-14-release-67.markdown b/source/_posts/2018-04-14-release-67.markdown index ec16c1d115..843cce88e6 100644 --- a/source/_posts/2018-04-14-release-67.markdown +++ b/source/_posts/2018-04-14-release-67.markdown @@ -28,6 +28,23 @@ This release includes a security fix. The error log was accessible via the API w - Tahoma switches ([@ikucuze] - [#13636]) ([tahoma docs]) ([switch.tahoma docs]) (new-platform) - Add support for Nanoleaf Aurora Light Panels ([@Oro] - [#13456]) ([light.nanoleaf_aurora docs]) (new-platform) +## {% linkable_title Release 0.67.1 - April 17 %} + +- Fix Gogogate2 'available' attribute ([@dlbroadfoot] - [#13728]) +- Fix so it is possible to ignore discovered config entry handlers ([@Kane610] - [#13741]) +- Prevent vesync doing I/O in event loop ([@balloob] - [#13862]) ([switch.vesync docs]) +- Fix #13846 Double underscore in bluetooth address ([@aav7fl] - [#13884]) ([device_tracker docs]) +- Fix race condition for component loaded before listening ([@balloob] - [#13887]) ([config docs]) +- Missing property decorator added ([@syssi] - [#13889]) ([fan.xiaomi_miio docs]) +- Fix call to parent broadlink switch ([@Danielhiversen] - [#13906]) ([switch.broadlink docs]) +- Import operation modes from air humidifier ([@syssi] - [#13908]) ([fan.xiaomi_miio docs]) +- Upgrade pyqwikswitch to 0.71 ([@kellerza] - [#13920]) ([qwikswitch docs]) +- Upgrade somecomfort to 0.5.2 ([@balloob] - [#13940]) ([climate.honeywell docs]) +- Update pyhydroquebec to 2.2.2 ([@titilambert] - [#13946]) ([sensor.hydroquebec docs]) +- Update pyfido to 2.1.1 ([@titilambert] - [#13947]) ([sensor.fido docs]) +- Bumped pypollencom to 1.1.2 ([@bachya] - [#13959]) ([sensor.pollen docs]) +- Revert "Upgrade pyqwikswitch to 0.71 ([@balloob] - [#13920]) ([qwikswitch docs]) + ## {% linkable_title If you need help... %} ...don't hesitate to use our very active [forums](https://community.home-assistant.io/) or join us for a little [chat](https://discord.gg/c5DvZ4e). The release notes have comments enabled but it's preferred if you use the former communication channels. Thanks. @@ -395,3 +412,35 @@ Experiencing issues introduced by this release? Please report them in our [issue [xiaomi_aqara docs]: /components/xiaomi_aqara/ [zwave docs]: /components/zwave/ [ann-ubiquiti]: /blog/2018/04/12/ubiquiti-and-home-assistant/ +[#13728]: https://github.com/home-assistant/home-assistant/pull/13728 +[#13741]: https://github.com/home-assistant/home-assistant/pull/13741 +[#13862]: https://github.com/home-assistant/home-assistant/pull/13862 +[#13884]: https://github.com/home-assistant/home-assistant/pull/13884 +[#13887]: https://github.com/home-assistant/home-assistant/pull/13887 +[#13889]: https://github.com/home-assistant/home-assistant/pull/13889 +[#13906]: https://github.com/home-assistant/home-assistant/pull/13906 +[#13908]: https://github.com/home-assistant/home-assistant/pull/13908 +[#13920]: https://github.com/home-assistant/home-assistant/pull/13920 +[#13940]: https://github.com/home-assistant/home-assistant/pull/13940 +[#13946]: https://github.com/home-assistant/home-assistant/pull/13946 +[#13947]: https://github.com/home-assistant/home-assistant/pull/13947 +[#13959]: https://github.com/home-assistant/home-assistant/pull/13959 +[@Danielhiversen]: https://github.com/Danielhiversen +[@Kane610]: https://github.com/Kane610 +[@aav7fl]: https://github.com/aav7fl +[@bachya]: https://github.com/bachya +[@balloob]: https://github.com/balloob +[@dlbroadfoot]: https://github.com/dlbroadfoot +[@kellerza]: https://github.com/kellerza +[@syssi]: https://github.com/syssi +[@titilambert]: https://github.com/titilambert +[climate.honeywell docs]: /components/climate.honeywell/ +[config docs]: /components/config/ +[device_tracker docs]: /components/device_tracker/ +[fan.xiaomi_miio docs]: /components/fan.xiaomi_miio/ +[qwikswitch docs]: /components/qwikswitch/ +[sensor.fido docs]: /components/sensor.fido/ +[sensor.hydroquebec docs]: /components/sensor.hydroquebec/ +[sensor.pollen docs]: /components/sensor.pollen/ +[switch.broadlink docs]: /components/switch.broadlink/ +[switch.vesync docs]: /components/switch.vesync/ From b455d059c8aa664d3e7164d683cfc545becd240e Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Mon, 23 Apr 2018 13:42:55 -0400 Subject: [PATCH 906/993] Update 2018-04-27-release-68.markdown --- source/_posts/2018-04-27-release-68.markdown | 1 + 1 file changed, 1 insertion(+) diff --git a/source/_posts/2018-04-27-release-68.markdown b/source/_posts/2018-04-27-release-68.markdown index 167a264a2a..e8934b6296 100644 --- a/source/_posts/2018-04-27-release-68.markdown +++ b/source/_posts/2018-04-27-release-68.markdown @@ -17,6 +17,7 @@ Highlights: - Ability to _control_ HomeKit - Eufy bulbs +- Breaking MDI icons? ## {% linkable_title New Platforms %} From 033028b8819940641163f65fa7223cf903ef7866 Mon Sep 17 00:00:00 2001 From: cdce8p <30130371+cdce8p@users.noreply.github.com> Date: Mon, 23 Apr 2018 23:39:04 +0200 Subject: [PATCH 907/993] Fix release version (#5236) --- _config.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/_config.yml b/_config.yml index 38d26c045e..36d6b34978 100644 --- a/_config.yml +++ b/_config.yml @@ -139,9 +139,9 @@ social: # Home Assistant release details current_major_version: 0 -current_minor_version: 67 +current_minor_version: 68 current_patch_version: 0 -date_released: 2018-04-13 +date_released: 2018-04-27 # Either # or the anchor link to latest release notes in the blog post. # Must be prefixed with a # and have double quotes around it. From 193ae8a0d01b7f00b74ea83a3d9ea7a300a09ccb Mon Sep 17 00:00:00 2001 From: cdce8p <30130371+cdce8p@users.noreply.github.com> Date: Mon, 23 Apr 2018 23:39:18 +0200 Subject: [PATCH 908/993] Fix release not anchor link (#5235) --- _config.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_config.yml b/_config.yml index 292d32752f..b707c0d52d 100644 --- a/_config.yml +++ b/_config.yml @@ -146,7 +146,7 @@ date_released: 2018-04-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. # Major release: -patch_version_notes: "#" +patch_version_notes: "#release-0671---april-17" # Minor release (Example #release-0431---april-25): # Date we moved to Discourse for comments From b03e6e0ba4aa15d260b8fb769b4401685baad05d Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Tue, 24 Apr 2018 13:35:25 -0400 Subject: [PATCH 909/993] =?UTF-8?q?Google=20Assistant=20=F0=9F=8E=89=20(#5?= =?UTF-8?q?244)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Add blog post * Add video * Update link --- source/_components/google_assistant.markdown | 6 ++- ...4-launch-google-assistant-support.markdown | 44 ++++++++++++++++++ source/cloud/google_assistant.markdown | 1 - source/cloud/index.markdown | 9 ++-- .../google-assistant-home-assistant.png | Bin 0 -> 132675 bytes source/index.html | 8 ++++ 6 files changed, 60 insertions(+), 8 deletions(-) create mode 100644 source/_posts/2018-04-24-launch-google-assistant-support.markdown create mode 100644 source/images/blog/2018-04-google-assistant/google-assistant-home-assistant.png diff --git a/source/_components/google_assistant.markdown b/source/_components/google_assistant.markdown index d1096fd88c..40b0417758 100644 --- a/source/_components/google_assistant.markdown +++ b/source/_components/google_assistant.markdown @@ -13,6 +13,10 @@ featured: true ha_release: 0.56 --- +

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

    + The `google_assistant` component allows you to control things via Google Assistant (on your mobile or tablet) or a Google Home device. The Google Assistant component requires a bit more setup than most due to the way Google requires Assistant Apps to be set up. @@ -134,7 +138,7 @@ If you're not using Linux, you can use sites such as [this one](https://www.brow 1. Create a new project in the [developer console](https://console.actions.google.com/). a. Add/Import project b. Click on `BUILD` on the `Smart home` card - c. Type in your home assistant url: `https://[YOUR HOME ASSISTANT URL:PORT]/api/google_assistant`, replace the `[YOUR HOME ASSISTANT URL:PORT]` with the domain / ip address and the port under which your Home Assistant is reachable. + c. Type in your home assistant url: `https://[YOUR HOME ASSISTANT URL:PORT]/api/google_assistant`, replace the `[YOUR HOME ASSISTANT URL:PORT]` with the domain / ip address and the port under which your Home Assistant is reachable. d. Click `Done`. Then click on `Overview`, which will lead you to the app details screen. 2. You'll need to fill out most of the information on that page, but none of it really matters since you won't be addressing the App directly, only through the Smart Home functionality built into Google Assistant. 3. The final item on that page `Account linking` is required for your app to interact with Home Assistant. diff --git a/source/_posts/2018-04-24-launch-google-assistant-support.markdown b/source/_posts/2018-04-24-launch-google-assistant-support.markdown new file mode 100644 index 0000000000..edf50f2d09 --- /dev/null +++ b/source/_posts/2018-04-24-launch-google-assistant-support.markdown @@ -0,0 +1,44 @@ +--- +layout: post +title: "Our Google Assistant skill is live!" +description: "The Google Assistant integration for Home Assistant Cloud is now available to all." +date: 2018-04-24 00:01:00 +date_formatted: "April 24, 2018" +author: Paulus Schoutsen +author_twitter: balloob +comments: true +categories: Announcement +og_image: /images/blog/2018-04-google-assistant/google-assistant-home-assistant.png +--- + +

    + Home Assistant logo and the Works with the Google Assistant badge +

    + +Guess what? Yep, our Google Assistant Smart Home skill is live! It's a mouthful but it means that you can now control your Home Assistant devices via any Google Assistant enabled device by simply saying things like "Ok Google, turn on the lights". + +To get started: + + - [Enable Home Assistant Cloud](/cloud/#enabling-the-cloud) + - Install our skill for Google Assistant. As of this writing, the link is not live yet: you can find it by opening the Google Home app -> Home Control, tap on the blue + at the bottom right and find Hass.io in the list. + - Optional: [Tweak the devices](/cloud/google_assistant/) that are getting exposed to Google Assistant. + +Things to note: + + - The skill is called Hass.io, but will work with normal Home Assistant too. The name was necessary to avoid confusion between Home Assistant, Google Assistant and Google Home. + - Works with Home Assistant 0.65 or later. + - All message handling is done local and is [open source](https://github.com/home-assistant/home-assistant/blob/dev/homeassistant/components/google_assistant/trait.py). + - If you have an Android device with Google Assistant, you can control your devices too. + - Home Assistant 0.68 will introduce a button to the Cloud config panel to trigger a sync of available devices. + +Home Assistant Cloud is still in open beta and free to use. Open beta period has been extended to June 1. Many thanks to [Quadflight] for providing the Raspberry Pis that Google used for physical testing and thanks to [Arsaboo] for helping with testing. + +
    + +
    + +[Quadflight]: https://github.com/quadflight +[Arsaboo]: https://github.com/arsaboo diff --git a/source/cloud/google_assistant.markdown b/source/cloud/google_assistant.markdown index 155b2356a7..b438e8482c 100644 --- a/source/cloud/google_assistant.markdown +++ b/source/cloud/google_assistant.markdown @@ -7,7 +7,6 @@ sidebar: true comments: false sharing: true footer: true -published: false --- The Google Assistant integration allows users to control the entities via the Home Assistant Smart Home skill for Google Assistant. This means that you can say things like "Ok Google, turn on the kitchen light" to control your local Home Assistant. diff --git a/source/cloud/index.markdown b/source/cloud/index.markdown index 449294d890..24f5cf76aa 100644 --- a/source/cloud/index.markdown +++ b/source/cloud/index.markdown @@ -15,19 +15,16 @@ ha_iot_class: "Cloud Push"

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

    -The Home Assistant Cloud allows you to quickly integrate your local Home Assistant with various cloud services like Amazon Alexa. - -The following integrations are currently available: +The Home Assistant Cloud allows you to quickly integrate your local Home Assistant with various cloud services. The following integrations are currently available: - [Amazon Alexa (Amazon Echo)](/cloud/alexa/) - - + - [Google Assistant (Google Home)](/cloud/google_assistant/) ### {% linkable_title How does it work? %} The Home Assistant Cloud has been designed with security in mind. When you activate the Cloud component, your instance will create a secure connection to the Home Assistant Cloud. There is no need for any further configuration or to expose your instance to the internet. -Integrations like Alexa will deliver messages to our cloud which we will forward to your local instance for processing. We just forward the response back to Alexa. This means that we do not have to store the state of your house in our cloud, we’re just the messenger! +Integrations like Alexa or Google will deliver messages to our cloud which we will forward to your local instance for processing. We just forward the response back. This means that we do not have to store the state of your house in our cloud, we’re just the messenger! You can find a list of frequently asked questions (and their answers) in [this blog post](/blog/2017/12/17/introducing-home-assistant-cloud/#faq). diff --git a/source/images/blog/2018-04-google-assistant/google-assistant-home-assistant.png b/source/images/blog/2018-04-google-assistant/google-assistant-home-assistant.png new file mode 100644 index 0000000000000000000000000000000000000000..a7ec721fbccef043d8040ad7f55e167f67715a5a GIT binary patch literal 132675 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 NuN5^ED&);W{|5uRj0*q& literal 0 HcmV?d00001 diff --git a/source/index.html b/source/index.html index 11729ac796..234bf17108 100644 --- a/source/index.html +++ b/source/index.html @@ -41,6 +41,14 @@ description: Open-source home automation platform running on Python 3. Track and LEARN MORE

    !pTVx{mvwIq&2Qby>rYI%7d0@Mag|3@A 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
    JOF)ekKyPgT#kr;+BsdJ>NO7 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
    IYM>#^z51JbzE#Su~JX3*0VCRaz-{H4yB#By`b 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 literal 0 HcmV?d00001 From 48d08be9078667d31eaa83a3672f7edfa23678ef Mon Sep 17 00:00:00 2001 From: Ryan McLean Date: Mon, 19 Mar 2018 21:26:22 +0000 Subject: [PATCH 651/993] Add Documentation for plex client cleanup options (#4907) * Add Documentation for plex client cleanup options * Added removal option --- source/_components/media_player.plex.markdown | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/source/_components/media_player.plex.markdown b/source/_components/media_player.plex.markdown index ddaf3a611b..ba255c2e1e 100644 --- a/source/_components/media_player.plex.markdown +++ b/source/_components/media_player.plex.markdown @@ -69,6 +69,8 @@ media_player: show_all_controls: false use_custom_entity_ids: true use_episode_art: true + remove_unavailable_clients: true + client_remove_interval: 600 ``` - **entity_namespace** (*Optional*): Prefix for entity ID's. Defaults to `null`. Useful when using overlapping components (ex. Apple TV and Plex components when you have Apple TV's you use as Plex clients). Go from _media_player.playroom2_ to _media_player.plex_playroom_ - **include_non_clients** (*Optional*): Display non-recontrollable clients (ex. remote clients, PlexConnect Apple TV's). Defaults to `false`. @@ -76,6 +78,8 @@ media_player: - **show_all_controls** (*Optional*): Forces all controls to display. Defaults to `false`. Ignores dynamic controls (ex. show volume controls for client A but not for client B) based on detected client capabilities. This option allows you to override this detection if you suspect it to be incorrect. - **use_custom_entity_ids** (*Optional*): Name Entity ID's by client ID's instead of friendly names. Defaults to `false`. HA assigns entity ID's on a first come first serve basis. When you have identically named devices connecting (ex. media_player.plex_web_safari, media_player.plex_web_safari2), you can't reliably distinguish and or predict which device is which. This option avoids this issue by using unique client ID's (ex. media_player.dy4hdna2drhn). - **use_episode_art** (*Optional*): Display TV episode art instead of TV show art. Defaults to `false`. +- **remove_unavailable_clients** (*Optional*): Remove stale plex clients from UI after interval. Defaults to `true`. +- **client_remove_interval** (*Optional*): How long a client is to be unavailable for before it is cleaned up. Defaults to `600 seconds (10min)`. ### {% linkable_title Service `play_media` %} From 58a304401d939ac1fc3ae3b2f44a80081fa563a6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20H=C3=B8yer=20Iversen?= Date: Tue, 20 Mar 2018 09:35:38 +0100 Subject: [PATCH 652/993] Update sensor.tibber.markdown (#4948) * Update sensor.tibber.markdown * :pencil2: Removed some newlines and small other stuff * Update sensor.tibber.markdown * Add raw --- source/_components/sensor.tibber.markdown | 31 +++++++++++++++++++++-- 1 file changed, 29 insertions(+), 2 deletions(-) diff --git a/source/_components/sensor.tibber.markdown b/source/_components/sensor.tibber.markdown index 6ebcc84bcf..81d11c7ac2 100644 --- a/source/_components/sensor.tibber.markdown +++ b/source/_components/sensor.tibber.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Tibber" -description: "Instructions how to integrate Tibber within Home Assistant." +description: "Instructions on how to integrate Tibber within Home Assistant." date: 2017-10-03 17:00 sidebar: true comments: false @@ -13,7 +13,6 @@ ha_release: 0.55 ha_iot_class: "Cloud Polling" --- - The `tibber` sensor provides the current electricity price if you are a [Tibber](https://tibber.com/) customer. To add Tibber to your installation, add the following to your `configuration.yaml` file: @@ -31,3 +30,31 @@ sensor: required: true type: string {% endconfiguration %} + +## {% linkable_title Examples %} + +In this section, you will find some real-life examples of how to use this sensor. + +### {% linkable_title Electricity price %} + +The electricity price can be used to make automations. The sensor has a `max_price` and `min_price` attribute, with max and min price for the current day. Here is an example to get a notification when the price is above 90% of the maximum price for the day: + +{% raw %} +```yaml +- alias: "Electricity price" + trigger: + platform: time + # Matches every hour at 1 minutes past whole + minutes: 1 + seconds: 00 + condition: + condition: template + value_template: '{{ float(states.sensor.electricity_price_hamretunet_10.state) > 0.9 * float(states.sensor.electricity_price_hamretunet_10.attributes.max_price) }}' + action: + - service: notify.pushbullet + data: + title: "Electricity price" + target: "device/daniel_telefon_cat" + message: "The electricity price is now {{ states.sensor.electricity_price_hamretunet_10.state }}" +``` +{% endraw %} From 7814fcd8059d4702f5bd7450100bbd3af6eb58c2 Mon Sep 17 00:00:00 2001 From: Pascal Vizeli Date: Tue, 20 Mar 2018 14:15:25 +0100 Subject: [PATCH 653/993] Update addon_communication.markdown --- source/developers/hassio/addon_communication.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/developers/hassio/addon_communication.markdown b/source/developers/hassio/addon_communication.markdown index 254b0eb2e3..e7ec413029 100644 --- a/source/developers/hassio/addon_communication.markdown +++ b/source/developers/hassio/addon_communication.markdown @@ -17,7 +17,7 @@ There are different ways for communication between add-ons inside Hass.io. We use an internal network that allows to communicate with every add-on, even to/from Home Assistant, by using its name or alias. Only the add-ons which run on the host network are a bit limited. These can talk with all internal add-ons by their name but all other add-on can't address these add-on by name - using an alias works for both! Name/alias are used for communication inside Hass.io. -The name is generated using the following format: `{REPO}_{SLUG}`, e.g., `local_xy` or `3283fh_myaddon`. In this example, `{SLUG}` is defined in an add-ons `config.json`. If an add-on is installed locally, `{REPO}` will be `local`. If the add-on is installed from a Github repository, `{REPO}` is a hashed identifier generated from the GitHub repository's URL (ex: https://github.com/xy/my_hassio_addons). See [here](https://github.com/home-assistant/hassio/blob/587047f9d648b8491dc8eef17dc6777f81938bfd/hassio/addons/utils.py#L17) to understand how this identifier is generated. Note that this identifier is required in certain service calls that use the [Hass.io add-on API](hassio-addon-api). You can view the repository identifiers for all currently installed add-ons via a GET request to the hassio API `addons` endpoint. +The name is generated using the following format: `{REPO}_{SLUG}`, e.g., `local_xy` or `3283fh_myaddon`. In this example, `{SLUG}` is defined in an add-ons `config.json`. You can use this name also as DNS name but you need replace the `_` with `-` to have a valid hostname. If an add-on is installed locally, `{REPO}` will be `local`. If the add-on is installed from a Github repository, `{REPO}` is a hashed identifier generated from the GitHub repository's URL (ex: https://github.com/xy/my_hassio_addons). See [here](https://github.com/home-assistant/hassio/blob/587047f9d648b8491dc8eef17dc6777f81938bfd/hassio/addons/utils.py#L17) to understand how this identifier is generated. Note that this identifier is required in certain service calls that use the [Hass.io add-on API](hassio-addon-api). You can view the repository identifiers for all currently installed add-ons via a GET request to the hassio API `addons` endpoint. Use `hassio` for communication with the internal API. From 6bb1d70db1770380dfea7a9e93a2a974f343d2d0 Mon Sep 17 00:00:00 2001 From: Marc Forth Date: Tue, 20 Mar 2018 14:57:13 +0000 Subject: [PATCH 654/993] Update lets_encrypt.markdown (#4962) * Update lets_encrypt.markdown Converted the DuckDNS section to use the Homeassistant component for background, much easier for new starters, and more in the spirit of keeping things within HA. * Minor changes --- .../ecosystem/certificates/lets_encrypt.markdown | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/source/_docs/ecosystem/certificates/lets_encrypt.markdown b/source/_docs/ecosystem/certificates/lets_encrypt.markdown index 7385496ae3..e428509c77 100644 --- a/source/_docs/ecosystem/certificates/lets_encrypt.markdown +++ b/source/_docs/ecosystem/certificates/lets_encrypt.markdown @@ -195,13 +195,17 @@ In the domains section pick a name for your subdomain, this can be anything you The URL you will be using later to access your Home Assistant instance from outside will be the subdomain you picked, followed by duckdns.org . For our example we will say our URL is examplehome.duckdns.org -On the top left of duckdns.org select the install option. Then pick your operating system from the list. In our example we will use a Raspberry Pi. In the dropdown box select the URL you just created. +Set up Home Assistant to keep your DuckDNS URL and external IP address in sync. In your `configuration.yaml` file add the following: -Duckdns.org will now generate personalised instructions for you to follow so that your device can update their website every time your IP address changes. Carefully follow the instructions given on duckdns.org to set up your device. +```yaml +duckdns: + domain: examplehome + access_token: abcdefgh-1234-abcd-1234-abcdefgh +``` -At the end of the instructions DuckDNS will suggest you set up port forwarding. No need, we have already done this in step 2. +The access token is available on your DuckDNS page. Restart Home Assistant after the change. -What you have now done is set up DuckDNS so that whenever you type examplehome.duckdns.org in to your browser it will convert that to your router's external IP address. Your external IP address will always be up to date because your device running Home Assistant will update DuckDNS every time it changes. +What you have now done is set up DuckDNS so that whenever you type examplehome.duckdns.org in to your browser it will convert that to your router's external IP address. Your external IP address will always be up to date because Homeassistant will update DuckDNS every time it changes. Now type your new URL in to your address bar on your browser with port 8123 on the end: From e0d3ba6aaf4bb8884be0788d782e1b278ed777af Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Wed, 21 Mar 2018 10:17:43 -0700 Subject: [PATCH 655/993] Release 0.65.6 --- _config.yml | 6 +++--- source/_posts/2018-03-09-release-65.markdown | 21 ++++++++++++++++++++ 2 files changed, 24 insertions(+), 3 deletions(-) diff --git a/_config.yml b/_config.yml index 4a90ed5885..d2b0242b76 100644 --- a/_config.yml +++ b/_config.yml @@ -140,13 +140,13 @@ social: # Home Assistant release details current_major_version: 0 current_minor_version: 65 -current_patch_version: 5 -date_released: 2018-03-14 +current_patch_version: 6 +date_released: 2018-03-21 # Either # or the anchor link to latest release notes in the blog post. # Must be prefixed with a # and have double quotes around it. # Major release: -patch_version_notes: "#release-0655---march-14" +patch_version_notes: "#release-0656---march-21" # Minor release (Example #release-0431---april-25): # Date we moved to Discourse for comments diff --git a/source/_posts/2018-03-09-release-65.markdown b/source/_posts/2018-03-09-release-65.markdown index 213ecb8b92..d5a854e66d 100644 --- a/source/_posts/2018-03-09-release-65.markdown +++ b/source/_posts/2018-03-09-release-65.markdown @@ -161,6 +161,14 @@ intent_script: - Avoid Sonos error when joining with self ([@amelchio] - [#13196]) ([media_player.sonos docs]) - Fix input_boolean Google Assistant serialize error ([@balloob] - [#13220]) ([google_assistant docs]) +## {% linkable_title Release 0.65.6 - March 21 %} + +- More robust MJPEG parser. Fixes #13138. ([@PhracturedBlue] - [#13226]) ([camera.proxy docs]) +- Tado: don't reference unset hass var ([@balloob] - [#13237]) ([device_tracker docs]) +- Fix Sonos join/unjoin in scripts ([@amelchio] - [#13248]) ([media_player.sonos docs]) +- Fix Sonos radio stations with ampersand ([@amelchio] - [#13293]) ([media_player.sonos docs]) +- Do not include unavailable entities in Google Assistant SYNC ([@balloob] - [#13358]) ([google_assistant docs]) ([light.demo docs]) + ## {% linkable_title If you need help... %} ...don't hesitate to use our very active [forums](https://community.home-assistant.io/) or join us for a little [chat](https://discord.gg/c5DvZ4e). The release notes have comments enabled but it's preferred if you use the former communication channels. Thanks. @@ -734,3 +742,16 @@ Experiencing issues introduced by this release? Please report them in our [issue [google_assistant docs]: https://home-assistant.io/components/google_assistant/ [homekit docs]: https://home-assistant.io/components/homekit/ [media_player.sonos docs]: https://home-assistant.io/components/media_player.sonos/ +[#13226]: https://github.com/home-assistant/home-assistant/pull/13226 +[#13237]: https://github.com/home-assistant/home-assistant/pull/13237 +[#13248]: https://github.com/home-assistant/home-assistant/pull/13248 +[#13293]: https://github.com/home-assistant/home-assistant/pull/13293 +[#13358]: https://github.com/home-assistant/home-assistant/pull/13358 +[@PhracturedBlue]: https://github.com/PhracturedBlue +[@amelchio]: https://github.com/amelchio +[@balloob]: https://github.com/balloob +[camera.proxy docs]: https://home-assistant.io/components/camera.proxy/ +[device_tracker docs]: https://home-assistant.io/components/device_tracker/ +[google_assistant docs]: https://home-assistant.io/components/google_assistant/ +[light.demo docs]: https://home-assistant.io/components/light.demo/ +[media_player.sonos docs]: https://home-assistant.io/components/media_player.sonos/ From aba21eeca68d02b6b8bd52fbe7fcc3eaeabc415a Mon Sep 17 00:00:00 2001 From: maxclaey Date: Wed, 21 Mar 2018 20:41:45 +0100 Subject: [PATCH 656/993] Update alarm_control_panel.ifttt.markdown (#4970) * Update alarm_control_panel.ifttt.markdown * Update alarm_control_panel.ifttt.markdown --- .../alarm_control_panel.ifttt.markdown | 37 +++++++++++++++++-- 1 file changed, 33 insertions(+), 4 deletions(-) diff --git a/source/_components/alarm_control_panel.ifttt.markdown b/source/_components/alarm_control_panel.ifttt.markdown index 13f67bafc5..9fcd58e2d3 100644 --- a/source/_components/alarm_control_panel.ifttt.markdown +++ b/source/_components/alarm_control_panel.ifttt.markdown @@ -31,6 +31,10 @@ alarm_control_panel: - platform: ifttt name: YOUR_ALARM_NAME code: YOUR_ALARM_CODE + event_arm_away: YOUR_ARM_AWAY_EVENT + event_arm_home: YOUR_ARM_HOME_EVENT + event_arm_night: YOUR_ARM_NIGHT_EVENT + event_disarm: YOUR_DISARM_EVENT ```

    +
    +

    Ok Google, turn on the AC

    + Use Google Assistant to control Home Assistant. + + +
    Read our founder's vision for the perfect home automation From 386307868d5b9b59e92abe993a23b492cf82b65a Mon Sep 17 00:00:00 2001 From: Matthew Rollings Date: Tue, 24 Apr 2018 19:18:25 +0100 Subject: [PATCH 910/993] Dyson instructions unclear about Device ID / Serial Number (#5243) Modified text to explain the device_id needs the serial number for the device, not the name of the device as given in the example. --- source/_components/dyson.markdown | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/source/_components/dyson.markdown b/source/_components/dyson.markdown index c090862421..7c0e1ca2f3 100644 --- a/source/_components/dyson.markdown +++ b/source/_components/dyson.markdown @@ -26,9 +26,9 @@ dyson: password: YOUR_DYSON_PASSWORD language: YOUR_DYSON_ACCOUNT_LANGUGAGE devices: - - device_id: DEVICE_ID_1 # eg: Pure Cool Link device + - device_id: DEVICE_ID_1 # eg. Serial number: XXX-XX-XXXXXXXX device_ip: DEVICE_ID_1 - - device_id: DEVICE_ID_2 # eg: Eye 360 robot vacuum + - device_id: DEVICE_ID_2 device_ip: DEVICE_ID_2 ``` @@ -38,7 +38,7 @@ Configuration variables: - **password** (*Required*): Dyson account password. - **language** (*Required*): Dyson account language country code. Known working codes: `FR`, `NL`, `GB`, `AU`. But others codes should work. - **devices** (*Optional*): List of devices. - - **device_id** (*Required*): Device ID. Available in the mobiles applications (*Settings* page). + - **device_id** (*Required*): Device ID. The Serial Number of the device. Found in the mobiles applications device settings page. - **device_ip** (*Required*): Device IP address. `devices` list is optional but you'll have to provide them if discovery is not working (warnings in the logs and the devices are not available in Home Assistant web interface). From f5cfc55087f52fde54e370aab8fb2ef371dbf34f Mon Sep 17 00:00:00 2001 From: Jeremy Klein Date: Tue, 24 Apr 2018 11:40:44 -0700 Subject: [PATCH 911/993] Update google_assistant.markdown (#5241) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Since RoomHints are now live in the Google Assistant API, I’m removing the “not yet” disclaimer. --- source/_components/google_assistant.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/google_assistant.markdown b/source/_components/google_assistant.markdown index 40b0417758..9c92c77e77 100644 --- a/source/_components/google_assistant.markdown +++ b/source/_components/google_assistant.markdown @@ -106,7 +106,7 @@ entity_config: required: false type: list room: - description: Allows for associating this device to a Room in Google Assistant. This is currently non-functional, but will be enabled in the near future. + description: Allows for associating this device to a Room in Google Assistant. required: false type: string {% endconfiguration %} From e6c69b0a48936e63be87c920ca5ae9a6663aefa1 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Tue, 24 Apr 2018 14:52:46 -0400 Subject: [PATCH 912/993] Update google_assistant.markdown --- source/cloud/google_assistant.markdown | 5 ----- 1 file changed, 5 deletions(-) diff --git a/source/cloud/google_assistant.markdown b/source/cloud/google_assistant.markdown index b438e8482c..1cdced7984 100644 --- a/source/cloud/google_assistant.markdown +++ b/source/cloud/google_assistant.markdown @@ -37,7 +37,6 @@ cloud: aliases: - bright lights - entry lights - type: 'action.devices.types.LIGHT' ``` {% configuration cloud %} @@ -85,9 +84,5 @@ google_actions: description: Aliases that can also be used to refer to this entity required: false type: list - type: - description: Override the type of the entity in Google Assistant. [List of available types](https://developers.google.com/actions/smarthome/guides/) - required: false - type: string {% endconfiguration %} From ea74a32b400f4c3c5de24e56ffe51e41cb5f1b28 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Tue, 24 Apr 2018 14:53:25 -0400 Subject: [PATCH 913/993] Update google_assistant.markdown --- source/_components/google_assistant.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/google_assistant.markdown b/source/_components/google_assistant.markdown index 9c92c77e77..f196288c7a 100644 --- a/source/_components/google_assistant.markdown +++ b/source/_components/google_assistant.markdown @@ -14,7 +14,7 @@ ha_release: 0.56 ---

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

    The `google_assistant` component allows you to control things via Google Assistant (on your mobile or tablet) or a Google Home device. From 7bfe31cbac81b23764066ed41a8d988384a78f01 Mon Sep 17 00:00:00 2001 From: Matt Farmer Date: Tue, 24 Apr 2018 12:00:05 -0700 Subject: [PATCH 914/993] Fix typo in sabnzbd documentation (#5230) --- source/_components/sensor.sabnzbd.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/sensor.sabnzbd.markdown b/source/_components/sensor.sabnzbd.markdown index 840eb5cd08..27766435fd 100644 --- a/source/_components/sensor.sabnzbd.markdown +++ b/source/_components/sensor.sabnzbd.markdown @@ -68,7 +68,7 @@ Note that this will create the following sensors: - sensor.sabnzbd_left - sensor.sabnzbd_disk - sensor.sabnzbd_disk_free - - sensor.sabnzdb_queue_count + - sensor.sabnzbd_queue_count ``` As always, you can determine the names of sensors by looking at the dev-state page `< >` in the web interface. From 5f7f542f680f5e194b156482a8ca54eaca34d687 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Tue, 24 Apr 2018 23:30:23 -0400 Subject: [PATCH 915/993] Eufy update dates --- source/_components/eufy.markdown | 2 +- source/_components/light.eufy.markdown | 2 +- source/_components/switch.eufy.markdown | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/source/_components/eufy.markdown b/source/_components/eufy.markdown index c11870e401..294dd26902 100644 --- a/source/_components/eufy.markdown +++ b/source/_components/eufy.markdown @@ -2,7 +2,7 @@ layout: page title: "Eufy" description: "Instructions on how to integrate Eufy devices into Home Assistant." -date: 2018-05-09 19:00 +date: 2018-04-09 19:00 sidebar: true comments: false sharing: true diff --git a/source/_components/light.eufy.markdown b/source/_components/light.eufy.markdown index 773d99f4aa..872526e1ed 100644 --- a/source/_components/light.eufy.markdown +++ b/source/_components/light.eufy.markdown @@ -2,7 +2,7 @@ layout: page title: "EufyLights" description: "Instructions on how to integrate Eufy LED lights into Home Assistant." -date: 2018-05-09 19:00 +date: 2018-04-09 19:00 sidebar: true comments: false sharing: true diff --git a/source/_components/switch.eufy.markdown b/source/_components/switch.eufy.markdown index 22e56ae38b..0bfbae81e5 100644 --- a/source/_components/switch.eufy.markdown +++ b/source/_components/switch.eufy.markdown @@ -2,7 +2,7 @@ layout: page title: "EufySwitch" description: "Instructions on how to integrate Eufy switches into Home Assistant." -date: 2018-05-09 19:00 +date: 2018-04-09 19:00 sidebar: true comments: false sharing: true From 0b2a94385de4b4cae7c7ac4ed80506327d0366ba Mon Sep 17 00:00:00 2001 From: Sebastian Muszynski Date: Wed, 25 Apr 2018 07:05:12 +0200 Subject: [PATCH 916/993] Air Conditioning Companion V3 (acpartner.v3) support added (#5083) --- source/_components/xiaomi_aqara.markdown | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/source/_components/xiaomi_aqara.markdown b/source/_components/xiaomi_aqara.markdown index 2bf6fdb5e3..28f40d3f8c 100644 --- a/source/_components/xiaomi_aqara.markdown +++ b/source/_components/xiaomi_aqara.markdown @@ -18,6 +18,8 @@ The `xiaomi_aqara` component allows you to integrate [Xiaomi](http://www.mi.com/ #### {% linkable_title Supported Devices %} +- Xiaomi Aqara Gateway (lumi.gateway.v2, lumi.gateway.v3) +- Aqara Air Conditioning Companion (lumi.acpartner.v3) - Temperature and Humidity Sensor (1st and 2nd generation) - Motion Sensor (1st and 2nd generation) - Door and Window Sensor (1st and 2nd generation) @@ -42,8 +44,8 @@ The `xiaomi_aqara` component allows you to integrate [Xiaomi](http://www.mi.com/ - Gateway Radio - Gateway Button -- Aqara Air Conditioning Companion -- Aqara Intelligent Air Conditioner Controller Hub +- Xiaomi Mi Air Conditioning Companion (lumi.acpartner.v2) +- Aqara Intelligent Air Conditioner Controller Hub (lumi.acpartner.v1) - Decoupled mode of the Aqara Wall Switches (Single & Double) - Additional alarm events of the Gas and Smoke Detector: Analog alarm, battery fault alarm (smoke detector only), sensitivity fault alarm, I2C communication failure From 0b948617b99cde82cabd88611b1c0119e692c6ef Mon Sep 17 00:00:00 2001 From: cdce8p <30130371+cdce8p@users.noreply.github.com> Date: Wed, 25 Apr 2018 08:48:57 +0200 Subject: [PATCH 917/993] Updated release blog post for 0.68.0b1 (rc) (#5246) --- source/_posts/2018-04-27-release-68.markdown | 35 ++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/source/_posts/2018-04-27-release-68.markdown b/source/_posts/2018-04-27-release-68.markdown index e8934b6296..cc616913a5 100644 --- a/source/_posts/2018-04-27-release-68.markdown +++ b/source/_posts/2018-04-27-release-68.markdown @@ -30,6 +30,7 @@ Highlights: - Add blackbird media player component ([@koolsb] - [#13549]) ([media_player.blackbird docs]) (new-platform) - Add support for Sensirion SHT31 temperature/humidity sensor ([@viorels] - [#12952]) ([sensor.sht31 docs]) (new-platform) - Upgraded miflora library to version 0.4.0 ([@ChristianKuehnel] - [#14005]) ([sensor.lmsensor docs]) ([sensor.miflora docs]) (new-platform) +- Qwikswitch binary sensors ([@kellerza] - [#14008]) ([qwikswitch docs]) ([binary_sensor.qwikswitch docs]) ([sensor.qwikswitch docs]) (beta fix) (new-platform) ## {% linkable_title New Features %} @@ -39,6 +40,15 @@ Highlights: - Support Garage Doors in HomeKit ([@marthoc] - [#13796]) ([homekit docs]) (new-feature) - Support basic covers with open/close/stop services HomeKit ([@nickw444] - [#13819]) ([homekit docs]) (new-feature) +## {% linkable_title Beta Fixes %} + +- Qwikswitch binary sensors ([@kellerza] - [#14008]) ([qwikswitch docs]) ([binary_sensor.qwikswitch docs]) ([sensor.qwikswitch docs]) (beta fix) (new-platform) +- Order the output of the automation editor ([@balloob] - [#14019]) ([config docs]) (beta fix) +- HomeKit Alarm Control Panel Code Exception Fix ([@schmittx] - [#14025]) ([homekit docs]) (beta fix) +- Revert cast platform polling mode ([@OttoWinter] - [#14027]) ([media_player.cast docs]) (beta fix) +- Handle HomeKit configuration failure more cleanly ([@mjg59] - [#14041]) ([homekit_controller docs]) (beta fix) +- Update device classes for contact sensor HomeKit ([@marthoc] - [#14051]) ([homekit docs]) (beta fix) + ## {% linkable_title If you need help... %} ...don't hesitate to use our very active [forums](https://community.home-assistant.io/) or join us for a little [chat](https://discord.gg/c5DvZ4e). The release notes have comments enabled but it's preferred if you use the former communication channels. Thanks. @@ -161,6 +171,12 @@ Experiencing issues introduced by this release? Please report them in our [issue - Tibber available ([@Danielhiversen] - [#13865]) ([sensor.tibber docs]) - Upgrade pylutron-caseta to 0.5.0 to reestablish connections ([@rohankapoorcom] - [#14013]) ([lutron_caseta docs]) - Add sensor device classes ([@balloob] - [#14010]) ([sensor docs]) ([sensor.ecobee docs]) ([sensor.linux_battery docs]) ([sensor.nest docs]) +- Qwikswitch binary sensors ([@kellerza] - [#14008]) ([qwikswitch docs]) ([binary_sensor.qwikswitch docs]) ([sensor.qwikswitch docs]) (beta fix) (new-platform) +- Order the output of the automation editor ([@balloob] - [#14019]) ([config docs]) (beta fix) +- HomeKit Alarm Control Panel Code Exception Fix ([@schmittx] - [#14025]) ([homekit docs]) (beta fix) +- Revert cast platform polling mode ([@OttoWinter] - [#14027]) ([media_player.cast docs]) (beta fix) +- Handle HomeKit configuration failure more cleanly ([@mjg59] - [#14041]) ([homekit_controller docs]) (beta fix) +- Update device classes for contact sensor HomeKit ([@marthoc] - [#14051]) ([homekit docs]) (beta fix) [#10688]: https://github.com/home-assistant/home-assistant/pull/10688 [#12224]: https://github.com/home-assistant/home-assistant/pull/12224 @@ -443,3 +459,22 @@ Experiencing issues introduced by this release? Please report them in our [issue [vacuum.xiaomi_miio docs]: /components/vacuum.xiaomi_miio/ [weather.yweather docs]: /components/weather.yweather/ [zha docs]: /components/zha/ +[#14008]: https://github.com/home-assistant/home-assistant/pull/14008 +[#14019]: https://github.com/home-assistant/home-assistant/pull/14019 +[#14025]: https://github.com/home-assistant/home-assistant/pull/14025 +[#14027]: https://github.com/home-assistant/home-assistant/pull/14027 +[#14041]: https://github.com/home-assistant/home-assistant/pull/14041 +[#14051]: https://github.com/home-assistant/home-assistant/pull/14051 +[@OttoWinter]: https://github.com/OttoWinter +[@balloob]: https://github.com/balloob +[@kellerza]: https://github.com/kellerza +[@marthoc]: https://github.com/marthoc +[@mjg59]: https://github.com/mjg59 +[@schmittx]: https://github.com/schmittx +[binary_sensor.qwikswitch docs]: /components/binary_sensor.qwikswitch/ +[config docs]: /components/config/ +[homekit docs]: /components/homekit/ +[homekit_controller docs]: /components/homekit_controller/ +[media_player.cast docs]: /components/media_player.cast/ +[qwikswitch docs]: /components/qwikswitch/ +[sensor.qwikswitch docs]: /components/sensor.qwikswitch/ From d771d839f3eec247993ad40ebb4c6296d56e981b Mon Sep 17 00:00:00 2001 From: Mitko Masarliev Date: Wed, 25 Apr 2018 21:03:51 +0300 Subject: [PATCH 918/993] domain expiry (#5242) * domain expiry * config * config --- .../_components/sensor.domain_expiry.markdown | 37 +++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 source/_components/sensor.domain_expiry.markdown diff --git a/source/_components/sensor.domain_expiry.markdown b/source/_components/sensor.domain_expiry.markdown new file mode 100644 index 0000000000..a70306909a --- /dev/null +++ b/source/_components/sensor.domain_expiry.markdown @@ -0,0 +1,37 @@ +--- +layout: page +title: "Domain Expiry" +description: "Instructions on how to set up Domain expiry sensors within Home Assistant." +date: 2018-04-24 14:14 +sidebar: true +comments: false +sharing: true +footer: true +logo: home-assistant.png +ha_category: System Monitor +ha_release: 0.69 +ha_iot_class: "depends" +--- + +The `domain_expiry` sensor gets whois information about domain and displays the expiry in days. + +To add the Domain Expiry sensor to your installation, add these options to `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +sensor: + - platform: domain_expiry + domain: home-assistant.io +``` + +{% configuration %} +domain: + description: Domain name to track + required: true + type: string +name: + description: The friendly name for the certificate. + required: false + type: string + default: Domain Expiry +{% endconfiguration %} \ No newline at end of file From a83fd1d874b57f8ad35ab2453510747bbd52ebc8 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Thu, 26 Apr 2018 09:11:56 -0400 Subject: [PATCH 919/993] Update 2018-04-24-launch-google-assistant-support.markdown --- .../_posts/2018-04-24-launch-google-assistant-support.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_posts/2018-04-24-launch-google-assistant-support.markdown b/source/_posts/2018-04-24-launch-google-assistant-support.markdown index edf50f2d09..7a263f9682 100644 --- a/source/_posts/2018-04-24-launch-google-assistant-support.markdown +++ b/source/_posts/2018-04-24-launch-google-assistant-support.markdown @@ -29,7 +29,7 @@ To get started: Things to note: - The skill is called Hass.io, but will work with normal Home Assistant too. The name was necessary to avoid confusion between Home Assistant, Google Assistant and Google Home. - - Works with Home Assistant 0.65 or later. + - Works with Home Assistant 0.65.6 or later. - All message handling is done local and is [open source](https://github.com/home-assistant/home-assistant/blob/dev/homeassistant/components/google_assistant/trait.py). - If you have an Android device with Google Assistant, you can control your devices too. - Home Assistant 0.68 will introduce a button to the Cloud config panel to trigger a sync of available devices. From 80b268cd65cbf6da6defd860f0c4b2ead0d573b9 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Thu, 26 Apr 2018 11:14:55 -0400 Subject: [PATCH 920/993] Extract developer site (#5249) * Extract developer site * Fix title in sidebar * Update dev section reference * Update edit in github link on help page --- sass/custom/_paulus.scss | 32 +- .../asides/developers_navigation.html | 142 ----- source/_includes/asides/help_navigation.html | 33 ++ source/_includes/custom/footer.html | 32 +- source/_includes/custom/navigation.html | 1 - source/_includes/site/sidebar.html | 4 +- source/_layouts/page.html | 1 + source/developers/add_new_platform.markdown | 27 +- source/developers/api.markdown | 13 +- source/developers/architecture.markdown | 32 +- .../architecture_components.markdown | 58 +- source/developers/asyncio.markdown | 19 +- source/developers/asyncio_101.markdown | 12 +- .../asyncio_categorizing_functions.markdown | 71 +-- source/developers/asyncio_misc.markdown | 14 +- .../asyncio_working_with_async.markdown | 120 +--- .../developers/code_review_component.markdown | 28 +- .../developers/code_review_platform.markdown | 70 +-- .../component_deps_and_reqs.markdown | 35 +- .../developers/component_discovery.markdown | 52 +- source/developers/component_events.markdown | 4 +- .../component_generic_discovery.markdown | 69 +-- source/developers/component_loading.markdown | 17 +- source/developers/component_states.markdown | 14 +- .../developers/component_visibility.markdown | 13 +- .../developers/creating_components.markdown | 19 +- source/developers/development.markdown | 23 +- source/developers/development_101.markdown | 49 +- .../development_catching_up.markdown | 33 +- .../developers/development_checklist.markdown | 12 +- source/developers/development_config.markdown | 27 +- .../development_environment.markdown | 102 +--- source/developers/development_events.markdown | 54 +- .../development_guidelines.markdown | 73 +-- .../development_hass_object.markdown | 29 +- .../developers/development_services.markdown | 47 +- source/developers/development_states.markdown | 132 +---- .../development_submitting.markdown | 39 +- .../developers/development_testing.markdown | 68 +-- .../development_validation.markdown | 79 +-- source/developers/frontend.markdown | 94 +--- source/developers/frontend_add_card.markdown | 20 +- .../frontend_add_more_info.markdown | 15 +- .../frontend_creating_custom_panels.markdown | 81 +-- .../frontend_creating_custom_ui.markdown | 88 +-- .../hassio/addon_communication.markdown | 32 +- .../developers/hassio/addon_config.markdown | 198 +------ .../hassio/addon_development.markdown | 14 +- .../hassio/addon_presentation.markdown | 45 +- .../hassio/addon_publishing.markdown | 56 +- .../hassio/addon_repository.markdown | 28 +- .../developers/hassio/addon_testing.markdown | 28 +- .../developers/hassio/addon_tutorial.markdown | 199 +------ .../developers/hassio/architecture.markdown | 30 +- source/developers/hassio/debugging.markdown | 46 +- source/developers/helpers.markdown | 18 +- source/developers/index.markdown | 17 +- .../developers/intent/conversation.markdown | 19 +- source/developers/intent/firing.markdown | 51 +- source/developers/intent/handling.markdown | 41 +- source/developers/intent/index.markdown | 29 +- .../backend_localization.markdown | 42 +- .../custom_component_localization.markdown | 11 +- .../internationalization/index.markdown | 10 +- .../internationalization/translation.markdown | 43 +- source/developers/maintenance.markdown | 44 +- source/developers/multiple_instances.markdown | 37 +- .../platform_example_light.markdown | 116 +--- .../platform_example_sensor.markdown | 58 +- source/developers/python_api.markdown | 228 +------- source/developers/releasing.markdown | 66 +-- source/developers/rest_api.markdown | 522 +----------------- source/developers/server_sent_events.markdown | 65 +-- source/developers/websocket_api.markdown | 350 +----------- source/help/index.markdown | 8 +- 75 files changed, 282 insertions(+), 4166 deletions(-) delete mode 100644 source/_includes/asides/developers_navigation.html create mode 100644 source/_includes/asides/help_navigation.html diff --git a/sass/custom/_paulus.scss b/sass/custom/_paulus.scss index 2a9e1fb4eb..c64bdb7da2 100644 --- a/sass/custom/_paulus.scss +++ b/sass/custom/_paulus.scss @@ -4,6 +4,10 @@ $primary-color: #049cdb; .site-header { position: relative; + + .site-title { + font-weight: normal; + } } .search-container { @@ -377,18 +381,26 @@ p.note { } .copyright { - text-align: center; + text-align: left; - i { - font-size: 3em; - margin-right: 8px; - position: relative; - top: -5px; + .company { + .title { + font-size: 1.5em; + } + + img { + vertical-align: middle; + } + + i { + font-size: 2em; + padding: 0 5px; + } } - .credit { - text-align: left; - display: inline-block; - font-size: .8em; + + ul { + margin: 0; + list-style: none; } } diff --git a/source/_includes/asides/developers_navigation.html b/source/_includes/asides/developers_navigation.html deleted file mode 100644 index 2d770cb7a1..0000000000 --- a/source/_includes/asides/developers_navigation.html +++ /dev/null @@ -1,142 +0,0 @@ -
    - {% include edit_github.html %} - -
    -

    Development Guide

    - -
    -
    diff --git a/source/_includes/asides/help_navigation.html b/source/_includes/asides/help_navigation.html new file mode 100644 index 0000000000..458a6a9385 --- /dev/null +++ b/source/_includes/asides/help_navigation.html @@ -0,0 +1,33 @@ +
    + {% include edit_github.html %} + +
    +

     

    +
    +
    +
    diff --git a/source/_includes/custom/footer.html b/source/_includes/custom/footer.html index b07ee5bcf8..1a2e590320 100644 --- a/source/_includes/custom/footer.html +++ b/source/_includes/custom/footer.html @@ -1,13 +1,27 @@ -
    Contact us at hello@home-assistant.io (no support!).
    Website powered by Jekyll and the Oscalite theme.
    - Hosted by GitHub and served by CloudFlare. + Hosted by Netlify.

    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%0AwIqNb55L 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Ν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

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

    diff --git a/source/hassio/installation.markdown b/source/hassio/installation.markdown index cb752fe2a4..be34f95a30 100644 --- a/source/hassio/installation.markdown +++ b/source/hassio/installation.markdown @@ -21,7 +21,7 @@ Hass.io images are available for all available Raspberry Pi and Intel NUC platfo - Insert SD card to Raspberry Pi and turn it on. On first boot, it downloads the latest version of Home Assistant which takes ~20 minutes (slower/faster depending on the platform).

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

    @@ -42,7 +42,7 @@ curl -sL https://raw.githubusercontent.com/home-assistant/hassio-build/master/in ```

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

    A detailed guide about running Hass.io as a virtual machine is available in the [blog](/blog/2017/11/29/hassio-virtual-machine/). diff --git a/source/hassio/installing_third_party_addons.markdown b/source/hassio/installing_third_party_addons.markdown index 0bf6cb3166..1d320586fa 100644 --- a/source/hassio/installing_third_party_addons.markdown +++ b/source/hassio/installing_third_party_addons.markdown @@ -16,7 +16,7 @@ https://github.com/home-assistant/hassio-addons-example ```

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

    diff --git a/source/hassio/run_local.markdown b/source/hassio/run_local.markdown index 6dbd4781bf..311098aa41 100644 --- a/source/hassio/run_local.markdown +++ b/source/hassio/run_local.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Run local scripts" -description: "Instructions on how-to run local script for Home Assistant." +description: "Instructions on how to run a local script for Home Assistant." date: 2017-04-30 13:28 sidebar: true comments: false @@ -72,6 +72,7 @@ RUN apk --no-cache add jq mosquitto-clients ``` Now we can process it with `run.sh`: + ```bash #!/bin/bash set -e diff --git a/source/hassio/zwave.markdown b/source/hassio/zwave.markdown index 3be0947a5f..4ba8aed793 100644 --- a/source/hassio/zwave.markdown +++ b/source/hassio/zwave.markdown @@ -31,12 +31,12 @@ zwave: usb_path: /dev/ttyAMA0 ``` -### HUSBZB-1: +### HUSBZB-1 ```yaml zwave: usb_path: /dev/ttyUSB0 - + zha: usb_path: /dev/ttyUSB1 database_path: /config/zigbee.db diff --git a/source/help/index.markdown b/source/help/index.markdown index 36173302df..4ad053d851 100644 --- a/source/help/index.markdown +++ b/source/help/index.markdown @@ -11,13 +11,13 @@ footer: true There are various ways to get in touch with the Home Assistant community. It doesn't matter if you have a question, need help, want to request a feature, or just say 'Hi'. -### {% linkable_title Communication channels %} +### {% linkable_title Communication channels %} - - [Forum][forum] - - [Discord Chat Server][discord] for general Home Assistant discussions and questions. - - Follow us on [Twitter][twitter], use [@home_assistant][twitter] - - Join the [Google+ community][google-plus] - - Join the [Reddit subreddit][reddit] in [/r/homeassistant][reddit] +- [Forum][forum] +- [Discord Chat Server][discord] for general Home Assistant discussions and questions. +- Follow us on [Twitter][twitter], use [@home_assistant][twitter] +- Join the [Google+ community][google-plus] +- Join the [Reddit subreddit][reddit] in [/r/homeassistant][reddit] ### {% linkable_title Bugs, Feature requests, and alike %} @@ -38,7 +38,7 @@ Have you found an issue in your Home Assistant installation? Please report it. R - [Home Assistant - Erweiterungen (Platforms/Components)](https://github.com/home-assistant/home-assistant-assets/tree/master/german/2016-puzzle) at [Puzzle ITC](https://www.puzzle.ch/de/) - December 2016 - [Automating Your Life - Home Automation](http://slides.com/teagan42/life_automation#/) at Develop Denver 2016 - August - [Building Online Communities: Home Assistant](https://medium.com/@gitter/building-online-communities-home-assistant-8818dff671ad#.och4x4rhx) - July 2016 -- [Home Assistant Support 101 - Getting around in Home Assistant](https://www.youtube.com/watch?v=dRfk9JAlPJk) ([Slides](https://docs.google.com/presentation/d/1PUnOpeFZxNj4LEjaohGqH_1hOGQGuS5yRHD1ThHr6nk/edit?usp=sharing)) - June 2016 +- [Home Assistant Support 101 - Getting around in Home Assistant](https://www.youtube.com/watch?v=dRfk9JAlPJk) ([Slides](https://docs.google.com/presentation/d/1PUnOpeFZxNj4LEjaohGqH_1hOGQGuS5yRHD1ThHr6nk/edit?usp=sharing)) - June 2016 - [Awaken your home: Python and the Internet of Things](https://www.youtube.com/watch?v=Cfasc9EgbMU&list=PLKsVm4cWHDQB9JBcD7_ZfNcvC6xx47QHT&index=1) at PyCon 2016 - June 2016 - [Automating your Home with Home Assistant](https://www.youtube.com/watch?v=4-6rTwKl6ww&list=PLKsVm4cWHDQB9JBcD7_ZfNcvC6xx47QHT&index=2) at OpenIoT 2016 - March 2016 @@ -76,7 +76,7 @@ Don't miss the regular [Home Assistant podcasts](https://hasspodcast.io/). ### {% linkable_title Roadmap %} -There is no explicit roadmap available but the public [tracker](https://www.pivotaltracker.com/n/projects/1250084) can give you some insight into what is going on. +There is no explicit roadmap available, but the public [tracker](https://www.pivotaltracker.com/n/projects/1250084) can give you some insight into what is going on. [forum]: https://community.home-assistant.io/ [twitter]: https://twitter.com/home_assistant diff --git a/source/help/talking-points.markdown b/source/help/talking-points.markdown index 24f587f392..040bd3ad0b 100644 --- a/source/help/talking-points.markdown +++ b/source/help/talking-points.markdown @@ -17,5 +17,3 @@ People are starting to present Home Assistant at meetings and get-togethers. Bel - Control all your devices from a single, mobile-friendly interface - Written in Python3 with 94% test coverage - Active and helpful community - - diff --git a/source/help/trivia.markdown b/source/help/trivia.markdown index 64089ecf5f..78c735ea8f 100644 --- a/source/help/trivia.markdown +++ b/source/help/trivia.markdown @@ -27,7 +27,7 @@ The current logo was created by [Jeremy Geltman](http://jeremygeltman.com/). Fur Home Assistant is open source software and available under the [MIT](https://opensource.org/licenses/MIT) license. -### {% linkable_title Numbers %} +### {% linkable_title Numbers %} This sections just contains some random numbers of the Home Assistant eco-system. Sorry, only the main repository counts. @@ -36,10 +36,10 @@ This sections just contains some random numbers of the Home Assistant eco-system | [Gitter.io](https://discord.gg/c5DvZ4e) | 334 | 2367 | | [Forum posts](https://community.home-assistant.io/) | 352 | 33004 | | [Forum topics](https://community.home-assistant.io/) | 83 | 4863 | -| [Forum members](https://community.home-assistant.io/) | 92 | 3931 | -| [Github stars](https://github.com/home-assistant/home-assistant/stargazers) | 2519 | 5239 | +| [Forum members](https://community.home-assistant.io/) | 92 | 3931 | +| [Github stars](https://github.com/home-assistant/home-assistant/stargazers) | 2519 | 5239 | | [Github forks](https://github.com/home-assistant/home-assistant/network) | 374 | 1424 | -| Page views [ha.io](https://home-assistant.io) | 190,271 | 1,284,855 | +| Page views [ha.io](https://home-assistant.io) | 190,271 | 1,284,855 | ### {% linkable_title Commit per year %} @@ -56,7 +56,7 @@ More details and statistics can be found on [Github](https://github.com/home-ass ### {% linkable_title First commit %} -The first commit in `git` was made on Sep 17, 2013 by [Paulus Schoutsen](https://github.com/balloob). +The first commit in `git` was made on Sep 17, 2013 by [Paulus Schoutsen](https://github.com/balloob). ```bash commit d55e4d53cccc9123d03f45c53441e7cbfc58e515 diff --git a/source/privacy/index.markdown b/source/privacy/index.markdown index fc63d2812b..706b1e67c8 100644 --- a/source/privacy/index.markdown +++ b/source/privacy/index.markdown @@ -11,45 +11,55 @@ footer: true Your privacy is critically important to us. At Home Assistant, we have a few fundamental principles: - - We don’t ask you for personal information unless we truly need it. (We can’t stand services that ask you for things like your gender or income level for no apparent reason.) - - We don’t share your personal information with anyone except to comply with the law, develop our products, or protect our rights. - - We don’t store personal information on our servers unless required for the ongoing operation of one of our services. +- We don’t ask you for personal information unless we truly need it. (We can’t stand services that ask you for things like your gender or income level for no apparent reason.) +- We don’t share your personal information with anyone except to comply with the law, develop our products, or protect our rights. +- We don’t store personal information on our servers unless required for the ongoing operation of one of our services. If you have questions about deleting or correcting your personal data please contact our support team. ## {% linkable_title Website Visitors %} + Like most website operators, Home Assistant collects non-personally-identifying information of the sort that web browsers and servers typically make available, such as the browser type, language preference, referring site, and the date and time of each visitor request. Home Assistant’s purpose in collecting non-personally identifying information is to better understand how Home Assistant’s visitors use its website. From time to time, Home Assistant may release non-personally-identifying information in the aggregate, e.g., by publishing a report on trends in the usage of its website. Home Assistant also collects potentially personally-identifying information like Internet Protocol (IP) addresses for logged in users and for users leaving comments on the blog or forums. Home Assistant only discloses logged in user and commenter IP addresses under the same circumstances that it uses and discloses personally-identifying information as described below. ## {% linkable_title Gathering of Personally-Identifying Information %} + Certain visitors to Home Assistant’s websites choose to interact with Home Assistant in ways that require Home Assistant to gather personally-identifying information. The amount and type of information that Home Assistant gathers depends on the nature of the interaction. For example, we ask visitors who create a forum account to provide a username and an email address. Those who engage in transactions with Home Assistant are asked to provide additional information, including as necessary the personal and financial information required to process those transactions. In each case, Home Assistant collects such information only insofar as is necessary or appropriate to fulfill the purpose of the visitor’s interaction with Home Assistant. Home Assistant does not disclose personally-identifying information other than as described below. And visitors can always refuse to supply personally-identifying information, with the caveat that it may prevent them from engaging in certain website-related activities. ## {% linkable_title Aggregated Statistics %} + Home Assistant may collect statistics about the behavior of visitors to its websites. For instance, Home Assistant may monitor the most popular component documentation. Home Assistant may display this information publicly or provide it to others. However, Home Assistant does not disclose personally-identifying information other than as described below. ## {% linkable_title Information We Collect from Other Sources %} + With your authorization, we may also obtain information about you from other sources. For example, if you create or log into your WordPress.com account through a social media service (like Facebook or Google) or if you connect your account to a social media service, we will receive information from that service (such as your username, basic profile information, and friends list) via the authorization procedures used by that service. The information we receive depends on which services you authorize and any options that are available. ## {% linkable_title Protection of Certain Personally-Identifying Information %} + Home Assistant discloses potentially personally-identifying and personally-identifying information only to those of its employees, contractors and affiliated organizations that (i) need to know that information in order to process it on Home Assistant’s behalf or to provide services available at Home Assistant’s websites, and (ii) that have agreed not to disclose it to others. Some of those employees, contractors and affiliated organizations may be located outside of your home country; by using Home Assistant’s websites, you consent to the transfer of such information to them. Home Assistant will not rent or sell potentially personally-identifying and personally-identifying information to anyone. Other than to its employees, contractors and affiliated organizations, as described above, Home Assistant discloses potentially personally-identifying and personally-identifying information only in response to a subpoena, court order or other governmental request, or when Home Assistant believes in good faith that disclosure is reasonably necessary to protect the property or rights of Home Assistant, third parties or the public at large. If you are a registered user of an Home Assistant website and have supplied your email address, Home Assistant may occasionally send you an email to tell you about new features, solicit your feedback, or just keep you up to date with what’s going on with Home Assistant and our products. We primarily use our various product blogs to communicate this type of information, so we expect to keep this type of email to a minimum. If you send us a request (for example via a support email or via one of our feedback mechanisms), we reserve the right to publish it in order to help us clarify or respond to your request or to help us support other users. Home Assistant takes all measures reasonably necessary to protect against the unauthorized access, use, alteration or destruction of potentially personally-identifying and personally-identifying information. ## {% linkable_title Cookies %} + A cookie is a string of information that a website stores on a visitor’s computer, and that the visitor’s browser provides to the website each time the visitor returns. Home Assistant uses cookies to help Home Assistant identify and track visitors, their usage of Home Assistant website, and their website access preferences. Home Assistant visitors who do not wish to have cookies placed on their computers should set their browsers to refuse cookies before using Home Assistant’s websites, with the drawback that certain features of Home Assistant’s websites may not function properly without the aid of cookies. ## {% linkable_title Business Transfers %} + If Home Assistant, or substantially all of its assets, were acquired, or in the unlikely event that Home Assistant goes out of business or enters bankruptcy, user information would be one of the assets that is transferred or acquired by a third party. You acknowledge that such transfers may occur, and that any acquirer of Home Assistant may continue to use your personal information as set forth in this policy. ## {% linkable_title Ads %} + Ads appearing on any of our websites may be delivered to users by advertising partners, who may set cookies. These cookies allow the ad server to recognize your computer each time they send you an online advertisement to compile information about you or others who use your computer. This information allows ad networks to, among other things, deliver targeted advertisements that they believe will be of most interest to you. This Privacy Policy covers the use of cookies by Home Assistant and does not cover the use of cookies by any advertisers. ## {% linkable_title Privacy Policy Changes %} + Although most changes are likely to be minor, Home Assistant may change its Privacy Policy from time to time, and in Home Assistant’s sole discretion. Home Assistant encourages visitors to frequently check this page for any changes to its Privacy Policy. Your continued use of this site after any change in this Privacy Policy will constitute your acceptance of such change. ### {% linkable_title Change log %} - - October 19, 2017: Initial version + +- October 19, 2017: Initial version _This privacy policy has been adapted from the [Automattic privacy policy][Home Assistant] and is licensed [Creative Commons ShareAlike][cc]._ [Home Assistant]: https://automattic.com/privacy/ -[cc]: https://creativecommons.org/licenses/by-sa/4.0/ \ No newline at end of file +[cc]: https://creativecommons.org/licenses/by-sa/4.0/ diff --git a/source/tos/index.markdown b/source/tos/index.markdown index cadd9cd442..199e220d69 100644 --- a/source/tos/index.markdown +++ b/source/tos/index.markdown @@ -21,21 +21,20 @@ If you create an account on the Website, you are responsible for maintaining the If you post material to the Website, post links on the Website, or otherwise make (or allow any third party to make) material available by means of the Website (any such material, "Content"), You are entirely responsible for the content of, and any harm resulting from, that Content. That is the case regardless of whether the Content in question constitutes text, graphics, an audio file, or computer software. By making Content available, you represent and warrant that: -* the downloading, copying and use of the Content will not infringe the proprietary rights, including but not limited to the copyright, patent, trademark or trade secret rights, of any third party; -* if your employer has rights to intellectual property you create, you have either (i) received permission from your employer to post or make available the Content, including but not limited to any software, or (ii) secured from your employer a waiver as to all rights in or to the Content; -* you have fully complied with any third-party licenses relating to the Content, and have done all things necessary to successfully pass through to end users any required terms; -* the Content does not contain or install any viruses, worms, malware, Trojan horses or other harmful or destructive content; -* the Content is not spam, is not machine- or randomly-generated, and does not contain unethical or unwanted commercial content designed to drive traffic to third party sites or boost the search engine rankings of third party sites, or to further unlawful acts (such as phishing) or mislead recipients as to the source of the material (such as spoofing); -* the Content is not pornographic, does not contain threats or incite violence, and does not violate the privacy or publicity rights of any third party; -* your content is not getting advertised via unwanted electronic messages such as spam links on newsgroups, email lists, blogs and web sites, and similar unsolicited promotional methods; -* your content is not named in a manner that misleads your readers into thinking that you are another person or company; and -* you have, in the case of Content that includes computer code, accurately categorized and/or described the type, nature, uses and effects of the materials, whether requested to do so by Home Assistant or otherwise. +* the downloading, copying and use of the Content will not infringe the proprietary rights, including but not limited to the copyright, patent, trademark or trade secret rights, of any third party; +* if your employer has rights to intellectual property you create, you have either (i) received permission from your employer to post or make available the Content, including but not limited to any software, or (ii) secured from your employer a waiver as to all rights in or to the Content; +* you have fully complied with any third-party licenses relating to the Content, and have done all things necessary to successfully pass through to end users any required terms; +* the Content does not contain or install any viruses, worms, malware, Trojan horses or other harmful or destructive content; +* the Content is not spam, is not machine- or randomly-generated, and does not contain unethical or unwanted commercial content designed to drive traffic to third party sites or boost the search engine rankings of third party sites, or to further unlawful acts (such as phishing) or mislead recipients as to the source of the material (such as spoofing); +* the Content is not pornographic, does not contain threats or incite violence, and does not violate the privacy or publicity rights of any third party; +* your content is not getting advertised via unwanted electronic messages such as spam links on newsgroups, email lists, blogs and web sites, and similar unsolicited promotional methods; +* your content is not named in a manner that misleads your readers into thinking that you are another person or company; and +* you have, in the case of Content that includes computer code, accurately categorized and/or described the type, nature, uses and effects of the materials, whether requested to do so by Home Assistant or otherwise. ## {% linkable_title 3. User Content License %} User contributions are licensed under a [Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License](http://creativecommons.org/licenses/by-nc-sa/3.0/deed.en_US). Without limiting any of those representations or warranties, Home Assistant has the right (though not the obligation) to, in Home Assistant’s sole discretion (i) refuse or remove any content that, in Home Assistant’s reasonable opinion, violates any Home Assistant policy or is in any way harmful or objectionable, or (ii) terminate or deny access to and use of the Website to any individual or entity for any reason, in Home Assistant’s sole discretion. Home Assistant will have no obligation to provide a refund of any amounts previously paid. - ## {% linkable_title 4. Payment and Renewal %} ### General Terms From 1edf68ff68ef46bf5149becf83bccac3d1feabde Mon Sep 17 00:00:00 2001 From: Nicholas Amadori Date: Wed, 24 Jan 2018 08:38:37 +0100 Subject: [PATCH 172/993] Ping binary sensor: Ping interval can be set (#4501) --- source/_components/binary_sensor.ping.markdown | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/source/_components/binary_sensor.ping.markdown b/source/_components/binary_sensor.ping.markdown index 613e64316b..d8d8ec310b 100644 --- a/source/_components/binary_sensor.ping.markdown +++ b/source/_components/binary_sensor.ping.markdown @@ -37,6 +37,17 @@ The sensor exposes the different round trip times values measured by `ping` as a - `round trip time min` - `round trip time max` +The default polling interval is 5 minutes. As many components [based on the entity class](/docs/configuration/platform_options), it is possible to overwrite this scan interval by specifying a `scan_interval` configuration key (value in seconds). In the example below we setup the `ping` binary sensor to poll the devices every 30 seconds. + +```yaml +# Example configuration.yaml entry to ping host 192.168.0.1 with 2 packets every 30 seconds. +binary_sensor: + - platform: ping + host: 192.168.0.1 + count: 2 + scan_interval: 30 +``` +

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

    From 48fbcd8e64480030b108924761bb0a6c51c1ffea Mon Sep 17 00:00:00 2001 From: Gregory Dosh Date: Wed, 24 Jan 2018 05:03:10 -0600 Subject: [PATCH 173/993] adding device_tracker.tomato https params (#4389) * adding device_tracker.tomato https params * converting to newer standard * removing extra space * Adding default values * fixing some misc quoting bugs * cleaning up optional params * updating default port param to match ssl choice * changing verbage --- .../device_tracker.tomato.markdown | 47 ++++++++++++++++--- 1 file changed, 40 insertions(+), 7 deletions(-) diff --git a/source/_components/device_tracker.tomato.markdown b/source/_components/device_tracker.tomato.markdown index e7a105ea2f..3c5eca66ca 100644 --- a/source/_components/device_tracker.tomato.markdown +++ b/source/_components/device_tracker.tomato.markdown @@ -29,14 +29,47 @@ device_tracker: http_id: YOUR_HTTP_ID ``` -Configuration variables: - -- **host** (*Required*): The IP address of your router, e.g. 192.168.1.1. -- **username** (*Required*: The username of an user with administrative privileges, usually *admin*. -- **password** (*Required*): The password for your given admin account. -- **http_id** (*Required*): The value can be obtained by logging in to the Tomato admin interface and search for `http_id` in the page source code. +{% configuration %} +host: + description: "The IP address or hostname of your router, e.g. `192.168.1.1` or `rt-ac68u`." + required: false + type: string +port: + description: "The port number of your router, e.g. `443`." + required: false + type: int + default: 80/443 (automatically detected) +ssl: + description: "Whether to connect via `https`." + required: false + type: bool + default: false +verify_ssl: + description: "If SSL verification for https resources needs to be turned off (for self-signed certs, etc.) this can take on boolean values `False` or `True` or you can pass a location on the device where a certificate can be used for verification e.g. `/mnt/NAS/router_cert.pem`." + required: false + type: [string, bool] + default: true +username: + description: "The username of an user with administrative privileges, usually *admin*." + required: true + type: string +password: + description: "The password for your given admin account." + required: true + type: string +http_id: + description: "The value can be obtained by logging in to the Tomato admin interface and search for `http_id` in the page source code." + required: true + type: string +{% endconfiguration %} See the [device tracker component page](/components/device_tracker/) for instructions how to configure the people to be tracked. A description of the API s available in this [Tomato API](http://paulusschoutsen.nl/blog/2013/10/tomato-api-documentation/) blog post. - + +SSL Certificate: + +Gathering the SSL Certificate of your router can be accomplished with this (or a similar) command: +```bash +openssl s_client -showcerts -connect 172.10.10.1:443 /dev/null | openssl x509 -outform PEM > router_cert.pem +``` \ No newline at end of file From ed4b825f749ab3fae8543bc4631e961694d4a78e Mon Sep 17 00:00:00 2001 From: Raiford Date: Wed, 24 Jan 2018 03:05:00 -0800 Subject: [PATCH 174/993] Update git_pull doc with password support (#4300) This is a documentation update that corresponds to https://github.com/home-assistant/hassio-addons/pull/217 --- source/_addons/git_pull.markdown | 2 ++ 1 file changed, 2 insertions(+) diff --git a/source/_addons/git_pull.markdown b/source/_addons/git_pull.markdown index 8d42d8ab82..bf8324628c 100644 --- a/source/_addons/git_pull.markdown +++ b/source/_addons/git_pull.markdown @@ -36,6 +36,8 @@ Load and update configuration files for Home Assistant from a GIT repository. - **auto_restart** (*Optional*): Make a restart of Home-Assistant if the config have change and is valid. - **repeat/active** (*Optional*): Pull periodic for GIT updates. - **repeat/interval** (*Optional*): Pull all x seconds and look for changes. +- **deployment_user** (*Optional*): Username to use when authenticating to a repo with a username and password. +- **deployment_password** (*Optional*): Password to use when authenticating to a repo. Ignored if deployment_user is not set. - **deployment_key** (*Optional*): A private SSH key that will be used for communication during git operations. This key is mandatory for ssh-accessed repositories, which are the ones with the following pattern: `@:`. - **deployment_key_protocol** (*Optional*): The key protocol. Default is "rsa". Valid protocols are: From 48e36a290f994d479dea2c7f237c5b532d1c7e19 Mon Sep 17 00:00:00 2001 From: lich Date: Wed, 24 Jan 2018 20:51:46 +0800 Subject: [PATCH 175/993] Add system option for linux_battery.py, Support android. (#4504) * Add system option for linux_battery.py, Support android. * Use new style for configuration variables --- .../_components/sensor.linux_battery.markdown | 24 ++++++++++++++----- 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/source/_components/sensor.linux_battery.markdown b/source/_components/sensor.linux_battery.markdown index 08c9fca586..13fc3d3e2f 100644 --- a/source/_components/sensor.linux_battery.markdown +++ b/source/_components/sensor.linux_battery.markdown @@ -13,7 +13,7 @@ ha_release: 0.28 ha_iot_class: "Local Polling" --- -The `linux_battery` sensor platform is using the information stored in `/sys/class/power_supply/` on your local Linux system to display details about the current state of your battery. +The `linux_battery` sensor platform is using the information stored in `/sys/class/power_supply/` on your local Linux system to display details about the current state of your battery. To setup a battery sensor to your installation, add the following to your `configuration.yaml` file: @@ -23,8 +23,20 @@ sensor: - platform: linux_battery ``` -Configuration variables: - -- **name** (*Optional*): Friendly name to use for the frontend. Default to "Battery". -- **battery** (*Optional*): Number of the battery. Default to `1`. - +{% configuration %} +name: + description: Friendly name to use for the frontend. + required: false + default: Battery + type: string +battery: + description: Number of the battery. + required: false + default: 1 + type: integer +system: + description: "The local system type. Support `linux` and `android`." + required: false + default: linux + type: string +{% endconfiguration %} From b9be5b2790f743cfd99d36b7232600f021747717 Mon Sep 17 00:00:00 2001 From: itineric <35140497+itineric@users.noreply.github.com> Date: Thu, 25 Jan 2018 18:19:03 +0100 Subject: [PATCH 176/993] Update init.d.markdown (#4512) Added missing PID_DIR declaration, service install generates errors since this variable is used during install / uninstall. --- source/_docs/autostart/init.d.markdown | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/source/_docs/autostart/init.d.markdown b/source/_docs/autostart/init.d.markdown index dba7739677..560fd6000f 100644 --- a/source/_docs/autostart/init.d.markdown +++ b/source/_docs/autostart/init.d.markdown @@ -85,7 +85,8 @@ PRE_EXEC="" # Typically /usr/bin/hass HASS_BIN="hass" RUN_AS="USER" -PID_FILE="/var/run/hass.pid" +PID_DIR="/var/run" +PID_FILE="$PID_DIR/hass.pid" CONFIG_DIR="/var/opt/homeassistant" LOG_DIR="/var/log/homeassistant" LOG_FILE="$LOG_DIR/home-assistant.log" From 42f9a8e5cdf5c636882b248fe5a7c85530dbf071 Mon Sep 17 00:00:00 2001 From: DubhAd Date: Thu, 25 Jan 2018 17:19:46 +0000 Subject: [PATCH 177/993] Fixed Heal notes (#4506) Clarified that it needs to be Heal Network, and that after Remove you're not moving a device to its final place ;) --- source/_docs/z-wave/adding.markdown | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/source/_docs/z-wave/adding.markdown b/source/_docs/z-wave/adding.markdown index 04c01cc927..e2a34934ba 100644 --- a/source/_docs/z-wave/adding.markdown +++ b/source/_docs/z-wave/adding.markdown @@ -16,7 +16,7 @@ To add (include) a non-secure Z-Wave [device](/docs/z-wave/devices/) to your sys 1. Go to the [Z-Wave control panel](/docs/z-wave/control-panel/) in the Home Assistant frontend 2. Click the **Add Node** button in the *Z-Wave Network Management* card - this will place the controller in inclusion mode 3. Activate your device to be included by following the instructions provided with the device -4. With the device in its final location, run a *Heal* +4. With the device in its final location, run a *Heal Network* Don't use this for [secure devices](https://home-assistant.io/docs/z-wave/adding/#adding-secure-devices), since this is likely to limit the features the device supports. @@ -63,6 +63,7 @@ After defining your network key, follow these steps to add (include) a secure Z- 1. Go to the [Z-Wave control panel](/docs/z-wave/control-panel/) in the Home Assistant frontend 2. Click the **Add Node Secure** button in the *Z-Wave Network Management* card - this will place the controller in inclusion mode 3. Activate your device to be included by following the instructions provided with the device +4. With the device in its final location, run a *Heal Network* ## {% linkable_title Removing Devices %} @@ -71,4 +72,4 @@ To remove (exclude) a Z-Wave device from your system: 1. Go to the Z-Wave control panel in the Home Assistant frontend 2. Click the **Remove Node** button in the *Z-Wave Network Management* card - this will place the controller in exclusion mode 3. Activate your device to be excluded by following the instructions provided with the device -4. With the device in its final location, run a *Heal* +4. Run a *Heal Network* so all the other nodes learn about its removal From 6224c71c08053f08941a9cca8c0635c1e73b5a7e Mon Sep 17 00:00:00 2001 From: Franck Nijhof Date: Thu, 25 Jan 2018 18:21:05 +0100 Subject: [PATCH 178/993] Various markdown, spelling, and grammar fixes #3 (#4510) * :white_check_mark: Various markdown, spelling, and grammar fixes * :white_check_mark: Various markdown, spelling, and grammar fixes * :white_check_mark: Various markdown, spelling, and grammar fixes --- source/_addons/dhcp_server.markdown | 2 +- .../binary_sensor.bbb_gpio.markdown | 2 +- .../binary_sensor.xiaomi_aqara.markdown | 2 +- .../_components/binary_sensor.zigbee.markdown | 2 +- source/_components/climate.ecobee.markdown | 2 +- ...vice_tracker.bluetooth_le_tracker.markdown | 4 ++-- .../device_tracker.gpslogger.markdown | 6 ++--- source/_components/fan.xiaomi_miio.markdown | 2 +- source/_components/frontend.markdown | 4 ++-- source/_components/group.markdown | 2 +- source/_components/hive.markdown | 2 +- source/_components/image_processing.markdown | 2 +- source/_components/input_datetime.markdown | 2 +- source/_components/input_number.markdown | 2 +- source/_components/knx.markdown | 2 +- source/_components/light.hive.markdown | 2 +- source/_components/light.zigbee.markdown | 2 +- source/_components/lirc.markdown | 2 +- .../media_player.denonavr.markdown | 2 +- .../_components/media_player.yamaha.markdown | 2 +- source/_components/namecheapdns.markdown | 2 +- source/_components/notify.facebook.markdown | 2 +- source/_components/notify.pushsafer.markdown | 6 ++--- source/_components/pilight.markdown | 2 +- source/_components/remember_the_milk.markdown | 2 +- source/_components/sensor.buienradar.markdown | 2 +- .../_components/sensor.deutsche_bahn.markdown | 2 +- .../sensor.dublin_bus_transport.markdown | 2 +- source/_components/sensor.envirophat.markdown | 2 +- .../sensor.geo_rss_events.markdown | 2 +- source/_components/sensor.influxdb.markdown | 2 +- source/_components/sensor.lacrosse.markdown | 2 +- source/_components/sensor.london_air.markdown | 2 +- .../sensor.nederlandse_spoorwegen.markdown | 6 ++--- source/_components/sensor.onewire.markdown | 2 +- source/_components/sensor.pvoutput.markdown | 2 +- source/_components/sensor.rest.markdown | 2 +- source/_components/sensor.scrape.markdown | 2 +- .../sensor.swiss_public_transport.markdown | 2 +- source/_components/sensor.vasttrafik.markdown | 8 +++---- source/_components/switch.zigbee.markdown | 2 +- source/_components/timer.markdown | 6 ++--- source/_components/volvooncall.markdown | 2 +- source/_components/wink.markdown | 2 +- ...r_10_minutes_when_motion_detected.markdown | 2 +- source/_data/glossary.yml | 2 +- source/_docs/autostart/init.d.markdown | 2 +- source/_docs/configuration/basic.markdown | 2 +- .../configuration/group_visibility.markdown | 2 +- source/_docs/configuration/packages.markdown | 2 +- source/_docs/ecosystem/appdaemon/api.markdown | 22 +++++++++---------- .../ecosystem/backup/backup_github.markdown | 2 +- .../certificates/lets_encrypt.markdown | 2 +- .../ios/notifications/actions.markdown | 2 +- source/_docs/frontend/browsers.markdown | 2 +- source/_docs/installation/docker.markdown | 2 +- .../hassbian/customization.markdown | 2 +- source/_docs/installation/vagrant.markdown | 2 +- source/_docs/installation/virtualenv.markdown | 2 +- source/_docs/scripts.markdown | 2 +- source/_docs/z-wave/control-panel.markdown | 4 ++-- source/_docs/z-wave/device-specific.markdown | 2 +- source/_docs/z-wave/installation.markdown | 4 ++-- .../2015-02-07-looking-at-the-past.markdown | 2 +- source/_posts/2015-03-08-new-logo.markdown | 2 +- ...s-to-use-mqtt-with-home-assistant.markdown | 2 +- ...g-with-glances-and-home-assistant.markdown | 2 +- .../2016-04-17-updated-documentation.markdown | 4 ++-- ...2016-04-19-to-infinity-and-beyond.markdown | 4 ++-- ...luetooth-lg-webos-tvs-and-roombas.markdown | 4 ++-- ...ng-presence-detection-work-better.markdown | 4 ++-- ...23-usb-webcams-and-home-assistant.markdown | 2 +- ...6-07-19-visualizing-your-iot-data.markdown | 2 +- ...anels--jupyter-notebooks--directv.markdown | 2 +- ...the-home-assistant-mobile-web-app.markdown | 4 ++-- ...10-notify-group-reload-api-pihole.markdown | 4 ++-- ...10-01-we-have-raspberry-image-now.markdown | 2 +- .../_posts/2016-10-02-hacktoberfest.markdown | 2 +- ...2016-10-24-explaining-the-updater.markdown | 2 +- ...7-01-21-home-assistant-governance.markdown | 2 +- .../2017-01-28-face-coffee-wink.markdown | 2 +- ...se-any-android-phone-as-ip-camera.markdown | 2 +- .../2017-04-01-thomas-krenn-award.markdown | 2 +- ...s--lockitron-locks--total-connect.markdown | 2 +- source/_posts/2017-04-15-ios.markdown | 2 +- ...4-30-hassbian-1.21-its-about-time.markdown | 2 +- ...n-raspberry-pi-zero-in-30-minutes.markdown | 2 +- source/_posts/2017-09-09-release-53.markdown | 2 +- source/_posts/2017-11-12-tor.markdown | 2 +- source/_posts/2017-11-18-release-58.markdown | 2 +- source/_posts/2017-12-03-release-59.markdown | 4 ++-- source/developers/architecture.markdown | 2 +- .../development_guidelines.markdown | 4 ++-- .../development_submitting.markdown | 2 +- .../development_validation.markdown | 2 +- .../documentation/standards.markdown | 2 +- source/developers/multiple_instances.markdown | 2 +- source/developers/rest_api.markdown | 2 +- 98 files changed, 131 insertions(+), 131 deletions(-) diff --git a/source/_addons/dhcp_server.markdown b/source/_addons/dhcp_server.markdown index 884a5432fa..1f0df69183 100644 --- a/source/_addons/dhcp_server.markdown +++ b/source/_addons/dhcp_server.markdown @@ -47,7 +47,7 @@ Configuration variables:  - **range_end** (*Required*): End address for dhcp leases.  - **broadcast** (*Required*): Network broadcast address.  - **gateway** (*Required*): A List of gateways. - - **interface** (*Required*): Inteface on that will be listen. Normally is `eth0` for ethernet wired connection and `wlan0` for wireless connection. + - **interface** (*Required*): Interface on that will be listen. Normally is `eth0` for ethernet wired connection and `wlan0` for wireless connection. - **hosts** (*Optional*): A list of fixed IPs for devices. - **name** (*Required*): Name/hostname of your device.  - **mac** (*Required*): Mac address of your device. diff --git a/source/_components/binary_sensor.bbb_gpio.markdown b/source/_components/binary_sensor.bbb_gpio.markdown index fbe724abf1..b7236d5468 100644 --- a/source/_components/binary_sensor.bbb_gpio.markdown +++ b/source/_components/binary_sensor.bbb_gpio.markdown @@ -33,7 +33,7 @@ Configuration variables: - **pins** array (*Required*): Array of used pins. - **pin_name** (*Required*): Pin numbers and corresponding names. - **name** (*Required*): Friendly name to use for the frontend. - - **bouncetime** (*Optional*): Debounce time for reading input pin defined in miliseconds [ms]. Defaults to `50 ms`. + - **bouncetime** (*Optional*): Debounce time for reading input pin defined in milliseconds [ms]. Defaults to `50 ms`. - **invert_logic** (*Optional*): If `true`, inverts the input logic to ACTIVE LOW. Default is `false` (ACTIVE HIGH). - **pull_mode** (*Optional*): Type of internal pull resistor connected to input. Options are `UP` - pull-up resistor and `DOWN` - pull-down resistor. Defaults to `UP`. diff --git a/source/_components/binary_sensor.xiaomi_aqara.markdown b/source/_components/binary_sensor.xiaomi_aqara.markdown index a317550cbf..a43874ff55 100644 --- a/source/_components/binary_sensor.xiaomi_aqara.markdown +++ b/source/_components/binary_sensor.xiaomi_aqara.markdown @@ -30,7 +30,7 @@ The requirement is that you have setup the [`xiaomi aqara` component](/component | Smoke Detector | smoke | JTYJ-GD-01LM/BW | on, off | | | | | Gas Leak Detector | natgas | JTQJ-BF-01LM/BW | on, off | | | | | Water Leak Sensor | sensor_wleak.aq1 | SJCGQ11LM | on, off | | | | -| Button (1st gen) | switch | WXKG01LM | on (thru long_click_press), off | `click`| `click_type`| `long_click_press`, `long_click_release`, `hold`, `single`, `double` | +| Button (1st gen) | switch | WXKG01LM | on (through long_click_press), off | `click`| `click_type`| `long_click_press`, `long_click_release`, `hold`, `single`, `double` | | Button (2nd gen) | sensor_switch.aq2 | WXKG11LM | off (always) | `click` | `click_type` | `single`, `double` | | Aqara Wireless Switch (Single) | 86sw1 | WXKG03LM | off (always) | `click` | `click_type` | `single` | | Aqara Wireless Switch (Double) | 86sw2 | WXKG02LM | off (always) | `click` | `click_type` | `single`, `both` | diff --git a/source/_components/binary_sensor.zigbee.markdown b/source/_components/binary_sensor.zigbee.markdown index 213721cb65..233ebb2a91 100644 --- a/source/_components/binary_sensor.zigbee.markdown +++ b/source/_components/binary_sensor.zigbee.markdown @@ -13,7 +13,7 @@ ha_release: 0.12 ha_iot_class: "Local Polling" --- -A `zigbee` binary sensor in this context is a device connected to one of the digital input pins on a [ZigBee](http://www.zigbee.org/) module. The states reported by such a device are limited to `on` or `off`. By default, a binary sensor is considered `on` when the ZigBee device's digital input pin is held 'high' and considered `off` when it is held `low`. This behaviour can be inverted by setting the `on_state` configuration variable to `low`. +A `zigbee` binary sensor in this context is a device connected to one of the digital input pins on a [ZigBee](http://www.zigbee.org/) module. The states reported by such a device are limited to `on` or `off`. By default, a binary sensor is considered `on` when the ZigBee device's digital input pin is held 'high' and considered `off` when it is held `low`. This behavior can be inverted by setting the `on_state` configuration variable to `low`. To enable a digital input pin as binary sensor in your installation, add the following lines to your `configuration.yaml`: diff --git a/source/_components/climate.ecobee.markdown b/source/_components/climate.ecobee.markdown index 4c06cbbf90..e8711168e7 100644 --- a/source/_components/climate.ecobee.markdown +++ b/source/_components/climate.ecobee.markdown @@ -240,7 +240,7 @@ For 'temp', the current temperature is taken as the target temperature. When None is provided as parameter, the hold_mode is turned off. It is not possible to set a vacation hold; such hold has to be defined on the thermostat directly. However, a vacation hold can be -cancelled. +canceled. | Service data attribute | Optional | Description | | ---------------------- | -------- | ----------- | diff --git a/source/_components/device_tracker.bluetooth_le_tracker.markdown b/source/_components/device_tracker.bluetooth_le_tracker.markdown index a9a47e20a8..03b844f667 100644 --- a/source/_components/device_tracker.bluetooth_le_tracker.markdown +++ b/source/_components/device_tracker.bluetooth_le_tracker.markdown @@ -30,7 +30,7 @@ $ sudo apt install bluetooth libbluetooth-dev pkg-config libboost-python-dev lib Before you get started with this platform, please note that: - This platform is incompatible with Windows - - This platform requires access to the bluetooth stack, see [Rootless Setup section](#rootless-setup) for further infomation + - This platform requires access to the bluetooth stack, see [Rootless Setup section](#rootless-setup) for further information To use the Bluetooth tracker in your installation, add the following to your `configuration.yaml` file: @@ -52,7 +52,7 @@ Some BTLE devices (e.g. fitness trackers) are only visible to the devices that t ## {% linkable_title Rootless Setup %} -Normaly accessing the Bluetooth stack is reserved for root, but running programs that are networked as root is a bad security wise. To allow non-root access to the Bluetooth stack we can give Python 3 the missing capabilities to access the Bluetooth stack. Quite like setting the setuid bit (see [Stack Exchange](http://unix.stackexchange.com/questions/96106/bluetooth-le-scan-as-non-root) for more information). +Normally accessing the Bluetooth stack is reserved for root, but running programs that are networked as root is a bad security wise. To allow non-root access to the Bluetooth stack we can give Python 3 the missing capabilities to access the Bluetooth stack. Quite like setting the setuid bit (see [Stack Exchange](http://unix.stackexchange.com/questions/96106/bluetooth-le-scan-as-non-root) for more information). ```bash $ sudo apt-get install libcap2-bin diff --git a/source/_components/device_tracker.gpslogger.markdown b/source/_components/device_tracker.gpslogger.markdown index 909d620aae..34465aec4f 100644 --- a/source/_components/device_tracker.gpslogger.markdown +++ b/source/_components/device_tracker.gpslogger.markdown @@ -68,14 +68,14 @@ Add the above URL after you modified it with your settings into the **URL** fiel - Use the domain that Home Assistant is available on the internet or the public IP address. Can be a local IP address if you are using a VPN setup. - Only remove `[Port]` if your Home Assistant instance is using port 80. Otherwise set it to 8123. - For Home Assistant only the above URL, as written, will work - do not add or remove any parameters. -- Make sure to include your [API password](/components/http/) if you have configured a password. Add `&api_password=[Your pasword]` to the end of the URL. +- Make sure to include your [API password](/components/http/) if you have configured a password. Add `&api_password=[Your password]` to the end of the URL. - You can change the name of your device name by replacing `&device=%SER` with `&device=[Devicename]`. -If your battery drains fast then you can tune the performence of GPSLogger under **Performance** -> **Location providers** +If your battery drains fast then you can tune the performance of GPSLogger under **Performance** -> **Location providers**

    Performance

    -A request can be forced from the app to test if everything is working fine. A succesful request will update the `known_devices.yaml` file with the device's serial number. +A request can be forced from the app to test if everything is working fine. A successful request will update the `known_devices.yaml` file with the device's serial number. diff --git a/source/_components/fan.xiaomi_miio.markdown b/source/_components/fan.xiaomi_miio.markdown index 218a7c0da4..b31d2e9d2d 100644 --- a/source/_components/fan.xiaomi_miio.markdown +++ b/source/_components/fan.xiaomi_miio.markdown @@ -13,7 +13,7 @@ ha_version: 0.57 ha_iot_class: "Local Polling" --- -The `xiaomi_miio` fan platform allows you to control the Xiaomi Air Purifier 2, Air Purifier 2S andd Air Purifier Pro. +The `xiaomi_miio` fan platform allows you to control the Xiaomi Air Purifier 2, Air Purifier 2S and Air Purifier Pro. Currently, the supported features are diff --git a/source/_components/frontend.markdown b/source/_components/frontend.markdown index 92c0e8d8dd..4ba9e004cd 100644 --- a/source/_components/frontend.markdown +++ b/source/_components/frontend.markdown @@ -39,11 +39,11 @@ frontend: required: true type: [list, string] extra_html_url: - description: "List of addtional [resources](/developers/frontend_creating_custom_ui/) to load in `latest` javascript mode." + description: "List of additional [resources](/developers/frontend_creating_custom_ui/) to load in `latest` javascript mode." required: false type: list extra_html_url_es5: - description: "List of addtional [resources](/developers/frontend_creating_custom_ui/) to load in `es5` javascript mode." + description: "List of additional [resources](/developers/frontend_creating_custom_ui/) to load in `es5` javascript mode." required: false type: list development_repo: diff --git a/source/_components/group.markdown b/source/_components/group.markdown index 9a515fafc6..8f781722d2 100644 --- a/source/_components/group.markdown +++ b/source/_components/group.markdown @@ -118,7 +118,7 @@ group: - group.all_scripts ``` -## {% linkable_title Group behaviour %} +## {% linkable_title Group behavior %} When any member of a group is `on` then the group will also be `on`. Similarly with a device tracker, when any member of the group is `home` then the group is `home`. diff --git a/source/_components/hive.markdown b/source/_components/hive.markdown index 8f760b08c7..fbe0d5b17f 100644 --- a/source/_components/hive.markdown +++ b/source/_components/hive.markdown @@ -49,7 +49,7 @@ The Hive Home Assistant platform currently supports the following Hive devices: - Hive Active Heating (including hot water and Hive Multizone) - Hive Active Light Dimmable - Hive Active Light Cool to Warm White -- Hive Active Light Colour Changing +- Hive Active Light Color Changing - Hive Active Plug - Hive Window or Door Sensor - Hive Motion Sensor diff --git a/source/_components/image_processing.markdown b/source/_components/image_processing.markdown index e74ef6ec5c..6f010ebad2 100644 --- a/source/_components/image_processing.markdown +++ b/source/_components/image_processing.markdown @@ -22,7 +22,7 @@ If you are running Home Assistant over SSL or from within a container, you will Alpr entities attribute have a vehicle counter `vehicles` and all found plates as `plates`. -This event is trigger after OpenALPR found a new licence plate. +This event is trigger after OpenALPR found a new license plate. ```yaml # Example configuration.yaml automation entry diff --git a/source/_components/input_datetime.markdown b/source/_components/input_datetime.markdown index 4b9d9ae568..7337114357 100644 --- a/source/_components/input_datetime.markdown +++ b/source/_components/input_datetime.markdown @@ -68,7 +68,7 @@ A datetime input entity's state exports several attributes that can be useful in | --------- | ----------- | | `has_time` | `true` if this entity has a time. | `has_date` | `true` if this entity has a date. -| `year`
    `month`
    `day` | The year, month and day of the date.
    (only availabel if `has_date: true`) +| `year`
    `month`
    `day` | The year, month and day of the date.
    (only available if `has_date: true`) | `hour`
    `minute`
    `second` | The hour, minute and second of the time.
    (only available if `has_time: true`) | `timestamp` | A timestamp representing the time held in the input.
    If `has_date: true`, this is the UNIX timestamp of the date / time held by the input. Otherwise if only `has_time: true`, this is the number of seconds since midnight representing the time held by the input. diff --git a/source/_components/input_number.markdown b/source/_components/input_number.markdown index 32829baeff..348053d8ee 100644 --- a/source/_components/input_number.markdown +++ b/source/_components/input_number.markdown @@ -51,7 +51,7 @@ input_number: required: true type: float max: - description: Maxium value. + description: Maximum value. required: true type: float name: diff --git a/source/_components/knx.markdown b/source/_components/knx.markdown index ff8c0786fc..4fd471efeb 100644 --- a/source/_components/knx.markdown +++ b/source/_components/knx.markdown @@ -82,7 +82,7 @@ knx: - **fire_event** (*Optional*): If set to True, platform will write all received KNX messages to event bus - **fire_event_filter** (*Optional*): If `fire_event` is set `fire_event_filter` has to be specified. `fire_event_filter` defines a list of patterns for filtering KNX addresses. Only telegrams which match this pattern are sent to the HOme Assistant event bus. -- **state_updater** (*Optional*): The component will collect the current state of each configured device from the KNX bus to display it correctly within Home-Assistant. Set this option to False to prevent this behaviour. +- **state_updater** (*Optional*): The component will collect the current state of each configured device from the KNX bus to display it correctly within Home-Assistant. Set this option to False to prevent this behavior. - **time_address** (*Optional*): Broadcast current local time to KNX bus with configured group address. ### {% linkable_title Services %} diff --git a/source/_components/light.hive.markdown b/source/_components/light.hive.markdown index 89f55459fb..78daeb5641 100644 --- a/source/_components/light.hive.markdown +++ b/source/_components/light.hive.markdown @@ -19,7 +19,7 @@ The 'hive' light component integrates your Hive lights into Home Assistant, enab The Hive light component supports the following Hive products: - **Hive Active Light Dimmable** - **Hive Active Light Cool to Warm White** -- **Hive Active Light Colour Changing** +- **Hive Active Light Color Changing**

    diff --git a/source/_components/light.zigbee.markdown b/source/_components/light.zigbee.markdown index 5730043d1e..a7d8529551 100644 --- a/source/_components/light.zigbee.markdown +++ b/source/_components/light.zigbee.markdown @@ -13,7 +13,7 @@ ha_release: 0.12 ha_iot_class: "Local Polling" --- -A ZigBee light in this context is a light connected to one of the digital output pins on a ZigBee module. It can simply be switched on and off. By default, a light is considered `on` when the ZigBee device's digital output is held `high` and considered `off` when it is held `low`. This behaviour can be inverted by setting the `on_state` configuration variable to `low`. +A ZigBee light in this context is a light connected to one of the digital output pins on a ZigBee module. It can simply be switched on and off. By default, a light is considered `on` when the ZigBee device's digital output is held `high` and considered `off` when it is held `low`. This behavior can be inverted by setting the `on_state` configuration variable to `low`. To configure a digital output pin as light, add the following to your `configuration.yaml` file: diff --git a/source/_components/lirc.markdown b/source/_components/lirc.markdown index ffe675ea0c..6d379e04ca 100644 --- a/source/_components/lirc.markdown +++ b/source/_components/lirc.markdown @@ -34,7 +34,7 @@ The configuration is slightly different : - The former single `lirc` service is replaced with the three systemd services `lircd.service`, `lircmd.service` and `irexec.service`. There is no counterpart to the 0.9.0 `lirc` service which covered all of these. Using a separate transmitter device requires yet another service. - 0.9.4 defaults to using systemd for controlling the services. This is not just start/stop functionality, systemd is used to implement new features and to address shortcomings in 0.9.0. However, traditional systemV scripts are also installed and could be used although this is less tested and not really documented. -For more infomation have a look at `/usr/share/doc/lirc/README.Debian.gz` where the update process is explained when you have updated from jessie to stretch. +For more information have a look at `/usr/share/doc/lirc/README.Debian.gz` where the update process is explained when you have updated from jessie to stretch.

    ### {% linkable_title Configuring LIRC %} diff --git a/source/_components/media_player.denonavr.markdown b/source/_components/media_player.denonavr.markdown index 9d9e50da1d..31ad2b0160 100644 --- a/source/_components/media_player.denonavr.markdown +++ b/source/_components/media_player.denonavr.markdown @@ -67,6 +67,6 @@ A few notes: - Additional option the control Denon AVR receivers with a builtin web server is using the HTTP interface with denonavr platform. - denonavr platform supports some additional functionalities like album covers, custom input source names and auto discovery. -- Marantz receivers seem to a have quite simliar interface. Thus if you own one, give it a try. +- Marantz receivers seem to a have quite similar interface. Thus if you own one, give it a try. [Denon]: /components/media_player.denon/ diff --git a/source/_components/media_player.yamaha.markdown b/source/_components/media_player.yamaha.markdown index c958aa1466..3e1479469c 100644 --- a/source/_components/media_player.yamaha.markdown +++ b/source/_components/media_player.yamaha.markdown @@ -61,7 +61,7 @@ Configuration variables: volume control and source selection. Playback controls, for instance play and stop are available for sources that supports it. - The `play_media` service is implemented for `NET RADIO` source - only. The `media_id` is a `>` separted string of the menu path on + only. The `media_id` is a `>` separated string of the menu path on the vtuner service. For instance `Bookmarks>Internet>WAMC 90.3 FM`. ### {% linkable_title Example configuration %} diff --git a/source/_components/namecheapdns.markdown b/source/_components/namecheapdns.markdown index 3331080fa9..4f68adb460 100644 --- a/source/_components/namecheapdns.markdown +++ b/source/_components/namecheapdns.markdown @@ -16,7 +16,7 @@ ha_release: 0.56 With the `namecheapdns` component you can automatically update your dynamic DNS entry at [namecheapdns](https://www.namecheap.com/store/domains/freedns/).

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

    To use the component in your installation, add the following to your `configuration.yaml` file: diff --git a/source/_components/notify.facebook.markdown b/source/_components/notify.facebook.markdown index 209fe6c827..0bdb62c8a7 100644 --- a/source/_components/notify.facebook.markdown +++ b/source/_components/notify.facebook.markdown @@ -50,7 +50,7 @@ automation: - '+919784516314' ``` -You can also send messages to users that do not have stored their phone number with Facebook, but this requires a bit more work. The Messenger platform uses page specific user IDs instead of a global user ID. You will need to enable a webhook for the "messages" event in Facebook's developer console. Once a user writes a message to a page, that webhook will then receive the user's page specifc ID as part of the webhook's payload. Below is a simple PHP script that reacts to the message "get my id" and sends a reply containing the user's ID: +You can also send messages to users that do not have stored their phone number with Facebook, but this requires a bit more work. The Messenger platform uses page specific user IDs instead of a global user ID. You will need to enable a webhook for the "messages" event in Facebook's developer console. Once a user writes a message to a page, that webhook will then receive the user's page specific ID as part of the webhook's payload. Below is a simple PHP script that reacts to the message "get my id" and sends a reply containing the user's ID: ```php now() - 1h` diff --git a/source/_components/sensor.lacrosse.markdown b/source/_components/sensor.lacrosse.markdown index c9005581f7..f5abbb4a05 100644 --- a/source/_components/sensor.lacrosse.markdown +++ b/source/_components/sensor.lacrosse.markdown @@ -22,7 +22,7 @@ The `lacrosse` sensor platform is using the data provided by a [Jeelink](https:/ ## {% linkable_title Setup %} -Since the sensor change their ID after each powercycle/battery change you can check what sensor IDs are availble by using the command-line tool `pylacrosse` from the pylacrosse package. +Since the sensor change their ID after each powercycle/battery change you can check what sensor IDs are available by using the command-line tool `pylacrosse` from the pylacrosse package. ```bash $ sudo pylacrosse -d /dev/ttyUSB0 scan diff --git a/source/_components/sensor.london_air.markdown b/source/_components/sensor.london_air.markdown index d20d33fc71..d5c9bad344 100644 --- a/source/_components/sensor.london_air.markdown +++ b/source/_components/sensor.london_air.markdown @@ -16,7 +16,7 @@ ha_release: 0.52 The `london_air` component [queries](http://api.erg.kcl.ac.uk/AirQuality/Hourly/MonitoringIndex/GroupName=London/Json) the London air quality [data feed](https://www.londonair.org.uk/LondonAir/API/) provided by Kings College London. A single sensor will be added for each `location` ([local authority district or borough](https://en.wikipedia.org/wiki/List_of_London_boroughs)) specified in the configuration file. The state of each sensor is the overall air quality in that borough. Note that only 28 of the 32 boroughs have data available. -Boroughs can have multiple monitoring sites at different geographical positions within the borough, and each of those sites can monitor up to six different kinds of pollutant. The pollutants are described [here](http://api.erg.kcl.ac.uk/AirQuality/Information/Species/Json) and are Carbon Monoxide ([CO2](http://www.londonair.org.uk/LondonAir/guide/WhatIsCO.aspx)), Nitrogen Dioxide ([NO2](http://www.londonair.org.uk/LondonAir/guide/WhatIsNO2.aspx)), Ozone ([O3](http://www.londonair.org.uk/LondonAir/guide/WhatIsO3.aspx)), Sulphur Dioxide ([SO2](http://www.londonair.org.uk/LondonAir/guide/WhatIsSO2.aspx)), PM2.5 & PM10 [particulates](http://www.londonair.org.uk/LondonAir/guide/WhatIsPM.aspx). The `latitude` and `longitude` of each site is accessible through a `data` attribute of the sensor, as are details about the pollutants monitored at that site. The `sites` attribute of a sensor displays how many monitoring sites that sensor covers. The `updated` attribute of a sensor states when the data was last published. Nominally data is published hourly, but in my experience this can vary. To limit the number of requests made by the sensor, a single API request is made every 30 minutes. +Boroughs can have multiple monitoring sites at different geographical positions within the borough, and each of those sites can monitor up to six different kinds of pollutant. The pollutants are described [here](http://api.erg.kcl.ac.uk/AirQuality/Information/Species/Json) and are Carbon Monoxide ([CO2](http://www.londonair.org.uk/LondonAir/guide/WhatIsCO.aspx)), Nitrogen Dioxide ([NO2](http://www.londonair.org.uk/LondonAir/guide/WhatIsNO2.aspx)), Ozone ([O3](http://www.londonair.org.uk/LondonAir/guide/WhatIsO3.aspx)), Sulfur Dioxide ([SO2](http://www.londonair.org.uk/LondonAir/guide/WhatIsSO2.aspx)), PM2.5 & PM10 [particulates](http://www.londonair.org.uk/LondonAir/guide/WhatIsPM.aspx). The `latitude` and `longitude` of each site is accessible through a `data` attribute of the sensor, as are details about the pollutants monitored at that site. The `sites` attribute of a sensor displays how many monitoring sites that sensor covers. The `updated` attribute of a sensor states when the data was last published. Nominally data is published hourly, but in my experience this can vary. To limit the number of requests made by the sensor, a single API request is made every 30 minutes. To add sensors to Home-assistant for all possible areas/boroughs add the following to your `configuration.yaml` file: diff --git a/source/_components/sensor.nederlandse_spoorwegen.markdown b/source/_components/sensor.nederlandse_spoorwegen.markdown index b4745a3fb6..b9a14e6605 100644 --- a/source/_components/sensor.nederlandse_spoorwegen.markdown +++ b/source/_components/sensor.nederlandse_spoorwegen.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Nederlandse Spoorwegen" -description: "Instructions how to integrate timetable data for travelling by train in the Netherlands within Home Assistant." +description: "Instructions how to integrate timetable data for traveling by train in the Netherlands within Home Assistant." date: 2017-10-25 13:35 sidebar: true comments: false @@ -40,10 +40,10 @@ Configuration variables: - **email** (*Required*): The email address you used to request the API password. - **password** (*Required*): The API password provided by the Nederlandse Spoorwegen. -- **routes** array (*Required*): List of travelling routes. +- **routes** array (*Required*): List of traveling routes. - **name** (*Required*): Name of the route. - **from** (*Required*): The start station. - - **to** (*Required*): Direction of the travelling. + - **to** (*Required*): Direction of the traveling. - **via** (*Optional*): Optional other station you wish to visit in between. The data are coming from [Nederlandse Spoorwegen](https://www.ns.nl/). diff --git a/source/_components/sensor.onewire.markdown b/source/_components/sensor.onewire.markdown index aaa616d8da..045c7e2280 100644 --- a/source/_components/sensor.onewire.markdown +++ b/source/_components/sensor.onewire.markdown @@ -28,7 +28,7 @@ Supported devices: The 1-Wire bus can be connected directly to the IO pins of Raspberry Pi or using dedicated interface adapter (e.g [DS9490R](https://datasheets.maximintegrated.com/en/ds/DS9490-DS9490R.pdf)). #### Raspberry Pi setup -In order ot setup 1-Wire support on Raspberry Pi, you'll need to edit `/boot/config.txt` following [this documentation](https://www.waveshare.com/wiki/Raspberry_Pi_Tutorial_Series:_1-Wire_DS18B20_Sensor#Enable_1-Wire). Don't use the `mount_dir` option. +In order to setup 1-Wire support on Raspberry Pi, you'll need to edit `/boot/config.txt` following [this documentation](https://www.waveshare.com/wiki/Raspberry_Pi_Tutorial_Series:_1-Wire_DS18B20_Sensor#Enable_1-Wire). Don't use the `mount_dir` option. #### Interface adapter setup When an interface adapter is used, sensors can be accessed on Linux hosts via [owfs 1-Wire file system](http://owfs.org/). When using an interface adapter and the owfs, the `mount_dir` option must be configured to correspond a directory, where owfs device tree has been mounted. diff --git a/source/_components/sensor.pvoutput.markdown b/source/_components/sensor.pvoutput.markdown index fe2d9b8e09..b36ded0c28 100644 --- a/source/_components/sensor.pvoutput.markdown +++ b/source/_components/sensor.pvoutput.markdown @@ -14,7 +14,7 @@ ha_iot_class: "Cloud Polling" --- -The `pvoutput` sensor platform consumes informations from [PVOutput](http://pvoutput.org/) which were uploaded by your solar photovoltaic (PV) system. +The `pvoutput` sensor platform consumes information from [PVOutput](http://pvoutput.org/) which were uploaded by your solar photovoltaic (PV) system. To add PVOutput details to your installation, add the following to your `configuration.yaml` file: diff --git a/source/_components/sensor.rest.markdown b/source/_components/sensor.rest.markdown index c496c7a0e0..7d8c751313 100644 --- a/source/_components/sensor.rest.markdown +++ b/source/_components/sensor.rest.markdown @@ -196,7 +196,7 @@ sensor: User-Agent: Home Assistant REST sensor ``` -### {% linkable_title Fetch multiple JSON values and present them as attibutes %} +### {% linkable_title Fetch multiple JSON values and present them as attributes %} [JSON Test](http://www.jsontest.com) returns the current time, date and milliseconds since epoch from [http://date.jsontest.com/](http://date.jsontest.com/). diff --git a/source/_components/sensor.scrape.markdown b/source/_components/sensor.scrape.markdown index 41e77ec52b..06d1cd8042 100644 --- a/source/_components/sensor.scrape.markdown +++ b/source/_components/sensor.scrape.markdown @@ -102,7 +102,7 @@ sensor: ### {% linkable_title Get the latest podcast episode file URL %} -If you want to get the file URL for the latest episode of your [favourite podcast](https://hasspodcast.io/), so you can pass it on to a compatible media player. +If you want to get the file URL for the latest episode of your [favorite podcast](https://hasspodcast.io/), so you can pass it on to a compatible media player. ```yaml # Example configuration.yaml entry diff --git a/source/_components/sensor.swiss_public_transport.markdown b/source/_components/sensor.swiss_public_transport.markdown index bb4a265bc3..8b3ac28b09 100644 --- a/source/_components/sensor.swiss_public_transport.markdown +++ b/source/_components/sensor.swiss_public_transport.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Swiss Public Transport" -description: "Instructions how to integrate timetable data for travelling in Switzerland within Home Assistant." +description: "Instructions how to integrate timetable data for traveling in Switzerland within Home Assistant." date: 2015-06-02 21:45 sidebar: true comments: false diff --git a/source/_components/sensor.vasttrafik.markdown b/source/_components/sensor.vasttrafik.markdown index 787e5b237a..a5aad007bd 100644 --- a/source/_components/sensor.vasttrafik.markdown +++ b/source/_components/sensor.vasttrafik.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Västtrafik Public Transport" -description: "Instructions how to integrate timetable data for travelling in Sweden within Home Assistant." +description: "Instructions how to integrate timetable data for traveling in Sweden within Home Assistant." date: 2016-10-05 08:45 sidebar: true comments: false @@ -14,7 +14,7 @@ ha_release: "0.30" --- -The `vasttrafik` sensor will provide you travelling details for the larger Göteborg area in Sweden from the [Västtrafik](https://vasttrafik.se/) public transportation service. +The `vasttrafik` sensor will provide you traveling details for the larger Göteborg area in Sweden from the [Västtrafik](https://vasttrafik.se/) public transportation service. You must create an application [here](https://developer.vasttrafik.se/portal/#/applications) to obtain a `key` and a `secret`. @@ -34,10 +34,10 @@ Configuration variables: - **key** (*Required*): The API key to access your Västtrafik account. - **secret** (*Required*): The API secret to access your Västtrafik account. -- **departures** array (*Required*): List of travelling routes. +- **departures** array (*Required*): List of traveling routes. - **name** (*Optional*): Name of the route. - **from** (*Required*): The start station. - - **heading** (*Optional*): Direction of the travelling. + - **heading** (*Optional*): Direction of the traveling. - **delay** (*Optional*): Delay in minutes. Defaults to 0. The data are coming from [Västtrafik](https://vasttrafik.se/). diff --git a/source/_components/switch.zigbee.markdown b/source/_components/switch.zigbee.markdown index 58bb428b79..cbdd87bdfe 100644 --- a/source/_components/switch.zigbee.markdown +++ b/source/_components/switch.zigbee.markdown @@ -13,7 +13,7 @@ ha_release: 0.12 ha_iot_class: "Local Polling" --- -A ZigBee switch in this context is a device connected to one of the digital output pins on a ZigBee module. It can simply be switched on and off. By default, a switch is considered `on` when the ZigBee device's digital output is held `high` and considered `off` when it is held `low`. This behaviour can be inverted by setting the `on_state` configuration variable to `low`. +A ZigBee switch in this context is a device connected to one of the digital output pins on a ZigBee module. It can simply be switched on and off. By default, a switch is considered `on` when the ZigBee device's digital output is held `high` and considered `off` when it is held `low`. This behavior can be inverted by setting the `on_state` configuration variable to `low`. To configure a digital output pin as switch, add the following to your `configuration.yaml` file: diff --git a/source/_components/timer.markdown b/source/_components/timer.markdown index b04e480aca..7cb9984ee8 100644 --- a/source/_components/timer.markdown +++ b/source/_components/timer.markdown @@ -14,7 +14,7 @@ ha_release: 0.57 The `timer` component aims to simplify automations based on (dynamic) durations. -When a timer finishes or gets cancelled the corresponding events are fired. This allows you to differentiate if a timer has switched from `active` to `idle` because the given duration has elapsed or it has been cancelled. To control timers in your automations you can use the services mentioned below. When calling the `start` service on a timer that is already running, it resets the duration it will need to finish and restart the timer without triggering any events. This for example makes it easy to create timed lights that get triggered by motion. +When a timer finishes or gets canceled the corresponding events are fired. This allows you to differentiate if a timer has switched from `active` to `idle` because the given duration has elapsed or it has been canceled. To control timers in your automations you can use the services mentioned below. When calling the `start` service on a timer that is already running, it resets the duration it will need to finish and restart the timer without triggering any events. This for example makes it easy to create timed lights that get triggered by motion.

    With the current implementation timers don't persist over restarts. After a restart they will be idle again, together with their initial configuration. @@ -42,7 +42,7 @@ Pick an icon that you can find on [materialdesignicons.com](https://materialdesi | Event | Description | | --------------- | ----------- | -| timer.cancelled | Fired when a timer has been cancelled | +| timer.cancelled | Fired when a timer has been canceled | | timer.finished | Fired when a timer has completed | ## {% linkable_title Services %} @@ -67,7 +67,7 @@ Pause a running timer. This will retain the remaining duration for later continu #### {% linkable_title Service `timer.cancel` %} -Cancel an active timer. This resets the duration to the last known initial value without firing the `timer.finished` event. If no `entity_id` is given all active timers will be cancelled. +Cancel an active timer. This resets the duration to the last known initial value without firing the `timer.finished` event. If no `entity_id` is given all active timers will be canceled. | Service data attribute | Optional | Description | | ---------------------- | -------- | ----------- | diff --git a/source/_components/volvooncall.markdown b/source/_components/volvooncall.markdown index 20b8fc5110..09664ef231 100644 --- a/source/_components/volvooncall.markdown +++ b/source/_components/volvooncall.markdown @@ -62,7 +62,7 @@ Configuration variables: - **username** (*Required*): The username associated with your Volvo On Call account. - **password** (*Required*): The password for your given Volvo On Call account. - **region** (*Optional*): The region where the Volvo is registered. Needs to be set for users in North America or China. -- **service_url** (*Optional*): The service URL to use for Volvo On Call. Normally not neccessary to specify. +- **service_url** (*Optional*): The service URL to use for Volvo On Call. Normally not necessary to specify. - **name** (*Optional*): Make it possible to provide a name for the vehicles. - **resources** (*Optional*): A list of resources to display (defaults to all available). - **scandinavian_miles** (*Optional*): If set to yes, Scandinavian miles ("mil") are used for distances and fuel range (defaults to no). diff --git a/source/_components/wink.markdown b/source/_components/wink.markdown index adfb85cf36..e1d617a9e3 100644 --- a/source/_components/wink.markdown +++ b/source/_components/wink.markdown @@ -46,7 +46,7 @@ wink: ### {% linkable_title Full oauth authentication (legacy). %} -This should be used for users that obtained their client_id and client_secret via email from Wink support prior to [developer.wink.com's](https://developer.wink.com) existance. +This should be used for users that obtained their client_id and client_secret via email from Wink support prior to [developer.wink.com's](https://developer.wink.com) existence. ```yaml diff --git a/source/_cookbook/turn_on_light_for_10_minutes_when_motion_detected.markdown b/source/_cookbook/turn_on_light_for_10_minutes_when_motion_detected.markdown index 34a244aaa5..65f5cb6b59 100644 --- a/source/_cookbook/turn_on_light_for_10_minutes_when_motion_detected.markdown +++ b/source/_cookbook/turn_on_light_for_10_minutes_when_motion_detected.markdown @@ -10,7 +10,7 @@ footer: true ha_category: Automation Examples --- -#### {% linkable_title Turn on lights with a resettable off timer %} +#### {% linkable_title Turn on lights with a resetable off timer %} This recipe will turn on a light when there is motion and turn off the light when ten minutes has passed without any motion events. diff --git a/source/_data/glossary.yml b/source/_data/glossary.yml index e66face48b..d68d4c26ca 100644 --- a/source/_data/glossary.yml +++ b/source/_data/glossary.yml @@ -39,7 +39,7 @@ - topic: Cookbook description: "The [Cookbook](/cookbook/) contains a set of configuration examples of Home Assistant from the community." - topic: Packages - description: "[Packages](/docs/configuration/packages/) allow you to bundle different component configuations together." + description: "[Packages](/docs/configuration/packages/) allow you to bundle different component configurations together." - topic: Customize description: "[Customization](/docs/configuration/customizing-devices/) allows you to overwrite the default parameter of your devices in the configuration." - topic: Zone diff --git a/source/_docs/autostart/init.d.markdown b/source/_docs/autostart/init.d.markdown index 560fd6000f..6e8e513955 100644 --- a/source/_docs/autostart/init.d.markdown +++ b/source/_docs/autostart/init.d.markdown @@ -14,7 +14,7 @@ Home Assistant can run as a daemon within init.d with the script below. ### {% linkable_title 1. Copy script %} -Copy either the deamon script or the Python environment scrip at the end of this page to `/etc/init.d/hass-daemon` depending on your installation. +Copy either the daemon script or the Python environment scrip at the end of this page to `/etc/init.d/hass-daemon` depending on your installation. After that, set the script to be executable: diff --git a/source/_docs/configuration/basic.markdown b/source/_docs/configuration/basic.markdown index 99614cefc1..77e8359eba 100644 --- a/source/_docs/configuration/basic.markdown +++ b/source/_docs/configuration/basic.markdown @@ -37,7 +37,7 @@ Configuration variables: ### {% linkable_title Password protecting the web interface %} -First, you'll want to add a password for the Home Assistant web interface. Use your favourite text editor to open `configuration.yaml` and edit the `http` section: +First, you'll want to add a password for the Home Assistant web interface. Use your favorite text editor to open `configuration.yaml` and edit the `http` section: ```yaml http: diff --git a/source/_docs/configuration/group_visibility.markdown b/source/_docs/configuration/group_visibility.markdown index 0ec91f0f6b..acd352a07d 100644 --- a/source/_docs/configuration/group_visibility.markdown +++ b/source/_docs/configuration/group_visibility.markdown @@ -14,7 +14,7 @@ After filling Home Assistant with all your precious home automation devices, you ## {% linkable_title Changing visibility of a group %} -To change visibility of a group, use the service `group.set_visibility`, pass the group name as `entity_id` and use `visible` to decide wheter the group should be shown or hidden. +To change visibility of a group, use the service `group.set_visibility`, pass the group name as `entity_id` and use `visible` to decide whether the group should be shown or hidden. ```yaml service: group.set_visibility diff --git a/source/_docs/configuration/packages.markdown b/source/_docs/configuration/packages.markdown index 584014521f..7e5016be99 100644 --- a/source/_docs/configuration/packages.markdown +++ b/source/_docs/configuration/packages.markdown @@ -81,7 +81,7 @@ Components inside packages can only specify platform entries using configuration ### {% linkable_title Create a packages folder %} -One way to organise packages would be to create a folder named "packages" in your Home Assistant configuration directory. In the packages directory you can store any number of packages in a YAML file. This entry in your `configuration.yaml` will load all packages: +One way to organize packages would be to create a folder named "packages" in your Home Assistant configuration directory. In the packages directory you can store any number of packages in a YAML file. This entry in your `configuration.yaml` will load all packages: ```yaml homeassistant: diff --git a/source/_docs/ecosystem/appdaemon/api.markdown b/source/_docs/ecosystem/appdaemon/api.markdown index 1bc4daacb3..384dab6d3a 100755 --- a/source/_docs/ecosystem/appdaemon/api.markdown +++ b/source/_docs/ecosystem/appdaemon/api.markdown @@ -39,7 +39,7 @@ There are several circumstances under which `initialize()` might be called: - Following a change in the status of Daylight Savings Time - Following a restart of Home Assistant -In every case, the App is responsible for recreating any state it might need as if it were the first time it was ever started. If `initialize()` is called, the app can safely assume that it is either being loaded for the first time, or that all callbacks and timers have been cancelled. In either case, the APP will need to recreate them. Depending upon the application it may be desirable for the App to establish state such as whether or not a particular light is on, within the `initialize()` function to ensure that everything is as expected or to make immediate remedial action (e.g. turn off a light that might have been left on by mistake when the app was restarted). +In every case, the App is responsible for recreating any state it might need as if it were the first time it was ever started. If `initialize()` is called, the app can safely assume that it is either being loaded for the first time, or that all callbacks and timers have been canceled. In either case, the APP will need to recreate them. Depending upon the application it may be desirable for the App to establish state such as whether or not a particular light is on, within the `initialize()` function to ensure that everything is as expected or to make immediate remedial action (e.g. turn off a light that might have been left on by mistake when the app was restarted). After the `initialize()` function is in place, the rest of the app consists of functions that are called by the various callback mechanisms, and any additional functions the user wants to add as part of the program logic. Apps are able to subscribe to 2 main classes of events: @@ -539,7 +539,7 @@ self.handle = self.listen_state(self.my_callback, "light.office_1", new = "on", ### {% linkable_title cancel_listen_state() %} -Cancel a `listen_state()` callback. This will mean that the App will no longer be notified for the specific state change that has been cancelled. Other state changes will continue to be monitored. +Cancel a `listen_state()` callback. This will mean that the App will no longer be notified for the specific state change that has been canceled. Other state changes will continue to be monitored. #### {% linkable_title Synopsis %} @@ -1317,7 +1317,7 @@ self.select_option("input_select.mode", "Day") ### {% linkable_title notify() %} -This is a convenience function for the `notify.notify` service. It will send a notification to your defualt notification service. If you have more than one, use `call_service()` to call the specific notification service you require instead. +This is a convenience function for the `notify.notify` service. It will send a notification to your default notification service. If you have more than one, use `call_service()` to call the specific notification service you require instead. #### {% linkable_title Synopsis %} @@ -1534,7 +1534,7 @@ The name of the event that caused the callback, e.g. `"MODE_CHANGE"` or `call_se A dictionary containing any additional information associated with the event. -### {% linkable_title Use of Events for Signalling between Home Assistant and AppDaemon %} +### {% linkable_title Use of Events for Signaling between Home Assistant and AppDaemon %} Home Assistant allows for the creation of custom events and existing components can send and receive them. This provides a useful mechanism for signaling back and forth between Home Assistant and AppDaemon. For instance, if you would like to create a UI Element to fire off some code in Home Assistant, all that is necessary is to create a script to fire a custom event, then subscribe to that event in AppDaemon. The script would look something like this: @@ -1701,7 +1701,7 @@ time() #### {% linkable_title Returns %} -A localised Python time object representing the current AppDaemon time. +A localized Python time object representing the current AppDaemon time. #### {% linkable_title Parameters %} @@ -1725,7 +1725,7 @@ date() #### {% linkable_title Returns %} -A localised Python time object representing the current AppDaemon date. +A localized Python time object representing the current AppDaemon date. #### {% linkable_title Parameters %} @@ -1749,7 +1749,7 @@ datetime() #### {% linkable_title Returns %} -A localised Python datetime object representing the current AppDaemon date and time. +A localized Python datetime object representing the current AppDaemon date and time. #### {% linkable_title Parameters %} @@ -1764,7 +1764,7 @@ now = self.datetime() ### {% linkable_title convert_utc() %} -Home Assistant provides timestamps of several different sorts that may be used to gain additional insight into state changes. These timestamps are in UTC and are coded as ISO 8601 Combined date and time strings. `convert_utc()` will accept one of these strings and convert it to a localised Python datetime object representing the timestamp +Home Assistant provides timestamps of several different sorts that may be used to gain additional insight into state changes. These timestamps are in UTC and are coded as ISO 8601 Combined date and time strings. `convert_utc()` will accept one of these strings and convert it to a localized Python datetime object representing the timestamp #### {% linkable_title Synopsis %} @@ -1774,7 +1774,7 @@ convert_utc(utc_string) #### {% linkable_title Returns %} -`convert_utc(utc_string)` returns a localised Python datetime object representing the timestamp. +`convert_utc(utc_string)` returns a localized Python datetime object representing the timestamp. #### {% linkable_title Parameters %} @@ -2072,7 +2072,7 @@ Note the timestamps in the log - AppDaemon believes it is now just before sunset ### {% linkable_title Speeding things up %} -Some Apps need to run for periods of a day or two for you to test all aspects. This can be time consuming, but Time Travel can also help here in two ways. The first is by speeding up time. To do this, simply use the `-t` option on the command line. This specifies the amount of time a second lasts while time travelling. The default of course is 1 second, but if you change it to `0.1` for instance, AppDaemon will work 10x faster. If you set it to `0`, AppDaemon will work as fast as possible and, depending in your hardware, may be able to get through an entire day in a matter of minutes. Bear in mind however, due to the threaded nature of AppDaemon, when you are running with `-t 0` you may see actual events firing a little later than expected as the rest of the system tries to keep up with the timer. To set the tick time, start AppDaemon as follows: +Some Apps need to run for periods of a day or two for you to test all aspects. This can be time consuming, but Time Travel can also help here in two ways. The first is by speeding up time. To do this, simply use the `-t` option on the command line. This specifies the amount of time a second lasts while time traveling. The default of course is 1 second, but if you change it to `0.1` for instance, AppDaemon will work 10x faster. If you set it to `0`, AppDaemon will work as fast as possible and, depending in your hardware, may be able to get through an entire day in a matter of minutes. Bear in mind however, due to the threaded nature of AppDaemon, when you are running with `-t 0` you may see actual events firing a little later than expected as the rest of the system tries to keep up with the timer. To set the tick time, start AppDaemon as follows: ```bash $ appdaemon -t 0.1 @@ -2105,4 +2105,4 @@ $ appdaemon -s "2016-06-06 19:16:00" -s "2016-06-06 20:16:00" -t 0 ### {% linkable_title A Note on Times %} -Some Apps you write may depend on checking times of events relative to the current time. If you are time travelling this will not work if you use standard python library calls to get the current time and date etc. For this reason, always use the AppDamon supplied `time()`, `date()` and `datetime()` calls, documented earlier. These calls will consult with AppDaemon's internal time rather than the actual time and give you the correct values. +Some Apps you write may depend on checking times of events relative to the current time. If you are time traveling this will not work if you use standard python library calls to get the current time and date etc. For this reason, always use the AppDamon supplied `time()`, `date()` and `datetime()` calls, documented earlier. These calls will consult with AppDaemon's internal time rather than the actual time and give you the correct values. diff --git a/source/_docs/ecosystem/backup/backup_github.markdown b/source/_docs/ecosystem/backup/backup_github.markdown index 8c8c9ad7b3..db4ab29626 100644 --- a/source/_docs/ecosystem/backup/backup_github.markdown +++ b/source/_docs/ecosystem/backup/backup_github.markdown @@ -133,7 +133,7 @@ Every time you run this script, you will be prompted for a comment to describe t [Travis CI](https://travis-ci.org) is a continuous integration testing system that runs every time the code in your repository is updated and allows you to validate that your code works on a fresh install. -- [Authorise Travis CI](https://travis-ci.org/auth) to have access to your github repos. +- [Authorize Travis CI](https://travis-ci.org/auth) to have access to your github repos. - Create the build script that travis will run to test your repo. - Create a dummy secrets.yaml for Travis. diff --git a/source/_docs/ecosystem/certificates/lets_encrypt.markdown b/source/_docs/ecosystem/certificates/lets_encrypt.markdown index 2841c35503..b2ca1f4bea 100644 --- a/source/_docs/ecosystem/certificates/lets_encrypt.markdown +++ b/source/_docs/ecosystem/certificates/lets_encrypt.markdown @@ -88,7 +88,7 @@ Type the following command to list your network interfaces: $ ifconfig ``` -You will receive an ouput similar to the image below: +You will receive an output similar to the image below:

    diff --git a/source/_docs/ecosystem/ios/notifications/actions.markdown b/source/_docs/ecosystem/ios/notifications/actions.markdown index df7caf240c..eb66feb66f 100644 --- a/source/_docs/ecosystem/ios/notifications/actions.markdown +++ b/source/_docs/ecosystem/ios/notifications/actions.markdown @@ -32,7 +32,7 @@ In advance of sending a notification: When sending a notification: -1. Send a notification with `data.push.category` set to a pre-defined notification category identifer. +1. Send a notification with `data.push.category` set to a pre-defined notification category identifier. 2. Push notification delivered to device 3. User opens notification. 3. Action tapped diff --git a/source/_docs/frontend/browsers.markdown b/source/_docs/frontend/browsers.markdown index 6ad520acfc..611b8586ae 100644 --- a/source/_docs/frontend/browsers.markdown +++ b/source/_docs/frontend/browsers.markdown @@ -12,7 +12,7 @@ redirect_from: /getting-started/browsers/ Home Assistant requires a web browser to show the frontend and supports all major modern browsers. We don't test the web interface against all available browsers but this page tracks different browsers on various operating systems and should help you to pick a browser which works. The "Release" column contains the release number which were tested. This doen't mean that older or newer releases not work. -If a browser is listed as working but you are still having problems, it is possible that some add-on or extension may be the problem. Some add-ons or extenstion are known to cause issue with the frontend, but it's not possible to test them all. If you are having issues with the frontend displaying correctly, you should disable all your add-ons or extensions and enable them one at a time. +If a browser is listed as working but you are still having problems, it is possible that some add-on or extension may be the problem. Some add-ons or extension are known to cause issue with the frontend, but it's not possible to test them all. If you are having issues with the frontend displaying correctly, you should disable all your add-ons or extensions and enable them one at a time. We would appreciate if you help to keep this page up-to-date and add feedback. diff --git a/source/_docs/installation/docker.markdown b/source/_docs/installation/docker.markdown index 0b327c9007..63212564d6 100644 --- a/source/_docs/installation/docker.markdown +++ b/source/_docs/installation/docker.markdown @@ -40,7 +40,7 @@ This will let you access your Home Assistant portal from http://localhost:8123, ### {% linkable_title Synology NAS %} -As Synology within DSM now supports Docker (with a neat UI), you can simply install Home Assistant using docker without the need for command-line. For details about the package (including compatability-information, if your NAS is supported), see https://www.synology.com/en-us/dsm/app_packages/Docker +As Synology within DSM now supports Docker (with a neat UI), you can simply install Home Assistant using docker without the need for command-line. For details about the package (including compatibility-information, if your NAS is supported), see https://www.synology.com/en-us/dsm/app_packages/Docker The steps would be: * Install "Docker" package on your Synology NAS diff --git a/source/_docs/installation/hassbian/customization.markdown b/source/_docs/installation/hassbian/customization.markdown index dd33b47401..adc479f6d4 100644 --- a/source/_docs/installation/hassbian/customization.markdown +++ b/source/_docs/installation/hassbian/customization.markdown @@ -15,7 +15,7 @@ The tool is available by running `hassbian-config`. ### Install scripts To view the available packages run `hassbian-config show` and `sudo hassbian-config install PACKAGENAME`. - - Install Hue. Configures the Python executable to allow usage of low numbered ports for use with Emulated Hue component thats used with Amazon Echo, Google Home and Mycroft.ai. + - Install Hue. Configures the Python executable to allow usage of low numbered ports for use with Emulated Hue component that's used with Amazon Echo, Google Home and Mycroft.ai. - Install MariaDB. This script installs MariaDB and it's dependencies for use with the recorder component in Home Assistant. No database or database user is created during this setup and will need to be created manually. - Install Mosquitto MQTT server. Installs the latest Mosquitto package and client tools from the Mosquitto projects official repository. Now includes websocket support. - Install Libcec. Adds local [HDMI CEC support][cec]. *This scipt is currently brooken upstream since it currently doesn't build properly for Python >3.4* diff --git a/source/_docs/installation/vagrant.markdown b/source/_docs/installation/vagrant.markdown index 8616b286fb..66b48d09cb 100644 --- a/source/_docs/installation/vagrant.markdown +++ b/source/_docs/installation/vagrant.markdown @@ -30,7 +30,7 @@ $ cd home-assistant/virtualization/vagrant ```

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

    diff --git a/source/_docs/installation/virtualenv.markdown b/source/_docs/installation/virtualenv.markdown index a851a8eb78..51ab71aa14 100644 --- a/source/_docs/installation/virtualenv.markdown +++ b/source/_docs/installation/virtualenv.markdown @@ -65,7 +65,7 @@ _(If you're on a Debian based system, you will need to install Python virtual en ### {% linkable_title Notes %} - In the future, if you want to start Home Assistant manually again, follow step 2, 3 and 5. -- It's recommanded to run Home Assistant as a dedicated user. +- It's recommended to run Home Assistant as a dedicated user.

    Looking for more advanced guides? Check our [Rasbian guide](/docs/installation/raspberry-pi/) or the [other installation guides](/docs/installation/). diff --git a/source/_docs/scripts.markdown b/source/_docs/scripts.markdown index bffc89b8a7..91399075b3 100644 --- a/source/_docs/scripts.markdown +++ b/source/_docs/scripts.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Script Syntax" -description: "Documention for the Home Assistant Script Syntax." +description: "Documentation for the Home Assistant Script Syntax." date: 2016-04-24 08:30 +0100 sidebar: true comments: false diff --git a/source/_docs/z-wave/control-panel.markdown b/source/_docs/z-wave/control-panel.markdown index c33375f242..f204afed4f 100644 --- a/source/_docs/z-wave/control-panel.markdown +++ b/source/_docs/z-wave/control-panel.markdown @@ -39,7 +39,7 @@ Here is where you [include and exclude](/docs/z-wave/adding/) Z-Wave devices fro * **Rename Node** sets a node's name - this won't happen immediately, and requires you to restart Home Assistant (not reboot) to set the new name -* **Heal Node** starts healing of the node.(Update neighbour list and update return routes) +* **Heal Node** starts healing of the node.(Update neighbor list and update return routes) * **Test Node** sends no_op test messages to the node. This could in theory bring back a dead node. @@ -114,7 +114,7 @@ Underneath that you can select any supported configuration parameter to see the ## {% linkable_title Node user codes %} -If your node has user codes, you can set and delete them. The format is raw hex Ascii code. Bellow the input you will see your actual code. For normal nodes this is as follows: +If your node has user codes, you can set and delete them. The format is raw hex Ascii code. Below the input you will see your actual code. For normal nodes this is as follows: ```yaml \x30 = 0 \x31 = 1 diff --git a/source/_docs/z-wave/device-specific.markdown b/source/_docs/z-wave/device-specific.markdown index 30e6bef26d..218268bac5 100644 --- a/source/_docs/z-wave/device-specific.markdown +++ b/source/_docs/z-wave/device-specific.markdown @@ -29,7 +29,7 @@ Home Assistant stores logs from Z-Wave in `OZW_log.txt` in the Home Assistant co ### {% linkable_title Aeotec Z-Stick %} -It's totally normal for your Z-Wave stick to cycle through its LEDs (Yellow, Blue and Red) while plugged into your system. If you don't like this behaviour it can be turned off. +It's totally normal for your Z-Wave stick to cycle through its LEDs (Yellow, Blue and Red) while plugged into your system. If you don't like this behavior it can be turned off. Use the following example commands from a terminal session on your Pi where your Z-Wave stick is connected. diff --git a/source/_docs/z-wave/installation.markdown b/source/_docs/z-wave/installation.markdown index 15b87957cb..0beb85d35d 100644 --- a/source/_docs/z-wave/installation.markdown +++ b/source/_docs/z-wave/installation.markdown @@ -25,7 +25,7 @@ $ sudo /Applications/Python\ x.x/Install\ Certificates.command ```

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

    ## {% linkable_title Configuration %} @@ -198,7 +198,7 @@ Ensure you keep a backup of this key. If you have to rebuild your system and don ## {% linkable_title First Run %} -The (compilation and) installation of python-openzwave happens when you first enable the Z-Wave component, and can take half an hour or more on a Raspbery Pi. When you upgrade Home Assistant and python-openzwave is also upgraded, this will also result in a delay while the new version is compiled and installed. +The (compilation and) installation of python-openzwave happens when you first enable the Z-Wave component, and can take half an hour or more on a Raspberry Pi. When you upgrade Home Assistant and python-openzwave is also upgraded, this will also result in a delay while the new version is compiled and installed. The first run after adding a device is when the `zwave` component will take time to initialize the entities, some entities may appear with incomplete names. Running a network heal may speed up this process. diff --git a/source/_posts/2015-02-07-looking-at-the-past.markdown b/source/_posts/2015-02-07-looking-at-the-past.markdown index dad5e30306..bac7154ca7 100644 --- a/source/_posts/2015-02-07-looking-at-the-past.markdown +++ b/source/_posts/2015-02-07-looking-at-the-past.markdown @@ -15,7 +15,7 @@ Ever since the launch of Home Assistant you have been able to track the state of * Recorder component that will record every event to a SQLite database * History component that will query and aggregate the recorded events -By adding this view into the past, we are adding an extra dimension into the state of your house. This brings great new possibilities for future features. The focus of todays release is on getting the recording component to you to start recording and getting some data. To show what is being recorded a view has been added that shows the last 24 hours of your house. Expect more extensive tools to explore your history in the future. +By adding this view into the past, we are adding an extra dimension into the state of your house. This brings great new possibilities for future features. The focus of today's release is on getting the recording component to you to start recording and getting some data. To show what is being recorded a view has been added that shows the last 24 hours of your house. Expect more extensive tools to explore your history in the future. Adding history to the UI was a challenge on itself because the old UI did not support easy navigation. So to add to the awesomeness of this release, Home Assistant also got a face lift. diff --git a/source/_posts/2015-03-08-new-logo.markdown b/source/_posts/2015-03-08-new-logo.markdown index 4fb3fd2a17..4280e6be47 100644 --- a/source/_posts/2015-03-08-new-logo.markdown +++ b/source/_posts/2015-03-08-new-logo.markdown @@ -7,7 +7,7 @@ date_formatted: March 8, 2015 author: Paulus Schoutsen author_twitter: balloob comments: true -categories: Organisation +categories: Organization --- It is well known that you are either a good programmer or a good designer. It's rare you'll meet someone that is both. That's why it wasn't surprising to anyone that the logo that I made was mediocre — at best. Luckily, [Jeremy Geltman](http://jeremygeltman.com/) has come to the rescue and contributed a brand new logo for Home Assistant. diff --git a/source/_posts/2015-09-11-different-ways-to-use-mqtt-with-home-assistant.markdown b/source/_posts/2015-09-11-different-ways-to-use-mqtt-with-home-assistant.markdown index 37fe00d6ce..54b9c76e49 100644 --- a/source/_posts/2015-09-11-different-ways-to-use-mqtt-with-home-assistant.markdown +++ b/source/_posts/2015-09-11-different-ways-to-use-mqtt-with-home-assistant.markdown @@ -132,7 +132,7 @@ char* deviceId = "sensor01"; // Name of the sensor char* stateTopic = "home-assistant/sensor01/brightness"; // MQTT topic where values are published int sensorPin = A0; // Pin to which the sensor is connected to char buf[4]; // Buffer to store the sensor value -int updateInterval = 1000; // Interval in miliseconds +int updateInterval = 1000; // Interval in milliseconds // MQTT server settings IPAddress mqttServer(192, 168, 0, 12); diff --git a/source/_posts/2015-09-18-monitoring-with-glances-and-home-assistant.markdown b/source/_posts/2015-09-18-monitoring-with-glances-and-home-assistant.markdown index 9e6b903c4c..9753a074ad 100644 --- a/source/_posts/2015-09-18-monitoring-with-glances-and-home-assistant.markdown +++ b/source/_posts/2015-09-18-monitoring-with-glances-and-home-assistant.markdown @@ -11,7 +11,7 @@ og_image: /images/supported_brands/glances.png --- -Inspried by a [feature requests](https://github.com/home-assistant/home-assistant/issues/310) I started looking into the available options to do monitoring of remote hosts. The feature request is about displaying system information in a similar way than the [systemmonitor](/components/sensor.systemmonitor/) sensor does it for the local system. After a while I started to think that it would be a nice addition for a small home network where no full-blown system monitoring setup is present. +Inspired by a [feature requests](https://github.com/home-assistant/home-assistant/issues/310) I started looking into the available options to do monitoring of remote hosts. The feature request is about displaying system information in a similar way than the [systemmonitor](/components/sensor.systemmonitor/) sensor does it for the local system. After a while I started to think that it would be a nice addition for a small home network where no full-blown system monitoring setup is present. diff --git a/source/_posts/2016-04-17-updated-documentation.markdown b/source/_posts/2016-04-17-updated-documentation.markdown index e0e956e4f0..e3ef6cf9a0 100644 --- a/source/_posts/2016-04-17-updated-documentation.markdown +++ b/source/_posts/2016-04-17-updated-documentation.markdown @@ -1,7 +1,7 @@ --- layout: post title: "Updated documentation" -description: "We have reorganised our documentation which should make it easier to get started and develop for Home Assistant." +description: "We have reorganized our documentation which should make it easier to get started and develop for Home Assistant." date: 2016-04-17 23:09:00 UTC date_formatted: "April 17, 2016" author: Paulus Schoutsen @@ -14,7 +14,7 @@ One of the main complaints that we receive is something along the lines "I read Our documentation has been going through various phases. Initially it was just the README in our GitHub repository. I discovered Jekyll and GitHub pages in December 2014 and created home-assistant.io. I more or less broke the README in 5 pages and [called it a website]. Back then we had a whopping [11 components](https://github.com/home-assistant/home-assistant.io/blob/86bb2df430ce267ab2123d51592d3f068ae509b5/source/components/index.markdown). -As Home Assistant grew, so did our documentation. [Fabian Affolter](https://github.com/fabaff) does an amazing job in making sure there is at least a documentation stub for each new feature that lands. And that's quite a feat given our [frequent releases](https://home-assistant.io/blog/categories/release-notes/)! But despite all the efforts, the documentation outgrew our existing documentation organisation. +As Home Assistant grew, so did our documentation. [Fabian Affolter](https://github.com/fabaff) does an amazing job in making sure there is at least a documentation stub for each new feature that lands. And that's quite a feat given our [frequent releases](https://home-assistant.io/blog/categories/release-notes/)! But despite all the efforts, the documentation outgrew our existing documentation organization. Today it has been almost 1.5 years since we started the website. We now have [264 components and platforms] under our belt and have been honored with 1.5 million page views ✨. And hopefully we now also have documentation that our community deserves. diff --git a/source/_posts/2016-04-19-to-infinity-and-beyond.markdown b/source/_posts/2016-04-19-to-infinity-and-beyond.markdown index e8b0e0ffd2..5ee06d15e8 100644 --- a/source/_posts/2016-04-19-to-infinity-and-beyond.markdown +++ b/source/_posts/2016-04-19-to-infinity-and-beyond.markdown @@ -7,10 +7,10 @@ date_formatted: "April 19, 2016" author: Paulus Schoutsen author_twitter: balloob comments: true -categories: Organisation +categories: Organization --- -After 2.5 years I think we can proudly say: Home Assistant is a success. I write _we_ because Home Assistant is no longer a one-person side project. It has become the side project of many people who spend countless hours on making Home Assistant the best home automation software out there. To acknowledge this we migrated the repositories from being under my name to be under our own [organisation on GitHub][gh-ha]. +After 2.5 years I think we can proudly say: Home Assistant is a success. I write _we_ because Home Assistant is no longer a one-person side project. It has become the side project of many people who spend countless hours on making Home Assistant the best home automation software out there. To acknowledge this we migrated the repositories from being under my name to be under our own [organization on GitHub][gh-ha]. On our journey we've reached many noteworthy milestones: diff --git a/source/_posts/2016-04-21-bluetooth-lg-webos-tvs-and-roombas.markdown b/source/_posts/2016-04-21-bluetooth-lg-webos-tvs-and-roombas.markdown index 14794081d8..72b13a6c8a 100644 --- a/source/_posts/2016-04-21-bluetooth-lg-webos-tvs-and-roombas.markdown +++ b/source/_posts/2016-04-21-bluetooth-lg-webos-tvs-and-roombas.markdown @@ -11,9 +11,9 @@ categories: Release-Notes og_image: /images/blog/2016-04-release-18/social.png --- -It's time for 0.18. This release cycle is 2 days shorter than usual as I'll be travelling to Europe. This also means that it can take some more time before you get feedback on PRs. +It's time for 0.18. This release cycle is 2 days shorter than usual as I'll be traveling to Europe. This also means that it can take some more time before you get feedback on PRs. -Since the last release we have moved all Home Assistant source code etc into it's own [organisation on GitHub](https://github.com/home-assistant). We're growing up! This sadly did cause us to have to move all Docker images. Check the breaking changes section for more info. +Since the last release we have moved all Home Assistant source code etc into it's own [organization on GitHub](https://github.com/home-assistant). We're growing up! This sadly did cause us to have to move all Docker images. Check the breaking changes section for more info.
    diff --git a/source/_posts/2016-04-30-ibeacons-part-1-making-presence-detection-work-better.markdown b/source/_posts/2016-04-30-ibeacons-part-1-making-presence-detection-work-better.markdown index 0c39c255a1..465e5278a2 100644 --- a/source/_posts/2016-04-30-ibeacons-part-1-making-presence-detection-work-better.markdown +++ b/source/_posts/2016-04-30-ibeacons-part-1-making-presence-detection-work-better.markdown @@ -20,7 +20,7 @@ The reason I started using iBeacons was to improve presence detection (and I thi When you use OwnTracks in standard _major move_ mode (which is kind to your phone battery) it sometimes fails to update when you’d like it to. In my case I found that it would often send a location update as I was on my way home, but then not update when I got home. The result would be that Home Assistant would think I was 500M away from home, and take quite a while to notice I was home. It would also mean that the automation that should turn on my lights when I got home didn’t work very well! There were a few times when my phone location updated at 2am and turned the lights on for me. Fortunately my wife is very patient! -Luckily, OwnTracks supports iBeacons so I could use them to make presence detection more reliable. When OwnTracks sees a beacon it recognises, it will send an update. This means that if you put a beacon at your front door - OwnTracks will see it within a few seconds of you arriving home - and send an update saying it has seen this iBeacon. +Luckily, OwnTracks supports iBeacons so I could use them to make presence detection more reliable. When OwnTracks sees a beacon it recognizes, it will send an update. This means that if you put a beacon at your front door - OwnTracks will see it within a few seconds of you arriving home - and send an update saying it has seen this iBeacon. @@ -31,7 +31,7 @@ To do this you first need to set up [MQTT] and [OwnTracks] in Home assistant - a [MQTT]: /components/mqtt/#picking-a-broker [OwnTracks]: /components/device_tracker.owntracks/ -You then have to (A) tell Home Assistant where the beacon is located and (B) tell OwnTracks to recognise the beacon. +You then have to (A) tell Home Assistant where the beacon is located and (B) tell OwnTracks to recognize the beacon. #### {% linkable_title A. Tell Home Assistant where your beacon is located %} diff --git a/source/_posts/2016-06-23-usb-webcams-and-home-assistant.markdown b/source/_posts/2016-06-23-usb-webcams-and-home-assistant.markdown index 8f5471887d..e2d4a191b4 100644 --- a/source/_posts/2016-06-23-usb-webcams-and-home-assistant.markdown +++ b/source/_posts/2016-06-23-usb-webcams-and-home-assistant.markdown @@ -35,7 +35,7 @@ crw-rw----+ 1 root video 81, 0 Jun 23 08:05 /dev/video0 crw-rw----+ 1 root video 81, 1 Jun 23 08:36 /dev/video1 ``` -We need an additional software part to handle the cameras. [motion](http://lavrsen.dk/foswiki/bin/view/Motion/WebHome) is capable of monitoring the video signal from USB and network cameras, do motion detection, and other nifty stuff like saving images, add text, or basic image manipulations. Make sure that you have the [RPM Fusion respository](http://rpmfusion.org/) enabled. +We need an additional software part to handle the cameras. [motion](http://lavrsen.dk/foswiki/bin/view/Motion/WebHome) is capable of monitoring the video signal from USB and network cameras, do motion detection, and other nifty stuff like saving images, add text, or basic image manipulations. Make sure that you have the [RPM Fusion repository](http://rpmfusion.org/) enabled. ```bash $ sudo dnf -y install motion diff --git a/source/_posts/2016-07-19-visualizing-your-iot-data.markdown b/source/_posts/2016-07-19-visualizing-your-iot-data.markdown index a0f865a8cb..ca2f337a3d 100644 --- a/source/_posts/2016-07-19-visualizing-your-iot-data.markdown +++ b/source/_posts/2016-07-19-visualizing-your-iot-data.markdown @@ -103,7 +103,7 @@ plt.xlabel('Time line') plt.savefig('sensor.png') ``` -Creating a connection to the database and executing a query is similar to the ways already seen. The return values from the query are splitted into two lists. The time stamps must be converted in an value which is accepted by matplotlib and then the graph is generated and saved as image. +Creating a connection to the database and executing a query is similar to the ways already seen. The return values from the query are split into two lists. The time stamps must be converted in an value which is accepted by matplotlib and then the graph is generated and saved as image.

    diff --git a/source/_posts/2016-07-30-custom-frontend-panels--jupyter-notebooks--directv.markdown b/source/_posts/2016-07-30-custom-frontend-panels--jupyter-notebooks--directv.markdown index 46c2678eb1..48a43201b7 100644 --- a/source/_posts/2016-07-30-custom-frontend-panels--jupyter-notebooks--directv.markdown +++ b/source/_posts/2016-07-30-custom-frontend-panels--jupyter-notebooks--directv.markdown @@ -12,7 +12,7 @@ categories: Release-Notes When Home Assistant started the focus has always been on making a great developer experience. Allowing anyone to add support for their favorite devices to Home Assistant easily. This focus has been a great success since we now have 339 components and platforms! -Starting with this release, we are extending our extensability to the frontend. Starting this release, any component can [add it's own page to the frontend][custom-panels]. Examples of this today are the map, logbook and history. We are looking forward to all the crazy panels you'll come up with! +Starting with this release, we are extending our extensibility to the frontend. Starting this release, any component can [add it's own page to the frontend][custom-panels]. Examples of this today are the map, logbook and history. We are looking forward to all the crazy panels you'll come up with! We have also seen an exciting trend of people starting to visualize their Internet of Things data using [Jupyter] Notebooks, which are a great way to create and share documents that contain code, visualizations, and explanatory text. In case you missed it, the [blog] post by [@kireyeu] shows an advanced usecase while our [Notebooks][jupyter-notebooks] in the [Home Assistant Notebooks repository][jupyter-repo] cover the basics. diff --git a/source/_posts/2016-08-07-optimizing-the-home-assistant-mobile-web-app.markdown b/source/_posts/2016-08-07-optimizing-the-home-assistant-mobile-web-app.markdown index e9a892b492..3633c42b50 100644 --- a/source/_posts/2016-08-07-optimizing-the-home-assistant-mobile-web-app.markdown +++ b/source/_posts/2016-08-07-optimizing-the-home-assistant-mobile-web-app.markdown @@ -22,7 +22,7 @@ And thus started my journey to take a critical look at how the Home Assistant ap I hope this list can be useful to other people, as a guide for optimizing their own apps or for avoiding pitfalls when building a new one. -The first thing to do is to measure. The Home Assistant front end is a mobile web app, so we shouldn’t measure this on a machine with 8 cores and gigabytes of ram but instead measure on devices you expect a mobile web app to run: phones. Below are two timelines recorded with Home Assistant 0.18.2 (pre-optimizations) and Google Chrome 53. **On my Mac the app starts in 1400 miliseconds and on my Nexus 5x in ~6500 miliseconds (~4.5 times slower!).** +The first thing to do is to measure. The Home Assistant front end is a mobile web app, so we shouldn’t measure this on a machine with 8 cores and gigabytes of ram but instead measure on devices you expect a mobile web app to run: phones. Below are two timelines recorded with Home Assistant 0.18.2 (pre-optimizations) and Google Chrome 53. **On my Mac the app starts in 1400 milliseconds and on my Nexus 5x in ~6500 milliseconds (~4.5 times slower!).**

    Timeline of loading the front end in Home Assistant 0.18.2

    -Although the app takes 6500 milliseconds to load on my phone, it would perform well afterwards. Still, that initial load is unacceptable. You expect to open an app on your phone and be able to use it, quickly. After I applied all the changes described below, I managed to reduce startup time to 900 miliseconds (-35%) on my Mac and 2400 miliseconds (-63%) on my Nexus 5x. [Check out the demo here.][demo] +Although the app takes 6500 milliseconds to load on my phone, it would perform well afterwards. Still, that initial load is unacceptable. You expect to open an app on your phone and be able to use it, quickly. After I applied all the changes described below, I managed to reduce startup time to 900 milliseconds (-35%) on my Mac and 2400 milliseconds (-63%) on my Nexus 5x. [Check out the demo here.][demo]

    diff --git a/source/_posts/2017-11-12-tor.markdown b/source/_posts/2017-11-12-tor.markdown index 32b3541598..612faf1ffc 100644 --- a/source/_posts/2017-11-12-tor.markdown +++ b/source/_posts/2017-11-12-tor.markdown @@ -27,7 +27,7 @@ The most amazing part? It is super easy to set up! ## {% linkable_title Setting up Tor %} -Our [documentation](/docs/ecosystem/tor/) provides an detailled guide about seting up a [Tor's Hidden Service](https://www.torproject.org/docs/hidden-services.html.en). The setup is straight-forward: +Our [documentation](/docs/ecosystem/tor/) provides an detailed guide about seting up a [Tor's Hidden Service](https://www.torproject.org/docs/hidden-services.html.en). The setup is straight-forward: 1. Install Tor. On a Debian-based system: `$ sudo apt-get install tor`. On Fedora: `$ sudo dnf install tor` 2. Modify Tor's main configuration file `/etc/tor/torrc` to include the following lines: diff --git a/source/_posts/2017-11-18-release-58.markdown b/source/_posts/2017-11-18-release-58.markdown index 80d8a664c1..e930abae6f 100644 --- a/source/_posts/2017-11-18-release-58.markdown +++ b/source/_posts/2017-11-18-release-58.markdown @@ -19,7 +19,7 @@ The Hass.io release of 0.58 will be delayed by a couple of days because Pascal i ## {% linkable_title Translation update %} -Translations are up and running in full speed. Shortly after the last release we got our translation pipeline figured out. [@armills] and [@c727] are doing an amazing job managing this project. We've doubled the number of supported languages to 42 and the amount of keys to translate went from 8 to 130. Our translaters are on top of their game and 79% is already translated. +Translations are up and running in full speed. Shortly after the last release we got our translation pipeline figured out. [@armills] and [@c727] are doing an amazing job managing this project. We've doubled the number of supported languages to 42 and the amount of keys to translate went from 8 to 130. Our translators are on top of their game and 79% is already translated. Talking about our translators, we now have 445 people with an account to help with translations. Not bad for 3 weeks! diff --git a/source/_posts/2017-12-03-release-59.markdown b/source/_posts/2017-12-03-release-59.markdown index 98c4d669b2..b68a0dede9 100644 --- a/source/_posts/2017-12-03-release-59.markdown +++ b/source/_posts/2017-12-03-release-59.markdown @@ -27,14 +27,14 @@ With the Dominos Pizza integration made by [@wardcraigj] your home is now taking

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

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

    ## {% linkable_title Hass.io Add-ons %} diff --git a/source/developers/architecture.markdown b/source/developers/architecture.markdown index 422777573b..c92361a4fc 100644 --- a/source/developers/architecture.markdown +++ b/source/developers/architecture.markdown @@ -16,7 +16,7 @@ For more information about each part in this overview, diff --git a/source/developers/development_guidelines.markdown b/source/developers/development_guidelines.markdown index d5fa2359e1..c8b384eb3e 100644 --- a/source/developers/development_guidelines.markdown +++ b/source/developers/development_guidelines.markdown @@ -25,9 +25,9 @@ The maximum line length comes directly from the [PEP8 style guide](https://www.p Those points may require that you adjust your IDE or editor settings. -## {% linkable_title Our recommandations %} +## {% linkable_title Our recommendations %} -For some cases [PEPs](https://www.python.org/dev/peps/) don't make a statement. This section covers our recommendations about the code style. Those points were collected from the exisiting code and based on what contributors and developers were using the most. This is basically a majority decision, thus you may not agree with it. But we would like to encourage you follow those recommandations to keep the code unified. +For some cases [PEPs](https://www.python.org/dev/peps/) don't make a statement. This section covers our recommendations about the code style. Those points were collected from the existing code and based on what contributors and developers were using the most. This is basically a majority decision, thus you may not agree with it. But we would like to encourage you follow those recommendations to keep the code unified. ### {% linkable_title Quotes %} diff --git a/source/developers/development_submitting.markdown b/source/developers/development_submitting.markdown index 919e20706b..b1439e4551 100644 --- a/source/developers/development_submitting.markdown +++ b/source/developers/development_submitting.markdown @@ -39,7 +39,7 @@ Submit your improvements, fixes, and new features to Home Assistant one at a tim * On GitHub, navigate to the main page of the Home Assistant repository. * In the "Branch" menu, choose the branch that contains your commits (from your fork). * To the right of the Branch menu, click **New pull request**. - * Use the base branch dropdown menu to select the branch you'd like to merge your changes into, then use the compare branch drop-down menu to choose the topic branch you made your changes in. Make sure the Home Assistant branch matches with your forked branch (`dev`) else you will propose ALL committs between branches. + * Use the base branch dropdown menu to select the branch you'd like to merge your changes into, then use the compare branch drop-down menu to choose the topic branch you made your changes in. Make sure the Home Assistant branch matches with your forked branch (`dev`) else you will propose ALL commits between branches. * Type a title and complete the provided description for your pull request. * Click **Create pull request**. diff --git a/source/developers/development_validation.markdown b/source/developers/development_validation.markdown index 89d6984e64..51fef2d39b 100644 --- a/source/developers/development_validation.markdown +++ b/source/developers/development_validation.markdown @@ -11,7 +11,7 @@ footer: true The `configuration.yaml` file contains the configuration options for components and platforms. We use [voluptuous](https://pypi.python.org/pypi/voluptuous) to make sure that the configuration provided by the user is valid. Some entries are optional or could be required to set up a platform or a component. Others must be a defined type or from an already-defined list. -We test the configuration to ensure that users have a great experience and minimise notifications if something is wrong with a platform or component setup before Home Assistant runs. +We test the configuration to ensure that users have a great experience and minimize notifications if something is wrong with a platform or component setup before Home Assistant runs. Besides [voluptuous](https://pypi.python.org/pypi/voluptuous) default types, many custom types are available. For an overview, take a look at the [config_validation.py](https://github.com/home-assistant/home-assistant/blob/master/homeassistant/helpers/config_validation.py) helper. diff --git a/source/developers/documentation/standards.markdown b/source/developers/documentation/standards.markdown index c859c4db6a..47ae4eab73 100644 --- a/source/developers/documentation/standards.markdown +++ b/source/developers/documentation/standards.markdown @@ -66,4 +66,4 @@ redirect_from: /getting-started/android/ --- ``` -Adding a redirect also applies if you move content around in the [documention](/docs/). +Adding a redirect also applies if you move content around in the [documentation](/docs/). diff --git a/source/developers/multiple_instances.markdown b/source/developers/multiple_instances.markdown index ffdfd6b505..f366abe19a 100644 --- a/source/developers/multiple_instances.markdown +++ b/source/developers/multiple_instances.markdown @@ -11,7 +11,7 @@ footer: true # {% linkable_title This has been deprecated and is no longer supported. %} -Home Assistant supports running multiple synchronised instances using a master-slave model. Whenever `events.fire` or `states.set` is called on the slave it will forward it to the master. The master will replicate all events and changed states to its slaves. +Home Assistant supports running multiple synchronized instances using a master-slave model. Whenever `events.fire` or `states.set` is called on the slave it will forward it to the master. The master will replicate all events and changed states to its slaves.

    diff --git a/source/developers/rest_api.markdown b/source/developers/rest_api.markdown index 2395c1f6ea..1e474667dd 100644 --- a/source/developers/rest_api.markdown +++ b/source/developers/rest_api.markdown @@ -515,7 +515,7 @@ Requires a JSON object that represents the API to cancel forwarding to. } ``` -It will return a message if event forwarding was cancelled successfully. +It will return a message if event forwarding was canceled successfully. ```json { From fab0c75104a12017b828092da1f3dbac5468128d Mon Sep 17 00:00:00 2001 From: lordneon Date: Thu, 25 Jan 2018 17:21:49 +0000 Subject: [PATCH 179/993] Added working model to supported list (#4507) The module works perfectly with the latest Xiaomi Mijia bedside lamp, its wifi based and appears to share the same API as the LED bulbs. --- source/_components/light.yeelight.markdown | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/source/_components/light.yeelight.markdown b/source/_components/light.yeelight.markdown index 2d836c596a..b098d007d5 100644 --- a/source/_components/light.yeelight.markdown +++ b/source/_components/light.yeelight.markdown @@ -61,8 +61,7 @@ This component is tested to work with the following models. If you have a differ - **YLDP03YL**: LED Bulb (Color) - E26 - **YLDD01YL**: Lightstrip (Color) - **YLDD02YL**: Lightstrip (Color) - - +- **MJCTD01YL**: Xiaomi Mijia Bedside Lamp - WIFI Version! From a7aa9dae97b7cc6ddc93ad343d1b72c1e0fa416d Mon Sep 17 00:00:00 2001 From: Dan Cinnamon Date: Thu, 25 Jan 2018 11:35:11 -0600 Subject: [PATCH 180/993] New venstar climate platform (#4412) * New venstar climate platform * Update 'ha_release' and use new style --- source/_components/climate.venstar.markdown | 77 ++++++++++++++++++++ source/images/supported_brands/venstar.png | Bin 0 -> 5329 bytes 2 files changed, 77 insertions(+) create mode 100644 source/_components/climate.venstar.markdown create mode 100644 source/images/supported_brands/venstar.png diff --git a/source/_components/climate.venstar.markdown b/source/_components/climate.venstar.markdown new file mode 100644 index 0000000000..f054465f72 --- /dev/null +++ b/source/_components/climate.venstar.markdown @@ -0,0 +1,77 @@ +--- +layout: page +title: "Venstar Thermostat" +description: "Instructions for how to integrate Venstar WiFi thermostats within Home Assistant." +date: 2018-01-14 00:04 +sidebar: true +comments: false +sharing: true +footer: true +logo: venstar.png +ha_category: Climate +ha_release: 0.62 +ha_iot_class: "Local Polling" +--- + + +The `venstar` climate platform allows you to control [Venstar](http://www.venstar.com) thermostats from Home Assistant. +Venstar thermostats feature a local API that allows for automation without the need for a cloud service. + +Currently supported and tested thermostats: + +- Color Touch T7900 + +Currently supported functionality: +- Setting heat/cool temperature when the thermostat is in the appropriate mode. +- Changing the operation mode of the thermostat (heat/cool/off/auto) +- Turning the fan on/off +- Setting the humidity level + +Note - Please ensure you update your thermostat to the latest firmware. Currently tested on firmware 5.10. + +To set it up, add the following information to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +climate: + - platform: venstar + host: IP_OR_HOSTNAME_OF_THERMOSTAT +``` + +{% configuration %} +host: + description: Address of your thermostat, e.g., 192.168.1.32. + required: true + type: string +username: + description: Username for the thermostat. + required: false + type: string +password: + description: Password for the thermostat. + required: false + type: string +ssl: + description: Whether to use SSL or not when communicating. + required: false + type: boolean + default: False +timeout: + description: Number of seconds for API timeout. + required: false + type: int + default: 5 +{% endconfiguration %} + +## {% linkable_title Full configuration sample %} + +```yaml +# Example configuration.yaml entry +climate: + - platform: venstar + host: IP_OR_HOSTNAME_OF_THERMOSTAT + ssl: True/False + username: OPTIONAL_AUTH_USER_HERE + password: OPTIONAL_AUTH_PASS_HERE + timeout: 5 +``` diff --git a/source/images/supported_brands/venstar.png b/source/images/supported_brands/venstar.png new file mode 100644 index 0000000000000000000000000000000000000000..9721b8d90f152e3bb0e51439075ec826e1975542 GIT binary patch literal 5329 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 Date: Thu, 25 Jan 2018 18:36:38 +0100 Subject: [PATCH 181/993] Version number of the Xiaomi Air Purifier removed from title and description. There are more versions are supported now. (#4511) --- source/_components/fan.xiaomi_miio.markdown | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/source/_components/fan.xiaomi_miio.markdown b/source/_components/fan.xiaomi_miio.markdown index 4f59690ce9..7f79d3f276 100644 --- a/source/_components/fan.xiaomi_miio.markdown +++ b/source/_components/fan.xiaomi_miio.markdown @@ -1,7 +1,7 @@ --- layout: page -title: "Xiaomi Air Purifier 2" -description: "Instructions how to integrate your Xiaomi Air Purifier 2 within Home Assistant." +title: "Xiaomi Air Purifier" +description: "Instructions how to integrate your Xiaomi Air Purifier within Home Assistant." date: 2017-10-13 12:35 sidebar: true comments: false @@ -50,7 +50,7 @@ To add a Xiaomi Air Purifier to your installation, add the following to your `co ```yaml fan: - platform: xiaomi_miio - name: Xiaomi Air Purifier 2 + name: Xiaomi Air Purifier host: 192.168.130.66 token: YOUR_TOKEN ``` From ae24893397f0884856138dea7697edd0cfc89760 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Thu, 25 Jan 2018 18:42:05 +0100 Subject: [PATCH 182/993] update style and remove refs to plug --- source/_components/fan.xiaomi_miio.markdown | 44 +++++++++++++-------- 1 file changed, 27 insertions(+), 17 deletions(-) diff --git a/source/_components/fan.xiaomi_miio.markdown b/source/_components/fan.xiaomi_miio.markdown index 7f79d3f276..9ba659b87c 100644 --- a/source/_components/fan.xiaomi_miio.markdown +++ b/source/_components/fan.xiaomi_miio.markdown @@ -15,7 +15,7 @@ ha_iot_class: "Local Polling" The `xiaomi_miio` fan platform allows you to control the Xiaomi Air Purifier 2, Air Purifier 2S and Air Purifier Pro. -Currently, the supported features are +Currently, the supported features are: * On, Off * Operation modes (auto, silent, favorite, idle) @@ -41,28 +41,37 @@ Currently, the supported features are - motor_speed -## {% linkable_title Setup %} - -Please follow the instructions on [Retrieving the Access Token](/components/vacuum.xiaomi_miio/#retrieving-the-access-token) to get the API token to use in the `configuration.yaml` file. +Please follow the instructions on [Retrieving the Access Token](/components/vacuum.xiaomi_miio/#retrieving-the-access-token) to get the API token. To add a Xiaomi Air Purifier to your installation, add the following to your `configuration.yaml` file: ```yaml fan: +# Example configuration.yaml entry - platform: xiaomi_miio - name: Xiaomi Air Purifier host: 192.168.130.66 token: YOUR_TOKEN ``` -Configuration variables: -- **host** (*Required*): The IP of your plug. -- **token** (*Required*): The API token of your plug. -- **name** (*Optional*): The name of your plug. +{% configuration %} +host: + description: The IP address of your fan. + required: true + type: string +token: + description: The API token of your fan. + required: true + type: string +name: + description: The name of your fan. + required: false + type: string + default: Xiaomi Air Purifier +{% endconfiguration %} ## {% linkable_title Platform Services %} -### Service fan/xiaomi_miio_set_buzzer_on +### {% linkable_title Service fan/xiaomi_miio_set_buzzer_on %} Turn the buzzer on. @@ -70,7 +79,7 @@ Turn the buzzer on. |---------------------------|----------|-------------------------------------------------------| | `entity_id` | yes | Only act on a specific air purifier. Else targets all. | -### Service fan/xiaomi_miio_set_buzzer_off +### {% linkable_title Service fan/xiaomi_miio_set_buzzer_off %} Turn the buzzer off. @@ -78,7 +87,7 @@ Turn the buzzer off. |---------------------------|----------|---------------------------------------------------------| | `entity_id` | yes | Only act on a specific air purifier. Else targets all. | -### Service fan/xiaomi_miio_set_led_on +### {% linkable_title Service fan/xiaomi_miio_set_led_on %} Turn the led on. @@ -86,7 +95,7 @@ Turn the led on. |---------------------------|----------|---------------------------------------------------------| | `entity_id` | yes | Only act on a specific air purifier. Else targets all. | -### Service fan/xiaomi_miio_set_led_off +### {% linkable_title Service fan/xiaomi_miio_set_led_off %} Turn the led off. @@ -94,7 +103,7 @@ Turn the led off. |---------------------------|----------|---------------------------------------------------------| | `entity_id` | yes | Only act on a specific air purifier. Else targets all. | -### Service fan/xiaomi_miio_set_child_lock_on +### {% linkable_title Service fan/xiaomi_miio_set_child_lock_on %} Turn the child lock on. @@ -102,7 +111,7 @@ Turn the child lock on. |---------------------------|----------|---------------------------------------------------------| | `entity_id` | yes | Only act on a specific air purifier. Else targets all. | -### Service fan/xiaomi_miio_set_child_lock_off +### {% linkable_title Service fan/xiaomi_miio_set_child_lock_off %} Turn the child lock off. @@ -110,7 +119,7 @@ Turn the child lock off. |---------------------------|----------|---------------------------------------------------------| | `entity_id` | yes | Only act on a specific air purifier. Else targets all. | -### Service fan/xiaomi_miio_set_led_brightness +### {% linkable_title Service fan/xiaomi_miio_set_led_brightness %} Set the led brightness. Supported values are 0 (Bright), 1 (Dim), 2 (Off). @@ -119,7 +128,7 @@ Set the led brightness. Supported values are 0 (Bright), 1 (Dim), 2 (Off). | `entity_id` | yes | Only act on a specific air purifier. Else targets all. | | `brightness` | no | Brightness, between 0 and 2. | -### Service fan/xiaomi_miio_set_favorite_level +### {% linkable_title Service fan/xiaomi_miio_set_favorite_level %} Set the favorite level of the operation mode "favorite". @@ -127,3 +136,4 @@ Set the favorite level of the operation mode "favorite". |---------------------------|----------|---------------------------------------------------------| | `entity_id` | yes | Only act on a specific air purifier. Else targets all. | | `level` | no | Level, between 0 and 16. | + From 5accd4b0d86371ac0807c29aaa95a5baa29ce169 Mon Sep 17 00:00:00 2001 From: phfix <35774904+phfix@users.noreply.github.com> Date: Thu, 25 Jan 2018 18:42:55 +0100 Subject: [PATCH 183/993] Explain that the config: is needed in the configuration.yaml (#4508) * Explain that the config: is needed in the configuration.yaml * Fix typos --- source/_docs/automation/editor.markdown | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/source/_docs/automation/editor.markdown b/source/_docs/automation/editor.markdown index 8db389733c..b0f16e1445 100644 --- a/source/_docs/automation/editor.markdown +++ b/source/_docs/automation/editor.markdown @@ -43,6 +43,13 @@ Don't forget to save your new automation rule. In order for your saved automatio ## {% linkable_title Updating your configuration to use the editor %} +First check that you have activated the configuration editor. + +```yaml +# Activate the configuration editor +config: +``` + The automation editor reads and writes to the file `automations.yaml` in your [configuration](/docs/configuration/) folder. Make sure that you have set up the automation component to read from it: ```yaml From c21493d7c7d15398235dda7de0a2d4371d9b9ee5 Mon Sep 17 00:00:00 2001 From: Johannes Innerbichler Date: Thu, 25 Jan 2018 18:45:28 +0100 Subject: [PATCH 184/993] Iota wallet (#4314) * added iota documentation\ * removed ruby version file\ * changed logo * minor changes to documentation * re-added ruby version file * :pencil2: Minor grammar changes --- .ruby-version | 2 +- source/_components/iota.markdown | 62 ++++++++++++++++++++++++ source/images/supported_brands/iota.png | Bin 0 -> 21492 bytes 3 files changed, 63 insertions(+), 1 deletion(-) create mode 100644 source/_components/iota.markdown create mode 100644 source/images/supported_brands/iota.png diff --git a/.ruby-version b/.ruby-version index 005119baaa..58073ef8d7 100644 --- a/.ruby-version +++ b/.ruby-version @@ -1 +1 @@ -2.4.1 +2.4.1 \ No newline at end of file diff --git a/source/_components/iota.markdown b/source/_components/iota.markdown new file mode 100644 index 0000000000..8b04af3472 --- /dev/null +++ b/source/_components/iota.markdown @@ -0,0 +1,62 @@ +--- +layout: page +title: "IOTA" +description: "Instructions on how to integrate IOTA wallets with Home Assistant." +date: 2017-12-31 13:29 +sidebar: true +comments: false +sharing: true +footer: true +logo: iota.png +ha_category: Finance +ha_release: 0.61 +ha_iot_class: "Cloud Polling" +--- + +[IOTA](http://iota.org/) is a new blockless distributed ledger which is scalable, lightweight and makes it possible to transfer value without any fees. + +The `iota` component displays various details (e.g., the balance, node attributes) of IOTA wallets. + +```yaml +# configuration.yaml example +iota: + iri: https://testnet140.tangle.works:4434 + wallets: + - name: Default Wallet + seed: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX +``` + +{% configuration %} +iri: + description: Url of the IRI node + required: true + type: string +testnet: + description: Flag for indicating testnet + required: false + default: No testnet (false) + type: bool +wallets: + description: List of IOTA wallets + required: true + type: list + keys: + name: + description: Name of the wallet + seed: + description: Seed of the wallet +{% endconfiguration %} + +A full configuration example could look the one below: + +```yaml +# Full example +iota: + iri: https://testnet140.tangle.works:4434 + testnet: true + wallets: + - name: Default Wallet + seed: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX + - name: Exchange Wallet + seed: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX +``` diff --git a/source/images/supported_brands/iota.png b/source/images/supported_brands/iota.png new file mode 100644 index 0000000000000000000000000000000000000000..e45414f2df2ab2438b4184e27c89533ce48c32fc GIT binary patch literal 21492 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 Date: Thu, 25 Jan 2018 19:21:47 +0100 Subject: [PATCH 185/993] Fix remaining issue from #4314 (#4514) --- source/_components/iota.markdown | 14 +++++++------- source/_components/sensor.iota.markdown | 22 ++++++++++++++++++++++ 2 files changed, 29 insertions(+), 7 deletions(-) create mode 100644 source/_components/sensor.iota.markdown diff --git a/source/_components/iota.markdown b/source/_components/iota.markdown index 8b04af3472..d50ad4f545 100644 --- a/source/_components/iota.markdown +++ b/source/_components/iota.markdown @@ -9,7 +9,7 @@ sharing: true footer: true logo: iota.png ha_category: Finance -ha_release: 0.61 +ha_release: 0.62 ha_iot_class: "Cloud Polling" --- @@ -28,23 +28,23 @@ iota: {% configuration %} iri: - description: Url of the IRI node + description: URL of the IRI node. required: true type: string testnet: - description: Flag for indicating testnet + description: Flag for indicating "testnet". required: false - default: No testnet (false) + default: false type: bool wallets: - description: List of IOTA wallets + description: List of IOTA wallets. required: true type: list keys: name: - description: Name of the wallet + description: Name of the wallet. seed: - description: Seed of the wallet + description: Seed of the wallet. {% endconfiguration %} A full configuration example could look the one below: diff --git a/source/_components/sensor.iota.markdown b/source/_components/sensor.iota.markdown new file mode 100644 index 0000000000..e907cb2795 --- /dev/null +++ b/source/_components/sensor.iota.markdown @@ -0,0 +1,22 @@ +--- +layout: page +title: "IOTA sensor" +description: "Instructions on how to integrate IOTA wallets sensors with Home Assistant." +date: 2017-12-31 13:29 +sidebar: true +comments: false +sharing: true +footer: true +logo: iota.png +ha_category: Finance +ha_release: 0.62 +ha_iot_class: "Cloud Polling" +--- + +The sensors are automatically created if the [IOTA hub](/components/iota/) is present. + +Available sensors: + +- Wallet balance +- Node information + From 970acbb40b97f6abbd83323a2e23ef3aafaf199c Mon Sep 17 00:00:00 2001 From: CV Date: Thu, 25 Jan 2018 19:28:29 +0100 Subject: [PATCH 186/993] Make init script raspi-proof (#4459) Raspbian does not keep files in /run. Therefor the pid directory needs to be created every time after boot. The easies is to put this into the start function. Sorry, I did not test the patch with all my legacy systems. --- source/_docs/autostart/init.d.markdown | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-) diff --git a/source/_docs/autostart/init.d.markdown b/source/_docs/autostart/init.d.markdown index 6e8e513955..db3ff12fee 100644 --- a/source/_docs/autostart/init.d.markdown +++ b/source/_docs/autostart/init.d.markdown @@ -94,11 +94,7 @@ FLAGS="-v --config $CONFIG_DIR --pid-file $PID_FILE --log-file $LOG_FILE --daemo start() { - if [ ! -d "$PID_DIR" ]; then - echo "It seems you did not run" - echo -e "\tservice hass-daemon install" - return 1 - fi + create_piddir if [ -f $PID_FILE ] && kill -0 $(cat $PID_FILE) 2> /dev/null; then echo 'Service already running' >&2 return 1 @@ -218,11 +214,7 @@ LOG_FILE="$LOG_DIR/home-assistant.log" FLAGS="-v --config $CONFIG_DIR --pid-file $PID_FILE --log-file $LOG_FILE --daemon" start() { - if [ ! -d "$PID_DIR" ]; then - echo "It seems you did not run" - echo -e "\tservice hass-daemon install" - return 1 - fi + create_piddir if [ -f $PID_FILE ] && kill -0 $(cat $PID_FILE) 2> /dev/null; then echo 'Service already running' >&2 return 1 From 6901bdc5e9d76fec76116892aef1f8da53473aad Mon Sep 17 00:00:00 2001 From: Mahasri Kalavala Date: Thu, 25 Jan 2018 13:38:03 -0500 Subject: [PATCH 187/993] Update scripts.markdown --- source/_docs/scripts.markdown | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/source/_docs/scripts.markdown b/source/_docs/scripts.markdown index 91399075b3..930b58700c 100644 --- a/source/_docs/scripts.markdown +++ b/source/_docs/scripts.markdown @@ -125,6 +125,36 @@ event_data: domain: light ``` +### {% linkable_title Raise and Consume Custom Events %} + +The following automation shows how to raise a custom event called `event_light_turned_on` with `entity_id` as the event data. The action part could be inside a script or an automation. + +``` +- alias: Fire Event + trigger: + platform: state + entity_id: light.kitchen + to: 'on' + action: + event: event_light_turned_on + event_data: + entity_id: "{{ trigger.entity_id }}" +``` + +The following automation shows how to capture the custom event `event_light_turned_on`, and retrieve corresponsing `entity_id` that was passed as the event data. + +``` +- alias: Capture Event + trigger: + platform: event + event_type: light_turned_on + action: + - service: notify.notify + data_template: + message: "{{ trigger.event.data.entity_id }} is turned on." +``` + + [Script component]: /components/script/ [automations]: /getting-started/automation-action/ [Alexa/Amazon Echo]: /components/alexa/ From 7f22cf168383dcac15d5ff2d88060cea964b90f4 Mon Sep 17 00:00:00 2001 From: Mahasri Kalavala Date: Thu, 25 Jan 2018 15:09:22 -0500 Subject: [PATCH 188/993] Update scripts.markdown --- source/_docs/scripts.markdown | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/source/_docs/scripts.markdown b/source/_docs/scripts.markdown index 930b58700c..4c6ff1d47b 100644 --- a/source/_docs/scripts.markdown +++ b/source/_docs/scripts.markdown @@ -116,6 +116,7 @@ wait_template: "{{ is_state(dummy, 'off') }}" This action allows you to fire an event. Events can be used for many things. It could trigger an automation or indicate to another component that something is happening. For instance, in the below example it is used to create an entry in the logbook. +{% raw %} ```yaml event: LOGBOOK_ENTRY event_data: @@ -124,12 +125,14 @@ event_data: entity_id: device_tracker.paulus domain: light ``` +{% endraw %} ### {% linkable_title Raise and Consume Custom Events %} The following automation shows how to raise a custom event called `event_light_turned_on` with `entity_id` as the event data. The action part could be inside a script or an automation. -``` +{% raw %} +```yaml - alias: Fire Event trigger: platform: state @@ -140,10 +143,11 @@ The following automation shows how to raise a custom event called `event_light_t event_data: entity_id: "{{ trigger.entity_id }}" ``` +{% endraw %} The following automation shows how to capture the custom event `event_light_turned_on`, and retrieve corresponsing `entity_id` that was passed as the event data. -``` +```yaml - alias: Capture Event trigger: platform: event From 04400a35535c1e3143a245ce0ef4c9e72fbc9fe6 Mon Sep 17 00:00:00 2001 From: Franck Nijhof Date: Thu, 25 Jan 2018 21:43:09 +0100 Subject: [PATCH 189/993] :books: Adds Hass.io Addon Presentation section (#4509) --- .../asides/developers_navigation.html | 1 + .../developers/hassio/addon_config.markdown | 9 +++- .../hassio/addon_development.markdown | 15 +++--- .../hassio/addon_presentation.markdown | 49 +++++++++++++++++++ .../hassio/addon_repository.markdown | 2 +- 5 files changed, 65 insertions(+), 11 deletions(-) create mode 100644 source/developers/hassio/addon_presentation.markdown diff --git a/source/_includes/asides/developers_navigation.html b/source/_includes/asides/developers_navigation.html index 34f1de4647..0f42206817 100644 --- a/source/_includes/asides/developers_navigation.html +++ b/source/_includes/asides/developers_navigation.html @@ -95,6 +95,7 @@

  • {% active_link /developers/hassio/addon_communication/ Communication %}
  • {% active_link /developers/hassio/addon_testing/ Local Testing %}
  • {% active_link /developers/hassio/addon_publishing/ Publishing %}
  • +
  • {% active_link /developers/hassio/addon_presentation/ Presentation %}
  • {% active_link /developers/hassio/addon_repository/ Repositories %}
  • diff --git a/source/developers/hassio/addon_config.markdown b/source/developers/hassio/addon_config.markdown index 031dbabb3f..005c8a0cd8 100644 --- a/source/developers/hassio/addon_config.markdown +++ b/source/developers/hassio/addon_config.markdown @@ -12,10 +12,15 @@ redirect_from: /hassio/addon_config/ Each add-on is stored in a folder. The file structure looks like this: -``` +```text addon_name/ - Dockerfile + build.json + CHANGELOG.md config.json + Dockerfile + icon.png + logo.png + README.md run.sh ``` diff --git a/source/developers/hassio/addon_development.markdown b/source/developers/hassio/addon_development.markdown index 40680cd141..ec1f3f9674 100644 --- a/source/developers/hassio/addon_development.markdown +++ b/source/developers/hassio/addon_development.markdown @@ -14,11 +14,10 @@ Add-ons for Hass.io allow the user to extend the functionality around Home Assis Under the hood, add-ons are Docker images published in [Docker Hub](https://hub.docker.com/). Developers can create [GitHub](https://github.com) repositories that contain multiple references to add-ons for easy sharing with the community. -
      -
    1. Tutorial: Making your first add-on
    2. -
    3. Configuration
    4. -
    5. Communication
    6. -
    7. Local Testing
    8. -
    9. Publishing
    10. -
    11. Repositories
    12. -
    +1. [Tutorial: Making your first add-on](/developers/hassio/addon_tutorial/) +1. [Configuration](/developers/hassio/addon_config/) +1. [Communication](/developers/hassio/addon_communication/) +1. [Local Testing](/developers/hassio/addon_testing/) +1. [Publishing](/developers/hassio/addon_publishing/) +1. [Presentation](/developers/hassio/addon_presentation/) +1. [Repositories](/developers/hassio/addon_repository/) diff --git a/source/developers/hassio/addon_presentation.markdown b/source/developers/hassio/addon_presentation.markdown new file mode 100644 index 0000000000..413dd0489d --- /dev/null +++ b/source/developers/hassio/addon_presentation.markdown @@ -0,0 +1,49 @@ +--- +layout: page +title: "Presenting your add-on" +description: "Details on how to present your Hass.io add-on." +date: 2018-01-24 22:15 +sidebar: true +comments: false +sharing: true +footer: true +--- + +If you decide to share your add-on to the public, paying attention to details is recommended. Of course, your add-on should have a proper name and description, but Hass.io also gives you some other tools to present your add-on even nicer. + +## {% linkable_title Adding documentation %} + +Good documentation helps the consumer of your add-on to understand its usage, explains configuration options, points users in the right direction in the case they have questions or issues, and contains the license under which the add-on was published. + +This file containing the documentation is usually referred to as the "README", which is generally published as the `README.md` file. + +Take a look at other projects for inspiration. For example, see the `README.md` of the [Community Hass.io Add-ons: Homebridge](https://github.com/hassio-addons/addon-homebridge/blob/master/README.md) add-on. + +In future versions of Hass.io, the `README.md` file will be displayed in the Home Assistant frontend. + +## {% linkable_title Add-on icon & logo %} + +A picture is worth a thousand words. Therefore, your add-on can be improved by adding a proper image icon and logo. Those images are used when showing your add-on in the Home Assistant Hass.io panel and which will significantly improve the visual representation of your add-on. + +Requirements for the logo of your add-on: + +- The logo must be in the Portable Network Graphics format (`.png`). +- The filename must be `logo.png`. +- It is recommended to keep the logo size around 250x100px. You may choose to use a different size or aspect ratio as you seem fit for your add-on. + +Requirements for the icon of your add-on: + +- The icon must be in the Portable Network Graphics format (`.png`). +- The filename must be `icon.png`. +- The aspect ratio of the icon must be 1x1 (square). +- It is recommended to use an icon size of 128x128px. + +## {% linkable_title Keeping a changelog %} + +It is likely you are going to release newer versions of your add-on in the future. In case that happens, the users of your add-on would see an upgrade notice and probably want to know what changes were made in the latest version. + +A changelog is a file which contains a curated, chronologically ordered list of notable changes for each version of your add-on and is generally published as the `CHANGELOG.md` file. + +If you are in need of a guide on keeping a changelog, we would recommend checking the [keep a changelog](http://keepachangelog.com) website. They have developed a standard that is used by many opensource projects around the world. + +In future versions of Hass.io, the `CHANGELOG.md` file will be displayed in the Home Assistant frontend. diff --git a/source/developers/hassio/addon_repository.markdown b/source/developers/hassio/addon_repository.markdown index 3ad7da57fe..645fb1cf81 100644 --- a/source/developers/hassio/addon_repository.markdown +++ b/source/developers/hassio/addon_repository.markdown @@ -10,7 +10,7 @@ footer: true redirect_from: /hassio/addon_repository/ --- -An Add-on repository can contain one or more add-ons. Each add-on is stored in it's own unique folder. To be indentified as a repository, the repository must contain a configuration file. +An add-on repository can contain one or more add-ons. Each add-on is stored in it's own unique folder. To be indentified as a repository, the repository must contain a configuration file. Check the [Example add-on repository](https://github.com/home-assistant/hassio-addons-example) for further details. From f7c2c1af03aee68245a1b8f5540331fdd025c88f Mon Sep 17 00:00:00 2001 From: Guyanthalas Date: Thu, 25 Jan 2018 12:50:43 -0800 Subject: [PATCH 190/993] sync usb_path to other docs (#4439) * sync usb_path to other docs The hassio zwave documents reference usb_path: /dev/ttyACM0, so this document should be in sync. After some discussion it appears that this could be variable, in which case there should be a good way to figure out the CORRECT answer rather than using a guess as example code without stating it as such. Possibly linking back to the linux "how to find" section? * Removed manual set language per suggestion --- source/_docs/z-wave/installation.markdown | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/source/_docs/z-wave/installation.markdown b/source/_docs/z-wave/installation.markdown index 0beb85d35d..557128a371 100644 --- a/source/_docs/z-wave/installation.markdown +++ b/source/_docs/z-wave/installation.markdown @@ -159,17 +159,9 @@ To enable Z-Wave, plug your Z-Wave USB stick into your Raspberry Pi 3 and add th ```yaml zwave: - usb_path: /dev/ttyAMA0 + usb_path: /dev/ttyACM0 ``` -For some devices the `/dev/ttyAMA0` device is not detected by udev and is therefore not mapped by Docker. To explicitly set this device for mapping to Home-Assistant, execute the following command using the ssh add-on: - -```bash -$ curl -d '{"devices": ["ttyAMA0"]}' http://hassio/homeassistant/options -``` - -After that, you need to change `usb_path` to `/dev/ttyAMA0`. - ### {% linkable_title RancherOS %} If you're using RancherOS for containers, you'll need to ensure you enable the kernel-extras service so that the `USB_ACM` module (also known as `cdc_acm`) is loaded: From 021f7ae3ce95549b8d37a0a7cf8641453d9d1c38 Mon Sep 17 00:00:00 2001 From: Sebastian Muszynski Date: Thu, 25 Jan 2018 21:56:41 +0100 Subject: [PATCH 191/993] Service description for setting a fixed scene of Xiaomi MIIO light added. (#4170) --- source/_components/light.xiaomi_miio.markdown | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/source/_components/light.xiaomi_miio.markdown b/source/_components/light.xiaomi_miio.markdown index 5f76deb341..90e5d1359b 100644 --- a/source/_components/light.xiaomi_miio.markdown +++ b/source/_components/light.xiaomi_miio.markdown @@ -34,3 +34,14 @@ Configuration variables: - **host** (*Required*): The IP of your light. - **token** (*Required*): The API token of your light. - **name** (*Optional*): The name of your light. + +## {% linkable_title Platform Services %} + +### Service fan/xiaomi_miio_set_scene + +Set one of the 4 available fixed scenes. + +| Service data attribute | Optional | Description | +|---------------------------|----------|-------------------------------------------------------| +| `entity_id` | yes | Only act on specific light. Else targets all. | +| `scene` | no | Scene, between 1 and 4. | From a468d83300ded3c409e12e30c52bdc2f3ba4952f Mon Sep 17 00:00:00 2001 From: Mahasri Kalavala Date: Thu, 25 Jan 2018 16:22:15 -0500 Subject: [PATCH 192/993] Update scripts.markdown --- source/_docs/scripts.markdown | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/source/_docs/scripts.markdown b/source/_docs/scripts.markdown index 4c6ff1d47b..ff74d5f12d 100644 --- a/source/_docs/scripts.markdown +++ b/source/_docs/scripts.markdown @@ -147,6 +147,7 @@ The following automation shows how to raise a custom event called `event_light_t The following automation shows how to capture the custom event `event_light_turned_on`, and retrieve corresponsing `entity_id` that was passed as the event data. +{% raw %} ```yaml - alias: Capture Event trigger: @@ -157,7 +158,7 @@ The following automation shows how to capture the custom event `event_light_turn data_template: message: "{{ trigger.event.data.entity_id }} is turned on." ``` - +{% endraw %} [Script component]: /components/script/ [automations]: /getting-started/automation-action/ From 94476935debf1457d1fe8fe97c366d5193082c55 Mon Sep 17 00:00:00 2001 From: DubhAd Date: Thu, 25 Jan 2018 21:55:59 +0000 Subject: [PATCH 193/993] Pulled through notes of other path options (#4438) * Pulled through notes of other path options Added notes that for Hass.io there may be multiple path options depending on the device. * Updated Hass.io note --- source/_docs/z-wave/installation.markdown | 2 ++ 1 file changed, 2 insertions(+) diff --git a/source/_docs/z-wave/installation.markdown b/source/_docs/z-wave/installation.markdown index 557128a371..01fe80d097 100644 --- a/source/_docs/z-wave/installation.markdown +++ b/source/_docs/z-wave/installation.markdown @@ -162,6 +162,8 @@ zwave: usb_path: /dev/ttyACM0 ``` +Depending on your Z-Wave device it may instead be `/dev/ttyAMA0` (eg Razberry board) or `/dev/ttyUSB0` (eg HUBUZB-1). + ### {% linkable_title RancherOS %} If you're using RancherOS for containers, you'll need to ensure you enable the kernel-extras service so that the `USB_ACM` module (also known as `cdc_acm`) is loaded: From 6496e3ef21e02d8c74cca9fdf7bb44c7bc26de33 Mon Sep 17 00:00:00 2001 From: Jerad Meisner Date: Thu, 25 Jan 2018 14:25:38 -0800 Subject: [PATCH 194/993] Added documentation for Xeoma camera platform (#4405) * Added documentation for Xeoma camera platform * :pencil2: Minor changes * Add periods --- source/_components/camera.xeoma.markdown | 89 +++++++++++++++++++++++ source/images/supported_brands/xeoma.png | Bin 0 -> 6530 bytes 2 files changed, 89 insertions(+) create mode 100644 source/_components/camera.xeoma.markdown create mode 100644 source/images/supported_brands/xeoma.png diff --git a/source/_components/camera.xeoma.markdown b/source/_components/camera.xeoma.markdown new file mode 100644 index 0000000000..66603dabb3 --- /dev/null +++ b/source/_components/camera.xeoma.markdown @@ -0,0 +1,89 @@ +--- +layout: page +title: "Xeoma Camera" +description: "Instructions on how to integrate camera video feeds from a Xeoma server in Home Assistant" +date: 2018-01-12 20:05 +sidebar: true +comments: false +sharing: true +footer: true +logo: xeoma.png +ha_category: Camera +ha_iot_class: "Local Polling" +ha_release: 0.62 +--- + + +The `Xeoma` camera platform allows you to view the video feeds from a [Xeoma](http://felenasoft.com/xeoma) video surveillance server. + +To enable Xeoma camera feeds, add the following lines to your `configuration.yaml`: + +```yaml +# Example configuration.yaml entry +camera: + - platform: xeoma + host: http://localhost:10090 +``` + +{% configuration %} +host: + description: The URL of the Xeoma server's web interface. + required: true + type: string +username: + description: The username used to access the Xeoma server's web interface. + required: false + type: string +password: + description: The password used to access the Xeoma server's web interface. + required: false + type: string +new_version: + description: Set to false if the Xeoma server version is 17.5 or earlier. + required: false + default: true + type: boolean +cameras: + description: List of customizations for individual Xeoma cameras. + required: false + type: list + keys: + image_name: + description: The name of the JPEG image for this camera as configured in Xeoma (without .jpg extension). + required: true + type: string + name: + description: The name to display in the frontend for this camera. + required: false + default: The `image_name` for this camera. + type: string + hide: + description: Don't show this camera in Home Assistant. + required: false + default: false + type: boolean +{% endconfiguration %} + +## {% linkable_title Full examples %} + +```yaml +# Example configuration.yaml entry +camera: + - platform: xeoma + host: http://localhost:10090 + username: user + password: secretpassword + new_version: false + cameras: + - image_name: front_porch + name: Front Porch + - image_name: back_patio + hide: true +``` + +To use this platform, you must have the Xeoma Web Server module enabled in at least one of your camera chains. + +This platform will parse the Xeoma web interface to find all enabled cameras and add them all to Home Assistant. You can +hide individual cameras using the platform configuration. + +The `image_name` configuration value for each camera should match the name supplied to the Xeoma Web Server configuration (under _Path to access images_) with the _.jpg_ extension removed. diff --git a/source/images/supported_brands/xeoma.png b/source/images/supported_brands/xeoma.png new file mode 100644 index 0000000000000000000000000000000000000000..7311d88d972f8ca3d5f58e7543ef37b2d59e30b4 GIT binary patch literal 6530 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 aLB4DmxgwjmQct`sA<@5Kq*JbC8}(m;LCPWk literal 0 HcmV?d00001 From 3daa8c815d14d20f1c844549c5e45d5f8f6018af Mon Sep 17 00:00:00 2001 From: Mahasri Kalavala Date: Thu, 25 Jan 2018 18:16:46 -0500 Subject: [PATCH 195/993] Update scripts.markdown --- source/_docs/scripts.markdown | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/source/_docs/scripts.markdown b/source/_docs/scripts.markdown index ff74d5f12d..e66b326c86 100644 --- a/source/_docs/scripts.markdown +++ b/source/_docs/scripts.markdown @@ -136,12 +136,12 @@ The following automation shows how to raise a custom event called `event_light_t - alias: Fire Event trigger: platform: state - entity_id: light.kitchen + entity_id: switch.kitchen to: 'on' action: - event: event_light_turned_on + event: event_light_state_changed event_data: - entity_id: "{{ trigger.entity_id }}" + state: "on" ``` {% endraw %} @@ -152,11 +152,11 @@ The following automation shows how to capture the custom event `event_light_turn - alias: Capture Event trigger: platform: event - event_type: light_turned_on + event_type: event_light_state_changed action: - service: notify.notify data_template: - message: "{{ trigger.event.data.entity_id }} is turned on." + message: "kitchen light is turned {{ trigger.event.data.state }}" ``` {% endraw %} From 3a068a85a5db9d6e391c462331d57c7a8f25b6e5 Mon Sep 17 00:00:00 2001 From: Nash Kaminski Date: Fri, 26 Jan 2018 02:34:54 -0600 Subject: [PATCH 196/993] Update documentation for SNMP switch component to reflect changes. (#4190) --- source/_components/switch.snmp.markdown | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/source/_components/switch.snmp.markdown b/source/_components/switch.snmp.markdown index 7dd158291c..59d9b23904 100644 --- a/source/_components/switch.snmp.markdown +++ b/source/_components/switch.snmp.markdown @@ -29,13 +29,16 @@ switch: Configuration variables: -- **baseoid** (*Required*): The SNMP BaseOID which to poll for the state of the switch and which to set in order to turn the switch on and off. +- **baseoid** (*Required*): The SNMP BaseOID which to poll for the state of the switch. +- **command_oid** (*Optional*): The SNMP OID which to set in order to turn the switch on and off, if different from `baseoid`. - **host** (*Optional*): The IP/host which to control. Defaults to `localhost`. - **port** (*Optional*): The port on which to communicate. Defaults to `161`. - **community** (*Optional*): community string to use for authentication. Defaults to `private`. - **version** (*Optional*): SNMP version to use - either `1` or `2c`. Defaults to `1`. -- **payload_on** (*Optional*): What return value represents an `On` state for the switch. The same value is used in writes to turn on the switch. Defaults to `1`. -- **payload_off** (*Optional*): What return value represents an `Off` state for the switch. The same value is used in writes to turn off the switch. Defaults to `0`. +- **payload_on** (*Optional*): What return value represents an `On` state for the switch. The same value is used in writes to turn on the switch if `command_payload_on` is not set. Defaults to `1`. +- **payload_off** (*Optional*): What return value represents an `Off` state for the switch. The same value is used in writes to turn off the switch if `command_payload_off` is not set. Defaults to `0`. +- **command_payload_on** (*Optional*): The value to write to turn on the switch, if different from `payload_on`. +- **command_payload_off** (*Optional*): The value to write to turn off the switch, if different from `payload_off`. You should check with your device's vendor to find out the correct BaseOID and what values turn the switch on and off. From 6129ab31e9139d8275758fb849133efea621756c Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Fri, 26 Jan 2018 00:50:45 -0800 Subject: [PATCH 197/993] Version bump to 0.62 --- _config.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/_config.yml b/_config.yml index fb491ec479..673e9d8eac 100644 --- a/_config.yml +++ b/_config.yml @@ -139,12 +139,12 @@ social: # Home Assistant release details current_major_version: 0 -current_minor_version: 61 -current_patch_version: 1 -date_released: 2018-01-16 +current_minor_version: 62 +current_patch_version: 0 +date_released: 2018-01-27 # Either # or the anchor link to latest release notes in the blog post. # Must be prefixed with a # and have double quotes around it. # Major release: -patch_version_notes: "#release-0611---january-16" +patch_version_notes: "#" # Minor release (Example #release-0431---april-25): From 661c13b720581cad29601ee4e9bd281891adf022 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Fri, 26 Jan 2018 20:47:37 +0100 Subject: [PATCH 198/993] Update --- source/help/trivia.markdown | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/source/help/trivia.markdown b/source/help/trivia.markdown index 78c735ea8f..6d033a243d 100644 --- a/source/help/trivia.markdown +++ b/source/help/trivia.markdown @@ -25,21 +25,20 @@ The current logo was created by [Jeremy Geltman](http://jeremygeltman.com/). Fur ### {% linkable_title License %} -Home Assistant is open source software and available under the [MIT](https://opensource.org/licenses/MIT) license. +Home Assistant is open source software and available under the [Apache 2.0](https://www.apache.org/licenses/LICENSE-2.0) license. ### {% linkable_title Numbers %} This sections just contains some random numbers of the Home Assistant eco-system. Sorry, only the main repository counts. -| Description | 2015 | 2016 | +| Description | 2015 | 2016 | 2017 | |---|---| -| [Gitter.io](https://discord.gg/c5DvZ4e) | 334 | 2367 | -| [Forum posts](https://community.home-assistant.io/) | 352 | 33004 | -| [Forum topics](https://community.home-assistant.io/) | 83 | 4863 | -| [Forum members](https://community.home-assistant.io/) | 92 | 3931 | -| [Github stars](https://github.com/home-assistant/home-assistant/stargazers) | 2519 | 5239 | -| [Github forks](https://github.com/home-assistant/home-assistant/network) | 374 | 1424 | -| Page views [ha.io](https://home-assistant.io) | 190,271 | 1,284,855 | +| [Forum posts](https://community.home-assistant.io/) | 352 | 33004 | 171981 | +| [Forum topics](https://community.home-assistant.io/) | 83 | 4863 | 21512 | +| [Forum members](https://community.home-assistant.io/) | 92 | 3931 | 16663 | +| [Github stars](https://github.com/home-assistant/home-assistant/stargazers) | 2519 | 5239 | 12074 | +| [Github forks](https://github.com/home-assistant/home-assistant/network) | 374 | 1424 | 3474 | +| Page views [ha.io](https://home-assistant.io) | 600,372 | 6,614,343 | 23,727,481 | ### {% linkable_title Commit per year %} @@ -50,6 +49,7 @@ The numbers below only covers the [main git repository](https://github.com/home- 2014: 328 2015: 2963 2016: 4299 +2017: 3917 ``` More details and statistics can be found on [Github](https://github.com/home-assistant/home-assistant/graphs/contributors). From fd44f52d7fc7862db360a1610800aee1330fc7ed Mon Sep 17 00:00:00 2001 From: Adriaan Peeters Date: Fri, 26 Jan 2018 21:10:40 +0100 Subject: [PATCH 199/993] fix typo in link to rainbird component (#4525) --- source/_components/sensor.rainbird.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/sensor.rainbird.markdown b/source/_components/sensor.rainbird.markdown index aebb59be07..750c287497 100644 --- a/source/_components/sensor.rainbird.markdown +++ b/source/_components/sensor.rainbird.markdown @@ -15,7 +15,7 @@ ha_iot_class: "Local Polling" This `rainbird` sensor allows interacting with [LNK WiFi](http://www.rainbird.com/landscape/products/controllers/LNK-WiFi.htm) module of the Rain Bird Irrigation system in Home Assistant. -Once you have enabled the [Rain Bird component](/components/rainburd), add the following to your `configuration.yaml` file to enable the rain sensor: +Once you have enabled the [Rain Bird component](/components/rainbird), add the following to your `configuration.yaml` file to enable the rain sensor: ```yaml # Example configuration.yaml entry From 19eccf43e680b80a988c64d1e51a93aff2a633f8 Mon Sep 17 00:00:00 2001 From: Aaron Bach Date: Fri, 26 Jan 2018 13:47:25 -0700 Subject: [PATCH 200/993] Adds docs for Pollen.com sensor platform (#4524) * Adds docs for Pollen.com sensor platform * Updating version number --- source/_components/sensor.pollen.markdown | 81 ++++++++++++++++++++++ source/images/supported_brands/pollen.jpg | Bin 0 -> 56460 bytes 2 files changed, 81 insertions(+) create mode 100644 source/_components/sensor.pollen.markdown create mode 100644 source/images/supported_brands/pollen.jpg diff --git a/source/_components/sensor.pollen.markdown b/source/_components/sensor.pollen.markdown new file mode 100644 index 0000000000..9a9ddc05ec --- /dev/null +++ b/source/_components/sensor.pollen.markdown @@ -0,0 +1,81 @@ +--- +layout: page +title: "Pollen.com" +description: "Instructions on how to use Pollen.com data within Home Assistant" +date: 2018-01-10 19:20:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: pollen.jpg +ha_category: Health +ha_release: 0.63 +ha_iot_class: "Cloud Polling" +--- + +The `pollen` sensor platform collects and displays allergy and disease +information (based on a U.S. ZIP code) from [Pollen.com](https://www.pollen.com/). Data measured includes: + +* Indicies for allergies and cold/flu measurements +* Trends +* Current outlook +* more! + +## {% linkable_title Configuring the Platform %} + +To integrate `pollen` into Home Assistant, add the following section to your +`configuration.yaml` file (adjusting the `monitored_conditions` list to your +liking): + +```yaml +sensor: + platform: pollen + zip_code: ZIP_CODE + monitored_conditions: + - allergy_average_forecasted + - allergy_average_historical + - allergy_index_today + - allergy_index_tomorrow + - allergy_index_yesterday + - disease_average_forecasted +``` + +{% configuration %} + zip_code: + description: the U.S. ZIP code to gather data for + required: true + type: int + monitored_conditions: + description: the metric types to monitor; valid values are specified below + required: true + type: list +{% endconfiguration %} + +## {% linkable_title Available Metrics %} + +The following metrics can be monitored: + +* Allergy Index: Forecasted Average (`allergy_average_forecasted`): the average +forecasted allergy index over the next 5 days +* Allergy Index: Historical Average (`allergy_average_historical`): the average +historical allergy index over the past 30 days +* Allergy Index: Today (`allergy_index_today`): the allergy index for today +* Allergy Index: Tomorrow (`allergy_index_tomorrow`): the allergy index for +tomorrow +* Allergy Index: Yesterday (`allergy_index_yesterday`): the allergy index for +yesterday +* Cold & Flu: Forecasted Average (`disease_average_forecasted`): the average +forecasted cold/flu index over the next 5 days + +## {% linkable_title Understanding the Indices %} + +Any index-related sensor will have a value between 0.0 and 12.0. The values +map to the following human-friendly ratings: + +Range | Rating +--------- | ----------- +0.0 - 2.4 | Low +2.5 - 4.8 | Low/Medium +4.9 - 7.2 | Medium +7.3 - 9.6 | Medium/High +9.7 - 12.0 | High diff --git a/source/images/supported_brands/pollen.jpg b/source/images/supported_brands/pollen.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a2fb0158aad0ba81c50f288ff8714fe66a53c71a GIT binary patch literal 56460 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 Date: Fri, 26 Jan 2018 20:57:54 +0000 Subject: [PATCH 201/993] Add icon_template description to configuration (#4521) --- source/_components/switch.template.markdown | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/source/_components/switch.template.markdown b/source/_components/switch.template.markdown index a6f545a97b..86d0e95e57 100644 --- a/source/_components/switch.template.markdown +++ b/source/_components/switch.template.markdown @@ -67,6 +67,10 @@ switch: description: Defines an action to run when the switch is turned off. required: true type: action + icon_template: + description: Defines a template for the icon of the switch. + required: false + type: template {% endconfiguration %} ## {% linkable_title Considerations %} From 5ba6298e21c524800364206b3619c53ca97b3985 Mon Sep 17 00:00:00 2001 From: akloeckner Date: Fri, 26 Jan 2018 22:12:04 +0100 Subject: [PATCH 202/993] clarify scenes (#4471) * clarify scenes - add helper pointer, see https://github.com/home-assistant/home-assistant/pull/11819 - add workaround for multiple services, not sure actually where I found this - add description of state definition, as it took me some time to get this * :pencil2: Minor changes --- source/_components/scene.markdown | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/source/_components/scene.markdown b/source/_components/scene.markdown index 74e8dd09b4..90c816cb1c 100644 --- a/source/_components/scene.markdown +++ b/source/_components/scene.markdown @@ -11,7 +11,7 @@ logo: home-assistant.png ha_category: Organization --- -You can create scenes that capture the states you want certain entities to be. For example a scene can specify that light A should be turned on and light B should be bright red. +You can create scenes that capture the states you want certain entities to be. For example, a scene can specify that light A should be turned on and light B should be bright red. ```yaml # Example configuration.yaml entry @@ -38,6 +38,13 @@ Configuration variables: - **name** (*Required*): Friendly name of scene. - **entities** (*Required*): Entities to control. +As you can see, there are two ways to define the states of each `entity_id`: + +- Define the `state` directly with the entity. +- Define a complex state with its attributes. + +The mapping from states to services is done with the [state helper](https://github.com/home-assistant/home-assistant/blob/master/homeassistant/helpers/state.py#L74). So, please have a look there for available states for your scenes. + Scenes can be activated using the service `scene.turn_on` (there is no 'scene.turn_off' service). ```yaml @@ -55,5 +62,5 @@ automation: ```

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

    From 4b3ed6a65080a28ca56f2d349639b0782b1bc85e Mon Sep 17 00:00:00 2001 From: Nolan Gilley Date: Fri, 26 Jan 2018 16:12:31 -0500 Subject: [PATCH 203/993] add erc20 token (#4523) * add erc20 token * :pencil2: Minor corrections --- source/_components/sensor.etherscan.markdown | 23 +++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/source/_components/sensor.etherscan.markdown b/source/_components/sensor.etherscan.markdown index fcdc538705..a94f0689a2 100644 --- a/source/_components/sensor.etherscan.markdown +++ b/source/_components/sensor.etherscan.markdown @@ -13,16 +13,22 @@ ha_release: 0.47 ha_iot_class: "Cloud Polling" --- +The `Etherscan` sensor platform displays Ether and ERC-20 token balances from [Etherscan.io](https://etherscan.io). -The `Etherscan` sensor platform displays Ethereum wallet balances from [Etherscan.io](https://etherscan.io). - -To add the Etherscan sensor to your installation, specify an ethereum address to watch in the `configuration.yaml` file: +To add the Etherscan sensor to your installation, specify an Ethereum address to watch in the `configuration.yaml` file. You can also optionally provide a token name to retrieve and ERC-20 token balance. If no token is provided then the balance retrieved will be in ETH. You can also optionally provide the token contract address in case the token name is not found. ```yaml # Example configuration.yaml entry sensor: - platform: etherscan address: '0xfB6916095ca1df60bB79Ce92cE3Ea74c37c5d359' + - platform: etherscan + address: "0xfB6916095ca1df60bB79Ce92cE3Ea74c37c5d359" + token: OMG + - platform: etherscan + address: "0xfB6916095ca1df60bB79Ce92cE3Ea74c37c5d359" + token_address: "0xef68e7c694f40c8202821edf525de3782458639f" + token: LRC ``` {% configuration %} @@ -34,6 +40,13 @@ name: description: The name of the sensor used in the frontend. required: false type: string - default: Ethereum Balance + default: ETH Balance +token: + description: The ERC20 token symbol. i.e., OMG. + required: false + type: string +token_address: + description: The ERC20 token contract address. + required: false + type: string {% endconfiguration %} - From 07be99431e2c2b34ac8429048b0a224bf2584ed8 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Fri, 26 Jan 2018 22:30:53 +0100 Subject: [PATCH 204/993] Add entry about he releases --- source/_faq/release.markdown | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 source/_faq/release.markdown diff --git a/source/_faq/release.markdown b/source/_faq/release.markdown new file mode 100644 index 0000000000..5abcafcee5 --- /dev/null +++ b/source/_faq/release.markdown @@ -0,0 +1,16 @@ +--- +layout: page +title: "Releases" +description: "Releases" +date: 2017-06-18 09:00 +sidebar: true +comments: false +sharing: true +footer: true +ha_category: Common +--- + +The usual release cycle is two weeks. + + +There will be no support for Python 2.x. Python 2 will be EOL in [2020](https://www.python.org/dev/peps/pep-0373/#id2) and it doesn't make any sense to support a release which was planned to be retired in 2015. From 9e7e78b3c97ca35d39e69014597ebc1b4071a2fe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jens=20=C3=98stergaard=20Nielsen?= Date: Fri, 26 Jan 2018 23:05:10 +0100 Subject: [PATCH 205/993] IHC component (#4520) * New IHC platform * autosetup -> auto_setup * Moved auto setup to the IHC component * Removed by LK in logo * Changes from review. * Defaults in configurations. manualy setup" changed to "manual setup" (Anchors adjusted) * Relative links changed to absolute links * 'host' renamed to 'url' * :pencil2: Tweaks --- source/_components/ihc.markdown | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/source/_components/ihc.markdown b/source/_components/ihc.markdown index 7bffc48415..0030d30361 100644 --- a/source/_components/ihc.markdown +++ b/source/_components/ihc.markdown @@ -21,7 +21,7 @@ An `ihc` section must be present in the `configuration.yaml` file and contain th ```yaml # Example configuration.yaml entry ihc: - host: http://192.168.1.3 + url: http://192.168.1.3 username: admin password: mysecret auto_setup: True @@ -33,10 +33,6 @@ auto_setup: description: True to have IHC products auto setup. required: false type: bool -host: - description: The URL of the IHC Controller. - required: true - type: string info: description: If True additional IHC info will be shown on each component. required: false @@ -45,6 +41,10 @@ password: description: The password for the IHC Controller. required: true type: string +url: + description: The URL of the IHC Controller. + required: true + type: string username: description: The username for the IHC Controller. required: true @@ -63,7 +63,7 @@ There is currently support for the following device types within Home Assistant: ### Auto setup of IHC products -If auto setup is enabled, the `ihc` component will automatically find IHC products and insert these as devices in Home Assistant. +If the auto setup is enabled, the `ihc` component will automatically find IHC products and insert these as devices in Home Assistant. To disable this set auto_setup to False. (Auto setup is on by default) See the individual device types for a list of IHC products to be recognized automatically. @@ -87,4 +87,4 @@ The IHC resource id should be specified as an integer value. (In the project fil If you want an easier way to get the IHC resource ids, you can download the [Alternative Service View application](https://www.dingus.dk/updated-ihc-alternative-service-view/). The application will show the product tree. You can expand it, select inputs and outputs and when selected you can see the resource id. -See each device type for the manual configuration options. +See the manual of each device type for configuration options. From 8ffd8883addf5fe1e332ff45eda1ed2f214a8cf5 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Fri, 26 Jan 2018 21:07:25 -0800 Subject: [PATCH 206/993] Add release blog post for 0.62 --- source/_posts/2018-01-27-release-62.markdown | 480 ++++++++++++++++++ source/hassio/index.markdown | 1 + .../images/blog/2018-01-0.62/components.png | Bin 0 -> 23954 bytes 3 files changed, 481 insertions(+) create mode 100644 source/_posts/2018-01-27-release-62.markdown create mode 100644 source/images/blog/2018-01-0.62/components.png diff --git a/source/_posts/2018-01-27-release-62.markdown b/source/_posts/2018-01-27-release-62.markdown new file mode 100644 index 0000000000..60a7f00601 --- /dev/null +++ b/source/_posts/2018-01-27-release-62.markdown @@ -0,0 +1,480 @@ +--- +layout: post +title: "0.62: MyChevy, Iota and Venstar Thermostat" +description: "Keep track of your Chevy Bolt, monitor your IOTA wallets and control your Venstar Thermostats." +date: 2018-01-27 01:00:00 +date_formatted: "January 27, 2018" +author: Paulus Schoutsen +author_twitter: balloob +comments: true +categories: Release-Notes +og_image: /images/blog/2018-01-0.62/components.png +--- + + + +Second release of the year and it's buzzing on GitHub. This release we had 70 people contribute code. We've also managed to finally get our PR count below a 100 open PRs again. A lot of cool stuff still waiting to make it to a future Home Assistant release. + +I want to give a shout out to [@martinhjelmare] and [@frenck]. Martin is doing an amazing job at code reviews and Franck has been kicking ass with Hass.io add-ons and keeping track of our documentation PRs. Thanks for this amazing work! + +## MyChevy + +With this new integration by [@sdague] you are able to keep an eye on your Chevy Bolt EV. Keep track if your car is plugged in, the battery stats and the range it is currently capable of driving. Hip! + +## New Platforms + +- Adding support for Lutron covers ([@nickovs] - [#11602]) ([lutron docs]) ([cover.lutron docs]) (new-platform) +- Add basic mychevy component ([@sdague] - [#11409]) ([mychevy docs]) (new-platform) +- Added support for TekSavvy bandwidth sensor ([@jpjodoin] - [#11186]) ([sensor.teksavvy docs]) (new-platform) +- Ihc component and platforms ([@dingusdk] - [#10916]) ([ihc docs]) ([binary_sensor.ihc docs]) ([light.ihc docs]) ([sensor.ihc docs]) ([switch.ihc docs]) (new-platform) +- Iota wallet ([@jinnerbichler] - [#11398]) ([iota docs]) ([sensor.iota docs]) (new-platform) + +## {% linkable_title If you need help... %} + +...don't hesitate to use our very active [forums](https://community.home-assistant.io/) or join us for a little [chat](https://discord.gg/c5DvZ4e). The release notes have comments enabled but it's preferred if you use the former communication channels. Thanks. + +## {% linkable_title Reporting Issues %} + +Experiencing issues introduced by this release? Please report them in our [issue tracker](https://github.com/home-assistant/home-assistant/issues). Make sure to fill in all fields of the issue template. + + + +## Breaking Changes + +- Tahoma platform will get new entity IDs ([@glpatcern] - [#11547]) ([tahoma docs]) ([cover.tahoma docs]) (breaking change) +- Mold indicator: attribute names no longer include spaces or periods ([@olskar] - [#11694]) ([sensor.mold_indicator docs]) (breaking change) +- Custom component devs only: `EntityComponent.add_entity(entity)` and `EntityComponent.async_add_entity(entity)` have been removed. Use `EntityComponent.add_entities([entity])` and `EntityComponent.async_add_entities([entity])` instead. ([@balloob] - [#11691]) (breaking change) + +## All changes + +- Upgrade keyring to 10.6.0 ([@fabaff] - [#11608]) +- Upgrad youtube_dl to 2017.12.31 ([@fabaff] - [#11610]) +- small sonos cleanup ([@pvizeli] - [#11607]) ([media_player.sonos docs]) +- Update Xiaomi Miio compontent broken URI ([@keesschollaart81] - [#11621]) ([light.xiaomi_miio docs]) +- light/mqqt_json: allow brightness scaling ([@jkoelker] - [#11613]) +- Adding support for Lutron covers ([@nickovs] - [#11602]) ([lutron docs]) ([cover.lutron docs]) (new-platform) +- Hyperion: Add brightness, HDMI and effect support ([@starkillerOG] - [#11543]) ([light.hyperion docs]) +- Fixes and enhancements for the Tahoma platform ([@glpatcern] - [#11547]) ([tahoma docs]) ([cover.tahoma docs]) (breaking change) +- upgrade xiaomi lib ([@danielhiversen] - [#11629]) +- Add templates to MQTT climate ([@tinloaf] - [#11623]) +- Upgrade coinmarketcap to 4.1.2 ([@fabaff] - [#11634]) +- Add Deconz support for Zigbee green power devices like Hue Tap ([@Kane610] - [#11455]) ([deconz docs]) ([sensor.deconz docs]) +- Bump dev to 0.62.0.dev0 ([@fabaff] - [#11652]) +- Add ability to specify a sender in the clicksend notification ([@heydonms] - [#11046]) ([notify.clicksend docs]) +- Round values to one decimal ([@covrig] - [#11673]) ([sensor.xiaomi_aqara docs]) +- Add basic mychevy component ([@sdague] - [#11409]) ([mychevy docs]) (new-platform) +- update mypy commandline arguments ([@benleb] - [#11638]) +- Add support for configuring jeelink RF parameters ([@hthiery] - [#11620]) +- Wemo Dimmer Support ([@angel12] - [#10882]) ([wemo docs]) ([light.wemo docs]) +- add temperature controls to eph-ember ([@ttroy50] - [#11400]) ([climate.ephember docs]) +- Upgrade youtube_dl to 2018.01.14 ([@fabaff] - [#11661]) +- Change line separator to LN ([@fabaff] - [#11662]) ([hive docs]) ([map docs]) ([binary_sensor.hive docs]) ([climate.hive docs]) ([light.hive docs]) ([notify.prowl docs]) ([sensor.hive docs]) ([switch.hive docs]) +- Upgrade sqlalchemy to 1.2.1 ([@fabaff] - [#11666]) +- Upgrade pylast to 2.1.0 ([@fabaff] - [#11668]) +- Added extra arguments to onvif platform config ([@karlkar] - [#11680]) ([camera.onvif docs]) +- Enable probot move ([@fabaff] - [#11690]) +- fixed not to include spaces or dots in attribute names ([@olskar] - [#11694]) ([sensor.mold_indicator docs]) (breaking change) +- Add attributes ([@fabaff] - [#11698]) ([sensor.random docs]) +- Feature/fritzdect errorhandling ([@BastianPoe] - [#11490]) ([switch.fritzdect docs]) +- Tesla bug fix #11598 ([@zabuldon] - [#11707]) +- Update mold_indicator.py ([@olskar] - [#11715]) ([sensor.mold_indicator docs]) +- Override default name for TP-Link devices ([@DanNixon] - [#11710]) ([light.tplink docs]) ([switch.tplink docs]) +- Don't use None inside header ([@pvizeli] - [#11725]) ([hassio docs]) +- Add enable_output service to Yamaha platform ([@postlund] - [#11103]) ([media_player.yamaha docs]) +- Fix effects not appearing in UI due to missing attribute ([@shortbloke] - [#11738]) ([light.flux_led docs]) +- Fix for None object access attempt ([@karlkar] - [#11748]) +- Fixed universal media player templated source_select bug (issue #10981) and corrected typo in test_universal ([@iliketoprogram14] - [#11746]) +- Fix Tahoma device class ([@bakedraccoon] - [#11745]) ([cover.tahoma docs]) +- Add deCONZ entities in a predicitive order ([@Kane610] - [#11712]) ([binary_sensor.deconz docs]) ([sensor.deconz docs]) +- Xbox sensor - Extend error handling ([@ReneNulschDE] - [#11637]) ([sensor.xbox_live docs]) +- Upgrade netdisco ([@balloob] - [#11752]) +- set default value for rfxtrx config ([@danielhiversen] - [#11767]) ([binary_sensor.rfxtrx docs]) +- Round off exchange rate ([@arsaboo] - [#11765]) ([sensor.alpha_vantage docs]) +- Update icon (fixes #11744) ([@fabaff] - [#11758]) ([sensor.fixer docs]) +- Use localized forecast for openweathermap ([@brainexe] - [#11770]) ([sensor.openweathermap docs]) +- Unit should be mph as that is what the metoffices datapoint API returns ([@ioangogo] - [#11760]) ([sensor.metoffice docs]) +- Owntracks: Use bluetooth_le as source_type if beacon was used for location change. ([@cnrd] - [#11615]) ([device_tracker.owntracks docs]) +- Add a 'last' mode and attribute to min_max sensor ([@markferry] - [#11037]) ([sensor.min_max docs]) +- Update header and make it less verbose ([@fabaff] - [#11774]) ([asterisk_mbox docs]) +- Added support for TekSavvy bandwidth sensor ([@jpjodoin] - [#11186]) ([sensor.teksavvy docs]) (new-platform) +- Fix for Neato D3 and D5 ([@karlkar] - [#11775]) +- Axis discovery fails to save conf ([@Kane610] - [#11769]) ([axis docs]) +- Limit service description loading to a single thread ([@amelchio] - [#11733]) +- Snips: (change) Removed unknown intent speech response ([@tschmidty69] - [#11776]) ([snips docs]) +- Implemented event_data_template (new) ([@tschmidty69] - [#11057]) +- Fix PEP8 and PEP257 issues ([@fabaff] - [#11780]) ([deconz docs]) ([scene docs]) ([binary_sensor.deconz docs]) ([light.deconz docs]) ([sensor.deconz docs]) +- Fix typos ([@fabaff] - [#11781]) ([system_log docs]) +- Support for performance mode on Rheem water heaters. ([@w1ll1am23] - [#11786]) ([climate.econet docs]) +- Service for setting a fixed scene of Xiaomi MIIO lights ([@syssi] - [#10819]) ([light.xiaomi_miio docs]) +- Homematic ip tilt covers ([@steffenslavetinsky] - [#11650]) ([cover.homematic docs]) +- plant - check history for min_brightness ([@ChristianKuehnel] - [#9534]) ([plant docs]) +- add generic rollershutter agian, was missing in last merge ([@philklei] - [#11788]) ([tahoma docs]) +- Additional attributes and services of the Xiaomi Air Purifier introduced ([@syssi] - [#11249]) ([fan.xiaomi_miio docs]) ([light.xiaomi_miio docs]) ([switch.xiaomi_miio docs]) ([vacuum.xiaomi_miio docs]) +- flux led version 0.20 ([@danielhiversen] - [#11791]) +- Hyperion: fix ([@starkillerOG] - [#11793]) ([light.hyperion docs]) +- Fix sensibo function names ([@andrey-git] - [#11797]) ([climate.sensibo docs]) +- Always load yr picture from https ([@andrey-git] - [#11796]) ([sensor.yr docs]) +- Make Google TTS secure ([@PRabahy] - [#11031]) ([tts.google docs]) +- Correct inadvertent change to file permissions ([@shortbloke] - [#11755]) ([light.flux_led docs]) +- Fix recorder purge ([@tinloaf] - [#11802]) +- Disable installing Telldus in Docker ([@balloob] - [#11806]) +- Nad ([@robhuls] - [#11800]) +- bump roku version ([@soberstadt] - [#11816]) +- MiFlora - use bluepy on linux systems ([@ChristianKuehnel] - [#11284]) ([light.decora docs]) ([sensor.miflora docs]) +- Ihc component and platforms ([@dingusdk] - [#10916]) ([ihc docs]) ([binary_sensor.ihc docs]) ([light.ihc docs]) ([sensor.ihc docs]) ([switch.ihc docs]) (new-platform) +- Change telldus domain to download.telldus.com ([@michaelarnauts] - [#11825]) +- Add more workday sensor countries and update holidays library to version 0.9.3 ([@drndos] - [#11826]) ([binary_sensor.workday docs]) +- Add missing availability schema to MQTT alarm panel ([@DanNixon] - [#11829]) ([alarm_control_panel.mqtt docs]) +- python-miio version bumped. Fixes all xiaomi_miio components. (Closes: #11768) ([@syssi] - [#11837]) ([fan.xiaomi_miio docs]) ([light.xiaomi_miio docs]) ([switch.xiaomi_miio docs]) ([vacuum.xiaomi_miio docs]) +- Add waterfurnace platform ([@sdague] - [#11732]) +- (Re)Enable Daikin autodiscovery ([@rofrantz] - [#11842]) +- Fixes for PEP257 ([@fabaff] - [#11810]) +- bump eq3bt version ([@rytilahti] - [#11834]) ([climate.eq3btsmart docs]) +- Fix Unifi direct errors caused by AP reboot. ([@w1ll1am23] - [#11835]) ([device_tracker.unifi_direct docs]) +- Change 'on' to 'heat' as fallback thermostat mode ([@andrewdolphin] - [#11377]) ([google_assistant docs]) +- Use strict timeout when polling Samsung TV (Fix for #6375) ([@kennedyshead] - [#11759]) ([media_player.samsungtv docs]) +- Fix issues with generic thermostat ([@ciotlosm] - [#11805]) +- maxcube: Set MAX! Window Sensor's class to 'window' ([@leppa] - [#11799]) ([binary_sensor.maxcube docs]) +- Fix new iframe panel url ([@pvizeli] - [#11850]) ([hassio docs]) +- Fix races on recorder test ([@sdague] - [#11857]) +- Clean up entity component ([@balloob] - [#11691]) (breaking change) +- Allow exposing sensors as temperature or humidity 'climate' devices to Google Assistant ([@rofrantz] - [#11095]) ([google_assistant docs]) +- BME680 Sensor Component ([@arcsur] - [#11695]) +- Respond to Alexa scene activation correctly ([@bitglue] - [#11869]) ([alexa docs]) +- Checking Xiaomi Aqara devices unavailability states ([@PaulAnnekov] - [#11631]) ([xiaomi_aqara docs]) ([binary_sensor.xiaomi_aqara docs]) ([cover.xiaomi_aqara docs]) ([light.xiaomi_aqara docs]) ([sensor.xiaomi_aqara docs]) ([switch.xiaomi_aqara docs]) +- Hass.io panel v2 ([@pvizeli] - [#11860]) ([hassio docs]) +- Add missing mock call for test_minimal_config ([@sdague] - [#11858]) +- Expose Alexa Smart Home via HTTP POST ([@bitglue] - [#11859]) ([alexa docs]) +- fixed async function called in a thread ([@PaulAnnekov] - [#11882]) ([xiaomi_aqara docs]) +- upgrade ecobee ([@nkgilley] - [#11878]) ([ecobee docs]) +- Fix for hive aux_heat target temperature display ([@Rendili] - [#11884]) ([hive docs]) +- Bump waterfurnace library to 0.3.0 ([@sdague] - [#11888]) ([waterfurnace docs]) +- Postpone "Z-wave not ready" warning ([@amelchio] - [#11807]) ([zwave docs]) +- [SMALL-PR] Don't make climate calls if feature is not supported ([@rofrantz] - [#11841]) ([climate docs]) +- Handle Daikin AC adapters without fan mode and swing mode support ([@rofrantz] - [#11840]) ([climate.daikin docs]) +- device tracker - tomato https support ([@GregoryDosh] - [#11566]) ([device_tracker.tomato docs]) +- Bme680 ([@arcsur] - [#11892]) ([sensor.bme680 docs]) +- Add android option for linux_battery.py ([@mu4yu3] - [#11852]) ([sensor.linux_battery docs]) +- Pushbullet (fix) invalid keyword, added unittests ([@tschmidty69] - [#11804]) +- Snips - (fix) removed endSession mqtt response on error and unknown intents ([@tschmidty69] - [#11908]) ([snips docs]) +- Clarify emulated hue warning ([@balloob] - [#11910]) ([emulated_hue docs]) +- Use API to discover Hue if no bridges specified ([@balloob] - [#11909]) ([hue docs]) +- Update python-wink version and multiple wink fixes/updates. ([@w1ll1am23] - [#11833]) ([wink docs]) ([binary_sensor.wink docs]) ([climate.wink docs]) ([cover.wink docs]) +- New venstar climate component ([@Cinntax] - [#11639]) +- Iota wallet ([@jinnerbichler] - [#11398]) ([iota docs]) ([sensor.iota docs]) (new-platform) +- Improve foscam library exception support ([@i-am-shodan] - [#11701]) ([camera.foscam docs]) +- Added Xeoma camera platform ([@jeradM] - [#11619]) +- Multi-Room Support for Greenwave Reality ([@dfiel] - [#11364]) ([light.greenwave docs]) +- Minor fix to configuration validation and related log line. ([@arcsur] - [#11898]) ([sensor.bme680 docs]) +- Report scripts and groups as scenes to Alexa ([@bitglue] - [#11900]) ([alexa docs]) +- Add ERC20 tokens to etherscan.io sensor ([@nkgilley] - [#11916]) ([sensor.etherscan docs]) +- Allow separate command and state OIDs and payloads in SNMP switch ([@nkaminski] - [#11075]) ([switch.snmp docs]) +- Add "write" service to system_log ([@andrey-git] - [#11901]) ([system_log docs]) +- fixes #11848 ([@kennedyshead] - [#11915]) ([device_tracker.asuswrt docs]) +- Allow setting climate devices to AUTO mode via Google Assistant ([@balloob] - [#11923]) ([google_assistant docs]) ([climate.nest docs]) +- Fixed rfxtrx binary_sensor KeyError on missing optional device_class ([@basschipper] - [#11925]) ([rfxtrx docs]) ([binary_sensor.rfxtrx docs]) +- Implement Alexa temperature sensors ([@bitglue] - [#11930]) ([alexa docs]) +- Update pyhomematic to 0.1.38 ([@danielperna84] - [#11936]) ([homematic docs]) + +[#10819]: https://github.com/home-assistant/home-assistant/pull/10819 +[#10882]: https://github.com/home-assistant/home-assistant/pull/10882 +[#10916]: https://github.com/home-assistant/home-assistant/pull/10916 +[#11031]: https://github.com/home-assistant/home-assistant/pull/11031 +[#11037]: https://github.com/home-assistant/home-assistant/pull/11037 +[#11046]: https://github.com/home-assistant/home-assistant/pull/11046 +[#11057]: https://github.com/home-assistant/home-assistant/pull/11057 +[#11075]: https://github.com/home-assistant/home-assistant/pull/11075 +[#11095]: https://github.com/home-assistant/home-assistant/pull/11095 +[#11103]: https://github.com/home-assistant/home-assistant/pull/11103 +[#11186]: https://github.com/home-assistant/home-assistant/pull/11186 +[#11249]: https://github.com/home-assistant/home-assistant/pull/11249 +[#11284]: https://github.com/home-assistant/home-assistant/pull/11284 +[#11364]: https://github.com/home-assistant/home-assistant/pull/11364 +[#11377]: https://github.com/home-assistant/home-assistant/pull/11377 +[#11398]: https://github.com/home-assistant/home-assistant/pull/11398 +[#11400]: https://github.com/home-assistant/home-assistant/pull/11400 +[#11409]: https://github.com/home-assistant/home-assistant/pull/11409 +[#11455]: https://github.com/home-assistant/home-assistant/pull/11455 +[#11490]: https://github.com/home-assistant/home-assistant/pull/11490 +[#11543]: https://github.com/home-assistant/home-assistant/pull/11543 +[#11547]: https://github.com/home-assistant/home-assistant/pull/11547 +[#11566]: https://github.com/home-assistant/home-assistant/pull/11566 +[#11602]: https://github.com/home-assistant/home-assistant/pull/11602 +[#11607]: https://github.com/home-assistant/home-assistant/pull/11607 +[#11608]: https://github.com/home-assistant/home-assistant/pull/11608 +[#11610]: https://github.com/home-assistant/home-assistant/pull/11610 +[#11613]: https://github.com/home-assistant/home-assistant/pull/11613 +[#11615]: https://github.com/home-assistant/home-assistant/pull/11615 +[#11619]: https://github.com/home-assistant/home-assistant/pull/11619 +[#11620]: https://github.com/home-assistant/home-assistant/pull/11620 +[#11621]: https://github.com/home-assistant/home-assistant/pull/11621 +[#11623]: https://github.com/home-assistant/home-assistant/pull/11623 +[#11629]: https://github.com/home-assistant/home-assistant/pull/11629 +[#11631]: https://github.com/home-assistant/home-assistant/pull/11631 +[#11634]: https://github.com/home-assistant/home-assistant/pull/11634 +[#11637]: https://github.com/home-assistant/home-assistant/pull/11637 +[#11638]: https://github.com/home-assistant/home-assistant/pull/11638 +[#11639]: https://github.com/home-assistant/home-assistant/pull/11639 +[#11650]: https://github.com/home-assistant/home-assistant/pull/11650 +[#11652]: https://github.com/home-assistant/home-assistant/pull/11652 +[#11661]: https://github.com/home-assistant/home-assistant/pull/11661 +[#11662]: https://github.com/home-assistant/home-assistant/pull/11662 +[#11666]: https://github.com/home-assistant/home-assistant/pull/11666 +[#11668]: https://github.com/home-assistant/home-assistant/pull/11668 +[#11673]: https://github.com/home-assistant/home-assistant/pull/11673 +[#11680]: https://github.com/home-assistant/home-assistant/pull/11680 +[#11690]: https://github.com/home-assistant/home-assistant/pull/11690 +[#11691]: https://github.com/home-assistant/home-assistant/pull/11691 +[#11694]: https://github.com/home-assistant/home-assistant/pull/11694 +[#11695]: https://github.com/home-assistant/home-assistant/pull/11695 +[#11698]: https://github.com/home-assistant/home-assistant/pull/11698 +[#11701]: https://github.com/home-assistant/home-assistant/pull/11701 +[#11707]: https://github.com/home-assistant/home-assistant/pull/11707 +[#11710]: https://github.com/home-assistant/home-assistant/pull/11710 +[#11712]: https://github.com/home-assistant/home-assistant/pull/11712 +[#11715]: https://github.com/home-assistant/home-assistant/pull/11715 +[#11725]: https://github.com/home-assistant/home-assistant/pull/11725 +[#11732]: https://github.com/home-assistant/home-assistant/pull/11732 +[#11733]: https://github.com/home-assistant/home-assistant/pull/11733 +[#11738]: https://github.com/home-assistant/home-assistant/pull/11738 +[#11745]: https://github.com/home-assistant/home-assistant/pull/11745 +[#11746]: https://github.com/home-assistant/home-assistant/pull/11746 +[#11748]: https://github.com/home-assistant/home-assistant/pull/11748 +[#11752]: https://github.com/home-assistant/home-assistant/pull/11752 +[#11755]: https://github.com/home-assistant/home-assistant/pull/11755 +[#11758]: https://github.com/home-assistant/home-assistant/pull/11758 +[#11759]: https://github.com/home-assistant/home-assistant/pull/11759 +[#11760]: https://github.com/home-assistant/home-assistant/pull/11760 +[#11765]: https://github.com/home-assistant/home-assistant/pull/11765 +[#11767]: https://github.com/home-assistant/home-assistant/pull/11767 +[#11769]: https://github.com/home-assistant/home-assistant/pull/11769 +[#11770]: https://github.com/home-assistant/home-assistant/pull/11770 +[#11774]: https://github.com/home-assistant/home-assistant/pull/11774 +[#11775]: https://github.com/home-assistant/home-assistant/pull/11775 +[#11776]: https://github.com/home-assistant/home-assistant/pull/11776 +[#11780]: https://github.com/home-assistant/home-assistant/pull/11780 +[#11781]: https://github.com/home-assistant/home-assistant/pull/11781 +[#11786]: https://github.com/home-assistant/home-assistant/pull/11786 +[#11788]: https://github.com/home-assistant/home-assistant/pull/11788 +[#11791]: https://github.com/home-assistant/home-assistant/pull/11791 +[#11793]: https://github.com/home-assistant/home-assistant/pull/11793 +[#11796]: https://github.com/home-assistant/home-assistant/pull/11796 +[#11797]: https://github.com/home-assistant/home-assistant/pull/11797 +[#11799]: https://github.com/home-assistant/home-assistant/pull/11799 +[#11800]: https://github.com/home-assistant/home-assistant/pull/11800 +[#11802]: https://github.com/home-assistant/home-assistant/pull/11802 +[#11804]: https://github.com/home-assistant/home-assistant/pull/11804 +[#11805]: https://github.com/home-assistant/home-assistant/pull/11805 +[#11806]: https://github.com/home-assistant/home-assistant/pull/11806 +[#11807]: https://github.com/home-assistant/home-assistant/pull/11807 +[#11810]: https://github.com/home-assistant/home-assistant/pull/11810 +[#11816]: https://github.com/home-assistant/home-assistant/pull/11816 +[#11825]: https://github.com/home-assistant/home-assistant/pull/11825 +[#11826]: https://github.com/home-assistant/home-assistant/pull/11826 +[#11829]: https://github.com/home-assistant/home-assistant/pull/11829 +[#11833]: https://github.com/home-assistant/home-assistant/pull/11833 +[#11834]: https://github.com/home-assistant/home-assistant/pull/11834 +[#11835]: https://github.com/home-assistant/home-assistant/pull/11835 +[#11837]: https://github.com/home-assistant/home-assistant/pull/11837 +[#11840]: https://github.com/home-assistant/home-assistant/pull/11840 +[#11841]: https://github.com/home-assistant/home-assistant/pull/11841 +[#11842]: https://github.com/home-assistant/home-assistant/pull/11842 +[#11850]: https://github.com/home-assistant/home-assistant/pull/11850 +[#11852]: https://github.com/home-assistant/home-assistant/pull/11852 +[#11857]: https://github.com/home-assistant/home-assistant/pull/11857 +[#11858]: https://github.com/home-assistant/home-assistant/pull/11858 +[#11859]: https://github.com/home-assistant/home-assistant/pull/11859 +[#11860]: https://github.com/home-assistant/home-assistant/pull/11860 +[#11869]: https://github.com/home-assistant/home-assistant/pull/11869 +[#11878]: https://github.com/home-assistant/home-assistant/pull/11878 +[#11882]: https://github.com/home-assistant/home-assistant/pull/11882 +[#11884]: https://github.com/home-assistant/home-assistant/pull/11884 +[#11888]: https://github.com/home-assistant/home-assistant/pull/11888 +[#11892]: https://github.com/home-assistant/home-assistant/pull/11892 +[#11898]: https://github.com/home-assistant/home-assistant/pull/11898 +[#11900]: https://github.com/home-assistant/home-assistant/pull/11900 +[#11901]: https://github.com/home-assistant/home-assistant/pull/11901 +[#11908]: https://github.com/home-assistant/home-assistant/pull/11908 +[#11909]: https://github.com/home-assistant/home-assistant/pull/11909 +[#11910]: https://github.com/home-assistant/home-assistant/pull/11910 +[#11915]: https://github.com/home-assistant/home-assistant/pull/11915 +[#11916]: https://github.com/home-assistant/home-assistant/pull/11916 +[#11923]: https://github.com/home-assistant/home-assistant/pull/11923 +[#11925]: https://github.com/home-assistant/home-assistant/pull/11925 +[#11930]: https://github.com/home-assistant/home-assistant/pull/11930 +[#11936]: https://github.com/home-assistant/home-assistant/pull/11936 +[#9534]: https://github.com/home-assistant/home-assistant/pull/9534 +[@BastianPoe]: https://github.com/BastianPoe +[@ChristianKuehnel]: https://github.com/ChristianKuehnel +[@Cinntax]: https://github.com/Cinntax +[@DanNixon]: https://github.com/DanNixon +[@GregoryDosh]: https://github.com/GregoryDosh +[@Kane610]: https://github.com/Kane610 +[@PRabahy]: https://github.com/PRabahy +[@PaulAnnekov]: https://github.com/PaulAnnekov +[@Rendili]: https://github.com/Rendili +[@ReneNulschDE]: https://github.com/ReneNulschDE +[@amelchio]: https://github.com/amelchio +[@andrewdolphin]: https://github.com/andrewdolphin +[@andrey-git]: https://github.com/andrey-git +[@angel12]: https://github.com/angel12 +[@arcsur]: https://github.com/arcsur +[@arsaboo]: https://github.com/arsaboo +[@bakedraccoon]: https://github.com/bakedraccoon +[@balloob]: https://github.com/balloob +[@basschipper]: https://github.com/basschipper +[@benleb]: https://github.com/benleb +[@bitglue]: https://github.com/bitglue +[@brainexe]: https://github.com/brainexe +[@ciotlosm]: https://github.com/ciotlosm +[@cnrd]: https://github.com/cnrd +[@covrig]: https://github.com/covrig +[@danielhiversen]: https://github.com/danielhiversen +[@danielperna84]: https://github.com/danielperna84 +[@dfiel]: https://github.com/dfiel +[@dingusdk]: https://github.com/dingusdk +[@drndos]: https://github.com/drndos +[@fabaff]: https://github.com/fabaff +[@glpatcern]: https://github.com/glpatcern +[@heydonms]: https://github.com/heydonms +[@hthiery]: https://github.com/hthiery +[@i-am-shodan]: https://github.com/i-am-shodan +[@iliketoprogram14]: https://github.com/iliketoprogram14 +[@ioangogo]: https://github.com/ioangogo +[@jeradM]: https://github.com/jeradM +[@jinnerbichler]: https://github.com/jinnerbichler +[@jkoelker]: https://github.com/jkoelker +[@jpjodoin]: https://github.com/jpjodoin +[@karlkar]: https://github.com/karlkar +[@keesschollaart81]: https://github.com/keesschollaart81 +[@kennedyshead]: https://github.com/kennedyshead +[@leppa]: https://github.com/leppa +[@markferry]: https://github.com/markferry +[@michaelarnauts]: https://github.com/michaelarnauts +[@mu4yu3]: https://github.com/mu4yu3 +[@nickovs]: https://github.com/nickovs +[@nkaminski]: https://github.com/nkaminski +[@nkgilley]: https://github.com/nkgilley +[@olskar]: https://github.com/olskar +[@philklei]: https://github.com/philklei +[@postlund]: https://github.com/postlund +[@pvizeli]: https://github.com/pvizeli +[@robhuls]: https://github.com/robhuls +[@rofrantz]: https://github.com/rofrantz +[@rytilahti]: https://github.com/rytilahti +[@sdague]: https://github.com/sdague +[@shortbloke]: https://github.com/shortbloke +[@soberstadt]: https://github.com/soberstadt +[@starkillerOG]: https://github.com/starkillerOG +[@steffenslavetinsky]: https://github.com/steffenslavetinsky +[@syssi]: https://github.com/syssi +[@tinloaf]: https://github.com/tinloaf +[@tschmidty69]: https://github.com/tschmidty69 +[@ttroy50]: https://github.com/ttroy50 +[@w1ll1am23]: https://github.com/w1ll1am23 +[@zabuldon]: https://github.com/zabuldon +[alarm_control_panel.mqtt docs]: https://home-assistant.io/components/alarm_control_panel.mqtt/ +[alexa docs]: https://home-assistant.io/components/alexa/ +[asterisk_mbox docs]: https://home-assistant.io/components/asterisk_mbox/ +[axis docs]: https://home-assistant.io/components/axis/ +[binary_sensor.deconz docs]: https://home-assistant.io/components/binary_sensor.deconz/ +[binary_sensor.hive docs]: https://home-assistant.io/components/binary_sensor.hive/ +[binary_sensor.ihc docs]: https://home-assistant.io/components/binary_sensor.ihc/ +[binary_sensor.maxcube docs]: https://home-assistant.io/components/binary_sensor.maxcube/ +[binary_sensor.rfxtrx docs]: https://home-assistant.io/components/binary_sensor.rfxtrx/ +[binary_sensor.wink docs]: https://home-assistant.io/components/binary_sensor.wink/ +[binary_sensor.workday docs]: https://home-assistant.io/components/binary_sensor.workday/ +[binary_sensor.xiaomi_aqara docs]: https://home-assistant.io/components/binary_sensor.xiaomi_aqara/ +[camera.foscam docs]: https://home-assistant.io/components/camera.foscam/ +[camera.onvif docs]: https://home-assistant.io/components/camera.onvif/ +[climate docs]: https://home-assistant.io/components/climate/ +[climate.daikin docs]: https://home-assistant.io/components/climate.daikin/ +[climate.econet docs]: https://home-assistant.io/components/climate.econet/ +[climate.ephember docs]: https://home-assistant.io/components/climate.ephember/ +[climate.eq3btsmart docs]: https://home-assistant.io/components/climate.eq3btsmart/ +[climate.hive docs]: https://home-assistant.io/components/climate.hive/ +[climate.nest docs]: https://home-assistant.io/components/climate.nest/ +[climate.sensibo docs]: https://home-assistant.io/components/climate.sensibo/ +[climate.wink docs]: https://home-assistant.io/components/climate.wink/ +[cover.homematic docs]: https://home-assistant.io/components/cover.homematic/ +[cover.lutron docs]: https://home-assistant.io/components/cover.lutron/ +[cover.tahoma docs]: https://home-assistant.io/components/cover.tahoma/ +[cover.wink docs]: https://home-assistant.io/components/cover.wink/ +[cover.xiaomi_aqara docs]: https://home-assistant.io/components/cover.xiaomi_aqara/ +[deconz docs]: https://home-assistant.io/components/deconz/ +[device_tracker.asuswrt docs]: https://home-assistant.io/components/device_tracker.asuswrt/ +[device_tracker.owntracks docs]: https://home-assistant.io/components/device_tracker.owntracks/ +[device_tracker.tomato docs]: https://home-assistant.io/components/device_tracker.tomato/ +[device_tracker.unifi_direct docs]: https://home-assistant.io/components/device_tracker.unifi_direct/ +[ecobee docs]: https://home-assistant.io/components/ecobee/ +[emulated_hue docs]: https://home-assistant.io/components/emulated_hue/ +[fan.xiaomi_miio docs]: https://home-assistant.io/components/fan.xiaomi_miio/ +[google_assistant docs]: https://home-assistant.io/components/google_assistant/ +[hassio docs]: https://home-assistant.io/components/hassio/ +[hive docs]: https://home-assistant.io/components/hive/ +[homematic docs]: https://home-assistant.io/components/homematic/ +[hue docs]: https://home-assistant.io/components/hue/ +[ihc docs]: https://home-assistant.io/components/ihc/ +[ihc.const docs]: https://home-assistant.io/components/ihc.const/ +[ihc.ihcdevice docs]: https://home-assistant.io/components/ihc.ihcdevice/ +[iota docs]: https://home-assistant.io/components/iota/ +[light.deconz docs]: https://home-assistant.io/components/light.deconz/ +[light.decora docs]: https://home-assistant.io/components/light.decora/ +[light.flux_led docs]: https://home-assistant.io/components/light.flux_led/ +[light.greenwave docs]: https://home-assistant.io/components/light.greenwave/ +[light.hive docs]: https://home-assistant.io/components/light.hive/ +[light.hyperion docs]: https://home-assistant.io/components/light.hyperion/ +[light.ihc docs]: https://home-assistant.io/components/light.ihc/ +[light.tplink docs]: https://home-assistant.io/components/light.tplink/ +[light.wemo docs]: https://home-assistant.io/components/light.wemo/ +[light.xiaomi_aqara docs]: https://home-assistant.io/components/light.xiaomi_aqara/ +[light.xiaomi_miio docs]: https://home-assistant.io/components/light.xiaomi_miio/ +[lutron docs]: https://home-assistant.io/components/lutron/ +[map docs]: https://home-assistant.io/components/map/ +[media_player.samsungtv docs]: https://home-assistant.io/components/media_player.samsungtv/ +[media_player.sonos docs]: https://home-assistant.io/components/media_player.sonos/ +[media_player.yamaha docs]: https://home-assistant.io/components/media_player.yamaha/ +[notify.clicksend docs]: https://home-assistant.io/components/notify.clicksend/ +[notify.prowl docs]: https://home-assistant.io/components/notify.prowl/ +[plant docs]: https://home-assistant.io/components/plant/ +[rfxtrx docs]: https://home-assistant.io/components/rfxtrx/ +[scene docs]: https://home-assistant.io/components/scene/ +[sensor.alpha_vantage docs]: https://home-assistant.io/components/sensor.alpha_vantage/ +[sensor.linux_battery docs]: https://home-assistant.io/components/sensor.linux_battery/ +[sensor.bme680 docs]: https://home-assistant.io/components/sensor.bme680/ +[sensor.deconz docs]: https://home-assistant.io/components/sensor.deconz/ +[sensor.etherscan docs]: https://home-assistant.io/components/sensor.etherscan/ +[sensor.fixer docs]: https://home-assistant.io/components/sensor.fixer/ +[sensor.hive docs]: https://home-assistant.io/components/sensor.hive/ +[sensor.ihc docs]: https://home-assistant.io/components/sensor.ihc/ +[sensor.iota docs]: https://home-assistant.io/components/sensor.iota/ +[sensor.metoffice docs]: https://home-assistant.io/components/sensor.metoffice/ +[sensor.miflora docs]: https://home-assistant.io/components/sensor.miflora/ +[sensor.min_max docs]: https://home-assistant.io/components/sensor.min_max/ +[sensor.mold_indicator docs]: https://home-assistant.io/components/sensor.mold_indicator/ +[mychevy docs]: https://home-assistant.io/components/mychevy/ +[sensor.openweathermap docs]: https://home-assistant.io/components/sensor.openweathermap/ +[sensor.random docs]: https://home-assistant.io/components/sensor.random/ +[sensor.teksavvy docs]: https://home-assistant.io/components/sensor.teksavvy/ +[sensor.xbox_live docs]: https://home-assistant.io/components/sensor.xbox_live/ +[sensor.xiaomi_aqara docs]: https://home-assistant.io/components/sensor.xiaomi_aqara/ +[sensor.yr docs]: https://home-assistant.io/components/sensor.yr/ +[snips docs]: https://home-assistant.io/components/snips/ +[switch.fritzdect docs]: https://home-assistant.io/components/switch.fritzdect/ +[switch.hive docs]: https://home-assistant.io/components/switch.hive/ +[switch.ihc docs]: https://home-assistant.io/components/switch.ihc/ +[switch.snmp docs]: https://home-assistant.io/components/switch.snmp/ +[switch.tplink docs]: https://home-assistant.io/components/switch.tplink/ +[switch.xiaomi_aqara docs]: https://home-assistant.io/components/switch.xiaomi_aqara/ +[switch.xiaomi_miio docs]: https://home-assistant.io/components/switch.xiaomi_miio/ +[system_log docs]: https://home-assistant.io/components/system_log/ +[tahoma docs]: https://home-assistant.io/components/tahoma/ +[tts.google docs]: https://home-assistant.io/components/tts.google/ +[vacuum.xiaomi_miio docs]: https://home-assistant.io/components/vacuum.xiaomi_miio/ +[waterfurnace docs]: https://home-assistant.io/components/waterfurnace/ +[wemo docs]: https://home-assistant.io/components/wemo/ +[wink docs]: https://home-assistant.io/components/wink/ +[xiaomi_aqara docs]: https://home-assistant.io/components/xiaomi_aqara/ +[zwave docs]: https://home-assistant.io/components/zwave/ +[@martinhjelmare]: https://github.com/martinhjelmare +[@frenck]: https://github.com/frenck \ No newline at end of file diff --git a/source/hassio/index.markdown b/source/hassio/index.markdown index 21b11a2e05..d1da527f06 100644 --- a/source/hassio/index.markdown +++ b/source/hassio/index.markdown @@ -7,6 +7,7 @@ sidebar: true comments: false sharing: true footer: true +redirect_from: /components/hassio/ --- Hass.io turns your Raspberry Pi (or another device) into the ultimate home automation hub powered by Home Assistant. With Hass.io you can focus on integrating your devices and writing automations. diff --git a/source/images/blog/2018-01-0.62/components.png b/source/images/blog/2018-01-0.62/components.png new file mode 100644 index 0000000000000000000000000000000000000000..cf3ecb92c770ab7cbcc819dc248613878028d792 GIT binary patch literal 23954 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 Tva8SkN)1@cK(pqN Date: Fri, 26 Jan 2018 23:05:10 +0100 Subject: [PATCH 207/993] IHC component (#4520) * New IHC platform * autosetup -> auto_setup * Moved auto setup to the IHC component * Removed by LK in logo * Changes from review. * Defaults in configurations. manualy setup" changed to "manual setup" (Anchors adjusted) * Relative links changed to absolute links * 'host' renamed to 'url' * :pencil2: Tweaks --- source/_components/ihc.markdown | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/source/_components/ihc.markdown b/source/_components/ihc.markdown index 7bffc48415..0030d30361 100644 --- a/source/_components/ihc.markdown +++ b/source/_components/ihc.markdown @@ -21,7 +21,7 @@ An `ihc` section must be present in the `configuration.yaml` file and contain th ```yaml # Example configuration.yaml entry ihc: - host: http://192.168.1.3 + url: http://192.168.1.3 username: admin password: mysecret auto_setup: True @@ -33,10 +33,6 @@ auto_setup: description: True to have IHC products auto setup. required: false type: bool -host: - description: The URL of the IHC Controller. - required: true - type: string info: description: If True additional IHC info will be shown on each component. required: false @@ -45,6 +41,10 @@ password: description: The password for the IHC Controller. required: true type: string +url: + description: The URL of the IHC Controller. + required: true + type: string username: description: The username for the IHC Controller. required: true @@ -63,7 +63,7 @@ There is currently support for the following device types within Home Assistant: ### Auto setup of IHC products -If auto setup is enabled, the `ihc` component will automatically find IHC products and insert these as devices in Home Assistant. +If the auto setup is enabled, the `ihc` component will automatically find IHC products and insert these as devices in Home Assistant. To disable this set auto_setup to False. (Auto setup is on by default) See the individual device types for a list of IHC products to be recognized automatically. @@ -87,4 +87,4 @@ The IHC resource id should be specified as an integer value. (In the project fil If you want an easier way to get the IHC resource ids, you can download the [Alternative Service View application](https://www.dingus.dk/updated-ihc-alternative-service-view/). The application will show the product tree. You can expand it, select inputs and outputs and when selected you can see the resource id. -See each device type for the manual configuration options. +See the manual of each device type for configuration options. From a43ec05a4dd5e210d88b093acc349fba3dec293c Mon Sep 17 00:00:00 2001 From: Nolan Gilley Date: Fri, 26 Jan 2018 16:12:31 -0500 Subject: [PATCH 208/993] add erc20 token (#4523) * add erc20 token * :pencil2: Minor corrections --- source/_components/sensor.etherscan.markdown | 23 +++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/source/_components/sensor.etherscan.markdown b/source/_components/sensor.etherscan.markdown index fcdc538705..a94f0689a2 100644 --- a/source/_components/sensor.etherscan.markdown +++ b/source/_components/sensor.etherscan.markdown @@ -13,16 +13,22 @@ ha_release: 0.47 ha_iot_class: "Cloud Polling" --- +The `Etherscan` sensor platform displays Ether and ERC-20 token balances from [Etherscan.io](https://etherscan.io). -The `Etherscan` sensor platform displays Ethereum wallet balances from [Etherscan.io](https://etherscan.io). - -To add the Etherscan sensor to your installation, specify an ethereum address to watch in the `configuration.yaml` file: +To add the Etherscan sensor to your installation, specify an Ethereum address to watch in the `configuration.yaml` file. You can also optionally provide a token name to retrieve and ERC-20 token balance. If no token is provided then the balance retrieved will be in ETH. You can also optionally provide the token contract address in case the token name is not found. ```yaml # Example configuration.yaml entry sensor: - platform: etherscan address: '0xfB6916095ca1df60bB79Ce92cE3Ea74c37c5d359' + - platform: etherscan + address: "0xfB6916095ca1df60bB79Ce92cE3Ea74c37c5d359" + token: OMG + - platform: etherscan + address: "0xfB6916095ca1df60bB79Ce92cE3Ea74c37c5d359" + token_address: "0xef68e7c694f40c8202821edf525de3782458639f" + token: LRC ``` {% configuration %} @@ -34,6 +40,13 @@ name: description: The name of the sensor used in the frontend. required: false type: string - default: Ethereum Balance + default: ETH Balance +token: + description: The ERC20 token symbol. i.e., OMG. + required: false + type: string +token_address: + description: The ERC20 token contract address. + required: false + type: string {% endconfiguration %} - From 399b9e6760eccc1066e489f4d7b9a12e2b8a49f3 Mon Sep 17 00:00:00 2001 From: Rene Nulsch <33263735+ReneNulschDE@users.noreply.github.com> Date: Sat, 27 Jan 2018 08:46:06 +0100 Subject: [PATCH 209/993] Panel_Iframe - Allow relative urls in config (#4477) * Panel_Iframe - Allow relative urls in config * Fix configuration --- source/_components/panel_iframe.markdown | 32 ++++++++++++++++++++---- 1 file changed, 27 insertions(+), 5 deletions(-) diff --git a/source/_components/panel_iframe.markdown b/source/_components/panel_iframe.markdown index 5b170a310b..e80d661707 100644 --- a/source/_components/panel_iframe.markdown +++ b/source/_components/panel_iframe.markdown @@ -28,12 +28,34 @@ panel_iframe: fridge: title: 'Fridge' url: 'http://192.168.1.5' + otherapp: + title: 'Other App' + url: '/otherapp' ``` -Configuration variables: -- **[panel_name]** (*Required*): Name of the panel. - - **title** (*Required*): Friendly title for the panel. Will be used in the sidebar. - - **icon** (*Optional*): Icon for entry. Pick an icon that you can find on [materialdesignicons.com](https://materialdesignicons.com/) to use for your input and prefix the name with `mdi:`. For example `mdi:car`, `mdi:ambulance`, or `mdi:motorbike`. - - **url** (*Required*): The URL to open. +{% configuration %} + panel_iframe: + description: Enables the panel_iframe component. Only allowed once. + required: true + type: map + keys: + panel_name: + description: Name of the panel. Only allowed once. + required: true + type: map + keys: + title: + description: Friendly title for the panel. Will be used in the sidebar. + required: true + type: string + url: + description: The absolute URL or relative URL with an absolute path to open. + required: true + type: string + icon: + description: Icon for entry. Pick an icon that you can find on [materialdesignicons.com](https://materialdesignicons.com/) to use for your input and prefix the name with `mdi:`. For example `mdi:car`, `mdi:ambulance`, or `mdi:motorbike`. + required: false + type: string +{% endconfiguration %} From d300a9dc44f074e2688171f02e16474caa5930bf Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Sat, 27 Jan 2018 00:30:24 -0800 Subject: [PATCH 210/993] Add Discourse for comments --- _config.yml | 3 +++ source/_includes/article.html | 2 +- source/_includes/blog/post/article.html | 2 +- source/_includes/javascripts/scripts.html | 4 ++++ source/_layouts/post.html | 19 ++++++++++++++++++- 5 files changed, 27 insertions(+), 3 deletions(-) diff --git a/_config.yml b/_config.yml index 673e9d8eac..732f3e5477 100644 --- a/_config.yml +++ b/_config.yml @@ -148,3 +148,6 @@ date_released: 2018-01-27 # Major release: patch_version_notes: "#" # Minor release (Example #release-0431---april-25): + +# Date we moved to Discourse for comments +disqus_end_date: 2018-01-26 0:00:00 diff --git a/source/_includes/article.html b/source/_includes/article.html index b7a6e0e2ed..f88d16cc9c 100644 --- a/source/_includes/article.html +++ b/source/_includes/article.html @@ -9,7 +9,7 @@

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

    diff --git a/source/_includes/blog/post/article.html b/source/_includes/blog/post/article.html index 2cef69f00e..ed23624766 100644 --- a/source/_includes/blog/post/article.html +++ b/source/_includes/blog/post/article.html @@ -15,7 +15,7 @@ {% include blog/post/tags.html %} {% if site.disqus_short_name and page.comments != false and post.comments != false and site.disqus_show_comment_count == true %} Comments {% endif %}