From 48f7caba8742d7733bbdc420ef41604c538e8020 Mon Sep 17 00:00:00 2001 From: Martin Donlon Date: Sat, 12 Aug 2017 12:48:39 -0700 Subject: [PATCH 01/33] Added documentation for new russound_rio platform (#2969) * Added documentation for new russound_rio platform * Remove port from example since it is optional --- .../media_player.russound_rio.markdown | 34 +++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 source/_components/media_player.russound_rio.markdown diff --git a/source/_components/media_player.russound_rio.markdown b/source/_components/media_player.russound_rio.markdown new file mode 100644 index 00000000000..7a63ab7c666 --- /dev/null +++ b/source/_components/media_player.russound_rio.markdown @@ -0,0 +1,34 @@ +--- +layout: page +title: "Russound RIO" +description: "Instructions on how to integrate Russound RIO devices into Home Assistant." +date: 2017-07-12 22:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: russound.png +ha_category: Media Player +ha_release: 0.49 +ha_iot_class: "Local Push" +--- + +The `russound_rio` platform allows you to control Russound devices that make use of the RIO protocol. + +The platform automatically discovers all enabled zones and sources. Each zone is added as a media player device with the enabled sources available as inputs. Media information is supported if the selected source reports it. + +To add a device to your installation, add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +media_player: + - platform: russound_rio + host: 192.168.1.10 + name: Russound +``` + +Configuration variables: + +- **host** (*Required*): The IP of the TCP gateway +- **port** (*Optional*): The port of the TCP gateway (default: 9621) +- **name** (*Required*): The name of the device From 7b641a87aec17df8c4d4479c30012f6b9bc2f527 Mon Sep 17 00:00:00 2001 From: thrawnarn Date: Sat, 12 Aug 2017 21:51:43 +0200 Subject: [PATCH 02/33] Added bluesound documentation (#2460) * Added bluesound documentation * Update media_player.bluesound.markdown * Update media_player.bluesound.markdown --- .../media_player.bluesound.markdown | 48 ++++++++++++++++++ source/images/supported_brands/bluesound.png | Bin 0 -> 8676 bytes 2 files changed, 48 insertions(+) create mode 100644 source/_components/media_player.bluesound.markdown create mode 100644 source/images/supported_brands/bluesound.png diff --git a/source/_components/media_player.bluesound.markdown b/source/_components/media_player.bluesound.markdown new file mode 100644 index 00000000000..71453b5137d --- /dev/null +++ b/source/_components/media_player.bluesound.markdown @@ -0,0 +1,48 @@ +--- +layout: page +title: "Bluesound" +description: "Instructions how to integrate Bluesound devices into Home Assistant." +date: 2017-04-21 19:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: bluesound.png +ha_category: Media Player +featured: true +ha_release: 0.46 +ha_iot_class: "Local Polling" +--- + +The `bluesound` platform allows you to control your [Bluesound](http://www.bluesound.com/) HiFi wireless speakers and audio components from Home Assistant. + +If you want to automatically discover new devices, just make sure you have discovery: in your configuration.yaml file. To manually add a Bluesound device to your installation, add the following to your configuration.yaml file: + + +```yaml +# Example configuration.yaml +media_player: + - platform: bluesound + hosts: + - host: 192.168.1.100 +``` + +Configuration variables: + +- **hosts** (*Optional*): List with your bluesound devices + - **host** (*Required*): IP-address or hostname of the player + - **name** (*Optional*): The name of the device used in the frontend + - **port** (*Optional*): Port of communication to the device (default: 11000) + +## Advanced configuration example + + ```yaml +# Example configuration.yaml entry with manually specified addresses +media_player: + - platform: bluesound + hosts: + - host: 192.168.1.100 + name: bluesound_kitchen + port: 11000 + - host: 192.168.1.131 +``` diff --git a/source/images/supported_brands/bluesound.png b/source/images/supported_brands/bluesound.png new file mode 100644 index 0000000000000000000000000000000000000000..6fe2bc494a042ff64e4c0970b8f6eae079972445 GIT binary patch literal 8676 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 Date: Sat, 12 Aug 2017 15:52:27 -0400 Subject: [PATCH 03/33] Add documentation for the mochad light component (#2976) * Add documentation for the mochad light component This commit adds docs for using x10 dimmers and lights via mochad. * Update light.mochad.markdown --- source/_components/light.mochad.markdown | 32 ++++++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 source/_components/light.mochad.markdown diff --git a/source/_components/light.mochad.markdown b/source/_components/light.mochad.markdown new file mode 100644 index 00000000000..0bf8b817fe6 --- /dev/null +++ b/source/_components/light.mochad.markdown @@ -0,0 +1,32 @@ +--- +layout: page +title: "Mochad Light" +description: "Instructions how to integrate X10 Mochad switches into Home Assistant." +date: 2017-07-14 11:29 +sidebar: true +comments: false +sharing: true +footer: true +ha_category: Light +ha_release: 0.51 +--- + +The `mochad` switch platform lets you control an X10 enabled dimmer/light +device. + +To enable this sensor, you first have to set up the [mochad component](/components/mochad/) and then add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yml entry +light: + - platform: mochad + devices: + - address: a1 + - address: a5 +``` + +Configuration variables: + +- **address** (*Required*): The X10 address of the light. +- **name** (*Optional*): The name of the switch. Default is: x10_light_dev_*address*. +- **comm_type** (*Optional*): pl (powerline) or rf (radio frequency). Default is pl. From 18e81c1ce22ffa615d6945be1c4fd3945a9adc7c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ab=C3=ADlio=20Costa?= Date: Sat, 12 Aug 2017 20:54:18 +0100 Subject: [PATCH 04/33] Create device_tracker.huawei_router.markdown (#2983) * Create device_tracker.huawei_router.markdown * Update device_tracker.huawei_router.markdown * add huawei logo * Update device_tracker.huawei_router.markdown * Update device_tracker.huawei_router.markdown --- .../device_tracker.huawei_router.markdown | 36 ++ source/images/supported_brands/huawei.svg | 475 ++++++++++++++++++ 2 files changed, 511 insertions(+) create mode 100644 source/_components/device_tracker.huawei_router.markdown create mode 100644 source/images/supported_brands/huawei.svg diff --git a/source/_components/device_tracker.huawei_router.markdown b/source/_components/device_tracker.huawei_router.markdown new file mode 100644 index 00000000000..42c7b22a4e4 --- /dev/null +++ b/source/_components/device_tracker.huawei_router.markdown @@ -0,0 +1,36 @@ +--- +layout: page +title: "Huawei Router" +description: "Instructions how to integrate Huawei Routers into Home Assistant." +date: 2017-07-16 01:40 +sidebar: true +comments: false +sharing: true +footer: true +logo: huawei.png +ha_category: Presence Detection +ha_release: 0.51 +--- + +This component offers presence detection by looking at connected devices to a [Huawei router](http://m.huawei.com/enmobile/enterprise/products/network/access/pon-one/hw-371813.htm). +Currently, this was only tested with the Huawei HG8247H (used by Vodafone Portugal). + +To use a Huawei router in your installation, add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +device_tracker: + - platform: huawei_router + host: 192.168.1.1 + username: user + password: pass +``` + +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. + + +See the [device tracker component page](/components/device_tracker/) for instructions how to configure the people to be tracked. diff --git a/source/images/supported_brands/huawei.svg b/source/images/supported_brands/huawei.svg new file mode 100644 index 00000000000..657e365869e --- /dev/null +++ b/source/images/supported_brands/huawei.svg @@ -0,0 +1,475 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From 9e6c91bc3e4a374d521d0d196248da31b5dbbaa1 Mon Sep 17 00:00:00 2001 From: Marcus Schmidt Date: Sun, 13 Aug 2017 07:05:34 +0200 Subject: [PATCH 05/33] Added documentation to HA PR#8505 (#3157) * Added documentation to HA PR#8505 - Added possibilities to use template in the command_line sensor * Small fixes after review * Minor changes --- source/_components/sensor.command_line.markdown | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/source/_components/sensor.command_line.markdown b/source/_components/sensor.command_line.markdown index 9da2a67b6e2..b963bdee442 100644 --- a/source/_components/sensor.command_line.markdown +++ b/source/_components/sensor.command_line.markdown @@ -145,3 +145,16 @@ sensor: command: "python3 /path/to/script/arest-value.py" unit_of_measurement: "°C" ``` + +### {% linkable_title Usage of templating in `command:` %} + +[Templates](/docs/configuration/templating/) are supported in the `command:` configuration variable. This could be used if you want to include the state of a specific sensor as an argument to your external script. + +```yaml +# Example configuration.yaml entry +sensor: + - platform: command_line + name: wind direction + command: 'sh /home/pi/.homeassistant/scripts/wind_direction.sh {{ states.sensor.wind_direction.state }}' + unit_of_measurement: "Direction" +``` From 6baa22dba183086ee15176bca5ecfccd8794aa45 Mon Sep 17 00:00:00 2001 From: olskar Date: Sun, 13 Aug 2017 10:10:52 +0200 Subject: [PATCH 06/33] Add information to install libffi-dev, needed for python-mirobo (#3172) * Add information to install libffi-dev, needed for python-mirobo * Update vacuum.xiaomi.markdown --- source/_components/vacuum.xiaomi.markdown | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/source/_components/vacuum.xiaomi.markdown b/source/_components/vacuum.xiaomi.markdown index 851e667aafc..91248678f92 100644 --- a/source/_components/vacuum.xiaomi.markdown +++ b/source/_components/vacuum.xiaomi.markdown @@ -20,6 +20,12 @@ Current supported features are `turn_on`, `pause`, `stop`, `return_to_home`, `tu Follow the pairing process using your phone and Mi-Home app. From here you will be able to retrieve the token from a SQLite file inside your phone. +Before you begin you need to install `libffi-dev` by running the command below. This is needed for `python-mirobi` to be installed correctly. + +```bash +apt-get install libffi-dev +``` +

If your Home Assistant installation is running in a [Virtualenv](/docs/installation/virtualenv/#upgrading-home-assistant), make sure you activate it by running the commands below.

From 1fd1617fe921be24a0a4b51edf2f0b145f71c19e Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Sun, 13 Aug 2017 11:23:20 +0200 Subject: [PATCH 07/33] Add version sensor docs (#3163) * Add version sensor docs * Fix typo --- source/_components/sensor.version.markdown | 67 ++++++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100644 source/_components/sensor.version.markdown diff --git a/source/_components/sensor.version.markdown b/source/_components/sensor.version.markdown new file mode 100644 index 00000000000..adaad745bd8 --- /dev/null +++ b/source/_components/sensor.version.markdown @@ -0,0 +1,67 @@ +--- +layout: page +title: "Version Sensor" +description: "Instructions how to integrate a version sensor into Home Assistant." +date: 2017-08-10 10:30 +sidebar: true +comments: false +sharing: true +footer: true +ha_category: Sensor +ha_iot_class: "Local Pushing" +logo: home-assistant.png +ha_release: 0.52 +--- + + +The `version` sensor platform is displaying the current version of Home Assistant in the frontend. + +To enable this sensor, add the following lines to your `configuration.yaml` file for a GET request: + +```yaml +# Example configuration.yaml entry +sensor: + - platform: version +``` + +Configuration variables: + +- **name** (*Optional*): Name of the sensor. Defaults to `Current Version`. + +## {% linkable_title Alternatives %} + +This sensor is an alternative to the existing solutions to achieve the same result through various platforms. Remember that you can easily get the installed version on the command line. + +```bash +$ hass --version +``` + +Or go to the service developer tool icon **Info** section of the **Developer Tools**. + +A [`command_line`](/components/sensor.command_line/) with [`hass`](/docs/tools/hass/) to display your current version. + +```yaml +sensor: + - platform: command_line + name: Version + command: "/home/homeassistant/bin/hass --version" +``` + +It's also possible to ready a file called `.HA_VERSION` which is located in your Home Assistant [configuration](/docs/configuration/) folder. + +```yaml +sensor: + - platform: command_line + name: Version + command: "cat /home/homeassistant/.homeassistant/.HA_VERSION" +``` + +You might think that a [`rest` sensor](/components/sensor.rest/) could work to but it will not as Home Assistant is not ready when the sensor get initialized. + +```yaml +sensor: + - platform: rest + resource: http://IP_ADDRESS:8123/api/config + name: Current Version + value_template: '{{ value_json.version }}' +``` From d83b33de3e3c8892b4cf9a3caa042fe445544e1f Mon Sep 17 00:00:00 2001 From: Matt Schmitt Date: Sun, 13 Aug 2017 18:59:34 +0100 Subject: [PATCH 08/33] Update Total Connect alarm control panel for night mode arming (#3043) * Update alarm_control_panel.totalconnect.markdown * Update alarm_control_panel.totalconnect.markdown * Update alarm_control_panel.totalconnect.markdown --- source/_components/alarm_control_panel.totalconnect.markdown | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/source/_components/alarm_control_panel.totalconnect.markdown b/source/_components/alarm_control_panel.totalconnect.markdown index 446e7a9a8f2..668b7492054 100644 --- a/source/_components/alarm_control_panel.totalconnect.markdown +++ b/source/_components/alarm_control_panel.totalconnect.markdown @@ -14,7 +14,9 @@ ha_release: 0.42 The `totalconnect` platform provides connectivity with the Honeywell TotalConnect alarm systems used by many alarm companies. -If you have issues running this component, you may require "libxml2-dev" and "libxmlsec1-dev". To install these on Hassbian, run the command `apt install libxml2-dev libxmlsec1-dev` with sudo +This platform supports the following services: `alarm_arm_away`, `alarm_arm_home`, `alarm_arm_night` and `alarm_disarm`. + +If you have issues running this component, you may require `libxml2-dev` and `libxmlsec1-dev` packages. To install these on Hassbian, run the command `apt install libxml2-dev libxmlsec1-dev` with sudo. To enable this, add the following lines to your `configuration.yaml`: From 2acfb70d3328ee9f073dc4d9ba55ba480a10bf2f Mon Sep 17 00:00:00 2001 From: Philipp Schmitt Date: Mon, 14 Aug 2017 18:23:51 +0200 Subject: [PATCH 09/33] Nello.io intercom documentation (#3173) --- source/_components/lock.nello.markdown | 52 +++++++++++++++++++++++ source/images/supported_brands/nello.png | Bin 0 -> 8482 bytes 2 files changed, 52 insertions(+) create mode 100644 source/_components/lock.nello.markdown create mode 100644 source/images/supported_brands/nello.png diff --git a/source/_components/lock.nello.markdown b/source/_components/lock.nello.markdown new file mode 100644 index 00000000000..feb220cf9cd --- /dev/null +++ b/source/_components/lock.nello.markdown @@ -0,0 +1,52 @@ +--- +layout: page +title: "Nello Lock" +description: "Instructions on how to integrate Nello intercom devices." +date: 2017-08-13 17:25 +sidebar: true +comments: false +sharing: true +footer: true +logo: nello.png +ha_category: Lock +featured: false + +ha_release: 0.52 +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). + +

+Be aware that if you use your main account for Home Assistant you may not be able to use it with the App. +

+ +## {% linkable_title Configuration %} + +```yaml +# Example configuration.yaml entry +lock: + - platform: nello + username: mail@example.com + password: mySecretPassword +``` + +Configuration variables: + +- **username** (*Required*): The username of your Nello account. +- **password** (*Required*): The password of your Nello account. + +## {% linkable_title Events %} + +### {% linkable_title Event `nello_bell_ring` %} + +Every time someone rings the bell, a `nello_bell_ring` event will be fired. + +Field | Description +----- | ----------- +`address` | Postal address of the lock. +`date` | Date when the event occured. +`description` | Human readable string describing the event. +`location_id` | Nello ID of the location where the bell has been rung. +`short_id` | Shorter Nello ID. diff --git a/source/images/supported_brands/nello.png b/source/images/supported_brands/nello.png new file mode 100644 index 0000000000000000000000000000000000000000..a815d8730cba1a08822ed9af4f59b963b8346380 GIT binary patch literal 8482 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 Date: Mon, 14 Aug 2017 17:04:16 -0400 Subject: [PATCH 10/33] Updated SNMP documentation (#3175) --- source/_components/sensor.snmp.markdown | 46 ++++++++++++++++++++----- 1 file changed, 37 insertions(+), 9 deletions(-) diff --git a/source/_components/sensor.snmp.markdown b/source/_components/sensor.snmp.markdown index 3252dedb66c..06811043d06 100644 --- a/source/_components/sensor.snmp.markdown +++ b/source/_components/sensor.snmp.markdown @@ -14,7 +14,7 @@ ha_release: "0.22" --- -The `snmp` sensor platform simple displays the information which are available through the [Simple Network Management Protocol (SNMP)](https://en.wikipedia.org/wiki/Simple_Network_Management_Protocol). SNMP uses a tree-like hierarchy where each node is an object. +The `snmp` sensor platform displays information available through the [Simple Network Management Protocol (SNMP)](https://en.wikipedia.org/wiki/Simple_Network_Management_Protocol). SNMP uses a tree-like hierarchy where each node is an object, and is mainly supported by network-oriented devices such as routers, modems, and printers. To enable this sensor in your installation, add the following to your `configuration.yaml` file: @@ -29,18 +29,23 @@ sensor: Configuration variables: - **host** (*Required*): The IP address of your host, eg. `192.168.1.32`. -- **port** (*Option*): The SNMP port of your host. Defaults to `161`. -- **name** (*Optional*): Name of the SNMP sensor. -- **community** (*Optional*): The SNMP community which is set for the device. Most devices have a default community set to to `public` with read-only permission (which is sufficient). - **baseoid** (*Required*): The OID where the information is located. It's advised to use the numerical notation. +- **port** (*Option*): The SNMP port of your host. Defaults to `161`. +- **community** (*Optional*): The SNMP community which is set for the device. Most devices have a default community set to to `public` with read-only permission (which is sufficient). +- **version** (*Optional*) version of SNMP protocol, `1` or `2c`. Defaults to `1`. Version `2c` is needed to read data from 64-bit counters. +- **name** (*Optional*): Name of the SNMP sensor. - **unit_of_measurement** (*Optional*): Defines the unit of measurement of the sensor, if any. -- **version** (*Optional*) version of SNMP protocol, `1` or `2c` defaults to `1`. Version `2c` is needed to read data from 64-bit counters. +- **value_template** (*Optional*): Defines a [template](/docs/configuration/templating/#processing-incoming-data) to parse the value. +- **accept_errors** (*Optional*): Determines whether the sensor should start and keep working even if the SNMP host is unreachable or not responding. This allows the sensor to be initialized properly even if, for example, your printer is not on when you start Home Assistant. Defaults to `false`. +- **default_value** (*Optional*): Determines what value the sensor should take if `accept_errors` is set and the host is unreachable or not responding. If not set, the sensor will have value `unknown` in case of errors. -The OIDs may vary on different system because they are vendor-specific. Beside the device's manual is the [OID Repository](http://www.oid-info.com/) a good place to start if you are looking for OIDs. The following OIDs are for the load of a Linux systems. +## {% linkable_title Finding OIDs %} -- 1 minute Load: 1.3.6.1.4.1.2021.10.1.3.1 -- 5 minute Load: 1.3.6.1.4.1.2021.10.1.3.2 -- 15 minute Load: 1.3.6.1.4.1.2021.10.1.3.3 +OIDs may vary on different systems because they are vendor-specific. Beside the device's manual, the [OID Repository](http://www.oid-info.com/) is a good place to start if you are looking for OIDs. As an example, the following OIDs are for the load of a Linux systems. + +- 1 minute Load: `1.3.6.1.4.1.2021.10.1.3.1` +- 5 minute Load: `1.3.6.1.4.1.2021.10.1.3.2` +- 15 minute Load: `1.3.6.1.4.1.2021.10.1.3.3` There is a large amount of tools available to work with SNMP. `snmpwalk` let you easily retrieve the value of a OID. @@ -49,3 +54,26 @@ $ snmpwalk -Os -c public -v 2c 192.168.1.32 1.3.6.1.4.1.2021.10.1.3.1 laLoad.1 = STRING: 0.19 ``` +## {% linkable_title Examples %} + +### {% linkable_title Printer uptime minutes %} + +According to the most common SNMP standard, the uptime of a device is accessible under OID `1.3.6.1.2.1.1.3.0`. The value represented using a format called `TimeTicks`, in units of hundredth of a second. + +To create a sensor that displays the uptime for your printer in minutes, you can use this configuration: + +```yaml +# Example configuration.yaml entry +sensor: + - platform: snmp + name: 'Printer uptime' + host: 192.168.2.21 + baseoid: 1.3.6.1.2.1.1.3.0 + accept_errors: true + unit_of_measurement: 'minutes' + value_template: {% raw %}'{{((value | int) / 6000) | int}}'{% endraw %} +``` + +The `accept_errors` option will allow the sensor to work even if the printer is not on when Home Assistant is first started: the sensor will just display a `-` instead of a minute count. + +The `value_template` option converts the original value to minutes. From 0e0fce3970cc5f6210e52b8ceed3ddd0ab7d6df4 Mon Sep 17 00:00:00 2001 From: Adam Mills Date: Tue, 15 Aug 2017 05:54:41 -0400 Subject: [PATCH 11/33] Updates for automatic OAuth2 authentication (#3174) --- source/_components/device_tracker.automatic.markdown | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/source/_components/device_tracker.automatic.markdown b/source/_components/device_tracker.automatic.markdown index 67569e4c62a..5eb9dbd6ee6 100644 --- a/source/_components/device_tracker.automatic.markdown +++ b/source/_components/device_tracker.automatic.markdown @@ -16,9 +16,9 @@ ha_iot_class: "Cloud Push" The `automatic` platform offers presence detection by retrieving your car's information from the [Automatic](http://automatic.com/) cloud service. -To use Automatic with Home Assistant, first you must [create a free development account](https://developer.automatic.com/). Automatic will generate a Client ID and Secret for you to use in your Home Assistant configuration. You will also need to update your Event Delivery preferences to ensure Home Assistant can receive updates. On the developer page, under App Settings / Event Delivery, select "Websocket" for Event Delivery Preference. +To use Automatic with Home Assistant, first you must [create a free development account](https://developer.automatic.com/). Automatic will generate a Client ID and Secret for you to use in your Home Assistant configuration. You will also need to update your Event Delivery preferences to ensure Home Assistant can receive updates. On the developer page, under App Settings / Event Delivery, select "Websocket" for Event Delivery Preference. In order to make use of OAuth2 authentication you must specify the OAuth Redirect URL in the developer page. This should be configured to `/api/automatic/callback`. (Example: `http://hassio.local:8123/api/automatic/callback`) Note that this URL only needs to be accessible from the browser you use to perform the authentication. -Home Assistant will also take advantage of `scope:current_location` if available. This will allow Home Assistant to receive periodic location updates during a trip. In order to use this functionality, you must request the scope for your application from Automatic. Once `scope:current_location` is available, Home Assistant will automatically make use of it after the next restart. +Home Assistant can also take advantage of `scope:current_location` if available. This will allow Home Assistant to receive periodic location updates during a trip. In order to use this functionality, you must request the scope for your application from Automatic. Once `scope:current_location` is available, change `current_location` to `true` in your configuration.yaml. Once your developer account is created, add the following to your `configuration.yaml` file: @@ -28,8 +28,6 @@ device_tracker: - platform: automatic client_id: 1234567 secret: 0987654321 - username: your@email.com - password: your_password devices: - 2007 Honda Element - 2004 Subaru Impreza @@ -39,8 +37,9 @@ Configuration variables: - **client_id** (*Required*): The OAuth client id (get from https://developer.automatic.com/). - **secret** (*Required*): The OAuth client secret (get from https://developer.automatic.com/). -- **username** (*Required*): The username associated with your ODB reader. -- **password** (*Required*): The password for your given ODB reader account. +- **username** (*Optional*): The username associated with your ODB reader. If username/password is not configured, the `configurator` component will be used to authenticate your account. +- **password** (*Optional*): The password for your given ODB reader account. +- **current_location** (*Optional*): Set to `true` if you have requested `scope:current_location` for your account. Home Assistant will then be able to receive periodic location updates during trips. - **devices** (*Optional*): The list of vehicle display names you wish to track. If not provided, all vehicles will be tracked. Home Assistant will also fire events when an update is received from Automatic. These can be used to trigger automations, as shown in the example below. A list of available event types can be found in the [Automatic Real-Time Events documentation](https://developer.automatic.com/api-reference/#real-time-events). From 9f24985108a41ff7378ef5ac9d266e19765ba6cf Mon Sep 17 00:00:00 2001 From: Eugenio Panadero Date: Tue, 15 Aug 2017 13:33:30 +0200 Subject: [PATCH 12/33] fix ios instructions to obtain the vacuum token (#3182) --- source/_components/vacuum.xiaomi.markdown | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/_components/vacuum.xiaomi.markdown b/source/_components/vacuum.xiaomi.markdown index 91248678f92..30f852913a2 100644 --- a/source/_components/vacuum.xiaomi.markdown +++ b/source/_components/vacuum.xiaomi.markdown @@ -67,8 +67,8 @@ java.exe -jar ../android-backup-extractor/abe.jar unpack backup.ab backup.tar "" 1. Setup iOS device with the Mi-Home app. 2. Create an unencrypted backup of the device using iTunes. 3. Install iBackup Viewer from here: http://www.imactools.com/iphonebackupviewer/ -4. Extract this file /raw data/com.xiami.mihome/_mihome.sqlite to your computer -5. Open the file extracted using notepad. You will then see the list of all the device in your account with their token. +4. Extract this file: **`/raw data/com.xiami.mihome/1234567_mihome.sqlite`** to your computer, where _1234567_ is any string of numbers. +5. Open the sqlite DB with a tool like SQLite Manager extension for FireFox, DB Browser, etc. You will then see the list of all the devices in your account with their token. The token you need is in the column **`ZToken`** and looks like **`123a1234567b12345c1d123456789e12`**. ## {% linkable_title Configuration %} From 5272dca6db440707312c247776a1aae94784c8e6 Mon Sep 17 00:00:00 2001 From: Aaron Bach Date: Tue, 15 Aug 2017 12:34:41 -0600 Subject: [PATCH 13/33] Added new docs for `port` and `ssl` config parameters (RainMachine) (#3180) * Added new docs for `port` and `ssl` config parameters * Modified version number * Fixing version --- .../_components/switch.rainmachine.markdown | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/source/_components/switch.rainmachine.markdown b/source/_components/switch.rainmachine.markdown index 291b57c3348..1b85b03aa42 100644 --- a/source/_components/switch.rainmachine.markdown +++ b/source/_components/switch.rainmachine.markdown @@ -2,7 +2,7 @@ layout: page title: "RainMachine Switch" description: "Instructions on how to use RainMachine units with Home Assistant." -date: 2017-08-04 12:00 +date: 2017-08-14 13:30 sidebar: true comments: false sharing: true @@ -23,7 +23,7 @@ The platform allows for either local (i.e., directly across the LAN) or remote dictate what your configuration should look like. For local access, specify the IP address/hostname of your RainMachine unit -and your RainMachine password: +, your RainMachine password, and optionally, the device's HTTP port: ```yaml switch: @@ -43,11 +43,16 @@ switch: Configuration Variables: -- **ip_address** (*Optional*): The IP address of your RainMachine unit -- **email** (*Optional*): Your RainMachine username/email -- **password** (*Required*): Your RainMachine password -- **zone_run_time** (*Optional*): The number of seconds that a zone should run when -turned on; defaults to 600 (10 minutes) +- **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 %} From 0acfd0aab4672fe8e71789b876f0096121405f59 Mon Sep 17 00:00:00 2001 From: Franck Nijhof Date: Tue, 15 Aug 2017 21:09:00 +0200 Subject: [PATCH 14/33] Review/Edit: Getting Started Guide (#3184) * Review/Edit: Getting Started Guide I've made some documentation fixes (spelling, grammar, and punctuations) to the 'Getting Started Guide'. * Fix small typo 'tje' -> 'the'. --- source/getting-started/automation-2.markdown | 21 +++++++++---------- source/getting-started/configuration.markdown | 4 ++-- source/getting-started/index.markdown | 4 ++-- .../presence-detection.markdown | 5 ++--- 4 files changed, 16 insertions(+), 18 deletions(-) diff --git a/source/getting-started/automation-2.markdown b/source/getting-started/automation-2.markdown index 71c32304f8d..6e179e7e37d 100644 --- a/source/getting-started/automation-2.markdown +++ b/source/getting-started/automation-2.markdown @@ -17,7 +17,7 @@ We are defining a [trigger](/docs/automation/trigger/) to track the sunset and t ```yaml # Example configuration.yaml entry automation: - alias: Turn on light when sun sets + alias: Turn on the lights when the sun sets initial_state: True hide_entity: False trigger: @@ -27,14 +27,14 @@ automation: service: light.turn_on ``` -Starting with 0.28 automation rules can be reloaded from the [frontend](/components/automation/) and are shown by default. With [`hide_entity:`](/components/automation/) you can control this behaviour. It's very handy if you are working on your rules but when a rule is finished and you don't want to see that rule in your frontend, you can set `hide_entity:` to `True`. To set an automation to be disabled when Home Assistant starts set `initial_state:` to `False`. +Starting with 0.28 automation rules can be reloaded from the [frontend](/components/automation/) and are shown by default. With [`hide_entity:`](/components/automation/) you can control this behavior. It's convenient if you are working on your rules, but when a rule is finished, and you don't want to see that rule in your frontend, you can set `hide_entity:` to `True`. To set an automation to be disabled when Home Assistant starts set `initial_state:` to `False`. -After a few days of running this automation rule, you come to realize that this automation rule is not good enough. It was already dark when the lights went on and the one day you weren't home, the lights turned on anyway. Time for some tweaking. Let's add an offset to the sunset trigger and a [condition](/docs/automation/condition/) to only turn on the lights if anyone is home. +After a few days of running this automation rule, you come to realize that this automation rule is not sufficient. It was already dark when the lights went on, and the one day you weren't home, the lights turned on anyway. Time for some tweaking. Let's add an offset to the sunset trigger and a [condition](/docs/automation/condition/) to only turn on the lights if anyone is home. ```yaml # Example configuration.yaml entry automation: - alias: Turn on light when sun sets + alias: Turn on the lights when the sun sets trigger: platform: sun event: sunset @@ -47,9 +47,9 @@ automation: service: light.turn_on ``` -Now you're happy and all is good. You start to like this automation business and buy some more lights, this time you put them in the bedroom. But what you now realize is that when the sun is setting, the lights in the bedroom are also being turned on! Time to tweak the automation to only turn on the living room lights. +Now you're happy, and all is good. You start to like this automation business and buy some more lights, this time you put them in the bedroom. But what you now realize is that when the sun is setting, the lights in the bedroom are also being turned on! Time to tweak the automation to only turn on the living room lights. -The first thing you do is to look at the entities in the developer tools (second icon) in the app. You see the names of your lights and you write them down: `light.table_lamp`, `light.bedroom`, `light.ceiling`. +The first thing you do is to look at the entities in the developer tools (second icon) in the app. You see the names of your lights, and you write them down: `light.table_lamp`, `light.bedroom`, `light.ceiling`. Instead of hard coding the entity IDs of the lights in the automation rule, we will set up a group. This will allow us to see the living room separate in the app and be able to address it from automation rules. @@ -63,7 +63,7 @@ group: - light.ceiling automation: - alias: Turn on light when sun sets + alias: Turn on the light when the sun sets trigger: platform: sun event: sunset @@ -77,9 +77,9 @@ automation: entity_id: group.living_room ``` -Christmas is coming along and you decide to buy a remote switch to control the Christmas lights from Home Assistant. You can't claim to live in the house of the future if you're still manually turning on your Christmas lights! +Christmas is coming along, and you decide to buy a remote switch to control the Christmas lights from Home Assistant. You can't claim to live in the house of the future if you're still manually turning on your Christmas lights! -We hook the switch up to Home Assistant and grab the entity ID from the developer tools: `switch.christmas_lights`. We will update the group to include the switch and will change our [action](/docs/automation/action/). We are no longer able to call `light.turn_on` because we also want to turn on a switch. This is where `homeassistant.turn_on` comes to the rescue. This service is capable of turning any entity on. +We hook the switch up to Home Assistant and grab the entity ID from the developer tools: `switch.christmas_lights`. We will update the group to include the switch and will change our [action](/docs/automation/action/). We are no longer able to call `light.turn_on` because we also want to turn on a switch. This is where `homeassistant.turn_on` comes to the rescue. This service is capable of turning on any entity. ```yaml # Example configuration.yaml entry @@ -90,7 +90,7 @@ group: - switch.christmas_lights automation: - alias: Turn on light when sun sets + alias: Turn on the lights when the sun sets hide_entity: True trigger: platform: sun @@ -106,4 +106,3 @@ automation: ``` ### [Next step: Presence detection »](/getting-started/presence-detection/) - diff --git a/source/getting-started/configuration.markdown b/source/getting-started/configuration.markdown index 036ef14abd0..360ef56f009 100644 --- a/source/getting-started/configuration.markdown +++ b/source/getting-started/configuration.markdown @@ -13,14 +13,14 @@ When launched for the first time, Home Assistant will write a default configurat The `configuration.yaml` is written in [YAML](/docs/configuration/yaml/), stored in [`.homeassistant`](/docs/configuration/), and can be modified with a text editor. -See the [components overview page](/components/) to find sample entries for your devices and services. For a sensor that is showing [random values](/components/sensor.random/), the entry would looks like the sample below: +See the [components overview page](/components/) to find sample entries for your devices and services. For a sensor that is showing [random values](/components/sensor.random/), the entry would look like the sample below: ```yaml sensor: - platform: random ``` -The [Setting up devices part](/docs/configuration/devices/) contains of the documentation additional details about adding device and services and [customization](/docs/configuration/customizing-devices/). +The [Setting up devices part](/docs/configuration/devices/) contains the additional documentation details about adding devices and services and [customization](/docs/configuration/customizing-devices/). For further details about configuration, please take a look at the [configuration documentation](/docs/configuration/). diff --git a/source/getting-started/index.markdown b/source/getting-started/index.markdown index cb89ecd6524..eec9fdc2354 100644 --- a/source/getting-started/index.markdown +++ b/source/getting-started/index.markdown @@ -9,7 +9,7 @@ sharing: true footer: true --- -You will need to install Home Assistant before we can get started. You can install Home Assistant on your computer or you can turn a Raspberry Pi into a dedicated Home Assistant hub. +You will need to install Home Assistant before we can get started. You can install Home Assistant on your computer, or you can turn a Raspberry Pi into a dedicated Home Assistant hub.
-For alternative installation methods please take a look at the [installation documentation](/docs/installation/). +For alternative installation methods, please take a look at the [installation documentation](/docs/installation/). If you run into any issues, please see [the troubleshooting page](/docs/installation/troubleshooting/) or [communication channels](/help/). It contains solutions to many commonly encountered issues. diff --git a/source/getting-started/presence-detection.markdown b/source/getting-started/presence-detection.markdown index 0f1a3d21a48..8fe44b35c7a 100644 --- a/source/getting-started/presence-detection.markdown +++ b/source/getting-started/presence-detection.markdown @@ -13,7 +13,7 @@ footer: true We care about privacy. Collected data is only stored in your instance of Home Assistant.

-Presence detection detects if people are home, which is the most important input for automation. Knowing who is home or where they are will open a whole range of other automation options: +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 @@ -27,7 +27,7 @@ Screenshot of Home Assistant showing a school, work and home zone and two people The device tracker component offers presence detection for Home Assistant. It supports two different methods for presence detection: scan for connected devices on the local network and connect to third party service. -Scanning for connected devices is easy to setup. See the instructions for our [supported routers][routers] or [scan the network using nmap][nmap]. This approach does have its limitations, however: it will only be able to detect if a device is home, and iPhones may show as not home inaccurately (as iPhones disconnect from WiFi if idle). +Scanning for connected devices is easy to setup. See the instructions for our [supported routers][routers] or [scan the network using nmap][nmap]. This approach does have its limitations, however: it will only be able to detect if a device is at home, and iPhones may show as not home inaccurately (as iPhones disconnect from WiFi if idle). Home Assistant currently supports multiple third-party services for presence detection: [OwnTracks][ha-owntracks], [GPSLogger][ha-gpslogger] and [Locative][ha-locative]. OwnTracks is an app that you install on your iPhone or Android phone that allows you to push the location of your device to Home Assistant using an MQTT broker. An MQTT broker is an Internet of Things communication platform that you can [freely host yourself][mqtt-self] or get [a private instance for free in the cloud](/components/mqtt/#run-your-own). @@ -53,4 +53,3 @@ Home Assistant will know the location of your device if you are using OwnTracks. [condition]: /getting-started/automation-condition/#zone-condition ### [Next step: Use Home Assistant »](/getting-started/use/) - From cd2a6efbad7497c455901f03af99f307dce2104f Mon Sep 17 00:00:00 2001 From: Adam Mills Date: Tue, 15 Aug 2017 21:05:00 -0400 Subject: [PATCH 15/33] Remove password configuration from automatic (#3187) --- source/_components/device_tracker.automatic.markdown | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/source/_components/device_tracker.automatic.markdown b/source/_components/device_tracker.automatic.markdown index 5eb9dbd6ee6..630bec936c4 100644 --- a/source/_components/device_tracker.automatic.markdown +++ b/source/_components/device_tracker.automatic.markdown @@ -16,7 +16,7 @@ ha_iot_class: "Cloud Push" The `automatic` platform offers presence detection by retrieving your car's information from the [Automatic](http://automatic.com/) cloud service. -To use Automatic with Home Assistant, first you must [create a free development account](https://developer.automatic.com/). Automatic will generate a Client ID and Secret for you to use in your Home Assistant configuration. You will also need to update your Event Delivery preferences to ensure Home Assistant can receive updates. On the developer page, under App Settings / Event Delivery, select "Websocket" for Event Delivery Preference. In order to make use of OAuth2 authentication you must specify the OAuth Redirect URL in the developer page. This should be configured to `/api/automatic/callback`. (Example: `http://hassio.local:8123/api/automatic/callback`) Note that this URL only needs to be accessible from the browser you use to perform the authentication. +To use Automatic with Home Assistant, first you must [create a free development account](https://developer.automatic.com/). Automatic will generate a Client ID and Secret for you to use in your Home Assistant configuration. You will need to update your Event Delivery preferences to ensure Home Assistant can receive updates. On the developer page, under App Settings / Event Delivery, select "Websocket" for Event Delivery Preference. Next, specify the OAuth Redirect URL in the developer page. This should be configured to `/api/automatic/callback`. (Example: `http://hassio.local:8123/api/automatic/callback`) Note that this URL only needs to be accessible from the browser you use to perform the authentication. Home Assistant can also take advantage of `scope:current_location` if available. This will allow Home Assistant to receive periodic location updates during a trip. In order to use this functionality, you must request the scope for your application from Automatic. Once `scope:current_location` is available, change `current_location` to `true` in your configuration.yaml. @@ -37,8 +37,6 @@ Configuration variables: - **client_id** (*Required*): The OAuth client id (get from https://developer.automatic.com/). - **secret** (*Required*): The OAuth client secret (get from https://developer.automatic.com/). -- **username** (*Optional*): The username associated with your ODB reader. If username/password is not configured, the `configurator` component will be used to authenticate your account. -- **password** (*Optional*): The password for your given ODB reader account. - **current_location** (*Optional*): Set to `true` if you have requested `scope:current_location` for your account. Home Assistant will then be able to receive periodic location updates during trips. - **devices** (*Optional*): The list of vehicle display names you wish to track. If not provided, all vehicles will be tracked. From 2ae1440208939d71f4cd3a577a4cdeb425ead391 Mon Sep 17 00:00:00 2001 From: fedor1210 Date: Wed, 16 Aug 2017 11:10:37 +0300 Subject: [PATCH 16/33] Reverted browsers.markdown (as maps are now fixed) (#3188) Map in Safari is fixed in 0.51, but I'm not sure about text about it: is it needed? --- 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 0543c634d5e..17ad9cf3d74 100644 --- a/source/_docs/frontend/browsers.markdown +++ b/source/_docs/frontend/browsers.markdown @@ -29,7 +29,7 @@ We would appreciate if you help to keep this page up-to-date and add feedback. | Browser | Release | State | Comments | | :-------------------- |:---------------|:-----------|:-------------------------| -| [Safari] | | works | Some problems with the Map. | +| [Safari] | | works | Map is fixed since 0.51. | ## {% linkable_title Linux %} @@ -60,7 +60,7 @@ We would appreciate if you help to keep this page up-to-date and add feedback. | Browser | Release | State | Comments | | :-------------------- |:---------------|:-----------|:-------------------------| -| [Safari] | | works | Can also be added to desktop. Some problems with the Map. | +| [Safari] | | works | Can also be added to desktop. Map is fixed since 0.51. | | [Chrome] | | works | | From 4072708ca6ac43b5cece0fcd15253696c301f014 Mon Sep 17 00:00:00 2001 From: Christian Lasarczyk Date: Wed, 16 Aug 2017 12:02:02 +0200 Subject: [PATCH 17/33] Real example on addon configuration (#3189) Inspired be mosquitto's `run.sh`. Hoping to ease the start for newbies like me. --- source/developers/hassio/addon_config.markdown | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/source/developers/hassio/addon_config.markdown b/source/developers/hassio/addon_config.markdown index 5de31e29c47..639f579350e 100644 --- a/source/developers/hassio/addon_config.markdown +++ b/source/developers/hassio/addon_config.markdown @@ -26,12 +26,20 @@ As with every Docker container, you will need a script to run when the container When developing your script: - `/data` is a volume for persistent storage. - - `/data/options.json` contains the user configuration. You can use `jq` inside your shell script to parse this data. + - `/data/options.json` contains the user configuration. You can use `jq` inside your shell script to parse this data. However you might have to install `jq` as a separate package in your container (see `Dockerfile` below). ```bash -echo '{ "target": "beer" }' | jq -r ".target" +CONFIG_PATH=/data/options.json + +TARGET=$(jq --raw-output ".target" $CONFIG_PATH) ``` +So if your `options`contain +```json +{ "target": "beer" } +``` +then there will be a variable `TARGET`containing `beer` in the environment of your bash file afterwards. + ## {% linkable_title Add-on Docker file %} All add-ons are based on Alpine Linux 3.6. Hass.io will automatically substitute the right base image based on the machine architecture. Add `tzdata` if you need run in correct timezone, but that is already add in our base images. From 1e6817d4f5a969fed4e0ac49d32acc951584fe12 Mon Sep 17 00:00:00 2001 From: timstanley1985 Date: Wed, 16 Aug 2017 15:13:09 +0100 Subject: [PATCH 18/33] Add availability payload (#3170) * Add availability payload * Tweak wording * Update switch.mqtt.markdown --- source/_components/switch.mqtt.markdown | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/source/_components/switch.mqtt.markdown b/source/_components/switch.mqtt.markdown index a31e4bc4301..a32b94b0c2c 100644 --- a/source/_components/switch.mqtt.markdown +++ b/source/_components/switch.mqtt.markdown @@ -35,9 +35,11 @@ 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. The payload is the same for the command_topic. +- **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. From 13fdb19cfee3d2afffe7fc2a5a457f8ccd748875 Mon Sep 17 00:00:00 2001 From: BioSehnsucht Date: Wed, 16 Aug 2017 18:26:38 -0500 Subject: [PATCH 19/33] Add HipChat notify service. (#3166) * Add HipChat notify service. * Updating HipChat notify documentation based on feedback in home-assistant/home-assistant.github.io#3166 * Updating HipChat notify documentation --- source/_components/notify.hipchat.markdown | 53 +++++++++++++++++++++ source/images/supported_brands/hipchat.png | Bin 0 -> 4042 bytes 2 files changed, 53 insertions(+) create mode 100644 source/_components/notify.hipchat.markdown create mode 100644 source/images/supported_brands/hipchat.png diff --git a/source/_components/notify.hipchat.markdown b/source/_components/notify.hipchat.markdown new file mode 100644 index 00000000000..d36905f38ed --- /dev/null +++ b/source/_components/notify.hipchat.markdown @@ -0,0 +1,53 @@ +--- +layout: page +title: "HipChat" +description: "Instructions how to add HipChat notifications to Home Assistant." +date: 2017-08-10 15:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: hipchat.png +ha_category: Notifications +ha_release: "0.52" +--- + + +The `hipchat` platform allows you to send notifications from Home Assistant to [HipChat](https://hipchat.com/). + +You need to obtain a [HipChat API token](https://developer.atlassian.com/hipchat/guide/hipchat-rest-api/api-access-tokens#APIaccesstokens-Usergeneratedtokens) to be able to send notifications. + +To enable the HipChat notification in your installation, add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +notify: + - name: NOTIFIER_NAME + platform: hipchat + token: ABCDEFGHJKLMNOPQRSTUVXYZ + room: 1234567 +``` + +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`. +- **token** (*Required*): The HipChat API token to use for sending HipChat notifications. +- **room** (*Required*): The default room to post to if no room is explicitly specified when sending the notification. +- **color** (*Optional*): Setting color will override the default color for the notification. By default not setting this will post to HipChat using the default color yellow. Valid options are 'yellow', 'green', 'red', 'purple', 'gray', 'random'. +- **notify** (*Optional*): Setting notify will override the default notify (blink application icon, chime, or otherwise call attention) setting for the notification. By default this is 'false'. Valid options are 'true' and 'false'. +- **format** (*Optional*): Setting format will override the default message format. Default is 'text'. Valid options are 'text' and 'html'. +- **host** (*Optional*): Setting the host will override the default HipChat server host. Default is 'https://api.hipchat.com/'. + +### {% linkable_title HipChat 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. +| `color` | yes | (str) Same usage as in configuration.yaml. Overrides any setting set in configuration.yaml. +| `notify` | yes | (bool) Same usage as in configuration.yaml. Overrides any setting set in configuration.yaml. +| `format` | 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/hipchat.png b/source/images/supported_brands/hipchat.png new file mode 100644 index 0000000000000000000000000000000000000000..b6ad5b06a05fc7b7b2936d09db3ed95217d07cb6 GIT binary patch literal 4042 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 literal 0 HcmV?d00001 From 20587e94e6e71a94e56c87a38f0111c93b028641 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=B6ren=20Oldag?= Date: Sat, 19 Aug 2017 13:18:02 +0200 Subject: [PATCH 20/33] Update docs for media_player.webostv. (#3204) --- source/_components/media_player.webostv.markdown | 2 ++ 1 file changed, 2 insertions(+) diff --git a/source/_components/media_player.webostv.markdown b/source/_components/media_player.webostv.markdown index 0da2e8b44fc..d5168793d0e 100644 --- a/source/_components/media_player.webostv.markdown +++ b/source/_components/media_player.webostv.markdown @@ -30,6 +30,7 @@ Configuration variables: - **host** (*Optional*): The IP of the LG webOS Smart TV, e.g. `192.168.0.10`. - **mac** (*Optional*): The MAC address of the TV, e.g. `C8:08:E9:99:99:1A`. - **name** (*Optional*): The name you would like to give to the LG webOS Smart TV. +- **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 inputs. @@ -46,6 +47,7 @@ media_player: host: 192.168.0.10 mac: C8:08:E9:99:99:1A name: Living Room TV + timeout: 5 filename: webostv.conf customize: sources: From 51f8791b9ebc481cd6a0c20109b4289b6d86aa8c Mon Sep 17 00:00:00 2001 From: Lance Haynie <30812641+lancehaynie@users.noreply.github.com> Date: Sat, 19 Aug 2017 05:20:01 -0600 Subject: [PATCH 21/33] Create configuration_yaml_by_lancehaynie.markdown (#3203) --- .../configuration_yaml_by_lancehaynie.markdown | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 source/_cookbook/configuration_yaml_by_lancehaynie.markdown diff --git a/source/_cookbook/configuration_yaml_by_lancehaynie.markdown b/source/_cookbook/configuration_yaml_by_lancehaynie.markdown new file mode 100644 index 00000000000..892714d1400 --- /dev/null +++ b/source/_cookbook/configuration_yaml_by_lancehaynie.markdown @@ -0,0 +1,12 @@ +--- +layout: page +title: "Configuration.yaml by Lance Haynie" +description: "" +date: 2017-08-18 18:33 +sidebar: true +comments: false +sharing: true +footer: true +ha_category: Example configuration.yaml +ha_external_link: https://github.com/Haynie-Research-and-Development/jarvis +--- From c0fa3e6d1ea6f30e19936d184f1c587d34b82dac Mon Sep 17 00:00:00 2001 From: William Scanlon Date: Sun, 20 Aug 2017 15:15:05 -0400 Subject: [PATCH 22/33] Documentation for #8988 Fix octoprint errors when printer is off/disconnected (#3211) * Updates for #8988 * Fixed spelling errors * Add HTML --- source/_components/octoprint.markdown | 6 ++++-- source/_components/sensor.octoprint.markdown | 6 +++++- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/source/_components/octoprint.markdown b/source/_components/octoprint.markdown index 17b9f1a5935..192d5d9d9a3 100644 --- a/source/_components/octoprint.markdown +++ b/source/_components/octoprint.markdown @@ -23,12 +23,14 @@ To get started with the OctoPrint API, please follow the directions on their [si octoprint: host: YOUR_OCTOPRINT_HOST api_key: YOUR_API_KEY + bed: false + number_of_tools: 1 ``` Configuration variables: - **host** (*Required*): IP address or hostname of Octoprint host. - **api_key** (*Required*): The retrieved api key. +- **bed** (*Optional*): If the printer has a heated bed. +- **number_of_tools** (*Optional*): Number of temperature adjustable tools. i.e. nozzle. - -**NOTE** If your 3D printer isn't connected to the OctoPrint server during the startup of Home Assistant this component will fail to load. diff --git a/source/_components/sensor.octoprint.markdown b/source/_components/sensor.octoprint.markdown index 149c48a7b41..129660a2f84 100644 --- a/source/_components/sensor.octoprint.markdown +++ b/source/_components/sensor.octoprint.markdown @@ -39,5 +39,9 @@ Configuration variables: - **monitored_conditions** array (*Required*): States to monitor. - **Current State**: Text of current state) - **Temperatures**: Temperatures of all available tools, eg. `print`, `head`, `print bed`, etc. These will be displayed as `tool0`, `tool1`, or `toolN` please refer to your OctoPrint frontend to associate the tool number with an actual device. - - **Job Percentage**: + - **Job Percentage**: Percentage of the job. + +

+If you are tracking temperature it is recommended to set `bed` and/or `number_of_tools` in your octoprint configuration. This will allow the octoprint sensors to load if the printer is offline during Home Assistant startup. +

From 0aebbe3fcf0240cddd353678b2482e7bdbaca96e Mon Sep 17 00:00:00 2001 From: John Mihalic Date: Sun, 20 Aug 2017 15:40:30 -0400 Subject: [PATCH 23/33] Updated docs for USPS component camera addition (#3074) * Updated docs for USPS component camera addition * Bump to 0.51 release * Bump release to 0.52 * Sync docs with final PR * Fix typo --- source/_components/camera.usps.markdown | 31 ++++++++++++++++++++ source/_components/sensor.usps.markdown | 25 ++-------------- source/_components/usps.markdown | 38 +++++++++++++++++++++++++ 3 files changed, 71 insertions(+), 23 deletions(-) create mode 100644 source/_components/camera.usps.markdown create mode 100644 source/_components/usps.markdown diff --git a/source/_components/camera.usps.markdown b/source/_components/camera.usps.markdown new file mode 100644 index 00000000000..5ed58ee5624 --- /dev/null +++ b/source/_components/camera.usps.markdown @@ -0,0 +1,31 @@ +--- +layout: page +title: USPS Camera +description: "Instructions on how to set up USPS camera within Home Assistant." +date: 2017-07-28 20:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: usps.png +ha_category: Camera +ha_release: 0.52 +ha_iot_class: "Cloud Polling" +--- + + +The `usps` camera component allows you to view the mail piece images made available through USPS via the Informed Delivery service. You must "Opt-In" to [Informed Delivery](https://informeddelivery.usps.com/box/pages/intro/start.action) to see mail images. This works in concert with [USPS sensors](/components/sensor.usps). + +

+You must have the [USPS component](/components/usps/) configured to use this camera. The camera will be setup if the `usps` component is configured and the required configuration is set. +

+ +To customize the interval that mail images are rotated in the mail camera you can edit your `configuration.yaml` file with the following settings: +```yaml +# Example configuration.yaml entry +camera: + - platform: usps + scan_interval: 5 +``` + +To enable this camera in your installation, set up the [USPS component](/components/usps) with your username and password. diff --git a/source/_components/sensor.usps.markdown b/source/_components/sensor.usps.markdown index 4bc83ad9537..46244107308 100644 --- a/source/_components/sensor.usps.markdown +++ b/source/_components/sensor.usps.markdown @@ -13,27 +13,6 @@ ha_release: 0.36 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 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. +The `usps` sensor component allows you to view statistics on incoming mail and packages made available through USPS via the Informed Delivery service. You must "Opt-In" to [Informed Delivery](https://informeddelivery.usps.com/box/pages/intro/start.action) to see mail images. This works in concert with [USPS camera](/components/camera.usps). -To enable this sensor, add the following lines to your `configuration.yaml`: - -```yaml -# Example configuration.yaml entry -sensor: - - platform: usps - username: YOUR_USERNAME - password: YOUR_PASSWORD -``` - -You will see two new sensors, one for packages and one for mail. - -Configuration options for the USPS Sensor: - -- **username** (*Required*): The username to access the MyUSPS service. -- **password** (*Required*): The password for the given username. -- **name** (*Optional*): Prefix for sensor names (defaults to "USPS") - -

-The USPS sensor logs into the MyUSPS website to scrape package data. It does not use an API. -

+To enable this sensor in your installation, set up the [USPS component](/components/usps) with your username and password. diff --git a/source/_components/usps.markdown b/source/_components/usps.markdown new file mode 100644 index 00000000000..af9b12c4f8c --- /dev/null +++ b/source/_components/usps.markdown @@ -0,0 +1,38 @@ +--- +layout: page +title: USPS +description: "Interface USPS mail and package information to Home Assistant." +date: 2017-07-28 20:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: usps.png +ha_category: Hub +ha_release: 0.52 +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 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. + +To enable this component, add the following lines to your `configuration.yaml`: + +```yaml +# Example configuration.yaml entry +usps: + username: YOUR_USERNAME + password: YOUR_PASSWORD +``` + +You will see two new sensors, one for packages and one for mail and a camera to rotate through images of incoming mail for the current day. + +Configuration options for the USPS component: + +- **username** (*Required*): The username to access the MyUSPS service. +- **password** (*Required*): The password for the given username. +- **name** (*Optional*): Prefix for sensor names (defaults to "USPS") + +

+The USPS sensor logs into the MyUSPS website to scrape package data. It does not use an API. +

From 2353ca554cdba0b433663492bec911ffa2a300fe Mon Sep 17 00:00:00 2001 From: Alok Saboo Date: Sun, 20 Aug 2017 16:38:32 -0400 Subject: [PATCH 24/33] Added Abode home security documentation (#3208) * Added Abode logo * Added Abode binary_sensor docs * Added Abode alarm_control_panel docs * Added Abode hub docs * Changed device_class --- source/_components/abode.markdown | 39 ++++++++++++++++++ .../alarm_control_panel.abode.markdown | 19 +++++++++ .../_components/binary_sensor.abode.markdown | 20 +++++++++ source/images/supported_brands/abode.jpg | Bin 0 -> 2494 bytes 4 files changed, 78 insertions(+) create mode 100644 source/_components/abode.markdown create mode 100644 source/_components/alarm_control_panel.abode.markdown create mode 100644 source/_components/binary_sensor.abode.markdown create mode 100644 source/images/supported_brands/abode.jpg diff --git a/source/_components/abode.markdown b/source/_components/abode.markdown new file mode 100644 index 00000000000..5b1368d4c6d --- /dev/null +++ b/source/_components/abode.markdown @@ -0,0 +1,39 @@ +--- +layout: page +title: "Abode Home Security" +description: "Instructions on integrating Abode home security with Home Assistant." +date: 2017-08-26 13:28 +sidebar: true +comments: false +sharing: true +footer: true +logo: abode.jpg +ha_category: Hub +ha_release: 0.52 +ha_iot_class: "Cloud Polling" +--- + +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. + +There is currently support for the following device types within Home Assistant: + +- [Binary Sensor](/components/binary_sensor.abode/): Reports on `Door Contacts` (open or close) and `Motion Camera` (motion detected or not) +- [Alarm Control Panel](/components/alarm_control_panel.abode/): Reports on current alarm status and can be used to arm/disarm the system + +The component currently polls every 30 seconds, so device status may not be immediately reflected in Home Assistant. + +An `abode` section must be present in the `configuration.yaml` file and contain the following options as required: + +```yaml +# Example configuration.yaml entry +abode: + username: abode_username + password: abode_password +``` + +Configuration variables: + +- **username** (*Required*): Username for the Abode account. +- **password** (*Required*): Password for Abode account. diff --git a/source/_components/alarm_control_panel.abode.markdown b/source/_components/alarm_control_panel.abode.markdown new file mode 100644 index 00000000000..4b140acdb06 --- /dev/null +++ b/source/_components/alarm_control_panel.abode.markdown @@ -0,0 +1,19 @@ +--- +layout: page +title: "Abode Alarm Control Panel" +description: "Instructions how to setup the Abode Alarm control panel within Home Assistant." +date: 2017-08-26 13:28 +sidebar: true +comments: false +sharing: true +footer: true +logo: abode.jpg +ha_category: Alarm +ha_release: 0.52 +ha_iot_class: "Cloud Polling" +--- + + +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/binary_sensor.abode.markdown b/source/_components/binary_sensor.abode.markdown new file mode 100644 index 00000000000..d0ee36ad392 --- /dev/null +++ b/source/_components/binary_sensor.abode.markdown @@ -0,0 +1,20 @@ +--- +layout: page +title: "Abode Binary Sensor" +description: "Instructions how to integrate Abode binary sensors into Home Assistant." +date: 2017-08-26 13:28 +sidebar: true +comments: false +sharing: true +footer: true +logo: alarmdecoder.png +ha_release: 0.52 +ha_category: Binary Sensor +ha_iot_class: "Cloud Polling" +--- + +The `abode` security control panel platform allows you to control your [Abode](https://goabode.com/) alarms. + +This component will automatically add `Door Contact` and `Motion Camera` binary sensors that are configured in your Abode account. + +The requirement is that you have setup your [Abode hub](/components/abode/). diff --git a/source/images/supported_brands/abode.jpg b/source/images/supported_brands/abode.jpg new file mode 100644 index 0000000000000000000000000000000000000000..51a0ac77c064982bda3ee9eb40023abe89e259d9 GIT binary patch literal 2494 zcmcgucTm$?7XF1$VKRA`)OJaWS#)1ds?==mxqQ zwqNgv^J$5*Niwo1W&NWr8BgR-WEL^{Z$iUDdxRuNYXsabqTZ`K0nldpn)0yW( z%$`?~@*hr&wPXw`aM8?);-=;OWyV6< z;-=;bmhM;koHY1LmOPQF+_czdx_Zt2Cc&}B8wo+pBKfVHcN5fpsgyPjN++Qimv&*Q4y>PIE&TQBE- zaZJ8}rJk$HfICS43LtL=1n8ODd6E60UK}6Et4|{?NY)lJj0#>>R4w&BeBI@=(I-pv zzbsceZKiept+%<`eU`~*2hNmE`z}%?I=YsbYW4ZI&4X@qnT4%(T^}bt-(cOu*o@k6 zACEs_ZEfv9N_ot^1e^R*ZNnj{)&}j%%9ZJ1)g-d)!H9&yB^*pE`%{yD=d`{T0PMga zylULplKHhG=3dMw9R2w$pRvV^-A5e=HOmnI+K1;Z{tjq9iVyzm@sys_Tza9?3U^^+ zBhjl{-_5nYmcMCZx*k1`eC4Vir}Uq`>QRn+b7Ai=Vdp&@Zn`RvM%?o4ylant z7%+8x;H9}?e8Urqk2A(h+XeN;BR+OarsOR7T$iuol=wSL77MxO1OQ?9ZclyP2w$Zq zZGtm|(dl3@6HAO@xP-I@a&=8{yjf!aZ&W?Ho%M;fxRSfHn(toub~-L?*LXUo332#W z0Kgs=PL^g!Ph$3p1ftX*^)9Rh1yUNxO-S7ALC?|pkgdUyE9@V-+%J(&`dAY~Gx_Ld*2%+gY2`VzMc1Ot6`bL%#STNAllF)V7BLF1rfys7*M}|WubVTr zty*5j+fXbNkM(b*G{WyX#gn;b#``^mG>)N5V_xOlvOjX_zbmb z*qmqoDkZ^!!HQeB-FN=Z=3IQi!uU?-{(n0$GwOt=QT$d7^uoZ6H z7GV^hq7Q&%ZxS3D*>51Iun~UiM@PW}sIQ;5Oe8LFT$okSo<^D_6s193FL6@<~)}hQ|U4!rMaa`XE+;N`yk{yy=%ySb{ zLC<%8iMTZ8_Sh=&51QVMaIG+3higS{Ceg8hmPD)BXF6Le3FNT!4|eta`BfEV^zv+4 zLo5ap=&k-jxh9V@kDV(A{ssVhX38-dp$IdTDiZ$P1o}m6k)FZcTg|4^bi}c@O{W<5 zV9Ndt2F_|9!eBRX6?p#A!;iPcN0n@eLiHs{b0o#R)$Oz`kf;ZmLOYM>waF|6n8!6$d2WY0OBk*Zh3d zJBGk0#(2&}o|v2^UA0=pn%`UZC8jwz&a<1<={81ElfRQMx?1xSU8`OC()KHs+#4Fg zzaG$98ie6{8mI5ft|Sb!1RN0kb_K#=l!emJDnl+T6Jr*vRfVzwRQj6=9{*hi8~gh-GlCRz1}w3 zSUlEFv9gaCjQTncqg2DQLSCNf2(Aq>hHTCZ#Al?rVded3fjQ@%Kbh;`eEP29uiZg{ Gk$(XaLGR80 literal 0 HcmV?d00001 From 07a40fa40554c037a2145fab20e3a74f5a37e88f Mon Sep 17 00:00:00 2001 From: Matt Schmitt Date: Mon, 21 Aug 2017 08:43:56 -0400 Subject: [PATCH 25/33] Update sensor.fitbit.markdown (#3206) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Add ‘clock_format’ configuration variable --- source/_components/sensor.fitbit.markdown | 2 ++ 1 file changed, 2 insertions(+) diff --git a/source/_components/sensor.fitbit.markdown b/source/_components/sensor.fitbit.markdown index fc3e1a85758..1da5a518367 100644 --- a/source/_components/sensor.fitbit.markdown +++ b/source/_components/sensor.fitbit.markdown @@ -21,6 +21,7 @@ Enable the sensor by adding the following to your `configuration.yaml` file: # Example configuration.yaml entry sensor: - platform: fitbit + clock_format: 12H monitored_resources: - "body/weight" ``` @@ -34,6 +35,7 @@ The unit system that the sensor will use is based on the country you set in your 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`. Below is the list of resources that you can add to `monitored_resources`. One sensor is exposed for every resource. From 3230da9fc15ef8cb88140fdcd7d384c743910dea Mon Sep 17 00:00:00 2001 From: mjj4791 Date: Mon, 21 Aug 2017 14:45:35 +0200 Subject: [PATCH 26/33] update buienradar sensor docs (#3154) * update buienradar sensor docs Update documentation for https://github.com/home-assistant/home-assistant/pull/8897 * Update sensor.buienradar.markdown --- source/_components/sensor.buienradar.markdown | 93 ++++++++++++++++--- 1 file changed, 82 insertions(+), 11 deletions(-) diff --git a/source/_components/sensor.buienradar.markdown b/source/_components/sensor.buienradar.markdown index b42e120eddf..27f6dfd796c 100644 --- a/source/_components/sensor.buienradar.markdown +++ b/source/_components/sensor.buienradar.markdown @@ -46,23 +46,48 @@ Configuration variables: - **timeframe** (*Optional*): Minutes to look ahead for precipitation forecast (5..120) [default: 60]. - **monitored_conditions** array (*Required*): One or more conditions to display in the frontend. - **stationname**: The name of the selected meteo-station. - - **symbol**: A symbol for the current weather. + - **conditioncode**: A symbol and a unique code identifying the current weather condition ([a..z]). + - **condition**: A symbol and the current weather condition (clear, cloudy, fog, rainy, snowy, lightning). + - **conditiondetailed**: A symbol and detailed current weather condition (clear, partlycloudy, cloudy, partlycloudy-fog, partlycloudy-light-rain, partlycloudy-rain, light-rain, rainy, snowy-rainy, partlycloudy-light-snow, partlycloudy-snow, light-snow, snowy, partlycloudy-lightning, lightning). + - **conditionexact**: A symbol with the full current weather condition (in English). + - **symbol**: A symbol for the current weather with the full current condition (in Dutch). - **humidity**: The relative humidity (%). - - **temperature**: The current temperature (in C). - - **groundtemperature**: The current ground temperature (in C). - - **windspeed**: The wind speed in m/s. - - **windforce**: The wind speed/force in Bft. + - **temperature**: The current temperature (in [C](https://en.wikipedia.org/wiki/Celsius)). + - **groundtemperature**: The current ground temperature (in [C](https://en.wikipedia.org/wiki/Celsius)). + - **windspeed**: The wind speed in [m/s](https://en.wikipedia.org/wiki/M/s). + - **windforce**: The wind speed/force in [Bft](https://en.wikipedia.org/wiki/Beaufort_scale). - **winddirection**: Where the wind is coming from: N (North),Z (south), NO (Noth-East), etc. - **windazimuth**: Where the wind is coming from in degrees, with true north at 0° and progressing clockwise. - - **pressure**: The sea-level air pressure in hPa. - - **visibility**: Visibility in meters (m). - - **windgust**: The windspeed of wind gusts (m/s). + - **pressure**: The sea-level air pressure in [hPa](https://en.wikipedia.org/wiki/Hectopascal). + - **visibility**: Visibility in meters ([m](https://en.wikipedia.org/wiki/Metre)). + - **windgust**: The windspeed of wind gusts ([m/s](https://en.wikipedia.org/wiki/M/s)). - **precipitation**: The amount of precipitation/rain in mm/h. - **precipitation_forecast_average**: The average expected precipitation/rain in mm/h within the given timeframe. - **precipitation_forecast_total**: The total expected precipitation/rain in mm within the given timeframe. The total expected rain in the configured timeframe will be equal to _precipitation_forecast_total_/_timeframe_ mm/min. So, with timeframe configured to 30 minutes and a value of 5, the expected rain is 5 mm in 30 minutes, which is the same as 10 mm/h. If timeframe is set to 90 minutes and a value of 5, the expected rain is 5 mm in 90 minutes, which is equal to 3.3 mm/h. - - **irradiance**: Sun intensity in Watt per square meter (W/m2). - -Full configuration example where location is manually specified: + - **irradiance**: Sun intensity in Watt per square meter ([W/m2](https://en.wikipedia.org/wiki/W/m2)). + - **temperature_1d** [[1d]](#1d): The forecasted temperature (in [C](https://en.wikipedia.org/wiki/Celsius)). + - **mintemp_1d** [[1d]](#1d): The forecasted minimum temperature (in [C](https://en.wikipedia.org/wiki/Celsius)). + - **rainchance_1d** [[1d]](#1d): The forecasted chance for rain (%). + - **sunchance_1d** [[1d]](#1d): The forecasted chance for sun (%). + - **rain_1d** [[1d]](#1d): The forecasted amount of rain in [mm](https://en.wikipedia.org/wiki/Millimetre). + - **snow_1d** [[1d]](#1d): The forecasted amount of snow in [cm](https://en.wikipedia.org/wiki/Centimetre). + - **windforce_1d** [[1d]](#1d): The expected windforce in [Bft](https://en.wikipedia.org/wiki/Beaufort_scale). + - **conditioncode_1d** [[1d]](#1d): Symbol and condition code of the expected condition. + - **condition_1d** [[1d]](#1d): Symbol and expected condition. + - **conditiondetailed_1d** [[1d]](#1d): Symbol and detailed expected condition. + - **conditionexact_1d** [[1d]](#1d): Symbol and full expected condition (in English). + - **symbol_1d** [[1d]](#1d): Symbol and full expected condition (in Dutch). + + +## Daily forecasts + +Conditions above marked with
[1d] are daily forecasts. To get forecast for different day, replace the number +in `_1d` part of the sensor name. Valid values are from `1` to `5`. + + +## Configuration examples + +Full configuration example (excluding forecasted conditions) where location is manually specified: ```yaml # Example configuration.yaml entry @@ -73,6 +98,10 @@ Full configuration example where location is manually specified: longitude: 5.70 monitored_conditions: - stationname + - conditioncode + - condition + - conditiondetailed + - conditionexact - symbol - humidity - temperature @@ -90,5 +119,47 @@ Full configuration example where location is manually specified: - precipitation_forecast_total ``` + +Configuration example with current condition and (some) forecasted values: + +```yaml +# Weather prediction +sensor: + - platform: buienradar + monitored_conditions: + # current condition: + - condition + - conditioncode + - conditiondetailed + - conditionexact + - symbol + # conditions for forecasted data: + - symbol_1d + - symbol_2d + - symbol_3d + - symbol_4d + - symbol_5d + - temperature_1d + - temperature_2d + - temperature_3d + - temperature_4d + - temperature_5d + - rainchance_1d + - rainchance_2d + - rainchance_3d + - rainchance_4d + - rainchance_5d + - sunchance_1d + - sunchance_2d + - sunchance_3d + - sunchance_4d + - sunchance_5d + - rain_1d + - rain_2d + - rain_3d + - rain_4d + - rain_5d +``` + [Usage statement:](https://www.buienradar.nl/overbuienradar/gratis-weerdata) > Buienradar makes free weatherdata available for use by individuals and businesses (website/intranet). The use of the weatherdata is allowed for **non-commercial purposes**. Please refer to the full usage statement linked above to confirm your usage or to request permission. From 8a785eabb29c9a130377750415910ce07dae8966 Mon Sep 17 00:00:00 2001 From: Robin Date: Mon, 21 Aug 2017 13:09:04 +0000 Subject: [PATCH 27/33] Add london air doc (#3132) * Add london air doc * Escape template * Fix position --- .../_components/sensor.londond_air.markdown | 78 +++++++++++++++++++ 1 file changed, 78 insertions(+) create mode 100644 source/_components/sensor.londond_air.markdown diff --git a/source/_components/sensor.londond_air.markdown b/source/_components/sensor.londond_air.markdown new file mode 100644 index 00000000000..64e94ef24e4 --- /dev/null +++ b/source/_components/sensor.londond_air.markdown @@ -0,0 +1,78 @@ +--- +layout: page +title: "London Air Quality" +description: "Display the current status of London air quality by area and pollution type." +date: 2017-08-02 18:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: waqi.png +ha_category: Health +ha_iot_class: "Cloud Polling" +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. + +To add sensors to Home-assistant for all possible areas/boroughs add the following to your `configuration.yaml` file: + + +```yaml +# Example configuration.yaml entry for a single sensor +sensor: + - platform: london_air + locations: + - Barking and Dagenham + - Bexley + - Brent + - Camden + - City of London + - Croydon + - Ealing + - Enfield + - Greenwich + - Hackney + - Hammersmith and Fulham + - Haringey + - Harrow + - Havering + - Hillingdon + - Islington + - Kensington and Chelsea + - Kingston + - Lambeth + - Lewisham + - Merton + - Redbridge + - Richmond + - Southwark + - Sutton + - Tower Hamlets + - Wandsworth + - Westminster +``` + +Configuration variables: + +- **locations** array (*Required*): At least one entry required. + +To explore the data available within the `data` attribute of a sensor use the `dev-template` tool on the Home-assistant frontend. `data` contains a list of monitored sites, where the number of monitored sites are given by the `sites` attribute. If a sensor has four sites, access the fourth site by indexing the list of sites using data[3]. Each site is a dictionary with multiple fields, with entries for the `latitude` and `longitude` of that site, a `pollution_status`, `site_code`, `site_name` and `site_type`. The field `number_of_pollutants` states how many pollutants are monitored (of the possible six) and the field `pollutants` returns a list with data for each pollutant. To access the first pollutant in the list for site zero use `attributes.data[0].pollutants[0]`. Each entry in `pollutants` is a dictionary with fields for the pollutant `code`, `description`, `index`, `quality` and a `summary`. [Template sensors](https://home-assistant.io/components/sensor.template/) can then be added to display these attributes, for example: + +```yaml +# Example template sensors +- platform: template + sensors: + updated: + friendly_name: 'Updated' + value_template: {% raw %}'{{states.sensor.merton.attributes.updated}}'{% endraw %} + merton_pm10: + friendly_name: 'Merton PM10' + value_template: {% raw %}'{{states.sensor.merton.attributes.data[0].pollutants[0].summary}}'{% endraw %} + westminster_s02: + friendly_name: 'Westminster S02' + value_template: {% raw %}'{{states.sensor.westminster.attributes.data[0].pollutants[3].summary}}'{% endraw %} +``` From 13f1a804f1af8003feba4793e63547fc0c294d5a Mon Sep 17 00:00:00 2001 From: Martin Berg Date: Mon, 21 Aug 2017 15:32:21 +0200 Subject: [PATCH 28/33] Add docs for Prowl. (#3194) * Add docs for Prowl. * Update 'ha_release' --- source/_components/notify.prowl.markdown | 43 +++++++++++++++++++++++ source/images/supported_brands/prowl.png | Bin 0 -> 29816 bytes 2 files changed, 43 insertions(+) create mode 100644 source/_components/notify.prowl.markdown create mode 100644 source/images/supported_brands/prowl.png diff --git a/source/_components/notify.prowl.markdown b/source/_components/notify.prowl.markdown new file mode 100644 index 00000000000..2bfeb97fc45 --- /dev/null +++ b/source/_components/notify.prowl.markdown @@ -0,0 +1,43 @@ +--- +layout: page +title: "Prowl" +description: "Instructions how to add Prowl notifications to Home Assistant." +date: 2017-08-17 18:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: prowl.png +ha_category: Notifications +ha_release: 0.52 +--- + + +The `prowl` platform uses [Prowl](https://www.prowlapp.com/) to deliver push notifications from Home Assistant to your iOS device. + +Go to the [Prowl website](https://www.prowlapp.com/) and create a new API key. + +To add Prowl notifications to your installation, add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +notify: + - name: NOTIFIER_NAME + platform: prowl + api_key: ABCDEFGHJKLMNOPQRSTUVXYZ +``` + +Configuration variables: + +- **name** (*Optional*): Setting the optional parameter `name` allows multiple notifiers to be created. The default value is `notify`. The notifier will bind to the service `notify.NOTIFIER_NAME`. +- **api_key** (*Required*): The Prowl API key to use. + +### {% linkable_title Prowl service data %} + +The following attributes can be placed `data` for extended functionality. + +| Service data attribute | Optional | Description | +| ---------------------- | -------- | ----------- | +| `priority` | yes | Priority level, for more info refer to the [Prowl API documentation](https://www.prowlapp.com/api.php#add). | + +To use notifications, please see the [getting started with automation page](/getting-started/automation/). diff --git a/source/images/supported_brands/prowl.png b/source/images/supported_brands/prowl.png new file mode 100644 index 0000000000000000000000000000000000000000..c913e8dfe85c3f02e1750a8ec68997eb5a89d7db GIT binary patch literal 29816 zcmV*VKw7_vP)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00006 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 literal 0 HcmV?d00001 From 35f1ca3dfd29ef9ba3fcfc7b8a3ddd2900be7642 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Mon, 21 Aug 2017 21:57:30 +0200 Subject: [PATCH 29/33] Add type of channel id (#3219) --- source/_components/sensor.eliqonline.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/sensor.eliqonline.markdown b/source/_components/sensor.eliqonline.markdown index 36fb8621c99..cfa071e3079 100644 --- a/source/_components/sensor.eliqonline.markdown +++ b/source/_components/sensor.eliqonline.markdown @@ -28,7 +28,7 @@ sensor: Configuration variables: - **access_token** (*Required*): The Access Token for your account. -- **channel_id** (*Optional*): Channel ID of your device. Needed if you have more than one device. +- **channel_id** (*Optional*): Channel ID (as integer) of your device. Needed if you have more than one 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). From a59ffe9fb49ee2b6a932eddafcbd1c360e1bfe72 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C3=ABl=20Arnauts?= Date: Tue, 22 Aug 2017 17:53:04 +0200 Subject: [PATCH 30/33] Update sensor.netdata.markdown (#3221) Add missing `ipv4_in` and `ipv4_out`. Added new `disk_free`. --- source/_components/sensor.netdata.markdown | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/source/_components/sensor.netdata.markdown b/source/_components/sensor.netdata.markdown index 3d2356af58a..3673431d176 100644 --- a/source/_components/sensor.netdata.markdown +++ b/source/_components/sensor.netdata.markdown @@ -41,4 +41,6 @@ Configuration variables: - 'system_load': System Load 15 min - 'system_io_in': System I/O In - 'system_io_out': System I/O Out - + - 'ipv4_in': Amount of inbound IPv4 packets per second + - 'ipv4_out': Amount of outbound IPv4 packets per second + - 'disk_free': Free disk space From 109cdccd465baa727557a636bea35f37bda204ad Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A5le=20Semb=20Hauknes?= Date: Wed, 23 Aug 2017 09:36:57 +0200 Subject: [PATCH 31/33] Add 'days_offset' parameter (#3134) * Add 'days_offset' parameter * Change name from 'offset' to 'days_offset' --- 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 133b28f1b76..b063bb5e138 100644 --- a/source/_components/binary_sensor.workday.markdown +++ b/source/_components/binary_sensor.workday.markdown @@ -30,6 +30,7 @@ Configuration variables: - **province** (*Optional*): Province code according to [holidays](https://pypi.python.org/pypi/holidays/0.8.1) 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`. 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. From 54ca51afad3f262cba5542b2d87ec1649c6e71b2 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Wed, 23 Aug 2017 11:30:16 +0200 Subject: [PATCH 32/33] Add World Tides docs (#3228) * Add World Tides docs --- .../sensor.worldtidesinfo.markdown | 32 ++++++++++++++++++ .../supported_brands/worldtidesinfo.png | Bin 0 -> 17192 bytes 2 files changed, 32 insertions(+) create mode 100644 source/_components/sensor.worldtidesinfo.markdown create mode 100644 source/images/supported_brands/worldtidesinfo.png diff --git a/source/_components/sensor.worldtidesinfo.markdown b/source/_components/sensor.worldtidesinfo.markdown new file mode 100644 index 00000000000..955f380d4a8 --- /dev/null +++ b/source/_components/sensor.worldtidesinfo.markdown @@ -0,0 +1,32 @@ +--- +layout: page +title: "World Tides" +description: "Instructions how to add Tides information to Home Assistant." +date: 2017-08-23 08:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: worldtidesinfo.png +ha_category: Weather +ha_release: 0.52 +--- + +The `worldtidesinfo` sensor platform uses details from [World Tides](https://www.worldtides.info/) to provide information about the prediction for the tides for any location in the world. + +To use this sensor, add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +sensor: + - platform: worldtidesinfo + api_key: YOUR_API_KEY +``` + +Configuration variables: + +- **api_key** (*Required*): Your API key for https://www.worldtides.info/. +- **name** (*Optional*): Name to use in the frontend. +- **latitude** (*Optional*): Latitude of the location to display the tides. Defaults to the latitude in your `configuration.yaml` file. +- **longitude** (*Optional*): Longitude of the location to display the tides. Defaults to the longitude in your `configuration.yaml` file. + diff --git a/source/images/supported_brands/worldtidesinfo.png b/source/images/supported_brands/worldtidesinfo.png new file mode 100644 index 0000000000000000000000000000000000000000..79ae85527ae50d28253ad22093d55d44434c579e GIT binary patch literal 17192 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

5fg)&WE zWmYSZ}nVkIi22(wBgNT}KNaIj-)0ErI1v-d@;1H>c z6BQ3`J5+_GYBOv=8BYa?eplgMUtrO0tePlL1(M4QTkMo-AmL5ksVs7LVR_wnUwdp~ zXOP<^L_G!2J|yw{C--=q+s&O144{tN~d=>+6uO@cWG*s6|ZIZnX@LSC=hTUmhOn@2uan1G&@1@ASo-0q_6# zHT>V#<)C>+dwP722TqOX0q+73{grSgj3AOiS377z|MD<{UwiPJvP?-JiVXe--t&1# z!2#>o{`vgu%<1bkO%$%4C>OICd&EY6u<3XrY18qdz>wJ59rgZn&4r`$4XD-Y;C9-g zCXrOH>ji{04VEavQV~7Px72nh3;jD4$)x00*X4ezy1;WecR6eE>d@eTJGPOwZh8oB z_DTFWjYkSNcSmmGFqS?0lb3AV@`M@S?FSkBCOLEVQz9M4gd1tWi||`L6P7Feg;uR` zP1$7IjfR&q?d(W7H%~Sb$SexL02e}JAgtzLi5@M%ss@?vrPA7&{EXkMv^}?3^9m)_=^t_%`OI9a ze`uQb4?hMLy9-zQohX71_R`JYw+x`9zmOcrGxj9pb4Q^(bQJQ1gJ7aT=fg4ZMYi|qrnw!cfUVz;3~;_2w4kX* z;f)V7m}^5kluT|~(C{ON6F!K#d62c614gqpV7lIr(P|7Bj#IF#YzaE;9CKO*n)L=Z zOdsqV?S#_uz^izSRsBL~(KXElo-Z!>ncO0}2@81r3f+R8*$zuxM;4#$uP^2>nvJ)* zUt@sB`_Pcym@NIwr^35l;VR$5uHb77a1O|O4z<_$HHY8N46t^rF~Hif#sF)_8Uw5y vYYeb Date: Fri, 25 Aug 2017 23:02:12 -0700 Subject: [PATCH 33/33] Add release blog post --- _config.yml | 8 +- source/_components/abode.markdown | 2 +- .../alarm_control_panel.abode.markdown | 2 +- .../_components/binary_sensor.abode.markdown | 2 +- ...ir.markdown => sensor.london_air.markdown} | 0 source/_docs/automation/editor.markdown | 8 +- source/_docs/scripts/editor.markdown | 28 ++ source/_includes/asides/docs_navigation.html | 1 + .../_posts/2017-08-26-release-0-52.markdown | 376 ++++++++++++++++++ .../images/blog/2017-08-0.52/components.png | Bin 0 -> 26431 bytes 10 files changed, 415 insertions(+), 12 deletions(-) rename source/_components/{sensor.londond_air.markdown => sensor.london_air.markdown} (100%) create mode 100644 source/_docs/scripts/editor.markdown create mode 100644 source/_posts/2017-08-26-release-0-52.markdown create mode 100644 source/images/blog/2017-08-0.52/components.png diff --git a/_config.yml b/_config.yml index 77f78049d6b..f62bb660786 100644 --- a/_config.yml +++ b/_config.yml @@ -142,12 +142,12 @@ social: # Home Assistant release details current_major_version: 0 -current_minor_version: 51 -current_patch_version: 2 -date_released: 2017-08-14 +current_minor_version: 52 +current_patch_version: 0 +date_released: 2017-08-26 # 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-0512--august-14" +patch_version_notes: "#" # Minor release (Example #release-0431---april-25): diff --git a/source/_components/abode.markdown b/source/_components/abode.markdown index 5b1368d4c6d..59b247f7bf7 100644 --- a/source/_components/abode.markdown +++ b/source/_components/abode.markdown @@ -2,7 +2,7 @@ layout: page title: "Abode Home Security" description: "Instructions on integrating Abode home security with Home Assistant." -date: 2017-08-26 13:28 +date: 2017-08-26 0:28 sidebar: true comments: false sharing: true diff --git a/source/_components/alarm_control_panel.abode.markdown b/source/_components/alarm_control_panel.abode.markdown index 4b140acdb06..593735b7d20 100644 --- a/source/_components/alarm_control_panel.abode.markdown +++ b/source/_components/alarm_control_panel.abode.markdown @@ -2,7 +2,7 @@ layout: page title: "Abode Alarm Control Panel" description: "Instructions how to setup the Abode Alarm control panel within Home Assistant." -date: 2017-08-26 13:28 +date: 2017-08-26 0:28 sidebar: true comments: false sharing: true diff --git a/source/_components/binary_sensor.abode.markdown b/source/_components/binary_sensor.abode.markdown index d0ee36ad392..35dfeda1713 100644 --- a/source/_components/binary_sensor.abode.markdown +++ b/source/_components/binary_sensor.abode.markdown @@ -2,7 +2,7 @@ layout: page title: "Abode Binary Sensor" description: "Instructions how to integrate Abode binary sensors into Home Assistant." -date: 2017-08-26 13:28 +date: 2017-08-26 0:28 sidebar: true comments: false sharing: true diff --git a/source/_components/sensor.londond_air.markdown b/source/_components/sensor.london_air.markdown similarity index 100% rename from source/_components/sensor.londond_air.markdown rename to source/_components/sensor.london_air.markdown diff --git a/source/_docs/automation/editor.markdown b/source/_docs/automation/editor.markdown index 83b1de0f29e..e8a60039668 100644 --- a/source/_docs/automation/editor.markdown +++ b/source/_docs/automation/editor.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Automation Editor" -description: "Instructions on how to use the new automation editor." +description: "Instructions on how to use the automation editor." date: 2016-04-24 08:30 +0100 sidebar: true comments: false @@ -9,11 +9,9 @@ sharing: true footer: true --- -In Home Assistant 0.45 we have introduced the first version of our automation editor. The editor is still in a very early stage and rough around the edges. For now we are only supporting Chrome but better browser support is planned for the future. +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. -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 **Automation** which is located in the sidebar. 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/). +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/). Choose a meaningful name for your automation rules. diff --git a/source/_docs/scripts/editor.markdown b/source/_docs/scripts/editor.markdown new file mode 100644 index 00000000000..e5cc30c2272 --- /dev/null +++ b/source/_docs/scripts/editor.markdown @@ -0,0 +1,28 @@ +--- +layout: page +title: "Script Editor" +description: "Instructions on how to use the new script editor." +date: 2016-08-26 03:30 +0000 +sidebar: true +comments: false +sharing: true +footer: true +redirect_from: /docs/script/editor/ +--- + +In Home Assistant 0.52 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. + +

+ +
+ +## {% linkable_title Updating your configuration to use the editor %} + +The script editor reads and writes to the file `scripts.yaml` in your [configuration](/docs/configuration/) folder. Make sure that you have set up the script component to read from it: + +```yaml +# Configuration.yaml example +script: !include scripts.yaml +``` + +The conten that was under `script:` should now be moved to `scripts.yaml` to be editable. diff --git a/source/_includes/asides/docs_navigation.html b/source/_includes/asides/docs_navigation.html index 83fa9419bb0..c113f371a5a 100644 --- a/source/_includes/asides/docs_navigation.html +++ b/source/_includes/asides/docs_navigation.html @@ -78,6 +78,7 @@
  • {% active_link /docs/scripts/service-calls/ Service Calls %}
  • {% active_link /docs/scripts/conditions/ Conditions %}
  • +
  • {% active_link /docs/scripts/editor/ Editor %}
  • diff --git a/source/_posts/2017-08-26-release-0-52.markdown b/source/_posts/2017-08-26-release-0-52.markdown new file mode 100644 index 00000000000..152d0621d7c --- /dev/null +++ b/source/_posts/2017-08-26-release-0-52.markdown @@ -0,0 +1,376 @@ +--- +layout: post +title: "0.51: Massive history speed up, finished automation editor and official vacuum cleaner support" +description: "Lots of frontend bugs have been squashed, the automation editor now supports all triggers and actions and vacuum cleaners are now an official component." +date: 2017-08-26 00:11:05 +date_formatted: "August 26, 2017" +author: Paulus Schoutsen +author_twitter: balloob +comments: true +categories: Release-Notes +og_image: /images/blog/2017-08-0.52/components.png +--- + + + +Although the summer is in full progress, the development hasn't stalled. This release brings bug fixes, clean ups and another 8 new integrations. On top of that we are also introducing a new [script editor](/docs/scripts/editor/)! + +To use the scripts editor, create a new file in your config directory named `scripts.yaml` and copy your existing scripts over: + +```yaml +# scripts.yaml +turn_on_some_lights: + alias: Turn on the lights + sequence: + - data: {} + service: light.turn_on +``` + + Than update your `configuration.yaml` to look like this: + +```yaml +# Configuration.yaml example +script: !include scripts.yaml +``` + +
    + +
    + +## New Platforms + +- Add version sensor ([@fabaff] - [#8912]) ([sensor.version docs]) (new-platform) +- Nello.io lock support ([@pschmitt] - [#8957]) ([lock.nello docs]) (new-platform) +- Add HipChat notify service. ([@BioSehnsucht] - [#8918]) ([notify.hipchat docs]) (new-platform) +- Refactor USPS into component with Sensors+Camera ([@mezz64] - [#8679]) ([usps docs]) ([camera.usps docs]) ([sensor.usps docs]) (breaking change) (new-platform) +- Adds London_air component ([@robmarkcole] - [#9020]) ([sensor.london_air docs]) (new-platform) +- Add Abode home security component ([@arsaboo] - [#9030]) ([abode docs]) ([alarm_control_panel.abode docs]) ([binary_sensor.abode docs]) (new-platform) +- Add support for Prowl notifications. ([@mbrrg] - [#9028]) ([notify.prowl docs]) (new-platform) +- Add worldtidesinfo sensor component ([@aetolus] - [#8860]) ([sensor.worldtidesinfo docs]) (new-platform) + +## {% linkable_title If you need help... %} +...don't hesitate to use our very active [forums][forum] or join us for a little [chat][discord]. The release notes have comments enabled but it's preferred if you use the former communication channels. Thanks. + +## {% linkable_title Reporting Issues %} +Experiencing issues introduced by this release? Please report them in our [issue tracker][issue]. Make sure to fill in all fields of the issue template. + + +## Breaking Changes + +- Remove spaces from Xiami switch attributes ([@syssi] - [#8952]) ([switch.xiaomi docs]) (breaking change) +- MQTT Switch: command and availability payload are now no longer linked. Command and availability payload default to ON/OFF and must be configured individually if custom values are required. ([@timstanley1985] - [#8934]) ([switch.mqtt docs]) (breaking change) + +```yaml + - platform: mqtt + name: "Kitchen" + state_topic: "stat/sonoff_1/POWER" + command_topic: "cmnd/sonoff_1/POWER" + availability_topic: "tele/sonoff_1/LWT" + payload_available: "Online" + payload_not_available: "Offline" + retain: true +``` + +- Refactor USPS into component with Sensors+Camera ([@mezz64] - [#8679]) ([usps docs]) ([camera.usps docs]) ([sensor.usps docs]) (breaking change) (new-platform) + +```yaml +usps: + username: user + password: pass + name: optional +``` + +- eliqonline: The optional channel_id configuration variable of the Eliqonline sensor needs to be a positive integer. ([@molobrakos] - [#9072]) ([sensor.eliqonline docs]) (breaking change) +- MySensors: Not a breaking change per se but users that have not been following the mysensors [serial API](https://www.mysensors.org/download/serial_api_20) could face dropped messages after this change. Messages are now validated according to the API before being passed along from/to devices. See [0.11 release notes](https://github.com/theolind/pymysensors/releases/tag/0.11) for more info. ([@MartinHjelmare] - [#9069]) ([mysensors docs]) ([binary_sensor.mysensors docs]) ([climate.mysensors docs]) ([cover.mysensors docs]) ([device_tracker.mysensors docs]) ([light.mysensors docs]) ([notify.mysensors docs]) ([sensor.mysensors docs]) ([switch.mysensors docs]) (breaking change) +- Automatic has disabled password authentication on their API. Home Assistant will now use OAuth2 to authenticate accounts. The following steps must be taken to transition your setup: + 1) Log in to your Automatic developer account. In the Automatic Developer Apps Manager, specify the OAuth Redirect URL in the developer page. This should be configured to `/api/automatic/callback`. (Example: `http://hassio.local:8123/api/automatic/callback`) Note that this URL only needs to be accessible from the browser you use to perform the authentication. + 2) Remove username/password from your automatic device tracker configuration in configuration.yaml. + 3) If you have authorized your account for `scope:current_location`, add `current_location: true` to your automatic device tracker configuration in configuration.yaml. + 4) When you restart home assistant, click on the Automatic Configure link in the Configurator card, and follow the instructions to authorize Home Assistant.

    NOTE: Automatic's API is currently not correctly authorizing with refresh tokens, so Step 4 currently needs to be performed after every restart. ([@armills] - [#8962] [#9002]) ([configurator docs]) ([device_tracker.automatic docs]) (breaking change) + +## All changes + +- Add version sensor ([@fabaff] - [#8912]) ([sensor.version docs]) (new-platform) +- Fix hue lights for Philips and non-philips lights ([@groth-its] - [#8905]) ([light.hue docs]) +- Fixed cert_expiry sensor to delay firing on HA startup ([@arsaboo] - [#8920]) ([sensor.cert_expiry docs]) +- Remove spaces from Xiami switch attributes ([@syssi] - [#8952]) ([switch.xiaomi docs]) (breaking change) +- Add service to alarm control panel for night mode arming ([@schmittx] - [#8614]) ([alarm_control_panel docs]) ([alarm_control_panel.totalconnect docs]) +- Add support for Automatic OAuth2 authentication ([@armills] - [#8962]) ([configurator docs]) ([device_tracker.automatic docs]) (breaking change) +- Nello.io lock support ([@pschmitt] - [#8957]) ([lock.nello docs]) (new-platform) +- Added continue-on-errors, added value template ([@iamjackg] - [#8971]) ([sensor.snmp docs]) +- Is_allowed_path raise for None path ([@danielhiversen] - [#8953]) +- Fix #8960 - Decora Wi-Fi Switch unable to set brightness ([@tlyakhov] - [#8989]) ([light.decora_wifi docs]) +- Adds port/SSL config options for RainMachine ([@bachya] - [#8986]) ([switch.rainmachine docs]) +- Automatic device tracker remove password ([@armills] - [#9002]) ([device_tracker.automatic docs]) (breaking change) +- Add scripts editor backend ([@balloob] - [#8993]) ([config docs]) ([script docs]) (new-platform) +- MQTT Switch - Add configurable availability payload ([@timstanley1985] - [#8934]) ([switch.mqtt docs]) (breaking change) +- Buienradar newconditions ([@mjj4791] - [#8897]) ([sensor.buienradar docs]) ([weather.buienradar docs]) +- Pushbullet, fix multiple messages sent when url param is set ([@karlkar] - [#9006]) ([notify.pushbullet docs]) +- Update to pyenvisalink 2.2, and remove range validation on zonedump i… ([@Cinntax] - [#8981]) ([envisalink docs]) +- Fix #9010 - Swiss Public Transportation shows departure time in the past ([@michaelhertig] - [#9011]) ([sensor.swiss_public_transport docs]) +- Add HipChat notify service. ([@BioSehnsucht] - [#8918]) ([notify.hipchat docs]) (new-platform) +- Update onkyo-eiscp to 1.2.3 ([@danieljkemp] - [#9019]) ([media_player.onkyo docs]) +- Check if album image(s) exist in spotify ([@Tommatheussen] - [#9024]) ([media_player.spotify docs]) +- Update ffmpeg to 1.7 to fix severals problems ([@pvizeli] - [#9029]) +- Add state_with_unit property to state objects in templates ([@balloob] - [#9014]) +- Fix Geizhals index issue when not 4 prices available ([@celeroll] - [#9035]) ([sensor.geizhals docs]) +- Refactor USPS into component with Sensors+Camera ([@mezz64] - [#8679]) ([usps docs]) ([camera.usps docs]) ([sensor.usps docs]) (breaking change) (new-platform) +- Set password after connecting. Fixes #8983 ([@StevenLooman] - [#9039]) ([media_player.mpd docs]) +- Update iOS sensor (battery icon fix and format updates) ([@schmittx] - [#9032]) +- Adds London_air component ([@robmarkcole] - [#9020]) ([sensor.london_air docs]) (new-platform) +- Update pwmled to 1.2.1. ([@soldag] - [#9040]) ([light.rpi_gpio_pwm docs]) +- Configurable timeout for webostv. ([@soldag] - [#9042]) ([media_player.webostv docs]) +- Update ios.py ([@schmittx] - [#9041]) ([sensor.ios docs]) +- Support Windows in UPNP discovery ([@kabongsteve] - [#8936]) +- Upgrade python-pushover to 0.3 ([@fanaticDavid] - [#9045]) ([notify.pushover docs]) +- Add speeds to fan dropdown in ISY fan component ([@boojew] - [#9004]) ([fan.isy994 docs]) +- Update Fitbit sensor (icons, formatting, client update) ([@schmittx] - [#9031]) ([sensor.fitbit docs]) +- Add Abode home security component ([@arsaboo] - [#9030]) ([abode docs]) ([alarm_control_panel.abode docs]) ([binary_sensor.abode docs]) (new-platform) +- LIFX: avoid rare NoneType errors ([@amelchio] - [#9054]) ([light.lifx docs]) +- Bump dlib face_recognition to 0.2.2 ([@arsaboo] - [#9060]) ([image_processing.dlib_face_detect docs]) ([image_processing.dlib_face_identify docs]) +- Update fitbit.py ([@schmittx] - [#9064]) ([sensor.fitbit docs]) +- Upgrade sendgrid to 5.0.0 ([@fabaff] - [#9062]) ([notify.sendgrid docs]) +- Upgrade slacker to 0.9.60 ([@fabaff] - [#9065]) ([notify.slack docs]) +- Add support for Prowl notifications. ([@mbrrg] - [#9028]) ([notify.prowl docs]) (new-platform) +- Upgrade onkyo-eiscp to 1.2.4 (fixes #8995) ([@fabaff] - [#9068]) ([media_player.onkyo docs]) +- Workday sensor offset ([@LaStrada] - [#8824]) ([binary_sensor.workday docs]) +- eliqonline: channel id is an integer ([@molobrakos] - [#9072]) ([sensor.eliqonline docs]) (breaking change) +- Use builtin constants for Abode alarm_control_panel ([@arsaboo] - [#9059]) ([alarm_control_panel.abode docs]) +- bump python-ecobee-api version to 0.0.8 ([@nkgilley] - [#9074]) ([ecobee docs]) +- Bump abodepy to 0.7.1 ([@arsaboo] - [#9077]) ([abode docs]) +- async_query returns False if connection to server failed, handle this properly ([@molobrakos] - [#9070]) ([media_player.squeezebox docs]) +- Added insteonplm device_override multiple capabilities ([@teharris1] - [#9078]) ([insteon_plm docs]) +- Upgrade uber_rides to 0.5.1 ([@fabaff] - [#9080]) ([sensor.uber docs]) +- Upgrade discord.py to 0.16.10 ([@fabaff] - [#9082]) ([notify.discord docs]) +- Fix `device` attribute in fritz_callmonitor.py (fixes #9055) ([@870074+max-te] - [#9081]) ([sensor.fritzbox_callmonitor docs]) +- Upgrade youtube_dl to 2017.8.18 ([@fabaff] - [#9079]) ([media_extractor docs]) +- Remove dash ([@fabaff] - [#9089]) +- Upgrade credstash to 1.13.3 ([@fabaff] - [#9088]) +- 9043 Fixed error while running dev docker ([@MungoRae] - [#9044]) +- Don't redefine consts ([@fabaff] - [#9086]) ([notify.hipchat docs]) +- Fix octoprint errors when printer is off/disconnected ([@w1ll1am23] - [#8988]) ([octoprint docs]) ([sensor.octoprint docs]) +- Pilight switch: restore last state after restart ([@janLo] - [#8580]) ([switch.pilight docs]) +- Fix netdata system_load and add disk_free. ([@michaelarnauts] - [#9091]) ([sensor.netdata docs]) +- Add worldtidesinfo sensor component ([@aetolus] - [#8860]) ([sensor.worldtidesinfo docs]) (new-platform) +- Support changing the bulb color for tplink smartbulbs, fixes #8766 ([@rytilahti] - [#8780]) ([light.tplink docs]) +- bump snapcast version ([@happyleavesaoc] - [#9100]) ([media_player.snapcast docs]) +- bump fedex version ([@happyleavesaoc] - [#9099]) ([sensor.fedex docs]) +- Yeelight fix updates on hsv mode ([@rytilahti] - [#9093]) ([light.yeelight docs]) +- Catch exceptions ([@fabaff] - [#9085]) ([notify.discord docs]) +- Fix issue 8894 with uk_transport component if no next_buses or next_trains ([@robmarkcole] - [#9046]) ([sensor.uk_transport docs]) +- upgrade Xiaomi Gateway lib to 0.3 ([@danielhiversen] - [#9101]) ([xiaomi docs]) +- pythonegardia package requirement to .18 ([@jeroenterheerdt] - [#9104]) ([alarm_control_panel.egardia docs]) +- Simplisafe unknown status fix ([@lekobob] - [#9111]) ([alarm_control_panel.simplisafe docs]) +- Update flux_led.py ([@danielhiversen] - [#9122]) ([light.flux_led docs]) +- Xiaomi ([@danielhiversen] - [#9126]) ([xiaomi docs]) +- refactor pushbullet ([@danielhiversen] - [#9125]) ([notify.pushbullet docs]) +- optimistic mode for template covers (w/o timed movement) ([@PhracturedBlue] - [#8402]) ([cover.template docs]) +- Use const ([@fabaff] - [#9127]) ([prometheus docs]) +- Refactor mysensors callback and add validation ([@MartinHjelmare] - [#9069]) ([mysensors docs]) ([binary_sensor.mysensors docs]) ([climate.mysensors docs]) ([cover.mysensors docs]) ([device_tracker.mysensors docs]) ([light.mysensors docs]) ([notify.mysensors docs]) ([sensor.mysensors docs]) ([switch.mysensors docs]) (breaking change) + +[#8402]: https://github.com/home-assistant/home-assistant/pull/8402 +[#8580]: https://github.com/home-assistant/home-assistant/pull/8580 +[#8614]: https://github.com/home-assistant/home-assistant/pull/8614 +[#8679]: https://github.com/home-assistant/home-assistant/pull/8679 +[#8780]: https://github.com/home-assistant/home-assistant/pull/8780 +[#8824]: https://github.com/home-assistant/home-assistant/pull/8824 +[#8860]: https://github.com/home-assistant/home-assistant/pull/8860 +[#8897]: https://github.com/home-assistant/home-assistant/pull/8897 +[#8905]: https://github.com/home-assistant/home-assistant/pull/8905 +[#8912]: https://github.com/home-assistant/home-assistant/pull/8912 +[#8918]: https://github.com/home-assistant/home-assistant/pull/8918 +[#8920]: https://github.com/home-assistant/home-assistant/pull/8920 +[#8934]: https://github.com/home-assistant/home-assistant/pull/8934 +[#8936]: https://github.com/home-assistant/home-assistant/pull/8936 +[#8952]: https://github.com/home-assistant/home-assistant/pull/8952 +[#8953]: https://github.com/home-assistant/home-assistant/pull/8953 +[#8957]: https://github.com/home-assistant/home-assistant/pull/8957 +[#8962]: https://github.com/home-assistant/home-assistant/pull/8962 +[#8971]: https://github.com/home-assistant/home-assistant/pull/8971 +[#8981]: https://github.com/home-assistant/home-assistant/pull/8981 +[#8986]: https://github.com/home-assistant/home-assistant/pull/8986 +[#8988]: https://github.com/home-assistant/home-assistant/pull/8988 +[#8989]: https://github.com/home-assistant/home-assistant/pull/8989 +[#8993]: https://github.com/home-assistant/home-assistant/pull/8993 +[#9002]: https://github.com/home-assistant/home-assistant/pull/9002 +[#9004]: https://github.com/home-assistant/home-assistant/pull/9004 +[#9006]: https://github.com/home-assistant/home-assistant/pull/9006 +[#9011]: https://github.com/home-assistant/home-assistant/pull/9011 +[#9014]: https://github.com/home-assistant/home-assistant/pull/9014 +[#9019]: https://github.com/home-assistant/home-assistant/pull/9019 +[#9020]: https://github.com/home-assistant/home-assistant/pull/9020 +[#9024]: https://github.com/home-assistant/home-assistant/pull/9024 +[#9028]: https://github.com/home-assistant/home-assistant/pull/9028 +[#9029]: https://github.com/home-assistant/home-assistant/pull/9029 +[#9030]: https://github.com/home-assistant/home-assistant/pull/9030 +[#9031]: https://github.com/home-assistant/home-assistant/pull/9031 +[#9032]: https://github.com/home-assistant/home-assistant/pull/9032 +[#9035]: https://github.com/home-assistant/home-assistant/pull/9035 +[#9039]: https://github.com/home-assistant/home-assistant/pull/9039 +[#9040]: https://github.com/home-assistant/home-assistant/pull/9040 +[#9041]: https://github.com/home-assistant/home-assistant/pull/9041 +[#9042]: https://github.com/home-assistant/home-assistant/pull/9042 +[#9044]: https://github.com/home-assistant/home-assistant/pull/9044 +[#9045]: https://github.com/home-assistant/home-assistant/pull/9045 +[#9046]: https://github.com/home-assistant/home-assistant/pull/9046 +[#9054]: https://github.com/home-assistant/home-assistant/pull/9054 +[#9059]: https://github.com/home-assistant/home-assistant/pull/9059 +[#9060]: https://github.com/home-assistant/home-assistant/pull/9060 +[#9062]: https://github.com/home-assistant/home-assistant/pull/9062 +[#9064]: https://github.com/home-assistant/home-assistant/pull/9064 +[#9065]: https://github.com/home-assistant/home-assistant/pull/9065 +[#9068]: https://github.com/home-assistant/home-assistant/pull/9068 +[#9069]: https://github.com/home-assistant/home-assistant/pull/9069 +[#9070]: https://github.com/home-assistant/home-assistant/pull/9070 +[#9072]: https://github.com/home-assistant/home-assistant/pull/9072 +[#9074]: https://github.com/home-assistant/home-assistant/pull/9074 +[#9077]: https://github.com/home-assistant/home-assistant/pull/9077 +[#9078]: https://github.com/home-assistant/home-assistant/pull/9078 +[#9079]: https://github.com/home-assistant/home-assistant/pull/9079 +[#9080]: https://github.com/home-assistant/home-assistant/pull/9080 +[#9081]: https://github.com/home-assistant/home-assistant/pull/9081 +[#9082]: https://github.com/home-assistant/home-assistant/pull/9082 +[#9085]: https://github.com/home-assistant/home-assistant/pull/9085 +[#9086]: https://github.com/home-assistant/home-assistant/pull/9086 +[#9088]: https://github.com/home-assistant/home-assistant/pull/9088 +[#9089]: https://github.com/home-assistant/home-assistant/pull/9089 +[#9091]: https://github.com/home-assistant/home-assistant/pull/9091 +[#9093]: https://github.com/home-assistant/home-assistant/pull/9093 +[#9099]: https://github.com/home-assistant/home-assistant/pull/9099 +[#9100]: https://github.com/home-assistant/home-assistant/pull/9100 +[#9101]: https://github.com/home-assistant/home-assistant/pull/9101 +[#9104]: https://github.com/home-assistant/home-assistant/pull/9104 +[#9111]: https://github.com/home-assistant/home-assistant/pull/9111 +[#9122]: https://github.com/home-assistant/home-assistant/pull/9122 +[#9125]: https://github.com/home-assistant/home-assistant/pull/9125 +[#9126]: https://github.com/home-assistant/home-assistant/pull/9126 +[#9127]: https://github.com/home-assistant/home-assistant/pull/9127 +[@870074+max-te]: https://github.com/870074+max-te +[@BioSehnsucht]: https://github.com/BioSehnsucht +[@Cinntax]: https://github.com/Cinntax +[@LaStrada]: https://github.com/LaStrada +[@MartinHjelmare]: https://github.com/MartinHjelmare +[@MungoRae]: https://github.com/MungoRae +[@PhracturedBlue]: https://github.com/PhracturedBlue +[@StevenLooman]: https://github.com/StevenLooman +[@Tommatheussen]: https://github.com/Tommatheussen +[@aetolus]: https://github.com/aetolus +[@amelchio]: https://github.com/amelchio +[@armills]: https://github.com/armills +[@arsaboo]: https://github.com/arsaboo +[@bachya]: https://github.com/bachya +[@balloob]: https://github.com/balloob +[@boojew]: https://github.com/boojew +[@celeroll]: https://github.com/celeroll +[@danielhiversen]: https://github.com/danielhiversen +[@danieljkemp]: https://github.com/danieljkemp +[@fabaff]: https://github.com/fabaff +[@fanaticDavid]: https://github.com/fanaticDavid +[@groth-its]: https://github.com/groth-its +[@happyleavesaoc]: https://github.com/happyleavesaoc +[@iamjackg]: https://github.com/iamjackg +[@janLo]: https://github.com/janLo +[@jeroenterheerdt]: https://github.com/jeroenterheerdt +[@kabongsteve]: https://github.com/kabongsteve +[@karlkar]: https://github.com/karlkar +[@lekobob]: https://github.com/lekobob +[@mbrrg]: https://github.com/mbrrg +[@mezz64]: https://github.com/mezz64 +[@michaelarnauts]: https://github.com/michaelarnauts +[@michaelhertig]: https://github.com/michaelhertig +[@mjj4791]: https://github.com/mjj4791 +[@molobrakos]: https://github.com/molobrakos +[@nkgilley]: https://github.com/nkgilley +[@pschmitt]: https://github.com/pschmitt +[@pvizeli]: https://github.com/pvizeli +[@robmarkcole]: https://github.com/robmarkcole +[@rytilahti]: https://github.com/rytilahti +[@schmittx]: https://github.com/schmittx +[@soldag]: https://github.com/soldag +[@syssi]: https://github.com/syssi +[@teharris1]: https://github.com/teharris1 +[@timstanley1985]: https://github.com/timstanley1985 +[@tlyakhov]: https://github.com/tlyakhov +[@w1ll1am23]: https://github.com/w1ll1am23 +[abode docs]: https://home-assistant.io/components/abode/ +[alarm_control_panel docs]: https://home-assistant.io/components/alarm_control_panel/ +[alarm_control_panel.abode docs]: https://home-assistant.io/components/alarm_control_panel.abode/ +[alarm_control_panel.egardia docs]: https://home-assistant.io/components/alarm_control_panel.egardia/ +[alarm_control_panel.simplisafe docs]: https://home-assistant.io/components/alarm_control_panel.simplisafe/ +[alarm_control_panel.totalconnect docs]: https://home-assistant.io/components/alarm_control_panel.totalconnect/ +[binary_sensor.abode docs]: https://home-assistant.io/components/binary_sensor.abode/ +[binary_sensor.mysensors docs]: https://home-assistant.io/components/binary_sensor.mysensors/ +[binary_sensor.workday docs]: https://home-assistant.io/components/binary_sensor.workday/ +[camera.usps docs]: https://home-assistant.io/components/camera.usps/ +[climate.mysensors docs]: https://home-assistant.io/components/climate.mysensors/ +[config docs]: https://home-assistant.io/components/config/ +[configurator docs]: https://home-assistant.io/components/configurator/ +[cover.mysensors docs]: https://home-assistant.io/components/cover.mysensors/ +[cover.template docs]: https://home-assistant.io/components/cover.template/ +[device_tracker.automatic docs]: https://home-assistant.io/components/device_tracker.automatic/ +[device_tracker.mysensors docs]: https://home-assistant.io/components/device_tracker.mysensors/ +[ecobee docs]: https://home-assistant.io/components/ecobee/ +[emulated_hue.upnp docs]: https://home-assistant.io/components/emulated_hue.upnp/ +[envisalink docs]: https://home-assistant.io/components/envisalink/ +[fan.isy994 docs]: https://home-assistant.io/components/fan.isy994/ +[image_processing.dlib_face_detect docs]: https://home-assistant.io/components/image_processing.dlib_face_detect/ +[image_processing.dlib_face_identify docs]: https://home-assistant.io/components/image_processing.dlib_face_identify/ +[insteon_plm docs]: https://home-assistant.io/components/insteon_plm/ +[light.decora_wifi docs]: https://home-assistant.io/components/light.decora_wifi/ +[light.flux_led docs]: https://home-assistant.io/components/light.flux_led/ +[light.hue docs]: https://home-assistant.io/components/light.hue/ +[light.lifx docs]: https://home-assistant.io/components/light.lifx/ +[light.mysensors docs]: https://home-assistant.io/components/light.mysensors/ +[light.rpi_gpio_pwm docs]: https://home-assistant.io/components/light.rpi_gpio_pwm/ +[light.tplink docs]: https://home-assistant.io/components/light.tplink/ +[light.yeelight docs]: https://home-assistant.io/components/light.yeelight/ +[lock.nello docs]: https://home-assistant.io/components/lock.nello/ +[media_extractor docs]: https://home-assistant.io/components/media_extractor/ +[media_player.mpd docs]: https://home-assistant.io/components/media_player.mpd/ +[media_player.onkyo docs]: https://home-assistant.io/components/media_player.onkyo/ +[media_player.snapcast docs]: https://home-assistant.io/components/media_player.snapcast/ +[media_player.spotify docs]: https://home-assistant.io/components/media_player.spotify/ +[media_player.squeezebox docs]: https://home-assistant.io/components/media_player.squeezebox/ +[media_player.webostv docs]: https://home-assistant.io/components/media_player.webostv/ +[mysensors docs]: https://home-assistant.io/components/mysensors/ +[notify.discord docs]: https://home-assistant.io/components/notify.discord/ +[notify.hipchat docs]: https://home-assistant.io/components/notify.hipchat/ +[notify.mysensors docs]: https://home-assistant.io/components/notify.mysensors/ +[notify.prowl docs]: https://home-assistant.io/components/notify.prowl/ +[notify.pushbullet docs]: https://home-assistant.io/components/notify.pushbullet/ +[notify.pushover docs]: https://home-assistant.io/components/notify.pushover/ +[notify.sendgrid docs]: https://home-assistant.io/components/notify.sendgrid/ +[notify.slack docs]: https://home-assistant.io/components/notify.slack/ +[octoprint docs]: https://home-assistant.io/components/octoprint/ +[prometheus docs]: https://home-assistant.io/components/prometheus/ +[script docs]: https://home-assistant.io/components/script/ +[sensor.buienradar docs]: https://home-assistant.io/components/sensor.buienradar/ +[sensor.cert_expiry docs]: https://home-assistant.io/components/sensor.cert_expiry/ +[sensor.eliqonline docs]: https://home-assistant.io/components/sensor.eliqonline/ +[sensor.fedex docs]: https://home-assistant.io/components/sensor.fedex/ +[sensor.fitbit docs]: https://home-assistant.io/components/sensor.fitbit/ +[sensor.fritzbox_callmonitor docs]: https://home-assistant.io/components/sensor.fritzbox_callmonitor/ +[sensor.geizhals docs]: https://home-assistant.io/components/sensor.geizhals/ +[sensor.ios docs]: https://home-assistant.io/components/sensor.ios/ +[sensor.london_air docs]: https://home-assistant.io/components/sensor.london_air/ +[sensor.mysensors docs]: https://home-assistant.io/components/sensor.mysensors/ +[sensor.netdata docs]: https://home-assistant.io/components/sensor.netdata/ +[sensor.octoprint docs]: https://home-assistant.io/components/sensor.octoprint/ +[sensor.snmp docs]: https://home-assistant.io/components/sensor.snmp/ +[sensor.swiss_public_transport docs]: https://home-assistant.io/components/sensor.swiss_public_transport/ +[sensor.uber docs]: https://home-assistant.io/components/sensor.uber/ +[sensor.uk_transport docs]: https://home-assistant.io/components/sensor.uk_transport/ +[sensor.usps docs]: https://home-assistant.io/components/sensor.usps/ +[sensor.version docs]: https://home-assistant.io/components/sensor.version/ +[sensor.worldtidesinfo docs]: https://home-assistant.io/components/sensor.worldtidesinfo/ +[switch.mqtt docs]: https://home-assistant.io/components/switch.mqtt/ +[switch.mysensors docs]: https://home-assistant.io/components/switch.mysensors/ +[switch.pilight docs]: https://home-assistant.io/components/switch.pilight/ +[switch.rainmachine docs]: https://home-assistant.io/components/switch.rainmachine/ +[switch.xiaomi docs]: https://home-assistant.io/components/switch.xiaomi/ +[usps docs]: https://home-assistant.io/components/usps/ +[weather.buienradar docs]: https://home-assistant.io/components/weather.buienradar/ +[xiaomi docs]: https://home-assistant.io/components/xiaomi/ +[forum]: https://community.home-assistant.io/ +[issue]: https://github.com/home-assistant/home-assistant/issues +[discord]: https://discord.gg/c5DvZ4e diff --git a/source/images/blog/2017-08-0.52/components.png b/source/images/blog/2017-08-0.52/components.png new file mode 100644 index 0000000000000000000000000000000000000000..14225ee5feee2200a59f96723613aea5cd308497 GIT binary patch literal 26431 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 literal 0 HcmV?d00001