From 38ff3c6caa8a6fa997fa0731c34354040e257575 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Thu, 4 May 2017 21:50:02 -0700 Subject: [PATCH 01/28] Version bump to 0.44 --- _config.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/_config.yml b/_config.yml index 27f14114207..e5b0a64f9e4 100644 --- a/_config.yml +++ b/_config.yml @@ -140,11 +140,11 @@ social: # Home Assistant release details current_major_version: 0 -current_minor_version: 43 -current_patch_version: 2 -date_released: 2017-04-27 +current_minor_version: 44 +current_patch_version: 0 +date_released: 2017-05-06 # Either # or the anchor link to latest release notes in the blog post. # Must be prefixed with a # and have double quotes around it. # Example #release-0431---april-25 -patch_version_notes: "#release-0432---april-27" +patch_version_notes: "" From e071ad1fe9a21e3e59e2e82b008e7f355135e1f1 Mon Sep 17 00:00:00 2001 From: Oliver Date: Fri, 5 May 2017 06:51:39 +0200 Subject: [PATCH 02/28] Experimental support of Marantz receivers (#2489) Some Marantz receivers seem to have a quite similar interface compared to Denon AVR receivers. This was added to the module and tested with Marantz M-RC610. --- source/_components/media_player.denon.markdown | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/source/_components/media_player.denon.markdown b/source/_components/media_player.denon.markdown index d579463a5ce..d0b9da9b0ec 100644 --- a/source/_components/media_player.denon.markdown +++ b/source/_components/media_player.denon.markdown @@ -24,11 +24,13 @@ Supported devices: - Denon AVR receivers with Integrated Network support (partial support) - Denon AVR-X4100W (via denonavr platform) - Denon AVR receivers (via denonavr platform (untested)) +- Marantz M-RC610 (via denonavr platform) +- Marantz receivers (experimental via denonavr platform) To add a Denon Network Receiver to your installation, add the following to your `configuration.yaml` file: -**Telnet interface** +**Telnet platform** ```yaml # Example configuration.yaml entry media_player: @@ -49,7 +51,7 @@ A few notes for platform: denon - Seeking cannot be implemented as the UI sends absolute positions. Only seeking via simulated button presses is possible. -**denonavr interface** +**denonavr platform** ```yaml # Example configuration.yaml entry media_player: @@ -63,6 +65,6 @@ Configuration variables: - **name** (*Optional*): Name of the device. If not set, friendlyName of receiver is used. A few notes for platform: denonavr -- Additional option the control Denon AVR receivers with a builtin web server is using the HTTP interface with denonavr platform -- denonavr platform supports some additional functionalities like album covers, custom input source names and auto discovery -- Still be careful with the volume. 100% in an action movie will tear down your walls. +- Additional option the control Denon AVR receivers with a builtin web server is using the HTTP interface with denonavr platform. +- denonavr platform supports some additional functionalities like album covers, custom input source names and auto discovery. +- Marantz receivers seem to a have quite simliar interface. Thus if you own one, give it a try. From 7ed24693fcaa37491f325d4749144767100a617e Mon Sep 17 00:00:00 2001 From: Vincent Van Den Berghe Date: Fri, 5 May 2017 06:53:03 +0200 Subject: [PATCH 03/28] Update media_player.samsungtv.markdown (#2566) Added another (unsupported) model to the list --- source/_components/media_player.samsungtv.markdown | 1 + 1 file changed, 1 insertion(+) diff --git a/source/_components/media_player.samsungtv.markdown b/source/_components/media_player.samsungtv.markdown index 9bcd55df23c..741b9f1331c 100644 --- a/source/_components/media_player.samsungtv.markdown +++ b/source/_components/media_player.samsungtv.markdown @@ -57,6 +57,7 @@ Currently known supported models: Currently tested but not working models: - J5200 - Unable to see state and unable to control +- JU7000 - Unable to see state and unable to control (but port 8001 *is* open) - JU7500 - Unable to see state and unable to control If your model is not on the list then give it a test, if everything works correctly then add it to the list on [GitHub](https://github.com/home-assistant/home-assistant.github.io/tree/current/source/_components/media_player.samsungtv.markdown). From ef67bcec8db8297913272cd6b29540f1d1a3d145 Mon Sep 17 00:00:00 2001 From: Gergely Imreh Date: Fri, 5 May 2017 05:55:09 +0100 Subject: [PATCH 04/28] Add documentation for the Enviro pHAT sensor (#2557) * Add documentation for the Enviro pHAT sensor * sensor.envirophat: incorporating feedback * sensor.envirophat: update metadata --- source/_components/sensor.envirophat.markdown | 118 ++++++++++++++++++ 1 file changed, 118 insertions(+) create mode 100644 source/_components/sensor.envirophat.markdown diff --git a/source/_components/sensor.envirophat.markdown b/source/_components/sensor.envirophat.markdown new file mode 100644 index 00000000000..cf899363f7f --- /dev/null +++ b/source/_components/sensor.envirophat.markdown @@ -0,0 +1,118 @@ +--- +layout: page +title: "Enviro pHAT" +description: "Instructions how to integrate the Enviro pHAT within Home Assistant." +date: 2017-05-03 17:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: raspberry-pi.png +ha_category: Sensor +ha_iot_class: "Local Polling" +ha_release: 0.44 +--- + +The `envirophat` sensor platform allows you to display information collected by an [Enviro pHAT](https://shop.pimoroni.com/products/enviro-phat) add-on board for the Raspberry Pi. The board featues a wide range of sensors, such as: + +- BMP280 temperature/pressure sensor +- TCS3472 light and RGB colour sensor with two LEDs for illumination +- LSM303D accelerometer/magnetometer sensor +- ADS1015 4-channel 3.3v, analog to digital sensor (ADC) + +To add this platform to your installation, add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry, +# which is equivalent to the default setup +sensor: + - platform: envirophat + use_led: false + display_options: + - temperature + - pressure + - light + - light_red + - light_green + - light_blue + - accelerometer_x + - accelerometer_y + - accelerometer_z + - magnetometer_x + - magnetometer_y + - magnetometer_z + - voltage_0 + - voltage_1 + - voltage_2 + - voltage_3 +``` + +Configuration variables: + +- **display_options** (*Optional*) array: List of readings to monitor. Default is monitoring all of them: + - **temperature**: ambient temperature in Celsius. Since the sensor is close to the Raspberry Pi, that migth affect the accuracy of the reading (ie. the Pi might heat up the sensor) + - **pressure**: atmospheric pressure in hPa. + - **light**: ambient light, as an integer in the 0-65535 range + - **light_red**: red color reading scaled to the ambient light, as an integer in the 0-255 range + - **light_green**: green color reading scaled to the ambient light, as an integer in the 0-255 range + - **light_blue**: blue color reading scaled to the ambient light, as an integer in the 0-255 range + - **accelerometer_x**: accelerometer reading in units of G, along the X axis + - **accelerometer_y**: accelerometer reading in units of G, along the Y axis + - **accelerometer_z**: accelerometer reading in units of G, along the Z axis + - **magnetometer_x**: magnetometer reading, the X component of the raw vector + - **magnetometer_y**: magnetometer reading, the Y component of the raw vector + - **magnetometer_z**: magnetometer reading, the X component of the raw vector + - **voltage_0**: voltage reading on Analog In 0 in units of V + - **voltage_1**: voltage reading on Analog In 1 in units of V + - **voltage_2**: voltage reading on Analog In 2 in units of V + - **voltage_3**: voltage reading on Analog In 3 in units of V +- **use_led** (*Optional*) True / False boolean; Default value is False, declaring that the onboard LEDs are *not* used for the color measurements thus these readings are based on the ambient light. If the value is set to True, the onboard LEDs will blink whenever a reading is taken. + +### Notes + +* **X, Y, Z axes** + * X is parallel with the long edge of the board + * Y is parallel with the short edge of the board + * Z is perpendicular to the board +* **Voltages** + * voltage readings are done in the 0-3.3V range, please do not connect higher voltages than that! See the [Enviro pHAT's getting started guide](https://learn.pimoroni.com/tutorial/sandyj/getting-started-with-enviro-phat) regarding how to make a voltage divider + +### Give the values friendly names & icons + +Add something like the following to your [customize section](/docs/configuration/customizing-devices/): + +```yaml +# Example configuration.yaml entry + customize: + sensor.accelerometer_z: + icon: mdi:airplane-landing + friendly_name: "Acc Z" + sensor.magnetometer_x: + icon: mdi:arrow-up-bold-hexagon-outline + friendly_name: "Magnetic X" + sensor.pressure: + icon: mdi:weight + friendly_name: "Pressure" +``` + +### Create groups + +```yaml +# Example configuration.yaml entry +group: + enviro_phat_voltages: + name: Enviro pHAT Volages` + entities: + - sensor.voltage_0 + - sensor.voltage_1 + - sensor.voltage_2 + - sensor.voltage_3 +``` + +### Enabling the required `i2c-1` device + +Since the Enviro pHAT communicates over I2C, you might also need to make sure that the I2C devices are enabled, by adding or uncommenting the following line in `/boot/config.txt` (see the [DT Parameters section](https://www.raspberrypi.org/documentation/configuration/device-tree.md) in the Raspberry Pi documentation): + +``` +dtparam=i2c_arm=on +``` From ee87edc6bf1fb014532a99e520878e1c629ad6d3 Mon Sep 17 00:00:00 2001 From: Daniel Stone Date: Fri, 5 May 2017 05:56:40 +0100 Subject: [PATCH 05/28] Telegram: example to show the use of event_data (#2550) * Telegram: example to show the use of event_data ... in the action. (took a while to figure out myself) * Updated pr to avoid render of the template --- source/_components/telegram_bot.markdown | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/source/_components/telegram_bot.markdown b/source/_components/telegram_bot.markdown index 1450a7ed5ef..e969170558a 100644 --- a/source/_components/telegram_bot.markdown +++ b/source/_components/telegram_bot.markdown @@ -79,3 +79,19 @@ action: - service: homeassistant.turn_off entity_id: switch.vision_zm1601eu5_battery_operated_siren_switch_9_0 ``` + +An example to show the use of event_data in the action: + +``` +- alias: 'Kitchen Telegram Speak' + trigger: + platform: event + event_type: telegram_command + event_data: + command: '/speak' + action: + - service: notify.kitchen_echo + data_template: + message: > + Message from {% raw %}{{ trigger.event.data["from_first"] }}. {% for state in trigger.event.data["args"] %} {{ state }} {% endfor %}{% endraw %} +``` From cce5358130429bf6c60f100d8ed4b9e0d83e525d Mon Sep 17 00:00:00 2001 From: cribbstechnologies Date: Fri, 5 May 2017 00:56:58 -0400 Subject: [PATCH 06/28] adding doc for tilt inversion (#2548) --- source/_components/cover.mqtt.markdown | 1 + 1 file changed, 1 insertion(+) diff --git a/source/_components/cover.mqtt.markdown b/source/_components/cover.mqtt.markdown index 60e10391dab..05b5f801c0c 100755 --- a/source/_components/cover.mqtt.markdown +++ b/source/_components/cover.mqtt.markdown @@ -53,6 +53,7 @@ Configuration variables: - **tilt_closed_value** (*Optional*): The value that will be sent on a `close_cover_tilt` command. Default is `0` - **tilt_opened_value** (*Optional*): The value that will be sent on an `open_cover_tilt` command. Default is `100` - **tilt_status_optimistic** (*Optional*): Flag that determines if tilt works in optimistic mode. Default is `true` if `tilt_status_topic` is not deinfed, else `false` +- **tilt_invert_state** (*Optional*): Flag that determines if open/close are flipped; higher values toward closed and lower values toward open. Default is `False` ## {% linkable_title Examples %} From 8225d97b1876d50308396d1250d381b17a547aa6 Mon Sep 17 00:00:00 2001 From: Andrey Date: Fri, 5 May 2017 07:57:40 +0300 Subject: [PATCH 07/28] Add documentation for Sensibo climate platform (#2546) * Add custom ui documentation * Add documentation for Sensibo climate --- source/_components/climate.sensibo.markdown | 48 ++++++++++++++++++++ source/images/supported_brands/sensibo.png | Bin 0 -> 12710 bytes 2 files changed, 48 insertions(+) create mode 100644 source/_components/climate.sensibo.markdown create mode 100644 source/images/supported_brands/sensibo.png diff --git a/source/_components/climate.sensibo.markdown b/source/_components/climate.sensibo.markdown new file mode 100644 index 00000000000..71111a88477 --- /dev/null +++ b/source/_components/climate.sensibo.markdown @@ -0,0 +1,48 @@ +--- +layout: page +title: "Sensibo A/C controller" +description: "Instructions how to integrate Sensibo A/C controller into Home Assistant." +date: 2017-04-01 15:00 +0200 +sidebar: true +comments: false +sharing: true +footer: true +logo: sensibo.png +ha_category: Climate +ha_release: 0.44 +ha_iot_class: "Cloud Polling" +--- + +Integrates [Sensibo](https://sensibo.com) Air Conditioning controller into Home Assistant. + +To enable this platform, add the following lines to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +climate: + - platform: sensibo + api_key: +``` + +Configuration variables: + +- **api_key** (*Required*): Your API key. +- **id** (*Optional*): A unit ID or a list of IDs. If none specified then all units acessible by the `api_key` will be used. + +To get your API key visit + +

+If you create the API key using a dedicated user (and not your main user), +then in the Sensibo app log you will be able to distinguish between actions +done in the app and actions done by Home Assistant. +

+ +### {% linkable_title Full config example %} +```yaml +climate: + - platform: sensibo + api_key: deadbeaf + id: + - id1 + - id2 +``` diff --git a/source/images/supported_brands/sensibo.png b/source/images/supported_brands/sensibo.png new file mode 100644 index 0000000000000000000000000000000000000000..a90037d3834278c127d89d33eaf66a176e9bbba5 GIT binary patch literal 12710 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 Date: Fri, 5 May 2017 00:58:58 -0400 Subject: [PATCH 08/28] Update install path for openzwave config in venv (#2541) --- source/_docs/z-wave.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_docs/z-wave.markdown b/source/_docs/z-wave.markdown index 68a1ac888f0..4a68c02440d 100644 --- a/source/_docs/z-wave.markdown +++ b/source/_docs/z-wave.markdown @@ -63,7 +63,7 @@ With this installation, your `config_path` needed below will resemble: If you followed along with setting up a virtual environment, your path will be: ```bash -/srv/homeassistant/python-openzwave/openzwave/config +/srv/homeassistant/src/python-openzwave/openzwave/config ``` ### {% linkable_title Configuration %} From 5990bd49db2ad2b971827d04810cd0a4430a00a0 Mon Sep 17 00:00:00 2001 From: Gergely Imreh Date: Fri, 5 May 2017 05:59:09 +0100 Subject: [PATCH 09/28] light-blinkt: add documentation for new light (#2535) --- source/_components/light.blinkt.markdown | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 source/_components/light.blinkt.markdown diff --git a/source/_components/light.blinkt.markdown b/source/_components/light.blinkt.markdown new file mode 100644 index 00000000000..cb268a83ac0 --- /dev/null +++ b/source/_components/light.blinkt.markdown @@ -0,0 +1,23 @@ +--- +layout: page +title: "Blinkt!" +description: "Instructions how to setup Blinkt! RGB LED lights within Home Assistant." +date: 2017-04-30 9:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: raspberry-pi.png +ha_category: Light +ha_iot_class: "Local Push" +--- + +The `blinkt` light platform lets you control the [Blinkt!](https://shop.pimoroni.com/products/blinkt) board, featuring eight super-bright RGB LEDs. + +To enable `blinkt` in your installation, add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +light: + - platform: blinkt +``` From 3560289039830285e8fdfec5e9df6ff9682e8d82 Mon Sep 17 00:00:00 2001 From: Wojciech Bederski Date: Fri, 5 May 2017 07:02:27 +0200 Subject: [PATCH 10/28] document flux_led rgbw mode change (#2472) --- source/_components/light.flux_led.markdown | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/_components/light.flux_led.markdown b/source/_components/light.flux_led.markdown index e85e3083823..e74e6942d96 100644 --- a/source/_components/light.flux_led.markdown +++ b/source/_components/light.flux_led.markdown @@ -54,7 +54,7 @@ Configuration variables within devices list:

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

