From 35b2c34c9df728e60f746b535971ac15e923f778 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Thu, 9 Jun 2016 07:58:46 +0200 Subject: [PATCH 01/63] Initial snmp sensor docs (#538) --- source/_components/sensor.snmp.markdown | 54 +++++++++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 source/_components/sensor.snmp.markdown diff --git a/source/_components/sensor.snmp.markdown b/source/_components/sensor.snmp.markdown new file mode 100644 index 00000000000..c59c7c5c63b --- /dev/null +++ b/source/_components/sensor.snmp.markdown @@ -0,0 +1,54 @@ +--- +layout: page +title: "SNMP" +description: "Instructions how to integrate SNMP sensors within Home Assistant." +date: 2016-06-05 20:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: network-snmp.png +ha_category: Sensor +ha_iot_class: "Local Polling" +ha_release: "0.21" +--- + + +The `snmp` sensor platform simple displays the information which are available through the [Simple Network Management Protocol (SNMP)](https://en.wikipedia.org/wiki/Simple_Network_Management_Protocol). SNMP uses a tree-like hierarchy where each node is an object. + +To enable this sensor in your installation, add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +sensor: + platform: snmp + name: Load + host: 192.168.1.32 + port: 161 + community: public + baseoid: 1.3.6.1.4.1.2021.10.1.3.1 + unit_of_measurement: "%" +``` + +Configuration variables: + +- **host** (*Required*): The IP address of your host, eg. 192.168.1.32. +- **port** (*Option*): The SNMP port of your host. Defaults to 161. +- **name** (*Optional*): Name of the SNMP sensor. +- **community** (*Optional*): The SNMP community which is set for the device. Most devices have a default community set to to `public` with read-only permission (which is sufficient). +- **baseoid** (*Required*): The OID where the information is located. It's advised to use the numerical notation. +- **unit_of_measurement** (*Optional*): Defines the unit of measurement of the sensor, if any. + +The OIDs may vary on different system because they are vendor-specific. Beside the device's manual is the [OID Repository](http://www.oid-info.com/) a good place to start if you are looking for OIDs. The following OIDs are for the load of a Linux systems. + +- 1 minute Load: 1.3.6.1.4.1.2021.10.1.3.1 +- 5 minute Load: 1.3.6.1.4.1.2021.10.1.3.2 +- 15 minute Load: 1.3.6.1.4.1.2021.10.1.3.3 + +There is a large amount of tools available to work with SNMP. `snmpwalk` let you easily retrieve the value of a OID. + +```bash +$ snmpwalk -Os -c public -v 2c 192.168.1.32 1.3.6.1.4.1.2021.10.1.3.1 +laLoad.1 = STRING: 0.19 +``` + From 2764b4bc3da392c05c3de500d1bbc23c141569a4 Mon Sep 17 00:00:00 2001 From: Jacob Tomlinson Date: Sun, 12 Jun 2016 12:23:31 +0100 Subject: [PATCH 02/63] Fixed markdown and added logo (#551) --- source/_components/light.rfxtrx.markdown | 5 +++-- source/_components/rfxtrx.markdown | 1 + .../_components/rollershutter.rfxtrx.markdown | 9 +++++---- source/_components/sensor.rfxtrx.markdown | 18 +++++++++--------- source/_components/switch.rfxtrx.markdown | 7 ++++--- 5 files changed, 22 insertions(+), 18 deletions(-) diff --git a/source/_components/light.rfxtrx.markdown b/source/_components/light.rfxtrx.markdown index 9218c91c971..98761dd20e3 100644 --- a/source/_components/light.rfxtrx.markdown +++ b/source/_components/light.rfxtrx.markdown @@ -7,6 +7,7 @@ sidebar: true comments: false sharing: true footer: true +logo: rfxtrx.png ha_category: Light ha_release: 0.7.5 --- @@ -29,14 +30,14 @@ Push your remote and your device should be added:

-Here the name is 0b11000102ef9f210010f70 and you can verify that it works from the frontend. +Here the name is 0b11000102ef9f210010f70 and you can verify that it works from the frontend. Then you should update your configuration to: ```yaml light: platform: rfxtrx devices: - 0b11000102ef9f210010f70: + 0b11000102ef9f210010f70: name: device_name ``` diff --git a/source/_components/rfxtrx.markdown b/source/_components/rfxtrx.markdown index 67e2c7a286c..18c733850e4 100644 --- a/source/_components/rfxtrx.markdown +++ b/source/_components/rfxtrx.markdown @@ -7,6 +7,7 @@ sidebar: true comments: false sharing: true footer: true +logo: rfxtrx.png ha_category: Hub ha_release: pre 0.7 --- diff --git a/source/_components/rollershutter.rfxtrx.markdown b/source/_components/rollershutter.rfxtrx.markdown index 831e600d6a4..29227ce431f 100644 --- a/source/_components/rollershutter.rfxtrx.markdown +++ b/source/_components/rollershutter.rfxtrx.markdown @@ -2,11 +2,12 @@ layout: page title: "RFXtrx Rollershutter" description: "Instructions how to integrate RFXtrx roller shutters into Home Assistant." -date: 2016-06-02 22:10 +date: 2016-06-11 22:40 sidebar: true comments: false sharing: true footer: true +logo: rfxtrx.png ha_category: Rollershutter ha_release: 0.21 --- @@ -30,6 +31,7 @@ Push your remote and your device should be added. Once added it will show an id (e.g `0b11000102ef9f210010f70`) and you can verify that it works from the frontend. Then you should update your configuration to: + ```yaml rollershutter: platform: rfxtrx @@ -38,8 +40,8 @@ rollershutter: name: device_name ``` -#####RFY -The RFXtrx433e is required for RFY support, however it does not support receive for the RFY protocol - as such devices cannot be automatically added. Instead, configure the device in the [rfxmngr](http://www.rfxcom.com/downloads.htm) tool. Make a note of the assigned ID and Unit Code and then add a device to the configuration with the following id `071a0000[id][unit_code]`. Eg, if the id was `a` (`0a`) `00` `01`, and the unit code was `1` (`01`) then the fully qualified id would be `071a00000a000101`. +##### RFY +The RFXtrx433e is required for RFY support, however it does not support receive for the RFY protocol - as such devices cannot be automatically added. Instead, configure the device in the [rfxmngr](http://www.rfxcom.com/downloads.htm) tool. Make a note of the assigned ID and Unit Code and then add a device to the configuration with the following id `071a0000[id][unit_code]`. Eg, if the id was `0a` `00` `01`, and the unit code was `01` then the fully qualified id would be `071a00000a000101`. #####Common @@ -64,4 +66,3 @@ Configuration variables: - **automatic_add** (*Optional*): To enable the automatic addition of new roller shutters (Siemens/LightwaveRF only). - **signal_repetitions** *Optional*: Because the rxftrx device sends its actions via radio and from most receivers it's impossible to know if the signal was received or not. Therefore you can configure the roller shutter to try to send each signal repeatedly. - **fire_event** *Optional*: Fires an event even if the state is the same as before. Can be used for automations. - diff --git a/source/_components/sensor.rfxtrx.markdown b/source/_components/sensor.rfxtrx.markdown index 8fa51cac38d..1a2b3531a19 100644 --- a/source/_components/sensor.rfxtrx.markdown +++ b/source/_components/sensor.rfxtrx.markdown @@ -7,6 +7,7 @@ sidebar: true comments: false sharing: true footer: true +logo: rfxtrx.png ha_category: Sensor --- @@ -16,7 +17,7 @@ First you have to set up your [rfxtrx hub.](/components/rfxtrx/) The easiest way to find your sensors is to add this to your `configuration.yaml`: ```yaml -sensor: +sensor: platform: rfxtrx automatic_add: True ``` @@ -27,26 +28,26 @@ Then when the sensor emits a signal it will be automatically added:

-Here the name is 0a52080000301004d240259 and you can verify that it works from the frontend. +Here the name is 0a52080000301004d240259 and you can verify that it works from the frontend. Then you should update your configuration to: ```yaml sensor: platform: rfxtrx devices: - 0a52080000301004d240259: + 0a52080000301004d240259: name: device_name ``` If you want to display several data types from one sensor: ```yaml -sensor: +sensor: platform: rfxtrx devices: - 0a520802060100ff0e0269: + 0a520802060100ff0e0269: name: Bath - data_type: + data_type: - Humidity - Temperature ``` @@ -57,7 +58,7 @@ Example configuration: ```yaml # Example configuration.yaml entry -sensor: +sensor: platform: rfxtrx automatic_add: True devices: @@ -65,7 +66,7 @@ sensor: name: Lving 0a520802060100ff0e0269: name: Bath - data_type: + data_type: - Humidity - Temperature ``` @@ -75,4 +76,3 @@ Configuration variables: - **devices** (*Optional*): A list of devices with their name to use in the frontend. - **automatic_add** (*Optional*): To enable the automatic addition of new lights. - **data_type** (*Optional*): Which data type the sensor should show - diff --git a/source/_components/switch.rfxtrx.markdown b/source/_components/switch.rfxtrx.markdown index f86f1b24f1b..92b807915c1 100644 --- a/source/_components/switch.rfxtrx.markdown +++ b/source/_components/switch.rfxtrx.markdown @@ -7,6 +7,7 @@ sidebar: true comments: false sharing: true footer: true +logo: rfxtrx.png ha_category: Switch ha_release: 0.7.5 --- @@ -29,14 +30,14 @@ Push your remote and your device should be added:

-Here the name is 0b11000102ef9f210010f70 and you can verify that it works from the frontend. +Here the name is 0b11000102ef9f210010f70 and you can verify that it works from the frontend. Then you should update your configuration to: ```yaml switch: platform: rfxtrx devices: - 0b11000102ef9f210010f70: + 0b11000102ef9f210010f70: name: device_name ``` @@ -44,7 +45,7 @@ Example configuration: ```yaml # Example configuration.yaml entry -switch: +switch: platform: rfxtrx automatic_add: False signal_repetitions: 2 From e659f44a223e9701ddd7614590bc36c28dce0c55 Mon Sep 17 00:00:00 2001 From: Jeffrey Lin Date: Sun, 12 Jun 2016 04:25:03 -0700 Subject: [PATCH 03/63] Added documentation for router operating mode for asuswrt (#545) --- source/_components/device_tracker.asuswrt.markdown | 2 ++ 1 file changed, 2 insertions(+) diff --git a/source/_components/device_tracker.asuswrt.markdown b/source/_components/device_tracker.asuswrt.markdown index 0b7edf68dd9..5f434f14acc 100644 --- a/source/_components/device_tracker.asuswrt.markdown +++ b/source/_components/device_tracker.asuswrt.markdown @@ -23,6 +23,7 @@ device_tracker: platform: asuswrt host: YOUR_ROUTER_IP protocol: telnet + mode: router username: YOUR_ADMIN_USERNAME password: YOUR_ADMIN_PASSWORD ``` @@ -31,6 +32,7 @@ Configuration variables: - **host** (*Required*): The IP address of your router, eg. 192.168.1.1. - **protocol** (*Optional*): The protocol (`ssh` or `telnet`) to use. Defaults to `ssh`. +- **mode** (*Optional*): The operating mode of the router (`router` or `ap`). Defaults to `router`. - **username** (*Required*: The username of an user with administrative privileges, usually *admin*. - **password** (*Required*): The password for your given admin account. From 9034948a7ddd5dad96a6d5a7842fdc762f614fe9 Mon Sep 17 00:00:00 2001 From: Landrash Date: Mon, 13 Jun 2016 01:26:50 +0200 Subject: [PATCH 04/63] local_file camera component documenatation (#554) * Documenation for local_file camera component * Update camera.local_file.markdown --- source/_components/camera.local_file.markdown | 33 +++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 source/_components/camera.local_file.markdown diff --git a/source/_components/camera.local_file.markdown b/source/_components/camera.local_file.markdown new file mode 100644 index 00000000000..3f26f3939a9 --- /dev/null +++ b/source/_components/camera.local_file.markdown @@ -0,0 +1,33 @@ +--- +layout: page +title: "Local File" +description: "Instructions how to use Local File as a Camera within Home Assistant." +date: 2016-06-12 17:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: file.png +ha_category: Camera +ha_iot_class: "Local Polling" +ha_release: 0.22 +--- + +The `Local File ` allows you to integrate any readable image file from disk into Home Assistant as a Camera. +If the image is updated in the file system the image displayed in Home Assistant will also be updated. +This can for example be used with various camera platforms that save a temporary images localy. + +```yaml +# Example configuration.yaml entry +camera: + platform: local_file + name: Local File + file_path: /tmp/image.jpg +``` + +Configuration variables: + + - **name** (optional): Name of the camera + - **file_path** (required): File to serve as the camera. + +The given **file_path** must be an existing file because the camera platform setup make a readable check on it. From 46f6b386a4106250825e0f779451ff37867c24de Mon Sep 17 00:00:00 2001 From: arsaboo Date: Sun, 12 Jun 2016 19:26:52 -0400 Subject: [PATCH 05/63] Added information about voltage sensor --- source/_components/sensor.bloomsky.markdown | 2 ++ 1 file changed, 2 insertions(+) diff --git a/source/_components/sensor.bloomsky.markdown b/source/_components/sensor.bloomsky.markdown index 08a9852e086..07c28221aa6 100644 --- a/source/_components/sensor.bloomsky.markdown +++ b/source/_components/sensor.bloomsky.markdown @@ -28,6 +28,7 @@ sensor: - UVIndex - Luminance - Night + - Voltage ``` Configuration variables: @@ -40,3 +41,4 @@ Configuration variables: - Rain - Temperature - UVIndex + - Voltage From 54035fa086a808a9409ddd5fcc09f9c8afa31387 Mon Sep 17 00:00:00 2001 From: Nick Touran Date: Sun, 12 Jun 2016 22:37:11 -0700 Subject: [PATCH 06/63] Instructions for Pandora media player (#552) --- .../_components/media_player.pandora.markdown | 63 ++++++++++++++++++ source/images/screenshots/pandora_player.png | Bin 0 -> 30050 bytes source/images/supported_brands/pandora.png | Bin 0 -> 29272 bytes 3 files changed, 63 insertions(+) create mode 100644 source/_components/media_player.pandora.markdown create mode 100644 source/images/screenshots/pandora_player.png create mode 100644 source/images/supported_brands/pandora.png diff --git a/source/_components/media_player.pandora.markdown b/source/_components/media_player.pandora.markdown new file mode 100644 index 00000000000..e46b3a2304d --- /dev/null +++ b/source/_components/media_player.pandora.markdown @@ -0,0 +1,63 @@ +--- +layout: page +title: "Pandora" +description: "Instructions how to integrate Pandora radio into Home Assistant." +date: 2016-06-10 19:59 +sidebar: true +comments: false +sharing: true +footer: true +logo: pandora.png +ha_category: Media Player +featured: false +--- + +If you have a Pandora account, you can control it from Home Assistant with this media player. + + +### {% linkable_title Installation of Pianobar %} + +This media player uses the [Pianobar command-line Pandora client](https://github.com/PromyLOPh/pianobar), which you have to install separately. This can be done on a Raspberry Pi 2 with Raspbian Jesse as follows . _(Note: Other platforms may have different installation processes)_ + +Install the following dependencies: + +```bash +$ sudo apt-get install git libao-dev libgcrypt11-dev libfaad-dev libmad0-dev libjson0-dev make pkg-config libav-tools libavcodec-extra libavcodec-dev libcurl4-openssl-dev libavfilter-dev libavformat-dev +``` + +Now clone the Pianobar repo and build pianobar: + +```bash +$ git clone https://github.com/PromyLOPh/pianobar.git +$ cd pianobar +$ make clean && make +$ sudo make install +``` + +Configure Pianobar to auto-login and start playing a station (optional, see `man pianobar`) by creating and editing the `~/.config/pianobar/config` file: + +```bash +password = Password +user = you@youraccount.com +``` + +Test it out by running `pianobar` in the command line. You should be able to listen to your Pandora stations. + +### {% linkable_title Configuration in Home Assistant %} + +The Pandora player can be loaded by adding the following lines to your `configuration.yaml`: + +```yaml +# Example configuration.yaml entry +media_player: + platform: pandora +``` + +That's it! Now you will find a media player. If you click it you will find all your stations listed as different sources. If you switch to one, the station will begin playing. + +

+ +

+ +

This is a new component and it has some issues.

+ diff --git a/source/images/screenshots/pandora_player.png b/source/images/screenshots/pandora_player.png new file mode 100644 index 0000000000000000000000000000000000000000..28548ed141f70799f63b2c5deeafa69e502ea546 GIT binary patch literal 30050 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 literal 0 HcmV?d00001 diff --git a/source/images/supported_brands/pandora.png b/source/images/supported_brands/pandora.png new file mode 100644 index 0000000000000000000000000000000000000000..c9c1e2f9f500304c56b5cee54be43ee2b7186fa0 GIT binary patch literal 29272 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 Date: Mon, 13 Jun 2016 07:40:25 +0200 Subject: [PATCH 07/63] Add release --- source/_components/media_player.pandora.markdown | 1 + 1 file changed, 1 insertion(+) diff --git a/source/_components/media_player.pandora.markdown b/source/_components/media_player.pandora.markdown index e46b3a2304d..6d6e3b2a563 100644 --- a/source/_components/media_player.pandora.markdown +++ b/source/_components/media_player.pandora.markdown @@ -10,6 +10,7 @@ footer: true logo: pandora.png ha_category: Media Player featured: false +ha_release: 0.22 --- If you have a Pandora account, you can control it from Home Assistant with this media player. From 1965ba93d6a4a8b204171709520cc7900c2e4b59 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Mon, 13 Jun 2016 07:49:10 +0200 Subject: [PATCH 08/63] Add pub_key --- source/_components/device_tracker.asuswrt.markdown | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/source/_components/device_tracker.asuswrt.markdown b/source/_components/device_tracker.asuswrt.markdown index 5f434f14acc..b6631401078 100644 --- a/source/_components/device_tracker.asuswrt.markdown +++ b/source/_components/device_tracker.asuswrt.markdown @@ -34,7 +34,8 @@ Configuration variables: - **protocol** (*Optional*): The protocol (`ssh` or `telnet`) to use. Defaults to `ssh`. - **mode** (*Optional*): The operating mode of the router (`router` or `ap`). Defaults to `router`. - **username** (*Required*: The username of an user with administrative privileges, usually *admin*. -- **password** (*Required*): The password for your given admin account. +- **password** (*Optional*): The password for your given admin account (use this if no public key is given). +- **pub_key** (*Optional*): The public key for your given admin account (instead of password).

You need to enable telnet on your router if you choose to use `protocol: telnet`. From 678aa8b4d5a5754a32d72d3a4c5e3835ffa5d753 Mon Sep 17 00:00:00 2001 From: Lewis Juggins Date: Mon, 13 Jun 2016 13:48:37 +0100 Subject: [PATCH 09/63] Add BT Home Hub docs --- .../device_tracker.bt_home_hub_5.markdown | 33 ++++++++++++++++++ .../_components/device_tracker.ddwrt.markdown | 2 +- source/images/supported_brands/bt.png | Bin 0 -> 9358 bytes 3 files changed, 34 insertions(+), 1 deletion(-) create mode 100644 source/_components/device_tracker.bt_home_hub_5.markdown create mode 100644 source/images/supported_brands/bt.png diff --git a/source/_components/device_tracker.bt_home_hub_5.markdown b/source/_components/device_tracker.bt_home_hub_5.markdown new file mode 100644 index 00000000000..3318cdc65ee --- /dev/null +++ b/source/_components/device_tracker.bt_home_hub_5.markdown @@ -0,0 +1,33 @@ +--- +layout: page +title: "BT Home Hub 5" +description: "Instructions how to integrate BT Home Hub 5 router into Home Assistant." +date: 2016-06-13 13:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: bt.png +ha_category: Presence Detection +--- + + +This platform offers presence detection by looking at connected devices to a [BT Home Hub 5](https://en.wikipedia.org/wiki/BT_Home_Hub) based router. + +To use a BT Home Hub 5 router in your installation, add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +device_tracker: + platform: bt_home_hub_5 + host: 192.168.1.254 + interval_seconds: 10 + consider_home: 180 + track_new_devices: yes +``` + +Configuration variables: + +- **host** (*Required*): The IP address of your router, e.g. 192.168.1.254. + +See the [device tracker component page](/components/device_tracker/) for instructions how to configure the people to be tracked. diff --git a/source/_components/device_tracker.ddwrt.markdown b/source/_components/device_tracker.ddwrt.markdown index 5eee59d85f2..a53c0aff9a4 100644 --- a/source/_components/device_tracker.ddwrt.markdown +++ b/source/_components/device_tracker.ddwrt.markdown @@ -14,7 +14,7 @@ ha_category: Presence Detection This platform offers presence detection by looking at connected devices to a [DD-WRT](http://www.dd-wrt.com/site/index) based router. -To use a DD-WRRT router in your installation, add the following to your `configuration.yaml` file: +To use a DD-WRT router in your installation, add the following to your `configuration.yaml` file: ```yaml # Example configuration.yaml entry diff --git a/source/images/supported_brands/bt.png b/source/images/supported_brands/bt.png new file mode 100644 index 0000000000000000000000000000000000000000..7b1d3dfecf7e67b437f2a95f2b022f8c075306da GIT binary patch literal 9358 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 IM6N<$f~47vp#T5? literal 0 HcmV?d00001 From 5d24ee6f887cbc1865f08abd804d84584cc7b72d Mon Sep 17 00:00:00 2001 From: Jacob Tomlinson Date: Mon, 13 Jun 2016 21:43:02 +0100 Subject: [PATCH 10/63] Markdown tweaks (#553) --- source/_components/light.rfxtrx.markdown | 26 +++++----- source/_components/rfxtrx.markdown | 1 - .../_components/rollershutter.rfxtrx.markdown | 19 ++++--- source/_components/sensor.rfxtrx.markdown | 49 +++++++++---------- source/_components/switch.rfxtrx.markdown | 34 ++++++------- 5 files changed, 63 insertions(+), 66 deletions(-) diff --git a/source/_components/light.rfxtrx.markdown b/source/_components/light.rfxtrx.markdown index 98761dd20e3..5d646d0fa0e 100644 --- a/source/_components/light.rfxtrx.markdown +++ b/source/_components/light.rfxtrx.markdown @@ -14,13 +14,13 @@ ha_release: 0.7.5 The `rfxtrx` platform support lights that communicate in the frequency range of 433.92 MHz. -First you have to set up your [rfxtrx hub.](/components/rfxtrx/) +First you have to set up your [rfxtrx hub](/components/rfxtrx/). The easiest way to find your lights is to add this to your `configuration.yaml`: ```yaml light: - platform: rfxtrx - automatic_add: True + platform: rfxtrx + automatic_add: True ``` Launch your homeassistant and go the website. @@ -30,15 +30,15 @@ Push your remote and your device should be added:

-Here the name is 0b11000102ef9f210010f70 and you can verify that it works from the frontend. +Here the name is `0b11000102ef9f210010f70` and you can verify that it works from the frontend. Then you should update your configuration to: ```yaml light: - platform: rfxtrx - devices: + platform: rfxtrx + devices: 0b11000102ef9f210010f70: - name: device_name + name: device_name ``` Example configuration: @@ -46,12 +46,12 @@ Example configuration: ```yaml # Example configuration.yaml entry light: - platform: rfxtrx - devices: - 0b11000f10e9e5660b010f70: - name: Light1 - 0b1100100f29e5660c010f70: - name: Light_TV + platform: rfxtrx + devices: + 0b11000f10e9e5660b010f70: + name: Light1 + 0b1100100f29e5660c010f70: + name: Light_TV ``` Configuration variables: diff --git a/source/_components/rfxtrx.markdown b/source/_components/rfxtrx.markdown index 18c733850e4..1c7b4df46c9 100644 --- a/source/_components/rfxtrx.markdown +++ b/source/_components/rfxtrx.markdown @@ -24,7 +24,6 @@ rfxtrx: dummy: False ``` - Configuration variables: - **device** (*Required*): The path to your device, e.g. `/dev/serial/by-id/usb-RFXCOM_RFXtrx433_A1Y0NJGR-if00-port0` diff --git a/source/_components/rollershutter.rfxtrx.markdown b/source/_components/rollershutter.rfxtrx.markdown index 29227ce431f..ffe8f6fd98e 100644 --- a/source/_components/rollershutter.rfxtrx.markdown +++ b/source/_components/rollershutter.rfxtrx.markdown @@ -2,7 +2,7 @@ layout: page title: "RFXtrx Rollershutter" description: "Instructions how to integrate RFXtrx roller shutters into Home Assistant." -date: 2016-06-11 22:40 +date: 2016-06-12 12:40 sidebar: true comments: false sharing: true @@ -14,22 +14,22 @@ ha_release: 0.21 The `rfxtrx` platform supports Siemens/LightwaveRF and RFY roller shutters that communicate in the frequency range of 433.92 MHz. -First you have to set up your [rfxtrx hub.](/components/rfxtrx/) +First you have to set up your [rfxtrx hub](/components/rfxtrx/). ### {% linkable_title Configuration %} -#####Siemens/LightwaveRF +##### Siemens/LightwaveRF The easiest way to find your roller shutters is to add this to your `configuration.yaml`: ```yaml rollershutter: - platform: rfxtrx - automatic_add: True + platform: rfxtrx + automatic_add: True ``` -Launch your homeassistant and go the website. +Launch your homeassistant and go the website (e.g http://localhost:8123). Push your remote and your device should be added. -Once added it will show an id (e.g `0b11000102ef9f210010f70`) and you can verify that it works from the frontend. +Once added it will show an ID (e.g `0b11000102ef9f210010f70`) and you can verify that it works from the frontend. Then you should update your configuration to: ```yaml @@ -41,10 +41,9 @@ rollershutter: ``` ##### RFY -The RFXtrx433e is required for RFY support, however it does not support receive for the RFY protocol - as such devices cannot be automatically added. Instead, configure the device in the [rfxmngr](http://www.rfxcom.com/downloads.htm) tool. Make a note of the assigned ID and Unit Code and then add a device to the configuration with the following id `071a0000[id][unit_code]`. Eg, if the id was `0a` `00` `01`, and the unit code was `01` then the fully qualified id would be `071a00000a000101`. +The [RFXtrx433e](http://www.rfxcom.com/RFXtrx433E-USB-43392MHz-Transceiver/en) is required for RFY support, however it does not support receive for the RFY protocol - as such devices cannot be automatically added. Instead, configure the device in the [rfxmngr](http://www.rfxcom.com/downloads.htm) tool. Make a note of the assigned ID and Unit Code and then add a device to the configuration with the following id `071a0000[id][unit_code]`. Eg, if the id was `0a` `00` `01`, and the unit code was `01` then the fully qualified id would be `071a00000a000101`. - -#####Common +##### Common Example configuration: ```yaml diff --git a/source/_components/sensor.rfxtrx.markdown b/source/_components/sensor.rfxtrx.markdown index 1a2b3531a19..d48a5c98a54 100644 --- a/source/_components/sensor.rfxtrx.markdown +++ b/source/_components/sensor.rfxtrx.markdown @@ -13,13 +13,13 @@ ha_category: Sensor The `rfxtrx` platform support sensors that communicate in the frequency range of 433.92 MHz. -First you have to set up your [rfxtrx hub.](/components/rfxtrx/) +First you have to set up your [rfxtrx hub](/components/rfxtrx/). The easiest way to find your sensors is to add this to your `configuration.yaml`: ```yaml sensor: - platform: rfxtrx - automatic_add: True + platform: rfxtrx + automatic_add: True ``` Then when the sensor emits a signal it will be automatically added: @@ -28,47 +28,45 @@ Then when the sensor emits a signal it will be automatically added:

-Here the name is 0a52080000301004d240259 and you can verify that it works from the frontend. +Here the name is `0a52080000301004d240259` and you can verify that it works from the frontend. Then you should update your configuration to: ```yaml sensor: - platform: rfxtrx - devices: + platform: rfxtrx + devices: 0a52080000301004d240259: - name: device_name + name: device_name ``` If you want to display several data types from one sensor: ```yaml sensor: - platform: rfxtrx - devices: + platform: rfxtrx + devices: 0a520802060100ff0e0269: - name: Bath - data_type: - - Humidity - - Temperature + name: Bath + data_type: + - Humidity + - Temperature ``` - - Example configuration: ```yaml # Example configuration.yaml entry sensor: - platform: rfxtrx - automatic_add: True - devices: - 0a52080705020095220269: - name: Lving - 0a520802060100ff0e0269: - name: Bath - data_type: - - Humidity - - Temperature + platform: rfxtrx + automatic_add: True + devices: + 0a52080705020095220269: + name: Lving + 0a520802060100ff0e0269: + name: Bath + data_type: + - Humidity + - Temperature ``` Configuration variables: @@ -76,3 +74,4 @@ Configuration variables: - **devices** (*Optional*): A list of devices with their name to use in the frontend. - **automatic_add** (*Optional*): To enable the automatic addition of new lights. - **data_type** (*Optional*): Which data type the sensor should show +- **fire_event** *Optional*: Fires an event even if the state is the same as before. Can be used for automations. diff --git a/source/_components/switch.rfxtrx.markdown b/source/_components/switch.rfxtrx.markdown index 92b807915c1..365e0c64893 100644 --- a/source/_components/switch.rfxtrx.markdown +++ b/source/_components/switch.rfxtrx.markdown @@ -14,13 +14,13 @@ ha_release: 0.7.5 The `rfxtrx` platform support switches that communicate in the frequency range of 433.92 MHz. -First you have to set up your [rfxtrx hub.](/components/rfxtrx/) +First you have to set up your [rfxtrx hub](/components/rfxtrx/). The easiest way to find your switches is to add this to your `configuration.yaml`: ```yaml switch: - platform: rfxtrx - automatic_add: True + platform: rfxtrx + automatic_add: True ``` Launch your homeassistant and go the website. @@ -30,15 +30,15 @@ Push your remote and your device should be added:

-Here the name is 0b11000102ef9f210010f70 and you can verify that it works from the frontend. +Here the name is `0b11000102ef9f210010f70` and you can verify that it works from the frontend. Then you should update your configuration to: ```yaml switch: - platform: rfxtrx - devices: + platform: rfxtrx + devices: 0b11000102ef9f210010f70: - name: device_name + name: device_name ``` Example configuration: @@ -46,16 +46,16 @@ Example configuration: ```yaml # Example configuration.yaml entry switch: - platform: rfxtrx - automatic_add: False - signal_repetitions: 2 - devices: - 0b1100ce3213c7f210010f70: - name: Movment1 - 0b11000a02ef2gf210010f50: - name: Movment2 - 0b1111e003af16aa10000060: - name: Door + platform: rfxtrx + automatic_add: False + signal_repetitions: 2 + devices: + 0b1100ce3213c7f210010f70: + name: Movment1 + 0b11000a02ef2gf210010f50: + name: Movment2 + 0b1111e003af16aa10000060: + name: Door ``` Configuration variables: From 0877304910091024557367b9a33304e3272836fc Mon Sep 17 00:00:00 2001 From: Martin Hjelmare Date: Mon, 13 Jun 2016 22:44:10 +0200 Subject: [PATCH 11/63] Add docs about MySensors IR switch (#556) * Update sensor.mysensors docs, about moving V_IR_SEND type to switch platform. * Update switch.mysensors docs. Add section about the new service and additional example sketch for the IR switch device. --- source/_components/sensor.mysensors.markdown | 4 +- source/_components/switch.mysensors.markdown | 113 ++++++++++++++++++- 2 files changed, 113 insertions(+), 4 deletions(-) diff --git a/source/_components/sensor.mysensors.markdown b/source/_components/sensor.mysensors.markdown index 9690ece312b..1420e037279 100644 --- a/source/_components/sensor.mysensors.markdown +++ b/source/_components/sensor.mysensors.markdown @@ -2,7 +2,7 @@ layout: page title: "MySensors Sensor" description: "Instructions how to integrate MySensors sensors into Home Assistant." -date: 2016-04-13 14:20 +0100 +date: 2016-06-12 15:00 +0200 sidebar: true comments: false sharing: true @@ -30,7 +30,7 @@ S_WEIGHT | V_WEIGHT, V_IMPEDANCE S_POWER | V_WATT, V_KWH S_DISTANCE | V_DISTANCE S_LIGHT_LEVEL | V_LIGHT_LEVEL -S_IR | V_IR_SEND, V_IR_RECEIVE +S_IR | V_IR_RECEIVE S_WATER | V_FLOW, V_VOLUME S_AIR_QUALITY | V_DUST_LEVEL S_CUSTOM | V_VAR1, V_VAR2, V_VAR3, V_VAR4, V_VAR5 diff --git a/source/_components/switch.mysensors.markdown b/source/_components/switch.mysensors.markdown index 77944cce9cc..1e9b9a11dd0 100644 --- a/source/_components/switch.mysensors.markdown +++ b/source/_components/switch.mysensors.markdown @@ -2,7 +2,7 @@ layout: page title: "MySensors Switch" description: "Instructions how to integrate MySensors switches into Home Assistant." -date: 2016-04-21 13:30 +0100 +date: 2016-06-12 15:00 +0200 sidebar: true comments: false sharing: true @@ -25,6 +25,7 @@ S_MOTION | V_ARMED S_SMOKE | V_ARMED S_LIGHT | V_LIGHT S_LOCK | V_LOCK_STATUS +S_IR | V_IR_SEND, V_LIGHT ##### MySensors version 1.5 and higher @@ -38,10 +39,47 @@ S_SOUND | V_ARMED S_VIBRATION | V_ARMED S_MOISTURE | V_ARMED +All V_TYPES for each S_TYPE above are required to activate the actuator for the platform. Use either V_LIGHT or V_STATUS depending on library version for cases where that V_TYPE is required. + For more information, visit the [serial api] of MySensors. -### {% linkable_title Example sketch %} +### {% linkable_title Services %} +The MySensors switch platform exposes a service to change an IR code attribute for an IR switch device and turn the switch on. The IR switch will automatically be turned off after being turned on, if `optimistic` is set to `true` in the [config](/components/mysensors/#configuration) for the MySensors component. This will simulate a push button on a remote. If `optimistic` is `false`, the MySensors device will have to report its updated state to reset the switch. See the [example sketch](#ir-switch-sketch) for the IR switch below. + +| Service | Description | +| ------- | ----------- | +| mysensors_send_ir_code | Set an IR code as a state attribute for a MySensors IR device switch and turn the switch on.| + +The service can be used as part of an automation script. For example: + +```yaml +# Example configuration.yaml automation entry +automation: + - alias: turn hvac on + trigger: + platform: time + after: '5:30:00' + action: + service: switch.mysensors_send_ir_code + entity_id: switch.hvac_1_1 + data: + V_IR_SEND: '0xC284' # the IR code to send + + - alias: turn hvac off + trigger: + platform: time + after: '0:30:00' + action: + service: switch.mysensors_send_ir_code + entity_id: switch.hvac_1_1 + data: + V_IR_SEND: '0xC288' # the IR code to send +``` + +### {% linkable_title Example sketches %} + +#### {% linkable_title Switch sketch %} ```cpp /* * Documentation: http://www.mysensors.org @@ -86,5 +124,76 @@ void incomingMessage(const MyMessage &message) } ``` +#### {% linkable_title IR switch sketch %} +```cpp +/* + * Documentation: http://www.mysensors.org + * Support Forum: http://forum.mysensors.org + * + * http://www.mysensors.org/build/ir + */ + +#include +#include +#include + +#define SN "IR Sensor" +#define SV "1.0" +#define CHILD_ID 1 + +MySensor gw; + +char code[10] = "abcd01234"; +char oldCode[10] = "abcd01234"; +MyMessage msgCodeRec(CHILD_ID, V_IR_RECEIVE); +MyMessage msgCode(CHILD_ID, V_IR_SEND); +MyMessage msgSendCode(CHILD_ID, V_LIGHT); + +void setup() +{ + gw.begin(incomingMessage); + gw.sendSketchInfo(SN, SV); + gw.present(CHILD_ID, S_IR); + // Send initial values. + gw.send(msgCodeRec.set(code)); + gw.send(msgCode.set(code)); + gw.send(msgSendCode.set(0)); +} + +void loop() +{ + gw.process(); + // IR receiver not implemented, just a dummy report of code when it changes + if (String(code) != String(oldCode)) { + Serial.print("Code received "); + Serial.println(code); + gw.send(msgCodeRec.set(code)); + strcpy(oldCode, code); + } +} + +void incomingMessage(const MyMessage &message) { + if (message.type==V_LIGHT) { + // IR sender not implemented, just a dummy print. + if (message.getBool()) { + Serial.print("Sending code "); + Serial.println(code); + } + gw.send(msgSendCode.set(message.getBool() ? 1 : 0)); + // Always turn off device + gw.wait(100); + gw.send(msgSendCode.set(0)); + } + if (message.type == V_IR_SEND) { + // Retrieve the IR code value from the incoming message. + String codestring = message.getString(); + codestring.toCharArray(code, sizeof(code)); + Serial.print("Changing code to "); + Serial.println(code); + gw.send(msgCode.set(code)); + } +} +``` + [main component]: /components/mysensors/ [serial api]: https://www.mysensors.org/download/serial_api_15 From 4895c150c3c6909c165d530dab0fc747ee388d37 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Tue, 14 Jun 2016 19:55:11 -0700 Subject: [PATCH 12/63] Update index.html --- source/index.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/index.html b/source/index.html index 112f12eea78..ee631ccff22 100644 --- a/source/index.html +++ b/source/index.html @@ -15,8 +15,8 @@ hide_github_edit: true
From 8d5b0de37d04aaefae5dbc0398d2c4e9e0f1df1f Mon Sep 17 00:00:00 2001 From: Nolan Gilley Date: Wed, 15 Jun 2016 02:22:39 -0400 Subject: [PATCH 13/63] plex sensor (#526) --- source/_components/sensor.plex.markdown | 33 +++++++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 source/_components/sensor.plex.markdown diff --git a/source/_components/sensor.plex.markdown b/source/_components/sensor.plex.markdown new file mode 100644 index 00000000000..e4d5be77a7f --- /dev/null +++ b/source/_components/sensor.plex.markdown @@ -0,0 +1,33 @@ +--- +layout: page +title: "Plex Sensor" +description: "How to add a Plex sensor to Home Assistant." +date: 2016-06-3 08:19 +sidebar: true +comments: false +sharing: true +footer: true +logo: plex.png +ha_category: Sensor +ha_release: 0.21 +--- + +This sensor platform will monitor activity on a given Plex Media Server. It will create a sensor that shows the number of +currently watching users as the state. If you click the sensor for more details it will show you who is watching what. + +If your plex server is on the same local network as Home Assistant, all you need to provide in the configuration.yaml +is the host or ip address. If you want to access a remote plex server, you must provide the plex username, password, +and optionally the server name of the remote plex server. If no server name is given it will use the first server listed. + +Example Configuration: +```yaml +sensor: + platform: plex + name: Plex Spy *optional, default Plex + host: 192.168.1.100 *optional, default localhost + port: 32400 *optional, default 32400 + username: plexuser *optional, use for remote access + password: plexpw *optional, use for remote access + server: MyPlexServer *optional, use for remote access +``` + From 26b79765ae5fc4c672b50b5fd78319588e983491 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Wed, 15 Jun 2016 08:37:57 +0200 Subject: [PATCH 14/63] Add var descriptions --- source/_components/sensor.plex.markdown | 34 +++++++++++++++---------- 1 file changed, 21 insertions(+), 13 deletions(-) diff --git a/source/_components/sensor.plex.markdown b/source/_components/sensor.plex.markdown index e4d5be77a7f..daf62cad8b7 100644 --- a/source/_components/sensor.plex.markdown +++ b/source/_components/sensor.plex.markdown @@ -9,25 +9,33 @@ sharing: true footer: true logo: plex.png ha_category: Sensor -ha_release: 0.21 +ha_release: 0.22 --- -This sensor platform will monitor activity on a given Plex Media Server. It will create a sensor that shows the number of -currently watching users as the state. If you click the sensor for more details it will show you who is watching what. +The `plex` sensor platform will monitor activity on a given [Plex Media Server](https://plex.tv/). It will create a sensor that shows the number of currently watching users as the state. If you click the sensor for more details it will show you who is watching what. -If your plex server is on the same local network as Home Assistant, all you need to provide in the configuration.yaml -is the host or ip address. If you want to access a remote plex server, you must provide the plex username, password, -and optionally the server name of the remote plex server. If no server name is given it will use the first server listed. +If your Plex server is on the same local network as Home Assistant, all you need to provide in the `configuration.yaml` is the host or IP address. If you want to access a remote Plex server, you must provide the Plex username, password, and optionally the server name of the remote Plex server. If no server name is given it will use the first server listed. + +If you want to enable the plex sensor, add the following lines to your `configuration.yaml`: -Example Configuration: ```yaml +# Example configuration.yaml entry sensor: platform: plex - name: Plex Spy *optional, default Plex - host: 192.168.1.100 *optional, default localhost - port: 32400 *optional, default 32400 - username: plexuser *optional, use for remote access - password: plexpw *optional, use for remote access - server: MyPlexServer *optional, use for remote access + name: Plex Spy + host: 192.168.1.100 + port: 32400 + username: plexuser + password: plexpw + server: MyPlexServer ``` +Configuration variables: + +- **host** (*Optional*): The IP address of your Plex server. Defaults to `localhost`. +- **port** (*Optional*): The port of your Plex Server. Defaults to 32400. +- **name** (*Optional*): Name of the Plex server. Defaults to Plex. +- **username** (*Optional*): The username for the remote Plex server. +- **password** (*Optional*): The password for your given account on the remote Plex server. +- **server** (*Optional*): The name of your remote Plex server. + From 0ab213bd6fec00a65f3f143ee7662785e8c3e9ce Mon Sep 17 00:00:00 2001 From: Landrash Date: Thu, 16 Jun 2016 19:00:23 +0200 Subject: [PATCH 15/63] Adds documentation for the Local File Camera (#482) --- .../camera.local_file_camera.markdown | 33 +++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 source/_components/camera.local_file_camera.markdown diff --git a/source/_components/camera.local_file_camera.markdown b/source/_components/camera.local_file_camera.markdown new file mode 100644 index 00000000000..68d4b2f0cbd --- /dev/null +++ b/source/_components/camera.local_file_camera.markdown @@ -0,0 +1,33 @@ +--- +layout: page +title: "Local File Camera" +description: "Instructions how to Local File Camera within Home Assistant." +date: 2016-05-16 14:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: file.png +ha_category: Camera +ha_iot_class: "Local Polling" +ha_release: 0.20 +--- + +The `Local File Camera` allows you to integrate any readable image file from disk into Home Assistant. +If the image is updated in the file system the image displayed in Home Assistant will also be updated. +This can for example be used with various camera platforms that save a temporary images localy. + +```yaml +# Example configuration.yaml entry +camera: + platform: local_file_camera + name: Local File Camera + file_path: /tmp/image.jpg +``` + +Configuration variables: + + - **name** (optional): Name of the camera + - **file_path** (required): File to serve as the camera. + +The given **file_path** must be an existing file because the camera platform setup make a readable check on it. From b6610e76d52d7621bba452099947ab2fcc478a31 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Thu, 16 Jun 2016 19:10:36 +0200 Subject: [PATCH 16/63] Revert "Adds documentation for the Local File Camera" (#563) --- .../camera.local_file_camera.markdown | 33 ------------------- 1 file changed, 33 deletions(-) delete mode 100644 source/_components/camera.local_file_camera.markdown diff --git a/source/_components/camera.local_file_camera.markdown b/source/_components/camera.local_file_camera.markdown deleted file mode 100644 index 68d4b2f0cbd..00000000000 --- a/source/_components/camera.local_file_camera.markdown +++ /dev/null @@ -1,33 +0,0 @@ ---- -layout: page -title: "Local File Camera" -description: "Instructions how to Local File Camera within Home Assistant." -date: 2016-05-16 14:00 -sidebar: true -comments: false -sharing: true -footer: true -logo: file.png -ha_category: Camera -ha_iot_class: "Local Polling" -ha_release: 0.20 ---- - -The `Local File Camera` allows you to integrate any readable image file from disk into Home Assistant. -If the image is updated in the file system the image displayed in Home Assistant will also be updated. -This can for example be used with various camera platforms that save a temporary images localy. - -```yaml -# Example configuration.yaml entry -camera: - platform: local_file_camera - name: Local File Camera - file_path: /tmp/image.jpg -``` - -Configuration variables: - - - **name** (optional): Name of the camera - - **file_path** (required): File to serve as the camera. - -The given **file_path** must be an existing file because the camera platform setup make a readable check on it. From bccd6d460df69546eaf331e1144b668d8de44e8c Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Thu, 16 Jun 2016 19:13:59 +0200 Subject: [PATCH 17/63] Minor changes --- source/_components/camera.local_file.markdown | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/source/_components/camera.local_file.markdown b/source/_components/camera.local_file.markdown index 3f26f3939a9..02eddc7bebc 100644 --- a/source/_components/camera.local_file.markdown +++ b/source/_components/camera.local_file.markdown @@ -13,10 +13,12 @@ ha_iot_class: "Local Polling" ha_release: 0.22 --- -The `Local File ` allows you to integrate any readable image file from disk into Home Assistant as a Camera. -If the image is updated in the file system the image displayed in Home Assistant will also be updated. +The `local_file` camera platform allows you to integrate any readable image file from disk into Home Assistant as a camera. If the image is updated on the file system the image displayed in Home Assistant will also be updated. + This can for example be used with various camera platforms that save a temporary images localy. +To enable this camera in your installation, add the following to your `configuration.yaml` file: + ```yaml # Example configuration.yaml entry camera: @@ -27,7 +29,10 @@ camera: Configuration variables: - - **name** (optional): Name of the camera - - **file_path** (required): File to serve as the camera. + - **name** (*Optional*): Name of the camera + - **file_path** (*Required*): File to serve as the camera. -The given **file_path** must be an existing file because the camera platform setup make a readable check on it. +

+The given `file_path` must be an existing file because the camera platform setup make a readable check on it. +

+ From 4039f0c50795520076b0dcdf46ce5eeb9f454e2b Mon Sep 17 00:00:00 2001 From: Phil Kates Date: Sat, 18 Jun 2016 12:19:34 -0700 Subject: [PATCH 18/63] Add Wink Rollershutter (#559) --- .../_components/rollershutter.wink.markdown | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 source/_components/rollershutter.wink.markdown diff --git a/source/_components/rollershutter.wink.markdown b/source/_components/rollershutter.wink.markdown new file mode 100644 index 00000000000..1d338a3dc17 --- /dev/null +++ b/source/_components/rollershutter.wink.markdown @@ -0,0 +1,20 @@ +--- +layout: page +title: "Wink Rollershutter" +description: "Instructions how to setup the Wink rollershutter (shade) within Home Assistant." +date: 2016-02-12 07:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: wink.png +ha_category: Rollershutter +ha_release: 0.22 +--- + +The Wink rollershutter platform allows you to control your [Wink](http://www.wink.com/) enabled rollershutters. It supports Wink shades / blinds / rollershutters such as the Bali Somfy or Lutron Serena blinds. + +The Wink API currently doesn't provide status for shades. + +The requirement is that you have setup your [Wink hub](/components/wink/). + From 2e0193ea0dc1d16eab1f1650a6f33af6cf7495e4 Mon Sep 17 00:00:00 2001 From: Nick Touran Date: Sat, 18 Jun 2016 12:20:06 -0700 Subject: [PATCH 19/63] Added example of using template in shell_command. (#547) --- source/_components/shell_command.markdown | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/source/_components/shell_command.markdown b/source/_components/shell_command.markdown index 00551f9b65c..1783c8a2980 100644 --- a/source/_components/shell_command.markdown +++ b/source/_components/shell_command.markdown @@ -26,3 +26,20 @@ Configuration variables: - Alias for the command - Command itself. + +The commands can be dynamic, using templates to insert values of other entities. For example + +```yaml +# Apply value of a GUI slider to the shell_command +input_slider: + ac_temperature: + name: A/C Setting + initial: 24 + min: 18 + max: 32 + step: 1 +{% raw %} +shell_command: + set_ac_to_slider: 'irsend SEND_ONCE DELONGHI AC_{{ states.input_slider.ac_temperature.state}}_AUTO' +{% endraw %} +``` From 2328f20caa6080f5894945f36b710d528b6e59fb Mon Sep 17 00:00:00 2001 From: Hugo Dupras Date: Sat, 18 Jun 2016 21:20:37 +0200 Subject: [PATCH 20/63] Add Documentation for Netatmo Welcome (#542) * Reorganize documentation for Netatmo As Netatmo is now a Hub component, documentations has been splitted in several parts betweent the hub, the sensors and the camera Signed-off-by: Hugo D. (jabesq) * Add configuration variables for Netatmo Welcome cameras * Add ha_release information on new documentation pages * Netatmo Weather Station is a weather sensor --- source/_components/camera.netatmo.markdown | 37 ++++++++++++++ source/_components/netatmo.markdown | 58 ++++++++++++++++++++++ source/_components/sensor.netatmo.markdown | 34 ++----------- 3 files changed, 98 insertions(+), 31 deletions(-) create mode 100644 source/_components/camera.netatmo.markdown create mode 100644 source/_components/netatmo.markdown diff --git a/source/_components/camera.netatmo.markdown b/source/_components/camera.netatmo.markdown new file mode 100644 index 00000000000..054e93c2328 --- /dev/null +++ b/source/_components/camera.netatmo.markdown @@ -0,0 +1,37 @@ +--- +layout: page +title: "Netatmo Camera" +description: "Instructions how to integrate Netatmo camera into Home Assistant." +date: 2016-06-02 08:10 +sidebar: true +comments: false +sharing: true +footer: true +logo: netatmo.png +ha_category: Camera +ha_release: "0.2x" +--- + + +The `netatmo` camera platform is consuming the information provided by a [Netatmo Welcome](https://www.netatmo.com) camera. This component allows you to view the current photo created by the Camera. + +To enable the Netatmo camera, add the following lines to your `configuration.yaml`: + +```yaml +# Example configuration.yaml entry +camera: + platform: netatmo + home: home_name + cameras: + - camera_name1 + - camera_name2 +``` + +Configuration variables: + +- **home** (*Optionnal*): Will display the cameras of this home only. +- **cameras** array (*Optionnal*): Cameras to use. Multiple enties allowed. + - **camera_name**: Name of the camera to display. + +If **home** and **cameras** is not provided, all cameras will be displayed. + diff --git a/source/_components/netatmo.markdown b/source/_components/netatmo.markdown new file mode 100644 index 00000000000..d65956ed73b --- /dev/null +++ b/source/_components/netatmo.markdown @@ -0,0 +1,58 @@ +--- +layout: page +title: "Netatmo" +description: "Instructions how to integrate Netatmo component into Home Assistant." +date: 2016-06-02 08:10 +sidebar: true +comments: false +sharing: true +footer: true +logo: netatmo.png +ha_category: Hub +ha_release: "0.2x" +--- + + +The `netatmo` component platform is the main component to integrate all Netatmo related platforms. Besides this component you will have to setup any connected sensors separately. + +To enable the Netatmo component, add the following lines to your `configuration.yaml`: + +```yaml +# Example configuration.yaml entry +netatmo: + api_key: YOUR_API_KEY + secret_key: YOUR_SECRET_KEY + username: YOUR_USERNAME + password: YOUR_PASSWORD +``` + +Configuration variables: + +- **api_key** (*Required*): The API key for your netatmo account. +- **secret_key** (*Required*): Your netatmo secret key +- **username** (*Required*): Username for the netatmo account. +- **password** (*Required*): Password for the netatmo account. + +### {% linkable_title Get API and Secret Key %} + +To get your API credentials, you have to declare a new application in the [NetAtmo Developer Page](https://dev.netatmo.com/). Sign in using your username and password from your regular NetAtmo account. +Click on 'Create an App' at the top of the page. + +

+ +

+You have to fill the form, but only two fields are required : Name and Description. It doesn't really matter what you put into those. Just write something that make sense to you. To submit your new app, click on create at the bottom of the form. + +

+ +

+ +That's it. You can copy and paste your new API and secret keys in your Home Assistant configuration file just as said above. + +

+ +

+ +

+The Home Assistant NetAtmo platform has only be tested with the classic indoor, outdoor module and rainmeter. There is no support for the windmeter module at this time because developers does not own these modules. +

diff --git a/source/_components/sensor.netatmo.markdown b/source/_components/sensor.netatmo.markdown index e68b3c05b28..81455a136d8 100644 --- a/source/_components/sensor.netatmo.markdown +++ b/source/_components/sensor.netatmo.markdown @@ -2,13 +2,13 @@ layout: page title: "Netatmo Sensor" description: "Instructions how to integrate Netatmo sensors into Home Assistant." -date: 2016-01-14 08:10 +date: 2016-06-02 08:10 sidebar: true comments: false sharing: true footer: true logo: netatmo.png -ha_category: Sensor +ha_category: Weather --- @@ -20,10 +20,6 @@ To enable the Netatmo sensor, add the following lines to your `configuration.yam # Example configuration.yaml entry sensor: platform: netatmo - api_key: YOUR_API_KEY - secret_key: YOUR_SECRET_KEY - username: YOUR_USERNAME - password: YOUR_PASSWORD station: STATION_NAME modules: module_name1: @@ -45,11 +41,7 @@ sensor: Configuration variables: -- **api_key** (*Required*): The API key for your netatmo account. -- **secret_key** (*Required*): Your netatmo secret key -- **username** (*Required*): Username for the netatmo account. -- **password** (*Required*): Password for the netatmo account. -- **station**: The name of the weather station. Needed if several stations are associated with the account. +- **station** (*Optionnal*): The name of the weather station. Needed if several stations are associated with the account. - **modules** (*Required*): Modules to use. Multiple entries allowed. - **module_name** array (*Required*): Name of the module. - **temperature**: Current temperature. @@ -61,26 +53,6 @@ Configuration variables: - **sum_rain_1**: Rainfall in the last hour in mm. - **sum_rain_24**: Rainfall in mm from 00:00am - 23:59pm. -### {% linkable_title Get API and Secret Key %} - -To get your API credentials, you have to declare a new application in the [NetAtmo Developer Page](https://dev.netatmo.com/). Sign in using your username and password from your regular NetAtmo account. -Click on 'Create an App' at the top of the page. - -

- -

-You have to fill the form, but only two fields are required : Name and Description. It doesn't really matter what you put into those. Just write something that make sense to you. To submit your new app, click on create at the bottom of the form. - -

- -

- -That's it. You can copy and paste your new API and secret keys in your Home Assistant configuration file just as said above. - -

- -

- ### {% linkable_title Find your modules name %} You can find your modules name in your [online NetAtmo account](https://my.netatmo.com/app/station). These names can be found and changed in parameters (See screenshot) From de1a60b0f9e593b82bceb7122f6425907ef4dfdb Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Sat, 18 Jun 2016 13:17:20 -0700 Subject: [PATCH 21/63] Add blog post 0.22 --- source/_components/alexa.markdown | 4 +- source/_components/camera.local_file.markdown | 4 +- .../_components/media_player.sonos.markdown | 6 +- source/_components/shell_command.markdown | 4 +- source/_includes/site/head.html | 2 +- ...-home-hub-5-and-local-file-camera.markdown | 74 ++++++++++++++++++ source/images/default-social.png | Bin 0 -> 50385 bytes source/index.html | 6 +- 8 files changed, 90 insertions(+), 10 deletions(-) create mode 100644 source/_posts/2016-06-18-pandora-bt-home-hub-5-and-local-file-camera.markdown create mode 100644 source/images/default-social.png diff --git a/source/_components/alexa.markdown b/source/_components/alexa.markdown index 027a08a2003..747bef9a8e8 100644 --- a/source/_components/alexa.markdown +++ b/source/_components/alexa.markdown @@ -270,8 +270,8 @@ First create a file called `alexa_confirm.yaml` with something like the followin {% raw %} > {{ [ - "OK", - "Sure", + "OK", + "Sure", "If you insist", "Done", "No worries", diff --git a/source/_components/camera.local_file.markdown b/source/_components/camera.local_file.markdown index 02eddc7bebc..2cfff50676a 100644 --- a/source/_components/camera.local_file.markdown +++ b/source/_components/camera.local_file.markdown @@ -15,7 +15,7 @@ ha_release: 0.22 The `local_file` camera platform allows you to integrate any readable image file from disk into Home Assistant as a camera. If the image is updated on the file system the image displayed in Home Assistant will also be updated. -This can for example be used with various camera platforms that save a temporary images localy. +This can for example be used with various camera platforms that save a temporary images locally. It can also be used to display a graph that you render periodacally and will then be displayed in Home Assistant. To enable this camera in your installation, add the following to your `configuration.yaml` file: @@ -31,7 +31,7 @@ Configuration variables: - **name** (*Optional*): Name of the camera - **file_path** (*Required*): File to serve as the camera. - +

The given `file_path` must be an existing file because the camera platform setup make a readable check on it.

diff --git a/source/_components/media_player.sonos.markdown b/source/_components/media_player.sonos.markdown index b2db3341a49..8c0cf0d79df 100644 --- a/source/_components/media_player.sonos.markdown +++ b/source/_components/media_player.sonos.markdown @@ -13,7 +13,6 @@ featured: true ha_release: 0.7.3 --- - The `sonos` platform allows you to control your [Sonos](http://www.sonos.com) HiFi wireless speakers and audio components from Home Assistant. To add your Sonos components to your installation, add the following to your `configuration.yaml` file. It will perform auto-discovery of your connected speakers. @@ -33,3 +32,8 @@ media_player: hosts: IP ``` +### {% linkable_title Service %} + +There are two extra services exposed that will allow you to take a snapshot of what is currently playing and restore it afterwards. This is useful if you want to play a doorbell or notification sound and resume playback afterwards. + +The services are called `sonos_snapshot` and `snapshot_restore`. diff --git a/source/_components/shell_command.markdown b/source/_components/shell_command.markdown index 1783c8a2980..b77b1101da2 100644 --- a/source/_components/shell_command.markdown +++ b/source/_components/shell_command.markdown @@ -27,7 +27,9 @@ Configuration variables: - Alias for the command - Command itself. -The commands can be dynamic, using templates to insert values of other entities. For example +The commands can be dynamic, using templates to insert values of other entities. When using templates you are limited to only template the arguments. You are also no longer allowed to use pipe symbols when using templates. + +Any service data passed into the service call to activate the shell command will be available as a variable within the template. ```yaml # Apply value of a GUI slider to the shell_command diff --git a/source/_includes/site/head.html b/source/_includes/site/head.html index abe099c7272..5371a1bbbfa 100644 --- a/source/_includes/site/head.html +++ b/source/_includes/site/head.html @@ -1,6 +1,6 @@ {% capture fb_description %}{% if page.description %}{{ page.description }}{% endif %}{% endcapture %} {% capture description %}{% if page.description %}{{ page.description }}{% else site.description %}{{ site.description }}{% endif %}{% endcapture %} -{% capture social_image %}{% if page.og_image %}{{ page.og_image | prepend: site.url }}{% else %}https://home-assistant.io/images/home-assistant-logo-2164x2164.png{% endif %}{% endcapture %} +{% capture social_image %}{% if page.og_image %}{{ page.og_image | prepend: site.url }}{% else %}https://home-assistant.io/images/default-social.png{% endif %}{% endcapture %} diff --git a/source/_posts/2016-06-18-pandora-bt-home-hub-5-and-local-file-camera.markdown b/source/_posts/2016-06-18-pandora-bt-home-hub-5-and-local-file-camera.markdown new file mode 100644 index 00000000000..e2ace3e1c20 --- /dev/null +++ b/source/_posts/2016-06-18-pandora-bt-home-hub-5-and-local-file-camera.markdown @@ -0,0 +1,74 @@ +--- +layout: post +title: "0.22: Pandora, BT Home Hub 5 and local file camera." +description: "This new release of Home Assistant has been mainly about stabilizing our last release which included a lot of core improvements. We're all stable now and set for a bright future." +date: 2016-06-18 18:06:00 +0000 +date_formatted: "June 18, 2016" +author: Paulus Schoutsen +author_twitter: balloob +comments: true +categories: Release-Notes +--- + +It's time for the 0.22 release. This was a pretty rough release cycle and we had to issue two hot fixes for our core improvements. But it seems now that all is good and a lot of people have reported that their installs are faster than ever and the occasional quirks no longer occur. + +We are aware that our new web stack has caused issues installing Home Assistant on ARM-based platforms. This sadly includes the Raspberry Pi and Synology NAS systems. We're working on getting to a better solution. For Raspberry Pi, the [All-in-One installer] will take care of everything for you. We're working on updating our [standalone Raspberry Pi installation guide]. + +There are two cool things that I want to highlight in this release. The first is Pandora support. This is based on the CLI player called pianobar. This means that your machine running Home Assistant can be connected to the speakers and provide your house with tunes. + +

+ +

+ +Another cool addition is the local file camera. This seems very basic at first but will allow you to generate a graph with your favorite 3rd party graphing tool and display it on your Home Assistant dashboard. We're looking forward to see what you can do with this! + + + +- Media Player: [Pandora] media player now supported ([@partofthething]) +- Device Tracker: [BT Home Hub 5] now supported ([@lwis]) +- Camera: New [local file] platform shows any image as camera ([@Landrash]) +- Add [Sonos] snapshot and restore services ([@dansullivan86]) +- Device Tracker: [AsusWRT] in Access Point mode now supported ([@linjef]) +- Device Tracker: [AsusWRT] login using public key now supported ([@mtreinish]) +- Device Tracker: [AsusWRT] protocol to use is now auto detected ([@persandstrom]) +- Camera: [Netatmo] now supported ([@jabesq]) +- API documentation added in [Swagger.yaml format] ([@wind-rider]) +- Media Player: [Cast] devices can now be stopped ([@michaelarnauts]) +- MySensors: [IR switch device] and service now supported ([@MartinHjelmare]) +- Bloomsky: [Voltage sensor] now supported ([@arsaboo]) +- Sensor: New [Plex sensor] monitors friends streaming from your Plex server ([@nkgilley]) +- Component [shell command] can now use templates to render arguments ([@partofthething]) +- Rollershutter: [Wink] is now supported ([@philk]) +- Alexa: Updated [documentation][alexa] to show how to call scripts and scenes (@acockburn) + +[@acockburn]: https://github.com/acockburn/ +[@arsaboo]: https://github.com/arsaboo/ +[@dansullivan86]: https://github.com/dansullivan86/ +[@jabesq]: https://github.com/jabesq/ +[@Landrash]: https://github.com/Landrash/ +[@linjef]: https://github.com/linjef/ +[@lwis]: https://github.com/lwis/ +[@MartinHjelmare]: https://github.com/MartinHjelmare/ +[@michaelarnauts]: https://github.com/michaelarnauts/ +[@mtreinish]: https://github.com/mtreinish/ +[@nkgilley]: https://github.com/nkgilley/ +[@partofthething]: https://github.com/partofthething/ +[@persandstrom]: https://github.com/persandstrom/ +[@philk]: https://github.com/philk/ +[@wind-rider]: https://github.com/wind/ +[AsusWRT]: /components/device_tracker.asuswrt/ +[BT Home Hub 5]: /components/device_tracker.bt_home_hub_5/ +[Cast]: /components/media_player.cast/ +[IR switch device]: /components/mysensors/ +[local file]: /components/camera.local_file/ +[Netatmo]: /components/netatmo/ +[Pandora]: /components/media_player.pandora/ +[shell command]: /components/shell_command/ +[Sonos]: /components/media_player.sonos/ +[Wink]: /components/rollershutter.wink/ +[alexa]: /components/alexa/#working-with-scenes +[Plex sensor]: /components/sensor.plex/ +[Swagger.yaml format]: https://github.com/home-assistant/home-assistant/blob/dev/docs/swagger.yaml +[All-in-One installer]: /getting-started/installation-raspberry-pi-all-in-one/ +[standalone Raspberry Pi installation guide]: /getting-started/installation-raspberry-pi/ +[Voltage sensor]: /components/sensor.bloomsky/ diff --git a/source/images/default-social.png b/source/images/default-social.png new file mode 100644 index 0000000000000000000000000000000000000000..377a667d157b00f8d4a87c4ff961738e4c6ea921 GIT binary patch literal 50385 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

)R(owJ;eZrDx=EyxY4Z~ zQGog)l@chN|LHp&#@T9ilCg?*4fHTMXt3E*&~{1H0^kCy0q5-lmAdjE5Nb~AJoSIRU#$u}u#hokvj7Dy5j9ovWV#J2ehRbMT zHG&&hR9Cp%yWd!2QUg=seJ)J%E6M4r_qDt=Up}N71abdWD6HR98>}6agGM%HlC>v)e)mzr4;WRXVXh!YH-9#kz+C#9;l~iDnxP z&>!rhS3gXH30eVzX1QWo5*p8tG-n8+sJcOb3I+*T$ShTMCbfq!KftwTA5g2f@BJD7@7?0je(Lq)DAe;n|>I`m}9#=^ZbZhIKuQ7DaZd8ehAL6+W38KoH4hKF~b2m zfjpH%gV+kgYPY^F+pPfVRCZ44gfiCgr5Uih%7zW-u&Dp0@GUsJA2I2j^+N|`w9;xdu; z@I2voD(B|nPTP(qiTW2VSVmWcD*hw<2ji`0u);I6H6ivL#=Fc&qegaWzvbM4v@>e9 zIURHfypXm!{88+zJjFlDdz55&lJCq=gUS{3h1^{zh_;)X^VOVbT}c7gYtpx6kCKD_ z`WDOk!;AxE0N638lyj5S)V8556&p(WD?p>)s-l?a`^JdhU$ndKtNN|UaNb1nEm{BN zKW0m4<}}s5YbPk);Ua?VK|-b|6`N|>XZ)Aa-!4z8z_?25EP&C1`9bO&@=>jJaz?Zr zKgBqcPq&|JtbVd6ykNsaQWIUKnHf8Lx;fhmTNC?i8%V|9>&szBA1 zNvR#`)1QAHO8fezP^O|hXj9c^&B2y#iKG(brsfXG-~%VZG>FjyGca`m;rO0}8bv>B z++%5qW|?4?f&cY-7FmQXu*hapu+kRHq)hle>oxCQDc4Hc$>95PB#!-TRW9o$#v8UZ zIS~9ATPp*YEzkEV;x9MR?^%sF{Qk$@@ig~N}qm$$UhG4c34y@ zvt47OPZaTl4aLrhg9H|RcM52mb=(8a%wicuKDgHt2x_8VAPQ@(a{}%@3`XE_cege8 zK-1y?$D8$IiXZc@mWQCu^wIUxJY46MwQk?e>9o8gotg|b+j04@a&8nM-Rcxo!oAbV zh8p{JhKS`i*h6L?5DOn>p(6^i-a)`Z{i$aqk)+RNiu8t{??b*U-MEs1%}I?#QhFQ! zX>hyL!(lrL5`3_7UzA4?@kt#&aF z!B}l~MX2p1BEQRJ|Ewua%*xsYqxmG%-?M~n9kg!s2`dbjuJ?TKEd1aT6rPgU(zW}# zdN3l3M2X6!x4zb!3o8qeL7rqp{f_?x@{TXQ?h%Z}-4nKb)_M1aHNcCr*oOZ6(?vv6 zn4+n8nBBPZ&w`-~BCys1&!74fh{5FhXM` zH-BJGsLs_sKHSMnk-T&b$7FMZzlIOXX{ko`GwplRN&8cr`uY?`qeRa|@^4NF1 z`5`p6qN@kg4!JD@N@5wd&nX;gzKItutEw2R40VVdZY^JZ~cYjs9w>+c-|Bc%GjXgcb7s+)OoIK8;?5F*=0ke^f|v zW~n1x^*=?maASiw3uSBE1^;naOWsR|C9|F>X@T~pIl zPTtzuD%K(C-{c*#N-^L6qtVoo*GLW!Xh{2J^VlccZ)4;AEKr5uh`pC>_9Rr#{N1^h*MQtIrV_CTK!Ciw)WdolxADDkva9@oEtfZXm)27@LyV^|cn%!3AWXh*I z%^QmNjG8K35AMNT3DLDEh)RHL@p$x;(NSbT*7X@3o6vkmZ`??gM^srKPO}uw6)7+p zj0jQ|#=*)KbZzFK$z4CMxYU)e3no+%OWJ{O$u~g*IqSMqIeB}4OYELJ_7JKe&3_(U zQ{%V4@Z3ChZ9`)GQqO+<>-*}fenJvG>#f#Ht$uz8Z5ebvMPaUT5|C)v+vSePjCkK7 zr52sm0CbnfA8a=trRAw29rgfS>y?v>|S-TeZ#Kk9AG?|U2Jjil=lXmeILrJ^33?eC(RO|NuMWp+suSc(y&%v;Y-4CiA)CiUbNC%ce}t<#=eQ z8R)Xox*S4(FC>p=5d!AE*~?)AV+CR2rM3*SW4>mTVBpF2P)637Zi6=dc`{oY9remr ze%5=QIn(8K!01(PuTA>^o&6gus9wmOiZeI>olW4>H!JBFWv4&OOZhSu2V6sJ8|O`+ zianc5lxFLq$9Q#eWf^r5V5}LB$oej_+7LC2U5Do z>&X5X&Y99H8o#YBC>{5X3aN;}(3wNA5YT}e8`by&+h9n+w?%8T6Dy7s0j0ody=V7A zYN~eP!9=zoJ_8zfvZ{3lxnnN$1Kv}uPcy}%hh1w^EI`~8m@yFKkNxXXc{*~y@+)9a z+Gza~={&y_p4U6jh8W_APtuJ=%tTk7QULC-bgpkoB{yG)?;hmpcd1=4{c7;akMVqs z2g}o71;|&t#P4gt2eKl*cYBjxlFY=UT0kd+3SdJAN}v{nte#Z% z6iD6ZH6&@Fg7f+})C*4+UPjVw7sV5`#2+oqF0JCxv>ieo6! zVD2k|>%vzPU|rpiiu*C2ExM1Ni!BLyd=nw8b;S^jzI9+3=4N49CE#M}u@1if)4NH~ zl0`J$dCfwNx6(O6TmD`3f2(yT=l&_MqE-xatHc4N0a5H5J|CDsIvrlhBh|42AHSSB zrK`u$XI9pGj1}cqj)K3vlhDmz$Y9EOEj9wI%3TC)LL)b_DK-+a^c^2uG|1>-Bo@3u zez-RH@(;a^KATR_-*&RuVD(i^R19db>Jar)oj8)H*G^?^qt8dGxU;htS+vlG8>Ko-)?9khC9D`4N zH2@G4)x6x$Mx85#?UhhwIuSEq>pac-sS{DtJbVQ|_v`gDfX-=6irYm5!FrvZ95{gK zaf69TZR30 z1_+`zd_VQwecvial<#ER_kAgIZD|D8jNrK+^;>T6s{xkjmEP+-k;?w0wqvs5N=&F= z#z~{|x}O%I&fR|S+5RIjO^IxyCrznd)nh$&W+e2hCLoi&s+Y?2H3tmSg;~gi5!=_# z!q`v&Wshn!%BJqCTPA9CiOjxk@?Ov`3l*}d)=70D^jFT_1JeS)$$w$VZ4$J3dU5 z76h)?pKD0E!I4JTu0HDdyYl@w1nHPx!I-6M;*mUG(fK_#-aO9QY zstxc>U3?$NjMePeZeC)IU+)!Blg_EyaW?bz{~yXf1Dg`z-4y4aJQN5hFZKpSJXq8> zyaEtJ#|f@PPJ#jWTHieang~G9vQn~Gfat_=JI(}qB<_DKm3WonYF81d2B8LZ-}_GA z^A}N#anQFZFY=he)5Cj)73rg1X4@VF(ber=L#^(ylOus!rOOADxeEbbxb_<-EBTPz zU?HyGIARIPkf~mofhoUOyx<1?Lmtupzz8T#549EO zQ(hEn5>dZ&j5@%P`EnBXZIRcFTe5__rj}uZNBm;~svU%v{ZgZ1zGrjJdc3Te^E8rG z$gRz~RPr3mV1zLCA3k!_CM*#w?5q*^-rmV)u}f)t^Zs1pZ~YzeE0)ywj$-?iqGfc} z<>o$~;#oegYYQh`k;jmh&%sN%fn<7c;C~VeWk%vD{D^4C6%$Z2u}C`OV+y}zD-{xJ z!P~-orCagN&+2>RZb5@POO09KE;HxT_;JwAY!7tgB5Q5%@xY~0pHjYVvaLZ6eM_O3 zCdjlz#cOZzQ^F}I|1Q3F__$eWWj_2OWYyp(|MZ4k4J8|hVZy+eOJdYw^Z%5?z+FVL zP73pfJCR^mWtwF~C~V!$os~@D<>lEUff_2=T(Ob%g$9sj0Z(i=v#D$bVJ@T!hA|%1 z)Yx74AjZ;u`ey_F>lm zOd2>crOMSzr*rc!63*#jd&Bt6|J0EEK7>a8xCQ0#y?Y%5rX!v)RbiXC!SFmn*pZ04_UY8!U0S72v0wIhG1~s6~ zPhP1>;>^{*O5hAR)y5dqe|qIt2SpUuZw<6vlg_iB{Uh(JD&$L$2SyMmC7Dw)0D`YH z!_f!}2|qgR4Ba$VmHgDet$ig{_IDRrY5!gFPUY&8i*bNB&p_vud=B=Y?%GY~-0UG?srmMW%u_@?)s2cxK1YnH$v?S6 zj?Z+0W3N;C2gV3KJlS4G+wbhxgI6+7lnDoLJkT zJ3hnEQq#{>SxfMfLX>A@4|O_S{%-%qnXDuz3$4Spe03{eCZsW# zs0J3qLjUA74q6u3g@<_?os4!B1uQAPpSiB|Yo}aGdpZ^BjaiLz% z$W?IF6051 z6~rqGRqQc5+FgQ}j-J_?(caCJN2(qhP-0Cyj{tK2AN#r(VJ*7H@IiT;gLHYwHtmqE z!}hOhZot`z^o#NRaXtFNUwqTfr4jVZt#XX54f2LK#hB@(X&BPHe*do-Rdk2D@B@XU zjeWMZGX=IoHV)Zou@NF7T2Qy}pb%Tt)ve0)q0TlVXvyF$BnpMf(S*YxbzeHP{Z%Uh zz;$ilcKwFkObbO@Esp^K(VH`yJ8Up$u2-T^x!&vPZNZpv!b|2ST%KbFMPYKw?Jh%_ z99_iinIMl270drP5V?EfDi+57H>c28#_VR42FiD8wl(8p{IaoI@LSm93~RZHl`-fg zt@u!XBFA(~4Y4!(H)zHlCle&HVsf6*3#JohX&a)G!I@HOOUut6Glh zMQbe~L-?I2_@e1;)F?r2eG1s)oAh8L>}Jb+tJjCQ87tjc((J+yNcZl5_oQ%Lpg5v@ zwuluqjuR}XYhrsk;In1??xGEF?-%J_`PGOf^)miYTP*i&;2f;=)POMh_`)+Q%U^>x ztzbUT>&5kJMm49XkSt!5L`x>hfpXN%9nz#-OEB#!HO~wsh9k?aN4L`4OYJt|{TYF? zHAwTEUtL@&N}I8YzWRt5>wHeXDrko#`%0=D^=a^(L1nL6VI^CpH>>V|=;w-Fo606w z4}ofy_{<)@C?XP;&YF*x!&_J7TLYA#HFi);Pk2;xJTa?8PB^lf)+}hK%6y*wU3kGa za(VeTBi+JbPm`iVJCj@=rQ8@ZLt>@vw04;mnz;W{%3UqLwkMt=ElPaT4{4}^xFHX_ z`B0BfO$5<;|B&AKSCgeq*C{VMz9+mmyehRi0kCqNeI=`aghEj$cX{}P#I-HEdBL{y zCXX_4>J)29Ix6u){b`qFcLqZa8qO<2hhjcph_{d$J$y$HrqI}|w-F=P+2BC^)J|+u zd&cVE=}dL@VxAaco`e$+1wH|%k201VR&)*R29=u)-GPGbbxn5K5P&x!fuAmRpj)%4 zl6ocnZ7ubqLn-dq&Q4I4R1Olsul01<- zK0k{{SBF~ru=v*i0F1K=hGYKpU-g#Rjonmbw0fkFZ#BI(mczelv22+4!|!{+|ML6o zz+qPJ0_)Ly!N$YgrNPtB+)Kh~S2^MGzDcF9|3x=oRVVM_cTC!AL&IygR1_&)feV^yFOYqzlH`OQ$4Vitl6B#Xv#6fFUB@yY0o*4^62I_wJqf9*ig49t@VGv z2w+6dgp(q%e7Xs3_NS!61^)yKr166ns6{}XI!2+Kn(keovvgsEoxD>pm@QBe_}b3V zJLLX9xVl$Js%lEuwyi&t{~;pp^WL8w23>NSnz`d|161f!jfsrx(#qP%%u3zr)1 z55=<@6yL4xdIF|^K1Jj82<8Cr$fW15YxHdSth^qkZs3>!SzYz=m&G{)Avl#yGv5K@ zVfJ}L3ZA~OH$A^yTkJr-M}z}g8$G+^bEsFj{|!;+Up=X{9Hqv6=NEnpaj#bY)&IuL z%q)@^*hN0=Z>0H7Cn%^vV{zYowH7m?AYa+2m}+g0^F8_^EOxutHl2by?%{l+^J`Mc zG6r5X3&9woTq~hOySykVD;e^Yv5F~>8El-38S>k-x$Q5rMyx-~>9dB5d1=grN#@h41PY zoHb-sG2bL-DpLWNW;wSyN+P1mp%y7mA?)N-UPTU7GJu&$u{}5g zQDH-K&mWWnXzQgN_8)oGj{bzFE`>u7eAJyWPZz}yIefxp^hpI4d1t1(!^<0q?&41e zMF{AevP$Y#oS|T0Uy>obPa`@VxH1W+K^>vlSdJyE zzx#e6`NubM`_M1pYY;H3@Y>tl;_$+w=e$*MgPjydTO9iR7D&d%hiiDC1v!lxro;0ZCZ#oG^)Zve4n-Is&O*%`~SlMid+y zW7qsCQar|P` z+B30=&sr2hQG${n@qM*I8tzaH5->_%wlhdAdgGM^*Qx0tf29DiJcI?GhelYa>nHE6 z*9L_@^iaF~6v3FxgqegKEO5Wa-zO}aSpuLEDYLvvaCG*Lr#kK1m{-y-W%mm0dW_-z z9WP4N-Bex52EY{AY|GJK^saqzT>SW+6C{U~hxpoe0_I8`gOwR;shY!TYepSyJah&n z_+J!!?&p%GK5%s-m*bXc*0XzQEy}WSyS8d_Bo0|wo}_KGZkfczaW+GB&J%g8^uX2v zShxzYnDEtR06eGK1v~oA(V{ND@fNT)cIT>+6MtK-()3iOuZn)2RcDZARbSiIkHzsahsCi6GMj?iDBlGop2|aF z^dMV}iT#D^(fg1upN4?IvV_Mmxs}*GMkrpWHyl(nRMbk3MOWQ7a9Y)q^Mz5*yJ1a{ z^!38|kMVW4v$S!QL<&|rG6>UkO*NLHV|^3O&w8A);P@0mP5EyNF81M^4A#_aZ_@A-K$#{nfR)SNKTfTNDeY~9vJRY|rL`+~Rr!K5c+oLR(OT*)&A%Uc}9Y@Xu z23QHos-c?lcs(_m4xP>E?Lv(Z$HxcQX>cX-+@_vFFQ*&Du3H)C@uRZ(~{HG+^ z^JN_hJ#)mU7t=%uF41+5-$CWaayr&aGpc3J)_kQSZ{0aKeUdsWi|W|DVq;(YS|(rp z<@iPg+(s|UN<k z)FW3lGF~FgeA!dlzqmOLsz2_s+$dZ|py~LyZl%>sPD`%%-FRzE8Lc+MjHqn1E{_c` zPq>LCHGe5d`gU9f+icrBwn=cQK7+9o#=8~p7$d>>96lI#tW|7JGe;IQWbWRk$>0Mu za`ocBJK5YweRil`SFhLvBamccOjQ1>{A?{LL!iPDWm++3c1mI;6NkMK#~;|6`uLeM z@0lcv;miJx)Qv-LYAUIb+pgMbWoYH37lj6)t+4u5{cH&)TAcx${^$!SL$sk|E+T-x z)`n>`wnBGyxy?`;EmRlJBWNVPi}x9H+{nk!t#s7R>BXu%R!3(8cZP59^eX5vne5s}hALjz*uS z*Y47BJi+_Fm*h5M71cY{9WR(xP**hM>s@MDZqmoq(h{IHY-*hJ@~*KQ>nf+CU0mp_ zkHD=?m>(eIZpRfyPr~L7-D0PAahfXiV~&Ghb@TyuL1esGV#HV`%SUCZaXvQLLWP>N zSf1A0x6JSq?+U&r4(4gdp~N@03_Z}H-fs{jp`i26xRf0F70>_&eq5!&{LnbpphGo1 zS_d`V?-aH35HHm0V4Sdp;Xgdv6~Ed4;{Mg`kbZVF@$ObUQv|It8qpJ$DFIh2U2xDr z+%EvXvrd8lj*O&dvSAXs8z>m(>o-m9)_G?dzj*5z7rI}UM0k%T0w)uug%U|K?ulFN@zmoX&00C_jhovZ zfe!uUbebmoT*-&SBl!B=E=zx-jWUobE%Wiz3uj!E-1HjT+1@F|{q@%y+hL z8oOL<>wZAvzY_GWwO=t@cOWG&898;dX{vV#Qbb?%9(?~F8O%UgCgrD>Rdu{n+lpXY zKH;y`J_)$E6~7QWw%PFz&zVq0ZI9H(Dn=Eg)*`oUg>3{8RE69gJs;Erd2PJv6foT} zmy=gqP@T&VQGM86hDKc}_ED%19&v*scQ*h&V7fX;v0a`fCfKfp(8G+jad#-hbZYeAs7o02Bj^gN^X20lQX5V~$-6!EPuP#?Z@PV(wRaa4F7bRBk zxH!Rp*(20GU89qfK~Bo7%+i5Ahd}lgc&Ht8mGjw1YQd7j;losN0Ee5>xt(vSRKdgN z=@M0Pb>1V5UCrDvdnLE3(^y&zB9EQaur@bIM)@RR3j+b*1;A+(*>4va)ErUhK(#AO zPQ3ru*%z5QhKxk&*jm8pml`Q~ht?C@8FzL%;ea z!@Yocp3YB?vR9@YbvU?c{rbmSHzD?Qn@UNdvQOVQ7VRNp`stheK_#GrK^>1UyUr}5OIns5Jg2g=vv`kgMDDCBGXD?7J-avrE_}>z;N)*Cn51jvLj|Z%~27?IBtth_FS*66tf|1YyG-DRjuj)-62$r zo3SNPk(CA&)#fnnZj(KU{Ysvd=Rk*hpi^SK4_ z|Ct%2XGE6T|NPlAOZ+~v?kzjjb9uSqg5S23RWIWkJo zS0fSkZuT|i3uQ!-k2lC|vfcxp1zh+j8o<$WuBnxJBSinsYlFpMJ20N2^Y=W0=yT#W zd~$J*(~V|<7f;MfRw>izw0prVZ;XbPmOTHyq(*SiG-bQk#5>gMc`hTin#`arNtd_! z;z5o|uVQrSACn5+(ZAX;K$9GbgNGn3jEj|^GoU$~fKs+GsFHdb2;I15ck4bj)qdG zF~Zi>FQWqq^3$-=Bg-@v70xFmu#l#Pm$P3R#8H5>h9LFyakp~i)?uYQMZ2Z%(MNsn zTDL|2AI5)xpq-SVq2ynf_2{P$_d7=<<#`{P?4PB89I^!azpLXyjk`KX-=8&i+80-g+{ikKIKZB;vP zWa`uj8-sdp%b$DP9P@bZESWFq4iEmVY3BAp;n(wLlN%D^jGam8yQI>X%y9$XT$@_& zgp04@sa?JiZEI2lLzYM6fZP0l7bSu*F2hEU<6fWs;SzZiUsnj#ll8~J$>hC?k1=z; z4d7n`0q_O&m^KonOU!}ph{q}PAmqI8wE;HAPsHy2>ek=p*3tO%z z)+blCA{s@z!aA+~@!h*f$WiR#+bzreNIF{`dfHd&6lYrSO1di;sawKilqPK;PfwQv zg{!-PjowD9y{5~v4HGp#{!44A0(zyDKwdwb;~mtFb<>`O@g+kvdv;Axnt)8#%0m0X zSSSupb8d_f2%1;*f1r!)@NDY(e?@&|K$Xq&wm~D^AuS!!-QC^Y-5^~8QqmF-Q6G^2P6+5`M<&E_rB-**?V_-XRevWTtqmC=pB5TJ7T&O^huoDEG}Bs46ES> zKKe_TB|@$4hc*{z4bDKh)mP)a$u+fGrpd>yuDmswg}4!wGR8ZT*m)EE3F^lll}8q3 zq(1TYZoW_q%$EzkKZ{4>f+BJk56><+v}cB|e_^{TTz{+7|_0Zt*1_^d?=IQHurPjz9`c zfTe-~&pkge&utrO^slFdO_AG^l4$|q&35b#gR_tyc0}uR>3{}yh2zJ)#Q7wiIUZ#i z=}c^u8m#F>3eYK-YXNk^67Q;K8cfqD0d75y?VP5s$O`Z}PH~$W+ZwghEkYDMIMNS( z202<t4c|F{JhYqsH~-_2$xjJ#1B(MiJ^gZe1f)#aTne&Fd~huH7} zOE3t8+-$9#xlhJEpR^Qh{5k!!D^Q;^mGu72Gh-43;}9m+UYB0&$C%sSz0#O-^z&yf zSc1uw*AA8}=+# zcCLD_KVv7MAD!FKZoP;U7WCkeuLTo0!?nC#&$8r4kzkKGcOM#K+AnF-!EI~Fn#EmX zm?4!%r{C(xGG(;*r^N!n^e4|4<-$JcJCL1iy6WEV9+o@$F=8v#4(V+h6l>!P?Drw7jV{Pra}Z&)<^|q|@R2pPzYE z{Rl_onwT#JW*MBp3IeYPp9x{0+|m8~haE{=gOiM4SC{(p)~`#jz!$Pf+`Fq2g{RNX z<*=u4J~mX*6v2#^JS7ndr1JO!*JwDcH{;WYCn*@XtKOFU*2`xY+ysL)(+Wa188;C8 zln<`@7D-=`@&>6Nf83pD7Wt(XRfOnH1$hsZLfKDpy_jDfLct$2%+@XoVxO6=II)k0 z-<<@JvjelPoN0bBK#QSql|`Eb>n}Nzdh5e_qf251+wK=hdHoSamfDn5)JjjBu7s`J z_R-H{qP94;mx%kUoX;4yG1bQSjx{e!ewTiM-wM3u{+OvAjM*`c4)t2rn2<&ezYARs zCt5{3aG44-tL$ZN>O#yXx)vJ7c;s?xl%TC3fU~u}8tG);0+20}f{`1o)5(?%LK7Gl z4XyN5xuY4SdHu#hE&3q!tJNW*3h3w66q8?^3N*MA@NEoN{DiY0VuS^D6v_%3(X1EH zm;XK`3?ZCiA0|0kKS6ND;5@GyU&7W1ai4CP1b39FR*`hFFe{;y_1BoZ@xg+}P@SM6 zbIbjFwbFTrmXDKdyeR$BAK6M==v(L->V=o#?ve>+UGIGKQqI$mg6YfTu1v}Eo_w?Q zkxcF{W0E@_lW{t@3k3n<{?>%+*0eO+h{RQQIEVl4lU5Xm@%!d%SHaG;5jV2pSe1lu zcsSijP8zLsS?enUl$;DXz~y*X`n%CNYPz~@fy%Ens)a*FMMI8apG1;FgfDUq2ZyI) zVRV*-)`7QYdN>~4xAg(cys8#~$m}v)k!R&hT2r^oiypm{u?@p-jz4@QymP6Wr}U%9 zT^pw$d}qnBiKMLV@zb*G3_3|=wKD)$r9Vv1?ekOV3?G-f5zDxAFZG{srLwik6fNq6 zaqd--Myx5dhFv0>qf(~2UlE=%2eqF`D(fJ3wQpu*)^@I_vtsXqQ`J*5MZU+pxD6s0 zNN5Ogw$xrR*O8@Wr=W)teey>M-s2D#thgKwnT0@lC_T50C)IgHw~Oj8d*6E~o{9MR z)F2GE6nnx2)tJ)ha3Xmf7bSaORU25xWkd@z&>wDpgio^CO@;``TRBHzRk`da4HBX( z0QCezwih85K&B52lv1ZHvU5+JLuk()9mx_KerceJ=hGD4#vf9OQE>IL6};!QqF9QbfU#q%lDbjFdKa%DjU0V ziXyEoMiW|u3=!-1I{Ld@Wv^v+BA92i9Da06GKiGH#T||1ke-9>M)`F!VPME~^A}}9 z?vt}B{*tcJp4bCnVm0R>uarT}A~OUvUw)=bFI+vpdDSvqc?zv(wBZ{Hb#jEkW(!WD z+L1t&+lzJDE01Ed=r6*{B?H`Lm7#aK*DER^a#HDna4(qysJMAo^Xe09 z#CA!I6$)oQS=0KZ@-_)y5M?viaF~x5M>S8MLXZ=#SHqaVCd^@?L=5vx;Z4#etCFCV zei*yI%;U@s=eeBf&6K!6ve!wWEsTwQ;2f30#(lX8`4f4g&vfIHu`?XP4PGhN{e+bA z#%0Ik-!I~u;L{o#oSLg%IN&PLBQv9K#ZYbh*oaG4lhnN?-*b9Zj&%8m%VSh~SK)~)e_KOKQ952OANnsZLEo%UU12%+VU_GX$lHMK9Xl(9TJ;W^ z80dv>KyQ~8ZC`+j2`Rm-Op|Vj;-Vn)zDpFYUph?^O?22tO}1wqA3#0H}9Ina=f!R)_@C?mL$?woB8TJ|f zuv>dwT5(?W`6u0Zr}*vRkw|KE&@|-V)J4#EW5=%@b|B?t%ty92O{V}Y@4#;YjUw1T zVmMXzwo&wBwTwi0KGX)iN_>3@-~!XxBPF5ROS;E3&6i>1l~u3kzVPcVN^&VaV#HWZ z?lMdS;O>BUv|Swichm&D)Xax+r5--3+GEza{f8|gf;llVOVE}A)p061>|XtrEl(>b zD`)mup=It_AZ(#JmT8F<+FX3(0_pQ^WN)2JA&ogE9wKtdU*z*u+p;>=A8hWx7T z#HNyvhDZ9zue=YNR@R0MXjCP*OE!(#R7oZg;IVCf`MK<8yEm6gF3Ko+CU^TDSPZtm zwd+$UK}DRmtFLQV2qQ03^W*)U6`DG*N)NA-srJA@fUf;E{-TIEDSXEs8n3AN0uBzaW{3q?} z|F6W5;k@?H!YFtKHm|Ixze8fXQjPDsFX;A;3=>;7R4dFKb|HjrB9Y>Heq5$p<}fTI zH2d=J?+(m<26HylfAYk2x~*PK1VJaL_0p61e{w z)Ax&Rq=I+A*%Yo#DiEKuQqsnVK9gJS?hMqRX5yYvTzmBRo{g;^7L**=OfY{3bcB6Y zy|jy7!oPE|aILk->OC|wyI! z4g?f?=SQZh-_Zk%Bs6)@=2k(FhQ+;Shx{BDmdEjQDd-+zIUv;yq5L3_f96~;=D4z+ zJy!EU2f=CuMNTQmr?7edvV8L4117Jc2siP`H#YU}4IqzVMY`AiiZekDnG497n(5w$D(Z;){Pjcc9s|&dKr}D}2TcWF9 zstUCTY*p^~7G{*LtjUln79DLkv+llR8H&6z>Z}O6G|$6 zMPhlR*lh>;u#0;&46T(L@>~xFfbcEfK3Eg`pMdHCDKxYiHl(ZicW`+*A`K#aA zu0T|3o_KY=nNxEbO^=nIaw++sQF+PqR_%D|(e4%LBmJkrjgmX-_e{khv8EMM5h@b~ ztgrrT5>jyREod}O&5^h3nOq-uTbn%>$o$m(xCRRluzOk4PHVyY%}8+^jTo^uzI{*J z@NPs64a;(&jRcno(PE=`P9(qAGJGogWt(r-kb|~vt_$`)_+02pb$b-0iLAE-Oa;kH zxdbVB^CpZ%?9$gGpiRrUtbgGY+ly?h%;kI%n8cv$h@`y$C-^Mm#cKENB!2+C%F0y?JUn%`+S59iyewJAP!Qm@QGG z%NWz@!{u);Hlo)l>HF7LME#qC1ftpgSwZcgpN(vpzZEWc=5iEgq$7FnoD68|mA7Zk z#*x2P@Lq`surb?6HL4E!k(Ktiff%g6<>#g$cN2=6RAI>3hrb`7;0U!aVa@W4w{{bb zex)y)0&=^|!M!Ek`Ali;B^N%Q(`b5=OsJ!bhk^x-$LHdYFsKuobM=Qa4i*e0f5qvU zSWlk?B=k~9OVrR7QhXOJYiXS9sM%4{UOwjH-*F0fb)mSEARj#66sd3{@X- zSM9fs(XP~D_?%YbvSrZ(mTq!TDUNSy-TsWhg7ztI8Y7D-#V_8HctrpsU{_neRNZD& z#EBn(`)`qKBAus=1!0^SHXusE zu++-PF%$VVENr)9Eye1*+8vq|KK<9-qJ|ulUGIGB^jimIeQ#N+Kx0dBM-Rn{&Nri^ zw1jw1G@oI4`U8G@CYgy(Umffg7)nN#vz8YpIN7v@hS1G+qBuR_4)-7Q{tXShkQswZ z+`Bu{U{tl^3ysVV+Bng}T6t-n!O7>g5g28yjQxnkqU^>*CX{_)bMwO?LK{12rMB*U zQAQ*C@Ob=DuL#l3CL$BPW=quj=yufZB)_{sdt>BrN0};d-4=7&?Dow11vhnV*~JNh z57 zvh!@c(W)j(R$H{T;ILPzTyzi|tXj4^P=HEYmYbv0->M%0t-=l-a+SWJDI_c?-aVdj zl%cmW+sOBPKW)$|{G~JlM<;jfqmfClZRQu!k!=kI!+*xeKoJ0a_Y4%FdRCG__P0CC zZeaZYdQhV9X%lX5R35qPwGpa+J7$HS!u!lT2gGF9mV^N{$ZCX!RF3eWn!D5jy#Kj+ zIzf)JLCXtUv!ck)*OV?Z;_k>w+``s;5yj$;Pk!;?9S!(57w>*@DD+t=f6K=gWvTQe zI{z|LMt)7YT%D@WM)RL}{4D@HCPSaLKP{!5LQVpjVw#ua;rhlTPG*wE0_4 z7ou0Y#M9VnhxtAQ6)AYn)DWfpT8xR*9lvlZ5-0V7q)PMdhwaZf5z1isTC`Mp{dMVf z^!W))xf$@R;!D!=4G*cH#)4ZD+(wO*Jp7t>H^lQpC%f5=S|y0&7bpwM+ zvS&1_O_7UMm{8g~#WGRxTvY4y_+Fqua3}_lBYMy-gw8t6oAm1UWI-=;0c?%{gh)nB zV4`Lb1Ecf{T<=Y19ntq(hXNQ^UY?oZK|x;>8qEDHmP5e^!Q<9h{t1<=^`g?7idGxA zV;i0p^A&A-SnF*B?9{Dzca#+!{CT#=^!T9`t|avN@w^8|M!3TC^_3ZyG03@>wckt# zA$yv<<8vdGogNO&-s=KSGP7EmZsU&tDmr22dB!snd>0LKEDF(5n_Br)jc3g2h_9XT zy?bPu!L}z8HskZM{qL|?dEpI{cPlo{ZFFqj_%tu;3aCRE5>ds~7UGX5ZerR0*};@R z`?1a%f%2CLu@tebk>*Mlsb{`tvASVBZo~!cTYe=vPc@eZn0%pC{_dPnaPLHXy~V^} ztIYf?t{6W0ya?fC)yZ!}JE8JiQFqhB-(hXX2eI7#9`Vb$?hRxUn4CCgTvzCi!w^7! z!&}oi}4FgxYy zdxt6D_o@ChmI!EntqdNtHlrdUnB7C0NmPQCE`g1hW>?LQCPj{XYi#oT#-JJHJ+UTv zn~V)TqJ5kkr^DGcTB^yf6m;An#IR0&r+TVwjo0Aiju=MU0+l-9kPLsNum|t9f5ib( z1JYLWW3k85(CCCYxLG4Jl75Qg;}+k=_6CGEDGFp89MF7Zk_ z!llY>;1=9}M&A}r2;5?v!L4H3WiE>R2g>FA%Bgw~O*~e%1QxCS+97FF&q5P}0T_|s zGj&hI7qiuSM4J*~#Jl|M=oxRW#_;wFk`F1QDWP3g|Np{6Nn|TJts&4})<-WKlQJIW3b!JWFWJG+y6J(3HfVYq!XZYF?52Q4w zSFQl{WJGVSu*1=|!KR_Q#ITRs{*-ffj_NJOD^^?7$}l*D_@2lzc#4sR9>i(+z36c2yHasCot8_ ziVYUW<=hO&fX+ZyzxrAivyXORL_lAGgu^WRUvfaYZOe9KoebqydNYbV6C5@M63$o#wBHmH+|I0 z-@sfO*%H$npT(JtGrg&D-RXYNc~_jUVZC054VN$>#Wld$ReD*5}^vDzQ!dZ&h}K)?;{ zsi0%iD=-*am0H;(NzeSa6d+u*gW-;3RQ_WYSlaP0zJFja9n zgt8AUiI2#^{ zGS!96W8lwK$cU%2ZBc{|@-5z70c)etso*lLgrs#(KtI@wh{#TlPCBdSMARNL!AQJ0 zZ#1E!WSAT-&3nAnAk?&Y(7DR4e2Dija*1BPARrHsRmkkbVAO;a-T?2K4k907(pKi; z9K4o%P)&iD9*wNU_Hy3wTefukgP8ym)ATyo~IgknfcYE9+Z^Y@x92h zxHosQ6qbhU{XfkF()>90SJBN?XJcE>vxB^-QHacWqi%K8Z6ihS`bGK=dHg;TMWl=SW(n8RIJ{Qc5P;@r%);(Y~Un6{t;whYilg{g1Z_XY~7owGMAdGf|`0qxsk1EHWPb@5X1>fI~_>xT^uR~rcO-Rpha+VDQWs|&Ox_@)Rb$_Y?uCp!*2ka38^JvxX zqlp%FF!Ugs#cVYyf-2u}ff~%MvHv>Yl#!wXt`e zdCyZ(`|V!_7RY~3s0nQQYcT($Q@L(x?p6wG5h4`*GD?xe>)TSV3qfD=QUb_) z!2;n6fz4G8=TsPsbSEm2)em93%Lu`uSZ{%rOR&Az*0fc3un@-@Oi9@GkI!&d#wNp~ zFswtJ%XFUy{1yJ&5P2ofy`2dUv2Pj(2~!W#^$ji?;-n^2J3-7E4z=5(OsM9~ytY$H zvF5Y6I61+`KGe*2ex6Xu@gKbRF}m0_vj|=Z4`k^{0KB&CjA^mFGI$|qC3jZs2+yq) zQ_@MpyM3}P;`>L~j8P5QE7ea5Ybu;9ITn3-5`5KxuI=n};8rI2jaHT@6l~%d{qtvx_#Cw}I}(@Qc{KqnYsIwh8oa}KM#^%1a%aWv z$E4#wj8az#@V=%4-?%ftJabNQXIbWJow}Yu+CaLb6gL#%SX6D`2y#$?WdWT$4v}jG zyHl<2JGGF%6P7gA|KN>#hc0zKYDyH*E|bFYn+YehUf}hdXNH1}g;!t|eP9R|W9$_d zLmx-?P`ZM=RD9UcR}vMWp9POKsRo=t&yJAWh?P)WD4D$$Gx4`PB6y+GCH0^^*RSav ze6zi2{Z5K{}R-qvjNQPNDYr~5hDQ^bNh-}|QC6>toaa029~*r0%dZFR zkPD@;h#yCH45{4P^EH`DZ@n$$;KW>+Vq6V~`k0dg^4Lfmv?2ta^e7u4U+ulW*^5s} z>KL6>=1=9`uV7+L6OKBT46!( z5VVoNKT!gp!a8xPTLmf2qcX;u^ZD$UYRgw6;Bt@87rj-1noPl*C<>SiOk~QlxSmE2 z$IwAX&87|Y-`VL=9zyU*{_)900U%A{ogalKf3|wqcQ*D+=QM7~(55{OCnsfkr9?K$ z^gK_VQ6~XPzYVxSzw4y))0CvUfs`X%Q>Itiy61m&7;?=&y*T2?-*$hG2Ol{nGS6KA z8*j@Udc5&nG>>6g71NmNo#rnfvS*RQMh@^Z{XI3Jkx`H@gI@Aa>VWWGR9EHi7ejn_ zeR3y;)x!R6U?S7K8r?9+??MvK<0OOqLP_jEaB)|KVlw3!Vr6$k=yhb zdS=&*Y|DS=xe`I9m!vuGQPG9$Pc>>qY3kN2s_^8HHe=7#g^o;j3vM3=o7Yj6q$-}# z<6ui%LWg!1@CKN%m98ROX%^c%MVb)59_t{4NCy}xXjyb4G^4Qy5{&hP=t*Yl)|b_cK;s#{;+#66ItZ+*g#^OK7thCz{uhdGJwLP%7|A1$F&u#%hZ)zcWCnWhg=1 z8(OrMCA`z-$Nc8X9d&F=mL$gdo))p@KP~bkhDlzXy8{M1#WzAn2B)Bwq|g8mSu4Qb z|9F%j=-=X053;JEsg<{;kND_*H5PL%?9)6MkDC4eI1>)UBdcWW)bl|hjs>;{^vrWD zzI2)sagMdc6ZP~e3ufn+)86K9`@f!<3VCgEi4s5mIq?_c)7`)0QKiy3{--(&z!`MH z^!JXq*fDZf1hJImW_-0|E2R$iJg*fY#--D(9knNZq^my{P0$8C-Kglh{d!9A`wLVi z0tQlJ8ffBzUm5(15Rlu_+2>+B_zsCeWlTt^A4XH_V<#}VXeD9$?>Ek*A|$gkpJXH4 zNY0E&Kt7L`5hCU4fgwt*1cPl7nRHjSS(~!|UwqR;n#$gTa(+Y^FU9U)4%{{H{`}Ol zMHT?wn4zkZgxMb+MW#;h_5QnC{q&c-LXZ4{NXz;0ax$kQGBh)P=4xV|=yg|bTvU+h zi)uM^57I^<=Dk3OrJPCa68G#Kj=!fAKU{_kbbEHF++`ux46{Jz&mDQx358{v12}k* z$4fg4s7^hz@EZpx>wo@q5?-(|XnTPW)Ook-Uq8>@f6fKk-RX}Hn&i2)RH0iZfJ;}s zD>slWl=h0V)O;TGJT|S~<0&(Tf*)E__?Z{Z&g}gk$@w8RQ8A65y(hh5VM~pdz8Iua z`z-ZnGOcu_hUk4sshtjHGwr+_zBO#NMwqK}-1X6Y9*whUn@5jD*GJgVv%rP_8}|$D zANzo{m@3=HuYAg*LH*rqGjv!*fAZ!;gkl2ya%Z#U-lu-+44FoM)1dagwbZY@9F&Qa z!@7}FC7;7sCBrKX#*h4ueOO=5d}N-#y$9*ES&dxUDmmeAbo}z**D?>bE%-58WBA8O z4css28yWe_8wcpscNMFEV!2*8)@amEi`B_J0!COJ>%5ZuOa^i@u9hjoJ~<#|k`(SC+~GNv_!UTL(Ie>3iDx@ZaEC`3-H5f;5s{af=LV1OX%w|+M7R_3s-UZ zG$!-UJxl=X^Pn94mE1E}YsLvzij`+sceLii6}2#F*`()ka?{C9qg?u4mb_9y$nDmu zg2^XY{bYgvIdL(kBBZzajD=N?;r7RCM(xcbau9iC`5KX3^^vGhNbF-LSHe#Gpce)i z5-^h|BVtaZ{JZi)Hj^Go>6`nxqrdG>e@%6tTlFA2FeWK~fn+joDvkfu40)6VZ}}>p zT%YJG*Xyimkfq}Jhwhc72kZer#+V&}$)>u6PjcGQ=NYN}#Dh9-Ng4nQt>0AP_e84{ z+7tTa9oNLHso9M0zg-C+bD8TMol#I$4&v^Zp~YHnME z)TL||T}DkGF9RHD6E?LjTLRGa$xchD?BH22|CzK5z@)h~9R_lRACSeW#Rbz=t<&D2 zpx40pR%zClV5;&G)qZ|2q+NDMSgm3))S}uto-Bv;QNN;39>clMgz3`o@nR zp{<~RGe_EcR_)nFNNU~^nR^{A9N1nGWT)-u)m=}egTPR|UM3CD*lrovlgQ0_pu1(O zX~gw)KfrLk%0d~r9K(;hY6i=f%|G#Q?p?6KzcgGlQSJ<;{Yz;?%10@sLnGuz_AX~x zFxv}3nG0Ug;(U*`BDBi#%DlqH|C}0xA;Xqs5+MS#JvjknTyZ(Ikgxp!tScw?51MUs zemZdOXFrLl$m=V}2M;q`z${vTfZ5dJX)EPHfx?e4ZKd4`bQd zwl(U}v?=6y;6KYgFMYv_h$-B@PmwWm`jJmI9Z2|=N4^9P{^W))YL!#Ryq|pT=lsjH z0iv7LZG!{3*fY+-*7&=RtN7-!EK(9Ue6mHyN%5u$J=?-yaCF& zy>k=84$D-51|zAMU?3ihII7q(-KnEV}VFpzz6F>6OHb_S0D; zbQiicnTW~4vFnR)Xi(oHc4V~lQ}0WjHJ(HUUym>2S==9Xq>OxT`fn>{-Pw*r#|Mw) zdJUE_dg7V2idwVn@ND;EN4dN-y2+v87+EwxQ|5rD@usLgl2$rRZSwE!8$5Vr=F!!e z7o&&_voPqBHSQ&g6z8()I6o|zouj(jbpt6>kT*($GgoJL5uVa{9Vz{{d|l(VbirvO zR)NL~aUixt&@;KF3h=J}0*!2Y{fWXhKhmRweCp&@V333!P5zdV+rY@sq$Jtxo|HPR zyu;bAz#}~(ufZwhlD*PouxMDfsmS5qn91S7j9SzHe7pdW4s@QQN4{a%R9pEUt2%O3 zrFUiHXwPNj>m6M8Y#3WwBCVMpXg|~$vTc%Jf$w$foG)7|qF2hfypWF`6;^(DCQ1$K zyog#rrR&&xLvb4J{~w;N`6p z2&wema^m67%nMW#FCqdHRF;}lPGHtURhI*X2{QaOjyhrdxJsD@wJ)=06MQcumbb|B zB?&^YL|Wp+&2RlahqbTeC%7N@YZ~3+s&b}U9IG6+q&b~l#K(gh?}pUI@eh^`X^Y3M ziNg_!rhfK5U%*_Q=G{@MlbS1+44B+x65(bnC(p%I*CU1VeNuTCa;vB3k9t4^*3nU2~5ZZ6uV8 zsv7pyr>b8#*|cZY^24r99kI;oBXSjl{rUV7Pyxg~snlR4L}D+MnVD3~ZOiP`-DGof zbhPKar|Q5?(KpWrn;|>?;yZ!X|L}ENBL2mH!UWO8;ij<41<~1kJ+ffuJ-As}xiS6` zPK@*i>Rzxza<|XNHN8%MqiHg&&;lxl(Y63mVAT49Ro_IG-xo^D30TRB#kezbpR~kJ}`72vM0sp4W;$;+V^DCpdky z+97MbFX@0^R5H72Htnt3(AMLn`w_BuL(%b9Pp50g8H!S5?( zn$3Q{n*rJ`UJGc1T5(V*HF#@)2hS}_+oG2%EO{DNj?JIhlJB#*WOW9*zm&8tj@;L@ zM+RS*(dQV&TA01x&=W@za-Ez5K6KFGb$z*60eYt>Z)Dq{Zbnuz`#F9VTwu5isE&d3 zdqd0F(u8j#JIBc(0cqMAINZ&=VY~xfjAi5sB_eGZBer_FjffX?>K;{^cAqC3Qd&I* zXW+c}|Fn3CoQ8M?+>5ku91%3)2Q9BJu%YSY({-ErF;5H$#0TE#**s^`lHG9{kidHG*~@gKk|*(5hu^Aa$JD!8 zg_|x>S>N+hgi&8;=-13nR>{5MaKUi1V|II2S_)Lr7PAF3q^!tbaS=#vgv<6yuu12^ zY&_9!wy3Sya}ZD8LYv2T$_wR;eWu~L$}(g+a-Qo72t}PZ-6X*i9Sw$aV)GQ|PFRgl z;Ptf}1tbtj;bAD#=K#2)w9 zFjLKWpV4NKT(OS?3+-3?h2mBJL{Ho|cNF7t82;X)MiTz(O1=s_p#c~*gyX{UO>Fk! z78J9;PU0a$z>!s)Wa)6ce|mi4m)S9^dwa~VwDOy5KE%*m3oBUbvFX?ioD6*j9@WWT z1sVr|B{s!^X=pYaB$l+Fw7AlsNH^{qkGk)4hTQ${h5AW7a6y-3FxqPx*wEB=_RZ7n zR}sEM!>z=?qd5M$7&ZeVgOMTBCiki>eu0X_4Kheun=);uS0#$9qbA9j z6pMHl@xEtEdYzwMRTOXZTbJWDZkD4sgME3o*jP=*H8-?nLh~@?_kcdYj_|Nv8dmexd_uqcWOwa23apt|`M2_eWeSec}kGH)z*fCV*=b zAX=5#?teR!-?ez-Fd4-lZ!~dw`CSc7BXzVeGk*^hi*ve;27QnA+aq%<=#|zfV!&4X)i}86Jx;%;&0;17L>(4r{pYPwib`{JtJL?w zKEfm9z9JC4>vSuD<)$o{gHW^A8!8D~4Jy~)@NIa+NMy@jR!&v*D}|3~o-;>Z)L&lj z7-K)-3kPoA=CihdpMdBdW1>&EQUP9qo*1yIa)2!(XWIUP@?v*^4(HIt2^4n-8l; z<25J(_66M2Q#eaRr+`@rABS67xj=_AWE!T_v?99WW3tysH)e(jkNnpQuKD~Y41AfE zmpf@H&cMVd|C4&#dz0hew$ry+z8y0zc!nJ%^4_O{sYy;i>9rKvEB=wq8Ep1PtRS=^1<`zBQA<{9W5u_W{dx3DDc=mKp1@`9gXE>JEnhWR0TG7@!t0N^ z%a1I8@k)oZR^$l-ce*J)t;mQ0dtV-jyz{VXC&1B9S3FjvS3XyoH`N+8Z5|}cxfy?% z(gD$(hj))1O^#&GhvJrSqs3I@D08Jzs%w)s^l)75Q3J04;q%#CEeEq4yv@TBxwj@H9*7BrFQ? zPk}jVhI<5~_?o?X9SaFP>{(++xUGf^)J>%eOSHqZ4Dg6)#9p~}DFZiz+u-;-h!CJ# zHtv-%@Lg1QKz}fB(S%Kk&f9pD=6T0JfyZ A9smFU literal 0 HcmV?d00001 diff --git a/source/index.html b/source/index.html index 3c0ddf5b551..35829381f62 100644 --- a/source/index.html +++ b/source/index.html @@ -15,9 +15,9 @@ hide_github_edit: true

From 1d9299bd0e594b6798a6ee038cd908de9fa26309 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Sun, 19 Jun 2016 00:56:26 +0200 Subject: [PATCH 22/63] Add hydro data sensor docs (#566) --- .../sensor.swiss_hydrological_data.markdown | 35 +++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 source/_components/sensor.swiss_hydrological_data.markdown diff --git a/source/_components/sensor.swiss_hydrological_data.markdown b/source/_components/sensor.swiss_hydrological_data.markdown new file mode 100644 index 00000000000..6fd0c6b5cef --- /dev/null +++ b/source/_components/sensor.swiss_hydrological_data.markdown @@ -0,0 +1,35 @@ +--- +layout: page +title: "Swiss Hydrological Data" +description: "Instructions how to integrate hydrological data of Swiss waters within Home Assistant." +date: 2016-06-17 17:00 +sidebar: true +comments: false +sharing: true +footer: true +ha_category: Sensor +ha_iot_class: "Local Polling" +ha_release: 0.22 +--- + + +The `swiss_hydrological_data` sensor will show you details (temperature, level, and discharge) of rivers and lakes in Switzerland. + +The [station overview](http://www.hydrodaten.admin.ch/en/danger-levels-table.html) contains a list of all available measuring points and will help to determine the ID of station which is needed for the configuration. + +To enable this sensor, add the following lines to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +sensor: + platform: swiss_hydrological_data + name: Aare + station: STATION_ID +``` + +Configuration variables: + +- **name** (*Optional*): Name to use in the frontend. +- **station** (*Required*): The ID of the measurement point. + +The hydrological measurings are coming from the [Swiss Federal Office for the Environment (FOEN)](http://www.hydrodaten.admin.ch). From d54b79382f3babe7ae92c8af98364438d5af575f Mon Sep 17 00:00:00 2001 From: Dan Cinnamon Date: Mon, 20 Jun 2016 00:01:34 -0500 Subject: [PATCH 23/63] Added a documentation page for the envisalink component. (#573) --- source/_components/envisalink.markdown | 76 ++++++++++++++++++++++ source/images/supported_brands/eyezon.png | Bin 0 -> 2725 bytes 2 files changed, 76 insertions(+) create mode 100644 source/_components/envisalink.markdown create mode 100644 source/images/supported_brands/eyezon.png diff --git a/source/_components/envisalink.markdown b/source/_components/envisalink.markdown new file mode 100644 index 00000000000..340c88c1975 --- /dev/null +++ b/source/_components/envisalink.markdown @@ -0,0 +1,76 @@ +--- +layout: page +title: "Envisalink Alarm Control Panel" +description: "Instructions on how to integrate a DSC/Honeywell alarm panel with Home Assistant using an envisalink evl3/evl4 board." +date: 2016-06-19 22:10 +sidebar: true +comments: false +sharing: true +footer: true +logo: eyezon.png +ha_category: Alarm +ha_release: 0.23 +--- + +This component will allow Home Assistant users who own either a DSC or Honeywell alarm panel to leverage their alarm system and it's sensors to provide Home Assistant with rich information about their homes. +Connectivity between Home Assistant and the alarm panel is accomplished through a device produced by Eyez On, known as the Envisalink. The Envisalink evl3 and evl4 boards provide a TCP/IP interface to the alarm panel, where it emulates an alarm keypad. This board also exposes a raw TCP/IP based API, upon which this component is built. Currently, the Envisalink version 4 is the latest model. This component supports both the evl3 and the evl4. + +Please visit the [eyezon website](http://www.eyezon.com/) for further information about the evl3 and evl4 boards. + +There is currently support for the following device types within Home Assistant: + +- Binary Sensor (Reports on zone status) +- Sensor (Emulates an alpha-numeric keypad attached to the alarm panel) +- Alarm Control Panel (Reports on partition status, and can be used to arm/disarm the system) + +This is a fully event-based component- any event sent by the Envisalink device will be immediately reflected within Home Assistant. + +## Configuration + +An `envisalink` section must be present in the `configuration.yaml` file and contain the following options as required: + +### Required Parameters +- **host**: The ip address of the Envisalink device on your home network. +- **panel_type**: `HONEYWELL` or `DSC`, depending upon which alarm system you have. +- **user_name**: Which username to authenticate with when connecting to the device. On a Honeywell alarm panel, the username/password are the same. +- **password**: Which password to authenticate with when connecting to the device. +- **code**: Your alarm panel's code, for authenticating user input during arm/disarm. + +### Optional Parameters +- **port**: Which network port to connect with. Default: `4025` +- **evl_version**: 3 for evl3, or 4 for evl4. Default: `3` +- **keepalive_interval**: This is a periodic heartbeat signal (measured in seconds) sent to your Envisalink board to keep it from restarting. This is required for DSC and Honeywell systems. Default: `60` seconds +- **zonedump_interval**: This is an interval (measured in seconds) where the evl will dump out all zone statuses. This is required for Honeywell systems, which do not properly send zone closure events. DSC boards do not technically need this. Default: `30` +- **zones**: Envisalink boards have no way to tell us which zones are actually in use, so each zone must be configured in Home Assistant. For each zone, at least a name must be given. *Note- if no zones are specified, Home Assistant will not load any binary_sensor components.* +- **partitions**: Again, Envisalink boards do not tell us what is in use, and what is not, so each partition must be configured with a partition name. If no partition parameter is specified, then no alarm_panel or sensor components are loaded. + +#### Example + +```yaml +envisalink: +#optional + port: 4025 + evl_version: 3 + keepalive_interval: 60 + zonedump_interval: 30 + +#required + host: + panel_type: HONEYWELL or DSC + user_name: + password: + code: '1234' + + zones: + 11: + name: 'Back Door' + type: 'opening' + + 21: + name: 'First Floor Motion' + type: 'motion' + + partitions: + 1: + name: 'Home Alarm' +``` diff --git a/source/images/supported_brands/eyezon.png b/source/images/supported_brands/eyezon.png new file mode 100644 index 0000000000000000000000000000000000000000..1dd698a885411f81e47a0d83962ad3f02b87091b GIT binary patch literal 2725 zcmV;W3R?AvP)E`LJ)+*4BA>d84DF|GIL1{*+e!c`5n1ji-EQ_lF_fZ5iE~U;btQ|H!ickzm23km_*;hH6`Ug@~tKF#d!n z_mxTiyr2G_W&Vmc|INAnibkJ`fd8_T<vSZVVN8JVUZvX%Z2T4RhRA_y}nl^SEPcxlPJDKj8|Nn>H`yOB#i^Mr6KBqm$ zUt+Ypr}y3EyH^XtJmL|L_+Nw)YFrwM%0sfUVOh_wf$Vde55=nhtv+ZMb~ZjluHeV{ z{4``AgxBz8J=xj)DivGX2ZMZ1dkAL3&&PXPAHlAl7r%P|-g3UTv9b|5bysIhzo_n!Ny9Mlw9FM?8QGz>9st~ z>vEM~@;qfYyZpIJd;n+@U9b_A$8P)J0~Exc`E+8@mGfGND5h#l0i=3dN)FoX_BNUo z9{4_oXT$a_4(RVX;>eY6bE_0Jjowv4P1Dd0Wn(%ROgTKq!r&Y*2Z?cEGO6vi+kS|v z0b2oNUhs2K6z;(3_B!IQs=K`<@l+JAqQy=TMyD=8S)u3V=tV$W9khLa4^86U12b`1 zA+ECuM>3ylJ1Hz5W7=_3F8GZT8hL; zLgLE}62t)#A0+R?l{~`fb;M9jt{x+K(1g8MFVBb85QidWkO0KQXb{yLqlmJb%nu;_$_0d6 zqtn4o7uk?_CeAo=jzB~kqr^o*PKHBbrYKg^iO~a*sM62PiOWn8lnzU7xVn6G-MhYy zU0Eg`D?uF;pms^?H7Y zIR!DXAaR-m_!kqca#&q7=s-M~6JNsWN0(&3_@;tEI1y$UG~hy*P1X?STs>dTE_-p< z)7^FyL%~38`OwrBcTCz=P|-PNNqo5=23($@K{t~MT6itYDme63xJ)O`vSm=y#_fqH zfs%#tAvFcW@!}bQQ?k%rN_xp>7R172;Uy9a&rn+@f`Asj5iToe$Eh$`<1sESYAeUk zB70E8Nkqqz)%ylS$Bh^50f{FQjA!@^9VQ+|&xB*#z)%LS{B|udcu3Nh&C+lq8TP~+ z-Pf-cJS=IWq{vr@1r(HWjUFG9rY#6B(3HxhaE1XmL*r73!=5Y;R=p~tplH8V+O((< z7a{56w5(T%Pw@ESe3Ai8f#s)}$_etHUkcx%Tb0Q=V(>zahZNyFobuwXK|-s6+`}Gd z3z~{9?uNx;@hfE+>KEjqn>W`*)m6*eFp~4mC1p~xYS}~+c z$;0PUkdzXYXk|eju*J=Z&u+*}h34rrGofOxTvpzqLFc!y(Gk$O6K_ZtWpu?c2wvtZZo*^s&${YHoWci?)L`e{r;7Z5i%L_x3Uq0)vfUI z$(rZ+Rb;VP-SQ{r5p42}cfuzCyg%9ZiF7oWKkVHHUaRwN?%p~GFaOjH?(;E1b453~ z?<*s#TI26ueuP>O-u>j5_j)hyO-dQ=)6Z6&#aB}H(&p`dp}-<(=_gLzKeNg z^WXpa>p#Cv!$1E1w`g9b~-R=lT2jkhB4|-J;Qox zGUij>8(GXI8N**=+#*wq@z`X%?o%5sB^NavkMTM+cCiRc{%@}F+8fnj4GC0Y+t6Xu znoaASZFRiB8JR}2%LI*D-wvQ`ZQC^V?M9s_RUJ7k#%eSq7A~!+tm$-XfdzxONDFMR zB~vnBthJv?+-%r9%&J?G<)~_-#y6V=As%~n)9D8zp6NGQtxvkN^?9}b%Sh7Zz?R3b* zT7&NfP1|Z3Y`tq3j>UL=tKN{9dY1;zYD(R)1ZEn%WjQv(A40afb%SX(EW6+nW!Xa#KD=}We%9`fLlC7F#{DluK5nd3Q~LM4 fM?B&Y|7Z9Q+hL*>WC<_y00000NkvXXu0mjfME_Cz literal 0 HcmV?d00001 From c1644d31c5fe65c2c6f2e27e5eea01e16f9d4089 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Tue, 21 Jun 2016 17:04:17 +0200 Subject: [PATCH 24/63] Add docs for Fixer.io sensor (#574) --- source/_components/sensor.fixer.markdown | 37 ++++++++++++++++++++ source/images/supported_brands/fixer-io.png | Bin 0 -> 51983 bytes 2 files changed, 37 insertions(+) create mode 100644 source/_components/sensor.fixer.markdown create mode 100644 source/images/supported_brands/fixer-io.png diff --git a/source/_components/sensor.fixer.markdown b/source/_components/sensor.fixer.markdown new file mode 100644 index 00000000000..6f415da155d --- /dev/null +++ b/source/_components/sensor.fixer.markdown @@ -0,0 +1,37 @@ +--- +layout: page +title: "Fixer.io" +description: "Instructions how to integrate exchange rates from Fixer.io within Home Assistant." +date: 2016-06-20 10:00 +sidebar: true +comments: false +sharing: true +footer: true +ha_category: Sensor +logo: fixer-io.png +ha_iot_class: "Local Polling" +ha_release: 0.23 +--- + + +The `fixer` sensor will show you the current exchange rate from [Fixer.io](http://fixer.io/) which is using data from the [European Central Bank (ECB)](https://www.ecb.europa.eu). + +To get an owerview about the available [currencies](http://api.fixer.io/latest). + +To enable this sensor, add the following lines to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +sensor: + platform: fixer + name: EUR + base: EUR + target: CHF +``` + +Configuration variables: + +- **name** (*Optional*): Name to use in the frontend. +- **base** (*Optional*): The symbol of the base currency. Default to USD +- **target** (*Required*): The symbol of the target currency. + diff --git a/source/images/supported_brands/fixer-io.png b/source/images/supported_brands/fixer-io.png new file mode 100644 index 0000000000000000000000000000000000000000..5559042b1f9fc360bc8451da6f15518d5ba4450e GIT binary patch literal 51983 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�o@h~*KZb0Y3g{ve6%&rTi(}g2H{6D>ha>NXI3+W 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 URP?5UciezJ(SBU<2=@B_03(kb*Z=?k literal 0 HcmV?d00001 From 99e502ea3115b4be380a1e282862357ab600a2da Mon Sep 17 00:00:00 2001 From: Matthew Treinish Date: Sat, 25 Jun 2016 04:37:50 -0400 Subject: [PATCH 25/63] Add documentation for cmus media player (#568) --- source/_components/media_player.cmus.markdown | 43 +++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 source/_components/media_player.cmus.markdown diff --git a/source/_components/media_player.cmus.markdown b/source/_components/media_player.cmus.markdown new file mode 100644 index 00000000000..b26289e46c4 --- /dev/null +++ b/source/_components/media_player.cmus.markdown @@ -0,0 +1,43 @@ +--- +layout: page +title: "cmus" +description: "Instructions how to integrate cmus Music Player into Home +Assistant." +date: 2016-06-17 18:45 +sidebar: true +comments: false +sharing: true +footer: true +ha_category: Media Player +--- + + +The `cmus` platform allows you to control a [cmus](https://cmus.github.io/) music player on a remote or local machine from Home Assistant. + +To add cmus to your installation, add the following to your `configuration.yaml` file if cmus is running on a remote server: + +```yaml +# Example configuration.yaml entry +media_player: + platform: cmus + host: IP_ADDRESS + port: 3000 + password: PASSWORD + name: Desktop Computer Music Player +``` + +if running locally it will look like: +```yaml +# Example configuration.yaml entry +media_player: + platform: cmus + name: Local Music Player +``` + +Configuration variables: + +- **host** Hostname or IP address of the machine running cmus. Note if a remote +cmus is configured that instance must be configured to listen to remote connections, which also requires a password to be set. +- **password** (*Required if host is set*): Password for your cmus player. +- **port** (*Optional*): Port of the cmus socket, defaults to 3000. +- **name** (*Optional*): The name you'd like to give the cmus player in Home Assistant From f4dcd0c8accfb9dedd0e80b5905e521017987303 Mon Sep 17 00:00:00 2001 From: arsaboo Date: Sat, 25 Jun 2016 04:37:55 -0400 Subject: [PATCH 26/63] Added openexchangerates sensor documentation (#584) * Create Openexchangerates Markdown * Update openexchangerates markdown * Added openexchangerates logo --- .../sensor.openexchangerates.markdown | 37 ++++++++++++++++++ .../supported_brands/openexchangerates.png | Bin 0 -> 3722 bytes 2 files changed, 37 insertions(+) create mode 100644 source/_components/sensor.openexchangerates.markdown create mode 100644 source/images/supported_brands/openexchangerates.png diff --git a/source/_components/sensor.openexchangerates.markdown b/source/_components/sensor.openexchangerates.markdown new file mode 100644 index 00000000000..8041e159d56 --- /dev/null +++ b/source/_components/sensor.openexchangerates.markdown @@ -0,0 +1,37 @@ +--- +layout: page +title: "Open Exchange Rates" +description: "Instructions on how to integrate exchange rates from https://openexchangerates.org within Home Assistant." +date: 2016-06-23 10:00 +sidebar: true +comments: false +sharing: true +footer: true +ha_category: Sensor +logo: openexchangerates.png +ha_iot_class: "Local Polling" +ha_release: 0.23 +--- + + +The `openexchangerates` sensor will show you the current exchange rate from [Open Exchange Rates](https://openexchangerates.org) that provides realtime exchange rates for [170 currencies](https://openexchangerates.org/currencies). The free account is limited to only USD as a base currency, allows 1000 requests per month, and updates every hour. + +Obtain your API key [here](https://openexchangerates.org/signup) + +To enable this sensor, add the following lines to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +sensor: + platform: openexchangerates + api_key: your_api_key + base: USD #optional + quote: EUR + name: USDEUR #optional +``` + +Configuration variables: + +- **name** (*Optional*): Name to use in the frontend. +- **base** (*Optional*): The symbol of the base currency. Defaults to USD +- **quote** (*Required*): The symbol of the quote or target currency. diff --git a/source/images/supported_brands/openexchangerates.png b/source/images/supported_brands/openexchangerates.png new file mode 100644 index 0000000000000000000000000000000000000000..dbcf719dc457a0afad6593874ce4e265e1966961 GIT binary patch literal 3722 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 Date: Sat, 25 Jun 2016 04:40:10 -0400 Subject: [PATCH 27/63] hdmi cec doc (#585) --- source/_components/hdmi_cec.markdown | 64 ++++++++++++++++++++++++++++ 1 file changed, 64 insertions(+) create mode 100644 source/_components/hdmi_cec.markdown diff --git a/source/_components/hdmi_cec.markdown b/source/_components/hdmi_cec.markdown new file mode 100644 index 00000000000..2c2603ca89d --- /dev/null +++ b/source/_components/hdmi_cec.markdown @@ -0,0 +1,64 @@ +--- +layout: page +title: "HDMI CEC" +description: "Instructions how to interact with HDMI CEC via Home Assistant." +date: 2016-06-24 19:59 +sidebar: true +comments: false +sharing: true +footer: true +ha_category: Automation +featured: false +ha_release: 0.23 +ha_iot_class: "Local Push" +--- + +The CEC component provides services that allow selecting the active device, powering on all devices, and setting all devices to standby. Devices are defined in the configuration file by associating HDMI port number and a device name. Connected devices that provide further HDMI ports, such as Soundbars and AVRs are also supported. Devices are listed from the perspective of the CEC-enabled Home Assistant device. Any connected device can be listed, regardless of whether it supports CEC. Ideally the HDMI port number on your device will map correctly the CEC physical address. If it does not, use `cec-client` (part of the `libcec` package) to listen to traffic on the CEC bus and discover the correct numbers. + +## {% linkable_title CEC Setup %} + +### {% linkable_title Adapter %} + +The computer running Home Assistant must support CEC, and of course be connected via HDMI to a device also supporting CEC. You can purchase a [USB CEC adapter](https://www.pulse-eight.com/p/104/usb-hdmi-cec-adapter) to add support if necessary. Note that all Raspberry Pi models support CEC natively. + +### {% linkable_title libcec %} + +[libcec](https://github.com/Pulse-Eight/libcec) must be installed for this component to work. Follow the installation instructions for your environment, provided at the link. `libcec` installs Python 3 bindings, by default as a system Python module. If you are running Home Assistant in a Python virtual environment, make sure it can access the system module, by either symlinking it or using the `--system-site-packages` flag. + +## {% linkable_title Configuration Example %} + +In the following example, a Pi Zero running Home Assistant is on a TV's HDMI port 1. HDMI port 2 is attached to a AV receiver. Three devices are attached to the AV receiver on HDMI ports 1 through 3. +```yaml +hdmi_cec: + devices: + 1: Pi Zero + 2: + 1: Fire TV Stick + 2: Chromecast + 3: Another Device +``` + +## {% linkable_title Services %} + +### {% linkable_title Select Device %} + +Call the `hdmi_cec/select_device` service with the name of the device to select, for example: + +```json +{ + "device": "Chromecast" +} +``` + +### {% linkable_title Power On %} + +Call the `hdmi_cec/power_on` service (no arguments) to power on any devices that support this function. + +### {% linkable_title Standby %} + +Call the `hdmi_cec/standby` service (no arguments) to place in standby any devices that support this function. + +## {% linkable_title Useful References %} + +* [CEC overview](http://wiki.kwikwai.com/index.php?title=The_HDMI-CEC_bus) +* [CEC-o-matic](http://www.cec-o-matic.com/) From 37969a2c0394f293f400588adc252123933dbc55 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Sat, 25 Jun 2016 13:39:18 +0200 Subject: [PATCH 28/63] Add initial persistant notification docs --- .../persistent_notification.markdown | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 source/_components/persistent_notification.markdown diff --git a/source/_components/persistent_notification.markdown b/source/_components/persistent_notification.markdown new file mode 100644 index 00000000000..3d187e23a98 --- /dev/null +++ b/source/_components/persistent_notification.markdown @@ -0,0 +1,18 @@ +--- +layout: page +title: "Persistent notification" +description: "Instructions on how to integrate persistant notifications into Home Assistant." +date: 2016-06-25 10:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: home-assistant.png +ha_category: Other +ha_release: 0.23 +--- + +The `persistant_notification` component exposes configuraation errors to the frontend. + +The service `persistent_notification/create`. Takes in `message`, `title`, and `notification_id`. If `notification_id` is given, it will overwrite the notification if there already was a notification with that id. + From fa5418895badb254ba5bec962f86cf35bb6eefb1 Mon Sep 17 00:00:00 2001 From: Daniel Date: Sun, 26 Jun 2016 11:39:28 +0200 Subject: [PATCH 29/63] New Homematic implementation (#586) * New Homematic documentation * Fixed grammar * Explained resolvenames option --- .../binary_sensor.homematic.markdown | 86 +++++++++++++++++++ source/_components/homematic.markdown | 66 ++++++++++++++ source/_components/light.homematic.markdown | 54 ++++++++++++ .../rollershutter.homematic.markdown | 31 +++++++ source/_components/sensor.homematic.markdown | 40 +++++++++ source/_components/switch.homematic.markdown | 53 ++++++++++++ .../_components/thermostat.homematic.markdown | 24 +++--- 7 files changed, 341 insertions(+), 13 deletions(-) create mode 100644 source/_components/binary_sensor.homematic.markdown create mode 100644 source/_components/homematic.markdown create mode 100644 source/_components/light.homematic.markdown create mode 100644 source/_components/rollershutter.homematic.markdown create mode 100644 source/_components/sensor.homematic.markdown create mode 100644 source/_components/switch.homematic.markdown diff --git a/source/_components/binary_sensor.homematic.markdown b/source/_components/binary_sensor.homematic.markdown new file mode 100644 index 00000000000..978ebafafe6 --- /dev/null +++ b/source/_components/binary_sensor.homematic.markdown @@ -0,0 +1,86 @@ +--- +layout: page +title: "Homematic Binary Sensor" +description: "Instructions how to integrate Homematic binary sensors within Home Assistant." +date: 2016-06-25 19:43 +sidebar: true +comments: false +sharing: true +footer: true +logo: homematic.png +ha_category: Binary Sensors +ha_release: 0.23 +--- + + +The `homematic` binary_sensor platform lets you observe the state changes of binary [Homematic](http://www.homematic.com/) sensors through Home Assistant. + +To set it up, add the following information to your `configuration.yaml` file: + +```yaml +binary_sensor: + platform: homematic + address: DEV1234567 + name: Window +``` + +Configuration variables: + +- **platform** (*Required*: Needed to let Home Assistant know this is a Homematic rollershutter. +- **address** (*Required*): The serial number of the device, eg. LEQ1234567 +- **name** (*Optional*): Name to identify the device. +- **button** (*Optional*): Channel of the device to monitor (default: 1) +- **param** (*Optional*): For devices with multiple channels and possible events, you may define which event type you want to attatch to this entity. If none is specified all events will turn the state to on. +- **hidden** (*Optional*): Hide device from UI. Makes sense for buttons that will only trigger automations etc. (default: False) + +Currently the following devices are supported: + +- Motion detectors (param: MOTION) +- Remotes (wall-mounted buttons, handheld devices) (param: PRESS_SHORT, PRESS_LONG) +- Smoke detectors (no parameters needed) +- Shutter contacts for doors, windows etc. (no parameters needed) +- Gong / Doorbell buttons (no parameters needed) + +Beware, that binary sensors might be included in devices that also have other functions. For example: The HM-Sen-MDIR-WM55 motion detector does not only detect motion (no motion == False, motion == True), it also detects the surrounding brightness (configure as sensor to monitor brightness from 0 to 255) and has buttons which can be pressed in different ways. Since buttons can only be pressed or not pressed, we consider them as binary sensors. +The way buttons work is, that the entity for the specified parameter will be set to on and off again. So if you press the button shortly, it will flip on and off instantly, which could trigger some automation. If you hold down the button, the entity configured for the long press will be flipped on and off and can trigger another automation. As of now, we don't support the release of the long press and the continuation events that happen inbewteen. +You may leave out the parameter, which will result in a single entity turning on and off on any supported event. + +As an example for a complete configuration of the HM-Sen-MDIR-WM55 device: + +```yaml +sensor: + - platform: homematic + address: DEV1234567 + name: Entrance PIR Brightness + param: BRIGHTNESS + +binary_sensor: + - platform: homematic + address: DEV1234567 + name: Entrance PIR Motion + param: MOTION + - platform: homematic + address: DEV1234567 + name: Entrance PIR 1 Short + button: 1 + param: PRESS_SHORT + hidden: True + - platform: homematic + address: DEV1234567 + name: Entrance PIR 1 Long + button: 1 + param: PRESS_LONG + hidden: True + - platform: homematic + address: DEV1234567 + name: Entrance PIR 2 Short + button: 2 + param: PRESS_SHORT + hidden: True + - platform: homematic + address: DEV1234567 + name: Entrance PIR 2 Long + button: 2 + param: PRESS_LONG + hidden: True +``` diff --git a/source/_components/homematic.markdown b/source/_components/homematic.markdown new file mode 100644 index 00000000000..db3972eab2d --- /dev/null +++ b/source/_components/homematic.markdown @@ -0,0 +1,66 @@ +--- +layout: page +title: "Homematic" +description: "Instructions for how to integrate Homematic device into Home Assistant." +date: 2016-06-23 17:54 +sidebar: true +comments: false +sharing: true +footer: true +logo: homematic.png +ha_category: Hub +featured: true +--- + + +The [Homematic](http://www.homematic.com/) component provides bi-directional communication of Homematic platforms with their real world counterparts. Setting up this component is mandatory to make use of Homematic devices within Home Assistant. +Additionally, you will have to configure each of your devices. Further information on how to setup specific devices can be found in the corresponding platform-documentation for Homematic devices on the right. + +Device support is currently available for most of: + +- Switch/Dimmer-actors +- Thermostats +- Rollershutters +- Sensors (shutter contacts, motion detectors, power meters and more) +- Simple remote controls + +If you want to see if a specific device you have is supported, head over to the [pyhomematic](https://github.com/danielperna84/pyhomematic/tree/master/pyhomematic/devicetypes) repository and browse through the sourcecode. A dictionary with the device identifiers (e.g. HM-Sec-SC-2) can be found within the relevant modules near the bottom. + +There are some devices which expose multiple functionalities. For example: The HM-Sen-MDIR-WM55 motion detector can be configured as 6 individual entities within HA. + +1. Motion detector (binary_sensor platform) +2. Button 1 short press (binary_sensor platform) +3. Button 1 long press (binary_sensor platform) +4. Button 2 short press (binary_sensor platform) +5. Button 2 long press (binary_sensor platform) +6. Brightness sensor (sensor platform) + +We also have experimental autodetection support. If you ONLY configure this homematic-component and set autodetect to True, Home Assistant will try to automatically detect and configure each (supported) device paired to your CCU / Homegear. The resulting HA-entities will be named in the fashion of _ADDRESS CHANNEL PARAMETER_. This will provide you with the information which of your devices are supported and may be explicitly configured manually for a more useful integration into Home Assistant. Beware, that autodetection may put heavy load on your CCU and may take some time to complete (maybe 2-3 minutes when a lot of devices are present). Keep an eye on theservice messages on your CCU. If they show up while starting HA, increase the delay parameter in your configuration. +Afterwards you may incrementally configure each device the way you want. Manually configured devices will be handled first and won't be processed again when autodetection is still enabled. + +To set up the component, add the following information to your `configuration.yaml` file: + +```yaml +homematic: + local_ip: 127.0.0.1 + local_port: 8943 + remote_ip: 127.0.0.1 + remote_port: 2001 + autodetect: False +``` + +Configuration variables: + +- **local_ip** (*Required*): IP of device running Home Assistant +- **local_port** (*Optional*): Port for connection with Home Assistant (default: 8943) +- **remote_ip** (*Required*): IP of CCU / Homegear +- **remote_port** (*Required*): Port of Homegear / CCU XML-RPC Server (usually 2001) +- **autodetect** (*Optional*): experimental, detect all devices (default: False) +- **resolvenames** (*Optional*): Try to fetch device names from HM-CFG-LAN metadata or XML-API on CCU (default: False) +- **delay** (*Optional*): Delay fetching of current state per deivce. Useful to prevent overloading CCU when initially fetching device states. (Default: 0.5) + +To further explain the ```resolvenames``` option: +We use two approaches to fetch the names of devices. Either one assumes you have properly named your devices in your existing Homematic setup. + +1. Using the metadata devices internally have. When using a HM-CFG-LAN interface, you typically use a configuration software ("HomeMatic-Komponenten konfigurieren" is the name of the shortcut on your desktop by default) to pair and configure your devices. If you have paired devices, you'll see them listed in a table. The leftmost column (Name) is prefilled with default names. You can click such a name and enter whatever you like. But you should Stick to ASCII. So rather use _Kueche_ instead of _Küche_. Which also makes sense because the entity-names in HA are ASCII as well. +2. If you use a regular CCU, there is an add-on called the "XML-API". With it installed, you are generally able to fetch all kinds of information from you CCU using XML-RPC. We can leverage this and fetch the names of devices set within the CCU. For some reason the CCU does NOT save the names to the metadata, so we have to use this workaround. diff --git a/source/_components/light.homematic.markdown b/source/_components/light.homematic.markdown new file mode 100644 index 00000000000..0616892914c --- /dev/null +++ b/source/_components/light.homematic.markdown @@ -0,0 +1,54 @@ +--- +layout: page +title: "Homematic Light" +description: "Instructions how to integrate Homematic lights within Home Assistant." +date: 2016-06-25 12:10 +sidebar: true +comments: false +sharing: true +footer: true +logo: homematic.png +ha_category: Light +ha_release: 0.23 +--- + + +The `homematic` light platform lets you control [Homematic](http://www.homematic.com/) lights through Home Assistant. +You have the choice to configure switch-devices as light entities within HA if you have lights attatched to the switch and it makes sense for your setup. If the switch uses multiple channels to control different devices, you may mix the configurations. + +To set it up, add the following information to your `configuration.yaml` file: + +```yaml +light: + platform: homematic + address: LEQ1234567 + name: Kitchen + button: 1 +``` + +Configuration variables: + +- **platform** (*Required*: Needed to let Home Assistant know this is a Homematic rollershutter. +- **address** (*Required*): The serial number of the device, eg. LEQ1234567 +- **name** (*Optional*): Name to identify the device. +- **button** (*Optional*): Channel of the Homematic interface to interact with (Default: 1) + +Currently the following devices are supported: +- Switch from 1 to 4 channels +- Dimmer from 1 to 2 channels +- Switch powermeter + +As an example for a mixed configuration of a HM-LC-Sw2-FM actor: + +```yaml +light: + platform: homematic + address: LEQ1234567 + name: Livingroom + button: 1 +switch: + platform: homematic + address: LEQ1234567 + name: Ceiling fan + button: 2 +``` \ No newline at end of file diff --git a/source/_components/rollershutter.homematic.markdown b/source/_components/rollershutter.homematic.markdown new file mode 100644 index 00000000000..399589e1632 --- /dev/null +++ b/source/_components/rollershutter.homematic.markdown @@ -0,0 +1,31 @@ +--- +layout: page +title: "Homematic Rollershutter" +description: "Instructions how to integrate Homematic rollershutters within Home Assistant." +date: 2016-06-25 12:05 +sidebar: true +comments: false +sharing: true +footer: true +logo: homematic.png +ha_category: Rollershutter +ha_release: 0.23 +--- + + +The `homematic` rollershutter platform lets you control [Homematic](http://www.homematic.com/) rollershutters through Home Assistant. + +To set it up, add the following information to your `configuration.yaml` file: + +```yaml +rollershutter: + platform: homematic + address: LEQ1234567 + name: Kitchen +``` + +Configuration variables: + +- **platform** (*Required*: Needed to let Home Assistant know this is a Homematic rollershutter. +- **address** (*Required*): The serial number of the device, eg. LEQ1234567 +- **name** (*Optional*): Name to identify the device. \ No newline at end of file diff --git a/source/_components/sensor.homematic.markdown b/source/_components/sensor.homematic.markdown new file mode 100644 index 00000000000..4e6e021e1a5 --- /dev/null +++ b/source/_components/sensor.homematic.markdown @@ -0,0 +1,40 @@ +--- +layout: page +title: "Homematic Sensor" +description: "Instructions how to integrate Homematic senors within Home Assistant." +date: 2016-06-25 12:58 +sidebar: true +comments: false +sharing: true +footer: true +logo: homematic.png +ha_category: Sensor +ha_release: 0.23 +--- + + +The `homematic` sensor platform lets you view various [Homematic](http://www.homematic.com/) sensors within Home Assistant. + +To set it up, add the following information to your `configuration.yaml` file: + +```yaml +sensor: + platform: homematic + address: LEQ1234567 + name: Dishwasher + param: POWER +``` + +Configuration variables: + +- **platform** (*Required*: Needed to let Home Assistant know this is a Homematic rollershutter. +- **address** (*Required*): The serial number of the device, eg. LEQ1234567 +- **name** (*Optional*): Name to identify the device. +- **button** (*Optional*): Channel of the device to monitor (default: 1) +- **param** (*Optional*): For devices with multiple channels and possible events, you may define which event type you want to attatch to this entity. + +Currently the following devices are supported: +- Thermostats / Weather sensors (param: TEMPERATURE, HUMIDITY) +- Switch Powermeter (param: POWER, CURRENT, VOLTAGE, FREQUENCY, ENERGY_COUNTER) +- Motion detectors (param: BIRGHTNESS) +- Rotary (no parameters needed) diff --git a/source/_components/switch.homematic.markdown b/source/_components/switch.homematic.markdown new file mode 100644 index 00000000000..7c6414c4bab --- /dev/null +++ b/source/_components/switch.homematic.markdown @@ -0,0 +1,53 @@ +--- +layout: page +title: "Homematic Switch" +description: "Instructions how to integrate Homematic switches within Home Assistant." +date: 2016-06-25 12:24 +sidebar: true +comments: false +sharing: true +footer: true +logo: homematic.png +ha_category: Switch +ha_release: 0.23 +--- + + +The `homematic` switch platform lets you control [Homematic](http://www.homematic.com/) switches through Home Assistant. +If the switch uses multiple channels to control different devices, you may setup multiple HA entities. Switches may also be configured as light entities if you have lights attatched to them. Besides that, there a switches that have included sensors, which may also be configured as separate HA entities. + +To set it up, add the following information to your `configuration.yaml` file: + +```yaml +switch: + platform: homematic + address: LEQ1234567 + name: Dishwasher + button: 1 +``` + +Configuration variables: + +- **platform** (*Required*: Needed to let Home Assistant know this is a Homematic rollershutter. +- **address** (*Required*): The serial number of the device, eg. LEQ1234567 +- **name** (*Optional*): Name to identify the device. +- **button** (*Optional*): Channel of the Homematic interface to interact with (Default: 1) + +Currently the following devices are supported: +- Switch from 1 to 4 channels +- Dimmer from 1 to 2 channels +- Switch with powermeter + +As an example for a HM-ES-PMSw1-DR switch with powermeter sensors: + +```yaml +switch: + - platform: homematic + address: LEQ1234657 + name: Dishwascher +sensor: + - platform: homematic + address: LEQ1234657 + name: Dishwascher Power + param: POWER +``` \ No newline at end of file diff --git a/source/_components/thermostat.homematic.markdown b/source/_components/thermostat.homematic.markdown index e7b85c7290b..f76a91bf768 100644 --- a/source/_components/thermostat.homematic.markdown +++ b/source/_components/thermostat.homematic.markdown @@ -2,36 +2,34 @@ layout: page title: "Homematic Thermostat" description: "Instructions how to integrate Homematic thermostats within Home Assistant." -date: 2015-11-25 08:00 +date: 2016-06-25 12:08 sidebar: true comments: false sharing: true footer: true logo: homematic.png ha_category: Thermostat -ha_release: 0.9 +ha_release: 0.23 --- -The `homematic` thermostat platform let you control [Homematic](http://www.homematic.com/) thermostat from Home Assistant. Currently there is support for Homematic (HM-TC-IT-WM-W-EU, HM-CC-RT-DN) thermostats using Homegear or Homematic central (CCU1/CCU2). +The `homematic` thermostat platform lets you control [Homematic](http://www.homematic.com/) thermostats through Home Assistant. MAX!-Thermostats are supported as well. To set it up, add the following information to your `configuration.yaml` file: ```yaml thermostat: platform: homematic - address: HOMEGEAR/CCU_ADDRESS - devices: - Livingroom 1: - id: DEVICE_SERIAL_NO - Livingroom 2: - id: DEVICE_SERIAL_NO + address: LEQ1234567 + name: Kitchen ``` Configuration variables: -- **address** (*Required*: Adress of your Homegear or Homeatic central, eg. http://localhost:2001 -- **devices** array (*Required*): List of all your Homeatic devices. - - **name** (*Required*): Name to identify the device. - - **id** (*Required*): The serial number of the device, eg. MEQ0791521 +- **platform** (*Required*: Needed to let Home Assistant know this is a Homematic thermostat. +- **address** (*Required*): The serial number of the device, eg. LEQ1234567 +- **name** (*Optional*): Name to identify the device. +Currently the following devices are supported: +- Thermostats +- Wall Thermostats \ No newline at end of file From 45d4ce3065101dc5a7f4bf7081980e57964d7bee Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Sun, 26 Jun 2016 12:02:26 +0200 Subject: [PATCH 30/63] Minor changes --- .../binary_sensor.homematic.markdown | 12 ++++---- source/_components/homematic.markdown | 30 +++++++++---------- source/_components/light.homematic.markdown | 8 ++--- source/_components/sensor.homematic.markdown | 5 ++-- source/_components/switch.homematic.markdown | 9 +++--- .../_components/thermostat.homematic.markdown | 5 ++-- 6 files changed, 36 insertions(+), 33 deletions(-) diff --git a/source/_components/binary_sensor.homematic.markdown b/source/_components/binary_sensor.homematic.markdown index 978ebafafe6..835eaccb064 100644 --- a/source/_components/binary_sensor.homematic.markdown +++ b/source/_components/binary_sensor.homematic.markdown @@ -8,12 +8,13 @@ comments: false sharing: true footer: true logo: homematic.png -ha_category: Binary Sensors +ha_category: Binary Sensor ha_release: 0.23 +ha_iot_class: "Local Push" --- -The `homematic` binary_sensor platform lets you observe the state changes of binary [Homematic](http://www.homematic.com/) sensors through Home Assistant. +The `homematic` binary sensor platform lets you observe the state changes of binary [Homematic](http://www.homematic.com/) sensors through Home Assistant. To set it up, add the following information to your `configuration.yaml` file: @@ -26,12 +27,11 @@ binary_sensor: Configuration variables: -- **platform** (*Required*: Needed to let Home Assistant know this is a Homematic rollershutter. - **address** (*Required*): The serial number of the device, eg. LEQ1234567 - **name** (*Optional*): Name to identify the device. -- **button** (*Optional*): Channel of the device to monitor (default: 1) +- **button** (*Optional*): Channel of the device to monitor. Defaults to 1. - **param** (*Optional*): For devices with multiple channels and possible events, you may define which event type you want to attatch to this entity. If none is specified all events will turn the state to on. -- **hidden** (*Optional*): Hide device from UI. Makes sense for buttons that will only trigger automations etc. (default: False) +- **hidden** (*Optional*): Hide device from UI. Makes sense for buttons that will only trigger automations etc. Defaults to `False`. Currently the following devices are supported: @@ -42,7 +42,7 @@ Currently the following devices are supported: - Gong / Doorbell buttons (no parameters needed) Beware, that binary sensors might be included in devices that also have other functions. For example: The HM-Sen-MDIR-WM55 motion detector does not only detect motion (no motion == False, motion == True), it also detects the surrounding brightness (configure as sensor to monitor brightness from 0 to 255) and has buttons which can be pressed in different ways. Since buttons can only be pressed or not pressed, we consider them as binary sensors. -The way buttons work is, that the entity for the specified parameter will be set to on and off again. So if you press the button shortly, it will flip on and off instantly, which could trigger some automation. If you hold down the button, the entity configured for the long press will be flipped on and off and can trigger another automation. As of now, we don't support the release of the long press and the continuation events that happen inbewteen. +The way buttons work is, that the entity for the specified parameter will be set to on and off again. So if you press the button shortly, it will flip on and off instantly, which could trigger some automation. If you hold down the button, the entity configured for the long press will be flipped on and off and can trigger another automation. As of now, we don't support the release of the long press and the continuation events that happen in between. You may leave out the parameter, which will result in a single entity turning on and off on any supported event. As an example for a complete configuration of the HM-Sen-MDIR-WM55 device: diff --git a/source/_components/homematic.markdown b/source/_components/homematic.markdown index db3972eab2d..32368d9e798 100644 --- a/source/_components/homematic.markdown +++ b/source/_components/homematic.markdown @@ -9,7 +9,7 @@ sharing: true footer: true logo: homematic.png ha_category: Hub -featured: true +ha_iot_class: "Local Push" --- @@ -28,14 +28,14 @@ If you want to see if a specific device you have is supported, head over to the There are some devices which expose multiple functionalities. For example: The HM-Sen-MDIR-WM55 motion detector can be configured as 6 individual entities within HA. -1. Motion detector (binary_sensor platform) -2. Button 1 short press (binary_sensor platform) -3. Button 1 long press (binary_sensor platform) -4. Button 2 short press (binary_sensor platform) -5. Button 2 long press (binary_sensor platform) -6. Brightness sensor (sensor platform) +1. Motion detector ([/components/binary_sensor.homematic/](binary_sensor platform)) +2. Button 1 short press ([/components/binary_sensor.homematic/](binary_sensor platform)) +3. Button 1 long press ([/components/binary_sensor.homematic/](binary_sensor platform)) +4. Button 2 short press ([/components/binary_sensor.homematic/](binary_sensor platform)) +5. Button 2 long press ([/components/binary_sensor.homematic/](binary_sensor platform)) +6. Brightness sensor ([/components/sensor.homematic/](sensor platform)) -We also have experimental autodetection support. If you ONLY configure this homematic-component and set autodetect to True, Home Assistant will try to automatically detect and configure each (supported) device paired to your CCU / Homegear. The resulting HA-entities will be named in the fashion of _ADDRESS CHANNEL PARAMETER_. This will provide you with the information which of your devices are supported and may be explicitly configured manually for a more useful integration into Home Assistant. Beware, that autodetection may put heavy load on your CCU and may take some time to complete (maybe 2-3 minutes when a lot of devices are present). Keep an eye on theservice messages on your CCU. If they show up while starting HA, increase the delay parameter in your configuration. +We also have experimental autodetection support. If you ONLY configure this homematic component and set autodetect to True, Home Assistant will try to automatically detect and configure each (supported) device paired to your CCU/Homegear. The resulting Home Assistant entities will be named in the fashion of _ADDRESS CHANNEL PARAMETER_. This will provide you with the information which of your devices are supported and may be explicitly configured manually for a more useful integration into Home Assistant. Beware, that autodetection may put heavy load on your CCU and may take some time to complete (maybe 2-3 minutes when a lot of devices are present). Keep an eye on the service messages on your CCU. If they show up while starting Home Assistant, increase the delay parameter in your configuration. Afterwards you may incrementally configure each device the way you want. Manually configured devices will be handled first and won't be processed again when autodetection is still enabled. To set up the component, add the following information to your `configuration.yaml` file: @@ -52,14 +52,14 @@ homematic: Configuration variables: - **local_ip** (*Required*): IP of device running Home Assistant -- **local_port** (*Optional*): Port for connection with Home Assistant (default: 8943) -- **remote_ip** (*Required*): IP of CCU / Homegear -- **remote_port** (*Required*): Port of Homegear / CCU XML-RPC Server (usually 2001) -- **autodetect** (*Optional*): experimental, detect all devices (default: False) -- **resolvenames** (*Optional*): Try to fetch device names from HM-CFG-LAN metadata or XML-API on CCU (default: False) -- **delay** (*Optional*): Delay fetching of current state per deivce. Useful to prevent overloading CCU when initially fetching device states. (Default: 0.5) +- **local_port** (*Optional*): Port for connection with Home Assistant. Defaults to 8943. +- **remote_ip** (*Required*): IP of CCU/Homegear +- **remote_port** (*Required*): Port of Homegear/CCU XML-RPC Server (usually 2001) +- **autodetect** (*Optional*): experimental, detect all devices. Default to `False`. +- **resolvenames** (*Optional*): Try to fetch device names from HM-CFG-LAN metadata or XML-API on CCU. Defaults to `False`. +- **delay** (*Optional*): Delay fetching of current state per deivce. Useful to prevent overloading CCU when initially fetching device states. Defaults to 0.5. -To further explain the ```resolvenames``` option: +To further explain the `resolvenames` option: We use two approaches to fetch the names of devices. Either one assumes you have properly named your devices in your existing Homematic setup. 1. Using the metadata devices internally have. When using a HM-CFG-LAN interface, you typically use a configuration software ("HomeMatic-Komponenten konfigurieren" is the name of the shortcut on your desktop by default) to pair and configure your devices. If you have paired devices, you'll see them listed in a table. The leftmost column (Name) is prefilled with default names. You can click such a name and enter whatever you like. But you should Stick to ASCII. So rather use _Kueche_ instead of _Küche_. Which also makes sense because the entity-names in HA are ASCII as well. diff --git a/source/_components/light.homematic.markdown b/source/_components/light.homematic.markdown index 0616892914c..99a301672af 100644 --- a/source/_components/light.homematic.markdown +++ b/source/_components/light.homematic.markdown @@ -10,11 +10,12 @@ footer: true logo: homematic.png ha_category: Light ha_release: 0.23 +ha_iot_class: "Local Push" --- The `homematic` light platform lets you control [Homematic](http://www.homematic.com/) lights through Home Assistant. -You have the choice to configure switch-devices as light entities within HA if you have lights attatched to the switch and it makes sense for your setup. If the switch uses multiple channels to control different devices, you may mix the configurations. +You have the choice to configure switch-devices as light entities within Home Assistant if you have lights attatched to the switch and it makes sense for your setup. If the switch uses multiple channels to control different devices, you may mix the configurations. To set it up, add the following information to your `configuration.yaml` file: @@ -28,10 +29,9 @@ light: Configuration variables: -- **platform** (*Required*: Needed to let Home Assistant know this is a Homematic rollershutter. - **address** (*Required*): The serial number of the device, eg. LEQ1234567 - **name** (*Optional*): Name to identify the device. -- **button** (*Optional*): Channel of the Homematic interface to interact with (Default: 1) +- **button** (*Optional*): Channel of the Homematic interface to interact with. Defaults to 1. Currently the following devices are supported: - Switch from 1 to 4 channels @@ -51,4 +51,4 @@ switch: address: LEQ1234567 name: Ceiling fan button: 2 -``` \ No newline at end of file +``` diff --git a/source/_components/sensor.homematic.markdown b/source/_components/sensor.homematic.markdown index 4e6e021e1a5..c493efaafaa 100644 --- a/source/_components/sensor.homematic.markdown +++ b/source/_components/sensor.homematic.markdown @@ -10,6 +10,7 @@ footer: true logo: homematic.png ha_category: Sensor ha_release: 0.23 +ha_iot_class: "Local Push" --- @@ -27,13 +28,13 @@ sensor: Configuration variables: -- **platform** (*Required*: Needed to let Home Assistant know this is a Homematic rollershutter. - **address** (*Required*): The serial number of the device, eg. LEQ1234567 - **name** (*Optional*): Name to identify the device. -- **button** (*Optional*): Channel of the device to monitor (default: 1) +- **button** (*Optional*): Channel of the device to monitor. Defaults to 1. - **param** (*Optional*): For devices with multiple channels and possible events, you may define which event type you want to attatch to this entity. Currently the following devices are supported: + - Thermostats / Weather sensors (param: TEMPERATURE, HUMIDITY) - Switch Powermeter (param: POWER, CURRENT, VOLTAGE, FREQUENCY, ENERGY_COUNTER) - Motion detectors (param: BIRGHTNESS) diff --git a/source/_components/switch.homematic.markdown b/source/_components/switch.homematic.markdown index 7c6414c4bab..25c7afe2877 100644 --- a/source/_components/switch.homematic.markdown +++ b/source/_components/switch.homematic.markdown @@ -10,11 +10,12 @@ footer: true logo: homematic.png ha_category: Switch ha_release: 0.23 +ha_iot_class: "Local Push" --- The `homematic` switch platform lets you control [Homematic](http://www.homematic.com/) switches through Home Assistant. -If the switch uses multiple channels to control different devices, you may setup multiple HA entities. Switches may also be configured as light entities if you have lights attatched to them. Besides that, there a switches that have included sensors, which may also be configured as separate HA entities. +If the switch uses multiple channels to control different devices, you may setup multiple Home Assistant entities. Switches may also be configured as light entities if you have lights attatched to them. Besides that, there a switches that have included sensors, which may also be configured as separate HA entities. To set it up, add the following information to your `configuration.yaml` file: @@ -28,12 +29,12 @@ switch: Configuration variables: -- **platform** (*Required*: Needed to let Home Assistant know this is a Homematic rollershutter. - **address** (*Required*): The serial number of the device, eg. LEQ1234567 - **name** (*Optional*): Name to identify the device. -- **button** (*Optional*): Channel of the Homematic interface to interact with (Default: 1) +- **button** (*Optional*): Channel of the Homematic interface to interact with. Defaults to 1. Currently the following devices are supported: + - Switch from 1 to 4 channels - Dimmer from 1 to 2 channels - Switch with powermeter @@ -50,4 +51,4 @@ sensor: address: LEQ1234657 name: Dishwascher Power param: POWER -``` \ No newline at end of file +``` diff --git a/source/_components/thermostat.homematic.markdown b/source/_components/thermostat.homematic.markdown index f76a91bf768..44dbca3d8b0 100644 --- a/source/_components/thermostat.homematic.markdown +++ b/source/_components/thermostat.homematic.markdown @@ -10,6 +10,7 @@ footer: true logo: homematic.png ha_category: Thermostat ha_release: 0.23 +ha_iot_class: "Local Push" --- @@ -26,10 +27,10 @@ thermostat: Configuration variables: -- **platform** (*Required*: Needed to let Home Assistant know this is a Homematic thermostat. - **address** (*Required*): The serial number of the device, eg. LEQ1234567 - **name** (*Optional*): Name to identify the device. Currently the following devices are supported: + - Thermostats -- Wall Thermostats \ No newline at end of file +- Wall Thermostats From 0c80575130b126dc0aae9eadd0aaab9a19a93cfb Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Sun, 26 Jun 2016 12:03:23 +0200 Subject: [PATCH 31/63] Minior changes --- source/_components/rollershutter.homematic.markdown | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/_components/rollershutter.homematic.markdown b/source/_components/rollershutter.homematic.markdown index 399589e1632..73c773638a6 100644 --- a/source/_components/rollershutter.homematic.markdown +++ b/source/_components/rollershutter.homematic.markdown @@ -10,6 +10,7 @@ footer: true logo: homematic.png ha_category: Rollershutter ha_release: 0.23 +ha_iot_class: "Local Push" --- @@ -26,6 +27,5 @@ rollershutter: Configuration variables: -- **platform** (*Required*: Needed to let Home Assistant know this is a Homematic rollershutter. - **address** (*Required*): The serial number of the device, eg. LEQ1234567 -- **name** (*Optional*): Name to identify the device. \ No newline at end of file +- **name** (*Optional*): Name to identify the device. From 08d4a092e5c66b71e80d906d1e707328dba9e042 Mon Sep 17 00:00:00 2001 From: Daniel Perna Date: Tue, 28 Jun 2016 23:08:40 +0200 Subject: [PATCH 32/63] Delete binary_sensor.homematic.markdown We switched to full autodetect + customization. Platform-configuration now obsolete. --- .../binary_sensor.homematic.markdown | 86 ------------------- 1 file changed, 86 deletions(-) delete mode 100644 source/_components/binary_sensor.homematic.markdown diff --git a/source/_components/binary_sensor.homematic.markdown b/source/_components/binary_sensor.homematic.markdown deleted file mode 100644 index 835eaccb064..00000000000 --- a/source/_components/binary_sensor.homematic.markdown +++ /dev/null @@ -1,86 +0,0 @@ ---- -layout: page -title: "Homematic Binary Sensor" -description: "Instructions how to integrate Homematic binary sensors within Home Assistant." -date: 2016-06-25 19:43 -sidebar: true -comments: false -sharing: true -footer: true -logo: homematic.png -ha_category: Binary Sensor -ha_release: 0.23 -ha_iot_class: "Local Push" ---- - - -The `homematic` binary sensor platform lets you observe the state changes of binary [Homematic](http://www.homematic.com/) sensors through Home Assistant. - -To set it up, add the following information to your `configuration.yaml` file: - -```yaml -binary_sensor: - platform: homematic - address: DEV1234567 - name: Window -``` - -Configuration variables: - -- **address** (*Required*): The serial number of the device, eg. LEQ1234567 -- **name** (*Optional*): Name to identify the device. -- **button** (*Optional*): Channel of the device to monitor. Defaults to 1. -- **param** (*Optional*): For devices with multiple channels and possible events, you may define which event type you want to attatch to this entity. If none is specified all events will turn the state to on. -- **hidden** (*Optional*): Hide device from UI. Makes sense for buttons that will only trigger automations etc. Defaults to `False`. - -Currently the following devices are supported: - -- Motion detectors (param: MOTION) -- Remotes (wall-mounted buttons, handheld devices) (param: PRESS_SHORT, PRESS_LONG) -- Smoke detectors (no parameters needed) -- Shutter contacts for doors, windows etc. (no parameters needed) -- Gong / Doorbell buttons (no parameters needed) - -Beware, that binary sensors might be included in devices that also have other functions. For example: The HM-Sen-MDIR-WM55 motion detector does not only detect motion (no motion == False, motion == True), it also detects the surrounding brightness (configure as sensor to monitor brightness from 0 to 255) and has buttons which can be pressed in different ways. Since buttons can only be pressed or not pressed, we consider them as binary sensors. -The way buttons work is, that the entity for the specified parameter will be set to on and off again. So if you press the button shortly, it will flip on and off instantly, which could trigger some automation. If you hold down the button, the entity configured for the long press will be flipped on and off and can trigger another automation. As of now, we don't support the release of the long press and the continuation events that happen in between. -You may leave out the parameter, which will result in a single entity turning on and off on any supported event. - -As an example for a complete configuration of the HM-Sen-MDIR-WM55 device: - -```yaml -sensor: - - platform: homematic - address: DEV1234567 - name: Entrance PIR Brightness - param: BRIGHTNESS - -binary_sensor: - - platform: homematic - address: DEV1234567 - name: Entrance PIR Motion - param: MOTION - - platform: homematic - address: DEV1234567 - name: Entrance PIR 1 Short - button: 1 - param: PRESS_SHORT - hidden: True - - platform: homematic - address: DEV1234567 - name: Entrance PIR 1 Long - button: 1 - param: PRESS_LONG - hidden: True - - platform: homematic - address: DEV1234567 - name: Entrance PIR 2 Short - button: 2 - param: PRESS_SHORT - hidden: True - - platform: homematic - address: DEV1234567 - name: Entrance PIR 2 Long - button: 2 - param: PRESS_LONG - hidden: True -``` From 8fc49d7290b6cadf6670f3f7d5b4bf1839f56f11 Mon Sep 17 00:00:00 2001 From: Daniel Perna Date: Tue, 28 Jun 2016 23:09:14 +0200 Subject: [PATCH 33/63] Delete light.homematic.markdown We switched to full autodetect + customization. Platform-configuration now obsolete. --- source/_components/light.homematic.markdown | 54 --------------------- 1 file changed, 54 deletions(-) delete mode 100644 source/_components/light.homematic.markdown diff --git a/source/_components/light.homematic.markdown b/source/_components/light.homematic.markdown deleted file mode 100644 index 99a301672af..00000000000 --- a/source/_components/light.homematic.markdown +++ /dev/null @@ -1,54 +0,0 @@ ---- -layout: page -title: "Homematic Light" -description: "Instructions how to integrate Homematic lights within Home Assistant." -date: 2016-06-25 12:10 -sidebar: true -comments: false -sharing: true -footer: true -logo: homematic.png -ha_category: Light -ha_release: 0.23 -ha_iot_class: "Local Push" ---- - - -The `homematic` light platform lets you control [Homematic](http://www.homematic.com/) lights through Home Assistant. -You have the choice to configure switch-devices as light entities within Home Assistant if you have lights attatched to the switch and it makes sense for your setup. If the switch uses multiple channels to control different devices, you may mix the configurations. - -To set it up, add the following information to your `configuration.yaml` file: - -```yaml -light: - platform: homematic - address: LEQ1234567 - name: Kitchen - button: 1 -``` - -Configuration variables: - -- **address** (*Required*): The serial number of the device, eg. LEQ1234567 -- **name** (*Optional*): Name to identify the device. -- **button** (*Optional*): Channel of the Homematic interface to interact with. Defaults to 1. - -Currently the following devices are supported: -- Switch from 1 to 4 channels -- Dimmer from 1 to 2 channels -- Switch powermeter - -As an example for a mixed configuration of a HM-LC-Sw2-FM actor: - -```yaml -light: - platform: homematic - address: LEQ1234567 - name: Livingroom - button: 1 -switch: - platform: homematic - address: LEQ1234567 - name: Ceiling fan - button: 2 -``` From c717ff4a213ab84ee98504644fe4866fdb546724 Mon Sep 17 00:00:00 2001 From: Daniel Perna Date: Tue, 28 Jun 2016 23:09:49 +0200 Subject: [PATCH 34/63] Delete rollershutter.homematic.markdown We switched to full autodetect + customization. Platform-configuration now obsolete. --- .../rollershutter.homematic.markdown | 31 ------------------- 1 file changed, 31 deletions(-) delete mode 100644 source/_components/rollershutter.homematic.markdown diff --git a/source/_components/rollershutter.homematic.markdown b/source/_components/rollershutter.homematic.markdown deleted file mode 100644 index 73c773638a6..00000000000 --- a/source/_components/rollershutter.homematic.markdown +++ /dev/null @@ -1,31 +0,0 @@ ---- -layout: page -title: "Homematic Rollershutter" -description: "Instructions how to integrate Homematic rollershutters within Home Assistant." -date: 2016-06-25 12:05 -sidebar: true -comments: false -sharing: true -footer: true -logo: homematic.png -ha_category: Rollershutter -ha_release: 0.23 -ha_iot_class: "Local Push" ---- - - -The `homematic` rollershutter platform lets you control [Homematic](http://www.homematic.com/) rollershutters through Home Assistant. - -To set it up, add the following information to your `configuration.yaml` file: - -```yaml -rollershutter: - platform: homematic - address: LEQ1234567 - name: Kitchen -``` - -Configuration variables: - -- **address** (*Required*): The serial number of the device, eg. LEQ1234567 -- **name** (*Optional*): Name to identify the device. From c49f8adbedaccdc0d36c0d29ac6f5b58e61c4401 Mon Sep 17 00:00:00 2001 From: Daniel Perna Date: Tue, 28 Jun 2016 23:10:12 +0200 Subject: [PATCH 35/63] Delete sensor.homematic.markdown We switched to full autodetect + customization. Platform-configuration now obsolete. --- source/_components/sensor.homematic.markdown | 41 -------------------- 1 file changed, 41 deletions(-) delete mode 100644 source/_components/sensor.homematic.markdown diff --git a/source/_components/sensor.homematic.markdown b/source/_components/sensor.homematic.markdown deleted file mode 100644 index c493efaafaa..00000000000 --- a/source/_components/sensor.homematic.markdown +++ /dev/null @@ -1,41 +0,0 @@ ---- -layout: page -title: "Homematic Sensor" -description: "Instructions how to integrate Homematic senors within Home Assistant." -date: 2016-06-25 12:58 -sidebar: true -comments: false -sharing: true -footer: true -logo: homematic.png -ha_category: Sensor -ha_release: 0.23 -ha_iot_class: "Local Push" ---- - - -The `homematic` sensor platform lets you view various [Homematic](http://www.homematic.com/) sensors within Home Assistant. - -To set it up, add the following information to your `configuration.yaml` file: - -```yaml -sensor: - platform: homematic - address: LEQ1234567 - name: Dishwasher - param: POWER -``` - -Configuration variables: - -- **address** (*Required*): The serial number of the device, eg. LEQ1234567 -- **name** (*Optional*): Name to identify the device. -- **button** (*Optional*): Channel of the device to monitor. Defaults to 1. -- **param** (*Optional*): For devices with multiple channels and possible events, you may define which event type you want to attatch to this entity. - -Currently the following devices are supported: - -- Thermostats / Weather sensors (param: TEMPERATURE, HUMIDITY) -- Switch Powermeter (param: POWER, CURRENT, VOLTAGE, FREQUENCY, ENERGY_COUNTER) -- Motion detectors (param: BIRGHTNESS) -- Rotary (no parameters needed) From 3051bbe7fa7671a6ad5b1ffa9eac169fb108d2b0 Mon Sep 17 00:00:00 2001 From: Daniel Perna Date: Tue, 28 Jun 2016 23:10:32 +0200 Subject: [PATCH 36/63] Delete switch.homematic.markdown We switched to full autodetect + customization. Platform-configuration now obsolete. --- source/_components/switch.homematic.markdown | 54 -------------------- 1 file changed, 54 deletions(-) delete mode 100644 source/_components/switch.homematic.markdown diff --git a/source/_components/switch.homematic.markdown b/source/_components/switch.homematic.markdown deleted file mode 100644 index 25c7afe2877..00000000000 --- a/source/_components/switch.homematic.markdown +++ /dev/null @@ -1,54 +0,0 @@ ---- -layout: page -title: "Homematic Switch" -description: "Instructions how to integrate Homematic switches within Home Assistant." -date: 2016-06-25 12:24 -sidebar: true -comments: false -sharing: true -footer: true -logo: homematic.png -ha_category: Switch -ha_release: 0.23 -ha_iot_class: "Local Push" ---- - - -The `homematic` switch platform lets you control [Homematic](http://www.homematic.com/) switches through Home Assistant. -If the switch uses multiple channels to control different devices, you may setup multiple Home Assistant entities. Switches may also be configured as light entities if you have lights attatched to them. Besides that, there a switches that have included sensors, which may also be configured as separate HA entities. - -To set it up, add the following information to your `configuration.yaml` file: - -```yaml -switch: - platform: homematic - address: LEQ1234567 - name: Dishwasher - button: 1 -``` - -Configuration variables: - -- **address** (*Required*): The serial number of the device, eg. LEQ1234567 -- **name** (*Optional*): Name to identify the device. -- **button** (*Optional*): Channel of the Homematic interface to interact with. Defaults to 1. - -Currently the following devices are supported: - -- Switch from 1 to 4 channels -- Dimmer from 1 to 2 channels -- Switch with powermeter - -As an example for a HM-ES-PMSw1-DR switch with powermeter sensors: - -```yaml -switch: - - platform: homematic - address: LEQ1234657 - name: Dishwascher -sensor: - - platform: homematic - address: LEQ1234657 - name: Dishwascher Power - param: POWER -``` From 0d47328df01cfbba94f8c4c8a86e52c569ab7aa1 Mon Sep 17 00:00:00 2001 From: Daniel Perna Date: Tue, 28 Jun 2016 23:10:51 +0200 Subject: [PATCH 37/63] Delete thermostat.homematic.markdown We switched to full autodetect + customization. Platform-configuration now obsolete. --- .../_components/thermostat.homematic.markdown | 36 ------------------- 1 file changed, 36 deletions(-) delete mode 100644 source/_components/thermostat.homematic.markdown diff --git a/source/_components/thermostat.homematic.markdown b/source/_components/thermostat.homematic.markdown deleted file mode 100644 index 44dbca3d8b0..00000000000 --- a/source/_components/thermostat.homematic.markdown +++ /dev/null @@ -1,36 +0,0 @@ ---- -layout: page -title: "Homematic Thermostat" -description: "Instructions how to integrate Homematic thermostats within Home Assistant." -date: 2016-06-25 12:08 -sidebar: true -comments: false -sharing: true -footer: true -logo: homematic.png -ha_category: Thermostat -ha_release: 0.23 -ha_iot_class: "Local Push" ---- - - -The `homematic` thermostat platform lets you control [Homematic](http://www.homematic.com/) thermostats through Home Assistant. MAX!-Thermostats are supported as well. - -To set it up, add the following information to your `configuration.yaml` file: - -```yaml -thermostat: - platform: homematic - address: LEQ1234567 - name: Kitchen -``` - -Configuration variables: - -- **address** (*Required*): The serial number of the device, eg. LEQ1234567 -- **name** (*Optional*): Name to identify the device. - -Currently the following devices are supported: - -- Thermostats -- Wall Thermostats From a2b423f26cbcd00cedbc679085bb218b12ea44c8 Mon Sep 17 00:00:00 2001 From: Daniel Perna Date: Tue, 28 Jun 2016 23:26:23 +0200 Subject: [PATCH 38/63] Update homematic.markdown We now only do auto-detection. Edited component-setup to reflect this change. --- source/_components/homematic.markdown | 24 ++++++------------------ 1 file changed, 6 insertions(+), 18 deletions(-) diff --git a/source/_components/homematic.markdown b/source/_components/homematic.markdown index 32368d9e798..970b5b13871 100644 --- a/source/_components/homematic.markdown +++ b/source/_components/homematic.markdown @@ -1,8 +1,8 @@ --- layout: page title: "Homematic" -description: "Instructions for how to integrate Homematic device into Home Assistant." -date: 2016-06-23 17:54 +description: "Instructions for integrating Homematic into Home Assistant." +date: 2016-06-28 23:25 sidebar: true comments: false sharing: true @@ -13,8 +13,7 @@ ha_iot_class: "Local Push" --- -The [Homematic](http://www.homematic.com/) component provides bi-directional communication of Homematic platforms with their real world counterparts. Setting up this component is mandatory to make use of Homematic devices within Home Assistant. -Additionally, you will have to configure each of your devices. Further information on how to setup specific devices can be found in the corresponding platform-documentation for Homematic devices on the right. +The [Homematic](http://www.homematic.com/) component provides bi-directional communication of Homematic platforms with their real world counterparts. Device support is currently available for most of: @@ -26,17 +25,8 @@ Device support is currently available for most of: If you want to see if a specific device you have is supported, head over to the [pyhomematic](https://github.com/danielperna84/pyhomematic/tree/master/pyhomematic/devicetypes) repository and browse through the sourcecode. A dictionary with the device identifiers (e.g. HM-Sec-SC-2) can be found within the relevant modules near the bottom. -There are some devices which expose multiple functionalities. For example: The HM-Sen-MDIR-WM55 motion detector can be configured as 6 individual entities within HA. - -1. Motion detector ([/components/binary_sensor.homematic/](binary_sensor platform)) -2. Button 1 short press ([/components/binary_sensor.homematic/](binary_sensor platform)) -3. Button 1 long press ([/components/binary_sensor.homematic/](binary_sensor platform)) -4. Button 2 short press ([/components/binary_sensor.homematic/](binary_sensor platform)) -5. Button 2 long press ([/components/binary_sensor.homematic/](binary_sensor platform)) -6. Brightness sensor ([/components/sensor.homematic/](sensor platform)) - -We also have experimental autodetection support. If you ONLY configure this homematic component and set autodetect to True, Home Assistant will try to automatically detect and configure each (supported) device paired to your CCU/Homegear. The resulting Home Assistant entities will be named in the fashion of _ADDRESS CHANNEL PARAMETER_. This will provide you with the information which of your devices are supported and may be explicitly configured manually for a more useful integration into Home Assistant. Beware, that autodetection may put heavy load on your CCU and may take some time to complete (maybe 2-3 minutes when a lot of devices are present). Keep an eye on the service messages on your CCU. If they show up while starting Home Assistant, increase the delay parameter in your configuration. -Afterwards you may incrementally configure each device the way you want. Manually configured devices will be handled first and won't be processed again when autodetection is still enabled. +We automatically detect all devices we currently support and try to generate useful names. If you enable name-resolving, we try to fetch names from Metadata (Homegear) and the XML-API you may have installed on your CCU. Since this may fail you can disable this feature. +You can manually override the created entities be using using Home Assistants [Customizing](https://home-assistant.io/getting-started/customizing-devices/) feature. You probably want to do this, because some devices are not useful within the UI, so you can hide them this way. To set up the component, add the following information to your `configuration.yaml` file: @@ -46,7 +36,6 @@ homematic: local_port: 8943 remote_ip: 127.0.0.1 remote_port: 2001 - autodetect: False ``` Configuration variables: @@ -55,7 +44,6 @@ Configuration variables: - **local_port** (*Optional*): Port for connection with Home Assistant. Defaults to 8943. - **remote_ip** (*Required*): IP of CCU/Homegear - **remote_port** (*Required*): Port of Homegear/CCU XML-RPC Server (usually 2001) -- **autodetect** (*Optional*): experimental, detect all devices. Default to `False`. - **resolvenames** (*Optional*): Try to fetch device names from HM-CFG-LAN metadata or XML-API on CCU. Defaults to `False`. - **delay** (*Optional*): Delay fetching of current state per deivce. Useful to prevent overloading CCU when initially fetching device states. Defaults to 0.5. @@ -63,4 +51,4 @@ To further explain the `resolvenames` option: We use two approaches to fetch the names of devices. Either one assumes you have properly named your devices in your existing Homematic setup. 1. Using the metadata devices internally have. When using a HM-CFG-LAN interface, you typically use a configuration software ("HomeMatic-Komponenten konfigurieren" is the name of the shortcut on your desktop by default) to pair and configure your devices. If you have paired devices, you'll see them listed in a table. The leftmost column (Name) is prefilled with default names. You can click such a name and enter whatever you like. But you should Stick to ASCII. So rather use _Kueche_ instead of _Küche_. Which also makes sense because the entity-names in HA are ASCII as well. -2. If you use a regular CCU, there is an add-on called the "XML-API". With it installed, you are generally able to fetch all kinds of information from you CCU using XML-RPC. We can leverage this and fetch the names of devices set within the CCU. For some reason the CCU does NOT save the names to the metadata, so we have to use this workaround. +2. If you use a regular CCU, there is an add-on called the "XML-API". With it installed, you are generally able to fetch all kinds of information from you CCU using XML-RPC. We can leverage this and fetch the names of devices set within the CCU. For some reason the CCU does NOT save the names to the metadata, so we have to use this workaround. Doing this via JSON-RPC (which all CCUs have) is planned for a future release. From 6e074c3101c5c62f40aef2e534ac85d919f6de36 Mon Sep 17 00:00:00 2001 From: Daniel Perna Date: Wed, 29 Jun 2016 02:29:43 +0200 Subject: [PATCH 39/63] Update homematic.markdown Minor fixes --- source/_components/homematic.markdown | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/source/_components/homematic.markdown b/source/_components/homematic.markdown index 970b5b13871..0d468325c7e 100644 --- a/source/_components/homematic.markdown +++ b/source/_components/homematic.markdown @@ -25,8 +25,8 @@ Device support is currently available for most of: If you want to see if a specific device you have is supported, head over to the [pyhomematic](https://github.com/danielperna84/pyhomematic/tree/master/pyhomematic/devicetypes) repository and browse through the sourcecode. A dictionary with the device identifiers (e.g. HM-Sec-SC-2) can be found within the relevant modules near the bottom. -We automatically detect all devices we currently support and try to generate useful names. If you enable name-resolving, we try to fetch names from Metadata (Homegear) and the XML-API you may have installed on your CCU. Since this may fail you can disable this feature. -You can manually override the created entities be using using Home Assistants [Customizing](https://home-assistant.io/getting-started/customizing-devices/) feature. You probably want to do this, because some devices are not useful within the UI, so you can hide them this way. +We automatically detect all devices we currently support and try to generate useful names. If you enable name-resolving, we try to fetch names from Metadata (Homegear) and the XML-API you may have installed on your CCU. Since this may fail this is disabled by default. +You can manually override the created entities be using Home Assistants [Customizing](https://home-assistant.io/getting-started/customizing-devices/) feature. You probably want to do this, because some devices are not useful within the UI, so you can hide them this way. To set up the component, add the following information to your `configuration.yaml` file: @@ -44,11 +44,11 @@ Configuration variables: - **local_port** (*Optional*): Port for connection with Home Assistant. Defaults to 8943. - **remote_ip** (*Required*): IP of CCU/Homegear - **remote_port** (*Required*): Port of Homegear/CCU XML-RPC Server (usually 2001) -- **resolvenames** (*Optional*): Try to fetch device names from HM-CFG-LAN metadata or XML-API on CCU. Defaults to `False`. -- **delay** (*Optional*): Delay fetching of current state per deivce. Useful to prevent overloading CCU when initially fetching device states. Defaults to 0.5. +- **resolvenames** (*Optional*): Try to fetch device names from HM-CFG-LAN metadata and XML-API on CCU. Defaults to `False`. +- **delay** (*Optional*): Delay fetching of current state per deivce on startup. Used to prevent overloading of the CCU. Defaults to 0.5. To further explain the `resolvenames` option: We use two approaches to fetch the names of devices. Either one assumes you have properly named your devices in your existing Homematic setup. -1. Using the metadata devices internally have. When using a HM-CFG-LAN interface, you typically use a configuration software ("HomeMatic-Komponenten konfigurieren" is the name of the shortcut on your desktop by default) to pair and configure your devices. If you have paired devices, you'll see them listed in a table. The leftmost column (Name) is prefilled with default names. You can click such a name and enter whatever you like. But you should Stick to ASCII. So rather use _Kueche_ instead of _Küche_. Which also makes sense because the entity-names in HA are ASCII as well. -2. If you use a regular CCU, there is an add-on called the "XML-API". With it installed, you are generally able to fetch all kinds of information from you CCU using XML-RPC. We can leverage this and fetch the names of devices set within the CCU. For some reason the CCU does NOT save the names to the metadata, so we have to use this workaround. Doing this via JSON-RPC (which all CCUs have) is planned for a future release. +1. Using the metadata devices internally have. When using a HM-CFG-LAN interface, you typically use a configuration software ("HomeMatic-Komponenten konfigurieren" is the name of the shortcut on your desktop by default) to pair and configure your devices. If you have paired devices, you'll see them listed in a table. The leftmost column (Name) is prefilled with default names. You can click such a name and enter whatever you like. But you should stick to ASCII. So rather use _Kueche_ instead of _Küche_. Which also makes sense because the entity-names in HA are ASCII as well. +2. If you use a regular CCU, there is an add-on called the "XML-API". With it installed, you are able to fetch all kinds of information from you CCU using XML-RPC. We can leverage this and fetch the names of devices set within the CCU. For some reason the CCU does NOT save the names to the metadata, so we have to use this workaround. Doing this via JSON-RPC (which all CCUs have) is planned for a future release. From 1fe683b4b5ac6e3a02cf5dacff14d30c2fe0485b Mon Sep 17 00:00:00 2001 From: Daniel Perna Date: Wed, 29 Jun 2016 09:47:49 +0200 Subject: [PATCH 40/63] Re-added platforms with link to component Since we switched to autodetect-only, we don't need to configure platforms. Still having platform sites makes sense as users may browse the components listing for specific types. Other hubs like wink do this as well. --- .../binary_sensor.homematic.markdown | 19 +++++++++++++++++++ source/_components/homematic.markdown | 1 + source/_components/light.homematic.markdown | 19 +++++++++++++++++++ .../rollershutter.homematic.markdown | 19 +++++++++++++++++++ source/_components/sensor.homematic.markdown | 19 +++++++++++++++++++ source/_components/switch.homematic.markdown | 19 +++++++++++++++++++ 6 files changed, 96 insertions(+) create mode 100644 source/_components/binary_sensor.homematic.markdown create mode 100644 source/_components/light.homematic.markdown create mode 100644 source/_components/rollershutter.homematic.markdown create mode 100644 source/_components/sensor.homematic.markdown create mode 100644 source/_components/switch.homematic.markdown diff --git a/source/_components/binary_sensor.homematic.markdown b/source/_components/binary_sensor.homematic.markdown new file mode 100644 index 00000000000..37140c84337 --- /dev/null +++ b/source/_components/binary_sensor.homematic.markdown @@ -0,0 +1,19 @@ +--- +layout: page +title: "Homematic Binary Sensor" +description: "Instructions how to integrate binary Homematic sensors within Home Assistant." +date: 2016-06-28 08:30 +sidebar: true +comments: false +sharing: true +footer: true +logo: homematic.png +ha_category: Binary Sensor +ha_release: 0.23 +ha_iot_class: "Local Push" +--- + + +The `homematic` binary sensor platform lets you observe the state changes of binary [Homematic](http://www.homematic.com/) sensors through Home Assistant. + +Devices will be configured automatically. Please refer to the [component](/components/homematic/) configuration on how to setup Homematic. \ No newline at end of file diff --git a/source/_components/homematic.markdown b/source/_components/homematic.markdown index 0d468325c7e..26e78145fe0 100644 --- a/source/_components/homematic.markdown +++ b/source/_components/homematic.markdown @@ -10,6 +10,7 @@ footer: true logo: homematic.png ha_category: Hub ha_iot_class: "Local Push" +featured: true --- diff --git a/source/_components/light.homematic.markdown b/source/_components/light.homematic.markdown new file mode 100644 index 00000000000..b2223ae9e4c --- /dev/null +++ b/source/_components/light.homematic.markdown @@ -0,0 +1,19 @@ +--- +layout: page +title: "Homematic Light" +description: "Instructions how to integrate Homematic lights within Home Assistant." +date: 2016-06-28 08:30 +sidebar: true +comments: false +sharing: true +footer: true +logo: homematic.png +ha_category: Light +ha_release: 0.23 +ha_iot_class: "Local Push" +--- + + +The `homematic` light platform lets you control [Homematic](http://www.homematic.com/) lights through Home Assistant. + +Devices will be configured automatically. Please refer to the [component](/components/homematic/) configuration on how to setup Homematic. \ No newline at end of file diff --git a/source/_components/rollershutter.homematic.markdown b/source/_components/rollershutter.homematic.markdown new file mode 100644 index 00000000000..38ea5ce3db6 --- /dev/null +++ b/source/_components/rollershutter.homematic.markdown @@ -0,0 +1,19 @@ +--- +layout: page +title: "Homematic Rollershutter" +description: "Instructions how to integrate Homematic rollershutters within Home Assistant." +date: 2016-06-28 08:30 +sidebar: true +comments: false +sharing: true +footer: true +logo: homematic.png +ha_category: Rollershutter +ha_release: 0.23 +ha_iot_class: "Local Push" +--- + + +The `homematic` rollershutter platform lets you control [Homematic](http://www.homematic.com/) rollershutters through Home Assistant. + +Devices will be configured automatically. Please refer to the [component](/components/homematic/) configuration on how to setup Homematic. \ No newline at end of file diff --git a/source/_components/sensor.homematic.markdown b/source/_components/sensor.homematic.markdown new file mode 100644 index 00000000000..aea1b6d5ef2 --- /dev/null +++ b/source/_components/sensor.homematic.markdown @@ -0,0 +1,19 @@ +--- +layout: page +title: "Homematic Sensor" +description: "Instructions how to integrate Homematic sensors within Home Assistant." +date: 2016-06-28 08:30 +sidebar: true +comments: false +sharing: true +footer: true +logo: homematic.png +ha_category: Sensor +ha_release: 0.23 +ha_iot_class: "Local Push" +--- + + +The `homematic` sensor platform lets you observe the state of [Homematic](http://www.homematic.com/) sensors through Home Assistant. + +Devices will be configured automatically. Please refer to the [component](/components/homematic/) configuration on how to setup Homematic. \ No newline at end of file diff --git a/source/_components/switch.homematic.markdown b/source/_components/switch.homematic.markdown new file mode 100644 index 00000000000..3e3fd7e8788 --- /dev/null +++ b/source/_components/switch.homematic.markdown @@ -0,0 +1,19 @@ +--- +layout: page +title: "Homematic Switch" +description: "Instructions how to integrate Homematic switches within Home Assistant." +date: 2016-06-28 08:30 +sidebar: true +comments: false +sharing: true +footer: true +logo: homematic.png +ha_category: Switch +ha_release: 0.23 +ha_iot_class: "Local Push" +--- + + +The `homematic` switch platform lets you control [Homematic](http://www.homematic.com/) switches through Home Assistant. + +Devices will be configured automatically. Please refer to the [component](/components/homematic/) configuration on how to setup Homematic. \ No newline at end of file From 560444fb0dbfefeb603e3bd738c1935539c6c188 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Wed, 29 Jun 2016 19:27:39 +0200 Subject: [PATCH 41/63] Add template example --- .../sensor.swiss_hydrological_data.markdown | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/source/_components/sensor.swiss_hydrological_data.markdown b/source/_components/sensor.swiss_hydrological_data.markdown index 6fd0c6b5cef..da5ac7f7e9c 100644 --- a/source/_components/sensor.swiss_hydrological_data.markdown +++ b/source/_components/sensor.swiss_hydrological_data.markdown @@ -33,3 +33,16 @@ Configuration variables: - **station** (*Required*): The ID of the measurement point. The hydrological measurings are coming from the [Swiss Federal Office for the Environment (FOEN)](http://www.hydrodaten.admin.ch). + +This sensor contains additional information which an easily accessed by a [template sensor](/components/sensor.template/). + +```yaml +# Example configuration.yaml entry +sensor: + platform: template + sensors: + discharge: + value_template: '{% raw %}{{ states.sensor.aare.attributes.Discharge }}{% endraw %}' + friendly_name: 'Discharge' +``` + From 6ae0e35a35ef9af51bf8f7dbb04cee90e7d8d8d9 Mon Sep 17 00:00:00 2001 From: Daniel Perna Date: Wed, 29 Jun 2016 23:37:05 +0200 Subject: [PATCH 42/63] Update homematic.markdown Added addtitional configuration options + explanation of how to do event-based automations --- source/_components/homematic.markdown | 44 ++++++++++++++++++++++----- 1 file changed, 37 insertions(+), 7 deletions(-) diff --git a/source/_components/homematic.markdown b/source/_components/homematic.markdown index 26e78145fe0..6c472a4e6cc 100644 --- a/source/_components/homematic.markdown +++ b/source/_components/homematic.markdown @@ -14,7 +14,7 @@ featured: true --- -The [Homematic](http://www.homematic.com/) component provides bi-directional communication of Homematic platforms with their real world counterparts. +The [Homematic](http://www.homematic.com/) component provides bi-directional communication of Homematic platforms with their real world counterparts. This implementation does in no way modify your existing setup. Instead it queries your setup for its devices and subscribes to them to send and receive events. Device support is currently available for most of: @@ -26,8 +26,8 @@ Device support is currently available for most of: If you want to see if a specific device you have is supported, head over to the [pyhomematic](https://github.com/danielperna84/pyhomematic/tree/master/pyhomematic/devicetypes) repository and browse through the sourcecode. A dictionary with the device identifiers (e.g. HM-Sec-SC-2) can be found within the relevant modules near the bottom. -We automatically detect all devices we currently support and try to generate useful names. If you enable name-resolving, we try to fetch names from Metadata (Homegear) and the XML-API you may have installed on your CCU. Since this may fail this is disabled by default. -You can manually override the created entities be using Home Assistants [Customizing](https://home-assistant.io/getting-started/customizing-devices/) feature. You probably want to do this, because some devices are not useful within the UI, so you can hide them this way. +We automatically detect all devices we currently support and try to generate useful names. If you enable name-resolving, we try to fetch names from Metadata (Homegear), via JSON-RPC or the XML-API you may have installed on your CCU. Since this may fail this is disabled by default. +You can manually override the created entities be using Home Assistants [Customizing](https://home-assistant.io/getting-started/customizing-devices/) feature. With it you are able to hide entities you don't need to see within the UI. To set up the component, add the following information to your `configuration.yaml` file: @@ -45,11 +45,41 @@ Configuration variables: - **local_port** (*Optional*): Port for connection with Home Assistant. Defaults to 8943. - **remote_ip** (*Required*): IP of CCU/Homegear - **remote_port** (*Required*): Port of Homegear/CCU XML-RPC Server (usually 2001) -- **resolvenames** (*Optional*): Try to fetch device names from HM-CFG-LAN metadata and XML-API on CCU. Defaults to `False`. +- **resolvenames** (*Optional*): Try to fetch device names. Defaults to `False` if not specified. +- **username** (*Optional*): When fetching names via JSON-RPC, you need to specify a user with guest-access to the CCU. +- **password** (*Optional*): When fetching names via JSON-RPC, you need to specify the password of the user you have configured above. - **delay** (*Optional*): Delay fetching of current state per deivce on startup. Used to prevent overloading of the CCU. Defaults to 0.5. To further explain the `resolvenames` option: -We use two approaches to fetch the names of devices. Either one assumes you have properly named your devices in your existing Homematic setup. +We use three approaches to fetch the names of devices. Each assumes you have properly named your devices in your existing Homematic setup. As a general advice: Use ASCII for your devices names. Home Assistant won't include non-ASCII characters in entity-names. -1. Using the metadata devices internally have. When using a HM-CFG-LAN interface, you typically use a configuration software ("HomeMatic-Komponenten konfigurieren" is the name of the shortcut on your desktop by default) to pair and configure your devices. If you have paired devices, you'll see them listed in a table. The leftmost column (Name) is prefilled with default names. You can click such a name and enter whatever you like. But you should stick to ASCII. So rather use _Kueche_ instead of _Küche_. Which also makes sense because the entity-names in HA are ASCII as well. -2. If you use a regular CCU, there is an add-on called the "XML-API". With it installed, you are able to fetch all kinds of information from you CCU using XML-RPC. We can leverage this and fetch the names of devices set within the CCU. For some reason the CCU does NOT save the names to the metadata, so we have to use this workaround. Doing this via JSON-RPC (which all CCUs have) is planned for a future release. +1. The CCU allows to fetch details of the paired devices via JSON-RPC. For this to work you need to add valid credentials to your component-configuration. Guest-access is sufficient to query for device names. +2. If you use a regular CCU, there is an add-on called the "XML-API". With it installed, you are able to fetch all kinds of information from you CCU using XML-RPC. We can leverage this and fetch the names of devices set within the CCU. We don't support authentication with this method. +3. Homegear provides device-names through the metadata devices internally have. When using an HM-CFG-LAN interface, you typically use a configuration software ("HomeMatic-Komponenten konfigurieren" is the name of the shortcut on your desktop by default) to pair and configure your devices. If you have paired devices, you'll see them listed in a table. The leftmost column (Name) is prefilled with default names. You can click such a name and enter whatever you like. + +Resolving names can take some time. So when you start Home Assistant you won't see you devices at first. For a setup with 20+ devices it can take up to a minute until all devices show up in the UI. + +**Devices with buttons** + +Devices with buttons (e.g. HM-Sen-MDIR-WM55, remote controls) may not be fully visible in the UI. This is intended, as buttons don't serve any value here and all they do is trigger events. +As an example: +The HM-Sen-MDIR-WM55 motion detector will be displayed as 2 entities. A motion sensor and a brightness sensor. On top of that we have 2 sets (one set per button) of 4 events: PRESS_SHORT, PRESS_LONG, PRESS_CONT, PRESS_LONG_RELEASE. Be aware, that there are devices which don't provide all of these events. But in general: if you can press it, it at least has PRESS_SHORT. +Here's an example of how to use these events for automations: + +```yaml +automation: + trigger: + platform: event + event_type: homematic.keypress + event_data: + name: Kitchen Switch + channel: 1 + param: PRESS_SHORT + action: + service: switch.turn_on + entity_id: switch.Kitchen_Ambience + +``` + +The channel parameter is equal to the channel of the button you are configuring the automation for. You can view the available channels in the UI you use to pair your devices. +The name depends on if you chose to resolve names or not. If not, it will be the device ID (e.g. LEQ1234657). If you chose to resolve names (and that is successful), it will be the name you have set in your CCU or in the metadata (e.g. "Kitchen Switch"). From bfbc89f1cdcb23de1e5342404851fdf7e71ebddf Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Thu, 30 Jun 2016 08:40:57 +0200 Subject: [PATCH 43/63] Add template sample (#595) * Add template sample * Fix template --- .../_components/sensor.deutsche_bahn.markdown | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/source/_components/sensor.deutsche_bahn.markdown b/source/_components/sensor.deutsche_bahn.markdown index fcb2afbe6c5..3e33b836a3c 100644 --- a/source/_components/sensor.deutsche_bahn.markdown +++ b/source/_components/sensor.deutsche_bahn.markdown @@ -10,11 +10,11 @@ footer: true ha_category: Sensor logo: db.png ha_iot_class: "Local Polling" +ha_release: 0.14 --- -The `deutsche_bahn` sensor will give you the departure time of the next train for the given connection. In case of a delay, the delay is also shown. Additional `ATTRIBUTES` are used to inform about eg. the type of the train, price and if it is ontime. The data are coming from the [bahn.de](http://www.bahn.de/p/view/index.shtml) website. - +The `deutsche_bahn` sensor will give you the departure time of the next train for the given connection. In case of a delay, the delay is also shown. Additional details are used to inform about eg. the type of the train, price, and if it is ontime. To enable this sensor, add the following lines to your `configuration.yaml` file: @@ -29,5 +29,18 @@ sensor: Configuration variables: - **from** (*Required*): The name of the start station. -- **to** (*Required*): The name of the end station. +- **to** (*Required*): The name of the end/destination station. +As already mentioned this sensor contains a lot of information to access those a [template senosr](/components/sensor.template/) can come handy. + +```yaml +# Example configuration.yaml entry +sensor: + platform: template + sensors: + next_departure: + value_template: '{% raw %}{{ states.sensor.munich_to_ulm.attributes.next }}{% endraw %}' + friendly_name: 'Next departure' +``` + +The data is coming from the [bahn.de](http://www.bahn.de/p/view/index.shtml) website. From 87e638fab63b1471fc44f6226b212c75c9febd92 Mon Sep 17 00:00:00 2001 From: rhooper Date: Thu, 30 Jun 2016 02:43:15 -0400 Subject: [PATCH 44/63] add vera lock to the docs (#598) * add vera lock to the docs * add vera lock to the docs (for real) --- source/_components/lock.vera.markdown | 19 +++++++++++++++++++ source/_components/vera.markdown | 2 +- 2 files changed, 20 insertions(+), 1 deletion(-) create mode 100644 source/_components/lock.vera.markdown diff --git a/source/_components/lock.vera.markdown b/source/_components/lock.vera.markdown new file mode 100644 index 00000000000..eebfbca58e3 --- /dev/null +++ b/source/_components/lock.vera.markdown @@ -0,0 +1,19 @@ +--- +layout: page +title: "Vera Lock" +description: "Instructions how to integrate Vera locks into Home Assistant." +date: 2016-06-29 15:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: vera.png +ha_category: Lock +ha_iot_class: "Local Push" +--- + +The `vera` platform allows you to control your [Vera](http://getvera.com/) locks from within Home Assistant. + +They will be automatically discovered if the vera component is loaded. + +For more configuration information see the [Vera component](/components/vera/) documentation. diff --git a/source/_components/vera.markdown b/source/_components/vera.markdown index 0410c725546..aba2fabbb66 100644 --- a/source/_components/vera.markdown +++ b/source/_components/vera.markdown @@ -13,7 +13,7 @@ ha_category: Hub The [Vera](http://getvera.com) hub is a controller mainly connecting to Z-Wave devices. -Switches, Lights (inc Dimmers), Sensors and Binary sensors are supported - and will be automaticaly added when HA connects to your Vera controller. +Switches, Lights (inc Dimmers), Locks, Sensors and Binary sensors are supported - and will be automaticaly added when HA connects to your Vera controller. To use Vera devices in your installation, add the following to your configuration.yaml file using the IP and port number of your Vera controller: From 8a728646a179c62a8db19b5c8d3c40ab47730225 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Fri, 1 Jul 2016 09:12:15 +0200 Subject: [PATCH 45/63] Add source in German --- source/_components/sensor.swiss_hydrological_data.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/sensor.swiss_hydrological_data.markdown b/source/_components/sensor.swiss_hydrological_data.markdown index da5ac7f7e9c..427a2c8ac97 100644 --- a/source/_components/sensor.swiss_hydrological_data.markdown +++ b/source/_components/sensor.swiss_hydrological_data.markdown @@ -32,7 +32,7 @@ Configuration variables: - **name** (*Optional*): Name to use in the frontend. - **station** (*Required*): The ID of the measurement point. -The hydrological measurings are coming from the [Swiss Federal Office for the Environment (FOEN)](http://www.hydrodaten.admin.ch). +The hydrological measurings are coming from the [Swiss Federal Office for the Environment (Bundesamt für Umwelt - Abt. Hydrologie)](http://www.hydrodaten.admin.ch) and are updated almost in real-time. This sensor contains additional information which an easily accessed by a [template sensor](/components/sensor.template/). From 169a6bd0faf1826e8d1ad6193609f0e545782b34 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Fri, 1 Jul 2016 00:52:42 -0700 Subject: [PATCH 46/63] Add draft blog post release 0.23 --- source/_posts/2016-07-01-tbd.markdown | 95 +++++++++++++++++++++++++++ 1 file changed, 95 insertions(+) create mode 100644 source/_posts/2016-07-01-tbd.markdown diff --git a/source/_posts/2016-07-01-tbd.markdown b/source/_posts/2016-07-01-tbd.markdown new file mode 100644 index 00000000000..5b9be674f84 --- /dev/null +++ b/source/_posts/2016-07-01-tbd.markdown @@ -0,0 +1,95 @@ +--- +layout: post +title: "0.23: TBD (rename file too)." +description: "" +date: 2016-07-01 00:31:00 +0000 +date_formatted: "July 1, 2016" +author: Paulus Schoutsen +author_twitter: balloob +comments: true +categories: Release-Notes +--- + +It's time for Home Assistant 0.23 and it's full of goodies. It's also the release that bumps us over a 1000 tests and to 94% test coverage! + +This release brings support for two new ecosystems: [Envisalink] and [Homematic]. We can now also control your TV via HDMI using [HDMI-CEC] (which works on the Pi!) and another cool feature is the [persistent notifications] which allow you to add a notification to the frontend till dismissed. + +[Wink] support has been dramatically improved by migrating to the PubNub API. This allows Wink to push changes from their system to Home Assistant. This change came just in time as somehow our Wink integration was causing a lot of requests to their servers. Thanks to Wink for letting us know so we could solve it instead of blocking us. + +On the config side, you can now [store your passwords][secrets] in your OS keyring or just in a standalone file. We also got a new service to reload the core config so no reboots needed anymore after changing customize settings! + + + +- Support for [Envisalink] added ([alarm control panel][envi-alarm], [binary sensor][envi-binary-sensor], [sensor][envi-sensor]) ([@cinntax]) +- Support for [Homematic] added ([binary sensor][hm-binary-sensor], [light][hm-light], [rollershutter][hm-rollershutter], [sensor][hm-sensor], [switch][hm-switch]) ([@pvizeli], [@danielperna84]) +- New [HDMI-CEC] component ([@happyleavesaoc], [@lukas-hetzenecker]) +- Major rewrite of [Wink] which now pushes changes to Home Assistant ([@w1ll1am23]) +- Core: new add [reload core config service] ([@balloob]) +- Support for [persistent notifications] added ([@fabaff], [@balloob]) +- Garage door: [Z-Wave][zwave-garage-door] support added ([@turbokongen]) +- Rollershutter: [Z-Wave][zwave-rollershutter] support added ([@turbokongen]) +- Media Player: [Sony Bravia TV] now supported ([@aparraga]) +- Sensor: [Fixer.io] now supported ([@fabaff]) +- Garage door: Control any garage door using [Raspberry Pi GPIO pins] ([@kellerza]) +- Sensor: [OpenExchangeRates] support added ([@arsaboo]) +- Notify: [Pushover] now supports target device, sound, url and priority ([@dale3h]) +- Sensor: [Netatmo] now supports wind, battery and radio signals ([@Jypy]) +- Log successful and failed login attemps ([@fabaff]) +- Config: allow [extracting account info][secrets] into OS keyring or separate YAML file ([@kellerza]) +- Core: add option to not filter out duplicate states per entity ([@philipbl]) +- HTTP: Follow Mozilla SSL recommendations ([@danieljkemp], [@AlucardZero]) +- Light: [Z-Wave colorbulb][zwave-light] support added ([@armills]) +- Core: new elevation config option added ([@balloob]) +- Sensor: [OneWire] support extended with support for DS18S20, DS1822, DS1825 and DS28EA00 temperature sensors + support for bus masters which use fuse to mount device tree. ([@Ardetus]) +- Lock: [Vera] now supported ([@rhooper]) +- HTTP: Migrate to CherryPy WSGI server to fix install and runtime problems ([@balloob]) + +Breaking changes: + +- Homematic thermostat configuration has changed and now depends on the new [Homematic] component. + +[@AlucardZero]: https://github.com/AlucardZero/ +[@aparraga]: https://github.com/aparraga/ +[@Ardetus]: https://github.com/Ardetus/ +[@armills]: https://github.com/armills/ +[@arsaboo]: https://github.com/arsaboo/ +[@balloob]: https://github.com/balloob/ +[@cinntax]: https://github.com/cinntax/ +[@dale3h]: https://github.com/dale3h/ +[@danieljkemp]: https://github.com/danieljkemp/ +[@danielperna84]: https://github.com/danielperna84/ +[@fabaff]: https://github.com/fabaff/ +[@happyleavesaoc]: https://github.com/happyleavesaoc/ +[@Jypy]: https://github.com/Jypy/ +[@kellerza]: https://github.com/kellerza/ +[@lukas-hetzenecker]: https://github.com/lukas-hetzenecker/ +[@philipbl]: https://github.com/philipbl/ +[@pvizeli]: https://github.com/pvizeli/ +[@rhooper]: https://github.com/rhooper/ +[@turbokongen]: https://github.com/turbokongen/ +[@w1ll1am23]: https://github.com/w1ll1am23/ +[envi-alarm]: /components/alarm_control_panel.envisalink/ +[envi-binary-sensor]: /components/binary_sensor.envisalink/ +[envi-sensor]: /components/sensor.envisalink/ +[Envisalink]: /components/envisalink/ +[HDMI-CEC]: /components/hdmi_cec/ +[hm-binary-sensor]: /components/binary_sensor.homematic/ +[hm-light]: /components/light.homematic/ +[hm-rollershutter]: /components/rollershutter.homematic/ +[hm-sensor]: /components/sensor.homematic/ +[hm-switch]: /components/switch.homematic/ +[Homematic]: /components/homematic/ +[Netatmo]: /components/sensor.netatmo/ +[OneWire]: /components/sensor.onewire/ +[OpenExchangeRates]: /components/sensor.openexchangerates/ +[Pushover]: /components/notify.pushover/ +[secrets]: /components/XX/ +[Vera]: /components/lock.vera/ +[Wink]: /components/wink/ +[zwave-garage-door]: /components/garage_door.zwave/ +[zwave-light]: /components/light.zwave/ +[zwave-rollershutter]: /components/rollershutter.zwave/ +[Fixer.io]: /components/sensor.fixer/ +[persistent notifications]: /components/persistent_notification/ +[reload core config service]: /getting-started/XX +[Sony Bravia TV]: /components/XX/ From 1e37e59e437d25d0f91bad1a1af55a86b9a50d1a Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Fri, 1 Jul 2016 00:55:31 -0700 Subject: [PATCH 47/63] Fix description persistent notification. --- source/_components/persistent_notification.markdown | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/source/_components/persistent_notification.markdown b/source/_components/persistent_notification.markdown index 3d187e23a98..265dd182ebf 100644 --- a/source/_components/persistent_notification.markdown +++ b/source/_components/persistent_notification.markdown @@ -12,7 +12,6 @@ ha_category: Other ha_release: 0.23 --- -The `persistant_notification` component exposes configuraation errors to the frontend. +The `persistant_notification` can be used to show a message on the frontend that has to be dismissed by the user. The service `persistent_notification/create`. Takes in `message`, `title`, and `notification_id`. If `notification_id` is given, it will overwrite the notification if there already was a notification with that id. - From 05931e484adf4b9335662d8f2214ec6cd4156162 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Fri, 1 Jul 2016 09:59:22 +0200 Subject: [PATCH 48/63] Add new supported devices --- source/_components/sensor.onewire.markdown | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/source/_components/sensor.onewire.markdown b/source/_components/sensor.onewire.markdown index 1acd557c5ad..4f7e70e7309 100644 --- a/source/_components/sensor.onewire.markdown +++ b/source/_components/sensor.onewire.markdown @@ -16,6 +16,12 @@ The `onewire` platform supports sensors which are using the One wire (1-wire) bu Supported devices: - [DS18B20](https://datasheets.maximintegrated.com/en/ds/DS18B20.pdf) +- DS18S20 +- DS1822 +- DS1825 +- DS28EA00 temperature sensors + +There is also support for bus masters which use fuse to mount device tree. To enable One wire sensors in your installation, add the following to your `configuration.yaml` file: From 2dae3a2ea092dd22927b505b87fc023f7c64bdd9 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Fri, 1 Jul 2016 10:14:00 +0200 Subject: [PATCH 49/63] Initial braviatv docs --- source/images/supported_brands/bravia.png | Bin 0 -> 44892 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 source/images/supported_brands/bravia.png diff --git a/source/images/supported_brands/bravia.png b/source/images/supported_brands/bravia.png new file mode 100644 index 0000000000000000000000000000000000000000..f36681a8097034623e1218d48908fe06c6760386 GIT binary patch literal 44892 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%0A!wjFUdNWsJWc%mH@z(@ z+h-r=!)6+s!CV_+Fv_js)nmv5BADc#^lydkZ+4^fSqO27vh*Z5Ii@hDATN*N1p`bH zq;doaqPSSRm~WlD7+)=B5f@L66M)2Gg!I9L7ypUFJGpV{<(!dS!P(ZXsNrmW(gaf| zE2l#Y^-|0J-$|7gkU<9OR8Bp9ZS&_SfiD6tEjbTf*EL`S7bg=4+Cw!Y8{jo`+<$D0 z3yr3BC?$DLh42rch|pK~Ge{Z$<4k(*1=4$S12VxlfeElsUh_}sJ2YjJnbs2G)C)b! zPp5j2V3CkAndk30vSdKm@7MN%&fS5|K$FTTraso>=vZRHfP7+w1--4F8su=IT>ItN{d1S2(W>^+cHvf^DgeGB!K zmG?AS*#Ib^C+Q89w!z{Shaf4}&s~gT(f@%JrcB9>AqncEZd*!Z%j8Ih0L3dIr zEA~&dQvhkILYjFmNh<6jWRtP{#Bbxkkzi(h{6O~g{FiB-EAyS0x~2PfDWTK1rjF!E zxtTGtkuNLzND}qnW_5{u91NeeYF1%1+EgD)VodFo?fv=^1jxHPx+_4ebU)Es(&BUK zA)3O;&6>eydz7)q0O9g4*`b-@&{AF2n>LEc!890WaF@z_LiaV`@_7_{9Z8$5Hs3GH zH#i`>_~bcRj-R&+RYIyIt^HiUvjtdMojKS#^=sOrxtAyGI;vPpAzQma0XRbBB<3ht zI7Z^1<(HO7q*666 zmPq#AqU{B-ar*YT8tw|3#D#bLTlvA6o3cS4*N!VHDr{`!oMBy{J_P@o5C1-qdp#J| zdo=8^GY?qZ;za?YZE_wl5Kd-RM@m_24lumt(PnLVb!{7{bj3OLknNp^)6MFnDLarc z+zCLl{%2tHIMlEC!6B143BYL7U7_y6=_XHXa)@%BviPE_<0gjGY_v6kZvbi4k=Ejh zxgr-yWNq9bAYZ7JO7dNk5}`=HEcR$KFuOMZeHEG6>sIM1|0-5=5%>!lHf2P#ZTyry_)rX7^)uw?{D zn_vDx1?V?CVXfAGPH0PawHTqnPe3PNr2SZC4S0JNq;2m*cua2osbCR91W^CJpG-F&!n-8wp(q*f*Dm{yqvZi0D#<)We^qu#G@Sv3+`qEPD&>hf!KVpUqoCGh@AK| z^9=M6PUGf9EcGiEvxXOQLc$HbM{{1hkma$28KOffZBCeOp9~v5=kH0of+2t<1+e6} zHwMOAzP8suB*2#pg7;_f=b%1{fJGv)mEaBrAw^u`H?5EBecP4?cmFoawNNmrhtYVn z8=xse92iz%1bQm&f!!-g;%A{cKBE*9u!EPRJFszn76PR}opFhMi4_z6uJR?Fw3~Oy_VGKjI&AYG*nZ`rDF0c02Xt@_iv;0; zAI!+r$9oz}@5R7~7N~T;4U91O?oZ`m#~(6_ARN5TDIHY&i{qgGxG)SAMtp3;M^$KQ z3#Apt3Hw@`+2LJD?QMjxLDH6@YSrn<#& zo!sHW(F${bj@RdM+91+`IxM+S1XWCx)cAG%H$Em@>`juo46#xb+wE|Lq;ljCy6N^v zu)kHTRZ;q8R~?9s2WjKu0qQbNgRZ+9a}i=F@~RJ{?P)A__>R^j>zq+vf#s%BMn0uR zuJ!8gBicK`q*1+fYr!Q~6N7buerW)L4x!o(8grMo{Cd2?Zc;r{Walh~vz(M%(gI8*h)TA&3?h%ddhx01rfHA-ErXh&B zTY`)0`I{4`t0=%p@*Nk7QZ@px5zh%0G!i(a+TT-uZ)1JJ!`4_B#ih%8aFjvx^_|3Yp^*1pbd;w#01_my{At#-XW*Uz%C>vz{kieNMt$CU>WzO;k(zAd) zJBI<_b7X%yrXcKyr0@g>Obfx>^5|p@7xBU-z;^cpdoZ*HL&7-5PThGiBB$Vo`gDPV z>?y~q!8#5HRnFV*8ZR>I+{uwVN(hYFr%c%_uAxrjeEN&a!$`=@=p}x=sOXl^-mH&z zr~Zp9C0EqLS2vjT8`}B_xx2ebQ@3vn^JdAt+3*`_XTu`qA_8$(+|pvxRNmfUV1)8% zH=P0~b+{8`E9wc}%ZDN_Cj7~XY1cQ|eT|YpxI$!qS>O63ow~Yf)v~PU8(2)vE59++ z;|A}QkI&~$)sLf!DGn-c)sMC;=Z?9gJY)5X2=egU#SZ~3l zTOJ#ztN5Zd7=}2-O^w%2G`uR)3ZxT7I!C&<1nN|TGzkQxb1Lu&ZKoEmh zpS|TL)Jii`RZB1!rv<>Y*U6mmZ|UL}Y6N3O{$atZpMor!JSLD?6{+@Qzw}l!M)1G; z-bGgn#>9+dY#dOK_jkJu6^Pw)OADmPLshN?iE7DvYbjRWb!&0Q8NqZ>y%U2y^Y=as z)(G;qR^D%6kFB!|_^5W;Pavm8u+MDORrPd@f;{gR`e*a^S1)iDm24?_3t#SX!=Y&& zjUOr%D{TjNT=(g8z@f{&tKSSQMw~)tk*>Za*+yW7xF%WGF+cRtjh&X*6nIh% zwkBPtbPn|d=?VKSE%-w%j{cKR6yns>FC}j!j!uMDuN7BVZ?!~B402?vz5G`FEUH*o zpqbog^}_iHv6;HqMm9DJ69ESM2duXw*|QlFUnvh>x{dl z4u2~kC=dnNdE)3~=#JhZD4cU{!|Gx9v09EZiB?(`FIcSS>IrU`fn|C=S&!tO#eQ)u zS=~9eI&|;7wUqgI-P+`OObm*zJeb5XownrT5lV9;ohP{&yE3W^8EAh4p@^)LT1$tAIxRM-jguiZK z9%Hl)_*fXNwSS2&PYH`KC*O2gO_au=S2HUrZ~c-gL7Xde$g>wR1MxG62AQkm(qa_o zF~z!nPF;n}Aq8Qm$EGfl`J8@J{j>GueY4ePBC?lGy}Pw~W}x1sks_JcIau|@I_K5B z8VRAM9_;EP@ZmK(O5S;hQ#{xiP6F#B>!Z7o&0`_)v1_UfH0QQ|-LdB^@>Vp@~vYQ`9FX<{;U>??WoQgOd{JCSk1UvA?xd2V|GBhdJ+8Y z&4A+7y-8NvU-~|;k*JSb?at(3IS4JjkGEWU6q-F@p+_RCiT>^%sWr0aW*!i3tR`B# zg1PA*7utObniYTA-j6EwySA*W4wnv{i^vt2h2hW)@A3ioSi5rHdO1(HWmV8`Y%`Pn zL^VxuMwM@cjM3KTU1fs;@ygSgv)_JCDm}XNNq^$^qeN$}qR)3fB}`J=zWhVAdTO9H zcVOE1c$HjOnE$-W%@nKGR=#0r%?UB!T?fr3{ zu6Z+$<8ks-&>5oOgyyfVY6XBS6HjXoBp|zoI5hQLgH9JvPNo&6`(*mN!*i3emgGj@ zmR^4G#G!fbifoQC#jFVT^{F$^g;~Eevhc#)vdyHBJa1U6f4yMNo%NP_8vMpdxRe$3 z2YBZJj)#J8gyV_f~f(H0ODLIdw(cE+%4cQ|8rl*4T#KiqquR$Dt z?9v7wo*HX3xXvkWPPY)&_j9S?L-yq|3~hFg1AHe^b+ z-6OCSLCIs@gqDRgGu_7O4#fn1#OZz|~d!s)vOK%7ec zyhUK+S(y}Q?pV$JV=s-EeLf7hCn@98Q|qGqdjjcf_98S7JzL&g=U1jE^um4SL1guJ zHQ3diG$YQ?p<6d?clSuuj;1C*tO3=Yp<1+B!zItvoRpB@{6l}?#ZbZt3_qBNFwcREdlIvUqd5!}N+PpNy;JM^Kd;%JJqLV~uBSN;Kqy33+| zU52ab{8(b>l>Fm{{@r#&q#_Qmrb%m7r$RN?r5h8D>%~U=v6aqcJFnrhV3iM{CRwbh)|t9eP?p+T*Z=P@coBHW=%BLIX$$dwnV7v zCsD<^;eY<{DgS1#=HkyWl`3uKVk>K-Rr0}KUybF?X7P;pf+|+J=Be*mvaHO#nJRhP zYEHXUBH2dbymx`C=L!YgUB(I>tMU+5TgfJ;OoTdeSpR|cA{oV%uyO#BT#qR7_$dX_ zbt0w^5ii$J*o?T@%<`myKqC(OyAJe`TQvs^|9lI1Gsei~A-OVnLtTB{$2NfHGJ8D% z&p>v(nIA&PdQB)?`)wOQ%^})Ez(c+LBgIma%1z$ekE*5e(EV;MGKEvJs$3RJjB(5D zHJas8AphhzEM+gi9bn*ibi>7Ks4fV9zFOgHalqTz{W44ip!>o*t1$;sol6O%xWxms zJZl0fY>+XnfWR1Sw-hos-vC%nAQsl(H+ zru_86$#J6OKK<(H0bY#(Z$;nSHKyT&=7I)-8-1@8rk$6Ux6IVJ9HFJBuF>$zKw9bc z8*dl-NTP}sI(w&Zl1W|tdAV;C;&x6^Szm88*EomqUJOF5%`|0l`ApiapjD{IP7=IN zkOVgLobT|H%Gyic+yyoz?;d3>|KNM}jiVgu+9!h+>PB<&L)F&bQ5jlfUZiWPG9|vH z2z-jrVx-*GjQTNs!@tzHBF1GaVUjiPo9vW?0i0pHtdB{i>JkjK`g|v-OMzsRcgE!N9MKVX_xS4BH zcEZM>WQuP^=$-@9sU&)IY085N)l70)IKWzkG#y?3lY?+Xuuu52OmGGTk&OGq!YgOs8&O#{8Ai+ zavXx@^8WS5hah|`+{hUzNZLC3VrkILSd>P6=~>q}gr>1v3i)PgfrL6IM4rxW&tx7J zxVo|>zph906BeedCe9&U2ToxAE*fLk$=+A3uw;B22d4U zVycqogys*`Ry>aS-C&LN*I&OZR^cb@#^$B_$$f@sAeI)R9336Yt94&V2n0Vxs9h-g znNNP5vnZ&gw$1o4xXy=P?Wv#KU5$~fh@Q_JthJ{6*bI|1C-3-(zy)l{nKxt%U^La! z+@;j_mdsgx%qa2|nYQ7J;xatuz^TkEo8jpXHr|O{YaS_F>#y)S{Y!Q=ac5cW8ea%( zT!~;Og0KxJ{U0bd<2A0%RhABVjW~tq3BXA~n$-&Ousv5Sq3Xzfm4UO!;7_NDm_pd*pwVGFLbv%* zJTpSA)OeW+4){Ns0Fu;CLWZDR<2Xju(x>K%B&cyFaiTuRKbGgQ3_P&WNH5R;VBHNu zc_Uos=dYqt-5m?95_JF6)F@f@xSETvv$KZt80twd3xGuavxMkxSGIjZ{hF+f*jKND zr<)3-hYt;f(sjqxSTjJqukM-;;k@*=a;nQ+9#7YB8Q(DpZ*$Tm(JAY#{`5`o^tU~` z?R2YWJVt+2&M%&82kGM&+g6pJX?CnnM~BcCdA|s;dE?M*t$Cw8jpc~K={+?dpoDYm z6kGe{|2;=v+U?;u#!0+=O=;tB@O)(_6;Mq^qaLxwbLd2?KdkNa@FcWcs?r!uCPiH@cvl%-LFel-AHgtA}9mMNn@+k zf2KxzE%;7h!CQixiF?siSbgHZ2eWdE{y$7zcRbbY`#-iKqlA*k$fhE4WFIS8nVAin z5C_?-vNAGKWOVFZMsm!CjFL^V8ph!W*(3a}kG|jE@Av%oyq@PcpL2ii`?}um_w~N7 z>xKIk#fy!~dQWZ4^&fBpi_(27h-{St9*Z}$kzT=iOmR4yvFtT~_{QykHCHpWoZ->U zovK&|^WT1!I;V1Q>s6}pSBx_5xy7fA0garobvc9X?8-r*45n;Rj=&0%+~~4~Ox3D1 zR4#UQ$?&RbuNf)WmCAf$jI_KxrqB=#X`o6s54E+ck~ni@=;W`=Q!Vy_`}W5eWle`y z0!8vSSx`2_CluV9ma?=P036n7j~v+*z9!eAXmCmUwen5Y(+@eTn{HolqrQ)Kc43-L zg19f~lTq^-9r`8XaD^M;2eMPI?RbYq*uU7!sId&mzwTY7a@QN6(v9@T6yYah(3l0t z9pR`h;DI0TVZO&;{}zk{W<^arZmc(>Y26?C`uNqaK}8Ja?$TvfyCM@G9eHEyLB@tKLd^&HuZ`UqW28UvxzPD_ zSytt*x`kBdt5*|7%=%76MA*v}A>^;_0}1`vR)Huv;Etj(FW=)s{ym5c`Go#kvs|&o z0k*gM`lUv3CVY&HEiD`M)zU4p!RC=z*Y)aO#lK?yl$)u+>aZNvdGPZVG4@NFw)SwO z+C|z8GS=z^`$Wul5iB73GmjrV${f5?>Rl}`YrsQ8)2;8Jk37Ta+*`8`P=kPMW)&_{ zFT9RzOEAs8OW(V_d*$W07_+gNo$lff2r4bJPZjn|27IoIP-k4H54C_>$T^-&jC$sm zyUdK%>&*=RXrUT5f9zW8zY)NU^?aW4LJ?{f>@!chMvXgIJm%$6UlhT%w3HFcs(^D9 zA*i6OR~YFJvv%m)Jz#P(YF{9db)JE-Uv{K`XO%# zA*c#-YN*A-Ab)sbo*0DP5X&-zn6Wk!QaZ?(MStjbC)7uPIoxcrU4BuX6l+g1%>VM@V#mbd<&EB^ zF>7UP^2E*Q>;$ESyyu`LZ?tDp1Z@YG~DMa zWn6RJ8;f~WBdMoJ)SAVZ0SILYP8y$2nIhAkP$eF|@@6oi_p0vFvy>dPkMr^nDrfKd zA;#U8o&a2Xk02ZLyB4HT^hKIc7xu?C(N9E&$-W1|Tlf=vK?LDNJ=|I(o3TpX(cdkC zT_R5XalH9`@ZD0cFKb|G^m|N_P3|>^Hx4wd}e-0K_0 zVK@5Gp%MJEskNhYs9ktG#`#0<&#`4jA9Zwgo@a_5Bzs=r-#n|i)90GR1t5{@LVnRE z8Y8bq8@}hrlwFC02bx)2w5TcCZ+TMa1^z@Qf%m&=Yj&G#bc*Pf1@Ul)Xo$JfSoaxG zg7>p&cbVMbQ4;l&O-*H@$2H4~q~@$%(Y>%f$;KvQ=oRilwc0Q!a-Q&s%#5Ud1bsiS z1gkhZ6T-jyYfW6DG$f+H42~OR%Lwd6-lD%2O{i3y_cT*ejD%eF*&Z(x2N}cleBJdw z@U|nV2MXe6epqh8_T5<%xpZSo*br4c4y&9UHrOWw{N67})GmTyj zs@fmStAFLG^o&2yW+>o%@I^QRKSBeCpb;76L8MGkPg+;z>bF5SRd*`o6N*!%&(0-8 zmsPn$y!}z@a0KuwJ=Isz8-*YVsutgTGl9mjkSn@LH0U>e*oanUD-kM?LiDuL4$qVV zk9X4-{j_3paqHixuM6nf5t;DpYj~rDk?q{rZB35KO?eVE?suiEMvVShFo6$MPud*p zX{98Pl{R;5ZP6@T_hI4ajdWyD#TZCjUbzsOspU2M{OJ%frQi+XjWUwT*-C{9T0F;+ zbSWQQNjL62LB^1?c5d^V`>Rb- z(39k1?atynI4MwRhOc~l+anWmaT`ZaL4ADN##Ha!M)9!`zTt~IanU$}0J_*k8%JYk z%^GzR^}eq)u8x7P%W#B_dasE2(aP?%IYH0oY%dDOZ@`0+9!oYeSfxRDhxt5yLFWCr z%g*Ua?M&ov8>VnIETKatH6LzNFZvJ>HH;W7x?`SPO>)JhpYp%)DN%!SGz1C!iyJT}ar(|I|bnl&@#AqEH2+Cmczhh{-U7s65sMFfG zzN1t%MYgxd*iZg&M2#v)VVA#7vT-^zL~e33;zrdso{5zANz@ z=<##=3T`sN&pkWdkBn~@+%enj*;k?Yp4FFPwXeW>)ihl9^;)EPZtC3Q3c(`(Y}b&O zTiDl+UZe*Hw&8QN%m6~}@Bz;)QRaVEq<9XNY!@|XQiHwv@(UzuVjA4D>FmPl8T-~8tDw3R7>Luzzi8yXo<8tU)y8sC+Y zdf+UfvPdqGOXFNoFP|9%A|3DZD@JrP5mECmV+n?hGo=)W_M!iiQ)vG*D7^sgtyCR@ zW{4#a4NHZ5uV18ACE4{R#=hnkJz;sVeiR*6fxyFlt!R|9Zj14!GH=&f!X2^XD{(ck zT)50Cd$;yQ5)i%>pJ0_zYdr^cijNKQCI#q6>zGp_NtExyTam#d4T996*{EwWKlKdC zNt(j@E;EZ*R8TcT3b@y%D(ZMr&$&`N;_cobP7c8vhGjJ__GxVvPy)D_-b2KsS7~pW zo?6Sq_X3TKwi=DJe?hCf6yEEsy;Xw>i1yPBxj8pti4oTzBZ+Iq5@(k8FsdF2cVR%pE_#1XMN%TD1>p&mvva zy}Rc+yte0EXyRMw$;e1DpnCf%`C`RF7KOL2?MlgF)R`{b1hhJ43Wpiqi^l1%hdF=m%gA4riV2B`n0^uKLDswD zJl*KXFb_4J8<6~T5#qJpwjAQWcMTHVS;*m!kCQBMJth$0=(g5w_(rtpUZi%RSfU?f zuR4eMGP}KRq+O^>4Qhod&0F<#p_Cis2LQmu-rqTAX$~Yip`otBcciUwgWNt z>3?W2rre(0D83WI=+U=d1|=w=q?8Us>^@g@&~23mHC@N79oHxGQ2}kh!it7M{L=d= z{=VSi@{6)EXt9UIX*3sZY(|F{gcnXfuR&dMWLL7-m}(!^7dy$p5!8*o4?)t08`azB zaIY1vqa=BflX%=-r8j{jp>mHVeL7_>|L|#*B>6=e>xGx^^x@@Zx7vlonL&k&*HXV+ z$(JuyV*2AleWlAw&18w{zbCBZ5>>|DLM*tFz@q#-NR*|a{D~+(DA}}nVqi%)qBra^ zrZ|=zpXPLP312IwhM`eCK4d0^CG-o&CwoU$D(LUZmHoU0r3X_xUH5^rj)wf}P)-9Q z{u#kJNkwM4R=~2sRKAeUfWKW(#MXMM?O4x%_+2VQ;G43gbRmoHAp2GHrU%N1NQENl za%f8Qv4CRp)de6k&phe$$_phw%9nSGnR@HiGhKQSDmC!_55j8v3Tif?wumYRT`=N? z4(r44QgK47>919Nv@HXn>wPU8i3F`vIUDh9+4kh)N{bgJRt8D8PZ4A3R6P1v5K342JH5Vp+t0;djA@{)p3tc>wI_b4+c*N zr7=?U1b&lWA>oOjILhaZnyAYy_-w7`5(#eAk*0>6RtObUvid}p#>5B5NYAvMKYvrc zab|biBV*;c9FY}gsY~;|DcN9Rp6Ih*3U4d)d*^MnkFjR0x{Dov7eNuiD&42q);JF3 zP3m>nx>~s3-#6S-TM@+u^=1OkeKu_qW9PpEU+rJxV-^WK6nvA&jAmILs-6BkLa%kz z+U9NgwW12#g-bEVj7_|;s(^4toh%gd`HE@;C$B+NiCFX--*#m9o9lUqw+{klVTBA< zD2t=QW%fDkw1Fg_E?Sd1D#_uC$@LR$mP6-`v2x59G zcD?4gOs(_1fu%)u-|yYZkSzj774kE=qTmJoed4KRWP$Bb(M(HB)KLOW|7$>S?sw1iu_vQGr$&-)k;hJF_xl*U|NAEV;9eD}qS#mT}w4@#Hn z)liP8j#$Ur{z#z&^*JU#Fw|2`t-tn&LjYNsn!$Uwpy4%Dl1HrhRVv42PyjWxiv@h` zwAZ}hu)xo9VSC$Fn$4PCE!rMMlD{a0vH<1sg(?)+3U7_#!y@>9@HEtPNjvZuo}!W} z&bv#-{(nkqZye1J49)!aw_&ZQQ)Id_WBX}*M>8hVYfNT|F<*xeW=$#8-`)O9OkBhawE75_k6h;$VyCn4T{l0C0lGxC zvKot)$gmB&qTSh0GsC{x5V{*5K%0bWu`BxlHteY&E|9+L#Pd?NMBaKsa^&wbPj%af zyj@oj)Ns2pP}CJrS}@1EDi`e24!dUNt6v1{Iqyq_DtYZ9?Ts(h<@dKn$TI$ZZ;Wdx zBX2kI+W-9d6Sj8lFVUA_)bvPLDb(%iRl;UOVov#-<{aVNe2&_Hnzf}_g>?S54oL6z z7D`Draq|0rHx!rd5b1n{w-;l-vpC+oCoR<_pm8?p2PKLZR1!k^!PznHerAYh0fhlN zdLhM7IsTEl_4(?1UA?{fR%=4&3oG)MAMx4ZzV!mW`JNO&V+(&$5+Bl?`d5XcM)L{A zo0V{XTg^EryOHN|AXOo2m)pA&jz2cloD`R)VS`=OU&845$TDS;0IXGITlVOEv{!8| zEZ2&^&tJSyJCpJ3teXHTWBe*L$-?pEiGl||JeoMjCn^@s_*SW}o+Li}Lih)j2qh{W zzt;QaVlFdWSt-=&FVdZ_1`J^e@z+$%IwY}AsFdy2OCi8Lh?hjeNH8gbhqupebpBID?OPV5p@1pibh=OxoSkM?~^8J&wByw$(xo!uWsd#=4&Egn3BxqciNfNpIMK8!)>Wg&xaSApcmrihG8jFQHr-*^OP%P$HN zg~>AChVhqQvMQydT;y}p&LyPSiqrh6EsTa*vubA19F)VWgp#kQ6u3Z!(Up+0K+wgR zEdm+^F*UDn^y&orAR~6+7#5?mxCI-)u=?Ysn#z(VG4}KtS%I^a#JzDhkzjrI!~gXHP|Lmd z<`QU^P@0>#eVnuO*PO4B(`aC7E9%p9M^r}^qQfJo)V~$aeR`P^$->4t&m`7<2Ty{7 z1c#LFbJw?yaN!=D^S&_$qQ>vOF@G1)2HTK0veXW{PJ_NCQN`ED)82%naZ`kLLZ2q= z47DZ6+f1@c4r2p0(#Lm87V-5x3jOSJpTD?}E?Etpk>z0`RL^MXY{A28$I52stVFjA zFy!p!Z2Uu9Ssp_t>&hKuZ&W$^{sBx*eMM5QwjF=w?5cm3P4kGJ*Y! zGlJ&bI)(7YgWD`1y(iksT-#d=#}{|IEh>4PeRRj+4tZbgNw;lD(uz@tA>dKzlpe()hzUuTfqwkJH$}3`l=lSN&gU+blz*sLNC4P=4H0?tD zW6{IAUms+oENmD@9xY-f_e0IUT4>8UL9&P8o~f;N`}<(v<7OtAy{Q^lm%3ImNZV8a zmt35dEa1=Wl?}A=ZyZotaghDNRp=kRoZr4YsCq74yvN&w4;yu`XeB!C#;AmEe1Vr7 zc-Ww|8d-BD@NX5*u%NdTHlXPuxp}Ps5!MS%k}oDTHXhC5pp0*M+`RjEjwN8i>L$BV zl8X4rI}~nBo@%OKqmggBXct~|b17|YXKn&WgQJ@E+F_JHlNP^>8Jj_pk;ktMeVNcq z*R`H!K%+i?RU!AKylK6mdBxfxU2H<`L7bN6sLdv?Vn6-2`(+twq-GDV_xW%O#XJ(J%%Oj#{W zUHkXT*5vuF)U<4ce7dl7npjpFBXFg*s_9r~%{Jjt>efj7<1YG>e`a=_!Ry48RsMQ` zKucfD$e2!{W>8)oYo95Hy^uP5$3pQ>6eq_k7yCF`y2FDOR?txQtkOY3B#cr%3Oe#@oMc&P2jR)LSA2(6XToku}|^KB-Qs^v$k zFU8x}d1AtGwMPUxg8Q3}mEvDi>#44Obv#xr$m9o7?HQy@UR)~PtB~4x=OA!=c<%^= z{5yOLRRq+pLS&GVHNZv7QcVfqvpuK(L%sMdkQI~9wJhi8pr@@zHBXq%5+4*fbm7o<&BF~>x0iJaAN&$4dGLz^eQzRw-XxsSGYs5+Ye`~D zsHg@2nFHvspNR|JINphG{M=~SyGta*hffb!x;lQ)>`et&eEw}VW&?0^u%X=!Y(}AY z5B8pL=Tnv!pRd~~;2oQ1N2tI16Jukk8{3c-ToI~Uh(>Km!;U+&e*fmZujnv* zHY?rkiQa94CtxeRm9998P_I;-%0cS!GpWzgj-Xa48fV6CSirl57_ocU{}cXwlv2&W zyQO8Q9vqJq%(lEH_{5U>Mk$m;*Z+yac+Rm!j2ILZpRJGN_1oawqdk?cGE42)zBW+7k5&gZNAl4DXey_TtC* zgQ{`TZ2|wZWh@dJ;@7=@ZggsCflk=>rh6rW;w>6LbGuaW&8NLm6|>GF8R$iQR4fE9 zWzJcvrYws0Vm~ohBY-7-B)joYEZgQD=-O$NzX1X3;#%bP#u>r@efG?ZfgD+E81D2n z!6ec9HyU6y=)_F%)^SjW*1@-~L@%<02aX}8LSX;F^HqR8kZr+YrpEJFRek^W%KTML zM7=Pqr4z8!XK1-Ic%(l7L0V+X=RxR?*(}>}hQvjMi2c`#AN+_39tXDry$}A2L=bot z`J?9)mkyzVoW^b{k`u3}xYl`6^(Z|yU-8Y^lX);ICn@RGfe*#oxm*r%bbVJqxHxzu z$yuvMhD6q7j4_(_kw9G9jE^NHUGc@~JYELI9*3kWxi~IgU|v+4b&cVlxwct@K~(T6 z$k};DZhA?;YMu*6krz!#RgOC6$bOW*0gveIU^u;?ZucUEWb=h*1O=mimcQcGEWEEV z$pgC!8$bYwf3@FGW(9ofYWbS1YbjEtVIWr{nXiB~Nv*v*B>|2`ifc`Qd@^QzMF_8iux-Im1Taj+Q@PMU5J>)V?q9M?j3QNtrqr7fBpZzP)TBLi7niR7 z$DRk5bNKzz%L3p`zhwvj1ZuIy~1{dww?@ssp*r1IW^( zehOgizA9{LchlU*94UeYJ41+kblO!*1KBqY?Ajl}+Oht}J3!1aYLu3)XynHv(#P*Gt6{ZUBNwLkU+d5W3kt^pWL} zNDUBQL|J!3imQVK+JM4=7!pRm;kJ#sR(khNMB@?bQ2&!fs<$=d+jYS9b^V*6R&d>p z!A4KtS|<3RXE;TOr3GSH9aHQ-vb*)y40Rpxezc5%S{v+1De}Db?yf$7wa4`mX(J^< z{KMpLS^z)MxmSV@;iv+qZ?Y%G4r}C5n|@GF8$>@pmAkcQc^~vUB6Y=45SOxKFAz`- zXz9c+i2tkL&cM0)L!quvZul;M7GD7iFHYDoU16{WrAuTcj? zF9vbuF8W3Ed_wDkpal_WEA*Ts8Y7be_n2DNf#^ZjYDbjkIgGwR4a(j$9IO30`EV`` zIIAlPm>=$EDU`=*1Ud$ZZXAMVyp$}vI1rrUS5@|XXMpp~2s(^;eDv#H)#*7?FZcF8 zpCD%sV|cm4!>rHcI|S|2iPNnfCO*`*u@@v|)H4QsvmCY;dpbkD-H;#QW@uW;v2RuG z+g~SJpp(V3&+)T#=s%?_G0j*Tjkj8$B5jCs$^66g1%pHEcL<2Ot(yH>?8J?GENzfUpxPF zM}67pM7&s2!TvEMjDJv6@ivhXu0rSuDh&k4{-25J=pN1--kihy;N^Mn;;AC zfR-=&*%)dMC_8)6o45Fogh)6!OwrfBGb{8pv5MSV>+bFrFBOldC^|{bK|Yx_$gY}U zCFt99hh4G14AzC5+MyJY~~Ec;J*4w*Tn$(n3r>6s8iz;}=^G9Q{9*-sjO1c93xs9^m%K$fNIOp& zhxIvh7JW0{@1nK^W-U?NIBSP#SE!oWVXxkOMZ^msi!!I1t;cdn7QZC6rS9o{fJ^QZ z%xTL{T8eg8#U(!AJf`zSm)2B@Cw^Q-e&7hAIixGL8cA{(X8oP;!HE#t}q@ zr9vhyoVcEPhifKr0XV~z-!~2BV*M7I_QTa@DP&YuDFd5uYQGSBMV_QyG3n+*Pc_=@ zm1c0PMpTrXjGZV9Z5U*i{E%sS;n{T0+x{?!k!C1i2;trTp@fr9DO{-HdtW6cc-v;5 zmVKmZC!`$y5dMS_G2%g1)Njz(f9QkL)9$BF1{J{-gf<10WT%s>PoeOb?{PR`5~|U* z7K-ifkg8S6_sYRTf8uLmZ}7MRQnC?TmPDx`Cw8@>g4j5S4PA4z~u<#AGnGU+IOd$(x3sy@4`qJ@b};$VH_ldnf8SQjSkSekl$bfU@mUOwu^^W@j^egxq1sD=2xjMdypzXXut5a4Y0y=pZJ&9d z7H+--88M|`6o<0{(c!tU>#poOzEVy6S*beqcmpeJdv`w>7p{yI>QD8N`YDLfq3W7f z_}&;g?5J?{#H-ESs6Zs-^BV!|y=(;kg|6EeJbhPq@U#e(M&#H}jl|#AIM-Z-YJU8E z-eK2`cgXoDg314-unLsv68}==-+a~K>=D&-?nHi7{Yz&bGb;hC^URd7M686fPXW4m zbA>g17J@|Gcj=EU5Z6BkJLqX=CSEC+7eel1(ku$%VcbGQS&@NYO-xKo?rNb}lzx%U z>!W%X3hj*~)2;Nt!0ieF*RxiI%$S54-e1HGi$X%~-%`yEM5!lZeZ9bm>l4(5@QK80 z5F8(%!P)V_8mZ@&aN}H;bba`U6WZhUYAe>?EFTZ|38AVE%ZKRAGU#<~{}2K961 zQqb*mhD4HQ0}u-sY{uS(QN>Be)}K)5!?%P|%jq^|{l&sTZpAfM4<5lt$RBU`2I1%q z5@P=aHE!!aGh-nb0eRiR0aMmJa6p1sf8ZBo&%X&S32_Tt@c9%6j_$Hb?JVm)a~HlWD0G}>I6i!n zoiU$wv`8K;H5D8Yq5Vrv>|QzwE}LMmUKf_O9^Gn2Qubkzb+`s&{YOD={}Vu|hAh+4 zj7O(x$(uEZ%rvA8cmv@^aHmnDIv!NeQ{=y7$i1&*WhR=`7Z8?=FZ%BttjpHFz$|(7 zQ8W9=lX&XTqzSiP88dx409I8@QYL&1J<<#%5D;TLDTfh{sOP6ZVlZpNJ9Kb?@uRr7 zAeMN*Bdm;!GnEgNenf)M*VgGm)g;7_8!5iA_=HgP4=5eT%_ZE>dZp*M`WjmrdL-2a zNkPBpkCc)%$6Uf;+ecyHyv>=oab+eKWOpsBr;bRpM0k?wi2*m2B7*=I{y2Yq#yu19 zA|i0QRtZM3C}L)u6K8xr0Tr%=Yi{(RK>(t|T}llEcL$HBKi%2D12yI5@&+f$!-Hy$ z1Cs^Zd&1n&H8&Sc5qtTCQwDigWt)gJrHky4_CC$r-d~VceAO!j?$HGAzoL7^89xNL zM`Vz_zYd9`2i72>(sPAvl zp+`kR;b5zMu#SP+<{;zmrD)}H(hraj?^C-}yKr({xv(Ef)1f;xa{-4nlavXVgR5!( zzU*Srg_~mxEQXiiNeWmrtoDAR0&k4noZJF)$;cpMzdp}Y%~k|83LKs+x)ma+rWG{J zpx<1wzi+TNc8zcxDeXEsrILUWqdhrUPI*5uB;s0}exvVk1U37ek|;U$GrQ}hDCe9C z2z(JmE0RPyA+GHO#BC1mhwZ=jFEITlj$f84t#Nm_d2nHckpAByUm?EzH>fLTOrT`` zc#tWq4Gr~?!iUC3#8?Psun7Fjun70SJ124(sitjUv~69o$gVjy&}d?4O2-R=D7tk_ zy}!o$=iuw03I$bz;r!GuX8xGfzFuFU6y{j)CXl3qx*ifXI`2h{@ZkEA46H!U{T0-EaMRx6ceF$CitXfc!izI_hJFfk$6RN*N#yLX1+B(7Y z>NVpdM~=v{G)H(+F}CnLKzQCo;88ug5q##AHMQ5$^K-5~7Kl90N zT{av;j>;?3|J=%>IWS3FjQ#Z&T%;wZ-V7eXG&s8S19?at6k#U!y*}(|Z;>B9U7Qmhwc=gC9*O_e9Td_N^QQF$wYeiMo%SLBxDc+}GS`Bhlf4hd%;Q zaP8?&_Z@E5b~EGWA!Gz*Vni(Uy1`<(Eum173wJN(1`qv@AJ(|5M@vBGjskXe3VBgO zFhH}*MCyaaTiEo2%tu7GWD(!vqvx6WTeQ8qwr6>}h21W4YD{1`aUM@H%xbOG$glgH z&4X(>L7nJZasa=nbO9jUFR-1O0pGXK$%Reg+cjle$x(1Om2lhtK=KxTI)v);E5JMV0cGE>GhGftR{qT^wPf z%Stk~c|!Q^SBZ+2X0Px*_!<%MH1nc+I50r|uPNgtS15gw7{B}&KCI$QzPnAw#4TRj z*73O0TU}D7YPvWT-5E(@#M4KcWpy9XKVKbG;>9W!2$+X?#~BzsA3%;q@hmSg0Ay^^ znS?5>DJ$}hTx1;B8Q6MON{>YpzMT;(6RBH2 zo|{fEp)GTxwv0*sefGd$6)BX2*$v&Q#P#TPTSfqk)JJraA-j9bYZT2X$rV?l&57gC z>y&m?RAu%XS^8|Bw-pHJx+bwT&WbcRyEUT1^gV69wwDfZ$v21ax7(8u+jRGutI92(g!A-k0{twN8xS|s_=TX|^)h!Ez(mh%f;cxTkPI&hDQ zqS+DlfGKC_+LY2TIQu6-hdD>?2RE!Ma&`H6e%6^e-89q>{H`xA=VdJ{lQr{$Wic*cDzoktTaQNdcAONxqr`m;TXUZ)pu-1F%2z>E?#w@ zBc&BUPGq3JF86(v_m=hceU|#e$Q2s0fA=N8k9O6)(+M>Rw-@bi77}Di*$V0of=}Me zb(Rki91kOp+C#@J`7`%~P}MH~m-doQgS&?09Ec+r8W(+{h%K(w=m;<&RYa>kxSdy! z_jijNxzy>mmL&*ieXFraDWt~4o8fWfzw2AN8wcB3fJ*(zIBEMAzXi+*eVWj6!O35P z?6yobM_8hH0n<|%LV++OLb&aQ_S6-y1xqqoPcoy8z=8VZ!VP)1^d%tQca5`aPy+Tn5y5GZ)SN7dsG&!S6bZ9Q1B=mC@~ z7<`zVX?P~TW|ZTXv-n~VzJbeE7@}(Q_mi+OuaMUEgTHm~IFtOr%1x3C;m;UF-G*F% zwf(;;I9o!Tfw!@dLB;xg$`($RAMOg9m5La+=E#P)tx}~lnGgET2QN`nYsW}YEY{) zXWV&lwI`G0&}CL0m2$o2YrGD= ztWJ#f{rf>)Yi&+Yq%ryA_p~ma+K&Z=n;V=LB!;698Y!u^rq@v8F5su&1tSa(85_Yw zI>34P7Aljt9@GYIi^GqwJ57Bm`O|syNMOrZshqg2*F#7?kT|J(xRWisXZ9z?$HFyC zhrAp2{TJslo<02d{V)}kUr|xrCq0K>kJqeI3^%MLhAN!AdJ1On&$UpzdOTT|+rsAG z*Iuss)1f+8pvS6^fl+9-?%{72Y$X)bQC6P3%oB6Yz;n#7kBo~SGySTrxN#=VCG!U5 z!?L<gcPrBP~5g8ZJm_zrV@Z+1Xh=wS5cQDpNTqH>lCTsbd# z=l4uzkL&c_D`-B(Y8}ZkyRfowyoaLs?d7L=6NyQms0d?!LkX1D;Uwtb#(T5TmaC-C zB%woP`%zcuZhLRxq=Ro-j#;+MyQe_~MxvPv=^?DuSEexSLEO-gC9X_yy9G6N{EdP$YdMPVBOkO9Sr=+t&p%A69CV8$)7Z zVrx6r7y6npOCyRpUvjX`cE!d7|q2v@5yDV?oZj#jpe7<+E${$ac4H2ne zu5rn@x!;1&1sFTX9cyvPqOcy;-KiCwzHvqJ=vWV1orjA{tdPOEC48hy5;QPx6(X$NI!QFt@KV9pUX%@h*u?M@vilm}4n? z-=o+Srt>~c9pkmxGYH}l-`|JM$g3`afq|LciG92xsx|k|-8pIKZiA)VcD1?WW&mfn zQGO_6re}zG;`vLSmjfM zsvXyogd25Bjbx0|~DC8CFC> z2ewTYj#oNr#;7hs+~rKA8ht5_rmd&YH@=LjZ`IFz>^L+_FL`*T@vBcwjwd_{Lz$Ub z>EL^$-&;Y(z17xzBbd7i0}&S&vF?6T3=jKax3(-20$^OT=ls*PcKbYIs+)I^XDUn% z`5Xyz8;HW2@0?*A#8uCJ4Q&qx9SF2D$)m0b22pg1)1NzG1~?(P-6b_GZ6};S_r2CM zsGl)2C28npzlk08PYH~mkdWq?l=ziBeLu}SaS8QIur^(=9a?vKiHV&H`S~m@(@!@q8YlDft5d#E zvSzkWe5q-*Z^c0~-)G)paoQ-O+g@H?Z?6u)3TI?CTxKGtE6d39*1(HF=f4I^vzI|# z88E%*sos}w9%F{CH8g)3$b$o)78#6l9?b6OHRP)mggHMk*>Td-+8XkY7EIWSwG0Ja zW6PT7Ajrk@CgNS=V%t(bH9`yLEcxl)RY#3|Svb%EHyr!=%T;0dYLwMCv+aJnQ4jh( z8vUx9*j>O));9d?v{v@N$2S2RwCyuCcNyL82rWf5@!QZ@Ke+J^@7AKmwjR6>Jx#n+ z)6X}*Vjs~dE;=T6L|#ZgHP$2KF#->{iW_j06|O|WlgOWFgZh|jZQUUYKRXlTVdQCu zCwFg=(Mug|?Y(0fd^V$%PZrFE&!SM5B4Aw;azu~@rd!8*jwpzsZMQ6biKa_H*g~U8 zyVxNO4&SZgLBF8K(+qCe!v5HEs5Yff8#yqm04gQ$hNX8GsIyw&IK#-v@o)eMRU6pV%t~41Uw8*DK{S@B0mS) zvHAh~Lvn-pU{Tc3``5SR*VZK#_8veAcgnu)Rh9#7Fqw4zeuH_u?+A1yy}iA)34|#RB~lfw^3C}?Q`B-aN+FBIxOm^-f$xQtnR@HY zI2Y7Q$zF*7rDbu6dL3I1Gk1$}QaM^fY_;icA7maCH<`CEy>;*{))9}%&V-DJ1ruJg zT4vHqJRV{lCzp=VZF~!b=F^_G9V-L!J6EEK`^Z#VO2gc1!~DYzuusm2H5buoNiTqJ$AY-aF7{Ki2BB1UIP^__-wGK> z2M)>gguUxnwV=%z91W_Zp=>LtZKa{QVday_NE(M(l?`SY>5bQsyVzMhv!@2XsycR9 za%$uL0)(~mU3_<5Q405{LGR?dZ-$tk?(d!KUyUwzK7vA>`tbRc_%B$duC080-MHf} zjL(kG^(|f-f*DW?CL-SQcHm7G#*>932+lC=`SX%D^GM%8&0AiYaIC9S@@Drw%u8s{ z^oS^a#6KCmATFLbQzsk#(Z9CZ5Mp<>@$_rx|49g!&{~x0Glp{=M}KeW^PGckiu>O) z(_;4qooE~f<}?ztO|vuRYZr=YMpQN}NffN+!s7i_jI&-^LN9QDb=|L|Ds^~^`i z)2R`-+tB6H&~mNFIOeQHlVR@)&TRXA)5?w1KruK{kC4n_yB&m+!988=*sb%1#*1WK zUpkRN&LMoUmtSs(L*H|bsV(17mNFexotW5W1rHy+vL>HtCz?^u1=B(6(sLuEs4V&? z9Gr_8EMt$^gPeEu)J9KRkgSHq#0HxB$gSQQi*9k2WZ67RVv^j-vGa$c@MZA`uT-5V z9vad4rdpmI-hZ?ZahpZkSg<_0toemj@~5UVvmc;mY%TVEL)_&G7)(n@iLBaYN%#h^ z&^EA<2O02!?zX7EzRWdR9MI-OBbeNws^Mz!D?@m!ra}ZcOgkI%TQvz<&?1;`YjS?x zIgsj6Gh#D|OPz^HBbsV1ABNDs*`PW~i*VJawV3SWGF zqCm|KwfjW4q)t`ZQk-CMWN}gH)RW$y1jB@N0GBs@?eT56?6x$$ysTT}twLe*{id1m zHWs?h(iWNeEKjJT&)~VmU4qU_Nu^BuR%^cb)Tz2rc*`HFMsI0RY@`zv+bj;7==)0~ zTY3)J@g~C-YE9`E3AltOZT?Ywc@RdfCSmOBwi#ubo%0`HD^A)Rv3= z_m{u#*|*-l08_4CIp!rgO}XEdGf|!Px?J_^e7h@5kNL1%O(9=-L04Y1;4IneQt&iJ zl%awZ2a>IrptZl~;;VC~&BfM@0?`z4x zWnEMQdLd)(u6%-Sw-@nbpO9Tq`&w>iLK^Of*KM)%FgBZ>7wBS>{oMH_Xuavk`_H4% z6=(l`Fs;T<+3o)pAX|GrTvNf0Y#+dVJmR~V2jOqewr(q#KzBprk@}EOYq_k&-t=tb ztSOd?E(Q*|U6qQNYF_a`T)Su3;eciHgvrQRW$2?xsZ%-ZkI56ymLZibpA1Zl+V|sR zQGF6_LUAvv^R>nt%ph{g1qh?LK1PTgsMP1<q^5aW7SUi{l@0HJ78O0rb&C*np;MMORpz0tA%gw z>#&+mr>OC*-VmPknt-VK);3b^UVFn(2&r{O%FTc)ut zaZ?MJpQ-y6%ocBWH8JALCDg2^6Fa{QvJJ`%1AdubXKh!(u?L4n) zpgnpG`HAWrzZIcanT0k&{7vLtfA$DCx?ne&cscVOh0z`4#OLS$6Utz(lsh4N5l>3i zX@eI=bJ2(f6^qZUw_Q9ti|{QN?~;X)<4T#hDGJw(q~+t@GOD z$CD`pI$v6D+c)cNfM{fHHz=vaOelNv-0k?UBE}k_>|?>|^i`%>iTgGXJ+uo9i}}=$ z9J=N+sH4xroV2~C zr9xwnfiNDG=H*{kUCx&!D(ojQtCc5IiQ#Xn%hvxW;C6vQgTabZ(dpv6>@eZ|ML6HL zWMsU$`q{1>fz_0Oq5*vz_tGZ_%F52ZeXF1Hg%T&u4M}RKVK&IW&ZPG)M)9qXl)M}L zJ367U&H-nf9dMV};AYt&Z;PX2@f6;5d6wn$zr*;NbuRXn8F@?6awu2g$1ym$so@-urfLoxrMBYpkJ(sVaEnCTE`}ZvNzP`SFz!x-l zH8<4vQVAJwcxtz5sj`Jolg8NteNP4KC28w1xP*z+L#hn2x1 zak-wN-C)lA6mqr~N*JyDc8s+5$zW$pWXLvg&u+re67l*h4}-TbPBkNOX~K(Xtgriv z1`=UGJZQT^&Rl@;HVK6tlgCZx=Hurr5@Ik?Ew7qPPxzB4h~e4$WO#OY&^)nLuP=O8 zX)v|3kEcP+n&8L)!COkXLZ(Mzp=gRN!1y= z&{yR#OcQtEF?LeU{ay(z8#GYEZbYJbV*KNb6LS1C^O08h#r_jpwALaJ9^4y$`i@0l zy`Z1^^Q~~)v4;`m&$p>ir!b|a0ogf9vVYTA7heTuI{ruOSpBdoQmvJimo5GhR0drI zm~a|!$9;Kn)^W{IL{v6sYK_-bmr=WXt*r0&w?W&=Ep;q)@K5`k*?gV=Xiy)eQ9jz_ zw?PF{+3hjy(g{&ZZtuuCy;g)EEoHTDo%Gf~J0SoPnT`bDS*usJhy8uCmiOSu?;V^B zLYmB8m1Uma9SiH6mV(Ge@-xATgT051?GMk1X=OCo19&D{N#yK;EI2=VWsT0t-2Zdk zo=xo+>@0^$>k;OfJdUIHqis+gyn{6&C zFOMdLjWSv|;7D`=(yE`_u?QPTKDF%XxU@x~Tv5)7cVqp@wax?>sX%wODX+&d5Ws}O zc_?+OjU~cnAipx{#Vxj6SsCQKc;X--q%SV;1nR?d@PbjS4^~;{a~Dfm*%GbfDbEjg z65eE1H!T3~TStTk6PFYWpY?p?5x>}a812g{Au~PWt+Aeq^tj(FNRGPulxs#62LtT1 z;C^^4+gmApwC(S1WJ^VBCL)(NA$bRO)l%UxJGf^>id-%4}p8iS`d z=N@*W>(xqAm94$jJ4i^XAAv+7BNAYRRXaQCqG2|Btmi~?)=3!%ldpp|GC0(IZ(=_Q zrk}GY-TS1PI{i0HaP`yt{QNttjeFW;5X0CtljqA+!ODp8^=3AS5PS8Roa_!^9xkff zV5r3prOjI*vt+w6o;|B|1_|U0-umfzh1R||*wyL(Y46J4q1^xXBZW?#C|S!=Qc89b z6H+0KrA1^J>!d7=ZN%8+&}L~yLbi^r#l9tDO%&Ohku8RjWn{~i$ntqT&gY!(=a=t) za9o$)T%PB8KkxVbdfoT^dY;>zbc8DALZ!!H_XN!3l@W^-ZS9jT%;Ebo(xhhGy!I&1 ziQ#;z%HA>*r5(~N-eCh0@nZ7PO;@FLo7M%g@XHuOO6m7)>@{ZH`CcpjzoNS5e01As zQv38=vSJRcr}h)v2Vb$z4R@L!xSWQO|B~UClDlQune^&PnQ`GdKLhISBGxu2^7Ij@ zNXrfZ+|NbI+f?)4m|tQptsy}n1w*HJoVfG6T3$lRT!^Ey-%9Ih`QplX`Z_Oz9umQR zb6O1tp~Cy#z+p;mB^v8An$iTc@+;ouOEwNQMSo985?qWS{cPtX7p=;gTb9<-2An5e zte+-s4f-OBt`J}Vv9W63^W6;Y*DW%6##sY;?TQhEMoGh!)LSPoi+>lmkk&`qc|XYY zSn;ND-+3uG9d$7nM)1>~nGccgG9_aYZr{WjTJ;sWq-htIQf z%vVr;=?l`?Ieg%&Nu>=7PS8loj^a1F9!LK+bEpl17{1s;YMpgH>G`~kl!i^@#DpX) zBM(ICg*cw^NkIczOwa9_5#Hv_dzT0a*lY%%W(6py+QQ>!KX2qAcv$WPJD2^NpF7ue z=@6t=SI`9vDpuQMh>Ycf59tqmxqEXs5}E?#<~e^xu#*!IdQePWD=90Np3arg_S${7 ziO`KM0SYc$5a*hJ;!W+_ z2)`w&_Kz^y4@^c8?%IjOeNw!9C;FpP23QlKU5DZ3UAsV%0r`=&;l9t~0301OeYGpf z`;&zJYASgd=S6Yj2hd#ZAkE9)zUk>!LmZ^I0#5unH-lv;xG4{^#A+UyWz0sUiG}e1 zO$!~QmtyaaTfX_ew?_0?Y42j$*Z@F<;Quse6<17youS-aVa5f5g5MyZOzJmrPga62 zQS-uOFB`T`Ql{=sNo?-o+cOv8Lu5m?r=sGAJkO+0JZobu)d_ll3jSWqnkjHUPzhT4 zMHsT#&<03sj~-B|3LJ3Buia528jo$)AkTL&BTptQhDZ1xP~Fe@$V8+UYs z_9n3mwJcYDRX*n4>R2 zLwBvrbBwL{8FJ5zJNr^VmL~fqU=jwxBazwneR&Uupw$`iaRW*$uF4wX1em2+SYc(t zb^p=|;(Asx@3bZ8lTyD3YWmXg81xdy9HfeIw~l!{;X~ykU90<3%uwGiQ+u`E zYRB^C9<5D!s3~lzQqPGT=kVg0uCn&%w`0i~(K;Tgo=jYrV&1bsZ434IsvfyY$Kk{B zNJA(q7JJR%mC2(j8>&3XfLMo|!!tb6#N=n|!u)mm1cg|JlA7`$Jcb5a)7=)0VnKW3 zv-IC-LZqS0D4CQ&cH~5d5$RjWh79#`r2zipQuRB5JM!}G(dm8FH|5(&sQ-|P34?Y9 zQTYl;QB+&f|71-clZQR1(0)bLtpPRHc3Yx}lxQ8s-*>;&S=eWFN{&6$+ZH6sti3wI* zj0ZaxGY(9{m`QN{idh#Vo-*(LgDV|zE+0_~RHwD?0oY5xfMxGE4$p3NPl97zKxp)j z)6hWVzs!Q;DsQtE;HEVA7=6rq7B?ATm0u4XOK7RSOJE7IjF=wqy^F@CUC{FxUSpJN zz((UZsI0%{p?e7Aj9SkwXu3ma0w*sJxp8TJd4d-IizyGp7?4E{)yGwwFUvYaJbHaN z@}{pefKYjv@pu!Z4N^)z{{h;MJFza`8nm$ws|~|0Nlr=wjpwc)T5i)~Q4_j)PqFHC zy^0gHP+>f2JhWYN+ra*`y?b1M1^=waS>2WnQNZ)H_-k!@F$%(r|HGArE&qcnE!^BP zl(ACaI3xDXKQ|T9$P_dpU@uiVo@rHp2&t%CJ?RoM)tG*(I6JPz^jbbykllL8oV;Q zSa$b$RsUktM-r*&l{6`vjmE?9e(M#dgs1_(a6HQ02 zh4;|`ro^|9gxN!rL-LL3ij`J{i{S0M|5rG&lk(K&Og!Xp6rd$jgE3Qm3)2M5xkLAi zrV&~$6@pSf4VYGFp{hcqYu6H*DJwMRgevuNPd*KI4qZzVgNoYWSh6sps!SF04ZuFm zG(2O1Xcc`J^D|HhbSY`p&Tc0`v=$A@Dpzx?#mk)HS5p}gij^1YU)|n}Bu8s!kwVME zmIy_EJ94Jmz*e*~Qy0I$fh$5y-2DkDDFcUw*EZ96r^enWml1%T~P4J zGDL&eVvuK?4i5XV?v#xi8690Ln^1uK$9yjtE1Tc|^!(9dn^yx<@ z3@DAgqwRB>C~1#*pF!hsvN`>n7>0ibO6qHiz;@?j>j$Z<5)}sSG427C$zMnrYnC$ z*^M16*F;>(z;I?!8pgJVJ@c6Usu@u$MO+%kB}C@od)gLU@&WKg+#gi(L%BJSpO%2; zKMBr7P%W%r3(6|z*YY7d2-J(D==2t7K0H)_xv4|nmLbadoYzXpxxEFcI17SNJ97e zP=5}MN2?x+%s@P`y2&u7lpbHESa~^nm^J9M+5D6Wib(%xI;)owIZ4eE)Zy}Ymh4af ztZJ+y7zl6sRXiq|z0vG7HT_cTS`srd`1A7M`yX48noB^etYV25i8?=49{2S0gff47 z!sP99i7^UqQ}{~;(yD{YYxv_bmAlNxnk}+C@AD_J))YAcxi61xeJ}(E@9#!J%n21f zc}7ns6W&d{XL49K5XH-nsHW=ZOpEmTYNN@Xq*<%9J#3m?lTk1X0;Ck3g6WwPj|lgZ zr*7hBo4onUEm|F%05Z2z$G1k>&W)>g@>&EGHClCC&oGBYC&?XW4;sbisx9)wtM6p& zY~-$fX_iw3z=!Sc$e{fm@8)07CK(QQhr|u`D5eVQ zs476-IezaF(^T^PZEvKrHK1&*Prq8N&}P*w;-=4AR6kH`_FC9RlXNBW*rjBWR! zM}}Wmk>t#;qq=5%No2M1ixuxSbtXzh^h-b+Pu|+q`RTqRFk-D*M5yLVw`4nC^CWSP zkV-DiAkax#-^KrPFne+X2-DZ@X_pZmHIS=lTghzJ~80jDM}nUpFhL6@Nfefp>drl)U}FaC`xbbBl) zp7<(3-I6_Zm zK9Kllw&+R($j@>Lfi6TH`)2hb_aj^5t%idYY1(RNxiK2=HIT<3-gH0o3B>bCCwm^2UL7xyo#s zW92LOEhT4Koogos689q8i%@~@Dpi6i_UOOEMT2E#DdEXSdgS04jhU?(R&LUg#bC-s zdk&%beqx{3_yudB<&jr|?^6B!Z4)B>78X{ULPB$P=FRW9Uv)5d5-pa5g1 z1i3e2*nMe@xl+swv8-{d0<+G)_krza5(mwOrR@LUum=)ILDLyf!rQLg&s&>BnQ z+cfj#Cu+3Zz6&M_R91w|Ajga`m>Vbvdw(1Dn-wb7OM7N-&w9<9M_dVh&^i? z)X#c}e`^ke;|w^E)whNi+F9hNwZJwZ-vo71ku$pIFozI`qqB{pH)mh literal 0 HcmV?d00001 From 0e3ccfe95ae1954bc11a7e98be1cbf08dd33fde8 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Fri, 1 Jul 2016 10:15:31 +0200 Subject: [PATCH 50/63] Add braviatv docs --- source/_posts/2016-07-01-tbd.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_posts/2016-07-01-tbd.markdown b/source/_posts/2016-07-01-tbd.markdown index 5b9be674f84..fc4e489b802 100644 --- a/source/_posts/2016-07-01-tbd.markdown +++ b/source/_posts/2016-07-01-tbd.markdown @@ -92,4 +92,4 @@ Breaking changes: [Fixer.io]: /components/sensor.fixer/ [persistent notifications]: /components/persistent_notification/ [reload core config service]: /getting-started/XX -[Sony Bravia TV]: /components/XX/ +[Sony Bravia TV]: /components/media_player.braviatv/ From 049242d362d7fdfe323240354993fd3d2fd97f71 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Fri, 1 Jul 2016 10:28:06 +0200 Subject: [PATCH 51/63] Initial braviatv docs --- .../media_player.braviatv.markdown | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 source/_components/media_player.braviatv.markdown diff --git a/source/_components/media_player.braviatv.markdown b/source/_components/media_player.braviatv.markdown new file mode 100644 index 00000000000..051a5f02a2f --- /dev/null +++ b/source/_components/media_player.braviatv.markdown @@ -0,0 +1,29 @@ +--- +layout: page +title: "Sony Bravia TV" +description: "Instructions on how to integrate a Sony Bravia TV into Home Assistant." +date: 2016-07-01 08:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: bravia.png +ha_category: Media Player +ha_release: 0.23 +--- + +The `braviatv` platform allows you to control a [Sony Bravia TV](http://www.sony.com). + +To add a TV to your installation, add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +media_player: + platform: braviatv + host: 192.168.0.10 +``` + +Configuration variables: + +- **host** (*Required*): The IP of the Sony Bravia TV, eg. 192.168.0.10 + From 9c28c225b6c8a7ffff931a5be1b5cc5754a20245 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Fri, 1 Jul 2016 10:28:42 +0200 Subject: [PATCH 52/63] Add stubs and links --- .../alarm_control_panel.envisalink.markdown | 20 +++++++++++++++++++ .../binary_sensor.envisalink.markdown | 18 +++++++++++++++++ source/_components/envisalink.markdown | 10 +++++----- source/_components/sensor.envisalink.markdown | 19 ++++++++++++++++++ 4 files changed, 62 insertions(+), 5 deletions(-) create mode 100644 source/_components/alarm_control_panel.envisalink.markdown create mode 100644 source/_components/binary_sensor.envisalink.markdown create mode 100644 source/_components/sensor.envisalink.markdown diff --git a/source/_components/alarm_control_panel.envisalink.markdown b/source/_components/alarm_control_panel.envisalink.markdown new file mode 100644 index 00000000000..b5b6b3d593a --- /dev/null +++ b/source/_components/alarm_control_panel.envisalink.markdown @@ -0,0 +1,20 @@ +--- +layout: page +title: "Envisalink Alarm" +description: "Instructions how to setup the Envisalink Alarm control panel within Home Assistant." +date: 2016-07-01 08:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: eyezon.png +ha_category: Alarm +ha_release: 0.23 +ha_iot_class: "Local Push" +--- + + +The `envisalink` alarm control panel platform allows you to control your [Envisalink](http://www.eyezon.com) alarms. + +The requirement is that you have setup your [Envisalink hub](/components/envisalink/). + diff --git a/source/_components/binary_sensor.envisalink.markdown b/source/_components/binary_sensor.envisalink.markdown new file mode 100644 index 00000000000..227d7ee821a --- /dev/null +++ b/source/_components/binary_sensor.envisalink.markdown @@ -0,0 +1,18 @@ +--- +layout: page +title: "Envisalink Binary Sensor" +description: "Instructions how to integrate Envisalink binary sensors into Home Assistant." +date: 2016-07-01 08:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: eyezon.png +ha_release: 0.23 +ha_category: Binary Sensor +ha_iot_class: "Local Push" +--- + +The `envisalink` platform allows you to get data from your [Envisalink](http://www.eyezon.com/) binary sensors from within Home Assistant. + +The requirement is that you have setup your [Envisalink hub](/components/envisalink/). diff --git a/source/_components/envisalink.markdown b/source/_components/envisalink.markdown index 340c88c1975..037907a6e01 100644 --- a/source/_components/envisalink.markdown +++ b/source/_components/envisalink.markdown @@ -13,15 +13,15 @@ ha_release: 0.23 --- This component will allow Home Assistant users who own either a DSC or Honeywell alarm panel to leverage their alarm system and it's sensors to provide Home Assistant with rich information about their homes. -Connectivity between Home Assistant and the alarm panel is accomplished through a device produced by Eyez On, known as the Envisalink. The Envisalink evl3 and evl4 boards provide a TCP/IP interface to the alarm panel, where it emulates an alarm keypad. This board also exposes a raw TCP/IP based API, upon which this component is built. Currently, the Envisalink version 4 is the latest model. This component supports both the evl3 and the evl4. +Connectivity between Home Assistant and the alarm panel is accomplished through a device produced by Eyez On, known as the Envisalink. The Envisalink evl3 and evl4 boards provide a TCP/IP interface to the alarm panel, where it emulates an alarm keypad. This board also exposes a raw TCP/IP based API, upon which this component is built. Currently, the Envisalink version 4 is the latest model. This component supports both the evl3 and the evl4. Please visit the [eyezon website](http://www.eyezon.com/) for further information about the evl3 and evl4 boards. There is currently support for the following device types within Home Assistant: -- Binary Sensor (Reports on zone status) -- Sensor (Emulates an alpha-numeric keypad attached to the alarm panel) -- Alarm Control Panel (Reports on partition status, and can be used to arm/disarm the system) +- [Binary Sensor](/components/binary_sensor.envisalink/): Reports on zone status +- [Sensor](/components/sensor.envisalink/): Emulates an alpha-numeric keypad attached to the alarm panel +- [Alarm Control Panel](/components/alarm_control_panel.envisalink/): Reports on partition status, and can be used to arm/disarm the system This is a fully event-based component- any event sent by the Envisalink device will be immediately reflected within Home Assistant. @@ -30,7 +30,7 @@ This is a fully event-based component- any event sent by the Envisalink device w An `envisalink` section must be present in the `configuration.yaml` file and contain the following options as required: ### Required Parameters -- **host**: The ip address of the Envisalink device on your home network. +- **host**: The IP address of the Envisalink device on your home network. - **panel_type**: `HONEYWELL` or `DSC`, depending upon which alarm system you have. - **user_name**: Which username to authenticate with when connecting to the device. On a Honeywell alarm panel, the username/password are the same. - **password**: Which password to authenticate with when connecting to the device. diff --git a/source/_components/sensor.envisalink.markdown b/source/_components/sensor.envisalink.markdown new file mode 100644 index 00000000000..5f42edda39f --- /dev/null +++ b/source/_components/sensor.envisalink.markdown @@ -0,0 +1,19 @@ +--- +layout: page +title: "Vera Sensor" +description: "Instructions how to integrate Vera sensors into Home Assistant." +date: 2016-07-01 10:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: eyezon.png +ha_release: 0.23 +ha_category: Sensor +ha_iot_class: "Local Push" +--- + +The `envisalink` platform allows you to get data from your [Envisalink](http://www.eyezon.com/) sensors from within Home Assistant. + +The requirement is that you have setup your [Envisalink hub](/components/envisalink/). + From 94a19432f1d03e697b38033e99f6ec85c5eca26a Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Fri, 1 Jul 2016 14:39:20 +0200 Subject: [PATCH 53/63] Add more details for the PR --- source/_components/media_player.braviatv.markdown | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/source/_components/media_player.braviatv.markdown b/source/_components/media_player.braviatv.markdown index 051a5f02a2f..e65c3d738b2 100644 --- a/source/_components/media_player.braviatv.markdown +++ b/source/_components/media_player.braviatv.markdown @@ -14,6 +14,10 @@ ha_release: 0.23 The `braviatv` platform allows you to control a [Sony Bravia TV](http://www.sony.com). +Almost all [Sony Bravia TV 2013 and newer](http://info.tvsideview.sony.net/en_ww/home_device.html#bravia) are supported. + +You will need to configure your TV to allow the Home Assistant for remote usage. To do that, ensure that your TV is turned on. Open the configuration popup on Home Assistant and enter a random PIN (for example 0000). After that, the TV will show you a PIN and Home Assistant will allow you to re-enter that PIN. Enter the PIN shown on your TV and Home Assistant will be able to control your Sony Bravia TV. + To add a TV to your installation, add the following to your `configuration.yaml` file: ```yaml @@ -21,9 +25,11 @@ To add a TV to your installation, add the following to your `configuration.yaml` media_player: platform: braviatv host: 192.168.0.10 + name: Living Room TV ``` Configuration variables: - **host** (*Required*): The IP of the Sony Bravia TV, eg. 192.168.0.10 +- **name** (*Optional*): The name to use on the frontend. From 1e59ac0d9a65124dc854416cc5a8fb8d031fa79c Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Fri, 1 Jul 2016 15:46:34 +0200 Subject: [PATCH 54/63] Add link to secrets docs --- source/_posts/2016-07-01-tbd.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_posts/2016-07-01-tbd.markdown b/source/_posts/2016-07-01-tbd.markdown index fc4e489b802..be826a46dcb 100644 --- a/source/_posts/2016-07-01-tbd.markdown +++ b/source/_posts/2016-07-01-tbd.markdown @@ -83,7 +83,7 @@ Breaking changes: [OneWire]: /components/sensor.onewire/ [OpenExchangeRates]: /components/sensor.openexchangerates/ [Pushover]: /components/notify.pushover/ -[secrets]: /components/XX/ +[secrets]: /topics/secrets [Vera]: /components/lock.vera/ [Wink]: /components/wink/ [zwave-garage-door]: /components/garage_door.zwave/ From c4ff46d7437f81983209942455aab72ee8d42945 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Fri, 1 Jul 2016 15:48:24 +0200 Subject: [PATCH 55/63] Fix link --- source/_posts/2016-07-01-tbd.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_posts/2016-07-01-tbd.markdown b/source/_posts/2016-07-01-tbd.markdown index be826a46dcb..e13e4bccc57 100644 --- a/source/_posts/2016-07-01-tbd.markdown +++ b/source/_posts/2016-07-01-tbd.markdown @@ -83,7 +83,7 @@ Breaking changes: [OneWire]: /components/sensor.onewire/ [OpenExchangeRates]: /components/sensor.openexchangerates/ [Pushover]: /components/notify.pushover/ -[secrets]: /topics/secrets +[secrets]: /topics/secrets/ [Vera]: /components/lock.vera/ [Wink]: /components/wink/ [zwave-garage-door]: /components/garage_door.zwave/ From c4dc276e779b45869083372be763379c850e9aab Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Fri, 1 Jul 2016 16:18:58 +0200 Subject: [PATCH 56/63] Add screenshot and more details --- .../persistent_notification.markdown | 39 +++++++++++++++++- .../screenshots/persistant-notification.png | Bin 0 -> 13401 bytes 2 files changed, 38 insertions(+), 1 deletion(-) create mode 100644 source/images/screenshots/persistant-notification.png diff --git a/source/_components/persistent_notification.markdown b/source/_components/persistent_notification.markdown index 265dd182ebf..0ce8ebc174e 100644 --- a/source/_components/persistent_notification.markdown +++ b/source/_components/persistent_notification.markdown @@ -14,4 +14,41 @@ ha_release: 0.23 The `persistant_notification` can be used to show a message on the frontend that has to be dismissed by the user. -The service `persistent_notification/create`. Takes in `message`, `title`, and `notification_id`. If `notification_id` is given, it will overwrite the notification if there already was a notification with that id. +

+ +

+ +### {% linkable_title Service %} + +The service `persistent_notification/create` takes in `message`, `title`, and `notification_id`. + +| Service data attribute | Optional | Description | +| ---------------------- | -------- | ----------- | +| `message` | no | Body of the notification. +| `title` | yes | Title of the notification. +| `notification_id` | yes | If `notification_id` is given, it will overwrite the notification if there already was a notification with that ID. + +The `persistant_notification` component supports specifying [templates](/topics/templating/) for both the `message` and the `title`. This will allow you to use the current state of Home Assistant in your notifications. + +In an [action](https://home-assistant.io/getting-started/automation-action/) of your [automation setup](/getting-started/automation/) it could look like this with a customized subject. + +```yaml +action: + service: persistant_notification.create + data: + message: "Your message goes here" + title: "Custom subject" +``` + +### {% linkable_title Create a perstistant notification %} + +Use **Call Service** from the **Developer Tools** to call the `persistant_notification` service. Choose `persistant_notification/create` from the list of **Available services:** and enter something like the sample below into the **Service Data** field and hit **CALL SERVICE**. + +```json +{ + "notification_id": "1234", + "title": "Sample notification", + "message": "This is a sample text" +} +``` +This will create the notification entry shown above. diff --git a/source/images/screenshots/persistant-notification.png b/source/images/screenshots/persistant-notification.png new file mode 100644 index 0000000000000000000000000000000000000000..3988cbadc7c4dcc5ef722031985448f877e6ac98 GIT binary patch literal 13401 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 H^5_2o@!jm- literal 0 HcmV?d00001 From ea6304ee6c31d11e62b0c1894778f78245e97d8f Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Fri, 1 Jul 2016 17:20:17 +0200 Subject: [PATCH 57/63] Initial docs for storing secrets (#601) --- source/_topics/secrets.markdown | 61 +++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 source/_topics/secrets.markdown diff --git a/source/_topics/secrets.markdown b/source/_topics/secrets.markdown new file mode 100644 index 00000000000..29b3107e54c --- /dev/null +++ b/source/_topics/secrets.markdown @@ -0,0 +1,61 @@ +--- +layout: page +title: "Storing secrets" +description: "Storing secrets outside of your configuration.yaml." +date: 2016-07-01 08:30 +sidebar: false +comments: false +sharing: true +footer: true +--- + +The `configuration.yaml` file a plain-text file thus it is readable for everyone who has access to the file. The file contains passwords and API tokens which need to be redacted if you want to share your configuration. This separation can also help you to keep easier track of your passwords and API keys (as they are all stored at one place and no longer spread across the `configuration.yaml` file) if you don't want to [split up your configuration](topics/splitting_configuration/). + +### {% linkable_title `secrets.yaml` %} + +The workflow for the outsourcing in the `secrets.yaml` are very similar to the [splitting of the configuration](topics/splitting_configuration/). Create a `secrets.yaml` file in your Home assistant configuration directory (The location of the folder differs between operating systems: on OS X and Linux it's `~/.homeassistant` and on Windows it's `%APPDATA%/.homeassistant`). + +The entries for password and API keys in the `configuration.yaml` file usally looks like the example below. + +```yaml +http: + api_password: YOUR_PASSWORD +``` + +Those entries need to be replaced with `!secret` and a identifier. + +```yaml +http: + api_password: !secret http_password +``` + +The `secrets.yaml` files stored the corresponding password assigned to the identifier. + +```yaml +debug: 0 +http_password: YOUR_PASSWORD +``` + +### {% linkable_title Python Keyring %} + +Using [Keyring](http://pythonhosted.org/keyring/) is an alternative way to `secrets.yaml` but requires that `keyring` is installed (incl. its command-line tools). This can be done with: + +```bash +$ pip3 install keyring +``` + +Replaced your password or API key with `!secret` and an identifier in `configuration.yaml` file. + +```yaml +http: + api_password: !secret http_password +``` + +Create an entry in your keyring. The service is (SERVICE) `homeassistant` and the identifier is the USERNAME. + +```bash +$ keyring-3.4 set homeassistant http_password +Password for 'http_password' in 'homeassistant': YOUR_PASSWORD +``` + + From bacd4aab2136bfcec9e22b45448dffbd9195f1a8 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Fri, 1 Jul 2016 08:45:13 -0700 Subject: [PATCH 58/63] Fix more for 0.23 release --- .../_components/garage_door.rpi_gpio.markdown | 26 +++++++++++++++++++ source/_components/garage_door.zwave.markdown | 15 +++++++++++ .../media_player.braviatv.markdown | 2 +- .../_components/rollershutter.zwave.markdown | 15 +++++++++++ source/_posts/2016-07-01-tbd.markdown | 7 ++--- source/_topics/secrets.markdown | 2 +- .../customizing-devices.markdown | 10 ++++++- source/getting-started/devices.markdown | 1 - 8 files changed, 71 insertions(+), 7 deletions(-) create mode 100644 source/_components/garage_door.rpi_gpio.markdown create mode 100644 source/_components/garage_door.zwave.markdown create mode 100644 source/_components/rollershutter.zwave.markdown diff --git a/source/_components/garage_door.rpi_gpio.markdown b/source/_components/garage_door.rpi_gpio.markdown new file mode 100644 index 00000000000..bb5a83000bc --- /dev/null +++ b/source/_components/garage_door.rpi_gpio.markdown @@ -0,0 +1,26 @@ +--- +layout: page +title: "Raspberry Pi Garage door" +description: "Instructions how to setup the Raspberry Pi garage doors within Home Assistant." +date: 2016-02-12 07:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: wink.png +ha_category: Garage Door +ha_release: 0.23 +--- + +```yaml +# Example configuration.yaml entry +garage_door: + platform: rpi_gpio + doors: + - relay_pin: 10 + state_pin: 11 + name: 'Left door' + - relay_pin: 12 + state_pin: 13 + name: 'Right door' +``` \ No newline at end of file diff --git a/source/_components/garage_door.zwave.markdown b/source/_components/garage_door.zwave.markdown new file mode 100644 index 00000000000..94e3b7bf4f2 --- /dev/null +++ b/source/_components/garage_door.zwave.markdown @@ -0,0 +1,15 @@ +--- +layout: page +title: "Z-Wave Garage Door" +description: "Instructions how to setup the Z-Wave garage doors within Home Assistant." +date: 2015-11-15 13:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: z-wave.png +ha_category: Garage Door +ha_release: 0.23 +--- + +To get your Z-Wave garage doors working with Home Assistant, follow the instructions for the general [Z-Wave component](/components/zwave/). diff --git a/source/_components/media_player.braviatv.markdown b/source/_components/media_player.braviatv.markdown index e65c3d738b2..06c19b6d997 100644 --- a/source/_components/media_player.braviatv.markdown +++ b/source/_components/media_player.braviatv.markdown @@ -14,7 +14,7 @@ ha_release: 0.23 The `braviatv` platform allows you to control a [Sony Bravia TV](http://www.sony.com). -Almost all [Sony Bravia TV 2013 and newer](http://info.tvsideview.sony.net/en_ww/home_device.html#bravia) are supported. +Almost all [Sony Bravia TV 2013 and newer](http://info.tvsideview.sony.net/en_ww/home_device.html#bravia) are supported. You will need to configure your TV to allow the Home Assistant for remote usage. To do that, ensure that your TV is turned on. Open the configuration popup on Home Assistant and enter a random PIN (for example 0000). After that, the TV will show you a PIN and Home Assistant will allow you to re-enter that PIN. Enter the PIN shown on your TV and Home Assistant will be able to control your Sony Bravia TV. diff --git a/source/_components/rollershutter.zwave.markdown b/source/_components/rollershutter.zwave.markdown new file mode 100644 index 00000000000..7db200683aa --- /dev/null +++ b/source/_components/rollershutter.zwave.markdown @@ -0,0 +1,15 @@ +--- +layout: page +title: "Z-Wave Rollershutter" +description: "Instructions how to setup the Z-Wave rollershutters within Home Assistant." +date: 2015-11-15 13:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: z-wave.png +ha_category: Rollershutter +ha_release: 0.23 +--- + +To get your Z-Wave rollershutters working with Home Assistant, follow the instructions for the general [Z-Wave component](/components/zwave/). diff --git a/source/_posts/2016-07-01-tbd.markdown b/source/_posts/2016-07-01-tbd.markdown index e13e4bccc57..3a066b24796 100644 --- a/source/_posts/2016-07-01-tbd.markdown +++ b/source/_posts/2016-07-01-tbd.markdown @@ -10,7 +10,7 @@ comments: true categories: Release-Notes --- -It's time for Home Assistant 0.23 and it's full of goodies. It's also the release that bumps us over a 1000 tests and to 94% test coverage! +It's time for Home Assistant 0.23 and it's full of goodies. It's also the release that bumps us over a 1000 tests and to 94% test coverage! Also our install issues on the Raspberry Pi and Synology have been resolved. This release brings support for two new ecosystems: [Envisalink] and [Homematic]. We can now also control your TV via HDMI using [HDMI-CEC] (which works on the Pi!) and another cool feature is the [persistent notifications] which allow you to add a notification to the frontend till dismissed. @@ -18,7 +18,7 @@ This release brings support for two new ecosystems: [Envisalink] and [Homematic] On the config side, you can now [store your passwords][secrets] in your OS keyring or just in a standalone file. We also got a new service to reload the core config so no reboots needed anymore after changing customize settings! - + - Support for [Envisalink] added ([alarm control panel][envi-alarm], [binary sensor][envi-binary-sensor], [sensor][envi-sensor]) ([@cinntax]) - Support for [Homematic] added ([binary sensor][hm-binary-sensor], [light][hm-light], [rollershutter][hm-rollershutter], [sensor][hm-sensor], [switch][hm-switch]) ([@pvizeli], [@danielperna84]) @@ -91,5 +91,6 @@ Breaking changes: [zwave-rollershutter]: /components/rollershutter.zwave/ [Fixer.io]: /components/sensor.fixer/ [persistent notifications]: /components/persistent_notification/ -[reload core config service]: /getting-started/XX +[reload core config service]: /getting-started/customizing-devices/#reloading-customize [Sony Bravia TV]: /components/media_player.braviatv/ +[Raspberry Pi GPIO pins]: /components/garage_door.rpi_gpio/ diff --git a/source/_topics/secrets.markdown b/source/_topics/secrets.markdown index 29b3107e54c..06ba38d4644 100644 --- a/source/_topics/secrets.markdown +++ b/source/_topics/secrets.markdown @@ -11,7 +11,7 @@ footer: true The `configuration.yaml` file a plain-text file thus it is readable for everyone who has access to the file. The file contains passwords and API tokens which need to be redacted if you want to share your configuration. This separation can also help you to keep easier track of your passwords and API keys (as they are all stored at one place and no longer spread across the `configuration.yaml` file) if you don't want to [split up your configuration](topics/splitting_configuration/). -### {% linkable_title `secrets.yaml` %} +### {% linkable_title Using secrets.yaml %} The workflow for the outsourcing in the `secrets.yaml` are very similar to the [splitting of the configuration](topics/splitting_configuration/). Create a `secrets.yaml` file in your Home assistant configuration directory (The location of the folder differs between operating systems: on OS X and Linux it's `~/.homeassistant` and on Windows it's `%APPDATA%/.homeassistant`). diff --git a/source/getting-started/customizing-devices.markdown b/source/getting-started/customizing-devices.markdown index e24a72eb45e..9fbaca4c7b8 100644 --- a/source/getting-started/customizing-devices.markdown +++ b/source/getting-started/customizing-devices.markdown @@ -8,7 +8,7 @@ comments: false sharing: true footer: true --- - + By default, all of your devices will be visible and have a default icon determined by their domain. You can customize the look and feel of your front page by altering some of these parameters. This can be done by adding the following configuration inside the `homeassistant:` section. Devices that you don't want to have visible can be hidden with `hidden`. @@ -42,4 +42,12 @@ homeassistant: assumed_state: false ``` +### {% linkable_title Reloading customize %} + +Home Assistant offers a service to reload the core configuration while Home Assistant is running called `homeassistant/reload_core_config`. This allows you to change your customize section and see it being applied without having to restart Home Assistant. To call this service, go to the service developer tool icon service developer tools, select the service `homeassistant/reload_core_config` and click "Call Service". + +

+New customize information will be applied the next time the state of the entity gets updated. +

+ ### [Next step: Setting up presence detection »](/getting-started/presence-detection/) diff --git a/source/getting-started/devices.markdown b/source/getting-started/devices.markdown index 8429f2312c5..8de52675eef 100644 --- a/source/getting-started/devices.markdown +++ b/source/getting-started/devices.markdown @@ -16,7 +16,6 @@ See the [components overview page](/components/) to find installation instructio Usually every entity needs its own entry in the `configuration.yaml` file. There are two styles for multiple entries: #### {% linkable_title Style 1: Collect every entity under the "parent" %} - ```yaml sensor: From d5417f8ffae5658ce9a47f6d095b2442d566fd63 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Fri, 1 Jul 2016 18:34:20 +0200 Subject: [PATCH 59/63] Update keyring section --- source/_topics/secrets.markdown | 32 +++++++++++++++++++++++++++++--- 1 file changed, 29 insertions(+), 3 deletions(-) diff --git a/source/_topics/secrets.markdown b/source/_topics/secrets.markdown index 06ba38d4644..20574301301 100644 --- a/source/_topics/secrets.markdown +++ b/source/_topics/secrets.markdown @@ -51,11 +51,37 @@ http: api_password: !secret http_password ``` -Create an entry in your keyring. The service is (SERVICE) `homeassistant` and the identifier is the USERNAME. +Create an entry in your keyring. The service (SERVICE) is `homeassistant` and the identifier is the USERNAME in the keyring context. ```bash -$ keyring-3.4 set homeassistant http_password -Password for 'http_password' in 'homeassistant': YOUR_PASSWORD +$ keyring set homeassistant http_password +Password for 'http_password' in 'homeassistant': +Please set a password for your new keyring: +Please confirm the password: ``` +If the command-line tool `keyring` is not available, launch `python3` and do the process manually. + +```python +>>> import keyring +>>> keyring.set_password("homeassistant", "http_password", "12345") +Please set a password for your new keyring: +Please confirm the password: +>>> keyring.get_password("homeassistant", "http_password") +'12345' +>>> keyring.get_keyring() + +``` + +If you launch home Assistant now, you will be prompted for the keyring password to unlock your keyring. + +```bash +$ hass +Config directory: /home/fab/.homeassistant +Please enter password for encrypted keyring: +``` + +

+ With this configuration [autostart](/getting-started/autostart/) will no longer work. +

From 4f0fa470911ba70031ee4fd17c7735858973cbc3 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Fri, 1 Jul 2016 19:10:12 +0200 Subject: [PATCH 60/63] Add icon --- source/_components/persistent_notification.markdown | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/_components/persistent_notification.markdown b/source/_components/persistent_notification.markdown index 0ce8ebc174e..b92490c27ed 100644 --- a/source/_components/persistent_notification.markdown +++ b/source/_components/persistent_notification.markdown @@ -40,9 +40,9 @@ action: title: "Custom subject" ``` -### {% linkable_title Create a perstistant notification %} +### {% linkable_title Create a persistant notification %} -Use **Call Service** from the **Developer Tools** to call the `persistant_notification` service. Choose `persistant_notification/create` from the list of **Available services:** and enter something like the sample below into the **Service Data** field and hit **CALL SERVICE**. +Go to the service developer tool icon **Developer Tools** to call the `persistant_notification` service. Choose `persistant_notification/create` from the list of **Available services:** and enter something like the sample below into the **Service Data** field and hit **CALL SERVICE**. ```json { From a7c4afbbacc34730e2ed3c01585d281998b713d7 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Fri, 1 Jul 2016 19:14:57 +0200 Subject: [PATCH 61/63] A little tweaking --- source/_components/persistent_notification.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/persistent_notification.markdown b/source/_components/persistent_notification.markdown index b92490c27ed..8ca121d36bf 100644 --- a/source/_components/persistent_notification.markdown +++ b/source/_components/persistent_notification.markdown @@ -42,7 +42,7 @@ action: ### {% linkable_title Create a persistant notification %} -Go to the service developer tool icon **Developer Tools** to call the `persistant_notification` service. Choose `persistant_notification/create` from the list of **Available services:** and enter something like the sample below into the **Service Data** field and hit **CALL SERVICE**. +Choose service developer tool icon **Services** from the **Developer Tools** to call the `persistant_notification` service. Select `persistant_notification/create` from the list of **Available services:** and enter something like the sample below into the **Service Data** field and hit **CALL SERVICE**. ```json { From 8bc75619cd89f88de60ec195dfaf93c114ec2a82 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Fri, 1 Jul 2016 20:40:17 +0200 Subject: [PATCH 62/63] Update title and description --- ...k-homematic-hdmi-cec-and-cherrypi.markdown | 96 +++++++++++++++++++ 1 file changed, 96 insertions(+) create mode 100644 source/_posts/2016-07-01-envisalink-homematic-hdmi-cec-and-cherrypi.markdown diff --git a/source/_posts/2016-07-01-envisalink-homematic-hdmi-cec-and-cherrypi.markdown b/source/_posts/2016-07-01-envisalink-homematic-hdmi-cec-and-cherrypi.markdown new file mode 100644 index 00000000000..22efbe70ac2 --- /dev/null +++ b/source/_posts/2016-07-01-envisalink-homematic-hdmi-cec-and-cherrypi.markdown @@ -0,0 +1,96 @@ +--- +layout: post +title: "0.23: Envisalink, Homematic, HDMI-CEC and CherryPi" +description: "This new release of Home Assistant contains support for Envisalink, Homematic and HDMI-CEC. Additionaly was the Wink support improved and CherryPi is the new WSGI server." +date: 2016-07-01 00:31:00 +0000 +date_formatted: "July 1, 2016" +author: Paulus Schoutsen +author_twitter: balloob +comments: true +categories: Release-Notes +--- + +It's time for Home Assistant 0.23 and it's full of goodies. It's also the release that bumps us over a 1000 tests and to 94% test coverage! Also our install issues on the Raspberry Pi and Synology have been resolved. + +This release brings support for two new ecosystems: [Envisalink] and [Homematic]. We can now also control your TV via HDMI using [HDMI-CEC] (which works on the Pi!) and another cool feature is the [persistent notifications] which allow you to add a notification to the frontend till dismissed. + +[Wink] support has been dramatically improved by migrating to the PubNub API. This allows Wink to push changes from their system to Home Assistant. This change came just in time as somehow our Wink integration was causing a lot of requests to their servers. Thanks to Wink for letting us know so we could solve it instead of blocking us. + +On the config side, you can now [store your passwords][secrets] in your OS keyring or just in a standalone file. We also got a new service to reload the core config so no reboots needed anymore after changing customize settings! + + + +- Support for [Envisalink] added ([alarm control panel][envi-alarm], [binary sensor][envi-binary-sensor], [sensor][envi-sensor]) ([@cinntax]) +- Support for [Homematic] added ([binary sensor][hm-binary-sensor], [light][hm-light], [rollershutter][hm-rollershutter], [sensor][hm-sensor], [switch][hm-switch]) ([@pvizeli], [@danielperna84]) +- New [HDMI-CEC] component ([@happyleavesaoc], [@lukas-hetzenecker]) +- Major rewrite of [Wink] which now pushes changes to Home Assistant ([@w1ll1am23]) +- Core: new add [reload core config service] ([@balloob]) +- Support for [persistent notifications] added ([@fabaff], [@balloob]) +- Garage door: [Z-Wave][zwave-garage-door] support added ([@turbokongen]) +- Rollershutter: [Z-Wave][zwave-rollershutter] support added ([@turbokongen]) +- Media Player: [Sony Bravia TV] now supported ([@aparraga]) +- Sensor: [Fixer.io] now supported ([@fabaff]) +- Garage door: Control any garage door using [Raspberry Pi GPIO pins] ([@kellerza]) +- Sensor: [OpenExchangeRates] support added ([@arsaboo]) +- Notify: [Pushover] now supports target device, sound, url and priority ([@dale3h]) +- Sensor: [Netatmo] now supports wind, battery and radio signals ([@Jypy]) +- Log successful and failed login attemps ([@fabaff]) +- Config: allow [extracting account info][secrets] into OS keyring or separate YAML file ([@kellerza]) +- Core: add option to not filter out duplicate states per entity ([@philipbl]) +- HTTP: Follow Mozilla SSL recommendations ([@danieljkemp], [@AlucardZero]) +- Light: [Z-Wave colorbulb][zwave-light] support added ([@armills]) +- Core: new elevation config option added ([@balloob]) +- Sensor: [OneWire] support extended with support for DS18S20, DS1822, DS1825 and DS28EA00 temperature sensors + support for bus masters which use fuse to mount device tree. ([@Ardetus]) +- Lock: [Vera] now supported ([@rhooper]) +- HTTP: Migrate to CherryPy WSGI server to fix install and runtime problems ([@balloob]) + +Breaking changes: + +- Homematic thermostat configuration has changed and now depends on the new [Homematic] component. + +[@AlucardZero]: https://github.com/AlucardZero/ +[@aparraga]: https://github.com/aparraga/ +[@Ardetus]: https://github.com/Ardetus/ +[@armills]: https://github.com/armills/ +[@arsaboo]: https://github.com/arsaboo/ +[@balloob]: https://github.com/balloob/ +[@cinntax]: https://github.com/cinntax/ +[@dale3h]: https://github.com/dale3h/ +[@danieljkemp]: https://github.com/danieljkemp/ +[@danielperna84]: https://github.com/danielperna84/ +[@fabaff]: https://github.com/fabaff/ +[@happyleavesaoc]: https://github.com/happyleavesaoc/ +[@Jypy]: https://github.com/Jypy/ +[@kellerza]: https://github.com/kellerza/ +[@lukas-hetzenecker]: https://github.com/lukas-hetzenecker/ +[@philipbl]: https://github.com/philipbl/ +[@pvizeli]: https://github.com/pvizeli/ +[@rhooper]: https://github.com/rhooper/ +[@turbokongen]: https://github.com/turbokongen/ +[@w1ll1am23]: https://github.com/w1ll1am23/ +[envi-alarm]: /components/alarm_control_panel.envisalink/ +[envi-binary-sensor]: /components/binary_sensor.envisalink/ +[envi-sensor]: /components/sensor.envisalink/ +[Envisalink]: /components/envisalink/ +[HDMI-CEC]: /components/hdmi_cec/ +[hm-binary-sensor]: /components/binary_sensor.homematic/ +[hm-light]: /components/light.homematic/ +[hm-rollershutter]: /components/rollershutter.homematic/ +[hm-sensor]: /components/sensor.homematic/ +[hm-switch]: /components/switch.homematic/ +[Homematic]: /components/homematic/ +[Netatmo]: /components/sensor.netatmo/ +[OneWire]: /components/sensor.onewire/ +[OpenExchangeRates]: /components/sensor.openexchangerates/ +[Pushover]: /components/notify.pushover/ +[secrets]: /topics/secrets/ +[Vera]: /components/lock.vera/ +[Wink]: /components/wink/ +[zwave-garage-door]: /components/garage_door.zwave/ +[zwave-light]: /components/light.zwave/ +[zwave-rollershutter]: /components/rollershutter.zwave/ +[Fixer.io]: /components/sensor.fixer/ +[persistent notifications]: /components/persistent_notification/ +[reload core config service]: /getting-started/customizing-devices/#reloading-customize +[Sony Bravia TV]: /components/media_player.braviatv/ +[Raspberry Pi GPIO pins]: /components/garage_door.rpi_gpio/ From f3d505e4e4656e7da4ea1d0167a104664c93ba2b Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Fri, 1 Jul 2016 20:42:14 +0200 Subject: [PATCH 63/63] Update for 0.23 --- source/index.html | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/source/index.html b/source/index.html index b69fd40d900..0aabf789962 100644 --- a/source/index.html +++ b/source/index.html @@ -15,11 +15,11 @@ hide_github_edit: true