From 0120a99456dcadaee281a946254674872c48593f Mon Sep 17 00:00:00 2001
From: PuckStar
Date: Fri, 16 Jun 2017 07:32:31 +0200
Subject: [PATCH 01/11] Create notify.group.markdown (#2822)
---
source/_components/notify.group.markdown | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/source/_components/notify.group.markdown b/source/_components/notify.group.markdown
index f46936ac059..e68b76112e5 100644
--- a/source/_components/notify.group.markdown
+++ b/source/_components/notify.group.markdown
@@ -32,5 +32,5 @@ Configuration variables:
- **name** (*Required*): Setting the parameter `name` sets the name of the group.
- **services** (*Required*): A list of all the services to be included in the group.
- - **service** (*Required*): The service part of an entity ID, i.e. if you use `notify.html5` normally, just put `html5`.
+ - **service** (*Required*): The service part of an entity ID, i.e. if you use `notify.html5` normally, just put `html5`. Note that you must put everything in lower case here. Although you might have capitals written in the actual notification services!
- **data** (*Optional*): A dictionary containing parameters to add to all notify payloads. This can be anything that is valid to use in a payload, such as `data`, `message`, `target`, `title`.
From 1c904e63b1b32699d67f4f2c6778a1d4a6fcaaa8 Mon Sep 17 00:00:00 2001
From: Anders Melchiorsen
Date: Fri, 16 Jun 2017 07:34:15 +0200
Subject: [PATCH 02/11] Update light.turn_on to match current schema (#2756)
---
source/_components/light.markdown | 7 ++++---
1 file changed, 4 insertions(+), 3 deletions(-)
diff --git a/source/_components/light.markdown b/source/_components/light.markdown
index 688cb0732f8..43706748906 100644
--- a/source/_components/light.markdown
+++ b/source/_components/light.markdown
@@ -24,11 +24,12 @@ Most lights do not support all attributes. You can check the platform documentat
| Service data attribute | Optional | Description |
| ---------------------- | -------- | ----------- |
| `entity_id` | no | String or list of strings that point at `entity_id`s of lights. Else targets all.
-| `transition` | yes | Integer that represents the time the light should take to transition to the new state in seconds.
-| `profile` | yes | String with the name of one of the [built-in profiles](https://github.com/home-assistant/home-assistant/blob/master/homeassistant/components/light/light_profiles.csv) (relax, energize, concentrate, reading) or one of the custom profiles defined in `light_profiles.csv` in the current working directory. Light profiles define a xy color and a brightness. If a profile is given and a brightness or xy color then the profile values will be overwritten.
+| `transition` | yes | Number that represents the time (in seconds) the light should take to transition to the new state.
+| `profile` | yes | String with the name of one of the [built-in profiles](https://github.com/home-assistant/home-assistant/blob/master/homeassistant/components/light/light_profiles.csv) (relax, energize, concentrate, reading) or one of the custom profiles defined in `light_profiles.csv` in the current working directory. Light profiles define a xy color and a brightness. If a profile is given and a brightness then the profile brightness will be overwritten.
| `xy_color` | yes | A list containing two floats representing the xy color you want the light to be. Two comma separated floats that represent the color in XY.
| `rgb_color` | yes | A list containing three integers representing the rgb color you want the light to be. Three comma separated integers that represent the color in RGB. You can find a great chart here: [Hue Color Chart](http://www.developers.meethue.com/documentation/hue-xy-values)
-| `color_temp` | yes | An INT in mireds representing the color temperature you want the light to be.
+| `white_value` | yes | Integer between 0 and 255 for how bright a dedicated white LED should be.
+| `color_temp` | yes | An integer in mireds representing the color temperature you want the light to be.
| `kelvin` | yes | Alternatively, you can specify the color temperature in Kelvin.
| `color_name` | yes | A human readable string of a color name, such as `blue` or `goldenrod`. All [CSS3 color names](https://www.w3.org/TR/2010/PR-css3-color-20101028/#svg-color) are supported.
| `brightness` | yes | Integer between 0 and 255 for how bright the color should be.
From ea3a1d428e4371012edf9e961204be086f80ed21 Mon Sep 17 00:00:00 2001
From: Paulus Schoutsen
Date: Thu, 15 Jun 2017 22:55:24 -0700
Subject: [PATCH 03/11] Version bump to 0.47
---
_config.yml | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/_config.yml b/_config.yml
index c6dbb537997..d0cf0b4ca15 100644
--- a/_config.yml
+++ b/_config.yml
@@ -140,13 +140,13 @@ social:
# Home Assistant release details
current_major_version: 0
-current_minor_version: 46
-current_patch_version: 1
-date_released: 2017-06-09
+current_minor_version: 47
+current_patch_version: 0
+date_released: 2017-06-17
# Either # or the anchor link to latest release notes in the blog post.
# Must be prefixed with a # and have double quotes around it.
# Major release:
-patch_version_notes: "#release-0461---june-9"
+patch_version_notes: "#"
# Minor release (Example #release-0431---april-25):
From 52f2dda8645716e9cb80e30b92ee0d9976bcbc75 Mon Sep 17 00:00:00 2001
From: Paulus Schoutsen
Date: Thu, 15 Jun 2017 23:17:28 -0700
Subject: [PATCH 04/11] Update updater docs
---
source/_docs/backend/updater.markdown | 9 ++++++++-
1 file changed, 8 insertions(+), 1 deletion(-)
diff --git a/source/_docs/backend/updater.markdown b/source/_docs/backend/updater.markdown
index dcdb3cb5433..8551fff955e 100644
--- a/source/_docs/backend/updater.markdown
+++ b/source/_docs/backend/updater.markdown
@@ -12,6 +12,13 @@ redirect_from: /details/updater/
Starting with 0.31 the [updater component](/components/updater/) sends an optional report about Home Assistant instance.
+If you want to opt-in to include component information, add `include_used_components` to your config. This will allow the Home Assistant developers to focus development efforts on the most popular components.
+
+```yaml
+updater:
+ include_used_components: true
+```
+
We are only collecting this information to better understand our user base to provide better long term support and feature development.
| Name | Description | Example | Data Source |
@@ -49,4 +56,4 @@ The server also adds two timestamps to the data:
- the original date your instance UUID was first seen
- the timestamp of the last time we have seen your instance
-There are currently no plans to publicly expose any of this information. If we did do such a thing in the future we would of course notify you in advance. It must also be stated that we will never sell or allow the use of this information for non-Home Assistant purposes.
+We will never publicly expose individual gathered data. We might however publish aggregated stats about our user base (example: 70% of all users use Linux). We will never sell or allow the use of this information for non-Home Assistant development purposes.
From 1c3d34e8ba59605fede0a47dec0783f57b9fec76 Mon Sep 17 00:00:00 2001
From: cribbstechnologies
Date: Fri, 16 Jun 2017 12:13:57 -0400
Subject: [PATCH 05/11] updating docs to be inline with deployed code (#2826)
---
source/_components/cover.mqtt.markdown | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/source/_components/cover.mqtt.markdown b/source/_components/cover.mqtt.markdown
index 665308a995d..d8d3180d874 100755
--- a/source/_components/cover.mqtt.markdown
+++ b/source/_components/cover.mqtt.markdown
@@ -37,7 +37,7 @@ Configuration variables:
- **name** (*Optional*): The name of the sensor. Default is `MQTT Cover`.
- **state_topic** (*Optional*): The MQTT topic subscribed to receive sensor values.
-- **command_topic** (*Required*): The MQTT topic to publish commands to control the rollershutter.
+- **command_topic** (*Optional*): The MQTT topic to publish commands to control the rollershutter.
- **payload_open** (*Optional*): The payload that opens the cover. Default is `OPEN`.
- **payload_close** (*Optional*): The payload that closes the cover. Default is `CLOSE`.
- **payload_stop** (*Optional*): The payload that stops the rollershutter. default is `STOP`.
From 69cc05d74026abb87b0835e25126cf13b7de9cb1 Mon Sep 17 00:00:00 2001
From: Adam Mills
Date: Fri, 16 Jun 2017 13:29:35 -0400
Subject: [PATCH 06/11] Blog post for new zwave entity ids (#2816)
---
.../2017-06-15-zwave-entity-ids.markdown | 22 +++++++++++++++++++
1 file changed, 22 insertions(+)
create mode 100644 source/_posts/2017-06-15-zwave-entity-ids.markdown
diff --git a/source/_posts/2017-06-15-zwave-entity-ids.markdown b/source/_posts/2017-06-15-zwave-entity-ids.markdown
new file mode 100644
index 00000000000..48bb3a80df1
--- /dev/null
+++ b/source/_posts/2017-06-15-zwave-entity-ids.markdown
@@ -0,0 +1,22 @@
+---
+layout: post
+title: "ZWave Entity IDs"
+description: "Information on the past and future of ZWave Entity IDs."
+date: 2017-06-15 08:00:00 -0400
+date_formatted: "June 15, 2017"
+author: Adam Mills
+comments: true
+categories: Technology
+---
+
+ZWave entity_ids have long been a source of frustration in Home Assistant. The first problem we faced was that depending on the order of node discovery, entity_ids could be discovered with different names on each run. To solve this we added the node id as a suffix to the entity_id. This ensured that entity_ids were generated deterministically on each run, but additional suffixes had to be added to handle edge cases where there would otherwise be a conflict. The resulting entity_ids worked, but have been difficult to work with and makes ZWave a strange exception among other Home Assistant components.
+
+Thanks to the awesome work of [@turbokongen], a growing number of ZWave configuration options are now available from the new ZWave panel in the Home Assistant frontend. Among these new features is support for renaming of ZWave nodes and their underlying values. (These renames are persisted in zwcfg_*.xml) This is important, because these items are combined to form the Home Assistant entity name, which is used to generate the entity_id. Now that these options are available, ZWave users can rename nodes and values, influencing the entity_ids that are generated by Home Assistant.
+
+Now that users are able to control these names, we will be making changes to how the entity_ids are generated for ZWave entities. The ZWave entity_ids are going to switch back to using the standard entity_id generation from Home Assistant core, based on the entity names. Moving forward, if there is a conflict when generating entity_ids, a suffix will be added, and it will be the responsibility of the user to rename their nodes and values to avoid the conflict. This is the same as any other platform in Home Assistant where two devices are discovered with the same name.
+
+With the release of 0.47, this feature will be opt-in. Setting `new_entity_ids: true` under `zwave:` in your configuration.yaml will enable the new generation. After 0.48 this feature will become opt-out. From 0.48 onward, unless you’ve declared `new_entity_ids: false` you will switch to the new entity_id generation. At an undecided point in the future, the old entity_id generation will be removed completely.
+
+I’m sure all ZWave users understand that the current entity_ids aren’t easy to use. They’re annoying to type in configuration.yaml, and break if a node needs to be re-included to the network. We know that breaking changes are painful, and so we’re doing what we can to roll this change out as smoothly as possible. The end result should be a dramatic simplification of most ZWave configurations. We hope that this change will ultimately make ZWave much easier to work with, and bring ZWave configuration just a little closer to the rest of the Home Assistant platforms.
+
+[@turbokongen]: https://github.com/turbokongen
From 05c9e5f7049c0b9d6d931616711e34d1dc1596e1 Mon Sep 17 00:00:00 2001
From: vrs01
Date: Fri, 16 Jun 2017 20:35:24 +0200
Subject: [PATCH 07/11] Update binary_sensor.template.markdown (#2825)
---
source/_components/binary_sensor.template.markdown | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/source/_components/binary_sensor.template.markdown b/source/_components/binary_sensor.template.markdown
index 39ea85e7d22..ba69ae5c77f 100644
--- a/source/_components/binary_sensor.template.markdown
+++ b/source/_components/binary_sensor.template.markdown
@@ -47,7 +47,7 @@ sensor:
sensors:
furnace_on:
value_template: {% raw %}{{ states.sensor.furnace.state > 2.5 }}{% endraw %}
- friendly_name: 'Furnace Running
+ friendly_name: 'Furnace Running'
device_class: heat
```
From f84dc25792cc1de0dfe31883a42c14743dbadfda Mon Sep 17 00:00:00 2001
From: Hamid
Date: Fri, 16 Jun 2017 22:47:24 +0100
Subject: [PATCH 08/11] Add network_key configuration (#2828)
* Add network_key configuration
Network key can be set here rather than in the (difficult to find) configuration `options.xml`. It takes the same comma separated "0xNN" string syntax as previous.
* Cleanup unneeded section
Removed the options.xml information that is on longer required as per comments from @dale3h
---
source/_docs/z-wave.markdown | 15 ++-------------
1 file changed, 2 insertions(+), 13 deletions(-)
diff --git a/source/_docs/z-wave.markdown b/source/_docs/z-wave.markdown
index cd2e9fdd74b..5b38ea21e68 100644
--- a/source/_docs/z-wave.markdown
+++ b/source/_docs/z-wave.markdown
@@ -35,6 +35,7 @@ zwave:
Configuration variables:
- **usb_path** (*Optional*): The port where your device is connected to your Home Assistant host.
+- **network_key** (*Optional*): The 16 byte network key in the form `"0x01,0x02..."` used in order to connect securely to compatible devices.
- **config_path** (*Optional*): The path to the Python OpenZWave configuration files. Defaults to the 'config' that is installed by python-openzwave
- **autoheal** (*Optional*): Allows disabling auto Z-Wave heal at midnight. Defaults to True.
- **polling_interval** (*Optional*): The time period in milliseconds between polls of a nodes value. Be careful about using polling values below 30000 (30 seconds) as polling can flood the zwave network and cause problems.
@@ -88,19 +89,7 @@ To add a Z-Wave device to your system, go to the Services menu and select the `z
### {% linkable_title Adding Security Devices %}
-Security Z-Wave devices require a network key before being added to the network using the `zwave.add_node_secure` service. You must edit the `options.xml` file, located in your `python-openzwave config_path` to use a network key before adding these devices.
-
-Edit your `options.xml` file:
-
-```bash
-
-```
-Uncomment the line:
-```bash
-
-```
-
-You can replace these values with your own 16 byte network key. For more information on this process see the [OpenZwave](https://github.com/OpenZWave/open-zwave) wiki article [Adding Security Devices to OZW](https://github.com/OpenZWave/open-zwave/wiki/Adding-Security-Devices-to-OZW)
+Security Z-Wave devices require a network key before being added to the network using the `zwave.add_node_secure` service. You must set the *network_key* configuration variable to use a network key before adding these devices.
An easy script to generate a random key:
```bash
From 387df7b4542ccd0d0aa96601b735a260fcca2e38 Mon Sep 17 00:00:00 2001
From: Pascal Vizeli
Date: Sat, 17 Jun 2017 10:08:27 +0200
Subject: [PATCH 09/11] New base image
---
source/hassio/addon_testing.markdown | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/source/hassio/addon_testing.markdown b/source/hassio/addon_testing.markdown
index 101c98107a3..e7162741d8b 100644
--- a/source/hassio/addon_testing.markdown
+++ b/source/hassio/addon_testing.markdown
@@ -17,10 +17,10 @@ Right now add-ons will work with images that are stored on Docker Hub (using `im
You can build an try the addon on your developer machine also. Move all addon stuff into a temp folder. Replace in the Dockerfile `%%BASE_IMAGE%%` with:
-- armhf: `resin/armhf-alpine:3.5`
-- aarch64: `resin/aarch64-alpine:3.5`
-- amd64: `resin/amd64-alpine:3.5`
-- i386: `resin/i386-alpine:3.5`
+- armhf: `homeassistant/armhf-base:latest`
+- aarch64: `homeassistant/aarch64-base:latest`
+- amd64: `homeassistant/amd64-base:latest`
+- i386: `homeassistant/i386-base:latest`
Add also a `LABEL io.hass.version="xy"` into your dockerfile.
Use `docker` to build the test addon: `docker build -t local/my-test-addon .`
From dbcca71c27edf6637fe773772e3d83e74beb7fa5 Mon Sep 17 00:00:00 2001
From: Fabian Affolter
Date: Sat, 17 Jun 2017 10:39:43 +0200
Subject: [PATCH 10/11] Fix typo and update description
---
source/_components/dweet.markdown | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/source/_components/dweet.markdown b/source/_components/dweet.markdown
index ae2fabf2376..5acb5647dcb 100644
--- a/source/_components/dweet.markdown
+++ b/source/_components/dweet.markdown
@@ -1,7 +1,7 @@
---
layout: page
title: "Dweet.io"
-description: "Record events in InfluxDB."
+description: "Transfer events to Dweet.io."
date: 2016-05-07 07:08
sidebar: true
comments: false
@@ -24,7 +24,7 @@ The `dweet` component makes it possible to transfer details collected with Home
The publishing interval is limited to 1 second. This means that it's possible to miss fast changes.
-To use the `deweet` component in your installation, add the following to your `configuration.yaml` file:
+To use the `dweet` component in your installation, add the following to your `configuration.yaml` file:
```yaml
# Example configuration.yaml entry
From 8fc3193a39bb3b686811414af90d39b7f363affb Mon Sep 17 00:00:00 2001
From: Paulus Schoutsen
Date: Sat, 17 Jun 2017 12:09:03 -0700
Subject: [PATCH 11/11] Release 0.47
---
source/_components/mailgun.markdown | 35 ++
source/_components/notify.mailgun.markdown | 32 +-
source/_components/python_script.markdown | 11 +-
source/_components/sensor.ecobee.markdown | 16 +
...arkdown => sensor.mold_indicator.markdown} | 0
.../2017-05-06-zigbee-opencv-dlib.markdown | 2 +-
...automation-editor-zwave-panel-ocr.markdown | 2 +-
source/_posts/2017-06-04-release-46.markdown | 2 +-
source/_posts/2017-06-17-release-47.markdown | 522 ++++++++++++++++++
.../images/blog/2017-06-0.47/components.png | Bin 0 -> 116392 bytes
source/images/supported_brands/onvif.png | Bin 0 -> 27704 bytes
11 files changed, 597 insertions(+), 25 deletions(-)
create mode 100644 source/_components/mailgun.markdown
create mode 100644 source/_components/sensor.ecobee.markdown
rename source/_components/{sensor.moldindicator.markdown => sensor.mold_indicator.markdown} (100%)
create mode 100644 source/_posts/2017-06-17-release-47.markdown
create mode 100644 source/images/blog/2017-06-0.47/components.png
create mode 100644 source/images/supported_brands/onvif.png
diff --git a/source/_components/mailgun.markdown b/source/_components/mailgun.markdown
new file mode 100644
index 00000000000..835464dfd06
--- /dev/null
+++ b/source/_components/mailgun.markdown
@@ -0,0 +1,35 @@
+---
+layout: page
+title: "Mailgun"
+description: "Instructions how to add Mailgun mail notifications to Home Assistant."
+date: 2017-02-06 16:52
+sidebar: true
+comments: false
+sharing: true
+footer: true
+logo: mailgun.png
+ha_category: Notifications
+ha_release: 0.38
+---
+
+The component supports push messages and generates events based on inbound data. To use, add a Route set to Store and Notify with a URL of the following form: `https:///api/mailgun?api_password=`
+
+To send messages, use the [Mailgun notify platform][notify].
+
+[notify]: /components/notify.mailgun/
+
+## {% linkable_title Sample configuration %}
+
+```yaml
+# Example configuration.yaml entry
+mailgun:
+ domain: mg.example.com
+ api_key: token-XXXXXXXXX
+ sandbox: False
+```
+
+Configuration variables:
+
+- **domain** (*Optional*): This is the domain name to be used when sending out mail. Defaults to the first custom domain you have set up.
+- **sandbox** (*Optional*): Whether to use the sandboxed domain for outgoing mail. The `domain` item takes precedence over this. Defaults to `False`.
+- **api_key** (*Required*): This is the API token that has been generated in your Mailgun account.
diff --git a/source/_components/notify.mailgun.markdown b/source/_components/notify.mailgun.markdown
index 52f69b5251e..be571eb2c14 100644
--- a/source/_components/notify.mailgun.markdown
+++ b/source/_components/notify.mailgun.markdown
@@ -1,6 +1,6 @@
---
layout: page
-title: "Mailgun"
+title: "Mailgun Notify"
description: "Instructions how to add Mailgun mail notifications to Home Assistant."
date: 2017-02-06 16:52
sidebar: true
@@ -12,18 +12,23 @@ ha_category: Notifications
ha_release: 0.38
---
-The Mailgun notification service allows you to send emails via Mailgun's REST API.
+The Mailgun notification service allows you to send emails via Mailgun's REST API. It requires the [Mailgun component] to be set up.
+
+[Mailgun component]: /components/mailgun/
## {% linkable_title Sample configuration %}
```yaml
# Example configuration.yaml entry
+mailgun:
+ domain: mg.example.com
+ api_key: token-XXXXXXXXX
+ sandbox: False
+
notify:
- - name: NOTIFIER_NAME
+ - name: mailgun
platform: mailgun
- domain: YOUR_MAILGUN_DOMAIN
- token: TOKEN
- recipient: RECIPIENT_EMAIL
+ recipient: me@example.com
```
Configuration variables:
@@ -34,21 +39,6 @@ Configuration variables:
- **recipient** (*Required*): The email address of the recipient.
- **sender** (*Optional*): The sender's email address. Defaults to `hass@DOMAIN`, where `DOMAIN` is outgoint mail domain, as defined by the `domain` and `sanbox` configuration entries.
-## {% linkable_title Full configuration %}
-
-A full configuration example for the Mailgun notifier system can look like this:
-
-```yaml
-# Example configuration.yaml entry
-notify:
- - name: mailgun
- platform: mailgun
- domain: mg.example.com
- sanbox: False
- token: 'token-XXXXXXXXX'
- recipient: me@example.com
-```
-
## {% linkable_title Example automation %}
The following automation reacts to an event by sending out an email with two attachments.
diff --git a/source/_components/python_script.markdown b/source/_components/python_script.markdown
index 4f950cbb7e0..ddb26a0e7e8 100644
--- a/source/_components/python_script.markdown
+++ b/source/_components/python_script.markdown
@@ -12,7 +12,16 @@ ha_category: Automation
ha_release: 0.47
---
-This component allows you to write Python scripts that are exposed as services in Home Assistant. Each Python file created in the `/python_scripts/` folder will be exposed as a service. The content is not cached so you can easily develop: edit file, save changes, call service. The scripts are run in a sandboxed environment with access to the `hass` object, the service call data as `data` and a logger as `logger`.
+This component allows you to write Python scripts that are exposed as services in Home Assistant. Each Python file created in the `/python_scripts/` folder will be exposed as a service. The content is not cached so you can easily develop: edit file, save changes, call service. The scripts are run in a sandboxed environment. The following variables are available in the sandbox:
+
+| Name | Description |
+| ---- | ----------- |
+| `hass` | The Home Assistant object. Access is only allowed to call services, set/remove states and fire events. [API reference][hass-api]
+| `data` | The data passed to the Python Script service call.
+| `logger` | A logger to allow you to log messages: `logger.info()`, `logger.warning()`, `logger.error()`. [API reference][logger-api]
+
+[hass-api]: https://home-assistant.io/developers/development_hass_object/
+[logger-api]: https://docs.python.org/3.4/library/logging.html#logger-objects
## {% linkable_title Writing your first script %}
diff --git a/source/_components/sensor.ecobee.markdown b/source/_components/sensor.ecobee.markdown
new file mode 100644
index 00000000000..0ae2be049bc
--- /dev/null
+++ b/source/_components/sensor.ecobee.markdown
@@ -0,0 +1,16 @@
+---
+layout: page
+title: "Ecobee Sensor"
+description: "Instructions how to setup the Ecobee sensors within Home Assistant."
+date: 2015-11-30 18:00
+sidebar: true
+comments: false
+sharing: true
+footer: true
+logo: ecobee.png
+ha_category: Binary Sensor
+ha_release: 0.9
+ha_iot_class: "Local Push"
+---
+
+To get your Ecobee sensors working with Home Assistant, follow the instructions for the general [Ecobee component](/components/ecobee/).
diff --git a/source/_components/sensor.moldindicator.markdown b/source/_components/sensor.mold_indicator.markdown
similarity index 100%
rename from source/_components/sensor.moldindicator.markdown
rename to source/_components/sensor.mold_indicator.markdown
diff --git a/source/_posts/2017-05-06-zigbee-opencv-dlib.markdown b/source/_posts/2017-05-06-zigbee-opencv-dlib.markdown
index 2f4d7538de2..2276443b8ae 100644
--- a/source/_posts/2017-05-06-zigbee-opencv-dlib.markdown
+++ b/source/_posts/2017-05-06-zigbee-opencv-dlib.markdown
@@ -11,7 +11,7 @@ categories: Release-Notes
og_image: /images/blog/2017-05-0.44/components.png
---
-
+
This release brings some great new integrations. The biggest one is the [native ZigBee integration][zha docs] by [Russell Cloran][@rcloran]. This will allow Home Assistant to natively control Philips Hue lights without the need for a hub! (IKEA Tradfri lights not yet due to implementing a different profile)
diff --git a/source/_posts/2017-05-20-automation-editor-zwave-panel-ocr.markdown b/source/_posts/2017-05-20-automation-editor-zwave-panel-ocr.markdown
index 8102a4451dd..6416d9d9cc1 100644
--- a/source/_posts/2017-05-20-automation-editor-zwave-panel-ocr.markdown
+++ b/source/_posts/2017-05-20-automation-editor-zwave-panel-ocr.markdown
@@ -11,7 +11,7 @@ categories: Release-Notes
og_image: /images/blog/2017-05-0.45/components.png
---
-
+
Welcome to another great release of Home Assistant! While some of contributors and users are gathering at PyCon US 2017, we still managed to get a great release together!
diff --git a/source/_posts/2017-06-04-release-46.markdown b/source/_posts/2017-06-04-release-46.markdown
index f35433957d3..d800401404d 100644
--- a/source/_posts/2017-06-04-release-46.markdown
+++ b/source/_posts/2017-06-04-release-46.markdown
@@ -11,7 +11,7 @@ categories: Release-Notes
og_image: /images/blog/2017-06-0.46/components.png
---
-
+
It's time for 0.46! This release does not have too many new integrations, instead it focussed on bug fixes.
diff --git a/source/_posts/2017-06-17-release-47.markdown b/source/_posts/2017-06-17-release-47.markdown
new file mode 100644
index 00000000000..8253e92ea8b
--- /dev/null
+++ b/source/_posts/2017-06-17-release-47.markdown
@@ -0,0 +1,522 @@
+---
+layout: post
+title: "0.47: Python Scripts, Sesame Smart Lock, Gitter, Onvif cameras"
+description: "Use Python to script Hass and enjoy a ton of new integrations. We now passed the 700 integrations!"
+date: 2017-06-17 01:04:05 +0000
+date_formatted: "June 17, 2017"
+author: Paulus Schoutsen
+author_twitter: balloob
+comments: true
+categories: Release-Notes
+og_image: /images/blog/2017-06-0.47/components.png
+---
+
+
+
+In this release a ton of new stuff! And who doesn't like new stuff? This release we're passing the 700 integrations for Home Assistant. As of today [we're 1369 days old][first-commit], which means that roughly every two days a new integration gets added!
+
+## {% linkable_title Python Scripts %}
+
+The biggest change is a new type of script component: [Python scripts][python_script docs]. This new component will allow you to write scripts to manipulate Home Assistant: call services, set states and fire events. Each Python script is made available as a service. Head over to [the docs][python_script docs] to see how to get started.
+
+## {% linkable_title Updater %}
+
+The updater has received a new opt-in option to let us know which components you use. This will allow us to focus development efforts on the components that are popular.
+
+```yaml
+updater:
+ include_used_components: true
+```
+
+And as a reminder. We will never share gathered data in a manner that can be used to identify anyone. We do plan on making aggregate data public soon. This will include total number of users and which hardware/software platform people use to run Home Assistant.
+
+## {% linkable_title Z-Wave %}
+
+Z-Wave is also getting a big update in this release. The confusing entity_ids will be on their way out. There is a [zwave blog post] that gives more detail, but the upgrade steps will be as follows:
+
+1. Run Home Assistant as normal and the old IDs will still be used.
+2. The new entity IDs will be shown in the more-info dialog for each entity. Check to make sure none of them will have conflicts once the new names are applied.
+3. Rename entities using the ui card as described in the blog post to avoid conflicts. Restart Home Assistant to observe the changes.
+4. Update all places mentioning IDs (groups, automation, customization, etc.) in configuration.yaml.
+5. Add `new_entity_ids: true` to your zwave config.
+6. Restart Home Assistant to run with new IDs.
+7. The old entity IDs will be available in the more info dialog to trace down any remaining errors.
+
+## {% linkable_title New platforms %}
+
+- Added a Taps Aff binary sensor ([@bazwilliams] - [#7880]) ([binary_sensor.tapsaff docs]) (new-platform)
+- lock.sesame: New lock platform for Sesame smart locks ([@trisk] - [#7873]) ([lock.sesame docs]) (new-platform)
+- Etherscan.io sensor ([@nkgilley] - [#7855]) ([sensor.etherscan docs]) (new-platform)
+- blockchain.info sensor ([@nkgilley] - [#7856]) ([sensor.blockchain docs]) (new-platform)
+- Add Radarr sensor ([@tboyce021] - [#7318]) ([sensor.radarr docs]) (new-platform)
+- Added buienradar sensor and weather ([@mjj4791] - [#7592]) ([sensor.buienradar docs]) ([weather.buienradar docs]) (new-platform)
+- Add support for Vanderbilt SPC alarm panels and attached sensors ([@mbrrg] - [#7663]) ([spc docs]) ([alarm_control_panel.spc docs]) ([binary_sensor.spc docs]) (new-platform)
+- Add raspihats switch ([@florincosta] - [#7665]) ([switch.raspihats docs]) (new-platform)
+- Add juicenet platform ([@jesserockz] - [#7668]) ([juicenet docs]) ([sensor.juicenet docs]) (new-platform)
+- add ripple sensor ([@nkgilley] - [#7935]) ([sensor.ripple docs]) (new-platform)
+- New component: Python Script ([@balloob] - [#7950]) ([python_script docs]) (new-platform)
+- Nadtcp component ([@mwsluis] - [#7955]) ([media_player.nadtcp docs]) (new-platform)
+- Add Gitter.im sensor ([@fabaff] - [#7998]) ([sensor.gitter docs]) (new-platform)
+- Update mailgun ([@happyleavesaoc] - [#7984]) ([mailgun docs]) ([notify.mailgun docs]) (breaking change) (new-platform)
+- Add Flexit AC climate platform ([@Sabesto] - [#7871]) ([climate.flexit 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][gitter]. The release notes have comments enabled but it's preferred if you use the former communication channels. Thanks.
+
+## {% linkable_title Reporting Issues %}
+Experiencing issues introduced by this release? Please report them in our [issue tracker][issue]. Make sure to fill in all fields of the issue template.
+
+
+## {% linkable_title Breaking changes %}
+
+- Update opencv config to match other image processors ([@Teagan42] - [#7864]) ([image_processing.opencv docs]) (breaking change)
+
+```yaml
+image_processing:
+ - platform: opencv
+ name: OpenCV
+ source:
+ - entity_id: camera.front_door
+ classifier:
+ faces:
+ file: /path/to/classifier
+ name: Husband
+ neighbors: 4
+ min_size: (40, 40)
+ scale: 1.1
+```
+
+- Lutron: Add configuration check and use default var names ([@fabaff] - [#7963]) ([lutron docs]) ([light.lutron docs]) (breaking change)
+
+```yaml
+lutron:
+ host: IP_ADDRESS
+ username: lutron
+ password: integration
+```
+
+- Convert mailgun to component ([@happyleavesaoc] - [#7984]) ([mailgun docs]) ([notify.mailgun docs]) (breaking change) (new-platform)
+
+```yaml
+mailgun:
+ domain: !secret mailgun_domain
+ api_key: !secret mailgun_api_key
+ sandbox: False
+
+notify:
+ - name: mailgun
+ platform: mailgun
+ recipient: !secret mailgun_recipient
+```
+
+- LIFX: add multiple modes to pulse effect. The `lifx_effect_breathe` call has been deprecated. Use `lifx_effect_pulse` with the new `mode: breathe` attribute instead. ([@amelchio] - [#8016]) ([light.lifx docs]) (breaking change)
+- Use standard entity_ids for zwave entities. This also introduces a small API breakage, where `EVENT_SCENE_ACTIVATED` and `EVENT_NODE_EVENT` will no longer supply an `object_id`. They will now be tied to the node entity_id. ([@armills] - [#7786]) ([zwave docs]) ([light.zwave docs]) (breaking change)
+- Fix attribute entities. Home Assistant will no longer filter out entities that are 'falsey'. So you might see more entity attributes show up. ([@pvizeli] - [#8066]) (breaking change)
+
+## {% linkable_title All changes %}
+
+- Update squeezebox.py ([@molobrakos] - [#7617]) ([media_player.squeezebox docs])
+- Fix html5 unsub ([@balloob] - [#7874]) ([notify.html5 docs])
+- Added effects to Yeelight bulbs ([@Mister-Espria] - [#7152]) ([light.yeelight docs])
+- Enocean Binary Sensor: Handle click of both rockers ([@twendt] - [#7770]) ([binary_sensor.enocean docs])
+- Support for renaming ZWave values ([@armills] - [#7780]) ([zwave docs])
+- Fix telegram_bot ([@balloob] - [#7877]) ([telegram_bot.polling docs]) ([telegram_bot.webhooks docs])
+- [light.lifx] Update aiolifx ([@amelchio] - [#7882]) ([light.lifx docs])
+- Change nad_receiver to pypi ([@joopert] - [#7852]) ([media_player.nad docs])
+- Switch pymyq to pypi ([@andrey-git] - [#7884]) ([cover.myq docs])
+- Use constants ([@fabaff] - [#7888]) ([notify.xmpp docs])
+- Upgrade pyasn1-modules to 0.0.9 ([@fabaff] - [#7887]) ([notify.xmpp docs])
+- Upgrade sendgrid to 4.2.0 ([@fabaff] - [#7886]) ([notify.sendgrid docs])
+- Upgrade python-telegram-bot to 6.0.3 ([@fabaff] - [#7885])
+- Fix MQTT camera test ([@balloob] - [#7878])
+- Added a Taps Aff binary sensor ([@bazwilliams] - [#7880]) ([binary_sensor.tapsaff docs]) (new-platform)
+- lock.sesame: New lock platform for Sesame smart locks ([@trisk] - [#7873]) ([lock.sesame docs]) (new-platform)
+- Dsmr5 revert ([@aequitas] - [#7900]) ([sensor.dsmr docs])
+- Fix typos in Wunderground component (Percipitation -> Precipitation) ([@mje-nz] - [#7901]) ([sensor.wunderground docs])
+- Add support for the expirationTime parameter. ([@perosb] - [#7895]) ([notify.html5 docs])
+- Etherscan.io sensor ([@nkgilley] - [#7855]) ([sensor.etherscan docs]) (new-platform)
+- blockchain.info sensor ([@nkgilley] - [#7856]) ([sensor.blockchain docs]) (new-platform)
+- Mqtt cover modifications ([@cribbstechnologies] - [#7841]) ([cover.mqtt docs])
+- Add Radarr sensor ([@tboyce021] - [#7318]) ([sensor.radarr docs]) (new-platform)
+- Add service to set nest away/home modes ([@mattsch] - [#7619]) ([nest docs])
+- Added buienradar sensor and weather ([@mjj4791] - [#7592]) ([sensor.buienradar docs]) ([weather.buienradar docs]) (new-platform)
+- Add support for Vanderbilt SPC alarm panels and attached sensors ([@mbrrg] - [#7663]) ([spc docs]) ([alarm_control_panel.spc docs]) ([binary_sensor.spc docs]) (new-platform)
+- Add raspihats switch ([@florincosta] - [#7665]) ([switch.raspihats docs]) (new-platform)
+- Add 'icon_template' to switch templates (similar to sensor template) ([@PhracturedBlue] - [#7862]) ([switch.template docs])
+- Fix docstring ([@fabaff] - [#7907])
+- Sync crypto-currency platforms ([@fabaff] - [#7906]) ([sensor.bitcoin docs]) ([sensor.blockchain docs]) ([sensor.coinmarketcap docs]) ([sensor.etherscan docs])
+- Move consts to 'const.py' ([@fabaff] - [#7909]) ([media_player.sonos docs]) ([sensor.imap_email_content docs]) ([sensor.pvoutput docs]) ([sensor.waqi docs])
+- Minor cleanup - Define 'CONF_ICON_TEMPLATE' constant centrally ([@PhracturedBlue] - [#7910]) ([sensor.template docs]) ([switch.template docs])
+- Do not call update() in constructor ([@fabaff] - [#7912]) ([sensor.cpuspeed docs]) ([sensor.cups docs]) ([sensor.currencylayer docs]) ([sensor.fixer docs])
+- Add juicenet platform ([@jesserockz] - [#7668]) ([juicenet docs]) ([sensor.juicenet docs]) (new-platform)
+- Bump pyEight version to fix 0hr session errors ([@mezz64] - [#7916]) ([eight_sleep docs])
+- update to pywebpush 1.0.4 which allows install on system with openssl-1.1.0 (cryptography dep) ([@perosb] - [#7915]) ([notify.html5 docs])
+- Do not call update() in constructor ([@fabaff] - [#7917]) ([sensor.dte_energy_bridge docs]) ([sensor.dublin_bus_transport docs]) ([sensor.dweet docs]) ([sensor.ebox docs]) ([sensor.ecobee docs]) ([sensor.hddtemp docs]) ([sensor.mold_indicator docs]) ([sensor.pi_hole docs]) ([sensor.yahoo_finance docs])
+- Fix changes introduced with #7917 ([@fabaff] - [#7930]) ([sensor.waqi docs])
+- Do not call update() in constructor ([@fabaff] - [#7931]) ([sensor.yweather docs])
+- Add service_url config option to volvooncall ([@palp] - [#7919]) ([volvooncall docs])
+- Added 'change' field to statistics sensor ([@jminn] - [#7820]) ([sensor.statistics docs])
+- add ripple sensor ([@nkgilley] - [#7935]) ([sensor.ripple docs]) (new-platform)
+- Add Yahoo! weather platform ([@fabaff] - [#7939])
+- [media_player.sonos] Send media_stop on turn_off ([@Juggels] - [#7940]) ([media_player.sonos docs])
+- update to 006 ([@joopert] - [#7945]) ([media_player.nad docs])
+- Update ping.py ([@vrs01] - [#7944]) ([device_tracker.ping docs])
+- Add option to display all input sources / Add support for favourite channels / Treat Marantz SR5008 as Denon AVR-X device ([@scarface-4711] - [#7949]) ([media_player.denonavr docs])
+- [WIP] Fix opencv ([@Teagan42] - [#7864]) ([image_processing.opencv docs]) (breaking change)
+- Upgrade coinmarketcap to 3.0.1 ([@fabaff] - [#7951]) ([sensor.coinmarketcap docs])
+- test connection without needing admin rights ([@heinemml] - [#7947])
+- Fix the negative values bug in history_stats ([@bokub] - [#7934])
+- Vera colored light support ([@alanfischer] - [#7942]) ([vera docs]) ([light.vera docs])
+- Fix typos ([@fabaff] - [#7957]) ([http docs]) ([fan.zwave docs])
+- Osram lightify, removed double set to the lightify bridge in case of brightness changes ([@commento] - [#7662]) ([light.osramlightify docs])
+- Add configuration check and use default var names ([@fabaff] - [#7963]) ([lutron docs]) ([light.lutron docs]) (breaking change)
+- lock.sesame: Update pysesame, add state attributes ([@trisk] - [#7953]) ([lock.sesame docs])
+- Fixed metadata issue ([@bazwilliams] - [#7932]) ([media_player.openhome docs])
+- Create metoffice.py ([@cyberjacob] - [#7965]) ([sensor.metoffice docs])
+- Prevent Roku doing I/O in event loop ([@balloob] - [#7969]) ([media_player.roku docs])
+- Fix platforms being able to block startup ([@balloob] - [#7970])
+- New component: Python Script ([@balloob] - [#7950]) ([python_script docs]) (new-platform)
+- Nadtcp component ([@mwsluis] - [#7955]) ([media_player.nadtcp docs]) (new-platform)
+- HomeMatic optimizations and code cleanup ([@danielperna84] - [#7986]) ([homematic docs]) ([binary_sensor.homematic docs]) ([cover.homematic docs]) ([sensor.homematic docs]) ([switch.homematic docs])
+- Update eliqonline.py ([@molobrakos] - [#7977]) ([sensor.eliqonline docs])
+- test that all lights turn off when no entity id is given ([@chilicheech] - [#7981])
+- make `last_name` field optional ([@azogue] - [#7988])
+- Bugfixing with version 0.4.4 of denonavr ([@scarface-4711] - [#7995]) ([media_player.denonavr docs])
+- Upgrade py-cpuinfo to 3.3.0 ([@fabaff] - [#7992]) ([sensor.cpuspeed docs])
+- LIFX: clean up internal color conversions ([@amelchio] - [#7964]) ([light.lifx docs])
+- LIFX: add support for setting infrared level ([@amelchio] - [#8000]) ([light.lifx docs])
+- dismiss service for persistent notifications ([@tedstriker] - [#7996]) ([persistent_notification docs])
+- Add Gitter.im sensor ([@fabaff] - [#7998]) ([sensor.gitter docs]) (new-platform)
+- Fixing Client connection error ([@sander76] - [#7991]) ([telegram_bot.polling docs])
+- Additional demo fan with only speed support ([@armills] - [#7985])
+- Update mailgun ([@happyleavesaoc] - [#7984]) ([mailgun docs]) ([notify.mailgun docs]) (breaking change) (new-platform)
+- Fixed bug in spotify component. ([@soldag] - [#7976]) ([media_player.spotify docs])
+- fixing potential null issue with optional param being parsed as a script ([@cribbstechnologies] - [#7928]) ([light.template docs])
+- Make it more flexible (fixes #7954) ([@fabaff] - [#8001]) ([image_processing.seven_segments docs])
+- Add Flexit AC climate platform ([@Sabesto] - [#7871]) ([climate.flexit docs]) (new-platform)
+- update pyripple ([@nkgilley] - [#8015]) ([sensor.ripple docs])
+- Allow put as method ([@fabaff] - [#8004]) ([switch.rest docs])
+- Configure conversation for custom actions with keywords ([@mjsir911] - [#7734]) ([conversation docs])
+- Remove globally disabled pylint issues ([@fabaff] - [#8005]) ([vera docs]) ([calendar.google docs]) ([climate.wink docs]) ([device_tracker.owntracks docs]) ([media_player.aquostv docs]) ([media_player.plex docs]) ([sensor.openevse docs])
+- entity_id for service fan.turn_off is optional ([@chilicheech] - [#7982])
+- Make percentage string values as floats/ints in InfluxDB ([@philhawthorne] - [#7879]) ([influxdb docs])
+- Take in account Spotify account permissions ([@Tommatheussen] - [#8012]) ([media_player.spotify docs])
+- Add Dyson Pure Cool Link support ([@CharlesBlonde] - [#7795])
+- Allow device_tracker platforms to specify picture and icon upon discovery ([@andrey-git] - [#8018])
+- Discover Z-Wave values by index ([@armills] - [#7853]) ([zwave docs])
+- LIFX: add multiple modes to pulse effect ([@amelchio] - [#8016]) ([light.lifx docs]) (breaking change)
+- Do not call update() in constructor ([@fabaff] - [#8048]) ([sensor.snmp docs])
+- Upgrade pysnmp to 4.3.8 ([@fabaff] - [#8044]) ([device_tracker.snmp docs]) ([sensor.snmp docs])
+- Upgrade zeroconf to 0.19.1 ([@fabaff] - [#8043]) ([zeroconf docs])
+- Vera fix for dimmable vs rgb lights ([@alanfischer] - [#8007]) ([vera docs]) ([light.vera docs])
+- Group service / dynamic handling ([@pvizeli] - [#7971]) ([group docs])
+- Adding ssocr to docker to support Seven Segments Display ([@MartyTremblay] - [#8028])
+- Added host variable to Splunk.py and updated tox tests ([@boojew] - [#8052]) ([splunk docs])
+- Restrict Python Script ([@balloob] - [#8053]) ([python_script docs])
+- Fixed the Wind sensor following new release of netatmo-api-python ([@glpatcern] - [#8030]) ([netatmo docs]) ([sensor.netatmo docs])
+- media_player.firetv - Adding support for https. ([@coolcow] - [#8022]) ([media_player.firetv docs])
+- Added ONVIF camera component ([@matt2005] - [#7979])
+- Provide entity_id to avoid sensor mixup (fixes #7636). Use async_dispatcher. Provide icon. ([@molobrakos] - [#7946]) ([volvooncall docs])
+- Updater improvements to send option component information ([@infamy] - [#7720]) ([updater docs])
+- Use standard entity_ids for zwave entities ([@armills] - [#7786]) ([zwave docs]) ([light.zwave docs]) (breaking change)
+- Update numpy 1.13.0 ([@pvizeli] - [#8059]) ([image_processing.opencv docs])
+- No update in MQTT Binary Sensor #7478 ([@pezinek] - [#8057])
+- Always enable monkey patch ([@balloob] - [#8054])
+- Add to zwave services descriptions ([@andrey-git] - [#8072])
+- Fix attribute entity ([@pvizeli] - [#8066]) (breaking change)
+- Added 'all_plants' group and support for plant groups state. ([@aronsky] - [#8063]) ([group docs]) ([plant docs])
+- Fix EntityComponent handle entities without a name ([@balloob] - [#8065])
+- Update pyunifi component to use APIError passed from pyunifi 2.13. Better accommodate login failures with wrapper in pyunifi 2.13. ([@finish06] - [#7899]) ([device_tracker.unifi docs])
+- bump usps version ([@happyleavesaoc] - [#8074]) ([sensor.usps docs])
+- bump ups ([@happyleavesaoc] - [#8075]) ([sensor.ups docs])
+
+[#7152]: https://github.com/home-assistant/home-assistant/pull/7152
+[#7318]: https://github.com/home-assistant/home-assistant/pull/7318
+[#7592]: https://github.com/home-assistant/home-assistant/pull/7592
+[#7617]: https://github.com/home-assistant/home-assistant/pull/7617
+[#7619]: https://github.com/home-assistant/home-assistant/pull/7619
+[#7662]: https://github.com/home-assistant/home-assistant/pull/7662
+[#7663]: https://github.com/home-assistant/home-assistant/pull/7663
+[#7665]: https://github.com/home-assistant/home-assistant/pull/7665
+[#7668]: https://github.com/home-assistant/home-assistant/pull/7668
+[#7720]: https://github.com/home-assistant/home-assistant/pull/7720
+[#7734]: https://github.com/home-assistant/home-assistant/pull/7734
+[#7770]: https://github.com/home-assistant/home-assistant/pull/7770
+[#7780]: https://github.com/home-assistant/home-assistant/pull/7780
+[#7786]: https://github.com/home-assistant/home-assistant/pull/7786
+[#7795]: https://github.com/home-assistant/home-assistant/pull/7795
+[#7820]: https://github.com/home-assistant/home-assistant/pull/7820
+[#7841]: https://github.com/home-assistant/home-assistant/pull/7841
+[#7852]: https://github.com/home-assistant/home-assistant/pull/7852
+[#7853]: https://github.com/home-assistant/home-assistant/pull/7853
+[#7855]: https://github.com/home-assistant/home-assistant/pull/7855
+[#7856]: https://github.com/home-assistant/home-assistant/pull/7856
+[#7862]: https://github.com/home-assistant/home-assistant/pull/7862
+[#7864]: https://github.com/home-assistant/home-assistant/pull/7864
+[#7871]: https://github.com/home-assistant/home-assistant/pull/7871
+[#7873]: https://github.com/home-assistant/home-assistant/pull/7873
+[#7874]: https://github.com/home-assistant/home-assistant/pull/7874
+[#7877]: https://github.com/home-assistant/home-assistant/pull/7877
+[#7878]: https://github.com/home-assistant/home-assistant/pull/7878
+[#7879]: https://github.com/home-assistant/home-assistant/pull/7879
+[#7880]: https://github.com/home-assistant/home-assistant/pull/7880
+[#7882]: https://github.com/home-assistant/home-assistant/pull/7882
+[#7884]: https://github.com/home-assistant/home-assistant/pull/7884
+[#7885]: https://github.com/home-assistant/home-assistant/pull/7885
+[#7886]: https://github.com/home-assistant/home-assistant/pull/7886
+[#7887]: https://github.com/home-assistant/home-assistant/pull/7887
+[#7888]: https://github.com/home-assistant/home-assistant/pull/7888
+[#7895]: https://github.com/home-assistant/home-assistant/pull/7895
+[#7899]: https://github.com/home-assistant/home-assistant/pull/7899
+[#7900]: https://github.com/home-assistant/home-assistant/pull/7900
+[#7901]: https://github.com/home-assistant/home-assistant/pull/7901
+[#7906]: https://github.com/home-assistant/home-assistant/pull/7906
+[#7907]: https://github.com/home-assistant/home-assistant/pull/7907
+[#7909]: https://github.com/home-assistant/home-assistant/pull/7909
+[#7910]: https://github.com/home-assistant/home-assistant/pull/7910
+[#7912]: https://github.com/home-assistant/home-assistant/pull/7912
+[#7915]: https://github.com/home-assistant/home-assistant/pull/7915
+[#7916]: https://github.com/home-assistant/home-assistant/pull/7916
+[#7917]: https://github.com/home-assistant/home-assistant/pull/7917
+[#7919]: https://github.com/home-assistant/home-assistant/pull/7919
+[#7928]: https://github.com/home-assistant/home-assistant/pull/7928
+[#7930]: https://github.com/home-assistant/home-assistant/pull/7930
+[#7931]: https://github.com/home-assistant/home-assistant/pull/7931
+[#7932]: https://github.com/home-assistant/home-assistant/pull/7932
+[#7934]: https://github.com/home-assistant/home-assistant/pull/7934
+[#7935]: https://github.com/home-assistant/home-assistant/pull/7935
+[#7939]: https://github.com/home-assistant/home-assistant/pull/7939
+[#7940]: https://github.com/home-assistant/home-assistant/pull/7940
+[#7942]: https://github.com/home-assistant/home-assistant/pull/7942
+[#7944]: https://github.com/home-assistant/home-assistant/pull/7944
+[#7945]: https://github.com/home-assistant/home-assistant/pull/7945
+[#7946]: https://github.com/home-assistant/home-assistant/pull/7946
+[#7947]: https://github.com/home-assistant/home-assistant/pull/7947
+[#7949]: https://github.com/home-assistant/home-assistant/pull/7949
+[#7950]: https://github.com/home-assistant/home-assistant/pull/7950
+[#7951]: https://github.com/home-assistant/home-assistant/pull/7951
+[#7953]: https://github.com/home-assistant/home-assistant/pull/7953
+[#7955]: https://github.com/home-assistant/home-assistant/pull/7955
+[#7957]: https://github.com/home-assistant/home-assistant/pull/7957
+[#7963]: https://github.com/home-assistant/home-assistant/pull/7963
+[#7964]: https://github.com/home-assistant/home-assistant/pull/7964
+[#7965]: https://github.com/home-assistant/home-assistant/pull/7965
+[#7969]: https://github.com/home-assistant/home-assistant/pull/7969
+[#7970]: https://github.com/home-assistant/home-assistant/pull/7970
+[#7971]: https://github.com/home-assistant/home-assistant/pull/7971
+[#7976]: https://github.com/home-assistant/home-assistant/pull/7976
+[#7977]: https://github.com/home-assistant/home-assistant/pull/7977
+[#7979]: https://github.com/home-assistant/home-assistant/pull/7979
+[#7981]: https://github.com/home-assistant/home-assistant/pull/7981
+[#7982]: https://github.com/home-assistant/home-assistant/pull/7982
+[#7984]: https://github.com/home-assistant/home-assistant/pull/7984
+[#7985]: https://github.com/home-assistant/home-assistant/pull/7985
+[#7986]: https://github.com/home-assistant/home-assistant/pull/7986
+[#7988]: https://github.com/home-assistant/home-assistant/pull/7988
+[#7991]: https://github.com/home-assistant/home-assistant/pull/7991
+[#7992]: https://github.com/home-assistant/home-assistant/pull/7992
+[#7995]: https://github.com/home-assistant/home-assistant/pull/7995
+[#7996]: https://github.com/home-assistant/home-assistant/pull/7996
+[#7998]: https://github.com/home-assistant/home-assistant/pull/7998
+[#8000]: https://github.com/home-assistant/home-assistant/pull/8000
+[#8001]: https://github.com/home-assistant/home-assistant/pull/8001
+[#8004]: https://github.com/home-assistant/home-assistant/pull/8004
+[#8005]: https://github.com/home-assistant/home-assistant/pull/8005
+[#8007]: https://github.com/home-assistant/home-assistant/pull/8007
+[#8012]: https://github.com/home-assistant/home-assistant/pull/8012
+[#8015]: https://github.com/home-assistant/home-assistant/pull/8015
+[#8016]: https://github.com/home-assistant/home-assistant/pull/8016
+[#8018]: https://github.com/home-assistant/home-assistant/pull/8018
+[#8022]: https://github.com/home-assistant/home-assistant/pull/8022
+[#8028]: https://github.com/home-assistant/home-assistant/pull/8028
+[#8030]: https://github.com/home-assistant/home-assistant/pull/8030
+[#8043]: https://github.com/home-assistant/home-assistant/pull/8043
+[#8044]: https://github.com/home-assistant/home-assistant/pull/8044
+[#8048]: https://github.com/home-assistant/home-assistant/pull/8048
+[#8052]: https://github.com/home-assistant/home-assistant/pull/8052
+[#8053]: https://github.com/home-assistant/home-assistant/pull/8053
+[#8054]: https://github.com/home-assistant/home-assistant/pull/8054
+[#8057]: https://github.com/home-assistant/home-assistant/pull/8057
+[#8059]: https://github.com/home-assistant/home-assistant/pull/8059
+[#8063]: https://github.com/home-assistant/home-assistant/pull/8063
+[#8065]: https://github.com/home-assistant/home-assistant/pull/8065
+[#8066]: https://github.com/home-assistant/home-assistant/pull/8066
+[#8072]: https://github.com/home-assistant/home-assistant/pull/8072
+[#8074]: https://github.com/home-assistant/home-assistant/pull/8074
+[#8075]: https://github.com/home-assistant/home-assistant/pull/8075
+[@CharlesBlonde]: https://github.com/CharlesBlonde
+[@Juggels]: https://github.com/Juggels
+[@MartyTremblay]: https://github.com/MartyTremblay
+[@Mister-Espria]: https://github.com/Mister-Espria
+[@PhracturedBlue]: https://github.com/PhracturedBlue
+[@Sabesto]: https://github.com/Sabesto
+[@Teagan42]: https://github.com/Teagan42
+[@Tommatheussen]: https://github.com/Tommatheussen
+[@aequitas]: https://github.com/aequitas
+[@alanfischer]: https://github.com/alanfischer
+[@amelchio]: https://github.com/amelchio
+[@andrey-git]: https://github.com/andrey-git
+[@armills]: https://github.com/armills
+[@aronsky]: https://github.com/aronsky
+[@azogue]: https://github.com/azogue
+[@balloob]: https://github.com/balloob
+[@bazwilliams]: https://github.com/bazwilliams
+[@bokub]: https://github.com/bokub
+[@boojew]: https://github.com/boojew
+[@chilicheech]: https://github.com/chilicheech
+[@commento]: https://github.com/commento
+[@coolcow]: https://github.com/coolcow
+[@cribbstechnologies]: https://github.com/cribbstechnologies
+[@cyberjacob]: https://github.com/cyberjacob
+[@danielperna84]: https://github.com/danielperna84
+[@fabaff]: https://github.com/fabaff
+[@finish06]: https://github.com/finish06
+[@florincosta]: https://github.com/florincosta
+[@glpatcern]: https://github.com/glpatcern
+[@happyleavesaoc]: https://github.com/happyleavesaoc
+[@heinemml]: https://github.com/heinemml
+[@infamy]: https://github.com/infamy
+[@jesserockz]: https://github.com/jesserockz
+[@jminn]: https://github.com/jminn
+[@joopert]: https://github.com/joopert
+[@matt2005]: https://github.com/matt2005
+[@mattsch]: https://github.com/mattsch
+[@mbrrg]: https://github.com/mbrrg
+[@mezz64]: https://github.com/mezz64
+[@mje-nz]: https://github.com/mje-nz
+[@mjj4791]: https://github.com/mjj4791
+[@mjsir911]: https://github.com/mjsir911
+[@molobrakos]: https://github.com/molobrakos
+[@mwsluis]: https://github.com/mwsluis
+[@nkgilley]: https://github.com/nkgilley
+[@palp]: https://github.com/palp
+[@perosb]: https://github.com/perosb
+[@pezinek]: https://github.com/pezinek
+[@philhawthorne]: https://github.com/philhawthorne
+[@pvizeli]: https://github.com/pvizeli
+[@sander76]: https://github.com/sander76
+[@scarface-4711]: https://github.com/scarface-4711
+[@soldag]: https://github.com/soldag
+[@tboyce021]: https://github.com/tboyce021
+[@tedstriker]: https://github.com/tedstriker
+[@trisk]: https://github.com/trisk
+[@twendt]: https://github.com/twendt
+[@vrs01]: https://github.com/vrs01
+[alarm_control_panel.spc docs]: https://home-assistant.io/components/alarm_control_panel.spc/
+[binary_sensor.enocean docs]: https://home-assistant.io/components/binary_sensor.enocean/
+[binary_sensor.homematic docs]: https://home-assistant.io/components/binary_sensor.homematic/
+[binary_sensor.spc docs]: https://home-assistant.io/components/binary_sensor.spc/
+[binary_sensor.tapsaff docs]: https://home-assistant.io/components/binary_sensor.tapsaff/
+[calendar.google docs]: https://home-assistant.io/components/calendar.google/
+[climate.flexit docs]: https://home-assistant.io/components/climate.flexit/
+[climate.wink docs]: https://home-assistant.io/components/climate.wink/
+[conversation docs]: https://home-assistant.io/components/conversation/
+[cover.homematic docs]: https://home-assistant.io/components/cover.homematic/
+[cover.mqtt docs]: https://home-assistant.io/components/cover.mqtt/
+[cover.myq docs]: https://home-assistant.io/components/cover.myq/
+[device_tracker.__init__ docs]: https://home-assistant.io/components/device_tracker.__init__/
+[device_tracker.owntracks docs]: https://home-assistant.io/components/device_tracker.owntracks/
+[device_tracker.ping docs]: https://home-assistant.io/components/device_tracker.ping/
+[device_tracker.snmp docs]: https://home-assistant.io/components/device_tracker.snmp/
+[device_tracker.unifi docs]: https://home-assistant.io/components/device_tracker.unifi/
+[eight_sleep docs]: https://home-assistant.io/components/eight_sleep/
+[fan.__init__ docs]: https://home-assistant.io/components/fan.__init__/
+[fan.demo docs]: https://home-assistant.io/components/fan.demo/
+[fan.zwave docs]: https://home-assistant.io/components/fan.zwave/
+[group docs]: https://home-assistant.io/components/group/
+[homematic docs]: https://home-assistant.io/components/homematic/
+[http docs]: https://home-assistant.io/components/http/
+[image_processing.opencv docs]: https://home-assistant.io/components/image_processing.opencv/
+[image_processing.seven_segments docs]: https://home-assistant.io/components/image_processing.seven_segments/
+[influxdb docs]: https://home-assistant.io/components/influxdb/
+[juicenet docs]: https://home-assistant.io/components/juicenet/
+[light.lifx docs]: https://home-assistant.io/components/light.lifx/
+[light.lutron docs]: https://home-assistant.io/components/light.lutron/
+[light.osramlightify docs]: https://home-assistant.io/components/light.osramlightify/
+[light.template docs]: https://home-assistant.io/components/light.template/
+[light.vera docs]: https://home-assistant.io/components/light.vera/
+[light.yeelight docs]: https://home-assistant.io/components/light.yeelight/
+[light.zwave docs]: https://home-assistant.io/components/light.zwave/
+[lock.sesame docs]: https://home-assistant.io/components/lock.sesame/
+[lutron docs]: https://home-assistant.io/components/lutron/
+[mailgun docs]: https://home-assistant.io/components/mailgun/
+[media_player.aquostv docs]: https://home-assistant.io/components/media_player.aquostv/
+[media_player.denonavr docs]: https://home-assistant.io/components/media_player.denonavr/
+[media_player.firetv docs]: https://home-assistant.io/components/media_player.firetv/
+[media_player.nad docs]: https://home-assistant.io/components/media_player.nad/
+[media_player.nadtcp docs]: https://home-assistant.io/components/media_player.nadtcp/
+[media_player.openhome docs]: https://home-assistant.io/components/media_player.openhome/
+[media_player.plex docs]: https://home-assistant.io/components/media_player.plex/
+[media_player.roku docs]: https://home-assistant.io/components/media_player.roku/
+[media_player.sonos docs]: https://home-assistant.io/components/media_player.sonos/
+[media_player.spotify docs]: https://home-assistant.io/components/media_player.spotify/
+[media_player.squeezebox docs]: https://home-assistant.io/components/media_player.squeezebox/
+[mqtt.__init__ docs]: https://home-assistant.io/components/mqtt.__init__/
+[nest docs]: https://home-assistant.io/components/nest/
+[netatmo docs]: https://home-assistant.io/components/netatmo/
+[notify.html5 docs]: https://home-assistant.io/components/notify.html5/
+[notify.mailgun docs]: https://home-assistant.io/components/notify.mailgun/
+[notify.sendgrid docs]: https://home-assistant.io/components/notify.sendgrid/
+[notify.xmpp docs]: https://home-assistant.io/components/notify.xmpp/
+[opencv docs]: https://home-assistant.io/components/opencv/
+[persistent_notification docs]: https://home-assistant.io/components/persistent_notification/
+[plant docs]: https://home-assistant.io/components/plant/
+[python_script docs]: https://home-assistant.io/components/python_script/
+[sensor.bitcoin docs]: https://home-assistant.io/components/sensor.bitcoin/
+[sensor.blockchain docs]: https://home-assistant.io/components/sensor.blockchain/
+[sensor.buienradar docs]: https://home-assistant.io/components/sensor.buienradar/
+[sensor.coinmarketcap docs]: https://home-assistant.io/components/sensor.coinmarketcap/
+[sensor.cpuspeed docs]: https://home-assistant.io/components/sensor.cpuspeed/
+[sensor.cups docs]: https://home-assistant.io/components/sensor.cups/
+[sensor.currencylayer docs]: https://home-assistant.io/components/sensor.currencylayer/
+[sensor.dsmr docs]: https://home-assistant.io/components/sensor.dsmr/
+[sensor.dte_energy_bridge docs]: https://home-assistant.io/components/sensor.dte_energy_bridge/
+[sensor.dublin_bus_transport docs]: https://home-assistant.io/components/sensor.dublin_bus_transport/
+[sensor.dweet docs]: https://home-assistant.io/components/sensor.dweet/
+[sensor.ebox docs]: https://home-assistant.io/components/sensor.ebox/
+[sensor.ecobee docs]: https://home-assistant.io/components/sensor.ecobee/
+[sensor.eliqonline docs]: https://home-assistant.io/components/sensor.eliqonline/
+[sensor.etherscan docs]: https://home-assistant.io/components/sensor.etherscan/
+[sensor.fixer docs]: https://home-assistant.io/components/sensor.fixer/
+[sensor.gitter docs]: https://home-assistant.io/components/sensor.gitter/
+[sensor.hddtemp docs]: https://home-assistant.io/components/sensor.hddtemp/
+[sensor.homematic docs]: https://home-assistant.io/components/sensor.homematic/
+[sensor.imap_email_content docs]: https://home-assistant.io/components/sensor.imap_email_content/
+[sensor.juicenet docs]: https://home-assistant.io/components/sensor.juicenet/
+[sensor.metoffice docs]: https://home-assistant.io/components/sensor.metoffice/
+[sensor.mold_indicator docs]: https://home-assistant.io/components/sensor.mold_indicator/
+[sensor.netatmo docs]: https://home-assistant.io/components/sensor.netatmo/
+[sensor.openevse docs]: https://home-assistant.io/components/sensor.openevse/
+[sensor.pi_hole docs]: https://home-assistant.io/components/sensor.pi_hole/
+[sensor.pvoutput docs]: https://home-assistant.io/components/sensor.pvoutput/
+[sensor.radarr docs]: https://home-assistant.io/components/sensor.radarr/
+[sensor.ripple docs]: https://home-assistant.io/components/sensor.ripple/
+[sensor.snmp docs]: https://home-assistant.io/components/sensor.snmp/
+[sensor.statistics docs]: https://home-assistant.io/components/sensor.statistics/
+[sensor.template docs]: https://home-assistant.io/components/sensor.template/
+[sensor.ups docs]: https://home-assistant.io/components/sensor.ups/
+[sensor.usps docs]: https://home-assistant.io/components/sensor.usps/
+[sensor.waqi docs]: https://home-assistant.io/components/sensor.waqi/
+[sensor.wunderground docs]: https://home-assistant.io/components/sensor.wunderground/
+[sensor.yahoo_finance docs]: https://home-assistant.io/components/sensor.yahoo_finance/
+[sensor.yweather docs]: https://home-assistant.io/components/sensor.yweather/
+[spc docs]: https://home-assistant.io/components/spc/
+[splunk docs]: https://home-assistant.io/components/splunk/
+[switch.homematic docs]: https://home-assistant.io/components/switch.homematic/
+[switch.raspihats docs]: https://home-assistant.io/components/switch.raspihats/
+[switch.rest docs]: https://home-assistant.io/components/switch.rest/
+[switch.template docs]: https://home-assistant.io/components/switch.template/
+[telegram_bot.__init__ docs]: https://home-assistant.io/components/telegram_bot.__init__/
+[telegram_bot.polling docs]: https://home-assistant.io/components/telegram_bot.polling/
+[telegram_bot.webhooks docs]: https://home-assistant.io/components/telegram_bot.webhooks/
+[updater docs]: https://home-assistant.io/components/updater/
+[vera docs]: https://home-assistant.io/components/vera/
+[volvooncall docs]: https://home-assistant.io/components/volvooncall/
+[weather.buienradar docs]: https://home-assistant.io/components/weather.buienradar/
+[zeroconf docs]: https://home-assistant.io/components/zeroconf/
+[zwave docs]: https://home-assistant.io/components/zwave/
+[zwave blog post]: https://home-assistant.io/blog/2017/06/15/zwave-entity-ids/
+[forum]: https://community.home-assistant.io/
+[gitter]: https://gitter.im/home-assistant/home-assistant
+[issue]: https://github.com/home-assistant/home-assistant/issues
+[first-commit]: https://home-assistant.io/help/trivia/#first-commit
diff --git a/source/images/blog/2017-06-0.47/components.png b/source/images/blog/2017-06-0.47/components.png
new file mode 100644
index 0000000000000000000000000000000000000000..779ab195340d724acfd2b2275f668c0647979e61
GIT binary patch
literal 116392
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