From 286d1564392a58a42461cd3c640046d60df861b1 Mon Sep 17 00:00:00 2001 From: Taylor Vierrether Date: Tue, 28 Nov 2017 03:42:10 -0500 Subject: [PATCH 01/60] change example to pass true/false so it actually works, clarify snesor name, and fix broken links (#4084) --- source/_docs/z-wave/entities.markdown | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/source/_docs/z-wave/entities.markdown b/source/_docs/z-wave/entities.markdown index d18e7e39047..64fa5eb0b72 100644 --- a/source/_docs/z-wave/entities.markdown +++ b/source/_docs/z-wave/entities.markdown @@ -119,7 +119,7 @@ The meaning of the `alarm_level` entity depends on the nature of the alarm senso - **254**: Deep sleep - **255**: Case open -If your device has an `access_control` entity, but not a `binary_sensor` equivalent, you can use a [template binary sensor](omponents/binary_sensor.template/) to create one: +If your device has an `access_control` entity, but not a `binary_sensor` equivalent, you can use a [template binary sensor](/components/binary_sensor.template/) to create one: ``` binary_sensor: @@ -128,10 +128,10 @@ binary_sensor: YOUR_SENSOR: friendly_name: "Friendly name here" value_template: >- - {% raw %}{%- if is_state('sensor.YOUR_SENSOR_access_control', '22') -%} - on + {% raw %}{%- if is_state('sensor.YOUR_ORIGINAL_SENSOR_access_control', '22') -%} + true {%- else -%} - off + false {%- endif -%}{% endraw %} ``` @@ -147,7 +147,7 @@ binary_sensor: - **254**: Deep sleep - **255**: Case open -If your device has an `burglar` entity, but not a `binary_sensor` equivalent, you can use a [template binary sensor](omponents/binary_sensor.template/) to create one: +If your device has an `burglar` entity, but not a `binary_sensor` equivalent, you can use a [template binary sensor](/components/binary_sensor.template/) to create one: ``` binary_sensor: From 8e9e8e6132d7601073e52f5b3259c036c089d28c Mon Sep 17 00:00:00 2001 From: c727 Date: Tue, 28 Nov 2017 09:43:29 +0100 Subject: [PATCH 02/60] AIO installer is deprecated (#4080) * AIO installer is deprecated * Remove AiO --- .../raspberry-pi-all-in-one.markdown | 120 +----------------- source/_docs/installation/updating.markdown | 4 +- 2 files changed, 3 insertions(+), 121 deletions(-) diff --git a/source/_docs/installation/raspberry-pi-all-in-one.markdown b/source/_docs/installation/raspberry-pi-all-in-one.markdown index 485fc64ffdb..6039ffed440 100644 --- a/source/_docs/installation/raspberry-pi-all-in-one.markdown +++ b/source/_docs/installation/raspberry-pi-all-in-one.markdown @@ -8,124 +8,6 @@ footer: true redirect_from: /getting-started/installation-raspberry-pi-all-in-one/ --- -The [Raspberry Pi All-In-One Installer](https://github.com/home-assistant/fabric-home-assistant) deploys a complete Home Assistant server including support for MQTT with websockets, Z-Wave, and the OpenZWave Control Panel. - -

-Please remember to ensure you're using an [appropriate power supply](https://www.raspberrypi.org/help/faqs/#powerReqs) with your Pi. Mobile chargers may not be suitable, since some are designed to only provide the full power with that manufacturer's handsets. -

- -The only requirement is that you have a Raspberry Pi with a fresh installation of [Raspbian](https://www.raspberrypi.org/downloads/raspbian/) Jessie (Stretch is not supported at this time) connected to your network. - -

-Note that as of 2016-11-30 SSH is disabled by default in the official Raspbian images. Adding an empty file called `ssh` to `/boot/` on the FAT32 partition will enable it. More information is on the Raspberry Pi Foundation [Blog](https://www.raspberrypi.org/blog/page/2/?fish#a-security-update-for-raspbian-pixel). -

- -Irrespective of whether you use SSH to connect to the Pi from another computer or not, you need SSH to install Home Assistant. So go ahead and enable SSH. - -* Login to Raspberry Pi. For example with `ssh pi@your_raspberry_pi_ip` -* Run the following command: -

- This command is a one-liner and not run as sudo. + The All-In-One Installer is deprecated, you will have problems updating Home Assistant in 2018. Please move to another [installation method](https://home-assistant.io/getting-started/).

- -```bash -$ curl -O https://raw.githubusercontent.com/home-assistant/fabric-home-assistant/master/hass_rpi_installer.sh && sudo chown pi:pi hass_rpi_installer.sh && bash hass_rpi_installer.sh -``` - -Installation will take approx. 1-2 hours depending on the Raspberry Pi model the installer is being run against. The installer will identitfy what Raspberry Pi hardware revision you are using and adjust commands accordingly. A complete log of the install is located at: `/home/pi/fabric-home-assistant/installation_report.txt` The installer has been updated to simply log any errors encountered, but resume installing. Please consult the "installation report" if your install encountered issues. - -[BRUH automation](http://www.bruhautomation.com) has created [a tutorial video](https://www.youtube.com/watch?v=VGl3KTrYo6s) explaining how to install Raspbian on your Raspberry Pi and install Home Assistant using the All-In-One Installer. - -Once rebooted, your Raspberry Pi will be up and running with Home Assistant. You can access it at [http://your_raspberry_pi_ip:8123](http://your_raspberry_pi_ip:8123). - -The Home Assistant configuration is located at `/home/homeassistant/.homeassistant` (or `/home/hass/.homeassistant` if installed prior to December 2016). The [virtualenv](https://virtualenv.pypa.io/en/latest/) with the Home Assistant installation is located at `/srv/homeassistant/homeassistant_venv`. As part of the secure installation, a new user (**homeassistant**) is added to your Raspberry Pi to run Home Assistant. This is a system account and does not have login or other abilities by design. When editing your `configuration.yaml` files, you will need to run the commands with `sudo` or by switching user. - -

- *Windows users*: Setting up WinSCP to allow this seemlessly is at the end of this page. -

- -By default, installation makes use of a Python Virtualenv. If you wish to not follow this recommendation, you may add the flag `-n` to the end of the install command specified above. - -The All-In-One Installer script will do the following automatically: - -* Create all needed directories -* Create needed service accounts -* Install OS and Python dependencies -* Setup a python virtualenv to run Home Assistant and components inside. -* Run as `homeassistant` service account -* Install Home Assistant in a virtualenv -* Install Mosquitto with websocket support running on ports 1883 and 9001 -* Build and Install Python-openzwave in the Home Assistant virtualenv -* Build OpenZWave Control Panel in `/srv/homeassistant/src/open-zwave-control-panel` -* Add Home Assistant to systemd services to start at boot - -### {% linkable_title Upgrading %} - -To upgrade the All-In-One setup manually: - -* Login to Raspberry Pi `ssh pi@your_raspberry_pi_ip` -* Change to homeassistant user `sudo su -s /bin/bash homeassistant` -* Change to virtual environment `source /srv/homeassistant/homeassistant_venv/bin/activate` -* Update Home Assistant `pip3 install --upgrade homeassistant` -* Type `exit` to logout the hass user and return to the `pi` user. - -
-**If you deployed Home Assistant via the AiO installer prior to December 2016** -* Login to Raspberry Pi `ssh pi@your_raspberry_pi_ip` -* Change to homeassistant user `sudo su -s /bin/bash hass` -* Change to virtual environment `source /srv/hass/hass_venv/bin/activate` -* Update Home Assistant `pip3 install --upgrade homeassistant` -* Type `exit` to logout the hass user and return to the `pi` user. -
- -After upgrading, you can restart Home Assistant a few different ways: - -* Restarting the Raspberry Pi `sudo reboot` -* Restarting the Home-Assistant Service `sudo systemctl restart home-assistant.service` - -### {% linkable_title To change the MQTT default password %} - -* Login to Raspberry Pi `ssh pi@your_raspberry_pi_ip` -* Change password `sudo mosquitto_passwd /etc/mosquitto/pwfile pi` -* Restart mosquitto `sudo systemctl restart mosquitto.service` -* Be sure to update your `configuration.yaml` to reflect the new password. - -### {% linkable_title Using the OZWCP web application %} - -To launch the OpenZWave Control Panel (OZWCP) web application: - -* Make sure Home Assistant is not running! So stop that first -* Login to Raspberry Pi `ssh pi@your_raspberry_pi_ip` -* Change to the OZWCP directory `cd /srv/homeassistant/src/open-zwave-control-panel/` -* Launch the control panel `sudo ./ozwcp -p 8888` -* Open a web browser to `http://your_pi_ip:8888` -* Specify your Z-Wave controller, for example `/dev/ttyACM0` and hit initialize - -

- If OZWCP is running really slow verify that your not running Home Assistant or have another page running OZWCP open or strange errors might occur. -

- -
-**If you deployed Home Assistant via the AiO installer prior to December 2016** -* Make sure Home Assistant is not running! So stop that first -* Login to Raspberry Pi `ssh pi@your_raspberry_pi_ip` -* Change to the OZWCP directory `cd /srv/hass/src/open-zwave-control-panel/` -* Launch the control panel `sudo ./ozwcp -p 8888` -* Open a web browser to `http://your_pi_ip:8888` -* Specify your Z-Wave controller, for example `/dev/ttyACM0` and hit initialize -
- -

-Don't check the USB box regardless of using a USB based device. -

- -### {% linkable_title Using the GPIOs %} - -The (**homeassistant**) user is added to the GPIO group as part of the install now. - -### {% linkable_title WinSCP %} - -If you are Windows users who is using [WinSCP](https://winscp.net/), please note that after running the installer, you will need to modify settings allowing you to "switch users" to edit your configuration files. - -First create a new session on WinSCP using Protocol **SCP** pointing to your Pi IP address and port 22 and then modify the needed setting by click on **Advanced...** -> **Environment** -> **SCP/Shell** -> **Shell** and selecting `sudo su -`. diff --git a/source/_docs/installation/updating.markdown b/source/_docs/installation/updating.markdown index 7ee4dbd3f60..a23aa31b27f 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 [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 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), [Vagrant](/docs/installation/vagrant/), or [Virtualenv](/docs/installation/virtualenv/#upgrading-home-assistant).

View what's new in the latest version and potential impacts on your system [here](https://github.com/home-assistant/home-assistant/releases). @@ -25,7 +25,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 [Hass.io](/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). +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 [Hass.io](/hassio/), [HASSbian](/docs/hassbian/installation/), [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 518fa9aed9ba530de56d03288c683d03eb24a4db Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Tue, 28 Nov 2017 15:12:52 +0100 Subject: [PATCH 03/60] Update format --- source/_components/xiaomi_aqara.markdown | 25 ++++++++++++------------ 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/source/_components/xiaomi_aqara.markdown b/source/_components/xiaomi_aqara.markdown index 2e132faa878..8c471681b9a 100644 --- a/source/_components/xiaomi_aqara.markdown +++ b/source/_components/xiaomi_aqara.markdown @@ -56,7 +56,7 @@ To enable {{ page.title }} in your installation, add the following to your `conf ### {% linkable_title One Gateway %} ```yaml -# You can leave mac empty if you only have one gateway. +# You can leave MAC empty if you only have one gateway. xiaomi_aqara: discovery_retry: 5 gateways: @@ -66,7 +66,7 @@ xiaomi_aqara: ### {% linkable_title Multiple Gateways %} ```yaml -# 12 characters mac can be obtained from the gateway. +# 12 characters MAC can be obtained from the gateway. xiaomi_aqara: gateways: - mac: xxxxxxxxxxxx @@ -106,7 +106,7 @@ xiaomi_aqara: type: string default: any host: - description: The host / ip address of the gateway. If this parameter is used the multicast discovery of the gateway is skipped. + description: The host/IP address of the gateway. If this parameter is used the multicast discovery of the gateway is skipped. required: false type: string {% endconfiguration %} @@ -115,7 +115,7 @@ xiaomi_aqara: The gateway provides the following services: -#### {% linkable_title Service xiaomi_aqara.play_ringtone %} +#### {% linkable_title Service `xiaomi_aqara.play_ringtone` %} Play a specific ringtone. The version of the gateway firmware must be `1.4.1_145` at least. Take a look at the examples below. @@ -155,7 +155,7 @@ Allowed values of the `ringtone_id` are: - 29 - Thinker - Custom ringtones (uploaded by the Mi Home app) starting from 10001 -#### {% linkable_title Service xiaomi_aqara.stop_ringtone %} +#### {% linkable_title Service `xiaomi_aqara.stop_ringtone` %} Stops a playing ringtone immediately. @@ -163,13 +163,13 @@ Stops a playing ringtone immediately. |---------------------------|----------|-------------------------------------------------------| | `gw_mac` | no | MAC address of the Xiaomi Aqara Gateway | -#### {% linkable_title Service xiaomi_aqara.add_device %} +#### {% linkable_title Service `xiaomi_aqara.add_device` %} | Service data attribute | Optional | Description | |---------------------------|----------|-------------------------------------------------------| | `gw_mac` | no | MAC address of the Xiaomi Aqara Gateway | -#### {% linkable_title Service xiaomi_aqara.add_device %} +#### {% linkable_title Service `xiaomi_aqara.add_device` %} Enables the join permission of the Xiaomi Aqara Gateway for 30 seconds. A new device can be added afterwards by pressing the pairing button once. @@ -177,7 +177,7 @@ Enables the join permission of the Xiaomi Aqara Gateway for 30 seconds. A new de |---------------------------|----------|-------------------------------------------------------| | `gw_mac` | no | MAC address of the Xiaomi Aqara Gateway | -#### {% linkable_title Service xiaomi_aqara.remove_device %} +#### {% linkable_title Service `xiaomi_aqara.remove_device` %} Removes a specific device. The removal is required if a device shall be paired with another gateway. @@ -190,7 +190,7 @@ Removes a specific device. The removal is required if a device shall be paired w ### {% linkable_title Long Press on Smart Button %} -This example plays the sound of a dog barking when the button is held down, and stops the sound when the button is pressed once. +This example plays the sound of a dog barking when the button is held down and stops the sound when the button is pressed once. *Note: The sound will stop playing automatically when it has ended.* @@ -226,7 +226,7 @@ This example plays the sound of a dog barking when the button is held down, and ### {% linkable_title Initial setup problem %} -If you run into trouble initializing the gateway with your app, try another smartphone. I had trouble with the OnePlus 3, but it worked with a Nexus 5. +If you run into trouble initializing the gateway with your app, try another smartphone. E.g., it didn't work on an OnePlus 3, but it worked with a Nexus 5. ### {% linkable_title Connection problem %} @@ -238,11 +238,12 @@ If you run into trouble initializing the gateway with your app, try another smar 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://www.domoticz.com/wiki/Xiaomi_Gateway_(Aqara)#Adding_the_Xiaomi_Gateway_to_Domoticz). - Turn off the firewall on the system where Home Assistant is running. -- Ensure your router supports multicast as this is a requirement of the Xiaomi GW +- Ensure your router supports multicast as this is a requirement of the Xiaomi Gateway. - Try to leave the MAC address `mac:` blank. - 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. - If you are using Home Assistant in [Docker](/docs/installation/docker/), make sure to use `--net=host`. - If you receive an `{"error":"Invalid key"}` in your log while trying to control the gateway light, you should generate the key again using an Android Phone or alternativly an emulator such as [bluestacks](https://www.bluestacks.com). In some instances there is an issue with keys being generated using the iOS application. -- If the required library "PyXiaomiGateway" cannot be installed you will need to install some missing system dependencies `python3-dev`, `libssl-dev`, `libffi-dev` manually (e.g. `sudo apt-get install python3-dev libssl-dev libffi-dev`). +- If the required library "PyXiaomiGateway" cannot be installed you will need to install some missing system dependencies `python3-dev`, `libssl-dev`, `libffi-dev` manually (e.g., `$ sudo apt-get install python3-dev libssl-dev libffi-dev`). + From 20c74bea55b212006ee778ce630db697fca40a06 Mon Sep 17 00:00:00 2001 From: Jon Griffith <32052562+arretx@users.noreply.github.com> Date: Tue, 28 Nov 2017 12:33:54 -0700 Subject: [PATCH 04/60] Display problem with script section... (#4087) I banged my head against the table for hours trying to make the script work on this page and then I figured out something. When viewing the page on the HA site, the variable tags {{value1}}, etc...do not display. I only see two quotes. This is what I was seeing. ```{"event":"TestHA_Trigger", "value1":"", "value2":"", "value3":""}``` And I should be seeing this: ```{"event":"TestHA_Trigger", "value1":"{{value1}}", "value2":"{{value2}}", "value3":"{{value3}}"} Above this section in the automation, there's a tag called { % raw % } which I'm unfamiliar with, but I made a guess that this needs to be inserted. I may have been wrong. If so, I hope I've identified a valid problem. Thanks! --- 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 fc330b5f799..f61b64c1bc1 100644 --- a/source/_components/ifttt.markdown +++ b/source/_components/ifttt.markdown @@ -98,7 +98,7 @@ automation: ifttt_notify: sequence: - service: ifttt.trigger - data_template: {"event":"TestHA_Trigger", "value1":"{{ value1 }}", "value2":"{{ value2 }}", "value3":"{{ value3 }}"} + data_template: {"event":"TestHA_Trigger", "value1":"{% raw %}{{ value1 }}{% endraw %}", "value2":"{% raw %}{{ value2 }}{% endraw %}", "value3":"{% raw %}{{ value3 }}{% endraw %}"} ``` ### {% linkable_title Sending events from IFTTT to Home Assistant %} From a3a19f3089ff1b5f0827f5098e5b6e5064196f46 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Tue, 28 Nov 2017 20:41:36 +0100 Subject: [PATCH 05/60] Move escaping --- source/_components/ifttt.markdown | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/source/_components/ifttt.markdown b/source/_components/ifttt.markdown index f61b64c1bc1..764138d2725 100644 --- a/source/_components/ifttt.markdown +++ b/source/_components/ifttt.markdown @@ -64,6 +64,7 @@ Choose "Webhooks" as service. You need to setup a unique trigger for each event you sent to IFTTT.

+{% raw %} ```yaml # Example configuration.yaml Automation entry automation: @@ -75,9 +76,11 @@ automation: service: ifttt.trigger data: {"event":"TestHA_Trigger", "value1":"Hello World!"} ``` +{% endraw %} IFTTT can also be used in scripts and with `data_template`. Here is the above automation broken into an automation and script using variables and data_templates. +{% raw %} ```yaml # Example configuration.yaml Automation entry automation: @@ -89,17 +92,20 @@ automation: service: script.ifttt_notify data_template: value1: 'HA Status:' - value2: {% raw %}"{{ trigger.event.data.entity_id.split('_')[1] }} is "{% endraw %} - value3: {% raw %}"{{ trigger.event.data.to_state.state }}"{% endraw %} + value2: "{{ trigger.event.data.entity_id.split('_')[1] }} is " + value3: "{{ trigger.event.data.to_state.state }}" ``` +{% endraw %} +{% raw %} ```yaml #Example Script to send TestHA_Trigger to IFTTT but with some other data (homeassistant UP). ifttt_notify: sequence: - service: ifttt.trigger - data_template: {"event":"TestHA_Trigger", "value1":"{% raw %}{{ value1 }}{% endraw %}", "value2":"{% raw %}{{ value2 }}{% endraw %}", "value3":"{% raw %}{{ value3 }}{% endraw %}"} + data_template: {"event":"TestHA_Trigger", "value1":"{{ value1 }}", "value2":"{{ value2 }}", "value3":"{{ value3 }}"} ``` +{% endraw %} ### {% linkable_title Sending events from IFTTT to Home Assistant %} From 4cadf0b4ef714782383bf064aa8e714dcd02a155 Mon Sep 17 00:00:00 2001 From: DubhAd Date: Wed, 29 Nov 2017 06:51:49 +0000 Subject: [PATCH 06/60] Added note about the component (#4090) Added a note to try to clarify that this isn't for integrating a Home or phone with HA --- source/_addons/google_assistant.markdown | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/source/_addons/google_assistant.markdown b/source/_addons/google_assistant.markdown index 04458c65944..dd7cddcb6ce 100644 --- a/source/_addons/google_assistant.markdown +++ b/source/_addons/google_assistant.markdown @@ -10,6 +10,10 @@ footer: true featured: true --- +

+ If you are wanting to integrate your Google Home, or mobile phone running Google Assistant, with Home Assistant then you want the [Google Assistant component](https://home-assistant.io/components/google_assistant/). +

+ [Google Assistant][GoogleAssistant] is an AI-powered voice assistant that runs on the Raspberry Pi and x86 platforms and interact over [api.ai] with Home-Assistant. You can also use [Google Actions][GoogleActions] to extend its functionality. To enable access to the Google Assistant API, do the following: From d4a3e8a051780afd0d668e32c105463d3eed5a3d Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Wed, 29 Nov 2017 07:52:17 +0100 Subject: [PATCH 07/60] Add instructions (fixes #4085) (#4086) --- source/_components/logentries.markdown | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/source/_components/logentries.markdown b/source/_components/logentries.markdown index e14b908b871..b365e57f63d 100644 --- a/source/_components/logentries.markdown +++ b/source/_components/logentries.markdown @@ -11,7 +11,9 @@ footer: true ha_category: "History" --- -The `logentries` component makes it possible to log all state changes to [your Logentries account](http://logentries.com/) using Logentries Webhook endpoint and a token based log +The `logentries` component makes it possible to log all state changes to [Logentries](http://logentries.com/) using Logentries Webhook endpoint. + +Open the **Add a Log** page and choose **Manual**. Enter a name for your log in **Log Name**, add a group in **Select Log Set**, set **Token TCP - logs are identified by a token.** and press **Create Log Token**. The generated token is required for the Home Assistant configuration. To use the `logentries` component in your installation, add the following to your `configuration.yaml` file: @@ -21,6 +23,10 @@ logentries: token: TOKEN ``` -Configuration variables: +{% configuration %} +token: + description: The token for the log to use. + required: true + type: string +{% endconfiguration %} -- **token** (*Required*): Your Logentries log token. From a171bad8547c4fad1edecc8c1d6584850da5ee38 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Wed, 29 Nov 2017 08:29:40 +0100 Subject: [PATCH 08/60] Add note about decommissioning of the service by Yahoo! --- source/_components/sensor.yahoo_finance.markdown | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/source/_components/sensor.yahoo_finance.markdown b/source/_components/sensor.yahoo_finance.markdown index de79cc87bd3..a71ef1ea228 100644 --- a/source/_components/sensor.yahoo_finance.markdown +++ b/source/_components/sensor.yahoo_finance.markdown @@ -14,6 +14,10 @@ featured: false ha_release: 0.29 --- +

+ This sensor doesn't work anymore as [Yahoo!](https://yahoo.uservoice.com/forums/382977-finance/suggestions/32103877-yahoo-stock-quote-api-please-bring-back) decommissioned the service in early November 2017. +

+ The `yahoo_finance` platform uses [Yahoo Finance](https://finance.yahoo.com/) to monitor the stock market. To enable the `yahoo_finance` platform, add the following lines to your `configuration.yaml` file: From 6cbf1537905859e9b639ec6917db92b7647ce7a0 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Wed, 29 Nov 2017 18:05:59 +0100 Subject: [PATCH 09/60] Add Hass.io blog post (#4089) * Add Hass.io blog post * Add SSH community add-on * Fix date and other small issues --- ...2017-11-29-hassio-virtual-machine.markdown | 153 ++++++++++++++++++ .../blog/2017-11-hassio-virtual/hassio.png | Bin 0 -> 76889 bytes .../blog/2017-11-hassio-virtual/social.png | Bin 0 -> 117808 bytes .../virtual-machine-manager.png | Bin 0 -> 15280 bytes 4 files changed, 153 insertions(+) create mode 100644 source/_posts/2017-11-29-hassio-virtual-machine.markdown create mode 100644 source/images/blog/2017-11-hassio-virtual/hassio.png create mode 100644 source/images/blog/2017-11-hassio-virtual/social.png create mode 100644 source/images/blog/2017-11-hassio-virtual/virtual-machine-manager.png diff --git a/source/_posts/2017-11-29-hassio-virtual-machine.markdown b/source/_posts/2017-11-29-hassio-virtual-machine.markdown new file mode 100644 index 00000000000..2f53ef97d9d --- /dev/null +++ b/source/_posts/2017-11-29-hassio-virtual-machine.markdown @@ -0,0 +1,153 @@ +--- +layout: post +title: "Set up Hass.io on top of a virtual machine" +description: "A how-to about using Hass.io on x86_64 hardware in a virtualized way." +date: 2017-11-29 06:00:00 +0000 +date_formatted: "November 29, 2017" +author: Fabian Affolter +author_twitter: fabaff +comments: true +categories: How-To +og_image: /images/blog/2017-11-hassio-virtual/social.png +--- + + +The images for the Raspberry Pi family and the Intel NUC are an easy way to get started with [Hass.io](/hassio/). For a test or if you have a system which is already hosting virtual machines then the [**Hass.io installer**](/hassio/installation/#alternative-install-on-generic-linux-server) is an option to use Hass.io in a virtualized environment. In this guide the host is a Fedora 27 system with [libvirt](https://libvirt.org/) support and the guest will be running Debian 9. Hass.io will be installed on the guest. + + + +Assuming that you already have setup `libvirtd`. You might need to install `virt-builder` and `virt-viewer` additionally. + +```bash +$ sudo dnf -y install libguestfs-tools-c virt-install virt-viewer +``` + +We will create a virtual machine with Debian 9 and a 10 GB disk image in the QCOW format. Use `$ virt-builder --list` to get an overview about what's operating systems are available if you prefer to use a different system. + +```bash +$ sudo virt-builder debian-9 \ + --output /var/lib/libvirt/images/hassio.img \ + --format qcow2 \ + --size 10G \ + --root-password password:test123 \ + --hostname hassio \ + --firstboot-command "dpkg-reconfigure openssh-server" +[...] +[ 147.6] Finishing off + Output file: /var/lib/libvirt/images/hassio.img + Output size: 10.0G + Output format: qcow2 + Total usable space: 9.3G + Free space: 8.1G (87%) +``` + +Now, we are making our new virtual machine available for `libvirtd`. If you get an error that the OS is unknown, use `$ osinfo-query os` to get the name to use with `--os-variant`. To access the virtual machine is connected to the bridge `bridge0`. + +```bash +$ sudo virt-install --name hassio --import --ram 1024 \ + --os-variant debian9 -w bridge=bridge0 \ + --autostart --disk /var/lib/libvirt/images/hassio.img +``` + +

+ + Hass.io virtual machine in Virtual Machine Manager +

+ +Depending on your preferences you can use the Virtual Machine Manager (`virt-manager`) or `virsh` to manage the created virtual machine. Log in and create an user with `# useradd ha` and set a password with `# passwd ha`. We will need that user to make a SSH connection to the virtual machine. + +Log in as `ha` with the given password. If your are using the default network of `libvirtd` then the DHCP range is defined in `/var/lib/libvirt/dnsmasq/default.conf`. In this guide the virtual machine is present at 192.168.0.109. + +```bash +$ ssh ha@192.168.0.109 +ha@192.168.0.109's password: +Linux hassio 4.9.0-3-amd64 #1 SMP Debian 4.9.30-2+deb9u3 (2017-08-06) x86_64 +[...] +$ +``` + +Install the requirements after you switch the user to `root`. + +```bash +$ su +Password: +root@hassio:/home/ha# +root@hassio:/home/ha# apt-get update +root@hassio:/home/ha# apt-get install bash socat jq curl avahi-daemon \ + apt-transport-https ca-certificates +``` + +We want the latest Docker release. This requires additional steps to set it up as unlike other distributions Debian is lacking behind with current packages. + +```bash +root@hassio:/home/ha# wget https://download.docker.com/linux/debian/gpg +root@hassio:/home/ha# apt-key add gpg +OK +root@hassio:/home/ha# echo "deb [arch=amd64] https://download.docker.com/linux/debian $(lsb_release -cs) stable" | tee -a /etc/apt/sources.list.d/docker.list +root@hassio:/home/ha# apt-get update +``` + +Now, it's possible to install a current release of [Docker](https://www.docker.com/). + +```bash +root@hassio:/home/ha# apt-get -y install docker-ce +``` + +Start `docker` and enable it. + +```bash +root@hassio:/home/ha# systemctl start docker && systemctl enable docker +``` + +An [installation script](https://github.com/home-assistant/hassio-build/tree/master/install#install-hassio) will take care about the setup of all moving parts. + +```bash +root@hassio:/home/ha# curl -sL https://raw.githubusercontent.com/home-assistant/hassio-build/master/install/hassio_install | bash - +[INFO] Install supervisor docker +[INFO] Install generic HostControl +[INFO] Install startup scripts +[INFO] Init systemd +Created symlink /etc/systemd/system/multi-user.target.wants/hassio-supervisor.service → /etc/systemd/system/hassio-supervisor.service. +[INFO] Start services +``` + +If it's done, then there will be two new containers. + +```bash +root@hassio:/home/ha# docker ps +CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES +ada5bbfc74f0 homeassistant/qemux86-64-homeassistant "/usr/bin/entry.sh..." 4 minutes ago Up 4 minutes homeassistant +5954ac452ffc homeassistant/amd64-hassio-supervisor "/usr/bin/entry.sh..." 7 minutes ago Up 7 minutes hassio_supervisor +``` + +After a connection to the container which is containing Home Assistant is made, you will see the log output. + +```bash +root@hassio:/home/ha# docker attach --sig-proxy=false ada5bbfc74f0 +2017-11-28 19:24:30 INFO (MainThread) [homeassistant.core] Bus:Handling + + Hass.io overview +

+ +Keep in mind that there are limitations with this approach. Not all [add-ons](/addons/) will work and some don't make sense to use as the hardware is not present. E.g., use the [SSH community add-on](https://github.com/hassio-addons/addon-ssh) instead of the default [SSH add-on](/addons/ssh/). + diff --git a/source/images/blog/2017-11-hassio-virtual/hassio.png b/source/images/blog/2017-11-hassio-virtual/hassio.png new file mode 100644 index 0000000000000000000000000000000000000000..cf9d90b312cdc4406b475d15ff0690ecefa23089 GIT binary patch literal 76889 zcmdqJWmr{R*fk0wA*lk=pdcaLUD6#QA>G~GsB}v=n+5^t?(Rm|^rk~{)3xC&p2z2X zzjJ>=PUu0t^oBSw0F9@RO8; z2nFD;=T0KhpHYB6-YCW)!1n~s;u_8>cBam52973hX0~=VCJatSjwU9yPUd#b#|Z6$ zaBy$oq{Tjdc27T8cJs!WS?GX5MlNGfzx_~(od|eK(<;S8>)4u8q*1|j5T;WOD+Zq~ zG|wqllINg2N5q*>N}ysuM1dDU$+L!}Tt&Y}dxtys9v^hPgDr15mVS1SS23PmU>_pO z*eG^&2Sa%m@KWUI%ldKu&KYz@UGKw|9-UI^0avuuw@zcj;}!4sP`rPx0KPo<^6N4k zt&_Kqa#>hdguQx8#rdWlEZL_=G+*n*)u~@mxqkB2%)2f%%1$Dj!tfs zR#!)TQL_K@o&?A~Wt%G9LcO9y_BU2Pk~(AKA8Bdfqo!8LoYAob7TM#GaK7z&LFZ_H zpYB>~;@jni!BUONVudXXqy*nqugP*dy-%@m@B;%Qn^)(~Q|hJUFHwH~%+wW7G*!1f znhaW|iHIcm`tRh3pg83HS?Gq4m+@S!cp&FWL>Ak7&s7*`JKSvL<>x~;r^lpH7kci(S=N` z?|+LZuK>~&AmDH`4m4^nWJ2@FY_k>*bjp>8%9Gtuz<8}C8vB3T-E{NLU_z9R_ax$6 z>6-&JIy@cj%BdRz(I9p)a}1g7|Cv1VPjV6zB)rZ=&iBQ1<;FcHYr9PfcbA8B8H!To zfs^K?XO<6s$g%%>y=L(jV<8F(|5lTdbGk5*p?7C6QRh}t1S|Ld}?Lq5aUgbG31H_kou2>3fgc6f=>nH}smn@z-WcJP-H492iN9fsmbF z~-5|MCM+6O-{(l%^HQKZzi-f{)F|cLJN!2o*SYJx6iLAfZQq)Y)4PgdC>jr@ zWa$#5(}X~UnI4JDUZ;fYb)!VH2Gxre33EvPmFyf?NY6I64>}HMvyGB|SJbEgqk#9} zb*RZ%i`!CP=5&gSiLKLq=-a>0uU#PIBmQ?!JybgXsT+DI6Yy%dYeU{$xDgG)B#;Y^ zB7vW4GC@Oo!(h0qN3_4xtq11ZC+BiQZZ9lk^EkzrBaVS<2t&KM?!F@6Hir|HNGD8m z{X@A2b|KOG^2wNa00};4j~PEg;}@s5F4miHRnNP?e-_vLd01IB2Swb9fR|dcfS&4` z$IP*H$h4>)(dZjb=VRSMD;MWF+fn}5ZOizW6zTRhpOi~zu(mUlGK7OXMiRR{1Q_Tgr_de;@|*H9@(y#q3eNm9G}G`)uRF1VBXr|zty_# zpJe}~{3ZhI!mLGK^rzA;01w>4!^D5ZZnN;d%Agy`S*OqnTy`)rx;49aYzjVF?q8Dd zu1>z)+q-I5PG)!`eJvhm%$mlcMV~LU^WSctT>Y%td&&i}O{;ff;#%en#LI+{=`=aR zzon)Q*0OC67x3`vo>iEO^KFL&7a)d)nCouc~Jbo;3 z0$xXyLyKmqA-Qy%6xD4>#&!#QYSo+LR=Q0z%EpDKaoO!ld507-1*BY@0QR`rNO&wpj554|T>?M3S2s`ocrYZhj zwx2~qV{ZO&;yW*D7A{z8cPKJzc;qYUfMtay{s>@(j|LesucBQ~p5KzHzWq0PQG(qH+el=t z?b;3*ZGl%+y-luYFlNiu5ubq-b*Xgw;-LfwzWrRrOycBu6&8l@$LWr(nTERPlp_bE z1@Y7dn=A|vST;s0cOW<0A`AJWRnFjM7CelGhDLuP>m;!6R76BsV>+;=-*a-URxkIor~Adg zrbwBvW&cSyaEA3(lOXS~8{+Q7$Vifv&n^;0@ydDZ!*wEqw6wzZO_J_b!G3wKZT*I0 zqh)&q5@~esa9KKW0ZLk#G@iWi-6ioG`rG_2=$a_ActmvSujYjAuo$1bHO$E!7#K4B<3)A~?vu}Eoi1$cPtqGVzOLx3v7Y=M znZ|kchsch_^tTiei1jOq*>fQ#?H((;c+A#{`Cr;Ty(Z^}%S1C-CtkOXE518E+Nu}N zlL)x8$kI6NOgg*tQoKhK&iALoL3pHcBFGpA#BkI;THt73+$6ThQ;J;(~&$iop`RaJG0_r{^N<0K+Fkt=FtW#s{+9aP?yGU!%q z8hkW(&eUdbk_BI5vls+JzC624Q~Ab^907&YObstW8SB^-WIt}#ttrmjxYy7kkBiJG@aqA)?@zo>dI z5J1T`;X(oe`*#z3vBJvDp?l7bSgyVimWlMRtSpX&M39`tD#R87DQ79Fef9k#xHW<(_uEI^w_I*qkEC3Qg&^;ED=NtA z1uSJ%jQ7;F8(Zp-yo#b9$VaVl>U!Q$(LyO>0#^cZX|tjH54(OEjeoFw?|cZ{mOR;z z{J&`xEFpF*yDjyps_PEPmbWO|wD==kQuxd}-unubJZcYjz{5nO{lvtc1H6e(1p@m4 z!h85WY5blgTlLotrm9L~Fqv0uI3ss7c5}YtI1JfMT%*zw*JC6)3p2QUZa^-2ipGB8IGcHmOboR za3P}QcmElhLo-LBAQOgGIe&ob`=C1WbwPDEU`NF8hT_I-Os4UgIVb2S!daAbbG833DI*V|Co zIQ&T#Q1+$5{uR-~0!qhJ{_rli98b>|#sKGadOBCK{o)zlKkZo|se3(wF9dqZY?jf;N5OEPY_ zj+NFMIF3xd&pN{-mdm&8A|R$Or$mfN;jV`ZF>!Hd9d_;c)vn7(aN7m2p1JA1mqbLP zZ9aEarC09kX1avJG*G=}ThUz&9dQXUrBB)+;Eg`ZYJ_|&gwNug`s_~t<0UXRJT^mJ z-5Ul#j5TL2{vS6m+`m+%2YQ?w=c@yTdJ5#Xrdu9L2SJdfM>)tb1l10ip<0Y{3>D5= zFT;!dG3lKA4``+aKB$G%TO>m#7(bbGuPk^m3c(I!1=BAr@;9Ody#0310s_=%!n&HO zdTN(aUG^=t?``dTeS19?g&$VD<&dzUPzJbb{Xd<$KH|!>2|~X+d|@>7^oDvL;aMgp zt>>F?OJ-!oGpQ?`_l`FYMogfw5cea$Xg0ft@sZ>kA9EZLd0tzIzO2W>gZ3*Mrjp)36pkAIk?vywjL{9pf76zC33grD@5_8D`mGUA=yF%bWlceDRm4Hb#BeV>;fd z*Ra8lblKmVf%oqWpdf!%{ca#n!QM5t>vtsKS)DmelSuvZK(k;Pu@vXiWkSqgY*4Q& zj!%W^Vj~-#4tQ@NpUrBv42$G=p_Xlb7N**rFtgZd#^u`%Vx)FnALrP&WFT8}o`Us! zK7x%?l62K4; z5w)JIjN@z9v`D9M0!5imtZZgJexF^MmPvin*`kT4^hEnHKO~Qu0+loVM7d(Z*4@Rv zsDr}`D@-rpC$Qrt##H#@OI}>e>U{DxCx<*VBqU2`k<(p3_ukhp64>urjo-h+YHX%c zw?|WBk|)A^?yll~yi|-nS`G;dGhX-DdAUemFm|PB0PkKE+ zC)y;rrmv4nZg>iXaidywtXpMw(H1OC^##5i`EiV^E6s&3iLkp@?!A3=Ptauj^wfSH zJcYsO;&JxMy<@ZMq3QHC13KYvP{atmL^SbOEm-^8vZ;}z0;b~qF%P>u1r=}8f>Ur< zSVU>%(iCL+=BlBx1-cM!Y+~YY<%0$7RcC8>T;YRy`rMzNiPTw-7M%$c6}NTkZ9vy^ zEkLRs_fnqMSSCQJkv5Xwj%O;n+mJ(pk4}rE+PmXoRIM3Z{6Jw)tMTFV?gaT+vK-Za zfU`~}!vi~?c8MGPC}Fz&N@w@#j^+bn&X?+j3F7T0sRkIbGy1OP5A2+!IUKIetfrIcXo75E3Ka90UNC_yHa*u&U;m42cqma3V$C-&JLsn)!*&(It z%*rlB(Cf^KXXLM=t3Uri`de8QH+(sun2sjsRxv(+`%V777CzLIANTd$)QT@fac6Y@ zq2-S}h+!>&77+y&_{MjFf73xs6zv`slK=B(zBxJjg5c(KtKm=9B*@u_t#j5AN)Z7; zhgSLB*9=HQeP>CShv4so_>m2qOgyRff#yn>X3vo?@m``Mi4NA~&=iGz|H!d=b$8OR ztYIU0*>NECAwPP|SognFt1p>w?zO}S)OfaTq|jPKwg=J9Np{*ENWk(@UeO60X+2sn z+xqGY)m~%PT#JuOq;1Z9dc<<$3(rD17G5DXS~9} zBk9<8FskMg=~wlKM@KRaYWmMT!(x=ZM?YqK8!4&^~`ZY4Qcc%}< z*O^aE^$jI?0RcUAk*||q$}4|1W>=1xj3f#A?{f{u%d`(Lkpa;Lt~O@l)qet`n85#P zZ2{&v@Av*krc9+VGD3bUlYoP_;fR-OACEXjdb*5AxuDjDU!&2fB!eN@B&*CG!C9K z2x*6xzKupmEy&)DJ^3p*{*jpc2(InJ6urmzZ|4IK&93}E0|dO3kEh?H{&yx`Mh@84 zBdj_$64oqp{=&8Z7hp^(#{kl4=L3SV&0^mr2@g%!R8}SXbGnZaeG4l3?GUot7MJ~5 z>(O~tkikr|r}QleCbFW?4GJ9BlDDJ}yR!5m=P&rVm}+eK5>O)pX0SihEXt_kt6+_y zG`zl*1d`uLp z2=Al+-s<|?#o;3IS46ZooKjv;1}$dyRk+vKn%Oj{VL7X3H&W6HId0=|14Ao)cEgF) zR#%xwp@q90@N%YXYH1klknyMkIn=9TYF6H$O-z#RDG6`q=g64E!eEzY--PqekaA=6 z=N-hA@dXW^7Z+Fg+_|pjQq0x1)6hGx2USqRwqE$%#pAHDvUThDMAE-u`-P4DhZ0IA z;K&Wu^+8l9%O9M-+WDsiM%(QRBb(v z3Ktt2$9=r?BAw;ZdFAe;8|hB;U25WfS!0l5q2f-*H-tzMnYr|dMz#z-xAnyo2!|_; z%c)zq`jcX~=JXKoVs{tgRJYBkA2XfP^L=sgYjh-dfB-n}PJD}x$Fb%lTCBG#1i)`3 zGp(NbydRLH;`UbQ?87DBO3ua(dT~UN0uKLsV z=KM4OV$AB$tE&F3>}-!3q%;LbQi7*vFNmk-EJ&u9Hr5YP!196_$lqcqULUvYblR)w z<&yC5S!5(DF@-+v#&oARF3Q7=$lj&cwPoOXX2ry&k6imj8=V*Vn{?UCRb(%5d$4|) z|FYz8C9t`*rOHi)hu6RCrm)sG80U}>|D(;?Bk}^!1eu{NPK~==Xy)@(ls}ghi|xx( zIl{N17VXSVJ`^f_*6ul&7doAyD-RmGItE9Vl(l?UAmPg@qP4I%^Vpu>v2R?KoFNtN z$0TXk+D_yCDT(FnO9t}3B{-Jz;c|xgV=eW6C`|wU2A%b;pNIdZy-?IIuh?-5H_7Sp ziqetfY^SWl4G6oeOvM{K%>b(qxkh(F6w|1?oem@^?-6xSv=_v-3L+ z4&1`&!8E&e5?*?(c6x6Ht z^=YjIK8m<7lJrG9)opR{`qkaud^PoQlM4kt`a0Adpfu!ER6!1fprM*Qy$UZyT?P&^ z0&!)H+5@gqPQDD4X84zj{FngO1@9orkfFb?KgMa37+z5X$BWJ#x*jzi3(CmIxIZ-R zh-i@$q9bKJ6!2+#Pu^rdf+eTO>H_bJWv+*Vo4KCLPd~+aIT%moUiD&5FSC1Xb)lpj zZnbeoZ@Upsw~YBapsmLNL7pN6E*03WD+UUU#`{=V8SIBjoh83Hrd?lbhWi2n8g_`X{F1?*QGGG1cqRDiDHU6pXM;uf$7Br$Y#9VZ4ng{F95Q5>ctxrkl7YiHCKVZ7Rp zzA!*=^M+l3y)Q1fYGkC|)>?rlJi>dw&l?)7<>(c+2-bZ;FL}`Dtx*)*I%8^kOWrm3 z^#LZjlc7LeqW0^FJ^?xHcyI0}wvNK?r=OYeo9|g!32oVh9z9PVt2b4`?R&3A@sr@=>8k*hIpqyf71%a55qN0l0 zl6}v>sG4q`bOlo11C}T96wrRZaC;7|*~5Jxvo(;uCE{CSQYQ<2yk_fPbLLG>x@0@s ze$+Ne`B1+ic7@$cqQW;rz~xF0r20pJGwoj{k5?m302>GLxt395dOC5Y*8?J;G|^_r zN=p|w?I`fyUi*Fc@ZlXDUs{r$N2C*VIyUXunj~3VW*fTS+l~hWWcQurD}3OYm1~jh z_bB78ZD+4W9vm=%QV0f+_5_y->w4Rta*y|DuG`zO%~p75c#Jttg~g!T4`E$fNjgIt ziu}??Wja7^fkLP=*SkV@jEYSsqf*yPezi3%m3P;Mgd4$vFmQ13RJ1>J)!8hXzgeVr zZYwGZflN>HD2>_|a9GV&Ihir0maRcOzrgy*YOKJF&b|PAHM<^*OtW7e3w1=1@P$N% zmMKX(JF~wUL#eZYsM(~iZ96pIm@lwj;^O?iN$m?!c}m$if|Qh$F$=YHKXsZNR{~z3 z6Y<7>5gIX_#i}OYbfz(j5D;({1ZKqguuehlZMG_Zr#>@#v>w8 ztMUVsT@x}@7Q)CSr{mW5l$20NKWWL26P0e4wNq%}G>^^F{KeETmI3~XU(5UZts(43 zdyES*?g}P2h&Nx!(Ag72Pv!=ZxwO>oE!J}Z0H#hjCA4-QnlQAzwH4Fm&Es=>zJA8k z&R=}#E$Fw4CEPetO21HR6W+a6bm~QfO`>u*@zBKWGJ>lLX zwR1L^D~Z*X!Bag{^DQHP6h2^r$d_<1JbiPj4(dm-z*@iT^K7>7df#YHt1(?PSLp(E01 z>QI;byb7DUOVsWIuS{=NKtQQnJUAFx?!5&!E?B z!YK!<*rapxuG@3t^BOY)Jmu48Z4qf{hoa1B1(NQE@38yCOw4$}krd}i@h4wzY-!1I zUlk`%mZ>qIc7Jv<+Xof1* ztg{XU?-*?jB>+#}IP3m|5|iigii7f&NuSrQn=baH74_6^Zzi&}efRQl$IML3pzUUv zCGl9qKQ~?A}zXq%1 z`dD|!7ggMP3RYXr2^eoZacnL9t;hIN=k?xR!j4fA)}avp&G^trj@|K!z9kRTlqU$0?!WPV!vGU|3U4)+&=={`b=czQYpOGo!jbl#d=t{r!iux!21)K#e{;G(`KOyz$QSq z7AbkoE^lOJYy0a$li>|27O{R`J=-Klq#x*pN#P)I=oFW3Xh9&s=k5|ZXf_Q`QaJ5# z!jZ`vlup7kA}>q9OB)6?%MgEP^FBShn!zuB!miZJmKJ_e?`vgJpX-mY3zX0sJUz8P zMP9oxlJMMiUC+n(+@1l*#(#a1YcQWrM_c6_mS47ykB*d+lOrW1m1Q#T1y=i|nQcL+ zTaG6`4Y-Nf;+eU*5zA}(&{)dn9Fb}-Ua&`7`F^f+5rT?EAQ=V5pujaYJ9-?$u&%ck z3B0_NXE;a` z(Vvh8HL8l^JwW4zg1)Qz+$&YGu&~?Brt9H7hCz<|_b*O|%iAXkT=pl%#Z(>C@MPtz z=|>HXzG!lO$^xtr0WVBjmbg|1qUw3M;WrF$<`BU^K#uyYY1g>yb-4<4Ke_d`hP3$? zRry^HE$XxwzxehQBn-ee>`t_tg_A1LgibBXg76L%bzm`0azCI)a|8E@)l6?XHa2XO zd1+MGzuU>+`vxd`>OV&!!HU~0PSh3pYa&Mt`Y4yA?ygpfT z-uu*asZywrfiLLIE#P%2rm7ki76yQ#!T2(c_&cMsK3eRD)4FwR&ESH!0gHM>oG0KQ zjQgGJ;D);uug1OYw84>q)oDecU!TR1Zl8)6CA-Jj2=t?-t87n_ z6}==i92n&Yz;K0axN}iPX%}vevx6a(ea*bOOtgO{tmjP6CeBpVUdAv!A zG7816N8UO%i)|StWsRKYE=kx5`kNtZ#5ARITKvW*AGAGgOw!#t0~5Aef6oB31Vw&U zs?(eZGf{jEaX({VY(Iaku)CCk;Rowoc3bJZ!PD;9X3$FJV~Pyj0rmf`hZxR7^5h`f-1lFe1D zWC2L9L8QygXBQC!s+W0IO?^kpUK-c?OzA=f&rGWuogZi7aq8?KAK$K)=gfW*Y$r>b zA@mf;;B%p(qH5}5E(bK#?Xe6=&`K*lyZKAMvYR*;E3mqk_B574r2}t9!%`XQ^lNQf zE}-ARY@R)~c)gS{5v33zx?g3B9hrutEiooW8YrPpFOMjBcv4cTO=mRiRAqv{Cp;kF ztl2BAJF0p-X1r2BM?y%FPX+L6Y$>C*j}9pQLkbQPz`FfM_RQXM%qw@R-Aaab^@~r; z31A~=%9~j)5 zN3sG{kA}?xGfDbquN(_-IFjPy171G@B|krGlj0)t8k|=g@TgIDq*e7^poT%uru(|Q z`4$yO+jz6B#M9GBPAiSrA>rXAE~JXu+QdFySKDVyQMQ79E)r4rx)zi-Q6#)4?S+|} zeQCA^;IifZ&yU3kCA-Vbc=L-gUe2njy@2O+br%{H)@529<0qwf6Jcj|I^jq9mWnrZ zNvE0icP$5ne^(Bir$eteDq&uPnh>TxEiqNjRQl0IVy(3>^hO@rP7`7{E@ zA^p-fXuU3S&y0)=p90Ehd+gVR8^h|Es=GeGWkynKtt=bXvw8x=JTskNSMQ7%JU$@w z)P`)-upmof7~2g~d1-N0R|-G*6WKf8_Jd}}D;^vT2v+nmug#22gI+(LzH7qxu=GNxgNw~f z`O~MaUFB{9fvQ`?J3wY9)torqQ0%(GNW199YS3mpYTCHe9A5F+!O>>KtHw;h_F*q; zyrqqei&Iif_~?(sy0;zoMMzL^LEI7e+_tMchTi~jWCHMzC7&IVIcrWsBcsNf0-_tM4GBlL!{XnW zW&15x56DYy$IF0Z@QR3N73!KAoH%emV38(5nnG)3gID6>y&At}0k&cZX?u2w zdtkKs6&`5e0XqErkucxW(V-;`tC|4JIkue()YV0PdvzGzsV}UILyoyfXm57J=eH zvX+94FAYGNehMssfu|QnT=~~_6#r00|D*th@BMu8vBl*<2#_k!%d+wVeu zMi8>3v*b#`oh+R(Rr5tSIq5Ls9s8cZb17twuswRk7J^_x0Og~lU&RB&G99-ig-^}z zGkq`THFsbw*Y}T;g>Fp0tHg`}3bWfZ)*UT4)>6ant;@vp0CD=;=GS`lSSaG?*MC?a z^W#UyDA!7dJeM{Zui$M>C15uHG?J*coUyF4Ue>hoa@rZ)*g-@Kv06z7>w2V^R#uii zY+#kOKHMsO^64I}w+EA`B(vRl0gE@BSiTxWWQQaZEKIVpB1xv$ZCQD;=B2`dAL0Gj zjnx9()|yEyXJ||Pqk@y)cW1(yA|)*i^snjQ955{xAN4mn5lpm`;mM_kd{muJNgGb* zal%~bSI(6(pFz#HZXT4SmKOoLyn)@)rKF^w?=B{VgrMA>AITr@KZAE( z{mqgK6m_Z_Y}V(`kP0mUBNMQjzr|BXmr|OZYxCi2zrVGrb(qBoFWVoHP3zxP&TU+; z!lt36HN83-qEOHcz6z7!S>72fJg4oEwfJxT$NBwPUH z`(_Rrd7KKcCNWyR=D z@YI#8AP5Ucq`ihubqxuLd_U0s2()maP~L5Y!w{drZ!=v}9t^srn z3Z`mXs@Up2X@3qGG{*Ew+qyt3PEMSk`{VUaXzP4h5&SDkiqm!>1aLmyKz~L36bbHD zHi&whESvJn8&bc(GVAgy`UbmW-Kt9~Ch1gqu-9L?2Sqm=2{b!ZYL;>&5^!46sB3$E zaBa>wHyIun8bXo*y}Ue}Mot>;r7Ld*pukcs9p~ATYAaaIbPl)f?n3YIupBhCv%ZmSXh9B2haqo*;0evFkHZ5%&GxH$WSVF!M)ZivESOQ>DuilT{85U zI~G*wpf@c=#Q+j@?$9msWa-EtYu3r2XnDbLjg_^r@y;$qKHEp`F)FGXf%zi^a%76a zxcB!bb_yf;?vnQxtLgBXyT1(@Q!!G#76s;>j5C!15ZpGd?i{$IZ9;xRj?FrAde8TK zSi^EoUEwyuwIa_E2zbYJU$eKzI0Jy`e{ z-Ofq6th-N1*^3{^fz<>|r0H0T$2H6s;4K4L-w>qb55t63&5l~wAC7zR28YH3i!XbH zBvtA5$fBbt$8N7-<%)jw|KvD_176oZ1K$JDZtlaG=+3vBwHe#1=Q#j55*W&o=e7Z)%6QXLdY#AV2uqBJwrc*(=(bYn24U3WZ??Nk^A zSpKLbbA$Wl31tLXQ?!*X^9l;2K*JMNZfM=$p~Wi*st&lDw_WH)uf5uCoY8q-fxmMJ zl`N)!ar54d!PVJ2*ys7=2N5%iMOTCH{MRH+ZpVH7(*}PvwgUybA4s>SuW$X#lO#O&*r(1z!cLs|+YJmxv73WD<^O)>COy&-g&_eosh&oA?zs@u}<+@qHSG+}qgwzvgq4NipfaZZ`1S z|F@_2Il<}HZQI&vm;3J{{Oo{;@`vmKKnZ{Y)a|>oBR6z(_22bQo^du#tVSM1N@KoXETW@LVkjP<+9QK z2($AEoTMph`a|2~vfmd=DN9%?Uk)B7FiY>ula2$vdG}}0LI-1st#5A5fVf)P2ZO$4 zv`f`L>Zo?4dA>_BDW#iu1|kY}4-BmTlFV9l>1C$0njVMV;*y=h!}aAFDuH&aZN2?{ z1xYRl38gM#9&VbE>ul)eapXAVX`@6jO-+-TdR-o@T|xYiSDTO9tSVd)zQF;9B`BDf zj*H6l0HwCP^^%Z)fWRQC)br_|(}jw56_-7b;int(Dvp^}!API2g=eetWNwnRxHoFL zZ`JFEjudrGo24~)G{l%Ucdh>-Y`2}MNLg*_l+Xp4_nGoGH8oSyY72HqE#l`-HOk%* zaaViw9+!L!G*1(8>YuFr$7p_~5PKdx58PRF*?x`rhl9fX&qY5q8Dpir=4b8bG$%e?cfzhQ;Y9CRy$z z8|Yez>d`yF`pmPYES)>d$W09kp>?tNzD0WDyIU*&tv{&W>@MZJEt*Lkac@p!Z9yf< zHcvcymNw~vYl5?`I1e(=jwO4$?3;X2mn18APNM4d&;DL}FYT8+3Yd)z4cxY^7ivqk zTxUDub`^Di*R57k+qr<AuK>~V^m-%uY)Y1?((}R+M?Bl@cxA~A;=^vY zlFkM3jyrC4cEc}UXpUCVG=F#ww90AcQ_mgWF!i?;j1 zXyX@~Ty)GJ6WnFYUpHw>HB5PQ9x_QMD5kG8yTC~*yi1F`_9?8&`vO!Zx(PHmxqf^`@iag z+T4Ifc}gK6vai6yP5sj1YH~fijo!atQoM#I^}BZf>XyZUR~&5xi6UEO$uI3#;6H@1Q zvsFak!sIwTZ-Il9GuW(d&eCFg5lPwP8?twdA@D*TUTrpWd}N2M)=rn#tfKu{x~K&W zibkAUmc0ILaHtTO+F{(T|K{omu;siAgIA8iP7r&dzo={#M9ts=-lz55~P3)T`y+0+odu zH^6!!0m^bTAfxzYgmc-fe-!jq>&lX!eYR(#8a8sbzd9Y+CQXZX#S%NE{c+l0UpErV z53R~F_@5S=hxw@Cyhp&j-0sEG%L8_5y2o}3K!CPK)B07_b$WrV(RU5qpo`4-!7ti53s1hueK71)eP&0Nep5aI+Jc>^(X8cfeW-{&Nik zjK`m!h33mm9A+6VZ-9Jgw9?{1uT>YZH(eN)oUCEBwB>XSP`mJDTQlH9*hmIn5}++k z}_z^IPq+~2R={RV=ICG;Z5u(=LI zoDp=r_vvw7U{g)}RH5c|-i3=797txjc>PWID~nOzOER)?K*zdX^~cg^_Z0vnP;pf{ zO#DV@ACW_&Hab4@SK#=C@68q-m15=y!07-N96j>8`{^KcXn6QWaY-3DCuiO4-C{g( z<_XAU_DdwO@`jb=3n5{UD{ZCgwV}AhdTJeuRP?L_Qb7^@oHh$Vb;@e~*+@;K@?49g z*#>E39Sbc}x>cY1K=~XQANy&Tfs~|Zex9Gb7Xo~wQVxGX_>fOw%A6Lu6X$a%VwPUj z&>=-6yAw@IbItlirE4IVDs^5fr`q1>2c`q9|EJHIl4%VGqIxtbiVsv{B zRFsr~7SjcRp0U)xYW9R;dmL2u<1_2SL7~uWtEZ-n%Xu@N!r7O|!Q>K6q)?+sa=ZEyHsIO`12rVUZL8FU}-gPm91)yLK2SXIkXA&|`XX zGXB>IlmM`vpFsS%Vj3q#{o?3;dHdLEr$2nd&2}2k)soZA=`d3YzXvOWR$VD;0f6~giEMN-|3Ic=D0baG!H-vYItuK z8dHmsL3}R)7Jo+s0UHo_Lfki-adb6{RVK2!KnzZN_CF2g27ti$baOB}m{U>U0tYA# zwcXbOIaU@6BwjxZr5bi&<%{0AtQN}WOM|=QKiZPm8q29a?Ons;slfF%J)+G$59GM^ z7t}-z7IU3KGrT9$eQ$TJSbr?Y80gqqUGn_1#`$qr{a#l|cl1OFU)JO^`4 z?ofo#cmBuePO#UoJ%t&_SYJ*Zp&E=hIE1xc)6s#G0AZEILw=sz%Bb>AtKT5VB1wz8wdC8*PLi*XHB~Zy9{XCmX=?O=PyUs_6e<(QjA}v6 z!RA}|9ijc*T5)tMPNEN}U4vkAS=yA5O#l5M(-$papoF=mF1gC{1CAQVW$@OHZMENQ z6S2#0-0qi`Gds5c%B!}|#SA~R2m6UhX?q>kW;-b>D`y9gb(piWKBdeu?ZGc*8Mr{d zF3>m?I=%OvkB`sU8lYc*@MGJs7NpdLWe;TdQ-Bsh0X6_8bo2D&ZFW1}{!>zpNkYVG zi~`7$Bk4TVpMZmgo^B-W}mA9Ot3PL)$%t;mZ__%{NR#_*2CKllEW-8FN zLjOj#mc^qr|M(uuM;@+z#gi^qGP=O1KdQE^%<^pS4tLXjCnK7AMmFN+h3U#K{j!EasS! zaV-nhUmV1-Omu#$$2fef773&8-fM6AdF3;yfbAo4KsICbh;d64&r!uR^r_9(f@tH4N96{TBY(#V+b{iu4!8Ni7ERvhIqg4J<6bvR)c*i;`w>*`o|G>gk^ar3% z;?)eR^_gteUaT0yE53WpIBe*8nLT|Jn9k(}1oF!L;BP&~8jX-1^|ZLq#&_j^uvO`E z$qOEB{o0)#WD0atDO`L=tiSn4EI9J_zB%#V;($2u2Hu(w(+n91(}N28P_TIEh5fm@Vcx6-ef*N z;Gd!aU$|&+<71GmPe<&r{=eas z;E#+oRisQ|Ia3^1U(dC&vQp1~DIpm}Y;b$N2bi@PySwJiKGM=Znhzh)`%an%?Yq=S0SDMa4QBOSW2# zk(kAi7hytrANh@2cr-SV2WEoGyXvcwIi3bCQ&ed5;N;ha)h~Cjs*`%7aqGj8j}?%z zwlNLK)t5h5nHOpFy#B4uv?jcjbJ==xD2v?X6TGIXDY-LblErbzd8nDXg6Xme^+_rGMA~8GZ;XZwy2?)Ywt6a zdARdD;PEl*K217QC{QPnG!@twDTYziWlF7e5U}|@{4#(&tuEq6zh9cQ2SJGt^TUPO zpWh#3lNb%y38&LHGKBnm;TQqGBikh+G!%Xn=-iaAADJmppT@W?*J4MbTkCW zp6lIMIuC*dA)>Ay%w_Qs0L#$Vlrkp(pFIW8_YA1N*7o+KlNfb&XG)TOA-9{3rjDer z1p_5*g*(&`Ai2SDao7M#8h3n!|LKUhv|HIvYSj51Q7(-$5*V))kV0ehW@kv%Zfxn6CTHTK+q4a39cabu#Eb+RNQ%fc$L4Pz9_AKBy0L4C1qO z_L9swFZt4V)&G&W{q3}=RFm>0EjF~tcw3W|UuC+gWw~|W?D%a2UrPJYn&nNkQSEv4 zb~EqCBfrHL$J-BfJ3w;iAEQ2-0S%s)?Ms36DeO3%*0(CePPeP%NCuLIPc`$tlrLg2 z4zQO!7O*t92Os7^Y*`#=XXS#0B|T>yHyao1Kfosjr2%YdL7D>S1Kym3c3|8O$5CTZ z#f1(hF>M?j+14K~H9En$ySp3ja_HzVK!9$*GsQ)eZ_Smq%e?Cw3=p-Q(X=Gflr2DF zUa%^kr))*Tz@TJjkDr^<0L;Ozt|zVZY@EmUo_nJ|x;~*qyO9;-efk1it_S=#AsMCG zjj=#IQVFyxCNgNb4x8Mf;?nj2vdZv8wkUA4Xtf^Vy8)E7*=FOJBOoCNr<{-g$oKYx zw6rt;HF2NvW#;QZ{2r%Kxp1^D=RPV`0+b`+HC)K zh2bo^R)^`CkIv)#nXR*j^O+TXG`I$=^tvvwJ~iP=SK|fghxXeBH*%suJ zLOi5=%f4mw+Oghb(*f0z&qe{9YU^EoHD$Ebjn;=RaH_r09d6Bwb;`ck|DiF(z+@mX zOxXMm0PSdRnDep#X-_8Z3nQrZ&c2jdLsI+XK*K3Hxhn{3TpG#CDG;|1ygrTmC?r*z zo2REPHhq7+QK>JxLYTz!$Vj#wJ9fNMPhv%w>;^jlBEvn*d2u#<+G>8rTue-CaGBE# zPlHQy@V+nyU!@3XswMW54qpalP%bL@DpfvjANRqQn`+3%vPX5` zQ%-ZSy!}K-_co`K%BvReJGsrDeYUah94tG}VKuOH{gICB`*kx+nZ>&&SIS$wSKA)t ze6_)s>vrmsn%XVqzkP#zy|*f#wzb)?L-a)dbN^&%(7s%waEq+2ewrYXs~{o`g5LF zD)&lW{;)hpWB?}ytI%Sx#U4eW^Ze+l#l^+`swWwHx26iN7Zw&C>5mEHHEkBwOcqaM zYt3<5ICAjdLCCTpAtCC?x@&-W&U{T_-fW=J`?H75QRsWR$##`!g(TX6{8{yZ)ep8; zUu`is7q5O80`wX>x(pLhyNUfN`jyMLIN6)ya73FHwo6_&T|ck*{D^<0K$(*W`^XKY z8d={pPLj{2GOrIDn(x`PXutfe`=K8{mzz)z?n!O$=wD@Gv`1maX4|#1^|#xWwCXE= z8ixcirs&zd_u8}iXP|i^`)9t^!X?V)j>~hUjLY(NzS1gNTwYyo5qaVTeOI#y^^_$98a!x%nv%1?5EZoTL{*-64!%QT@F(CzK*%|9YN0|e^cx_zc zJ}q&4x483yiN@{SslN2X+bw9iD)lsOwM%p8+k`*bv#|Zh_dLaro$nj3?K-@*DgOcJ zE3s$HnK!=R?7Yy)cXIgMAA|1t0MK=pc!SjQ>;%w*Pxvv=5Bhxqap&Tsahie-UtNhL z72&k-yQ@6VTXJds2{1!l#*Ma{-V4YyFnxnnWo_X-cI+7A0aZ7cmkEvL;NZ~LnkNcf zGTfvo{qEhnun>RCG~Z)T6+)Op;UgCo4O<CusqOVy#`gWr-|3kr_D zKA-Sx=+@jsKXT0WEn+r@!1omu7e6Q|k*!bAd=L{8)AHEDNVz}}W>`dk@h>WhN(mPP z0Mkp+!(zKQ+Y7dD_u<1nr-KC>qmMz$Y5i*CxX0Pqc@e>y*a!M+qqYj0wTp)hTn3AN zEa}Rp0^`&!Q(3p$6(UaMD559<|BT2LBYn1{kR5^NFbS_iJt&dDxh-5Eow*Ouc zlCJ;=+BLv@aNd^dUU@^s@=ewS87}Wlqwa9zYgElDi5f8dQs|lARDNhux_c;I@5M<5eb-2;g(vH%NJwyPS3}+xr=TC0fg{j7ll9HS&$TE1ox6@vexV`sshT zBb0{e*Ua!_>R#?atp=Y1pVq~HGq^Hrm|~)1X1+?oq1HX0=V?&-=we%3!;{NDf9tLk zu+}ZAt1=dQc3kdZ(D!%J79x#-UfH_(qh}a)F7tAzs|%_u=8o8V-T&r`v)WI`1J~5G zEHQYvxyh~{D_F5`>6C@qYgLYSD98f1H14FN@F6x#0BBXlFK+#Td0d~WtG!YC2LOw7 zwznV6vgqC->6F`I;UbhW)hcwORjh><(-DAUP=oJqT9{NLJlTt5t|Q~)d$_nfQQQ6K z>ywRDjzY_SSc~j^;GfaS1|2@j9tEelUqWwm^3T+~JlWrtFDY&}kyuV|mIC;cc8QEdu52dF<(zy($<!-S(#|TCSh6 zGVl*sc7y9wq~&9uo=u*qQ$iL3YoCSdxzWU8EZ}7pk5=8&82 zeT}_b)`Q`&zP`zsE2lpej%K0I_NlnKnwD0e*TS;5J>2!8mv_urdLAd8jJ-Jn?5vIL z6a94)>dI_6ahL0oU$VQT3odgL`>B1SL$>LFw6^Bck5vyMcPk*tC0C_=s&toNIB6;* zgjB@Q*S~maYQn?K<&LB6&092r7C&AGotwL%P__E>yyr(P*98N{5p3*|=SrV>SXswh zV%xiqF7U3$cTW*Iu!2qvnMBsqU`xsY_W|!A&;7X2Ecvy+fi0O24KF_Z*tsZuK~1ps z&1?FUMqhrjA)RRcaUle2w@8^|`FLCEqIL7B4IdTl1wP?-q=u@+<7>H4Mvxym>J_A- zAU`60cbxFn`0?2xM}Cp~$gYoip@Uz-58DG}a(U#(_XJ1Z=D)8k4QIqR`}5Ov_RmF; z*IMlV|Ma%qPwR`G>{HagB`(!P)!x@v@@(-s4I{bK(u0WS(+t)r%|IXF;o!>j{I;1GH(6z3@f2y1M?NNt&GYjO-0|(|r(c^UhtIytF^jiC!>B0g~Lsix**x zZ`9(Zx0QkkhJ;f&xwX;}*ux>0#jn`CbCS-lf+5ej=%?pI|rjGvZbULG{+@Z<}B%o6jj#*_y`Ejdp( z)efS~oq8J~TFp z6jsNPi_56MBII$c`CS+M#5tphg$+{kZt&}~|(@OKd2SPU2%|SzMf5})R20QgSUSAts}?)aS>$DY^JeObIgBUzSXcL? zy}e!aR_50%c*fQgfR;mL*#&Kdz-ij;f@Z(I3#?}ryT-ZaZ*Zm)Vjs&{WjoeIwM$S? z@asEp4oy=Hu_~*CgoLnEvOq0aHlr^S3>JZNKYsiexi%5?jozF+NFftvYisKmT#<2e zCOy6Z;E^F-|IBjX#;qan0!pvW?*33%2+YpNp?tTP#W@7GV&le*cS?2tO%A>%_V?wl z0%5qS9fminCWeh0Vb5L%25<$}nyGC9*L7)r@7%f5@XITD%1T!%7M3tomCfKM{7m<@ zpu8s7-)ZK@s*aA1+8y7Wb1bR9#A`f3x6;P#+vQ;ZAUBbyCMYR{MMUVgY_SP^`!@o* ziMjdZEiscC0`Q+GijP<%&j7$tp2Fz@Y9xcE2u%l77^e3z*LM8Xxj3ewp&^PNw1YKb{6C}NkO=-wRs=7aht%D%Fg+1~TTi(M}x zA`HJJ?#3xM49IE8GWz;@#nCHQSaCp$YHEC7ba?#u@r&?(a=M6H@^o8-iwlLoWQoO@ ztK>wGkHg`&?er2FykoAWrgr@JarG2^+SAYYlT6-f=N%#W6Nk=WezchJ;Kir#d(-dO z5n`$+seXUv2Bheg@P!OfAs26NI*?3J>Pc79=c%y|btiv*{qjnw(@AIB-!p7`^xByv z$JOiB=}rwcW^hlVSdY%i1F%jtZsh%HrK6*RZTqz6aJAU@I{fF^A}A!3q1s(1n(-Ar zq(P?}ZSTZUnJH%E{=LCs4*a?QLo8yS?SB5X8jeKk(`LkD)wf|O0pIRMzjeIa!<(rbSHk`{|SIHNmv?%2Qp)A+YA zCVUcnDHvCL>e8iMC?w>@zhR_;w!`SjXV~~C%Y_|(^UscTcmDhuM`C5}!c>!Lyt+?< zW=88U_d~aD`vL1pS;-ef)f*yiA7D56GYR7)aKzmnJ?a6cuMot057gix$KN+w0eS}C zn5L5oAJWp-S3LB#?H99ex}$f^vb}(6etv!ivG0_u>@Jkic*ST>@C{5o+ahSZ1tCuU z);#XRQ~dIyM~}#6BVPZVJ1bGJfsBdKNYM{Da_b>#b<4&1S>wzT^rh|uYU=u62buR& zY;A6CCQ&^WfX5^(ICwj(Mh4K8T)I7eKt@iEd%cyFgQGw65g|u!YstZi zAZuHxosddygz}3v{YZQ%=a;Ux8QBzZsKJMn$%tK&~1_{rUnc3MN$O`&f2Wo?`r1~I3 zCkYM1f z!hM&7NE3bO{T;H2DzD=1+{3)a7V9=WaFD96&Qk5$w@=!0%lodE&+t_~47v9!1_Iyw2Nu`$SDcC6;bF>1uIz@fYy5)Mz7 z7KWYu4r)EaiYR58UH+bNqZ z>cY8Zk@04Z!rjQs&aRD;-wb4e1k(fcEB28_vaWl=BV^&MZpR&BHjnYuqt85-L%TiL zvt8Ch&BosnZ=1Gck9K(QL?6+|p#=8iHTlk86(*^8Z|x>T0C3885eVT<`*`zhLyRKJ zUYPqaHvuTJsOGS|McYHM+DAJ?jw9~E)xHHm7q@F09UWc$Tb*ixBhYQA?8PdFmQ*-+ z$XOq3%J7CQO*!?N5<+s}MsT{3rAZxn*1cuZPO1 zt2(TW>1j+ag7`|=Nzb%JNwYZVk4aaHH)3z%%ipl2rS}mf#Uh&r<_)Z8VPScrohJuc zt}*fQiD%t7ttHqN(h-MGycs}UhAthAEDLtUuUs-<7KO>;JXX)*Yq zRyHv$0jvt!PjQJ_4|PHKg8sh=^Jli-$bF9}SeL7f8`0)Cy%UQE&wLFWicR%OQbSru z-$V>8@!7*~+WZvc{)3SbGXRk)9088AFDM>N+#NWtX`-eiS%Lrb+ply7%BKYaCT`{j zM43~!m#shtM-I143Fq6~4+z^^gw1wQ086+oq`D#J{umgrFaNz$*o@)=q_bm(>B6QX zhYoFUfpf6Y#2MBYD&id53iAL6+1N+7EG$?RL&dO3TgSGsvRaekUY5z+(vo!F!%TA@ zk+Tk)pCl!038Iih>kYDq+wtSyQx;75w*?)#yzJyd#@&1O7QN|p0`kV>+^xvp#BeDl zE>2bMP)97Bz>V}+xWUF06|ERtCpqEiBCpTayEp+_Sv4i-REdj;fnmw} zB46Mz)GX2@F_03DY6l1BdwL$i*Sf8|cgb~>HG9J>z3l9(v*Aqv-0F$DC=GA4QfLNs zY`ZtLI?b6-Bxc&FA2M;1a%cu=Efaviu|Y|Sjr;dr3`xF6))FP)R!JwZckkZq5H@q6 zlbCS<`fVQ=C`WWgQCRWWC|ba{6*F=0Lh3}P1-qsx9PMQRJk^Giyc(|KsXfmEcyuHx z2QsiYh{8yA&Spq_O;$$L&OmVHR#xwRIjS?vacgDspEGsEilbM~Xn;!L)Ttx^-ihHh z$;xrKEmkLXZJL3AH8kTS)m48cRIC(`v~D3wBNRAiuyud z=y>sO;~Dt5lqW;-r@kA3{7y!$nR~}$)Jl)U)f8~c-2Bw7kgv$zq!>h2*@d=PWZ1eC z14V#&DTJQYbaeT{Fv>Q|{@HJqw{GdR7u?<^;+B@@Km$)eHf*n=TcZ7iS(5`hpBsQbMfJ*u z&?)D){}__&8XB5TD5SAvq2l)SQ{9qz&8uN1NcUM+AL-6&u|&$nM&mQn5I@BYnL)Ks zMJ@#iY+0xJ=Hk}GrHb`%BwqRSFbN4ZH!rUrP8&pv-fu})x7z8{-~TLX_%ts`;R5Yj zRD{I$1yceVi{()bqhuo{%H^w8@#&TMdB$bBiH-dMED?b1(vNnOqHS6u?fNFHk^wf; zO>Doqw^}cbQWd=0Ty{iv3SLpT9K^p?!~01k-w~g4`Sf+YUyhQtV{Bw17O*J)^)G#o zs&JHOtOmcmhu@+yNQs--JUvl?+AnYR*CJuV8aIsts88wXH3T zih3m}Hni=32`FQ1guwMLjty_|)ez=4GB6Zkma3_S6?hE_pkjUcuLy4mR#@iw4Qsms zitFRl=ynyx?1M5c|L1U;fsexZr#K*a^anKMSij{?GosG*Oct8(>gh{Ou^D#m34f-j5zd1L^V`)qBE>I{#)kAC)yD=Xn5QD=?@Q z#cSp%NDxxU{%-E>KTu4j(yS&82xyX6rEbBdPP>(NIm&gMzH-=lOpFx3%@V%`Kp3hj z)4AX7vh_qWB>)rS)6h)bC?G}#Fd2l}u1t*2z5IM%80fO5*Q}U&bjrW!Do9P2g%m2n zL{dV8%{v0>)|d)f4XPvVkvbQ+k|2ciuToW^;^jaz{a@n{QKnK*E~Q`H&VTJF$Y$9y zXQEM~K)x?Gov26tvOyPv@t*Kd*bGJA1iFbUfuTt*fQ!&(5YBvml^fZ?C}D$g5!+z*p+k>J zkht<`?T(#0g9MBMOty%r+a(hM3CXz(RV=B(QKr2Fd1Yg7KMv@nl%jvS$->#X5V!(R z@0(M8@Qb#}N-x{-o*&@oU_l=l8+!?s1k4ZH|^& z2lPFVJ`sq`kRClyS?*PMdP%7Em{hVib{+0L+4n#)KYsl>ee@^=c_AFPh2U9`1bjF9 z&gOK!o9UpD^FQzjsf|N3oeK+Ih|^8J6&zG+8TS{+usG^kE8t^Br>1&PzxW+ExAw-3 z8;~p;n(7auH7Z^wKNQD3*?Gz7_=yvx{+yffRibcBxgf7lXY%QmY-qLZeXd&k;NHDa zbRlfqwCNLp+9(O}p3!DMK9CZ~TjDpkg#vKx$!y_qZerX1B(HE%6oa_p!@l@gpWqP} z$BATs(CGm{a2U@gni^^`lHZ~?3B;M=FlzxXpKCcEIq-^$b^K^Be@!_S{dxDsdn(-0E6_x$@U4*0k8it zIH-U`Jqt57Jn04EEf3su*Mo^eI@$`U6>rglT}T)Vkixu>h>=C$a(mKp82I7tg9m(Y z^rAWk@z(*E{vPbNb*t?I^hci!KfWU8YCP>a6sI5Gzo(LsDHe5lGyD5@GEfA$!JydS zv82Gyf_+s3jFfKLQihOYT$gOx)zediSg8T}n-G6UgJk$2af%HL$OEI0c}^_Y(Rul9 ztgJ$Z@7}-v%rYy>a^&-|H$}xNuiQ3kI_ZS9Om6fsHbbG@G__4q4y?MnxA#5?iBM?L zy4JUbE(G!F3B%li9odZrr;4GUZYAPJ%sZBwnwn;2Wi_%-<+9MtK_jrZUt#mEdwG47 zPhHtL-_Y0R;+B1mKezp5wUkd&CGEa_25arI<6{10;bQ(JegCJ5U|GN}{M$|(=bX4* zgr9Cy5dVjq{C^=hJ_>TYO^BsRp*HZIW{Sl*sKhaq&B4);FH`?7AI>VG89hCLg`5ke zc5(sXj#(4tzq0bnU+NaNJ>UMqxf`F#%RP{_DTFvzRaLb* zFZ1``*^bY*!WmFM^m-F%Q=k?2%b(IG#jwu}xx(52{MU=B%Bo2% zUj4R*hrHm|e;DSEtW9?oiBR(u(qX#ZiPJ+`03=j%p$ou5BY3m3F=uw>Bon;{*c;H4 zVaJXN;>cXH77oJ)VPP!TS-ZWq39#s~4V7GqXe3o#b4t;L4lF4*CK-i1^-EMzC{Bj`cXq>%LE)mJk+do0lhxWb64J zZ^^}We>LsPIDdEV-9tRA#8bVVeZ@ij^CKdau0JdZc2aVF7vAMd~nc_Ae7In0b2W)cYOcq^MXuCsAC;|K*=3)^*IM|Cloxn1(p7O;1cj;C0%AAO% z8-9ze0}LUThVAkTySLGVX6;&{;00+#tvZ8Rt{>M<2<1ON7Eigfl82>*R?T={FZkCm zp^+@$qjUD`1_~I%bN}(T?~}#tozI?q%sumu;_u`6#H4WUueK<~X8C{bvXEu62R=ac zdg9sKGk(JlkmC5}pM{5q1K#W{tmYg`6tNlEg(ABMU}GiiwnM0a_{&K#BPp5B?+mK) zI%fkClyw=Nxm&9WCM8sif7}74F!Oi zVE+v;F^vdwsGM_>vGiA<{8=@TN)yNM6hso^Ch(-ycrk}Ya-@kS=u^H)iRFl)Rros) zRPt78C)s51_(-tby4C`0PyV3LE0FSw0rhac2~p8Bg}PN4+%`hV@K1-mPu4`#*p%~v zdCZE*e%Qr^#}TmN`CW)6oj-ouMzGAEAES|6m{58Bq7Bs?2&Qi)u#c@rcu1Kf^@-2Z zrx*aZ8eyg~d2R!J={0aappW&*1zfWsteYk3L-Wp}_zP)ergJ!bYtT-SmbwHHfz0~^ zn@2kE!%sY*xOsaQBV*7>&LgpHfW>lo0b&FRQlQR>DhOJ!Da-ZF9rY}Ws9)3gV&fkf z6x)Y~6>A49l=&b?L*M|eg8*;l7c=M#@MHG15Sk&%%^len|t%g|zx z714=&V9?-Vg_4{C)cH7RlcN+y?+}c7$JKSs+O-|Tuq+|bn!beU3N?~H7;SVDkZ}Q& zzNQSGxA}`lKsN%w5feK?w+ssX)igAF*x2skNJ5pk-DteBz*vwE!+uGf13XN|4}iT* zwP>?o{~FWC90Zm!5`lrDSPne5|kJEjT?_6T@gYQAEq%;RvH2R zeTDUc_DZC0R>JY_-|vP+90OnP8xmqHYK86kB~Hy7TM305nRiRkab6HWKFa(hmNDm0 zR(O(>z=EJ9^^lxGB%PTFk!lWgt?Bb3nb$KttO!{Y#`~?LkU$*5D2&FcBn+rS%c=r^ zg^1PQmK(XFD-j;L(SSv2hg_iEi)eTKng+A#>9%){wrFUb#Wh{4i>4*7!+}ia)p4BM zgh|hr@ePQc{-f}L!4M7FJFwA@zjK%!OwY>6fdRp~>1u{?<8f70zm~ubSV^w(Z|g^$ zhmC-97=S)s&ccD`DzrOxj7SRwWnVjseP$c7Y^C~)omy?cjYctpP%$xtJsqd(Fbv{T}$ z5$|UEBD|l1gMUEBvKO5RI1Gp(4y4nbC}tqeDUeFKQK;$x`jf_FFlE>TJ}2LXbln73 zghu13(AIKzw0q#RCR7?^_Ax;7F)+i_iQs*h4qhyQ5&i?*;e_AEO*x&i{=dCr@aIBE znFj&p5*3(_Di*tCQ{wU#MX}N4fJ0Hpnnd*=fFA$1vFfl{`%xfTX)L!0She-**Mm`8 z4O*<#rju6NX;u&1XTZH;}m+|Upx;rRRPTWxWysUc?_uw|%C#~M(VM{(n! zw(i1MoF_V)d@3*-O4$S!sdVO4&Do)xVREB^jnYksVh3;O&EeMPNKhL=n-f8{X|;Lq`vhYSJv_=6+Hz$D;kc6hYNIC@d?T2l6B`bB z@IC^2lgTs|2@9Lvh6R&Dv8e&Q3l@=^Md#*sf5Gj>j@HdEfm{av4^5)j0|=PEe3^gG z%@KPSk>8Mw&?2=NB1#Mh9U^){Mf@(1-CXhh{qA!Sr1^>pjKUSj`&?StevlQux2|$` zcZY@j-TJl}2{TK}!n(S;p=Oxa*x1<2X23DNQmd?v!-ON96Ic{U2!o}mJk>t1;*T^M zj0&v4Ymh%|n&Ri-QX$HU;PQE;p8o!z z103JHvKT|2KUWcuyFhI)kkW^`EfP3t9u2h>!9v~$N|@^*=HTEklr7QbFis0P`6_fW z!n*8{d4xHF!SCkeNL zbN2z9v<3n)F`MA_@*`f~ZxI;k8t0(fOgjwM!(Ld!0A+cR@UYUc7qgO0!rs2+Aqp?z zNO~BUi^phc=dYebOe3^3K*Lsawu4942P{NP6+MR|QvThpDIP74rrQ_y`Kkb4JOcW; za^;F~6QC=|D241|ki*DlwHK*6LCSWx(n%yPn1Xl4onxG7xy`Fr2KDhqpgd_sV%xh{ z`OQUY=xcj4Oa+K<->RluPn^h{Gc_GAv5jHx0=p zHhu4874dgu8z==p3PgCpQl-+GERfXIl+OL;%^R#SsM3Gz zBp|(B8aF1BW(5qx(eHN@k0%l+aeN>VqRfY>%NN21b-?8@1a1RJGUT=RoVqwQo~9I{ z9}=E`xJneB@%N{TFA*4o-Gd5&4s|j~ie#b=(&b?E&gNKL)kcWPP#E33yrQrom{>CO zMrM~=a{@N9$0p7q*mH`o84VlW>_ogmDtALYxNHOim>!3OC;)S1!MqEQge4KF9BBSY zmiolCYp+BCgGE=-?d-blAa?JeO;Y#tWQL@<l=P;Ai379DGwmy$1ye5^hIlCx_BY zDdH1jR@!$a1WA?_8iQtS)?5@Ux?-z&J7)tJ)MHGV#deOLkLNrpVD$BVAD>c}m1SXR zY0#a}p>3`IR)8x1_r=_wGXHZ=fSGq_p6j6rBid7&>- z4U?R)eR|ZSCCa(MH!s~HJIRbDY?VeW+S28X^>uGU?dfg5h+_`N&7WV~;o&3GaqiQx zoB?nFzmxSV3Cxp0SBVd{B0J6X17l`{ctG`c6+wlOM_Vi>?nwl&ni`A`; z#pli~Qtenu^oeteDA;tLVbl=I(0I&HVJ? z{b$@KX&F|XXqH~{h$h+Dd8D(;|HpE_cf$<>?>Z!UMXGJ9O6{v>B?g%BP4*~m!Xw~A ziJt`7;r;jT*^zO|Kl3n-Bp3f3t+Eb*m1<0U-(4F4Jw3hfgoM*5@Z_@(ymVtMA6W$Y z9s}O)5dOls2Pm9G9#r$~Jv{*i!aq=&U8|4Z3Y-hz!MJ^Uuvp=FG8G7A)-hyOjqIDT zzM=m9pE^Ey03H>5|Go|95C+pQySWHL`7~!9hO*xds}9fT+SR*5{bAHAvhGGw>qFZU zmiZ%`SAc6&C0lzW^eeXb`uZlOrgq_aC?q#Q;SM4f)6wy=tGXKfw6j3AworoMnYoOh zv8@T%&CJ@mxTt6)1P!PW5yqT@!q|soU>0!6B_ksbge}c2*(?tRX-U4-_2AsHb|cI-e{|-$qnaC=CAk1$M~Gmx+l< z8V4=Yc}ap?Em%(ys(~=jX;uIml|b3*_3Mj}i}6_7)xM#GK; z)^`JZ(@|0EsAG@*nEte{#WE}v4~59{pEJLH{d%b3O+~x&8{T?fS@WB2hj0Nd(xdb2 z+q=js$XsDBlw%?JGXDPko6u*(s*;Gg{eUE}LvDki;}Te@S;2?Id4}6}RbT%;>S|CI z3>4CO1|beq>RnuhIXqQ>J4$h171P8UfMK^Dxw-#wUBM+|?vRFO$WEg}1=0PTU-ryoZ5QLCGelG*NUv$1C})hc1#PJU}CzDfZ1v^mxm? zC};qH5V!nR5?`hHXvaz7eFiFoJ+lXVbXkTc?k^cIjNe0LMtmBi|Di;K^Acv*&CJXs z!VF97MA%HH6cu^is5m6__4Q$ke?ac>O9d%I4i}mYDKp@0(UH0fbTrBWqJ$xvP!SKY z1~@ZP`2$&VJ1qJ+KLUd@-EisIXv` zC*2N*`1y%dd&~CiV6~2c_Z;(sDxiQG0s3y>*llA#NradPtPrMjP?Ophr}!hbHAn~h z@Fuj>QXjRl5+v;?P?!Mz%Rh_mmMehehKvT&(9qD;*RO^36sP5ONYSwqCr)6v9-T{8 zmIxpYSf~d$Eb3VzajFM)?aKsYroq)vzW}d7+y}&TjPmu`4r{DEx$Tf2A`%k3?%i7f z5_{Ky18Z@rcNu7#Vk=Sc+jWNZ2-nxwW5m)*7gUDHaF(N)J1HfFx&Vz6sH3Q0?EeH; z8wS*N;DBPn86ApD)ve6UZ*?S50-XZ2qx~~&^Ahca3m3`^q)?s*#bJoqSyJMI*rV$E z63c)#{_+e@%u~cyN=i&D`0(Kl#yrWb`H4QKe*8Ol)ITm&WTksR5&OgR!b<@a!0jXc zkh=n!9NivrjjfTV7@$;B&44_Ce!L2AOoWBY_#hk)Qm#<2R*K%t;!oj!va_>ew~#oV z`wF4<5H1N8T)G0F9%=jNFnCcrjyeWWMx2j3B`;t8L`YDO ziIbBvHEn6-`+z;moB-ar>7UmMl>^vm&`7fmz3-h7k>_F zjCwzv1O;P4K#3joRSg&@JS5OK(Gi6FP00>#%g99B<^IK2NG{c*{WB@xGRQw z52oeeCa93vct=+3)_#U}f_I+3etXT=1tBr}XLDDMO*h9hW+WCRe+b?5aUe$4brD5} z*U@osL0IA~G&CL!uX`6Y`UeJ#9FDfPZD+tY6+Cj}NVRHoKtO=9mFZUR09p~t?$A_m zwe#nh;QIkla|em)z=?xi=57eDR*HSrF{GToflRZFGq{*3@pmmzQN<0p1*Ol?Go4yU>jG1;s5+lA50A4)tHIu13CC;OEmk2xFC4bdp)Sef7? z-@A|?9i?nOJ){NKM&!ClJ|UrA7<0vJMqCg#dxDI@IMM$AsEIjROJ)ndZy`=A0)`&u z<%KTJAos30pPQRIEOVje2yU(q-VqGiI-F>l!DEca8NKoBnW%gDFo6-GM@227G zTv~M8#(#~{#ecqR{@Q5r0tU8#22~641uY$N;~hrJAzc$lge*}2Lmbh-u+pGM5Moe8 zue7wZ)C-f5jA3;qx+G9wGpv@?U!FIw_q_=7A{n-XAg+RwO1dYZzWM#So_665!{~S3 zLx&0~Dm(!T4(yp@*4jUDa>#?nPLX?1BODTR_07rEJAI5B|&nV!&To*uYCbJ&bF^dVejm=FDR|6Ok4-Pg646G3m5rq(z ziD`5TpZ+>R-XId9z3eXTmYBKy8yuo=Wy~S9+zal@0Zl8P%uDZX@RpU6V?`E0Y(;TF zz|}?ta2F9VF~yi!Nhp0X@By|dsI_zyWN%2f&4T$*s{Nt9b8Klas+JRifebY zw!zAXYXvGpH%XH9ur_GhSyc~PiE{H$f8-D_QVLHG-NvQi>6Yb)h(Yjo(*$yVjHsxr zBr{*pu&|B@>Oh0#(`||G-bo;K6PFc+2jcloq?HYuL6Gv-5t0Jo7ipd7tzekDkt07j z%Dwd`8f&aFJ6`Wc&yYpN1(2ydfFKa0(3Hmn^_l{bi^!W~>M@EfG6e}1BKfOqE*stk zYvQ|M`pUIyZlHQ_A9;SBU-)WC73AOv2ok4I0?i`u$2c-n{u5uZuo13KV<-i+4$vK_A!BB&bL zHv67E)JTI-t4v`BkBpAS>0-jApbV!aQ-VMGBVOX~k zTn7N!=eoKGw13IbEOnOQM&Js_#vy)th*_7xq(aG#FYuAc3hfrIz6t_|Y$)(Ot0^)v zGWdG4%4JNffdHhWq$)3`F)}g&Q$d~`gOSbUDR*u`ibdMNv7^Qh&g01Bz}y*HR2BycE5nXM2h7A8h8jEp5E_Anu%oy4L3sFX;It^b?a`_aVb{~15k3pj ze0)Lz_LOO;kK*y%Gq}mf)7xNCiGl%*NC5aF$I=^}E=+`&W17Ovl)M0{rSblOs|PRU z9!S4dUbFxX1plyzIPmL0f`m%UBB<`}UxUA1 zaZrC!$Ir*-Ho|1Wd82i0n~uA6FtV_C%S9cJQa0oon`D*yJy+S(v>o(2x?&R|@oYPD z93Tub(iohie;G*S*lpON?SCW2R_-lX1PM1Dst*xqjo^RUn zQ8wzhqGFiPfi0UI6`f%(@_V6kU#D9bsxm492eixNV!|u9NK`8PJ+Ib~G0}d4z;t^6 zh_R!4w{mlQbgqHtq!1W`*sp*wAOpgqH6ONm=Hw{H*o!vUw&1QB8ToO->m-YuX7xe} zF{)x?5Mmm!>XM$`$)iV)hPKr*kO(4k9UAiyrYiH!U6ylW-np6W22_H?j{Ojl2%?naB; zsAS950}mg>xBh(|JNYuo8&S985BT5>QGUz+>u`Av_GAAsTwY1;)aU>FuSl&iL&=PJ zGwfPk8~JR-SL6G0vIGKZ}j!K>S6&TX!%r`7uy$*tPDl`uO|bOSgLes~@!+ zdIdIL_4*h=`kMfpNR@=zTK&QWLMp?>?*%?fT3cLP9DE0VEvnd8DlzNP>p^M9Z$?H% z{lLf@U>}cPV%oP5S-*YzHiFE2zz~Td1`vRB$YL=^AZ3`(O_?C|9_Hs?UeMOYVsCGc z|JM(?;nX=DHwScvJ_7LpGXFMGA(3=pbGV15Z=#d1-@v(lib=cpZj>sUo8y}NU4lxAuho7$yp1g!B#)4?|Ic4<%(0Mvk zBQ-J+QP*)=i_G*vT`G_+=`ceWb3CpJB^zOsI7TioS!prDH>de-VM?=m0f{mRN84KrIlH0{9rBJwN7?O2LV6nC%Yy*4RiKs;CRrtX@r~yW=ko!= zK=B1U#|_oGx~66w>P(PnekMqk%a<=d1T~dh8LAHCcHP^(oNG6O#)q>2RFqO}e0)3_ zZJk~(pu2#$4*aIkdq+WQ%53-f2?4yjG=>r2IDe6Si|vk8>1u!PN&yA&I4CIAp@=du zIZ2G9uwERfKSDFg59R2ghlj_;krQV+U%Y*LBUCyc-^0A`Gil@3naQMMkznKE!nd7{ zDO>7W_=+{&TBB=Z6x=Kp&Ux!o0baAGW4mS;Jp`$$$A~pKt z&sjYTCgBR|Sh7ZgEjfW$y%7*q6cO=jKx0pzJ_YrB47|drGiQpBkx|}}CKfVqX>#)1 zvY`JF?{cIqIW+1Z(j$?DftPp1Y@P&(2TR+gY@N#(%uJ>);SP|=h^R=D(7^{ca$FbD zqY#wzL5Yx*3v_5y5nC}CIWV>#TWkFe;TO4*pjl8sK7IDgVsYLU;p{fr*-^R00Pq6g zKAo7j*)5EWL$UFdx zj;iehDp1n!t!QwYNZFy4=&1QeunUj}W)(g3-{R74ai$ z7aR*Dh?61KCAI+|XNlZYeU45knXPa0aW^$joE}W2AOwJF+<7vR1DBj-KYeiJ%9V0F zuD}}jA}CBQU%OU<#*V{6LNP#;P*v_=(^4=>RtBDL)Hg41zX{!gh}NT7pYkONaJ6q> zU>vm@waD#ce98g;*Pj>GK6(DU5_Lup2Av?B6}Gm9!jcF9BfQHH>@>hZBzkB;t*iyY zg9SDqCVrn*piEYF_84Y&aK6_;?-D3%ip8BF)O$79(SZ3ukP6|-=_WneeLsKlqLm%T z?rf|oN(QAoyIbVk!wH9W0w(a2)zcT%5-yOTj-zqzF>E97ffMc(u`7 zLSn(u5o+&@HGosc6`V3OR1hNKZTH9K$vjpN9%F#s8_->kFCCV{{8G0x#A)|kn@_0J z3EP?sKc8vayM*O7S>ivvJz$VU35Za97Icif3X{in;4@4b?S)*2(^mtZpO~e8Sj<6e z=wkGa$%vgQxCvm%3O;{=k#OMm4{sMVmPI&2rw}a36SlUSoV~Ve-AX0m z5h}hYZaLg4j-n*a2RcC#w%$Xsx-iq!<=Io@O5a`bLzM#0Z0aOMuJa3)1I1lj`q(4P0C;*B^Ie3JKpNz~}M4Krl^CW+E1h2PtFqV5T zTdWEqPh#RBXc&noD`BT76NH6U%+inZ-0P2o{fG%cdL{Lk!avJ_Otf8*Ph1< zy_m<~M)eKFlTo_MX)ea*qChP>zIDQjIDPAjE5SZG#x+WC%tkX_! z9aafdOarp+vuQ69@lb6K;Tnz^A6B72h`pu zV5{MP)e!UF#3%}GaUsTa+G_5LG&K9Z#hft>Ncyv*<(Q`@X zP;{@v6gVP}!sYO!Xqi(M(p*fv%|Rfe;GCb| zvjoY*9S=?zbAsbiG4J})IHE7aXU<_39cOU-56Q!TP=0M>WMr$mp?#H9T2gB;Y8Or3OY6Oa4j(2XP!Ony^9!^H*iF=Rk6_WU09B1=xK&{# zKQ}ax-$8{7a{dG`8yF@frbfHm_+s(cgW1{H#2SMVsI#ME?91GyNbGoodg9y%7XvK4 z&11#!s^dsRVC| z-PE+q-jYY>T?N<!6(G5<=IXbI%B!f;EZH`HL3@Bky4RFXQ$emGApdEYK63Cu-3g+(Wh zCoFm|a`GQ3MZ!V-s_wT=1e}M#!NEo1^<`;zW6h8fLPQD?zaQr3=O=T6Lx=WM18)Jb-hzk=LKV-)aw2!z zp9j79kzpN#V)9BQ@*&z2Kz~*tKNHg=66zJy$?(yg1=SCi;hnrZaX3fW(cglCClQ^3 zq#q0CbHC0zG1P7`TI(0?hy3dW$g!e;`ysqAUIAvHptN)is4y3Ya=R~2el8Ok--cNd zuak!B1_Q%T%<;nUiZestp&>jos7bfcM5MvUjm?1#a~Dq-2KI$Dl21{C;F*6;G!BrG z43af5xWY`c8qEZtk;sGz(9Srlfia%Qum>dF0Z$)#d7Tao+gb4y^FKhd7Gu|BqSQp- z)JOPdKjN3dUsqqR4;v8ar67_!_UmCl8WdX;(lE@%wj6glHO=z(Niwbh?I^g-dSiYK zxGJ)n$VK3$#A@XTlCB=?-Tn3Bc3+A4Iv()_caT&to}Ql9K>Gtxt8B|B`huYGH!v?Q z8@q_N8aKpn;^x}X*Wm50;a+`97ZR$hXEHY&XM6y74apR@s({k2Q92#G;cYsUjv6ew!}c`!CogB5 zIB6|n1VjIlVOp7)&x1vsTe97K zCYt)0CaH+(gYplAU3D5EYXFhXl_r$Q43Vx z^UuG6jR-GsC9aZpW?RA2^MvpH!*Ah#K013;^gEw9f1b2-@F?1$!Z3ungc2JYOZucR z1?$S2=j0=#O8+6NY-_2PE$c%*OZvJ8c3!kS)Zlqn1e>5{%|Z`R(#|DA(&rDWhu^iG zBxc~n@~P`z+7OE>oQcp+j^cA566)Tz#o2%pDFS`JD-v$2b3s6GeJ^F+TVMR3pel zFF{i^LrIJJav7KlIA|=&@0>3T*6?zlKBaboF$ppSS_{FB5aqV8s_GHwG!z5lm6C`A zfIb?TX1l=h%z(}dm* z_mz*sIJ905cy)=J1q$RA*oSc^5B6N}2t0Xbku~ys92gE=m?S8mddE=^;6Y(D_*i1& z04QhwE3O0i0XPz!fX5&yfO*RBl@t(|bT8gt@(+JBCh;Hq5p4m=p#R?1bS$Ek zVXr~~NNDK1o9(zQ-}XkRtixRpx-N{4fiJ(wl&xGZI+B5cXoSvNr z^M>H)KQKHwF+sYMVNjjzX~R{)uUKZUrKJTl85uDuaBdKLWLwn|h;FD!0@{X#hAVoO z;AJLO5f;Y@dVCTZCGYs`kx@p0N(Nq|AcF6K+#VNDtcjSQPAv7HK|!T1BZ)}pBXT{C zh!ipwz~hQ`MAYSEgfS6J*Y7;S*mCl3oLUdQo>X5Xt6~HwVj}3z>|{rTZ2oJXT>y^{ zVQd}<4;4cEz@$r>S)uEpH3m=JdLA__ti%I7v|mroa_JZ zAN^=)YG*`BqEd(oAq|lvA<0%&*)w}Im6FIvW@RK<$)4FGl#GOILUuME=kcn3_kGU! zpX*%b`k(7u|Kqy8_w~EK-@@npevRkz@qCOmsDcXd8nIb#EW7_d(22MondGiO^+Z~e z8|Y|z0in+HfP)~RB+%Q?f~*cAej(onWB4-~N~2?aepbsh^wIpk0@PtwBXj=zSS18> zc4!M9`TNtO%_n^|%Fb&#I(MPp1+|2b`3UhAJqMnNBn}kti)h0z=_52{6f!8hSSjfG zh?gJgR!S|;m9imK_m7?Xo2P6fxd@oq$CxCyWFhmcG3Yhld?ZJ{goSgJ&>vjqY2jblm3==Qm zR*;4fP;yl4rvWNZaDfnlJ_VewL$DFR*}%)k2aJanZK_8nfr?O3AOCu2jNIPE`)vnI>W6U^!(q?N=Dab|)gqWfF> zR}Z8yyYA`QRZM)5YwM-b71j0Z^gE)u^SDK|`#)mThQe2oU-&xSVn?cj( z`vFzdJ{qyE4{LcevYzAE2atLWpb(%d+n3{8$fanz4I}w;p7wDN{hQ7HzOgfEH!%`q zD)4|chAYN{sHib00iS8d& zAz?R!<1o4~(*zU&8F;{a4)OAqrZ!84mW50*%zUYn!`&aKG_p-$|2T>btOcNnBZuc*?qV|@yLD;1LIU;atV$MGT zB!^40&9lN7>?7)wi`)=xazgsy^wabB+2xpq=v@CZ6?0byOq!68@Yz=M*d}@G+)hSX zix5k!ET5OdI2g2Xe*h#S7zb!r#P21ve;W6BCoT)S8k@oIMNnz^^uB9uuSiGhx+eJT z%mIzx3{Py=s@U>k|~IkB+^g>U}4r~%FyneFAh51CZy9~kIewS;xSg-t^f{d&cC z#a0jr?C#Ht5vmFrc|4&{;FLgt>e62wW}BR4frI%d2?(Ih=##NI_HG}PN8kjYRH3DS zP@?;QR2%}fC0g2#YLo|B({vx|!he)t(QS~NaI4d-QK0K}FwHwU540biusvBIt<+3^zA zv+oy%bU1>|)HaA`WdPJaBC!U^7@Og>i~l&@1!@_gnZU3_LaM?zyu$d?rg-{QvyZ;u zwV*5G;JW;d7)hf>_Xen}!1!bWlq<9T+I`rCrBzj==_B$yGU+kRnYoXa9?h%#Pi9^U zX!KauutAFCv$;Tu(+C*oNv5d)l@FUNE!IS8Fa^ZIGw!e_g*%lp|PoKz9f`7T<+ftw0X()Xy*S{2#h1Abhe;&^5pa_BO6Q zK7%nFAm;^Ls3Q3D%O~&VmL9^m7^(vG5XD*;|9nADg8{KxmaP|TA3p=-!;Hw^R7f_% z&yxx5FfARk7V2rjH$itvtT9DIMML{vJW%onVHWIOqWS{52iC$J;G&q>ECUDRa^K;@ zyu4xHlmSmRN5>7`HA+T0wDait{JL&D=w(0Ya_9x7Yw!osK~L+5VimV$A`0h-2wOB4 zI{NxaHwRU)d5KUAoo@%!HM{oiMfJ7@CPC65-mMY60P+H*ubZA!@G*us)^V?_K|_dn zaUK$(V%{A!1yY2WCz-*aEJ2ONh~e3uD<+_UPEJm)WjW>p{eg%s$~9Oyle&WxBshF} zP-&t=ywGQaFk0gGNswmjO^e!zl(dQ@&C-9sOVpaD8m&FjrBErBJ|U;OPqIUu<`RJdB@$}&>^<}`0*U{k=Pwtd#{eK_GpS%5^j&{QsD}~ZP+VZgir8AiJ=)u7kEIE2t95CYmxy0%Kpb&bu`T{n-uqN z1pp{1D;xjZfIXxLJw-HVq-2DJsR1NW4>4y4*z0Xd#ekkvW9ZC?J?lRk+9EZ>(f4Qn zkxAS!TOx2x3GgXwOwf5Mp@yW8ZS-G_l=PlFGJ3$zj6&gy8hWf?z1ZIFJ&@;t|A}u- z%mnao(Y9^5QvbDH7o8*_DVGI;hXB+JpdGhWZu2-4SQ0tCtSGxMA_XwZjo~s05M*is zU`>X6IO5Rr-onAQ#rEKuOm0sDU}2yr#g0({6B5n>P-6;U8DQz#xmUfW&f>lxdTKqfJ>6305@jZ@PJ+0 z27WdTjHf7=9^jt9Sr`Vs28y@N?(TcOzFSdbXnhVlNoHLvEbH>1D~1Jx7TDPAQ0iRB-s;iw(K4zr)|% z6Kvxh{|Ajl{xA6a`43eC)d22bu!NR_ zyhCHrvrhoj5L|7clhx+!W&5^K|oG;Xhr+>Xvw3!aG6j4vrkj z^#aR~z*QI>p9{g6zz-S*rcM>GI3fK7&>XvR`xbf$HDf&S1@pz7oIi*D zGW?5CKcRrJ009|OJDRTFLm=m{fX4vD5KHkA-ZM~KIgpjfAO;^~T(sf8`znI3Vzc4q z@HmF{t_D0+44nZ8bpXhe4U*UyB1^g%^H*tPwGsNEG zf8fvITWA>rtQ%u75-`}D{$qH2;de7WM|cSpGqq!(W6HM#syn+@z~4HFdans?jwR0j%kiSz0mm{ zAGfx<1OO%)BohdDccbPc?o^nBEHOh9j0z93^eAsJWR-v_a1mC2AcOk+&~Sw=00%Y( z1>3K8Z54)db>C!v%Jg;m` zFuXH8X=2+YCh}qLrnj zrDSa>tOsNx;sUlwi`7Ooja@4Ld1GS@Pn2ZEjg$M8?S}i-8bnmIu7BTXf9%=t?0`Zg zd(S zy~f0~uS|61B-X2Bzb-ck45 z8Ie|QmeW^weR~`0(Jv9|EgdXjle`^DaSk^x|1f0qJK6f`=++g^kKd|S$?ETM-kcX) zWH~nUE=o35K`HG}+fsRFu?w+cCS5L1A6pGMc2+O21eTqjr(Li)5G|;)R${n&P*nQ( z%?E*}?X{a@*PA+0eT!4JFFn4qyFpuM;(+$ulPp~4vn0a|24;iwc?v61QB)FTHyG_8 z=yRiuMU_RL;fan4jPm-k82V8@Ak-IZS_?uX%Fjo}Lm{|hcq{aA#37KtW=&0jSS$Ov z#>A?HPE^T;O$@h&Vt|1Xni&Ud3EJ>AEu7drttZy4&gJ%mJ@6jHuAzy?>5fT``};~L zNpMdabP@X{>`8|Z3)0_%zC*-tXwiBhpC@)Kk6DB-@75gJ`$%&8+MQ9UGg2PAUtRZs zJ45w#AK<(qr>U$FP!K_X)YH?0n|d=&V&YAXtH?bgqhrsrc5pXGS6j@xP#i@rTYhUv zeEwMB=HM#LNcH@Yc z$9U>{#$+K6=~c>EN|LnF3dT37US*ttU(YTszR7=Q^gK<}!#IjR+Ay+`HszR(&d1*^ zeasK3Q)>G6Ba=pTIM%&2_!5&yr=l`)=K3+QAg+L`p}H?p!t*a`mQVFd_5{169kHkE zD=9cK#^CbV&3!k={2bHq6xW)=EldJFg{DhBABj1a{-mXJUienvZV|f#Q^}C5^`}yM z=cn>^l%B0lVmWwl|C8q@W_E<={K&12^_;V`X&KWOySmH06k>_(5`&+EET zLru+mN16KdPnaFAI{tq%+(xb41@=yT1PB}ep*!F{gds0zMZXjVm54Pmv@a;ZFWaZF zwoaj4U>dFt7IsTdxBELQ#bAiI2@q<(QiIF(CI3C%=A2Sv#kq3~t*I1<7}L;B5IPPn zDLW<(g0g`DO5E*hQyoWJmS?t1)m=cmWXBSw+0M-472KFZJ&TA$~? z$)f!1`TN^#EO*pW(?Xuz+`TWb>#$E&^|dlDtM^G)rDUBrQW}clAMH4P&^q1cY2{F9 z(752XXGN?HNqyfhy734P97>4bKAHVH`uZ|1=kkmF)*?sOL>>En-nvfv#2WQ&Q?*e+ zyNpBvMn6s1GnOAVK2y}*`R4G=V~TeyFMrL++;wHQZ2AS!H@rH(b9qALX0}G`!sdOm z{#T@0)X*i>)Mo<617#;<#KOiS8C_gv_UVXNrsMq9j4aN8^UV@A`plD}~m~z|Wl2GMgC~;JLU3BnrFo z{l7B0N-!xTaZ?Z>NNLmMpi&16LkLos+QBDR7OU9TcY)Og1}Zq3ib4Cs4YC@4hVUtx z^7yWQ-ifiJ5SV|!;epgGN7>;aK`ZBoYy$KZy6Ca7X83SGk^UdW@ze2&O&>oBO&tMT z2G-IO=m{{5+Ks{zA6N@i(&*?LQX%(kFObHfkn4>jV?uOfWvIY=saY4vi|397<@gl| zn_iboo=>9fKC=J1Ts`I0V)?4yyBAwCO%>E3%d1(Gr0IIH+E(RZnNY!^YF$lnR!6S& zT$mT#?6Hx~h@deS>SF1=xTA|tF716yD>`Tut)lVBjdAbmC7YgEO6=(B320CZ^@L(= zDs;l2Ry^vOZcV&~bNl-p%-`0XSRU%)Hr;>e-DC3x4IS#UyaI*XeSQ6}-Ae7vLeF&` zKV5M);`c1QctzgR)k`H#*fXtn{x*?sy|qIb?qu%3I1ICZNswd-3>t_c8y~u@v-1vU zYlM>u0r4_WZ;7)8l&PRBV>pBLfq@7u3d`3(jliRzbH!i_C>@bFfg}en9r)h|nksub z$gA(gZ1a$;8m-}+Es*u*loc(;cG{IS|m4*dSr_zZ5UW8+HnV~yDk0)QCE0NT30cFEFA4AQTenpTrR0LnN5MUE%k zNk^jm9q9al!jl*QKzVMc>9-0l-#HW@`5!L8$t|&90+K{ejB{?Ib-^7Z4A*zU1lz#K zh*+Bk? z)cD~3MVIiNpTl3%Upz0GTDorKG4GGEhm@@h!wVWD`MwD^yVm9EY#3AJ*iOr!HTmsu zZhp`2UXuaScMoYP`7MEG1_hEw zuD`jXz`|1Qb0RBLI4ZZ}!KzCPd`zytd~~i29z66R@%8r?gXKZa{EOWTwW)HGb*nMMv3+ z!#1SeWzA#Q)Zc7s&7IhN_Co$_ZfL?`6Pg^o1C=W62^`)ZI(nH01n$wB)m!euTp69x zjLqlHEgQWY-(K8siCa(0I4js^?ev0cu<&Z8y<0;p8>nwit+21lwQ@*RJ8J2CZ{=<+ z?UF;nnHL1FYqp%V+O_nS-ZzWFDoxHo7ytC*+miSr*X&cC+7sFKB3mraXlF~$&Ld0b z9oz0Krps0djLY$RU0w0%IB!_ude7R4t9=)?TMB%iw$)v6R9Hz}XeUo_=;)zdeKnQH zy&nvDPGyL6T#n4+FW{B*wQ-t^R~dgX!F2HBx6M4REkl0OO+147SB|a_;+%U=eZNf7 zVw1C?!Bb~5u^b!mJ73OrOsz>goICY)qG?mrv4K@|l|_og^HxA!8a{x>>(hcBc3C|i zbyz{KU=fnXqj1IbR@!@shJh+?|0iY4F^iR#w=>>+b2;Dj3q{d=yK+vG#HpGI&t6(J zY03`4&f}TR=T-!rx7xti^DarpR!>MjaN$nk@vN^O{a48OSEVmLz7u-$n~>o>Etj7c z3ko?~KHXiBH`Ub4c{EG$wn~d+;q$V)R{eCYE*>goMTLqqi4zHj4ZH0F+|?Xn&01@8 z^YnHvD2Gi6WtQ+JNI5Uk6Ut4aHab_!OaZ@MIOJX4!3i+2c+kQ6*Y2Q z?bZ->+r(|1zc?$q{RX3d-0rw{z;0=(XyG738A+nbk{Y@ea_>I;d>x95GMZome~3xA?J_n zUU3Wl{L7ZfYvqjx*-wZC1s=JVAQ@sdm^oc3;w>=We);%(Vy=F-jo{houBE9?G)D$D zd=5M0rx%-+HnN8A2}`kB9Gg@w_nyw_jqW+)nj@pTMl*-a!y`6XXwo0B(LDEKsewRS z^J6J?=iH}Z4#H`{CC=P513c1aTXWrRS7*D+j(XdT-@__Cn-dj|+=@^`wW`9QXN-r_ zi-FKe@^@)icW1~3@STUvaPgwn zyNBmCt|+$V8!t0uoc~a8KXiSwYLR%WAZu#CtY%Jw|C=L6oxhoAPpWL+MICYZB4J-Y zZXP^$r%Ep}u3W1~V|&HTlV7x!Ix)?TXdSHPSfK1;$*?dfX5Yl&u{->Rk8JJ)qx7BMkpEu>a&z2R zR)kBriYCRr?!xQqPnQ~gPxcRdA1TC2_xtUj+ETmzW66{M{;XQOh|H|Z5A6=0y0cdw z1*iB1RY+$4zN7g>eW6wJhTgPi)q*jX?!|A{dUamiYV8!wJ^!_vI=sj#l&FXh3Bzh$Bv%9i+`UCJ8Rk3LkqN3$3pjAdXlg-!PY@f zY0>I{9mM=hi1n4ot~r`9yIM&x=k=GjVvs7=-Ra5c zaBS`0=UApccKF%x5t~=AKOUM)H#pSW>m@dK6~7GMm%O0LD%vFhnASl$5=e|YPO9>1kAIf z2iA&dO3BEygS=o8|KWpG12I<#vFo|KdN4OG&ExW9FHo0RF&vd`Wm#=v~c0L@+F#m>Z6*LS*oVi)30bUe{#skxh73vsvBGz3d~5f4>c`@^_iNCUb|oF1XC1=dP2@U18Pf zsfCvO&>0~yq7Vf9TK-=2@Zl{Kw}Ow-JnN#+gaJ^_0N^twA;8wGcTaaRCwt8Y}4g)`tzpF=hgKiHTrb=eN)mi#`Vk9 zI^vD@=v!nCrhQRVawZ0L5V9Bmc`nhsq)r!P4%%$9vpJ?cf)HQx=?7u{CGgaa8?t2F( z4~Q-?p+(b#CjK4qWR!bwPj8G+3B^hr0vzfi-Ib}1a?pWI8$Ssa* zm#gq&-#2p%S3EpYndg(Nr^J%_8fteMk`W4|{3C402!so+tt(7C$Kc{je6mT%UDgZ< z3p)>yR$t!@2!tPj*)^2K?+1#*wZlx1M-;c4ea@Wfgwoe*alThfxvD8v)n>)opVfJ{ zsz1Mx)Ar+83;;-#VP!Ysr|~bc-u7|`=fcFfrt1oa?(i+Q2pzd&skazKjGK;8Pq6#*8xkLl+IIwNawnxiZLj%8RSk5d|R#y*4*6w4o$Oax}I=fK0 zUFX7l4w$`atcYM*M^R~R@_Sa|x$$~p+kj!DneEvhslPQV!_H8d&!!!YIN{cJ>(ax7 zafym8viI1rm&f8aZ`|14w?Vv16SLHPPjZ5#~}G4895)}=Fukl?P|85x5Xe9Uk z{qmQu`Dc{a5#jTn@Os;Qd;XIZqH#{@|KmS8R%W7oYe{?RF}jUqwA>n5ZTS4;tBZs5 z1^8;V*teakW$L@K!B8`nk9o*ZpngwlMmf792z`$S6qB}4Bv}W3rYxLDdJ*Jk$D5KA z)l#J^Y<>G#!HR_3t9vFJxJnYKEmBRHT+-(swtnjTykL{aGf796^0p*Bdh^G2O53!8 zrw(gHYkX~N;Mho$MQ;L!MNf;;!`#fHb3+FzU(&wtMm5<${WN?~w}928MA_e|`p5o_ zL7@}-D4h3yYvWh@wMxIad@x?=NkQ;1hjDK`bNtMeTocN#*vrky#x8eOGrRO}ths4i zy=f}h+3o9Y4ITWQn)NJZ#==5I6o;5?1XV1#2j*{{$&yVu`1iG>o;ne{SRj_N<4G6$CYLLPqbEJ(<~w;-UH|+|kt4jbU|L*U z<5+2lRbTeU6St_F%fX>siUcYlgR~k5pa`3@TwCnDEEPCAlpIjCN&SRbWx4PqS_u6l4xJQjykr-P30FG{cgM>Kk)sRDQ0z&qgD% zt65hoqG?YaY)Y^4a{m34zi;>lt-?z-yOCJ6;K5Hf^z&Qa zvz(EXS++B)fkJoKv%C4Rr-@08Ws`;7i!x%X= z?fm2)1sxnopJADg5oCQEKGf_Uab~-b{)K1edw00{tTS9`R2%fWU{vtk!|4U}qYB?O zh0}RWId%m*G=CVNAKljf*9>*$wrQC#@7BFt_1Saw0r_ig7u?#thtah#G^gm&o0T62 zGtb6_x;paHdW1F2R&mN*pT%x5uJLnrV${=aK-_>$u zLF?)DYj16Hmwj=j{i>-Q-(mXDYhHJ)ex94nX$d!JUE4KeGm^cVN!x5?v~ViT)A!~c zNoujP?2Dq8b{Us!>rKgZSWeM8+_7CTguhers%(}m7q?tj%D*mQY&j5wlr_DF?%z!} zP7OXTRqS;q&VRSiz6$52=*{d4!<_FbT-d{$cRzmFjy2$H#@h47!bJTe&8IKjX5o=f z%{v(S=BAFN`g)l2Y*wUm{V?q$Feh*NTvmM5lE7w}vG0oHFrlaaRP3cw6yF~_-SBq! z^3l%1LpAG%Y_g4_WPiLD zI-Zu=)QjFbvALyw=A%jPiDw3JPQ_tbtJgbh&TIT0>UHZ-?ZU1lZT1P+tPe!Lq}zKO zIy~>r_p*wwzR<<&o`7bd1FL1v!bY{}YsWa<)_2rCpkFmC{B)!wWXYY6ibI8#vbF~# z6l_mYe$iKT&)QH%;_W%hT;3Hr4;|PSSik9F%yAl<`XVpCbLI6icvFv~PwaAZ_qU4S z99bMLn^%@5qdGkK5dY`I*xk>q5 z)lIJlhqux^{`fMT%F-sk#<{#_UAR%x`Lq5Z&nuMjwN|m=c*f@Nj_?&zc-gDjspZBI z#JIq8yofF7;O;Tg@W0Kc2*;Z`r)A04Wor60(?{y`ryJgM*Q>1CutAll7C(hFpm-XKUP1GyCP7W8f^?J&Bt#p(Y(tj!2l-U&f$npCv zQOfhhkajV#vrS3QYFSiQy=z^GjbG))KA341rpvZi^Z?4(^K=y zCu?h^wVhe$enm$!I65uL1x35?H0nR$UccgWoHK3O?-RZGSpmQnPZ+85GOc4u|sTqwn^C)VB{nEQG>X-d53t{o-1 zDM-85slq3-oq?Z@wJU#KdHTo3K?C3F%3+GuewDQf?XRx*FFueJH+MYevm|e^DkDyc zCceIA{l&0F7vB4Ky(g!#C~O4W#a9{aTAEv17)C^*G#1wP>dEZ->UdWwD%bw_9A^iqH0vIwB-jeDwp4%`qk^$X(m{b)Omh-Nq>=?*@$#p z#MI-DyTqMS9(>jQvGYc^1v6vcvf6j2Kc3`icaZ!Llk<5f8waO_$#-#XN1>$(Uaz*; z+B39!iut-JIWDZF()c{jaZTF%V~=^`)VCZ}SJTn6tJgZ-8j+mSR8lW~dhwiN&U60P zn!86!;?2XOI+fCoEvH>y!mQAj(SJ_N$~CD|LeS;Tw~Q@6r&v?DC({>LDD!V?t>W^{ z8ZWNNHL$tu$#eY7qpR}{-gz;r250y7<_1a3-pX#UUdQ&Mobb%ta`)U-&$RKkGXfD*ATWdk4=Z~~bVG7- za#<7gs*t*Lf2VC-0#lurQ2%5h%m`lWrFc?*zDl=_eQHMxk+WG?A*b8{okhzP!E1bGuWp^6kW$QnRc4}*Zs zZfn1_0|G7}DC~sq?<<65Qi$0sh$SS%5@LO-XLTZc@6et@4P_q^uX-b?kvHIcgY|g~ zl}Y0F*xr8-;Y`%nhlt!0x0Wci&_fFk@Q7%E52}11k$Vv2&fM?Ms6$g;3{VSfwtHOd zwAbt2ZpC9RFi2jamD)t?qkw3<1}#oxtaLZ1RJ0^T545NP(9=lJ3DBf&kYQ~GOAW~U(0z#hwp*u^3)%`mMHO*+vi0ln#c>9(T-?mTc4flPlHQFOpk11rU%XzH7` zXSzy1>?0vsS_@7-2ZU@|Al-g5I!eGbylw*jU?>V+)lxI61~@z%(5QefPbfiP{9&wr z6($D_SsJc*Wn&1PBG$AdAO=5R8W6`=zy9A?O7g)Bi(4HQ790|~nXymExB_z%3K5L>)` z&~6j%7`6>@kf&)QLDo?0Jg?LvR?=!}K~3q*bhISvgRDwCG0=gYV1BJOl}t<#@f{Vw zn5NFPE|Rz$fB`!ooGAuFg~T)^HVu;4I4Cm^r&WD-)n;hevCJaCWK9w6Nyu|C2LW~M9u%=7{JZgk~ib7nw5OekXe58@vY9e~Z^7x9= zVa56#Yfl&$><1Y>EzZym&Pyb(oB~bhrMH(Jf&{UI2$Ki_5G2v-AoOFH*@^wuSZo

V-n@URmL>_6 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 V4|tP*95$?|sc0*gD?WPpzX0#kZ)^Yn literal 0 HcmV?d00001 From dd14a3abc5fee66792e11fcbcdab5171258ab56c Mon Sep 17 00:00:00 2001 From: DubhAd Date: Wed, 29 Nov 2017 17:06:52 +0000 Subject: [PATCH 10/60] Added some links (#4095) Added a link to the cloud console in both the configuration notes, and made it a link in the final step (step 11, here, 9 as displayed) --- source/_components/google_assistant.markdown | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/_components/google_assistant.markdown b/source/_components/google_assistant.markdown index cb2efbb6361..3c3edcc5a13 100644 --- a/source/_components/google_assistant.markdown +++ b/source/_components/google_assistant.markdown @@ -46,7 +46,7 @@ google_assistant: * *client_id* (Required): A long random URL safe string (no spaces or special characters) that will be used for Implicit OAuth. * *access_token* (Required): Another different long random URL safe string. * *agent_user_id* (Optional): A string to identify the user, e.g., email address. If not provided, the component will generate one. -* *api_key* (Optional): An API Key generated for the project from Google Console which allows you to update devices without unlinking and relinking an account (see setup below). If not provided then the request_sync service is not exposed. +* *api_key* (Optional): An API Key generated for the project from [Google Console](https://console.cloud.google.com/apis/api/homegraph.googleapis.com/overview) which allows you to update devices without unlinking and relinking an account (see setup below). If not provided then the request_sync service is not exposed. * *exposed_domains* (Optional): An array of Home Assistant domains to expose to Google Assistant. Options include: - `switch` - `light` @@ -128,7 +128,7 @@ homeassistant: 3. Click `Add`, type the new user's e-mail address and choose `Project -> Editor` role 4. Have the new user go to [developer console](https://console.actions.google.com/) and repeat steps starting from point 7. 11. If you want to use the `google_assistant.request_sync` service in Home Assistant, then enable Homegraph API for your project: - 1. Go to https://console.cloud.google.com/apis/api/homegraph.googleapis.com/overview + 1. Go to the [cloud console](https://console.cloud.google.com/apis/api/homegraph.googleapis.com/overview) 2. Select your project and click Enable Homegraph API 3. Go to Credentials and select API Key from Create Credentials 4. Note down the generated API Key and use this in the configuration From c3b97c051662e0de91c30cdeab4934ab50b50d78 Mon Sep 17 00:00:00 2001 From: DubhAd Date: Thu, 30 Nov 2017 07:53:51 +0000 Subject: [PATCH 11/60] Added note about polling interval (#4098) Added polling interval note, since apparently it got lost. Also corrected a stray link. --- source/_docs/z-wave/control-panel.markdown | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/source/_docs/z-wave/control-panel.markdown b/source/_docs/z-wave/control-panel.markdown index 5fdc18b9290..c33375f242b 100644 --- a/source/_docs/z-wave/control-panel.markdown +++ b/source/_docs/z-wave/control-panel.markdown @@ -54,7 +54,9 @@ This is a dropdown where you can select all the entities of this node. Once sele * **Refresh Entity** to refresh just that entity's values * **Entity Attributes** to display the attributes of that entity (eg it's friendly name, the ID of the node, etc) -Here you can mark a device as requiring polling (before 0.55 this was displayed at the top), so the controller is aware of changes because the device doesn't send updates itself. Do see the information on [polling here](/docs/z-wave/polling/), since excessive polling can break your Z-Wave network. +Here you can mark a device as requiring polling so the controller is aware of changes because the device doesn't send updates itself. Do see the information on [polling here](/docs/z-wave/devices/#polling), since excessive polling can break your Z-Wave network. + +The **Polling intensity** says how many poll intervals does is this device polled on. For example, if you set 2 then it's polled on every second interval. You can also exclude a Z-Wave devices from Home Assistant. You can do that if you have a device that you need to have on the Z-Wave network, but you don't want it to appear in Home Assistant, or if you've got a device that's failed and you're unable to exclude it. From fccccccb5009a759b8c303ad4376c1d761aacfc4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bal=C3=A1zs=20Suhajda?= Date: Thu, 30 Nov 2017 19:07:13 +0100 Subject: [PATCH 12/60] Fix minor inaccuracies in the instructions (#4102) --- source/_components/notify.html5.markdown | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/source/_components/notify.html5.markdown b/source/_components/notify.html5.markdown index 34547169778..bddb7ff0847 100644 --- a/source/_components/notify.html5.markdown +++ b/source/_components/notify.html5.markdown @@ -21,14 +21,14 @@ To enable this platform, add the following lines to your `configuration.yaml` fi notify: - name: NOTIFIER_NAME platform: html5 - gcm_api_key: 'gcm-sender-key' + gcm_api_key: 'gcm-server-key' gcm_sender_id: 'gcm-sender-id' ``` Configuration variables: - **name** (*Optional*): Setting the optional parameter `name` allows multiple notifiers to be created. The default value is `notify`. The notifier will bind to the service `notify.NOTIFIER_NAME`. -- **gcm_api_key** (*Required if pushing to Chrome*): The API key provided to you by Google for Google Cloud Messaging (GCM). Required to push to Chrome. +- **gcm_api_key** (*Required if pushing to Chrome*): The API Server key provided to you by Google for Google Cloud Messaging (GCM). Required to push to Chrome. - **gcm_sender_id** (*Required if pushing to Chrome*): The sender ID provided to you by Google for Google Cloud Messaging (GCM). Required to push to Chrome. ### {% linkable_title Getting ready for Chrome %} @@ -42,7 +42,7 @@ Configuration variables: #### {% linkable_title Verify your domain with Hass.io %} 1. For verifying your domain you need to download a file in step 2. -2. Create a dictionary named "www" in you Hass.io configuration dictionary. +2. Create a dictionary named "www" in you Hass.io configuration directory. 3. Place the file (something like this: google*.html) in the "www" directory. 4. You can open it by going to **https://yourdomain/local/exact_file_name.html** 5. Proceed with step 3. From f579724dfaf95fd28afe0a75eb1f93068fcec614 Mon Sep 17 00:00:00 2001 From: Zorks <6314048+Zorks@users.noreply.github.com> Date: Thu, 30 Nov 2017 18:59:23 -0800 Subject: [PATCH 13/60] changed example in 'burglar' example to true/false --- source/_docs/z-wave/entities.markdown | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/_docs/z-wave/entities.markdown b/source/_docs/z-wave/entities.markdown index 64fa5eb0b72..b5a597b4ebf 100644 --- a/source/_docs/z-wave/entities.markdown +++ b/source/_docs/z-wave/entities.markdown @@ -157,9 +157,9 @@ binary_sensor: friendly_name: "Friendly name here" value_template: >- {% raw %}{%- if is_state('sensor.YOUR_SENSOR_burglar', '8') -%} - on + true {%- else -%} - off + false {%- endif -%}{% endraw %} ``` From d16d4b6d158785dc9e50ddd8162062ca4a619f32 Mon Sep 17 00:00:00 2001 From: Tyler Page Date: Fri, 1 Dec 2017 01:13:11 -0600 Subject: [PATCH 14/60] remove legacy mentions of gi related files (#4108) Since installation is handled through the `axis` package, we can remove references to the gi folder --- source/_components/axis.markdown | 4 ---- 1 file changed, 4 deletions(-) diff --git a/source/_components/axis.markdown b/source/_components/axis.markdown index a23a97c2dfc..6f9a2cc4826 100644 --- a/source/_components/axis.markdown +++ b/source/_components/axis.markdown @@ -68,10 +68,6 @@ axis: location: köket ``` -

-If you are using Python 3.6, you might need to replace the 34m with 36m in the _gi.*.so filename in the gi folder. -

-

Any specific levels for triggers needs to be configured on the device.

From a86926a98a64e6b5f73f2b4045acb96d4fd95898 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Fri, 1 Dec 2017 09:10:56 +0100 Subject: [PATCH 15/60] Add template example --- source/_components/switch.mystrom.markdown | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/source/_components/switch.mystrom.markdown b/source/_components/switch.mystrom.markdown index 7c81252bfc9..6fafcbbb783 100644 --- a/source/_components/switch.mystrom.markdown +++ b/source/_components/switch.mystrom.markdown @@ -53,3 +53,20 @@ or change its state: $ curl -G -X GET http://IP_ADDRESS/relay -d 'state=1' ``` +### {% linkable_title Get the current power consumption %} + +The switch is measuring the current power consumption. To expose this as a sensor use a [`template` sensor](/components/sensor.template/). + +{% raw %} +```yaml +# Example configuration.yaml entry +sensor: + - platform: template + sensors: + power: + friendly_name: "Current Power" + unit_of_measurement: "W" + value_template: "{{ states.switch.office.attributes.current_power_w }}" +``` +{% endraw %} + From 7f9d2bfeca8d728988d56bddd4e4a0bed5bfef2e Mon Sep 17 00:00:00 2001 From: Jeroen ter Heerdt Date: Fri, 1 Dec 2017 18:22:43 +0100 Subject: [PATCH 16/60] Update tts.microsoft.markdown (#3923) --- source/_components/tts.microsoft.markdown | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/source/_components/tts.microsoft.markdown b/source/_components/tts.microsoft.markdown index b55acbd0fac..dd0c6e419bf 100644 --- a/source/_components/tts.microsoft.markdown +++ b/source/_components/tts.microsoft.markdown @@ -2,7 +2,7 @@ layout: page title: "Microsoft Text-to-Speech" description: "Instructions how to setup Microsoft Text-to-Speech with Home Assistant." -date: 2017-10-23 11:00 +date: 2017-11-07 12:00 sidebar: true comments: false sharing: true @@ -27,10 +27,13 @@ tts: Configuration variables: - **api_key** (*Required*): Your API key. -- **language** (*Optional*): The language to use. Defaults to `en-us`. Accepted values are listed in the documentation mentioned below. +- **language** (*Optional*): The language to use. Defaults to `en-us`. Accepted values are listed in the documentation mentioned below. Note that if you set the language to anything other than the default of `en-us`, you will need to specify a matching voice type as well. - **gender** (*Optional*): The gender you would like to use for the voice. Accepted values are `Female` and `Male`. Defaults to `Female` - **type** (*Optional*): The voice type you want to use. Accepted values are listed in the service name mapping [in the documentation](https://docs.microsoft.com/en-us/azure/cognitive-services/Speech/api-reference-rest/bingvoiceoutput). Defaults to `ZiraRUS` - +- **rate** (*Optional*): Change the rate of speaking. Example values: `-25%`, `+50%`. Defaults to `+0%` (no change) +- **volume** (*Optional*): Change the volume of the output. Example values: `-20%`, `+70%`. Defaults to `+0%` (no change) +- **pitch** (*Optional*): Change the pitch of the output. Example values: `high`. Defaults to `default` (no change) +- **contour** (*Optional*): Change the contour of the output. This overrides the pitch setting. See the [W3 SSML specification](http://www.w3.org/TR/speech-synthesis/#pitch_contour) for what it does. Example value: `(0%,+0%) (100%,+100%)` A full configuration sample including optional configuration variables: @@ -39,7 +42,11 @@ A full configuration sample including optional configuration variables: tts: - platform: microsoft api_key: XXXXXXXXX - language: en-us - gender: male - type: BenjaminRUS + language: en-gb + gender: Male + type: George, Apollo + rate: +20% + volume: -50% + pitch: high + contour: (0%, +0%) (100%, +100%) ``` From 6d96ddf4235f343a8c586b92519a1f6adf96240a Mon Sep 17 00:00:00 2001 From: Erik Eriksson Date: Fri, 1 Dec 2017 18:24:24 +0100 Subject: [PATCH 17/60] Update tellduslive.markdown (#3955) * Update tellduslive.markdown * Update tellduslive.markdown * Add info about host variable * Update tellduslive.markdown --- source/_components/tellduslive.markdown | 17 +++++------------ 1 file changed, 5 insertions(+), 12 deletions(-) diff --git a/source/_components/tellduslive.markdown b/source/_components/tellduslive.markdown index f273af65e74..a93431825d2 100644 --- a/source/_components/tellduslive.markdown +++ b/source/_components/tellduslive.markdown @@ -13,25 +13,18 @@ featured: false ha_release: 0.11 --- -The `tellduslive` component let you connect to [Telldus Live](https://live.telldus.com). It's cloud platform that connects to your Tellstick connected gear at home. +The `tellduslive` component let you connect to [Telldus Live](https://live.telldus.com). It's cloud platform that connects to your Tellstick Net or Tellstick ZNet connected gear at home. -To get started using Telldus Live, you will have to obtain developer keys from the [developer page](https://api.telldus.com/keys/index). - -To integrate your Telldus Live with Home Assistant, add the following section to your `configuration.yaml` file: +Home Assistant will automatically discover the presence of a Tellstick Net or Tellstick ZNet on your local network if the [discovery]({{site_root}}/components/discovery/) component is enabled. To manually integrate your Telldus Live with Home Assistant, e.g. if your device is on another network or in another location, add the following section to your `configuration.yaml` file: ```yaml # Example configuration.yaml entry tellduslive: - public_key: ABCDEFGHJKLMNOPQRSTUVXYZ - private_key: ABCDEFGHJKLMNOPQRSTUVXYZ - token: ABCDEFGHJKLMNOPQRSTUVXYZ - token_secret: ABCDEFGHJKLMNOPQRSTUVXYZ ``` Configuration variables: -- **public_key** (*Required*): The public key for the Telldus Live service. -- **private_key** (*Required*): The private key for the Telldus Live service. -- **token** (*Required*): The token for the Telldus Live service. -- **token_secret** (*Required*): The token secret for the Telldus Live service. +- **host** (*Optional*): Host address to Tellstick Net or Tellstick ZNet for Local API, only useful when automatic discovery is not enabled. +- **update_interval** (*Optional*): Interval (in seconds) for polling the Telldus Live server (or the local server). +The component will offer configuration through the Home Assistant user interface where it will let you associate it with your Telldus Live account. From 5013c8fa20e9b1744af1d02f0b2f1d38ffc47596 Mon Sep 17 00:00:00 2001 From: Valiceemo Date: Fri, 1 Dec 2017 17:26:52 +0000 Subject: [PATCH 18/60] Update rss_feed_template.markdown (#4113) add missing 'a' character in line 20 --- source/_components/rss_feed_template.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/rss_feed_template.markdown b/source/_components/rss_feed_template.markdown index 804c3bbe4aa..70c3bbd7f32 100644 --- a/source/_components/rss_feed_template.markdown +++ b/source/_components/rss_feed_template.markdown @@ -17,7 +17,7 @@ The `rss_feed_template` component can export any information from Home Assistant For example, on Android, the app "Simple RSS Widget" can be used to display temperatures on the home screen. ```yaml -# Example configuration.yml entry +# Example configuration.yaml entry rss_feed_template: # Accessible on /api/rss_template/garden # Example: https://localhost:8123/api/rss_template/garden From 9cae02a84cffe8a6300ea862fd8ca0ce9a4d3bca Mon Sep 17 00:00:00 2001 From: Zorks <6314048+Zorks@users.noreply.github.com> Date: Fri, 1 Dec 2017 11:47:27 -0800 Subject: [PATCH 19/60] Added missing certfile/keyfile entries to code (#4116) If user accidentally removes those by copy/pasting what was listed, it throws a "missing" error. --- source/_addons/mosquitto.markdown | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/source/_addons/mosquitto.markdown b/source/_addons/mosquitto.markdown index f944dc7989c..a99487c1f92 100644 --- a/source/_addons/mosquitto.markdown +++ b/source/_addons/mosquitto.markdown @@ -23,7 +23,9 @@ Set up [Mosquitto](https://mosquitto.org/) as MQTT broker. "customize": { "active": false, "folder": "mosquitto" - } + }, + "certfile": "fullchain.pem", + "keyfile": "privkey.pem" } ``` From d8891fdb9cadfe2e6f3fad05bfcd910310693a1a Mon Sep 17 00:00:00 2001 From: rbflurry Date: Fri, 1 Dec 2017 14:50:01 -0500 Subject: [PATCH 20/60] add DD-wrt (#4114) Add DD-WRT to the SNMP list. --- source/_components/device_tracker.snmp.markdown | 1 + 1 file changed, 1 insertion(+) diff --git a/source/_components/device_tracker.snmp.markdown b/source/_components/device_tracker.snmp.markdown index 22767d9907a..60c14a1f873 100644 --- a/source/_components/device_tracker.snmp.markdown +++ b/source/_components/device_tracker.snmp.markdown @@ -33,6 +33,7 @@ The following OID examples pull the current MAC Address table from a router. Thi | TP-Link | Archer VR600 | `1.3.6.1.2.1.3.1.1.2` | | EdgeRouter | Lite v1.9.0 | `1.3.6.1.2.1.4.22.1.2` | | Ruckus | ZoneDirector 9.13.3 | `1.3.6.1.4.1.25053.1.2.2.1.1.3.1.1.1.6` | +| DD-WRT | unknown RouterOS version/model | `1.3.6.1.2.1.4.22.1.2` | To use the SNMP version 1 platform in your installation, add the following to your `configuration.yaml` file: From f2439b8d8d4b9e1bc852da778a2cfdddd475a784 Mon Sep 17 00:00:00 2001 From: bcl1713 Date: Sun, 3 Dec 2017 05:57:38 -0600 Subject: [PATCH 21/60] Patch 2 (#4069) * Add custom away_mode_name Re add custom "away_mode_name" after update of code * Fix --- .../_components/alarm_control_panel.arlo.markdown | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/source/_components/alarm_control_panel.arlo.markdown b/source/_components/alarm_control_panel.arlo.markdown index 39b7d6b62e7..62f2d2a612a 100644 --- a/source/_components/alarm_control_panel.arlo.markdown +++ b/source/_components/alarm_control_panel.arlo.markdown @@ -26,9 +26,17 @@ alarm_control_panel: - platform: arlo ``` -Configuration variables: - -- **home_mode_name**: (*Optional*): Arlo base station does not have a built-in home mode. You can map one of your custom modes to home assistant's home mode by setting the name of the custom mode in this configuration variable. The name of the custom mode should match exactly as you set it up in the Arlo app. +{% configuration %} +home_mode_name: + description: "Arlo base station does not have a built-in home mode. You can map one of your custom modes to home assistant's home mode by setting the name of the custom mode in this configuration variable. The name of the custom mode should match exactly as you set it up in the Arlo app." + required: false + type: string +away_mode_name: + description: "Arlo base station does not have a built-in away mode. You can map one of your custom modes to home assistant's away mode by setting the name of the custom mode in this configuration variable. The name of the custom mode should match eactly as you set it up in the Arlo app." + required: false + type: string + default: "`Armed` mode in Arlo" +{% endconfiguration %} ## {% linkable_title Examples %} From ffb89cdb558180a9ea70edafcfe1e154628eaa41 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Sun, 3 Dec 2017 16:59:13 +0100 Subject: [PATCH 22/60] Add Alpha Vantage sensor docs (#4122) --- .../_components/sensor.alpha_vantage.markdown | 53 ++++++++++++++++++ .../_components/sensor.yahoo_finance.markdown | 2 +- .../images/supported_brands/alpha_vantage.png | Bin 0 -> 7109 bytes 3 files changed, 54 insertions(+), 1 deletion(-) create mode 100644 source/_components/sensor.alpha_vantage.markdown create mode 100644 source/images/supported_brands/alpha_vantage.png diff --git a/source/_components/sensor.alpha_vantage.markdown b/source/_components/sensor.alpha_vantage.markdown new file mode 100644 index 00000000000..9fb5b85a569 --- /dev/null +++ b/source/_components/sensor.alpha_vantage.markdown @@ -0,0 +1,53 @@ +--- +layout: page +title: "Alpha Vantage" +description: "Instructions how to setup Alpha Vantage within Home Assistant." +date: 2017-12-02 12:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: alpha_vantage.png +ha_category: Finance +ha_iot_class: "Cloud Polling" +featured: false +ha_release: "0.60" +--- + +The `alpha_vantage` sensor platform uses [Alpha Vantage](https://www.alphavantage.co) to monitor the stock market. + +To enable the `yahoo_finance` platform, add the following lines to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +sensor: + - platform: alpha_vantage + api_key: YOUR_API_KEY +``` + +{% configuration %} +api_key: + description: "The API Key from [Alpha Vantage](https://www.alphavantage.co)." + required: true + type: string +symbols: + description: List of stock market symbols for given companies. + required: false + type: string, list + default: GOOGL +{% endconfiguration %} + +## {% linkable_title Examples %} + +In this section you find some real life examples of how to use this sensor. + +### {% linkable_title Red Hat and Google %} + +```yaml +sensor: + - platform: yahoo_finance + symbols: + - RHT + - GOOGL +``` + diff --git a/source/_components/sensor.yahoo_finance.markdown b/source/_components/sensor.yahoo_finance.markdown index a71ef1ea228..8a55a78dda7 100644 --- a/source/_components/sensor.yahoo_finance.markdown +++ b/source/_components/sensor.yahoo_finance.markdown @@ -15,7 +15,7 @@ ha_release: 0.29 ---

- This sensor doesn't work anymore as [Yahoo!](https://yahoo.uservoice.com/forums/382977-finance/suggestions/32103877-yahoo-stock-quote-api-please-bring-back) decommissioned the service in early November 2017. + This sensor doesn't work anymore as [Yahoo!](https://yahoo.uservoice.com/forums/382977-finance/suggestions/32103877-yahoo-stock-quote-api-please-bring-back) decommissioned the service in early November 2017. A repleacement is the [`alpha_vantage` sensor](/components/sensor.alpha_vantage/).

The `yahoo_finance` platform uses [Yahoo Finance](https://finance.yahoo.com/) to monitor the stock market. diff --git a/source/images/supported_brands/alpha_vantage.png b/source/images/supported_brands/alpha_vantage.png new file mode 100644 index 0000000000000000000000000000000000000000..760eafdab8985ded8e11aef424199acdaaa8b7fe GIT binary patch literal 7109 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 Date: Mon, 4 Dec 2017 00:14:09 +0100 Subject: [PATCH 23/60] Update notify.nfandroidtv.markdown (#4073) --- source/_components/notify.nfandroidtv.markdown | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/source/_components/notify.nfandroidtv.markdown b/source/_components/notify.nfandroidtv.markdown index 3a91a7cba0e..0a7d1ba842a 100644 --- a/source/_components/notify.nfandroidtv.markdown +++ b/source/_components/notify.nfandroidtv.markdown @@ -14,9 +14,11 @@ ha_iot_class: "Local Polling" --- -Notification platform for [Notifications for Android TV](https://play.google.com/store/apps/details?id=de.cyberdream.androidtv.notifications.google&hl=en) and [Notifications for FireTV](https://play.google.com/store/apps/details?id=de.cyberdream.firenotifications.google). +Notification platform for [Notifications for Android TV](https://play.google.com/store/apps/details?id=de.cyberdream.androidtv.notifications.google) and [Notifications for FireTV](https://play.google.com/store/apps/details?id=de.cyberdream.firenotifications.google). + The notifications are in the global scope of your Android TV device. They will be displayed regardless of which application is running. -The In-App purchases only apply to the client for Android smartphones, so there isn't any limit when pushing notifications from Home Assistant. + +When setting this up be aware, that there are two apps: one for your smartphone to send notifications (not required for this platform) and one for your Android TV device to receive the notifications. The app available in the store of your target device is the one that is needed to display notifications sent from Home Assistant. The In-App purchases only apply to the client for Android smartphones, so there isn't any limit when pushing notifications from Home Assistant. To enable the notification platform, add the following to your `configuration.yaml` file: @@ -37,6 +39,7 @@ Configuration variables: - **color** (*Optional*): Has to be one of: grey (default), black, indigo, green, red, cyan, teal, amber, pink - **transparency** (*Optional*): Has to be one of: 0%, 25% (default), 50%, 75%, 100% - **interrupt** (*Optional*): If set to true, 1, on etc., the notification is interactive and can be dismissed or selected to display more details. Depending on the running app (e.g. Netflix), this may stop playback. +- **icon** (*Optional*): Change the default icon to a custom icon by providing the full path to a PNG image. The configuration will be used to configure the default values for the notification for the host specified by the IP. However, you can override most of the settings by passing them with the data-attribute when calling the service. This is a fully customized JSON you can use to test how the final notification will look like: @@ -50,7 +53,8 @@ This is a fully customized JSON you can use to test how the final notification w "duration":2, "transparency":"0%", "color": "red", - "interrupt": 1 + "interrupt": 1, + "icon": "/path/to/image.png" } } ``` From 39a4b986d5f7116ba1b2082c029c6a6a924cb0c7 Mon Sep 17 00:00:00 2001 From: Paolo Bonzini Date: Mon, 4 Dec 2017 00:21:19 +0100 Subject: [PATCH 24/60] Update manual and manual_mqtt alarm platform for upcoming changes (#4039) --- .../alarm_control_panel.manual.markdown | 65 +++++++++++++++++-- .../alarm_control_panel.manual_mqtt.markdown | 30 ++++++--- 2 files changed, 80 insertions(+), 15 deletions(-) diff --git a/source/_components/alarm_control_panel.manual.markdown b/source/_components/alarm_control_panel.manual.markdown index 0bdb28cd801..86509ebe620 100644 --- a/source/_components/alarm_control_panel.manual.markdown +++ b/source/_components/alarm_control_panel.manual.markdown @@ -25,13 +25,62 @@ Configuration variables: - **name** (*Optional*): The name of the alarm. Default is "HA Alarm". - **code** (*Optional*): If defined, specifies a code to enable or disable the alarm in the frontend. -- **pending_time** (*Optional*): The time in seconds of the pending time before arming the alarm. Default is 60 seconds. +- **code_template** (*Optional*): If defined, returns a code to enable or disable the alarm in the frontend; an empty string disables checking the code. Inside the template, the variables **from_state** and **to_state** identify the current and desired state. Only one of **code** and **code_template** can be specified. +- **delay_time** (*Optional*): The time in seconds of the pending time before triggering the alarm. Default is 0 seconds. +- **pending_time** (*Optional*): The time in seconds of the pending time before effecting a state change. Default is 60 seconds. - **trigger_time** (*Optional*): The time in seconds of the trigger time in which the alarm is firing. Default is 120 seconds. - **disarm_after_trigger** (*Optional*): If true, the alarm will automatically disarm after it has been triggered instead of returning to the previous state. -- **armed_home/armed_away/armed_night/triggered** (*Optional*): State specific settings - - **pending_time**: State specific pending time override. +- **armed_custom_bypass/armed_home/armed_away/armed_night/disarmed/triggered** (*Optional*): State specific settings + - **delay_time** (*Optional*): State specific setting for **delay_time** (all states except **triggered**) + - **pending_time** (*Optional*): State specific setting for **pending_time** (all states except **disarmed**) + - **trigger_time** (*Optional*): State specific setting for **trigger_time** (all states except **triggered**) -In the config example below, armed_home state will have no pending time and triggered state will have pending time of 20 second whereas armed_away state will have a default pending time of 30 seconds. +## {% linkable_title State machine %} + +The state machine of the manual alarm component is complex but powerful. The +transitions are timed according to three values, **delay_time**, **pending_time** +and **trigger_time**. The values in turn can come from the default configuration +variable or from a state-specific override. + +When the alarm is armed, its state first goes to **pending** for a number +of seconds equal to the destination state's **pending_time**, and then +transitions to one of the "armed" states. Note that **code_template** +never receives "pending" in the **to_state** variable; instead, +**to_state** contains the state which the user has requested. However, +**from_state** *can* contain "pending". + +When the alarm is triggered, its state goes to **pending** for a number of +seconds equal to the previous state's **delay_time** plus the triggered +state's **pending_time**. Then the alarm transitions to the "triggered" +states. The code is never checked when triggering the alarm, so the +**to_state** variable of **code_template** cannot ever contain "triggered" +either; again, **from_state** *can* contain "triggered". + +The alarm remains in the "triggered" state for a number of seconds equal to the +previous state's **trigger_time**. Then, depending on **disarm_after_trigger**, +it goes back to either the previous state or **disarmed**. If the previous +state's **trigger_time** is zero, the transition to "triggered" is entirely +blocked and the alarm remains in the armed state. + +Each of the settings is useful in different scenarios. **pending_time** gives +you some time to leave the building (for "armed" states) or to disarm the alarm +(for the "triggered" state). + +**delay_time** can also be used to allow some time to disarm the alarm, but with +more flexibility. For example, you could specify a delay time for the +"armed away" state, in order to avoid triggering the alarm while the +garage door opens, but not for the "armed home" state. + +**trigger_time** is useful to disable the alarm when disarmed, but it can also +be used for example to sound the siren for a shorter time during the night. + +In the config example below: + +- the disarmed state never triggers the alarm; + +- the armed_home state will leave no time to leave the building or disarm the alarm; + +- while other states state will give 30 seconds to leave the building before triggering the alarm, and 20 seconds to disarm the alarm when coming back. ```yaml # Example configuration.yaml entry @@ -40,11 +89,13 @@ alarm_control_panel: name: Home Alarm code: 1234 pending_time: 30 + delay_time: 20 + trigger_time: 4 + disarmed: + trigger_time: 0 armed_home: pending_time: 0 - triggered: - pending_time: 20 - trigger_time: 4 + delay_time: 0 ``` ## {% linkable_title Examples %} diff --git a/source/_components/alarm_control_panel.manual_mqtt.markdown b/source/_components/alarm_control_panel.manual_mqtt.markdown index bf5ba5bdcc7..4f1f90995ce 100644 --- a/source/_components/alarm_control_panel.manual_mqtt.markdown +++ b/source/_components/alarm_control_panel.manual_mqtt.markdown @@ -42,15 +42,21 @@ alarm_control_panel: Configuration variables: -All configuration variables from the base manual alarm platform are available: +The following configuration variables from the base manual alarm platform are available: - **name** (*Optional*): The name of the alarm. Default is "HA Alarm". - **code** (*Optional*): If defined, specifies a code to enable or disable the alarm in the frontend. This code is not required for MQTT interactions. -- **pending_time** (*Optional*): The time in seconds of the pending time before arming the alarm. Default is 60 seconds. +- **code_template** (*Optional*): If defined, returns a code to enable or disable the alarm in the frontend; an empty string disables checking the code. Inside the template, the variables **from_state** and **to_state** identify the current and desired state. Only one of **code** and **code_template** can be specified. +- **delay_time** (*Optional*): The time in seconds of the pending time before triggering the alarm. Default is 0 seconds. +- **pending_time** (*Optional*): The time in seconds of the pending time before effecting a state change. Default is 60 seconds. - **trigger_time** (*Optional*): The time in seconds of the trigger time in which the alarm is firing. Default is 120 seconds. - **disarm_after_trigger** (*Optional*): If true, the alarm will automatically disarm after it has been triggered instead of returning to the previous state. -- **armed_home|armed_away|armed_night|triggered** (*Optional*): State specific settings - - **pending_time**: State specific pending time override. +- **armed_home/armed_away/armed_night/disarmed/triggered** (*Optional*): State specific settings + - **delay_time** (*Optional*): State specific setting for **delay_time** (all states except **triggered**) + - **pending_time** (*Optional*): State specific setting for **pending_time** (all states except **disarmed**) + - **trigger_time** (*Optional*): State specific setting for **trigger_time** (all states except **triggered**) + +See the documentation for the [manual alarm platform](../alarm_control_panel.manual/) for a description. Additionally, the following MQTT configuration variables are also available: @@ -62,7 +68,13 @@ Additionally, the following MQTT configuration variables are also available: - **payload_arm_away** (*Optional*): The payload to set armed-away mode on this Alarm Panel. Default is "ARM_AWAY". - **payload_arm_night** (*Optional*): The payload to set armed-night mode on this Alarm Panel. Default is "ARM_NIGHT". -In the config example below, armed_home state will have no pending time and triggered state will have a pending time of 20 seconds whereas armed_away state will have a default pending time of 30 seconds. +In the config example below: + +- the disarmed state never triggers the alarm; + +- the armed_home state will leave no time to leave the building or disarm the alarm; + +- while other states state will give 30 seconds to leave the building before triggering the alarm, and 20 seconds to disarm the alarm when coming back. ```yaml # Example configuration.yaml entry @@ -71,11 +83,13 @@ alarm_control_panel: state_topic: home/alarm command_topic: home/alarm/set pending_time: 30 + delay_time: 20 + trigger_time: 4 + disarmed: + trigger_time: 0 armed_home: pending_time: 0 - triggered: - pending_time: 20 - trigger_time: 4 + delay_time: 0 ``` ## {% linkable_title Examples %} From 2eaaff4ebe4e800c5994fb5df3fbebbb533e4b84 Mon Sep 17 00:00:00 2001 From: Stefan Lehmann Date: Tue, 5 Dec 2017 19:34:19 +0100 Subject: [PATCH 25/60] Ads (#4115) * add ads hub and switch * add ads binary sensor * add ADS sensor * fix version numbers * separate configuration tag * remove device notification config * fix configuration schema. * replace tabs with spaces * add type key-value-pairs --- source/_components/ads.markdown | 65 +++++++++++++++++++ source/_components/binary_sensor.ads.markdown | 44 +++++++++++++ source/_components/light.ads.markdown | 43 ++++++++++++ source/_components/sensor.ads.markdown | 57 ++++++++++++++++ source/_components/switch.ads.markdown | 40 ++++++++++++ 5 files changed, 249 insertions(+) create mode 100644 source/_components/ads.markdown create mode 100644 source/_components/binary_sensor.ads.markdown create mode 100644 source/_components/light.ads.markdown create mode 100644 source/_components/sensor.ads.markdown create mode 100644 source/_components/switch.ads.markdown diff --git a/source/_components/ads.markdown b/source/_components/ads.markdown new file mode 100644 index 00000000000..f24715471ce --- /dev/null +++ b/source/_components/ads.markdown @@ -0,0 +1,65 @@ +--- +layout: page +title: "ADS" +description: Connect Home Assistant to TwinCAT devices via the ADS interface +date: 2017-12-05 12:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: home-assistant.png +ha_category: Hub +ha_release: 0.60 +ha_iot_class: "Local Push" +--- + +The ADS (automation device specification) describes a device-independent and +fieldbus-independent interface for communication between Beckhoff® automation +devices running TwinCAT® and other devices implementing this interface. + +Configuration parameters: + +{% configuration %} + device: + required: true + description: The AMS NetId that identifies the device + type: string + port: + required: true + description: The port that runs the AMS server on the device, typically this would be 801 or 851 + type: integer + ip_address: + required: false + description: The IP-Address of the ADS device, if not set the first 4 bytes of the device id will be used + type: string +{% endconfiguration %} + + +```yaml +# Example configuration.yaml entry +ads: + device: '127.0.0.1.1.1' + port: 48898 +``` + +## Service + +The ADS component will register the service `write_by_name` allowing you to +write a value to a variable on your ADS device. + +```json +{ + "adsvar": ".myvariable", + "adstype": "int", + "value": 123 +} +``` + +Service parameters: + +- **adsvar**: name of the variable on the ADS device. To access global variables +on *TwinCAT2* use a prepending dot `.myvariable`, for TwinCAT3 use +`GBL.myvariable` +- **adstype**: specify the type of the variable. Use one of the following: +`int`, `byte`, `uint`, `bool` +- **value**: the value that will be written in the variable diff --git a/source/_components/binary_sensor.ads.markdown b/source/_components/binary_sensor.ads.markdown new file mode 100644 index 00000000000..a76adbfbcd9 --- /dev/null +++ b/source/_components/binary_sensor.ads.markdown @@ -0,0 +1,44 @@ +--- +layout: page +title: "ADS Binary Sensor" +description: "Instructions on how to set up ADS binary sensors within Home Assistant." +date: 2017-10-25 10:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: home-assistant.png +ha_category: Binary Sensor +ha_release: 0.60 +ha_iot_class: "Local Push" +--- + +The binary sensor can be used to monitor a boolean value on your ADS device. + +To use your ADS device, you first have to set up your [ADS +hub](/components/ads/) and then add the following to your `configuration.yaml` +file: + +```yaml +# Example configuration.yaml entry +binary_sensor: + - platform: ads + adsvar: .boolean1 +``` + +Configuration variables: + +{% configuration %} + adsvar: + required: true + description: The name of the variable which you want to access on the ADS device + type: string + name: + required: false + description: An identifier for the light in the frontend + type: string + device_class: + required: false + description: The [type/class](/components/binary_sensor/) of the sensor to set the icon in the frontend + type: string +{% endconfiguration %} diff --git a/source/_components/light.ads.markdown b/source/_components/light.ads.markdown new file mode 100644 index 00000000000..6a46c562747 --- /dev/null +++ b/source/_components/light.ads.markdown @@ -0,0 +1,43 @@ +--- +layout: page +title: "ADS Light" +description: Instructions how to set up ADS lights within Home Assistant +date: 2017-10-25 10:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: home-assistant.png +ha_category: Light +ha_release: 0.60 +ha_iot_class: "Local Push" +--- + +To use your ADS device, you first have to set up your [ADS +hub](/components/ads/) and then add the following to your `configuration.yaml` +file: + +```yaml +# Example configuration.yaml entry +light: + - platform: ads + adsvar: GVL.enable_light + adsvar_brightness: GVL.brightness +``` + +Configuration variables: + +{% configuration %} + adsvar: + required: true + description: The name of the boolean variable that switches the light on + type: string + adsvar_brightness: + required: false + description: The name of the variable that controls the brightness, use an unsigned integer on the PLC side + type: integer + name: + required: false + description: An identifier for the Light in the frontend + type: string +{% endconfiguration %} \ No newline at end of file diff --git a/source/_components/sensor.ads.markdown b/source/_components/sensor.ads.markdown new file mode 100644 index 00000000000..e7a960b6777 --- /dev/null +++ b/source/_components/sensor.ads.markdown @@ -0,0 +1,57 @@ +--- +layout: page +title: "ADS Sensor" +description: "Instructions how to integrate ADS numeric values into Home Assistant." +date: 2017-10-25 10:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: home-assistant.png +ha_category: Sensor +ha_release: 0.60 +ha_iot_class: "Local Push" +--- + +The `ADS` sensor platform allows reading the value of a numeric variable on +your ADS device. The variable can be of type *INT*, *UINT* or *BYTE*. + +To use your ADS device, you first have to set up your [ADS +hub](/components/ads/) and then add the following to your `configuration.yaml` +file: + +```yaml +# Example configuration.yaml entry +sensor: + - platform: ads + adsvar: GVL.temperature + unit_of_measurement: '°C' + adstype: int +``` + +Configuration variables: + +{% configuration %} + adsvar: + required: true + description: The name of the variable which you want to access + type: string + adstype: + required: false + description: The datatype of the ADS variable, possible values are int, uint, byte + default: int + type: string + name: + required: false + description: An identifier for the sensor + type: string + factor: + required: false + description: A factor that divides the stored value before displaying in Home Assistant + default: 1 + type: integer +{% endconfiguration %} + +The *factor* can be used to implement fixed decimals. E.g., set *factor* to 100 +if you want to display a fixed decimal value with two decimals. A variable +value of `123` will be displayed as `1.23`. \ No newline at end of file diff --git a/source/_components/switch.ads.markdown b/source/_components/switch.ads.markdown new file mode 100644 index 00000000000..0053a28734f --- /dev/null +++ b/source/_components/switch.ads.markdown @@ -0,0 +1,40 @@ +--- +layout: page +title: "ADS Switch" +description: "Instructions on how to set up ADS switches within Home Assistant." +date: 2017-10-25 10:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: home-assistant.png +ha_category: Switch +ha_release: 0.60 +ha_iot_class: "Local Push" +--- + +An ADS switch accesses a boolean variable on the connected ADS device. The +variable is identified by its name. + +To use your ADS device, you first have to set up your [ADS +hub](/components/ads/) and then add the following to your `configuration.yaml` +file: + +```yaml +# Example configuration.yaml entry +switch: + - platform: ads + adsvar: .global_bool +``` +Configuration variables: + +{% configuration %} + adsvar: + required: true + description: The name of the variable which you want to access on the ADS device + type: string + name: + required: false + description: An identifier for the switch in the frontend + type: string +{% endconfiguration %} \ No newline at end of file From 39bed44f77eb4a0475ea132aca60d9d3477863fc Mon Sep 17 00:00:00 2001 From: Mitko Masarliev Date: Wed, 6 Dec 2017 07:57:28 +0200 Subject: [PATCH 26/60] hide if away option (#4051) * hide if away option * changes --- source/_components/device_tracker.markdown | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/source/_components/device_tracker.markdown b/source/_components/device_tracker.markdown index 105dec1e7f3..ece347286a7 100644 --- a/source/_components/device_tracker.markdown +++ b/source/_components/device_tracker.markdown @@ -26,15 +26,19 @@ device_tracker: host: 192.168.1.1 username: admin password: YOUR_PASSWORD + new_device_defaults: + track_new_devices: True + hide_if_away: False + ``` The following optional parameters can be used with any platform. However device tracker will only look for global settings under the configuration of the first configured platform: | Parameter | Default | Description | -|---------------------|---------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| `track_new_devices` | True | If new discovered devices are tracked by default | -| `interval_seconds` | 12 | Seconds between each scan for new devices | -| `consider_home` | 180 | Seconds to wait till marking someone as not home after not being seen. This parameter is most useful for households with Apple iOS devices that go into sleep mode while still at home to conserve battery life. iPhones will occasionally drop off the network and then re-appear. `consider_home` helps prevent false alarms in presence detection when using IP scanners such as Nmap. `consider_home` accepts various time representations, (E.g. the following all represents 3 minutes: `180`, `0:03`, `0:03:00`) | +|----------------------|---------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| `interval_seconds` | 12 | Seconds between each scan for new devices | +| `consider_home` | 180 | Seconds to wait till marking someone as not home after not being seen. This parameter is most useful for households with Apple iOS devices that go into sleep mode while still at home to conserve battery life. iPhones will occasionally drop off the network and then re-appear. `consider_home` helps prevent false alarms in presence detection when using IP scanners such as Nmap. `consider_home` accepts various time representations, (E.g. the following all represents 3 minutes: `180`, `0:03`, `0:03:00`) | +| `new_device_defaults`| | Default values for new discovered devices. Available options `track_new_devices` (default: `True`), `hide_if_away` (default: `False`) | The extended example from above would look like the following sample: From 93f964b7862b1a1acf7e11cb1640c24c45146c7c Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Wed, 6 Dec 2017 08:10:25 +0100 Subject: [PATCH 27/60] Update ADS documentation (#4145) --- source/_components/ads.markdown | 56 ++++++++---------- source/_components/binary_sensor.ads.markdown | 17 +++--- source/_components/light.ads.markdown | 13 ++-- source/_components/sensor.ads.markdown | 24 +++----- source/_components/switch.ads.markdown | 17 +++--- source/images/supported_brands/beckhoff.png | Bin 0 -> 7728 bytes 6 files changed, 54 insertions(+), 73 deletions(-) create mode 100644 source/images/supported_brands/beckhoff.png diff --git a/source/_components/ads.markdown b/source/_components/ads.markdown index f24715471ce..cea2088d32e 100644 --- a/source/_components/ads.markdown +++ b/source/_components/ads.markdown @@ -7,33 +7,15 @@ sidebar: true comments: false sharing: true footer: true -logo: home-assistant.png +logo: beckhoff.png ha_category: Hub -ha_release: 0.60 +ha_release: "0.60" ha_iot_class: "Local Push" --- -The ADS (automation device specification) describes a device-independent and -fieldbus-independent interface for communication between Beckhoff® automation -devices running TwinCAT® and other devices implementing this interface. - -Configuration parameters: - -{% configuration %} - device: - required: true - description: The AMS NetId that identifies the device - type: string - port: - required: true - description: The port that runs the AMS server on the device, typically this would be 801 or 851 - type: integer - ip_address: - required: false - description: The IP-Address of the ADS device, if not set the first 4 bytes of the device id will be used - type: string -{% endconfiguration %} +The ADS (automation device specification) describes a device-independent and fieldbus independent interface for communication between [Beckhoff](https://www.beckhoff.com/) automation devices running [TwinCAT](http://www.beckhoff.hu/english.asp?twincat/default.htm) and other devices implementing this interface. +To enable ADS, add the following lines to your `configuration.yaml` file: ```yaml # Example configuration.yaml entry @@ -42,10 +24,24 @@ ads: port: 48898 ``` -## Service +{% configuration %} + device: + required: true + description: The AMS NetId that identifies the device. + type: string + port: + required: true + description: The port that runs the AMS server on the device, typically this would be 801 or 851. + type: int + ip_address: + required: false + description: The IP address of the ADS device, if not set the first 4 bytes of the device id will be used. + type: string +{% endconfiguration %} -The ADS component will register the service `write_by_name` allowing you to -write a value to a variable on your ADS device. +## {% linkable_title Service %} + +The ADS component will register the service `write_by_name` allowing you to write a value to a variable on your ADS device. ```json { @@ -57,9 +53,7 @@ write a value to a variable on your ADS device. Service parameters: -- **adsvar**: name of the variable on the ADS device. To access global variables -on *TwinCAT2* use a prepending dot `.myvariable`, for TwinCAT3 use -`GBL.myvariable` -- **adstype**: specify the type of the variable. Use one of the following: -`int`, `byte`, `uint`, `bool` -- **value**: the value that will be written in the variable +- **adsvar**: Name of the variable on the ADS device. To access global variables on *TwinCAT2* use a prepending dot `.myvariable`, for TwinCAT3 use +`GBL.myvariable`. +- **adstype**: Specify the type of the variable. Use one of the following: `int`, `byte`, `uint`, `bool` +- **value**: The value that will be written in the variable. diff --git a/source/_components/binary_sensor.ads.markdown b/source/_components/binary_sensor.ads.markdown index a76adbfbcd9..753858d9737 100644 --- a/source/_components/binary_sensor.ads.markdown +++ b/source/_components/binary_sensor.ads.markdown @@ -7,16 +7,15 @@ sidebar: true comments: false sharing: true footer: true -logo: home-assistant.png +logo: beckhoff.png ha_category: Binary Sensor -ha_release: 0.60 +ha_release: "0.60" ha_iot_class: "Local Push" --- -The binary sensor can be used to monitor a boolean value on your ADS device. +The `ads` binary sensor platform can be used to monitor a boolean value on your ADS device. -To use your ADS device, you first have to set up your [ADS -hub](/components/ads/) and then add the following to your `configuration.yaml` +To use your ADS device, you first have to set up your [ADS hub](/components/ads/) and then add the following to your `configuration.yaml` file: ```yaml @@ -26,19 +25,17 @@ binary_sensor: adsvar: .boolean1 ``` -Configuration variables: - {% configuration %} adsvar: required: true - description: The name of the variable which you want to access on the ADS device + description: The name of the variable which you want to access on the ADS device. type: string name: required: false - description: An identifier for the light in the frontend + description: An identifier for the light in the frontend. type: string device_class: required: false - description: The [type/class](/components/binary_sensor/) of the sensor to set the icon in the frontend + description: The [type/class](/components/binary_sensor/) of the sensor to set the icon in the frontend. type: string {% endconfiguration %} diff --git a/source/_components/light.ads.markdown b/source/_components/light.ads.markdown index 6a46c562747..b5188cf33e8 100644 --- a/source/_components/light.ads.markdown +++ b/source/_components/light.ads.markdown @@ -7,14 +7,15 @@ sidebar: true comments: false sharing: true footer: true -logo: home-assistant.png +logo: beckhoff.png ha_category: Light -ha_release: 0.60 +ha_release: "0.60" ha_iot_class: "Local Push" --- -To use your ADS device, you first have to set up your [ADS -hub](/components/ads/) and then add the following to your `configuration.yaml` +The `ads` light platform allows you to control your connecte ADS lights. + +To use your ADS device, you first have to set up your [ADS hub](/components/ads/) and then add the following to your `configuration.yaml` file: ```yaml @@ -25,8 +26,6 @@ light: adsvar_brightness: GVL.brightness ``` -Configuration variables: - {% configuration %} adsvar: required: true @@ -40,4 +39,4 @@ Configuration variables: required: false description: An identifier for the Light in the frontend type: string -{% endconfiguration %} \ No newline at end of file +{% endconfiguration %} diff --git a/source/_components/sensor.ads.markdown b/source/_components/sensor.ads.markdown index e7a960b6777..0e65a67bb60 100644 --- a/source/_components/sensor.ads.markdown +++ b/source/_components/sensor.ads.markdown @@ -7,17 +7,15 @@ sidebar: true comments: false sharing: true footer: true -logo: home-assistant.png +logo: beckhoff.png ha_category: Sensor -ha_release: 0.60 +ha_release: "0.60" ha_iot_class: "Local Push" --- -The `ADS` sensor platform allows reading the value of a numeric variable on -your ADS device. The variable can be of type *INT*, *UINT* or *BYTE*. +The `ads` sensor platform allows reading the value of a numeric variable on your ADS device. The variable can be of type *INT*, *UINT* or *BYTE*. -To use your ADS device, you first have to set up your [ADS -hub](/components/ads/) and then add the following to your `configuration.yaml` +To use your ADS device, you first have to set up your [ADS hub](/components/ads/) and then add the following to your `configuration.yaml` file: ```yaml @@ -29,29 +27,25 @@ sensor: adstype: int ``` -Configuration variables: - {% configuration %} adsvar: required: true - description: The name of the variable which you want to access + description: The name of the variable which you want to access. type: string adstype: required: false - description: The datatype of the ADS variable, possible values are int, uint, byte + description: The datatype of the ADS variable, possible values are int, uint, byte. default: int type: string name: required: false - description: An identifier for the sensor + description: An identifier for the sensor. type: string factor: required: false - description: A factor that divides the stored value before displaying in Home Assistant + description: A factor that divides the stored value before displaying in Home Assistant. default: 1 type: integer {% endconfiguration %} -The *factor* can be used to implement fixed decimals. E.g., set *factor* to 100 -if you want to display a fixed decimal value with two decimals. A variable -value of `123` will be displayed as `1.23`. \ No newline at end of file +The *factor* can be used to implement fixed decimals. E.g., set *factor* to 100 if you want to display a fixed decimal value with two decimals. A variable value of `123` will be displayed as `1.23`. diff --git a/source/_components/switch.ads.markdown b/source/_components/switch.ads.markdown index 0053a28734f..28396413292 100644 --- a/source/_components/switch.ads.markdown +++ b/source/_components/switch.ads.markdown @@ -7,17 +7,15 @@ sidebar: true comments: false sharing: true footer: true -logo: home-assistant.png +logo: beckhoff.png ha_category: Switch -ha_release: 0.60 +ha_release: "0.60" ha_iot_class: "Local Push" --- -An ADS switch accesses a boolean variable on the connected ADS device. The -variable is identified by its name. +The `ads` switch platform accesses a boolean variable on the connected ADS device. The variable is identified by its name. -To use your ADS device, you first have to set up your [ADS -hub](/components/ads/) and then add the following to your `configuration.yaml` +To use your ADS device, you first have to set up your [ADS hub](/components/ads/) and then add the following to your `configuration.yaml` file: ```yaml @@ -26,15 +24,14 @@ switch: - platform: ads adsvar: .global_bool ``` -Configuration variables: {% configuration %} adsvar: required: true - description: The name of the variable which you want to access on the ADS device + description: The name of the variable which you want to access on the ADS device. type: string name: required: false - description: An identifier for the switch in the frontend + description: An identifier for the switch in the frontend. type: string -{% endconfiguration %} \ No newline at end of file +{% endconfiguration %} diff --git a/source/images/supported_brands/beckhoff.png b/source/images/supported_brands/beckhoff.png new file mode 100644 index 0000000000000000000000000000000000000000..8fc9d8e027bde2409fe2557d22ac682661469f1e GIT binary patch literal 7728 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 B?FIk< literal 0 HcmV?d00001 From d937207fc4874d3a7bc5c52551e46dddcf593142 Mon Sep 17 00:00:00 2001 From: Ludovico de Nittis Date: Wed, 6 Dec 2017 08:48:52 +0100 Subject: [PATCH 28/60] Add iAlarm documentation (#4106) * Add iAlarm documentation * bump version to 0.60 and add a link to the iAlarm documentation * Use the configuration syntax on ialarm * Update 'ha_release' --- .../alarm_control_panel.ialarm.markdown | 48 ++++++++++++++++++ .../supported_brands/antifurto365-ialarm.png | Bin 0 -> 10410 bytes 2 files changed, 48 insertions(+) create mode 100644 source/_components/alarm_control_panel.ialarm.markdown create mode 100644 source/images/supported_brands/antifurto365-ialarm.png diff --git a/source/_components/alarm_control_panel.ialarm.markdown b/source/_components/alarm_control_panel.ialarm.markdown new file mode 100644 index 00000000000..9c58525fc62 --- /dev/null +++ b/source/_components/alarm_control_panel.ialarm.markdown @@ -0,0 +1,48 @@ +--- +layout: page +title: "Antifurto365 iAlarm Control Panel" +description: "Instructions how to integrate iAlarms alarms into Home Assistant." +date: 2017-11-30 20:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: antifurto365-ialarm.png +ha_category: Alarm +ha_release: "0.60" +--- + +The `ialarm` platform provides connectivity with the [Antifurto365](https://www.antifurtocasa365.it/) iAlarm alarm systems. + +This platform supports the following services: `alarm_arm_away`, `alarm_arm_home` and `alarm_disarm`. + +To enable this, add the following lines to your `configuration.yaml`: + +```yaml +# Example configuration.yaml entry +alarm_control_panel: + - platform: ialarm + host: ALARM_SYSTEM_IP + username: YOUR_USERNAME + password: YOUR_PASSWORD +``` + +{% configuration %} + host: + description: The IP address of the iAlarm device on your home network. + required: true + type: string + username: + description: Username used to sign into the iAlarm web client (should be admin by default). + required: true + type: string + password: + description: Password used to sign into the iAlarm web client. + required: true + type: string + name: + description: Name of device in Home Assistant. + required: false + type: string +{% endconfiguration %} + diff --git a/source/images/supported_brands/antifurto365-ialarm.png b/source/images/supported_brands/antifurto365-ialarm.png new file mode 100644 index 0000000000000000000000000000000000000000..b951f5c7b8de18761d104501a0a05f2823be906b GIT binary patch literal 10410 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 Date: Fri, 8 Dec 2017 19:16:46 +0200 Subject: [PATCH 29/60] Change default JS version to 'auto' (#4150) --- source/_components/frontend.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/frontend.markdown b/source/_components/frontend.markdown index aa7f0cb9263..92c0e8d8dd4 100644 --- a/source/_components/frontend.markdown +++ b/source/_components/frontend.markdown @@ -23,7 +23,7 @@ frontend: description: "Version of the JavaScript to serve to clients. Options: `es5` - transpiled so old browsers understand it. `latest` - not transpiled, so will work on recent browsers only. `auto` - select a version according to the browser user-agent. The value in the config can be overiden by putting `es5` or `latest` in the URL. For example `http://localhost:8123/states?es5` " required: false type: string - default: es5 + default: auto themes: description: Allow to define different themes. See below for further details. required: false From 5eae987e5bf606cbade7a1bb6271dd2c7728faec Mon Sep 17 00:00:00 2001 From: Menno Blom Date: Sat, 9 Dec 2017 14:41:45 +0100 Subject: [PATCH 30/60] Ziggo mediabox xl (#3956) * Add support page for new Ziggo Mediabox XL media_player * Version push * Requested PR changes * Version push * :pencil2: Changed IoT class to local polling --- .../media_player.ziggo_mediabox_xl.markdown | 43 ++++++++++++++++++ source/images/supported_brands/ziggo.png | Bin 0 -> 4892 bytes 2 files changed, 43 insertions(+) create mode 100644 source/_components/media_player.ziggo_mediabox_xl.markdown create mode 100644 source/images/supported_brands/ziggo.png diff --git a/source/_components/media_player.ziggo_mediabox_xl.markdown b/source/_components/media_player.ziggo_mediabox_xl.markdown new file mode 100644 index 00000000000..5919b19b50b --- /dev/null +++ b/source/_components/media_player.ziggo_mediabox_xl.markdown @@ -0,0 +1,43 @@ +--- +layout: page +title: "Ziggo Mediabox XL" +description: "Instructions how to integrate the Ziggo Mediabox XL into Home Assistant." +date: 2017-11-10 20:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: ziggo.png +ha_category: Media Player +ha_iot_class: "Local Polling" +ha_release: "0.60" +--- + +The `ziggo_mediabox_xl` component allows you to control a [Ziggo](https://www.ziggo.nl/) Mediabox XL from Home Assistant. + +To add a Ziggo Mediabox XL to your installation, add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +media_player: + - platform: ziggo_mediabox_xl + host: 192.168.0.123 + name: Ziggo Mediabox +``` + +{% configuration %} + host: + description: The hostname or address of the device. + required: true + type: string + name: + description: The name of the device used in the frontend. + required: false + type: string +{% endconfiguration %} + +The channel information (numbers and names) are downloaded from ziggo.nl on startup. + +#### {% linkable_title Preparation of the Mediabox %} + +Makes sure to enable the Home Network ("mijn thuisnetwerk") service in the settings menu of the media box. Once you have set up the Media Library ("mediabiblotheek"), we can determine whether the device is turned on or off. Without this, the component will fail to start. diff --git a/source/images/supported_brands/ziggo.png b/source/images/supported_brands/ziggo.png new file mode 100644 index 0000000000000000000000000000000000000000..ffd875015a91a39c3e254a244bb4ca9bf8f4cce2 GIT binary patch literal 4892 zcmbVQc{r5&+ec&17L^dgP(zKG!C-{3YskJP(inrm7{*}iSt7EAQnGWh6h{czL!?BL zB3aXf?E5J3PUoD?`~LB}et*2rbv@5_yFd5xx$pb>Ue}XgZfeNGCBntT#KeQXsAtI- z+ZeA72OHzNAnkp~7*3J(?a5X|H*ye$gk#cnCA#2%XadF^XNkkO2K&9lsWUMhq2R6U z$@V6f)UZT?Jm!~-JcZ!PKr=C^qbR-@tQU?9biujfeKe$2o7<&;cvlT6JA?_$#8(&R zfxj3+!dZowT4O`Jut--alqOJ}qQ+1_z>zUP3c=gQUyY(6^_N~X#{AbdR0{Z)2-!Tjp)P0WG1L=p~&kXMFa;cz%m1t||ls46NT&I1)-a0C>Fgu-DE7+ehwQ&WHe|9PYs z)<~{yYLUxEy8)XYeDMp7`|dPHmh z0p~+T>uE?aPUKzju4-;L6;&k{B?Lr80j3O5az!XXkXVEpL|H`<0drGPc2mOOe(U*9 zcmt%iuBswZM-Qp342SD0BNbHi3=ldB2t6f)0YYErHx}*VPsaFQaldWj8MgnyYX4WP znl1^4Arnc~M56caDlqpTl8OEvL|>q;?q694f=w`3yw9&q* zRWARhe12~+YVz0g-)3Me{%t3m52J@jjAnr+TM95S@u{Kpw5=&)OHQ11LOsXBBk9-H zDz9_%Ctr7AG2)MYAyYI>(t|ew^@hu`1&`Oxsu)Qpb~j3Mi1f%96tnng>ofatitOG@ zl)9Z=;38F4cK$O9M^Q%5@`ahr+3ut2zr-s#SKr4mUk{4KM8ClN#z%*u*9boIzJStT-b@Zkd-#7jG zxzJMpg$fAs_god~4?=lZCCQ)G?wZ=ZU|E$OqDTO-g?ELvT@D^xT6gbYcPePH6Ko=u z`MTp$+Y>6)p=Z%dZeRS2ge z3xxcO|HC0cEH?7$D`Y{Dl_@)RvwNU?kUpP zGxPh!!`b%p;^23QfZaVHvN-90Z-4pK{y~kl*&7etG0Ud*jkf+~aFA`4)j{G0d;dA< zzSAKVdy=$=P24i*HOg{fSOK6WDL1nr3)t8Yw;6UNxN4)eUs3K0M~8!We|>E0Q_#q< z7R%s-4HnwRV*n=!n}gvH0nN5L@2{W3Z2X^{I4F+uE%$4`ORq(Y$U&_mqWNUx>c4cY z%4?sQ!wS4%MSQzN(=D-38rPywB5lR1_uXDEjyUX*X_)@gVkt*7#UFNE^JGa$p6quA z^Z7cyDm?}`1BKS#5tS}Kbsc5LzFWt1AVsT|0rRW{^4Uayx@#aDmViGU)`?xZ6=bK( zYIDueF5~3IL)&QK1T#;AjzfbclWzY3tAnNu5M2FTE}gWUN)cajm~FgMX~c}0!&A}j z>N}-EW7PFVLL=63lxYit7q+<*qcLvA-F9>IWthQWL$OgnDft)o@vnODLdxV{GYZx;@5Mi#kKM5oFVlah~bHFDz9}@m}}ZjNy?;3 zT>T;3xy)Al!?6n!Jd86-yD{_l9?tzMcp({+vqounyzWiY-Ho+^Gv)y|Z#npCq$c^M zTn&qQntb_WWZF|pd(aQH3R6FU*oit9uLW-UE6ztHcy1$f4l6w&ezEf=N;k)dnidnX|@ULevG4YN>gl+oA1Ez2j2joguCjd*stU z2x1-Vxdz)5j)R-?J)A;<-E%JS#?9zGJi9H zI$wUEGxx^|CyGh8#2bMNhpm-)Q*k@#Je^$ue?XP|o~SdSni zXX&Zl*QI-sA4r_=^$N^*q1<*ur3vSJx^{5RXw!=mYi!QO9zJIpq)5a#LsgWz%aQU5 zpmNR4xIej<2Xf2Beo9HtbCb_H53SVk%q8ghB+(pL>QJ{}hGl-e#%a#BRxe&D0(m;( zha1sL`|H&tcZyh{6Oh-iTSE>WQ(~ z`9SGtNM(n*iFUQVY)$&5&9HN<{z`j4rgkV0tNp?NYDaY;yK5|s;>xm<(f@@x;YLlX znoNgE>De&w!b6();C4BuB3h)O@xy>i{$jM$y0)x^jKWwSST=!gwNHqBXzEUsX0a!` z=9XD(7Q1~)Z`In*GrS?{C%fhNA-Vd+5f)r?3Hu=W#LUO&%2S9QP$ed6);8d&^gQ7f zswxXOQYstS3FriW0R|AZc1dcLvQ{-OHpS9e6RDbj9+BqIoQHs0^;s;MQt219|6I1% zyTEz-5fu=UVbNMYwohQrR8#>w`gcPrkZ zqsMHo4CO<8IIp7L{)n3jKQRiD@Q9AB^lHkx6KmQ)=V~+7A?l|Pj1*-ZH%gPJD0mkbgfp?*)*x%5)a>E zb%*A9FNWaLweP$9jF{&%MqysaLHfX!JcrGPOtTJ`4U~NH%Ecl$FSySboQp zS@iXcWPsiz2i2oGee0cW+|=M78iF_0I+}Y_4OLGW=sy5$eKnTK!~QW7G%V!3ikVx& z2ygxgoi2Va>JT(4q}tV|eRZc>ZvDx)5B+p$NCsyTEcSEGEA=whLD3h(@xue$mRkm# z{b0sDIecnL00UvBub<$(#U92ap>gdG2N7Ifhp05|)g;wGv3p5(b-=I6Bqz<~X90a- z&_9=z!rU^eD?B0CV^*Di@5D}Do}-{0bg*rF@6ru_gKp1i3<&J)E0-qn zOV7&%CG|M?m>ype;6{iF>m_)&q7H7jNc`E+C@WCS9(0zg(Be_DYeNrb)M1E7O|$5W z&N4&Oy>=O}L|A5XkDL)~i|L!;LesrDWL0VHwYZ*9L5_+AN8`E^+GOFV^1znC&SQgj zCC^g-fFGw%_p~HK`zHW9I#n`Elj!K^pOU=Kv6)6cdMu(++2^P#Pd;Rj7xfLAB%b+B zOwT-c1(80UwC)aJzE!r!Q8TEst-otQt65K}n_eN4pZo7WV4L?gRxc2qKc8@r)o&;| zW@%xa%X{1L_7!+Vv9$Qt8As(CB8Q)k7;o;jYxU&@OVRxGTDSZ@U#%7Gp-U7|BXaqs zt1rHkdY-s?YKC(C3+`2o6?hM23@@A3($blJlo=z@{B8))(VlkyCEL&7BBn!vQKylW zqDUf!^zcei`fgc=;f2LpmMjMmyx79A4%~@S-RE5L^2gTCT%=dGw4*_dwVA}n0#Elh zB3QhHTU9Wn^j61O_zCEPbK!k^k|E(4vCxHXhaxM7vl-?J!2#ZFftt5(g(|c{2y%dZ zlID1-?8h1RcH{ksR|`0i);<$d5_CEbK&tB2&C`tuVGH7W&AQS|a;78{@jfcmV_h{B zy@t}Pc6qy_&NFmUy07(_;fIqkITiCoN=Ng|#EyU1NMrN5eDqc&{ZftBr8&pPfyoY& zuH``OE3Y_FXw!2OvIikgGo?ykX1BLBocJ3&%(T-$({{d&a5OpXhWm5&fjc~{_Sq6H zM{_nIO)Sx8exBq8;?( z%`kJ29ZTPtO&HHGI(m4{Phb5U0sJ#ZzlCjUqOvjYuvD+@(vq=!Ls4gVB4+&T){EG} zJL-o=lu~A547;}gHG}WeqUDknZox*31IXUo(x#gEy(eF#LnzHOIP8P?osQP0^0?i1 z_bW_@@Ln)*JD=N+N7~j2y(R=|e8)ebKfHzCdlLFsG${XF&&rYaqor^7;ATSXl9JAwBo2}#K#tl>`EA(pG) zJ4Y`{2O(Qk=UoDQ@b#MianR`17}xMGioExYFHCoN0<^1ciUV4Mpq%}4%4Zym(UjZq zPRsDB^wm1=mP>{S`Oxm!h__+8j_b~->te;4conzY>t<`9b@r8K>6T5Y3Uq1jAHFYB zwi_X!&#j`#7bU*Uggg4@_s|>dl!Elb7sdGIbUlx>SRAQ1ebSi{(4Q{S3L7%VrG9n= zI4GCj4!xq)QM|dK6dQG!{9-NnuOC)u MeN(+Eoomtm1DFfac>n+a literal 0 HcmV?d00001 From 03e31d745f8145bd8de12a4306b21547f756ccdc Mon Sep 17 00:00:00 2001 From: ziotibia81 Date: Sat, 9 Dec 2017 14:47:23 +0100 Subject: [PATCH 31/60] climate.generic_thermostat initial_operation_mode (#4020) * climate.generic_thermostat initial_operation_mode * initial_operation_mode punctualization --- source/_components/climate.generic_thermostat.markdown | 2 ++ 1 file changed, 2 insertions(+) diff --git a/source/_components/climate.generic_thermostat.markdown b/source/_components/climate.generic_thermostat.markdown index e477044c300..e04a27588e9 100644 --- a/source/_components/climate.generic_thermostat.markdown +++ b/source/_components/climate.generic_thermostat.markdown @@ -38,6 +38,7 @@ Configuration variables: - **cold_tolerance** (*Optional*): Set a minimum amount of difference between the temperature read by the sensor specified in the *target_sensor* option and the target temperature that must change prior to being switched on. For example, if the target temperature is 25 and the tolerance is 0.5 the heater will start when the sensor equals or goes below 24.5. - **hot_tolerance** (*Optional*): Set a minimum amount of difference between the temperature read by the sensor specified in the *target_sensor* option and the target temperature that must change prior to being switched off. For example, if the target temperature is 25 and the tolerance is 0.5 the heater will stop when the sensor equals or goes above 25.5. - **keep_alive** (*Optional*): Set a keep-alive interval. If set, the switch specified in the *heater* option will be triggered every time the interval elapses. Use with heaters and A/C units that shut off if they don't receive a signal from their remote for a while. +- **initial_operation_mode** (*Optional*): Set the initial operation mode. Valid values are `off` or `auto`. Value has to be double quoted. If this parameter is not set, it is preferable to set a *keep_alive* value. This is helpful to align any discrepancies between *generic_thermostat* and *heater* state. A full configuration example looks like the one below. `min_cycle_duration` and `keep_alive` must contain at least one of the following entries: `days:`, `hours:`, `minutes:`, `seconds:` or `milliseconds:`. @@ -57,4 +58,5 @@ climate: seconds: 5 keep_alive: minutes: 3 + initial_operation_mode: "off" ``` From d2de6af4e34932615a40aa94b1b21da381980ca7 Mon Sep 17 00:00:00 2001 From: Mitko Masarliev Date: Sat, 9 Dec 2017 16:00:52 +0200 Subject: [PATCH 32/60] Meraki device tracker documentation (#4044) * Meraki * docs * removed track new * logo & changes * fix release number * fix tag * :pencil2: Minor tweaks --- .../device_tracker.meraki.markdown | 37 ++++++++++++++++++ source/images/supported_brands/meraki.png | Bin 0 -> 3541 bytes 2 files changed, 37 insertions(+) create mode 100644 source/_components/device_tracker.meraki.markdown create mode 100644 source/images/supported_brands/meraki.png diff --git a/source/_components/device_tracker.meraki.markdown b/source/_components/device_tracker.meraki.markdown new file mode 100644 index 00000000000..dae482748fd --- /dev/null +++ b/source/_components/device_tracker.meraki.markdown @@ -0,0 +1,37 @@ +--- +layout: page +title: "Meraki" +description: "Instructions on how to integrate Meraki-based presence detection into Home Assistant." +date: 2017-11-22 08:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: meraki.png +ha_category: Presence Detection +ha_release: "0.60" +--- +Use your `Meraki AP` as device tracker. Note that Meraki will see all devices, not only connected to the network. +Follow instructions [here](https://meraki.cisco.com/technologies/location-analytics-api) how to enable Location Analytics. + +After you configure access to the Meraki CMX API, add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +device_tracker: + - platform: meraki + secret: your_secert + validator: meraki_validator +``` + + +{% configuration %} + secret: + description: Secret code added in Meraki + required: true + type: string + validator: + description: Validation string from Meraki + required: true + type: string +{% endconfiguration %} diff --git a/source/images/supported_brands/meraki.png b/source/images/supported_brands/meraki.png new file mode 100644 index 0000000000000000000000000000000000000000..63a2dff1f2ca66340dfb8bac6c8e0bde9363a8b7 GIT binary patch literal 3541 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 Date: Sat, 9 Dec 2017 07:01:30 -0700 Subject: [PATCH 33/60] Added vera scene documentation (#3996) * Added vera scene documentation * :pencil2: Tiny grammar fix * Updated vera scene documentation with proper description, date, and release * Fixed ha_release * Fixed ha_release * :pencil2: Minor tweak --- source/_components/scene.vera.markdown | 21 +++++++++++++++++++++ source/_components/vera.markdown | 2 +- 2 files changed, 22 insertions(+), 1 deletion(-) create mode 100644 source/_components/scene.vera.markdown diff --git a/source/_components/scene.vera.markdown b/source/_components/scene.vera.markdown new file mode 100644 index 00000000000..8cef7235eca --- /dev/null +++ b/source/_components/scene.vera.markdown @@ -0,0 +1,21 @@ +--- +layout: page +title: "Vera Scene" +description: "Instructions on how to integrate Vera Scenes into Home Assistant." +date: 2017-11-20 20:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: vera.png +ha_category: Scene +ha_iot_class: "Local Push" +ha_release: "0.60" +--- + +The `vera` platform allows you to control your [Vera](http://getvera.com/) scenes from within Home Assistant. + +They will be automatically discovered if the `vera` component is loaded. + +For more configuration information see the [Vera component](/components/vera/) documentation. + diff --git a/source/_components/vera.markdown b/source/_components/vera.markdown index 670d0292c84..264f39157f7 100644 --- a/source/_components/vera.markdown +++ b/source/_components/vera.markdown @@ -14,7 +14,7 @@ ha_release: pre 0.7 The [Vera](http://getvera.com) hub is a controller mainly connecting to Z-Wave devices. -Switches, Lights (inc Dimmers), Locks, Sensors and Binary sensors are supported - and will be automatically added when HA connects to your Vera controller. +Switches, Lights (inc Dimmers), Locks, Sensors, Binary sensors, and Scenes are supported - and will be automatically added when HA connects to your Vera controller. To use Vera devices in your installation, add the following to your configuration.yaml file using the IP and port number of your Vera controller: From b2695f3eca9645aafb06ca92cd710252f33f8018 Mon Sep 17 00:00:00 2001 From: tringler Date: Sat, 9 Dec 2017 18:01:18 +0100 Subject: [PATCH 34/60] Added Links and PyCharm Recommendation (#4169) * Added Links and PyCharm Recommendation * Remove [ --- source/developers/development_environment.markdown | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/source/developers/development_environment.markdown b/source/developers/development_environment.markdown index 21d7651f031..19713dff803 100644 --- a/source/developers/development_environment.markdown +++ b/source/developers/development_environment.markdown @@ -16,11 +16,13 @@ You'll need to set up a development environment if you want to develop a new fea #### {% linkable_title Developing on Linux %} Install the core dependencies. + ```bash $ sudo apt-get install python3-pip python3-dev python3-venv ``` In order to run `script/setup` below you will need some more dependencies. + ```bash $ sudo apt-get install libssl-dev libxml2-dev libxslt1-dev libjpeg-dev libffi-dev libudev-dev zlib1g-dev ``` @@ -33,7 +35,9 @@ Additional dependencies exist if you plan to perform Frontend Development, pleas #### {% linkable_title Developing on Windows %} -If you are using Windows as a development platform, make sure that you have the correct Microsoft Visual C++ build tools installed. Check the [Windows Compilers](https://wiki.python.org/moin/WindowsCompilers) section on the [Python website](https://www.python.org/) for details. Validation using `tox` will fail if this is not done correctly. +If you are using Windows as a development platform, make sure that you have the correct Microsoft [Visual C++ build tools](http://landinghub.visualstudio.com/visual-cpp-build-tools) installed. The installation of the most requirements and validation using `tox` will fail if this is not done correctly. Check the [Windows Compilers](https://wiki.python.org/moin/WindowsCompilers) section on the [Python website](https://www.python.org/) for details. + +It is recommended using [PyCharm](https://www.jetbrains.com/pycharm/download/) as debugger. Also, make sure to install or upgrade the `setuptools` Python package. It contains compatibility improvements and adds automatic use of compilers: From e1284d46b907abc96f8ccac0fa6c7826191f3277 Mon Sep 17 00:00:00 2001 From: tschmidty69 Date: Sun, 10 Dec 2017 04:36:24 -0500 Subject: [PATCH 35/60] Updated Snips documentation with apt install and extended slot info (#4174) * Update media_player.markdown * Update media_player.markdown * Added apt install and extended slot information * Reverted change to this branch * Rescaping --- source/_components/snips.markdown | 59 ++++++++++++++++++++++++++++--- 1 file changed, 55 insertions(+), 4 deletions(-) diff --git a/source/_components/snips.markdown b/source/_components/snips.markdown index ef4b7d04295..622bfa904e0 100644 --- a/source/_components/snips.markdown +++ b/source/_components/snips.markdown @@ -14,6 +14,8 @@ ha_release: 0.48 The [Snips Voice Platform](https://www.snips.ai) allows users to add powerful voice assistants to their Raspberry Pi devices without compromising on Privacy. It runs 100% on-device, and does not require an Internet connection. It features Hotword Detection, Automatic Speech Recognition (ASR), Natural Language Understanding (NLU) and Dialog Management. +The latest documentation can be found here: [Snips Platform Documentation](https://github.com/snipsco/snips-platform-documentation/wiki). + ![Snips Modules](/images/screenshots/snips_modules.png) Snips takes voice or text as input, and produces *intents* as output, which are explicit representations of an intention behind an utterance, and which can subsequently be used by Home Assistant to perform appropriate actions. @@ -25,12 +27,24 @@ Snips takes voice or text as input, and produces *intents* as output, which are ### Installation -The Snips Voice Platform is installed on Raspberry Pi with the following command: +The Snips Voice Platform is installed as a docker image on Raspberry Pi with the following command: ```sh (pi) $ curl https://install.snips.ai -sSf | sh ``` +Snips can also be installed on a Debian/Ubuntu machine as well: + +```sh +sudo apt-get update +sudo apt-get install -y dirmngr +sudo bash -c 'echo "deb https://debian.snips.ai/$(lsb_release -cs) stable main" > /etc/apt/sources.list.d/snips.list' +sudo apt-key adv --keyserver pgp.mit.edu --recv-keys F727C778CCB0A455 + +sudo apt-get update +sudo apt-get install -y snips-platform-voice +``` + ### Creating an assistant
@@ -55,9 +69,14 @@ Make sure that a microphone is plugged to the Raspberry Pi. If you are having tr Start the Snips Voice Platform using the `snips` command: +Raspberry Pi: ```sh (pi) $ snips ``` +Debian/Ubuntu: +```sh +sudo systemctl start "snips-*" +``` Snips is now ready to take voice commands from the microphone. To trigger the listening, simply say @@ -67,15 +86,20 @@ followed by a command, e.g. > Set the lights to green in the living room -We should see the transcribed phrase in the logs, as well as a properly parsed intent. The intent is published on MQTT, on the `hermes/nlu/intentParsed` topic. The Snips Home Assistant component subscribes to this topic, and handles the intent according to the rules defined in `configuration.yaml`, as explained below. +We should see the transcribed phrase in the logs, as well as a properly parsed intent. The intent is published on MQTT, on the `hermes/intent/` topic. The Snips Home Assistant component subscribes to this topic, and handles the intent according to the rules defined in `configuration.yaml`, as explained below. #### Optional: specifying an external MQTT broker By default, Snips runs its own MQTT broker. But we can also tell Snips to use an external broker by specifying this when launching Snips. In this case, instead of running the `snips` command above (which assumes we are using the internal MQTT broker), we use the full launch command with explicitly specified parameters (replace `MQTT_BROKER_IP` and `MQTT_BROKER_PORT` with appropriate values): +Raspberry Pi: + ```sh $ docker run -t --rm --name snips --log-driver none -v /home/pi/.asoundrc:/root/.asoundrc -v /opt/snips/config:/opt/snips/config --privileged -v /dev/snd:/dev/snd snipsdocker/platform --mqtt MQTT_BROKER_IP:MQTT_BROKER_PORT ``` +Debian/Ubuntu: + +Edit the /etc/snips.toml file. See snips documentation for more information on configuring this For more details on launch options, check the documentation on [Snips Platform Commands](https://github.com/snipsco/snips-platform-documentation/wiki/6.--Learn-more:-Platform-Commands#using-a-custom-mqtt-bus). @@ -98,10 +122,14 @@ mqtt: broker: 127.0.0.1 port: 9898 ``` + +Alternatively, MQTT can be configured to bridge messages between servers if using a custom mqtt broker such as mosquitto. + ### Triggering actions In Home Assistant, we trigger actions based on intents produced by Snips using the [`intent_script`](/components/intent_script) component. For instance, the following block handles `ActivateLightColors` intents (included in the Snips IoT intent bundle) to change light colors: +{% raw %} ```yaml snips: @@ -110,6 +138,29 @@ intent_script: action: - service: light.turn_on data_template: - entity_id: light.{% raw %}{{ objectLocation | replace(" ","_") }}{% endraw %} - color_name: {% raw %}{{ objectColor }}{% endraw %} + entity_id: light.{{ objectLocation | replace(" ","_") }} + color_name: {{ objectColor }} ``` +{% endraw %} + +The variables that can be used in the template are of the form 'slotName = value'. + +Snips intents that utilize builtin slot types will contain extended information along with the value and can be exposed using this format: + +{% raw %} +```yaml +SetTimer: + speech: + type: plain + text: weather + action: + service: script.set_timer + data_template: + name: "{{ timer_name }}" + duration: "{{ timer_duration }}" + seconds: "{{ slots.timer_duration.value.seconds }}" + minutes: "{{ slots.timer_duration.value.minutes }}" + hours: "{{ slots.timer_duration.value.hours }}" +``` +{% endraw %} + From fa605f394c1432afa6e07262ca970ad31ffde762 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Sun, 10 Dec 2017 10:58:00 +0100 Subject: [PATCH 36/60] Update command and other things --- source/_components/snips.markdown | 61 +++++++++++++++++-------------- 1 file changed, 34 insertions(+), 27 deletions(-) diff --git a/source/_components/snips.markdown b/source/_components/snips.markdown index 622bfa904e0..642faabf93d 100644 --- a/source/_components/snips.markdown +++ b/source/_components/snips.markdown @@ -12,40 +12,40 @@ ha_category: Voice ha_release: 0.48 --- -The [Snips Voice Platform](https://www.snips.ai) allows users to add powerful voice assistants to their Raspberry Pi devices without compromising on Privacy. It runs 100% on-device, and does not require an Internet connection. It features Hotword Detection, Automatic Speech Recognition (ASR), Natural Language Understanding (NLU) and Dialog Management. +The [Snips Voice Platform](https://www.snips.ai) allows users to add powerful voice assistants to their Raspberry Pi devices without compromising on privacy. It runs 100% on-device, and does not require an internet connection. It features Hotword Detection, Automatic Speech Recognition (ASR), Natural Language Understanding (NLU) and Dialog Management. The latest documentation can be found here: [Snips Platform Documentation](https://github.com/snipsco/snips-platform-documentation/wiki). ![Snips Modules](/images/screenshots/snips_modules.png) -Snips takes voice or text as input, and produces *intents* as output, which are explicit representations of an intention behind an utterance, and which can subsequently be used by Home Assistant to perform appropriate actions. +Snips takes voice or text as input and produces *intents* as output, which are explicit representations of an intention behind an utterance and which can subsequently be used by Home Assistant to perform appropriate actions. ![Snips Modules](/images/screenshots/snips_nlu.png) ## {% linkable_title The Snips Voice Platform %} -### Installation +### {% linkable_title Installation %} -The Snips Voice Platform is installed as a docker image on Raspberry Pi with the following command: +The Snips Voice Platform is installed as a Docker image on Raspberry Pi with the following command: -```sh +```bash (pi) $ curl https://install.snips.ai -sSf | sh ``` Snips can also be installed on a Debian/Ubuntu machine as well: -```sh -sudo apt-get update -sudo apt-get install -y dirmngr -sudo bash -c 'echo "deb https://debian.snips.ai/$(lsb_release -cs) stable main" > /etc/apt/sources.list.d/snips.list' -sudo apt-key adv --keyserver pgp.mit.edu --recv-keys F727C778CCB0A455 +```bash +$ sudo apt-get update +$ sudo apt-get install -y dirmngr +$ sudo bash -c 'echo "deb https://debian.snips.ai/$(lsb_release -cs) stable main" > /etc/apt/sources.list.d/snips.list' +$ sudo apt-key adv --keyserver pgp.mit.edu --recv-keys F727C778CCB0A455 -sudo apt-get update -sudo apt-get install -y snips-platform-voice +$ sudo apt-get update +$ sudo apt-get install -y snips-platform-voice ``` -### Creating an assistant +### {% linkable_title Creating an assistant %}
@@ -53,29 +53,32 @@ sudo apt-get install -y snips-platform-voice Snips assistants are created via the [Snips Console](https://console.snips.ai). Once trained, the assistant should be downloaded and copied to the Raspberry Pi: -```sh +```bash $ scp assistantproj_XXX.zip pi@pi_hostname:/home/pi/assistant.zip ``` and installed locally via the `snips-install-assistant` helper script: -```sh +```bash (pi) $ sudo snips-install-assistant assistant.zip ``` -### Running Snips +### {% linkable_title Running Snips %} Make sure that a microphone is plugged to the Raspberry Pi. If you are having trouble setting up audio, we have written a guide on [Raspberry Pi Audio Configuration](https://github.com/snipsco/snips-platform-documentation/wiki/1.-Setup-the-Snips-Voice-Platform-on-your-Raspberry-Pi#configuring-the-audio). Start the Snips Voice Platform using the `snips` command: Raspberry Pi: -```sh + +```bash (pi) $ snips ``` + Debian/Ubuntu: -```sh -sudo systemctl start "snips-*" + +```bash +$ sudo systemctl start "snips-*" ``` Snips is now ready to take voice commands from the microphone. To trigger the listening, simply say @@ -88,26 +91,30 @@ followed by a command, e.g. We should see the transcribed phrase in the logs, as well as a properly parsed intent. The intent is published on MQTT, on the `hermes/intent/` topic. The Snips Home Assistant component subscribes to this topic, and handles the intent according to the rules defined in `configuration.yaml`, as explained below. -#### Optional: specifying an external MQTT broker +#### {% linkable_title Optional: specifying an external MQTT broker %} By default, Snips runs its own MQTT broker. But we can also tell Snips to use an external broker by specifying this when launching Snips. In this case, instead of running the `snips` command above (which assumes we are using the internal MQTT broker), we use the full launch command with explicitly specified parameters (replace `MQTT_BROKER_IP` and `MQTT_BROKER_PORT` with appropriate values): Raspberry Pi: ```sh -$ docker run -t --rm --name snips --log-driver none -v /home/pi/.asoundrc:/root/.asoundrc -v /opt/snips/config:/opt/snips/config --privileged -v /dev/snd:/dev/snd snipsdocker/platform --mqtt MQTT_BROKER_IP:MQTT_BROKER_PORT +$ docker run -t --rm --name snips --log-driver none \ + -v /home/pi/.asoundrc:/root/.asoundrc \ + -v /opt/snips/config:/opt/snips/config \ + --privileged -v /dev/snd:/dev/snd snipsdocker/platform \ + --mqtt MQTT_BROKER_IP:MQTT_BROKER_PORT ``` Debian/Ubuntu: -Edit the /etc/snips.toml file. See snips documentation for more information on configuring this +Edit the `/etc/snips.toml` file. See snips documentation for more information on configuring this For more details on launch options, check the documentation on [Snips Platform Commands](https://github.com/snipsco/snips-platform-documentation/wiki/6.--Learn-more:-Platform-Commands#using-a-custom-mqtt-bus). -## Home Assistant configuration +## {% linkable_title Home Assistant configuration %} -### Specifying the MQTT broker +### {% linkable_title Specifying the MQTT broker %} -Messages between Snips and Home Assistant are passed via MQTT. We must tell Home Assistant which MQTT broker to use by adding the following entry to `configuration.yaml`: +Messages between Snips and Home Assistant are passed via MQTT. We must tell Home Assistant which [MQTT broker](/docs/mqtt/) to use by adding the following entry to the `configuration.yaml` file: ```yaml mqtt: @@ -123,9 +130,9 @@ mqtt: port: 9898 ``` -Alternatively, MQTT can be configured to bridge messages between servers if using a custom mqtt broker such as mosquitto. +Alternatively, MQTT can be configured to bridge messages between servers if using a custom MQTT broker such as `mosquitto`. -### Triggering actions +### {% linkable_title Triggering actions %} In Home Assistant, we trigger actions based on intents produced by Snips using the [`intent_script`](/components/intent_script) component. For instance, the following block handles `ActivateLightColors` intents (included in the Snips IoT intent bundle) to change light colors: From a757a34c4005c0326c5bb0a81e7687927ba36f13 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Sun, 10 Dec 2017 12:09:29 +0100 Subject: [PATCH 37/60] Move command up (fixes #4103) (#4182) --- source/_docs/installation/virtualenv.markdown | 30 ++++++++++++++----- 1 file changed, 22 insertions(+), 8 deletions(-) diff --git a/source/_docs/installation/virtualenv.markdown b/source/_docs/installation/virtualenv.markdown index 97a5f8c36f5..0deb3349e45 100644 --- a/source/_docs/installation/virtualenv.markdown +++ b/source/_docs/installation/virtualenv.markdown @@ -13,9 +13,9 @@ redirect_from: /getting-started/installation-virtualenv/ Beginners should check our [getting started guide](/getting-started/) first.

-There are several reasons why it makes sense to run Home Assistant in a virtual environment. A [virtualenv](https://virtualenv.pypa.io/en/latest/) encapsulates all aspect of a Python environment within a single directory tree. That means the Python packages you install for Home Assistant won't interact with the rest of your system and vice-versa. It means a random upgrade for some other program on your computer won't break Home Assistant, and it means you don't need to install Python packages as root. +There are several reasons why it makes sense to run Home Assistant in a virtual environment. A [virtual environments (or short `venv`)](https://docs.python.org/3.6/library/venv.html) encapsulates all aspect of a Python environment within a single directory tree. That means the Python packages you install for Home Assistant won't interact with the rest of your system and vice-versa. It means a random upgrade for some other program on your computer won't break Home Assistant, and it means you don't need to install Python packages as root. -Virtualenvs are pretty easy to setup. We'll be using Debian in this example (as many Home Assistant users are running Raspbian on a Raspberry Pi), but all of the Python related steps should be the same on just about any platform. +Virtual environments are pretty easy to setup. We'll be using Debian in this example (as many Home Assistant users are running Raspbian on a Raspberry Pi), but all of the Python related steps should be the same on just about any platform. ### {% linkable_title Basic guide %} @@ -69,17 +69,14 @@ $ sudo usermod -G dialout -a homeassistant ## {% linkable_title Custom installation directory for Home Assistant (Basic guide step 2) %} -This can be anywhere you want. We chose to put it in `/srv`. You also need to change the ownership of the directory to the user you created above. +This can be anywhere you want. We chose to put it in `/srv`. You also need to change the ownership of the directory to the user you created above. ```bash $ sudo mkdir /srv/homeassistant $ sudo chown homeassistant:homeassistant /srv/homeassistant -$ python3 -m venv /srv/homeassistant ``` -## {% linkable_title Install or update Home Assistant %} - -This is obviously only necessary if you created a `homeassistant` user, but if you did, be sure to switch to that user whenever you install things in your virtualenv, otherwise you'll end up with mucked up permissions. +Switching to your `homeassistant` user is obviously only necessary if you created a `homeassistant` user, but if you did, be sure to switch to that user whenever you install things in your virtual environment, otherwise you'll end up with mucked up permissions. ```bash $ sudo su -s /bin/bash homeassistant @@ -87,6 +84,23 @@ $ sudo su -s /bin/bash homeassistant The `su` command means 'switch' user. We use the '-s' flag because the `homeassistant` user is a system user and doesn't have a default shell by default (to prevent attackers from being able to log in as that user). +Now, you can setup your virtual environment. + +```bash +$ python3 -m venv /srv/homeassistant +``` + +## {% linkable_title Install or update Home Assistant %} + +With [`pip`](https://pip.pypa.io/en/stable/quickstart/) you are now able to install Home Assistant in your virtual environment. + +```bash +$ source /srv/homeassistant/bin/activate +(homeassistant)$ pip3 install homeassistant +``` + +Or updating: + ```bash $ source /srv/homeassistant/bin/activate (homeassistant)$ pip3 install --upgrade homeassistant @@ -94,7 +108,7 @@ $ source /srv/homeassistant/bin/activate ## {% linkable_title Run Home Assistant (Basic guide step 4) %} -There are two ways to launch Home Assistant. If you are **in** the virtualenv, you can just run `hass` and it will work as normal. If the virtualenv is not activated, you just use the `hass` executable in the `bin` directory mentioned earlier. There is one caveat... Because Home Assistant stores its configuration in the user's home directory, we need to be the user `homeassistant` or specify the configuration with `-c`. +There are two ways to launch Home Assistant. If you are **in** the virtual environment, you can just run `hass` and it will work as normal. If the virtual environment is not activated, you just use the `hass` executable in the `bin` directory mentioned earlier. There is one caveat. Because Home Assistant stores its configuration in the user's home directory, we need to be the user `homeassistant` or specify the configuration with `-c`. ```bash $ sudo -u homeassistant -H /srv/homeassistant/bin/hass From 88851079c236d5251e6565c17f61ea7db7e81901 Mon Sep 17 00:00:00 2001 From: Joe Lu Date: Sun, 10 Dec 2017 03:28:28 -0800 Subject: [PATCH 38/60] Added documentation for Canary (#4162) * Added documentation for Canary * Addresses PR comments * Addressed PR comments * Addressed PR comments --- .../alarm_control_panel.canary.markdown | 18 ++++++ source/_components/camera.canary.markdown | 18 ++++++ source/_components/canary.markdown | 53 ++++++++++++++++++ source/_components/sensor.canary.markdown | 24 ++++++++ source/images/supported_brands/canary.png | Bin 0 -> 11216 bytes 5 files changed, 113 insertions(+) create mode 100644 source/_components/alarm_control_panel.canary.markdown create mode 100644 source/_components/camera.canary.markdown create mode 100644 source/_components/canary.markdown create mode 100644 source/_components/sensor.canary.markdown create mode 100644 source/images/supported_brands/canary.png diff --git a/source/_components/alarm_control_panel.canary.markdown b/source/_components/alarm_control_panel.canary.markdown new file mode 100644 index 00000000000..59125f8746a --- /dev/null +++ b/source/_components/alarm_control_panel.canary.markdown @@ -0,0 +1,18 @@ +--- +layout: page +title: "Canary Alarm Control Panel" +description: "Instructions on how to integrate your Canary devices into Home Assistant." +date: 2017-12-07 22:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: canary.png +ha_category: Alarm +ha_release: "0.60" +ha_iot_class: "Cloud Polling" +--- + +The `canary` alarm control panel platform allows you to integrate your [Canary](https://canary.is) alarm system in Home Assistant. + +To add `canary` alarm control panel to your installation, follow instructions in [Canary component](/components/canary/). diff --git a/source/_components/camera.canary.markdown b/source/_components/camera.canary.markdown new file mode 100644 index 00000000000..bf7c029bc73 --- /dev/null +++ b/source/_components/camera.canary.markdown @@ -0,0 +1,18 @@ +--- +layout: page +title: "Canary Camera" +description: "Instructions on how to integrate your Canary devices into Home Assistant." +date: 2017-12-07 22:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: canary.png +ha_category: Camera +ha_release: "0.60" +ha_iot_class: "Cloud Polling" +--- + +The `canary` camera platform allows you to view the latest camera image (triggered by motion) by your [Canary](https://canary.is) device in Home Assistant. + +To add `canary` camera to your installation, follow instructions in [Canary component](/components/canary/). diff --git a/source/_components/canary.markdown b/source/_components/canary.markdown new file mode 100644 index 00000000000..425055f48a4 --- /dev/null +++ b/source/_components/canary.markdown @@ -0,0 +1,53 @@ +--- +layout: page +title: "Canary" +description: "Instructions on how to integrate your Canary devices into Home Assistant." +date: 2017-12-07 22:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: canary.png +ha_category: Hub +ha_release: "0.60" +ha_iot_class: "Cloud Polling" +--- + +The `canary` component allows you to integrate your [Canary](https://canary.is) devices in Home Assistant. + +You will need your Canary login information (username, usually your email address, and password) to use this module. + +To set it up, add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +canary: + username: you@example.com + password: secret +``` + +{% configuration %} + username: + description: The username for accessing your Canary account. + required: true + type: string + password: + description: The password for accessing your Canary account. + required: true + type: string + timeout: + description: Timeout to wait for connections. + required: false + type: int + default: 10 +{% endconfiguration %} + + + +Once loaded, your front end will have the following components: + +* A camera image triggered by motion for each camera. +* An alarm control panel for each location. +* A sensor per camera that reports temperature. +* A sensor per camera that reports humidity. +* A sensor per camera that reports air quality. diff --git a/source/_components/sensor.canary.markdown b/source/_components/sensor.canary.markdown new file mode 100644 index 00000000000..25efd713e39 --- /dev/null +++ b/source/_components/sensor.canary.markdown @@ -0,0 +1,24 @@ +--- +layout: page +title: "Canary Sensor" +description: "Instructions on how to integrate your Canary devices into Home Assistant." +date: 2017-12-07 22:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: canary.png +ha_category: Sensor +ha_release: "0.60" +ha_iot_class: "Cloud Polling" +--- + +The `canary` sensor platform allows you to integrate the sensors of your [Canary](https://canary.is) devices in Home Assistant. + +To add `canary` sensors to your installation, follow instructions in [Canary component](/components/canary/). + +Once loaded, you will see following sensors: + +* A sensor per camera that reports temperature. +* A sensor per camera that reports humidity. +* A sensor per camera that reports air quality. diff --git a/source/images/supported_brands/canary.png b/source/images/supported_brands/canary.png new file mode 100644 index 0000000000000000000000000000000000000000..26e8c26e825aaa509c900d79a14abaabe3bab84f GIT binary patch literal 11216 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 z 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 literal 0 HcmV?d00001 From 71e8eea88bfb7546000bbb5533331f1d9318cb32 Mon Sep 17 00:00:00 2001 From: Andrey Kupreychik Date: Sun, 10 Dec 2017 18:29:58 +0700 Subject: [PATCH 39/60] Added info about force_update in REST sensor (#4161) --- source/_components/sensor.rest.markdown | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/source/_components/sensor.rest.markdown b/source/_components/sensor.rest.markdown index 15a366f78e4..c496c7a0e0e 100644 --- a/source/_components/sensor.rest.markdown +++ b/source/_components/sensor.rest.markdown @@ -89,6 +89,11 @@ json_attributes: description: A list of keys to extract values from a JSON dictionary result and then set as sensor attributes. reqired: false type: list, string +force_update: + description: Sends update events even if the value hasn't changed. Useful if you want to have meaningful value graphs in history. + reqired: false + type: boolean + default: False {% endconfiguration %}

From dda1f6539a7bef97cb8d2ba98cd2089597bc7d6b Mon Sep 17 00:00:00 2001 From: maxlaverse Date: Sun, 10 Dec 2017 20:40:37 +0100 Subject: [PATCH 40/60] Add documentation for calendar.caldav (#4088) * Add documentation for calendar.caldav * Minimize the configuration sample by moving * Typo and fix --- source/_components/calendar.caldav.markdown | 104 ++++++++++++++++++++ 1 file changed, 104 insertions(+) create mode 100644 source/_components/calendar.caldav.markdown diff --git a/source/_components/calendar.caldav.markdown b/source/_components/calendar.caldav.markdown new file mode 100644 index 00000000000..c8f4b973489 --- /dev/null +++ b/source/_components/calendar.caldav.markdown @@ -0,0 +1,104 @@ +--- +layout: page +title: "CalDav" +description: "Instructions on how to integrate a WebDav calendar into Home Assistant." +date: 2017-11-27 23:14 +sidebar: true +comments: false +sharing: true +footer: true +ha_category: Calendar +ha_iot_class: "Cloud Polling" +ha_release: "0.60" +--- + + +The `caldav` platform allows you to connect to your WebDav calendar and generate binary sensors. A different sensor will be created for each individual calendar, or you can specify custom calendars which match a criteria you define (more on that below). These sensors will be `on` if you have an on going event in that calendar or `off` if the event is later in time, or if there is no event at all. The WebDav calendar get updated roughly every 10 minutes. + +### {% linkable_title Prerequisites %} + +You need to have a CalDav server and eventually credentials for it. This component was tested against [Baikal](http://sabre.io/baikal/) but any component complying with the RFC4791 should work. + +You might need some additional system packages to compile the Python caldav library. On a Debian based system, install them by: + +```bash +$ sudo apt-get install libxm2-dev libxslt1-dev zlib1g-dev +``` + +### {% linkable_title Basic Setup %} + +To integrate a WebDav calendar in Home Assistant, add the following section to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +calendar: + - platform: caldav + url: https://baikal.my-server.net/cal.php/calendars/john.doe@test.com/default +``` + +{% configuration %} +url: + required: true + description: The full URL to your calendars. + type: string +username: + required: false + description: Username for authentication. + type: string +password: + required: false + description: Password for authentication. + type: string +calendars: + required: false + description: List of the calendars to filter. Empty or absent means no filtering. + type: list +custom_calendars: + required: false + description: Details on any custom binary sensor calendars you want to create. + type: list + keys: + name: + required: true + description: The name of your custom calendar. + type: string + calendar: + required: true + description: The source calendar to search on. + type: string + search: + required: true + pending_charges: Regular expression for filtering the events + type: string + all_day: + required: false + description: Include events that last the whole day. + type: boolean + default: true +{% endconfiguration %} + + +### {% linkable_title Sensor attributes %} + + - **offset_reached**: If set in the event title and parsed out will be on/off once the offset in the title in minutes is reached. So the title Very important meeting !!-10 would trigger this attribute to be on 10 minutes before the event starts. + - **all_day**: `True/False` if this is an all day event. Will be `False` if there is no event found. + - **message**: The event title with the `search` values extracted. So in the above example for `offset_reached` the message would be set to Very important meeting + - **description**: The event description. + - **location**: The event Location. + - **start_time**: Start time of event. + - **end_time**: End time of event. + +### {% linkable_title Sensor attributes %} + +```yaml +# Example configuration.yaml entry +calendar: + - platform: caldav + url: https://baikal.my-server.net/cal.php/calendars/john.doe@test.com/default + username: john.doe@test.com + password: !secret caldav + custom_calendars: + - name: 'HomeOffice' + calendar: 'Agenda' + search: 'HomeOffice' +``` From f4972973e0de9ead7f474876824e1e595fe15631 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Tue, 12 Dec 2017 08:10:07 +0100 Subject: [PATCH 41/60] Update docs (#4195) * Update docs * Add sample for command-line usage --- source/_components/sensor.luftdaten.markdown | 21 +++++++++----------- 1 file changed, 9 insertions(+), 12 deletions(-) diff --git a/source/_components/sensor.luftdaten.markdown b/source/_components/sensor.luftdaten.markdown index 486b10e5f2a..6417ee5e0a5 100644 --- a/source/_components/sensor.luftdaten.markdown +++ b/source/_components/sensor.luftdaten.markdown @@ -45,16 +45,6 @@ sensor: required: false default: Luftdaten Sensor type: string - resource: - description: The URL of the API endpoint. Usually this has not to be changed. - required: false - default: https://api.luftdaten.info/v1/sensor/ - type: string - verify_ssl: - description: Verify SSL connection. - required: false - default: true - type: boolean monitored_conditions: description: A list of conditions you want to monitor. required: true @@ -65,8 +55,15 @@ sensor: P2: description: Show the particle sensors (particles 2.5 microns and below). temperature: - description: Display the temperature from a weather sensor. + description: Display the temperature from the sensor. humidity: - description: Display the humidity from a weather sensor. + description: Display the humidity from the sensor. + pressure: + description: Display the pressure from the sensor. {% endconfiguration %} +Not all sensors provide all conditions. Also, it's possible that the sensor values are not available all the time. To check what a sensor is publishing use `curl`: + +```bash +$ curl https://api.luftdaten.info/v1/sensor/[sensorid]/ +``` From 4789220364f090c1731805c8e8e8ed171ea5535a Mon Sep 17 00:00:00 2001 From: Adam Mills Date: Wed, 13 Dec 2017 23:03:02 -0500 Subject: [PATCH 42/60] Add problem device class (#4200) --- source/_components/binary_sensor.markdown | 1 + 1 file changed, 1 insertion(+) diff --git a/source/_components/binary_sensor.markdown b/source/_components/binary_sensor.markdown index c25e0fb6b60..6b6d1d8c5d3 100644 --- a/source/_components/binary_sensor.markdown +++ b/source/_components/binary_sensor.markdown @@ -28,6 +28,7 @@ The way these sensors are displayed in the frontend can be modified in the [cust - **plug**: `On` means device is plugged in, `Off` means device is unplugged - **power**: Power, over-current, etc. - **presence**: `On` means Home, `Off` means Away +- **problem**: `On` means a problem was detected, `Off` means the status is OK - **safety**: `On` means unsafe, `Off` means safe - **smoke**: `On` means smoke detected - **sound**: `On` means sound detected, `Off` means no sound From 2338f8871c19222f9cee7f2d5928252ab5fafe10 Mon Sep 17 00:00:00 2001 From: Andrea Campi Date: Thu, 14 Dec 2017 04:09:22 +0000 Subject: [PATCH 43/60] Update documentation for Philips Hue changes. (#4099) * Update documentation for Philips Hue changes. See https://github.com/home-assistant/home-assistant/pull/10691 for more info. * Update hue.markdown --- source/_components/hue.markdown | 145 ++++++++++++++++++++++++++ source/_components/light.hue.markdown | 121 +-------------------- 2 files changed, 150 insertions(+), 116 deletions(-) create mode 100644 source/_components/hue.markdown diff --git a/source/_components/hue.markdown b/source/_components/hue.markdown new file mode 100644 index 00000000000..8fda3584311 --- /dev/null +++ b/source/_components/hue.markdown @@ -0,0 +1,145 @@ +--- +layout: page +title: "Philips Hue" +description: "Instructions on setting up Philips Hue within Home Assistant." +date: 2017-11-29 23:51 +sidebar: true +comments: false +sharing: true +footer: true +logo: philips_hue.png +ha_category: Hub +ha_iot_class: "Local Polling" +featured: true +ha_release: 0.60 +--- + +Philips Hue support is integrated into Home Assistant as a Hub that can drive the light platform. The preferred way to setup the Philips Hue platform is by enabling the [discovery component](/components/discovery/). + +Once discovered, if you have a custom default view, locate `configurator.philips_hue` in the entities list ( < > ) and add it to a group in `configuration.yaml`. Restart Home Assistant so that the configurator is visible in the Home Assistant dashboard. Once Home Assistant is restarted, locate and click on `configurator.philips_hue` to bring up the initiation dialog. This will prompt you to press the Hue button to register the Hue hub in Home Assistant. Once complete, the configurator entity isn't needed anymore and can be removed from any visible group in `configuration.yaml`. + +When you configure the Hue bridge from Home Assistant, it writes a token to a file in your Home Assistant [configuration directory](/docs/configuration/). That token authenticates the communication with the Hue bridge. This token uses the Address of the Hue Bridge. If the IP address for the Hue Bridge changes, you will need to register the Hue Bridge with Home Assistant again. To avoid this you may set up DHCP registration for your Hue Bridge, so that it always has the same IP address. + +Once registration is complete you should see the Hue lights listed as "light" entities; if you don't you may have to restart Home Assistant once more. Add these light entities to configuration.yaml and restart Home Assistant once more to complete the installation. + +If you want to enable the component without relying on the [discovery component](/components/discovery/), add the following lines to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +hue: + bridges: + - host: DEVICE_IP_ADDRESS +``` + +Configuration variables: + +- **host** (*Optional*): IP address of the device, eg. 192.168.1.10. Required if not using the `discovery` component to discover Hue bridges. +- **allow_unreachable** (*Optional*): (true/false) This will allow unreachable bulbs to report their state correctly. +- **filename** (*Optional*): Make this unique if specifying multiple Hue hubs. +- **allow_in_emulated_hue** (*Optional*): )true/false) Enable this to block all Hue entities from being added to the `emulated_hue` component. +- **allow_hue_groups** (*Optional*): (true/false) Enable this to stop Home Assistant from importing the groups defined on the Hue bridge. + +### {% linkable_title Migrating from older configuration %} + +In previous versions of the Hue component the configuration looked different: + +```yaml +# Example configuration.yaml entry +light: + - platform: hue + host: DEVICE_IP_ADDRESS +``` + +You will need to convert each bridge into an entry in the new configuration style. See above for an example. + +### {% linkable_title Multiple Hue bridges %} + +Multiple Hue bridges work transparently with discovery, you don't have to do anything. If you prefer to configure them manually and use multiple Hue bridges then it's needed that you provide a configuration file for every bridge. The bridges can't share a single configuration file. + +Add `filename` to your Hue configuration entry in your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +hue: + bridges: + - host: BRIDGE1_IP_ADDRESS + filename: phue.conf + - platform: hue + host: BRIDGE2_IP_ADDRESS + filename: phue2.conf +``` + +### {% linkable_title Using Hue Groups in Home Assistant %} + +The Hue API allows you to group lights. Home Assistant also supports grouping of entities natively, but sometimes it can be useful to use Hue Groups to group light bulbs. By doing so, Home Assistant only needs to send one API call to change the state of all the bulbs in those groups instead of one call for every light in the group. This causes all the bulbs to change state simultaneously. + +These Hue Groups can be a `Luminaire`, `Lightsource`, `LightGroup` or `Room`. The `Luminaire` and `Lightsource` can't be created manually since the Hue bridge manages these automatically based on the discovered bulbs. The `Room` and `LightGroup` can be created manually through the API, or the mobile app. A bulb can only exist in one `Room`, but can exist in multiple `LightGroup`. The `LightGroup` can be useful to link certain bulbs together since. + +The 2nd generation Hue app only allows to create a `Room`. You need to use the first generation app or the API to create a `LightGroup`. + +Example: + +To create a `LightGroup` named `Ceiling lights` that contains the lights 1, 2 and 3, execute the following command: + +```bash +$ curl -XPOST -d '{"name": "Ceiling lights", "lights": ["1", "2", "3"]}' http:///api//groups +``` + +The `` is the string that is used to register Home Assistant on the bridge, you can find it in the `phue.conf` file in your configuration path. `` is the IP address or hostname of your Hue bridge. + +You can find out the ids of your lights by executing the following command: + +```bash +$ curl http:///api//lights +``` + +Home Assistant will automatically detect your new `LightGroup` and add it to the interface. + +

+ To support Hue Light Groups, your bridge needs to have at least firmware 1.13 (released on June 3, 2016). +

+ +More information can be found on the [Philips Hue API documentation](https://www.developers.meethue.com/documentation/groups-api#22_create_group) website. + + +### {% linkable_title Using Hue Scenes in Home Assistant %} + +The Hue platform has it's own concept of scenes for setting the colors of a group of lights at once. Hue Scenes are very cheap, get created by all kinds of apps (as it is the only way to have 2 or more lights change at the same time), and are rarely deleted. A typical Hue hub might have hundreds of scenes stored in them, many that you've never used, almost all very poorly named. + +To avoid user interface overload we don't expose scenes directly. Instead there is a [light.hue_activate_scene](/components/light/#service-lighthue_activate_scene) service which can be used by `automation` or `script` components. +This will have all the bulbs transitioned at once, instead of one at a time using standard scenes in Home Assistant. + +For instance: + +```yaml +script: + porch_on: + sequence: + - service: light.hue_activate_scene + data: + group_name: "Porch" + scene_name: "Porch Orange" +``` + +| Service data attribute | Optional | Description | +| ---------------------- | -------- | ----------- | +| `group_name` | no | The group/room name of the lights. Find this in the Hue official app. +| `scene_name` | no | The name of the scene. Find this in the Hue official app. + +*Note*: `group_name` is not linked to Home Assistant group name. + +*** Finding Group and Scene Names *** + +How do you find these names? + +The easiest way to do this is only use the scenes from the 2nd generation Hue app. That is organized by room (group) and scene Name. Use the values of room name and scene name that you see in the app. You can test these work on the `dev-service` console of your Home Assistant instance. + +Alternatively, you can dump all rooms and scene names using this [gist](https://gist.github.com/sdague/5479b632e0fce931951c0636c39a9578). This does **not** tell you which groups and scenes work together but it's sufficient to get values that you can test in the `dev-service` console. + +*** Caveats *** + +The Hue API doesn't activate scenes directly, only on a Hue Group (typically rooms, especially if using the 2nd gen app). But Hue Scenes don't actually reference their group. So heuristic matching is used. + +Neither group names or scene names are guaranteed unique in Hue. If you are getting non deterministic behavior, adjust your Hue scenes via the App to be more identifying. + +The Hue hub has limited spaces for scenes, and will delete scenes if new ones get created that would overflow that space. The API docs say this is based on "Least Recently Used". diff --git a/source/_components/light.hue.markdown b/source/_components/light.hue.markdown index 871972d4f0c..d4d37548b6b 100644 --- a/source/_components/light.hue.markdown +++ b/source/_components/light.hue.markdown @@ -1,7 +1,7 @@ --- layout: page -title: "Philips Hue" -description: "Instructions how to setup Philips Hue within Home Assistant." +title: "Philips Hue Light" +description: "Instructions how to integrate Philips Hue lights into Home Assistant." date: 2015-03-23 20:09 sidebar: true comments: false @@ -14,119 +14,8 @@ featured: true ha_release: pre 0.7 --- -Philips Hue support is integrated into Home Assistant as a light platform. The preferred way to setup the Philips Hue platform is by enabling the [discovery component](/components/discovery/). +The Philips Hue light platform allows you to control your Philips Hue lights. -Once discovered, if you have a custom default view, locate `configurator.philips_hue` in the entities list ( < > ) and add it to a group in `configuration.yaml`. Restart Home Assistant so that the configurator is visible in the Home Assistant dashboard. Once Home Assistant is restarted, locate and click on `configurator.philips_hue` to bring up the initiation dialog. This will prompt you to press the Hue button to register the Hue hub in Home Assistant. Once complete, the configurator entity isn't needed anymore and can be removed from any visible group in `configuration.yaml`. +This component will automatically add `Lights` configured on your Hue bridges. -When you configure the Hue bridge from Home Assistant, it writes a token to a file in your Home Assistant [configuration directory](/docs/configuration/). That token authenticates the communication with the Hue bridge. This token uses the IP Address of the Hue Bridge. If the IP address for the Hue Bridge changes, you will need to register the Hue Bridge with Home Assistant again. To avoid this you may set up DHCP registration for your Hue Bridge, so that it always has the same IP address. - -Restarting Home Assistant once more should result in the Hue lights listed as "light" entities. Add these light entities to configuration.yaml and restart Home Assistant once more to complete the installation. - -If you want to enable the component without relying on the [discovery component](/components/discovery/), add the following lines to your `configuration.yaml` file: - -```yaml -# Example configuration.yaml entry -light: - - platform: hue - host: DEVICE_IP_ADDRESS -``` - -Configuration variables: - -- **host** (*Optional*): IP address of the device, eg. 192.168.1.10. Required if not using the `discovery` component to discover Hue bridges. -- **allow_unreachable** (*Optional*): (true/false) This will allow unreachable bulbs to report their state correctly. -- **filename** (*Optional*): Make this unique if specifying multiple Hue hubs. -- **allow_in_emulated_hue** (*Optional*): )true/false) Enable this to block all Hue entities from being added to the `emulated_hue` component. -- **allow_hue_groups** (*Optional*): (true/false) Enable this to stop Home Assistant from importing the groups defined on the Hue bridge. - -### {% linkable_title Multiple Hue bridges %} - -If you use multiple Hue bridges then it's needed that you provide a configuration file for every bridge. The bridges can't share a single configuration file. - -Add `filename` to your Hue configuration entry in your `configuration.yaml` file: - -```yaml -# Example configuration.yaml entry -light: - - platform: hue - host: BRIDGE1_IP_ADDRESS - filename: phue.conf - - platform: hue - host: BRIDGE2_IP_ADDRESS - filename: phue2.conf -``` - -### {% linkable_title Using Hue Groups in Home Assistant %} - -The Hue API allows you to group lights. Home Assistant also supports grouping of entities natively, but sometimes it can be useful to use Hue Groups to group light bulbs. By doing so, Home Assistant only needs to send one API call to change the state of all the bulbs in those groups instead of one call for every light in the group. This causes all the bulbs to change state simultaneously. - -These Hue Groups can be a `Luminaire`, `Lightsource`, `LightGroup` or `Room`. The `Luminaire` and `Lightsource` can't be created manually since the Hue bridge manages these automatically based on the discovered bulbs. The `Room` and `LightGroup` can be created manually through the API, or the mobile app. A bulb can only exist in one `Room`, but can exist in multiple `LightGroup`. The `LightGroup` can be useful to link certain bulbs together since. - -The 2nd generation Hue app only allows to create a `Room`. You need to use the first generation app or the API to create a `LightGroup`. - -Example: - -To create a `LightGroup` named `Ceiling lights` that contains the lights 1, 2 and 3, execute the following command: - -```bash -$ curl -XPOST -d '{"name": "Ceiling lights", "lights": ["1", "2", "3"]}' http:///api//groups -``` - -The `` is the string that is used to register Home Assistant on the bridge, you can find it in the `phue.conf` file in your configuration path. `` is the IP address or hostname of your Hue bridge. - -You can find out the ids of your lights by executing the following command: - -```bash -$ curl http:///api//lights -``` - -Home Assistant will automatically detect your new `LightGroup` and add it to the interface. - -

- To support Hue Light Groups, your bridge needs to have at least firmware 1.13 (released on June 3, 2016). -

- -More information can be found on the [Philips Hue API documentation](https://www.developers.meethue.com/documentation/groups-api#22_create_group) website. - - -### {% linkable_title Using Hue Scenes in Home Assistant %} - -The Hue platform has it's own concept of scenes for setting the colors of a group of lights at once. Hue Scenes are very cheap, get created by all kinds of apps (as it is the only way to have 2 or more lights change at the same time), and are rarely deleted. A typical Hue hub might have hundreds of scenes stored in them, many that you've never used, almost all very poorly named. - -To avoid user interface overload we don't expose scenes directly. Instead there is a [light.hue_activate_scene](/components/light/#service-lighthue_activate_scene) service which can be used by `automation` or `script` components. -This will have all the bulbs transitioned at once, instead of one at a time using standard scenes in Home Assistant. - -For instance: - -```yaml -script: - porch_on: - sequence: - - service: light.hue_activate_scene - data: - group_name: "Porch" - scene_name: "Porch Orange" -``` - -| Service data attribute | Optional | Description | -| ---------------------- | -------- | ----------- | -| `group_name` | no | The group/room name of the lights. Find this in the Hue official app. -| `scene_name` | no | The name of the scene. Find this in the Hue official app. - -*Note*: `group_name` is not linked to Home Assistant group name. - -*** Finding Group and Scene Names *** - -How do you find these names? - -The easiest way to do this is only use the scenes from the 2nd generation Hue app. That is organized by room (group) and scene Name. Use the values of room name and scene name that you see in the app. You can test these work on the `dev-service` console of your Home Assistant instance. - -Alternatively, you can dump all rooms and scene names using this [gist](https://gist.github.com/sdague/5479b632e0fce931951c0636c39a9578). This does **not** tell you which groups and scenes work together but it's sufficient to get values that you can test in the `dev-service` console. - -*** Caveats *** - -The Hue API doesn't activate scenes directly, only on a Hue Group (typically rooms, especially if using the 2nd gen app). But Hue Scenes don't actually reference their group. So heuristic matching is used. - -Neither group names or scene names are guaranteed unique in Hue. If you are getting non deterministic behavior, adjust your Hue scenes via the App to be more identifying. - -The Hue hub has limited spaces for scenes, and will delete scenes if new ones get created that would overflow that space. The API docs say this is based on "Least Recently Used". +The requirement is that you have setup your [Philips Hue bridge](/components/hue/). From 813da14bb2ec8edb54e6651f0a582f8240b4f126 Mon Sep 17 00:00:00 2001 From: Greg Laabs Date: Wed, 13 Dec 2017 20:14:51 -0800 Subject: [PATCH 44/60] Documentation for ISY994 changes to sensors and events (#4207) * Documentation for ISY994 changes to sensors and events * Removed two oxford commas, even though it made me die a little inside --- source/_components/isy994.markdown | 44 +++++++++++++++++++++++++++++- 1 file changed, 43 insertions(+), 1 deletion(-) diff --git a/source/_components/isy994.markdown b/source/_components/isy994.markdown index 8cf050f2383..0b59c64b24e 100644 --- a/source/_components/isy994.markdown +++ b/source/_components/isy994.markdown @@ -34,12 +34,54 @@ Configuration variables: - **host** (*Required*): The host entry should be in full URL format, eg. http://192.168.10.100:80 - **username** (*Required*): The username that used to access the ISY interface. - **password** (*Required*): The password that used to access the ISY interface. -- **sensor_string** (*Optional*): This is the string that is used to identify which devices are to be assumed to be sensors instead of lights of switches. By default, this string is 'sensor'. If this string is found in the device name or folder, Home Assistant will assume it is as a sensor or binary sensor (if the device has on/off or true/false states). +- **sensor_string** (*Optional*): This is the string that is used to identify which devices are to be assumed to be sensors instead of lights of switches. By default, this string is 'sensor'. If this string is found in the device name or folder, Home Assistant will assume it is as a sensor or binary sensor (if the device has on/off or true/false states). This is only necessary for nodes that are not automatically detected as sensors by Home Assistant. Insteon door, window, motion and leak sensors should all be detected automatically. - **hidden_string** (*Optional*): The HIDDEN_STRING is a string that is used to identify which devices are to be hidden on Home Assistant's front page. This string will be stripped from the device's name before being used. By default, this value is '{HIDE ME}'. - **tls** (*Optional*): This entry should reflect the version of TLS that the ISY controller is using for HTTPS encryption. This value can be either 1.1 or 1.2. If this value is not set, it is assumed to be version 1.1. This is the default for most users. ISY994 Pro users may likely be using 1.2. When using HTTPS in the host entry, it is best practice to set this value. Once the ISY controller is configured, it will automatically import any binary sensors, covers, fans, lights, locks, sensors and switches it can locate. +### {% linkable_title Sensors %} + +An Insteon door/window sensor will show up as a single Binary Sensor rather than two discrete devices like it does in the ISY994 admin panel. Note that when in "Two Nodes" mode, the sensor will have an UNKNOWN state until the sensor changes for the first time since the last Home Assistant reboot. If you do not use Insteon scenes that are controlled directly from the door sensor, you may prefer to set the sensor to "One Node" mode using the ISY Admin Panel. + +Each Insteon leak sensor will also show up as a single Binary Sensor as opposed to the two nodes seen in the ISY994. The name of the device will be based on what the parent node is named in the ISY994, which is typically the one with "-Dry" at the end of the name. This may be confusing, because "On" means wet in Home Assistant. You can rename this node either in the ISY994 Admin Panel (which will change the entity_id in Home Assistant) or assign a `friendly_name` in the [Customization section](https://home-assistant.io/docs/configuration/customizing-devices/) of your configuration. + +If your leak or door/window sensor supports heartbeats, a new binary_sensor device will be added to Home Assistant to represent the battery state. The sensor will stay "Off" so long as the daily heartbeats occur. If a heartbeat is missed, the sensor will flip to "On". The name of this device will be based on the heartbeat node in the ISY. + +### {% linkable_title Handling Insteon Control Events %} + +A Home Assistant `isy994_control` event is emitted for every "control" event in the Insteon network. This allows you to write automations that trigger based on Insteon button presses. You can also trigger off of the unique Insteon events, such as double-presses, long-holds etc. + +```yaml +automation: + - alias: turn off living room on double tap lightswitch + trigger: + platform: event + event_type: isy994_control + event_data: + entity_id: light.lr_track_lights_front + control: 'DFOF' + action: + service: light.turn_off + entity_id: light.lr_track_lights_rear +``` + +All `isy994_control` events will have an `entity_id` and `control` parameter in its `event_data`. You'll need to refer to ISY994 documentation for the list of every possible control type, but the common ones are: + +- `DON`: On button +- `DOF`: Off button +- `DFON`: "Fast On", usually from double-tapping an On button +- `DFOF`: "Fast Off", usually from double-tapping an Off button +- `FDUP`: "Fade Up", usually while holding down an On button +- `FDDOWN`: "Fade Down", usually while holding down an Off button +- `FDSTOP`: "Fade Stop", when releasing a long-held button +- `BRT`: "Brighten", from controllers that issue a single command to slightly brighten a light +- `DIM`: "Dim", from controllers that issue a single command to slightly dim a light + +### {% linkable_title Insteon Scenes %} + +All Insteon scenes configured in the ISY994 will show up as switches in Home Assistant. + ### {% linkable_title Creating Custom Devices %} Using the Programs tab in the controller's Administrative Console, custom devices can be created that will appear natively inside of Home Assistant. Home Assistant will scan the following folders and build the device to the associated domains: From 0e638d5f65c2efbf66c749f5484a84987aa4ea67 Mon Sep 17 00:00:00 2001 From: Mike Date: Fri, 15 Dec 2017 16:34:21 -0500 Subject: [PATCH 45/60] Update to include MQTT configuration (#4218) * Update to incluse MQTT configuration Details support for MQTT as of firmware 1.17 * Fixes --- source/_components/cover.garadget.markdown | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/source/_components/cover.garadget.markdown b/source/_components/cover.garadget.markdown index 1d34384fffa..6ae25d44e8e 100644 --- a/source/_components/cover.garadget.markdown +++ b/source/_components/cover.garadget.markdown @@ -98,3 +98,17 @@ logbook: - sensor.garage_door_time_in_state - sensor.garage_door_wifi_signal_strength ``` + +As of firmware release 1.17 the garadget device has native support for MQTT. The options allow the end-user to configure the device in the following ways 'cloud only', 'cloud and MQTT' or 'MQTT only'. + +For configuration of the garadget as a MQTT cover: + +```yaml +cover: + - platform: mqtt + name: "Garage Door" + command_topic: "garadget/device_name/command" + state_topic: "garadget/device_name/status" + payload_open: "open" + payload_close: "close" +``` From 2cf00d66517953f590298093670ebf0eda830a8c Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Sat, 16 Dec 2017 00:18:52 -0800 Subject: [PATCH 46/60] Update categories --- source/_components/cloud.markdown | 8 +++----- source/_components/telegram_bot.broadcast.markdown | 2 +- source/_components/telegram_bot.polling.markdown | 2 +- source/_components/telegram_bot.webhooks.markdown | 2 +- 4 files changed, 6 insertions(+), 8 deletions(-) diff --git a/source/_components/cloud.markdown b/source/_components/cloud.markdown index 19541d18047..c2a25d0bfea 100644 --- a/source/_components/cloud.markdown +++ b/source/_components/cloud.markdown @@ -8,13 +8,11 @@ comments: false sharing: true footer: true logo: home-assistant.png -ha_release: 0.57 +ha_release: 0.60 +ha_category: Voice +ha_iot_class: "Cloud Push" --- -

-Home Assistant Cloud is currently in private beta. -

- The Home Assistant Cloud allows you to quickly integrate your local instance with various cloud services. Any processing of services from other cloud services is handled by your local instance. To get started, create an account and log in via the configuration panel in your Home Assistant instance. There is no need to configure your router or expose your instance to the internet in any other way. diff --git a/source/_components/telegram_bot.broadcast.markdown b/source/_components/telegram_bot.broadcast.markdown index d743f1d8916..ee9d4032328 100644 --- a/source/_components/telegram_bot.broadcast.markdown +++ b/source/_components/telegram_bot.broadcast.markdown @@ -8,7 +8,7 @@ comments: false sharing: true footer: true logo: telegram.png -ha_category: Telegram chatbot +ha_category: Notifications ha_release: 0.48 --- diff --git a/source/_components/telegram_bot.polling.markdown b/source/_components/telegram_bot.polling.markdown index a938dca5c5d..15c4d26eb0b 100644 --- a/source/_components/telegram_bot.polling.markdown +++ b/source/_components/telegram_bot.polling.markdown @@ -8,7 +8,7 @@ comments: false sharing: true footer: true logo: telegram.png -ha_category: Telegram chatbot +ha_category: Notifications ha_release: 0.42 --- diff --git a/source/_components/telegram_bot.webhooks.markdown b/source/_components/telegram_bot.webhooks.markdown index 8b88dcb77ae..7821b03c009 100644 --- a/source/_components/telegram_bot.webhooks.markdown +++ b/source/_components/telegram_bot.webhooks.markdown @@ -8,7 +8,7 @@ comments: false sharing: true footer: true logo: telegram.png -ha_category: Telegram chatbot +ha_category: Notifications ha_release: 0.42 --- From 643852f89be41d2f808ad582cc0e15a81c8b655c Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Sat, 16 Dec 2017 00:53:02 -0800 Subject: [PATCH 47/60] cloud stuff --- source/_components/alexa.markdown | 8 ++++++-- source/_components/cloud.markdown | 9 +++++++-- source/index.html | 10 +++++++++- 3 files changed, 22 insertions(+), 5 deletions(-) diff --git a/source/_components/alexa.markdown b/source/_components/alexa.markdown index bccf44f2e77..6b1347a386e 100644 --- a/source/_components/alexa.markdown +++ b/source/_components/alexa.markdown @@ -10,9 +10,13 @@ footer: true logo: amazon-echo.png ha_category: Voice featured: true -ha_release: 0.10 +ha_release: '0.10' --- +

+ Use [Home Assistant Cloud](/components/cloud/) to integrate with Alexa without any effort. +

+ There are a few ways that you can use Amazon Echo and Home Assistant together. - [Build custom commands to use](#i-want-to-build-custom-commands-to-use-with-echo) @@ -325,7 +329,7 @@ Please refer to the [Amazon documentation][flash-briefing-api-docs] for more inf - All other settings are up to you - Hit "Next" - Test - - Having passed all validations to reach this screen, you can now click on "< Back to All Skills" as your flash briefing is now available as in "Development" service. + - Having passed all validations to reach this screen, you can now click on "< Back to All Skills" as your flash briefing is now available as in "Development" service. - To invoke your flash briefing, open the Alexa app on your phone or go to the [Alexa Settings Site][alexa-settings-site], open the "Skills" configuration section, select "Your Skills", scroll to the bottom, tap on the Flash Briefing Skill you just created, enable it, then manage Flash Briefing and adjust ordering as necessary. Finally ask your Echo for your "news","flash briefing", or "briefing". [amazon-dev-console]: https://developer.amazon.com diff --git a/source/_components/cloud.markdown b/source/_components/cloud.markdown index c2a25d0bfea..7349bdc253c 100644 --- a/source/_components/cloud.markdown +++ b/source/_components/cloud.markdown @@ -13,9 +13,14 @@ ha_category: Voice ha_iot_class: "Cloud Push" --- -The Home Assistant Cloud allows you to quickly integrate your local instance with various cloud services. Any processing of services from other cloud services is handled by your local instance. +The Home Assistant Cloud allows you to quickly integrate your local Home Assistant with various cloud services. Any processing of services from other cloud services is handled by your local Home Assistant. -To get started, create an account and log in via the configuration panel in your Home Assistant instance. There is no need to configure your router or expose your instance to the internet in any other way. +```yaml +# Example configuration.yaml entry to enable the cloud component +cloud: +``` + +Once activated, go to the configuration panel in Home Assistant and create an account and log in. There is no need to configure your router or expose your instance to the internet in any other way. ### {% linkable_title Amazon Alexa %} diff --git a/source/index.html b/source/index.html index bbb78b9dc34..a847b2632b9 100644 --- a/source/index.html +++ b/source/index.html @@ -33,6 +33,14 @@ description: Open-source home automation platform running on Python 3. Track and
Chat
+
+

Alexa, turn on the lights

+ Use Alexa to control Home Assistant. + + +
Read our founder's vision for the perfect home automation @@ -119,7 +127,7 @@ description: Open-source home automation platform running on Python 3. Track and Wired.com logo OpenSource.com logo - + Linux Magazine logo Ct logo From d7a93e4cdfd2708dc4682c5e187e24f7a4b9e144 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Sat, 16 Dec 2017 00:59:30 -0800 Subject: [PATCH 48/60] things --- ...-introducing-home-assistant-cloud.markdown | 61 +++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 source/_posts/2017-12-16-introducing-home-assistant-cloud.markdown diff --git a/source/_posts/2017-12-16-introducing-home-assistant-cloud.markdown b/source/_posts/2017-12-16-introducing-home-assistant-cloud.markdown new file mode 100644 index 00000000000..1c6cf5e9ac5 --- /dev/null +++ b/source/_posts/2017-12-16-introducing-home-assistant-cloud.markdown @@ -0,0 +1,61 @@ +--- +layout: post +title: Introducing Home Assistant Cloud +description: "Use Alexa to control any device that is connected to Home Assistant." +date: 2017-12-16 02:00:00 +date_formatted: "December 16, 2017" +author: Paulus Schoutsen +author_twitter: balloob +comments: true +categories: Announcements +--- + +Today we’re introducing the next step in the Home Assistant saga: the Home Assistant Cloud. The goal of the Home Assistant Cloud is to bridge the gap between your local Home Assistant instance and services in the cloud while delivering the maximum possible security and privacy. + +The first service that is supported via the Home Assistant Cloud is the Amazon Alexa Smart Home skill. This integration will allow you to control all your devices in Home Assistant via Amazon Alexa. You will be able to say _“Alexa, turn on the kitchen lights”_ and your local Home Assistant will turn on the lights. Because Alexa talks to Home Assistant, it doesn’t matter what kind of lights they are! Anything that is linked to Home Assistant will work. IKEA lights, a 10 year old X10 switch or something you’ve made yourself. As long as Home Assistant can control it, you can control it via Alexa. + +We have designed the Home Assistant Cloud with security in mind. When you activate the new Cloud component, your instance will setup a secure connection to the Home Assistant Cloud. Alexa will deliver messages to our cloud which we will forward to your local instance for processing. We just forward the response back to Alexa. This means that we do not have to store the state of your house in our cloud, we’re just the messenger! + +We are making the beta of the Home Assistant Cloud publicly available today. During the beta period the Home Assistant Cloud will be free to use. We are currently planning to run a beta till March 1, 2018 0:00 UTC. Once the beta ends, the Home Assistant Cloud will be part of our Community Support package which will run at $5 USD/month. + +By subscribing to the Community Support package you will show your support for the Home Assistant organization, its projects and its community. It will help fund development, cover our operating costs and gives you access to use Home Assistant Cloud. + +So if you ever felt like donating money to support the development of Home Assistant and Hass.io: sign up for the Home Assistant Cloud! + +### {% linkable_title Why not take donations? %} + +With donations you have to convince people to keep donating and it will be hard to plan around the amount of available money. The biggest concern is what do you do when there is not enough money. We could shut down the servers or again depend on the wallets of our developers. We could run Wikipedia style advertisements for donating, but those are even more annoying than running advertisements. + +## {% linkable_title Getting started %} + +Upgrade Home Assistant to 0.60 and enable the cloud and config components: + +```yaml +# Example configuration.yaml entry +cloud: +config: +``` + +Now restart Home Assistant and navigate to the configuration panel. It will offer a new cloud section. Here you can create an account and login. Once logged in, your instance will connect to the cloud. + +The next step is to configure Alexa. This can be done by enabling the Home Assistant skill for Alexa and link your Home Assistant cloud account. + +Once you’re done, ask Alexa to discover devices (“Alexa, discover devices”) and you are all set to control them: “Alexa, turn on <device name>”. + +## {% linkable_title FAQ %} + +**Will Home Assistant and Hass.io remain open source?** + +Yes. Yes. Yes! Home Assistant is the work of hundreds of developers all working together in creating something amazing. The only thing that will require a subscription is the optional cloud functionality. + +**What other features will come to the cloud?** + +We have a lot of ideas! We are not going to make any promises but here are some things that we’re looking into: + +- Google Home / Google Assistant Smart Home skill +- Allow easy linking of other cloud services to Home Assistant. No more local juggling with OAuth flows. For example, link your Fitbit account and the Fitbit component will show up in Home Assistant. +- Encrypted backups of your Hass.io data +- Text to speech powered by AWS Polly +- Generic HTTP cloud endpoint for people to send messages to their local instance. This will allow people to build applications on - top of the Home Assistant cloud. +- IFTTT integration +- Alexa shopping list integration From 75193cc3712301f85252681f00d0d06e5249a36f Mon Sep 17 00:00:00 2001 From: Daniel Perna Date: Sat, 16 Dec 2017 13:38:16 +0100 Subject: [PATCH 49/60] Remove icon parameter (#4213) --- source/_components/notify.nfandroidtv.markdown | 2 -- 1 file changed, 2 deletions(-) diff --git a/source/_components/notify.nfandroidtv.markdown b/source/_components/notify.nfandroidtv.markdown index 0a7d1ba842a..79b3096a7de 100644 --- a/source/_components/notify.nfandroidtv.markdown +++ b/source/_components/notify.nfandroidtv.markdown @@ -39,7 +39,6 @@ Configuration variables: - **color** (*Optional*): Has to be one of: grey (default), black, indigo, green, red, cyan, teal, amber, pink - **transparency** (*Optional*): Has to be one of: 0%, 25% (default), 50%, 75%, 100% - **interrupt** (*Optional*): If set to true, 1, on etc., the notification is interactive and can be dismissed or selected to display more details. Depending on the running app (e.g. Netflix), this may stop playback. -- **icon** (*Optional*): Change the default icon to a custom icon by providing the full path to a PNG image. The configuration will be used to configure the default values for the notification for the host specified by the IP. However, you can override most of the settings by passing them with the data-attribute when calling the service. This is a fully customized JSON you can use to test how the final notification will look like: @@ -54,7 +53,6 @@ This is a fully customized JSON you can use to test how the final notification w "transparency":"0%", "color": "red", "interrupt": 1, - "icon": "/path/to/image.png" } } ``` From d1b4884a11235e2c825b9899821d073a914bd8ba Mon Sep 17 00:00:00 2001 From: Pascal Vizeli Date: Sun, 17 Dec 2017 10:33:42 +0100 Subject: [PATCH 50/60] Changes for 0.60 / homematic (#4219) * Changes for 0.60 / homematic * Update homematic.markdown --- source/_components/homematic.markdown | 49 ++++++++++++++++----------- 1 file changed, 30 insertions(+), 19 deletions(-) diff --git a/source/_components/homematic.markdown b/source/_components/homematic.markdown index 93cf903eb44..73287f74209 100644 --- a/source/_components/homematic.markdown +++ b/source/_components/homematic.markdown @@ -28,58 +28,69 @@ To set up the component, add the following information to your `configuration.ya ```yaml homematic: - hosts: + interfaces: wireless: - ip: 127.0.0.1 + host: 127.0.0.1 ``` Configuration variables (global): -- **hosts** (*Required*): Configuration for each host to integrate into Home Assistant. +- **interfaces** (*Required*): Configuration for each XML-RPC interface to integrate into Home Assistant. +- **hosts** (*Optional*): Configuration for each Hub (CCU/Homegear) to integrate into Home Assistant. - **local_ip** (*Optional*): IP of device running Home Assistant. Override auto-detected value for exotic network setups. - **local_port** (*Optional*): Port for connection with Home Assistant. By default it is randomly assigned. -Configuration variables (host): +Configuration variables (interface): -- **ip** (*Required*): IP address of CCU/Homegear device. +- **host** (*Required*): IP address or Hostname of CCU/Homegear device or Hass.io add-on. - **port** (*Optional*): Port of CCU/Homegear XML-RPC Server. Wireless: 2001, wired: 2000, IP: 2010, thermostatgroups: 9292. - **callback_ip** (*Optional*): Set this, if Home Assistant is reachable under a different IP from the CCU (NAT, Docker etc.). - **callback_port** (*Optional*): Set this, if Home Assistant is reachable under a different port from the CCU (NAT, Docker etc.). - **resolvenames** (*Optional*): [`metadata`, `json`, `xml`] Try to fetch device names. Defaults to `false` if not specified. - **username** (*Optional*): When fetching names via JSON-RPC, you need to specify a user with guest-access to the CCU. - **password** (*Optional*): When fetching names via JSON-RPC, you need to specify the password of the user you have configured above. -- **primary** (*Optional*): Set to `true` when using multiple hosts and this host should provide the services and variables. -- **variables** (*Optional*): Set to `true` if you want to use CCU2/Homegear variables. Should only be enabled for the primary host. When using a CCU credentials are required. - **path** (*Optional*): Set to `/groups` when using port 9292. +Configuration variables (host): + +- **host** (*Required*): IP address of CCU/Homegear device. +- **username** (*Optional*): When fetching names via JSON-RPC, you need to specify a user with guest-access to the CCU. +- **password** (*Optional*): When fetching names via JSON-RPC, you need to specify the password of the user you have configured above. + #### Example configuration with multiple protocols and some other options set: ```yaml homematic: - hosts: + interfaces: rf: - ip: 127.0.0.1 + host: 127.0.0.1 resolvenames: json username: Admin password: secret primary: true variables: true wired: - ip: 127.0.0.1 + host: 127.0.0.1 port: 2000 resolvenames: json username: Admin password: secret ip: - ip: 127.0.0.1 + host: 127.0.0.1 port: 2010 groups: - ip: 127.0.0.1 + host: 127.0.0.1 port: 9292 resolvenames: json username: Admin password: secret path: /groups + hosts: + ccu2: + host: 127.0.0.1 + username: Admin + password: secret + ``` ### {% linkable_title The `resolvenames` option %} @@ -115,7 +126,7 @@ sensor: ### {% linkable_title Variables %} It is possible to read and set values of system variables you have setup on the CCU/Homegear. The supported types for setting values are float- and bool-variables. -The states of the variables are available through the attributes of your hub entity (e.g. `homematic.rf`). Use templates (as mentioned above) to make your variables available to automations or as entities. +The states of the variables are available through the attributes of your hub entity (e.g. `homematic.ccu2`). Use templates (as mentioned above) to make your variables available to automations or as entities. The values of variables are polled from the CCU/Homegear in an interval of 30 seconds. Setting the value of a variable happens instantly and is directly pushed. ### {% linkable_title Events %} @@ -154,8 +165,8 @@ The name depends on if you chose to resolve names or not. If not, it will be the * *homematic.virtualkey*: Simulate a keypress (or other valid action) on CCU/Homegear with device or virtual keys. * *homematic.reconnect*: Reconnect to CCU/Homegear without restarting Home Assistant (useful when CCU has been restarted) -* *homematic.set_var_value*: Set the value of a system variable. -* *homematic.set_dev_value*: Control a device manually (even devices without support). Equivalent to setValue-method from XML-RPC. +* *homematic.set_variable_value*: Set the value of a system variable. +* *homematic.set_device_value*: Control a device manually (even devices without support). Equivalent to setValue-method from XML-RPC. #### {% linkable_title Examples %} Simulate a button being pressed @@ -184,9 +195,9 @@ Set boolean variable to true ```yaml ... action: - service: homematic.set_var_value + service: homematic.set_variable_value data: - entity_id: homematic.rf + entity_id: homematic.ccu2 name: Variablename value: true ``` @@ -200,7 +211,7 @@ Manually turn on a switch actor ```yaml ... action: - service: homematic.set_dev_value + service: homematic.set_device_value data: address: LEQ1234567 channel: 1 @@ -212,7 +223,7 @@ Manually set temperature on thermostat ```yaml ... action: - service: homematic.set_dev_value + service: homematic.set_device_value data: address: LEQ1234567 channel: 4 From c4804782c6af04b66c54bad6bbca2730fd1bb602 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Sun, 17 Dec 2017 13:21:50 +0100 Subject: [PATCH 51/60] Set to 0.60 --- _config.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/_config.yml b/_config.yml index f8987527d79..868c6051c4d 100644 --- a/_config.yml +++ b/_config.yml @@ -139,12 +139,12 @@ social: # Home Assistant release details current_major_version: 0 -current_minor_version: 59 -current_patch_version: 2 -date_released: 2017-12-06 +current_minor_version: 60 +current_patch_version: 0 +date_released: 2017-12-17 # Either # or the anchor link to latest release notes in the blog post. # Must be prefixed with a # and have double quotes around it. # Major release: -patch_version_notes: "#release-0592---december-6" +patch_version_notes: "#" # Minor release (Example #release-0431---april-25): From 3668f6ab392c13f52ff4057ae73a04411a71c917 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Sun, 17 Dec 2017 13:31:00 +0100 Subject: [PATCH 52/60] Rename file --- ...kdown => 2017-12-17-introducing-home-assistant-cloud.markdown} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename source/_posts/{2017-12-16-introducing-home-assistant-cloud.markdown => 2017-12-17-introducing-home-assistant-cloud.markdown} (100%) diff --git a/source/_posts/2017-12-16-introducing-home-assistant-cloud.markdown b/source/_posts/2017-12-17-introducing-home-assistant-cloud.markdown similarity index 100% rename from source/_posts/2017-12-16-introducing-home-assistant-cloud.markdown rename to source/_posts/2017-12-17-introducing-home-assistant-cloud.markdown From 1b865b72e3327695105da02ce2a49584d2dc22e2 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Sun, 17 Dec 2017 13:31:15 +0100 Subject: [PATCH 53/60] Add links and update date --- .../2017-12-17-introducing-home-assistant-cloud.markdown | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/source/_posts/2017-12-17-introducing-home-assistant-cloud.markdown b/source/_posts/2017-12-17-introducing-home-assistant-cloud.markdown index 1c6cf5e9ac5..b9018d79b4c 100644 --- a/source/_posts/2017-12-17-introducing-home-assistant-cloud.markdown +++ b/source/_posts/2017-12-17-introducing-home-assistant-cloud.markdown @@ -2,8 +2,8 @@ layout: post title: Introducing Home Assistant Cloud description: "Use Alexa to control any device that is connected to Home Assistant." -date: 2017-12-16 02:00:00 -date_formatted: "December 16, 2017" +date: 2017-12-17 03:00:00 +date_formatted: "December 17, 2017" author: Paulus Schoutsen author_twitter: balloob comments: true @@ -28,7 +28,7 @@ With donations you have to convince people to keep donating and it will be hard ## {% linkable_title Getting started %} -Upgrade Home Assistant to 0.60 and enable the cloud and config components: +Upgrade Home Assistant to 0.60 and enable the [`cloud`](/components/cloud/) and [`config`]](/components/config/) components: ```yaml # Example configuration.yaml entry From ed522614ca14388cff2c1a8ea85c19ac6cdf119f Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Sun, 17 Dec 2017 13:59:01 +0100 Subject: [PATCH 54/60] Add image for release blog posAdd image for release blog postt --- source/images/blog/2017-12-0.60/components.png | Bin 0 -> 82112 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 source/images/blog/2017-12-0.60/components.png diff --git a/source/images/blog/2017-12-0.60/components.png b/source/images/blog/2017-12-0.60/components.png new file mode 100644 index 0000000000000000000000000000000000000000..8f82d4180236d7ba7a1bc4b5f24b187cb64f9953 GIT binary patch literal 82112 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ōm;&QIo2-M1Qt)%3!> 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 Date: Sun, 17 Dec 2017 13:59:55 +0100 Subject: [PATCH 55/60] Add release blog post for 0.60 --- source/_posts/2017-12-17-release-60.markdown | 356 +++++++++++++++++++ 1 file changed, 356 insertions(+) create mode 100644 source/_posts/2017-12-17-release-60.markdown diff --git a/source/_posts/2017-12-17-release-60.markdown b/source/_posts/2017-12-17-release-60.markdown new file mode 100644 index 00000000000..fd727b23172 --- /dev/null +++ b/source/_posts/2017-12-17-release-60.markdown @@ -0,0 +1,356 @@ +--- +layout: post +title: "0.60: Beckhoff/TwinCAT, WebDav, Gearbest, iAlarm" +description: "If you don't want to create items on our shopping list with HTTP requests, just order pizza!" +date: 2017-12-17 02:00:00 +date_formatted: "December 17, 2017" +author: Fabian Affolter +author_twitter: fabaff +comments: true +categories: Release-Notes +og_image: /images/blog/2017-12-0.60/components.png +--- + + + +The biggest change for 0.60 will be covered in a separate [blog post](/blog/2017/12/17/introducing-home-assistant-cloud/). Thus, we will keep it short here. Just one thing: This is the last release in 2017. We will be back to our bi-weekly release cycle in 2018. + +A big "Thank you" to all people who supported us to make this release possible. + +## {% linkable_title TwinCAT %} +With the brand-new [ADS (automation device specification)][ads docs] component by [@stlehmann] allows you to hook Home Assistant into this fieldbus independent interface which is often used between Beckhoff devices running with TwinCAT. + +## {% linkable_title WebDav calendar %} +Thanks to [@maxlaverse] Home Assistant support now [WebDav calendars][calendar.caldav docs]. + +## {% linkable_title Tracking prices %} +With the new [`gearbest` sensor][sensor.gearbest docs] there is now an additional sensor available to track the price of a product. + +## {% linkable_title Financial details %} +Yahoo! has discontinued their financial service. To fill this gap we have now the [`alpha_vantage` sensor][sensor.alpha_vantage docs] which is intruded in this release and allows you to monitor the stock market. + +## {% linkable_title New Platforms %} + +- Add iAlarm support ([@RyuzakiKK] - [#10878]) ([alarm_control_panel.ialarm docs]) (new-platform) +- Add Alpha Vantage sensor ([@fabaff] - [#10873]) ([sensor.alpha_vantage docs]) (new-platform) +- Add ADS component ([@stlehmann] - [#10142]) ([ads docs]) ([binary_sensor.ads docs]) ([light.ads docs]) ([sensor.ads docs]) ([switch.ads docs]) (new-platform) +- Gearbest sensor ([@HerrHofrat] - [#10556]) ([sensor.gearbest docs]) (new-platform) +- Add Ziggo Mediabox XL media_player ([@b10m] - [#10514]) ([media_player.ziggo_mediabox_xl docs]) (new-platform) +- Meraki AP Device tracker ([@masarliev] - [#10971]) ([device_tracker.meraki docs]) (new-platform) +- Added Vera scenes ([@alanfischer] - [#10424]) ([vera docs]) ([scene.vera docs]) (new-platform) +- Add support for Canary component and platforms ([@snjoetw] - [#10306]) ([canary docs]) ([camera.canary docs]) ([sensor.canary docs]) (new-platform) +- Add support for Logitech UE Smart Radios. ([@GreenTurtwig] - [#10077]) ([media_player.ue_smart_radio docs]) (new-platform) +- Added support for cover in tellstick ([@perfalk] - [#10858]) ([tellstick docs]) ([cover.tellstick docs]) (new-platform) +- Add a caldav calendar component ([@maxlaverse] - [#10842]) ([calendar.caldav docs]) (new-platform) +- Refactor hue to split bridge support from light platform ([@andreacampi] - [#10691]) ([hue docs]) ([light.hue docs]) (breaking change) (new-platform) + +## {% linkable_title Breaking Changes %} + +- Update snips to listen on new mqtt topic and utilize rawValue ([@tschmidty69] - [#11020]) ([snips docs]) (breaking change) +- Refactor hue to split bridge support from light platform ([@andreacampi] - [#10691]) ([hue docs]) ([light.hue docs]) (breaking change) (new-platform) +- Use luftdaten module ([@fabaff] - [#10970]) ([sensor.luftdaten docs]) (breaking change) +- ISY994 sensor improvements ([@OverloadUT] - [#10805]) ([isy994 docs]) ([binary_sensor.isy994 docs]) (breaking change) +- Homematic next ([@pvizeli] - [#11156]) ([homematic docs]) (breaking change) + +## {% linkable_title If you need help... %} + +...don't hesitate to use our very active [forums](https://community.home-assistant.io/) or join us for a little [chat](https://discord.gg/c5DvZ4e). The release notes have comments enabled but it's preferred if you use the former communication channels. Thanks. + +## {% linkable_title Reporting Issues %} + +Experiencing issues introduced by this release? Please report them in our [issue tracker](https://github.com/home-assistant/home-assistant/issues). Make sure to fill in all fields of the issue template. + + +## {% linkable_title All changes %} + +- Update ecobee version to fix stack-trace issue ([@PhracturedBlue] - [#10894]) ([ecobee docs]) +- Pybotvac multi ([@raymccarthy] - [#10843]) ([neato docs]) +- More declarative timeout syntax for manual alarm control panel. ([@bonzini] - [#10738]) ([alarm_control_panel.manual docs]) ([alarm_control_panel.manual_mqtt docs]) +- Unpacking RESTful sensor JSON results into attributes. ([@nickovs] - [#10753]) ([sensor.rest docs]) +- Bump dev to 0.60.0.dev0 ([@fabaff] - [#10912]) +- Update eliqonline.py ([@molobrakos] - [#10914]) ([sensor.eliqonline docs]) +- Add iAlarm support ([@RyuzakiKK] - [#10878]) ([alarm_control_panel.ialarm docs]) (new-platform) +- Correction of Samsung Power OFF behaviour ([@RiRomain] - [#10907]) ([media_player.samsungtv docs]) +- Add Alpha Vantage sensor ([@fabaff] - [#10873]) ([sensor.alpha_vantage docs]) (new-platform) +- Don't repeat getting receiver name on each update / pushed to denonavr 0.5.5 ([@scarface-4711] - [#10915]) ([media_player.denonavr docs]) +- Add Min and Event Count Metrics To Prometheus ([@bah2830] - [#10530]) ([prometheus docs]) +- Update coveragerc ([@balloob] - [#10931]) +- Report availability of TP-Link smart sockets ([@DanNixon] - [#10933]) ([switch.tplink docs]) +- Set percent unit for battery level so that history displays properly; edited variable name for consistency ([@nbougues] - [#10932]) ([sensor.tesla docs]) +- Export climate status and target temperature to Prometheus ([@hudashot] - [#10919]) ([prometheus docs]) +- Tado ignore invalid devices ([@dasos] - [#10927]) ([climate.tado docs]) +- don't ignore voltage data if sensor data changed ([@PaulAnnekov] - [#10925]) ([xiaomi_aqara docs]) +- Add ADS component ([@stlehmann] - [#10142]) ([ads docs]) ([binary_sensor.ads docs]) ([light.ads docs]) ([sensor.ads docs]) ([switch.ads docs]) (new-platform) +- Gearbest sensor ([@HerrHofrat] - [#10556]) ([sensor.gearbest docs]) (new-platform) +- Add Ziggo Mediabox XL media_player ([@b10m] - [#10514]) ([media_player.ziggo_mediabox_xl docs]) (new-platform) +- Generic thermostat initial_operation_mode ([@ziotibia81] - [#10690]) ([climate.generic_thermostat docs]) +- Use new build path for dev translations ([@armills] - [#10937]) +- Add option to set default hide if away for new devices ([@masarliev] - [#10762]) ([device_tracker docs]) +- Allow disabling the LEDs on TP-Link smart plugs ([@DanNixon] - [#10980]) ([switch.tplink docs]) +- Meraki AP Device tracker ([@masarliev] - [#10971]) ([device_tracker.meraki docs]) (new-platform) +- Update tradfri.py ([@pvizeli] - [#10991]) ([light.tradfri docs]) +- webostv: Ensure source exists before use ([@OddBloke] - [#10959]) ([media_player.webostv docs]) +- Ensure Docker script files uses LF line endings to support Docker for Windows. ([@R1chardTM] - [#10067]) +- Added Vera scenes ([@alanfischer] - [#10424]) ([vera docs]) ([scene.vera docs]) (new-platform) +- Fix Egardia alarm status shown as unknown after restart ([@jeroenterheerdt] - [#11010]) ([alarm_control_panel.egardia docs]) +- Handle OSError when forcibly turning off media_player.samsungtv ([@lwis] - [#10997]) ([media_player.samsungtv docs]) +- Shuffle support in Sonos ([@mar-schmidt] - [#10875]) ([media_player.sonos docs]) +- Add support for Canary component and platforms ([@snjoetw] - [#10306]) ([canary docs]) ([camera.canary docs]) ([sensor.canary docs]) (new-platform) +- Ignore Sonos players with unknown hostnames ([@amelchio] - [#11013]) +- Support LIFX Mini products ([@amelchio] - [#10996]) ([light.lifx docs]) +- Update snips to listen on new mqtt topic and utilize rawValue ([@tschmidty69] - [#11020]) ([snips docs]) (breaking change) +- Change default js version to auto ([@andrey-git] - [#10999]) +- Serialize mochad requests ([@mtreinish] - [#11029]) ([mochad docs]) ([light.mochad docs]) ([switch.mochad docs]) +- In dev mode expose only relevant sources ([@andrey-git] - [#11026]) +- Added force_update for REST sensor ([@foxel] - [#11016]) ([sensor.miflora docs]) ([sensor.mqtt docs]) ([sensor.rest docs]) +- Add support for Logitech UE Smart Radios. ([@GreenTurtwig] - [#10077]) ([media_player.ue_smart_radio docs]) (new-platform) +- Make notify.html5 depend on config ([@balloob] - [#11052]) ([notify.html5 docs]) +- This change fixes the error `OSError: [WinError 193]` on Windows debuggers (i.e. PyCharm) ([@tringler] - [#11034]) +- Added support for cover in tellstick ([@perfalk] - [#10858]) ([tellstick docs]) ([cover.tellstick docs]) (new-platform) +- Add a caldav calendar component ([@maxlaverse] - [#10842]) ([calendar.caldav docs]) (new-platform) +- Add GPS coords to meraki ([@addelovein] - [#10998]) ([device_tracker.meraki docs]) +- Refactor hue to split bridge support from light platform ([@andreacampi] - [#10691]) ([hue docs]) ([light.hue docs]) (breaking change) (new-platform) +- add custom bypass status to total connect ([@uchagani] - [#11042]) ([alarm_control_panel.totalconnect docs]) +- Volvo on call: Optional use of Scandinavian miles. Also add average fuel consumption property ([@molobrakos] - [#11051]) ([volvooncall docs]) ([sensor.volvooncall docs]) +- Allow tradfri to read the available state of the device ([@pvizeli] - [#11056]) ([light.tradfri docs]) +- Upgrade aiohttp to 2.3.6 ([@fabaff] - [#11079]) +- Upgrade yarl to 0.16.0 ([@fabaff] - [#11078]) +- Upgrade psutil to 5.4.2 ([@fabaff] - [#11083]) ([sensor.systemmonitor docs]) +- Upgrade youtube_dl to 2017.12.10 ([@fabaff] - [#11080]) ([media_extractor docs]) +- Upgrade shodan to 1.7.7 ([@fabaff] - [#11084]) ([sensor.shodan docs]) +- Update tellcore-net to 0.4 ([@pvizeli] - [#11087]) ([tellstick docs]) +- Bump pymusiccast to version 0.1.6 ([@jalmeroth] - [#11091]) ([media_player.yamaha_musiccast docs]) +- Use luftdaten module ([@fabaff] - [#10970]) ([sensor.luftdaten docs]) (breaking change) +- Bump pyatv to 0.3.9 ([@postlund] - [#11104]) ([apple_tv docs]) +- Report availability for TP-Link smart bulbs ([@DanNixon] - [#10976]) ([light.tplink docs]) +- Fix incorrect comment. ([@emosenkis] - [#11111]) +- Update Warrant ([@balloob] - [#11101]) ([cloud docs]) +- Fixed typo in automation.py ([@ryanm101] - [#11116]) ([config.automation docs]) +- Add media position properties ([@pschmitt] - [#10076]) ([media_player.liveboxplaytv docs]) +- update pyripple ([@nkgilley] - [#11122]) ([sensor.ripple docs]) +- Skip HASS emulated Hue bridges from detection. ([@andreacampi] - [#11128]) ([hue docs]) +- Always consume the no_throttle keyword argument. ([@andreacampi] - [#11126]) +- Add problem device class ([@armills] - [#11130]) ([binary_sensor docs]) +- set default utc offset to 0 ([@pollett] - [#11114]) ([sensor.efergy docs]) +- Allow using more than one keyboard remote ([@BryanJacobs] - [#11061]) ([keyboard_remote docs]) +- ISY994 sensor improvements ([@OverloadUT] - [#10805]) ([isy994 docs]) ([binary_sensor.isy994 docs]) (breaking change) +- Disable html5 notify dependency ([@balloob] - [#11135]) ([notify.html5 docs]) +- Upgrade Homematic ([@danielperna84] - [#11149]) ([homematic docs]) +- Fix X10 commands for mochad light turn on ([@mtreinish] - [#11146]) ([light.mochad docs]) +- Homematic next ([@pvizeli] - [#11156]) ([homematic docs]) (breaking change) +- Resolve hostnames ([@pvizeli] - [#11160]) ([homematic docs]) +- Perform logbook filtering on the worker thread ([@armills] - [#11161]) ([logbook docs]) +- Don't connect to cloud if subscription expired ([@balloob] - [#11163]) ([cloud docs]) ([cloud.const docs]) +- Add install mode to homematic ([@pvizeli] - [#11164]) ([homematic docs]) +- convert alarmdecoder interface from async to sync ([@PhracturedBlue] - [#11168]) ([alarmdecoder docs]) +- Remove logging ([@cmsimike] - [#11173]) ([sensor.octoprint docs]) +- Revbump to SoCo 0.13 and add support for Night Sound and Speech Enhancement. ([@rbdixon] - [#10765]) ([media_player.sonos docs]) + +[#10067]: https://github.com/home-assistant/home-assistant/pull/10067 +[#10076]: https://github.com/home-assistant/home-assistant/pull/10076 +[#10077]: https://github.com/home-assistant/home-assistant/pull/10077 +[#10142]: https://github.com/home-assistant/home-assistant/pull/10142 +[#10306]: https://github.com/home-assistant/home-assistant/pull/10306 +[#10424]: https://github.com/home-assistant/home-assistant/pull/10424 +[#10514]: https://github.com/home-assistant/home-assistant/pull/10514 +[#10530]: https://github.com/home-assistant/home-assistant/pull/10530 +[#10556]: https://github.com/home-assistant/home-assistant/pull/10556 +[#10690]: https://github.com/home-assistant/home-assistant/pull/10690 +[#10691]: https://github.com/home-assistant/home-assistant/pull/10691 +[#10738]: https://github.com/home-assistant/home-assistant/pull/10738 +[#10753]: https://github.com/home-assistant/home-assistant/pull/10753 +[#10762]: https://github.com/home-assistant/home-assistant/pull/10762 +[#10765]: https://github.com/home-assistant/home-assistant/pull/10765 +[#10805]: https://github.com/home-assistant/home-assistant/pull/10805 +[#10842]: https://github.com/home-assistant/home-assistant/pull/10842 +[#10843]: https://github.com/home-assistant/home-assistant/pull/10843 +[#10858]: https://github.com/home-assistant/home-assistant/pull/10858 +[#10873]: https://github.com/home-assistant/home-assistant/pull/10873 +[#10875]: https://github.com/home-assistant/home-assistant/pull/10875 +[#10878]: https://github.com/home-assistant/home-assistant/pull/10878 +[#10894]: https://github.com/home-assistant/home-assistant/pull/10894 +[#10907]: https://github.com/home-assistant/home-assistant/pull/10907 +[#10912]: https://github.com/home-assistant/home-assistant/pull/10912 +[#10914]: https://github.com/home-assistant/home-assistant/pull/10914 +[#10915]: https://github.com/home-assistant/home-assistant/pull/10915 +[#10919]: https://github.com/home-assistant/home-assistant/pull/10919 +[#10925]: https://github.com/home-assistant/home-assistant/pull/10925 +[#10927]: https://github.com/home-assistant/home-assistant/pull/10927 +[#10931]: https://github.com/home-assistant/home-assistant/pull/10931 +[#10932]: https://github.com/home-assistant/home-assistant/pull/10932 +[#10933]: https://github.com/home-assistant/home-assistant/pull/10933 +[#10937]: https://github.com/home-assistant/home-assistant/pull/10937 +[#10959]: https://github.com/home-assistant/home-assistant/pull/10959 +[#10970]: https://github.com/home-assistant/home-assistant/pull/10970 +[#10971]: https://github.com/home-assistant/home-assistant/pull/10971 +[#10976]: https://github.com/home-assistant/home-assistant/pull/10976 +[#10980]: https://github.com/home-assistant/home-assistant/pull/10980 +[#10991]: https://github.com/home-assistant/home-assistant/pull/10991 +[#10996]: https://github.com/home-assistant/home-assistant/pull/10996 +[#10997]: https://github.com/home-assistant/home-assistant/pull/10997 +[#10998]: https://github.com/home-assistant/home-assistant/pull/10998 +[#10999]: https://github.com/home-assistant/home-assistant/pull/10999 +[#11010]: https://github.com/home-assistant/home-assistant/pull/11010 +[#11013]: https://github.com/home-assistant/home-assistant/pull/11013 +[#11016]: https://github.com/home-assistant/home-assistant/pull/11016 +[#11020]: https://github.com/home-assistant/home-assistant/pull/11020 +[#11026]: https://github.com/home-assistant/home-assistant/pull/11026 +[#11029]: https://github.com/home-assistant/home-assistant/pull/11029 +[#11034]: https://github.com/home-assistant/home-assistant/pull/11034 +[#11042]: https://github.com/home-assistant/home-assistant/pull/11042 +[#11051]: https://github.com/home-assistant/home-assistant/pull/11051 +[#11052]: https://github.com/home-assistant/home-assistant/pull/11052 +[#11056]: https://github.com/home-assistant/home-assistant/pull/11056 +[#11061]: https://github.com/home-assistant/home-assistant/pull/11061 +[#11078]: https://github.com/home-assistant/home-assistant/pull/11078 +[#11079]: https://github.com/home-assistant/home-assistant/pull/11079 +[#11080]: https://github.com/home-assistant/home-assistant/pull/11080 +[#11083]: https://github.com/home-assistant/home-assistant/pull/11083 +[#11084]: https://github.com/home-assistant/home-assistant/pull/11084 +[#11087]: https://github.com/home-assistant/home-assistant/pull/11087 +[#11091]: https://github.com/home-assistant/home-assistant/pull/11091 +[#11101]: https://github.com/home-assistant/home-assistant/pull/11101 +[#11104]: https://github.com/home-assistant/home-assistant/pull/11104 +[#11111]: https://github.com/home-assistant/home-assistant/pull/11111 +[#11114]: https://github.com/home-assistant/home-assistant/pull/11114 +[#11116]: https://github.com/home-assistant/home-assistant/pull/11116 +[#11122]: https://github.com/home-assistant/home-assistant/pull/11122 +[#11126]: https://github.com/home-assistant/home-assistant/pull/11126 +[#11128]: https://github.com/home-assistant/home-assistant/pull/11128 +[#11130]: https://github.com/home-assistant/home-assistant/pull/11130 +[#11135]: https://github.com/home-assistant/home-assistant/pull/11135 +[#11146]: https://github.com/home-assistant/home-assistant/pull/11146 +[#11149]: https://github.com/home-assistant/home-assistant/pull/11149 +[#11156]: https://github.com/home-assistant/home-assistant/pull/11156 +[#11160]: https://github.com/home-assistant/home-assistant/pull/11160 +[#11161]: https://github.com/home-assistant/home-assistant/pull/11161 +[#11163]: https://github.com/home-assistant/home-assistant/pull/11163 +[#11164]: https://github.com/home-assistant/home-assistant/pull/11164 +[#11168]: https://github.com/home-assistant/home-assistant/pull/11168 +[#11173]: https://github.com/home-assistant/home-assistant/pull/11173 +[@BryanJacobs]: https://github.com/BryanJacobs +[@DanNixon]: https://github.com/DanNixon +[@GreenTurtwig]: https://github.com/GreenTurtwig +[@HerrHofrat]: https://github.com/HerrHofrat +[@OddBloke]: https://github.com/OddBloke +[@OverloadUT]: https://github.com/OverloadUT +[@PaulAnnekov]: https://github.com/PaulAnnekov +[@PhracturedBlue]: https://github.com/PhracturedBlue +[@R1chardTM]: https://github.com/R1chardTM +[@RiRomain]: https://github.com/RiRomain +[@RyuzakiKK]: https://github.com/RyuzakiKK +[@addelovein]: https://github.com/addelovein +[@alanfischer]: https://github.com/alanfischer +[@amelchio]: https://github.com/amelchio +[@andreacampi]: https://github.com/andreacampi +[@andrey-git]: https://github.com/andrey-git +[@armills]: https://github.com/armills +[@b10m]: https://github.com/b10m +[@bah2830]: https://github.com/bah2830 +[@balloob]: https://github.com/balloob +[@bonzini]: https://github.com/bonzini +[@cmsimike]: https://github.com/cmsimike +[@danielperna84]: https://github.com/danielperna84 +[@dasos]: https://github.com/dasos +[@emosenkis]: https://github.com/emosenkis +[@fabaff]: https://github.com/fabaff +[@foxel]: https://github.com/foxel +[@hudashot]: https://github.com/hudashot +[@jalmeroth]: https://github.com/jalmeroth +[@jeroenterheerdt]: https://github.com/jeroenterheerdt +[@lwis]: https://github.com/lwis +[@mar-schmidt]: https://github.com/mar-schmidt +[@masarliev]: https://github.com/masarliev +[@maxlaverse]: https://github.com/maxlaverse +[@molobrakos]: https://github.com/molobrakos +[@mtreinish]: https://github.com/mtreinish +[@nbougues]: https://github.com/nbougues +[@nickovs]: https://github.com/nickovs +[@nkgilley]: https://github.com/nkgilley +[@perfalk]: https://github.com/perfalk +[@pollett]: https://github.com/pollett +[@postlund]: https://github.com/postlund +[@pschmitt]: https://github.com/pschmitt +[@pvizeli]: https://github.com/pvizeli +[@raymccarthy]: https://github.com/raymccarthy +[@rbdixon]: https://github.com/rbdixon +[@ryanm101]: https://github.com/ryanm101 +[@scarface-4711]: https://github.com/scarface-4711 +[@snjoetw]: https://github.com/snjoetw +[@stlehmann]: https://github.com/stlehmann +[@tringler]: https://github.com/tringler +[@tschmidty69]: https://github.com/tschmidty69 +[@uchagani]: https://github.com/uchagani +[@ziotibia81]: https://github.com/ziotibia81 +[ads docs]: https://home-assistant.io/components/ads/ +[alarm_control_panel.egardia docs]: https://home-assistant.io/components/alarm_control_panel.egardia/ +[alarm_control_panel.ialarm docs]: https://home-assistant.io/components/alarm_control_panel.ialarm/ +[alarm_control_panel.manual docs]: https://home-assistant.io/components/alarm_control_panel.manual/ +[alarm_control_panel.manual_mqtt docs]: https://home-assistant.io/components/alarm_control_panel.manual_mqtt/ +[alarm_control_panel.totalconnect docs]: https://home-assistant.io/components/alarm_control_panel.totalconnect/ +[alarmdecoder docs]: https://home-assistant.io/components/alarmdecoder/ +[apple_tv docs]: https://home-assistant.io/components/apple_tv/ +[binary_sensor docs]: https://home-assistant.io/components/binary_sensor/ +[binary_sensor.ads docs]: https://home-assistant.io/components/binary_sensor.ads/ +[binary_sensor.isy994 docs]: https://home-assistant.io/components/binary_sensor.isy994/ +[calendar.caldav docs]: https://home-assistant.io/components/calendar.caldav/ +[camera.canary docs]: https://home-assistant.io/components/camera.canary/ +[canary docs]: https://home-assistant.io/components/canary/ +[climate.generic_thermostat docs]: https://home-assistant.io/components/climate.generic_thermostat/ +[climate.tado docs]: https://home-assistant.io/components/climate.tado/ +[cloud docs]: https://home-assistant.io/components/cloud/ +[cloud.const docs]: https://home-assistant.io/components/cloud.const/ +[config.automation docs]: https://home-assistant.io/components/config.automation/ +[cover.tellstick docs]: https://home-assistant.io/components/cover.tellstick/ +[device_tracker docs]: https://home-assistant.io/components/device_tracker/ +[device_tracker.meraki docs]: https://home-assistant.io/components/device_tracker.meraki/ +[ecobee docs]: https://home-assistant.io/components/ecobee/ +[homematic docs]: https://home-assistant.io/components/homematic/ +[hue docs]: https://home-assistant.io/components/hue/ +[isy994 docs]: https://home-assistant.io/components/isy994/ +[keyboard_remote docs]: https://home-assistant.io/components/keyboard_remote/ +[light.ads docs]: https://home-assistant.io/components/light.ads/ +[light.hue docs]: https://home-assistant.io/components/light.hue/ +[light.lifx docs]: https://home-assistant.io/components/light.lifx/ +[light.mochad docs]: https://home-assistant.io/components/light.mochad/ +[light.tplink docs]: https://home-assistant.io/components/light.tplink/ +[light.tradfri docs]: https://home-assistant.io/components/light.tradfri/ +[logbook docs]: https://home-assistant.io/components/logbook/ +[media_extractor docs]: https://home-assistant.io/components/media_extractor/ +[media_player.denonavr docs]: https://home-assistant.io/components/media_player.denonavr/ +[media_player.liveboxplaytv docs]: https://home-assistant.io/components/media_player.liveboxplaytv/ +[media_player.samsungtv docs]: https://home-assistant.io/components/media_player.samsungtv/ +[media_player.sonos docs]: https://home-assistant.io/components/media_player.sonos/ +[media_player.ue_smart_radio docs]: https://home-assistant.io/components/media_player.ue_smart_radio/ +[media_player.webostv docs]: https://home-assistant.io/components/media_player.webostv/ +[media_player.yamaha_musiccast docs]: https://home-assistant.io/components/media_player.yamaha_musiccast/ +[media_player.ziggo_mediabox_xl docs]: https://home-assistant.io/components/media_player.ziggo_mediabox_xl/ +[mochad docs]: https://home-assistant.io/components/mochad/ +[neato docs]: https://home-assistant.io/components/neato/ +[notify.html5 docs]: https://home-assistant.io/components/notify.html5/ +[prometheus docs]: https://home-assistant.io/components/prometheus/ +[scene.vera docs]: https://home-assistant.io/components/scene.vera/ +[sensor.ads docs]: https://home-assistant.io/components/sensor.ads/ +[sensor.alpha_vantage docs]: https://home-assistant.io/components/sensor.alpha_vantage/ +[sensor.canary docs]: https://home-assistant.io/components/sensor.canary/ +[sensor.efergy docs]: https://home-assistant.io/components/sensor.efergy/ +[sensor.eliqonline docs]: https://home-assistant.io/components/sensor.eliqonline/ +[sensor.gearbest docs]: https://home-assistant.io/components/sensor.gearbest/ +[sensor.luftdaten docs]: https://home-assistant.io/components/sensor.luftdaten/ +[sensor.miflora docs]: https://home-assistant.io/components/sensor.miflora/ +[sensor.mqtt docs]: https://home-assistant.io/components/sensor.mqtt/ +[sensor.octoprint docs]: https://home-assistant.io/components/sensor.octoprint/ +[sensor.rest docs]: https://home-assistant.io/components/sensor.rest/ +[sensor.ripple docs]: https://home-assistant.io/components/sensor.ripple/ +[sensor.shodan docs]: https://home-assistant.io/components/sensor.shodan/ +[sensor.systemmonitor docs]: https://home-assistant.io/components/sensor.systemmonitor/ +[sensor.tesla docs]: https://home-assistant.io/components/sensor.tesla/ +[sensor.volvooncall docs]: https://home-assistant.io/components/sensor.volvooncall/ +[snips docs]: https://home-assistant.io/components/snips/ +[switch.ads docs]: https://home-assistant.io/components/switch.ads/ +[switch.mochad docs]: https://home-assistant.io/components/switch.mochad/ +[switch.tplink docs]: https://home-assistant.io/components/switch.tplink/ +[tellstick docs]: https://home-assistant.io/components/tellstick/ +[vera docs]: https://home-assistant.io/components/vera/ +[volvooncall docs]: https://home-assistant.io/components/volvooncall/ +[xiaomi_aqara docs]: https://home-assistant.io/components/xiaomi_aqara/ From 2662468be74f7bbc3e412ee3c669bdada5932f9b Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Sun, 17 Dec 2017 14:00:16 +0100 Subject: [PATCH 56/60] Fix link --- .../_posts/2017-12-17-introducing-home-assistant-cloud.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_posts/2017-12-17-introducing-home-assistant-cloud.markdown b/source/_posts/2017-12-17-introducing-home-assistant-cloud.markdown index b9018d79b4c..8a8aaa10fc1 100644 --- a/source/_posts/2017-12-17-introducing-home-assistant-cloud.markdown +++ b/source/_posts/2017-12-17-introducing-home-assistant-cloud.markdown @@ -28,7 +28,7 @@ With donations you have to convince people to keep donating and it will be hard ## {% linkable_title Getting started %} -Upgrade Home Assistant to 0.60 and enable the [`cloud`](/components/cloud/) and [`config`]](/components/config/) components: +Upgrade Home Assistant to 0.60 and enable the [`cloud`](/components/cloud/) and [`config`](/components/config/) components: ```yaml # Example configuration.yaml entry From af47e24019a749bb1d4053e2761d7c133f8b9a4d Mon Sep 17 00:00:00 2001 From: GreenTurtwig Date: Sun, 17 Dec 2017 13:37:48 +0000 Subject: [PATCH 57/60] Documentation for Logitech UE Smart Radios (#3538) * Documentation for Logitech UE Smart Radios * Updated name. * Update example config. * Update with new configuration format. * Updated with requested changes. --- .../media_player.ue_smart_radio.markdown | 38 ++++++++++++++++++ source/images/supported_brands/ueradio.png | Bin 0 -> 6473 bytes 2 files changed, 38 insertions(+) create mode 100644 source/_components/media_player.ue_smart_radio.markdown create mode 100644 source/images/supported_brands/ueradio.png diff --git a/source/_components/media_player.ue_smart_radio.markdown b/source/_components/media_player.ue_smart_radio.markdown new file mode 100644 index 00000000000..217b625b8d5 --- /dev/null +++ b/source/_components/media_player.ue_smart_radio.markdown @@ -0,0 +1,38 @@ +--- +layout: page +title: "Logitech UE Smart Radio" +description: "Instructions on how to integrate a Logitech UE Smart Radio player into Home Assistant." +date: 2017-12-09 20:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: ueradio.png +ha_category: Media Player +ha_release: "0.60" +ha_iot_class: "Cloud Polling" +--- + + +The `ue_radio` platform allows you to control a [Logitech UE Smart Radio](https://www.uesmartradio.com) from Home Assistant. This lets you control both Logitech UE Smart Radios and Logitech Squeezebox Radios that have been updated with the UE Smart Radio update. + +To add your UE Smart Radio player to your installation, add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +media_player: + - platform: ue_smart_radio + username: USERNAME + password: PASSWORD +``` + +{% configuration %} +username: + description: The email you use to log in to `uesmartradio.com`. + required: true + type: string +password: + description: The password you use to log in to `uesmartradio.com`. + required: true + type: string +{% endconfiguration %} diff --git a/source/images/supported_brands/ueradio.png b/source/images/supported_brands/ueradio.png new file mode 100644 index 0000000000000000000000000000000000000000..ebbde9e8eb074f093a4456ddcf0b11c6f848d001 GIT binary patch literal 6473 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 Date: Sun, 17 Dec 2017 14:42:52 +0100 Subject: [PATCH 58/60] Multiple fixes --- source/_components/cover.tellstick.markdown | 25 +++++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 source/_components/cover.tellstick.markdown diff --git a/source/_components/cover.tellstick.markdown b/source/_components/cover.tellstick.markdown new file mode 100644 index 00000000000..2008ef2a73d --- /dev/null +++ b/source/_components/cover.tellstick.markdown @@ -0,0 +1,25 @@ +--- +layout: page +title: "TellStick Cover" +description: "Instructions how to integrate TellStick covers into Home Assistant." +date: 2017-11-29 16:23 +sidebar: true +comments: false +sharing: true +footer: true +logo: telldus_tellstick.png +ha_category: Cover +ha_iot_class: "Assumed State" +ha_release: "0.60" +--- + + +This `tellstick` cover platform allows you to control your [TellStick](http://www.telldus.se/products/tellstick) covers. + +To use your TellStick device, you first have to set up your [Tellstick hub](/components/tellstick/) and then add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +cover: + - platform: tellstick +``` From 22166ca9890ae26850ac3bf849eacfb5ba7f94d3 Mon Sep 17 00:00:00 2001 From: Roman Date: Sun, 17 Dec 2017 14:51:57 +0100 Subject: [PATCH 59/60] Added Gearbest Sensor (#3973) * Added Gearbest Sensor * Updated gearbest markdown to reflect latest changes * :ambulance: Adds missing Gearbest logo * :checkered_flag: Updated HA release version * :pencil2: Corrected some minor language issues * :hammer: Rewritten configuration options to use configuration tags * Minor updates --- source/_components/sensor.gearbest.markdown | 72 ++++++++++++++++++++ source/images/supported_brands/gearbest.png | Bin 0 -> 5920 bytes 2 files changed, 72 insertions(+) create mode 100644 source/_components/sensor.gearbest.markdown create mode 100644 source/images/supported_brands/gearbest.png diff --git a/source/_components/sensor.gearbest.markdown b/source/_components/sensor.gearbest.markdown new file mode 100644 index 00000000000..31803acb752 --- /dev/null +++ b/source/_components/sensor.gearbest.markdown @@ -0,0 +1,72 @@ +--- +layout: page +title: "Gearbest" +description: "Instructions on how to integrate a Gearbest sensor into Home Assistant." +date: 2017-11-13 09:08 +sidebar: true +comments: false +sharing: true +footer: true +logo: gearbest.png +ha_category: Sensor +ha_iot_class: "Cloud Polling" +ha_release: "0.60" +--- + + +The `gearbest` sensor will track the price of a product from [Gearbest](https://www.gearbest.com). This information can be used in, e.g., automations to notify you when a price drops. The update interval for every item is currently set to 2 hours. + +To enable this sensor, add the following lines to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +sensor: + - platform: gearbest + currency: EUR + items: + - url: https://www.gearbest.com/.... +``` + +{% configuration %} +currency: + description: "The currency in which the products should be tracked. Currently supported: USD, EUR, GBP, AUD, CAD, CHF, HKD, CNY, NZD, JPY, RUB, BRL, CLP, NOK, DKK, SEK, KRW, ILS, COP, MXN, PEN, THB, IDR, UAH, PLN, INR, BGN, HUF, RON, TRY, CZK, HRK, MAD, AED, SAR, ZAR, SGD, MYR, TWD, RSD, NGN - if the currency could not be found in the conversion rate list, USD will be used as default. Either an ID or an URL must be present." + required: true + type: string +items: + description: List of products that should be tracked. + required: true + type: map + keys: + id: + description: The ID of the product. + required: false + type: int + url: + description: The URL of the product. + required: false + type: string + name: + description: The name of the item. If not set, it is parsed from the website. + required: false + type: string + currency: + description: Overwrite the currency for the current item. + required: false + type: string +{% endconfiguration %} + +### {% linkable_title Extended example %} + +```yaml +# Example configuration.yaml entry +sensor: + - platform: gearbest + currency: EUR + items: + - url: https://www.gearbest.com/3d-printers-3d-printer-kits/pp_779174.html?wid=21 + name: Creality CR-10 upgraded + currency: USD + - id: 779174 + name: Creality CR-10 upgraded #2 + currency: EUR +``` diff --git a/source/images/supported_brands/gearbest.png b/source/images/supported_brands/gearbest.png new file mode 100644 index 0000000000000000000000000000000000000000..d9789055083a98fe0eb0f73ec581a615b2e2fcdd GIT binary patch literal 5920 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 Jx8@$P{|BqjyzKx0 literal 0 HcmV?d00001 From 39365c2cbec707793628144bb5859cbf2ee0f740 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Sun, 17 Dec 2017 14:56:12 +0100 Subject: [PATCH 60/60] Update title --- source/_posts/2017-12-17-release-60.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_posts/2017-12-17-release-60.markdown b/source/_posts/2017-12-17-release-60.markdown index fd727b23172..bb3ff0867f5 100644 --- a/source/_posts/2017-12-17-release-60.markdown +++ b/source/_posts/2017-12-17-release-60.markdown @@ -1,7 +1,7 @@ --- layout: post title: "0.60: Beckhoff/TwinCAT, WebDav, Gearbest, iAlarm" -description: "If you don't want to create items on our shopping list with HTTP requests, just order pizza!" +description: "Use Home Assistant for your production line or track prices and the stock market." date: 2017-12-17 02:00:00 date_formatted: "December 17, 2017" author: Fabian Affolter