From 56670b4af181d5761e73a0261958c0f8d41dd2a5 Mon Sep 17 00:00:00 2001 From: Sebastian Muszynski Date: Sat, 9 Sep 2017 11:14:53 +0200 Subject: [PATCH 01/49] Broken link fixed. (#3333) Missing dependency added. Typo fixed. --- source/_components/light.xiaomi_philipslight.markdown | 2 +- source/_components/xiaomi.markdown | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/source/_components/light.xiaomi_philipslight.markdown b/source/_components/light.xiaomi_philipslight.markdown index ec4d351e25f..a8b6d7b1ae9 100644 --- a/source/_components/light.xiaomi_philipslight.markdown +++ b/source/_components/light.xiaomi_philipslight.markdown @@ -17,7 +17,7 @@ The `xiaomi_philipslight` platform allows you to control the state of your Xiaom Currently, the supported features are `on`, `off`, `set_cct` (colortemp) , `set_bright` (brightness). -Please follow the instructions on [Retrieving the Access Token](/xiaomi/#retrieving-the-access-token) to get the API token to use in the `configuration.yaml` file. +Please follow the instructions on [Retrieving the Access Token](/components/xiaomi/#retrieving-the-access-token) to get the API token to use in the `configuration.yaml` file. To add a Xiaomi Philips Light to your installation, add the following to your configuration.yaml file: diff --git a/source/_components/xiaomi.markdown b/source/_components/xiaomi.markdown index c162283ed2d..ad8e727bcda 100644 --- a/source/_components/xiaomi.markdown +++ b/source/_components/xiaomi.markdown @@ -149,10 +149,10 @@ That means that Home Assistant is not getting any response from your Xiaomi gate Follow the pairing process using your phone and Mi-Home app. You will be able to retrieve the token from a SQLite file inside your phone. This token is needed for using various `xiaomi_*` platforms. -Before you begin you need to install `libffi-dev` by running the command below. This is needed for `python-mirobi` to be installed correctly. +Before you begin you need to install `libffi-dev` and `libssl-dev` by running the command below. This is needed for `python-mirobo` to be installed correctly. ```bash -$ sudo apt-get install libffi-dev +$ sudo apt-get install libffi-dev libssl-dev ``` If your Home Assistant installation is running in a [Virtualenv](/docs/installation/virtualenv/#upgrading-home-assistant), make sure you activate it by running the commands below. From 7c3688cc449cfefe0dbedf68e863c4b97fc9ad60 Mon Sep 17 00:00:00 2001 From: Dale Higgs Date: Sat, 9 Sep 2017 07:15:06 -0500 Subject: [PATCH 02/49] Fix broken link to DWD WarnApp Sensor (#3334) --- source/_posts/2017-09-09-release-53.markdown | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/source/_posts/2017-09-09-release-53.markdown b/source/_posts/2017-09-09-release-53.markdown index f056fc6ead6..3e289d5dbfb 100644 --- a/source/_posts/2017-09-09-release-53.markdown +++ b/source/_posts/2017-09-09-release-53.markdown @@ -66,7 +66,7 @@ This release ships a new KNX implementation thanks to @Julius2342. It will insta - Tesla platform ([@zabuldon] - [#9211]) ([tesla docs]) ([binary_sensor.tesla docs]) ([climate.tesla docs]) ([device_tracker.tesla docs]) ([lock.tesla docs]) ([sensor.tesla docs]) (new-platform) - mopar sensor ([@happyleavesaoc] - [#9136]) ([sensor.mopar docs]) (new-platform) - Add Geofency device tracker ([@gunnarhelgason] - [#9106]) ([device_tracker.geofency docs]) (new-platform) -- Added DWD WarnApp Sensor ([@runningman84] - [#8657]) ([sensor.dwd_warnapp docs]) (new-platform) +- Added DWD WarnApp Sensor ([@runningman84] - [#8657]) ([sensor.dwdwarnapp docs]) (new-platform) - Add input_text component ([@BioSehnsucht] - [#9112]) ([input_text docs]) (new-platform) - Introducing a media_player component for Yamaha Multicast devices ([@jalmeroth] - [#9258]) ([media_player.yamaha_musiccast docs]) (new-platform) - Stable and asynchronous KNX library. ([@Julius2342] - [#8725]) ([knx docs]) ([binary_sensor.knx docs]) ([climate.knx docs]) ([cover.knx docs]) ([light.knx docs]) ([sensor.knx docs]) ([switch.knx docs]) (new-platform) @@ -176,7 +176,7 @@ frontend: - Update jinja to 2.9.6 ([@pvizeli] - [#9306]) - Ensure display-name does not exceed 12 characters for CecAdapter. ([@gollo] - [#9268]) ([hdmi_cec docs]) - Expose hue group 0 ([@filcole] - [#8663]) ([light.hue docs]) -- Added DWD WarnApp Sensor ([@runningman84] - [#8657]) ([sensor.dwd_warnapp docs]) (new-platform) +- Added DWD WarnApp Sensor ([@runningman84] - [#8657]) ([sensor.dwdwarnapp docs]) (new-platform) - Add input_text component ([@BioSehnsucht] - [#9112]) ([input_text docs]) (new-platform) - Introducing a media_player component for Yamaha Multicast devices ([@jalmeroth] - [#9258]) ([media_player.yamaha_musiccast docs]) (new-platform) - Handle the case where no registration number is available (instead display VIN (vehicle identification number)). ([@molobrakos] - [#9073]) ([volvooncall docs]) ([device_tracker.volvooncall docs]) @@ -415,7 +415,7 @@ frontend: [sensor.airvisual docs]: https://home-assistant.io/components/sensor.airvisual/ [sensor.buienradar docs]: https://home-assistant.io/components/sensor.buienradar/ [sensor.dht docs]: https://home-assistant.io/components/sensor.dht/ -[sensor.dwd_warnapp docs]: https://home-assistant.io/components/sensor.dwd_warnapp/ +[sensor.dwdwarnapp docs]: https://home-assistant.io/components/sensor.dwdwarnapp/ [sensor.fitbit docs]: https://home-assistant.io/components/sensor.fitbit/ [sensor.homematic docs]: https://home-assistant.io/components/sensor.homematic/ [sensor.mopar docs]: https://home-assistant.io/components/sensor.mopar/ From 96f455fd52defb68561ed1aac8491deb0c1c0bda Mon Sep 17 00:00:00 2001 From: slimatic Date: Sun, 10 Sep 2017 16:27:29 -0400 Subject: [PATCH 03/49] Fixed grammar/typo (#3345) --- source/_components/media_extractor.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/media_extractor.markdown b/source/_components/media_extractor.markdown index 482f40cb682..3deb105407e 100644 --- a/source/_components/media_extractor.markdown +++ b/source/_components/media_extractor.markdown @@ -13,7 +13,7 @@ ha_release: 0.49 --- -The `media_extractor` component gets an stream URL and send it to a media player entity. This component can extract entity specific streams if configured accordingly. +The `media_extractor` component gets a stream URL and sends it to a media player entity. This component can extract entity specific streams if configured accordingly.

Media extractor doesn't transcode streams, it just tries to find stream that match requested query. From c50f9d5815499f1ed7e871420183b0733708921c Mon Sep 17 00:00:00 2001 From: Alok Saboo Date: Mon, 11 Sep 2017 01:58:00 +0530 Subject: [PATCH 04/49] Fix Template binary sensor docs (#3344) --- source/_components/binary_sensor.template.markdown | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/_components/binary_sensor.template.markdown b/source/_components/binary_sensor.template.markdown index 1a983ecc89d..c7743f3ba64 100644 --- a/source/_components/binary_sensor.template.markdown +++ b/source/_components/binary_sensor.template.markdown @@ -108,7 +108,7 @@ This example creates a washing machine "load running" sensor by monitoring an en binary_sensor: - platform: template name: Washing Machine - value_template: {% raw %}'{{ sensor.washing_machine_power > 0 }}'{% endraw %} + value_template: {% raw %}'{{ states.sensor.washing_machine_power.state > 0 }}'{% endraw %} off_delay: minutes: 5 ``` @@ -117,7 +117,7 @@ binary_sensor: This example is determining if anyone is home based on the combination of device tracking and motion sensors. It's extremely useful if you -have kids / baby sitter / grand parrents who might still be in your +have kids/baby sitter/ grand parents who might still be in your house that aren't represented by a trackable device in home assistant. This is providing a composite of wifi based device tracking and z-wave multisensor presence sensors. From cf515b77fc29c12f4cfc0fff10ab98de9ae83225 Mon Sep 17 00:00:00 2001 From: Eric Oosting Date: Sun, 10 Sep 2017 16:29:28 -0400 Subject: [PATCH 05/49] update to reference hassio doc (#3337) reference hassio doc root in order to make way for eventual upgrade documentation there. --- source/_docs/installation/updating.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_docs/installation/updating.markdown b/source/_docs/installation/updating.markdown index 6e4cf49c365..e517a805b20 100644 --- a/source/_docs/installation/updating.markdown +++ b/source/_docs/installation/updating.markdown @@ -23,7 +23,7 @@ $ pip3 install --upgrade homeassistant After updating, you must restart Home Assistant for the changes to take effect. This means that you will have to restart `hass` itself or the [autostarting](/docs/autostart/) daemon (if applicable). Startup can take considerable amount of time (i.e. minutes) depending on your device. This is because all requirements are updated as well.

-To avoid permission errors, the upgrade must be run as the same user as the installation was completed, again review the documentation specific to your install [HASSbian](/docs/hassbian/installation/), [Raspberry Pi All-In-One Installer](/docs/installation/raspberry-pi-all-in-one/), [Vagrant](/docs/installation/vagrant/), or [Virtualenv](/docs/installation/virtualenv). +To avoid permission errors, the upgrade must be run as the same user as the installation was completed, again review the documentation specific to your install [HASSIO](/hassio/), [HASSbian](/docs/hassbian/installation/), [Raspberry Pi All-In-One Installer](/docs/installation/raspberry-pi-all-in-one/), [Vagrant](/docs/installation/vagrant/), or [Virtualenv](/docs/installation/virtualenv).

[BRUH automation](http://www.bruhautomation.com) has created [a tutorial video](https://www.youtube.com/watch?v=tuG2rs1Cl2Y) explaining how to upgrade Home Assistant. From d071d6a9ead7cbbcb765f754a2ce7e45d33ae02b Mon Sep 17 00:00:00 2001 From: Leon99 Date: Mon, 11 Sep 2017 06:31:19 +1000 Subject: [PATCH 06/49] Clarify that hass.io only supports bluetooth on RPi3 (#3336) * Clarify that hass.io only supports bluetooth on RPi3 * Minor changes --- .../_components/device_tracker.bluetooth_tracker.markdown | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/source/_components/device_tracker.bluetooth_tracker.markdown b/source/_components/device_tracker.bluetooth_tracker.markdown index 20d2b5617c7..f926d934042 100644 --- a/source/_components/device_tracker.bluetooth_tracker.markdown +++ b/source/_components/device_tracker.bluetooth_tracker.markdown @@ -13,10 +13,10 @@ ha_iot_class: "Local Polling" ha_release: 0.18 --- -This tracker discovers new devices on boot and tracks bluetooth devices periodically based on interval_seconds value. It is not required to pair the devices with each other! Devices discovered are stored with 'bt_' as the prefix for device mac addresses in `known_devices.yaml`. +This tracker discovers new devices on boot and tracks Bluetooth devices periodically based on `interval_seconds` value. It is not required to pair the devices with each other! Devices discovered are stored with 'bt_' as the prefix for device MAC addresses in `known_devices.yaml`.

-If you are using [Hass.io](/hassio/) you will need to enable the Bluetooth BCM43xx (/addons/bluetooth_bcm43xx/) addon. +[Hass.io](/hassio/) only supports bluetooth on Raspberry Pi 3 via the Bluetooth BCM43xx (/addons/bluetooth_bcm43xx/) addon. [Hass.io](/hassio/) doesn't support external Bluetooth dongles.

To use the Bluetooth tracker in your installation, add the following to your `configuration.yaml` file: @@ -27,6 +27,6 @@ device_tracker: - platform: bluetooth_tracker ``` -In some cases it can be that your device is not discovered. In that case let your phone scan for BT devices while you restart Home Assistant. Just hit `Scan` on your phone all the time until Home Assistant is fully restarted and the device should appear in `known_devices.yaml`. +In some cases it can be that your device is not discovered. In that case let your phone scan for Bluetooth devices while you restart Home Assistant. Just hit `Scan` on your phone all the time until Home Assistant is fully restarted and the device should appear in `known_devices.yaml`. For additional configuration variables check the [Device tracker page](/components/device_tracker/). From 7e79587be807197871cb609eb29875d1b930784d Mon Sep 17 00:00:00 2001 From: runningman84 Date: Sun, 10 Sep 2017 22:33:39 +0200 Subject: [PATCH 07/49] Renamed dwdwarnapp to dwd_weather_warnings (#3335) --- ...napp.markdown => sensor.dwd_weather_warnings.markdown} | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) rename source/_components/{sensor.dwdwarnapp.markdown => sensor.dwd_weather_warnings.markdown} (81%) diff --git a/source/_components/sensor.dwdwarnapp.markdown b/source/_components/sensor.dwd_weather_warnings.markdown similarity index 81% rename from source/_components/sensor.dwdwarnapp.markdown rename to source/_components/sensor.dwd_weather_warnings.markdown index 618794ea4cb..5ac273a7f0a 100644 --- a/source/_components/sensor.dwdwarnapp.markdown +++ b/source/_components/sensor.dwd_weather_warnings.markdown @@ -1,6 +1,6 @@ --- layout: page -title: "DWD Warn Weather" +title: "DWD Weather warnings" description: "Instructions on how to integrate Deutsche Wetter Dienst weather warnings into Home Assistant." date: 2017-07-26 22:00 sidebar: true @@ -13,7 +13,7 @@ ha_release: 0.51 ha_iot_class: "Cloud Polling" --- -The `dwdwarnapp` sensor platform uses the [Deutsche Wetter Dienst (DWD)](http://www.dwd.de) as a source for current and advance warnings. +The `dwd_weather_warnings` sensor platform uses the [Deutsche Wetter Dienst (DWD)](https://www.dwd.de) as a source for current and advance warnings. - A name is optional but if multiple regions are used a name will be required. - The sensor checks for new data every 15 minutes. @@ -23,7 +23,7 @@ To add the DWD WarnApp sensor to your installation, add the following to your `c ```yaml # Example configuration.yaml entry sensor: - - platform: dwdwarnapp + - platform: dwd_weather_warnings region_name: Hansestadt Hamburg ``` @@ -31,7 +31,7 @@ To get the region name: - Find your region here: `https://www.dwd.de/DE/wetter/warnungen_landkreise/warnWetter_node.html?ort=Hamburg` - Verify if you find any warning for your region here: `https://www.dwd.de/DWD/warnungen/warnapp_landkreise/json/warnings.json?jsonp=loadWarnings` -The warning level is between 0 (no danger) and 4 (warnings of extreme weather): +The warning level is between 0 (no danger) and 4 (extrem weather conditions): - Warnungen vor extremem Unwetter (Stufe 4) - Unwetterwarnungen (Stufe 3) - Warnungen vor markantem Wetter (Stufe 2) From 8ce25595cff8e2351e80b38d954713a760673629 Mon Sep 17 00:00:00 2001 From: morberg Date: Mon, 11 Sep 2017 09:27:46 +0200 Subject: [PATCH 08/49] Simplify .gitignore example (#3341) --- .../ecosystem/backup/backup_github.markdown | 30 ++++--------------- 1 file changed, 5 insertions(+), 25 deletions(-) diff --git a/source/_docs/ecosystem/backup/backup_github.markdown b/source/_docs/ecosystem/backup/backup_github.markdown index b917fe32b97..0a0bf9e5ffc 100644 --- a/source/_docs/ecosystem/backup/backup_github.markdown +++ b/source/_docs/ecosystem/backup/backup_github.markdown @@ -50,37 +50,17 @@ Before creating and pushing your Home Assistant configuration to GitHub, please Creating a `.gitignore` file in your repository will tell git which files NOT to push to the GitHub server. This should be used to prevent publishing sensitive files to the public. It should contain a list of filenames and pattern matches. This list should include at least your `secrets.yaml` file, device configuration files, and the Home Assistant database/directory structure. The `.gitignore` file should be placed in your Home Assistant directory. -Here is a sane example, but yours should be based on the files in your structure: +Here is an example that will include your `.gitignore` file, a `scenes` directory, and all .yaml files except for `secrets.yaml` and `known_devices.yaml`. All other files will be excluded. `.gitignore` ```bash -*.pid -*.xml -*.csr -*.crt -*.key -www -OZW_Log.txt -home-assistant.log -home-assistant_v2.db -*.db-journal -lib -deps -tts +* +!*.yaml +!scenes +!.gitignore secrets.yaml known_devices.yaml -*.conf -plex.conf -phue.conf -harmony_media_room.conf -pyozw.sqlite -.* -!/.gitignore -!/.travis.yml -html5_push_registrations.conf -ip_bans.yaml -/icloud/* ``` More information on the layout of the file can be found in the [.gitignore manual](https://git-scm.com/docs/gitignore). From 5d8f1d3f79cd2e65face8c9789937d4d058e9a82 Mon Sep 17 00:00:00 2001 From: hcooper Date: Mon, 11 Sep 2017 00:28:43 -0700 Subject: [PATCH 09/49] authorized_key file needs to be on the boot partition (#3343) Mentioning that it's the root of the boot partition the key file needs to be places in (when I first attempted it I presumed it was the root of the partition called "root"). --- source/developers/hassio/debugging.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/developers/hassio/debugging.markdown b/source/developers/hassio/debugging.markdown index d5dee3b6905..b10426728ed 100644 --- a/source/developers/hassio/debugging.markdown +++ b/source/developers/hassio/debugging.markdown @@ -20,7 +20,7 @@ The following debug tips and tricks are for people who are running the Hass.io i ## {% linkable_title SSH access to the host %} -Create an `authorized_keys` file in the root of your SD card with your public key. Once the device is booted, you can access your device as root over SSH on port 22222. +Create an `authorized_keys` file containing your public key, and place it in the root of the boot partition of your SD card. Once the device is booted, you can access your device as root over SSH on port 22222. Windows instructions how to generate and use private/public keys with Putty are [here][windows-keys]. Instead of the droplet instructions, add the public key as per above instructions. From 0ebd6e7f220ab1e80ac4d14ee2c47b97f8309961 Mon Sep 17 00:00:00 2001 From: Pascal Vizeli Date: Mon, 11 Sep 2017 16:06:38 +0200 Subject: [PATCH 10/49] Update zwave.markdown --- source/hassio/zwave.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/hassio/zwave.markdown b/source/hassio/zwave.markdown index c450e019626..6d14fabcabc 100644 --- a/source/hassio/zwave.markdown +++ b/source/hassio/zwave.markdown @@ -24,7 +24,7 @@ dtoverlay=pi3-miniuart-bt For some exceptional devices, the `/dev/ttyAMA0` will not be detected by udev and are therefor not mapped with docker. So you need explicit set this device for mapping to Home-Assistant. Execute this command on ssh add-on: ```bash -$ curl -d '{"devices": ["ttyAMA0"]}' http://172.17.0.2/homeassistant/options +$ curl -d '{"devices": ["ttyAMA0"]}' http://hassio/homeassistant/options ``` After that, you need change `usb_path` to `/dev/ttyAMA0`. From 1f8acdfacdc31a85b99d034692dfeee449c70779 Mon Sep 17 00:00:00 2001 From: Jens Kohl Date: Mon, 11 Sep 2017 19:43:24 +0200 Subject: [PATCH 11/49] add Samsung D6500 to be compatible (#3352) --- source/_components/media_player.samsungtv.markdown | 1 + 1 file changed, 1 insertion(+) diff --git a/source/_components/media_player.samsungtv.markdown b/source/_components/media_player.samsungtv.markdown index 23121583a87..27e275554b9 100644 --- a/source/_components/media_player.samsungtv.markdown +++ b/source/_components/media_player.samsungtv.markdown @@ -38,6 +38,7 @@ Configuration variables: Currently known supported models: - C7700 +- D6500 - D7000 - D8000 - ES5500 From 654d74149feff554886b1e84ecfe47a2950d5a1b Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Mon, 11 Sep 2017 21:00:37 +0200 Subject: [PATCH 12/49] Add Maker Faire Zurich talk --- source/help/index.markdown | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/source/help/index.markdown b/source/help/index.markdown index a2750554c69..1dbcf609dc5 100644 --- a/source/help/index.markdown +++ b/source/help/index.markdown @@ -29,8 +29,9 @@ Have you found an issue in your Home Assistant installation? Please report it. R ### {% linkable_title Videos, talks, workshops and alike %} -- [Why we can't have the Internet of Nice Things: A home automation primer](https://www.openwest.org/custom/description.php?id=92) at [OpenWest 2017](https://www.openwest.org)- July 2017 -- [Home Automation with Home Assistant](https://github.com/jjmontesl/talk-hass-pydaygalicia2017) at [PyDay Galicia 2017](https://pyday2017.python-vigo.es/gl/)- June 2017 +- [Open Source Heimautomation mit Home Assistant](https://github.com/home-assistant/home-assistant-assets/tree/master/german/2017-maker-faire-zurich) at [Mini Maker Faire 2017](https://www.makerfairezurich.ch/en/) - September 2017 +- [Why we can't have the Internet of Nice Things: A home automation primer](https://www.openwest.org/custom/description.php?id=92) at [OpenWest 2017](https://www.openwest.org) - July 2017 +- [Home Automation with Home Assistant](https://github.com/jjmontesl/talk-hass-pydaygalicia2017) at [PyDay Galicia 2017](https://pyday2017.python-vigo.es/gl/) - June 2017 - [Home Automation with Python](https://www.youtube.com/watch?v=KNFZSSCPUyM) at [GLT 2017](https://glt17.linuxtage.at) - April 2017 - [Home Assistant workshop](https://github.com/home-assistant/home-assistant-assets/tree/master/german/2017-clt-workshop) at [CLT 2017](https://chemnitzer.linux-tage.de/2017/de/) - March 2017 - [Home Assistant - Erweiterungen (Platforms/Components)](https://github.com/home-assistant/home-assistant-assets/tree/master/german/2016-puzzle) at [Puzzle ITC](https://www.puzzle.ch/de/) - December 2016 From 7df485af311cb992a0fcf33c9fb7ae77be4988f3 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Mon, 11 Sep 2017 22:16:52 -0700 Subject: [PATCH 13/49] Make release notes titles linkable --- source/_posts/2017-09-09-release-53.markdown | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/source/_posts/2017-09-09-release-53.markdown b/source/_posts/2017-09-09-release-53.markdown index 3e289d5dbfb..a75db9251b5 100644 --- a/source/_posts/2017-09-09-release-53.markdown +++ b/source/_posts/2017-09-09-release-53.markdown @@ -17,7 +17,7 @@ The Home Assistant community has been super busy in the last two weeks to bring 9 days away from our 4th birthday, we've just accomplished a couple of great milestones that I would love to share with you. We've hit over 8000 stars 🌟 on GitHub and starting this release we now ship over 800 platforms and components! -## Customize editor +## {% linkable_title Customize editor %} Another step in making Home Assistant configurable via the frontend has been contributed by @andrey-git: a customization editor! You are now able to inspect all (possible) customizations of an entity and update them with just a few taps. Want to change the name or icon of an entity? All possible in mere seconds. @@ -38,15 +38,15 @@ homeassistant: config: ``` -## Tesla +## {% linkable_title Tesla %} Thanks to the contribution by @zabuldon, you will now be able to control your Tesla car from Home Assistant. You're able to check the temperature inside and outside your car, control your AC and unlock the car. -## Input text +## {% linkable_title Input text %} This release introduces a new input component: `input_text` contributed by @BioSehnsucht. With this component you will be able to set free form from the UI and then let that be used by your automations or templates. -## KNX +## {% linkable_title KNX %} This release ships a new KNX implementation thanks to @Julius2342. It will instantly show all changed states of KNX devices within Home Assistant. Additionally it brings support for HVAC devices and notification services. It also adds a service for direct communication with the KNX bus. You can connect to KNX/IP routing and tunnelling devices. In the background it uses asyncio communication. Check the climate integration in action [here](https://www.youtube.com/watch?v=JI0VJzlGpx4) and see the lights in action below: @@ -54,7 +54,7 @@ This release ships a new KNX implementation thanks to @Julius2342. It will insta -## New Platforms +## {% linkable_title New Platforms %} - Xiaomi Philips Lights integration ([@syssi] - [#9087]) ([light.xiaomi_philipslight docs]) (new-platform) - Mycroft notify/component ([@btotharye] - [#9173]) ([mycroft docs]) ([notify.mycroft docs]) (new-platform) @@ -80,7 +80,7 @@ Experiencing issues introduced by this release? Please report them in our [issue -## Breaking Changes +## {% linkable_title Breaking Changes %} - The new customize editor is using the file `customize.yaml` in your config folder. If you are using this file today for other config, make sure to rename it before using the new customize UI editor. ([@andrey-git] - [#9134]) ([config docs]) (breaking change) (new-platform) - The frontend component now supports loading custom html files when Home Assistant front end starts ([@andrey-git] - [#9150]) (breaking change). It could be Javascript, CSS or custom Web Components. Along there was a breaking change in the way Custom UI is used: @@ -97,7 +97,7 @@ frontend: - The Homematic `delay` option has been dropped because it is no longer necessary ([@pvizeli] - [#9058]) ([homematic docs]) ([binary_sensor.homematic docs]) ([climate.homematic docs]) ([cover.homematic docs]) ([light.homematic docs]) ([sensor.homematic docs]) ([switch.homematic docs]) (breaking change) - Switch - Dlink: Remove spaces and capital letters from attribute names for consistency ([@emlt] - [#9277]) ([switch.dlink docs]) (breaking change) -## All changes +## {% linkable_title All changes %} - Xiaomi Philips Lights integration ([@syssi] - [#9087]) ([light.xiaomi_philipslight docs]) (new-platform) - Backend changes for customize config panel. ([@andrey-git] - [#9134]) ([config docs]) (breaking change) From 9441cd88fce1997f2216f689a8a315f38c264726 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Mon, 11 Sep 2017 22:45:36 -0700 Subject: [PATCH 14/49] Release 0.53.1 --- _config.yml | 6 +++--- source/_posts/2017-09-09-release-53.markdown | 15 +++++++++++++-- 2 files changed, 16 insertions(+), 5 deletions(-) diff --git a/_config.yml b/_config.yml index df6d10b5780..220f016d3fe 100644 --- a/_config.yml +++ b/_config.yml @@ -140,11 +140,11 @@ social: # Home Assistant release details current_major_version: 0 current_minor_version: 53 -current_patch_version: 0 -date_released: 2017-09-9 +current_patch_version: 1 +date_released: 2017-09-12 # Either # or the anchor link to latest release notes in the blog post. # Must be prefixed with a # and have double quotes around it. # Major release: -patch_version_notes: "#" +patch_version_notes: "#release-0531---september-11" # Minor release (Example #release-0431---april-25): diff --git a/source/_posts/2017-09-09-release-53.markdown b/source/_posts/2017-09-09-release-53.markdown index a75db9251b5..924af92d24f 100644 --- a/source/_posts/2017-09-09-release-53.markdown +++ b/source/_posts/2017-09-09-release-53.markdown @@ -72,6 +72,13 @@ This release ships a new KNX implementation thanks to @Julius2342. It will insta - Stable and asynchronous KNX library. ([@Julius2342] - [#8725]) ([knx docs]) ([binary_sensor.knx docs]) ([climate.knx docs]) ([cover.knx docs]) ([light.knx docs]) ([sensor.knx docs]) ([switch.knx docs]) (new-platform) - Adds the AirVisual air quality sensor platform ([@bachya] - [#9320]) ([sensor.airvisual docs]) (new-platform) +## {% linkable_title Release 0.53.1 - September 12 %} + +- Fix Twitter notifications with certain media such as small images ([@MikeChristianson] - [#9354]) ([notify.twitter docs]) +- Added additional string check in Wunderground sensor ([@arsaboo] - [#9380]) ([sensor.wunderground docs]) +- Fixing foscam library dependency/requirements ([@viswa-swami] - [#9387]) ([camera.foscam docs]) +- Fixes for customize editor ([@andrey-git]) + ## {% linkable_title If you need help... %} ...don't hesitate to use our very active [forums][forum] or join us for a little [chat][discord]. The release notes have comments enabled but it's preferred if you use the former communication channels. Thanks. @@ -381,7 +388,6 @@ frontend: [image_processing.dlib_face_detect docs]: https://home-assistant.io/components/image_processing.dlib_face_detect/ [image_processing.dlib_face_identify docs]: https://home-assistant.io/components/image_processing.dlib_face_identify/ [input_text docs]: https://home-assistant.io/components/input_text/ -[input_text docs]: https://home-assistant.io/components/input_text/ [insteon_plm docs]: https://home-assistant.io/components/insteon_plm/ [light.homematic docs]: https://home-assistant.io/components/light.homematic/ [light.hue docs]: https://home-assistant.io/components/light.hue/ @@ -390,7 +396,6 @@ frontend: [light.xiaomi_philipslight docs]: https://home-assistant.io/components/light.xiaomi_philipslight/ [light.rfxtrx docs]: https://home-assistant.io/components/light.rfxtrx/ [light.tradfri docs]: https://home-assistant.io/components/light.tradfri/ -[light.xiaomi_philipslight docs]: https://home-assistant.io/components/light.xiaomi_philipslight/ [light.knx docs]: https://home-assistant.io/components/light.knx/ [light.zha docs]: https://home-assistant.io/components/light.zha/ [lock.abode docs]: https://home-assistant.io/components/lock.abode/ @@ -449,3 +454,9 @@ frontend: [forum]: https://community.home-assistant.io/ [issue]: https://github.com/home-assistant/home-assistant/issues [discord]: https://discord.gg/c5DvZ4e +[#9354]: https://github.com/home-assistant/home-assistant/pull/9354 +[#9380]: https://github.com/home-assistant/home-assistant/pull/9380 +[#9387]: https://github.com/home-assistant/home-assistant/pull/9387 +[@viswa-swami]: https://github.com/viswa-swami +[camera.foscam docs]: https://home-assistant.io/components/camera.foscam/ +[sensor.wunderground docs]: https://home-assistant.io/components/sensor.wunderground/ From 21c585e17845f14579f8d65b5fa81f25c2a35cb0 Mon Sep 17 00:00:00 2001 From: Alok Saboo Date: Tue, 12 Sep 2017 12:44:29 +0530 Subject: [PATCH 15/49] Fixed Bayesian sensor docs and added a missing comma in Arlo docs (#3357) * Fixed Bayesian sensor docs * Added missing comma --- source/_components/binary_sensor.bayesian.markdown | 10 +++------- source/_components/camera.arlo.markdown | 2 +- 2 files changed, 4 insertions(+), 8 deletions(-) diff --git a/source/_components/binary_sensor.bayesian.markdown b/source/_components/binary_sensor.bayesian.markdown index 588798a355a..af58bf0d2fe 100644 --- a/source/_components/binary_sensor.bayesian.markdown +++ b/source/_components/binary_sensor.bayesian.markdown @@ -14,12 +14,9 @@ ha_release: 0.53 --- -The `bayesian` binary sensor platform observes the state from multiple sensors and uses Bayes' rule to estimate the probability that an event has occurred -given the state of the observed sensors. If the estimated posterior probability is above the `probabiliy_threshold`, the value of the sensor is `on`. -Otherwise, the sensor is `off`. +The `bayesian` binary sensor platform observes the state from multiple sensors and uses Bayes' rule to estimate the probability that an event has occurred given the state of the observed sensors. If the estimated posterior probability is above the `probability_threshold`, the sensor is `on` otherwise it is `off`. -This allows for the detection of complex events that may not be readily observable, i.e., cooking, showering, in bed, the start of a morning routine, etc. It -can also be used to gain greater confidence about events that _are_ directly observable, but for which the sensors can be unreliable, i.e., presence. +This allows for the detection of complex events that may not be readily observable, e.g., cooking, showering, in bed, the start of a morning routine, etc. It can also be used to gain greater confidence about events that _are_ directly observable, but for which the sensors can be unreliable, e.g., presence. To enable the Bayesian sensor, add the following lines to your `configuration.yaml`: @@ -39,7 +36,7 @@ binary_sensor: Configuration variables: - **prior** (*Required*): The prior probability of the event. At any point in time (ignoring all external influences) how likely is this event to occur? -- **observations** array (*Required*): The observations which should influence the likelihood that the given event has occurred. +- **observations** array (*Required*): The observations which should influence the likelihood that the given event has occurred. - **entity_id** (*Required*): Name of the entity to monitor. - **prob_given_true** (*Required*): The probability of the observation occurring, given the event is `true`. - **prob_given_false** (*Optional*): The probability of the observation occurring, given the event is `false` can be set as well. If `prob_given_false` is not set, it will default to `1 - prob_given_true`. @@ -77,4 +74,3 @@ binary_sensor: platform: 'state' to_state: 'below_horizon' ``` - diff --git a/source/_components/camera.arlo.markdown b/source/_components/camera.arlo.markdown index 0a659827ea6..1d66a90bbf0 100644 --- a/source/_components/camera.arlo.markdown +++ b/source/_components/camera.arlo.markdown @@ -28,6 +28,6 @@ camera: Configuration variables: -- **ffmpeg_arguments**: (*Optional*): Extra options to pass to ffmpeg, e.g. image quality or video filter options. +- **ffmpeg_arguments**: (*Optional*): Extra options to pass to ffmpeg, e.g., image quality or video filter options. **Note:** To be able to playback the last capture, it is required to install the `ffmpeg` component. Make sure to follow the steps mentioned at [FFMPEG](https://home-assistant.io/components/ffmpeg/) documentation. From ee5816c4fae44b87a6e0f7ee871e5735175aae8c Mon Sep 17 00:00:00 2001 From: misterbenj34 Date: Tue, 12 Sep 2017 09:42:03 +0200 Subject: [PATCH 16/49] Update device-specific.markdown (#3186) Update automation example code with new standard (id) --- source/_docs/z-wave/device-specific.markdown | 120 ++++++++++--------- 1 file changed, 64 insertions(+), 56 deletions(-) diff --git a/source/_docs/z-wave/device-specific.markdown b/source/_docs/z-wave/device-specific.markdown index 19c968c0732..0b6ef4ee261 100644 --- a/source/_docs/z-wave/device-specific.markdown +++ b/source/_docs/z-wave/device-specific.markdown @@ -51,69 +51,77 @@ Make sure you copy the newly saved `zwcfg_[home_id].xml`into your Home Assistant Here's a handy configuration for the Aeon Labs Minimote that defines all possible button presses. Put it into `automation.yaml`. ```yaml - - alias: Minimote Button 1 Pressed - trigger: - platform: event - event_type: zwave.scene_activated - event_data: - entity_id: zwave.aeon_labs_minimote_1 - scene_id: 1 + - id: mini_1_pressed + alias: 'Minimote Button 1 Pressed' + trigger: + - platform: event + event_type: zwave.scene_activated + event_data: + entity_id: zwave.aeon_labs_minimote_1 + scene_id: 1 - - alias: Minimote Button 1 Held - trigger: - platform: event - event_type: zwave.scene_activated - event_data: - entity_id: zwave.aeon_labs_minimote_1 - scene_id: 2 + - id: mini_1_held + alias: 'Minimote Button 1 Held' + trigger: + - platform: event + event_type: zwave.scene_activated + event_data: + entity_id: zwave.aeon_labs_minimote_1 + scene_id: 2 - - alias: Minimote Button 2 Pressed - trigger: - platform: event - event_type: zwave.scene_activated - event_data: - entity_id: zwave.aeon_labs_minimote_1 - scene_id: 3 + - id: mini_2_pressed + alias: 'Minimote Button 2 Pressed' + trigger: + - platform: event + event_type: zwave.scene_activated + event_data: + entity_id: zwave.aeon_labs_minimote_1 + scene_id: 3 - - alias: Minimote Button 2 Held - trigger: - platform: event - event_type: zwave.scene_activated - event_data: - entity_id: zwave.aeon_labs_minimote_1 - scene_id: 4 + - id: mini_2_held + alias: 'Minimote Button 2 Held' + trigger: + - platform: event + event_type: zwave.scene_activated + event_data: + entity_id: zwave.aeon_labs_minimote_1 + scene_id: 4 - - alias: Minimote Button 3 Pressed - trigger: - platform: event - event_type: zwave.scene_activated - event_data: - entity_id: zwave.aeon_labs_minimote_1 - scene_id: 5 + - id: mini_3_pressed + alias: 'Minimote Button 3 Pressed' + trigger: + - platform: event + event_type: zwave.scene_activated + event_data: + entity_id: zwave.aeon_labs_minimote_1 + scene_id: 5 - - alias: Minimote Button 3 Held - trigger: - platform: event - event_type: zwave.scene_activated - event_data: - entity_id: zwave.aeon_labs_minimote_1 - scene_id: 6 + - id: mini_3_held + alias: 'Minimote Button 3 Held' + trigger: + - platform: event + event_type: zwave.scene_activated + event_data: + entity_id: zwave.aeon_labs_minimote_1 + scene_id: 6 - - alias: Minimote Button 4 Pressed - trigger: - platform: event - event_type: zwave.scene_activated - entity_data: - entity_id: zwave.aeon_labs_minimote_1 - scene_id: 7 + - id: mini_4_pressed + alias: 'Minimote Button 4 Pressed' + trigger: + - platform: event + event_type: zwave.scene_activated + event_data: + entity_id: zwave.aeon_labs_minimote_1 + scene_id: 7 - - alias: Minimote Button 4 Held - trigger: - platform: event - event_type: zwave.scene_activated - event_data: - entity_id: zwave.aeon_labs_minimote_1 - scene_id: 8 + - id: mini_4_held + alias: 'Minimote Button 4 Held' + trigger: + - platform: event + event_type: zwave.scene_activated + event_data: + entity_id: zwave.aeon_labs_minimote_1 + scene_id: 8 ``` From dac5d0556157da3854e6cdc4e9e8c78300580cba Mon Sep 17 00:00:00 2001 From: Mike G Chambers Date: Tue, 12 Sep 2017 17:53:09 +1000 Subject: [PATCH 17/49] Added link to Hassio (#3356) * Added link to Hassio A Hassio link was added to the 'note' section about avoiding permission errors, but I think we need to add a link up top too so that folks can go see the upgrading section of the Hassio documentation. Thanks * Update updating.markdown --- source/_docs/installation/updating.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_docs/installation/updating.markdown b/source/_docs/installation/updating.markdown index e517a805b20..f5df3a9361b 100644 --- a/source/_docs/installation/updating.markdown +++ b/source/_docs/installation/updating.markdown @@ -11,7 +11,7 @@ redirect_from: /getting-started/updating/ ---

-The upgrade process differs depending on the installation you have, so please review the documentation that is specific to your install [HASSbian](/docs/hassbian/common-tasks/#update-home-assistant), [Raspberry Pi All-In-One Installer](/docs/installation/raspberry-pi-all-in-one/#upgrading), [Vagrant](/docs/installation/vagrant/), or [Virtualenv](/docs/installation/virtualenv/#upgrading-home-assistant). +The upgrade process differs depending on the installation you have, so please review the documentation that is specific to your install [Hass.io](/hassio/), [HASSbian](/docs/hassbian/common-tasks/#update-home-assistant), [Raspberry Pi All-In-One Installer](/docs/installation/raspberry-pi-all-in-one/#upgrading), [Vagrant](/docs/installation/vagrant/), or [Virtualenv](/docs/installation/virtualenv/#upgrading-home-assistant).

The default way to update Home Assistant to the latest release, when available, is: From 2e0e8d09da93ed4a9f4cfa580b3975feaea51856 Mon Sep 17 00:00:00 2001 From: DubhAd Date: Tue, 12 Sep 2017 09:30:22 +0100 Subject: [PATCH 18/49] Add information on the purge_days (#3358) * Add information on the purge_days That the purge happens every other day is only documented in the code, and in issue #6302. This is to raise the visibility of this, and help people understand that if they restart frequently the purge will never happen. * Spelling & Grammar fixes --- source/_components/recorder.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/recorder.markdown b/source/_components/recorder.markdown index 7c8c16d2bd5..ddf835cff50 100644 --- a/source/_components/recorder.markdown +++ b/source/_components/recorder.markdown @@ -27,7 +27,7 @@ recorder: Configuration variables: -- **purge_days** (*Optional*): Delete events and states older than x days. +- **purge_days** (*Optional*): Delete events and states older than x days. The purge task runs every 2 days, starting from when Home Assistant is started if you restart your instance more frequently than the purge will never take place. - **exclude** (*Optional*): Configure which components should be excluded from recordings. - **entities** (*Optional*): The list of entity ids to be excluded from recordings. - **domains** (*Optional*): The list of domains to be excluded from recordings. From 545826487b0d0443d267e824137079ab450b5aa4 Mon Sep 17 00:00:00 2001 From: Sebastian Muszynski Date: Tue, 12 Sep 2017 14:40:33 +0200 Subject: [PATCH 19/49] Xiaomi token retrieval moved and extended (#3339) * Xiaomi token retrieval moved and extended. * Misleading sentence removed. * Additional item added to the trouble shooting section. * API token reference removed from the Xiaomi Gateway introduction. * The iOS app method does not work anymore. The ZToken column contains a 96 character encrypted token now. A 32 character token is still needed. --- .../light.xiaomi_philipslight.markdown | 2 +- source/_components/vacuum.xiaomi.markdown | 62 +++++++++++++++- source/_components/xiaomi.markdown | 74 +------------------ 3 files changed, 66 insertions(+), 72 deletions(-) diff --git a/source/_components/light.xiaomi_philipslight.markdown b/source/_components/light.xiaomi_philipslight.markdown index a8b6d7b1ae9..de6d95cf6f3 100644 --- a/source/_components/light.xiaomi_philipslight.markdown +++ b/source/_components/light.xiaomi_philipslight.markdown @@ -17,7 +17,7 @@ The `xiaomi_philipslight` platform allows you to control the state of your Xiaom Currently, the supported features are `on`, `off`, `set_cct` (colortemp) , `set_bright` (brightness). -Please follow the instructions on [Retrieving the Access Token](/components/xiaomi/#retrieving-the-access-token) to get the API token to use in the `configuration.yaml` file. +Please follow the instructions on [Retrieving the Access Token](/components/vacuum.xiaomi/#retrieving-the-access-token) to get the API token to use in the `configuration.yaml` file. To add a Xiaomi Philips Light to your installation, add the following to your configuration.yaml file: diff --git a/source/_components/vacuum.xiaomi.markdown b/source/_components/vacuum.xiaomi.markdown index 586baa0bccb..4968bf53796 100644 --- a/source/_components/vacuum.xiaomi.markdown +++ b/source/_components/vacuum.xiaomi.markdown @@ -17,7 +17,7 @@ The `xiaomi` vacuum platform allows you to control the state of your [Xiaomi Mi Current supported features are `turn_on`, `pause`, `stop`, `return_to_home`, `turn_off` (stops goes to dock), `locate`, `clean_spot`, `set_fanspeed` and even remote control your robot. -Please follow the instructions on [Retrieving the Access Token](/components/xiaomi/#retrieving-the-access-token) to get the API token to use in the `configuration.yaml` file. +Please follow the instructions on [Retrieving the Access Token](/components/vacuum.xiaomi/#retrieving-the-access-token) to get the API token to use in the `configuration.yaml` file. To add a vacuum to your installation, add the following to your `configuration.yaml` file: @@ -79,3 +79,63 @@ Use this call to enter the remote control mode, make one move, and stop and exit | `velocity` | no | Speed, between -0.29 and 0.29. | | `rotation` | no | Rotation, between -179 degrees and 179 degrees. | | `duration` | no | Parameter affecting the duration of the movement. | + +### {% linkable_title Retrieving the Access Token %} + +

+This token (32 hexadecimal characters) is required for the Xiaomi Mi Robot Vacuum and Xiaomi Philips Light. The Xiaomi Gateway uses another security method and requires a `key` (16 alphanumeric chars) which can be obtained easily via a hidden menu item at the Mi-Home app. +

+ +Follow the pairing process using your phone and Mi-Home app. You will be able to retrieve the token from a SQLite file inside your phone. + +Before you begin you need to install `libffi-dev` and `libssl-dev` by running the command below. This is needed for `python-mirobo` to be installed correctly. + +```bash +$ sudo apt-get install libffi-dev libssl-dev +``` + +If your Home Assistant installation is running in a [Virtualenv](/docs/installation/virtualenv/#upgrading-home-assistant), make sure you activate it by running the commands below. + +```bash +$ sudo su -s /bin/bash homeassistant +$ source /srv/homeassistant/bin/activate +``` + +To fetch the token follow these instructions depending on your mobile phone platform. + +#### {% linkable_title Windows and Android %} + +1. Configure the robot with the Mi-Home app. +2. Enable developer mode and USB debugging on the Android phone and plug it into the computer. +3. Get and install the [ADB tool for Windows](https://developer.android.com/studio/releases/platform-tools.html). +4. Create a backup of the application `com.xiaomi.smarthome`: +```bash +$ adb backup -noapk com.xiaomi.smarthome -f backup.ab +``` +5. If you have this message: "More than one device or emulator", use this command to list all devices: +```bash +$ adb devices +``` +and execute this command: +```bash +$ adb -s DEVICEID backup -noapk com.xiaomi.smarthome -f backup.ab # (with DEVICEID the device id from the previous command) +``` +6. On the phone, you must confirm the backup. DO NOT enter any password and press button to make the backup. +7. Get and install [ADB Backup Extractor](https://sourceforge.net/projects/adbextractor/). +8. Extract All files from the backup: +```bash +$ java.exe -jar ../android-backup-extractor/abe.jar unpack backup.ab backup.tar "" +``` +9. Unzip the ".tar" file. +10. Open the SQLite database `miio2.db` with a tool like SQLite Manager extension for FireFox. +11. Get the token from "devicerecord" table. + +#### {% linkable_title Linux and Android (rooted!) %} + +1. Configure the light with the Mi-Home app. +2. Enable developer mode, USB debugging and root permission only for ADB on the Android phone and plug it into the computer. +3. Get ADB f.e. `apt-get install android-tools-adb` +4. `adb devices` should list your device +5. `adb root` (does work for development builds only: ones with `ro.debuggable=1`) +6. `adb shell` +7. `echo "select name,localIP,token from devicerecord;" | sqlite3 /data/data/com.xiaomi.smarthome/databases/miio2.db` returns a list of all registered devices including IP address and token. diff --git a/source/_components/xiaomi.markdown b/source/_components/xiaomi.markdown index ad8e727bcda..432af9e1da6 100644 --- a/source/_components/xiaomi.markdown +++ b/source/_components/xiaomi.markdown @@ -46,8 +46,6 @@ What's not available? Follow the setup process using your phone and Mi-Home app. From here you will be able to retrieve the key from within the app following [this tutorial](https://community.home-assistant.io/t/beta-xiaomi-gateway-integration/8213/1832) -Please check the instructions in this [section](/xiaomi/#retrieving-the-access-token) to get the API token to use with your platforms. - To enable Xiaomi gateway in your installation, add the following to your `configuration.yaml` file: ### {% linkable_title One Gateway %} @@ -140,72 +138,8 @@ Automation example That means that Home Assistant is not getting any response from your Xiaomi gateway. Might be a local network problem or your firewall. - Make sure you have enabled LAN access: https://community.home-assistant.io/t/beta-xiaomi-gateway-integration/8213/1832 -- Turn off the firewall on the system where Home Assistant is running +- Turn off the firewall on the system where Home Assistant is running. - Try to leave the MAC address `mac:` blank. -- Try to set `discovery_retry: 10` -- Try to disable and then enable LAN access - -### {% linkable_title Retrieving the Access Token %} - -Follow the pairing process using your phone and Mi-Home app. You will be able to retrieve the token from a SQLite file inside your phone. This token is needed for using various `xiaomi_*` platforms. - -Before you begin you need to install `libffi-dev` and `libssl-dev` by running the command below. This is needed for `python-mirobo` to be installed correctly. - -```bash -$ sudo apt-get install libffi-dev libssl-dev -``` - -If your Home Assistant installation is running in a [Virtualenv](/docs/installation/virtualenv/#upgrading-home-assistant), make sure you activate it by running the commands below. - -```bash -$ sudo su -s /bin/bash homeassistant -$ source /srv/homeassistant/bin/activate -``` - -To fetch the token follow these instructions depending on your mobile phone platform. - -#### {% linkable_title Windows and Android %} - -1. Configure the robot with the Mi-Home app. -2. Enable developer mode and USB debugging on the Android phone and plug it into the computer. -3. Get and install the [ADB tool for Windows](https://developer.android.com/studio/releases/platform-tools.html). -4. Create a backup of the application `com.xiaomi.smarthome`: -```bash -$ adb backup -noapk com.xiaomi.smarthome -f backup.ab -``` -5. If you have this message: "More than one device or emulator", use this command to list all devices: -```bash -$ adb devices -``` -and execute this command: -```bash -$ adb -s DEVICEID backup -noapk com.xiaomi.smarthome -f backup.ab # (with DEVICEID the device id from the previous command) -``` -6. On the phone, you must confirm the backup. DO NOT enter any password and press button to make the backup. -7. Get and install [ADB Backup Extractor](https://sourceforge.net/projects/adbextractor/). -8. Extract All files from the backup: -```bash -$ java.exe -jar ../android-backup-extractor/abe.jar unpack backup.ab backup.tar "" -``` -9. Unzip the ".tar" file. -10. Open the SQLite database `miio2.db` with a tool like SQLite Manager extension for FireFox. -11. Get the token from "devicerecord" table. - -#### {% linkable_title Linux and Android (rooted!) %} - -1. Configure the light with the Mi-Home app. -2. Enable developer mode, USB debugging and root permission only for ADB on the Android phone and plug it into the computer. -3. Get ADB f.e. `apt-get install android-tools-adb` -4. `adb devices` should list your device -5. `adb root` (does work for development builds only: ones with `ro.debuggable=1`) -6. `adb shell` -7. `echo "select name,localIP,token from devicerecord;" | sqlite3 /data/data/com.xiaomi.smarthome/databases/miio2.db` returns a list of all registered devices including IP address and token. - -#### {% linkable_title macOS and iOS %} - -1. Setup iOS device with the Mi-Home app. -2. Create an unencrypted backup of the device using iTunes. -3. Install [iBackup Viewer](http://www.imactools.com/iphonebackupviewer/). -4. Extract this file: **`/raw data/com.xiami.mihome/1234567_mihome.sqlite`** to your computer, where `_1234567_` is any string of numbers. -5. Open the SQLite database with a tool like SQLite Manager extension for FireFox or DB Browser. You will then see the list of all the devices in your account with their token. The token you need is in the column **`ZToken`** and looks like **`123a1234567b12345c1d123456789e12`**. -(Location of SQLite files directly on iOS devices **/private/var/mobile/Containers/Data/Application/A80CE9E4-AD2E-4649-8C28-801C96B16BD7/Documents/**) +- Try to set `discovery_retry: 10`. +- Try to disable and then enable LAN access. +- Hard reset the gateway: Press the button of the gateway 30 seconds and start again from scratch. From 2d9033712114bb5b367b9243d4c4511374d9ed3d Mon Sep 17 00:00:00 2001 From: Mike G Chambers Date: Tue, 12 Sep 2017 23:56:01 +1000 Subject: [PATCH 20/49] Added information about Hass.io update process. (#3349) * Added information about Hass.io update process. Hass.io users end up on this page when an update is available, but then can't see what they have to do. This is because of the the updater component and the inevitable delay in updates getting into the hass.io build. This update informs users about an updates transition from HA into Hass.io, how to install it, and suggests disabling the updater component to alleviate 'notification stress'. * Removed 'Note' Removed 'Note' and left the upgrading section at the bottom of the page. * Remove double space --- source/hassio/index.markdown | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/source/hassio/index.markdown b/source/hassio/index.markdown index c6f15c61fcd..4d5ae8d5558 100644 --- a/source/hassio/index.markdown +++ b/source/hassio/index.markdown @@ -28,11 +28,17 @@ The advantages of using Hass.io: +### {% linkable_title Upgrading %} + +Hass.io users can update Home Assistant via the 'Hass.io' page in the UI. However please note that Home Assistant updates take time to roll into the Hass.io builds. Therefore there is often a slight delay between the availability of a Home Assistant update and an update being available in Hass.io, be patient. When a Hass.io update is available it will be shown as available on the ‘Hass.io' page in your UI. +

Hass.io dashboard

+If you would prefer not to be notified of the general updates in the UI you can disable the [updater](components/updater/) component in your configuration. + [Google Assistant]: /addons/google_assistant/ [Snips.ai]: /addons/snips/ [Let's Encrypt]: /addons/lets_encrypt/ From e0553ba7d2ce85758bf8702d4c88eddc60624006 Mon Sep 17 00:00:00 2001 From: Pascal Vizeli Date: Tue, 12 Sep 2017 21:23:28 +0200 Subject: [PATCH 21/49] Update addon_config.markdown --- source/developers/hassio/addon_config.markdown | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/source/developers/hassio/addon_config.markdown b/source/developers/hassio/addon_config.markdown index 639f579350e..ad4d7e4c3ae 100644 --- a/source/developers/hassio/addon_config.markdown +++ b/source/developers/hassio/addon_config.markdown @@ -155,8 +155,9 @@ The `schema` looks like `options` but describes how we should validate the user We support: - str - bool -- int -- float +- int / int(min,) / int(,max) / int(min,max) +- float / float(min,) / float(,max) / float(min,max) - email - url - port +- match(REGEX) From 8f538a3baaeaf925ffaf60d2909b7f8f69f2cdf3 Mon Sep 17 00:00:00 2001 From: Mahasri Kalavala Date: Tue, 12 Sep 2017 16:19:32 -0400 Subject: [PATCH 22/49] Update counter.markdown (#3359) * Update counter.markdown Updated documentation and removed references to input_slider :) * Minor changes --- source/_components/counter.markdown | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/source/_components/counter.markdown b/source/_components/counter.markdown index 7df1c2e6cf5..96ea3d9cb8e 100644 --- a/source/_components/counter.markdown +++ b/source/_components/counter.markdown @@ -26,10 +26,10 @@ counter: Configuration variables: -- **[alias]** (*Required*): Alias for the slider input. Multiple entries are allowed. - - **name** (*Optional*): Friendly name of the slider input. +- **[alias]** (*Required*): Alias for the counter. Multiple entries are allowed. + - **name** (*Optional*): Friendly name of the counter. - **initial** (*Optional*): Initial value when Home Assistant starts. Defaults to 0. - - **step** (*Optional*): Step value for the slider. Defaults to 1. + - **step** (*Optional*): Incremental/step value for the counter. Defaults to 1 (increments by 1). - **icon** (*Optional*): Icon for entry. Pick an icon that you can find on [materialdesignicons.com](https://materialdesignicons.com/) to use for your input and prefix the name with `mdi:`. For example `mdi:car`, `mdi:ambulance`, or `mdi:motorbike`. From 2ddd82155e1c80e71740d5ffe39673f8ce57f0a9 Mon Sep 17 00:00:00 2001 From: Shiny Date: Wed, 13 Sep 2017 21:16:54 +1200 Subject: [PATCH 23/49] Corrected typo: endity -> entity. (#3360) --- source/_components/sensor.mold_indicator.markdown | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/source/_components/sensor.mold_indicator.markdown b/source/_components/sensor.mold_indicator.markdown index eda7abafbbf..4cc9c84833a 100644 --- a/source/_components/sensor.mold_indicator.markdown +++ b/source/_components/sensor.mold_indicator.markdown @@ -29,9 +29,9 @@ sensor: Configuration variables: -- **indoor_temp_sensor** (*Required*): The enditiy ID of the indoor temperature sensor. -- **indoor_humidity_sensor** (*Required*): The enditiy ID of the indoor humidity sensor. -- **outdoor_temp_sensor** (*Required*): The enditiy ID of the outdoor temperature sensor. +- **indoor_temp_sensor** (*Required*): The entitiy ID of the indoor temperature sensor. +- **indoor_humidity_sensor** (*Required*): The entitiy ID of the indoor humidity sensor. +- **outdoor_temp_sensor** (*Required*): The entitiy ID of the outdoor temperature sensor. - **calibration_factor** (*Required*): Needs to be calibrated to the critical point in the room. In this case, the weather forecast temperature sensor is used for the outside temperature. From 762fb28ab45f1685bd9b8f3d8a601fc0cec71e64 Mon Sep 17 00:00:00 2001 From: Marek Lewandowski Date: Thu, 14 Sep 2017 21:00:43 +0200 Subject: [PATCH 24/49] Fixed a typo in code listing. (#3363) --- source/_cookbook/python_component_mqtt_basic.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_cookbook/python_component_mqtt_basic.markdown b/source/_cookbook/python_component_mqtt_basic.markdown index 3deb82bd4b8..f038f21969e 100644 --- a/source/_cookbook/python_component_mqtt_basic.markdown +++ b/source/_cookbook/python_component_mqtt_basic.markdown @@ -46,7 +46,7 @@ def setup(hass, config): # Subscribe our listener to a topic. mqtt.subscribe(hass, topic, message_received) - # Set the intial state + # Set the initial state. hass.states.set(entity_id, 'No messages') # Service to publish a message on MQTT. From b49bbf448c0323f21f7b81ce33d138fc7d984b08 Mon Sep 17 00:00:00 2001 From: William Scanlon Date: Sat, 16 Sep 2017 10:05:43 -0400 Subject: [PATCH 25/49] Added August smart locks to support Wink locks --- source/_components/lock.wink.markdown | 1 + 1 file changed, 1 insertion(+) diff --git a/source/_components/lock.wink.markdown b/source/_components/lock.wink.markdown index cc13cda757b..e8689f58263 100644 --- a/source/_components/lock.wink.markdown +++ b/source/_components/lock.wink.markdown @@ -23,6 +23,7 @@ The requirement is that you have setup [Wink](/components/wink/). - Kwikset - Schlage +- August (No Wink hub required) (August Connect required) - Generic Z-wave

From 57056fd92c935b18c7916467bf792c9f61cf669d Mon Sep 17 00:00:00 2001 From: William Scanlon Date: Sat, 16 Sep 2017 10:06:39 -0400 Subject: [PATCH 26/49] Update sensor.wink.markdown --- source/_components/sensor.wink.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/sensor.wink.markdown b/source/_components/sensor.wink.markdown index 402a92dba70..a67e3c2df42 100644 --- a/source/_components/sensor.wink.markdown +++ b/source/_components/sensor.wink.markdown @@ -27,7 +27,7 @@ The requirement is that you have setup [Wink](/components/wink/). - Wink eggminder (No Wink hub required) - Nest protect Smoke and CO severity (No confirmation that this is actually reported) (No Wink hub required) - Motion sensor temperature -- Quirky refuel propane tank monitor +- Quirky refuel propane tank monitor (No Wink hub required)

The above devices are confimed to work, but others may work as well. From 857de4a19a167577185aef169f4e6ada8509f80e Mon Sep 17 00:00:00 2001 From: David De Sloovere Date: Sat, 16 Sep 2017 20:26:49 +0200 Subject: [PATCH 27/49] discovery - add missing values for ignore (#3383) Docs are out of date regarding the devices that can be a/ discovered and b/ ignored. This change adds the missing values for ignored. --- source/_components/discovery.markdown | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/source/_components/discovery.markdown b/source/_components/discovery.markdown index 41c7e2392d1..c133e9a7125 100644 --- a/source/_components/discovery.markdown +++ b/source/_components/discovery.markdown @@ -55,11 +55,14 @@ Valid values for ignore are: * `apple_tv`: Apple TV * `axis`: Axis Communications security devices + * `bluesound` * `bose_soundtouch`: Bose Soundtouch speakers * `denonavr`: Denon Network Receivers * `directv`: DirecTV * `flux_led`: Flux Led/MagicLight + * `frontier_silicon` * `google_cast`: Google Chromecast + * `harmony`: Harmony Hub * `ikea_tradfri`: IKEA Trådfri * `logitech_mediaserver`: Logitech media server - Squeezebox player * `openhome`: Linn/Openhome @@ -67,11 +70,12 @@ Valid values for ignore are: * `philips_hue`: Philips Hue * `plex_mediaserver`: Plex media server * `roku`: Roku media player + * `sabnzbd` * `samsung_tv`: Samsung TV * `sonos`: Sonos Speakers * `yamaha`: Yamaha media player * `yeelight`: Yeelight Sunflower Bulb - +

Home Assistant must be on the same network as the devices for uPnP discovery to work. If running Home Assistant in a [Docker container](/docs/installation/docker/) use switch `--net=host` to put it on the host's network. From c1cb6aacd52d7c4fe2d9e3fe7e55096cd8aeb2fa Mon Sep 17 00:00:00 2001 From: Adam Mills Date: Sat, 16 Sep 2017 17:57:59 -0400 Subject: [PATCH 28/49] Update catching up docs to explain force push (#3377) --- source/developers/development_catching_up.markdown | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/source/developers/development_catching_up.markdown b/source/developers/development_catching_up.markdown index 7bfc8064805..88f4b73e078 100644 --- a/source/developers/development_catching_up.markdown +++ b/source/developers/development_catching_up.markdown @@ -24,6 +24,13 @@ If rebase detects conflicts, repeat this process until all changes have been res 4. Continue rebase: `git rebase --continue` 5. Repeat until you've resolved all conflicts +After rebasing your branch, you will have rewritten history relative to your GitHub fork's branch. When you go to push you will see an error that your history has diverged from the original branch. In order to get your GitHub fork up-to-date with your local branch, you will need to force push, using the following command: + +```bash +# Run this from your feature branch +$ git push origin --force +``` + Other workflows are covered in detail in the [Github documentation](https://help.github.com/articles/fork-a-repo/). Add an additional `remote` after you clone your fork. ```bash From 7ba1233d6f9e8001c4d167b09fc7970a631fd61c Mon Sep 17 00:00:00 2001 From: Fredrik Lindqvist Date: Sun, 17 Sep 2017 14:42:53 +0200 Subject: [PATCH 29/49] Hassbian 1.3 (#3375) * Create 2019-09-16-hassbian-1.3-a-bit-of-a-stretch.markdown * Remove duplicate word --- ...6-hassbian-1.3-a-bit-of-a-stretch.markdown | 37 +++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 source/_posts/2019-09-16-hassbian-1.3-a-bit-of-a-stretch.markdown diff --git a/source/_posts/2019-09-16-hassbian-1.3-a-bit-of-a-stretch.markdown b/source/_posts/2019-09-16-hassbian-1.3-a-bit-of-a-stretch.markdown new file mode 100644 index 00000000000..dc452605cc0 --- /dev/null +++ b/source/_posts/2019-09-16-hassbian-1.3-a-bit-of-a-stretch.markdown @@ -0,0 +1,37 @@ +--- +layout: post +title: "Hassbian 1.3 - A bit of a stretch" +description: "Raspbian Stretch release of the HASSbian Raspberry Pi Image for Home Assistant" +date: 2017-09-16 16:00:00 +0100 +date_formatted: "September 16, 2017" +author: Fredrik Lindqvist +comments: true +categories: Technology +--- + +### Hassbian 1.3 - A bit of a stretch +This new release finally brings us the release of Hassbian based on the release of Raspbian Stretch. The most significant change with this is that we now run Home Assistant on Python 3.5. +Other than that the changes are mostly to our tool `hassbian-config`. + +### {% linkable_title Hassbian-config %} + +To allow you to customize your installation further, we have made a few additions to our tool called `hassbian-config`. Majority of these changes where contributed by [@Ludeeus][ludeeus]. + +#### {% linkable_title Upgrade scripts %} + +[@Ludeeus][ludeeus] contributed the possibility to run upgrade scripts to the `hassbian-config` tool. + + - Upgrade Hassbian: Upgrades packages of the base operating system. Contributed by [@Landrash][landrash]. + - Upgrade Hassbian-script: Downloads and upgrades the latest release of Hassbian-scripts. Contributed by [@Ludeeus][ludeeus]. + - Upgrade Home-assistant: Upgrades the Home Assistant installation to the latest release. Contributed by [@Ludeeus][ludeeus]. + +To follow discussions about the development of the HASSbian image or to contribute join our [Discord chat server][discord-hassbian]. + +To get started with the new image, check out the installation instructions on the [installing Hassbian page][install]. + +[landrash]: http://github.com/landrash +[ludeeus]: http://github.com/ludeeus +[hassbian-repo]: https://github.com/home-assistant/hassbian-scripts/ +[hassbian-config-release]: https://github.com/home-assistant/hassbian-scripts/releases/latest +[install]: /getting-started/installation-raspberry-pi-image/ +[discord-hassbian]: https://discord.gg/RkajcgS From 52769fcf6ae28cc94d4963016f7dddfd670c8998 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rub=C3=A9n=20Infante?= Date: Sun, 17 Sep 2017 15:03:49 +0200 Subject: [PATCH 30/49] Sample in url configuration variable (#3389) * Sample in url configuration variable An example structure for the url property has been added. To prevent the full url from being written base_url + /api/telegram_webhooks * Minor change --- source/_components/telegram_bot.webhooks.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/telegram_bot.webhooks.markdown b/source/_components/telegram_bot.webhooks.markdown index 3b4675eca7b..0cf3a4db249 100644 --- a/source/_components/telegram_bot.webhooks.markdown +++ b/source/_components/telegram_bot.webhooks.markdown @@ -42,7 +42,7 @@ Configuration variables: - **parse_mode** (*Optional*): Default parser for messages if not explicit in message data: 'html' or 'markdown'. Default is 'markdown'. - **proxy_url** (*Optional*): Proxy url if working behind one (`socks5://proxy_ip:proxy_port`) - **proxy_params** (*Optional*): Proxy configuration parameters, as dict, if working behind a proxy (`username`, `password`, etc.) -- **url** (*Optional*): Allow to overwrite the `base_url` from http component for diferent configs. +- **url** (*Optional*): Allow to overwrite the `base_url` from the [`http`](/components/http/) component for different configurations (`https://:`). To get your `chat_id` and `api_key` follow the instructions [here](/components/notify.telegram). As well as authorising the chat, if you have added your bot to a group you will also need to authorise any user that will be interacting with the webhook. When an unauthorised user tries to interact with the webhook Home Assistant will raise an error ("Incoming message is not allowed"), you can easily obtain the the users id by looking in the "from" section of this error message. From 09db289355c7eb0cd289862bd22632d5b1565e8a Mon Sep 17 00:00:00 2001 From: John Arild Berentsen Date: Sun, 17 Sep 2017 15:10:31 +0200 Subject: [PATCH 31/49] Add link to a very good info page about pitfalls of Z-Wave (#3376) * Update z-wave.markdown * Move link --- source/_docs/z-wave.markdown | 2 ++ 1 file changed, 2 insertions(+) diff --git a/source/_docs/z-wave.markdown b/source/_docs/z-wave.markdown index a97a8200d0b..a171d8c7abc 100644 --- a/source/_docs/z-wave.markdown +++ b/source/_docs/z-wave.markdown @@ -14,6 +14,8 @@ redirect_from: /getting-started/z-wave/ There is currently support for climate, covers, lights, locks, sensors, switches, and thermostats. All will be picked up automatically after configuring this platform. +Before configuring the Z-Wave setup, please take a moment and read [this article](https://drzwave.blog/2017/01/20/seven-habits-of-highly-effective-z-wave-networks-for-consumers/) to understand the most common pitfalls of Z-Wave networks. + ### {% linkable_title Installation %} As of version 0.45, Home Assistant automatically installs python-openzwave from PyPI as needed. From 74f869a93d5b6526665f30b61e86cccc8ef81ade Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Sun, 17 Sep 2017 10:37:17 -0700 Subject: [PATCH 32/49] Update 2019-09-16-hassbian-1.3-a-bit-of-a-stretch.markdown --- .../_posts/2019-09-16-hassbian-1.3-a-bit-of-a-stretch.markdown | 1 - 1 file changed, 1 deletion(-) diff --git a/source/_posts/2019-09-16-hassbian-1.3-a-bit-of-a-stretch.markdown b/source/_posts/2019-09-16-hassbian-1.3-a-bit-of-a-stretch.markdown index dc452605cc0..d382c05d6ce 100644 --- a/source/_posts/2019-09-16-hassbian-1.3-a-bit-of-a-stretch.markdown +++ b/source/_posts/2019-09-16-hassbian-1.3-a-bit-of-a-stretch.markdown @@ -9,7 +9,6 @@ comments: true categories: Technology --- -### Hassbian 1.3 - A bit of a stretch This new release finally brings us the release of Hassbian based on the release of Raspbian Stretch. The most significant change with this is that we now run Home Assistant on Python 3.5. Other than that the changes are mostly to our tool `hassbian-config`. From 04cefc780c7983698d9e465c3d1051435876826c Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Sun, 17 Sep 2017 22:37:12 +0200 Subject: [PATCH 33/49] Site search is active for a while now --- source/help/index.markdown | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/source/help/index.markdown b/source/help/index.markdown index 1dbcf609dc5..a4fd646e4f3 100644 --- a/source/help/index.markdown +++ b/source/help/index.markdown @@ -29,7 +29,7 @@ Have you found an issue in your Home Assistant installation? Please report it. R ### {% linkable_title Videos, talks, workshops and alike %} -- [Open Source Heimautomation mit Home Assistant](https://github.com/home-assistant/home-assistant-assets/tree/master/german/2017-maker-faire-zurich) at [Mini Maker Faire 2017](https://www.makerfairezurich.ch/en/) - September 2017 +- [Open Source Heimautomation mit Home Assistant](https://github.com/home-assistant/home-assistant-assets/tree/master/german/2017-maker-faire-zurich) at [Mini Maker Faire Zurich 2017](https://www.makerfairezurich.ch/en/) - September 2017 - [Why we can't have the Internet of Nice Things: A home automation primer](https://www.openwest.org/custom/description.php?id=92) at [OpenWest 2017](https://www.openwest.org) - July 2017 - [Home Automation with Home Assistant](https://github.com/jjmontesl/talk-hass-pydaygalicia2017) at [PyDay Galicia 2017](https://pyday2017.python-vigo.es/gl/) - June 2017 - [Home Automation with Python](https://www.youtube.com/watch?v=KNFZSSCPUyM) at [GLT 2017](https://glt17.linuxtage.at) - April 2017 @@ -70,10 +70,6 @@ Don't miss the regular [Home Assistant podcasts](https://hasspodcast.io/). - [5 open source home automation tools](https://opensource.com/life/16/3/5-open-source-home-automation-tools) by [opensource.com](https://opensource.com) - March 2016 - [Home Assistant – Open Source Python Home Automation Platform](http://www.automatedhome.co.uk/new-products/home-assistant-open-source-python-home-automation-platform.html) - January 2015 -### {% linkable_title Site Search %} - -There is not currently a site search for Home-Assistant.io but it's in the works. For now, you can use this [Google link](https://cse.google.com/cse/publicurl?cx=005053695590750500199:dtrfi8yigbi) which will narrow your search to this specific site. - ### {% linkable_title Roadmap %} There is no explicit roadmap available but the public [tracker](https://www.pivotaltracker.com/n/projects/1250084) can give you some insight into what is going on. From 58d1a50e580f50836909fd0fc7aa2de464678732 Mon Sep 17 00:00:00 2001 From: Brian Fitzgerald Date: Sun, 17 Sep 2017 22:38:53 +0200 Subject: [PATCH 34/49] apostrophe correction (#3394) Never trust code that isn't described with grammatical accuracy. --- source/_components/sensor.template.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/sensor.template.markdown b/source/_components/sensor.template.markdown index 096b6e75527..bc2cade44c1 100644 --- a/source/_components/sensor.template.markdown +++ b/source/_components/sensor.template.markdown @@ -37,7 +37,7 @@ Configuration variables: - **unit_of_measurement** (*Optional*): Defines the units of measurement of the sensor, if any. - **value_template** (*Required*): Defines a [template](/docs/configuration/templating/#processing-incoming-data) to extract a value from the event bus. - **icon_template** (*Optional*): Defines a [template](/topics/templating/) for the icon of the sensor. - - **entity_id** (*Optional*): Add a list of entity IDs so the sensor only reacts to state changes of these entities. This will reduce the number of times the sensor will try to update it's state. + - **entity_id** (*Optional*): Add a list of entity IDs so the sensor only reacts to state changes of these entities. This will reduce the number of times the sensor will try to update its state. ## {% linkable_title Examples %} From 09a5ec9d597d5178c20e2c26fbbb3242f85a645c Mon Sep 17 00:00:00 2001 From: Ludeeus Date: Sun, 17 Sep 2017 22:40:15 +0200 Subject: [PATCH 35/49] Fixed broken link (#3393) The link to install page gave 404 error. --- .../_posts/2019-09-16-hassbian-1.3-a-bit-of-a-stretch.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_posts/2019-09-16-hassbian-1.3-a-bit-of-a-stretch.markdown b/source/_posts/2019-09-16-hassbian-1.3-a-bit-of-a-stretch.markdown index d382c05d6ce..8d1c4732c8a 100644 --- a/source/_posts/2019-09-16-hassbian-1.3-a-bit-of-a-stretch.markdown +++ b/source/_posts/2019-09-16-hassbian-1.3-a-bit-of-a-stretch.markdown @@ -32,5 +32,5 @@ To get started with the new image, check out the installation instructions on th [ludeeus]: http://github.com/ludeeus [hassbian-repo]: https://github.com/home-assistant/hassbian-scripts/ [hassbian-config-release]: https://github.com/home-assistant/hassbian-scripts/releases/latest -[install]: /getting-started/installation-raspberry-pi-image/ +[install]: https://home-assistant.io/docs/installation/hassbian/installation/ [discord-hassbian]: https://discord.gg/RkajcgS From e1697c11616dabb1850263a2f93fbc685678a39e Mon Sep 17 00:00:00 2001 From: John Date: Mon, 18 Sep 2017 17:27:20 +1200 Subject: [PATCH 36/49] Update http.markdown (#3397) * Update http.markdown added self signed cert option and link * Change link --- source/_components/http.markdown | 2 ++ 1 file changed, 2 insertions(+) diff --git a/source/_components/http.markdown b/source/_components/http.markdown index be058d6a342..749c9fa0e15 100644 --- a/source/_components/http.markdown +++ b/source/_components/http.markdown @@ -62,6 +62,8 @@ http: The [Set up encryption using Let's Encrypt](/blog/2015/12/13/setup-encryption-using-lets-encrypt/) blog post gives you details about the encryption of your traffic using free certificates from [Let's Encrypt](https://letsencrypt.org/). +Or use a self signed certificate following the instructions here [Self-signed certificate for SSL/TLS](/docs/ecosystem/certificates/tls_self_signed_certificate/) + On top of the `http` component is a [REST API](/developers/rest_api/) and a [Python API](/developers/python_api/) available. There is also support for [Server-sent events](/developers/server_sent_events/). The `http` platforms are not real platforms within the meaning of the terminology used around Home Assistant. Home Assistant's [REST API](/developers/rest_api/) sends and receives messages over HTTP. From ef7953c5b00ca5fcf965f299e49435aefd324fa9 Mon Sep 17 00:00:00 2001 From: John Date: Mon, 18 Sep 2017 17:34:38 +1200 Subject: [PATCH 37/49] Update tls_self_signed_certificate.markdown (#3396) * Update tls_self_signed_certificate.markdown Add .pem and iOS info to save others searching for it like I had too and save time :) * Minor changes * Update names --- .../tls_self_signed_certificate.markdown | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/source/_docs/ecosystem/certificates/tls_self_signed_certificate.markdown b/source/_docs/ecosystem/certificates/tls_self_signed_certificate.markdown index 9eb1035eab6..0c74f7494ed 100644 --- a/source/_docs/ecosystem/certificates/tls_self_signed_certificate.markdown +++ b/source/_docs/ecosystem/certificates/tls_self_signed_certificate.markdown @@ -14,21 +14,29 @@ If your Home Assistant instance is only accessible from your local network you c To create locally a certificate you need the [OpenSSL](https://www.openssl.org/) command-line tool. -Change to your Home Assistant [configuration directory](/getting-started/configuration/) like `~/.homeassistant`. This will make it easier to backup your certificate and the key. Run the command shown below. +Change to your Home Assistant [configuration directory](/getting-started/configuration/) like `~/.homeassistant`. This will make it easier to backup your certificate and the key. Run the command shown below. + +The certificate **must** be `.pem` extension. + +If you are going to use this certificate with the iOS app, you need to ensure you complete **all** fields during the cetificate creation process, then: + +* Send **only** `certificate.pem` file to the iOS device using airdrop or other transfer method. +* Open the `.pem` file on the iOS device, follow the prompts to trust and install it. +* If you are using iOS 10.3 or newer then [additioal steps](https://support.apple.com/en-us/HT204477) are needed. ```bash -$ openssl req -new -x509 -sha256 -newkey rsa:4096 -nodes -keyout privkey.pem -days 730 -out fullchain.pem +$ openssl req -sha256 -newkey rsa:4096 -nodes -keyout key.pem -x509 -days 730 -out certificate.pem ``` -For details about the parameters, please check the OpenSSL documentation. Provide the requested information during the generation process. At the end you will have two files called `privkey.pem` and `fullchain.pem`. The key and the certificate. +For details about the parameters, please check the OpenSSL documentation. Provide the requested information during the generation process. At the end you will have two files called `privkey.pem` and `certificate.pem`. The key and the certificate. Update the `http:` entry in your `configuration.yaml` file and let it point to your created files. ```yaml http: api_password: YOUR_SECRET_PASSWORD - ssl_certificate: /home/fab/.homeassistant/fullchain.pem - ssl_key: /home/fab/.homeassistant/privkey.pem + ssl_certificate: /home/your_user/.homeassistant/certificate.pem + ssl_key: /home/your_user/.homeassistant/privkey.pem ``` A tutorial "[Working with SSL Certificates, Private Keys and CSRs](https://www.digitalocean.com/community/tutorials/openssl-essentials-working-with-ssl-certificates-private-keys-and-csrs)" could give you some insight about special cases. From 2ec2a6a352a3b63ca6d7800e6a1ee8b6744f5fe4 Mon Sep 17 00:00:00 2001 From: sapph42 <31635854+sapph42@users.noreply.github.com> Date: Mon, 18 Sep 2017 14:40:05 +0900 Subject: [PATCH 38/49] IFTTT Maker service has been renamed to Webhooks (#3398) --- source/_components/ifttt.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/ifttt.markdown b/source/_components/ifttt.markdown index 8aa8aa16b57..ab3465a175c 100644 --- a/source/_components/ifttt.markdown +++ b/source/_components/ifttt.markdown @@ -52,7 +52,7 @@ When your screen looks like this, click the 'call service' button. ### {% linkable_title Setting up a recipe %} -Press the *New applet* button and search for *Maker* . +Press the *New applet* button and search for *Webhooks*.

From a6f53a54dfc4c15ba2128ecff8b0bd4311d0f7ce Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Mon, 18 Sep 2017 07:42:34 +0200 Subject: [PATCH 39/49] Update screenshot (second part of #3398) --- source/_components/ifttt.markdown | 2 +- .../images/components/ifttt/setup_service.png | Bin 43987 -> 49109 bytes 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/ifttt.markdown b/source/_components/ifttt.markdown index ab3465a175c..8a40d9b1ace 100644 --- a/source/_components/ifttt.markdown +++ b/source/_components/ifttt.markdown @@ -56,7 +56,7 @@ Press the *New applet* button and search for *Webhooks*.

-Choose "Maker" as service. +Choose "Webhooks" as service.

diff --git a/source/images/components/ifttt/setup_service.png b/source/images/components/ifttt/setup_service.png index ab9685921b9d860e24afaada926dd04a0e798e9c..c4fc848b182abccc741f76010b61aee907e6f8ee 100644 GIT binary patch literal 49109 zcmeFZbySvX_bn_ah_pzEAczP^BM3+%Sb&65(j_3>-3p>0A%b*wcc&oT-QC??XFdDf zHOB9pF~0GQZ+!op_aDag;o-ioSl3*0&b6-nRZ8L|7Wy6ZD_5>yiM)FD_R5uOC|9mr zy@G}epY(2vkX^ZQ?~2H?r!uxkYvUNo__C8V+gH=mLh93C2~Z8y*8-Id2GiYNSwBndg};R+p^7Xw}vQ$@742C=ox zXOv;QgT=-3iuMSLg*L9q{F649g*M{gj~|hLkzd0Vyn^)S4^vSj`Q$bB$QOTq0>6vD zvVEoc>c74gA@6EiW7ilJMd^A48SUO5KLmMeO#b~xiv;(`Oeb=a7ytY{;!C(VTO|Ly zOR&Zc<;(R5o3&-Gza9c#`hE2b_1^nrVckA zP*Jr<^2le2YiMY|hfm;3t|Iq%cuvDjs=j)Aw{~a7e4f*)^I9Vc++hXCHTzaMBvAL>hlxlXiY`WZdnU#~HW7uQ8o+NP+NlD4;MXqT# z1+Tbix-Bg&4XQebC-;Wp`I7P7At2aqrio@yDcj2`-=JfvceyE8LyW+Gv%ckgVU(WU zUYGOzL6vgryIkfEI638ymBqt3)(0|`s-4e2e*CE4H?PwJ`L)$7<5TeTRd zpMK5QX3Cw8S#%nW6nu5KMaa5#e@X^f+2u*UX|F;f`r2f*OK*~RcXv08-#Thpc{(~% zso37$p8sG-%TM5trD|9`2P8C8 zdSt~+4q94~*v}~`4?UFgV6#RraB*Z#DUv?<5|r5OE~Lq(zwjfgG?}bY66jTf`A>V2 z^B>Rs(CvsQ-5*Iof^p#rB_t-&@&qaf9-Erq6pTqjJYoN4!ue%F4ZN5}BBDg6{Z8ri zZ32U_<{vaK{m7iAYTUf;cDw;Zbd{O%<=ODxP&9F{wS7ku@bL zRqgETh>3~y^z_iZ(GUTIh&lOld<35fL}~CL8B7!l#vVm|Y*g zlOkxm>3I$DHHb)!z-29M^tI9A%~6x;!u$rE_AsnFk5kmDo!i4XgUJGdgNaB;PFtC) z&yHsOIE}~rb#7w5Vjp^O#Z44{N$MyWk3NA8W_k!ut_*xC%#n(&W3oOtQCNWvRln8K3E&pq7!COH+qi#Cn0(w<9c|Vv_)*bUtGP> z_ik!xs`f#eUT;#g)4_1{<+(}tFV{U&a`I@K2|L}Rt!bez%e~2L;;+2w5CMo_TxVFw zyyQnD{#?)ZZ@w!wRtb&No2WPrV>ehC%vRG8kwzjS3MNvujn(apIvlg`i}VasSlgLz zEw|Z}c>TJqsj0+l_C+MO)g72+mP+}?c=;e4ptibJ22&X9r|US>)YMTtHca&N^vulJ zuul6c{RVw0Z_?#5k*{7IEjHO)QPe9YK}SdTB^Pjp5#FMaP%bfjn%uj*e*)`2Y1Vkx zhlCRw4Q;6}^#=r8XggEBARJI-<+1JA#?A>7Rl#~?AVGi5onZ2>G zv5-*hcgmM*nl`N?2db`J{>JeDmt$!BY!zIHU?|x&nR4q`VQ1?*{C6aPMA>!C)4nVnK>vAt@Y7bchx7C+{hwM5l&w zwE$}Ag5DQO!!mkc5RH&yhR~UsnWbi^-=n0Q{e;6mRORI0>|7M z?!wfE;{Es)bH!F7d2Bv=dXn?n=ETGZPCtVOJ5IS>Cv)0+<4q)lk9||dY>t0N=RS7bCgGdoK#VZhnHFg^VUwudI# zF|W-;aoEl}ygn`N5)QQU={jfl`1awU%i*|<2QKX7>R|Te+z&|zG@Um)hm$VFufA_o z?RM~JtL`^6G*s;mDD}iAj50AX(aUEUjufQQn!x}7HVX?}Egd$-N}oP`+Jo=0-kU7x za&f%KW3$oL-d?D{Ku4$F9>!j%-@nq6*c$WnlaR3RIwtMm`sm@XZghQPq&~Aio4&aquV(d2Mu2CI;cy-VEZyPZ@nSSNyMCZ~ zsMq|(!Kg{6z-7f)F634=owhGNK2GyN@>!~tbn1k~_-p z{KX4V>4Z_6NvA{I zXeS*Bgc<;YH#)`~n@!dE0|&_7kZoJE zNrTHB4mV)x!Nizo6dh4~JlZXRFt(B55ID1ZyKQXrav2ZhS?;+*s?~Y_e(uXn%7gV$ z-Nn+^^>}!AFMRIo&j+jhq`%EF{#6a4<7j(!{Y+-8%IUPh_pVZwdW~hT4Pb7aCr+_l zs_sUrT>4#D5P;4#98`B)`%3582A?0);&jy=C@Whc~YuJJe=tYuf7 zh-U40CCY1ELh^#&4xM?Fl$CvUcRxBgp^G^`+wDXz6+-*;E5~4v$%9q+Gv=G7Ou+%) zyF9hEwQ+HAEd+>pMR2hJxq+-TQnAYHK9r+T*DEQYlBF()_B|rvtc|VHakrh5U!!kY-et~9P2F{kLgJzVp6t+sKi7SUVcAZxwf_jd8C6`B)rEzFnyWY=HYQG5%>h*4W8^NXVU}7z04iQa?e6ZX+06$5B^tdn2`+H{^lNJ& z+{F28yRqk45%4Bt09XRSSzKNGBRG4l74$ltS8c8jBQ{~a>;|LzD@jSUO8Y`{hXTd* z0=?cW<f%@9v@Ti#_A0!Ti&f9 zROnIhpud2%2XL2F9MU}Peo0>VDs^iE&TnglnUv0acEyg@{%MO+v2h_yn^by#i<|V* zr@sucE3N4z@mmcAP;gTYkPoWN<<}{e?jg4zFE1~*pa8rp%oCP(t?s{h^X3yOR^D(S zyTL#Nmqmk)TsytW@9Yn4JD99 zL{8XlByZ`BC^8dz28x)Gg#^Xgs zO3TFb6_G(fg|^!>=;X%SrnT-j{CIc1Jf{K*pjzcv`aI6E*k*G=*b{plo>6JP4>N~D z0P?2Hc$_=@?%=W|xzk?vYIZeKrkfEcB{h(R&h(<(g@U2CbX&_CQa(KfE;Ang(hmqA z@H#+DAbZNk&)~om5#vPg*krXS*#N?pEk-$TTdyrGFNgm4VF8p0_(sdPA1C|l+HgLE zG8vzJfmM3d<;5vvtvYU%u$kp$JIE`AhQmGMeojUbBj7A)r#9>WK4W=W#h?`(ZI!2 z%C;PVK9mz&D8M>7Y*x}R8jf^ycB;X@AS5#KTf*V>rRMW3Ktz)h6GMHCV3Lp|0NM3! z#!^vJS8X?tfE?tIG&?)mE+}|RPEH7a0%nWE>bIP0ejq1w_(0)pd1wvmS(K^rk{yHEX z&=!>A_Ag?2Uuwb0z%#2uwFkRCGm6ilBb-x`JN_I(K2pG?sx}ChvW7fbn>l0y&lYhoPM5k0=y6G$!hWeEGByTth5D`_ z-c3P41<-SWPEF5aUe(N?rWJaRRWhvxV2j>BLwi?dnfmxPt`O#($FJ;e$YjbH@O3LB z_tH+fl5$%v)p}rLW=k0iWN<;gsrM$LZ#!&nZXPbRNJbGdG|bo^q3mG=a0-8{7x4Ht z%ltsL+GS?(ggtCmq6cHq?99xXvU6X-w|Gl^|AI8&FjZ$et&s48sYQ!-cXlAf)988G z!A9=)%c})ppuVmLiKENJJP!KrbM1a~K?2_>h^fn|PdHUaGZ^#f4fgvhv<$A4L@!2q zugtTeev0Kj1|4<+xpi~0x|$0n@`@Z6iDtvKzpGjAay21<#eOp69y2e3keJhVp8NiC?jw@4!Bu2r zdpLdh^AI)#zPAj2J^+Hw0Fs?SaOinWkzi=HvyQg*F#pb`Xe5_K(*ArNuIBGAH(SJW zR8e&y3d}i6J#ZP7iX5jsi13*-?GHB?ZS)NEzwSrqm2Osqwcy<4mN}l;FI|kvKi1D) z-h%RoH`_qEyrhQq5Rlsgn4P?@q+!6uXt5*{!y1@Vp=`t>fU()CeBtbk4Gkl&v)^d~ za}H-WkXy*TxVSLaHr}qsquB;cwY9h0OQ5Mm;hvqHT|1xM{t~HW6?^<7{qDlk;^Tsr zh|vs%d;~5r{kF2QihN=gS6*ITT45<1tK&e;W3@S^^A-R8;r|>58ZJ9`XE17MhesUHa#Ei)z;U~mv2_FMGG0%={(c5FO=EvR{~KZ zDF6=y84HvuASfs(GBT6-Ov|~w<^&&IVZg&ENyfni@*6Ovk+t&YGoVD%wleEdQc^VP zK8xVIv9%tou-gUeQ3ONYRte4n!=S;*NApk{5yL1xunDKr&gYtcEOtcZ+r@Cb(I_ki z7%DU#A5jj#LYR7xsw5tIag_^#>J7Rf5ycxC8OdlP@cMX2sk8EQqnvN0f?Wb@P~GiB*Tnm+!7PLU4kYKi z(wnS0j|2k-^1HWXZ2YA{km@b219o&hM(fs?X zgTbdQjqqW9US8WFC9rJ*>T21UIyX>;^lg>hA0C68jy z5O_YVhIdLI`v6(uVT~gN4XI_B@=YX<(pyO@faSBZv-EGRv`Mw9ii#9M&9n9?&@rN5 z;6-hoSCi1^qvS)(6aA#~^78PLXi!j56^pxcylROvH+3Or#B2Me9y6ezpnw&lQe-$> zha*s--%nSHW6ouXVwoCJszEUH#mnms=p%^1U`8cEA|iP=P%spS97X5rsRtKegB420 z1AV{|ILlGi@Rr1S_?qx-*2^sCQp?q9)}Da7Jk~N%*Qpo{b5-0zZ3)>QuF-KSO$+AX znwmp>kmeGp%gF%+2qS}Pe<43BD{Bw;_NK_2su%Jdg~qY9{ZaL8_gA&rXO=;N%5Rc(Lhn$u?=t&Z%Ta$;oL0RspDZ4(4-$vB2~~n!^El2;pd6yB**t zt;&OiZ3j)ypJ|hQV3JxtH*)5z8FTW+nm;}1xh<%X=fBML>3KWBgzQBn?d7^0f9l?5 zm3cGzoZ_W;wjdShN7q~E;DAoY^vc4d#34>?+u9z;DcyU)Oo zkw>N>D=G;J!spI>h;KUYrpsiNQxcV^WF&Xu7Im??l*YEhLkoErC$7*2`wVM3JL9yr zWUg0Gt}0`u=DsODatAfI!-kX+F7!+>IV%;VJ=(25Y1OWWi%oQppzlVlM;B^3l`^d7 zSsp+4=)FNfH~-B%8IS-W_;uStG%lslq?vnqdLR+$nzhS(-91f|E3QH)%C-E?k+Yn1 z<#}*#4jK*3g91Z09$aX1qfy{zEr0^lQ*>>$k5#p3Z&}3;^&YO)*!IBnzM3ijwD4g} zj>G5$`)mXVQp_3F#m z4(q`D-LM|uM<7{-d7o=)#zit0k#So#>0l-OhWr+8u~{ z(%OWcARcyOJ;?$jNKwC7^8M8dkoPd=?Cw?X+JiNF2M2n5`dt-A53S5tHJO6Y9Q;Ul1aXTf7wt>}si^Yy09^MBJ5-M&@%%!m=gTY0|oCg4!=GE?F*q8FXw(h#eQ2!VQ zKUAR=>17jya z3Ydrq zw1lIeJ3)@PK992-1a=5TokyFBh6p9fX);mp>hZe%<1kw3q`l3_Nu4a*T1^c(51e*Y z@E{>0eot?VhzboYg_*F{F5Ae*9o_xp17{qI~e+nX%pPp`jrt_DDqYt4uFc)~=y= za~cDYO4}-Q2d5LEbJ5KZ%m_ko7>o!^a{jTsiXdH1|h@ho1rn(>abvqU8c}LBSw=9rkz`oF^$;Y+4)i9#}+0!TpofY^7vGozNT^ zL@8hh_&oW?)fNLUi7`LJp)V;ZfwBm>^U*Yz{$5|dzPWg~1_=t`w>xZ;x!4hz%nL6oC?N4Ktb-n@l=ioY{Fl+uZ;;lp&Cbi;KGjQlokN36T&O1RIwZo0kCr z0g$B~&*c}!p0UUz4OGVN7`}=Q!=N2vC!q3Nt&}`SS zNsm_2v%$29In$3%PhY*fI22gLMyG&E&10x@LUjSY>dA> zXXj>aBiRqKnf3KbtwwA;FH6Mf1zqg`aLA~msSHLyIvBdZ6%4rFNJw-b&i-Pwi!}tm z^i!V#9gp?dMn8lCU@(Pn@FaI0vZo3q;WTc8nmf_}P~+v~=pu#W^RKewm+*H*zKiYS zE^E1sfoc)#!GXq)O(q<{yqiC%r~{iC-?%uO-p|KJ_I4K#JveD&%0mU+5U&Xd4?GAY zJa8dkhsvxBL`6k)bdu!K`7D>Dz~BZfLM-%b16HOSSW~jArimb3!LP`*tR#o6%!PBaY_75JzeAG%_oroT`(3>AEIw32rj!SZf&Pp%=+ z;KSJo0iQsaXJdK!7{nUL_YupVlTgHgLP#)=*1LB@--y}f%%N(VXEMoOItDBJPVG7d z1wZgZungX9qI{`X(eKAl&rnRTYG77uA0b4t2ANOL!-Y#t!%{l(*;R=AaP*jHfXjTv@PQ zz{-S;-;xOJ1*?tS@49;e6%VxS5Y6>#Jf@n5}qCFRW3xEBpy=z{1#0aH=cpM)l)j)3`v zaEOh1628_e3_+cn2j!hw6Nne6394^R{Q|S)O%%V}++NHp+w|m5xeTdnT@N_!?yN*J2qjHV=U||rod2jf=8EifP z&%5AYu~IP9GV*nx++e@=VKr5}Cje2v^!5FjG&I)H+-!HcUJPF3G02#QCBwV}5nvU* z3=-95n}7y|q$H@mfO*gl6h_D6V{W%b<=JpEa z%~Ta-WuT;kFl3LbN(CQsfwC$c@1+))gYbmH)!>N}{AH&^C~LiaPyXIJhay0|QAkv) z0Z^fRm!tla>Vk#LekoQdwHb;1fCz@hFNI#ikD;jKP<{Zm&X3--g3N@Wa9hMl9CFbjs&NDuBAv2 zjiKxYKkM<@^b75W^R&%d$HV*zb>pF?1c8*br+wAIHx3gSEd=;V8@}N^she(KTAB>! zC4$vVz%?}RNTtkjxWp{Jy|kjpi-&g|nDR)8nO5n*X7Ps~%g@nH1-cF(aXA6i06#r1 zrSSs1>_3E7bcJ5u{QTS8u5+w)nPaYX3^GnsaFz*TBK! zAu!;<1fDNbGzVv;i-c8T$)xkPNGo`&F>RX>XcVZ}q_*?|TFb;i#r^vGh*~97p(jMY zC`n1F^9gstmLurkJL6ZS8cAaSDqz$s$X(RuEHVT>jj=~GP+mE@)xzdfhdyfmrQ|%1THab#MmD%FBaSpTYiJMa3Mdu*>ILjeccd z3|<1Fxd4;+?ZkByXmxNpSx!cfQr=X12zGE~J=%x)dvu1zj0ZA?p{9;UN@~a^A2tN+ z2!MSOtTlp=^;@@Zmw28ERw}43 z8}IhxdyA6p4I_Eyhgi$f^+Ww@0wNiGtRwqPd;pyuI0U-P!(`?p9w4G>Pcl@re zPXs*%#ZEhDEogB#rkB@EOa|$|zuzZa_ZjPSr z4OAR5!%Gru=oLcr4T+0G)#)4_5~RjTC$S`sM5@*`ph4296D zP=Vqr+LO{Nt3KSvIIbH!&jhmv!Ct-Gnyy21y;v-~R#XhDPYikyzrDL_0LKt~FetjH zx{+vM>lHf%AyPba)A2*We0vst*V@)r;e2in8G`+eI80-+Y&8oO>R_omUO8Vnurp(D z71|B{rvoV@k&z*3uqYX z2Dw0d`}Ppf;_5{ST}{mySRpX|tma#SDk>_#WrSo~1c3|{f7sO^j#HB%YoW{Pr~Tc@ zP`SN4Kb(a1us_*bhH^7PegN7+!6^+|wxC3hjEsyZq@_yJoPN@^_$2-I?ZL*l1854U z+9{V=E<>pciYcioj}KQ1F9M zLB$GD=xlEnpDxb{aM>qV)>=t9k!_J2=3w!<$Ji{~AdX;9AqD|EGV3D`-V@k1S<_^7ZAvM&b{j z`4>|_yXapZx~(t?@=A@r47s5AV-SD*xW_EWd(T7|`(MNDS8=tCDf44F7yf6N1XW#a z1t&g}{{1kdYiZ?IwgvyYaR0Y1T*{kqo>%_~IAbCt;V224^|F-ZBr_Z7aVDR*yND*& ze2CO1r_8Pwl&*q_7`M%>N>ODqM~qj(f>dpSGFf=276wCpdzYe8xTi~QefhP%A~#&s zWeOn{V}AqUK6^WX6Ybts=Z)KW(s&2td}bVs^qscd^zKp)M;r$ISr!g1exuwhUCDPR zoVFY{+V6;e+*qBP{i2s}(zmoOK(*qIOIO&C`B}_K{O)N3Ei=2dywK;TeOqWt&>(6AIUc+JL(SH zE=^Z_GJdN}Hb(RiQ-*{Unq!dmkgD`N)nbX++1P8UiTSKw-We-7P7-NKEnlKPf^u>T zb7=j=Q^cDb5pUX!dyIIK@V(Oyec2wr1XU&__#6rhHrA8yP$Lh1e=j-G(&JpUw+mKo zTd^Wyv*h$BtMaoMcd5o2DLbgY!|k^IpfCdpXU1JR??)AYfH^V?QZ;q=eM{dBM}Qx#_o$r{f} zomEUQx%#Ze)?6OnGft>q=SpiOs;yLs-l%$Z)tC5=J_x02-;jMn9(pmre4+XKa|XQ! zQSXNH#XciXmLA;=R0g)oQYWVtV`&ztVuh_3ieKUeTm`hB&uUj%w*{Vj{`RRHFVEd9 zN$M4jn#JS!F1fde+elLx&^K#3@I84FQ1mM@lZVyvWsiK%nZqplb54)6qVVt$U!GZ1 zr;S48Pc7}4S$v5Y;b{k(W|D#f8dig+_Kz)YmE{+!e>ds63^L$#QYpV1Z$hw^tgMK z`m*%J;|bTfE%g_ZY4weaXCz0lb>_TR2fyidMSD$HKBaO`6X|TU=M1)Nn%O&6xKVw# ziG@YFsn$aUBCqBRM4oRzqUtqVQ!*sKqDaNNm&Q&+H!V28d)ZEF-Ky}A*`T2$U+3BPnUG4YE65?ODv)f5oavVfL z%+9kJREk*MM}6~p5*EkCG`(!*+2WtxJHK4;_0dh;PE?$d>d53X6q{vhSwl&i`zxnQ zKNK1ck!AFK8pIPj+dKO8ZfOV&C1-yTPhQ zRc;0&8;sG*JD71r4av)a?OVs-ZuxtspTQx82|#hyN;;+tS<6ruHk|?iasS?z>8}JsxGUOIxb#`uGR$s1BK) zPBcf?#=k|UOcWvwN~@9DJ8={3O*^dVDu3L+o-FJFncmGsQE(%A&ZSHxf*jy2ytITfv#rYA=)VGsoiJ4$7q)46^e5lZkCdVw^;}eJ`nKcNKU^j&+{eY z)l*LGedJ<(>+mi+KXKPJ-YqG=IQ5zmXMY>PO*f|v%UiYn)(5tS*?dNmsZpg zt=Trxv_BzHu;O8dd_=OUv##`X_W`Tu%zc}ZY(>M7RlO_n+r_ealGe$yOhih#g-9ve zQ@vI&HDx4u&S;LOu~%PyBj(z>h*}RLm|!2&rM}p6$|ySG(Ke@f%@e6#;e3dVwv|^R zkZrs$*z{zdTHGPmHtWqBDy*wK?8T0&TKXjJ&xMZz;UQi9p*k zO5X~|=I1HjvUav#OJdJ03b$mFPbL!Dk@%RDo9&azmbG75*?(Wmq>Fe^(5i{^dwxFp z5V?qR77c+8WJvPj>HZQlozIf*U@8zR2tE9LmD4+^DV=@dPN*bO zNtqI9HY=mK{xDw9>oV<9uT97kG&lq%f)o3z4LYgpWCPznr&W1|T8VyhLh zRi>iQ(zjN;WsjUS1!H5494TR=!tUv%T^uqHGG7B-ck*sHl?K87K}4%KI?J8 z3?2DaJG`-B6X*!e`GK8tYLCxZ*zIf=HatI7x*+2WW@h@o&5c><dHCUQyW(2NB0EiHFW#B#R5e0Bwm=D(w(i| zy&)HT(NHUJ5$Lb__MOZ2)L}IlyTnHJ>SStRf8?pTrATSY%kmDShUYTOws#R@+FDvWcg-I+4Yg`QURtaA`2Mff#&T7k)v|AKYy*4PYqw@{lCQoH zv)Y|H-}hX#%TaTxKwzjV%w|VQql-$j$h`0MSHW-9OaRzt4&wUCho0PW6<-??*%KxAX=v zOBM7=Jq&aRCE`p7hbT*SBdNMw&BVJqVt>iIc=2WS>gv8no9@n7>PHUJEx!<6rTN`J z9nsRI(zC)u5LG9;Zl+sK#`h^KD6K9eu`GVvbs|$UepXVsCy6k#CEMHpzl*)Zvp+7e zXF;x|s3m!KsduK;rdwL9aL%1rJbO?oVA!fwqobddRRP`Tp26Yo231I@s4tzF_}*o z`$3K-olOwwA1YKG(GNt8@f9Gx#)w{>7-y^qD^cSQ(JL$DdiXW{H%s>`2)VxmDd~M^ zhrpGiLy*irKZX02pc%eu#C`wc&;Ik{$uoE^MTQK55Bw>=1%q&>oMz}Ay?%`M_upPY z@<=XS^EIYlz!?yJw@_nG{8ukPD*ivuaigOEiB0wS>x=t;%wZ6DR}S>SW z({kgBy)wnN>Z8Puto)v2{veTq!ua1|og+Ub;bWT}e0ykYVn;StxzOu6Avt0Gp+t8(NRaany-K$^deUFMWw+z6 z`Qf&*ZIM9q*HZwWq*S8uWIPdL*>1uqUT60F{Ewj~bIYyidir$vHCg8>sSWX2jNfPf zavN*9k);p6jOiafN~f!K?n&R)&ZeGI5c{UbcyjvHSGBg>*VJr}+2iD&sil1pbi*Zf z`6?W$*{HCskXPcUk~*Gj)nK(Ad>}<9J-?H7;24V^`5`wI6AE2kgJoYv(pbH|`}_?T zQ*+36sE3$VJnokL-HL-KEzms47#d823?+!KBLj=Z)?xs*kJ2#T~6& zh;M7Fe*9^6X7p2~aMq1k;-Q(dRrT$aY#CSHf0hf{d_SKA-^6>U_EE9V`gBun+V{n^`>ACVMDS^r+yYxwY0?_lnh1+^xEH;dX9>B=t%e6KrK-b-IsXg%t@8Pa~FK3 zXY<&lM!o5#y#9`|a)s5=hJ?g_?Hnx05M_+1NUAA?zGQo`Y$zQmj&h)jT}=F-k;iMT zf8L!ITBYEEg9}TvMJ8L&=-d1x{GK(+#Kq)_}7=dTtCA4 z8=^r-Q~+{!@Eq)s{{8$bkXNAI`p=i1WJ7k^_2uJx`S&sky4t!<{yl1VX9qo`&I&Eb z&VP3N|K)JlBZ^mDv^uT0$KhhA^ZCAfq(pE;L`LtjJ1*1^Zwl=}s~I%LR#jEGXjwcV z_!|JOAU{WDf~Hhi{5tJI!#WJ=7M=5U;?u*;NvLmu<)7xLs-`xHxQtEuM5^>Q)L;Kv zDwkxzppvPI=eRR&O4kDUl#_d*nSp_o^=*;6>Sx$!tU>|e zc0UM~QMnr88E9AInp=cv@xtBU-imvtlIq-u8+Md0zU5p#6m7W?aj9J&ffL|m-v7(w zV$0X$d6u)4nSpNSq_kte0bAAjhMKId4KZHbWJo?`aSC&lr16opV)%^jw%VUtZTc26 zcMJJZQ&SV%z?3bSfE$I>G&I!*BL)OnziwWqb}FAa{Xs?Ga7aczAiF%nt-aXt#eK$M zMd;|WFZslq+%p?`O1$>@{)?;0n8qsR+(rKcGU)?gBh5K*7Y6;8AoMya7BiJ~!1V+X z35g=R6L=$(G$kW!M=QXB0y;not= zh&hbMLVo{zP-p*5tlN3*_>FmVS09RwPLt!yZkk6OvH~oVrf@_bei6V%J zq92q6N3CZ2c@L-4^Otjf==wILSUwvk-ifj2dAK&f$N!Fd`PG+NQ7;_a73|n?vBmIw zcU%Qpv+WzS%b~=>wd0jhHoe$S`9^F-?&Iqzco;e9yd9gUqgB*mpHQ6;A3;GW{#kJ+ z)->U9tAA*L&Ea&yF7cp2`QYLHrec)I`5nsRv>ZZ^G)<6jP_x-hLzp8T!HNaLQ$H{#CA zeG*D@dOAw;F6+gc+kZwiDP4_YY|AvC*^GO^{nfR+by!QXQW9eYE)N~ptUl+nrR9oqS?@f!ibxFgrD2YWHONYB)`m;$U6DQt0yb+Y!S~-X zFk5Eo-#q!@jv9%3_1fvI_Uj$T zKh(Z<{dBfeS6Ey7=|TQGs9^X$51USXMPZK#ZOE>4m7~Va*p~+)TUs4-h2M#b4+OLp zFE!a7bZvz2Sf4apTWv&6)W;RFVQ@TfAHK;kIZ^abf1;lz(?#RpWG*1xPW;qtlYwk7 z=?H5l5X)j>NRLdJ!dDlJ5*hpkY_WP9crftQmb%%kkU7F9dr_Y!_@jD9P?Y>%NX&?)2xRq9cOioHV zlKQo{i)!O5+GXMc&2IAHJZF=k^vZ;7uP$=MM-B?FABE+<$j+*JDKNs^HK{~tIr95x zv-(W4F?Z&naJG-FmPEK5IX3h8_l3aD#ft4u?qZ30yIV`$hgSQC-CvZAT7IQ$Vcn#X z4(W*}tjc3mZx7^1yrbD2I-~N*x^Ya8e#V>Ro_m?qP~5yUa{CV#OtZ`4;fgOABQ9Ou zCj2}l;?r9z7vD~*{REWr*`9AM2-t4$WKYmY$~$uW%>s&pu5@0f(|rP69SoVTPK0tE zk4G7;zQmeWEa;1p9(x-q@#`rW6~X(4O^!+I!53ouVq?@#5^N=^v$r!p%?S5sT3_l- z_<9GoWo@sJk*YIMyT9^#cWn1|`&{2D{QIWiJKiiPJE(p)7~y>~8#zxkSbid`mN6-< zTyca+c-e1BT5R1qBHxIOy)o2KtsNe7`nl8guoa6LB^)`pw)Ui?kX|crbH)I<(P?jf zgfq#VkGteDUW1J=+etU!F=q4FU6mE$FDwZeYJ{qIkI=-Y<_gua!tNfZOQ{>UTn@PX z`qWT)yd1pAtI8`j`DBx3qYlS9P&tZ7KjWQN)qSGcO!1)|X3n;|gVplt;Xf~oMy?;a z?DQ8Z4fw8psB$Md(OQ*vWc*6bz#wXE^~gK9Iye7;;+ta9s-sHco;QRe3C}F5xF4<^ z$En9``FM1hU5;)oV`#8VsEDyheQbgM&l4gO%DzNcT3SKCwEIUaXmw`S1~AaaTSn11 zBuu?UR%-mS0vtM$XT3MNNU8;ucNAtgDuu<2@h68jCw|uJvM2n;cL{z?L>~N(mFwlL zzVtrN>u;;Dm`jXS=e+TL&^&DLV2uyO3ZzTQmm>im*tB zB!h+8Uh4PrvE2I?&(9QB-YUQKFpGLU)oUX0UD+BV_QoAf{=PAE3RcPF5auW!i&dP9 z$)8$OZeD{<%uG>I=8Kgn=0WmX7~a$c%x?YXcubL7KX%qn@UUXB?X9=JsRlf3knw&w z6^O$2QA{z;Zb`Or`E!Sp1oqxVN7}D)XQ8q8r=LrQe7kW{^6t1q=H^r$4Y66(E*vXdRpYYSupMbxX=H`Lo{-bbmhMst-LQ`ZH0cMO@j$k?HW?hgLG^N$V+tUd_jF4|hjmKlFdG z_tkGvwcon}3P__8N`rv3BHe;YNlHkAAUQ)w=KxB}h?LSG-8~>kH%NDPmoyB_%-MsV z_w#zrb*}RdobPYy<+Eq+XFqGLd#(FkYXgHqD()~m2PBOEK07c_`n*7t_pSQ7qM^66 zmp?LXVSA|m&b*GteMW|<LMhg`PhUma`$3Hod|;hUP3yDzM3iNZ+Ii+jyPv zAigM)IYD8Z{v$2{(cu)O+Oco5y~JjQ^0&F_6879M10io2^{#Y+;sNb>gAt=UO3~D5 zw`sjnv`4Di-i7Di?)?nczzw%EK8qNbLr7m@Urd?tVCN1P5hUW(lla^5AF)?C3 zkGv}!`i+bI_S1QkztoqOxVG)QJ5gr`5K}F9z*)`vP*}m%=>L&r!A}?l^EWlGWhw9D{V^QILpo)6If2ps}1`0iMQ8?twGMpsHqhgUOoR% za8nbBQResI;8ErNg0_*Of|tZkp^pP?TnTlZcDp-=&QnwIZ~^*~7bh2JiUjng6-8?KqsVnh)aH2cJkZ&$ zMS;=*TBcK*B?SP1LMxEC78>!uimp=R)tqtntdAlGIWmlJrYZKeQU~^6#JBN?N_GPB zlvK5kt{A`kaP+QTIawMCcp3#IYgpG6Nk2}Ou$}E*qFT&!e7*+#j4C!ej2yUm5~PyGJTAH%Huwj8h$RMf9O-1f#==Ky8S&g1p_y2k3_$0E8EV}@<4X})BN)=xS3+t zl42zLMI~O;Hhgx|*4SC!H)xV{m5+?uN z+Bjv-bkgAz(fHm3K#40!PghJ@ZRdFu%F&|2E|v@EZ0vSxYNrIjjH4nR$uqEgyjNBs zb!bDMCNHN*K2#Bq@v#y0HFALEp1O3@Kvn=qDvE>}j{nWP>0>XpDTtu`ke%m{QLn7B zZw7T#r~RN;uH33LbI`kg8K?hO9WcYt(1O;n{tN_w7%62SnI&-KHvr~B<(l6BrYWI& z)x{SZy@@5xjoZcXfWdZygAeZ9<8;?+_LrK4#;g|zJ#`l{=J2U!vURwk^ja0>SbAC7 zQ7^Gx7Us#yOb0=V3i|9GBzY&Khf?b!!W)ni9TLBD=VV7pZ^G*)QRm~fSIRqTF8zyZ z>-!f=k`jZ{MB^(p#HV{!1CC>=NW1Knt?lzF)9U)A+i6sh?Z%$#M32{i$n{ z|L6JB%yULTNk~Vyk*A2jjRMhw4!iopA*#K7K`WsluZlA$J14h_CgPxKMf^YM+9z6! zc6>sJ!OZ&}E`EM~KqwDIk7u@^v{6Kk&Z3oO~#%uJbq5fEAU#B#~Md1gOE@%Gy zcuUr&6s}~`Es3gAF}Q$R?8CQ4yU4M2xwMWrB+o~JQtHoDcxsKUz)B%RBa#j92FU4o zd$n=nv_7YaQN>(74x(sHCIxlAOcz!;BDzHfPskq|_5S^VBISweTX${8miBB2VxT_- zYV;^KZ_hF1)u$x(Z3$0A=(-)GMzr`#V253uH3H?cAw!W=-pKc0%jgZFJVf?bTENN6qZ_1rSCHF*w`LI*<3JNTOo( zY^|*1E0OOGFS&vKJ3vP74GkZPNImo?Q^ZU5VUVDIB(x5;njTu^*y`hcgV0!F?uj~i zO8M*}w14(=lS|NRJtp}Seh`=qIV{YE32zPXy80zyvpayNd7L{H}A=>b|}>uq09`6HgBCDONv!SM^hb; zk{{XcK)Lls zW*kw}>}#nW74gh_+8iRPJ$U)f8*I31c9D>J5BdFXDJ$}1zj7{j>dt&bE@nO*k{Mk! z)r}X+{SZ@AiPT&-INII!`C;qJb>#md1=&t$Y%nOy1r7!g<`_3@|Tbi{w>{=ltbdhF=rVS_1Su z)fgcUzXHQUvK!(DxTEETuU5}h5Myx>dDKbNJyT5wv zOn*kMKvj$?9^RLIHu}BB#uhaxbLJ(o+MQ=r4mKd!58J1;GKBO~*m-XmU&M`jU8beX z9(09$eMsEfZ8Pt30zR8ZO|BfZ4bMe>_~-2pVM4cSn395?&CSb;OU&=qKAoVqb715S zD`e3yG?aiKuQaNvS7Y^jPV$XTB!M|kU!l!EZX%A{8S6JKC$6qIibn-^V7Chb$nLU^ zk8lgGCr(=F_Orbothm^;Fq)n%xs>u$Yio_4da<4u#W*47fEZ}lvvga%IMH*V6LMRy ztbY4;wRMVlJ<&m-jNB()&zXAWs`;pRSIqwRZ?%|L1@S_=Bjx=%kA+RO72@xei;VmP zx?IP{1*ygCD-2#R-?cFx;ePY}~^f55&JeFWySU>r&wJ`c!LE;bS3yhD<1qyBHbw%)?n?MWSre#0h#eWDM$n|!tIzgtUAfybKEb71-FCxG8|GcFi?wE7pZO^=>Hy;CTJo)Y~Zy1}m$m|608 z%sTq;zXg0;`iMFJf1YY3{>$R{Homz_PfKaTui*aAO7xBy8iU%gY)^0e{XeC6{e1b@ z9EE5f^(t!F&AH;}zNTIJdq*a5Gpy9Jtb)y>4s%3UgO>faBBLXDXkNJo|ILz`F-2s_ z$7M0ZD|M%DB~n9i);=q;U7Ytt2MPT{Gy=OPC4gxaA8qyE`(%b#USHRu+ro}K8#4;w zT=_zscJ=RH-Mlr$2tONtog4{V^DutUgC6+hDix&=j~oLd? z>mk19uMMB-60g{csR}B+eyzfA4p;QZ@Ttg);`w(I)i{64)zu@_yRVeE)MhK9WgYjV zh&r$$C3tyg&dC}W9?Gq^0He_V*>fc3=aKEu`D0YgS;Dc>z}(UM6$9H2tQ7rdzl+fM zjs0X(?q}G{ME{*bk1IE3c~!g4dlM^?SKyf={;Lty zvJPne_wheT`%SKToP1!HujANz^vkiGbM@4Xp=)c|DAt0Lh4tV6NdH*F527P6=8qvS zOh+u|vClc{FsEwsb^9;YT8_!S!+mUr+OxQngjf!~bRT|LR;n!;jr-p-Xsm(j`zE0da-YsZ2HZMkny0!n;WhnC+Y1YFhjirXZh2lI!Sl1%035Uai;OXlg|J_#% z`SKoc-qts2mV5d0rR2nNB6FEM4H537LzEbH|7bxHn$-a`s*+9 z9G8B83ut6k`7hH5aNG-k?%-zC9^3!pJ1@9JfW_KxCrAE!X8!a;|96-F=Q97ZH-O{( zKfdwu|IN9Hz`+25<6|L=_4+1*4o%>XVwii*Em1_dKoDuXwLyn_PVBq%ul3y2^>w2k z7*$#P*A-v_r8bh^bT``m)$QO`0A`n(pVIu-Lg2F>^b3+VLjOepB$hzfmC}|B_-kP` zu&@zw;~u*G<4;(i9{^sCUy%>qUkmMlg}$g8k0kyZ*riedNPua8xJUc%!UbR<1`0#f z>z_;A@RI@n#?2Zyo7le#8_^4qSgGg#f(}1&dRknklhe-M{0Yb< z^(qtE-Wn$WyP}*vQQSnEHa=G95nqv%=8HT|Rh|0KmhPjPp!A|CCIFl;(TI!`wd`8& zX|&!VMB6jH6xx*YK%syX9)lED7*CX)02r{krfI1hU><9wP|9*oM?*C>`@7hx`|K@J zZ5p*O9H`5Neb58F%I$A3ew!XOu-(|8vh&N@S|Uto*(ZP%``tjphms*SKyC0z38RBU zt8=iGG3lvJPxeN|LA<89T2nP9*~h|kdPIKDXldVG&O$hoN4=WL{_t2j`O|Z(&>^Ef zwd=F4f6re3D|Au6K4#r$Tx0Xu{AT~mZ{RkWfLcTf6Wex^rgclz-;{z&W|VBO+5MP!~INM^~|%r5xcVu zBSGsH2In8gWCYDIifEf01PH~)9@~M5XvOdSTg^}*^mb$qoVq(=VTpRKNmj#M_DgL}eKyOJ&bt1>+bsz(9j_R43gGl`larF|N}QKWgB+ft`b) zOw+jZB&vQTro?NK4tYiKHeBynmmhp*ZDd=q)UTJ|lZ^^HE+o_~ACIMFWE8>}dWcT- z5($8C6P5N$9KDAoq@DPa8H+01Ln$e569_)OWTgC!za%7(w2(9m()(Z+bgc0KI;{AZ z)AuU2Bk-QIl-p8qfw?9(7i zb4=Qbb$||HouqzILOXo2&pXlS>tnoI)OO>G{fXwH1m}vk2^ph`K&g<{O7WXD-)A9= zG7~C|0vx!TGx7p;Zt^izBb)SPZOqpmh>2Ya)fjx}h*sy)<6}TRm)MYRnBw!L*&DZf ztf8Cqyu@>T>0E8#spp)d1bnM$sX=W1PNMo-6xVMG{KIzocakJs`^;`OmA2w~<5yaj zdU1M*FT&rWza{iI9_X`p`5GKSfxdQ})U!7bUIU18eB~4l->c3TXUqzxDR!xb>2wNW z%k?Lh6ZbV+r&T$r)ssyxNmMvSmkx9#Ui7f!<#oaYiG;g(+3n5N8^C!;lQ`s>P8grt zwJv=n!gsk$L7zyILg$4s-)+FQvSvQb{uCPe=>TtgA(F{Bo%sUc@JvlxR^()x2EIt; zagiE;L1Rcc0EuXj++mf>SSm4(+4e3!UVIH=9>#caOHI3@#%Y=Eq;9+*EEQ$YZc7&a zrfX*V<<8g)Aj)cwyn(SZJkwHw&x$54-Gzf2ofnkxy_n$L7bAS8lDN|Loqwltdect6l9-moiL5vYPuFz z)3e_ErjmGf^f?Qu6n!e@1;g~m^VwmrJwzZstfp)X)!qW1()C^=hOMcbZO~VVK9pOX z5FHh=W&_y`N*0f^`eYl~R&`+utP73Ch|i0bQTII>Cd{6$xM_I(x_7g z2V)K^oP5pB%X>UsR^_5o)i^Jfzi&H)gb_TEihph}j!l7ZXplJjv^SeE+rgO&GGuo5 zIOD5JH#a__E|ZUQM7!ym$`L?e<+eYw4%%SlFrgq=qo;-S!N-Cu!s@aj-wxNUF^ZEF z+e+t50&Hp>Q}K}_*3p}*IaMrHEe?ob4=UG+bmn*d2df0aFq^}azOm?~0ujEY;?--` zpfMOAQ$FE}3Zi?VcyT{c_i~n7?CNkoe&Bo}S?jc|TQ^{7gO}+Mzu$REmaLzl^G-m} z_+_rMgi|qJJg2Ohwh|3|JiNy9L!o9o?`*OS&E&_Ra+Xb+*I*IeKZZZZ)9AG{Xe7G= z7@+^72#TR;n+kg`t-`IooaEVJQNyu7nXZ(j^#IT-RI@^oz?>FIygtYg(gN*;i%;c> zcW6R1sEC00QEb{Y4dV>7#m8~pLXLy!D*BU)Lj5PcMB8P>v&yiRUGN2?ot zYQRf)tibLMLg&7>F*RR!=v9W-b*)vFzcBJv+a{W5oktcomvATMo%N61*UaM@cWaPI zwW$1_V{dQX`m_${Km#)dGhIi2D9h-^7rJz^5mh&ijCdVfK2I5Sh(&KLMvK@J3 z-?tppzP|SsU(%DNcKp=<5Q~FKht&QLqV>8E@RW&13a9W}?Tw&GQi zE*{;2&;s0}cEW`*w&6eJxWn>~vqO(A z7bfkFxMYevS@7c1&y>e zA1ok&ACmeGM9NWS*h5RZr(y>;QBm7@i`9jX~hd&U&5`FRBN|`yp=?7y5nAikccoon( z00Eb(?k*~E&H-e);HpyYcX(V4P>3&zq zRuoRUP(UGMAAu>I+9wWX%K^$XDI~_#Lums1=Ak&$9Uj7=%UN`-7BOenZzvt;z%-85 zxCsod#JE{=3$G;(2VdTLvx2Kd&K8dn?XEF`K`eDJ1ObULb!q<3*M! zR=?aC8AFE)IY;Q{C;EEta+phP7_H#$(8H)*-`HcbYa<|`Bt`F-$$A$0?JD?{L_HQ_ z9d)Ns)3dAS=a9_EYnGTNJV|Ft=#MCAjQ}~MNf_Lfw_DDjJBmJj@aGCbKL9|@I-XFA z_8Bb?2Q2zABu67OC{gr~H+!pXtlqk(MIIEwN{&%-6?Vig9*0=Lww}dKO zD=is!_?*D%dT{<%qC75J2BwZu<5b4s_Ld^25~U7auwLw8JN0#)L5K}A1jQ=MR<*)% z{pzi5LR}}-lhp)e^6MWJ+=_XSBIH?J*(1PK&LCoC`?yg?R^)gHqf++HP{E^4F^9>R z(~2$2jvMX<@Wp4p>LPsH%d5W zL^{8?pkPNmC{E=(<(8zLCcK)*T}p`8%n&dlnz<+!w3Sdkl|}EU^`8U#5tw6?_*nPO z^?_v`ShXI1f`5Bw60&u2DFY=W_gLo>|Dosk*|lmsy~yDFT)8g2U3W{y>qRD)?1^;x zt^_$Mv}Vlo_lI%5qDDr)%}m(sDXV4YmoaOfhd)Z=-`3X_)#Vi0Y>=1sQvZ2f0{TBZ zLA9Zcr%icZeDrT`6fuMBetcFC>sA+b<>{;G-QbN$ga;@{0w(p&eUmX1dHeK&Wozrq zbLT!JrS0V^SYm*5)K7p0G@jMM-d(+bm8DvCtYbN!rjPhw`-uCbC#1~zSh!fmT zLMU}G9>@gTDK5RM|Ki;Te_au<&QM7@t4qF^QOvEe{F2Kzk#88E5K3I**iR(@2_{>O zS&ha$1G0@V;yd#r8R8vJ1+!Y9b5AtsB-&Wc+fNxc4z+OWY(6;Ot6(m|A6YltlnkV) zbIt1emin{cLuhc-dgGiHSmG@M-iLr8e8+45NeCEadK!5r7I5VVdgFXJ^~knT9M1Gd zYO?jsFpCX;Yfpjw2K{k!O3BgG28eS1&THA$rO*+Ti@UZoD25$N^Ee>;3TeBYPuZ3- zjPiEP_Dc}{wh7^yzb@S;dI8=h%C3(FZS=n|MRkum5U>&zf#PmV?=!H7&G$o@I>NIY z8#b>cS9sq`Fc>EOdHB)O6O?L(-m}(#*Ot|uDRN#Env^Cz$N(V>o{+p`CNqUR$oFvt@gxW(ych%U7tHN zq;+mmsG33Y3oB41hV%id^%BcR8oKM`Vx2jsldfn!>9ja>MQ{+vk?`xcAM5dyiL`%o zjPoIJ^?1^i=X+ToB7VSJ)U*BZj(|Ljk-@hygyMWFj1@`i*U+-)LRI8=`jDzVrI+Jg znbHmA6yvB*XH}c_o`=t#(Wp%~gOUW_xl4aB|2p0JfsaQv?@>vc3Z%A!oO6j^;ij#y zO|;oZ0F+AE;%6WvrEDp}XV4W|VIIJhe4bZ4x?TB?7GUHk+&kqsoBbQpw){6y6<@zsbQ(Wf!?X^h@wk3DHsyXO_c|~eiR68H??sy2 zNBt~>s8wmi^z<>GbIi zaFc54q-N+SEyp%6WaWt~R%2j0#p0Q=jUc~jWvuhg+w%(Z@%b{x`=g)j^vTwgOXobK z7k0O=y0P`6G$Q2!_L%ffw($h`4)SC3yhwi_^Z!O>pJ{4PbKwr;Fic+9a6DlF8uuol z%B*C(8GHSzqF%8udg`H{c+;iTj}yHJhNO<#FRo(;6Hripyre0Gjeg=^m}=V7ddF=R zCu@VCb@C3@DYDUqx-7z=r3OW}dD6kpFw5S0Cz-$%CF(~!B>@UwRTyaHZmeAUf?B{a z{Lph<0h(_8nFq*5r?6_kgH`-UydShJFc^n&TQ)=iBGE^IPVW_tGa7xo(67!7% z$R)LQRV}iN)5VPJic76--(nb}?ajI)gl6t3N6}8I#-o!Oa8e{Z3pLhT0}#9620N{m z(qF@nRq+$lJ{V@;Ag~CW@!5t+Y?e%jFw{I|GcqpzbyH5-u?96dMSKr*1k>ZNhj5}_ z-4nl@{45v1-`sD%pKxAOv6_QicHU;}TpJ}F?7=xX0t=K1c`scs)H&yES(nWU2`AJ# zUXP0W-?C0@p2wA~=Er@UQBf}G#@eum4Ve>nC`6W0yDSJKB!U64&O&g^mgk8b?!qW3XN@*tb8FJ85yxV zqx+|CmXVgSfkBAUW9Ee1t1T0%NIpm+ST1pERc_Esm9E5whdq?ntNtyF;SZPJ_o8KQ@p64^0$4Q!_jX=vmX|F+N?lxfWY?ib&JC&-RK(Al!r!;=n$7zG&jy4 zO&TQ;U_Ohg4}tF@0VN<`RLM_zGet*3A04%u4rYnh41hMP~8lzfxq~YRP`{ z@b?bTrnaFiT7Y_p0Ig-nA20(4-M4W8sE}c=w*$l)8mUL5mw8b^P>aGfUQlZVP{peq zHqXvMHZmaaP!U;F8s|W$I!cuT`xDocn3Ubu_prE<#`2H|+ILfO^zWpLZ1kuLrc9pR zRL<=j80aTvlYFP3Lt~%uy+li6JFyG?w%iAvRp?Mr_oAbgQX!g*o)wKeWPtf7l%cfa zXp6ax3Ei=RSE$!PV#Rq=1dBXpysqRKWQTh|I>}cNgymg_WU;%blP2MAMRAV~mAszO z8Z5YbonVJx&&XxcTK9vce5&KUI`V$A#M&7iKMcsCP`B$ZvjevzkJy-F$@voBjQYty zvLDA31aG48(e4WbMEkOsCG^Mz`Z}ozwRe7f#bdJTlX;@ccpln!LmLLZC>()mc7X&= zD?v$7aA(3ky}=MPOSCyo8D1msa$|iORDU>-Fc1!gZ)zn;JX6f$?O-@~N4<0@CX3JE zJgjbdHApT#X`E0z8Tnl1)z_Zu93v8dt`A=?ilUJLJtpitD?K-}#tVk*_p%YsPT9BV zxfwoutiCH=1oFTQZLTr*i&fg8af)Vl-6aLSXc4w+O?RxCR-J($Q$)>kQ}Jr3MVO4J z&N#RH7T__%7_H6P98pMujehqJ4=Plh{HW4m?-_~CBK#jV`j|b-19t;F1?$U3yLpI7 zNWEL2a&h;J^;b~xK>@Fx4{O4>dldLsE#AG(hf!@@gc`6-7Z`y`?PScZ|J8t2okQy> zv(N=kM`_MxO+d{mr(I8gy%vmBGGzvsg-z0Fg#pKTUjy$1D9leKz71UC%?gNF^}@uo z!z&O~fo6cNYVKhm!E0P;D9gRAs4$SSH0b5~A>P`u$*Rw`CX!EqPl~A$o351 zWy`LchTfg3&0|7q1Yk%}DzIYlhJDqP!T6f+%u!xA&4bg{ z@`9I;!1e-O?^7o|r%FD_7J_ijs8#gTuNxTh0Mk!^KABCpLS+F$s6|da>}0!(^S-MjuN;C_I*XI39MAT`52%ibxCv9d)~-{Y=TNZz|L~@a$tCVSnV; zTq5BW%AHVn5P(%X7bC(rHTWH;Y6B+$T>{t~awirJ^sRhyj&2^B}*;-|Qi-6PkSsy7AHMbP(Z zLNfjb0Wq8eLYdOzDOuoNkNShw*qZ*r3$*Y3Bo9Q1Cpv}qfT^|0(Y{QcEZ%!&-e$?> z(L@W}MLY5rd!_=v*XE7J@x$4wW}T^R7>&eada})E$%aWs%P+ZVC|k=!+w?5f z3V)VfZN;gt&v^~fGl2+}Y114?!<9F}{Pbz@6ZYKFQFHj7a58t(3iJK*sv;2N!==FH z_PUk2+WtuqXs+2$z$P9@x->;kwiu`$L?fMl_E3+}mKd9_5_lU!`;u06Jz^c0nR#X- zOSt201%dR5W>@Hbn~D+jH8}kN5Oxu@&a!;~4|wyY!r^hBmB*PAS=Kk48A%nj@u_af zdGlFJ8{#)S&*1Bmck!GzIg=!rTNd0J$m*@LeHuEjH&PO{ZN6#=zM<$?t&A0iL^dWb zkI5crd;rp}KxrTuN6fuLF1&Ox5B=L|fsp@IVrMcDavz~tWyK<3t z>(TQO-lIhv9UKumOaQTU&;F-(08c_@+`G7-lgn8Er|LmgSMPcA8yxMZjOZER9FYmPNx<2jwueH z$Rtr|5c-wRyrIuQ!GnT^Fcfl?F-cIzT{+Ocb6r=g$;HPFD5l>zR{04rKfg}@QX2r> z2;^=(TGSZ{7WKIpUQt2wHt|DpB~B_R^Y<^rm+*A zU0mVqKHLyL1?EFdVF|dOnbnIhdYGpK-0aDoV9aiqv%+Vl*)9u+g#Wx6x&X%RCSgO> zi?Sc)W-1bo+Zg5B3eApbvE!Y|^K^AYiW%^=z?og>dS(tHS3It_j3fdWg+qo;q;+n8 zq#li)0!`&L6MQZzv}m+JN{r_~bcB-t;Qb@xJLRzRw9|(sFSSYG_f=86c~1pZ>%Wk??p=(TvaMgLOSTitzJf{fVnnoLfuVjhpjBsH7i2KQFli!&?#bd@yh5eZw-5Uesr9T>gL}#1E!zoBfU_-JshwHoK-guRurM@2_b$4}(lu(AN zQWY{3QE07_L3`>SMGqjX$1FhDXg8}=e*}anAHPE{y@4#=;Xo__>-Nf~V^{D%6yfcj zopYNQ_1wNdH%rcE#orpeyldKC1biie@C;DzUc7roh zRaHLTg{+O-nHD$JiD9_eDtyN@kx;Ym zD};w04bJ@%0Znk{4|b*&;QlZ%q3Izn1aicAbf^RwWQxLxJdDE%Ii_YTzC~1NZCa>| zvnp%4``86ZHLvP;O?ba*m;@7#Uy3F4FAd#w1_*1F1sjX)sn=Yc^22S5o#sZbILAU6 zxpIfxqntWC>fA^4qWHO8J8D4CL#w+^ElUKVQlfLeGtPdMFuV#H;$C_1Rm|=h5_#N$ z?>-v#{7<*UEM@>h5`PzVqgmqGG;QS*X=1RZqpY3hY&!sw4f7g|@>IAgjOjPak3iK1 zle!`{#EHKNJIlI0L6nnCcQ2>=N;CaJkILBNB|m&;G@^?uE>5w*D#g2la$Ttr=vY`k z0qO)6S+|Fw>F&!FmR_)j> z@l_9Fn+4kn;gcFrEE4&umwUfwNuih;7Ka^PctFAIZf9`Q#6XBYpE)E_zaLG#01+}6 z$KL=I4OFDc?&dryAq*LA(AO?B@UU(0sbw{ZFP<0vU9VGPo5rsfbpAdQy3u85S^-H$ z;9M<>#U^~!eGE|N@RYBcR1oDh=BFoJF9aC#RWe3MOReru5hqxH{GSayq?shL&AgB& zKD3Qj=&zJCAbbh*u&k<0dZ#io>6Y8OzT)H^?=%x{8yG_LtRJGAA8_*;H#O(@ zCeLG?B|~AsV|0fvPdoT6XzU&wtX8%RSf1K#bSC@rB&Ry#c*+i*+w6GxgyeZ`H5nHe;AV)n}0XWz1CA~A@#KLbw2=>B(roCV6dIHCb9tlA-DRJ6F zR_jmnGWmE;EIB$#Cuy=j)6F1$pl9s=rDc?g#l&wvp_!UPHIH$J;lOzU9g+7&qs{7n zLi}^@E)hQrM^uB#E#GI%I}HD;D9iZvrtq z{8c6)e~8W=r0C0mKxxj@hX(R_c$Wg|mkEFhDYecuH4Gx1oId$(jy7ZJ)y? z-znXxW(Y-v?Fk7`nJBwU|G0XhIITBAx_RlH(hsvp6x7e_KfA7?lgRNzEThikjD)U% zOUuIu2L!dYfO<}4zL6No&_~8?YRY>1#>fZSmNFkahL6b)`?nEdui7MjbhWyG!x{>E z4I`9z_d>&ULM0Q=>%UuwI4_NRUC(5a1NiL-zYV>9O z8Auv1&4=zxm+wY|9>R$@LaRlltW>Hm18&Plb!{nXpO%Q-`TABaUL%@>!7OGVM~tmr zAFJ0G>KZ{%QH_2-xCEa8=HRzbBp`+P1oj(~Tf_D?k-Lj`$?Np8vYh#-e7FAVJNV3u zmC4JU)ne-@3&;71L28e?CxO@}{q`nrCa?C{m#IG>*^d5{+5}LI-_b1FO@jr?ATH`? zq~-$Gd9%XaNY-h9fMDm3RSHY{HM-Z2WcoC23 zJ(;TQPk`*8_VY~KH3~kz4GxI>TAKa9sXBe%EUYB`$1*SIrTJ^jHSB!G0Y>v|tH61lbqk0j4Rg7$MM~|v?>TXW%exa^hz~>_i_X*S9+el) zP2`=YL)r28Bwqub<8{doHl)J;m9@m!~Z5BP^ zJ9M_3IKMMAh2<@(P7M?odf8vYXUX)7J4_Kx7_+fa*YENbdLklPvK^tbP|0*^=54N1 z^OQzb^93NKlAQaF0M{*teJ_GKZ>EfG7le#?lI#gC3K@KN=m5eSDV4`@d7<_GWP#vH z4xfrMzkoaaYawHkM!M6f)c6TtY6bCmArp;l75A51=6FL9-${JL{=E}(BCl;SJDI9# zQaLE+GwjK~ zl;HVXGv)Ti$o-jY*_-S~o8T*P97CI-aig-h)=~sXGgM2%X0G~IlW)eFGC(LA3}(1e z{{C7tLOw`5KfnXiX}mlBiSCVh5hnrAVx$Y{T)WZQKrK7kMoz3j_HIMl;oaRY0E=@k z<=&sds5(&k$%tI^1nwnOJC*A@D;4OGB3!GOsh4}a`+mH7;((NE<|#lsDOMGY)@#{( z$yUieYoDvlu~9iT63(C+d!tX9622scm}JY_smiuXxd(EqJ8mbf{i%{ri;A0sEZ2~m zUM=?k5e@2m`jSm2Yk@cmU|~H4Hy1s^xZwre@pMDASvG^`zmnLC@+J4GNCH-2J@>K=brBeFQx8gH+zQ<$>~YU~ z203UD2p2+b)-xHX7FH=~I*^-68jQ2hRsfBVj%Pg5r}O9eWI!>iUoySJC8upVMEJ5N zy@;q{)3bQ9h!Cb>Suot9()5M!rLM5du)r(fpv}A%UYl#*N9moxYu&+`k}8+93i?%b;t>P5B8(uP(8%7&^3Uz4u>H5yqr!c4@Y1 zBGjmCM}$9l({1+rLThi034pi#DXlx>5iY%b^G%>$A5_^hIrvvlkM>f-H!10*1 zfw&5eprwuD{*hZl45UKl^Il0@F-3ogvmd!;UQKK4$fv@TVX{hZm$OQ1y>eu=O2br| zHZkj_3V;k3R{V3v&in2WO^^V4`^KMjX_feL(s71Gu3$2oxNmSMg!~>^P%Rdjq$iSu zZ9KuC?j$GKW<*Bs*Ve)2OrL?5`ds0OlERIZ#s&{l^N-#&xlLqJ7plg6b zanAN9Kdg{FZpIL=Q`t`#b*-^SZTB1&mihontd{e;*h~Em1_>7)D075I5Fs?>b()or z97);kEvVDP_wOgYK*`#m1N2cPC3}vcBYw)6zvjKI)-;jaY|DEQ_``cC*$fR;!gomV z;|#@8%UP%DZ#s795VxO8lLc^{jB!uPfGxtD@e4$alUT#MveeHp07)3UCm>c1Zrs>^ zQm-Xm+Vhg*;5r;r0zO(Ngkz7 zO!k^c@&^vug@ot4Lf;JP=Q3GyAq_f?C2I@jO|3&%j$5%h>fBNnzr7Hp`SQ>k^U%em z4}UWn&)fP7(yV6JDfR#$5-!EZ=HE-FCw-b+xCtB)de>WJ=T!o(_~^_LQk(S^>-mVa%^UK8s_56u%(BNF0RM9|8G?c{OY1g z2S~kAw#vX&_picHFdGN%JSR9A#O3QNY2tmKmA5}O{3WC0UhD=f@N>}Mou8_a}KfV|sRs>;{V zNQ#YGc3ou*y#8ibY+3!=lXO6vxNK(wWSLuEJnANQPRNeMR6p-i{Z{l8nRtt3Z>F*!IVE(j&fVg$*%SmVr>@lFh zISKy?)*Ry$WyIE48HAL1&TjNG2|vH#M-3?KJN*MJmyr|7NSP$|ZE^ zFLJPT-uRqcW$sZ+=y1`?tyf}c5f)x?kWF4aN8n##dKW7XuQFAgBWnV?&XL2Timemr z0%#p)mEh|qQ{Es-Y(Rj?S1$#r8Zn2HABV}mP5%IO)fuFn%A4OSb#K`v#U}&FtX3mQ zmTo7O!iX|F*f8cMl^)epj+@FLfynLP5I8TmA=$zRs; zSo}2GNdid8)2-+`41iMX6U75k7h8Y{`N1`Ce-sGhPZ4*sr(A9>?mXCprk4o5b5Sql zjxTamE?3(R2g7y``~*CwXdJ){gWb|f>}5E=S1-u1336g~%4-abTDN9BeiPb6ceqLr zG>fmix$)R8vA*nA)&)E)=v1Cnpe2pdh+=GF4C7J{{Go(`s`4WE*2CVUSsOe+amt(t z#3@bVwtGOuV@+?}6XT^zs8*uf2)St;q}=d+mOH6;XbYgbkfK)wSZcpKTRdPea0?TO zGZ-kc*_H)f2C0;)abtO0DDDK+`2==j_U6l3mbnUsdFpnELx>lMXw(YDQ!fQ{9Dmq! zdJ;vi>0BbSG6f{qmtS@=*xgeVQYr5SpQN4jRnV`$`RV|a6Ak^FOThK!Y0913x(A_x zsk~F6@`XTQXm^CX0daK0SBUI7SyKketwbNH(8qZUvj~*g1Mz7~2Br)aDjb#3jM3G~ zxH7pd5H7vJL(HEi_=ANq_CXb-qDeB_5A3O@tro?fo=mpE>~v2*xW9dIWI^+ZL-mD^ zojD@)t<)1=NU0?Irc?rQn-KAvaNFR%?uAErE1EE)?*umCS&?@)AgYtOvk_|DqlQ@S z8DmE*Bo>VI&2K@YX;l?ZbZdnU(mro&q=E<>_8-Qs7R^F0HbuQoeWV z4K9d@@CIB*juuS6TPgv5urpb`dk^ftF7u(SLPa}6RSL9s+zx5m7@TpKRLLRNXhRy8Ad;*H^70tn)H=!v&qQp>>*)q ztd{fuuWAmr!^9;E*AvZF40}Cu{O#A&CfV>7jP-1=k~!^Kn&75Q(zH!}g}J;`Cpbw| zzc$`09Tcs@@xOUQ4e&GrC?nMil$*-T=XU_^U_$Iw!<%aWFve-(f~o<+V_}8qd*Q9xX!!A^96Z;d z54`rg`;s3OsL^=V*9P+RhJA5;44VL@38`8gg;NCJLi+E!nJTUPN+xXdsFVeWM*(F8JEf?q$Lqrr1zgv9Y$wqipxZnWz(8aC+6K@!L+HpP2g_65h;-!?+=;^B`yw7s5i6BQT0Fy5PlRMs??l7B<6dDU&d)*U74~+Q;_&$GSfk zd?8pX+-^>~P}sI4%fA%%aSkcKI~&IMP6J}Vyjue}Yi#P!fvkctXt1NryOW0`J&!s; z+R$A`IE!8y$Tpw($imw64YS{>w=)uWQ#oHsUDv+1YFpiU!>6J#w55E|4m_z$DrDM8 zoT|FLV%u`6(<0mK@!NG~QkKTcyJoHS8;5BzC*eRoNF*B&)Ctln#l2a{41L_Uika9a`aHyDHi7U6uEa;Zc*+ z5@owO<1%j6GkA-%Y8t?GtnXaVkLt*h+i(jxDp6l#0AQ=;V{(sfKjr=!H=Zk_w_;6c zAA2@qma|8Wu|H4E=5jL`y#G{0ox&t z`FqloMmc}rjg)R4eqNke>77uuSh=%(Ug`Jq>(7s^h_@K(_loLj7CS&K>f-mqXNnHQ z9FX2|n0H?sy~;;}6}Sw2!YI1Y(Z`VnJ59TrKaR98Qr(}7u?hQH!uMZ{s`RCvO5ms{`Yz+@YevEdD zs!A(heDn_KiR&NCg@WpoGIpw4K!RTAZpD)g=l)<$jUHogT8L?zeLBIILcrR2 z3xwStH6((Bfc9d25%Wh6?Ek~lx7%X4Nr8{{dc)hx+Jt=YaF(ZAzF=^&Y=TE-!4em9l(Q_Qeav z-x*a!BHkY2H1IpsYI^etpCogR!ts%{pwzUxb6@=qAMZO{$?$}OzC`o%C4z+<1mdD$ z@^aAFDk>r5id4Ww^f9KsTnx#$a|}O#e{EheZDdj7ib+Nj9oJ9}5pp;ASVgkmiv3u{ zz0%cQ>2C*I>3$PI2eK|{jr}4_*&CW|!X(Eit33)Tz;tM(vZ9fDt z8I%+W;tag<6x;+vf{Gzfzw)x`<{Yv3a!rYxIzL0yGYBSNb0C99s%?4D({XWzAnX03 z0z`Eq2MGBw@Aw3uitkV=m(a_e32<9{d4V!nKq3bzzdW#h@sbd!&z>&5yin! z5~q%4QSh4y%YKW)Kb5 z-oPJ6?SYQzvF$@UYb?JYb>h1=$880ivD0;tIe~g2PNo9rF$MZ1G$^n{Q5~ z*zS5Df*EvRYcQRSQEs+b`7jfYw9-MMeO!VO(%*4T(iG=~9+#fu%EogW;Tw;y13ySAE=2s`QMmL_*iY$g@roBu`EGO_Kzrk87{0 zJfpD~%K1{wp?eQom-#;oyg=ipa-d62V|iRzZ`#eMjBO? zx2Pw=j;pnEm$r|=%rbIX33AU`zCl)+5}r`;G}L4I`fRfYd$u72w` zA?}(~9*;FcF6HkyVyB1yr`u^WE=h=KoX6TNOh1Y@tv#4FoRuHt@eRhpJ%MtYg%@I> zSpy}vtzxCnKA$%!vJka&EUX{m-v3RhS@C>^V%pa?uGf;5sHtb6E2_xSR#;v$3z75j zCfY5O-`4^;`<9qcGd8u(Q51K>rf2j82)Py|oR;LMsW8fer6ZyL1 zd+L+bgtn;}g4eBB{xI0$3Dhi(dcZdvg$V1ZgDIfPnls=D&hsq2u?Yy=lBIQqgwOq` z)L`+%m&UVQs?wI`B^M>qs7!lBN>R(r78$d!^w|`2Ga6I&5@Vm?DY=~miq$G`rA|#= zWDj6VCH%H=FcxNWu-U07pWy3UP2{U!VZ`)fv(I;9F-hqm@5>$@!cTWjrrvVKY#LcZ z37UGRu3#1Ld9%yZB@gA$Sx7qy(K2W^79-h`TDqUc%S0=i|TVFn;D)@PC>D?R+JnJ*9@YBV*7;p5!u@4zGxwd}m+AXowJq zoJ^9Yd{dD6V0tqI3+bd4;T;y8h;!=j$s-n|SdM@nz+$aHT9DA3>)&8QvU8eMl$Bky zw8BvB5xDsI-r`=@v(sHXF8kB^d8~#C-TR1Et~w*V%8dZVXRtn@;}SEw&eSwx@Sxl4!LepBZODxm z>$2gZ4!O#lf*DcPO-Vk?gu72$PEh(@v?x}nH2ZR0LMd|~S!Uq_wtnkJFs1ESuug0O zACKci;xeXVoHtXP6T~GD^$g@9GrX;FTL(94@kL#bmS5~R{XQI6t+IPndGbgDDS7K8 zX6O8xxJJu4HY?DhqliB>H@8x&NK7hMr=1zfeh_HeGBdNZP~%N}W8WT~W;5pDmu{cl z(Yt>`9-l)QCy@L_to%*d&is?h^SyR)3auim9eAr#TKLF=KF@M&e_^H?s zxu&+Hy|}SFkrZKMdXsm-+Pk>B++wI)^KnWa(lW{_0he^Ddsp+FL^tvsvgZ^2=RGMs zB;LiV*Ht?F1gBw1auaJb!%Z_el(D=i5|-hzTAQqZXd|X#12>3pbb_U3Pn9-X8oVq& zMOjV0LJb{{kf)edIv)W(K^+TX!_R(|rGDL0V3mIitRK!mt4_dwB*G+D4>M5cW1ScJ`wVBo3(%oVWyGXuHlF~g_Egqp@oU*iIahMNtTi!9rM=Fz z<#Q%w@9K{`?6Q!2=u;J$df&qH3a~9}PXJpi^0`QeNm-mgn z+VMGLJ5KMH5mrmjYakgZLXW=RZdB2wTX}Z)Cl2%jd)w>`RR`9f*b8pkxqL z-_YnN-1+mHbgMA}SeN-SPxt*I2dvPOzzU5eX=MLtg>r%IW@{_**DrFwsx<&str$A$ z>YrAvBseyIAg_NJqJWV(63dW`ZlIRl#}!1PXA1_OV>{M z^jzO8!dnl2+vARjrQ0~>a66tqn6sq^S#W7^{Fzkrk3h%&^aRp2m!^7m2MUG;2@VB( zTvl&rtT`iCcaB5!?lBt>;>#?g61Zb0!|r|Tf-wj48K2r4CT{gUFt#pwYfK z(O>=kJCOgb85#DSJsu&U^HZ#V97zr<%WyLP6aXM;hw>TUE=9Uq0VyeI=|(990g>(o>Fzr3_WOS4pZlEW z-sk>vwj$fjX0Ns0m~+fA#$1sqO0pQJq^J-G1Vdgd`0X? zyOOtEvg%h|A=0~s?|I_Ak!$#cxw*(oPfPBEi{L!mqJ{&uxQ;)Zio0hr1$wNGheV+_ zmu4YYz8Hi|tt@&ypL66Bu-GrFrlo}# z-3uGt`=&T2aMqIhy|~oh2b{6GI^IFRv5UM>09T-ZE$=!*GD^@@H`QI7xGktwR^v#W|8RFbbHF5#UkM-{3G8*6ijKGO?5St++zJ(QG(N zpjxlOL6n7~N?cmHS$UI;q%=&AVy0>fkC-^3tBbn-Y#*EgA?p>@_gER)Pim2Ku?l~$ zWZW>l0P;CMpFA@11r9#``ouOVy6^hNhQOQDs?D)qzk=`X&_pxihb-S2RfTJnNlQw; zF>iXs00;TrD<|yz_k65PkWo?J3|XG*iKoiZAtNL2rCv9oy;=OIY+^!HOYD)DV;3pX8hFFXr004V}`AX6D$>z`Z83Jw$uCA`+E1a~n1&R~uh*E!7&W@X&r;@poA95F0xtR7d1Tb-To@E}C z{La5vU`8o%HJMXs>1K;F6BAb&_MiMa3ge`xa6m+eQhkXAohmUWan2@l1ZbO8R zFJ7V5ZCQK%!{e}m+BQeqPo%J~->YIjFMFH_O%H??$S>=BZ_i)BreYuW`}v^DvN=5| z>5bdga6xV^gdzC{%NWo5SKmiQWCH_5)zsC6Fd~vJqBvUf3T!ayuCG23({XTMf!|`a z$b*q)Pp74!f%Wn6iHM9`L3{${#8%eXnKSUB)-EA4GkR~2JY$FlS) z*K(|Jlx**mip}Mqt9OTvE{=>3GnlF7L7=GN7T?Vk~A>5v(Qa6zFYOQ<{AC|^QZgm^=?%sW-J3~PS8Vh{}?%+ zqwr*v@zR#pDo75f;B}|=`ro@_N-s&nMEov%g*%2UU#P1mYj3vuT~e0oHx3_PHZBE5 zS9R#cv*|aOO;s*jJ=`81uf>by=Yjc?mS$pOlXh^ZnDQOikuxw5W@h2|YQovHfGAUd zLm1t=HE3F+ldJMwRYRl4_!)G|?Fhkefd%lg@Z^iwh=|qKYGVR@whaUQAX`k5nd>^j%k%xHS)H$%Jia zXs9?t^0mK+=4WiC)B#Tg95`6m+^I{Y(vLYgV$96Uqtnyhjd`F)Z@GgRHQ~%Hkqd8X zdXny8;n;D_@Y=#+r7HxEy?ZGr=y@21!pV=ff*g$>K9G|0J7bTCT(Snu3JmVHn=`=TjnjY2YYK z%)jfON~g%t5es{B?(FRNS!C)|Xvr0-rKD8HvP1XJc}TF1iVCDq4W(W$Kv$bVK!C(+ z-X&b&shPAiJ;=Z>gin7yb9mFeGeKoCS*}Yg$b+J7_?(cV;|jN2t8C6@YGT6l=4|)4 z3l59FZ*=$Ed#AM6c|y~i%lC|!RsRAW9CX&OV|df6mw>j$cET@1 zVAK#05FB9h^(tgcOoHc_OFDAZ-sOJ!)MGc{_cwyW)ad`TeC94lkza5t!x05A4ZKno z|B7{VlkEiar@}(hft05Xec8f3xDR(*Q_g>WT|$TX=qnPHNq-!LKk|3)-c2_+uw3lVg=b}vx19{I?6d1zo!08G@&`Q#fAl*LAQ$$ABr_`a zIR)KXx8@N*pg@JpF$1PlBMN*AahNlJ%Lj0$vlDl&!J)TEaY>v#eQi?T$s@F7Sk$Sa zz~f=BR{3~6S$Vl-mm&YtCt`Z~-iYYv)18OsnQWY-vDWtXQUH1Vv~+7MdKUEHZ{Rlc zoZtV7Qxpu4|HJhb^m%3TCh5-{v8AD;w7{U85~gFiI^VLSfz? z*ZcmNm0@4aOt95QAH?S7t)uuL|J6Tv^>ualnY<3)?5f(srl)nJWMoWMz6n*E_YZrf z4<%m@eMpVlt;~!7D}q(84jW`b6)mkzPha15O23P}UJSl@2&Cz_k1R1Y6(L(`i+izt z$|$;|geiuY3${$FJ-V-t!T3OTuyj$5y{$!LA^RQ*Nl3lSoaK4dUI^|{IFKeEo%ge)hwRRBp zQ&R9RUvBY3gC7s)`ISI~UIpRkC|APZMu25u;A!U4vXxjX;pKvtnB~tV%C){&523~0 zXrklIOcv+$?>H&x=>-i9gvku|^A=e#G1=2?K4=f;RYA?6%OKo9APh=v!(8PBNutVI zQ)=$+b+j7IwLy=88Lt>V6&2-|m!pFmufl{sU1N@P(D@kHxTIRDLHx|py>&uP=%!6* zcV16P3DdFFp`(DpR9qY~S$<6%85v0#@EFA+V{-OqG++xpX%L5k0xCk5*k{+wUr`V;@DV#Cf&$|pcg3BPKfOxNb!o{8PA6j(R#I&l@;&RNXDZXs~ppf zfyVhb^BNuJ(;+ubuLA@Bv(a#svI+0?MB_#hr`b9iuw{j{D)ipjRo%ZYpfFca!KTAS zadmSO_B|*lKHZISm}~fI&$~8j$Jm0t^u@xi6{g0*dwXZg(9p^Y8f3Gw_C#H>>dLiH zAs_@J2D7Kr*z%|{F);-z6~B1(D&|?GJY7U=EJy?htc1}ce%kdj_9~^4V4)z!%B-nc ziTu3+BeV#R<3W@VW)~@+=N~ROc4TrW-rTMDDAs4X{hMB=#a+HNCr31Z)WX8T`(|5= z|65$^u1!!-P}}3fZN_suLeZN)w8BSSaFF28Q26h!xnEmant=tM%^qKTdYba%wWLg6 zqxV*Jqf0-97k^mL^@g_hUQNG>s%qr-?-9I9Wo2dErRriU9k&N=LWW*Bb3%8=ud@r) zNX~p;QyUC6$$ZEgri^ zhe411`%R^#PrX4UakLuEu`*t&4w2IQ*?QQ4)_J?2KHU)@1n@yZc6RLEUKZuZ2p)*C z6lcC7zsJT5!$v-&Vm2GZWea6zFJ?kMPxbw) zus?sSGhP)L*^pV+>*cAHs_1wpb~^sOJU^J4rY7QlP|)p0RDVy;ax9-w|3IqKTFY)= z+>3BbQvmY!`3z@ea+!XEf0Yv`Lg|0>RrGfHUGYcX0f(n6ch{%K#KjH(A2k`ugEuY)!v~mKlEb z0wtk_mey)dB%Vqc(&fMx05IVZ5viX)PZbJ-9!!|qY0+VUMPl3*jng{ev%*S(b*_4; zBzTUhSFuaWu~!)JypD%i{n%E+%G3d1@}x)ppeMeLXM4r2-iBwXe;aP&NDDD z0I-(lIIZB9(Odw>ENg!Nz*P&rN5Uljy{=D#?HQXJ8xo}&G{VAdgU{@4yjx}09M%H! z0-1${$w5j6`;z#%ZHjplDE>iW_V9TA^5skaSzdLTL;$Luu(QVrg+f2dp9p&7s3>?6r%mzT1VlCa~p^&<)wpVXeh!ogj${w?)R z48>X5*~8RIL-i^)(`aqO!LdwNr16P}XrDg)!8N}~s9LDzLJPf0)tq$~GO5}b^a`!$ zuWymu%5Xf)j+VcIDuy$2Xr36lAbF}`^JnZqVaE#*FNj>#qTLC-7ydCk4C*8>!});) ziUeaZF-{9{B`V*!+^zEm;U*(XvhftyhttuBPE<8Mt^KVv@yHnYDS-JEyG4x)Jx83;uAYBOeW`y60V%2V z9!jelNb-+R0O9|*3xZ_fhz-t$=Hzomh7QOZ;(030=Gbs%#_8$lNN>LeU!QJukBsDy z{T<%6qK*zq5MjYJVSx*V|2*jpj?=A%IelhNcQEYFNmt_uPe3-%P=31Tk2}&=4+C z3N}&-?0W_f`>pG7;gOJ@0GMoQYAT9iiyH|KO6QXDaw!iF0+1#l;sB)nK{w1EM6QgZT>L^%^4(!8;4XhcRD9UYZZR5TUeV6ksc}#WsDHgLwgR0oUXtX#{R+FX)ltr-Nq;*Frzk_cF;&mT#s-u$a=E*50Y%H+Of3>=Y}n&l14IlA zjH{ipDit-gH_OW=^L~fz$e5THH~w*yB2i$~t)+L~(enx7;M{9p-|SZT(NoWMtIErx ze5rLasn?^(c|T+cz&Z8Przl`A0}#|7pCfK-i<)0h(2k3%uT%gSA|ejLuOlN^h;P5v zuqrC5=~VE7U1$D1L8qs;xBl8ud8=w{+xfzt_xEpTR6F7&F<<|lSW;2Zd$|-8f7o%0 ziN~mPrfZtIFq|z^<7S2Ud&~;N_;x3xp2?M?m2j$^`echEljmUG0&sET$pzkk359_$ zylNsi&R1zZ{%-g6{$M7WN-69womm~aACgBBzvfWj!0mdt9JUQOvY zI4(qi*=#~5<8vf;Y(LjBa=`|{$Lr?I1|U@aMQ|y^!| z$7}uO<0Y!#{{Y=1V`25@O1yPGnD+ru-t1SdgwcC32tGc3KFFB7nHY#~Vbn_TA0F~A zgOY!&6BmsUbX&p!_N7hjjSYu@upckkSdpR|yzy;=H3^+2GlAvMhj(BcmI1aT77J{P zhcgRXGd6~os_NDETB+va7%xEh$P*^#ZN=n;k&AWyBTL689m;|fn`Km8ss%F5 z6k1wZVOu#tlwb`(pb%uH){2&i2^mD3gqMZhoA0fTKrPtnzcgl=ejDC-?tAu}ML!wQV}#lb@K&Wpm+ssdR6vH`u=?uvm4dH(!4)6=IRy=EaZ_F-VxOG)uV z3CWBM5Cok;{r`*C=c?j$z=_jf?^*zR;_d#Cv87yPVqfA0*EQ# zgO0a5t4UWVinjT;P!z|0-BwSw;hd4(`tx!J zdvVEynOT&0V<+bY`H$R{Qy

=g?@r930S1Kkyi}rnL?VW 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

?rxCE6Fz)E1;`hG2J8A+-YFljAOr*ihy~r5 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 From a6a290607f2b5abfd421a801cc11d83a47870dc7 Mon Sep 17 00:00:00 2001 From: Pascal Vizeli Date: Mon, 18 Sep 2017 21:37:31 +0200 Subject: [PATCH 40/49] Update Hass.io image version --- source/hassio/installation.markdown | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/source/hassio/installation.markdown b/source/hassio/installation.markdown index eb93eb47334..83a8dee27ec 100644 --- a/source/hassio/installation.markdown +++ b/source/hassio/installation.markdown @@ -37,10 +37,10 @@ For advanced users, it is also possible to try Hass.io on your Linux server or i [Etcher]: https://etcher.io/ [resinos-network]: https://docs.resin.io/deployment/network/2.0.0/ -[pi1]: https://github.com/home-assistant/hassio-build/releases/download/1.0/resinos-hassio-1.0-raspberrypi.img.bz2 -[pi2]: https://github.com/home-assistant/hassio-build/releases/download/1.0/resinos-hassio-1.0-raspberrypi2.img.bz2 -[pi3]: https://github.com/home-assistant/hassio-build/releases/download/1.0/resinos-hassio-1.0-raspberrypi3.img.bz2 -[nuc]: https://github.com/home-assistant/hassio-build/releases/download/1.0/resinos-hassio-1.0-intel-nuc.img.bz2 +[pi1]: https://github.com/home-assistant/hassio-build/releases/download/1.1/resinos-hassio-1.1-raspberrypi.img.bz2 +[pi2]: https://github.com/home-assistant/hassio-build/releases/download/1.1/resinos-hassio-1.1-raspberrypi2.img.bz2 +[pi3]: https://github.com/home-assistant/hassio-build/releases/download/1.1/resinos-hassio-1.1-raspberrypi3.img.bz2 +[nuc]: https://github.com/home-assistant/hassio-build/releases/download/1.1/resinos-hassio-1.1-intel-nuc.img.bz2 [linux]: https://github.com/home-assistant/hassio-build/tree/master/install#install-hassio [local]: http://hassio.local:8123 [samba]: /addons/samba/ From 290ce7eb3e94b9f949a6d59fd2c0e1458e27fff4 Mon Sep 17 00:00:00 2001 From: John Date: Tue, 19 Sep 2017 07:47:08 +1200 Subject: [PATCH 41/49] Update tls_self_signed_certificate.markdown (#3400) * Update tls_self_signed_certificate.markdown corrected typo and made file names match * Replace HASS with Home Assistant --- .../tls_self_signed_certificate.markdown | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/source/_docs/ecosystem/certificates/tls_self_signed_certificate.markdown b/source/_docs/ecosystem/certificates/tls_self_signed_certificate.markdown index 0c74f7494ed..53736e06937 100644 --- a/source/_docs/ecosystem/certificates/tls_self_signed_certificate.markdown +++ b/source/_docs/ecosystem/certificates/tls_self_signed_certificate.markdown @@ -10,9 +10,11 @@ footer: true redirect_from: /cookbook/tls_self_signed_certificate/ --- -If your Home Assistant instance is only accessible from your local network you can still protect the communication between your browsers and the frontend with SSL/TLS. [Let's encrypt]({{site_root}}/blog/2015/12/13/setup-encryption-using-lets-encrypt/) will only work if you have a DNS entry and remote access is allowed. The solution is to use a self-signed certificate. As you most likely don't have a certification authority (CA) your browser will conplain about the security. If you have a CA then this will not be an issue. +If your Home Assistant instance is only accessible from your local network you can still protect the communication between your browsers and the frontend with SSL/TLS. +[Let's encrypt]({{site_root}}/blog/2015/12/13/setup-encryption-using-lets-encrypt/) will only work if you have a DNS entry and remote access is allowed. +The solution is to use a self-signed certificate. As you most likely don't have a certification authority (CA) your browser will conplain about the security. If you have a CA then this will not be an issue. -To create locally a certificate you need the [OpenSSL](https://www.openssl.org/) command-line tool. +To create a certificate locally, you need the [OpenSSL](https://www.openssl.org/) command-line tool. Change to your Home Assistant [configuration directory](/getting-started/configuration/) like `~/.homeassistant`. This will make it easier to backup your certificate and the key. Run the command shown below. @@ -20,15 +22,17 @@ The certificate **must** be `.pem` extension. If you are going to use this certificate with the iOS app, you need to ensure you complete **all** fields during the cetificate creation process, then: -* Send **only** `certificate.pem` file to the iOS device using airdrop or other transfer method. +* Send **only** the `certificate.pem` file to the iOS device, using airdrop or other transfer method. * Open the `.pem` file on the iOS device, follow the prompts to trust and install it. -* If you are using iOS 10.3 or newer then [additioal steps](https://support.apple.com/en-us/HT204477) are needed. +* If you are using iOS 10.3 or newer then [additional steps](https://support.apple.com/en-us/HT204477) are needed. ```bash -$ openssl req -sha256 -newkey rsa:4096 -nodes -keyout key.pem -x509 -days 730 -out certificate.pem +$ openssl req -sha256 -newkey rsa:4096 -nodes -keyout privkey.pem -x509 -days 730 -out certificate.pem ``` -For details about the parameters, please check the OpenSSL documentation. Provide the requested information during the generation process. At the end you will have two files called `privkey.pem` and `certificate.pem`. The key and the certificate. +For details about the parameters, please check the OpenSSL documentation. Provide the requested information during the generation process. + +At the end you will have two files called `privkey.pem` and `certificate.pem`. The key and the certificate. Update the `http:` entry in your `configuration.yaml` file and let it point to your created files. @@ -39,4 +43,6 @@ http: ssl_key: /home/your_user/.homeassistant/privkey.pem ``` +A restart of Home Assistant is required for the changes to take effect. + A tutorial "[Working with SSL Certificates, Private Keys and CSRs](https://www.digitalocean.com/community/tutorials/openssl-essentials-working-with-ssl-certificates-private-keys-and-csrs)" could give you some insight about special cases. From 35ee7687b655ec21ab38a8a8303643712a748c65 Mon Sep 17 00:00:00 2001 From: arretx <32052562+arretx@users.noreply.github.com> Date: Mon, 18 Sep 2017 12:48:40 -0700 Subject: [PATCH 42/49] Spelling correction... (#3399) Line 78 read that is, is... --- source/_components/alert.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/alert.markdown b/source/_components/alert.markdown index 2f3f58d5184..8967a134e5f 100644 --- a/source/_components/alert.markdown +++ b/source/_components/alert.markdown @@ -75,7 +75,7 @@ freshwater_temp_alert: ### {% linkable_title Complex Alert Criteria %} -By design, the `alert` component only handles very simple criteria for firing. That is, is only checks if a single entity's state is equal to a value. At some point, it may be desireable to have an alert with a more complex criteria. Possibly, when a battery percentage falls below a threshold. Maybe you want to disable the alert on certain days. Maybe the alert firing should depend on more than one input. For all of these situations, it is best to use the alert in conjunction with a `Template Binary Sensor`. The following example does that. +By design, the `alert` component only handles very simple criteria for firing. That is, it only checks if a single entity's state is equal to a value. At some point, it may be desireable to have an alert with a more complex criteria. Possibly, when a battery percentage falls below a threshold. Maybe you want to disable the alert on certain days. Maybe the alert firing should depend on more than one input. For all of these situations, it is best to use the alert in conjunction with a `Template Binary Sensor`. The following example does that. ```yaml binary_sensor: From 1182175fb83e3a68507cac51555722ebdf338699 Mon Sep 17 00:00:00 2001 From: DubhAd Date: Mon, 18 Sep 2017 20:57:55 +0100 Subject: [PATCH 43/49] Update for current URLs and service names (#3401) Minor changes * The service is now primarily named Webhooks, with the Maker name largely removed * Some URLs and links have moved * The API key format is now different --- source/_components/ifttt.markdown | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/source/_components/ifttt.markdown b/source/_components/ifttt.markdown index 8a40d9b1ace..fc330b5f799 100644 --- a/source/_components/ifttt.markdown +++ b/source/_components/ifttt.markdown @@ -13,15 +13,15 @@ featured: true ha_iot_class: "Cloud Push" --- -[IFTTT](https://ifttt.com) is a web service that allows users to create chains of simple conditional statements, so called "Applets". With the IFTTT component you can trigger applets through the **"Maker"** channel. See the [announcement blog post](/blog/2015/09/13/home-assistant-meets-ifttt/) for examples how to use it. +[IFTTT](https://ifttt.com) is a web service that allows users to create chains of simple conditional statements, so called "Applets". With the IFTTT component you can trigger applets through the **"Webhooks"** service (which was previously the **"Maker"** channel). See the [announcement blog post](/blog/2015/09/13/home-assistant-meets-ifttt/) for examples how to use it. ```yaml # Example configuration.yaml entry ifttt: - key: xxxxx-x-xxxxxxxxxxxxx + key: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ``` -`key` is your API key which can be obtained by viewing the **Settings** of the [Maker Channel](https://ifttt.com/services/maker_webhooks/settings). It's the last part of the URL (e.g. https://maker.ifttt.com/use/MYAPIKEY) you will find under **Settings** > **Account Info**. +`key` is your API key which can be obtained by viewing the **Settings** of the [Webhooks applet](https://ifttt.com/services/maker_webhooks/settings). It's the last part of the URL (e.g. https://maker.ifttt.com/use/MYAPIKEY) you will find under **My Applets** > **Webhooks** > **Settings**.

@@ -37,7 +37,7 @@ After restarting the server, be sure to watch the console for any logging errors ### {% linkable_title Testing your trigger %} -You can use the **Developer tools** to test your [Maker Channel](https://ifttt.com/maker) trigger. To do this, open the Home Assistant frontend, open the sidebar, click on the first icon in the developer tools. This should get you to the **Call Service** screen. Fill in the following values: +You can use the **Developer tools** to test your [Webhooks](https://ifttt.com/maker_webhooks) trigger. To do this, open the Home Assistant frontend, open the sidebar, click on the first icon in the developer tools. This should get you to the **Call Service** screen. Fill in the following values: Field | Value ----- | ----- From 02b3bcaadf5c03820d95341caaef5a9607b29ae9 Mon Sep 17 00:00:00 2001 From: Pascal Vizeli Date: Mon, 18 Sep 2017 22:02:25 +0200 Subject: [PATCH 44/49] remove delay option --- source/_components/homematic.markdown | 2 -- 1 file changed, 2 deletions(-) diff --git a/source/_components/homematic.markdown b/source/_components/homematic.markdown index 02de009442a..2f6a245d90e 100644 --- a/source/_components/homematic.markdown +++ b/source/_components/homematic.markdown @@ -37,7 +37,6 @@ Configuration variables (global): - **hosts** (*Required*): Configuration for each host to integrate into Home Assistant. - **local_ip** (*Optional*): IP of device running Home Assistant. Override autodetected value for exotic network setups. - **local_port** (*Optional*): Port for connection with Home Assistant. By default it is randomly assigned. -- **delay** (*Optional*): [Float] Delay fetching of current state per device on startup. Used to prevent overloading of the CCU. Defaults to 0.5. Configuration variables (host): @@ -55,7 +54,6 @@ Configuration variables (host): ```yaml homematic: - delay: 1.0 hosts: rf: ip: 127.0.0.1 From 0e77613fd336add211c4d77eceb226f3d115ddef Mon Sep 17 00:00:00 2001 From: Brian Fitzgerald Date: Tue, 19 Sep 2017 16:34:08 +0200 Subject: [PATCH 45/49] Additional example (#3395) * Additional example Using the sensor as a trigger. The syntax for this took me ages to work out, be great to save someone else the hours. * Marking template lines with raw tags Following @fabaff advice to avoid render of the template, using {% raw %}{{your_template}}{% endraw %}. * fixing endraw tag * Fixing? spacing issue --- source/_components/sensor.speedtest.markdown | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/source/_components/sensor.speedtest.markdown b/source/_components/sensor.speedtest.markdown index 7fd0ec202a7..d9c25821a8a 100644 --- a/source/_components/sensor.speedtest.markdown +++ b/source/_components/sensor.speedtest.markdown @@ -90,6 +90,25 @@ sensor: - upload ``` +### {% linkable_title Using as a trigger in an automation %} + +```yaml +# Example configuration.yaml entry +automation: + - alias: 'Internet Speed Glow Connect Great' + trigger: + platform: template + value_template: '{% raw %}{{ states.sensor.speedtest_download.state|float > 10}}{% endraw %}' + action: + service: shell_command.green + - alias: 'Internet Speed Glow Connect Poor' + trigger: + platform: template + value_template: '{% raw %}{{ states.sensor.speedtest_download.state| float < 10 }}{% endraw %}' + action: + service: shell_command.red +``` + ## {% linkable_title Notes %} - When running on Raspberry Pi, just note that the maximum speed is limited by its 100 Mbit/s LAN adapter. From b54cc0ae0ea8011832081d52b1ebe0d3f7b05e25 Mon Sep 17 00:00:00 2001 From: Robin Date: Tue, 19 Sep 2017 15:38:58 +0100 Subject: [PATCH 46/49] Correct 'with' to 'without' (#3387) The final statement reads states that 'The `load_platform` method allows the platforms to be loaded with the need for any additional platform entries in your `configuration.yaml` file' but it appears the 'with' should be 'without'.. --- source/developers/component_generic_discovery.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/developers/component_generic_discovery.markdown b/source/developers/component_generic_discovery.markdown index 1791b756a00..8eacc22ff4a 100644 --- a/source/developers/component_generic_discovery.markdown +++ b/source/developers/component_generic_discovery.markdown @@ -67,7 +67,7 @@ def setup_platform(hass, config, add_devices, discovery_info=None): ``` -The `load_platform` method allows the platforms to be loaded with the need for any additional platform entries in your `configuration.yaml` file, which normally would have been: +The `load_platform` method allows the platforms to be loaded without the need for any additional platform entries in your `configuration.yaml` file, which normally would have been: ```yaml #light: From 622fd9098a4980a0767a1b16b606c86422449683 Mon Sep 17 00:00:00 2001 From: Patrick Easters Date: Tue, 19 Sep 2017 12:37:31 -0400 Subject: [PATCH 47/49] Clarify docs of season sensor (#3402) Just adding clearer documentation around the configuration variables for the season sensor. Brings this more inline with other component documentation. --- source/_components/sensor.season.markdown | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/source/_components/sensor.season.markdown b/source/_components/sensor.season.markdown index a2d21e35235..da386ca5015 100644 --- a/source/_components/sensor.season.markdown +++ b/source/_components/sensor.season.markdown @@ -25,5 +25,9 @@ All information about how the seasons work was taken from Wikipedia: # Example configuration.yaml entry sensor: - platform: season - type: astronomical (optional, will default to astronomical) + type: astronomical ``` + +Configuration variables: + +- **type** (*Optional*): Type of season definition. Options are `meteorological` or `astronomical`. Default is `astronomical`. From 547382bb545e3d1eb626b3dfc94b7529e51b34a5 Mon Sep 17 00:00:00 2001 From: Nico Date: Wed, 20 Sep 2017 19:07:02 +0200 Subject: [PATCH 48/49] Correct typo (#3410) As in the table below play_media is correct. --- source/_components/media_player.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/media_player.markdown b/source/_components/media_player.markdown index daa7b072c55..90fe9a22423 100644 --- a/source/_components/media_player.markdown +++ b/source/_components/media_player.markdown @@ -14,7 +14,7 @@ Interacts with media players on your network. Please check the sidebar for a ful ## {% linkable_title Services %} ### {% linkable_title Media control services %} -Available services: `turn_on`, `turn_off`, `toggle`, `volume_up`, `volume_down`, `media_play_pause`, `media_play`, `media_pause`, `media_stop`, `media_next_track`, `media_previous_track`, `clear_playlist` +Available services: `turn_on`, `turn_off`, `toggle`, `volume_up`, `volume_down`, `media_play_pause`, `play_media`, `media_pause`, `media_stop`, `media_next_track`, `media_previous_track`, `clear_playlist` | Service data attribute | Optional | Description | | ---------------------- | -------- | ------------------------------------------------ | From 3f4a820ec20667e8ce00c7b6458382a75ca45868 Mon Sep 17 00:00:00 2001 From: Thomas Redmer Date: Thu, 21 Sep 2017 16:39:12 +0200 Subject: [PATCH 49/49] Simple typo correction (#3412) --- source/_docs/installation/raspberry-pi.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_docs/installation/raspberry-pi.markdown b/source/_docs/installation/raspberry-pi.markdown index bb899d6c377..713cde495cc 100644 --- a/source/_docs/installation/raspberry-pi.markdown +++ b/source/_docs/installation/raspberry-pi.markdown @@ -67,7 +67,7 @@ Once you have activated the virtual environment you will notice the prompt chang (homeassistant) homeassistant@raspberrypi:/srv/homeassistant $ pip3 install homeassistant ``` -Start Home Assistant for the first time. This will complete the installation, create the `.homeasssistant` configuration directory in the `/home/homeassistant` directory and install any basic dependencies. +Start Home Assistant for the first time. This will complete the installation, create the `.homeassistant` configuration directory in the `/home/homeassistant` directory and install any basic dependencies. ```bash (homeassistant) $ hass