@@ -101,7 +101,7 @@ Will add a light without the white mode: mode: "rgb" ``` -Will add a light with white mode (default). Changing the brightness will set the bulb in white mode: +Will add a light with rgb+white mode (default). White and RGB channels can be adjusted independently using a slider and color picker respectively. ```yaml 192.168.1.10: From af2dfe88877a4bac8275ef0077a6c2b39f4d37f4 Mon Sep 17 00:00:00 2001 From: Thibault Cohen Date: Fri, 5 May 2017 01:11:09 -0400 Subject: [PATCH 11/28] Add aux heat to ecobee climate (#2286) --- source/_components/climate.ecobee.markdown | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/source/_components/climate.ecobee.markdown b/source/_components/climate.ecobee.markdown index 930f2988c48..a6052218898 100644 --- a/source/_components/climate.ecobee.markdown +++ b/source/_components/climate.ecobee.markdown @@ -61,7 +61,7 @@ The following attributes are provided by the Ecobee Thermostat: `target_temperature_low`, `target_temperature_high`, `desired_fan_mode`, `fan`, `current_hold_mode`, `current_operation`, `operation_list`, `operation_mode`, `mode`, `fan_min_on_time`, `device_state_attributes`, -`is_away_mode_on`, `vacation`, `climate_list`. +`is_away_mode_on`, `vacation`, `climate_list`, `aux_heat`. The attributes `min_temp` and `max_temp` are meaningless constant values. @@ -202,6 +202,13 @@ Returns the currently active vacation or `None`. Returns the list of climates defined in the thermostat. +### {% linkable_title Attribute `aux_heat` %} + +Returns the current auxiliary heat state. + +| Attribute type | Description | +| ---------------| ----------- | +| String | 'on', 'off' ## {% linkable_title Services %} From cbcbf7ecfa50abc55d4ed13a9136ab18bcaeccb9 Mon Sep 17 00:00:00 2001 From: Teagan Glenn Date: Thu, 4 May 2017 23:11:59 -0600 Subject: [PATCH 12/28] Opencv (#2208) * Image processing opencv doc * OpenCV doc * OpenCV logo * Doc updates * Change docs to match opencv component * Update docs * Add comment to example * Add camera config * Add comment to example yaml * Update docs to reflect the camera not being there * Better documentation on configuration and attributes * Reference hub * Set release --- .../image_processing.opencv.markdown | 18 +++++ source/_components/opencv.markdown | 76 ++++++++++++++++++ source/images/OpenCV_Logo.png | Bin 0 -> 18894 bytes 3 files changed, 94 insertions(+) create mode 100644 source/_components/image_processing.opencv.markdown create mode 100644 source/_components/opencv.markdown create mode 100644 source/images/OpenCV_Logo.png diff --git a/source/_components/image_processing.opencv.markdown b/source/_components/image_processing.opencv.markdown new file mode 100644 index 00000000000..9843c7e645a --- /dev/null +++ b/source/_components/image_processing.opencv.markdown @@ -0,0 +1,18 @@ +--- +layout: page +title: "OpenCV" +description: "Instructions how to integrate OpenCV image processing into Home Assistant." +date: 2017-01-25 00:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: OpenCV_Logo.png +ha_category: Image Processing +featured: false +ha_release: 0.44 +--- + +The `opencv` image processing platform allows you to create a standalone image processor without the linked camera entity as mentioned in the [OpenCV page](https://home-assistant.io/components/opencv). + +Please refer to the [component](/components/opencv/) configuration on how to setup the image processor. diff --git a/source/_components/opencv.markdown b/source/_components/opencv.markdown new file mode 100644 index 00000000000..ebfd368c2f6 --- /dev/null +++ b/source/_components/opencv.markdown @@ -0,0 +1,76 @@ +--- +layout: page +title: "OpenCV" +description: "Instructions how to setup OpenCV within Home Assistant." +date: 2017-04-01 22:36 +sidebar: true +comments: false +sharing: true +footer: true +logo: OpenCV_Logo.png +ha_category: Hub +ha_release: 0.44 +ha_iot_class: "Local Push" +--- + +[OpenCV](https://www.opencv.org) is an open source computer vision image and video processing library. + +Some pre-defined classifiers can be found here: https://github.com/opencv/opencv/tree/master/data + +### {% linkable_title Configuration %} + +To setup OpenCV with Home Assistant, add the following section to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry + +opencv: + classifier_group: + - name: Family + add_camera: True + entity_id: + - camera.front_door + - camera.living_room + classifier: + - file_path: /path/to/classifier/face.xml + name: Bob + - file_path: /path/to/classifier/face_profile.xml + name: Jill + min_size: (20, 20) + color: (255, 0, 0) + scale: 1.6 + neighbors: 5 + - file_path: /path/to/classifier/kid_face.xml + name: Little Jimmy +``` + +Configuration variables: + +- **name** (*Required*): The name of the OpenCV image processor. +- **entity_id** (*Required*): The camera entity or list of camera entities that this classification group will be applied to. +- **classifier** (*Required*): The classification configuration for to be applied: + - **file_path** (*Required*): The path to the HAARS or LBP classification file (xml). + - **name** (*Optional*): The classification name, the default is `Face`. + - **min_size** (*Optional*): The minimum size for detection as a tuple `(width, height)`, the default is `(30, 30)`. + - **color** (*Optional*): The color, as a tuple `(Blue, Green, Red)` to draw the rectangle when linked to a dispatcher camera, the default is `(255, 255, 0)`. + - **scale** (*Optional*): The scale to perform when processing, this is a `float` value that must be greater than or equal to `1.0`, default is `1.1`. + - **neighbors** (*Optional*): The minimum number of neighbors required for a match, default is `4`. The higher this number, the more picky the matching will be; lower the number, the more false positives you may experience. + +Once OpenCV is configured, it will create an `image_processing` entity for each classification group/camera entity combination as well as a camera so you can see what Home Assistant sees. + +The attributes on the `image_processing` entity will be: + +```json +'matches': { + 'Bob': [ + (x, y, w, h) + ], + 'Jill': [ + (x, y, w, h) + ], + 'Little Jimmy': [ + (x, y, w, h) + ] +} +``` + diff --git a/source/images/OpenCV_Logo.png b/source/images/OpenCV_Logo.png new file mode 100644 index 0000000000000000000000000000000000000000..8edf677e66d6ef65ee2a851e547bf062009b8d99 GIT binary patch literal 18894 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 Date: Fri, 5 May 2017 07:40:15 +0200 Subject: [PATCH 13/28] Replacement for #2171 (#2569) Replaces #2171 for Limitlessled due to merge failures. --- source/_components/light.limitlessled.markdown | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/source/_components/light.limitlessled.markdown b/source/_components/light.limitlessled.markdown index 114da888784..4dd76e750f5 100644 --- a/source/_components/light.limitlessled.markdown +++ b/source/_components/light.limitlessled.markdown @@ -47,8 +47,8 @@ Configuration variables: - **bridges** array (*Required*): - **host** (*Required*): IP address of the device, eg. `192.168.1.32` - - **version** (*Optional*): Bridge version (default is `6`). Don't use if you aren't sure. - - **port** (*Optional*): Bridge port. Defaults to 5987. + - **version** (*Optional*): Bridge version (default is `6`). + - **port** (*Optional*): Bridge port. Defaults to 5987. For older bridges than v6 choose `8899`. - **groups** array (*Required*): The list of available groups. - **number** (*Required*): Group number (`1`-`4`). Corresponds to the group number on the remote. These numbers may overlap only if the type is different. - **name** (*Required*): Any name you'd like. Must be unique among all configured groups. @@ -58,7 +58,7 @@ Configuration variables: Refer to the [light]({{site_root}}/components/light/) documentation for general property usage, but keep in mind the following notes specific to LimitlessLED. -- **RGBWW** +- **RGBWW** (Only supported on v6 bridges) - *Color*: There are 25,856 color possibilities along the LimitlessLED color spectrum. For colors, hue and saturation can be used, but not lightness. If you select a color with lightness, Home Assistant will calculate the nearest valid LimitlessLED color. In white mode the temperature can be set. - *Temperature*: There are 101 temperature steps. - *Brightness*: There are 101 brightness steps. From 8fc1553eb76abd19dbb9d3d68dacc1f015914f17 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Thu, 4 May 2017 23:13:47 -0700 Subject: [PATCH 14/28] Revamp hass.io add-on docs --- .../_includes/asides/hassio_navigation.html | 10 +- source/addons/index.html | 2 +- source/hassio/addon_config.markdown | 111 ++++++++++++++++++ source/hassio/addon_development.markdown | 14 +++ source/hassio/addon_publishing.markdown | 12 ++ source/hassio/addon_repository.markdown | 36 ++++++ source/hassio/addon_testing.markdown | 14 +++ source/hassio/create_hassio_addon.markdown | 94 --------------- .../create_hassio_addon_repository.markdown | 24 ---- source/hassio/development.markdown | 18 --- 10 files changed, 194 insertions(+), 141 deletions(-) create mode 100644 source/hassio/addon_config.markdown create mode 100644 source/hassio/addon_development.markdown create mode 100644 source/hassio/addon_publishing.markdown create mode 100644 source/hassio/addon_repository.markdown create mode 100644 source/hassio/addon_testing.markdown delete mode 100644 source/hassio/create_hassio_addon.markdown delete mode 100644 source/hassio/create_hassio_addon_repository.markdown delete mode 100644 source/hassio/development.markdown diff --git a/source/_includes/asides/hassio_navigation.html b/source/_includes/asides/hassio_navigation.html index bdb885f868e..f5a716b278e 100644 --- a/source/_includes/asides/hassio_navigation.html +++ b/source/_includes/asides/hassio_navigation.html @@ -7,16 +7,18 @@
  • {% active_link /hassio/installation/ Installation %}
  • {% active_link /addons/ Available add-ons %}
  • +
  • {% active_link /hassio/architecture/ Architecture %}
diff --git a/source/addons/index.html b/source/addons/index.html index 9e137982ac6..1950e807b23 100644 --- a/source/addons/index.html +++ b/source/addons/index.html @@ -10,7 +10,7 @@ footer: true regenerate: true --- -

Add-ons are extensions for your Home Assistant installation.

+

Add-ons for Hass.io allows the user to extend the functionality around Home Assistant. This can be running an application that Home Assistant can integrate with (like an MQTT broker) or to share the configuration via Samba for easy editing from other computers. Add-ons can be configured via the Hass.io panel in Home Assistant.

{% assign addons = site.addons | sort: 'title' %} diff --git a/source/hassio/addon_config.markdown b/source/hassio/addon_config.markdown new file mode 100644 index 00000000000..9c91d81dc2e --- /dev/null +++ b/source/hassio/addon_config.markdown @@ -0,0 +1,111 @@ +--- +layout: page +title: "Add-On Configuration" +description: "Steps on how-to create an add-on for Hass.io." +date: 2017-04-30 13:28 +sidebar: true +comments: false +sharing: true +footer: true +--- + +Each add-on is stored in a folder. The file structure looks like this: + +``` +addon_name/ + Dockerfile + config.json + run.sh +``` + +## {% linkable_title Add-on script %} + +As with every Docker container, you will need a script to run when the container is started. A user might run many add-ons, so it is encouraged to try to stick to Bash scripts if you're doing simple things. + +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. + +```bash +echo '{ "target": "beer" }' | jq -r ".target" +``` + +## {% linkable_title Add-on Docker file %} + +All add-ons are based on Alpine Linux 3.5. Hass.io will automatically substitute the right base image based on the machine architecture. The Dockerfile is also required to have a VERSION environment variable which we will substitute with the version of the add-on. + +``` +FROM %%BASE_IMAGE%% + +ENV VERSION %%VERSION%% +ENV LANG C.UTF-8 + +# Install requirements for add-on +RUN apk add --no-cache jq + +# Copy data for add-on +COPY run.sh / +RUN chmod a+x /run.sh + +CMD [ "/run.sh" ] +``` + +## {% linkable_title Add-on config %} + +The config for an add-on is stored in `config.json`. + +```json +{ + "name": "xy", + "version": "1.2", + "slug": "folder", + "description": "long descripton", + "startup": "before|after|once", + "boot": "auto|manual", + "ports": { + "123/tcp": 123 + }, + "map": ["config", "ssl", "addons", "backup"], + "options": {}, + "schema": {}, + "image": "repo/{arch}-my-custom-addon" +} +``` + +### {% linkable_title Options / Schema %} + +The `options` dict contains all available options and their default value. Set the default value to `null` if the value is required to be given by the user before the add-on can start. Only non-nested arrays are supported. + +```json +{ + "message": "custom things", + "logins": [ + { "username": "beer", "password": "123456" }, + { "username": "cheep", "password": "654321" } + ], + "random": ["haha", "hihi", "huhu", "hghg"], + "link": "http://blebla.com/" +} +``` + +The `schema` looks like `options` but describes how we should validate the user input. For example: + +```json +{ + "message": "str", + "logins": [ + { "username": "str", "password": "str" } + ], + "random": ["str"], + "link": "url" +} +``` + +We support: +- str +- bool +- int +- float +- email +- url diff --git a/source/hassio/addon_development.markdown b/source/hassio/addon_development.markdown new file mode 100644 index 00000000000..92810a8f971 --- /dev/null +++ b/source/hassio/addon_development.markdown @@ -0,0 +1,14 @@ +--- +layout: page +title: "Developing an add-on" +description: "Steps on how-to create an add-on for Hass.io." +date: 2017-04-30 13:28 +sidebar: true +comments: false +sharing: true +footer: true +--- + +Add-ons for Hass.io allows the user to extend the functionality around Home Assistant. This can be running an application that Home Assistant can integrate with (like an MQTT broker) or to share the configuration via Samba for easy editing from other computers. Add-ons can be configured via the Hass.io panel in Home Assistant. + +Under the hood, add-ons are Docker images published in Docker hub. Developers can create GitHub repositories that contain multiple references to add-ons for easy sharing with the community. diff --git a/source/hassio/addon_publishing.markdown b/source/hassio/addon_publishing.markdown new file mode 100644 index 00000000000..a20a3e8d83a --- /dev/null +++ b/source/hassio/addon_publishing.markdown @@ -0,0 +1,12 @@ +--- +layout: page +title: "Publishing your add-on" +description: "Steps on how-to create an add-on for Hass.io." +date: 2017-04-30 13:28 +sidebar: true +comments: false +sharing: true +footer: true +--- + +[placeholder] \ No newline at end of file diff --git a/source/hassio/addon_repository.markdown b/source/hassio/addon_repository.markdown new file mode 100644 index 00000000000..1fa271ad327 --- /dev/null +++ b/source/hassio/addon_repository.markdown @@ -0,0 +1,36 @@ +--- +layout: page +title: "Create an add-on repository" +description: "Add-ons repositories." +date: 2017-04-30 13:28 +sidebar: true +comments: false +sharing: true +footer: true +--- + +Add-ons repository can contain one or more add-ons. Each add-on is stored in it's own unique folder. For it to be indentified as a repository, a repository contains a configuration file. + +[Example add-on repository](https://github.com/home-assistant/hassio-addons-example). + +## Installing a repository + +A user can add a repository by going to the Hass.io panel in Home Assistant, clicking on the store icon in the top right, copy/paste the url of your repostory into the repository textarea and click on "Save". + +## Repository configuration + +Each repository is required to contain `repository.json` at the root of the Git repository. + +```json +{ + "name": "Name of repository", + "url": "http://www.example/addons", + "maintainer": "HomeAssistant Team " +} +``` + +| Key | Description | +| --- | ----------- | +| name | Name of the repository +| url | Homepage of the repository. Here you can explain the various add-ons. +| maintainer | Contact info of the maintainer. diff --git a/source/hassio/addon_testing.markdown b/source/hassio/addon_testing.markdown new file mode 100644 index 00000000000..19b023d1933 --- /dev/null +++ b/source/hassio/addon_testing.markdown @@ -0,0 +1,14 @@ +--- +layout: page +title: "Local add-on testing" +description: "Instructions how to test your add-on locally." +date: 2017-04-30 13:28 +sidebar: true +comments: false +sharing: true +footer: true +--- + +## {% linkable_title Logs %} + +All stdout and stderr is redirected to the Docker logs. The logs can be fetched from the add-on page inside the Hass.io panel in Home Assistant. diff --git a/source/hassio/create_hassio_addon.markdown b/source/hassio/create_hassio_addon.markdown deleted file mode 100644 index 212e096ec59..00000000000 --- a/source/hassio/create_hassio_addon.markdown +++ /dev/null @@ -1,94 +0,0 @@ ---- -layout: page -title: "Create an add-on for Hass.io" -description: "Steps on how-to create an add-on for Hass.io." -date: 2017-04-30 13:28 -sidebar: true -comments: false -sharing: true -footer: true ---- - -Add-ons are docker container they run a script and do some things. User are able to set a add-on specific options. - -### {% linkable_title Add-on folder %} - -``` -addon_name: - Dockerfile - config.json - run.sh -``` - -All add-ons are based on Alpine Linux 3.5. You can use `FROM %%BASE_IMAGE%%` inside your docker file to build the right arch or for automatic build with our scripts. - -Your Docker need also a env variable `VERSION` with the version of the add-on. With our build system include this line: -``` -ENV VERSION %%VERSION%% -``` - -As a user might run many add-ons, it is encouraged to try to stick to Bash scripts if you're doing simple things. - -### {% linkable_title Add-on config %} - -```json -{ - "name": "xy", - "version": "1.2", - "slug": "folder", - "description": "long descripton", - "startup": "before|after|once", - "boot": "auto|manual", - "ports": { - "123/tcp": 123 - }, - "map": ["config", "ssl", "addons", "backup"], - "options": {}, - "schema": {}, - "image": "repo/{arch}-my-custom-addon" -} -``` - -### {% linkable_title Options / Schema %} - -The `options` dict have all available options with default value. If you want to set a value to requered and need to be set from user before it start the addon, set it to null. We support arrays for single deeps. - -```json -{ - "message": "custom things", - "logins": [ - { "username": "beer", "password": "123456" }, - { "username": "cheep", "password": "654321" } - ], - "random": ["haha", "hihi", "huhu", "hghg"], - "link": "http://blebla.com/" -} -``` - -The `schmema` look like the `options` but describe how we should validate the user input. For example above: - -```json -{ - "message": "str", - "logins": [ - { "username": "str", "password": "str" } - ], - "random": ["str"], - "link": "url" -} -``` - -We support: -- str -- bool -- int -- float -- email -- url - -### {% linkable_title SSL %} - -Default you can use `fullchain.pem` and `privkey.pem` from `/ssl` for you stuff. Your SSL addon should also create default this files. - -### {% linkable_title Need to know %} -`/data` is a volume with a persistant store. `/data/options.json` have the user config inside. You can use `jq` inside shell script to parse this data. diff --git a/source/hassio/create_hassio_addon_repository.markdown b/source/hassio/create_hassio_addon_repository.markdown deleted file mode 100644 index fa71064d5ec..00000000000 --- a/source/hassio/create_hassio_addon_repository.markdown +++ /dev/null @@ -1,24 +0,0 @@ ---- -layout: page -title: "Create an add-on repository for Hass.io" -description: "Add-ons repositories." -date: 2017-04-30 13:28 -sidebar: true -comments: false -sharing: true -footer: true ---- - -Look to our example [repository](https://github.com/home-assistant/hassio-addons-example). - -Add-ons repository can have multible add-ons with diferents folders or it can be a single add-on. It is importent that you add the json file to root. - -Add a `repository.json` to the root of your git repository with: - -```json -{ - "name": "Needed, Name of repository", - "url": "http://www.example/addons", - "maintainer": "HomeAssistant Team " -} -``` diff --git a/source/hassio/development.markdown b/source/hassio/development.markdown deleted file mode 100644 index bcb7f084459..00000000000 --- a/source/hassio/development.markdown +++ /dev/null @@ -1,18 +0,0 @@ ---- -layout: page -title: "Hass.io development" -description: "How to get started with Hass.io development." -date: 2017-04-30 13:28 -sidebar: true -comments: false -sharing: true -footer: true ---- - -Seen all the Hass.io stuff and want to built on top of it? That's awesome. - -Before you get started with development, get familiar with [the architecture][arch]. - -[Placeholder] - -[arch]: /hassio/architecture/ \ No newline at end of file From f3fc73c6e8f5ef87ad7625c24f5ae55e3f06fa54 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Thu, 4 May 2017 23:33:06 -0700 Subject: [PATCH 15/28] Add blog post podcast init --- ...2017-05-05-podcast-init-interview.markdown | 22 ++++++++++++++++++ .../2017-05-podcast-init/podcast_init.png | Bin 0 -> 63573 bytes 2 files changed, 22 insertions(+) create mode 100644 source/_posts/2017-05-05-podcast-init-interview.markdown create mode 100644 source/images/blog/2017-05-podcast-init/podcast_init.png diff --git a/source/_posts/2017-05-05-podcast-init-interview.markdown b/source/_posts/2017-05-05-podcast-init-interview.markdown new file mode 100644 index 00000000000..bd88b1aa7a8 --- /dev/null +++ b/source/_posts/2017-05-05-podcast-init-interview.markdown @@ -0,0 +1,22 @@ +--- +layout: post +title: "Podcast.__init__ interview with Paulus Schoutsen" +description: "Tobias Macey interviews our founder Paulus Schoutsen about Home Assistant." +date: 2017-05-05 02:00:00 +date_formatted: "May 5, 2017" +author: Paulus Schoutsen +author_twitter: balloob +comments: true +categories: Community +og_image: /images/blog/2017-05-podcast-init/podcast_init.png +--- + +

+ +

+ +Earlier this year I was interviewed by Tobias Macey from [Podcast.\_\_init\_\_][pc-init] about Python and Home Assistant. Just realized that we never shared this on the blog, oops. Here it is, enjoy! + + + +[pc-init]: https://www.podcastinit.com/ \ No newline at end of file diff --git a/source/images/blog/2017-05-podcast-init/podcast_init.png b/source/images/blog/2017-05-podcast-init/podcast_init.png new file mode 100644 index 0000000000000000000000000000000000000000..dfc74f23e00f825233c3f268f978e5480d8d6ca8 GIT binary patch literal 63573 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%0DFyL4_~1%z_~vX$3(oFS(r- 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 Date: Fri, 5 May 2017 11:57:51 +0200 Subject: [PATCH 16/28] Update addon_publishing.markdown --- source/hassio/addon_publishing.markdown | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/source/hassio/addon_publishing.markdown b/source/hassio/addon_publishing.markdown index a20a3e8d83a..4c237ab141d 100644 --- a/source/hassio/addon_publishing.markdown +++ b/source/hassio/addon_publishing.markdown @@ -9,4 +9,21 @@ sharing: true footer: true --- -[placeholder] \ No newline at end of file +At the end, all add-ons are simple docker container. You can use our build scripts for automate the hole process our you can build your own docker image and push it manual do a docker hub. Inside your addon `config.json` can you use: +```json +{ + "image": "myhub/image-addon-name" +} +{ + "image": "myhub/image-{arch}-addon-name" +} +``` + +To specify from where it will load the addon by user installation. With `{arch}` inside image name, you can build your addon for multible architectures. + + +## {% linkable_title Custom Add-ons %} + +You need a docker hub account. It is also possible to use our own docker registrator. + +## {% linkable_title Core Add-ons %} From 4382a3be4f81496610cdc11c8be818d88857febc Mon Sep 17 00:00:00 2001 From: Pascal Vizeli Date: Fri, 5 May 2017 12:10:09 +0200 Subject: [PATCH 17/28] Update addon_publishing.markdown --- source/hassio/addon_publishing.markdown | 29 +++++++++++++++++++++++-- 1 file changed, 27 insertions(+), 2 deletions(-) diff --git a/source/hassio/addon_publishing.markdown b/source/hassio/addon_publishing.markdown index 4c237ab141d..1b761552da9 100644 --- a/source/hassio/addon_publishing.markdown +++ b/source/hassio/addon_publishing.markdown @@ -9,7 +9,7 @@ sharing: true footer: true --- -At the end, all add-ons are simple docker container. You can use our build scripts for automate the hole process our you can build your own docker image and push it manual do a docker hub. Inside your addon `config.json` can you use: +At the end, all add-ons are simple docker container. You can use our [build scripts][builder] for automate the hole process our you can build your own docker image and push it manual do a docker hub. Inside your addon `config.json` can you use: ```json { "image": "myhub/image-addon-name" @@ -21,9 +21,34 @@ At the end, all add-ons are simple docker container. You can use our build scrip To specify from where it will load the addon by user installation. With `{arch}` inside image name, you can build your addon for multible architectures. +Best praxis is to merge change into a branch like `build`. After you push the addon to docker hub, you can merge this branch to master. ## {% linkable_title Custom Add-ons %} -You need a docker hub account. It is also possible to use our own docker registrator. +You need a docker hub account. It is also possible to use our own docker registrator. Download our [build script][builder] local. + +For a git repository: +```bash +# Test only: +./create_hassio_addon.sh -a amd64 -s addon-slug -r https://github.com/xy/addons -b branchname + +# push do docker hub: +./create_hassio_addon.sh -a amd64 -s addon-slug -r https://github.com/xy/addons -b branchname -p + +# create for all supported arch: +./create_addon_all.sh -s addon-slug -r https://github.com/xy/addons -b branchname -p +``` + +For a local repository: +```bash +# Test only: +./create_hassio_addon.sh -a amd64 -s addon-slug -l /home/xy/my_local_repo + +# push do docker hub: +./create_hassio_addon.sh -a amd64 -s addon-slug -l /home/xy/my_local_repo -p +``` ## {% linkable_title Core Add-ons %} + + +[builder]: https://github.com/home-assistant/hassio-build/tree/master/build-scripts/addons From d7e48fccb1a03459d257d2d2913a448ec5d24d60 Mon Sep 17 00:00:00 2001 From: Pascal Vizeli Date: Fri, 5 May 2017 12:17:19 +0200 Subject: [PATCH 18/28] Update addon_publishing.markdown --- source/hassio/addon_publishing.markdown | 3 --- 1 file changed, 3 deletions(-) diff --git a/source/hassio/addon_publishing.markdown b/source/hassio/addon_publishing.markdown index 1b761552da9..15cbc1a1638 100644 --- a/source/hassio/addon_publishing.markdown +++ b/source/hassio/addon_publishing.markdown @@ -48,7 +48,4 @@ For a local repository: ./create_hassio_addon.sh -a amd64 -s addon-slug -l /home/xy/my_local_repo -p ``` -## {% linkable_title Core Add-ons %} - - [builder]: https://github.com/home-assistant/hassio-build/tree/master/build-scripts/addons From 03817fa78bb433ecfb262d6ea34c1c2fdedfeef6 Mon Sep 17 00:00:00 2001 From: Erik-jan Riemers Date: Sat, 6 May 2017 11:44:30 +0200 Subject: [PATCH 19/28] Updated information (#2572) * Updated information Python script was updated to exclude folders/files so that you don't copy everything. * Minor changes --- .../ecosystem/backup/backup_dropbox.markdown | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/source/_docs/ecosystem/backup/backup_dropbox.markdown b/source/_docs/ecosystem/backup/backup_dropbox.markdown index 9c2472a8247..750360f09a1 100644 --- a/source/_docs/ecosystem/backup/backup_dropbox.markdown +++ b/source/_docs/ecosystem/backup/backup_dropbox.markdown @@ -14,15 +14,18 @@ Backing up and regularly syncing your Home Assistant configuration to [Dropbox]( ### {% linkable_title Requirements %} -You need 2 parts in order to get it working correctly. +You need two parts in order to get it working correctly. -Become the user you run homeassistant from. +Become the user that run Home Assistant. -- A seperate python script that syncs a specific folder. Which can be found [here](https://gist.github.com/riemers/31e3350041fd3e47e489cbc811209d6f) +- A seperate Python script that syncs a specific folder. Which can be found [here](https://gist.github.com/riemers/31e3350041fd3e47e489cbc811209d6f) - The excellent [dropbox uploader script](https://github.com/andreafabrizi/Dropbox-Uploader/blob/master/dropbox_uploader.sh) you can grab the .sh file only. Download those files to a folder of your liking, after that edit both files and change paths accordingly. -### {% linkable_title Step 1: Linking your dropbox account %} + +In the Python script you can specify which files and directories should be excluded. This allows you to skip `secrets.yaml` or the `deps` folder. + +### {% linkable_title Step 1: Linking your Dropbox account %} ```bash $ chmod +x dropbox_uploader.sh @@ -30,16 +33,16 @@ $ ./dropbox_uploader.sh ``` Follow the instructions you see on your screen. -### {% linkable_title Step 2: Running the dropbox uploader %} +### {% linkable_title Step 2: Running the Dropbox uploader %} -Go to the folder you have placed dropbox.py. +Go to the folder you have placed `dropbox.py`. ```bash $ python dropbox.py ``` The first time can take a lot of time since it will upload all your files! -Do note, this will **backup your passwords to dropbox too** +Do note, this will **backup your passwords to Dropbox**. ### {% linkable_title Automate the backup %} @@ -49,5 +52,3 @@ Add it to your crontab, edit the **path/to** part. ```bash $ (crontab -l 2>/dev/null; echo "0 3 * * * python /path/to/dropbox.py") | crontab - ``` - -_The python script is very crude, there is room for improvement with regards to not backing up certain files like cache or files that will be installed by HA again after reinstall. But it gets the job done._ From 11cb3083efb963f78bd2a1d4fc0f05453a682c00 Mon Sep 17 00:00:00 2001 From: Erik-jan Riemers Date: Sat, 6 May 2017 14:37:01 +0200 Subject: [PATCH 20/28] Added how to find long/lat (#2578) --- source/_components/zone.markdown | 2 ++ 1 file changed, 2 insertions(+) diff --git a/source/_components/zone.markdown b/source/_components/zone.markdown index 353f2691d92..830ae7c7c15 100644 --- a/source/_components/zone.markdown +++ b/source/_components/zone.markdown @@ -47,6 +47,8 @@ Configuration variables: - **icon** (*Optional*): Optional icon to show instead of name. - **passive** (*Optional*): Optional boolean to only use the zone for automation and hide it from the UI and not use the zone for device tracker name. Defaults to false. +To find your latitude / longtitude of a certain place you can use for example [Google Maps](https://www.google.nl/maps/) or [Bing Maps](https://www.bing.com/maps). Just right click and copy the coordinates from there (Bing) or click on the "What is here?" (Google) + #### {% linkable_title Home zone %} If no configuration is given, the `zone` component will create a zone for home. This zone will use location given in the `configuration.yaml` file and have a radius of 100 meters. To override this, create a zone configuration and name it **'Home'**. From c1b44fb627f015c99d733c57dec4e7761857aaee Mon Sep 17 00:00:00 2001 From: viegelinsch Date: Sat, 6 May 2017 14:45:07 +0200 Subject: [PATCH 21/28] correct quotation mark to work correct (#2575) --- source/_components/sensor.miflora.markdown | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/_components/sensor.miflora.markdown b/source/_components/sensor.miflora.markdown index 14738c656bb..55e280bc654 100644 --- a/source/_components/sensor.miflora.markdown +++ b/source/_components/sensor.miflora.markdown @@ -21,7 +21,7 @@ To use your Mi Flora plant sensor in your installation, add the following to you # Example configuration.yaml entry sensor: - platform: miflora - mac: "xx:xx:xx:xx:xx:xx" + mac: 'xx:xx:xx:xx:xx:xx' monitored_conditions: - temperature ``` @@ -50,7 +50,7 @@ A full configuration example could looks the one below: # Example configuration.yaml entry sensor: - platform: miflora - mac: "xx:xx:xx:xx:xx:xx" + mac: 'xx:xx:xx:xx:xx:xx' name: Flower 1 force_update: false median: 3 From 2dbf75322cdb57e3226877898ef0fd126bc36944 Mon Sep 17 00:00:00 2001 From: Pascal Vizeli Date: Sat, 6 May 2017 20:10:19 +0200 Subject: [PATCH 22/28] Add dlib doc (#2576) --- ...image_processing.dlib_face_detect.markdown | 34 ++++++++++++++++ ...age_processing.dlib_face_identify.markdown | 38 ++++++++++++++++++ ..._processing.microsoft_face_detect.markdown | 1 - source/images/supported_brands/dlib.png | Bin 0 -> 7894 bytes 4 files changed, 72 insertions(+), 1 deletion(-) create mode 100644 source/_components/image_processing.dlib_face_detect.markdown create mode 100644 source/_components/image_processing.dlib_face_identify.markdown create mode 100644 source/images/supported_brands/dlib.png diff --git a/source/_components/image_processing.dlib_face_detect.markdown b/source/_components/image_processing.dlib_face_detect.markdown new file mode 100644 index 00000000000..e6a9fc48981 --- /dev/null +++ b/source/_components/image_processing.dlib_face_detect.markdown @@ -0,0 +1,34 @@ +--- +layout: page +title: "Dlib Face Detect" +description: "Instructions how to integrate Dlib Face Detect into Home Assistant." +date: 2017-05-05 00:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: dlib.png +ha_category: Image Processing +featured: false +ha_release: 0.44 +--- + +The `dlib_face_detect` image processing platform allows you to use the [Dlib](http://www.dlib.net/) through Home Assistant. This platform enables you do detect face on camera and fire a event with attributes. + +For using the result inside an automation rule, take a look at the [component](/components/image_processing/) page. + +### {% linkable_title Configuration Home Assistant %} + +```yaml +# Example configuration.yaml entry +image_processing: + - platform: dlib_face_detect + source: + - entity_id: camera.door +``` + +Configuration variables: + +- **source** array (*Required*): List of image sources. + - **entity_id** (*Required*): A camera entity id to get picture from. + - **name** (*Optional*): This parameter allows you to override the name of your `image_processing` entity. diff --git a/source/_components/image_processing.dlib_face_identify.markdown b/source/_components/image_processing.dlib_face_identify.markdown new file mode 100644 index 00000000000..f7f1ab1e75b --- /dev/null +++ b/source/_components/image_processing.dlib_face_identify.markdown @@ -0,0 +1,38 @@ +--- +layout: page +title: "Dlib Face Identify" +description: "Instructions how to integrate Dlib Face Identify into Home Assistant." +date: 2017-01-25 00:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: dlib.png +ha_category: Image Processing +featured: false +ha_release: 0.44 +--- + +The `dlib_face_identify` image processing platform allows you to use the [Dlib](http://www.dlib.net/) through Home Assistant. This platform allow you do identify persons on camera and fire a event with identify persons. + +For using the result inside an automation rule, take a look at the [component](/components/image_processing/) page. + +### {% linkable_title Configuration Home Assistant %} + +```yaml +# Example configuration.yaml entry +image_processing: + - platform: dlib_face_identify + source: + - entity_id: camera.door + faces: + Jon: /home/hass/jon.jpg + Bob: /home/hass/bob.jpg +``` + +Configuration variables: + +- **source** array (*Required*): List of image sources. + - **entity_id** (*Required*): A camera entity id to get picture from. + - **name** (*Optional*): This parameter allows you to override the name of your `image_processing` entity. +- **faces** array (*Required*): List of faces sources. diff --git a/source/_components/image_processing.microsoft_face_detect.markdown b/source/_components/image_processing.microsoft_face_detect.markdown index aa2a1cd1a83..c15e5baab07 100644 --- a/source/_components/image_processing.microsoft_face_detect.markdown +++ b/source/_components/image_processing.microsoft_face_detect.markdown @@ -31,7 +31,6 @@ image_processing: Configuration variables: -- **group** (*Required*): Microsoft Face group used to detect the person. - **confidence** (*Optional*): The minimum of confidence in percent to process with Home Assistant. Defaults to 80. - **source** array (*Required*): List of image sources. - **entity_id** (*Required*): A camera entity id to get picture from. diff --git a/source/images/supported_brands/dlib.png b/source/images/supported_brands/dlib.png new file mode 100644 index 0000000000000000000000000000000000000000..5fafe7cd34bbe42ecd725da520886bbb89c89dde GIT binary patch literal 7894 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 ANB{r; literal 0 HcmV?d00001 From 2f21c9b81d1e8a93831bae11d059faa672576a66 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Sat, 6 May 2017 13:23:53 -0700 Subject: [PATCH 23/28] Add release blog post --- .../binary_sensor.maxcube.markdown | 16 + source/_components/climate.maxcube.markdown | 16 + .../image_processing.opencv.markdown | 2 +- source/_components/opencv.markdown | 2 +- source/_components/plant.markdown | 54 ++ source/_components/sensor.ios.markdown | 0 .../2017-04-22-ikea-tradfri--spotify.markdown | 3 - .../2017-05-06-zigbee-opencv-dlib.markdown | 487 ++++++++++++++++++ .../images/blog/2017-05-0.44/components.png | Bin 0 -> 33354 bytes source/images/supported_brands/opencv.png | Bin 0 -> 2362 bytes 10 files changed, 575 insertions(+), 5 deletions(-) create mode 100644 source/_components/binary_sensor.maxcube.markdown create mode 100644 source/_components/climate.maxcube.markdown create mode 100644 source/_components/plant.markdown create mode 100644 source/_components/sensor.ios.markdown create mode 100644 source/_posts/2017-05-06-zigbee-opencv-dlib.markdown create mode 100644 source/images/blog/2017-05-0.44/components.png create mode 100644 source/images/supported_brands/opencv.png diff --git a/source/_components/binary_sensor.maxcube.markdown b/source/_components/binary_sensor.maxcube.markdown new file mode 100644 index 00000000000..ac6e5299ba9 --- /dev/null +++ b/source/_components/binary_sensor.maxcube.markdown @@ -0,0 +1,16 @@ +--- +layout: page +title: "eQ-3 MAX! Cube binary sensors" +description: "Instructions on how to integrate eQ-3 MAX! components with Home Assistant via eQ-3 MAX! Cube." +date: 2017-02-04 22:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: maxcube.png +ha_category: Climate +ha_release: "0.40" +ha_iot_class: "Local Polling" +--- + +See instructions at the [main component](/components/maxcube/). diff --git a/source/_components/climate.maxcube.markdown b/source/_components/climate.maxcube.markdown new file mode 100644 index 00000000000..ac6e5299ba9 --- /dev/null +++ b/source/_components/climate.maxcube.markdown @@ -0,0 +1,16 @@ +--- +layout: page +title: "eQ-3 MAX! Cube binary sensors" +description: "Instructions on how to integrate eQ-3 MAX! components with Home Assistant via eQ-3 MAX! Cube." +date: 2017-02-04 22:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: maxcube.png +ha_category: Climate +ha_release: "0.40" +ha_iot_class: "Local Polling" +--- + +See instructions at the [main component](/components/maxcube/). diff --git a/source/_components/image_processing.opencv.markdown b/source/_components/image_processing.opencv.markdown index 9843c7e645a..99554722af6 100644 --- a/source/_components/image_processing.opencv.markdown +++ b/source/_components/image_processing.opencv.markdown @@ -7,7 +7,7 @@ sidebar: true comments: false sharing: true footer: true -logo: OpenCV_Logo.png +logo: opencv.png ha_category: Image Processing featured: false ha_release: 0.44 diff --git a/source/_components/opencv.markdown b/source/_components/opencv.markdown index ebfd368c2f6..301d1b3ed39 100644 --- a/source/_components/opencv.markdown +++ b/source/_components/opencv.markdown @@ -7,7 +7,7 @@ sidebar: true comments: false sharing: true footer: true -logo: OpenCV_Logo.png +logo: opencv.png ha_category: Hub ha_release: 0.44 ha_iot_class: "Local Push" diff --git a/source/_components/plant.markdown b/source/_components/plant.markdown new file mode 100644 index 00000000000..e78f946c382 --- /dev/null +++ b/source/_components/plant.markdown @@ -0,0 +1,54 @@ +--- +layout: page +title: "Plant Observer" +description: "Automation component to observe the status of your plants." +date: 2017-05-06 08:00 +sidebar: true +comments: false +sharing: true +footer: true +ha_category: Other +ha_release: 0.44 +--- + +```yaml +plant: + simulated_plant: + sensors: + moisture: sensor.mqtt_plant_moisture + battery: sensor.mqtt_plant_battery + temperature: sensor.mqtt_plant_temperature + conductivity: sensor.mqtt_plant_conductivity + brightness: sensor.mqtt_plant_brightness + min_moisture: 20 + max_moisture: 60 + min_battery: 17 + min_conductivity: 500 + min_temperature: 15 +``` + +## Using plain MQTT sensor to get the data + +```yaml +sensor: + - platform: mqtt + name: mqtt_plant_moisture + state_topic: test/simulated_plant + value_template: '{{ value_json.moisture }}' + - platform: mqtt + name: mqtt_plant_battery + state_topic: test/simulated_plant + value_template: '{{ value_json.battery }}' + - platform: mqtt + name: mqtt_plant_temperature + state_topic: test/simulated_plant + value_template: '{{ value_json.temperature }}' + - platform: mqtt + name: mqtt_plant_conductivity + state_topic: test/simulated_plant + value_template: '{{ value_json.conductivity }}' + - platform: mqtt + name: mqtt_plant_brightness + state_topic: test/simulated_plant + value_template: '{{ value_json.brightness }}' +``` diff --git a/source/_components/sensor.ios.markdown b/source/_components/sensor.ios.markdown new file mode 100644 index 00000000000..e69de29bb2d diff --git a/source/_posts/2017-04-22-ikea-tradfri--spotify.markdown b/source/_posts/2017-04-22-ikea-tradfri--spotify.markdown index 4bd3b6b7322..e99a1a0371b 100644 --- a/source/_posts/2017-04-22-ikea-tradfri--spotify.markdown +++ b/source/_posts/2017-04-22-ikea-tradfri--spotify.markdown @@ -486,8 +486,6 @@ Experiencing issues introduced by this release? Please report them in our [issue [wemo docs]: /components/wemo/ [zwave docs]: /components/zwave/ [zwave.node_entity docs]: /components/zwave.node_entity/ -<<<<<<< HEAD -======= [forum]: https://community.home-assistant.io/ [gitter]: https://gitter.im/home-assistant/home-assistant [issue]: https://github.com/home-assistant/home-assistant/issues @@ -521,4 +519,3 @@ Experiencing issues introduced by this release? Please report them in our [issue [notify.html5 docs]: https://home-assistant.io/components/notify.html5/ [notify.telegram docs]: https://home-assistant.io/components/notify.telegram/ [telegram_bot.polling docs]: https://home-assistant.io/components/telegram_bot.polling/ ->>>>>>> current diff --git a/source/_posts/2017-05-06-zigbee-opencv-dlib.markdown b/source/_posts/2017-05-06-zigbee-opencv-dlib.markdown new file mode 100644 index 00000000000..f6c0334ea22 --- /dev/null +++ b/source/_posts/2017-05-06-zigbee-opencv-dlib.markdown @@ -0,0 +1,487 @@ +--- +layout: post +title: "Home Assistant 0.44: ZigBee, OpenCV and DLib" +description: "Speak natively with Zigbee network, detect faces with OpenCV: 0.44 is here." +date: 2017-05-06 01:04:05 +0000 +date_formatted: "May 6, 2017" +author: Paulus Schoutsen +author_twitter: balloob +comments: true +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 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) + +Another great new addition is OpenCV by [Teagan Glenn][@teagan42]. So now you'll be able to unlock all the cool stuff from OpenCV right in Home Assistant. And if OpenCV is not your style, you can try out the new DLib integration added by [Pascal Vizeli][@pvizeli] in this release. + +This release also includes a [new component][rss_feed_template docs] to dynamically generate RSS feeds based on a template. This means that any RSS widget on your phone, tablet or computer can now be used to show Home Assistant data! + +Enjoy! + +## {% 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 New integrations %} + +- Pushbullet notification sensor ([@jotunacorn] - [#7182]) ([sensor.pushbullet docs]) +- Add https certificate expiry sensor ([@fabfurnari] - [#7272]) ([sensor.cert_expiry docs]) +- RSS feed template ([@micw] - [#7032]) ([rss_feed_template docs]) +- Add support for Zigbee Home Automation ([@rcloran] - [#6263]) ([zha docs]) ([binary_sensor.zha docs]) ([light.zha docs]) ([sensor.zha docs]) ([switch.zha docs]) +- light.blinkt: add support for Blinkt! lights on Raspberry Pi ([@imrehg] - [#7377]) ([light.blinkt docs]) +- Plant automation ([@ChristianKuehnel] - [#7131]) ([plant docs]) +- Add Eight sleep component ([@mezz64] - [#7275]) ([eight_sleep docs]) ([binary_sensor.eight_sleep docs]) ([sensor.eight_sleep docs]) +- OpenGarage support ([@swbradshaw] - [#7338]) ([cover.opengarage docs]) +- Add Sensibo climate platform ([@andrey-git] - [#7379]) ([climate docs]) +- Pilight binary sensor components ([@zeltom] - [#6774]) ([binary_sensor.pilight docs]) +- Opencv ([@Teagan42] - [#7261]) ([opencv docs]) ([image_processing.opencv docs]) +- Add new sensor: Enviro pHAT ([@imrehg] - [#7427]) ([sensor.envirophat docs]) +- Add support for face recognition with dlib ([@pvizeli] - [#7421]) ([image_processing.dlib_face_detect docs]) ([image_processing.dlib_face_identify docs]) + + +## {% linkable_title Breaking changes %} + +- Python Open Z-Wave made a release that fixed string processing. This was backwards incompatible. We have updated our code so you'll have to update to the latest Python Open Z-Wave with this release. You can also wait one release, as next release we'll introduce automatic installing of Python Open Z-Wave. ([@keatontaylor] - [#7266]) ([climate.zwave docs]) (breaking change) +- InfluxDB configuration to blacklist domains has been updated to allow more features. ([@janLo] - [#7264]) (breaking change) + +```yaml +# New format +influxdb: + exclude: + entities: + - entity.id1 + - entity.id2 + domains: + - automation + include: + entities: + - entity.id3 + - entity.id4 +``` + +- The Automatic device tracker has been converted from polling to websocket push. This requires you to make a change in your Automatic account, see [our documentation for instructions][device_tracker.automatic docs]. ([@armills] - [#7404]) ([device_tracker.automatic docs]) (breaking change) +- The LimitlessLED color temperatures have been turned around to work like other lights. To maintain previous colors you must adjust the color_temp value in your light.turn_on calls to 654 minus your old value (for example, 280 becomes 374). ([@amelchio] - [#7359]) (breaking change) +- Joao apps will now require an API key to be set for all commands. ([@nkgilley] - [#7443]) ([joaoapps_join docs]) ([notify.joaoapps_join docs]) (breaking change) + +## {% linkable_title All changes %} + +- LIFX light effects ([@amelchio] - [#7145]) ([light.lifx docs]) +- HassIO API v2 ([@pvizeli] - [#7201]) +- Capture and log pip install error output ([@postlund] - [#7200]) +- Support xy_color with LIFX lights ([@amelchio] - [#7208]) ([light.lifx docs]) +- Update ios.py ([@biacz] - [#7160]) +- Fix arwn platform to update hass state when events are received ([@sdague] - [#7202]) +- Issue 6749 updated pylgtv to 0.1.6 to fix thread leak in asyncio loop ([@hmn] - [#7199]) ([media_player.webostv docs]) ([notify.webostv docs]) +- tradfri: Improve color temp support detection ([@balloob] - [#7211]) +- Fix tradfri lights ([@MartinHjelmare] - [#7212]) +- Bump version to 0.44.0.dev0 ([@fabaff] - [#7217]) +- Pushbullet notification sensor ([@jotunacorn] - [#7182]) ([sensor.pushbullet docs]) (new-platform) +- Zwave cover workaround for graber shades. ([@turbokongen] - [#7204]) ([cover.zwave docs]) +- Fixed typo and clarified details for Lifx effects ([@arsaboo] - [#7226]) +- Remove superfluous comments and update ordering ([@fabaff] - [#7227]) ([maxcube docs]) ([binary_sensor.maxcube docs]) ([climate.maxcube docs]) +- lyft sensor: re-enable Prime Time rate attribute ([@drkp] - [#6982]) ([sensor.lyft docs]) +- Bump a couple of dependencies ([@mjg59] - [#7231]) ([light.avion docs]) ([light.decora docs]) +- Refactor lyft sensor update ([@armills] - [#7233]) ([sensor.lyft docs]) +- LIFX: avoid "Unable to remove unknown listener" warning ([@amelchio] - [#7235]) ([light.lifx docs]) +- Upgrade pygatt to 3.1.1 ([@fabaff] - [#7220]) +- Upgrade mutagen to 1.37.0 ([@fabaff] - [#7216]) +- Upgrade speedtest-cli to 1.0.5 ([@fabaff] - [#7215]) +- Upgrade paho-mqtt to 1.2.3 ([@fabaff] - [#7214]) +- Upgrade aiohttp_cors to 0.5.3 ([@fabaff] - [#7213]) +- Use consts and string formatting ([@fabaff] - [#7243]) ([notify.instapush docs]) +- Pushed to version 0.4.0 of denonavr which also includes experimental support for Marantz receivers ([@scarface-4711] - [#7250]) +- Add notice regarding submission of analytics ([@craftyguy] - [#7263]) +- Iterating the dictionary directly ([@fabaff] - [#7251]) +- Don't use len(SEQUENCE) as condition value ([@fabaff] - [#7249]) +- Workround for wemo subscription bug. ([@pavoni] - [#7245]) ([wemo docs]) ([switch.wemo docs]) +- Fix telegram webhooks ([@MartinHjelmare] - [#7236]) ([telegram_bot docs]) ([telegram_bot.webhooks docs]) +- Work around bad content-type in Hook api response ([@KlaasH] - [#7267]) ([switch.hook docs]) +- Rfxtrx upgrade lib 0.18 ([@danielhiversen] - [#7273]) ([rfxtrx docs]) +- WIP: HassIO allow to access to container logs. ([@pvizeli] - [#7271]) +- Update aiolifx ([@amelchio] - [#7279]) ([light.lifx docs]) +- Refactor matrix notify service ([@Cadair] - [#7122]) ([notify.matrix docs]) +- Add support for Ukrainian Language in Google TTS ([@LvivEchoes] - [#7278]) +- Add https certificate expiry sensor ([@fabfurnari] - [#7272]) ([sensor.cert_expiry docs]) (new-platform) +- Fix telegram_polling no first_name or last_name ([@darookee] - [#7281]) ([telegram_bot docs]) +- Add script to import state events to InfluxDB ([@janLo] - [#7254]) +- Fix HassIO bug with supervisor update & log ([@pvizeli] - [#7282]) +- Updating ping binary sensor with Windows support ([@patrickeasters] - [#7253]) ([binary_sensor.ping docs]) +- Fixes utf-8 encoding no longer required by python-openzwave0.3.3 ([@keatontaylor] - [#7266]) ([climate.zwave docs]) (breaking change) +- Recorder: Check for ENTITY_ID key that contains None value ([@balloob] - [#7287]) ([recorder docs]) +- Upgrade pytradfri to 1.1 ([@balloob] - [#7290]) +- Adding group control to tradfri light component ([@cyberjunky] - [#7248]) ([light.tradfri docs]) +- Feature/rss feed template ([@micw] - [#7032]) ([rss_feed_template docs]) (new-platform) +- Add support for Zigbee Home Automation ([@rcloran] - [#6263]) ([zha docs]) ([binary_sensor.zha docs]) ([light.zha docs]) ([sensor.zha docs]) ([switch.zha docs]) (new-platform) +- Added scene controller support to the vera component, along with proper polling when a vera device needs it ([@alanfischer] - [#7234]) ([vera docs]) ([sensor.vera docs]) +- Don't stack up error messages, fix link, and ordering ([@fabaff] - [#7291]) ([sensor.cert_expiry docs]) +- Fix breaking SSL in test HTML5 ([@balloob] - [#7310]) ([notify.html5 docs]) +- Upgrade pyhomematic, extend device support ([@danielperna84] - [#7303]) +- Issue 7218 update pylgtv to 0.1.7 ([@hmn] - [#7302]) ([media_player.webostv docs]) ([notify.webostv docs]) +- Version bump of aioautomatic ([@armills] - [#7300]) ([device_tracker.automatic docs]) +- Upgrade python-telegram-bot to 5.3.1 ([@fabaff] - [#7311]) ([notify.telegram docs]) ([telegram_bot.polling docs]) ([telegram_bot.webhooks docs]) +- Disable Open Z-Wave in Docker ([@balloob] - [#7315]) +- LIFX: use white light when setting a specific temperature ([@amelchio] - [#7256]) ([light.lifx docs]) +- Allow InfluxDB to blacklist domains ([@janLo] - [#7264]) (breaking change) +- Hassio api v3 ([@balloob] - [#7323]) +- Update frontend ([@balloob] - [#7324]) +- Reduce color_xy_brightness_to_hsv to color_xy_to_hs ([@amelchio] - [#7320]) ([light.hue docs]) ([light.lifx docs]) +- Fix broken docker build ([@turbokongen] - [#7316]) +- Re-enable Open Z-Wave in Dockerfile ([@balloob] - [#7325]) +- Version bump for automatic ([@armills] - [#7329]) ([device_tracker.automatic docs]) +- Right fix for Python Open Z-Wave in Docker ([@balloob] - [#7337]) +- Use four-digits year ([@fabaff] - [#7336]) +- Allow multiple recipients for SMTP notify ([@amelchio] - [#7319]) ([notify.smtp docs]) +- Add auxheat to ecobee climate ([@titilambert] - [#6562]) ([climate.ecobee docs]) +- Properly return self._unit_of_measurement in the unit_of_measurement function ([@robbiet480] - [#7341]) ([sensor.ios docs]) +- Multiple changes (typo, ordering, docstrings, timeouts) ([@fabaff] - [#7343]) ([cover.garadget docs]) +- Upgrade Flux led lb to 0.19 ([@danielhiversen] - [#7352]) ([light.flux_led docs]) +- Add debug logging to pyvera events. ([@pavoni] - [#7364]) ([vera docs]) +- Upgrade xmltodict to 0.11.0 ([@fabaff] - [#7355]) +- Upgrade speedtest-cli to 1.0.6 ([@fabaff] - [#7354]) ([sensor.speedtest docs]) +- Remove global limit on white light temperature ([@amelchio] - [#7206]) ([light docs]) ([light.hue docs]) ([light.zwave docs]) ([switch.flux docs]) +- Remove state property from alarmdecoder binary sensor ([@balloob] - [#7370]) ([binary_sensor.alarmdecoder docs]) +- Remove binary sensor platforms implementing state property ([@balloob] - [#7371]) ([binary_sensor.octoprint docs]) ([binary_sensor.workday docs]) +- Feature/add mikrotik device tracker ([@LvivEchoes] - [#7366]) +- Netdisco now returns a dictionary while it used to be a tuple, fixed ([@JasonCarter80] - [#7350]) +- Create knx.py ([@onsmam] - [#7356]) +- light.sensehat: plugin to control the 8x8 LED matrix on a Sense hat ([@imrehg] - [#7365]) +- Update docstrings ([@fabaff] - [#7361]) ([ecobee docs]) ([enocean docs]) ([zha docs]) +- Flux switch: avoid updates when off ([@amelchio] - [#7363]) ([switch.flux docs]) +- Zoneminder: Fixed undefined index error ([@bah2830] - [#7340]) +- optimize remote calls and apps on webostv media_player ([@hmn] - [#7191]) ([media_player.webostv docs]) +- binary_sensor.workday: fix handling of states vs provinces ([@drkp] - [#7162]) ([binary_sensor.workday docs]) +- Upgrade voluptuous to 0.10.5 ([@fabaff] - [#7107]) +- Remove ordered_dict validator ([@balloob] - [#7375]) +- light.blinkt: add support for Blinkt! lights on Raspberry Pi ([@imrehg] - [#7377]) ([light.blinkt docs]) (new-platform) +- improve handling of flux_led lights in RGBW mode ([@wuub] - [#7221]) +- Plant (replacement for MiGardener) ([@ChristianKuehnel] - [#7131]) ([plant docs]) (new-platform) +- Add support for shuffle toggling on Spotify component. ([@abmantis] - [#7339]) ([media_player docs]) ([media_player.spotify docs]) +- Upgrade Ring to 0.1.4 ([@tchellomello] - [#7386]) +- Updated docstrings ([@arsaboo] - [#7383]) ([camera.netatmo docs]) +- Fix impulse events, added error event for Homegear ([@danielperna84] - [#7349]) ([homematic docs]) +- Fix YAML dump ([@balloob] - [#7388]) +- Migrate updater to aiohttp ([@balloob] - [#7387]) ([updater docs]) +- Remove path whitelisting for hassio ([@balloob] - [#7399]) +- Add Eight sleep component ([@mezz64] - [#7275]) ([eight_sleep docs]) ([binary_sensor.eight_sleep docs]) ([sensor.eight_sleep docs]) (new-platform) +- OpenGarage support ([@swbradshaw] - [#7338]) ([cover.opengarage docs]) (new-platform) +- Clean up requirements ([@andrey-git] - [#7391]) ([nuimo_controller docs]) ([sensor.dht docs]) ([sensor.thinkingcleaner docs]) ([switch.thinkingcleaner docs]) +- correct MQTT subscription filter ([@amigian74] - [#7269]) ([mqtt docs]) +- Update docstrings ([@fabaff] - [#7374]) +- light.blinkt: update brightness control logic ([@imrehg] - [#7389]) +- Update docstrings ([@fabaff] - [#7405]) +- Update LIFX default color for breathe/pulse effects ([@amelchio] - [#7407]) +- LIFX: Add transition option to colorloop effect ([@amelchio] - [#7410]) +- light.sensehat: brightness control logic update ([@imrehg] - [#7409]) ([light.sensehat docs]) +- Add Sensibo climate platform ([@andrey-git] - [#7379]) ([climate docs]) (new-platform) +- Pilight binary sensor components ([@zeltom] - [#6774]) ([binary_sensor.pilight docs]) (new-platform) +- applx suggested fix from issue #6573 ([@wokar] - [#7390]) ([sensor.zamg docs]) +- remove charset if set in content type header ([@hmn] - [#7411]) ([media_player docs]) +- Convert automatic device tracker to push updates ([@armills] - [#7404]) ([device_tracker.automatic docs]) (breaking change) +- light.piglow update ([@imrehg] - [#7408]) ([light.piglow docs]) +- Opencv ([@Teagan42] - [#7261]) ([opencv docs]) ([image_processing.opencv docs]) (new-platform) +- Fixed extra R in variable name. ([@cyberplant] - [#7418]) +- Update docstrings ([@fabaff] - [#7420]) +- ps - fix opencv ([@balloob] - [#7419]) +- Comment out opencv-python that is not installable on arm ([@andrey-git] - [#7426]) +- Reverse limitlessled color_temp range ([@amelchio] - [#7359]) (breaking change) +- Guard against no content type ([@balloob] - [#7432]) ([media_player docs]) +- wsock.send_json is a coroutine ([@balloob] - [#7433]) +- ps - fix websocket yielding pt2 ([@balloob] - [#7434]) +- Upgrade temperusb to 1.5.3 ([@fabaff] - [#7428]) +- update for pypi ([@nkgilley] - [#7430]) +- Add new sensor: Enviro pHAT ([@imrehg] - [#7427]) ([sensor.envirophat docs]) (new-platform) +- Added osramlightify groups. ([@deisi] - [#7376]) ([light.osramlightify docs]) +- Add support for face recognition with dlib ([@pvizeli] - [#7421]) ([image_processing.dlib_face_detect docs]) ([image_processing.dlib_face_identify docs]) ([image_processing.microsoft_face_detect docs]) (new-platform) +- Replace pymailgun with pymailgunner ([@pschmitt] - [#7436]) ([notify.mailgun docs]) +- Suppress logs when octorpint goes offline ([@w1ll1am23] - [#7441]) ([octoprint docs]) +- Update join ([@nkgilley] - [#7443]) ([joaoapps_join docs]) ([notify.joaoapps_join docs]) (breaking change) +- Bump pyvera version - handle malformed json replies in poll thread. ([@pavoni] - [#7440]) ([vera docs]) +- Fix for broken virtual keys ([@danielperna84] - [#7439]) ([homematic docs]) +- Get new token to keep pubnub updates working ([@w1ll1am23] - [#7437]) ([wink docs]) +- Add hass to rfxtrx object ([@danielhiversen] - [#6844]) +- sensor.envirophat: add missing requirement ([@imrehg] - [#7451]) ([sensor.envirophat docs]) + +[#6263]: https://github.com/home-assistant/home-assistant/pull/6263 +[#6562]: https://github.com/home-assistant/home-assistant/pull/6562 +[#6774]: https://github.com/home-assistant/home-assistant/pull/6774 +[#6844]: https://github.com/home-assistant/home-assistant/pull/6844 +[#6982]: https://github.com/home-assistant/home-assistant/pull/6982 +[#7032]: https://github.com/home-assistant/home-assistant/pull/7032 +[#7107]: https://github.com/home-assistant/home-assistant/pull/7107 +[#7122]: https://github.com/home-assistant/home-assistant/pull/7122 +[#7131]: https://github.com/home-assistant/home-assistant/pull/7131 +[#7145]: https://github.com/home-assistant/home-assistant/pull/7145 +[#7160]: https://github.com/home-assistant/home-assistant/pull/7160 +[#7162]: https://github.com/home-assistant/home-assistant/pull/7162 +[#7182]: https://github.com/home-assistant/home-assistant/pull/7182 +[#7191]: https://github.com/home-assistant/home-assistant/pull/7191 +[#7199]: https://github.com/home-assistant/home-assistant/pull/7199 +[#7200]: https://github.com/home-assistant/home-assistant/pull/7200 +[#7201]: https://github.com/home-assistant/home-assistant/pull/7201 +[#7202]: https://github.com/home-assistant/home-assistant/pull/7202 +[#7204]: https://github.com/home-assistant/home-assistant/pull/7204 +[#7206]: https://github.com/home-assistant/home-assistant/pull/7206 +[#7208]: https://github.com/home-assistant/home-assistant/pull/7208 +[#7211]: https://github.com/home-assistant/home-assistant/pull/7211 +[#7212]: https://github.com/home-assistant/home-assistant/pull/7212 +[#7213]: https://github.com/home-assistant/home-assistant/pull/7213 +[#7214]: https://github.com/home-assistant/home-assistant/pull/7214 +[#7215]: https://github.com/home-assistant/home-assistant/pull/7215 +[#7216]: https://github.com/home-assistant/home-assistant/pull/7216 +[#7217]: https://github.com/home-assistant/home-assistant/pull/7217 +[#7220]: https://github.com/home-assistant/home-assistant/pull/7220 +[#7221]: https://github.com/home-assistant/home-assistant/pull/7221 +[#7226]: https://github.com/home-assistant/home-assistant/pull/7226 +[#7227]: https://github.com/home-assistant/home-assistant/pull/7227 +[#7231]: https://github.com/home-assistant/home-assistant/pull/7231 +[#7233]: https://github.com/home-assistant/home-assistant/pull/7233 +[#7234]: https://github.com/home-assistant/home-assistant/pull/7234 +[#7235]: https://github.com/home-assistant/home-assistant/pull/7235 +[#7236]: https://github.com/home-assistant/home-assistant/pull/7236 +[#7243]: https://github.com/home-assistant/home-assistant/pull/7243 +[#7245]: https://github.com/home-assistant/home-assistant/pull/7245 +[#7248]: https://github.com/home-assistant/home-assistant/pull/7248 +[#7249]: https://github.com/home-assistant/home-assistant/pull/7249 +[#7250]: https://github.com/home-assistant/home-assistant/pull/7250 +[#7251]: https://github.com/home-assistant/home-assistant/pull/7251 +[#7253]: https://github.com/home-assistant/home-assistant/pull/7253 +[#7254]: https://github.com/home-assistant/home-assistant/pull/7254 +[#7256]: https://github.com/home-assistant/home-assistant/pull/7256 +[#7261]: https://github.com/home-assistant/home-assistant/pull/7261 +[#7263]: https://github.com/home-assistant/home-assistant/pull/7263 +[#7264]: https://github.com/home-assistant/home-assistant/pull/7264 +[#7266]: https://github.com/home-assistant/home-assistant/pull/7266 +[#7267]: https://github.com/home-assistant/home-assistant/pull/7267 +[#7269]: https://github.com/home-assistant/home-assistant/pull/7269 +[#7271]: https://github.com/home-assistant/home-assistant/pull/7271 +[#7272]: https://github.com/home-assistant/home-assistant/pull/7272 +[#7273]: https://github.com/home-assistant/home-assistant/pull/7273 +[#7275]: https://github.com/home-assistant/home-assistant/pull/7275 +[#7278]: https://github.com/home-assistant/home-assistant/pull/7278 +[#7279]: https://github.com/home-assistant/home-assistant/pull/7279 +[#7281]: https://github.com/home-assistant/home-assistant/pull/7281 +[#7282]: https://github.com/home-assistant/home-assistant/pull/7282 +[#7287]: https://github.com/home-assistant/home-assistant/pull/7287 +[#7290]: https://github.com/home-assistant/home-assistant/pull/7290 +[#7291]: https://github.com/home-assistant/home-assistant/pull/7291 +[#7300]: https://github.com/home-assistant/home-assistant/pull/7300 +[#7302]: https://github.com/home-assistant/home-assistant/pull/7302 +[#7303]: https://github.com/home-assistant/home-assistant/pull/7303 +[#7310]: https://github.com/home-assistant/home-assistant/pull/7310 +[#7311]: https://github.com/home-assistant/home-assistant/pull/7311 +[#7315]: https://github.com/home-assistant/home-assistant/pull/7315 +[#7316]: https://github.com/home-assistant/home-assistant/pull/7316 +[#7319]: https://github.com/home-assistant/home-assistant/pull/7319 +[#7320]: https://github.com/home-assistant/home-assistant/pull/7320 +[#7323]: https://github.com/home-assistant/home-assistant/pull/7323 +[#7324]: https://github.com/home-assistant/home-assistant/pull/7324 +[#7325]: https://github.com/home-assistant/home-assistant/pull/7325 +[#7329]: https://github.com/home-assistant/home-assistant/pull/7329 +[#7336]: https://github.com/home-assistant/home-assistant/pull/7336 +[#7337]: https://github.com/home-assistant/home-assistant/pull/7337 +[#7338]: https://github.com/home-assistant/home-assistant/pull/7338 +[#7339]: https://github.com/home-assistant/home-assistant/pull/7339 +[#7340]: https://github.com/home-assistant/home-assistant/pull/7340 +[#7341]: https://github.com/home-assistant/home-assistant/pull/7341 +[#7343]: https://github.com/home-assistant/home-assistant/pull/7343 +[#7349]: https://github.com/home-assistant/home-assistant/pull/7349 +[#7350]: https://github.com/home-assistant/home-assistant/pull/7350 +[#7352]: https://github.com/home-assistant/home-assistant/pull/7352 +[#7354]: https://github.com/home-assistant/home-assistant/pull/7354 +[#7355]: https://github.com/home-assistant/home-assistant/pull/7355 +[#7356]: https://github.com/home-assistant/home-assistant/pull/7356 +[#7359]: https://github.com/home-assistant/home-assistant/pull/7359 +[#7361]: https://github.com/home-assistant/home-assistant/pull/7361 +[#7363]: https://github.com/home-assistant/home-assistant/pull/7363 +[#7364]: https://github.com/home-assistant/home-assistant/pull/7364 +[#7365]: https://github.com/home-assistant/home-assistant/pull/7365 +[#7366]: https://github.com/home-assistant/home-assistant/pull/7366 +[#7370]: https://github.com/home-assistant/home-assistant/pull/7370 +[#7371]: https://github.com/home-assistant/home-assistant/pull/7371 +[#7374]: https://github.com/home-assistant/home-assistant/pull/7374 +[#7375]: https://github.com/home-assistant/home-assistant/pull/7375 +[#7376]: https://github.com/home-assistant/home-assistant/pull/7376 +[#7377]: https://github.com/home-assistant/home-assistant/pull/7377 +[#7379]: https://github.com/home-assistant/home-assistant/pull/7379 +[#7383]: https://github.com/home-assistant/home-assistant/pull/7383 +[#7386]: https://github.com/home-assistant/home-assistant/pull/7386 +[#7387]: https://github.com/home-assistant/home-assistant/pull/7387 +[#7388]: https://github.com/home-assistant/home-assistant/pull/7388 +[#7389]: https://github.com/home-assistant/home-assistant/pull/7389 +[#7390]: https://github.com/home-assistant/home-assistant/pull/7390 +[#7391]: https://github.com/home-assistant/home-assistant/pull/7391 +[#7399]: https://github.com/home-assistant/home-assistant/pull/7399 +[#7404]: https://github.com/home-assistant/home-assistant/pull/7404 +[#7405]: https://github.com/home-assistant/home-assistant/pull/7405 +[#7407]: https://github.com/home-assistant/home-assistant/pull/7407 +[#7408]: https://github.com/home-assistant/home-assistant/pull/7408 +[#7409]: https://github.com/home-assistant/home-assistant/pull/7409 +[#7410]: https://github.com/home-assistant/home-assistant/pull/7410 +[#7411]: https://github.com/home-assistant/home-assistant/pull/7411 +[#7418]: https://github.com/home-assistant/home-assistant/pull/7418 +[#7419]: https://github.com/home-assistant/home-assistant/pull/7419 +[#7420]: https://github.com/home-assistant/home-assistant/pull/7420 +[#7421]: https://github.com/home-assistant/home-assistant/pull/7421 +[#7426]: https://github.com/home-assistant/home-assistant/pull/7426 +[#7427]: https://github.com/home-assistant/home-assistant/pull/7427 +[#7428]: https://github.com/home-assistant/home-assistant/pull/7428 +[#7430]: https://github.com/home-assistant/home-assistant/pull/7430 +[#7432]: https://github.com/home-assistant/home-assistant/pull/7432 +[#7433]: https://github.com/home-assistant/home-assistant/pull/7433 +[#7434]: https://github.com/home-assistant/home-assistant/pull/7434 +[#7436]: https://github.com/home-assistant/home-assistant/pull/7436 +[#7437]: https://github.com/home-assistant/home-assistant/pull/7437 +[#7439]: https://github.com/home-assistant/home-assistant/pull/7439 +[#7440]: https://github.com/home-assistant/home-assistant/pull/7440 +[#7441]: https://github.com/home-assistant/home-assistant/pull/7441 +[#7443]: https://github.com/home-assistant/home-assistant/pull/7443 +[#7451]: https://github.com/home-assistant/home-assistant/pull/7451 +[@Cadair]: https://github.com/Cadair +[@ChristianKuehnel]: https://github.com/ChristianKuehnel +[@JasonCarter80]: https://github.com/JasonCarter80 +[@JshWright]: https://github.com/JshWright +[@KlaasH]: https://github.com/KlaasH +[@LvivEchoes]: https://github.com/LvivEchoes +[@MartinHjelmare]: https://github.com/MartinHjelmare +[@Teagan42]: https://github.com/Teagan42 +[@abmantis]: https://github.com/abmantis +[@alanfischer]: https://github.com/alanfischer +[@amelchio]: https://github.com/amelchio +[@amigian74]: https://github.com/amigian74 +[@andrey-git]: https://github.com/andrey-git +[@armills]: https://github.com/armills +[@arsaboo]: https://github.com/arsaboo +[@bah2830]: https://github.com/bah2830 +[@balloob]: https://github.com/balloob +[@biacz]: https://github.com/biacz +[@craftyguy]: https://github.com/craftyguy +[@cribbstechnologies]: https://github.com/cribbstechnologies +[@cyberjunky]: https://github.com/cyberjunky +[@cyberplant]: https://github.com/cyberplant +[@danielhiversen]: https://github.com/danielhiversen +[@danielperna84]: https://github.com/danielperna84 +[@darookee]: https://github.com/darookee +[@deisi]: https://github.com/deisi +[@drkp]: https://github.com/drkp +[@fabaff]: https://github.com/fabaff +[@fabfurnari]: https://github.com/fabfurnari +[@hmn]: https://github.com/hmn +[@imrehg]: https://github.com/imrehg +[@janLo]: https://github.com/janLo +[@jotunacorn]: https://github.com/jotunacorn +[@keatontaylor]: https://github.com/keatontaylor +[@mezz64]: https://github.com/mezz64 +[@micw]: https://github.com/micw +[@mjg59]: https://github.com/mjg59 +[@nkgilley]: https://github.com/nkgilley +[@onsmam]: https://github.com/onsmam +[@patrickeasters]: https://github.com/patrickeasters +[@pavoni]: https://github.com/pavoni +[@postlund]: https://github.com/postlund +[@pschmitt]: https://github.com/pschmitt +[@pvizeli]: https://github.com/pvizeli +[@rcloran]: https://github.com/rcloran +[@robbiet480]: https://github.com/robbiet480 +[@scarface-4711]: https://github.com/scarface-4711 +[@sdague]: https://github.com/sdague +[@swbradshaw]: https://github.com/swbradshaw +[@tchellomello]: https://github.com/tchellomello +[@titilambert]: https://github.com/titilambert +[@turbokongen]: https://github.com/turbokongen +[@w1ll1am23]: https://github.com/w1ll1am23 +[@wokar]: https://github.com/wokar +[@wuub]: https://github.com/wuub +[@zeltom]: https://github.com/zeltom +[binary_sensor.alarmdecoder docs]: https://home-assistant.io/components/binary_sensor.alarmdecoder/ +[binary_sensor.eight_sleep docs]: https://home-assistant.io/components/binary_sensor.eight_sleep/ +[binary_sensor.maxcube docs]: https://home-assistant.io/components/binary_sensor.maxcube/ +[binary_sensor.octoprint docs]: https://home-assistant.io/components/binary_sensor.octoprint/ +[binary_sensor.pilight docs]: https://home-assistant.io/components/binary_sensor.pilight/ +[binary_sensor.ping docs]: https://home-assistant.io/components/binary_sensor.ping/ +[binary_sensor.workday docs]: https://home-assistant.io/components/binary_sensor.workday/ +[binary_sensor.zha docs]: https://home-assistant.io/components/binary_sensor.zha/ +[camera.netatmo docs]: https://home-assistant.io/components/camera.netatmo/ +[climate docs]: https://home-assistant.io/components/climate/ +[climate.ecobee docs]: https://home-assistant.io/components/climate.ecobee/ +[climate.maxcube docs]: https://home-assistant.io/components/climate.maxcube/ +[climate.zwave docs]: https://home-assistant.io/components/climate.zwave/ +[cover.garadget docs]: https://home-assistant.io/components/cover.garadget/ +[cover.opengarage docs]: https://home-assistant.io/components/cover.opengarage/ +[cover.zwave docs]: https://home-assistant.io/components/cover.zwave/ +[device_tracker.automatic docs]: https://home-assistant.io/components/device_tracker.automatic/ +[device_tracker.zha docs]: https://home-assistant.io/components/device_tracker.zha/ +[ecobee docs]: https://home-assistant.io/components/ecobee/ +[eight_sleep docs]: https://home-assistant.io/components/eight_sleep/ +[enocean docs]: https://home-assistant.io/components/enocean/ +[homematic docs]: https://home-assistant.io/components/homematic/ +[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/ +[image_processing.microsoft_face_detect docs]: https://home-assistant.io/components/image_processing.microsoft_face_detect/ +[image_processing.opencv docs]: https://home-assistant.io/components/image_processing.opencv/ +[joaoapps_join docs]: https://home-assistant.io/components/joaoapps_join/ +[light docs]: https://home-assistant.io/components/light/ +[light.avion docs]: https://home-assistant.io/components/light.avion/ +[light.blinkt docs]: https://home-assistant.io/components/light.blinkt/ +[light.decora docs]: https://home-assistant.io/components/light.decora/ +[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.osramlightify docs]: https://home-assistant.io/components/light.osramlightify/ +[light.piglow docs]: https://home-assistant.io/components/light.piglow/ +[light.sensehat docs]: https://home-assistant.io/components/light.sensehat/ +[light.tradfri docs]: https://home-assistant.io/components/light.tradfri/ +[light.zha docs]: https://home-assistant.io/components/light.zha/ +[light.zwave docs]: https://home-assistant.io/components/light.zwave/ +[maxcube docs]: https://home-assistant.io/components/maxcube/ +[media_player docs]: https://home-assistant.io/components/media_player/ +[media_player.spotify docs]: https://home-assistant.io/components/media_player.spotify/ +[media_player.webostv docs]: https://home-assistant.io/components/media_player.webostv/ +[mqtt docs]: https://home-assistant.io/components/mqtt/ +[notify.html5 docs]: https://home-assistant.io/components/notify.html5/ +[notify.instapush docs]: https://home-assistant.io/components/notify.instapush/ +[notify.joaoapps_join docs]: https://home-assistant.io/components/notify.joaoapps_join/ +[notify.mailgun docs]: https://home-assistant.io/components/notify.mailgun/ +[notify.matrix docs]: https://home-assistant.io/components/notify.matrix/ +[notify.smtp docs]: https://home-assistant.io/components/notify.smtp/ +[notify.telegram docs]: https://home-assistant.io/components/notify.telegram/ +[notify.webostv docs]: https://home-assistant.io/components/notify.webostv/ +[nuimo_controller docs]: https://home-assistant.io/components/nuimo_controller/ +[octoprint docs]: https://home-assistant.io/components/octoprint/ +[opencv docs]: https://home-assistant.io/components/opencv/ +[plant docs]: https://home-assistant.io/components/plant/ +[recorder docs]: https://home-assistant.io/components/recorder/ +[rfxtrx docs]: https://home-assistant.io/components/rfxtrx/ +[rss_feed_template docs]: https://home-assistant.io/components/rss_feed_template/ +[sensor.cert_expiry docs]: https://home-assistant.io/components/sensor.cert_expiry/ +[sensor.dht docs]: https://home-assistant.io/components/sensor.dht/ +[sensor.eight_sleep docs]: https://home-assistant.io/components/sensor.eight_sleep/ +[sensor.envirophat docs]: https://home-assistant.io/components/sensor.envirophat/ +[sensor.ios docs]: https://home-assistant.io/components/sensor.ios/ +[sensor.lyft docs]: https://home-assistant.io/components/sensor.lyft/ +[sensor.pushbullet docs]: https://home-assistant.io/components/sensor.pushbullet/ +[sensor.speedtest docs]: https://home-assistant.io/components/sensor.speedtest/ +[sensor.thinkingcleaner docs]: https://home-assistant.io/components/sensor.thinkingcleaner/ +[sensor.vera docs]: https://home-assistant.io/components/sensor.vera/ +[sensor.zamg docs]: https://home-assistant.io/components/sensor.zamg/ +[sensor.zha docs]: https://home-assistant.io/components/sensor.zha/ +[switch.flux docs]: https://home-assistant.io/components/switch.flux/ +[switch.hook docs]: https://home-assistant.io/components/switch.hook/ +[switch.thinkingcleaner docs]: https://home-assistant.io/components/switch.thinkingcleaner/ +[switch.wemo docs]: https://home-assistant.io/components/switch.wemo/ +[switch.zha docs]: https://home-assistant.io/components/switch.zha/ +[telegram_bot docs]: https://home-assistant.io/components/telegram_bot/ +[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/ +[wemo docs]: https://home-assistant.io/components/wemo/ +[wink docs]: https://home-assistant.io/components/wink/ +[zha docs]: https://home-assistant.io/components/zha/ +[forum]: https://community.home-assistant.io/ +[gitter]: https://gitter.im/home-assistant/home-assistant +[issue]: https://github.com/home-assistant/home-assistant/issues diff --git a/source/images/blog/2017-05-0.44/components.png b/source/images/blog/2017-05-0.44/components.png new file mode 100644 index 0000000000000000000000000000000000000000..04f77334aa0f6727adedc26f1d4188c4c3e364db GIT binary patch literal 33354 zcmb4qWkX!Q6E4zH+zJ%;0>y1{EpA0iarZ@vySqCShvK&A;_mM3;_mKH^z!@P`vva1 z4y{=G9fYy3=Eo#w73ck3_K7926hk;{{0CaJu4{;4BVxXyqd(z z%gfu_+s)0*<>lr1`FUAc*~!Vt#>NILEbP|S*5Kga-QC^u^OMiig^i8P;^N}t<0Iae zFCY*IrdBHEPqumm9}^Q(LPEmZDB|eo=(LIoj8$_@P0c)HeqwS$K|$g0=x}CcrlqyT z!NH-ow`X^EmztWYzP_H%k*>3=v#q@y4IRB5S>*2NWo30$q3foxsd0aQ|JN@Kp0+zz zS66<1{+Riz=;)~P`zJFqGu7^!4{2}x1N~eL=bW6JUS3`q85sr!2EM+&dpA!30Ribt z*ZBp1ffHmS$B$ASHxd#Ou(Au4(?>+4q_byFV)0{+C0`y9@jf9TZJyp06&JPc-Zw)} z;`(E=b8_A$C_+O*Xb~{N!^1x`s<0-q;KC!q*|&vvhgNRfWE7>TsHkN2?fSR+H6RJS zKAs6wZb0{M2RAP0Vrkyio!_R|%t2;`)so_A-+$NI>6hv`jy(M;P&XR5O-V`N|AhB? zx9VQ+rW5*8AzMDYc_Sn%r~--aZ8!1c;gmR>P^#)pr0s?;mDhMOYEJW~dy<<~l*QYu zuv63G(&bZdP|(xa8NOF{5F!&X0~;{&%hls`)8W|bMQ2_~rBI*a8&oa+Z=7b%ENj>x z#L&>P1e%1%zI(g*u(3INx#~5v_qG-IRY1bw6HWd^=ECvV*A8Qc7R`Jl?v~!6^S(aS zunZ-q&wdMeDa}ceO(%D=bFbG^zjJLl6g6MZ8edPU-wytw1R?&e9c|vtT(q$<{6s;| zhbiXDq4;EsP*lzq(sF}rfl);8R)bT865=*EpE>h4r6=5qk8Nl+VT;-tgYS4%(O{A3aw~a zc5xxfd3zRDdSc>J3Eq8e?qDc*YlE!6BxTqJ$1>S$c50dOMs1#^1A6D~;*XY@27hmWm^m6R_enbZNR|z;>d`Ls<|zlBzMbhE8&DFCZ?;L zJEvzg{iaKyBvI1FFT=^(h?=oAD`Z6#!<)6?3Z79w_~I`D_Xy)1r8(i)l-4o6LQ@m2 z6e`blDA>5qZ#BPEq~HGbPgJhE-pJtiP5EvRmn8)nyr?ZCDJy2FhcbE%fSpaiy2oK( ze6?7mopcgSlfQPOjo_I3!`Kl-+UiB#s~*nbOUWA7(?6&ULK7U35CBVtKO#r4`g336-BV@kzN> z2PPrbINXu7>ae>d_cl88}>8xd>}~ zK!n_}iWkHa8}Lt+wPjAT_>}+EAAum={iz&C^O^U4$>eAC2L>O(d6RR%pbM4tGK$%$ z=U}aX@2|iuZq~TP<3!9a{!oC+Knj!X zGyDJr$~(N^F+Fi38Mna<3iB$3N$eEmC#TE&FQ!ar33_$<2AbPXWk}__juju-J#DZJ z(i)f!!MMtvFilN9SX_+lX8pyi9aw#|4qr1JrQ?9_5L1xF!2=YJF<@H^n1)JdPl<#f z(cfbLgFv|Gh8u)KZwkT#6Dxx!bga|xgFru9zPX{Z#jLc1Bm+}wyJ*_3UM|l`vJh$!R%Zn<_8IX&g&rfGrU$>4L<5cz= z2yFItd3i*{(2aMq#QI2#?&*o~`|7vr{Vp}~GHVn;x*kgGrrVrJa+bjf6aLe=g5TA| ztNRd?P<*Y+MVM<1U^`k=zJF;D?rL9& zYzJ-lrghe>53|uUES)l=dL}GN71KD*pp#v9tY;*u8b{h&WJGA6t`_(9DrUhup_-MW zh4yMiZU^dQFw}-gyPdx#Ft8&Vp>)mzGHkKODLj|%8t!-ti?-5>2Eze8uT zmpy%IWOvm?6TBZYv=sQYE{RqK_gKVo9_qUdt*-xb`^{AJR^oOJYg$nxa}z?D6%zN z9QN+x;cIs#s<^J3G*$fw#byNPoDrk+4~#~z!d5{>rh;;~Xm}rm+V>OII~*bCS(jCr z0(hD|O1-&^kG1L_HPn_xFruJz7FaZ7kE2S{8=a3sfjanakKHUIV?r|IJ|<^%%lhknj7KN7wPyrpv$G7U~iC zVFJwW_PdEWm550H=^4IGN2(F1t{l3nWnpD z)EU{zNEhMi3qUWjn=d0O`3}0qJzLsN9P_RC)fL$HKh+Acvkb(-h+nb>tUfsC~SRNgF8qqNG zR>?3MU?Ibc)op|wLZxd_5YxAWk;G%7jmJk1t{+DC^5rnIaJt$m1!n5>MeWSVxPSj6 z&u_SKlKA=VJDOLD)=c+g;-B9N!#vUAALGTbx-iaF`f}rdh$TB%5?gyqBvcL)nYSR~ zL$b+sbDBQ0wwdpHbE*!wgTf&nnr31NHU- z+!-tmry=&I^bY2rp;$6=_e_1dgfgWwP-%0-NnuUdmLSh}JLKt?Ky8Bi9>S?Q;J-^Z zTiV7%DaWc^`nABuBiyIVfhN#S~5wMvsI;}uf{Q^Etl`k(r1YQ zvs}px&4HiPWKkYCr2x|i%%zGhvtMEVdAlHW{LX2|v2fAaXTiP=uY6&>vS7CLLz@{F z?_P?cL#6$iEyG5oq75p_;s?hnfL1&gvm%kWZBEX8@w<;tm$G}^ChLV9Kxdos#~&pI z)IQMBVt#1B{4cn)H=#!_To*bH$!AsP#Iuss2kZ!j-pGIyiUYeRWsA8^>WL&x&HyVG zXp_tFmN{*2-mLie{}Crgz4;gB5Az0MVZHGIqWyF;LB4-`<@73&QE7fUN$ z;Nl49NdOhE6;+FR5;{WPZ_itc$;t!V81qp4E$=|F?kLvaM;=_X&MUpyOLJ z3zF&aD}I}Fd%_|=&h}l|`1QU?X9iGG++pMKLUpQ!Gp}pAVamVNqTQzpJDei_#*vAn zr5bQkl<@1rO(Pfone)w|HN&J_iJy=2E$)9T@h|DU3>}|08~r1Yr`JUw+2N_*00n{; zo920ZMgXyt-zK7^qGbI4O5AhbbJs}(3#k@B6!28FQz{iG{>wGSxeEQQfA$v98GzQ? zyu^!5>pQmO)K}+XLidFH(Lv4Wl>85jP)VvH>9QT#d=7)m!J*UFbW6>4V)rs>{F1?K zXEePG!~dz${!x?)g$6ixVpTzjC(!cqnp%ZM!0`%oVTg!VV`jCY@yjm+kKxZc@qPoZ z0w*f}6RHz!DCPRzm!==DlwCVczHVm{3{7e>n^khL+|9viEf_6 z5E$PTY+rs+%I`IilR%A7)g`Y&Q!!Gqt*Zyn-Yh^@7c;`JsJejo@ zBRqG!BMCVdL`Cp*yL-J*1ZBYrXEl2~!@3C|Et9;Q=lWHC{NJb@+i8A{1w;R)ci`SU z{e#L98}n(PXpECJbGc-^V&qCrY+J^6e7A6<7X8mh*UY-KLq_K1An76r%$-!0Se-bTtMoILMg5@v66#p6ou_MOvgvGls2z@R!TeW z;V0Qk;{&DSe@hCuhX2Uq1+uX0Cd?t2aEnIF0qVq0J<#THQe@N&n>)0{54SXUYjwOsIZ?>_vYVod|Uzmdf&x_2byp! zN5%Ch_H5AA1hFFqF-9Zi(tRpeaR~cMe2wn7%>C!nLgVU@tvoE(nqgizw`^UVz0T_C zYs*pjub4CI~~cN=RCKc$t(UzG&_pe7`FM4(?rLuSV)s zRZ6@+B10}+$iddM7iu{Mdp~{Af^z*muimlqqIjACV?e-LP~f1f7+8h;Gf z4*Q9QBUck!3S8!RCOZPqm4T9<=E>fch8a(Nv5_Q%LdQ@lbO?R;bg57<9$igL>n>W% zZp*W7RxzM}gUPt19h&Wzp|eF87uJug#(j|I;Q+=j&veDlmY+%pF*Kisc)`bnYD)DM z3m?M2zaBmeC(ftRGi!f*1v80)8MuBMKOgdZ4MZ^EH@tMR)NnuS`bv9gN+TsFyi%#-qwyr!dtrSsTHx=im2(ODyY{8fV+l5U(Gl_f2FQ-3z?z$O- z`GVh<#Z$|U%R*dyX7ihA)#As?Vva7StA(iZzd0I+CKM7_JF)GOdBIBe#!evmyfl zNyv(`$1oQZ$Dyf~`Hy11qkGC{$5u>O{uH$tf9goS?vQjWT5-Q2M#3eq+*1fM1|Q$d z(M#ow_%FC@U}V7UW{yvvpY-Lh6Z1dqcdPW?2PXFdY`=6M8F0z{4IRgr(KF^STI4}c z)p1-;ET`zecCm}HMTerNHoZ98#Eh;yg-pT}dU&!o!BvNLPOMZDZC5PU??d-jU0c|J z_h0?YTmsT}I?}V%G8MUY zV|W(co(>wgurTGJemV{{tw1zW?5|vCT+nie(nBDQZ+Lik77GA1z;|f^ptcw2MYhgur7Mkz(smKqSK0Uzuz=fTyR-`)DBOfscl4P}1OOAM(Lka754IuLoq-uSm(}RBKTnl^?SpU?j-GR?}e|SED>{ zM{5q|A-b_1)L;{M^@Gmgv1#)gsK$K36vWu9&&sJ-2DFJm;K()iq}0b^B0SoVsr=QB z-x^@Zk*j`uC)cTELgiYHuHe*-HQdqc&V|jh!KCKX2(O8qBDS8eNinIwD9m~2fXL@u zSxcIf_gf}1$#NUh5EXSO+0@GXwY+`_b1%IGpNCm}*eTq;RuuOFQCmYRS{)&}#f67) zFWn)N`;sXppiB*!!-D_lp{fNnKrqu~$8qRfNt0Qr;EhjuraX`$6-DjIh&)&$n8q_i zch5+n9iMZ<={CK&to%eS5~J$GV8_&olPWKmLGhE;Dw9)|iQAVu{L07yyyX*~u z;#XYKDp@(Ai^$i5Ie@Dm-9EM}k6ZvdW7?cGLLZpMZioh2R)8zRZpn|`8CmvE5TsVv z%_9xH=~dB5w9jQ;)aq}MWz^O&F3ysNo(ZaQDl(dAMyh{>c9b&o18iO1*a~VTtkM1h zC+Qt$*Bz~TwDdt+MiT&{>=?8^aRD0nax~wCb^bC>!f%ev2Y~wLT5J=0*)5siWEVd8 z<3dO11&Ye<()jbIW=nw|t`Y*ToEhjoP2iDpgz+8Wy~8U(iIRh5rrrn*0(LyO9Nekr z0}hvz-&v5vcE{9kwnfN)Ds}|kmR_QPaKfryETq>-L734e zG$}3nQG@s+kq!d~ls&WPjX0s%EI45|nM9|~%W%&jMX;CI@lrjD)|WpI6z{sDNM%4@ zR!jid(Ox}`08VP_96u<_Jsg)3Zv#YVyYQTUo8m$~u+l2C^aH*OUc_`BlA@DfCELU{ z)8MjU1Lq5Y>LfLA#7S_U`*_xbh|NXp4rbcqq_0sAb3(6P>8n6b>+EaTe8Y!v#6AqY@|C>}2nqX`tWR;j-JW`eDq zc)B24;w{!vcs7rSzlbk&=~MNj$Z%9Y1~>{#Y9{~;eg63}(BJIJv>%Q|!vh~JZf6hn z=;;WQ1_xzcNb*VThLDpor_SZT*-oFryp!|_F0&)K^H93oujd&<}PsQt^7rau=F9#c*avd)PO<>lFY07 zOurXxdrFXu0;Z6cCMlIV;lp^JhS~mLIx)4lME+ISV|tAY+(}(GuDR&D7hM1O<=F4> z+(;_Djp8`>Z+G2TZdTf#%susoc5eSlgs%L;&4U&fCyfoEWXnDntksKQqw=znQ>2U_WGOgyx9-CPpm)uLHkq+fC10YChy4zu`oAEik0Or2vpET! zBR@W=sG|o}VDE6hpZ+HAN&K2MiZopmuxwfE7C~L>IF0VX#vg=$+x}UXj~yhUAQUi< zwo#5$Ngl&l3K_4(OLcl7t_X`Q!&?x?Kui3CEeD)gaM2c^-P>tG7(`xL#L(dBZa zh3x4uqGLFl3w-Jg5YSj`8E7B|Uw!WxpK6`WV^FP-O{FD(O)$*1*97Og%%NBnzS;y{;_ zv%FZfrcB)DyC_5qGz<|jCw4m^hhskB3N*o<2I1OvLs22^y5r+aBTlI0qqB{p4L^WC zS+$mZ^G{uFI=$Uph4_TL|;<-z}! zO{c^1C3dFF;_Ryz6VZ=5O=EP^D<)p*RXRjKHe~nBsLqQnN;k0jH1;Ic@TGT*V22K~ zSA_N7Tk(DUcf|6a(Q2gZpU@2n(=dN6$zQcl1p#8*QCU#a`@miY23#3-go#H&&>km( zh`4X&lvWdDbPwPQZ;E8Pynyh(5uL`prx`MZWaYVL`n4hrC$-_JAUwi!~zPFXzlK~Bz`LdxO!Lq$8E zVD)YMWi=c`LEhu(V*5khjH}& zkbale#|G!lff_tf7}J~!;DIjg$lI=P;66q5ig-`wXOL&n_>JtRrLQeiq zMSdjyjRgiv(|Q8+TNEgc!+TB-09OQ^d3Ap1q%o-cm~kZ@6$|b)sTu%~ zN)BkH=xu7nf`1@kD!pRks@3TLJpB)h;TE z$ECqmS$<$V>ya2oGGM6TX}ZpJ^&R$o^SkcOqj|sI^r8Q?PRP&;L701%*k0Z->8;+s z5A6|Bh45@eGMEm-wHd^U^`GqCkk1#O@7M}IdXETdkRi)Q+>c*!rQ@IUu_!i;;_*V_ zeckh-X|C{Ix5lZq4WR~*tGD~wd0&ZX^XTC5D#mL!NJyWS-*tL7A=>iE5?4iVjdho8 z)*vBj28+wyWkvA7(uR(h=I8^O4ugRW0hU2*W`GyOV&Qp&J=WYty5b{uRbGYZE5fyw z1dvk?^`px%G357xR}Dw3ITI&jpmD^-?9@Bp&U*+MqD~=tH}q}DEIRZ*yT2iGUpMyw zU;AAuUtYBofSIaEGk&Xl@qk_c0aqU&6W}fJ;2!;(srM-BzZ`F~so( zk1Fn6+#LGuzb((28SN>&-Co1)SYxfg8ov$NeP!Q@+J5D zRwbxezHokbFoY7Laa~^3dFPrV^pmrTt;%`Ih1*!Gs$X>NmuCh1+qb*th_JneoPQ|o z4LPrN!!e$xcZ7OR6*IWw%&sbAKv7lC%G!dG?^-YvjGDAbc>~huu1R7tT2we-S;bWN zezzIu5InC=vFW%7mnvs^5?o~*Mpx@6PwKlR8FOyS;Z3f%uemp<0S?I9ee(&mr$?AD1kBPTL-hg}v!K}^b=35~G(E%?AxriYFXmN+ zXHdp=D#v(2lF_fK@cqz~?!@_|R)5r(<3lPcFx5Z&gi-dwfnyp^*IP8hFW4?iqL^xkG>mM{MzEf_V}nq@t)h4ZW$xm2(K6a$X(C z$9Eo;>D`OK>NH!6@`IDW(;_xP1vcHT_euNML{A%N^PyfR4E1QN^y{Q(sDh zK0|)tnvytDFjM5$d^)WlNX?%svqDO5NwVp(rk|*O3r&oBj+L4_UW{4K!ChLg2rd&o824w5KeI+M1Qf;O-{T%0Xdt)0v}V|rp(1^9)LfA|bo`7zfm zXJCB?OgiO4!jV+ZD+d#}lQeYO^l0xi>N7%%*=!J~EC4^mt^f=qW3hlIs1EW7Uj4yY z?4;+3RBNK=*`ZbQ_7kYLCWGO|q}z$7x(?IWT#ulxoie@AhgZ^jYFtUNCInduL~fcr zw;ETZLhGuX!V7P|d&2sc=*^+!j1%(rz;dji1oo?4z({?)v=`>n+WU%8s@?pa_ggd`^E{7{tjC`x^c|v&-F68- z9ihZs?g9!b(t765|5%`O6kW^_vnw|>pcN?LParoR$Jfrm1aI22e*a5KB%sA<9NjTj zr7o-ehxE`uHP@3ev&trbF{;XYc5PoPJa7IXnM!vX*gXI&dbEH+4Und|28&YtuFF<^ zH3#8F>f|fKS=dA^dQy=%MZ$KeDZA;{nZI5Cl`6uH`^={zVthug!<2s<4>OQ9*geIf z>QXT6Pcy#^Q|lz*=v?iT+6DMiWfRCa<#wtaS<^gV31?z=R?ijUv`RhsyTeQ`>Px}= zvKl*}m>Tznd3i?xskpP$z?!-DY3bKbBxQPAlK8kpL;1xmUnPtULk-HkkkU%WJ(MbI z>2N-iJTIHiCWc<8p{@A_C@s#30`M`=%oe0o?dRUgU#T@hXU9UdsG)b@*c`#lB|uXf zxcb_&qsxo7bDX5aF79W^zqkx?6b?P@>$$fP^Do~Y({&x_E+K}(LZ42!tFL&Q!X7U0 zyiQH>xslxe6f~; z>p<&Y5jjz)x(Q}BSyBZp<1;(t%gI}`RA!f?_l%UQWQ1q`ubzBSVzPi<>;27x-RQDx zN-mRc=&r=Vah$XkKXyg5K{Z}m=5GQ5{eL~IYJY(wT>S;~DalOuRZmPzHvi<7P;<_R zHn2!2N^=>keUJH( zokN3;KAiXZl}wL%0Be&9s1x(lSz3L^lM|9m*yj#R+X1?=9k%R{rT3DitV+VLQhusn z_Z8u31h&_p!A$Op+J~yg#{erc3sNy=dnp#c`$_p-X=!+2^$0SIaqOy}qC6_y2b?-b zrx~M9X55cS@oH-cb4?e0j}3?k`03DAAy0iEYn03Hy4YTB@lc9 znTr2uhcDr8O>LOqi4m5n^o9^GJB|#+ji*i!SSnHh*_eZkfU5j8*)GK8Nmcy|qEso9o#;^=^65G@l--ui6@NE{itQ;O{V+)XR#*TDUYnH$D3 zr{MY}D(jU-4i74QY)*qYg*tI(K8`w{kumv{b{enO;>US?T}9VgokK9lI&>(`*gjAY z8!|F6>80q$e&A7k;4qFq$SNyID72yJK0cF1kbAm?s-BRaA4?|un%~*kS#^$Xg0a%F zg1CD+cE>wu*LjexXMJRk28l}pYXVv$sF*nip6$;1_8a{*qUnJ(~7E?2F;JwzW+N16nwLxHT&GPFr}m@zk${F5R>?(XX6h-7daaq z@8GAgRca9hCM=Fsydn6!a4^kySRUsHJ;b)TAR5gE?ZHn)!Ps(#t^I)jF9!eO5SO#2 zMEQL&;AZ}IL4Ypm=%oB_Pn|+gU&u2$?(UyH5780U)O!CR63p+kwp+o=Pb;Wq1Jc%= zRuwN7l`bmFcEVPX(n&uTCdaI%!lt~EI5=_}UCOwD?E^cM-*CLCS&EM9($X#oB(T1G zF&`j12;9E9%y00z*Rl>vkQAlLL_>ai@Zp?jK!1bj9xoUV#~+IdUhsL5c>hXRuuD6# zWat)M2`QNx8nK_8Q*EbU_)qUJ$`{=!5}96_Z}{*wl6KhjW}T+n*UP}3DcSV;>A}wo zVl|9DERK7JE4r`#uR?)bCChGjKhd5I4*-4p8vs0xI&{uSH1FLe-y`qSani=bcqn75 z3NDmWWO@DIoZ*i+`zPXawQIVncF6U`nuV4ngV>L2@7jxW`;9Zi;#~+?NH%q3dFT9k zmz`z%UEe{OR!Y?w zED+mH({;tBu+&TXIk%$S%nQwlsD8Ei(C%|Z8i8Dmz5eS3)oR99ksRt!A?n05dtP&M z25SBl5j($(dA&NTNFKX#P-&bwp5f$BRM4$7$5b+LPMW)8YlB~?>TV^}2;zTn)5 z-*xnBIHp8*cf7O-^}$aZc5+@JKID?!D(FKtuC7%OCtn`C`*=a+x{`MJazI)QE>SW8 zjxhv-w#2lp3WBDJWE~QV0{lCi?E_p?JvZlqjMR{meEkg znWgCn18S!`Ys7jy;c{ADq9_>0Vauu)&dI$!r3pPT4Cgu0+1>m@Kw`m3yP400|L>fR z7}Q+is@Ib~gw4(Td+55f`G;vSk$2+O<}CWB#Ec6?ig4UQe8@DFtL#%O#$6U+`QTgH zB3$_j>hP2e1s9R3KlYc&zJ$B)0eno8KxF6BPnL7Qfns=1G|~%F-_8zTIm2LD4K~sG zwUe`zm6bCq&CMNQ;11nWb@n2x#x-ZMM)o7o5O$U3U$EnsIk){qx2Z_BI|QoXiHV7a zu%muGXF>y_c&(B66oGPRmsP$NO~{8U_R%)U^9I4g*(+*4hjap}ntt^hmUeQ@bVAO5 zC~YoOgswmsHV{-JYy!L~(owjNVqZ^A@Qz9UqpDL02q0+bs2K-G2c3iEH{ z>DRXd>Y+XhE$z32rdTN)%Z3#dhJi5yXsfmzPxp4j)t6n;;1cT8$EG?E>d`JwQs@fZ3 zA(#p-)x23l+q0UEjZiXjp?$Q+$0DMzSNT%FEn#Xa1euv%#6-hRG+>ZbeY>70E%W0^ zn~`qe>rUI1)(P9V_+!r+M;?YCPSofS6;&Y|yUGm(37>ixdG?u)pikpBo;;u*I(q#s z7YClvXBYt0Wb~q=e>C_Q+W3OFb=SLj%fz13dr!C(IVvo0W$2ETQ@O$k3F#fp0Ay?? z_~sOG0`HmHIuV97ff7)ivWRb1)OlDeMI_j8dYA^Pr@zYMQ`*X)Mvu1Jo?@1BH+tbR z>vfIM0%Z!F&X-htPDO~KnIzong@@dBde^$}t~YGvF?z;Iro!{ep0Jv@n9;MH-dQks ze%pR7O?!=c)^BUTk_W9wMwtX1`&vxX$)z0~96f5u{hsDJv!Cq)yB>C@-WsBkZTR#Y zfh_Yx)3JFRaHGT0Q}&I1LV{IoDP}fbtOT;MhY1Ucun*ZZXO|IQ_^i44S6Y=voy{PT z3L1Y41aq{qv`*P1m$^WR)`{$uzzkBVAqr2lpFZ?POc7p6(_Yz=nz|Bjs~SKrqz0GJ z;iN)O0BVqc!U1+zq+ML(*DWR!24?2^ECylci4f^;zmz;H>Ko!hQ}OU{kt9qDO(o#= zEwd7<1-MQeKk3Ot+*C9-Hy`iT-RHEQ98pTK@NZ1Z*_?>s14H7BdA$B%hh*5{2y5$Q z6Ps;)(`eD1Mj%R7+l;597OsQCMw5UU>_@VjE2xts#`)!=~a=jZ?hvse^9&UIGcz&iXv& z$nnWv3t>H5v67K_hsOXhCr+O(Pp;1zni#3|t;?aR;e8r1GH#3%-!Hj31$1gNBPP1@ zYZ5MWlA^{H0=jAT^Ar9M%89G?e(g<+MyJErY=%IAIzRNDDF4i95KV6e7=QGf-I18n zG(dZN9T>iv1=3iF@pH)v!nS|RyB7}Nnjj=w7?u%HbqWq9;627S%>CjyUOG3huw?7}bqP|PtU^h~0 za+y7bISCUY+q22K!GYir_~l#pZbC3!%t!<~mq682jan1607g|}Qb|BQj4@6OcpviL zj>8CuL?iQaPodm;DYE7-jq|XAXCOsSdeqI1X*=GixQ%d?=*WX$+koYG+^Z|v0t^7# z3V@(D+U(sXp7A2623*SjQa)rY_8m_9-zGp!Gq_(4PRgj2e6w7li_m3W*8!_5f<;E9 ze|3~8LFHH9F9SyX7Ij+Vr}&0n*a&5^UQ#cKmZ5q)|M6A58xXt`>bwc3d$e)&H+^PdXe%2(4;q^KUl_|9oRZr4_Fx6CQ~+yp-xT0(5wv zaGCdsE7WT}@!K1$fTPcd8QhN7T*&;WUle!&fQ!XBA)#ojXCbF@*Qhf6+mHjbutL7O zBlL1o9k8IYQg@5?U+_4fbg;ZV+)x#XUYn*7^hM6-obMD}j?)f32Rm+n%aZ_`O=n;{ zSW8sBQrMv*p~r(Vc!t97A5+!>8{9}z&Wkk5<8VH1|0|+-+gsqfOt~quO~}^e)D$B zfLy|$=%M#*=J3@7@N=5_@+n}*CO5K3XJHUH#2W{zons3?IeMS~F|@FD;*P=P8hm9L%UPPNj?L(zeC)j!xvKMtogaE!2aV=O1-=otH8|DlmP7!z{wA8gF|nkY6xNl ztm;f*BKnGw^UqOjfod0d^YJ4iGUpk zxa=RHe|u5zmt!a6D->%>piS_e(REoCNo`anw!Hmb}bD5M2G8;jWvTrEL-CxyETvh~6dvFW6@*Wn_A{$65{;5vs>4ZE1D^b|1 zx!PcK`-crTm;(WBtQbFu3~jKpg}#Jzruu2 zd9bAgzG_J~q-+GA`b%dnwMf&36Fry`0o!X!K6(tFM{JL)N$UPXOwZ+rG`t4nZ3@;O zXI(}?10XNE5Q0ymVKO(T+6R96d^M7qkH@ehNv&~f#DoRTBy*TE%Pct8+`*+(C1tnh zY_=#h2LjeLa2UdG$M5yN;`A)xBS3mgrc9WE{i}wZu{4Nia`p%IOe!&u(7nKIZP{TH zt{kP%ra&vSyZ{bnfXoIZ(-10TtBi1(G}wUOFVHjE#8XcHBUuBKr{g3b?5k&>SdY<9 zCPj_Urm1p$SM!w1@d*9O_G@`OYu~6Vk}1_RLrJ={+%eaXUf7 z(T1?04AByz6GunL(U%|F?VYUZUW-G(Qo_{zHR2Xi4S{>&6Zc$2>ielz9{2SjW3mj( z%4uN~i~eL$` zzCB|wc{_vq7ei=ha(lb%Zd03w+WYA&)rmL9C}>?rP^e7pF2>*q+lPpCHZ>qRKA)EO znIes5m|i-oCQwzq(l0ga5Lc5EaOQ2WrhF}F6Zl`AHf0lk{#cNu|29=TTyo30TIv)FBKQ3|DbwG zJ@Ze84Le16)s`)HdSzRZg_0YQWa?67#5+5qZ3Geb19bjHS(P`2nVZB^wGX`F^VeH9 z=$>6tA;d`6-N@dX2a!0(IJm8U|!q5=T%AIYYZtlUjjD!d#!YyQNT2!RK)q z-z{|n(#)U$<{pIaLb+XBhm{yzYi z9p4?JGYxvP2kpN%IHWg%*o3$M5HhRbs@6mq#h%kIiAb?>4mA1UB@2c0VwH}IJvxm3 znX8%^2U@sFwEX}=I&Mqy=o!^S^^0$b+$+(>!e->DpSPM8XL)En6$~JN&N>NL3?{)8 z$X7osDU>(R>FeMSb;MK#ONp)~mmC*a6h14=)RhzMneB*W zw+t{_v(1Oc(a_?!Tj(86nji!?$jQp!${M#Xp?UvFkov|O5a?0^E!%W$CFyy;w{J?$ zl-nf1lZccj#05o5f%yVZ6A@K=Vy{B14HU4>`Uo+gnXUFF`I?`FT!<64M!ntM@O zkcWz7H8zZo4^{H)Sn9%uiAiS1a0isSyzbDU_j%OB+haDkWC0^ilvU2+uo=I_M{#AS zXtyqfR9W^S@_MwL)p(U81(&(Z0)Tmx+m`Sx6yq=!A^d(gb)ZX3uFOmR9>Mr7lCTTo zCb2D%S62i%c$rZBGEbu!p}X|M)wk!JUV_Evde9~owf>w#bP?f3_r#)^NlZD2%>`ts zC)Ff~{c|s$YNVE!00}IqYW3-NC0N^;524oawWBM#i*KtGh=hw^G%5N0=if4T z+q?9x3Lwn%?%`y;*bd(;Ni9A@^y5lQNDfl#At8>J&~lm=!!%HO#T^<+2*N5ml}}8) zyJ(PUnCILwsjA_B&b<^dlSjuPj^JXexRsoH)pVys)QLp(wCiK%mOag)EBgQ^__Li` zO28L=qYxN%mu_ICy%nJ&Ftz|X77D50QCb) zX)<5uyXHI1&-+%zbH|PIqR_cFT_Q3qE!EN0f+H9+noO6l z^cN(lD&x*uVm8E;Ld7Sgjll^W2Tgs?z`&Z{K3CV6=JYB$&WJ86XF|Z8ME>1ic4(Sd z@%G#pxJ*Dl#qRB01Wk%yMB#9Vf&A2OW_&Ck+kq*fF5t74qKQ{Rp-&jK1Ec?D%SScj zlNp}G;igs&fr0GtWKB=P%I9B^?Fz}Uo~lJ!2_H?qw<*njkTmtQF?nl5f$$lkMFLSO3-0)fMIkx5&g- zLjMF?mhW@A?BzCVaofJoTWF{*{LTY3j?B&|{<3pY#J09R$R$wDA?;5AtVi6o!US99 z6lq$I`lI?R_s5<=bSvG&iW_#!{UQsmTRH|BNOF1|mkVaVa#Lh;OS53SsUL*npgy()hKB_yQ zufV3{e9K4dVS8+A?2wF#)1*CM;mqg#Cq4$498q$G5hZM)?9~=NvEy@R&I%mPBI1bT z(nsUJ9u&8o;pzphOP?C-NsnPPj_6;NC@<8QIz!#wZnE6u`v;`yjcCDt|Hx<@|CF5rZ4DQ)EGCk*p~OTLre z`g;c1G(|v*WwE5sxNjeHd4GV@j#$rZrvB~H|GQ_t#cXV5^!;D_Z>?6}6h~@Qi$XZc zr|7N)@p}^amJALHEJaiVa!c*!P<`4l{|=|5tA48HjVNX$TC6 z;Qgp~q9GyUS_xzJWcDfg!k9&8DZx8Fw(PTUd)Sl#o|y*Tc6om~=a+&Kna=I6MPpGR&k>p7f#HqshH3e6xYl&vIQ}`9`Y)+@ zhwW24%(=eX1|lb@a;Q2o97^CME}t8t)SC#>Z@#xo>A>?6ea0Vi^L}epn4EJILd|=A zCTsa)XbJG*otxWxJY^Pc>^Vf4^t7xhLC%=o$jx+ab9U)^edWPjb_IA?hI=KOy8%Vz zp?2PQ<3GO~l)6k5H62=m)~G%MdEvWidSuD@(=~0_yB6;08KRh7M`Caygajr=O{oLQ zVN^W~uCmV0G#c#`4O70#D!A>_yBNFeHyi&WH66-7qeE-A#!>1n6M7w`Bd-LdPj-!VE=ibT;%cH#6OwZL4$)=Trub5r0sgGI1 zSw&+505JAWTx%iV-sEe1_d~QonZCJL8DdXX&5>7T>N3jxOLMny3QxejTDXGA5|M`27azRB}a=JBVJ!2d;$AZEhLKeCEx?<%>Bf0 z)jIDsqn?sA6JY^pb>-L%M2l~JIjb7GpQRSudd@e%T<7gO51r}wY1zs_F52l4?lr$6 zRvQyDDCe_-%@nr9u+s6KW=WZHZ}2)N8nquToY-D0du;HImzu`;k7gGA^0oUl`#=W9oU)4r%5rqm;$S=cd!x5DR*Mi9MP?#Za5%9s~Oh% z(7oW$)QV2wqeX1;Ik!5DlyYu4MrHeSC!W)THKK}+Abo5K$+YPAjIs77I7-+~(S)W8 z7|j?^7UtF+&VFLo+>#TKvR`;+^I_5TU+?4M6H84BvEPIGhc`emf6FaTEJz3_#wQpu6ifG_=tU^ ziDM@JGF#C)zLQp;b;HI-^3Uw78?-=*!r%~di6nb*9-z@A>Q%00CQ9uIi5p?Q+Nhdv zdj9I^8t94`)25B7IVvHRBcNp*lhUE_DXyG*TWJ2b^VO@ zkXtmnfiMJDQ0o(R*2Oa?XpelZG^9=WD_fUuKT;&9K%S?ROrMl?5D;a^m@^nI#g+E= zQ-8-TUN`RtC%oo&RS9ABd-HWsm$wdw;AIeC(;~i8_#;c|kRADLT=!)0^2DQU(><+^ zv}(AkBg7{_ND>Q@Oaw)rS=NcvL`kR*SGEVa)cj_WX1f5tfa`c2Ejlt4ZM*Z%z3Z-Z zK7wvQ^?_e8%Ai^ncPfoT;|Vg%ppTJ)c9mrG65^Gi>V!$;|9VdowY9o$l|5 zH{H%ka{m1gGmq)RyaP2v%$PhJ-USQE7;zh{1lmFM&vIavlSXcEgw= zD~#+ynBP6l9_zE)YXFPfLpK!d|G7aoUOCe*(*DAk3r9FOPIo7|B>i$WP+(55G_{f= zEkyNjv-bVX0=C~^da{k?={)`OV<+DHnqN+_4AJoA;0UGGy)xhy{^w~>V)chmPSvQDfI zPmF$m=xwmD=gQoj+2cysiqHW5r3v-*onz#rdD3x^B2T#5Id#_6JyxKeA{L=W-b+_wZuit33okulDsAxSS4tplYqZrm>fh!sGG7GPJNFyBkZ6vP#>Db@{1-TfH2=LD(GZt(~;8GDfDDH z=YY=agRn&5$b|CjMBrT(+MpxyVm31YX6SEH#00(;6M*ahIzU1tOrk|jT`f%^M+fCA(iTkV(|*zmF6ZfM9V03o_H21DOF(t^C89zV6c2$l8o< zMcoAHJZ{9GEmElugp^OJzW)GAH)0GKF%I?@kFrP`QVD(z?xmLO2RzI<2W25KmbE|n z@q5&^HFRIM-k?8We{Twcyo%*(5DVjh+m5o`WlN&o1Gj%y*s6tLZ|) z&0c@tJD63={p9l##Z?PlNi51FE)v;J1Zmg4^{J*Kg!un&1tk@N?g!060Sg6qyYqY$ zDPl-A$;$*;F;#z!{u}1qQ1=cc%!UK`bAw#_5bVl|H^er`-Mc!gwDg?xKea>1FNSl< z%gM&WoK4wFy`a#4f9zjU;djuro2NCfuLE+nOy&xn65j8P+Q(>HI7`QVm}5!x1j2b= z6p?o0JNs7?gz);c>yuBT^`trZB+xg5UL=hzZTVX#f4`S~hcA58>Lr@X0COS~**n;^ zTyUmSCjgn?)Gmr*+zj0q*%i5hyjRk^3I;TZz*KTRK^v>axY+U)yJj8^Y*(W<^-Pzf z058o4Y9L;wi$U zWGeBA215_3v3=nS@zJUPCI8n80p-da_W^orxNCVpZX{e6T0!V4mMnG@7{(E?WA!j~U>tsjyf`n-!q(5>3r8&qL`piC|wX-p`LpH6{{ zr$q7Ihf@7}p%bX7U&hCT!=yaS#r383Z-&?{;uL(bW)U2SR&%yR6~oQ7{U(w$l51Gn z@Cg-U#pJ|nN>uW6u*UR9=SBI4`h^C>^a)v3fg)g(VZwPV`K2HR&*}GOpW|UxtwylX6b0z{T0h%y`*?XWB1WgM#QUsc-$HBPjM)P^<#29$fLE&z z*el!!bv-QCqzF7A)jxtA>N({1zx)(PR$5{^RWBN2SSyaOs)?7vKue7->Dh5K>YkE?kR2QRK#AXg1K^Pfq(0qO%WDu+O7ypmgvP7BpB2v*xKLYd3qVzZXmx3K{Rh~_ zm#AXEf`?FwObzzO&_*TQu8hZ_?t-spKG1~RXF+fOY@s$zDH{-HJlV}`N(65?@|dK< zp``E~4whQ??orj11fzgME{3!}a=(HM#~1+1Yx^^sf-AbEj4$V^O4?x(dlY=Xz< zZBA{vhrLPeb<;b3L#*cuS8fve#(D;hGBiBV!qxdV+^Qs_0hhyhWm-uzIi#wl=& zS2bJj=JSL2bF$`$O~_(--pb)mlaU{C7EidiZyv3XG~z7~yRhB%`M#}c?f;X_eETl> z?kz@CY0j~tgHHc8yy1LysDtcQ)x_Amb6|Nz!rJS)HFYod6goUaP@Wsscpm!5a+__=^2cqjJA)q}UGVL*bOVgk>`RKoAsLRJzxMVxvvdy& z^&*-@H~Ie*)T-6_V@NA;vw5dTd7FJGE<$pX1~Ot4zV^oCWXK@NQ*A*jwkZwX%Pikw zN@$1bi1>$0f6Q63okc@IrL<;rzVH3U`IJxZRRUV}{skp?sT{{WA1dw|f|+*br54tz zfwyYF7>lwO{4uuLE4CO|r-rf_^-wVpfAbQ?@PDs^&xZ`BW$&SXZldop_ySeTI|q4H z4P@)JU4K^AKH6Phw(AsY6r?U5`Q5d@|HqH=3V(mRFks-~j!JJJ?G0u?FQ$;prh(E+ zXcJJ)Rjp1v@Zs~@ERO`kbSwvnO*y5n&?ZR!hYBQ(KuGtw=7tHI0ed80@{0Jc!CY`p zWsj)xvv;(|Hlx60uIj6T#25Ohq2x<{7BM(KidzcQxll@fo28+tuO85!Ci8$iJ{P`CnDi*(nY;YHH*8-R_n;?JgY`o6}jer4s(zad^P zs;`&g)aWO6V9x$IsC}o_9TXvn(WyR;4+Y}I0_?Z1om6c=kXmK@8|xd-7uA+?QSmWy zKF-0asp~dYZ7%g~&^WSn>$w3+0Z2$QU1<7?ufKog7S!x;yg9*hyC?%fnv?&?@fYRg zry9<^_UM%JUN^ld9($YN1jyO@n_b1g&0b^vk%O*1p$&3g?|K31sPn63+8*?j9?4P|)1PPn{KfJVrs z`Bq*{p`k;OpZBoM=Sp#FHGZFpvPc*!YfOT!HR|tu$8WqzV-)=$gsM2Ng?t*ItOuK~ z=V&@iePHT0*JIj|IQ=F-&>OeR9`^N5hc%Tq@xhV6ccq6ZspE#S4;5G$C5hekgh)$X zk%p#+J*b|f<@l66zHQ6;&r)xj&kWUR^RD&krWGTyD=uC^A@WCJ+icNlxqd%wZ0Hag z-jx0UhvIzV9AABwn{tHuncE>ICwh*DVwr_Ou$s_h#)Mf*f*957_!`KQPSJ?D?tbz* z_1pe5ItPv?!vENHm+t8@5hL!WSqscRDjH)%`ottyX1}8a+OPbHD=rs<*uMPBjJm+o zKikC<9_Z!>$xxSVdFfOkz4bv9SL{#(F3jo5xHl^evLdS!y8hJ2GyFM)5?s~|fvf%* z*QMiyKX=5Er^ww1-gACe*HUhY01`$D#x#>-b2Q3+RG4D=dJ5j&hSYT`Cn(Oj6$$&| zH8PFQO1oQ;A!W`1-JKEC&_0E?h;hjaU2K{UOeZPmk zzC>$EL#h%J6H99&cwSg8+uefw3)X5i+eO7z>ZT+6vpXon(>y<13`EE94*cAzGnBQ< zNVHPq5I*ToM0q&ckZj$veX9OJ=yD8L=BAAMCwO}?vxCQX%ir*#ox+eRWtg|K`Ne5c z;D2oSduo)+2T$)qYcylh%2TW-9{=Wgdvvm~JIJE+evHD|H#?$422-t-Vdg-W>;g=kT9BEd2K3hRtzR%&AY^oouA0=ol%K zZ3TfRhT?MjLokWf8E)o(~XbPMrfA``eR(XSNq0ay(U9*MC!0ZU8;A5kV?0cHlPiq~hLo*p_ATN}SC zT}`<1>gXb5zd9Z72=pkOispS9VkWkuoUzLC95g4ryGl4kFuqFg-9p^(`=h0pMZ28b zQ^Rmy@?~^H+|t*ot6=ZRyZ@ybqNe|&=GkfXaEX2Wy3tv(F5Q|!W5i=Kw&7oDgk~ZM zI=ocYxhv#4pTcrV2cz){UNf-5kuo>9GoYo}P-bM26zow-)`hjTH3rLv)~0=rQZVL{ z{@sLBiM4Z^wC6Q;9+{dcYX?wt&f4L#iZ$JwgVuZK3~fu?Kf(u-*i?O_;~tvZcEwfM0iu(3t6&t{ln3raG zGE3)uQ6DOjby#oz0xWP~0d?w>Ieo4J!?&@l!c*fY168q;xw9x;J^rU8opZN=yuTX_ zKL@NfEa0+=Qf*Bk2=zYY_gup3tdnR2X9XiEE{ghf(6{V??21Q(MpN|u9qJUzB1G2` z$A@OkcaMzT^|^C%Hv*aBIa`fX)mL6QzDWdSAcmU85S;g!*Sa_M$OFZ=(pRpf5dmJ)lov@qTM-t9pLqQ3_H)7<1 z1ACh#;2X*C3vzoHtmD%@>25FRCv$HWX)h&7*G8>=xgBTWj7a{6?!@Bxm5e;)fH>_j(~p6_)krWKm(~^th}D!*|qry}IjsOhP+E~e|UbC9;ux17Ymbqdy0y#H`h_kCyvgn#NC%_0Pa<}@Mo{;3h9c^lCAiu z$BiHPz4D9ZJT>|9LAe6-P!J{Wr(B1TxWz?^9I5sRp&6~ETMl3`?KD8(4Vwu+ncu}fg+;2z@( zz^KrVrBCQKn^$iK>`x?o-_v_edJ8d1@QY!E-+~+WhV-OFiymTLeQ~uPNyM6sa)bBP z$-pfE)9Fb3?w_C=O788Spk-8WOGo5Z6}KQ|);(Xv#G28KqkK2R$U(rZxP!c1hzU10 zWcbdDvL?ecbiUgDGV^XnBN51LzVT{065JAziS!t&@2B0IQW8C2!-WJ_%9Ha0N zvsC~A?;C%~+eg{SYOTUy9Y6wmk-PoIJfxmKA7d%p;F)V5Sne1du9rD9`msaacyR!N z;A8r4Q-an^ASiiYmU+p@Lq2_X;NJ0xnF|AN^yFYMQl=PVn*Cnm#mdtmBX@U4K}oT@ zqPC9OjKtVl%$P5F4+!e^W*{p%>u}8v_5Y_!(0~%-00Z0-#@{bK%3}{Ys%n+U$--M$ z*oT&t5jA}cI<{~L3IZVPwzvAQ%-e3mRmlEaFgH>97qkgmQeR@i>&@z0bJ)bEdmD^? zvM|kn3aqnXXOv}|M1Gg9EUDhR2z&eeO?mm;iM^dC5>9Ve3xJhu7}5w%pW_F8f1mo= zjbxjFnTXet%T3~#vE#WZyC3U6p-Zz|WYIA7W-sSfD>a<<811yJ z=mS;yPVy7S3AFPp2r=dAIgGOBdpheTs^AOa}-`3ID2I%+ct&0xz zpa%~Ws3ZRGPQMa-p450l?GDU5-a*mAc~v9q?{#xS-+Qy!U*6+)f^LBsg2}W^Zr~(b z$f)0Y;!Jz=r8^AxTK3y7QnY#86YPh)g}M%uSKX+mq2O-RE@DI_GX=V17+i`XzhdGf%`sCFdXidK0#dJVnqTTzznuGgn^ zM?9(xH8-x#1-InJ=EMBk?_&D{!YhU~hFtWMhQi$j=vsD69yel%(i1vK=1a6|0f=@w zVZ@3!Tbi_sY6KMJki7L;XEWR77AV@@2j`cI5PQfc?0)6Pc2qvtfUY)YPwe4NBVdjy z{)5L@Q~T@oAG!gNm42%J3P5X*i%`5bp!gFOSGk9Pt;g#3_^0Bn2Gd`{Xjn0+nF zGkD~+os4xDnS6$L0G&)n_7TZwBS5-b}{}wz^BuG!23%96Mm$bntCI`En-8W`IPBn)Y|Tw^BZx~C3c)FLS7EfE*;ws_}BRMdTELX@_f=_msU zehPgi^h@so^UEn=;?2o&HkRt558!5T{2S?Ja9(PVG^GD-vNm%rC@- zVw!<~B8vq7J$|EDTd9v6k~ta)^|QCuWmF`yS_>X~S9p%GVMm>`ggt+|DOi8b|AWgp zn1V~0#Bn)3{YfK7+bAu&eJ4WkPs4`9-#xR{-EXW|nKp#tz06Yzz zZzPzbYSG7L!RnlUsm-H~a`DjRcjDUND%vWA5*`?E&9? zUfp+}?pgu&+A55-1*_#Do}r|2Oxq&>%JR^C3i}PcePM zCWzuJGv-EaHCr6LuJ|b2GU3wYCdyn{WwFbP!{CcUjSIn5CW+h*oUlLJrwh+2;Tp>J z4*sHqwp6$=6*d+hTl=E}ps;)|-9k1!hQg8VS8yJ z@KC#^J57k=7InKuD4IK4@T3RdxHvJZt4+6oW9;S3u*cv-O_filGv`T+SVV*3y9bP2 zf;za3OM#((U3rgEsSZ=A->=W9>ckClZvfocvrKY9sjo`!W`=^Znu``9oL}vHPBzPa z6?20l#}y%`O!(eG;aP;PRu~sc@-;fDa>x3v(7ZZ$u~l?Kw84f7-+AU6N6)CF)Ws#1 zCH%O~Jm~2p-fF`4(X2q{d9l;mrvd7^vdm`}GSRNodrt%IQFpPNQca2ig_S@RQC!jI zt?oMV;*p$smCiy#ne$lw?beevcd1*^KxbnPYX}I*An`-jv#R@@z9z%iRGDjRzGJB0xnN;Unwam3W|T}eQF z4f@i8iwy_ZNA2()&u`N`QN0GIF(^d<@WeihZL^oBf%BqQEWQ_6^ib2~cptRb!Rf;M zg4FM?zxnr$@Ru=E=)Ov$>zt|VtmED@T5y8lX;g@=7sxG(fkSeY{jV}}stmHnvkbeX zaSl`r&;_r2<($URC;0emMPL3-4*X;Wda|p+wJ2P!g~7%_k(J6a`(6EY-rUS+fVM(E z0O7{bc=UP(Q+gDNv-&2Y=rWom=JQ&8AWlfdcCPYxN_N}xjs{onVNNqeu;{FNTPgm> zXS|0L3omYIeeMS#7(Vk-wV^Pz`=?qWeuz9N1p1Y={rl-aIID}_+F~>xb&;fcMp`8Q z-|Y*%%%Dh?&Y(W7N;8iC{X1i^jrFg;jS6*b*IkzEvMOnb{9JQ z=}%*{v=IW^LSb>2*%`4f)1LhVg}Iz}RO?w@<~?KOTF@5hF%x^iMf3?dksVWqz6nDZ z2!f`ry>z%94FW8TrQ`gElafRTQ4l>cu7R1$axHRS0P;tl@W7{#>)?S%@{obC2B}J|mY$XUFV` zsiyQ`;(Jc{wNK_1KimBPH8o1gEr^8|RH4{h@^= z`bnC^lA57zI%YKKCqoA{w-;hckJF2GTY#+RDj4ZX_mubqF*L+alV)<5`OW>JDbXi=`t~VqP3u?7L5V6tu#GL6IigIa+ zDfb)?o~)QiE%Hegvi|XZN&T$Lz5Qsi}WQD#J0VTY(Dr<|3ib-TC!s zYIYSe2}LU3?i)x)pGX#I5!#SZJVcw!RE(Ld@PCU7ENJXfUFHu%Ivb2OnpyXh166dC zqU}{AlcP8IJGi9;@>G=O15^K4>(06((ad9y=~x?s&X6Xvzb+kP__U(S5BxJWAY}UXh=f z1VaR;zHWaIlBK6bmgk~6meP!Pt>%{3NS>n5nPT)MV=l@>v#ixoXT465$5Amerv=Rt z(Eq22Q2rQqaq0u`w*@ULqOKLf}`^t}gDzUPt=I0WmqAB0}FloMZFg%gdG(InEw)Lw6~eC;`_Fa2!Q0q)(b9WM9-B8x z*G2LKT76!sLrqFuQE=b-jhVPk`i-Pj3a4!r<0^~7uKo^4 zKzgg2Zg7kXRR2bbI+4w~GDUx^X~?j-Kgv%=r#j$=IN$%kLE!KzEp9t_uRv6~hAbWb ziqU>o*|@jPj2s4(cwL1gA^+kEixISwbo6jY>P0Cu2bW&Jko?h;Y&e_x)6 z8W*$;>wdI-=1&%43}YITffeBPFH2kp48~`+#lyFs^vp}dZ)G5$Zg#9mXJ$uh9&8@1 zrYsY3b)mA}$@-aX#R72);ynH|A=QzEsTlxP;u+S^U+uZ@KYsFM(^h=A0H!%j=t`re zGTsi}BMUS@DfTqp&OeUW0ozgK!2{hUFuXXb_8%F}i-?z_|6ITzQ?AW#QY2qgF-a7c5 za4+41f+!}dfU&2=Kp^YeN6r+#qGyct`nRU2Vu{)uWXhK0GT#i1^T?&(dL*qt?zX!w zX;hCD|CY~>;nbznz26$lM7b=D?tmk(E#DZz+n?>Y;O2YUC0c&gQW3tu2D8+tDqMm! z4Az)$pPV#~YAAmE4zBWPwsdAq?NR(tEA_nL3%u8OajLW~Y(}E$wWy-*XP>S&?9HV< z-R*{8rizByE=qZG4ZNZ&&B+vWHlBk;AH}LKZ6+qNQ3nm4ANua2a?BXh`_Oz#FGZ6( zSxg++suM4G{|_UI(ved4}&=+%BnE0Xh$h8ut#wo=xhkd(?!O_bMhX7Hwd4+ zVLhF~Ry~9U@QUMMx^++f-o^myf)=}*D;aW5B$IZtbX=-bVfK6yKj1UG;%1-o6N9sB zk1w}w$;X#H1E)g3Ue+vKp96ReqMFmJbsntMts+@@EwHOICsuKdIw@MZ$XO|#v6Cc) zF&@|TbIez9>%KKpQ?E=7z223ZFA)w3-eGVCHx^y57vyW-NGrN!DDxWx`DOwc&4G@Y zn{&5*OpN#qlSTo&Nxvw!mYq}XjCY8boDb#|0up9wlMSPPZbgUAy@x#8xhLyc2Ya6e zv|EXvgnDSY@+djhJ!k58ReD8Wz9zA8y-x8&%& zaVy=%MEFiZrkma)xUsNHnCT+4j(-L0t1wq>ba=}Z_11=+Wy~rk2Pl9p26K6*GV`J3DFr$mpSb#n(l?YirXN%~!X zrBS2}S*E(4@2GrX^-P6!ket>)?TETyv-gy3`$dDy9ZEUl68DO&P@ppSItXfgEFJ}S z>lHGf%jNY+FFB~a)0UOO<%Ov*6Y@OqqFkC3Md>8dQk0+T&o2!x$hy1`B!8!M^6%@Y zkj#%0Ssn6aqY=5h_ulE|Esn?J9t*xXXHOuD@9-{=B(XP4^!-B+!tTgrUL5Rs*2`E6 z#;3iNZvv$&aKyK(`w+}w2``&}iV2+`3~f|vSQ8xn$u#~63p|UsdxLviOZ!l8^K4aE z$UedHJNx%a-;VP%Qjxj++CD^#<=Wu#Oh{n63B`<76qfLv_#xQy)lJnEBJfwI@S*&> zGa)Y8&U2_gY=?tZKrs-_gQe`+h}#byY^w(t{j$tGAA=>Bd-rFD{e2BGT$^g$v#r0T zU(nGLt_Tsleu!>D{IQwsE)`+ziAo5j{%!lx{;B8A5W(SdzW#%@j6Ss^i9WrYkDf%; zgD@%Z8%P`0{-N=sK)rAZlc6!Gh0Z>aVHLBa=|J8X&7v`yg*Ol$(LM75Bp>8$);VHZ z{Dr(a_Oh*%5KPYa3&%<^tZ$8+t?jdnOGEs*%^sUw(++(NnMXpaaIwkQoo>-n zv+H;PP}Hf>8e;o3qyt!h9F`5J_XOpytPnCvLu zab*c&V~)8YKnO)N?^Bd`&2xFh%bhkV)wSf&ZX%QJsU3iYaOd! z*8!9SH-UH_&T(V%jc$0b?m~oMKa6*jdN7N2V3D;ZhG6#!Y{)n-U%`B11>3fyNyMl$ zi8fRSK&Ub6-n6dH!PwI!_@Fe5$lxLDnho8I&|gFnv6Y~#2F5o1O=!l!l&QFKOmV2FiWZALjgRqLPGA^yyZO?RPzpz1`+&EC$o^l$_g|x9o)3_Ntih zu;;a!?1-$BWN=kgiqmzRcLCpkkCVg9YgF#yI!c>Zv`OZ^YcH55%JMm=s3PLPv@N(v z@|%ru&vC#?QN)N6LGe%jlyy%OE08$#@?HcRp)3nfWuM2B`Y+e))QY(tc7B4AgP-6J zPxn}ucgrvTm6&dVxQ0zM5}|U{Mzi0R1ROq&Qva0Kj)!8Z3i~l!A_RRf2mHK4u?(kN z{!P^!5BB|D1MB=qu1fZh2+PVN*oAjMhl3mH&?9)pO!d)JLNPjeq4kEg#g`!V2p2(t zGxgX_{V01|_ojp$(_rU|I;cS)~tcUPCftF{9MBbdwPPA|B;q!2@0Oq9O#=8=cC+wT|tk2CELB*#Z4CIvQ(8NV>t<1!=DS366 zHo8G&x3(0vb@e$+z4yU03Zjjp8Y)6?MIV>~hkI8atyB6%c7gtl+dkts69NC$dr^Ds zS^l~&Dk&Ew&CeV~DoKJ`c^q(Tw)?m8t2Cx7~R>#xdJn%8GuKaS}R!j?#5f26k_oAzQ+g#}C5WboL(>0v7 zGAB#Z`Z{jM3!blhk7;IGIDHZXwb7L8>5}oe|!<4C-fU(79(D0-L1^$wWT3nByYr0W}P``d9_^ z)3r&h|6vy-kie;#vxnN_4y1tJv_Rx>jKyKql8jPijZ_6d;nQ^i`+ZrbVQ2}niwI!_ z(x%b-kc-zAirq;R>*S!rXj@WbYn#8?4Kvl@*-SRmqsLH&IRD_G2d{8-FDT=nlD(21 zhL6-pGfInTkGs^IGcnnkP3W6>6Tocm10Gx4nrP&aCMn6J{7%fCB9?taACS60LaVHQ zv|yZCBe$3WdCuz2Ytywe{##M|A5Mll1KbhL6%C%jMYM8wx7=+JHq+2R`Y|UD3(WYK z2mguNL+5SwUnp;XdJ@|=lo*1vF~R>(pz_xRiE~_HSn~i4>m}bV>Ok>Mx4gRDEn5ZA z;X}+i+vxU&Wf8u%BnY|#4eI-csLi+~X0zu#=8rc!9Kq(ERSN5~H&cb=4iZvk|FD}Q z-Z&)v;AjHWSq0q52!L=-@9hUQNEp3EFfRo=2a_z-iyA}ccH=^j5hnia53<%4p7s9QmeVI-iUVPj7EHz;!UMt|*l14{4Q z$mFJE?|Z{}*@AcQ&?cdJI}G zx?|1IhakyCfA*cAB+!fSSaZ8Y5UOD`ulyv|Ifa}nD9d+K5*S^n*{%G40!aY2{{|Jm z%zXF?RliL#tmtLtyk#3_k|AcEl)hn-3@C0{y3G^WhDkD@am#4mwT@!^l1PSE_I)J# VbJSJsqKE(h002ovPDHLkV1h_3O0@t0 literal 0 HcmV?d00001 diff --git a/source/images/supported_brands/opencv.png b/source/images/supported_brands/opencv.png new file mode 100644 index 0000000000000000000000000000000000000000..521a0dcee0c948c362b1ee948b74aba262711573 GIT binary patch literal 2362 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 gTJo>nCH)X!0ID(F00 Date: Sat, 6 May 2017 22:28:44 +0200 Subject: [PATCH 24/28] Update customization.markdown Fix missing hassbian-config scripts mentions. --- source/_docs/hassbian/customization.markdown | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/source/_docs/hassbian/customization.markdown b/source/_docs/hassbian/customization.markdown index 7eeec8d4585..4ddd379dc58 100644 --- a/source/_docs/hassbian/customization.markdown +++ b/source/_docs/hassbian/customization.markdown @@ -12,12 +12,14 @@ redirect_from: /getting-started/hassbian-customization/ To allow you to customize your installation further, we have included a tool called `hassbian-config`. This tool comes with a set of packages that can easily be installed for easier customization of your Home Assistant installation. +- Install Hue. Configures the Python executable to allow usage of low numbered ports for use with Emulated Hue component thats used with Amazon Echo, Google Home and Mycroft.ai. + - Install Mosquitto MQTT server. Installs the latest Mosquitto package and client tools from the Mosquitto projects official repository. Now includes websocket support. + - Install Libcec. Adds local [HDMI CEC support][cec]. + - Install Open Z-Wave-pip. Installs Python Open Z-Wave from a pip package. This is the quickest and recommended way of installing Z-Wave support but does not OZWCP pre-installed. + - Install Open Z-Wave. Installs Python Open Z-Wave and OZWCP from git. - Install Samba. Allows anyone on your network to edit your configuration from any computer. This share is unsecured and it's usage is not recommended if you share your network with others. - - Install Libcec. Adds local [HDMI CEC support][cec]. - - Install Mosquitto MQTT server. Installs the latest Mosquitto package and client tools from the Mosquitto projects offical repository. Now includes websocket support. - - Install Open Z-Wave. Installs Open Z-Wave and prepares for using a USB or GPIO ZWave controller. - - Install Hue. hue: Configures the Python executable to allow usage of low numbered ports for use with Emulated Hue component thats used with Amazon Echo, Google Home and Mycroft.ai. - - Install Tellstick. Installs the Tellstick package for controling and using a connected Tellstick. +- Install Tellstick. Installs the Tellstick package for controlling and using a connected Tellstick. +- Install Tradfri. Installs dependencies for using IKEA Trådfri. The tool is available by running `hassbian-config`. To view the available packages run `hassbian-config show` and `sudo hassbian-config install PACKAGENAME`. For more information about this tool have a look at the [hassbian-scripts repository][hassbian-repo]. From c41577367f38a91132fcb7537c918450987feac0 Mon Sep 17 00:00:00 2001 From: Fredrik Lindqvist Date: Sat, 6 May 2017 22:30:01 +0200 Subject: [PATCH 25/28] Update customization.markdown Fix formatting of HAssbian config list. --- source/_docs/hassbian/customization.markdown | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/source/_docs/hassbian/customization.markdown b/source/_docs/hassbian/customization.markdown index 4ddd379dc58..dfc566f1ff8 100644 --- a/source/_docs/hassbian/customization.markdown +++ b/source/_docs/hassbian/customization.markdown @@ -12,14 +12,14 @@ redirect_from: /getting-started/hassbian-customization/ To allow you to customize your installation further, we have included a tool called `hassbian-config`. This tool comes with a set of packages that can easily be installed for easier customization of your Home Assistant installation. -- Install Hue. Configures the Python executable to allow usage of low numbered ports for use with Emulated Hue component thats used with Amazon Echo, Google Home and Mycroft.ai. - - Install Mosquitto MQTT server. Installs the latest Mosquitto package and client tools from the Mosquitto projects official repository. Now includes websocket support. - - Install Libcec. Adds local [HDMI CEC support][cec]. - - Install Open Z-Wave-pip. Installs Python Open Z-Wave from a pip package. This is the quickest and recommended way of installing Z-Wave support but does not OZWCP pre-installed. - - Install Open Z-Wave. Installs Python Open Z-Wave and OZWCP from git. - - Install Samba. Allows anyone on your network to edit your configuration from any computer. This share is unsecured and it's usage is not recommended if you share your network with others. -- Install Tellstick. Installs the Tellstick package for controlling and using a connected Tellstick. -- Install Tradfri. Installs dependencies for using IKEA Trådfri. + - Install Hue. Configures the Python executable to allow usage of low numbered ports for use with Emulated Hue component thats used with Amazon Echo, Google Home and Mycroft.ai. + - Install Mosquitto MQTT server. Installs the latest Mosquitto package and client tools from the Mosquitto projects official repository. Now includes websocket support. + - Install Libcec. Adds local [HDMI CEC support][cec]. + - Install Open Z-Wave-pip. Installs Python Open Z-Wave from a pip package. This is the quickest and recommended way of installing Z-Wave support but does not OZWCP pre-installed. + - Install Open Z-Wave. Installs Python Open Z-Wave and OZWCP from git. + - Install Samba. Allows anyone on your network to edit your configuration from any computer. This share is unsecured and it's usage is not recommended if you share your network with others. + - Install Tellstick. Installs the Tellstick package for controlling and using a connected Tellstick. + - Install Tradfri. Installs dependencies for using IKEA Trådfri. The tool is available by running `hassbian-config`. To view the available packages run `hassbian-config show` and `sudo hassbian-config install PACKAGENAME`. For more information about this tool have a look at the [hassbian-scripts repository][hassbian-repo]. From bf776b5ab31584243dc06d49bca638c4e0653668 Mon Sep 17 00:00:00 2001 From: Erik-jan Riemers Date: Sat, 6 May 2017 22:40:33 +0200 Subject: [PATCH 26/28] Added a note about formats for mediaplayers (#2579) Note points out sonos, since it is widely used and actual --- source/_components/tts.voicerss.markdown | 2 ++ 1 file changed, 2 insertions(+) diff --git a/source/_components/tts.voicerss.markdown b/source/_components/tts.voicerss.markdown index b89fa5ec71d..cd1a0156da8 100644 --- a/source/_components/tts.voicerss.markdown +++ b/source/_components/tts.voicerss.markdown @@ -43,3 +43,5 @@ tts: codec: mp3 format: 8khz_8bit_mono ``` + +Please note, some media_players require a certain format. For example the Sonos requires a format of '44khz_16bit_stereo' From 2d14069a5d77db4372956f0d9275d12778d8caaa Mon Sep 17 00:00:00 2001 From: Fredrik Lindqvist Date: Sat, 6 May 2017 22:41:17 +0200 Subject: [PATCH 27/28] Update 2017-04-30-hassbian-1.21-its-about-time.markdown (#2580) Fix sorting of hassbian-config scripts in blogpost. --- ...017-04-30-hassbian-1.21-its-about-time.markdown | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/source/_posts/2017-04-30-hassbian-1.21-its-about-time.markdown b/source/_posts/2017-04-30-hassbian-1.21-its-about-time.markdown index 98c1f22f7a4..2a13cc6821d 100644 --- a/source/_posts/2017-04-30-hassbian-1.21-its-about-time.markdown +++ b/source/_posts/2017-04-30-hassbian-1.21-its-about-time.markdown @@ -21,14 +21,14 @@ With the release of 1.21 a small problem with the OpenZWave build script wasn't To allow you to customize your installation further, we have included a tool called `hassbian-config`. This tool comes with a set of packages that can easily be installed for easier customization of your Home Assistant installation. This replaces the `hassbian-scripts` functionality from 1.1. - - Install Samba. Allows anyone on your network to edit your configuration from any computer. This share is unsecured and it's usage is not recommended if you share your network with others. - - Install Libcec. Adds local [HDMI CEC support][cec]. - - Install Mosquitto MQTT server. Installs the latest Mosquitto package and client tools from the Mosquitto projects official repository. Now includes websocket support. - - Install Open Z-Wave-pip. Installs Python Open Z-Wave from a pip package. This is the quickest and recommended way of installing Z-Wave support but does not OZWCP pre-installed. - - Install Open Z-Wave. Installs Python Open Z-Wave and OZWCP from git. - - Install Tradfri. Installs dependencies for using IKEA Trådfri. - Install Hue. Configures the Python executable to allow usage of low numbered ports for use with Emulated Hue component thats used with Amazon Echo, Google Home and Mycroft.ai. - - Install Tellstick. Installs the Tellstick package for controlling and using a connected Tellstick. + - Install Mosquitto MQTT server. Installs the latest Mosquitto package and client tools from the Mosquitto projects official repository. Now includes websocket support. + - Install Libcec. Adds local [HDMI CEC support][cec]. + - Install Open Z-Wave-pip. Installs Python Open Z-Wave from a pip package. This is the quickest and recommended way of installing Z-Wave support but does not OZWCP pre-installed. + - Install Open Z-Wave. Installs Python Open Z-Wave and OZWCP from git. + - Install Samba. Allows anyone on your network to edit your configuration from any computer. This share is unsecured and it's usage is not recommended if you share your network with others. + - Install Tellstick. Installs the Tellstick package for controlling and using a connected Tellstick. + - Install Tradfri. Installs dependencies for using IKEA Trådfri. ### {% linkable_title Spring cleaning %} From 891aa2103e677c26aa97faec472eee2dd2a0ce74 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Sat, 6 May 2017 14:00:58 -0700 Subject: [PATCH 28/28] Add links to intro --- source/_posts/2017-05-06-zigbee-opencv-dlib.markdown | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/_posts/2017-05-06-zigbee-opencv-dlib.markdown b/source/_posts/2017-05-06-zigbee-opencv-dlib.markdown index f6c0334ea22..0cee20e691b 100644 --- a/source/_posts/2017-05-06-zigbee-opencv-dlib.markdown +++ b/source/_posts/2017-05-06-zigbee-opencv-dlib.markdown @@ -13,9 +13,9 @@ 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 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) +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) -Another great new addition is OpenCV by [Teagan Glenn][@teagan42]. So now you'll be able to unlock all the cool stuff from OpenCV right in Home Assistant. And if OpenCV is not your style, you can try out the new DLib integration added by [Pascal Vizeli][@pvizeli] in this release. +Another great new addition is [OpenCV][opencv docs] by [Teagan Glenn][@teagan42]. So now you'll be able to unlock all the cool stuff from OpenCV right in Home Assistant. And if OpenCV is not your style, you can try out the new [DLib integration][image_processing.dlib_face_identify docs] added by [Pascal Vizeli][@pvizeli] in this release. This release also includes a [new component][rss_feed_template docs] to dynamically generate RSS feeds based on a template. This means that any RSS widget on your phone, tablet or computer can now be used to show Home Assistant data!