From 5602df3bba8d5f52b98083e502f5c01fa0cf7b1c Mon Sep 17 00:00:00 2001 From: Nathan Henrie Date: Tue, 28 Jun 2016 18:06:36 -0600 Subject: [PATCH 01/80] Copy rollershutter and garage_door docs to cover Re: home-assistant/home-assistant#1949 --- .../_components/cover.command_line.markdown | 56 +++++++++++++++ source/_components/cover.markdown | 13 ++++ source/_components/cover.mqtt.markdown | 71 +++++++++++++++++++ source/_components/cover.scsgate.markdown | 35 +++++++++ source/_components/cover.wink.markdown | 28 ++++++++ 5 files changed, 203 insertions(+) create mode 100644 source/_components/cover.command_line.markdown create mode 100644 source/_components/cover.markdown create mode 100644 source/_components/cover.mqtt.markdown create mode 100644 source/_components/cover.scsgate.markdown create mode 100644 source/_components/cover.wink.markdown diff --git a/source/_components/cover.command_line.markdown b/source/_components/cover.command_line.markdown new file mode 100644 index 00000000000..23778344f76 --- /dev/null +++ b/source/_components/cover.command_line.markdown @@ -0,0 +1,56 @@ +--- +layout: page +title: "Command Line Cover" +description: "How to control a cover with the command line." +date: 2016-06-28 17:30 +sidebar: true +comments: false +sharing: true +footer: true +logo: command_line.png +ha_category: Cover +--- +A cover platform that issues specific commands when it is moved up, down and +stopped. It allows anyone to integrate any type of cover into Home Assistant +that can be controlled from the command line. + +To enable a command line cover in your installation, add the following to your +`configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +cover: +- platform: command_line + covers: + Garage door: + open_cmd: move_command up kitchen + close_cmd: move_command down kitchen + stop_cmd: move_command stop kitchen + state_cmd: state_command kitchen + value_template: {% raw %}> + {% if value == 'open' %} + 100 + {% elif value == 'closed' %} + 0 + {% endif %} + {% endraw %} +``` + +Configuration variables: + +- **covers** (*Required*): The array that contains all command line covers. + - **entry** (*Required*): Name of the command line cover. Multiple entries + are possible. + - **open_cmd** (*Required*): The command to open the cover. + - **close_cmd** (*Required*): The action to close the cover. + - **stop_cmd** (*Required*): The action to stop the cover. + - **state_cmd** (*Optional*): If given, this will act as a sensor that runs + in the background and updates the state of the cover. If the command + returns a `0` the indicates the cover is fully closed, whereas a 100 + indicates the cover is fully open. + - **value_template** (*optional - default: '{% raw %}{{ value }}{% endraw + %}'*): if specified, `state_cmd` will ignore the result code of the + command but the template evaluating will indicate the position of the + cover. For example, if your `state_cmd` returns a string "open", + using `value_template` as in the example config above will allow you to + translate that into the valid state `100`. diff --git a/source/_components/cover.markdown b/source/_components/cover.markdown new file mode 100644 index 00000000000..4dab26c9d2f --- /dev/null +++ b/source/_components/cover.markdown @@ -0,0 +1,13 @@ +--- +layout: page +title: "Covers" +description: "Instructions how to integrate covers into Home Assistant." +date: 2016-06-28 17:30 +sidebar: true +comments: false +sharing: true +footer: true +--- + +Home Assistant can give you an interface to control covers such as +rollershutters and garage doors. diff --git a/source/_components/cover.mqtt.markdown b/source/_components/cover.mqtt.markdown new file mode 100644 index 00000000000..2275b83e082 --- /dev/null +++ b/source/_components/cover.mqtt.markdown @@ -0,0 +1,71 @@ +--- +layout: page +title: "MQTT Cover" +description: "Instructions how to integrate MQTT covers into Home Assistant." +date: 2016-06-28 17:30 +sidebar: true +comments: false +sharing: true +footer: true +logo: mqtt.png +ha_category: Cover +--- + + +The `mqtt` cover platform enables the possibility to control an MQTT +cover. The device state will be updated only after receiving the a new +state from `state_topic`. If these messages are published with RETAIN flag, the +MQTT device will receive an instant state update after subscription and will +start with correct state. Otherwise, the initial state will be `unknown`. + +There is a state attribute that stores the relative position of the device, +where 0 means the device is `closed` and all other intermediate positions +means the device is `open`. + +When a state topic is not available, the switch will work in optimistic mode. +In this mode, the switch will immediately change state after every command. +Otherwise, the switch will wait for state confirmation from device (message +from `state_topic`). + +Optimistic mode can be forced, even if state topic is available. Try to enable +it, if experiencing incorrect switch operation. + +To use your MQTT binary sensor in your installation, add the following to your +`configuration.yaml` file: + +```yaml +# Example configuration.yml entry +cover: + platform: mqtt + state_topic: "home-assistant/cover" + command_topic: "home-assistant/cover/set" + name: "MQTT Sensor" + optimistic: false + qos: 0 + retain: true + state_open: "STATE_OPEN" + state_closed: "STATE_CLOSED" + service_open: "SERVICE_OPEN" + service_close: "SERVICE_CLOSE" + value_template: '{% raw %}{{ value.x }}{% endraw %}' +``` + +Configuration variables: + +- **state_topic** (*Required*): The MQTT topic subscribed to receive sensor values. +- **name** (*Optional*): The name of the sensor. Default is 'MQTT Sensor'. +- **state_open** (*Optional*): The payload that represents open state. Default is"STATE_OPEN" +- **state_closed** (*Optional*): The payload that represents closed state. Default is "STATE_CLOSED" +- **service_open** (*Optional*): The payload that represents open state in service mode. Default is"SERVICE_OPEN" +- **service_close** (*Optional*): The payload that represents closed state in service mode. Default is "SERVICE_CLOSE" +- **optimistic** (*Optional*): Flag that defines if switch works in optimistic mode. Default is true if no state topic defined, else false. +- **qos** (*Optional*): The maximum QoS level of the state topic. Default is 0 and will also be used to publishing messages. +- **retain** (*Optional*): If the published message should have the retain flag on or not. +- **value_template** (*Optional*): Defines a [template](/topics/templating/) to extract a value from the payload. + +For a quick check you can use the commandline tools shipped with `mosquitto` to send MQTT messages. Set the state of your sensor manually: + +```bash +$ mosquitto_pub -h 127.0.0.1 -t home-assistant/cover/set -m "OFF" +``` + diff --git a/source/_components/cover.scsgate.markdown b/source/_components/cover.scsgate.markdown new file mode 100644 index 00000000000..7d8542f5b64 --- /dev/null +++ b/source/_components/cover.scsgate.markdown @@ -0,0 +1,35 @@ +--- +layout: page +title: "SCSGate Cover" +description: "Instructions how to integrate SCSGate motorized devices into Home Assistant." +date: 2016-06-28 17:30 +sidebar: true +comments: false +sharing: true +footer: true +logo: bus_scs.png +ha_category: Cover +--- +The SCSGate devices can control motorized covers connected to the BTicino +MyHome system. + +To enable SCSGate covers in your installation, add the following to your +`configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +cover: + platform: scsgate + devices: + living_room: + name: Living Room + scs_id: XXXXX +``` + +Configuration variables: + +- **devices** (*Required*): A list of devices with their name to use in the + frontend. + +**Known limitation:** it is not possible to know the current state of the +cover. diff --git a/source/_components/cover.wink.markdown b/source/_components/cover.wink.markdown new file mode 100644 index 00000000000..be2c0394605 --- /dev/null +++ b/source/_components/cover.wink.markdown @@ -0,0 +1,28 @@ +--- +layout: page +title: "Wink Cover" +description: "Instructions how to setup the Wink garage doors within Home Assistant." +date: 2016-06-28 17:30 +sidebar: true +comments: false +sharing: true +footer: true +logo: wink.png +ha_category: Cover +--- + +Wink cover / garage door functionality is currently limited to view only. Wink +garage doors will still show the current state of the door, but control has +been disabled for third parties. If you have a Chamberlain garage door, and +would like to control it via Home Assistant, please contact Chamberlain and +request that they re-enabled third-party control. + +The following quote is from Wink. + +> As part of our agreement with Chamberlain, third-party access to control + Chamberlain garage doors has been restricted. Please contact Chamberlain + directly to inquire about permissions. + +~~The Wink garage door platform allows you to control your [Wink](http://www.wink.com/) enabled garage door.~~ + +The requirement is that you have setup your [Wink hub](/components/wink/). From 1552deae74c1fd6ff7116bc43a9e4fc3e12f1f1a Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Sun, 14 Aug 2016 18:38:30 +0200 Subject: [PATCH 02/80] Add initial blog post for 0.27 --- source/_posts/2016-08-14-release-27.markdown | 49 ++++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 source/_posts/2016-08-14-release-27.markdown diff --git a/source/_posts/2016-08-14-release-27.markdown b/source/_posts/2016-08-14-release-27.markdown new file mode 100644 index 00000000000..460c8c4aeab --- /dev/null +++ b/source/_posts/2016-08-14-release-27.markdown @@ -0,0 +1,49 @@ +--- +layout: post +title: "0.27: " +description: "Automate based on check ins, slow internet speed or just stream a camera using FFMPEG." +date: 2016-08-13 12:00:00 -0700 +date_formatted: "August 13, 2016" +author: Paulus Schoutsen +author_twitter: balloob +comments: true +categories: Release-Notes +--- + +It's time for 0.27 and it's again full of new features and fixes. + + + +- + +### {% linkable_title Breaking changes %} + + - The [NZBGet] and the [SABnzbd] sensor were updated to following the same style for the configuration as the other sensor. If you are using those sensors, please update your configuration. + + +[@abcminiuser]: https://github.com/abcminiuser +[@balloob]: https://github.com/balloob +[@corbanmailloux]: https://github.com/corbanmailloux +[@Danielhiversen]: https://github.com/Danielhiversen +[@DavidLP]: https://github.com/DavidLP +[@fabaff]: https://github.com/fabaff +[@HBDK]: https://github.com/HBDK +[@jnewland]: https://github.com/jnewland +[@kellerza]: https://github.com/kellerza +[@mtreinish]: https://github.com/mtreinish +[@nkgilley]: https://github.com/nkgilley +[@open-homeautomation]: https://github.com/open-homeautomation +[@partofthething]: https://github.com/partofthething +[@persandtrom]: https://github.com/persandtrom +[@pvizeli]: https://github.com/pvizeli +[@robbiet480]: https://github.com/robbiet480 +[@sdague]: https://github.com/sdague +[@shmuelzon]: https://github.com/shmuelzon +[@tchellomello]: https://github.com/tchellomello +[@Teagan42]: https://github.com/Teagan42 +[@turbokongen]: https://github.com/turbokongen +[@fabaff]: https://github.com/fabaff + +[NZBGet]: /components/sensor.nzbget/ +[SABnzbd]: /components/sensor.sabnzbd/ + From 5ad7cdf1109089d49bf7bcdec1fb6c35a60df37b Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Sun, 14 Aug 2016 19:59:48 +0200 Subject: [PATCH 03/80] Update for migration to voluptuous (#785) --- source/_components/sensor.nzbget.markdown | 28 +++++++++++++++------- source/_components/sensor.sabnzbd.markdown | 28 +++++++++++++--------- 2 files changed, 36 insertions(+), 20 deletions(-) diff --git a/source/_components/sensor.nzbget.markdown b/source/_components/sensor.nzbget.markdown index 90204ace3d4..16104f19ae6 100644 --- a/source/_components/sensor.nzbget.markdown +++ b/source/_components/sensor.nzbget.markdown @@ -21,21 +21,31 @@ To use NZBGet with your installation, add the following to your `configuration.y # Example configuration.yaml entry sensor: platform: nzbget - base_url: http://192.168.1.18:6789 + host: YOUR_NZBGET_HOST + port: 6789 username: apiuser password: apipass monitored_variables: - - ArticleCacheMB - - DownloadRate - - DownloadPaused - - FreeDiskSpaceMB - - PostPaused - - RemainingSizeMB + - article_cache + - download_rate + - download_paused ``` Configuration variables: -- **base_url** (*Required*): The URL to your NZBGet installation. +- **host** (*Required*): IP address where your NZBGet installation is running. +- **port** (*Optional*): The port of your NZBGet installation. Defaults to 6789. +- **name** (*Optional*): The prefix to use for your sensor. Defaults to NZBGet. - **username** (*Optional*): The username to access your NZBGet installation. - **password** (*Optional*): The password to access your NZBGet installation. -- **monitored_variables** (*Required*): Array of monitored details. +- **monitored_variables** arrary (*Required*): List of monitored details. + - **article_cache**: Number of cached articles. + - **average_download_rate**: Average download rate + - **download_paused**: Paused downloads + - **download_rate**: Current download rate + - **download_size**: The size to download + - **free_disk_space**: Free disk space at the storage location of NZBGet + - **post_paused**: Paused posts + - **remaining_size**: Remaining size to download + - **uptime**: Uptime of NZBGet + diff --git a/source/_components/sensor.sabnzbd.markdown b/source/_components/sensor.sabnzbd.markdown index 68bdf6035a3..ae8536d5bf3 100644 --- a/source/_components/sensor.sabnzbd.markdown +++ b/source/_components/sensor.sabnzbd.markdown @@ -23,21 +23,27 @@ sensor: platform: sabnzbd name: SAB api_key: YOUR_API_KEY - base_url: YOUR_SABNZBD_BASE_URL + host: YOUR_SABNZBD_HOST + port: 8080 monitored_variables: - - type: 'current_status' - - type: 'speed' - - type: 'queue_size' - - type: 'queue_remaining' - - type: 'disk_size' - - type: 'disk_free' + - 'current_status' + - 'speed' + - 'queue_size' + - 'queue_remaining' + - 'disk_size' + - 'disk_free' ``` Configuration variables: -- **base_url** (*Required*): This is the base URL of your SABnzbd instance including the port number if not running on 80, eg. http://192.168.1.32:8124/ +- **host** (*Required*): This is the base URL of your SABnzbd instance including the port number if not running on 80, eg. http://192.168.1.32:8124/ +- **port** (*Optional*): The port to use whith SABnzbd instance. Defaults to 8080. - **api_key** (*Required*): Name that will be used in the frontend for the pin. - **name** (*Optional*): The name to use when displaying this SABnzbd instance. -- **monitored_variables** (*Required*): Array of the monitored variables. - - **type** (*Required*): Valid entries are: *'current_status'*, *'speed'*, *'queue_size'*, *'queue_remaining'*, *'disk_size'*, and *'disk_free'* - +- **monitored_variables** array (*Required*): List of the monitored variables. + - **current_status**: current status of the SABnzbd instance + - **speed**: Current speed + - **queue_size**: Size of the queue + - **queue_remaining**: Remaining elements in the queue + - **disk_size**: Disk size of the storage location + - **disk_free**: Free disk space at the sotrage location From f7a31f435eb900b5119ba6c02121b8ddf3d3229a Mon Sep 17 00:00:00 2001 From: Robbie Trencheny Date: Mon, 15 Aug 2016 11:18:19 -0700 Subject: [PATCH 04/80] Support passing an email address linked to Gravatar as the picture in known_devices. --- source/_components/device_tracker.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/device_tracker.markdown b/source/_components/device_tracker.markdown index 0cb71ebb9db..da46cdae60e 100644 --- a/source/_components/device_tracker.markdown +++ b/source/_components/device_tracker.markdown @@ -34,7 +34,7 @@ device_tracker: consider_home: 180 ``` -Once tracked, a file will be created in your config dir called `known_devices.yaml`. Edit this file to adjust which devices to be tracked. Here you can also setup a URL for each device to be used as the entity picture and set whether the device will be show in the UI when in the away state. +Once tracked, a file will be created in your config dir called `known_devices.yaml`. Edit this file to adjust which devices to be tracked. Here you can also setup a URL for each device to be used as the entity picture and set whether the device will be show in the UI when in the away state. You can also put an email address in as the entity picture to pull the [Gravatar](https://gravatar.com) for the given address. Multiple device trackers can be used in parallel, such as [Owntracks](/components/device_tracker.owntracks/) and [Nmap](/components/device_tracker.nmap_scanner/). The state of the device will be determined by the source that reported last. Device tracker will look for global settings (`track_new_devices`, `consider_home`, and `home_interval`) under the configuration of the first platform. From 01cda98175472b4a8db31fe34718e004bfc68c15 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Tue, 16 Aug 2016 09:26:54 +0200 Subject: [PATCH 05/80] Sync --- source/_posts/2016-08-14-release-27.markdown | 8 +++++++- source/developers/credits.markdown | 4 +++- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/source/_posts/2016-08-14-release-27.markdown b/source/_posts/2016-08-14-release-27.markdown index 460c8c4aeab..f35dfe0cad3 100644 --- a/source/_posts/2016-08-14-release-27.markdown +++ b/source/_posts/2016-08-14-release-27.markdown @@ -14,13 +14,17 @@ It's time for 0.27 and it's again full of new features and fixes. -- +- [Fritzbox] ([@DavidMStraub]) +- [HP] ([@Juggels]) ### {% linkable_title Breaking changes %} - The [NZBGet] and the [SABnzbd] sensor were updated to following the same style for the configuration as the other sensor. If you are using those sensors, please update your configuration. +[@DavidMStraub]: https://github.com/DavidMStraub +[@Juggels]: https://github.com/Juggels + [@abcminiuser]: https://github.com/abcminiuser [@balloob]: https://github.com/balloob [@corbanmailloux]: https://github.com/corbanmailloux @@ -46,4 +50,6 @@ It's time for 0.27 and it's again full of new features and fixes. [NZBGet]: /components/sensor.nzbget/ [SABnzbd]: /components/sensor.sabnzbd/ +[HP]: /components/sensor.hp_ilo/ +[Fritzbox]: /components/sensor.fritzbox_callmonitor/ diff --git a/source/developers/credits.markdown b/source/developers/credits.markdown index c759e037389..f82be1d4497 100644 --- a/source/developers/credits.markdown +++ b/source/developers/credits.markdown @@ -62,6 +62,7 @@ This page contains a list of people who have contributed in one way or another t - [Dan Sullivan](https://github.com/dansullivan86/) - [Daren Lord](https://github.com/Xorso) - [David-Leon Pohl](https://github.com/DavidLP) +- [David Straub](https://github.com/DavidMStraub) - [Dean Camera](https://github.com/abcminiuser) - [Dean Galvin](https://github.com/FreekingDean) - [Dennis Karpienski](https://github.com/TheRealLink) @@ -82,7 +83,6 @@ This page contains a list of people who have contributed in one way or another t - [GadgetReactor](https://github.com/GadgetReactor) - [Geoff Norton](https://github.com/kangaroo) - [goir](https://github.com/goir) -- [Kevin Gottsman](https://github.com/gottsman) - [Greg Dowling](https://github.com/pavoni) - [Guillem Barba](https://github.com/gbarba) - [Gustav Ahlberg](https://github.com/Gyran) @@ -119,12 +119,14 @@ This page contains a list of people who have contributed in one way or another t - [Joseph Hughes](https://github.com/joshughes) - [Joseph Piron](https://github.com/eagleamon) - [Josh Wright](https://github.com/JshWright/) +- [Juggels](https://github.com/Juggels) - [Julien Danjou](https://github.com/jd) - [Justin Moy](https://github.com/justincmoy) - [Justyn Shull](https://github.com/justyns/) - [Karen Goode](https://github.com/kfgoode) - [Keaton Taylor](https://github.com/keatontaylor) - [kennedyshead](https://github.com/kennedyshead) +- [Kevin Gottsman](https://github.com/gottsman) - [kireyeu](https://github.com/kireyeu) - [kixam](https://github.com/kixam) - [Kyle Hendricks](https://github.com/kylehendricks) From 8d156fe4f4c9a646ca34fc70e1754976b8612ed9 Mon Sep 17 00:00:00 2001 From: Juggels Date: Tue, 16 Aug 2016 12:04:08 +0200 Subject: [PATCH 06/80] Provide documentation for HP ILO (#789) * HP ILO component * Small textual fixes * Textual updates Also refer to Integrated Lights-Out instead of only using HP ILO * Changed ha_release and ha_category Processed feedback from @balloob: - changed ha_release to 0.27 - changed ha_category from Sensor to System Monitor --- source/_components/sensor.hp_ilo.markdown | 70 ++++++++++++++++++ source/images/screenshots/hp_ilo.png | Bin 0 -> 16510 bytes .../hewlett_packard_enterprise.png | Bin 0 -> 18610 bytes 3 files changed, 70 insertions(+) create mode 100644 source/_components/sensor.hp_ilo.markdown create mode 100644 source/images/screenshots/hp_ilo.png create mode 100644 source/images/supported_brands/hewlett_packard_enterprise.png diff --git a/source/_components/sensor.hp_ilo.markdown b/source/_components/sensor.hp_ilo.markdown new file mode 100644 index 00000000000..fdaa0e31284 --- /dev/null +++ b/source/_components/sensor.hp_ilo.markdown @@ -0,0 +1,70 @@ +--- +layout: page +title: "HP ILO" +description: "How to integrate HP ILO (Integrated Lights-Out) sensors within Home Assistant." +date: 2016-08-15 19:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: hewlett_packard_enterprise.png +ha_category: System Monitor +ha_release: 0.27 +--- + +The `hp_ilo` platform allows you to do an API call to the HP ILO (Integrated Lights-Out) sensor of your server, and use this data in (template) sensors. + +The component will output the ILO information in the sensor attributes so they can be accessed like that. + +If the ILO only returns a single value (e.g. a temperature or state), it will be put in the state field. + +Some more details about what can be retrieved from these sensors is available in the [python-hpilo documentation](http://pythonhosted.org/python-hpilo/) + +## Example +

+ +

+ +## Usage +To use this component in your installation, add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +sensor: + platform: hp_ilo + host: IP_ADDRESS or HOSTNAME + port: PORT + username: USERNAME + password: PASSWORD + monitored_variables: + - server_name + - server_fqdn + - server_host_data + - server_oa_info + - server_power_status + - server_power_readings + - server_power_on_time + - server_asset_tag + - server_uid_status + - server_health + - network_settings +``` + +Configuration variables: + +- **host** (*Required*): The hostname or IP address on which the ILO can be reached +- **port** (*Optional*): The port on which the ILO can be reached, defaults to port 443 +- **username** (*Required*): The username used to connect to the ILO +- **password** (*Required*): The password used to connect to the ILO +- **monitored_variables** array (*Optional*): Information to be collected from the ILO, defaults to `server_name` + - **server_name**: Get the name of the server this iLO is managing + - **server_fqdn**: Get the fqdn of the server this iLO is managing + - **server_host_data**: Get SMBIOS records that describe the host + - **server_oa_info**: Get information about the Onboard Administrator of the enclosing chassis + - **server_power_status**: Whether the server is powered on or not + - **server_power_readings**: Get current, min, max and average power readings + - **server_power_on_time**: How many minutes ago has the server been powered on + - **server_asset_tag**: Gets the server asset tag + - **server_uid_status**: Get the status of the UID light + - **server_health**: Get server health information + - **network_settings**: Get the iLO network settings diff --git a/source/images/screenshots/hp_ilo.png b/source/images/screenshots/hp_ilo.png new file mode 100644 index 0000000000000000000000000000000000000000..acc7e9d25a13bf8a7999ee5e35903ec1b606dc8e GIT binary patch literal 16510 zcmeIZRa6|&!mW$bc;gO@yF+kycMHLTdvJFPPH+uQ2$}%F0*wS%X$?hbX^6%<7i&95D;OAq$aG(19X!>qUK8U;1{rjFdG6y7!M!|egLmV^xRSI? zk`mY&l8BOsI;k-zk}}wmi0Cm0@QR3tc(AR~KX2R5o+g4PPTZ|`7Y+{(E845tE4*OL zEa_!sB0g5af-vG@zi`cLc)j!57)XF8;)GR#B4sJ8PGT?W=~=@t1sA-0uSSQrJ^J&; zVr2HE`sIaygmTT+1qQ-`;QvR)KbpD)1%~&tw~P)tOct!nI3Xo&Lu4jcg)$P10HfR- z`Q**{Kyb6zJ+&m{^{Ndt3m+0MK`r|SUSj#n1o_@c(ma(M#Iw;{EYv*4UMP&O171N4 zrrwK6XtStj!^j7=yT|0keDI}f;ria;gUsbiocF*N`2kM&gO7o!aW_Vtk^1X>(QZNOZP^1o)Xn5Pqoh--i_?sHX+zB zc;{3H+0;bY%6OKJ_1|yUGw5WUzR6x|5`=OMc(u>7FfUuri7~UY_VqZeuOHKC-(#ZO!?v|z-?P>$sJ^hdjm7GvC~WhY6TyLgBx_~~2z zxK|BFjPy2XaG9_-%KA5B(r+u&L;*6cj5+uG0YqVV#; z{Mgj_Wptm`L>7L zm1RBZ4C>@c8Q_5Sk`QsblyY9dpX=n@9g`0g7n;f}wJDu@kv}UnM$%k*M&jy3;W9## z;uoRjV*V)(i83NxNC|9B= zp1^}Fq|F&7>&r_DN*f%M8WZ}}V)rJ=`n=)FYV&ChvoDlY~nqqD5npCP@~1i?kpyp3Ja~6)D;9Q;ZQ~I25%=TZ2vq z%{bCo;`XD7E!YoHRf6Xy|2`qA9JaQAF=; z=<*V%M(@fgLoVzhn&tgVXeN<=w(e{1$L$k%5Z(*=!F>;TPAKZDx9sDrBC?Ff9iYTb z`T!BFtj?Y6JxnB_)g*ri3`!Ovl>PG~~5)m1qvfV5MdcX(qr7i(&Me9q$H`trbIYQG;EpHly=KB$QX=s5R)on zS&Vf7X^5Yf3Xpr0l2xOVC{x{0OPA4=^2|SE`X$0A*aT@}=Zn3E@g)9@afp3rMIuB( zOro5lk@F@;D90qn?loBrq(-a;%Sq@&aPgs0+k=ywGM_!4-)ODN%Fps1 za!+>8a{Y9ThTe#NiH?bmf^LQWjc9<_TuxHXasWIaGT;#38{d^BkkyzSko_g=FuQ>3 z$;{ev*5bx$+}hcU!s5BVXRLSvXH*M1HGG+YKgK+4KSna)m(!H%S&&emnlP5jmU}|7 zwzQDd)m8KTP&ML+eYhqoBVrg zgTb*cO)#w?UnD}HD4`Uglwnd~iDB{xMu-)WS&{LPsS)fb38>nr4yf{|`Y2uC?)Qvw z2yr?w=rP4I_%iS^BQk~Wi~8{T;rf~TkovhcnK#WhbvJ2n5Kx?A1!9$Pa8u(`ty4dx z)})%2-j%&6MJ@F!4N_)Nh*l`f45E={v84XMJk5Tks;4t+)U0w7NmiB@x-8lHs#VsP z%h&YJ^d$%WKHeyPBBKYhBO^1D9MdezIO7G2FLOFe0^>A`5z`*CxK4NFekGaCfrg>3 zu1YsJCYFlJ=YhTNm2ZO&5+R zjoACPw_T2iM!N*A1ltnR(q-%Q79uX)hbMaDas+LoY3=e4*2UJE)+f7+?zmT5yCnp0 z1m*-a8PKWu%a$D@7OKw*pL1so99WLHkCI+-zj|==b3AYqbv$y^KlV7jJYJngTN+&S z7Sa%G5u6cvbe(Z$^&s<3eYbdaJ)iwc@Mr57;@;-E*2$OSsP)KrtuERghTVS#U(Ftc7p4Ff#vn*`eEL?jhnfFDXMkWg@<=&86s! zLEN)Ts>?3e^JVLq2Q~+m4)!XvEwloTFg!kN9N`Jnj9!bfitdJP2ckp!js6{5j+B6G z7Jr<$04zpCMUaBcMe&KmkgOGKMWRcNA$ykK99JZ7;(2coX^Azc)@Rq3-v1Qu9n)1H z@d2FiGm|kVEB%h?2joDCTWCSJ)tz#pGc6GJq3KqiA_UWid|zb9oAYTsS~@D4y?k9e zOuL{|se+)Ky-cvYslvUKQmIhL(dSMJiHnBWayw=*g(rJ|6gv9M+FCtTy|y5>ko2z9 zUFqGd`*(Lr@^nGJ%l%!hF3Tt1_r4WZ4S&r4^djaU5~A6men72A%%yZ;+GHPQf6aWu zc*>T-A?OYlOnuXLr}*`QQ`uwLpR%J0I5mv)gEYRhubDRKFO}z?e7s&Cc{~v(@(9`l zH0x zGiCG2Jee!(SZ^lVr}Q{9O&6f^$Qc#dN~s(p5zK8?mgr&vClJZ-(wcrur-vp-9aA5MBr$s*=_puO)9RD53AYTD4X z^J!|j88$uirdu@pTcMp;`|X>vKjDM}928iF=opwwSY2dpq{P7oSMTn1hd%euxz)|B zl9BYsTX&TO8F3GY>HSvQHtucNysJU^9^0w7^n+h}RonfnWUVe(;YHz3!#3_*#iHH9 zK_YQ@cBtXp0+u_ryTcVR&{JkG_Vd)W?vcY<*mO^He`WueOY53p=N#(~4o`L?wxpVf z+UlpF=O33>n^l+g6C8u4g|nM;ZbuCKGOrecbDt?z&{vk@A+jmWrif%#Q?oJqil`eK(DWL+TC{U&j zsxgj`6>fOHfVXfZxZBd$a^-{c=lqcwZal18s;I}ATBw+;IL-pAPnj-^?pGOO*{UM{ z5Ls$d##YJ$Yq0c2eQ^^``xNqyUpj)W6JN*TmFUi)7|ABd8n02)jor~c*kkozb@uag z9Va8Fh?xxcEU)=1L*5gf&-``um5s;sIbXWxzsxr*Y70X#j}jfmp^?k!`*N*>-@O+C zr!1jY><4Z7P2Qi>n_Y?vySj`+)IJ6z+j6Rdlo@r2$eQuQh`GSNJcj|-4O!t0#BO6K z`!Z{#?GMnPZulzX1gzHbzH$m>7BzJ-)?goInzI<)atQ+2S3{CJQ)KvJ@efMtDqZ?DM+v7tx*!@59)5Ye>e7qO*J1%mpx*y ze|zD)ea6t~ZsFl?qg~XTEO#>dd9GYVSP@kYO8XqOrX|WFYhkqD)yBc(KXWWSG7^N ztum?Ytm~$bCh1L*BOmCecPsC-Hra(G*vKf-GnvhJW#3%v<#;25oYwn(i=o1N?}7by zt(EhF|A%FG(L9mg3R)(ktI4<36Ui=_reA|SB^1s4G<@paWArLDi0E)oaIq~@lqW^F zC>qM#ZZ}QoRp`bUYEDb$CwwLDAh%S`c=8evtjn!*-_d-$7Vlr+CC>di1w4sSJKyep?l)OQ%awQ_}{I&Xzf&88`3m{CSrk2*HK7mt zeeJkg{0s%EiK?odg%2^39fjOH0`fc@Plg+D>-tr7;)G)Ci2?rCPXk&zm)-c$lv3h) zL0;ALPg+Ja)kjXF$M>c^_pF^K)X}5Th83%q8=wxi{)~b zyXKuny5{fHoaV)^qO1O$l?)E+yu-XZe9=v*je<=}9;}`w2T1$Qhq?zw#L1+~{L419 zF1!wJtTwHO9fchA9Gx8`ttK6^t;?*N-maM8I`hps7&Zv(5zT z2hDwRrt@dJscj+j1^Mv$+WU9X)A?NZeV4gOfiaa9rwdMp*^Ho;*5jyjt>bRFso$X&@xoIrfX55W!P8s zrcGD-oxAqP#H(~t?2|HnQsG7Cm5vpEn?D8SdkO4Ir#l6yCav-u_lYN94USkbt#?;aP{1k|3$1Zf&4*g$+_r%Y(aw+G$`phgX=vu~KEz2-Ct7 zOHpWu=)f39QAkm08l-U!qvI!3NnCcQ($>X=yFj}pqxQG<730b1aj!5xzh~>Or6QiC z;imgS^6u3ooCu;=9GrTJx*6S!#;~>*_*d+S&ae*ur-aJ2pM5{IrcH{bOGrzBTt&qNz&NjR$KzT6@gYOWauSHVm}H$SRV`Afz1bjoDO%*x_gP+OV~lF~NPDbnhn z?TKl4#c-8DFbWIa`TSAP*nQ)r=Dgpq3zxH1EnBE;ukM#;!Ae>w;5Tr7{7!e(_Z}_# z7YkvyLznSzSMi#}bc@f4<+R7ho281IPl^4)Dz_eI?cV-3^EdWl8Gh84I&PfDe9ftBolyOAgw8{x9>F;+S9< zHZxce3A`a#Pcww$5C#z94+vUX*lSmK5hRyxxQI{#sspDp1}Rw$ni;G>InAPN4faaj z8NM0hEVP@DiQX$)Sq~vU5KWk3cRY0`M=$If80Q$3!s>)K?>jI#!n#zb)ZL=ZWV4D@ zAgQ=63h`Y?%_DKAW9-o?nJs?k<*-AUWj<*?0RVg7DlZ{sd>@+Z>gwqET5k zGFB|3rq>fomrK6$`U3HS7edIbjV&8DLT!bY`!{5?o_@dlZ0-^67w?Gw2qTvwtzwj; zU!b0VY!VdS2awj_YLm+2Q>L5?#4-pvuR&oW!}ql3wc@5OqCfEL@+ca95LA>eyVCgM zf>uY+pFUK0r{~wi+AQ_^y6)>Q-7kC07LAzuj`$Ve{GM;w`uF3s1)1wjR<<&R$SITmbl^RxvHW{!oJd{aj&Y&QvWZ|BrqI$plF90l`2kY|Pt_h2m~u=n9u))Vi7#J^m!NaFf{ z29iD1LlCIgY&p`<(^u(zm;)CIVcAm5G3g3hM2)5#V!+!Oz_I%npP03FA zPM0*Gy+O)E2I4GA=T2pmepLLWYOI8-e57Kd;?iR_X4_NR$J$d2J?zdHqUhb|w;QzT zb{e-FcNnl4ccEFQB4YE*Cx#wjdl&wO_W~fo&)V~yxd(YE=tcY&)t3p zp4AZ~PS!RRI^K@ z7cQe`P&TNag<(p`PE9wRMNdRfCQwP^*MDOujHlBJgkPmk zGYhvolvZMh>V^5f0>Z*ce@35W??11GZBZZOPI!N&TP@q!DPcKg@f6ny%DZp4pT4je zVcxQzu^%~H8%uCk_`-z>T}jS& z5ni&v;DgyQTJwQ!HOpRibu~N^I*bfDVbmEwfCwSqPRGE*KvhM^(#470{H=?H6}ykq z-&_F(M#M)5c?g=fBzY$m5<&3 z?aA5wzo!M9AjjV$99-<29RH_npsL8Y!9Ldz2^w_ zl8`DST)m~{*E*tC4`{QS-hN$hn(!?c8+{{qJ1XqG>VMkm%`ZlvsvrXfBOt&^LXW^P zJDvn_-C-dR2nYlh9|CUiK#-IGj&|U|Qn_*jx>_{=|AC~;{*5fXK6VW(WV$a#O@aVR6;SKC3#yNQ=CQb-lVBU1$W?#ldANhpzBG7AS zFcO^D7Aem05XV!fmg-$G0R8(~Oif(a9IQUsaH1J->#bzBEI#XlB|MXf70oI#3#Jk#U zYe1*YM0DEPX$Kh@d3w$?Se4IVwzSoK@9=k_sK4BIzu(0jzE@f))UqwXl%jq*6Z#Cm z&_5=U3u|R_TY=i*-~B$+CE>9~PiN5|&m!Bof=9;G2!%u3-x+G8MKT+nENXl^27EapgKw-q;fA`kWogUcgOaOJdmqwU!l&QAvG&cm!S zJbqLvwu)d9dvEMYlW=#sg%yF(_kTcd3Cj=`Axe*tugo| zXa#LBrqynmz9*bNarYejQxmx4l3kCNXyP7k*1r4ecSSO&7q}Ah9ST*Ul{9Itb_S04 zQHb8xJBNsPY@aNBb8leLul>0@mV0pj`zRt&Joq`F&3zAZZ>2LZ_lR01;-LoyQL^(3 z{%?Ng<)M569-M&nY{+QXCDH!5MMP#Uzspn@BHG=vuK&i!P!j}95i0)j_@P`STS_(e z6-HtIT=V6|+iv&gi$Tgy1`QTz0&W(@$RbC2HLo?h!w{Kd-{T=j1wGzzbrCW~hzSKf z`j7~DFg7`_n>0V#&4xjn%?`>Ss^uf5@Yw}>a;^1eIG_U8O&g<`fd>f*& z{v(+j6_IF!Q@znxzYi6apF)ew}Z{+R6CyVcWbBVp~7e!w` z3?gDSePow8;AWvDx6}Qsx07<;6N%R5r*g#UNAn6DZUE0^voBV~jO}%!S&x*tNOjQD zy&J=uHV>vy#!Oa2DFJ;rErbip8BaOFm`TPulkc0&@zdYgjGBLrX7jWXSz~2s^?Vld zJ|**>YV$mr0&dQO{y0KMVId48(qEcE4=4QhzvoO_pEr7=KdBdr&9u7Pu%p4r+sMUO zU2gyIxZGAOI1L+0H{*n^M|WHQs?rt7|L$>+I-F4gF~bi9)&h>m7OUZxtc-??q;sTu zqexVI+wnX>GOAc%SbEZ_oT8+h_Q`#?0@P-e7)m)zZVx>&~uonE1&#YV3 zr}lA7u1O^m_byxf%q_Pc{^_KNoGSQN=toY^^jZ*N3De)(D@{B&s7kMfBx(7)QPM++ zbGSnBL)2`ou`({b%E#_-`Ek&zf_>wB@?R?WXm_RDO7WBY25wq0fFnETRC%6ra za<$6u9I;2>E(F>we$%&u@O-_4%&q)krXgj-cD;W+`dTf{|8tvCW`l}HLHLZsYocr( ztKmMHx4>yIG4A(5!w%BAy2OFi5-)B*+b!?gP+wy^+2uVkQ)`?nZ|Q-T7M@u}V3+r6 z=Qz-kIh*-c^hwS+bv-CNJE9~Ej8mSUT&nm%Yj-po#enh02L>$v+m@)zq=#O!ih9XF z6((5(SO*Z4hJwoip^h*6WS~AXiJ0+_DnrEU*kG~Elf`N@Ych>ivhreU5DOPmGVt0V zf{hbYZS*Y>jLJ3cShL`qfoZI?4wb0>&Qq0l5!2Fwv-MCmHJYfo)N4^b8QLhAt1h6y zy!#$TAz)pzXZm=m42?=AG#OsRHG(tEtnV8=FesbNzRFy&KtGC5E>)ckG#d{?hu%pK zbP)sE_tkfIcLp`@VVU)+4ahin3Aiz>2RsA`5kg=@Oa+vD>dpn-chQC6vNot|oj529 zJifgBA>f4(xF2rN)pL&}VoG-&gPj2#)$m;#>J_|aB#@x0r}Mu#eypXTr@+@dixZNQ zBed@RdtFX5IVnVaFQQJxd?gQ3U%r3*hz{#JvHDhxcHv1oxvn|k{HA2@4O!bV9S9zH zV&$V4MGA6S&>&&L4IT<8fU(FfHqI?*JuNB9Wn=tphLR<*3O{bi$YoB&xq>{*?)NIq z+z`21_Q5`)L}_67z8ht1NhmggM2oA14x`$bj$1;|TMo)`Fab5Tx|}UIOrvlzcW{%c zhZAI83OrEa4J(rp(3HSleL^V>ox@i%B_q;|zT81D2WA?s5&q4xtBh~z-a_Uy|K3{f zi>Y9-Fs3Q`nj4%zXlR5SCfhBq6UhX9xZt@gBlPQ+;IT+4*hD-m^F%uAVyucRsRKe! z)Rd@8lz;U@;kXBSKu83vZPaQ`WDS!ky6BWVFcFTxW4%u2JkApRX`eVnpxXn>->HEj zBopOAjy1r-o`o7@APwU{J6)kZC+@?rJ`cgz0QvuMEr)}LZ(XBWz8s_sb}byV5JGsO zEW+OJy^*Na-GH~j2&-w_uiO9Z8dZ-1BX2n$j^=kxnd!ftj%u^}v~p){b%G;!&2c_Y zbJmfqb7)XXxX< z!8TW^87_)g?ZXlq&#p@-KZ;r(i5gcM;~6fKKp|-HGmHCXe=-~epC>kzPWh0zJ{;+H z10k7-k`BUcQor(XKsOvG5)teC*|tva!(vGS1nD=u2>eun`s;-?bJ+(2`fho32#5J@nL{ApV3`Jqcm&D87GV0%iu!Z_6*$BciSW_?>$;bd|TGHN2Kjnmt(h8%tT!oz;pC z!Cg?mXl;T2kwS%-KKg|H>zNiA_xFXecMIm_M;iKIlUV}6-mS)TtOxS+%EK=<(KUh9 zlagO1i>5VM%a*$cVSOf2@CCS56;@kJGjRpdGKSJagOgFa?4}$B2%ZM3NzyQB1A5SU z=#{++Hz>b`AtwPZm?=Y4Asj4kUpd;n&m;Im2MG6q#1LSKA4cu$y~W3Qhxb?8L;S#i z_SN4V7WdFl7}ESF_~)p>CkUAC*aRuTpLQ3K85aM^WLLCMw9)?(K&?D<$8_86du;K4 zYDhxS0S@5Np;i6Y0EdJGXc>(nHH#7GG%SP|PHNq{QX%IbBAA2#^gt*=%k`g{JOC$* zX{7M}hbCbD(u9wKMe)C))*w)5ZV|QJzfOH%fmTe;llx@;6&(eG;rOLxr~X45aDQoI zohml=U(qZo2!eCe`%)C3Z^$|#(29SzG!8D}Uohd628M=?uZa5(Y|wyKZo{H!=~4d{ zHH!jzfiDb!&aNLquHhG0S22&y0fLc0n!aP#4hvXM0(tE`+od@kl!p6*>Td z=*x4wT2_|6xlG3s^VmM#U0}{#T!)>lelJ16r3as?%7E|qAz&OFoP#9~me7ZR#Q8UE zc(Hbl6;)}BL3s*m5ucemgI@{&0W3e3!&egU=Th^NR+;TkG8G;P$zc`!n{s5V?{Wzw z9{WG3E^lwWvsbh9A|BvE0kRovWSZ)Pn7xNy?M>KSZ1&HzxLGcC_|08_i$MvpH%62G^^7U6nMD$T{tv2FFhvyuo~&ZrOR66RAep|UwBW{+}BcNf^yy= z|HEJhjakxwb*prWfL6Y+?F^@v0Ps207mK@qmP9W6 z>U+SSREYxp+BZc2v13(K3>F`-jc~8KmB=~N7{SlbgDL_CoX_u?$G&>q9B|~5< zdRN`|#v8^+`JGGeF1EfRV+p50Y37@qNH@enC8tUi1pyv2UPeg?KAz`71%W;Sv++() zcaDU8Xiy^D4;hQ16rGq`rqciE-gEJb6vXwQP%!ZR+T&!AFYFlr6P%$HY`0cqF`H== zdKccHog2$l&&&H0;pVb{P!+sE{$}U7PY$>He?EWnxO-&FX}Tct%x?^R9dDqhJxf-u zt$%i~v+SwWWUssU-JjpM#Z}S;XPUM&bVdUD`|y{gl(_#5Ym@C{7y+vR)CvGm<){1K zB>;>VLNuq%<3Nh>FZR&~ zs@y^#fuppXR^fXv6EFyMJ<=6w`NituPifynfE6>zP#7Rpp&o4D5hWjD_@l*bYk&L4 zhnW(2tb)r1i<6`pf5~jga3r@tbn2{MjrPBkZr_*%=L>n-0yE;V*@trfcr}s!S`ZbE zB3c5V`K*p~^9}wBHq*{Lt#TE`SX_rmL?VdYzY-ma@j}0b3Uops$hrd2g->wBu zthP@!aDVE(EMM{mpAZx+mVY(;LX7y>oK7$E~^~@`7HYEIfCx=g_HuWA&PeZ$8PWK z*<6`u+yDj%-Keuxh1%HLr0kKKlOFx-)!uL|q++IYe@h02`qL8`fu%!=&Tm zUrs?KWLNpXpkDs#v;Oq)!dIGQOeA;#Ss#8VQy|_G+`;JV7l~I zv~7Q=fFzyyOskv` zf0YvA-!Iw&ABD%P6VvRxGK?0J6$*($b}>O2W)Ahn+|=U|Ho6THnUCN^=ajBQFvkP) zA>xt;LzidJ04=(G!*q7?U~9AYX@1BOsR_als)phzyuVf?xqL zV8;}nQJFs$>6cgR zX<>%bTDi=Kb^&`;jn1yx_Igx>wXhF8OL{B{kc&U2b0yb{%~B<4pwW+!u<=Zj-ib^B zfH5Q(QSW_b(o;;^gJpmoL6`&B6^WiS9btED6zBx-l6Ur0KSzc7d^aMg3*!5Q=;rVD zs@Zktj$^W69cAQ02GQy$P3oFL={hh2h;5-Eu*cXmn8+66)vAc;>je!0?=`@iUW%!- z<{il{M<(^PA$}0onf@>bz{k1%iGd{G^OR-XqZbh*g8=Iy3$sQQ$`i>)9wAZh96{3) zF^h0yZlJ6^4xVj>2$U+ zTV=|e+)LZLq*qGyvNYm9q|KnJaPpb(m0rTl)nAu`4E4e^BwChV#VQJueAvnRbUB-F zqnb; zv@d-=pM##mFM*XBaqHjf2P}u&Zlc6pTBagD3kN)^i%Da_BRfV(jFvg2&Pjnsa<&ZT zc#=P@;gU!jj2!-0dsdgVY7s7m+@de(MAy&OHhK7*og+w0DJ?cTDeo(s{{%*?V1UjS zH?q)9Xyl2V0qaJ(q4MKJr14b0CL>K}?U;#-&ufVQ<*zvv^^|=(4Dm#nG zI_o{388caX()|ZkB%x%m-`FfRM?_g}ktgj=Zq;k;+|B@3TQi;7uu`gfbT>n>>K~7U zg{UGd%dNkvN&av009%3WstoG4`&=6K-vY(}h@42#A_DyaA&3g_N%X2UMi-FR5YW6V zfFA5JT7PpB1lS1~;1f?_oWWl(3k&)GEB?Qp9O#@g3LyaqB~aZc$)tSk2C-olsSN(p zyOe4?hUR!0_6S2AfCQmk2(aI9?v4`%4>C^}JZ&e~+thwv+0eRE=z znMFWCVy`>#S--A&H`@w8rZM#MQeKf#U=z^%YCXni+8LlzrNczR{T8$UCsKag75MN9 zP~SA=Io`hQdlQ8fzyqc2O&ud1LU9-rh&U?s>rB%4T}+s@Nd62#azc&U zJT{Qi1>LRxGR0qkDnAZ{7n6WOuzR>UY4kkO>+!t5K3MSZIZ)1EEqePSbrMji3%Sc( z!Qy{81~Ab3tO`VYrGRXuwA!#KpWkg$pc*Zo8Um4s2HhO5v}aO?_(+I}iKPLmu({u& z;b(*8pe^9@dmPQO4Ht+CS9JN`COTc+-d2p|^5Y8O9Bz;la14tF+$Ar?07UietHT`o zY3VuhY_*~E`CYo0RSX|%?VDC9V0c@vGT4okpj-e!9k)u%0W-`b9fckbdtGbXp5X+i zW=pxl<=R7|p8JZ8|Mu>}a)2F(#j59GntBEopIH2N7(oJY5&%aW#Bp?f98PE9A^iB# zJ^9(_8+(~bww8W$w(u%l$Ju^YVZdcO7l=iyAOL@z#z z-rH44QcxKyU~`wiR&_3Dinziv|IJ!72};XKfsil{$pRL3?z4Upy;|N-$-6iLw(AtU ziv}QS(VQ+ zm?dh~hNPw4+&zNm8~(=a`Q+Q07O)x&k%cr$|qxLbTHV_SCPF z?Sac*a?oX^jnDtrM4|W|6BUx&^2p<#t53k?jPOY2IE96WNJ;H4CmVjX#y;12w>M5c zK`Pqau5OxiIu#%&imo14qx}D*EBZD06DQPdJGr)mb`HRG626$Ih~BxP4)+KPK%8V zwh=>fz6)4WN)Qh99D;$CUjuXnntcRk(Ynou-v zkLNEH`}XDm*N%_f9SB}Kp8-x|Th!6ys2iha%|UjajLDsLT)=ws@!@i3oY_@z7h1;V#jn|D3yGch(aS8#=Z1ZUs0BI@C z(#)uEsIa33fYCx}O^;dt!o;K>bJOn66SBC8*Km9*3tC1HtcKeP?^muCvOMgv8X+jy zq#3YUKGgndt%{35nVQO=t_C#Z~KHaVf z(pL4*8ie<-Hv!@9)glg5!WNfm+-a#fg(eX`uUa{i-Aw=wGZp99K++cJ!sA!LFb~Cw z+&WtG(-VeD39Nv;$%xXQUWWGHBn|XF84yPiFi6g*4=TBC;37DzpB4J0Ji z;Yb()rwPbq*PEe0K%(h#=g#`BKrAo^NbK;$;$lUmia(&li1rE(#`hIG0ds{_LQaks z_syWX?<1U`>$*f1_XY7Pv-Ts^1#v+lJQbc<$})qT zx!c0`!MJ?mDN!P6v5FVJf76A;_JfYkp;E-+<2F5!phxtJ-mq0;mw*>)lB-zaVQ^z0BC3-oSQm}P|h!54>E%hVm=Uq z4p=#`&2e-M6bnr%i|(VgMY$Q-wT2v4{t@#m)0|oXPY#7<=1I2~J<<>H!5DD4 zubeh(`uBt9u@NVTC7 z6uWu!!^lPVujkP)laRks<>^;ygo@&AtydfpB{iR}8K{jT!rFkL&Em&5Jt~Wg=NUDD z=7R>~DemW(Qe5*JQQfd-?5oH|8-`_b$jW(#)NP6QT_zHb$`QRU(ifWn^ETCsez-VF z>0N&!gHv1|hBBB12a?Y3B>=#vBgFdky3>%{!A^5B(h#QkD)Jk=n*b}doRwQCu=G20 zm6lF=+(aGj^BO3PFTgX@r1(Kr=26>~Et}8ePRhe5aJ5n}XFQvS zfF<+g$oKOr@?aL71O+n7{waddM#kRH{8ZQ=GCMFkF3QTJE}aMy$x`T`6U&;x?5eMh zN9f0~V`w6w{(H8-@p-Iw&2p>tgzX_cXcime@7etGf6?tA!g^DM+%6DVdY2l1>w~)6 zsPs2yJzaiO(zYVwdOa*74mZySuP*Ud9*Pjcev8nkmskKY7t9aqlmhFNf)eLR!$M<00|5cSO8gK}00IKm``V6!{Py*!GgEB)^#yFNAT9({If--p z1)ywxsM!MneMkQL1_nw^#{dEXBQaG{bx{2&&1GP1NvCIMtq-7cv9$S;1_I)7;riON z1UTpsxL8_P*>kz@68$5=^|k$%Oix7ckBEagFOlj`IRas8I{*PI9Sa=;5g#-G0RfMl zp%IsYh}eIre<5BX69)$yE_!-rXJe^L9(`M;_e8vLKAY#i+@{)x%ZfF580umo5+*njCU{;%e~a{GT2 z|6fkJ=-K?s*gr}9S8P0gJ?ByY*jrmT{!M|hm8kZ{U`Z)Agl|3>;x>3{5~{f`|+ z7WRL)^KYDg(=;^TvUk)s0~k2`TfM%j_Rr`S(le(2H!=_X|0>P%H5RyjS{s@gxr*pH z0Qi^~7};nUIA|GJm6#a07&y2%zsm3*GXLhmUyiUHK+nP2PRZKZg72R&EdN3RX1cG6 z|0n;yRC(zC&ZB>uSO1!{|4_eXEg$rk=6@dn_@Ea}dvbt)1b`$&1eIKX&oiLXaYQ?Y z+T4sDhJgh^IGvpz2!KJ0(}}XT5fX$^_7MbutwjewMLnT|`QTB&tr10BUr-XT6Ubw- zHHjc8(bT@ol91xEL2q9PjxaB@zU6^@#;&SqBMp5f~sbz?{%P#Go!|_I|d1 z1NQR~1Of|3VjJlGhj}LQ1vWyq(u!e0{xaoz3t=$8U_ie4W&{h=>aQ{NS&cu5bpw3E z*updioyjndVL+xKl@xl_#-@1_YuApp1|5rtw zl244wTPvz+*)D2Lm(qXw;06h39k~Dcd8290P`A6o!if20D)0AS*`?Wu(wauqB2SOg z;(nv#a9EHgPg-uaa9EWuk9Erti+Q%%=4lMDPo!2BrGuPc1V(n^4lnM>l<>{Q9w!# zprV?MY@;^(nM40mO-o8Q#gX_?+*1Z5B`Reu`~s68XB>D|+Z``r zd-Y-<^5ubjd`}-Fr}YF4h{i|~cq}xlpRA4SYQy8N5ry$~rs6yAADN3msaqp!lsk$MI3dbXy-w&sT%EG;Y4yHP2_=e3@JS5Xv`c_qn+0b)lbLSdDzaB z!Wbp8a&+cr=+2m!Q&g_S#QN@mNkt+$lN0?}`17aqe9tu);iQh)rr?fXvs8uAqBbWz zm^LDUe5LW7ssa-T5<~P*k=uc0Ms z<@Jg=ha3ZB#$bx-6qM0mv9zM*x}Y-QDZFBCH4ml6;r=>p*NBN+ufyp#>1HrD93n#> z;x2>YVA+p5gfTdFr5k+sVD^C^ZUILFQF;h>CPVuPn)Dc-p&ALnO6r%)tTfDO{p5jlk*W8Ta6rudzDlKq_*}wo$(fYJ2-cBCSIatOD()z#jg-d5qUKRY zgKRa6#* zbM9QLu9l~q?%`db9{2LCo79Ssj2#^uc(73$8*&_V#+;zWiuE>hW9alA!&BP2Zezsp zay*h!69W_d;?K1)9|VIal{Pn5+}rrk9eB2106S zOY=|GGd9GmyN61X^YXS+S^S@*4Iz8 zyzz~afmGU-fQ$gSPJbF%lAF!+J@9oCl_HvZ98=HGyZ4y8_s~0D-d>btcUCrh;bWeT zte?O%FV==FIu%n=I|ehedLiq~md6JW6z+>nk52D+pLUYd@Y>fQM3UsR_rwe-aJCZH z+2f>I6?Erk$MGEBjnH5R=UPjuYG^${df;Y%HDan7`!vOaKF?g4r8@~Srl^bKdgC0h zlLwi3wRz0ngi3*_EqVf%;mHbD5~Y|#%Uv!w;&y29qv@?+rOE2M?n4y!(~}pPrYQaN zmQuWp9Xu$sPo&dIrG><)W-x5{vC0-#cj97HTHv<}D1)p_;8jYh=ca^c;*fj?%9ulj z#4^Qgl5DOhIp(=)OTJ@uYXM0VH93fl>+OmV+7P?vD{3e?9&(&5^mJOT1*G|vOc*jz zo5e}wtP&s5Ic?=}a0OlSyS+N~3dSr4p&OIVspGfWp0CgwXbe{MQ>?n?S(2;5YtS_8 zB^k6hCxT&sLsYTK7Ify;Jt+;nG9GnLR`p8AJEOk|h zBW^@7J#jrEfgoh}UrZyqrPcG+Nh|uVsTOVd1qI-jFv;;{;xm8QXhPU$y z2&Ci_+arUcoK&WQ9+XJ96I$c9g3SliYWC zq}(I#90Fgq^G=7w|4d>;FMoZehupodGa_QUHR9E7Bmc9kn zCS}h?Iv%UPT))afMS*w`$)|CVdpy8UU22w2NqMTf{$k>z-ERn)yooaP=@iDmJP2li zNgudK%~yS#Mesxz=ik4jHOeK%Cf|AExqyqs zOO9?Z(v)XA83`>lw9gubMq3K?2!nRb$(LQ>m%k*2waWGF5kKG^jfJgHeuMsd5%6+; z^@s7`c#5nlFYmT4u@|{FmgP`KK>sCes3Qj%J#lQwXJNwS@!7@4=C*&ZY$P zMD2*79vuh{bIpD}bTrAP+|H0;Y)KZ4cKg#@v#g%pfGb)Sd0!`mYtmE~l|BU#rX&ec zA2o$&53Lm3n{Q75B*M+e<8!^&WML<*4j!ii!5ElSuk!9zkipW9hmGp`^em}Po-#K5 zuL`*7Mn~27Guv==Y;1n%KHD68Zyc>Zys{cmFTrV$55oo;ZitDSICCrSG}GSgCpsYN z6&qYQdY(Prp+Wes|*(Ga& z7#Gfnk@RYJ!t?^T{kU;_dfI5tMo*I8GPE2hYIhm7yThV}%AG%UdyJ>%bA9p{;CD$c zW5meT>+dHD3k!4a6u#+?{UFJjc3z{rZW_;;IxKes;1m|88lRq=j9$W(=eB>_zUh>X zcbg5Z+?e&d5ab@clwQ)tB2|f&IrG{GT5o#P>TE4G*bI_2l#OTFWe|JsDQauOFJq(A zS=g%6T+%ca_Wm_!JT@KhesljW60b4x$1r)pd$X*>6o0I-O9}SCD|wq|?7?4;gw<&& ziM)y55+ArDL=o2-+`zLXO7C%xQV4Dr=UnNdUWY&aek8s5 zBBCg9sGQu79>zl37`D}we%ZiWf-n{#;*Q_F{ql&Y5SIl09*(HJ2DYlx@=v*xx%k`P zk5M@FCqC*PvR1NOwpaT*q%eDj`gCM^|MaDkZ?gew!_!e8p)nYXZI0Dy_g2BCy2?KX zWEnrj#^btn9jLINH0yr6xkeUrhPVUc(+h0r5PDUpD8eriLFQ8I0KR2aYFenlT~Qck za64b1oE)=Or=li&3(5L@Gaq?D7t>X~Ojgzq$*?XR%`4o2X9!Dpo47!O)B+@+gM=Ez zK=y`GopAFKQ;V43hQ@lR~#=-x{gq&rj~Rkk7lolKb&3Z zqE7+6$R8xQmZ$R1$~3n7ndsW)L}7=@L;DLOkc4pl+{_Iz(bv}S-5PyET;AP2bKD{7 z`bbGUV6U!Fs!)_awB>S~m1JpJ@Ycd7ZlEPAHRf zYGpJm^T*fnwO*Yo&-tXuO=0a&fG2Ako~?-7@s6Kyx*4{W&7$`k@~b8=6-7PN}W+wtnT2s@{ijw6h8}Hr2 zZ;Q1zq&0=jsTR9%g{ku>)bcpgO)ZHl$!kkAoX7@^bUHP;EN`K;ZoGlY^~^3c+A5o) zHw;GQVd3#v%Wp@FvB?;%+ z6YQ0S#pW7p2DB1->|3@1-&q_Z}W@m|1})y^!+JsDmc7rx2s zeB;n7yOqRHay?A>Ypu)J{3$jDh8jWR` z*aRIZg=IX(v0x`?wPv^%UD*^MPZ#HxXL8h#i82lK(4XC8@7hxA@atWM{LWiY zF(0fuoe|QJ;3C&Q3??A%MMFe;?~;Q?yuxC~u^Q$us)leVcJIDNp7GiBfPYuCrt62n zyU?Gmj<(m#tv2hVdA=#0Tj|om!a-3?xSb2s@WISXjhECJ>h3m1Dn2Vb zqgCQj)O)bUG;X(6{s|FfN?&>y*%K-Fs4!5Oc~uDcjn~<@1F0B6zhH#^E??23%cG+s zFSg#c;p5}X%uQ6zJ)NVcIVSeFEg~rLW+*Xoq(zO$SKHy-(ZzUaB1Yt{(uC?F6&g?M z3=~Xvc(y?+uPy;XSfxD!Q`B1|H2xpAzXDG;R^>~5c!h4 z8rA0T^eoO{C0ryi)*T$cBtnpxSK8*ukaF7r8H^>t+RRXR<_cEpo}@5hM>g4xx@Lab z-Zo0l1eJm}=YTD;tY0yKsU+Yk(7Gc}G;QT*V&76pBKs)QdPt-|MT)k_%jG-xj_~To zM2;7JrbQY?oY)?ffwGmmTRC}_iWv>pl}ma0N}Ou{YI?7ebt_z1!GgiAultqTd8BpP zS3oz2(V1}%coJ34NhX-*R{W*io0yW78;(I24l{&C;K`?>>R?mKZrbS+S8hba9|>IM zSt0F2rdsd>f~&vZXP@7QT#i>TBMBjnRZSVQR#yPvh@EtvYu#M9Fm{2Z(%o#jiiagN z>GFhz0}k5*m%6$*IXk81Zl}-z_i(I$0;8?@rO=BF^q#gg>0{pz_*OlqfyiWM#2NZs z_YyauNkQ!>IV0k8S$^AtJ?Hi%zY|o}R+#wWMac8rLHpH{KK?zUpA?*JzwKF8MNM4q zkzqUT7;Cf%cs4^yt`?W{bz{mn3pfvP}IKB@XXR z3JZ|C*kNOmptJJM_H!5&G${=R-7hHjY>kD%z=Oi77X#@YpZznGL8C1X0B0%@zcQEL z_NzFc{Zi#PWT#ATQC*(iHEG>hr_px(1zZ>7G6){4$%;wh<`YOgx+3dxf1eKK8z?97Ss7DxS_ntXH%h?SQp6n&>5$Jj zc%*AUV|iZ7^X;$W_@BOXCTjIVxu&3suihXsOek__MYl^$zM zDhLT~nhERjuyK+s4rpUo10ucE)Fdg$Worid)Tv5gIhc)gcX^mYG?IDjrrF6okqpCH zV=|8_jDFt1OMWCurG#S>8$a&dNK~;r_B))pG73d-abb2>b6kBzZJb{(^RCDD_OR(D zl|_GUlF6fPgOMWb%U>tGy1igSKlPUHMS?wCxW9p^a8kok)Z2 z3J9V{$U?ji&SaXKD49#CES{Ez58)MGe$wec7fCH?K2Zrr5@AxYssCxS)w*`-J~&4R_iU+Q0+R`!iN{R<87;+Z?9l^saXRve$8O5Myu3`wn^DUv zop{BHd{-;ih_3qjEbtt2Ext{9nBlSy*94*k{(ak!+EPOP;kP`G6dR247CVi#{<*k< zDVSv7)sL`nXK(fie|BW~vN1+0b1OdJ73Wd5LkeQmeMZ8H%Fll(9*ft6fa+S9)*e`|?b&A#ORd;BJcfzLad_1QF>zwGqV7^1X!2Fy9Hv}EQNo0BGFS~e(XufK7Qd%{DJ3eWIxb)4?2xLVsb(SUdOZC)MC z4PJmyR=xBF&;;paWN+LJmZrX!m5ZKn@cLxFZuWiTU4Jdt7||Tg#Q&;&vy)fVb}ho` z%rGFl+)Exm&D+sraPGN?WOdNxDE}kL3o$g+;QZ)8O?2irVSn(JrKR|4{U%m$h>0kk zkBrT>P^-SHwwH!R+0>{l)om^Q4UTKHCj=mE%H9TZt?DYz_<=UCI;JU=vCP%QDyb$0 zUa}GaHCF0gbZ5lYB5|M1ki-Z`4eU}vjzOWDdEhuDdUw2?2P+E|TOgRBci{<5c0u-_ z89_>yXT5^;#s_;U6De(V>@C<8=0jJ0X*qR|7&1=HP#-461}B2uKVXl+|5?+rVEGg%bQy z=Z@*u(?+udeJfX91;2o5BkB0@iGow?bTZ{^k$VzTJW_vo^Hne9smKD9juIBd3V6Fy z0l9snib<{ng%p%`IbCROq+b}Ch^zk^M>1XS9*zb;%h~_3*1Cd+ zt06%|)M_qRvb>MYTFG@krwA~~AKrpTQ%K2$ZQIbVv8(q)06xtVj;x?QZQbqCPx-Dt zdVJC>L*&ZnXSuP+bk0;kjEAmEv$i}y9F}4oI-xmfvlSTBX5uK5NJ=NqG~6hI z*4GshFzw86?1WvAT`m-To+sVChKy=V>D_?R)N3Imb{Yh9|E$oek8Xlv^%H?qbD=r0 ztpKKnhB}T@iYn<1jg95U)EMjsu zdv*1u_FC(UBoP}eGiTXm8LKODm3kCA9ez3#!qPWtQv;%78@0tbkWyGYV@{n?ZpQrq zux*EKxeNCo_VF=qgQp&YMwdn*M=5)*ap|-~*l-WqhCEzkLkehKy2~N26m-_u$MT7e zG6(uQ>UgB$+JVR)*G)nE7>P00S|?#RR*Gg@%2^HPvyz?|JW0so@gJ!ukrbabPEu5! z*vC{UDzPrN$LlJj=>;>}G1!)9O!8sNS$>C`W0qu(a_k)m1p9m86*l`I5drvq*DBc@ zfZSZeLiQxpduRpE+wS-eIQ1LyZ1=!%Jrkd6EGc%Iw*|hXmMLm-Ts@)$Q8}k0zz?Av z8uR2mbu5zTTNJs6CR{s=GA7NyrK~nGP$} zbgR=YA+D`1vqb*E?P)ym$&UP2C7scVeP{v~TBx}2-tKmSreYMqaE_iH32m|>1$mdj+M}@tv||~~ z*f`RKVEX$TACh{#3@;AfNk->Rf&)%6q|)u}TiEc8>y;$drV0~Oqp8j4oa3EpK9P+< z2=yXO$U!tihbVB+HPK;1_8z}X=Y~*qF&_OyM{D@~gA})l!^fC$hqumVs&{@`me_B< zzS_h6&Ui6>HYp`5MXrWHg%qt8)DwzdXr9q`VpfX}u2K89C7GF(iG_F8$)H^HG)?_! z&S~Vhc$RHClj;v>aByXLkEh2A#SD6`yuH=ClP<>Lw-RoKN!fCh!ANV)#KP*Lu6u?g zQj7}CJfE7tWu4Owfr(}bE0AGYykdx-TWy64Bf}z+!!F2<;z2lJIt}+lTX;|UQrxQ^l?Oz>6}G!5 zmq;N1g}X(qqWTm4%9Gs{4G;*1;j5SX28Z=&ZpyIP7p)Biv9mNUd2(4Wd%PR%DgcRr zB%su4*Eu^^aGxA?_uKwf_DjyD9D) zeCR7@rEA%N0d$zXAzTM++BPg{&q#ajw%omF7m3vvoTu9oT@RRDt+35Fc|HHhp@6}> zVsuP#{5{@8rw537zvlqrgg$e}F-VTecm})HbKZ6QLgQ=YnkbIx7P9(QrpeZRrYE^% zO>0y2WHPm^H*zaa+ZefHw{xu59Gm7P=X0+Vg(d!27Usf@zOUs2lwEfck96r8+uiMf zvc?L}$h>tf76;IT{g0U8l*5tW;MakeLROi|jHAhAyIQXW&t%z!(*9wCrfJ>ApbDG~5ALh@^<)yQ-X;2)YJ-ltdMTQ+Qc8xm6*;*R% zB>~l*jXBf3qHwvqW9KFSpoW%^$EyVCwTNz%$Xz>S)XseW?5ilsTj^rm5^Dv(LiI@y z3yoH0|L9b{a^U*}@hT}iu; zFzjoYEVc*V*Xb>d0uP??K`~awD&I$G6PfRV0fW!tP#{M9X`Cl$v>|eeC(1ZkY=g2p zCM)NTp$(#TnO%TTYWCOj*ZtXc+cV2e{`3*i$0w1NhR0`d5zVTEx;olE|6Wj3E;9S| zQ2bf#XwkjqO_KYtUGsOncwdM-+7?_A`44$3|82!a7XI6txf+AA6*rWD&i)878`%AG zFusXTblDc(0a&_*tP$J3=s2vWJuT-1D-}p7)E`b(gg}s?T zm7Rx1WcC~_K58$5V}Fk);J7=HG|_^N=G_r^PnqDkc1}F;urFBAv>8eXRS&;MjYrcj zS6gM^Xny=kH<6$B80CQA0VNJ}*&{@@IdyR#oi~HR^iXt{-A9fk$;P1iGh4r~N!~IM zKb4;MsAKhe`t)0R&(mz8=BwM{!hJ0&1wypV2E?GFV3XMyjl(A`^WmqVZdRB~#bV4T z8HW9eH(kdSMsFikB)UPPLQQ9?kti5=(kc)Qbkz#JMLrS(opj;>L)=0;{wXsLK5?3r zEP$y=9Ij17ge(sAJ31ZD0w#_J`#Y{0aCP)1-5&BZ>dij5ThMvCczBV0qrLT_b@H>< zZzelFQ=Z7Hy$a{|So*wp#F53J3Z)aZGiB_VTWhhY*MB|*(cjr(Fx#!3OO;Pm(Uy7_6+&o;7!hEj z`H}mwRSostELxT8YAaVn^9yIJ0n2mt5<_Z=6(A`XB>-ytvAVOI99N}uwKWvp3FS(I zmJ#FAZzruu6e`GBY_LNf z>bJ{k;^)1jow>(4TL=F0EH>1TiZwk60417;v?`p2pp30{_{9mksx`Mp^r{_meM{-~ z-4(UO`2vL!wL71}F;097HSNp$Q#KaZ{DIye1V{rdm(^L_P2{(s(K*Iif#etS5D{gXgbtB3>C+a~wI0qZ9X4E;Z?d~#5}`EfrY zk4TC*217fFxXSSRKksc>2G3ewihEr+jH;2 zA>nf(wB9*|$1pP!k`seWz)pzUoh((PR|q`cP6l#D^;z?cjA(AAhaa<=GC}qeZs9(n z9=70K#E{cjLhvIy#1eJ`C)oXXfQd}lYeeX3E|z6sV;kJiW*8x07-58Tfpj5X64%|f zK}ytNCTbt!bUjS9!&#qXx2#)z_~W?Tx9=bt6X;D9Gx6d19E!?)?{kz9H9nc-Lm0fi zA1=DN7q(jevL>NE^?Gq&ijaH;DMF>Ep?0}_)DcvI;cKSAi$c-*aZ)lA&6L3F13F`U zvx>|a%$X*gDG_e>)X2z<3QXE$-c=gSj$?IU;!LT+Td`cCpE3*!!j0kkgLIsH=VtQa zqW5PBw`!q$Sfu1+5}i0V1lN5%)j|4{ys*n&_(|c<7PIOu9k?4Wh%PQG;g+FEL%#5i zo##H{sCj=D$Z&ozqJ(O1t=lK$#UCtc2&#=1%Lt||COvE5n_G!j>dYc6YIY0x2F+id zZ*Ma(-hK0pA*%jrf{86N6&oG%XNHs(0UI=P>~HS=P1zeeA{s~`xi%P3Ee82j*)7qK z?#K(M)iBx%yot1emZETAG?d+3(J-@b+8CLlOoAkjp3bH6uJFqo4bGF4D44pf<{PA_!KsbgvS>eE;HnE!3As-)e( zKBy}ow8OpEoEdeZyF5Q9>IC^%Dr0=unR)tsqgsm`$GwBqVoyDSYkpdhnhNJ65BDwk z`$s@+v@`l!S)yoS9ckPM+kR{9siKv9qDD~GY)C)!S;wk-QL3|)4cTm!DK2fu`$#!3}PSKjcu<)Rxru0G?^PU)@I&z3(iyuXstq#XC7GI5`P!!{`KFd8MMydXy zM_wAMjcze(*?Dn8G_)Pe*HWg7mo8}UGnO9@e(YkAF z*OyrwZ_t|FaFuH)8q4*ph4emCZEsJ*L$sJfuJ&L3V5NT>(kwJ|z#j90cSw6-_gVK^ zC&^n*KDhZF6Q60_)g&IjPXW zbBTe0b=4b_azELTI@}>zflo+nq;!$wKtDk-Ky2=tP8p~5K zi>!ZB(R|wLXG7+c6)MV_OSS6kkzB%`)CstVi|1>YFGb=^;pNoS@&j=Sxx9sRhk859 zRia>>cf6k?AT~@PZnmSgpHw>y$HOV#r@9OCxzX>hxZS3SO%n^v$Ct_Ob6jw>mNM8K z;&ONYKFW(B{wI>he)$+J+&UVsWOiZ6BNcF(CBU8G;#c^sJ^9) zRCN2*Peh{`6N>rpO9;na-Y}2W@IeiyXVju4c#F($zR-|+=9b{4)3auAw`gW3#MBjGJ0M%RQg_NS1>8qNbJ%Arr_Boo|vg&sb4UVFW-x+TFPYVwQ51e~$!rE;# zTt%o%K!2Y__d(rc8*}NB#_9wusvs0k9wNps!e0gnmz))y^;=TR)OmI_leZ|M;Li*< zoPD3xc z5~67>14pu7MzLUX{sIE|36{j{KP)R8U1W{UUqxfq@m*eP(&@BnfQb$7Z$A3({rwD_ zQB^IHnjF|Wg?p?Me$xh|&um6{g3r59Ti59)h71Rcmh0uM~Dz!kct^ICC#34lP?18wcFpQQb+F-=Ekl&-~Z^szs3#E zD&h#h@4gkJN?X66>p`iQh6aIN<#~sB}T`5 zqJ~))xhdWn{xgng(e9d*1>YOj>@p7@J31r);JseVT{-MCL%gOXnla?_^xM;;%R#)Z zmbNO~HS+pCCF=TuWA!^?A?ns8yecgszLdA;lHh2?gUdB`AHA_~c8tU4$Qbb~B2F-y z2EN@QmWmA|J6yo5AVGwPR``P29Znn4OXQ_0Lw(Jn$q-0>Y5 zyl(%FJ<6NG+i!Z*7)d9jJ|u{5L8NCZd#r!neu;tQEJ|N=q{1!Izu7d)m#lrSusHd( z25mZfZ?Z3Kbjwy_$42#`QLKyqK;3yLNgvnxSs-G09+gN>udWTa<@83$SfmaaDjUyC zm&_Qg?xx2u=pr5GKk%$<4lBRg$rOXt3{&v(8R?oZxn7Si)AmihjDXUxNn|;kDf<+b z?3xrfz;A1FH)KyuynbvIStp|2X8Klz;aAkuJTaHE;#IACu_l~UrLKH_Q==7~j4xKw zaP>-wTBx=O2! zzqdW^jT?gIB(yhBJALoZ{#Lb4bvlp^x7yXnN{QlUw9f2Vz|NQvI&VC0P;=MsK9ng$ z{qdw#qp1(i*OPg3UiRB50y$EUo>6qj+)lYaa=?pbye8P%H$ z%j+#X7?DtI5$&53X8sW7$RpS}o*g>!#bD(g)v|+K3~cFHs#MZ+v=(Ms6NDIoiAO)& zEni0;PzNFltliIQOj2uK=)b=pd=kWoA3EIKzi}O9HnlNjj!Fiyb5Yr{Ke4_rDvHzl zh>@L8Jp=}*;KgApQ$2enqWDwaYY8cixbV<;+7l_>W?reUy-~$=_3d7=usF~3wZmz4 zOgZ)>Rny9p{uQhlkT z*y0ysblZy&-;+8-e74m*XkZb_8ksX9>cT@~VZo6Ab!^nByjkK;_;YbR=I+Mb_jU_7 zqYAXlG}gc6dh4KL+dgPl|8)S!Q!`e6y}hg<384`SUWpLgysnKP_@ET88I}Azz=TL9Fqu+ ztuV>FxbT7jyf;=>Rt{@>E;RCkTxS2q(>HwajE&k)u6x;cvwL{_-C&IY&57$CopcHK zI`FH45uwJSl*fD&6U6Z3kzDOm-?6W}zHsHf`B^FDddshUV$$4Ego>qbe4mL(#08s# zxgpY;;u=qfSl>AVjkM3BDDd%)Fkcn_wqa0_`MYL~o<^gs+|Y%DO>Rjz@y^t7y0*c* zY-c+HV0Jo5(71HCuv}u$Tb{Q;ieov^R5mhHe3h_31_3|g@vO|x3iWJ;(WaNh z^7deYJWJ>ML8b~F?#sgi>OAd~AR?(Hum{)nV$=&++EP)&>NK79hN>SJC_8U%s znFg~CEW3#+1^)7GF!W?{NuFg}>6E!%1jjiKJgW9{C^K!^#KJ9CDRRgLVltQgk4m!x zw;mA}?vD0seN;vwSl-7&3`OHwlhvz`nHQfQJ3e_7zzoNj!-f}79Pq1>AAnfL66HRq zVaS)qk@MVDx%vu#$uWDvQ#86CSB_Ps2)lxJB79}N5)-wsT(9sA9`76K;EMUzYEKr_ z2JuctF(=Hh^F$J96nMs2)~~U!fhq4YiKVpc$3VN};EYh4n}JznT6ke&gkYuKGw2tL z@28j8<}Pvy&wM`|8K*NaDNc~Ck5!UF@J`Dj4OkK?G1a?o*4F(xm0l|yxH_D-(>RVW zYvHeDMql0up{~Vx3is7U{+w8*FdNGR+OA6G1Kv&31Mk(+9Re?=is!JBCvPz0IO+T7 zqNQYO!>2Lh^-YS4VV)T}PMnqj&)o+TQHVo=oxOV_Hw=#8_Tcz}n4976g&#dVL1jzI zYQY&|2Lz+K+Zo@g@%c2+qNl)zn9zoPW;@_MuUy63WU^?H1z$5k#uFfv_@`WjI?zM$ zO5heJPUNzJqG~I=Jo|t3EbpbUfq>TIXPB(&;O)zA5u~B!4;s*#&vkcqvrWh)I^6MO zX|~*OI>|akpQ&lL7Br36wFG=em#HucqthFdHd4#z2HPRMV*&(7?cm<2Z%$b=hc*!eQ0P}pBcNL+rMLQ!_B@s!U9?m+v^?V`HZ)V8)}S-kU;#sr;p zO)sKGTG?H8Q8rmjHGBo|rUv`cw)e&X3ay5+OUUBEZ*FG6%`mkr) zX-jc}`RXw-OMnn0(4sA*nLKi7rNLB=%`(1dqIUS|@ux<;?Ix9LeTa?qSU1u*Zq=sd zXD=aKDaO3Slx4ZNkwK+UVqr(heHXoRgB!KwZbB!+~m}#kZoQG4xz1%$^Oo5<}Wyd#vNHEn%u_pGTp0L;Z^NjNH zW;l9`UAV?WxS``i-8{{H?JAkm!@B!>Wm@~yo*nhtk0cI!gODA7!=jGhQVRF?nR zYbZ@8QleH^xiL3ETzL!R;rD?lcA9bnQdzp5SnXbmqoZ>^^v~-J)fWkdDG47R%*fzj z5jR;}rC}k_JCs<3FybHN5sKd4-rqw^p-8ZQ=Jy%{MYY}4<^ZB;x8ZMIY1;1LjQl2{ zj{dl}^NdMRyK^s9dVO2na)u@I$-J}s)SCI3Jm|nhOD*)ZqH)IX_55d~PwIV^Y>uxA zx_gNtTs_=crLalpbHs64Y#wP4vamv#qMVSZ!FD-3<}Dz!FQx{G_Ouxyx%-vZ0LH?) z>Ea5tW-*nD6+$!(?xwoIjo~ShcOXQp$bW6TOi))E(Pf%aZy`e&=lAjXxhJ0P1)b84 zCjGHbM8s4EV_^%UejU2+IOhqYr+2WZr$l1?$#~J%F4>?-o{X%1&va(*T}?&9n5uD1ef%Ev39hV zJ>Ro2!On}te4*UNC5z;SQbleXQ7wxI6hquk0MB<=h&aK8i6CD=(v1@|pgve~enG9G zBEg+YGo%g$#R@%O54*e$gR?yYxn5>~7KuCSS7exoUe?gJD0j}(x@G50-zlvnhuhV! zr#qa-rX%IAbC=M_>SOI4Hc2AFt*hJe@6Frc&42X4^S{Wx7HmBQB@W(^e#gc-__ZVZ zVHXkS=_{Kw)z|sc&yTk=?Q?H1!aDBG(Tnao+@CHzb*=Xbmdw{@2U}T6DGT|o*tWY$ zKO^j5Tj20EK>~k)y&}&2tJkwkH(#XvqzSp|CzWGmgpVxE=bH_eQrz7>!Hte|?ru7U zRqoBC&T^${v@zR68`_B|Q**q!gxRV32^^$W)PdI^AHzyX628d>e!JkNaB|5@1c7R5 zPf+f<4-nc@lMlduoJZ6E)Fa<1mKJ zZo4n{mpSYs=cFf4Zo!zVwW2Y!Mx2RjdhEoqr=qmahc;e9;?7a&v)p{)MkCp^g-eaC z9A(ItMS9Q3uGRf^$e#+6-B@LvUUCb}voqsPT8{anT=*n;j}Nn?0mIJ* zmMve+6qjE9-9PY%?~?yX^8J5`t$5C{0Jl1cF(k8fFh2`hyN2^y>Zz%nvh$8B^&3uR zXguMcrP*-%yY{`xt;U63*RKC-kh>rMQdIm1$1-1;;`bNTH*WlrxiWe6zp!O z?q4fcxonfSSD08uxb)9Dr_=ey50%#YoobiuJ|4EK?!9_qtWvYS|BsjMbEZ!YuKJ?e zdFDd2b#eR4-}kKlXTDAkY5R{ z4_!90xz=!=zHQf%cK5+?5OszfXNF$0+xo`QtH-efwt5|9@fa zvtP?jpL|}d?Uum7!z9S@fphu!?gIIZ!mo8S4_ocJ{&3g!%a#i-Ji8IRaKovmldnpB zZ`aw7uCqa)ZnbslsbyXZZ--Zhv&`MPVCPS*Dc?S7^oCyuo>CZCWmd&ex%=nebu#m7 z-hc20?qJ#N>AjzAZm~+Dm|)v!`JXmVKg;hs|MAT;=dXfGCwt$nzBPU7W6in`KecQ( z{GVuIcuYfnx3q<6&hFzA0)Zv^{NhhL0}ius=EU+1`dK6Q?1-s$zH z#XEZf@1IP$8Mmg$qNngj^MRdH<$vscqHMlP<7jEbu4cQ>e?6DJuUfTzxwd}d)&6hy z;!bYfoVt~nr+<-st;EkeZL_~@nRqo#+T6A{)wb7ZU;oV0`y1}QTBU5z0-T(1U}T&c zZ`z=DOYiaLlbVy?CYf$J(32jwCwy0=@yu8Mw{>jldZ@P7w=F=u_v1(T*CwiNEBE+F zJ@9pMV{d#L>abY3_2H&ijt(Keh%Q6lUym#|PwftlcY7aOb?6xAfPu#njdQP6OCO&h zaS=Qha)8encoKvx+t$t#;1dp}0FQzw&{R8i6wCwH+xHR!W_N%UJAe*un4XjrL!8!s Z@>7bE*-wk!yaYN($kWx&Wt~$(69A!KfaU-I literal 0 HcmV?d00001 From c674e44b99107dab31ae02ca1c56e16004f59566 Mon Sep 17 00:00:00 2001 From: David Straub Date: Tue, 16 Aug 2016 12:05:23 +0200 Subject: [PATCH 07/80] Documentation for FritzBox call monitor (#779) * Documentation for FritzBox call monitor * Category and version number adapted. --- .../sensor.fritzbox_callmonitor.markdown | 31 +++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 source/_components/sensor.fritzbox_callmonitor.markdown diff --git a/source/_components/sensor.fritzbox_callmonitor.markdown b/source/_components/sensor.fritzbox_callmonitor.markdown new file mode 100644 index 00000000000..84108591be8 --- /dev/null +++ b/source/_components/sensor.fritzbox_callmonitor.markdown @@ -0,0 +1,31 @@ +--- +layout: page +title: "FRITZ!Box" +description: "Instructions how to integrate a phone call monitor for AVM FRITZ!Box routers into Home Assistant." +date: 2016-08-13 15:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: avm.png +ha_category: System Monitor +ha_release: "0.27" +--- + + +The `fritzbox_callmonitor` sensor monitors the call monitor exposed by [AVM Fritz!Box](http://avm.de/produkte/fritzbox/) routers +on TCP port 1012. It will assume the values 'idle', 'ringing', 'dialing', or 'talking', +with the phone numbers involved contained in the state attributes. + +To use the Fritz!Box call monitor in your installation, add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +sensor: + platform: fritzbox_callmonitor +``` + +Configuration variables: + +- **host** (*Optional*): The IP address of your router, eg. 192.168.1.1. It is optional since every fritzbox is also reachable by using the IP address 169.254.1.1. +- **port** (*Optional*): The TCP port of the call monitor. There is usually no reason to change this. From 157bd45d400d098ce071743f9980ab2e6f8cf1b9 Mon Sep 17 00:00:00 2001 From: Matthias Grawinkel Date: Wed, 17 Aug 2016 19:09:18 +0200 Subject: [PATCH 08/80] Documentation for digest auth (#781) --- source/_components/camera.generic.markdown | 2 ++ source/_components/camera.mjpeg.markdown | 4 +++- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/source/_components/camera.generic.markdown b/source/_components/camera.generic.markdown index 3872b836cfb..be468aab710 100644 --- a/source/_components/camera.generic.markdown +++ b/source/_components/camera.generic.markdown @@ -27,6 +27,7 @@ camera: name: my sample camera username: USERNAME password: PASSWORD + authentication: basic ``` Configuration variables: @@ -35,3 +36,4 @@ Configuration variables: - **name** (*Optional*): This parameter allows you to override the name of your camera. - **username** (*Optional*): The username for accessing your camera. - **password** (*Optional*): The password for accessing your camera. +- **authentication** (*Optional*): `basic` (default) or `digest` auth for requests. \ No newline at end of file diff --git a/source/_components/camera.mjpeg.markdown b/source/_components/camera.mjpeg.markdown index 61202b15612..da77c05a216 100644 --- a/source/_components/camera.mjpeg.markdown +++ b/source/_components/camera.mjpeg.markdown @@ -27,6 +27,7 @@ camera: name: my sample camera username: USERNAME password: PASSWORD + authentication: basic ``` Configuration variables: @@ -35,7 +36,8 @@ Configuration variables: - **name** (*Optional*): This parameter allows you to override the name of your camera. - **username** (*Optional*): The username for accessing your camera. - **password** (*Optional*): The password for accessing your camera. - +- **authentication** (*Optional*): `basic` (default) or `digest` auth for requests. +-

There is a known issue in urllib3 that you will get error messages in your logs like [StartBoundaryNotFoundDefect(), MultipartInvariantViolationDefect()], unparsed data: '' but the component still works fine. You can ignore the messages.

From 033bc84fbf8226b5b34150b7183760e30585d3f2 Mon Sep 17 00:00:00 2001 From: Robbie Trencheny Date: Wed, 17 Aug 2016 11:20:13 -0700 Subject: [PATCH 09/80] Drastically improve the device_tracker documentation. --- source/_components/device_tracker.markdown | 48 +++++++++++++--------- 1 file changed, 29 insertions(+), 19 deletions(-) diff --git a/source/_components/device_tracker.markdown b/source/_components/device_tracker.markdown index da46cdae60e..505018e1f4a 100644 --- a/source/_components/device_tracker.markdown +++ b/source/_components/device_tracker.markdown @@ -9,9 +9,11 @@ sharing: true footer: true --- -Home Assistant can get information from your wireless router to track which devices are connected. Please check the sidebar for a list of brands of supported wireless routers. +Home Assistant can get information from your wireless router or third party services like iCloud or OwnTracks to track which devices are connected and considered "in home". Please check the sidebar for a list of brands of supported wireless routers and services. -There are also trackers available which uses different technologies like [MQTT](/components/mqtt/) or [Nmap](/components/device_tracker.nmap_scanner/) to scan the network for devices. +There are also trackers available which use different technologies like [MQTT](/components/mqtt/) or [Nmap](/components/device_tracker.nmap_scanner/) to scan the network for devices. + +# {% linkable_title Configuring a `device_tracker` platform %} To get started add the following lines to your `configuration.yaml` (example for Netgear): @@ -22,31 +24,39 @@ device_tracker: host: 192.168.1.1 username: admin password: YOUR_PASSWORD - - # Optional configuration - - # If new discovered devices are tracked by default (default: yes) - track_new_devices: yes - # Seconds between each scan for new devices (default: 12) - interval_seconds: 12 - # Seconds to wait till marking someone as not home after not being seen - # (default: 180) - consider_home: 180 ``` -Once tracked, a file will be created in your config dir called `known_devices.yaml`. Edit this file to adjust which devices to be tracked. Here you can also setup a URL for each device to be used as the entity picture and set whether the device will be show in the UI when in the away state. You can also put an email address in as the entity picture to pull the [Gravatar](https://gravatar.com) for the given address. +The following optional parameters can be used with any platform. However device tracker will only look for global settings under the configuration of the first configured platform: -Multiple device trackers can be used in parallel, such as [Owntracks](/components/device_tracker.owntracks/) and [Nmap](/components/device_tracker.nmap_scanner/). The state of the device will be determined by the source that reported last. Device tracker will look for global settings (`track_new_devices`, `consider_home`, and `home_interval`) under the configuration of the first platform. +| Parameter | Default | Description | +|---------------------|---------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| `track_new_devices` | True | If new discovered devices are tracked by default | +| `interval_seconds` | 12 | Seconds between each scan for new devices | +| `consider_home` | 180 | Seconds to wait till marking someone as not home after not being seen. This parameter is most useful for households with Apple iOS devices that go into sleep mode while still at home to conserve battery life. iPhones will occasionally drop off the network and then re-appear. `consider_home` helps prevent false alarms in presence detection when using IP scanners such as Nmap. | -The optional `consider_home` entry is useful for households with Apple iOS devices that go into sleep mode while still at home to conserve battery life. iPhones will occasionally drop off the network and then re-appear. `consider_home` helps prevent false alarms in presence detection when using IP scanners such as nmap. +Multiple device trackers can be used in parallel, such as [Owntracks](/components/device_tracker.owntracks/) and [Nmap](/components/device_tracker.nmap_scanner/). The state of the device will be determined by the source that reported last. -To add Nmap tracking just add the MAC address to the OwnTracks or iCloud device `mac:` configuration. To use both OwnTracks and Nmap you could use the following example: +# {% linkable_title `known_devices.yaml` %} + +Once `device_tracker` is enabled, a file will be created in your config dir named `known_devices.yaml`. Edit this file to adjust which devices to be tracked. + +Here's an example configuration for a single device: ```yaml -owntracksdevicename: - name: Friendly Name! +devicename: + name: Friendly Name mac: EA:AA:55:E7:C6:94 - picture: + picture: https://home-assistant.io/images/favicon-192x192.png + gravatar: test@example.com track: yes hide_if_away: no ``` + +| Parameter | Default | Description | +|----------------|-------------------------------|---------------------------------------------------------------------------------------------------------| +| `name` | Host name or "Unnamed Device" | The friendly name of the device | +| `mac` | None | The MAC address of the device. Add this if you are using a network device tracker like Nmap or SNMP | +| `picture` | None | A picture that you can use to easily identify the person or device | +| `gravatar` | None | An email address for the device's owner. If provided, it will override `picture` | +| `track` | False | If `yes`/`on`/`true` then the device will be tracked. Otherwise its location and state will not update | +| `hide_if_away` | False | If `yes`/`on`/`true` then the device will be hidden if it is not at home | From 9d16d40d9182364a6494412ce01ada6426683edb Mon Sep 17 00:00:00 2001 From: Robbie Trencheny Date: Wed, 17 Aug 2016 16:03:54 -0700 Subject: [PATCH 10/80] Initial notify.HTML5 docs --- source/_components/notify.html5.markdown | 213 +++++++++++++++++++++++ source/images/supported_brands/html5.png | Bin 0 -> 2223 bytes 2 files changed, 213 insertions(+) create mode 100644 source/_components/notify.html5.markdown create mode 100644 source/images/supported_brands/html5.png diff --git a/source/_components/notify.html5.markdown b/source/_components/notify.html5.markdown new file mode 100644 index 00000000000..5b83fc4d29d --- /dev/null +++ b/source/_components/notify.html5.markdown @@ -0,0 +1,213 @@ +--- +layout: page +title: "HTML5" +description: "Instructions how to use the HTML5 push API from Home Assistant." +date: 2016-08-16 20:18 +sidebar: true +comments: false +sharing: true +footer: true +logo: html5.png +ha_category: Notifications +ha_release: 0.27 +--- + +The `html5` notification platform enables you to receive push notifications to Chrome or Firefox, no matter where you are in the world. `html5` also supports Chrome and Firefox on Android, which enables native-app-like integrations without actually needing a native app. + +To enable this platform, add the following lines to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +notify: + name: HTML5 + platform: html5 + gcm_api_key: 'gcm-sender-key' + gcm_sender_id: 'gcm-sender-id' +``` + +Configuration variables: + +- **name** (*Optional*): Setting the optional parameter `name` allows multiple notifiers to be created. The default value is `notify`. The notifier will bind to the service `notify.NOTIFIER_NAME`. +- **gcm_api_key** (*Required if pushing to Chrome*): The API key provided to you by Google for Google Cloud Messaging (GCM). Required to push to Chrome. +- **gcm_sender_id** (*Required if pushing to Chrome*): The sender ID provided to you by Google for Google Cloud Messaging (GCM). Required to push to Chrome. + +### {% linkable_title Getting ready for Chrome %} + +Google has [a handy guide](https://developers.google.com/web/fundamentals/getting-started/push-notifications/step-04) that goes into great detail about how to set up for pushing to Chrome. Once you have your GCM API Key and Sender ID in hand, plug them into your configuration as described above. + +### {% linkable_title Requirements %} + +The `html5` platform can only function if all of the following requirements are met: + +* You are using Chrome and/or Firefox on any desktop platform, ChromeOS or Android. +* Your Home Assistant instance is exposed to the world. +* You have configured SSL for your Home Assistant. It doesn't need to be configured in Home Assistant though, i.e. you can be running nginx in front of Home Assistant and this will still work. +* You are willing to accept the notification permission in your browser. + +### {% linkable_title Setting up %} + +Assuming you have already added the platform to your configuration: + +1. Open Home Assistant in Chrome or Firefox. +2. Assuming you have met all the [requirements](#requirements) above, you should see a new slider in the sidebar labeled Push Notifications. +3. Slide it to the on position. +4. Within a few seconds you should be prompted to allow notifications from Home Assistant. +5. Assuming you accept, that's all there is to it! +6. (Optional, but highly recommended!) Open the `html5_push_registrations.conf` file in your configuration directory. You will see a new entry for the browser you just added. Rename it from `unnamed device` to a name of your choice, which will make it easier to identify later. _Do not change anything else in this file!_ You need to restart Home Assistant after making any changes to the file. + +### {% linkable_title Usage %} + +The `html5` platform accepts a standard notify payload. However, there are also some special features built in which you can control in the payload. + +#### {% linkable_title Actions %} + +Chrome supports notification actions, which are configurable buttons that arrive with the notification and can cause actions on Home Assistant to happen when pressed. You can send [up to 2 actions](https://cs.chromium.org/chromium/src/third_party/WebKit/public/platform/modules/notifications/WebNotificationConstants.h?q=maxActions&sq=package:chromium&dr=CSs&l=14). + +```json +{ + "message": "Anne has arrived home", + "data": { + "actions": [ + { + "action": "open", + "icon": "/static/icons/favicon-192x192.png" + "title": "Open Home Assistant" + }, + { + "action": "open_door", + "title": "Open door" + } + ] + } +} +``` + +#### {% linkable_title Data %} + +Any parameters that you pass in the notify payload that aren't valid for use in the HTML5 notification (`actions`, `badge`, `body`, `dir`, `icon`, `lang`, `renotify`, `requireInteraction`, `tag`, `timestamp`, `vibrate`) will be sent back to you in the [callback events](http://localhost:4000/components/notify.html5/#automating-notification-events). + +```json +{ + "title": "Front door", + "message": "The front door is open", + "data": { + "my-custom-parameter": "front-door-open" + } +} +``` + +#### {% linkable_title Tag %} + +By default, every notification sent has a randomly generated UUID (v4) set as its _tag_ or unique identifier. The tag is unique to the notification, _not_ to a specific target. If you pass your own tag in the notify payload you can replace the notification by sending another notification with the same tag. You can provide a `tag` like so: + +```json +{ + "title": "Front door", + "message": "The front door is open", + "data": { + "tag": "front-door-notification" + } +} +``` + +#### {% linkable_title Targets %} + +If you do not provide a `target` parameter in the notify payload a notification will be sent to all registered targets as listed in `html5_push_registrations.conf`. You can provide a `target` parameter like so: + +```json +{ + "title": "Front door", + "message": "The front door is open", + "target": "unnamed device" +} +``` + +`target` can also be a string array of targets like so: + +```json +{ + "title": "Front door", + "message": "The front door is open", + "target": ["unnamed device", "unnamed device 2"] +} +``` + +#### {% linkable_title Overrides %} + +You can pass any of the parameters listed [here](https://developer.mozilla.org/en-US/docs/Web/API/ServiceWorkerRegistration/showNotification#Parameters) in the `data` dictionary. Please note, [Chrome specifies](https://cs.chromium.org/chromium/src/third_party/WebKit/public/platform/modules/notifications/WebNotificationConstants.h?q=maxActions&sq=package:chromium&dr=CSs&l=21) that the maximum size for an icon is 320px by 320px, the maximum `badge` size is 96px by 96px and the maximum icon size for an action button is 128px by 128px. + +#### {% linkable_title URL %} + +You can provide a URL to open when the notification is clicked by putting `url` in the data dictionary like so: + +```json +{ + "title": "Front door", + "message": "The front door is open", + "data": { + "url": "https://google.com" + } +} +``` + +If no URL or actions are provided, interacting with a notification will open your Home Assistant in the browser. You can use relative URLs to refer to Home Assistant, i.e. `/map` would turn into `https://192.168.1.2:8123/map`. + +### {% linkable_title Automating notification events %} + +During the lifespan of a single push notification, Home Assistant will emit a few different events to the event bus which you can use to write automations against. + +Common event payload parameters are: + +| Parameter | Description | +|-----------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| `action` | The `action` key that you set when sending the notification of the action clicked. Only appears in the `clicked` event. | +| `data` | The data dictionary you originally passed in the notify payload, minus any parameters that were added to the HTML5 notification (`actions`, `badge`, `body`, `dir`, `icon`, `lang`, `renotify`, `requireInteraction`, `tag`, `timestamp`, `vibrate`). | +| `tag` | The unique identifier of the notification. Can be overridden when sending a notification to allow for replacing existing notifications. | +| `target` | The target that this notification callback describes. | +| `type` | The type of event callback received. Can be `received`, `clicked` or `closed`. | + +You can use the `target` parameter to write automations against a single `target`. For more granularity, use `action` and `target` together to write automations which will do specific things based on what target clicked an action. + +#### {% linkable_title received event %} + +You will receive an event named `html5_notification.received` when the notification is received on the device. + +```yaml +- alias: HTML5 push notification received and displayed on device + trigger: + platform: event + event_type: html5_notification.received +``` + +#### {% linkable_title clicked event %} + +You will receive an event named `html5_notification.clicked` when the notification or a notification action button is clicked. The action button clicked is available as `action` in the `event_data`. + +```yaml +- alias: HTML5 push notification clicked + trigger: + platform: event + event_type: html5_notification.clicked +``` + +or + +```yaml +- alias: HTML5 push notification action button clicked + trigger: + platform: event + event_type: html5_notification.clicked + event_data: + action: open_door +``` + +#### {% linkable_title closed event %} + +You will receive an event named `html5_notification.closed` when the notification is closed. + +```yaml +- alias: HTML5 push notification clicked + trigger: + platform: event + event_type: html5_notification.closed +``` diff --git a/source/images/supported_brands/html5.png b/source/images/supported_brands/html5.png new file mode 100644 index 0000000000000000000000000000000000000000..fe74f609064ba7e3e3237abdbc886b87298aee33 GIT binary patch literal 2223 zcmV;g2vGNlP)yS1SfXi^TS zg>a!oPAv)t4Yi5!VnX0#;>mwk6S;e!96hNAkD{JTJhfTl#VAt}E|A#m$#&r|KoJg9 zi`16x&dg)p>@2KgcmBNp@6Gp1UN+rsw=>`Od*8qJzBdTT1s*VHK6^RkGkL~*@;!4Y zpE*C^+U9b6Z_)czf(inp;X*XV`n><8EjI`RNXJ+oWfQ9~4Fo6;K1@u0mk<|hx;Y>~ zK6I_XcLQ94v8ZWs9rF}_)9CZw^Z*5U$$0*~yqHdue-7q?m@J^kNWs-B;0Af-Ha^`UzTxe47MxA4KCw&wHE6^_~})^?YA2 zOR+Ky)TQ9^QIcKs{=CWfomuzh$|3-`fNZ#l$tPGy1_Xg612OrHWcFKy8t66`h{>OU zG!THm0`QOad3?5u9|ojnE=9UWTL*9%?;+3s1^@s60000000000fCdh)FIqn{Igc#c zF{?2yPSl(8Jidr$C9nZ{kp^zE=1G7}(2F!|>PP@UnPY$?4!|H%@reAt0~P=P1OTvu z_j0g{o;6Y$f#Fg8=0JNVL}8FBV{Hjw99|f8G$eqzE&x(N4oI2(+-1z004tzA;aJg` z006PGUwaqefeP7x11wd>KmhZgH30yO2z;|$0IUcy2LWb*!PF+IcJ>ogJ^QgVX$}nyp?&-JOV!|R{hN3UOamn^sDlfT zo#$^qN{<2C=DUC;QNpnz$X{PoB3mOY0KRjh+!MQ_1xNkiHf;+29WNU^CcyJF~fCVnV14BPR!5eqeCqN)yw%iFYQExI`B))BLAc!~q zQYu>`>Hv6WtF#s(@a4Bvh#~-#gZl=6f2NZ^lrK|JyMn3H6}-BP&{X~-`GUnu^wy?Y zLA&F7ArUe)DhR|I`Im*Aaa&w~T|pp$2QGkH4B(ZD05-1(>Nc75ECm-# z1&1$PrTRBAw}oeI2M>MwTmY;H_8@C3n2MD^(FC9_2a^RJ>#*}ki7buG0!n8cTI$Z% z)Y1jmSPu5ruCe^NYa#*YH-(fe3&08w*aa6LL&2H-fEE&9qTXaPTNb$i#(qF{S(<18 z!V>ifswxA^AOQ3UqV#^i4gu83P&5G;`ULG+5!9_8uov3y3J$OSf{@^5QQB?cmGM{5 z&>QFYU57#!AesOkH33$anYMf91)mvkooA?o8J@Knx4Y!HgZjLd(Fy3BY==aglPcvu9ME3z$5~uLgka4g%$+ zW}5a0W|e`1HnN@o^d?NhR&i&fST{0b8Q3kg1;Dp&7E_Ld9)aqiSNYy!V808H*e9r8 zmr&+rkU*{MWDtP*Id?j)2o@~^Gj0Z1v4H^evuER8LFI^d0bI+#fqEIsCp^en1rjVCWOPX{`mo>J0$6 z0HF%j>=}V7(?D|2@f?*IUHmq#2UL#DMEU(`?GJ?_k$=#<7McI+$Z!0{Dl=;cz=Sw& zCxx6Jzm5q|nVN|!ewC>caq&m>EGLTgBc%tC((@L6bSMMMBmlQ`hE(?gGDznT@nOU= zL_~?v<%q((ZQp|937i3nG+1(}z zk7l~0XBsqYB7huhZ*?p~VjYM@=(vm7__a{%LCkvM#~JJS-~y1MHgQt>56JlSr;fWI z3q=Eh$)~|v<9F8lJ*NxE{D>z*Mvg3Hte=_0IvEQ>fZFlb(B1>Xg@QL;Xl-G%yES+* zV4~i1Y_b6Q<>*l$*}n2KYAbqZRN(6|A7mDSJOp?~Kt(5m0s+i`w3w*|vX(UCapy!( z|1pkV%a#Rn&DvasujGqPa&wIY^vamB}HC9ojm}qjLo1*2+)TRgaG8gy|lpv@oZDo$6c8kdj*Crm)iU57A!(5Mb7&9z<@SdCHTE;+* zDbkDxG2P=X<}|%bw`Z0c@zgX283>Jn$)~|vr0@k3WoaY<6b6%<&&_hrblF)!0Kvhe xmcbhkKwL0sMDPX#;2TW#7GX;D$lE6Z3;;+B!FrIJiHraM002ovPDHLkV1h;@?neLs literal 0 HcmV?d00001 From 1645d0b80c5e70e56a1486bc77eafaf1ddefa685 Mon Sep 17 00:00:00 2001 From: Robbie Trencheny Date: Wed, 17 Aug 2016 22:00:44 -0700 Subject: [PATCH 11/80] Update page name, make it featured --- source/_components/notify.html5.markdown | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/source/_components/notify.html5.markdown b/source/_components/notify.html5.markdown index 5b83fc4d29d..f081899c9f2 100644 --- a/source/_components/notify.html5.markdown +++ b/source/_components/notify.html5.markdown @@ -1,8 +1,8 @@ --- layout: page -title: "HTML5" -description: "Instructions how to use the HTML5 push API from Home Assistant." -date: 2016-08-16 20:18 +title: "Push Notifications" +description: "Instructions how to use the HTML5 push notifications platform from Home Assistant." +date: 2016-08-17 21:58 sidebar: true comments: false sharing: true @@ -10,6 +10,7 @@ footer: true logo: html5.png ha_category: Notifications ha_release: 0.27 +featured: true --- The `html5` notification platform enables you to receive push notifications to Chrome or Firefox, no matter where you are in the world. `html5` also supports Chrome and Firefox on Android, which enables native-app-like integrations without actually needing a native app. From cf40f3e7c2bc7509d162a061da0ddc4b1b999846 Mon Sep 17 00:00:00 2001 From: Robbie Trencheny Date: Wed, 17 Aug 2016 22:00:59 -0700 Subject: [PATCH 12/80] Remove InfluxDB from featured --- source/_components/influxdb.markdown | 1 - 1 file changed, 1 deletion(-) diff --git a/source/_components/influxdb.markdown b/source/_components/influxdb.markdown index 439c198b9f1..50c5aaa7d41 100644 --- a/source/_components/influxdb.markdown +++ b/source/_components/influxdb.markdown @@ -9,7 +9,6 @@ sharing: true footer: true logo: influxdb.png ha_category: "History" -featured: true ha_release: 0.9 --- From 9840ee2ec86ab8a431ffe8e3ac02c69c2a4bfedb Mon Sep 17 00:00:00 2001 From: David Straub Date: Thu, 18 Aug 2016 07:41:48 +0200 Subject: [PATCH 13/80] Documentation for forecast.io updated with new sensor types (#797) --- source/_components/sensor.forecast.markdown | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/source/_components/sensor.forecast.markdown b/source/_components/sensor.forecast.markdown index 4ee3b1b82f2..6700c62535a 100644 --- a/source/_components/sensor.forecast.markdown +++ b/source/_components/sensor.forecast.markdown @@ -49,6 +49,11 @@ sensor: - minutely_summary - hourly_summary - daily_summary + - temperature_max + - temperature_min + - apparent_temperature_max + - apparent_temperature_min + - precip_intensity_max ``` Configuration variables: @@ -72,6 +77,11 @@ Configuration variables: - **minutely_summary**: A human-readable text summary for the next hour. - **hourly_summary**: A human-readable text summary for the next 24 hours. - **daily_summary**: A human-readable text summary for the next 7 days. + - **temperature_max**: Today's expected high temperature. + - **temperature_min**: Today's expected low temperature. + - **apparent_temperature_max**: Today's expected apparent high temperature. + - **apparent_temperature_min**: Today's expected apparent low temperature. + - **precip_intensity_max**: Today's expected maximum intensity of precipitation. - **units** (*Optional*): Specify the unit system. Default to `si` or `us` based on the temperature preference in Home Assistant. Other options are `auto`, `us`, `si`, `ca`, and `uk2`. `auto` will let forecast.io decide the unit system based on location. From 30b16d1d9484173d34710211942c3cf0b5ec0da3 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Thu, 18 Aug 2016 08:51:10 +0200 Subject: [PATCH 14/80] Add customization options --- source/_components/media_player.webostv.markdown | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/source/_components/media_player.webostv.markdown b/source/_components/media_player.webostv.markdown index 69f8fa65547..76be7fa7f51 100644 --- a/source/_components/media_player.webostv.markdown +++ b/source/_components/media_player.webostv.markdown @@ -22,14 +22,21 @@ To add a TV to your installation, add the following to your `configuration.yaml` ```yaml # Example configuration.yaml entry media_player: - platform: webostv - host: 192.168.0.10 - name: Living Room TV + - platform: webostv + host: 192.168.0.10 + name: Living Room TV + customize: + sources: + - livetv + - youtube + - makotv ``` Configuration variables: - **host** (*Optional*): The IP of the LG WebOS Smart TV, eg. 192.168.0.10 - **name** (*Optional*): The name you would like to give to the LG WebOS Smart TV. +- **customize** array (*Optional*): List of options to customize. + - ***sources** array (*Optional*): List of hardware inputs. If you do not provide a host name, all LG WebOS Smart TV's within your network will be auto-discovered if your TV network name is set to `[LG] webOS TV` From ea254bbc82ce8cdb2f3cd41edffbe0c88abf768c Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Thu, 18 Aug 2016 09:05:31 +0200 Subject: [PATCH 15/80] Sync --- source/_posts/2016-08-14-release-27.markdown | 13 +++++++++++-- source/developers/credits.markdown | 2 ++ 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/source/_posts/2016-08-14-release-27.markdown b/source/_posts/2016-08-14-release-27.markdown index f35dfe0cad3..2669b8b0aac 100644 --- a/source/_posts/2016-08-14-release-27.markdown +++ b/source/_posts/2016-08-14-release-27.markdown @@ -16,6 +16,10 @@ It's time for 0.27 and it's again full of new features and fixes. - [Fritzbox] ([@DavidMStraub]) - [HP] ([@Juggels]) +- Media player - WebOS: Support for [customizing][webos] inputs ([@roidayan]) +- Device tracker: [Gravatar] ([@robbiet480]) +- [HTML5] notify actions ([@robbiet480]) +- Camera: Support for HTTP Bascic and Digest authentification ([@meatz]) ### {% linkable_title Breaking changes %} @@ -24,6 +28,10 @@ It's time for 0.27 and it's again full of new features and fixes. [@DavidMStraub]: https://github.com/DavidMStraub [@Juggels]: https://github.com/Juggels +[@roidayan]: ttps://github.com/roidayan +[@robbiet480]: https://github.com/robbiet480 +[@meatz]: https://github.com/meatz + [@abcminiuser]: https://github.com/abcminiuser [@balloob]: https://github.com/balloob @@ -40,7 +48,6 @@ It's time for 0.27 and it's again full of new features and fixes. [@partofthething]: https://github.com/partofthething [@persandtrom]: https://github.com/persandtrom [@pvizeli]: https://github.com/pvizeli -[@robbiet480]: https://github.com/robbiet480 [@sdague]: https://github.com/sdague [@shmuelzon]: https://github.com/shmuelzon [@tchellomello]: https://github.com/tchellomello @@ -52,4 +59,6 @@ It's time for 0.27 and it's again full of new features and fixes. [SABnzbd]: /components/sensor.sabnzbd/ [HP]: /components/sensor.hp_ilo/ [Fritzbox]: /components/sensor.fritzbox_callmonitor/ - +[webos]: /components/media_player.webostv/ +[HTML5]: /components/notify.html5/ +[Gravatar]: /components/device_tracker/ diff --git a/source/developers/credits.markdown b/source/developers/credits.markdown index f82be1d4497..621f28baeb0 100644 --- a/source/developers/credits.markdown +++ b/source/developers/credits.markdown @@ -142,6 +142,7 @@ This page contains a list of people who have contributed in one way or another t - [Martin Hjelmare](https://github.com/MartinHjelmare) - [Matteo Lampugnani](https://github.com/t30) - [Matthew Treinish](https://github.com/mtreinish) +- [Matthias Grawinkel](https://github.com/meatz) - [Michaël Arnauts](https://github.com/michaelarnauts) - [Michael Gilbert](https://github.com/Zyell) - [Michael Kutý](https://github.com/michaelkuty) @@ -170,6 +171,7 @@ This page contains a list of people who have contributed in one way or another t - [rkabadi](https://github.com/rkabadi) - [Robbie Trencheny](https://github.com/robbiet480) - [Rob Olimpiu](https://github.com/olimpiurob) +- [Roi Dayan](https://github.com/roidayan) - [Rowan Hine](https://github.com/GreenTurtwig) - [rubund](https://github.com/rubund) - [Ryan Kraus](https://github.com/rmkraus) From 3ed63d58960b690313c88cf34bf21a77ac283778 Mon Sep 17 00:00:00 2001 From: Robbie Trencheny Date: Thu, 18 Aug 2016 00:31:45 -0700 Subject: [PATCH 16/80] Add documentation for the notify.group platform --- source/_components/notify.group.markdown | 36 ++++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 source/_components/notify.group.markdown diff --git a/source/_components/notify.group.markdown b/source/_components/notify.group.markdown new file mode 100644 index 00000000000..69c3ab8088d --- /dev/null +++ b/source/_components/notify.group.markdown @@ -0,0 +1,36 @@ +--- +layout: page +title: "Notify Group" +description: "Instructions how to setup the notify group platform." +date: 2016-08-18 00:12 +sidebar: true +comments: false +sharing: true +footer: true +logo: home-assistant.png +ha_category: Notifications +ha_release: 0.26 +--- + +The `group` notification platform allows you to combine multiple `notify` platforms into a single service. + +To use this notification platform in your installation, add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +notify: + name: MyDevices + platform: group + services: + - service: html5 + data: + target: "macbook" + - service: html5_nexus +``` + +Configuration variables: + +- **name** (*Required*): Setting the parameter `name` sets the name of the group. +- **services** (*Required*): A list of all the services to be included in the group. + - **service** (*Required*): The service part of an entity ID, i.e. if you use `notify.html5` normally, just put `html5`. + - **data** (*Optional*): A dictonary containing parameters to add to all notify payloads. This can be anything that is valid to use in a payload, such as `data`, `message`, `target`, `title`. From 89ce64334d06aa7c2f5154a4cb32ecbe6e0a81d6 Mon Sep 17 00:00:00 2001 From: arsaboo Date: Thu, 18 Aug 2016 09:22:26 -0400 Subject: [PATCH 17/80] Create Wundeground markdown --- .../_components/sensor.wunderground.markdown | 94 +++++++++++++++++++ 1 file changed, 94 insertions(+) create mode 100644 source/_components/sensor.wunderground.markdown diff --git a/source/_components/sensor.wunderground.markdown b/source/_components/sensor.wunderground.markdown new file mode 100644 index 00000000000..862e44f86b9 --- /dev/null +++ b/source/_components/sensor.wunderground.markdown @@ -0,0 +1,94 @@ +--- +layout: page +title: "Weather Underground (Wunderground)" +description: "Instructions how to integrate Weather Underground (Wunderground) Weather within Home Assistant." +date: 2016-08-18 +sidebar: true +comments: false +sharing: true +footer: true +logo: wunderground.png +ha_category: Weather +ha_release: 0.27 +--- + + +The `wunderground` platform uses [Weather Underground](http://www.wunderground.com.com) as an source for current weather information. + +

+Obtain Wunderground API [here](https://www.wunderground.com/weather/api). Free account allows 500 requests per day or 10 per minute. +

+ +To add Wunderground to your installation, add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +sensor: + platform: wunderground + api_key: your_api_key + pws_id: enter_pws_id + monitored_conditions: + - weather + - temp_f + - temp_c + - station_id + - feelslike_c + - feelslike_f + - feelslike_string + - heat_index_c + - heat_index_f + - heat_index_string + - dewpoint_c + - dewpoint_f + - dewpoint_string + - wind_kph + - wind_mph + - UV + - pressure_in + - pressure_mb + - wind_dir + - wind_string + - relative_humidity + - visibility_mi + - visibility_km + - precip_today_in + - precip_today_metric + - precip_today_string + - solarradiation + +``` + +Configuration variables: +- **api_key** (Required): See above +- **pws_id** (Optional): You can enter your PWS id. Current list of Wunderground PWS stations is available [here](https://www.wunderground.com/weatherstation/ListStations.asp). If you do not enter the PWS ID, the current location information (latitude and longitude) from your `configuration.yaml` will be used to display weather conditions. +- **monitored_conditions** array (*Required*): Conditions to display in the frontend. The following conditions can be monitored. + - **weather**: A human-readable text summary with picture from Wunderground. + - **temp_f**: Current temperature in Fahrenheit + - **temp_c**: Current temperature in Celsius + - **station_id**: Your personal weather station (PWS) ID + - **feelslike_c**: Feels like (or apparent) temperature in celsius + - **feelslike_f**: Feels like (or apparent) temperature in Fahrenheit + - **feelslike_string**: Text summary of how the current teperature feels like + - **heat_index_c**: Heat index (combined effects of the temperature and humidity of the air) in Celsius + - **heat_index_f**: Heat index (combined effects of the temperature and humidity of the air) in Fahrenheit + - **heat_index_string**: Text summary of current heat index + - **dewpoint_c**: Temperature in celsius below which water droplets begin to condense and dew can form + - **dewpoint_f**: Temperature in fahrenheit below which water droplets begin to condense and dew can form + - **dewpoint_string**: Text summary of dew point + - **wind_kph**: Current wind speed in kph + - **wind_mph**: Current wind speed in mph + - **UV**: Current levels of UV radiation. See [here](https://www.wunderground.com/resources/health/uvindex.asp) for explanation. + - **pressure_in**: Atmospheric air pressure in inches + - **pressure_mb**: Atmospheric air pressure in millibars + - **wind_dir**: Wind direction + - **wind_string**: Text summary of current wind conditions + - **relative_humidity**: Reltive humidity + - **visibility_mi**: Average visibility in miles + - **visibility_km**: Average visibility in km + - **precip_today_in**: Total precipitation in inches + - **precip_today_metric**: Total precipitation in metric units + - **precip_today_string**: Text summary of precipitation today + - **solarradiation**: Current levels of solar radiation + +Additional details about the API are available [here](https://www.wunderground.com/weather/api/d/docs). + From 7ed4ba1cf0265a6a3f02cc85b8be73f90e130ef9 Mon Sep 17 00:00:00 2001 From: Landrash Date: Fri, 19 Aug 2016 06:47:37 +0200 Subject: [PATCH 18/80] Fixed typo in wunderground documentation. - Removed extra .com --- source/_components/sensor.wunderground.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/sensor.wunderground.markdown b/source/_components/sensor.wunderground.markdown index 862e44f86b9..3a793c1821d 100644 --- a/source/_components/sensor.wunderground.markdown +++ b/source/_components/sensor.wunderground.markdown @@ -13,7 +13,7 @@ ha_release: 0.27 --- -The `wunderground` platform uses [Weather Underground](http://www.wunderground.com.com) as an source for current weather information. +The `wunderground` platform uses [Weather Underground](http://www.wunderground.com) as an source for current weather information.

Obtain Wunderground API [here](https://www.wunderground.com/weather/api). Free account allows 500 requests per day or 10 per minute. From 166734b4ed7950af9e2c38afb41e664ba9a77c12 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Fri, 19 Aug 2016 12:33:17 +0200 Subject: [PATCH 19/80] Blog post for the new data exploration notebook by @kireyeu (#790) --- ...e-calendar-heatmap-of-device-data.markdown | 25 ++++++++++++++++++ .../blog/2016-08-data-exploration/heatmap.png | Bin 0 -> 18884 bytes 2 files changed, 25 insertions(+) create mode 100644 source/_posts/2016-08-19-github-style-calendar-heatmap-of-device-data.markdown create mode 100644 source/images/blog/2016-08-data-exploration/heatmap.png diff --git a/source/_posts/2016-08-19-github-style-calendar-heatmap-of-device-data.markdown b/source/_posts/2016-08-19-github-style-calendar-heatmap-of-device-data.markdown new file mode 100644 index 00000000000..b62133e82d1 --- /dev/null +++ b/source/_posts/2016-08-19-github-style-calendar-heatmap-of-device-data.markdown @@ -0,0 +1,25 @@ +--- +layout: post +title: "Github-style calendar heatmap of device data" +description: "Generating a Github-style calendar heatmap from your device data." +date: 2016-08-19 06:00:00 +0000 +date_formatted: "August 19, 2016" +author: Fabian Affolter +author_twitter: fabaff +comments: true +categories: How-To IoT-Data +og_image: /images/blog/2016-08-data-exploration/heatmap.png +--- + + +Thanks to [Anton Kireyeu](https://github.com/kireyeu) we are able to present another awesome [Jupyter notebook]. I guess that you all know the graph which Github is using to visualize your commits per day over a time-line. It's a so-called [heatmap]. If there are more commits, it's getting hotter. The latest [notebook][nb-prev] is capable to do the same thing for your devices. To be more precise, for the hours your devices are home. + +

+ +Heatmap +

+ +[heatmap]: https://en.wikipedia.org/wiki/Heat_map +[Jupyter notebook]: https://jupyter.org/ +[nb-prev]: http://nbviewer.jupyter.org/github/home-assistant/home-assistant-notebooks/blob/master/DataExploration-2/DataExploration-2.ipynb + diff --git a/source/images/blog/2016-08-data-exploration/heatmap.png b/source/images/blog/2016-08-data-exploration/heatmap.png new file mode 100644 index 0000000000000000000000000000000000000000..c69bc25edf4396e4f3eeb915f4fa8405cbee8c89 GIT binary patch literal 18884 zcmdUXcRbba|NbEg*|TAkkfe;18Cl6JQmJI7R7yyhk?a`~qCrVCM48#Eq(rF{*+urs zi1=OiyYcys&-XX}{GG?U-r_jt^}6rpxUTDY-6v?5fff_P3I+;=!lb=J!-ztmS&Ofq z(=Eo|&9))!_#cgvnzk_=9v*au1MzSA(>wM%Q7B8<$sejWpU=-xD61&i8mh)Fi36Wq zO%1*+sEmBbAHHL>|CGkD*X%Ke?UMA%WvtuOs~N4eC!Ou2a$Zi4WL~xtICzBa;<7uc zJ3i`1Ds%4s=%0D}h%);-&xQGsevfPK6*tJbZWV~&FUWAZ)?fJg+nF=1Jp~Wf+)hbJ z+otjBaeKA2{*pic5ResF8~E$7<5pbaD#2fmFe^u&-`|!AuA%?^-8Z8D<;iXlKgVh% zY#Wkk8JU=*&JHwD_shx2Sqy&4=HmVMtYhf&(_NyRfnj0q&WNU19X}p?|A$$HHjcGzeKHq0KKogBnHkSpP2@S83&N^3l0tD!-mY#?hmvHJ6b@$Dy1 zWNzQNldK-VeD`4P!#foQ^1JS*j@a0AMDJ8i^A6M*@(dre-uK|ZX48B}%`rv6=+XVcY()Yt zn+21n>Ru(tN?DXr;^O0zEGzt%NmSZO?FzQp1lY~SBsPOnQCV4edi=FY)fXx%DqP~V!`BKA%{cYXO?O4uwie3w zy?+oA8p?>^xV1agKyveDzx;f8rL9}5ev0leFzM`e2Rq^&M$M)^p zZ5!{h9eH)t@BV#p2Uil)HZM3|#&24Jg|Mx^N%cO%JmN!!x%HRxJ z9#fysoj!YZF(pynX)%MJn)LmyHz~TktwoA@dU_V8PKEPtb!*QknP-p9IFQYN@C?Yz zl)`36$S(vNHRXTn?+>9`wAkWZ`kqIRA78w7jnBI?V<+Ww|N9Lt?(P+chC6re^u9@1 zda5PQuzj+tv$H{fjzfHkXBo}R%*aB=#Blxi-XDNa2&s*Zj!r`1 z`1!**^M0NsZ{NemXTBN9oczS;-2Yy)t2(Tsr)QsqyDJ`+)uGGdRJ@e$KX}k^*Kp0t z8!F~TJ*XdXisv@kojhr2WktPn=gvfB&jVS5BKlW%)MZMP%(3HbH4F?4l4fm>9t~)3 zw-_BqQq?DGE^T~pkcVl7%(jyAKZU;2s%}Gpv_yWL|Kc{*O}}FEabK?WdjoCuWteFq zVMc2uO71#~2L|d~MCE;Rw{WN2!jFClkI^a~EMY}W^je3JcGW_cQR<6}nb`a1kTc8V zPOn0Uu(7dSz&j>;EzEbms=^bKjM5$*d9^}FM5GgYN@<-lJUcaXhgh3_9sJ}M7)WQFW<={bJ6UyaUj|8)@t)V} zDMqV>glOpL>22TM(N8-0;9xE@3PE6KXr(VbhopV0(x`}jicwi}^UBxPw^kr69B>&* zZWDCs{*3D;d!nc4hps7}dt~3HY}cH_gziw^&`{Q1cCq2%Aw?90HG+cFxQ2C4w5qzE zMMzmy(lPQYE#r|et8BQXMM|djwWsHXt?=4S*(Z3I`IQ21-xjLTFV8vI{K#e03N>#f zd2+I5$RoG!$L(4R_rIxQQJM38c<8C1g2D>)6#pAH1o)L)C=@hCZ=IC#`Jc0qadCmz zbWT@ZZV9tcDeLN0cq($>*+@r4WMm{&yFPUiHskb}GnMh1jy^g&cwnG8m!-{f>e}rv zbflZd-=*WlN^fgNOFDhkBNvP)DgE{~wF8?n+Vw0%_LYQru}1Ex&o@(318!+WbWV?U zNlHtr;Wn0T%`g_@TFk=FNRc}~C-?s0p%A1;%_{*)Z-4(9QBgW_JHcG*M-U&@Gh<(( z6#TXp$;!$G1OzNOJJhmnU0c4>+QOouq?A1_sW0p6cilA><5fA&dvEW9^7ju8vT<_K zP?kv_raSeyz%MRtS>`-;?DV%c!i;dy-e~^tLyXtwrutPP2V1xHp;xVo$BA zg1PcecTkJ$ydH|6?P|)j_Tx`5)x4H)^!0U34-ciu!RCOAOIWBy=YLG}HmvcO{CMk-b6;u35E;f{bGG z+D?%?-Y9BXaEAV1j$PTu$4477%vDh7x9N2o+)(D@=H^}|dy1E0@hqH=L<2IoaVY8R z%$SYG>|k!(rlZUcP4j&gEn&V1gb}46VOF>e8DxoGjpVC*_AI0pFrwj0IvpC9cN3G?tRCqK1gStYk@;f~eE%?=F> zQM^k_w>5qGL~?OtbhPH2cvMu>NPk92XK%x;(~geRl>6o-{F9TDbWBWs5fKr~+{0FE z4jwcb>gZVAdMT7wp1uD=#xo>ILzazhqJlGn?5UP*c6Rq&=I}+}PL-dWh)Dm0goBYM zOE#=uzjWmmJJtw?0|!>j&(GSQ`Syku3r_J~%(Q~DV7?-NCGy&}FtpE*Oqo+HCPr&F zZQ{VoYoW(eDC_q<^o@<>iHeT4w6XCMI6qCblv|wDOZn^9uW^!=)VMdH{BHH1@nThiPs{W>`5cPm*#VO?LoLfo6NDNO6|6iw0r(9I>>XJR`ypHxotKxF z-gTwrkB`3gfB0}C=T`%2Mf-uD=aJ&`hLgYn%H^!BS-v^TGnVh zDC&DNpHWjhJUk>FIyJ=23YUHQ^l8VA9i?AtW5>TY)zm(JPFH(n!=jO|O8L(H+&(@& z?P%g|-}}lcDi#4B6ENm2yY( zPfWC~ozTfJD$!qMu<0DMGyu3m?>SPk ztlMZ_9IBtNB?%BqlmAw7o&KRihX__<-&S?##+Fkpbe^7`=mPqMHQ7&|yv+SPGIH8u z{FSUpv4{MRsbPsL3;pH`|D04Uws4#>|%U`eY9kLJOHD=%EQfc|kIER5-E z-L()jGpnJNe0-H$BVCAxdPgv8N$7RQrP_HTIc(GuLb44clVZ{fIk1?nE5QG zU|?XNlHUBmg9n*5wcHxpwK6r-pB#6%ZISF)?9r{5XTVySqa^E)G?FsiLAH>G5=oj2Zy- ztXy2e*Evu%s~=fbNTSU>IrVvkSPX;i6>&qw#e&IiEWq5v^gvrOkG~Vs-tXa2*!}e< zEQ}O;iH+np6 zb>yW>lzh|hy$=oq*&ud-{0=4ca|-8%oZGl&%^D@wF&fIHxHvj|T_g31PbccqrCrJ0 z8c4g!gthIjm@en$%DPPrF=4&)3JS>D`Z3enetNPF-K9R~2>-qco(iq>{%f!O3^iN}T9Xp(90Hjg8_LhBH{fjS-jp=)Il|+QUpFNnb zGM*bT+^phGv2D)TU{-QI44A;-bD_!_b#-;^rw0xkxNCUJ-(~2~)3Z$L)~%ZfM}|m5 zCMKF%BnAZq`SF+J@+rBnmX($5(9tOm;gPr$9lbkQd$f4EbE#g!7N!7ZKD8Ulo~-Qb zKHM7)lvY>YdH#KjKNU-2Sra8Z-L^2lWYMBUgq@9i|6Ua(tUH2?Uj^==*UOnxf=j+@ zloD)m#a%r{7kPx_ARPy>QqkDR={_~Y6~NEcja=`=p9{6@?Ch7~*hK2FcYAP1rpz%MH4GwzWw;|bQiPMe*)lgfLW0n zGMtHUOt8lKOlvKV`I(;MudhW;O*I2v7H&5!a^pgrZaA28IWfW2U1tA*16HG*Rm;$q zlo#g4sX3Z8zcpp9AzY-rox;Mx;^N|R^I-0&`VSwLP|#eqzgd)ltRdu;6yD|4k56}~ zCCWKaV=1bDm4r*oH8j2i0Wzmc?nyVUnX244EN7o$6twYB!H)S|FJfjn9e^Id4A)Up zQ(GK4vY3yL?+kcIn}8eby1TWmt5N{Zoe`f)q{`@#$KQ8Q7WZQgXHT zXbm?^GcGSHqgt4G?KPHt=+<_oZ0pzkU|-9WJ>-giP98in(8PvadxfAv&=n zG!kE5-AXrHfS_tidq?%BB#9X)-|y-wurc0{DkyE_UWE`zKR4Wa4jIf=Qsxzp{X z7d$Gsb+Wd$>&q?_(nluy7v5bnJZ!%I&<(=vZEXVuyyn=zs_K#AvFl=VUdBl+0*HN? zYlg0}H0*&;Yq90d( z^~&9!BXB>0s9hiea?X96d+(cEKsD==H0soT4sv{KLZy@n<+)#?P1>Lb8)YU=~nj zJbLu#+{D|Rn(ysDW(nWfc_Tb}?auP1re#Qcp4hD()4Qbi_n;1e+7YIV_#{7sW-wD1 z;Zu;#BQo{%o_HPG%9RNo(UMSOxD^x>g!`hd?R$LW)uqdqeXnjl@wNGNc@zh(lol0i zYP{TU>D_%9{CD)?si9^-Kq0!FaJW6R55mp>6-RJ?6ZmG6Gmxm@j0ac%b~mIbzS~hA zpg7a|88eAF=q`7mPb3X~Y-(yRS@BK**GArJ&Y zsjJC+t{+(F`ATBwK*|u_Qh{{cE8_cofOuCcE1OAw9D8~k!2yvG)v(Ls*~p-*)F8+) zUQzB$FDu%nnD(Wb!_p8cYm}8drX|hoCFAuL@7uSJP-7rqRW~<<^FZ!u)*%rQ0ic1? z@<5?&9^*`I6TMUf@g>Shwb9%|welkbKQH$NP1rIiYOjT#vP5hH>Rcr(Oq*(Ot-Lab z10`}PW!ujm-`N17(AwtaXNQshF2x`CuO=jPO?-R%Pb9W37mjS+WQ`KMLt9(b#YOJQ z#zO}zJ|j><#ucHNsA_4Y)=TxjfBzn(tQ>^%^iYdD$b&U%(Oq<;;*aliYd?SH%gM=E zChsU@Wo=D*1Gq%8>-g8x4h~clIYq^;nem?K4<++{moIbLwH5PWNvd)@d+PYaO&(DQ z-2^gaUA{bMdV1Ppd`EYI$BZ=L0APA=f-zxdjidcF5k2mC<2KhNN68w zbYM*YII`9EzIUJ*<%7++4qequ1E?%m598T51bVVgjF_B5C(U&wSD%uF`GbSb<10`J zAwc;8+pdw4V(aMWm>zmMEa}+2Bl~(D_Z`AuAY=jS`}X$Qw&Xi4X=rEwqcTXUP-yx5 zxdF5#bj4;JrSkybSCrnJgign=>=B5nMs^@U*1r0+%7SUvImew-tM?j;)0#Zqicd%7IwC{BjZ1 z-E;a>t-Ql{Wzzem2Ohs38+_gTAr1H1fi@l|=OFmdyd)fIl{FBY%SbyFBO_ybPftL; zQ;#6z6JWQ%kdO+Xtw)eotRf7x>-3!;?gWi_2K+JdCDvR}L}W3Z)s$<0qx%(CX@YD^ zw}>dPekDy6VkPt3uo>y!U`nNg&qGL>o}J}+Dq-$1s#!e4kd>7sd8$QDNJyw1v1jtc zmaTaH$BEwF-kXRKXvj?k&g(&k9KOC>4uqpGEmT!nN+E&=_zDo8w^L7DSzBAlbN-`! z_c?%jE?r_pVO(@>sHF_pKk2~(rV}Unt)?E!fzqjg8A!TK*pjTq4+DdO$^cWVa_vd5 z0KJr>RTA+CLfZX`|v<((bMOd1*)p5)2R1Sw)Lyd^fl5$ z(ycD`oD~YV`|f2Bc{`L(k$cf%#!?7u4EN2+L?Q1q6@&y0&^sw8Ze$CiDy3v)wEzl; z4v2nH4n+s#sB z{yK-xDvO@FYrE2ndmGa@$fW1wCz%@g?;nreu$-G7B{HO`scGfLf#LFJ&z3-#JRTOt zLqmn4sBU1utZ;T95SmZ0lV0H~ygDjJKw4VbwAkx%B817vaH2V$K6ma}q3ie~i!y3$ zKIez)N)uLkBB4M<=7r1B&-B8HECy!MvLvNPf{n@>(9&=jDY~4EO0$1 zu*%59ga&jT!p&+n=RO*rMdZ)89nLQ(APbKyq$OhrXv+>eBK1T_qMsi8wE4-256lqq zeM?HbidS>=zkfjP8wgdBtkduTODV2g0~AgoUb(osmVNxVyk!2z`tx(6T5)l4oO$-b z+2?<{k=X(wkc<;ZL4*#5=w$>XC(Hw_i|(G|Vp+ECxZp}yfEwgYT3DSD!>uTQ5naog3{=;$@BZw<|$Md=xE zu*IGeDj}2azx-NI!q<25LP2&Uvx8-Fnq(r!9PBJzu&V; zjHv&4G-y?WJ^_X`m3WnyaATNyl>WrfA1?ra5nxt`4U)3WYhf!GxMA+8LnQmP!g<+Z z+lt(IevP$z-`(ROaujM9cvQN^s3f}AKaYt>HX167QX!%Tm~f*712F6M(L!BAv=VSc zfZv(HPh5BoKy$(E*3POBsUt6!k-;jk9>JDDt#al6y5PGzZzvNn%+XPL9&;$Xiv{%M zCVQChViej)WMuOJ3AZ0HSg(7{@Pe< zt?1_CjoUCMCG5dC!;G)4u1*pVE_MMq=Q2IA`atff4f|i$)X+bR5Qx3}@zbZ^Hqf#~ z6rjK4v*LONtiKl2^R_?ZavzLdwwap?IDLI-=)P5zRp>_cld)8u%Q`8a1|3Y6{8{=J zuU;|T@ED_qry!gFyR7?Y)evK={g(0wed&39BOokHKfb!`I>)cI)DXx7FjPx1BBS}5 zTsuG+6UeF<3U>7N20|6;05<_g5`VkwuXW-_AV!`%1$IPg811A*tc-ToaLCx!Q^5W& zy_AYP7pP@vqiOlaU(vgUos;wSq@yaUq;sFK-Zh2n(gNtqJM{Hm?K9i8-%zgScjT}g zeGb8fD)~P2DFlc-iJ)XpmGQf}=MT}4N2oIW>P4H>evwH1=){gJ$XE!__A zx!^VdC@2`+XjoY#$K9`g_wL;eQ{F!>G7%|>K3d{vzQPdoIFsyO9yDr<=t1V!J)G)$ zw;sG~ZnD|l>LbXAq+OGwiHS)m;t+2K4XaMEs_IWh?`0$SHY z;k$2=Nez`!4pXt>*&)Rmp?E9-WZhECOdU`I2pa+*iIaEwNA>MIDgCE}XpjMm7Svz@ zR0$^ohKu@wQCAh_{0vZRF#_booSRIoq&ICM7szg(p;4hgqk1V+zD8FhT9uVXDj`a7 zyYR3H*ROaKd~+W>ZPn(@*`+qXjAiyEKSkEnLf-pa09AZrv`M25WMnAD%7bm*IGAO8!M%DWYcTbzp@3&dEdc%eX z&qujkIT-Axym!e;Mec*P64Zy;dQoNb?<)VJDJ3-(sglk4F-BEneSx*6YEV$iY5}nr z9p3kmx!3hXYGq}7e^)AH17RJ5?(XhDj)Pwh?X6E_&v$OS{#bCzNjpX}XKn5h(1q=3 zpBmo2T_1h+Mb-xNq1I<{V&lb9BKT6LHM~FKq7L8g?wbNslnt^I8}}&2YRxmY|5P$S zrr|jg%GnihVp@6v)Y<032U=Fj245YJ9xfP;`V#=jFSG~$hHPX3m^twK7pkHwFyb2!`S0P{219M)}|#SCNlb|T|fgp*LuAm-&-)6 z!MX~RDXv$VgMlmQXYapZmRa?0pJ}d-zrK7vs zc*ub(KJj^i2E>s1H*b9OL@utPn~CB9&cUby-z5Lle!-8#az4=he(jhNz`_a)n8>8C z7P`+O2>dekt)@o&TwH$On5vk~0N{^IO$ER!f;SGpq!D|o_GS_qZ$p9e2{?~B&?24z z=f4ZT*VL_{TEy$f!9x4}3M-AOo&jg0=dHY;%|X9*@9rG>X^*Y}{=Nmm92gwTPJB%5 zeSHiRBD#ZCKXM&ElBjr&8QC#1Ik_FUer$cj)O=LMXu71w%3+vwuv0iT_Ak zT%0gS7dJO6pm~ZnD0BtDIB`BfgMdzSA*1+*&S2b=#`@~{`gZ}I=6QRNo zl^sSqHAQ1|FkW1Vi4~DLjEsy%&~J!Y2Zez+^N6MxqeBa%pxxsK2T}!^U}?hP?cjjI z&BxxQ$9$4Xi%F!kzT`j|(oMV#`I7g=A24y9SZLzom%{~e6Gf`n)1BgtNjOG-L;?V0 zs6c~;)$Jv1qLM57fdg-3d>%eL6<>M#tfSz*Q&EEZEHh{=rGHxqdw+I!cKU#ibw#`|1}3FgtmYSIK2pVuTuBiou^=*$_~LO++A~-T0=Yq?imrhybWh1`&swgR}O-gM$Hx z66^W78TeV47Blk(672(fNWuIr7^V=^8tRQ3H=?=`cf`B!)XHB>05{NEam32Xr?Iio z;|n&)1!LP{tYJ7A^TK!Jm-8`g_gZKH+D7kl?ai}0EnolH_y1T&ckS8JLef|lxZx{5Y5D~yS(>2`FDU#$N7)xSK0STy&-^Oy#Jaa9(^ z3Bk^&sv$_?B>aI9p&Vo3N*nY@T&m0bT>kC(r_4*%?Qv9N^<^0TR{^jmQ>;x#7?W?^ zYAAGd0#7y_3BWf-O1sF8O!&G#mty#f{g$3 zxQeY|xqau(*Y&9Q5|5PZ_d{}kSiJu*pL1HwNzx_^t&&TbY7WyH-1$>n1#+!6F+1iL z>d8K*`O`v*^f7wg%~i0Al|kR2@MpoL^7k9`fJQR=OCA8U9seNwD=Cs?e+PZ=K=q|_ zq5(Q7K1ONchE}W3QNPNK=E5z?%gYNh#{3Rev0J1cx~mlGs;R=Nwsx(SbYj<`)^_Ok zhMmr1c&+u(IWN-r(A34;^aHOa5(dKbkMD zZ67pda^uh2t<8?+7=F{7B>rLTZ|L$0?ml(Y!TfCV?nlfqI>Opw&%cbFyXqu3eEaHv z=I=GRy&N@d8eXGSbUrR#8|kP8*Q|jT$h=(vEp^=oOF>PMwctHMnKw@*C*_&3>!f4} zNwNRRJj3OE@Uw2QYg(0`ngKjl?1l+cUk(1Qn3Uh{JdVOkHmX;uw>$GuO-%+3tD*)P=k{$bX$Dd_Mf*~eq1_hT3{*V@pK zS>9!+C_lQTZsnhT){$(`;KG#VX#P4Ap$oURtlG@$xtk2DPxoo?1u#vv_eCvS>| z&}b55+g$(eBL7F6)tlvQ4~+*44|sA@>SuZ^Q<&&WzPB<^Sp9Rv_b8?h#!?y2|5jSM z!u~2PK7#HB-PcC4ZqiGSzn8G<{Y}l;3{`_)ZUK@xW)sgy%1)gGmE_+G6W*PCog+VZ zWoOx+BG53~4;x*av<(9+M7to7$Q*B^BNl&*>faqu!B`kF$?F>`645Tf*BFx@xe5hG zD{70Zt^7?B+)5aiOVgl5s$p;smNzo-ZMTM|=IYIx_dNK%M~n+i=gDq$ZLS3Q=las{ z`(%q$y}T#W|0j(;>g?S446`tY_EM_6ygUj;PhTI3farUACMM0(rzJsZXwiJ0*thWm z4*CIr523N3=c%*OG-j9!_^c|0%@z8|FmLpy4E9$wHL7RNZn>;uQ=BiVll5n_j)lW( zhw;zpiC)7(x9{nt3dq*~X33>4P0*-@=1)Zia2jfAsOZ!>T)TswnO+tt8`&7d^t-x< zDWald)({TF9o{!BmZy6ydUflLP)BOs`{gmHw(0 zp1x1Avpe89haB7S!Q2ZzKNix90OsJ*DJC?P7?FXD20lOKfgFah$i`TcX|X@IqXtLU zB{=u;^5m4eP|JG8K@5Fhl=zcWXO7V6IJh!fy zD%pRIhQg}Qd?lUlo&5sst{Jbhguvd3kiGMw&|W}S&!(ZPLw$u`>E9svPa@UdYn+I5 zog7$B%m#=+;)^GfK*;fALJ(FtUiR|uCE8fStK{;%j|;{^;=hC+gcv@+LRSO@`~`jy zJ1}mqyP*<+=}jpxJAvN}@G)eD!&tCAoR=OR-pu>hok!W(RR}MM_sbQ|h{DJ1jc$Jup!lzd z)_@rTUP*Wz8I~?xN{pW%1XVHX_vy4;f#rI8=rSrC@F4b8sK3K9_OySInm{}XMh6_Y zO-1gq3eJ7LghS#`2?pQr^g+IedW}jk$7n7LP$`#ld$QsNp972=dYHv=Ymo%<42Rt7(xp8kUm&5DA-Maybyb>Aix?sMTk z#=T&^ZaIHOa9O|2D2j&vy4`n5VICt#TTmapyv=Nt*c{p?rXg8 z;K2qFJ!Ct4xevb2jHJ2bFWi7V=O0Oi7J?CU@e`t1Q?<=g%l-ZRZJQpgCN6te@m4D; z9(>zjxEca(7y*`$JF7BaQ2}R3&wi+rBG%K}%7R`8yW$dN-ck^Zs_KChX~(6sz^J_~OaW))0_-KO;7#;nHe#Vp4~19B1Na zQNYO<75>9J>h8lt$K+Euvkk2e)t0zcm{x9SM>dU&jF6*%!6$L_#8ZalMr+I}IyfpB zK#i{rD|Kf^zbJZ5%oHfs9bdlqrRc_%V>QQeS&LNS5=Dufo=kg*UWHRi@V(`o`4)9M zTrH^-Q+FaPW3*b@(7=YPSrI&4k^JC67-Y5zLMo$bS`)8;-l(AqkVA23&pa-A=xa<8 z5)#m_h$&9ab?mU_u$mvrl3#ZAX1D|;uJ{E6sPEgygGq>0d_hk?oLB8#U5jugP24o^ zQTgPpLYpH;h--e?7Q1D{2o8}cq}CA@y3bE@>zzcV(kd`aA>K<;R{{C1HpMs^?(K=h z!4(WjR~K9CiX}(;GRPt zuY{Pq^TSxz8)oY{8DQ23BGJK!%0uo1!*F8BLGXh9uD4TpvHMp!W`WNM(1`4PczF28 z__#XiD5X$)WOjD80)dBVwL0eD!VC7@^Cj&6=}e)~Bx9U{vlz-LtkiVSBFREyq>UKz z#z-9g)T#oUt55}OA<(a>xjDou1gG|>U7U8O?Gh!k>ac;@**Y`>3{r45Y=4q7E{^#6 zpj{KB2)4s6kVlRYq4~U+x@lh-$hJ(zc2|D2S)}9eCd@_%&w;0hSJ`73l;bK?8Vcuv zA|nNQwGW)hFJHZaupbPQNjqA{)ut4kh?*cPVk`OYC$Ugyq8n#B0tD)_PwXQ@HV98x zj|u=T8P4wk_8sMZm}svh21bnJEylWQ;*?yap?Zp>$$HIufLN`71VIc8H&ri=;P?xZ z=ArXYy@8mJIIFMt`TAPm3|y33-}MYKG*mb@6pE>p74C^Ei-oJB^ui)ZI6Ppek;Ew| zVyFVZk5cGM+=NqE&yYPtM0{fRF-!1Vl4;CWrM?dtH(dBVQSw1mOHp>JoB<(;s0ht& z-^)6W(nilLXEH#5t!W7heovz?`{e2BSgQ^ zg8lL5%~0S8xPusg)^m@#fBMIdPFzD%q3b3L442?U3*H5;Ni!pRoLMxuC^%OL4Fz>Rr3HPyPzhxQ+X8j4>#e2o}_E&(>D zDx4|NNHHSk3!unep7YXN&|;;*p*{h~v8p;cI>leS=4aNzp2z~^K(tffg(|pkh+l-V z4Tmd6FfQD|Ur!F*!N&P&Y9uM^*qht*u%3vD90-}^J3rCOraU{a30wggLOk`Txi6-s zgkzXQ)&_S#|3#I#1=}c*cVX&)_xPHJYz^_^z+{BOpF!X=>M*?$qrRxUa25 zMOs>#m6OvKOzsxajcg{d>vVNpL=Dz{F8~W11mo57c98sun9Ve(KhyU%l?9Umc-2FJ z4VI!7%w#nqKu{0;5jc>aadgux@~PoNH8r)$wf9kS!1F3#Bo<7&RVP0VXInYkfN&>} zW2Jso=4`FsmEOF2$MyOaM0#QyCK5!YGde##YMLl#FvI5?FYcow5eh)gVxBv9F5D?q zdQZ#uth}UX6iIMbocd*giJXR@mg`FSrq&N_e~}VmGQxo&61q_2J7FfH{Ns@Np9J%$ z92jGn@fJ9w0P#pw7=PrG2Y#*D)|rN|*1 zTMR;b=(?9tOijUIfTfgO@RkyPA<#Hi4vWAF*l!3oLVE`$fa$o=MUl-SHoF00X|zHd{%$~`CI^;>t=*|9R@S_;mnPO2VL1w z5{b7AzBc1Cc>;-ODUHk3X*sLt$Or&u17675 zGNoaxS#Wlch|@Qrl;Kn_B*38C;RQV>PUY6T5WBBWG{*S}nO?X~P>jhrBUY0fAHvX5 z&{d}u$I5hM1&mQY>r-@j$h?L4MKLuchaz8IQ{(|CBoZBt=pHVCZIcNS&gkP+bWscL z6W_m+b4JG&%+>|tkQ8zG$}3L{af_RHqhwfPC?7ReSy}0^RRw3CLoneWvnu#ld)rD% zN)SgxMJO!$XlzZ?fe(C72euW!JY^A`mItU>$@yy(+eLGuM!oAL=+Mx$rz_ zZretISN-O#TNepF#|1{YVZx!lj*c2sUDN-E>TfYg*e1Wi5(=5{+40(#DLF5@|LjPp z$u<2vzGvsojAXTklH^FbQJODK!xY=})v;gKH8(H0U+yLmQ{^fH>;6AR+Kr|-&L$3f zI1>v?#KMQx&;By+{2eF@PqSvSSZF7+gsw6)iyN`)u(!x8O?p%Pg6*=d$;YKfR>#?- ztq;DmeOK{eU-~biT!QO_RbGZg>8oCu-m><}9a>%WH6|05uX---tQfa@eQWZrR&M{2 zo{QHj^6IKQZ@52wouBbIE;ZB6L5??9;PiEdj5m4GHaRnbk7eI}A3Hag`prYW2cX8s zSj^8@O!L&Kjo=T4rlz66!3?M6czeIQ<<75QWi2&&GC=H;z#RAYt_Q3c&MC>rczy56 zoH&=1loW9%BRCzMoQ^7;cPndv4-&sDvt^5#U}ULR<|8_yj(5m zv{c0*W1}=q;<*HVKrwHboIURT^LsxJD#haL17Z05h3Xt~us{32hs@&lN0j0t&OX7x z1@QlN_=)R}XB(feVn%&z8TcBcHu<9tu^kB=-b_D|Q;XjeB`=Qdkrnyg|EYNGQ} zB@_y-vAg&0pShQU*(Qte-n~{BK(I3SwL9i76le@i9db8M4E(tpr4bJE`fq0*E(B=^ z<_;@vzr|*{kq1dmx#PGYx@Onz-4~I#*3cM3JDXb5b8~qVt}#R425#6i*#T4ClboC% z6EuTX$u&XCK|gNh{nlh{Cn%D0TVn1{CY{5f&Vlg$92O14OH*Fv$D0N!}QT3qeP)THBhg%BrpMV^$rhf?cU8n4Bm+5Y7TtR z2=%L1ukNO&j}=VP>1}wujE~Rn)e-e`=VWzsbt7?51Wfy|jm>I7L91%z`$lONxy=OV z6uM8C=QSkH-yUKFVc$ zX-E7hz^lGlS<(apqVEF5A8t&XK9rVMSjY=IW_|y6Y+C#HjQIBA5m2eJu2H3-*|(Dg zEqnIuQx}YM5l?i6U!0MJrNTn;W%?@@>+?!8C4+QvZZRLx<=6xShWE1gOX>^k!zWvW z6&5NHfQZHfnox#(+8=)USdzzv#E)hYwJ%;!$j4k@Hi%@V>N4Sv2)KH6g~@}xJ5r1| zxwtyeY~vCWC$2tAx_I$orc;jrIr{_rPii$jD1ypQtt0(|!@|5L5onHQuK>%23ztq$ zgrn=~H@M}KlLZM;M0Z=p%d4TU&jbnSqe3?AYF4_NANp5whmh$tu`lD0g^!8&b|(}CSa0JME`z=*eUyM*r%zS~Eu?rOr4zxAW(r*S&8dW}q&ED$EiQ#m`<6xW%`Y~rT?$SOehI(5Wy8t!1__Y-k z6*$J}ZpLnPWjcomzLLGel640)rFFR95ySF@n%(`X?DG6 z*;RZc7Q&m_Dpq1(E-EU*^{4J*aBp8Y81N||_>x2wuU6|6OSR`?U)Sqy z;RX_*1MMQmR>sC0-HP6O-TZZRwa`D&Q2iPj3<)a3VTE1y-q{6Ych@(m)2)7tf={>F zmsO4YRW2qLsQvd}dmFlG{`^GEL^GP>_p{XKEV=Xze*FgdwLLQOs{i_>pR_Vp*PCxj TQvHaJVWMbj8fZLJv+(&}u^nRD literal 0 HcmV?d00001 From ad2947f83d65631bc46c57e9bf5fd0c0114f1701 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Sat, 20 Aug 2016 14:40:59 +0200 Subject: [PATCH 20/80] Add bot details --- source/_components/notify.slack.markdown | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/source/_components/notify.slack.markdown b/source/_components/notify.slack.markdown index 54df1121347..126574679ac 100644 --- a/source/_components/notify.slack.markdown +++ b/source/_components/notify.slack.markdown @@ -15,7 +15,11 @@ ha_release: pre 0.7 The `slack` platform allows you to deliver notifications from Home Assistant to [Slack](https://slack.com/). -You need to obtain the [Slack API token](https://api.slack.com/web?sudo=1) to be able to send notifications. +If you are planning to use Slack as yourself then you need to obtain a [Slack API token](https://api.slack.com/web?sudo=1) to be able to send notifications. + +It is also possible to use Slack bots as users. Just create a new bot at https://[YOUR_TEAM].slack.com/apps/build/custom-integration and use the provided token for that. You can add an icon from the frontend for Home Assistant and give the bot a meaningful name. + +Don't forget to invite the bot to the room where you want to get the notifications. To enable the slack notification in your installation, add the following to your `configuration.yaml` file: From fb6766bb2ee5fe8b03ad0a274fb2244f092d925e Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Sat, 20 Aug 2016 14:51:29 +0200 Subject: [PATCH 21/80] Update with new configuration layout --- .../_components/sensor.loop_energy.markdown | 29 ++++++++++--------- 1 file changed, 15 insertions(+), 14 deletions(-) diff --git a/source/_components/sensor.loop_energy.markdown b/source/_components/sensor.loop_energy.markdown index cee4120b8c8..15e9582d442 100644 --- a/source/_components/sensor.loop_energy.markdown +++ b/source/_components/sensor.loop_energy.markdown @@ -21,7 +21,7 @@ The library used to get the data isn't officially supported and the only way to To do this log into [Loop Energy](https://www.your-loop.com/). Once you're logged in you should be able see see your live readings on the webpage. -You can then open your browser's console window, how you do this varies by browser but in Chrome you click on `More Tools / Developer Tools' and click on the console window. You then type:- +You can then open your browser's console window, how you do this varies by browser but in Chrome you click on `More Tools / Developer Tools' and click on the console window. You then type: `Drupal.settings.navetas_realtime.` @@ -37,21 +37,22 @@ secret: "ELECTRICAL_SECRET" serial: "ELECTRICAL_SERIAL" ``` -The serial and secret tokens are the ones you need. If you just have an electricity monitor - then you won't see the gas keys. +The serial and secret tokens are the ones you need. If you just have an electricity monitor then you won't see the gas keys. -Now you have the keys, add the following lines to your `configuration.yaml`, replacing the `SERIAL` and `SECRET` keys with the ones you found in the console: +Now you have the keys, add the following lines to your `configuration.yaml`, replacing the `*_SERIAL` and `*_SECRET` keys with the ones you found in the console: ```yaml # Example configuration.yaml entry sensor: - platform: loopenergy - electricity_serial: ELECTRICAL_SERIAL - electricity_secret: ELECTRICAL_SECRET - gas_serial: GAS_SERIAL - gas_secret: GAS_SECRET - gas_type: metric - gas_calorific: 39.11 -``` + - platform: loopenergy + electricity: + electricity_serial: 'ELECTRICAL_SERIAL' + electricity_secret: 'ELECTRICAL_SECRET' + gas: + gas_serial: 'GAS_SERIAL' + gas_secret: 'GAS_SECRET' + gas_type: imperial + gas_calorific: 38.2 Configuration variables: @@ -59,9 +60,9 @@ Configuration variables: - **electricity_secret** (*Required*): Secret key for your electricity sensor - **gas_serial** (*Optional*): Serial number for your gas sensor. - **gas_secret** (*Optional*): Secret key for your gas sensor. -- **gas_type** (*Optional*): Type of meter `imperial` or `metric`, defaults to metric. -- **gas_calorific** (*Optional*): Calorific value of your gas supply (usually on your gas bill) - defaults to 39.11. +- **gas_type** (*Optional*): Type of meter `imperial` or `metric`. Defaults to `metric`. +- **gas_calorific** (*Optional*): Calorific value of your gas supply (usually on your gas bill). Defaults to 39.11. The electricity readings are updated every 10 seconds and the gas readings every 15 minutes. -The gas readings are experimental and not all gas meters are properly supported - so if the data you see doesn't agree with the readings you see via loop energy please report an issue. +The gas readings are experimental and not all gas meters are properly supported. So if the data you see doesn't agree with the readings you see via loop energy please report an issue. From 43467b78e51d9bcb05930ee2327092f52d1471c0 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Sat, 20 Aug 2016 14:53:51 +0200 Subject: [PATCH 22/80] Remove space --- source/_components/sensor.loop_energy.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/sensor.loop_energy.markdown b/source/_components/sensor.loop_energy.markdown index 15e9582d442..f2c12fe4ca0 100644 --- a/source/_components/sensor.loop_energy.markdown +++ b/source/_components/sensor.loop_energy.markdown @@ -37,7 +37,7 @@ secret: "ELECTRICAL_SECRET" serial: "ELECTRICAL_SERIAL" ``` -The serial and secret tokens are the ones you need. If you just have an electricity monitor then you won't see the gas keys. +The serial and secret tokens are the ones you need. If you just have an electricity monitor then you won't see the gas keys. Now you have the keys, add the following lines to your `configuration.yaml`, replacing the `*_SERIAL` and `*_SECRET` keys with the ones you found in the console: From a99e6e431bec4604ceda2a37c3d7176a0339c01b Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Sat, 20 Aug 2016 14:58:13 +0200 Subject: [PATCH 23/80] Add loop energy as breaking change --- source/_posts/2016-08-14-release-27.markdown | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/source/_posts/2016-08-14-release-27.markdown b/source/_posts/2016-08-14-release-27.markdown index 2669b8b0aac..f4423a19df6 100644 --- a/source/_posts/2016-08-14-release-27.markdown +++ b/source/_posts/2016-08-14-release-27.markdown @@ -24,6 +24,7 @@ It's time for 0.27 and it's again full of new features and fixes. ### {% linkable_title Breaking changes %} - The [NZBGet] and the [SABnzbd] sensor were updated to following the same style for the configuration as the other sensor. If you are using those sensors, please update your configuration. +- The [Loop Energy][Loop] sensor configuration was updated to better distinguish between gas and electricity. [@DavidMStraub]: https://github.com/DavidMStraub @@ -31,7 +32,7 @@ It's time for 0.27 and it's again full of new features and fixes. [@roidayan]: ttps://github.com/roidayan [@robbiet480]: https://github.com/robbiet480 [@meatz]: https://github.com/meatz - +[@pavoni]: https://github.com/pavoni [@abcminiuser]: https://github.com/abcminiuser [@balloob]: https://github.com/balloob @@ -62,3 +63,4 @@ It's time for 0.27 and it's again full of new features and fixes. [webos]: /components/media_player.webostv/ [HTML5]: /components/notify.html5/ [Gravatar]: /components/device_tracker/ +[Loop]: /components/sensor.loop_energy/ From ec4f61e36135bd8d01f8ff562c8fd6015ccbd6b8 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Sat, 20 Aug 2016 23:26:41 -0700 Subject: [PATCH 24/80] Update generic camera platform --- source/_components/camera.generic.markdown | 19 ++++++++--- .../custom_panel_using_react.markdown | 2 +- source/_cookbook/google_maps_card.markdown | 31 ++++++++++++++++++ .../components/camera/generic-google-maps.png | Bin 0 -> 57036 bytes 4 files changed, 47 insertions(+), 5 deletions(-) create mode 100644 source/_cookbook/google_maps_card.markdown create mode 100644 source/images/components/camera/generic-google-maps.png diff --git a/source/_components/camera.generic.markdown b/source/_components/camera.generic.markdown index be468aab710..773d70d3cc3 100644 --- a/source/_components/camera.generic.markdown +++ b/source/_components/camera.generic.markdown @@ -13,9 +13,9 @@ ha_release: pre 0.7 --- -The `generic` camera platform allows you to integrate any IP camera into Home Assistant. It supports fetching images from a url with optional HTTP authentication. +The `generic` camera platform allows you to integrate any IP camera or other url into Home Assistant. Templates can be used to generate the urls on the fly. -Home Assistant will serve the images via its server, making it possible to view your IP camera's while outside of your network. The endpoint is `/api/camera_proxy/camera.[name]?time=[timestamp]`. +Home Assistant will serve the images via its server, making it possible to view your IP camera's while outside of your network. The endpoint is `/api/camera_proxy/camera.[name]`. To enable this camera in your installation, add the following to your `configuration.yaml` file: @@ -28,12 +28,23 @@ camera: username: USERNAME password: PASSWORD authentication: basic + limit_refetch_to_url_change: true ``` Configuration variables: -- **still_image_url** (*Required*): The URL your camera serves the image on, eg. http://192.168.1.21:2112/ +- **still_image_url** (*Required*): The URL your camera serves the image on, eg. http://192.168.1.21:2112/. Can be a [template]. - **name** (*Optional*): This parameter allows you to override the name of your camera. - **username** (*Optional*): The username for accessing your camera. - **password** (*Optional*): The password for accessing your camera. -- **authentication** (*Optional*): `basic` (default) or `digest` auth for requests. \ No newline at end of file +- **authentication** (*Optional*): `basic` (default) or `digest` auth for requests. +- **limit_refetch_to_url_change** (*Optional*): true/false value (default: false). Limits refetching of the remote image to when the url changes. Only relevant if using a template to fetch the remote image. + +

+ + Screenshot showing Google Maps integration in Home Assistant front end. + Example showing the Generic camera platform pointing at a dynamic Google Map image. + +

+ +[template]: /topics/templating/ diff --git a/source/_cookbook/custom_panel_using_react.markdown b/source/_cookbook/custom_panel_using_react.markdown index a3d8911e88e..3ecc604d325 100644 --- a/source/_cookbook/custom_panel_using_react.markdown +++ b/source/_cookbook/custom_panel_using_react.markdown @@ -7,7 +7,7 @@ sidebar: true comments: false sharing: true footer: true -ha_category: Custom Panel Examples +ha_category: User Interface --- This is a [React](https://facebook.github.io/react/) implementation of [TodoMVC](http://todomvc.com/) but instead of checking off to do items, you are turning lights and switches on/off. diff --git a/source/_cookbook/google_maps_card.markdown b/source/_cookbook/google_maps_card.markdown new file mode 100644 index 00000000000..1f3c9c1f01c --- /dev/null +++ b/source/_cookbook/google_maps_card.markdown @@ -0,0 +1,31 @@ +--- +layout: page +title: "Show Google Maps as a card" +description: "Example how to show a Google Map as a Google card." +date: 2016-08-20 19:05 +sidebar: true +comments: false +sharing: true +footer: true +ha_category: User Interface +--- + +Using the [generic camera platform] you can present any image on the internet as a camera. Starting release 0.27 these urls can also be based on a template. This example uses this functionality to point a generic camera at the Google Maps static image API and pass in the location of a device. + +It also leverages the `limit_refetch_to_url_change` option to ensure that we do not make a lot of requests to the Google Maps API. + +```yaml +# Example configuration.yaml entry. +# Shows device_tracker.demo_paulus on a map. +camera: + name: Paulus + platform: generic + still_image_url: {% raw %}https://maps.googleapis.com/maps/api/staticmap?center={{ states.device_tracker.demo_paulus.attributes.latitude }},{{ states.device_tracker.demo_paulus.attributes.longitude }}&zoom=13&size=500x500&maptype=roadmap&markers=color:blue%7Clabel:P%7C{{ states.device_tracker.demo_paulus.attributes.latitude }},{{ states.device_tracker.demo_paulus.attributes.longitude }}{% endraw %} + limit_refetch_to_url_change: true +``` + +

+ Screenshot showing Google Maps integration in Home Assistant front end. +

+ +[generic camera platform]: /components/camera.generic/ diff --git a/source/images/components/camera/generic-google-maps.png b/source/images/components/camera/generic-google-maps.png new file mode 100644 index 0000000000000000000000000000000000000000..2587b9837df1c764e7262f71896ab64214ce421a GIT binary patch literal 57036 zcmc$^Ra9I-(>97*aEA~yI0+VHa3_J_5(vRHxVyW%1R2~N2G`&|xVsL6!{B=IzGr>w ztaEezo3sA^Vqfg8>ZiJ@R(Czsdq*fM%3@)VW5B_|VSW25r3wd!0RH!UMnn8J^2gOT z3l0tuPWijK^xNCp{{H^a(NV$pTTxNb*g^K*-q!x!-s$Pd0<`Js>hkRD?C=n>xw-lD z^aO=M7Zw(Ba&kI5J0Bh%ZmzGVrlu|~F3QTvN=iy-XlNk&J1`jRVr%H(^m1ow_3rNO zb?J|!W8U`0^6t(?b#-+?LH_>kR$X0PRaGTiCUkdueQSO3_Vy+tJw3J1KQ7-sFE4j> zb#-HPzM`VyWg*pn;(G0HGB-OjJ1c#Ad;1W&H!?DEd<5<7?O|eKTG;43fDu=_0gkePw3(sH>x+ede%QTkFTl z;lT5J(&Kd8!(>!QNXRyHft{WGvd{ZX*lzuJ(8|i{bPMho(xJAiJ<%gZGuCRG0MIfd?DK-YbJd=_@wTwGkX z&qskkpp1<4{?+vD*^aQV@FsNH-Q7Je;x}B`{n`kegt+)=r}Obha(#Y8@A4gNe{yNM z|7dUd;c$YNmv_9k_G}`<)8=OnD5rYrwKhBGWPAE_Abe(|J;Ps*-)*F&G_E?)`0iva zAi#fmt8TEpw7fXGGC%ohB%%x$4P6^KoG82)OW52$Jz8j0@+^M5zi63%I=|V^DN4RR zK0RLPS=#|;6h=k_I0Cz0j{AJ?uMUrIRw`n252tJ9mWL+SPZzh(p%-g=>oYEY+U_?% zR#COUMsR%d>%iRZ(#FvFLe0Z+aZvH*`E;R!fn0oquT$%KcTI9yVq{sk+Wk&vV!oT6 ze?>=s)$~SsaTMH8`FA<8v_GwNe|)Z^p|QAFn7g4O zJvq~!op?|7ZtxQk0rEDt4p$DxeHPr)$&+@sW4>y0)a;i3F{}e|4 ztfp?BmlOP-#ap0AX(}p+qSv z-n$;jng^WQ#j}akYJrK>s&Ut@<#R9e>BTXacWH6%D2j1PM3#04t+{62aJoimAnYJv z5x*(lTPg03nx0LU+t@=XC7O=*Ct)K+kAcR6EWWsvUd=z0+$9}HXZE)LBxW;N^+iPX z)qEjUY}~&UAH?@gEcSj80|dzdY0}_W8L(*rs35^f`~T3e^>3dnD<1s=9_;-^Jvbgi zzmZl~K79s$f+l>hh`mtvga4nbAAbS8K!Lpu1~BSZ6316UJ#?LHC-P&i(w5SP!>pP< ztMpsZ%A-j@6yrNUjscss2e|kyeBk;pi`{{F_BBl7Q;+s=dRC6RANawA3s=`Z!)$~b zO3%~RI-40Cnmz1-PbZg1XXrQ4>O-dVsLR=CH<6;@hE#J3LHfVYrmTb~>f&Qt+Cm0iHr zZN0ClFa;zaSCSnIlh5ib#vKQlBvrcvdEVhOx$>W?LoIkb4%?_|R3_w)U3*NCQa||~ z^ZnIXI?GJ~`m_Re!ka3890#EXnd@jIDX-W~X5d4YAW&WUtxEMRA^=>cW-sIGur`(D zFpn)jbKS^%v*c|m*qh66gPWAgU#8b=+5Wd;m5Ns}!7Z@a3!^KLKtVX)z{^zd)@(iG!Sl+lIpkoK%F(nQz_Kb64-BqVDh>dcy5hxUC0LVjk9U{;Vw zZvD4dm7*VwA0hCbdmX%B#$f@F-se5K3-GGlDg_g$K!pFBGsD}JWJZm;K~(UBr9$34%Q5lykPI}19YGpWEhq8Av((@0Th$~`sC=!;n*Y%#+Cs$4KMc$ zFaJAuNCB&~=BRY$I(sJud)EJ3l|`4@gBGQ#;bM11rIlrTjvuo=N@54a=OUw0NZ@es z=ZbfZOLq)Y)Q3w2Qy)-EB3;H;yorNpUI;wV(1mXsrX-17y;vF=rf#QR5l=IxNeg%# zVxR&ePsy=A-MrkN*7+t!_(6KAEz<5_eacA>blJ8Eq{xy)4@_C;H5&h{jYc-C_n#;m z*B}EmH|RC9kPKO}{m{xn^Z9!`q=O?H=DEZhH7uw1m&2e!y&WOrQ`eFfvjkd-=_sW; zcv7wmUI!6wh-hiAgG2~2Py2<~dw0Y{$S#mm?w>Ra`^tYN6hvl~ohn!KWzvHlEy9D_ zS4lZFh|-VYZ{PtyG|eP#e9U9&{H{W2RQuK4!@=P}Ww2t11^b<|6dI^{WYqEX?D2}$ z_Xdh;AA5%GUp0Ga)YlX_FxY&)8+*68<3i`iv73i!__icOwg9tq6zPtP>v+Saz~yO% zH*vwx8pLpVWWorK?##1!u;@s4}0S9$T4+u zXlP^X-dch#9G%cuhx}Jazfk#XUDB0unQ!IVrAO-6a@oVqqYfElk)*>slj*^5*0W7- z=*aPvH0J^j$MU#sS)@nUml>16u9x%cmSz=F*bvT-+>NgWq}-CB3g%#PdecDjvaHGF zDZP!q4#s!SQ=W7+<~@fh(XCb#qH6w?S6MM*_rdZ)hYe>xW@o@1Sp)(U85~JYFgRN= zqjWT21`vJSbQXq0rON=RXirF~*{Ouw-P@s;kswm1a2}L9{OZMU>IzqCasLQO)cs8* zCjM;{PJMu+HOGky5y@MwrLsP&F%j(}>*=S+8`;2enG$pJjGT<@ck+ABAKov$-wOS( zeD6%uT@QhrQ;xTCkEWZ+tMK<_(N&WT)v+f!J!cO&-5!Z-Ej4)BU?_<4c-}ej!f-u{ zr+IuzfeV#Qag&m^&Ab!De_jfjCK-@#8oHtwfcasJMWJc8ejrh}K4wGS81 z_n%!OvX*iE1Su_uuK-bxd0EqT31C3>c1ATwk0@@@yB}SWnJoep9r$WJKYdQelz4w@c>XY{z~V*v1nah25_c0 z8MY1#0#;)eogmgv_F#?`Hpl{=bpYEIpN}osPy%}jx35-%Sr%{L#s?TCWhXgq2Dw1V ziYts4LQMd20v~_#P-`1|Xpz}MxQ^k642L?t739W!epBH%Ya#3M{RsK%zwgaN|NEY4 zE1@ZTbG+4*Lbgi_93HpDS&~@T?9CN_3~dvqY53U5J*r**VHr?RE??E73$|3cGI~kK zCC5^DQ|GW=6IF)vB%&Ufc(=VUF^M|nDx!iW9S0-IGBM(*4ue?MxMG_ZL?P(n2$^D> zQNw{hB8{Svwh%t1PUp{poEr5-eIIdJYqSOmGQuXSYjah)dm1TZC2C78(BkMSMm##o zb+GDy^Rb?sEm$`)^*b-i%Y2-GZUr_Uj2RE_QNS9zYCRi$xGbJ1dI=c@V3Cm1H3V5fjyI|ly}*rJ;D1*;u+U?XC$@|v1-M9C!mAo;wFv^eeM_v!f0hLHPc*;$!5e$P{eZqdW@Hv*gbdhyESirtZr_XF z4mpGmruh0fUM=V+HMv+h=?!9!5lfmp4IvM99~;CV79pEf3cl%=TBuEPuuhSb?qK%S z-T=xDc89B!nXoy5$|nNQ;&g=dHb8N++Y_A?3zrp@fh{*1SsgLCYOEn#?pCg{jv9*!}dsI&U8#t}62v#9$F-0(){{S>` zWTcv>&5j}RYdzYzdJOR<*^k){*!>J)!sX=huYV^s89FJr<6f7b7<5fX3gsgjnA+k4 zyB@#b4&IjUI|7EfAKUV?jW?oMEL*b}%AYH0aL~x|pjmxl{q^z+mMeL9PT6T!yIJpi z$baKw7DaO@i^%jS!<+iiLO}nTQKZRq{XbiN^zX_4h*>f~YzmUic#EAF6dbJ1&zi#m z;%Nxk5cZA;0Ibgf?^&hMit4{JcUzAK9ks)Cu+8uGL6-p-tIpuB#eyuhE?JvIUdE+j z*^mwqz29JD`Hy)?1Y5OrpO}&W=js}zT@K(vebNI8UN9VClc8W`x%fUQQwl=5<-ZBM z|0XbHYlq^)Aw-%!FgO)wrfO&m0q6|rfmtdFaE02zF}3>66mY?bruR&f9yT2dSplR0 zbkg=z5r!sLJ~JarI??fj6kOYBton2{e2__k6}HQY^BU1?m{EBV+@#0LWfoQMdCU%% z5X8eB{CU7BI}CE7`v3P!N#6fdXyyR3c6c$tnN>#nWW_jt?sd(5fGElTRNM*zO43#= zYBSg1(gvJR*XhNn%KLQcNsomicDg<%y_6sfYvd8`HsR)%DWWOs%Yi`<&Bud@=lhqi zny$x-mpHI=mphoXj^?yDg@gLoqj3Dge@b`7@Iz*|pU>UdVs|$@pES0oufZoApZgwy zWb{c7B8-`>+$vfBdOgl3B;$!$)v{z?Ik4X=41776vsKI<|Mc>Mplh-=+XKvM&-7cY z0(%Bv)3EXyk%ju=+x-}v_2$ht=!Np|0;w75YEC1&^V-N&YNfV)KAOeZ@~>C)Ustn8 zB(dP(yt*D3iyJN7+{ zNu_)_@~J~wVL0WQs?U(_O@;gSIAfa5o%=&o*USb74paRUdb&v554MfSVYoe>Z4Zxn z6Wu;Mr;`2hIo{k6R`w~HGABIB@l6(mKXi4$-HHd#tdt)!+5?vadaL{o_bSZ}4%mnc z)wsC<=b2jad#`Ik+yKF`7*g#sO;M7?%~AgDF0BU01*cxEvUFNBVXgkO*Uj9Kqpuqd zr8-Dnvxs9$={(f`>&6H`C)iweX$AkJ*XLgiRy-KrK>n8eg>%ReJBLEm-B%aWnk{OcU(!P; zISfVRQ5#sTPJ*eRs&tyoIm1g#erYSVqcy+%{FL_cxB*`tR6SqOvp6G&H)lB^PGGeU zDa#TaKX?}RmP~6^IG_*RtKdI=5Pl`Nd3t%Q-t4Y(2ZP#$Y8q_02k^7K>hdm(iE;3zA=uGMh$7UJ&o0AVEH3w5d&gq$?n{a$5 z!-FLi_bI}neqmvU9&jo?4Sfa6s)W=!uj^TUL+xJpGKzRT_da$S9Oa30&Fvk1i88n< zg)(^TBTn9g>hwghfyo=I+--Me=5Q$jn22I_0+3F4xMPDB*VKANupX@Rd!61H1 z%ZbcmL}wfnna;ZG`|>*=tEdUoM^}|?>KdQu**H$xESmx*D81DE6I&H-xb`9sG0QEH zE@dJ+b_NC^&!k0O28(QE`RZ`ojF5tbj;zfi69)4}I10IAmzv$p636U275j(*l+099 zuj3ZDzm&wo9zum)|L){OOmWPYAMCJlscphlQ7+`kEl;bq{_&$_frUGLC-A-3bcRDI zq|DP9X~wqfOV#)YpoVc@;dinVFDa(&(s}50Idz5`z{(RBz0<#**#H=yLnT~)nR#!P zo&`L`g(JS%0l2NAes^Vn_yFN<=d$E}IMeO#bxc>!yXkv?-T4A#=}{8rM&Z&U3m1i) z9Az}peg>(4d1rmouo|6zwvVOH75b?1-PqzE?;rSrK@~ALDm-6PwXCyNb%yBe!A(&R zApx*xl9M<-yuuY~z5nJl0PuvuWpI`CK}*cP7ca{2GwnM)=1AsXq^T;!S35L+>ILw` zBu)*l$nSJg?W+QVH3x3*PIqvaYGP;{0ym&w0i&V{LuiKhG815)mNqM$M`I(9bQ^UA z0K5r^$laM3308c#DOQUEGQ4vsgCj90p;q`lIV=2@9OKTM3Q%U;ojsKmUlvhrb_erw zx~TP7gDIb)5#fh%uEmMKpK%n_xI8s-%iS&#y~}3r_*grGIEw4~S+!d*BRu-AsO~I3 zlcWkDLnAeW%02E+FmeW>9*npsdfIgyrO|l;gAzM=A!djhwmqoiJZiarpNdLr z%jW_Ro+?EfJ&vl|Ik-f@{VwFA&lU)jjdQZ$TAd7qsVH!?#pp*)YSgrLJMqa4{ zsTly(iSUAu2BSrTrH_HHuP-g4ZQRc2ISVbugS)(R-!Y>!w)^q1VfL;@uU8JSe>4F7 zU8yCE2pr67 zetu4K5`vgZ{tufdjK|9W12Co7;9d%gKag`mJeWnnty3il3_V(ZuX>9$MohrwnVFgB z*)Y|6>CRO8_ZhP$|8KH_d4MBXwjqoh)t1gk6+JIQdZt8fy7 zLfL73(jgr(|4VYR&2RlzMb7{KR{dYll32<<&3`SnqMj94Ec$N(ZA)A~2iJoL)a0b9 z0=(?*qh|-sVQkQL++_Y*gEQ&DIj{N;_x08E9NPsqG>-$rZi$|U9*J*)j?H4jD8sx8 z=pTGSWS^AjkB@)YA}=t%VK2hR>1N{O=crfw8gTeVV~!4Bl?LNGYDQ+!?^O~4iKz@6f)G<~XOvYu_{@W9x z^ttWTWiBdf_v84oqU0*Jnk~qJthA#3iK72>w48U3f?gMF{KQNAhpOLYoB9r9?iicE zVy@3E{1*Go9jpsMgbB)nIaT+qSJ|7wjr(exT6e-;>V_BTvy9rQ%xvY2@h6zyRPIo{ z%t>ay;-OwZEe`oX;|pi5ac6SPd0M!s{nF1&FK7l#fY_{f!PcbNsI2U~yug8|gz!ZB zeBmwCOHUf|d==v_(~SCGj*Y5}M3b1Fqg_al6Q&*k=BA^j)XCJk z%`kACAQ$fJa1@u|h7r_#o?`k1g8nKS=#WijIXbcC(N#DKTK<`1WNdVRGz_&Sdf&H! zo68EpI)}lHPr~CQX=MCH1i|3eI;|HyY_kJP7ulk(jEt@E{F~Cm3hZmD2A*|^O4p3C zcdb>~DO}Pqsy!f`KxqNdK43`eYun^_V3)$es^4Xx#)q)ZLuD+ieKy zG#dk_M8*_@-%wmyV|st^9;EFDf_+X9`*lN3gp8Sg(F;!2md+MC2_YRq6{eV;ZD(6& z)N8e^pWiJxSC8cIW?CIb|6phVYXL113UC8&#YoyM|-BT(9epMA=}`}2c1XO{0=@|5)3_i?>Z zoW5^pMtuta(xM?C<1;8@_6iv(*+mV@JbplU+e5p){mZ2ezoISRX6?Bq`tl)>d7Yp8 z^p5H&!$=EH>Pvb7XS~fgY7~v_xYFY9Y8T*VpE0N_0NfTIySg>oSME7~o$|`Df*vje-lcr> zJ*n$GQ}K;eOYw&{OaT8nr0miN63MAyERDRN7QnIjCE{YeBKpEY5Xa`@VdnqfjS4EI zsFWup%>5^In?M zok9n`RK@`Q^8C=dvsUhh(j$0KHWeZs)JG}KA~)%p;}@aXIbySM73VCXXA7g-*)mB0 zQ+znIW^E$WS{{mh~Y^P5k8%xC~KlG0HpM0k|^@e zGP|$M5F;hF=oq>yVkA!6?BD7}O!<&qCMsv0OQKTCOMfVGpMy&R!CWEn|ha($D53Yos*C!(Z@d z+->JRbT!Tw$QBqn_KVe$qfC_eC3;x#LFG%h%Gkb|aWT7iF(!?hCAPQc=&z@yEnJ={ zI`Snbn5pWt1h~AO(3A1%I*JAV_{FT3hnfC=yqmYR{ zyztm4qTNmn4jz-BW?zeX(+9$_rvr2JMfUHMx<8F@D4ns3<^4^yO2A$#4*v9o8$&^E zNaoy4Ms||5ub}U$3ZXIREl^J;U~j~La}X7er|7+pCO ziySyYuuGh}oNZNK@4FaRZU(5HCp7%Lr-?pP-Q2%!gPb0I*0Q_6o-M6m=_(zvLi!~R}Ek68E;(%OJ?wS-E>bVlc zS-MR7r4ODQEMHa4=jNdfVP|B#Z8G_^mGEF)Ma2@=`XftJapnkf^ZFN+AK%+6Koe zea^jg1*EZ`a*NDEjt>J&kpzCa&ns8MX873NKMif>PBFs=>7UM|hrPV2>8lR3{puc` zC=v^EO-?Aq?hV9^bsL&i!$BjJ-K_@a3EsG~(kP49qI}IC|BZN;`)cCK6BDND$?^iL zt^=+s%#4Ha6RV3s70mLGuQMehWnV!{Eh8dh944N0ZZHKxg78YZ2csR6^Pm zzrq`un_)yXK{QB@@3>{WplluE*1qn)iW5o4<)5(GbB6RA}TAso5c%#n|-K5~<(GJ)FBxbMSC%U}wOZfbwqNZ@Si!CAuZV!2G^ zAwEG#^aAXS+#khoXhBo&{i7`fx<$awzUTN->S5S12)+6+B6hKA?_9~H8Cn6KwJR2; z#6d$^$pZTlI;J^g?OD^_D2HVMRYGKmXrcfEWJ9d?{)Pt9vuHSyBICRmmU|&>Z>+pP z94{UFJdV>$!qbP9NZ)>!RCxa<+Ut8HEui^i=OhW&22mK;rZlkB(jULn6^UI5bhxkd zh3OVWKnu6W(xT9ScT_fa1z~La$f()}+kh|z(5mwWLaX>DeKPLA(Mg zYB9Tfa0oRrc_ju*G)*GAcrGrRsC??TZ&EXc0kPdng6&iMgP#D?v$b># z&{l!N6JbR|TGS)h9^7(~gPUFvSNLjPSdeHSnfl}VS>>9B%h}4(PW$om+%wza0bX5< zX&%fm(#h!oTBVEW0>tT8nSCg#1@|on1{fFVh_7R1f1uw{MrI`|TWZE*3SqCrqO|LN z?hUL3q?%m4GhG+`xZHWUOWW!29Z^9B%tK8f%G;W7m`X6&yU>2nI_|Qj)+;^-dnpQ7yjKETi z6pO0oF(|&UFDb50S4EN<050{*+V}9{sn2;$EX_d$HJ#E5OE`g?G)NaF0mh>OcFlm zI?`xaA&h?Gs!~@>Pta)-LB~IEaqcghT|;8`W@-wWl_w7f>PggFbwbHiH%8dEM-GVd zWtnV@`4s8)gSV-SO#Ll2% z^VFgggmrmKZXqqGh{V2pTxf(>87F=c ziwkeACNEx%XZx3n)7{BT)Y;|u0B_pf=Xrpxyt!1+W{i+AGIH%(CH5!Y@W$4>JXuSh zu4<=G|FTWeV{Xg#E-`mYI`kadmwY)PlneMy_rm{l zDlaK=;{8&nYBY|t-fkxI1t|nt)6B0yViE~3hbssg7L zE8{~tcK3xI@u1u!ywYG>$?%HVp;gge{&1IQEgU<~-8C-{kQ{kGxmUfn*GbX0azl`* zSa>Zsnn>S)y+3#OX7O{wTajuNGH&}Ua3;3S{=bb7lhk_&I5a>AET zT&o>*jVH2FcUR4U$cu+1eR^wgjh$~xKg=ucQ9MqIB8vqPdE)Q(L10SGsW-b%ylibE zIHtz}i+lgzREdB?=>0p**HBoy-nKkatBW4~#q4pAne{egR)64Rf(GxC6nWf1kY+Fbu*04Pfom_PQglicHvaE;W>ZB4RSa(cM?%k5m47sA{%~2 zNXa1QGY?eb_Ic!JS}VWEBqwA`Clu)ic-PGofVrYt7?nPziP6fnLe{L=5dS@L4*1jfblQgfmeX zMP}aY7QxcuF4oyyGW2Z*J;n6Zqq5q`#g+&NTqrPPppp=1FA7JxayCm@J!D}l;Y;hk zC{SRcv*a}2`2d%1B>j2~d7pFkYpwMjI)Qlf9Li5mjLBOFrtbj(BcEpC0D1-7;)DJcX{k$!AdeOZo$&G$6%%3j<`8_atWEHb82{@9JR@!xLTv3;uztnu$a-@HXRK|H?mivJkWh594FWCUaN=kU@1!N|W~YSqEP)QeJj##!Rh zS`0hF9QzO)SBlpqD-w{2$%pgY;3wcN3tZp80&dc3Lmi1M+RjGz*5QdCvS>>pKRWi% z@jnYK`_AB7H%tM@IaPRWmT2sU&mgW;SGWzCH)YNZ2^E<*%fTU z&Th?G$4db$^Y~b0#Fk4w9Xy&#k?#cNRJ6*VoJt>1hbu$`8BtHKD!PIj)&@9m5k#0u zLESeg!tb$-8gHGeH;H|gE+iKK_!i~I-K)nd_R-rd{FEx5CzgZw%*0d6p>Riu7B0Sd zgNJLqhrApG9gu@vrVrj~oe$(p2@}Nwfb&VWzRY>lG1$q`_WPd`<#cfJSD=qZMU#zzpmVk5 zi2q8hRK?xYl1A2h`-7V?t{qZgACE`@?ll#I=>ZyG$wvOW>Jd@`qYMc{#Woc+w@u8{ zO@dIkdnrbQ+2d`n@BHqL*%#mEOV;L$on)1x9vOhF(2@aNJ>wkXFGi=`gz(ert_s~Q z66VrCh1_AUlDKB}p01AtA^yMaUe{XMy1aj$d@LDS)SE7x<`oaoLPQFv+H!gqj{lLS z6UXpX85H9$x-f&Z4!pxh(88%+lR7`UK#-CzoNFLvtH z)?Yz%a>C0Y6O+wf)b_Kzj5|NYn#(>v0f?a~$IV^pP_tTf6 z7w&4Y@juE(Veo)Hd>|nB@ba?t7s;}`)XBV{cn&cWNk<1^U|;~>9k;wQ zwEj2<_Hp$!+BpFjMPND+JL{A%$dMxLR%TDQx(q}Z(kHQ~?y7c%=TJ4>Oxd>uD4_MR zU7%Bi#_(`eGB^AQUwXDx*2}x<-&(nWh}0KNWuJaOe8#Zxs+WfPHl6Mjd}_Fx_To4{ z_IeJGHK)D1zFAfPE`2h2j6Vx|=!{v%5x#DD)1@8f@zCaz2_d7NZh2;;y^LJ5kprs6 zYQCGXA#(MR{BbbAF|q9C3VZnEMVFH!>h#-7(9e>dozg9b_eb|)ska_aT1}Omy^}~C ztDc?BKI~YxE}1AQh&sc6MziH|`W7C=R7+Wg7X9-yKlSJ20pvR;QOszisCZ+~=f-2T zcUn%>60}zXb#bKjUj=HMu;FpLjyE>E%;7kg zg~cU_NP{+N0Z0mN&17;rk&lTwv|VUQ{pCVds*<2rp6rRpWkTpA4AXj0-RAQILOOB z4T_P>JpLF0h1lu6&$1<9z5WY5PGaw({piYDER|8kbGPn-v$oj3>aOPY9wB)aFO@)P zzbpQDAa4>$HiN%W$$w)6J(%WK!Oz%vh#-|eT@^^5=zT^Dm)Gsu89St!t!7-`Q-3Y` z@n!h#J?q1bOVqgS2}YPV&~HrilXJGdKBOI15qh@q0iLZ4f7`%+@BVW7oce3;1^X7Z zxVKjl9@)HV$m6#}?n(V_4*RurLUQXX0E^o6Qr*vUYcqvnFj2N760(Fl0iC+gNl2Yf zesg=smFyEoV5EU`MI5UrnyikwU;JY2)I;T*hnuNL&ZgKgZPTHCx-L<#S(8i1Ov)w< zRM9l$;o<_Y`@~*TT|D4Z210S1YosOa`;B%p8>5G{?og!pXD{xX{kyWJkwqznSqwmI z$jC`1trg=rGWpwC7;&uMIRHEm=0et-0_ zEga}KVi)nUE!4=@g2$tI zeaZamtOU8SrK97O^zHgRf$HHUmGi?69eWk=WIsGV7W;jhIxwl}9(07*l75%Jp_pV` z3a{d>3wZ%J3g~0vG{m{_XZA#Zun2Z$0hgQ(O>ZEO`6PXUDZO*ZL0hH87m_r1xP|Z0 zb%qD{5lCF^_@n`0ir>DPt4MpS3wA>a81NTF1V9!gjDOf%?2-O5=w}HbT07Z@*`g2S zs1e5S6BNXlaM7$U68QlJgW=AOeJK)>K0#44DOHu$>~gHn28*!`BtMmEE_&$4c7WN) zW5(#1BqgtsqV65sjo4T?OafLTi}R;nUjcijzQ4&+CU4o^Gub~x>>}3uSbCDCQ+~fd z%&bW2_IRS_J>9CaKR)lEtX8bipz9p^Gt(~AedVNm4XOQRo=J`X74Pm zGty!&A13ORpKP)M?%M-QB=Cv>XW%v_} zG@L1$E3uC+5x^;n=^h2&AQw-d=)GNVCMP|KYIN4nk-U*tLLZi@v5+$N5M?2*`#VMR zf#kkoojYmdPK%MmnH;%ds$`eN=5uztadP1E13Y-hmB_ ziII0BFh#v&SFs49sZ^*#`aYc2GwlR~E(qY~a?j9Mv}3ab0`~wE70_R?8YQ4+?;JFS zK{QtV+GPfZoBKb!E3Q;gV$jg;nwzCNU;&{Tfc0tfp++&3Z)T4 zgZr)wZK2w?AuVqa&r|uWWU?BMAl+U=X>~kRgZGu^hu2YgpA{?Zmghuv8Cil|q6Fxa z$;>4y3+J6b5AEi27kI7mk{2v84+n)#64Bef*zP21U1I|RY?=5sBEX=k#S z-8H|!yU!s7Na`Vku}>$9*q#x1w?0zV4Et`Ll_rM_o`7 zalgu+D4yhFL}HV+3NCnmz?yUyBOH)oU7MNC6GIYWkcWzKK_S8rMRgERwzl zjAP(zB4wf*{=%~hyWy)gNg2T{;l=radX3v3!UFs4ryBotj!JPwf=-#J{Bsl!aIE&x zSuxGhZF|0TGGk%bOkI0=UKuUX92`eVrw%bfv5PQL@uw^hINuP~Q?H{!oR^$|pGfgB zITEMM23g_TBC_uO>MS$Hpa#>wk z<2GNgh5{KJ1$;^|Bt9ly;Vt|bm|pHHwY5B;<-1)iP-u^fMIB+|HG$xo0Q`6h zHhlfaX|@ODiScwX@$fsc^;J?Qufbdv$te+q;Q+=ZyvQsnB0@2y}mdH+vBhO`WwGC{K`Q3D>Sx2og-R`c9-n~ z_SrdEQfdYlL(;+D8k1|rz|K_-6@2-dsdDUfZCM4#zP67*w2B<_}78K zFX|v|$iGHp;nNy!)fo}tPa2cslkeGDV}z|AsRBc+Sxa3tSKfPL&}7J$V{OX4`I=}8E=Y8!bHrAfh6zX;`cf@-G(V!(}X%d&D7CTky&|wX~s9u z4r|nD(g=&vBJQobZxRfWsDXh7d_E$gElpgS#uss#cHnL%1s^7p@lxN=@@eZO=9k0P1Un=;qKA3?=uIg+nS6l^H zHMbS;4%wns=qCpoQ1)q2vxj;tA5adHK0FlK9QG$V0^-48FyTx;zl!-Q=v;VbBz|X5 znws7UcqtLnz(rJt*Bt+Wt~J|=8CL>M2dCeBBf_J39}%49e0Hv@LlopxGb*fZei>TL z#FEr9jiBu94FD3@w>D(o=l@5J>duAH1JQtWQjb1V^Vb-LD>*ZKqq~` z(Z!F~zbjmF8bXQ!f=NxB;r!YmWN~089NY7W%}nE7>`mbN>%qOJyQ_lERPdxvgeJAF zu$ShdOT|+O*g6}PkXcn^S!}r4rvl@Y)~54v^;cu$Ox~$iF$mv6rNt2m|JOHOBqc|l zS0@2k5*;dXIES`!0RgvF0VO}z^NVo_KatHGzgmtqTRT5?pYLwO2V?~{i0>o?uR7Zw zpWI@EmuDN^ChADY-}l9!Pp^EBGiXBoF{kCUEWhB*;|M{w`D zG1Z3a&U@|vJBs5KSG)R`UwwZ&TifpzUtl}7#jxeU<+uJ9f4j!)L9#CYhj>cO#;~ET!r9-4j(-Wb#l_ArO!0+@2=aSlPMna6 ztaqAk_n`W^-@RUsM|rJurBhL6v8cM>AT^+#xyv3A5tm~wR_{;T` zQ}Sm3ST{=Z2m*f4DT#F;yd0*C<>Z_noS!ZMe;58B^o1v-SSjH~7L4^l%^Jw32z;MW z#&hk5GUjnG=BPl-BnbO&&_^v?G%dDt*_+L z^>&FWyHJy^MQSNiMO8BE@zx=BoUm!ZW}>;xKUPPe%3RSvsEUs+WoT)|qLrF6yZ3NW zUvYrOCdbtaNJN{SEj!A2)Vks%D}$BpyIWc!S(6Z4+SrGkh95~*Aw%gW8d2?ao^R` zjn}8mmds7@9H9DY?7o`{5K4VoC4*zQym3|%5@mWoXBHidSpqubvRH&RdpvBrm|eD7 z0{4^tF93}|a=*btTN0ejxnK*uz8DNn&|3@3FqqCxvH{NpPpfoX7(6L+8>rRID19tQ zKc&WdrZe#_V7Rap!s{W|z*{=Ug(dLZLVnk-UF+8ErPsCeL4SYm;JUfFeE&#q?=D8Z zd8!_UN1kJYwCB7!&u2vumpPfxh!jmRkZb}}CU=$gD7XkpqB=TbwF;kw>Ss36PX~kB zk4)+u<8*L_N&WoxPtn^<@Ss~~)AK2IBin;5ROjuT9Oe1oX0FCV>g+vP&>>X(o~muw z(1MqAj;BoG>VsqXy}L&5-@QM&i`5(L_~ydhZF4`|g6UMAy)w8XsdNgdm#NOzPc=5; z*+w^-Xm`1f`n>8IQgLqr0+;Ka`%}6p<(gJzUB*ENRrnm$q-y7##VsEX(iGwt6S|ej z8wehs3et39DA?xF`RQP*m2giDI77it&>4{$5394o>z*i99IDY|b8|Z>h|UDUEJ4$E z^K0|(Jp0Wf5Blj@SN)$IT9`P0??_UG@YdR1`c!W|&%+P-!l&N2({$}D6WEN(xka5J z$AwILQp*d*wy=;$WuIT}X|mhydU1~c5v;;z%}A!Dsu#KIUwl3o913xqzJ0sG9SgQL z1iNVJd`K?TS==7vi)J43U(rgiRTcQ@B>`o=^+ZHIv;KJwE$rp{!(F&ow*_T0vaK4iBb zkH(fMHX>o(S`sIq0+%mrrOP#?Ye1^i*+DYm1}{}xvmtJH-W=0S(fE7vkc@**)71G0 zSE#c;7!+$dKU$q%E2}eBpy?V)XGlGC>zq5brsYU$%gMV`=cygLdUxEOx_j_U{m{bm zEo-Lz?OiPs0|TG9+cI?bhZAUsfAPWRfBe?9c{ZCd-XX4@9V!BaDQ{IS1 z1$#1>M0ikvYx|n^T?NIcc%?csBwspWkg9aHrZZ@G-WWXSV;T*CB z>t+VtnY(vnZtk=)#QVSXNvgByaI~>8J|CkG!hI*Qk{~4PbVCy=?T7LHyt(oA_-{I# z14V>D^*WQdd&4Yiom5F@@z9}G`_Xom82f@J&jg#9#p|ij9-X;E!9Y#tN2~J}O6W|& zVS*K4qMgvN$hBlCFdk3E<7~0+coskPgl_75RnS*uH0jBfXx!+HGed=hu(Sd zb8lVE61KdZ%f(Neh|ROiLlP(|J6W7!2vz&cSIjo{?SH9wSqN08vtw|IuX>_xG8pWV z=^ai7&zW}G>mqde?%0yf{^0fm8!`qDwQ(#XIi%NgendK7D%9EY`Wz+%Z>;yPv62l7 zBSkiK)dO62tCt?B`QX@te7@nsEp3?rbwe)Nn#~T(w9Vb#(La1QKi3u-fStep`e)zx zEiDeE^u?p|DKk)KeF8<3?cRx1hi7)GY*}cxrKX?cygI`wb#@>TQhi0;q2Tk=duT=7 zp@5x2Z)Eq)!C?K8&fKSh=Z*v{**|eExP7vgY&t@}OXo;j zBP1il=p}RW)?EMK-d+7887)JigkE|2hoid&2Y2lq+&dW7G%fb#ojbd~M|IB5v%z3v zl!}dVQ6purh|gK+a~xEQpj9Xm-ESUR;Xzrc&XU$gs;+nT@A*`auB06IaSZuTkeJWX z(j=G88@307EHJm9qaQldQOlhloz8rTp%%>AO$sAGp=!7JRJYC%cFp<&ey9lo!MFN* zskIs8?+9cFOsaz6>`i%vb!@y!9ecS^i)88C#w^XA`(^);F>CAY&l+HOJrkOfJr8!wQ*&;EWyGKSw z=-u4UO*#*rIk*YuvROhPf-sX&pPhMP!Vk}=Qm&t#Hqqa|Zg4P@%?c;zF22LhHO^~U zD!rs)U_=GMFlDw+cas4h2Gt^AP!{c46FvL8vd$2LDiFf8y@JcJI(5EON@oZxA|T}7 zc!oz=rZelcC{R-LH`rW4*-vd=qi_Ya(r8@tha&!h%X9Z>*ovjAu zYNro&oNSqz+(31Pa3UMe9_h@s9iciOf2yIOZ7QFiZawLT?K>~`(6dWqHIwhB^Llwh zu*vD7sGjdpR?D3JQ z4?p-+%S>16p3YM}^r+zsJG`FKKPNckbWXl`OBVGkeI!bx(!qj?Yc5<(I41xV>HOyY zrhOOOF&*LZ(jrvTc{TAK>HK;Lor&gKjLt}H)dvtM++5|$PM+=}X#GTMd!`klHXy*A z8#fA&G|Q;r;MW(14|Yv=s2fjr%Hy;x!AtC@Z>xEdAuNGeLX8EADsnmm#G|JKh!zn* zj0XwVdI;2=y5u6AzkPrv>M{Gj0jVme2ns=4S*fP;f1meA=S#&pX9P{Mb=D-cUD@f? zS4tAO`P zXQ^l?h@Gx3gwM(?rw0<|!M~DFis8j>bh~;@&*_EC-M=?Sge+3Hm-bV^1m<)9@aTx( zLJG03mqnVu$g<%gvsVhcmbBSVRZPN=nim2#NS7r0ujke9@^{$Gv!dX|hDytU6tj@J zmTas79$shf4lCrjN8@ogFwoMOl(HF0E=v)-gg>^9E}0B3=%T1(XnZ!^rTYeN-I~ka z65pgce_LRTu=Bl*ZowoAv$@4-4oJ*9V#m4Sf^tz33A2eotRf7ZzMoKBOb!J5Lovd( zz!&K$gS59-^+1Gyk*Vpt3UG9ONQ!k1Idfq#78q3?6T!yP*?SUw_!*gF=o-ve?%rC+ z_tNa*#?_-uJwJE)a~Ru3O`mhvow&e|#_p=j4!sH!&t8-Wfoj2-SGsEJEJY+ciU*RA zr6bBuY1zhiG_Vqo5(6b6HJvN6T6KQiH5E`)SB&Z=CwIc!l6!_w3ZzFq|CP^&bzL9FH7?H3cr~px+=~n;+Ls>3m`9lFlQ&^y%Rd8k}=N0XQ0trvz0R8Bv@=+*}zn)j3A>;yv53 zA%Z|^*7^42&UBsiNrZm813v{T118Goj4`gYD=){Y)!A7{aaPQb$}X50f;#K#S%GMU zWJ8FhQX(h3^U-&FpB4qd7a6u)X353{+Ad&G=kwI&QIBI-AjX zczAf5p}k6z*{e=|(miK{4oe^=EmmPDYy2&(GeBweHwQW~K`M0Azes1EUji!z)pTAdkB!cn69-j*)^u!c zE~RtI5L`)zQ6G>wJ=wt~?cyUeK{g}uXa8~GAOHBr*Z%R369OYncW_%>V@m4$42|l& zBX<1dMC5MirSb%5JW^Gp=h0{(8Il0b3dMxOkpjO@)Yo^KPZ;rdOtAR!zij%Ri}Jln=X8O8%*O|HjffyPEN9nwB#J z2cs_)W)b?2U;XM=fAbr9`Lhr<^W~IA8f{1nVVe;BtzuP6h2vq#k%{9FV5lU}EMZr#sXNy0X^{O19Hrx8f z2+YDvE|<*-E{sS#Z0h`{xBtX+j^wPa``UboWCLccS-?m^vuBx;?H;CWKxwaUO?S3- ztm*7%Y1R>RatsBQ=p?%Dngmu(sHXEucuaJT_NC&$Cc%QE%;|z*;plwAm1rO~{G)du zcwsvKCKRIAKR1>D35%#%rZe%8IPcPn69Gd_HZ&xS4V&>md%cqAY^bN+;ZRwfrJk)# z7skQL!KgMATmh?B=YsA8QC~FTicgs8oXBXAI3?u@&r6S0`X`2!0ekuLSHJqlKfdob zU;X22m30=NN_A%KXk7JlSQHUpm7%biB-#d=r8I#MV*L80OP8QhUg!P$ntI-pz{)|; z+8;|nEc;2+bgsba)>(=~;t`6^NJWWjHdbm_vu0xhiV76>REA6EvdiC^PIdmS{Kv2U z$(3TvhNC%0X9q-ehJd789YdikDmXzMQ`_sFA^>9uG*%CNiT;HhopoH?+lwa8*Jr`I zKv9$s!Y;jQI+tfP>nv&Z%RH}Xg^LT=U*Ae5(a1JdYtbh-MB;)?Hsj1sc*uxvQ=jQu zz|nbrHat5UrGZ|XomK6gcd1lg3Yt0>Y?p#MCu1wy2&iTOiKX-Fuf5JgrJ#Hx71n^m z8+5Af@HluEAi${UTotQW=Sz}7%DnulxP6VxbY@)z+>;lnrF~Y`Jx2r&P&~DsjsySt zdgCIR7D>gzHrUEr%&yT^bPfyb7{QpvlH(9oI31X1h6D=tmw1wmFwX;rF?P1lTcBE0 zq`F4FUY%&#aI{%>j`I2x;pmU}bvf3a|8C@2lkSgz@pzjXcL-+!N6 zip?o^`4R+{&Q7u+k-kVI7BRG(!W3gVd#OU_@dI=N%pD0V3&d=798F39TBsqo^oI~D zvdnQcoy+hT>P%%pq_vJ$&ll+&;z}VSR|c(c@Y}na_8pGRFWMZA81B?s$rR{}VOGPp zx^H2YSiF0kue{OIbael7%i9cFch-dxu+=Y%BI}^fkYznV(aoo1U8xm_mgTY286yDD z<|O>U&23(tF(>Lsl_ZG>hUueElGG5BKt#mOsYP9&Iv?$c+d7jzLnt6rsB@x!?^=cg zKn0y4LMWujp-@OsLLr@IFLC-7Pemx2sq^e%+J=8@ymEX-D8#pNt^Pp6mVju%nZImw z1Z%rdD)IQ~9HPI`86Wsiy>M&WHupB{oXF`~ac!NXBxDxVLXfG=sX40i{;R2!8Jc4e z!GoGB(D~+ClfB(bIzvxCBngBNgb=ugf>EiUrCMIK5!7?3Qa%jLe zK-z$>KA(q}0%2|IYjr$!IzyG|yz!~JojW_8DbP7Xoy|G#8LnOfOkABsIU2p` z!zT~Wy-s2C+^Q3XA$S1T(K$rFD6(1{oR=2cZuxyk1umkgteIT6mQfG}MxoB*&q*&I zpf&uLmwblE4z(&u$e4&N%^&b>P&j>kYXfTg*(>b}A7gtBgxXH-m9UC+zEu9~Ux*Y= zR4}bxcI*wuGoq*p9vqz+3B|gEzA;fei22@UjNO0E|8Bo+C;qp2&9G!cf z6ruv#sO?506n57DhAK5qV>$znp}EF0wz2g|RZrJJ*QSD)3QOp$X>OgRu`6R^KVdce zrK}tvJxp+R@O_C2}`^HnQ-_!rUC)UcSTB`I(x|)$>^D ztVPYmW>Ihv?#qf|&ZtJ`myR->3&>!M5vDdvP&HTjsL4bVES)8{&h^cFYbRVvoco{( zygFkQ5W}rAb$I;BewuAu*MKyBUHU4OUIU-9sUHjKt;CN zC)hf7*L1F))vL2zg5(83vwa&9MW_gFQkuvqLJ4qVvCfAJyw^}pE3`Y81KF(k9M!pd zX(R|?TOHqmfsGa>NC!naLzPAC7%wg9d?j~^E(~tn{j$QQ+Xfn>E%nLvfO>806Kt zXW!Ptg*FSN@WBuQg*rz8s@t4g5*Q^A2$j$ovz0<(q+H2H7QcFU>%M(G=B(QQTtoNA z_SJ8JcruyPL(V2wh3f3#cAr3U(!169wO@Y!FFL)y{rx}un)|;;loc%T=`=54MHc_F zI+OD2W{ODhgkmF39WNoKhUe#tbnYqm08J=IE*rv_ohJm5f)IkCKxbDSLKs;0YB{~M|dNc(uK>zMbYAr<<+w7JTQ$RSY-356JaA}4FbMmElRbiS~4>+XWO zxk_N*?%<3&{AVU{HtOnE2a0tD&e0Mo(nSi#5YN&RS&m)>;JGm$QCUk4$K#4RGj@!= z8=aZOjJG+C-G0gae?u+yBiRP|sn_CvPUlOYEQ+W?QOuNw5I6p{X7@M-Gv zf1xpf7bwc~x0n@*kU11inbU7Z#0kDRUz8Auz5z?;aXKWsDmW0Wu(e%0l`7U*3&&Jb z=Rm{yGdSm4(m555#v|c))M+b6J(it_%*n65`oiq&IGv}vGAljDn$^8QXX-#XbZ((! zaPF7hoz8Dt;rY+MV%NWL|Idgx?K5R|l-@Zp)3w>=iJcwtf4Hd^gO5g|h(k zF=g19v|yphjUJvn+_cZ7b0+6%p=)k7jHkk`#2VPB=7p--f?8exY+!Ba7Vs z7^1=_na7sO7F`oFo0nL_Kl+x7UI-<@L8db<)y0cLLZQxjqnA59v>Cpz1c2Erq4#(^ z9*G;)e(-p)&I(czx}IFKegn|@d<4Ay8UT_n4gdzHW>v*1cVjS-k-9j*(b6` zyXh%b7cY;4G9)QAr16PjnXLjWj&FSR+63?)$|+Q9)GaQUx03 z2(dtCl;c69K{^$ojset z&UR}DfdH4!Zylzmvh|cJdq$!-x1{q9>)uNqLTCM#@3;7sUPS;qw0=9F_otc3$)KP6 zA40^*7TFt}<#tba?)We0tZ)FA);XKgWHIYbHZ;A+=CK3&-8y?V%Q~NH_dK{f{^XNS zUX}pXRlw-UpWe)I;`S{ZrIT>~Lx@s+vN$>iP8aIjTvq2tH|s3Qmd;49 z76aaD#Fc9-KFR>bLrl~$tE-u)`!{>% z9vjC|2JqdFWN$Jv-Z8%QCfN#6ZEa8 zNN5_&BM&EaR3R#acnb+3A%qYT;xGPUW_E9VzQkZi z4HozZzP*RJ%Z8Htz0G?sKFMdxzN_5`(GvRo8+5j^AR(A$@;1)J zBmZYF#xAEiV@NOzsN&ISKJ!ghYuA3phntX{%A7Yyn{Qp`AI3VrA$9(t@(-b0V{?5M z*Ez5J&*8ST;~S!Ls&mSm=?pi4s-9-$bOHo`>l~l`;BS|^MJ&UTL%*~PsUkOa8}&Ay z5qqld`tF(FrrCziaVoy(M&rvScSACfK(33Dqat`GUN@e;IGVa#uXEaJgHonO)72gN z+&yb|-F@7;>9oeS+O+x2NH$(eEaoZnKV9VBxc;Gs9@_m8#aO;f;WU`a{}5c~{EgAM zu}FKE8R;qDA-a zHk1$FFKqtbiqSmTXumN!ud36zb1sjVXH1CTR8(Uj@*UdkVRHs--?^* zd=yg5ET~caR2>*Df)#hIy?gDQmtZ^Ll>pQaf zhyJ%F>awi)CNmprrVj<*I#&~QGB}4}QMM@$ogfUtkS0A3QLWC@&}tD4#YJxoQLF50 zVle1V*ZIs{gLxjBHp^uk*40h|V9{FE5YmP?S}VFJHdDMfqPsC;28?zbe?U znNQTs^)gC25bUS%&J#v`?i5SsHEMN6_Vf-%hLQ!66YCi!Vd{CQAD_Sv=&KFUwpf*UTKdnEP0jEE)>wRnQIZmf9 z4e5tvp7Ftvk^1nwlm44JfAtGIbACQw`8HQwRw7UUQ`pD-@0l}N|2<@ zj0zmfViHO{&vU4m6G~zmV{AGZLrh^H1J}mpY%Fh`%r$rU+8w&YCw@OM1ZVbgodw7h z5n9!53gxzQvKYnXa>!P@=*6nc&x$`2{^*ruM~}XH9SCaOkucKLO6%| zcwHOscd_fsVrTUbBp@-y!$mPo=Ojd)49)RJ8YmRsq)`T>Va_?5(2L)FW(}?$@J4`ctKCi&-=<|7|E|u}MZq@~ zbk<$&bL*<6Qi~z-=vA$q|C#drvkkI^kuIQGLQcuHO>fui>WZnQFgdD|HoF8tihA_u ziXp~W8>`y;9jSAz%}iDEL_}z}t)}rg$jFQh;1rV0RVvE2Z@fK;&RON;Prv!oUn=^k zQ}5aMgOLYcd8qtAE4$Y`m~U9>K0@3b&Dn=D``gLA`TLtU_t+boZ5->2$RlKE?~Z3~ z``#%MuLkPk+FPS@UEN0SE$RFdzP!Dlv!Z8-+E{ApSh;%j%8sT|qiV)B&%Mr3R3U7AD7QMeQL$|(-8B$_uY2a_iB5^eeLJJ z{N=S@{_>5V$iLuX9P2GZ*j)CJ)Y(f8DX}PaQMF1#SFZiyr@#2A(79{JgGWEG^pjT~ zdSK)G&DM<@yX;56-qCD4oO%4xo%`rq$+zl+26i<(+lknz&Zwwa z*{aVOd0sXFRZMsp0Ct_uF>Ffb_eq-x2=donc+1(dXW#O|wa?1{pEHfDoCeWz5Yj~F z$it|jf`#m?QvJZA`n7A9-}tHiET5r!_>)IF_TPT=Bkh!BOVE6f>ukh2mnh5K-@L!e zcxSVbLysW)L7_7;@gt+Jzxdw0hrr-J2_(H~Os;3^fm_k}8*+L3wQu~t>-^toOz>4v zt(;%fRPu|eo`mOQD^grOjo{GcsCHIYA za48NL!Y4aRpIrS&W7ak{Zanfy zgvdc4X6Z|x{nFTXj~~(%eeWR#g0%b54RkNGjd^pB&9dD%Uj1iu_BG!j`BJ_iQ`8KF zN{#hwv8IOrHOtkEI!4F92|}SW25`-!c?Cj4eNt!1d3k$$7vB%k1{fshn=icOg&+R) zulN7*Ej&I0A~sJ~4EcT!AhL)JoQ!1vu=AJt`-WDwE-hV*b#`=xL-?onWl-P6%28y{ zMj+7D3#;(W7ev>?>jS#~kF(Adcc5QY(uhS3-I^1LUjlQTR>3wqOBqn=|6 zI{$0To2FhTHO*<;x3c{m&8A%DlNu}7N>6t%30PW;$-}ZPAifG<`9Q?>CIjk|jar`E zb=!Ss(i2BsyT&#C>o0%#^}lkTue}B}cmM?-Nu6nc0oqQjxU}NpKGOU^=S5i=`us>4 zqn(r6pO=XYqYlHudWUIYRMw!Db-lg4b`DGe0)#9o$unU zhz@}ZlJXlb2%Y(l{etlN=XE-Vl$f!3i0iy!#mMRYx3+eck5(&?M*27K;?zH!4m6;? z=1>vKeT_LGjm1sj=LB5o&0&Z=#>sE^%$>LKE{vA|+LHKuES;#UkI)Aebe;|KQs+YF z!PW+}49V3JerqY1#J%JYsoUvlV&r05QBbB|4J{y|1qWhMmcaA8sN!6#)A`P|YwrVL zspRJ`aQ^zj3)lYoOMa)SGh@t(Pl70BarNk6UU<}hF|xDesXvhZ(`@VF?L``aAdmw` zk2x9ub3wvlgw9ubb%a4ub^U4nx3%lO(;(tAOS9*Aad76j4MrDqo`HF%^Vt?nbEwu_ zx}zPWv3kzT>NY92Ayllhxv1+R9uh-QTqyVz21LnXOd|$W4y?FZr!#LFa~u+_Fn&Yo z{KFsq@Y)MCIy<6m5(o@}OpIl~r#xLAQu#Dbt@%T^ZnAketZj8*~%fCbWAmI))V zC=~Q_pZl-8tS5^)CP=XUJ-*_8wF*gb|l7WxCF%V8xxh?O`$y#9}B|qjNeGEQkml zFrhO64n|hNw@&k7qocU7XKGhfzo!ChT|!l%FsMRj4IBng(HNMHUu{glD(eJS))AY? zYNn)8L%DkX%e#2_^)qcSw6`tEo^QUGvM$Lp8X6neLhd{x^G;{cRjaMFed(%l!LKG2 z2onSnmaugT=Vc{_u|ecIG1gQFnd6E=4z)(-VA{TsAl5lIb-MR2zr{69g7Y;75*mq{ zz;h@u5O7QaObtDeJh!h|WmZ4((j^N3x;JfOK`3yZD7Q-;q zvt%*nWyLlCO#YQqTxNkr9YZI=rnpU_$8pLvHlMfP#k+W00t3qv0JDahHLiW@Ti<%& zTY_tLHfz|niGU_rd&q!9XW(w~=zO|qSz~Ke=l&H|#*4x&o4T22SxywaV!jf2p$zX{ z$mDye8Ydf){&n2vniA*5+xPZ8!H0u)-x)$*Uo!VR1IHMs`NoEYnT>zMywmxsqW%YU z^2#-+MrVZK<~rMo%r*FpDHn0s{>EP6@%VIW*Ro1q8l0Vog0pV%c1HUH3PXKYR~(Q()??t&Bt=ejmOgjeB(Yg} zZp&is^WNifILQ0tLXthtK(R%H<^`SqA@fsbt=%?gfAwTEm_cV77>C8fC*WJ28@OPS(m#UW?%~A z^w0sm)_s-#Z>X>DGhFBILM=Qz3u>1H&73Sj!iEhoIRvyI(u+%{dAFDqF@26lsS{Y? z*2SBSK}g~B)l+ds1I+R)M@1MUj0&A4e8#RfX9Lz1cYAW4>>pmePfTyTDCaiPrNMeW z_)=b7SVsA0%r~87>g+T(m6}`2rY2zKOgbM{Y=nTAvChO{ECR4~fI=YvpqT_@C6j| zv_f0CwCHwZA*yi@%%t;kiab6Q01=UFaPvb7NY8;+$N*3)CJ5b{-dnGW9!RglG`@B% z4$gHLax+RSG;uZORIIbBD9OhSSq`Wc&_eGfo^JGZciTCTFeYvshnh5uGC>#w{k1x; zds$cX!;7c*!`*lB>5V5}9RdNnN%p)UuP!Wd&xZM^Gip_`Mw=GM7A|-uoww*ZG6Arh zcu*8z6{ir!U6NE4>XYYMozKHG=r@JV6zah`7h0D>Bd+r+{r&wS0auhEK7oDl=(AbF z_d^Pf=53Ktb_+%zp&pYLggmd{aH0Lex*Cr0k9~P@Er0lo7!KZdibe2PEerp-vAOvQ@44@xPQV5sUGcW$!5vK$(L6IE(;HWdB2 z#najT<-57hpBqZD=lVpWg)J0_&W?Gevlt3`i1xI$khpJLk<6s?R>hSr3!Mp9n})K1 z7Euf>pisk5jn2>9Ck~H->8L;b)=%>p%K?EGXpS}21r)owh|pQ!oW9h@V{&pto#AFh z@V0Hus>E#{_qc{ldS{`?RBBRS6}HE)av8pmlenRA(D7*Ez_5JlS2>5ik&Bf

#)YjB}hcCiCX(hAL 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

lOJ|A$?9P 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 m(_5qt=T2{tI-EPbMfwX+GH)OJt0J)g0000 Date: Sun, 21 Aug 2016 13:59:04 -0400 Subject: [PATCH 25/80] Add documentation on how to test requirements (#811) It's possible to test different requirement versions in development by using `pip install` to the Home Assistant's config directory's dep, and then `hass --skip-pip` --- .../component_deps_and_reqs.markdown | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/source/developers/component_deps_and_reqs.markdown b/source/developers/component_deps_and_reqs.markdown index 05d8cf19f7d..3a5d847baf0 100644 --- a/source/developers/component_deps_and_reqs.markdown +++ b/source/developers/component_deps_and_reqs.markdown @@ -11,16 +11,33 @@ footer: true Home Assistant allows components and platforms to specify their dependencies and requirements using the variables `DEPENDENCIES` and `REQUIREMENTS`. Both are lists that contain strings. +## Dependencies + Dependencies are other Home Assistant components that should be setup before the platform is loaded. An example is the MQTT sensor component, which requires an active connection to an MQTT broker. If Home Assistant is unable to load and setup the MQTT component, it will not setup the MQTT sensor component. ```python DEPENDENCIES = ['mqtt'] ``` -Requirements are Python libraries that you would normally install using `pip`. If Home Assistant is unable to install the requirements or verify it is installed, the component will fail to load. +## Requirements + +Requirements are Python libraries that you would normally install using `pip` for your component. Home Assistant will try to install the requirements into the `deps` subdirectory of the Home Assistant configuration directory (`.home-assistant` by default) or verify it is already installed at startup. If that fails, the component will fail to load. Requirements is a list of strings. Each entry is a pip compatible string. For example, the media player Cast platform depends on the Python package PyChromecast v0.6.12: ```python REQUIREMENTS = ['pychromecast==0.6.12'] ``` + +During development of a component, it can be useful to test against different versions of a requirement. This can be done in two steps, using pychromecast as an example: + +* `pip install pychromecast==0.6.13 --target ~/.homeassistant/deps` +* `hass --skip-pip` + +This will use the specified version, and prevent Home Assistant from trying to override it with what is currently in `REQUIREMENTS`. + +If you need to make changes to a requirement to support your component, it's also possible to pip install from a checkout of the requirement. + +* `git clone https://github.com/balloob/pychromecast.git` +* `pip install ./pychromecast` +* `hass --skip-pip` From 8d345dc7fd99effd815034f98a57f257873d886a Mon Sep 17 00:00:00 2001 From: Josh Nichols Date: Sun, 21 Aug 2016 14:56:49 -0400 Subject: [PATCH 26/80] Update libv8 dependency to fix failures with clang 7.3 (#812) See https://github.com/cowboyd/libv8/issues/205 for some details of the problem. It's fixed in 3.16.14.15 of libv8 --- Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index edcea1a3d9a..548a411f9e0 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -32,7 +32,7 @@ GEM jekyll-watch (1.3.0) listen (~> 3.0) kramdown (1.9.0) - libv8 (3.16.14.13) + libv8 (3.16.14.15) liquid (3.0.6) listen (3.0.3) rb-fsevent (>= 0.9.3) From a8897a4b1f8dac6995539747e44cdc7f96858cc6 Mon Sep 17 00:00:00 2001 From: Heiko Rothe Date: Sun, 21 Aug 2016 21:03:50 +0200 Subject: [PATCH 27/80] Added room tracker docs (#810) * Added page for the new room tracker component * Added info about using it together with Owntracks * Updated room presence documentation to new sensor implementation * Changed name to mqtt_room * Changed category to Presence Detection --- source/_components/sensor.mqtt_room.markdown | 54 ++++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 source/_components/sensor.mqtt_room.markdown diff --git a/source/_components/sensor.mqtt_room.markdown b/source/_components/sensor.mqtt_room.markdown new file mode 100644 index 00000000000..ce024b50ec1 --- /dev/null +++ b/source/_components/sensor.mqtt_room.markdown @@ -0,0 +1,54 @@ +--- +layout: page +title: "MQTT Room Presence" +description: "Instructions on how to track room presence within Home Assistant." +date: 2016-08-21 03:58 +sidebar: true +comments: false +sharing: true +footer: true +logo: mqtt.png +ha_category: Presence Detection +ha_release: 0.27 +ha_iot_class: depends +--- + + +The `mqtt_room` sensor platform allows you to detect the indoor location of devices using MQTT clients. + +To use this device tracker in your installation, add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +sensor: + platform: mqtt_room + device_id: 123testid + name: 'Cool device' + state_topic: 'room_presence' + timeout: 5 +``` + +Configuration variables: + +- **device_id** (*Required*): The device id to track for this sensor. +- **name** (*Optional*): The name of the sensor. +- **state_topic** (*Optional*): The topic that contains all subtopics for the rooms. +- **timeout** (*Optional*): The time in seconds after which a room presence state is considered old. An example: device1 is reported at scanner1 with a distance of 1. No further updates are sent from scanner1. After 5 secoonds scanner2 reports device with a distance of 2. The old location info is discarded in favor of the new scanner2 information as the timeout has passed. + +Example JSON that should be published to the room topics: + +```json +{ + "id": "123testid", + "name": "Test Device", + "distance": 5.678 +} +``` + +### {% linkable_title Setting up clients %} + +This component works with any software that is sending data in the given format. +Each client should post the discovered devices in its own subtopic of the configured topic. +Instead of developing your own application, you can also use any of these already existing clients: + +- [**room-assistant**](https://github.com/mKeRix/room-assistant): looks for Bluetooth LE beacons, based on Node.js From 9e2572a7df80b58ebecf9753830a422701892b91 Mon Sep 17 00:00:00 2001 From: Carter Date: Sun, 21 Aug 2016 14:04:15 -0500 Subject: [PATCH 28/80] adds missing google maps hyper link (#815) --- source/_components/sensor.forecast.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/sensor.forecast.markdown b/source/_components/sensor.forecast.markdown index 6700c62535a..5f32c56d364 100644 --- a/source/_components/sensor.forecast.markdown +++ b/source/_components/sensor.forecast.markdown @@ -13,7 +13,7 @@ featured: true ha_release: pre 0.7 --- -The `forecast` platform uses the [Forecast.io](https://forecast.io/) web service as a source of meteorological data for your location. The location is based on the `longitude` and `latitude` coordinates configured in your `configuration.yaml` file. The coordinates are auto-detected but to take advantage of the hyper-local weather reported by forecast.io, you can refine them down to your exact home address. GPS coordinates can be found by using [Google Maps]() and clicking on your home or [Openstreetmap](http://www.openstreetmap.org/). +The `forecast` platform uses the [Forecast.io](https://forecast.io/) web service as a source of meteorological data for your location. The location is based on the `longitude` and `latitude` coordinates configured in your `configuration.yaml` file. The coordinates are auto-detected but to take advantage of the hyper-local weather reported by forecast.io, you can refine them down to your exact home address. GPS coordinates can be found by using [Google Maps](https://www.google.com/maps) and clicking on your home or [Openstreetmap](http://www.openstreetmap.org/). You need an API key which is free but requires [registration](https://developer.forecast.io/register). You can make up to 1000 calls per day for free which means that you could make one approximately every 86 seconds. From d5450f898d99a08408f11ebc3027d5dfd4f72b85 Mon Sep 17 00:00:00 2001 From: Daniel Perna Date: Sun, 21 Aug 2016 21:31:19 +0200 Subject: [PATCH 29/80] Documentation for LlamaLab Automate notifications (#814) * Added documentation for LlamaLab Automate. * Re-phrased to clarify flow --- .../notify.llamalab_automate.markdown | 48 ++++++++++++++++++ .../supported_brands/llamalab_automate.png | Bin 0 -> 7995 bytes 2 files changed, 48 insertions(+) create mode 100644 source/_components/notify.llamalab_automate.markdown create mode 100644 source/images/supported_brands/llamalab_automate.png diff --git a/source/_components/notify.llamalab_automate.markdown b/source/_components/notify.llamalab_automate.markdown new file mode 100644 index 00000000000..7b3ddf4e83c --- /dev/null +++ b/source/_components/notify.llamalab_automate.markdown @@ -0,0 +1,48 @@ +--- +layout: page +title: "LlamaLab Automate" +description: "Instructions how to add user notifications to Home Assistant." +date: 2016-08-21 13:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: llamalab_automate.png +ha_category: Notifications +ha_release: 0.27 +--- + + +The llamalab_automate platform uses Googles Cloud Messaging Services to push messages from Home Assistant to your Android device running the LlamaLab [Automate](https://llamalab.com/automate/) app. This can serve as an alternative to Tasker + AutoRemote. + +To add Automate to your installation, add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +notify: + name: NOTIFIER_NAME + platform: llamalab_automate + api_key: ABCDEFGHJKLMNOPQRSTUVXYZ + to: example@gmail.com +``` + +Configuration variables: + +- **name** (*Optional*): Setting the optional parameter `name` allows multiple notifiers to be created. The default value is `notify`. The notifier will bind to the service `notify.NOTIFIER_NAME`. +- **api_key** (*Required*): Enter the API key for Automate. Go to [https://llamalab.com/automate/cloud/](https://llamalab.com/automate/cloud/) and create a new API key / secret. +- **to** (*Required*): E-Mail address the Automate-Fiber is configured for. +- **device** (*Optional*): Name of the target device to receive the messages. + +Receiving cloud messages in Automate: + +1. Add a new flow +2. Insert block "Messaging -> Cloud message receive" +3. Insert block "Interface -> Toast show" +4. Connect OK from Flow beginning to IN of Cloud receive +5. Connect OK from Cloud receive to Toast show +6. Connect OK form Toast show to IN of Cloud receive +7. Tap Cloud receive and select the E-Mail account as setup in your configuration +8. Assign a variable name for the Payload +9. Tap Toast show and set the message value to the variable you've specified + +If you have multiple devices paired to one GMail account and want to control each instance of Automate individually, you can set the notifier to target a specific device. To determine your devices name, add a Cloud Message send block to your flow, tap it and scroll all the way to the bottom. Device names are case sensitive. \ No newline at end of file diff --git a/source/images/supported_brands/llamalab_automate.png b/source/images/supported_brands/llamalab_automate.png new file mode 100644 index 0000000000000000000000000000000000000000..5a79d5bccb4ce6bf34296a3f091d2556cfd93ce8 GIT binary patch literal 7995 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 Date: Sun, 21 Aug 2016 22:32:10 +0300 Subject: [PATCH 30/80] Remove note about root access from dht sensor (#805) This update is related to #2900 Signed-off-by: Roi Dayan --- source/_components/sensor.dht.markdown | 4 ---- 1 file changed, 4 deletions(-) diff --git a/source/_components/sensor.dht.markdown b/source/_components/sensor.dht.markdown index 0b4844c3b07..c37179513e1 100644 --- a/source/_components/sensor.dht.markdown +++ b/source/_components/sensor.dht.markdown @@ -42,7 +42,3 @@ Available conditions are only *temperature* and *humidity*. The name of the pin to which the sensor is connected has different names on different platforms. 'P8_11' for Beaglebone, '23' for Raspberry Pi. -

-As this requires access to the GPIO, you will need to run Home Assistant as root. -

- From 570ba75813d61da4f7eb57b1564996b4fa8a05f4 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Mon, 22 Aug 2016 08:59:44 +0200 Subject: [PATCH 31/80] Add logo --- source/images/supported_brands/logentries.png | Bin 0 -> 30122 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 source/images/supported_brands/logentries.png diff --git a/source/images/supported_brands/logentries.png b/source/images/supported_brands/logentries.png new file mode 100644 index 0000000000000000000000000000000000000000..88a0b5dc023e74418d350717f75224880ed53e16 GIT binary patch literal 30122 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 j|9}6V;edC=A|BKm2s7k+kgKD3}+=& literal 0 HcmV?d00001 From 79407140e133fe52a5bd28f89d3f213050804da0 Mon Sep 17 00:00:00 2001 From: Jesse Newland Date: Mon, 22 Aug 2016 08:35:26 -0500 Subject: [PATCH 32/80] Document zwave.rename_node (#818) --- source/getting-started/z-wave.markdown | 1 + 1 file changed, 1 insertion(+) diff --git a/source/getting-started/z-wave.markdown b/source/getting-started/z-wave.markdown index aa4534e5b38..8b24ce84de5 100644 --- a/source/getting-started/z-wave.markdown +++ b/source/getting-started/z-wave.markdown @@ -181,6 +181,7 @@ The Z-Wave component exposes seven services to help maintain the network. | remove_node | Put the zwave controller in exclusion mode. Allows one to remove a device from the zwave network.| | soft_reset | Tells the controller to do a "soft reset". This is not supposed to lose any data, but different controllers can behave differently to a "soft reset" command.| | test_network | Tells the controller to send no-op commands to each node and measure the time for a response. In theory, this can also bring back nodes which have been marked "presumed dead".| +| rename_node | Sets a node's name. Requires an `entity_id` and `name` field. | The soft_reset and heal_network commands can be used as part of an automation script to help keep a zwave network running relliably. For example: From c8fafbba06b05def072713a911788b8f2b45daac Mon Sep 17 00:00:00 2001 From: Carter Date: Wed, 24 Aug 2016 01:29:08 -0500 Subject: [PATCH 33/80] adds docs for state_pull_mode and relay_time (#803) * adds docs for state_pull_mode and relay_time * added defaults for new vars * reordered config vars --- source/_components/garage_door.rpi_gpio.markdown | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/source/_components/garage_door.rpi_gpio.markdown b/source/_components/garage_door.rpi_gpio.markdown index ecdae40cb0a..999df82fdc9 100644 --- a/source/_components/garage_door.rpi_gpio.markdown +++ b/source/_components/garage_door.rpi_gpio.markdown @@ -26,6 +26,8 @@ To enable Raspberry Pi Garage doors in your installation, add the following to y # Example configuration.yaml entry garage_door: platform: rpi_gpio + state_pull_mode: DOWN + relay_time: 1 doors: - relay_pin: 10 state_pin: 11 @@ -41,4 +43,6 @@ Configuration variables: - **name** (*Optional*): Name to use in the Frontend. - **relay_pin** (*Required*): The pin of your Raspberry Pi where the relay is connected. - **state_pin** (*Required*): The pin of your Raspberry Pi to retrieve the state. + - **state_pull_mode** (*Optional*): The direction the State pin is pulling. It can be UP or DOWN. Default is UP. + - **relay_time** (*Optional*): The time that the relay will be on for in seconds. Default is .2 seconds. From 1d639d9bd41413cf68e0096b7c249f1252d201d0 Mon Sep 17 00:00:00 2001 From: Robbie Trencheny Date: Wed, 24 Aug 2016 00:05:21 -0700 Subject: [PATCH 34/80] Capitalization fix on Pushover --- source/_components/notify.pushover.markdown | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/source/_components/notify.pushover.markdown b/source/_components/notify.pushover.markdown index 36d7c7e0076..bd447ea4823 100644 --- a/source/_components/notify.pushover.markdown +++ b/source/_components/notify.pushover.markdown @@ -1,7 +1,7 @@ --- layout: page -title: "PushOver" -description: "Instructions how to add user notifications to Home Assistant." +title: "Pushover" +description: "Instructions how to add Pushover notifications to Home Assistant." date: 2015-01-20 22:36 sidebar: true comments: false @@ -13,9 +13,9 @@ ha_release: pre 0.7 --- -The [PushOver service](https://pushover.net/) is a platform for the notify component. This allows components to send messages to the user using PushOver. +The [Pushover service](https://pushover.net/) is a platform for the notify component. This allows components to send messages to the user using Pushover. -To use PushOver notifications, add the following to your `configuration.yaml` file: +To use Pushover notifications, add the following to your `configuration.yaml` file: ```yaml # Example configuration.yaml entry @@ -32,7 +32,7 @@ Configuration variables: - **api_key** (*Required*): This parameter is optional but should be configured, in order to get an API key you should go to https://pushover.net and register a new application. - **user_key** (*Required*): To retrieve this value log into your account at https://pushover.net -This is a quote from the pushover website regarding free/open source apps: +This is a quote from the Pushover website regarding free/open source apps:
If you are creating a client-side library, application, or open source project that will be redistributed and installed by end-users, you may want to require each of your users to register their own application rather than including your own API token with the software. From 9981cd8e9872b62c1f6fcc8b78e681cbc940bd9e Mon Sep 17 00:00:00 2001 From: Tobie Booth Date: Wed, 24 Aug 2016 05:20:43 -0500 Subject: [PATCH 35/80] Add disarm_after_trigger documentation (#780) --- source/_components/alarm_control_panel.manual.markdown | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/source/_components/alarm_control_panel.manual.markdown b/source/_components/alarm_control_panel.manual.markdown index 3a4eb6a7902..d173d3f11a7 100644 --- a/source/_components/alarm_control_panel.manual.markdown +++ b/source/_components/alarm_control_panel.manual.markdown @@ -22,6 +22,7 @@ alarm_control_panel: code: PASSCODE pending_time: 60 trigger_time: 120 + disarm_after_trigger: true ``` Configuration variables: @@ -30,7 +31,7 @@ Configuration variables: - **code** (*Optional*): If defined, specifies a code to enable or disable the alarm in the frontend. - **pending_time** (*Optional*): The time in seconds of the pending time before arming the alarm. Default is 60 seconds. - **trigger_time** (*Optional*): The time in seconds of the trigger time in which the alarm is firing. Default is 120 seconds. - +- **disarm_after_trigger** (*Optional*): If true, the alarm will automatically disarm after it has been triggered instead of returning to the previous state. ## {% linkable_title Examples %} From 17fca881aca79e57374f28e9118c3c2877688f51 Mon Sep 17 00:00:00 2001 From: John Arild Berentsen Date: Wed, 24 Aug 2016 14:48:39 +0200 Subject: [PATCH 36/80] Add zwave cover info (#826) * Add zwave cover info * Wrong filename * add rpi_gpio to cover * Add homematic to cover * Wrong date and Ha version * add rfxtrx to cover * Deprecated warning for garage_door * Deprecated warning for rollershutter --- source/_components/cover.homematic.markdown | 19 ++++++ source/_components/cover.rfxtrx.markdown | 68 +++++++++++++++++++++ source/_components/cover.rpi_gpio.markdown | 48 +++++++++++++++ source/_components/cover.zwave.markdown | 16 +++++ source/_components/garage_door.markdown | 1 + source/_components/rollershutter.markdown | 2 + 6 files changed, 154 insertions(+) create mode 100644 source/_components/cover.homematic.markdown create mode 100644 source/_components/cover.rfxtrx.markdown create mode 100644 source/_components/cover.rpi_gpio.markdown create mode 100644 source/_components/cover.zwave.markdown diff --git a/source/_components/cover.homematic.markdown b/source/_components/cover.homematic.markdown new file mode 100644 index 00000000000..9ac3fa4aca9 --- /dev/null +++ b/source/_components/cover.homematic.markdown @@ -0,0 +1,19 @@ +--- +layout: page +title: "Homematic Cover" +description: "Instructions how to integrate Homematic covers within Home Assistant." +date: 2016-08-24 14:25 +sidebar: true +comments: false +sharing: true +footer: true +logo: homematic.png +ha_category: Cover +ha_release: 0.27 +ha_iot_class: "Local Push" +--- + + +The `homematic` cover platform lets you control [Homematic](http://www.homematic.com/) covers such as rollershutters through Home Assistant. + +Devices will be configured automatically. Please refer to the [component](/components/homematic/) configuration on how to setup Homematic. diff --git a/source/_components/cover.rfxtrx.markdown b/source/_components/cover.rfxtrx.markdown new file mode 100644 index 00000000000..0a8b3b8180b --- /dev/null +++ b/source/_components/cover.rfxtrx.markdown @@ -0,0 +1,68 @@ +--- +layout: page +title: "RFXtrx Cover" +description: "Instructions how to integrate RFXtrx covers into Home Assistant." +date: 2016-08-24 14:30 +sidebar: true +comments: false +sharing: true +footer: true +logo: rfxtrx.png +ha_category: Cover +ha_release: 0.27 +--- + +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/). + +### {% linkable_title Configuration %} + +##### Siemens/LightwaveRF +The easiest way to find your roller shutters is to add this to your `configuration.yaml`: + +```yaml +cover: + platform: rfxtrx + automatic_add: True +``` + +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. +Then you should update your configuration to: + +```yaml +cover: + platform: rfxtrx + devices: + 0b11000102ef9f210010f70: + name: device_name +``` + +##### RFY +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 +Example configuration: + +```yaml +# Example configuration.yaml entry +cover: + platform: rfxtrx + automatic_add: False + signal_repetitions: 2 + devices: + 0b1100ce3213c7f210010f70: # Siemens/LightwaveRF + name: Bedroom Shutter + 070a00000a000101: # RFY + name: Bathroom Shutter +``` + +Configuration variables: + +- **devices** (*Required*): A list of devices with their name to use in the frontend. +- **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/cover.rpi_gpio.markdown b/source/_components/cover.rpi_gpio.markdown new file mode 100644 index 00000000000..86d58fe0213 --- /dev/null +++ b/source/_components/cover.rpi_gpio.markdown @@ -0,0 +1,48 @@ +--- +layout: page +title: "Raspberry Pi Cover" +description: "Instructions how to setup the Raspberry Pi covers within Home Assistant." +date: 2016-08-24 14:28 +sidebar: true +comments: false +sharing: true +footer: true +logo: raspberry-pi.png +ha_category: Cover +ha_release: 0.27 +--- + +The `rpi_gpio` cover platform allows you to use a Raspberry Pi to control your cover such as Garage doors. + +It uses two pins on the Raspberry Pi. +- The `state_pin` will detect if the cover is closed, and +- the `relay_pin` will trigger the cover to open or close. + +Although you do not need Andrews Hilliday's software controller when you run Home Assistant, he has written clear instructions on how to hook your garage door & sensors up to your Raspberry Pi, which can be found [here](https://github.com/andrewshilliday/garage-door-controller#hardware-setup). + +To enable Raspberry Pi Covers in your installation, add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +cover: + platform: rpi_gpio + state_pull_mode: DOWN + relay_time: 1 + covers: + - relay_pin: 10 + state_pin: 11 + name: 'Left door' + - relay_pin: 12 + state_pin: 13 + name: 'Right door' +``` + +Configuration variables: + +- **covers** array (*Required*): List of your doors. + - **name** (*Optional*): Name to use in the Frontend. + - **relay_pin** (*Required*): The pin of your Raspberry Pi where the relay is connected. + - **state_pin** (*Required*): The pin of your Raspberry Pi to retrieve the state. + - **state_pull_mode** (*Optional*): The direction the State pin is pulling. It can be UP or DOWN. Default is UP. + - **relay_time** (*Optional*): The time that the relay will be on for in seconds. Default is .2 seconds. + diff --git a/source/_components/cover.zwave.markdown b/source/_components/cover.zwave.markdown new file mode 100644 index 00000000000..33d724a85d5 --- /dev/null +++ b/source/_components/cover.zwave.markdown @@ -0,0 +1,16 @@ +--- +layout: page +title: "Z-Wave Cover" +description: "Instructions how to setup the Z-Wave binary sensors within Home Assistant." +date: 2016-08-24 14:15 +sidebar: true +comments: false +sharing: true +footer: true +logo: z-wave.png +ha_category: Cover +ha_release: 0.27 +--- + +Garage doors and Rollershuters are supported as Cover in Home Assistant. +To get your Z-Wave covers working with Home Assistant, follow the instructions for the general [Z-Wave component](/components/zwave/). diff --git a/source/_components/garage_door.markdown b/source/_components/garage_door.markdown index a52f22244a3..6c0944bf35d 100644 --- a/source/_components/garage_door.markdown +++ b/source/_components/garage_door.markdown @@ -8,5 +8,6 @@ comments: false sharing: true footer: true --- +**This component has been deprecated in favor of the "cover" component and will be removed in the future. Please use cover.** Home Assistant can give you an interface to control any garage door. diff --git a/source/_components/rollershutter.markdown b/source/_components/rollershutter.markdown index 1fe740d433c..1fdd7147505 100644 --- a/source/_components/rollershutter.markdown +++ b/source/_components/rollershutter.markdown @@ -9,4 +9,6 @@ sharing: true footer: true --- +**This component has been deprecated in favor of the "cover" component and will be removed in the future. Please use cover.** + Home Assistant can give you an interface to control any rollershutters. From ded32b4cba00f2c402f6ba2c4abc8295223bb943 Mon Sep 17 00:00:00 2001 From: John Arild Berentsen Date: Wed, 24 Aug 2016 14:57:30 +0200 Subject: [PATCH 37/80] Cover and climate warnings and updates (#829) * Add zwave cover info * Wrong filename * add rpi_gpio to cover * Add homematic to cover * Wrong date and Ha version * add rfxtrx to cover * Deprecated warning for garage_door * Deprecated warning for rollershutter * Add deprecated warning to hvac (#828) * Add deprecated warning to hvac * Add deprecated warning to thermostat --- source/_components/hvac.markdown | 2 ++ source/_components/thermostat.markdown | 2 ++ 2 files changed, 4 insertions(+) diff --git a/source/_components/hvac.markdown b/source/_components/hvac.markdown index c4a0d96f44e..c36a3fba84b 100644 --- a/source/_components/hvac.markdown +++ b/source/_components/hvac.markdown @@ -10,6 +10,8 @@ footer: true ha_release: 0.19 --- +**This component has been deprecated in favor of the "climate" component and will be removed in the future. Please use climate.** + The `hvac` component is built for the controlling and monitoring of HVAC (heating, ventilating, and air conditioning) devices. To enable this component, pick one of the platforms and add it to your `configuration.yaml`: diff --git a/source/_components/thermostat.markdown b/source/_components/thermostat.markdown index d003e41cfa5..4f54b712cee 100644 --- a/source/_components/thermostat.markdown +++ b/source/_components/thermostat.markdown @@ -9,6 +9,8 @@ sharing: true footer: true --- +**This component has been deprecated in favor of the "cover" component and will be removed in the future. Please use cover.** + Thermostats offer Home Assistant a peek into the current and target temperature in a house. Some thermostats will also offer an away mode that will lower use of heating/cooling.

From 0cddbc39f5293b0fda08d68222b4a287ece1c290 Mon Sep 17 00:00:00 2001 From: Open Home Automation Date: Wed, 24 Aug 2016 21:07:02 +0200 Subject: [PATCH 38/80] Added coumentation for MH-Z19 CO2 sensor and Bluetooth LE tracker (#827) * Added MH-Z19 CO2 sensor documentation * Minor fixes in MH-Z19 documentation Added Bluetooth Low-energy tracker documentation --- ...vice_tracker.bluetooth_le_tracker.markdown | 35 +++++++++++++++++++ source/_components/sensor.mhz19.markdown | 29 +++++++++++++++ 2 files changed, 64 insertions(+) create mode 100644 source/_components/device_tracker.bluetooth_le_tracker.markdown create mode 100644 source/_components/sensor.mhz19.markdown diff --git a/source/_components/device_tracker.bluetooth_le_tracker.markdown b/source/_components/device_tracker.bluetooth_le_tracker.markdown new file mode 100644 index 00000000000..c037525ba82 --- /dev/null +++ b/source/_components/device_tracker.bluetooth_le_tracker.markdown @@ -0,0 +1,35 @@ +--- +layout: page +title: "Bluetooth Tracker" +description: "Instructions for integrating bluetooth low-energy tracking within Home Assistant." +date: 2016-08-24 00:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: bluetooth.png +ha_category: Presence Detection +ha_iot_class: "Local Poll" +ha_release: 0.27 +--- + +This tracker discovers new devices on boot and in regular intervals and tracks bluetooth low-energy devices periodically based on interval_seconds value. It is not required to pair the devices with each other! +Devices discovered are stored with 'BLE_' as the prefix for device mac addresses in `known_devices.yaml`. + +

+Requires PyBluez. If you are on Raspbian, make sure you first install `bluetooth` and `libbluetooth-dev` by running `sudo apt install bluetooth libbluetooth-dev` +

+ +To use the Bluetooth tracker in your installation, add the following to your `configuration.yaml` file: + +```yaml +device_tracker: + platform: bluetooth_le_tracker +``` + +As some BT LE devices change their MAC address regularly, a new device is only discovered when it has been seen 5 times. +Some BTLE devices (e.g. fitness trackers) are only visible to the devices that they are paired with. In this case, the BTLE tracker won't see this device. + +BTLE tracking requires root privileges. + +For additional configuration variables check the [Device tracker page](/components/device_tracker/). diff --git a/source/_components/sensor.mhz19.markdown b/source/_components/sensor.mhz19.markdown new file mode 100644 index 00000000000..027ada3ee2b --- /dev/null +++ b/source/_components/sensor.mhz19.markdown @@ -0,0 +1,29 @@ +--- +layout: page +title: "MH-Z19 CO2 Sensor" +description: "Instructions on how to integrate the MH-Z19 CO2 sensor with Home Assistant." +date: 2016-08-24 00:00 +sidebar: true +comments: false +sharing: true +footer: true +ha_category: sensor +ha_release: 0.27 +--- + +The MH-Z19 is a small nondispersive infrared sensor that can measure CO2 sensors. High CO2 levels can lead to drowsiness, poor concentration, loss of attention or increased heart rate. Outside CO2 levels are usually between 250 and 350ppm, but inside levels can reach between 1000 and 5000 ppm. High CO2 levels indicate that you should increase ventilation. + +Check out the [Open Home Automation web site](https://www.open-homeautomation.com/2016/08/24/monitor-co2-levels-in-your-house/) for a quick guide how to connect the sensor to your PC or Raspberry Pi. + +To use this sensor in your installation, add the following to your `configuration.yaml` file: + +```yaml +sensor: + - platform: mhz19 + serial_device: /dev/tty.SLAB_USBtoUART + name: CO2 +``` + +- **serial_device** (*Required*): The serial port to use. On *nix systems, it can often be identified by `$ ls /dev/tty*` +- **name** (*Optional*): The name displayed in the frontend. + From 45c3c6e5ba7c9d7f8cd66c28c4ef85f141d35b55 Mon Sep 17 00:00:00 2001 From: Teagan Glenn Date: Thu, 25 Aug 2016 14:07:21 -0600 Subject: [PATCH 39/80] Add my configuration (#833) --- .../configuration_yaml_by_teagan42.markdown | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 source/_cookbook/configuration_yaml_by_teagan42.markdown diff --git a/source/_cookbook/configuration_yaml_by_teagan42.markdown b/source/_cookbook/configuration_yaml_by_teagan42.markdown new file mode 100644 index 00000000000..1440f63f1c3 --- /dev/null +++ b/source/_cookbook/configuration_yaml_by_teagan42.markdown @@ -0,0 +1,12 @@ +--- +layout: page +title: "Configuration.yaml by Teagan42" +description: "" +date: 2016-08-24 23:00 +sidebar: true +comments: false +sharing: true +footer: true +ha_category: Example configuration.yaml +ha_external_link: https://github.com/Teagan42/HomeAssistantConfig +--- From 01c2c04f8299054a56378cbe7d494be05279548d Mon Sep 17 00:00:00 2001 From: Pascal Vizeli Date: Fri, 26 Aug 2016 11:46:33 +0200 Subject: [PATCH 40/80] Ffmpeg (#835) * Create binary_sensor.ffmpeg.markdown * Update binary_sensor.ffmpeg.markdown * Update binary_sensor.ffmpeg.markdown * Update binary_sensor.ffmpeg.markdown * Update binary_sensor.ffmpeg.markdown * Update binary_sensor.ffmpeg.markdown * Update binary_sensor.ffmpeg.markdown * Update binary_sensor.ffmpeg.markdown * Update binary_sensor.ffmpeg.markdown * Update binary_sensor.ffmpeg.markdown --- .../_components/binary_sensor.ffmpeg.markdown | 93 +++++++++++++++++++ 1 file changed, 93 insertions(+) create mode 100644 source/_components/binary_sensor.ffmpeg.markdown diff --git a/source/_components/binary_sensor.ffmpeg.markdown b/source/_components/binary_sensor.ffmpeg.markdown new file mode 100644 index 00000000000..0233cafe5b0 --- /dev/null +++ b/source/_components/binary_sensor.ffmpeg.markdown @@ -0,0 +1,93 @@ +--- +layout: page +title: "FFmpeg Binary Sensor" +description: "Instructions how to integrate a varius ffmpeg based binary sensor" +date: 2016-08-25 08:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: ffmpeg.png +ha_category: Binary Sensor +ha_release: 0.27 +--- + + +The `ffmpeg` platform allows you to use every video or audio feed with [FFmpeg](http://www.ffmpeg.org/) as varius sensors in Home Assistant. Avilable are: **noise**, **motion**. If ffmpeg process is brocken, sensor going to unavilable. It exists a service to restart a instance with *binary_sensor.ffmpeg_restart*. + +

+You need a ffmpeg binary in your system path. On debain 8 you can install it from backports. If you want HW support on raspberry you need self build from source. Windows binary are avilable on ffmpeg homepage. +

+ +### {% linkable_title Noise %} + +To enable your FFmpeg with noise detection in your installation, add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +camera: + - platform: ffmpeg + tool: noise + input: FFMPEG_SUPPORTED_INPUT + name: FFmpeg Noise + ffmpeg_bin: /usr/bin/ffmpeg + peak: -30 + duration: 1 + reset: 20 +``` + +Configuration variables: + +- **input** (*Required*): A ffmpeg compatible input file, stream or feed. +- **tool** (*Required*): is fix set to 'noise'. +- **name** (*Optional*): This parameter allows you to override the name of your camera. +- **ffmpeg_bin** (*Optional*): Default 'ffmpeg'. +- **peak** (*Optional*): Default -30. A peak of dB to detect it as noise. 0 is very loud and -100 is low. +- **duration** (*Optional*): Default 1 seconds. How long need the noise over the peak to trigger the state. +- **reset** (*Optional*): Default 20 seconds. The time to reset the state after none new noise is over the peak. +- **extra_arguments** (*Optional*): Extra option they will pass to ffmpeg. i.e. audio frequence filtering. +- **output** (*Optional*): Allow you to send the audio output of this sensor to a icecast server or other ffmpeg supported output. i.e. to stream with sonos after state is trigger. + +For playing with values: +```bash +ffmpeg -i YOUR_INPUT -vn -filter:a silencedetect=n=-30dB:d=1 -f null - +``` + +### {% linkable_title Motion %} + +FFmpeg don't have a motion detection filter so it use a scene filter to detect a new scene/motion. In fact you can set how big a object or size of image they need change to detect a motion. The option 'changes' is the percent value of change between frames. You can add a denoice filter to video if you want a realy small value for 'changes'. + +To enable your FFmpeg with motion detection in your installation, add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +camera: + - platform: ffmpeg + tool: motion + input: FFMPEG_SUPPORTED_INPUT + name: FFmpeg Motion + ffmpeg_bin: /usr/bin/ffmpeg + changes: 10 + reset: 20 + # group feature / default not in use + repeat: 0 + repeat_time: 0 + +``` + +Configuration variables: + +- **input** (*Required*): A ffmpeg compatible input file, stream or feed. +- **tool** (*Required*): is fix set to 'motion'. +- **name** (*Optional*): This parameter allows you to override the name of your camera. +- **ffmpeg_bin** (*Optional*): Default 'ffmpeg'. +- **changes** (*Optional*): Default 10 percent. A lower value is more sensitive. I use 4 / 3.5 on my cameras. It describe how mutch of two frames need to change to detect it as motion. See on descripton. +- **reset** (*Optional*): Default 20 seconds. The time to reset the state after none new motion is detect. +- **repeat** (*Optional*): Default 0 repeats (deactivate). How many motion need to detect in *repeat_time* to trigger a motion. +- **repeat_time** (*Optional*): Default 0 seconds (deactivate). The time to repeats befor it trigger a motion. +- **extra_arguments** (*Optional*): Extra option they will pass to ffmpeg. i.e. video denoise filtering. + +For playing with values (changes/100 is the scene value on ffmpeg): +```bash +ffmpeg -i YOUR_INPUT -an -filter:v select=gt(scene\,0.1) -f framemd5 - +``` From 3fe78669d97dee28d6d665738cc7ddb5f0c772a4 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Fri, 26 Aug 2016 09:54:49 +0200 Subject: [PATCH 41/80] Add new contributors --- source/developers/credits.markdown | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/source/developers/credits.markdown b/source/developers/credits.markdown index 621f28baeb0..c19bd02bb86 100644 --- a/source/developers/credits.markdown +++ b/source/developers/credits.markdown @@ -53,6 +53,7 @@ This page contains a list of people who have contributed in one way or another t - [coteyr](https://github.com/coteyr/) - [Dale Higgs](https://github.com/dale3h) - [Dan Cinnamon](https://github.com/Cinntax) +- [Dan Ford](https://github.com/dpford) - [Daniel Høyer Iversen](https://github.com/danielhiversen) - [Daniel J. Kemp](https://github.com/danieljkemp/) - [Daniel Matuschek](https://github.com/usul27) @@ -118,6 +119,7 @@ This page contains a list of people who have contributed in one way or another t - [joopert](https://github.com/joopert) - [Joseph Hughes](https://github.com/joshughes) - [Joseph Piron](https://github.com/eagleamon) +- [Josh Nichols](https://github.com/technicalpickles) - [Josh Wright](https://github.com/JshWright/) - [Juggels](https://github.com/Juggels) - [Julien Danjou](https://github.com/jd) @@ -156,6 +158,7 @@ This page contains a list of people who have contributed in one way or another t - [Nicolas Graziano](https://github.com/ngraziano) - [Nils Uliczka](https://github.com/darookee) - [Nolan Gilley](https://github.com/nkgilley) +- [Nuno Sousa](https://github.com/nunofgs) - [Oliver van Porten](https://github.com/mcdeck) - [open-homeautomation](https://github.com/open-homeautomation) - [Øystein Hansen](https://github.com/oeysteinhansen) @@ -190,6 +193,7 @@ This page contains a list of people who have contributed in one way or another t - [Theodor Lindquist](https://github.com/theolind) - [tilutza](https://github.com/tilutza) - [Tim Harton](https://github.com/timharton) +- [Tobie Booth](https://github.com/tobiebooth) - [toddeye](https://github.com/toddeye) - [Tom Duijf](https://github.com/tomduijf) - [trollkarlen](https://github.com/trollkarlen) From 8798cda473d919f2e9e7511762b1e592d272b559 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Fri, 26 Aug 2016 11:42:22 +0200 Subject: [PATCH 42/80] Add WUnderground logo --- source/images/supported_brands/wunderground.png | Bin 0 -> 61460 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 source/images/supported_brands/wunderground.png diff --git a/source/images/supported_brands/wunderground.png b/source/images/supported_brands/wunderground.png new file mode 100644 index 0000000000000000000000000000000000000000..66fba240e6da6b614397875ed17ded9a1a380bef GIT binary patch literal 61460 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
$TVfnLlG5L+-%q0hpV`G;kfkzZq88FZdp!kGS!B z#Z-%B_TYC!^R-T&2!T)|pL@QCgdNW6>Q`h$?z-NdRSLRMkfCh%AXPWTt)LG>4gFi<`pGPC{K$t3KxEM#3xZOpQNyenF?-P|XPod@Ai zGRd3)h;*0rqOYNLLV}PiXtV(26PHHvT)pq5DY15NO_s~!l$-Fo zR{LJ47$iq;8ylp>PH9d88efPs;4qU)}yMpV030m~nsMi|HAn=#GsVWNJOBhr)m zvk@Yr3JG$jE3aC07vwv=$;(-TMK+LcwWM_TY(5()SKRke!fDQK$t5k zo{OJY`i^T9sThfd4o@2mK4!(y!8?3Rhy5ORJB)bxKcEo@>0^Q_2$3XOAkH!+WR8+b z9aIlZ@YgX5xaHKD6{v{S`)S@qn1JC6%34rs7Suqm4@1z60t@zV)}7P{1$%ZMnrjEb z{XTn)n;K;t$e#i?ubko=8_>M-wwY#UP#ZL>_k4A#*`Df~w#BmlcaX$eln5*-a)3%` zk#@|oiVS4GG9>MJY%O8_%5B`JmGVJY1GcAXY$CN2w9y1nKZxl>^KGV zs$8xe56f?rqh^;`ivn%A71b;`v7Pr)$eCZ$>!4jtxHURHj3_|j>Q5Mbvfg20VMI{{s95T91T*Q{9^nmdPk=CT*JY=fT3MRcy)I`Iojhg@EU|0`VxA`V zFD~xrv$F64Wr(l<68gVkb#;?JISN%xXVl?---mWAaPaGV|B|9v{SKWSvzbylEqk~I z09gLAT^3+^T*vsewBZcL%89|xL{%3Hz1#0Ylff-FPRl~K*#o!79TL(3HU6;sh*daS zQAF}&Dw#9uo`RSucy8O?f}N zSJX_sS$tjBJ!29E*qWgnKt_rW7kn%B&owVs6^pYv~`p z9Wu(Qp0X%`2lm)m7(HU?Y*?d1Xt2yPrMYWp%`5Wm&EYr!k|XVJc8*z71A1S=*xRcp zy1Pl?CAT>=ca(rhm>A;felmG);VeRlCocNCk}5v;GE~7zwZiHBt-kNO<<8DUwrhhy zm{=e25Rj=~)B#hJ*)I27D(ry97Pe8{6eoES{@$VxmOVTg^L<2(zVvLcDIGFd6=o~G zRbriaN+X1N;z}s~-~dUPoJRw<{HlZ=Vf{^>Y~t@~4xGDaoItYXmYphH$u}9==+Q|+ z=>SXAa*mRwU#$sIa&H-S&QKj4lqg;_j=D!N&%1Aj(Az{e4I zKC@rojb&DA?^@Q^Jrg)-+&be!?}v=(NKU*D>A2I-@PL8j1Ny%wRO{1~#q?5$&F1|DJ23 z`S4mC2Da=wS?w1L*WQpWnbR*|R4x##J6y+~MGiup%kck=u`2Ce`jO`XEV1nr*mo5V zf}oD%#J$%=uE8)VQ?`BiQfl#!sc zBMLLH=-_#qsZocYScRWs*RR)2zP6E9^8%vL;NImXmxb1CE%Hnr<@>6qdOH?ZnGbl~ z_~sg_0N(Y-g={k2cW#XZp++hlpUg}T46V$orzDs$2FeJG+;6VDN41b6`Tmy5)j-8P z-=mp*d`W7s=ww+|R|{(?4>?Ikitzv4Z^B_3_1c}@-{jt(x|SBTF3KPXe+@|%q)sKx z>}395fIEBR6Mm+{*UB0-R2Z2g)&~I+CD!fL+CvYKH3e)juYK}psR)~Pd3Px@_p4TJ zr#H-+gvEy2&T4J%%m@J7;=UeOPZk~y%Lav-{_Zq0>gvt|g9t#>70$Y3%i`2w=3c?G zo`|#B^%xs$!Z_!P1pcUfG#G5TY6O;uNuGvu60E@ndI#cyrke6sO#zi z)AxtD`TbEz(byj|UlW^hjhyH)`up19FV#5ONhkt&P)4$JvMr1~l0uW*$k)+uT4O&(0k`DyDQok!V~*9cDS5s`|4R&tcx#^D zdVaW*sjEipkZ$HOoAC5WyXZ-fVzlE7$;&j9{n_~ja^gh+P4)y4Q<`aLY4x@W35P2xMCR5^ta%Kr3riLyP4eSu#ajw zRDFJ|zSA#2178x2TUTkp2Gvi!X;r1>L&&6a9K4OmV5E*$@^ZK(s*JEKDhnd6TR z%s;be$PR2MJZti1rmhKIt#4TMu2+(duPk^1gZ!LPbM>x)7g*p)(t=p@{+TlID7N3i zMWfaq2`T}Fyzojzr;zQUsth95OfJ5Da0Gx_ce;6fpj@vu`3wE8*J|V zoSc#E_lRV?jM({C1Yvx^#l2P<@FaHB0g@7uvL!Km*s}V28?Ph_!$-Mgd3?&YcQQ3+ zJ8^`dY$z90SVyZhKU8t!l%THA`B;4fRSl>Th3K$Tvc2S!>>3)G)@K1VY;yP? zS_m>H26H77GUR%e5ALl9$OnWc5AcIWF;DK8`Yz|Ynm;>9M7=Z44(^cC{CbWVBpa5U zP31+h5~Y6(du7@EkB>)^lt&6D{YVdZLa0s5TwBONxd_P}+XU|w;;(#U7?>9ZRT_HC z_UV%5ub)@P#zz90?z)q$aT*$%%+>Y1LSM5jaoq0}>(=|Q;JHtM z_udyX6$rL6sI5H^hZwv2#41%Xo+{jBMc`*k7^h7S`pe2X0iq-hDh|!0$9a9flbxC6 za8W|OLPLIp^}2LDX{G6m%Ao7IPwnPE_EK!1T3THfavG3>T?J|$cwbFUV#2m>I{{M5 z^Hi^|o_naH19F+rn{$z-fbZtn`mB?%(V;W3K-rF~Y7eC;cK*bQcvk7&#rW3eCxnK4 z3TDCprT-`}y&t}HD+oecTVkC=OaD-cTm-a}zU^>29)~`slTVcXW+(RG!?hxwQe4m! za_F7B6F#O(ZbP&GiJttic>`!!X#eB-FM;M%`z;mgg`J4Da|yarb<`>J00l^ek1*rj`78a?e$5kP`wH;^Q~6jXd7OF9iQ%K;koj z2E~o?MfbnMR(mBplVb*yfCIZE4#mG4_eKj^(!HinBzup{GrfbT&O3UizX$7orf@vY=1jWWGt(RKUy{^;yl?_Jl3=%8I{WoAe2c6M3kczK^_q zo?xaz?qYd|P!c-2N6o%UC|)98`Md0x{az4(sw)AePfcDCf}@5THX|`_Qv^(b5 zXwqUNLMmIjPJ9AILra!7%29J@VmHuXRh^LS)BnqFpg8B;T(*5xS>*6AUyq82A5)1t zn_+*IF!ohBaZ?~_oW)$h!6%b#%UJ^N8Io*PiKme0WGZ>SUvb@mx;~F&RS;VS3j?kg zBi5k-YS1da!v8>Rv!SP>(??wvlrivn`%GGAq8HbFMTADR)ST2hx#nV`1E-JUS2tz) zIdc7v%qd<(C;ipSu-cgzk-ht^aurlk9=$yBecyis$T65xEPxPwuV~7MLzZgcDB(Db zEOi@{ip?Sd1S%-zYu)eQ+Q`+zJa2aldqgBR&=CT99@EWIz&7ebN(49b>H*mN6E*TW z%?8e3gp1@$DH0@|EGhrO5GUjt&3+ zWAz{nqbv3vjDa-Zq27q9C+}0FZq_T8N@?lCTOmhFn0B|CB}uhz1aWj| zoX}{2zUDFLtJvZHr)_c32unzHp_a?5bn=xW>@Qm;9^Ks5pJRTvBQ62jng<58UDTje zsx`x*Zog}QeYbxl4C(he75`SYYkkkC)>zswr(SFCX9f;&Z&j4Tjs0+DO?5ht?Z-{O zy*dQb8~s3Gfq_ZeTGKVyvk)J#yekikU3XvhO~(Cr#3>;XCtocC3{Gv8q%E8qwojd#`TwZu@ zRfGE;{?$|KuV09%;>6?fnF@q7R9mu8)QJAiL*%KPqp@G^=QG*9J67B#G+lf(FLbRq zjV{T&`GH0K7s`b)>HBoWlwYrRTC?;AWEG_?K%`;8cKbqVTa?W?D;om;f$E9*qEh5q z<|5-;x6e7po_e+$&Y`wYyI%Acz01cp2$l$Y{}|?>Nfe_XkQc^#2aHTQtDyLdiL z&rlD2RqaQ3#!lN;F&V@lM|m`dpx}h0x?uc_%QL8N1PI3A{^W=LWo%0LCqp76hpRtl zl&}kEQx0v%oWUN9?IZqr8~b0ci&BOsGn#$9UXqJp+bPDOQ)~C!KvzEdAzBd$Y=$(v z@PUO<)&*l7`2Cuf)BC@(Blb0#)lt-a@7;td+aGTaX~K0RvrtUrWLT6o%AVh;Zivu zkFm`Bb6@a#>ncU@fkDV)-}BJzl)?~T^mPsfkFHmdD!=fV`so)-x7U4UX7=F`L*9v2 z#S&_T5lJoCdg8SOT}`UYuHsN`e(&3|NS&QD1dXI6%JWL(CQn^(KoGTEH4?TpW0%YP zIKkk=xHB}OQQwF&LqAIGk%Mvq)6`32Z-_nqPKB(^nywZAAXZKpSLYai?2-BY&72jo zGO2nPcQgz1r5>*K)#*H;5;quYJCEvVWs$ZobDCujznyj2o3Hv=94YmB%fyLa6u*}^ z&OGXisB8BqGJ=-Yi%y9yJnCF#{k*K_Gh;Z_ICi{DswisYGiPl}$ETU5^cE}>n6|<= zZCu2*{hj^QfjL%9_A-{(HFOmi^Xm%oS`~Q~$1Ge>Tb`{3$t~{3OczH68d`cTYl;Uisc^)Ge9(5KD<(ft6~|msi?* zV-3nk0eQC?KSN3i*S88Gz+~C|Z&T%H!>943=iV+ee%{EG;Ai-5Qi4rie>UYS3i1z^ z)UwAgbx?a3;0kYDceHW!9vsX6=_~r9O7D5rIA(wK3j43&oYlb}zjk>_mJEr_T z@uR6*A=|6RqN@Mihif(M7QguQBdS>e9y9N!Q4TJ}7G7cY63HUUi$U?*f6tDUIv%Xe z_JfxXKcI+qG02BP)slzl=@{pKoABHjIif!TN3%j^nXC4SPXyIieq9@81j@eEp&3Pii+6%*Xb3 zxy;3SFY0&mZV;H7z}U;BQg9q5^nb+mP`ApHU6d}eqCbH9T?pQxsu!AOzP*XJOMK}T zAbvhnUs-YCXei$t89wYP&Wy((8X$HlM?|I6=@4!1m1M?3h7HXx3#U8OX09g zMS#A8`7)T5!zpf~7A9;Vqxv$>Ccr5XTlh?5KBReT{SBt3ysH>Iup@^Q3BB4?G!9pd zD8da#G4tfvaOdTG#kKTxGUj`^lZWs;If${l9W`rPgz>d#@m}kQ7BiHsPMp)>TbW9Gn)(>{rsY zfrJ$#@TIvFW!qyI!M_egMG;6ZP$i z`jdd5-*Be#v-jfq+O}BO_F7KBr>tP?Nh&8Bj(R4rf@X&6LWtO=c+Wz$jmlAhVEk93 zRO2DACi~j*9(JLNBTk!hJg4?c=fRX_WA7ViBhKT6d2+>%QC55AOg6M$D{gIm{+9KQ z?6X02V~U#rdA~odNrsl2#&~|kE0ejw`|8+9;APKT-xbN;d$NsxD>oXhT1(}BGy4$7 zzItnWm7{NM1&d}HSRkS!@t*1>7Z4ry@dSb|mFzw|m;+3+nEzCHQJ2~&Zq2BQ! z1{L>@(Ru2nE{8Cqs1}Lh?WAh@Z_wE8!2h0N97@XmNS#X$OvfqPztHy`&!b)6;=*w^ z8sFbtRiI}f`FrbjNX$f6SMEu>ekU>+{LCIRUqn0IZ1mSt66!pf(zjNFD~M|)qQzT3 z8AybQm*QZF=bfslKPm!c+2axxy@%G7qGTH%5L?$~dlo5=`F8A|n$ za)}i9(I4XD=Jec$;wuENipOaRA$Kb|(0)CTEZ3;ez(s|Q_~NT~^lUW%sJrpM_<@%T z?$YDiYuw5p#dNhNVU%8en};;Zol!JJi4PlkvkD0Tn)Ehq;#(v41-6MWc-!b74rK*V zJ`#-^dzAEj&QgP*C(k47Pkf^Ubcdbieo-~vP#$yQSTtbVV$M7yUZVF+fPDX9N+2iW zxWu~V=#L#2HnBQ14Q>%0XnBl)T1xTP2=`zF;Kg|nEvELu9y#ri98Rg#$VT<%kjm!! zIpC&q8W@&yt7kuyf&?AS)Grl1c3ycTfBB5;j{cya3fjj2ZSnartc8c$B10f@`Iq8E zntTiDs14)-UmZ5`CitE1_zGFYWZ=Z@x=!+d{60?)ok*?$kg@IyaHBRM&Km>RR0hz7 zJ4E>y&c`!@lBkm*FXl^AwXS<#pXs?7s!S4!ZN4x8xDkyXL6R6fE3CQe z`Z(Mntt%B>2L0*kAX|uUKfM5ihyJ&Ai{)0D%4C|C$Fl0giizu2OeVimb)T9yiPN+~>3+ z{H~CUy$t+|l5@j;x~PmbA5^!l)hHLQP6+)-N60mT;szEvE(?m4ns?uSlPPksdq3`r zx8{)9yj0EajSifAr*B?jZM}OhYOe7gGb;1HVK~n`5Hn!uXO#rfzXgtGR)FmpqXVq4 zal5GtS9O&Tr$heS%wvziK#u`%l`oB;hf!w%14ZgIluTBHfHZ#kW;?$kDMR5etNIu~ z3B;BEx|an3Y2_JNNxc4hRF5-NUG`f*aCNyy*SC_sddDpz`oczIl?3!Bluq)3GUP@= z9C7vj6xNi}jy9Qo5dDZ)!%Sj>$Di_`#FFhUE>i0Uv4nOiPKVtkF9l!4O(!5lD}K`~ z5P_6DnC>*JIhzQ&+#NXqYE_^j`>l6)LhJ#|Xt^@BAcI#G+(7>R@F^K*RdIixxa9u| z&!~vA^uL%FlQ|1|bH!{5d6M+9_3?BB*+@sU-XPx9^3OC~1j&Ge6gD-v-6;!^r#`vL zUsmtZa`P#lZ%-e9g!6^{*vJ#-cJ{ec3>pac>Nm58j+6kLH8L78Qu&m zWcL4QA!kp+w3!*$T>J_X*YYcCH+XsB{`4ci?XIZ>wsXd9VxQ$?3AP{4Hl7x&Dn_9 z^dt2{vdd@RZ1?kK3MA#psJ;4i43bfHQ26a%EPD&f4g9hX%TbnhkuR_58@k(>(&1jN z?{=`B!tlg(wg%XW@?6#jSRf?pqo}Di0qJ|4MGyHuyp3Q!kM3K5eEa2_s?SaiOsq*+ zrp^Boc1dXjOkm`A1BKWkzbx2Yfq~K9p-v#?Ltc0w{YXGl`%ZVBm)CYo$`AP(nEV3* zZc?3EPe-fqat6YU-d*CKWmNckzr3>EKAv1!RwivtNhW)dNuj9hB2J3%rcletk39HO`^Ut{%W3ab z%@$ELx?OJFXYJFFidKpk*!Bz4S-El$A)`n5;(`@^`?qL~D5}>Wg%~jCXl&Z}LK*js zXloyyXq4^mQQAy8NCLa;NXL`jNZORc!*WY3n>2yP`CoTI1n>a)(!1&k)ob1lcut0Huy09*xdW8=In}fxe!D)KdytBtfY*@>Dt07 z@-rRkK0!>im*p8N8_sU)pRhyYydE}^22h50DoRmf{Clk|FspTsGO9~KW40;vi+!iv zmT6R0LHh*JyR5z=k^jR&`XdE2fY8jDa%$)LF|0*285DCiH#A9j4XeC`J#v0%Pd;7t z3|*>6P@JtVQZ1ln0U$A{NS+Mf01?8#EC6%Y`Ve>3vKQL0Yye*9U8U@MVz1zPl+Hw> zvIPRc?_~9xm2gpShW~dndDZSLMP=b03#5FR)JiCup9HxSesx3ahiYanN#}ZuDf%|L z77y>buh$P#*fzY|`XaT5n&ii=oW4NLfHV!8Om8Flj75H~bUrU3Y3EB5u$|~>Ctbia zr;*B%mDnl~LPrk~ser8wjAi>?Mw0lh8A(99jl@K5;E|HUuZ-?1!y(Tyqb3|HACnoO z*DGu+c%)Z#Mjq)7?>%KP8p?jb;rEEp#Es7GY4I4o{!c6^IZGc3n5r;)K*8(CDrjvj zos@{r;ZnTN{cU_E*9_babK1j&6h*M8F9Q`HK>BCsoyTC~$G2wQ9sBxPe9n11*$Qk6;NN+0kEip}|WhATUebFUDIXPRUDEs}5asOsIoF z>9!dCSH9;=@~+qeGjfOQpi~GHR6Dv~Vz`a-O!iK2lQ~wC+=3Q>5}J%C1HN9*=**vI zy41=ZC)p-1Z6f8nB;~cLXo}s+d}@Wy=+T`mM&r21FEn4` zz^k>$e<`2YwI0$LvPAaU`z>SxQ51T5doV=ICrM;H=vb(s?gH=qm^sm~J zQ7qI7`+tJbbob1FcVK%>aEm{u;

wM2fGDz1Ie%$Spf{7Tw>`8v{M&VF=hF?9+t> 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�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 BX84JA#Hy_V6qS z3Y|>6Q&1m(+tTR;e;Xc9cSZ_<{}4dSZ zz)Sb886&Z7Z}oY^tkUQFdg`X^FPpBr;sgJsKkXbZ{> zPnoW4{hv++)-=c-1Xri1+38mEcRh*wKQv~VbMU)jaebzlT(+mQ)-~{hYl>X@+O~cm zI6NygmU!+K-2X792lM=HNY6q5=SMP>sZUV`sIz*tD%uo&fQalYNWugTC#t_<#R=k% z401RnjQZT2S%HJ}WC$L&oEHf!LJxa>7F-sPI&YH_kQkOGQ`j%LuwPhsFJPhXQx@3H zW}n@pzdL9?lovbvdm+<)Sje$6kd*^y1LmujA_Zas{l%g=fXYrR7~_=pqGEJSkY;Up z0Y?lGSaKkq%z2VRqTqgHVL@QjZA`dye7-hR(_J>^{9P~S@7j=s+zaX6NeR)l4h!PQ z(DfT0N60!e(UckJU0U!rMtp{?c#{E>`E_c2hc8*ce3LgbNUu82b3YJ-52wY5y@V_y z&ofP5DgjOQ;qipIi}80g_2cFc_ahi3Hat;+!LH)D3c((H^@FssVo<;F{Sllr?aYZ# z5ifFfZz4(6t Z1^{a2-o25Gizom9002ovPDHLkV1k+vuATq@ literal 0 HcmV?d00001 From 9f6a3a26d626897ef166b5e387694dd67c910b8c Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Fri, 26 Aug 2016 11:42:46 +0200 Subject: [PATCH 43/80] Screenshots for blog post --- .../images/screenshots/config-validation.png | Bin 0 -> 54299 bytes source/images/screenshots/html5-notify.png | Bin 0 -> 173351 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 source/images/screenshots/config-validation.png create mode 100644 source/images/screenshots/html5-notify.png diff --git a/source/images/screenshots/config-validation.png b/source/images/screenshots/config-validation.png new file mode 100644 index 0000000000000000000000000000000000000000..e9c1fca703e63c5b97f4938f31aeb81c69119219 GIT binary patch literal 54299 zcmZ^}b9klAvNxPeG%+W(ZQHh;Ol+GIYhv5Bxsr)(+jdsWZ}#5Ld(L^U_k8P*b@km< zzpC!4?z-=;>Ig-733wQ67!VK;cqvIyWe^ZB$G`2Z?~s506PF^+KtNz>Ek#5Wr9?ys z6`kzOENx6dKqMoQQ=n8;EYXL1p5}1qh|s9=pSFa&;PdXOsfqG~QG^N0R^oe+abbyx z^S*O`FW4zV!x9rkgAFnStwJ?XR9x;2EGxSJOQ~!0c6+)II6nHAn)H3zydHm>dI1x} zH@bZ(uR{Z|?4lK_YsDd9rp^dJ1;zaZf~*LdGB|b62?_ZMCJMXUbG8qn9CcDNYg6n0 z_0c1pftouC2?8U^8Iw3FFY=6wa%s~|2n&LSB4{j!?w=xqTml^jipJ=uHfx5f!vs&%fx*LIR#5FH)%wT=QqLbE8#^*4XcCdlfNKEhuY;0hM%9CGk;<2 z>u~&9ptxn=+aKW5suE?It~HhSK(r$lNN&FR+KBn8Zc^RtV_AqNq=5DbjHkg{ZCp!o z5nuxDr9ja#rm|=V3`+^;)L$zS;7%F+oo8^J1;FyC!UUO{T9^rkb0)}y{@PK~I(kL?UWJbiW@{OX=2Mps4 zJn{+314Lmb)(4XiP7_4N5V8uS;jHSpx$&CSLE*R-)d4lJ0kdYLJi?sO)5cgNw7oo? z4W!ZB;gi8nfYrT)klT+bHKuBE7aF8)!-!rU_Sex55XnQjqoy_x#Tu{~r2%x9hGXZG zRR%bx1~O21N{}CUpe_N(j8IE|K-&mW-vU99U<&?F|ACYug#Z2ryAIR_;w2C10`yG? zs|;L1h>jCt>KD2Ls4nF4AG#T+s~`zMaPeLmMo|7h%kO~>NDu|WFmcpH5LkjoadZdZ zp2DAsjA#&p!VyS_D8e{-wu(fm;K@R2ig@?1F8CdAo4;Q3p=KCa5dcBme<;)7<_%3X zao7WFe`>5CB7|u4ML0lafgSgD?kKlm^Fwp=r|#<9_-cap1X3u0hzZXsSy7TC(T(B# z_!TKmmIq!YSN2U6x&nLgmz9WX;Z=cX*>c&m1#L#8Szh!Ef(3yKW=8aspuO<5XllOo z?Bogkz1}^e*S8NmkzUH5aEyVyt6B4xOGQ($vwsrg~ zls3$6d~OtvNG-_g0hhxuh7^vRS>L8Wj>BR9)H`Uk`D_SnNNtd9;B8P|q2>f@3})^F zZe~63`7sOv1p@4cw|jg3D4-U7*9P|%1_=<+lvt7D6t^JRApeb05-}%=S3ts)lqS0& zO-sg(REt7@x}7LV>Y9K@6+S>_OO%`-pIDO^DwR9RY~tI%!xc(PdQD6~;T}g2x2-~n zW*Z4hmXRQ~Dpp>oo6lS9laMEkDZ@y{iIPb+MwUT#CD|2EDrqIvAzhO&5lOXI0? z*Ni44tuv+Sa1U-Zz(n8F4 zkZ_PKGVDh!b+^8-&R$(GpvZ7EoeVMAkj%H(u=qh*BH1g6JXtLXko+Eu72BDJ9%f0i|@YK8M%YCQ>Ig^`}WD!Zou8mBjwG> zL((lAkQV53R(zFwqIS);YkLUT>g0#HjgWxFkv}QL+xho#_{cZAMqpdGxeK( zfB1m-v>o3u?H+%m^X}5M=Cb#c0r_qSc>(KzQihs_{A`WHPRUrtd*WHAbrZUCg=95y z7KchiAhId!9>xzd504t^8Y&Yy9K0N&Am$;8CKgUCN6aC<6{-AtPrO-tzo5U+x`0B% zqh_VYh;@jXT)@n*cxtSf#=c5fH@V|%&uVnBYSG-7sUEqW!laee>_#eQ&Ow%H!hOd16y1Ke+@n;DY>qUvBv%e| zB6j>*TBt&l9M5#(Zt+dWoZ8%S$rBL%`Nc;m)OYCfH*`R59y#imZu)A5n8<{DtfIzq zkOSvBRVVM;e8vr%`LcBFVfCd}X^-7-2L_iumq4vVt$FSBMqbO$^U&Ss8k|aYq0BvY zSG%Q^tX5B#sHc>*>Vax19shB*NxHF*IyxgAogAmFl&*M!F8{LW)DesWL_7Bt{TGr~ ziK|!u53L*S#x3BNibLZ}Q(e)`x%}f)ra=0K>g)VOO|TxIv)Y|tD`>NSouzKs)801T zMM-{kq}%i@BMNH}VvyjmcFVtTprPmvKRjgQ1 zVsZ_4KAHNN+7F*RmK>675aSRFr{<}_reUp-iaUru$^ZJU`CNaMYwKTAsZ>Q(_2QQ0 zuB(cpyRK%gqTw!lI&kIHrmrdB$9!b6O%F*MV#1 z^oP0`7d!4<-B})+G#MZx^p?uc?o%+m7ANFEzuP)=z0qcAEx%J^q9?h8B!w zimU@z*xqrkJD2?zVe_#qyhFV79>fnt2jz3~XWI{c_GnsB^a$Q?PrR_6j~2mvcW1E^ z0^Ko3e5Je$p82l@b`w4qeQnDg+v7hNBn)m1u?L9M4?^5TA>qJVg~`%vNry&10s-I`NVD)kwjs^UN_5Q3x)%xi z`9*yuhCS{1X{ZLi2+ElrZti-{tG<7#`9o3lL6nDC7RQ2se1ou5)pXI6ljSzHx26AS zVsB(h?_ulk_tO>xgx7=nZ`0P)Cw+A2bzd5-7w*S@5Kuq{=78h$iVofQ$jX+R(eKaei%YRLS82mGj3&3@qgfdpZJI^TwENu85rE%-Ra#~=g7gThY?P z)J99x($>_@`R~y9nHV`(dH=2F{~`VNNdE^^^S_~7Tpa%s`9CQC1NpC^a4R@jn*O!Y zzih$J#LMvi^!>xn%kVEl{SU+a$1DHt{p%Kf7+!||axp*5x(=Hf2#6qvl&FxZ2k3<_ zv=5rt64dSbZlSJX=m}J zJtNBo&v4ta>V1#)t(6*HKal-;owFLRpR*nZh8rp>Dm?DoO`f2be4#?p;8b>lKGZtq zH3H9obh5gwc2lb`btjohOmne5(EF)AlBSnE9+Wc*Uy35)R?rU(5PL` z<+gtQH*M$#T#nF2-&7p>>h6i-L+1f=fWi2Pfo?Sxx629RT`J2fMu>jq#bw5TDJEP4>Oa1vM+1M)Y75&bqqOlKpOA`vxpf>Uumubv-+d?-U88at-9Tb-ohf@^YAU}|7a|NX+y zPwL}eTlxws(fwHfWy#+^dzOUfwkYN_!`0o^sB7_F{LQd0e}38X{iUlLky?i*^wbcu z#HJUYQ*tEtGKjm#loQMi1c9@&v9%(lh9N;)^y1=o2qRnyOZ-eEt^F^!)qfTz=hOFRE=Q23$;_)XPT!8pHH=u-n<`w- zWmd#%3i&K^Jq2QPUzlhFyI}9)DYh6Mpk-w0;c&OD+WP2Os5{xTnuaVoKRRE%ev9S2 zO?#jTu7mAFiJZ=XPK%8ae|tFTCx~Wf)n~Nl%NIM^E4sAgme_VcG)pX3(|%k<|6ugd zDL1ynjZd75CUi31hGA+ezp^{9)Y2#6pr^d9GF|4JdYNoEkgha|Jr@qs;K7eqK{_E- ztPbB4n-+|XGqVcod^_b*@a37#NBQnHIK))5u2AK0ugbWG1k>|wvAxacYW;2Tz|9+n zBi#DMZD&fGel*N|{ZZ(uOQ8>%C3Qaq(R4@G_(GH3ijQ#i#KF;-<`i^K1L7T5l4f2@HjR-b^Kb zZ0gWCCPUbOrEd{qsKxt6>?3`@oNwvnh&(qN@^x|Jq~K5W zpAfY(94puwkga2)TS_QY{3K%lZLXie&K=QQso-BQP=HYWb2zR03-QWnrT5mF?P`nI+T?*hJkP=kxuu|XQkcOU+zC=>$ zPQa+X!`cJqB9%st*L}Le{fq);!aO9>OyK`M*exPngHDssJBC{KnQf{IU-i zru~f^s?YO#-Pa%P7dQh=>Yr~(REc5~F_Y@kTAbz+3`*UL)^%A$K6}ih=WI@pXtLT? zskGXVsz{~BzCV+3(U3U!KaR0Bm%q0xZioKR@Ch`{@l$ zoMT^Hu>&2qXCKyW7B z@ubf6Jgfy{cs(6`jNWXrJK>!(JpZeV_JA8EowU1HX-)_m^@(vFbPw*P@*BYj-rO0R zbh257+YRQpt?KJ`0}NMz-4GD}AX5hlG5uWa(2o>$BCSi83@-8%I%?&^&a4^GJG9LM zq?Yqx`I+LjY^euef@Q)--rv@v7RseiMNdk}Dnv+J%xiyRq0Bcgv47rf0&ag}AgiTP zsf|{R?9X2i`;Ti-J?~SmTd&t=;XuONCg#K>lTiV3aem^cL;=TBBpDy0pL|%}ax;vJ za6myV8YzJrO^DUC!7uop9(aBokeBpTIgabWUUbObYW+uFa`7A&MvB`dFMd9CirhdN zy>{AxKere$jJNHjL&S8bs|`P>cYfa#pF9hlQ5_WHW+*^sbQe*a znP?0PapP*aKf~nvCUyVT!!T;W89UlU>o^Y>h?>1$q#iUsz7iLYSB^(^wuZM~4#f>Z zGt{FNo(^Vx$&S4r-nKoJn@saUaWvGe^X2?^{g% zzQG;hmHxWNs1hd}N+QSiE@Yii^x>3Eu#Z+IDI!koLwumybidH$C5Br2zRIYKEN)S( z40iI>R<>5>uA5L#Ef1dkZ*$?#5e`mv1USyhXk%#9)=dlmK7!Uvt;v1ls81FnL-z#= zhVY#jc|Vp5L+7{QJ-9Al4_=4o4#+bcuNz(8jUgQv zx;(%ueo2`NY_O_zn>uPk?g%fcq}KcZ>U`88SzJ3}z2-DSSz>iOxDuVo5I>qT*z0|z zhx+$6-qxQhw9U;*4aQNg8kqNyg#UKj*%D5ZPdX$FyyaC z=1RZQ7r&5VLEMK;BM6`nry6me)lMTIGg-3!^QCz24c_Orm!UoS0)BF2W9as#o;gyX zJuz)1`Cf>cSWO-J;`efN2M~v9652SqPkq{dBvEkSA=>nzuy1&--A?JVOXr0`lwG|m zn%nu>l571fge)R)9%RJZT0imKpidREAkbrnb_&Km3yoomH~tf5bjR0!G_l2S7?%30 zy5v2|F{^t0u`N*bj}0^C$!@@eI`FWH++geEex|eS{zq=?Qdd^ol*2_t=^O+iOTE|4 zz+x0gspf>6$ZA&_{`Yqy)|VzEAFqWl9?Dt@7}Gx+GgJ{;-@R{VVY|O8)krXZUvZ`6 zW$@cnjm}j4N#s|uPuwu)XX2auR8^?h@epwoh83Zc@}>&A3X#|KxxZIwO!NbrpXZ9t zA-qVYC2Z$$YII|jsN)eyIrRHE3o0n)kDfTOEOb<(9H~9VG_tqzhpPyJi`sgIr}y&i z9!!9_6pu(p0z2{^)*lw~8-+;nQTn1nMW4Gx@cmPbRwTIuTxAK2*T#MYaWAR=6C&;Y zNJ35;``+Tjqu%qiL1aeOYREaP0;2glTPhy z^g%4Pi<|%Ta1W%WKgI%Q?>EQBc|EpVvMSvdQlGj`_9M8vh9j_bN9JEy^Gf_4hYRI5 zu^H7TNIPd6<NHquNE2;A zzJL!y&ck3A(ou6k-#!juRv~GLkAqbrTDs`se@-+6B;N*}UTQK8qY#454>ug)JX^=? zt+y8BT<_?d=f!VH1Qm#eF<{4koTKZ|=?q5$Z8#lE9jYJQYa+j{A966X^*5$Z(J_R& zYip+bIlMG(ueK)#dAYG+HZ94oKzVb%e&&Sb@5}QO0)4y;$ygmLhsm|OxyCI%we|Kr z+8LuJmJ(;Y_FTL-@|rZqImpFX^4H`f4!#yzcP~nvBOea(knHPxj7bkamHNphh+}?n zXpTkCvyxN_BpwXvZELX8yMF@`q$njlqhEEIfFJf_00&KFdA4pl-uBe8b>{jctm^>vzdzF@kC>d&qi-?!NQcj`ii>9vf&3)WT zp%f!ZOAw5878RIoO+RVquDVoq^K7l{0=_Af-9jGU#^@XdA=V5BWF}okuJPIdQ5S>2 zC!_fP)~IIWzZW80-4C}WBW8U@!VAJQ##R(vgebxkZNk`PsTTmkS5|#{Y*72fq#>O^ zWb*Wujn`#?&2m({(7CWZhYRPU2SK+4&9Zy7=Tccoc3_9Z?H^1ePo!P&*&A7o*mp5W zbDeza*~BaOSMueK0NSM|(Paf(^>n`8|D5P=3IzpMA`;PTsjEEpG#bFm0xqAb z9X)fVeIm-E)ccB}8cil{nU?{GJsa6$3t~3|wRa{Z*Dam+`qu^x-sJHW_0Si{gMYqW1xV{u4KGSQVhnj>q?;~p7%>6k2o=K zG&evv*+b$1>EDqKJ|j-EC;5mDr*ixTTlFG8z7Dz1A5geShNBb+*hGKwzlMCgidp;U z$U;ZXwb0lB`>-8`VP=!|=J`erVQ|=Kw|s%_%{9~DYvE{S%9hGL(#cV(koJ7atfSB= zM!w;#U0?PJOgd4hlKy?rqzylKe=6-z(-};2Ss*GiKaW#;;kmv=!CBjXD8HgMK-+Vb zv)be5Z^s>qx{wZ*D)NCk3bFPtD*1c3fsaVp|C2u1k%$mPlizq5-c?Z3eP7FGguA#b zK`31+RvU+dyXt#gW_8tSqd>{Ar}Bei&a#K|w|Ur(of;}Uv032%bAOJwoht(fH*Wck z(8?!3DN?LxIRaC)J@(ap5W6IXd}0fJ(pcDvTzvm;ZGvB-ga>ct7zLWKn=e-5M1_DQ z`qmvbFjNz+s+^%p_^ykEU_Z$KD8n*(Q-CMVSjH8`rYM*Smx&@n) z#Bbn1PmCN8_m7KRdttK@xEBHF>&1z$EY*MVKQjc#C#f`!AIKJCEdN_l=L8=7^-x;Z z{=2;8|CL4hCoL5484lvQ_gc6_IsN};jQ%K~gPsk1n5Zd0l>Xm2sDGhfNxpsN`oLy> zZPUt|tEl~HVs+s**tFT}qe>GXNls@^Gp(-9uEAi>_!i?H#>@Ba7pY!j*W8h_wSt>Q zF649fo7C*YkZinZP0zr_#zoBoNDSE4%Qt=aBjl^sX+1At`}0;ZGHPysRSK)iRpOb) z^9sc5nGnmm+QPLP2{c!E@g731{B=rV&7-LlrKwcXW@h~O;03E8UBlwxDBHD!3}?Ns zg~Q(SYx})DDD8*JA@ud6fR)d-08z$ym#C(%^KY-|a|+sP4RMjYQd8EOH?{JL=M1yA zwK>dX8JhhBSyOX4f3Fr~ffRh95t)!w^|M4cry&lhqB?EdSiUv0uCuN&i~u;IhR2F6 zk%h(W1fY2li~B^RoTM7l-BKc+?RiQTYhpJS^8{<%-k^}9F!nwf6o7j?Z|VZE_57~m5(aC3WxN0JS+-xRzwyl5 zMsB8GIR!hz$-u{Md*8|`$st5T;^Z(xwtGb{l&n6sjUQ1nrOc=$z>y?V*3^IH3V`|v z_>BMdu!)LB(p3&5A0o(fn7<`=`kMi$@wv2_q`XdTwa-X3e4S4sQCsgy5Ag#s8;(Qv zw~_WVZEqG`zxPC_LFv|=z(tv7S9crvRnIbbKgm#Kr0Gb9UJZOR4!&LZ zv!CgtLT)06p6l&JEc<2J-)rf<><*rS-jmrytnl);bSb$XlX$36%d8DrkY66Q>~0n< zzwY_|Cu#bADf@hH$koTqW_!_pdELz}oIvAo=d*#VY&)SdbTl`o8sC(EM)75Q{Y(d1 zgG>f^sGy(`bG8>3lwzgwuo>=p6zOvy$K>=yBjLudW-%m`hQD+@LXEv>V}t+3tkMHy z_~dp{A#~z3R@fCCpDZ7Y6`<%F*MUU9&kr-P2e?npE$R=HdKwS-J=|P)2SLWjgt`bq zeLV|JZbh$$!r>rf*V#C!g)ASX0F<&=jq6z6fMif(>X#^mhcP{`XTbycLG2eZ6alv% zNSD71ZG~q2ycY9F~}!n6Hv%Qq{{uK!Jj?h2DJ3KQnRVB zlzG%~zrCG?wzT4xRe4Z@qw^~CRe+1R+Gcd(M6~EWv)#*0ZPoQknp{V}zCuRalz(EH#97VHj$>#EAoK4D9AyEP zuRqfiBex(s6~l`R&ZvK!Cbvz7r4Y?T06CdQ<)@@dxJ|1jI1=R{r~Q4Iiaow-8UlkT z#&Y^V&zph!CV0(6E7_U-8xaUujjuKj!nhj-w;MMrnG!=7KA++FzGF_EhfC+IAzmsv z`x~djR?M?X9u_Tb3$`-*2kZFuuHh;ze|q&wKHm5Rto^LLaVB)RW&OTfCdN~U8|wHXs*yxu3N6yqy_9$83bW6ixdjYLDM))G|3&Vuk@@mXsnv5 zJNNTPdcUP3&F-IZey?dseGfn#UisLzdmm{ja#|s%7+vpxGw8`8UR$3CC0o*|CTan8 z1m+)d1DxDzQt%)eG0T|Y`>3g?nf&;9&1m~BFoJImLNA@>k9M|kJPesulFwT5!c)dH zYiqgtGE9tTp#l9v_PokMcab!b0!!-TCOUf})UKxvGk^9P zqs&C3)piv&lI&#j$}L*wrc*U}GmT>GA)*|1#G@_cJOIXrd6N!eem%}Aa!nRBEErWiMzck?EzXj z5OSgM5Hl!|9)SEBXm;lGfbI=lr-#LUDjd$bjl*BZ+xj zha5}q5;w|KJh!6$b@SD-RFR131jE9*X!zwMA85c6S=MbaE~Y9)U~&bI^IP7W4`ZB`|&h40dc{AAA z0#FdJcB|TEDzeBTpdgb;JZyK8S9>)iyZ#ejg!n8}Yd{__?p+%rXEJ;HX5g|zJ%jwN z0-7n76)@l!+Pl9i8?s5xvTmg2sBs928Adr1<{)&4PX&cQQ*IL|KnL2`$}QKRD^zoi zkZG%E8Cpu?>jzKiDX{=uZ4PJ`^CPp^@^&o=h7;csO8|F&%9>4XBMxLx1x~7N7Vt_XnMhF;w!DNHd5@5~NM)|7PZlcD z*m+N0W<6?!8zVnX)}LgRP%~R;d>pNwu36XH<9ST_BN9pwa^ED&ty$as1I|!d;0#-q z&42mi83gECr}1;6T_~4CV+6CVbN33|h5Tn};pf*5 z$y3Y5C_ZG!*dc?wvBYo(3XgmC>h)mteW4cuo~XHd`#0k&QHplW^Er(!PnYR})QRqQ zJE*jPT~t)~x?7X^gCAapf+?JtxRHXw#JsIkbfyC!o}nVj#_+wTsx-M_prsq1XFNfYnU9?9tG1sm5YgbNv*+w~=(7 z%ew-Sc6g23z z)8GVF4_C3foo{?WG)eRp!owb~c&_;F(xRcma$O{E&p2R-^rK0L#Q5w{4R3#X-{vNp zbx-v*UQ*yA_U*jL%|}Y-D`FGWk{tqd^LL=8dp!paXta2P^_VEw1*D+c=B@)14LCj+ zy*&Yk-O*y9R8?|IIW=;VE?QYSUz2#9E(IN$>nmQb?u}ORYNAwc6U8EjQKc3@l;>BZ zr^l%y)A<-&GA}f_{!vsVfJ~D0aP>9>Bz)lz`#{lPg)^6OlQ*Nq6+LwCI@{YMDoz;&zK%vAh2WZj%dt2%1(K$xd*iBM!nrgkBW`!66ts z5<5#g6Tx38=LG%&&r$ZRBwZq&MxdHFqaVtaGGY(^Xg2XBZio^bm5{InqI?)i;zcl# z3aNBlBa@s&W3*b=cmGPdu&vtM5bcdx@F=K#(_;wU{fu1Mv7P=gxW$=;<@OB7xYNn8 zb^lW&`)m=?t?8V1djb~bieCOHTk#RUX)Zin5A|hv&6)Z!_hKUGHCR5|cugjqW72?yM4cg)NG)m(6NK8P_W690Gy|0QQ z*lLfH(*qpe+oK91T7P!kM6~YL61tgzFQK9f>Qp4=PB_@bBN(peTtOX9>|I1?6v{qx z)i&G0tvq@vd#(0^nJ3L2Clu+PtMUCJn@6{D5zD zbAk!|iHCk3Ab!;J)5z-9^~C&TJ+ZaR+i=M=RQZq@a%9%Pwb%c1_QZJy;8NuOz{s76 zRmRq`@HI6ZKw=sWHnDex3Kug;-oo218lpodMfe$ppmELYJZv)3p#7AI;D1;BlBY&B zPi|>So5d#b(!F#R30b0q%%Fgv+mslfUOpqAfhS;PXl_2-gSbLt>LqsvUkP`0+YrXj zz~kug5r}#VDAM8LGmy_WI$YxwxvFAn=-cmHN6c{?%krv*)1ZH-`{`=s7qAuop6ibD z^x2qDDUF@3dvjz2uTDe+=Jrd$CoP%lCu8QOU(v&fInO#`9N&~(_A`^3C(PEyCAUR{ z8il^j9tOc+ahXpdWd9nDu>@kB)&xQKTwCWoDeiPy9P^%tOT~{WU34DJ#Ox(Ids~f4 zmqhZ4$Vu^<941N?*n$*2#KxLPDtYHL+v_eTvnL)M?I(OrJ9{T@0E%UT7Y2j-U{}Cs z6guf|B2@4UVv(%^h*4v^4kpk0zVZR`A{SCSnK{R$$~iV9_GUV2xNtF zOm*FKZ(XEHRr2HaO!bu-Ce#|WW6FFjR(V!V_{s@!3Z*I|s!r<3C(CKZY*qXLP3}~y z{k9UDswkA+hHt3$^W1neD%8mD8FDQ36GUWKS$ ze15>{NzNqM`3nzp?1^4#7cdYO54z&uEd`sobV;7%|J~qyE-ON~sTkLs^ZMhXxDbsj z5_FkK;I(utXvK``FV^l0tujyMd#unpMjq1Zd1#X-uf@RCn64;JqQ#_S;;2JSHgC@e z>*sR4p$`Lh3q2O{A++tcpD7pB>F~`x2FWGVzd_U8uai*1E(qw#AK+V{_FKlb4+N)f zITS8eqr9&o9h{PQQ)QGjm+VbowX>B2W;J8F6e(rrJNJ|tI8%L%I=s-VZK}U6yHMfv ziDco?%`d4e6fKj-guqrN4sNOXuNauT%rpS)!Ty652^&VtaZQsl6_Y71^_@J@IGZ$d zq{_ree)e`5?0ShWBQbpiJZq~Zui$cbC%SIGs_L5q3;`D~uEhHnF5NE|j>B1%49s#P z^QLiXsvLAK+$je!bcgmfH)J&n3F)V!ZlTUh^e^iSS$xfV46pZ{IWpnZZj3F8ki(Km z#ur)M;@Jchaawm1L@(0v^Gc?0SIlMEJI^L;D7+ZsV3B*H zXF6Tqlm7%Kq5oUnDzeV}oO0Iy2!sYEip-v?I1|<#2BHxIi-To#=h>qHAeeKA+vDMQ zbxBr0zbkcEfv1`=6ygiChJ$X-fav84z$IVW$G=}~85YYg_TA3L-s55XqA7}=!z39i z9lgC80IVrqT7%-ioKszdUwlf&*4FPtp371ildm9bIZ+&A6H(z@{o>c(_rPw2PV_(# zofkgQtI|E~@`aBL?B2D1{^Ui_m&~J50Owim+3ZrAc6Pt4bJb{%Mr0B@5{>>a8#6UL}(fDZo=?lGYX2B~NG@ zWJ1i6U@nM}`zh&FJL(|T!B3PKHYPrMoSWpcr48XPa$jBan~))JfH!{j(bZbk$6&cq zQ(|03;MAS$jn;++xMVRdFxZG>_D+V!@xrxJ=^EB^JRFIyCbscO`bzt2zS?Mdz566J zJUgq_4b4jS(i)#ao@d<<1QxIJ9P!gj3iUdx9TG$1i(Dev8E?dzp+l6zAvh!I!EVq< zNvc#jPd9)fa(7*k(ZAj%7)3+4#=m^C{Q}0x3J<~Q)bJEtN61H2g=TUsp;)h*%M}$rJog<85fX*MkR;=GX3%@T|cv4P= zrn>m}EH7*3pZ_F&CuSuxy@_WDYX&T2`mXPX;n~8c|Gf{Alvd=CEOI+YW9~kzE8uW* z=rlAP3tLhihEuEjBXLs*tQJ29@WGuPDyv~lZhH82o+^L5^dk)6orzSA0ZOlDlDsp~ zSj`5vZDqR0qLq?9+SSaG3s5{2;vJu0NNQKC+Qf-HFMU5Vx5I5c+)r;N_xC)d&x<&1F(H5X5!YU30c)yR7J5PuApWke0xf z_6mi(96np?T=wC14s;7PU)tgTxfZVz1vNRHv1)MlMvPzu@wWXNbk${nCrnHsFf!)r zZ()a*J(Gz-vXQvi6gXXzJPw;>cgX4Q-T|BQnl=jtd}6qqD4K?xQ}JoV|aa&4DomEWjV zSx7I|Ebd_EyrP|}5PQ(r`4g+l(` z!QbqBW(#AEGOH99Q`NBm3oZfI+;ohC39&uQ^V6`=gA^ZFU*&KnO&vc|=J3Y5vuv51 zHo*v?^}PS| zlh`~#(JH9!c(_kR2YW|XX)32Za?cy=087`y3)RGgcz!T}ekT%sh9JVZk-6%Cqdsc@C@XMC}Uy5`c8%0;dyig#3*eLxjB%%7X3|t z6~6eYK>u7S>PSaPu=dT)^jsS-BdCsodEka|^*BhcFW=G>|K~RB@}?!&eW}b;qSL=+ zt^QJrGM86C#jXE$FsP>|bUTek^R84ad8I1$bm&Nr;^786QdytS>CY7{B(u*JQc;y) zJ_FWSN9C5t3D8}bMt`K`plO_hoxxmXkLBHULy!A+XNU{cN7C@|c1;-+O;?bF1MM#s<8U-0WgzPnD{>}+ke7Ic&x7Gh`q|p@@ z)1h406&Z-Z)JZ;#Qg4oMdM>_WP&B=+s4O-PtH1%XI{1Qo?L9CqSsL6Vq)Xb4fXC_7 z5;%{P`#4H68m+-#fACfXGPc_y5Wzn#qc8$l{Os~n9seYA+=vIk#g6U6#fPB5m4r0R z=+rJ=-VI@(2$fam`@^8(Zz27gR%)r~=G{|Eg}sC+%e;e5Zo!oDTQ>$%z;-JCrA4L& z8Z38V@#nnsuk{=pOqm!>fsfpyv3}Rl@cM6|(~~pD_5zk;f81*m9OG=*xjW#SKBSJP zIYt^7x67s1(=BD7M$KtB53t?sB%ZGG`IJ+6moy; z-eqOh+?2TdJ`oG%?#w5QjWtW2nP7<UAmZ3 z{`YM!g{Np8l+Ib!{{1%F`C)H-ep31Ia6%6KBXMEQ{5ZZ{+_GI^{+6L z%bUYzyCD)+zo34-<{Po*?pF;iS%f-K4emD6Zgog1YCn^j(cfy*nYB)u($j4|eW-oC zhy2`QzAXL+r@8x)^H8yzer;~;lfrN-n~GAP^@f2NjarlKU`8z0(?PF0Pb9at;%09N z`$q>aXPa!#0HF^UFab%c>N@OQ^RWr6Y11JmIqkOx)Z{jp$f->bHmN6^_c6owcU7&D zzn3q4Ihe}oBbe6d_*L8WVsl-y29k@SFb;ow)&uW*_28xL_M#)|wJ5M@uP++0OW~1H z@-M-2ID=Vk24PtqTIE#T_k?IjUdR9-5}9>{LG7tjjam|=5961cE9Z{j@z)>IlX5KR zWsQDM;_Awm{qS;Juu#_Gd+4)|o7GU&r%VGcj}Q&pYdF7^#$p)8*0D*UFe5dx^Ju9d3`2^Ih+)#1n%ip(tX>UC6(~7F4NT-#I8O}sJ8v9}{*vHC zS}jZ#s>m|QJkt6}_;F|Q()?nz49|fDDw%n_WVS2Mf#K1{n9Bg4KC_AC_nJKx1CJkAY81M4qiTd0(G&g3_=|W z!g^s@t+zL#&HPqIuNGZssdh{qxDwYEUK~uuR!bV8={BTY?Ht(|2e`m zP+K8duy58{={#4BY&IqiYzInYbCp<>qMbum^x%j-gKQ~yq`Rm|i2 zDDg!88EaGCwr@rJJ>7 zNT;Z`CEM(;@3)L&xFa_{6fshiSuCLpLtiR80aV4?l^HO@ColwkiTDI}q^^6%@amF& z4IqM%NAu1xOERN^6--6@)^*P~$9_cHfMx}lY5CQ11G!inHgm6rFd3ZpV{mMF{8j zXXY#W*(r~(0Mb1nME6~G!F@v>KMDlSS*NrIKiz6y*Kt9y-ry$WVuQrK-4KDE8K<*` zo`K?NKVBYSQ2MYHV5$|hl`DZRL$pRN2NCGSbA5z}V;e?4Wap_++i_riwQm zgO|2h%$_s1htaq<;!V_?%XWpD5Is%$%pj=Si>v=a&5rK|&{wVdI!bunMYIi{CQrv( zQP^;E7a4B8hMRFz$G8HCd*S4XGWKuH7Ny|HI$TSpTDwn&Wld+nfIIL^bk~-(w`S+~aG~0)rn?bZ7qocHc3e2}7Gv+%d)ryrpv)s5L8mPfns%k#9?sf@ zSQudoSdwjorR^dXP}mOBEaBQA&4X!GLn8!qg?nUm3x7-F z^BY692)eWg>ab&%l)UlHj!n6T@T8EZ3`@#JzC!$@A6MlhZ+BoqC%**LP}+qDToZJt z0LQv3GvWF!DboU7xEwo&JQd(PQWow(3qON3Oy16Wwt4G^eG5vG5J)Zd4zknaHkfMb zh1U27ZEj2wHG7)QR}BGSVd*&iBj+T(r5*&rWs$p7A?ch;>kdd*Kg_H%GKy>%Gt7VC zu*835W^$Il2FiHacGKwR$pIsbxSgJ4^bSL61}q?tE~jJ+JKp3sYRKNWX*bR_Wty0z z^ruvMa7x{-_2R~o^$<2a%XBe`F-9%ereU8-y)4pU-c4ILr50=y`&qJaoi<(1z z+))(wH3_4SyBcw+2)5s{D5od%(&A9b)kgy3hi^%eX>(487ko619SC;mQh44ysIYFL zNuMW;@YdTJd!@P+Fyt`>sF3fRRYyvLRzpeyQT7qwe1%x*LO;DEVwk!u>Jm(65S|L~ z+=gp9O|}qQD!Hpm6t-FLeSyW|rOWB(Ih{0S%u5jP{~sIY99>zruK84Kr(#uDv2ELS z#kOtRM#XlrW81cETb*U@(-xz@wr+t{?W2>m(OTC%iS|_ zrUUz#ufqGg=x}Uth{c^+@X7i9<`$laH-68t;ndI**B!(dX3k^dVKC+N5lM zHcxj~v6Nh|PDY~~D6*(m?xBQUH1w>rTOJB~Hn$iIiLYNu;9TH=L%sZ65Zp>UvtBYB zn-Ww!Ao{v{zq!(_u(L(;W4GyaonL)Ybz2WqHHhIc zHZ7*tv<+7DF47f;S=HC(VX!HirapgNk%NV;JXKooOT5kMHuBk zX|zC%X(r-mGm$e=gk;L!U-uDEQY1YqK6=seuh=t~Fgjl(*V%3v+%7H;0~{`^64rNd zx)I^~UH+mJLx(o>?x9eO2}~V=q5fs%wFf2TX3*+z_qPfX{; z(`9)d;2!`3JZ$0v8`!YheG0v;JQOH{l`Wtg3~X^d3$Dapd_=y$#A=5hft8?+D&+hk z*t}9n+ft}^u@23$2we-{B*$J(c54T`! zRsRDluSWX+kLKknLUOM=6bH)Oc$9`*V!6X4fqR$Oml9(A7nmBZH^!zYblGCpJ3uoQIT z`t{9^pSr=FHHD!@Q<8xTPo(7!WSTf=6FiH(od5zu$PCT&+GfPi z|8kzaHy{FlRCfPmOzGQQoLI_I)saX(9Fy##!CQJ@)n7NkW`uj;t_c}Oavzu?>yO(0 zB0UR6zxP$KLBmyw&+WkBE#bN=OTFhyM-RpWb_>7193lYeUQi_?hMx$VXmM1idG{jJ z{ncJ;AU1P80ws8*rOIZl%$F5*eVe@7BTFrg%W2{~TO!>iSm&7P zxxv(QonRC)il9xSbU8fph$$}R$KO|y6`3F&p}fJMYoJ>0Tl((~GpwHE?DhiMNC3>e z6oXw&`Xe)by0@tIn-_KjtfE>*1-Eua`biyI^JfO9^NEmCZBy;T{gv@T=IO}KhQli? zTztI^{Bvat7whSxVKj!PT;;%&_%{24mM01js2X2}w+PzU(}KmkOCl_uIRKBvvkKdmvN2fe67}QuJE4%j%8RT(ED*fUCvkrL>>SAi15I0Z!Z_pqsoDo56=a)a(&TD5>AKV-c>5|EX-D8@; zeh`(dUL}i)F8voOM|N*2w<@7a_=>{DK+A38(g+N%pr+Osr--|&nZ;o2Gp%fPYJ{5P zB3Vx{U9V}ADazjmFSN7eIuX_TEd)+Vn4%#B+!FAtF+*!lZ+GPhO_H?hk$k9uTAIn< z7FVWTriU{c)o?-cNDPdastI2V+U%nmD@x3EJ15sX{>>lcp6&+n52INF`9{=MQ3%vz z@HpQ27Is*i9E(ZIEobB2yWMes*_cyy%dJjofIySbEmR2cGJu*|x8tHet_6RPoyT2X zcfIMMzXuynmF=^Y*=cxWX*D|f-3ztOgF;a&ljQ5|lz=M;6Dkxfe#i5K)|b93<8%H> z#5{oT%|7lCy^K4w=>*+Kq?Y9{SnKcB0Ia~{ZZX9_>;kHvLogqxOeUVOHkx9l@r9+w zUeuys?B6(Trog$T0L)H`W>#$udDZujHvKb+9IGSTSZq@BdIQVKLj>oOKPwt}_CTuR z*r{AZ0b{#ELBhf9!ot=qQ6LouS6BAxtQ9g7v~p{XUv5hc&4tT|9tXqw{;cR3k2rb< zb;~`L&J{B{Th?-g(&@u!tk^BD7y%4u%~X%WVRJ>M7{d`eI$ncxLP2#M?W3WS(Rlr? zZrVemi4uj*vz7s=dsbUb{fKe z$PbQcxE`X7T{2>8YU}8{3LpqN)`{3@QC;Y}B4eUbs8mhR8%_ueJsw{^2GFCQ+=5#e zNz`!=2V;)vA=Vd~oI}fyq?95XbRdKDo2z;Gt2l@2QS0bBs+~DPr@4ADgs7DAd4%DE z4NkuLs8Y)4suYa0{YlEZtduskc;RVUjm1J|M8@?nTzX>HHN!>17Jgz;uOb*k`St~j zcma0eULYc4fIut8jbURAwzmDh-t%XuBt*NDh3@=8_RZ6*^;#8@coiW=N@DJ7?Zknk zKEBW1UGaz)Q>8keU@59PI+og zy3s&T23FtR+9FkESiBZt^_@ko(XU*%SCMMa|8&f#{c|4PQv)Nh*#QyP3;te$mEJM@ zdUK81GxJr+?oftX)cx?xZM1bioqji2qogo~)e|w(el^gH^cX2iRco1bd&9y5^Xl7j z{`Q=%s(a``U(vOIP3mTj{VZkA!pur-Mo7o4Wu~Sckc5@94I;b&q9bT-blGg2*Ld3o zSFLti`A-&rV0u|=-fO3V;FtxgfJS0l*?LlZ&vyKJ?d5_Hw&#nU(TZkjd>5N~BKk7I zd-!+r%h9q|n(TTV8Tb9W+jqZnGU`f2F)A}M>vyZ)U$Rrb>UDXM&f)5HglK}b1FC9B zng?>!iAqQzArrS76m~SIq1l2itHFPRkl|0NWA$t_K&qnGS z&8uQ*O)c`kq!H!Av)Tw2mEoIR>9J;(Dhnufv<&M`KoNOV(d&kkuyX|Qr zP8`BD@y{Quc=cDZ8mH>;*VS?+u~6{#L7(gYYdp$h?*GIaF7SxV8qni|&F6T;FPYzFCx4C*BYx{?Mk)WS1f$_jQsZ zQvJ{QWLt$8+8xH&Gx&r&cGXT(WP5+#AYUyl8?-2)xKI|5TD#v2h83A^`l`^&d)0$~(>-4ybjB6uC zf;i=dqgj3%P20#?g2Ql4<4^vX6S(<{21Vj#w`%6U+9YaP4&8+90SQ`YW3nlG1asgv zFr79-1ZciR23c8we|;b)B782hbtMuXa9o7fuf?rIT9OJKq=1A zeHh)}n%YMpdN&#TQIzINzzv`2&%b8ESMJp8hle5r9A(l1uWEemJ7$QZ*|ug+XB1gx zyK5S1usSgj!i6S8)P|USiW&qj?oP_*KKjuzn}eA1QMna04vt1ehH^IcfIJ06Sn$5r zzuLeWQy>OV-Z$XbT+gZ8XQzgfhF=8(oB{iysml!|fzWe-C7Rn4-L@RsZ!NBZzn>?H z+|N7665zlkb0c6_po2lZk&raR0c(UkLQ}IUBibPAY6-v?{iiSk#chsHUwNl{lAx8g zEiacclx!kmo!eX;c3oaE3r+Taft!CD6ZeXeaigGe=WEFuS-9+zH-c-qz3pEPM%!`L zaojloaMYt7Fw|=i(1?u?dgl&opYZccp$m0QUlUGwePBPT)O4+rj$Jz3QR<;;SuUu_ z9w`^E!VijX{-H3~bRh$MDtyGj+wWwoS3mAhj4rS(v}wJq4^@%(0aoL<={s3AxDXfS zEiw^;C$gVQA3PX=R7acNoF$LhG&S3Fm$Mz|+kCj;LDkR{hs>{?f2+iH!O@ty@sN}` z*gxC6OFJ|6N)h>N81O1?;k+5PBhcseK;sAUhxKZ1iQk=447vnM7ifHFs9Bh3VGDG# zsk(k7l%t71YSLlsAVleROqL6L;iBLdrv--oF z)gS1FKIVJw>$q9rhfsCZrin1_fy&<-l9m~JUP)h!%yq^6@c zI=Ti{WC9nF(Px2fVRgkE&*FA6MJY6S%JlTicz&4HhSuTXN60SZ$WaoZdBzj+_1DKS zd2@LjJ6r(VijQtmZ?#x-PDT$`J5w!Z`R4&~Rr7~leL~8-QWnb`3;@RM%j^<%WK(Tp z<)<2z{R+rf+gsu`!1ih?{UDF`qQh0KGMWj$pf*Uk$_=%lK6GQSN}fv zpN~FtAmAN@;mN;aaet+ATKE#!9eVh(o!p8C?jK2?@}P-#`wpa&vAbk~&RZW>8PXEa&@0FAhEmGt@j%#C?z<`J+j6q2+e|0p&ubl?LE)ouoX<%l6*Cut zs@X<7=Ppd__$JxBn)SqnRM+TrGyO=))d`!G8&^O??=w>7)Bh1YKjQ<8^xJ`WPrK{o ziV!d!$SOjemMg!!@A~nceurZ8K8^}NFP3honl;81MZN6CYF$!ok_&4kM1!)YziX*iD36^ zeh$+bF+I_lE4C#YQMGE2lzO3dzxdN6cRhpZtPxWG% zj&>4ldVPHjyOVwDpkl;2pSA%* z;h6?$w6&AG(banC`dS=p*U=Kjner;A$q>Fe8}f{G8w1!%x*Qu=%h8P3y&wc=J1@1y zW~K4BZw1wCvR>*SMCJX5e&X9A;4^;diU@S{4#T_sw+=Ph(Zy{G>~&ZMyzud@fOuqo z<*oe`E4BCha05WI{#%l=UvqxJ4=w)RnwZu`+4FFJQ2oUybqu(7z1k4VrKPR)9Yd7C#@mp!T&8X{b+|lh6>G$9C{NJL>a|Fyl5L4QU=IBTk9xR@9Yv$d(KF@Ln5SH zxH5>6pgB_4L<*w_{Y z;q!!IzYWPmM!9OG%#1tq_}Y1l2Cm2JM}?Y_;~QTZdW7beW8dYW<5!%d_@A_-ZD77! zbd_Bipx@*$|Lm*(Ee~m%%%88iqW?pv=C8iOe+K=x#3jGG=x;b~vJILXp+h+(Kxg~%noRD6=*nBN8OiC(o_O! zKU{pZs(_2n#B0C`UzBki-AHC}f|+j0?W!*H?3}#3`F_CgPsUe!vg&!+1dk9A(#oLl zX#^7-_O^E*GmS&yp|_#fLBWj46}(m)^r0o+g{)Ld}mvaqwGy5m`C^u^Y(c$fZoxm-hAh_hy%eO$YB^d2+s9L%^{& z`1(T#OZnLoO;tQ}$Px-}A6CBsTgenh(g}Saxl!0KxlX?lvej1p9CJDFvbh&_-7TVS zR%2xYrMY7}YVaUX*jiu1mNkSl2OjbI{vrhHve^QUZW7I#ld{Y`a^6tvc#^BhalOet zyCQ=pK+E}cjl$129ri}lKcIt92mI4=Xo$afOH_vWnx-TI9HiK3FW*0+Tgh1zvc??S&&Y<~CAj+gL6wnNL&s8ib_=n%Wb3)NaH(4u)^# zg{uK?8A#(9e6IZ-NXZs^xy%PVOQh=@I7NZ!M}Z+C!B0ez$YLA_l-l3C5LeBEiF7Db z5M%*`M7cHn6G^#>RX>~!86A^l!7|Wt_T*=kx^)SgO1g_x6@G`XH6?a{*xj1&vyA3M z{p`Pk?`P!y6$MKSOt1LYdgGCaM~MBaHLx1(nyVkS9fKgN03Tvyla=6)8ojrq?e7L< zS1S{e;{;>iln%6m=XyFqT`CTeFu@;nWI%yC{lB-VLw`?_3@%V3uHzW-f($@r3Xya2 z%HV*Y@X2!_1LiEQ&#p_m;jy67&%JWZJwP-lvyTVs)dFE}`I9TbCe49OMP;K0Fi|4l zQ3pr9!83YqqL>(|E1g$pHMmnYYPJ83or#gw{VGg@k{Foc{-6MnIcf&-aNi2MYbJRs zrSb0T&?mq&)Bv&NaNPYyMwZopv~h-~3%Y*^A4r4_eZq-cc0YRX=E(o3*5_pgub3dp zV=P0M)D26(24(!oG1mSOm=e<2$7sLd?iT+_0`h^*Pycg`%n`@{3)WJDkdM9A@A!PR zt10_*BS*!j>k|7zJnvUkm%~&9Y7SG>_lCmO1qsS-XDvz!#zvO*Yk)t)1{{ws3`AAg z4jw*n3)le@6H*7lUfo3O(`j7$dD?NO`^y;T`3rd0z~+ZhkF#xqEbyc~_Aty|&n6o- zhk2c??H655{wF^9eolb4{z5kxM0ckT{_;3r6uiD>oxzdm&|jhB2Tt;n-&z~~SVG9X zL@50@sPLo)PG%bfus*EhjFS3*QH?mPQ2$Lkn7)BGyp{@k>Jtsnq+k8QD`qZ@CmK$h zP0xZLJx$wg<29M%_Hf4r$_h%l{k9r28x}r@CR`b=EVWaQd_g$~xRq~!ea-m?sNv)o zUz#mDxkEOP$6GxgJS&<^8~D7l&p3^+=;u=|j-R`Y7Y;_EY(?hAA(H66s9(7teams~ zF_bLK^8yK&r2s@9c*Uc8!^o7|JCkqyR{$hZ79`2nv6G(pE9-EEEdh>5&7NVf(>Dhu zqB&EY25}oFQ={7PqpHc(mcFpNmn{*Y2xc`aRF|FK zkf+3)u%qSb`O?ZjLLUB@QX*tig)dfpoL!`Ce*Av;I_sRyL8VZ5kPyAhxJrnLR; zBKTraOhRzC*WZY((|$2#17>$%_V}sEC=s>Xml;6|KNqt~0A8#BE{q_YjIhMAsPlk*H0MWkO?swN!zi^SIz#6Tcim zNyMPco<<>lpcQ}f7nT07@5Q-9F9aO%Dm5w}IOB%Nm;r3rY2C*L-OlbmmR)sJ12&kT zZdxFls|nxUPmAfK1yU+9OT&@7jhukdAa(;O!yowr)NrI z=w)b#L|?g@?A;5!u6+vtD_2VL^Cka^Sh_Ihfbs!jB42PFh=Xkbz4$OJ#C$>3o$#0p ze0t2`z!2aIoeU-5aRLE^FEw4F?l+sfgbXmPm*QM37sh`07mU@Ic+59jf6=9ly6_QJ zJpE+|zPK1*0z{ll&^3f5zZHS~PH3$a5Hot* z-#GeBj!eW8*3%F|xfk(G%haJKJz4URQ*uqj);Y7z8v}S-oYb1FUTu;K{af(|urXiudT28*u*uP1 z^E18#xM4HI6S@^q9V3ji#%;R??z1dGZ+Js9*!)@5e$hl-gCC4VxrhL3E3Cz4#BmMwcmLKgSdrIGy3SEDmFN{4wXF!(&7W@RwW~=T_ zF4HH{^zP3hjD`GMXxnQ8zG!nL6bJ*z&Nj&7bM+3?z}fXwyGacj())7R-DIv^$5U=Q zfdkJKFj`bP@KisInx*`zj|r3z=Jq{*uHSWG(lQ{V9TA}F9dn1#Af)AB=OMh{NBmkm z3q{vgimiJ1%jF1pvZZ`Ozl+Kdeb7K6osr2!;6P1=ShvfBBI9j93q2}!M4fWU|rjTcvvPv+pdBEXc2X&LA_&Z&h9G{a0wCXW-Zi&zK z8^!i9B4)U;)2&==v$dk(Kw!lc1A*PPr|-Z4C1y!y9_(*11%AOID=fYe;l zfE~Jmmxy@6LX*^nVd&MZjSXBe$Lg zF!tPwQ?=NX)DgB+V9h{)ETQT5TP+#RF?`({oi^Xt^mQ&0XD{IOsGjBM|>@73?2Y|&d|%jHiT(UWxf3pC8C7{(4-0wg)>_x zry;oJfw3)z{>?doR@wj*s?n}%EcSpQIS{o6<~LfSx5*1uvFwa`Y&ljL0Ge9X^Ry=B zSjVSPATMxB{Ua#4!toPsHJYaf#gVBUp582OQDi$CjZ}G(njn-k z^R#I_v0Qf8*$gU9VAV?Gur^;?ezOOS;1clxtDUZH#d9Z9Ll-M zcJ9wFT6U3TIl7rQEw1{z%OVi%7xN5sN6i4auj4dZiggoJ?`$Esh4kK(KXVyxHV1rc zcG3;Y?^hPUZmt5{@M^W*DhwA1ngj=?E2L`R8!I$V22x-252t9p#!U-&>&pZIJ(_~l zyiw=1+%Xp<@>*$&Phg^1X?PZYQI zi%7j6n>Ko5x?9#Oc2OU#yF!rG}P!^R={PD`~+{ zIIckvU9n z7;+M=qsb?O=-VZVO+@nakF=J6vKda^cjjt4rlTjex}f|l?qR9X$#-RoU5SzksfkrO zf~t}ewJG@|nM69DdkPs%#Z@(}uDzJFtdO+HoqV|>1=J^G{4%De6wLB-P6!W;q**LU za)I9-%CUXN(3b)uJ1bfyC;SZ$n5I^`yLSqLZsC6UOoLi8iPiJUPIXQx?uJ_IX`NjK z^ndcjmpg2*N~9;(4qI$>ayQ_yQCnz2>re4PE56Cm8 zsf~`61$s=bTj$zHz|-oxlekdTQ3DyybAfUv%!YE9UHkF7VVNR*V`b7*AAE`yw@uRUCCpC(Fg#qAUql^X?UU^iKkZy|Du(qOz^ z6DFJqL>q;{ii#uhrFAIj2ANNF$YxKevE{>HW*47F2Np@HfUs|e*@V0dzXB1kk8nmU z_CdtC{5#xxAE|vS`r6l9eAHS&#e6kF*N##Ibd}dmFu9hbfyv)j{$TbvMXz(M(o%mF z25igO*b2uBqakeQ6>EUZ?LKvtT_8aU(UJljRg@+?11 z5M;jtx@3Zy?adq$&}FXsmJFLP8KJQ>(TE5R`xM=-TQdumE|OG zikC6+Bb0dH92i6oN#p(~>Vq=gEZ>H}wZj^$tx7tiUBtA*R!dmW8*Gfi1t|sSbEj`< ztyU5bfo($RCbiZ{3NqZym-Mhz=^C+*(65(>G`586kIxM$2aG?RULtC(dn;r2?>xXS z^x>Vs>#_!OgOjWWy~aMG&lIuHua-n-J_B=+&3AL}z`I7`YF?bT=9}8jB=9meNtwhP zP-Uda6Cm$oj4*|1WXDw8<#ENhrYDiK-Io3`Qm(p-tSPL&&rUgyiNT!myd^|S&A`>a zZmRE;;2!HZ{e98G!;q7DROy6AayBgWd!U8UAUV-8`AVF#Tvs`mvZWNY%l<@tpm_15 zz8uEBPkf4K!$7%8O4@T0<*qJqPYMt62jMjoL9Fst3qWu62mo!(+}wY#?Zy$&V(L!6zHUd0BcHTS z{wzX!SiQRW?5T$%%5}P8+r-4Xv%+k?9C%iOrE>G+{wzs$?Tp|0*wOdfV04cu5w>LK z3RuQ1SK(;?zB?1V)jowOQ?klg)UGpT+3#-0#Vh3uFyEDdIpvnQ`GWE82NrCA?qYkN z9JBL)7icBAb8fg=NT_~NW)^J$sJg0NcVCC(KC|vB{NFHRIq}$Mj5aqs~ zKmxpvF)YPS%NK3*LE=Nn6SgGgms3QYykxH!Wt`A*H>{u0-N|#VL#aMAJ5aM%%FKO+ zK2GA>TFvwRnrEP+-(B;^@JPdbrW)H+l|TH@*&PPu%^W0`lSl-o!E-6O&2~@rP%im7 zpU}0`GBWW7d#OlX9hG8)aLK2BlCQ;ilP-<5%tybfLuNOZf-QIIwv3Uda;n#)a5da$mX6^k={wsW_aPu1E+%!q_(46h_poUc;5D^7ovQ-m3D^kVK-& z27F9@RMxMrANlDL!%g*)L6u@ghaOX(N->D6CRmMugxdWl6$o}hGc+-?f|6Y_v?#_5 z3Dyp0{sq#vtZCpe^2KWheK{~xlFkQ=m=XG)i`WMmeJAfc{?Q5b`s3gT$Rx&alwpduzAo`Z_A<~H@wos|?twr3#uw(^WZ~<3TVkbhGSUppFjRyRgG7Kf&X)&SAP9{JI=1}8fBOo%P2 z$IxJa0N1eUC4s7&umxLx^wLfX0HorgCQ8ZUMr+K6A(LnX=B^kq>MKst-&7g zCdMGSnKn|8HS;p>pp7USu<98Oee;^c@=}w<9IVWBF&6KHSIVT8a^?!1;FI8%)871g z(C|D=NnXjDwH4AB<{qyognh{*;yK#}w2K_ib+L)o*-B+E<1COoo+@Q?s_heX*5GiK zX_@_K)+`~&U~KI62G_u%(LwomyW7NlH%Yy;VxKUcdKKq+8f*DgcKF8O?~!eIv?TQW zJUIkcOm=CcZ97fj_2|T}73_wmzC>FlNVY~iXQJ9=_$L4K+vkR}{yjg+YN*BucUM29 z`1CX!V|0z8pQk-C%OV6o34o?H8o!-tzs$p50~8pJCLtmMe}ws(XLZfAfx5Bz?>hz| zMtyKLi%%`tz!g(wPyLP}yd-$J`u69}R|T1|zroAY6$Lj^X^_1ddS5EmO8{ zorHV5?8w2&`~oOGIqv7}h7($MnD6~?4{XvIXU2F5*@Kt@%|yW`l6?)gm#{fo)pv>{ zE*!P-A<1=?fSX?^3&S=$w53f1Fxl9@KoR7!xVA!QY?PboyvgSH-b)~Vf7KuY2O%Sp zRLR-zUI7T`VmjK*ZzV6u5ABdT_6U$^sz_!5-w{;DO5R9{9gFbMkVV*87Sp%*aN#oaGG7-RGr%2BZYQ1hVk4M@WU9@OH{~#m)4df&JA-~Ju zHk|eS!td#R-zL6){MXwBwgIHEjhqK|xT;~9|Nlc2S-wPotS1s8(EmM(57ILeG8FmA zZj?H#{Qn)6;|k1GUH)`P@eS|+@3}t^Q6iMk5V#>+@OhzcT~0xLjx+^=PB1 z<<3|f04T@CO`Nx~cRtk!;}Xy5cZhTZ~EwFJ`=OrKfsWQ?gDRux#! zLZIBnWDvtOOQgfgHgcqGO{ZZiI*}YKy6PI3cVnd)zs)8LOXc5atqOx+EHOsja7c$O`A3sD>@- zn!9nJyNeON(JH(5M7i`6bh8$s{8jmMvo4pE{XRSW=BgI7KUAT{Cpdfal({|@bKK_ZCuiFfNv!kc zwcp#bk(M(S9vWu;R`%EJV>NlEUZ-yg$kdv-V4Q1i2A?#7_OQoRR+m$6y+X_u1g{7uP`sgRwu zr6B=oxv)n_ZIH+zn}(%ZA|x9=GMe*o+X2#=yBJ-wdrCCz2#>9}xao{WsR+A^?<8?# z1f>IQ4sonLr*TXbxq(xM~F&D&O9IMi$S$9}@2 ztA1E`0%sw3=7)b4=Jzwt>7kN)HXJAErFAKSy*f^{JIMqc_Gq3*KOmbP8t({x%R3o9 zs2qAyoE8ga910Ds8m7sPoQ)}8?I9yn%K3Cel?O|(y>lH^O5x&E)uTjmmLwtq5pUJMtxs)fzA9gp)_ z|2p*jI!1b=LU^X~Y~&R*+-St%K95d52*Ur80+UfEV~x3rkV1DXMu-#q3a{cGcfQoX z>Z2K@2^eI^H6ZfG_C^rBM|B1N#O2z<;{#me_3um>JEM1_%b2hrpmm<@qz!u7ys(-| z<+O~$AYLk%)v;Jd!-J8^@nh!pY8ytm?idM6D-*zTDr1Q$d6XbS>hotYf?_sfq z;0cI+xC2-{P3-%yj~)S0558sC9KX%fax?0_<3O=Dos6+wa<`mmcNP~!g*eRGnqt2c zn67B~N~z3=lHo&#M*Jw2^Z8x(q7`%l$HY2a_$r#fm6%QE&h*CGD#?4akE-f0#M!7t%!dwQv|U@Az1+SO{;X=J9Ry^( z#Y|RRnek#>jn0UD{j0zy@{a z68!-|pYd^b0uJS82#9+wH2x3^Ie|CCiLuH1AY-}~X^&>dt5sN^FePG};=&Ap)6sJ? zrS5@d6>chm*ob^fpTfrsyYA?{6DA2$;+dU;$M{N}6Gjx+%=U*_42ZRIsOd{$TsenC ziZ4wJ^xxYK5KOx*dnjtd&As7C7sGDArNm9wz^Q%*v4F3f?<} zM6gT<%dCYbU*oigsn44Pp!D41bU6XvNv`LeX7x1b7N1oD%0<=}t(L1(~>JW4w%1s!8QX7&jcg7w94s`{FBTq3LFM`Xn0GqiovAQ*z z#`?(SATnO`Ii?~^6v#xYe!~S<^m9q9l4!UamQqMa#=$19Ax(q41l|{Wn=bHXwMd9J z{e6^=ugheLock_C!^J2bk{n@bnvl+sntI`tA!z27Ut2H~0VM8KzQvsIF>IM*PDpA# zSk<3=c8Xf)*Gt8n3K)X+FY|`0H66Xxg`TT(*mS08NLgj`xV~lvFADt1i+3*0DT=Mi zk4Ae5Cu&Z12{j!iwvGsS06(b+0Iqr==OS32K=b4)x>-uROk zg1Q_d*Bps9WghY=73Vwm&)de*(F&{lTueO7Ezrz7NGMD}O* zEyp;A)PiQ!G4HH2WZdNu)0?-z_*8#FccRihW{k44(D z&T)oEqnctD4oS6DE6>p-;JSz@+nJeh_rQ9t)rwo~4i1%rJE%o!)mjHjRL2|;_c4Ox zIP4egjb4VYUmq(Sq9b-E z^->zswGR@eab)uL`rOgy=5;ScKUEHu+sD(4Qnc$EGKxn(wQI{Xm9?#H#?NFInrgj^ zFNjwM=E}04T^Hh1j07fN8(t5WefG{%R~FP&xRkLOc@tP>i?{+;5F@KIZtM(;+JdAq zMy5T@ImF0DC3FUS*)3kKloO)?ts%CF$OF}?j_4a+D4+a|q3+E<50;K^FE zx6bSb+EWO-e?VE+Vp5I3ONtI}0vME~Ki&ldN|i8gOkhi1bYV+4Qxx~pr&~@orEHp9 zRv0ek5Yd^x7SO`jz?iFQV)61u<4PhU(Jv< z5?{!NM2u+7>y#`Kl$Sv{icBDzZ`%_Xg>c;imiNEG_JpdmL6f+>WA+BeX(pv&7Rhks ztG#m+Zxd(Py9aff9p+$Ijrp;6L;-$oSvp+m8(85md;56hqx&t>!No!)Gn`+6?9(Fn z{Lfj+q1JG9?{LhEii6ibdpVosiyam1pbNM#RezX%*6(D~1J69FB6(y)Qd9?vdO@^B zjk?I3jG7kEXIYYGycw|3@V2AS_^Gs^$5rCUgx0OQ&WrBRdsmp}sdh$B2cwsqtMszI zm{naVIWL;o?m&=NesY=`tRb#EaQ)JRrf%izbBuWg3_*^}2Lg@}L3WkEJ>d)U3Ya*A?X*7L*BBADH~l zvPDw!uiXvGu0)t9O?MmJg8hl#|bmRu5uM zMW>%-047R=v+dCmwJ=pXTR|~aGH0GO_4P55d0I**jWl;E2d%I&At7_53va4v2|S!M zFDs=_ENkB))8WQ2j|l5}{?*mv_8^IEG_7!jL*Yf+%0tV z^9qCbx?1zD0v>8tEQAK7-#1;I(UqV0=1(yFE@Iht%awJboI{K zNhg!1Dz&A`7W>&8)W-?&lvocdblGzE-905yjTERho9K@>y`gaqu7S-~*u%rfm4tQY z>@-RqY`99Lqxo9KTv?;3*Tb$}%(mDlG78jaGQ=`f?B7xcA^!L?c@@Ybu53Xz5zF1GS3 z(SgKj2k$jHQ{_=v_u$kKr4G#$ESwli0ED*}&xfM`D-Yeva6`B%s79h92*f*g=HR&? zOSZ;Wul&Gsie#Tw;-rp+>ms|xTI(Z}PI-+o(d_u8^XhapqvG%IGj^q1st-(+WS`7T ztkO45q&I>!an#l)#J^Xs+nJ7-#bw|nkQYIn0WZ8g0mvy>9h|<8&AW5J8%hG&Gbpfx z{1gMGIg#Phv})tZY2z&Ljtf%)5J_+cw1~LkM#O7TD_%`qVegPL+5#^NwNRpLPK#(B zsD%?Cc`nkyOYBK!o*Xj|k8`0S5-l!>qQ)zJyO^E~TGA?JsjyvlsK?6G$LsAtgq@t$ z6l+z}jN9+bc9Wir=DV@ zRQ0fEYLh}IbrSxU_qdPi)%YxJ%~2L5+zW#hns8p680&oi$r8 zQzI9~bQiTk*`#s-K*4Ud=Amqp7waC+#H?sW|FNTldu`SD?QzID#&NwT`jp5B!6HC< zy(SDM=%LPKd4+*4hADMuq80Y>Fl#dL;>evcGOG4c$9J;d1M#aP$Re=vwgbEtS0Y+{ zbs^ER>bI^38MumeU~D}+?wi7&VCpm3a;AcZs=|IlE%gu=7+@ANNNh7X-R$#LWQ@q1kyZb6`-zg@Rdowa%*rZ?)|-lUw7MrKW8nXhF2FZSLl zD6VY_8x4>k!3hM15F`Zm#yz;Z6WrY$f_n&V4Fq?0cXxLS4vo9rPWIX7>}1z{xmEXn z`X8w3#p<_vVgkgmti8n2q729tt}95|H5nZOS}7m;1)J8Z}D7Hq}?$#rd%$0mPh7>_$LlUisScNWf~-YKAzBu<*u|sT8;IXSruZg z(_M+Ef*);JQKa9S|1piFsGGo$X_w3aVc8rsF#jxI7Bng67_gStz`BCVsf(n6cO>$d z{K<=erAQ%88*1l2C^A*ch?q$_sfPMy(z+4t0Yg=(2jX0*Ypu55Z2YbcODwju67OaJ zIpasWXP)$CPq&ARQzzWq2oKa^$@oo?P7S|R1!51(3_mUa7q%UE87eXmwuVh%E&7V_ zc543`j3c)MmpG_r*o~3oIL>O+LbFORe<=24RnNiI_Rf^*#|sWA_gc57o6crKcuJbh zLl_wl&v6NxN~%MnptKur(t1ozEUyoXxC~o0D-wydl2Q*f(+eQC<8T~jPx$&1K30ZH ztY_MOLZBSvL5jo9uIfPxkr~J+cv0U%S{I8Ty~aLBq>*+NFDOttB?Hu5BbQVj5Z+d- zrpO}e>34qWmRZ|~vq#77Kox(Jiyb-iaLam!?vzzd$-ZP=Twba5GIXp-Tr#^TK%Ugs z%HL`N88yKUnX@w1aJ73``NLvX#sZe?463Lr=U>Up(*St6NR5^j^Z+ z-Ps$<*Cx=dtS@BK7#sNY5G3ucPglunZ!p8MeEg)%hA#ugQA&6M`g)KPJSt@vHf;3+R9dMSe?zfUnv2lp`GR1XIF zu(&8Bqk)g-z>2SXch0c-hEY*EA$yd>_LGZ#sxbainMmPmeT!Q7g`MjYb@) z;N)jQ=1PXSMkjXp7S{|UqKT+m1&`3;Rms@n8I#et7&q-hrXK+)UK8>-Hzo|l>cu}W zHeHBJ0D7r++!x$R`)+2MwFUT1=a1kkb2GyEBTTb+u6evKD+IocXH2`q^L(w9J;G$mhw@dcb3@Sjmzu8;JO+P$D3(nhN0k;5xpHTNsOv*^Pi&woL}kEs?I0z${)n&nvW5L-7AHj z)7RnCj~rGq{0DvJ+OSR|?g^lsbq+t+$lFAspgJB`KQ_qe2*DBiw9oyxFF=u3+W|h@ zMp%a1e`4X4@gkZs%nQawr`MADbb?15Q}Cmd0P)Ew@Lt;E*y=fijxzRdn(^ zS)2g3t-11(c5_<c(2vs#=3ss)NUc9Da0RuCZl6gW#OnDs6~_ z`wtJ%_>!M4evF1uPtNPH4I1_cI^i-VF2}iO*3H*LS#hj#y(Nrv;8xj@JzK5{5hv16 zm?|D{=N^(1m6q1tH_1>A;llO7K2H2*5G(xrrO)S83YQJyfGY5^fUM+F;c`0F+YuE$~%zSJ_bj3ANw-#Q&QnG=uDk(i)vs~Dm)2UOhelFU_ zyu_|9fQfd{bmY#O?ROjsN! zJA0G+z-Kjm3EIlDj&1^>v`vaS{6l6ZHfQK@T^dVGgxV{1H#|k}%r)HRgjUo0)pH*k z0>Oj7z-(0pq6J%g#ZHPREo85~mn$HF*%l{O0|}RufNv1Y51KC`qs3CAC!y?cb_X;k zthK5Z@Vjrhbzw#VS1&b7Hsziz4LNsgTzB+NVBTUyXfCynt8)j;x}jJy5vYP85tDdm zMIZ9a9JZ2m@;2@IOXr8+JF{W=d^~_`Vo)U34XflRBcH|cgT^)4TSEroy2weEQa<&? zYGbo?*ABAj<%Iy5XxE&#>DMH`b{y4Ypc*EiO~4+AopnFMDxz&m+pwsyyv7Y{otTIv zie^jp#b03dC-V=Cnk@}TjD*#lsn&{K9E%~>rt}wt<14pN5jao8{M4phd~9ZXMWW2Z z+=CU@iZL#&@vIE($higglVQ-7hifuhTt_-11{rEH(ob4DWPoGFD(Q?S7Ogn0Iw*te zNL&0iGZvHdGb491sSVgEMDj~c^Dvo0Xw#bSyT7n(c^NR4EvmRm_+Km=psL!2cS`|D zYPz8M3(JlHW7(b1Hhd;KXt)8YY7QJuxaNAfeO_&OIcOC}hjKcUa*4Mql|0kLUBih& z)H)*Ium&Yy{bX)S*421#cF&+g!f>M4rTF++eaK3d!Zw*CXE-PM%HaagyKXatUq&^&N1aTsGI&q-n z`1SI}qYQp@ga$(wq{w|bbZPMPgVd52-AcG8$*aq;jcgYtW)Lcovl%H1D^o!egBRnGYvVU?V2yaykn6Q7Ag$tvbZn}R!)XepjwM3oIs zVL1F8$1+W|PJNK8`HW4$qK$m5AmvaHqV9O4*!-g)UZ3lC5WT_8skiRnuyuL>dl<#p zv{a;0KeXwInH9I5EbGeBvk4?MXLG-s`n=Q`5%0)A$m{0ofV1IajasUVq3^kd(bA>% zk^{KVBF>iN{OSF2NcZYkIcP;NWjeBchzX`iL9J}1IX@s!EV_9}Vl|)R$`;#f!`b;N z>_$G-1Y$H;p3pl+>Kr|H0vO)5&hGrd&J=2qY1?sid){2skf+Og-6rwWU6~_Q?H;~F z(&%f5&O?Y9?sY2U^$BHNRIeC_BvIizcE2EuXu?7HM&SC0v@>@Xlw)m&S6!U2x_jbi z5?fL|E-1>uI_9i~dOeKi7lzJ^Uq-MVUJ%cY459_& zt@ZG>*GfALfot4*wl58}fo0B^b0=t%*0G;(w1kZoS7jDXOd@zS1$d}~4(Fh*gKR#w z_h9@JL?3i1wT#|d449eIb6;&m7*%NT)r&=uvRiKSV>F}nNo#c5w;!PXhBl#?-H+Dw z7l^Kr&zy2#S4f-1pNnu_diycc(?+(tqJlAn?CHmLV{}N#&2!M2Q9LROxL8ABq4e$Gq4f88d!`dXI3kh|OcLGcn((kSOHb z|48F+Eo)LnaqhU4^b}@Q;BvP?FZm=Hm;0mnvJ`jr1Q+vpfn0e-)HHseGbrEUT#a8jXE(0HGXfnJik>k5F2g<1>X-+ z86{Q>9oue#E4<2YpK1#)#KIxTxhUKfwX)qdA$&@R;E4y*b**s zomyA*?!6|$xp%URw%lP@E(w^#7~P2xvfPvKIt7FEV9H`K3+rC-P}cL|Dh`G9QiBGy z#)RX!!O(+>VdKd23Jv0^EFiZMmB_L&B`vYn*|xkS$#fuUL`L5s0>J!D**uZW2X7kY zYUnjQyGu|VX8E=v?9tt;#1FA-9Kq+RBTO$Z-OqcaX2z@SY$mbdl?FyTmHaL*s^+uX z2Q0b8s>Ijv9nqvSWE$&6Bo<%xapU)&*RliBx|hjzuwOThd~ED-np~me5!Ij^yd%vi z9UAnI)6g;5K^MEE`RMU=J>Qhh;P6nc#J1G+3R9Xmm$y z3rOmc1tHQ^0 zJ6*cqIaW@zjrX|Cu5KU{ml{AfQjN)tCNSF)I|zjfVW~pr!{M2?PZ$8gGfCMRj)R8- z4GzhDpt;85_R3wd-2<6yOx-5Hip09KRFG(Vc=W62+c34{=;$j-_2bv2;i)NrL)wRE6F+- zq%F^yV$QOAZXj}8%XEExDL?S83=&A>+b~K65nt5%9+~Kl2%so($o)37c#TbUe!UQ? z_t=}|WLASJb=A^^UH6n))v!%1LrOu)%%_y2A(#g8XHv*~_+`nP6 zZ@pZ2d?XDWb8Q>Obn<~<;;$!7foHnNsnS*~%#D}}TT-{QKK%bk8N9G~m@g$_S+nuD zhU}akmg1W5)fkbhi#Mb`<5tGzZDh59A?by_GX7yslz0JODS{+?JS6GGy|J8px~cWN zB?og4#~aKxE@w`1$!T)i+cmu)lP%7!g{9`?MwZ*3VD)m0L!73~L=rW4wa>_b z7|SV^Z6HrF(pZ*9qlepmnflpHMX~W6eS4j7rgARJAHE_UF6H{Ow10T;#bxu5U!CD@@tH5aMM>3 z8S}&4I_>iabE5bWZ=H2O`jM8jEsi()wcqf0? zeBc8gjWM>-6Un1>R{xLsv>h#%ePc|AcN1rtRnvtx*zJEx|6XRE_+9~SeGKU2z- zPpuau9kd7n=w12g$anZUap{?6l&kEr`i<3`vwkyCA>w|tgTRa4ILC8fntZ|&Tx5U; z5{`DrGvY<9IgQl_Z*4)wG=lu}pa*}Ur$RXA402j$w2grDDFAx=SnCf7lgo9R8&k2d zC(zD%!~-xhhkAF;m9(lanw+hiK-iIazUg@8(vQ%~+igHSsELd1;4w6w^xVk+;!BTP zvN8mU@ITDK%}bO%bMeY{PcF_%1z(OK=o`7ZuzUv?6qisj`Pu6=AU5yCi51E`3&IM~ zhfWR)jH4;oB;2GyRU|-by2C9&TzfUzV!b9|Z?K`@z z!GNb|H3bH62^PRW5t#RKl zK{8T~mv2$wc2i5D2OA?{cHjfvDS2UXDssPcT7f-A?J1-%eDgE5{5nM3waL}R;`@!h z7@Zyqc1fQ?$>@RL?4q=tqyEP#;tw|JN&P1X+gD65qZyExn<5L4_GChG-&!rJDaE^9 zr9HE;<|-56+>z#jdIl9amvYB?h_q%KkX}aP*69o7DLbY8I73?%G^B{#vHp^noPFiA zlqVu7yyC-qUVS3bfR|lKo54`~y8ZfiJ%ELy{%ytEkv39=wU}D+6oFRg;_?0zH{a`M zMAiD^d+MdEz6M|r_NAbsDo(!>dD`_1tlZN-_<6jrc}Uj}VK_Fnwy8@wmODC4oxt0V zcyOCJADD0g8-AtiNQV7P*>T|D62qLv&SXF3EvTOlY*q0) zprY3)q^Av?eb;%rL|nI0&ZHUamR1^sbLsx}2=!^P;zf1|$9j?t5r-kohQeBJMs4pJ z_d3(=$gh+d^u7P2)a+SRbl-b&xCzp8xLlx`WHs^!s!E+#NlQwhbR!2>R;goBlW4U-g)@4%etjbTp_27A4U zO5`?x?U70R_8eD+ay<(eSFaQPZIn4)OR92d>g8zNDeTY;dlCO@}b8JkU(8?g}|y9&7mm#VIjXTiL^cNzo~3rld!&=DimqkJa4`n#Jc zK_I2Zt^%#s=hw?EK$)cq7spojs>(r_E#|LaIctAP z*N4uXsJ1rUFcsJCt{7`OAH)k?@3(xW_s&XPoO|IP;y;eW3FiZ`RM&n^r@=T4i%lJU z)R`iZ-(xmGUR;B=A}gLZrO~zb6`53MI;MHSTn`a?=$0~)NTgx(DclMQ&1)c)&Mhod z)7jB+em!S(=gp}7bxPuZq(s%@ltVA~;Q3Wms43 zV!p8IQ!ydDp3_Pb5wP(q?LbCUg|`tG<>Y~+T^`OcL%bC&gE}yQBR9kSs`i%3#5FA- zOZqaI>W!S%M83ZEGt@v+>3g~zUDn(llzBVCq*>rFBWBuXWoV51G91Ip_cP$4yI+@I zK6;;dy%?V{XWP5>pL$b3wROI7RVC-V*YXbMmDHj{bUA44&b^WCX;+Gk&er%tL7|(tZ>v2GE zvviQuOH2C5xzXX3L19U{J#`<@n||%wIWbE?>@1d>TKtW-W?@n`m58OL)=DHSqOw;M z%k1_cI)_tGILx$RV#J%K1o6Sk1C>9=Rfw)9O+O+3gDD9e0JwK$IJ?Tf(;~cXH=B`V zNnI!W0r7ceb;cuwZ$LRj6=gNRZdt%O&7KXil2)441#_-VwczF_pFQi03za)Av2NYI zp}EV0j{D0evE9!rrdBOoc5pnA6%D=`xV2xT;Y9`B!#;_)1Xqg0E~6(;O_NCJO`)!M z5H8>{u72DSnw{oU0X>a5B>2*99iy#`*>-f|L<4e@_(r{KxW!v{7Oxrk5WF z!?oYb0A6Xr59X6lE?ViBInTx}_ME{v7i==2Ct`FG3v_n=Axk#pJD zifJ0Y;A-RU3Ww({x5E*LOG32bSL3pkHS=Sb%nUYoP{1 z?daN^Xz7Y$8$Yq|hn}v1##7J&p7{qCmWCOry75Ti0l*E|ReSrRQpv?z#^<&vsbrr9 zHReI;VZ0I9jR~r)i8$V88rm9Bo)W6aV|UgP8BzUzc;~OrpcvsuMa(B2!4;}uSYBbG z*C}YH!Y_S|I?u0|j0FNtTM}`ZA0iIiV2c znOV*xkPx4#M=r8GoGZ`de{^$NuJrLYacpkX2r>d3le<0Ucjp)_UP>vgmyCL>jYfDB z<7cvSEcW2fpAWR@yADlgIg@Y5|EmF?rQV4Ls|R$_d*qZH*fBgE)s=QExouD4KI=T> zO-#^t(rCuHaz758i}yql^2k2o0?vmP?BtZ1o07sAbHhp#?{9H?t|#=yQ_>nAyf?1_ zsq|*f`Bn+Dxa5?CngE(ag32mP>d&Yo|8!cvMn(js4}03y*!o>V?c@FGcW@(7oPFeYb z$hCC~Z5(zffx;(`;)mhniVj9`x41X;7?A&v)L$chk;pqEqQS3K$8A5k4AANSMoNEq z46@8V{MIBerRs!`044is&?Ocm%!oyP6%IW@zK zoSZp;!I2C!F21?N4kHU!xfUx|KaBN%j8!>L#DBh(AFc0UT@$FHXR^KZVtcw+vI82J z(ilXVNK54oivE_?6yneP-t<^~nqPQ>h;%3&EZWrqstE?b>V;4&jY6hSC}yp6y9rnPO&( zLhb5(ua$+Ftl4uFJD9lUz%5LKG|)_Prx{SITE|Jotm6j$!~TIK;tQzVuARKw`y_U+ zLu+g0H~Z^&8|qEBPYhIzuR=@eJ_}Vxi>25V9anV658vIx(*{6j5&ncE839}>A)-!cSn*NRiwDp^1*A+#es3jrJir>W`f;g_`*(}v5d zBShp(dy#E2b6P5XNv2FA+Qqfa&J56790s=ScB@wi(`$m0gO^TEx8X8d0Xl>d^?UN2 z%|^6^S|>|OcW_cK%dUA=rhArnqr}JZc)r^)jjUMfn-gI0R6TgMvfO+L@YCD8j>Mau zMCqoC@WCCWql!Ds8uIZq(%{h{;(s>ceBC--bt#tK194bL&K0 z0dlv2ja)>tH|1jYkP$N&F#-1Lw$%UD8se{+U2M}a-6zj-QMViv3?I+Wv&mnvmv_jl z$&F5y8oK6xz3dpmQr}=sL1wSL%XLasUp`{a`DBFPR6p(U_&U4ovZw3Q#9)m`){Nb6CC8CF}EIe1|zF$#fs8#c;=b9`mfV_O< zukG(;8Zd^x>=0Za47f?+afPL^wVfoK=PD%6Jem_pU3`ahrCZ>tVkugzaK`k{$#AAe z5&f4kzkz%!reV3SWZB`_7HWrFgnf6oZ9Px?fw%-dJZ1P&f3GK0Jk53BQhU$}5QSgs zwx18K_|%4R?ul`jH471{ZuD^LLmELUPSBMEl`5cKrz)lwbWUJWK&S%Pn0K)7*`Xy* z9*Lqq$#0&hd%&H0^9f}u9x3w3MQ5$T02%y^OCP8M0;HvL^I5IffWZYogldg7k!R!1 ztxxB){fGx`Q>{insIp(et=(kTj#Kb|3$OophR0ami0=kP!Hl9ukCiQ}o+84q0z6!I zcJdm`3+bP{NA(?APBxA(Vz1H8KxwtHXGW)EX zIl_iqXMN#z++0(DhOG0iExIcX?ai`PneN*sqr(VOrqqb{;KP{fWDKp@oM_j&;61DJ z6K$r2XtBIzH31{HOG8oB0%o}i&DPm~3R~J0e=jvKMU{tVXJZ^Ia;+!FuCR3~fj9se zftmqlUkS(8FoFSSki!K)Jl;wSK*+Eq{+FQclBGk}uI#o9Zf;z`#Bo&BPDbMQb;?Id zy#-&>*dTNfG`XL1m19mUU6VHXhlh$Qzr44l^vA&`o1x8@|Ba=E18 zYq8?tv~_^@!i_-8Z0B|j3vEu+S3(PnV$~OE z-)~lD&LsPjjQ)FxBpk>a6;t=o*=ld7fugIa_^%qP(}ysF%87fK`9#aA&sNI5y}U3m!$Q-~j)AdZY$-H=&d z9a978Ewkiz))xYTKOq&(Z+JRt$}A%~ywek;29ZRzmS07DI?$F!V$2C%=|2bh#yy0jN)kFe&eeY8#`1bLi`%yLZC;nCFgF5@4mllO=EpYR zW?WxUn`5moDTJ5#uavghX$$0?eLeR5I2nj|9g!j*&NXM!7DlkKP_J!sw1mz?&6Vkz z-n*$*RyLxyhkR+{b+J@)-ite+MSyYpd2c5`xw|8y8xy$4!RNnxbEkAvd$9P1fxaxV z{;huw6oJ#x*MWsPaw})-6R-Yp+Dj@9nms8xTJx~?0$e3|6OpY?~M##TlZoXOZVS1Pa#2q@&HPMb0dyx5Ht8~_ZOp=6~8 z+KR7J7)aMHgz-sZ1$HA}2UYWEN|J^#*Tgp?G`Jyuc(@S8jrB{@ejFy^MWIA^CB^kI zf_|p!)3y9OxL8u=+rqlMuf>N?PN#rg2%^U=(5^*$&F(xQaQ^~a3%fOD;VJ?C|_c`@zhf(&SV0Fqma;+_3r6z@=dzLVQr&(>D20`gu0 zqbBotxn`}$CkrF36+{UoWWsg0ikz9Po=+QmN=bwczr8RkiO^1zxU0Mr);_Hdi@JgR zEJxt=;ocsp!2~PHx#p&W(Y=RUgDPf|Wmp{;pOlYKSVx}W=;*DUJcEBmp0XRJ@FHs0 zk(*=K8JNs{dDF5(fVd3Pz~#DWFc1f&n&c zV{iAZwgTr$$?$;p-J{4JR}-aiT;Ex4WXR}-RLtUDj|7X4YOT5MAG+L9R*di&6!O>w zJK@iE7dQU+)>bi9rz>U-RK7lhJ5oGtG9Sm#i&Kp3uqwSfY+K*wb9;2lM`eDavxJbN zce(*r%D56v%Y%QbU;A=T+$tec`#h224cwW?pB;;&_j$lbAV6a? zxZOSqEGbN7$2VFKcy_JWL6qj$&23h@d01NisMPR*nGEKy1{l>;YE$mO8=@|g|#}h^r;aycb(bC{^K9!tv%jc76 zy@wUi2k!!-me9J0 zja+;?THaW@gAWd#sBqyThn=ujmE6rq9=Ndc0}XYC%~QCFhBB%NvRbKCTZGng;mtTN z)wTBJ#B#9ybVzr|KHn*A9$~_>1pk--2qNnTRPvFex=mV5G~z#>^W$wL0S5(Ihm=HP z{?(&cFu?oBY(%R0ujQ~fILL50XdWy0=k{n!8!iZKR@+W#;P@8^?F>tZBtc*H|M+)J~ClN1U2l9U9b9{v}8*5Nj$x>MkYWG<3co6 zOI%O424d^}_`^M*2e;8HZ7kiuJ$#tqBWyxV#eJJW$q-4*_knn#RA{rOlg)&+DtxF? zChBZhNg`ui6JfNBL6F}m(?Kuiy&kTHELCG48G>Nw`=S>_tKgJoGi&A&mQ!_d={K@} zYR^St8@=KNS?56tB7&u`b*0>zf+-kSG!jr#p8Xpr{eE63{GZf6Pk0R95rLs`$l0>- zAff*OmaEW5ZBFY6zcTS4ue09l0>1P;9e=l24P{|aMEM&X#0H%bdo$pV3m|7WjJ}~@ zAa5UC|CyyYK5he>VXt4dU5>N?cQLvfk93e$nUA6@2fx##%{tLV32c(02w3fR~FaA zYvFl!3Tyl^w#Ny2bG#HJWW1l*X0pK|=j;^DG<5-9nA|m!#Rdf@P-6&Q#3&YC80EG3 z&Wc)y$d@z#g3R|a@Xcoqek@Hd4)gr1&L*utK6Xy5g3rCC@i%&l!EXfD6dl*Wae(7& zq-E5nz+D{fpiwj_hRYn7z?b9?_SV1`Jaqfv=IR?z=!_zb-3ifMT!4zI%M=A z_l~x?gOqUPotx$JKiP<-=qxFWcm_s{{KyONx7O<#9s<2(scMcnB~f$Y`pg=H_rM0J z$he08NLEEmHhZhcYk1x^Rm{)ihJKU@sro)oe(w?mdMk()A+ zIp|163tuA=FsKr_)AI&aP*_eU1tHRo;-W&zzWI^qdz4&&7aHf99R&od@zyZ`6JZk! z$XA+}t`ZGjeS}|Gq<(ldp}RX`aM*Z7R>c{g6$Af&H5N17G#990Rkoo5g|7>$=12#q z5Tn#h?4()^b#qC5(i zaFef6UqkmEP(6$%_QUE;)IOHRO5_k3c7Mvwm`naTM_kiUIZdn_$J*$DJSah*-MJBc-m`N5&5QP)bl(VhEF? zQp-3O?sR2pt!EOSm!N8u6VnZlefmbGSuV;wxHGGf!yK=V^BQrKQ)*`2CPS?Un(4!N zP>|@9KXNV{gS5aBpPYca88KV+_~NW{Yfud=2O?X65p5Z)!OF1>@i(Ac#sqKn+}NrV z|L3-!#C3#OiP+mI*l5?(^74KhgoJZtg3+<)p}OWY8|vZ)d;(!ycHL*6pp40aiuRE& zWl3jypNejU@yZu}0)log#+5FU8Il%;x}rRkbm(1jI==lz0)ilt!GaJc&7!kuzP_Zk z2f3khJK>A%&)9-D6c6fNxN5ir-~wgf>R6YS&OHS?zd%Bnd(soT9g);Z5@vAZJUl5) znDm{?;H4=kBiT8&usVNfhTUUxK;=vVSR#VdG}InSlLADk{X;(ef!n!a&V2=OyQH4w z0{u=`gDkN-hm}hNK1(f08Uws4g$OoTl)R!DYTIcL2b|W|4JdoXl02O0&H2(@Ub|Oo zXDk{D)*J;M2v*CC4UtTqu(K0;37B-|vdK9j;@7;Z&_mAMj1WKX3YTmWTQ6KAV-ARB z;wTgc0Lto7O7`LFC-WGF?zeNp9D-=a`g>0d z{krId@bLtoIpNX8lK+i#{twNH!12**;@FZEkB9wpD+}f={(oDc{vTTk|KA__|6z`J z!Gv799pLetP4_g${%T`<3Z{xN|H0B^scn_ky}vAS(p(~U0r#uq(z@>(?WXeTF66(* zQo%xZBZx*Gf(G#Ds{3||f$?U#)kZ*Q3aIzxtmjlfD7IlRP?LSKYvNFL%UL2Hi}Msd z)-Y~=9{pjJSv!Bh&arrK;FC?-qQ8-m@{&pr)1QLRJ^wP~d)M;wV&Fn`+LQCqccC36 z|8s#iIXj$pom{icXG;sR2a;671P+23=PqTPLvmb{?JA{}t{1%8!Lgwm+_m7;n3B43 z6q7%9WbPGk=nm*+c~JFYI>Q*SY23~%P!p(T$9Of5JhdyS?d~iqT1-wuFXOfHyVH76 zT&>b-pb__H*wzV~j&hMxHg-raM%F@vJ!|&D>y6l-TI>@#i}7CeKm*y`oQ?9uoti3l zt~CJ`%E-gRgR`CtpY#JgvRR~h1~6F=r;Ir>yHyCbTAjSs;`v~8R;vldny#uzJC z5L~@mf5sNK%cFDuY(A_H5Dr~2SRm}#Ao0}-100qA0`1O5~)J2>EZHv93s^q8TG5ORez5sG7 z#Y>D$6m2$T$Fr;Cn%0#hRKbOCX*<@nGo?G-a>wO$BnfQ4B;%oRkbO){s;{hb-+LPE z6j$9giYDdrAaRGb;qeZ-X&FKXS^9ssxdRSeIhZk2`0+V?8;)tD^@MOy3on3gPo5f+ zigQ(u+}a{}bsFgIuOvTKcY)wx-H@`IVQA4^>PX(0lWnAcjDUccQnL}r;WN(>N%eS< za+Y(sSgoy2X}R~^K0MQ9H%#-I|6nF?6qj8X{+QMJ=_x4yQ%KLXi;U)KJ-_T|)3!63 zlIM`~z6){K>Y4N#0pY)5dSE4s;{{#xu88$bK1vvcy;jIcJbkWpIxd&hbRuYLy=GSyE~+ZDoYXX_mHW=?q)aqnS)im! zst8!l5-p^0VOpdy&yF!Cis{PpIeGmGCMOFT&!~)x5tztfckKjnK0KYX<0A7bAHEj5 z;U2kXd_I|EyI%UbRT6|iCTrC*;7MX3H@8TXh)dfFHrUwpERx?i63WG1X&@OZCI_-$CQDz-vYOyxc@ zt?_skLkYFd4TU;`R_n+mJ9Z+zspRC3mhj5@Nb8V|@b*@0r8-f8wfR}+*nHs#+@ELJ zhKoZ=D}>ZOEZLiVoM(ks*8T0sFd2|_hfPX4rIpf*oe(P=&gIh4&E%9ti=~a8M}YXL zVl@SMz?ouwj#%Xcb=opXcQc-xS8CWH9fO+JoFs%)_<^{29c{(SNv@`abFt`oaLrkU zB`WEE4D-*AIV9<1EmsoxU9X1R#Rp@J*&mQPsE^v#p>ERR8o$<;xE9Y`$C)ct)b7$m z>otr`MNp>|j}zy1CQ1fMZ+v$&yZ+ z1U}B6xVgxAj9)cPjFi&4_^y-wJsY2&BsaZoq|2ffdB{#Gj*Qp#aeSY!* zil_`IwsMcTUJZKeFRe`xjK)$$0(n3jnpf5p_Ojbq{}s5OO)+fbRW;f$U_p;iJHIvY^Gwj1F`+$(8r6P%9H4zmF{(s{~xlf;$wo_#oTVB z31gAHU*higt{Hw#-Sw-%y3Nb&m-I|GwIYaKc<%OV#jqyQoed1IFtWx`gP)nIAnwIV zy{by~oVJ)9ORM$(XjehMy%~#^&ce6uh&6r*smTMQz~dRZC?w*zaVL6>1AiMsR>v^&Wp-JF$ z(+k*zG9Gty-`pC+N#%mzIyhv)mdFs7!gT7h!7w#QwGEQ*!Y%N`%g~yIFD7sho*(l> z`jaG%B7<^kJ33P7F1xKE*;Ag>URGK0P9lpWnOfoV_tffCPl@xqb9jR2f5b&0lpFSf zpRU&CXE+yE$yd*)#Xh6*=_;RH>%@#2ztm+mQ4mtkM4+JI*3@jz`&d^)+eqM_74p>4P!=xvlbTL#$5ZGK99js3CietajbudI>Qg|^NdE<5v z6;xQx^P$}&Q-Q93j!WZAeTVrs14NhlDyRJeG~S^#R2`MPnAAjm6{cEYqnQCTZ9hVy za!YQ%O^iJ3 zmSwE{=zIa@(>SL&XH`hnYW>QX&O)igVY`Es9cb&!YL_qJhMO3_x1#e^4j)Q9t+7s2 z7r!hk$j$inIPK8`B&j9`8r%L;PE=D)Q9qcW@ot8A z6#T`gEk8z+#Pv3@X5ri%WHaG?*5}av{UL`e3{Snpgsn)xb3+-7mWjWMi}Y{yO@hbA z1f|Qw*l%^oJN=2_;mD2z#noYHn-HgjpSP8eyS9}hYES;$L7T7aj7Z@&?W@y1x&=x= zNcECH@tfj6uT!XsC7FE|;1@3v3)aDeNu?|Uwp=lqdx*Sg|d+IweYs-WB)aG$qk1n1qeW zYH*r5Z+|nR=|hl{8>y_fCyqviym?z;9H^`JsW#*dhcB>IGFvcb1AnX(pRFHrpg!aw zw#>MZSP8Pc-wUYDgK980%qQ!Vb4J{QI(w{*fI(GDE~Xi$HiDb-4xaf;(80SMnCE#+ zaHC}Y#VUUwp8u>1N~Er|MpA)HIUY(_$w%yX3W|-SLxE2bq-3~l->L?sN}U|pm#_Wg zLQqhw>u^P6`TRDPD=pCBcKKVWHVfeP#Z1R&eW8qE^-pUlZ{YI#GG|hgR~PZ{qw)u< zIIA`b@ZXWpVd`|jXXx7m&nPhVoRK@&7Z zqsS)lPQEMGgk(LI``8BAa2kSd@9P5~oRf6qQ)tF?C))O4#`B&Y<6*-H<|S z^F)jzZKVw1H_^2&e+jnv{svC{VEV3;X3_Y_fFs_67Iz%Mrv*F41XVVBq>z7F&G>X) z)p&WWFDrNqzrBaoN1B8V(J}Wy@X_dhuAS^i{pQ6B=rd74K83#)hw(8leCx#bceX!& z{OccoIclFonznbAInQ4Xd47AXwJ022P;w8C6D9vbXkJmX1_#4l{ZgF+5wk|TXgZ7>N5XNSNG!1gc`>IoJDQqGPhh>6t*(=6>^!5yJ{x6 zMU6C<6s3ul&1HyGW6EVh35zV3ST12Q5hmyC#A(9lif6f0goU$CJ?A+)?;r3!&wF{k zpWpku@AJGFjsI2xKlJY?hr17>w;pfdmud&dmNtV&koas>VnN$w0A*bG!ar6SI$!+X z@hUZ8CHqvnB_}@HJRG;7%MA$hpk&5}OEcgYPUxM^jxB>v zZ0l2DV7dU%@GQO&sUy@2lUWj<)4Bu4?ztO#(8{^S-ujIS^&Psdo&F2x&ydC#-vQ|| zoEcwE^VvkDxI}~5l%HhQaNzQsv*W?l(lzkHS8p|z*|MdcE-G!zXodCq^Qt?&t+%Jx z2V^8V|7v@TCr#V0A+q=Ckm!EEF{7us`{fFlGTxAP)20)`KSx#eB7ht315$@$083AI zfWpJ?t|ZDACo(RJa~6EErY=j5Ty+!*2gxm~^fb7nNPm&);+&Ao27|I^=1Axu9mS1| zKALUP<7oM%g*z;ye9rUx;w=&+ZmCL3Imz)fEGzB<(QrIZPqhU-<4vqggG`hDjOaW| zP)h34kgwnYdFmk38&b=+%{!SNBA0z^rSvClvTQ#l$~S?;9+f>ObyoN#UN(!xOcfnq=Q*NN}F=@Uv;d4E}ebtGWHZ{u8+b4_g zppv1*bVw7p*Q9?BQ_{izNYOI5)&Vd;VO81G)Ma{hNQ(q$pp*2iD5x8aI^lq*ovBH! z-+le-(|mT{7%+mo`D1CaVHNZ!wz4>G=aHfmJE3pK4a&c|9thDYdSz>Or&DkMt>EW% z+Zv(MAz)~91S6hneX>*?LjC?yM`Nj3{J0rv4V8)M%ej%Ko7f-FZUJqc=&mx7iNtKN z8Wl72H`aws559s*&#=eLnvdaPx%I+>+bKAC;a8+yWeV^+TKH~(DZaOVOusbnf@ z%7kj-4;A;@I0^PTqpdqa4Rks@e&J>!np8N+>QV?}s5ogib|$@dMm08c&)XU%yL*GWsI4%xYlHq3Iwe~3Gf)9lhE)^+8)?l7U zavxw-e6^9mG5mTe-%DovA`c3{Wq9uUQ0Eh{I$Ef%K51^QRl(evAlOdTCG0!LQeqS{ zcC0^>d+u?l_ms6HQ-I-xY5!C>H(GH%eDDmvba6o>OqKF`0l@^ATit%Q!|Q#r*CXeb zEKN0evc&0Q*ip~}ESPJr`uw~6(A?N2UIuF3z>DkQQhZ4a#6b5pd4z*XU*_PYqXdl= z{1t0@|6Fe9T5V>$*qIV`_l@n3>aGSz5{9?~Zle&mvjVJXex^T2VlYrw2LbYtS$B_*VMjJlW;pk@Qa*W4>KoMaI`LI-K(MZFv!~ zgn&pV#yLc7xOvbV0Sy>tISTR(G;*TO!VB)7kAC|a&VCvvx}-~>TX^W~O%e@@FQKFL z7sBjzYt;wBw`767?aHTQo;9MB7cTea7wwGTE^=NZq*iy0!1&iB@(WUe_kbo^$)Ntr z%2^Fx_8?q^cWWYa(Aqk-%Dtg|5HMBMTR`pF@RFf{ynEnRJ(y>KJjBr|+Pl$5-%VDK z4YSqRhm5sFa^-;dxg@prLQdTI!{s8K?lyicv97r-YEj?8IwV3&*jydm9IEXCNq++{ CKe?0u literal 0 HcmV?d00001 diff --git a/source/images/screenshots/html5-notify.png b/source/images/screenshots/html5-notify.png new file mode 100644 index 0000000000000000000000000000000000000000..030450a0494a658602f1851f30d8e7e45d492ef5 GIT binary patch literal 173351 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 z z=0V^DG;2DBHOj*L7hAuBnh9{8ljL%q zyXYV}Zny`_LU+!8%;Ef+e5ApDUhfe9@t<9&HF;dE?HK!i0H%_M6951J literal 0 HcmV?d00001 From 0fdd734e6acfaa2b34d2a5383ebf0767eaf937c8 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Fri, 26 Aug 2016 12:07:40 +0200 Subject: [PATCH 44/80] Sync with PR --- source/_posts/2016-08-14-release-27.markdown | 163 +++++++++++++++---- 1 file changed, 129 insertions(+), 34 deletions(-) diff --git a/source/_posts/2016-08-14-release-27.markdown b/source/_posts/2016-08-14-release-27.markdown index f4423a19df6..0e35b9d2ba9 100644 --- a/source/_posts/2016-08-14-release-27.markdown +++ b/source/_posts/2016-08-14-release-27.markdown @@ -1,61 +1,133 @@ --- layout: post -title: "0.27: " -description: "Automate based on check ins, slow internet speed or just stream a camera using FFMPEG." -date: 2016-08-13 12:00:00 -0700 -date_formatted: "August 13, 2016" -author: Paulus Schoutsen +title: "0.27: Notify improvements, configuration checks, and HP ILO support" +description: "HTML5 push notifications and grouping support, Configuration validations and checking, cover, and climate." +date: 2016-08-19 09:00 +date_formatted: "August 19, 2016" +author: Paulus Schoutsen & Fabian Affolter author_twitter: balloob comments: true categories: Release-Notes --- -It's time for 0.27 and it's again full of new features and fixes. +This upcoming release can only be described with one word: **Amazing** - +As of this release we have done [10,000 builds on Travis](https://travis-ci.org/home-assistant/home-assistant/builds/154660811) and recently passed 900 forks on Github! We are also fast approaching 4,000 stars on Github. -- [Fritzbox] ([@DavidMStraub]) -- [HP] ([@Juggels]) -- Media player - WebOS: Support for [customizing][webos] inputs ([@roidayan]) -- Device tracker: [Gravatar] ([@robbiet480]) -- [HTML5] notify actions ([@robbiet480]) -- Camera: Support for HTTP Bascic and Digest authentification ([@meatz]) +While this release is **Amazing**, we had to crack a few eggs to make an omelette so some things are broken. Please make sure to read the Breaking Changes section below! + + +### {% linkable_title Notification improvements %} +We have some excellent upgrades to the notification system coming to you in 0.27, courtesy of [@robbiet480]. + +#### {% linkable_title HTML5 Push Notifications %} +This release will enable [HTML5] push notifications on Chrome/Firefox/Opera on both desktop and Android devices. This means that you can send a notification to your phone even when the site is not open on it. When using Chrome you can include an action so that you can control your phone from your lock screen. Thanks again to [@robbiet480] for all his hard work on this! + +

+ +

+ +#### {% linkable_title Notification Groups %} +Using the new notify `group` platform allows you to cut down a lot of duplicate automation logic by combining multiple notification platforms and `target`s into a single notify service. Check out the [docs](https://home-assistant.io/components/notify.group/) for more info. + +#### {% linkable_title `target` is no longer needed! %} +For platforms that support it, starting with the new HTML5 platform, any `target`s that are available will be exposed as individual services, so no more having to remember which `target`s to use. Please note that the existing services also still exist so you can keep using `target` if you wish. + +### {% linkable_title Validate configuration before restarting Home Assistant %} +Ever restarted Home Assistant to test a configuration change just to figure out there is a validation error? Well, not anymore! [@kellerza] has added a command line script that will validate your configuration as if you start Home Assistant. + +```bash +$ hass --script check_config +``` + +### {% linkable_title Configuration validation %} +This release includes a first big push on making sure all platforms contain proper configuration validation. This should help in getting your configuration right. Thanks to [@fabaff], [@pavoni], [@pvizeli], and [@nkgilley] for all the hard work on this, you rock! + +

+ +

+ +### {% linkable_title FFMPEG motion / noise sensing %} +It's now possible to use [FFMpeg] to monitor a video stream and detect motion thanks to a new binary sensor platform by [@pvizeli]. + +### {% linkable_title Component clean up - Thermostat & HVAC -> Climate. Rollershutter & Garage Door -> Cover. %} +Due to our wild growth we ended up with some components that had a lot of overlapping functionality. [@turbokongen] took on the hard job on merging them. Thermostat and HVAC platforms are now combined under the new [Climate] component. Rollershutter and Garage Door platforms are now combined under the new Cover component. You can easily upgrade by just swapping out the name. For example replace `thermostat` with `climate`. The old components have been deprecated and will be removed in the near future. + +### {% linkable_title All changes %} + + + +- Merge thermostat and HVAC components into new [climate] component ([@turbokongen]) +- Merge rollershutter and garage door components into new [cover] component ([@turbokongen]) +- Alarm Control Panel - Manual: Allow returning to previous state after [trigger] ([@tobiebooth]) +- Sensor - DHT: Allow range [checking] ([@open-homeautomation]) +- Light entities will now [expose] their features ([@shmuelzon]) +- Sensor: Monitor HP ILO sensors on [HP] servers ([@Juggels]) +- Sensor: Monitor [Fritzbox] Calls ([@DavidMStraub]) +- Notify: LlamaLab [Automate] is now supported ([@danielperna84]) +- Sensor: Serial [CO2] sensors now supported ([@open-homeautomation]) +- Sensor: MQTT room [presence] detection ([@mKerix]) +- Notify: New group platform allows [grouping] notify targets across platforms ([@robbiet480]) +- [HTML5] push notifications ([@robbiet480], [@balloob]) +- Weather: [Wunderground] now supported ([@arsaboo], [@Teagan42]) +- New check config script to test validity before restarting HA ([@kellerza]) +- Binary Sensor: Allow [monitoring] a camera feed using FFMpeg ([@pvizeli]) +- Cover: Z-Wave platform now supports [positions] ([@nunofgs]) +- Device tracker: allow using [Gravatar] for entity picture ([@robbiet480]) +- Notify: platforms with known targets will expose them as standalone services ([@robbiet480]) +- Camera: [MJPEG] and [Generic] camera's can now authenticate using digest auth ([@meatz]) +- Weather: Forecast.io now can show daily temp/precip [forecast] values ([@DavidMStraub]) +- Media Player: WebOS TV now allows [customizing][webos] the sources ([@roidayan]) +- Device tracker: Allow tracking devices using [Bluetooth] Low-Energy ([@open-homeautomation]) +- Notify: Ensure [Slack] messages appear as correct user ([@technicalpickles]) +- YAML: [Secrets] will look for values in all parents folders up to the config root folder ([@Teagan42]) +- Camera: Generic camera now supports [template] support ([@balloob]) +- Slack: Allow sending [attachments] ([@technicalpickles]) +- Device Tracking: TP-Link Archer C7 5 GHz devices will now also be [found] ([@dpford]) +- Z-Wave: New rename [node] service added ([@jnewland]) +- Wink: [Bug] fixes ([@w1ll1am23]) +- Homematic: new device and controller variable [support] ([@danielperna84], [@pvizeli], [@mcdeck]) ### {% linkable_title Breaking changes %} +- Ecobee3 occupancy sensors have moved from sensor platform to binary sensor platform. +- Forecast.io entity IDs are now like `sensor.forecastio_temperature`. Previously they were like `sensor.weather_temperature`. Apologies for this change, but we needed to make Forecast.io more generic now that we have many weather platforms. +- The [Loop Energy][Loop] sensor configuration format changed slightly, please reformat based on the revised documentation. +- The configuration for the [SABnzbd] sensor has slightly changed. The prefix `type:` is no longer required for monitored variables. - - The [NZBGet] and the [SABnzbd] sensor were updated to following the same style for the configuration as the other sensor. If you are using those sensors, please update your configuration. -- The [Loop Energy][Loop] sensor configuration was updated to better distinguish between gas and electricity. +### {% linkable_title Deprecations %} +- Using the thermostat and hvac components has been deprecated. Please migrate to the new climate component. (just change name, configurations are compatible) +- Using the rollershutter and garage door components has been deprecated. Please migrate to the new cover component. (just change name, configurations are compatible) - -[@DavidMStraub]: https://github.com/DavidMStraub -[@Juggels]: https://github.com/Juggels -[@roidayan]: ttps://github.com/roidayan -[@robbiet480]: https://github.com/robbiet480 -[@meatz]: https://github.com/meatz -[@pavoni]: https://github.com/pavoni - -[@abcminiuser]: https://github.com/abcminiuser +[@arsaboo]: https://github.com/arsaboo [@balloob]: https://github.com/balloob -[@corbanmailloux]: https://github.com/corbanmailloux -[@Danielhiversen]: https://github.com/Danielhiversen -[@DavidLP]: https://github.com/DavidLP +[@danielperna84]: https://github.com/danielperna84 +[@DavidMStraub]: https://github.com/DavidMStraub +[@dpford]: https://github.com/dpford [@fabaff]: https://github.com/fabaff -[@HBDK]: https://github.com/HBDK [@jnewland]: https://github.com/jnewland +[@Juggels]: https://github.com/Juggels [@kellerza]: https://github.com/kellerza -[@mtreinish]: https://github.com/mtreinish +[@mcdeck]: https://github.com/mcdeck +[@meatz]: https://github.com/meatz +[@mKerix]: https://github.com/mKerix [@nkgilley]: https://github.com/nkgilley +[@nunofgs]: https://github.com/nunofgs [@open-homeautomation]: https://github.com/open-homeautomation -[@partofthething]: https://github.com/partofthething -[@persandtrom]: https://github.com/persandtrom +[@pavoni]: https://github.com/pavoni [@pvizeli]: https://github.com/pvizeli -[@sdague]: https://github.com/sdague +[@robbiet480]: https://github.com/robbiet480 +[@roidayan]: https://github.com/roidayan +[@roidayan]: ttps://github.com/roidayan [@shmuelzon]: https://github.com/shmuelzon -[@tchellomello]: https://github.com/tchellomello [@Teagan42]: https://github.com/Teagan42 +[@technicalpickles]: https://github.com/technicalpickles +[@tobiebooth]: https://github.com/tobiebooth [@turbokongen]: https://github.com/turbokongen -[@fabaff]: https://github.com/fabaff +[@w1ll1am23]: https://github.com/w1ll1am23 +[checking]: /components/sensor.dht/ +[FFMpeg]: /components/binary_sensor.ffmpeg/ +[Climate]: /components/climate/ [NZBGet]: /components/sensor.nzbget/ [SABnzbd]: /components/sensor.sabnzbd/ [HP]: /components/sensor.hp_ilo/ @@ -64,3 +136,26 @@ It's time for 0.27 and it's again full of new features and fixes. [HTML5]: /components/notify.html5/ [Gravatar]: /components/device_tracker/ [Loop]: /components/sensor.loop_energy/ +[cover]: /components/cover/ +[climate]: /components/climate/ +[expose]: /components/light/ +[Automate]: /components/notify.llamalab_automate/ +[Secrets]: /topics/secrets/ +[trigger]: /components/alarm_control_panel.manual/ +[CO2]: /components/sensor.mhz19/ +[presence]: /components/sensor.mqtt_room +[grouping]: /components/notify.group/ +[Wunderground]: /components/sensor.wunderground/ +[monitoring]: /components/binary_sensor.ffmpeg/ +[MJPEG]: /components/camera.mjpeg/ +[Generic]: /components/camera.generic/ +[positions]: /components/cover.zwave/ +[forecast]: /components/sensor.forecast/ +[Bluetooth]: /components/device_tracker.bluetooth_le_tracker/ +[Slack]: /components/notify.slack/ +[template]: /components/camera.generic/ +[Bug]: /components/wink/ +[support]: /components/homematic/ +[node]: /components/zwave/ +[found]: /components/device_tracker.tplink/ +[attachments]: /components/notify.slack/ From 4abe9ef12b97b0aa5ff7cb89f5f8f12d1b84987a Mon Sep 17 00:00:00 2001 From: Daniel Perna Date: Fri, 26 Aug 2016 13:32:25 +0200 Subject: [PATCH 45/80] Added example for system variables --- source/_components/homematic.markdown | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/source/_components/homematic.markdown b/source/_components/homematic.markdown index 5adb4a24160..cde222f974f 100644 --- a/source/_components/homematic.markdown +++ b/source/_components/homematic.markdown @@ -86,12 +86,13 @@ The name depends on if you chose to resolve names or not. If not, it will be the **Other events** -*homematic.keypress* see above. -*homematic.impulse* for impulse sensors with event_data 'name' and 'channel'. +*homematic.keypress*: See above. + +*homematic.impulse*: For impulse sensors with event_data 'name' and 'channel'. **Service** -*homematic/virtualkey* simulate a keypress on CCU/Homegear with device or virtual keys. +*homematic/virtualkey*: Simulate a keypress on CCU/Homegear with device or virtual keys. ```yaml ... @@ -103,3 +104,15 @@ action: channel: 1 param: PRESS_LONG ``` + +*homematic/set_value*: Set the value of a system variable. + +```yaml +... + +action: + service: homematic.set_value + data: + entity_id: homematic.varname_bool + value: true +``` From 8be81d6420e882d2060905ff0865bcd80d94697c Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Fri, 26 Aug 2016 12:22:54 +0200 Subject: [PATCH 46/80] Minor updates --- source/_components/sensor.wunderground.markdown | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/source/_components/sensor.wunderground.markdown b/source/_components/sensor.wunderground.markdown index 3a793c1821d..fc084aaaa7a 100644 --- a/source/_components/sensor.wunderground.markdown +++ b/source/_components/sensor.wunderground.markdown @@ -1,7 +1,7 @@ --- layout: page -title: "Weather Underground (Wunderground)" -description: "Instructions how to integrate Weather Underground (Wunderground) Weather within Home Assistant." +title: "Weather Underground (WUnderground)" +description: "Instructions how to integrate Weather Underground (WUnderground) Weather within Home Assistant." date: 2016-08-18 sidebar: true comments: false @@ -10,13 +10,14 @@ footer: true logo: wunderground.png ha_category: Weather ha_release: 0.27 +ha_iot_class: "Cloud Polling" --- The `wunderground` platform uses [Weather Underground](http://www.wunderground.com) as an source for current weather information.

-Obtain Wunderground API [here](https://www.wunderground.com/weather/api). Free account allows 500 requests per day or 10 per minute. +Obtain WUnderground API [here](https://www.wunderground.com/weather/api). Free account allows 500 requests per day or 10 per minute.

To add Wunderground to your installation, add the following to your `configuration.yaml` file: @@ -77,7 +78,7 @@ Configuration variables: - **dewpoint_string**: Text summary of dew point - **wind_kph**: Current wind speed in kph - **wind_mph**: Current wind speed in mph - - **UV**: Current levels of UV radiation. See [here](https://www.wunderground.com/resources/health/uvindex.asp) for explanation. + - **UV**: Current levels of UV radiation. See [here](https://www.wunderground.com/resources/health/uvindex.asp) for explanation. - **pressure_in**: Atmospheric air pressure in inches - **pressure_mb**: Atmospheric air pressure in millibars - **wind_dir**: Wind direction From c57205d3f6e6e6a10f75a7a4ec089e4ddb48f461 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Fri, 26 Aug 2016 12:23:11 +0200 Subject: [PATCH 47/80] Add class --- source/_components/sensor.dht.markdown | 1 + 1 file changed, 1 insertion(+) diff --git a/source/_components/sensor.dht.markdown b/source/_components/sensor.dht.markdown index c37179513e1..1a5424b30d4 100644 --- a/source/_components/sensor.dht.markdown +++ b/source/_components/sensor.dht.markdown @@ -10,6 +10,7 @@ footer: true ha_category: DIY ha_release: 0.7 logo: dht.png +ha_iot_class: "Local Polling" --- From 6f794cbd1ae8e009ed03b85d46f30afebcbe0446 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Fri, 26 Aug 2016 12:28:44 +0200 Subject: [PATCH 48/80] Minor changes --- .../_components/binary_sensor.ffmpeg.markdown | 31 ++++++++++--------- 1 file changed, 17 insertions(+), 14 deletions(-) diff --git a/source/_components/binary_sensor.ffmpeg.markdown b/source/_components/binary_sensor.ffmpeg.markdown index 0233cafe5b0..5d9d9f433df 100644 --- a/source/_components/binary_sensor.ffmpeg.markdown +++ b/source/_components/binary_sensor.ffmpeg.markdown @@ -10,13 +10,14 @@ footer: true logo: ffmpeg.png ha_category: Binary Sensor ha_release: 0.27 +ha_iot_class: "Local Polling" --- -The `ffmpeg` platform allows you to use every video or audio feed with [FFmpeg](http://www.ffmpeg.org/) as varius sensors in Home Assistant. Avilable are: **noise**, **motion**. If ffmpeg process is brocken, sensor going to unavilable. It exists a service to restart a instance with *binary_sensor.ffmpeg_restart*. +The `ffmpeg` platform allows you to use every video or audio feed with [FFmpeg](http://www.ffmpeg.org/) for various sensors in Home Assistant. Available are: **noise**, **motion**. If the `ffmpeg` process is brocken, the sensor going to unavailable. It exists a service to restart a instance with *binary_sensor.ffmpeg_restart*.

-You need a ffmpeg binary in your system path. On debain 8 you can install it from backports. If you want HW support on raspberry you need self build from source. Windows binary are avilable on ffmpeg homepage. +You need a `ffmpeg` binary in your system path. On Debain 8 you can install it from backports. If you want Hardware support on a Raspberry Pi you need to build it from sourceby ourself. Windows binary are avilable on [FFmpeg](http://www.ffmpeg.org/) homepage.

### {% linkable_title Noise %} @@ -39,23 +40,24 @@ camera: Configuration variables: - **input** (*Required*): A ffmpeg compatible input file, stream or feed. -- **tool** (*Required*): is fix set to 'noise'. +- **tool** (*Required*): Is fix set to `noise`. - **name** (*Optional*): This parameter allows you to override the name of your camera. -- **ffmpeg_bin** (*Optional*): Default 'ffmpeg'. +- **ffmpeg_bin** (*Optional*): Default `ffmpeg`. - **peak** (*Optional*): Default -30. A peak of dB to detect it as noise. 0 is very loud and -100 is low. - **duration** (*Optional*): Default 1 seconds. How long need the noise over the peak to trigger the state. -- **reset** (*Optional*): Default 20 seconds. The time to reset the state after none new noise is over the peak. -- **extra_arguments** (*Optional*): Extra option they will pass to ffmpeg. i.e. audio frequence filtering. -- **output** (*Optional*): Allow you to send the audio output of this sensor to a icecast server or other ffmpeg supported output. i.e. to stream with sonos after state is trigger. +- **reset** (*Optional*): Defaults to 20 seconds. The time to reset the state after none new noise is over the peak. +- **extra_arguments** (*Optional*): Extra option they will pass to `ffmpeg`, like audio frequence filtering. +- **output** (*Optional*): Allow you to send the audio output of this sensor to a icecast server or other ffmpeg supported output, eg. to stream with sonos after state is trigger. For playing with values: + ```bash -ffmpeg -i YOUR_INPUT -vn -filter:a silencedetect=n=-30dB:d=1 -f null - +$ ffmpeg -i YOUR_INPUT -vn -filter:a silencedetect=n=-30dB:d=1 -f null - ``` ### {% linkable_title Motion %} -FFmpeg don't have a motion detection filter so it use a scene filter to detect a new scene/motion. In fact you can set how big a object or size of image they need change to detect a motion. The option 'changes' is the percent value of change between frames. You can add a denoice filter to video if you want a realy small value for 'changes'. +FFmpeg don't have a motion detection filter so it use a scene filter to detect a new scene/motion. In fact you can set how big a object or size of image they need change to detect a motion. The option 'changes' is the percent value of change between frames. You can add a denoise filter to video if you want a realy small value for 'changes'. To enable your FFmpeg with motion detection in your installation, add the following to your `configuration.yaml` file: @@ -78,16 +80,17 @@ camera: Configuration variables: - **input** (*Required*): A ffmpeg compatible input file, stream or feed. -- **tool** (*Required*): is fix set to 'motion'. +- **tool** (*Required*): Is fix set to `motion`. - **name** (*Optional*): This parameter allows you to override the name of your camera. -- **ffmpeg_bin** (*Optional*): Default 'ffmpeg'. -- **changes** (*Optional*): Default 10 percent. A lower value is more sensitive. I use 4 / 3.5 on my cameras. It describe how mutch of two frames need to change to detect it as motion. See on descripton. +- **ffmpeg_bin** (*Optional*): Default `ffmpeg`. +- **changes** (*Optional*): Default 10 percent. A lower value is more sensitive. I use 4 / 3.5 on my cameras. It describe how much of two frames need to change to detect it as motion. See on descripton. - **reset** (*Optional*): Default 20 seconds. The time to reset the state after none new motion is detect. - **repeat** (*Optional*): Default 0 repeats (deactivate). How many motion need to detect in *repeat_time* to trigger a motion. -- **repeat_time** (*Optional*): Default 0 seconds (deactivate). The time to repeats befor it trigger a motion. +- **repeat_time** (*Optional*): Default 0 seconds (deactivate). The time to repeats before it trigger a motion. - **extra_arguments** (*Optional*): Extra option they will pass to ffmpeg. i.e. video denoise filtering. For playing with values (changes/100 is the scene value on ffmpeg): + ```bash -ffmpeg -i YOUR_INPUT -an -filter:v select=gt(scene\,0.1) -f framemd5 - +$ ffmpeg -i YOUR_INPUT -an -filter:v select=gt(scene\,0.1) -f framemd5 - ``` From f17546c19dbdf0cbbe7e9ab790b8491a111b7422 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Fri, 26 Aug 2016 12:37:36 +0200 Subject: [PATCH 49/80] Add class --- source/_components/camera.generic.markdown | 1 + source/_components/notify.llamalab_automate.markdown | 8 +++++--- source/_components/sensor.hp_ilo.markdown | 6 +++--- 3 files changed, 9 insertions(+), 6 deletions(-) diff --git a/source/_components/camera.generic.markdown b/source/_components/camera.generic.markdown index 773d70d3cc3..14fcac68762 100644 --- a/source/_components/camera.generic.markdown +++ b/source/_components/camera.generic.markdown @@ -10,6 +10,7 @@ footer: true ha_category: Camera logo: camcorder.png ha_release: pre 0.7 +ha_iot_class: "depends" --- diff --git a/source/_components/notify.llamalab_automate.markdown b/source/_components/notify.llamalab_automate.markdown index 7b3ddf4e83c..d875142005f 100644 --- a/source/_components/notify.llamalab_automate.markdown +++ b/source/_components/notify.llamalab_automate.markdown @@ -13,7 +13,9 @@ ha_release: 0.27 --- -The llamalab_automate platform uses Googles Cloud Messaging Services to push messages from Home Assistant to your Android device running the LlamaLab [Automate](https://llamalab.com/automate/) app. This can serve as an alternative to Tasker + AutoRemote. +The `llamalab_automate` platform uses Googles Cloud Messaging Services to push messages from Home Assistant to your Android device running the LlamaLab [Automate](https://llamalab.com/automate/) app. This can serve as an alternative to Tasker + AutoRemote. + +Go to [https://llamalab.com/automate/cloud/](https://llamalab.com/automate/cloud/) and create a new API key/secret. To add Automate to your installation, add the following to your `configuration.yaml` file: @@ -29,7 +31,7 @@ notify: Configuration variables: - **name** (*Optional*): Setting the optional parameter `name` allows multiple notifiers to be created. The default value is `notify`. The notifier will bind to the service `notify.NOTIFIER_NAME`. -- **api_key** (*Required*): Enter the API key for Automate. Go to [https://llamalab.com/automate/cloud/](https://llamalab.com/automate/cloud/) and create a new API key / secret. +- **api_key** (*Required*): Enter the API key for Automate. - **to** (*Required*): E-Mail address the Automate-Fiber is configured for. - **device** (*Optional*): Name of the target device to receive the messages. @@ -45,4 +47,4 @@ Receiving cloud messages in Automate: 8. Assign a variable name for the Payload 9. Tap Toast show and set the message value to the variable you've specified -If you have multiple devices paired to one GMail account and want to control each instance of Automate individually, you can set the notifier to target a specific device. To determine your devices name, add a Cloud Message send block to your flow, tap it and scroll all the way to the bottom. Device names are case sensitive. \ No newline at end of file +If you have multiple devices paired to one Google Mail account and want to control each instance of Automate individually, you can set the notifier to target a specific device. To determine your devices name, add a Cloud Message send block to your flow, tap it and scroll all the way to the bottom. Device names are case sensitive. diff --git a/source/_components/sensor.hp_ilo.markdown b/source/_components/sensor.hp_ilo.markdown index fdaa0e31284..e57ebe9c83c 100644 --- a/source/_components/sensor.hp_ilo.markdown +++ b/source/_components/sensor.hp_ilo.markdown @@ -10,6 +10,7 @@ footer: true logo: hewlett_packard_enterprise.png ha_category: System Monitor ha_release: 0.27 +ha_iot_class: "Local Polling" --- The `hp_ilo` platform allows you to do an API call to the HP ILO (Integrated Lights-Out) sensor of your server, and use this data in (template) sensors. @@ -18,14 +19,13 @@ The component will output the ILO information in the sensor attributes so they c If the ILO only returns a single value (e.g. a temperature or state), it will be put in the state field. -Some more details about what can be retrieved from these sensors is available in the [python-hpilo documentation](http://pythonhosted.org/python-hpilo/) +Some more details about what can be retrieved from these sensors is available in the [python-hpilo documentation](http://pythonhosted.org/python-hpilo/). -## Example

-## Usage + To use this component in your installation, add the following to your `configuration.yaml` file: ```yaml From 8c7be8550974632b24b155dabac90f372243e14f Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Fri, 26 Aug 2016 23:29:25 +0200 Subject: [PATCH 50/80] Add deprecated warning --- source/_components/hvac.zwave.markdown | 4 +++- source/_components/thermostat.eq3btsmart.markdown | 2 ++ source/_components/thermostat.heat_control.markdown | 2 ++ source/_components/thermostat.heatmiser.markdown | 1 + source/_components/thermostat.honeywell.markdown | 1 + source/_components/thermostat.knx.markdown | 1 + source/_components/thermostat.nest.markdown | 1 + source/_components/thermostat.proliphix.markdown | 1 + source/_components/thermostat.radiotherm.markdown | 1 + source/_components/thermostat.zwave.markdown | 2 ++ 10 files changed, 15 insertions(+), 1 deletion(-) diff --git a/source/_components/hvac.zwave.markdown b/source/_components/hvac.zwave.markdown index 373256a6cc0..30c95663268 100644 --- a/source/_components/hvac.zwave.markdown +++ b/source/_components/hvac.zwave.markdown @@ -11,5 +11,7 @@ logo: z-wave.png ha_category: HVAC ha_release: 0.19 --- - + +**This platform has been deprecated in favor of a "climate" platform and will be removed in the future. Please use the climate platform.** + To get your Z-Wave `hvac` devices working with Home Assistant, follow the instructions for the general [Z-Wave component](/components/zwave/) and the [HVAC component](/components/hvac/). diff --git a/source/_components/thermostat.eq3btsmart.markdown b/source/_components/thermostat.eq3btsmart.markdown index 645ed3c49d9..d81f178bbf2 100644 --- a/source/_components/thermostat.eq3btsmart.markdown +++ b/source/_components/thermostat.eq3btsmart.markdown @@ -12,6 +12,8 @@ ha_category: Thermostat ha_iot_class: "Local Poll" --- +**This platform has been deprecated in favor of a "climate" platform and will be removed in the future. Please use the climate platform.** + This platform allows you to integrate EQ3 Bluetooth Smart Thermostats. The only functionality is to set the temperature, there doesn't seem to be any way to query the temperature sensor or battery level ([read more](https://forum.fhem.de/index.php/topic,39308.15.html)). diff --git a/source/_components/thermostat.heat_control.markdown b/source/_components/thermostat.heat_control.markdown index 8c3da494ed7..9f3d0335945 100644 --- a/source/_components/thermostat.heat_control.markdown +++ b/source/_components/thermostat.heat_control.markdown @@ -11,6 +11,8 @@ logo: heat-control.png ha_category: Thermostat --- +**This platform has been deprecated in favor of a "climate" platform and will be removed in the future. Please use the climate platform.** + Heat Control is a thermostat implemented in Home Assistant. It uses a sensor and a switch connected to a heater under the hood. If the measured temperature is cooler then the target temperature, the heater will be turned on and turned off when required temperature is reached. ```yaml diff --git a/source/_components/thermostat.heatmiser.markdown b/source/_components/thermostat.heatmiser.markdown index f11a9d54cbc..de21cd2ed28 100644 --- a/source/_components/thermostat.heatmiser.markdown +++ b/source/_components/thermostat.heatmiser.markdown @@ -12,6 +12,7 @@ ha_category: Thermostat ha_release: "0.10" --- +**This platform has been deprecated in favor of a "climate" platform and will be removed in the future. Please use the climate platform.** The `heatmiser` thermostat platform let you control [Heatmiser DT/DT-E/PRT/PRT-E](http://www.heatmisershop.co.uk/heatmiser-slimline-programmable-room-thermostat/) thermostats from Heatmiser. The module itself is currently setup to work over a RS232 -> RS485 converter, therefore it connects over IP. diff --git a/source/_components/thermostat.honeywell.markdown b/source/_components/thermostat.honeywell.markdown index 03fa233019a..f2247af67ae 100644 --- a/source/_components/thermostat.honeywell.markdown +++ b/source/_components/thermostat.honeywell.markdown @@ -11,6 +11,7 @@ logo: honeywell.png ha_category: Thermostat --- +**This platform has been deprecated in favor of a "climate" platform and will be removed in the future. Please use the climate platform.** The `honeywell` thermostat platform let you control [Honeywell Connected](http://getconnected.honeywell.com/en/) thermostats from Home Assistant. diff --git a/source/_components/thermostat.knx.markdown b/source/_components/thermostat.knx.markdown index 484aa85c6c2..22c0f42e792 100644 --- a/source/_components/thermostat.knx.markdown +++ b/source/_components/thermostat.knx.markdown @@ -12,6 +12,7 @@ ha_category: DIY ha_release: 0.25 --- +**This platform has been deprecated in favor of a "climate" platform and will be removed in the future. Please use the climate platform.** The `knx` thermostat platform is used as in interface with KNX thermostats. diff --git a/source/_components/thermostat.nest.markdown b/source/_components/thermostat.nest.markdown index 30c1b8c9005..f49cde1320b 100644 --- a/source/_components/thermostat.nest.markdown +++ b/source/_components/thermostat.nest.markdown @@ -11,6 +11,7 @@ logo: nest_thermostat.png ha_category: Thermostat --- +**This platform has been deprecated in favor of a "climate" platform and will be removed in the future. Please use the climate platform.** The `nest` thermostat platform let you control a thermostat from [Nest](https://nest.com). diff --git a/source/_components/thermostat.proliphix.markdown b/source/_components/thermostat.proliphix.markdown index b8182b4d2ae..4a9693c1cb8 100644 --- a/source/_components/thermostat.proliphix.markdown +++ b/source/_components/thermostat.proliphix.markdown @@ -12,6 +12,7 @@ ha_category: Thermostat ha_release: 0.11 --- +**This platform has been deprecated in favor of a "climate" platform and will be removed in the future. Please use the climate platform.** The `proliphix` thermostat platform let you control [Proliphix](http://www.proliphix.com) thermostat from Home Assistant. diff --git a/source/_components/thermostat.radiotherm.markdown b/source/_components/thermostat.radiotherm.markdown index c5845e09793..4f7e1b63b09 100644 --- a/source/_components/thermostat.radiotherm.markdown +++ b/source/_components/thermostat.radiotherm.markdown @@ -11,6 +11,7 @@ logo: radiotherm.png ha_category: Thermostat --- +**This platform has been deprecated in favor of a "climate" platform and will be removed in the future. Please use the climate platform.** The `radiotherm` thermostat platform let you control a thermostat from [Radio Thermostat](http://www.radiothermostat.com/). diff --git a/source/_components/thermostat.zwave.markdown b/source/_components/thermostat.zwave.markdown index 0ae7f181421..4225f83bec9 100644 --- a/source/_components/thermostat.zwave.markdown +++ b/source/_components/thermostat.zwave.markdown @@ -12,6 +12,8 @@ ha_category: Thermostat ha_release: 0.17 --- +**This platform has been deprecated in favor of a "climate" platform and will be removed in the future. Please use the climate platform.** + To get your Z-Wave thermostat working with Home Assistant, follow the instructions for the general [Z-Wave component](/components/zwave/).

From a16f5e82b050a308d7e460b8cba4b6470908e795 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Fri, 26 Aug 2016 23:30:44 +0200 Subject: [PATCH 51/80] Add climate docs --- source/_components/climate.ecobee.markdown | 15 +++++ .../_components/climate.eq3btsmart.markdown | 64 +++++++++++++++++++ .../climate.generic_thermostat.markdown | 45 +++++++++++++ source/_components/climate.heatmiser.markdown | 41 ++++++++++++ source/_components/climate.homematic.markdown | 19 ++++++ source/_components/climate.honeywell.markdown | 32 ++++++++++ source/_components/climate.knx.markdown | 35 ++++++++++ source/_components/climate.markdown | 22 +++++++ source/_components/climate.nest.markdown | 30 +++++++++ source/_components/climate.proliphix.markdown | 40 ++++++++++++ .../_components/climate.radiotherm.markdown | 40 ++++++++++++ source/_components/climate.zwave.markdown | 22 +++++++ 12 files changed, 405 insertions(+) create mode 100644 source/_components/climate.ecobee.markdown create mode 100644 source/_components/climate.eq3btsmart.markdown create mode 100644 source/_components/climate.generic_thermostat.markdown create mode 100644 source/_components/climate.heatmiser.markdown create mode 100644 source/_components/climate.homematic.markdown create mode 100644 source/_components/climate.honeywell.markdown create mode 100644 source/_components/climate.knx.markdown create mode 100644 source/_components/climate.markdown create mode 100644 source/_components/climate.nest.markdown create mode 100644 source/_components/climate.proliphix.markdown create mode 100644 source/_components/climate.radiotherm.markdown create mode 100644 source/_components/climate.zwave.markdown diff --git a/source/_components/climate.ecobee.markdown b/source/_components/climate.ecobee.markdown new file mode 100644 index 00000000000..5f54c6f9027 --- /dev/null +++ b/source/_components/climate.ecobee.markdown @@ -0,0 +1,15 @@ +--- +layout: page +title: "Ecobee Thermostat" +description: "Instructions how to setup the Ecobee thermostats within Home Assistant." +date: 2016-08-26 18:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: ecobee.png +ha_category: Climate +ha_release: 0.9 +--- + +To get your Ecobee thermostats working with Home Assistant, follow the instructions for the general [Ecobee component](/components/ecobee/). diff --git a/source/_components/climate.eq3btsmart.markdown b/source/_components/climate.eq3btsmart.markdown new file mode 100644 index 00000000000..1d16168cb11 --- /dev/null +++ b/source/_components/climate.eq3btsmart.markdown @@ -0,0 +1,64 @@ +--- +layout: page +title: "EQ3 Bluetooth Smart Thermostats" +description: "Instructions how to integrate EQ3 Bluetooth Smart Thermostats into Home Assistant." +date: 2016-04-18 22:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: eq3.gif +ha_category: Climate +ha_iot_class: "Local Poll" +--- + + +The `eq3btsmart` climate platform allows you to integrate EQ3 Bluetooth Smart Thermostats. + +The only functionality is to set the temperature, there doesn't seem to be any way to query the temperature sensor or battery level ([read more](https://forum.fhem.de/index.php/topic,39308.15.html)). + +Setup is a bit more cumbersome than for most other thermostats. It has to be paired first: + +```bash +bluetoothctl +scan on + +scan off + +pair +trust +disconnect +exit +``` + +Then check with gatttool if the connection works as expected: + +```bash +gatttool -b 00:11:22:33:44:55 -I +[00:11:22:33:44:55][LE]> connect +Attempting to connect to 00:11:22:33:44:55 +Connection successful +[00:11:22:33:44:55][LE]> char-write-req 0x0411 03 +Characteristic value was written successfully +Notification handle = 0x0421 value: 02 01 09 14 04 2d +[00:11:22:33:44:55][LE]> disconnect +[00:11:22:33:44:55][LE]> exit +``` + +Important: For gatttool or homeassistant to work, the thermostat needs to be disconnected from bluetoothd, so I found it best to modify the hass-daemon startscript by adding: + +```bash +/usr/bin/bt-device -d CC-RT-BLE +``` + +to the start function of /etc/init.d/hass-daemon. + + +```yaml +# Example configuration.yaml entry +climate: + platform: eq3btsmart + devices: + room1: + mac: '00:11:22:33:44:55' +``` diff --git a/source/_components/climate.generic_thermostat.markdown b/source/_components/climate.generic_thermostat.markdown new file mode 100644 index 00000000000..88cc8fb180c --- /dev/null +++ b/source/_components/climate.generic_thermostat.markdown @@ -0,0 +1,45 @@ +--- +layout: page +title: "Generic Thermostat" +description: "Turn Home Assistant into a thermostat" +date: 2015-03-23 19:59 +sidebar: true +comments: false +sharing: true +footer: true +logo: heat-control.png +ha_category: Climate +--- + + +The `generic_thermostat` climate platform is a thermostat implemented in Home Assistant. It uses a sensor and a switch connected to a heater under the hood. If the measured temperature is cooler then the target temperature, the heater will be turned on and turned off when required temperature is reached. + +```yaml +# Example configuration.yaml entry +climate: + platform: heat_control + name: Study + heater: switch.study_heater + target_sensor: sensor.study_temperature + min_temp: 15 + max_temp: 21 + target_temp: 15 + min_cycle_duration: + # At least one of these must be specified: + days: 2 + hours: 1 + minutes: 10 + seconds: 5 + milliseconds: 20 +``` + +Configuration variables: + +- **name** (*Required*): Name of thermostat +- **heater** (*Required*: `entity_id` for heater switch, must be a toggle device. +- **target_sensor** (*Required*): `entity_id` for a temperature sensor, target_sensor.state must be temperature. +- **min_temp** (*Optional*): Set minimum set point available (default: 7) +- **max_temp** (*Optional*): Set maximum set point available (default: 35) +- **target_temp** (*Required*): Set intital target temperature. Failure to set this variable will result in target temperature being set to null on startup. +- **ac_mode** (*Optional*): Set the switch specified in the *heater* option to be treated as a cooling device instead of a heating device. +- **min_cycle_duration** (*Optional*): Set a minimum amount of time that the switch specified in the *heater* option must be in it's current state prior to being switched either off or on. diff --git a/source/_components/climate.heatmiser.markdown b/source/_components/climate.heatmiser.markdown new file mode 100644 index 00000000000..b74bb1c92e1 --- /dev/null +++ b/source/_components/climate.heatmiser.markdown @@ -0,0 +1,41 @@ +--- +layout: page +title: "Heatmiser Thermostat" +description: "Instructions how to integrate Heatmiser thermostats within Home Assistant." +date: 2015-12-11 12:35 +sidebar: true +comments: false +sharing: true +footer: true +logo: heatmiser.png +ha_category: Climate +ha_release: "0.10" +--- + + +The `heatmiser` climate platform let you control [Heatmiser DT/DT-E/PRT/PRT-E](http://www.heatmisershop.co.uk/heatmiser-slimline-programmable-room-thermostat/) thermostats from Heatmiser. The module itself is currently setup to work over a RS232 -> RS485 converter, therefore it connects over IP. + +Further work would be required to get this setup to connect over Wifi, but the HeatmiserV3 python module being used is a full implementation of the V3 protocol. If you would like to contribute to making this work over wifi, please contact @andylockran on github. + +To set it up, add the following information to your `configuration.yaml` file: + +```yaml +climate: + platform: heatmiser + ipaddress: YOUR_IPADDRESS + port: YOUR_PORT + tstats: + 1: + id: THERMOSTAT_ID + name: THERMOSTAT_NAME +``` + +A single interface can handle up to 32 connected devices. + +Configuration variables: + +- **ipaddress** (*Required*): The ip address of your interface. +- **port** (*Required*): The port that the interface is listening on. +- **tstats** (*Required*): A list of thermostats activated on the gateway. +- **id** (*Required*): The id of the thermostat as configured on the device itself +- **name** (*Required*): A friendly name for the themostat diff --git a/source/_components/climate.homematic.markdown b/source/_components/climate.homematic.markdown new file mode 100644 index 00000000000..61b3d6bd4af --- /dev/null +++ b/source/_components/climate.homematic.markdown @@ -0,0 +1,19 @@ +--- +layout: page +title: "Homematic Thermostats" +description: "Instructions how to integrate Homematic thermostats within Home Assistant." +date: 2016-06-28 08:30 +sidebar: true +comments: false +sharing: true +footer: true +logo: homematic.png +ha_category: Climate +ha_release: 0.23 +ha_iot_class: "Local Push" +--- + + +The `homematic` cliamte platform lets you control [Homematic](http://www.homematic.com/) thermostats through Home Assistant. + +Devices will be configured automatically. Please refer to the [component](/components/homematic/) configuration on how to setup Homematic. diff --git a/source/_components/climate.honeywell.markdown b/source/_components/climate.honeywell.markdown new file mode 100644 index 00000000000..28b5fd13e34 --- /dev/null +++ b/source/_components/climate.honeywell.markdown @@ -0,0 +1,32 @@ +--- +layout: page +title: "Honeywell Thermostat" +description: "Instructions how to integrate Honeywell thermostats within Home Assistant." +date: 2016-02-07 22:01 +sidebar: true +comments: false +sharing: true +footer: true +logo: honeywell.png +ha_category: Climate +--- + + +The `honeywell` cliamte platform let you control [Honeywell Connected](http://getconnected.honeywell.com/en/) thermostats from Home Assistant. + +To set it up, add the following information to your `configuration.yaml` file: + +```yaml +cliamte: + platform: honeywell + username: YOUR_USERNAME + password: YOUR_PASSWORD + region: REGION +``` + +Configuration variables: + +- **username** (*Required*: The username of an user with access. +- **password** (*Required*): The password for your given admin account. +- **away_temperature** (*optional*): Heating setpoint when away mode is on. If omitted it defaults to 16.0 deg C. +- **region** (*optional*): Region identifier (either 'eu' or 'us'). Defaults to 'eu' if not provided. diff --git a/source/_components/climate.knx.markdown b/source/_components/climate.knx.markdown new file mode 100644 index 00000000000..9f89dcfa73c --- /dev/null +++ b/source/_components/climate.knx.markdown @@ -0,0 +1,35 @@ +--- +layout: page +title: "KNX Thermostat" +description: "Instructions on how to integrate KXN thermostats with Home Assistant." +date: 2016-06-24 12:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: knx.png +ha_category: DIY +ha_release: 0.25 +--- + + +The `knx` climate platform is used as in interface with KNX thermostats. + +KNX thermostats use at least 2 group addresses: one for the current temperature and one for the target temperature (named set-point in KNX terms). + +To use your KNX thermostats in your installation, add the following to your `configuration.yaml` file: + +```yaml +climate: + - platform: knx + name: KNX Thermostat + temperature_address: 0/1/1 + setpoint_address: 0/1/0 +``` + +- **name** (*Optional*): A name for this devices used within Home assistant +- **address** (*Required*): The KNX group address that is used to turn on/off this actuator channel +- **temperature_address** (*Required*): The group address that is used to communicate the current temperature. Data format must be datapoint type 9.001 DPT_Value_Temp (2-Octet float value) (see http://www.knx.org/fileadmin/template/documents/downloads_support_menu/KNX_tutor_seminar_page/Advanced_documentation/05_Interworking_E1209.pdf) +- **setpoint_address** (*Required*): The group address that is used to set/read the target temperature. Data format must be datapoint type 9.001 DPT_Value_Temp (2-Octet float value). Make sure, you set the read-flag for the thermostat to allow Home Assistant to read the target temperature. + +With the current version of the module, no advanced KNX thermostat functionalities (e.g. HVAC mode) are supported. diff --git a/source/_components/climate.markdown b/source/_components/climate.markdown new file mode 100644 index 00000000000..4b2f5396fbf --- /dev/null +++ b/source/_components/climate.markdown @@ -0,0 +1,22 @@ +--- +layout: page +title: "Climate" +description: "Instructions how to setup climate control devices within Home Assistant." +date: 2016-08-26 19:00 +sidebar: true +comments: false +sharing: true +footer: true +--- + + +The `climate` component is built for the controlling and monitoring of HVAC (heating, ventilating, and air conditioning) and thermostat devices. + +To enable this component, pick one of the platforms, and add it to your `configuration.yaml`: + +```yaml +# Example configuration.yaml entry +climate: + platform: demo +``` + diff --git a/source/_components/climate.nest.markdown b/source/_components/climate.nest.markdown new file mode 100644 index 00000000000..78123905739 --- /dev/null +++ b/source/_components/climate.nest.markdown @@ -0,0 +1,30 @@ +--- +layout: page +title: "Nest Thermostat" +description: "Instructions how to integrate Nest thermostats within Home Assistant." +date: 2015-03-23 19:59 +sidebar: true +comments: false +sharing: true +footer: true +logo: nest_thermostat.png +ha_category: Climate +--- + + +The `nest` climate platform let you control a thermostat from [Nest](https://nest.com). + +To set it up, add the following information to your `configuration.yaml` file: + +```yaml +cliamte: + platform: nest +``` + +

+ +

+ +

+ You must have the [Nest component](https://home-assistant.io/components/nest/) configured to use this sensor. +

diff --git a/source/_components/climate.proliphix.markdown b/source/_components/climate.proliphix.markdown new file mode 100644 index 00000000000..5916d9258ea --- /dev/null +++ b/source/_components/climate.proliphix.markdown @@ -0,0 +1,40 @@ +--- +layout: page +title: "Proliphix Thermostat" +description: "Instructions how to integrate Proliphix thermostats within Home Assistant." +date: 2016-01-15 08:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: proliphix.png +ha_category: Climate +ha_release: 0.11 +--- + + +The `proliphix` climate platform let you control [Proliphix](http://www.proliphix.com) thermostat from Home Assistant. + +Currently supported and tested thermostats: + +- NT10e + +To set it up, add the following information to your `configuration.yaml` file: + +```yaml +climate: + platform: proliphix + host: IP_ADDRESS + username: YOUR_USERNAME + password: YOUR_PASSWORD +``` + +Configuration variables: + +- **host** (*Required*): Adress of your thermostat, eg. 192.168.1.32 +- **username** (*Required*): Username for the thermostat. +- **password** (*Required*): Password for the thermostat. + +The Proliphix NT Thermostat series are ethernet connected thermostats. They have a local HTTP interface that is based on get/set +of OID values. A complete collection of the API is available in this [API documentation](https://github.com/sdague/thermostat.rb/blob/master/docs/PDP_API_R1_11.pdf). + diff --git a/source/_components/climate.radiotherm.markdown b/source/_components/climate.radiotherm.markdown new file mode 100644 index 00000000000..01d806fa9e6 --- /dev/null +++ b/source/_components/climate.radiotherm.markdown @@ -0,0 +1,40 @@ +--- +layout: page +title: "Radiotherm Thermostat" +description: "Instructions how to integrate Radiotherm thermostats within Home Assistant." +date: 2015-10-18 17:15 +sidebar: true +comments: false +sharing: true +footer: true +logo: radiotherm.png +ha_category: Climate +--- + + +The `radiotherm` climate platform let you control a thermostat from [Radio Thermostat](http://www.radiothermostat.com/). + +The underlaying library supports: +- CT50 V1.09 +- CT50 V1.88 +- CT50 V1.94 (also known as Filtrete 3M50) +- CT80 Rev B2 V1.03 + +To set it up, add the following information to your `configuration.yaml` file: + +```yaml +climate: + platform: radiotherm + host: + - 192.168.99.137 + - 192.168.99.202 + hold_temp: True +``` + +Configuration variables: + +- **host** (*Required*): List of your Radiotherm thermostats +- **hold_temp** (*Required*): Boolean to control if Home Assistant temperature adjustments hold (`True`) or are temporary (`False`). + +Temperature settings from Home Assistant will be sent to thermostat and then hold at that temperature. Set to `False` if you set a thermostat schedule on the thermostat itself and just want Home Assistant to send temporary temperature changes. + diff --git a/source/_components/climate.zwave.markdown b/source/_components/climate.zwave.markdown new file mode 100644 index 00000000000..c99149936fe --- /dev/null +++ b/source/_components/climate.zwave.markdown @@ -0,0 +1,22 @@ +--- +layout: page +title: "Z-Wave Thermostat" +description: "Instructions how to setup the Z-Wave thermostat within Home Assistant." +date: 2016-04-03 9:52 +sidebar: true +comments: false +sharing: true +footer: true +logo: z-wave.png +ha_category: Climate +ha_release: 0.17 +--- + + +To get your Z-Wave thermostat working with Home Assistant, follow the instructions for the general [Z-Wave component](/components/zwave/). + +

+If your thermostat support fan modes or different operating modes, it should be considered a [HVAC component](/components/hvac.zwave/), and will also be detected as one. Thermostat component does not support setting fan or operation mode. This is controlled via the HVAC component. + +If the thermostat support different operationg modes, you will get one thermostat entity for each mode. These can be hidden with settings using the customize setting in the `configuration.yaml` file. +

From 2eb5b35b8b212a36fe2d0e6b0fd52130a723b1c9 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Fri, 26 Aug 2016 23:31:52 +0200 Subject: [PATCH 52/80] Update for cover/climate --- source/_components/demo.markdown | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/source/_components/demo.markdown b/source/_components/demo.markdown index 2893170a23b..3f92274a086 100644 --- a/source/_components/demo.markdown +++ b/source/_components/demo.markdown @@ -19,14 +19,13 @@ Available demo platforms: - [Alarm control panel](/components/alarm_control_panel/) (`alarm_control_panel`) - [Binary sensor](/components/binary_sensor/) (`binary_sensor`) - [Camera](/components/camera/) (`camera`) -- [Garage door](/components/garage_door/) (`garage_door`) - [Light](/components/light/) (`light`) - [Lock](/components/lock/) (`lock`) - [Notification](/components/notify/) (`notify`) -- [Roller shutter](/components/rollershutter/) (`rollershutter`) +- [Cover](/components/cover/) (`cover`) - [Sensor](/components/sensor/) (`sensor`) - [Switch](/components/switch/) (`switch`) -- [Thermostat](/components/thermostat/) (`thermostat`) +- [Climate](/components/climate/) (`climate`) To integrate a demo platform in Home Assistant, add the following section to your `configuration.yaml` file: From 5b5d2e5f8dfc681c164f2ac6bf5895c8a388aef5 Mon Sep 17 00:00:00 2001 From: Martin Hjelmare Date: Sat, 27 Aug 2016 00:05:25 +0200 Subject: [PATCH 53/80] Add mysensors MQTT client gateway docs (#841) * Add mysensors MQTT client gateway docs * Add note about not all 2.0 feautures are supported --- source/_components/mysensors.markdown | 127 +++++++++++++++++++++++--- 1 file changed, 114 insertions(+), 13 deletions(-) diff --git a/source/_components/mysensors.markdown b/source/_components/mysensors.markdown index 7c5c3bbe5f7..afd151a2305 100644 --- a/source/_components/mysensors.markdown +++ b/source/_components/mysensors.markdown @@ -2,7 +2,7 @@ layout: page title: "MySensors" description: "Instructions how to integrate MySensors sensors into Home Assistant." -date: 2016-04-21 13:30 +0100 +date: 2016-08-26 23:00 +0200 sidebar: true comments: false sharing: true @@ -16,7 +16,7 @@ The [MySensors](https://www.mysensors.org) project combines Arduino boards with ### {% linkable_title Configuration %} -Integrate your Serial or Ethernet MySensors Gateway by adding the following to your `configuration.yaml` file: +Integrate your Serial, Ethernet or MQTT Client MySensors Gateway by adding the following to your `configuration.yaml` file: ```yaml # Example configuration.yaml entry @@ -31,22 +31,34 @@ mysensors: - device: '192.168.1.18' persistence_file: 'path/mysensors3.json' tcp_port: 5003 + - device: mqtt + persistence_file: 'path/mysensors4.json' + topic_in_prefix: 'mygateway1-out' + topic_out_prefix: 'mygateway1-in' debug: true - persistence: true - version: '1.5' optimistic: false + persistence: true + retain: true + version: 2.0 ``` Configuration variables: -- **device** (*Required*): The path to the serial gateway where it is connected to your Home Assistant host, or the address of the tcp ethernet gateway. Resolving DNS addresses is theoretically supported but not tested. +- **device** (*Required*): The path to the serial gateway where it is connected to your Home Assistant host, or the address of the tcp ethernet gateway, or `mqtt` to setup the MQTT gateway. Resolving DNS addresses is theoretically supported but not tested. - **baud_rate** (*Optional*): Specifies the baud rate of the connected serial gateway. Default is 115200. - **tcp_port** (*Optional*): Specifies the port of the connected tcp ethernet gateway. Default is 5003. +- **topic_in_prefix** (*Optional*): Set the prefix of the MQTT topic for messages coming from the MySensors gateway in to Home Assistant. Default is an empty string. +- **topic_out_prefix** (*Optional*): Set the prefix of the MQTT topic for messages going from Home Assistant out to the MySensors gateway. Default is an empty string. - **debug** (*Optional*): Enable or disable verbose debug logging. Default is false. - **persistence** (*Optional*): Enable or disable local persistence of sensor information. If this is disabled, then each sensor will need to send presentation messages after Home Assistant starts. Default is true. - **persistence_file** (*Optional*): The path to a file to save sensor information. The file extension determines the file type. Currently supported file types are 'pickle' and 'json'. -- **version** (*Optional*): Specifies the MySensors protocol version to use. Supports 1.4 and 1.5. Default is 1.4. +- **version** (*Optional*): Specifies the MySensors protocol version to use. Supports 1.4, 1.5 and 2.0. Default is 1.4. - **optimistic** (*Optional*): Enable or disable optimistic mode for actuators (switch/light). Default is false. Set this to true if no state feedback from actuators is possible. Home Assistant will assume that the command succeeded and change state. +- **retain** (*Optional*): Enable or disable retain flag for published messages from Home Assistant when using the MQTT gateway. Default is true. + +

+Not all features of MySensors 2.0 are yet supported by Home Assistant. As more features are added, they will be described here in the documentation. Go to the MySensors platform pages under "related components" to see what message types are currently supported. +

If you are using an original Arduino as a serial gateway, the port will be named `ttyACM*`. The exact number can be determined with the command shown below. @@ -54,20 +66,109 @@ If you are using an original Arduino as a serial gateway, the port will be named $ ls /dev/ttyACM* ``` +If using the MQTT gateway, you also need to have the [MQTT component](/components/mqtt/) configured in Home Assistant. See below for a minimum MQTT configuration: + +```yaml +mqtt: + client_id: home-assistant-1 +``` + +

+The MQTT gateway requires MySensors version 2.0 and only the MQTT client gateway is supported. +

+ ### {% linkable_title Presentation %} Present a MySensors sensor or actuator, by following these steps: -1. Connect the serial gateway to your computer or the ethernet gateway to your network. -2. Configure the MySensors component in configuration.yaml. +1. Connect the serial gateway to your computer or the ethernet or MQTT gateway to your network. +2. Configure the MySensors component in `configuration.yaml`. 3. Start hass. -4. Wait for "Connected to [device]" in the log output. -5. Write and upload your MySensors sketch to the sensor. Make sure you: - - Either use a manual node id, or AUTO for requesting a node id from the controller, in the begin method for initialization of the MySensors library. +4. Write and upload your MySensors sketch to the sensor. Make sure you: - Send sketch name. - Present the sensor's S_TYPE. - - Send at least one initial value per V_TYPE. -6. Start the sensor. + - Send at least one initial value per V_TYPE. In version 2.0 of MySensors this has to be done in the loop function. See below for an example in 2.0 of how to make sure the initial value has been received by the controller. +5. Start the sensor. + +```cpp +/* + * Documentation: http://www.mysensors.org + * Support Forum: http://forum.mysensors.org + * + * http://www.mysensors.org/build/relay + */ + +#define MY_DEBUG +#define MY_RADIO_NRF24 +#define MY_REPEATER_FEATURE +#define MY_NODE_ID 1 +#include +#include +#include + +#define RELAY_PIN 5 +#define BUTTON_PIN 3 +#define CHILD_ID 1 +#define RELAY_ON 1 +#define RELAY_OFF 0 + +Bounce debouncer = Bounce(); +bool state = false; +bool initialValueSent = false; + +MyMessage msg(CHILD_ID, V_STATUS); + +void setup() +{ + pinMode(BUTTON_PIN, INPUT_PULLUP); + debouncer.attach(BUTTON_PIN); + debouncer.interval(10); + + // Make sure relays are off when starting up + digitalWrite(RELAY_PIN, RELAY_OFF); + pinMode(RELAY_PIN, OUTPUT); +} + +void presentation() { + sendSketchInfo("Relay+button", "1.0"); + present(CHILD_ID, S_BINARY); +} + +void loop() +{ + if (!initialValueSent) { + Serial.println("Sending initial value"); + send(msg.set(state?RELAY_ON:RELAY_OFF)); + Serial.println("Requesting initial value from controller"); + request(CHILD_ID, V_STATUS); + wait(2000, C_SET, V_STATUS); + } + if (debouncer.update()) { + if (debouncer.read()==LOW) { + state = !state; + // Send new state and request ack back + send(msg.set(state?RELAY_ON:RELAY_OFF), true); + } + } +} + +void receive(const MyMessage &message) { + if (message.isAck()) { + Serial.println("This is an ack from gateway"); + } + + if (message.type == V_STATUS) { + if (!initialValueSent) { + Serial.println("Receiving initial value from controller"); + initialValueSent = true; + } + // Change relay state + state = (bool)message.getInt(); + digitalWrite(RELAY_PIN, state?RELAY_ON:RELAY_OFF); + send(msg.set(state?RELAY_ON:RELAY_OFF)); + } +} +``` Visit the [library api] of MySensors for more information. From e75d5c1a752e14d9e9ef3e46f89c5f0650a2c4cc Mon Sep 17 00:00:00 2001 From: Matthew Bowen Date: Fri, 26 Aug 2016 19:03:40 -0700 Subject: [PATCH 54/80] Initial documentation for emulated_hue. --- source/_components/emulated_hue.markdown | 113 +++++++++++++++++++++++ 1 file changed, 113 insertions(+) create mode 100755 source/_components/emulated_hue.markdown diff --git a/source/_components/emulated_hue.markdown b/source/_components/emulated_hue.markdown new file mode 100755 index 00000000000..6ff357d242c --- /dev/null +++ b/source/_components/emulated_hue.markdown @@ -0,0 +1,113 @@ +--- +layout: page +title: "Emulated Hue Bridge" +description: "Emulated Hue Bridge" +sidebar: true +comments: false +sharing: true +footer: true +--- + +The `emulated_hue` component provides a virtual Philips Hue bridge, written entirely in software, +that allows services that work with the Hue API to interact with Home Assistant +entities. The driving use case behind this functionality is to allow Home +Assistant to work with an Amazon Echo with no set up cost outside of +configuration changes. + +To enable the emulated Hue bridge, add the following to your `configuration.yaml` +file: + +```yaml +# Example configuration.yaml entry +emulated_hue: + host_ip: 192.168.1.186 + listen_port: 8300 + off_maps_to_on_domains: + - script + - scene + expose_by_default: true + exposed_domains: + - light + +# Example customization +homeassistant: + customize: + light.bedroom_light: + # Don't allow light.bedroom_light to be controlled by the + # emulated Hue bridge + emulated_hue: false + light.office_light: + # Address light.office_light as "back office light" + emulated_hue_name: "back office light" +``` + +Configuration variables: + +- **host_ip** (*Optional*): The IP address that your Home Assistant installation is + running on. If you do not specify this option, the component will attempt to + determine the IP address on its own. + +- **listen_port** (*Optional*): The port the Hue bridge API web server will run on. If + not specified, this defaults to 8300. This can be any free port on your system. + +- **off_maps_to_on_domains** (*Optional*): The domains that maps an "off" command to + an "on" command. + + For example, if `script` is included in the list, and you + ask Alexa to "turn off the *water plants* script," the command will be handled + as if you asked her to turn on the script. + + If not specified, this defaults to the following list: + + - `script` + - `scene` + +- **expose_by_default** (*Optional*): Whether or not entities should be exposed via the + bridge by default instead of explicitly (see the 'echo' attribute later on). + If not specified, this defaults to true. + +- **exposed_domains** (*Optional*): The domains that are exposed by default if + `expose_by_default` is set to true. If not specified, this defaults to the + following list: + + - `switch` + - `light` + - `group` + - `input_boolean` + - `media_player` + +The following are attributes that can be applied in the `customize` section: + +- **emulated_hue** (*Optional*): Whether or not the entity should be + exposed by the emulated Hue bridge. The default value for this attribute is controlled + by the `expose_by_default` option. + +- **emulated_hue_name** (*Optional*): The name that the emulated Hue will use. + The default for this is the entity's friendly name. + +### {% linkable_title License %} + +Much of this code is based on work done by Bruce Locke on his [ha-local-echo](https://github.com/blocke/ha-local-echo) +project, originally released under the MIT License. The license is reproduced below: + +The MIT License (MIT) + +Copyright (c) 2016 Bruce Locke + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. From e6339d4ef5a74391174902c5ac8269259e047e9d Mon Sep 17 00:00:00 2001 From: Matthew Bowen Date: Fri, 26 Aug 2016 19:14:58 -0700 Subject: [PATCH 55/80] Create a Configuration section, and abbreviate the license. --- source/_components/emulated_hue.markdown | 28 +++--------------------- 1 file changed, 3 insertions(+), 25 deletions(-) diff --git a/source/_components/emulated_hue.markdown b/source/_components/emulated_hue.markdown index 6ff357d242c..17aa13359bd 100755 --- a/source/_components/emulated_hue.markdown +++ b/source/_components/emulated_hue.markdown @@ -14,6 +14,8 @@ entities. The driving use case behind this functionality is to allow Home Assistant to work with an Amazon Echo with no set up cost outside of configuration changes. +### {% linkable_title Configuration %} + To enable the emulated Hue bridge, add the following to your `configuration.yaml` file: @@ -41,8 +43,6 @@ homeassistant: emulated_hue_name: "back office light" ``` -Configuration variables: - - **host_ip** (*Optional*): The IP address that your Home Assistant installation is running on. If you do not specify this option, the component will attempt to determine the IP address on its own. @@ -88,26 +88,4 @@ The following are attributes that can be applied in the `customize` section: ### {% linkable_title License %} Much of this code is based on work done by Bruce Locke on his [ha-local-echo](https://github.com/blocke/ha-local-echo) -project, originally released under the MIT License. The license is reproduced below: - -The MIT License (MIT) - -Copyright (c) 2016 Bruce Locke - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. +project, originally released under the MIT License. The license is located [here](https://github.com/blocke/ha-local-echo/blob/b9bf5dcaae6d8e305e2283179ffba64bde9ed29e/LICENSE) \ No newline at end of file From 5a8b39242cf5ffe41f55be071c2199edddaf4d70 Mon Sep 17 00:00:00 2001 From: Matthew Bowen Date: Fri, 26 Aug 2016 19:16:30 -0700 Subject: [PATCH 56/80] Missed a period. --- source/_components/emulated_hue.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/emulated_hue.markdown b/source/_components/emulated_hue.markdown index 17aa13359bd..23cc1278413 100755 --- a/source/_components/emulated_hue.markdown +++ b/source/_components/emulated_hue.markdown @@ -88,4 +88,4 @@ The following are attributes that can be applied in the `customize` section: ### {% linkable_title License %} Much of this code is based on work done by Bruce Locke on his [ha-local-echo](https://github.com/blocke/ha-local-echo) -project, originally released under the MIT License. The license is located [here](https://github.com/blocke/ha-local-echo/blob/b9bf5dcaae6d8e305e2283179ffba64bde9ed29e/LICENSE) \ No newline at end of file +project, originally released under the MIT License. The license is located [here](https://github.com/blocke/ha-local-echo/blob/b9bf5dcaae6d8e305e2283179ffba64bde9ed29e/LICENSE). \ No newline at end of file From 6577635127155c1b777842061bf136391cb8eb4c Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Sat, 27 Aug 2016 10:52:20 +0200 Subject: [PATCH 57/80] Add new contributors --- source/developers/credits.markdown | 1 + 1 file changed, 1 insertion(+) diff --git a/source/developers/credits.markdown b/source/developers/credits.markdown index c19bd02bb86..af317b0011a 100644 --- a/source/developers/credits.markdown +++ b/source/developers/credits.markdown @@ -143,6 +143,7 @@ This page contains a list of people who have contributed in one way or another t - [Markus Stenberg](https://github.com/fingon) - [Martin Hjelmare](https://github.com/MartinHjelmare) - [Matteo Lampugnani](https://github.com/t30) +- [Matthew Bowen](https://github.com/mgbowen) - [Matthew Treinish](https://github.com/mtreinish) - [Matthias Grawinkel](https://github.com/meatz) - [Michaël Arnauts](https://github.com/michaelarnauts) From f1a4253166ee89c04aadbad5764441661ffa25c7 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Sat, 27 Aug 2016 11:19:04 +0200 Subject: [PATCH 58/80] Update layout and add details --- source/_components/emulated_hue.markdown | 77 ++++++++++-------------- 1 file changed, 32 insertions(+), 45 deletions(-) diff --git a/source/_components/emulated_hue.markdown b/source/_components/emulated_hue.markdown index 23cc1278413..facee1929f4 100755 --- a/source/_components/emulated_hue.markdown +++ b/source/_components/emulated_hue.markdown @@ -1,23 +1,23 @@ --- layout: page title: "Emulated Hue Bridge" -description: "Emulated Hue Bridge" +description: "Instructions how to emulated Hue Bridge within Home Assistant." +date: 2016-08-26 08:00 sidebar: true comments: false sharing: true footer: true +ha_category: Hub +ha_release: 0.27 +ha_iot_class: "Local Push" --- -The `emulated_hue` component provides a virtual Philips Hue bridge, written entirely in software, -that allows services that work with the Hue API to interact with Home Assistant -entities. The driving use case behind this functionality is to allow Home -Assistant to work with an Amazon Echo with no set up cost outside of -configuration changes. +The `emulated_hue` component provides a virtual Philips Hue bridge, written entirely in software, that allows services that work with the Hue API to interact with Home Assistant +entities. The driving use case behind this functionality is to allow Home Assistant to work with an Amazon Echo with no set up cost outside of configuration changes. ### {% linkable_title Configuration %} -To enable the emulated Hue bridge, add the following to your `configuration.yaml` -file: +To enable the emulated Hue bridge, add the following to your `configuration.yaml` file: ```yaml # Example configuration.yaml entry @@ -30,62 +30,49 @@ emulated_hue: expose_by_default: true exposed_domains: - light - -# Example customization -homeassistant: - customize: - light.bedroom_light: - # Don't allow light.bedroom_light to be controlled by the - # emulated Hue bridge - emulated_hue: false - light.office_light: - # Address light.office_light as "back office light" - emulated_hue_name: "back office light" ``` -- **host_ip** (*Optional*): The IP address that your Home Assistant installation is - running on. If you do not specify this option, the component will attempt to - determine the IP address on its own. +Configuration variables: -- **listen_port** (*Optional*): The port the Hue bridge API web server will run on. If - not specified, this defaults to 8300. This can be any free port on your system. - -- **off_maps_to_on_domains** (*Optional*): The domains that maps an "off" command to - an "on" command. +- **host_ip** (*Optional*): The IP address that your Home Assistant installation is running on. If you do not specify this option, the component will attempt to determine the IP address on its own. +- **listen_port** (*Optional*): The port the Hue bridge API web server will run on. If not specified, this defaults to 8300. This can be any free port on your system. +- **off_maps_to_on_domains** (*Optional*): The domains that maps an "off" command to an "on" command. - For example, if `script` is included in the list, and you - ask Alexa to "turn off the *water plants* script," the command will be handled - as if you asked her to turn on the script. + For example, if `script` is included in the list, and you ask Alexa to "turn off the *water plants* script," the command will be handled as if you asked her to turn on the script. If not specified, this defaults to the following list: - `script` - `scene` -- **expose_by_default** (*Optional*): Whether or not entities should be exposed via the - bridge by default instead of explicitly (see the 'echo' attribute later on). - If not specified, this defaults to true. - -- **exposed_domains** (*Optional*): The domains that are exposed by default if - `expose_by_default` is set to true. If not specified, this defaults to the - following list: +- **expose_by_default** (*Optional*): Whether or not entities should be exposed via the bridge by default instead of explicitly (see the 'echo' attribute later on). If not specified, this defaults to true. +- **exposed_domains** (*Optional*): The domains that are exposed by default if `expose_by_default` is set to true. If not specified, this defaults to the following list: - `switch` - `light` - `group` - `input_boolean` - `media_player` +With additional customization you will be able to specify the behaviour of the existing entities. + +```yaml +# Example customization +homeassistant: + customize: + light.bedroom_light: + # Don't allow light.bedroom_light to be controlled by the emulated Hue bridge + emulated_hue: false + light.office_light: + # Address light.office_light as "back office light" + emulated_hue_name: "back office light" +``` + The following are attributes that can be applied in the `customize` section: -- **emulated_hue** (*Optional*): Whether or not the entity should be - exposed by the emulated Hue bridge. The default value for this attribute is controlled - by the `expose_by_default` option. - -- **emulated_hue_name** (*Optional*): The name that the emulated Hue will use. - The default for this is the entity's friendly name. +- **emulated_hue** (*Optional*): Whether or not the entity should be exposed by the emulated Hue bridge. The default value for this attribute is controlled by the `expose_by_default` option. +- **emulated_hue_name** (*Optional*): The name that the emulated Hue will use. The default for this is the entity's friendly name. ### {% linkable_title License %} -Much of this code is based on work done by Bruce Locke on his [ha-local-echo](https://github.com/blocke/ha-local-echo) -project, originally released under the MIT License. The license is located [here](https://github.com/blocke/ha-local-echo/blob/b9bf5dcaae6d8e305e2283179ffba64bde9ed29e/LICENSE). \ No newline at end of file +Much of this code is based on work done by Bruce Locke on his [ha-local-echo](https://github.com/blocke/ha-local-echo) project, originally released under the MIT License. The license is located [here](https://github.com/blocke/ha-local-echo/blob/b9bf5dcaae6d8e305e2283179ffba64bde9ed29e/LICENSE). From ce20c71b7865cbf1cf65c2ca8bd1e3376ef85548 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Sat, 27 Aug 2016 11:36:03 +0200 Subject: [PATCH 59/80] Add initial fan docs --- source/_components/fan.markdown | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 source/_components/fan.markdown diff --git a/source/_components/fan.markdown b/source/_components/fan.markdown new file mode 100644 index 00000000000..c196d9f7705 --- /dev/null +++ b/source/_components/fan.markdown @@ -0,0 +1,22 @@ +--- +layout: page +title: "Fan" +description: "Instructions how to setup Fan devices within Home Assistant." +date: 2016-08-26 19:00 +sidebar: true +comments: false +sharing: true +footer: true +--- + + +The `fan` component is built for the controlling of fan devices. It can be called the little brother of the [climate](/components/climate/) component. + +To enable this component, pick one of the platforms, and add it to your `configuration.yaml`: + +```yaml +# Example configuration.yaml entry +climate: + platform: fan +``` + From d3d906dade9de3c2b0e52732fd125cfa3250d087 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Sat, 27 Aug 2016 11:38:12 +0200 Subject: [PATCH 60/80] Add fan --- source/_components/demo.markdown | 1 + 1 file changed, 1 insertion(+) diff --git a/source/_components/demo.markdown b/source/_components/demo.markdown index 3f92274a086..8903e3cbfc3 100644 --- a/source/_components/demo.markdown +++ b/source/_components/demo.markdown @@ -26,6 +26,7 @@ Available demo platforms: - [Sensor](/components/sensor/) (`sensor`) - [Switch](/components/switch/) (`switch`) - [Climate](/components/climate/) (`climate`) +- [Fan](/components/fan/) (`fan`) To integrate a demo platform in Home Assistant, add the following section to your `configuration.yaml` file: From 6280702cb22768677c84a6c31eb12dc4d3d2bafd Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Sat, 27 Aug 2016 11:43:25 +0200 Subject: [PATCH 61/80] Add initial insteon fan docs --- source/_components/insteon_hub.fan.markdown | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 source/_components/insteon_hub.fan.markdown diff --git a/source/_components/insteon_hub.fan.markdown b/source/_components/insteon_hub.fan.markdown new file mode 100644 index 00000000000..fe21a38bdbb --- /dev/null +++ b/source/_components/insteon_hub.fan.markdown @@ -0,0 +1,17 @@ +--- +layout: page +title: "Insteon Hub Fan" +description: "Instructions how to setup the Insteon Hub Fans within Home Assistant." +date: 2016-08-26 08:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: insteon.png +ha_category: Fan +ha_release: 0.27 +--- + +The `insteon_hub` fan component lets you control your fans connected to an [Insteon Hub](http://www.insteon.com/insteon-hub/) with Home Assistant. + +To get your Insteon Hub fan working with Home Assistant, follow the instructions for the general [Insteon Hub component](/components/insteon_hub/). From 72c3c4f3c888eabada5aff8fa02163d938aeff5d Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Sat, 27 Aug 2016 11:44:57 +0200 Subject: [PATCH 62/80] Rename file --- .../{insteon_hub.fan.markdown => fan.insteon_hub.markdown} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename source/_components/{insteon_hub.fan.markdown => fan.insteon_hub.markdown} (100%) diff --git a/source/_components/insteon_hub.fan.markdown b/source/_components/fan.insteon_hub.markdown similarity index 100% rename from source/_components/insteon_hub.fan.markdown rename to source/_components/fan.insteon_hub.markdown From 4a73e9c0e8bc1a76129cbc74c470abdbfab5e6b6 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Sat, 27 Aug 2016 11:47:12 +0200 Subject: [PATCH 63/80] Add deprecated warning --- source/_components/garage_door.mqtt.markdown | 1 + source/_components/garage_door.rpi_gpio.markdown | 2 ++ source/_components/garage_door.wink.markdown | 2 ++ source/_components/garage_door.zwave.markdown | 2 ++ 4 files changed, 7 insertions(+) diff --git a/source/_components/garage_door.mqtt.markdown b/source/_components/garage_door.mqtt.markdown index 2503700f0f1..6a75f241656 100644 --- a/source/_components/garage_door.mqtt.markdown +++ b/source/_components/garage_door.mqtt.markdown @@ -13,6 +13,7 @@ ha_release: 0.18 ha_iot_class: depends --- +**This platform has been deprecated in favor of a "cover" platform and will be removed in the future. Please use the cover platform.** The `mqtt` garage door platform let you control your MQTT enabled garage door. diff --git a/source/_components/garage_door.rpi_gpio.markdown b/source/_components/garage_door.rpi_gpio.markdown index 999df82fdc9..950c99d911e 100644 --- a/source/_components/garage_door.rpi_gpio.markdown +++ b/source/_components/garage_door.rpi_gpio.markdown @@ -12,6 +12,8 @@ ha_category: Garage Door ha_release: 0.23 --- +**This platform has been deprecated in favor of a "cover" platform and will be removed in the future. Please use the cover platform.** + The `rpi_gpio` garage door platform allows you to use a Raspberry Pi to control your Garage door. It uses two pins on the Raspberry Pi. diff --git a/source/_components/garage_door.wink.markdown b/source/_components/garage_door.wink.markdown index d905f66d7e0..989dde91f6d 100644 --- a/source/_components/garage_door.wink.markdown +++ b/source/_components/garage_door.wink.markdown @@ -12,6 +12,8 @@ ha_category: Garage Door ha_release: 0.13 --- +**This platform has been deprecated in favor of a "cover" platform and will be removed in the future. Please use the cover platform.** + Wink garage door functionality is currently limited to view only. Wink garage doors will still show the current state of the door, but control has been disabled for third parties. If you have a Chamberlain garage door, and would like to control it via Home Assistant, please contact Chamberlain and request that they re-enabled third-party control. The following quote is from Wink. diff --git a/source/_components/garage_door.zwave.markdown b/source/_components/garage_door.zwave.markdown index 94e3b7bf4f2..e7b3ae63c03 100644 --- a/source/_components/garage_door.zwave.markdown +++ b/source/_components/garage_door.zwave.markdown @@ -12,4 +12,6 @@ ha_category: Garage Door ha_release: 0.23 --- +**This platform has been deprecated in favor of a "cover" platform and will be removed in the future. Please use the cover platform.** + To get your Z-Wave garage doors working with Home Assistant, follow the instructions for the general [Z-Wave component](/components/zwave/). From df184229d3d65f8533ddbdecc332ea046b97e80d Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Sat, 27 Aug 2016 11:55:52 +0200 Subject: [PATCH 64/80] Initial MQTT fan docs --- source/_components/fan.mqtt.markdown | 55 ++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 source/_components/fan.mqtt.markdown diff --git a/source/_components/fan.mqtt.markdown b/source/_components/fan.mqtt.markdown new file mode 100644 index 00000000000..b03d00bccbd --- /dev/null +++ b/source/_components/fan.mqtt.markdown @@ -0,0 +1,55 @@ +--- +layout: page +title: "MQTT Fan" +description: "Instructions how to integrate MQTT fans into Home Assistant." +date: 2016-08-27 09:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: mqtt.png +ha_category: Fan +ha_release: 0.27 +ha_iot_class: depends +--- + +The `mqtt` fan platform let you control your MQTT enabled fans. + +In an ideal scenario, the MQTT device will have a `state_topic` to publish state changes. If these messages are published with `RETAIN` flag, the MQTT fan will receive an instant state update after subscription and will start with correct state. Otherwise, the initial state of the fan will be `false`. + +When a `state_topic` is not available, the fan will work in optimistic mode. In this mode, the fan will immediately change state after every command. Otherwise, the fan will wait for state confirmation from device (message from `state_topic`). + +Optimistic mode can be forced, even if state topic is available. Try to enable it, if experiencing incorrect fan operation. + +To enable MQTT fans in your installation, add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yml entry +fan: + platform: mqtt + name: Living room + state_topic: "home/living-room/fan" + command_topic: "home/living-room/fan/set" + payload_on: "ON" + payload_off: "OFF" + optimistic: false + qos: 0 + retain: true + value_template: '{% raw %}{{ value.x }}{% endraw %}' +``` + +Configuration variables: + +- **name** (*Optional*): The name of the lock. Default is 'MQTT Lock'. +- **state_topic** (*Optional*): The MQTT topic subscribed to receive state updates. +- **command_topic** (*Required*): The MQTT topic to publish commands to change the lock state. +- **payload_on** (*Optional*): The payload that represents the running state. Default is "ON". +- **payload_off** (*Optional*): The payload that represents the stop state. Default is "OFF". +- **optimistic** (*Optional*): Flag that defines if lock works in optimistic mode. Default is `true` if no state topic defined, else `false`. +- **qos** (*Optional*): The maximum QoS level of the state topic. Default is 0 and will also be used to publishing messages. +- **retain** (*Optional*): If the published message should have the retain flag on or not. +- **value_template** (*Optional*): Defines a [template](/topics/templating/) to extract a value from the payload. + +

+Make sure that your topic match exact. `some-topic/` and `some-topic` are different topics. +

From 097e39a9b318550f86032ad93a0631e80a8c804e Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Sat, 27 Aug 2016 12:00:25 +0200 Subject: [PATCH 65/80] Add link and change category --- source/_components/hvac.markdown | 2 +- source/_components/hvac.zwave.markdown | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/source/_components/hvac.markdown b/source/_components/hvac.markdown index c36a3fba84b..ab5be542488 100644 --- a/source/_components/hvac.markdown +++ b/source/_components/hvac.markdown @@ -10,7 +10,7 @@ footer: true ha_release: 0.19 --- -**This component has been deprecated in favor of the "climate" component and will be removed in the future. Please use climate.** +**This component has been deprecated in favor of the "[climate](/components/climate/)" component and will be removed in the future. Please use climate.** The `hvac` component is built for the controlling and monitoring of HVAC (heating, ventilating, and air conditioning) devices. diff --git a/source/_components/hvac.zwave.markdown b/source/_components/hvac.zwave.markdown index 30c95663268..c63cb963fdd 100644 --- a/source/_components/hvac.zwave.markdown +++ b/source/_components/hvac.zwave.markdown @@ -8,10 +8,10 @@ comments: false sharing: true footer: true logo: z-wave.png -ha_category: HVAC +ha_category: Deprecated ha_release: 0.19 --- -**This platform has been deprecated in favor of a "climate" platform and will be removed in the future. Please use the climate platform.** +**This platform has been deprecated in favor of a "[climate](/components/climate.zwave/)" platform and will be removed in the future. Please use the climate platform.** To get your Z-Wave `hvac` devices working with Home Assistant, follow the instructions for the general [Z-Wave component](/components/zwave/) and the [HVAC component](/components/hvac/). From f329dd8a33bf9b6ad219ac571ee12bacca606d14 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Sat, 27 Aug 2016 12:04:53 +0200 Subject: [PATCH 66/80] Remove HVAC reference --- source/_components/climate.zwave.markdown | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/_components/climate.zwave.markdown b/source/_components/climate.zwave.markdown index c99149936fe..6d20fdc01e3 100644 --- a/source/_components/climate.zwave.markdown +++ b/source/_components/climate.zwave.markdown @@ -13,10 +13,10 @@ ha_release: 0.17 --- -To get your Z-Wave thermostat working with Home Assistant, follow the instructions for the general [Z-Wave component](/components/zwave/). +To get your Z-Wave thermostat or HVAC unit working with Home Assistant, follow the instructions for the general [Z-Wave component](/components/zwave/).

-If your thermostat support fan modes or different operating modes, it should be considered a [HVAC component](/components/hvac.zwave/), and will also be detected as one. Thermostat component does not support setting fan or operation mode. This is controlled via the HVAC component. +Thermostats with support for fan modes or different operating modes, will be handled like a HVAC device and will also be detected as one. If the thermostat support different operationg modes, you will get one thermostat entity for each mode. These can be hidden with settings using the customize setting in the `configuration.yaml` file.

From 617281a938ecc97ebadf65fd52f93dad971006ee Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Sat, 27 Aug 2016 12:17:30 +0200 Subject: [PATCH 67/80] Add link and change category --- source/_components/thermostat.ecobee.markdown | 4 +++- source/_components/thermostat.eq3btsmart.markdown | 4 ++-- source/_components/thermostat.heat_control.markdown | 4 ++-- source/_components/thermostat.heatmiser.markdown | 4 ++-- source/_components/thermostat.honeywell.markdown | 4 ++-- source/_components/thermostat.knx.markdown | 4 ++-- source/_components/thermostat.nest.markdown | 4 ++-- source/_components/thermostat.proliphix.markdown | 4 ++-- source/_components/thermostat.radiotherm.markdown | 4 ++-- source/_components/thermostat.zwave.markdown | 4 ++-- 10 files changed, 21 insertions(+), 19 deletions(-) diff --git a/source/_components/thermostat.ecobee.markdown b/source/_components/thermostat.ecobee.markdown index 15a7f040d20..b8e7926533c 100644 --- a/source/_components/thermostat.ecobee.markdown +++ b/source/_components/thermostat.ecobee.markdown @@ -8,8 +8,10 @@ comments: false sharing: true footer: true logo: ecobee.png -ha_category: Thermostat +ha_category: Deprecated ha_release: 0.9 --- +**This platform has been deprecated in favor of a "[climate](/components/climate.ecobee/)" platform and will be removed in the future. Please use the climate platform.** + To get your Ecobee thermostats working with Home Assistant, follow the instructions for the general [Ecobee component](/components/ecobee/). diff --git a/source/_components/thermostat.eq3btsmart.markdown b/source/_components/thermostat.eq3btsmart.markdown index d81f178bbf2..bacf1c76570 100644 --- a/source/_components/thermostat.eq3btsmart.markdown +++ b/source/_components/thermostat.eq3btsmart.markdown @@ -8,11 +8,11 @@ comments: false sharing: true footer: true logo: eq3.gif -ha_category: Thermostat +ha_category: Deprecated ha_iot_class: "Local Poll" --- -**This platform has been deprecated in favor of a "climate" platform and will be removed in the future. Please use the climate platform.** +**This platform has been deprecated in favor of a "[climate](/components/climate.eq3btsmart/)" platform and will be removed in the future. Please use the climate platform.** This platform allows you to integrate EQ3 Bluetooth Smart Thermostats. diff --git a/source/_components/thermostat.heat_control.markdown b/source/_components/thermostat.heat_control.markdown index 9f3d0335945..e311402abb8 100644 --- a/source/_components/thermostat.heat_control.markdown +++ b/source/_components/thermostat.heat_control.markdown @@ -8,10 +8,10 @@ comments: false sharing: true footer: true logo: heat-control.png -ha_category: Thermostat +ha_category: Deprecated --- -**This platform has been deprecated in favor of a "climate" platform and will be removed in the future. Please use the climate platform.** +**This platform has been deprecated in favor of a "[climate](/components/climate.generic_thermostat/)" platform and will be removed in the future. Please use the climate platform.** Heat Control is a thermostat implemented in Home Assistant. It uses a sensor and a switch connected to a heater under the hood. If the measured temperature is cooler then the target temperature, the heater will be turned on and turned off when required temperature is reached. diff --git a/source/_components/thermostat.heatmiser.markdown b/source/_components/thermostat.heatmiser.markdown index de21cd2ed28..41d5d2be44f 100644 --- a/source/_components/thermostat.heatmiser.markdown +++ b/source/_components/thermostat.heatmiser.markdown @@ -8,11 +8,11 @@ comments: false sharing: true footer: true logo: heatmiser.png -ha_category: Thermostat +ha_category: Deprecated ha_release: "0.10" --- -**This platform has been deprecated in favor of a "climate" platform and will be removed in the future. Please use the climate platform.** +**This platform has been deprecated in favor of a "[climate](/components/climate.heatmiser/)" platform and will be removed in the future. Please use the climate platform.** The `heatmiser` thermostat platform let you control [Heatmiser DT/DT-E/PRT/PRT-E](http://www.heatmisershop.co.uk/heatmiser-slimline-programmable-room-thermostat/) thermostats from Heatmiser. The module itself is currently setup to work over a RS232 -> RS485 converter, therefore it connects over IP. diff --git a/source/_components/thermostat.honeywell.markdown b/source/_components/thermostat.honeywell.markdown index f2247af67ae..47099ff459d 100644 --- a/source/_components/thermostat.honeywell.markdown +++ b/source/_components/thermostat.honeywell.markdown @@ -8,10 +8,10 @@ comments: false sharing: true footer: true logo: honeywell.png -ha_category: Thermostat +ha_category: Deprecated --- -**This platform has been deprecated in favor of a "climate" platform and will be removed in the future. Please use the climate platform.** +**This platform has been deprecated in favor of a "[climate](/components/climate.honeywell/)" platform and will be removed in the future. Please use the climate platform.** The `honeywell` thermostat platform let you control [Honeywell Connected](http://getconnected.honeywell.com/en/) thermostats from Home Assistant. diff --git a/source/_components/thermostat.knx.markdown b/source/_components/thermostat.knx.markdown index 22c0f42e792..f5bf39192a6 100644 --- a/source/_components/thermostat.knx.markdown +++ b/source/_components/thermostat.knx.markdown @@ -8,11 +8,11 @@ comments: false sharing: true footer: true logo: knx.png -ha_category: DIY +ha_category: Deprecated ha_release: 0.25 --- -**This platform has been deprecated in favor of a "climate" platform and will be removed in the future. Please use the climate platform.** +**This platform has been deprecated in favor of a "[climate](/components/climate.knx/)" platform and will be removed in the future. Please use the climate platform.** The `knx` thermostat platform is used as in interface with KNX thermostats. diff --git a/source/_components/thermostat.nest.markdown b/source/_components/thermostat.nest.markdown index f49cde1320b..a8fd2709c6a 100644 --- a/source/_components/thermostat.nest.markdown +++ b/source/_components/thermostat.nest.markdown @@ -8,10 +8,10 @@ comments: false sharing: true footer: true logo: nest_thermostat.png -ha_category: Thermostat +ha_category: Deprecated --- -**This platform has been deprecated in favor of a "climate" platform and will be removed in the future. Please use the climate platform.** +**This platform has been deprecated in favor of a "[climate](/components/climate.nest/)" platform and will be removed in the future. Please use the climate platform.** The `nest` thermostat platform let you control a thermostat from [Nest](https://nest.com). diff --git a/source/_components/thermostat.proliphix.markdown b/source/_components/thermostat.proliphix.markdown index 4a9693c1cb8..e40fe93810b 100644 --- a/source/_components/thermostat.proliphix.markdown +++ b/source/_components/thermostat.proliphix.markdown @@ -8,11 +8,11 @@ comments: false sharing: true footer: true logo: proliphix.png -ha_category: Thermostat +ha_category: Deprecated ha_release: 0.11 --- -**This platform has been deprecated in favor of a "climate" platform and will be removed in the future. Please use the climate platform.** +**This platform has been deprecated in favor of a "[climate](/components/climate.proliphix/)" platform and will be removed in the future. Please use the climate platform.** The `proliphix` thermostat platform let you control [Proliphix](http://www.proliphix.com) thermostat from Home Assistant. diff --git a/source/_components/thermostat.radiotherm.markdown b/source/_components/thermostat.radiotherm.markdown index 4f7e1b63b09..45cafa5bb19 100644 --- a/source/_components/thermostat.radiotherm.markdown +++ b/source/_components/thermostat.radiotherm.markdown @@ -8,10 +8,10 @@ comments: false sharing: true footer: true logo: radiotherm.png -ha_category: Thermostat +ha_category: Deprecated --- -**This platform has been deprecated in favor of a "climate" platform and will be removed in the future. Please use the climate platform.** +**This platform has been deprecated in favor of a "[climate](/components/climate.radiotherm/)" platform and will be removed in the future. Please use the climate platform.** The `radiotherm` thermostat platform let you control a thermostat from [Radio Thermostat](http://www.radiothermostat.com/). diff --git a/source/_components/thermostat.zwave.markdown b/source/_components/thermostat.zwave.markdown index 4225f83bec9..60fc92b6011 100644 --- a/source/_components/thermostat.zwave.markdown +++ b/source/_components/thermostat.zwave.markdown @@ -8,11 +8,11 @@ comments: false sharing: true footer: true logo: z-wave.png -ha_category: Thermostat +ha_category: Deprecated ha_release: 0.17 --- -**This platform has been deprecated in favor of a "climate" platform and will be removed in the future. Please use the climate platform.** +**This platform has been deprecated in favor of a "[climate](/components/climate.zwave/)" platform and will be removed in the future. Please use the climate platform.** To get your Z-Wave thermostat working with Home Assistant, follow the instructions for the general [Z-Wave component](/components/zwave/). From 901f85cc18b5ef741764375edcbbc1dd37c02752 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Sat, 27 Aug 2016 12:38:41 +0200 Subject: [PATCH 68/80] upadte --- source/_components/cover.mqtt.markdown | 52 +++++++++++--------------- 1 file changed, 21 insertions(+), 31 deletions(-) diff --git a/source/_components/cover.mqtt.markdown b/source/_components/cover.mqtt.markdown index 2275b83e082..9b544407af7 100644 --- a/source/_components/cover.mqtt.markdown +++ b/source/_components/cover.mqtt.markdown @@ -9,56 +9,46 @@ sharing: true footer: true logo: mqtt.png ha_category: Cover +ha_release: 0.18 --- +The `mqtt` cover platform enables the possibility to control an MQTT cover. The device state will be updated only after receiving the a new +state from `state_topic`. If these messages are published with `RETAIN` flag, the MQTT device will receive an instant state update after subscription and will start with correct state. Otherwise, the initial state will be `unknown`. -The `mqtt` cover platform enables the possibility to control an MQTT -cover. The device state will be updated only after receiving the a new -state from `state_topic`. If these messages are published with RETAIN flag, the -MQTT device will receive an instant state update after subscription and will -start with correct state. Otherwise, the initial state will be `unknown`. +There is a state attribute that stores the relative position of the device, where 0 means the device is `closed` and all other intermediate positions means the device is `open`. -There is a state attribute that stores the relative position of the device, -where 0 means the device is `closed` and all other intermediate positions -means the device is `open`. +When a state topic is not available, the cover will work in optimistic mode. In this mode, the cover will immediately change state after every command. Otherwise, the cover will wait for state confirmation from device (message from `state_topic`). -When a state topic is not available, the switch will work in optimistic mode. -In this mode, the switch will immediately change state after every command. -Otherwise, the switch will wait for state confirmation from device (message -from `state_topic`). +Optimistic mode can be forced, even if `state_topic` is available. Try to enable it, if experiencing incorrect cover operation. -Optimistic mode can be forced, even if state topic is available. Try to enable -it, if experiencing incorrect switch operation. - -To use your MQTT binary sensor in your installation, add the following to your -`configuration.yaml` file: +To use your MQTT cover in your installation, add the following to your `configuration.yaml` file: ```yaml # Example configuration.yml entry cover: - platform: mqtt - state_topic: "home-assistant/cover" - command_topic: "home-assistant/cover/set" - name: "MQTT Sensor" - optimistic: false - qos: 0 - retain: true - state_open: "STATE_OPEN" - state_closed: "STATE_CLOSED" - service_open: "SERVICE_OPEN" - service_close: "SERVICE_CLOSE" - value_template: '{% raw %}{{ value.x }}{% endraw %}' + - platform: mqtt + state_topic: "home-assistant/cover" + command_topic: "home-assistant/cover/set" + name: "MQTT Sensor" + optimistic: false + qos: 0 + retain: true + state_open: "STATE_OPEN" + state_closed: "STATE_CLOSED" + service_open: "SERVICE_OPEN" + service_close: "SERVICE_CLOSE" + value_template: '{% raw %}{{ value.x }}{% endraw %}' ``` Configuration variables: - **state_topic** (*Required*): The MQTT topic subscribed to receive sensor values. -- **name** (*Optional*): The name of the sensor. Default is 'MQTT Sensor'. +- **name** (*Optional*): The name of the sensor. Default is "MQTT Sensor". - **state_open** (*Optional*): The payload that represents open state. Default is"STATE_OPEN" - **state_closed** (*Optional*): The payload that represents closed state. Default is "STATE_CLOSED" - **service_open** (*Optional*): The payload that represents open state in service mode. Default is"SERVICE_OPEN" - **service_close** (*Optional*): The payload that represents closed state in service mode. Default is "SERVICE_CLOSE" -- **optimistic** (*Optional*): Flag that defines if switch works in optimistic mode. Default is true if no state topic defined, else false. +- **optimistic** (*Optional*): Flag that defines if switch works in optimistic mode. Default is `true` if no state topic defined, else `false`. - **qos** (*Optional*): The maximum QoS level of the state topic. Default is 0 and will also be used to publishing messages. - **retain** (*Optional*): If the published message should have the retain flag on or not. - **value_template** (*Optional*): Defines a [template](/topics/templating/) to extract a value from the payload. From 0a4b8c755658cb0414654f9efb86854f18cfe91c Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Sat, 27 Aug 2016 12:39:10 +0200 Subject: [PATCH 69/80] Update --- source/_components/cover.wink.markdown | 13 +++---------- 1 file changed, 3 insertions(+), 10 deletions(-) diff --git a/source/_components/cover.wink.markdown b/source/_components/cover.wink.markdown index be2c0394605..ae896cef612 100644 --- a/source/_components/cover.wink.markdown +++ b/source/_components/cover.wink.markdown @@ -9,20 +9,13 @@ sharing: true footer: true logo: wink.png ha_category: Cover +ha_release: 0.13 --- -Wink cover / garage door functionality is currently limited to view only. Wink -garage doors will still show the current state of the door, but control has -been disabled for third parties. If you have a Chamberlain garage door, and -would like to control it via Home Assistant, please contact Chamberlain and -request that they re-enabled third-party control. +Wink cover/garage door functionality is currently limited to view only. Wink garage doors will still show the current state of the door, but control has been disabled for third parties. If you have a Chamberlain garage door, and would like to control it via Home Assistant, please contact Chamberlain and request that they re-enabled third-party control. The following quote is from Wink. -> As part of our agreement with Chamberlain, third-party access to control - Chamberlain garage doors has been restricted. Please contact Chamberlain - directly to inquire about permissions. - -~~The Wink garage door platform allows you to control your [Wink](http://www.wink.com/) enabled garage door.~~ +> As part of our agreement with Chamberlain, third-party access to control Chamberlain garage doors has been restricted. Please contact Chamberlain directly to inquire about permissions. The requirement is that you have setup your [Wink hub](/components/wink/). From 229bd22f74a27b411ae3f4f27c896b5e3b434bc2 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Sat, 27 Aug 2016 12:43:19 +0200 Subject: [PATCH 70/80] Use lock instead of switch --- source/_components/lock.mqtt.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/lock.mqtt.markdown b/source/_components/lock.mqtt.markdown index cfd1b535e44..2df14a570cb 100644 --- a/source/_components/lock.mqtt.markdown +++ b/source/_components/lock.mqtt.markdown @@ -15,7 +15,7 @@ ha_iot_class: depends The `mqtt` lock platform let you control your MQTT enabled locks. -In an ideal scenario, the MQTT device will have a `state_topic` to publish state changes. If these messages are published with RETAIN flag, the MQTT lock will receive an instant state update after subscription and will start with correct state. Otherwise, the initial state of the switch will be false/unlocked. +In an ideal scenario, the MQTT device will have a `state_topic` to publish state changes. If these messages are published with `RETAIN` flag, the MQTT lock will receive an instant state update after subscription and will start with correct state. Otherwise, the initial state of the lock will be false/unlocked. When a `state_topic` is not available, the lock will work in optimistic mode. In this mode, the lock will immediately change state after every command. Otherwise, the lock will wait for state confirmation from device (message from `state_topic`). From 5eddb981a2271ebfbe66bd7b967d38c21d01d184 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Sat, 27 Aug 2016 12:45:06 +0200 Subject: [PATCH 71/80] Add deprecated warning and change category --- source/_components/garage_door.markdown | 5 ++++- source/_components/garage_door.mqtt.markdown | 6 ++++-- source/_components/garage_door.rpi_gpio.markdown | 9 ++++++--- source/_components/garage_door.wink.markdown | 6 ++++-- source/_components/garage_door.zwave.markdown | 6 ++++-- 5 files changed, 22 insertions(+), 10 deletions(-) diff --git a/source/_components/garage_door.markdown b/source/_components/garage_door.markdown index 6c0944bf35d..10cb067fc8e 100644 --- a/source/_components/garage_door.markdown +++ b/source/_components/garage_door.markdown @@ -8,6 +8,9 @@ comments: false sharing: true footer: true --- -**This component has been deprecated in favor of the "cover" component and will be removed in the future. Please use cover.** + +

+**This component has been deprecated in favor of the "[cover](/component/cover/)" component and will be removed in the future. Please use cover.** +

Home Assistant can give you an interface to control any garage door. diff --git a/source/_components/garage_door.mqtt.markdown b/source/_components/garage_door.mqtt.markdown index 6a75f241656..c99033a2671 100644 --- a/source/_components/garage_door.mqtt.markdown +++ b/source/_components/garage_door.mqtt.markdown @@ -8,12 +8,14 @@ comments: false sharing: true footer: true logo: mqtt.png -ha_category: Garage Door +ha_category: Deprecated ha_release: 0.18 ha_iot_class: depends --- -**This platform has been deprecated in favor of a "cover" platform and will be removed in the future. Please use the cover platform.** +

+**This platform has been deprecated in favor of a "[cover](/components/cover.mqtt/)" platform and will be removed in the future. Please use the cover platform.** +

The `mqtt` garage door platform let you control your MQTT enabled garage door. diff --git a/source/_components/garage_door.rpi_gpio.markdown b/source/_components/garage_door.rpi_gpio.markdown index 950c99d911e..24ae200c720 100644 --- a/source/_components/garage_door.rpi_gpio.markdown +++ b/source/_components/garage_door.rpi_gpio.markdown @@ -8,15 +8,18 @@ comments: false sharing: true footer: true logo: raspberry-pi.png -ha_category: Garage Door +ha_category: Deprecated ha_release: 0.23 --- -**This platform has been deprecated in favor of a "cover" platform and will be removed in the future. Please use the cover platform.** +

+**This platform has been deprecated in favor of a "[cover](/components/cover.rpi_gpio/)" platform and will be removed in the future. Please use the cover platform.** +

The `rpi_gpio` garage door platform allows you to use a Raspberry Pi to control your Garage door. -It uses two pins on the Raspberry Pi. +It uses two pins on the Raspberry Pi. + - The `state_pin` will detect if the door is closed, and - the `relay_pin` will trigger the door to open or close. diff --git a/source/_components/garage_door.wink.markdown b/source/_components/garage_door.wink.markdown index 989dde91f6d..dc178e57698 100644 --- a/source/_components/garage_door.wink.markdown +++ b/source/_components/garage_door.wink.markdown @@ -8,11 +8,13 @@ comments: false sharing: true footer: true logo: wink.png -ha_category: Garage Door +ha_category: Deprecated ha_release: 0.13 --- -**This platform has been deprecated in favor of a "cover" platform and will be removed in the future. Please use the cover platform.** +

+**This platform has been deprecated in favor of a "[cover](/components/cover.wink/)" platform and will be removed in the future. Please use the cover platform.** +

Wink garage door functionality is currently limited to view only. Wink garage doors will still show the current state of the door, but control has been disabled for third parties. If you have a Chamberlain garage door, and would like to control it via Home Assistant, please contact Chamberlain and request that they re-enabled third-party control. diff --git a/source/_components/garage_door.zwave.markdown b/source/_components/garage_door.zwave.markdown index e7b3ae63c03..c07a96085fe 100644 --- a/source/_components/garage_door.zwave.markdown +++ b/source/_components/garage_door.zwave.markdown @@ -8,10 +8,12 @@ comments: false sharing: true footer: true logo: z-wave.png -ha_category: Garage Door +ha_category: Deprecated ha_release: 0.23 --- -**This platform has been deprecated in favor of a "cover" platform and will be removed in the future. Please use the cover platform.** +

+**This platform has been deprecated in favor of a "[cover](/components/cover.zwave/)" platform and will be removed in the future. Please use the cover platform.** +

To get your Z-Wave garage doors working with Home Assistant, follow the instructions for the general [Z-Wave component](/components/zwave/). From e19680eb69efcfec64758d2d57ed9316d7a327d4 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Sat, 27 Aug 2016 12:53:28 +0200 Subject: [PATCH 72/80] Minor updates --- .../_components/cover.command_line.markdown | 24 ++++++------------- source/_components/cover.rpi_gpio.markdown | 5 ++-- source/_components/cover.scsgate.markdown | 19 ++++++++------- source/_components/cover.zwave.markdown | 7 +++--- 4 files changed, 25 insertions(+), 30 deletions(-) diff --git a/source/_components/cover.command_line.markdown b/source/_components/cover.command_line.markdown index 23778344f76..d7e223ca011 100644 --- a/source/_components/cover.command_line.markdown +++ b/source/_components/cover.command_line.markdown @@ -9,13 +9,12 @@ sharing: true footer: true logo: command_line.png ha_category: Cover +ha_release: 0.14 --- -A cover platform that issues specific commands when it is moved up, down and -stopped. It allows anyone to integrate any type of cover into Home Assistant -that can be controlled from the command line. -To enable a command line cover in your installation, add the following to your -`configuration.yaml` file: +A `command_line`cover platform that issues specific commands when it is moved up, down and stopped. It allows anyone to integrate any type of cover into Home Assistant that can be controlled from the command line. + +To enable a command line cover in your installation, add the following to your `configuration.yaml` file: ```yaml # Example configuration.yaml entry @@ -39,18 +38,9 @@ cover: Configuration variables: - **covers** (*Required*): The array that contains all command line covers. - - **entry** (*Required*): Name of the command line cover. Multiple entries - are possible. + - **entry** (*Required*): Name of the command line cover. Multiple entries are possible. - **open_cmd** (*Required*): The command to open the cover. - **close_cmd** (*Required*): The action to close the cover. - **stop_cmd** (*Required*): The action to stop the cover. - - **state_cmd** (*Optional*): If given, this will act as a sensor that runs - in the background and updates the state of the cover. If the command - returns a `0` the indicates the cover is fully closed, whereas a 100 - indicates the cover is fully open. - - **value_template** (*optional - default: '{% raw %}{{ value }}{% endraw - %}'*): if specified, `state_cmd` will ignore the result code of the - command but the template evaluating will indicate the position of the - cover. For example, if your `state_cmd` returns a string "open", - using `value_template` as in the example config above will allow you to - translate that into the valid state `100`. + - **state_cmd** (*Optional*): If given, this will act as a sensor that runs in the background and updates the state of the cover. If the command returns a `0` the indicates the cover is fully closed, whereas a 100 indicates the cover is fully open. + - **value_template** (*optional - default: '{% raw %}{{ value }}{% endraw%}'*): if specified, `state_cmd` will ignore the result code of the command but the template evaluating will indicate the position of the cover. For example, if your `state_cmd` returns a string "open", using `value_template` as in the example config above will allow you to translate that into the valid state `100`. diff --git a/source/_components/cover.rpi_gpio.markdown b/source/_components/cover.rpi_gpio.markdown index 86d58fe0213..eafa1d6f97f 100644 --- a/source/_components/cover.rpi_gpio.markdown +++ b/source/_components/cover.rpi_gpio.markdown @@ -9,12 +9,13 @@ sharing: true footer: true logo: raspberry-pi.png ha_category: Cover -ha_release: 0.27 +ha_release: 0.23 --- The `rpi_gpio` cover platform allows you to use a Raspberry Pi to control your cover such as Garage doors. -It uses two pins on the Raspberry Pi. +It uses two pins on the Raspberry Pi. + - The `state_pin` will detect if the cover is closed, and - the `relay_pin` will trigger the cover to open or close. diff --git a/source/_components/cover.scsgate.markdown b/source/_components/cover.scsgate.markdown index 7d8542f5b64..44777a28154 100644 --- a/source/_components/cover.scsgate.markdown +++ b/source/_components/cover.scsgate.markdown @@ -10,11 +10,10 @@ footer: true logo: bus_scs.png ha_category: Cover --- -The SCSGate devices can control motorized covers connected to the BTicino -MyHome system. -To enable SCSGate covers in your installation, add the following to your -`configuration.yaml` file: +The SCSGate devices can control motorized covers connected to the BTicino MyHome system. + +To enable SCSGate covers in your installation, add the following to your `configuration.yaml` file: ```yaml # Example configuration.yaml entry @@ -28,8 +27,12 @@ cover: Configuration variables: -- **devices** (*Required*): A list of devices with their name to use in the - frontend. +- **devices** array (*Required*): A list of devices. + - **[slug]** (*Required*): Slug of the device. + - **name** (*Required*): Name to use in the frontend. + - **scs_id** (*Required*): The ID of your SCSGate device. + +

+**Known limitation:** It is not possible to know the current state of the cover. +

-**Known limitation:** it is not possible to know the current state of the -cover. diff --git a/source/_components/cover.zwave.markdown b/source/_components/cover.zwave.markdown index 33d724a85d5..b01b2af5ab4 100644 --- a/source/_components/cover.zwave.markdown +++ b/source/_components/cover.zwave.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Z-Wave Cover" -description: "Instructions how to setup the Z-Wave binary sensors within Home Assistant." +description: "Instructions how to setup the Z-Wave covers within Home Assistant." date: 2016-08-24 14:15 sidebar: true comments: false @@ -9,8 +9,9 @@ sharing: true footer: true logo: z-wave.png ha_category: Cover -ha_release: 0.27 +ha_release: 0.23 --- -Garage doors and Rollershuters are supported as Cover in Home Assistant. +Z-Wave garage doors, blinds, and roller shutters are supported as cover in Home Assistant. + To get your Z-Wave covers working with Home Assistant, follow the instructions for the general [Z-Wave component](/components/zwave/). From 7c28c6612bfa6f5a220761cbf6d3cca94b298c4c Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Sat, 27 Aug 2016 12:58:19 +0200 Subject: [PATCH 73/80] Change category to cover --- source/_components/scene.hunterdouglas_powerview.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/scene.hunterdouglas_powerview.markdown b/source/_components/scene.hunterdouglas_powerview.markdown index 3c6ab60238b..55989717247 100644 --- a/source/_components/scene.hunterdouglas_powerview.markdown +++ b/source/_components/scene.hunterdouglas_powerview.markdown @@ -8,7 +8,7 @@ comments: false sharing: true footer: true logo: hunter-douglas-powerview.png -ha_category: Rollershutter +ha_category: Cover ha_release: 0.15 --- From 4e71eb21b2dbc5fd9e342a8b02dcffafc881f562 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Sat, 27 Aug 2016 13:00:23 +0200 Subject: [PATCH 74/80] Add deprecated warning and change category --- source/_components/rollershutter.command_line.markdown | 9 +++++++-- source/_components/rollershutter.homematic.markdown | 7 +++++-- source/_components/rollershutter.markdown | 4 +++- source/_components/rollershutter.mqtt.markdown | 5 ++++- source/_components/rollershutter.rfxtrx.markdown | 6 +++++- source/_components/rollershutter.scsgate.markdown | 7 ++++++- source/_components/rollershutter.wink.markdown | 6 +++++- source/_components/rollershutter.zwave.markdown | 6 +++++- 8 files changed, 40 insertions(+), 10 deletions(-) diff --git a/source/_components/rollershutter.command_line.markdown b/source/_components/rollershutter.command_line.markdown index 6a2651f61a0..60db7404897 100644 --- a/source/_components/rollershutter.command_line.markdown +++ b/source/_components/rollershutter.command_line.markdown @@ -8,10 +8,15 @@ comments: false sharing: true footer: true logo: command_line.png -ha_category: Rollershutter +ha_category: Deprecated ha_release: 0.14 --- -A rollershutter platform that issues specific commands when it is moved up, down and stopped. This might very well become our most powerful platform as it allows anyone to integrate any type of rollershutter into Home Assistant that can be controlled from the command line, including calling other scripts! + +

+**This platform has been deprecated in favor of a "[cover](/components/cover.command_line/)" platform and will be removed in the future. Please use the cover platform.** +

+ +A `rollershutter` platform that issues specific commands when it is moved up, down and stopped. This might very well become our most powerful platform as it allows anyone to integrate any type of rollershutter into Home Assistant that can be controlled from the command line, including calling other scripts! To enable command_rollershutter in your installation, add the following to your `configuration.yaml` file: diff --git a/source/_components/rollershutter.homematic.markdown b/source/_components/rollershutter.homematic.markdown index 38ea5ce3db6..eb536f40e71 100644 --- a/source/_components/rollershutter.homematic.markdown +++ b/source/_components/rollershutter.homematic.markdown @@ -8,12 +8,15 @@ comments: false sharing: true footer: true logo: homematic.png -ha_category: Rollershutter +ha_category: Deprecated ha_release: 0.23 ha_iot_class: "Local Push" --- +

+**This platform has been deprecated in favor of a "[cover](/components/cover.homematic/)" platform and will be removed in the future. Please use the cover platform.** +

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 +Devices will be configured automatically. Please refer to the [component](/components/homematic/) configuration on how to setup Homematic. diff --git a/source/_components/rollershutter.markdown b/source/_components/rollershutter.markdown index 1fdd7147505..f6306a9ad99 100644 --- a/source/_components/rollershutter.markdown +++ b/source/_components/rollershutter.markdown @@ -9,6 +9,8 @@ sharing: true footer: true --- -**This component has been deprecated in favor of the "cover" component and will be removed in the future. Please use cover.** +

+**This component has been deprecated in favor of the "[cover](/components/cover/)" component and will be removed in the future. Please use cover.** +

Home Assistant can give you an interface to control any rollershutters. diff --git a/source/_components/rollershutter.mqtt.markdown b/source/_components/rollershutter.mqtt.markdown index ade1638d2c3..5eab5e95996 100644 --- a/source/_components/rollershutter.mqtt.markdown +++ b/source/_components/rollershutter.mqtt.markdown @@ -8,11 +8,14 @@ comments: false sharing: true footer: true logo: mqtt.png -ha_category: Rollershutter +ha_category: Deprecated ha_release: 0.9 ha_iot_class: depends --- +

+**This platform has been deprecated in favor of a "[cover](/components/cover.mqtt/)" platform and will be removed in the future. Please use the cover platform.** +

The `mqtt` rollershutter platform enables the possibility to control an MQTT rollershutter. The device state will be updated only after receiving the a new state from `state_topic`. If these messages are published with RETAIN flag, the MQTT device will receive an instant state update after subscription and will start with correct state. Otherwise, the initial state will be `unknown`. diff --git a/source/_components/rollershutter.rfxtrx.markdown b/source/_components/rollershutter.rfxtrx.markdown index a3951f1a7a7..2400be8092a 100644 --- a/source/_components/rollershutter.rfxtrx.markdown +++ b/source/_components/rollershutter.rfxtrx.markdown @@ -8,10 +8,14 @@ comments: false sharing: true footer: true logo: rfxtrx.png -ha_category: Rollershutter +ha_category: Deprecated ha_release: 0.21 --- +

+**This platform has been deprecated in favor of a "[cover](/components/cover.rfxtrx/)" platform and will be removed in the future. Please use the cover platform.** +

+ 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/). diff --git a/source/_components/rollershutter.scsgate.markdown b/source/_components/rollershutter.scsgate.markdown index a1843b77a80..6abb7596336 100644 --- a/source/_components/rollershutter.scsgate.markdown +++ b/source/_components/rollershutter.scsgate.markdown @@ -8,8 +8,13 @@ comments: false sharing: true footer: true logo: bus_scs.png -ha_category: Rollershutter +ha_category: Deprecated --- + +

+**This platform has been deprecated in favor of a "[cover](/components/cover.scsgate/)" platform and will be removed in the future. Please use the cover platform.** +

+ The SCSGate device can control motirized roller shutters connected to the BTicino MyHome system. To enable SCSGate roller shutters in your installation, add the following to your `configuration.yaml` file: diff --git a/source/_components/rollershutter.wink.markdown b/source/_components/rollershutter.wink.markdown index d80280d2f5f..0535392f21a 100644 --- a/source/_components/rollershutter.wink.markdown +++ b/source/_components/rollershutter.wink.markdown @@ -8,10 +8,14 @@ comments: false sharing: true footer: true logo: wink.png -ha_category: Rollershutter +ha_category: Deprecated ha_release: 0.22 --- +

+**This platform has been deprecated in favor of a "[cover](/components/cover.wink/)" platform and will be removed in the future. Please use the cover platform.** +

+ 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. diff --git a/source/_components/rollershutter.zwave.markdown b/source/_components/rollershutter.zwave.markdown index 7db200683aa..ebed95ed0fc 100644 --- a/source/_components/rollershutter.zwave.markdown +++ b/source/_components/rollershutter.zwave.markdown @@ -8,8 +8,12 @@ comments: false sharing: true footer: true logo: z-wave.png -ha_category: Rollershutter +ha_category: Deprecated ha_release: 0.23 --- +

+**This platform has been deprecated in favor of a "[cover](/components/cover.zwave/)" platform and will be removed in the future. Please use the cover platform.** +

+ To get your Z-Wave rollershutters working with Home Assistant, follow the instructions for the general [Z-Wave component](/components/zwave/). From dc2ef853d51e0c6c591303abb9c4eb8858fefdbe Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Sat, 27 Aug 2016 13:03:16 +0200 Subject: [PATCH 75/80] Update format warning --- source/_components/hvac.markdown | 2 ++ source/_components/hvac.zwave.markdown | 2 ++ 2 files changed, 4 insertions(+) diff --git a/source/_components/hvac.markdown b/source/_components/hvac.markdown index ab5be542488..db57959bf97 100644 --- a/source/_components/hvac.markdown +++ b/source/_components/hvac.markdown @@ -10,7 +10,9 @@ footer: true ha_release: 0.19 --- +

**This component has been deprecated in favor of the "[climate](/components/climate/)" component and will be removed in the future. Please use climate.** +

The `hvac` component is built for the controlling and monitoring of HVAC (heating, ventilating, and air conditioning) devices. diff --git a/source/_components/hvac.zwave.markdown b/source/_components/hvac.zwave.markdown index c63cb963fdd..820706cec4b 100644 --- a/source/_components/hvac.zwave.markdown +++ b/source/_components/hvac.zwave.markdown @@ -12,6 +12,8 @@ ha_category: Deprecated ha_release: 0.19 --- +

**This platform has been deprecated in favor of a "[climate](/components/climate.zwave/)" platform and will be removed in the future. Please use the climate platform.** +

To get your Z-Wave `hvac` devices working with Home Assistant, follow the instructions for the general [Z-Wave component](/components/zwave/) and the [HVAC component](/components/hvac/). From 12c5ce44f9b790cac13eafc9ed484d85fe3c67c2 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Sat, 27 Aug 2016 13:07:06 +0200 Subject: [PATCH 76/80] Update format warning --- source/_components/thermostat.ecobee.markdown | 2 ++ source/_components/thermostat.eq3btsmart.markdown | 2 ++ source/_components/thermostat.heat_control.markdown | 2 ++ source/_components/thermostat.heatmiser.markdown | 2 ++ source/_components/thermostat.honeywell.markdown | 2 ++ source/_components/thermostat.knx.markdown | 2 ++ source/_components/thermostat.markdown | 4 +++- source/_components/thermostat.nest.markdown | 2 ++ source/_components/thermostat.proliphix.markdown | 2 ++ source/_components/thermostat.radiotherm.markdown | 2 ++ source/_components/thermostat.zwave.markdown | 2 ++ 11 files changed, 23 insertions(+), 1 deletion(-) diff --git a/source/_components/thermostat.ecobee.markdown b/source/_components/thermostat.ecobee.markdown index b8e7926533c..65683469473 100644 --- a/source/_components/thermostat.ecobee.markdown +++ b/source/_components/thermostat.ecobee.markdown @@ -12,6 +12,8 @@ ha_category: Deprecated ha_release: 0.9 --- +

**This platform has been deprecated in favor of a "[climate](/components/climate.ecobee/)" platform and will be removed in the future. Please use the climate platform.** +

To get your Ecobee thermostats working with Home Assistant, follow the instructions for the general [Ecobee component](/components/ecobee/). diff --git a/source/_components/thermostat.eq3btsmart.markdown b/source/_components/thermostat.eq3btsmart.markdown index bacf1c76570..3715452e9dc 100644 --- a/source/_components/thermostat.eq3btsmart.markdown +++ b/source/_components/thermostat.eq3btsmart.markdown @@ -12,7 +12,9 @@ ha_category: Deprecated ha_iot_class: "Local Poll" --- +

**This platform has been deprecated in favor of a "[climate](/components/climate.eq3btsmart/)" platform and will be removed in the future. Please use the climate platform.** +

This platform allows you to integrate EQ3 Bluetooth Smart Thermostats. diff --git a/source/_components/thermostat.heat_control.markdown b/source/_components/thermostat.heat_control.markdown index e311402abb8..4c580183d4b 100644 --- a/source/_components/thermostat.heat_control.markdown +++ b/source/_components/thermostat.heat_control.markdown @@ -11,7 +11,9 @@ logo: heat-control.png ha_category: Deprecated --- +

**This platform has been deprecated in favor of a "[climate](/components/climate.generic_thermostat/)" platform and will be removed in the future. Please use the climate platform.** +

Heat Control is a thermostat implemented in Home Assistant. It uses a sensor and a switch connected to a heater under the hood. If the measured temperature is cooler then the target temperature, the heater will be turned on and turned off when required temperature is reached. diff --git a/source/_components/thermostat.heatmiser.markdown b/source/_components/thermostat.heatmiser.markdown index 41d5d2be44f..7015e5332fb 100644 --- a/source/_components/thermostat.heatmiser.markdown +++ b/source/_components/thermostat.heatmiser.markdown @@ -12,7 +12,9 @@ ha_category: Deprecated ha_release: "0.10" --- +

**This platform has been deprecated in favor of a "[climate](/components/climate.heatmiser/)" platform and will be removed in the future. Please use the climate platform.** +

The `heatmiser` thermostat platform let you control [Heatmiser DT/DT-E/PRT/PRT-E](http://www.heatmisershop.co.uk/heatmiser-slimline-programmable-room-thermostat/) thermostats from Heatmiser. The module itself is currently setup to work over a RS232 -> RS485 converter, therefore it connects over IP. diff --git a/source/_components/thermostat.honeywell.markdown b/source/_components/thermostat.honeywell.markdown index 47099ff459d..0966bf7c932 100644 --- a/source/_components/thermostat.honeywell.markdown +++ b/source/_components/thermostat.honeywell.markdown @@ -11,7 +11,9 @@ logo: honeywell.png ha_category: Deprecated --- +

**This platform has been deprecated in favor of a "[climate](/components/climate.honeywell/)" platform and will be removed in the future. Please use the climate platform.** +

The `honeywell` thermostat platform let you control [Honeywell Connected](http://getconnected.honeywell.com/en/) thermostats from Home Assistant. diff --git a/source/_components/thermostat.knx.markdown b/source/_components/thermostat.knx.markdown index f5bf39192a6..4fc19252eb8 100644 --- a/source/_components/thermostat.knx.markdown +++ b/source/_components/thermostat.knx.markdown @@ -12,7 +12,9 @@ ha_category: Deprecated ha_release: 0.25 --- +

**This platform has been deprecated in favor of a "[climate](/components/climate.knx/)" platform and will be removed in the future. Please use the climate platform.** +

The `knx` thermostat platform is used as in interface with KNX thermostats. diff --git a/source/_components/thermostat.markdown b/source/_components/thermostat.markdown index 4f54b712cee..38199bb965a 100644 --- a/source/_components/thermostat.markdown +++ b/source/_components/thermostat.markdown @@ -9,7 +9,9 @@ sharing: true footer: true --- -**This component has been deprecated in favor of the "cover" component and will be removed in the future. Please use cover.** +

+**This component has been deprecated in favor of the "[climate](/components/climate/)" component and will be removed in the future. Please use cover.** +

Thermostats offer Home Assistant a peek into the current and target temperature in a house. Some thermostats will also offer an away mode that will lower use of heating/cooling. diff --git a/source/_components/thermostat.nest.markdown b/source/_components/thermostat.nest.markdown index a8fd2709c6a..0f6092393cd 100644 --- a/source/_components/thermostat.nest.markdown +++ b/source/_components/thermostat.nest.markdown @@ -11,7 +11,9 @@ logo: nest_thermostat.png ha_category: Deprecated --- +

**This platform has been deprecated in favor of a "[climate](/components/climate.nest/)" platform and will be removed in the future. Please use the climate platform.** +

The `nest` thermostat platform let you control a thermostat from [Nest](https://nest.com). diff --git a/source/_components/thermostat.proliphix.markdown b/source/_components/thermostat.proliphix.markdown index e40fe93810b..bd37e067a34 100644 --- a/source/_components/thermostat.proliphix.markdown +++ b/source/_components/thermostat.proliphix.markdown @@ -12,7 +12,9 @@ ha_category: Deprecated ha_release: 0.11 --- +

**This platform has been deprecated in favor of a "[climate](/components/climate.proliphix/)" platform and will be removed in the future. Please use the climate platform.** +

The `proliphix` thermostat platform let you control [Proliphix](http://www.proliphix.com) thermostat from Home Assistant. diff --git a/source/_components/thermostat.radiotherm.markdown b/source/_components/thermostat.radiotherm.markdown index 45cafa5bb19..5919915ed03 100644 --- a/source/_components/thermostat.radiotherm.markdown +++ b/source/_components/thermostat.radiotherm.markdown @@ -11,7 +11,9 @@ logo: radiotherm.png ha_category: Deprecated --- +

**This platform has been deprecated in favor of a "[climate](/components/climate.radiotherm/)" platform and will be removed in the future. Please use the climate platform.** +

The `radiotherm` thermostat platform let you control a thermostat from [Radio Thermostat](http://www.radiothermostat.com/). diff --git a/source/_components/thermostat.zwave.markdown b/source/_components/thermostat.zwave.markdown index 60fc92b6011..8be1479fedd 100644 --- a/source/_components/thermostat.zwave.markdown +++ b/source/_components/thermostat.zwave.markdown @@ -12,7 +12,9 @@ ha_category: Deprecated ha_release: 0.17 --- +

**This platform has been deprecated in favor of a "[climate](/components/climate.zwave/)" platform and will be removed in the future. Please use the climate platform.** +

To get your Z-Wave thermostat working with Home Assistant, follow the instructions for the general [Z-Wave component](/components/zwave/). From 643a1bb7467e5f99de8ecdc72eb1e6cad5528f54 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Sat, 27 Aug 2016 14:05:20 +0200 Subject: [PATCH 77/80] Rename blog post --- ...own => 2016-08-27-notifications-hue-fake-unification.markdown} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename source/_posts/{2016-08-14-release-27.markdown => 2016-08-27-notifications-hue-fake-unification.markdown} (100%) diff --git a/source/_posts/2016-08-14-release-27.markdown b/source/_posts/2016-08-27-notifications-hue-fake-unification.markdown similarity index 100% rename from source/_posts/2016-08-14-release-27.markdown rename to source/_posts/2016-08-27-notifications-hue-fake-unification.markdown From b70bd36f730fc37adb20f3568fa8c8e0735a1706 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Sat, 27 Aug 2016 14:20:36 +0200 Subject: [PATCH 78/80] Sync blog post --- ...otifications-hue-fake-unification.markdown | 65 +++++++++++++++---- 1 file changed, 54 insertions(+), 11 deletions(-) diff --git a/source/_posts/2016-08-27-notifications-hue-fake-unification.markdown b/source/_posts/2016-08-27-notifications-hue-fake-unification.markdown index 0e35b9d2ba9..af88d1bfc4b 100644 --- a/source/_posts/2016-08-27-notifications-hue-fake-unification.markdown +++ b/source/_posts/2016-08-27-notifications-hue-fake-unification.markdown @@ -1,27 +1,58 @@ --- layout: post -title: "0.27: Notify improvements, configuration checks, and HP ILO support" +title: "0.27 is here to crack eggs and take names: notifications, Hue fakery and unification come to Home Assistant" description: "HTML5 push notifications and grouping support, Configuration validations and checking, cover, and climate." -date: 2016-08-19 09:00 -date_formatted: "August 19, 2016" -author: Paulus Schoutsen & Fabian Affolter -author_twitter: balloob +date: 2016-08-27 14:17:25 +0200 +date_formatted: "August 27, 2016" +author: Robbie Trencheny +author_twitter: Robbie comments: true categories: Release-Notes --- -This upcoming release can only be described with one word: **Amazing** +This release, 0.27, could only be possibly described by exactly one word: -As of this release we have done [10,000 builds on Travis](https://travis-ci.org/home-assistant/home-assistant/builds/154660811) and recently passed 900 forks on Github! We are also fast approaching 4,000 stars on Github. +# #Amazing -While this release is **Amazing**, we had to crack a few eggs to make an omelette so some things are broken. Please make sure to read the Breaking Changes section below! +Keep reading to see what **#Amazing** things we have in store for you this week :smile:! And make sure you read all the way to the end, because I left a present down there for those committed few among you :) + +But first... + +## {% linkable_title Some general housekeeping %} + +Paulus ([@balloob]) is on vacation in Europe this week, so you will all have to deal with me, Robbie ([@robbiet480]) for this release blog post. Don't worry, he'll be back to tearing apart your pull requests in no time :-). + +Special thanks to my awesome helpers for this week's release who are looking over my shoulder to make sure I'm crossing my t's and dotting my i's: [@Teagan42], [@infamy] and [@fabaff]. + +## {% linkable_title Handing out some trophies %} + +I felt that I had to 1-up Paulus ([@balloob]) somehow with his 500,000 pageviews stat he shared in the [0.26 blog post](https://home-assistant.io/blog/2016/08/13/foursquare-fast-com-ffmpeg-gpsd/), so I pushed myself and our development community as a whole super hard the last two weeks to put a lot of love into Home Assistant to bring you not just 1, but 6 **#Amazing** stats for this release. I am extremely happy to report to you the following stats. We have now passed: + +* [10,000](https://travis-ci.org/home-assistant/home-assistant/builds/154660811) builds on Travis (congrats to [@BluGeni]) +* [3,000](https://github.com/home-assistant/home-assistant/pull/3000) issues and pull requests (thanks [@kellerza]!) +* [2,000](https://github.com/home-assistant/home-assistant/pull/2991) pull requests alone (awesome [@fabaff]!!) +* 900 forks on Github! + +In addition, + +* Almost at 4,000 stars on Github! +* [I'm now #5 contributor by most commits!!!](https://github.com/home-assistant/home-assistant/graphs/contributors) Hey wait, how'd this get in here 😳 + +Now that we have that great news out of the way, onto this week's release which is going to keep the **#Amazing** gravy train rolling right along and get to the stuff you all _really_ are here for. + +## {% linkable_title 0.27 %} + +While this release is **#Amazing**, we had to break a few eggs (now you understand the title reference!) to make a beautiful omelette (using home automation obviously) so some platforms and components have needed to introduce breaking changes. Please make sure to read the Breaking Changes section below. + +### {% linkable_title Hue Bridge Emulation %} +Thanks to [@mgbowen] we now have the functionality previously provided by [@blocke]'s [ha-local-echo](https://github.com/blocke/ha-local-echo) built right into Home Assistant! This means that for those of you with devices that either lack or have a subpar integration with Home Assistant (looking at you Amazon Echo) you can now have a better experience by having your Home Assistant [fake a Hue Bridge][Hue]. Personally, I have used [@auchter]'s [Haaska](https://github.com/auchter/haaska) previously but found that it was slow to respond and sometimes failed entirely. With the new [`emulated_hue`][Hue] component, we can have local control of entities through Amazon Echo. ### {% linkable_title Notification improvements %} We have some excellent upgrades to the notification system coming to you in 0.27, courtesy of [@robbiet480]. #### {% linkable_title HTML5 Push Notifications %} -This release will enable [HTML5] push notifications on Chrome/Firefox/Opera on both desktop and Android devices. This means that you can send a notification to your phone even when the site is not open on it. When using Chrome you can include an action so that you can control your phone from your lock screen. Thanks again to [@robbiet480] for all his hard work on this! +This release adds support for [HTML5] push notifications on Chrome/Firefox/Opera on both desktop and Android devices. This means that you can send a notification to your phone even your Home Assistant is not in your mobile browser. When using Chrome you can even include 2 action buttons so that you can control your Home Assistant from your phone's lock screen, allowing you to do things like sound alarms or unlock your front door, all without leaving the notification. Thanks again to me ([@robbiet480]) and Paulus ([@balloob]) for all the hard work on this!

@@ -47,11 +78,14 @@ This release includes a first big push on making sure all platforms contain prop

-### {% linkable_title FFMPEG motion / noise sensing %} +### {% linkable_title FFMpeg motion/noise sensing %} It's now possible to use [FFMpeg] to monitor a video stream and detect motion thanks to a new binary sensor platform by [@pvizeli]. ### {% linkable_title Component clean up - Thermostat & HVAC -> Climate. Rollershutter & Garage Door -> Cover. %} -Due to our wild growth we ended up with some components that had a lot of overlapping functionality. [@turbokongen] took on the hard job on merging them. Thermostat and HVAC platforms are now combined under the new [Climate] component. Rollershutter and Garage Door platforms are now combined under the new Cover component. You can easily upgrade by just swapping out the name. For example replace `thermostat` with `climate`. The old components have been deprecated and will be removed in the near future. +Due to our wild growth we ended up with some components that had a lot of overlapping functionality. [@turbokongen] took on the hard job on merging them. Thermostat and HVAC platforms are now combined under the new [Climate] component. Rollershutter and Garage Door platforms are now combined under the new [Cover][cover] component. You can easily upgrade by just swapping out the name. For example replace `thermostat` with `climate`. The old components have been deprecated and will be removed in the near future. + +### {% linkable_title A new `fan` component %} +Along with the new `climate` component, [@Teagan42] and I decided we needed something simpler to just control a [fan]. By the time 0.27 is released it should have support for MQTT and Insteon Hub fans with more to come soon. ### {% linkable_title All changes %} @@ -87,6 +121,8 @@ Due to our wild growth we ended up with some components that had a lot of overla - Z-Wave: New rename [node] service added ([@jnewland]) - Wink: [Bug] fixes ([@w1ll1am23]) - Homematic: new device and controller variable [support] ([@danielperna84], [@pvizeli], [@mcdeck]) +- Allow emulating a [Hue] bridge to control entities ([@mgbowen]) +- New [Fan][fan] component ([@Teagan42], [@robbiet480]) ### {% linkable_title Breaking changes %} - Ecobee3 occupancy sensors have moved from sensor platform to binary sensor platform. @@ -99,16 +135,21 @@ Due to our wild growth we ended up with some components that had a lot of overla - Using the rollershutter and garage door components has been deprecated. Please migrate to the new cover component. (just change name, configurations are compatible) [@arsaboo]: https://github.com/arsaboo +[@auchter]: https://github.com/auchter [@balloob]: https://github.com/balloob +[@blocke]: https://github.com/blocke +[@BluGeni]: https://github.com/BluGeni [@danielperna84]: https://github.com/danielperna84 [@DavidMStraub]: https://github.com/DavidMStraub [@dpford]: https://github.com/dpford [@fabaff]: https://github.com/fabaff +[@infamy]: https://github.com/infamy [@jnewland]: https://github.com/jnewland [@Juggels]: https://github.com/Juggels [@kellerza]: https://github.com/kellerza [@mcdeck]: https://github.com/mcdeck [@meatz]: https://github.com/meatz +[@mgbowen]: https://github.com/mgbowen [@mKerix]: https://github.com/mKerix [@nkgilley]: https://github.com/nkgilley [@nunofgs]: https://github.com/nunofgs @@ -159,3 +200,5 @@ Due to our wild growth we ended up with some components that had a lot of overla [node]: /components/zwave/ [found]: /components/device_tracker.tplink/ [attachments]: /components/notify.slack/ +[Hue]: /components/emulated_hue/ +[fan]: /components/fan/ From 06e1b686eb19b69389b843b59873d8e2d2b4c0ed Mon Sep 17 00:00:00 2001 From: Robbie Trencheny Date: Sat, 27 Aug 2016 20:49:49 -0700 Subject: [PATCH 79/80] Update blog post --- ...otifications-hue-fake-unification.markdown | 57 ++++++++++++------- 1 file changed, 38 insertions(+), 19 deletions(-) diff --git a/source/_posts/2016-08-27-notifications-hue-fake-unification.markdown b/source/_posts/2016-08-27-notifications-hue-fake-unification.markdown index af88d1bfc4b..aec1949f7a7 100644 --- a/source/_posts/2016-08-27-notifications-hue-fake-unification.markdown +++ b/source/_posts/2016-08-27-notifications-hue-fake-unification.markdown @@ -1,8 +1,8 @@ --- layout: post -title: "0.27 is here to crack eggs and take names: notifications, Hue fakery and unification come to Home Assistant" -description: "HTML5 push notifications and grouping support, Configuration validations and checking, cover, and climate." -date: 2016-08-27 14:17:25 +0200 +title: "0.27 is here to break eggs and take names: notifications, Hue fakery, safety and unification come to Home Assistant" +description: "HTML5 push notifications and grouping support, Configuration validations and checking, cover, climate and fan." +date: 2016-08-27 20:30:25 -0700 date_formatted: "August 27, 2016" author: Robbie Trencheny author_twitter: Robbie @@ -10,24 +10,27 @@ comments: true categories: Release-Notes --- -This release, 0.27, could only be possibly described by exactly one word: +This week's blog post could only be possibly described by exactly one hashtag: # #Amazing +or maybe#supersized -Keep reading to see what **#Amazing** things we have in store for you this week :smile:! And make sure you read all the way to the end, because I left a present down there for those committed few among you :) +Keep reading to see what **#Amazing** things we have in store for you this week 😄! And make sure you read all the way to the end, because I left a present down there for those committed few among you :) But first... ## {% linkable_title Some general housekeeping %} -Paulus ([@balloob]) is on vacation in Europe this week, so you will all have to deal with me, Robbie ([@robbiet480]) for this release blog post. Don't worry, he'll be back to tearing apart your pull requests in no time :-). +Paulus ([@balloob]) is on vacation in Europe this week, so you will all have to deal with me, Robbie ([@robbiet480]) for this release blog post. Don't worry, Paulus will be back to tearing apart your pull requests in no time 😈. Special thanks to my awesome helpers for this week's release who are looking over my shoulder to make sure I'm crossing my t's and dotting my i's: [@Teagan42], [@infamy] and [@fabaff]. -## {% linkable_title Handing out some trophies %} +For my next trick, let's hand out some... -I felt that I had to 1-up Paulus ([@balloob]) somehow with his 500,000 pageviews stat he shared in the [0.26 blog post](https://home-assistant.io/blog/2016/08/13/foursquare-fast-com-ffmpeg-gpsd/), so I pushed myself and our development community as a whole super hard the last two weeks to put a lot of love into Home Assistant to bring you not just 1, but 6 **#Amazing** stats for this release. I am extremely happy to report to you the following stats. We have now passed: +## {% linkable_title Trophies %} + +I felt that I had to 1-up Paulus ([@balloob]) somehow with his 500,000 pageviews stat he shared in the [0.26 blog post](/blog/2016/08/13/foursquare-fast-com-ffmpeg-gpsd/), so I pushed myself and our development community as a whole super hard the last two weeks to put a lot of love into Home Assistant to bring you not just one, but six **#Amazing** stats for this release. As of 0.27, we have now surpassed the following milestones: * [10,000](https://travis-ci.org/home-assistant/home-assistant/builds/154660811) builds on Travis (congrats to [@BluGeni]) * [3,000](https://github.com/home-assistant/home-assistant/pull/3000) issues and pull requests (thanks [@kellerza]!) @@ -36,8 +39,8 @@ I felt that I had to 1-up Paulus ([@balloob]) somehow with his 500,000 pageviews In addition, -* Almost at 4,000 stars on Github! -* [I'm now #5 contributor by most commits!!!](https://github.com/home-assistant/home-assistant/graphs/contributors) Hey wait, how'd this get in here 😳 +* We are very close to 4,000 stars on Github! +* [I'm now #5 contributor by most commits!!!](https://github.com/home-assistant/home-assistant/graphs/contributors) Hey wait, how'd this get in here 😳... Now that we have that great news out of the way, onto this week's release which is going to keep the **#Amazing** gravy train rolling right along and get to the stuff you all _really_ are here for. @@ -46,10 +49,10 @@ Now that we have that great news out of the way, onto this week's release which While this release is **#Amazing**, we had to break a few eggs (now you understand the title reference!) to make a beautiful omelette (using home automation obviously) so some platforms and components have needed to introduce breaking changes. Please make sure to read the Breaking Changes section below. ### {% linkable_title Hue Bridge Emulation %} -Thanks to [@mgbowen] we now have the functionality previously provided by [@blocke]'s [ha-local-echo](https://github.com/blocke/ha-local-echo) built right into Home Assistant! This means that for those of you with devices that either lack or have a subpar integration with Home Assistant (looking at you Amazon Echo) you can now have a better experience by having your Home Assistant [fake a Hue Bridge][Hue]. Personally, I have used [@auchter]'s [Haaska](https://github.com/auchter/haaska) previously but found that it was slow to respond and sometimes failed entirely. With the new [`emulated_hue`][Hue] component, we can have local control of entities through Amazon Echo. +Thanks to [@mgbowen] we now have the functionality previously provided by [@blocke]'s [ha-local-echo](https://github.com/blocke/ha-local-echo) [built right into Home Assistant](/components/emulated_hue/)! This means that for those of you with devices that either lack or have a subpar integration with Home Assistant (looking at you Amazon Echo) you can now have a better experience by having your Home Assistant pretend to be a Hue Bridge. Personally, I have used [@auchter]'s [Haaska](https://github.com/auchter/haaska) previously but found that it was slow to respond and sometimes failed entirely. With the new [`emulated_hue`](/components/emulated_hue/) component, you can have local control of entities through Amazon Echo. ### {% linkable_title Notification improvements %} -We have some excellent upgrades to the notification system coming to you in 0.27, courtesy of [@robbiet480]. +We have some excellent upgrades to the notification system coming to you in 0.27, courtesy of me, [@robbiet480]. #### {% linkable_title HTML5 Push Notifications %} This release adds support for [HTML5] push notifications on Chrome/Firefox/Opera on both desktop and Android devices. This means that you can send a notification to your phone even your Home Assistant is not in your mobile browser. When using Chrome you can even include 2 action buttons so that you can control your Home Assistant from your phone's lock screen, allowing you to do things like sound alarms or unlock your front door, all without leaving the notification. Thanks again to me ([@robbiet480]) and Paulus ([@balloob]) for all the hard work on this! @@ -59,20 +62,20 @@ This release adds support for [HTML5] push notifications on Chrome/Firefox/Opera

#### {% linkable_title Notification Groups %} -Using the new notify `group` platform allows you to cut down a lot of duplicate automation logic by combining multiple notification platforms and `target`s into a single notify service. Check out the [docs](https://home-assistant.io/components/notify.group/) for more info. +Using the new notify `group` platform allows you to cut down a lot of duplicate automation logic by combining multiple notification platforms and `target`s into a single notify service. Check out the [docs](/components/notify.group/) for more info. #### {% linkable_title `target` is no longer needed! %} For platforms that support it, starting with the new HTML5 platform, any `target`s that are available will be exposed as individual services, so no more having to remember which `target`s to use. Please note that the existing services also still exist so you can keep using `target` if you wish. ### {% linkable_title Validate configuration before restarting Home Assistant %} -Ever restarted Home Assistant to test a configuration change just to figure out there is a validation error? Well, not anymore! [@kellerza] has added a command line script that will validate your configuration as if you start Home Assistant. +Ever restarted Home Assistant to test a configuration change just to find out there is a validation error? Well, not anymore! [@kellerza] has added a command line script that will validate your configuration as if you started Home Assistant. ```bash $ hass --script check_config ``` ### {% linkable_title Configuration validation %} -This release includes a first big push on making sure all platforms contain proper configuration validation. This should help in getting your configuration right. Thanks to [@fabaff], [@pavoni], [@pvizeli], and [@nkgilley] for all the hard work on this, you rock! +This release includes a big push on making sure all platforms contain proper configuration validation. This should help in getting your configuration right. Thanks to [@fabaff], [@pavoni], [@pvizeli], [@nkgilley] for all the hard work on this, you all rock!

@@ -82,10 +85,10 @@ This release includes a first big push on making sure all platforms contain prop It's now possible to use [FFMpeg] to monitor a video stream and detect motion thanks to a new binary sensor platform by [@pvizeli]. ### {% linkable_title Component clean up - Thermostat & HVAC -> Climate. Rollershutter & Garage Door -> Cover. %} -Due to our wild growth we ended up with some components that had a lot of overlapping functionality. [@turbokongen] took on the hard job on merging them. Thermostat and HVAC platforms are now combined under the new [Climate] component. Rollershutter and Garage Door platforms are now combined under the new [Cover][cover] component. You can easily upgrade by just swapping out the name. For example replace `thermostat` with `climate`. The old components have been deprecated and will be removed in the near future. +Due to our wild growth we ended up with a few components that had a lot of overlapping functionality. [@turbokongen] took on the hard job on merging them. Thermostat and HVAC platforms are now combined under the new Climate component. Rollershutter and Garage Door platforms are now combined under the new Cover component. You can easily upgrade by just swapping out the name. For example replace `thermostat` with `climate`. The old components have been deprecated and will be removed in the near future. ### {% linkable_title A new `fan` component %} -Along with the new `climate` component, [@Teagan42] and I decided we needed something simpler to just control a [fan]. By the time 0.27 is released it should have support for MQTT and Insteon Hub fans with more to come soon. +Along with the new `climate` component, [@Teagan42] and I ([@robbiet480]) decided we needed something simpler to just control a fan. Currently it has support for controlling Insteon fans. MQTT support will appear in 0.28.0. I tried to get it implemented before 0.27.0 but spent too long writing this blog post 😢. ### {% linkable_title All changes %} @@ -131,8 +134,24 @@ Along with the new `climate` component, [@Teagan42] and I decided we needed some - The configuration for the [SABnzbd] sensor has slightly changed. The prefix `type:` is no longer required for monitored variables. ### {% linkable_title Deprecations %} -- Using the thermostat and hvac components has been deprecated. Please migrate to the new climate component. (just change name, configurations are compatible) -- Using the rollershutter and garage door components has been deprecated. Please migrate to the new cover component. (just change name, configurations are compatible) +- Using the `thermostat` and `hvac` components has been deprecated. Please migrate to the new `climate` component. (just change the component name, the configurations are compatible) +- Using the `rollershutter` and `garage_door` components have also been deprecated. Please migrate to the new `cover` component. (just change the component name, the configurations are compatible) + +## {% linkable_title Finishing up %} + +Thanks all for sticking with me to the end. I'll be taking over a lot of Paulus's (@balloob) work while he is gone, but as I said, don't worry because he'll be back well before 0.28.0 comes out. Hopefully you didn't find this jovial blog post too jarring from our standard style, I just wrote a lot of this at 2am after being awake for almost 20 hours, so I'm a little loopy hahaha 😴. + +Also, thanks as always to our developer contributors, documentation contributors, but most of all our users! This would've just been a script that Paulus (@balloob) used to control his lights at home if we didn't have your enthusiasm. + +Feel free to let me know what you thought of this blog post and release on Gitter or my [Twitter](https://twitter.com/robbie), or even the [Home Assistant Twitter](https://twitter.com/home_assistant). Did I mention we have a brand new [Facebook page](https://www.facebook.com/homeassistantio) that you should absolutely Like? There's a convenient Facebook Like and Twitter follow button right on the sidebar. + +I almost forgot about your 🎁 for reading all the way to here: a 🍪! Hope you enjoy it in good health 😄. + +Talk to you soon on Gitter and in your pull request comments! + +-- Robbie + +(p.s. To those of you that scrolled directly to the bottom to get your present, just know that you didn't earn it like the others did. 😄) [@arsaboo]: https://github.com/arsaboo [@auchter]: https://github.com/auchter From e5ef5e74dcca2814859203027cb6ab25b2f8c6a1 Mon Sep 17 00:00:00 2001 From: Robbie Trencheny Date: Sat, 27 Aug 2016 20:50:30 -0700 Subject: [PATCH 80/80] Update homepage version --- source/index.html | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/source/index.html b/source/index.html index 03d98d1525e..ff9002a5941 100644 --- a/source/index.html +++ b/source/index.html @@ -15,11 +15,11 @@ hide_github_edit: true